aboutsummaryrefslogtreecommitdiff
path: root/mod
diff options
context:
space:
mode:
Diffstat (limited to 'mod')
m---------mod/autosubscribegroup0
m---------mod/basic_theme5
-rw-r--r--mod/beechat/README23
-rw-r--r--mod/beechat/actions/get_connection.php21
-rw-r--r--mod/beechat/actions/get_details.php21
-rw-r--r--mod/beechat/actions/get_icons.php52
-rw-r--r--mod/beechat/actions/get_state.php21
-rw-r--r--mod/beechat/actions/get_statuses.php41
-rw-r--r--mod/beechat/actions/join_groupchat.php15
-rw-r--r--mod/beechat/actions/leave_groupchat.php12
-rw-r--r--mod/beechat/actions/save_state.php29
-rw-r--r--mod/beechat/classes/BeechatSync.php37
-rw-r--r--mod/beechat/disablechat.php8
-rw-r--r--mod/beechat/enablechat.php8
-rw-r--r--mod/beechat/graphics/icons/bullet_arrow_down.pngbin0 -> 201 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_arrow_up.pngbin0 -> 201 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_black.pngbin0 -> 211 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_blue.pngbin0 -> 289 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_delete.pngbin0 -> 308 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_error.pngbin0 -> 454 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_green.pngbin0 -> 295 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_orange.pngbin0 -> 283 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_pink.pngbin0 -> 286 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_purple.pngbin0 -> 294 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_red.pngbin0 -> 287 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_star.pngbin0 -> 331 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_white.pngbin0 -> 201 bytes
-rw-r--r--mod/beechat/graphics/icons/bullet_yellow.pngbin0 -> 287 bytes
-rw-r--r--mod/beechat/graphics/icons/chat_icon.pngbin0 -> 456 bytes
-rw-r--r--mod/beechat/graphics/icons/cog_edit.pngbin0 -> 865 bytes
-rw-r--r--mod/beechat/graphics/icons/comment_edit.pngbin0 -> 644 bytes
-rw-r--r--mod/beechat/graphics/icons/emoticon_evilgrin.pngbin0 -> 727 bytes
-rw-r--r--mod/beechat/graphics/icons/emoticon_grin.pngbin0 -> 714 bytes
-rw-r--r--mod/beechat/graphics/icons/emoticon_happy.pngbin0 -> 731 bytes
-rw-r--r--mod/beechat/graphics/icons/emoticon_smile.pngbin0 -> 725 bytes
-rw-r--r--mod/beechat/graphics/icons/emoticon_surprised.pngbin0 -> 741 bytes
-rw-r--r--mod/beechat/graphics/icons/emoticon_tongue.pngbin0 -> 727 bytes
-rw-r--r--mod/beechat/graphics/icons/emoticon_unhappy.pngbin0 -> 723 bytes
-rw-r--r--mod/beechat/graphics/icons/emoticon_waii.pngbin0 -> 737 bytes
-rw-r--r--mod/beechat/graphics/icons/emoticon_wink.pngbin0 -> 712 bytes
-rw-r--r--mod/beechat/graphics/icons/heart.pngbin0 -> 749 bytes
-rw-r--r--mod/beechat/graphics/icons/house.pngbin0 -> 806 bytes
-rw-r--r--mod/beechat/graphics/icons/muc_icon.pngbin0 -> 592 bytes
-rw-r--r--mod/beechat/graphics/icons/notification_pink.pngbin0 -> 3140 bytes
-rw-r--r--mod/beechat/graphics/icons/pointer.pngbin0 -> 2833 bytes
-rw-r--r--mod/beechat/graphics/icons/resultset_next.pngbin0 -> 395 bytes
-rw-r--r--mod/beechat/graphics/icons/resultset_previous.pngbin0 -> 389 bytes
-rw-r--r--mod/beechat/graphics/icons/statuses.pngbin0 -> 5857 bytes
-rw-r--r--mod/beechat/graphics/icons/vcard.pngbin0 -> 533 bytes
-rw-r--r--mod/beechat/languages/en.php45
-rw-r--r--mod/beechat/languages/es.php43
-rw-r--r--mod/beechat/languages/fr.php32
-rw-r--r--mod/beechat/lib/beechat.php250
-rw-r--r--mod/beechat/manifest.xml15
-rw-r--r--mod/beechat/migrate.php88
-rw-r--r--mod/beechat/migrategroups.php18
-rw-r--r--mod/beechat/sounds/newmessage.wavbin0 -> 39440 bytes
-rw-r--r--mod/beechat/start.php184
-rw-r--r--mod/beechat/views/default/beechat/beechat.js.php2498
-rw-r--r--mod/beechat/views/default/beechat/beechat.php84
-rw-r--r--mod/beechat/views/default/beechat/beechat.userjs.php54
-rw-r--r--mod/beechat/views/default/beechat/screen.css.php672
-rw-r--r--mod/beechat/views/default/js/b64.js.php74
-rw-r--r--mod/beechat/views/default/js/jquery.cookie.min.js.php10
-rw-r--r--mod/beechat/views/default/js/jquery.localscroll-1.2.7-min.js.php9
-rwxr-xr-xmod/beechat/views/default/js/jquery.scrollTo-min.js.php11
-rwxr-xr-xmod/beechat/views/default/js/jquery.serialScroll-min.js.php10
-rw-r--r--mod/beechat/views/default/js/jquery.tools.min.js.php49
-rw-r--r--mod/beechat/views/default/js/json2.js.php476
-rw-r--r--mod/beechat/views/default/js/md5.js.php261
-rw-r--r--mod/beechat/views/default/js/sha1.js.php207
-rw-r--r--mod/beechat/views/default/js/strophe.min.js.php1
-rw-r--r--mod/beechat/views/default/js/strophe.muc.js300
-rw-r--r--mod/beechat/views/default/js/strophe.muc.js.php300
-rwxr-xr-xmod/beechat/views/default/settings/beechat/edit.php31
-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.php182
-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.php478
-rw-r--r--mod/blog/manifest.xml19
-rw-r--r--mod/blog/start.php302
-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.php37
-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.php15
-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.php33
-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.php50
-rw-r--r--mod/bookmarks/pages/bookmarks/view.php38
-rw-r--r--mod/bookmarks/start.php316
-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
m---------mod/bulk_user_admin0
m---------mod/captcha0
-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
m---------mod/ckeditor0
-rw-r--r--mod/colorbox/COPYING661
-rw-r--r--mod/colorbox/languages/ca.php29
-rw-r--r--mod/colorbox/languages/en.php29
-rw-r--r--mod/colorbox/languages/es.php29
-rw-r--r--mod/colorbox/manifest.xml29
-rw-r--r--mod/colorbox/start.php36
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/README.md318
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/colorbox.ai1811
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox-min.js4
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox.js926
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ajax.html11
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/flash.html8
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/homer.jpgbin0 -> 8917 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/marylou.jpgbin0 -> 55125 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ohoopee1.jpgbin0 -> 74827 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ohoopee2.jpgbin0 -> 117411 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/content/ohoopee3.jpgbin0 -> 71514 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/colorbox.css86
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/border.pngbin0 -> 112 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/controls.pngbin0 -> 2893 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomCenter.pngbin0 -> 111 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomLeft.pngbin0 -> 215 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomRight.pngbin0 -> 217 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleLeft.pngbin0 -> 108 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleRight.pngbin0 -> 108 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopCenter.pngbin0 -> 111 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopLeft.pngbin0 -> 216 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopRight.pngbin0 -> 214 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/loading.gifbin0 -> 9427 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/loading_background.pngbin0 -> 157 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/images/overlay.pngbin0 -> 182 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example1/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/colorbox.css43
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/images/controls.pngbin0 -> 570 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/images/loading.gifbin0 -> 9427 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example2/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/colorbox.css38
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/images/controls.pngbin0 -> 1633 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/images/loading.gifbin0 -> 9427 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example3/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/colorbox.css82
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/border1.pngbin0 -> 1057 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/border2.pngbin0 -> 170 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomCenter.pngbin0 -> 153 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomLeft.pngbin0 -> 473 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomRight.pngbin0 -> 470 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleLeft.pngbin0 -> 148 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleRight.pngbin0 -> 139 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopCenter.pngbin0 -> 153 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopLeft.pngbin0 -> 359 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopRight.pngbin0 -> 465 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/images/loading.gifbin0 -> 9427 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example4/index.html87
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/colorbox.css52
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/border.pngbin0 -> 163 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/controls.pngbin0 -> 2033 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/loading.gifbin0 -> 9427 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/images/loading_background.pngbin0 -> 166 bytes
-rw-r--r--mod/colorbox/vendors/jquery/colorbox/example5/index.html87
-rw-r--r--mod/colorbox/views/default/css/lightbox.php73
-rw-r--r--mod/colorbox/views/default/js/embed/embed.php171
-rw-r--r--mod/colorbox/views/default/js/lightbox.php81
m---------mod/cool_theme0
m---------mod/curatedgroups0
-rw-r--r--mod/custom_index/index.php73
-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.php73
-rw-r--r--mod/custom_index_widgets/index.php66
-rw-r--r--mod/custom_index_widgets/languages/de.php78
-rw-r--r--mod/custom_index_widgets/languages/en.php82
-rw-r--r--mod/custom_index_widgets/languages/es.php78
-rw-r--r--mod/custom_index_widgets/languages/fr.php80
-rw-r--r--mod/custom_index_widgets/manifest.xml21
-rw-r--r--mod/custom_index_widgets/start.php159
-rw-r--r--mod/custom_index_widgets/views/default/admin/appearance/custom_index_widgets.php56
-rw-r--r--mod/custom_index_widgets/views/default/custom_index_widgets/css.php347
-rw-r--r--mod/custom_index_widgets/views/default/custom_index_widgets/footerlinks.php3
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/edit_widgets.php61
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_1rsss.php29
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rbhh.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rbms.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rbsm.php28
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rhhb.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rmsb.php30
-rw-r--r--mod/custom_index_widgets/views/default/page/layouts/index_2rsmb.php30
-rw-r--r--mod/custom_index_widgets/views/default/plugins/custom_index_widgets/settings.php61
-rw-r--r--mod/custom_index_widgets/views/default/widgets/cloud_generic_index/content.php59
-rw-r--r--mod/custom_index_widgets/views/default/widgets/cloud_generic_index/edit.php120
-rw-r--r--mod/custom_index_widgets/views/default/widgets/feed_reader_index/content.php8
-rw-r--r--mod/custom_index_widgets/views/default/widgets/feed_reader_index/edit.php5
-rw-r--r--mod/custom_index_widgets/views/default/widgets/inline_content_index/content.php7
-rw-r--r--mod/custom_index_widgets/views/default/widgets/inline_content_index/edit.php46
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_activity_index/content.php20
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_activity_index/edit.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_album_index/content.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_album_index/edit.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_blogs_index/content.php43
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_blogs_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/content.php43
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_events_index/content.php95
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_events_index/edit.php96
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_files_index/content.php44
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_files_index/edit.php86
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_generic_index/content.php47
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_generic_index/edit.php103
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_groups_index/content.php21
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_groups_index/edit.php63
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/content.php50
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/edit.php86
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_members_index/content.php20
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_members_index/edit.php79
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_news_index/content.php47
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_news_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_pages_index/content.php45
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_pages_index/edit.php86
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_photos_index/content.php25
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_photos_index/edit.php64
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_tasks_index/content.php45
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_tasks_index/edit.php85
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_wire_index/content.php17
-rw-r--r--mod/custom_index_widgets/views/default/widgets/latest_wire_index/edit.php62
-rw-r--r--mod/custom_index_widgets/views/default/widgets/login_index/content.php15
-rw-r--r--mod/custom_index_widgets/views/default/widgets/login_index/edit.php27
-rw-r--r--mod/custom_index_widgets/views/default/widgets/rich_media_index/content.php27
-rw-r--r--mod/custom_index_widgets/views/default/widgets/rich_media_index/edit.php78
-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.php69
-rw-r--r--mod/developers/manifest.xml19
-rw-r--r--mod/developers/start.php209
-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/AUTHORS2
-rwxr-xr-xmod/dokuwiki/COPYING340
-rw-r--r--mod/dokuwiki/README31
-rw-r--r--mod/dokuwiki/index.php17
-rw-r--r--mod/dokuwiki/languages/ca.php18
-rwxr-xr-xmod/dokuwiki/languages/de.php21
-rwxr-xr-xmod/dokuwiki/languages/en.php32
-rw-r--r--mod/dokuwiki/languages/es.php18
-rw-r--r--mod/dokuwiki/languages/fr.php12
-rw-r--r--mod/dokuwiki/languages/gl.php23
-rwxr-xr-xmod/dokuwiki/languages/pl.php21
-rw-r--r--mod/dokuwiki/languages/pt.php23
-rw-r--r--mod/dokuwiki/lib/dokuwiki.php60
-rw-r--r--mod/dokuwiki/manifest.xml21
-rw-r--r--mod/dokuwiki/start.php168
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/COPYING340
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/README9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/VERSION1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/dwpage.php378
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/indexer.php172
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php134
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf143
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php156
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/entities.conf22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf125
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/license.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/local.php43
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php57
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mime.conf52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/msg8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf8004
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/_dummy1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/index/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/locks/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/media/wiki/dokuwiki-128.pngbin0 -> 33615 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/meta/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt66
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt488
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/tmp/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/doku.php109
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/feed.php353
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php1066
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php146
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php76
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php573
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php817
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/JSON.php624
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php3116
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php10849
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php918
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php475
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/actions.php639
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php2347
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth.php1099
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php403
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php352
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php357
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php942
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php411
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php324
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php521
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/cache.php292
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/changelog.php474
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php361
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/common.php1549
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/confutils.php320
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/events.php202
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php1572
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/form.php918
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php722
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi.php4644
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php1409
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php957
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php197
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php473
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php133
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php480
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php157
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php225
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php164
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php1171
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php194
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php282
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php341
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php114
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php185
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php110
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php217
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php188
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php212
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php126
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php186
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php124
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php299
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php244
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php315
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php250
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php212
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php272
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php185
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php289
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php126
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php198
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php164
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php395
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php209
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php160
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php141
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php463
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php97
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php506
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php296
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php1011
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php198
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php104
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php203
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php123
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php128
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php212
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php122
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php138
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php983
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php1031
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php150
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php329
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php282
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php310
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php218
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php130
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php318
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php191
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php387
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php898
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php137
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php143
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php151
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php227
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php171
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php164
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php145
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php475
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php351
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php358
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php111
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php174
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php614
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php496
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php302
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php213
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php222
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php1114
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php141
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php176
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php256
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php199
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php277
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php485
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php143
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php299
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php237
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php151
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php406
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php233
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php98
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php290
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php122
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php170
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php295
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php165
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php160
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php192
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php140
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php194
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php317
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php84
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php868
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php375
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php300
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php133
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php201
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php185
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php456
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php129
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php121
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php369
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php157
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php124
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php436
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php144
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/html.php1608
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/httputils.php199
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/indexer.php705
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php385
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/init.php598
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/io.php593
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php75
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php223
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php250
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt76
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt106
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt944
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt87
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt125
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php257
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt125
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php243
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php280
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php254
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php262
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt171
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php214
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php223
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt445
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php248
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt87
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php258
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt112
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php243
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt246
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php224
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php126
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php200
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php210
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php240
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt119
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php230
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php229
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php207
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php244
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php229
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php220
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php253
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php260
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt130
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php248
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt89
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php247
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt55
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php237
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt141
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php251
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php258
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt93
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php227
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php162
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php224
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php261
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt129
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php249
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php244
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php106
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php252
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt13
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php230
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/mail.php266
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/media.php1102
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php537
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php1697
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php600
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php483
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php956
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php322
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php1142
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php90
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php672
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/plugin.php248
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php172
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/search.php630
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/template.php1413
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php241
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/utf8.php1657
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/index.php8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/install.php516
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as329
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/README4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.flabin0 -> 1812480 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php370
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php330
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php375
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php397
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php105
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swfbin0 -> 64561 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php921
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.pngbin0 -> 1336 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.pngbin0 -> 1761 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.pngbin0 -> 1415 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.pngbin0 -> 1420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.pngbin0 -> 1598 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.pngbin0 -> 1850 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gifbin0 -> 273 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gifbin0 -> 274 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/at.gifbin0 -> 57 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gifbin0 -> 42 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/close.pngbin0 -> 1345 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/del.pngbin0 -> 433 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/diff.pngbin0 -> 219 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gifbin0 -> 142 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/error.pngbin0 -> 706 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.pngbin0 -> 720 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.pngbin0 -> 774 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.pngbin0 -> 717 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.pngbin0 -> 859 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.pngbin0 -> 808 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.pngbin0 -> 843 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.pngbin0 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.pngbin0 -> 659 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.pngbin0 -> 720 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.pngbin0 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.pngbin0 -> 739 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.pngbin0 -> 809 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.pngbin0 -> 465 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.pngbin0 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.pngbin0 -> 807 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.pngbin0 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.pngbin0 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.pngbin0 -> 744 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.pngbin0 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.pngbin0 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.pngbin0 -> 663 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.pngbin0 -> 698 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.pngbin0 -> 762 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.pngbin0 -> 534 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.pngbin0 -> 714 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.pngbin0 -> 631 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.pngbin0 -> 828 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.pngbin0 -> 638 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.pngbin0 -> 474 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.pngbin0 -> 843 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.pngbin0 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.pngbin0 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.pngbin0 -> 744 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.pngbin0 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.pngbin0 -> 747 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.pngbin0 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.pngbin0 -> 542 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.pngbin0 -> 731 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.pngbin0 -> 475 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.pngbin0 -> 874 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/history.pngbin0 -> 202 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/info.pngbin0 -> 783 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.pngbin0 -> 1089 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gifbin0 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gifbin0 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gifbin0 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gifbin0 -> 85 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gifbin0 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gifbin0 -> 166 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gifbin0 -> 980 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gifbin0 -> 1100 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gifbin0 -> 330 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gifbin0 -> 886 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gifbin0 -> 909 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gifbin0 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gifbin0 -> 87 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.pngbin0 -> 5281 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.pngbin0 -> 5460 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.pngbin0 -> 5145 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.pngbin0 -> 4880 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.pngbin0 -> 5083 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.pngbin0 -> 4739 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.pngbin0 -> 958 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.pngbin0 -> 1748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.pngbin0 -> 4962 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.pngbin0 -> 678 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.pngbin0 -> 686 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.pngbin0 -> 663 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.pngbin0 -> 658 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.pngbin0 -> 661 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.pngbin0 -> 629 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.pngbin0 -> 728 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.pngbin0 -> 839 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.pngbin0 -> 621 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gifbin0 -> 64 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gifbin0 -> 67 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gifbin0 -> 1876 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.pngbin0 -> 615 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gifbin0 -> 858 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.pngbin0 -> 698 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/notify.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/ns.pngbin0 -> 853 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/page.pngbin0 -> 635 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.pngbin0 -> 450 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gifbin0 -> 860 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gifbin0 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gifbin0 -> 1421 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gifbin0 -> 1435 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gifbin0 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gifbin0 -> 172 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gifbin0 -> 172 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gifbin0 -> 498 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gifbin0 -> 990 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gifbin0 -> 992 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gifbin0 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gifbin0 -> 236 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gifbin0 -> 236 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gifbin0 -> 590 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gifbin0 -> 176 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gifbin0 -> 991 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gifbin0 -> 336 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gifbin0 -> 349 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gifbin0 -> 248 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gifbin0 -> 176 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gifbin0 -> 650 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gifbin0 -> 485 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gifbin0 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gifbin0 -> 231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gifbin0 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gifbin0 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gifbin0 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gifbin0 -> 238 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gifbin0 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/success.pngbin0 -> 816 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gifbin0 -> 875 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.pngbin0 -> 433 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.pngbin0 -> 619 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.pngbin0 -> 360 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.pngbin0 -> 420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.pngbin0 -> 442 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.pngbin0 -> 452 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.pngbin0 -> 432 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.pngbin0 -> 440 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.pngbin0 -> 426 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.pngbin0 -> 538 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.pngbin0 -> 520 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.pngbin0 -> 329 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.pngbin0 -> 625 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.pngbin0 -> 322 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.pngbin0 -> 579 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.pngbin0 -> 962 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.pngbin0 -> 385 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.pngbin0 -> 403 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.pngbin0 -> 569 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.pngbin0 -> 415 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.pngbin0 -> 383 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.pngbin0 -> 375 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/trash.pngbin0 -> 476 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/up.pngbin0 -> 376 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gifbin0 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php809
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php62
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php24
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php43
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php34
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php35
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php45
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php38
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php37
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php46
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php40
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt11
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php39
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.pngbin0 -> 753 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.pngbin0 -> 853 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.pngbin0 -> 635 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.pngbin0 -> 706 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css96
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css274
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css272
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php287
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING340
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php169
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php453
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php196
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog207
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gifbin0 -> 64 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gifbin0 -> 578 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gifbin0 -> 62 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gifbin0 -> 352 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gifbin0 -> 572 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gifbin0 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gifbin0 -> 354 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gifbin0 -> 69 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gifbin0 -> 66 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gifbin0 -> 66 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gifbin0 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gifbin0 -> 85 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gifbin0 -> 861 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gifbin0 -> 870 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gifbin0 -> 565 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gifbin0 -> 89 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gifbin0 -> 88 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gifbin0 -> 275 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gifbin0 -> 1829 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gifbin0 -> 420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gifbin0 -> 81 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gifbin0 -> 74 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php5748
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js640
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js71
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js69
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php29
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js101
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js152
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css190
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php720
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php70
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php259
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.pngbin0 -> 2250 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.pngbin0 -> 2520 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.pngbin0 -> 1366 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.pngbin0 -> 1461 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.pngbin0 -> 1441 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.pngbin0 -> 1870 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.pngbin0 -> 2909 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.pngbin0 -> 3249 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php191
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt255
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php391
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.pngbin0 -> 3320 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php1232
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml158
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php96
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php202
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php10
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt5
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php21
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php26
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php25
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php22
-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.php17
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php16
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php28
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php19
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php4
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php338
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gifbin0 -> 1574 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php72
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt29
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3bin0 -> 2508 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js658
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swfbin0 -> 2198 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gifbin0 -> 2295 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gifbin0 -> 3428 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gifbin0 -> 591 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css173
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gifbin0 -> 10119 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css156
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.pngbin0 -> 16746 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js136
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js965
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js974
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js1123
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js153
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js4874
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js275
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js59
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js568
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.pngbin0 -> 451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.pngbin0 -> 450 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcfbin0 -> 6114 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.pngbin0 -> 92480 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.pngbin0 -> 9760 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.pngbin0 -> 344 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css545
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.pngbin0 -> 178955 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.pngbin0 -> 1117 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gifbin0 -> 49 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.pngbin0 -> 41109 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.pngbin0 -> 1943 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.pngbin0 -> 9215 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.pngbin0 -> 1093 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css65
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.pngbin0 -> 734 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css122
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css354
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.pngbin0 -> 1071 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.pngbin0 -> 74839 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpgbin0 -> 6779 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpgbin0 -> 2215 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css168
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.pngbin0 -> 1117 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpgbin0 -> 48642 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css23
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css130
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt32
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.pngbin0 -> 501 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.pngbin0 -> 2999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.pngbin0 -> 1824 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.pngbin0 -> 3735 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.pngbin0 -> 16331 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.pngbin0 -> 247 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gifbin0 -> 1364 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpgbin0 -> 30942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.pngbin0 -> 7144 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gifbin0 -> 4237 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.pngbin0 -> 594 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpgbin0 -> 31239 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css139
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.pngbin0 -> 5958 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.pngbin0 -> 5648 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.pngbin0 -> 11708 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.pngbin0 -> 397 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.pngbin0 -> 401 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7zbin0 -> 2889 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.pngbin0 -> 27159 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.pngbin0 -> 27171 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.pngbin0 -> 11222 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.pngbin0 -> 654 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css584
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gifbin0 -> 1716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpgbin0 -> 3571 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gifbin0 -> 3180 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css166
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.pngbin0 -> 15049 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.pngbin0 -> 389 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.pngbin0 -> 373 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.pngbin0 -> 9066 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.icobin0 -> 318 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.pngbin0 -> 1312 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.pngbin0 -> 384 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css585
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html157
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpgbin0 -> 3648 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.pngbin0 -> 30926 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.pngbin0 -> 34238 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.pngbin0 -> 49918 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css162
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.pngbin0 -> 81350 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.pngbin0 -> 12943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.pngbin0 -> 41837 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpgbin0 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.pngbin0 -> 62136 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css22
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.pngbin0 -> 226 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css163
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.pngbin0 -> 32851 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.pngbin0 -> 604 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.pngbin0 -> 605 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.pngbin0 -> 51209 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.icobin0 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.pngbin0 -> 14675 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.pngbin0 -> 309 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt36
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.pngbin0 -> 1705 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.pngbin0 -> 1700 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.pngbin0 -> 358052 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.icobin0 -> 1150 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.pngbin0 -> 13015 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.pngbin0 -> 309 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css583
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt31
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php102
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.pngbin0 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.pngbin0 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.pngbin0 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.pngbin0 -> 451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.pngbin0 -> 450 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcfbin0 -> 6114 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.pngbin0 -> 92480 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.icobin0 -> 1406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpgbin0 -> 7126 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.pngbin0 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.pngbin0 -> 344 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css525
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js2846
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.pngbin0 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt32
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.pngbin0 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.pngbin0 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc42
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.icobin0 -> 3638 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html100
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.pngbin0 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.pngbin0 -> 269 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.pngbin0 -> 273 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.pngbin0 -> 14732 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.pngbin0 -> 670 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.pngbin0 -> 422 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.pngbin0 -> 2999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.pngbin0 -> 447 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.pngbin0 -> 15020 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.pngbin0 -> 993 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css543
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css9
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpgbin0 -> 9069 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gifbin0 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gifbin0 -> 10119 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gifbin0 -> 5087 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.pngbin0 -> 4494 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc42
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.pngbin0 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.pngbin0 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.pngbin0 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.pngbin0 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.pngbin0 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.pngbin0 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.pngbin0 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.pngbin0 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.pngbin0 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gifbin0 -> 1373 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gifbin0 -> 920 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.pngbin0 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.pngbin0 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.pngbin0 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.pngbin0 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.pngbin0 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpgbin0 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css23
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gifbin0 -> 1373 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.pngbin0 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.pngbin0 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.pngbin0 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.pngbin0 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.pngbin0 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.pngbin0 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.pngbin0 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.pngbin0 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.pngbin0 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.pngbin0 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.pngbin0 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css7
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css15
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.pngbin0 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.pngbin0 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css221
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.pngbin0 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.pngbin0 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css1
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gifbin0 -> 3143 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css3
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js2812
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gifbin0 -> 1128 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.pngbin0 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.pngbin0 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.pngbin0 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css410
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.pngbin0 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.pngbin0 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php281
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js207
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php627
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.pngbin0 -> 733 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php14
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php60
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php55
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php6
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php7
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php18
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php49
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php57
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php56
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt2
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php48
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php58
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php47
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php52
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php51
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt1
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css20
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js112
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js99
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js442
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js176
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js146
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js116
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js282
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js351
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc53
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js561
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js226
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js252
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js136
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css63
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html12
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css113
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php8
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css796
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php89
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gifbin0 -> 50 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gifbin0 -> 1231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.pngbin0 -> 299 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gifbin0 -> 187 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.pngbin0 -> 427 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gifbin0 -> 269 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.pngbin0 -> 280 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.pngbin0 -> 321 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.pngbin0 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.icobin0 -> 7406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.pngbin0 -> 155 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gifbin0 -> 942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gifbin0 -> 918 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gifbin0 -> 34 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gifbin0 -> 810 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gifbin0 -> 223 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php69
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php135
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php54
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php88
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php44
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php50
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css238
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css119
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css189
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css9
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini67
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php98
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css43
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css68
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css835
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php89
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html41
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.pngbin0 -> 1138 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.pngbin0 -> 1123 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gifbin0 -> 50 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gifbin0 -> 1231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.pngbin0 -> 299 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gifbin0 -> 187 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.pngbin0 -> 427 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gifbin0 -> 207 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.pngbin0 -> 280 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.pngbin0 -> 321 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.pngbin0 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.icobin0 -> 7406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.pngbin0 -> 155 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gifbin0 -> 942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gifbin0 -> 918 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gifbin0 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gifbin0 -> 810 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gifbin0 -> 223 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css79
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php27
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php121
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css205
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php44
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css238
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css119
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini67
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php68
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/css.php12
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/grouppage.php9
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/index.php13
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/metatags.php5
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/sidebar.php10
-rw-r--r--mod/dokuwiki/views/default/object/dokuwiki.php19
-rw-r--r--mod/dokuwiki/views/default/river/dokuwiki.php17
m---------mod/editablecomments0
m---------mod/elgg-favorites0
-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.php165
-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.php147
-rw-r--r--mod/embed/views/default/navigation/menu/embed.php18
-rw-r--r--mod/event_calendar/CHANGES.txt154
-rw-r--r--mod/event_calendar/CONTRIBUTIONS.txt7
-rw-r--r--mod/event_calendar/README.txt89
-rw-r--r--mod/event_calendar/actions/event_calendar/add_personal.php17
-rw-r--r--mod/event_calendar/actions/event_calendar/add_to_group.php10
-rw-r--r--mod/event_calendar/actions/event_calendar/add_to_group_members.php15
-rw-r--r--mod/event_calendar/actions/event_calendar/addtocalendar.php33
-rw-r--r--mod/event_calendar/actions/event_calendar/delete.php21
-rw-r--r--mod/event_calendar/actions/event_calendar/edit.php55
-rw-r--r--mod/event_calendar/actions/event_calendar/join_conference.php20
-rw-r--r--mod/event_calendar/actions/event_calendar/killrequest.php23
-rw-r--r--mod/event_calendar/actions/event_calendar/manage_subscribers.php26
-rw-r--r--mod/event_calendar/actions/event_calendar/modify_full_calendar.php24
-rw-r--r--mod/event_calendar/actions/event_calendar/remove_from_group.php8
-rw-r--r--mod/event_calendar/actions/event_calendar/remove_from_group_members.php15
-rw-r--r--mod/event_calendar/actions/event_calendar/remove_personal.php12
-rw-r--r--mod/event_calendar/actions/event_calendar/request_personal_calendar.php16
-rw-r--r--mod/event_calendar/actions/event_calendar/toggle_personal_calendar.php40
-rw-r--r--mod/event_calendar/activate.php4
-rw-r--r--mod/event_calendar/images/calendar.gifbin0 -> 269 bytes
-rw-r--r--mod/event_calendar/images/event_icon.gifbin0 -> 1254 bytes
-rw-r--r--mod/event_calendar/images/event_icon_old.gifbin0 -> 1531 bytes
-rw-r--r--mod/event_calendar/images/ics.pngbin0 -> 344 bytes
-rw-r--r--mod/event_calendar/images/river_icon_event.gifbin0 -> 586 bytes
-rw-r--r--mod/event_calendar/languages/ca.php143
-rw-r--r--mod/event_calendar/languages/en.php360
-rw-r--r--mod/event_calendar/languages/es.php215
-rw-r--r--mod/event_calendar/languages/fr.php124
-rw-r--r--mod/event_calendar/languages/ru.php365
-rw-r--r--mod/event_calendar/manifest.xml16
-rw-r--r--mod/event_calendar/models/model.php2518
-rw-r--r--mod/event_calendar/start.php414
-rw-r--r--mod/event_calendar/views/default/css/elements/forms/datepicker_multi.php39
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_footer.php5
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_header.php12
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_item_view.php26
-rw-r--r--mod/event_calendar/views/default/event_calendar/agenda_view.php34
-rw-r--r--mod/event_calendar/views/default/event_calendar/calendar.php70
-rw-r--r--mod/event_calendar/views/default/event_calendar/calendar_toggle.php18
-rw-r--r--mod/event_calendar/views/default/event_calendar/conference_button.php33
-rw-r--r--mod/event_calendar/views/default/event_calendar/container.php28
-rw-r--r--mod/event_calendar/views/default/event_calendar/css.php264
-rw-r--r--mod/event_calendar/views/default/event_calendar/datetime_edit.php46
-rw-r--r--mod/event_calendar/views/default/event_calendar/entities/entity_list.php66
-rw-r--r--mod/event_calendar/views/default/event_calendar/entities/gallery.php44
-rw-r--r--mod/event_calendar/views/default/event_calendar/entities/gallery_item.php63
-rw-r--r--mod/event_calendar/views/default/event_calendar/filter_menu.php78
-rw-r--r--mod/event_calendar/views/default/event_calendar/forms/add_to_group.php74
-rw-r--r--mod/event_calendar/views/default/event_calendar/full_calendar_view.php200
-rw-r--r--mod/event_calendar/views/default/event_calendar/group_module.php37
-rw-r--r--mod/event_calendar/views/default/event_calendar/groupprofile_calendar.php33
-rw-r--r--mod/event_calendar/views/default/event_calendar/groupprofile_calendar_deprecated.php44
-rw-r--r--mod/event_calendar/views/default/event_calendar/input/date_local.php55
-rw-r--r--mod/event_calendar/views/default/event_calendar/metatags.php2
-rw-r--r--mod/event_calendar/views/default/event_calendar/nav.php38
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_footer.php4
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_header.php15
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_item_view.php27
-rw-r--r--mod/event_calendar/views/default/event_calendar/paged_view.php36
-rw-r--r--mod/event_calendar/views/default/event_calendar/personal_manage_section.php20
-rw-r--r--mod/event_calendar/views/default/event_calendar/personal_toggle_js.php20
-rw-r--r--mod/event_calendar/views/default/event_calendar/region_select.php21
-rw-r--r--mod/event_calendar/views/default/event_calendar/reminder_section.php28
-rw-r--r--mod/event_calendar/views/default/event_calendar/repeat_form_element.php32
-rw-r--r--mod/event_calendar/views/default/event_calendar/review_requests.php30
-rw-r--r--mod/event_calendar/views/default/event_calendar/schedule_section.php22
-rw-r--r--mod/event_calendar/views/default/event_calendar/share_section.php26
-rw-r--r--mod/event_calendar/views/default/event_calendar/show_events.php64
-rw-r--r--mod/event_calendar/views/default/event_calendar/strapline.php18
-rw-r--r--mod/event_calendar/views/default/forms/event_calendar/edit.php233
-rw-r--r--mod/event_calendar/views/default/forms/event_calendar/manage_subscribers.php14
-rw-r--r--mod/event_calendar/views/default/fullcalendar/css.php618
-rw-r--r--mod/event_calendar/views/default/fullcalendar/fullcalendar.print.css61
-rw-r--r--mod/event_calendar/views/default/icon/object/event_calendar/small.php3
-rw-r--r--mod/event_calendar/views/default/input/datepicker_inline.php83
-rw-r--r--mod/event_calendar/views/default/input/timepicker.php51
-rw-r--r--mod/event_calendar/views/default/input/timepicker_old.php38
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/event_calendar.php171
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/fullcalendar.min.js114
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/fullcalendar.php5227
-rw-r--r--mod/event_calendar/views/default/js/event_calendar/gcal.js112
-rw-r--r--mod/event_calendar/views/default/object/event_calendar.php115
-rw-r--r--mod/event_calendar/views/default/plugins/event_calendar/settings.php474
-rw-r--r--mod/event_calendar/views/default/river/object/event_calendar/create.php13
-rw-r--r--mod/event_calendar/views/default/river/object/event_calendar/update.php13
-rw-r--r--mod/event_calendar/views/default/widgets/event_calendar/content.php43
-rw-r--r--mod/event_calendar/views/default/widgets/event_calendar/edit.php35
-rw-r--r--mod/event_calendar/views/ical/event_calendar/show_events.php7
-rw-r--r--mod/event_calendar/views/ical/object/event_calendar.php44
-rw-r--r--mod/event_calendar/views/ical/page/default.php17
-rw-r--r--mod/event_calendar/views/ical/page/layouts/default.php2
-rw-r--r--mod/event_calendar/views/rss/event_calendar/show_events.php24
-rw-r--r--mod/event_calendar/views/rss/object/event_calendar.php61
m---------mod/event_connect0
-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
m---------mod/faq0
-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.php222
-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.php57
-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.php33
-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
m---------mod/foafssl0
-rw-r--r--mod/friendrequest/actions/friendrequest/decline.php12
-rw-r--r--mod/friendrequest/actions/friends/add.php53
-rw-r--r--mod/friendrequest/actions/friends/remove.php36
-rw-r--r--mod/friendrequest/languages/ca.php20
-rw-r--r--mod/friendrequest/languages/en.php31
-rw-r--r--mod/friendrequest/languages/es.php22
-rw-r--r--mod/friendrequest/languages/gl.php31
-rw-r--r--mod/friendrequest/languages/pt.php31
-rw-r--r--mod/friendrequest/languages/sr.php31
-rw-r--r--mod/friendrequest/manifest.xml16
-rw-r--r--mod/friendrequest/start.php151
-rw-r--r--mod/friendrequest/views/default/friendrequest/requests.php47
-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
m---------mod/graphstats0
-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.php235
-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.php56
-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.php235
-rw-r--r--mod/groups/lib/groups.php590
-rw-r--r--mod/groups/manifest.xml18
-rw-r--r--mod/groups/start.php1073
-rw-r--r--mod/groups/topicposts.php19
-rw-r--r--mod/groups/upgrades/2011030101.php66
-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.php178
-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.php76
-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.php64
-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.php101
-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/habitorio_theme/graphics/button.pngbin0 -> 1092 bytes
-rw-r--r--mod/habitorio_theme/graphics/elgg_sprites.pngbin0 -> 19372 bytes
-rw-r--r--mod/habitorio_theme/graphics/login.pngbin0 -> 537 bytes
-rw-r--r--mod/habitorio_theme/graphics/logo.pngbin0 -> 3067 bytes
-rw-r--r--mod/habitorio_theme/graphics/menu.gifbin0 -> 3008 bytes
-rw-r--r--mod/habitorio_theme/graphics/menu.pngbin0 -> 2682 bytes
-rw-r--r--mod/habitorio_theme/graphics/people.pngbin0 -> 143134 bytes
-rw-r--r--mod/habitorio_theme/graphics/preset1.pngbin0 -> 131 bytes
-rw-r--r--mod/habitorio_theme/graphics/preset2.pngbin0 -> 131 bytes
-rw-r--r--mod/habitorio_theme/graphics/preset3.pngbin0 -> 131 bytes
-rw-r--r--mod/habitorio_theme/graphics/preset4.pngbin0 -> 125 bytes
-rw-r--r--mod/habitorio_theme/graphics/preset5.pngbin0 -> 131 bytes
-rw-r--r--mod/habitorio_theme/graphics/preset6.pngbin0 -> 131 bytes
-rw-r--r--mod/habitorio_theme/graphics/preset7.pngbin0 -> 125 bytes
-rw-r--r--mod/habitorio_theme/graphics/purity_01.pngbin0 -> 5204 bytes
-rw-r--r--mod/habitorio_theme/graphics/purity_02.pngbin0 -> 550 bytes
-rw-r--r--mod/habitorio_theme/graphics/purity_03.pngbin0 -> 2480 bytes
-rw-r--r--mod/habitorio_theme/graphics/search.gifbin0 -> 819 bytes
-rw-r--r--mod/habitorio_theme/graphics/search.pngbin0 -> 1589 bytes
-rw-r--r--mod/habitorio_theme/graphics/sidebar_background.gifbin0 -> 1355 bytes
-rw-r--r--mod/habitorio_theme/graphics/spacer.gifbin0 -> 175 bytes
-rw-r--r--mod/habitorio_theme/graphics/topbar.gifbin0 -> 2756 bytes
-rw-r--r--mod/habitorio_theme/manifest.xml18
-rw-r--r--mod/habitorio_theme/start.php84
-rw-r--r--mod/habitorio_theme/views/default/css/admin.php1443
-rw-r--r--mod/habitorio_theme/views/default/css/elements/OOCSS_LICENSE30
-rw-r--r--mod/habitorio_theme/views/default/css/elements/buttons.php132
-rw-r--r--mod/habitorio_theme/views/default/css/elements/components.php286
-rw-r--r--mod/habitorio_theme/views/default/css/elements/core.php117
-rw-r--r--mod/habitorio_theme/views/default/css/elements/forms.php298
-rw-r--r--mod/habitorio_theme/views/default/css/elements/grid.php54
-rw-r--r--mod/habitorio_theme/views/default/css/elements/helpers.php160
-rw-r--r--mod/habitorio_theme/views/default/css/elements/icons.php348
-rw-r--r--mod/habitorio_theme/views/default/css/elements/layout.php142
-rw-r--r--mod/habitorio_theme/views/default/css/elements/misc.php62
-rw-r--r--mod/habitorio_theme/views/default/css/elements/modules.php194
-rw-r--r--mod/habitorio_theme/views/default/css/elements/navigation.php559
-rw-r--r--mod/habitorio_theme/views/default/css/elements/reset.php79
-rw-r--r--mod/habitorio_theme/views/default/css/elements/typography.php155
-rw-r--r--mod/habitorio_theme/views/default/css/elgg.php68
-rw-r--r--mod/habitorio_theme/views/default/css/ie.php8
-rw-r--r--mod/habitorio_theme/views/default/css/ie6.php12
-rw-r--r--mod/habitorio_theme/views/default/css/ie7.php65
-rw-r--r--mod/habitorio_theme/views/default/css/lightbox.php371
-rw-r--r--mod/habitorio_theme/views/default/css/walled_garden.php81
-rw-r--r--mod/habitorio_theme/views/default/custom_index/css.php17
-rw-r--r--mod/habitorio_theme/views/default/habitorio_theme/css.php178
-rw-r--r--mod/habitorio_theme/views/default/habitorio_theme/leftside.php5
-rw-r--r--mod/habitorio_theme/views/default/habitorio_theme/rightside.php5
-rw-r--r--mod/habitorio_theme/views/default/page/default.php58
-rw-r--r--mod/habitorio_theme/views/default/page/elements/footer.php12
-rw-r--r--mod/habitorio_theme/views/default/page/elements/header.php22
-rw-r--r--mod/habitorio_theme/views/default/page/elements/header_logo.php21
-rw-r--r--mod/habitorio_theme/views/default/page/elements/messages.php27
-rw-r--r--mod/habitorio_theme/views/default/page/elements/topbar.php25
-rw-r--r--mod/habitorio_theme/views/default/page/layouts/custom_index.php48
-rw-r--r--mod/habitorio_theme/views/default/plugins/purity_theme/settings.php24
-rw-r--r--mod/html5/.gitignore3
-rw-r--r--mod/html5/README7
-rw-r--r--mod/html5/manifest.xml15
-rw-r--r--mod/html5/start.php11
-rw-r--r--mod/html5/vendors/Modernizr-1.5.min.js28
-rw-r--r--mod/html5/vendors/jquery/jquery.placeholder-1.0.1.js58
-rw-r--r--mod/html5/views/default/html/img.php11
-rw-r--r--mod/html5/views/default/html5/css.php2
-rw-r--r--mod/html5/views/default/html5/theme_preview/forms/inputs.php101
-rw-r--r--mod/html5/views/default/input/color.php12
-rw-r--r--mod/html5/views/default/input/datetime-local.php14
-rw-r--r--mod/html5/views/default/input/datetime.php15
-rw-r--r--mod/html5/views/default/input/image.php11
-rw-r--r--mod/html5/views/default/input/month.php16
-rw-r--r--mod/html5/views/default/input/number.php11
-rw-r--r--mod/html5/views/default/input/option.php13
-rw-r--r--mod/html5/views/default/input/range.php13
-rw-r--r--mod/html5/views/default/input/search.php13
-rw-r--r--mod/html5/views/default/input/tel.php12
-rw-r--r--mod/html5/views/default/input/time.php13
-rw-r--r--mod/html5/views/default/input/week.php13
-rw-r--r--mod/html5/views/default/output/friendlytime.php14
-rw-r--r--mod/html5/views/default/page/admin.php68
-rw-r--r--mod/html5/views/default/page/default.php78
-rw-r--r--mod/html5/views/default/page/elements/footer.php23
-rw-r--r--mod/html5/views/default/page/elements/head.php78
-rw-r--r--mod/html5/views/default/page/layouts/admin.php42
-rw-r--r--mod/html5/views/default/page/layouts/one_sidebar.php50
-rw-r--r--mod/html5/views/default/page/layouts/two_sidebar.php45
-rw-r--r--mod/html5/views/default/page/walled_garden.php42
-rw-r--r--mod/html5/views/default/search/search_box.php43
-rw-r--r--mod/htmlawed/manifest.xml17
-rw-r--r--mod/htmlawed/start.php163
-rw-r--r--mod/htmlawed/tests/tags.php47
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed.php723
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawedTest.php650
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed_README.htm2178
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed_README.txt1734
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed_TESTCASE.txt450
-rw-r--r--mod/identica/graphics/identica.pngbin0 -> 488 bytes
-rw-r--r--mod/identica/graphics/thewire_speech_bubble.gifbin0 -> 560 bytes
-rw-r--r--mod/identica/languages/ca.php10
-rw-r--r--mod/identica/languages/en.php16
-rw-r--r--mod/identica/languages/es.php12
-rw-r--r--mod/identica/manifest.xml17
-rw-r--r--mod/identica/start.php16
-rw-r--r--mod/identica/views/default/identica/css.php63
-rw-r--r--mod/identica/views/default/identica/js.php40
-rw-r--r--mod/identica/views/default/js/friendly_time.php50
-rw-r--r--mod/identica/views/default/widgets/identica/content.php30
-rw-r--r--mod/identica/views/default/widgets/identica/edit.php16
m---------mod/infinite_scroll0
-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
m---------mod/landing0
-rw-r--r--mod/languages/README.txt9
-rw-r--r--mod/languages/languages/ca/ca.blog.php54
-rw-r--r--mod/languages/languages/ca/ca.bookmarks.php51
-rw-r--r--mod/languages/languages/ca/ca.categories.php12
-rw-r--r--mod/languages/languages/ca/ca.core.php994
-rw-r--r--mod/languages/languages/ca/ca.custom_index.php11
-rw-r--r--mod/languages/languages/ca/ca.dashboard.php11
-rw-r--r--mod/languages/languages/ca/ca.developers.php47
-rw-r--r--mod/languages/languages/ca/ca.diagnostics.php30
-rw-r--r--mod/languages/languages/ca/ca.embed.php14
-rw-r--r--mod/languages/languages/ca/ca.externalpages.php15
-rw-r--r--mod/languages/languages/ca/ca.file.php74
-rw-r--r--mod/languages/languages/ca/ca.garbagecollector.php17
-rw-r--r--mod/languages/languages/ca/ca.groups.php219
-rw-r--r--mod/languages/languages/ca/ca.invitefriends.php26
-rw-r--r--mod/languages/languages/ca/ca.likes.php34
-rw-r--r--mod/languages/languages/ca/ca.logbrowser20
-rw-r--r--mod/languages/languages/ca/ca.logrotate.php20
-rw-r--r--mod/languages/languages/ca/ca.members.php13
-rw-r--r--mod/languages/languages/ca/ca.messageboard.php43
-rw-r--r--mod/languages/languages/ca/ca.messages.php64
-rw-r--r--mod/languages/languages/ca/ca.notifications.php16
-rw-r--r--mod/languages/languages/ca/ca.pages.php62
-rw-r--r--mod/languages/languages/ca/ca.profile.php8
-rw-r--r--mod/languages/languages/ca/ca.relatedgroups.php11
-rw-r--r--mod/languages/languages/ca/ca.reportedcontent.php34
-rw-r--r--mod/languages/languages/ca/ca.search.php18
-rw-r--r--mod/languages/languages/ca/ca.subgroups.php22
-rw-r--r--mod/languages/languages/ca/ca.tagcloud.php7
-rw-r--r--mod/languages/languages/ca/ca.thewire.php34
-rw-r--r--mod/languages/languages/ca/ca.tinymce.php8
-rw-r--r--mod/languages/languages/ca/ca.twitter.php10
-rw-r--r--mod/languages/languages/ca/ca.uservalidationbyemail.php48
-rw-r--r--mod/languages/languages/da/da.blog.php70
-rw-r--r--mod/languages/languages/da/da.bookmarks.php82
-rw-r--r--mod/languages/languages/da/da.categories.php15
-rw-r--r--mod/languages/languages/da/da.custom_index.php14
-rw-r--r--mod/languages/languages/da/da.developers.php60
-rw-r--r--mod/languages/languages/da/da.diagnostics.php70
-rw-r--r--mod/languages/languages/da/da.embed.php21
-rw-r--r--mod/languages/languages/da/da.event_manager.php302
-rw-r--r--mod/languages/languages/da/da.externalpages.php30
-rw-r--r--mod/languages/languages/da/da.file.php106
-rw-r--r--mod/languages/languages/da/da.garbagecollector.php26
-rw-r--r--mod/languages/languages/da/da.groups.php265
-rw-r--r--mod/languages/languages/da/da.image_captcha.php31
-rw-r--r--mod/languages/languages/da/da.invitefriends.php42
-rw-r--r--mod/languages/languages/da/da.likes.php25
-rw-r--r--mod/languages/languages/da/da.logbrowser.php27
-rw-r--r--mod/languages/languages/da/da.logrotate.php29
-rw-r--r--mod/languages/languages/da/da.market.php148
-rw-r--r--mod/languages/languages/da/da.members.php16
-rw-r--r--mod/languages/languages/da/da.menu_builder.php49
-rw-r--r--mod/languages/languages/da/da.messageboard.php73
-rw-r--r--mod/languages/languages/da/da.messages.php95
-rw-r--r--mod/languages/languages/da/da.notifications.php31
-rw-r--r--mod/languages/languages/da/da.pages.php104
-rw-r--r--mod/languages/languages/da/da.php1343
-rw-r--r--mod/languages/languages/da/da.profile.php13
-rw-r--r--mod/languages/languages/da/da.reportedcontent.php44
-rw-r--r--mod/languages/languages/da/da.river_activity_3C.php142
-rw-r--r--mod/languages/languages/da/da.roles_group_admins.php20
-rw-r--r--mod/languages/languages/da/da.search.php25
-rw-r--r--mod/languages/languages/da/da.tagcloud.php12
-rw-r--r--mod/languages/languages/da/da.tasks.php144
-rw-r--r--mod/languages/languages/da/da.thewire.php60
-rw-r--r--mod/languages/languages/da/da.tidypics.php190
-rw-r--r--mod/languages/languages/da/da.tinymce.php13
-rw-r--r--mod/languages/languages/da/da.twitter.php17
-rw-r--r--mod/languages/languages/da/da.twitter_api.php35
-rw-r--r--mod/languages/languages/da/da.uservalidationbyemail.php63
-rw-r--r--mod/languages/languages/de/de.blog.php50
-rw-r--r--mod/languages/languages/de/de.bookmarks.php46
-rw-r--r--mod/languages/languages/de/de.categories.php12
-rw-r--r--mod/languages/languages/de/de.core.php969
-rw-r--r--mod/languages/languages/de/de.custom_index.php11
-rw-r--r--mod/languages/languages/de/de.dashboard.php11
-rw-r--r--mod/languages/languages/de/de.developers.php43
-rw-r--r--mod/languages/languages/de/de.diagnostics.php39
-rw-r--r--mod/languages/languages/de/de.embed.php14
-rw-r--r--mod/languages/languages/de/de.externalpages.php15
-rw-r--r--mod/languages/languages/de/de.file.php69
-rw-r--r--mod/languages/languages/de/de.garbagecollector.php18
-rw-r--r--mod/languages/languages/de/de.groups.php204
-rw-r--r--mod/languages/languages/de/de.install.php156
-rw-r--r--mod/languages/languages/de/de.invitefriends.php30
-rw-r--r--mod/languages/languages/de/de.likes.php36
-rw-r--r--mod/languages/languages/de/de.logbrowser.php20
-rw-r--r--mod/languages/languages/de/de.logrotate.php22
-rw-r--r--mod/languages/languages/de/de.members.php13
-rw-r--r--mod/languages/languages/de/de.messageboard.php43
-rw-r--r--mod/languages/languages/de/de.messages.php60
-rw-r--r--mod/languages/languages/de/de.notifications.php18
-rw-r--r--mod/languages/languages/de/de.pages.php54
-rw-r--r--mod/languages/languages/de/de.profile.php8
-rw-r--r--mod/languages/languages/de/de.reportedcontent.php44
-rw-r--r--mod/languages/languages/de/de.search.php18
-rw-r--r--mod/languages/languages/de/de.tagcloud.php9
-rw-r--r--mod/languages/languages/de/de.thewire.php36
-rw-r--r--mod/languages/languages/de/de.tinymce.php9
-rw-r--r--mod/languages/languages/de/de.twitter.php12
-rw-r--r--mod/languages/languages/de/de.twitter_api.php60
-rw-r--r--mod/languages/languages/de/de.uservalidationbyemail.php51
-rw-r--r--mod/languages/languages/en/en.core.php39
-rw-r--r--mod/languages/languages/es/es.blog.php57
-rw-r--r--mod/languages/languages/es/es.bookmarks.php55
-rw-r--r--mod/languages/languages/es/es.categories.php12
-rw-r--r--mod/languages/languages/es/es.core.php1001
-rw-r--r--mod/languages/languages/es/es.custom_index.php11
-rw-r--r--mod/languages/languages/es/es.custom_keys.php5
-rw-r--r--mod/languages/languages/es/es.dashboard.php11
-rw-r--r--mod/languages/languages/es/es.developers.php49
-rw-r--r--mod/languages/languages/es/es.diagnostics.php40
-rw-r--r--mod/languages/languages/es/es.embed.php14
-rw-r--r--mod/languages/languages/es/es.externalpages.php15
-rw-r--r--mod/languages/languages/es/es.file.php76
-rw-r--r--mod/languages/languages/es/es.garbagecollector.php18
-rw-r--r--mod/languages/languages/es/es.groups.php213
-rw-r--r--mod/languages/languages/es/es.install.php156
-rw-r--r--mod/languages/languages/es/es.invitefriends.php29
-rw-r--r--mod/languages/languages/es/es.likes.php36
-rw-r--r--mod/languages/languages/es/es.logbrowser.php21
-rw-r--r--mod/languages/languages/es/es.logrotate.php22
-rw-r--r--mod/languages/languages/es/es.members.php13
-rw-r--r--mod/languages/languages/es/es.messageboard.php43
-rw-r--r--mod/languages/languages/es/es.messages.php66
-rw-r--r--mod/languages/languages/es/es.notifications.php18
-rw-r--r--mod/languages/languages/es/es.pages.php62
-rw-r--r--mod/languages/languages/es/es.profile.php8
-rw-r--r--mod/languages/languages/es/es.reportedcontent.php36
-rw-r--r--mod/languages/languages/es/es.search.php18
-rw-r--r--mod/languages/languages/es/es.tagcloud.php9
-rw-r--r--mod/languages/languages/es/es.thewire.php36
-rw-r--r--mod/languages/languages/es/es.tinymce.php9
-rw-r--r--mod/languages/languages/es/es.twitter.php12
-rw-r--r--mod/languages/languages/es/es.twitter_api.php58
-rw-r--r--mod/languages/languages/es/es.uservalidationbyemail.php64
-rw-r--r--mod/languages/languages/eu/eu.blog.php57
-rw-r--r--mod/languages/languages/eu/eu.bookmarks.php53
-rw-r--r--mod/languages/languages/eu/eu.categories.php11
-rw-r--r--mod/languages/languages/eu/eu.core.php996
-rw-r--r--mod/languages/languages/eu/eu.custom_index.php10
-rw-r--r--mod/languages/languages/eu/eu.dashboard.php10
-rw-r--r--mod/languages/languages/eu/eu.developers.php48
-rw-r--r--mod/languages/languages/eu/eu.diagnostics.php39
-rw-r--r--mod/languages/languages/eu/eu.embed.php13
-rw-r--r--mod/languages/languages/eu/eu.externalpages.php14
-rw-r--r--mod/languages/languages/eu/eu.file.php76
-rw-r--r--mod/languages/languages/eu/eu.garbagecollector.php17
-rw-r--r--mod/languages/languages/eu/eu.groups.php213
-rw-r--r--mod/languages/languages/eu/eu.install.php134
-rw-r--r--mod/languages/languages/eu/eu.invitefriends.php29
-rw-r--r--mod/languages/languages/eu/eu.likes.php35
-rw-r--r--mod/languages/languages/eu/eu.logbrowser.php21
-rw-r--r--mod/languages/languages/eu/eu.logrotate.php21
-rw-r--r--mod/languages/languages/eu/eu.members.php12
-rw-r--r--mod/languages/languages/eu/eu.messageboard.php42
-rw-r--r--mod/languages/languages/eu/eu.messages.php65
-rw-r--r--mod/languages/languages/eu/eu.notifications.php17
-rw-r--r--mod/languages/languages/eu/eu.pages.php62
-rw-r--r--mod/languages/languages/eu/eu.profile.php7
-rw-r--r--mod/languages/languages/eu/eu.reportedcontent.php35
-rw-r--r--mod/languages/languages/eu/eu.search.php17
-rw-r--r--mod/languages/languages/eu/eu.tagcloud.php8
-rw-r--r--mod/languages/languages/eu/eu.thewire.php35
-rw-r--r--mod/languages/languages/eu/eu.tinymce.php8
-rw-r--r--mod/languages/languages/eu/eu.twitter.php11
-rw-r--r--mod/languages/languages/eu/eu.twitter_api.php40
-rw-r--r--mod/languages/languages/eu/eu.uservalidationbyemail.php50
-rw-r--r--mod/languages/languages/fr/fr.blog.php69
-rw-r--r--mod/languages/languages/fr/fr.bookmarks.php82
-rw-r--r--mod/languages/languages/fr/fr.categories.php15
-rw-r--r--mod/languages/languages/fr/fr.custom_index.php14
-rw-r--r--mod/languages/languages/fr/fr.dashboard.php14
-rw-r--r--mod/languages/languages/fr/fr.developers.php61
-rw-r--r--mod/languages/languages/fr/fr.diagnostics.php70
-rw-r--r--mod/languages/languages/fr/fr.embed.php21
-rw-r--r--mod/languages/languages/fr/fr.externalpages.php27
-rw-r--r--mod/languages/languages/fr/fr.file.php110
-rw-r--r--mod/languages/languages/fr/fr.garbagecollector.php25
-rw-r--r--mod/languages/languages/fr/fr.groups.php265
-rw-r--r--mod/languages/languages/fr/fr.install.php156
-rw-r--r--mod/languages/languages/fr/fr.invitefriends.php43
-rw-r--r--mod/languages/languages/fr/fr.likes.php44
-rw-r--r--mod/languages/languages/fr/fr.logbrowser.php27
-rw-r--r--mod/languages/languages/fr/fr.logrotate.php28
-rw-r--r--mod/languages/languages/fr/fr.members.php16
-rw-r--r--mod/languages/languages/fr/fr.messageboard.php72
-rw-r--r--mod/languages/languages/fr/fr.messages.php96
-rw-r--r--mod/languages/languages/fr/fr.notifications.php26
-rw-r--r--mod/languages/languages/fr/fr.pages.php104
-rw-r--r--mod/languages/languages/fr/fr.php1310
-rw-r--r--mod/languages/languages/fr/fr.profile.php12
-rw-r--r--mod/languages/languages/fr/fr.reportedcontent.php44
-rw-r--r--mod/languages/languages/fr/fr.search.php21
-rw-r--r--mod/languages/languages/fr/fr.tagcloud.php12
-rw-r--r--mod/languages/languages/fr/fr.thewire.php61
-rw-r--r--mod/languages/languages/fr/fr.tinymce.php14
-rw-r--r--mod/languages/languages/fr/fr.twitter.php7
-rw-r--r--mod/languages/languages/fr/fr.twitter_api.php59
-rw-r--r--mod/languages/languages/fr/fr.uservalidationbyemail.php64
-rw-r--r--mod/languages/languages/gl/gl.blog.php16
-rw-r--r--mod/languages/languages/gl/gl.bookmarks.php40
-rw-r--r--mod/languages/languages/gl/gl.core.php664
-rw-r--r--mod/languages/languages/gl/gl.custom_index.php11
-rw-r--r--mod/languages/languages/gl/gl.embed.php8
-rw-r--r--mod/languages/languages/gl/gl.externalpages.php14
-rw-r--r--mod/languages/languages/gl/gl.file.php61
-rw-r--r--mod/languages/languages/gl/gl.groups.php143
-rw-r--r--mod/languages/languages/gl/gl.messageboard.php36
-rw-r--r--mod/languages/languages/gl/gl.messages.php52
-rw-r--r--mod/languages/languages/gl/gl.pages.php42
-rw-r--r--mod/languages/languages/gl/gl.profile.php8
-rw-r--r--mod/languages/languages/gl/gl.reportedcontent.php7
-rw-r--r--mod/languages/languages/gl/gl.uservalidationbyemail.php8
-rw-r--r--mod/languages/languages/it/it.blog.php12
-rw-r--r--mod/languages/languages/it/it.bookmarks.php31
-rw-r--r--mod/languages/languages/it/it.categories.php10
-rw-r--r--mod/languages/languages/it/it.core.php707
-rw-r--r--mod/languages/languages/it/it.custom_index.php11
-rw-r--r--mod/languages/languages/it/it.file.php53
-rw-r--r--mod/languages/languages/it/it.groups.php141
-rw-r--r--mod/languages/languages/it/it.messageboard.php39
-rw-r--r--mod/languages/languages/it/it.messages.php56
-rw-r--r--mod/languages/languages/it/it.pages.php41
-rw-r--r--mod/languages/languages/it/it.profile.php8
-rw-r--r--mod/languages/languages/it/it.reportedcontent.php7
-rw-r--r--mod/languages/languages/ja/ja.blog.php12
-rw-r--r--mod/languages/languages/ja/ja.bookmarks.php37
-rw-r--r--mod/languages/languages/ja/ja.categories.php11
-rw-r--r--mod/languages/languages/ja/ja.core.php661
-rw-r--r--mod/languages/languages/ja/ja.custom_index.php11
-rw-r--r--mod/languages/languages/ja/ja.embed.php8
-rw-r--r--mod/languages/languages/ja/ja.externalpages.php14
-rw-r--r--mod/languages/languages/ja/ja.file.php61
-rw-r--r--mod/languages/languages/ja/ja.groups.php155
-rw-r--r--mod/languages/languages/ja/ja.messageboard.php41
-rw-r--r--mod/languages/languages/ja/ja.messages.php55
-rw-r--r--mod/languages/languages/ja/ja.pages.php43
-rw-r--r--mod/languages/languages/ja/ja.reportedcontent.php30
-rw-r--r--mod/languages/languages/nl/nl.blog.php50
-rw-r--r--mod/languages/languages/nl/nl.bookmarks.php46
-rw-r--r--mod/languages/languages/nl/nl.categories.php12
-rw-r--r--mod/languages/languages/nl/nl.core.php947
-rw-r--r--mod/languages/languages/nl/nl.custom_index.php11
-rw-r--r--mod/languages/languages/nl/nl.dashboard.php11
-rw-r--r--mod/languages/languages/nl/nl.developers.php43
-rw-r--r--mod/languages/languages/nl/nl.diagnostics.php32
-rw-r--r--mod/languages/languages/nl/nl.embed.php14
-rw-r--r--mod/languages/languages/nl/nl.externalpages.php15
-rw-r--r--mod/languages/languages/nl/nl.file.php69
-rw-r--r--mod/languages/languages/nl/nl.garbagecollector.php18
-rw-r--r--mod/languages/languages/nl/nl.groups.php205
-rw-r--r--mod/languages/languages/nl/nl.invitefriends.php28
-rw-r--r--mod/languages/languages/nl/nl.likes.php31
-rw-r--r--mod/languages/languages/nl/nl.logbrowser.php20
-rw-r--r--mod/languages/languages/nl/nl.logrotate.php18
-rw-r--r--mod/languages/languages/nl/nl.members.php13
-rw-r--r--mod/languages/languages/nl/nl.messageboard.php41
-rw-r--r--mod/languages/languages/nl/nl.messages.php63
-rw-r--r--mod/languages/languages/nl/nl.notifications.php18
-rw-r--r--mod/languages/languages/nl/nl.pages.php54
-rw-r--r--mod/languages/languages/nl/nl.profile.php8
-rw-r--r--mod/languages/languages/nl/nl.reportedcontent.php36
-rw-r--r--mod/languages/languages/nl/nl.search.php18
-rw-r--r--mod/languages/languages/nl/nl.tagcloud.php9
-rw-r--r--mod/languages/languages/nl/nl.thewire.php36
-rw-r--r--mod/languages/languages/nl/nl.tinymce.php9
-rw-r--r--mod/languages/languages/nl/nl.twitter.php12
-rw-r--r--mod/languages/languages/nl/nl.twitter_api.php41
-rw-r--r--mod/languages/languages/nl/nl.uservalidationbyemail.php49
-rw-r--r--mod/languages/languages/pt/pt.blog.php50
-rw-r--r--mod/languages/languages/pt/pt.bookmarks.php46
-rw-r--r--mod/languages/languages/pt/pt.brainstorm.php63
-rw-r--r--mod/languages/languages/pt/pt.categories.php12
-rw-r--r--mod/languages/languages/pt/pt.core.php966
-rw-r--r--mod/languages/languages/pt/pt.custom_index.php11
-rw-r--r--mod/languages/languages/pt/pt.dashboard.php11
-rw-r--r--mod/languages/languages/pt/pt.developers.php43
-rw-r--r--mod/languages/languages/pt/pt.diagnostics.php34
-rw-r--r--mod/languages/languages/pt/pt.embed.php14
-rw-r--r--mod/languages/languages/pt/pt.externalpages.php15
-rw-r--r--mod/languages/languages/pt/pt.file.php69
-rw-r--r--mod/languages/languages/pt/pt.garbagecollector.php17
-rw-r--r--mod/languages/languages/pt/pt.groups.php204
-rw-r--r--mod/languages/languages/pt/pt.install.php132
-rw-r--r--mod/languages/languages/pt/pt.invitefriends.php36
-rw-r--r--mod/languages/languages/pt/pt.likes.php35
-rw-r--r--mod/languages/languages/pt/pt.logbrowser.php20
-rw-r--r--mod/languages/languages/pt/pt.logrotate.php20
-rw-r--r--mod/languages/languages/pt/pt.members.php13
-rw-r--r--mod/languages/languages/pt/pt.messageboard.php43
-rw-r--r--mod/languages/languages/pt/pt.messages.php66
-rw-r--r--mod/languages/languages/pt/pt.moderated_comments.php48
-rw-r--r--mod/languages/languages/pt/pt.notifications.php20
-rw-r--r--mod/languages/languages/pt/pt.pages.php55
-rw-r--r--mod/languages/languages/pt/pt.profile.php8
-rw-r--r--mod/languages/languages/pt/pt.reportedcontent.php36
-rw-r--r--mod/languages/languages/pt/pt.search.php18
-rw-r--r--mod/languages/languages/pt/pt.spam_login_filter.php80
-rw-r--r--mod/languages/languages/pt/pt.speak_freely.php55
-rw-r--r--mod/languages/languages/pt/pt.tagcloud.php9
-rw-r--r--mod/languages/languages/pt/pt.thewire.php37
-rw-r--r--mod/languages/languages/pt/pt.tinymce.php9
-rw-r--r--mod/languages/languages/pt/pt.twitter.php12
-rw-r--r--mod/languages/languages/pt/pt.twitter_api.php43
-rw-r--r--mod/languages/languages/pt/pt.uservalidationbyemail.php51
-rw-r--r--mod/languages/languages/sr/sr.blog.php12
-rw-r--r--mod/languages/languages/sr/sr.core.php389
-rw-r--r--mod/languages/languages/sr/sr.custom_index.php10
-rw-r--r--mod/languages/languages/sr/sr.externalpages.php10
-rw-r--r--mod/languages/languages/sr/sr.file.php7
-rw-r--r--mod/languages/languages/sr/sr.friendrequest.php20
-rw-r--r--mod/languages/languages/sr/sr.groups.php148
-rw-r--r--mod/languages/languages/sr/sr.messageboard.php38
-rw-r--r--mod/languages/languages/sr/sr.messages.php55
-rw-r--r--mod/languages/languages/sr/sr.pages.php7
-rw-r--r--mod/languages/languages/sr/sr.profile.php8
-rw-r--r--mod/languages/languages/sr/sr.reportedcontent.php30
-rw-r--r--mod/languages/languages/th/th.core.php651
-rw-r--r--mod/languages/languages/zh/zh.blog.php69
-rw-r--r--mod/languages/languages/zh/zh.core.php662
-rw-r--r--mod/languages/languages/zh/zh.profile.php8
-rw-r--r--mod/languages/manifest.xml16
-rw-r--r--mod/languages/start.php55
-rw-r--r--mod/languages/views/default/js/languages/ca.php2
-rw-r--r--mod/languages/views/default/js/languages/da.php2
-rw-r--r--mod/languages/views/default/js/languages/de.php2
-rw-r--r--mod/languages/views/default/js/languages/en.php2
-rw-r--r--mod/languages/views/default/js/languages/es.php2
-rw-r--r--mod/languages/views/default/js/languages/eu.php2
-rw-r--r--mod/languages/views/default/js/languages/fr.php2
-rw-r--r--mod/languages/views/default/js/languages/gl.php2
-rw-r--r--mod/languages/views/default/js/languages/it.php2
-rw-r--r--mod/languages/views/default/js/languages/ja.php2
-rw-r--r--mod/languages/views/default/js/languages/nl.php2
-rw-r--r--mod/languages/views/default/js/languages/pt.php2
-rw-r--r--mod/languages/views/default/js/languages/sr.php2
-rw-r--r--mod/languages/views/default/js/languages/th.php2
-rw-r--r--mod/languages/views/default/js/languages/zh.php2
m---------mod/less0
m---------mod/lightbox0
-rw-r--r--mod/lightpics/CONFIG.txt73
-rw-r--r--mod/lightpics/FAQ.txt31
-rw-r--r--mod/lightpics/actions/photos/admin/create_thumbnails.php70
-rw-r--r--mod/lightpics/actions/photos/admin/imtest.php18
-rw-r--r--mod/lightpics/actions/photos/admin/settings.php29
-rw-r--r--mod/lightpics/actions/photos/admin/upgrade.php52
-rw-r--r--mod/lightpics/actions/photos/album/save.php48
-rw-r--r--mod/lightpics/actions/photos/album/set_cover.php23
-rw-r--r--mod/lightpics/actions/photos/album/sort.php21
-rw-r--r--mod/lightpics/actions/photos/batch/edit.php42
-rw-r--r--mod/lightpics/actions/photos/delete.php48
-rw-r--r--mod/lightpics/actions/photos/image/save.php40
-rw-r--r--mod/lightpics/actions/photos/image/upload.php147
-rw-r--r--mod/lightpics/activate.php51
-rw-r--r--mod/lightpics/classes/TidypicsAlbum.php375
-rw-r--r--mod/lightpics/classes/TidypicsImage.php406
-rw-r--r--mod/lightpics/contributions.txt442
-rw-r--r--mod/lightpics/deactivate.php10
-rw-r--r--mod/lightpics/fonts/LiberationSerif-Regular.ttfbin0 -> 172964 bytes
-rw-r--r--mod/lightpics/fonts/License.txt13
-rw-r--r--mod/lightpics/graphics/empty_album.pngbin0 -> 1389 bytes
-rw-r--r--mod/lightpics/graphics/icons/album.gifbin0 -> 1411 bytes
-rw-r--r--mod/lightpics/graphics/icons/general.jpgbin0 -> 7036 bytes
-rw-r--r--mod/lightpics/graphics/icons/river_icon_album.gifbin0 -> 398 bytes
-rw-r--r--mod/lightpics/graphics/icons/river_icon_image.gifbin0 -> 945 bytes
-rw-r--r--mod/lightpics/graphics/icons/river_icon_tag.gifbin0 -> 184 bytes
-rw-r--r--mod/lightpics/graphics/image_error_large.pngbin0 -> 2208 bytes
-rw-r--r--mod/lightpics/graphics/image_error_small.pngbin0 -> 2351 bytes
-rw-r--r--mod/lightpics/graphics/image_error_thumb.pngbin0 -> 759 bytes
-rw-r--r--mod/lightpics/graphics/loader.gifbin0 -> 2545 bytes
-rw-r--r--mod/lightpics/graphics/spacer.gifbin0 -> 43 bytes
-rw-r--r--mod/lightpics/languages/ca.php210
-rw-r--r--mod/lightpics/languages/da.php169
-rw-r--r--mod/lightpics/languages/de.php248
-rw-r--r--mod/lightpics/languages/en.php262
-rw-r--r--mod/lightpics/languages/es.php210
-rw-r--r--mod/lightpics/languages/fr.php140
-rw-r--r--mod/lightpics/languages/he.php135
-rw-r--r--mod/lightpics/languages/it.php113
-rw-r--r--mod/lightpics/languages/pl.php96
-rw-r--r--mod/lightpics/languages/ru.php101
-rw-r--r--mod/lightpics/languages/tr.php86
-rw-r--r--mod/lightpics/lib/exif.php110
-rw-r--r--mod/lightpics/lib/migrate.php301
-rw-r--r--mod/lightpics/lib/resize.php522
-rw-r--r--mod/lightpics/lib/tidypics.php365
-rw-r--r--mod/lightpics/lib/upload.php119
-rw-r--r--mod/lightpics/manifest.xml30
-rw-r--r--mod/lightpics/pages/lists/highestrated.php65
-rw-r--r--mod/lightpics/pages/lists/highestvotecount.php50
-rw-r--r--mod/lightpics/pages/lists/mostcommentedimages.php42
-rw-r--r--mod/lightpics/pages/lists/mostcommentedimagesthismonth.php50
-rw-r--r--mod/lightpics/pages/lists/mostcommentedimagestoday.php50
-rw-r--r--mod/lightpics/pages/lists/mostrecentimages.php56
-rw-r--r--mod/lightpics/pages/lists/mostviewedimages.php79
-rw-r--r--mod/lightpics/pages/lists/mostviewedimageslastmonth.php50
-rw-r--r--mod/lightpics/pages/lists/mostviewedimagesthismonth.php50
-rw-r--r--mod/lightpics/pages/lists/mostviewedimagesthisyear.php50
-rw-r--r--mod/lightpics/pages/lists/mostviewedimagestoday.php50
-rw-r--r--mod/lightpics/pages/lists/recentlycommented.php61
-rw-r--r--mod/lightpics/pages/lists/recentlyviewed.php60
-rw-r--r--mod/lightpics/pages/lists/recentvotes.php52
-rw-r--r--mod/lightpics/pages/photos/album/add.php34
-rw-r--r--mod/lightpics/pages/photos/album/edit.php48
-rw-r--r--mod/lightpics/pages/photos/album/sort.php56
-rw-r--r--mod/lightpics/pages/photos/album/view.php63
-rw-r--r--mod/lightpics/pages/photos/all.php38
-rw-r--r--mod/lightpics/pages/photos/batch/edit.php44
-rw-r--r--mod/lightpics/pages/photos/friends.php34
-rw-r--r--mod/lightpics/pages/photos/image/download.php41
-rw-r--r--mod/lightpics/pages/photos/image/edit.php54
-rw-r--r--mod/lightpics/pages/photos/image/thumbnail.php38
-rw-r--r--mod/lightpics/pages/photos/image/upload.php64
-rw-r--r--mod/lightpics/pages/photos/image/view.php61
-rw-r--r--mod/lightpics/pages/photos/owner.php56
-rw-r--r--mod/lightpics/start.php421
-rw-r--r--mod/lightpics/upgrades/2009082901.php29
-rw-r--r--mod/lightpics/upgrades/2010073101.php27
-rw-r--r--mod/lightpics/upgrades/2010102801.php26
-rw-r--r--mod/lightpics/upgrades/2012020901.php26
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/README.md73
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/cors/postmessage.html75
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/cors/result.html20
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/css/jquery.fileupload-ui.css107
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/css/style.css92
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/img/loading.gifbin0 -> 3897 bytes
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/img/progressbar.gifbin0 -> 3323 bytes
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/index.html234
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.postmessage-transport.js117
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.xdr-transport.js85
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-fp.js219
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-jui.js141
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-ui.js736
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload.js972
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/jquery.iframe-transport.js171
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/locale.js29
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/main.js93
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/canvas-to-blob.min.js1
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/jquery.ui.widget.js282
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/load-image.min.js1
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/js/vendor/tmpl.min.js1
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/package.json56
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/app.yaml12
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/app/main.go361
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/resize/resize.go247
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/favicon.icobin0 -> 1150 bytes
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/robots.txt2
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/app.yaml16
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/main.py149
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/favicon.icobin0 -> 1150 bytes
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/robots.txt2
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/.gitignore2
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/package.json41
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/public/files/thumbnail/.gitignore0
-rwxr-xr-xmod/lightpics/vendors/jquery-file-upload/server/node/server.js285
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/node/tmp/.gitignore0
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/files/.htaccess4
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/index.php46
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/thumbnails/.htaccess0
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/server/php/upload.class.php436
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/test/index.html146
-rw-r--r--mod/lightpics/vendors/jquery-file-upload/test/test.js1279
-rw-r--r--mod/lightpics/version.php7
-rw-r--r--mod/lightpics/views/default/admin/settings/photos.php71
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/help.php14
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/image_lib.php38
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/server_config.php14
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/server_info.php120
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/settings.php18
-rw-r--r--mod/lightpics/views/default/admin/settings/photos/thumbnail.php54
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings.php26
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/activity.php31
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/image_lib.php20
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/main.php39
-rw-r--r--mod/lightpics/views/default/forms/photos/admin/settings/thumbnails.php33
-rw-r--r--mod/lightpics/views/default/forms/photos/album/save.php48
-rw-r--r--mod/lightpics/views/default/forms/photos/album/sort.php28
-rw-r--r--mod/lightpics/views/default/forms/photos/basic_upload.php63
-rw-r--r--mod/lightpics/views/default/forms/photos/batch/edit.php33
-rw-r--r--mod/lightpics/views/default/forms/photos/batch/edit/image.php35
-rw-r--r--mod/lightpics/views/default/forms/photos/image/save.php48
-rw-r--r--mod/lightpics/views/default/icon/object/album.php41
-rw-r--r--mod/lightpics/views/default/icon/object/image.php62
-rw-r--r--mod/lightpics/views/default/js/photos/tidypics.php43
-rw-r--r--mod/lightpics/views/default/js/photos/upload.php63
-rw-r--r--mod/lightpics/views/default/object/album.php22
-rw-r--r--mod/lightpics/views/default/object/album/full.php59
-rw-r--r--mod/lightpics/views/default/object/album/gallery.php36
-rw-r--r--mod/lightpics/views/default/object/album/list.php42
-rw-r--r--mod/lightpics/views/default/object/image.php211
-rw-r--r--mod/lightpics/views/default/object/image/full.php62
-rw-r--r--mod/lightpics/views/default/object/image/navigation.php34
-rw-r--r--mod/lightpics/views/default/object/image/summary.php41
-rw-r--r--mod/lightpics/views/default/photos/css.php470
-rw-r--r--mod/lightpics/views/default/photos/group_module.php45
-rw-r--r--mod/lightpics/views/default/photos/sidebar.php18
-rw-r--r--mod/lightpics/views/default/photos/sidebar/exif.php20
-rw-r--r--mod/lightpics/views/default/photos/sidebar/quota.php27
-rw-r--r--mod/lightpics/views/default/river/object/album/create.php40
-rw-r--r--mod/lightpics/views/default/river/object/image/create.php41
-rw-r--r--mod/lightpics/views/default/river/object/tidypics_batch/create.php66
-rw-r--r--mod/lightpics/views/default/widgets/album_view/content.php17
-rw-r--r--mod/lightpics/views/default/widgets/album_view/edit.php25
-rw-r--r--mod/lightpics/views/default/widgets/latest_photos/content.php18
-rw-r--r--mod/lightpics/views/default/widgets/latest_photos/edit.php25
-rw-r--r--mod/lightpics/views/rss/extensions/photos/xmlns.php9
-rw-r--r--mod/lightpics/views/rss/object/album.php17
-rw-r--r--mod/lightpics/views/rss/object/album/full.php19
-rw-r--r--mod/lightpics/views/rss/object/album/summary.php33
-rw-r--r--mod/lightpics/views/rss/object/image.php42
-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.php29
-rw-r--r--mod/logrotate/manifest.xml17
-rw-r--r--mod/logrotate/start.php122
-rw-r--r--mod/logrotate/views/default/plugins/logrotate/settings.php48
m---------mod/lorea-status0
m---------mod/magic_topbar0
-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.php55
-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.php57
-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.php480
-rw-r--r--mod/messages/views/default/forms/messages/process.php43
-rw-r--r--mod/messages/views/default/forms/messages/reply.php43
-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
m---------mod/minify0
-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/openid_api/classes/OpenID_ElggStore.php420
-rw-r--r--mod/openid_api/lib/openid_consumer.php15
-rw-r--r--mod/openid_api/lib/openid_server.php13
-rw-r--r--mod/openid_api/manifest.xml19
-rw-r--r--mod/openid_api/start.php22
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID.php563
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/AX.php1022
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Association.php610
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/BigMath.php451
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Consumer.php2234
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/CryptUtil.php122
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/DatabaseConnection.php130
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/DiffieHellman.php113
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Discover.php606
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/DumbStore.php99
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Extension.php61
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/FileStore.php618
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/HMAC.php105
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Interface.php196
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/KVForm.php111
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/MDB2Store.php413
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/MemcachedStore.php207
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Message.php920
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/MySQLStore.php77
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Nonce.php108
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/PAPE.php300
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Parse.php377
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/PostgreSQLStore.php112
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/SQLStore.php557
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/SQLiteStore.php70
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/SReg.php521
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/Server.php1765
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/ServerRequest.php36
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/TrustRoot.php461
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/OpenID/URINorm.php249
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/HTTPFetcher.php174
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/Manager.php521
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/Misc.php58
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/ParanoidHTTPFetcher.php245
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/ParseHTML.php258
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/PlainHTTPFetcher.php248
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XML.php352
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XRDS.php478
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XRI.php234
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/XRIRes.php72
-rw-r--r--mod/openid_api/vendors/php-openid/Auth/Yadis/Yadis.php382
-rw-r--r--mod/openid_api/vendors/php-openid/COPYING202
-rw-r--r--mod/openid_api/vendors/php-openid/README136
-rw-r--r--mod/openid_client/actions/openid_client/login.php32
-rw-r--r--mod/openid_client/actions/openid_client/register.php35
-rw-r--r--mod/openid_client/classes/ElggOpenIDConsumer.php238
-rw-r--r--mod/openid_client/graphics/openid_icon.pngbin0 -> 733 bytes
-rw-r--r--mod/openid_client/languages/en.php28
-rw-r--r--mod/openid_client/lib/helpers.php114
-rw-r--r--mod/openid_client/manifest.xml19
-rw-r--r--mod/openid_client/return.php69
-rw-r--r--mod/openid_client/start.php78
-rw-r--r--mod/openid_client/upgrade.php12
-rw-r--r--mod/openid_client/upgrades/2012100501.php53
-rw-r--r--mod/openid_client/views/default/core/account/login_box.php24
-rw-r--r--mod/openid_client/views/default/core/account/login_dropdown.php31
-rw-r--r--mod/openid_client/views/default/forms/openid_client/login.php43
-rw-r--r--mod/openid_client/views/default/forms/openid_client/register.php71
-rw-r--r--mod/openid_client/views/default/openid_client/css.php13
-rw-r--r--mod/openid_client/views/default/openid_client/icon.php8
-rw-r--r--mod/openid_client/views/default/openid_client/js.php26
-rw-r--r--mod/openid_client/views/default/openid_client/register.php11
-rw-r--r--mod/openid_server/Crypt/RSA.php524
-rw-r--r--mod/openid_server/Crypt/RSA/ErrorHandler.php234
-rw-r--r--mod/openid_server/Crypt/RSA/Key.php314
-rw-r--r--mod/openid_server/Crypt/RSA/KeyPair.php804
-rw-r--r--mod/openid_server/Crypt/RSA/Math/BCMath.php482
-rw-r--r--mod/openid_server/Crypt/RSA/Math/BigInt.php313
-rw-r--r--mod/openid_server/Crypt/RSA/Math/GMP.php361
-rw-r--r--mod/openid_server/Crypt/RSA/MathLoader.php135
-rwxr-xr-xmod/openid_server/actions/admin.php90
-rwxr-xr-xmod/openid_server/actions/autologin.php52
-rwxr-xr-xmod/openid_server/actions/autologout.php48
-rwxr-xr-xmod/openid_server/actions/trust.php93
-rw-r--r--mod/openid_server/languages/ca.php40
-rwxr-xr-xmod/openid_server/languages/en.php47
-rwxr-xr-xmod/openid_server/languages/es.php40
-rw-r--r--mod/openid_server/languages/gl.php40
-rw-r--r--mod/openid_server/languages/pt.php27
-rwxr-xr-xmod/openid_server/lib/actions.php173
-rwxr-xr-xmod/openid_server/lib/common.php164
-rwxr-xr-xmod/openid_server/lib/session.php140
-rwxr-xr-xmod/openid_server/manifest.xml20
-rwxr-xr-xmod/openid_server/openid_server_include.php340
-rwxr-xr-xmod/openid_server/server.php32
-rwxr-xr-xmod/openid_server/start.php65
-rwxr-xr-xmod/openid_server/views/default/forms/openid_server/trust.php34
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/admin.php154
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/autologin.php22
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/autologout.php24
-rwxr-xr-xmod/openid_server/views/default/openid_server/forms/trust.php35
-rwxr-xr-xmod/openid_server/views/default/openid_server/metatags.php6
-rw-r--r--mod/openid_server/views/xrds/openid_server/profile.php11
-rw-r--r--mod/openid_server/views/xrds/openid_server/service.php15
-rw-r--r--mod/opensearch/README21
-rw-r--r--mod/opensearch/languages/ca.php26
-rw-r--r--mod/opensearch/languages/en.php28
-rw-r--r--mod/opensearch/languages/es.php23
-rw-r--r--mod/opensearch/languages/eu.php11
-rwxr-xr-xmod/opensearch/languages/pl.php11
-rw-r--r--mod/opensearch/manifest.xml16
-rw-r--r--mod/opensearch/start.php33
-rw-r--r--mod/opensearch/views/default/opensearch/includes.php10
-rw-r--r--mod/opensearch/views/default/plugins/opensearch/settings.php97
-rw-r--r--mod/opensearch/views/opensearch_rss/page/default.php42
-rw-r--r--mod/opensearch/views/opensearch_rss/page/layouts/default.php5
-rw-r--r--mod/opensearch/views/opensearch_rss/search/layout.php5
-rw-r--r--mod/opensearch/views/opensearch_rss/search/list.php27
-rw-r--r--mod/opensearch/views/xml/opensearch/description.php75
-rw-r--r--mod/pages/actions/annotations/page/delete.php20
-rw-r--r--mod/pages/actions/pages/delete.php68
-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.php119
-rw-r--r--mod/pages/lib/pages.php152
-rw-r--r--mod/pages/manifest.xml18
-rw-r--r--mod/pages/pages/pages/edit.php54
-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.php370
-rw-r--r--mod/pages/upgrades/2012061800.php49
-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.php60
-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.php119
-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.php21
-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.php68
-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/profile_friendlyurl0
-rw-r--r--mod/profile_widgets/languages/en.php7
-rw-r--r--mod/profile_widgets/languages/es.php7
-rwxr-xr-xmod/profile_widgets/manifest.xml16
-rw-r--r--mod/profile_widgets/start.php13
-rw-r--r--mod/profile_widgets/views/default/widgets/thewirewrite/view.php11
m---------mod/purity_theme7
-rw-r--r--mod/registrationterms/.gitignore3
-rw-r--r--mod/registrationterms/README.md9
-rw-r--r--mod/registrationterms/languages/ca.php6
-rw-r--r--mod/registrationterms/languages/en.php6
-rw-r--r--mod/registrationterms/manifest.xml25
-rw-r--r--mod/registrationterms/screenshots/register-form.pngbin0 -> 8653 bytes
-rw-r--r--mod/registrationterms/start.php18
-rw-r--r--mod/registrationterms/views/default/registrationterms/register.php17
-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/river_privacy/CHANGES.txt7
-rw-r--r--mod/river_privacy/README.md4
-rw-r--r--mod/river_privacy/languages/ca.php7
-rw-r--r--mod/river_privacy/languages/en.php13
-rw-r--r--mod/river_privacy/manifest.xml17
-rw-r--r--mod/river_privacy/start.php30
-rw-r--r--mod/river_privacy/views/default/plugins/river_privacy/settings.php17
-rw-r--r--mod/river_privacy/views_override/default/page/components/list.php89
-rw-r--r--mod/saravea_theme/.gitignore1
-rw-r--r--mod/saravea_theme/_graphics/ajax-loader.gifbin0 -> 3720 bytes
-rwxr-xr-xmod/saravea_theme/_graphics/elgg_sprites.pngbin0 -> 27750 bytes
-rwxr-xr-xmod/saravea_theme/_graphics/favicon.icobin0 -> 1218 bytes
-rw-r--r--mod/saravea_theme/_graphics/icons/pad_lrg.gifbin0 -> 2060 bytes
-rw-r--r--mod/saravea_theme/_graphics/icons/pad_small.gifbin0 -> 1246 bytes
-rw-r--r--mod/saravea_theme/_graphics/icons/pad_tiny.gifbin0 -> 1033 bytes
-rw-r--r--mod/saravea_theme/_graphics/icons/pages_lrg.gifbin0 -> 1162 bytes
-rw-r--r--mod/saravea_theme/_graphics/icons/pages_small.gifbin0 -> 708 bytes
-rw-r--r--mod/saravea_theme/_graphics/icons/pages_tiny.gifbin0 -> 581 bytes
-rw-r--r--mod/saravea_theme/_graphics/n1.pngbin0 -> 15662 bytes
-rw-r--r--mod/saravea_theme/_graphics/n1_small.pngbin0 -> 3977 bytes
-rw-r--r--mod/saravea_theme/_graphics/privacy.pngbin0 -> 2311 bytes
-rwxr-xr-xmod/saravea_theme/_graphics/saravea_amar.pngbin0 -> 71000 bytes
-rwxr-xr-xmod/saravea_theme/_graphics/saravea_azul.pngbin0 -> 72619 bytes
-rwxr-xr-xmod/saravea_theme/_graphics/saravea_bege.pngbin0 -> 72529 bytes
-rwxr-xr-xmod/saravea_theme/_graphics/saravea_lar.pngbin0 -> 70979 bytes
-rwxr-xr-xmod/saravea_theme/_graphics/saravea_verd.pngbin0 -> 72541 bytes
-rwxr-xr-xmod/saravea_theme/_graphics/saravea_verm.pngbin0 -> 71396 bytes
-rw-r--r--mod/saravea_theme/_graphics/saravea_verm_small.pngbin0 -> 5996 bytes
-rw-r--r--mod/saravea_theme/_graphics/sidebar_background.gifbin0 -> 1222 bytes
-rw-r--r--mod/saravea_theme/_graphics/two_sidebar_background.gifbin0 -> 91 bytes
-rw-r--r--mod/saravea_theme/languages/ca.php10
-rw-r--r--mod/saravea_theme/languages/en.php10
-rw-r--r--mod/saravea_theme/languages/es.php10
-rw-r--r--mod/saravea_theme/manifest.xml54
-rw-r--r--mod/saravea_theme/start.php132
-rw-r--r--mod/saravea_theme/vendors/opensans/LICENSE.txt202
-rw-r--r--mod/saravea_theme/vendors/opensans/OpenSans-Bold.ttfbin0 -> 224592 bytes
-rw-r--r--mod/saravea_theme/vendors/opensans/OpenSans-BoldItalic.ttfbin0 -> 213292 bytes
-rw-r--r--mod/saravea_theme/vendors/opensans/OpenSans-ExtraBold.ttfbin0 -> 222584 bytes
-rw-r--r--mod/saravea_theme/vendors/opensans/OpenSans-ExtraBoldItalic.ttfbin0 -> 213420 bytes
-rw-r--r--mod/saravea_theme/vendors/opensans/OpenSans-Italic.ttfbin0 -> 212896 bytes
-rw-r--r--mod/saravea_theme/vendors/opensans/OpenSans-Light.ttfbin0 -> 222412 bytes
-rw-r--r--mod/saravea_theme/vendors/opensans/OpenSans-LightItalic.ttfbin0 -> 213128 bytes
-rw-r--r--mod/saravea_theme/vendors/opensans/OpenSans-Regular.ttfbin0 -> 217360 bytes
-rw-r--r--mod/saravea_theme/vendors/opensans/OpenSans-Semibold.ttfbin0 -> 221328 bytes
-rw-r--r--mod/saravea_theme/vendors/opensans/OpenSans-SemiboldItalic.ttfbin0 -> 212820 bytes
-rw-r--r--mod/saravea_theme/views/default/css/admin.php1648
-rw-r--r--mod/saravea_theme/views/default/css/elements/OOCSS_LICENSE30
-rw-r--r--mod/saravea_theme/views/default/css/elements/buttons.php240
-rw-r--r--mod/saravea_theme/views/default/css/elements/components.php354
-rw-r--r--mod/saravea_theme/views/default/css/elements/core.php117
-rw-r--r--mod/saravea_theme/views/default/css/elements/forms.php416
-rw-r--r--mod/saravea_theme/views/default/css/elements/grid.php54
-rw-r--r--mod/saravea_theme/views/default/css/elements/helpers.php144
-rw-r--r--mod/saravea_theme/views/default/css/elements/icons.php407
-rw-r--r--mod/saravea_theme/views/default/css/elements/layout.php145
-rw-r--r--mod/saravea_theme/views/default/css/elements/misc.php62
-rw-r--r--mod/saravea_theme/views/default/css/elements/modules.php205
-rw-r--r--mod/saravea_theme/views/default/css/elements/navigation.php596
-rw-r--r--mod/saravea_theme/views/default/css/elements/reset.php79
-rw-r--r--mod/saravea_theme/views/default/css/elements/typography.php192
-rw-r--r--mod/saravea_theme/views/default/css/elgg.php68
-rw-r--r--mod/saravea_theme/views/default/css/ie.php8
-rw-r--r--mod/saravea_theme/views/default/css/ie6.php12
-rw-r--r--mod/saravea_theme/views/default/css/ie7.php65
-rw-r--r--mod/saravea_theme/views/default/css/saravea_theme/landing.php38
-rw-r--r--mod/saravea_theme/views/default/css/walled_garden.php81
-rw-r--r--mod/saravea_theme/views/default/output/access.php53
-rw-r--r--mod/saravea_theme/views/default/page/elements/shortcut_icon.php6
-rw-r--r--mod/saravea_theme/views/default/page/layouts/one_sidebar.php48
-rw-r--r--mod/saravea_theme/views/default/river/elements/body.php67
-rw-r--r--mod/saravea_theme/views/default/saravea_theme/css.php140
-rw-r--r--mod/saravea_theme/views/default/saravea_theme/header.php11
-rw-r--r--mod/saravea_theme/views/default/saravea_theme/landing.php15
-rw-r--r--mod/saravea_theme/views/default/search/css.php60
-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.php275
-rw-r--r--mod/search/search_hooks.php490
-rw-r--r--mod/search/start.php502
-rw-r--r--mod/search/views/default/search/comments/entity.php55
-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.php54
-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/simplepie/README19
-rw-r--r--mod/simplepie/actions/simplepie/save_group_feed.php14
-rw-r--r--mod/simplepie/languages/en.php14
-rw-r--r--mod/simplepie/languages/es.php14
-rw-r--r--mod/simplepie/manifest.xml36
-rw-r--r--mod/simplepie/start.php33
-rw-r--r--mod/simplepie/vendors/simplepie.inc15299
-rw-r--r--mod/simplepie/views/default/forms/simplepie/save_group_feed.php39
-rw-r--r--mod/simplepie/views/default/simplepie/css.php17
-rw-r--r--mod/simplepie/views/default/simplepie/group_module.php109
-rw-r--r--mod/simplepie/views/default/widgets/feed_reader/content.php81
-rw-r--r--mod/simplepie/views/default/widgets/feed_reader/edit.php62
-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.txt477
-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.js464
-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.js543
-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.js184
-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.js119
-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.js433
-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.js163
-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.js85
-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.js955
-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.js898
-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.js513
-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.js537
-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.js885
-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.css14
-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.js71
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/js/props.js709
-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.htm845
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/readme.txt19
-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.js1456
-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.js254
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/table.js501
-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/visualblocks/css/visualblocks.css21
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js63
-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.js122
-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.htm70
-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.js1490
-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 -> 11982 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.js56
-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.js345
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js253
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js159
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js78
-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.css118
-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.css219
-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.css106
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css106
-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.css118
-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.css222
-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.js19030
-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.php102
-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_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.php62
-rw-r--r--mod/twitter_api/lib/twitter_api.php383
-rw-r--r--mod/twitter_api/manifest.xml29
-rw-r--r--mod/twitter_api/pages/twitter_api/interstitial.php19
-rw-r--r--mod/twitter_api/start.php174
-rw-r--r--mod/twitter_api/vendors/twitteroauth/LICENSE22
-rw-r--r--mod/twitter_api/vendors/twitteroauth/OAuth.php872
-rw-r--r--mod/twitter_api/vendors/twitteroauth/README114
-rw-r--r--mod/twitter_api/vendors/twitteroauth/twitterOAuth.php241
-rw-r--r--mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php67
-rw-r--r--mod/twitter_api/views/default/plugins/twitter_api/settings.php65
-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
m---------mod/vegan0
-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
8319 files changed, 466453 insertions, 0 deletions
diff --git a/mod/autosubscribegroup b/mod/autosubscribegroup
new file mode 160000
+Subproject 5e933d6ede62fe62d2e6425e7b1e5fdc7d93d47
diff --git a/mod/basic_theme b/mod/basic_theme
new file mode 160000
+Subproject b0e908f45134d8730954f4cc0d88ebf9b5c3eb4
diff --git a/mod/beechat/README b/mod/beechat/README
new file mode 100644
index 000000000..5ff3f8467
--- /dev/null
+++ b/mod/beechat/README
@@ -0,0 +1,23 @@
+Beechat the first XMPP chat for Elgg
+====================================
+
+Beechat is a facebook like chat for elgg using the XMPP protocol. It requires the XMPP serveur ejabberd.
+
+Installation
+------------
+
+French Documentation
+
+http://github.com/beechannels/beechat/wikis/guide-dinstallation
+
+English Documentation
+
+http://github.com/beechannels/beechat/wikis/setup-guide
+
+Feedback
+--------
+
+We are relying on the [GitHub issues tracker][issues] linked from above for
+feedback. File bugs or other issues [here][issues].
+
+[issues]: http://github.com/beechannels/beechat/issues
diff --git a/mod/beechat/actions/get_connection.php b/mod/beechat/actions/get_connection.php
new file mode 100644
index 000000000..a31174179
--- /dev/null
+++ b/mod/beechat/actions/get_connection.php
@@ -0,0 +1,21 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ header('Content-type: application/json');
+ gatekeeper();
+
+ global $SESSION;
+
+ if ($SESSION->offsetExists('beechat_conn'))
+ echo $SESSION->offsetGet('beechat_conn');
+
+ exit();
+?>
diff --git a/mod/beechat/actions/get_details.php b/mod/beechat/actions/get_details.php
new file mode 100644
index 000000000..4944fc4a9
--- /dev/null
+++ b/mod/beechat/actions/get_details.php
@@ -0,0 +1,21 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ gatekeeper();
+ header('Content-type: application/json');
+ $user = $_SESSION['user'];
+ $t = array('username' => $user->username,
+ 'password' => $user->password);
+
+ echo json_encode($t);
+
+ exit();
+?>
diff --git a/mod/beechat/actions/get_icons.php b/mod/beechat/actions/get_icons.php
new file mode 100644
index 000000000..33d447e2e
--- /dev/null
+++ b/mod/beechat/actions/get_icons.php
@@ -0,0 +1,52 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ header('Content-type: application/json');
+ gatekeeper();
+ global $CONFIG;
+
+ if (!empty($_POST['beechat_roster_items_usernames']))
+ {
+ $rosterItemsUsernames = explode(',', $_POST['beechat_roster_items_usernames']);
+ /*foreach ($rosterItemsUsernames as $rosterItem)
+ {
+ }*/
+ $userFriendsEntities = $_SESSION['user']->getFriends('', 0, 0);
+
+ $res = array();
+ foreach ($rosterItemsUsernames as $value)
+ {
+ $found = false;
+ $splitjid = explode('@', $value);
+ $jid_name = $splitjid[0];
+ $jid_host = $splitjid[1];
+ foreach ($userFriendsEntities as $friend)
+ {
+ if ((strtolower($friend->username) == strtolower($jid_name) && $jid_host == elgg_get_plugin_setting("domain", "beechat")))
+ {
+ $res[$value] = array('small' => $friend->getIcon('small'), 'tiny' => $friend->getIcon('tiny'));
+ $found = true;
+ break;
+ }
+ }
+ if (!$found) {
+ $base = $CONFIG->wwwroot."mod/profile/graphics/default";
+ $res[$value] = array('small' => $base."small.gif", 'tiny' => $base."tiny.gif");
+ }
+ }
+ echo json_encode($res);
+ }
+ else
+ echo json_encode(null);
+
+ exit();
+
+?>
diff --git a/mod/beechat/actions/get_state.php b/mod/beechat/actions/get_state.php
new file mode 100644
index 000000000..6cfd2f725
--- /dev/null
+++ b/mod/beechat/actions/get_state.php
@@ -0,0 +1,21 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ header('Content-type: application/json');
+ gatekeeper();
+
+ global $SESSION;
+
+ if ($SESSION->offsetExists('beechat_state'))
+ echo $SESSION->offsetGet('beechat_state');
+
+ exit();
+?>
diff --git a/mod/beechat/actions/get_statuses.php b/mod/beechat/actions/get_statuses.php
new file mode 100644
index 000000000..6f7620beb
--- /dev/null
+++ b/mod/beechat/actions/get_statuses.php
@@ -0,0 +1,41 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ header('Content-type: application/json');
+ gatekeeper();
+ $usernames = get_input('beechat_roster_items_usernames');
+ if (!empty($usernames))
+ {
+ $iconSize = 'small';
+ $rosterItemsUsernames = explode(',', $usernames);
+ $userFriendsEntities = $_SESSION['user']->getFriends('', 1000000000, 0);
+
+ $res = array();
+ foreach ($rosterItemsUsernames as $value)
+ {
+ foreach ($userFriendsEntities as $friend)
+ {
+ if (strtolower($friend->username) == strtolower($value))
+ {
+ $status = get_entities_from_metadata("state", "current", "object", "status", $friend->get('guid'));
+ $res[$value] = ($status != false) ? $status[0]->description : '';
+ break;
+ }
+ }
+ }
+ echo json_encode($res);
+ }
+ else
+ echo json_encode(null);
+
+ exit();
+
+?>
diff --git a/mod/beechat/actions/join_groupchat.php b/mod/beechat/actions/join_groupchat.php
new file mode 100644
index 000000000..c694d7957
--- /dev/null
+++ b/mod/beechat/actions/join_groupchat.php
@@ -0,0 +1,15 @@
+<?php
+
+$user = elgg_get_logged_in_user_entity();
+$group = get_entity(get_input('group_guid'));
+
+if ($user && $group) {
+ if (!check_entity_relationship($user->guid, 'groupchat', $group->guid)) {
+ error_log("joinen ok");
+ add_entity_relationship($user->guid, 'groupchat', $group->guid);
+}
+}
+echo "OK";
+error_log("join ok");
+
+?>
diff --git a/mod/beechat/actions/leave_groupchat.php b/mod/beechat/actions/leave_groupchat.php
new file mode 100644
index 000000000..e04ab8846
--- /dev/null
+++ b/mod/beechat/actions/leave_groupchat.php
@@ -0,0 +1,12 @@
+<?php
+
+$user = elgg_get_logged_in_user_entity();
+$group = get_entity(get_input('group_guid'));
+
+if ($user && $group) {
+ if (check_entity_relationship($user->guid, 'groupchat', $group->guid))
+ remove_entity_relationship($user->guid, 'groupchat', $group->guid);
+}
+error_log("leave ok");
+echo "OK";
+?>
diff --git a/mod/beechat/actions/save_state.php b/mod/beechat/actions/save_state.php
new file mode 100644
index 000000000..f8a61c580
--- /dev/null
+++ b/mod/beechat/actions/save_state.php
@@ -0,0 +1,29 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+// gatekeeper();
+
+ if (elgg_is_logged_in())
+ {
+
+ global $SESSION;
+
+ if (!empty($_POST['beechat_state']))
+ {
+ $SESSION->offsetSet('beechat_state', $_POST['beechat_state']);
+ }
+ elseif (!empty($_POST['beechat_conn']))
+ {
+ $SESSION->offsetSet('beechat_conn', get_input('beechat_conn'));
+ }
+ }
+ exit();
+?>
diff --git a/mod/beechat/classes/BeechatSync.php b/mod/beechat/classes/BeechatSync.php
new file mode 100644
index 000000000..e0a2f90b8
--- /dev/null
+++ b/mod/beechat/classes/BeechatSync.php
@@ -0,0 +1,37 @@
+<?php
+
+class BeechatSync {
+ static function onFriendCreate($event, $object_type, $relationship) {
+ if ($relationship->relationship == 'friendrequest') {
+ elgg_load_library('elgg:beechat');
+ $friend = get_entity($relationship->guid_two);
+ // create friend request
+ ejabberd_friend_request(elgg_get_logged_in_user_entity(), $friend);
+ }
+ }
+ static function onFriendDelete($event, $object_type, $relationship) {
+ if ($relationship->relationship == 'friendrequest') {
+ elgg_load_library('elgg:beechat');
+ $subject = get_entity($relationship->guid_two);
+ // here friend is guid_one because is the one initiating
+ $friend = get_entity($relationship->guid_one);
+ $friends = $friend->isFriendsWith($subject->guid);
+ if ($friends) {
+ // accept friend request
+ ejabberd_friend_accept(elgg_get_logged_in_user_entity(), $friend);
+ } else {
+ // decline friend request
+ ejabberd_friend_deny(elgg_get_logged_in_user_entity(), $friend);
+ }
+ }
+ elseif ($relationship->relationship == 'friend') {
+ elgg_load_library('elgg:beechat');
+ $subject = get_entity($relationship->guid_one);
+ $friend = get_entity($relationship->guid_two);
+ // delete friendship
+ ejabberd_friend_remove(elgg_get_logged_in_user_entity(), $friend);
+ }
+
+ }
+
+}
diff --git a/mod/beechat/disablechat.php b/mod/beechat/disablechat.php
new file mode 100644
index 000000000..490fb327b
--- /dev/null
+++ b/mod/beechat/disablechat.php
@@ -0,0 +1,8 @@
+<?php
+ require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+ if (elgg_is_logged_in()) {
+ elgg_get_logged_in_user_entity()->chatenabled = false;
+ system_message(elgg_echo("beechat:disabled"));
+ }
+ forward($_SERVER['HTTP_REFERER']);
+?>
diff --git a/mod/beechat/enablechat.php b/mod/beechat/enablechat.php
new file mode 100644
index 000000000..5d3de7e2a
--- /dev/null
+++ b/mod/beechat/enablechat.php
@@ -0,0 +1,8 @@
+<?php
+ require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+ if (elgg_is_logged_in()) {
+ elgg_get_logged_in_user_entity()->chatenabled = true;
+ system_message(elgg_echo("beechat:enabled"));
+ }
+ forward($_SERVER['HTTP_REFERER']);
+?>
diff --git a/mod/beechat/graphics/icons/bullet_arrow_down.png b/mod/beechat/graphics/icons/bullet_arrow_down.png
new file mode 100644
index 000000000..9b23c06d7
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_arrow_down.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_arrow_up.png b/mod/beechat/graphics/icons/bullet_arrow_up.png
new file mode 100644
index 000000000..24df0f421
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_arrow_up.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_black.png b/mod/beechat/graphics/icons/bullet_black.png
new file mode 100644
index 000000000..57619706d
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_black.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_blue.png b/mod/beechat/graphics/icons/bullet_blue.png
new file mode 100644
index 000000000..a7651ec8a
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_blue.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_delete.png b/mod/beechat/graphics/icons/bullet_delete.png
new file mode 100644
index 000000000..bd6271b24
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_delete.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_error.png b/mod/beechat/graphics/icons/bullet_error.png
new file mode 100644
index 000000000..bca2b491f
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_error.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_green.png b/mod/beechat/graphics/icons/bullet_green.png
new file mode 100644
index 000000000..058ad261f
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_green.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_orange.png b/mod/beechat/graphics/icons/bullet_orange.png
new file mode 100644
index 000000000..fa63024e5
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_orange.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_pink.png b/mod/beechat/graphics/icons/bullet_pink.png
new file mode 100644
index 000000000..0c9f73e3f
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_pink.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_purple.png b/mod/beechat/graphics/icons/bullet_purple.png
new file mode 100644
index 000000000..52ba5036b
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_purple.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_red.png b/mod/beechat/graphics/icons/bullet_red.png
new file mode 100644
index 000000000..0cd803115
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_red.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_star.png b/mod/beechat/graphics/icons/bullet_star.png
new file mode 100644
index 000000000..fab774a32
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_star.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_white.png b/mod/beechat/graphics/icons/bullet_white.png
new file mode 100644
index 000000000..a9af8d44b
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_white.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/bullet_yellow.png b/mod/beechat/graphics/icons/bullet_yellow.png
new file mode 100644
index 000000000..6469cea7e
--- /dev/null
+++ b/mod/beechat/graphics/icons/bullet_yellow.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/chat_icon.png b/mod/beechat/graphics/icons/chat_icon.png
new file mode 100644
index 000000000..0e6d844bd
--- /dev/null
+++ b/mod/beechat/graphics/icons/chat_icon.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/cog_edit.png b/mod/beechat/graphics/icons/cog_edit.png
new file mode 100644
index 000000000..47b75a456
--- /dev/null
+++ b/mod/beechat/graphics/icons/cog_edit.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/comment_edit.png b/mod/beechat/graphics/icons/comment_edit.png
new file mode 100644
index 000000000..73db110df
--- /dev/null
+++ b/mod/beechat/graphics/icons/comment_edit.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_evilgrin.png b/mod/beechat/graphics/icons/emoticon_evilgrin.png
new file mode 100644
index 000000000..817bd509b
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_evilgrin.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_grin.png b/mod/beechat/graphics/icons/emoticon_grin.png
new file mode 100644
index 000000000..fc60c5e1c
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_grin.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_happy.png b/mod/beechat/graphics/icons/emoticon_happy.png
new file mode 100644
index 000000000..6b7336e17
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_happy.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_smile.png b/mod/beechat/graphics/icons/emoticon_smile.png
new file mode 100644
index 000000000..ade431851
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_smile.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_surprised.png b/mod/beechat/graphics/icons/emoticon_surprised.png
new file mode 100644
index 000000000..4520cfc55
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_surprised.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_tongue.png b/mod/beechat/graphics/icons/emoticon_tongue.png
new file mode 100644
index 000000000..ecafd2ffc
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_tongue.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_unhappy.png b/mod/beechat/graphics/icons/emoticon_unhappy.png
new file mode 100644
index 000000000..fd5d030ef
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_unhappy.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_waii.png b/mod/beechat/graphics/icons/emoticon_waii.png
new file mode 100644
index 000000000..458f93611
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_waii.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/emoticon_wink.png b/mod/beechat/graphics/icons/emoticon_wink.png
new file mode 100644
index 000000000..a631949b5
--- /dev/null
+++ b/mod/beechat/graphics/icons/emoticon_wink.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/heart.png b/mod/beechat/graphics/icons/heart.png
new file mode 100644
index 000000000..d9ee53e59
--- /dev/null
+++ b/mod/beechat/graphics/icons/heart.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/house.png b/mod/beechat/graphics/icons/house.png
new file mode 100644
index 000000000..fed62219f
--- /dev/null
+++ b/mod/beechat/graphics/icons/house.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/muc_icon.png b/mod/beechat/graphics/icons/muc_icon.png
new file mode 100644
index 000000000..efdd60f12
--- /dev/null
+++ b/mod/beechat/graphics/icons/muc_icon.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/notification_pink.png b/mod/beechat/graphics/icons/notification_pink.png
new file mode 100644
index 000000000..f40c184f9
--- /dev/null
+++ b/mod/beechat/graphics/icons/notification_pink.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/pointer.png b/mod/beechat/graphics/icons/pointer.png
new file mode 100644
index 000000000..4e50a0f9a
--- /dev/null
+++ b/mod/beechat/graphics/icons/pointer.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/resultset_next.png b/mod/beechat/graphics/icons/resultset_next.png
new file mode 100644
index 000000000..e252606d3
--- /dev/null
+++ b/mod/beechat/graphics/icons/resultset_next.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/resultset_previous.png b/mod/beechat/graphics/icons/resultset_previous.png
new file mode 100644
index 000000000..18f9cc109
--- /dev/null
+++ b/mod/beechat/graphics/icons/resultset_previous.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/statuses.png b/mod/beechat/graphics/icons/statuses.png
new file mode 100644
index 000000000..e409f61a9
--- /dev/null
+++ b/mod/beechat/graphics/icons/statuses.png
Binary files differ
diff --git a/mod/beechat/graphics/icons/vcard.png b/mod/beechat/graphics/icons/vcard.png
new file mode 100644
index 000000000..c02f315d2
--- /dev/null
+++ b/mod/beechat/graphics/icons/vcard.png
Binary files differ
diff --git a/mod/beechat/languages/en.php b/mod/beechat/languages/en.php
new file mode 100644
index 000000000..38f03be98
--- /dev/null
+++ b/mod/beechat/languages/en.php
@@ -0,0 +1,45 @@
+<?php
+
+$en_array = array(
+ 'beechat:icons:home' => 'Home',
+
+ 'beechat:contacts:button' => 'Chat',
+
+ 'beechat:availability:available' => 'Available',
+ 'beechat:availability:dnd' => 'Do not disturb',
+ 'beechat:availability:away' => 'Away',
+ 'beechat:availability:xa' => 'Extended away',
+ 'beechat:availability:offline' => 'Offline',
+
+ 'beechat:connection:state:offline' => 'Offline',
+ 'beechat:connection:state:connecting' => 'Connecting...',
+ 'beechat:connection:state:authenticating' => 'Authenticating...',
+ 'beechat:connection:state:online' => 'Online',
+ 'beechat:connection:state:failed' => 'Failed',
+ 'beechat:connection:state:disconnecting' => 'Disconnecting...',
+
+ 'beechat:chat:self' => 'Me',
+ 'beechat:chat:composing' => ' is typing.',
+
+ 'beechat:box:minimize' => 'Minimize',
+ 'beechat:box:close' => 'Close',
+ 'beechat:box:showhide' => 'Show/Hide this chat window',
+ 'beechat:enabled' => 'Chat enabled',
+ 'beechat:disabled' => 'Chat disabled',
+ 'beechat:enablechat' => 'Enable chat',
+ 'beechat:disablechat' => 'Disable chat',
+ 'beechat:domain' => 'Chat domain',
+ 'beechat:groupdomain' => 'MUC domain',
+ 'beechat:chatroom' => 'Group chat',
+ 'beechat:dbname' => 'Database name',
+ 'beechat:dbhost' => 'Database host',
+ 'beechat:dbuser' => 'Database user',
+ 'beechat:dbuser' => 'notification:method:xmpp',
+ 'notification:method:xmpp' => 'Xmpp/Jabber',
+ 'beechat:dbpassword' => 'Database password',
+ 'beechat:xmlrpcip' => 'Ejabberd IP'
+ );
+
+add_translation('en', $en_array);
+
+?>
diff --git a/mod/beechat/languages/es.php b/mod/beechat/languages/es.php
new file mode 100644
index 000000000..78f009ce9
--- /dev/null
+++ b/mod/beechat/languages/es.php
@@ -0,0 +1,43 @@
+<?php
+
+$es_array = array(
+ 'beechat:icons:home' => 'Home',
+
+ 'beechat:contacts:button' => 'Chat',
+
+ 'beechat:availability:available' => 'Disponible',
+ 'beechat:availability:dnd' => 'No molestar',
+ 'beechat:availability:away' => 'Fuera',
+ 'beechat:availability:xa' => 'Fuera bastante tiempo',
+ 'beechat:availability:offline' => 'Desconectado',
+
+ 'beechat:connection:state:offline' => 'Desconectado',
+ 'beechat:connection:state:connecting' => 'Conectando...',
+ 'beechat:connection:state:authenticating' => 'Iniciando...',
+ 'beechat:connection:state:online' => 'Conectado',
+ 'beechat:connection:state:failed' => 'Fallo',
+ 'beechat:connection:state:disconnecting' => 'Desconectando...',
+
+ 'beechat:chat:self' => 'Yo',
+ 'beechat:chat:composing' => ' esta escribiendo.',
+
+ 'beechat:box:minimize' => 'Minimizar',
+ 'beechat:box:close' => 'Cerrar',
+ 'beechat:box:showhide' => 'Mostrar/Ocultar esta ventana de chat',
+ 'beechat:enabled' => 'Chat activado',
+ 'beechat:disabled' => 'Chat desactivado',
+ 'beechat:enablechat' => 'Activar chat',
+ 'beechat:disablechat' => 'Desactivar chat',
+ 'beechat:domain' => 'Dominio Chat',
+ 'beechat:groupdomain' => 'Dominio MUC',
+ 'beechat:chatroom' => 'Chat del grupo',
+ 'beechat:dbname' => 'Database name',
+ 'beechat:dbhost' => 'Database host',
+ 'beechat:dbuser' => 'Database user',
+ 'beechat:dbpassword' => 'Database password',
+ 'beechat:xmlrpcip' => 'Ejabberd IP'
+ );
+
+add_translation('es', $es_array);
+
+?>
diff --git a/mod/beechat/languages/fr.php b/mod/beechat/languages/fr.php
new file mode 100644
index 000000000..58b0eac3a
--- /dev/null
+++ b/mod/beechat/languages/fr.php
@@ -0,0 +1,32 @@
+<?php
+
+$fr_array = array(
+ 'beechat:icons:home' => 'Accueil',
+
+ 'beechat:contacts:button' => 'Chat',
+
+ 'beechat:availability:available' => 'Disponible',
+ 'beechat:availability:dnd' => 'Ne pas déranger',
+ 'beechat:availability:away' => 'Absent',
+ 'beechat:availability:xa' => 'Absence prolongée',
+ 'beechat:availability:offline' => 'Hors ligne',
+
+ 'beechat:connection:state:offline' => 'Hors ligne',
+ 'beechat:connection:state:connecting' => 'Connexion...',
+ 'beechat:connection:state:authenticating' => 'Authentification...',
+ 'beechat:connection:state:online' => 'En ligne',
+ 'beechat:connection:state:failed' => 'Échec',
+ 'beechat:connection:state:disconnecting' => 'Déconnexion...',
+
+ 'beechat:chat:self' => 'Moi',
+ 'beechat:chat:composing' => ' est en train d\'écrire.',
+
+ 'beechat:box:minimize' => 'Diminuer',
+ 'beechat:box:close' => 'Fermer',
+ 'beechat:box:showhide' => 'Montrer/Cacher cette fenêtre de chat'
+
+ );
+
+add_translation('fr', $fr_array);
+
+?>
diff --git a/mod/beechat/lib/beechat.php b/mod/beechat/lib/beechat.php
new file mode 100644
index 000000000..bf002d648
--- /dev/null
+++ b/mod/beechat/lib/beechat.php
@@ -0,0 +1,250 @@
+<?
+/*
+ allow_change_subj
+ allow_private_messages
+ allow_query_users
+ allow_user_invites
+ anonymous
+ logging
+ max_users
+ members_by_default
+ members_only
+ moderated
+ password
+ password_protected
+ persistent
+ public
+ public_list
+ title
+
+muc_room_set_affiliation struct[{name, String}, {service, String},
+ {jid, String}, {affiliation, Affiliation}] Integer
+
+
+*/
+ //$request = xmlrpc_encode_request('muc_online_rooms', "global", (array('encoding' => 'utf-8')));
+
+
+function ejabberd_xmlrpc_send($request)
+{
+ $context = stream_context_create(array('http' => array(
+ 'method' => "POST",
+ 'header' => "User-Agent: XMLRPC::Client mod_xmlrpc\r\n" .
+ "Content-Type: text/xml\r\n" .
+ "Content-Length: ".strlen($request),
+ 'content' => $request
+ )));
+
+ $file = file_get_contents("http://".elgg_get_plugin_setting("xmlrpcip", "beechat").":4560/RPC2", false, $context);
+
+ $response = xmlrpc_decode($file);
+ if (is_array($response) && xmlrpc_is_fault($response)) {
+ trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
+ } else {
+ // print_r($response);
+ }
+}
+
+function ejabberd_xmlrpc_command($command, $params)
+{
+ //error_log("send xmlrpc: ".$command);
+ $request = xmlrpc_encode_request($command, $params, (array('encoding' => 'utf-8')));
+ return ejabberd_xmlrpc_send($request);
+}
+
+function xmpp_escape($name) {
+ // http://xmpp.org/extensions/xep-0106.html#escaping
+ $name = str_replace(' ', '\\20', $name);
+ $name = str_replace('"', '\\22', $name);
+ $name = str_replace('&', '\\26', $name);
+ $name = str_replace("'", '\\27', $name);
+ $name = str_replace('/', '\\2f', $name);
+ $name = str_replace(';', '\\3a', $name);
+ $name = str_replace('<', '\\3c', $name);
+ $name = str_replace('>', '\\3e', $name);
+ $name = str_replace('@', '\\40', $name);
+ $name = str_replace('\\', '\\5c', $name);
+ return $name;
+}
+
+class EjabberdMucRoom {
+ function __construct($group) {
+ $this->group = $group;
+ }
+ function setOption($name, $value) {
+ $group = $this->group;
+ $param=array("name"=>elgg_get_friendly_title($group->name),
+ "service"=>elgg_get_plugin_setting("groupdomain", "beechat"),
+ "option"=>$name,
+ "value"=>$value);
+ ejabberd_xmlrpc_command('muc_room_change_option', $param);
+ }
+ function addMember($member) {
+ //"outcast" | "none" | "member" | "admin" | "owner"
+ $group = $this->group;
+ if ($member->guid === $group->owner_guid)
+ $affiliation = "owner";
+ elseif ($group->canEdit($member->guid))
+ $affiliation = "admin";
+ else
+ $affiliation = "member";
+ $this->setAffiliation($member, $affiliation);
+ }
+
+ function setAffiliation($member, $affiliation) {
+ $group = $this->group;
+ $param = array("name" => elgg_get_friendly_title($group->name),
+ "service" => elgg_get_plugin_setting("groupdomain", "beechat"),
+ "jid" => xmpp_escape($member->username) . '@' . elgg_get_plugin_setting("domain", "beechat"),
+ "affiliation" => $affiliation);
+ ejabberd_xmlrpc_command('muc_room_set_affiliation', $param);
+ //echo "set affiliation ".$member->username."<br/>";
+ }
+}
+
+function ejabberd_create_group($group)
+{
+ //echo "creating " . $group->name . "<br/>";
+ // create room
+ $param=array("name"=>elgg_get_friendly_title($group->name),
+ "service"=>elgg_get_plugin_setting("groupdomain", "beechat"),
+ "server"=>elgg_get_plugin_setting("domain", "beechat"));
+ ejabberd_xmlrpc_command('create_muc_room', $param);
+
+ // persistency
+
+ $room = new EjabberdMucRoom($group);
+ $room->setOption("persistent", true);
+ $room->setOption("title", $group->name);
+ // open to public?
+ if ($group->isPublicMembership()) {
+ $room->setOption("members_only", false);
+ }
+ else
+ $room->setOption("members_only", true);
+
+ if ($group->access_id === ACCESS_PUBLIC) {
+ $room->setOption("public_list", true);
+ $room->setOption("public", true);
+ }
+ else {
+ $room->setOption("public_list", false);
+ $room->setOption("public", false);
+ }
+ $members = $group->getMembers(0);
+ foreach($members as $member) {
+ $room->addMember($member);
+ }
+ $room->addMember(get_entity($group->owner_guid));
+}
+
+function ejabberd_destroy_group($group)
+{
+ $param=array("name"=>elgg_get_friendly_title($group->name),
+ "service"=>elgg_get_plugin_setting("groupdomain", "beechat"),
+ "server"=>elgg_get_plugin_setting("domain", "beechat"));
+ ejabberd_xmlrpc_command('delete_muc_room', $param);
+}
+
+function ejabberd_getjid($user, $do_external=false)
+{
+ if ($user->foreign || ($do_external && $user->alias && get_plugin_usersetting("usealias", $user->guid,"openid_client"))) {
+ if ($user->foreign)
+ $webid = $user->webid;
+ else
+ $webid = $user->alias;
+ if (strpos($webid, 'http') === 0) {
+ // http or https addresses
+ $hostparts = parse_url($webid);
+ $urlparts = explode('/', $webid);
+ $host = $hostparts['host'];
+ $username = $urlparts[count($urlparts)-1];
+ } else {
+ if (strpos($webid, ':') > 0) {
+ $webidparts = explode(':', $webid);
+ $hostparts = explode('@',$webidparts[1]);
+ } else {
+ $hostparts = explode('@',$webid);
+ }
+ $username = $hostparts[0];
+ $host = $hostparts[1];
+ }
+ }
+ else {
+ $username = $user->username;
+ $host = elgg_get_plugin_setting("domain", "beechat");
+ }
+ return xmpp_escape($username) . '@' . $host;
+}
+
+function ejabberd_friend_command($user, $friend, $command, $is_out) // $user adds $friend
+{
+ error_log(" * ".$friend->username."->".ejabberd_getjid($user)." ".$command);
+ if ($friend->foreign) {
+ error_log(" * beechat: friend is foreign!");
+ return;
+ }
+ $param = array("user" => elgg_get_friendly_title($friend->username),
+ "server" => elgg_get_plugin_setting("domain", "beechat"),
+ "from" => ejabberd_getjid($user),
+ "subs" => $command);
+ if ($is_out) {
+ error_log("out");
+ ejabberd_xmlrpc_command('send_roster_request_out', $param);
+ }
+ else {
+ $param['reason'] = 'unknown';
+ ejabberd_xmlrpc_command('send_roster_request_in', $param);
+ }
+}
+
+
+function ejabberd_friend_request($user, $friend) // $user adds $friend
+{
+ error_log('ejabberd_friend_request');
+ ejabberd_friend_command($friend, $user, 'subscribe', true); // out:$user : $friend
+ error_log('ejabberd_friend_requested');
+}
+function ejabberd_friend_accept($user, $friend) // $user adds $friend
+{
+ error_log('ejabberd_friend_accept');
+ ejabberd_friend_command($friend, $user, 'subscribed', true);
+ // following might be needed to have symmetry (and important for remote)
+ if ($friend->foreign) {
+ // following is needed for xmpp nodes
+ ejabberd_friend_command($friend, $user, 'subscribe', true);
+ }
+ // ejabberd_friend_command($friend, $user, 'subscribed', false);
+ // following can't be faked
+ if (!$friend->foreign)
+ ejabberd_friend_command($user, $friend, 'subscribed', true);
+ error_log('ejabberd_friend_accepted');
+}
+function ejabberd_friend_deny($user, $friend) // $user adds $friend
+{
+ error_log('ejabberd_friedeny');
+ ejabberd_friend_command($friend, $user, 'unsubscribed', true);
+}
+function ejabberd_friend_remove($user, $friend) // $user adds $friend
+{
+ error_log('ejabberd_friend_remove');
+ if ($friend->foreign) {
+ ejabberd_friend_command($friend, $user, 'unsubscribed', true);
+ ejabberd_friend_command($friend, $user, 'unsubscribed', false);
+ }
+ else
+ ejabberd_friend_command($friend, $user, 'unsubscribed', false);
+ if (!$friend->foreign)
+ ejabberd_friend_command($user, $friend, 'unsubscribed', false);
+ error_log('ejabberd_friend_removed');
+}
+
+/*function ejabberd_send_chat($from, $to, $body) { // $user adds $friend
+ $param = array("body"=>$body,
+ "from"=>$from,
+ "to"=>$to);
+ ejabberd_xmlrpc_command('send_chat_message', $param);
+}*/
+
+
+?>
diff --git a/mod/beechat/manifest.xml b/mod/beechat/manifest.xml
new file mode 100644
index 000000000..ad948fdb4
--- /dev/null
+++ b/mod/beechat/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>Beechat</name>
+ <author>Beechannels + Lorea dev</author>
+ <version>1.8.0</version>
+ <category>widget</category>
+ <description>XMPP chat for Elgg.</description>
+ <website>https://lorea.org</website>
+ <copyright>(C) Beechanels 2009, Lorea 2009-2013</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/beechat/migrate.php b/mod/beechat/migrate.php
new file mode 100644
index 000000000..20bee7973
--- /dev/null
+++ b/mod/beechat/migrate.php
@@ -0,0 +1,88 @@
+<?php
+require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+
+global $CONFIG;
+admin_gatekeeper();
+
+// It's possible large upgrades could exceed the max execution time.
+set_time_limit(0);
+
+// get ejabberd db settings from elgg.
+$domain = elgg_get_plugin_setting("domain", "beechat");
+$dbname = elgg_get_plugin_setting("dbname", "beechat");
+$dbhost = elgg_get_plugin_setting("dbhost", "beechat");
+$dbuser = elgg_get_plugin_setting("dbuser", "beechat");
+$dbpassword = elgg_get_plugin_setting("dbpassword", "beechat");
+
+$jabber_domain = $domain;
+
+$dbh_elgg = null;
+$dbh_ejabberd = null;
+
+$dsn_elgg = 'mysql:dbname='.$CONFIG->dbname.';host='.$CONFIG->dbhost;
+$dsn_ejabberd = 'mysql:dbname='.$dbname.';host='.$dbhost;
+
+$dbprefix = $CONFIG->dbprefix;
+
+$user = $dbuser;
+$password = $dbpassword;
+
+$relationship_type = 'friend';
+
+$counter = 0;
+
+try {
+ $dbh_elgg = new PDO($dsn_elgg, $CONFIG->dbuser, $CONFIG->dbpass);
+
+ $sql = 'SELECT guid, name, username FROM '.$dbprefix.'users_entity';
+ $sth = $dbh_elgg->prepare($sql);
+ $sth->execute();
+
+ $users = array();
+ while ($row = $sth->fetch(PDO::FETCH_ASSOC))
+ $users[$row['guid']] = $row;
+
+ $sql = 'SELECT guid_one, guid_two FROM '.$dbprefix.'entity_relationships ';
+ $sql .= 'WHERE relationship = ?;';
+ $sth = $dbh_elgg->prepare($sql);
+
+ $sth->bindParam(1, $relationship_type);
+ $sth->execute();
+
+ $dbh_ejabberd = new PDO($dsn_ejabberd, $user, $password);
+ $dbh_ejabberd->beginTransaction();
+
+ while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
+ $sql = 'INSERT INTO rosterusers (username, jid, nick, subscription, ask, server, type) VALUES (?, ?, ?, ?, ?, ?, ?);';
+ $sth_ejabberd = $dbh_ejabberd->prepare($sql);
+
+
+ $username = $users[$row['guid_one']]['username'];
+ $jid = $users[$row['guid_two']]['username'] . '@' . $jabber_domain;
+ $nick = $users[$row['guid_two']]['name'];
+ $subscription = 'B';
+ $ask = 'N';
+ $server = 'N';
+ $type = 'item';
+
+ $sth_ejabberd->execute(array($username, $jid, $nick, $subscription, $ask, $server, $type));
+
+ $counter += 1;
+ if ($counter % 1000 == 0) {
+ //error_log( $username . ' registered ' . $jid . ' as a friend in his roster.' . "\n");
+ error_log("importing relations into jabber: $counter");
+ }
+ }
+
+ $dbh_ejabberd->commit();
+
+ $dbh_elgg = null;
+ $dbh_ejabberd = null;
+} catch (PDOException $e) {
+ if ($dbh_ejabberd != null)
+ $dbh_ejabberd->rollBack();
+ echo $e->getMessage();
+}
+?>
+
+
diff --git a/mod/beechat/migrategroups.php b/mod/beechat/migrategroups.php
new file mode 100644
index 000000000..4e3ef3f2b
--- /dev/null
+++ b/mod/beechat/migrategroups.php
@@ -0,0 +1,18 @@
+<?
+require_once(dirname(__FILE__) . "/lib.php");
+
+admin_gatekeeper();
+
+// groups disabled for now
+exit();
+
+$groups = elgg_get_entities(array('types'=>'group','limit'=>0));
+elgg_set_ignore_access(true);
+foreach($groups as $group) {
+ echo "migrating " . $group->name . "<br/>";
+ ejabberd_create_group($group);
+}
+echo "done!";
+elgg_set_ignore_access(false);
+
+?>
diff --git a/mod/beechat/sounds/newmessage.wav b/mod/beechat/sounds/newmessage.wav
new file mode 100644
index 000000000..58cccd0e6
--- /dev/null
+++ b/mod/beechat/sounds/newmessage.wav
Binary files differ
diff --git a/mod/beechat/start.php b/mod/beechat/start.php
new file mode 100644
index 000000000..4e4e4bb40
--- /dev/null
+++ b/mod/beechat/start.php
@@ -0,0 +1,184 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+ GLOBAL $CONFIG;
+
+ function beechat_create_group($event, $object_type, $object)
+ {
+ elgg_load_library('elgg:beechat');
+ ejabberd_create_group($object);
+ }
+
+ function beechat_delete_group($event, $object_type, $object)
+ {
+ elgg_load_library('elgg:beechat');
+ ejabberd_destroy_group($object);
+ }
+
+ function beechat_member_add($event, $object_type, $object)
+ {
+ if ($object->relationship === "member") {
+ elgg_load_library('elgg:beechat');
+ $user = get_entity($object->guid_one);
+ $group = get_entity($object->guid_two);
+ $room = new EjabberdMucRoom($group);
+ $room->addMember($user);
+ }
+ }
+
+ function beechat_member_delete($event, $object_type, $object)
+ {
+ if ($object->relationship === "member") {
+ elgg_load_library('elgg:beechat');
+ $user = get_entity($object->guid_one);
+ $group = get_entity($object->guid_two);
+ $room = new EjabberdMucRoom($group);
+ $room->setAffiliation($user, "none");
+ }
+ }
+
+ function beechat_init()
+ {
+ $pluginspath = elgg_get_plugins_path();
+ elgg_register_library('elgg:beechat', $pluginspath . 'beechat/lib/beechat.php');
+
+ elgg_register_event_handler('pagesetup', 'system', 'beechat_pagesetup');
+ // group actions disabled for now
+ /*if (elgg_get_plugin_setting("groupdomain", "beechat")) {
+ register_elgg_event_handler('create', 'group', 'beechat_create_group');
+ register_elgg_event_handler('delete', 'group', 'beechat_delete_group');
+ }
+ register_elgg_event_handler('create', 'member', 'beechat_member_add');
+ register_elgg_event_handler('delete', 'relationship', 'beechat_member_delete');*/
+
+
+ $actions_path = $pluginspath . 'beechat/actions/';
+ //elgg_register_action('beechat/join_groupchat', $actions_path . 'join_groupchat.php');
+ //elgg_register_action('beechat/leave_groupchat', $actions_path . 'leave_groupchat.php');
+ elgg_register_action('beechat/get_statuses', $actions_path . 'get_statuses.php');
+ elgg_register_action('beechat/get_icons', $actions_path . 'get_icons.php');
+ elgg_register_action('beechat/get_details', $actions_path . 'get_details.php');
+ elgg_register_action('beechat/get_connection', $actions_path . 'get_connection.php');
+ elgg_register_action('beechat/get_state', $actions_path . 'get_state.php');
+ elgg_register_action('beechat/save_state', $actions_path . 'save_state.php');
+
+ /*register_elgg_event_handler('create', 'friendrequest', 'beechat_xmpp_add_friendx');
+ #register_plugin_hook('action', 'friends/add', 'beechat_xmpp_add_friend', 1000);
+ register_plugin_hook('river_update', 'river_update', 'beechat_xmpp_approve_friendx');
+ register_plugin_hook('river_update_foreign', 'river_update', 'beechat_xmpp_approve_friendx');
+ #register_plugin_hook('action', 'friendrequest/approve', 'beechat_xmpp_approve_friend', 1000);
+
+
+ register_plugin_hook('action', 'friendrequest/decline', 'beechat_xmpp_decline_friend', 1000);
+ register_plugin_hook('action', 'friends/remove', 'beechat_xmpp_remove_friend', 1000);*/
+
+ // new friend sync
+ elgg_register_event_handler('delete', 'friend', array('BeechatSync', 'onFriendDelete'));
+ //elgg_register_event_handler('create', 'friendrequest', array('BeechatSync', 'onFriendCreate'));
+ elgg_register_event_handler('delete', 'friendrequest', array('BeechatSync', 'onFriendDelete'));
+
+
+
+ elgg_extend_view('js/initialise_elgg', 'js/json2.js');
+ elgg_extend_view('js/initialise_elgg', 'js/jquery.cookie.min.js');
+ elgg_extend_view('js/initialise_elgg', 'js/jquery.scrollTo-min.js');
+ elgg_extend_view('js/initialise_elgg', 'js/jquery.serialScroll-min.js');
+ elgg_extend_view('js/initialise_elgg', 'js/b64.js');
+ elgg_extend_view('js/initialise_elgg', 'js/sha1.js');
+ elgg_extend_view('js/initialise_elgg', 'js/md5.js');
+ elgg_extend_view('js/initialise_elgg', 'js/strophe.min.js');
+ elgg_extend_view('js/initialise_elgg', 'js/strophe.muc.js');
+ elgg_extend_view('js/initialise_elgg', 'js/jquery.tools.min.js');
+ elgg_extend_view('css', 'beechat/screen.css');
+ elgg_extend_view('js/initialise_elgg', 'beechat/beechat.js');
+ elgg_extend_view('page/elements/head', 'beechat/beechat.userjs');
+
+ elgg_extend_view('page/elements/foot', 'beechat/beechat');
+
+ $domain = elgg_get_plugin_setting("domain", "beechat");
+ //$group_domain = elgg_get_plugin_setting("groupdomain", "beechat");
+ /*$dbname = elgg_get_plugin_setting("dbname", "beechat");
+ $dbhost = elgg_get_plugin_setting("dbhost", "beechat");
+ $dbuser = elgg_get_plugin_setting("dbuser", "beechat");
+ $dbpassword = elgg_get_plugin_setting("dbpassword", "beechat");*/
+
+ global $CONFIG;
+ $CONFIG->chatsettings['domain'] = $domain;
+ //$CONFIG->chatsettings['groupdomain'] = $group_domain;
+
+ register_notification_handler('xmpp', 'beechat_notifications');
+ // register_plugin_hook('notify:entity:message','object','beechat_notifications_msg');
+ }
+
+ function beechat_notifications($from, $to, $subject, $topic, $params = array()) {
+ ejabberd_send_chat($to, "<div>".$topic."</div>");
+ }
+
+
+ function beechat_friendly_title($title) {
+ // need this because otherwise seems elgg
+ // gets in some problem trying to call the view
+ //$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);
+ return $title;
+ }
+
+ function beechat_pagesetup()
+ {
+ global $CONFIG;
+ /*if (elgg_get_context() == 'group_profile' && elgg_is_logged_in()) {
+ if (elgg_get_plugin_setting("groupdomain", "beechat")) {
+ $user = elgg_get_logged_in_user_entity();
+ $group = elgg_get_page_owner_entity();
+ if (!$group || !($group instanceof ElggGroup))
+ return;
+ if ($user->chatenabled && elgg_get_plugin_setting("groupdomain", "beechat")) {
+ if ($group->isPublicMembership() || $group->isMember($user)) {
+ $item = new ElggMenuItem('chatroom', elgg_echo('beechat:chatroom'), "javascript:g_beechat_user.joinRoom('".beechat_friendly_title($group->name)."@".$CONFIG->chatsettings['groupdomain']."', '".$group->guid."')");
+ elgg_register_menu_item('page', 'item');
+ }
+ }
+ }
+ }
+ else*/if (elgg_get_context() == 'settings' && elgg_is_logged_in()) {
+ $is_enabled = elgg_get_logged_in_user_entity()->chatenabled;
+ $action = $is_enabled ? 'disable' : 'enable';
+ elgg_register_menu_item('page', array(
+ 'name' => 'beechat',
+ 'text'=> elgg_echo("beechat:{$action}chat"),
+ 'href' => $CONFIG->wwwroot . "mod/beechat/{$action}chat.php",
+ ));
+ }
+ }
+
+
+ function ejabberd_send_chat($user, $body) { // $user adds $friend
+ $from = 'notify@'.elgg_get_plugin_setting("domain", "beechat").'/net';
+ if ($user->alias) {
+
+ }
+ elgg_load_library('elgg:beechat');
+ $to = ejabberd_getjid($user, true);
+ //xmlrpc_set_type(&$body, "base64");
+ $param = array("body" => $body,
+ "from" => $from,
+ "to" => $to);
+ ejabberd_xmlrpc_command('send_html_message', $param);
+ }
+
+
+
+
+elgg_register_event_handler('init', 'system', 'beechat_init');
diff --git a/mod/beechat/views/default/beechat/beechat.js.php b/mod/beechat/views/default/beechat/beechat.js.php
new file mode 100644
index 000000000..09f4e8852
--- /dev/null
+++ b/mod/beechat/views/default/beechat/beechat.js.php
@@ -0,0 +1,2498 @@
+/**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+/** Globals
+ *
+ */
+g_beechat_user = null;
+g_beechat_roster_items = null;
+g_beechat_rooms = new Array();
+
+function debugXMPP(msg) {
+ try {
+ //console.log(msg)
+ }
+ catch (err) {
+ }
+ //$('#layout_footer').html($('#layout_footer').html()+'<br/>'+msg);
+}
+
+/** Class: BeeChat
+ * An object container for all BeeChat mod functions
+ *
+ */
+BeeChat = {
+ BOSH_SERVICE: '/http-bind/',
+ DOMAIN: '<?php echo $vars['config']->chatsettings['domain'] ?>',
+ RESOURCE: 'beebac',
+ INACTIVITY_PERIOD_LENGTH: 60,
+
+ NS: {
+ CHAT_STATES: 'http://jabber.org/protocol/chatstates'
+ },
+
+ Message: {
+ Types: {
+ NORMAL: 'normal',
+ CHAT: 'chat',
+ GROUPCHAT: 'groupchat',
+ HEADLINE: 'headline',
+ ERROR: 'error'
+ },
+
+ ChatStates: {
+ COMPOSING: 'composing',
+ PAUSED: 'paused',
+ ACTIVE: 'active',
+ INACTIVE: 'inactive',
+ GONE: 'gone'
+ }
+ },
+
+ IQ: {
+ Types: {
+ GET: 'get',
+ RESULT: 'result',
+ SET: 'set',
+ ERROR: 'error'
+ }
+ },
+
+ Presence: {
+ Types: {
+ UNAVAILABLE: 'unavailable',
+ SUBSCRIBE: 'subscribe',
+ SUBSCRIBED: 'subscribed',
+ UNSUBSCRIBE: 'unsubscribe',
+ UNSUBSCRIBED: 'unsubscribed',
+ PROBE: 'probe',
+ ERROR: 'error'
+ },
+
+ ChildElements: {
+ SHOW: 'show',
+ STATUS: 'status',
+ PRIORITY: 'priority'
+ },
+
+ ShowElements: {
+ CHAT: 'chat',
+ DND: 'dnd',
+ AWAY: 'away',
+ XA: 'xa'
+ }
+ },
+
+ Roster: {
+ DEFAULT_GROUP: 'Contacts'
+ },
+
+
+ Events: {
+ Identifiers: {
+ UPDATE_CONNECTION_STATE: 0,
+ UPDATE_ROSTER: 1,
+ RECV_PRESENCE: 2,
+ RECV_CHAT_MESSAGE: 3
+ },
+ Messages: {
+ ConnectionStates: {
+ CONNECTING: "<?php echo elgg_echo('beechat:connection:state:connecting'); ?>",
+ AUTHENTICATING: "<?php echo elgg_echo('beechat:connection:state:authenticating'); ?>",
+ FAILED: "<?php echo elgg_echo('beechat:connection:state:failed'); ?>",
+ DISCONNECTING: "<?php echo elgg_echo('beechat:connection:state:disconnecting'); ?>",
+ OFFLINE: "<?php echo elgg_echo('beechat:connection:state:offline'); ?>",
+ ONLINE: "<?php echo elgg_echo('beechat:connection:state:online'); ?>"
+ }
+ }
+ }
+};
+
+
+/** Class: BeeChat.Core
+ * An object container for all BeeChat Core functions
+ *
+ */
+BeeChat.Core = {
+ ReferenceTables: {
+ AvailabilityRates: {
+ AVAILABLE: 0,
+ ONLINE: 0,
+ CHAT: 0,
+ DND: 1,
+ AWAY: 2,
+ XA: 3,
+ UNAVAILABLE: 10,
+ OFFLINE: 10
+ }
+ }
+};
+
+
+/** Class: BeeChat.Core.User
+ * Create a BeeChat.Core.User object
+ *
+ * Parameters:
+ * (String) jid - The user's jabber id
+ *
+ * Returns:
+ * A new BeeChat.Core.User.
+ */
+BeeChat.Core.User = function(jid)
+{
+ if (!(this instanceof arguments.callee))
+ return new BeeChat.Core.User(jid);
+
+ /** Private members
+ *
+ */
+ var _connection = null;
+ var _attached = false;
+ var _initialized = false;
+ var _jid = null;
+ var _roster = null;
+ var _msgTemp = [];
+ var _funcs = [];
+
+ /** Constructor
+ *
+ */
+ this.init = function(jid)
+ {
+ _jid = jid;
+ _roster = new BeeChat.Core.Roster();
+ }
+
+ /** Accessors
+ *
+ */
+ this.getConnection = function()
+ {
+ return _connection;
+ }
+
+ this.getJid = function()
+ {
+ return _jid;
+ }
+
+ this.getRoster = function()
+ {
+ return _roster;
+ }
+
+ this.isAttached = function()
+ {
+ return _attached;
+ }
+
+ this.isInitialized = function()
+ {
+ return _initialized;
+ }
+
+ /** Mutators
+ *
+ */
+ this.setInitialized = function(isInitialized)
+ {
+ _initialized = isInitialized;
+ }
+
+ /** Function: addObserver
+ * Add an observer for a specified type of event
+ *
+ * Parameters:
+ * (BeeChat.Events.Identifiers) eventType - The type of event to observer
+ * (Object) pFunc - A function to call when the event will be triggered
+ */
+ this.addObserver = function(eventType, pFunc)
+ {
+ if (jQuery.inArray(pFunc, _funcs) == -1) {
+ if (!_funcs[eventType])
+ _funcs[eventType] = [];
+ _funcs[eventType].push(pFunc);
+ }
+ }
+
+ /** Function: removeObserver
+ * Remove an observer
+ *
+ * Parameters:
+ * (Object) pFunc - The registered function
+ */
+ this.removeObserver = function(pFunc)
+ {
+ var index = null;
+
+ for (var key in _funcs) {
+ if (typeof _funcs[key] != 'object')
+ continue;
+ if ((index = jQuery.inArray(pFunc, _funcs[key])) != -1)
+ _funcs.splice(index, 1);
+ }
+ }
+
+ /** Function: connect
+ * Connect the user to the BOSH service
+ *
+ * Parameters:
+ * (String) password - The user's password
+ *
+ */
+ this.connect = function(password)
+ {
+ debugXMPP('connect');
+ if (_connection == null)
+ _connection = new Strophe.Connection(BeeChat.BOSH_SERVICE);
+ _connection.connect(_jid, password, _onConnect);
+ }
+
+ /** Function: attach
+ * Attach user's connection to an existing XMPP session
+ *
+ * Parameters:
+ * (String) sid - The SID of the existing XMPP session
+ * (String) rid - The RID of the existing XMPP session
+ */
+ this.attach = function(sid, rid)
+ {
+ if (_connection == null) {
+ _connection = new Strophe.Connection(BeeChat.BOSH_SERVICE);
+ }
+ _connection.attach(_jid, sid, rid, _onConnect);
+ _attached = true;
+ _onConnect(Strophe.Status.CONNECTED);
+ }
+
+ /** Function: disconnect
+ * Disconnect the user from the BOSH service
+ *
+ */
+ this.disconnect = function()
+ {
+ debugXMPP('disconnect');
+ if (_connection != null) {
+ _connection.disconnect();
+ _connection = null;
+ }
+ }
+
+ /** Function: requestSessionPause
+ * Request a session pause to the server connection manager
+ *
+ */
+ this.requestSessionPause = function()
+ {
+ var req = $build('body', {
+ rid: _connection.rid,
+ sid: _connection.sid,
+ pause: BeeChat.INACTIVITY_PERIOD_LENGTH,
+ xmlns: Strophe.NS.HTTPBIND
+ });
+
+ _attached = false;
+ _connection.send(req.tree());
+ }
+
+ /** Function: requestRoster
+ * Request a new roster to the server
+ *
+ */
+ this.requestRoster = function()
+ {
+ var req = $iq({from: _jid, type: BeeChat.IQ.Types.GET})
+ .c('query', {xmlns: Strophe.NS.ROSTER});
+
+ _connection.send(req.tree());
+ }
+
+ /** Function: sendInitialPresence
+ * Send initial presence to the server in order to signal availability for communications
+ *
+ */
+ this.sendInitialPresence = function()
+ {
+ _connection.send($pres().tree());
+ _initialized = true;
+ }
+
+ /** Function: sendChatMessage
+ * Send a chat message to the server
+ *
+ * Parameters:
+ * (String) addressee - The addressee of the chat message
+ * (String) msg - The chat message
+ *
+ */
+ this.sendChatMessage = function(addressee, msg, msgtype)
+ {
+ if (msgtype == null)
+ msgtype = BeeChat.Message.Types.CHAT;
+ var req = $msg({
+ type: msgtype,
+ to: addressee,
+ from: _connection.jid
+ }).c('body').t(msg).up().c(BeeChat.Message.ChatStates.ACTIVE, {xmlns: BeeChat.NS.CHAT_STATES});
+
+ _connection.send(req.tree());
+ }
+
+ /** Function: sendChatStateMessage
+ * Send a chat state message to the server
+ *
+ * Parameters:
+ * (String) addressee - The addressee of the chat state message
+ * (BeeChat.Message.ChatsState) state - The chat state that will be send
+ *
+ */
+ this.sendChatStateMessage = function(addressee, state)
+ {
+ var req = $msg({
+ type: BeeChat.Message.Types.CHAT,
+ to: addressee,
+ from: _connection.jid
+ }).c(state, {xmlns: BeeChat.NS.CHAT_STATES});
+
+ _connection.send(req.tree());
+ }
+
+ /** Function: sendPresenceAvailabiliy
+ * Send a detailed presence stanza to the server
+ *
+ * Parameters:
+ * (BeeChat.Presence.ShowElements) availability - The availability status
+ * (String) details - Detailed status information
+ *
+ */
+ this.sendPresenceAvailability = function(availability, details)
+ {
+ var req = $pres()
+ .c(BeeChat.Presence.ChildElements.SHOW).t(availability).up()
+ .c(BeeChat.Presence.ChildElements.STATUS).t(details).up()
+ .c(BeeChat.Presence.ChildElements.PRIORITY).t('1');
+
+ _connection.send(req.tree());
+ }
+
+ /** PrivateFunction: _fire
+ * Triggers registered funcs of registered observers for a specified type of event
+ *
+ */
+ function _fire(eventType, data, scope)
+ {
+ if (_funcs[eventType] != undefined) {
+ for (var i = 0; i < _funcs[eventType].length; i++)
+ _funcs[eventType][i].call((scope || window), data);
+ }
+ }
+ this.joinRoom = function(roomname, room_guid) {
+ var roomJid = roomname;
+ _connection['muc'].join(roomJid, BeeChat.UI.Resources.Strings.ChatMessages.SELF, false, false, '');
+ if (!(roomJid in g_beechat_rooms)) {
+ g_beechat_rooms[roomJid] = room_guid;
+ $.ajax({
+ url: BeeChat.UI.addActionTokens('<?php echo $vars['url'] . "action/beechat/join_groupchat?group_guid="; ?>'+room_guid, '&'),
+ async: true });
+ }
+
+
+ }
+
+ this.reconnectRooms = function() {
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().each(function() {
+ if (roomJid in g_beechat_rooms)
+ delete g_beechat_rooms[roomJid];
+ var contactBareJid = $(this).attr('bareJid');
+ var isroom = ($(this).attr('isroom')=='true')?true:false;
+ if (isroom) {
+ _connection['muc'].join(contactBareJid, BeeChat.UI.Resources.Strings.ChatMessages.SELF, false, false, '');
+ }
+ });
+ }
+
+ this.leaveRoom = function(roomJid) {
+ if (roomJid in g_beechat_rooms) {
+ $.ajax({
+ url: BeeChat.UI.addActionTokens('<?php echo $vars['url'] . "action/beechat/leave_groupchat?group_guid="; ?>'+g_beechat_rooms[roomJid], '&'),
+ async: true });
+
+ }
+ _connection['muc'].leave(roomJid, BeeChat.UI.Resources.Strings.ChatMessages.SELF, function(){});
+ }
+
+ /** PrivateFunction: _onConnect
+ * Connection state manager
+ *
+ * Parameters:
+ * (Strophe.Status) status - A Strophe connection status constant
+ *
+ */
+ function _onConnect(status)
+ {
+ var msg = null;
+
+ if (status == Strophe.Status.CONNECTING)
+{
+ msg = BeeChat.Events.Messages.ConnectionStates.CONNECTING;
+ }
+ else if (status == Strophe.Status.AUTHENTICATING) {
+ msg = BeeChat.Events.Messages.ConnectionStates.AUTHENTICATING;
+ }
+ else if (status == Strophe.Status.AUTHFAIL)
+ msg = BeeChat.Events.Messages.ConnectionStates.FAILED;
+ else if (status == Strophe.Status.CONNFAIL)
+ msg = BeeChat.Events.Messages.ConnectionStates.FAILED;
+ else if (status == Strophe.Status.DISCONNECTING)
+ msg = BeeChat.Events.Messages.ConnectionStates.DISCONNECTING;
+ else if (status == Strophe.Status.DISCONNECTED)
+ msg = BeeChat.Events.Messages.ConnectionStates.OFFLINE;
+ else if (status == Strophe.Status.CONNECTED) {
+ msg = BeeChat.Events.Messages.ConnectionStates.ONLINE;
+ _connection.addHandler(_onIQResult, null, 'iq', BeeChat.IQ.Types.RESULT, null, null);
+ _connection.addHandler(_onPresence, null, 'presence', null, null, null);
+ _connection.addHandler(_onMessageChat, null, 'message', BeeChat.Message.Types.CHAT, null, null);
+ _connection.addHandler(_onMessageChatRoom, null, 'message', BeeChat.Message.Types.GROUPCHAT, null, null);
+ }
+
+ _fire(BeeChat.Events.Identifiers.UPDATE_CONNECTION_STATE, msg);
+ }
+
+ /** PrivateFunction: _onIQResult
+ * Manage received IQ stanza of 'result' type
+ *
+ * Parameters:
+ * (XMLElement) iq - The iq stanza received
+ *
+ */
+ function _onIQResult(iq)
+ {
+ _roster.updateFromIQResult(iq);
+ _fire(BeeChat.Events.Identifiers.UPDATE_ROSTER, _roster.getItems());
+
+ return true;
+ }
+
+ /** PrivateFunction: _onPresence
+ * Manage received presence stanza
+ *
+ * Parameters:
+ * (XMLElement) presence - The presence stanza received
+ *
+ */
+ function _onPresence(presence)
+ {
+ var xquery = presence.getElementsByTagName("x");
+ debugXMPP('_onPresence'+xquery);
+ if (xquery.length > 0)
+ {
+ //Ignore MUC user protocol
+ for (var i = 0; i < xquery.length; i++)
+ {
+ var xmlns = xquery[i].getAttribute("xmlns");
+ if (xmlns && xmlns.match(Strophe.NS.MUC + '#user'))
+ {
+ var contactBareJid = $(presence).attr('from').split('/')[0];
+ var userNick = $(presence).attr('from').split('/')[1];
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+ if ($(presence).attr('type') != 'unavailable') {
+ BeeChat.UI.ChatBoxes.updateRoster(contactBareJid, userNick, presence);
+ }
+ else {
+ if (chatBoxElm.length) {
+ BeeChat.UI.ChatBoxes.updateRoster(contactBareJid, userNick, presence);
+ }
+ }
+ return true;
+ }
+
+ if (xmlns && xmlns.match(Strophe.NS.MUC))
+ {
+ var contactBareJid = $(presence).attr('from').split('/')[0];
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+
+ if ($(presence).attr('type') != 'unavailable' && $(presence).attr('type') != 'error') {
+ if (chatBoxElm.length == 0) {
+ BeeChat.UI.ScrollBoxes.add(contactBareJid);
+ }
+ }
+ return true;
+ }
+
+ }
+ }
+
+ if (Strophe.getBareJidFromJid($(presence).attr('from')).toLowerCase() != Strophe.getBareJidFromJid(_jid).toLowerCase()) {
+ _roster.updateFromPresence(presence);
+ }
+ _fire(BeeChat.Events.Identifiers.RECV_PRESENCE, _roster.getOnlineItems());
+ return true;
+ }
+
+ /** PrivateFunction: _onMessageChat
+ * Manage received message stanza of 'chat' type
+ *
+ * Parameters:
+ * (XMLElement) message - The message stanza received
+ *
+ */
+ function _onMessageChatRoom(message)
+ {
+ var roomJid = $(message).attr('from').split('/');
+
+// BeeChat.UI.ChatBoxes.updateChatState($(message).attr('from'), message);
+ BeeChat.UI.ChatBoxes.update(roomJid[0], roomJid[1], Strophe.getText($(message).find('body')[0]), true);
+
+ return true;
+ }
+
+ function _onMessageChat(message)
+ {
+ var data = {
+ contactBareJid: Strophe.getBareJidFromJid($(message).attr('from')),
+ msg: message
+ };
+ _msgTemp.push(data);
+ //alert("message");
+ if (_initialized == true) {
+ for (var key in _msgTemp) {
+ if (typeof _msgTemp[key] != 'object')
+ continue;
+ _fire(BeeChat.Events.Identifiers.RECV_CHAT_MESSAGE, _msgTemp[key]);
+ _msgTemp.shift();
+ }
+ }
+
+ return true;
+ }
+
+ this.init(jid);
+};
+
+
+/** Constructor: BeeChat.Core.Roster
+ * Create a BeeChat.Core.Roster object
+ *
+ * Parameters:
+ * (Object) items - The roster's items in object notation
+ *
+ * Returns:
+ * A new BeeChat.Core.Roster.
+ */
+BeeChat.Core.Roster = function()
+{
+ if (!(this instanceof arguments.callee))
+ return new BeeChat.Core.Roster();
+
+ /** Private members
+ *
+ */
+ _items = null;
+
+
+ /** Constructor
+ *
+ */
+ this.init = function()
+ {
+ _items = (arguments.length > 0) ? arguments[0] : {};
+ }
+
+ /** Accessors
+ *
+ */
+ this.getItems = function()
+ {
+ return _items;
+ }
+
+ /** Mutators
+ *
+ */
+ this.setItems = function(items)
+ {
+ for (var key in items) {
+ _items[key] = new BeeChat.Core.RosterItem(items[key]);
+ var contactBareJid = items[key].bareJid;
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+ var status = items[key].status;
+ /*if (status != 'unavailable' && status != 'error') {
+ if (chatBoxElm.length == 0) {
+ BeeChat.UI.ScrollBoxes.add(contactBareJid);
+ }
+ }*/
+
+ }
+ }
+
+ this.setIcons = function(icons)
+ {
+ if (_items) {
+ for (var key in icons) {
+ if (_items[key]) {
+ _items[key].icon_small = icons[key].small;
+ _items[key].icon_tiny = icons[key].tiny;
+ }
+ }
+ }
+ }
+
+ this.setStatuses = function(statuses)
+ {
+ if (_items) {
+ for (var key in statuses) {
+ if (_items[key]) {
+ _items[key].status = statuses[key];
+ }
+ }
+ }
+ }
+
+ /** Function: updateFromIQResult
+ * Update the roster items from an IQ result stanza
+ *
+ * Parameters:
+ * (XMLElement) iq - The IQ result stanza
+ */
+ this.updateFromIQResult = function(iq)
+ {
+ $(iq).find('item').each(function() {
+ var attr = {
+ bareJid: Strophe.getBareJidFromJid($(this).attr('jid')).toLowerCase(),
+ name: $(this).attr('name'),
+ subscription: $(this).attr('subscription'),
+ groups: [],
+ presences: {}
+ };
+
+ $(this).find('group').each(function() {
+ attr['groups'].push($(this).text());
+ });
+
+ if (attr['groups'].length == 0)
+ attr['groups'].push(BeeChat.Roster.DEFAULT_GROUP);
+
+ if (!_items[attr.bareJid])
+ _items[attr.bareJid] = new BeeChat.Core.RosterItem(attr);
+ else {
+ _items[attr.bareJid].bareJid = attr.bareJid;
+ _items[attr.bareJid].name = attr.name;
+ _items[attr.bareJid].subscription = attr.subscription;
+ _items[attr.bareJid].groups = attr.groups;
+ }
+ });
+ }
+
+ /** Function: updateFromPresence
+ * Update the roster items from a presence stanza
+ *
+ * Parameters:
+ * (XMLElement) presence - The presence stanza
+ *
+ * Returns:
+ * (String) The bare jid of the roster item who updated his presence
+ */
+ this.updateFromPresence = function(presence)
+ {
+ var jid = $(presence).attr('from').toLowerCase();
+ var attr = {
+ bareJid: Strophe.getBareJidFromJid(jid),
+ name: null,
+ subscription: null,
+ groups: null,
+ presences: {}
+ };
+
+ attr.presences[jid] = {};
+ attr.presences[jid].type = (!$(presence).attr('type')) ? 'available' : $(presence).attr('type');
+ //alert($(presence).attr('from')+presence.toString());
+ //alert("presencetype"+attr.presences[jid].type);
+
+ if (attr.presences[jid].type == 'available') {
+ $(presence).children().each(function() {
+ if (this.tagName == BeeChat.Presence.ChildElements.SHOW)
+ attr.presences[jid].show = $(this).text();
+ if (this.tagName == BeeChat.Presence.ChildElements.STATUS)
+ attr.presences[jid].status = $(this).text();
+ });
+
+ if (!attr.presences[jid].show)
+ attr.presences[jid].show = 'chat';
+ } else {
+ attr.presences[jid].show = 'offline';
+ }
+
+ if (!_items[attr.bareJid])
+ _items[attr.bareJid] = new BeeChat.Core.RosterItem(attr);
+ else
+ _items[attr.bareJid].presences[jid] = attr.presences[jid];
+ }
+
+ /** Function: getOnlineItems
+ *
+ *
+ */
+ this.getOnlineItems = function()
+ {
+ var sortedOnlineBareJid = [];
+ var sortedOnlineItems = {};
+
+ for (var key in _items) {
+ if (typeof _items[key] != 'object')
+ continue;
+
+ var pres = _items[key].getStrongestPresence();
+
+ if (pres != null && pres.type == 'available') {
+ sortedOnlineBareJid.push(key);
+ }
+ }
+
+ if (sortedOnlineBareJid.length > 1) {
+ sortedOnlineBareJid.sort();
+ sortedOnlineBareJid.sort(statusSort);
+ }
+
+ for (var key in sortedOnlineBareJid) {
+ sortedOnlineItems[sortedOnlineBareJid[key]] = _items[sortedOnlineBareJid[key]];
+ }
+
+ return (sortedOnlineItems);
+ }
+
+ /** Function: getSizeOnlineItems
+ * Return the number of available items
+ *
+ * Returns:
+ * (int) The number of available items
+ */
+ this.getSizeOnlineItems = function()
+ {
+ var n = 0;
+
+ for (var key in _items) {
+ if (typeof _items[key] != 'object')
+ continue;
+
+ var pres = _items[key].getStrongestPresence();
+
+ if (pres != null && pres.type == 'available')
+ ++n;
+ }
+ return (n);
+ }
+
+ /** Function: getItemsUsernamesAsList
+ *
+ */
+ this.getItemsUsernamesAsList = function()
+ {
+ var data = '';
+
+ for (var key in _items) {
+ if (typeof _items[key] != 'object')
+ continue;
+ data = data + Strophe.getBareJidFromJid(key) + ',';
+ // data = data + Strophe.getNodeFromJid(key) + ',';
+ }
+
+ return (data);
+ }
+
+ /** PrivateFunction: statusSort
+ *
+ */
+ function statusSort(x, y)
+ {
+ var xPres = _items[x].getStrongestPresence();
+ var yPres = _items[y].getStrongestPresence();
+
+ if (xPres != null && yPres != null)
+ return (BeeChat.Core.Roster.Utils.comparePresences(xPres, yPres));
+ return (0);
+ }
+
+ this.init();
+};
+
+BeeChat.Core.Roster.Utils = {
+
+ /** Function: comparePresences
+ * Compare the two presences x and y
+ *
+ * Parameters:
+ * (Object) xPres - The x presence in object notation
+ * (Object) yPres - The y presence in object notation
+ *
+ * Returns:
+ * 0 if presence are equal, 1 if x > y, -1 if y > x
+ *
+ * Note:
+ * Presences are tagged in the following order:
+ * ONLINE < DND < AWAY < XA < OFFLINE
+ *
+ */
+ comparePresences: function(xPres, yPres)
+ {
+ var xRate = 0;
+ var yRate = 0;
+
+ if (xPres.type == 'unavailable')
+ xRate += BeeChat.Core.ReferenceTables.AvailabilityRates[xPres.type.toUpperCase()];
+ if (yPres.type == 'unavailable')
+ yRate += BeeChat.Core.ReferenceTables.AvailabilityRates[yPres.type.toUpperCase()];
+
+ if (xPres.show != null)
+ xRate += BeeChat.Core.ReferenceTables.AvailabilityRates[xPres.show.toUpperCase()];
+ if (yPres.show != null)
+ yRate =+ BeeChat.Core.ReferenceTables.AvailabilityRates[yPres.show.toUpperCase()];
+
+ if (xRate > yRate)
+ return (1);
+ else if (xRate == yRate)
+ return (0);
+ return (-1);
+ }
+};
+
+
+/** Constructor: BeeChat.Core.RosterItem
+ * Create a BeeChat.Core.RosterItem object
+ *
+ * Parameters:
+ * (Object) attr - The RosterItem's attributes in object notation
+ *
+ * Returns:
+ * A new BeeChat.Core.RosterItem.
+ */
+BeeChat.Core.RosterItem = function()
+{
+ this.bareJid = (arguments.length > 0) ? arguments[0].bareJid : null;
+ this.name = (arguments.length > 0) ? arguments[0].name : null;
+ this.subscription = (arguments.length > 0) ? arguments[0].subscription : null;
+ this.groups = (arguments.length > 0) ? arguments[0].groups : null;
+ this.presences = (arguments.length > 0) ? arguments[0].presences : null;
+ this.icon_small = (arguments.length > 0) ? arguments[0].icon_small : null;
+ this.icon_tiny = (arguments.length > 0) ? arguments[0].icon_tiny : null;
+ this.status = (arguments.length > 0) ? arguments[0].status : null;
+};
+BeeChat.Core.RosterItem.prototype = {
+ /** Function: getStrongestPresence
+ * Return the strongest presence of the RosterItem
+ *
+ */
+ getStrongestPresence: function()
+ {
+ var res = null;
+
+ for (var key in this.presences) {
+ if (typeof this.presences[key] != 'object')
+ continue;
+ if (res == null)
+ res = this.presences[key];
+ else
+ if (BeeChat.Core.Roster.Utils.comparePresences(this.presences[key], res) == -1)
+ res = this.presences[key];
+ }
+ return (res);
+ }
+};
+
+
+/** Class: BeeChat.UI
+ * An object container for all BeeChat UI functions
+ *
+ */
+BeeChat.UI = {
+ HAS_FOCUS: true,
+
+ Resources: {
+ Paths: {
+ ICONS: '<?php echo $vars['config']->url; ?>mod/beechat/graphics/icons/',
+ MEMBER_PROFILE: '<?php echo $vars['url']; ?>profile/'
+ },
+
+ Sounds: {
+ NEW_MESSAGE: 'beechat_sounds_new_message'
+ },
+
+ /*
+ Cookies: {
+ DOMAIN: 'beechannels.com',
+ FILENAME_CONN: 'beechat_conn'
+ },
+ */
+
+ Emoticons: {
+ FILENAME_SMILE: 'emoticon_smile.png',
+ FILENAME_UNHAPPY: 'emoticon_unhappy.png',
+ FILENAME_GRIN: 'emoticon_grin.png',
+ FILENAME_EVILGRIN: 'emoticon_evilgrin.png',
+ FILENAME_SURPRISED: 'emoticon_surprised.png',
+ FILENAME_TONGUE: 'emoticon_tongue.png',
+ FILENAME_WINK: 'emoticon_wink.png'
+ },
+
+ Strings: {
+ Availability: {
+ AVAILABLE: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ CHAT: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ ONLINE: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ DND: "<?php echo elgg_echo('beechat:availability:dnd'); ?>",
+ AWAY: "<?php echo elgg_echo('beechat:availability:away'); ?>",
+ XA:"<?php echo elgg_echo('beechat:availability:xa'); ?>",
+ OFFLINE: "<?php echo elgg_echo('beechat:availability:offline'); ?>"
+ },
+
+ Contacts: {
+ BUTTON: "<?php echo elgg_echo('beechat:contacts:button'); ?>"
+ },
+
+ ChatMessages: {
+ SELF: "<?php echo $_SESSION['user']->name; ?>",
+ COMPOSING: "<?php echo elgg_echo('beechat:chat:composing'); ?>"
+ },
+
+ Box: {
+ MINIMIZE: "<?php echo elgg_echo('beechat:box:minimize'); ?>",
+ CLOSE: "<?php echo elgg_echo('beechat:box:close'); ?>",
+ SHOWHIDE: "<?php echo elgg_echo('beechat:box:showhide'); ?>"
+ }
+ },
+
+ StyleClasses: {
+ Availability: {
+ Left: {
+ ONLINE: 'beechat_left_availability_chat',
+ DND: 'beechat_left_availability_dnd',
+ AWAY: 'beechat_left_availability_away',
+ XA: 'beechat_left_availability_xa',
+ OFFLINE: 'beechat_left_availability_offline',
+ ROOM: 'beechat_left_availability_room'
+ },
+
+ Right: {
+ ONLINE: 'beechat_right_availability_chat',
+ DND: 'beechat_right_availability_dnd',
+ AWAY: 'beechat_right_availability_away',
+ XA: 'beechat_right_availability_xa',
+ OFFLINE: 'beechat_right_availability_offline',
+ ROOM: 'beechat_right_availability_room'
+ },
+
+ Control: {
+ UP: 'beechat_availability_switcher_control_up',
+ DOWN: 'beechat_availability_switcher_control_down'
+ }
+ },
+
+ ChatBox: {
+ MAIN: 'beechat_chatbox',
+ MAINROOM: 'beechat_chatbox_room',
+ TOP: 'beechat_chatbox_top',
+ SUBTOP: 'beechat_chatbox_subtop',
+ TOP_ICON: 'beechat_chatbox_top_icon',
+ TOP_CONTROLS: 'beechat_chatbox_top_controls',
+ CONTENT: 'beechat_chatbox_content',
+ INPUT: 'beechat_chatbox_input',
+ BOTTOM: 'beechat_chatbox_bottom',
+ CONTROL: 'beechat_chatbox_control',
+ STATE: 'beechat_chatbox_state',
+ MESSAGE: 'beechat_chatbox_message',
+ MESSAGE_SENDER: 'beechat_chatbox_message_sender',
+ MESSAGE_DATE: 'beechat_chatbox_message_date',
+ CHATROOM: 'beechat_chatbox_chatroom',
+ ROOMROSTER: 'beechat_chatbox_roomroster',
+ ROSTER_ITEM: 'beechat_chatbox_roomrosteritem'
+ },
+
+ ScrollBox: {
+ SELECTED: 'beechat_scrollbox_selected'
+ },
+
+ BOX_CONTROL: 'beechat_box_control',
+ LABEL: 'beechat_label',
+ UNREAD_COUNT: 'beechat_unread_count'
+ },
+
+ Elements: {
+ ID_DIV_BAR: 'beechat',
+ ID_DIV_BAR_CENTER: 'beechat_center',
+ ID_DIV_BAR_RIGHT: 'beechat_right',
+
+ ID_TOOLTIP_TRIGGER: 'beechat_tooltip_trigger',
+
+ ID_SPAN_CONTACTS_BUTTON: 'beechat_contacts_button',
+ ID_SPAN_CLOSE_BOX: 'beechat_box_control_close',
+
+ ID_DIV_CONTACTS: 'beechat_contacts',
+ ID_DIV_CONTACTS_CONTROLS: 'beechat_contacts_controls',
+ ID_SPAN_CONTACTS_CONTROL_MINIMIZE: 'beechat_contacts_control_minimize',
+ ID_DIV_CONTACTS_CONTENT: 'beechat_contacts_content',
+ ID_UL_CONTACTS_LIST: 'beechat_contacts_list',
+
+ ID_DIV_AVAILABILITY_SWITCHER: 'beechat_availability_switcher',
+ ID_SPAN_AVAILABILITY_SWITCHER_CONTROL: 'beechat_availability_switcher_control',
+ ID_SPAN_CURRENT_AVAILABILITY: 'beechat_current_availability',
+ ID_UL_AVAILABILITY_SWITCHER_LIST: 'beechat_availability_switcher_list',
+
+ ID_DIV_CHATBOXES: 'beechat_chatboxes',
+
+ ID_DIV_SCROLLBOXES: 'beechat_scrollboxes'
+ }
+ },
+
+
+ /** Function: initialize
+ * Initialize the BeeChat UI
+ *
+ */
+ initialize: function(ts, token)
+ {
+ this.ts = ts;
+ this.token = token;
+ $('#' + BeeChat.UI.Resources.Elements.ID_TOOLTIP_TRIGGER).tooltip({
+ offset: [-3, 8],
+ effect: 'fade'
+ });
+
+ $('#accountlinks').find('li').filter('[class=last]').bind('click', function() {
+ if (g_beechat_user != null)
+ g_beechat_user.disconnect();
+ });
+
+ BeeChat.UI.AvailabilitySwitcher.initialize(BeeChat.Presence.ShowElements.CHAT);
+ BeeChat.UI.ContactsList.initialize();
+ BeeChat.UI.ScrollBoxes.initialize();
+ BeeChat.UI.loadConnection();
+ },
+
+ /** Function: getUserDetails
+ * Retrieve user details
+ *
+ * Returns:
+ * User details in object notation.
+ *
+ */
+ addActionTokens: function(url_string, sep)
+ {
+ if (sep == null)
+ sep = "?";
+ return url_string + sep + "__elgg_ts="+this.ts + "&__elgg_token=" + this.token;
+ },
+
+ getUserDetails: function(cb_func)
+ {
+ var json = null;
+ var self = this;
+
+ $.ajax({
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_details"; ?>'),
+ async: true,
+ dataType: 'json',
+ success: function(data) {
+ cb_func(data);
+ }
+ });
+
+ return (json);
+ },
+
+ /** Function: connect
+ * Create the user and connect him to the BOSH service
+ *
+ * Parameters:
+ * (Object) conn - Running connection informations in object notation
+ */
+ connect: function()
+ {
+ var conn = (arguments.length > 0) ? arguments[0] : null;
+ var userDetails = {
+ jid: (conn != null) ? conn.jid : null,
+ password: null
+ }
+ var self = this;
+ //alert("connect");
+ if (conn == null || (conn != null && conn.attached)) {
+ BeeChat.UI.getUserDetails(function(retrievedUserDetails) {
+ userDetails.jid = retrievedUserDetails.username + '@' + BeeChat.DOMAIN + '/' + BeeChat.RESOURCE;
+ userDetails.password = retrievedUserDetails.password;
+ self.connect_end(conn, userDetails)
+ });
+ }
+ else
+ this.connect_end(conn, userDetails)
+ },
+
+ connect_end: function(conn, userDetails)
+ {
+ g_beechat_user = new BeeChat.Core.User(userDetails.jid);
+ g_beechat_user.addObserver(BeeChat.Events.Identifiers.UPDATE_CONNECTION_STATE, BeeChat.UI.updateConnectionStatus);
+ g_beechat_user.addObserver(BeeChat.Events.Identifiers.UPDATE_ROSTER, BeeChat.UI.onRosterUpdate);
+ g_beechat_user.addObserver(BeeChat.Events.Identifiers.RECV_PRESENCE, BeeChat.UI.ContactsList.update);
+ g_beechat_user.addObserver(BeeChat.Events.Identifiers.RECV_CHAT_MESSAGE, BeeChat.UI.onChatMessage);
+
+ if (conn == null || (conn != null && conn.attached))
+ g_beechat_user.connect(userDetails.password);
+ else
+ g_beechat_user.attach(conn.sid, conn.rid);
+ },
+
+ /** Function: disconnect
+ * Terminate the user's XMPP session
+ *
+ */
+ disconnect: function()
+ {
+ g_beechat_user.disconnect();
+ },
+
+ /** Function: updateConnectionStatus
+ *
+ */
+ updateConnectionStatus: function(connStatusMsg)
+ {
+ BeeChat.UI.ContactsList.updateButtonText(connStatusMsg);
+ if (connStatusMsg == BeeChat.Events.Messages.ConnectionStates.ONLINE) {
+ if (!g_beechat_user.isAttached()) {
+ debugXMPP("not attached");
+ BeeChat.UI.ScrollBoxes.isOpened = true;
+ g_beechat_user.requestRoster();
+ g_beechat_user.reconnectRooms();
+ //BeeChat.UI.ContactsList.toggleDisplay();
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).show();
+ $('.' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + '>textarea').removeAttr('disabled');
+ for (room_idx in g_user_rooms) {
+ var room = g_user_rooms[room_idx];
+ var chatBox = BeeChat.UI.ChatBoxes.getChatBoxElm(room[0]);
+ if (chatBox.length == 0) {
+ g_beechat_user.joinRoom(room[0], room[1])
+ }
+ }
+
+ }
+ if (g_beechat_user.isAttached()) {
+ debugXMPP("attached");
+ BeeChat.UI.loadState();
+ }
+
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'online');
+ BeeChat.UI.saveConnection();
+ }
+ else if (connStatusMsg == BeeChat.Events.Messages.ConnectionStates.OFFLINE) {
+ var contactsBoxElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS);
+
+ if (!contactsBoxElm.is(':hidden'))
+ BeeChat.UI.ContactsList.toggleDisplay();
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).empty();
+ BeeChat.UI.AvailabilitySwitcher.initialize(BeeChat.Presence.ShowElements.CHAT);
+ BeeChat.UI.ContactsList.updateButtonText(BeeChat.UI.Resources.Strings.Contacts.BUTTON);
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'offline');
+ $('.' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + '>textarea').attr('disabled', 'true');
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().hide();
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES).find('ul').children()
+ .attr('class', BeeChat.UI.Resources.StyleClasses.LABEL + ' ' + BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[BeeChat.Presence.Types.UNAVAILABLE.toUpperCase()]);
+ g_beechat_user = null;
+ BeeChat.UI.saveConnection();
+ }
+ },
+
+ /** Function: saveConnection
+ * Save connection informations (non sensible data) in $_SESSION.
+ *
+ */
+ saveConnection: function()
+ {
+ var conn = null;
+
+ if (g_beechat_user != null) {
+ var userConn = g_beechat_user.getConnection();
+
+ conn = {
+ 'jid': userConn.jid,
+ 'sid': userConn.sid,
+ 'rid': userConn.rid,
+ 'attached': g_beechat_user.isAttached()
+ };
+ }
+ var self = this;
+
+ $.ajax({
+ type: 'POST',
+ async: false,
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/save_state"; ?>'),
+ data: { beechat_conn: JSON.stringify(conn) }
+ });
+
+ /*
+ $.cookie(BeeChat.UI.Resources.Cookies.FILENAME_CONN, null);
+ $.cookie(BeeChat.UI.Resources.Cookies.FILENAME_CONN, JSON.stringify(conn), {path: '/', domain: BeeChat.UI.Resources.Cookies.DOMAIN});
+ */
+ },
+
+ /** Function: loadConnection
+ * Check if a connection already exists. In the case that a connection exists,
+ * this function triggers the connection process.
+ *
+ */
+ loadConnection: function()
+ {
+ var self = this;
+ $.ajax({
+ type: 'GET',
+ async: false,
+ cache: false,
+ dataType: 'json',
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_connection"; ?>'),
+ success: function(conn) {
+ if (conn != null) {
+ if (conn.attached)
+ BeeChat.UI.connect();
+ else
+ BeeChat.UI.connect(conn);
+ }
+ },
+ error: function() {
+ BeeChat.UI.connect();
+ }
+ });
+
+ /*
+ var conn = JSON.parse($.cookie(BeeChat.UI.Resources.Cookies.FILENAME_CONN));
+
+ if (conn != null) {
+ if (conn.attached)
+ BeeChat.UI.connect();
+ else
+ BeeChat.UI.connect(conn);
+ } else
+ BeeChat.UI.connect();
+ */
+ },
+
+ /** Function: saveState
+ * Save app state in $_SESSION
+ *
+ */
+ saveState: function()
+ {
+ var self = this;
+ var currentAvailabilityClass = $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CURRENT_AVAILABILITY).attr('class');
+ var currentAvailability = currentAvailabilityClass.substr(currentAvailabilityClass.lastIndexOf('_') + 1);
+
+ var data = {
+ availability: currentAvailability,
+ contacts: g_beechat_roster_items,
+ chats: {},
+ contacts_list: {
+ minimized: $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS).is(':hidden')
+ }
+ };
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().each(function() {
+ var contactBareJid = $(this).attr('bareJid');
+ //var contactBareJid = $(this).data('bareJid');
+ var isroom = ($(this).attr('isroom') == 'true');
+ if (isroom)
+ var roster = $(this).find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER + ']');
+ var html_content = $(this).children().filter('[bareJid="' + contactBareJid + '"]').html();
+ data.chats[contactBareJid] = {
+ 'html_content': escape(html_content),
+ 'roster_content': isroom?escape(roster.html()):'',
+ 'isroom': $(this).attr('isroom'),
+ 'group_guid': (contactBareJid in g_beechat_rooms)?g_beechat_rooms[contactBareJid]:0,
+ 'minimized': $(this).is(':hidden'),
+ 'unread': BeeChat.UI.UnreadCountBox.getElm(contactBareJid).text()
+ };
+ });
+
+ $.ajax({
+ type: 'POST',
+ async: false,
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/save_state"; ?>'),
+ data: { beechat_state: JSON.stringify(data) }
+ });
+ },
+
+ /** Function: loadState
+ * Load app state from $_SESSION
+ *
+ */
+ loadState: function()
+ {
+ var self = this;
+ $.ajax({
+ type: 'GET',
+ async: true,
+ cache: false,
+ dataType: 'json',
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_state"; ?>'),
+ error: function() {
+ alert('error getting state');
+ },
+ success: function(json) {
+ debugXMPP('loadState');
+ BeeChat.UI.AvailabilitySwitcher.initialize(json.availability);
+
+ if (!json.contacts_list.minimized) {
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS).show();
+ BeeChat.UI.ContactsList.showedStyle();
+ }
+
+ g_beechat_user.getRoster().setItems(json.contacts);
+ self.loadRosterItemsIcons(false);
+ self.loadRosterItemsStatuses(false);
+ g_beechat_roster_items = g_beechat_user.getRoster().getItems();
+ BeeChat.UI.ContactsList.update(g_beechat_user.getRoster().getOnlineItems())
+ g_beechat_user.setInitialized(true);
+
+ var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES);
+ var scrollBoxElmToShow = null;
+
+ // Load saved chats
+ for (var key in json.chats) {
+ var isroom = (json.chats[key].isroom == 'true');
+ if (isroom)
+ BeeChat.UI.ScrollBoxes.addRoom(key);
+ else
+ BeeChat.UI.ScrollBoxes.add(key);
+
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(key);
+ debugXMPP("load chat " + key);
+ chatBoxElm.hide();
+
+ if (!json.chats[key].minimized) {
+ scrollBoxElmToShow = BeeChat.UI.ScrollBoxes.getScrollBoxElm(key);
+ }
+
+ var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + key + '"]');
+
+ chatBoxContentElm.append(unescape(json.chats[key].html_content));
+ chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')});
+ if (isroom) {
+ g_beechat_rooms[key] = json.chats[key].room_guid;
+ var rosterElm = chatBoxElm.find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER + ']');
+ rosterElm.append(unescape(json.chats[key].roster_content));
+ }
+
+ BeeChat.UI.UnreadCountBox.update(key, json.chats[key].unread);
+ }
+ if (scrollBoxElmToShow != null)
+ scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElmToShow));
+ else
+ scrollBoxesElm.trigger('goto', 0);
+
+ // g_beechat_user.sendPresenceAvailability(json.availability, '');
+ BeeChat.UI.ScrollBoxes.isInitialized = true;
+ BeeChat.UI.ScrollBoxes.isOpened = true;
+
+ for (var key in json.chats) {
+ if (json.chats[key].minimized) {
+ BeeChat.UI.ChatBoxes.getChatBoxElm(key).hide();
+ BeeChat.UI.ScrollBoxes.unselect(key);
+ }
+ else {
+ BeeChat.UI.ChatBoxes.getChatBoxElm(key).show();
+ BeeChat.UI.ScrollBoxes.select(key);
+ }
+ }
+ for (room_idx in g_user_rooms) {
+ var room = g_user_rooms[room_idx];
+ var chatBox = BeeChat.UI.ChatBoxes.getChatBoxElm(room[0]);
+ if (chatBox.length == 0) {
+ g_beechat_user.joinRoom(room[0], room[1])
+ }
+ }
+
+ },
+ error: function() {
+ BeeChat.UI.ContactsList.initialize();
+ }
+ });
+ },
+
+ /** Function: loadRosterItemsIcons
+ *
+ */
+ loadRosterItemsIcons: function(is_async, cb)
+ {
+ var data = g_beechat_user.getRoster().getItemsUsernamesAsList();
+ var self = this;
+
+ $.ajax({
+ type: 'POST',
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_icons"; ?>'),
+ async: is_async,
+ cache: false,
+ data: {'beechat_roster_items_usernames': data},
+ dataType: 'json',
+ success: function(json) {
+ g_beechat_user.getRoster().setIcons(json);
+ g_beechat_roster_items = g_beechat_user.getRoster().getItems();
+
+ BeeChat.UI.ContactsList.update(g_beechat_user.getRoster().getOnlineItems())
+ if (cb) {
+ cb();
+ }
+ }
+ });
+ },
+
+ /** Function: loadRosterItemsStatuses
+ *
+ */
+ loadRosterItemsStatuses: function(is_async, cb)
+ {
+ var data = g_beechat_user.getRoster().getItemsUsernamesAsList();
+//alert(data)
+ var self = this;
+ $.ajax({
+ type: 'POST',
+ url: self.addActionTokens('<?php echo $vars['url'] . "action/beechat/get_statuses"; ?>'),
+ async: true, // force
+ cache: false,
+ data: {'beechat_roster_items_usernames': data},
+ dataType: 'json',
+ success: function(json) {
+ g_beechat_user.getRoster().setStatuses(json);
+ g_beechat_roster_items = g_beechat_user.getRoster().getItems();
+ BeeChat.UI.ContactsList.update(g_beechat_user.getRoster().getOnlineItems())
+ if (cb) {
+ cb();
+ }
+ }
+ });
+ },
+
+ /** Function: onRosterUpdate
+ * Notified by core on a roster update
+ *
+ */
+ onRosterUpdate: function(rosterItems)
+ {
+ g_beechat_roster_items = rosterItems;
+ //alert("get roster");
+ if (!g_beechat_user.isInitialized()) {
+ //alert("load roster" + rosterItems.length);
+ BeeChat.UI.loadRosterItemsStatuses(true,
+ function() { BeeChat.UI.loadRosterItemsIcons(true,
+ function() {g_beechat_user.sendInitialPresence();}); });
+ //BeeChat.UI.loadRosterItemsIcons(false);
+ //g_beechat_user.sendInitialPresence();
+ }
+ },
+
+ /** Function: onChatMessage
+ *
+ */
+ onChatMessage: function(data)
+ {
+ if ($(data.msg).find('body').length == 0) {
+ BeeChat.UI.ChatBoxes.updateChatState(data.contactBareJid, data.msg);
+ }
+ else {
+ BeeChat.UI.ChatBoxes.update(data.contactBareJid, BeeChat.UI.Utils.getContactName(data.contactBareJid), Strophe.getText($(data.msg).find('body')[0]));
+ }
+ }
+};
+
+
+/** Class: BeeChat.UI.Resources.ReferenceTables
+ * An object container for all reference tables
+ *
+ */
+BeeChat.UI.Resources.ReferenceTables = {
+ Styles: {
+ Availability: {
+ Left: {
+ AVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Left.ONLINE,
+ CHAT: BeeChat.UI.Resources.StyleClasses.Availability.Left.ONLINE,
+ DND: BeeChat.UI.Resources.StyleClasses.Availability.Left.DND,
+ AWAY: BeeChat.UI.Resources.StyleClasses.Availability.Left.AWAY,
+ XA: BeeChat.UI.Resources.StyleClasses.Availability.Left.XA,
+ UNAVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Left.OFFLINE,
+ OFFLINE: BeeChat.UI.Resources.StyleClasses.Availability.Left.OFFLINE,
+ ROOM: BeeChat.UI.Resources.StyleClasses.Availability.Left.ROOM
+ },
+
+ Right: {
+ AVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Right.ONLINE,
+ CHAT: BeeChat.UI.Resources.StyleClasses.Availability.Right.ONLINE,
+ DND: BeeChat.UI.Resources.StyleClasses.Availability.Right.DND,
+ AWAY: BeeChat.UI.Resources.StyleClasses.Availability.Right.AWAY,
+ XA: BeeChat.UI.Resources.StyleClasses.Availability.Right.XA,
+ UNAVAILABLE: BeeChat.UI.Resources.StyleClasses.Availability.Right.OFFLINE,
+ OFFLINE: BeeChat.UI.Resources.StyleClasses.Availability.Right.OFFLINE,
+ ROOM: BeeChat.UI.Resources.StyleClasses.Availability.Right.ROOM
+ }
+ }
+ }
+};
+
+
+/** Class: BeeChat.UI.ContactsList
+ * An object container for all ContactsList functions
+ *
+ */
+BeeChat.UI.ContactsList = {
+ /** Function: initialize
+ * Initialize the contacts list by binding elements
+ *
+ */
+ initialize: function()
+ {
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_CONTROL_MINIMIZE).unbind('click').bind('click', BeeChat.UI.ContactsList.toggleDisplay);
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).unbind('click').bind('click', function() {
+ if (g_beechat_user == null)
+ BeeChat.UI.connect();
+ else
+ BeeChat.UI.ContactsList.toggleDisplay();
+ });
+ },
+
+ /** Function: update
+ * Update the contacts list content
+ *
+ * Parameters:
+ * (Object)(BeeChat.Core.RosterItem) onlineRosterItems - A hash of RosterItems in object notation
+ *
+ */
+ update: function(onlineRosterItems)
+ {
+ var contactsListElm = $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST);
+
+ contactsListElm.children().each(function() {
+ var contactBareJid = $(this).attr('bareJid');
+
+ if (g_beechat_roster_items != null) {
+ if ($.inArray(contactBareJid, onlineRosterItems) == -1) {
+ BeeChat.UI.ScrollBoxes.updateAvailability(contactBareJid);
+ $(this).remove();
+ }
+ }
+ });
+
+ for (var key in onlineRosterItems) {
+ if (typeof onlineRosterItems[key] != 'object')
+ continue;
+
+ var contactElm = contactsListElm.find('li').filter('[bareJid="' + key + '"]');
+
+ if (contactElm.length == 0) {
+ contactElm = $('<li></li>')
+ .attr('bareJid', key)
+ .append($('<img />')
+ .attr('src', g_beechat_roster_items[key].icon_tiny))
+ .append(BeeChat.UI.Utils.getTruncatedContactName(key, 25))
+ .appendTo(contactsListElm)
+ .bind('click', function() {
+ if (!BeeChat.UI.ChatBoxes.getChatBoxElm($(this).attr('bareJid')).is(':visible')) {
+ BeeChat.UI.ContactsList.toggleDisplay();
+ }
+
+ BeeChat.UI.ScrollBoxes.add($(this).attr('bareJid'), false, true);
+ });
+ }
+
+ BeeChat.UI.ContactsList.updateContactAvailability(contactElm, key);
+ }
+
+ BeeChat.UI.ContactsList.updateButtonText(BeeChat.UI.Resources.Strings.Contacts.BUTTON + ' (<strong>' + g_beechat_user.getRoster().getSizeOnlineItems() + '</strong>)');
+ },
+
+ /** Function: updateContactAvailability
+ *
+ */
+ updateContactAvailability: function(contactElm, contactBareJid)
+ {
+ // Update from contactsList
+ contactElm.attr('class', BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Right[g_beechat_roster_items[contactBareJid].getStrongestPresence().show.toUpperCase()]);
+
+ // Update from scrollBoxes
+ BeeChat.UI.ScrollBoxes.updateAvailability(contactBareJid);
+ },
+
+ /** Function: updateButtonText
+ *
+ *
+ */
+ updateButtonText: function(msg)
+ {
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).html(msg);
+ },
+
+ /** Function: toggleDisplay
+ * Toggle the contacts box display (hide | show)
+ *
+ */
+ toggleDisplay: function()
+ {
+ var contactsBoxElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CONTACTS);
+
+ contactsBoxElm.toggle();
+ if (contactsBoxElm.is(':hidden')) {
+ BeeChat.UI.ContactsList.hiddenStyle();
+ } else {
+ BeeChat.UI.ContactsList.showedStyle();
+ }
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).hide();
+ },
+
+ /** Function: hiddenStyle
+ *
+ */
+ hiddenStyle: function()
+ {
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_BAR_RIGHT).css({'border-left': '1px solid #BBBBBB', 'border-right': '1px solid #BBBBBB', 'background-color': '#DDDDDD'});
+ },
+
+ /** Function: showedStyle
+ *
+ */
+ showedStyle: function()
+ {
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_BAR_RIGHT).css({'border-left': '1px solid #666666', 'border-right': '1px solid #666666', 'background-color': 'white'});
+ }
+};
+
+
+/** Class: BeeChat.UI.AvailabilitySwitcher
+ * An object container for all AvailabilitySwitcher functions
+ *
+ */
+BeeChat.UI.AvailabilitySwitcher = {
+ /** Function: initialize
+ * Initialize the availability switcher by setting the current user's availability
+ * and binding actions
+ *
+ */
+ initialize: function(availability)
+ {
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CURRENT_AVAILABILITY).unbind('click').bind('click', BeeChat.UI.AvailabilitySwitcher.toggleListDisplay);
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_AVAILABILITY_SWITCHER_CONTROL).unbind('click').bind('click', BeeChat.UI.AvailabilitySwitcher.toggleListDisplay);
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).find('li').each(function() {
+ $(this).unbind('click').bind('click', function() {
+ var availabilityClass = $(this).attr('class');
+ var availability = availabilityClass.substr(availabilityClass.lastIndexOf('_') + 1);
+
+ if (availability == 'offline')
+ BeeChat.UI.disconnect();
+ else {
+ g_beechat_user.sendPresenceAvailability(availability, '');
+ BeeChat.UI.AvailabilitySwitcher.update(availability);
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).hide('slow');
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).show('slow');
+ }
+ });
+ });
+ BeeChat.UI.AvailabilitySwitcher.update(availability);
+ },
+
+ /** Function: update
+ * Update the current user's availability
+ *
+ * Parameters:
+ * (BeeChat.Presence.ShowElements) availability - The current user's availability
+ */
+ update: function(availability)
+ {
+ var upperCasedAvailability = availability.toUpperCase();
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CURRENT_AVAILABILITY)
+ .attr('class', BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[upperCasedAvailability])
+ .text(BeeChat.UI.Resources.Strings.Availability[upperCasedAvailability]);
+
+ if (availability == 'chat')
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'online');
+ else if (availability == 'xa' || availability == 'away')
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'away');
+ else if (availability == 'dnd')
+ $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_CONTACTS_BUTTON).attr('class', 'dnd');
+ },
+
+ /** Function: switchControlClass
+ *
+ */
+ switchControlClass: function()
+ {
+ var switcherControlElm = $('#' + BeeChat.UI.Resources.Elements.ID_SPAN_AVAILABILITY_SWITCHER_CONTROL);
+
+ if (switcherControlElm.attr('class') == BeeChat.UI.Resources.StyleClasses.Availability.Control.UP)
+ switcherControlElm.attr('class', BeeChat.UI.Resources.StyleClasses.Availability.Control.DOWN);
+ else
+ switcherControlElm.attr('class', BeeChat.UI.Resources.StyleClasses.Availability.Control.UP);
+ },
+
+ /** Function: toggleListDisplay
+ *
+ */
+ toggleListDisplay: function()
+ {
+ BeeChat.UI.AvailabilitySwitcher.switchControlClass();
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_CONTACTS_LIST).toggle('slow');
+ $('#' + BeeChat.UI.Resources.Elements.ID_UL_AVAILABILITY_SWITCHER_LIST).toggle('slow');
+ }
+};
+
+
+/** Class: BeeChat.UI.ScrollBoxes
+ * An object container for all ScrollBoxes related functions
+ *
+ */
+BeeChat.UI.ScrollBoxes = {
+ isInitialized: false,
+ isOpened: false,
+
+ /** Function: initialize
+ *
+ */
+ initialize: function() {
+ var $prev = $('#beechat_center_prev'),
+ $next = $('#beechat_center_next');
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_BAR_CENTER).serialScroll({
+ target: '#beechat_scrollboxes',
+ items: 'li',
+ prev: '#beechat_center_prev',
+ next: '#beechat_center_next',
+ axys: 'x',
+ start: 2,
+ step: -1,
+ interval: 0,
+ duration: 0,
+ cycle: false,
+ force: true,
+ jump: true,
+ lock: true,
+ lazy: true,
+ constant: true,
+
+ onBefore: function(e, elem, $pane, $items, pos) {
+ $next.add($prev).hide();
+ $prev.add($next).hide();
+ if (pos != 0) {
+ $next.show();
+ }
+ if (pos != $items.length - 1)
+ $prev.show();
+ },
+
+ onAfter: function(elem) {
+ BeeChat.UI.ChatBoxes.takeStand($(elem).attr('bareJid'));
+ BeeChat.UI.ScrollBoxes.isInitialized = true;
+ }
+ });
+ },
+
+ /** Function: add
+ * Add a scrollbox to the scrollboxes bar
+ *
+ */
+ addRoom: function(contactBareJid)
+ {
+ debugXMPP('addRoom' + contactBareJid);
+ BeeChat.UI.ScrollBoxes.add(contactBareJid, true);
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+ scrollBoxElm.attr('class', BeeChat.UI.Resources.StyleClasses.Availability.Left.ROOM);
+ },
+
+ add: function(contactBareJid, isroom)
+ {
+ var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES);
+ var scrollBoxElm = scrollBoxesElm.find('ul').children().filter('[bareJid="' + contactBareJid + '"]');
+ debugXMPP("add " + contactBareJid + " " + scrollBoxElm.length);
+ if (scrollBoxElm.length == 0) {
+ var availClass = null;
+ var pres = null;
+ if (g_beechat_roster_items != undefined)
+ pres = g_beechat_roster_items[contactBareJid] != null ? g_beechat_roster_items[contactBareJid].getStrongestPresence() : null;
+
+ if (pres != null)
+ availClass = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[pres.show.toUpperCase()];
+ else
+ availClass = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[BeeChat.Presence.Types.UNAVAILABLE.toUpperCase()];
+
+ scrollBoxElm = $('<li></li>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.LABEL + ' ' + availClass)
+ .attr('bareJid', contactBareJid)
+ .attr('isroom', isroom?'true':'false')
+ .attr('title', BeeChat.UI.Resources.Strings.Box.SHOWHIDE)
+ .text(BeeChat.UI.Utils.getTruncatedContactName(contactBareJid, 11))
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.BOX_CONTROL)
+ .attr('id', BeeChat.UI.Resources.Elements.ID_SPAN_CLOSE_BOX)
+ .text('X')
+ .attr('title', BeeChat.UI.Resources.Strings.Box.CLOSE)
+ .bind('click', function() {
+ if (isroom)
+ g_beechat_user.leaveRoom(contactBareJid);
+ var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES);
+
+ BeeChat.UI.ChatBoxes.remove($(this).parent().attr('bareJid'));
+ BeeChat.UI.UnreadCountBox.remove($(this).parent().attr('bareJid'));
+ scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(BeeChat.UI.ScrollBoxes.getSelectedScrollBoxElm()));
+ BeeChat.UI.saveState();
+ }));
+
+ scrollBoxesElm.find('ul').append(scrollBoxElm);
+ BeeChat.UI.ChatBoxes.add(contactBareJid, isroom);
+ if (arguments.length == 3 && arguments[2])
+ scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElm));
+ if (!isroom) {
+ BeeChat.UI.loadRosterItemsStatuses(true, function () { BeeChat.UI.loadRosterItemsIcons(true); });
+ }
+ } else {
+ scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElm));
+ }
+ },
+
+ /** Function: remove
+ *
+ */
+ remove: function(contactBareJid)
+ {
+ BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid).remove();
+ },
+
+ /** Function: unselect
+ *
+ */
+ unselect: function(contactBareJid)
+ {
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+ scrollBoxElm.attr('class', (scrollBoxElm.attr('class')).replace(/beechat_scrollbox_selected/, ''));
+ },
+
+ /** Function: select
+ *
+ */
+ select: function(contactBareJid)
+ {
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+ var scrollBoxElmClasses = scrollBoxElm.attr('class');
+
+ if (scrollBoxElmClasses.search(/beechat_scrollbox_selected/) == -1)
+ scrollBoxElm.attr('class', scrollBoxElmClasses + ' ' + BeeChat.UI.Resources.StyleClasses.ScrollBox.SELECTED);
+ },
+
+ /** Function: updateAvailability
+ *
+ */
+ updateAvailability: function(contactBareJid)
+ {
+ var pres = g_beechat_roster_items[contactBareJid].getStrongestPresence();
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+ var scrollBoxElmClasses = scrollBoxElm.attr('class');
+ var updatedAvailability = null;
+
+ if (pres != null)
+ updatedAvailability = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[pres.show.toUpperCase()];
+ else
+ updatedAvailability = BeeChat.UI.Resources.ReferenceTables.Styles.Availability.Left[BeeChat.Presence.Types.UNAVAILABLE.toUpperCase()];
+
+ if (scrollBoxElmClasses == undefined || scrollBoxElmClasses.search(/(beechat_left_availability_)/g) == -1) {
+ scrollBoxElm.attr('class', BeeChat.UI.Resources.StyleClasses.LABEL + ' ' + updatedAvailability);
+ } else {
+ updatedAvailability = updatedAvailability.replace(/(beechat_left_availability)/g, '');
+
+ scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_chat)/g, updatedAvailability);
+ scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_dnd)/g, updatedAvailability);
+ scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_away)/g, updatedAvailability);
+ scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_xa)/g, updatedAvailability);
+ scrollBoxElmClasses = scrollBoxElmClasses.replace(/(_offline)/g, updatedAvailability);
+
+ scrollBoxElm.attr('class', scrollBoxElmClasses);
+ }
+ },
+
+ /** Function: getSelectedScrollBoxElm
+ *
+ */
+ getSelectedScrollBoxElm: function(contactBareJid)
+ {
+ var elm = undefined;
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES).find('ul').children().each(function() {
+ if ($(this).attr('class').search(/beechat_scrollbox_selected/) != -1)
+ elm = $(this);
+ });
+
+ return (elm);
+ },
+
+ /** Function: getScrollBoxElm
+ *
+ */
+ getScrollBoxElm: function(contactBareJid)
+ {
+ return $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES).find('ul').children().filter('[bareJid="' + contactBareJid + '"]');
+ }
+};
+
+
+/** Class: BeeChat.UI.ChatBoxes
+ * An object container for all ChatBoxes related functions
+ *
+ */
+BeeChat.UI.ChatBoxes = {
+ dateLastComposing: {},
+ lastTimedPauses: {},
+
+ /** Function: add
+ *
+ */
+ add: function(contactBareJid, isroom)
+ {
+ var chatBoxes = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES);
+
+ if ($(chatBoxes).children().filter('[bareJid="' + contactBareJid + '"]').length == 0) {
+ debugXMPP("create chatbox " + contactBareJid);
+ var chatBox = $('<div></div>')
+ .attr('class', isroom ? BeeChat.UI.Resources.StyleClasses.ChatBox.MAIN : BeeChat.UI.Resources.StyleClasses.ChatBox.MAIN)
+ .attr('bareJid', contactBareJid)
+ .attr('isroom', isroom ? 'true' : 'false')
+ .hide();
+
+ var chatBoxTop = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.TOP);
+ if (!isroom)
+ chatBoxTop.append($('<a></a>')
+ .attr('href', BeeChat.UI.Resources.Paths.MEMBER_PROFILE + Strophe.getNodeFromJid(contactBareJid))
+ .append($('<img />')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.TOP_ICON)
+ .attr('src', (g_beechat_roster_items != null && g_beechat_roster_items[contactBareJid] != undefined)?g_beechat_roster_items[contactBareJid].icon_small:'')))
+ chatBoxTop.append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.LABEL)
+ .html(isroom?BeeChat.UI.Utils.getTruncatedContactName(contactBareJid).split('@')[0]:'<a href="' + BeeChat.UI.Resources.Paths.MEMBER_PROFILE + Strophe.getNodeFromJid(contactBareJid) + '">' + BeeChat.UI.Utils.getTruncatedContactName(contactBareJid) + '</a>'))
+ .append($('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.TOP_CONTROLS)
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CONTROL)
+ .attr('id', BeeChat.UI.Resources.Elements.ID_SPAN_CLOSE_BOX)
+ .text('X')
+ .attr('title', BeeChat.UI.Resources.Strings.Box.CLOSE)
+ .bind('click', function() {
+ if (isroom)
+ g_beechat_user.leaveRoom(contactBareJid);
+ BeeChat.UI.ChatBoxes.remove(contactBareJid);
+ }))
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CONTROL)
+ .attr('id', BeeChat.UI.Resources.Elements.ID_SPAN_CLOSE_BOX)
+ .text('_')
+ .attr('title', BeeChat.UI.Resources.Strings.Box.MINIMIZE)
+ .css({'font-size': '1.6em', 'position': 'relative', 'line-height': '4px'})
+ .bind('click', function() {
+ BeeChat.UI.ScrollBoxes.unselect($(this).parent().parent().parent().attr('bareJid'));
+ $(this).parent().parent().parent().fadeOut('slow');
+ })));
+
+ var chatBoxSubTop = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.SUBTOP)
+ .append(BeeChat.UI.Utils.getTruncatedContactStatus((g_beechat_roster_items != null && g_beechat_roster_items[contactBareJid] != undefined && g_beechat_roster_items[contactBareJid].status != undefined) ? g_beechat_roster_items[contactBareJid].status : ''));
+
+ var chatBoxContent = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CONTENT)
+ .attr('bareJid', contactBareJid);
+
+ var chatBoxInput = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT)
+ .append($('<textarea></textarea>')
+ .attr('bareJid', contactBareJid)
+ .bind('keypress', isroom?BeeChat.UI.ChatBoxes.onRoomTypingMessage:BeeChat.UI.ChatBoxes.onTypingMessage)
+ .bind('keyup', function(e) {
+ if ((e.keyCode ? e.keyCode : e.which) == 13)
+ $(this).attr('value', '');
+ }));
+
+ var chatBoxBottom = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.BOTTOM)
+ .append($('<span></span>')
+ .append($('<span></span>')));
+ if (isroom) {
+ //var chatBoxBox = $('<div></div>')
+ // .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.CHATROOM)
+ var chatBoxRoster = $('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER)
+ //chatBoxBox.append(chatBoxTop).append(chatBoxSubTop).append(chatBoxContent).append(chatBoxInput).append(chatBoxBottom)
+ //chatBox.append(chatBoxRoster).append(chatBoxBox).appendTo(chatBoxes);
+ chatBox.append(chatBoxTop).append(chatBoxSubTop).append(chatBoxContent).append(chatBoxInput).append(chatBoxBottom).append(chatBoxRoster).appendTo(chatBoxes);
+ }
+ else
+ chatBox.append(chatBoxTop).append(chatBoxSubTop).append(chatBoxContent).append(chatBoxInput).append(chatBoxBottom).appendTo(chatBoxes);
+ }
+ else {
+ /*debugXMPP("show chatbox " + contactBareJid);
+ var chatBox = $(chatBoxes).children().filter('[bareJid="' + contactBareJid + '"]');
+ chatBox.show();*/
+ }
+ },
+
+ /** Function: takeStand
+ *
+ */
+ takeStand: function(contactBareJid)
+ {
+ var chatBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children();
+ var chatBoxElm = chatBoxesElm.filter('[bareJid="' + contactBareJid + '"]');
+ var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + contactBareJid + '"]');
+ var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES);
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+
+ if (!chatBoxElm.is(':hidden')) {
+ BeeChat.UI.ScrollBoxes.unselect(contactBareJid);
+ chatBoxElm.hide();
+ } else {
+ // Hide all other chatboxes
+ $.each(chatBoxesElm.filter('[bareJid!="' + contactBareJid + '"]'), function() {
+ BeeChat.UI.ScrollBoxes.unselect($(this).attr('bareJid'));
+ $(this).hide();
+ });
+ // Add selected scrollbox style
+ BeeChat.UI.ScrollBoxes.select(contactBareJid);
+ // Remove UnreadCountBox
+ BeeChat.UI.UnreadCountBox.remove(contactBareJid);
+ // Position the chatbox
+ var pos = scrollBoxElm.position().left - (chatBoxElm.width() - scrollBoxElm.width()) + 24;
+ chatBoxElm.css({'left': pos});
+ if (!BeeChat.UI.ScrollBoxes.isOpened)
+ return;
+ chatBoxElm.show().css({'left': pos});
+ // Scroll down the content of the chatbox
+ chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')});
+ // Focus textarea
+ chatBoxElm.children().filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + ']').find('textarea').focus();
+ }
+ },
+
+ /** Function: onTypingMessage
+ *
+ */
+ onRoomTypingMessage: function(e) {
+ BeeChat.UI.ChatBoxes._onTypingMessage(e, true, this);
+ },
+
+ onTypingMessage: function(e) {
+ BeeChat.UI.ChatBoxes._onTypingMessage(e, false, this);
+ },
+
+ _onTypingMessage: function(e, isroom, self)
+ {
+ var keyCode = (e.keyCode) ? e.keyCode : e.which;
+ var contactBareJid = $(self).attr('bareJid');
+
+ var msgtype = BeeChat.Message.Types.CHAT;
+ if (isroom)
+ msgtype = BeeChat.Message.Types.GROUPCHAT;
+
+ if (keyCode == 13 && $(self).val() != '') {
+ g_beechat_user.sendChatMessage(contactBareJid, jQuery.trim($(self).val()), msgtype);
+ if (!isroom)
+ BeeChat.UI.ChatBoxes.update(contactBareJid, BeeChat.UI.Utils.truncateString(BeeChat.UI.Resources.Strings.ChatMessages.SELF, 24), $(self).val(), isroom);
+ clearTimeout(BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid]);
+ BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid] = null;
+ } else {
+ var nowTime = new Date().getTime();
+
+ if (BeeChat.UI.ChatBoxes.dateLastComposing[contactBareJid] == null || BeeChat.UI.ChatBoxes.dateLastComposing[contactBareJid] + 2000 < nowTime) {
+ BeeChat.UI.ChatBoxes.dateLastComposing[contactBareJid] = nowTime;
+ g_beechat_user.sendChatStateMessage(contactBareJid, BeeChat.Message.ChatStates.COMPOSING);
+ }
+
+ clearTimeout(BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid]);
+ BeeChat.UI.ChatBoxes.lastTimedPauses[contactBareJid] = setTimeout('g_beechat_user.sendChatStateMessage(\'' + contactBareJid + '\', BeeChat.Message.ChatStates.PAUSED)', 2000);
+
+ var chatBoxTextAreaElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).children().filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.INPUT + ']').find('textarea');
+ chatBoxTextAreaElm.attr({scrollTop: chatBoxTextAreaElm.attr('scrollHeight')});
+ }
+ },
+
+ updateRoster: function(contactBareJid, fromName, presence)
+ {
+ var availability = $(presence).attr('type');
+ var item = $(presence).find('item');
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+
+ if (chatBoxElm.length == 0) {
+ BeeChat.UI.ScrollBoxes.add(contactBareJid);
+ //BeeChat.UI.ScrollBoxes.addRoom(contactBareJid);
+ chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+ }
+
+ //var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + contactBareJid + '"]');
+
+ var roster = chatBoxElm.find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.ROOMROSTER + ']');
+ if (availability == 'unavailable') {
+ roster.find('div').filter('[contactName='+fromName+']').remove();
+ }
+ else {
+ var hasName = roster.find('div').filter('[contactName='+fromName+']');
+ if (hasName.length == 0) {
+ roster.append($('<div>' + fromName + '</div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.ROSTER_ITEM)
+ .attr('title', item.attr('affiliation') + '/' + item.attr('role'))
+ .attr('contactName', fromName))
+ }
+ }
+ },
+
+
+ /** Function: update
+ *
+ */
+ update: function(contactBareJid, fromName, msg, isroom)
+ {
+ var chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+ debugXMPP(contactBareJid + " " + msg + " " + chatBoxElm.length);
+ if (chatBoxElm.length == 0) {
+ if (isroom) {
+ BeeChat.UI.ScrollBoxes.addRoom(contactBareJid);
+ BeeChat.UI.ChatBoxes.show(contactBareJid);
+ BeeChat.UI.ChatBoxes.takeStand(contactBareJid);
+ }
+ else {
+ BeeChat.UI.ScrollBoxes.add(contactBareJid,false,true);
+ // BeeChat.UI.ChatBoxes.show(contactBareJid);
+ BeeChat.UI.ChatBoxes.takeStand(contactBareJid);
+ }
+ chatBoxElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid);
+ }
+
+ var chatBoxContentElm = chatBoxElm.children().filter('[bareJid="' + contactBareJid + '"]');
+
+ chatBoxContentElm.find('p').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.STATE + ']').remove();
+
+ var chatBoxLastMessageElm = $(chatBoxContentElm).find('div').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE + ']').filter(':last');
+
+ if (chatBoxLastMessageElm && chatBoxLastMessageElm.find('span').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE_SENDER + ']').text() == fromName) {
+ chatBoxLastMessageElm.append('<p>' + BeeChat.UI.Utils.getPrintableChatMessage(msg) + '</p>');
+ } else {
+ chatBoxContentElm.append($('<div></div>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE)
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE_SENDER)
+ .text(fromName))
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.MESSAGE_DATE)
+ .text(BeeChat.UI.Utils.getNowFormattedTime()))
+ .append('<p>' + BeeChat.UI.Utils.getPrintableChatMessage(msg) + '</p>'));
+ }
+
+ chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')});
+
+ var scrollBoxesElm = $('#' + BeeChat.UI.Resources.Elements.ID_DIV_SCROLLBOXES);
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid);
+
+ if (BeeChat.UI.ScrollBoxes.isInitialized == false) {
+ scrollBoxesElm.trigger('goto', scrollBoxesElm.find('ul').children().index(scrollBoxElm));
+ }
+
+ debugXMPP("about to update number!");
+ if (chatBoxElm.is(':hidden')) {
+ debugXMPP("update number!");
+ BeeChat.UI.UnreadCountBox.update(contactBareJid);
+// if (BeeChat.UI.HAS_FOCUS)
+// document.getElementById(BeeChat.UI.Resources.Sounds.NEW_MESSAGE).Play();
+ }
+
+// if (!BeeChat.UI.HAS_FOCUS)
+// document.getElementById(BeeChat.UI.Resources.Sounds.NEW_MESSAGE).Play();
+ },
+
+ /** Function: updateChatState
+ *
+ */
+ updateChatState: function(contactBareJid, msg)
+ {
+ var chatBoxContentElm = BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).children().filter('[bareJid="' + contactBareJid + '"]');
+
+ $(msg).children().each(function() {
+ if (this.tagName == BeeChat.Message.ChatStates.COMPOSING) {
+ if (chatBoxContentElm.find('p').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.STATE + ']').length == 0) {
+ $('<p></p>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.ChatBox.STATE)
+ .html(BeeChat.UI.Utils.getContactName(contactBareJid) + BeeChat.UI.Resources.Strings.ChatMessages.COMPOSING + "</br />")
+ .appendTo(chatBoxContentElm);
+ }
+ } else if (this.tagName == BeeChat.Message.ChatStates.PAUSED) {
+ chatBoxContentElm.find('p').filter('[class=' + BeeChat.UI.Resources.StyleClasses.ChatBox.STATE + ']').remove();
+ }
+ });
+ chatBoxContentElm.attr({scrollTop: chatBoxContentElm.attr('scrollHeight')});
+ },
+
+ /** Function: remove
+ *
+ */
+ remove: function(contactBareJid)
+ {
+ BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).remove();
+ BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid).remove();
+ },
+
+ /** Function: show
+ *
+ */
+ show: function(contactBareJid)
+ {
+ BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).show();
+ },
+
+ /** Function: hide
+ *
+ */
+ hide: function(contactBareJid)
+ {
+ BeeChat.UI.ChatBoxes.getChatBoxElm(contactBareJid).hide();
+ },
+
+ /** Function: getChatBoxElm
+ *
+ */
+ getChatBoxElm: function(contactBareJid)
+ {
+ return $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().filter('[bareJid="' + contactBareJid + '"]');
+ }
+};
+
+BeeChat.UI.UnreadCountBox = {
+ /** Function: add
+ *
+ */
+ add: function(contactBareJid)
+ {
+ BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid)
+ .append($('<span></span>')
+ .attr('class', BeeChat.UI.Resources.StyleClasses.UNREAD_COUNT));
+ },
+
+ /** Function: remove
+ *
+ */
+ remove: function(contactBareJid)
+ {
+ BeeChat.UI.UnreadCountBox.getElm(contactBareJid).remove();
+ },
+
+ /** Function: update
+ *
+ */
+ update: function(contactBareJid)
+ {
+ if (arguments.length > 1 && !arguments[1])
+ return;
+
+ var unreadCountBoxElm = BeeChat.UI.UnreadCountBox.getElm(contactBareJid);
+ if (unreadCountBoxElm.length == 0) {
+ BeeChat.UI.UnreadCountBox.add(contactBareJid);
+ unreadCountBoxElm = BeeChat.UI.UnreadCountBox.getElm(contactBareJid);
+ }
+ if (arguments.length == 1) {
+ var unreadCount = unreadCountBoxElm.text();
+ unreadCountBoxElm.text(++unreadCount);
+ } else
+ unreadCountBoxElm.text(arguments[1]);
+ },
+
+ /** Function: getElm
+ *
+ */
+ getElm: function(contactBareJid)
+ {
+ return BeeChat.UI.ScrollBoxes.getScrollBoxElm(contactBareJid).find('span').filter('[class=' + BeeChat.UI.Resources.StyleClasses.UNREAD_COUNT +' ]');
+ }
+};
+
+/** Class: BeeChat.UI.Utils
+ * An object container for all UI utilities functions
+ *
+ */
+BeeChat.UI.Utils = {
+ /** Function: getTruncatedContactName
+ *
+ */
+ getTruncatedContactName: function(bareJid)
+ {
+ return (BeeChat.UI.Utils.truncateString(BeeChat.UI.Utils.getContactName(bareJid), (arguments.length == 2) ? arguments[1] : 21));
+ },
+
+ /** Function: getTruncatedContactStatus
+ *
+ */
+ getTruncatedContactStatus: function(contactStatus)
+ {
+ return (BeeChat.UI.Utils.truncateString(contactStatus, (arguments.length == 2 ? arguments[1] : 50)));
+ },
+
+ /** Function: getContactName
+ *
+ */
+ getContactName: function(bareJid)
+ {
+ var contactName = bareJid;
+
+ if (g_beechat_roster_items != null && g_beechat_roster_items[bareJid])
+ contactName = g_beechat_roster_items[bareJid].name;
+ // no contact name so we show bareJid
+ if (!contactName || contactName == '')
+ contactName = bareJid;
+
+ return (contactName);
+ },
+
+ /** Function: getPrintableChatMessage
+ *
+ */
+ getPrintableChatMessage: function(msg)
+ {
+ var val = new String;
+ val = $('<div>' + msg + '</div>');
+ msg = val.text();
+
+ msg = jQuery.trim(msg);
+ msg = BeeChat.UI.Utils.replaceLinks(msg);
+ msg = BeeChat.UI.Utils.replaceSmileys(msg);
+
+ return msg;
+ },
+
+ /** Function: getNowFormattedTime
+ *
+ */
+ getNowFormattedTime: function()
+ {
+ var date = new Date();
+
+ var hours = date.getHours();
+ var minutes = date.getMinutes();
+ var seconds = date.getSeconds();
+
+ if (hours < 10)
+ hours = '0' + hours;
+ if (minutes < 10)
+ minutes = '0' + minutes;
+ if (seconds < 10)
+ seconds = '0' + seconds;
+ return (hours + ':' + minutes + ':' + seconds);
+ },
+
+
+ /** Function: replaceSmileys
+ * Replace smileys founded in a string to beautiful icons :)
+ *
+ * Parameters:
+ * (String) str - The string containing smileys
+ *
+ */
+ replaceSmileys: function(str)
+ {
+ str = str.replace(/(;\))/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_WINK + '" />');
+ str = str.replace(/(:\))/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_SMILE + '" />');
+ str = str.replace(/(:\()/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_UNHAPPY + '" />');
+ str = str.replace(/(:D)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_GRIN + '" />');
+ str = str.replace(/(:o)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_SURPRISED + '" />');
+ str = str.replace(/(xD)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_EVILGRIN + '" />');
+ str = str.replace(/(:p)/gi, '<img src="' + BeeChat.UI.Resources.Paths.ICONS + BeeChat.UI.Resources.Emoticons.FILENAME_TONGUE + '" />');
+
+ return (str);
+ },
+
+ /** Function: replaceLinks
+ * Transform links founded in a string to clickable links
+ *
+ * Parameters:
+ * (String) str - The string where will be replaced links
+ */
+ replaceLinks: function(str)
+ {
+ var xpr =
+ /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
+
+ return (str.replace(xpr, '<a href="$1" target="_blank">$1</a>'));
+ },
+
+ /** Function: truncateString
+ * Truncate a string at a specified length
+ *
+ * Parameters:
+ * (String) str - The string to truncate
+ * (int) len - The maximum length of str
+ */
+ truncateString: function(str, len)
+ {
+ if (str != null && str.length > len)
+ return ((str.substr(0, len) + '...'));
+ return (str);
+ }
+};
+
+
+/** Executed when the DOM is ready
+ *
+ */
+function init_beechat(ts, token) {
+ if (typeof document.body.style.maxHeight === "undefined") { // IE6
+ return;
+ }
+
+ BeeChat.UI.initialize(ts, token);
+}
+
+/** Window resizing
+ *
+ */
+$(window).resize(function() {
+ if (typeof document.body.style.maxHeight === "undefined") { // IE6
+ return;
+ }
+
+ $('#' + BeeChat.UI.Resources.Elements.ID_DIV_CHATBOXES).children().each(function() {
+ var scrollBoxElm = BeeChat.UI.ScrollBoxes.getScrollBoxElm($(this).attr('bareJid'));
+ var pos = scrollBoxElm.position().left - ($(this).width() - scrollBoxElm.width()) + 24;
+
+ $(this).css({'left': pos});
+ });
+});
+
+
+/** Executed when the page is unloaded
+ *
+ */
+$(window).unload(function() {
+ if (typeof document.body.style.maxHeight === "undefined") { // IE6
+ return;
+ }
+
+ if (!$('#beechat').length)
+ return;
+
+ if (g_beechat_user != null) {
+ g_beechat_user.requestSessionPause();
+ BeeChat.UI.saveState();
+ }
+
+ BeeChat.UI.saveConnection();
+ });
+
+
+/** Check whether the BeeChat tab is active or not
+ *
+ */
+$(window).bind('blur', function() {
+ BeeChat.UI.HAS_FOCUS = false;
+ });
+
+$(window).bind('focus', function() {
+ BeeChat.UI.HAS_FOCUS = true;
+ });
diff --git a/mod/beechat/views/default/beechat/beechat.php b/mod/beechat/views/default/beechat/beechat.php
new file mode 100644
index 000000000..397d35f74
--- /dev/null
+++ b/mod/beechat/views/default/beechat/beechat.php
@@ -0,0 +1,84 @@
+<?php
+ /**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+if (elgg_is_logged_in() && elgg_get_logged_in_user_entity()->chatenabled && elgg_get_context() != 'admin') {
+?>
+<div id="beechat">
+ <div id="beechat_left">
+ <a id="beechat_tooltip_trigger" href="<?php echo $vars['url']; ?>"><img src="<?php echo $vars['config']->wwwroot; ?>favicon.ico" /></a>
+ <div class="tooltip tooltipchat">
+ <h3><?php echo elgg_echo('beechat:icons:home'); ?></h3>
+ </div>
+ </div>
+ <div id="beechat_center">
+ <span id="beechat_center_prev" class="prev"></span>
+ <div id="beechat_scrollboxes"><ul></ul></div>
+ <span id="beechat_center_next" class="next"></span>
+ </div>
+ <div id="beechat_right">
+ <span id="beechat_contacts_button" class="offline">
+ <?php echo elgg_echo('beechat:contacts:button'); ?>
+ </span>
+ </div>
+ <div id="beechat_contacts">
+ <div id="beechat_contacts_top">
+ <span class="beechat_label"><?php echo elgg_echo('beechat:contacts:button'); ?></span>
+ <div id="beechat_contacts_controls">
+ <span id="beechat_contacts_control_minimize" class="beechat_control" title="<?php echo elgg_echo('beechat:box:minimize'); ?>">_</span>
+ </div>
+ <br clear="all" />
+ </div>
+ <div id="beechat_availability_switcher">
+ <span id="beechat_current_availability"></span>
+ <span class="beechat_availability_switcher_control_down" id="beechat_availability_switcher_control"></span>
+ </div>
+ <div id="beechat_contacts_content">
+ <ul id="beechat_contacts_list"></ul>
+ <ul id="beechat_availability_switcher_list">
+ <li class="beechat_left_availability_chat"><?php echo elgg_echo('beechat:availability:available'); ?></li>
+ <li class="beechat_left_availability_dnd"><?php echo elgg_echo('beechat:availability:dnd'); ?></li>
+ <li class="beechat_left_availability_away"><?php echo elgg_echo('beechat:availability:away'); ?></li>
+ <li class="beechat_left_availability_xa"><?php echo elgg_echo('beechat:availability:xa'); ?></li>
+ <li class="beechat_left_availability_offline"><?php echo elgg_echo('beechat:availability:offline'); ?></li>
+ </ul>
+ </div>
+ <div id="beechat_contacts_bottom">
+ <span id="beechat_contacts_bottom_bar"></span>
+ </div>
+ </div>
+ <div id="beechat_chatboxes"></div>
+</div>
+<!-- SOUNDS -->
+<!--
+<embed src="<?php echo $vars['config']->staticurl; ?>mod/beechat/sounds/newmessage.wav" autostart=false width=0 height=0
+ id="beechat_sounds_new_message"
+ enablejavascript="true" />
+-->
+
+<?php
+ $ts = time();
+ $token = generate_action_token($ts);
+?>
+
+<script>
+ $(function () {
+ var e = document.createElement('script');
+ e.async = true;
+ e.type = 'text/javascript';
+ e.text = 'init_beechat("<?php echo $ts; ?>","<?php echo $token; ?>");';
+ document.getElementById('beechat').appendChild(e);
+
+ })
+</script>
+
+<?php
+ }
+?>
diff --git a/mod/beechat/views/default/beechat/beechat.userjs.php b/mod/beechat/views/default/beechat/beechat.userjs.php
new file mode 100644
index 000000000..ed59b683f
--- /dev/null
+++ b/mod/beechat/views/default/beechat/beechat.userjs.php
@@ -0,0 +1,54 @@
+<script type="text/javascript">
+BeeChat.Events.Messages = {
+ ConnectionStates: {
+ CONNECTING: "<?php echo elgg_echo('beechat:connection:state:connecting'); ?>",
+ AUTHENTICATING: "<?php echo elgg_echo('beechat:connection:state:authenticating'); ?>",
+ FAILED: "<?php echo elgg_echo('beechat:connection:state:failed'); ?>",
+ DISCONNECTING: "<?php echo elgg_echo('beechat:connection:state:disconnecting'); ?>",
+ OFFLINE: "<?php echo elgg_echo('beechat:connection:state:offline'); ?>",
+ ONLINE: "<?php echo elgg_echo('beechat:connection:state:online'); ?>"
+ }
+ }
+
+BeeChat.UI.Resources.Strings = {
+ Availability: {
+ AVAILABLE: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ CHAT: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ ONLINE: "<?php echo elgg_echo('beechat:availability:available'); ?>",
+ DND: "<?php echo elgg_echo('beechat:availability:dnd'); ?>",
+ AWAY: "<?php echo elgg_echo('beechat:availability:away'); ?>",
+ XA:"<?php echo elgg_echo('beechat:availability:xa'); ?>",
+ OFFLINE: "<?php echo elgg_echo('beechat:availability:offline'); ?>"
+ },
+
+ Contacts: {
+ BUTTON: "<?php echo elgg_echo('beechat:contacts:button'); ?>"
+ },
+
+ ChatMessages: {
+ SELF: "<?php echo $_SESSION['user']->name; ?>",
+ COMPOSING: "<?php echo elgg_echo('beechat:chat:composing'); ?>"
+ },
+
+ Box: {
+ MINIMIZE: "<?php echo elgg_echo('beechat:box:minimize'); ?>",
+ CLOSE: "<?php echo elgg_echo('beechat:box:close'); ?>",
+ SHOWHIDE: "<?php echo elgg_echo('beechat:box:showhide'); ?>"
+ }
+ }
+g_user_rooms = new Array();
+<?php
+if (elgg_is_logged_in()) {
+ $user = elgg_get_logged_in_user_entity();
+ $chatrooms = elgg_get_entities_from_relationship(array('relationship' => 'groupchat',
+ 'relationship_guid' => $user->guid,
+ 'inverse_relationship' => false,
+ 'limit' => 0));
+ if (!empty($chatrooms)) {
+ foreach($chatrooms as $chatroom) {
+ echo "g_user_rooms.push(['".beechat_friendly_title($chatroom->name)."@".elgg_get_plugin_setting("groupdomain", "beechat")."', '".$chatroom->guid."']);";
+ }
+ }
+}
+?>
+</script>
diff --git a/mod/beechat/views/default/beechat/screen.css.php b/mod/beechat/views/default/beechat/screen.css.php
new file mode 100644
index 000000000..930e60089
--- /dev/null
+++ b/mod/beechat/views/default/beechat/screen.css.php
@@ -0,0 +1,672 @@
+<?php
+ global $CONFIG;
+ $url = $CONFIG->wwwroot;
+
+?>
+/**
+ * Beechat
+ *
+ * @package beechat
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Beechannels <contact@beechannels.com>
+ * @copyright Beechannels 2007-2010
+ * @link http://beechannels.com/
+ */
+
+div#beechat {
+ display: block !important;
+ display: none;
+ position: fixed;
+ left: 1%;
+ right: 1%;
+ bottom: 0;
+ margin: 0;
+ padding: 0;
+ height: 20px;
+ z-index: 999;
+
+ font-family: Arial, Helvetica, "Liberation Sans", FreeSans, sans-serif;
+ font-size: 0.9em;
+ color: #222222;
+ background-color: #DDDDDD;
+ border-top: 1px solid #BBBBBB;
+ border-left: 1px solid #BBBBBB;
+}
+div#beechat a img {
+ border: none;
+}
+div#beechat a {
+ text-decoration: none;
+}
+div#beechat img {
+ vertical-align: middle;
+}
+div#beechat a:hover {
+ text-decoration: underline;
+}
+.beechat_control {
+ cursor: pointer;
+ color: #CCCCFF;
+ font-size: 1.6em;
+}
+.beechat_control:hover {
+ color: white;
+}
+.beechat_box_control {
+ cursor: pointer;
+ color: #888888;
+ font-size: 1em;
+}
+.beechat_box_control:hover {
+ color: #222222;
+}
+.beechat_chatbox_control {
+ cursor: pointer;
+ color: #CCCCFF;
+ font-size: 1.6em;
+}
+.beechat_chatbox_control:hover {
+ color: white;
+}
+.beechat_label {
+ font-weight: bold;
+ font-size: 1.1em;
+}
+
+/*
+** -
+** left side
+** -
+*/
+div#beechat_left {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 116px;
+ height: 18px;
+ margin: 0;
+ padding: 1px 2px;
+}
+
+
+/*
+** -
+** right side
+** -
+*/
+div#beechat_right {
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 220px;
+ height: 20px;
+ margin: 0;
+ padding: 0 0 0 0;
+
+ border-left: 1px solid #BBBBBB;
+ border-right: 1px solid #BBBBBB;
+}
+div#beechat_contacts {
+ position: absolute;
+ right: 0px;
+ bottom: 0;
+ width: 222px;
+ height: 240px;
+ margin: 0 auto 20px auto;
+ padding: 0;
+ display: none;
+
+ background-color: white;
+}
+div#beechat_contacts_top {
+ color: white;
+ background-color: #193C60;
+ width: 220px;
+ height: 32px;
+
+ border-top: 1px solid #0B2C4F;
+ border-left: 1px solid #0B2C4F;
+ border-right: 1px solid #0B2C4F;
+}
+div#beechat_contacts_top .beechat_label {
+ float: left;
+ height: 20px;
+ padding: 6px;
+}
+div#beechat_contacts_controls {
+ margin: 0;
+ padding: 0;
+}
+div#beechat_contacts_controls span#beechat_contacts_control_minimize {
+ position: relative;
+ top: -7px;
+ float: right;
+ display: block;
+ width: 20px;
+ height: 20px;
+ padding: 2px;
+
+ font-size: 1.6em;
+ font-weight: bold;
+ text-align: center;
+}
+span#beechat_contacts_button {
+ display: block;
+ width: 190px;
+ padding: 2px 6px 0 24px;
+ height: 18px;
+ cursor: pointer;
+ font-size: 1.1em;
+ font-weight: normal;
+
+ background-image: url('<?php echo $url; ?>mod/beechat/graphics/icons/statuses.png');
+}
+span#beechat_contacts_button.online {
+ background-position: 4px -750px;
+ background-repeat: no-repeat;
+}
+span#beechat_contacts_button.dnd {
+ background-position: 4px -796px;
+ background-repeat: no-repeat;
+}
+span#beechat_contacts_button.away {
+ background-position: 4px -842px;
+ background-repeat: no-repeat;
+}
+span#beechat_contacts_button.offline {
+ background-position: 4px -888px;
+ background-repeat: no-repeat;
+}
+span#beechat_contacts_button:hover {
+ background-color: white;
+}
+div#beechat_availability_switcher {
+ width: 218px;
+ height: 24px;
+ margin: 0;
+ padding: 0 0 0 2px;
+
+ background-color: #EEEEEE;
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ border-bottom: 1px solid #BBBBBB;
+}
+span#beechat_current_availability {
+ float: left;
+ padding: 4px 4px 4px 22px;
+
+ font-weight: bold;
+ cursor: pointer;
+}
+span#beechat_current_availability:hover {
+ text-decoration: underline;
+}
+span#beechat_availability_switcher_control {
+ float: right;
+ width: 24px;
+ height: 20px;
+ cursor: pointer;
+}
+span.beechat_availability_switcher_control_up {
+ background: no-repeat 50% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_arrow_up.png');
+}
+span.beechat_availability_switcher_control_down {
+ background: no-repeat 50% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_arrow_down.png');
+}
+ul#beechat_availability_switcher_list {
+ display: none;
+ padding:0;
+ margin:0;
+ list-style:none;
+}
+ul#beechat_availability_switcher_list li {
+ margin: 0;
+ padding: 4px 4px 4px 24px;
+
+ cursor: pointer;
+}
+ul#beechat_availability_switcher_list li:hover {
+ background-color: #EEEEEE;
+}
+div#beechat_contacts_content {
+ width: 220px;
+ height: 164px;
+ overflow: auto;
+
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ background-color: white;
+}
+ul#beechat_contacts_list {
+ background-color: white;
+ padding:0;
+ margin:0;
+ list-style:none;
+}
+ul#beechat_contacts_list li img {
+ margin: 0 4px 0 0;
+ width: 25px;
+ height: 25px;
+}
+ul#beechat_contacts_list li {
+ margin: 0;
+ padding: 4px 4px 4px 6px;
+
+ cursor: pointer;
+ color: #333;
+}
+ul#beechat_contacts_list li:hover {
+ background-color: #F5F6F8;
+ color: #333;
+}
+div#beechat_contacts_bottom {
+ width: 220px;
+ height: 18px;
+
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+}
+span#beechat_contacts_bottom_bar {
+ position: absolute;
+ display: block;
+ bottom: 0;
+ width: 210px;
+ height: 1px;
+
+ background-color: #BBBBBB;
+ margin: auto 4px;
+}
+
+
+/*
+** -
+** center area
+** -
+*/
+div#beechat_center {
+ float: right;
+ display: block;
+ width: 586px;
+ height: 20px;
+ margin: 0 220px 0 100px;
+ *margin: 0 312px 0 100px;
+ padding: 0;
+}
+div#beechat_center .next, div#beechat_center .prev {
+ display: none;
+
+ border-left: 1px solid #BBBBBB;
+ cursor: pointer;
+}
+div#beechat_center .next {
+ position: absolute;
+ right: 220px;
+ width: 24px;
+ height: 20px;
+
+ background: no-repeat 50% url("<?php echo $url; ?>mod/beechat/graphics/icons/resultset_next.png");
+}
+div#beechat_center .prev {
+ position: absolute;
+ right: 872px;
+ width: 24px;
+ height: 20px;
+
+ background: no-repeat 50% url("<?php echo $url; ?>mod/beechat/graphics/icons/resultset_previous.png");
+}
+div#beechat_scrollboxes {
+ float: right;
+ overflow: hidden;
+ width: 628px;
+ height: 21px;
+ margin: 0 24px 0 24px;
+ text-align: left;
+}
+div#beechat_scrollboxes ul {
+ width: 200000em;
+ list-style: none;
+ padding:0;
+ margin:0;
+}
+div#beechat_scrollboxes ul li {
+ float: right;
+ display: block;
+ width: 130px;
+ height: 20px;
+ padding: 1px 0 0 22px;
+
+ cursor: pointer;
+ border-left: 1px solid #BBBBBB;
+}
+div#beechat_scrollboxes ul li:hover {
+ color: #000000;
+ background-color: white;
+}
+div#beechat_scrollboxes ul li.beechat_scrollbox_selected {
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ background-color: white;
+}
+div#beechat_scrollboxes ul li span.beechat_unread_count {
+ float: right;
+ display: block;
+ width: 16px;
+ height: 14px;
+ padding-top: 2px;
+ margin: 0 6px 0 0;
+
+ text-align: center;
+ font-size: 0.7em;
+ color: white;
+ background: no-repeat 0% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/notification_pink.png');
+}
+div#beechat_scrollboxes ul li span#beechat_box_control_close {
+ float: right;
+ width: auto;
+ padding: 1px 4px;
+ height: 20px;
+}
+
+/*
+** --
+** availability classes
+** --
+*/
+.beechat_left_availability_chat {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_green.png');
+}
+.beechat_left_availability_dnd {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_delete.png');
+}
+.beechat_left_availability_away {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_orange.png');
+}
+.beechat_left_availability_xa {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_red.png');
+}
+.beechat_left_availability_offline {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_black.png');
+}
+.beechat_left_availability_room {
+ background: no-repeat 2% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/muc_icon.png');
+}
+
+
+
+.beechat_right_availability_chat {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_green.png');
+}
+.beechat_right_availability_dnd {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_delete.png');
+}
+.beechat_right_availability_away {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_orange.png');
+}
+.beechat_right_availability_xa {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_red.png');
+}
+.beechat_right_availability_offline {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/bullet_black.png');
+}
+.beechat_right_availability_room {
+ background: no-repeat 96% 50% url('<?php echo $url; ?>mod/beechat/graphics/icons/muc_icon.png');
+}
+
+/*
+** --
+** tooltips
+** --
+*/
+div.tooltip.tooltipchat {
+ display: none;
+ padding: 4px;
+ width: auto;
+ background: transparent no-repeat left bottom url('<?php echo $url; ?>mod/beechat/graphics/icons/pointer.png');
+}
+div.tooltip.tooltipchat h3 {
+ margin: 0;
+ padding: 4px;
+
+ font-weight: normal;
+ font-size: 0.9em;
+ color: white;
+ background-color: #222222;
+}
+
+
+/*
+** --
+** chatboxes
+** --
+*/
+div.beechat_chatbox {
+ position: absolute;
+ width: 240px;
+ height: 300px;
+ bottom: 25px;
+ margin: 0;
+ padding: 0;
+
+ background-color: #DDDDDD;
+}
+div.beechat_chatbox a {
+ color: white;
+}
+div.beechat_chatbox a:hover {
+ text-decoration: underline;
+}
+div.beechat_chatbox_roomroster {
+ position: absolute;
+ width: 100px;
+ height: 276px;
+ left: -101px;
+ bottom: -2px;
+ margin: 0;
+ padding: 0;
+ overflow: auto;
+
+ border: 1px solid #4B6C8F;
+
+ background-color: #EEEEEE;
+}
+div.beechat_chatbox_roomrosteritem {
+ background-color: #FFFFFF;
+ margin: 3px;
+ padding-left: 2px;
+}
+div.beechat_chatbox_chatroom {
+ position: absolute;
+ width: 240px;
+ height: 300px;
+ left: 100px;
+ bottom: 0px;
+ margin: 0;
+ padding: 0;
+
+ background-color: #DDDDDD;
+}
+div.beechat_chatbox_chatroom a {
+ color: white;
+}
+div.beechat_chatbox_chatroom a:hover {
+ text-decoration: underline;
+}
+
+div.beechat_chatbox_room {
+ position: absolute;
+ width: 340px;
+ height: 300px;
+ bottom: 25px;
+ margin: 0;
+ padding: 0;
+
+ background-color: #DDDDDD;
+}
+div.beechat_chatbox_room a {
+ color: white;
+}
+div.beechat_chatbox_room a:hover {
+ text-decoration: underline;
+}
+div.beechat_chatbox_top {
+ width: 238px;
+ height: 24px;
+ margin: 0;
+ padding: 0;
+
+ font-size: 0.9em;
+ color: white;
+ background-color: #193C60;
+ border-top: 1px solid #0B2C4F;
+ border-left: 1px solid #0B2C4F;
+ border-right: 1px solid #0B2C4F;
+}
+div.beechat_chatbox_top .beechat_chatbox_top_icon {
+ position: absolute;
+ top: 4px;
+ left: 4px;
+ z-index: 2;
+
+ width: 50px;
+ height: 50px;
+}
+div.beechat_chatbox_top .beechat_label {
+ float: left;
+ height: 13px;
+ padding: 4px 6px 6px 6px;
+
+ margin-left: 54px;
+}
+div.beechat_chatbox_top_controls {
+ margin: 0;
+ padding: 0;
+}
+div.beechat_chatbox_top_controls .beechat_chatbox_control {
+ float: right;
+ display: block;
+ width: 20px;
+ height: 19px;
+ padding: 2px;
+ margin: 0;
+
+ font-size: 1.2em;
+ font-weight: bold;
+ text-align: center;
+}
+div.beechat_chatbox_subtop {
+ width: 172px;
+ height: 30px;
+ padding: 2px 6px 2px 60px;
+
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ border-bottom: 1px solid #CCCCCC;
+ background-color: #DDDDDD;
+}
+div.beechat_chatbox_content {
+ width: 238px;
+ height: 202px;
+ margin: 0;
+ padding: 0;
+ overflow: auto;
+
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ background-color: white;
+}
+div.beechat_chatbox_content div.beechat_chatbox_message {
+ width: auto;
+ height: auto;
+ margin: 0;
+ padding: 2px;
+ border-top: 1px solid #DDDDDD;
+}
+div.beechat_chatbox_message span.beechat_chatbox_message_sender {
+ position: relative;
+ top: 0;
+ left: 6px;
+ font-weight: bold;
+ font-size: 1em;
+}
+div.beechat_chatbox_message span.beechat_chatbox_message_date {
+ float: right;
+ margin: 0 6px 0 0;
+}
+div.beechat_chatbox_content a {
+ color: #003399;
+}
+div.beechat_chatbox_content a:hover {
+ text-decoration: underline;
+}
+div.beechat_chatbox_content p {
+ margin: 0;
+ padding: 2px 6px;
+}
+div.beechat_chatbox_content p.beechat_chatbox_state {
+ font-size: 1em;
+ color: #888888;
+}
+div.beechat_chatbox_input {
+ width: 238px;
+ height: 40px;
+ margin: 0;
+ padding: 0;
+
+ border-top: 2px solid #BBBBBB;
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ background-color: #DDDDDD;
+}
+div.beechat_chatbox_input textarea {
+ width: 204px;
+ height: 32px;
+ max-width: 240px;
+ max-height: 40px;
+ padding: 4px 4px 4px 30px;
+ margin: auto;
+ overflow: hidden;
+ vertical-align: top;
+ resize: none;
+
+ font-size: 1em;
+ font-family: Arial, Helvetica, "Liberation Sans", FreeSans, sans-serif;
+ outline: none;
+ border: none;
+ background: white no-repeat 4px 3px url('<?php echo $url; ?>mod/beechat/graphics/icons/chat_icon.png');
+}
+div.beechat_chatbox_input textarea:focus {
+ outline: none;
+ border: none;
+ background-color: white;
+}
+div.beechat_chatbox_bottom {
+ position: absolute;
+ width: 238px;
+ height: 1px;
+
+ background-color: white;
+ border-left: 1px solid #666666;
+ border-right: 1px solid #666666;
+ border-bottom: 1px solid #666666;
+ z-index: 2;
+}
+div.beechat_chatbox_bottom span {
+ position: absolute;
+ display: block;
+ right: 0;
+ top: 0;
+ width: 152px;
+ height: 1px;
+
+ border-bottom: 1px solid white;
+}
+div.beechat_chatbox_bottom span span {
+ position: absolute;
+ display: block;
+ width: 146px;
+ height: 1px;
+ right: 4px;
+ top: 0;
+
+ border-bottom: 1px solid #BBBBBB;
+}
diff --git a/mod/beechat/views/default/js/b64.js.php b/mod/beechat/views/default/js/b64.js.php
new file mode 100644
index 000000000..201bdbd7c
--- /dev/null
+++ b/mod/beechat/views/default/js/b64.js.php
@@ -0,0 +1,74 @@
+// This code was written by Tyler Akins and has been placed in the
+// public domain. It would be nice if you left this header intact.
+// Base64 code from Tyler Akins -- http://rumkin.com
+
+var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+
+/**
+ * Encodes a string in base64
+ * @param {String} input The string to encode in base64.
+ */
+function encode64(input) {
+ var output = "";
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ do {
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2)) {
+ enc3 = enc4 = 64;
+ } else if (isNaN(chr3)) {
+ enc4 = 64;
+ }
+
+ output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
+ keyStr.charAt(enc3) + keyStr.charAt(enc4);
+ } while (i < input.length);
+
+ return output;
+}
+
+/**
+ * Decodes a base64 string.
+ * @param {String} input The string to decode.
+ */
+function decode64(input) {
+ var output = "";
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+ do {
+ enc1 = keyStr.indexOf(input.charAt(i++));
+ enc2 = keyStr.indexOf(input.charAt(i++));
+ enc3 = keyStr.indexOf(input.charAt(i++));
+ enc4 = keyStr.indexOf(input.charAt(i++));
+
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+
+ output = output + String.fromCharCode(chr1);
+
+ if (enc3 != 64) {
+ output = output + String.fromCharCode(chr2);
+ }
+ if (enc4 != 64) {
+ output = output + String.fromCharCode(chr3);
+ }
+ } while (i < input.length);
+
+ return output;
+}
diff --git a/mod/beechat/views/default/js/jquery.cookie.min.js.php b/mod/beechat/views/default/js/jquery.cookie.min.js.php
new file mode 100644
index 000000000..cb09af984
--- /dev/null
+++ b/mod/beechat/views/default/js/jquery.cookie.min.js.php
@@ -0,0 +1,10 @@
+/**
+ * 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
+ *
+ */
+jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options=$.extend({},options);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();}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{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]);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/beechat/views/default/js/jquery.localscroll-1.2.7-min.js.php b/mod/beechat/views/default/js/jquery.localscroll-1.2.7-min.js.php
new file mode 100644
index 000000000..fa583a451
--- /dev/null
+++ b/mod/beechat/views/default/js/jquery.localscroll-1.2.7-min.js.php
@@ -0,0 +1,9 @@
+/**
+ * jQuery.LocalScroll - Animated scrolling navigation, using anchors.
+ * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+ * Dual licensed under MIT and GPL.
+ * Date: 3/11/2009
+ * @author Ariel Flesler
+ * @version 1.2.7
+ **/
+;(function($){var l=location.href.replace(/#.*/,'');var g=$.localScroll=function(a){$('body').localScroll(a)};g.defaults={duration:1e3,axis:'y',event:'click',stop:true,target:window,reset:true};g.hash=function(a){if(location.hash){a=$.extend({},g.defaults,a);a.hash=false;if(a.reset){var e=a.duration;delete a.duration;$(a.target).scrollTo(0,a);a.duration=e}i(0,location,a)}};$.fn.localScroll=function(b){b=$.extend({},g.defaults,b);return b.lazy?this.bind(b.event,function(a){var e=$([a.target,a.target.parentNode]).filter(d)[0];if(e)i(a,e,b)}):this.find('a,area').filter(d).bind(b.event,function(a){i(a,this,b)}).end().end();function d(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,'')==l&&(!b.filter||$(this).is(b.filter))}};function i(a,e,b){var d=e.hash.slice(1),f=document.getElementById(d)||document.getElementsByName(d)[0];if(!f)return;if(a)a.preventDefault();var h=$(b.target);if(b.lock&&h.is(':animated')||b.onBefore&&b.onBefore.call(b,a,f,h)===false)return;if(b.stop)h.stop(true);if(b.hash){var j=f.id==d?'id':'name',k=$('<a> </a>').attr(j,d).css({position:'absolute',top:$(window).scrollTop(),left:$(window).scrollLeft()});f[j]='';$('body').prepend(k);location=e.hash;k.remove();f[j]=d}h.scrollTo(f,b).trigger('notify.serialScroll',[f])}})(jQuery); \ No newline at end of file
diff --git a/mod/beechat/views/default/js/jquery.scrollTo-min.js.php b/mod/beechat/views/default/js/jquery.scrollTo-min.js.php
new file mode 100755
index 000000000..5e7877810
--- /dev/null
+++ b/mod/beechat/views/default/js/jquery.scrollTo-min.js.php
@@ -0,0 +1,11 @@
+/**
+ * jQuery.ScrollTo - Easy element scrolling using jQuery.
+ * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+ * Dual licensed under MIT and GPL.
+ * Date: 5/25/2009
+ * @author Ariel Flesler
+ * @version 1.4.2
+ *
+ * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
+ */
+;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); \ No newline at end of file
diff --git a/mod/beechat/views/default/js/jquery.serialScroll-min.js.php b/mod/beechat/views/default/js/jquery.serialScroll-min.js.php
new file mode 100755
index 000000000..d716124f9
--- /dev/null
+++ b/mod/beechat/views/default/js/jquery.serialScroll-min.js.php
@@ -0,0 +1,10 @@
+/*
+ * jQuery.SerialScroll - Animated scrolling of series
+ * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+ * Dual licensed under MIT and GPL.
+ * Date: 06/14/2009
+ * @author Ariel Flesler
+ * @version 1.2.2
+ * http://flesler.blogspot.com/2008/02/jqueryserialscroll.html
+ */
+;(function(a){var b=a.serialScroll=function(c){return a(window).serialScroll(c)};b.defaults={duration:1e3,axis:"x",event:"click",start:0,step:1,lock:!0,cycle:!0,constant:!0};a.fn.serialScroll=function(c){return this.each(function(){var t=a.extend({},b.defaults,c),s=t.event,i=t.step,r=t.lazy,e=t.target?this:document,u=a(t.target||this,e),p=u[0],m=t.items,h=t.start,g=t.interval,k=t.navigation,l;if(!r){m=d()}if(t.force){f({},h)}a(t.prev||[],e).bind(s,-i,q);a(t.next||[],e).bind(s,i,q);if(!p.ssbound){u.bind("prev.serialScroll",-i,q).bind("next.serialScroll",i,q).bind("goto.serialScroll",f)}if(g){u.bind("start.serialScroll",function(v){if(!g){o();g=!0;n()}}).bind("stop.serialScroll",function(){o();g=!1})}u.bind("notify.serialScroll",function(x,w){var v=j(w);if(v>-1){h=v}});p.ssbound=!0;if(t.jump){(r?u:d()).bind(s,function(v){f(v,j(v.target))})}if(k){k=a(k,e).bind(s,function(v){v.data=Math.round(d().length/k.length)*k.index(this);f(v,this)})}function q(v){v.data+=h;f(v,this)}function f(B,z){if(!isNaN(z)){B.data=z;z=p}var C=B.data,v,D=B.type,A=t.exclude?d().slice(0,-t.exclude):d(),y=A.length,w=A[C],x=t.duration;if(D){B.preventDefault()}if(g){o();l=setTimeout(n,t.interval)}if(!w){v=C<0?0:y-1;if(h!=v){C=v}else{if(!t.cycle){return}else{C=y-v-1}}w=A[C]}if(!w||t.lock&&u.is(":animated")||D&&t.onBefore&&t.onBefore(B,w,u,d(),C)===!1){return}if(t.stop){u.queue("fx",[]).stop()}if(t.constant){x=Math.abs(x/i*(h-C))}u.scrollTo(w,x,t).trigger("notify.serialScroll",[C])}function n(){u.trigger("next.serialScroll")}function o(){clearTimeout(l)}function d(){return a(m,p)}function j(w){if(!isNaN(w)){return w}var x=d(),v;while((v=x.index(w))==-1&&w!=p){w=w.parentNode}return v}})}})(jQuery); \ No newline at end of file
diff --git a/mod/beechat/views/default/js/jquery.tools.min.js.php b/mod/beechat/views/default/js/jquery.tools.min.js.php
new file mode 100644
index 000000000..1574af45b
--- /dev/null
+++ b/mod/beechat/views/default/js/jquery.tools.min.js.php
@@ -0,0 +1,49 @@
+/*
+ * jQuery Tools 1.2.2 - The missing UI library for the Web
+ *
+ * [tabs, tabs.slideshow, tooltip, tooltip.slide, tooltip.dynamic, scrollable, scrollable.autoscroll, scrollable.navigator, overlay]
+ *
+ * NO COPYRIGHTS OR LICENSES. DO WHAT YOU LIKE.
+ *
+ * http://flowplayer.org/tools/
+ *
+ * File generated: Mon Jun 07 08:32:38 GMT 2010
+ */
+(function(c){function p(d,a,b){var e=this,l=d.add(this),h=d.find(b.tabs),j=a.jquery?a:d.children(a),i;h.length||(h=d.children());j.length||(j=d.parent().find(a));j.length||(j=c(a));c.extend(this,{click:function(f,g){var k=h.eq(f);if(typeof f=="string"&&f.replace("#","")){k=h.filter("[href*="+f.replace("#","")+"]");f=Math.max(h.index(k),0)}if(b.rotate){var n=h.length-1;if(f<0)return e.click(n,g);if(f>n)return e.click(0,g)}if(!k.length){if(i>=0)return e;f=b.initialIndex;k=h.eq(f)}if(f===i)return e;
+g=g||c.Event();g.type="onBeforeClick";l.trigger(g,[f]);if(!g.isDefaultPrevented()){o[b.effect].call(e,f,function(){g.type="onClick";l.trigger(g,[f])});i=f;h.removeClass(b.current);k.addClass(b.current);return e}},getConf:function(){return b},getTabs:function(){return h},getPanes:function(){return j},getCurrentPane:function(){return j.eq(i)},getCurrentTab:function(){return h.eq(i)},getIndex:function(){return i},next:function(){return e.click(i+1)},prev:function(){return e.click(i-1)}});c.each("onBeforeClick,onClick".split(","),
+function(f,g){c.isFunction(b[g])&&c(e).bind(g,b[g]);e[g]=function(k){c(e).bind(g,k);return e}});if(b.history&&c.fn.history){c.tools.history.init(h);b.event="history"}h.each(function(f){c(this).bind(b.event,function(g){e.click(f,g);return g.preventDefault()})});j.find("a[href^=#]").click(function(f){e.click(c(this).attr("href"),f)});if(location.hash)e.click(location.hash);else if(b.initialIndex===0||b.initialIndex>0)e.click(b.initialIndex)}c.tools=c.tools||{version:"1.2.2"};c.tools.tabs={conf:{tabs:"a",
+current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",rotate:false,history:false},addEffect:function(d,a){o[d]=a}};var o={"default":function(d,a){this.getPanes().hide().eq(d).show();a.call()},fade:function(d,a){var b=this.getConf(),e=b.fadeOutSpeed,l=this.getPanes();e?l.fadeOut(e):l.hide();l.eq(d).fadeIn(b.fadeInSpeed,a)},slide:function(d,a){this.getPanes().slideUp(200);this.getPanes().eq(d).slideDown(400,a)},ajax:function(d,a){this.getPanes().eq(0).load(this.getTabs().eq(d).attr("href"),
+a)}},m;c.tools.tabs.addEffect("horizontal",function(d,a){m||(m=this.getPanes().eq(0).width());this.getCurrentPane().animate({width:0},function(){c(this).hide()});this.getPanes().eq(d).animate({width:m},function(){c(this).show();a.call()})});c.fn.tabs=function(d,a){var b=this.data("tabs");if(b)return b;if(c.isFunction(a))a={onBeforeClick:a};a=c.extend({},c.tools.tabs.conf,a);this.each(function(){b=new p(c(this),d,a);c(this).data("tabs",b)});return a.api?b:this}})(jQuery);
+(function(d){function r(g,a){function p(f){var e=d(f);return e.length<2?e:g.parent().find(f)}var c=this,j=g.add(this),b=g.data("tabs"),h,l,m,n=false,o=p(a.next).click(function(){b.next()}),k=p(a.prev).click(function(){b.prev()});d.extend(c,{getTabs:function(){return b},getConf:function(){return a},play:function(){if(!h){var f=d.Event("onBeforePlay");j.trigger(f);if(f.isDefaultPrevented())return c;n=false;h=setInterval(b.next,a.interval);j.trigger("onPlay");b.next()}},pause:function(){if(!h)return c;
+var f=d.Event("onBeforePause");j.trigger(f);if(f.isDefaultPrevented())return c;h=clearInterval(h);m=clearInterval(m);j.trigger("onPause")},stop:function(){c.pause();n=true}});d.each("onBeforePlay,onPlay,onBeforePause,onPause".split(","),function(f,e){d.isFunction(a[e])&&c.bind(e,a[e]);c[e]=function(s){return c.bind(e,s)}});if(a.autopause){var t=b.getTabs().add(o).add(k).add(b.getPanes());t.hover(function(){c.pause();l=clearInterval(l)},function(){n||(l=setTimeout(c.play,a.interval))})}if(a.autoplay)m=
+setTimeout(c.play,a.interval);else c.stop();a.clickable&&b.getPanes().click(function(){b.next()});if(!b.getConf().rotate){var i=a.disabledClass;b.getIndex()||k.addClass(i);b.onBeforeClick(function(f,e){if(e){k.removeClass(i);e==b.getTabs().length-1?o.addClass(i):o.removeClass(i)}else k.addClass(i)})}}var q;q=d.tools.tabs.slideshow={conf:{next:".forward",prev:".backward",disabledClass:"disabled",autoplay:false,autopause:true,interval:3E3,clickable:true,api:false}};d.fn.slideshow=function(g){var a=
+this.data("slideshow");if(a)return a;g=d.extend({},q.conf,g);this.each(function(){a=new r(d(this),g);d(this).data("slideshow",a)});return g.api?a:this}})(jQuery);
+(function(f){function p(a,b,c){var h=c.relative?a.position().top:a.offset().top,e=c.relative?a.position().left:a.offset().left,i=c.position[0];h-=b.outerHeight()-c.offset[0];e+=a.outerWidth()+c.offset[1];var j=b.outerHeight()+a.outerHeight();if(i=="center")h+=j/2;if(i=="bottom")h+=j;i=c.position[1];a=b.outerWidth()+a.outerWidth();if(i=="center")e-=a/2;if(i=="left")e-=a;return{top:h,left:e}}function t(a,b){var c=this,h=a.add(c),e,i=0,j=0,m=a.attr("title"),q=n[b.effect],k,r=a.is(":input"),u=r&&a.is(":checkbox, :radio, select, :button"),
+s=a.attr("type"),l=b.events[s]||b.events[r?u?"widget":"input":"def"];if(!q)throw'Nonexistent effect "'+b.effect+'"';l=l.split(/,\s*/);if(l.length!=2)throw"Tooltip: bad events configuration for "+s;a.bind(l[0],function(d){if(b.predelay){clearTimeout(i);j=setTimeout(function(){c.show(d)},b.predelay)}else c.show(d)}).bind(l[1],function(d){if(b.delay){clearTimeout(j);i=setTimeout(function(){c.hide(d)},b.delay)}else c.hide(d)});if(m&&b.cancelDefault){a.removeAttr("title");a.data("title",m)}f.extend(c,
+{show:function(d){if(!e){if(m)e=f(b.layout).addClass(b.tipClass).appendTo(document.body).hide().append(m);else if(b.tip)e=f(b.tip).eq(0);else{e=a.next();e.length||(e=a.parent().next())}if(!e.length)throw"Cannot find tooltip for "+a;}if(c.isShown())return c;e.stop(true,true);var g=p(a,e,b);d=d||f.Event();d.type="onBeforeShow";h.trigger(d,[g]);if(d.isDefaultPrevented())return c;g=p(a,e,b);e.css({position:"absolute",top:g.top,left:g.left});k=true;q[0].call(c,function(){d.type="onShow";k="full";h.trigger(d)});
+g=b.events.tooltip.split(/,\s*/);e.bind(g[0],function(){clearTimeout(i);clearTimeout(j)});g[1]&&!a.is("input:not(:checkbox, :radio), textarea")&&e.bind(g[1],function(o){o.relatedTarget!=a[0]&&a.trigger(l[1].split(" ")[0])});return c},hide:function(d){if(!e||!c.isShown())return c;d=d||f.Event();d.type="onBeforeHide";h.trigger(d);if(!d.isDefaultPrevented()){k=false;n[b.effect][1].call(c,function(){d.type="onHide";k=false;h.trigger(d)});return c}},isShown:function(d){return d?k=="full":k},getConf:function(){return b},
+getTip:function(){return e},getTrigger:function(){return a}});f.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","),function(d,g){f.isFunction(b[g])&&f(c).bind(g,b[g]);c[g]=function(o){f(c).bind(g,o);return c}})}f.tools=f.tools||{version:"1.2.2"};f.tools.tooltip={conf:{effect:"toggle",fadeOutSpeed:"fast",predelay:0,delay:30,opacity:1,tip:0,position:["top","center"],offset:[0,0],relative:false,cancelDefault:true,events:{def:"mouseenter,mouseleave",input:"focus,blur",widget:"focus mouseenter,blur mouseleave",
+tooltip:"mouseenter,mouseleave"},layout:"<div/>",tipClass:"tooltip"},addEffect:function(a,b,c){n[a]=[b,c]}};var n={toggle:[function(a){var b=this.getConf(),c=this.getTip();b=b.opacity;b<1&&c.css({opacity:b});c.show();a.call()},function(a){this.getTip().hide();a.call()}],fade:[function(a){var b=this.getConf();this.getTip().fadeTo(b.fadeInSpeed,b.opacity,a)},function(a){this.getTip().fadeOut(this.getConf().fadeOutSpeed,a)}]};f.fn.tooltip=function(a){var b=this.data("tooltip");if(b)return b;a=f.extend(true,
+{},f.tools.tooltip.conf,a);if(typeof a.position=="string")a.position=a.position.split(/,?\s/);this.each(function(){b=new t(f(this),a);f(this).data("tooltip",b)});return a.api?b:this}})(jQuery);
+(function(d){var i=d.tools.tooltip;d.extend(i.conf,{direction:"up",bounce:false,slideOffset:10,slideInSpeed:200,slideOutSpeed:200,slideFade:!d.browser.msie});var e={up:["-","top"],down:["+","top"],left:["-","left"],right:["+","left"]};i.addEffect("slide",function(g){var a=this.getConf(),f=this.getTip(),b=a.slideFade?{opacity:a.opacity}:{},c=e[a.direction]||e.up;b[c[1]]=c[0]+"="+a.slideOffset;a.slideFade&&f.css({opacity:0});f.show().animate(b,a.slideInSpeed,g)},function(g){var a=this.getConf(),f=a.slideOffset,
+b=a.slideFade?{opacity:0}:{},c=e[a.direction]||e.up,h=""+c[0];if(a.bounce)h=h=="+"?"-":"+";b[c[1]]=h+"="+f;this.getTip().animate(b,a.slideOutSpeed,function(){d(this).hide();g.call()})})})(jQuery);
+(function(g){function j(a){var c=g(window),d=c.width()+c.scrollLeft(),h=c.height()+c.scrollTop();return[a.offset().top<=c.scrollTop(),d<=a.offset().left+a.width(),h<=a.offset().top+a.height(),c.scrollLeft()>=a.offset().left]}function k(a){for(var c=a.length;c--;)if(a[c])return false;return true}var i=g.tools.tooltip;i.dynamic={conf:{classNames:"top right bottom left"}};g.fn.dynamic=function(a){if(typeof a=="number")a={speed:a};a=g.extend({},i.dynamic.conf,a);var c=a.classNames.split(/\s/),d;this.each(function(){var h=
+g(this).tooltip().onBeforeShow(function(e,f){e=this.getTip();var b=this.getConf();d||(d=[b.position[0],b.position[1],b.offset[0],b.offset[1],g.extend({},b)]);g.extend(b,d[4]);b.position=[d[0],d[1]];b.offset=[d[2],d[3]];e.css({visibility:"hidden",position:"absolute",top:f.top,left:f.left}).show();f=j(e);if(!k(f)){if(f[2]){g.extend(b,a.top);b.position[0]="top";e.addClass(c[0])}if(f[3]){g.extend(b,a.right);b.position[1]="right";e.addClass(c[1])}if(f[0]){g.extend(b,a.bottom);b.position[0]="bottom";e.addClass(c[2])}if(f[1]){g.extend(b,
+a.left);b.position[1]="left";e.addClass(c[3])}if(f[0]||f[2])b.offset[0]*=-1;if(f[1]||f[3])b.offset[1]*=-1}e.css({visibility:"visible"}).hide()});h.onBeforeShow(function(){var e=this.getConf();this.getTip();setTimeout(function(){e.position=[d[0],d[1]];e.offset=[d[2],d[3]]},0)});h.onHide(function(){var e=this.getTip();e.removeClass(a.classNames)});ret=h});return a.api?ret:this}})(jQuery);
+(function(e){function n(f,c){var a=e(c);return a.length<2?a:f.parent().find(c)}function t(f,c){var a=this,l=f.add(a),g=f.children(),k=0,m=c.vertical;j||(j=a);if(g.length>1)g=e(c.items,f);e.extend(a,{getConf:function(){return c},getIndex:function(){return k},getSize:function(){return a.getItems().size()},getNaviButtons:function(){return o.add(p)},getRoot:function(){return f},getItemWrap:function(){return g},getItems:function(){return g.children(c.item).not("."+c.clonedClass)},move:function(b,d){return a.seekTo(k+
+b,d)},next:function(b){return a.move(1,b)},prev:function(b){return a.move(-1,b)},begin:function(b){return a.seekTo(0,b)},end:function(b){return a.seekTo(a.getSize()-1,b)},focus:function(){return j=a},addItem:function(b){b=e(b);if(c.circular){e(".cloned:last").before(b);e(".cloned:first").replaceWith(b.clone().addClass(c.clonedClass))}else g.append(b);l.trigger("onAddItem",[b]);return a},seekTo:function(b,d,h){if(c.circular&&b===0&&k==-1&&d!==0)return a;if(!c.circular&&b<0||b>a.getSize()||b<-1)return a;
+var i=b;if(b.jquery)b=a.getItems().index(b);else i=a.getItems().eq(b);var q=e.Event("onBeforeSeek");if(!h){l.trigger(q,[b,d]);if(q.isDefaultPrevented()||!i.length)return a}i=m?{top:-i.position().top}:{left:-i.position().left};k=b;j=a;if(d===undefined)d=c.speed;g.animate(i,d,c.easing,h||function(){l.trigger("onSeek",[b])});return a}});e.each(["onBeforeSeek","onSeek","onAddItem"],function(b,d){e.isFunction(c[d])&&e(a).bind(d,c[d]);a[d]=function(h){e(a).bind(d,h);return a}});if(c.circular){var r=a.getItems().slice(-1).clone().prependTo(g),
+s=a.getItems().eq(1).clone().appendTo(g);r.add(s).addClass(c.clonedClass);a.onBeforeSeek(function(b,d,h){if(!b.isDefaultPrevented())if(d==-1){a.seekTo(r,h,function(){a.end(0)});return b.preventDefault()}else d==a.getSize()&&a.seekTo(s,h,function(){a.begin(0)})});a.seekTo(0,0)}var o=n(f,c.prev).click(function(){a.prev()}),p=n(f,c.next).click(function(){a.next()});!c.circular&&a.getSize()>1&&a.onBeforeSeek(function(b,d){o.toggleClass(c.disabledClass,d<=0);p.toggleClass(c.disabledClass,d>=a.getSize()-
+1)});c.mousewheel&&e.fn.mousewheel&&f.mousewheel(function(b,d){if(c.mousewheel){a.move(d<0?1:-1,c.wheelSpeed||50);return false}});c.keyboard&&e(document).bind("keydown.scrollable",function(b){if(!(!c.keyboard||b.altKey||b.ctrlKey||e(b.target).is(":input")))if(!(c.keyboard!="static"&&j!=a)){var d=b.keyCode;if(m&&(d==38||d==40)){a.move(d==38?-1:1);return b.preventDefault()}if(!m&&(d==37||d==39)){a.move(d==37?-1:1);return b.preventDefault()}}});e(a).trigger("onBeforeSeek",[c.initialIndex])}e.tools=e.tools||
+{version:"1.2.2"};e.tools.scrollable={conf:{activeClass:"active",circular:false,clonedClass:"cloned",disabledClass:"disabled",easing:"swing",initialIndex:0,item:null,items:".items",keyboard:true,mousewheel:false,next:".next",prev:".prev",speed:400,vertical:false,wheelSpeed:0}};var j;e.fn.scrollable=function(f){var c=this.data("scrollable");if(c)return c;f=e.extend({},e.tools.scrollable.conf,f);this.each(function(){c=new t(e(this),f);e(this).data("scrollable",c)});return f.api?c:this}})(jQuery);
+(function(c){var g=c.tools.scrollable;g.autoscroll={conf:{autoplay:true,interval:3E3,autopause:true}};c.fn.autoscroll=function(d){if(typeof d=="number")d={interval:d};var b=c.extend({},g.autoscroll.conf,d),h;this.each(function(){var a=c(this).data("scrollable");if(a)h=a;var e,i,f=true;a.play=function(){if(!e){f=false;e=setInterval(function(){a.next()},b.interval);a.next()}};a.pause=function(){e=clearInterval(e)};a.stop=function(){a.pause();f=true};b.autopause&&a.getRoot().add(a.getNaviButtons()).hover(function(){a.pause();
+clearInterval(i)},function(){f||(i=setTimeout(a.play,b.interval))});b.autoplay&&setTimeout(a.play,b.interval)});return b.api?h:this}})(jQuery);
+(function(d){function p(c,g){var h=d(g);return h.length<2?h:c.parent().find(g)}var m=d.tools.scrollable;m.navigator={conf:{navi:".navi",naviItem:null,activeClass:"active",indexed:false,idPrefix:null,history:false}};d.fn.navigator=function(c){if(typeof c=="string")c={navi:c};c=d.extend({},m.navigator.conf,c);var g;this.each(function(){function h(a,b,i){e.seekTo(b);if(j){if(location.hash)location.hash=a.attr("href").replace("#","")}else return i.preventDefault()}function f(){return k.find(c.naviItem||
+"> *")}function n(a){var b=d("<"+(c.naviItem||"a")+"/>").click(function(i){h(d(this),a,i)}).attr("href","#"+a);a===0&&b.addClass(l);c.indexed&&b.text(a+1);c.idPrefix&&b.attr("id",c.idPrefix+a);return b.appendTo(k)}function o(a,b){a=f().eq(b.replace("#",""));a.length||(a=f().filter("[href="+b+"]"));a.click()}var e=d(this).data("scrollable"),k=p(e.getRoot(),c.navi),q=e.getNaviButtons(),l=c.activeClass,j=c.history&&d.fn.history;if(e)g=e;e.getNaviButtons=function(){return q.add(k)};f().length?f().each(function(a){d(this).click(function(b){h(d(this),
+a,b)})}):d.each(e.getItems(),function(a){n(a)});e.onBeforeSeek(function(a,b){var i=f().eq(b);!a.isDefaultPrevented()&&i.length&&f().removeClass(l).eq(b).addClass(l)});e.onAddItem(function(a,b){b=n(e.getItems().index(b));j&&b.history(o)});j&&f().history(o)});return c.api?g:this}})(jQuery);
+(function(a){function t(d,b){var c=this,i=d.add(c),o=a(window),k,f,m,g=a.tools.expose&&(b.mask||b.expose),n=Math.random().toString().slice(10);if(g){if(typeof g=="string")g={color:g};g.closeOnClick=g.closeOnEsc=false}var p=b.target||d.attr("rel");f=p?a(p):d;if(!f.length)throw"Could not find Overlay: "+p;d&&d.index(f)==-1&&d.click(function(e){c.load(e);return e.preventDefault()});a.extend(c,{load:function(e){if(c.isOpened())return c;var h=q[b.effect];if(!h)throw'Overlay: cannot find effect : "'+b.effect+
+'"';b.oneInstance&&a.each(s,function(){this.close(e)});e=e||a.Event();e.type="onBeforeLoad";i.trigger(e);if(e.isDefaultPrevented())return c;m=true;g&&a(f).expose(g);var j=b.top,r=b.left,u=f.outerWidth({margin:true}),v=f.outerHeight({margin:true});if(typeof j=="string")j=j=="center"?Math.max((o.height()-v)/2,0):parseInt(j,10)/100*o.height();if(r=="center")r=Math.max((o.width()-u)/2,0);h[0].call(c,{top:j,left:r},function(){if(m){e.type="onLoad";i.trigger(e)}});g&&b.closeOnClick&&a.mask.getMask().one("click",
+c.close);b.closeOnClick&&a(document).bind("click."+n,function(l){a(l.target).parents(f).length||c.close(l)});b.closeOnEsc&&a(document).bind("keydown."+n,function(l){l.keyCode==27&&c.close(l)});return c},close:function(e){if(!c.isOpened())return c;e=e||a.Event();e.type="onBeforeClose";i.trigger(e);if(!e.isDefaultPrevented()){m=false;q[b.effect][1].call(c,function(){e.type="onClose";i.trigger(e)});a(document).unbind("click."+n).unbind("keydown."+n);g&&a.mask.close();return c}},getOverlay:function(){return f},
+getTrigger:function(){return d},getClosers:function(){return k},isOpened:function(){return m},getConf:function(){return b}});a.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(e,h){a.isFunction(b[h])&&a(c).bind(h,b[h]);c[h]=function(j){a(c).bind(h,j);return c}});k=f.find(b.close||".close");if(!k.length&&!b.close){k=a('<div class="close"></div>');f.prepend(k)}k.click(function(e){c.close(e)});b.load&&c.load()}a.tools=a.tools||{version:"1.2.2"};a.tools.overlay={addEffect:function(d,
+b,c){q[d]=[b,c]},conf:{close:null,closeOnClick:true,closeOnEsc:true,closeSpeed:"fast",effect:"default",fixed:!a.browser.msie||a.browser.version>6,left:"center",load:false,mask:null,oneInstance:true,speed:"normal",target:null,top:"10%"}};var s=[],q={};a.tools.overlay.addEffect("default",function(d,b){var c=this.getConf(),i=a(window);if(!c.fixed){d.top+=i.scrollTop();d.left+=i.scrollLeft()}d.position=c.fixed?"fixed":"absolute";this.getOverlay().css(d).fadeIn(c.speed,b)},function(d){this.getOverlay().fadeOut(this.getConf().closeSpeed,
+d)});a.fn.overlay=function(d){var b=this.data("overlay");if(b)return b;if(a.isFunction(d))d={onBeforeLoad:d};d=a.extend(true,{},a.tools.overlay.conf,d);this.each(function(){b=new t(a(this),d);s.push(b);a(this).data("overlay",b)});return d.api?b:this}})(jQuery);
diff --git a/mod/beechat/views/default/js/json2.js.php b/mod/beechat/views/default/js/json2.js.php
new file mode 100644
index 000000000..7ae503202
--- /dev/null
+++ b/mod/beechat/views/default/js/json2.js.php
@@ -0,0 +1,476 @@
+/*
+ http://www.JSON.org/json2.js
+ 2009-06-29
+
+ Public Domain.
+
+ NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+ See http://www.JSON.org/js.html
+
+ This file creates a global JSON object containing two methods: stringify
+ and parse.
+
+ JSON.stringify(value, replacer, space)
+ value any JavaScript value, usually an object or array.
+
+ replacer an optional parameter that determines how object
+ values are stringified for objects. It can be a
+ function or an array of strings.
+
+ space an optional parameter that specifies the indentation
+ of nested structures. If it is omitted, the text will
+ be packed without extra whitespace. If it is a number,
+ it will specify the number of spaces to indent at each
+ level. If it is a string (such as '\t' or '&nbsp;'),
+ it contains the characters used to indent at each level.
+
+ This method produces a JSON text from a JavaScript value.
+
+ When an object value is found, if the object contains a toJSON
+ method, its toJSON method will be called and the result will be
+ stringified. A toJSON method does not serialize: it returns the
+ value represented by the name/value pair that should be serialized,
+ or undefined if nothing should be serialized. The toJSON method
+ will be passed the key associated with the value, and this will be
+ bound to the object holding the key.
+
+ For example, this would serialize Dates as ISO strings.
+
+ Date.prototype.toJSON = function (key) {
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10 ? '0' + n : n;
+ }
+
+ return this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z';
+ };
+
+ You can provide an optional replacer method. It will be passed the
+ key and value of each member, with this bound to the containing
+ object. The value that is returned from your method will be
+ serialized. If your method returns undefined, then the member will
+ be excluded from the serialization.
+
+ If the replacer parameter is an array of strings, then it will be
+ used to select the members to be serialized. It filters the results
+ such that only members with keys listed in the replacer array are
+ stringified.
+
+ Values that do not have JSON representations, such as undefined or
+ functions, will not be serialized. Such values in objects will be
+ dropped; in arrays they will be replaced with null. You can use
+ a replacer function to replace those with JSON values.
+ JSON.stringify(undefined) returns undefined.
+
+ The optional space parameter produces a stringification of the
+ value that is filled with line breaks and indentation to make it
+ easier to read.
+
+ If the space parameter is a non-empty string, then that string will
+ be used for indentation. If the space parameter is a number, then
+ the indentation will be that many spaces.
+
+ Example:
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}]);
+ // text is '["e",{"pluribus":"unum"}]'
+
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
+ // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
+
+ text = JSON.stringify([new Date()], function (key, value) {
+ return this[key] instanceof Date ?
+ 'Date(' + this[key] + ')' : value;
+ });
+ // text is '["Date(---current time---)"]'
+
+
+ JSON.parse(text, reviver)
+ This method parses a JSON text to produce an object or array.
+ It can throw a SyntaxError exception.
+
+ The optional reviver parameter is a function that can filter and
+ transform the results. It receives each of the keys and values,
+ and its return value is used instead of the original value.
+ If it returns what it received, then the structure is not modified.
+ If it returns undefined then the member is deleted.
+
+ Example:
+
+ // Parse the text. Values that look like ISO date strings will
+ // be converted to Date objects.
+
+ myData = JSON.parse(text, function (key, value) {
+ var a;
+ if (typeof value === 'string') {
+ a =
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+ if (a) {
+ return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+ +a[5], +a[6]));
+ }
+ }
+ return value;
+ });
+
+ myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+ var d;
+ if (typeof value === 'string' &&
+ value.slice(0, 5) === 'Date(' &&
+ value.slice(-1) === ')') {
+ d = new Date(value.slice(5, -1));
+ if (d) {
+ return d;
+ }
+ }
+ return value;
+ });
+
+
+ This is a reference implementation. You are free to copy, modify, or
+ redistribute.
+
+ This code should be minified before deployment.
+ See http://javascript.crockford.com/jsmin.html
+
+ USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+ NOT CONTROL.
+*/
+
+/*jslint evil: true */
+
+/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
+ call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+ getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
+ lastIndex, length, parse, prototype, push, replace, slice, stringify,
+ test, toJSON, toString, valueOf
+*/
+
+// Create a JSON object only if one does not already exist. We create the
+// methods in a closure to avoid creating global variables.
+
+var JSON = JSON || {};
+
+(function () {
+
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10 ? '0' + n : n;
+ }
+
+ if (typeof Date.prototype.toJSON !== 'function') {
+
+ Date.prototype.toJSON = function (key) {
+
+ return isFinite(this.valueOf()) ?
+ this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z' : null;
+ };
+
+ String.prototype.toJSON =
+ Number.prototype.toJSON =
+ Boolean.prototype.toJSON = function (key) {
+ return this.valueOf();
+ };
+ }
+
+ var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ gap,
+ indent,
+ meta = { // table of character substitutions
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"' : '\\"',
+ '\\': '\\\\'
+ },
+ rep;
+
+
+ function quote(string) {
+
+// If the string contains no control characters, no quote characters, and no
+// backslash characters, then we can safely slap some quotes around it.
+// Otherwise we must also replace the offending characters with safe escape
+// sequences.
+
+ escapable.lastIndex = 0;
+ return escapable.test(string) ?
+ '"' + string.replace(escapable, function (a) {
+ var c = meta[a];
+ return typeof c === 'string' ? c :
+ '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ }) + '"' :
+ '"' + string + '"';
+ }
+
+
+ function str(key, holder) {
+
+// Produce a string from holder[key].
+
+ var i, // The loop counter.
+ k, // The member key.
+ v, // The member value.
+ length,
+ mind = gap,
+ partial,
+ value = holder[key];
+
+// If the value has a toJSON method, call it to obtain a replacement value.
+
+ if (value && typeof value === 'object' &&
+ typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+
+// If we were called with a replacer function, then call the replacer to
+// obtain a replacement value.
+
+ if (typeof rep === 'function') {
+ value = rep.call(holder, key, value);
+ }
+
+// What happens next depends on the value's type.
+
+ switch (typeof value) {
+ case 'string':
+ return quote(value);
+
+ case 'number':
+
+// JSON numbers must be finite. Encode non-finite numbers as null.
+
+ return isFinite(value) ? String(value) : 'null';
+
+ case 'boolean':
+ case 'null':
+
+// If the value is a boolean or null, convert it to a string. Note:
+// typeof null does not produce 'null'. The case is included here in
+// the remote chance that this gets fixed someday.
+
+ return String(value);
+
+// If the type is 'object', we might be dealing with an object or an array or
+// null.
+
+ case 'object':
+
+// Due to a specification blunder in ECMAScript, typeof null is 'object',
+// so watch out for that case.
+
+ if (!value) {
+ return 'null';
+ }
+
+// Make an array to hold the partial results of stringifying this object value.
+
+ gap += indent;
+ partial = [];
+
+// Is the value an array?
+
+ if (Object.prototype.toString.apply(value) === '[object Array]') {
+
+// The value is an array. Stringify every element. Use null as a placeholder
+// for non-JSON values.
+
+ length = value.length;
+ for (i = 0; i < length; i += 1) {
+ partial[i] = str(i, value) || 'null';
+ }
+
+// Join all of the elements together, separated with commas, and wrap them in
+// brackets.
+
+ v = partial.length === 0 ? '[]' :
+ gap ? '[\n' + gap +
+ partial.join(',\n' + gap) + '\n' +
+ mind + ']' :
+ '[' + partial.join(',') + ']';
+ gap = mind;
+ return v;
+ }
+
+// If the replacer is an array, use it to select the members to be stringified.
+
+ if (rep && typeof rep === 'object') {
+ length = rep.length;
+ for (i = 0; i < length; i += 1) {
+ k = rep[i];
+ if (typeof k === 'string') {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ } else {
+
+// Otherwise, iterate through all of the keys in the object.
+
+ for (k in value) {
+ if (Object.hasOwnProperty.call(value, k)) {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ }
+
+// Join all of the member texts together, separated with commas,
+// and wrap them in braces.
+
+ v = partial.length === 0 ? '{}' :
+ gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
+ mind + '}' : '{' + partial.join(',') + '}';
+ gap = mind;
+ return v;
+ }
+ }
+
+// If the JSON object does not yet have a stringify method, give it one.
+
+ if (typeof JSON.stringify !== 'function') {
+ JSON.stringify = function (value, replacer, space) {
+
+// The stringify method takes a value and an optional replacer, and an optional
+// space parameter, and returns a JSON text. The replacer can be a function
+// that can replace values, or an array of strings that will select the keys.
+// A default replacer method can be provided. Use of the space parameter can
+// produce text that is more easily readable.
+
+ var i;
+ gap = '';
+ indent = '';
+
+// If the space parameter is a number, make an indent string containing that
+// many spaces.
+
+ if (typeof space === 'number') {
+ for (i = 0; i < space; i += 1) {
+ indent += ' ';
+ }
+
+// If the space parameter is a string, it will be used as the indent string.
+
+ } else if (typeof space === 'string') {
+ indent = space;
+ }
+
+// If there is a replacer, it must be a function or an array.
+// Otherwise, throw an error.
+
+ rep = replacer;
+ if (replacer && typeof replacer !== 'function' &&
+ (typeof replacer !== 'object' ||
+ typeof replacer.length !== 'number')) {
+ throw new Error('JSON.stringify');
+ }
+
+// Make a fake root object containing our value under the key of ''.
+// Return the result of stringifying the value.
+
+ return str('', {'': value});
+ };
+ }
+
+
+// If the JSON object does not yet have a parse method, give it one.
+
+ if (typeof JSON.parse !== 'function') {
+ JSON.parse = function (text, reviver) {
+
+// The parse method takes a text and an optional reviver function, and returns
+// a JavaScript value if the text is a valid JSON text.
+
+ var j;
+
+ function walk(holder, key) {
+
+// The walk method is used to recursively walk the resulting structure so
+// that modifications can be made.
+
+ var k, v, value = holder[key];
+ if (value && typeof value === 'object') {
+ for (k in value) {
+ if (Object.hasOwnProperty.call(value, k)) {
+ v = walk(value, k);
+ if (v !== undefined) {
+ value[k] = v;
+ } else {
+ delete value[k];
+ }
+ }
+ }
+ }
+ return reviver.call(holder, key, value);
+ }
+
+
+// Parsing happens in four stages. In the first stage, we replace certain
+// Unicode characters with escape sequences. JavaScript handles many characters
+// incorrectly, either silently deleting them, or treating them as line endings.
+
+ cx.lastIndex = 0;
+ if (cx.test(text)) {
+ text = text.replace(cx, function (a) {
+ return '\\u' +
+ ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ });
+ }
+
+// In the second stage, we run the text against regular expressions that look
+// for non-JSON patterns. We are especially concerned with '()' and 'new'
+// because they can cause invocation, and '=' because it can cause mutation.
+// But just to be safe, we want to reject all unexpected forms.
+
+// We split the second stage into 4 regexp operations in order to work around
+// crippling inefficiencies in IE's and Safari's regexp engines. First we
+// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
+// replace all simple value tokens with ']' characters. Third, we delete all
+// open brackets that follow a colon or comma or that begin the text. Finally,
+// we look to see that the remaining characters are only whitespace or ']' or
+// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+ if (/^[\],:{}\s]*$/.
+test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
+replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
+replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+// In the third stage we use the eval function to compile the text into a
+// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+// in JavaScript: it can begin a block or an object literal. We wrap the text
+// in parens to eliminate the ambiguity.
+
+ j = eval('(' + text + ')');
+
+// In the optional fourth stage, we recursively walk the new structure, passing
+// each name/value pair to a reviver function for possible transformation.
+
+ return typeof reviver === 'function' ?
+ walk({'': j}, '') : j;
+ }
+
+// If the text is not JSON parseable, then a SyntaxError is thrown.
+
+ throw new SyntaxError('JSON.parse');
+ };
+ }
+}());
diff --git a/mod/beechat/views/default/js/md5.js.php b/mod/beechat/views/default/js/md5.js.php
new file mode 100644
index 000000000..4284f62bb
--- /dev/null
+++ b/mod/beechat/views/default/js/md5.js.php
@@ -0,0 +1,261 @@
+/*
+ * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
+ * Digest Algorithm, as defined in RFC 1321.
+ * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for more info.
+ */
+
+/*
+ * Configurable variables. You may need to tweak these to be compatible with
+ * the server-side, but the defaults work in most cases.
+ */
+var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
+var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
+var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
+
+/*
+ * These are the functions you'll usually want to call
+ * They take string arguments and return either hex or base-64 encoded strings
+ */
+function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
+function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
+function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
+function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
+function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
+function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }
+
+/*
+ * Perform a simple self-test to see if the VM is working
+ */
+function md5_vm_test()
+{
+ return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
+}
+
+/*
+ * Calculate the MD5 of an array of little-endian words, and a bit length
+ */
+function core_md5(x, len)
+{
+ /* append padding */
+ x[len >> 5] |= 0x80 << ((len) % 32);
+ x[(((len + 64) >>> 9) << 4) + 14] = len;
+
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+
+ var olda, oldb, oldc, oldd;
+ for(var i = 0; i < x.length; i += 16)
+ {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+
+ a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
+ d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
+ c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
+ b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
+ a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
+ d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
+ c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
+ b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
+ a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
+ d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
+ c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
+ b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
+ a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
+ d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
+ c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
+ b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
+
+ a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
+ d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
+ c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
+ b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
+ a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
+ d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
+ c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
+ b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
+ a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
+ d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
+ c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
+ b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
+ a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
+ d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
+ c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
+ b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
+
+ a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
+ d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
+ c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
+ b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
+ a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
+ d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
+ c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
+ b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
+ a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
+ d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
+ c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
+ b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
+ a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
+ d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
+ c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
+ b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
+
+ a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
+ d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
+ c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
+ b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
+ a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
+ d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
+ c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
+ b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
+ a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
+ d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
+ c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
+ b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
+ a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
+ d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
+ c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
+ b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
+
+ a = safe_add(a, olda);
+ b = safe_add(b, oldb);
+ c = safe_add(c, oldc);
+ d = safe_add(d, oldd);
+ }
+ return [a, b, c, d];
+}
+
+/*
+ * These functions implement the four basic operations the algorithm uses.
+ */
+function md5_cmn(q, a, b, x, s, t)
+{
+ return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
+}
+function md5_ff(a, b, c, d, x, s, t)
+{
+ return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
+}
+function md5_gg(a, b, c, d, x, s, t)
+{
+ return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
+}
+function md5_hh(a, b, c, d, x, s, t)
+{
+ return md5_cmn(b ^ c ^ d, a, b, x, s, t);
+}
+function md5_ii(a, b, c, d, x, s, t)
+{
+ return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
+}
+
+/*
+ * Calculate the HMAC-MD5, of a key and some data
+ */
+function core_hmac_md5(key, data)
+{
+ var bkey = str2binl(key);
+ if(bkey.length > 16) { bkey = core_md5(bkey, key.length * chrsz); }
+
+ var ipad = new Array(16), opad = new Array(16);
+ for(var i = 0; i < 16; i++)
+ {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
+ }
+
+ var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
+ return core_md5(opad.concat(hash), 512 + 128);
+}
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y)
+{
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xFFFF);
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function bit_rol(num, cnt)
+{
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+ * Convert a string to an array of little-endian words
+ * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
+ */
+function str2binl(str)
+{
+ var bin = [];
+ var mask = (1 << chrsz) - 1;
+ for(var i = 0; i < str.length * chrsz; i += chrsz)
+ {
+ bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
+ }
+ return bin;
+}
+
+/*
+ * Convert an array of little-endian words to a string
+ */
+function binl2str(bin)
+{
+ var str = "";
+ var mask = (1 << chrsz) - 1;
+ for(var i = 0; i < bin.length * 32; i += chrsz)
+ {
+ str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
+ }
+ return str;
+}
+
+/*
+ * Convert an array of little-endian words to a hex string.
+ */
+function binl2hex(binarray)
+{
+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
+ var str = "";
+ for(var i = 0; i < binarray.length * 4; i++)
+ {
+ str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
+ hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
+ }
+ return str;
+}
+
+/*
+ * Convert an array of little-endian words to a base-64 string
+ */
+function binl2b64(binarray)
+{
+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var str = "";
+ var triplet, j;
+ for(var i = 0; i < binarray.length * 4; i += 3)
+ {
+ triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16) |
+ (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 ) |
+ ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
+ for(j = 0; j < 4; j++)
+ {
+ if(i * 8 + j * 6 > binarray.length * 32) { str += b64pad; }
+ else { str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); }
+ }
+ }
+ return str;
+}
diff --git a/mod/beechat/views/default/js/sha1.js.php b/mod/beechat/views/default/js/sha1.js.php
new file mode 100644
index 000000000..db3bf0544
--- /dev/null
+++ b/mod/beechat/views/default/js/sha1.js.php
@@ -0,0 +1,207 @@
+/*
+ * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
+ * in FIPS PUB 180-1
+ * Version 2.1a Copyright Paul Johnston 2000 - 2002.
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for details.
+ */
+
+/*
+ * Configurable variables. You may need to tweak these to be compatible with
+ * the server-side, but the defaults work in most cases.
+ */
+var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
+var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
+var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */
+
+/*
+ * These are the functions you'll usually want to call
+ * They take string arguments and return either hex or base-64 encoded strings
+ */
+function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
+function b64_sha1(s){return binb2b64(core_sha1(str2binb(s),s.length * chrsz));}
+function str_sha1(s){return binb2str(core_sha1(str2binb(s),s.length * chrsz));}
+function hex_hmac_sha1(key, data){ return binb2hex(core_hmac_sha1(key, data));}
+function b64_hmac_sha1(key, data){ return binb2b64(core_hmac_sha1(key, data));}
+function str_hmac_sha1(key, data){ return binb2str(core_hmac_sha1(key, data));}
+
+/*
+ * Perform a simple self-test to see if the VM is working
+ */
+function sha1_vm_test()
+{
+ return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d";
+}
+
+/*
+ * Calculate the SHA-1 of an array of big-endian words, and a bit length
+ */
+function core_sha1(x, len)
+{
+ /* append padding */
+ x[len >> 5] |= 0x80 << (24 - len % 32);
+ x[((len + 64 >> 9) << 4) + 15] = len;
+
+ var w = new Array(80);
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+ var e = -1009589776;
+
+ var i, j, t, olda, oldb, oldc, oldd, olde;
+ for (i = 0; i < x.length; i += 16)
+ {
+ olda = a;
+ oldb = b;
+ oldc = c;
+ oldd = d;
+ olde = e;
+
+ for (j = 0; j < 80; j++)
+ {
+ if (j < 16) { w[j] = x[i + j]; }
+ else { w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1); }
+ t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
+ safe_add(safe_add(e, w[j]), sha1_kt(j)));
+ e = d;
+ d = c;
+ c = rol(b, 30);
+ b = a;
+ a = t;
+ }
+
+ a = safe_add(a, olda);
+ b = safe_add(b, oldb);
+ c = safe_add(c, oldc);
+ d = safe_add(d, oldd);
+ e = safe_add(e, olde);
+ }
+ return [a, b, c, d, e];
+}
+
+/*
+ * Perform the appropriate triplet combination function for the current
+ * iteration
+ */
+function sha1_ft(t, b, c, d)
+{
+ if (t < 20) { return (b & c) | ((~b) & d); }
+ if (t < 40) { return b ^ c ^ d; }
+ if (t < 60) { return (b & c) | (b & d) | (c & d); }
+ return b ^ c ^ d;
+}
+
+/*
+ * Determine the appropriate additive constant for the current iteration
+ */
+function sha1_kt(t)
+{
+ return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
+ (t < 60) ? -1894007588 : -899497514;
+}
+
+/*
+ * Calculate the HMAC-SHA1 of a key and some data
+ */
+function core_hmac_sha1(key, data)
+{
+ var bkey = str2binb(key);
+ if (bkey.length > 16) { bkey = core_sha1(bkey, key.length * chrsz); }
+
+ var ipad = new Array(16), opad = new Array(16);
+ for (var i = 0; i < 16; i++)
+ {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
+ }
+
+ var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz);
+ return core_sha1(opad.concat(hash), 512 + 160);
+}
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y)
+{
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xFFFF);
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function rol(num, cnt)
+{
+ return (num << cnt) | (num >>> (32 - cnt));
+}
+
+/*
+ * Convert an 8-bit or 16-bit string to an array of big-endian words
+ * In 8-bit function, characters >255 have their hi-byte silently ignored.
+ */
+function str2binb(str)
+{
+ var bin = [];
+ var mask = (1 << chrsz) - 1;
+ for (var i = 0; i < str.length * chrsz; i += chrsz)
+ {
+ bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
+ }
+ return bin;
+}
+
+/*
+ * Convert an array of big-endian words to a string
+ */
+function binb2str(bin)
+{
+ var str = "";
+ var mask = (1 << chrsz) - 1;
+ for (var i = 0; i < bin.length * 32; i += chrsz)
+ {
+ str += String.fromCharCode((bin[i>>5] >>> (32 - chrsz - i%32)) & mask);
+ }
+ return str;
+}
+
+/*
+ * Convert an array of big-endian words to a hex string.
+ */
+function binb2hex(binarray)
+{
+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
+ var str = "";
+ for (var i = 0; i < binarray.length * 4; i++)
+ {
+ str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
+ hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
+ }
+ return str;
+}
+
+/*
+ * Convert an array of big-endian words to a base-64 string
+ */
+function binb2b64(binarray)
+{
+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var str = "";
+ var triplet, j;
+ for (var i = 0; i < binarray.length * 4; i += 3)
+ {
+ triplet = (((binarray[i >> 2] >> 8 * (3 - i %4)) & 0xFF) << 16) |
+ (((binarray[i+1 >> 2] >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 ) |
+ ((binarray[i+2 >> 2] >> 8 * (3 - (i+2)%4)) & 0xFF);
+ for (j = 0; j < 4; j++)
+ {
+ if (i * 8 + j * 6 > binarray.length * 32) { str += b64pad; }
+ else { str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); }
+ }
+ }
+ return str;
+}
diff --git a/mod/beechat/views/default/js/strophe.min.js.php b/mod/beechat/views/default/js/strophe.min.js.php
new file mode 100644
index 000000000..f0eb17906
--- /dev/null
+++ b/mod/beechat/views/default/js/strophe.min.js.php
@@ -0,0 +1 @@
+var Base64=(function(){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var obj={encode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;do{chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else{if(isNaN(chr3)){enc4=64}}output=output+keyStr.charAt(enc1)+keyStr.charAt(enc2)+keyStr.charAt(enc3)+keyStr.charAt(enc4)}while(i<input.length);return output},decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=(enc1<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}while(i<input.length);return output}};return obj})();var MD5=(function(){var hexcase=0;var b64pad="";var chrsz=8;var safe_add=function(x,y){var lsw=(x&65535)+(y&65535);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&65535)};var bit_rol=function(num,cnt){return(num<<cnt)|(num>>>(32-cnt))};var str2binl=function(str){var bin=[];var mask=(1<<chrsz)-1;for(var i=0;i<str.length*chrsz;i+=chrsz){bin[i>>5]|=(str.charCodeAt(i/chrsz)&mask)<<(i%32)}return bin};var binl2str=function(bin){var str="";var mask=(1<<chrsz)-1;for(var i=0;i<bin.length*32;i+=chrsz){str+=String.fromCharCode((bin[i>>5]>>>(i%32))&mask)}return str};var binl2hex=function(binarray){var hex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";var str="";for(var i=0;i<binarray.length*4;i++){str+=hex_tab.charAt((binarray[i>>2]>>((i%4)*8+4))&15)+hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&15)}return str};var binl2b64=function(binarray){var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var str="";var triplet,j;for(var i=0;i<binarray.length*4;i+=3){triplet=(((binarray[i>>2]>>8*(i%4))&255)<<16)|(((binarray[i+1>>2]>>8*((i+1)%4))&255)<<8)|((binarray[i+2>>2]>>8*((i+2)%4))&255);for(j=0;j<4;j++){if(i*8+j*6>binarray.length*32){str+=b64pad}else{str+=tab.charAt((triplet>>6*(3-j))&63)}}}return str};var md5_cmn=function(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b)};var md5_ff=function(a,b,c,d,x,s,t){return md5_cmn((b&c)|((~b)&d),a,b,x,s,t)};var md5_gg=function(a,b,c,d,x,s,t){return md5_cmn((b&d)|(c&(~d)),a,b,x,s,t)};var md5_hh=function(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t)};var md5_ii=function(a,b,c,d,x,s,t){return md5_cmn(c^(b|(~d)),a,b,x,s,t)};var core_md5=function(x,len){x[len>>5]|=128<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;var olda,oldb,oldc,oldd;for(var i=0;i<x.length;i+=16){olda=a;oldb=b;oldc=c;oldd=d;a=md5_ff(a,b,c,d,x[i+0],7,-680876936);d=md5_ff(d,a,b,c,x[i+1],12,-389564586);c=md5_ff(c,d,a,b,x[i+2],17,606105819);b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);a=md5_ff(a,b,c,d,x[i+4],7,-176418897);d=md5_ff(d,a,b,c,x[i+5],12,1200080426);c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);b=md5_ff(b,c,d,a,x[i+7],22,-45705983);a=md5_ff(a,b,c,d,x[i+8],7,1770035416);d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);c=md5_ff(c,d,a,b,x[i+10],17,-42063);b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);a=md5_ff(a,b,c,d,x[i+12],7,1804603682);d=md5_ff(d,a,b,c,x[i+13],12,-40341101);c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);b=md5_ff(b,c,d,a,x[i+15],22,1236535329);a=md5_gg(a,b,c,d,x[i+1],5,-165796510);d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);c=md5_gg(c,d,a,b,x[i+11],14,643717713);b=md5_gg(b,c,d,a,x[i+0],20,-373897302);a=md5_gg(a,b,c,d,x[i+5],5,-701558691);d=md5_gg(d,a,b,c,x[i+10],9,38016083);c=md5_gg(c,d,a,b,x[i+15],14,-660478335);b=md5_gg(b,c,d,a,x[i+4],20,-405537848);a=md5_gg(a,b,c,d,x[i+9],5,568446438);d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);c=md5_gg(c,d,a,b,x[i+3],14,-187363961);b=md5_gg(b,c,d,a,x[i+8],20,1163531501);a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);d=md5_gg(d,a,b,c,x[i+2],9,-51403784);c=md5_gg(c,d,a,b,x[i+7],14,1735328473);b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);a=md5_hh(a,b,c,d,x[i+5],4,-378558);d=md5_hh(d,a,b,c,x[i+8],11,-2022574463);c=md5_hh(c,d,a,b,x[i+11],16,1839030562);b=md5_hh(b,c,d,a,x[i+14],23,-35309556);a=md5_hh(a,b,c,d,x[i+1],4,-1530992060);d=md5_hh(d,a,b,c,x[i+4],11,1272893353);c=md5_hh(c,d,a,b,x[i+7],16,-155497632);b=md5_hh(b,c,d,a,x[i+10],23,-1094730640);a=md5_hh(a,b,c,d,x[i+13],4,681279174);d=md5_hh(d,a,b,c,x[i+0],11,-358537222);c=md5_hh(c,d,a,b,x[i+3],16,-722521979);b=md5_hh(b,c,d,a,x[i+6],23,76029189);a=md5_hh(a,b,c,d,x[i+9],4,-640364487);d=md5_hh(d,a,b,c,x[i+12],11,-421815835);c=md5_hh(c,d,a,b,x[i+15],16,530742520);b=md5_hh(b,c,d,a,x[i+2],23,-995338651);a=md5_ii(a,b,c,d,x[i+0],6,-198630844);d=md5_ii(d,a,b,c,x[i+7],10,1126891415);c=md5_ii(c,d,a,b,x[i+14],15,-1416354905);b=md5_ii(b,c,d,a,x[i+5],21,-57434055);a=md5_ii(a,b,c,d,x[i+12],6,1700485571);d=md5_ii(d,a,b,c,x[i+3],10,-1894986606);c=md5_ii(c,d,a,b,x[i+10],15,-1051523);b=md5_ii(b,c,d,a,x[i+1],21,-2054922799);a=md5_ii(a,b,c,d,x[i+8],6,1873313359);d=md5_ii(d,a,b,c,x[i+15],10,-30611744);c=md5_ii(c,d,a,b,x[i+6],15,-1560198380);b=md5_ii(b,c,d,a,x[i+13],21,1309151649);a=md5_ii(a,b,c,d,x[i+4],6,-145523070);d=md5_ii(d,a,b,c,x[i+11],10,-1120210379);c=md5_ii(c,d,a,b,x[i+2],15,718787259);b=md5_ii(b,c,d,a,x[i+9],21,-343485551);a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd)}return[a,b,c,d]};var core_hmac_md5=function(key,data){var bkey=str2binl(key);if(bkey.length>16){bkey=core_md5(bkey,key.length*chrsz)}var ipad=new Array(16),opad=new Array(16);for(var i=0;i<16;i++){ipad[i]=bkey[i]^909522486;opad[i]=bkey[i]^1549556828}var hash=core_md5(ipad.concat(str2binl(data)),512+data.length*chrsz);return core_md5(opad.concat(hash),512+128)};var obj={hexdigest:function(s){return binl2hex(core_md5(str2binl(s),s.length*chrsz))},b64digest:function(s){return binl2b64(core_md5(str2binl(s),s.length*chrsz))},hash:function(s){return binl2str(core_md5(str2binl(s),s.length*chrsz))},hmac_hexdigest:function(key,data){return binl2hex(core_hmac_md5(key,data))},hmac_b64digest:function(key,data){return binl2b64(core_hmac_md5(key,data))},hmac_hash:function(key,data){return binl2str(core_hmac_md5(key,data))},test:function(){return MD5.hexdigest("abc")==="900150983cd24fb0d6963f7d28e17f72"}};return obj})();if(!Function.prototype.bind){Function.prototype.bind=function(obj){var func=this;return function(){return func.apply(obj,arguments)}}}if(!Function.prototype.prependArg){Function.prototype.prependArg=function(arg){var func=this;return function(){var newargs=[arg];for(var i=0;i<arguments.length;i++){newargs.push(arguments[i])}return func.apply(this,newargs)}}}if(!Array.prototype.indexOf){Array.prototype.indexOf=function(elt){var len=this.length;var from=Number(arguments[1])||0;from=(from<0)?Math.ceil(from):Math.floor(from);if(from<0){from+=len}for(;from<len;from++){if(from in this&&this[from]===elt){return from}}return -1}}(function(callback){var Strophe;function $build(name,attrs){return new Strophe.Builder(name,attrs)}function $msg(attrs){return new Strophe.Builder("message",attrs)}function $iq(attrs){return new Strophe.Builder("iq",attrs)}function $pres(attrs){return new Strophe.Builder("presence",attrs)}Strophe={VERSION:"1.0.1",NS:{HTTPBIND:"http://jabber.org/protocol/httpbind",BOSH:"urn:xmpp:xbosh",CLIENT:"jabber:client",AUTH:"jabber:iq:auth",ROSTER:"jabber:iq:roster",PROFILE:"jabber:iq:profile",DISCO_INFO:"http://jabber.org/protocol/disco#info",DISCO_ITEMS:"http://jabber.org/protocol/disco#items",MUC:"http://jabber.org/protocol/muc",SASL:"urn:ietf:params:xml:ns:xmpp-sasl",STREAM:"http://etherx.jabber.org/streams",BIND:"urn:ietf:params:xml:ns:xmpp-bind",SESSION:"urn:ietf:params:xml:ns:xmpp-session",VERSION:"jabber:iq:version",STANZAS:"urn:ietf:params:xml:ns:xmpp-stanzas"},addNamespace:function(name,value){Strophe.NS[name]=value},Status:{ERROR:0,CONNECTING:1,CONNFAIL:2,AUTHENTICATING:3,AUTHFAIL:4,CONNECTED:5,DISCONNECTED:6,DISCONNECTING:7,ATTACHED:8},LogLevel:{DEBUG:0,INFO:1,WARN:2,ERROR:3,FATAL:4},ElementType:{NORMAL:1,TEXT:3},TIMEOUT:1.1,SECONDARY_TIMEOUT:0.1,forEachChild:function(elem,elemName,func){var i,childNode;for(i=0;i<elem.childNodes.length;i++){childNode=elem.childNodes[i];if(childNode.nodeType==Strophe.ElementType.NORMAL&&(!elemName||this.isTagEqual(childNode,elemName))){func(childNode)}}},isTagEqual:function(el,name){return el.tagName.toLowerCase()==name.toLowerCase()},_xmlGenerator:null,_makeGenerator:function(){var doc;if(window.ActiveXObject){doc=new ActiveXObject("Microsoft.XMLDOM");doc.appendChild(doc.createElement("strophe"))}else{doc=document.implementation.createDocument("jabber:client","strophe",null)}return doc},xmlElement:function(name){if(!name){return null}var node=null;if(!Strophe._xmlGenerator){Strophe._xmlGenerator=Strophe._makeGenerator()}node=Strophe._xmlGenerator.createElement(name);var a,i,k;for(a=1;a<arguments.length;a++){if(!arguments[a]){continue}if(typeof(arguments[a])=="string"||typeof(arguments[a])=="number"){node.appendChild(Strophe.xmlTextNode(arguments[a]))}else{if(typeof(arguments[a])=="object"&&typeof(arguments[a].sort)=="function"){for(i=0;i<arguments[a].length;i++){if(typeof(arguments[a][i])=="object"&&typeof(arguments[a][i].sort)=="function"){node.setAttribute(arguments[a][i][0],arguments[a][i][1])}}}else{if(typeof(arguments[a])=="object"){for(k in arguments[a]){if(arguments[a].hasOwnProperty(k)){node.setAttribute(k,arguments[a][k])}}}}}}return node},xmlescape:function(text){text=text.replace(/\&/g,"&amp;");text=text.replace(/</g,"&lt;");text=text.replace(/>/g,"&gt;");return text},xmlTextNode:function(text){text=Strophe.xmlescape(text);if(!Strophe._xmlGenerator){Strophe._xmlGenerator=Strophe._makeGenerator()}return Strophe._xmlGenerator.createTextNode(text)},getText:function(elem){if(!elem){return null}var str="";if(elem.childNodes.length===0&&elem.nodeType==Strophe.ElementType.TEXT){str+=elem.nodeValue}for(var i=0;i<elem.childNodes.length;i++){if(elem.childNodes[i].nodeType==Strophe.ElementType.TEXT){str+=elem.childNodes[i].nodeValue}}return str},copyElement:function(elem){var i,el;if(elem.nodeType==Strophe.ElementType.NORMAL){el=Strophe.xmlElement(elem.tagName);for(i=0;i<elem.attributes.length;i++){el.setAttribute(elem.attributes[i].nodeName.toLowerCase(),elem.attributes[i].value)}for(i=0;i<elem.childNodes.length;i++){el.appendChild(Strophe.copyElement(elem.childNodes[i]))}}else{if(elem.nodeType==Strophe.ElementType.TEXT){el=Strophe.xmlTextNode(elem.nodeValue)}}return el},escapeNode:function(node){return node.replace(/^\s+|\s+$/g,"").replace(/\\/g,"\\5c").replace(/ /g,"\\20").replace(/\"/g,"\\22").replace(/\&/g,"\\26").replace(/\'/g,"\\27").replace(/\//g,"\\2f").replace(/:/g,"\\3a").replace(/</g,"\\3c").replace(/>/g,"\\3e").replace(/@/g,"\\40")},unescapeNode:function(node){return node.replace(/\\20/g," ").replace(/\\22/g,'"').replace(/\\26/g,"&").replace(/\\27/g,"'").replace(/\\2f/g,"/").replace(/\\3a/g,":").replace(/\\3c/g,"<").replace(/\\3e/g,">").replace(/\\40/g,"@").replace(/\\5c/g,"\\")},getNodeFromJid:function(jid){if(jid.indexOf("@")<0){return null}return jid.split("@")[0]},getDomainFromJid:function(jid){var bare=Strophe.getBareJidFromJid(jid);if(bare.indexOf("@")<0){return bare}else{var parts=bare.split("@");parts.splice(0,1);return parts.join("@")}},getResourceFromJid:function(jid){var s=jid.split("/");if(s.length<2){return null}s.splice(0,1);return s.join("/")},getBareJidFromJid:function(jid){return jid.split("/")[0]},log:function(level,msg){return},debug:function(msg){this.log(this.LogLevel.DEBUG,msg)},info:function(msg){this.log(this.LogLevel.INFO,msg)},warn:function(msg){this.log(this.LogLevel.WARN,msg)},error:function(msg){this.log(this.LogLevel.ERROR,msg)},fatal:function(msg){this.log(this.LogLevel.FATAL,msg)},serialize:function(elem){var result;if(!elem){return null}if(typeof(elem.tree)==="function"){elem=elem.tree()}var nodeName=elem.nodeName;var i,child;if(elem.getAttribute("_realname")){nodeName=elem.getAttribute("_realname")}result="<"+nodeName;for(i=0;i<elem.attributes.length;i++){if(elem.attributes[i].nodeName!="_realname"){result+=" "+elem.attributes[i].nodeName.toLowerCase()+"='"+elem.attributes[i].value.replace("&","&amp;").replace("'","&apos;").replace("<","&lt;")+"'"}}if(elem.childNodes.length>0){result+=">";for(i=0;i<elem.childNodes.length;i++){child=elem.childNodes[i];if(child.nodeType==Strophe.ElementType.NORMAL){result+=Strophe.serialize(child)}else{if(child.nodeType==Strophe.ElementType.TEXT){result+=child.nodeValue}}}result+="</"+nodeName+">"}else{result+="/>"}return result},_requestId:0,_connectionPlugins:{},addConnectionPlugin:function(name,ptype){Strophe._connectionPlugins[name]=ptype}};Strophe.Builder=function(name,attrs){if(name=="presence"||name=="message"||name=="iq"){if(attrs&&!attrs.xmlns){attrs.xmlns=Strophe.NS.CLIENT}else{if(!attrs){attrs={xmlns:Strophe.NS.CLIENT}}}}this.nodeTree=Strophe.xmlElement(name,attrs);this.node=this.nodeTree};Strophe.Builder.prototype={tree:function(){return this.nodeTree},toString:function(){return Strophe.serialize(this.nodeTree)},up:function(){this.node=this.node.parentNode;return this},attrs:function(moreattrs){for(var k in moreattrs){if(moreattrs.hasOwnProperty(k)){this.node.setAttribute(k,moreattrs[k])}}return this},c:function(name,attrs){var child=Strophe.xmlElement(name,attrs);this.node.appendChild(child);this.node=child;return this},cnode:function(elem){this.node.appendChild(elem);this.node=elem;return this},t:function(text){var child=Strophe.xmlTextNode(text);this.node.appendChild(child);return this}};Strophe.Handler=function(handler,ns,name,type,id,from,options){this.handler=handler;this.ns=ns;this.name=name;this.type=type;this.id=id;this.options=options||{matchbare:false};if(!this.options.matchBare){this.options.matchBare=false}if(this.options.matchBare){this.from=Strophe.getBareJidFromJid(from)}else{this.from=from}this.user=true};Strophe.Handler.prototype={isMatch:function(elem){var nsMatch;var from=null;if(this.options.matchBare){from=Strophe.getBareJidFromJid(elem.getAttribute("from"))}else{from=elem.getAttribute("from")}nsMatch=false;if(!this.ns){nsMatch=true}else{var self=this;Strophe.forEachChild(elem,null,function(elem){if(elem.getAttribute("xmlns")==self.ns){nsMatch=true}});nsMatch=nsMatch||elem.getAttribute("xmlns")==this.ns}if(nsMatch&&(!this.name||Strophe.isTagEqual(elem,this.name))&&(!this.type||elem.getAttribute("type")===this.type)&&(!this.id||elem.getAttribute("id")===this.id)&&(!this.from||from===this.from)){return true}return false},run:function(elem){var result=null;try{result=this.handler(elem)}catch(e){if(e.sourceURL){Strophe.fatal("error: "+this.handler+" "+e.sourceURL+":"+e.line+" - "+e.name+": "+e.message)}else{if(e.fileName){if(typeof(console)!="undefined"){console.trace();console.error(this.handler," - error - ",e,e.message)}Strophe.fatal("error: "+this.handler+" "+e.fileName+":"+e.lineNumber+" - "+e.name+": "+e.message)}else{Strophe.fatal("error: "+this.handler)}}throw e}return result},toString:function(){return"{Handler: "+this.handler+"("+this.name+","+this.id+","+this.ns+")}"}};Strophe.TimedHandler=function(period,handler){this.period=period;this.handler=handler;this.lastCalled=new Date().getTime();this.user=true};Strophe.TimedHandler.prototype={run:function(){this.lastCalled=new Date().getTime();return this.handler()},reset:function(){this.lastCalled=new Date().getTime()},toString:function(){return"{TimedHandler: "+this.handler+"("+this.period+")}"}};Strophe.Request=function(elem,func,rid,sends){this.id=++Strophe._requestId;this.xmlData=elem;this.data=Strophe.serialize(elem);this.origFunc=func;this.func=func;this.rid=rid;this.date=NaN;this.sends=sends||0;this.abort=false;this.dead=null;this.age=function(){if(!this.date){return 0}var now=new Date();return(now-this.date)/1000};this.timeDead=function(){if(!this.dead){return 0}var now=new Date();return(now-this.dead)/1000};this.xhr=this._newXHR()};Strophe.Request.prototype={getResponse:function(){var node=null;if(this.xhr.responseXML&&this.xhr.responseXML.documentElement){node=this.xhr.responseXML.documentElement;if(node.tagName=="parsererror"){Strophe.error("invalid response received");Strophe.error("responseText: "+this.xhr.responseText);Strophe.error("responseXML: "+Strophe.serialize(this.xhr.responseXML));throw"parsererror"}}else{if(this.xhr.responseText){Strophe.error("invalid response received");Strophe.error("responseText: "+this.xhr.responseText);Strophe.error("responseXML: "+Strophe.serialize(this.xhr.responseXML))}}return node},_newXHR:function(){var xhr=null;if(window.XMLHttpRequest){xhr=new XMLHttpRequest();if(xhr.overrideMimeType){xhr.overrideMimeType("text/xml")}}else{if(window.ActiveXObject){xhr=new ActiveXObject("Microsoft.XMLHTTP")}}xhr.onreadystatechange=this.func.prependArg(this);return xhr}};Strophe.Connection=function(service){this.service=service;this.jid="";this.rid=Math.floor(Math.random()*4294967295);this.sid=null;this.streamId=null;this.do_session=false;this.do_bind=false;this.timedHandlers=[];this.handlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[];this._idleTimeout=null;this._disconnectTimeout=null;this.authenticated=false;this.disconnecting=false;this.connected=false;this.errors=0;this.paused=false;this.hold=1;this.wait=60;this.window=5;this._data=[];this._requests=[];this._uniqueId=Math.round(Math.random()*10000);this._sasl_success_handler=null;this._sasl_failure_handler=null;this._sasl_challenge_handler=null;this._idleTimeout=setTimeout(this._onIdle.bind(this),100);for(var k in Strophe._connectionPlugins){if(Strophe._connectionPlugins.hasOwnProperty(k)){var ptype=Strophe._connectionPlugins[k];var F=function(){};F.prototype=ptype;this[k]=new F();this[k].init(this)}}};Strophe.Connection.prototype={reset:function(){this.rid=Math.floor(Math.random()*4294967295);this.sid=null;this.streamId=null;this.do_session=false;this.do_bind=false;this.timedHandlers=[];this.handlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[];this.authenticated=false;this.disconnecting=false;this.connected=false;this.errors=0;this._requests=[];this._uniqueId=Math.round(Math.random()*10000)},pause:function(){this.paused=true},resume:function(){this.paused=false},getUniqueId:function(suffix){if(typeof(suffix)=="string"||typeof(suffix)=="number"){return ++this._uniqueId+":"+suffix}else{return ++this._uniqueId+""}},connect:function(jid,pass,callback,wait,hold){this.jid=jid;this.pass=pass;this.connect_callback=callback;this.disconnecting=false;this.connected=false;this.authenticated=false;this.errors=0;this.wait=wait||this.wait;this.hold=hold||this.hold;this.domain=Strophe.getDomainFromJid(this.jid);var body=this._buildBody().attrs({to:this.domain,"xml:lang":"en",wait:this.wait,hold:this.hold,content:"text/xml; charset=utf-8",ver:"1.6","xmpp:version":"1.0","xmlns:xmpp":Strophe.NS.BOSH});this._changeConnectStatus(Strophe.Status.CONNECTING,null);this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._connect_cb.bind(this)),body.tree().getAttribute("rid")));this._throttledRequestHandler()},attach:function(jid,sid,rid,callback,wait,hold,wind){this.jid=jid;this.sid=sid;this.rid=rid;this.connect_callback=callback;this.domain=Strophe.getDomainFromJid(this.jid);this.authenticated=true;this.connected=true;this.wait=wait||this.wait;this.hold=hold||this.hold;this.window=wind||this.window;this._changeConnectStatus(Strophe.Status.ATTACHED,null)},xmlInput:function(elem){return},xmlOutput:function(elem){return},rawInput:function(data){return},rawOutput:function(data){return},send:function(elem){if(elem===null){return}if(typeof(elem.sort)==="function"){for(var i=0;i<elem.length;i++){this._queueData(elem[i])}}else{if(typeof(elem.tree)==="function"){this._queueData(elem.tree())}else{this._queueData(elem)}}this._throttledRequestHandler();clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100)},flush:function(){clearTimeout(this._idleTimeout);this._onIdle()},sendIQ:function(elem,callback,errback,timeout){var timeoutHandler=null;var that=this;if(typeof(elem.tree)==="function"){elem=elem.tree()}var id=elem.getAttribute("id");if(!id){id=this.getUniqueId("sendIQ");elem.setAttribute("id",id)}var handler=this.addHandler(function(stanza){if(timeoutHandler){that.deleteTimedHandler(timeoutHandler)}var iqtype=stanza.getAttribute("type");if(iqtype==="result"){if(callback){callback(stanza)}}else{if(iqtype==="error"){if(errback){errback(stanza)}}else{throw {name:"StropheError",message:"Got bad IQ type of "+iqtype}}}},null,"iq",null,id);if(timeout){timeoutHandler=this.addTimedHandler(timeout,function(){that.deleteHandler(handler);if(errback){errback(null)}return false})}this.send(elem);return id},_queueData:function(element){if(element===null||!element.tagName||!element.childNodes){throw {name:"StropheError",message:"Cannot queue non-DOMElement."}}this._data.push(element)},_sendRestart:function(){this._data.push("restart");this._throttledRequestHandler();clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100)},addTimedHandler:function(period,handler){var thand=new Strophe.TimedHandler(period,handler);this.addTimeds.push(thand);return thand},deleteTimedHandler:function(handRef){this.removeTimeds.push(handRef)},addHandler:function(handler,ns,name,type,id,from,options){var hand=new Strophe.Handler(handler,ns,name,type,id,from,options);this.addHandlers.push(hand);return hand},deleteHandler:function(handRef){this.removeHandlers.push(handRef)},disconnect:function(reason){this._changeConnectStatus(Strophe.Status.DISCONNECTING,reason);Strophe.info("Disconnect was called because: "+reason);if(this.connected){this._disconnectTimeout=this._addSysTimedHandler(3000,this._onDisconnectTimeout.bind(this));this._sendTerminate()}},_changeConnectStatus:function(status,condition){for(var k in Strophe._connectionPlugins){if(Strophe._connectionPlugins.hasOwnProperty(k)){var plugin=this[k];if(plugin.statusChanged){try{plugin.statusChanged(status,condition)}catch(err){Strophe.error(""+k+" plugin caused an exception changing status: "+err)}}}}if(this.connect_callback){try{this.connect_callback(status,condition)}catch(e){Strophe.error("User connection callback caused an exception: "+e)}}},_buildBody:function(){var bodyWrap=$build("body",{rid:this.rid++,xmlns:Strophe.NS.HTTPBIND});if(this.sid!==null){bodyWrap.attrs({sid:this.sid})}return bodyWrap},_removeRequest:function(req){Strophe.debug("removing request");var i;for(i=this._requests.length-1;i>=0;i--){if(req==this._requests[i]){this._requests.splice(i,1)}}req.xhr.onreadystatechange=function(){};this._throttledRequestHandler()},_restartRequest:function(i){var req=this._requests[i];if(req.dead===null){req.dead=new Date()}this._processRequest(i)},_processRequest:function(i){var req=this._requests[i];var reqStatus=-1;try{if(req.xhr.readyState==4){reqStatus=req.xhr.status}}catch(e){Strophe.error("caught an error in _requests["+i+"], reqStatus: "+reqStatus)}if(typeof(reqStatus)=="undefined"){reqStatus=-1}var time_elapsed=req.age();var primaryTimeout=(!isNaN(time_elapsed)&&time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait));var secondaryTimeout=(req.dead!==null&&req.timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait));var requestCompletedWithServerError=(req.xhr.readyState==4&&(reqStatus<1||reqStatus>=500));if(primaryTimeout||secondaryTimeout||requestCompletedWithServerError){if(secondaryTimeout){Strophe.error("Request "+this._requests[i].id+" timed out (secondary), restarting")}req.abort=true;req.xhr.abort();req.xhr.onreadystatechange=function(){};this._requests[i]=new Strophe.Request(req.xmlData,req.origFunc,req.rid,req.sends);req=this._requests[i]}if(req.xhr.readyState===0){Strophe.debug("request id "+req.id+"."+req.sends+" posting");req.date=new Date();try{req.xhr.open("POST",this.service,true)}catch(e2){Strophe.error("XHR open failed.");if(!this.connected){this._changeConnectStatus(Strophe.Status.CONNFAIL,"bad-service")}this.disconnect();return}var sendFunc=function(){req.xhr.send(req.data)};if(req.sends>1){var backoff=Math.pow(req.sends,3)*1000;setTimeout(sendFunc,backoff)}else{sendFunc()}req.sends++;this.xmlOutput(req.xmlData);this.rawOutput(req.data)}else{Strophe.debug("_processRequest: "+(i===0?"first":"second")+" request has readyState of "+req.xhr.readyState)}},_throttledRequestHandler:function(){if(!this._requests){Strophe.debug("_throttledRequestHandler called with undefined requests")}else{Strophe.debug("_throttledRequestHandler called with "+this._requests.length+" requests")}if(!this._requests||this._requests.length===0){return}if(this._requests.length>0){this._processRequest(0)}if(this._requests.length>1&&Math.abs(this._requests[0].rid-this._requests[1].rid)<this.window-1){this._processRequest(1)}},_onRequestStateChange:function(func,req){Strophe.debug("request id "+req.id+"."+req.sends+" state changed to "+req.xhr.readyState);if(req.abort){req.abort=false;return}var reqStatus;if(req.xhr.readyState==4){reqStatus=0;try{reqStatus=req.xhr.status}catch(e){}if(typeof(reqStatus)=="undefined"){reqStatus=0}if(this.disconnecting){if(reqStatus>=400){this._hitError(reqStatus);return}}var reqIs0=(this._requests[0]==req);var reqIs1=(this._requests[1]==req);if((reqStatus>0&&reqStatus<500)||req.sends>5){this._removeRequest(req);Strophe.debug("request id "+req.id+" should now be removed")}if(reqStatus==200){if(reqIs1||(reqIs0&&this._requests.length>0&&this._requests[0].age()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait))){this._restartRequest(0)}Strophe.debug("request id "+req.id+"."+req.sends+" got 200");func(req);this.errors=0}else{Strophe.error("request id "+req.id+"."+req.sends+" error "+reqStatus+" happened");if(reqStatus===0||(reqStatus>=400&&reqStatus<600)||reqStatus>=12000){this._hitError(reqStatus);if(reqStatus>=400&&reqStatus<500){this._changeConnectStatus(Strophe.Status.DISCONNECTING,null);this._doDisconnect()}}}if(!((reqStatus>0&&reqStatus<10000)||req.sends>5)){this._throttledRequestHandler()}}},_hitError:function(reqStatus){this.errors++;Strophe.warn("request errored, status: "+reqStatus+", number of errors: "+this.errors);if(this.errors>4){this._onDisconnectTimeout()}},_doDisconnect:function(){Strophe.info("_doDisconnect was called");this.authenticated=false;this.disconnecting=false;this.sid=null;this.streamId=null;this.rid=Math.floor(Math.random()*4294967295);if(this.connected){this._changeConnectStatus(Strophe.Status.DISCONNECTED,null);this.connected=false}this.handlers=[];this.timedHandlers=[];this.removeTimeds=[];this.removeHandlers=[];this.addTimeds=[];this.addHandlers=[]},_dataRecv:function(req){try{var elem=req.getResponse()}catch(e){if(e!="parsererror"){throw e}this.disconnect("strophe-parsererror")}if(elem===null){return}this.xmlInput(elem);this.rawInput(Strophe.serialize(elem));var i,hand;while(this.removeHandlers.length>0){hand=this.removeHandlers.pop();i=this.handlers.indexOf(hand);if(i>=0){this.handlers.splice(i,1)}}while(this.addHandlers.length>0){this.handlers.push(this.addHandlers.pop())}if(this.disconnecting&&this._requests.length===0){this.deleteTimedHandler(this._disconnectTimeout);this._disconnectTimeout=null;this._doDisconnect();return}var typ=elem.getAttribute("type");var cond,conflict;if(typ!==null&&typ=="terminate"){cond=elem.getAttribute("condition");conflict=elem.getElementsByTagName("conflict");if(cond!==null){if(cond=="remote-stream-error"&&conflict.length>0){cond="conflict"}this._changeConnectStatus(Strophe.Status.CONNFAIL,cond)}else{this._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown")}this.disconnect();return}var self=this;Strophe.forEachChild(elem,null,function(child){var i,newList;newList=self.handlers;self.handlers=[];for(i=0;i<newList.length;i++){var hand=newList[i];if(hand.isMatch(child)&&(self.authenticated||!hand.user)){if(hand.run(child)){self.handlers.push(hand)}}else{self.handlers.push(hand)}}})},_sendTerminate:function(){Strophe.info("_sendTerminate was called");var body=this._buildBody().attrs({type:"terminate"});if(this.authenticated){body.c("presence",{xmlns:Strophe.NS.CLIENT,type:"unavailable"})}this.disconnecting=true;var req=new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._dataRecv.bind(this)),body.tree().getAttribute("rid"));this._requests.push(req);this._throttledRequestHandler()},_connect_cb:function(req){Strophe.info("_connect_cb was called");this.connected=true;var bodyWrap=req.getResponse();if(!bodyWrap){return}this.xmlInput(bodyWrap);this.rawInput(Strophe.serialize(bodyWrap));var typ=bodyWrap.getAttribute("type");var cond,conflict;if(typ!==null&&typ=="terminate"){cond=bodyWrap.getAttribute("condition");conflict=bodyWrap.getElementsByTagName("conflict");if(cond!==null){if(cond=="remote-stream-error"&&conflict.length>0){cond="conflict"}this._changeConnectStatus(Strophe.Status.CONNFAIL,cond)}else{this._changeConnectStatus(Strophe.Status.CONNFAIL,"unknown")}return}if(!this.sid){this.sid=bodyWrap.getAttribute("sid")}if(!this.stream_id){this.stream_id=bodyWrap.getAttribute("authid")}var wind=bodyWrap.getAttribute("requests");if(wind){this.window=parseInt(wind,10)}var hold=bodyWrap.getAttribute("hold");if(hold){this.hold=parseInt(hold,10)}var wait=bodyWrap.getAttribute("wait");if(wait){this.wait=parseInt(wait,10)}var do_sasl_plain=false;var do_sasl_digest_md5=false;var do_sasl_anonymous=false;var mechanisms=bodyWrap.getElementsByTagName("mechanism");var i,mech,auth_str,hashed_auth_str;if(mechanisms.length>0){for(i=0;i<mechanisms.length;i++){mech=Strophe.getText(mechanisms[i]);if(mech=="DIGEST-MD5"){do_sasl_digest_md5=true}else{if(mech=="PLAIN"){do_sasl_plain=true}else{if(mech=="ANONYMOUS"){do_sasl_anonymous=true}}}}}else{var body=this._buildBody();this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._connect_cb.bind(this)),body.tree().getAttribute("rid")));this._throttledRequestHandler();return}if(Strophe.getNodeFromJid(this.jid)===null&&do_sasl_anonymous){this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"ANONYMOUS"}).tree())}else{if(Strophe.getNodeFromJid(this.jid)===null){this._changeConnectStatus(Strophe.Status.CONNFAIL,"x-strophe-bad-non-anon-jid");this.disconnect()}else{if(do_sasl_digest_md5){this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge1_cb.bind(this),null,"challenge",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"DIGEST-MD5"}).tree())}else{if(do_sasl_plain){auth_str=Strophe.getBareJidFromJid(this.jid);auth_str=auth_str+"\u0000";auth_str=auth_str+Strophe.getNodeFromJid(this.jid);auth_str=auth_str+"\u0000";auth_str=auth_str+this.pass;this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);hashed_auth_str=Base64.encode(auth_str);this.send($build("auth",{xmlns:Strophe.NS.SASL,mechanism:"PLAIN"}).t(hashed_auth_str).tree())}else{this._changeConnectStatus(Strophe.Status.AUTHENTICATING,null);this._addSysHandler(this._auth1_cb.bind(this),null,null,null,"_auth_1");this.send($iq({type:"get",to:this.domain,id:"_auth_1"}).c("query",{xmlns:Strophe.NS.AUTH}).c("username",{}).t(Strophe.getNodeFromJid(this.jid)).tree())}}}}},_sasl_challenge1_cb:function(elem){var attribMatch=/([a-z]+)=("[^"]+"|[^,"]+)(?:,|$)/;var challenge=Base64.decode(Strophe.getText(elem));var cnonce=MD5.hexdigest(Math.random()*1234567890);var realm="";var host=null;var nonce="";var qop="";var matches;this.deleteHandler(this._sasl_failure_handler);while(challenge.match(attribMatch)){matches=challenge.match(attribMatch);challenge=challenge.replace(matches[0],"");matches[2]=matches[2].replace(/^"(.+)"$/,"$1");switch(matches[1]){case"realm":realm=matches[2];break;case"nonce":nonce=matches[2];break;case"qop":qop=matches[2];break;case"host":host=matches[2];break}}var digest_uri="xmpp/"+this.domain;if(host!==null){digest_uri=digest_uri+"/"+host}var A1=MD5.hash(Strophe.getNodeFromJid(this.jid)+":"+realm+":"+this.pass)+":"+nonce+":"+cnonce;var A2="AUTHENTICATE:"+digest_uri;var responseText="";responseText+="username="+this._quote(Strophe.getNodeFromJid(this.jid))+",";responseText+="realm="+this._quote(realm)+",";responseText+="nonce="+this._quote(nonce)+",";responseText+="cnonce="+this._quote(cnonce)+",";responseText+='nc="00000001",';responseText+='qop="auth",';responseText+="digest-uri="+this._quote(digest_uri)+",";responseText+="response="+this._quote(MD5.hexdigest(MD5.hexdigest(A1)+":"+nonce+":00000001:"+cnonce+":auth:"+MD5.hexdigest(A2)))+",";responseText+='charset="utf-8"';this._sasl_challenge_handler=this._addSysHandler(this._sasl_challenge2_cb.bind(this),null,"challenge",null,null);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("response",{xmlns:Strophe.NS.SASL}).t(Base64.encode(responseText)).tree());return false},_quote:function(str){return'"'+str.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'},_sasl_challenge2_cb:function(elem){this.deleteHandler(this._sasl_success_handler);this.deleteHandler(this._sasl_failure_handler);this._sasl_success_handler=this._addSysHandler(this._sasl_success_cb.bind(this),null,"success",null,null);this._sasl_failure_handler=this._addSysHandler(this._sasl_failure_cb.bind(this),null,"failure",null,null);this.send($build("response",{xmlns:Strophe.NS.SASL}).tree());return false},_auth1_cb:function(elem){var iq=$iq({type:"set",id:"_auth_2"}).c("query",{xmlns:Strophe.NS.AUTH}).c("username",{}).t(Strophe.getNodeFromJid(this.jid)).up().c("password").t(this.pass);if(!Strophe.getResourceFromJid(this.jid)){this.jid=Strophe.getBareJidFromJid(this.jid)+"/strophe"}iq.up().c("resource",{}).t(Strophe.getResourceFromJid(this.jid));this._addSysHandler(this._auth2_cb.bind(this),null,null,null,"_auth_2");this.send(iq.tree());return false},_sasl_success_cb:function(elem){Strophe.info("SASL authentication succeeded.");this.deleteHandler(this._sasl_failure_handler);this._sasl_failure_handler=null;if(this._sasl_challenge_handler){this.deleteHandler(this._sasl_challenge_handler);this._sasl_challenge_handler=null}this._addSysHandler(this._sasl_auth1_cb.bind(this),null,"stream:features",null,null);this._sendRestart();return false},_sasl_auth1_cb:function(elem){var i,child;for(i=0;i<elem.childNodes.length;i++){child=elem.childNodes[i];if(child.nodeName=="bind"){this.do_bind=true}if(child.nodeName=="session"){this.do_session=true}}if(!this.do_bind){this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}else{this._addSysHandler(this._sasl_bind_cb.bind(this),null,null,null,"_bind_auth_2");var resource=Strophe.getResourceFromJid(this.jid);if(resource){this.send($iq({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:Strophe.NS.BIND}).c("resource",{}).t(resource).tree())}else{this.send($iq({type:"set",id:"_bind_auth_2"}).c("bind",{xmlns:Strophe.NS.BIND}).tree())}}return false},_sasl_bind_cb:function(elem){if(elem.getAttribute("type")=="error"){Strophe.info("SASL binding failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}var bind=elem.getElementsByTagName("bind");var jidNode;if(bind.length>0){jidNode=bind[0].getElementsByTagName("jid");if(jidNode.length>0){this.jid=Strophe.getText(jidNode[0]);if(this.do_session){this._addSysHandler(this._sasl_session_cb.bind(this),null,null,null,"_session_auth_2");this.send($iq({type:"set",id:"_session_auth_2"}).c("session",{xmlns:Strophe.NS.SESSION}).tree())}else{this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null)}}}else{Strophe.info("SASL binding failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}},_sasl_session_cb:function(elem){if(elem.getAttribute("type")=="result"){this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null)}else{if(elem.getAttribute("type")=="error"){Strophe.info("Session creation failed.");this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false}}return false},_sasl_failure_cb:function(elem){if(this._sasl_success_handler){this.deleteHandler(this._sasl_success_handler);this._sasl_success_handler=null}if(this._sasl_challenge_handler){this.deleteHandler(this._sasl_challenge_handler);this._sasl_challenge_handler=null}this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);return false},_auth2_cb:function(elem){if(elem.getAttribute("type")=="result"){this.authenticated=true;this._changeConnectStatus(Strophe.Status.CONNECTED,null)}else{if(elem.getAttribute("type")=="error"){this._changeConnectStatus(Strophe.Status.AUTHFAIL,null);this.disconnect()}}return false},_addSysTimedHandler:function(period,handler){var thand=new Strophe.TimedHandler(period,handler);thand.user=false;this.addTimeds.push(thand);return thand},_addSysHandler:function(handler,ns,name,type,id){var hand=new Strophe.Handler(handler,ns,name,type,id);hand.user=false;this.addHandlers.push(hand);return hand},_onDisconnectTimeout:function(){Strophe.info("_onDisconnectTimeout was called");var req;while(this._requests.length>0){req=this._requests.pop();req.abort=true;req.xhr.abort();req.xhr.onreadystatechange=function(){}}this._doDisconnect();return false},_onIdle:function(){var i,thand,since,newList;while(this.removeTimeds.length>0){thand=this.removeTimeds.pop();i=this.timedHandlers.indexOf(thand);if(i>=0){this.timedHandlers.splice(i,1)}}while(this.addTimeds.length>0){this.timedHandlers.push(this.addTimeds.pop())}var now=new Date().getTime();newList=[];for(i=0;i<this.timedHandlers.length;i++){thand=this.timedHandlers[i];if(this.authenticated||!thand.user){since=thand.lastCalled+thand.period;if(since-now<=0){if(thand.run()){newList.push(thand)}}else{newList.push(thand)}}}this.timedHandlers=newList;var body,time_elapsed;if(this.authenticated&&this._requests.length===0&&this._data.length===0&&!this.disconnecting){Strophe.info("no requests during idle cycle, sending blank request");this._data.push(null)}if(this._requests.length<2&&this._data.length>0&&!this.paused){body=this._buildBody();for(i=0;i<this._data.length;i++){if(this._data[i]!==null){if(this._data[i]==="restart"){body.attrs({to:this.domain,"xml:lang":"en","xmpp:restart":"true","xmlns:xmpp":Strophe.NS.BOSH})}else{body.cnode(this._data[i]).up()}}}delete this._data;this._data=[];this._requests.push(new Strophe.Request(body.tree(),this._onRequestStateChange.bind(this).prependArg(this._dataRecv.bind(this)),body.tree().getAttribute("rid")));this._processRequest(this._requests.length-1)}if(this._requests.length>0){time_elapsed=this._requests[0].age();if(this._requests[0].dead!==null){if(this._requests[0].timeDead()>Math.floor(Strophe.SECONDARY_TIMEOUT*this.wait)){this._throttledRequestHandler()}}if(time_elapsed>Math.floor(Strophe.TIMEOUT*this.wait)){Strophe.warn("Request "+this._requests[0].id+" timed out, over "+Math.floor(Strophe.TIMEOUT*this.wait)+" seconds since last activity");this._throttledRequestHandler()}}clearTimeout(this._idleTimeout);this._idleTimeout=setTimeout(this._onIdle.bind(this),100)}};if(callback){callback(Strophe,$build,$msg,$iq,$pres)}})(function(){window.Strophe=arguments[0];window.$build=arguments[1];window.$msg=arguments[2];window.$iq=arguments[3];window.$pres=arguments[4]}); \ No newline at end of file
diff --git a/mod/beechat/views/default/js/strophe.muc.js b/mod/beechat/views/default/js/strophe.muc.js
new file mode 100644
index 000000000..954ca8730
--- /dev/null
+++ b/mod/beechat/views/default/js/strophe.muc.js
@@ -0,0 +1,300 @@
+/*
+Plugin to implement the MUC extension. http://xmpp.org/extensions/xep-0045.html
+*/
+/* jslint configuration: */
+/* global document, window, setTimeout, clearTimeout, console,
+ XMLHttpRequest, ActiveXObject,
+ Base64, MD5,
+ Strophe, $build, $msg, $iq, $pres
+*/
+
+Strophe.addConnectionPlugin('muc', {
+ _connection: null,
+ // The plugin must have the init function
+ /***Function
+ Initialize the MUC plugin. Sets the correct connection object and
+ extends the namesace.
+ */
+ init: function(conn) {
+ this._connection = conn;
+ /* extend name space
+ * NS.MUC - XMPP Multi-user chat namespace
+ * from XEP 45.
+ *
+ */
+ Strophe.addNamespace('MUC_OWNER', Strophe.NS.MUC+"#owner");
+ Strophe.addNamespace('MUC_ADMIN', Strophe.NS.MUC+"#admin");
+ },
+ /***Function
+ Join a multi-user chat room
+ Parameters:
+ (String) room - The multi-user chat room to join.
+ (String) nick - The nickname to use in the chat room. Optional
+ (Function) msg_handler_cb - The function call to handle messages from the
+ specified chat room.
+ (Function) pres_handler_cb - The function call back to handle presence
+ in the chat room.
+ (String) password - The optional password to use. (password protected
+ rooms only)
+ */
+ join: function(room, nick, msg_handler_cb, pres_handler_cb, password) {
+ var room_nick = this.test_append_nick(room, nick);
+ var msg = $pres({from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ if (password)
+ {
+ var password_elem = Strophe.xmlElement("password",
+ [],
+ password);
+ msg.cnode(password_elem);
+ }
+ if (msg_handler_cb)
+ {
+ this._connection.addHandler(function(stanza) {
+ var from = stanza.getAttribute('from');
+ var roomname = from.split("/");
+ // filter on room name
+ if (roomname.length > 1 && roomname[0] == room)
+ {
+ return msg_handler_cb(stanza);
+ }
+ else
+ {
+ return true;
+ }
+ },
+ null,
+ "message",
+ null,
+ null,
+ null);
+ }
+ if (pres_handler_cb)
+ {
+ this._connection.addHandler(function(stanza) {
+ var xquery = stanza.getElementsByTagName("x");
+ if (xquery.length > 0)
+ {
+ //Handle only MUC user protocol
+ for (var i = 0; i < xquery.length; i++)
+ {
+ var xmlns = xquery[i].getAttribute("xmlns");
+
+ if (xmlns && xmlns.match(Strophe.NS.MUC))
+ {
+ return pres_handler_cb(stanza);
+ }
+ }
+ }
+ return true;
+ },
+ null,
+ "presence",
+ null,
+ null,
+ null);
+ }
+ this._connection.send(msg);
+ },
+ /***Function
+ Leave a multi-user chat room
+ Parameters:
+ (String) room - The multi-user chat room to leave.
+ (String) nick - The nick name used in the room.
+ (Function) handler_cb - Optional function to handle the successful leave.
+ Returns:
+ iqid - The unique id for the room leave.
+ */
+ leave: function(room, nick, handler_cb) {
+ var room_nick = this.test_append_nick(room, nick);
+ var presenceid = this._connection.getUniqueId();
+ var presence = $pres({type: "unavailable",
+ id: presenceid,
+ from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ this._connection.addHandler(handler_cb,
+ null,
+ "presence",
+ null,
+ presenceid,
+ null);
+ this._connection.send(presence);
+ return presenceid;
+ },
+ /***Function
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) nick - The nick name used in the chat room.
+ (String) message - The message to send to the room.
+ Returns:
+ msgiq - the unique id used to send the message
+ */
+ message: function(room, nick, message) {
+ var room_nick = this.test_append_nick(room, nick);
+ var msgid = this._connection.getUniqueId();
+ var msg = $msg({to: room_nick,
+ from: this._connection.jid,
+ type: "groupchat",
+ id: msgid}).c("body",
+ {xmlns: Strophe.NS.CLIENT}).t(message);
+ msg.up().c("x", {xmlns: "jabber:x:event"}).c("composing");
+ this._connection.send(msg);
+ return msgid;
+ },
+ /***Function
+ Start a room configuration.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to send the configuration request
+ */
+ configure: function(room) {
+ //send iq to start room configuration
+ var config = $iq({to:room,
+ type: "get"}).c("query",
+ {xmlns: Strophe.NS.MUC_OWNER});
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Cancel the room configuration
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to cancel the configuration.
+ */
+ cancelConfigure: function(room) {
+ //send iq to start room configuration
+ var config = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data", type: "cancel"});
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Save a room configuration.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (Array) configarray - an array of form elements used to configure the room.
+ Returns:
+ id - the unique id used to save the configuration.
+ */
+ saveConfiguration: function(room, configarray) {
+ var config = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data", type: "submit"});
+ for (var i = 0; i >= configarray.length; i++) {
+ config.cnode(configarray[i]);
+ }
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to create the chat room.
+ */
+ createInstantRoom: function(room) {
+ var roomiq = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data",
+ type: "submit"});
+ return this._connection.sendIQ(roomiq.tree(),
+ function() {},
+ function() {});
+ },
+ /***
+ Set the topic of the chat room.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) topic - Topic message.
+ */
+ setTopic: function(room, topic) {
+ var msg = $msg({to: room,
+ from: this._connection.jid,
+ type: "groupchat"})
+ .c("subject", {xmlns: "jabber:client"}).t(topic);
+ this._connection.send(msg.tree());
+ },
+ /***Function
+ Changes the role and affiliation of a member of a MUC room.
+ The modification can only be done by a room moderator. An error will be
+ returned if the user doesn't have permission.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) nick - The nick name of the user to modify.
+ (String) role - The new role of the user.
+ (String) affiliation - The new affiliation of the user.
+ (String) reason - The reason for the change.
+ Returns:
+ iq - the id of the mode change request.
+ */
+ modifyUser: function(room, nick, role, affiliation, reason) {
+ var item_attrs = {nick: Strophe.escapeNode(nick)};
+ if (role !== null)
+ {
+ item_attrs.role = role;
+ }
+ if (affiliation !== null)
+ {
+ item_attrs.affiliation = affiliation;
+ }
+ var item = $build("item", item_attrs);
+ if (reason !== null)
+ {
+ item.cnode(Strophe.xmlElement("reason", reason));
+ }
+ var roomiq = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER}).cnode(item.tree());
+ return this._connection.sendIQ(roomiq.tree(),
+ function() {},
+ function() {});
+ },
+ /***Function
+ Change the current users nick name.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) user - The new nick name.
+ */
+ changeNick: function(room, user) {
+ var room_nick = this.test_append_nick(room, user);
+ var presence = $pres({from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ this._connection.send(presence.tree());
+ },
+ /***Function
+ List all chat room available on a server.
+ Parameters:
+ (String) server - name of chat server.
+ (String) handle_cb - Function to call for room list return.
+ */
+ listRooms: function(server, handle_cb) {
+ var iq = $iq({to: server,
+ from: this._connection.jid,
+ type: "get"})
+ .c("query",{xmlns: Strophe.NS.DISCO_ITEMS});
+ this._connection.sendIQ(iq, handle_cb, function(){});
+ },
+ test_append_nick: function(room, nick) {
+ var room_nick = room;
+ if (nick)
+ {
+ room_nick += "/" + Strophe.escapeNode(nick);
+ }
+ return room_nick;
+ }
+}); \ No newline at end of file
diff --git a/mod/beechat/views/default/js/strophe.muc.js.php b/mod/beechat/views/default/js/strophe.muc.js.php
new file mode 100644
index 000000000..e10750d02
--- /dev/null
+++ b/mod/beechat/views/default/js/strophe.muc.js.php
@@ -0,0 +1,300 @@
+/*
+Plugin to implement the MUC extension. http://xmpp.org/extensions/xep-0045.html
+*/
+/* jslint configuration: */
+/* global document, window, setTimeout, clearTimeout, console,
+ XMLHttpRequest, ActiveXObject,
+ Base64, MD5,
+ Strophe, $build, $msg, $iq, $pres
+*/
+
+Strophe.addConnectionPlugin('muc', {
+ _connection: null,
+ // The plugin must have the init function
+ /***Function
+ Initialize the MUC plugin. Sets the correct connection object and
+ extends the namesace.
+ */
+ init: function(conn) {
+ this._connection = conn;
+ /* extend name space
+ * NS.MUC - XMPP Multi-user chat namespace
+ * from XEP 45.
+ *
+ */
+ Strophe.addNamespace('MUC_OWNER', Strophe.NS.MUC+"#owner");
+ Strophe.addNamespace('MUC_ADMIN', Strophe.NS.MUC+"#admin");
+ },
+ /***Function
+ Join a multi-user chat room
+ Parameters:
+ (String) room - The multi-user chat room to join.
+ (String) nick - The nickname to use in the chat room. Optional
+ (Function) msg_handler_cb - The function call to handle messages from the
+ specified chat room.
+ (Function) pres_handler_cb - The function call back to handle presence
+ in the chat room.
+ (String) password - The optional password to use. (password protected
+ rooms only)
+ */
+ join: function(room, nick, msg_handler_cb, pres_handler_cb, password) {
+ var room_nick = this.test_append_nick(room, nick);
+ var msg = $pres({from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ if (password)
+ {
+ var password_elem = Strophe.xmlElement("password",
+ [],
+ password);
+ msg.cnode(password_elem);
+ }
+ if (msg_handler_cb)
+ {
+ this._connection.addHandler(function(stanza) {
+ var from = stanza.getAttribute('from');
+ var roomname = from.split("/");
+ // filter on room name
+ if (roomname.length > 1 && roomname[0] == room)
+ {
+ return msg_handler_cb(stanza);
+ }
+ else
+ {
+ return true;
+ }
+ },
+ null,
+ "message",
+ null,
+ null,
+ null);
+ }
+ if (pres_handler_cb)
+ {
+ this._connection.addHandler(function(stanza) {
+ var xquery = stanza.getElementsByTagName("x");
+ if (xquery.length > 0)
+ {
+ //Handle only MUC user protocol
+ for (var i = 0; i < xquery.length; i++)
+ {
+ var xmlns = xquery[i].getAttribute("xmlns");
+
+ if (xmlns && xmlns.match(Strophe.NS.MUC))
+ {
+ return pres_handler_cb(stanza);
+ }
+ }
+ }
+ return true;
+ },
+ null,
+ "presence",
+ null,
+ null,
+ null);
+ }
+ this._connection.send(msg);
+ },
+ /***Function
+ Leave a multi-user chat room
+ Parameters:
+ (String) room - The multi-user chat room to leave.
+ (String) nick - The nick name used in the room.
+ (Function) handler_cb - Optional function to handle the successful leave.
+ Returns:
+ iqid - The unique id for the room leave.
+ */
+ leave: function(room, nick, handler_cb) {
+ var room_nick = this.test_append_nick(room, nick);
+ var presenceid = this._connection.getUniqueId();
+ var presence = $pres({type: "unavailable",
+ id: presenceid,
+ from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ this._connection.addHandler(handler_cb,
+ null,
+ "presence",
+ null,
+ presenceid,
+ null);
+ this._connection.send(presence);
+ return presenceid;
+ },
+ /***Function
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) nick - The nick name used in the chat room.
+ (String) message - The message to send to the room.
+ Returns:
+ msgiq - the unique id used to send the message
+ */
+ message: function(room, nick, message) {
+ var room_nick = this.test_append_nick(room, nick);
+ var msgid = this._connection.getUniqueId();
+ var msg = $msg({to: room_nick,
+ from: this._connection.jid,
+ type: "groupchat",
+ id: msgid}).c("body",
+ {xmlns: Strophe.NS.CLIENT}).t(message);
+ msg.up().c("x", {xmlns: "jabber:x:event"}).c("composing");
+ this._connection.send(msg);
+ return msgid;
+ },
+ /***Function
+ Start a room configuration.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to send the configuration request
+ */
+ configure: function(room) {
+ //send iq to start room configuration
+ var config = $iq({to:room,
+ type: "get"}).c("query",
+ {xmlns: Strophe.NS.MUC_OWNER});
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Cancel the room configuration
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to cancel the configuration.
+ */
+ cancelConfigure: function(room) {
+ //send iq to start room configuration
+ var config = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data", type: "cancel"});
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Save a room configuration.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (Array) configarray - an array of form elements used to configure the room.
+ Returns:
+ id - the unique id used to save the configuration.
+ */
+ saveConfiguration: function(room, configarray) {
+ var config = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data", type: "submit"});
+ for (var i = 0; i >= configarray.length; i++) {
+ config.cnode(configarray[i]);
+ }
+ var stanza = config.tree();
+ return this._connection.sendIQ(stanza,
+ function(){},
+ function(){});
+ },
+ /***Function
+ Parameters:
+ (String) room - The multi-user chat room name.
+ Returns:
+ id - the unique id used to create the chat room.
+ */
+ createInstantRoom: function(room) {
+ var roomiq = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER})
+ .c("x", {xmlns: "jabber:x:data",
+ type: "submit"});
+ return this._connection.sendIQ(roomiq.tree(),
+ function() {},
+ function() {});
+ },
+ /***
+ Set the topic of the chat room.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) topic - Topic message.
+ */
+ setTopic: function(room, topic) {
+ var msg = $msg({to: room,
+ from: this._connection.jid,
+ type: "groupchat"})
+ .c("subject", {xmlns: "jabber:client"}).t(topic);
+ this._connection.send(msg.tree());
+ },
+ /***Function
+ Changes the role and affiliation of a member of a MUC room.
+ The modification can only be done by a room moderator. An error will be
+ returned if the user doesn't have permission.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) nick - The nick name of the user to modify.
+ (String) role - The new role of the user.
+ (String) affiliation - The new affiliation of the user.
+ (String) reason - The reason for the change.
+ Returns:
+ iq - the id of the mode change request.
+ */
+ modifyUser: function(room, nick, role, affiliation, reason) {
+ var item_attrs = {nick: Strophe.escapeNode(nick)};
+ if (role !== null)
+ {
+ item_attrs.role = role;
+ }
+ if (affiliation !== null)
+ {
+ item_attrs.affiliation = affiliation;
+ }
+ var item = $build("item", item_attrs);
+ if (reason !== null)
+ {
+ item.cnode(Strophe.xmlElement("reason", reason));
+ }
+ var roomiq = $iq({to: room,
+ type: "set"})
+ .c("query", {xmlns: Strophe.NS.MUC_OWNER}).cnode(item.tree());
+ return this._connection.sendIQ(roomiq.tree(),
+ function() {},
+ function() {});
+ },
+ /***Function
+ Change the current users nick name.
+ Parameters:
+ (String) room - The multi-user chat room name.
+ (String) user - The new nick name.
+ */
+ changeNick: function(room, user) {
+ var room_nick = this.test_append_nick(room, user);
+ var presence = $pres({from: this._connection.jid,
+ to: room_nick})
+ .c("x",{xmlns: Strophe.NS.MUC});
+ this._connection.send(presence.tree());
+ },
+ /***Function
+ List all chat room available on a server.
+ Parameters:
+ (String) server - name of chat server.
+ (String) handle_cb - Function to call for room list return.
+ */
+ listRooms: function(server, handle_cb) {
+ var iq = $iq({to: server,
+ from: this._connection.jid,
+ type: "get"})
+ .c("query",{xmlns: Strophe.NS.DISCO_ITEMS});
+ this._connection.sendIQ(iq, handle_cb, function(){});
+ },
+ test_append_nick: function(room, nick) {
+ var room_nick = room;
+ if (nick)
+ {
+ room_nick += "/" + Strophe.escapeNode(nick);
+ }
+ return room_nick;
+ }
+});
diff --git a/mod/beechat/views/default/settings/beechat/edit.php b/mod/beechat/views/default/settings/beechat/edit.php
new file mode 100755
index 000000000..ec4ab08de
--- /dev/null
+++ b/mod/beechat/views/default/settings/beechat/edit.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Barter Plugin
+ * @package Barters
+ **/
+ $domain = elgg_get_plugin_setting("domain", "beechat");
+ //$group_domain = elgg_get_plugin_setting("groupdomain", "beechat");
+ $xmlrpc_ip = elgg_get_plugin_setting("xmlrpcip", "beechat");
+ $dbname = elgg_get_plugin_setting("dbname", "beechat");
+ $dbhost = elgg_get_plugin_setting("dbhost", "beechat");
+ $dbuser = elgg_get_plugin_setting("dbuser", "beechat");
+ $dbpassword = elgg_get_plugin_setting("dbpassword", "beechat");
+?>
+<p>
+ <?php echo elgg_echo('beechat:domain'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[domain]','value' => $domain)); ?>
+ <!--<?php echo elgg_echo('beechat:groupdomain'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[groupdomain]','value' => $group_domain)); ?>-->
+ <?php echo elgg_echo('beechat:xmlrpcip'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[xmlrpcip]','value' => $xmlrpc_ip)); ?>
+ <?php echo elgg_echo('beechat:dbname'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[dbname]','value' => $dbname)); ?>
+ <?php echo elgg_echo('beechat:dbhost'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[dbhost]','value' => $dbhost)); ?>
+ <?php echo elgg_echo('beechat:dbuser'); ?>
+ <?php echo elgg_view('input/text', array('internalname' => 'params[dbuser]','value' => $dbuser)); ?>
+ <?php echo elgg_echo('beechat:dbpassword'); ?>
+ <?php echo elgg_view('input/password', array('internalname' => 'params[dbpassword]','value' => $dbpassword)); ?>
+
+</p>
+
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..82a9e6c51
--- /dev/null
+++ b/mod/blog/actions/blog/save.php
@@ -0,0 +1,182 @@
+<?php
+/**
+ * Save blog entity
+ *
+ * Can be called by clicking save button or preview button. If preview button,
+ * we automatically save as draft. The preview button is only available for
+ * non-published drafts.
+ *
+ * Drafts are saved with the access set to private.
+ *
+ * @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':
+ $values[$name] = string_to_tag_array($value);
+ 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;
+
+ default:
+ $values[$name] = $value;
+ break;
+ }
+}
+
+// if preview, force status to be draft
+if ($save == false) {
+ $values['status'] = 'draft';
+}
+
+// if draft, set access to private and cache the future access
+if ($values['status'] == 'draft') {
+ $values['future_access'] = $values['access_id'];
+ $values['access_id'] = ACCESS_PRIVATE;
+}
+
+// assign values to the entity, stopping on error.
+if (!$error) {
+ foreach ($values as $name => $value) {
+ $blog->$name = $value;
+ }
+}
+
+// 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());
+
+ // we only want notifications sent when post published
+ register_notification_object('object', 'blog', elgg_echo('blog:newpost'));
+ elgg_trigger_event('publish', 'object', $blog);
+
+ // reset the creation time for posts that move from draft to published
+ 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..9753f27a8
--- /dev/null
+++ b/mod/blog/lib/blog.php
@@ -0,0 +1,478 @@
+<?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 we should allow comments
+ if ($blog->comments_on != 'Off' && $blog->status == 'published') {
+ $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 ($post->status == 'draft') {
+ $values['access_id'] = $post->future_access;
+ }
+ }
+
+ 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..e724b91c2
--- /dev/null
+++ b/mod/blog/start.php
@@ -0,0 +1,302 @@
+<?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 - need to register for unique event because of draft/published status
+ elgg_register_event_handler('publish', 'object', 'object_notifications');
+ 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]);
+ if (!$user) {
+ forward('', '404');
+ }
+ $params = blog_get_page_content_list($user->guid);
+ break;
+ case 'friends':
+ $user = get_user_by_username($page[1]);
+ if (!$user) {
+ forward('', '404');
+ }
+ $params = blog_get_page_content_friends($user->guid);
+ break;
+ case 'archive':
+ $user = get_user_by_username($page[1]);
+ if (!$user) {
+ forward('', '404');
+ }
+ $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':
+ $group = get_entity($page[1]);
+ if (!elgg_instanceof($group, 'group')) {
+ forward('', '404');
+ }
+ if (!isset($page[2]) || $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->status != 'published') {
+ // draft status replaces access
+ foreach ($return as $index => $item) {
+ if ($item->getName() == 'access') {
+ unset($return[$index]);
+ }
+ }
+
+ $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..6529887d4
--- /dev/null
+++ b/mod/blog/views/default/blog/sidebar/archives.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Blog archives
+ */
+
+$page_owner = elgg_get_page_owner_entity();
+
+if (!$page_owner) {
+ return true;
+}
+
+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 = array_reverse(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);
+ }
+}
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..f825acca1
--- /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="mbm elgg-text-help">' . $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..b808f1bdc
--- /dev/null
+++ b/mod/blog/views/default/river/object/blog/create.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Blog river view.
+ */
+
+$object = $vars['item']->getObjectEntity();
+
+$excerpt = $object->excerpt ? $object->excerpt : $object->description;
+$excerpt = strip_tags($excerpt);
+$excerpt = elgg_get_excerpt($excerpt);
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => $excerpt,
+));
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..970b39415
--- /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 a 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..5c6011ad9
--- /dev/null
+++ b/mod/bookmarks/pages/bookmarks/all.php
@@ -0,0 +1,33 @@
+<?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',
+ '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..173996346
--- /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('', '404');
+}
+
+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..b7b907916
--- /dev/null
+++ b/mod/bookmarks/pages/bookmarks/owner.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Elgg bookmarks plugin everyone page
+ *
+ * @package Bookmarks
+ */
+
+$page_owner = elgg_get_page_owner_entity();
+if (!$page_owner) {
+ forward('', '404');
+}
+
+elgg_push_breadcrumb($page_owner->name);
+
+elgg_register_title_button();
+
+$content .= elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'bookmarks',
+ 'container_guid' => $page_owner->guid,
+ '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..caea43587
--- /dev/null
+++ b/mod/bookmarks/start.php
@@ -0,0 +1,316 @@
+<?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 bookmarks view for ecml parsing
+ elgg_register_plugin_hook_handler('get_views', 'ecml', 'bookmarks_ecml_views_hook');
+
+ // 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) {
+ if (!$page_owner->isMember()) {
+ return $return;
+ }
+ $title = elgg_echo('bookmarks:bookmarklet:group');
+ } else {
+ $title = elgg_echo('bookmarks:bookmarklet');
+ }
+
+ $return[] = new ElggMenuItem('bookmarklet', $title, 'bookmarks/bookmarklet/' . $page_owner->getGUID());
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Return bookmarks views to parse for ecml
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @param array $params
+ */
+function bookmarks_ecml_views_hook($hook, $type, $return, $params) {
+ $return['object/bookmarks'] = elgg_echo('item:object:bookmarks');
+ 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/bulk_user_admin b/mod/bulk_user_admin
new file mode 160000
+Subproject 17664c9c5af5ee2d74b7c378ccc52ee65074ad6
diff --git a/mod/captcha b/mod/captcha
new file mode 160000
+Subproject c7ac34e65fed6e9fc08f85dc4734b29c4fd5114
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..d51e6c19e
--- /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,
+ 'type' => $type,
+ 'subtype' => $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/ckeditor b/mod/ckeditor
new file mode 160000
+Subproject 9f4ede06562e229a26d7ae8d32ebb23453c293e
diff --git a/mod/colorbox/COPYING b/mod/colorbox/COPYING
new file mode 100644
index 000000000..dba13ed2d
--- /dev/null
+++ b/mod/colorbox/COPYING
@@ -0,0 +1,661 @@
+ GNU AFFERO GENERAL PUBLIC LICENSE
+ Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+ 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
+them 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.
+
+ Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+ A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate. Many developers of free software are heartened and
+encouraged by the resulting cooperation. However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+ The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community. It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server. Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+ An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals. This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU Affero General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey 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;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If 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 convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Remote Network Interaction; Use with the GNU General Public License.
+
+ Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software. This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero 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 that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ 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.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+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.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state 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 program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source. For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code. There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<http://www.gnu.org/licenses/>.
diff --git a/mod/colorbox/languages/ca.php b/mod/colorbox/languages/ca.php
new file mode 100644
index 000000000..214d327aa
--- /dev/null
+++ b/mod/colorbox/languages/ca.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Colorbox -- Translation strings for Catalan
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+$catalan = array(
+ "js:lightbox:current" => "imatge %s de %s",
+);
+
+add_translation("ca", $catalan);
diff --git a/mod/colorbox/languages/en.php b/mod/colorbox/languages/en.php
new file mode 100644
index 000000000..70bab4e05
--- /dev/null
+++ b/mod/colorbox/languages/en.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Colorbox -- Translation strings for English
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+$english = array(
+ "js:lightbox:current" => "image %s of %s",
+);
+
+add_translation("en", $english);
diff --git a/mod/colorbox/languages/es.php b/mod/colorbox/languages/es.php
new file mode 100644
index 000000000..e49d0db47
--- /dev/null
+++ b/mod/colorbox/languages/es.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Colorbox -- Translation strings for Spanish
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+$spanish = array(
+ "js:lightbox:current" => "imagen %s de %s",
+);
+
+add_translation("es", $spanish);
diff --git a/mod/colorbox/manifest.xml b/mod/colorbox/manifest.xml
new file mode 100644
index 000000000..ec5f22e90
--- /dev/null
+++ b/mod/colorbox/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>Colorbox</name>
+ <author>Lorea developers</author>
+ <version>1.8.0</version>
+ <category>lorea</category>
+ <category>enhancement</category>
+ <category>multimedia</category>
+ <description>Elgg lightbox replacement for Fancybox. Colorbox is the default Elgg lightbox in 1.9.</description>
+ <website>https://lorea.org/plugin/colorbox</website>
+ <copyright>Copyright 2012 Lorea Faeries &lt;federation@lorea.org&gt;</copyright>
+ <repository>https://gitorious.org/lorea/colorbox</repository>
+ <donations>https://lorea.org/support</donations>
+ <license>GNU Affero General Public License version 3, or later</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>embed</plugin>
+ </requires>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.9</version>
+ <comparison>lt</comparison>
+ </requires>
+</plugin_manifest>
diff --git a/mod/colorbox/start.php b/mod/colorbox/start.php
new file mode 100644
index 000000000..b19b2efcf
--- /dev/null
+++ b/mod/colorbox/start.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Colorbox -- A lightweight, customizable lightbox plugin for jQuery
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ * @homepage https://lorea.org/plugin/colorbox
+ * @copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ * @license COPYING, http://www.gnu.org/licenses/agpl
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+elgg_register_event_handler('init', 'system', 'colorbox_init');
+
+/**
+ * Initialize the colorbox plugin.
+ *
+ */
+function colorbox_init() {
+
+}
diff --git a/mod/colorbox/vendors/jquery/colorbox/README.md b/mod/colorbox/vendors/jquery/colorbox/README.md
new file mode 100644
index 000000000..2a53feac8
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/README.md
@@ -0,0 +1,318 @@
+## About ColorBox:
+A customizable lightbox plugin for jQuery. See the [project page](http://jacklmoore.com/colorbox/) for documentation and a demonstration, and the [FAQ](http://jacklmoore.com/colorbox/faq/) for solutions and examples to common issues. Released under the [MIT license](http://www.opensource.org/licenses/mit-license.php).
+
+## Changelog:
+
+### Version 1.3.19 - December 08 2011
+Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all)
+
+* Fixed bug related to using the 'fixed' property.
+* Optimized the setup procedure to be more efficient.
+* Removed $.colorbox.init() as it will no longer be needed (will self-init when called).
+* Removed use of $.browser.
+
+### Version 1.3.18 - October 07 2011
+Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all) and example 1's controls.png
+
+* Fixed a regression where Flash content displayed in ColorBox would be reloaded if the browser window was resized.
+* Added safety check to make sure that ColorBox's markup is only added to the DOM a single time, even if $.colorbox.init() is called multiple times. This will allow site owners to manually initialize ColorBox if they need it before the DOM has finished loading.
+* Updated the example index.html files to be HTML5 compliant.
+* Changed the slideshow behavior so that it immediately moves to the next slide when the slideshow is started.
+* Minor regex bugfix to allow automatic detection of image URLs that include fragments.
+
+### Version 1.3.17 - May 11 2011
+Files Changed:jquery.colorbox.js/jquery.colorbox-min.js
+
+* Added properties "top", "bottom", "left" and "right" to specify a position relative to the viewport, rather than using the default centering.
+* Added property "data" to specify GET or POST data when using Ajax. ColorBox's ajax functionality is handled by jQuery's .load() method, so the data property works the same way as it does with .load().
+* Added property "fixed" which can provide fixed positioning for ColorBox, rather than absolute positioning. This will allow ColorBox to remain in a fixed position within the visitors viewport, despite scrolling. IE6 support for this was not added, it will continue to use the default absolute positioning.
+* Fixed ClearType problem with IE7.
+* Minor fixes.
+
+### Version 1.3.16 - March 01 2011
+Files Changed:jquery.colorbox.js/jquery.colorbox-min.js, colorbox.css (all) and example 4 background png files
+
+* Better IE related transparency workarounds. IE7 and up now uses the same background image sprite as other browsers.
+* Added error handling for broken image links. A message will be displayed telling the user that the image could not be loaded.
+* Added new property: 'fastIframe' and set it to true by default. Setting to fastIframe:false will delay the loading graphic removal and onComplete event until iframe has completely loaded.
+* Ability to redefine $.colorbox.close (or prev, or next) at any time.
+
+### Version 1.3.15 - October 27 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Minor fixes for specific cases.
+
+### Version 1.3.14 - October 27 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* In IE6, closing an iframe when using HTTPS no longer generates a security warning.
+
+### Version 1.3.13 - October 22 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Changed the index.html example files to use YouTube's new embedded link format.
+* By default, ColorBox returns focus to the element it was launched from once it closes. This can now be disabled by setting the 'returnFocus' property to false. Focus was causing problems for some users who had their anchor elements inside animated containers.
+* Minor bug fix involved in using a combination of slideshow and non-slideshow content.
+
+### Version 1.3.12 - October 20 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Minor bug fix involved in preloading images when using a function as a value for the href property.
+
+### Version 1.3.11 - October 19 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed the slideshow functionality that broke with 1.3.10
+* The slideshow now respects the loop property.
+
+### Version 1.3.10 - October 16 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed compatibility with jQuery 1.4.3
+* The 'open' property now accepts a function as a value, like all of the other properties.
+* Preloading now loads the correct href for images when using a dynamic (function) value for the href property.
+* Fixed bug in Safari 3 for Win where ColorBox centered on the document, rather than the visitor's viewport.
+* May have fixed an issue in Opera 10.6+ where ColorBox would rarely/randomly freeze up while switching between photos in a group.
+* Some functionality better encapsulated & minor performance improvements.
+
+### Version 1.3.9 - July 7 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/ all colorbox.css (the core styles)
+
+* Fixed a problem where iframed youtube videos would cause a security alert in IE.
+* More code is event driven now, making the source easier to grasp.
+* Removed some unnecessary style from the core CSS.
+
+### Version 1.3.8 - June 21 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed a bug in Chrome where it would sometimes render photos at 0 by 0 width and height (behavior introduced in recent update to Chrome).
+* Fixed a bug where the onClosed callback would fire twice (only affected 1.3.7).
+* Fixed a bug in IE7 that existed with some iframed websites that use JS to reposition the viewport caused ColorBox to move out of position.
+* Abstracted the identifiers (HTML ids & classes, and JS plugin name, method, and events) so that the plugin can be easily rebranded.
+* Small changes to improve either code readability or compression.
+
+### Version 1.3.7 - June 13 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/index.html
+
+* $.colorbox can now be used for direct calls and accessing public methods. Example: $.colorbox.close();
+* Resize now accepts 'width', 'innerWidth', 'height' and 'innerHeight'. Example: $.colorbox.resize({width:"100%"})
+* Added option (loop:false) to disable looping in a group.
+* Added options (escKey:false, arrowKey:false) to disable esc-key and arrow-key bindings.
+* Added method for removing ColorBox from a document: $.colorbox.remove();
+* Fixed a bug where iframed URLs would be truncated if they contained an unencoded apostrophe.
+* Now uses the exact href specified on an anchor, rather than the version returned by 'this.href'. This was causing "#example" to be normalized to "http://domain/#example" which interfered with how some users were setting up links to inline content.
+* Changed example documents over to HTML5.
+
+### Version 1.3.6 - Jan 13 2010
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Small change to make ColorBox compatible with jQuery 1.4
+
+### Version 1.3.5 - December 15 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed a bug introduced in 1.3.4 with IE7's display of example 2 and 3, and auto-width in Opera.
+* Fixed a bug introduced in 1.3.4 where colorbox could not be launched by triggering an element's click event through JavaScript.
+* Minor refinements.
+
+### Version 1.3.4 - December 5 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Event delegation is now used for elements that ColorBox is assigned to, rather than individual click events.
+* Additional callbacks have been added to represent other stages of ColorBox's lifecycle. Available callbacks, in order of their execution: onOpen, onLoad, onComplete, onCleanup, onClosed These take place at the same time as the event hooks, but will be better suited than the hooks for targeting specific instances of ColorBox.
+* Ajax content is now immediately added to the DOM to be more compatible if that content contains script tags.
+* Focus is now returned to the calling element on closing.
+* Fixed a bug where maxHeight and maxWidth did not work for non-photo content.
+* Direct calls no longer need 'open:true', it is assumed. Example: `$.fn.colorbox({html:'<p>Hi</p>'});`
+
+### Version 1.3.3 - November 7 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Changed $.fn.colorbox.element() to return a jQuery object rather the DOM element.
+* jQuery.colorbox-min.js is compressed with Google's Closure Compiler rather than YUI Compressor.
+
+### Version 1.3.2 - October 27 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Added 'innerWidth' and 'innerHeight' options to allow people to easily set the size dimensions for ColorBox, without having to anticipate the size of the borders and buttons.
+* Renamed 'scrollbars' option to 'scrolling' to be in keeping with the existing HTML attribute. The option now also applies to iframes.
+* Bug fix: In Safari, positioning occassionally incorrect when using '100%' dimensions.
+* Bug fix: In IE6, the background overlay is briefly not full size when first viewing.
+* Bug fix: In Firefox, opening ColorBox causes a split second shift with a small minority of webpage layouts.
+* Simplified code in a few areas.
+
+### Version 1.3.1 - September 16 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/colorbox.css/colorbox-ie.css(removed)
+
+* Removed the IE-only stylesheets and conditional comments for example styles 1 & 4. All CSS is handled by a single CSS file for all examples.
+* Removed user-agent sniffing from the js and replaced it with feature detection. This will allow correct rendering for visitors masking their agent type.
+
+### Version 1.3.0 - September 15 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js/colorbox.css
+
+* Added $.fn.colorbox.resize() method to allow ColorBox to resize it's height if it's contents change.
+* Added 'scrollbars' option to allow users to turn off scrollbars when using the resize() method.
+* Renamed the 'resize' option to be less ambiguous. It's now 'scalePhotos'.
+* Renamed the 'cbox_close' event to be less ambiguous. It's now 'cbox_cleanup'. It is the first thing to happen in the close method while the 'cbox_closed' event is the last to happen.
+* Fixed a bug with the slideshow mouseover graphics that appeared after ColorBox is opened a 2nd time.
+* Fixed a bug where ClearType may not work in IE6&7 if using the fade transition.
+* Minor code optimizations to increase compression.
+
+### Version 1.2.9 - August 7 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Minor change to enable use with $.getScript();
+* Minor change to the timing of the 'cbox_load' event so that it is more useful.
+* Added a direct link to a YouTube video to the examples.
+
+### Version 1.2.8 - August 5 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed a bug with the overlay in IE6
+* Fixed a bug where left & right keypress events might be prematurely unbound.
+
+### Version 1.2.7 - July 31 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js, example stylesheets and background images (core styles have not changed and the updates will not affect existing user themes / old example themes)
+
+* Code cleanup and reduction, better organization and documentation in the full source.
+* Added ability to use functions in place of static values for ColorBox's options (thanks Ken!).
+* Added an option for straight HTML. Example: `$.fn.colorbox({html:'<p>Howdy</p>', open:true})`
+* Added an event for the beginning of the closing process. This is in addition to the event that already existed for when ColorBox had completely closed. 'cbox_close' and 'cbox_closed' respectively.
+* Fixed a minor bug in IE6 that would cause a brief content shift in the parent document when opening ColorBox.
+* Fixed a minor bug in IE6 that would reveal select elements that had a hidden visibility after closing ColorBox.
+* The 'esc' key is unbound now when ColorBox is not open, to avoid any potential conflicts.
+* Used background sprites for examples 1 & 4. Put IE-only (non-sprite) background images in a separate folder.
+* Example themes 1, 3, & 4 received slight visual tweaks.
+* Optimized pngs for smaller file size.
+* Added slices, grid, and correct sizing to the Adobe Illustrator file, all theme files are now export ready!
+
+### Version 1.2.6 - July 15 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Fixed a bug with fixed width/height images in Opera 9.64.
+* Fixed a bug with trying to set a value for rel during a direct call to ColorBox. Example: `$.fn.colorbox({rel:'foo', open:true});`
+* Changed how href/rel/title settings are determined to avoid users having to manually update ColorBox settings if they use JavaScript to update any of those attributes, after ColorBox has been defined.
+* Fixed a FF3 bug where the back button was disabled after closing an iframe.
+
+### Version 1.2.5 - June 23 2009
+Files Changed: jquery.colorbox.js/jquery.colorbox-min.js
+
+* Changed the point at which iframe srcs are set (to eliminate the need to refresh the iframe once it has been added to the DOM).
+* Removed unnecessary return values for a very slight code reduction.
+
+### Version 1.2.4 - June 9 2009
+Files Changed: jquery.colorbox.js, jquery.colorbox-min.js
+
+* Fixed an issue where ColorBox may not close completely if it is closed during a transition animation.
+* Minor code reduction.
+
+### Version 1.2.3 - June 4 2009
+* Fixed a png transparency stacking issue in IE.
+* More accurate Ajax auto-sizing if the user was depending on the #cboxLoadedContent ID for CSS styling.
+* Added a public function for returning the current html element that ColorBox is associated with. Example use: var that = $.fn.colorbox.element();
+* Added bicubic scaling for resized images in the original IE7.
+* Removed the IE6 stylesheet and png files from Example 3. It now uses the same png file for the controls that the rest of the browsers use (an alpha transparency PNG8). This example now only has 2 graphics files and 1 stylesheet.
+
+### Version 1.2.2 - May 28 2009
+* Fixed an issue with the 'resize' option.
+
+### Version 1.2.1 - May 28 2009
+* Note: If you are upgrading, update your jquery.colorbox.js and colorbox.css files.
+* Added photo resizing.
+* Added a maximum width and maximum height. Example: {height:800, maxHeight:'100%'}, would allow the box to be a maximum potential height of 800px, instead of a fixed height of 800px. With maxHeight of 100% the height of ColorBox cannot exceed the height of the browser window.
+* Added 'rel' setting to add the ability to set an alternative rel for any ColorBox call. This allows the user to group any combination of elements together for a gallery, or to override an existing rel. attribute so those element are not grouped together, without having to alter their rel in the HTML.
+* Added a 'photo' setting to force ColorBox to display a link as a photo. Use this when automatic photo detection fails (such as using a url like 'photo.php' instead of 'photo.jpg', 'photo.jpg#1', or 'photo.jpg?pic=1')
+* Removed the need to ever create disposable elements to call colorbox on. ColorBox can now be called directly, without being associated with any existing element, by using the following format:
+ `$.fn.colorbox({open:true, href:'yourLink.xxx'});`
+* ColorBox settings are now persistent and unique for each element. This allows for extremely flexible options for individual elements. You could use this to create a gallery in which each page in the gallery has different settings. One could be a photo with a fade transition, next could be an inline element with an elastic transition with a set width and height, etc.
+* For user callbacks, 'this' now refers to the element colorbox was opened from.
+* Fixed a minor grouping issue with IE6, when transition type is set to 'none'.
+* Added an Adobe Illustrator file that contains the borders and buttons used in the various examples.
+
+### Version 1.2 - May 13 2009
+* Added a slideshow feature.
+* Added re-positioning on browser resize. If the browser is resized, ColorBox will recenter itself onscreen.
+* Added hooks for key events: cbox_open, cbox_load, cbox_complete, cbox_closed.
+* Fixed an IE transparency-stacking problem, where transparent PNGs would show through to the background overlay.
+* Fixed an IE iframe issue where the ifame might shift up and to the left under certain circumstances.
+* Fixed an IE6 bug where the loading overlay was not at full height.
+* Removed the delay in switching between same-sized gallery content when using transitions.
+* Changed how iframes are loaded to make it more compatible with iframed pages that use DOM dependent JavaScript.
+* Changed how the JS is structured to be better organized and increase compression. Increased documentation.
+* Changed CSS :hover states to a .hover class. This sidesteps a minor IE8 bug with css hover states and allows easier access to hover state user styles from the JavaScript.
+* Changed: elements added to the DOM have new ID's. The naming is more consistent and less likely to cause conflicts with existing website stylesheets. All stylesheets have been updated.
+* Changed the behavior for prev/next links so that ColorBox does not get hung up on broken links. A visitor can now skip through broken or long-loading links by clicking prev/next buttons.
+* Changed the naming of variables in the parameter map to be more concise and intuitive.
+* Removed colorbox.css. Combined the colorbox.css styles with jquery.colorbox.js: the css file was not large enough to warrant being a separate file.
+
+### Version 1.1.6 - April 28 2009
+* Prevented the default action of the next & previous anchors and the left and right keys for gallery mode.
+* Fixed a bug where the title element was being added back to the DOM when closing ColorBox while using inline content.
+* Fixed a bug where IE7 would crash for example 2.
+* Smaller filesize: removed a small amount of unused code and rewrote the HTML injection with less syntax.
+* Added a public method for closing ColorBox: $.fn.colorbox.close(). This will allow iframe users to add an event to close ColorBox without having to create an additional function.
+
+### Version 1.1.5 - April 11 2009
+* Fixed minor issues with exiting ColorBox.
+
+### Version 1.1.4 - April 08 2009
+* Fixed a bug in the fade transition where ColorBox not close completely if instructed to close during the fade-in portion of the transition.
+
+### Version 1.1.3 - April 06 2009
+* Fixed an IE6&7 issue with using ColorBox to display animated GIFs.
+
+### Version 1.1.2 - April 05 2009
+* Added ability to change content when ColorBox is already open.
+* Added vertical photo centering now works for all browsers (this feature previously excluded IE6&7).
+* Added namespacing to the esc-key keydown event for people who want to disable it: "keydown.colorClose"
+* Added 'title' setting to add the ability to set an alternative title for any ColorBox call.
+* Fixed rollover navigation issue with IE8. (Added JS-based rollover state due to a browser-bug.)
+* Fixed an overflow issue for when the fixed width/height is smaller than the size of a photo.
+* Fixed a bug in the fade transition where the border would still come up if ColorBox was closed mid-transition.
+* Switch from JSMin to Yui Compressor for minification. Minified code now under 7KB.
+
+### Version 1.1.1 - March 31 2009
+* More robust image detection regex. Now detects image file types with url fragments and/or query strings.
+* Added 'nofollow' exception to rel grouping.
+* Changed how images are loaded into the DOM to prevent premature size calculation by ColorBox.
+* Added timestamp to iframe name to prevent caching - this was a problem in some browsers if the user had multiple iframes and the visitor left the page and came back, or if they refreshed the page.
+
+### Version 1.1.0 - March 21 2009
+* Animation is now much smoother and less resource intensive.
+* Added support for % sizing.
+* Callback option added.
+* Inline content now preserves JavaScript events, and changes made while ColorBox is open are also preserved.
+* Added 'href' setting to add the ability to set an alternative href for any anchor, or to assign the ColorBox event to non-anchors.
+ Example: $('button').colorbox({'href':'process.php'})
+ Example: $('a[href='http://msn.com']).colorbox({'href':'http://google.com', iframe:true});
+* Photos are now horizontally centered if they are smaller than the lightbox size. Also vertically centered for browsers newer than IE7.
+* Buttons in the examples are now included in the 'protected zone'. The lightbox will never expand it's borders or buttons beyond an accessible area of the screen.
+* Keypress events don't queue up by holding down the arrow keys.
+* Added option to close ColorBox by clicking on the background overlay.
+* Added 'none' transition setting.
+* Changed 'contentIframe' and 'contentInline' to 'inline' and 'iframe'. Removed 'contentAjax' because it is automatically assumed for non-image file types.
+* Changed 'contentWidth' and 'contentHeight' to 'fixedWidth' and 'fixedHeight'. These sizes now reflect the total size of the lightbox, not just the inner content. This is so users can accurately anticipate % sizes without fear of creating scrollbars.
+* Clicking on a photo will now switch to the next photo in a set.
+* Loading.gif is more stable in it's position.
+* Added a minified version.
+* Code passes JSLint.
+
+### Version 1.0.5 - March 11 2009
+* Redo: Fixed a bug where IE would cut off the bottom portion of a photo, if the photo was larger than the document dimensions.
+
+### Version 1.0.4 - March 10 2009
+* Added an option to allow users to automatically open the lightbox. Example usage: $(".colorbox").colorbox({open:true});
+* Fixed a bug where IE would cut off the bottom portion of a photo, if the photo was larger than the document dimensions.
+
+### Version 1.0.3 - March 09 2009
+* Fixed vertical centering for Safari 3.0.x.
+
+### Version 1.0.2 - March 06 2009
+* Corrected a typo.
+* Changed the content-type check so that it does not assume all links to photos should actually display photos. This allows for Ajax/inline/and iframe calls on anchors linking to picture file types.
+
+### Version 1.0.1 - March 05 2009
+* Fixed keydown events (esc, left arrow, right arrow) for Webkit browsers.
+
+### Version 1.0 - March 03 2009
+* First release
diff --git a/mod/colorbox/vendors/jquery/colorbox/colorbox.ai b/mod/colorbox/vendors/jquery/colorbox/colorbox.ai
new file mode 100644
index 000000000..1b51881af
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/colorbox.ai
@@ -0,0 +1,1811 @@
+%PDF-1.4 %âãÏÓ
+1 0 obj <</Metadata 2 0 R/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 48282/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.351735, 2008/07/22-18:11:12 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/vnd.adobe.illustrator</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">colorbox</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:CreatorTool>Adobe Illustrator CS4</xmp:CreatorTool>
+ <xmp:CreateDate>2009-05-27T04:22:39-04:00</xmp:CreateDate>
+ <xmp:ModifyDate>2009-07-30T21:43:35-05:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2009-07-30T21:43:35-05:00</xmp:MetadataDate>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>208</xmpGImg:width>
+ <xmpGImg:height>256</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA&#xA;AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADQAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXnn5b+fNd85T6us6W9jHpkiRL6KOzOzl9zzagACdMVZt9U1D/lt/5Jr/AFxV&#xA;gf5ZfmZrHmfzJrei39vBGNIaSNbiEODIYpjFUqzNStK4q9JxV2KuxV2KuxV2KuxV2KuxV2KvG/Pf&#xA;5jfmBY/mDL5Z8twpdMyRNb2/pKzktEHf4jTYbmpxVQ/xJ/zkV/1Y1/4G3/6qYqh9G/ND8zYvPml+&#xA;WvMdtHZSXcsXqwtEgYwyEjkjKSCDQioPXFXueKvBB+aX5r6n5k1HSdAtI717OSX4EiT4Y0fiCzOV&#xA;H44qmH+JP+civ+rGv/A2/wD1UxVd5F/Nbzde6/qVh5lMVnHpcEj3aNGIzG0TANyPgBiqbeU/z18v&#xA;eZdcl0izkZZ2kZLEPEw9aONOTS1pRQTUKCa+OKqdh+fvlm882Dy+kzAycYoLkxsFN16jRtbsCOuy&#xA;lWFVNaVr1VRfnv8AN5/Jt9AmpWLvp1zbyPBexFWrcx7iEx1BFV/aO340VR+r/mFqWj+Sl8x6lYGG&#xA;aOOGS808MrPH6jKHVW2VivLbpX2xVMtC8622vaLFq+lzLPaTKxRuJHxLUMpBoQQRirDfIf5y6x5n&#xA;1DSrWaxhtl1HT7i/dkZmKmC7a2CCoHXjyriqH/5x3/vvNf8AzFQ/rmxV7Lirwb8hv/JkedP+M9z/&#xA;ANRhxV7zirsVdirsVdirsVdirsVdirsVeNSf+tKx/wDMKf8AqDOKvZcVeHfmF/60T5T/AOYO0/6i&#xA;7nFXuOKvDvyS/wDJleb/AJN/1EHFXuOKvCPKoB/O/wA3AioLSgg/OPFWbeXvLflPTby/m0e1gjnl&#xA;n5XRjCnhLxHJVP7O1KqPn1OKtQ+W/KaebH1VLaAa4LZVQhVBWIu9XVRtyZmYM3XtiqC8x+VvI2q6&#xA;79Y19I7m7WzkRbe5c+mkBPxyIhPFH/yx8W3XbFVeXQvK8/km20meQyeX1jgQPJI3xRqylQ7k1AOw&#xA;O+2Kp/bWdpb2iWtpEkNsiCOKKIBVVQOICgbAAbDFWE+SPKfkrTL7TZ9Eu7i4ltrCeCzEtaNbPdM8&#xA;jtVE3EzFR0+XfFVH/nHf++81/wDMVD+ubFXsuKvBvyG/8mR50/4z3P8A1GHFXvOKuxV2KuxV2Kux&#xA;V2KuxV2KuxV4tfgH/nISYHcfUl/6h1xV6LwT+Ufdil5J5sAH/OQPlWgp/o1r0/5ibjFD3/FXg/5T&#xA;gHzt5xqK/vk6/wDGWbFXqnBP5R92KXlnlqJJPzo80xNUI8AU8SVNDFCNitCD7jFDLfL3kW10fUZL&#xA;xLiWQh2MKsduDClHH7RB74qttvIVnD5iGrfWZSqfvEj5GplZmJJbrwoR8Pfvttiqt5q8pyeYJ4Vl&#xA;uBDawRuU4oDJ6zbAlj+xtuBT5+CqM1DRrrUPLf6LnlRJ5I40mljWiAggsVTbw2GKo3SNNg0uwgso&#xA;Gd4oBRWkYsx+k/qG2KpD5W8sajpU1k9y0TC3spraT02J+OS5MwIqo24/jiqS/wDOO/8Afea/+YqH&#xA;9c2KvZcVeDfkN/5Mjzp/xnuf+ow4q95xV2KuxV2KuxV2KuxV2KuxV2KvA/OPmPTvL356y6jqJZbM&#xA;W0cUsiKXKc4AAxUbkA9ab4qyL/ldX5a/9XZv+kW7/wCqWKsFm8z6R5m/PLy5qGkO81lALa19Z0aM&#xA;O6yySEqrgNQeqBuBvXtvir6UxV81eTfOmheWPPHmY6zI8EF5MwjnVHkUNFK54ssYZvi57bYqzv8A&#xA;5XV+Wv8A1dm/6Rbv/qlirFfy41m11v8ANXXtVtAwtbqImHmKMVT04wxHblwrir2LFLsVdirsVdir&#xA;sVeef847/wB95r/5iof1zYoey4q8G/Ib/wAmR50/4z3P/UYcVe84q7FXYq7FXYq7FXYq7FXYq7FU&#xA;p1Dyj5X1G6a7v9Ktbq6cAPNNEjuQooKkiuwGKob/AJV95G/6sNh/0jx/0xVVtfJPlC0uY7m10azg&#xA;uIWDxSxworKw6EEDY4qnWKpHN5F8mTSvLLollJLISzu0EZJYmpJNMVWf8q+8jf8AVhsP+keP+mKo&#xA;rT/KfljTpjNYaXa2sxHEyQxIjFT2qoGKph9Utv8AfS/dirvqlt/vpfuxV31S2/30v3Yq76pbf76X&#xA;7sVd9Utv99L92Ku+qW3++l+7FXj/APzjwQLjzUhNGNzCwU9aVl3pir2XFXg35DD/AJCN5zb9lprk&#xA;q3Yj62emKvecVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVSyfy1oU2&#xA;5soUbpySNUNPCoGKqH+D9B/5ZhiqN03RdK0xOFhaRWwIofSRUJHvxAxVG4q7FXYq7FXYq7FXYq7F&#xA;XYqg9H1jTdZ0u11XTLhLqwvI1mt54yCrI4qP7R2xVL/OHm6x8qaNca1qNrdTabaL6l3NaRiYxJWh&#xA;ZkDB+I7kKaDc7Yq84/6Gu/Kj0DcV1P0AokMv1GTgELcA3KtKc/hr47Yq9J8pea7PzTo1vrNha3UG&#xA;nXiCW0lu41iMsbfZdU5F+LdQSBUbjbFUdrOs6ZoulXWq6pcJa2FlG01zPIaKqIKn5nwHfFUZirsV&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir8t7NtVW2nltHmS3gCvcNGzKq8mCK&#xA;TQjck0xV9Tf84pyar5v/AC088eUtS1CZ7GaM2dq8hMpgXULeaOXhyPTYNx6Vr44qxf8A6Fe/OhtP&#xA;Hllv0WNHEwYXv1iSgYOT6/GnPdTTjx+iu+Kss/5y2utV8sfl/wCTPLWnX80diA1vcshMbTixgiSI&#xA;vxPT4i3HpX5DFXyrdvqzW0El28z209XgaRmZGKEoSKkioNRir9SMVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdirsVdirsVfnX5S85aNpmjNFND6bwAGSJAC0xJA5DkRU+IJxV71/wA4TyrN&#xA;a+dJUHFZLq0dR4BhOR0xV9NYq+ZP+c25FjsvJsjCqpdXbMPYLCcVeC+YvOOiXnl4WyQCea4B9KNw&#xA;AYCCRzPGtG8ADv32xV+iuKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvhDQ&#xA;P+cTvzc1nSbbU1gsrGO6jWWKC7uCk3BxyUskaScag9CajuMVfSX/ADjl+TmsflroGpx61cwz6nqs&#xA;8ckkVsWeKOOFWVBzZULMeZJ28MVeu4q8h/5yN/JzWfzK0HS49EuoYNS0qeR0iuSyRSRzqqv8aq5D&#xA;LwUjanXFXzb5h/5xQ/NzRdJudTaCzv4rSNpZobOcvNwQcmKo6R8qDsu57DFX3hirsVdirsVdirsV&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdir4I0T/nKf8AOHSNKttMi1CC5htIxFFLc26SS8FF&#xA;FDPsWoNqnfxxV9Mf843fnBrf5j+XtSbXIYk1TSZ445Li3UokscysyEoSeLDgwNNumKvX8VePf85J&#xA;fnDrv5ceX9LbQoIX1LVp5I1uLhS6RRwKrOQgK1di60rt12xV80a7/wA5S/m/rGkXWlzahb28F5G0&#xA;M0ltbpHL6bijBX+LjUbVG/hir74xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K&#xA;uxV8lfkx+Uv5Sa1+Wlxd6peLeXGprGupX/NIZbF0kST6vGZAwiPNQGcirg7fCcVZD/zhpbW1sfPd&#xA;tauZLaC/t44HJDFo09dVNRQGoHbFX0pir5q/5zNt7e5/wLb3LcLea+uI5nqFojegGNTsNjiqTfnD&#xA;+T/5PaP+U8OoWF/Hp+oaajrpV7zWaTUHaR5DbycKeqxZyA4HwAb/AAjFX1dirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdirsVdirsVdirsVdir8vLF9eSxu7exFx9Sv1WO8jiDmOUROJEDgCh4uoI8M&#xA;VfRv/OPmm+ffKv5QeePN1gq6dLEgvbFb+BnjuYtPhlkn+Csb7g8UcNTlXFV7f85FfnGvkL/GBuNH&#xA;+r8liFl9RufW9RpjHUn1eAi4rX1a0LfB9rFW/wDnI7SPPnmL8qfJPmbUE/SVwVa61L6hAVhthfQx&#xA;yRfADJJxAXizs1OVOlaYq+br+XX3sbS2vvrP1HT1eOyilDiOISyGVwgIoOTsSfHFX6h4q7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqhNI0nT9I0y10vToEtrGzjWG3gjAVVRBQA&#xA;AUGKq91bW91bS2tzGs1vOjRTROKq6OOLKw7gg0xV45H/AM4lflEmofWfT1BrblU6cbtvq5Tlz9I/&#xA;D6vDlvTnir2SCCG3gjggRYoYlCRRoAqqqiiqoHQAYqhtY0jTtZ0q70rUoFubC9iaC5gcAqyOKEb/&#xA;AIYqjMVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd&#xA;irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi&#xA;rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirqitO/hirsVcSBudsVdirSujEhWBI60NaYq3irsVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVdiq2WP1Inj5MnNSvNDRlqKVB33GKpL5U8sy6DbzwyahPf8ArSM49diQlXZv&#xA;hBrQtyq57nfFVlj5WmtvM9zrbalczJPHwWzd6otWZuO/7CcvgHY1xVT82eU5tdmtJI7sWwtg/JeD&#xA;MJQzI3pycXSsZ4bjFU21vTm1LSLuwWT0muomiEtK8eQpWm3TFVawtTaWUFqZpLgwoqGeU8pH4inJ&#xA;j3JxVJvKflmfQ2vDJOswuW5LxBFP3ssm9f8AjLirIMVdirsVdirsVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVU7o3ItpTaqj3QRjAkrFIzJT4Q7KHIWvUhT8sVYV+VN9+a93pt8fzEsbOyu0uHFj9&#xA;UapaMyyVDgM6hUHERnqVoWq1TiqjomofnBJ+Z+p2urafYxeREgrYXUTn1i3qSek37RaRlH71DRVH&#xA;EjeoZVT/ADT1L807S90lPI9s1xayrINZcQwStDF6sIEsHrSwhp1Vn4Rn4WFSegxVlPnWbzFD5S1e&#xA;Xy2nq6+lrI2lx0VuVwF/dij/AA7t44qi9Bk1qTRbF9cihg1hoUOoRWrM8KzcfjEbMAeNf9s9cVYT&#xA;+UepfmTevrI86JOoikA0717eO3BT61dL8PppHy/crD1r2Pc4q9FxV2KuxV2KuxV2KuxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVQmmkDiOIcpCK09vE4qome+hHO&#xA;ZF9MHcqa0riqMRgyhh3xVvFXYq7FXYq7FXYq7FVOW5ghkhjkfi9w5ihG/wAThGkI/wCAjY4q3PPF&#xA;bwSTzNwiiUvI57KoqTt7YqlekebvLusXLWum3q3M6IZGRVcUQEKT8SgdWGKppJNDEAZHVAenIgV+&#xA;/FWzJGE9QsAlK86ilPGuKujlikFY3VwNiVIIr9GKtLPA7lFkVnFaqCCduu2KpTqnnLyxpdwba/1G&#xA;KG4H2ovidl7/ABBA1PpxVB/8rJ8kf9XWP/gJf+aMVTzTtSsNStVurC4S5t2NBJGaio6g+B9sVS1f&#xA;OnlhtT/Ra36m/wDVNv6HF6+qG4la8adffFU7xV2KuxV2KuxVBqf9ytP+KW/4kuKrtV/4583yH6xi&#xA;qpZ/7zp8hiqtirsVdirsVdirsVdiqFvbH6zc2E3Ph9SnafjSvPlBLDxrUU/vq19sVUfMP/HA1P8A&#xA;5hJ/+TbYq8l/JT/lKrr/AJgZP+T0WKvSPM/6aEMg0uWK3vXdfSmncRp6QQ1XkUk35e21a+2Kooi4&#xA;FoZEAjFWMRk+JFkMYCu1APh9Tlv71xVC6IuuNYn9IzQ3V6FkEklqCE4FgY4+RJ5OFrvXb8SqttDr&#xA;bapcrNc2sun8h+joIUYTxkFd5KmihRy5Cn9MVeIaDpF75m8wpZ+uFuLx3kmuJKt0Bd2I7nFWXa/+&#xA;TtzpmkXWoQamt0bWNpXhaH0qogqxDc33A36Yqj/yMkflrMfI8ALdgvap9QVxVjdt/wCTYP8A22ZP&#xA;+ohsVe9Yq7FVK5mEMTOe2KqKQ3MirJ63HkAeIWvXfrXFVS3lYu8TmrxkAn5iuKqKf8dX/ni3/Elx&#xA;Vdqv/HPm+Q/WMVVbP/eZPkMVVsVdirsVdirsVdirsVQ9zexW81pC4YteSmCIrSgYRSTVapG3GI/T&#xA;iqH8w/8AHA1P/mEn/wCTbYq8l/JT/lKrr/mBk/5PRYq9G83+ZH0Wyku/q0t2ElWJbWBpFkasZcuP&#xA;TSRiB37AVPtlmLHxmrphOXCLR0uozLZSSAPP6aPIFg+KSULEsojj2WrNyoNq5ADemV7IHy55jn1P&#xA;ShffU7mxEglCw3gIb92VHqry+P0zy/a8NttzPJDhNXaISsWssfMc82vX2miwvofqFC19Op+rzfEg&#xA;4KT8PJ/UqnHw+jDLHUQbG6BOzVPGPJ2uxeX/ADJb6hcxNJFDzSaNaBwHUoaVpuK9MqZvQPM35t6B&#xA;eaDfWVjDcPcXcLwL6iKiKJFKsxIZjsDttiqF/Iz+91n/AFbf9cmKsdtv/JsH/tsyf9RDYq96xV2K&#xA;oe+hMtuyDqRiqHi1KKONIpI5A6gKaCo2264qq2il5pZypUSEEA9aAU/hiq1P+Or/AM8W/wCJLiq7&#xA;Vf8AjnzfIfrGKqtn/vMnyGKq2KuxV2KuxV2KuxV2Koe5soria0mcsGs5TPEFpQsYpIaNUHbjKfpx&#xA;VdeWsd3Zz2khIjuI3icrQMFdSppWu++Ksd8r/l5ovlvUJL6xmuZJZIjAyztGy8WZWqOKIa1Qd8VZ&#xA;HJbRSPzNVelOSMVJHgeJFcVd9Vg9IRcfgB5ChIIbx5V5V964q2ltChY0LFxRi5Lkjw+Inb2xVYll&#xA;AjKRyITdFZ2ZR8gSRirFta/Kvytqt9JeuJ7WaYl5hbOqqzHqxV1cAn2xVL/+VKeVf+Wq+/5GQ/8A&#xA;VLFWV+XvLOkeX7RrbTYiiueUsjHlI5HQs3t2HTFUmT8s9Bj8wnXhcXX1v6y15wLx+n6jOXIp6fLj&#xA;U/zYqyWXUbWI0dwDiqn+l7L/AH4MVd+l7L/fgxVb+k9PrXmMVXDVrEdHGKoe0vbe41grGwYiBj9H&#xA;NcVROsMF02dj0AH6xiqrYsGtYyOlBiqvirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqnc&#xA;kiFyOtDiqG0tFayR3UF3LFiRufiIxVF+lF/Iv3DFXelF/Iv3DFXelF/Iv3DFXelF/Iv3DFUPLA0c&#xA;3rwopfiVI6VBNeo+WKqMxuruMwPCscbbOeXKo8OgxVU0tStvw7KSo+QNMVRmKuxV2KuxV2KuxV2K&#xA;uxV2KuxV2KuxV2KuxV2KuxV2KtMoZSD0OKoJrGdaiCZo1JrxFCPxxVr6nf8A/LW/3D+mKu+p3/8A&#xA;y1v9w/pirvqd/wD8tb/cP6Yq76nf/wDLW/3D+mKu+p3/APy1v9w/piraWl6D8VyxHyAxVFwxLEgU&#xA;dsVf/9k=</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#">
+ <xmpMM:RenditionClass>default</xmpMM:RenditionClass>
+ <xmpMM:OriginalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</xmpMM:OriginalDocumentID>
+ <xmpMM:DocumentID>xmp.did:8BC7D877974ADE11BCECCFF09938C3CC</xmpMM:DocumentID>
+ <xmpMM:InstanceID>uuid:30267148-672c-4d34-8534-e8cce420f815</xmpMM:InstanceID>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:D47F11740720681191099C3B601C4548</stEvt:instanceID>
+ <stEvt:when>2008-04-17T14:19:21+05:30</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FD7F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T17:01:20-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811BC18AC99CBA78E83</stEvt:instanceID>
+ <stEvt:when>2008-05-19T18:10:15-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FB7F117407206811B628E3BF27C8C41B</stEvt:instanceID>
+ <stEvt:when>2008-05-22T14:26:44-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:08C3BD25102DDD1181B594070CEB88D9</stEvt:instanceID>
+ <stEvt:when>2008-05-28T16:51:46-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F11740720681192B0DFFC927805D7</stEvt:instanceID>
+ <stEvt:when>2008-05-30T21:26:38-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F11740720681192B0DFFC927805D7</stEvt:instanceID>
+ <stEvt:when>2008-05-30T21:27-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F1174072068119098B097FDA39BEF</stEvt:instanceID>
+ <stEvt:when>2008-06-02T13:26:10-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:8BC7D877974ADE11BCECCFF09938C3CC</stEvt:instanceID>
+ <stEvt:when>2009-05-27T04:22:07-04:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:32300939-b1c4-8440-b812-b255b7b0d326</stRef:instanceID>
+ <stRef:documentID>xmp.did:F97F1174072068119098B097FDA39BEF</stRef:documentID>
+ <stRef:originalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:StartupProfile>Web</illustrator:StartupProfile>
+ <illustrator:Type>Document</illustrator:Type>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:HasVisibleTransparency>True</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>1024.000000</stDim:w>
+ <stDim:h>768.000000</stDim:h>
+ <stDim:unit>Pixels</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Magenta</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>White</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Black</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Red</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Yellow</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Green</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Cyan</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Blue</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Magenta</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=193 G=39 B=45</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>193</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>45</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=28 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=241 G=90 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>241</xmpG:red>
+ <xmpG:green>90</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=247 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>247</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=251 G=176 B=59</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>251</xmpG:red>
+ <xmpG:green>176</xmpG:green>
+ <xmpG:blue>59</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=252 G=238 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>252</xmpG:red>
+ <xmpG:green>238</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=217 G=224 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>217</xmpG:red>
+ <xmpG:green>224</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=198 B=63</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>198</xmpG:green>
+ <xmpG:blue>63</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=57 G=181 B=74</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>57</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>74</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=146 B=69</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>146</xmpG:green>
+ <xmpG:blue>69</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=104 B=55</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>104</xmpG:green>
+ <xmpG:blue>55</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=34 G=181 B=115</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>34</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>115</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=169 B=157</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>157</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=41 G=171 B=226</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>41</xmpG:red>
+ <xmpG:green>171</xmpG:green>
+ <xmpG:blue>226</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=113 B=188</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>113</xmpG:green>
+ <xmpG:blue>188</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=46 G=49 B=146</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>46</xmpG:red>
+ <xmpG:green>49</xmpG:green>
+ <xmpG:blue>146</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=27 G=20 B=100</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>27</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>100</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=45 B=145</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>45</xmpG:green>
+ <xmpG:blue>145</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=147 G=39 B=143</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>147</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>143</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=158 G=0 B=93</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>158</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>93</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=212 G=20 B=90</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>212</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>90</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=30 B=121</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>30</xmpG:green>
+ <xmpG:blue>121</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=199 G=178 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>199</xmpG:red>
+ <xmpG:green>178</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=134 B=117</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>134</xmpG:green>
+ <xmpG:blue>117</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=115 G=99 B=87</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>115</xmpG:red>
+ <xmpG:green>99</xmpG:green>
+ <xmpG:blue>87</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=83 G=71 B=65</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>83</xmpG:red>
+ <xmpG:green>71</xmpG:green>
+ <xmpG:blue>65</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=198 G=156 B=109</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>198</xmpG:red>
+ <xmpG:green>156</xmpG:green>
+ <xmpG:blue>109</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=166 G=124 B=82</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>166</xmpG:red>
+ <xmpG:green>124</xmpG:green>
+ <xmpG:blue>82</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=98 B=57</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>98</xmpG:green>
+ <xmpG:blue>57</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=117 G=76 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>117</xmpG:red>
+ <xmpG:green>76</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=96 G=56 B=19</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>96</xmpG:red>
+ <xmpG:green>56</xmpG:green>
+ <xmpG:blue>19</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=66 G=33 B=11</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>66</xmpG:red>
+ <xmpG:green>33</xmpG:green>
+ <xmpG:blue>11</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=0 B=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=26 G=26 B=26</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>26</xmpG:red>
+ <xmpG:green>26</xmpG:green>
+ <xmpG:blue>26</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=51 G=51 B=51</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>51</xmpG:red>
+ <xmpG:green>51</xmpG:green>
+ <xmpG:blue>51</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=77 G=77 B=77</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>77</xmpG:red>
+ <xmpG:green>77</xmpG:green>
+ <xmpG:blue>77</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=102 B=102</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>102</xmpG:green>
+ <xmpG:blue>102</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=128 G=128 B=128</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>128</xmpG:red>
+ <xmpG:green>128</xmpG:green>
+ <xmpG:blue>128</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=153 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>153</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=179 G=179 B=179</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>179</xmpG:red>
+ <xmpG:green>179</xmpG:green>
+ <xmpG:blue>179</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=204 G=204 B=204</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>204</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>204</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=230 G=230 B=230</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>230</xmpG:red>
+ <xmpG:green>230</xmpG:green>
+ <xmpG:blue>230</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=242 G=242 B=242</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>242</xmpG:red>
+ <xmpG:green>242</xmpG:green>
+ <xmpG:blue>242</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=63 G=169 B=245</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>63</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>245</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=122 G=201 B=67</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>122</xmpG:red>
+ <xmpG:green>201</xmpG:green>
+ <xmpG:blue>67</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=29 B=37</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>29</xmpG:green>
+ <xmpG:blue>37</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=123 B=172</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>123</xmpG:green>
+ <xmpG:blue>172</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=189 G=204 B=212</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>189</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>212</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=138 G=138 B=138 1</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>138</xmpG:red>
+ <xmpG:green>138</xmpG:green>
+ <xmpG:blue>138</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 9.00</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?>
+endstream endobj 3 0 obj <</Count 1/Kids[155 0 R]/Type/Pages>> endobj 155 0 obj <</ArtBox[0.0 73.0 508.0 701.0]/BleedBox[0.0 0.0 1024.0 768.0]/Contents 156 0 R/Group 157 0 R/LastModified(D:20090730214335-05'00')/MediaBox[0.0 0.0 1024.0 768.0]/Parent 3 0 R/PieceInfo<</Illustrator 158 0 R>>/Resources<</ColorSpace<</DefaultRGB 159 0 R>>/XObject<</Fm0 160 0 R>>>>/Thumb 161 0 R/TrimBox[0.0 0.0 1024.0 768.0]/Type/Page>> endobj 156 0 obj <</Filter/FlateDecode/Length 130>>stream
+H‰ŒÎ-Ã0 †aîSøõìø' ŸÆ‹v€©°ºûƒµ,$’õ‘<à=±FCáb¸Üï·Á8A¯-‚âFÅ{­(V(Ì\Eñ³Ããµ3>¿°Îüå¨IGIykF½µÝS><H‚朗7)dªÞ5×?úLÿè3ý£Ÿö¯ð`
+endstream endobj 157 0 obj <</CS 162 0 R/I false/K false/S/Transparency>> endobj 161 0 obj <</BitsPerComponent 8/ColorSpace 163 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 79/Length 284/Width 106>>stream
+8;Z\ui<k5l%"j!.(Yn<rGVB89DS9W38A;imV+n")c,d,Cr$jiKcnTe_@#q%%4(.C8
+HN;BSQ0K3*YFS=EP`>nRqnec:hag&4%a](-!f93L:A4D\h\gZ/n@lX;HcTPGfEHCj
+Q%6lr1C^ia9#<W0(GV,aU!d`IC%Y0XNP6><b7'6om5]6K!.0N/D61*)F/P7m\Pl,G
+gpGL0adN#/Z594=1XIk%(grE!EB@RojEgmQOd52KE0$6o\NS1_@3+<#Mt:Yj;B;Fb
+IK^@:(iq@&!<@UeLT(~>
+endstream endobj 163 0 obj [/Indexed/DeviceRGB 255 164 0 R] endobj 164 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
+endstream endobj 160 0 obj <</BBox[-103.108 71.3223 103.108 -71.3213]/Length 854/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 165 0 R>>/ExtGState<</GS0 166 0 R>>/Font<</T1_0 154 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form>>stream
+BT
+/CS0 cs 0 0 0 scn
+/GS0 gs
+/T1_0 1 Tf
+0 Tc 0 Tw 0 Ts 100 Tz 0 Tr 12 0 0 -12 -103.0967 -61.2773 Tm
+[(T)7(his is an A)12(dobe\256 I)-10(llustr)5(a)4(t)6(or\256 F)26(ile tha)4(t w)4(as)]TJ
+0 -1.2 TD
+[(sa)8(v)10(ed without PDF C)11(on)4(t)6(en)4(t)3(.)]TJ
+0 -1.2 TD
+[(T)71(o P)5(lac)6(e or open this \037le in other)]TJ
+0 -1.2 TD
+[(applica)4(tions)11(, it should be r)10(e)-28(-sa)8(v)10(ed fr)10(om)]TJ
+0 -1.2 TD
+[(A)12(dobe I)-10(llustr)5(a)4(t)6(or with the ")3(C)3(r)10(ea)4(t)6(e PDF)]TJ
+0 -1.2 TD
+[(C)11(ompa)4(tible F)26(ile" option tur)-4(ned on. )41(T)7(his)]TJ
+T*
+[(option is in the I)-10(llustr)5(a)4(t)6(or Na)4(tiv)10(e F)31(or)-4(ma)4(t)]TJ
+0 -1.2 TD
+[(Options dialog bo)14(x, which appears when)]TJ
+0 -1.2 TD
+[(sa)8(ving an A)12(dobe I)-10(llustr)5(a)4(t)6(or \037le using the)]TJ
+0 -1.2 TD
+[(S)-3(a)8(v)10(e A)6(s c)6(ommand)10(.)]TJ
+ET
+
+endstream endobj 154 0 obj <</BaseFont/OUPLQW+MyriadPro-Regular/Encoding 167 0 R/FirstChar 31/FontDescriptor 168 0 R/LastChar 174/Subtype/Type1/Type/Font/Widths[523 212 0 337 0 0 0 0 0 0 0 0 0 207 307 207 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 612 0 580 666 0 487 0 0 239 0 0 0 0 658 689 532 0 0 493 497 0 0 0 0 0 0 0 0 0 0 0 0 482 569 448 564 501 292 559 555 234 0 0 236 834 555 549 569 0 327 396 331 551 481 736 463 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 419]>> endobj 167 0 obj <</BaseEncoding/WinAnsiEncoding/Differences[31/f_i]/Type/Encoding>> endobj 168 0 obj <</Ascent 952/CapHeight 674/CharSet(/f_i/space/quotedbl/comma/hyphen/period/A/C/D/F/I/N/O/P/S/T/a/b/c/d/e/f/g/h/i/l/m/n/o/p/r/s/t/u/v/w/x/registered)/Descent -250/Flags 32/FontBBox[-157 -250 1126 952]/FontFamily(Myriad Pro)/FontFile3 169 0 R/FontName/OUPLQW+MyriadPro-Regular/FontStretch/Normal/FontWeight 400/ItalicAngle 0/StemV 88/Type/FontDescriptor/XHeight 484>> endobj 169 0 obj <</Filter/FlateDecode/Length 3130/Subtype/Type1C>>stream
+H‰|TyPwîffz è$ÒÕD§“î#hD”[-±o!b(/˜a¸@e0‚ §E
+D%"‰g”C ¹Ed=€ñ
+1ÆMÜ}?¬l[[•¿¶ªëõ»ú{ï}¯ëá˜ÐÃq|Ž—Ÿ·ÇWþ‹<©U
+ouÔâíÊà˜ð@µ1ÈrŸáÜl!÷ù
+Ù£¬÷ïß{ˆà¹Ïgµ|6cÔð˜O”ìß«ZÍc‡heöË—;Ø¥Ó´tµ•9,]ºtZ:ÉÖ(¢‚”2ŸC­2B#Û)RGG©µJ…lMx¸lB#S+5Ju¬ÑÉ÷¤UÊù¸,èÌÏ·÷ðÙ‘|Î:'g'[çev²ÿv/SidJ•6D©–ò
+å~ŒgÇ0†Í4Á¬0ì ³Á°/1l‰ æ„c§ó!°R ?a6F=1o,ËÇÊ°Ü—ã øþÖd­I¾É„`³@!º ¿þ!Ú :AÄN"8+¶ï›š›z™^00s6‹2ùÈö£VsQjz÷º çåM‚t!—:é=•J@j£Ð*øV¯$C·(0S9â)bÏ´«o\3eÔÑ’ : ZÁí„ãøÏatØHŸàæä&ª
+… 5X¡°ýqWAÁe¾1×ä>®¶0Ι¿<ȤRên¦vÐðéŸåìÝ»ÏÁD
+xÈÃm·™o‡Kh½Á#ùØv܃:y¾<»žçÖÈ1E[læ!/UXFV #‰çÇm
+óYÉE~ºÂ>¸h¤ ’Ç,Çá<‘r®$­”½¡±-¯(ºÑ.½£m ¾ÂTÊ=Î9Óë}“YË>s1«šžèÜg¿t«¿U¤&óäAV’¤än „ÆY´ Â@×”QšÊþ¸.¼øóÍöÛˆ¨cí*ƒ.wH¯WÜ~Ù^ðh1CÖ—ðû.ŒÜY°‘FŸ:¹Y-îù
+Läì Uå~OéFÿ]^>g/(Irq,÷ú>û Øgià^CÐý©k ÄêºBc!½fvYT p”lä졉ú5ø-Z°Íû°ZÎœó/oÈ¿N¿ÉÈsWH“ÄÈ+cÞVd&]ß´á·Þæòêï™,‚LÈÙ&!RÊô×j¤. ÙøMZRjt$H¾•Þ«,mûðÂ_õ¬äž®O˹õBxœÅà8T>#aE&ìÓèC™!‚l<9"Ê$<ªZ£ûhÀÀd Ö€µëïh¦›Ê/œÕÃONÄø”;u:óTVs¯¨µægz¢iÙ—Hà·Ún«M{<›š›–—'•øòÛÇúðêgÎæ ¥S‡&~M/ZÛ Âßï<Á²D]1{®[”¯ÙïO#‡ùG Ñ‚‰`Ýu³0ï<+i×õ+þ×lõ3¸8ÎÓc3@¡½¸:& b5̬"ç Ù¼X
+ˆÐi{~)™$!x63áú”'(&}÷¹ŸÓÜhg¹1Ì…æ‹H ›ÅÁÙ_šrŽ L Ãi œ‘?Ü Ù»bd[Ý! íëäÙÖøõeh1µšíÔ”ýÒ௤½Éhh¢gù¦šZS5™›_œ]®O÷˜Î"5ä‰ë8Â1×x—ïøûQÞo‰ã½ÕebÁ‰¹éCiçhIW‰Û+ºxæìˆÿ;åÉ6ªcs-rñ»veìö}þŠž,ë*ÿLTüõaÉ¡B·SN X’U°›‚± s¸|½IlgÝF.>Þ—×\ä‘SÇ:.¨|do·Õê¢uAL§VÊÈeï [`lÅÂh¾à'M¨8²’±7°2ŒûÙRVA¤ 
+endstream endobj 166 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 165 0 obj [/ICCBased 170 0 R] endobj 170 0 obj <</Filter/FlateDecode/Length 2574/N 3>>stream
+H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó
+ 
+V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚ó
+€x¯Íú·¶Ò-
+¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…åÆ’°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9
+N'çÎ)Î].ÂuæJ¸rî
+î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö
+n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=G</zÁ^Á^j¯­^—¼ Þ¡ÞZïQïBº0FX'Ü+œòáû¤útøŒû<öuñ-ôÝà{Ö÷µ__•ß˜ß-G”,ê}çïé/÷ñ¿ÀHh 8ðm W 2p[àŸƒ¸AiA«‚Ný#8$X¼?øAˆKHIÈ{!7Ä<q†¸Wüy(!46´-ôãÐaÁa†°ƒa†W†ï ¿¿@°@¹`lÁݧYÄŽˆÉH,²$òýÈÉ(Ç(YÔhÔ7ÑÎÑŠèÑ÷b<b*böÅ<Žõ‹ÕÇ~ûL&Y&9‡Ä%ÆuÇMÄsâsã‡ã¿NpJP%ìM˜I JlN<žDHJIÚtCj'•KwKg’C’—%ŸN¡§d§ §|“ꙪO=–§%§mL»½Ðu¡váx:H—¦oL¿“!ȨÉøC&13#s$ó/Y¢¬–¬³ÙÜìâì=ÙOsbsúrnåºçsOæ1óŠòvç=ËËïÏŸ\ä»hÙ¢óÖê‚#…¤Â¼Â…³‹ãoZ<]TÔUt}‰`IÃ’sK­—V-ý¤˜Y,+>TB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîÆ•Æ©ºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_p߶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO
+¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ
+endstream endobj 159 0 obj [/ICCBased 171 0 R] endobj 171 0 obj <</Length 3144/N 3>>stream
+
+
+
+'
+=
+T
+j
+
+ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eŠ¯Õú Ek‘·Ý*QwžÅì;cŠ²Ú*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý#
+#8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<'<e<¤<ã="=a=¡=à> >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·O
+kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ—
+—u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°
+¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ
+endstream endobj 158 0 obj <</LastModified(D:20090730214335-05'00')/Private 172 0 R>> endobj 172 0 obj <</AIMetaData 173 0 R/AIPrivateData1 174 0 R/AIPrivateData10 175 0 R/AIPrivateData11 176 0 R/AIPrivateData12 177 0 R/AIPrivateData13 178 0 R/AIPrivateData14 179 0 R/AIPrivateData15 180 0 R/AIPrivateData16 181 0 R/AIPrivateData2 182 0 R/AIPrivateData3 183 0 R/AIPrivateData4 184 0 R/AIPrivateData5 185 0 R/AIPrivateData6 186 0 R/AIPrivateData7 187 0 R/AIPrivateData8 188 0 R/AIPrivateData9 189 0 R/ContainerVersion 9/CreatorVersion 14/NumBlock 16/RoundtripVersion 11>> endobj 173 0 obj <</Length 894>>stream
+%!PS-Adobe-3.0
+%%Creator: Adobe Illustrator(R) 11.0
+%%AI8_CreatorVersion: 14.0.0
+%%For: (Administrator) ()
+%%Title: (colorbox.ai)
+%%CreationDate: 7/30/2009 9:43 PM
+%%Canvassize: 16383
+%%BoundingBox: 0 73 508 701
+%%HiResBoundingBox: 0 73 508 701
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%AI5_FileFormat 7.0
+%AI3_ColorUsage: Color
+%AI7_ImageSettings: 0
+%%RGBProcessColor: 0 0 0 ([Registration])
+%AI3_TemplateBox: 512.5 383.5 512.5 383.5
+%AI3_TileBox: 116 78 908 690
+%AI3_DocumentPreview: None
+%AI5_ArtSize: 14400 14400
+%AI5_RulerUnits: 6
+%AI9_ColorModel: 1
+%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
+%AI5_TargetResolution: 800
+%AI5_NumLayers: 1
+%AI9_OpenToView: 93.25 700 8 1780 1006 18 0 0 45 111 1 0 1 1 1 0 1
+%AI5_OpenViewLayers: 7
+%%PageOrigin:0 0
+%AI7_GridSettings: 100 4 100 4 1 0 0.8 0.8 0.8 0.9 0.9 0.9
+%AI9_Flatten: 1
+%AI12_CMSettings: 00.MS
+%%EndComments
+
+endstream endobj 174 0 obj <</Length 6746>>stream
+%%BoundingBox: 0 73 508 701
+%%HiResBoundingBox: 0 73 508 701
+%AI7_Thumbnail: 104 128 8
+%%BeginData: 6616 Hex Bytes
+%0000330000660000990000CC0033000033330033660033990033CC0033FF
+%0066000066330066660066990066CC0066FF009900009933009966009999
+%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
+%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
+%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
+%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
+%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
+%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
+%6666006666336666666666996666CC6666FF669900669933669966669999
+%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
+%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
+%9933009933339933669933999933CC9933FF996600996633996666996699
+%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
+%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
+%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
+%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
+%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
+%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
+%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
+%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
+%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
+%000011111111220000002200000022222222440000004400000044444444
+%550000005500000055555555770000007700000077777777880000008800
+%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
+%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
+%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
+%524C45FDA0FFA8A8A8FFA8FFA8A87DA8A8FD5DFF5227FD06FF7D27A8FD5D
+%FF5252FD06FF52277DFD5DFF5252FD06FF7D27A8FD2AFF7D527D527D527D
+%527D52A8FD04FF7D7D527D527D527D527D7DFFFFFFA8FFA8FFA8FFA8FFA8
+%FFA8FFA8FFFFFFA8FFA8A8A8FF5252FD06FF5227A8FD2AFF522727522752
+%27522752A8FD04FF7D2752275227522752277DFFA852A8A8FF527DA8FF7D
+%52527DFFA852A8CAFFA8525252A85252FD06FF7D27A8FD2AFF5227A8A8FF
+%A8A8A85227A8FD04FF52277DFFA8FFA8FF7D277DA8F82727A85227F87DA8
+%A827F87DFFA82727A8A8A8275252FF5252FD06FF5227A8FD2AFF5252FD06
+%FF7D27A8FD04FF7D27A8FD06FF277DA87D52A8A8A85252A8FF7D52527DFF
+%FF277DA8FFA8525252FF7D52FD06FF7D27A8FD2AFF5252FD06FF7D27A8FD
+%04FF5227A8FD05FF7D277DFFA8A8A8FFA8A8A8FFA8A8A8FF7DFFA8A8A8FF
+%A8A87DA87DFF5252FD06FF5227A8FD2AFF5252FD06FF7D27A8FD04FF7D27
+%A8FD05FFA8277DFFFFA8FFA8FFA8FFA8FFA8FFFFFFA8FFFFFFA8FFA8FFA8
+%FFA85252FD06FF7D27A8FD2AFF5227FFFFFFA8FFFF7DF8A8FD04FF7D277D
+%FFFFFFA8FF7D277DFFA8A8A8FFA8A87DFFA8A87DA87DFFA8A8A8FFA8FF7D
+%7D7DFF5252A8FD05FF52277DFD2AFF527DA8FFA8FFA8FF7D27A8FD04FF7D
+%27A8FFFFA8FFFFA827A8A87D52A8CAA8527DA8FFA87D52A8A8FF527DA8FF
+%A87D7DA8FF5252FD06FF7D27A8FD2AFF5252FFA8FFA8FFFF7DF8A8FD04FF
+%7D27A8FFA8FFA8FFA8277DFF7D7D7DFFA87D7DFFA8A8527D7DFFA87D7DFF
+%A8FF527D7DFF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF7D27A8FD04
+%FF7D27A8A8FFA8FFA8A8277DFFFFA8FFA8FFA8FFA8FFFD04A8CAFFA8FFA8
+%FFFD05A85252FD06FF7D27A8FD2AFF5252FFA8FFA8FFA87D27A8FD04FF52
+%27A8FFA8FFA8FF7D277DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
+%FFA8FFA8FF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF7D27A8FD04FF
+%7D27A8A8FFA8FFA8A8277DFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
+%FFA8FFA8FFA87D52FD06FF7D27A8FD2AFF5252FFA8FFA8FFFF7D27A8FD04
+%FF5252A8FFA8FFA8FFA8527DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
+%FFA8FFA8FFA8FF5252FD06FF5227A8FD2AFF5252A8FFA8FFA8FF5227A8FD
+%04FF7D277DA8FFA8FFA87D277DFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8
+%FFA8FFA8FFA8FFA85252FD06FF7D27A8FD2AFF52FD0927A8FD04FF52FD09
+%2752FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FFA8CAA8FF5252A8
+%FD05FF52277DFD2AFF7DA87D7D7DA87D7D7DA8A8FD04FFA87DA87D7D7DA8
+%7D7D7DA8FD19FF5252FD06FF7D27A8FD5DFF5252FD06FF5227A8FD5DFF52
+%52FD06FF7D27A8FD5DFF5252A8FFA8FFFFFF5227A8FD5EFFFD09A8FD62FF
+%A8FFA8FDFCFFFDD3FFA87DA87DA87DA8A8FD5AFF52FD05FFA827F827F8F8
+%27FFFFFFA8FFFF7DA8FD53FFF8F82727277DFF52F85252F87DFFA8FD0427
+%F8FD54FFFD05F827FF7DF827F8F87DFF27FD05F8A8FD53FFFD05F827FFFF
+%7D272752FFFF27FD05F8FD54FFF8F827F8F827A8FD07FFF8F8F827F8F8A8
+%FD53FFF8277D522727FD08FF27F8525252F8FD54FFF852277DF827FD08FF
+%F8F852525227A8FD53FFF8275227F827FD08FF27F8275227F8FD54FFFD05
+%F827FD08FFF8F8F827F8F8A8FD53FFFD05F827FD08FF27FD05F8FD54FFFD
+%05F827FD08FF27FD05F8A8FD53FFF827525252A8FD09FFFD0452F8FD54FF
+%7DFD05FFA8FD0CFFA8A8FD53FFA8FD12FF7DFD54FFF827275227A8FD08FF
+%A852272727F8A8FD53FFFD05F827FD08FF27FD05F8FD54FFFD05F827FD08
+%FFFD06F8A8FD53FFF8F852F8F827FD08FF27F82752F8F8FD54FFF87DFF7D
+%F827FD08FFF8277DFF52F8A8FD53FF52FFFFFF52F8FD08FF2727FFFFFF52
+%FD54FFF87DA8A8F827A8FD07FFF8277DFF5227A8FD53FFF8F852F8F827FD
+%08FF27F82752F8F8FD54FFFD05F8277D525252275252A8FD05F827A8FD53
+%FFFD05F827FF27F85252F852FF27FD05F8FD54FFF8272727F8A8FF76F87D
+%52F87DFF7D27F827F8F8A8FD53FF7DFD06FFA827F8F8F8FD07FF52FD5CFF
+%A87D7DA8FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFC
+%FFFDFCFFFDFCFFFDFCFFFD80FFA8FD07FFA8FD53FF7DA8FFFFFF7DA8FFFF
+%FF7D7DFFFFFF7DA8FFFFFFA87DFD52FF52A8FFFFA87D7DFFFFFF7D7DFFFF
+%FF7D7DFFFFFF7D7DFD67FFA8FDFCFFFD26FF277DFFFFA82752FFFFFF2752
+%FFFFFF7D7DFFFFFF2752A8FD50FFA8F827FFFFA8F852FFFFFF2727FFFFFF
+%277DFFFFFF5227FD52FFA8FD09FFA8A8A8FD07FF7DA8FDFCFFFDFCFFFDA2
+%FFA8FFA8FD64FFA8FFA8FFA8FD62FFA8FD05FFA8FD66FFA8FD62FFA8FD04
+%FFA8A8FD60FFA8FD05FFA8FD22FFA8FD04FFA8527D7DFFFFFFA8FFA8FFFF
+%FFA8FFFFFFA8FFA8FFFFA8527D7D7D527D7DFFFFFFA87D52A8FD16FFA8FD
+%05FFA8FD21FFA8FD04FFA87D52A8FFFFA9FD0EFFA8527D527D527D527D7D
+%FFFFA8527DA8FD15FFA8FD05FFA8FD22FFA8FD04FFA852527DFFFFFFA87D
+%A8FFA8FF52A8A8FFA87DA8FF527D527D527D527D527DA8FF7D5252A8FD0C
+%FFA8FFA8FFA8FD05FFA8FD05FFA8FD26FFA87D52A8FFFFFFA97DFFFFFFA8
+%A8A8FFA8FF7DFFA87D527DA8FFFFFF7D7D52FFFFA8527DA8FD0BFFA8FD09
+%FFA8FD05FFA8FD27FFA852527DFFFFFFA8FFA8FFCFFFA8FFFFFFA8FFA8FF
+%52527DFD04FFA8527DA8FF7D5252A8FD0BFFA8A8FFFFFFA8FD05FFA8FD04
+%FFA8A8FD26FFA87D52A8FD04FFA8FD09FFA8FFFF7D527DFD04FFA87D7DFF
+%FFA8527DA8FD0BFFA8FD05FFA8FD09FFA8FD27FFA852527DFFFFFFA8FFA8
+%FFA8FD05FFA8FFCFFF527D7DFD04FFA8527DA8FF7D5252A8FD0BFFA8A8FD
+%09FFA8FD04FFA8A8FD26FFA87D52A8FFFFCFAF53FFA8FFA85AA8FFFFAF53
+%A9FF7D527D7DA8A8A8527D52FFFFA8527DA8FD0DFFA8FFFFFFA8FFFFFFA8
+%FD05FFA8FD22FF7DFD04FFA852527DFFFFFF847EA8FFA8A953A9A8FFA85A
+%A8FFFD07527D527DA8FF7D5252A8FD0CFFA8A8A8FFA8FD05FFA8FD05FFA8
+%FD21FFA8FD04FFA85252A8FD0AFFA8FD06FFA8527D527D527D527D7DFFFF
+%A8527DA8FD15FFA8FD05FFA8FD22FFA8FD05FF7DA8A8FD13FF7DA87DA87D
+%A8A8FFFFFFA8A87DFD17FFA8FD05FFA8FD60FFA8FD05FFA8FD4CFFA8FFA8
+%A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD05A8FD04FFA8A8FD60FFA8FD05FF
+%A8FD4CFFA8FD15FFA8FFFFFFA8FFA8FD62FFA8FFA8FFFFFFA8FD4AFFA8FD
+%19FFA8FFA8FD4CFFA8FD68FFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF
+%A8A8A8FFA8A8A8FDD4FFFF
+%%EndData
+
+endstream endobj 175 0 obj <</Filter[/FlateDecode]/Length 15093>>stream
+H‰ìWiw›ÈýþÎyÿoÊxY‹·$Úmy¤Ä±;/{ ZvC“¦QìùõS  ˜VVœ—|˜ã·ºëVUWÝ2ðcië¿ÿYûx$e41;ÇLÅ&Ÿü¼ûºÝzN5,zÿWÓU®S±»ñ`uk
+ñï÷îŒ!à=NV™ (ƒ¿ !Þ 6[ËKˆÏ¯TJ…RrOÈt»~‹T±™a—
+Q¼óÊýÎ $\¥„².ê,BàçTô·³"T½ÁZÕåfÿN¼¼lyM¦n‹“û‘^4 Ê $ô~¸7±æÌ9à¾[öuÚÍÊòAAÉÉ…\Òì
+ YêL‹Fé˜^Iµ`Þ× ¯Ä
+hI* U°býðÔ(ÊäŽýG|= Èù¼RÌfsÿoz`ÿø#¢jÃÆã¸U6À½ã9X&Êt>4„xG™¥‚}òpa”:¬lçˆÀ㎠Uˆt´åáN/Ü´‰‘õÃÃ?Bð
+Á_Í0›/$ÉÓ1¼œI2?:YN"¨Át€n‰™ŠM1ý²HÑDš_p¯3Ôû|¢ 6© 
+ñï÷îiBãd-§l~'•)ÐÕìú-RÅJd†MÍb«ºý§‹zDHGüœŠþvV„ª7XïÄ…——-¯ÉÔMÀbqr?Ò«ÄõõçºÃ`Þ9¸tDˆZ\7ô[P©rÌîI…æHC}g¾Ù™ªŽ!:ö}è±ùÛ6ÖtÇ.°M‰ã¦ü½ï rSQ¤ÚÄD‚bp,©A\1ob&3lc.=Ÿß
+ùü^>ö,I‘zóØùü‚”L³(ݘ0<¨Ã¥£Žu?V‡ #ŽáTljÞ©³ùYÖ\'ÚØ΢â±öÕÆÄ$ŸÍe÷ãÏJl¶%B Ï^Þpå…Ã- –àLÖw:gÈ´-ïK½ƒ“u ’7 w¢+¾p'¦Æïv"x%ï±–ºø–KuЦ¨§ß…”Ô3l!sà –Ω5Ë|FÉíÈ;²ïß”› ‡©ñ%f®º†¯¡ZÜ9bð’!ÔvÝèaíœÑ¾Nðßø.è
+«EUDÜ!`{€h•9CC1kÖXÿwOÞ»WGºy¡†™üÜ¥–ÿc~úñ„P¨Œ l9ÄôñiÌ:+©êf­K¥òäù.fÌEÕo-ʸ‹«v:±¡
+ÿà©î)§ÝvKª õÆíÛ¦&5 ï)#>œb±˜UæEeUõÏœd¤ÔáÐÿ£iy¯l<ñ¤lû¬ýS3êð¹HŒFÐךc]u'Sšˆ''¤
+¢‘>#—Ñ]¯ìÇá0Ž…çܧDƒjJ?¿9µ:ÎÝl.à^œó»æ¾>jº¸ BMz'Ëùiƒ\Ö0÷µ†{SÃý% ³Ój9XÒPYIvÓù(fcK>mt” Í_6xTL¬“û1IH0+~YáëÌâJ,Á,®ÀÌö¾Î,ûufJdK²’CT’ULuÅããÊ+45fVˆK¯Lý6ºýøQm¤F ?èJ75úÅûëƒèa©è?ªiªÄÑ°ôº}3ì¨uwO‹÷2 N¨½gÍ1î°md¹’À'Ñe“î|ëe3x·v¥k|xŠ]! p|ÇBª§h-~WÅ„Dè°E£ÚÒGxf‚£Câ1Ž88 ²â]ãwÛ Ê ´ ù¢ð0Âæ’#—Ìù”ÂÒqØ8Ìb®‡
+®©õå³^äi«Åƒ~ñòåÛwånuç2þV?îð}éø¦ñ¾th­5§‘9Ñúp¯Æ§/œZÿýU±BJäõa¿2äÕañˆÈ§õšª´>—ŽŸm\§íê‡Á
+­®5µæ£Êöþõj¹³½bŽx4®9¸Îlªu5ÿ2Sæ>—×öÖ7+Ï·>m–ª¯Uìüõôòlex¤ªèÆýK߬÷[ÃñÕŠ¼‹ŠL_ýt¨8Ó*díÙÆ6Û|ç”[õÏ.Ç¥£³á\S8º|_*›ê†±ù¤}´[4Þ=Ñ‹Å]û_Ö«t=Y‹^‹Z­Š ‚ *aRQëDkÕ:á\m­ÓýŸ$  íûž>çûþð
+X;¶Ò¤\¼9.¢ yô/ïb
+ðÜÆk­¿Ù÷÷Ƹ³„Mã£äèKvþUÝjĺ—û)9Öî„°iƒÞÝæfÁg­7í–ÕóiÑüìÿîµ›{¹þòÍs-š?êËÒ¹t£Ï­;Òëmxʚǡ¿ÝôzÈzs0îÄÑnu¨nY1žhÛÆÕˆöÝ´–údGJ•ü9d,Õ£cy'6,ßÔ<.`áþZÝ¿t¬õ‚MÓt9Ö÷ê\OþgÄ® ¼. ;ì ç­ã\‹ÿdõ'ÅõébÂs­Òç`t.AÿmýØÃ6ÿfúêjaw¤'×û CêêAF™?ªÌdùväÒÖâMÆ3}Pœ>ªó¸HËÓ©ú…ðÖ@ï¾gÔN§™ŸÇ(o•ï{Šž3áj„4-Æ`ï 7W"âËc%e¾« 5%Ó§ïhØ\¿¦Œ˜|VÊáÏ
+Í¥Š<2ÂHÚÒyŸ»
+µf²¿áŸV¹j¡Ãm{ƒ Ì k„:Ú8jkã&8kAž5ÜBr~ž6eˆ§f¤Û"P†v»«>1BX<ƹ hE•¥ç_w¬<•õ=i‘^ó ›*jî,Ôˆ8¯ÎöTÙ$üWH4¶hl»áAÀ{Æ(V¥ìõî—ýí;ESÎÙýâ¥2LŸ{îÉ×"#îÓÁ‹iˆÐçÃÆ!ÏÆ9÷|õÌ»¯¥ù§ÉñjXºƒñ?¨#Í2Å]lè î,‡[
+‡ê‡k9váMü(2€½à×ñrDgdÂÙ,»¸"š®à#43ӪǾêЃ”ê•ax²ëÛñø1V‹ÿÝh™0ïØLŽM4 Ý…õ¥ð€Ðµ^q0ZLx~Ð[c¿q*æŸaattö1@.Ì>B‡ýA ܆qq ·@¾67Ó­êxêˆCrüAØ“—t[lÞÎH#‚ºÆdÃ,=e9•Ð²C胈˜•>ZëošwÞh€Ÿ€‡+Òé
+‡t#1«BY”P¶‡’éÎêz(·;‚oë3ïÂ
+\;7 ê(u†],gùoÍ€Ô³/Ý„Ýi³ÂJÝ[DŽÉq'À½ñŽ¾[ä=W÷à"™êÝ2ò“™ÄØlþ¬£ÐfQâeùÊùj¥´ã´úedíî?›ùm
+³"˜É=²[nV@“Œ¸—KŸK¬üŒ
+kx*y¼ò§Ïú³:âcìFŽÎo:wÇÿS
+‘0&‹^Ü–üˆ3ßFšüS'HÖYlHdªÐZ“1™½å˜ù©Å…ÔIÆJH¦Äˆ±{¬›9Eóg'Ä,iáÛAËi°€´8{XNRy‹Æct<Mh„x”Lt“è ­È·Œh®—
+‹IÒé­ß(rGÞ3I5gbÜŒáXDƒ‚*jÃ؉b2ƒ˜,ºPûðx‘ÝÇKékÔb$”KC1É@ŽarN ý3‡… a³_¾Û"Ø©‰F
+é1Ɖ{çb]„ÝßJÎr¶{É“Ñ,$ËTÍeîs¥JhÝs,´3ð%n,†ªðpKÂQx40Ѓ rü"¡’HYlç/4 tTòœð¡—³"˜ú•nÜ7/ª‘ø™HßXÀòhÏ”K{-O÷Yúšñ9j1Ü&r“ŒëeG"t Š+g‹²%,¡D@oa3 ¥lm¦`èÊl²Ÿ–aÐIª1Ƶ—3ÅLxK&ˆ´ù¸3)yK”Cþ¶ÕŽlÏMìñ=BíðPbúåÙç[ÜH\"‰9]hˆÚi\‹¨ÇG0j¸xÔVåàò²qP
+Ö &0`Ó2е¨O, ¨G ËÓlMB4~b ~à.HÕÐpƒÂ颊òœ’
+—•zmáG‹O§–Y^©=¢©±o;n„çÜ¢Äï,QSÍ4'Ï©øy0ô' È-Š¨È@õíC-˜„"ÿû"|g¸ÎÞZ¦a™à­b/ÃKR¬ŽÕE™D˜í%ç/Ä[[ÿ_D«\—¹çhíK]Ö¬•8ÿ‹ÇˆDÁ1~ïñr7=âºTŠˆá2omòKg"÷ᒫ†D>âDq Ä2ùBEÎ `q#Ùe½µe¢@É Úã¡oͤéìOü ©š‘ûê¯ÓÐè­·¥ÃýàTüwv÷=KÈžÒagc5êÛ•ªþ±uú?©¯}«5uc^©º;…˱qêÄFšÎZI“Kœ@+OÁMnô¿ Òp¡(âFÐ’sé°‡2¾ƒüõ´Ú@•Èªèb6Mª‰øZtïÊépáçöª1ô櫵!S"‰æµø‰²vçùRƒÙÆE1Lå6‹°£Æhb Û;ËS%i˜=>ÄõIK4DI…¢â„A\æ¹"/N»¤6pHâ^ û 
+.—‡áìE"ÅTRœh ¨Un2C¿¦XGLüàuĽÊØçÜøñB"ã?6"òh H™«’ºgöÅð—9ç| °v¢d›á\:U©ºsyº‡€xq¾#“ð‹dŒTŽ i¢s& ¦°SÈÌ’§ÜàK½™:Ñ——9Ìs>5(mDÆKƒT†,ýM‡ŠÌE/={ÈÀÍ2U¤w¬/}Þ¨gB§AÜv‹ ºvR+'ÿüH&rè3ƒ‹WwDUwÀ‚;Pÿ¸Ýu‹Ÿà„ÝFŸ©æ}””ͧ§} 9>6£Ó1¤ê¬ ¯³ö?A#­`RŽ°ô â_iÐŽ>RQg4ž¾HFÜ)ðƒÛ÷”óµ)Ò4ro`Šº€økKNX °’b³„³§râî‡Qa¿z  ›©ûÆ£6Š±Ke`I|Ýìó>HÓ
+íJ}³1lè÷üDï¬6¼³ryV¹¨hRç½ý$T.xÌ/*Ç[ízvúÜ|½) ¾^Õ÷ࣼ°hnNy¯Ïÿ×<ÒùûQõ<#CX®/Nö÷ëg'Õ«Ic8ÜqÂacØUÊ‘>oñÜ4 »ñ}ý´mÇü¸x¸v“ý«_æ®Nƒ·Ù¸#ê2wZ“i+{ô“®=7µ¯ýÌòûý.>—ù±Röô|í иñz8OÏKÖã«3™‚òå±=OÐ+9£´Æ¾Ñ—L»[(îÿ<¶=tJ Ùoa8™}*¯—Žw«wx7˾]² }¹¯¶—ÄÖÊÝÁb}¥/ïæ}kKªöÅý’Í:/1e‡£bëEùh«ñÎz²þ…mo#Œ•{c½æ6w¤Íþ÷0w³'¥ë(_«O7•pÖòãSAhVomV^w×…Ÿ‡›úA­ÆZÆòE$ë—Rù±Æʽb¥p~NÃ,¼ß—ZCi X÷÷‚~ÙžÏY{ÛÛ¼ЇüÔfšânCêøSûL_Ú=ÎZ[Mmù¥læî÷ÃY‹¿ÃXÆ&®Þj6q«Lÿ9,~ g½éìn¼W­n+Û0š‚ÍjÎw/ê%½øÎZÎ<fkÚýM+TÓ_™Ý³Ñ®`å4Nj:§A®nlh-‚õñ¥ ¼\ôC}]Xmë-ÿ0
+4ó ß »õ¯gk<È…ý ëõ×æãœõqÿ¬Wgc¢@ý-6°FÐÄ
+X0–Ø£Æh4ñ4‰(øÿowAAXïò…»¸°ïM{3ã5 ÆÚµMOAåÆþÌÖ—<Uq
+þ¾{ÿ§`qZN‹±ÎúÄðëŒ/êC§8§ÕŸWkiÊðŸ×ë﨎Xœ~ﶡÍ2a8Õ2m8ižFkóçÿè”äæÓé®wTFÌél
+•F«ð OMz´g¦ß’cB²ÚiVô¥Å# T((NPâ}ý·$OÅ>Í/h厊´ýàßj †ÑƒÛ Ó*ÖdZþð«ªVï Á~ˆ>šéTåƒ&§Ÿ…O€Õ{×X¥÷ûˆìv
+7åùðŸÌ܇V\µ9ОýIºY¦ܸ¡ßꘙif!°GÙÇÀþ˜<ê8ñÍlÙWw ëŠÂîáw1ñ—¯(ÚÌ
+
+q›÷Ʊ!'u°MKáôAî7qÒÚš‰Vø¿]¥rJy_”°œ
+^5µ2Oác±µ-b#…—dWF
+¾;g˜p#ÃÒg¤Åt³Ð 1eÍ! ø÷ ËÜxl,¥³Ö¤?[¿á­UÃ.·í=ßô~`5øãyZÏϘâ<ãt ÙˆósNõž`–×êpyœ~!,k7ÍÐ/Éدp)¨/Yî6f£€´–%lÓìCÒN'`žS6–åayÁq:I83
+,¬± «á¾<¼·Õ ,ÓW çÒÆ0kÏ8‚³U­C³Vxø×s°p‰e“†Öà –'|ˆ—1U(E·´v¨:ëq`™Ó­¡~‘Ô,Ñû¾ýѵö8²jih„ #Cƒ¹ð 44¿V†f¸tnh07côžeQ‹ªæœÌás3 ïÉmhÞâÞ$/€gx ¨uÌ u­hLåÇЀœnÃû2wϸ‚ÌÓÐ`ê6Êf Î 6H$nõYFŽch`¿âØZÀjâþ‰´ëWAœþvcú¦Ñ±‡…Là›F‰7Í*$gˆå–_V4,Cx:ó¾@’O–dzߌ‡»ñ0ú€gà¯OÖ½!GÞ´x:I›CŽ=Ç“ï}Ä÷„N;€ò_VL¾'Å-Ç~B¾mýŠI|Ù˜B°7ÜäÈŒ%ð È­³¼²Î°ãÑàé4$K/+,¡)<˜ …”úêâk›ÆµûdÈ™å⻀g©?·µ‡VX‚ÇƧÁqåóx°„.´“±° x^ mð2L,×α´•ƒä0^Ä#b „$¨É–öW@L4‡¾âÅsa*U¿ò}h
+3‹ç,y`‚J¨™(–ùÿø`£í47ÑØúOåâíéíBzTzíBì·t#¯F¹—\GšÇË¥XíAòMkm)Öî¤#a~§BÜ€ÿ(+ý¡2¹œÅ»bGúw&˜zLÝT®ÂƒH¾p•ªŸƒñù.”×—†_9M\'´ª“oZŠ6•[9ü|+¥Â ¯ÎÔ?#é­#%c·éï
+æŸ>­óÊ%Lâ–-åó-S›¡M™^å]´M 5íäüNzµ¶>çˆ&ÜLgû¦yU1Ã1‚“û·m» ð4-]ñ'³/¶Ñª}#ÁÅuâ³Ø)~+[©nڪ̈́ã'‰»÷M™?†” ë'½÷9óW›—ù‰á`_§žx:{oAÊ·ô´UÀIðÏ Wŧÿÿ*e¶ ¯b¼4|—¢­nXñœ=‰è_5[6r«=™n‡Y“´tíÀãçáÖûu©:ÉcÓ¾.²ÍûF±½é& MÝíhMB§SõÈfÊ•Êlk¯Ó$ðV@¡…‚³±P, ]4„¥¥,ÅfSÉÛ3Huv´•£hÌP¨i aÍ “£`ȉÚ9Rè¡Ù¸Õz€‡·VøŒÝÞƒ;‡V@ŸÃXùÛ—L"Tb"®[p·äU†ã|’ÄéÇ´·ïÄ uƒùwî'~ZúP¬³C73Á·À²ï_àbêp‰iîTªVjšMÆ©.ƒð ÔËÜ@tqâ§Åì7ƒu.Qz¼¬1;WÀf´´û5³î—L9^en¸î— [¥r¹µ.è¸iQ[+ﱂûÒlÔHN<oJu߆>úà
+PB÷–?¤OÛWm¹®‚à™âÅÈ…f Pž]TR½¾,]_VüÛ훨â$ðW¶co ¤ÑG_Õ#ìWe+n2À[ýµ£Ù«^6&j\~^«(;(ÕÝ%hÊn´±æ[¸iœÇ%HîøQZ€ˆfI¹û2ùjAãqÄa$ýÙú -;ðŒ«a|[fGЪ~lØ RH‡¢Î0ÕÒLq;O¯†‡©àž5vÊƽÓ
+?Ð<‚U©0³ÃÎ"i«+KßÃß¼àÄö¶ö$ï%ê(+ŠS·Æ $r¤£áÆ&Püàºà3 Pâ( bƒ®
+(ñÚFS1öÝ·n=Zµ÷Û–uNÌ0¹5Ž´@NÃ¥óœöÊ”©5é­2\¿Þ_•‘ØxM^znðÐD ·ùί„áVƒ'Û¢NšB—¸]Ô±)1®€ý”êtÜþ/À
+endstream endobj 176 0 obj <</Filter[/FlateDecode]/Length 17828>>stream
+H‰¬WYWâÌ}¿kÝ„!B2…  ai@Ú¡‘ÿÿUUBÈP_jÙm<óÙ{ŸÁ,Î$¦_Ûh±(£EZ Ñóÿÿ£Õ‹H57ÝÜd/}Õp;µMÚÑÒ
+³1¥ ªu6À˜Âû nÎØ8áF†À VC¥Ñú<€½Ñ{É,YÿèwêeZc¸ž˜›lW´~ÑÅ;ÈëÆX¹ÝÑí6øú¼@Dºÿ–¿ò±NŸ}ÑGƘÈÛÂÒ«º7{ÇK÷Y>(fNŽxËDædõ¯_$Ú4v ‘šÝô@“o\“º½‡½éᣦI«Z£
+¦ÛõŸ¯1P¯ô1øSÀl°îMÄÈŽ€[Cóg3ª¢l@/õ·z-s¡ÓX e³¯Í…Ô!3lÁb1›¬ÆMòVö€{“‡"HQ@Kj±U@¬0®Zò’BX"ÈÐ}à þ÷ý2ÊAÓî L"è¤`Úh!‚°È5iÊôI‚oàI©×šõ‚°hOgŒíö¡ÃcÌŸ¿€j7miÒpp´ö®€{ÚÔëÄ[Æ¡h¬¹hl`Î[Í‹oö” ܘYT£U.¬¬Ux¼A” úlV~ñwΰ‹>+ßã²²‰’¡°K÷V>Èu€|ó ,Ú}Èʦ4uÉÁÊp6pYÙ”¡Z´Ã$Õ :î÷” ¯µ³ëeÁÊ&
+UÙ“•¡I<V6Ù;œ4KVÎ…h[VÖú®§ d4¬œ 1Žý*3‹Ÿ~<þ—ÈÑèQíÍ’adO#éC“G獅½„Jk.ø…{Á®l¾!1.¸a´Ä6šX°z¢¢€sÎiÌ5²¡ ’`Q’?±°ê9{´È…b&´PÜ#¾úŠ4ý¥ C®1ö%@ÕlÙSÚÁ¤ŠKˆQ_ƒ•>QÜpT©®2µ5ßhl¸âU-ð¦×ˆÉ'8Ku­ezÆï¢åTqù#™Ýµõ…$½T[Å
+‡JÎÖ@¿
+ çÀ€”)±IïÆ.±ùÅWÆ5Í4LÝòS÷¢ùÅm
+ÃÙ\¬ænIL§hÙZðîoëÅ5Í&…S´l-ð/™Ÿ¸Z«“Ö
+’´fíûlkº©­…°°†y7ñHëaTi ­'S¾srÝ€jÍÿ{•ûRn>(BM‡’¡ýQ¢ëÏ>äu•üÈ3‹·ÅÀ¹rzÑŒ•sÐt…áF§^G.©ÍЭµ¸û%7ê‰k€‰tú†kã-7ºY‡l¤’ÛöÍskÜÃÕ§ÊiD`]¹fjŒ]9GD#0¢ÿÙ¡`u°zï’Z4Ö\Â:c¤ ëÚ±l0¾û±¢å"ð~S> ‰§×°:
+±­Õ m×NÑ憞¿Ö¬ݘç\²èqi7ÜÜ’Sä(DEƒ‡(˜–šm€X°£A¬­¸ý)‘s£k,Ké’›Ä<^k¶†p ÀÊŠÖÝó+y±&+ˆÖN1”ðÎê<4„³çXšø§¸…|ãH¯L}c;‘̲™[-žé¾±Ú½ÝÑA¼Á×ç
+¨Sþ;“oßɕ€ÉÝêK^‡›&àКæ FÉF*3aFk£ 24èt°æ€ìL©{¬½_Õ‰y€àb tP:.¹–ØF#W¤ÜûPʵ[çTÎHpFäO|FAø-S”åâ=mW(Ð'Ím÷l®%0Ú?^-Ú~÷ìØà­Ž$ʉ•;P°r“ÿX¯ÖµÄ‘ ú,L@@D”{ @tÅ뀺¢#¼ÿvw’tº“NàO¾™Ý¡ªºêœS§~÷×¹ÔƇj¹t.õ°©ªn}ùNÁtäl^£œ‚ßm§×ÕP̧Y§Ô¢Lé»íœ¹õœE¡´Ï¬“à‘DZæ€ÚQ¨Iåal­ˆ‹ÇZ0QhD¡FZ裨<uq¦#ùLÃáÉ"yÖqÚ¦<z¡¹=-lo4Så§ûäÖ+C„ùwÆWY¤ša
+¥°WË•`ø4rmPSH¶…ÄÛR-Sx»PákhÔõËÛ…J’M¼§¤ä­®ÐNå»Âþx«"±¡P×oKƒBŒ
+F†#ùn( okM5©»oAM&" 
+—••·è(ô,kgÞZ ”ŠQw?¼g/OHC³ö52ŠÛ6GVÌ|Œ£$¦tGŒá5ŽU`tC%/~ß°í]èNV†‚!}¸{-øVÇÙëû­=Ásf<€Àšb$‹À[ 6b‡¾^h5PÎ*ãÅîz
+ihÀm4èí0½ÀÓF€µÅ·vL¡ m
+_㵕aH¿[‹§§qnå|4NÝÊ ÚÀóT°­dêVÎGE×y•ÅÙzLþÇåãè£o¾×t ‹gŠM>*í'ä6^ÊŒ·¥'A¿X/8ÐÃŽyßX8ZGG%I½d’Ó)#gC~s–‘F”5a«NSÎ7“Ã…à¡«E>š ªHƒ#ùñsT0ü—õ¹ô/¡I ,žnÕñº.¡ú~ðUp…Nª:Wj§Í…¬ªËjñ¬ùܶ˜%T§ 5Í™e½×'óUÕÑÔu™]w·
+ëR œ<Êo}9¼ÊýDI¿WÔÛ:·Êý)õL)Ê>_[õ×ãrö$†²zÙfÅ Çm§åÊM|1º·€#¢<;¬€æšÅ|í~l4ƒÿ®üÈ‘£"—={Úw÷•þýÍÄF‰ôåÛVHƒø»yÎK Š ñðʳº,9íÅ =
+OHâí 7ijuÐf
+w7`(Ph½&Þê¸ïFí­s­zc³Ùð8sU¿û»œbÃÈŒ>.Ͻ¢uËVC@Ä¢¥û/÷h`^…”g´,Ç-³› )Ô4kßE†h™?ò³Ç3ÃU†¥iYŽ¿œ}L½¢)bÞ³°\¤9¸þïêų¶K!Zä_úü‰¥i-ž J v¢¸J}Uú•ú_­¨ÚLÝÒyÍÍ$ _B¤ŸApýåïæi~`çbö/ßú-ý,· Ý(`Ñ¥Áÿ½Ë”/Žœþß"Y¹>/\)ýÉã³(U'ïr¢7ˆ7BG÷¢Å˜Mù‚ë¥qÝÛÞ7D§€Ä&ïm¹¯Ê­iˆM‡ÿ¦Ý72Á“ÉŽÝj3dÐ@Q<ˆÖ^ÑpkÒÉ“¬ ²ƒ~‰¯W)2•±;Ävñ‘£ÁP¿¤PºòmÅP˜éÑk\n$óuls˜:HO½@!´·Î a,RÀsøÑî;«á䣘á„p‹‚4[œ·(Žø^gŸ³á.˜Ûž¸Û¹@–êÞ„åU #Å\ø¥L–˜Fd³íj×4×p6ÈZ[NÁñq”t
+J‡•ód@”¬:è\ªzwÖÞWç.37´ÑêMÓ¢YàJíÑ.¢•ÓÇP´´X¤\¦uØ´©ðRw¿‚Ø*¬Kõ‡•B
+ҘѴϬ“ài' ÐåùYËëð‰×ãÚGP;Ò¹7>vˆ‚íúAã>Ø~z+¯uRuˆ7’zÉt™)*¯…€ÃúdÂQ7Hc½Ÿc<ÒÊ ã §º8Ij½Þ4[÷•áÓ%ëY“‰x­ù)ËY“C
+XÇ(K®ø*‹³õ ‰<–Eì^ÂkÓÅ,Llžéý/Ú7Û~~éÙ6=„Îæ%<ÚxG¨&Ì&/Ôæªb6š†~ô;‚@$ÊKøŠ¹Ã†¹%ÍÍ2Å>4g<¤[ƒ¬­÷ƒ¯Ê€+ôÁsÅpåæ+ôÛ¨çzI+úæ9¢ l /빕I»VR Ô<·öU Wu¯é¦Yî: 6À«@£º3{‡ ”ewÓ£áÏ­¼}&ñ­éT¼Ü,Û0¶ÕEÐ?iö4ŒR¾{E­!Íß0r¿L–ÖÆ ”F ñ$R‚¡ ûAL£йÌ0çèCئŠék÷èܯôšî=44Í*D.=tc MsXy]í±‡Pl ÉõC‹"(¸¦¦­‹,W+Ó·.n|…Dë—ªŽ>BÞ-5¶7x0y6M‚U&€±/i0®K˜Æ³U¬V¹Iðɲ9ÂH†Ì{3]ö¯Xï+ê‰ pÀ$X„Ó
+‹b?š´%$tXýl°–C½o` Çí¨(EÐ;r:l²¦YË6uúâ[-qï rCvsíXÒ€2Êlíƽë‘™xoJ•[Ó‚
+…ˆÐ—gnŽÛH‡Ñ 7W\¨&Íò®‰æƒNk;{ ›ŸËÈ„G±Æ.·¯c¬H§Ý ÷"Vÿs¥”}||[
+ѳHâ/ºÅ¨Ê6›ÐÍã ½ˆ ñ¥f¢Ò~ì=”KÒ×±áÉ?^îÇøhÝ•YЪßb‘=AnúÖn”àƒï˜ >DÍ¿æøâ¦L£‡½Qì†úŽØåñÍkkƒ#¦$nRBË«jVÆw{îÍ- ÂRœa„¨›-“gØ\š4;5ÏìíúæÜ« y nk8"?Î9˜ÜýèÜ §š›¸^Ы‰Ù¼Ú²[e³Í[ÙŸ„S?!BÉÔöc‡H:táÊü¸ý¡‚¾ßlèãþzŠb¥ïǺÛLL¨òot*è³g¹¶Ší—kª –ú£Ýe3Q[˜V÷gpeþkñÝñúÎÏ∗w4wÅö•v}Ó¸ÀŸêáôe¥=hòš‚r%¿¦€¶$­ULˆ ³
+~‘ºœÂhØügÖ) Í}ø‡Þ3¡€Î؆[³ü§à»ˆõBÝØÖÌ4 ü&¹ÌŽÓÝ°¹Ù€•£úM„F40H"ÈŒ‚V¨k
+h?ÓÆ \âå³õ¥›
+ ›{"¨rAGÐ&-äR@(š V†óËu›•;–ÌÒ+_P²áæÈ>‹÷O„tÕ ämAÿ +¿-¬|1 ›ÿ`ekà¡X Z»î/XùüMnƒÖþ„•;–¬çf„; ý@BͱòÅP8VÚY.ÍÊG¼íù7¬l˜<°ò…½}¥ý'+Ã=$Ç]ce„°v¤dèæ׬ }5Ö÷òõŠrã£Ê>êðÑØšìXÖ‰&ß7÷M^³‡ÜÜ1ÙÅþfƒÛ)íb‰ûå×Òý6V͘#é“´Ü xf7+no1ÅùÁ Ó*›
+Ø(Õ³iq¦làÛ*÷Ç?ë²w§¿ÌÄZñö ›_˜\{4TràÙDé­…Á{À§˜®È¡‚×°¼#é¥ÁÅ w䟄d¬Kª*uköÕg&Žï@;™ˆ]žêM¹PCÓ"y'iÐtó IH¹ó-’ê×K«»ºI¹ó-ÊÍPô0&)×j&à+¤{Ø=¯ÖþýÉ/z¼f™ih£Zo'ã }:+oƺ6G“owµÞÏ&TáУª”êÇpht°6ØSxû<…2¥`®8…%ø&•Ï;¨÷Êt¹ì[èµ®õZëîkn´¹ß·»–EÏUÁÖõAC£ã8“÷ó…9צAõ+êÒûùb‡ŒS+…¬éDbÝZÌ”¨Ò÷m}¥Vó¡ÒÎl @±ÅA“W …ÌÓ<·|î±{9øí¾Ñ
+m¿Ò¤?g»ø{¼C.H_J¯7Ç3èf{¬jäþ2½‘<¯£¨®Ó«‚“4L׋í /Õç‰%*[h]ÑB¼Ü¬˜} `x(˜s^Ìct¤˜u±Óˆ
+ iÔ{ ë\y@‘ÅŸ@±õ,€òg·*øl*ßTi¨>w%Ð|¨ ¹öh •rÏ@ÛY°ƒvô„ntýÅë+¾É諹#¥o"ëÆʺ†&“:ƒ\Ñ+0#Ìù1ÏÅË–;$:ø g­ÔKqÛL÷*:ÐzÁÛÅHÈRJ÷Ü®’’Ããùè€AàbÐ _òvŸu=@–\1¯»ŠŒ9¶ù>•Ò¾¨å\ ¶ôÕGÚ
+èü›•6¹”úzָȢÉ~oí“l*¨úsÐ Ç–òwõ”dë™V˜ïå;ONêE:}¹×–sè95W4êŽ\…Ù
+GÁâ½)~ŒJ-a:àc{!{Päzo$0‡Ñž»A$°Ã/ÖÆç¡_*¾Ã’}óœÞ‰+Æ·è¡3vq#Õ•&YûYl&
+’/bßÂy×Ñ4ç]õY%lää*燩šÅÓŠöÆ'¬ ÓK.ú¬PïUñ¤4µ8TbÖ(úk)|½ÆŸ RáBèò—Òq?MÄ‘«n5J ƒéûcÕ±ª6tI”}£ÉTŠ±ÃÃpή‰p
+å]ŠLg‘ ÙÂE4bŒÀý@|g …Æ/­d¼ÿ&rlzƒSÕµ±ß?]C}£HOO3qåÄQ %?ŠR©*f¹œ±ù„‰)ˤ8jô6ì 4­B4ƒcCXxÍ-Æ,"«Új=hªNïx‘±áŠô9lË='VÜòß!©i¦(»1wyÿ¯¿ *°K©Ï¥¼?«ÃR¥ÑÎô³iŸ‹™eÙ&÷òIȶ+Ât†»%!S)?9³ò%©lC3-5ÕZ
+1oû¤¡»ñ
+M¶°ûk4«5~–t.Ï„IæSWÚYGÐ%W´$¯V«saÚï“|©¢‘R*U Ã¹´;­ÈÙJHÁ(ǯϠ5˜<E6cÊ{“l\14ÇŸŒÚ¨n®Ù
+3Cº¹êæ™ê—ìa6…ð
+a‚o«¬x$–†¨>òJzžq‡'›SS®ØñÎÕÏ…$/-·!ý»‰øþfü…˜^NäñÊK/€“ü,²€æ}"!ˆŠ>ì@nlO˜µpxiÀí«œæ»çc˜JL˜dÕÜCO ´Þ¸`!Ñ
+w 2Æ×™\š±¯vE°Kd’áqô×>){¾ä³ €~XÚÍŽé¢EÊi§_¬V$f` †«whž¦Y{W½=q èµ²Ÿ¶ÎTjK©QZæz–“„
+ª ƒ0(\äµî¦ûÚ-ZÿB;  íiáþzظ‘&ºë ÉÞ)]ÙoT­¡)Æ&ðš ËÉŸ(z¬Tªaá¦^fÆ<+£j*êdäÊɸ?Šè—±X£¶ÓÙêBÊo m=ÐögŸØó´4Ã)ðœ=™&½U͉ÆCb­[ž­‡aƒÃ}ÕÉâs*\0Í Ýa΢‹Äé#¾Á&OpFÙâ;y§3YÊ„…Ú(©äçj—CƉûpeðÌIŒý K~»uµ¸ŽÖž.Òyašåh]Àž» ~TɨÇ÷b¬\†ø…ÎØ2£«ôGêâ»ú u™>„)¾ÎÙlv¼eŠ¬¯Å–Z[Ó6tiG›cæ&µ%ô÷ó¬Cg<ø–dKÆ„è$®;€9ëpÓnÆwN „€
+ÜÊw&ÞF^]0ö™}L诼OT˜ ¡E2n´cu¼ Qgª@¯Ã.ä
+Ð73dxK&~8¨Y€ºÖifÕ–6çzݸ…Yr6à´DÀʉ±Î)YyLsóÜÔ–ô£KÃ2tG»dV8£Å7öèFû h·?ƒ;éº:IuèòtnCí‰*½\[ ×jÝ€®¸Q·˜è`58îüÉ“mÉ#=™•£YµåÙwF}s‹qA]Å°UdönöDmi3…\gÔ5Ãþô„Šl|&0ÈØNíÌ-°×zÿb–qÆÊäüÉÂ÷^
+Ùn@úñï¢ðáŒ&¹~R®ž˜>!§Ò}"±êíxi„ƒL‹sºú¦¢ùæØ؜¥3¨ˆvò8]Q>*ß«êeê¼y§Â>Xµ«@lé (y°ÏëÊL`¥2 ohï¢7{——%âѪ†´Ã†Ú@€#gœP®«7£Œ^4ŒÚ±D{uDßEN‰{9Å-'4x<’ÖiµùPN(Ì1-Ê8­cÏܹ*BõÝÍ©a~vUôC9!²y$­ŸåÄèÔiø‚”ÿ.ª:wsjsB®óFZØÈR^ÞH‹ýaNæ¡´ɉ;ç„úæOQå°ÜÊIë›cZþöÊ÷z#-þפ
+[½Õ_ŸÈ†TËþúÕ¹ªî†óøªo„åÙÜ´{tÉé0/œûMô‹fœ‘U-¯y
+o³‚ÐëȲ3.v¶ú¹ÍIÿD%f%íPÍC§† ABØ £zÜ'Ì Ô\‰æ] ×d…Æ(’ªoáçÝÑ_KóèM‚`ÍŒ´ºW¸‚0A Eí~ZW¸‚0ø´öA+Ùx’½¼!´žJûù´Q¥Bî ‡ Uìlî@‹S*¼~ÂÕ‰Ól­€÷.´WÐ:âj0ÔEa~¤Ï_@ë
+WÿBÀZa‹Ó·¡E¨Ow)+ aºÓ{ÍZ~ª„aÆÐJ°[ù´|® ‹ŸquÐíô8kݧ¬ Bkg2„žä*£[ÐÒULb†ÕE }}n³#Ÿ+T™Òs…5q+YÍŠÅõ7Xö7{˜¾Ã²'Ší=N±—óÍc­ðmŠí*£ìÁ@Ýð?To¤7ßdY|Ú£ðR,„ù.Ë>J±og\A˜ï²ìo(özĽɲý_@w<ôÇ Ê74‰©+\]VÓû ´ìlkÜ3¤XÄFÐò¹zA±1´FŸߥØ[€þ)´–ª!e¡jþ„µîS
+ó´¤Á¯¡u…«k@ÿ€µèû3‡v(RÏÿwæÐp…Xà -±çqCë õF/lDY Õvá´à‘oB«9W ¡õäþ£½Êše–èûDÌ»]@EqDv÷QlÜm7÷]#¾§ûÛohoã̯ïÌ‹ÑteVåÉsN®^q…jóÃ`ÙéýÁ™ÃÆ•c9Œéß›9ÞAà_Aë—3Ç]ʲ½À;þø$kÙäq—²ò„Š<ô_ž9l\¡Óü6ku.?7†¿VCó·fcþŠ«»€ÆK¿€Vôù´¢§þ=Êz |üj°w %’ùÑ£ò¯ õW7üIhMfÀ\½;Íÿ-—Oîk?¥,#—ˆÝ‡Öd~ü$´>àê. ? -Ëø)e½ôŸgïQ£î@ëž×úÝqöÞ,ûŽÓ>;ΔþµÑ‚0ŸgÏhq{lºDæv¶ÎpçÚ@ÜT¹DTìD
+¨–QqU!Î<Sì·ã‘r3Ö†q ÕÅ©J¥™T]þ'$p1¯\*¸ôë_Ek•ÏôcõH`EûÈHIØäÚÙÌÉÉ7ÒbŽ8Ë¿Ëæ=Ñ#lvåäÖZ«£aõ ÔõÀH.b8¥«C
+@v0„dpœà:„ˆ‚“-]ce‹ìú%+3¯IóøPÏMÙ aØ ÅlÅV·ÓGÕÐtÙCÿTTÆ£ü3€“<K¹ŽðXê‹5{ pœâA
+z³
+[t‡èmÿ9ó\RÂèÒf6’ êèAÈî‘Ñ3#¤jžY›)ŠFKÍžr5uÔì
+O„»"U2[‰4k!Po£|5­Úíe`SLr;ëÇ”‰Ö®8(…¨,ÕÎIJ=~¾±[g-M[Á–li§!bþ†ªDŽn98> ,»„³Þôlëk@b L6OÙ¸£¨1W<…(«BÆ¢å³: 6Ó†KåÚ$èõ¼ý·e¤-ˆ^¹=Ê$…ªdö¹¨Îàñ6ðÿŽªJsº´¿zõ9˜Su>½NQLZ.aFö'‚.l[è?Šv{zt]šÍN®±t¡Ï#œn®Ë¹wMÙÓág3VÙ\/§ñ^É^KŸ1‹ôb´àE»vÄ—ÍÅ®—óäúŽ¬éJâu7ŠT{¼oÚ•F¸}’Í6{y‰«hÆàr%/ä”÷!
+ÑSÐJ¾¹â¹ÍZ.âMÕ¨ó6ú8ÜCÅ\ÆU?R•½}8ÈÝ{°…€:ïÓèÒTa=ÞÜV0Ž¹ H+º³3Â÷*¯b¥\ÊáØhÈïq{'ß)àCý àÓüÏfIÕC¨6 œ[Ä­º´XRa`¾Öå-¡"ëMDz‹K7²Á<ŠÆNºÍ9ò,ê½2Û"}ç›@¼b§Ö’inçr(Dµ ÏA½÷t“x¨8¢cc.²BïY 
+a¢ÅèfŽ6ÒèR].LÙ#"€…£»’‹%u¯¯bÛ»§iÆh¾N¥,*³œlµ¿c¬|Xªä¾‚
+‰¾K¦va ÌøìBOÚ ³Vß®úÊÄëGÔ‰|U Χńê7ÄêŇ!ÂÌËÖà„«ž ?è·l‘ë·Äànväu·‹f#è †#y÷IG*
+;{D‚Qä™ÝÁ a@Â:˜P_ïýŽÿŠ ÅZØ*mìŒøþ5’Q_¦VLt_K°m
+—^)ª)æu|nÓ:—Îu¸]c†úñ·B j"رœ×ô/RuÂ\)á…FȪbÉj%„¯½Ô­°2¯:¨Ép¨MM‚>ý‡ûú…¦èÔ·d‚N| ×/kóX=.f‹í·à×/Ì×/a¡‰4¶Óz4MÝüç,ïŒËÆÜž¿¥¿……'©PH»©‰þ¥B¸ùÞ~€Ù°T\‹
+üA`ñluÄÑ­9eÌÿ²^ÝÉ*Aø·Ø*b‰b£K좉=¯]1vôÿßÙÅr“¿x”•ÙÙ™§Ð¶þÕÖ©—?8$“§MÞ<»ËS­È²…
+2y¤cR轚‘Ȫñí1P̧MRÌ¡ž·‹ ßþ‘O
+[D»¡ÏŽ6ßcغxÆ3ä-“-_¦ÛqÒü¸Z~;oä9]ÐÿÙJcì,Ÿc+Š:ËçØJ4ž†Îò9¶ÆÐY>ÇV¢0t–ϱ•úx8ËçØJ47†Îò9¶C§‘³|Ž­Ä²ÄÈY>ÇV¢0¿ñ³´•¸ÓŒœåsl%Cgù[‰•©‘³|Ž­D mè,Ÿc+1­9ËçØÊGÆñ|Ómå±µB„‚‰K$¢šn®¢z¸µVD]]µ>
+‰ý]ËÆËY0.
+j­ÚÅÆǵž¢MoÏ!k&W
+º’Xx½V½w*Œ/Á-:1÷&„¹q»ñÉ"3•˜)ÓÑJ¿Zn0ûö?ìvcZØPžøcz`¶Ì.Ú8zj Õ„hͱ²W ­@›$µž]”þ±åE½ïD½lÖE5÷mZùãÿßR7˜ü°JßšN~|ècƒÉ-K©0„¡¸F3/|£1ö®žTÙ¾DRF;ÝÝ;Rbn‹ã8ø½Ö¶®!ìæ´ãNOÙ«´êI5×>Tª”lQ2>Ü‘HreAš™N““ïä©¿bŽM² ™&3`WiÓZxmG,~59p%]uzåYKãÄgr®€ØÕ2$EìL¨h@?îÈ)FÝÑá!:@Ïñ/» ¬rEûg“ÙN¦+Ô£<ºûùCÑñ>ëj8ttCPNÇLO‘ËÏÚd [˜qaW‡9OÖš ‡6¦Ðé¤,Ó¶0(P8˶%(ýu¡5óŒSsŒ¦ße5k’«¬Òt‘;ÔÅÖÈÖ¼<çyy—ùÞ'ç GÁëýüŠ›õ
+Ne;=à¶æd/OY“=ÁwÐ0²µäÒHTlM´«:óÂÄ!€Ø³žl¸1ˆ~ AnFΤ€fTf«³âUµ>`jJ´* ®Q…¼m´'Ûc2ïÃ*NJ,¨Šs'|›‰žYCÖ·Ÿ'ˆAÐ ,žïÕïa™ûdE(•c/êýåï‹/ æCuTäÍ7åMA1FH&ñYêHn{Éÿ  ¤Óæ S\äPQ
+Ìî0|Áì²
+[«Ùrx /€Nä*\Ä&™âªo§ÕVLô”JÚ»2c]´ÇÛøÔd›‹ÃfâYÿZ, `Vý*A§ðëL½b3£?,1SøÕÔ›x½ ¿yýZ
+PlÄŠ"a©Ÿ»žÄ¶
+ø.9á»ùqZ½âÃœH‰‹”æa ã§$n@ S±Òû´$}tÖ 9šÄŠ.’‹‘ƒ¬ƒã}Ø›”Ã0P‹³inÚl)/·¾EÍ%Êç)"¾‰wÿY€)¼ë@ßœy=ÅuM˜¬‹îë~ i¡x5Éy¾G Ïܶ„i}cA²·… Õ)×MU[U^/mãNÔ΃º.”{u=¡Àÿ^7¸[×´SØ=¨«~®+†Îï¥õ$âËcZ™ý˘ Þ÷/«ña©pÌ)ëßm²ëœÐxêi²Úã´Ú»ààáuë•xœÓâ µÀ¯Ò:æD—÷¿Êé6?Më9¥2ïkcøND¦ß¡@·wÜ÷·#
+‘ÚIü`
+Žà¹ž2…§Öh7}u§¡ŸB077|l‡­5þck¡M»—MqѾ×_[Öµ{}l£ž‘ïõ¾Ã›M¯$ðèÈo´o³ýh߉q²úiŒó}ÂÜêa¾Œ.L×öÅLÝ\ÍmÄ‚Ày{XÔ`ÅGûâAÄb …^H 
+x³­ÙjË´ç¨^aŽé»?ºÈû?tèLoijàW™xö³/[|¶.«Ô:q@Æu?¨û¼Trý‰¿AÊ3˜Âº¥˜
+ãÝŽ`—ë¼ê[ô |g23s »€0¼úíÕµ¤:¶CßoÕüƒÉÑÆ'B·3±OCC“ih‚ÁM°»fÎË|ûh›Øgέº/ª\¶¼-ioIKKŸ
+¦iT›½N~ÈBÚ±Sz§W†õ½ LMµj<^¡'åEš¤>B ×cÁPeïSrNÔ Ö¢pJó´>Ÿ‡’ÈÙPêšK.D”¤=ñ4éZ\ØBÏŠ%VrkóÐlБm›¨gÖK-ü0ZLñ• ÃK6¢)õÎí†7¦“W H4š[‹h‚ý”òŽHù{ESd¦ÀŽprµÄM¼+$¤zKÙîc8ÒöNÒ[—U6‡\DiÊaNɺ©¡·§”fâÃWØÈ4+óã…‹´ôïóÒWÓ*‹b
+†ÆhH¨~ÝÐéDòá8èÐd#1JæëüH­xœUQ¦ÝýÍ×%ûÁý¢q(û‘ƒ° ›ÒÑ3býÉ‚‚F¼®5?—¹5Ð_ÁFøªVž¢FA/Žï°‡È­?âQv ]¹çʯÞºhá4ÏA>/QfKÔ »0NÆêJ³_"¯7!†o»–1*×—ò«ªôµZ%й¿@±9¿[‘U¿Î‹q< ½þ.Ëp_«lS?
+-±À§ _ОºöÞºRÎùHèóÍAô¡P[Z6ÚºZE¹´ÛÊv$æ®Ýà,—"¥Ñ—>këìC¥}O­;¹™ÜVßMe+„„2QÖ¥üîI=£€…¼5úÊ–T®»©,ækø¥gp™((ªôµL0ÁS³z%AÒxŠ¬vª*/]¶aÄk%‘¬²‘ÈË:>HË "3pTª´ä:äZÚ2ùThzÛ8Ÿ/z+f󻶲¡z{?G(äascds¥[R•ˆä—¹Èþüøµ©7r–ªºh,xBM$o¿4P*Ž¬žüèeyÕg6ûg)G&
+@o¥jý£‘Œ',©Ú…>Ú]Ò*
+ ¢1åÖ±SBmŠD±IÆŽžž²Và~#ºCMr
+Mr“Pv©hÿ¬­öì´`½Ó*_‡2­áÃP)W^½˜ cUÕS'=ª®GLZ&Ÿ<Þg[®ãùtPÚÎS,BöÀ£ö6¯Ï¢IhSp­à9-œ±z.ò0š±Ò¹Ô“_Ør»NêSΙKsµO)öIAK"·Ë¨âÂ`ü5褿Ðñ/@t» º¹òðáBŸE3Ôò eÛû<‰Vz} ZâÇ$â×VŽÚ&]*vMUòǨÐÆÔŸ+¹ÝiŸôÁÒ^ê!f‹c¿,Ô.Ç·xÉ€)JýÑÕ÷ˆÅeïŸM­Z°I’—À“¾2⦀ú¶œz3¥q’w¬·Æ|$r¥ÄÀ™k „Ò”mpoð….7AÍB½¸©§ÛfæÁ1Ú“Öys{8d O=¯]†¤DùÌ:Ë*´å¡©©§¾Møé ,íUËj»>1CuóSE½-Ò‹5”–úÆEPý‚qdhév̇NSn5ZZ£øüü³J÷aòß
+w_ ûËb/ØpLb‹?àtUšg ’8ŒEB³¶gXdˆîÂúƒã³7áíóß
+?7ÿ[8.gáùÇ΀àY’F;ƒ=sãß4MŸ7Íe¯;ƒ}
+)ò‡eiž xGÎÓ$AgaõM†<ÊœÈ2w- )”eÀœ(2–
+endstream endobj 177 0 obj <</Filter[/FlateDecode]/Length 8499>>stream
+H‰ÌW]o\·} ÿÀ2PÓüþhž$(lÀ®QE!(’ì:XI… #õ¿ïÉË{÷ÊÒn‚"Q¼¸{–3Ι™kœTÆ;aev*áL”:¦(’T9†0oŽ>½?>zqþúôþá/Ÿ/>ßÝ^Ü&ì;ú8>Êâä¥øðã£/xŽ2…wYæ’¸)˜NPÆd‘­LQ|·Òz+V*cûwl£Œ>¦m
+à!+œPåïÃéñ‘?-~Á·_C’.ËûSÝ0cVå CLïŽL–:ÇùR“$îbg©?íÒü€§_Ö¯Ç6J“i —ÎÒ6 ² * Ú!‡LÓ^88µn¹â ”„Ð\…7ÒDç& ~|Ñ=aAI•ž<O@Ý­a-È͈i ¥,²B›8‘³Cö›VélVÈzÂ:%Õó’¢=k™¢«Ðþ¯ ¡«©–
+r'Î=¤kaà!¤B:´tqˆ
+Ð70— +ðìŒôê ¨T„P—™YdCJ3o§Hºíšr_GtàˆA7sgƒÔÚ¦ŠÙluÁŒeiµHP5}ö±ìr5å{*óf¶°¨T,X´|°R€ý\Ø+gÿ&)¼¿½½¸¹¾Ÿî/®>_ß>m^‚_­Bò¼R¤%T1hä?Ý-DH‹™=î9 ƒr4h]åÅÄ Î>ajd †–¾Â—˜"‡´,
+ Ú€Œ<») €˜ÎË×# ^ÿíîáíõåÝý"ÿý^‚Bò+½~{}±ýñâáþóÉDœ¼9ýþ¯õØÿxwÿ½d߉“Ó«»Ÿ¯ÏO¿ÏçˆèÝÃ×íõùF[ÆÉ zć«]†Í! snó'±ÈÄ„–ÿZœþ‡ê“–
+Ô£üÇjŒAÒá¸×^•ÇM}Œå±/Z|å…ŸP+Yivo”*›ú.+¥êt÷ûó6ø2ü¯*#^PÎô|‹v†ºˆˆs)3Ð)L):.„ZFˆmk
+rI†4‹äaÙ–ÁH¥x°õ2·eÉ;?"†Ã¨Þ*ˆÚb1l U(ƒÿ =-¨HñÖ®à–Áz®nÛÏŽnò5"‘øœQ”i*ôìm
+ži‹Ò"¶ bØ©ûë! (rlÝ…åUâøé ÅŽO­Ä +Ù„eË ÑŠAŠÅ€@üÆ'1Riî¡Õ0çŨ[h5JÃÔ`‘G%w8“¢Ý5Úøôø5R¡¯´1I
+y*ÅÞí§\8lª¡E”§X·ÕHo7N)Wœ‚­ÅÊsOÏô¾ê,×5Ç$0¼ŸšZýðV8 Ž ã`G¥/³5´º.ÏçÐBë= ïVH –*¸öb8S-õ•5>}i J7Ö
+G½yL„·3"¥]®¥îS³ q¤bäÙeM3x?E’éŠ&>H•lº£Ë¼Ÿ2ÉtE› ¤Î‘°AŸ x…’åŠF>H¥0]Ñ)£)•cÙÑ*é•éÚÑ+Ç(v-½Ÿ3¹ì«ÛçN.£¨ü µ!ë ¼ÙIï’Œ›…“ux>_€ç ´®ÓHh¾q¡u*Âè’ÛY=tFn‡©hç8OÌ.ûÓúÇš]Œ5˜ÑRUZƨ~³
+†±^gõ¬\˜¼÷S±0¥V= BœvzV,ŒÍR¬W
+‚Œ7yªRëÄd6•‰ÁÿT$†0j‰B­%¢ž(ÌJŸÝÆé=¯’Ƶú0^ëà iõa÷BŸÙÑÝoéè¸~e%hòÙ?×÷~“Áoðÿä±*Œ¼4FÓY;=Xdº"†’™îˆ„ÁCdB–+Baø ©éŠX˜Äƒä²vÑ{´Óg‹æ™ít–:y%ëfxT&¥E'¤»p&ØE'VpFËÔ w#y^'܃‘e'ü}$þ¼Žº¿ßµæ{`ÏÕFÆTFz }C7 úTø†ô2.oT¬©v™ªMR{éR:•Êe$0$e
+h”‡ÒFÄëÄÌ0êØôœŠ¼P£tæ6 P¥\…Sê‰FŒQÏÃ`Wœa莦¾ iWCÃÜSðûPQ: 戥TCò¦0pcbŸ‡ñ‘¨@Å5Αè›Ç¦<
+’²Óé· ZŽ€iÍ
+ÛÅW‚ú¼›îeË êP®oBê Ov5æ½lÃ<0—³#`ÕßÑL§À³@?9uœ„md‚¨—¤L‡j$ŽsÝ ëuÖ[Á”žê86]^X“Ib¸à©yP ‹·–1cl-¯z =õF„3tårHÓé»´Hæq4,l_®éó‰ê±ÁU®œÉõMÔÛVϱm²EQQÚ€$åš‹ãg[DŠþŠÆØ`”MÃ*è¶w¤Qp—‹‘:‡´t\ `r
+d¹{¸¥gšHLÎË0 Z½Y†¼X‹P]MÇîw‡Œß>÷­Ç¥ÕÂk|¦Öý_ `7 ÐÚr<8Ï…ÁÓ2BT[Sº|Ú¢
+tœJ
+ÄßƘVZ?Ƥi´•áÑ´8˜( „®µ÷>gï}î¹3ç^®3œ¥Î|³×Úß^{½¶‹®«œ sO˜Ïe,¦ÿ›  %>³°!C‘çêƒ0Æà#&4ÉÀ:
+Ö°[«ûgÅB>ž‘¼B±øD*DÕ{Dx²F!c¨}5Že5 †¡®®„·…YI𴃄š†±¦AA‡ þµ ÈIT¬}@$.³4DYK'`Mƒú\V79; !>®„ic®‹\¸™Š<P=> |ò¢¨ˆ‰è8TYƒŠ‹°#Í [+‰Í¾8—"m8ÔÜ Ë+„H,}È? R[ƒã3õ
+CmMÂLM4-˜XF*㊣Y+Sjz¸+‰Sš¡¦‰¨
+~GRJ[vI¨-;êƒ
+ê•;
+KkŽ*+’Ŷâ8Hl_mZÍkß)7–FRl,դؘ^±Ñgç¡Wj¬‹’JcݘTI*Mý… Â[ ˜^LJÁM2fEm77ˆÜ‚ýöÌ,¹Ù“›ÉOÕíÞ-çªæd‘†[Ê#T­Ë$ ¶’K¨™“Mn)ŸP5'£´[Ê©¼‹n¢{άvvo/¾â¼Ðt/‹°(Ê4^¼(Áži¼vµ×x=ßÙÆ[ϤXãmÂmÙÆÛžbQ¬7o7¯×ÿ”-ž²á0Ro‘*E¨ ŒÔ¥@ÇpÈ¡P=HWbZ…j™q™Pªf`¦@F$䬋HÆEÅS iik0“E*Q¡ÚÑHwe
+uß,3ö„8ÖD ¦P'`-˜”²oºˆ:EìI6%ìlz.«›œÝÚO'`ëü6'ëîê¬ë='`]W9‘éž0žË€µ1ÂôÅ?æQü !Ãèå<ŒÑË¡àqΆ2% B`Ä
+àCÄB5A †Bƒp**â™ÀD½šg³ª®ùgÈZ:L9Š <o`L„@'‚‰€RP9Š1lI4Äq
+–qʃÎ&êÕ<›
+ÇE¡Z/à?›¯V;?=úÒèú
+¥‚ˆþ¾íûnÞɲ }r›Ðh É9ãSœÛ¼Pš™Ø<RjDl¾¡Üž¬øÄ曋•’Uq)Y5%·!¥%«f¤dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\JVÅ¥dU\n&2ßD<¹ YÝtd¾¹X)Y—›¾Ì7#·!«›y2ߤòYÍ/±F”æ‘ØÌ”æžX>sÉ­Y>?Ïvq˜G¹Å[èh$ wvv.ÌøCgV Vwuu÷ô6žžî®…®NGgWÏ¢¾»ú–åÉÀÒþ%‹{»A'UXؽhÉÀ=÷¯|pphhh•'
+¨åq;}ŒÏO{Æx:¥ÝNpwYšáNÎëóÑ^·¿Ðá|rŸ¢2Œ ëd¾@Iƒ¢Ûéõ”‹Œ; wSê—¦TM½l©ZIô€²ºTÞËËå•ESòEXL™–âU¦^,_ØR±G®(6B1’Ð]vzð¢Ô¶ ®Ðx¦79”I¦Åøø:µSð
+ïášbŽTªÄsðê÷“|ñ$« '¨#e"œµ<žâ®¤•›+ŠðšÅþƒÈ“ Ò«<9>éíÆHï7é z.9–Êí3‰KI±ø>…A·WIâuù¥ÈÐàRÒ>7CæÁW6
+àTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTèàTè<,rÔAJ<,㨳”À©ÐyþS='Á>ÂQ'‚<šêȃUŒt´Á騂=1Ò3Άžçò)c-O9÷ªC8¬³N§«®8ñˆ ôÖë ÆšC0ôzàRôFQORTC(Š¬'LF}™¥ªÚ`ª£[,­mV«µ]ÚZ--TÉP]¥Œ`¨57Y::.–ã8
+ °.Gg‡¥É\k(Ž¢Ó›ÌÍív®»'‰F4D£‘pO7goo6›ô:yc]S»#Ž #£)QL«ÅÔèˆ íMuÆ Uze±û…ôäÔÌìÜU s³3S“i¡?h·P&½ì ;¸°01=¿°¸´œÕ°¼´¸0?=!„¹ŽF¢àÐê[:»céékÙ•Õµõ ëk«+ÙkÓéXwgK½AšˆÎHZ=Âä|öúæÖöÎM ;Û[›×³ó“BÃBuÒÄk¨VWxdjaeóÆî^.wKE.··{cseaj$ìj¥jàÔ«ªk¨662:³¸ºµ{{?Ÿ¿£"Ÿß¿½»µº83aÛ¨šê‚£ÁÊES³KkÛ{ûwîi8¸»¿·½¶4›ŠrÖ†r‡8·¼¾“ËÜ áþA>·³¾<'jâÕìÆÍ\þÞíOîÁ½|îæFöª8Pîh÷ ¤¡ãÖJŽ;· #=àiÇìÀìÀìÀìÀìÀìÀìÀìÀŽÿw‡•¡#—¯äÈç Cà¬åŽ¨8·¼¾“ËÜ áþA>·³¾<'F5ŽÔìÒÚöÞþ݃{îîïm¯-ͦÊTY\ÝÚ½½ŸÏßQ‘ÏïßÞÝZ]œ°mTÁ¡«¡Z]á‘©…•Í»{¹Ü-¹ÜÞîÍ•…©‘°«•ªÑÇ1‘´8z„ÉùìõÍ­í›v¶·6¯gç'…‡…4êŽA‡¡¾¥³;–ž¾–]Y][ßа¾¶º’½6Žuw¶Ô$G•žhìàÂÂÄôüÂâÒrVÃòÒâÂüô„æ: }UÁa¢,ö`¿žœš™»ªanvfj2-ôíÊ$;tƺ¦vG0FFS¢˜V!Š©Ñ!:Ú›êŒÒÄÁDô&ss»ëî G¢Ñ Ñh$ÜÓÍÙÛ›Í&½4 8ˆ¡ÖÜdéèt¸XŽã<*€Àº–&s­AÞDƒ©Žjl±´¶Y­Öv@hkµ´4Ru&CuÑ
+¸tÕ'Àéc•¨:„ŠÑ±ÙΊýñLœ$Ã$a õñP^‹_Î$ÆI"J$ÁС·HÂM÷ÂÃ
+ð²E¤{uÀ¯Ó>&Ô6ñBÆ*›C*'I¬äß² ÑLQý3Í%’3Ômàü`
+endstream endobj 178 0 obj <</Filter[/FlateDecode]/Length 15049>>stream
+H‰ì—}lUÀ÷§©6Ì%,_¶4-l»;ß-¨]»v]:0ÛŠe)w]e]·µÛbd ˆ3þá2•1,3Gâ㶠„„@Œòp¢ã5? K`‰Æ@âóœ¯÷¼·wYœÑ¸÷¶ïÇï¾ç¼ÏyÎóÙ1ÖÓÞÖ1ÖÞF‹®ÞéÓ7#›ÚÛöÄ?Rôî‚cMYaXgN ž•TÂ…4\Qü¡ü©ã0Z÷ÙS+QÓ„«BIQ£Tðb‡‡ÂP[B$LZî#„9B“ŽpMhÑ%¯)JD¡«IÍx1ì!A¢U€
+ïTxÁˆ°Šã~\‚hQÎb)‹ì} 1#Ö á$(Í@^†$?0m¹-Ê51ÚzâU
+¡dXKóÇdMÂ\ŽH-XNhÍxcŸè¡Ò5%e#ƒB7Tíî™U~vcàéDp.MjBkZBœ ^ÆX‘Àž£6Î*s"k–éó¤5"•Š³Hjœ
+if) RÔ+(Snwuƒ­Rµ•
+)&ì µà,R·Hδ[ŸeQ/ A¹WƒáIõœ8D¹_´„$`†£ö!Çø$RL,% ¹¬Ï v×@"ʦ‚4B¬ßZx£q„j,,ʆ愩.®‚‚ÖHþÃq¹ív\˜à¨—ÈÁH´N;çõ'ñWëmÝëØåÓª“ðÌI$X 1ùcªt7Êœ›¨¯tUé¿ÉñólRB
+Ê`¢„ÔX6•+$Ä$¨XCô®@>Å|Øóóƒ „@˜åÖD“Àç0ï*Äú Äx¯¥Ü`«vÝw cÇä´¡½mViPŸmmoSE—/û€Ùxë¿~<܆ÉLâ0a)ÖpwAs)‹À›bÁWI\­‚¯Uð}¨
+¾XÕ]òÂ[å]«¼k•w­ò®U޵ʻÿgy×1¶¢wf®r|nrçt}fÑíØÚúìv9r ÷àÁ•}xÚ†§ŽÞ!96095ÑîVNl›œ^WŸ›˜AoÄ6ˆ—£p…¯‡¥H( z‹Æ¨éusˆ?îîË?‹¿øçýŸIO“BÀ—8i:œ(ýõ¹zw!9ooj[pÅŸ«®n6øz²bÑ|Ú9¸~°«vôŽÍî· tÙ{¿yô»÷¯¯ÒåcýôéÓ?|èÎA»ìÚH—ÞùàϽöû³/žüÎ}Û7ÚküøòM~ðÜïþzáí?¾|êØ¡Ý·u:\ ì8ü“WÞºø¯¾óæ‹'ÞûùšÃ‹×ì>òÔ«€ÿñι~|ôÀ(qøš›ïzàøóçþ~áí?¼ô³Çͬ_êßx]Ïø¡ÏŸ=wö…'˜ºã³‹£(+¶:~úÙ3utuY²0 N6ß÷íï½Cãâoº}Ç—öMôÌÓÔ{ë¦5ËækpÁ§8½® ^°ð“k†¯øƒv²jz+Z‰³ôÕÉ–f<€ç*©‚‡—â±èç¹±X†×´X±rçΩ¢kxrzûÄÖF:4ýʼn™¹ÄIä}S“»vMNokäý“³õ-SéùxÕC¿Œ˜úVàèlûÑË×ÀÝ=p·Üam1º™[ÛÁ¹Öý' ÌN‚w‘0uÃð=ÍÚBe…Á&PqˆÔpbTB}€UTäøCùïª^M“ë®òÞÐ@3FEÞáƲ¬>/I–JˆeñQ6‡¾/
+ Žpæ‹ FüŠ
+ªTqè&TÃN¸íQ {6\©‹‰ó—N™Á’Ý$qó&©„Á^«0¶bIG©]+=„W<ž’ÕÇŒÖ"k„]',ô‘RÅ`¤cÕŽ<ž[m}kª­Ë4¡]
+§'V¤ŒAYhw!Ð{íÇ.C=±lTùÁcjF|éóããÂ`Í‘ÃHá ¥ÆCeHf(šÛ{ˆ?†§EB¬ƒ–rã¬f˜I„0¡ÂV b0Y6;éOcÄÞÀ½ŽKsm´ê¾f¦~ÙžÐVË»¼¶Ó³(u`½Üñ‚àvAnIE¬[e]«¬û–u±v»ä…ÿ¶Š¸V×*âZE\«ˆkqÿ“"®clEïÌ\ÿäøÜäÎéúÌþ¢Û±µõÙíþrä<îÁƒ+îð´ O½Crl`rj¢;Ý­œØ69½®>;71ƒ Þl/Gá
+_V¥%,E¢ŒPaƒ7`à] ÜÝ—ñÏû£IO“BÀ—8i:œ(ýõ¹zw!)°‘¡¶WðùÈG›Ñk»:ͧ«Ö®\2ÚúFºþ+GŽÜÂÒýÂ%ìÓkÆ:~êÔ‰oíètñªÍ3<òÔ¯~ûÆK§¾·C§§ËGö~â™×ÿ|áÂ[¯Ÿytß­78Êêyõü{ï¿ÿÞŸ~yâëã=Ÿ@Jž~åüÅ>¸xþ×O~câ3Nîå›ö ¿ùË»ïþígûòú¥ ‘ÞÐ7ºûkGþò¹7_{æñƒ£KýÛ®ZLoºëОþÅÉGï]^YÅí~øÁ{;«k럛ÞHWܵús}pÁ¢Zíúùšl»zá|ø_|Ð VMoEsp&ýoö«&DÏ«
+w)‘`A\XÞ¶”LH3¹?ï{Rè|iÚ +‰m!ÄÉdˆÓNgÒtÒ´ ]ˆQQWJպЅ `]‚µh»±bAWR7…¶Ë<çÞsî9÷›)¥
+.$ùùæýž¹ï½çžß繯e, ’¯Çñ£ÔD“6°ø~ P%‡;ñÙG–¶·7‡…•­GÖ/ΣË[O¬_Ùi¸a|¶¹qùòÆÖ¥yüØÆã«6Ûú»à¨å| üÀafpúAöcU=…å|¾= ß®AÞŸΞ3ÃÅýPE§ÞK©/F–l§ìGNï\ ‡…¥¥»×Ö®>zj{g÷†ª8CVÌtu/Aò˜Pþý~8;ùA’z !ÿ‘òB›\tÇR…@b‘Ÿ †À8RD¡B„‰ ¨H…Iã´íY»ˆJâ 8fëúeѺ,‘ìrÔÇÀLÌm-q,4¼ID’w¢p4@GCEߨmHߨÓDß³¼ ¾ëYßÈ ÅÏóјí¢NßøˆCÜd`‘~`¡“GœÆó?%üyê‚>:Eûª¥Þ5Ƀ@p´„5óaÑg;уàä‘Û°èq>b=ˆL–h‹ô¬™ˆ°èApt(YôtH=êE=r„=b ‹±–DÜIT\^ÉqËq# ñ¶Ò=B&9½ CDÕVtBújË{U[æj##êî:–}È…W¿ô* ò?/ sYN)^!BáTôWDeæµÊQ¾sT0&ô˲Ÿ&¡¿Îc:&ßÑ_ŒaLÆwôc?N$o™þ«‹Ö›ÜÑßRôÑäŽþºXd6Iè/"Þ;a¿`C‰¶&5cD~Õ>D~kɹ#¿Õ°Âˆ…üÖ+ôÜ·Þµô#á¾Å+£q÷ç1÷·8ïJ‡Ù^9ò®Ü7÷#KÏ«ò{T
+— qhûd`H`å° ž+‰a?ã‘Ô®T¬FåCºÚ"†Ä, Gje„¼P㯗•‘8‘ø@ÊñšrHCbà/y‰A7´Ô„ê…3œÊðZzY-½U­):¯ØÀŧ=Ñj´Ùßê¸]±•»ö„…kºqÒË"nëõV\ï
+gPwx ÒJC*jc Hr&I°P)¡Áš9²g—H)8£n…²„s•|á2ۖшx•òò½Õ…‚JñèMjé£Jv^à‚%/äiÔu-×¾¼E@6GëæÕâ!í—c¦[tßÉg{µwâ©85ÁóÈ¿áÁM˜júþx„yD?ÿ³(¢0mhtädCCk¹ C‚ˆ©"ÖzÏN4‘rd´Ö²!*hb¬N$$HÅÝäE9x®\õD‘´+ -IM` 8W2„^‚"H9ôVáʤšš
+}×
+k¬Äs ba¨dC=¦_cÑ*$—-çÒü(+ ´Ö%µaarA)1ô*†Ðû&›õ2¤VÙ *Å3+`Ó ¿¬Ç! œL8lL…! ˆ¡°Ú‰é7&i„Fþ¬¾Ø@oB}‘¶Š˜ÈµÚꉀÀ=ZZGs¸ŒïmÛ„ÄcÊlÛ¥Q‹5Y?($.cƒ:bÉ4¾=Îè׬Nš<¸Æ¿8ùåU‹¢¨È*œìÄñå»L
+Âî—÷(JLSR}<ÛJŽ<~U‚
+"dìßÿÌ`†3÷ï ÃÂÁáÌCËü|µü3ØpÌp?¸¾E’b’[ rG iàýq0åoOÖ˜R‡ªú@“Ȫ!„h²ÔÐâ¶id·ÜštA0Q+¯ò£?Ç#!TÅ’^Vô”Þ‰x8£îW䙦Ê,âÚšÎk—Ô,¢ k4‹j”e¬,e+ÒŸÚM¨2‰§®“ë5™ë Âz@^$Ù@b‚\±ÂÝcT2d’*ÂzFƒUô¨ª*Òç¡vênÄ"‹š«óJ‰Áwí»ª54Q' I?Þ‡µ¡FrÆ}6õê¶E£IÒ±&[5_iê¶Å_/+)";q"iqÛRûJ œâ%/K«A7´Ô„êE ï‚P†×BÐËj±è­jMÑy¤cjñiO´mö·:nWÔl¥y¢iFYƺR¶bù©]Ñ„*‰ÚsH…¸r,IÜbK°P)¡Áš9²g—H)H­Ó{ú˜«+̱‚UˆW)/ß[](¨Þ¤˜>ª”aç.XòBžF]ׂpíË‹Ô"f<A¨-µæÕâ!í—c¦[tßÉ»±Â ‹þxœïøPÿöƒ‚y. Š"J… ³nÆÌòVS~¸¹‰”EŽË ìI©AXÙÈ‹$€¨r¡D¼§«&§P¿D²¬³Š\gUÓy‚”÷ª^¤0Ökk)Û¼Óô';°IT° ¢ØTj[VY‹Þ©
+­dYé€íä‘{U‘C˜­>Õ¡Z ÿf¿Úb¬¼ªð<“΃IË%üÜ/µ‡ÿÿ÷kê0S˜iÐ6(:ÁÃÌ™8Ì03‘Ø›@iPR[ÓÆ[}­¶IK|mÚ÷Æ'S›X_äÑú }°Ñq­}]ÿ™À1a€3û|ì½öZk{ío•]¯±GBݳýæz´d*´raCÿv¹¦¦"ö†1€Ø?Æ é{œ$sèFӴб&S"å+æ^†<ž’½@kòt” §–yRø ³•ÉÓÇ7]NYGŽQÄÑ0-ôd­xH]q-r?!á~¤…þùÅ5v²1Gñ^Æ<Æ»K_ÉÔ†S¡ÓÜÉ%Sá€éTÀâ]–"pÏ1ë·β
+Ò™>”ñäs¥Ó,“%Ïõ°Ÿ¿8îRÐ\Ä»“j”L)ëÖè){z—(²kõáÅáL½WêB‹Z†J/‡aiŠÀ%×õÑæ"6‡Ñ`èãžé Io›Ñ4-4¬ÉRèk©kÀ¯‚á“ú¯a¡cS¤=D1çZ¨„N‹‚®!K¦BÓw ½ç`QúW7vqfè½o®i+ZÏ´Ð5¨v‡}èd‡ƒÚ¬4¼1‘€t—(FJ”?•4+\²Î7lXax_Èø9ÊPÏ"³¢½È¾¸gzHˆg±MÓBÚL…¾–ºOœRJǤٗÎ3/9ImBBúÓ:JA”h)«çg†“÷[@Þ8! ,¨DG"ŠD®%0P2™
+´;v[ßBôôâÅ$¥›™n{wQ诫^~ì]ó,Ï÷.“Ù¶íÙ¡¯[lssgßÌÜ@§5×™žYÈvYlßèì„ú~žÆ<;à~Å_›û†DsOg²½+~ÛÝ>Ú™zltv®=ƒìbn/G`„Ûã#’{Ö)Ñ@m{2“Áý
+¿à=
+™ZBT/V:熴“Øib—jûP(æ©ÁŒ =æ+KÐ¥2K汪Úr½ˆ5f@3–:hLæ f¤ k%JKIÌ' HÆ"Ü®€!ªh>E¼H]Ö\%‡“Ù§ÓÈá‡!)–¸?x •8£€”ø
+™‚ˆPts'ô5’"Õ@بAÚ6É~lœh ².P¬ÁZF׉ʒÚOH•좇C\Ñ~ŒòƒÕñ#<§Q•§ÿ$ª<™I0îÆYE6ƒøQ M­ai
+N’éÒL'ƒÔ€°’ý¨²RR‰Kég)ÓpJà•˜¤ ×’ØOÉti¦âŠöSìÝyë¯KæM…KÖUÆŠ¬ïä-U²ÅT?±ˆê‘é²›é~ŠEZ%'Ó•^’éuDoÕ}r1ÑË,™¯ÝϱH+¤Ÿp2¹t(k
+D«.k“ö0Aþ
+fr›ÍX†yEK›²ôÏ0¥Áž@õ}KîžÇm<O'ýñ*áoú¶ö&@`‚‚¾(–Ðþq†ýng¹Ï›KþR¨JþÞµ›·n^s×êÁá½j-·>Úl7‡¶âpç¡é3S_kàYxvþ[%eû™çŸn «Ÿ;ç¿Îzâ¹\èhšÉç_¼xœ ­7_|ÎMÐÇ/\>ÌÕÑï^zv\âP´ž¼ðQŽÃòð™'O8|ààÄÌÄãV†oÙ»‡«åÀà€°þÞ³zã–kzoQõî¿£U¯/Û·Z7n¬•‹º·¥QBôú¨¸Ñ ÌŽ»3•%}Õ˜–ðS˜ˆjd ¸bdjÉÛÝ733êÇó¬ïôÜtæØÐùv{{¶óñ¹8¯t,ãÓcí&αÙöÌ™öxóÑöBÓÍšínQ¶õMMOe‚ ú
+çþþl0k”F’>Áü²¡¸Oœ“Ѐ”¦TfG„j–
+û`?‰ÿ˜PÒ8¤ÔÓÆA7T.
+ºÖ4˜Î9µšç
+Ô6L9?ì@Â1]0‘!Pð¶dP­¹áUD
+…ÙÎ@³ µõÁúŠEr§­íi'÷TÆè,…ˆÖBe)A/¤€Dš‚Nuá
+msÙ09ˆ§~·Ðƒ ódáRAA^ÛµR+ X!‰
+0Ît5i ù«T5i%ž²ÐY:JÏ*‹ûë¨í³k ™Ê¹Á{RŠ\ËÊ tˆ†»’Zý]½6À†¼ð×F‚YGW@GkŠT¹’×q%‚dØ®åE)íñê.²x¤J;¼Wd-/ dá…¤@•+¬Ž+,pEh¼MÑ< eW<RåŠ} .¬¸6†ÜÐÕ*BÙ’×±%lQ&‹g_å"ªHBx-‹ê4®ÝwéÊ~‚’ Nm¹3à^Ž1Beb‡arf,&Y KÔ/† |/r[îtÞh‡ð¼d¡všÂ¸ÚiT¡Bí\[A«¬‚(È[F`5s”Š[ ¥ræÎ-z 6¶¤zg9 X–"@JrãBG3ÉBAÅô Ó™O³K`â~÷ [{ð¨\]¹>UÐoÄTA@[à™tH`DXC1††Ã÷Ìö•@\(ŸÁJeã3ÀaBiçsY@²„W+GaJŒ‹Z@Þ´¹6˜0H¯{¥ ù9^…„¸·¬ß­óœ­ç™X‚W¤2ój‹ØDõS×Mÿa¿zc£8®8#RWQuÁ²l0>ÏÌþ›±CZÿÇ–D8€SÇrûdÌÙØç€U5$iMP©ú!ˆ¶!DUš
+¤©´T5(%Š%ªR’(”Ð’mEèŸDH R«*‘úÞÌìÌìú
+UúéîN»³¿›Ý}óæ½÷û=ÙEPŸIðX$aGÁ¸`¹"D9#yœçÇh*ÿ1Œ Pźò1 Ù$áN’
+Ô¥; b;+FW^r6×7v$§Í‰º^"¦3RPÒ&“–‚†µn8Pß*}Ué«J_UúªÒW•¾þŸôU7ÚÜ6Sî,Ž•‹S¥ü̼×"±üìN5Ú€Ç9<HJÃÓžêÚzÃÑîâd¡Å\µ&Š¥MùÙra1x [‡a„¯Ç %¹˜ËlÁªz#Ô*ømÛo:ÿPÓÕ›ÉÄ àK¤-uÒÎ|9ßâ…¾¿bùPïòe·ü¹ãÎJ7ßCšW-Eë{{²`]ÛèìܘȠëÞóƒ#?~r06.ûÕËg~và‘±~e‚6>òô‰WßýÓÅ7Nýè‰[Ä]ürÓÖ}?}õ¿öá_ÞZ<vp÷õöºwúåÛW¯ÿçß½ÿÆ©#3'á5}»Ÿ~à}tùõ_Ù7L$|×½î?þÚå^ûðÏçýÂÁ™ÁFõÆ»[Çž|íâ勯¿thßäÃßX“˜Ò¼íàñ3¯œ}ñ;Ãm1œŒ<ñßyrsvñëÚõ­½…Ö%žª÷oí[¿ÔƒË¾æÓ»+ÀËj¾ú¥Jð-0NºJã%2Î7š0Ôq7d¢¥“ñè5@ê¬õÖã˜zÍíSS“^C±´³0žE{KfÊ' Þ1Yœž.–&²xgq6¿mÒÌo…WõŠQÌÊÁ ˆI©69ÞW;àj¤Ã€7<B¼ñ[›>Oþë§]D?:sû\òsoÈx
+©‚9TiJ]ÿƹ„ "¼Ê$0”Áqi‚(ò4…¹`0y+c\^Ç’!
+ £ e7Âc¡½¶Á¿e¾îÌ
+
+T–`+„v[cM»”¬{ª€ðd7äÊ“æ«? ×Ú-ñ iጟÝN@PÙn§‡é‘T§X8×™ÚÄ+Õ&rò^­_“^ÖV'¤ªSèH_pô*έ1·.O!Çô³Hº<…•ÊS˜”§
+_[ž¨¾fQæV³pˆØ°0¸õ‰WªO<©OŒ†jãÔ–¸±ŸÎ·w´:½#Úˆô`U7gö=J™[D›#mdÖp³b§r[,G²Èm"ëcÝ^D™­ûe6­?š¶&y¾m},‡™È1æº]“uĦ@Ó›™þÍfOeÌ
+ÓÓÀƒÓ1òö0ÝXÒ ©E1c,Ý‚BÊû"ºYU‹¸Sr8vµ¡©4•` ÏŽôLp™mzb±‰rLÑ´ÀŠnÍ"êF B1£$öœGAÉTU²ˆR.Ψ*¨Ò6¹÷’G£d!B‚Ö™ÔÙ˜I¾„J2½èä*ˆC˜)UÊ–L¢\ù؆k6ª;*…úM›D‘V|ë2’ÏÐÓ ê[å©*OUyªÊSUžªòÔÂSu£Ím3åÎâX¹8UÊÏÌ{-ÈÏîTá xœÃƒä.<Mà©®­7í.NZÌU{a¢XÚ”Ÿ-fƒ·
+¢Ð3o_¹þÙgׯüþ¥ï¾.ínÚºžð‡¿}üñ?.½ò·k]Ý1¼û»G~óÖå÷ß=÷âÂp£zÛkè½½üùË¿=uôñá¦Ô*ZxöÙ§wôÔ§×Ö2V.m¡Ù7l|°£> .[•ËݳԓËï¬Y
+þ ˆ®Ò8†ƒ è&^µÑÚ™F»ÁäF<z #k½õ8¦^sûÔÔ¤×Ð_,í,ŒgÑÞÒc…™²ÁI‚wL§§‹¥‰,ÞYœÍo›4ó[áU½bÓ/Að€TF µ1ú1§æ1™ûàj\í¸ð†Gˆ7¾’hÓçIô†&?G
+­×<Xž ½†öö¶±±¹]›¦Êyœœ6„èŒ#ڊ̛撟«vCƨŒPŸDTòÒ^C„G,+ PCÙ„Bˆô'É 8f‚ʤo1@j)ª%wG›YБÌÁõÓ¸8ÖRkD‚Œ)Ë$;¤¦Å” ‰ÄBp‰&b‰€m’qÈ?¢¾âx®´Bª!äI
+0§BoÄÃZá£mÛo:ÿPÓÕ‘›ÉZ˜À#Ò–:ivk-^Hê]~+mßm·WBW6Ô­ZŠÖw ´×.AE~÷ä–\|êðá…mÌ\×Ô²ûúF_\<ùÌtwF×tÌìîô›ï]:¿øüüæz…6 í=tâÜ…®]»záìѽ÷¯–(Ë/;û_ö«.ƪ«
+Ï3 ±BJZ¬á€ —ýö 2w  J¥jÑ †;zaœa(CˆVˆDš¦IM µÖøbª­RÒ§R+øL4þµ¶>ˆ!1­JM+®µ×93M%Ô·¹39³ï7û¬½þ×·{íí÷Þ{û/W~ú­ÎÆÛ倾ô›kï¼ÿþ;×~uþ‘±ÍNïu ¯þõúõ7ÿð‹|õþµ·!º¼=täÔ“/þú?ýþòO­õ§}lß4°ïìO~~é…§¾6´®fÅçOŸ;÷̓÷Ü]·mCgz⋼iqïöûÚw7Áž¥­Ö'g{rÁâÛfƒ·ðÁ„Ø:1Šéàz{ÊW@s¶nÇ«ˆ4ÄaóZ|½P#áË‹õ}““ãEï`wâÐØh˜xhlj:á,âíñîáÃ݉M¼¿{tdÿxÚ¿Ž¨†±ü"‚ ¦f?ÖÔ ,æðí |;y¿³ÚËŠÑ…PD»o¦Ð{×Iœ³º’«‹õ÷OO†Eo_ß–NçØWvONàæº",T Z4N:)íѪ
+ïiJI¼âBàLÀÑÃti±F”zŽ…ãBz§‰÷Gf€²*« "Ât˜×¢DFÃuË2æ'šÆþŽm’Ãý”a›ÄY"”ë¹€Çñ3ÇT0ÑZxÂQ¢&ˆ(­MF:þE©mUß]¸. fb™ÎCL,VUY1T‚™–ÕŠ¨€æ‚ØW–:0 £ËÛ4:ÛRQF¤­;‚C³Úºé똢S¦·R€Ó*õGZ_z¦¥@eKSz¾§ªhÌ;In”ÓßXîg¯bFÖ7;á½ÂÐ.¨$c!xµãJmlÝ"d°A^ ´Î c`’ÚiϬUQÊé@Ëฎ-€`d)¼ÙÂpÍ‘ÏæÓT«,™gÇÑÑÀ¿rÜAùp
+«‹2GÓ1¥ÈF$øÁ'
+"Ðü[x«Â¼ Ã.!CECÅÀÂHc=ÂyÅ£Y’Dñ2úP1å1f}B@‚oPV~ Jˆ Ë£ò÷ wÅôq¾‡)] 3
+o_¶²1°Þl…µ¦ŒõÞÁ{/¯|0³âjH\5ð‹ú6éʇJâ:Ì*w {š/&h·Sû^°\þªÐtLi|F‹ÆˆHl†RUõmŒkNE1,Tž 
+UÖ]-ÙVŠ
+ =VÆÜóƒÝp?}VR–¶6<’Ïç(ÝæÒ8K
+¹Ï …ã‹‚ú"ÕNîQ&»LÎÑÛðÑ_k…¶Ö
+}¤#ˆ=¦¬Jå^¤Bf?Ù
+“xt" V¦D‚™¨òÆ
+Vì]¸À½«‹=8¬Šëcî×Q7l:¬ØåH\dj¸ð?ó”mž²ÍS¶yÊ6OÙæ)Û<e›§ló”íÿGÙV ¯ß25ÝßíLw''F¦N¶säè!¿Üó|Ç£qøç
+÷þ矰·LàšýO\~ý­üýÍ?^úöþu\¾ëÄ÷_^ýÝ•‹OŸÜåuX²¹sê©ç.<ÿÌ3ç/<÷ÝSû7ßá¶nðë>~v¦3vò‘ÇûFw`¢Ëú÷M?2¤zzÔБ™©}[ g±¾whh —½;††ÕíNðbS¹Ì¼¬ÜÄ–%>þ‰ÅQÉEKýO"Lˆ­£˜.¥·§Œ4çë6|¸šHؼŸE/TÉêâÓ¸æÅú¾ÉÉñ¢w°;qhl´‰L<465pñöx÷ðáîÄ&Þß=:²<íßG TÃX€ÁrÖ˜å«ê–óøv¾‡¼ßY íeÅèB¨¢Ý7SêAzãêÖ¸¹ihdÐè 47îBiws«˜†žˆ5ÈÒg/ð:ÇB•2§¹ÐLJçÞç2 }’³*ƒˆhôÑÐJ3 ™ßÒöïyP™– M€0ú Ñ,;­k¡I‹ˆ8i@á•°DiÚOe4y× Ý4T~FL––À¨ð £YI|¶<j‘ö\^óÝbµãÕbð‘.&´ð?š‰T‚"Ž¶fbŠª)åíäЋ)R·Óƒ ;=ˆ×"ü¡^~ºLQCÍ\†š( âWY+é»QÈ0"?!üð`#?íJò“í4?ä\ùGlbêùŸ„©g1y(ãiJÖ¸´
+ŒÕ 6U))B<@êé‚'$³¦ÈòóÊN%-»ßfOC”L)(ï4Àn š‰ü„PO'z:ƒÑ®$?ÛÞô[{.g~(™™ k4¶´« #[¢2U½¸2ª–¾š•Ð¤à#Pó^kÞK`ê3Q|îEQ ÚÇ ®•nô1 B¬ ï /­¢òBë;‚µúŽ`2+ŠÏ–G-h›åµ[écÔÎÜÇ€7ëÐëe´S–¡ƒ‡>–ºlØéÁÜÇ¢üÔ‹¨¡f.CsuÉôMˆg¥•‘Fvx°‘LVyéÙn’r®Ü˜ÕÃò?IËbHƒÓ•1ôRµ^BåÐZOõrk^Ž`î1Q~îCÉ¡¤‡e×Óf[% ÷Ìð.ˆµLQù©ù9‚5?'0ÙågÛ›~kÏåÌ[ëa7Ãâx±åp½ß•š!„æ[t¸`nQ¬U1nT$hPU:—Cï—ÈX UJ«ªªà€J¸hâßØ ³—ãÿe¿lv¢(ܵ‰ïÀÆmãŒà€Ë¦iÓÄ0išÆ…iMnúþöþÌŒ?ÐNa ™£Æ{ðÎð1G°„ÞŽ=þPÚÁlRêÇnvsSfx>ÁW߆­4©¢ùiWŠæ?!€'83˜¤~ÍŸÓj×­õ}rvyZŠ`öNÂ뀆Á¬­QÚPÛ…1mE ƒ€Ëþ⫈ÒLJ¡Î­Íïáå…öBÀvøÏ?˜R꥚+½Î‹ LLï˜ Ä„%æ’I½Îàeš³YrîP&1玥ÒQÛÁð·J“Â;æ‚»‚s´à Î fsîÌß8ÇRn‚‘sKùhÖÖ,…ŽJˆ+cÚZä&ÎrÃS.((
+¾_£Χ}¾[éúa÷±/Ìí' CÛótòª„UÉðPÑ[«‘àT›ÏêÏÑs?ÓhßE­1<æ°Ëíïqû½]E©Jät²y™ƒ¼ê®±†IÕ3­;Xw¨]°ý#g×xŽýàÝ Ù'Þ ý㵂ô…×Ò/kÔ„¾ÑN
+„î8+ºkt„¾qªÝÝÝÝÝÝ5.ÂBKòMt­@è®2á  +ña+ýF8È?ðFAè²Ï/dC¼ã
+endstream endobj 179 0 obj <</Filter[/FlateDecode]/Length 5613>>stream
+H‰ì—}LSWǧPÚÞö¶¥-¥€À-Ø®å¥Ð7JyQÞ*¢DEHS+/JZP|¦”eÙÂ6<ËFÍMƒÑ %ã12õq$0§$è24ÆDÍÌþó9÷¶ååT)ƒ{>MÚ{ç{ßs¾ç¾ðò%à=·óréüÃí¹Ó¤ËöÜcò-í-«Ïwåí[]&coéÖ® yû}õv¬›Ç뼉Ò9Þà ÀÚ×hpM¡x9 P1!|…h€Â‹J¥ÑéN£R½€’Ð-.òÀ%4:ƒ‰²Øl€Íf¡LP¡Çb2»ˆJG˜,—Ç|ŸÇå°˜º¨ Q¼hÊæò}ýƒ1
+ †Ê2ómlë¹<0tstl||lôæÐÀ垶ƣó3ä¡À"Õ¹ö`1(4” Q&e›­õg;/ ŒŒÞ™˜|ð`râÎèÈÀ¥Î³õVsv’RÀCÁÄfU`ZRMÚ®âšÓíç¯ Þ½?õèñãGS÷ïŽ];ß~º¦xWšF&6£ZïáEg ‚Ãb3rËŽ5uô^¿yçþÃ'O§§Ÿ>yxÿÎÍë½MÇÊr3bÂlº—cqÂ`:}~yÝ™®+ƒ£SO¦Ÿ=þlúÉÔÄèà•®3uåùz]&`#³*O/„ã+ŠŒÏ4ZN6w÷ M>zúìÏ/þ|öôÑäØp_wóI‹13>RäËAœK?«2+ë[z®ŽŒ?x<ýüÅ_½x>ýøÁøÈÕž–úJ£áݪ–æеÕpiå]KÙÅåÊîuíJqùªtéàÒÝƵ;›«wQ—îØ®=\|¹öÔsñ ëâÓÜÅ7ßR\|#zϵ·¯áßôæ+— XNÄâ-…iæ*3ŠänEq²^c=;Ͷª"+Šd¡H5Š(°äJ‰Æ¶ƒ/y4@¥À^s`ÿäšq è&>¹GPD­Š‘k0…Z¾Ëg›
+yŒ&Z©U*¹J ¤ªXЯVêð¿Ç`°2z¦ùh*bä1jÎ9X¡šw*GSãÐÚ›µSkoÆÊUj] 6{ªQ—(Duu3M\;cÒ>Ø>…™S9šj‡vÎ|¶Ev¡ˆ“Ê°Ü=ıØ•l­J+-¨*µT˜­G°8¼/ÿÂ׬Z!ŠÄ8b“ã„ĔˉûTˆÃœÂœaŽdAǬ¤âU>@ŸÕì8–&ë±äê* fߥÿ*’aQ9UÖÒŠXa“&Zö™’õ:Óöý¶"ë¡¢BSfÑ“}”MægŸœ ¯°T`±:e´}vÕøŒñm†o$5±gÄ®!¶dzéEqŽã”¢¥Î
+Ö Ë@‘|ÇVS`*µS(µ˜L;ÓàçÊ-Y|
+°²H…Z«‹OHLÜäFâuZµ"R¶ pY `s¾KÜ$…Æ`ó„A¡²(MÜæÔt}¦!+k»ÉÊ2dêÓS7Çi¢d¡AB›A£Ì· ò¦PÏ/X©ŽOÙš•³'ÏhÚg6ïwfó>“1oONÖÖ”xu¤$ØÇB¨ùü¼é(W,‰Ò&éwäš
+KË+­¶ªêêêCnª²Y+ËK M¹;ôIÚ(I°‹ÒçeŽ/%ÁŠå±)Ûvï+©<ôaíÉ>n8åF>þèd퇇*KöíÞ–+
+8 ó9‹I,%‹ï¡MÉÚ[d9R×ðéÍçZÛÚÿí6ÚÛZÏ5ñiCÝKÑÞ¬mD¨?ŸE,æLàžTÇ7X¦ÚlØ[l;~êóÖ¯:»¿ýîû .\t  Ð÷ß}ÛÝùUë秎ۊ÷6«dÁ¾ÕÓÃ98åù‡Êã¶î.´Õ~r®ã›‹—ûúøÁõeÆ^eàÇþ¾Ë¿é8÷I­­p÷Ö8y¨?¥ÏFŽŽ°}‚¤êäl“åxck×Å~þùÆ­[ÿŹ½ÌEnݺñóðO?\ìjm<n1e'«¥A>ld6rà.Eè2ö¨ihéìí¼ñËد¿Ý½woÂMÜ»w÷·_Ç~¹1ØßÛÙÒPs`O†.B$Ä#w¸÷!
+Éõ߸Íh©ýìë ýC·Ç'&ÿcjê¡Û˜šúã÷ɉñÛCý¾þ¬ÖbÜ–½ÑŸË¤Q÷"pñPh(oƒD•¼ãì—{P×ÀÇyl²IHBB ! " IH@D@+>‚`1<¤ D ÄgÅ¢¶Nµ•Q±^Ñëè@}Lõvt”ªs¯£Su¬ÓÚ‡Ú©Sø[‹´p-×ëé=»y½ê‘Ìì/3a÷ã|çû³g7gËíw>uñ«[Ýw{~íí½O½½¿öÜíî¼õÕÅS‡wm´—ÿ%-!B.BÁ³è±%› Pë3gW­úpï§g¯Þè¼Ósÿ·þQÆÀ@ÿo÷{îtÞ¸zöÓ½®ªš©W+xìa–JMb–yQãÖ¶ŸýcwO_ÿƒ?ÿMƒƒ<èïëéþñëÏO´mm\dÎJÔ(=-ßð·¸DmÊžW÷ÎöŸ]úö§_zû >üà%•>èïýå§o/}v`û;uó²MÑJ ¸É"§%“”Sl]·ãàé/¾ïºÛ7
+1:Äüö«ðÉù¥K×mo;vöÊõ›·»¨ÿ…ìº}óú•³ÇÚ¶¯[Zš?Wùí!vþ²°Øä좚U›[8{ùÚ77nQ¸Ù ··n|síòÙ‡Z7¯ª)ÊNŽ “ù“»qî="(£ Sf–-mjÞsèø™s¯\½FÍÆ͵u»võÊÅsgŽÚÓÜ´´læC”R"@˜;7â…B®ŠKÉ1WÙ×7·¶9ÞqƵ íMðùó®]ð™ŽãGÚ[›×Û«Ì9)q*9ñJá±  “ëª1¤ç—TÛ›6·ìÞàðªß(Ž>°wËæ&{uI~ºAèÏõx=#&جËUZSfAI•mõúMÍ-;wíÞCåÛٞݻv¶4oZ¿ÚVURiÒªä`«ÎôxÕuN¦T‰'gæ•ÕØV¬iÚðÕoºïmhZ³ÂVSV”Ÿ™ŒG*¥C¦Òù‰ðD2L›Òs ç-XXc]b«o°ÛíË(j¨·-±Ö,\0¯07Ý„«1™ˆ‡x¼B’—L&‡/
+UO0¤däÌ2Ï/]`±”Q†Å² t~±yVANFŠa‚:4HÌçSé¶$'“Áæ
+ÄAJU4nHNÍÈÊΑ——O!yy3r³³2R“ x´J$pÙ Ï©tL&¡ÉÊC#4Úx½1)ybÊ$JI™˜œdÔÇk5¡ò@Ÿ”ôœJç5g°9<a€LŽ…G¨51±ZíJÑjcc4êˆpL. ò8l†ß0I—& AùB±T¬Pb¡aaaáÊ…bJE°L*òQ„5‚¤ó¢û1Ù—'ŠÄ©4 £ ¢šT*‹„a3ý†_nOM“ÅæpQŸ/
+lÕÖ*,†¦N«X\VYš–m*Í/«¯´-«¬(Í­\YêhUålç-š[[1£)>Î1\;1Ä%¡Ž\o8¹âÈå<µº¶2Éyœ^YUmu-n0Y YŠ;—)ŽétF,OÀæcz†ƒË&ö­‘çÎFÎ?F,Xù‰dc°˜±8PUE–$î°$,>N‡À–üIãmžçéøzZyÅFl´U_­Û+÷==xO
+Ü`$©Ô{ Iêõ^HÒ[zÏ/ùšzWÏÁ˜6ô¶Úcƨ¡·¥†CÂ3æ ½­32´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<´!<cËð5”üó ¼m4Úž' _+ÉõÆ„ák"ù ½1aèuÉÿ«7& ½(ùœzÞ’|!=ê%_BJO½Ñ–„w=ÏWëö
+UGUì¥m©·¢Ì¢z%ŒóàÅ3ž3“hòÀÇ qöìDGŠ¯¯Ÿ__2óéyDHñc0˜,›„Åb2DæÓòˆBD
+“ÅF8\”G‚r¹›E$úŒ˜Fòe0Ù—Ç÷ŠÅ’€
+©ˆÏa±y~@$)Â5¸qRFN~ásQ‘yNaAîÔTS|Œ*$PÄC˜~žÅˆR 6*”†¨bô)™3fÍ[PñVMmí¢êJKÉ켩“ Úˆ@!Êfx#J±8‰b|¬!5»°¤¢Ö¶|uãÚµo¯¨¯[øæìÜ4£V¥¸,bd)„'
+
+‹6¤æαÔÚ×lØ´eë¶m[›7¿Û¸¬®Ü<#=1&<XÌC<Š9JùK•ê„I¹s+–¬~wËG{öµ}üqûþ¿ílÞ¸fieÑôɺ(LêïY dQ‰‚Çk“²f—/iÜ´cï£ÇNvtœ<~ôà¾6¯µUÌ™–<a|°ŒÌ# ò%!j]Zþ›uooúkÛÑŽœ¿péÒ…óÿìø{û®—¤ë¢B$|RÑ=,&Ç?04Æ”õ?…§—·O[²a×á“ç.^¾|éü©Ã»7.ÞQ‘áa¥«$!ÈÍó##Ð[<ÂR*v¾qù ¬Û}ôÜÕ›wîÝ»{ëêùc{Ö/œØ˜çgg *- òB'¯ˆŒº‰SPriûŒÛœ»~ïÑÓçÏŸ=¾wãü‘+gv”¥;™¨ËŠðrÂuƒOTNÓÌ5,£ºwþú}§¯Ý{úòÍ»wo_=½íôþ óûª3ÃÝÌ5åDùàÁÒ ymK¨œúIK¶¹pûÉ«w?þôþÕ“Ûl]2©>'ÊÓR[(ºÄt¬¼bò›¦®ØyâÊýçï>}ýöíë§w/î_=±sÅ´æüXokEq$]À€WÔµñ‰+l±j÷©ë^}øòýçÏï_?¼ztýôžÕ3Z‹â|lô%àAÒÅ- ¡¤gë_Ü6kÍÞ37¿ùôíç¯_?¿}zóäæ™}kgµ'øÙê)Ip£ëÒ·õK(阽nÿ¹[Oß~þþë÷ï_ß?¿}zëÜþu³;JýlõÑt"YYßÎ?±´cP×md]·ÏX?§³4ÑßN_Í]’]sÖ8ûÙ»/?~ýùóëÇ—wÏnŸ?°~ngiH—$V]I¥sºî ëºC’®ßþü†êÚ@@WYçÜ Xu•ÑF×Á ¨º.Õ5ªkTר®§ À
+endstream endobj 180 0 obj <</Filter[/FlateDecode]/Length 9111>>stream
+H‰ìW{PTׯ^ Ëû©‚d/÷ž{îËq×RŠŽvUZ`Ôšhú°>ÒšêLŒI´1míÃG:£mª‰:¡N3hš«X1>ZGiê3¢ô;÷µ÷.`Bf2Îpavïýöû}¯s¾ßùn]û†ŽŸ¾p­ûî?~ôÅÝîkN?°cC{]yaÁ˜´¸È°áC‡| ®!C‡‡EÆ¥)(,¯D ¢Qƒ¨AÔ ê:vÊŠ:uì›Aµmر¿OTÛWDõ<~Ü£¡ö?ånÛ°P]fTדP©*jýö}G;»®Þºó çÑ£žwn]íê<¶û†67A¥ZP¡‘±©YSÊú׿¨ófÔùΣû^_ïw—M)ÈJ BÑSf׶þäµß½ûѹÏnÞ¾ÿ°§çáýÛ7¯œûè½½¯­k]X6…FÙbS2“Kk–­Ýö›Ãž½|ãó»>|pïó—Ïž<òÛmk[jJ'Ó™©±¶
+ ŒKÖÌõ,]µvÓÖí;ßÚ½{×›;^yiÝó˼óJŸÂ¹TJIË@)!F'ŒÈš L-™ãnl{þÇ7mÞ²eóK/®]ÝÞT_=Û%æ™­¨¡4g±ÉécÂÔâʞƖå«V¯Y³ú¹­M‹jªJœžkv¥9‹°Ç§ddçóSfÌ~vþBÏ’ï66~¯Áë^PU6³P Çe¤ÆCV&Wª³0[t|Jú˜<V*œþtyåœêyóªçT>S2sªŒò³3R¢mafWª3ˆ`£2Çå³Â¤§\3f͘6u²ˆ9Yé) 1‘á!WÄÄn³Ç%¥¥gŽËs°/J’(`–ž0>+cDr|tdxèp‹+ÅÙ°ádTL|RÚ¨ÑYÙãsróòòrÇg¡ÒG$'ÄÚm*È‚Òaá‘ö˜øÄä´£Ò3FÎÈ52-%)>ÖÒ¤À
+#ÀôRÝ)Àá!Æ€ôÑpHýªBž€1€Á×—@ú@~5Ä7xegÏhöLwûÝv[õ,»-ÛYÌׂ¤ÂÝê÷¶Ømev[›ÝÆRÎ¥vC•ÃÍÀűÔnÔ¿j7€Xù«^i·aI Aà)–‘iY–©&‹L Y,c
+Kͳ‚
+—EE+&P¢’­2bÊHG¶Æ0\+0µÈn«²Ûd*'—ªž«Üg×8[üÓêý ¾fwËJj"‘M"¤øPvÝ&è€ìZ“U¤¯
+ˆæ9‘"è‰fxX+ı´,’E5Ä)
+ú#¬ÂÍ ›t°Õ¶xQ Š„‡Ê±ŒH,ðV/¼ bDbè «ìeQeÏqÈ4†D9Pâ—ËY_ßÖTá󻉲µ˜yJá”æ§bx C—³"‡ò-q¬hîN.±¯Âܽè›È28 „dàA E¬?˜«§<K4‡”JéX‘Ó°Ú
+iÚ
+!IL:X2™PÌ«#™œX#6küÓzeTª”ž¥¦¿ˆæ\(—!Dˆ¸¡D,¯=˜s•”%F2–©
+Z:N—‰4{”,%Y$NZ„@Ú£–%PŒYó´Äq&3†Àœ­&ƒrÈœÒyºÓˆaÕëÕSã1tô 3ÁyÌU§pÐL·ÇK«Í]ÒàFs0¤[1’¡TŽEh,KÚñH Mh‘‘h Y¸€¥jgÇ:X²+eÊÈ™£·ü@EILƒ˜ªnÒQÆ”C” J’Ù~<%10krè¸ê¿ŽK×@]ªåÔü-"Äåê÷œ0 ¨‚2Ÿ¿Â[ïkñx=*KõW½‚
+¯»q¶nQ£r¦9‹‹ZÜžo³ÿÙE¾–&õ·Ü>ˆ¢Ò¿²Ñ[p­© œ=Ih¤/È–@Þä“lµ@Foét,ð b ó"DÅ‘Ç<!hŽ'T ߌ ËÛÇ:šU(Ó'‚W²Jˆg$Ár£Ó:ˆâÉú]íÔç;¤ÍwpFðÔr;i%ØZ2´¦Á<«òGcŽçÂR‹¡±ÄbUhÀû’Þ¡+‰3*M8T›„̤‰˜ÃB&†]ɱAŽ`¶“9!HˆÖoYð0Ë’Lp-””yZ`§6±°%•¾Yå°QíÄ LŠ26)A²,´ †ae Ò' k¬Q4dEðÂÞ‚>EʤñÊ0‚눬¬¡Á)S  «+S½CpWUs³» zl±Ö2ìx¨ŸÌAUõ½Šaeø¯L_Ä
+Ewp05Àb"žÕ’„#š•Qß&ÈP¡~Á2!1¥% õ"±8î‹Éžì+\†9™ÿ?$3ÆŽ•„¯Ifß#ýð™:+)VÆÊf‡£ÂÒ‡rM“Š€¥•àµI¹V™ÔEu ‰6&LjX€#[aÝT@¢yT€º N"샀)2W!Ò—†G]¢ j`†š¼aªWŽ
+©áÓ’ ÑÒîpÒÌmSmeëêŸêñ:J—â+mCGY¥Bÿ•®Ÿ |©Bý€‹½˜sËZjñ¥¶¡£¬Tp!ì¿C—Ü涵Öv¨µ-µÞZGás3ôƼoÙtT(­r•¦£Ú¶ÍUèP«4%>$¨TGI3øjƒé¨­P“³8´
+€¹£:¼’3%>cÉf_×o®£ð»Qƒ]®"Qx
+)½œ“52•”²ÜAHís>½kN‘R7ãëÃïZêvZ
+oD‡¨bˆ~Е'½‚
+áR®n.M Ñ›µzâË­¯1ù¶÷¼K4×yVKá‡g‚¤$üA•¢2-•ZïÒǘb éRuCM‰–fr*oD_(…LN¥š“¾TSNUìÝ81:=±dŠ_ÂÐS ï*~fnµ(¨Â¶]×ÿeU«N×D,óT+;§kd2 *|¶·ŽÍì‰Oõ³O'A•jL_aG{`‚Šðeˆœ±QÝ,FD–Ñ° A…DB¹èÒª R‹ò‚
+ªáÆ?TPI¨iÑŒ|ÁâT±ãMž¡x19¹ŒÃ¢Ô ‚j¸Ùâ-Ô¡Æo@P!»ÊÍ´ êØ© xAE>H
+{zEµžPw'4•œPr! íN'¹äÑK*6:|v¨ÈKªhÄjõ’Jj!ÐBÓß¾TUT)à^Q­ŸÉ,Õ+*ý]€ý‡8sG/¨üN*mK¥·TÁ Û'¨ZL\¤ ª-Ĺ
+j‘&¨Äœ â0à•ëU-p1ã$Jyn¨¯ä¼¦ bŸà‡Ù×õ9U9!PÀi›Vê!‰X ŸÕ6`z
+ƒ§Û)Au›œOïšSôÐÔ¯Ž>„žú°¶å‡!«THáÅÂ[‚ à9 5ðUxÞ%õi¼”†ÒDaàåŒ*zbÄ«†×zñÄ#…ÔÛnzD­:ß½’°[O\Ÿ(óãÉ‹s—PX…‘ðºÔE"aí±OÔmgË#"fîxqÞˆãZ·h0íÆ%ÿ»W1¹±ÞŒÝ«°Uú¾©0²|”üS…±[ô*¬SSô" ?W}ÜœÛðnÓÞL†ÕQôà5cG÷ ¨iVÿ¹5 ›£š/…
+D~ò§#‹Æ”`ìN‚I(ðŒ2òõr °1ÍHd¥¹|jPȘú«0òNùÅaå}ê ÁVjHMMhP,kíw8Em>Y}ð‚²ƒiërRíd>y ’—,<E,Q…“E€5 ¸)¶ó5ì³<Tõ¥µ¡j›Ž5ˆ‚F¢ª¬¶ÖtංƸePx§Æ\ÜÓ¾žPw'$
+Ê|è-³4XNgsÉm®­m]ÿ³CE^}éZ|­ *[­+-Ô(ƒ¥VãÀû:çÂZ+øZA5”ùäæBä¶ÿ]r››×Zó¡Ö¼Ôz[ýå>‘³?ä?þP ‹ªYî§Úp©¡!mÑžˆ:§n a®Y‡º'¢²Ì‡~°0ðìÍ°Ê,‹C«`%¦ûߧZ³õ˜•1Âìëúuï긧øŽ‘0¥»·õ~ â/ÚjÄEFläN<yúRx" ¾4¥våñèº0•Š: ,uÑiü5'|Jè±ÆËÅXçXÅf³OÙ°SFžÎ¤
+Çä…3Þ]JK7,ÚĆÅm3BíËûp8 „Ìß½³É"]@p8Ì>lñö.:XƒÀ’…¦€‘l븳Ñá°ÏnJp8,>a öY*ÇÝ6Ýáp×Ú¸²mà·Bq˜>Ø9w¿¯'ÔÝ ‹$Òît’KûøcøìP‘Çá8àqÖêpXkUαÊ`©Uq¸â ÷õ3™¥:ÖRaF
+Ñu:2b ]6¦bœá)´\BÛÌ'/FÌ]BØ%kZeÝêÎO›òjËc=ŠÝoN¾|íöÆ UÇî9tV
+±{Ž’AÁs4Y>JîÉÑì=G'À› Ž£S„¢]Êq4
+­~Çèûbtðœ¹iÇ ž£SÞø6MŽÞjãv<Aš,Úý'I³x”æPàQš2òýò,“<“¥;?™ž¥É¢oÀdiv ž¥9ԡƇÓú†c›z°këoýÀؾ$ƒ®_Hîâh;¢¬ æEÍ‘ŸHîÒü³åÇ›1{íÇâzö™Ô¥RߣýŽ5r’1”ç –xrˆÎ—ëÜO¥zô¾-´Þn[ä)¾ ü¬2å\]…fÊf6ú·ãqx[êKÁ»¡Ÿ1l>ò/Û§q$Zü=¾[66CèÜ Ì†#ÛüÂNÙÆÜËñ>yÚzØ·n)ÕùõâJS Ë×ÌcùšÙÕýt^ç׃’%ÇÒÓ­?¾{|v‡Z`½©<þ-káoi´ŽÑEä6Ë>—Ý»6s¶­¢7?«^]¿þç«÷š“¦ªý¿¯_¾u4g–¨i<©Oþö§Ë¿>ÿ¾í~ü9=ûñ/o^_]ã¯?þø» z•ŸÇ@2ºŒOž¾}‹^¼»~1‚Ä‚„`«pñä9>«~¢06‡’üùíËëHq‹?ã2~¾yó/tøáÅ{Üý¿xýÓˆüûwï^ý®^½~óòÝõ8•±ªñgúßûÿýûz–tøóÇo>Œ¿?_;zïG<1!ÆýÒE=ºzûö«®·mc‰¾ð и¡÷ûãÑν¸uá4@ãâæÍ%Vv«H%·iý=Cr—K[Ž©~$2² ¯Ž†Ã™ÙÙ³sVÛz½Ü<ø Á6‹ &ß¾t‚#Òš.·ÓŨĂésIm;­Õv\Sv¦Ï%µÕf3]ŒëÇh{ÉsÇ´× Í~šQõúî–øqDŽÑö r±wõrTbÝA$õä ðkUoO–7‹Õ¨ÄëƒHo²Z¯;Oƒ4¯¦³_¨ÝVóQy¦æ‘è“ûx½®ÿ¿‰õA¤ÇÂìõh~³j¹¼¨>nÏ6ß^¼9•äýGþµO*SEþñª¿LjßÌæÓíôÕ¦šµãþÓ•½_È{!íêÕýB
+;wÁ4ÿ¨†ë,CG7ï¥Ö£TÞÞRuÃÞvjŠ“LR¬ÑQ½xâš–08ïm?¥£¤Þ­£vª¨^tE¥ØxuÉ÷RÜã³:Ò\­ëyUg•eT–QŸ%¹cØqRè]·v–QYFe•eT–QYF=Ö«YFí”QÅÉíÑ V¼ÅGÉðOòâ‹öÿû)t¾àB“þŒ5ËóniUésò"«ûß[ÓŸº{ ÄºÈXÙ³–yb™'²&˼¹²¼Ëò.˻ϑÜ1no@¯&뻬ïHd}—õ]ÖwYß=W}÷œõ“Ü_?i)œÌúé@H7맬Ÿ²~úÉ5úI{+´Íú)ë§Ã™»³~Êú)맬Ÿž­~‚<ºÕO‰hbƒ¥è¥T»|T?õ’èÏé'¡÷ÐOjoý¤™´Leýt ¤;¹Z×óªs}f•uÔÁ¤öÜu”cJ³¬£²Ž:œù;먬£²ŽÊ:êÙê(Vˆ £°lÅýI—"J*ñ'uT¯žPRb/%¥÷WR‚iγ’:ÚÌÖ«m½^n²–ÊZ*k©Ï’ܱrž;a]–RYJО¥T–RYJe)õL¥ÔÝÑ V¼…bb¥²’ZˆR¦H[¥˜7V
+ /iÍ,3pVJh)Ö
+@Ä—ÖJ5¨3œã¬ ÊŒ×7ì6P5Ñ«8¢E Ñ"–Œh‹=Ày\$=€œ}:¢ÅfÉf\ÐÄ ¸QÌÐÄ Sª›@Dÿö#42<&h_ŒkZÓqí
+ÑEÎ
+$¬3Mh+–#ÐV,X ­´Õc‘¶z¨£­¸‡~âF'¼"á­Ø5‹}x«zÞzÐ{ñ–¨‘£CÄs(Csˆ@¼\€ ÷Ó–¦Ä0Í Z(*ÓÒÒÀîYÕl9]%¾:m9¦äÿoý€Òj&hKmD-˜Í´ Qa.;¡vùüŒo¿t±®xN!¶Ì€z$M;?zñ)ãèy;4%‰'íÓvÒ”ø«ŸÖoGÒ¶L!1Ë*ß¼&@ Åâ<p>~8¥Cˆ‰Á;C|‹ÖŽÀë£àa•ê1øA¯B\ò3¬”–ñÞsto‡§ˆ… ÏSLƒ†„- F'Ž¿±8ŠýzGU)7¼Yù¤ª±$çû%zÝœ³§šÇ‡¦Ñˆ”5¡]N,JŒSåÍ~x9—çM¹$m½¶1f"EAo¶Òí­ØšùƒMs[ï $'/õÑŠrØP[êL3^ =nÀ¤”ƒ8°'ˆ#F«|÷dZ“”é 4„%ANŠÖì~=Î÷áXî%ÃE„S£pCâ|£ÓI‘îC°˜½½2­)(£™Ín&jÜG\‰¯“Q?Qà'è”a›¡À=è‹ÖŒ¶¦_ƒóÔ_VÕ—KÖÖ§˜\W7‹ëm—|uðo7óíu‡FÛP,¼"@¡0ÇïßœÿxöoìÖäò£|}ùny3«°úÏ她|YPyÏ8£Êª{†ǧë5œLëjüp­½Ñ
+û[Ÿ¡|“ yŠÏÐ{¾_Ï«}2âg„ññÃrƒWÓ-vÿên[m‚瓺ž>´›]ß,çuµê¬DUø™>¶¿ßV}J~þuº¼ ¿OZÛãwxùj1´£¾é»1qú¥“šÌÖ«m½^n |`›Åˆ“o_:ÁiM—Û‹ébTbÁô¹¤¶Ö‹j;®);Óç’Ú‡j³™.Æõc´=ˆäŽ­‘W8þ FYÔë»[âÇ9FÛƒÈqÄÞÕËQ‰5v‘Ô“7À¯U½=YÞ,V£K¬"½Éj½zì< Ò¼šÎ~¡v[ÍG噚D¢Oîãõºþcü>&Ö‘ ³×£ùͪåò¢ú¸=Û|{ñæ|T’÷ù×>©üMùÇ «þ2©}3›O·ÓW›ª mLeïò^H»zu¿ÂÎD0ÍÄ?ªá:ËÐÑÍ{©õ(•··TÝ°·pãÅÉ-´•#…¤Sa%Ù:O éÜ]Q=RŠ±Âjz7­8–xTéÁ²[±°z\б݂N³]‚N±’þÇ+:»¿¢³ÜZ•Ý°ÿäj]Ï«šgA—]tŸ%¹ÿ³_.­mA
+7Š”ßF£è‰F•áÇ{TÚÞ£R¢„âQyèveţģģ^åäö‘ŸƒÁcˆQDJDj:ÀE¤D¤D¤D¤Þ¨H9ã]…Ù… ',N›„œ+ p8ä$­Þõ¡Vè¡Š“áå*:NØÅresÌ}ñV«ÏÝRz"]ÂCóó©€ï£Ë< òÉ7 Dë8q‚³%±H!$õ¥V–*‚‚PùìE\Õ¢ok¬‚œ®¯-ûÎÆãÚµV
+rå“e¦s¤À‰ë¨\5™JB1†¤Àò„ÐB¸*w°«O˜—aCmÙw>0×Nø¶˜c>FËc~5—}\›÷5ʹwCíß¾Cµr±Îµ:f€S_iÌ»÷¦¾x¾ÃC9/^0¼FyCSÿæúá)};¹¹]tùÑâûÍÝÙåÏ_‹{­x`nöQ«/üÙvâ“©
+endstream endobj 181 0 obj <</Filter[/FlateDecode]/Length 2284>>stream
+H‰ìW}lçoœÄI.$$9>Rœ6±ïÃ_G ­!ép’iÒÜ‹}8û.;_€TíP'1P¡ ›öê6UZ©:ÊH¢Jûø±j+$ªTUê¦B›ðÇP+¦R ¦‚ÂÞ;ßï.çp¡-1Òý"Ìù¹çyî÷¼ïs¯Ÿß#èâ®
+Ì7—,LVÆqWù¦#"YÝÕÃ|“Òg5¿ÄrQšGb³SzðÄŒðyÜæÊç‡àù}q˜G|Ç](ȅ΋¥Pà†E¼‹ŠŠ­%9`µZ”1–"k©md·WêÁ^•—•ƒ9 °¸´Ü¾hiõŠÚºººz€¡®¶fÙ’…P™U)°—U,®^¹¶É…á8îV0¤¹qMmU¥ÍZ(FXŠJ+ªêñ§6µ;;»´èìØÜú´·iղʲâÌC
+,ÖòÅõMëÚzB;v&hšQƒNìê'{ƒUUPIæ!E¥öêÆu!æÅý‡†GŽh1|øÀ¾døÇšj–‰¶E+ñ¶ÐàÁ£o?96®ÁØè‰c¯
+½k–”[„2Š,]ûTsðõñSï˜Ô`âÜ™Óïüáp²÷éÆe5a…ª›6…^<:þÏ?ùlú¢ÓSç?:óÎkûÈÖæš
++_z¥Ä¾ÂÕ¶cÿ§>œúüJ*uMÔ•/¦?:}ì@ÿf¤Ö^"D–Øk±àÎCÇßûäó/¯§Ó7UH§¯ùÅù3'ïêÀê*…Å•uxgbøäÙÏ®\ÿæÖm n}sýÊÔ¹ÑáD'®Ž GÆ&¦Sé[ßÞÑàÛ[éÔôÄغKÑEŸ¼˜Jß¾£}åîÜN_»89~„QEÔ»»>âÚM½ˆ›b„»ÞŒ0#Ì3ÂŒ0#̈!ýžÏ¡33äš
+Ïr‘ùë%ù`þz‡ ›×ãô¡>?ìEQ'A¸Q8¡´!N°·ìu;q¯Ï{ÆÉ‹‰’! ÙpŸ#|DÖ6ÓëVÚp·è$¥ÎÐl&É#g’mnÒ Ë™ÙLféñ’$’iJ6H®E²ÉÕŠ™³ß±l"í*D; [d#`G#Ü»]¸n¹,× s1†&Ù!xo{’ÿà—,x¤’BrViu¼U®T²UV‰vP•AߪÊ@ç"l,)^;íp`càLÇÅ^ a×6ŽÑQ¸I¨v"L
+´¡®¾$Åî¦"¡-ÔP(ã•lý2U£Àfh؃™ª³=ëwûP?ß¡€=F>Ç•ÍK (áå/ü„Á‰ìE¶‘1m#»Q§{F#g·M¿¹Q¿º¹·WÛÜ8ŠÎèmî¿ßÞ41?¡¦$Q—»kÖŽ"t:IQ¼Âª(_iË€œ¹Àx_‹ hgÅ2蔟µqÕ=–Y D<·ò-†¸×Ë·êAO¸ðà¸OÙb~ù_o çáøøpp‘Po `·Ý‹!Â?Px#P®_ØŸ¬Ñç–_S›bú6)8¨—s.”Ï»¶RdvôS±h?'¾£&Û÷Ä"\¿h¹%ó^ÑäÍš†D“«·#ØÓÞ¯ƒ¡½ø¦Ð¶x,L«ÖPˆ5Âü9ÑŽ"!ÀxI™a×F†IH–"¥<`KšÈ»Úiv$ùLr ÿœN&B‰gÕŒÃköÛ€ÆÞDœÍ$¨¾AŽ’Ž(幧ð ÷Çâ–¢¥EYI·ùnh€Ê–4ãön2>(Ýwd|¥3TåG“ É <_‘t¾‹r„šc™x2qU™* ¨ø6ß(‹ŒsÝdÔPa’ëÃRG²QŠ3Ö”¢ëÃRZ‚J&ɨ±~”}ó¢8†"êÃ0÷½Ž”(Ë ð¤"eß¼(ÒÀ²qC… ~yQÔ=vS,ˆÇ¢´¡ÂÞyQžÌV¹^(U™}dxßntÄPJ÷¼(ôžûØÏ°/ßG…w^”‡HÃWÎúÂT<ÞMíåÚ“mÝACEjCšæRÊ÷´"?øÂêÈs;ÔV‡#$G6')š‘•Õ.¤†’^¯Î’´syAFù 5œè)u´ð\¾õøRºøÕ•öVÔ^n‚×H¼à⯀BɃ(¯ÀÝ ìw2
+ÕQ ÝwÒP@:ÍYDá‚`¦ˆÊ“óÖÑÇ°Š5%”)¡L õ@Šs¡˜Ûãó{ÔgJ(SBåÏèmJ(SB™Ê”P©„
+nÿÚ=¡V:$‡(¶¹ž¿üÝ,‹S,d‹&ÉÝLÒ4Ñ5
+endstream endobj 182 0 obj <</Filter[/FlateDecode]/Length 16119>>stream
+H‰ìWkoÛÈý.@ÿaú!@ü!ÚrÈáE>SëÄ°]‹B`,Æa+“%e7ýõ=w†/Éò#Þ¤M»Ò@5CÞ™{:»x.ê÷Å+wÆÙtòâEÜùºnŽ™™f'ËåfµnhêåùbÆé©ð$˜·OþT4«²®Ž™3nW3zÿe¸¸)«²}ùˆ½<¢¥Ër½,°xU/ëæ}ýÛ,/úm!&É×XV?¸ü‡sÍô±tÙÙ©y$¯>å«Uù/< |7pi2ª7Õ¢¬®£ú·cÆ™r™Ç¦¸ Å¿–çÅêÁ'’újsST볦¾*V«˜Nµ:fñç¼b§ù5Vrö·b¹¬eÑ2¿ú'Þ O¼yV. (y“¯™2*‡'îܼün…· €îͼšŸÜ`ê¢X¯qÈ6¿ŽÆ[ÒÁh¼ü弸¶‹¿µ’/‹›Û%€1*x™y êã:ºïÅÉÌcBøLLCW_wGÔ->•Å¯ÇìM]­Na³¾°ØrG2åíüùfY4ïªr³ûfN[UOëE±ÄãÃûÙ27š!†kûÄeÞ\k˜¤^nÖ†2ïÖÞln~Ì?¾h7y{[T—õOæœÚ9ŒÆYÀ„
+ —sŸ‰Àì!=h+ÌV‚µ¿­X’A:ÙŠÀ?ƒ=Þ6åuYw‡Só×M¹ŒñLvWÚdŒ¾ºû¶'…ÞëuQuGÎ<>œÏN/hß´ZÄõ á¿2Ô…©+°`Y_·«Ã³›ÛV31‡¹Îš²"ÁÓÉ»ÌÏ–,¾nêÍíIõ¡žN^Zß½lò+<ÉÞ¾ÿGqµ†¶ÃÝŦ\pÁÛ£GD-ó*o˜Y8bíäå'¬ä8³ïae˜{ŠØ¤ø
+x Š¢0ÒQ©ÈUe„“FnäD"âa¦aBH…a¨Ã T>h-C7©BriT':Ö‘ÆCZë
+ñ¡¨ê,»–µþ ‡m}cÙÇlk­;Ø7Øcߌlkllì+[ß·Þ¯ŒƒÞÂ] Hwl,FvvMQ0XÛÚ»³t¸eé¤i7þŠÉ}Å£ÛÙgš¾=‚ÄpƱh_Þ±ÍQÚÆ â©g"Pß(:°mËRâhÐfpÓDÑþ6ט‚¿3¾i
+CÃBj ©!¤ì‚3¤¸–™Ð»è£Á(Ä 0‰¶ñÀ2yLL1q‰ß P©@B¡Ô•H÷Ê÷•ÉC‘Ü—ÉÚÚ±+Œ|“­º²ˆ÷¥aÔǪ-Ž%4và~’Âg[Œÿ„@%
+vŽ¿ù’uÓÄĽó8ˆ»ËEÑsq›z\*öíͽ…"568éý 븱Ùnmtß°¶ÍÐÖÀ˜~ÛÚè¾m½ÛÞøöbëNôW«{wuzÿè‹iH$d,:öjqê®^;üþj=ʆª/¾éK˜â
+‰ºÇW·yw%D–âÉŽ>ä‹ÏK–£t‰T‰„Ù§Ëç'˧¥ÊQ¢y:éDZ%F3Òíßì—MnÝH„÷|‡9@‹,Ö’ÅŸ9Io{1÷_LDdV>ROÝm÷èÍ0É$>²22ò ¾Ýo¸^–(½©¹
+<‡ÍSàªóà‰ðLf O†gÃÓa qF<%\8£]§E¼Ø”+WUѹñä„7z¿Î¬ãsáŽo?ó“ú‘jï…;¾ÿt{¯‡§âÍ€ àEŒ`ö"ÿ4Õ®PwàPÑ¢EÃ
+®lÞ< ás8Ò?s"Ž¦ •Nlô{ |_èkðkøk
+ „ï(ì u
+ßAø…Áå†Á‚_,
+.zù‘jR—Š [Ñ.ÙíjªMtçñí:’]òæHì)¸n–óÒ{“ü—5È…/91½øÓ‘ya²äÌUîÜÃÌ"—¦OgyõD)4 ŒëG#Ê·y7Ý›þM¯án_øÄU´pÇûÿןªòUáŽ_ý|ùÁšßë-þ>JÊßFÇþ×F«\±VþÞ ‡œ¿¼Å’ hþΊ¹.þQ×óÇÛ•©ŽÓ¿¦ù£Îóí‰~í}=ÈYKc~yÇ”Ë0óŽ ¬*ów*¸iͼãøƒËŸÓݯºåOF¾ÿç·ß~@ö§Ÿ AË ¯}¼^v®û` ‘IÀ$·X˜+춹±­,3Õ†zôñ„Ó®²ï˜=¡Q0xýçh¸i…³,. ¬ °Ó©³ie­©K(JHÅ0agñ ¥×_`Ïß¾¾¼#ñÈÐÝ?YO|šã:RW¡w…ÌíY`Ÿ¼Æ¨/ÞèÂÄÛ;? È
+„żª¨·)î5E¾Ýc”KþžÄ󞲌‘Ä2¼ég Õ;Ù[­þf›¿Ý®ÕurÚô–£&Ð>4
+§º³TME7ä)¤*ix’vM³MZ½´XèÔ¦­Ó¡-˜1”gkÅÌ·uÓÅšÕæ¾T´R_)£VJV¦±•²Â¯±q~vå£ ÇÏ 5)[-Ä›7§ã8l5Á•†€*Š øpÜ
+µõe]¦.”=¨ßºÙ¥´Ø ÚêU\yVZP'Uh5Ý"hŠ j5ôR,íu>J‡%ÒÔwëS̉MÉbóqÄd¬þl}*FŸˆOÜŠû?ÙÕï¿>¯)žzßn:§Æ±Ÿ¤ñ1Ô}„®k׳tl]»§+ÖTZÅæÅØ\ÙéüÍ7±9G¬äŦ™À+V•>¹ŒNÊKRÀÆCƒh
+K®ŒG&v“¨É©7ys¢ß>ó¹N©ŸSÕ9•ðƒÉOŠHÒ}àuV¯Óz4ë“þ~^¯4“u^J28«ËÏê~R·SúþM§4¾ŸRœPyœ‹Éé'Ñ"Ï Ëà,Š'™žb”` @É„ã½k$ˆÑ4Sšba`@Ëp{âðÁ}3YÞÃ+ÏhÁ(‡¢3U9Ñ,¢÷Ðuè6¶oÖØ4¶eNŸ›>5xk›ÍMŸšÕ7‰æŧÅf…;ã™ï8œ Î…¦½¶-`½¶.«¿Þ[vÖzJõ»s«M4½{çØ7tÆ:çÙúîʶnY§Zt‰Äʽ?ïçiJ Ê4%MÒbÏR–¤˜¢6¥¨½§(ÏPÉ
+Éi¡T#=5§U®ŒË“e¥ìÔºà4\y5Ù÷!Ç»èˆðÐQn9ÉEg¹Xqž5¢mè—Q-¹–>ÊÕ)ÅßáÖ3iœ pwtÒ´_ŒwI¼Ü@KPïª-eìÛÂ}ùr›Wó{ÚuĽuá®ßdöYÉ7œ[2ûî³ÏîŸoOП¢?Éæ[´þq‡]§—íÝÎè¬Ñ+y™…e¯ÙË¡Á·{Ѧg©‰ß¿9á[ùšì/zƇŸ¯ëê¥40ôÓ‹TU<WµHVCd«ÙÓUU¾Rºš/ÏW“'¬b {¡Áyh'RÖ œ5)i-žµ¶Ðú:ÏÒùo®ï‹3,u'W÷âº6URõ办j®®då0éx´,5›†‹˜Áô»G&<•M"”—nk(lÿ¼Q†K€=Ži¤©fÏ»–hñh¸á¡¦_i@‰×DW…·.pÙUŽ»É÷²€(Oz3o§æ•i2pp.ZC•¿7y=Å{j+Òg’veöΪ·xܪÝÑÔaëñÉíÂ]¬N'¹XV¿ÙñU¯ÚP-ú~ÒÙ{tšýOÚl³4°È/×"Y¶¢I]'÷¤±±¼6I“’¨íZ¥•*½˜?6Aäá.)§„‚Æ[%÷ÌÉ…;Ê=ÍAwQsR»ª×(¹îòÑ=ïÞ{ìݵ¾®êéÎ^NøEï!»·‰PØ· =Kê–Í O úuù ÚöùÛoógÓ—uîUg­3ö©ãÌŸ9œN׶Kß,6o}£h›ø&Éš´¢£áœisÜfÌ' œjÛ¢oŠ±OXlˆ×tÙ|=7Ãs+`¶àææÞgx5=Z¾~üi„ÛvíÞ*W…SvO Ù¸w¾ó¸;ä5ª¦¨9J'îYÞ­§3Ëf–Ër0‘QÑ)¬9UÏ^‹§.¸”2×+oYÎÚšzº*NO³ç©ž¤†ÈOGOMð½-ÒRq®š#¥ž‚"÷ZªM¼E⪑"òbBiˆÀ&ÑnPZ¹ª­©#R Él¬"´R-êZ†Éb&™$·Å4Ì4—¯½Ã™}×dÚ¤V§÷ÕgÚ&|vŽÏÎò=û¤Nõ¢«Á“ÐåhœßkjÚ¬Dl[ß |È~+SHèEð:J^¦¯Á*ö²]”d:²ê»½ïz?Úàþø:?tžÀàŽ“Ô׫ˆ‰ôx¹*­^W§šY@›Æ>5jzä5ß*GM¯ÂÓ­Æ[ ¯2†‹:u< ^ò~µ·Úþ êÙ¯–·‘+º7ààÆÀÌF¨ë5;–HÈÎH6YFºc4’t
+ÌR™ÀÜg/ÈÌ•‰3eÒdÆÊ|å:W±N“«ST&S5d®“1‰>GQµa†²¢éš
+/ð
+øçšÆŽâz²øùò…ÆPKDtt½N/ú(+.Ùî<ßßIþØ€
+C\$lK»í1ÄQ.`9ŒåÑîn0ƒ1šŸA+ÅE?¾÷áÓ-×Ì¿sAá¬,ßcLpzàç<¤1¸°£S)â¡)†ÕeI385${0@Àfs7X¬ì
+V†ˆŸFSc, )ÜÈï§uðüZ¾}Qï§ËBÞ, °ÙÕ +»¢q6q{Ôf"wí
+ÏÈw †å¥‘ú,Òʃ£ø› ^ëU[{tklŒ3}œÇUb#‚a Œ%,KLÜ„ /ñ"Õp±H¼Ð/Ü>`0üa;0\5`xk’¨‡xÁ€Wã…“HWâÅQÆZ㛑Øæ$²E jŒh³ˆÄ
+‹Õ¹¶„XÃV–@µÐ9ÕÈa
+žNˆº†©Ðq• [b‘[@YC—Þ ¬`ì„2_S@<ÃÚ´A\-Ä£s_9ïëE˜ÈKgŒ-gìX˜8ñÆÄÃÓˆ(x¸‚ˆÑˆ :GDéxØ#â(&®!¢à¡!â{˜h¨hìÒø¥ábÝá¢0 ⨰LP¸EƲC†îè8áÃW|ìÑ1W ½ìØGu|\"ÄmprÂÊ1ÀÄ 7{ìL 5g˜¸Ñëÿº¢Þ”©ek] ‰íãaÅKÆ;×D »ò1MŽ+x&š –‰ä¢‚è ]ª»D.™l׈†©+0jEí9‰t@_æ Íc!"
+<Î@e:0À¾ˆµÀ­6J¯àçhÎ@uºPî€v ÔkÍÙB;1 8rÌŽ“â™p1Aø8§ï o˜xÃÄ&þ
+!𳄇Œ¹¿žÁÂõ & ì”ÁRMaó¸
+‰ê™HK¶P5W´Ÿ–/ÎJÖhy£dŽö#…CO!QØsêi¤Ô±Ö,É„?‹0îÚSŠ&6’V0ÍøÛ
+?;É.L/^X;HŠ‰Âⓤæ&f¤ÄY¾Œ–|ăN@œèÕ!IÞI¢Y0tYGD’¶V°4Z¿9·vj§ßºŸâµß§sÕrší„¥°¢Ùû)ßr^9}»éÃéÞØ«^cÅËw•+»ùÄéžÝ=±íž~ËŠ§w_^ÛþÍt?™’]‹f6™‘¼…çÙ:øŸxž­ãÿ¹çÙ:øŸö< yp™ô™tšôšt›ô›tœôœtôtžôžtŸš#JJJJ'J/Š=‘<f)=)])}))½)Ý©æ°¢[ì;Æž±kì;ÇÞ±{ìf=dÙGv’½Ôyô“eOÙUö•eoÙ]ö—fÙeö™F'8Ö$tœ=g×ga³,n—~7 ÓA€ö‰ƒîàåáëT+õŠ½B-ßËõkÙVXÑÔÒ½T+äR§×ÜëX+÷’¯„Þ–n¦ÞÓØ;Ûºë{]ïtë¶í=¯}ÇŠºõ¿”  !aéx˜;*2ò¥Ë…ÔÅàÄ,—Å5·6\ìï`ºF-Æ Ž ïK/zƒÅŠ™ñÒÀw•’¯º[ƒiמ~¥]`Æ£¯yœÛ¬÷jëcâuëƒûgÖG„6ˆì–
+µü¦¶r]j+»ª4ov"t.?v#Wf'n•ü»Pª.FVp²Ã$†àHÙ©§°‘rÊ÷"‚M±¦LGˆó$¢¼R;DŠ½XºIìÍ\±r´q4qbáªyÛZ7±m4mmw ­ D6Wi΀òH}¤@R!)‘Ô˜À72¾–yå0a¤t·‘ãˆóTmÂ0s´˜±eYéC„8à*…Z¨§‘Q¡&ò+gs¹Ëõüµ<Só³%,ŽOT~¦¦}ujµB‚Jènb›„À‚PÕ(¤¤…|¡
+OÁñ"5VD†#f
+Ú@žm*Ìê%½*kt
+[š ‘>åt‡÷’#â[Àƒ.‰õUËJÅ»Œ"óÙ¨Ù-Á6·]3Eê#zFù/¹uQo²Ü« Õ^çSK:µ[:u›òß­ðdÅR ãSu9î’ôJ΋›ŒW^Kw¾æºIrSÝ
+lÑ1
+á £J ”¸­£0HtdVü™Ã€Ñµï¡²Ž{¦Æ—VÜY¨Ëj3»7â/°áO˜p°ÀƆ_3á»y|SÕ7U}SÕ?‡ª"DÄ‹w>ÎäÓ#ïrÜ‹½¢ª¯Y¦ªê ³Õøg ·Qù¶ØŸXëÇ'Ä~´áéœF ‘FPi#Ódª„N­ª¯”: ©¿,Djµâ{ ¹f@x‚Å7‚u•bÆ€$»Íj¡Y'D1H¹P-8M9ƒQ³;ºÍn!mç v¢7AüŽ`×,H¥Ò˜ tÊ
+26f[µAÈ9FþÇ~Ùô¸+Qt߀ÿƒ7f6 Q%qð6¢>³¼Õ[4t#Èbz‘™ÿwXEJ”ew’N0+›H`8±,U{ë¿\P¢#ØÊn×1¼'¥N¬l´ {^ð¸ú fLüêÊLŸ¨ :¨™“‘ž6òsz‚”¡D‘p´§(s”H‚£L’’l" –$Äeš”§¨kLu+W^
+™‡:ñ°'"ò°¡<d"¾ÆD¦"»Kö—ÌŲãB† '.}¦ß‘1ïÈ0+mâcOÇ$Σ|lîS­| q'+10±q³ggÈÔ\0ñ“^ÿêMq.—’f„mÚdWÇãŠGÇ»œ‰ÓaÕPžeÕ–#É:é Ó ŒìöiÑXÄÅxíÓŠ±À¨•iç!r‚Dƒú<ÌÍÐfa¬ë 05C’…œ^F¶†
+úíéàÄ„1L®žÑÀ$+Âpæ–30$âú2ËúÂêrz@(ݺ°ŒyU!€[YQÚ5´/²*Œë=HwHÆÉÒû®0Ï/ãü¬þ}q¾wÖ;ê⨎¥Ff¨ÐÑŒ¦F6P½ž¶T2ÆËeV(uF³#ÚP1÷HÕ[jßÐÅW¨ÆFÜ` ;==jéTC¿jºVá#3éã@7{zÚÒÙ†þÖt™{t ¾4Ñ÷@÷= tààÁâe&-ºzèâ¡k‡.ºrè¡ë÷(ë†.²h¤5C— ]1tÁÐõB— ]-X, »ƒríê‰Ú¢¨’£ Ê‚RZTÓÄyTw&îLÜ™¸3ñML4çOዬ¥ÕcÐÖœßx£§>»êlªGj¿þçéáÃÓû¾þŽ¿Û9Æ6ÿ­¥“½•7OÉ_™¶9Wrä{Þ=V®)ö_Ž¿H
+²‡Æ*å:i¥´VR­T/­˜ŽpêvmÔÔ.šó#>€¨uFø®+§†ïÖ<Þô]åú>~R×z5ój7z~üj:Šªª­ë6N‘–‘*°]ëüîJ1]ü?Lu'£§­y—ÛþÆ~Âå~x\9{}\ñ9nËq•G€‘K6Ó'[ ¤‰©Zð;CÊ œ$Ž–äÑ“@’H¤f"—,¸™!©°Á’YxL9.xprŽŒNF†Œùbdt ¡•Ã"Òàhžôvc£apt ŸFÇ”†Gu ­ŒŸ†…-I,›uœô6Ž” C%z …ˆcE 7†KøL D=â áࢌ›8px|,#Ž8x&Òb%q
+qŒ°óË#‘qÆÞ q’©ŽP: Ìc 49C"iM<mªmfbY–y™HAVŒ^'ñ?†ûj^æ™ ;JÜõ)êºsMŠ¸E¼ç—8àïã=|ç€ÞñË€O½ßŒø¾Ã%~añ ÷à%ž g\tx–þÖt™{d‡šéùˆK @Ñ´¸W5dTlT3”Œ¸ÜÐx¨é`Çá–ÉhØ(œqÂ!ò÷–{Ä9[¸k ¯†ÂŠmkÆaGÈ0›N[hmpâv+v¯’Gˆ ›4 åÚ-ÔµµÄDz€ö²ž:YgùzUÝ™¸3qgâÎÄ71Ñœ?<…/ÂFÞGÖý$ï+yÑ×c·Gw ݇t7¢0\Ñ¥­I7(ݦòn%±5n]iÿš¤çcºø ½÷Òÿ^R­€ '$4’®jåAˆX$‰M’ÜÃJFf#Ó‘ùX A¶…~eD)ù&N®‘Bz-HJ”‘’=%{6 ÃrÅ•Œ#%7©€‰IÒ”2±QQp¡ Nýâr/9ì-»½¦H¬[ïú”rÛ‹6)#kÍ¡“e/ÉßÚÏnßS’¸tµè«j?ì:›õ¯{»u7÷—Ÿ.¼ ÷X»|Íb§7G8x~a®ðUOHŽpÕN×]aç — ¬Ñ²;Px˜PÔ#IäõFDÁÄe¯‡bké×Sn8ÛÞ³íB+\Ѧ­)QPp $L”‚ƒ¬îx¸Ó•†yGC/4¨Ò7­g6µg½gÅãe‰ˆ·™ÈTlúW*Ž“‚+^L‹o¥¢¿5)`B=!rQRqËJoÈî'Fø>&Š”pÈ$Í1”Ù &ƒ†TPɬ 4¸C<–\Äyína¤æVfðôÜÑ銮Žt³£‡–œé™§SŽ:3ÑO/]0t V Þ=•57Ô;ª0V;ÖZ]7VY7VWj+•U§J‹ÕÙ+µ<=ÜrÙ]%‡uúæJnµÌõÔšêmÒùI/®ø“__¿bf‚·†ç²<«ã¹;jà©E *ÕYxLC½,usÔ¯£Žžz¨ðBQ õ¶TÝÁ3s.xzèÉDgÊgè“E Ž®uôΣ’€Z&ú¹PfƒŠ,jrtº£ßž®z?¡8(£ Z¸pÐÑÁˆG§b&”»Ð0ƒ’-Švh»Cåµt?á
+_þpOóëóï_>>~yý'}^>}~ÍŸývþ忯¯ÿzy>JMÛÿzz¸þ¹<Ux–îýGÖ”(Ä馯Kñ–¹é(ÈBŽ¥ UŽ“Èñ¶ GYHR¢}’å*Ê€(÷²Ü„¹Isg!OÊúá
+‘n2E¨²ÞYvš$Ôÿs_-¹‘ëHpÿ€>ÈlâŸ\R”tÿ#Mdð#J¥¶Ûváa0J¸,W•©d222¢·jmVi×Ö°¢ÄWC4®´®4¯´¯4°´p`×FF JU$Õ…RRQ©Ç_züÌaHÂýÕ¶ÀV¼¾g)c«œõ$í‘B7’Â姿fþôWˆb¬XMF!Ñ—fF7RþFù|Hˆ”¦¤a­hT GA}µÞ"¿=äxäpˆå"Í3íÎÆ1!Ì$ò]kÊx¹Ä"9
+{/£D- UE®„ð–"~%,1ì€á0U½×¼
+x5…ç §39ŵfœî°¢ž,Âü ;Ô|&¶™‹n3Üø +ö{ùÌݾoÇï~Ö ó?Êsfú/ûðwû¼¡ú7+A¬é §s-—vßmFçSÖŸó¸XÌH“é0Ò F›ØšÍ‚±—Ñ5ýãÑM¥1ôÜŽî+h&`=Ñ}j1X5 µ¤ãvC?¯hÙ„ã¢Û-:_ƒ°ÁV(hË žˆà æ°`œ(ไ̲að¯àšB à2
+œ#QÑ‘Ñ#H#âa„áj`ÅŽ#;¡éÄ”ÈR'¾&”k-€µó*#Ö)x`¯²â"G=‡ŽªÂN›8+=Ø¿È;à«(Å¢ÅÐzooX¬‰G£”øP+ëÔ³
+–Ü%²3ü’øÜ €Q?ò7'ð7>à×?†;gÁ
+$¤™`ÚÚ>Sì¤o}'ØZÒƒ6O:š SHhotÏ&vÒ- él‚´§¬þòù¯Ãfx}~%èþüªD2Ãg¦;½¾™ðîtÿžðnTö.Â…¢mÔõIùü/g€ç?çk¯ô£u ¦v°K&°ƒ“]. Í„ó”›
+°6€·Ìàž
+¼…ð‰B1MpÁ‡bÈa  ´àÐMtÑÇSÌq…ÙýîYPb“lò)¤˜rZÓ'v
+cm‘‰[†oá–]“mLu Öt—ö˜~‘€ÎBV#3#Ö
+RÏàÀ&ü/û嶣6 EÑ÷‘æ_’‹óhrùÿOêÚÛ± ` }iÕX•*†˜ÄÇ>{­žDmé‹ Û¶b.kâµ"}3Ð=û±£b¸líŠí¹Pĉ.ImuÜïèÀ'úpIÑ•)ðDÊG:u ó{úvK÷n8&[z¡ô=Òᾧ߷ôý†£Ä3²Ý6ÅD.Dò!ÀÊ‹–ìh8raa»LpI$aIÓ“8-ÉÓp4+ŽÇÂ6šÈ¦HFñŒN¬Žü:‘dµ8‹í<›Ï"‰Ì€™±¹RÛ;±}£ÖoU›Z‡Ãj\o„„ŠoõþýŠSsj½UýãšßTýûëR÷7ªþ¤îÔzWù§uYùí ¡Kæ'9mªN:4(¨Ìph»ô‡zìµò£Û?ÙUöˆìx,²ãS‘ýÝ‹5cÆÇ°Gí¯¿çÁŒwб/ãÑŒÏî9žñ'ßUÛçe/ã9œmw=Õ˜½È$•I8
+ÑËœô¿|¡1u®Œ[ÁªkÌâ˜&­™¬VŽ°²óÉr#½é6½! 8ö£?™èf0[uµžo;éj­<•'Xx¤<’ž¬=³[΢æc.T+J‹% ’I„¤B“IGlµZ‰*=š~B_OZ´‰Q°I¢©Eœ$2“gÖ%©ÒÉÑ©‹ŽëÆ-Mj·b:’éûË$ÜX¢¤Q)©”dJ:ݼEf‹¥JZu[Õz«g[ê˜Tô¼!´ª–pÙ
+j(VT£‹p6 !º gp6Õ´hžŠd¯tVK­ì©¬©Vó¼KΫ˜ÄrðšY(Y©¬”W( å´)ee©lY‹ÁëpNRÉ»7gÌRIàE€gk‘ÊŽˆ „e$6g‹eÅ‹H-;–2´’Ë™è]õòl—ÆÚQ–˜ŽÍ™ð^Ù¼’Í–b¡›„|$ì'B™VKgÃ&k7ñIò3аÌ+Ç„úhÛ²™:Ê<çG`ƒ<VÊÁ¢j›±xx‹?èªæî‘”ãky{À5Ì8¿5¦Wƒo?;¿=â~0cüÁ>˜ñZã~>†ãÁŒþ²Óûq§žy…óäg̳d½ÌZ¹)åN'-’충HdÈ,ŽY³,Q,’˜õ0ká¸Ao(:˜E0+`Ñ¿"~Yù²ìeÑËŠP&½+bW¤®è\¹,q£ÁYè<¸mvh!´¤)a´Fe˜Ng žl€ÑX-°Z ®…×l!¶ »1h׊9-ý÷—oœ ÝÂn·Ð[ð-ü€ ÁáÂpxó_2ÿEɼW šrßË ˆ5fâ?¬OÂÜǾåõ,u=ðÙ‘sü™ùþ. éûC ácÿÆÛR¿þJºv¨tÏ]ˆÒ#H¿Q†ÜP8H+G
+äá€õÆsÁ†#y;´±šc,Ôé9Ú#GܨCƒ4èì0g¤Aœ7Ì©
+ètn×u
+endstream endobj 183 0 obj <</Filter[/FlateDecode]/Length 17413>>stream
+H‰ì—mk$ÇÇß/Ìw˜7ß ‹~~0!ÐÝÓclÇä0˜ R„Bn“è΄|ûü«º{wVZ݃ï$ÜÒŽz5=]Õ¿þWUTQG³ÑñOˆ>Ƙð“cÁÏë´K"®I&T2É%›|Š)à'§”JZÒšjYe™u60›}v9ä”éZr͵ˆ"aºØb¦]ñ%ÀbÉ…®¥¬e]Ä¢`f±0¿XZÊB×Z%LW[Mu5ÀR-°ºÊUÃì´[ýêÖ0í~?í~7íÄg¾þ—f1@<¶fŸ1óŒédžÛzÆä³&ÎÛ´«ë3öܵ<c¥fìŸ- ™¸6 \EEXÏôrH!†|pÁtPAáW_ýâ‹Ï>ùèƒ÷Þyë×^yé±b„²ºÅ—]rÑçsÖ§rÒ „´àb³M6XoµÖXm••V °Õ,¦à$»`ü´3ÎXcŒ6ÊH#àª]tÖIG´×N[m´ÖJK-èŠcRTVIE”WNYe”VJI%ä:ípXyˆ{Ñüž°/^°/Í›æÏð¨ùÔ¼j~5ÏØ·iïšÉFøؼl~O›¯ÍÛæïð>ÃãæsóZ!ðüà{ó¾ùß"Ðb0¢Àqè‘h±hÑñ@D¦b‚¨p Ì|q•¦Ý/8!—tB´œÅ¥‰œÂ1J9|Ap諨¤õôÏ^Øf5[1 šîå´»¸ú<³å7m]!Ðó1*-"Ýx#T䉤䛨¬¡O)b†nŒ”Þµy¤8]קÏFëÊØí‹ô½ªû›o®oîo÷oûH¾½»ß±oæ¯~Þï¯_ßÞÌw}hö/¦Ý¹Q¸¬æ|Ãûq”j)öÔ s`3ˆK"‹"±J,[*©±H ½ 2Ê$3åÀ^åªð×´åØx"€È@c$+€‘€Ç
+’4È¡†²ÄŠå·ö‘ÚF´ŒÜ,R£[‹ˆQÌ=$'qc¸”
+y—¨‘Õ{S! ™ÛŠ¶P ÄâѺCÛ³¢XÐOf¤±¤=7?†´"Ü\PÑê"°÷¨©±Ô˜KV±¬˜yÁ2ÞЈ÷:¼Ý`
+«hV+ÖV°Æ„µ¬ØQ[‹æVAX2Y…G~%xࣃ§þ*x &a+bP‰„xïp& Ή¹8Ggªà„%D/¼¯A¼?²‘y_ƒšgÛÈÄieÞÝÈ€²neZ#¢È Ütâȧ³…íÄi@Èq6êipj u8â _˜øÂÄ&>ˆ 3_\ånKÅ¥·HŸ³¸tˆhÐ|#ð6ÜD!A+¸µbÆóôäËiwqõÑæ7ô6*4=õìM3~lû¶|Þ–‘ï/Òwöªîo¾}¸¾¹¿Ý¿í#ùöî~?ƾ™¿úy¿¿~}{3ßõ¡9ªÓîì0û”o8zT˜²çf1Û¿o€íEθ3Ó§†5oÖi™4J¥q¯6¶-«Ú_òl+¡{á{Q¸¸¢ÂŠÊªVTQIõ¸ ¢¡T@–šƒÖ$n
+¨%h "5±—Tµ·£1Œ½°ªTþÕA(?+?b‚F½Î"d†
+¡Q
+å^õ‚ˆ‹",–
+#”ü.Oõ=d,AÎPkAØj]!sX> µÞÊÕïÝ24 "‰Iyuƒª! §W}‡-ï4z
+ÛöyÆò;,ÚAÞ£ŒŸq–pìËoñS «ë²8„qHãÇ!C ‡D‘„L²H™ÄùhRyË!—C0‡dѲ9„“¥ó© b³•€h]ê ¬#CŠQv«31d:§¼á¯xèœ8~–éºdj%£ß>éå½­òa6«¢¡!8# Ÿ2Í'Ëi8/§áKöQNY‚Z_·vÒ,Dî EÔÝ-,G‚û;Þç/¥ÖåA–°Ë†{=ÏÝ^>ô{Š;¾&Nå)“<A PÈø™ß¢ð¨"*‚ŒÊ`!å˜vPwâÌ zpÞsOQUê ýŠ|ðT~?Óõ_›‘’ˆè‰åà ê1‡º *4º2{Á¡¯ÜãJÈ€æN×BHþ%ÓUH‹¡±ØXˆ‰ÂùÆF@h RÓAZ£x¡3 QjI`¤€–
+¿Ý‚­yç< ÆR%Y}\z¥Q3Ñ
+ÒkòÌÁ¹ j&Í}í
+|^jõ¶3|ÑTÐg¤öH„«8ßIf`þéë×l_*Þ:È¥«\Â}«¶wÒ~דÜPLÒÊeÌED:]ˆ@QŸJ8Wÿ {5¤‡'huÂ7‚ý^^ñιM~S.³Ë…Ø'¢;ìB{;øÌ»¾ÅæçÃ-bmÿï YìwøçOÿúÇâúêÛÏŸÿöñãß%}ý)=Ð0Åþüéw?Í?×É÷~÷Œ˜íYˆ ‚M5«c¾¡:
+^<Æ¿®xŒ²b2ÜInÁ“á³Zó']oÚè¨4Í’^‹ý@ºíÙ\gºÌîWg ø¢”W¾wÊS÷B3¼†mª6½6?SÁW
+eš§eƒÑC¯%Çab¿®¦ò°ƒ™ÅªªA@è®IÌ„<s`}æÜŠs[E:cî©á!–`@»½¥µæ ÷‹“ê@Öq7ã/9H9‡½¹·`VœÂm:XJrZN-Š´ð½NΛù¡®Å÷6p’
+bLÊ‘³´L&DÛåΠÙX#nÖa&ÈQË¢[í:é6t¨Ôf Zíó˜nµ÷ðî÷(æíÀ©¬:²À„KÃg9ÌŽ¾,y¥SfË{ã–N
+Õ âEPÕ#gkRp·Xýïf‰BPJó0¦©RÖÀÃÙALã~ÑÊ´R
+J÷Û0[òîǘ
+úè ㉠ÊG{€sì·¨¥Öätén‹¡ñWÕ¡Wড়„†„m¤ËŽcy1÷5Øä]*`Α¿1”´¦ï5G)˜‘I1G-G"FªÑˆÃ=ñR s0v¨Ì‘|e×;’È¿ÖØ—ƒº›C‰™­“DcÞyõ<-øWà³À[ ’˜¯µ-4rp¬„±ylæÑÙ‹“jšÎ,˜‹[Ô
+-™MÎÀα¼ J`-zYÄ”ÖÆÉþ
+‚˜ÁÐk4›(‡~UÞPïXP|·
+Ï+p,°ÑY¬ºîö6í6æÑÂcú‰£ÛäÿÐ]5i“¦ ìJ*ø·žmÝÿ<„ Uß̦Ÿî´Å‹$!Ûì 1€Wíê`_=JV ‚aaÍéøNkY[4z›®'
+ð/[¯>劰d2ÙÜdn-ÀæÏ L
+ßáü-´$Ó~`Ÿ59e3êÜì¦gw÷ê– ¿ö!ü´ˆ)‚ÀÁÒý*ˆíe7póá}$€µ9wä¼¾x– ” {¯:¨õ¥ ŒÐÇfä ]€\/Ha7 Oy¥ìlõN¥§k¿Æ¢ÛRçhm‚“2û¦^Ç=ÂŒtÍNµ¿µ`ÔGËEø¤M%¦|P8%õ÷Zg€Ïmn"ððC–n·›è<>t]¾×qxçÚèÓ×Nb"Ù6ç?aЊ¸Ôèæ0”[ʆ#"È ž,íБ3`ïÊvï,¹çÂÖ*¡ƒlGKíà‘€±ŒDoÊó§–Xsi~š›`÷}åï6Ä\,ûæïÏkß`xõ>Ìw–}ˆc{þŽ-.Ü{”l„A°tk‰Öú]HË'Êq«SF†.>WiwÕ!r ȶvü~¬íàêe<ÿý=ÒJ6k,$7Õ'±i6Ñoá¢ä\7×\¸P€{S‘´*`'éÚÄòìÈ6ÍÎ×ZJQ4éÍ` ñÁATeC—0-
+·Þé+AÜ•ê%~h±ëÚµªÀ«æ*ô“€™Ṽ!›b@z!(›$ÑÒ~ cm¶ÒQ&îèðc;RîŒ+ÞnÀóO|„=½®6e[œÇËOïMy2ÄÕÜóéf«Ø¡«ÆÝh_¿á·°&ãAÆô¾´¬;{>bTO°ýð!|¥ýʈq3è~mä×`Øôám­KFPÖ&¶°Y©~ûšûX…g]6ÊG䲶ËD¤µxc·JÐìVFÞøOrN*,œ/­Q[ˆs‰}.Û›iÄ’FÏ=[˜3
+é‡A¸¼ôÈܺð=ÖÕ1Àg+ñ¹cÊõbl.qjÞ
+Ðï6‹Ô8¬BÞ¡+³¨ÂújzŸ¡Oê.üZÛ””v=Àž{âmw;Âæ9kËÁ«¸Õ˜ËÀa‘MÒÆ“ÃÚ¤³eÜõíà±-Ä5Ûçu„b Î³àxôàDæŒX5Š&ùØá©Bmáâ Ôêä,5U¨NÞ†Gd¤„0#¬JåU¹Ì;†±¯ûœ` _¶p¾Üx´P7é Ö²þmž…RãkG¶:áέ֋(}PÛ<f„ût:]€Úç:ç~)Ü…Æw.io„Ü_%ˆ‚yòsè¡äˈ!:~$#,©¤¥šW…\už5Sš—ªm<9„’°1k“‡ëb;l·ö­ºô#¼@©Ñ€“,>MÆáéÎÕ°xKûÔíà%•žTV}Ë zëµE„Ò…_æ
+ }eæ$=ÒÚϽÚ&%äB·Ï͘êaÐÁ9)Ûpçq#œö.çú_Nhßó°žÉüÁÛ/ÿMÜÐö›q$ƒc²²Ã¤nFõÒR?·˜º# ¹u >c{„5${]¿ëÃiP¯kU’C‚2¬½n„²•5[ƒÝwÀ2èKÎé£k—»>ÇÛêY3‰‘¢4¶v|7R[#Hâ mä*ZÒã
+ÌׯYehF(õ‰À%Ž{Ì)?Õl."Y–­ ¹Ðy;.ñ/ÝÕ×ãÕqCß‘ø¿—H µdÆ3ž?í>¤ÝªUÓTHU!تîÑ"¾}ŽÇÇsovAHh9Ìúz<öñ9Á”È¡9ùá‰5Cê<'Ïj*§—ž%r«y?(×J&²ójyœó GJã¾h®5¬-Ô¤ +ÇêÞh Ä5.;3>g•Ùw»væ ‡Š2\?}NrcØo1Ì3Å«ŸsÀÔŽøœª»
+€E#¤Â°f“TN¿žS«§&sɬš1i#Kôn96ÆFsñ``‹Aî²³Âóõ8™Ë‰+q#~.v4è¯*‡Æ5ÕE°í
+qzâ«À¥5^zsåÜŽµ(;ÄÕb‹o(F_ý¸v¨ƒ‡42¼Çd#‚«½$‹ß%oÿºV¯äxår%o*Iµ$Ó©Æn]ô Ù™×AQaIådtærŠü[7-yG
+Xæ¢FjA4,™{#Ã0]ÌÙ½.G1Öê–&Ù5#@ _2&•F´U3·‘øÅ:=$nwŽÀY*vlçJ2®m–øÞì”üX©×˜zß} ¤©AŸKr0‚I¡‘3 aë ³£FØBü^nq·ÒB^4û½6O¸ƒË9.°ÃL¢Q2›I s ”ì>Õ@ØŪ-Jéì§XN½ë•öp±›]Þ{}KœS€Ö§›P°„V‚«› 4¡^x óI ¡G‰ƒ{Ø1pÙfWiÞS
+¹%!ØZâ%ROåˆSDÀrô͵;M'Á0k‚…Ú¶5Ài«éØ©#¤ºûl³_…lî1Çáaq²Äcf˜¡ˆP]¯¢Å"
+^-}âQ”`­)^LuåâLPL}Ž8;â÷×£x‡»,mïoœMNà
+¼‹0~÷ŠÆ-_AÖî
+^Š°÷RxyÊ.|n‰ñ:² ÍSø
+(W-Õ¯¼½Ñ4U½>³L®è1gÖÌÇ´—µôÐøÃtœƒÒ¢ë—nØN# <lªŒM iY?à9²€%Á‘¢øÌÓù”€Cóåù‡xÆT:[r¹Î›ûx5ýÕh«&9•Ïþbà¸vYB<v‘{‡3x{.ût
+{™dãxœ..ŽŽ° æÞê½ÜdDŽχ÷ÕÎaÔÁkõÕ_?ÿx÷Íû7wïÿwûúã§Ëï {ò§§—¯¿»ûøþöÇË“ïÞ½þpýâ¿×·o±KßýýӇ맗߬S/¾xêÛoxæ÷ö—í4{Ü-ŠžOϬjb› Üì-vYÒõoè;l$ü[l—á‡Û,ÙŠjÝ9"\Ž· ÜÄ‹ß·‹`–_ù…öjG’趹«|‡ íd‹$ø í 8RYpº¡ßÞ ¿Çç*«J£@Ò¨Ó4A°qd,]Ÿ ÚQVÚ-‚3§DýÁ0ÉÀNRð¶Î2ñ`Å\H®”,ßl…EÚ—
+ç$!. C`£Ï´?æf®]]µŽ­6Üÿ —©`X@Ý:I—ÓEÈ·=ý¹qXéAU4–²_Žs>>B@Ó8Õ=%c0\ñ‹ÖAÉA ‡+'¾B ݈‹|ä  ‰, Ç`+-Ò¾t0‘)Á‡A¸¹')sbqѹe€eâ-…?œAd¢(2<´oßðsãÄ6h‰ÈeôuÚ?)ÏÐê{GLÊß½á<ïM)íâtP0…G5¼g>X!Z§óby
+šÂ’m öºíKSûEãÖlð¨8­´mÜdcþ€½el+\Ó˜û8ÚÃøb0ÂÐI5ÛÊ\ÎVvr¦®ït>Æ• ÄS¾h—žè
+曾w¦HëàI!ÌšsÇ´ñõ`…l«˜Æ’‚‚¦±äƒ½²@{« wöÓ{¶â ö‡‚¬s«Â^ós‰¡kæuÔƧÐ÷’ƺ&Ü—Xq8¨ES$®}; taïK}½Ÿ‡U@©¯#—qózXè¢uPr°CR³Oí¾Ñâž—L뙃‚¦±$ƒ½´@ûÒÁDƤ¥#$NŠ§0Œç^ÒFÈ8OW‡E?#ÙõCÏ®`‹p}‡]K2®Øl41ÿ8ñ¦fU–Mß:(_ÁèÀ–ÛEë äà—@p¥|=h!YK6©$M_I8{iö¥ƒê w•h`áVãb̹†Äܳõô,ÄU7ÁÙO·xvûX‡°½w'Ë »,Œ4Ç
+©ën³AS9MÝ…,{]×­Éh#¸s0ÅÑDC›XXÙÛ-YRPÐD–|c°Wæ¬/Lcvy;l½»wñ.ÒSã"b`»íü'ŒkLM3ººÆŠg¶·YR5˳€íI Ĭ´-¦ÏÑ®`H4Ò¼h”ü” ¯}êàUZ^mÚ•ÂÁLbM×Cc½ÆùáHœÅ×U°†íù[KÉ[_˜òúÈ
+}a&
+ÿiqwSºWý±²ë¬0N6[ò™°)r­’¶rêó]QÖ—Zñ8]œžß·ï;ŒLO!õ6ôß?˜i¬©ÆŽõRó®ÿ+Îß~óŠó o98¦ýϯÿáÿÃÿõç?õ¯¿üõë×î½ôß ÿc»œ‰·—ÒªÔ÷Í‚­,ÛÓ”+¶ÛâÅ·ïœ3bÜåœJòc(¿`„¿—'’ÒŸ‡@yí QlÈñî[AÙ–…àˆF
+O8‡Òœö­ƒL³Oì ÄþHÄc}©ÈGCJuðfMlZ?K%ª«‰f
+†n£¬ö¤  ä`"+ŽldqZ^laíŸ9(h"KÂ1ØKsÚ·Ÿ\A‘ÇêU|ÈZÖÉó9& l‰S+ME†(4‘ñræg0@8³ö¤ àIÁÆ­ç÷`Ýwý¼¨ž‚‚¦±äƒ½2§}©ðÁÜ4²ºé>ŠK¬8†|±vI7½5äšáï“(€RûÜ”ŸÁPˆÖi8§  ä`+²Ü%£…B£Éƒg9((9XÂ1ØK ´/>³‚r¼O{MƒT_Ça_x; e _áSÛà£tÐôÍ25=¸ìnÎOÚ
+ÉV8ºù¶ˆci1øM]d¼BŒª@«¾½‚aÊ‹ÖÁƒŸ“ásÊãä´¬QWƒ&üöÒí¥Ãç÷P~JÖ’“„ºˆD¼ÕºôÎö$Ãk$‰Ø‰¦c^¥ŒÏ:J)/NwFà8šIÛYYB3ЗdëÁº”ö-Âú—ß¹þý7/¤ÿ•èZHiáFWѾ¼Â=u²"ƒœêñÆ«œ ¨â{뼞c¨•{7_Á-ª{®Ñ:øXHŽÉEý0-žýœ3=sPP,áJsÚ·æ3×*Ê;•C[ùú¹ñ
+›&¥á7r“•¤v“×e¬=Ê›9÷g0>ÎóŽZ%apœGòúz°B0¢³ýx
+
+šº’o•ë[…O®£p°2Wy—ø¹qx³•EažG´Ä~ê”GmFPÊã¯zWx岞¬ŽIvDŠóÕ•V5Vˆ†/´g
+
+šÂ’o…9í[….£H#Õ¢‹`×5)À„Vª{ÐV¼¥eÈÚѪI\ªî(4‰k›í
+Æ ¯*±Ñ:xRð!SUâÙ¨}=XyùšrH–‚‚Â`ùÆ`¯,ÐÞ*|r­ÜèS¼œTÐXqÂf0†hœÊ5Ÿ¦qÆïÐ4Îy–+˜ÐXª±Ñ:(9ƒâÜM”v‘~å  ‰¬ ‡`/-оtøà2Z¨ã¼÷‹jw‘/ßsä,"ÒݦBGaJP
+,¼~ÐLüÄÍ‹ÖAÉÁ¯BR‰àJ¾ž¬¨¾RÐ4Ö|C°Wæ¬/>³Šò°Â˜/‹×ÔÕUO+žQ—ps¥û\Âcç
+ ©›J]WpG
+¹\´žL\…ÑNy~=HÙ'ù¾e  Xº1Ø sÖ[ƒîƒ8àœõØvTv­!scƒ•ž¥ )¯Ö:(åáÿè´unö’ڞ؃‘?{X¾öóæ´Pm±Axä  I, Ç`/-оtøàFr‚
+b 0~n˜¾iH\jíG5ʽJyT3Ð$VK‚q¿áCŸ¬Ž| CVûúz’¢RiWšÀšnöºí­Á'÷AÃ-ÊéåÔB++œr‰‰²ÎŽ4uc 
+Åí]-ÃÔáœRØK±HîŒòÏ+á¹^:m“ä“RÚ0¨SÚJ}¯JzðdŸ95IO×ÕÌ^‡S)Ô+ÏDÌq™Ë½K6¸AuêlÅy¬ím£]À¡A §å+m-=nÐ<VÁ®ØZSÚÇ'3 Ø[Š’³ÂÕÍeà E9öF¸SЯ«;P;¼/çQ\;´ÞŒAñ–Iì0Z£¦ »1lbµÐšr„›ÿC ¯w~à HxJΨ(ÎP¹Uÿ}æŽ{ RÁ¸êE¡i
+Ñ8#e)l+U[ã–BØ
+Z»ŸNG2
+ÛÏMŒÿÔ„Y©ÈwŒ[Ÿ|§¹¿.ìº6â7·!›‰‚Ÿ¡aÈm…åœç­Dkµ'ro—j¾d®˜PÜãFk kЯ!8–‚Tî+âhÑFÒ¯)4Y°+¶ÖíáÃqÆ’/˜*E3Yð4vÑÊ&הط[–C%ªÉõšo”+&$°¶ÓÈÔdÁáF›Û®£½†ƒ›„‰©Å"×J­/Çy˜ð`Ú9*9 Œ‹ô¶Ã #åÊbp»ø ʘCwò!nHíÍ<:])îw§¸‘ý7S>vz­¬£ùœ ™»¬Õ•ZWŽtwàɼ!É
+C’gpÁ{¹dÚR´ÑQ;·‡]§;PŽ×·âª¯¿£õà­AlUÀ'*¯•s±]»Õd슭5G{øð`ây;öMpCÌdÃUá®L×b®òÆ`Šƒ¶:¿±Qz>Ý?mçŸqì#±ÌãWç¿_qnÚîw4[Y¤+¶fãÑù3A¼9V ±UƒÞ‚»Ç­á}äC—‹ö$Þ ÷†÷¼÷¶×Ï°pî´¼5¨µ‚Ûªçh.¨´Mƒê¯vÅÖš£=|x2èG–ßÙ\<Ž±-¯[«½r~ËYž–8f›êré¿PÜz)­¬A ¯A—1¡ÅósÜ40h.ףط¬´‡Oæ½{Ha¿Z4—¶äÏz õ(É9
+¥EªGØ
+>"\˜çwl°tÙñ™‚¸Û.
+TwÓ|f}ñÈ.)l´²f0A&Qy-´uL¾ÚW 2ƒ
+vÅ®5£=}x.‰Žo]bä§OO“ }b2Fû–)É)º•¨&GÚJ3V©¬@-G·z9RœA ̸þ¾€j0‹uÅ®-#==x0ŒX‡eèrŠ<nKŒlpow²€kËtm,ÁwbP YN±gÜý^6Z§uX`Ø:ÛÂzßó«¬TY¯/¶ÎíîÂsItpÓÕdý¨ÍbÁ1Ü£œv­I¡Ss Z|Å­ïN£Ô@V`T“ÅGHžÚ‹¯ø¸Üëï ȯb}±µåHɤ·‚+pjC\Hâ­á8#”MjàÉco~ÐÜ[Ô¬ãŠ1B¡d£55Øg;]éµÒâôå6 ª¿"Ø[kŽöðáÁLz?–û°Ž˜ËææN–Ã’åb±«“Õe¢­tœ¿¸“È
+Ü Ùc“OJ¼Ó2æöû êï‹XWlm9ÒÃóè­¯Õ&‘­ê2ìq i¦¤(³Ù:,­gj‡5Ë7rŵõ~Ðxk0Å[ã—Îh‡GmT¼[kŽvóáñDzŸ™vqÃþAâµÇKÎõ ƒ #LÎW˜ÏĬ˸&<ߣ÷ÏëŸFvðœËý’_gPÿ^”®÷F{RÒÀgÒèO¥ÑŸ4ýüVá“’»â.|:<ccâèˆ/S{»0vݹ•]zRœŸ¡6L‡\ÖâJŸ]4¼Ñ:p ŸÇDNu2(-ûBZ5È Iûâ䆵О>ènù«b'‹kŽ \èñþ¼í8–»Î0ð4MÇrU{ÍÆ\½½8m-†cX{ÃJë@Ö ö
+>Æq-¬0 ‘±¯TwY¯/¶Î”õtáÉø‰í"&™©#?¼í8v²Øa,·4M»Æ5Û£¢Ùdηb­¬cú‰Wwž>c…iøƒ²JPf½¾Ø3ÚÓ…'Ã'æd’ j3‡N¸9³Åˆ\qÁ’Õ↽Öj1Òe]‹Ç OWZN 6d4•×Â:WãO¯T‹Y¯/¶ÎŒöpáÉô TÏlQê±á|Ds& šåÊqîjêq/¹:P=Æ¢•×b€xh¥u kPÁñ±ƒÐÞKHÝ40È&›`Wl­íéÃäxù9ô”«™,8R …À&·<“ÆWâI†-‘Bs 7xiì°âqIάÐ:5ØU 9ɽËàµðñ\nTE¯+¶ÎŒõpá™:†É6ØBËæ®àxZ±,s”
+‰Ë$î†ÖŠÕ]H [1äõy¦þM{•Iƒ°T&ßGP“ÿw¡
+ȶÍü„Çžb*ÑÜ‹Þô°6ÚúÔÙ¯b~¼/Zc®x“œ¸ÑòÑ>[`LoíZ©Íå84{þ&þSd.©b‹ƒ/t?Öå³èˆNä2IÏ°ä¢
+ïƒK˜Úé"Kgq#µàÿ@ëÀ-:ÜL™Ñ²CfϺõ
+endstream endobj 184 0 obj <</Filter[/FlateDecode]/Length 5796>>stream
+H‰´WKÏ]GÜ[ò8$[‚“y?`eœ "HI„wÈJ ±Äg,Ë,üï©žéžî3'¡\Ž¯ëvêV×Ìô#çГ?Þ¼}þì75¦ûÑr §w9O;ûrèΚZž`w-˜ûÙRˆüa0ävöˆº·Ó÷^¯´d ‹Ap¼§ãJëÎè|Û408Œ` 6©)íÝ0üíù3w–šjé‡;Swe|¾•ð„9$|ˆ-EORMÙãïâsiŘR*“ܹ +Ü¢÷ì1ÈËt(;±¸§Ücú‚‡„¶³¤’¯œÐ9sBÈÅJ!u …%W .E¬›´”öfÁ²7yÜ°‚ðÁ×P !ÎÅT‡ñø“Sv¾†­¡fã¬s)Íßj½%µVðpB\fks-|ù\Ï•A‡“7à27Ÿ¯Á
+Ô†î¨Nô˸ð1Å਄„Š›?êM§‹Nbž
+º‚bËßR\¹†–³•Z7NÇÏ/wÕyÌp’ºÖ·ßgPÝe­l²2ÓãfÀòÖ•˜éJæŽéŽ!ºpo£Yb:
+ô!\W*‰F;ò?_6ÁL‹MáÙÖ—µ¥ƒpÈR"2ÕžùÀi_˜ùÕг—ÁXê\q‘\Ýhd ‹Ap˜ÑÅbay·MƒËbÑ«Á&³Åzwá{ È]2ËQ¡zºã•Kh_ i<ãj/Í·¦'×Ðcc»†Vúíz¥´˜­ŸŠ{zyR„”Êb.›
+²½ÿ OxªÇ•-?ö]ƒê¯—v¸‚mÊ‹öæÃ#AªT1¯U×uYq *¢/fÇól©Yh§Â¤àrõ)ß‚cñm£µàаÇÍ‚êãJÖÞa4»¤Á&XS3´7¹
+Òi'ÙT14uYpHiRˆešG¿õQ4»Ö’—E­¯æ,Á(™qm‚̪+XŠgLhÇ•e´U¿I`py¬Û‡ Ö„íÍ…G.‚¤õœ¯–w]=V<× *àù¥×ÄH ¸2ôÉû{°“=ÎÐ*84(ÃÂ[ªR³”¶—›‚nj±Š]š”!Üøö@¼úøÜ#Úuìv{ÚqLyŒj‘fV/ ȸұâvh N+—ÀŒ[ê6>Å.[ Áéæ¶qs 'åè·_ŸÿÿªSC5ÃyKž/þôü—-‚ Ç{à‡G’ÔYÁ#í
+ß_ Žy%d¹°Ú]èqSÀ ÌrM°¦eho<f%oÉAÛ²V nZ]ÈE`š•ÜpÀÙ€ËÝP{Û‚qýè]i-84è`\çACë‘êÜŒ—¿"Økj†öæÃ#WBkh÷œãfÓBñ@E\z]ðŽ“’’4š–J0àr95ÆÓò­‚¬a1(^üÏ„Í*¤°i`P]fÁ&ئ¼ho><r%åªò+ë®uYð ó@;= †ìQ”{„=(pyTš·àÔrÛhd æœ/EÚ«°R% u“Àà2Yôš`›±°Þ\˜ó6òÅðrâ-£F?‹à¹¹àe¥(§S«UpÙÔÖÔk‚±>”Ö‚$a(\q*Ç•õrÅEƒj4ë½\\ÍlÑî.¬ÝðWýêÕ§Ï_¿ÿáóû~xûéËñ[Â^üñåñÕ·Ÿ?½ÿð÷ãÅ·?½ýøî÷ÿx÷áÇ?¿ýüÓw_>¾{yüzD½úQøšc~Gÿù¯+è÷?ƒ9»“þâ«pÛI;žG”½pÜÒ§ÇÄèÜð¯7¼ä:N cTñTˆQ6±²µnÀq,(Péâ58`”ok´d ¯pm3ÿfÇ“8Ôò–æÏÕZïÚ8µ9šÉEçŽZæc»ÐZÐjûß¾w‰”4Z¥è«Ô1†¢=-CÐw€gôŽb=Óñ4Fy7ÓÖf:˜Ó¸ì A›`Ä o%Ó ![^ÆXJ2æ":çÞgGÈ”cŸ†dJ¿…³LMüo7Ëk)ó´;M‹~úíftªNÏ5¼Ñ×iœ°cAshï³QL°äDæU¿V¸^ ¡ø Ž—ùZJ)¤¡RCÏlOîc%¤3¬nÍÕЕ™ïÕ‘ŽmVÜLˆ¬—äDɾO'µ³éÎ`€ál~Úãɾqa°÷z—)»Q8p¡Õy #8ÁKvý~ø¯ù^P‚aÎ<8g¨—Õ ":ñC`ë|sÿf¿lzÛÖ•0¼?ÀùÞ8‹¦‘»IoVqÜšÔiqw-"¶4©C‘ŽÝ_©'rrMÒ¤\!hcØ#‡gæyË“|ð
+sf.ß+¼Õp!Ý]¾ùûýâ›Ín0©öy–Æ¡HivC}³×v¿g—qxP ;SmÞ‡AÙQã¼£3«›«xV—Ãþa™R3ß7½j.cxä—Ù3Š_)nïý ÏÞ ¬J³oõã{ýaþæÁ; 2­ºkÓý¢Ñ3í;ôK:0.¯€ ËšzßÏM’¹˜™ 6W{äå¼&ÉýþQQÂæú›<ä;v™Óoy9œÖ$íóff|¨Èö›“OG³<IÆFùHž¿;ÌÞ]~eæƒ2#bo¯|7”W?ùû¯‹$ÿÌ÷Š§ß&g”™¯úû¯ý»×ÙdÚÿïùç Bþz{h=ñÑqïŸÕ‚qóáž9 ¤s­ Íç“™}’<Œ bÊB <è÷ö?quÿaöŸÚŒÀ|Ï{S™Õ %aºŒŠÞĪ&Ž“EfN° |ë4Î- UŒ )ãlÁ`PVŒ•ÛkÂÚÂɧ٠Kb2ó›Qhˆ`É‚lÁˆùwÔHhš3ŽD]ùT˜¢\»¾rªRÜVô[Škš¨´œkãh¾â©Æk¹ûrk@Í(RÍ0"¿ ´&*ï¼a3Îœ¤p&á_m‰‘˜ñ¶à¸˜*ª‚ºñTLó¸kÊ
+ŒH@%êvÕ*Î}¨e=:‹D¤õnÁm@Œ…D:² ‡w±˜†ÿa±ß1y¨ãÜbðÝÎÆáÀö™H’Ä4عøŒ ïüLdT]Zk¤Ú8‰¤*^€ÂÔÚ=1®ÍVE)¨Óu){¡ØLè9ÈÈn²•Û^Av3¯z
+›' LB÷ÇõŽM^¦ß&gù3.ê†?ðÞ4Wh ô&Æ̸M µµÐÇàÜÒPÅš2ÎÌÞÁ²Bp¬,2 êk€XÛƒ8ù4;‚$ÀÏ:é©êyˆÑóИ‡@„æ¡9ãHÔÕÐ#ÕûÊ©Jp[ÑÈ©åœ2¾«3)Õ埄Tcndh×kž°$&;à41 ®7!‚¡5Ö2¤ŒÔú®–ÛÊs!“X0qƒRÚÝ’±]¯ùˆ‚¡¯N¼~Ý=4§%Ę‡Ð¢{Àô»óšåï‚h! ^¢Z6ü2ŠR@œ×ÁæŽ$ a‚¦õ-žkLËÝ×;[aî÷:bat¿×1[o[6³ÃÏI
+gþÕÀÌH|o‹‹©¢*ˆ›Ó<îš2À8•­h[pÃf*®—F—(¨j°åÁs­å\3S;Uvpø ê- 3rʸnæ¼öÌáuAÛ}‹ˆ²rt" Z3:OšYÖ§1áØJHÕãGlñ}iæ[=Ÿïñ#–§Í˜¦ #,€«s’´rä,ˆùºÕŽ8¯·ùé=zéo½lÎ_bÖŸM ËÊèþ¨ìÂŒB@¼dFÙÔ¸SÁ„<J$ÜÖ7Ta9ßËæ~w Z³Á!ìMªÂ1,)É΃1l[áÈ®w­Û" ð³nO¨ê
+e q'E˜Ã9Ž¤X`8ò0[ˆ¾S³Û ‹ u›X"Ô‘GÙ 얬(FÞ‘H!,"­íÜœ9Ü flg ¡Ø¨»?~‘4Â=ˆ·É(R×(¼€°àܼ… »µÅGLz¡Q¨tU‚maIH 0daH]¢¸îB­: Â镈·¯u‚&D§)%|Ä0“ÃAs³w„˜ŠkÌP\[ô;`ÐÄ®è¼AÃ@¼Ä Ù™.£(ÄylîH’@v!hŠ˜
+&äùS"ᶾ¡
+ËùîîBw Z³Á!ìMªÂ1,)É΃1l[á–»~BtšRÂGL#6³_O‚sªi¸g¨†Í\žƒ¼ì[©ßó.Žd‚ü©‰xÕSØ<e
+ò¾?†¨wlò2ý69ËŸqQ²O>ÍÆ”3ŒzƲÔÆù…¸IBª1þvhkÕš
+-˜H’Ä4Øe>Ì«´D$ ‰ˆ­„ÚV!“Ø8Æ›u§k¿]×Þwº†¸‚N×:]ët­ºöQšwºu­[×\–5ÈŠ´SµNÕž§jݲÖ-kªuª¶+ª6!:M)á#¦ålЉâ
+RŽaIIvÄel‡[n¢jº»6z¥6:ìÚq]umô°®è
+Ø#ë™ÿ{{È
+ÐÐë ½fŽ"‹_
+Kø•S…g,£[ªb‰XÄ +Ã] ³—qß«K[…$Ä(ae‹ƒ°[²F HH‘
+c_7‘¶0™™Ã Ê·–qÖª¬ç÷½ž?4ÿ{=óïؼ6¿Í½fÊü%F^6¶8)!¢FÝò !¢Æ¨ÖªÄÚBkšd²»¿|‘#4Ò=ˆ·E˜&ŒrDâ‚só‚ì>Ô$z¡©­Û­tU‚ma™†`$À…!U´v\oqÝ…Zu „Ó*Oß½•´L…–œ°$&ˆ3¸lN­y½l“UÁa˜uG3ä^”ÚÂ9lfIU8†%%ÙyDÛáV›?‚ ÑiJ ÕgÍm @vëÍ_HÙD’$¦†§êÛ#
+Ä"©ÙM/u]Ÿ·Qj+©#D ̪}jYN7éj¥
+xÍIù1@¤# ²æZ ˜®ÿa±é1y¨ãÜbðÝÎÆá -âÛ’éˆ^ô[5åÖšáH$Uñf…ù£‡$µûÌ¢}Ž¨ØÌé9ÈÈ.•ÓW=…ÍP¦
+ÏXF#uƵZ–°Ë:iؾ†»ö?âË aˆ¢Wñ¡Û®·ºñcu`š–’ ÞÞÒjI„Ø¿f×Ńò2ÉÌÅlmjeËL\BBÁL©yÐP™Y¤Œn ©¶º:ƒÆú›Sí–mcviÁÎ9"-åj¹qpþÊ¡žA‹Û7xŠè9e¬–ÚÖôÊÌÖ?Ÿf…M»/^ËP8xªU#Ó³$öEÒ Õ’
+}
+endstream endobj 185 0 obj <</Filter[/FlateDecode]/Length 4444>>stream
+H‰ì—_oܶÅß ô;ø¥@ Ô±×ŽÓ ûd{k#€cØ´÷¾\‘Z1á’
+EúO>ý•´»¶d_ZÇNÝ¡¶z âõ‘—?ÍpÎgåÌ;Qü²õë?ìZËn¶ÞýøÃxëçë…Ò†‹í$“Š[¡kÅÞÖÎ{íî~YýãnrQÿòç™òö—­©³RÏÛ¢K¦üJ%y@£Ùb))¿½U'úóòWÕ™v&2qÒhfï‘9÷ÏcXQxå
+ç·n–Âñ‰¸”¬:@Ô–ÿú}‡=vøΓ§â”ù¢L…«Ö8ûãEˆ¸Ý$R©éÚŒË4õ…Ø€û“ôfŒºYVÐÇFŽiêÁÓ- 0M˜
+•õa¹Vj*ª¡”¹êFSrž¹R°e€ øà*ÀÀ—¼MY"кµå /ÅfV,Ì%0|R©ðN–2²«yP
+*¹`nݳ†–
+ ²´Þíן׈÷ôt˜Z0
+ñø»§Éow’|“ ï2¤"k%U›½p„*ªN
+ÞMEœ&Õýè6ºn¸ÂÛ´4Ëi™FlË£[5ìï×ys4Ò!¼e}Úc£ëqýÀ»G@§‰m¨Z±0ÁÜÖ´©ð^–2ºní° -„œrdêŠÝ
+á:z ¤IöM.¼ËŠ¬•¤“¯›H†V»&L%¢âx”E¨ò§ê4
+Ü|j!]pî†1¹°Ì³gçNJ<™ŽÍ"7Exˆ{
+ÊÔ!½û
+n´Û¥ý⢜ƒ—USÜÓ±oÅÂ\¿´8…9¡Šüf¦Ö,’ZFGò`±`CGqºD î̼TQa0uÅn
+@¹0®ãF¥Ü& ÂáûOwýiðŽØ§#2³Ï"qGÆk^žñÈ„zèÁÐû³Ü¸B‹d®¥-#¶ÁèºbYãí,Ÿê|-·œ ¨ÅŠÂ+dÒ¯…d“åÕîA7ÎŒâÄŠ¯¾,$2gîéé6É©“. yT°¨u¥ÈÅl©©àÞvSi¿¸H»„ šbâ|Úó]Ã67lsÃ67ls±à Û\L½Úæ€9ls›°Í¥–•QY ûÜÿ…¡ßç^ë\×9 lÃ:ñ„Ö¹aÖ¹8×¹ƒÍZç œž¬sÛ£ Xè0ˆøWºÿÃç–!“uØç6aŸ[f‚SËòL&qfʇ\«O½‹aôf'V›Âñ‰¸”¬:´±5åÄí”ù¢L…«÷‚Ô‡#æÅ Ý a@R'ŒàôŠ}›4-Dh.õi /Aªkm?TyÆ^f(S¯‹ÇŠ÷ØJUW·£Œ}7S,ù2ÞZ~dr–Hwón÷ä<7J@–Së¨z±ÆÜ€;rôíT×Ë[„6V?\çiÃZê=ˆj«È7WÇrûÿ)G% ^‘ŒÉ…e.XË&Δx¶›En
+¯}2¶B¯’±CX9€äl j¦Ðk$”'w˘…¶ÞåÇ‘«³ððàB5!°ÚChŒ‘çp(ˆµt2ÅP|‹åó€ ûpÛ”l(Çɺ„w[ÊŦ8Ђ¬£ÕRgu2u¾‚N ~WBÒ–Ê5
+¯›h m
+^íÊOÃŒF¶µ á:FqðEK
+endstream endobj 186 0 obj <</Filter[/FlateDecode]/Length 17759>>stream
+H‰lWÉŽ7¼?àýCm.p'óÚ=ðÉ€OÆèªiy;H‡Áøÿ'r#‹õlKr+œE&s‰Œ<Fíí %?öVó™j¬°z|<;”Oª$få,¥eÆÒIÔôÛz¶ª‚¡•y@;¥Âx<ãhUŒûÙSL †3×^ ¤ÑÀFgn=ù ãL-³qgNý„ZøØÖÏ
+˜ZËŠ J[>ô¢x93n>L&
+€kñÙ¡XjÛqüÈvb¨Á‘æI@8ࡘxMzW=S!v€“4* ߥ$–Ißg'4ä)4Å+§WA÷`𨆴0ûù*µí¦9”Ú6Fïg.šW 1×P(nŒÕ&¯EI˜«¾+ 0L\\ýÚ HsMífœÏˆ€˜G40#?zu²€·+.w0Xµ¬-bQmÚ
+~l\ÈŠ«ØÑ‚ÞõëúóóñöŸç#úïÛŸÏG<¾ûõÛ·Ï_ûrüñßÏ_þúíÛÿŽXèû# Åÿ—JÌöù,=# Q¾Ö?ßþx>JåðüýGÿ‹æ+¥¡µ9*îûú|üÎ÷¿½=??àw8Ã
+p&¢«Ù¦F4f;>}Þ_Úþ×ñÕÁÐQûjäb—”Qc³Ø'Ï . ‹^=3INŸh4£ ]u4Ë}ÉBMé+ö¨Æ˜ÈðX†•u)V€m”6ë/ô h'Äý~7øQÑyA_€h9f+“›ž€´Nf<ºuQGÕÕ¡ÏJJ„Ü„¥]°wob0L»›–¬O@TH+`ÒnF›T”Ì°ˆµbÞ‚Gj¶È¤ ã€'w96£GÁðïNd#éÓ_<™Œ†ÇIæ ÂNÒlĵ‹²±’·Ð ³í7lå*0v£TÞç”S‹þ
+Ph'™ÀÁJ>PrÖª4´ÜÅóÆ]
+‡ÈmI8v ½-ù©…dÈŒ¢$?]AØldLßN6Q*g`œÂÓ/é±(z ~H£6î¹ #ë°F¥„Zm0wÜ sp˜.`y0—uS
+±æ<¯' Ò—3†#«^ˆÚ—þ¨Hª lJH
+VÍ\‹2|X-ðœywePy‰
+)åc–x3¹
+ávS=9j‰ ;‹°z?)•· ‹‚(Â4'D0}‘Òì ›%,Š©€9q8,9íÓ Ê ¯~X£ Ê@ó:ñxà¿
+ƒy3i¯.3pÅ(=ùi$§ULËÕäWè– ²†Ý”^º½†Z¢——ï¸nX0$¯*(ÀÔ½D *9•›1º+ªñJ*Ø•Ö_*
+0ó xq%Qf‘¨ZIIú…75Oâ,(—2B]uä’8)±lÅUy2¾J§´I/-Ùeºj›µÛ«ú3pLÏýf<Û«róÞŠŒ1-OÛcµµ 9qsËÚWéìÂôYC[&pPS9
+ ‡8^.eeGßä-"ù~â/‘•#ö—g÷è“LpÝOxí)¡mÁܶ¦wÀ¢ñn¦©÷á¹¾øaðÇ—ÄC‹ÅîÞz•
+¹ æ^Š‹y–¯W*«×Y¾^Óºo¼7@«Ø3‹L¢Ù,8ðL¤²Î›Š¹po@àI){ukÃsBˆ{__AÀš<q=q2Š^/T¹ÑÏÅÕIU—'9Öó…þÒò¾Nþ4ª¼u‘ªf@'öÆÀ+]B×Ùsh‰½»TŽ›m
+HÉTÚG†ÔVëÛlá2„ª¼!®ØÜwS)íTöÑ&}úËÔ¦É7ãÙ]kº®NÜ'ñjÛËØž½m³}ÿ﯊àççã÷çã‡_Ÿü
+G8>}y>ÚñÝ÷ǧÿ3ö·ü
+,/Âñ‹«æDÂðµ$$ñë\HxÉ’‚,1(£¼r-Zº¹Ål`Ö™Œ:ÜÀJÒÐÈ$l†x‹vScùž³åû"”²ª*ä;Ƈª˜B4¼–îÆY„Aó
+¼<dU£cVÒê,üjÙ(-›¥ª±¥4ÓœÕS4U¢1̃Æt"Ô„¸W½ UÝŠ.:èêfíO'–Ž¢ E_ ·(e‚a`Õ¾
+º†¨å?Œ€Ìü-·²ÎDOšqá•C¶¢’s3”ÅA¸õÃÛ¤!>T¬
+•E"”owÙÜtU4Çþ8dOš¤×ÀÃCV¢Ê±'´Ôådû‡ ¢Ò¿dªÎ¨\9#ï^ EçÃyd|9u[´|¯C­EÍ9mÕÜÙu‘]p¡q£‹ŠŽ9€qè^'¤SÛü˜Ó;Hx®Æ¨€îÆ)GÔ¤ÀÅäµ
+‰¥&´ t\ZÖ~pœèLŒË|!˜€Éù™=/?||ùÂ.¯¼¿¿¼»¾Zn/¯n¯ï?-ùd9¥=¢sЧ$j1_ d+ÈÍ.$-äçáwà»1᧞Ü)r; kœZ4“\¤2¶%…•,|NŠË”†¥Ñ&æ ¤… BÏ}½‰–jŸÈ„ê–Ãñï~ëá/kÑ„ÞÌ}éH:¬¯^}x{öøéÝíñÓíÃýåãÓò%ÅÌòö=jøúì½5Ëñáî÷‡?ÿþrùûõr÷pu}²üƒŽ}E?^¾pZF(µ§çUÜÿã[êÿ¼o{ð]üáëû«žî>>üÖ‡ë›Ûûz}¸¼º¹^@=Ëw—÷7×'/ÍrF¯¸ø<Äæwôc~ä7øíWÄ>/aùvùég³\á“ß 5Ââxæýh¸EcÚÈ´A“´p.󇿠pvÅ÷p¦Áàã@€O¾Å©•‘Õ¦'s.ƒ„¿œ88l@ ¯PE¼`±Á+ø¼³ø¤³¸;Zå ««Y•€Žø ÛT
+yžXv©ƒyyEn_
+ãDP>ß ðÎ7u'CéZ“‚}@ú¹‡‚<m{
+‡K¡W›vub˜[&¾ŸÇÎðLþsæð‡E8r~)ÌÜV’3Ƕ•äéO¼²zÑWG×ýY]=÷“SIuÛÿUêŒܸ}ê¯QFcOgT’Á‹ <ŠCAú®îú£8?B6:*‡_ž'gëÊÉ‚ýRCI`g(”LÚ,Ž—iÞ±³§iäïÓö‡ÈÄ*x¢ÇcK5v~Ãì~Aó ¿7ðE1Ùhùú7N7Ð/%`*ýÓÄRçUÈé\\N`3Ðý:È´ÐT’p1„Qä'‹Öb½¤É:=Ïz@[
+ Ϲ-”TWò3lTYy)½1%×qµ‘½q㛌U+ñ•.€†qA²a0H•reI¦-&-(–K Î ì,Ç®5JÖx­e‘®ë¾'h;ù<^˜s/ü§|D)L†xµ_¤ëKÊBШC‡)Nù¨äaa@³¥ÐËñ&Sc·*¨²uŠÂ?ºUè`Š“Ø­e@§z~â†^ÑE†7F‰˜k¬`Á©"D‡ks‡”'d¬DFˆY!Ë-×8>]ŒªeFÈŠ
+«!`è¤Ý̲Ae?a€çàö1@bc–yrÏÅÈ=gÞòÉrŠo)žÔì`ë àf¹ûvçÝ` í̾­¢úËiØð4cŽ¨-ñ
+ñئ»D£ñj%ÌOdUJ±€,A—™Ö[P/Àx%·= kÖSˆì!Äà¼Õ þÛv
+:In 8¼˜•8Ä~ÕþUo¾”Ü® PˆÚ<íÀ5ñþ€®2ÞHɱ÷ïalFVjröÓ‹,¡zŽ
+Ë´LœÈ á|áIEÙ qyzš“:¾Šéj7
+)+”Þ’fH°ˆÂÿÏ©Ñö½-D—|ýÙ®:Óˆð›!L¨’‹cŒ@c\€aî¸ÍÓV"P GxÕŸ3Â5 ]t
+\Έ‘­’Â`ÊúS0ÝÂ@o†™‚Ú‡Ét!%Gnÿ&Óp~ÃwÀ¨ AüêÁ<T½˜ç\µ=»+~„+ȹ?-ÆuÚ2¯á3Á((ÙÎ@ûWЦÝ"ƒ•Ü´b²ÎŠç®`Ì]ûp<éy)œÛ%;Õ`öHß ÝùpWPâ´´TÐP„¼ºñNŽ‚ 5›¶5ND8÷9–VÕ>öFD 1‰?‹Gfß éc3ÁNñ@(¶<—“qó•%ùLÜK-m×ï’„3&¿°Ë²Ž¹6@®'%‰³aSPz³µÔ²›‚B.SeHÙ`ê}ô«×f¦€'XUFñ HÉwÀ/31fïP’…ËÑʈó&3
+½æ£°¬Xg¾Õ‚ ÄÜ;‡´ .ß¾DH^2·[±`¬aTÞ`Ür… ²øŠW«
+§ZÈ$;oiÑK¢Ù"D áDs’(–O"%dŽ^é’7JÍ[èàYëþÛ]rU=÷‹;§Ã6ž' a?ïàx€Û/ì×Úæâx×yÜ)š žÅçø蘜¹WoÅ
+Q½AlÓ\» 63l±úãš-±bµÝsxÙ¶=²jñ×l‹lóÂm4"—b2ûÃÑ%/.n´’1©Ç®z”€òš’—Ëø6C¾ý°’$…Ë<oæ§Ý9ü¼aÉ7]î}×^ºîH›ïø°¹óÈ›eT²)ùŽ0›¿ÏÅÁôG2Ú²pÇ(Ñq¤Gæµ)OéL¤©I¸¢œèX‘³íÜ'zw¥Ã§‰ßþýý-?þö2³%Ll›YIÏD¹ú#NeN¾ÕŸË§×bGË“d"×:ªâò|yX+†Öy˜= ÝÆbÉ5\‹Ùj)½,5wƒî7lbýõ3¿¥™ÅOÛ†©â
+” 0ņ@GŠ0èÕØMµ…c¢é„5›ZDÚ*Æ=ËÀ`R…þŒ#€Â.L7‡`߸+ £)’c uõÈEk³:=åè/e[ÜÜVQkOѧ½„iì9”ÎvêŸëÂwJUlm\ >žL§âúOaÞ8¾½gêóq½*Š«(¸v  ö­Õ¶›˜ø#bÖnâäÓˆéÞÄ–6SßsäŽr”5†íáB±ôWÇĵp\6²{éžm`æÓgÅÍ0$Òx.x±ñ\õ†"×Z‹0n»ùÑ¢C à– §iÞ~{jœ±%8 ¶þ؇í~r³{|”³Ažt­èö¾É‘D®k“Zk^·0…<Ù<aÙc^aj¿;ʠץ椗2ùñÖ¢üÒx8±L~ZŸãðš' rk<¯áãaŽñõIÅïzŒ¯Ï4<nß0zÇ~¥`Á†?”%Ò âMÉ,á@Ô‹RöFëÀuRÊ7®Ï¢?ÀQ
+ž8w FÑχÍÚf5¨ê¸Ò aØ×ú+ûô=øÓ¨òxÔMªÚÙôfàÝ.¡ëê=´ÆÄ.S rs©€ŒL_·dÈl º´…Ç°Q}–!žØJ÷RíÒni$zÑAM}ZèÚ꺑x+ñ†í!ÛmÓöKþ?^Áïo¿½¿}÷Óûþ¤Gz|þåým<¾ùöñùŸ_¯ý%Û‹ôø‡ JN2O
+‡¤F㬳‘ld:+Í ÁYKMª&»4IüäKÈù¤.…°ÀC$§þš9lê²raÿšu®›®³™:ë즔B0¾­†
+Ü¡¢;”¦ºŽK¤¡—ÀÑ“ƒ¬1ƒA+b¼Q¬­“_bˆåã*Âe7]iYÞ²¸þ¥1B8ïòßWõšô¸b虿%&`þ›‘,䵊ï
+ 2ÊçÒÌd§R]A«¦!r—Û<†-¨´‚>«%ÆiqôRâÜ•¨Ü‹9O•à -âi™ÑŸ ‘ñKXÏ\³ÖˆÇäyÖj‹}BD†©Å/î~Ñ€×Åò¨Z\DVÌ”,W@ýªï€wMÉ"dµ™Øýqzr%IšÿŇLÜpö‡„ª:Nú^40Q§I8(JáçEÝŒðîÅàµzç¶x›‘«Áï@Í•õ8.Ø‹»ÌÓݯÀ•g»Ÿ EŒëqQD«óK'ˆÓdy^œ\—ŽŽ1 ûÀà›?…W¹È©,M²ä
+#éÉÕDœ‹9{£ÐaÞ@ùQ ÀfÅCµ(à°£* ¡“)^åf
+PØ5` (‚µ´UÕHr Èpüï{8$ï̽»rU×6dÍÙY‡CÖõf*"Íw}Wjiyn
+'h<L̨’ 7}æmLÉÀÅ©ϹP’÷2‰zV-ã0‘"Èεn‹ühâ™A&j «ˆèÑK}!gbËØŠWÏF ¸jåû­Åµ³ð AÈÜ*JÞ†èeri2ƒ¯eA
+ÿD`ûUÉÁ9(ÏM¬üÔÍ£.É<¥‡CÔßzs“š²^ñÑF7_0ÚC<X~l~$ze”1‡$!ѪÎT:¥™B†é)‚ƒJÆ­ˆÄ²Þ3niÈä‹Ûø†æ
+Roü”3ƒ!àý¶úIJ9Ÿ ˜Z‹˜PV›¢rñœ#¨§¨$!É&ö óL]0<윢¤ƒv¬ÎpCï@lP¸vÙeÈ\C=hIÀ2}•Í¥$½å@¬ž…’áv°U ¹Tiv†HžÁ„ ²Å„<}̯#BT‘—r¦Qhñ<+{HÉn¡ÏÐÒvó\%)'ovó³=[FÛÌwêŒÖ´TIò4ÖVDPçPAÚsMnú¯ióêô¹©oˆóQ½PƒŽÍR¥òÌPÆC€4²I{Mç'!„¶j ˆa””j X'`{ÒEÛ¼M£ -pÍ“k 5Ñæë–ÒƒzË<… :% àhZæ'»”?Éñ8Ô-Ø$›­ËrZµ7€ ±XL+ Yu5kß7Z]ØL-BÜe-@•ƒj˜Ž>å×e;ND-Ѭí1²m
+Cß°üLÙ‰À”„‡Í®èœ§»)+mzó°é&I™`GÓ%x’åTF%¢“"/‚&¼ÓÑ°1*w{Ræ \KÏaP ³>¨ÞX¯-¸+MÛc³³Ìå¤á!g©«§gÙ>ð4šHD럯K·[‰:ˆÔÚú@KsÚV-¸bdsŽµˆ…àÚ³ª¡ãðµÙ‚ñÓIËFiYcÓ2JÉr”7‚,BÊëÝÙzÊX;ìæty¬íÍö‡X¶¿˜/Àpêi‘[¿û||Ï7?¿xywÿêêüþêÃíîîóôGÂþD?NžTÝøÍˬùù»Û‹7ŸoÞ¸V`³¿¼ºUèéf÷Û/ûûg'fzIg½ûÔ’öÛô¯${ ^Ô@7†Vðíã(@§ÕXé øòŽ¾`Îÿˆßþ ìÓ¦Ÿ¦¿ÿÃL8ëÝk¦ˆZÓDm@’š$5A8ÔåHO'ó‰K™
+% õ¬÷Ê~)‡œ%‹´2ÅÏf½ì}XIÑñ¼3G ˜Í ¾‰e{êY Q#¨x÷3öú;·d_áw<“$xŪãGÖœ¢¡ãf £h±V¹b|VúEldì\u£Mõ [í1›vuþV—ÀÏ¡ùž­q¨6—ã´8 wl›Ž)Ø…_bÜŽ™ k¶ÇCÆÅ'˜mdîXs€ûÅ1£iœs„0ù&Ù83#Aüz«;fÓ­Îßê÷^sÀû­ûaC|ºcË`öKŒ›ã1³qíÃöxÈæ`–ÅlÊ:˜Ü/ÐrÛí*4'ñÆ1˜ÅCÅ°>ë[Ý1›nu>;Üáe0¼ßº6ħ;¶ f¿Ä¸93×>l‡lfM§Ñ¹ƒ2à~ñJV²[D˜‘c0k@sOe¹Õ³éWçÏÚAàe0¼ßº6ħ;¶ f¿Ä¸93›Ö>l‡Œƒùí[M#PIScØ¢é‰yÖ⢠F®Y™ó¤TP–á–@,štÊF¢]`rt°èx ®<êu³ªÁÎ\òÁ‘HJÔ²ª¤l› É{ŸçQ K¢ÚŒ[ ´l2ûâûÚòç¬Ú¶ˆµ›Ò 5U6X†ŒmÛÔ]ÏuæKÉÞë,6¹z J¹ÚÞ
+Ñ0pô…¶Z a¼°4<¨_Ûäæ"b˜„ÚþfÅÛŽûæ[#VL›yšk<¤á]Náà~¡\2µÖ° À1|²ô Kyx†³š_j°ÜŸsŽÍ,¼8[ëGÜËB¬h†Óœ—å –ú0hÍHxÆMaw‘ª¨Y¿L8u°°UudbkÍ4ë@æ¨jòB$8”l›GSÉåÑB2x•d4ói2©¹ž ‡¼Æ‰&™áîYüœó
+´hˆœg ÛU”pÕê! ΔÏU‚ÄF:H©BÙ}4ÎÛ…BC\ßØC)ê;e>Å9´&ð¡ÁðÔ¥þÇpµs+
+®ÈÒUfƒ ®Z…æÓ<×,!ùÕf‰‹kv0ÛÁ…œíf‡KFà|¦âÇ7½ø#ÜS þ¯»ûûýÝíw¿ÿúáîþoŸÝ?›þ@{ÌôbóáÃõrÓíîýõþûWûßd›=4õSÌo÷w;:r0ˆÉ+”‰ªÍ£ ÛxZ¦
+YWžÑ$9xŒWжsÉÉ+ðÏÍåɇi-¢ƒÐú¹.ZÝÒ‘P²{s#L±Ù´%úÛxØ>Åå"ü‡Q°¦-~(2dö4šXÀ¼ø¨bªÓ»ÝZíŠøØ·¡—™»IYˆ³š\×=¤iPZÅD”VÅVt=˜nJí%5ÓA÷æFݯ‡”Z&ÔÒÇn‹ï É´L%úîŸ{ïc´jš{^iÒ˧t˜ç,‹óB£Á+¯ZŽuLš’D£?ÑöÄîcLı¨x¥à•8¥&š»ó½¶‹[žlÚ¨àâäIRÊ9†}ìéÆ$r)!–8Ôó„áh~Ü`eˆBƒÆYKäW 6Ø%Ø:C=ª3„äˆ%냋ýØŸn¶]9,ð™¦}$­2ZˆyÞÚê`Šêï1Cý‚Ã-
+ËØ-@ä‰N"ÚV0i«}R&Áµº
+½®BŸ° ¶:ÓÁ†ÒcþÄVE_Zíà|³Í7ëPulta¿¦iáÖcæ% ÷|þB»á`°­;Ë”9ˆrÑlÉBië Ñg5 £þ€gŸƒ•èÞÄŒyÏÑ¿kM6é“ö¡ÏŠ
+ÄP9½»éßÆO°ÿ/_NW5Ì}þÿ½ùŠ£#Ý#·£ç¦ñ…¢×ž¤Ê`µ£þü”yA•VºÕpv^÷ún3hËVmì 1ï[‘`*ÆÌ%ŸŠúâØ/·Ý6Ž$ ¿ÊÜ°/4ÛçÃ¥i{
+×€ d“k9IA(~ûý»§O53$%Ã’„7‚¦Ø]}¨êªÿËßIâÉÎ9g
+N=jÛ¬œŸ1}ÁdãÃãKæÇ[ÞíÞœdèN"¥d
+ÅI3í\(WÌ;&}®I™!×缩 åÑø]ï×Û5„s_Ãq†›ä^E[‰sãXd ñ5|7ùE³‹î±úÎ2‹æÕ¨lfšl…`iª®B¨e²âéðQ% $t'àM.4ïjFµûѼfy¨uãBœÑ„d´®›Ê.¼ïšs½&§$u{®ÞÎæ\L¨²~V m½ŸÕÐ# ½CAOtv÷L:¨É•EB+Ë¥Ý'¡%
+€`VÝZ
+"™ãìŸ
+àšÔùãV]<~U„C
+ÿt¤¨sÜ…E˜» ùPãÛÚYcW½³#O@Wn:¾Í“Ø¿*Ç¡8Lƃn„ÊùÜÚQÍÚõœ=Ÿw|®ÆÞÒE9_T$åžê¾²}f¿ÍúIļžÞk{À4“ï^ú!÷=k§û™µF˜”“ì)æ±¾ÿ–óïíõýùõr†bŽ óã@F¸—a@¯Pƒ™Š
+1ªÆ-K¥–*¶;®¸>ŽžlÚ³½“uõ§ØÒ^z¨`vâ â„;0Û0H Ç'¥æ‘kÿ µÃ•jëø¨ÖDuê$÷Ìbž‘ð(¦hÿ±–ó M™¡VCÊjá£låºÕd‘ê‚Ì1âJg1®WÓ0§¡Ø“Ó[§.¨Äï:ý®ƒzήÚÀý™{˜[zäb½
+°]T Ì°ÌzóPª«éßË·?èSL1÷í_WÛëÛpñüÛí%´9ÿx¹úùîËru“†ñ©«30ïÍíuÜYãp¼»ŸBaùãífùîëúãö2˜½É¦‹»ËËÕmwÒ®þwû°û*Ü݇ûZdÞ™K;â/øïOØî;ÕýÚýö;ë–˜þálÄ†ëŒ ‰jMÚD¾•8³¥›¾•[ù»¡Úê52Eś¨ pz]‘"Qmž‘‚xM–*¹tßÊîü]wÞxM§Ë SöQï#ÕS–îrq1_[9j+*ª:oøOh¦BÃAçä\7©°
+/Rj¿OòÇ C˜ºéQct¬j¥.e’AÁc
+½.hE®q˜¨¤8w±9 Š“fÚ¹P®˜wLú\“2H®3A$Ø S
+¥ñ»Þ¯!·kì6¾†ã 7+ȽŠª¸ìƱÈâkønò‹fÝcõ5œ!eÍ«QÙÌHÙªÁ ®’¨e²2êðQu $ˆ'êM.4ïjFµûѼfy¨uãB¦Ñg´®›Ê.¼ïšs½&§$u{®ÞΨæ\L¨¼~V!m½ŸÒ#½CFOTtv÷L*:¨É•EG+˥ݧ£%
+€`VâZp
+Zõ‰ôxˆ´Í9Â,&¯Gvë{¡J.4vÄ™Ø՜݄lÈ95oÇj1u32ûýf¼¶32Ð#>5™4¼dàìñiS¬ûq¶œ•öȇ×M]¥¡À Ôæ™›i7‰ év˜Ç÷®vÄc´Á=öƒ¤ò„ räpÊÙ—ÏGP9‚ÊTŽ r•#¨üAÅ¡ÊÚ˜z R2"PbPT-M4fÂ$—vÊ<Æö•¦lu(•ÉŸVD>ïXAî œvÿ\Ð\=V&ë.¾aÝ'†D†‰ÜVLè" Z’¡”ªÈîÆ܆ Ù75û!9WgÍ„u/c;;`'Zz|Úë:Všõ‰?Ï
+Äì²îHÏ_]2SîAP2ÉèÉP
++³ö#¬ü`Xyu$•#©IåH*GR9’Ê?‘TP4½Óƒ†TVš¬§ŠÝÊÞòš—²JMíPW8FÖÇLȪ¤2ŽŽ×/÷Ùó~Nwìó» Æ();y†UÆê?ä B½ž GÛ:0W…weÇÀò¨e'Àò€e¹ùD¼BÏ$áaí`oj€tu|kÇ ÚÕœ aE›(VåD™µS?ÄÞ¬ë$paÆîCbi1ÝçähŸ$¿[+ŠJ]q1=YÖŽó‰z¾z¯»ìÔÁ.fnu²Ë=öƒô"{®8êÿÐËc]ÿ½èåöv»A;éþs}¾ù¼ša˜oÆ«Ñ×C/ò¥#X %&£àÏvêPQbÚ¡B£M’¢1…÷&•êˆG‡ôf0–å³q þ™à=f&Dò×:â$H÷d¹ÆøÞ«m7Žãˆ~Aþa^ HA´ê{w%O"ã8Nd ü`À zE8 xh:6ÿ>§º«o3»+S±Ô왞ªêºžªf P7Ø/:¨¯àùo˜K:…ÂfL$œ¬lFyj0½0„¾œð
+MðyM…Ø=9®oÊÊ“‘}¯)Ÿ©VZ”ƒ[ý6 ¼¢H~™$"iª{¦Bì>ž ·û˜¥#ÅIˆgÒ$mê°G¾AÝüAb¿èohgÕ[O\-tzHÖ‹_aè¨\å*ÑPH ¬ºå¯×GÕÎ’?€‹ˆMŒlhÉBzéiÌiƒCˆÖ] ¯è>¨0‚†‹½žX«2ÍHÚ‘Ÿw4‹à6Äa9ùqð8æѹ™<YåÙǨô<Ž9ôþ¥­r–ûÊÙë¼·î”Ö)³é2í¹qy…‚ãÆ¥ˆ[Xm\šûg‰®'×púm8ûQtÜâ"b®h„[Þ'.l7+<pŽRÝé”=”I+'ðòÆz‡ŒD9âødÙtªêù_ˆù4ÄÎa4YÍaC¾uNçó´TÚ­AÿÓëÛv:× ô¿„mc™„×Æ ¿¥ëa…
+Ôù› ¶~Å­UŽtÑØ©[ƒº©ƒ°|ŸA~Ÿo½ð+¸šš×«Ù¨\8JÖ9«½‹Ìw"x¤¡™ï(1ˆ‹(`û:ÿÁ¯=wš¨ÚÓuŸ}”nøm‡µÕ2¦ÖsMq i&¯
+,ñ-O<VØGulyâ°o,“8\Ư3eçäÊÎä,&Û¿åj0­jDÅ
+iGQ×ÉÍ&p«ƒ±>àeÇ°–dQ1Õ™4ñ]ANˆhHuV†Áõ¬YU„Û¡(õ¦Lö«2ɹ騕‰‘ªsÔ[j¶^°u©¼.–&a]Ž6å²_•K7=ƒ…7·;2¦“Š+wð&À}&×EAM•›œ| Rç9/ŽL|š x%Þ
+¨|¦KJ|ejÃÒ7à
+‡Õ~&G±Ê 3g+â%66d@¯ÕBˆÕŽŒs`ëZÄkªŠ™¢Í[e+,5©šh¾LG&œcü¾óÀ ÷3}ºÎ³ÑÉ.„»ô!œÐ­` jÇ&g¸SMÞ懈"ÊœšÙnæÆÞPî/X…ÚM´®c1QQÕ9Ö®ÖamGaŠ¼Š˜ #ÂnÚ{²Á×’l8ä©`«dÔFõFÄ ¼çõgß½|uÿðç«ýÃÕÝíÅýãòGÆž½
+\$8‡²uA8!ÙX5Ž¹iÄ8‰…8Šúò±Öƒ¥…ßò§:šéZ¬$GðÄ 7Þ"ÊÝìZuUÖÏAÀ*ˆÌ
+H:ó`€6®Ö3-¸Âßœ¨+í2o«²õ(áð!é–¡®ä]Ð š%Éð©v©ìF;g4IŠDç3×q ¨i•öž¿ •-¡¨÷TS>ìñèsád±6 ØK/Û Eí†RÍæ¾®8õ|-³&í&pÉkoOødv- Ƭ"¶M®ó#IwšJmåfyù%xÎ34lû‹‡‡ËûÛÏywÿðõãûK™jyyvww=º½øþúò‹Ÿ®Þ]þ(ÇôVÔL€îóÀ‚ScgM šþ·‹C?3ilœ‰¹¿|syqýÕf×/üÅ$•Þ^_í/ßî/®1ؾ¸¿z÷÷ËÇ#ãìWM¦¿^^¿_O¥ÿÓHò‹FíÁÔ= ºŸû›EªxiI«Ü±â"ý÷µèDý-RÓÆD£„¨4« ®l_ºC¡ç2M<ÆT™ äòáÔx4ÍhEwÓå]ÀWÙÚfw¶ZËå‹vyÛî;Hè®™”9[k§6€ý
+[ßîZŠ•@IY´/Oâv®çÈ}Ôó¨”b™R¶-õ›¤ê÷€†«©½% !2fÁ-msÐW<¯såÜÐBa˜@ÉC™LY‚ÉÞYâú¦Ž¤6a¶õL1Õ÷|Ÿ¨ÛÛ~éAD÷ЬÏQƒqì×8àã}ëP¬ëH( œŠ·É›jÊ8®fu ã+•¹ÄĘdX7P"‚1 C®†KÀBT11¿¨2NoAÍ©¢Í—DseÓ‹§-ºSI1˜IF}òa­ª >ñL/nÒ;ÞÕ^WØ
+¥²Å«…¶$b?NËøÆä°Uø_»œÆ
+Å”™Ö%ûyá‘Ãy¿÷ÄÂ4*(Ḫ¡Õa<ªìKÎ „Ò£¨Šµ¸qóNäõÓ†+øR"”(È 5ÚÐ
+DL¼ª—p\I#Ú‚Iu‰2±ô¸(¼:¯¯Êê*¿Ø0¼÷`EKñŒ$!.£0 Åí¹Ì{c]s£)L8|n| ¢ãœpbVÀ¨TæߌŠª¸¦òEH£/uÎwwå0xžŸ!ðÁÐéÉ„ƒ9 ña7Ø`ìAœçL^S­‘°!
+ü`
+endstream endobj 187 0 obj <</Filter[/FlateDecode]/Length 14501>>stream
+H‰ÌWÛnÇ}'Àè¤aû^Ýö—r&’2L ˆåîŠÙ€äë,þ}Nõe¦g–ŽhƒbÒÌٞ꺞ª"ïLgIjùNjåĻÃò6vd¤cÜtÊû
+ÛNûÈpQÑ0þñð@Š7éwª8Òg ö±‹1}VàwØSú<cçt¿Sì´4ªàª”h»@1|Ð||~Ï¢lð×?àÿ¯nN϶»7ëÅn½yœoŸÄ·Œiqzñ¸GgÊü}¾Û­¶ßþe³Ý}xúeu,¾á3RœÎ6›ûñ¡Çùíýêí§õrõk9¦öE]®îÖ¿î¶s¾²¨¨3ÞYát'£WÂRGNz¡\•BâÏéåj~ÿ~¾Û®?ó'#±ñê~½X]-æ÷ëÇ»·Ûõòo«§"ú;þë𠊣cqý3^ð™¼ùþqyõôp»¹¯À Š=VèèÇí­8³ûO«ãC)Î8G®;<øtx ÄÙ/üú#?ª¤~{bè¯xú7°ß„ïÅ?þ)Å__æäcK„ÂwÚS²«Áu§-‚Ź%;ÒÄq6‘ß)æÇEÎê4éþWRp2b$¢Ë}éãw¸7b$1•Tpý¥õ=ß<èÕœ,h$î› ³[vSþ3û;ðè§ÇÇùÃj)î¶óåz…d1渜€{;euȯvR‰¥Œï,¨ùÐy mfw‡ÆÀ,íÓÙb/H£ŠIz æg¥èg³ß+Ó§?lv—«Åf»„ž9[_¦×^žŸ]¼-v~ø¸Ù>äßjž"¡—›ÛÕÍÙE¼RW»§ûÕÍ É8Ù=×Ë}—ê/¹´ü›ÎßU7øZŸÒÿ²äx›Þ5!XI^—ìEâ(émƒsŠ©.˜œb± ´3 T¨´ªùØ㮂­X¯q}6–·>C4¾=ƒ+Ÿ’®‘5€£‹|ÐrÚØ3¶û|ßï^–Ùʇcq";)•µ™c`¼±ŽÎª@a/8Æv
+ÿ央/év°¤Õ¹ AjœÔˆà×Å.X2
+y
+ñZáARÐЕÜ&8‘¿L¹\ÚÊk¯ç½‰ìZWÛ êðU0{Ðæ¹/ã¬î>¯î.8Ü­M,ÑËd_=vwzÏ#œ¥<:Ç™ãBM³"±G×7x£k/¶7i0Ÿý…ãø¦q†²^“µq*$*è3'š ÁÒ‹V¢ÃFŽ(ïç[?>×ð q
+,5Ò¡‚Y‡Aáæpcò vß/l˜ÊþzGÚSáüXu¬…N#öà…qŒðEpŠ¿ˆª3ÒR­ƒ˜¸]vMiÆϨ3h:ï½kÀ"×iirØçÑb$µÇª‹J ‡1‹‘ÔÈœÕX…
+ ½¾íáÁàFìž^#BœÆf‡ŸÔ—ªoo°£q²:’RÀ¼¡ ÈãaŠƒé´­Q‘:²•Þ`qÈUƒ­IΫ`ïÔ`£Ÿh’*LÄ`Ñ¡HèqBÁ[ëÄH,éÎÅèÇ:T°KQ¸=ܛ֊ÝóÃk„Åb±²”N}éõ­—9»¬…ÖåÍwÆèa‰¬0&gíRŒQAÙdI2õD²¨Óœ½ÌWxôˆÉat>ˆ˜ˆÀ¬Â¢2j…c?§÷R½D‡Œ&ŒTèÁ"¡êÛn,Äîyá5b‚²öʸ“úRÔÕ’†Ë&|6c]çtêµÄ©uÓÀÇ ƒ˜#¥Ôh$„|ö‚×Ìä0L™â±˜UBÜÃQ‰±T¡ò‚بPÀ"aз9ÜÜ‹záUÚ “°”æ†S^ªºZÕËÌ^Õ
+•cG¸•á°Çâô
+ß?Þ‰£Ùìl±øôp¹ÙÍùt•È±ÁJ\/sBê?šS
+ËÞóâèX\ÿœˆèÌ»4»¼YbBØ\ª^äq©3H]LÛ—è Šr9a ¯D•ò4s^%›¨à²Œ·hï1–Æ*&UtãyvQ¹1D_n#“Ë ESLédÛ)˜b„ÓÃü†Ã”f*äv–Dbà³ä:¤.¹ÏóÒ’ÉŠ©Ö×µGvšœÍx’œA :ªd¥ê.äU0Àžó:1Y2>ã2L‡P‡tWÕ“HüYZBΡɦŒ‡Ñéß´èACv9⦡»CI\É_…ÌNŠàH8ì5ìÒYЦCÂÊ%µ.•ò$›âåx¾Oôä±î ™¡h04îTÚ=#@i”8Å„‘;±Ž2E“¸‘›OxîãçnO<ƒÆI+ØXæŸý–›¡K݇ÙʺÂQ/Õ<É—š è#˜W¡©?®ÿ[)$+Ê\ÿ¿°Ù*på¥Ý ¬MiÙ*b•C÷b£ˆK\C’ç$rŸ/…NÒ"º201o©LÓ\¦=±è5Ï@eƒ–UªT†28쎲¤)ߦcb6Œ­^™¤.žHå$„U¼‹TøYÕGB`<3Ï2ü]b°4•AN%½<71WÉŠ§>Ìc˜b2* k™@ƒª  6ƒiÂüóU×bÉmDAþC¿²†¹H*I%=îŽHpXH0,„`l¯q<›`0&ÿ>§>Ô­î{Ù½ã¹c&ñÜZu©T§Îq2‰µj5\²îwŽªÈVšñÆ‹•xZáµÖöĺ uqAÊ´áÙ9
+0ò FƒÙ”n:ˆxˆrsःŠ#ƒ²ba†uÞ›p_dO*v°kàœ)™dEp¿Nµ§Œ]
+S4v„çwÕ\8) ‰×eCªhê;ZÛ°Põ“*Je톚IÈZ“¾€ì£èÑÖyuùº1©Ì„T-º
+Í–Ö7Œv5‡ëR1*…d“%#„
+Çõº¦$u…¨UF¤D
+8œ@Gˆ
++çg…¤€
+ˆ–‡
+•³zgÊ¢(EFÖ
+©æq°®œYúá FpqMNtrwlAÅtØõ …âÄŠ\\{„¶š ‡‹Q°¬dFêa
+ñN¤^ºc‹®Ú.LXž¦º ?5욊zJg`¦¡}‰¤Š3NFgÛÙÈ—!,)3[ pO.Ù@g
+Ë]'j¦Q/~.4Ø‹!dPLÐ6^„à@!¨T]Í\w» 
+l ŸBâ" T’yñ[!«Ü%çÐp ÿîÒíÊÐåû„>µ}™”•Ý„=²VσJè%Š)”—
+È’$œ“ U—Ø›p„ˆ|J· ¨~ {†ú\„!¹•é'60+„ºÑb!éµ:L¡XX@e_Å45°ÑóSÆqˆRtUÇ´”ˤ“DÔˆp¿ôé¥{c0Ä -‚mÄ ~/}YQ\Ü,%
+'È(é/ÿWF}fsçb6ú}úñdÇ¢Õ ¿óˆ]“±×KÇoÇŒ5®éÜö‚Éãùs3‚§ìÍ?/ãÑ+?ôb@°÷¬­S‘Š
+¢áå ø8_Æö”î!4«Öd,Yº;Y¸M/#ŽnÓúÄq»2®ßjÞæ”^š½]J?¹þ~¾°û´DÐ1(ÏÃhÂjžìÒ\µ8?jªµf#’bŠ£W»pìØê2»­àa¼ö¡ÿZ»°uªóW(ÄÞ×fÜ]<Ù·(7§Ó{öï¾?OÅ—×õtLíÕ¢"æ,òðxŒ›`aŽ RäXʧˆÿY;&RA
+#\[rM Ì ¬z
+?AÞá¿!-ïó!¹’<!8Ì$`gˆ ã‘ÁÁ¶‚ñ0ñÛç«Ãßj©;“–-}ánUïCí:¬ZË8’¡fþjÆs5ü¬»<¬Šc0í`-+²É$AUá–Í^²‹#“Ú Ü¥Æ4Û4£R3×•é ¯ ´™cÜ>­Öc6’¾ˆ×³¶ýD\¼VBm6š¥B¢*È{4æH…+ÕG5ShÂêö2Õì-˜Ãsi¾¸à±ãè¾2·¾¦e¡v¹.Iä¡h0ê¤
+h5íĨ ÓÉ$c?ôf¸dÕoÕ­ã3ñhÅk­ìs×­­È©ä¥
+Ï.QР÷i¢´ZP± /…›C€‡6jðÅMä§4-‡t±vüpö+XQŠdaÈ5µdieIØþþÔf*F!c \”7JÏg^…»ÌÓT«L–£n¼‰ÌÎ.˜OèKníàV²BV1èŠÁÜÑŽ«x]¶7¡Ö㞀êΙzœBEò¾˜Š{ 5²r†YŒÁ8¥BÎÄ Ô¥_1ñ•“B`¡‚ÈÛ°Q(¢j?_·§!öÚÄX^fì}nR•jdÖ® CUtaðØ!?ÑÈw)ÒÔ&¦h4‰çO- VÆV­‡›1™o;j Xºb#Vé»Ágʪˆú/¯HI‘Õz@­Na7La„³E7"»¡k󬕲ëu©§"ع*¦ 3±–ƒ¹ø|­7²Êôe1ÐâÓ­”>·çÎ9NQ¨Ã@jÒæšLmÑBnN#3@ª
+Ùõ¼&)¨[¥Fʨ
+MYxq:t¯2i-N…·œ‰ç5ù"¥V` Ò"”î^$ß]³ô`D*·
+=VQNp¾(€5 «1W8c)ÕŒUçñW2ò&§¶æ>”–ÊikŠB‘‚P+^!ÜŸQì:ªšU¥f¢”l±@d‰.+G0>5½Ôtå6ä¨æšMíz–g¾87ãS”m
+ÝW*.Zfô×µ £Ïµ»ÂÄ›gb/sñÔ©$âE±qŠ÷*k#P›’¨X@¼ ‚~æâ"/£R\„E¢½–$§umM”®¥¯ˆ‡|¤ÚLÁXÓ†q!LŠ„‹ÂÿÆþn*@ž
+¡þ‡qb…£”  $/3}Ô½FxZÁ¥@àì$’šµY3„ í±&z´”mÖ…Áº¶t·ä<Ñ3ôüUp%Ó*»hì†Þ×
+®u£Ô £Y§ÒÿÒ>Í„U^y£¥–]Á‰½J¦Í>£¯U²¬6‘6¶˜‘y]ض̆¬síà E¸¸E§;e:´±R«¿¡æ¸ËLkÃ{DSJ³0rzU‚•-›1‹ð´¤SñIì%˜
+MÍÍ5Íq· ª`ƒ‚
+¿‰ ©óà^¡¬}JÌ‘r©ÄUÁéºìO!5—I™Ù½ð£;æêaP‰ZÊȈú5€R’÷ß”p à)MÉŽˆõÝŠ1)e
+BÛ¶h5QPB(’B„P,¦àJ† 7µË„s[¨Ò²¨ÁÙÓz@Iѽ€ Ž1L(t¢¹bŽsB6 fÊjä¹L/ 9få[×þ
+å×b+8™Õ]ƒFâÀh^2nØubû‹LË3æ9|1S}_ <]@_ïÑŒI¤©'Óa· ‡eâÑR«F§#í~"¾€+M¢¬š A-þ2—¡µ°$”)”–8‡p„Ø›V IMœ¤ÙKe† CH"91ä>œ"o4Wļ5G)rÅü!CÐUºi0Fö6§ÂrS¦ †)7¾”ÅAê#Š¿Äþ¨kahaàfau@ãÀ¾Fb‹¦…ðN*áüXoU/Ž”4Ï‚§¥ßUº{n˜dþ¶ó×
+ ôG´Í ÂÂÓÈd‚äÁ<Í™”0ŒÌÁo@7\YŸÊ$Iÿ€ÂD@JrSÄCþ¤!C YÙq]µ’.á@žò<í¹üÊv"29@ÑùÉç_~~çËG1Õe&Ü Å8&ÄÒ½Göä~YüŸFüAÎÙmAý|usÅÜù~8rîÞvá7gOcxñ‡÷¯žz÷ãÕÛÕpþú§7ïWÓɳçÏý&,gréÅ/
+
+ÁAá/JdkHQê®iÞCJÂifˆPwúåm ËŸøö/l¿,eù~ùû?ÂòŠ‹.žY;„Cç9Ð[
+ÞW‹%¢diÿo¶N©n~Þ]ˆöÁŽ¬áâ)÷'rý,èŽ[1úî÷üè{îxò›éõpÁW:çütu}µòœË0&þð¹å/!·$Üâ:EzóÍBœØÅà&3z©1bˆsÖ4-ÆÖ
+å̬;Ø) I’/:¥bFñìÕ(X–FÒÚgdåÐLs5öÁiÈ:/Ò•sKzö[pœuuìÙâŒÔ@PcNv0¼9näKí·(³N¬†Z±4x>#Eªº¦jC½†¤¡Æ§@”m‡¼ö¨n±C/ úº¾‘Q÷BeVcþ.©ñ×y¬d'ýÑeÇ–@Š}ÝnyŒ’ÔÅÑ
+åá ó3kf!zÌ*#˜ËPçi¨¶ÔDq\SwöÊ Ôu#Nˆ =Ý8â¾’ÒƳR¶¡¨€À…“¡j¬—@¨! CÂb€!MdÉN±%,Õ¨‹“sn•ä“ú±ë,íb¯qboÌ‹XBÌÑé1pÑÖ”&q_&Éé‘ä12ýáÕGèô»‰<“¯ß¯~| ¼z½ún³ùi»ýpùâúV¹rN~‡šù—D¾€1tÎý©f”ìÈ4úãÑ÷öìfu²zvsöûþuRø¦ÿÑt-‘v‘ 5‰ùm}H§OË«Q´PŽ
+*Ï;V¯³¨L«aœ]ÑŠ–
+ Ô³S_XQ5q7Q/…ùR”ÊÜïmŒLŽœiÿRÅ`~ìÙ aÚüj™'ÿmÞh3}uuuv¹;_½¾9;»Cvx´U”"š0º½M–A Ž…ÔŠ&šƒíïæõ7ñpY öý¤1¥‚â²u
+5Ym.µ’ð³Íص1abJ•ŽY•½tl&rúnçk%¬W´p8ÏaÚDS÷9 ¥~˜4h½—CókL݃°û . eŒƒ²£Ù]M=Òßµ£…! &‘HR *ÚÁå!¥Ç vh\^‹æ t&2½jÌ µhj§Á"H ¯³xZÀ°Ž’Êæ|)
+s[]E`ÃÙågG‡³’Ó£c0%ßÅ}éó¦Á‡t7¿Šðp¤ˆ)~ŽÆŒ
+ar2êîë®°"°fu Òù{ 
+?b
+Òð•uùÏ¥ü4pgË «ø©¸½€f‹ #ð­6ÛO~ëæ¾oEÿ*Y9µV3VÉ[‡®q”’܈6nµ½¾|wýáê|õþÍÙ»Ýêòú|7‡¿‡ ÷e±‡½¥~™l÷
+‹øyñzª"Dñqèʇº¹@W¦ÃÐ5Ø ]¹ÃË}˜+~6æ
+d.Þ;ö§!W=‚\uátA.ïž¹ò£‹ï\ùQÈÅO\ÇðÊ=^ÑŽWü¼Bj«²<€±Ò1–?ÌXîs2În´'=±””vPý÷`,š0ÖÃߺ¹ï[ÿ\Œõ‰¸óvûßÏ‹ÝùÓáN
+Z{ÑŽA $3hG<4óãé³÷¥,"U_ƒ@>±5ТÒR
+òr°ï'ý‹8=¯ñ'Š;¥AC`g õ¡³®ŠíeóR䃃SÈ>8Ç\ì †IxK°¬$ŸCœ—Ä,÷’HVöƒÕÜî{]*SSîþ !nkXÉB"÷¸Ö’Z½+c‰|‹ °7Žl=v/.±‚0S3Î8ÄOÒÖ¥2Y#é{È '¦~Á0¹ê°Óè‰ÓNL“ÐŒ†ZLÂj’ÍÉvVcÿ>¾šìlì ­¦¿Ž ¾íŠÝaÈbê®Õ½ó¹'ˆQl¬ïãÄÞŒ”S7–ÑèóÄ8„;'×h 8Ù§¤šp+[g¤¡ü‹ÄHžhü>fÎÌ+’€¬ün^|z:óðÇYê_Íàê«v~AÚ™’AW!{‘ÎBÞ©0bf=Ø—Î
+±¤á ¥D:‹†$ (I>Ä\ÁøôU5¿ªæŸZ5%Ô.è –FL² MÌ8%Ó¡1²YÔ}¥–…Qv۶υ˜IæKeôJžÛ0ŒŒ0Ør0IEÊ‹ 5Å’K´Å:bÊ®õá‚íÚ‹ Ö»eÛ3ŽEv†er Ëä:úlfœª~3%¬ – óW…h /¡
+Ô|·Ô¤I•`ÄÌd;`q‰lqt±®fÞ”mÇN4÷üö®‘4 ×àçIôH]þ\{ª~É¡ÖAtî$ˆÇä8MŽx›Œ‹Á™úÔn­R™,˘u&Åc•é°@%óáŸæ€XVé&™âË:~ê[7÷|kµ9)÷RײÇþHzÇ8yx&› g-©SOSátˆ¹j‘­ÌIuíŠj–Ð~¬MÄŽÀ±Ç5•Ú”áCûÓZŸÙS•õ b÷ìUvJA¿²ÍË`‰K&×¼NÁ¥^0°ç¢š‚w¸’Ôa8^.²C‰ÿg¿J{ÛƵè÷ùü2@L®Z^?Å]Þt^ÛM0(03[MÜ:’!+É´¿þ’¢K^âlÄq“ÊW$/yyî¹çö|ßò¡¨CTã9Ôgó]õ²¥°+§÷ÎN¥ Ýx:– ñ›Û@}ò}W¥©và_pje¬ëgBÂ
+á/Ã
+ÊÓÕ€RJø&Í1×çž2sîœë¤BOë N-qê”[×oe¿ ŸzF§@C‡xšMu-ô‚µ’½]µ/J»r¢Œ¾“Ù¾2à×wA•*6»‹µ—ìiî’CuY!…4TAe| MÒ¶/Æ!Å­hA7º3”
+ØÆá.ʬG5Ïàž=¤™¸>$-n4*,€t1'}ú`>Â]f(ºÝC"3=”sÐ+fj£‡ú¯±°žÏþŠ>A—ÜW†ìAEh']7‡üdÙé‰@ºùËÀÉc jz7èQ<
+†,'Cs Z6á•Š[ÂZÛsχíR}iŽo¥]7úŠ€ëûñª ®ìúRÚž„«•›qdø¬‰Âh «¨Â^\1â ™V‹è{wð-ÝÕÅÞìÊL¶A2;O&3Ú÷·H<„;úH *$_”PB,Ç¥õ:“fù¥s™´œIˆ9î¯ãWÀkw©K¥ƒáåf/«ÑaÚ%ß6]‹ºJÔÍ!ºjA˜.Ím\¼\¼.´
+jIl¡
+  fÁ‹zdú–eॷzºðÞÔ{-ïÊG½G¶(òŽ%0¿k tK`Á» ½±ÏzÞQèíÀV¡÷jCk…Þç¤UèíЙB盧гn ¬.qç, j¼6ÃWÝ(ίø»Ø‘TJhlèò)f°áÂàQ q>Sôwe
+´ïï~Ú=ÑÑ9yµ˜.j÷æÎ]¥Ý[æxQ»7wîÚíÞ­ôŽÒßO>¦Éa6JòQr¶»[Ø ª¿ÙzñqbÞöÝáøN¿ÆƒBi˜žÆ¤Ÿ]NÏɇ(‰Îâ ¢ig;Ë^ûöU4€‹ÉùhP =NÓñä×$«Ïí¡ e½F}‚Z8¡c¨]ãí8Ê—Nf§ô26ÇÚ5:føóf´Çgaª=÷{FùycíWçQ6H«sb”]£cìqüON^®FûâUíÑ$ΪGy–~‹±·^qû@LóîïGs"¤áRŽù®ã¥ÿQjÍ7›0tñ®×ÜAHëŸëGÐí9ßìÞ|‹Ùà |ÜÑkŸ{qn#¯óÄúVD9òÂsr홯»cÂƜݓs6æ>>7Žù]§HWîêí9N°[Ý#®äÚQ˜@øq¶=bbÇz¼,»·ˆã¼m7èdvsœvïé^wT#ĹÁÊã,!^µ9 -†'}]—)‡4Ò\ú–3u{böNWßû:Àí;í(ÿ>Ž§[/öþ—¤×‰ù¦Ëÿö~’&;dï#ŽC~Åë}ˆƒ«¸|¿÷*½˜hD¿qF3È%ıf«ÍöŠ1¿vO;Ê£Á·›O[Å[?šŽ W<‹'qóe|ƒõ:ui„˜¤ù§xB Í[;° i¶#”üŽ§¯°]I>?ÿ¦d¸…wŸ*)¶÷:þB^’­d»¶ÔŽ^û%1¾ ´Ù;Œ²¼óXýqœ —„bñÌ
+ÍðNPÛyµÂü/>Å«4^Žòy'hN¾#@蛾Mà0´:@c2ß\ÅÉÁphŽo TÅSw©= ëöž§xhüPˆBÐ M!e¡g${hÑ_>|ŽfÝÅÈb³È*7ôÔqõdŽ„9oþ‰—z/ö¥Y¢›ª ~p|=?[–!¯Ò,‰³éŽ‰AmÒvãu/M°1[¶0(v[ÜžYeïx”Wà[ô§8BÎeÑpt9]€ç5‹Í3©7âÛG"Î[eÂ{ªXå0÷M(>σ)Ć)ž SX‰åtÔÜûy5µ8*6;^gé„GÃôºµ—ó3£±ÂªyÁ\H'Ñ(›L_Q®#‘êÂ<PιU©žtÁ»m(§ƒ±ÝNÿ.ÉÉö`š vŠmÚô=O³MËUœåÖB©³ £ì›];uÆtÙÅJ.8_fn1ãïtœ [ÿeA¨çQhOm
+ÃÆ;ÐCÖ/”&<O°@ÿÇ™b
+*Ó/ªß‡()s’é]ü“ÿŽ×."õnPCfV.gXg8Ë¿OÔRõ@ªÐÓEàñ„œ!FA÷)n÷3W‰þi…÷V6½Ž 6EmSÔžd·£ÈÙc·1O˜7 olxãIò†¯¨VQ=Ͻ@˜ʹV\!ežtq{
+É8`™€ä¸W,¡ŽÍ+ÍuÎ/ÈLÅîÁ0¢û%«Ã\RÓ‹RSñÕÿ#¡õç ƒ<äâÙÔ,‡$¢tÎÌ-ÈA”Îz•h×;%JK¨MãAZu- À-{x`8¥ƒ srBªb€å~ ^OxæÛ€
+î9ùå
+¦Àªe´b­X°W,
+endstream endobj 188 0 obj <</Filter[/FlateDecode]/Length 6788>>stream
+H‰ìWkOËýŽÄè/‘@ŠÙ~?®ÅÖ/ÝäÚF‡#˺vØËx–Ìvð¯OUõôÌô.ð#ÉÌŠeèé>]}ªêT5ãìÍõögbœýÆûÈ4{ÉÞ¾ãl¾ ïŽðüooMž–§ì1ÛÞb;ÏUuÜ^Wå.ûãöÖc6yº˜µì1¼šMKƒã&Óbµ˜Áª¶lØOÛ[;óåIÉ~®køÿEµü¸ ;s6éfÀŠ§Íò’Ÿóåǽbq¹ `ÕÕÙ¢†)å«â}I“Æ
+ÉlÕÌhà‘Ü6“óeó)Ö›Ñà‡²‰EÈô½Ä¼h.hˆï¹þŠº¼,"¤…KJ<©®òOªzþC—oÑå·0^\Uí»±4/Þ_Vƒ4Q®EWqI÷K¬WHh%<.¬NÇ?xH¬‰k‡ Mmv¸?ü~}VÏš–Œ_ÑÁ¡__-ëÃ,ê³Gºñi ©vXTeÛ–QtOîoöÎÛ#X¿j›Y~·K}ó IÍ_loÎJàÎßÏmÙ/½'‘E)T¿Í=CPÁ{–mÖ¯9z1eGå|XeEðrl`°F@Že–Žÿ£¬*P§´ÞJgIX†­z¨|ዦ,ë~.(7ÞWH£BÈ—‹aù“ëbXí½²ÖÀ\gƒ°7}”VO««biCàxf„ru£w²Õ/‹3h‹@Ø
+Ή$
+蘢©/#A´:,²Q£Çìà18%RÚ
+Wï(ܤåÖÂÓ Å1ù—áqdÓ ¹æ ‡ÍXp€HèÌO"9¾?tL‘WéþÌBŒ½Ö¤©{²TgLç&颩‚”ÂnšjQ„qƒÌGiy{0ÔâÉc¹@"Q#-nÕÁê˜h©”Cîzgqh¤Õy
+G AT"€£ÜÉZ КHÐÉØX[¤…yŽÂÚHx^b;å’Š )—(•P³磀7’L­]²†ïRzŒ
+=H6˜õ+%Ǽç¡}ƒÛu0†,
+€Úº™2ýKk¢çúüt©,=ä'è"Òéœä7‚{A* ql¹'O3ïcI`xô0R'ÑÉÔAF)õNRȨNV*£•½,ÉÄeà74+ ú†ëµÌjV”}ØÛa¼e%K‘“¤
+µô˜× ZR…AgÍŠKd±ªá–Ãáo yO©4¢
+†¦LtcNI°Ösª26Ž’2i ¯Á?˶PšRÞ¤96/(¤Î<sd3Pé‹kª**+® X\Ñó~„ëLìÏ,ׂpÁCžà ƒ >MõÚ9MÆÐáz4˜ßš³ÖE1õ*?,Ôð¨}mT@,ZI;ʱϰ†
+5
+Ø7­6
+l=¥²V×÷¿)t¸¦n«|ýˆ×†î|LÑ×gó»^²oý¡oH8Ýì0ÞåøB
+ý[.Ml†‡»+Aùßþ¢K-”Æ0€ï!Vc¨C Ð2»ÞöÝ=ntqYçhUs£¦Š Ïx„¶<fS?¢SãàRg"ã}xŶz·Ù÷Šâ
+Fjäÿêiø%¿U~ú8÷¾ý‹…_HZÜÉÇ3%ìÛgξˆ„É„å—ÐçµúÌ/?û(ä£<¤ô>Édþ7~ûD¿“M*ÿ¸©.Á;.’gÎdý²ê=Æ$ä»âÿ¾$ìéjF·4-žæŒÑüNùîÊ»Z+éG!ÈÁüß{yÑ×ò÷››c(yÜõ@4z¿o…ròÃÇÃjÉÓâ§þ‘ÿý;¾*¬Eëâ¿3’=Ñ"7 A|£|È6OYÞ×ÇG%Û¤y*¯úW_“(–µ7ŸøŽÕ^ÜÓïuÅÖµÇYî—vD„µ—ÿæB¿ûU,ó¿
+Â"£̌ùb¶‘’³ü4Ÿx9¬½\eCV¼©kÊ?Wø2aDÕwŠRþxSÿNùn”¿S碌2 žhèWå;tØù99Üè‚äU¬•£¥´Ç3ù‰›U~Ì>™ŸûŸ¾ ô‹«åcÈ„3"Çÿ}¸ÿÌsyúã_®zûUÊrAŸH)’åFÒìæêg%.Ïæßø3oôW ]'i(òŠ”ªáÕ`ž§ªú¸øGÖôøqïŸ,û¶%"ûåæjð˜ÿÕµ[R‹£¸ø {AÈÈJëŽÑdõÇ‹OãŒB²”ò¼ BPš´ôg€Ë„…yÀ.2?3T~V4
+¸{ëx¾§J{ÛE‚oÖÀ¶«´(܈¦t( ¬VdK…ü˜&jx=ÆÙKýTÃ\’à©8n,qšr Ö:Æ\<Ãëh¨Qàå[ÎŒó6ŸÐ4]нœgw‹‡{dó+×Ë×'vüê¡v„D’~FUhÌ6ÙéÔY=/$]9Á(sŽÄRð®mdßbšD1Ì€i)ŠâZÉvI(cØQ‰…«}ô—Zˆ_6 ]×÷’‹
+ÈÕ]2
+÷ ¨=¢±è
+÷ ¨=¢±è
+ _> 5
+¼ã쥆ªa.IðT7‚8M9
+Pkc.žáu4Ô(ðr£2ã¼Í¨è½ržÝ-îAͯ4×ÍV”7ÊÈ»'vüê¡v„D’~FUhÌ6ÙéÔY=/$]9Á(wŽÄRð® °äÄ4‰b˜ÓR3ĵ’í’PÆ °£ Wûè/µÃl8º®/î%!«»d
+žf뻤
+H@w‘T.HbÓÒKA“DDv—i饠­h–‘6+-
+¸Át2ò'#ÇslmWì`k`ÛUZŒ€nD
+S:PV#²¥B·PC¯Ç8{©Ÿj˜K<Ç… NSŽÔZǘ‹gx 5
+¼|¬Ì8oó)zÁœgw‹‡{dó+ͽ³å2òz¨]!‘¤ŸQ$³ÍD6B:uVÏ IWE0Ê‚#±¼ëFsûJÓ$ŠaLKQ ÏŽ¶KBƒÈŽJ`Öá_j!ŽÙ°t]_ÝK.B*\Èí]B
+H@{‘T.HbÓÒKA“DDv—i饠­h–‘6+-
+¸Á­7M'Cç”®ÆXì`k`ÛUZŒ€nD
+S:PV#²¥B·PC¯Ç8{©Ÿj˜K<Ç… NSŽÔZǘ‹gx 5
+¼ÜxÍ8oó)zÁœgw‹‡{dó+ͽ³å2òî‰=åƒÎj×AH$égT…Él3‘NÕóBÒ•CŒ2‡àH,ïºÑÆÖ… ¦IÃü—–¢!ž}yÛ%¡ŒAdG%
+0ëè/µ¿lº®/î%!CÈÝ]B
+
+šf2àØ8«¤·‚¶æJ±
+qjQ©nÌõ¼˜¿BÝ'ÝÓó$Ê…<ruÇjÈç5µ;ÏgšÝ+^š†x¶ëÈŽI‡rõ<“ªÈ‘0¦ÜaK ï»Ð\Çx„<
+Bl«¤$zˆm$ûˆ|B`ßJ*\§[ÿ—Y˜]߃{)¤Ï%2º¿
+ª…¹dÞ{‘n‰q6å$@q …üÄãØP“ÀË•G!N-*Õyù¢žóW²û¤{užD¹G®îØñ_7µ;ÏgšÝ+^š†x¶ëÈŽI‡rõ<“ªÈ‘0¦ÜéX¢`S ¹×wÍOFSãyò(±m°’’ègŽefûˆ|BhßJdæ“2ƒ˜2"<îƒhíˆ
+endstream endobj 189 0 obj <</Filter[/FlateDecode]/Length 3958>>stream
+H‰ì—Qoã8Ç߸ï0@q@¸Eã4IÛÛ§¹6)\ƒ¦÷vPd: *K$§í·?ÚÓm­Ä‰h4måŒý0ƒ™6"Eþù;¿_ŠXƒüíÛ?ÿþ·ü/úv:‘ö[ç)RÅð{þ‡}^ÁËÏßNgV/åÂ5X3‘ýeÑŠ?@|¥„Òæ·j{ÉÒ¿Ìÿøù×é§ÿùùö¯â_×Kn—J2ýüó?þxóg_8Ï,˜—7œ~ךmÛœ‹çD³ûebGm÷‘QÝLÆc¥SfƒˆÆ2½
+x…Óçܬ·¢òd)€^Žùf1îÅ ¿Bþ­”ØW"šI³bøFþL+Ç!ˆÒèúîPÆÐè^,ƒÀê€ß\¥â5ÄYàw±PziïSp•[ô]oéj%„Zƒž2cAÿ`[Ö®£Ú€®öl7ˬºÍÓFƒ-›7„Pª)~
+­Fbt‚ ìœŒ‹‡rwÓz´ih¬þŒ.%^4Á8Ä$²yc¹Èb¸b«<2"¥ëio0ôS™¥ô5ªl`Ôõê…ç ÎÐ$M@nxêÅ|„y±7ÖÝò Ï?I2³ûâU¤·žNÚò9¦5ÐÝÌè‰qZ‰¼ÚÖ:¢ÝÁW­¹¥à çyÿ¹csARLŸSÑ流?@LïÄMá*²U4™‘D[ Ã}dT7“ñXi”^ADc™^€áÞ‚vËþW÷¡ªŸ÷`O®IýhÛ)Œ™å«(‡<Y
+ ×Ÿc~L“*òN*«™4+†oäÏ´òp‚( ¯rÊÝ‹eXð›ë]cØaÔgE€õ„Z•[ô~‘¥•j zÊŒÅe‚ lY$Ų˳!Ü,³ê6O ¶lÞB©¦øi(´‰Ñu‚²s2.ÊÝMëѦ¡±"‰M01m'*™7†‹,†+¶Ê##Rº.AöCß8•YJ_£ÊÖA
+W‘­¢ÉŒ$Úî#£º™ŒÇJ£ô
+"Ëôì ÷´;Xö¿ºõ}ËÅž\“úѶS3ËWQy²@¯?Çü˜&UäTV3iV ßÈŸiåá8Q^å&”14ºË °:à7׻ưè!Ί
+ —¢c~LC+ò-«™4+†oäÏ´q‚(ÿhÆüâ²D\¬ÞŒB'Õ´´íRÖ Ç!ÊÎɸx(—;­G›†ÆJ’+P0N¬Ø²y0‚Òß±[9p
+czamõú{‹ËaO–è¥è˜ÓÔŠ¼SËj&ÍŠáù3­@‡ ŠÃ?›1¿¸C÷7ã†Ð¹ /eßp‚ ìœŒ‹‡r¹Óz´ih¬-)ßV^Šœ,™£(ý»•çóËáYwà]e[9ÐÊV´r •±¶r •“ƒþÙù°×­²kå@+Z9ÐÊV´r •¿„ˆ¢Á`؆çç­hõ@«Z=ÐêV´zà—Õ½þàübpýrz࢕­¨ª ð›k ”ú¬ð»X(½´÷)‰»Ê-zÿpÑJµ=eÇÆ&ðrï:ª èjφp³ÌªÛ<m4زyC[!Ø
+AW~5ao0ôÉ™¥ENH’¬l`Ôíú
+W‘­¢ÉŒ$Úî#£ò®¯ŸŽezv†rí–þ¯nD§Ñå êºçÝKßðr`rMjMÛNaŒ/,®^ou9ìÉR
+¼ý*†iS+C§4g)ÖgÉÒ/Ûüðv¤·NÚò9¦5ÐÝìø™ Z‰¼Ù¶º¢æàÙþà UÿyàsIRL_Sѧ’Z<BFïÄ]árÙrMf¬ÐèpŸÕdš¦Ú ôŠ"š‚›%÷¸· ÝÁ²ÿÝ}蜖ô»Î.ÿ¦7¤Î´íÇô
+Õ–G¾XI W¢g~L3‹gVa¸²kŽ/´òð¢(à;ÚZÝ«eX= ðÌMÓ@ö d¥ °dÛå}Xn-¥Þ€™q[àZÁ%¶,’viòì7/ }W¥[7ï¡Ò3<œj#1úQPöÎR÷QÞnÞŽ6•°)|h’ ÈhÛQͼ3„B–\óu‘Òw‰‚t\…Æ©*súBU·Žõƒz!Ã9ˆsŒ
+ú°Ü2ZJ½3ã¶Àµ‚KlY$íÒäÙn^ú®J ¶nÞB¥gx48ÕFbô¢ ì¥î£¼Ý¼m+a5RøÐ$Ѷ£šyg…,3¸æë*2"¥ïé ¹
+SUæô…ªn ëõB†sçŠ& ßyDÄ|‚¹Û Û€nùDŠ÷¿X”¶ùáíHo;´åsLk¡»Ùñ3´y³muEÍÁ³ýÁ.ªþóÀç’¤˜¾¦¢?N%µx„ŒÞ‰»Âå²åšÌX¡-Ðá>3ªÉ4MµAéE47K(îqoA»ƒeÿ»ûÐù ß%¿ú—Ipvù0½!u¦m§8¦×íŸÉàrouyì‹•z-zæÇ4µXpj†+»æøGñB+Ï!ŠâÏfÌ/nKÄÍê¿qG蔞ÕÖ]ʾá9DAÙ;KÝGyÜy;Ú<6V‚–TX’ bÅÖÍ£Q”áŽ}Ò‡Ò£á þ(=Òš'5ðƒÕÀþw µµ4ºWË(°z$à™ T<Ê—Òø[.µYsð.·(èÃ#Óh)õÌŒ[†·\bËjºªwл=;ÂÍËBßUi£ÁÖÍ;Bx’·'yëËÛ.
+YfpÍ×UdDJß%
+ÒAr§ªÌ]õ‘$uÝ:
+@Öê… ç Î0T³€ü'À
+endstream endobj 162 0 obj [/ICCBased 170 0 R] endobj 190 0 obj <</CreationDate(D:20090527042239-04'00')/Creator(Adobe Illustrator CS4)/ModDate(D:20090730214335-05'00')/Producer(Adobe PDF library 9.00)/Title(colorbox)>> endobj xref
+0 191
+0000000004 65535 f
+0000000016 00000 n
+0000000076 00000 n
+0000048436 00000 n
+0000000005 00000 f
+0000000006 00000 f
+0000000007 00000 f
+0000000008 00000 f
+0000000009 00000 f
+0000000010 00000 f
+0000000011 00000 f
+0000000012 00000 f
+0000000013 00000 f
+0000000014 00000 f
+0000000015 00000 f
+0000000016 00000 f
+0000000017 00000 f
+0000000018 00000 f
+0000000019 00000 f
+0000000020 00000 f
+0000000021 00000 f
+0000000022 00000 f
+0000000023 00000 f
+0000000024 00000 f
+0000000025 00000 f
+0000000026 00000 f
+0000000027 00000 f
+0000000028 00000 f
+0000000029 00000 f
+0000000030 00000 f
+0000000031 00000 f
+0000000032 00000 f
+0000000033 00000 f
+0000000034 00000 f
+0000000035 00000 f
+0000000036 00000 f
+0000000037 00000 f
+0000000038 00000 f
+0000000039 00000 f
+0000000040 00000 f
+0000000041 00000 f
+0000000042 00000 f
+0000000043 00000 f
+0000000044 00000 f
+0000000045 00000 f
+0000000046 00000 f
+0000000047 00000 f
+0000000048 00000 f
+0000000049 00000 f
+0000000050 00000 f
+0000000051 00000 f
+0000000052 00000 f
+0000000053 00000 f
+0000000054 00000 f
+0000000055 00000 f
+0000000056 00000 f
+0000000057 00000 f
+0000000058 00000 f
+0000000059 00000 f
+0000000060 00000 f
+0000000061 00000 f
+0000000062 00000 f
+0000000063 00000 f
+0000000064 00000 f
+0000000065 00000 f
+0000000066 00000 f
+0000000067 00000 f
+0000000068 00000 f
+0000000069 00000 f
+0000000070 00000 f
+0000000071 00000 f
+0000000072 00000 f
+0000000073 00000 f
+0000000074 00000 f
+0000000075 00000 f
+0000000076 00000 f
+0000000077 00000 f
+0000000078 00000 f
+0000000079 00000 f
+0000000080 00000 f
+0000000081 00000 f
+0000000082 00000 f
+0000000083 00000 f
+0000000084 00000 f
+0000000085 00000 f
+0000000086 00000 f
+0000000087 00000 f
+0000000088 00000 f
+0000000089 00000 f
+0000000090 00000 f
+0000000091 00000 f
+0000000092 00000 f
+0000000093 00000 f
+0000000094 00000 f
+0000000095 00000 f
+0000000096 00000 f
+0000000097 00000 f
+0000000098 00000 f
+0000000099 00000 f
+0000000100 00000 f
+0000000101 00000 f
+0000000102 00000 f
+0000000103 00000 f
+0000000104 00000 f
+0000000105 00000 f
+0000000106 00000 f
+0000000107 00000 f
+0000000108 00000 f
+0000000109 00000 f
+0000000110 00000 f
+0000000111 00000 f
+0000000112 00000 f
+0000000113 00000 f
+0000000114 00000 f
+0000000115 00000 f
+0000000117 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000000000 00000 f
+0000051202 00000 n
+0000048489 00000 n
+0000048844 00000 n
+0000049045 00000 n
+0000061445 00000 n
+0000058207 00000 n
+0000050103 00000 n
+0000049109 00000 n
+0000231123 00000 n
+0000049538 00000 n
+0000049588 00000 n
+0000055520 00000 n
+0000055406 00000 n
+0000051720 00000 n
+0000051805 00000 n
+0000052189 00000 n
+0000055557 00000 n
+0000058244 00000 n
+0000061521 00000 n
+0000062006 00000 n
+0000062952 00000 n
+0000069751 00000 n
+0000084919 00000 n
+0000102822 00000 n
+0000111395 00000 n
+0000126519 00000 n
+0000132206 00000 n
+0000141391 00000 n
+0000143749 00000 n
+0000159943 00000 n
+0000177431 00000 n
+0000183301 00000 n
+0000187819 00000 n
+0000205653 00000 n
+0000220229 00000 n
+0000227091 00000 n
+0000231160 00000 n
+trailer
+<</Size 191/Root 1 0 R/Info 190 0 R/ID[<7EB5FF43BD08164184F35B8300F050C9><E617EB833E197F43BC059F7255614CEE>]>>
+startxref
+231333
+%%EOF
diff --git a/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox-min.js b/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox-min.js
new file mode 100644
index 000000000..9db7adf75
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox-min.js
@@ -0,0 +1,4 @@
+// ColorBox v1.3.19.3 - jQuery lightbox plugin
+// (c) 2011 Jack Moore - jacklmoore.com
+// License: http://www.opensource.org/licenses/mit-license.php
+(function(a,b,c){function Z(c,d,e){var g=b.createElement(c);return d&&(g.id=f+d),e&&(g.style.cssText=e),a(g)}function $(a){var b=y.length,c=(Q+a)%b;return c<0?b+c:c}function _(a,b){return Math.round((/%/.test(a)?(b==="x"?z.width():z.height())/100:1)*parseInt(a,10))}function ab(a){return K.photo||/\.(gif|png|jpe?g|bmp|ico)((#|\?).*)?$/i.test(a)}function bb(){var b,c=a.data(P,e);c==null?(K=a.extend({},d),console&&console.log&&console.log("Error: cboxElement missing settings object")):K=a.extend({},c);for(b in K)a.isFunction(K[b])&&b.slice(0,2)!=="on"&&(K[b]=K[b].call(P));K.rel=K.rel||P.rel||"nofollow",K.href=K.href||a(P).attr("href"),K.title=K.title||P.title,typeof K.href=="string"&&(K.href=a.trim(K.href))}function cb(b,c){a.event.trigger(b),c&&c.call(P)}function db(){var a,b=f+"Slideshow_",c="click."+f,d,e,g;K.slideshow&&y[1]?(d=function(){F.text(K.slideshowStop).unbind(c).bind(j,function(){if(K.loop||y[Q+1])a=setTimeout(W.next,K.slideshowSpeed)}).bind(i,function(){clearTimeout(a)}).one(c+" "+k,e),r.removeClass(b+"off").addClass(b+"on"),a=setTimeout(W.next,K.slideshowSpeed)},e=function(){clearTimeout(a),F.text(K.slideshowStart).unbind([j,i,k,c].join(" ")).one(c,function(){W.next(),d()}),r.removeClass(b+"on").addClass(b+"off")},K.slideshowAuto?d():e()):r.removeClass(b+"off "+b+"on")}function eb(b){U||(P=b,bb(),y=a(P),Q=0,K.rel!=="nofollow"&&(y=a("."+g).filter(function(){var b=a.data(this,e),c;return b&&(c=b.rel||this.rel),c===K.rel}),Q=y.index(P),Q===-1&&(y=y.add(P),Q=y.length-1)),S||(S=T=!0,r.show(),K.returnFocus&&a(P).blur().one(l,function(){a(this).focus()}),q.css({opacity:+K.opacity,cursor:K.overlayClose?"pointer":"auto"}).show(),K.w=_(K.initialWidth,"x"),K.h=_(K.initialHeight,"y"),W.position(),o&&z.bind("resize."+p+" scroll."+p,function(){q.css({width:z.width(),height:z.height(),top:z.scrollTop(),left:z.scrollLeft()})}).trigger("resize."+p),cb(h,K.onOpen),J.add(D).hide(),I.html(K.close).show()),W.load(!0))}function fb(){!r&&b.body&&(Y=!1,z=a(c),r=Z(X).attr({id:e,"class":n?f+(o?"IE6":"IE"):""}).hide(),q=Z(X,"Overlay",o?"position:absolute":"").hide(),s=Z(X,"Wrapper"),t=Z(X,"Content").append(A=Z(X,"LoadedContent","width:0; height:0; overflow:hidden"),C=Z(X,"LoadingOverlay").add(Z(X,"LoadingGraphic")),D=Z(X,"Title"),E=Z(X,"Current"),G=Z(X,"Next"),H=Z(X,"Previous"),F=Z(X,"Slideshow").bind(h,db),I=Z(X,"Close")),s.append(Z(X).append(Z(X,"TopLeft"),u=Z(X,"TopCenter"),Z(X,"TopRight")),Z(X,!1,"clear:left").append(v=Z(X,"MiddleLeft"),t,w=Z(X,"MiddleRight")),Z(X,!1,"clear:left").append(Z(X,"BottomLeft"),x=Z(X,"BottomCenter"),Z(X,"BottomRight"))).find("div div").css({"float":"left"}),B=Z(X,!1,"position:absolute; width:9999px; visibility:hidden; display:none"),J=G.add(H).add(E).add(F),a(b.body).append(q,r.append(s,B)))}function gb(){return r?(Y||(Y=!0,L=u.height()+x.height()+t.outerHeight(!0)-t.height(),M=v.width()+w.width()+t.outerWidth(!0)-t.width(),N=A.outerHeight(!0),O=A.outerWidth(!0),r.css({"padding-bottom":L,"padding-right":M}),G.click(function(){W.next()}),H.click(function(){W.prev()}),I.click(function(){W.close()}),q.click(function(){K.overlayClose&&W.close()}),a(b).bind("keydown."+f,function(a){var b=a.keyCode;S&&K.escKey&&b===27&&(a.preventDefault(),W.close()),S&&K.arrowKey&&y[1]&&(b===37?(a.preventDefault(),H.click()):b===39&&(a.preventDefault(),G.click()))}),a("."+g,b).live("click",function(a){a.which>1||a.shiftKey||a.altKey||a.metaKey||(a.preventDefault(),eb(this))})),!0):!1}var d={transition:"elastic",speed:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,inline:!1,html:!1,iframe:!1,fastIframe:!0,photo:!1,href:!1,title:!1,rel:!1,opacity:.9,preloading:!0,current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",open:!1,returnFocus:!0,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:undefined},e="colorbox",f="cbox",g=f+"Element",h=f+"_open",i=f+"_load",j=f+"_complete",k=f+"_cleanup",l=f+"_closed",m=f+"_purge",n=!a.support.opacity&&!a.support.style,o=n&&!c.XMLHttpRequest,p=f+"_IE6",q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X="div",Y;if(a.colorbox)return;a(fb),W=a.fn[e]=a[e]=function(b,c){var f=this;b=b||{},fb();if(gb()){if(!f[0]){if(f.selector)return f;f=a("<a/>"),b.open=!0}c&&(b.onComplete=c),f.each(function(){a.data(this,e,a.extend({},a.data(this,e)||d,b))}).addClass(g),(a.isFunction(b.open)&&b.open.call(f)||b.open)&&eb(f[0])}return f},W.position=function(a,b){function i(a){u[0].style.width=x[0].style.width=t[0].style.width=a.style.width,t[0].style.height=v[0].style.height=w[0].style.height=a.style.height}var c=0,d=0,e=r.offset(),g,h;z.unbind("resize."+f),r.css({top:-9e4,left:-9e4}),g=z.scrollTop(),h=z.scrollLeft(),K.fixed&&!o?(e.top-=g,e.left-=h,r.css({position:"fixed"})):(c=g,d=h,r.css({position:"absolute"})),K.right!==!1?d+=Math.max(z.width()-K.w-O-M-_(K.right,"x"),0):K.left!==!1?d+=_(K.left,"x"):d+=Math.round(Math.max(z.width()-K.w-O-M,0)/2),K.bottom!==!1?c+=Math.max(z.height()-K.h-N-L-_(K.bottom,"y"),0):K.top!==!1?c+=_(K.top,"y"):c+=Math.round(Math.max(z.height()-K.h-N-L,0)/2),r.css({top:e.top,left:e.left}),a=r.width()===K.w+O&&r.height()===K.h+N?0:a||0,s[0].style.width=s[0].style.height="9999px",r.dequeue().animate({width:K.w+O,height:K.h+N,top:c,left:d},{duration:a,complete:function(){i(this),T=!1,s[0].style.width=K.w+O+M+"px",s[0].style.height=K.h+N+L+"px",K.reposition&&setTimeout(function(){z.bind("resize."+f,W.position)},1),b&&b()},step:function(){i(this)}})},W.resize=function(a){S&&(a=a||{},a.width&&(K.w=_(a.width,"x")-O-M),a.innerWidth&&(K.w=_(a.innerWidth,"x")),A.css({width:K.w}),a.height&&(K.h=_(a.height,"y")-N-L),a.innerHeight&&(K.h=_(a.innerHeight,"y")),!a.innerHeight&&!a.height&&(A.css({height:"auto"}),K.h=A.height()),A.css({height:K.h}),W.position(K.transition==="none"?0:K.speed))},W.prep=function(b){function g(){return K.w=K.w||A.width(),K.w=K.mw&&K.mw<K.w?K.mw:K.w,K.w}function h(){return K.h=K.h||A.height(),K.h=K.mh&&K.mh<K.h?K.mh:K.h,K.h}if(!S)return;var c,d=K.transition==="none"?0:K.speed;A.remove(),A=Z(X,"LoadedContent").append(b),A.hide().appendTo(B.show()).css({width:g(),overflow:K.scrolling?"auto":"hidden"}).css({height:h()}).prependTo(t),B.hide(),a(R).css({"float":"none"}),o&&a("select").not(r.find("select")).filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one(k,function(){this.style.visibility="inherit"}),c=function(){function s(){n&&r[0].style.removeAttribute("filter")}var b,c,g=y.length,h,i="frameBorder",k="allowTransparency",l,o,p,q;if(!S)return;l=function(){clearTimeout(V),C.hide(),cb(j,K.onComplete)},n&&R&&A.fadeIn(100),D.html(K.title).add(A).show();if(g>1){typeof K.current=="string"&&E.html(K.current.replace("{current}",Q+1).replace("{total}",g)).show(),G[K.loop||Q<g-1?"show":"hide"]().html(K.next),H[K.loop||Q?"show":"hide"]().html(K.previous),K.slideshow&&F.show();if(K.preloading){b=[$(-1),$(1)];while(c=y[b.pop()])q=a.data(c,e),q&&q.href?(o=q.href,a.isFunction(o)&&(o=o.call(c))):o=c.href,ab(o)&&(p=new Image,p.src=o)}}else J.hide();K.iframe?(h=Z("iframe")[0],i in h&&(h[i]=0),k in h&&(h[k]="true"),h.name=f+ +(new Date),K.fastIframe?l():a(h).one("load",l),h.src=K.href,K.scrolling||(h.scrolling="no"),a(h).addClass(f+"Iframe").appendTo(A).one(m,function(){h.src="//about:blank"})):l(),K.transition==="fade"?r.fadeTo(d,1,s):s()},K.transition==="fade"?r.fadeTo(d,0,function(){W.position(0,c)}):W.position(d,c)},W.load=function(b){var c,d,e=W.prep;T=!0,R=!1,P=y[Q],b||bb(),cb(m),cb(i,K.onLoad),K.h=K.height?_(K.height,"y")-N-L:K.innerHeight&&_(K.innerHeight,"y"),K.w=K.width?_(K.width,"x")-O-M:K.innerWidth&&_(K.innerWidth,"x"),K.mw=K.w,K.mh=K.h,K.maxWidth&&(K.mw=_(K.maxWidth,"x")-O-M,K.mw=K.w&&K.w<K.mw?K.w:K.mw),K.maxHeight&&(K.mh=_(K.maxHeight,"y")-N-L,K.mh=K.h&&K.h<K.mh?K.h:K.mh),c=K.href,V=setTimeout(function(){C.show()},100),K.inline?(Z(X).hide().insertBefore(a(c)[0]).one(m,function(){a(this).replaceWith(A.children())}),e(a(c))):K.iframe?e(" "):K.html?e(K.html):ab(c)?(a(R=new Image).addClass(f+"Photo").error(function(){K.title=!1,e(Z(X,"Error").html(K.imgError))}).load(function(){var a;R.onload=null,K.scalePhotos&&(d=function(){R.height-=R.height*a,R.width-=R.width*a},K.mw&&R.width>K.mw&&(a=(R.width-K.mw)/R.width,d()),K.mh&&R.height>K.mh&&(a=(R.height-K.mh)/R.height,d())),K.h&&(R.style.marginTop=Math.max(K.h-R.height,0)/2+"px"),y[1]&&(K.loop||y[Q+1])&&(R.style.cursor="pointer",R.onclick=function(){W.next()}),n&&(R.style.msInterpolationMode="bicubic"),setTimeout(function(){e(R)},1)}),setTimeout(function(){R.src=c},1)):c&&B.load(c,K.data,function(b,c,d){e(c==="error"?Z(X,"Error").html(K.xhrError):a(this).contents())})},W.next=function(){!T&&y[1]&&(K.loop||y[Q+1])&&(Q=$(1),W.load())},W.prev=function(){!T&&y[1]&&(K.loop||Q)&&(Q=$(-1),W.load())},W.close=function(){S&&!U&&(U=!0,S=!1,cb(k,K.onCleanup),z.unbind("."+f+" ."+p),q.fadeTo(200,0),r.stop().fadeTo(300,0,function(){r.add(q).css({opacity:1,cursor:"auto"}).hide(),cb(m),A.remove(),setTimeout(function(){U=!1,cb(l,K.onClosed)},1)}))},W.remove=function(){a([]).add(r).add(q).remove(),r=null,a("."+g).removeData(e).removeClass(g).die()},W.element=function(){return a(P)},W.settings=d})(jQuery,document,this); \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox.js b/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox.js
new file mode 100644
index 000000000..28673a45d
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox.js
@@ -0,0 +1,926 @@
+// ColorBox v1.3.19.3 - jQuery lightbox plugin
+// (c) 2011 Jack Moore - jacklmoore.com
+// License: http://www.opensource.org/licenses/mit-license.php
+(function ($, document, window) {
+ var
+ // Default settings object.
+ // See http://jacklmoore.com/colorbox for details.
+ defaults = {
+ transition: "elastic",
+ speed: 300,
+ width: false,
+ initialWidth: "600",
+ innerWidth: false,
+ maxWidth: false,
+ height: false,
+ initialHeight: "450",
+ innerHeight: false,
+ maxHeight: false,
+ scalePhotos: true,
+ scrolling: true,
+ inline: false,
+ html: false,
+ iframe: false,
+ fastIframe: true,
+ photo: false,
+ href: false,
+ title: false,
+ rel: false,
+ opacity: 0.9,
+ preloading: true,
+
+ current: "image {current} of {total}",
+ previous: "previous",
+ next: "next",
+ close: "close",
+ xhrError: "This content failed to load.",
+ imgError: "This image failed to load.",
+
+ open: false,
+ returnFocus: true,
+ reposition: true,
+ loop: true,
+ slideshow: false,
+ slideshowAuto: true,
+ slideshowSpeed: 2500,
+ slideshowStart: "start slideshow",
+ slideshowStop: "stop slideshow",
+ onOpen: false,
+ onLoad: false,
+ onComplete: false,
+ onCleanup: false,
+ onClosed: false,
+ overlayClose: true,
+ escKey: true,
+ arrowKey: true,
+ top: false,
+ bottom: false,
+ left: false,
+ right: false,
+ fixed: false,
+ data: undefined
+ },
+
+ // Abstracting the HTML and event identifiers for easy rebranding
+ colorbox = 'colorbox',
+ prefix = 'cbox',
+ boxElement = prefix + 'Element',
+
+ // Events
+ event_open = prefix + '_open',
+ event_load = prefix + '_load',
+ event_complete = prefix + '_complete',
+ event_cleanup = prefix + '_cleanup',
+ event_closed = prefix + '_closed',
+ event_purge = prefix + '_purge',
+
+ // Special Handling for IE
+ isIE = !$.support.opacity && !$.support.style, // IE7 & IE8
+ isIE6 = isIE && !window.XMLHttpRequest, // IE6
+ event_ie6 = prefix + '_IE6',
+
+ // Cached jQuery Object Variables
+ $overlay,
+ $box,
+ $wrap,
+ $content,
+ $topBorder,
+ $leftBorder,
+ $rightBorder,
+ $bottomBorder,
+ $related,
+ $window,
+ $loaded,
+ $loadingBay,
+ $loadingOverlay,
+ $title,
+ $current,
+ $slideshow,
+ $next,
+ $prev,
+ $close,
+ $groupControls,
+
+ // Variables for cached values or use across multiple functions
+ settings,
+ interfaceHeight,
+ interfaceWidth,
+ loadedHeight,
+ loadedWidth,
+ element,
+ index,
+ photo,
+ open,
+ active,
+ closing,
+ loadingTimer,
+ publicMethod,
+ div = "div",
+ init;
+
+ // ****************
+ // HELPER FUNCTIONS
+ // ****************
+
+ // Convience function for creating new jQuery objects
+ function $tag(tag, id, css) {
+ var element = document.createElement(tag);
+
+ if (id) {
+ element.id = prefix + id;
+ }
+
+ if (css) {
+ element.style.cssText = css;
+ }
+
+ return $(element);
+ }
+
+ // Determine the next and previous members in a group.
+ function getIndex(increment) {
+ var
+ max = $related.length,
+ newIndex = (index + increment) % max;
+
+ return (newIndex < 0) ? max + newIndex : newIndex;
+ }
+
+ // Convert '%' and 'px' values to integers
+ function setSize(size, dimension) {
+ return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : $window.height()) / 100) : 1) * parseInt(size, 10));
+ }
+
+ // Checks an href to see if it is a photo.
+ // There is a force photo option (photo: true) for hrefs that cannot be matched by this regex.
+ function isImage(url) {
+ return settings.photo || /\.(gif|png|jpe?g|bmp|ico)((#|\?).*)?$/i.test(url);
+ }
+
+ // Assigns function results to their respective properties
+ function makeSettings() {
+ var i,
+ data = $.data(element, colorbox);
+
+ if (data == null) {
+ settings = $.extend({}, defaults);
+ if (console && console.log) {
+ console.log('Error: cboxElement missing settings object')
+ }
+ } else {
+ settings = $.extend({}, data);
+ }
+
+ for (i in settings) {
+ if ($.isFunction(settings[i]) && i.slice(0, 2) !== 'on') { // checks to make sure the function isn't one of the callbacks, they will be handled at the appropriate time.
+ settings[i] = settings[i].call(element);
+ }
+ }
+
+ settings.rel = settings.rel || element.rel || 'nofollow';
+ settings.href = settings.href || $(element).attr('href');
+ settings.title = settings.title || element.title;
+
+ if (typeof settings.href === "string") {
+ settings.href = $.trim(settings.href);
+ }
+ }
+
+ function trigger(event, callback) {
+ $.event.trigger(event);
+ if (callback) {
+ callback.call(element);
+ }
+ }
+
+ // Slideshow functionality
+ function slideshow() {
+ var
+ timeOut,
+ className = prefix + "Slideshow_",
+ click = "click." + prefix,
+ start,
+ stop,
+ clear;
+
+ if (settings.slideshow && $related[1]) {
+ start = function () {
+ $slideshow
+ .text(settings.slideshowStop)
+ .unbind(click)
+ .bind(event_complete, function () {
+ if (settings.loop || $related[index + 1]) {
+ timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
+ }
+ })
+ .bind(event_load, function () {
+ clearTimeout(timeOut);
+ })
+ .one(click + ' ' + event_cleanup, stop);
+ $box.removeClass(className + "off").addClass(className + "on");
+ timeOut = setTimeout(publicMethod.next, settings.slideshowSpeed);
+ };
+
+ stop = function () {
+ clearTimeout(timeOut);
+ $slideshow
+ .text(settings.slideshowStart)
+ .unbind([event_complete, event_load, event_cleanup, click].join(' '))
+ .one(click, function () {
+ publicMethod.next();
+ start();
+ });
+ $box.removeClass(className + "on").addClass(className + "off");
+ };
+
+ if (settings.slideshowAuto) {
+ start();
+ } else {
+ stop();
+ }
+ } else {
+ $box.removeClass(className + "off " + className + "on");
+ }
+ }
+
+ function launch(target) {
+ if (!closing) {
+
+ element = target;
+
+ makeSettings();
+
+ $related = $(element);
+
+ index = 0;
+
+ if (settings.rel !== 'nofollow') {
+ $related = $('.' + boxElement).filter(function () {
+ var data = $.data(this, colorbox),
+ relRelated;
+
+ if (data) {
+ relRelated = data.rel || this.rel;
+ }
+
+ return (relRelated === settings.rel);
+ });
+ index = $related.index(element);
+
+ // Check direct calls to ColorBox.
+ if (index === -1) {
+ $related = $related.add(element);
+ index = $related.length - 1;
+ }
+ }
+
+ if (!open) {
+ open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
+
+ $box.show();
+
+ if (settings.returnFocus) {
+ $(element).blur().one(event_closed, function () {
+ $(this).focus();
+ });
+ }
+
+ // +settings.opacity avoids a problem in IE when using non-zero-prefixed-string-values, like '.5'
+ $overlay.css({"opacity": +settings.opacity, "cursor": settings.overlayClose ? "pointer" : "auto"}).show();
+
+ // Opens inital empty ColorBox prior to content being loaded.
+ settings.w = setSize(settings.initialWidth, 'x');
+ settings.h = setSize(settings.initialHeight, 'y');
+ publicMethod.position();
+
+ if (isIE6) {
+ $window.bind('resize.' + event_ie6 + ' scroll.' + event_ie6, function () {
+ $overlay.css({width: $window.width(), height: $window.height(), top: $window.scrollTop(), left: $window.scrollLeft()});
+ }).trigger('resize.' + event_ie6);
+ }
+
+ trigger(event_open, settings.onOpen);
+
+ $groupControls.add($title).hide();
+
+ $close.html(settings.close).show();
+ }
+
+ publicMethod.load(true);
+ }
+ }
+
+ // ColorBox's markup needs to be added to the DOM prior to being called
+ // so that the browser will go ahead and load the CSS background images.
+ function appendHTML() {
+ if (!$box && document.body) {
+ init = false;
+
+ $window = $(window);
+ $box = $tag(div).attr({id: colorbox, 'class': isIE ? prefix + (isIE6 ? 'IE6' : 'IE') : ''}).hide();
+ $overlay = $tag(div, "Overlay", isIE6 ? 'position:absolute' : '').hide();
+ $wrap = $tag(div, "Wrapper");
+ $content = $tag(div, "Content").append(
+ $loaded = $tag(div, "LoadedContent", 'width:0; height:0; overflow:hidden'),
+ $loadingOverlay = $tag(div, "LoadingOverlay").add($tag(div, "LoadingGraphic")),
+ $title = $tag(div, "Title"),
+ $current = $tag(div, "Current"),
+ $next = $tag(div, "Next"),
+ $prev = $tag(div, "Previous"),
+ $slideshow = $tag(div, "Slideshow").bind(event_open, slideshow),
+ $close = $tag(div, "Close")
+ );
+
+ $wrap.append( // The 3x3 Grid that makes up ColorBox
+ $tag(div).append(
+ $tag(div, "TopLeft"),
+ $topBorder = $tag(div, "TopCenter"),
+ $tag(div, "TopRight")
+ ),
+ $tag(div, false, 'clear:left').append(
+ $leftBorder = $tag(div, "MiddleLeft"),
+ $content,
+ $rightBorder = $tag(div, "MiddleRight")
+ ),
+ $tag(div, false, 'clear:left').append(
+ $tag(div, "BottomLeft"),
+ $bottomBorder = $tag(div, "BottomCenter"),
+ $tag(div, "BottomRight")
+ )
+ ).find('div div').css({'float': 'left'});
+
+ $loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none');
+
+ $groupControls = $next.add($prev).add($current).add($slideshow);
+
+ $(document.body).append($overlay, $box.append($wrap, $loadingBay));
+ }
+ }
+
+ // Add ColorBox's event bindings
+ function addBindings() {
+ if ($box) {
+ if (!init) {
+ init = true;
+
+ // Cache values needed for size calculations
+ interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();//Subtraction needed for IE6
+ interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
+ loadedHeight = $loaded.outerHeight(true);
+ loadedWidth = $loaded.outerWidth(true);
+
+ // Setting padding to remove the need to do size conversions during the animation step.
+ $box.css({"padding-bottom": interfaceHeight, "padding-right": interfaceWidth});
+
+ // Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.
+ $next.click(function () {
+ publicMethod.next();
+ });
+ $prev.click(function () {
+ publicMethod.prev();
+ });
+ $close.click(function () {
+ publicMethod.close();
+ });
+ $overlay.click(function () {
+ if (settings.overlayClose) {
+ publicMethod.close();
+ }
+ });
+
+ // Key Bindings
+ $(document).bind('keydown.' + prefix, function (e) {
+ var key = e.keyCode;
+ if (open && settings.escKey && key === 27) {
+ e.preventDefault();
+ publicMethod.close();
+ }
+ if (open && settings.arrowKey && $related[1]) {
+ if (key === 37) {
+ e.preventDefault();
+ $prev.click();
+ } else if (key === 39) {
+ e.preventDefault();
+ $next.click();
+ }
+ }
+ });
+
+ $('.' + boxElement, document).live('click', function (e) {
+ // ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.
+ // See: http://jacklmoore.com/notes/click-events/
+ if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey)) {
+ e.preventDefault();
+ launch(this);
+ }
+ });
+ }
+ return true;
+ }
+ return false;
+ }
+
+ // Don't do anything if ColorBox already exists.
+ if ($.colorbox) {
+ return;
+ }
+
+ // Append the HTML when the DOM loads
+ $(appendHTML);
+
+
+ // ****************
+ // PUBLIC FUNCTIONS
+ // Usage format: $.fn.colorbox.close();
+ // Usage from within an iframe: parent.$.fn.colorbox.close();
+ // ****************
+
+ publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
+ var $this = this;
+
+ options = options || {};
+
+ appendHTML();
+
+ if (addBindings()) {
+ if (!$this[0]) {
+ if ($this.selector) { // if a selector was given and it didn't match any elements, go ahead and exit.
+ return $this;
+ }
+ // if no selector was given (ie. $.colorbox()), create a temporary element to work with
+ $this = $('<a/>');
+ options.open = true; // assume an immediate open
+ }
+
+ if (callback) {
+ options.onComplete = callback;
+ }
+
+ $this.each(function () {
+ $.data(this, colorbox, $.extend({}, $.data(this, colorbox) || defaults, options));
+ }).addClass(boxElement);
+
+ if (($.isFunction(options.open) && options.open.call($this)) || options.open) {
+ launch($this[0]);
+ }
+ }
+
+ return $this;
+ };
+
+ publicMethod.position = function (speed, loadedCallback) {
+ var
+ top = 0,
+ left = 0,
+ offset = $box.offset(),
+ scrollTop,
+ scrollLeft;
+
+ $window.unbind('resize.' + prefix);
+
+ // remove the modal so that it doesn't influence the document width/height
+ $box.css({top: -9e4, left: -9e4});
+
+ scrollTop = $window.scrollTop();
+ scrollLeft = $window.scrollLeft();
+
+ if (settings.fixed && !isIE6) {
+ offset.top -= scrollTop;
+ offset.left -= scrollLeft;
+ $box.css({position: 'fixed'});
+ } else {
+ top = scrollTop;
+ left = scrollLeft;
+ $box.css({position: 'absolute'});
+ }
+
+ // keeps the top and left positions within the browser's viewport.
+ if (settings.right !== false) {
+ left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.right, 'x'), 0);
+ } else if (settings.left !== false) {
+ left += setSize(settings.left, 'x');
+ } else {
+ left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
+ }
+
+ if (settings.bottom !== false) {
+ top += Math.max($window.height() - settings.h - loadedHeight - interfaceHeight - setSize(settings.bottom, 'y'), 0);
+ } else if (settings.top !== false) {
+ top += setSize(settings.top, 'y');
+ } else {
+ top += Math.round(Math.max($window.height() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
+ }
+
+ $box.css({top: offset.top, left: offset.left});
+
+ // setting the speed to 0 to reduce the delay between same-sized content.
+ speed = ($box.width() === settings.w + loadedWidth && $box.height() === settings.h + loadedHeight) ? 0 : speed || 0;
+
+ // this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
+ // but it has to be shrank down around the size of div#colorbox when it's done. If not,
+ // it can invoke an obscure IE bug when using iframes.
+ $wrap[0].style.width = $wrap[0].style.height = "9999px";
+
+ function modalDimensions(that) {
+ $topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = that.style.width;
+ $content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = that.style.height;
+ }
+
+ $box.dequeue().animate({width: settings.w + loadedWidth, height: settings.h + loadedHeight, top: top, left: left}, {
+ duration: speed,
+ complete: function () {
+ modalDimensions(this);
+
+ active = false;
+
+ // shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.
+ $wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
+ $wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
+
+ if (settings.reposition) {
+ setTimeout(function () { // small delay before binding onresize due to an IE8 bug.
+ $window.bind('resize.' + prefix, publicMethod.position);
+ }, 1);
+ }
+
+ if (loadedCallback) {
+ loadedCallback();
+ }
+ },
+ step: function () {
+ modalDimensions(this);
+ }
+ });
+ };
+
+ publicMethod.resize = function (options) {
+ if (open) {
+ options = options || {};
+
+ if (options.width) {
+ settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;
+ }
+ if (options.innerWidth) {
+ settings.w = setSize(options.innerWidth, 'x');
+ }
+ $loaded.css({width: settings.w});
+
+ if (options.height) {
+ settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;
+ }
+ if (options.innerHeight) {
+ settings.h = setSize(options.innerHeight, 'y');
+ }
+ if (!options.innerHeight && !options.height) {
+ $loaded.css({height: "auto"});
+ settings.h = $loaded.height();
+ }
+ $loaded.css({height: settings.h});
+
+ publicMethod.position(settings.transition === "none" ? 0 : settings.speed);
+ }
+ };
+
+ publicMethod.prep = function (object) {
+ if (!open) {
+ return;
+ }
+
+ var callback, speed = settings.transition === "none" ? 0 : settings.speed;
+
+ $loaded.remove();
+ $loaded = $tag(div, 'LoadedContent').append(object);
+
+ function getWidth() {
+ settings.w = settings.w || $loaded.width();
+ settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;
+ return settings.w;
+ }
+ function getHeight() {
+ settings.h = settings.h || $loaded.height();
+ settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;
+ return settings.h;
+ }
+
+ $loaded.hide()
+ .appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
+ .css({width: getWidth(), overflow: settings.scrolling ? 'auto' : 'hidden'})
+ .css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
+ .prependTo($content);
+
+ $loadingBay.hide();
+
+ // floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.
+ //$(photo).css({'float': 'none', marginLeft: 'auto', marginRight: 'auto'});
+
+ $(photo).css({'float': 'none'});
+
+ // Hides SELECT elements in IE6 because they would otherwise sit on top of the overlay.
+ if (isIE6) {
+ $('select').not($box.find('select')).filter(function () {
+ return this.style.visibility !== 'hidden';
+ }).css({'visibility': 'hidden'}).one(event_cleanup, function () {
+ this.style.visibility = 'inherit';
+ });
+ }
+
+ callback = function () {
+ var preload,
+ i,
+ total = $related.length,
+ iframe,
+ frameBorder = 'frameBorder',
+ allowTransparency = 'allowTransparency',
+ complete,
+ src,
+ img,
+ data;
+
+ if (!open) {
+ return;
+ }
+
+ function removeFilter() {
+ if (isIE) {
+ $box[0].style.removeAttribute('filter');
+ }
+ }
+
+ complete = function () {
+ clearTimeout(loadingTimer);
+ $loadingOverlay.hide();
+ trigger(event_complete, settings.onComplete);
+ };
+
+ if (isIE) {
+ //This fadeIn helps the bicubic resampling to kick-in.
+ if (photo) {
+ $loaded.fadeIn(100);
+ }
+ }
+
+ $title.html(settings.title).add($loaded).show();
+
+ if (total > 1) { // handle grouping
+ if (typeof settings.current === "string") {
+ $current.html(settings.current.replace('{current}', index + 1).replace('{total}', total)).show();
+ }
+
+ $next[(settings.loop || index < total - 1) ? "show" : "hide"]().html(settings.next);
+ $prev[(settings.loop || index) ? "show" : "hide"]().html(settings.previous);
+
+ if (settings.slideshow) {
+ $slideshow.show();
+ }
+
+ // Preloads images within a rel group
+ if (settings.preloading) {
+ preload = [
+ getIndex(-1),
+ getIndex(1)
+ ];
+ while (i = $related[preload.pop()]) {
+ data = $.data(i, colorbox);
+
+ if (data && data.href) {
+ src = data.href;
+ if ($.isFunction(src)) {
+ src = src.call(i);
+ }
+ } else {
+ src = i.href;
+ }
+
+ if (isImage(src)) {
+ img = new Image();
+ img.src = src;
+ }
+ }
+ }
+ } else {
+ $groupControls.hide();
+ }
+
+ if (settings.iframe) {
+ iframe = $tag('iframe')[0];
+
+ if (frameBorder in iframe) {
+ iframe[frameBorder] = 0;
+ }
+ if (allowTransparency in iframe) {
+ iframe[allowTransparency] = "true";
+ }
+ // give the iframe a unique name to prevent caching
+ iframe.name = prefix + (+new Date());
+ if (settings.fastIframe) {
+ complete();
+ } else {
+ $(iframe).one('load', complete);
+ }
+ iframe.src = settings.href;
+ if (!settings.scrolling) {
+ iframe.scrolling = "no";
+ }
+ $(iframe).addClass(prefix + 'Iframe').appendTo($loaded).one(event_purge, function () {
+ iframe.src = "//about:blank";
+ });
+ } else {
+ complete();
+ }
+
+ if (settings.transition === 'fade') {
+ $box.fadeTo(speed, 1, removeFilter);
+ } else {
+ removeFilter();
+ }
+ };
+
+ if (settings.transition === 'fade') {
+ $box.fadeTo(speed, 0, function () {
+ publicMethod.position(0, callback);
+ });
+ } else {
+ publicMethod.position(speed, callback);
+ }
+ };
+
+ publicMethod.load = function (launched) {
+ var href, setResize, prep = publicMethod.prep;
+
+ active = true;
+
+ photo = false;
+
+ element = $related[index];
+
+ if (!launched) {
+ makeSettings();
+ }
+
+ trigger(event_purge);
+
+ trigger(event_load, settings.onLoad);
+
+ settings.h = settings.height ?
+ setSize(settings.height, 'y') - loadedHeight - interfaceHeight :
+ settings.innerHeight && setSize(settings.innerHeight, 'y');
+
+ settings.w = settings.width ?
+ setSize(settings.width, 'x') - loadedWidth - interfaceWidth :
+ settings.innerWidth && setSize(settings.innerWidth, 'x');
+
+ // Sets the minimum dimensions for use in image scaling
+ settings.mw = settings.w;
+ settings.mh = settings.h;
+
+ // Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
+ // If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
+ if (settings.maxWidth) {
+ settings.mw = setSize(settings.maxWidth, 'x') - loadedWidth - interfaceWidth;
+ settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
+ }
+ if (settings.maxHeight) {
+ settings.mh = setSize(settings.maxHeight, 'y') - loadedHeight - interfaceHeight;
+ settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
+ }
+
+ href = settings.href;
+
+ loadingTimer = setTimeout(function () {
+ $loadingOverlay.show();
+ }, 100);
+
+ if (settings.inline) {
+ // Inserts an empty placeholder where inline content is being pulled from.
+ // An event is bound to put inline content back when ColorBox closes or loads new content.
+ $tag(div).hide().insertBefore($(href)[0]).one(event_purge, function () {
+ $(this).replaceWith($loaded.children());
+ });
+ prep($(href));
+ } else if (settings.iframe) {
+ // IFrame element won't be added to the DOM until it is ready to be displayed,
+ // to avoid problems with DOM-ready JS that might be trying to run in that iframe.
+ prep(" ");
+ } else if (settings.html) {
+ prep(settings.html);
+ } else if (isImage(href)) {
+ $(photo = new Image())
+ .addClass(prefix + 'Photo')
+ .error(function () {
+ settings.title = false;
+ prep($tag(div, 'Error').html(settings.imgError));
+ })
+ .load(function () {
+ var percent;
+ photo.onload = null; //stops animated gifs from firing the onload repeatedly.
+
+ if (settings.scalePhotos) {
+ setResize = function () {
+ photo.height -= photo.height * percent;
+ photo.width -= photo.width * percent;
+ };
+ if (settings.mw && photo.width > settings.mw) {
+ percent = (photo.width - settings.mw) / photo.width;
+ setResize();
+ }
+ if (settings.mh && photo.height > settings.mh) {
+ percent = (photo.height - settings.mh) / photo.height;
+ setResize();
+ }
+ }
+
+ if (settings.h) {
+ photo.style.marginTop = Math.max(settings.h - photo.height, 0) / 2 + 'px';
+ }
+
+ if ($related[1] && (settings.loop || $related[index + 1])) {
+ photo.style.cursor = 'pointer';
+ photo.onclick = function () {
+ publicMethod.next();
+ };
+ }
+
+ if (isIE) {
+ photo.style.msInterpolationMode = 'bicubic';
+ }
+
+ setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise.
+ prep(photo);
+ }, 1);
+ });
+
+ setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise.
+ photo.src = href;
+ }, 1);
+ } else if (href) {
+ $loadingBay.load(href, settings.data, function (data, status, xhr) {
+ prep(status === 'error' ? $tag(div, 'Error').html(settings.xhrError) : $(this).contents());
+ });
+ }
+ };
+
+ // Navigates to the next page/image in a set.
+ publicMethod.next = function () {
+ if (!active && $related[1] && (settings.loop || $related[index + 1])) {
+ index = getIndex(1);
+ publicMethod.load();
+ }
+ };
+
+ publicMethod.prev = function () {
+ if (!active && $related[1] && (settings.loop || index)) {
+ index = getIndex(-1);
+ publicMethod.load();
+ }
+ };
+
+ // Note: to use this within an iframe use the following format: parent.$.fn.colorbox.close();
+ publicMethod.close = function () {
+ if (open && !closing) {
+
+ closing = true;
+
+ open = false;
+
+ trigger(event_cleanup, settings.onCleanup);
+
+ $window.unbind('.' + prefix + ' .' + event_ie6);
+
+ $overlay.fadeTo(200, 0);
+
+ $box.stop().fadeTo(300, 0, function () {
+
+ $box.add($overlay).css({'opacity': 1, cursor: 'auto'}).hide();
+
+ trigger(event_purge);
+
+ $loaded.remove();
+
+ setTimeout(function () {
+ closing = false;
+ trigger(event_closed, settings.onClosed);
+ }, 1);
+ });
+ }
+ };
+
+ // Removes changes ColorBox made to the document, but does not remove the plugin
+ // from jQuery.
+ publicMethod.remove = function () {
+ $([]).add($box).add($overlay).remove();
+ $box = null;
+ $('.' + boxElement)
+ .removeData(colorbox)
+ .removeClass(boxElement)
+ .die();
+ };
+
+ // A method for fetching the current element ColorBox is referencing.
+ // returns a jQuery object.
+ publicMethod.element = function () {
+ return $(element);
+ };
+
+ publicMethod.settings = defaults;
+
+}(jQuery, document, this)); \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/ajax.html b/mod/colorbox/vendors/jquery/colorbox/content/ajax.html
new file mode 100644
index 000000000..e772638ad
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/ajax.html
@@ -0,0 +1,11 @@
+<div id='homer' style="background:url(../content/homer.jpg) right center no-repeat #ececec; height:135px; width:280px; padding:30px 10px;">
+ <strong>Homer</strong><br/>
+ <em>\noun\</em><br/>
+ <strong>1.</strong> American bonehead<br/>
+ <strong>2. Pull a Homer-</strong><br/>
+ to succeed despite<br/>
+ idiocy
+</div>
+<script>
+ $('#homer strong').css({color:'red'});
+</script> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/flash.html b/mod/colorbox/vendors/jquery/colorbox/content/flash.html
new file mode 100644
index 000000000..c83f7c44f
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/flash.html
@@ -0,0 +1,8 @@
+<div style="width:504px; height:412px; overflow:hidden;">
+ <object>
+ <param name="allowfullscreen" value="true" /><param name="wmode" value="opaque" />
+ <param name="allowscriptaccess" value="always" />
+ <param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2285902&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" />
+ <embed src="http://vimeo.com/moogaloop.swf?clip_id=2285902&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" wmode="opaque" allowscriptaccess="always" width="504" height="412"></embed>
+ </object>
+</div> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/homer.jpg b/mod/colorbox/vendors/jquery/colorbox/content/homer.jpg
new file mode 100644
index 000000000..87ec76c99
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/homer.jpg
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/marylou.jpg b/mod/colorbox/vendors/jquery/colorbox/content/marylou.jpg
new file mode 100644
index 000000000..4c717d276
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/marylou.jpg
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/ohoopee1.jpg b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee1.jpg
new file mode 100644
index 000000000..aae19a3e6
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee1.jpg
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/ohoopee2.jpg b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee2.jpg
new file mode 100644
index 000000000..206894489
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee2.jpg
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/content/ohoopee3.jpg b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee3.jpg
new file mode 100644
index 000000000..4d64d2400
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/content/ohoopee3.jpg
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/colorbox.css b/mod/colorbox/vendors/jquery/colorbox/example1/colorbox.css
new file mode 100644
index 000000000..397fe3dca
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/colorbox.css
@@ -0,0 +1,86 @@
+/*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:url(images/overlay.png) repeat 0 0;}
+#colorbox{}
+ #cboxTopLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px 0;}
+ #cboxTopRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px 0;}
+ #cboxBottomLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px -29px;}
+ #cboxBottomRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px -29px;}
+ #cboxMiddleLeft{width:21px; background:url(images/controls.png) left top repeat-y;}
+ #cboxMiddleRight{width:21px; background:url(images/controls.png) right top repeat-y;}
+ #cboxTopCenter{height:21px; background:url(images/border.png) 0 0 repeat-x;}
+ #cboxBottomCenter{height:21px; background:url(images/border.png) 0 -29px repeat-x;}
+ #cboxContent{background:#fff; overflow:hidden;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{margin-bottom:28px;}
+ #cboxTitle{position:absolute; bottom:4px; left:0; text-align:center; width:100%; color:#949494;}
+ #cboxCurrent{position:absolute; bottom:4px; left:58px; color:#949494;}
+ #cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;}
+ #cboxPrevious{position:absolute; bottom:0; left:0; background:url(images/controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;}
+ #cboxPrevious:hover{background-position:-75px -25px;}
+ #cboxNext{position:absolute; bottom:0; left:27px; background:url(images/controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;}
+ #cboxNext:hover{background-position:-50px -25px;}
+ #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
+ #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+ #cboxClose{position:absolute; bottom:0; right:0; background:url(images/controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;}
+ #cboxClose:hover{background-position:-25px -25px;}
+
+/*
+ The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
+ when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
+ See: http://jacklmoore.com/notes/ie-transparency-problems/
+*/
+.cboxIE #cboxTopLeft,
+.cboxIE #cboxTopCenter,
+.cboxIE #cboxTopRight,
+.cboxIE #cboxBottomLeft,
+.cboxIE #cboxBottomCenter,
+.cboxIE #cboxBottomRight,
+.cboxIE #cboxMiddleLeft,
+.cboxIE #cboxMiddleRight {
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
+}
+
+/*
+ The following provides PNG transparency support for IE6
+ Feel free to remove this and the /ie6/ directory if you have dropped IE6 support.
+*/
+.cboxIE6 #cboxTopLeft{background:url(images/ie6/borderTopLeft.png);}
+.cboxIE6 #cboxTopCenter{background:url(images/ie6/borderTopCenter.png);}
+.cboxIE6 #cboxTopRight{background:url(images/ie6/borderTopRight.png);}
+.cboxIE6 #cboxBottomLeft{background:url(images/ie6/borderBottomLeft.png);}
+.cboxIE6 #cboxBottomCenter{background:url(images/ie6/borderBottomCenter.png);}
+.cboxIE6 #cboxBottomRight{background:url(images/ie6/borderBottomRight.png);}
+.cboxIE6 #cboxMiddleLeft{background:url(images/ie6/borderMiddleLeft.png);}
+.cboxIE6 #cboxMiddleRight{background:url(images/ie6/borderMiddleRight.png);}
+
+.cboxIE6 #cboxTopLeft,
+.cboxIE6 #cboxTopCenter,
+.cboxIE6 #cboxTopRight,
+.cboxIE6 #cboxBottomLeft,
+.cboxIE6 #cboxBottomCenter,
+.cboxIE6 #cboxBottomRight,
+.cboxIE6 #cboxMiddleLeft,
+.cboxIE6 #cboxMiddleRight {
+ _behavior: expression(this.src = this.src ? this.src : this.currentStyle.backgroundImage.split('"')[1], this.style.background = "none", this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + this.src + ", sizingMethod='scale')");
+}
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/border.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/border.png
new file mode 100644
index 000000000..f463a10d8
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/border.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/controls.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/controls.png
new file mode 100644
index 000000000..dcfd6fb9f
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/controls.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomCenter.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomCenter.png
new file mode 100644
index 000000000..0d4475edf
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomCenter.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomLeft.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomLeft.png
new file mode 100644
index 000000000..2775eba89
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomRight.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomRight.png
new file mode 100644
index 000000000..f7f51379c
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderBottomRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleLeft.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleLeft.png
new file mode 100644
index 000000000..a2d63d156
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleRight.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleRight.png
new file mode 100644
index 000000000..fd7c3e849
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderMiddleRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopCenter.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopCenter.png
new file mode 100644
index 000000000..2937a9cf9
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopCenter.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopLeft.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopLeft.png
new file mode 100644
index 000000000..f9d458b5b
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopRight.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopRight.png
new file mode 100644
index 000000000..74b8583cf
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/ie6/borderTopRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/loading.gif b/mod/colorbox/vendors/jquery/colorbox/example1/images/loading.gif
new file mode 100644
index 000000000..b4695d811
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/loading.gif
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/loading_background.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/loading_background.png
new file mode 100644
index 000000000..6ae83e697
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/loading_background.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/images/overlay.png b/mod/colorbox/vendors/jquery/colorbox/example1/images/overlay.png
new file mode 100644
index 000000000..53ea98f70
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/images/overlay.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example1/index.html b/mod/colorbox/vendors/jquery/colorbox/example1/index.html
new file mode 100644
index 000000000..44fcca860
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example1/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <title>ColorBox Examples</title>
+ <style>
+ body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
+ a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
+ h2{font-size:13px; margin:15px 0 0 0;}
+ </style>
+ <link rel="stylesheet" href="colorbox.css" />
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="../colorbox/jquery.colorbox.js"></script>
+ <script>
+ $(document).ready(function(){
+ //Examples of how to assign the ColorBox event to elements
+ $(".group1").colorbox({rel:'group1'});
+ $(".group2").colorbox({rel:'group2', transition:"fade"});
+ $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
+ $(".group4").colorbox({rel:'group4', slideshow:true});
+ $(".ajax").colorbox();
+ $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
+ $(".inline").colorbox({inline:true, width:"50%"});
+ $(".callbacks").colorbox({
+ onOpen:function(){ alert('onOpen: colorbox is about to open'); },
+ onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
+ onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
+ onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
+ onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
+ });
+
+ //Example of preserving a JavaScript event for inline calls.
+ $("#click").click(function(){
+ $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
+ return false;
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <h1>ColorBox Demonstration</h1>
+
+ <h2>Elastic Transition</h2>
+ <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Fade Transition</h2>
+ <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
+ <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>No Transition + fixed width and height (75% of screen size)</h2>
+ <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Slideshow</h2>
+ <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Other Content Types</h2>
+ <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
+ <p><a class='ajax' href="../content/flash.html" title="Royksopp: Remind Me">Flash / Video (Ajax/Embedded)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='iframe' href="http://threadless.com">Outside Webpage (Iframe)</a></p>
+ <p><a class='inline' href="#inline_content">Inline HTML</a></p>
+
+ <h2>Demonstration of using callbacks</h2>
+ <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <!-- This contains the hidden content for inline calls -->
+ <div style='display:none'>
+ <div id='inline_content' style='padding:10px; background:#fff;'>
+ <p><strong>This content comes from a hidden element on this page.</strong></p>
+ <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
+ <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
+
+ <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p>Updating Content Example:<br />
+ <a class="ajax" href="../content/flash.html">Click here to load new content</a></p>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example2/colorbox.css b/mod/colorbox/vendors/jquery/colorbox/example2/colorbox.css
new file mode 100644
index 000000000..fa42bf2f9
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example2/colorbox.css
@@ -0,0 +1,43 @@
+/*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:#fff;}
+#colorbox{}
+ #cboxContent{margin-top:32px; overflow:visible;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{background:#000; padding:1px;}
+ #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+ #cboxLoadingOverlay{background:#000;}
+ #cboxTitle{position:absolute; top:-22px; left:0; color:#000;}
+ #cboxCurrent{position:absolute; top:-22px; right:205px; text-indent:-9999px;}
+ #cboxSlideshow, #cboxPrevious, #cboxNext, #cboxClose{text-indent:-9999px; width:20px; height:20px; position:absolute; top:-20px; background:url(images/controls.png) no-repeat 0 0;}
+ #cboxPrevious{background-position:0px 0px; right:44px;}
+ #cboxPrevious:hover{background-position:0px -25px;}
+ #cboxNext{background-position:-25px 0px; right:22px;}
+ #cboxNext:hover{background-position:-25px -25px;}
+ #cboxClose{background-position:-50px 0px; right:0;}
+ #cboxClose:hover{background-position:-50px -25px;}
+ .cboxSlideshow_on #cboxPrevious, .cboxSlideshow_off #cboxPrevious{right:66px;}
+ .cboxSlideshow_on #cboxSlideshow{background-position:-75px -25px; right:44px;}
+ .cboxSlideshow_on #cboxSlideshow:hover{background-position:-100px -25px;}
+ .cboxSlideshow_off #cboxSlideshow{background-position:-100px 0px; right:44px;}
+ .cboxSlideshow_off #cboxSlideshow:hover{background-position:-75px -25px;}
diff --git a/mod/colorbox/vendors/jquery/colorbox/example2/images/controls.png b/mod/colorbox/vendors/jquery/colorbox/example2/images/controls.png
new file mode 100644
index 000000000..8569b57f1
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example2/images/controls.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example2/images/loading.gif b/mod/colorbox/vendors/jquery/colorbox/example2/images/loading.gif
new file mode 100644
index 000000000..19c67bbd0
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example2/images/loading.gif
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example2/index.html b/mod/colorbox/vendors/jquery/colorbox/example2/index.html
new file mode 100644
index 000000000..44fcca860
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example2/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <title>ColorBox Examples</title>
+ <style>
+ body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
+ a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
+ h2{font-size:13px; margin:15px 0 0 0;}
+ </style>
+ <link rel="stylesheet" href="colorbox.css" />
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="../colorbox/jquery.colorbox.js"></script>
+ <script>
+ $(document).ready(function(){
+ //Examples of how to assign the ColorBox event to elements
+ $(".group1").colorbox({rel:'group1'});
+ $(".group2").colorbox({rel:'group2', transition:"fade"});
+ $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
+ $(".group4").colorbox({rel:'group4', slideshow:true});
+ $(".ajax").colorbox();
+ $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
+ $(".inline").colorbox({inline:true, width:"50%"});
+ $(".callbacks").colorbox({
+ onOpen:function(){ alert('onOpen: colorbox is about to open'); },
+ onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
+ onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
+ onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
+ onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
+ });
+
+ //Example of preserving a JavaScript event for inline calls.
+ $("#click").click(function(){
+ $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
+ return false;
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <h1>ColorBox Demonstration</h1>
+
+ <h2>Elastic Transition</h2>
+ <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Fade Transition</h2>
+ <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
+ <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>No Transition + fixed width and height (75% of screen size)</h2>
+ <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Slideshow</h2>
+ <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Other Content Types</h2>
+ <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
+ <p><a class='ajax' href="../content/flash.html" title="Royksopp: Remind Me">Flash / Video (Ajax/Embedded)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='iframe' href="http://threadless.com">Outside Webpage (Iframe)</a></p>
+ <p><a class='inline' href="#inline_content">Inline HTML</a></p>
+
+ <h2>Demonstration of using callbacks</h2>
+ <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <!-- This contains the hidden content for inline calls -->
+ <div style='display:none'>
+ <div id='inline_content' style='padding:10px; background:#fff;'>
+ <p><strong>This content comes from a hidden element on this page.</strong></p>
+ <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
+ <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
+
+ <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p>Updating Content Example:<br />
+ <a class="ajax" href="../content/flash.html">Click here to load new content</a></p>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example3/colorbox.css b/mod/colorbox/vendors/jquery/colorbox/example3/colorbox.css
new file mode 100644
index 000000000..36cc9ef42
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example3/colorbox.css
@@ -0,0 +1,38 @@
+/*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width: none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:#000;}
+#colorbox{}
+ #cboxContent{margin-top:20px;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{border:5px solid #000; background:#fff;}
+ #cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;}
+ #cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;}
+ #cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;}
+ #cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;}
+ #cboxPrevious:hover{background-position:bottom left;}
+ #cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(images/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;}
+ #cboxNext:hover{background-position:bottom right;}
+ #cboxLoadingOverlay{background:#000;}
+ #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+ #cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(images/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;}
+ #cboxClose:hover{background-position:bottom center;} \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example3/images/controls.png b/mod/colorbox/vendors/jquery/colorbox/example3/images/controls.png
new file mode 100644
index 000000000..e1e97982a
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example3/images/controls.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example3/images/loading.gif b/mod/colorbox/vendors/jquery/colorbox/example3/images/loading.gif
new file mode 100644
index 000000000..19c67bbd0
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example3/images/loading.gif
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example3/index.html b/mod/colorbox/vendors/jquery/colorbox/example3/index.html
new file mode 100644
index 000000000..44fcca860
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example3/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <title>ColorBox Examples</title>
+ <style>
+ body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
+ a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
+ h2{font-size:13px; margin:15px 0 0 0;}
+ </style>
+ <link rel="stylesheet" href="colorbox.css" />
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="../colorbox/jquery.colorbox.js"></script>
+ <script>
+ $(document).ready(function(){
+ //Examples of how to assign the ColorBox event to elements
+ $(".group1").colorbox({rel:'group1'});
+ $(".group2").colorbox({rel:'group2', transition:"fade"});
+ $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
+ $(".group4").colorbox({rel:'group4', slideshow:true});
+ $(".ajax").colorbox();
+ $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
+ $(".inline").colorbox({inline:true, width:"50%"});
+ $(".callbacks").colorbox({
+ onOpen:function(){ alert('onOpen: colorbox is about to open'); },
+ onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
+ onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
+ onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
+ onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
+ });
+
+ //Example of preserving a JavaScript event for inline calls.
+ $("#click").click(function(){
+ $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
+ return false;
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <h1>ColorBox Demonstration</h1>
+
+ <h2>Elastic Transition</h2>
+ <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Fade Transition</h2>
+ <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
+ <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>No Transition + fixed width and height (75% of screen size)</h2>
+ <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Slideshow</h2>
+ <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Other Content Types</h2>
+ <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
+ <p><a class='ajax' href="../content/flash.html" title="Royksopp: Remind Me">Flash / Video (Ajax/Embedded)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='iframe' href="http://threadless.com">Outside Webpage (Iframe)</a></p>
+ <p><a class='inline' href="#inline_content">Inline HTML</a></p>
+
+ <h2>Demonstration of using callbacks</h2>
+ <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <!-- This contains the hidden content for inline calls -->
+ <div style='display:none'>
+ <div id='inline_content' style='padding:10px; background:#fff;'>
+ <p><strong>This content comes from a hidden element on this page.</strong></p>
+ <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
+ <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
+
+ <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p>Updating Content Example:<br />
+ <a class="ajax" href="../content/flash.html">Click here to load new content</a></p>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/colorbox.css b/mod/colorbox/vendors/jquery/colorbox/example4/colorbox.css
new file mode 100644
index 000000000..bc5ef3e3d
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/colorbox.css
@@ -0,0 +1,82 @@
+/*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:#fff;}
+#colorbox{}
+ #cboxTopLeft{width:25px; height:25px; background:url(images/border1.png) no-repeat 0 0;}
+ #cboxTopCenter{height:25px; background:url(images/border1.png) repeat-x 0 -50px;}
+ #cboxTopRight{width:25px; height:25px; background:url(images/border1.png) no-repeat -25px 0;}
+ #cboxBottomLeft{width:25px; height:25px; background:url(images/border1.png) no-repeat 0 -25px;}
+ #cboxBottomCenter{height:25px; background:url(images/border1.png) repeat-x 0 -75px;}
+ #cboxBottomRight{width:25px; height:25px; background:url(images/border1.png) no-repeat -25px -25px;}
+ #cboxMiddleLeft{width:25px; background:url(images/border2.png) repeat-y 0 0;}
+ #cboxMiddleRight{width:25px; background:url(images/border2.png) repeat-y -25px 0;}
+ #cboxContent{background:#fff; overflow:hidden;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{margin-bottom:20px;}
+ #cboxTitle{position:absolute; bottom:0px; left:0; text-align:center; width:100%; color:#999;}
+ #cboxCurrent{position:absolute; bottom:0px; left:100px; color:#999;}
+ #cboxSlideshow{position:absolute; bottom:0px; right:42px; color:#444;}
+ #cboxPrevious{position:absolute; bottom:0px; left:0; color:#444;}
+ #cboxNext{position:absolute; bottom:0px; left:63px; color:#444;}
+ #cboxLoadingOverlay{background:#fff url(images/loading.gif) no-repeat 5px 5px;}
+ #cboxClose{position:absolute; bottom:0; right:0; display:block; color:#444;}
+
+/*
+ The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
+ when an alpha filter (opacity change) is set on the element or ancestor element. This style is not applied to or needed in IE9.
+ See: http://jacklmoore.com/notes/ie-transparency-problems/
+*/
+.cboxIE #cboxTopLeft,
+.cboxIE #cboxTopCenter,
+.cboxIE #cboxTopRight,
+.cboxIE #cboxBottomLeft,
+.cboxIE #cboxBottomCenter,
+.cboxIE #cboxBottomRight,
+.cboxIE #cboxMiddleLeft,
+.cboxIE #cboxMiddleRight {
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
+}
+
+/*
+ The following provides PNG transparency support for IE6
+ Feel free to remove this and the /ie6/ directory if you have dropped IE6 support.
+*/
+.cboxIE6 #cboxTopLeft{background:url(images/ie6/borderTopLeft.png);}
+.cboxIE6 #cboxTopCenter{background:url(images/ie6/borderTopCenter.png);}
+.cboxIE6 #cboxTopRight{background:url(images/ie6/borderTopRight.png);}
+.cboxIE6 #cboxBottomLeft{background:url(images/ie6/borderBottomLeft.png);}
+.cboxIE6 #cboxBottomCenter{background:url(images/ie6/borderBottomCenter.png);}
+.cboxIE6 #cboxBottomRight{background:url(images/ie6/borderBottomRight.png);}
+.cboxIE6 #cboxMiddleLeft{background:url(images/ie6/borderMiddleLeft.png);}
+.cboxIE6 #cboxMiddleRight{background:url(images/ie6/borderMiddleRight.png);}
+
+.cboxIE6 #cboxTopLeft,
+.cboxIE6 #cboxTopCenter,
+.cboxIE6 #cboxTopRight,
+.cboxIE6 #cboxBottomLeft,
+.cboxIE6 #cboxBottomCenter,
+.cboxIE6 #cboxBottomRight,
+.cboxIE6 #cboxMiddleLeft,
+.cboxIE6 #cboxMiddleRight {
+ _behavior: expression(this.src = this.src ? this.src : this.currentStyle.backgroundImage.split('"')[1], this.style.background = "none", this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src=" + this.src + ", sizingMethod='scale')");
+}
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/border1.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/border1.png
new file mode 100644
index 000000000..0ddc70405
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/border1.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/border2.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/border2.png
new file mode 100644
index 000000000..aa62a0b72
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/border2.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomCenter.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomCenter.png
new file mode 100644
index 000000000..12e0e9ac0
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomCenter.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomLeft.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomLeft.png
new file mode 100644
index 000000000..b7a474ae0
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomRight.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomRight.png
new file mode 100644
index 000000000..6b6cb159b
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderBottomRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleLeft.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleLeft.png
new file mode 100644
index 000000000..8d0eb739d
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleRight.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleRight.png
new file mode 100644
index 000000000..d65509e30
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderMiddleRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopCenter.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopCenter.png
new file mode 100644
index 000000000..35d8da2d0
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopCenter.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopLeft.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopLeft.png
new file mode 100644
index 000000000..ae9bda040
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopLeft.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopRight.png b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopRight.png
new file mode 100644
index 000000000..0d8868399
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/ie6/borderTopRight.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/images/loading.gif b/mod/colorbox/vendors/jquery/colorbox/example4/images/loading.gif
new file mode 100644
index 000000000..602ce3c3a
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/images/loading.gif
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example4/index.html b/mod/colorbox/vendors/jquery/colorbox/example4/index.html
new file mode 100644
index 000000000..44fcca860
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example4/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <title>ColorBox Examples</title>
+ <style>
+ body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
+ a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
+ h2{font-size:13px; margin:15px 0 0 0;}
+ </style>
+ <link rel="stylesheet" href="colorbox.css" />
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="../colorbox/jquery.colorbox.js"></script>
+ <script>
+ $(document).ready(function(){
+ //Examples of how to assign the ColorBox event to elements
+ $(".group1").colorbox({rel:'group1'});
+ $(".group2").colorbox({rel:'group2', transition:"fade"});
+ $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
+ $(".group4").colorbox({rel:'group4', slideshow:true});
+ $(".ajax").colorbox();
+ $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
+ $(".inline").colorbox({inline:true, width:"50%"});
+ $(".callbacks").colorbox({
+ onOpen:function(){ alert('onOpen: colorbox is about to open'); },
+ onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
+ onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
+ onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
+ onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
+ });
+
+ //Example of preserving a JavaScript event for inline calls.
+ $("#click").click(function(){
+ $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
+ return false;
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <h1>ColorBox Demonstration</h1>
+
+ <h2>Elastic Transition</h2>
+ <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Fade Transition</h2>
+ <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
+ <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>No Transition + fixed width and height (75% of screen size)</h2>
+ <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Slideshow</h2>
+ <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Other Content Types</h2>
+ <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
+ <p><a class='ajax' href="../content/flash.html" title="Royksopp: Remind Me">Flash / Video (Ajax/Embedded)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='iframe' href="http://threadless.com">Outside Webpage (Iframe)</a></p>
+ <p><a class='inline' href="#inline_content">Inline HTML</a></p>
+
+ <h2>Demonstration of using callbacks</h2>
+ <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <!-- This contains the hidden content for inline calls -->
+ <div style='display:none'>
+ <div id='inline_content' style='padding:10px; background:#fff;'>
+ <p><strong>This content comes from a hidden element on this page.</strong></p>
+ <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
+ <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
+
+ <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p>Updating Content Example:<br />
+ <a class="ajax" href="../content/flash.html">Click here to load new content</a></p>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/colorbox.css b/mod/colorbox/vendors/jquery/colorbox/example5/colorbox.css
new file mode 100644
index 000000000..91301a9b1
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/colorbox.css
@@ -0,0 +1,52 @@
+/*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:#000;}
+#colorbox{}
+ #cboxTopLeft{width:14px; height:14px; background:url(images/controls.png) no-repeat 0 0;}
+ #cboxTopCenter{height:14px; background:url(images/border.png) repeat-x top left;}
+ #cboxTopRight{width:14px; height:14px; background:url(images/controls.png) no-repeat -36px 0;}
+ #cboxBottomLeft{width:14px; height:43px; background:url(images/controls.png) no-repeat 0 -32px;}
+ #cboxBottomCenter{height:43px; background:url(images/border.png) repeat-x bottom left;}
+ #cboxBottomRight{width:14px; height:43px; background:url(images/controls.png) no-repeat -36px -32px;}
+ #cboxMiddleLeft{width:14px; background:url(images/controls.png) repeat-y -175px 0;}
+ #cboxMiddleRight{width:14px; background:url(images/controls.png) repeat-y -211px 0;}
+ #cboxContent{background:#fff; overflow:visible;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{margin-bottom:5px;}
+ #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
+ #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+ #cboxTitle{position:absolute; bottom:-25px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;}
+ #cboxCurrent{position:absolute; bottom:-25px; left:58px; font-weight:bold; color:#7C7C7C;}
+
+ #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{position:absolute; bottom:-29px; background:url(images/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;}
+ #cboxPrevious{left:0px; background-position: -51px -25px;}
+ #cboxPrevious:hover{background-position:-51px 0px;}
+ #cboxNext{left:27px; background-position:-75px -25px;}
+ #cboxNext:hover{background-position:-75px 0px;}
+ #cboxClose{right:0; background-position:-100px -25px;}
+ #cboxClose:hover{background-position:-100px 0px;}
+
+ .cboxSlideshow_on #cboxSlideshow{background-position:-125px 0px; right:27px;}
+ .cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0px;}
+ .cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px; right:27px;}
+ .cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0px;} \ No newline at end of file
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/images/border.png b/mod/colorbox/vendors/jquery/colorbox/example5/images/border.png
new file mode 100644
index 000000000..df13bb6da
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/images/border.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/images/controls.png b/mod/colorbox/vendors/jquery/colorbox/example5/images/controls.png
new file mode 100644
index 000000000..65cfd1dc9
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/images/controls.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/images/loading.gif b/mod/colorbox/vendors/jquery/colorbox/example5/images/loading.gif
new file mode 100644
index 000000000..b4695d811
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/images/loading.gif
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/images/loading_background.png b/mod/colorbox/vendors/jquery/colorbox/example5/images/loading_background.png
new file mode 100644
index 000000000..9de11f467
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/images/loading_background.png
Binary files differ
diff --git a/mod/colorbox/vendors/jquery/colorbox/example5/index.html b/mod/colorbox/vendors/jquery/colorbox/example5/index.html
new file mode 100644
index 000000000..44fcca860
--- /dev/null
+++ b/mod/colorbox/vendors/jquery/colorbox/example5/index.html
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset='utf-8'/>
+ <title>ColorBox Examples</title>
+ <style>
+ body{font:12px/1.2 Verdana, sans-serif; padding:0 10px;}
+ a:link, a:visited{text-decoration:none; color:#416CE5; border-bottom:1px solid #416CE5;}
+ h2{font-size:13px; margin:15px 0 0 0;}
+ </style>
+ <link rel="stylesheet" href="colorbox.css" />
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+ <script src="../colorbox/jquery.colorbox.js"></script>
+ <script>
+ $(document).ready(function(){
+ //Examples of how to assign the ColorBox event to elements
+ $(".group1").colorbox({rel:'group1'});
+ $(".group2").colorbox({rel:'group2', transition:"fade"});
+ $(".group3").colorbox({rel:'group3', transition:"none", width:"75%", height:"75%"});
+ $(".group4").colorbox({rel:'group4', slideshow:true});
+ $(".ajax").colorbox();
+ $(".youtube").colorbox({iframe:true, innerWidth:425, innerHeight:344});
+ $(".iframe").colorbox({iframe:true, width:"80%", height:"80%"});
+ $(".inline").colorbox({inline:true, width:"50%"});
+ $(".callbacks").colorbox({
+ onOpen:function(){ alert('onOpen: colorbox is about to open'); },
+ onLoad:function(){ alert('onLoad: colorbox has started to load the targeted content'); },
+ onComplete:function(){ alert('onComplete: colorbox has displayed the loaded content'); },
+ onCleanup:function(){ alert('onCleanup: colorbox has begun the close process'); },
+ onClosed:function(){ alert('onClosed: colorbox has completely closed'); }
+ });
+
+ //Example of preserving a JavaScript event for inline calls.
+ $("#click").click(function(){
+ $('#click').css({"background-color":"#f00", "color":"#fff", "cursor":"inherit"}).text("Open this window again and this message will still be here.");
+ return false;
+ });
+ });
+ </script>
+ </head>
+ <body>
+ <h1>ColorBox Demonstration</h1>
+
+ <h2>Elastic Transition</h2>
+ <p><a class="group1" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group1" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group1" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Fade Transition</h2>
+ <p><a class="group2" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee">Grouped Photo 1</a></p>
+ <p><a class="group2" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group2" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>No Transition + fixed width and height (75% of screen size)</h2>
+ <p><a class="group3" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group3" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group3" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Slideshow</h2>
+ <p><a class="group4" href="../content/ohoopee1.jpg" title="Me and my grandfather on the Ohoopee.">Grouped Photo 1</a></p>
+ <p><a class="group4" href="../content/ohoopee2.jpg" title="On the Ohoopee as a child">Grouped Photo 2</a></p>
+ <p><a class="group4" href="../content/ohoopee3.jpg" title="On the Ohoopee as an adult">Grouped Photo 3</a></p>
+
+ <h2>Other Content Types</h2>
+ <p><a class='ajax' href="../content/ajax.html" title="Homer Defined">Outside HTML (Ajax)</a></p>
+ <p><a class='ajax' href="../content/flash.html" title="Royksopp: Remind Me">Flash / Video (Ajax/Embedded)</a></p>
+ <p><a class='youtube' href="http://www.youtube.com/embed/617ANIA5Rqs?rel=0&amp;wmode=transparent" title="The Knife: We Share Our Mother's Health">Flash / Video (Iframe/Direct Link To YouTube)</a></p>
+ <p><a class='iframe' href="http://threadless.com">Outside Webpage (Iframe)</a></p>
+ <p><a class='inline' href="#inline_content">Inline HTML</a></p>
+
+ <h2>Demonstration of using callbacks</h2>
+ <p><a class='callbacks' href="../content/marylou.jpg" title="Marylou on Cumberland Island">Example with alerts</a>. Callbacks and event-hooks allow users to extend functionality without having to rewrite parts of the plugin.</p>
+
+ <!-- This contains the hidden content for inline calls -->
+ <div style='display:none'>
+ <div id='inline_content' style='padding:10px; background:#fff;'>
+ <p><strong>This content comes from a hidden element on this page.</strong></p>
+ <p>The inline option preserves bound JavaScript events and changes, and it puts the content back where it came from when it is closed.</p>
+ <p><a id="click" href="#" style='padding:5px; background:#ccc;'>Click me, it will be preserved!</a></p>
+
+ <p><strong>If you try to open a new ColorBox while it is already open, it will update itself with the new content.</strong></p>
+ <p>Updating Content Example:<br />
+ <a class="ajax" href="../content/flash.html">Click here to load new content</a></p>
+ </div>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/mod/colorbox/views/default/css/lightbox.php b/mod/colorbox/views/default/css/lightbox.php
new file mode 100644
index 000000000..e18c02bf8
--- /dev/null
+++ b/mod/colorbox/views/default/css/lightbox.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Colorbox -- Stylesheet
+ *
+ * Used as a view because we need to pass a full URL to AlphaImageLoader.
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+
+$jquery_path = elgg_get_site_url() . 'mod/colorbox/vendors/jquery/';
+?>
+
+/*
+ * ColorBox - jQuery Plugin
+ * A lightweight customizable lightbox plugin for jQuery
+ *
+ */
+
+ /*
+ ColorBox Core Style:
+ The following CSS is consistent between example themes and should not be altered.
+*/
+body > #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width: none;}
+.cboxIframe{width:100%; height:100%; display:block; border:0;}
+body > #colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
+
+/*
+ User Style:
+ Change the following styles to modify the appearance of ColorBox. They are
+ ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:#000;}
+body > #colorbox{}
+ #cboxContent{margin-top:20px;}
+ .cboxIframe{background:#fff;}
+ #cboxError{padding:50px; border:1px solid #ccc;}
+ #cboxLoadedContent{border:5px solid #000; background:#fff;}
+ #cboxTitle{position:absolute; top:-20px; left:0; color:#ccc;}
+ #cboxCurrent{position:absolute; top:-20px; right:0px; color:#ccc;}
+ #cboxSlideshow{position:absolute; top:-20px; right:90px; color:#fff;}
+ #cboxPrevious{position:absolute; top:50%; left:5px; margin-top:-32px; background:url(<?php echo $jquery_path; ?>colorbox/example3/images/controls.png) no-repeat top left; width:28px; height:65px; text-indent:-9999px;}
+ #cboxPrevious:hover{background-position:bottom left;}
+ #cboxNext{position:absolute; top:50%; right:5px; margin-top:-32px; background:url(<?php echo $jquery_path; ?>colorbox/example3/images/controls.png) no-repeat top right; width:28px; height:65px; text-indent:-9999px;}
+ #cboxNext:hover{background-position:bottom right;}
+ #cboxLoadingOverlay{background:#000;}
+ #cboxLoadingGraphic{background:url(<?php echo $jquery_path; ?>colorbox/example3/images/loading.gif) no-repeat center center;}
+ #cboxClose{position:absolute; top:5px; right:5px; display:block; background:url(<?php echo $jquery_path; ?>colorbox/example3/images/controls.png) no-repeat top center; width:38px; height:19px; text-indent:-9999px;}
+ #cboxClose:hover{background-position:bottom center;}
diff --git a/mod/colorbox/views/default/js/embed/embed.php b/mod/colorbox/views/default/js/embed/embed.php
new file mode 100644
index 000000000..ada6653a8
--- /dev/null
+++ b/mod/colorbox/views/default/js/embed/embed.php
@@ -0,0 +1,171 @@
+<?php
+/**
+ * Colorbox -- Javascript
+ *
+ * Used as a view because we need to pass a full URL to AlphaImageLoader.
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ * @override mod/embed/views/default/js/embed/embed.php
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+?>
+
+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() {
+ elgg.embed.textAreaId = /embed-control-(\S)+/.exec($(this).attr('class'))[1];
+ });
+
+ // 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');
+?>
+
+ elgg.ui.lightbox.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();
+ }
+ }
+
+ // ie 7 and 8 have a null response because of the use of an iFrame
+ // so just show the list after upload.
+ // http://jquery.malsup.com/form/#file-upload claims you can wrap JSON
+ // in a textarea, but a quick test didn't work, and that is fairly
+ // intrusive to the rest of the ajax system.
+ else if (response === undefined && $.browser.msie) {
+ 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);
+ }
+ },
+ 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/colorbox/views/default/js/lightbox.php b/mod/colorbox/views/default/js/lightbox.php
new file mode 100644
index 000000000..732092e2b
--- /dev/null
+++ b/mod/colorbox/views/default/js/lightbox.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Colorbox -- Stylesheet
+ *
+ * Used as a view because we need to pass a full URL to AlphaImageLoader.
+ *
+ * @package Lorea
+ * @subpackage Colorbox
+ *
+ * Copyright 2011-2012 Lorea Faeries <federation@lorea.org>
+ *
+ * This program is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License
+ * as published by the Free Software Foundation, either version 3 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Usage
+ * Apply the class elgg-lightbox to links.
+ *
+ * Advanced Usage
+ * Elgg is distributed with the Colorbox jQuery library. Please go to
+ * http://www.jacklmoore.com/colorbox 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);
+ */
+
+?>
+
+/**
+ * Lightbox initialization
+ */
+
+elgg.provide('elgg.ui.lightbox');
+
+elgg.ui.lightbox.init = function() {
+
+ $.extend($.colorbox.settings, {
+ current: elgg.echo('js:lightbox:current', ['{current}', '{total}']),
+ previous: elgg.echo('previous'),
+ next: elgg.echo('next'),
+ close: elgg.echo('close'),
+ xhrError: elgg.echo('error:default'),
+ imgError: elgg.echo('error:default'),
+ });
+
+ $(".elgg-lightbox").colorbox();
+ $(".elgg-lightbox-photo").colorbox({photo: true});
+ var n = 0;
+ $(".elgg-lightbox-gallery").each(function() {
+ $(this).find(".elgg-lightbox, .elgg-lightbox-photo")
+ .addClass("elgg-lightbox-" + n)
+ .colorbox({
+ rel: "elgg-lightbox-" + n++,
+ });
+ });
+}
+
+elgg.ui.lightbox.close = function() {
+ $.colorbox.close();
+}
+
+elgg.register_hook_handler('init', 'system', elgg.ui.lightbox.init);
+
+<?php
+
+$js_path = elgg_get_plugins_path();
+$js_path = "{$js_path}colorbox/vendors/jquery/colorbox/colorbox/jquery.colorbox-min.js";
+include $js_path;
diff --git a/mod/cool_theme b/mod/cool_theme
new file mode 160000
+Subproject a26f7df43a266f7d1ff04847da330d15f6041e9
diff --git a/mod/curatedgroups b/mod/curatedgroups
new file mode 160000
+Subproject fb2fc6f267b9c3c7e6c5055412b716ce22b34a3
diff --git a/mod/custom_index/index.php b/mod/custom_index/index.php
new file mode 100644
index 000000000..43cab9723
--- /dev/null
+++ b/mod/custom_index/index.php
@@ -0,0 +1,73 @@
+<?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 thewire
+$list_params['subtype'] = 'thewire';
+$thewire = 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',
+ 'type' => '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,
+ 'thewire' => $thewire,
+);
+$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..4f79754b9
--- /dev/null
+++ b/mod/custom_index/views/default/page/layouts/custom_index.php
@@ -0,0 +1,73 @@
+<?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");
+
+// the wire
+if (elgg_is_active_plugin('thewire')) {
+ echo elgg_view_module('thewire', elgg_echo("thewire"), $vars['thewire'], $mod_params);
+}
+
+// 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");
+
+// members
+//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/custom_index_widgets/index.php b/mod/custom_index_widgets/index.php
new file mode 100644
index 000000000..dac0db036
--- /dev/null
+++ b/mod/custom_index_widgets/index.php
@@ -0,0 +1,66 @@
+<?php
+
+ elgg_set_context('custom_index_widgets');
+ elgg_set_page_owner_guid(elgg_get_config('site_guid'));
+
+ $widgettypes = elgg_get_widget_types();
+
+ $page_owner = elgg_get_page_owner_guid();
+ $ciw_layout = elgg_get_plugin_setting("ciw_layout", "custom_index_widgets");
+ $ciw_showdashboard = elgg_get_plugin_setting("ciw_showdashboard", "custom_index_widgets");
+
+ $customwidgets = elgg_get_widgets($page_owner, elgg_get_context());
+ $area1widgets = isset($customwidgets[1]) ? $customwidgets[1] : FALSE;
+ $area2widgets = isset($customwidgets[2]) ? $customwidgets[2] : FALSE;
+ $area3widgets = isset($customwidgets[3]) ? $customwidgets[3] : FALSE;
+ /*
+ $area1widgets = elgg_get_widgets($page_owner,elgg_get_context(),1);
+ $area2widgets = elgg_get_widgets($page_owner,elgg_get_context(),2);
+ $area3widgets = elgg_get_widgets($page_owner,elgg_get_context(),3);
+ */
+
+ if (empty($area1widgets) && empty($area2widgets) && empty($area3widgets)) {
+
+ if (isset($vars['area3'])) $vars['area1'] = $vars['area3'];
+ if (isset($vars['area4'])) $vars['area2'] = $vars['area4'];
+ }
+
+ $leftcolumn_widgets_view = custom_index_build_columns($area1widgets,$widgettypes);
+ $middlecolumn_widgets_view = custom_index_build_columns($area2widgets,$widgettypes);
+ $rightcolumn_widgets_view = custom_index_build_columns($area3widgets,$widgettypes);
+
+
+ $content = elgg_view_layout($ciw_layout, array('area1' => $leftcolumn_widgets_view,'area2' => $middlecolumn_widgets_view,'area3' => $rightcolumn_widgets_view, 'layoutmode' => 'index_mode') );
+
+ if (elgg_is_logged_in() && $ciw_showdashboard=="yes"){
+
+ $user_guid = elgg_get_logged_in_user_guid();
+ elgg_set_page_owner_guid($user_guid);
+ elgg_set_context('dashboard');
+
+
+ $dashboardwidgets = elgg_get_widgets($user_guid, elgg_get_context());
+ $area1widgets = isset($dashboardwidgets[1]) ? $dashboardwidgets[1] : FALSE;
+ $area2widgets = isset($dashboardwidgets[2]) ? $dashboardwidgets[2] : FALSE;
+ $area3widgets = isset($dashboardwidgets[3]) ? $dashboardwidgets[3] : FALSE;
+ /*
+ $area1widgets = elgg_get_widgets($user_guid,elgg_get_context(),1);
+ $area2widgets = elgg_get_widgets($user_guid,elgg_get_context(),2);
+ $area3widgets = elgg_get_widgets($user_guid,elgg_get_context(),3);
+ */
+ if (empty($area1widgets) && empty($area2widgets) && empty($area3widgets)) {
+
+ if (isset($vars['area3'])) $vars['area1'] = $vars['area3'];
+ if (isset($vars['area4'])) $vars['area2'] = $vars['area4'];
+
+ }
+
+ $leftcolumn_widgets_view = custom_index_build_columns($area1widgets,$widgettypes);
+ $middlecolumn_widgets_view = custom_index_build_columns($area2widgets,$widgettypes);
+ $rightcolumn_widgets_view = custom_index_build_columns($area3widgets,$widgettypes);
+
+ $content .= elgg_view_layout($ciw_layout, array('area1' => $leftcolumn_widgets_view,'area2' => $middlecolumn_widgets_view,'area3' => $rightcolumn_widgets_view, 'layoutmode' => 'index_mode') );
+ }
+
+ echo elgg_view_page('Index', $content);
+?> \ No newline at end of file
diff --git a/mod/custom_index_widgets/languages/de.php b/mod/custom_index_widgets/languages/de.php
new file mode 100644
index 000000000..808b2fade
--- /dev/null
+++ b/mod/custom_index_widgets/languages/de.php
@@ -0,0 +1,78 @@
+ <?php
+
+ $german = array(
+
+
+ 'custom_index_widgets:latest_bookmarks_index' => "Neueste Lesezeichen",
+ 'custom_index_widgets:latest_groups_index' => "Neueste Gruppen",
+ 'custom_index_widgets:latest_files_index' => "Neueste Dateien",
+ 'custom_index_widgets:latest_blogs_index' => "Neueste Blogeintr&auml;ge",
+ 'custom_index_widgets:latest_members_index' => "Neueste Mitglieder",
+ 'custom_index_widgets:nofiles' => "Keine Dateien gefunden",
+ 'custom_index_widgets:nogroups' => "Keine Gruppen gefunden",
+ 'custom_index_widgets:latest_news_index' => "Neueste Nachrichten",
+ 'custom_index_widgets:latest_pages_index' => "Neueste Seiten",
+ 'custom_index_widgets:latest_events_index' => 'Eingehende Events',
+ 'custom_index_widgets:latest_wire_index' => 'Neuester Wire-Beitrag',
+ 'custom_index_widgets:inline_content_index' => 'Eigenes HTML',
+ 'custom_index_widgets:html_content' => 'Ihr Text',
+ 'custom_index_widgets:latest_generic_index'=>"Generischer Inhalt",
+ 'custom_index_widgets:latest_tasks_index'=>"Neueste Aufgaben",
+ 'custom_index_widgets:latest_activity_index' => 'Aktivit&auml;ten',
+ 'custom_index_widgets:cloud_generic_index'=>"Tag Cloud",
+ 'custom_index_widgets:widget_subtype'=>"Widget-Subtyp",
+ 'custom_index_widgets:metadata_name' => "Metadaten",
+ 'custom_index_widgets:threshold'=> "Thresold",
+ 'custom_index_widgets:latest_izap_videos_index' => 'Neueste Videos',
+ 'custom_index_widgets:display_avatar' => 'Avatar',
+
+ 'custom_index_widgets:rich_media_index' => "Multimedia Inhalte",
+ 'custom_index_widgets:widget_video_width' => "Breite (Nur Zahl, ohne px oder %)",
+ 'custom_index_widgets:widget_video_height' => "H&ouml;he (Nur Zahl, ohne px oder %)",
+ 'custom_index_widgets:widget_video_url' => "URL",
+ 'custom_index_widgets:widget_video_caption' => "&Uuml;berschrift",
+
+ 'custom_index_widgets:layout' => "Layout",
+
+ 'custom_index_widgets:index_2rmsb' => '2 Spalten, [Mittelbreit, Schmal] - [Big]',
+ 'custom_index_widgets:index_2rsmb' => '2 Spalten, [Schmal, Mittelbreit] - [Big]',
+ 'custom_index_widgets:index_2rhhb' => '2 Spalten, [Halbe Breite, Halbe Breite] - [Big]',
+ 'custom_index_widgets:index_1rsss' => '1 Spalte, [Schmal, Schmal, Schmal]',
+ 'custom_index_widgets:index_2rbhh' => '2 Spalten, [Big] -[Halbe Breite, Halbe Breite]',
+ 'custom_index_widgets:index_2rbsm' => '2 Spalten, [Big] -[Schmal, Mittelbreit]',
+ 'custom_index_widgets:index_2rbms' => '2 Spalten, [Big] -[Mittelbreit, Schmal]',
+
+ 'custom_index_widgets:area1' => 'Widgets Zone 1',
+ 'custom_index_widgets:area2' => 'Widgets Zone 2',
+ 'custom_index_widgets:area3' => 'Widgets Zone 3',
+
+ 'custom_index_widgets:admin:notfound' => 'Seite nicht gefunden',
+ 'custom_index_widgets:index' => "Widgets aktiv auf Index",
+ 'custom_index_widgets:num_items' => "Einzahl Module",
+ 'custom_index_widgets:reset' => "Zonen auf Standard setzen",
+
+ 'custom_index_widgets:pleaselogin' => "Anmelden f&uuml;r alle Details ...",
+
+ 'custom_index_widgets:widget_title' => "Widget-Titel &uuml;berschreiben (auf index-Seite anstelle des Standardtitels des Widgets)",
+ 'custom_index_widgets:context_mode' => "Layout-Stil",
+ 'custom_index_widgets:context_list' => "Liste",
+ 'custom_index_widgets:context_detail' => "Details",
+
+ 'custom_index_widgets:login_style'=>"Login-Position",
+ 'custom_index_widgets:inlayout'=>"Im Layout",
+ 'custom_index_widgets:topbar'=>"Top-Leiste",
+ 'custom_index_widgets:widget_all_groups' => "Alle Gruppen",
+
+ "custom_index_widgets:showdashboard"=>"End index with dashboard",
+ "custom_index_widgets:showdashboard_yes"=>"Ya",
+ "custom_index_widgets:showdashboard_no"=>"Nein",
+
+ "custom_index_widgets:guest_only" => "Guest only",
+ "custom_index_widgets:box_style" => "Box Style",
+ "custom_index_widgets:social_share_index" => "Social Share",
+ "custom_index_widgets:login_index"=>"Login",
+ "admin:appearance:custom_index_widgets" => "Index Widgets"
+
+ );
+
+ add_translation("de",$german);
diff --git a/mod/custom_index_widgets/languages/en.php b/mod/custom_index_widgets/languages/en.php
new file mode 100644
index 000000000..ba9cb4859
--- /dev/null
+++ b/mod/custom_index_widgets/languages/en.php
@@ -0,0 +1,82 @@
+<?php
+
+ $english = array(
+
+
+ 'custom_index_widgets:latest_bookmarks_index' => "Latest bookmarks",
+ 'custom_index_widgets:latest_groups_index' => "Latest groups",
+ 'custom_index_widgets:latest_files_index' => "Latest files",
+ 'custom_index_widgets:latest_blogs_index' => "Latest blog posts",
+ 'custom_index_widgets:latest_members_index' => "Newest members",
+ 'custom_index_widgets:nofiles' => "There are no files yet",
+ 'custom_index_widgets:nogroups' => "There are no groups yet",
+ 'custom_index_widgets:latest_news_index' => "Latest news",
+ 'custom_index_widgets:latest_pages_index' => "Latest pages",
+ 'custom_index_widgets:latest_events_index' => 'Incomming events',
+ 'custom_index_widgets:latest_wire_index' => 'Last wire posts',
+ 'custom_index_widgets:inline_content_index' => 'Free html',
+ 'custom_index_widgets:html_content' => 'Your text',
+ 'custom_index_widgets:latest_generic_index'=>"Generic content",
+ 'custom_index_widgets:latest_tasks_index'=>"Latest tasks",
+ 'custom_index_widgets:latest_activity_index' => 'In the river',
+ 'custom_index_widgets:cloud_generic_index'=>"Tag Cloud",
+ 'custom_index_widgets:widget_subtype'=>"Entity subtype",
+ 'custom_index_widgets:metadata_name' => "Metadata",
+ 'custom_index_widgets:threshold'=> "Thresold",
+ 'custom_index_widgets:latest_izap_videos_index' => 'Latest videos',
+ 'custom_index_widgets:display_avatar' => 'Avatar',
+
+ 'custom_index_widgets:rich_media_index' => "Multimédia content",
+ 'custom_index_widgets:widget_video_width' => "Width (number without px or %)",
+ 'custom_index_widgets:widget_video_height' => "Heigh (number without px or %)",
+ 'custom_index_widgets:widget_video_url' => "Url",
+ 'custom_index_widgets:widget_video_caption' => "Caption",
+
+ 'custom_index_widgets:layout' => "Layout",
+
+ 'custom_index_widgets:index_2rmsb' => '2 rows, [Medium, Small] - [Big]',
+ 'custom_index_widgets:index_2rsmb' => '2 rows, [Small, Medium] - [Big]',
+ 'custom_index_widgets:index_2rhhb' => '2 rows, [Half, Half] - [Big]',
+ 'custom_index_widgets:index_1rsss' => '1 row, [Small, Small, Small]',
+ 'custom_index_widgets:index_2rbhh' => '2 rows, [Big] -[Half, Half]',
+ 'custom_index_widgets:index_2rbsm' => '2 rows, [Big] -[Small, Medium]',
+ 'custom_index_widgets:index_2rbms' => '2 rows, [Big] -[Medium, Small]',
+
+ 'custom_index_widgets:area1' => 'Widgets Zone 1',
+ 'custom_index_widgets:area2' => 'Widgets Zone 2',
+ 'custom_index_widgets:area3' => 'Widgets Zone 3',
+
+ 'custom_index_widgets:admin:notfound' => 'Page not found',
+ 'custom_index_widgets:index' => "Index widgetisation",
+ 'custom_index_widgets:num_items' => "Number of items",
+
+ 'custom_index_widgets:pleaselogin' => "Please, please, login to see more...",
+
+ 'custom_index_widgets:widget_title' => "Override widget title (will be shown only on the index in replacement of widget default title)",
+ 'custom_index_widgets:context_mode' => "Layout style",
+ 'custom_index_widgets:context_list' => "List",
+ 'custom_index_widgets:context_detail' => "Detail",
+
+ 'custom_index_widgets:login_style'=>"Login position",
+ 'custom_index_widgets:inlayout'=>"In layout",
+ 'custom_index_widgets:topbar'=>"Top bar",
+ 'custom_index_widgets:widget_all_groups' => "All groups",
+
+ "custom_index_widgets:showdashboard"=>"End index with dashboard",
+ "custom_index_widgets:showdashboard_yes"=>"Yes",
+ "custom_index_widgets:showdashboard_no"=>"No",
+ "custom_index_widgets:guest_only" => "Guest only",
+ "custom_index_widgets:box_style" => "Box Style",
+ "custom_index_widgets:social_share_index" => "Social Share",
+ "custom_index_widgets:login_index"=>"Login",
+ "admin:appearance:custom_index_widgets" => "Index Widgets",
+ // time limit
+ "custom_index_widgets:widget_created_time_limit" => "Time lapse",
+ "custom_index_widgets:time_limit:all" => "All time",
+ "custom_index_widgets:time_limit:day" => "Last day",
+ "custom_index_widgets:time_limit:week" => "Last week",
+ "custom_index_widgets:time_limit:month" => "Last month"
+
+ );
+
+ add_translation("en",$english);
diff --git a/mod/custom_index_widgets/languages/es.php b/mod/custom_index_widgets/languages/es.php
new file mode 100644
index 000000000..c8dc35633
--- /dev/null
+++ b/mod/custom_index_widgets/languages/es.php
@@ -0,0 +1,78 @@
+<?php
+
+ $spanish = array(
+
+
+ 'custom_index_widgets:latest_bookmarks_index' => "Ultimos favoritos",
+ 'custom_index_widgets:latest_groups_index' => "Ultimos Grupos",
+ 'custom_index_widgets:latest_files_index' => "Ultimos Archivos",
+ 'custom_index_widgets:latest_blogs_index' => "Ultimos Articulos de Blogs",
+ 'custom_index_widgets:latest_members_index' => "Nuevos habitantes",
+ 'custom_index_widgets:nofiles' => "No hay archivos todavia",
+ 'custom_index_widgets:nogroups' => "No hay frupos todavia",
+ 'custom_index_widgets:latest_news_index' => "Ultimas noticias",
+ 'custom_index_widgets:latest_pages_index' => "Ultimas paginas",
+ 'custom_index_widgets:latest_events_index' => 'Eventos anunciados',
+ 'custom_index_widgets:latest_wire_index' => 'Ultimos post',
+ 'custom_index_widgets:inline_content_index' => 'Html libre',
+ 'custom_index_widgets:html_content' => 'Tu texto',
+ 'custom_index_widgets:latest_generic_index'=>"Contenido generico",
+ 'custom_index_widgets:latest_tasks_index'=>"Ultimas tareas",
+ 'custom_index_widgets:latest_activity_index' => 'In the river',
+ 'custom_index_widgets:cloud_generic_index'=>"Nube de tags",
+ 'custom_index_widgets:widget_subtype'=>"Subtipo de la entidad",
+ 'custom_index_widgets:metadata_name' => "Metadata",
+ 'custom_index_widgets:threshold'=> "Thresold",
+ 'custom_index_widgets:latest_izap_videos_index' => 'Ultimos videos',
+ 'custom_index_widgets:display_avatar' => 'Avatar',
+
+ 'custom_index_widgets:rich_media_index' => "Contenido multimedia",
+ 'custom_index_widgets:widget_video_width' => "Ancho (numeros sin px o %)",
+ 'custom_index_widgets:widget_video_height' => "Alto (numeros sin px o %)",
+ 'custom_index_widgets:widget_video_url' => "Url",
+ 'custom_index_widgets:widget_video_caption' => "Caption",
+
+ 'custom_index_widgets:layout' => "Layout",
+
+ 'custom_index_widgets:index_2rmsb' => '2 rows, [Medio, Peque] - [Grande]',
+ 'custom_index_widgets:index_2rsmb' => '2 rows, [Peque, Medio] - [Grande]',
+ 'custom_index_widgets:index_2rhhb' => '2 rows, [Mitad, Mitad] - [Grande]',
+ 'custom_index_widgets:index_1rsss' => '1 row, [Peque, Peque, Peque]',
+ 'custom_index_widgets:index_2rbhh' => '2 rows, [Grande] -[Mitad, Mitad]',
+ 'custom_index_widgets:index_2rbsm' => '2 rows, [Grande] -[Peque, Medio]',
+ 'custom_index_widgets:index_2rbms' => '2 rows, [Grande] -[Medio, Peque]',
+
+ 'custom_index_widgets:area1' => 'Widgets Zona 1',
+ 'custom_index_widgets:area2' => 'Widgets Zona 2',
+ 'custom_index_widgets:area3' => 'Widgets Zona 3',
+
+ 'custom_index_widgets:admin:notfound' => 'Pagina no encontrada',
+ 'custom_index_widgets:index' => "Index widgetisation",
+ 'custom_index_widgets:num_items' => "Numero de items",
+ 'custom_index_widgets:reset' => "Restablecer todas las zonas",
+
+ 'custom_index_widgets:pleaselogin' => "Por favor, por favor, inicie sesión para ver mas...",
+
+ 'custom_index_widgets:widget_title' => "Título del widget Override (solo se mostraran en el índice en sustitucion del título widget por defecto)",
+ 'custom_index_widgets:context_mode' => "Estilo",
+ 'custom_index_widgets:context_list' => "Lista",
+ 'custom_index_widgets:context_detail' => "Detalle",
+
+ 'custom_index_widgets:login_style'=>"Posicion de Login",
+ 'custom_index_widgets:inlayout'=>"Barra inferior",
+ 'custom_index_widgets:topbar'=>"Barra superior",
+ 'custom_index_widgets:widget_all_groups' => "Todos los grupos",
+
+ "custom_index_widgets:showdashboard"=>"End index with dashboard",
+ "custom_index_widgets:showdashboard_yes"=>"Si",
+ "custom_index_widgets:showdashboard_no"=>"No",
+ "custom_index_widgets:guest_only" => "Guest only",
+ "custom_index_widgets:box_style" => "Box Style",
+ "custom_index_widgets:social_share_index" => "Social Share",
+ "custom_index_widgets:login_index"=>"Login",
+ "admin:appearance:custom_index_widgets" => "Index Widgets"
+
+ );
+
+ add_translation("es",$spanish);
+
diff --git a/mod/custom_index_widgets/languages/fr.php b/mod/custom_index_widgets/languages/fr.php
new file mode 100644
index 000000000..486500710
--- /dev/null
+++ b/mod/custom_index_widgets/languages/fr.php
@@ -0,0 +1,80 @@
+<?php
+
+ $french = array(
+
+ 'custom_index_widgets:latest_bookmarks_index' => "Derniers bookmarks",
+ 'custom_index_widgets:latest_groups_index' => "Groupes les + r&eacute;cents",
+ 'custom_index_widgets:latest_files_index' => "Fichiers les + r&eacute;cents",
+ 'custom_index_widgets:latest_blogs_index' => "Derniers ajouts de blogs",
+ 'custom_index_widgets:latest_members_index' => "Nouveaux membres",
+ 'custom_index_widgets:nofiles' => "Il n'y a aucun fichier pour l'instant",
+ 'custom_index_widgets:nogroups' => "Il n'y a aucun groupe pour l'instant",
+ 'custom_index_widgets:latest_news_index' => "Dernieres news",
+ 'custom_index_widgets:latest_pages_index' => "Dernieres pages",
+ 'custom_index_widgets:latest_events_index' => 'Prochains evenements',
+ 'custom_index_widgets:latest_wire_index' => 'Derniers messages',
+ 'custom_index_widgets:inline_content_index' => 'Texte libre',
+ 'custom_index_widgets:html_content' => 'Votre texte',
+ 'custom_index_widgets:latest_generic_index'=>"Contenu générique",
+ 'custom_index_widgets:latest_tasks_index'=>"Tâches récentes",
+ 'custom_index_widgets:latest_activity_index' => 'En bref',
+ 'custom_index_widgets:cloud_generic_index'=>"Nuage de tags",
+ 'custom_index_widgets:widget_subtype'=>"Type d'entité",
+ 'custom_index_widgets:metadata_name' => "Metadata",
+ 'custom_index_widgets:threshold'=> "Seuil minimal",
+ 'custom_index_widgets:latest_izap_videos_index' => 'Dernières vidéos',
+ 'custom_index_widgets:display_avatar' => 'Avatar',
+
+ 'custom_index_widgets:rich_media_index' => "Contenu multimédia",
+ 'custom_index_widgets:widget_video_width' => "Largeur de la vidéo (chiffre sans px ni %)",
+ 'custom_index_widgets:widget_video_height' => "Hauteur de la vidéo (chiffre sans px ni %)",
+ 'custom_index_widgets:widget_video_url' => "Url de la vidéo",
+ 'custom_index_widgets:widget_video_caption' => "Légende de la vidéo",
+
+ 'custom_index_widgets:layout' => "Présentation",
+
+ 'custom_index_widgets:index_2rmsb' => '2 lignes, [Medium, Small] - [Big]',
+ 'custom_index_widgets:index_2rsmb' => '2 lignes, [Small, Medium] - [Big]',
+ 'custom_index_widgets:index_2rhhb' => '2 lignes, [Half, Half] - [Big]',
+ 'custom_index_widgets:index_1rsss' => '1 ligne, [Small, Small, Small]',
+ 'custom_index_widgets:index_1rsms' => '1 ligne, [Small, Medium, Small]',
+
+ 'custom_index_widgets:index_2rbhh' => '2 lignes, [Big] -[Half, Half]',
+ 'custom_index_widgets:index_2rbsm' => '2 lignes, [Big] -[Small, Medium]',
+ 'custom_index_widgets:index_2rbms' => '2 lignes, [Big] -[Medium, Small]',
+
+ 'custom_index_widgets:area1' => 'Widgets Zone 1',
+ 'custom_index_widgets:area2' => 'Widgets Zone 2',
+ 'custom_index_widgets:area3' => 'Widgets Zone 3',
+
+ 'custom_index_widgets:admin:notfound' => 'Page non trouv&eacute;e',
+ 'custom_index_widgets:index' => "Configuration de l'index",
+ 'custom_index_widgets:num_items' => "Nombre d'items",
+ 'custom_index_widgets:reset' => "Supprimer tout les widgets",
+
+ 'custom_index_widgets:pleaselogin' => "Allez, connectez-vous quoi ...",
+
+ 'custom_index_widgets:widget_title' => "Titre de remplacement (est affiché à la place du titre du widget uniquement sur la page d'accueil)",
+ 'custom_index_widgets:context_mode' => "Mode d'affichage",
+ 'custom_index_widgets:context_list' => "Liste",
+ 'custom_index_widgets:context_detail' => "Détail",
+
+ 'custom_index_widgets:login_style'=>"Position de la zone login",
+ 'custom_index_widgets:inlayout'=>"Dans la page",
+ 'custom_index_widgets:topbar'=>"Top bar",
+
+ "custom_index_widgets:showdashboard"=>"Afficher le dashboard en fin de page",
+ "custom_index_widgets:showdashboard_yes"=>"Oui",
+ "custom_index_widgets:showdashboard_no"=>"Non",
+
+ 'custom_index_widgets:widget_all_groups' => "Tous les groupes",
+ "search:go" => "Ok",
+ "custom_index_widgets:guest_only" => "Que pour les invités",
+ "custom_index_widgets:box_style" => "Type d'affichage",
+ "custom_index_widgets:social_share_index" => "Social Share",
+ "custom_index_widgets:login_index"=>"Login",
+ "admin:appearance:custom_index_widgets" => "Index Widgets"
+
+ );
+
+ add_translation("fr",$french);
diff --git a/mod/custom_index_widgets/manifest.xml b/mod/custom_index_widgets/manifest.xml
new file mode 100644
index 000000000..33784b313
--- /dev/null
+++ b/mod/custom_index_widgets/manifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Custom index widgets</name>
+ <author>Fx NION, Lorea developers</author>
+ <version>1.8.0</version>
+ <category>content</category>
+ <category>widget</category>
+ <description>Customise your index, with severals layout and customisable widgets. And get fun.</description>
+ <website>https://lorea.org/</website>
+ <copyright>(C) Fx NION 2009-2011, Lorea 2012-2013</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8.3</version>
+ </requires>
+ <conflicts>
+ <type>plugin</type>
+ <name>custom_index</name>
+ </conflicts>
+ <activate_on_install>false</activate_on_install>
+</plugin_manifest>
diff --git a/mod/custom_index_widgets/start.php b/mod/custom_index_widgets/start.php
new file mode 100644
index 000000000..70a755dc2
--- /dev/null
+++ b/mod/custom_index_widgets/start.php
@@ -0,0 +1,159 @@
+<?php
+
+elgg_register_event_handler('init', 'system', 'custom_index_widgets_init');
+
+function custom_index_widgets_init() {
+
+ elgg_extend_view('css/elgg','custom_index_widgets/css');
+
+ elgg_register_admin_menu_item('configure', 'custom_index_widgets', 'appearance');
+
+
+ $ciw_layout = elgg_get_plugin_setting("ciw_layout", "custom_index_widgets");
+ if ($ciw_layout == NULL) {
+ elgg_set_plugin_setting("ciw_layout", "index_2rmsb", "custom_index_widgets");
+ }
+
+ $ciw_showdashboard = elgg_get_plugin_setting("ciw_showdashboard", "custom_index_widgets");
+ if ($ciw_showdashboard == NULL) {
+ elgg_set_plugin_setting("ciw_showdashboard", "yes", "custom_index_widgets");
+ }
+ elgg_register_widget_type('latest_members_index', elgg_echo('custom_index_widgets:latest_members_index'), elgg_echo('custom_index_widgets:latest_members_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('inline_content_index', elgg_echo('custom_index_widgets:inline_content_index'), elgg_echo('custom_index_widgets:inline_content_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('rich_media_index', elgg_echo('custom_index_widgets:rich_media_index'), elgg_echo('custom_index_widgets:rich_media_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('latest_generic_index', elgg_echo('custom_index_widgets:latest_generic_index'), elgg_echo('custom_index_widgets:latest_generic_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('latest_activity_index', elgg_echo('custom_index_widgets:latest_activity_index'), elgg_echo('custom_index_widgets:latest_activity_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('cloud_generic_index', elgg_echo('custom_index_widgets:cloud_generic_index'), elgg_echo('custom_index_widgets:cloud_generic_index'), "custom_index_widgets", true);
+ elgg_register_widget_type('login_index', elgg_echo('custom_index_widgets:login_index'), elgg_echo('custom_index_widgets:login_index'), "custom_index_widgets", true);
+
+ if (elgg_is_active_plugin('groups')) {
+ elgg_register_widget_type('latest_groups_index', elgg_echo('custom_index_widgets:latest_groups_index'), elgg_echo('custom_index_widgets:latest_groups_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('file')) {
+ elgg_register_widget_type('latest_files_index', elgg_echo('custom_index_widgets:latest_files_index'), elgg_echo('custom_index_widgets:latest_files_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('news')) {
+ elgg_register_widget_type('latest_news_index', elgg_echo('custom_index_widgets:latest_news_index'), elgg_echo('custom_index_widgets:latest_news_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('bookmarks_enhanced') or elgg_is_active_plugin('bookmarks')) {
+ elgg_register_widget_type('latest_bookmarks_index', elgg_echo('custom_index_widgets:latest_bookmarks_index'), elgg_echo('custom_index_widgets:latest_bookmarks_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('blog')) {
+ elgg_register_widget_type('latest_blogs_index', elgg_echo('custom_index_widgets:latest_blogs_index'), elgg_echo('custom_index_widgets:latest_blogs_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('pages')) {
+ elgg_register_widget_type('latest_pages_index', elgg_echo('custom_index_widgets:latest_pages_index'), elgg_echo('custom_index_widgets:latest_pages_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('event_calendar')) {
+ elgg_register_widget_type('latest_events_index', elgg_echo('custom_index_widgets:latest_events_index'), elgg_echo('custom_index_widgets:latest_events_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('tidypics')) {
+ elgg_register_widget_type('latest_photos_index', elgg_echo("tidypics:widget:latest"), elgg_echo("tidypics:widget:latest_descr"), "custom_index_widgets", true);
+ elgg_register_widget_type('latest_album_index', elgg_echo("tidypics:widget:albums"), elgg_echo("tidypics:widget:latest_descr"), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('thewire')) {
+ elgg_register_widget_type('latest_wire_index', elgg_echo('custom_index_widgets:latest_wire_index'), elgg_echo('custom_index_widgets:latest_wire_index'), "custom_index_widgets", true);
+ }
+
+ if (elgg_is_active_plugin('tasks')) {
+ elgg_register_widget_type('latest_tasks_index', elgg_echo('custom_index_widgets:latest_tasks_index'), elgg_echo('custom_index_widgets:latest_tasks_index'), "custom_index_widgets", true);
+ }
+
+ if (elgg_is_active_plugin('izap_videos')) {
+ elgg_register_widget_type('latest_izap_videos_index',elgg_echo ('custom_index_widgets:latest_izap_videos_index'), elgg_echo('custom_index_widgets:latest_izap_videos_index'), "custom_index_widgets", true);
+ }
+ if (elgg_is_active_plugin('simplepie')) {
+ elgg_register_widget_type('feed_reader_index', elgg_echo('simplepie:widget'),elgg_echo('simplepie:description'),'custom_index_widgets', true);
+ }
+
+ elgg_register_plugin_hook_handler('index', 'system', 'custom_index_widgets');
+ elgg_register_page_handler ('custom_index_widgets', 'custom_index_widgets_page_handler');
+
+}
+
+function custom_index_widgets($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;
+}
+
+
+function custom_index_widgets_page_handler($page) {
+ if (isset ($page [0])) {
+ switch ($page [0]) {
+ case "edit" :
+ @include (dirname ( __FILE__ ) . "/edit.php");
+ break;
+ }
+ } else {
+ register_error(elgg_echo("custom_index_widgets:admin:notfound"));
+ forward(elgg_get_site_url());
+ }
+ return true;
+}
+
+
+function custom_index_show_widget_area($areawidgets){
+ if (is_array($areawidgets) && sizeof($areawidgets) > 0) {
+ foreach($areawidgets as $widget) {
+ if ($widget instanceof ElggWidget) {
+ $vars['entity'] = $widget;
+ $handler = $widget->handler;
+ 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);
+ }
+ echo elgg_view_module('featured', $widget->title, $content, array('class' => 'elgg-module-highlight'));
+ } else {
+ echo $widget;
+ }
+ }
+ }
+}
+
+function custom_index_build_columns($area_widget_list, $widgettypes, $build_server_side = true) {
+
+ $column_widgets_view = array();
+ $column_widgets_string = "";
+
+ if (is_array($area_widget_list) && sizeof($area_widget_list) > 0) {
+ foreach ($area_widget_list as $widget) {
+ if ($build_server_side ) {
+ $title = $widget->widget_title;
+ if (!$title) {
+ $title = $widgettypes[$widget->handler]->name;
+ if (!$title) {
+ $title = $widget->handler;
+ }
+ }
+ $widget->title = $title;
+
+ if (($widget->guest_only == "yes" && !elgg_is_logged_in()) || $widget->guest_only == "no" || !isset($widget->guest_only)) {
+ $column_widgets_view[] = $widget;
+ }
+ } else {
+ if (!empty($column_widgets_string)) {
+ $column_widgets_string .= "::";
+ }
+ $column_widgets_string .= "{$widget->handler}::{$widget->getGUID()}";
+ }
+ }
+
+ if ($build_server_side) {
+ return $column_widgets_view;
+ } else {
+ return $column_widgets_string;
+ }
+ }
+ return null;
+}
diff --git a/mod/custom_index_widgets/views/default/admin/appearance/custom_index_widgets.php b/mod/custom_index_widgets/views/default/admin/appearance/custom_index_widgets.php
new file mode 100644
index 000000000..491c878e5
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/admin/appearance/custom_index_widgets.php
@@ -0,0 +1,56 @@
+<?php
+
+
+elgg_push_context('custom_index_widgets');
+elgg_set_page_owner_guid(elgg_get_config('site_guid'));
+
+$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, true);
+$show_access = elgg_extract('show_access', $vars, true);
+
+
+$owner = elgg_get_page_owner_entity();
+
+
+$context = elgg_get_context();
+$widget_types = elgg_get_widget_types($context, true);
+$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,
+ );
+
+ 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>';
+}
+
+
diff --git a/mod/custom_index_widgets/views/default/custom_index_widgets/css.php b/mod/custom_index_widgets/views/default/custom_index_widgets/css.php
new file mode 100644
index 000000000..e80d28684
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/custom_index_widgets/css.php
@@ -0,0 +1,347 @@
+<?php
+ /**
+ * Custom Index page css extender
+ *
+ * @package custom_index
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider <info@elgg.com>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.org/
+ */
+?>
+
+.icon_members {
+ float:left;
+ margin:2pt 5px 3px 0pt;
+}
+
+.icon_latest {
+ margin:0 auto;
+}
+#login-box{
+ width:100%;
+}
+#login-box form{
+ width:auto;
+}
+
+#login-box input[type="text"],
+#login-box input[type="password"]{
+ width: 95%;
+}
+
+#rightcolumn_widgets,
+#leftcolumn_widgets,
+#middlecolumn_widgets{
+ min-height: 1px;
+}
+
+
+#rightcolumn_widgets.small_edit_mode_box,
+#leftcolumn_widgets.small_edit_mode_box,
+#middlecolumn_widgets.small_edit_mode_box,
+#customise_page_view table tr td h2.small_edit_mode_box {
+ margin:5px 10px 0 0;
+ width: auto;
+}
+#rightcolumn_widgets.medium_edit_mode_box,
+#leftcolumn_widgets.medium_edit_mode_box,
+#middlecolumn_widgets.medium_edit_mode_box,
+#customise_page_view table tr td h2.medium_edit_mode_box{
+ margin:5px 10px 0 0;
+ width: auto;
+}
+#rightcolumn_widgets.big_edit_mode_box,
+#leftcolumn_widgets.big_edit_mode_box,
+#middlecolumn_widgets.big_edit_mode_box,
+#customise_page_view table tr td h2.big_edit_mode_box{
+ margin:5px 10px 0 0;
+ width: auto;
+}
+#rightcolumn_widgets.half_edit_mode_box,
+#leftcolumn_widgets.half_edit_mode_box,
+#middlecolumn_widgets.half_edit_mode_box,
+#customise_page_view table tr td h2.half_edit_mode_box{
+ margin:5px 10px 0 0;
+ width: auto;
+}
+
+#rightcolumn_widgets.small_index_mode_box,
+#leftcolumn_widgets.small_index_mode_box,
+#middlecolumn_widgets.small_index_mode_box,
+#customise_page_view table tr td h2.small_index_mode_box {
+ /*width: 312px;*/
+ width: auto;
+ padding: 0 0 5px;
+ margin-right: 10px;
+ border: 0 none;
+}
+#rightcolumn_widgets.medium_index_mode_box,
+#leftcolumn_widgets.medium_index_mode_box,
+#middlecolumn_widgets.medium_index_mode_box,
+#customise_page_view table tr td h2.medium_index_mode_box{
+ /*width: 608px;*/
+ width: auto;
+ padding: 0 0 5px;
+ margin-right: 10px;
+ border: 0 none;
+}
+#rightcolumn_widgets.big_index_mode_box,
+#leftcolumn_widgets.big_index_mode_box,
+#middlecolumn_widgets.big_index_mode_box,
+#customise_page_view table tr td h2.big_index_mode_box{
+ width: auto;
+ padding: 0 0 5px;
+ margin-right: 10px;
+ border: 0 none;
+}
+#rightcolumn_widgets.half_index_mode_box,
+#leftcolumn_widgets.half_index_mode_box,
+#middlecolumn_widgets.half_index_mode_box,
+#customise_page_view.half_index_mode_box h2{
+ /*width: 460px;*/
+ width: auto;
+ padding: 0 0 5px;
+ margin: 10px 3px;
+ border: 0 none;
+}
+
+table.index_mode{
+ width: 96%;
+ margin-left: 2%;
+ border: 0 none;
+}
+
+td.small {
+ width: 38%;
+}
+td.half {
+ width: 47%;
+}
+td.medium {
+ width: 57%;
+}
+td.big {
+ width: 100%;
+}
+.logintop{
+ margin:0 auto;
+ padding:0;
+ padding-top: 3px;
+ width:990px;
+}
+.logintop_links{
+ margin-left:80px;
+}
+
+.logintop_links a {
+ margin:0 0 0 2px;
+ color:#999999;
+ padding:3px;
+}
+.logintop_links a:hover {
+ color:#eeeeee;
+}
+
+#logintopform{
+ color: #BBBBBB;
+ font-size: 12px;
+}
+
+#logintopform input.logintop_input {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ background-color:#FFFFFF;
+ border:1px solid #BBBBBB;
+ color:#999999;
+ font-size:12px;
+ font-weight:bold;
+ margin:0pt;
+ padding:2px;
+ width:180px;
+ height:12px;
+}
+#logintopform input.logintop_submit_button {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ color:#333333;
+ background: #cccccc;
+ border:none;
+ font-size:12px;
+ font-weight:bold;
+ margin:0px;
+ padding:2px;
+ width:auto;
+ height:18px;
+ cursor:pointer;
+}
+#logintopform input.logintop_submit_button:hover {
+ color:#ffffff;
+ background: #4690d6;
+}
+
+/* ***************************************
+STANDARD BOXES
+*************************************** */
+.standard_box {
+ margin: 0 0 20px 0;
+ height:auto;
+
+}
+/* IE6 fix */
+* html .standard_box {
+ height:10px;
+}
+.standard_box_header {
+ color: #4690d6;
+ padding: 5px 10px 5px 10px;
+ margin:0;
+ border-left: 1px solid white;
+ border-right: 1px solid #cccccc;
+ border-bottom: 1px solid #cccccc;
+ -moz-border-radius-topleft:8px;
+ -moz-border-radius-topright:8px;
+ -webkit-border-top-right-radius:8px;
+ -webkit-border-top-left-radius:8px;
+ background:#dedede;
+}
+.standard_box_header h1 {
+ color: #0054a7;
+ font-size:1.25em;
+ line-height: 1.2em;
+}
+.standard_box_content {
+ padding: 10px 0 10px 0;
+ margin:0;
+ height:auto;
+ background:#dedede;
+ -moz-border-radius-bottomleft:8px;
+ -moz-border-radius-bottomright:8px;
+ -webkit-border-bottom-right-radius:8px;
+ -webkit-border-bottom-left-radius:8px;
+ border-left: 1px solid white;
+ border-right: 1px solid #cccccc;
+ border-bottom: 1px solid #cccccc;
+}
+.standard_box_content .contentWrapper {
+ margin-bottom:5px;
+}
+.standard_box_editpanel {
+ display: none;
+ background: #a8a8a8;
+ padding:10px 10px 5px 10px;
+ border-left: 1px solid white;
+ border-bottom: 1px solid white;
+}
+.standard_box_editpanel p {
+ margin:0 0 5px 0;
+}
+.standard_box_header a.toggle_box_contents {
+ color: #4690d6;
+ cursor:pointer;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size:20px;
+ font-weight: bold;
+ text-decoration:none;
+ float:right;
+ margin: 0;
+ margin-top: -7px;
+}
+.standard_box_header a.toggle_box_edit_panel {
+ color: #4690d6;
+ cursor:pointer;
+ font-size:9px;
+ text-transform: uppercase;
+ text-decoration:none;
+ font-weight: normal;
+ float:right;
+ margin: 3px 10px 0 0;
+}
+.standard_box_editpanel label {
+ font-weight: normal;
+ font-size: 100%;
+}
+
+
+/* ***************************************
+PLAIN BOXES
+*************************************** */
+.plain_box , .plain.collapsable_box{
+ margin: 0 0 20px 0;
+ height:auto;
+
+}
+/* IE6 fix */
+* html .plain_box , * html .plain.collapsable_box {
+ height:10px;
+}
+.plain_box_header , .plain.collapsable_box_header{
+ color: #4690d6;
+ padding: 5px 10px 5px 10px;
+ margin:0;
+ border-left: 1px solid #cccccc;
+ border-right: 1px solid #cccccc;
+ border-top: 1px solid #cccccc;
+ -moz-border-radius-topleft:8px;
+ -moz-border-radius-topright:8px;
+ -webkit-border-top-right-radius:8px;
+ -webkit-border-top-left-radius:8px;
+ background:transparent;
+}
+.plain_box_header h1, .plain.collapsable_box_header h1 {
+ color: #0054a7;
+ font-size:1.25em;
+ line-height: 1.2em;
+}
+.plain_box_content, .plain.collapsable_box_content {
+ padding: 10px 0 10px 0;
+ margin:0;
+ height:auto;
+ -moz-border-radius-bottomleft:8px;
+ -moz-border-radius-bottomright:8px;
+ -webkit-border-bottom-right-radius:8px;
+ -webkit-border-bottom-left-radius:8px;
+ border-left: 1px solid #cccccc;
+ border-right: 1px solid #cccccc;
+ border-bottom: 1px solid #cccccc;
+ background:transparent;
+
+}
+.plain_box_content .contentWrapper , .plain.collapsable_box_content .contentWrapper{
+ margin-bottom:5px;
+}
+.plain_box_editpanel .plain.collapsable_box_editpanel{
+ display: none;
+ background: #a8a8a8;
+ padding:10px 10px 5px 10px;
+ border-left: 1px solid white;
+ border-bottom: 1px solid white;
+}
+.plain_box_editpanel p , .plain.collapsable_box_editpanel{
+ margin:0 0 5px 0;
+}
+.plain_box_header a.toggle_box_contents , .plain.collapsable_box_header a.toggle_box_contents{
+ color: #4690d6;
+ cursor:pointer;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size:20px;
+ font-weight: bold;
+ text-decoration:none;
+ float:right;
+ margin: 0;
+ margin-top: -7px;
+}
+.plain_box_header a.toggle_box_edit_panel , .plain.collapsable_box_header a.toggle_box_edit_panel {
+ color: #4690d6;
+ cursor:pointer;
+ font-size:9px;
+ text-transform: uppercase;
+ text-decoration:none;
+ font-weight: normal;
+ float:right;
+ margin: 3px 10px 0 0;
+}
+.plain_box_editpanel label , .plain.collapsable_box_editpanel label{
+ font-weight: normal;
+ font-size: 100%;
+}
diff --git a/mod/custom_index_widgets/views/default/custom_index_widgets/footerlinks.php b/mod/custom_index_widgets/views/default/custom_index_widgets/footerlinks.php
new file mode 100644
index 000000000..ed92a9032
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/custom_index_widgets/footerlinks.php
@@ -0,0 +1,3 @@
+<div class="mts float-alt">
+<a href="http://fxnion.free.fr/"><img src="<?php echo elgg_get_site_url(); ?>mod/custom_index_widgets/images/fxnion_elgg_custom_index.gif" alt="Elgg Custom index by Fx Nion" title="Elgg Custom index by Fx Nion"/></a>
+</div>
diff --git a/mod/custom_index_widgets/views/default/page/layouts/edit_widgets.php b/mod/custom_index_widgets/views/default/page/layouts/edit_widgets.php
new file mode 100644
index 000000000..f61cea356
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/edit_widgets.php
@@ -0,0 +1,61 @@
+<?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,
+ );
+ 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/mod/custom_index_widgets/views/default/page/layouts/index.php b/mod/custom_index_widgets/views/default/page/layouts/index.php
new file mode 100644
index 000000000..a73a0d7b1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td align="left" valign="top" class="half">
+ <div id="leftcolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="half">
+ <div id="middlecolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr >
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="rightcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_1rsss.php b/mod/custom_index_widgets/views/default/page/layouts/index_1rsss.php
new file mode 100644
index 000000000..0d43469e9
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_1rsss.php
@@ -0,0 +1,29 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td align="left" valign="top" class="small">
+ <div id="leftcolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="small">
+ <div id="middlecolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="small">
+ <div id="rightcolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rbhh.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rbhh.php
new file mode 100644
index 000000000..7f8c22437
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rbhh.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="leftcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="half">
+ <div id="middlecolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="half">
+ <div id="rightcolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rbms.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rbms.php
new file mode 100644
index 000000000..fdb0cf38b
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rbms.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="leftcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="medium">
+ <div id="middlecolumn_widgets" class="medium_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="small">
+ <div id="rightcolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rbsm.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rbsm.php
new file mode 100644
index 000000000..d5a81f1f5
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rbsm.php
@@ -0,0 +1,28 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="leftcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td align="left" valign="top" class="small">
+ <div id="middlecolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="medium">
+ <div id="rightcolumn_widgets" class="medium_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rhhb.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rhhb.php
new file mode 100644
index 000000000..ae2995ff9
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rhhb.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td align="left" valign="top" class="half">
+ <div id="leftcolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="half">
+ <div id="middlecolumn_widgets" class="half_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="rightcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rmsb.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rmsb.php
new file mode 100644
index 000000000..a774a4a42
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rmsb.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td align="left" valign="top" class="medium">
+ <div id="leftcolumn_widgets" class="medium_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="small">
+ <div id="middlecolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="rightcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/page/layouts/index_2rsmb.php b/mod/custom_index_widgets/views/default/page/layouts/index_2rsmb.php
new file mode 100644
index 000000000..72bb92d3d
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/page/layouts/index_2rsmb.php
@@ -0,0 +1,30 @@
+<?php
+ $area1widgets = $vars['area1'];
+ $area2widgets = $vars['area2'];
+ $area3widgets = $vars['area3'];
+ $layoutmode = $vars['layoutmode']; //edit, index
+?>
+
+ <table cellspacing="10" cellpadding="10" width="100%" class="<?php echo elgg_echo($layoutmode); ?>">
+ <tr>
+ <td align="left" valign="top" class="small">
+ <div id="leftcolumn_widgets" class="small_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area1widgets) ?>
+ </div>
+ </td>
+ <td align="left" valign="top" class="medium">
+ <div id="middlecolumn_widgets" class="medium_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area2widgets) ?>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="left" valign="top" class="big">
+ <div id="rightcolumn_widgets" class="big_<?php echo elgg_echo($layoutmode); ?>_box">
+ <?php custom_index_show_widget_area($area3widgets) ?>
+ </div>
+ </td>
+ </tr>
+ </table>
+
+
diff --git a/mod/custom_index_widgets/views/default/plugins/custom_index_widgets/settings.php b/mod/custom_index_widgets/views/default/plugins/custom_index_widgets/settings.php
new file mode 100644
index 000000000..ef70eeb8d
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/plugins/custom_index_widgets/settings.php
@@ -0,0 +1,61 @@
+<?php
+
+?>
+<div>
+ <div class="contentWrapper">
+ <table>
+ <tr>
+ <td style="width:50%"><?php echo elgg_echo("custom_index_widgets:layout"); ?></td>
+ <td>
+ <?php echo elgg_view('input/dropdown', array(
+ 'name' => 'params[ciw_layout]',
+ 'options_values' => array(
+ 'index' => 'Default',
+ 'index_2rmsb' => elgg_echo('custom_index_widgets:index_2rmsb'),
+ 'index_2rsmb' => elgg_echo('custom_index_widgets:index_2rsmb'),
+ 'index_2rhhb' => elgg_echo('custom_index_widgets:index_2rhhb'),
+ 'index_2rbhh' => elgg_echo('custom_index_widgets:index_2rbhh'),
+
+ 'index_2rbsm' => elgg_echo('custom_index_widgets:index_2rbsm'),
+ 'index_2rbms' => elgg_echo('custom_index_widgets:index_2rbms'),
+
+ 'index_1rsss' => elgg_echo('custom_index_widgets:index_1rsss')
+
+ ),
+ 'value' => $vars["entity"]->ciw_layout
+ ));
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td style="width:50%"><?php echo elgg_echo("custom_index_widgets:login_style"); ?></td>
+ <td>
+ <?php echo elgg_view('input/dropdown', array(
+ 'name' => 'params[login_style]',
+ 'options_values' => array(
+ 'inlayout' => elgg_echo('custom_index_widgets:inlayout'),
+ 'topbar' => elgg_echo('custom_index_widgets:topbar'),
+ ),
+ 'value' => $vars["entity"]->login_style
+ ));
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td style="width:50%"><?php echo elgg_echo("custom_index_widgets:showdashboard"); ?></td>
+ <td>
+ <?php echo elgg_view('input/dropdown', array(
+ 'name' => 'params[ciw_showdashboard]',
+ 'options_values' => array(
+ 'yes' => elgg_echo('custom_index_widgets:showdashboard_yes'),
+ 'no' => elgg_echo('custom_index_widgets:showdashboard_no'),
+ ),
+ 'value' => $vars["entity"]->ciw_showdashboard
+ ));
+ ?>
+ </td>
+ </tr>
+
+ </table>
+ </div>
+</div>
diff --git a/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/content.php b/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/content.php
new file mode 100644
index 000000000..bee459e1d
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/content.php
@@ -0,0 +1,59 @@
+<?php
+$maintype = "object";
+$subtype = $vars["entity"]->widget_subtype;
+if (empty($subtype) || $subtype == 'All') {
+ $subtype = ELGG_ENTITIES_ANY_VALUE;
+}
+
+if ($subtype == 'user') {$maintype='user';}
+if ($subtype == 'group') {$maintype='group';}
+
+
+$num_items = $vars['entity']->num_items;
+if (!isset($num_items))
+ $num_items = 20;
+
+$created_time_limit = $vars['entity']->created_time_limit;
+if (!isset($created_time_limit) || $created_time_limit == 'all') {
+ $created_time = ELGG_ENTITIES_ANY_VALUE;
+}
+elseif ($created_time_limit == 'day') {
+ $created_time = time()-(3600*24);
+}
+elseif ($created_time_limit == 'week') {
+ $created_time = time()-(3600*24*7);
+}
+elseif ($created_time_limit == 'month') {
+ $created_time = time()-(3600*24*30);
+}
+
+$metadata_name = $vars['entity']->metadata_name;
+if (!isset($metadata_name)) {
+ $metadata_name = 'tags';
+} else {
+ $metadata_name = $metadata_name;
+}
+
+$threshold = $vars['entity']->threshold;
+if (!isset($threshold))
+ $threshold = 1;
+
+$widget_group = $vars["entity"]->widget_group;
+if (empty($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+
+elgg_push_context('tags');
+$options = array('threshold' => $threshold,
+ 'limit' => $num_items,
+ 'type' => $maintype,
+ 'subtype' => $subtype,
+ 'tag_name' => $metadata_name,
+ 'created_time_lower' => $created_time,
+ 'container_guid' => $widget_group);
+
+$body = elgg_view_tagcloud($options);
+elgg_pop_context();
+
+echo $body;
+
+?>
diff --git a/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/edit.php b/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/edit.php
new file mode 100644
index 000000000..84b2fa861
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/cloud_generic_index/edit.php
@@ -0,0 +1,120 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $created_time_limit = $vars['entity']->created_time_limit;
+ if (!isset($created_time_limit)) $created_time_limit = 'all';
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $metadata_name = $vars['entity']->metadata_name;
+ if (!isset($metadata_name)) $metadata_name = "";
+
+ $threshold = $vars['entity']->threshold;
+ if (!isset($threshold)) $threshold = 1;
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+ $widget_subtype = $vars["entity"]->widget_subtype;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_subtype'); ?>
+ :
+ <?php
+
+ $subtypes = get_data("SELECT subtype from {$CONFIG->dbprefix}entity_subtypes");
+ $subtype_list = array();
+ $subtype_list['All'] = '';
+ $subtype_list['user'] = 'user';
+ $subtype_list['group'] = 'group';
+
+ if ($subtypes) {
+ foreach ($subtypes as $data) {
+ $subtype_list[$data->subtype] = $data->subtype;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_subtype]', 'options_values'=>$subtype_list, 'value'=>$widget_subtype));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_created_time_limit'); ?>
+ :
+ <?php
+
+ $limits = array('all', 'month', 'week', 'day');
+ $limit_list = array();
+ foreach($limits as $limit) {
+ $limit_list[$limit] = elgg_echo("custom_index_widgets:time_limit:$limit");
+ }
+ echo '<p>'.elgg_view('input/dropdown', array('name'=>'params[created_time_limit]', 'options_values'=>$limit_list, 'value'=>$created_time_limit))."</p>";
+ ?>
+ </p>
+
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:threshold'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[threshold]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$thresholds));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:metadata_name'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[metadata_name]', 'value'=>$metadata_name));
+ ?>
+ </p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p>
diff --git a/mod/custom_index_widgets/views/default/widgets/feed_reader_index/content.php b/mod/custom_index_widgets/views/default/widgets/feed_reader_index/content.php
new file mode 100644
index 000000000..2695315d5
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/feed_reader_index/content.php
@@ -0,0 +1,8 @@
+<?php
+
+ include elgg_get_plugins_path() . 'simplepie/views/default/widgets/feed_reader/content.php';
+
+ //$body = elgg_view("simplepie/widgets/feed_reader/content", $vars);
+ //echo $body;
+
+?>
diff --git a/mod/custom_index_widgets/views/default/widgets/feed_reader_index/edit.php b/mod/custom_index_widgets/views/default/widgets/feed_reader_index/edit.php
new file mode 100644
index 000000000..5fc36bc54
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/feed_reader_index/edit.php
@@ -0,0 +1,5 @@
+<?php
+ include elgg_get_plugins_path() . 'simplepie/views/default/widgets/feed_reader/edit.php';
+ //echo elgg_view("simplepie/edit", $vars);
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/inline_content_index/content.php b/mod/custom_index_widgets/views/default/widgets/inline_content_index/content.php
new file mode 100644
index 000000000..6ed53f197
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/inline_content_index/content.php
@@ -0,0 +1,7 @@
+<div class="contentWrapper">
+ <?php
+ echo $vars[entity]->html_content;
+ ?>
+ <div class="clearfloat">
+ </div>
+</div>
diff --git a/mod/custom_index_widgets/views/default/widgets/inline_content_index/edit.php b/mod/custom_index_widgets/views/default/widgets/inline_content_index/edit.php
new file mode 100644
index 000000000..e5c319bf1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/inline_content_index/edit.php
@@ -0,0 +1,46 @@
+<?php
+ $widget_title = $vars['entity']->widget_title;
+ $html_content = $vars['entity']->html_content;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:html_content'); ?>
+<?php
+ echo elgg_view('input/longtext', array(
+ 'name' => 'params[html_content]',
+ 'value' => $html_content
+ ));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_activity_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_activity_index/content.php
new file mode 100644
index 000000000..4010e0cb4
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_activity_index/content.php
@@ -0,0 +1,20 @@
+<?php
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ /*
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+ */
+ $widget_datas = elgg_list_river(0, $widget_group, '', '', '', '', $num_items,0,0,false);
+
+ echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_activity_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_activity_index/edit.php
new file mode 100644
index 000000000..622655307
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_activity_index/edit.php
@@ -0,0 +1,64 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ //$groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $groups = elgg_get_entities(array('type'=>'group'));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_album_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_album_index/content.php
new file mode 100644
index 000000000..c511a775a
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_album_index/content.php
@@ -0,0 +1,64 @@
+<div class="contentWrapper">
+<?php
+
+ $object_type ='album';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items))
+ $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group))
+ $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ $owner_albums = elgg_get_entities("object", $object_type, $widget_group, "", $num_items, 0, false);
+
+ echo '<div id="tidypics_album_widget_container">';
+
+ if ($owner_albums) {
+ foreach($owner_albums as $album) {
+
+ if($album->cover)
+ $album_cover = '<img src="'.$vars['url'].'mod/tidypics/thumbnail.php?file_guid='.$album->cover.'&size=small" class="tidypics_album_cover" alt="' . $album->title . '"/>';
+ else
+ $album_cover = '<img src="'.$vars['url'].'mod/tidypics/graphics/empty_album.png" class="tidypics_album_cover" alt="' . $album->title . '">';
+?>
+ <div class="tidypics_album_widget_single_item">
+ <div class="tidypics_album_widget_title"><a href="<?php echo $album->getURL();?>"><?php echo $album->title;?></a></div>
+ <div class="tidypics_album_widget_timestamp"> <?php echo elgg_echo("album:created:on") . ' ' . elgg_get_friendly_time($album->time_created);?></div>
+<?php
+ //get the number of comments
+ $numcomments = $album->countComments();
+ if ($numcomments)
+ echo "<a href=\"{$album->getURL()}\">" . sprintf(elgg_echo("comments")) . " (" . $numcomments . ")</a><br>";
+?>
+ <a href="<?php echo $album->getURL();?>"><?php echo $album_cover;?></a>
+ </div>
+<?php
+ } //end of foreach loop
+
+ // bottom link to all group/user albums
+ /*if (is_null($owner->username) || empty($owner->username)) {
+ echo '<p class="profile_info_edit_buttons"><a href="' . $vars['url'] . 'pg/photos/world">' . elgg_echo('album:all') . '</a></p>';
+ } else {
+ echo '<p class="tidypics_download"><a href="' . $vars['url'] . 'pg/photos/owned/' . $owner->username . '">' . elgg_echo('album:more') . '</a></p>';
+ }*/
+
+ }
+
+ /*if (can_write_to_container(0, $owner->guid)) {
+ echo '<p class="tidypics_download"><a href=' . $CONFIG->wwwroot .'pg/photos/new/' . $owner->username . '>' . elgg_echo("album:create") . '</a></p>';
+ }*/
+
+
+ //close album_widget_container div
+ echo "</div>";
+?>
+</div> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_album_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_album_index/edit.php
new file mode 100644
index 000000000..86eaa19cc
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_album_index/edit.php
@@ -0,0 +1,64 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/content.php
new file mode 100644
index 000000000..cce94185d
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/content.php
@@ -0,0 +1,43 @@
+<?php
+$object_type = 'blog';
+
+$num_items = $vars['entity']->num_items;
+if (!isset($num_items))
+ $num_items = 10;
+
+$widget_group = $vars["entity"]->widget_group;
+if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+$site_categories = $vars['config']->site->categories;
+$widget_categorie = $vars['entity']->widget_categorie;
+$widget_context_mode = $vars['entity']->widget_context_mode;
+if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+elgg_set_context($widget_context_mode);
+
+if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/edit.php
new file mode 100644
index 000000000..e89a68304
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_blogs_index/edit.php
@@ -0,0 +1,85 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/content.php
new file mode 100644
index 000000000..2622a63ea
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/content.php
@@ -0,0 +1,43 @@
+<?php
+
+ $object_type ='bookmarks';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/edit.php
new file mode 100644
index 000000000..1a15cea49
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_bookmarks_index/edit.php
@@ -0,0 +1,85 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_events_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_events_index/content.php
new file mode 100644
index 000000000..7c5ae40f3
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_events_index/content.php
@@ -0,0 +1,95 @@
+<?php
+
+ require_once($CONFIG->pluginspath.'event_calendar/models/model.php');
+
+ if(!function_exists('getLastDayOfMonth')){
+ function getLastDayOfMonth($month,$year) {
+ return idate('d', mktime(0, 0, 0, ($month + 1), 0, $year));
+ }
+ }
+
+ $object_type ='event_calendar';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items))
+ $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group))
+ $widget_group = 0;
+
+ $mode = $vars['mode']->mode;
+ if (!isset($mode))
+ $mode = "month";
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+
+ elgg_set_context($widget_context_mode);
+
+
+ $original_start_date = date('Y-m-d');
+ $day = 60*60*24;
+ $week = 7*$day;
+ $month = 31*$day;
+
+
+ if ($mode == "day") {
+ $start_date = $original_start_date;
+ $end_date = $start_date;
+ $start_ts = strtotime($start_date);
+ $end_ts = strtotime($end_date)+$day-1;
+ } else if ($mode == "week") {
+
+ $start_ts = strtotime($original_start_date);
+ $start_ts -= date("w",$start_ts)*$day;
+ $end_ts = $start_ts + 6*$day;
+
+ $start_date = date('Y-m-d',$start_ts);
+ $end_date = date('Y-m-d',$end_ts);
+ } else {
+ $start_ts = strtotime($original_start_date);
+ $month = date('m',$start_ts);
+ $year = date('Y',$start_ts);
+ $start_date = $year.'-'.$month.'-1';
+ $end_date = $year.'-'.$month.'-'.getLastDayOfMonth($month,$year);
+ }
+
+ if ($event_calendar_first_date && ($start_date < $event_calendar_first_date)) {
+ $start_date = $event_calendar_first_date;
+ }
+
+ if ($event_calendar_last_date && ($end_date > $event_calendar_last_date)) {
+ $end_date = $event_calendar_last_date;
+ }
+
+ $start_ts = strtotime($start_date);
+
+ if ($mode == "day") {
+ $end_ts = strtotime($end_date)+$day-1;
+ } else if ($mode == "week") {
+ $end_ts = $start_ts + 6*$day;
+ } else {
+ $end_ts = strtotime($end_date);
+ }
+
+ $count = event_calendar_get_events_between($start_ts,$end_ts,true,$num_items,0,$widget_group,'-');
+ $events = event_calendar_get_events_between($start_ts,$end_ts,false,$num_items,0,$widget_group,'-');
+ //$widget_datas= $event_list = elgg_view_entity_list($events, $count, 0, $num_items, false, false);
+
+ $options = array(
+ 'list_class' => 'elgg-list-entity',
+ 'full_view' => FALSE,
+ 'pagination' => TRUE,
+ 'list_type' => 'listing',
+ 'list_type_toggle' => FALSE,
+ 'offset' => $vars['offset'],
+ 'limit' => $vars['limit'],
+ );
+ $widget_datas = elgg_view_entity_list($events, $options);
+ echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_events_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_events_index/edit.php
new file mode 100644
index 000000000..3aa20f574
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_events_index/edit.php
@@ -0,0 +1,96 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('event_calendar:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[mode]',
+ 'options_values'=>array('day'=>elgg_echo('event_calendar:day_label'),
+ 'week'=>elgg_echo('event_calendar:week_label'),
+ 'month'=>elgg_echo('event_calendar:month_label')),
+ 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_files_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_files_index/content.php
new file mode 100644
index 000000000..b726efe70
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_files_index/content.php
@@ -0,0 +1,44 @@
+<?php
+
+ $object_type ='file';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+ echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_files_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_files_index/edit.php
new file mode 100644
index 000000000..5625eca44
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_files_index/edit.php
@@ -0,0 +1,86 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ //$groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $groups = elgg_get_entities(array('type'=>'group'));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_generic_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_generic_index/content.php
new file mode 100644
index 000000000..941b5ebeb
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_generic_index/content.php
@@ -0,0 +1,47 @@
+<?php
+
+$object_type = $vars["entity"]->widget_subtype;
+if (!isset($object_type))
+ $object_type = 'ELGG_ENTITIES_ANY_VALUE';
+
+$num_items = $vars['entity']->num_items;
+if (!isset($num_items))
+ $num_items = 10;
+
+$widget_group = $vars["entity"]->widget_group;
+if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+$site_categories = $vars['config']->site->categories;
+$widget_categorie = $vars['entity']->widget_categorie;
+$widget_context_mode = $vars['entity']->widget_context_mode;
+if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+elgg_set_context($widget_context_mode);
+
+if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_generic_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_generic_index/edit.php
new file mode 100644
index 000000000..f7584a847
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_generic_index/edit.php
@@ -0,0 +1,103 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+ $widget_subtype = $vars["entity"]->widget_subtype;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_subtype'); ?>
+ :
+ <?php
+
+ $subtypes = get_data("SELECT subtype from {$CONFIG->dbprefix}entity_subtypes");
+ $subtype_list = array();
+ if ($subtypes) {
+ foreach ($subtypes as $data) {
+ $subtype_list[$data->subtype] = $data->subtype;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_subtype]', 'options_values'=>$subtype_list, 'value'=>$widget_subtype));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ //$groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $groups = elgg_get_entities(array('type'=>'group'));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_groups_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_groups_index/content.php
new file mode 100644
index 000000000..0557f874e
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_groups_index/content.php
@@ -0,0 +1,21 @@
+<?php
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'group',
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+
+
+
+echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_groups_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_groups_index/edit.php
new file mode 100644
index 000000000..71f7d6be8
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_groups_index/edit.php
@@ -0,0 +1,63 @@
+<?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_title = $vars['entity']->widget_title;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+ </p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+
+<?php
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'params[num_items]',
+ 'options_values' => array( '1' => '1',
+ '3' => '3',
+ '5' => '5',
+ '8' => '8',
+ '10' => '10',
+ '12' => '12',
+ '15' => '15',
+ '20' => '20',
+ '30' => '30',
+ '40' => '40',
+ '50' => '50',
+ '100' => '100',
+ ),
+ 'value' => $num_items
+ ));
+?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/content.php
new file mode 100644
index 000000000..22b15b37c
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/content.php
@@ -0,0 +1,50 @@
+<?php
+$object_type = 'izap_videos';
+
+$num_items = $vars['entity']->num_items;
+if (!isset($num_items))
+ $num_items = 10;
+
+$widget_group = $vars["entity"]->widget_group;
+if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+$site_categories = $vars['config']->site->categories;
+$widget_categorie = $vars['entity']->widget_categorie;
+$widget_context_mode = $vars['entity']->widget_context_mode;
+if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+elgg_set_context($widget_context_mode);
+
+if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+?>
+<div class="contentWrapper">
+ <?php
+ if (isset($widget_datas)) {
+ echo $widget_datas;
+ }
+ ?>
+ <div class="clearfloat">
+ </div>
+</div>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/edit.php
new file mode 100644
index 000000000..54c41e1a9
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_izap_videos_index/edit.php
@@ -0,0 +1,86 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_members_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_members_index/content.php
new file mode 100644
index 000000000..c4f95a77d
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_members_index/content.php
@@ -0,0 +1,20 @@
+<?php
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+ $display_avatar = $vars['entity']->display_avatar;
+ if (!isset($display_avatar)) $display_avatar = 'yes';
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'metadata_names' => 'icontime',
+ 'types' => 'user',
+ 'limit' => $num_items,
+ 'full_view' => false,
+ 'pagination' => false,
+ 'size' => 'small',
+ ));
+
+echo $widget_datas;
+?>
+
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_members_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_members_index/edit.php
new file mode 100644
index 000000000..856d5ed0b
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_members_index/edit.php
@@ -0,0 +1,79 @@
+<?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $display_avatar = $vars['entity']->display_avatar;
+ if (!isset($display_avatar)) $display_avatar = 'yes';
+
+ $widget_title = $vars['entity']->widget_title;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+
+
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+
+<?php
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'params[num_items]',
+ 'options_values' => array(
+ '7' => '7',
+ '14' => '14',
+ '21' => '21',
+ '28' => '28',
+ '35' => '35',
+ '42' => '42',
+ '49' => '49',
+ '56' => '56',
+ '100' => '100',
+ ),
+ 'value' => $num_items
+ ));
+?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:display_avatar'); ?>
+
+<?php
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'params[display_avatar]',
+ 'options_values' => array( 'yes' => 'yes',
+ 'no' => 'no',
+
+ ),
+ 'value' => $display_avatar
+ ));
+?>
+</p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_news_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_news_index/content.php
new file mode 100644
index 000000000..8a10093b1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_news_index/content.php
@@ -0,0 +1,47 @@
+<?php
+
+ $object_type ='news';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items))
+ $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+echo $widget_datas;
+?>
+
+
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_news_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_news_index/edit.php
new file mode 100644
index 000000000..063b5ddc1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_news_index/edit.php
@@ -0,0 +1,85 @@
+<?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_pages_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_pages_index/content.php
new file mode 100644
index 000000000..cc8a46d55
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_pages_index/content.php
@@ -0,0 +1,45 @@
+<?php
+
+ $object_type ='page_top';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items))
+ $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode))
+ $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+echo $widget_datas;
+?>
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_pages_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_pages_index/edit.php
new file mode 100644
index 000000000..a14371b02
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_pages_index/edit.php
@@ -0,0 +1,86 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ //$groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $groups = elgg_get_entities(array('type'=>'group'));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_photos_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_photos_index/content.php
new file mode 100644
index 000000000..bb83cac40
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_photos_index/content.php
@@ -0,0 +1,25 @@
+<div class="contentWrapper">
+<?php
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ if ($widget_group != 0){
+ $album = elgg_get_entities("object", 'album', $widget_group, "", 1, 0, false);
+ $album_guid = $album[0]->getGUID();
+ $entities = elgg_get_entities("object", "image", $album_guid, '', 999);
+ elgg_set_context('front');
+ $widgetdatas = elgg_view_entity_list($entities);
+ }else{
+ $widgetdatas = tp_get_latest_photos($num_items, 0);
+ }
+
+ echo '<div class="icon_latest">';
+ echo $widgetdatas;
+ echo '</div>';
+
+?>
+</div> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_photos_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_photos_index/edit.php
new file mode 100644
index 000000000..0ef5e53a1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_photos_index/edit.php
@@ -0,0 +1,64 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/content.php
new file mode 100644
index 000000000..1f06a0db1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/content.php
@@ -0,0 +1,45 @@
+<?php
+
+ $object_type ='task_top';
+
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = ELGG_ENTITIES_ANY_VALUE;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+ elgg_set_context($widget_context_mode);
+
+ if ($site_categories == NULL || $widget_categorie == NULL) {
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+} else {
+
+ $widget_datas = elgg_list_entities_from_metadata(array(
+ 'type'=>'object',
+ 'subtype'=>$object_type,
+ 'container_guids' => $widget_group,
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $widget_categorie,
+ ));
+}
+
+echo $widget_datas;
+?>
+
+
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/edit.php
new file mode 100644
index 000000000..c587bc184
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_tasks_index/edit.php
@@ -0,0 +1,85 @@
+ <?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_group = $vars["entity"]->widget_group;
+ if (!isset($widget_group)) $widget_group = 0;
+
+ $site_categories = $vars['config']->site->categories;
+ $widget_categorie = $vars['entity']->widget_categorie;
+ $widget_context_mode = $vars['entity']->widget_context_mode;
+ if (!isset($widget_context_mode)) $widget_context_mode = 'search';
+
+ $widget_title = $vars['entity']->widget_title;
+ $widget_group = $vars["entity"]->widget_group;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+ ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>
+ :
+ <?php
+ echo elgg_view('input/text', array('name'=>'params[widget_title]', 'value'=>$widget_title));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('group'); ?>
+ :
+ <?php
+ $groups = elgg_get_entities(array("type"=>'group','limit'=>100));
+ $group_list = array();
+ $group_list[0] = elgg_echo('custom_index_widgets:widget_all_groups');
+ if ($groups) {
+ foreach ($groups as $group) {
+ $group_list[$group->getGUID()] = $group->name;
+ }
+ }
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_group]', 'options_values'=>$group_list, 'value'=>$widget_group));
+ ?>
+ </p>
+ <?php if ($site_categories != NULL) { ?>
+ <p>
+ <?php echo elgg_echo('categories'); ?>
+ :
+ <?php
+ $categories_with_empty_choice = array_merge(array('-1'=>''), array_combine($site_categories, $site_categories));
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_categorie]', 'options_values'=>$categories_with_empty_choice, 'value'=>$widget_categorie));
+ ?>
+ </p>
+ <?php } ?>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:context_mode'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[widget_context_mode]', 'options_values'=>array('search'=>elgg_echo('custom_index_widgets:context_list'), 'detail'=>elgg_echo('custom_index_widgets:context_detail')), 'value'=>$widget_context_mode));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[num_items]', 'options_values'=>array('1'=>'1', '3'=>'3', '5'=>'5', '8'=>'8', '10'=>'10', '12'=>'12', '15'=>'15', '20'=>'20', '30'=>'30', '40'=>'40', '50'=>'50', '100'=>'100', ), 'value'=>$num_items));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_wire_index/content.php b/mod/custom_index_widgets/views/default/widgets/latest_wire_index/content.php
new file mode 100644
index 000000000..98d3b43e1
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_wire_index/content.php
@@ -0,0 +1,17 @@
+<?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+ elgg_set_context('search');
+
+ $widget_datas = elgg_list_entities(array(
+ 'type'=>'object',
+ 'subtype'=>'thewire',
+ 'limit'=>$num_items,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false));
+
+ echo $widget_datas;
+?>
+
+
diff --git a/mod/custom_index_widgets/views/default/widgets/latest_wire_index/edit.php b/mod/custom_index_widgets/views/default/widgets/latest_wire_index/edit.php
new file mode 100644
index 000000000..d08066648
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/latest_wire_index/edit.php
@@ -0,0 +1,62 @@
+<?php
+ $num_items = $vars['entity']->num_items;
+ if (!isset($num_items)) $num_items = 10;
+
+ $widget_title = $vars['entity']->widget_title;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+ </p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:num_items'); ?>
+<?php
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'params[num_items]',
+ 'options_values' => array( '1' => '1',
+ '3' => '3',
+ '5' => '5',
+ '8' => '8',
+ '10' => '10',
+ '12' => '12',
+ '15' => '15',
+ '20' => '20',
+ '30' => '30',
+ '40' => '40',
+ '50' => '50',
+ '100' => '100',
+ ),
+ 'value' => $num_items
+ ));
+?>
+</p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
diff --git a/mod/custom_index_widgets/views/default/widgets/login_index/content.php b/mod/custom_index_widgets/views/default/widgets/login_index/content.php
new file mode 100644
index 000000000..1e82df544
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/login_index/content.php
@@ -0,0 +1,15 @@
+<?php
+
+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 = elgg_view("core/account/login_box");
+}
+
+echo $top_box;
+?>
+
+
+
diff --git a/mod/custom_index_widgets/views/default/widgets/login_index/edit.php b/mod/custom_index_widgets/views/default/widgets/login_index/edit.php
new file mode 100644
index 000000000..149008323
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/login_index/edit.php
@@ -0,0 +1,27 @@
+<?php
+ $widget_title = $vars['entity']->widget_title;
+
+ $show_welcome = $vars['entity']->show_welcome;
+ if (!isset($show_welcome)) $show_welcome = "yes";
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+</p> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/rich_media_index/content.php b/mod/custom_index_widgets/views/default/widgets/rich_media_index/content.php
new file mode 100644
index 000000000..dddc32bd7
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/rich_media_index/content.php
@@ -0,0 +1,27 @@
+<?php
+
+ $widget_video_width = $vars['entity']->widget_video_width;
+ $widget_video_height = $vars['entity']->widget_video_height;
+ $widget_video_url = $vars['entity']->widget_video_url;
+ $widget_video_caption = $vars['entity']->widget_video_caption;
+
+ if (!isset($widget_video_width)){
+ $widget_video_width = '250';
+ }
+ if (!isset($widget_video_height)){
+ $widget_video_height = '250';
+ }
+
+?>
+
+<div class="contentWrapper" align="center">
+ <a id="media<?php echo $vars['entity']->getGUID();?>" class="media" href="<?php echo $widget_video_url;?>"><?php echo $widget_video_title;?></a> <div class="clearfloat">
+ </div>
+</div>
+<?php if (isset($widget_video_url)) { ?>
+<script type="text/javascript">
+ jQuery(document).ready(function($){
+ $('#media<?php echo $vars['entity']->getGUID();?>').media({width:<?php echo $widget_video_width;?>, height:<?php echo $widget_video_height;?>, autoplay: true});
+ });
+</script>
+<?php } ?> \ No newline at end of file
diff --git a/mod/custom_index_widgets/views/default/widgets/rich_media_index/edit.php b/mod/custom_index_widgets/views/default/widgets/rich_media_index/edit.php
new file mode 100644
index 000000000..a3956159c
--- /dev/null
+++ b/mod/custom_index_widgets/views/default/widgets/rich_media_index/edit.php
@@ -0,0 +1,78 @@
+<?php
+ $widget_title = $vars['entity']->widget_title;
+ $widget_video_width = $vars['entity']->widget_video_width;
+ $widget_video_height = $vars['entity']->widget_video_height;
+ $widget_video_url = $vars['entity']->widget_video_url;
+ $widget_video_title = $vars['entity']->widget_video_title;
+
+ $guest_only = $vars['entity']->guest_only;
+ if (!isset($guest_only)) $guest_only = "no";
+
+ $box_style = $vars['entity']->box_style;
+ if (!isset($box_style)) $box_style = "collapsable";
+
+?>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:widget_title'); ?>:
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_title]',
+ 'value' => $widget_title
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:widget_video_caption'); ?>
+<?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_video_caption]',
+ 'value' => $widget_video_caption
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:widget_video_url'); ?>
+<?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_video_url]',
+ 'value' => $widget_video_url
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:widget_video_width'); ?>
+<?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_video_width]',
+ 'value' => $widget_video_width
+ ));
+ ?>
+</p>
+<p>
+<?php echo elgg_echo('custom_index_widgets:widget_video_height'); ?>
+<?php
+ echo elgg_view('input/text', array(
+ 'name' => 'params[widget_video_height]',
+ 'value' => $widget_video_height
+ ));
+ ?>
+</p>
+<p>
+ <?php echo elgg_echo('custom_index_widgets:box_style'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[box_style]',
+ 'options_values'=>array('plain'=>'Plain', 'plain collapsable'=>'Plain and collapsable', 'collapsable'=>'Collapsable', 'standard' => 'No Collapsable'),
+ 'value'=>$box_style));
+ ?>
+ </p>
+ <p>
+ <?php echo elgg_echo('custom_index_widgets:guest_only'); ?>
+ :
+ <?php
+ echo elgg_view('input/dropdown', array('name'=>'params[guest_only]',
+ 'options_values'=>array('yes'=>'yes', 'no'=>'no'),
+ 'value'=>$guest_only));
+ ?>
+ </p>
+
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..266b5406e
--- /dev/null
+++ b/mod/developers/languages/en.php
@@ -0,0 +1,69 @@
+<?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.
+ This can break non-HTML views in the default viewtype. See developers_wrap_views() for details.",
+ '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..23e726e2b
--- /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>https://github.com/Elgg/Elgg/issues</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..94d0f652c
--- /dev/null
+++ b/mod/developers/start.php
@@ -0,0 +1,209 @@
+<?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
+ *
+ * 1. Only process views served with the 'default' viewtype.
+ * 2. Does not wrap views that begin with js/ or css/ as they are not HTML.
+ * 3. Does not wrap views that are images (start with icon/). Is this still true?
+ * 4. Does not wrap input and output views (why?).
+ * 5. Does not wrap html head or the primary page shells
+ *
+ * @warning this will break views in the default viewtype that return non-HTML data
+ * that do not match the above restrictions.
+ */
+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..ecd35ac65
--- /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..fcb6f768a
--- /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..a53255291
--- /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..7d619dcea
--- /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..3aa1eda26
--- /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..3edb0bd7c
--- /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..04f5917b4
--- /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..0439bd577
--- /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..6efcd8890
--- /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..01bc6d434
--- /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..70cd31d2a
--- /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..44e04cd7c
--- /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..f5f203947
--- /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..1da6a1fd9
--- /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..f5e1b632d
--- /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..90bb8ff46
--- /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..dd282dc83
--- /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..d843853e3
--- /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..0b9fd9db7
--- /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..a3a7b2cfa
--- /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/mod/dokuwiki/AUTHORS b/mod/dokuwiki/AUTHORS
new file mode 100644
index 000000000..83b5cf583
--- /dev/null
+++ b/mod/dokuwiki/AUTHORS
@@ -0,0 +1,2 @@
+Pablo Martin <devel@lorea.cc>
+Sem <sembrestels@n-1.cc>
diff --git a/mod/dokuwiki/COPYING b/mod/dokuwiki/COPYING
new file mode 100755
index 000000000..60549be51
--- /dev/null
+++ b/mod/dokuwiki/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library 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
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. 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 program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/mod/dokuwiki/README b/mod/dokuwiki/README
new file mode 100644
index 000000000..40e1f52ec
--- /dev/null
+++ b/mod/dokuwiki/README
@@ -0,0 +1,31 @@
+Elgg dokuwiki integration
+------------------------
+
+Adds wikis for groups, and integrates the user and permission system of elgg.
+
+NOTES:
+------------------------
+- Although the goal is to be able to use vanilla dokuwiki with maybe some extensions,
+ at the moment we provide a slightly modified version.
+- doku.php globals are not known, and had to be redeclared.
+- $_REQUEST not defined... dont know the reason but its something of elgg. -> yes elgg is mangling it... **had to comment it on elgg core**
+- acl is hardcoded, added a getACL method on the auth class to be able to generate
+ the acl on the fly... also setACL and modified the admin plugin to be able to use the auth backend.
+- uses an 'elgg' auth module, and a special dokuwiki template.
+- dokuwiki defines the javascript $ symbol, which conflicts with elgg usage of jquery, so had to change all usage inside dokuwiki (just a few instances).
+
+LICENSE:
+-----------------------
+- elgg plugin uses GPLv2. dokuwiki and mods (all under vendors/dokuwiki) go with original license to original copyright holders.
+
+REPO:
+-----------------------
+You can follow code changes or submit tickets at: https://github.com/lorea/dokuwiki
+
+TODO:
+------------------------
+- Maybe just one big wiki for the whole site using namespaces?
+
+---
+devel@lorea.cc
+
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/mod/dokuwiki/languages/ca.php b/mod/dokuwiki/languages/ca.php
new file mode 100644
index 000000000..ca2c0df1e
--- /dev/null
+++ b/mod/dokuwiki/languages/ca.php
@@ -0,0 +1,18 @@
+<?php
+$language = array (
+ 'dokuwiki:wiki' => 'Wiki',
+ 'dokuwiki:title' => 'Wikis',
+ 'item:object:dokuwiki' => 'Wikis',
+ 'dokuwiki:wikifrom' => 'la wiki de %s',
+ 'dokuwiki:pages' => '%s pàgines',
+ 'dokuwiki:dokuwiki' => 'Wiki',
+ 'dokuwiki:group' => 'Wiki del group',
+ 'dokuwiki:userwiki' => 'La meva Wiki',
+ 'dokuwiki:sidebar' => 'Navegació wiki',
+ 'groups:enabledokuwiki' => 'Activar la wiki del grup',
+ 'groups:enabledokuwiki_frontpage' => 'Mostra la pàgina d\'inici de la wiki a la pàgina principal del grup (només si la wiki està activada)',
+ 'groups:enabledokuwiki_frontsidebar' => 'Mostra la barra lateral de la wiki a la pàgina principal del grup (només si la wiki està activada)',
+ 'dokuwiki' => 'Wikis',
+ 'dokuwiki:river:modified' => '%s ha modificat la pàgina %s el %s',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/dokuwiki/languages/de.php b/mod/dokuwiki/languages/de.php
new file mode 100755
index 000000000..e951d0b41
--- /dev/null
+++ b/mod/dokuwiki/languages/de.php
@@ -0,0 +1,21 @@
+<?php
+
+// Mit dem translation browser generiert
+
+$german = array(
+ 'dokuwiki:wiki' => "Wiki" ,
+ 'dokuwiki:groupwiki' => "GruppenWiki" ,
+ 'dokuwiki:userwiki' => "Mein Wiki" ,
+ 'dokuwiki' => "Wikis" ,
+ 'item:object:dokuwiki' => "Wikis" ,
+ 'dokuwiki:title' => "Wikis" ,
+ 'dokuwiki:wikifrom' => "Wiki von %s" ,
+ 'dokuwiki:pages' => "Seiten von %s" ,
+ 'dokuwiki:dokuwiki' => "Wiki" ,
+ 'groups:enabledokuwiki' => "GruppenWiki einrichten" ,
+ 'dokuwiki:river:modified' => "%s hat die Seite %s im %s bearbeitet"
+);
+
+add_translation('de', $german);
+
+?> \ No newline at end of file
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/mod/dokuwiki/languages/es.php b/mod/dokuwiki/languages/es.php
new file mode 100644
index 000000000..613d79ba6
--- /dev/null
+++ b/mod/dokuwiki/languages/es.php
@@ -0,0 +1,18 @@
+<?php
+$language = array (
+ 'dokuwiki:wiki' => 'Wiki',
+ 'dokuwiki:title' => 'Wikis',
+ 'item:object:dokuwiki' => 'Wikis',
+ 'dokuwiki:wikifrom' => 'Wiki %s',
+ 'dokuwiki:pages' => 'páginas %s',
+ 'dokuwiki:dokuwiki' => 'Wiki',
+ 'dokuwiki:group' => 'Wiki del grupo',
+ 'dokuwiki:userwiki' => 'Mi wiki',
+ 'dokuwiki:sidebar' => 'Navegación wiki',
+ 'groups:enabledokuwiki' => 'Activar wiki del grupo',
+ 'groups:enabledokuwiki_frontpage' => 'Muestra la página principal de la wiki en la página principal del grupo (sólo si la wiki está activada)',
+ 'groups:enabledokuwiki_frontsidebar' => 'Muestra la barra lateral de wiki en la página principal del grupo (sólo si la wiki está activada)',
+ 'dokuwiki' => 'Wikis',
+ 'dokuwiki:river:modified' => '%s ha modificado la página %s en %s',
+);
+add_translation("es", $language); \ No newline at end of file
diff --git a/mod/dokuwiki/languages/fr.php b/mod/dokuwiki/languages/fr.php
new file mode 100644
index 000000000..dcaa14c00
--- /dev/null
+++ b/mod/dokuwiki/languages/fr.php
@@ -0,0 +1,12 @@
+<?php
+
+// Generate By translationbrowser.
+
+$french = array(
+ 'dokuwiki:userwiki' => "Mon wiki" ,
+ 'groups:enabledokuwiki' => "Habiliter le wiki groupe"
+);
+
+add_translation('fr', $french);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/languages/gl.php b/mod/dokuwiki/languages/gl.php
new file mode 100644
index 000000000..ba67b6f32
--- /dev/null
+++ b/mod/dokuwiki/languages/gl.php
@@ -0,0 +1,23 @@
+<?php
+
+// Xerado por translationbrowser
+
+$galician = array(
+ 'dokuwiki:wiki' => "Wiki" ,
+ 'dokuwiki:groupwiki' => "Wiki do grupo" ,
+ 'dokuwiki:userwiki' => "A miña Wiki" ,
+ 'dokuwiki' => "Wikis" ,
+ 'item:object:dokuwiki' => "Wikis" ,
+ 'dokuwiki:title' => "Wikis" ,
+ 'dokuwiki:wikifrom' => "%s wiki" ,
+ 'dokuwiki:pages' => "%s páxinas" ,
+ 'dokuwiki:dokuwiki' => "Wiki" ,
+ 'groups:enabledokuwiki' => "Habilitar wiki do grupo" ,
+ 'dokuwiki:river:modified' => "%s modificou a páxina %s en %s" ,
+ 'groups:enabledokuwiki_frontpage' => "Amosa la wiki na portada do grupo" ,
+ 'groups:enabledokuwiki_frontsidebar' => "Amosa la barra da wiki na portada do grupo"
+);
+
+add_translation('gl', $galician);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/languages/pl.php b/mod/dokuwiki/languages/pl.php
new file mode 100755
index 000000000..e43e14526
--- /dev/null
+++ b/mod/dokuwiki/languages/pl.php
@@ -0,0 +1,21 @@
+<?php
+
+// Generate By translationbrowser.
+
+$polish = array(
+ 'dokuwiki:wiki' => "Wiki" ,
+ 'dokuwiki:title' => "Wiki" ,
+ 'item:object:dokuwiki' => "Wiki" ,
+ 'dokuwiki:wikifrom' => "%s wiki" ,
+ 'dokuwiki:pages' => "%s strony" ,
+ 'dokuwiki:dokuwiki' => "Wiki" ,
+ 'dokuwiki:groupwiki' => "Wiki Grupy" ,
+ 'dokuwiki:userwiki' => "Twoje Wiki" ,
+ 'groups:enabledokuwiki' => "WÅ‚Ä…cz wiki grupy" ,
+ 'dokuwiki' => "Wiki" ,
+ 'dokuwiki:river:modified' => "%s modyfikacja strony %s na %s"
+);
+
+add_translation('pl', $polish);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/languages/pt.php b/mod/dokuwiki/languages/pt.php
new file mode 100644
index 000000000..4c067cd52
--- /dev/null
+++ b/mod/dokuwiki/languages/pt.php
@@ -0,0 +1,23 @@
+<?php
+
+// Gerado pelo browser de tradução.
+
+$portuguese = array(
+ 'dokuwiki:wiki' => "Wiki" ,
+ 'dokuwiki:title' => "Wikis" ,
+ 'dokuwiki:wikifrom' => "%s Wiki" ,
+ 'dokuwiki:pages' => "%s páginas" ,
+ 'dokuwiki:dokuwiki' => "Wiki" ,
+ 'dokuwiki:groupwiki' => "Wiki" ,
+ 'dokuwiki:userwiki' => "Minha Wiki" ,
+ 'groups:enabledokuwiki' => "Habilitar Wiki do grupo" ,
+ 'dokuwiki' => "Wikis" ,
+ 'dokuwiki:river:modified' => "%s modificou a página %s em %s" ,
+ 'item:object:dokuwiki' => "Wikis" ,
+ 'groups:enabledokuwiki_frontpage' => "Mostrar a página wiki principal na página principal do grupo (só se a wiki estiver habilitada)" ,
+ 'groups:enabledokuwiki_frontsidebar' => "Mostrar a barra lateral de wiki na página principal do grupo (só se a wiki estiver habilitada)"
+);
+
+add_translation('pt', $portuguese);
+
+?>
diff --git a/mod/dokuwiki/lib/dokuwiki.php b/mod/dokuwiki/lib/dokuwiki.php
new file mode 100644
index 000000000..b49e4d4ee
--- /dev/null
+++ b/mod/dokuwiki/lib/dokuwiki.php
@@ -0,0 +1,60 @@
+<?php
+
+function current_dokuwiki_entity($create = true) {
+ $page_owner = elgg_get_page_owner_guid();
+ $user = elgg_get_logged_in_user_entity();
+ //error_log($page_owner->guid);
+ //error_log($user->guid);
+ if (!$page_owner)
+ $page_owner = 0;
+ $entities = elgg_get_entities(array('types' => 'object', 'subtypes' => 'dokuwiki', 'limit' => 1, 'owner_guid' => $page_owner));
+ if ($entities) {
+ $doku = $entities[0];
+ return $doku;
+ }
+ elseif ($user && $create) {
+ elgg_set_ignore_access(true);
+ $newdoku = new ElggObject();
+ $newdoku->access_id = ACCESS_PUBLIC;
+ $newdoku->owner_guid = $page_owner;
+ $newdoku->subtype = 'dokuwiki';
+ $newdoku->container_guid = $page_owner;
+ $newdoku->save();
+ $acl = array();
+ $acl[] = "# acl.auth.php";
+ $acl[] = '# <?php exit()?\>';
+ $acl[] = "* @ALL 0";
+ $acl[] = "* @user 1";
+ $acl[] = "* @member 8";
+ $acl[] = "* @admin 16";
+ $acl[] = "* @root 255";
+ $newdoku->wiki_acl = implode("\n", $acl)."\n";
+ elgg_set_ignore_access(false);
+ return $newdoku;
+ }
+}
+
+function dokuwiki_recurse_copy($src,$dst) {
+ $dir = opendir($src);
+ @mkdir($dst);
+ while(false !== ( $file = readdir($dir)) ) {
+ if (( $file != '.' ) && ( $file != '..' )) {
+ if ( is_dir($src . '/' . $file) ) {
+ dokuwiki_recurse_copy($src . '/' . $file,$dst . '/' . $file);
+ }
+ else {
+ copy($src . '/' . $file,$dst . '/' . $file);
+ }
+ }
+ }
+ closedir($dir);
+}
+
+function dokuwiki_create_datafolder($path) {
+ if (is_dir($path)) // if it exists must be already created
+ return;
+ mkdir($path, 0700, true);
+ $orig = elgg_get_plugins_path().'dokuwiki/vendors/dokuwiki/data';
+ dokuwiki_recurse_copy($orig, $path);
+
+}
diff --git a/mod/dokuwiki/manifest.xml b/mod/dokuwiki/manifest.xml
new file mode 100644
index 000000000..ed2969216
--- /dev/null
+++ b/mod/dokuwiki/manifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Dokuwiki</name>
+ <author>Lorea developers</author>
+ <version>1.8.0</version>
+ <category>content</category>
+ <description>Dokuwiki integration for Elgg</description>
+ <website>https://lorea.org/</website>
+ <copyright>(C) Lorea 2011-2013</copyright>
+ <license>GNU General Public License, version 2 or later</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>groups</plugin>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/dokuwiki/start.php b/mod/dokuwiki/start.php
new file mode 100644
index 000000000..05c7c01f2
--- /dev/null
+++ b/mod/dokuwiki/start.php
@@ -0,0 +1,168 @@
+<?php
+/**
+ * Elgg dokuwiki plugin
+ *
+ * @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
+ */
+
+elgg_register_event_handler('init','system','dokuwiki_init');
+
+function dokuwiki_init(){
+
+ elgg_register_library('elgg:dokuwiki', elgg_get_plugins_path().'dokuwiki/lib/dokuwiki.php');
+
+ elgg_register_entity_type('object','dokuwiki');
+ elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'dokuwiki_icon_hook');
+ elgg_register_entity_url_handler('object', 'dokuwiki', 'dokuwiki_url');
+
+ // add block link to
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'dokuwiki_owner_block_menu');
+
+ elgg_register_page_handler('dokuwiki','dokuwiki_page_handler');
+
+ add_group_tool_option('dokuwiki',elgg_echo('groups:enabledokuwiki'),false);
+ add_group_tool_option('dokuwiki_frontsidebar',elgg_echo('groups:enabledokuwiki_frontsidebar'),false);
+ add_group_tool_option('dokuwiki_frontpage',elgg_echo('groups:enabledokuwiki_frontpage'),false);
+
+ elgg_extend_view('groups/profile/summary','dokuwiki/grouppage');
+ elgg_extend_view('groups/tool_latest','dokuwiki/sidebar');
+
+ // Extending CSS
+ elgg_extend_view('css/elgg', 'dokuwiki/css');
+
+ // add a site navigation item
+ $item = new ElggMenuItem('wiki', elgg_echo('dokuwiki:title'), 'dokuwiki/all');
+ elgg_register_menu_item('site', $item);
+
+ elgg_extend_view("page/elements/head", "dokuwiki/metatags");
+}
+
+ /**
+ * Dispatches dokuwiki pages.
+ * URLs take the form of
+ * All wikis: dokuwiki/all
+ * Group wiki: dokuwiki/<guid>
+ *
+ * @param array $page
+ * @return NULL
+ */
+ function dokuwiki_page_handler($page) {
+
+ elgg_load_library('elgg:dokuwiki');
+
+ if ($page[0] === "all") {
+ elgg_set_context("search");
+ include(elgg_get_plugins_path().'dokuwiki/index.php');
+ return true;
+ }
+
+ elgg_set_context("dokuwiki");
+
+ $dokuwiki_path = elgg_get_plugins_path().'dokuwiki/vendors/dokuwiki/';
+ $doku = current_dokuwiki_entity();
+ if (!$doku) // can fail if there is no user and wiki doesnt exist
+ return false;
+ $parsed_url = parse_url(elgg_get_site_url().'dokuwiki/');
+ $url_base = $parsed_url['path'];
+ if (is_numeric($page[0])) {
+ $entity_guid = $page[0];
+ $ent = get_entity($entity_guid);
+
+ if (($ent && $ent instanceof ElggGroup) && $ent->dokuwiki_enable !== 'yes') {
+ // wiki not activated for this group. bail out.
+ elgg_pop_context();
+ return false;
+ }
+ if ($ent && (/*$ent instanceof ElggUser ||*/ $ent instanceof ElggGroup)) {
+ elgg_set_page_owner_guid($entity_guid);
+ $data_path = elgg_get_data_path().'wikis/'.$entity_guid;
+ } else {
+ // can't see the group
+ elgg_pop_context();
+ return false;
+ }
+ $page = array_slice($page, 1); // pop first element
+ define('DOKU_REL', $url_base.$entity_guid."/");
+ define('DOKU_BASE', $url_base.$entity_guid."/");
+ define('DOKU_URL', elgg_get_site_url().'dokuwiki/'.$entity_guid."/");
+
+ }
+ else {
+ $data_path = elgg_get_data_path().'wiki';
+ define('DOKU_REL', $url_base);
+ define('DOKU_BASE', $url_base);
+ define('DOKU_URL', elgg_get_site_url().'dokuwiki/');
+ }
+ define('DOKU_INC', $dokuwiki_path);
+ define('DOKU_MEDIA', elgg_get_site_url().'mod/dokuwiki/vendors/dokuwiki/');
+ define('DOKU_CONF', $dokuwiki_path."conf/");
+
+ dokuwiki_create_datafolder($data_path);
+ define('DOKU_ELGGDATA',$data_path);
+ if (empty($page) || (count($page)==1 && $page[0] == 'acl')) {
+ $page = array('doku.php');
+ }
+ else if ((count($page)==1 && $page[0] == 'usermanager')) {
+ $page = array('doku.php');
+ }
+ else if ((count($page)==1 && $page[0] == 'plugin')) {
+ $page = array('doku.php');
+ }
+ else if ((count($page)==1 && $page[0] == 'config')) {
+ $page = array('doku.php');
+ }
+ else if ((count($page)==1 && $page[0] == 'revert')) {
+ $page = array('doku.php');
+ }
+ else if ((count($page)==1 && $page[0] == 'popularity')) {
+ $page = array('doku.php');
+ }
+ if (empty($page) || (count($page)==1 && !$page[0])) {
+ $page = array('doku.php');
+ }
+ $_SERVER['PHP_AUTH_USER'] = elgg_get_logged_in_user_entity()->username;
+ $_SERVER['PHP_AUTH_PW'] = elgg_get_logged_in_user_entity()->password;
+ if (count($page) == 1) {
+ $doku_body = elgg_view('dokuwiki/index',array('page'=>$page[0]));
+ echo $doku_body;
+ }
+ else {
+ // avoid inclusion over root
+ $dest = realpath($dokuwiki_path.implode("/",$page));
+ if (strpos($dest, $dokuwiki_path) == 0)
+ $doku_body = elgg_view('dokuwiki/index',array('page'=>implode("/",$page)));
+ echo $doku_body;
+ }
+ return true;
+ }
+
+ /**
+ * Add a menu item to an ownerblock
+ */
+ function dokuwiki_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'group') && $params['entity']->dokuwiki_enable == "yes") {
+ $url = "dokuwiki/{$params['entity']->guid}/";
+ $item = new ElggMenuItem('dokuwiki', elgg_echo('dokuwiki:group'), $url);
+ $return[] = $item;
+ }
+ return $return;
+ }
+
+ function dokuwiki_icon_hook($hook, $entity_type, $returnvalue, $params) {
+ if ($hook == 'entity:icon:url' && $params['entity']->getSubtype() == 'dokuwiki') {
+ $owner = get_entity($params['entity']->container_guid);
+ if ($owner)
+ return $owner->getIcon($params['size']);
+ }
+ return $returnvalue;
+ }
+
+ function dokuwiki_url($entity) {
+ return elgg_get_site_url() . "dokuwiki/".$entity->container_guid;
+ }
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/COPYING b/mod/dokuwiki/vendors/dokuwiki/COPYING
new file mode 100644
index 000000000..d60c31a97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library 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
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. 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 program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/mod/dokuwiki/vendors/dokuwiki/README b/mod/dokuwiki/vendors/dokuwiki/README
new file mode 100644
index 000000000..a000bba2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/README
@@ -0,0 +1,9 @@
+All documentation for DokuWiki is available online
+at http://www.dokuwiki.org/
+
+For Installation Instructions see
+http://www.dokuwiki.org/install
+
+DokuWiki - 2004-2009 (c) Andreas Gohr <andi@splitbrain.org>
+See COPYING and file headers for license info
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/VERSION b/mod/dokuwiki/vendors/dokuwiki/VERSION
new file mode 100644
index 000000000..157cc6c56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/VERSION
@@ -0,0 +1 @@
+2009-12-25c "Lemming"
diff --git a/mod/dokuwiki/vendors/dokuwiki/bin/dwpage.php b/mod/dokuwiki/vendors/dokuwiki/bin/dwpage.php
new file mode 100755
index 000000000..f664770bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/bin/dwpage.php
@@ -0,0 +1,378 @@
+#!/usr/bin/php
+<?php
+#------------------------------------------------------------------------------
+if ('cli' != php_sapi_name()) die();
+
+ini_set('memory_limit','128M');
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/');
+require_once DOKU_INC.'inc/init.php';
+require_once DOKU_INC.'inc/common.php';
+require_once DOKU_INC.'inc/cliopts.php';
+
+#------------------------------------------------------------------------------
+function usage($action) {
+ switch ( $action ) {
+ case 'checkout':
+ print "Usage: dwpage.php [opts] checkout <wiki:page> [working_file]
+
+ Checks out a file from the repository, using the wiki id and obtaining
+ a lock for the page.
+ If a working_file is specified, this is where the page is copied to.
+ Otherwise defaults to the same as the wiki page in the current
+ working directory.
+
+ EXAMPLE
+ $ ./dwpage.php checkout wiki:syntax ./new_syntax.txt
+
+ OPTIONS
+ -h, --help=<action>: get help
+ -f: force obtaining a lock for the page (generally bad idea)
+";
+ break;
+ case 'commit':
+ print "Usage: dwpage.php [opts] -m \"Msg\" commit <working_file> <wiki:page>
+
+ Checks in the working_file into the repository using the specified
+ wiki id, archiving the previous version.
+
+ EXAMPLE
+ $ ./dwpage.php -m \"Some message\" commit ./new_syntax.txt wiki:syntax
+
+ OPTIONS
+ -h, --help=<action>: get help
+ -f: force obtaining a lock for the page (generally bad idea)
+ -t, trivial: minor change
+ -m (required): Summary message describing the change
+";
+ break;
+ case 'lock':
+ print "Usage: dwpage.php [opts] lock <wiki:page>
+
+ Obtains or updates a lock for a wiki page
+
+ EXAMPLE
+ $ ./dwpage.php lock wiki:syntax
+
+ OPTIONS
+ -h, --help=<action>: get help
+ -f: force obtaining a lock for the page (generally bad idea)
+";
+ break;
+ case 'unlock':
+ print "Usage: dwpage.php [opts] unlock <wiki:page>
+
+ Removes a lock for a wiki page.
+
+ EXAMPLE
+ $ ./dwpage.php unlock wiki:syntax
+
+ OPTIONS
+ -h, --help=<action>: get help
+ -f: force obtaining a lock for the page (generally bad idea)
+";
+ break;
+ default:
+ print "Usage: dwpage.php [opts] <action>
+
+ Utility to help command line Dokuwiki page editing, allow
+ pages to be checked out for editing then committed after changes
+
+ Normal operation would be;
+
+
+
+ ACTIONS
+ checkout: see $ dwpage.php --help=checkout
+ commit: see $ dwpage.php --help=commit
+ lock: see $ dwpage.php --help=lock
+
+ OPTIONS
+ -h, --help=<action>: get help
+ e.g. $ ./dwpage.php -hcommit
+ e.g. $ ./dwpage.php --help=commit
+";
+ break;
+ }
+}
+
+#------------------------------------------------------------------------------
+function getUser() {
+ $user = getenv('USER');
+ if (empty ($username)) {
+ $user = getenv('USERNAME');
+ } else {
+ return $user;
+ }
+ if (empty ($username)) {
+ $user = 'admin';
+ }
+ return $user;
+}
+
+#------------------------------------------------------------------------------
+function getSuppliedArgument($OPTS, $short, $long) {
+ $arg = $OPTS->get($short);
+ if ( is_null($arg) ) {
+ $arg = $OPTS->get($long);
+ }
+ return $arg;
+}
+
+#------------------------------------------------------------------------------
+function obtainLock($WIKI_ID) {
+
+ global $USERNAME;
+
+ if ( !file_exists(wikiFN($WIKI_ID)) ) {
+ fwrite( STDERR, "$WIKI_ID does not yet exist\n");
+ }
+
+ $_SERVER['REMOTE_USER'] = $USERNAME;
+ if ( checklock($WIKI_ID) ) {
+ fwrite( STDERR, "Page $WIKI_ID is already locked by another user\n");
+ exit(1);
+ }
+
+ lock($WIKI_ID);
+
+ $_SERVER['REMOTE_USER'] = '_'.$USERNAME.'_';
+
+ if ( checklock($WIKI_ID) != $USERNAME ) {
+
+ fwrite( STDERR, "Unable to obtain lock for $WIKI_ID\n" );
+ exit(1);
+
+ }
+}
+
+#------------------------------------------------------------------------------
+function clearLock($WIKI_ID) {
+
+ global $USERNAME ;
+
+ if ( !file_exists(wikiFN($WIKI_ID)) ) {
+ fwrite( STDERR, "$WIKI_ID does not yet exist\n");
+ }
+
+ $_SERVER['REMOTE_USER'] = $USERNAME;
+ if ( checklock($WIKI_ID) ) {
+ fwrite( STDERR, "Page $WIKI_ID is locked by another user\n");
+ exit(1);
+ }
+
+ unlock($WIKI_ID);
+
+ if ( file_exists(wikiLockFN($WIKI_ID)) ) {
+ fwrite( STDERR, "Unable to clear lock for $WIKI_ID\n" );
+ exit(1);
+ }
+
+}
+
+#------------------------------------------------------------------------------
+function deleteLock($WIKI_ID) {
+
+ $wikiLockFN = wikiLockFN($WIKI_ID);
+
+ if ( file_exists($wikiLockFN) ) {
+ if ( !unlink($wikiLockFN) ) {
+ fwrite( STDERR, "Unable to delete $wikiLockFN\n" );
+ exit(1);
+ }
+ }
+
+}
+
+#------------------------------------------------------------------------------
+$USERNAME = getUser();
+$CWD = getcwd();
+$SYSTEM_ID = '127.0.0.1';
+
+#------------------------------------------------------------------------------
+$OPTS = Doku_Cli_Opts::getOptions(
+ __FILE__,
+ 'h::fm:u:s:t',
+ array(
+ 'help==',
+ 'user=',
+ 'system=',
+ 'trivial',
+ )
+);
+
+if ( $OPTS->isError() ) {
+ print $OPTS->getMessage()."\n";
+ exit(1);
+}
+
+if ( $OPTS->has('h') or $OPTS->has('help') or !$OPTS->hasArgs() ) {
+ usage(getSuppliedArgument($OPTS,'h','help'));
+ exit(0);
+}
+
+if ( $OPTS->has('u') or $OPTS->has('user') ) {
+ $USERNAME = getSuppliedArgument($OPTS,'u','user');
+}
+
+if ( $OPTS->has('s') or $OPTS->has('system') ) {
+ $SYSTEM_ID = getSuppliedArgument($OPTS,'s','system');
+}
+
+#------------------------------------------------------------------------------
+switch ( $OPTS->arg(0) ) {
+
+ #----------------------------------------------------------------------
+ case 'checkout':
+
+ $WIKI_ID = $OPTS->arg(1);
+
+ if ( !$WIKI_ID ) {
+ fwrite( STDERR, "Wiki page ID required\n");
+ exit(1);
+ }
+
+ $WIKI_FN = wikiFN($WIKI_ID);
+
+ if ( !file_exists($WIKI_FN) ) {
+ fwrite( STDERR, "$WIKI_ID does not yet exist\n");
+ exit(1);
+ }
+
+ $TARGET_FN = $OPTS->arg(2);
+
+ if ( empty($TARGET_FN) ) {
+ $TARGET_FN = getcwd().'/'.basename($WIKI_FN);
+ }
+
+ if ( !file_exists(dirname($TARGET_FN)) ) {
+ fwrite( STDERR, "Directory ".dirname($TARGET_FN)." does not exist\n");
+ exit(1);
+ }
+
+ if ( stristr( realpath(dirname($TARGET_FN)), realpath($conf['datadir']) ) !== false ) {
+ fwrite( STDERR, "Attempt to check out file into data directory - not allowed\n");
+ exit(1);
+ }
+
+ if ( $OPTS->has('f') ) {
+ deleteLock($WIKI_ID);
+ }
+
+ obtainLock($WIKI_ID);
+
+ # Need to lock the file first?
+ if ( !copy($WIKI_FN, $TARGET_FN) ) {
+ fwrite( STDERR, "Unable to copy $WIKI_FN to $TARGET_FN\n");
+ clearLock($WIKI_ID);
+ exit(1);
+ }
+
+ print "$WIKI_ID > $TARGET_FN\n";
+ exit(0);
+
+ break;
+
+ #----------------------------------------------------------------------
+ case 'commit':
+
+ $TARGET_FN = $OPTS->arg(1);
+
+ if ( !$TARGET_FN ) {
+ fwrite( STDERR, "Target filename required\n");
+ exit(1);
+ }
+
+ if ( !file_exists($TARGET_FN) ) {
+ fwrite( STDERR, "$TARGET_FN does not exist\n");
+ exit(1);
+ }
+
+ if ( !is_readable($TARGET_FN) ) {
+ fwrite( STDERR, "Cannot read from $TARGET_FN\n");
+ exit(1);
+ }
+
+ $WIKI_ID = $OPTS->arg(2);
+
+ if ( !$WIKI_ID ) {
+ fwrite( STDERR, "Wiki page ID required\n");
+ exit(1);
+ }
+
+ if ( !$OPTS->has('m') ) {
+ fwrite( STDERR, "Summary message required\n");
+ exit(1);
+ }
+
+ if ( $OPTS->has('f') ) {
+ deleteLock($WIKI_ID);
+ }
+
+ $_SERVER['REMOTE_USER'] = $USERNAME;
+ if ( checklock($WIKI_ID) ) {
+ fwrite( STDERR, "$WIKI_ID is locked by another user\n");
+ exit(1);
+ }
+
+ obtainLock($WIKI_ID);
+
+ saveWikiText($WIKI_ID, file_get_contents($TARGET_FN), $OPTS->get('m'), $OPTS->has('t'));
+
+ clearLock($WIKI_ID);
+
+ exit(0);
+
+ break;
+
+ #----------------------------------------------------------------------
+ case 'lock':
+
+ $WIKI_ID = $OPTS->arg(1);
+
+ if ( !$WIKI_ID ) {
+ fwrite( STDERR, "Wiki page ID required\n");
+ exit(1);
+ }
+
+ if ( $OPTS->has('f') ) {
+ deleteLock($WIKI_ID);
+ }
+
+ obtainLock($WIKI_ID);
+
+ print "Locked : $WIKI_ID\n";
+ exit(0);
+
+ break;
+
+ #----------------------------------------------------------------------
+ case 'unlock':
+
+ $WIKI_ID = $OPTS->arg(1);
+
+ if ( !$WIKI_ID ) {
+ fwrite( STDERR, "Wiki page ID required\n");
+ exit(1);
+ }
+
+ if ( $OPTS->has('f') ) {
+ deleteLock($WIKI_ID);
+ } else {
+ clearLock($WIKI_ID);
+ }
+
+ print "Unlocked : $WIKI_ID\n";
+ exit(0);
+
+ break;
+
+ #----------------------------------------------------------------------
+ default:
+
+ fwrite( STDERR, "Invalid action ".$OPTS->arg(0)."\n" );
+ exit(1);
+
+ break;
+
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/bin/indexer.php b/mod/dokuwiki/vendors/dokuwiki/bin/indexer.php
new file mode 100755
index 000000000..55f3608d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/bin/indexer.php
@@ -0,0 +1,172 @@
+#!/usr/bin/php
+<?php
+if ('cli' != php_sapi_name()) die();
+
+ini_set('memory_limit','128M');
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/search.php');
+require_once(DOKU_INC.'inc/indexer.php');
+require_once(DOKU_INC.'inc/auth.php');
+require_once(DOKU_INC.'inc/cliopts.php');
+session_write_close();
+
+// Version tag used to force rebuild on upgrade
+// Need to keep in sync with lib/exe/indexer.php
+if(!defined('INDEXER_VERSION')) define('INDEXER_VERSION', 2);
+
+// handle options
+$short_opts = 'hcuq';
+$long_opts = array('help', 'clear', 'update', 'quiet');
+$OPTS = Doku_Cli_Opts::getOptions(__FILE__,$short_opts,$long_opts);
+if ( $OPTS->isError() ) {
+ fwrite( STDERR, $OPTS->getMessage() . "\n");
+ _usage();
+ exit(1);
+}
+$CLEAR = false;
+$QUIET = false;
+foreach ($OPTS->options as $key => $val) {
+ switch ($key) {
+ case 'h':
+ case 'help':
+ _usage();
+ exit;
+ case 'c':
+ case 'clear':
+ $CLEAR = true;
+ break;
+ case 'q':
+ case 'quiet':
+ $QUIET = true;
+ break;
+ }
+}
+
+#------------------------------------------------------------------------------
+# Action
+
+if($CLEAR) _clearindex();
+_update();
+
+
+
+#------------------------------------------------------------------------------
+
+function _usage() {
+ print "Usage: indexer.php <options>
+
+ Updates the searchindex by indexing all new or changed pages
+ when the -c option is given the index is cleared first.
+
+ OPTIONS
+ -h, --help show this help and exit
+ -c, --clear clear the index before updating
+ -q, --quiet don't produce any output
+";
+}
+
+function _update(){
+ global $conf;
+
+ // upgrade to version 2
+ if (!@file_exists($conf['indexdir'].'/pageword.idx')){
+ _lock();
+ idx_upgradePageWords();
+ _unlock();
+ }
+
+ $data = array();
+ _quietecho("Searching pages... ");
+ search($data,$conf['datadir'],'search_allpages',array('skipacl' => true));
+ _quietecho(count($data)." pages found.\n");
+
+ foreach($data as $val){
+ _index($val['id']);
+ }
+}
+
+function _index($id){
+ global $CLEAR;
+
+ // if not cleared only update changed and new files
+ if(!$CLEAR){
+ $idxtag = metaFN($id,'.indexed');
+ if(@file_exists($idxtag)){
+ if(io_readFile($idxtag) >= INDEXER_VERSION){
+ $last = @filemtime(metaFN($id,'.indexed'));
+ if($last > @filemtime(wikiFN($id))) return;
+ }
+ }
+ }
+
+ _lock();
+ _quietecho("$id... ");
+ idx_addPage($id);
+ io_saveFile(metaFN($id,'.indexed'),INDEXER_VERSION);
+ _quietecho("done.\n");
+ _unlock();
+}
+
+/**
+ * lock the indexer system
+ */
+function _lock(){
+ global $conf;
+ $lock = $conf['lockdir'].'/_indexer.lock';
+ $said = false;
+ while(!@mkdir($lock, $conf['dmode'])){
+ if(time()-@filemtime($lock) > 60*5){
+ // looks like a stale lock - remove it
+ @rmdir($lock);
+ }else{
+ if($said){
+ _quietecho(".");
+ }else{
+ _quietecho("Waiting for lockfile (max. 5 min)");
+ $said = true;
+ }
+ sleep(15);
+ }
+ }
+ if($conf['dperm']) chmod($lock, $conf['dperm']);
+ if($said) _quietecho("\n");
+}
+
+/**
+ * unlock the indexer sytem
+ */
+function _unlock(){
+ global $conf;
+ $lock = $conf['lockdir'].'/_indexer.lock';
+ @rmdir($lock);
+}
+
+/**
+ * Clear all index files
+ */
+function _clearindex(){
+ global $conf;
+ _lock();
+ _quietecho("Clearing index... ");
+ io_saveFile($conf['indexdir'].'/page.idx','');
+ $dir = @opendir($conf['indexdir']);
+ if($dir!==false){
+ while(($f = readdir($dir)) !== false){
+ if(substr($f,-4)=='.idx' &&
+ (substr($f,0,1)=='i' || substr($f,0,1)=='w'))
+ @unlink($conf['indexdir']."/$f");
+ }
+ }
+ _quietecho("done.\n");
+ _unlock();
+}
+
+function _quietecho($msg) {
+ global $QUIET;
+ if(!$QUIET) echo $msg;
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php b/mod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php
new file mode 100755
index 000000000..30171fc15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php
@@ -0,0 +1,134 @@
+#!/usr/bin/php
+<?php
+if ('cli' != php_sapi_name()) die();
+
+#------------------------------------------------------------------------------
+ini_set('memory_limit','128M');
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/');
+require_once DOKU_INC.'inc/init.php';
+require_once DOKU_INC.'inc/common.php';
+require_once DOKU_INC.'inc/search.php';
+require_once DOKU_INC.'inc/cliopts.php';
+
+#------------------------------------------------------------------------------
+function usage() {
+ print "Usage: wantedpages.php [wiki:namespace]
+
+ Outputs a list of wanted pages (pages which have
+ internal links but do not yet exist).
+
+ If the optional [wiki:namespace] is not provided,
+ defaults to the root wiki namespace
+
+ OPTIONS
+ -h, --help get help
+";
+}
+
+#------------------------------------------------------------------------------
+define ('DW_DIR_CONTINUE',1);
+define ('DW_DIR_NS',2);
+define ('DW_DIR_PAGE',3);
+
+#------------------------------------------------------------------------------
+function dw_dir_filter($entry, $basepath) {
+ if ($entry == '.' || $entry == '..' ) {
+ return DW_DIR_CONTINUE;
+ }
+ if ( is_dir($basepath . '/' . $entry) ) {
+ if ( strpos($entry, '_') === 0 ) {
+ return DW_DIR_CONTINUE;
+ }
+ return DW_DIR_NS;
+ }
+ if ( preg_match('/\.txt$/',$entry) ) {
+ return DW_DIR_PAGE;
+ }
+ return DW_DIR_CONTINUE;
+}
+
+#------------------------------------------------------------------------------
+function dw_get_pages($dir) {
+ static $trunclen = NULL;
+ if ( !$trunclen ) {
+ global $conf;
+ $trunclen = strlen($conf['datadir'].':');
+ }
+
+ if ( !is_dir($dir) ) {
+ fwrite( STDERR, "Unable to read directory $dir\n");
+ exit(1);
+ }
+
+ $pages = array();
+ $dh = opendir($dir);
+ while ( false !== ( $entry = readdir($dh) ) ) {
+ $status = dw_dir_filter($entry, $dir);
+ if ( $status == DW_DIR_CONTINUE ) {
+ continue;
+ } else if ( $status == DW_DIR_NS ) {
+ $pages = array_merge($pages, dw_get_pages($dir . '/' . $entry));
+ } else {
+ $page = array(
+ 'id' => pathID(substr($dir.'/'.$entry,$trunclen)),
+ 'file'=> $dir.'/'.$entry,
+ );
+ $pages[] = $page;
+ }
+ }
+ closedir($dh);
+ return $pages;
+}
+
+#------------------------------------------------------------------------------
+function dw_internal_links($page) {
+ global $conf;
+ $instructions = p_get_instructions(file_get_contents($page['file']));
+ $links = array();
+ $cns = getNS($page['id']);
+ $exists = false;
+ foreach($instructions as $ins){
+ if($ins[0] == 'internallink' || ($conf['camelcase'] && $ins[0] == 'camelcaselink') ){
+ $mid = $ins[1][0];
+ resolve_pageid($cns,$mid,$exists);
+ if ( !$exists ) {
+ list($mid) = explode('#',$mid); //record pages without hashs
+ $links[] = $mid;
+ }
+ }
+ }
+ return $links;
+}
+
+#------------------------------------------------------------------------------
+$OPTS = Doku_Cli_Opts::getOptions(__FILE__,'h',array('help'));
+
+if ( $OPTS->isError() ) {
+ fwrite( STDERR, $OPTS->getMessage() . "\n");
+ exit(1);
+}
+
+if ( $OPTS->has('h') or $OPTS->has('help') ) {
+ usage();
+ exit(0);
+}
+
+$START_DIR = $conf['datadir'];
+
+if ( $OPTS->numArgs() == 1 ) {
+ $START_DIR .= '/' . $OPTS->arg(0);
+}
+
+#------------------------------------------------------------------------------
+$WANTED_PAGES = array();
+
+foreach ( dw_get_pages($START_DIR) as $WIKI_PAGE ) {
+ $WANTED_PAGES = array_merge($WANTED_PAGES,dw_internal_links($WIKI_PAGE));
+}
+$WANTED_PAGES = array_unique($WANTED_PAGES);
+sort($WANTED_PAGES);
+
+foreach ( $WANTED_PAGES as $WANTED_PAGE ) {
+ print $WANTED_PAGE."\n";
+}
+exit(0);
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php
new file mode 100644
index 000000000..7678e918e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php
@@ -0,0 +1,24 @@
+# acl.auth.php
+# <?php exit()?>
+# Don't modify the lines above
+#
+# Access Control Lists
+#
+# Editing this file by hand shouldn't be necessary. Use the ACL
+# Manager interface instead.
+#
+# If your auth backend allows special char like spaces in groups
+# or user names you need to urlencode them (only chars <128, leave
+# UTF-8 multibyte chars as is)
+#
+# none 0
+# read 1
+# edit 2
+# create 4
+# upload 8
+# delete 16
+
+* @ALL 0
+* @user 1
+* @member 8
+* @admin 255
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist
new file mode 100644
index 000000000..14344d778
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist
@@ -0,0 +1,21 @@
+# acl.auth.php
+# <?php exit()?>
+# Don't modify the lines above
+#
+# Access Control Lists
+#
+# Editing this file by hand shouldn't be necessary. Use the ACL
+# Manager interface instead.
+#
+# If your auth backend allows special char like spaces in groups
+# or user names you need to urlencode them (only chars <128, leave
+# UTF-8 multibyte chars as is)
+#
+# none 0
+# read 1
+# edit 2
+# create 4
+# upload 8
+# delete 16
+
+* @ALL 8
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf b/mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf
new file mode 100644
index 000000000..13708d2df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf
@@ -0,0 +1,143 @@
+# Acronyms.
+
+ACL Access Control List
+AFAICS As far as I can see
+AFAIK As far as I know
+AFAIR As far as I remember
+AJAX Asynchronous JavaScript and XML
+AIM AOL (America Online) Instant Messenger
+AOL America Online
+API Application Programming Interface
+ASAP As soon as possible
+ASCII American Standard Code for Information Interchange
+ASP Active Server Pages
+BTW By the way
+CGI Common Gateway Interface
+CMS Content Management System
+CSS Cascading Style Sheets
+CVS Concurrent Versions System
+DBA Database Administrator
+DHCP Dynamic Host Configuration Protocol
+DHTML Dynamic HyperText Markup Language
+DMCA Digital Millenium Copyright Act
+DNS Domain Name System
+DOM Document Object Model
+DTD Document Type Definition
+EOF End of file
+EOL End of line
+EOM End of message
+EOT End of text
+ESMTP Extended Simple Mail Transfer Protocol
+FAQ Frequently Asked Questions
+FDL GNU Free Documentation License
+FTP File Transfer Protocol
+FOSS Free & Open-Source Software
+FLOSS Free/Libre and Open Source Software
+FUD Fear, Uncertainty, and Doubt
+GB Gigabyte
+GHz Gigahertz
+GIF Graphics Interchange Format
+GPL GNU General Public License
+GUI Graphical User Interface
+HTML HyperText Markup Language
+HTTP Hyper Text Transfer Protocol
+IANAL I am not a lawyer (but)
+ICANN Internet Corporation for Assigned Names and Numbers
+ICQ I seek you (Instant Messenger)
+IE5 Internet Explorer 5
+IE6 Internet Explorer 6
+IE Internet Explorer
+IIRC If I remember correctly
+IIS Internet Information Services
+IMAP Internet Message Access Protocol
+IMHO In my humble opinion
+IMO In my opinion
+IOW In other words
+IRC Internet Relay Chat
+IRL In real life
+ISO International Organization for Standardization
+ISP Internet Service Provider
+JDK Java Development Kit
+JPEG Joint Photographics Experts Group
+JPG Joint Photographics Experts Group
+JS JavaScript
+KISS Keep it simple stupid
+LDAP Lightweight Directory Access Protocol
+LGPL GNU Lesser General Public License
+LOL Laughing out loud
+MathML Mathematical Markup Language
+MB Megabyte
+MHz Megahertz
+MIME Multipurpose Internet Mail Extension
+MIT Massachusetts Institute of Technology
+MML Mathematical Markup Language
+MP3 Motion Picture Experts Group Layer 3
+MPEG Motion Picture Experts Group
+MSDN Microsoft Developer Network
+MS Microsoft
+MSIE Microsoft Internet Explorer
+NIS Network Information Service
+NS4.7 Netscape 4.7
+NS4 Netscape 4
+NS6 Netscape 6
+NS7 Netscape 7
+OMG Oh my God
+OPML Outline Processor Markup Language
+OS Operating System
+OSS Open Source Software
+OTOH On the other hand
+P2P Peer to Peer
+PDA Personal Digital Assistant
+PDF Portable Document Format
+Perl Practical Extraction and Report Language
+PERL Practical Extraction and Report Language
+PHP Hypertext Preprocessor
+PICS Platform for Internet Content Selection
+PIN Personal Identification Number
+PITA Pain in the Ass
+PNG Portable Network Graphics
+POP3 Post Office Protocol 3
+POP Post Office Protocol
+QoS Quality of Service
+RAID Redundant Array of Inexpensive Disks
+RDF Resource Description Framework
+ROTFL Rolling on the floor laughing
+RPC Remote Procedure Call
+RSS Rich Site Summary
+RTFM Read The Fine Manual
+RTF Rich Text File
+SCSI Small Computer System Interface
+SDK Software Development Kit
+SGML Standard General Markup Language
+SMIL Synchronized Multimedia Integration Language
+SMTP Simple Mail Transfer Protocol
+SOAP Simple Object Access Protocol
+spec specification
+SQL Structured Query Language
+SSH Secure Shell
+SSI Server Side Includes
+SSL Secure Sockets Layer
+SVG Scalable Vector Graphics
+TIA Thanks in advance
+TIFF Tagged Image File Format
+TLD Top Level Domain
+TOC Table of Contents
+URI Uniform Resource Identifier
+URL Uniform Resource Locator
+URN Uniform Resource Name
+VBA Visual Basic for Applications
+VB Visual Basic
+W3C World Wide Web Consortium
+WAN Wide Area Network
+WAP Wireless Access Protocol
+WML Wireless Markup Language
+WTF? What the f***
+WWW World Wide Web
+WYSIWYG What You See Is What You Get
+XHTML Extensible HyperText Markup Language
+XML Extensible Markup Language
+XSD XML (Extensible Markup Language) Schema Definition
+XSL Extensible Stylesheet Language
+XSLT Extensible Stylesheet Language Transformations
+XUL XML User Interface Language
+YMMV Your mileage may vary
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php b/mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php
new file mode 100644
index 000000000..74d95147e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php
@@ -0,0 +1,156 @@
+<?php
+/**
+ * This is DokuWiki's Main Configuration file
+ *
+ * All the default values are kept here, you should not modify it but use
+ * a local.php file instead to override the settings from here.
+ *
+ * This is a piece of PHP code so PHP syntax applies!
+ *
+ * For help with the configuration see http://www.splitbrain.org/dokuwiki/wiki:config
+ */
+
+
+/* Datastorage and Permissions */
+
+$conf['fmode'] = 0644; //set file creation mode
+$conf['dmode'] = 0755; //set directory creation mode
+$conf['lang'] = 'en'; //your language
+$conf['basedir'] = ''; //absolute dir from serveroot - blank for autodetection
+$conf['baseurl'] = ''; //URL to server including protocol - blank for autodetect
+$conf['savedir'] = './data'; //where to store all the files
+$conf['allowdebug'] = 0; //allow debug output, enable if needed 0|1
+
+/* Display Options */
+
+$conf['start'] = 'start'; //name of start page
+$conf['title'] = 'DokuWiki'; //what to show in the title
+$conf['template'] = 'default'; //see lib/tpl directory
+$conf['license'] = 'cc-by-nc-sa'; //see conf/license.php
+$conf['fullpath'] = 0; //show full path of the document or relative to datadir only? 0|1
+$conf['recent'] = 20; //how many entries to show in recent
+$conf['breadcrumbs'] = 10; //how many recent visited pages to show
+$conf['youarehere'] = 0; //show "You are here" navigation? 0|1
+$conf['typography'] = 1; //smartquote conversion 0=off, 1=doublequotes, 2=all quotes
+$conf['htmlok'] = 0; //may raw HTML be embedded? This may break layout and XHTML validity 0|1
+$conf['phpok'] = 0; //may PHP code be embedded? Never do this on the internet! 0|1
+$conf['dformat'] = '%Y/%m/%d %H:%M'; //dateformat accepted by PHPs strftime() function
+$conf['signature'] = ' --- //[[@MAIL@|@NAME@]] @DATE@//'; //signature see wiki:config for details
+$conf['toptoclevel'] = 1; //Level starting with and below to include in AutoTOC (max. 5)
+$conf['tocminheads'] = 3; //Minimum amount of headlines that determines if a TOC is built
+$conf['maxtoclevel'] = 3; //Up to which level include into AutoTOC (max. 5)
+$conf['maxseclevel'] = 3; //Up to which level create editable sections (max. 5)
+$conf['camelcase'] = 0; //Use CamelCase for linking? (I don't like it) 0|1
+$conf['deaccent'] = 1; //deaccented chars in pagenames (1) or romanize (2) or keep (0)?
+$conf['useheading'] = 0; //use the first heading in a page as its name
+$conf['refcheck'] = 1; //check for references before deleting media files
+$conf['refshow'] = 0; //how many references should be shown, 5 is a good value
+$conf['showuseras'] = 'loginname'; // 'loginname' users login name
+ // 'username' users full name
+ // 'email' e-mail address (will be obfuscated as per mailguard)
+ // 'email_link' e-mail address as a mailto: link (obfuscated)
+
+/* Antispam Features */
+
+$conf['usewordblock']= 1; //block spam based on words? 0|1
+$conf['indexdelay'] = 60*60*24*5; //allow indexing after this time (seconds) default is 5 days
+$conf['relnofollow'] = 1; //use rel="nofollow" for external links?
+$conf['mailguard'] = 'hex'; //obfuscate email addresses against spam harvesters?
+ //valid entries are:
+ // 'visible' - replace @ with [at], . with [dot] and - with [dash]
+ // 'hex' - use hex entities to encode the mail address
+ // 'none' - do not obfuscate addresses
+$conf['iexssprotect']= 1; // check for JavaScript and HTML in uploaded files 0|1
+
+/* Authentication Options - read http://www.splitbrain.org/dokuwiki/wiki:acl */
+
+$conf['useacl'] = 0; //Use Access Control Lists to restrict access?
+$conf['autopasswd'] = 1; //autogenerate passwords and email them to user
+$conf['authtype'] = 'plain'; //which authentication backend should be used
+$conf['passcrypt'] = 'smd5'; //Used crypt method (smd5,md5,sha1,ssha,crypt,mysql,my411)
+$conf['defaultgroup']= 'user'; //Default groups new Users are added to
+$conf['superuser'] = '!!not set!!'; //The admin can be user or @group or comma separated list user1,@group1,user2
+$conf['manager'] = '!!not set!!'; //The manager can be user or @group or comma separated list user1,@group1,user2
+$conf['profileconfirm'] = 1; //Require current password to confirm changes to user profile
+$conf['disableactions'] = ''; //comma separated list of actions to disable
+$conf['sneaky_index'] = 0; //check for namespace read permission in index view (0|1) (1 might cause unexpected behavior)
+$conf['auth_security_timeout'] = 900; //time (seconds) auth data is considered valid, set to 0 to recheck on every page view
+$conf['securecookie'] = 1; //never send HTTPS cookies via HTTP
+
+$conf['xmlrpc'] = 0; //Enable/disable XML-RPC interface
+$conf['xmlrpcuser'] = '!!not set!!'; //Restrict XML-RPC access to this groups/users
+
+/* Advanced Options */
+
+$conf['updatecheck'] = 1; //automatically check for new releases?
+$conf['userewrite'] = 0; //this makes nice URLs: 0: off 1: .htaccess 2: internal
+$conf['useslash'] = 0; //use slash instead of colon? only when rewrite is on
+$conf['usedraft'] = 1; //automatically save a draft while editing (0|1)
+$conf['sepchar'] = '_'; //word separator character in page names; may be a
+ // letter, a digit, '_', '-', or '.'.
+$conf['canonical'] = 0; //Should all URLs use full canonical http://... style?
+$conf['autoplural'] = 0; //try (non)plural form of nonexisting files?
+$conf['compression'] = 'gz'; //compress old revisions: (0: off) ('gz': gnuzip) ('bz2': bzip)
+ // bz2 generates smaller files, but needs more cpu-power
+$conf['cachetime'] = 60*60*24; //maximum age for cachefile in seconds (defaults to a day)
+$conf['locktime'] = 15*60; //maximum age for lockfiles (defaults to 15 minutes)
+$conf['fetchsize'] = 0; //maximum size (bytes) fetch.php may download from extern, disabled by default
+$conf['notify'] = ''; //send change info to this email (leave blank for nobody)
+$conf['registernotify'] = ''; //send info about newly registered users to this email (leave blank for nobody)
+$conf['mailfrom'] = ''; //use this email when sending mails
+$conf['gzip_output'] = 0; //use gzip content encodeing for the output xhtml (if allowed by browser)
+$conf['gdlib'] = 2; //the GDlib version (0, 1 or 2) 2 tries to autodetect
+$conf['im_convert'] = ''; //path to ImageMagicks convert (will be used instead of GD)
+$conf['jpg_quality'] = '70'; //quality of compression when scaling jpg images (0-100)
+$conf['subscribers'] = 0; //enable change notice subscription support
+$conf['compress'] = 1; //Strip whitespaces and comments from Styles and JavaScript? 1|0
+$conf['hidepages'] = ''; //Regexp for pages to be skipped from RSS, Search and Recent Changes
+$conf['send404'] = 0; //Send a HTTP 404 status for non existing pages?
+$conf['sitemap'] = 0; //Create a google sitemap? How often? In days.
+$conf['rss_type'] = 'rss1'; //type of RSS feed to provide, by default:
+ // 'rss' - RSS 0.91
+ // 'rss1' - RSS 1.0
+ // 'rss2' - RSS 2.0
+ // 'atom' - Atom 0.3
+ // 'atom1' - Atom 1.0
+$conf['rss_linkto'] = 'diff'; //what page RSS entries link to:
+ // 'diff' - page showing revision differences
+ // 'page' - the revised page itself
+ // 'rev' - page showing all revisions
+ // 'current' - most recent revision of page
+$conf['rss_content'] = 'abstract'; // what to put in the items by deafult?
+ // 'abstract' - plain text, first paragraph or so
+ // 'diff' - plain text unified diff wrapped in <pre> tags
+ // 'htmldiff' - diff as HTML table
+ // 'html' - the full page rendered in XHTML
+$conf['rss_update'] = 5*60; //Update the RSS feed every n seconds (defaults to 5 minutes)
+$conf['recent_days'] = 7; //How many days of recent changes to keep. (days)
+$conf['rss_show_summary'] = 1; //Add revision summary to title? 0|1
+$conf['broken_iua'] = 0; //Platform with broken ignore_user_abort (IIS+CGI) 0|1
+$conf['xsendfile'] = 0; //Use X-Sendfile (1 = lighttpd, 2 = standard)
+$conf['renderer_xhtml'] = 'xhtml'; //renderer to use for main page generation
+$conf['rememberme'] = 1; //Enable/disable remember me on login
+
+//Set target to use when creating links - leave empty for same window
+$conf['target']['wiki'] = '';
+$conf['target']['interwiki'] = '';
+$conf['target']['extern'] = '';
+$conf['target']['media'] = '';
+$conf['target']['windows'] = '';
+
+//Proxy setup - if your Server needs a proxy to access the web set these
+$conf['proxy']['host'] = '';
+$conf['proxy']['port'] = '';
+$conf['proxy']['user'] = '';
+$conf['proxy']['pass'] = '';
+$conf['proxy']['ssl'] = 0;
+
+/* Safemode Hack */
+
+$conf['safemodehack'] = 0; //read http://www.dokuwiki.org/config:safemodehack !
+$conf['ftp']['host'] = 'localhost';
+$conf['ftp']['port'] = '21';
+$conf['ftp']['user'] = 'user';
+$conf['ftp']['pass'] = 'password';
+$conf['ftp']['root'] = '/home/user/htdocs';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/entities.conf b/mod/dokuwiki/vendors/dokuwiki/conf/entities.conf
new file mode 100644
index 000000000..be9ed6d40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/entities.conf
@@ -0,0 +1,22 @@
+# Typography replacements
+#
+# Order does matter!
+#
+# You can use HTML entities here, but it is not recomended because it may break
+# non-HTML renderers. Use UTF-8 chars directly instead.
+
+<-> ↔
+-> →
+<- â†
+<=> ⇔
+=> ⇒
+<= â‡
+>> »
+<< «
+--- —
+-- –
+(c) ©
+(tm) â„¢
+(r) ®
+... …
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf b/mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf
new file mode 100644
index 000000000..0e855f626
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf
@@ -0,0 +1,125 @@
+# Each URL may contain one of the placeholders {URL} or {NAME}
+# {URL} is replaced by the URL encoded representation of the wikiname
+# this is the right thing to do in most cases
+# {NAME} this is replaced by the wikiname as given in the document
+# no further encoding is done
+# If no placeholder is defined the urlencoded name is appended to the URL
+
+# You can add more InterWiki shortcuts here.
+
+wp http://en.wikipedia.org/wiki/{NAME}
+wpfr http://fr.wikipedia.org/wiki/{NAME}
+wpde http://de.wikipedia.org/wiki/{NAME}
+wpes http://es.wikipedia.org/wiki/{NAME}
+wppl http://pl.wikipedia.org/wiki/{NAME}
+wpjp http://ja.wikipedia.org/wiki/{NAME}
+wpmeta http://meta.wikipedia.org/wiki/{NAME}
+doku http://www.dokuwiki.org/
+dokubug http://bugs.splitbrain.org/index.php?do=details&amp;task_id=
+rfc http://www.cs.ccu.edu.tw/~chm91u/rfc2html.php?in=
+man http://man.cx/
+amazon http://www.amazon.com/exec/obidos/ASIN/{URL}/splitbrain-20/
+amazon.de http://www.amazon.de/exec/obidos/ASIN/{URL}/splitbrain-21/
+amazon.uk http://www.amazon.co.uk/exec/obidos/ASIN/
+phpfn http://www.php.net/{NAME}
+coral http://{HOST}.{PORT}.nyud.net:8090/{PATH}?{QUERY}
+freecache http://freecache.org/{NAME}
+sb http://www.splitbrain.org/go/
+google.de http://www.google.de/search?q=
+go http://www.google.com/search?q={URL}&amp;btnI=lucky
+
+# Standards from http://usemod.com/intermap.txt follow
+
+AbbeNormal http://www.ourpla.net/cgi-bin/pikie.cgi?
+AcadWiki http://xarch.tu-graz.ac.at/autocad/wiki/
+Acronym http://www.acronymfinder.com/af-query.asp?String=exact&amp;Acronym=
+Advogato http://www.advogato.org/
+AIWiki http://www.ifi.unizh.ch/ailab/aiwiki/aiw.cgi?
+ALife http://news.alife.org/wiki/index.php?
+AndStuff http://andstuff.org/wiki.php?
+Annotation http://bayle.stanford.edu/crit/nph-med.cgi/
+AnnotationWiki http://www.seedwiki.com/page.cfm?wikiid=368&amp;doc=
+AwarenessWiki http://taoriver.net/aware/
+BenefitsWiki http://www.benefitslink.com/cgi-bin/wiki.cgi?
+BridgesWiki http://c2.com/w2/bridges/
+C2find http://c2.com/cgi/wiki?FindPage&amp;value=
+Cache http://www.google.com/search?q=cache:
+CLiki http://ww.telent.net/cliki/
+CmWiki http://www.ourpla.net/cgi-bin/wiki.pl?
+CreationMatters http://www.ourpla.net/cgi-bin/wiki.pl?
+DejaNews http://www.deja.com/=dnc/getdoc.xp?AN=
+DeWikiPedia http://www.wikipedia.de/wiki.cgi?
+Dictionary http://www.dict.org/bin/Dict?Database=*&amp;Form=Dict1&amp;Strategy=*&amp;Query=
+DiveIntoOsx http://diveintoosx.org/
+DocBook http://docbook.org/wiki/moin.cgi/
+DolphinWiki http://www.object-arts.com/wiki/html/Dolphin/
+EfnetCeeWiki http://purl.net/wiki/c/
+EfnetCppWiki http://purl.net/wiki/cpp/
+EfnetPythonWiki http://purl.net/wiki/python/
+EfnetXmlWiki http://purl.net/wiki/xml/
+EljWiki http://elj.sourceforge.net/phpwiki/index.php/
+EmacsWiki http://www.emacswiki.org/cgi-bin/wiki.pl?
+FinalEmpire http://final-empire.sourceforge.net/cgi-bin/wiki.pl?
+Foldoc http://www.foldoc.org/foldoc/foldoc.cgi?
+FoxWiki http://fox.wikis.com/wc.dll?Wiki~
+FreeBSDman http://www.FreeBSD.org/cgi/man.cgi?apropos=1&amp;query=
+Google http://www.google.com/search?q=
+GoogleGroups http://groups.google.com/groups?q=
+GreenCheese http://www.greencheese.org/
+HammondWiki http://www.dairiki.org/HammondWiki/index.php3?
+Haribeau http://wiki.haribeau.de/cgi-bin/wiki.pl?
+IAWiki http://www.IAwiki.net/
+IMDB http://us.imdb.com/Title?
+JargonFile http://sunir.org/apps/meta.pl?wiki=JargonFile&amp;redirect=
+JiniWiki http://www.cdegroot.com/cgi-bin/jini?
+JspWiki http://www.ecyrd.com/JSPWiki/Wiki.jsp?page=
+KmWiki http://www.voght.com/cgi-bin/pywiki?
+KnowHow http://www2.iro.umontreal.ca/~paquetse/cgi-bin/wiki.cgi?
+LanifexWiki http://opt.lanifex.com/cgi-bin/wiki.pl?
+LegoWiki http://www.object-arts.com/wiki/html/Lego-Robotics/
+LinuxWiki http://www.linuxwiki.de/
+LugKR http://lug-kr.sourceforge.net/cgi-bin/lugwiki.pl?
+MathSongsWiki http://SeedWiki.com/page.cfm?wikiid=237&amp;doc=
+MbTest http://www.usemod.com/cgi-bin/mbtest.pl?
+MeatBall http://www.usemod.com/cgi-bin/mb.pl?
+MetaWiki http://sunir.org/apps/meta.pl?
+MetaWikiPedia http://meta.wikipedia.com/wiki/
+MoinMoin http://purl.net/wiki/moin/
+MuWeb http://www.dunstable.com/scripts/MuWebWeb?
+NetVillage http://www.netbros.com/?
+OpenWiki http://openwiki.com/?
+OrgPatterns http://www.bell-labs.com/cgi-user/OrgPatterns/OrgPatterns?
+PangalacticOrg http://www.pangalactic.org/Wiki/
+PersonalTelco http://www.personaltelco.net/index.cgi/
+PhpWiki http://phpwiki.sourceforge.net/phpwiki/index.php?
+Pikie http://pikie.darktech.org/cgi/pikie?
+PPR http://c2.com/cgi/wiki?
+PurlNet http://purl.oclc.org/NET/
+PythonInfo http://www.python.org/cgi-bin/moinmoin/
+PythonWiki http://www.pythonwiki.de/
+PyWiki http://www.voght.com/cgi-bin/pywiki?
+SeaPig http://www.seapig.org/
+SeattleWireless http://seattlewireless.net/?
+SenseisLibrary http://senseis.xmp.net/?
+Shakti http://cgi.algonet.se/htbin/cgiwrap/pgd/ShaktiWiki/
+SourceForge http://sourceforge.net/{NAME}
+Squeak http://minnow.cc.gatech.edu/squeak/
+StrikiWiki http://ch.twi.tudelft.nl/~mostert/striki/teststriki.pl?
+SVGWiki http://www.protocol7.com/svg-wiki/default.asp?
+Tavi http://tavi.sourceforge.net/index.php?
+TmNet http://www.technomanifestos.net/?
+TMwiki http://www.EasyTopicMaps.com/?page=
+TWiki http://twiki.org/cgi-bin/view/{NAME}
+TwistedWiki http://purl.net/wiki/twisted/
+Unreal http://wiki.beyondunreal.com/wiki/
+UseMod http://www.usemod.com/cgi-bin/wiki.pl?
+VisualWorks http://wiki.cs.uiuc.edu/VisualWorks/
+WebDevWikiNL http://www.promo-it.nl/WebDevWiki/index.php?page=
+WebSeitzWiki http://webseitz.fluxent.com/wiki/
+Why http://clublet.com/c/c/why?
+Wiki http://c2.com/cgi/wiki?
+WikiPedia http://www.wikipedia.com/wiki/
+WikiWorld http://WikiWorld.com/wiki/index.php/
+YpsiEyeball http://sknkwrks.dyndns.org:1957/writewiki/wiki.pl?
+ZWiki http://www.zwiki.org/
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/license.php b/mod/dokuwiki/vendors/dokuwiki/conf/license.php
new file mode 100644
index 000000000..9a753baa7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/license.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * This file defines multiple available licenses you can license your
+ * wiki contents under. Do not change this file, but create a
+ * license.local.php instead.
+ */
+
+$license['cc-by'] = array(
+ 'name' => 'CC Attribution 3.0 Unported',
+ 'url' => 'http://creativecommons.org/licenses/by/3.0/',
+);
+$license['cc-by-nc'] = array(
+ 'name' => 'CC Attribution-Noncommercial 3.0 Unported',
+ 'url' => 'http://creativecommons.org/licenses/by-nc/3.0/',
+);
+$license['cc-by-nc-nd'] = array(
+ 'name' => 'CC Attribution-Noncommercial-No Derivative Works 3.0 Unported',
+ 'url' => 'http://creativecommons.org/licenses/by-nc-nd/3.0/',
+);
+$license['cc-by-nc-sa'] = array(
+ 'name' => 'CC Attribution-Noncommercial-Share Alike 3.0 Unported',
+ 'url' => 'http://creativecommons.org/licenses/by-nc-sa/3.0/',
+);
+$license['cc-by-nd'] = array(
+ 'name' => 'CC Attribution-No Derivative Works 3.0 Unported',
+ 'url' => 'cc-by-nd',
+);
+$license['cc-by-sa'] = array(
+ 'name' => 'CC Attribution-Share Alike 3.0 Unported',
+ 'url' => 'http://creativecommons.org/licenses/by-sa/3.0/',
+);
+$license['publicdomain'] = array(
+ 'name' => 'Public Domain',
+ 'url' => 'http://creativecommons.org/licenses/publicdomain/',
+);
+$license['gnufdl'] = array(
+ 'name' => 'GNU Free Documentation License 1.2',
+ 'url' => 'http://www.gnu.org/licenses/fdl-1.2.html',
+);
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/local.php b/mod/dokuwiki/vendors/dokuwiki/conf/local.php
new file mode 100644
index 000000000..74334812b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/local.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * This is an example of how a local.php coul look like.
+ * Simply copy the options you want to change from dokuwiki.php
+ * to this file and change them.
+ *
+ * When using the installer, a correct local.php file be generated for
+ * you automatically.
+ */
+
+$conf['title'] = 'Elgg Wiki'; //what to show in the title
+$conf['basedir'] = ''; //absolute dir from serveroot - blank for autodetection
+$conf['baseurl'] = ''; //URL to server including protocol - blank for autodetect
+$conf['savedir'] = DOKU_ELGGDATA; //where to store all the files
+
+$conf['useacl'] = 1; //Use Access Control Lists to restrict access?
+$conf['disableactions'] = 'login,logout'; //comma separated list of actions to disable
+
+$conf['updatecheck'] = 0; //automatically check for new releases?
+
+// get language from elgg directly
+$conf['lang'] = get_current_language();
+
+$conf['superuser'] = '@root';
+
+$conf['license'] = 'cc-by-sa'; //see conf/license.php
+
+$conf['pluginmanager'] = 0;
+
+$conf['plugin']['indexmenu']['skip_file']="/(sidebar)/i";
+
+//$conf['superuser'] = 'joe';
+
+/**
+ * The following options are usefull, if you use a MySQL
+ * database as autentication backend. Have a look into
+ * mysql.conf.php too and adjust the options to match
+ * your database installation.
+ */
+$conf['authtype'] = 'elgg';
+//require_once ("mysql.conf.php");
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist b/mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist
new file mode 100644
index 000000000..4af6ea594
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist
@@ -0,0 +1,26 @@
+<?php
+/**
+ * This is an example of how a local.php coul look like.
+ * Simply copy the options you want to change from dokuwiki.php
+ * to this file and change them.
+ *
+ * When using the installer, a correct local.php file be generated for
+ * you automatically.
+ */
+
+
+//$conf['title'] = 'My Wiki'; //what to show in the title
+
+//$conf['useacl'] = 1; //Use Access Control Lists to restrict access?
+//$conf['superuser'] = 'joe';
+
+/**
+ * The following options are usefull, if you use a MySQL
+ * database as autentication backend. Have a look into
+ * mysql.conf.php too and adjust the options to match
+ * your database installation.
+ */
+//$conf['authtype'] = 'mysql';
+//require_once ("mysql.conf.php");
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php b/mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php
new file mode 100644
index 000000000..ba7117643
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * This configures which meta data will be editable through
+ * the media manager. Each field of the array is an array with the
+ * following contents:
+ * fieldname - Where data will be saved (EXIF or IPTC field)
+ * label - key to lookup in the $lang var, if not found printed as is
+ * htmltype - 'text' or 'textarea'
+ * lookups - array additional fields to lookup the data (EXIF or IPTC fields)
+ *
+ * The fields are not ordered continously to make inserting additional items
+ * in between simpler.
+ *
+ * This is a PHP snippet, so PHP syntax applies.
+ *
+ * Note: $fields is not a global variable and will not be available to any
+ * other functions or templates later
+ *
+ * You may extend or overwrite this variable in a optional
+ * conf/mediameta.local.php file
+ *
+ * For a list of available EXIF/IPTC fields refer to
+ * http://www.dokuwiki.org/devel:templates:detail.php
+ */
+
+
+$fields = array(
+ 10 => array('Iptc.Headline',
+ 'img_title',
+ 'text'),
+
+ 20 => array('Iptc.Caption',
+ 'img_caption',
+ 'textarea',
+ array('Exif.UserComment',
+ 'Exif.TIFFImageDescription',
+ 'Exif.TIFFUserComment')),
+
+ 30 => array('Iptc.Byline',
+ 'img_artist',
+ 'text',
+ array('Exif.TIFFArtist',
+ 'Exif.Artist',
+ 'Iptc.Credit')),
+
+ 40 => array('Iptc.CopyrightNotice',
+ 'img_copyr',
+ 'text',
+ array('Exif.TIFFCopyright',
+ 'Exif.Copyright')),
+
+ 50 => array('Iptc.Keywords',
+ 'img_keywords',
+ 'text',
+ array('Exif.Category')),
+);
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/mime.conf b/mod/dokuwiki/vendors/dokuwiki/conf/mime.conf
new file mode 100644
index 000000000..2e1ce6bb0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/mime.conf
@@ -0,0 +1,52 @@
+# Allowed uploadable file extensions and mimetypes are defined here.
+# To extend this file it is recommended to create a mime.local.conf
+# file. Mimetypes that should be downloadable and not be opened in the
+# should be prefixed with a !
+
+jpg image/jpeg
+jpeg image/jpeg
+gif image/gif
+png image/png
+tgz !application/octet-stream
+tar !application/x-gtar
+gz !application/octet-stream
+bz2 !application/octet-stream
+zip !application/zip
+rar !application/rar
+pdf application/pdf
+ps !application/postscript
+doc !application/msword
+xls !application/msexcel
+ppt !application/mspowerpoint
+rtf !application/msword
+swf application/x-shockwave-flash
+
+rpm !application/octet-stream
+deb !application/octet-stream
+
+sxw !application/soffice
+sxc !application/soffice
+sxi !application/soffice
+sxd !application/soffice
+
+odc !application/vnd.oasis.opendocument.chart
+odf !application/vnd.oasis.opendocument.formula
+odg !application/vnd.oasis.opendocument.graphics
+odi !application/vnd.oasis.opendocument.image
+odp !application/vnd.oasis.opendocument.presentation
+ods !application/vnd.oasis.opendocument.spreadsheet
+odt !application/vnd.oasis.opendocument.text
+
+# You should enable HTML and Text uploads only for restricted Wikis.
+# Spammers are known to upload spam pages through unprotected Wikis.
+# Note: Enabling HTML opens Cross Site Scripting vulnerabilities
+# through JavaScript. Only enable this with trusted users. You
+# need to disable the iexssprotect option additionally to
+# adding the mime type here
+#html text/html
+#htm text/html
+#txt text/plain
+#conf text/plain
+#xml text/xml
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/msg b/mod/dokuwiki/vendors/dokuwiki/conf/msg
new file mode 100644
index 000000000..38bbb133c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/msg
@@ -0,0 +1,8 @@
+25
+The first line of this file contains a number, indicating
+which notification messages should not be displayed. This
+is the only information sent to dokuwiki.org when the
+updatecheck option is enabled. You usually don't need to
+change this number as it gets updated when you install the
+new release - but to ignore a certain message set its
+number here.
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example b/mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example
new file mode 100644
index 000000000..bd67be82c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example
@@ -0,0 +1,253 @@
+<?php
+/*
+ * This is an example configuration for the mysql auth module.
+ *
+ * This SQL statements are optimized for following table structure.
+ * If you use a different one you have to change them accordingly.
+ * See comments of every statement for details.
+ *
+ * TABLE users
+ * uid login pass firstname lastname email
+ *
+ * TABLE groups
+ * gid name
+ *
+ * TABLE usergroup
+ * uid gid
+ *
+ * To use this configuration you have to copy them to local.php
+ * or at least include this file in local.php.
+ */
+
+/* Options to configure database access. You need to set up this
+ * options carefully, otherwise you won't be able to access you
+ * database.
+ */
+$conf['auth']['mysql']['server'] = '';
+$conf['auth']['mysql']['user'] = '';
+$conf['auth']['mysql']['password'] = '';
+$conf['auth']['mysql']['database'] = '';
+
+/* This option enables debug messages in the mysql module. It is
+ * mostly usefull for system admins.
+ */
+$conf['auth']['mysql']['debug'] = 0;
+
+/* Normally password encryption is done by DokuWiki (recommended) but for
+ * some reasons it might be usefull to let the database do the encryption.
+ * Set 'forwardClearPass' to '1' and the cleartext password is forwarded to
+ * the database, otherwise the encrypted one.
+ */
+$conf['auth']['mysql']['forwardClearPass'] = 0;
+
+/* Multiple table operations will be protected by locks. This array tolds
+ * the module which tables to lock. If you use any aliases for table names
+ * these array must also contain these aliases. Any unamed alias will cause
+ * a warning during operation. See the example below.
+ */
+$conf['auth']['mysql']['TablesToLock']= array("users", "users AS u","groups", "groups AS g", "usergroup", "usergroup AS ug");
+
+/***********************************************************************/
+/* Basic SQL statements for user authentication (required) */
+/***********************************************************************/
+
+/* This statement is used to grant or deny access to the wiki. The result
+ * should be a table with exact one line containing at least the password
+ * of the user. If the result table is empty or contains more than one
+ * row, access will be denied.
+ *
+ * The module access the password as 'pass' so a alias might be necessary.
+ *
+ * Following patters will be replaced:
+ * %{user} user name
+ * %{pass} encrypted or clear text password (depends on 'encryptPass')
+ * %{dgroup} default group name
+ */
+$conf['auth']['mysql']['checkPass'] = "SELECT pass
+ FROM usergroup AS ug
+ JOIN users AS u ON u.uid=ug.uid
+ JOIN groups AS g ON g.gid=ug.gid
+ WHERE login='%{user}'
+ AND name='%{dgroup}'";
+
+/* This statement should return a table with exact one row containing
+ * information about one user. The field needed are:
+ * 'pass' containing the encrypted or clear text password
+ * 'name' the user's full name
+ * 'mail' the user's email address
+ *
+ * Keep in mind that Dokuwiki will access thise information through the
+ * names listed above so aliasses might be neseccary.
+ *
+ * Following patters will be replaced:
+ * %{user} user name
+ */
+$conf['auth']['mysql']['getUserInfo'] = "SELECT pass, CONCAT(firstname,' ',lastname) AS name, email AS mail
+ FROM users
+ WHERE login='%{user}'";
+
+/* This statement is used to get all groups a user is member of. The
+ * result should be a table containing all groups the given user is
+ * member of. The module access the group name as 'group' so a alias
+ * might be nessecary.
+ *
+ * Following patters will be replaced:
+ * %{user} user name
+ */
+$conf['auth']['mysql']['getGroups'] = "SELECT name as `group`
+ FROM groups g, users u, usergroup ug
+ WHERE u.uid = ug.uid
+ AND g.gid = ug.gid
+ AND u.login='%{user}'";
+
+/***********************************************************************/
+/* Additional minimum SQL statements to use the user manager */
+/***********************************************************************/
+
+/* This statement should return a table containing all user login names
+ * that meet certain filter criteria. The filter expressions will be added
+ * case dependend by the module. At the end a sort expression will be added.
+ * Important is that this list contains no double entries fo a user. Each
+ * user name is only allowed once in the table.
+ *
+ * The login name will be accessed as 'user' to a alias might be neseccary.
+ * No patterns will be replaced in this statement but following patters
+ * will be replaced in the filter expressions:
+ * %{user} in FilterLogin user's login name
+ * %{name} in FilterName user's full name
+ * %{email} in FilterEmail user's email address
+ * %{group} in FilterGroup group name
+ */
+$conf['auth']['mysql']['getUsers'] = "SELECT DISTINCT login AS user
+ FROM users AS u
+ LEFT JOIN usergroup AS ug ON u.uid=ug.uid
+ LEFT JOIN groups AS g ON ug.gid=g.gid";
+$conf['auth']['mysql']['FilterLogin'] = "login LIKE '%{user}'";
+$conf['auth']['mysql']['FilterName'] = "CONCAT(firstname,' ',lastname) LIKE '%{name}'";
+$conf['auth']['mysql']['FilterEmail'] = "email LIKE '%{email}'";
+$conf['auth']['mysql']['FilterGroup'] = "name LIKE '%{group}'";
+$conf['auth']['mysql']['SortOrder'] = "ORDER BY login";
+
+/***********************************************************************/
+/* Additional SQL statements to add new users with the user manager */
+/***********************************************************************/
+
+/* This statement should add a user to the database. Minimum information
+ * to store are: login name, password, email address and full name.
+ *
+ * Following patterns will be replaced:
+ * %{user} user's login name
+ * %{pass} password (encrypted or clear text, depends on 'encryptPass')
+ * %{email} email address
+ * %{name} user's full name
+ */
+$conf['auth']['mysql']['addUser'] = "INSERT INTO users
+ (login, pass, email, firstname, lastname)
+ VALUES ('%{user}', '%{pass}', '%{email}',
+ SUBSTRING_INDEX('%{name}',' ', 1),
+ SUBSTRING_INDEX('%{name}',' ', -1))";
+
+/* This statement should add a group to the database.
+ * Following patterns will be replaced:
+ * %{group} group name
+ */
+$conf['auth']['mysql']['addGroup'] = "INSERT INTO groups (name)
+ VALUES ('%{group}')";
+
+/* This statement should connect a user to a group (a user become member
+ * of that group).
+ * Following patterns will be replaced:
+ * %{user} user's login name
+ * %{uid} id of a user dataset
+ * %{group} group name
+ * %{gid} id of a group dataset
+ */
+$conf['auth']['mysql']['addUserGroup']= "INSERT INTO usergroup (uid, gid)
+ VALUES ('%{uid}', '%{gid}')";
+
+/* This statement should remove a group fom the database.
+ * Following patterns will be replaced:
+ * %{group} group name
+ * %{gid} id of a group dataset
+ */
+$conf['auth']['mysql']['delGroup'] = "DELETE FROM groups
+ WHERE gid='%{gid}'";
+
+/* This statement should return the database index of a given user name.
+ * The module will access the index with the name 'id' so a alias might be
+ * necessary.
+ * following patters will be replaced:
+ * %{user} user name
+ */
+$conf['auth']['mysql']['getUserID'] = "SELECT uid AS id
+ FROM users
+ WHERE login='%{user}'";
+
+/***********************************************************************/
+/* Additional SQL statements to delete users with the user manager */
+/***********************************************************************/
+
+/* This statement should remove a user fom the database.
+ * Following patterns will be replaced:
+ * %{user} user's login name
+ * %{uid} id of a user dataset
+ */
+$conf['auth']['mysql']['delUser'] = "DELETE FROM users
+ WHERE uid='%{uid}'";
+
+/* This statement should remove all connections from a user to any group
+ * (a user quits membership of all groups).
+ * Following patterns will be replaced:
+ * %{uid} id of a user dataset
+ */
+$conf['auth']['mysql']['delUserRefs'] = "DELETE FROM usergroup
+ WHERE uid='%{uid}'";
+
+/***********************************************************************/
+/* Additional SQL statements to modify users with the user manager */
+/***********************************************************************/
+
+/* This statements should modify a user entry in the database. The
+ * statements UpdateLogin, UpdatePass, UpdateEmail and UpdateName will be
+ * added to updateUser on demand. Only changed parameters will be used.
+ *
+ * Following patterns will be replaced:
+ * %{user} user's login name
+ * %{pass} password (encrypted or clear text, depends on 'encryptPass')
+ * %{email} email address
+ * %{name} user's full name
+ * %{uid} user id that should be updated
+ */
+$conf['auth']['mysql']['updateUser'] = "UPDATE users SET";
+$conf['auth']['mysql']['UpdateLogin'] = "login='%{user}'";
+$conf['auth']['mysql']['UpdatePass'] = "pass='%{pass}'";
+$conf['auth']['mysql']['UpdateEmail'] = "email='%{email}'";
+$conf['auth']['mysql']['UpdateName'] = "firstname=SUBSTRING_INDEX('%{name}',' ', 1),
+ lastname=SUBSTRING_INDEX('%{name}',' ', -1)";
+$conf['auth']['mysql']['UpdateTarget']= "WHERE uid=%{uid}";
+
+/* This statement should remove a single connection from a user to a
+ * group (a user quits membership of that group).
+ *
+ * Following patterns will be replaced:
+ * %{user} user's login name
+ * %{uid} id of a user dataset
+ * %{group} group name
+ * %{gid} id of a group dataset
+ */
+$conf['auth']['mysql']['delUserGroup']= "DELETE FROM usergroup
+ WHERE uid='%{uid}'
+ AND gid='%{gid}'";
+
+/* This statement should return the database index of a given group name.
+ * The module will access the index with the name 'id' so a alias might
+ * be necessary.
+ *
+ * Following patters will be replaced:
+ * %{group} group name
+ */
+$conf['auth']['mysql']['getGroupID'] = "SELECT gid AS id
+ FROM groups
+ WHERE name='%{group}'";
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf b/mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf
new file mode 100644
index 000000000..88cb3c44d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf
@@ -0,0 +1,11 @@
+#Add URL schemes you want to be recognized as links here
+
+http
+https
+telnet
+gopher
+wais
+ftp
+ed2k
+irc
+ldap \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf b/mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf
new file mode 100644
index 000000000..47e4537e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf
@@ -0,0 +1,27 @@
+# Smileys configured here will be replaced by the
+# configured images in the smiley directory
+
+8-) icon_cool.gif
+8-O icon_eek.gif
+8-o icon_eek.gif
+:-( icon_sad.gif
+:-) icon_smile.gif
+=) icon_smile2.gif
+:-/ icon_doubt.gif
+:-\ icon_doubt2.gif
+:-? icon_confused.gif
+:-D icon_biggrin.gif
+:-P icon_razz.gif
+:-o icon_surprised.gif
+:-O icon_surprised.gif
+:-x icon_silenced.gif
+:-X icon_silenced.gif
+:-| icon_neutral.gif
+;-) icon_wink.gif
+^_^ icon_fun.gif
+:?: icon_question.gif
+:!: icon_exclaim.gif
+LOL icon_lol.gif
+FIXME fixme.gif
+DELETEME delete.gif
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php
new file mode 100644
index 000000000..6576eeb5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php
@@ -0,0 +1,10 @@
+# users.auth.php
+# <?php exit()?>
+# Don't modify the lines above
+#
+# Userfile
+#
+# Format:
+#
+# user:MD5password:Real Name:email:groups,comma,seperated
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist
new file mode 100644
index 000000000..6576eeb5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist
@@ -0,0 +1,10 @@
+# users.auth.php
+# <?php exit()?>
+# Don't modify the lines above
+#
+# Userfile
+#
+# Format:
+#
+# user:MD5password:Real Name:email:groups,comma,seperated
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf b/mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf
new file mode 100644
index 000000000..da7143257
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf
@@ -0,0 +1,8004 @@
+# This is the URL blacklist from the chongqed.org database
+# it is available from http://blacklist.chongqed.org/
+# You can use each line below as a regular expression
+# that can be tested against URLs on your wiki.
+# The last spammer was added on 2008-09-11 10:14:51
+
+https?:\/\/([^\/]*\.)?-com-boob-sex-sexy\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?0--sex\.com
+https?:\/\/([^\/]*\.)?0-casinos\.org
+https?:\/\/([^\/]*\.)?0-poker\.net
+https?:\/\/([^\/]*\.)?00007\.com
+https?:\/\/([^\/]*\.)?001-mature-teacher\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?007vip\.cn
+https?:\/\/([^\/]*\.)?01incest\.za\.pl
+https?:\/\/([^\/]*\.)?021boy\.com
+https?:\/\/([^\/]*\.)?027168\.com
+https?:\/\/([^\/]*\.)?02incest\.za\.pl
+https?:\/\/([^\/]*\.)?03incest\.za\.pl
+https?:\/\/([^\/]*\.)?086books\.com
+https?:\/\/([^\/]*\.)?0esy-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?0lmz-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?0sxa-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?0tdwrmq8\.org
+https?:\/\/([^\/]*\.)?0x009\.blogspot\.com
+https?:\/\/([^\/]*\.)?1-888-pokermon\.com
+https?:\/\/([^\/]*\.)?1-adipex\.us
+https?:\/\/([^\/]*\.)?1-cialis\.us
+https?:\/\/([^\/]*\.)?1-craps\.net
+https?:\/\/([^\/]*\.)?1-levitra\.us
+https?:\/\/([^\/]*\.)?1-poker-game\.com
+https?:\/\/([^\/]*\.)?1-xenical\.us
+https?:\/\/([^\/]*\.)?10-best-online-casinosx\.blogspot\.com
+https?:\/\/([^\/]*\.)?100-25-ebony-free\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?10med\.com
+https?:\/\/([^\/]*\.)?10pharm\.com
+https?:\/\/([^\/]*\.)?114418523\.blogspot\.com
+https?:\/\/([^\/]*\.)?117000\.com
+https?:\/\/([^\/]*\.)?1177888888\.com
+https?:\/\/([^\/]*\.)?123clips-com-cq03\.blogspot\.com
+https?:\/\/([^\/]*\.)?123clips-com-td\.blogspot\.com
+https?:\/\/([^\/]*\.)?123clips-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?123clips-tp5\.blogspot\.com
+https?:\/\/([^\/]*\.)?126hao\.com
+https?:\/\/([^\/]*\.)?163car\.com
+https?:\/\/([^\/]*\.)?163school\.com\.cn
+https?:\/\/([^\/]*\.)?168chinese\.com
+https?:\/\/([^\/]*\.)?168english\.com
+https?:\/\/([^\/]*\.)?168standard\.com
+https?:\/\/([^\/]*\.)?181st-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?18to19-com-dbo26u\.blogspot\.com
+https?:\/\/([^\/]*\.)?18to19-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?1avoro\.info
+https?:\/\/([^\/]*\.)?1c1garettes-777\.tripod\.com
+https?:\/\/([^\/]*\.)?1centpoker\.us
+https?:\/\/([^\/]*\.)?1clickpoker\.us
+https?:\/\/([^\/]*\.)?1dollarpoker\.us
+https?:\/\/([^\/]*\.)?1ebalo\.org
+https?:\/\/([^\/]*\.)?1freepoker\.us
+https?:\/\/([^\/]*\.)?1gogo\.awardspace\.com
+https?:\/\/([^\/]*\.)?1golod\.org
+https?:\/\/([^\/]*\.)?1i-casino\.com
+https?:\/\/([^\/]*\.)?1jolla\.org
+https?:\/\/([^\/]*\.)?1kaj-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?1min\.us
+https?:\/\/([^\/]*\.)?1onlinepoker\.us
+https?:\/\/([^\/]*\.)?1ringtones\.fateback\.com
+https?:\/\/([^\/]*\.)?1st-in-poker\.us
+https?:\/\/([^\/]*\.)?1st-phentermine\.to\.pl
+https?:\/\/([^\/]*\.)?1st-place-poker\.com
+https?:\/\/([^\/]*\.)?1st-poker\.us
+https?:\/\/([^\/]*\.)?1stpharma\.noads\.biz
+https?:\/\/([^\/]*\.)?1stpharmacy\.rmcinfo\.fr
+https?:\/\/([^\/]*\.)?1stviagra\.coz\.in
+https?:\/\/([^\/]*\.)?1whs\.com
+https?:\/\/([^\/]*\.)?2-poker\.us
+https?:\/\/([^\/]*\.)?2008-web-hosting\.com
+https?:\/\/([^\/]*\.)?2010oa\.com
+https?:\/\/([^\/]*\.)?2228888\.com
+https?:\/\/([^\/]*\.)?24ringtonevme\.blogspot\.com
+https?:\/\/([^\/]*\.)?24x7\.soliday\.org
+https?:\/\/([^\/]*\.)?2apd-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?2cpo-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?30moms-com-dd8h8y1slq\.blogspot\.com
+https?:\/\/([^\/]*\.)?30moms-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?321\.cn
+https?:\/\/([^\/]*\.)?33b\.b33r\.net
+https?:\/\/([^\/]*\.)?33orgy\.org
+https?:\/\/([^\/]*\.)?3mac\.info
+https?:\/\/([^\/]*\.)?3pic-com-ai3\.blogspot\.com
+https?:\/\/([^\/]*\.)?3pic-com-kedet\.blogspot\.com
+https?:\/\/([^\/]*\.)?40inchplus-com-b4\.blogspot\.com
+https?:\/\/([^\/]*\.)?40inchplus-com-toqof\.blogspot\.com
+https?:\/\/([^\/]*\.)?40inchplus-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?4arf-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?4erni-pes\.blogspot\.com
+https?:\/\/([^\/]*\.)?4mednew\.com
+https?:\/\/([^\/]*\.)?4mkat4\.com
+https?:\/\/([^\/]*\.)?4onlinecasino4\.blogspot\.com
+https?:\/\/([^\/]*\.)?4t7e\.info
+https?:\/\/([^\/]*\.)?4tsmiget\.forumzen\.com
+https?:\/\/([^\/]*\.)?4tsutmon\.forumzen\.com
+https?:\/\/([^\/]*\.)?4udf-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?4x2\.net
+https?:\/\/([^\/]*\.)?510sms\.blogbus\.com
+https?:\/\/([^\/]*\.)?5188job\.com
+https?:\/\/([^\/]*\.)?51lac\.com
+https?:\/\/([^\/]*\.)?51lover\.org
+https?:\/\/([^\/]*\.)?51sms\.blogbus\.com
+https?:\/\/([^\/]*\.)?51web\.cn
+https?:\/\/([^\/]*\.)?51wisdom\.com
+https?:\/\/([^\/]*\.)?51wisdom\.com\.cn
+https?:\/\/([^\/]*\.)?51wisdom\.net
+https?:\/\/([^\/]*\.)?520sms\.blogbus\.com
+https?:\/\/([^\/]*\.)?52lac\.net
+https?:\/\/([^\/]*\.)?5417\.cn
+https?:\/\/([^\/]*\.)?54epson\.com
+https?:\/\/([^\/]*\.)?55\.2myip\.com
+https?:\/\/([^\/]*\.)?5588866\.com\.cn
+https?:\/\/([^\/]*\.)?56156\.com
+https?:\/\/([^\/]*\.)?563000\.com
+https?:\/\/([^\/]*\.)?56918\.com
+https?:\/\/([^\/]*\.)?59165\.net
+https?:\/\/([^\/]*\.)?5ijipiao\.com
+https?:\/\/([^\/]*\.)?5up-net-blmpo6qr0\.blogspot\.com
+https?:\/\/([^\/]*\.)?5up-net-wr00skgzbo\.blogspot\.com
+https?:\/\/([^\/]*\.)?63\.217\.31\.49
+https?:\/\/([^\/]*\.)?6717\.com\.cn
+https?:\/\/([^\/]*\.)?69pose\.org
+https?:\/\/([^\/]*\.)?6tvju0a\.nokedem\.com
+https?:\/\/([^\/]*\.)?70678\.com
+https?:\/\/([^\/]*\.)?7171\.blogshot\.nl
+https?:\/\/([^\/]*\.)?72\.net\.cn
+https?:\/\/([^\/]*\.)?77zhong\.com
+https?:\/\/([^\/]*\.)?78\.net\.cn
+https?:\/\/([^\/]*\.)?79179\.com
+https?:\/\/([^\/]*\.)?7982257596\.blogspot\.com
+https?:\/\/([^\/]*\.)?7dftw79\.nokedem\.com
+https?:\/\/([^\/]*\.)?7j5lj\.info
+https?:\/\/([^\/]*\.)?7shg-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?7x7\.ruwe\.net
+https?:\/\/([^\/]*\.)?8-teenies\.freeinsite\.net
+https?:\/\/([^\/]*\.)?80880\.com
+https?:\/\/([^\/]*\.)?8224\.net
+https?:\/\/([^\/]*\.)?86wys\.com
+https?:\/\/([^\/]*\.)?87793798\.cn
+https?:\/\/([^\/]*\.)?888\.web\.com
+https?:\/\/([^\/]*\.)?88by88-ax4nzu\.blogspot\.com
+https?:\/\/([^\/]*\.)?88by88-com-hx06a\.blogspot\.com
+https?:\/\/([^\/]*\.)?88by88-com-nekuk\.blogspot\.com
+https?:\/\/([^\/]*\.)?88tm\.com
+https?:\/\/([^\/]*\.)?8pcg-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?8teenfiles-com-dzlvk\.blogspot\.com
+https?:\/\/([^\/]*\.)?8teenfiles-com-mj6\.blogspot\.com
+https?:\/\/([^\/]*\.)?8teenfiles-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?8thstreetlatinas-com-rw48o84iwl\.blogspot\.com
+https?:\/\/([^\/]*\.)?8vwx-adult-sites\.blogspot\.com
+https?:\/\/([^\/]*\.)?90001\.cn
+https?:\/\/([^\/]*\.)?911\.x24hr\.com
+https?:\/\/([^\/]*\.)?911w\.net
+https?:\/\/([^\/]*\.)?91yg\.com
+https?:\/\/([^\/]*\.)?96china\.com
+https?:\/\/([^\/]*\.)?96china\.net
+https?:\/\/([^\/]*\.)?96d2\.com
+https?:\/\/([^\/]*\.)?98-boot-disk-japanese-window\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?99aids\.com
+https?:\/\/([^\/]*\.)?a-blonde-babe-in-bikini\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?a-milf-video-preview\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?a-onedigitizing\.com
+https?:\/\/([^\/]*\.)?a-oneemb\.com
+https?:\/\/([^\/]*\.)?a-phentermine\.us
+https?:\/\/([^\/]*\.)?a-poker-casino\.com
+https?:\/\/([^\/]*\.)?a-porn-sex-adult-xxx\.com
+https?:\/\/([^\/]*\.)?aaeon\.com\.cn
+https?:\/\/([^\/]*\.)?aalita\.com
+https?:\/\/([^\/]*\.)?aalive\.info
+https?:\/\/([^\/]*\.)?aalop\.info
+https?:\/\/([^\/]*\.)?aamjh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?aaqqywh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ababd1\.com
+https?:\/\/([^\/]*\.)?abasti\.com
+https?:\/\/([^\/]*\.)?abbama\.com
+https?:\/\/([^\/]*\.)?abbc\.edu
+https?:\/\/([^\/]*\.)?abbleg4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?abca\.biz
+https?:\/\/([^\/]*\.)?abcink\.com
+https?:\/\/([^\/]*\.)?abijah\.phpbbx\.de
+https?:\/\/([^\/]*\.)?abijah\.romandie\.com
+https?:\/\/([^\/]*\.)?abito-da-sera\.bb22\.info
+https?:\/\/([^\/]*\.)?about-money-world\.com
+https?:\/\/([^\/]*\.)?aboutinfotech\.com
+https?:\/\/([^\/]*\.)?aboutmitsubishiparts\.cn
+https?:\/\/([^\/]*\.)?abriana\.phpbbx\.de
+https?:\/\/([^\/]*\.)?abrianna\.romandie\.com
+https?:\/\/([^\/]*\.)?absolutely-free-porn-clip-blogyvg\.blogspot\.com
+https?:\/\/([^\/]*\.)?absolutely-free-porn-clip-zone28k\.blogspot\.com
+https?:\/\/([^\/]*\.)?aburri\.com
+https?:\/\/([^\/]*\.)?academics\.smcvt\.edu
+https?:\/\/([^\/]*\.)?acantorr\.forumzen\.com
+https?:\/\/([^\/]*\.)?accounting-degree\.hotmail\.ru
+https?:\/\/([^\/]*\.)?accounting1degre\.chat\.ru
+https?:\/\/([^\/]*\.)?accredited-degre\.hotmail\.ru
+https?:\/\/([^\/]*\.)?accredited1degre\.chat\.ru
+https?:\/\/([^\/]*\.)?accredited2degre\.chat\.ru
+https?:\/\/([^\/]*\.)?acelacacel\.dl\.pl
+https?:\/\/([^\/]*\.)?acelalacel\.blogcu\.com
+https?:\/\/([^\/]*\.)?acelcocna\.lolbb\.com
+https?:\/\/([^\/]*\.)?aceldron\.lightbb\.com
+https?:\/\/([^\/]*\.)?acelgetric\.dl\.pl
+https?:\/\/([^\/]*\.)?acellibo\.dl\.pl
+https?:\/\/([^\/]*\.)?acellitroc\.xa\.pl
+https?:\/\/([^\/]*\.)?acelracer\.graphforum\.com
+https?:\/\/([^\/]*\.)?acelrel\.discutforum\.com
+https?:\/\/([^\/]*\.)?acgetvar\.iphorum\.com
+https?:\/\/([^\/]*\.)?achima\.phpbbx\.de
+https?:\/\/([^\/]*\.)?achima\.romandie\.com
+https?:\/\/([^\/]*\.)?achutsit\.forumzen\.com
+https?:\/\/([^\/]*\.)?acima\.phpbbx\.de
+https?:\/\/([^\/]*\.)?acima\.romandie\.com
+https?:\/\/([^\/]*\.)?acimah\.romandie\.com
+https?:\/\/([^\/]*\.)?aciphexbuy\.chip\.ms
+https?:\/\/([^\/]*\.)?aciphexcheap\.mysite\.de
+https?:\/\/([^\/]*\.)?aciphexcheapbuy\.cut\.by
+https?:\/\/([^\/]*\.)?aciphexgeneric\.redirect\.to
+https?:\/\/([^\/]*\.)?aciphexgenericbuy\.dive\.to
+https?:\/\/([^\/]*\.)?aclyulac\.forumzen\.com
+https?:\/\/([^\/]*\.)?acme-arts\.com
+https?:\/\/([^\/]*\.)?acmonno\.zikforum\.com
+https?:\/\/([^\/]*\.)?acne-medicinebco\.blogspot\.com
+https?:\/\/([^\/]*\.)?acololi\.winnerforum\.net
+https?:\/\/([^\/]*\.)?acouc\.zj\.pl
+https?:\/\/([^\/]*\.)?acrolrel\.blogcu\.com
+https?:\/\/([^\/]*\.)?acscuace\.forumzen\.com
+https?:\/\/([^\/]*\.)?actingland\.com
+https?:\/\/([^\/]*\.)?action-in-lesbian-lover\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?action36-kx8\.blogspot\.com
+https?:\/\/([^\/]*\.)?actonelbuy\.drop\.to
+https?:\/\/([^\/]*\.)?actonelcheap\.notrix\.ch
+https?:\/\/([^\/]*\.)?actonelcheapgeneric\.fanclub\.ms
+https?:\/\/([^\/]*\.)?actonelgeneric\.drop\.to
+https?:\/\/([^\/]*\.)?actonelonline\.drive\.to
+https?:\/\/([^\/]*\.)?acurahost\.cn
+https?:\/\/([^\/]*\.)?acuratrades\.cn
+https?:\/\/([^\/]*\.)?acxza\.szm\.sk
+https?:\/\/([^\/]*\.)?acyclovir\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ad0571\.com
+https?:\/\/([^\/]*\.)?adapturl\.com
+https?:\/\/([^\/]*\.)?adault\.adultserv\.info
+https?:\/\/([^\/]*\.)?adds1\.trafflow\.com
+https?:\/\/([^\/]*\.)?adipex-08pr\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipex-911\.coz\.in
+https?:\/\/([^\/]*\.)?adipex-buyvie\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipex-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipex-phenterminepwf\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipex-wiki\.com
+https?:\/\/([^\/]*\.)?adipex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?adipex\.edu\.tf
+https?:\/\/([^\/]*\.)?adipex\.edublogs\.org
+https?:\/\/([^\/]*\.)?adipex\.health-livening\.com
+https?:\/\/([^\/]*\.)?adipexes\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipexwoq\.blogspot\.com
+https?:\/\/([^\/]*\.)?adipexxdt\.blogspot\.com
+https?:\/\/([^\/]*\.)?adira\.phpbbx\.de
+https?:\/\/([^\/]*\.)?adira\.romandie\.com
+https?:\/\/([^\/]*\.)?adrienneee\.ifrance\.com
+https?:\/\/([^\/]*\.)?adrienneee\.xhostar\.com
+https?:\/\/([^\/]*\.)?adsenseready\.com
+https?:\/\/([^\/]*\.)?adult-clips-com-guqiax1tu\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult-clips-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult-dating-free\.sexnation\.info
+https?:\/\/([^\/]*\.)?adult-dating\.sexnation\.info
+https?:\/\/([^\/]*\.)?adult-free-fucking-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?adult-free-granny-video\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?adult-fx\.info
+https?:\/\/([^\/]*\.)?adult-list-com-wqf4ojq2uk\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult-list-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult-personals\.sexnation\.info
+https?:\/\/([^\/]*\.)?adult-porn-clip-info887\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult-sites-review\.beaffaired\.com
+https?:\/\/([^\/]*\.)?adult\.1foleks\.org
+https?:\/\/([^\/]*\.)?adult1clip\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult1movies\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult1video\.blogspot\.com
+https?:\/\/([^\/]*\.)?adult69club\.tripod\.com
+https?:\/\/([^\/]*\.)?adultbuffet-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?adultpersonalsxgj\.blogspot\.com
+https?:\/\/([^\/]*\.)?adultpersonalz\.net
+https?:\/\/([^\/]*\.)?adultsexvideo\.blogspot\.com
+https?:\/\/([^\/]*\.)?adultsitefind\.info
+https?:\/\/([^\/]*\.)?adultsiteshop\.info
+https?:\/\/([^\/]*\.)?adultsss\.cafe150\.com
+https?:\/\/([^\/]*\.)?adultsss\.freehostia\.com
+https?:\/\/([^\/]*\.)?adust\.my10gb\.com
+https?:\/\/([^\/]*\.)?advanceloanfast\.info
+https?:\/\/([^\/]*\.)?adventure-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?advice-kissing\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?adviser-financial-friendly-gay\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?adviser\.8888mb\.com
+https?:\/\/([^\/]*\.)?adwareremoval\.myinfo\.ws
+https?:\/\/([^\/]*\.)?ae\.siam\.edu
+https?:\/\/([^\/]*\.)?aebn-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?aezat\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?afdtf\.szm\.sk
+https?:\/\/([^\/]*\.)?affishe\.hostcroc\.com
+https?:\/\/([^\/]*\.)?affishe\.webmelia\.com
+https?:\/\/([^\/]*\.)?afraima\.phpbbx\.de
+https?:\/\/([^\/]*\.)?african-american-lesbian-personals\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?africanvagina-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?aftworld\.com
+https?:\/\/([^\/]*\.)?afxbmx\.info
+https?:\/\/([^\/]*\.)?agbht\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?agclore\.dl\.pl
+https?:\/\/([^\/]*\.)?agcw-com-cme2qnyzyt\.blogspot\.com
+https?:\/\/([^\/]*\.)?agcw-com-r10opb\.blogspot\.com
+https?:\/\/([^\/]*\.)?agcw-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?agentlovelette\.250free\.com
+https?:\/\/([^\/]*\.)?aghas\.info
+https?:\/\/([^\/]*\.)?agmy3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?agrrjd4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?agylavu\.org
+https?:\/\/([^\/]*\.)?ah-me-com-af7ipw\.blogspot\.com
+https?:\/\/([^\/]*\.)?ah-me-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?ah-me-t7o\.blogspot\.com
+https?:\/\/([^\/]*\.)?ahava\.phpbbx\.de
+https?:\/\/([^\/]*\.)?ahuva\.phpbbx\.de
+https?:\/\/([^\/]*\.)?aidlov\.com
+https?:\/\/([^\/]*\.)?aids-china\.com
+https?:\/\/([^\/]*\.)?aids\.ik8\.com
+https?:\/\/([^\/]*\.)?aids1\.zj\.com
+https?:\/\/([^\/]*\.)?aids333\.net
+https?:\/\/([^\/]*\.)?aikn3\.szm\.sk
+https?:\/\/([^\/]*\.)?air520\.com
+https?:\/\/([^\/]*\.)?airfarelowest\.net
+https?:\/\/([^\/]*\.)?airline-ticket-now\.com
+https?:\/\/([^\/]*\.)?airline-ticket\.globaltr\.info
+https?:\/\/([^\/]*\.)?ajneuas\.com
+https?:\/\/([^\/]*\.)?akbxb\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?akissbetweenthelegs-com-hesel\.blogspot\.com
+https?:\/\/([^\/]*\.)?akissbetweenthelegs-com-tsawya560\.blogspot\.com
+https?:\/\/([^\/]*\.)?akissbetweenthelegs-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?al-femminile\.freespase\.info
+https?:\/\/([^\/]*\.)?al4a-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?alabamamortgage-x\.com
+https?:\/\/([^\/]*\.)?alalal\.myrealboard\.com
+https?:\/\/([^\/]*\.)?alaldalli\.naturalforum\.net
+https?:\/\/([^\/]*\.)?alanthomashairsalon\.com
+https?:\/\/([^\/]*\.)?alarcit\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?alaskamortgage-x\.com
+https?:\/\/([^\/]*\.)?alba-boob-jessica-slip\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?albergo-economici-rimini\.ll33\.info
+https?:\/\/([^\/]*\.)?albergo-parigi\.freespase\.info
+https?:\/\/([^\/]*\.)?albums-proshots\.com
+https?:\/\/([^\/]*\.)?alchita\.goodforum\.net
+https?:\/\/([^\/]*\.)?alchita\.grafbb\.com
+https?:\/\/([^\/]*\.)?aldabridgeman\.site\.io
+https?:\/\/([^\/]*\.)?aldarta\.discutforum\.com
+https?:\/\/([^\/]*\.)?aldomc\.jc\.pl
+https?:\/\/([^\/]*\.)?aldronboc\.lightbb\.com
+https?:\/\/([^\/]*\.)?aleluja\.asp2\.cz
+https?:\/\/([^\/]*\.)?alerou\.su\.pl
+https?:\/\/([^\/]*\.)?aleteta\.com
+https?:\/\/([^\/]*\.)?alexaner\.etowns\.net
+https?:\/\/([^\/]*\.)?alexmovies-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?alhilalb\.forumzen\.com
+https?:\/\/([^\/]*\.)?alias\.asp2\.cz
+https?:\/\/([^\/]*\.)?aliyah\.phpbbx\.de
+https?:\/\/([^\/]*\.)?aliza\.phpbbx\.de
+https?:\/\/([^\/]*\.)?all-rnb\.com
+https?:\/\/([^\/]*\.)?all4sexonline\.biz
+https?:\/\/([^\/]*\.)?allabout-casino\.com
+https?:\/\/([^\/]*\.)?allabout-poker\.com
+https?:\/\/([^\/]*\.)?allabout-poker\.net
+https?:\/\/([^\/]*\.)?allabout\.onplex\.de
+https?:\/\/([^\/]*\.)?allaboutx\.freeasyhost\.com
+https?:\/\/([^\/]*\.)?allaboutx\.hostingclub\.de
+https?:\/\/([^\/]*\.)?allaboutx\.m5t\.de
+https?:\/\/([^\/]*\.)?allall\.org
+https?:\/\/([^\/]*\.)?allcamsguide\.info
+https?:\/\/([^\/]*\.)?allcars\.digitalzones\.com
+https?:\/\/([^\/]*\.)?allcheapchat\.info
+https?:\/\/([^\/]*\.)?alldep\.com
+https?:\/\/([^\/]*\.)?allearjah\.com
+https?:\/\/([^\/]*\.)?alledasar\.com
+https?:\/\/([^\/]*\.)?allegra\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?allegradgeneric\.sblog\.cz
+https?:\/\/([^\/]*\.)?allen-edmonds-shoes\.info
+https?:\/\/([^\/]*\.)?allergy\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?allforsale\.org
+https?:\/\/([^\/]*\.)?allgoods\.be
+https?:\/\/([^\/]*\.)?allkinds-pills\.com
+https?:\/\/([^\/]*\.)?allkoholik\.php5\.cz
+https?:\/\/([^\/]*\.)?alllb\.com
+https?:\/\/([^\/]*\.)?alllf\.com
+https?:\/\/([^\/]*\.)?alllk\.com
+https?:\/\/([^\/]*\.)?alllm\.com
+https?:\/\/([^\/]*\.)?allln\.com
+https?:\/\/([^\/]*\.)?alllp\.com
+https?:\/\/([^\/]*\.)?allnewfilm\.com
+https?:\/\/([^\/]*\.)?allprintposters\.com
+https?:\/\/([^\/]*\.)?allsitesaccess-com-awfxbo7d\.blogspot\.com
+https?:\/\/([^\/]*\.)?alltel-ringtonedyd\.blogspot\.com
+https?:\/\/([^\/]*\.)?allvids-net-k0bdg\.blogspot\.com
+https?:\/\/([^\/]*\.)?allvids-net-kd0pe5\.blogspot\.com
+https?:\/\/([^\/]*\.)?allweb2006\.info
+https?:\/\/([^\/]*\.)?almgarc\.com
+https?:\/\/([^\/]*\.)?alneja\.goodbb\.net
+https?:\/\/([^\/]*\.)?alnm5\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?alona\.phpbbx\.de
+https?:\/\/([^\/]*\.)?alonso\.stabilt\.se
+https?:\/\/([^\/]*\.)?alphabadgirls\.info
+https?:\/\/([^\/]*\.)?alprazolam-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?alprazolam-xanax\.com
+https?:\/\/([^\/]*\.)?alpy01\.republika\.pl
+https?:\/\/([^\/]*\.)?alracmon\.zikforum\.com
+https?:\/\/([^\/]*\.)?altacebuy\.page\.to
+https?:\/\/([^\/]*\.)?altacebuycheap\.gameday\.de
+https?:\/\/([^\/]*\.)?altacebuygeneric\.cut\.by
+https?:\/\/([^\/]*\.)?altacegeneric\.dive\.to
+https?:\/\/([^\/]*\.)?altacegenericcheap\.notrix\.at
+https?:\/\/([^\/]*\.)?altazel\.blogcu\.com
+https?:\/\/([^\/]*\.)?altrocvi\.jc\.pl
+https?:\/\/([^\/]*\.)?altse\.com
+https?:\/\/([^\/]*\.)?always-credit\.com
+https?:\/\/([^\/]*\.)?always-drugs\.com
+https?:\/\/([^\/]*\.)?always-medications\.com
+https?:\/\/([^\/]*\.)?alyssa-teen\.freeinsite\.net
+https?:\/\/([^\/]*\.)?amal-fucking-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-ass-free-gallery\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-atk-hairy-heather-natural\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-black-naked\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-blonde-cock\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-boob-bouncing\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-contacto-sexo\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-cum-queen\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-foto-free-nude\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-free-erotic\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-free-grannie-picture-xxx\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-free-indian-page-sex\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?amateur-free-man-naked\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-free-sex-xxx\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?amateur-fucking-milf\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-fucking-public\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-hard-com-a4w\.blogspot\.com
+https?:\/\/([^\/]*\.)?amateur-home-photo\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-index-nude\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-interracial-porn\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-man-naked\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-model-for-hire\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-nympho-wife-site\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-pages-porn\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?amateur-porn-clip-blog446\.blogspot\.com
+https?:\/\/([^\/]*\.)?amateur-porn-clip-blogqh1\.blogspot\.com
+https?:\/\/([^\/]*\.)?amateur-porn-clip-blogrv6\.blogspot\.com
+https?:\/\/([^\/]*\.)?amateur-porn-xxx\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-pussy-redhead\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?amateur-teen-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?amateur-teen-sex-movie\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?amateurcurves-com-silib\.blogspot\.com
+https?:\/\/([^\/]*\.)?amateurcurves-com-t7zh3\.blogspot\.com
+https?:\/\/([^\/]*\.)?amazingcum-com-bd7uu0\.blogspot\.com
+https?:\/\/([^\/]*\.)?ambien-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?ambien\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ambien\.conto\.pl
+https?:\/\/([^\/]*\.)?ambien\.esguay\.com
+https?:\/\/([^\/]*\.)?ambien\.fws1\.com
+https?:\/\/([^\/]*\.)?ambien\.goodpharm\.info
+https?:\/\/([^\/]*\.)?ambien\.hav\.pl
+https?:\/\/([^\/]*\.)?ambien\.presteert\.nl
+https?:\/\/([^\/]*\.)?ambien\.skocz\.net
+https?:\/\/([^\/]*\.)?ambiena\.myblogvoice\.com
+https?:\/\/([^\/]*\.)?ambienpills\.coz\.in
+https?:\/\/([^\/]*\.)?ambienrx\.weboficial\.com
+https?:\/\/([^\/]*\.)?ambiens\.ru\.tf
+https?:\/\/([^\/]*\.)?amcq8\.szm\.sk
+https?:\/\/([^\/]*\.)?amenities\.8tt\.org
+https?:\/\/([^\/]*\.)?americansrebuildingneworleans\.com
+https?:\/\/([^\/]*\.)?amicizia-incontri\.bb22\.info
+https?:\/\/([^\/]*\.)?amico-maria\.freespase\.info
+https?:\/\/([^\/]*\.)?amidnitesunset\.blogspot\.com
+https?:\/\/([^\/]*\.)?amino-vera\.blogspot\.com
+https?:\/\/([^\/]*\.)?amira\.phpbbx\.de
+https?:\/\/([^\/]*\.)?amjrs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?amoxil-500mg\.micrositehosting\.info
+https?:\/\/([^\/]*\.)?ampposo\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?amstre\.com
+https?:\/\/([^\/]*\.)?amyhunt\.com
+https?:\/\/([^\/]*\.)?amyjkb\.blogspot\.com
+https?:\/\/([^\/]*\.)?anacondasex\.info
+https?:\/\/([^\/]*\.)?anal-bareback-cum-fucking-shot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?anal-coks-fuck-huge-mega\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?anal-cum-farting\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?anal-cum-fuck\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?anal-dildo-bondage\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-ebony-free-pic\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-ebony-fucking\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-first-pic-time\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-first-time\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-free-mature-sex\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?anal-g\.com
+https?:\/\/([^\/]*\.)?anal-gang-bang-xxx\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-hard-male\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-hardcore-max-sex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?anal-painful-virgin\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?anal-self-penetration\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?anal-sex-teen-tgp\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?anal-sex-video-x-g-g\.blogspot\.com
+https?:\/\/([^\/]*\.)?anal-sex-virgin\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?anal-shemale-site\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?analsexeum\.blogspot\.com
+https?:\/\/([^\/]*\.)?anath\.phpbbx\.de
+https?:\/\/([^\/]*\.)?anbipbm\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?andrewsaluk\.com
+https?:\/\/([^\/]*\.)?andy-roddick-dick\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?angelcakez\.blogspot\.com
+https?:\/\/([^\/]*\.)?angry-sister\.blogspot\.com
+https?:\/\/([^\/]*\.)?anicke\.republika\.pl
+https?:\/\/([^\/]*\.)?anime-art-gay\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?anime-free-hardcore-info-remember\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?anime-porn-clip-blog5a7\.blogspot\.com
+https?:\/\/([^\/]*\.)?ann-angel-tpi\.blogspot\.com
+https?:\/\/([^\/]*\.)?anna-morgan\.blogspot\.com
+https?:\/\/([^\/]*\.)?annqy\.szm\.sk
+https?:\/\/([^\/]*\.)?annugel--h\.blogspot\.com
+https?:\/\/([^\/]*\.)?annuncio-lavoro-milano\.host24h\.info
+https?:\/\/([^\/]*\.)?annuncio-lavoro-segretaria\.freehostss\.info
+https?:\/\/([^\/]*\.)?annuncio-online\.heroez\.info
+https?:\/\/([^\/]*\.)?anteyi\.cn
+https?:\/\/([^\/]*\.)?anthemboy8\.blogspot\.com
+https?:\/\/([^\/]*\.)?anti-aging-skin\.hotmail\.ru
+https?:\/\/([^\/]*\.)?anti_agin_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?anti_aging_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?antidepressants\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?anus-lick-right-way\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?anw66\.blogspot\.com
+https?:\/\/([^\/]*\.)?anxiety\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?anylight4u\.com
+https?:\/\/([^\/]*\.)?aosk\.com
+https?:\/\/([^\/]*\.)?apesapoppin\.blogspot\.com
+https?:\/\/([^\/]*\.)?apextwin\.ifrance\.com
+https?:\/\/([^\/]*\.)?apextwin\.php5\.cz
+https?:\/\/([^\/]*\.)?aponte\.net
+https?:\/\/([^\/]*\.)?appartamento-roma-vacanza\.ll11\.info
+https?:\/\/([^\/]*\.)?applyforit\.ucsd\.edu
+https?:\/\/([^\/]*\.)?apxgmlp\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?arbundar\.forumzen\.com
+https?:\/\/([^\/]*\.)?arcade\.ya\.com
+https?:\/\/([^\/]*\.)?areaseo\.com
+https?:\/\/([^\/]*\.)?arent-boot-made-these-walkin\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?argentina-gay-travel\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ariella\.phpbbx\.de
+https?:\/\/([^\/]*\.)?arielle\.phpbbx\.de
+https?:\/\/([^\/]*\.)?arinastes\.com
+https?:\/\/([^\/]*\.)?aristocort\.4\.pl
+https?:\/\/([^\/]*\.)?arizonamortgage-x\.com
+https?:\/\/([^\/]*\.)?arjj2\.szm\.sk
+https?:\/\/([^\/]*\.)?arketon24\.blogspot\.com
+https?:\/\/([^\/]*\.)?armyanch\.galeon\.com
+https?:\/\/([^\/]*\.)?arosson\.com
+https?:\/\/([^\/]*\.)?arsrz\.szm\.sk
+https?:\/\/([^\/]*\.)?art-xxx\.com
+https?:\/\/([^\/]*\.)?artbennett\.net
+https?:\/\/([^\/]*\.)?arthuriacasino\.com
+https?:\/\/([^\/]*\.)?artnposter\.com
+https?:\/\/([^\/]*\.)?arwuudes\.forumzen\.com
+https?:\/\/([^\/]*\.)?arwuuzet\.forumzen\.com
+https?:\/\/([^\/]*\.)?aryls\.info
+https?:\/\/([^\/]*\.)?asaearh\.blogspot\.com
+https?:\/\/([^\/]*\.)?asaia\.blogspot\.com
+https?:\/\/([^\/]*\.)?asas3\.com
+https?:\/\/([^\/]*\.)?ascht\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?asdiaalr\.forumzen\.com
+https?:\/\/([^\/]*\.)?aselfbas\.forumzen\.com
+https?:\/\/([^\/]*\.)?asfreyl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ashkenazi\.phpbbx\.de
+https?:\/\/([^\/]*\.)?ashlee--serena\.freeinsite\.net
+https?:\/\/([^\/]*\.)?ashlee-clip-free-hand-job\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?asian-bang-gang\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?asian-cum-sucker\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?asian-download-free-porn-video\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?asian-facial\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?asian-fucking-man-woman\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?asian-girl-anal\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?asian-giving-blow-job\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?asian-mmf\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?asian-porn-clip-info6g5\.blogspot\.com
+https?:\/\/([^\/]*\.)?asian-pussysjy\.blogspot\.com
+https?:\/\/([^\/]*\.)?asian-spread-leg\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?asian-teens\.freeinsite\.net
+https?:\/\/([^\/]*\.)?asiansexpvx\.blogspot\.com
+https?:\/\/([^\/]*\.)?asjnquaq\.com
+https?:\/\/([^\/]*\.)?asnmeq\.com
+https?:\/\/([^\/]*\.)?asrendes\.forumzen\.com
+https?:\/\/([^\/]*\.)?asricrac\.forumzen\.com
+https?:\/\/([^\/]*\.)?ass-bare-screensaver-sexy\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?ass-big-black-pussy\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ass-big-free-woman\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?ass-bitch-hot\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?ass-cock-large-nice-tit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?ass-cum-gay-hole\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ass-cute-fat\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ass-day-great-its-somebodys-whop\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ass-dildo-in-man-use\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ass-free-huge-movie-phat-tit\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?ass-free-mature-photo\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?ass-free-naked\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?ass-fucked-porn-star\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ass-hit-up-yo\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?ass-hole-test\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?ass-lick-slut-that\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?ass-man-photo-rumprater-com-woman\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ass-naked-pic-woman-young\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?ass-sa\.com
+https?:\/\/([^\/]*\.)?ass-traffic-thumb\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?assfilled-cofon\.blogspot\.com
+https?:\/\/([^\/]*\.)?assfucking-video\.hereandnow0\.com
+https?:\/\/([^\/]*\.)?assicurazione-moto\.freehostss\.info
+https?:\/\/([^\/]*\.)?asslick-free\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?associate1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?assparade-com-cdr6rm3\.blogspot\.com
+https?:\/\/([^\/]*\.)?astmiv\.com
+https?:\/\/([^\/]*\.)?astsam\.com
+https?:\/\/([^\/]*\.)?aswsu-ddp\.wsu\.edu
+https?:\/\/([^\/]*\.)?atar5\.szm\.sk
+https?:\/\/([^\/]*\.)?atashi-tada\.blogspot\.com
+https?:\/\/([^\/]*\.)?atchina\.com\.cn
+https?:\/\/([^\/]*\.)?atenololhqs\.blogspot\.com
+https?:\/\/([^\/]*\.)?atetech\.com\.cn
+https?:\/\/([^\/]*\.)?athenaindia\.com
+https?:\/\/([^\/]*\.)?ativan\.hav\.pl
+https?:\/\/([^\/]*\.)?ativan1\.skocz\.net
+https?:\/\/([^\/]*\.)?ativans\.eu\.tf
+https?:\/\/([^\/]*\.)?atkmodels-com-g2mc2j\.blogspot\.com
+https?:\/\/([^\/]*\.)?atkmodels-h6\.blogspot\.com
+https?:\/\/([^\/]*\.)?atmoc\.com
+https?:\/\/([^\/]*\.)?atrapy\.pl
+https?:\/\/([^\/]*\.)?auabkc3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?audibookclub\.info
+https?:\/\/([^\/]*\.)?audition-mature-sexy-video-woman\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?audx4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?auejds\.com
+https?:\/\/([^\/]*\.)?aufx8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?augmentin\.4\.pl
+https?:\/\/([^\/]*\.)?augmentinbuy\.megapage\.de
+https?:\/\/([^\/]*\.)?augmentinbuygeneric\.playsite\.de
+https?:\/\/([^\/]*\.)?augmentincheapbuy\.mine\.at
+https?:\/\/([^\/]*\.)?augmentincheapgeneric\.vacations\.to
+https?:\/\/([^\/]*\.)?augmentingeneric\.dive\.to
+https?:\/\/([^\/]*\.)?aumkryl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?auntmia-ivmo1ckhbf\.blogspot\.com
+https?:\/\/([^\/]*\.)?auqkz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?aurar\.info
+https?:\/\/([^\/]*\.)?aurney\.blogspot\.com
+https?:\/\/([^\/]*\.)?aurora-snow-double-anal\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?auto-insurance-2007\.com
+https?:\/\/([^\/]*\.)?auto-insurance-quote\.100freemb\.com
+https?:\/\/([^\/]*\.)?auto-occasioni\.bb22\.info
+https?:\/\/([^\/]*\.)?autoere\.info
+https?:\/\/([^\/]*\.)?autoinsurancevyo\.blogspot\.com
+https?:\/\/([^\/]*\.)?automobileliberty\.cn
+https?:\/\/([^\/]*\.)?ava-devine-friend-hot-mom\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?avalonhyip\.com
+https?:\/\/([^\/]*\.)?avenue-x\.cn
+https?:\/\/([^\/]*\.)?avoidcar\.info
+https?:\/\/([^\/]*\.)?awardspace\.biz
+https?:\/\/([^\/]*\.)?awardspace\.info
+https?:\/\/([^\/]*\.)?awerda\.com
+https?:\/\/([^\/]*\.)?aweu\.cabspace\.com
+https?:\/\/([^\/]*\.)?axfa5\.szm\.sk
+https?:\/\/([^\/]*\.)?axnc0\.szm\.sk
+https?:\/\/([^\/]*\.)?axqui\.szm\.sk
+https?:\/\/([^\/]*\.)?axtu7\.szm\.sk
+https?:\/\/([^\/]*\.)?ayann\.dl\.pl
+https?:\/\/([^\/]*\.)?aynippa\.blogspot\.com
+https?:\/\/([^\/]*\.)?azn-chickadee\.blogspot\.com
+https?:\/\/([^\/]*\.)?azu-erlove\.blogspot\.com
+https?:\/\/([^\/]*\.)?azur3skye\.blogspot\.com
+https?:\/\/([^\/]*\.)?azzacash\.com
+https?:\/\/([^\/]*\.)?b-b-free-hentai-movie-j\.blogspot\.com
+https?:\/\/([^\/]*\.)?b-d-download-porn-movie-n\.blogspot\.com
+https?:\/\/([^\/]*\.)?b\.cn01\.hn\.org
+https?:\/\/([^\/]*\.)?babe-cam-filipina-web\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?babe-dutch-erotic-lingerie\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?babe-forum-picture-porn-star\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?babe-hot-mature\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?babesglamour-com-jotut\.blogspot\.com
+https?:\/\/([^\/]*\.)?babesglamour-com-mp21gz\.blogspot\.com
+https?:\/\/([^\/]*\.)?babibian\.dl\.pl
+https?:\/\/([^\/]*\.)?babooth\.ifrance\.com
+https?:\/\/([^\/]*\.)?babyhere\.net
+https?:\/\/([^\/]*\.)?bachelor1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?back-bare-cum-dripping-fucked-humiliated-pussy-wealthy-woman\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?backroom-facial-margarita\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bad-butt-byron-rub\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bad-butt-byrons-rub\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?bad-credit-home-loanksl\.blogspot\.com
+https?:\/\/([^\/]*\.)?badassteens-com-gnvrh6\.blogspot\.com
+https?:\/\/([^\/]*\.)?badassteens-com-gyhb23dyw\.blogspot\.com
+https?:\/\/([^\/]*\.)?badgirlsblog-com-dcfmx8n2p\.blogspot\.com
+https?:\/\/([^\/]*\.)?badipex\.gog\.pl
+https?:\/\/([^\/]*\.)?bahatoca\.org
+https?:\/\/([^\/]*\.)?baikal-guide\.com
+https?:\/\/([^\/]*\.)?baikal-hotel\.info
+https?:\/\/([^\/]*\.)?baikal-shop\.com
+https?:\/\/([^\/]*\.)?baikal-tour\.biz
+https?:\/\/([^\/]*\.)?baikalguide\.com
+https?:\/\/([^\/]*\.)?baikalshop\.info
+https?:\/\/([^\/]*\.)?bakadeshi\.ifrance\.com
+https?:\/\/([^\/]*\.)?bakamandy\.blogspot\.com
+https?:\/\/([^\/]*\.)?bambulka\.info
+https?:\/\/([^\/]*\.)?bamigreenhouse\.com\.cn
+https?:\/\/([^\/]*\.)?bamima\.com
+https?:\/\/([^\/]*\.)?bandaoti\.dzsc\.com
+https?:\/\/([^\/]*\.)?bang-clip-gang-gang-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?bang-gallery-gang-mature-woman\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?bang-gang-sex-tokyo\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?bank-of-america-credit-cardtja\.blogspot\.com
+https?:\/\/([^\/]*\.)?bank-of-fetish-resource\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?banns\.info
+https?:\/\/([^\/]*\.)?baqaek9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?baquma\.com
+https?:\/\/([^\/]*\.)?bareback-fuck-gay\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?barefootmaniacs-com-rpw1i1\.blogspot\.com
+https?:\/\/([^\/]*\.)?barely18-teens-com-sin\.blogspot\.com
+https?:\/\/([^\/]*\.)?barrystickets\.com
+https?:\/\/([^\/]*\.)?bartik\.asp2\.cz
+https?:\/\/([^\/]*\.)?barulena\.jconserv\.net
+https?:\/\/([^\/]*\.)?basalvar\.dl\.pl
+https?:\/\/([^\/]*\.)?basdeler\.su\.pl
+https?:\/\/([^\/]*\.)?basdombo\.dl\.pl
+https?:\/\/([^\/]*\.)?baslachi\.lightbb\.com
+https?:\/\/([^\/]*\.)?baslalhi\.myrealboard\.com
+https?:\/\/([^\/]*\.)?baslarol\.dl\.pl
+https?:\/\/([^\/]*\.)?basmonzel\.dl\.pl
+https?:\/\/([^\/]*\.)?baspaser\.zikforum\.com
+https?:\/\/([^\/]*\.)?baspasrac\.dl\.pl
+https?:\/\/([^\/]*\.)?baspasvi\.cultureforum\.net
+https?:\/\/([^\/]*\.)?basracchi\.dl\.pl
+https?:\/\/([^\/]*\.)?basteg\.com
+https?:\/\/([^\/]*\.)?bastim\.com
+https?:\/\/([^\/]*\.)?bastnecli\.frbb\.net
+https?:\/\/([^\/]*\.)?bastre\.com
+https?:\/\/([^\/]*\.)?bastru\.com
+https?:\/\/([^\/]*\.)?basuma\.com
+https?:\/\/([^\/]*\.)?bath-hardcore-teen\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bath-product\.hotmail\.ru
+https?:\/\/([^\/]*\.)?bath-product\.pochta\.ru
+https?:\/\/([^\/]*\.)?bath_product\.chat\.ru
+https?:\/\/([^\/]*\.)?bathroom-fuck\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?bbcialis\.ovp\.pl
+https?:\/\/([^\/]*\.)?bbfast\.com
+https?:\/\/([^\/]*\.)?bbndsxtg-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?bbs\.cuesta\.edu
+https?:\/\/([^\/]*\.)?bbsporn\.com
+https?:\/\/([^\/]*\.)?bbuybaliumonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?bbuycialisonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?bbuylevitraonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?bbuytram\.blogcu\.com
+https?:\/\/([^\/]*\.)?bbuytramadolonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?bbuyviagraonlin\.forumlivre\.com
+https?:\/\/([^\/]*\.)?bbw-busty\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?bbw-club-in-san-diego\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bbw-old\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bbw-porn-clip-infotir\.blogspot\.com
+https?:\/\/([^\/]*\.)?bcam8\.szm\.sk
+https?:\/\/([^\/]*\.)?bcdh\.cn
+https?:\/\/([^\/]*\.)?bcialis\.c24\.pl
+https?:\/\/([^\/]*\.)?bcxz8\.szm\.sk
+https?:\/\/([^\/]*\.)?bdsm-lesbian-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?bdsm-personals-houston\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?bdsm-toy\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bdsm-video\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bdsm-vintage\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?bdsmvideos-net-wb55nc\.blogspot\.com
+https?:\/\/([^\/]*\.)?bdsmvideos-net-wfa5qu\.blogspot\.com
+https?:\/\/([^\/]*\.)?bdsmvideos-net-wvckcgq2o\.blogspot\.com
+https?:\/\/([^\/]*\.)?beaffaired\.com
+https?:\/\/([^\/]*\.)?bear-build-gay\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bear-chubby-young\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?bear-terry\.blogspot\.com
+https?:\/\/([^\/]*\.)?beastiality-live\.com
+https?:\/\/([^\/]*\.)?beautiful-ass-pic\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?beautiful-blonde-pole-dancer\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?beautifulzdrawing\.sex-systems\.com
+https?:\/\/([^\/]*\.)?beautyass-com-e1ca\.blogspot\.com
+https?:\/\/([^\/]*\.)?becloudsiss\.thehostcity\.com
+https?:\/\/([^\/]*\.)?bedspread-king\.keckins\.be
+https?:\/\/([^\/]*\.)?begcrucial\.justfree\.com
+https?:\/\/([^\/]*\.)?beginninghouse\.com
+https?:\/\/([^\/]*\.)?begot\.info
+https?:\/\/([^\/]*\.)?beijing-door\.cn
+https?:\/\/([^\/]*\.)?beijingimpression\.com
+https?:\/\/([^\/]*\.)?bekahboo3\.blogspot\.com
+https?:\/\/([^\/]*\.)?beldam\.dns1\.us
+https?:\/\/([^\/]*\.)?bemix\.info
+https?:\/\/([^\/]*\.)?benixon\.dl\.pl
+https?:\/\/([^\/]*\.)?benoit-r86\.blogspot\.com
+https?:\/\/([^\/]*\.)?benson-g68a\.blogspot\.com
+https?:\/\/([^\/]*\.)?benz-h51\.blogspot\.com
+https?:\/\/([^\/]*\.)?beqy\.org
+https?:\/\/([^\/]*\.)?berenupa\.info
+https?:\/\/([^\/]*\.)?berkeley-mdi56f\.blogspot\.com
+https?:\/\/([^\/]*\.)?berlin-o3g\.blogspot\.com
+https?:\/\/([^\/]*\.)?bernie-b18\.blogspot\.com
+https?:\/\/([^\/]*\.)?berrycow\.blogspot\.com
+https?:\/\/([^\/]*\.)?beryl-c3\.blogspot\.com
+https?:\/\/([^\/]*\.)?best-hotels-inns\.com
+https?:\/\/([^\/]*\.)?best-porn-clip-zone0mp\.blogspot\.com
+https?:\/\/([^\/]*\.)?best2006\.info
+https?:\/\/([^\/]*\.)?best568\.com
+https?:\/\/([^\/]*\.)?bestaftor\.com
+https?:\/\/([^\/]*\.)?bestallmed\.info
+https?:\/\/([^\/]*\.)?bestbuyonlinebooks\.com
+https?:\/\/([^\/]*\.)?bestcityhal\.com
+https?:\/\/([^\/]*\.)?bestcyberfish\.com
+https?:\/\/([^\/]*\.)?bestfreegift\.com
+https?:\/\/([^\/]*\.)?bestgames-winner\.com
+https?:\/\/([^\/]*\.)?besthallet\.com
+https?:\/\/([^\/]*\.)?bestinternetexplorer\.info
+https?:\/\/([^\/]*\.)?bestlowmortgagerates\.com
+https?:\/\/([^\/]*\.)?bestmaiden\.com
+https?:\/\/([^\/]*\.)?bestmercedesbez\.info
+https?:\/\/([^\/]*\.)?bestmitsubishiparts\.info
+https?:\/\/([^\/]*\.)?bestmp3online\.com
+https?:\/\/([^\/]*\.)?bestmp3online\.net
+https?:\/\/([^\/]*\.)?bestofe\.com
+https?:\/\/([^\/]*\.)?bestonline-medication\.com
+https?:\/\/([^\/]*\.)?bestonline-shopping\.com
+https?:\/\/([^\/]*\.)?bestorlean\.com
+https?:\/\/([^\/]*\.)?bestpricebentley\.info
+https?:\/\/([^\/]*\.)?bestsellsite\.com
+https?:\/\/([^\/]*\.)?bestxxxanal-1\.tripod\.com
+https?:\/\/([^\/]*\.)?bestyourown\.info
+https?:\/\/([^\/]*\.)?beta-dg174ivc\.blogspot\.com
+https?:\/\/([^\/]*\.)?beth-t6h6\.blogspot\.com
+https?:\/\/([^\/]*\.)?bethany-ezjn\.blogspot\.com
+https?:\/\/([^\/]*\.)?betsie-w4080\.blogspot\.com
+https?:\/\/([^\/]*\.)?betsy-rgxm2e\.blogspot\.com
+https?:\/\/([^\/]*\.)?better\.ws
+https?:\/\/([^\/]*\.)?betty-gy\.blogspot\.com
+https?:\/\/([^\/]*\.)?beverly-hax82jc3md\.blogspot\.com
+https?:\/\/([^\/]*\.)?bevjy\.szm\.sk
+https?:\/\/([^\/]*\.)?beyonce-knowles-nude\.blogspot\.com
+https?:\/\/([^\/]*\.)?bfekd\.szm\.sk
+https?:\/\/([^\/]*\.)?bfgtxs4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?bfi-k5xk7bnu\.blogspot\.com
+https?:\/\/([^\/]*\.)?bfnh2\.szm\.sk
+https?:\/\/([^\/]*\.)?bfqn\.com
+https?:\/\/([^\/]*\.)?bfvsa\.szm\.sk
+https?:\/\/([^\/]*\.)?bgpkvcr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?bhncvw-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?bhqay\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?bi-britney-spears-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?bi-whales\.blogspot\.com
+https?:\/\/([^\/]*\.)?bi-xxx-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?bianca-i7yj\.blogspot\.com
+https?:\/\/([^\/]*\.)?bianpinqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?bicx7\.szm\.sk
+https?:\/\/([^\/]*\.)?bid-sohardcore-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?bidsex\.net
+https?:\/\/([^\/]*\.)?big-big-clit-tit\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?big-bitch-booty-fucked-getting\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?big-black-cock-movie-clip\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?big-black-cock-pic\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?big-black-dick-fat-long\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?big-blonde-mature-tit\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-blonde-teen-tit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-body-fuck\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?big-boob-huge-large\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?big-bouncing-boob-movie\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?big-butt-shemale\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?big-cock-gay-guy-have\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?big-cock-hard-sex\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-cum-cum-shot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?big-cum-movie-swallow-tit-xxx\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-dick-fuck-hot-love-sexy-shemale-that\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?big-ebony-free-gallery-tit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-fat-boob\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-free-lesbian-movie-online-porn\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?big-huge-gigantic-boob\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?big-leg-babes\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?big-leg-nice\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?big-okfl\.blogspot\.com
+https?:\/\/([^\/]*\.)?big-strap-on-dildo\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?big-tit-round-ass-jasmine\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?big-tit-round-ass-maria\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?big-tit-round-ass-picture\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?big-tits\.100freemb\.com
+https?:\/\/([^\/]*\.)?big-titted-bitch\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big-titts-round-ass\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?big-young-cock\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?big\.de\.com
+https?:\/\/([^\/]*\.)?bigapple\.dtdns\.net
+https?:\/\/([^\/]*\.)?bigassadventure-com-g4lvyk\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigbird-aus\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigbreastlovers-com-suqoq\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigcockteenaddiction-com-km\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigcockteenaddiction-com-kpqf40\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigdog-b14q6mwev\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigfoot-c7l\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigfreesex-com-i2csy2\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigfreesex-com-subub\.blogspot\.com
+https?:\/\/([^\/]*\.)?biggest-cock-thickest\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?biggest-dildo-fuck-world\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?biggiebestparis\.com
+https?:\/\/([^\/]*\.)?biglietti-auguri\.net
+https?:\/\/([^\/]*\.)?biglietto-augurio\.freehostss\.info
+https?:\/\/([^\/]*\.)?bigmac-detr0i6y\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigman-tycdhe62d\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigmouthfuls-com-rvl7ep\.blogspot\.com
+https?:\/\/([^\/]*\.)?bignaturals-com-w0\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigpenis\.digitalzones\.com
+https?:\/\/([^\/]*\.)?bigtitpatrol-com-bub8db06d\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigtitsfans-com-rxc3ya\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigtitsroundasses-com-b6auqkd60\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigtitsroundasses-com-redeg\.blogspot\.com
+https?:\/\/([^\/]*\.)?bigtitsroundasses-com-rj85t35x3\.blogspot\.com
+https?:\/\/([^\/]*\.)?biib4\.szm\.sk
+https?:\/\/([^\/]*\.)?bike-boot-dirt-riding\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bike-night\.grimgoe\.be
+https?:\/\/([^\/]*\.)?bikini-wax\.phpbb2\.us
+https?:\/\/([^\/]*\.)?bikinixxx-777now\.tripod\.com
+https?:\/\/([^\/]*\.)?bilbo-ea47j\.blogspot\.com
+https?:\/\/([^\/]*\.)?billy-r4negy1zwm\.blogspot\.com
+https?:\/\/([^\/]*\.)?binky-hu\.blogspot\.com
+https?:\/\/([^\/]*\.)?bio\.research\.ucsc\.edu
+https?:\/\/([^\/]*\.)?biopharmasite\.biz
+https?:\/\/([^\/]*\.)?biperq\.com
+https?:\/\/([^\/]*\.)?bird-iay2s\.blogspot\.com
+https?:\/\/([^\/]*\.)?birdie\.101freehost\.com
+https?:\/\/([^\/]*\.)?birth-control\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?bisexual-cartoon-sex\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?bisexuals-cyber-fuck-horny-lesbian-lezzies-sex\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?bisson\.onthenet\.as
+https?:\/\/([^\/]*\.)?bit-tit-lesbian\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?bitch-fat-hot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?bituka\.com
+https?:\/\/([^\/]*\.)?bivxr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?bizaffiliatecenter\.com
+https?:\/\/([^\/]*\.)?bizarre-love-triangle-lyric-by-frente\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bizarre-sex-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?bizhat\.com
+https?:\/\/([^\/]*\.)?bizhome\.org
+https?:\/\/([^\/]*\.)?bj-trj\.com
+https?:\/\/([^\/]*\.)?bjaoyunhui\.com
+https?:\/\/([^\/]*\.)?bjcee\.com
+https?:\/\/([^\/]*\.)?bjicp\.com
+https?:\/\/([^\/]*\.)?bjicp\.freewebpage\.org
+https?:\/\/([^\/]*\.)?bjicp\.net
+https?:\/\/([^\/]*\.)?bjicp\.org
+https?:\/\/([^\/]*\.)?bjjinhan\.com
+https?:\/\/([^\/]*\.)?bjlzhh\.com
+https?:\/\/([^\/]*\.)?bjocmc3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?bjqmzx\.com
+https?:\/\/([^\/]*\.)?bjrfinfo\.com
+https?:\/\/([^\/]*\.)?bjsscc\.com\.cn
+https?:\/\/([^\/]*\.)?bjtranslate\.com
+https?:\/\/([^\/]*\.)?bjwczx\.com
+https?:\/\/([^\/]*\.)?bjxiongfei\.com
+https?:\/\/([^\/]*\.)?bjxunda\.com
+https?:\/\/([^\/]*\.)?bjzktd\.com
+https?:\/\/([^\/]*\.)?bkclamcp\.t35\.com
+https?:\/\/([^\/]*\.)?bksar\.szm\.sk
+https?:\/\/([^\/]*\.)?bkzor\.szm\.sk
+https?:\/\/([^\/]*\.)?black-amateur-movie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-asian-anal\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?black-boob-sex\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?black-booty-movies-com-i0\.blogspot\.com
+https?:\/\/([^\/]*\.)?black-butt-fat-gay-man\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?black-chick-fuck\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?black-chubby-ebony\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?black-clip-free-full-porn-blog4t5\.blogspot\.com
+https?:\/\/([^\/]*\.)?black-cock-facial\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?black-cock-monster\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?black-cock-white-cunt\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?black-cum-shot-movie\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-domination-female-free-picture-teen\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?black-ebony-free-spreading-tgp\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?black-fat-boob\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?black-free-gay-man-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?black-gay-club\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?black-gay-sex-site\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?black-gay-teen-sex\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?black-hoe-hardcore-sex-gallery\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?black-hoe-that-suck-dick\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?black-jack-4u\.net
+https?:\/\/([^\/]*\.)?black-jack-black\.blogspot\.com
+https?:\/\/([^\/]*\.)?black-jacks\.us
+https?:\/\/([^\/]*\.)?black-jeweler\.org
+https?:\/\/([^\/]*\.)?black-leg-open-wide\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-lesbian-story\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?black-man-fucking-white-sluts\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-monster-boob\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-monster-cock-mpeg\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-on-blonde-sex-picture\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?black-porn-clip-news8bn\.blogspot\.com
+https?:\/\/([^\/]*\.)?black-white-boob\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?black-wide-leg-pants\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?black-woman-sucking-dick\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blackmisheru\.50webs\.org
+https?:\/\/([^\/]*\.)?blade\.host-page\.com
+https?:\/\/([^\/]*\.)?blade1\.host-page\.com
+https?:\/\/([^\/]*\.)?blade10\.host-page\.com
+https?:\/\/([^\/]*\.)?blade2\.host-page\.com
+https?:\/\/([^\/]*\.)?blade4\.host-page\.com
+https?:\/\/([^\/]*\.)?blade5\.host-page\.com
+https?:\/\/([^\/]*\.)?blade6\.host-page\.com
+https?:\/\/([^\/]*\.)?blade7\.host-page\.com
+https?:\/\/([^\/]*\.)?blade8\.host-page\.com
+https?:\/\/([^\/]*\.)?blade9\.host-page\.com
+https?:\/\/([^\/]*\.)?blagoslovenie\.rovno\.ua
+https?:\/\/([^\/]*\.)?blanca-tf50a\.blogspot\.com
+https?:\/\/([^\/]*\.)?blapt\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?blathe\.com
+https?:\/\/([^\/]*\.)?blazer-wwn\.blogspot\.com
+https?:\/\/([^\/]*\.)?blbdg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?blboys-com-wsq27\.blogspot\.com
+https?:\/\/([^\/]*\.)?blbthxw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?blendermedia\.com
+https?:\/\/([^\/]*\.)?blevitra\.ovp\.pl
+https?:\/\/([^\/]*\.)?blmurphy\.dl\.pl
+https?:\/\/([^\/]*\.)?blog-broken-leg\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?blog\.chinaz\.com
+https?:\/\/([^\/]*\.)?blog\.donews\.com
+https?:\/\/([^\/]*\.)?blog\.welover\.org
+https?:\/\/([^\/]*\.)?blog\.yam\.com
+https?:\/\/([^\/]*\.)?blog67\.fc2\.com
+https?:\/\/([^\/]*\.)?blond\.12gbfree\.com
+https?:\/\/([^\/]*\.)?blonde-bald-pussy\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?blonde-blow-job-mpeg\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?blonde-blow-job-tgp\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?blonde-boob-xxx\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blonde-color-hair-platinum\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?blonde-cunt-hair\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?blonde-dumb-not\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?blonde-firework-joke\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?blonde-lesbian-picture\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blonde-long-mature\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?blonde-model-twin\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?blonde-model-wallpaper\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?blonde-teen-bitch\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?blonde-who-fuck\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blonde-with-pink-dildo\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?blonde-xxx-trailer\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?blondie-g7hbdel\.blogspot\.com
+https?:\/\/([^\/]*\.)?blondy-zipper\.iespana\.es
+https?:\/\/([^\/]*\.)?blood-clots-cramp-leg\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?blotrer\.com
+https?:\/\/([^\/]*\.)?blow-deep-free-job-throat\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?blow-free-gallery-in-job-place-public\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blow-gagging-job-pissing-sex\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?blow-job-movie-monster\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?blow-job-video-h-g-b\.blogspot\.com
+https?:\/\/([^\/]*\.)?blowy\.info
+https?:\/\/([^\/]*\.)?blskill\.dl\.pl
+https?:\/\/([^\/]*\.)?blue-phentermine\.coz\.in
+https?:\/\/([^\/]*\.)?bluebird-ki1h06\.blogspot\.com
+https?:\/\/([^\/]*\.)?bluethumbs-com-wn7zce4\.blogspot\.com
+https?:\/\/([^\/]*\.)?blurs\.info
+https?:\/\/([^\/]*\.)?blurzed\.com
+https?:\/\/([^\/]*\.)?bmoer\.szm\.sk
+https?:\/\/([^\/]*\.)?bmoon-tech\.com
+https?:\/\/([^\/]*\.)?bmzz6\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?bnhaq\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?bnme5\.szm\.sk
+https?:\/\/([^\/]*\.)?bnsal\.szm\.sk
+https?:\/\/([^\/]*\.)?bo-wheeling\.blogspot\.com
+https?:\/\/([^\/]*\.)?boatf\.hostpresso\.com
+https?:\/\/([^\/]*\.)?bob-mh5rq0\.blogspot\.com
+https?:\/\/([^\/]*\.)?bobcat-asfz\.blogspot\.com
+https?:\/\/([^\/]*\.)?bobcat-qete\.blogspot\.com
+https?:\/\/([^\/]*\.)?boboczel\.fr-bb\.com
+https?:\/\/([^\/]*\.)?boboer\.heavenforum\.com
+https?:\/\/([^\/]*\.)?bocac\.blogcu\.com
+https?:\/\/([^\/]*\.)?bocalolo\.bbgraf\.com
+https?:\/\/([^\/]*\.)?bocbasdom\.su\.pl
+https?:\/\/([^\/]*\.)?bocbasget\.bbfr\.net
+https?:\/\/([^\/]*\.)?bocchiolo\.zj\.pl
+https?:\/\/([^\/]*\.)?bocerleto\.winnerforum\.net
+https?:\/\/([^\/]*\.)?bocletoget\.cultureforum\.net
+https?:\/\/([^\/]*\.)?bocmonel\.lolforum\.net
+https?:\/\/([^\/]*\.)?boctrocleto\.xa\.pl
+https?:\/\/([^\/]*\.)?bodelel\.goodbb\.net
+https?:\/\/([^\/]*\.)?bodsforthemods-com-txb\.blogspot\.com
+https?:\/\/([^\/]*\.)?body-jewellery-piercing-4u\.com
+https?:\/\/([^\/]*\.)?bodybuilding\.ncedly\.be
+https?:\/\/([^\/]*\.)?bof-xxxvogue-net\.blogspot\.com
+https?:\/\/([^\/]*\.)?bofuno-free-amateur-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?bogetric\.td\.pl
+https?:\/\/([^\/]*\.)?bolds\.info
+https?:\/\/([^\/]*\.)?bolgatalt\.naturalforum\.net
+https?:\/\/([^\/]*\.)?bolle-xeno\.keckins\.be
+https?:\/\/([^\/]*\.)?bologjack\.8tt\.org
+https?:\/\/([^\/]*\.)?bomb9\.szm\.sk
+https?:\/\/([^\/]*\.)?bon-rassi\.com
+https?:\/\/([^\/]*\.)?bondage\.coz\.in
+https?:\/\/([^\/]*\.)?bondagepaper-com-hzt1gq2iw\.blogspot\.com
+https?:\/\/([^\/]*\.)?bondich\.blogspot\.com
+https?:\/\/([^\/]*\.)?boneme-wn\.blogspot\.com
+https?:\/\/([^\/]*\.)?boneprone-com-g0h\.blogspot\.com
+https?:\/\/([^\/]*\.)?boner-dujo\.blogspot\.com
+https?:\/\/([^\/]*\.)?bong-cx0\.blogspot\.com
+https?:\/\/([^\/]*\.)?bong-tedo\.blogspot\.com
+https?:\/\/([^\/]*\.)?bonjour-toxi\.blogspot\.com
+https?:\/\/([^\/]*\.)?bonnie-pequ\.blogspot\.com
+https?:\/\/([^\/]*\.)?bonnie-t00pf3j6\.blogspot\.com
+https?:\/\/([^\/]*\.)?bonota\.blogcu\.com
+https?:\/\/([^\/]*\.)?bonozel\.dl\.pl
+https?:\/\/([^\/]*\.)?bontril\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?bontril\.1k\.pl
+https?:\/\/([^\/]*\.)?boob-dome-com-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?boob-free-large-natural-teen\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boob-little-monster-vicki\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?boob-little-monster-vicki\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?boob-movie-piqe\.blogspot\.com
+https?:\/\/([^\/]*\.)?boob-myspace-com-naked-site\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?boob-nude-pic-small\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boob-video-bb-bb-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?booble-com-orahxf\.blogspot\.com
+https?:\/\/([^\/]*\.)?booble-com-ouq\.blogspot\.com
+https?:\/\/([^\/]*\.)?booger-sure\.blogspot\.com
+https?:\/\/([^\/]*\.)?boogie-sexu\.blogspot\.com
+https?:\/\/([^\/]*\.)?boogie-wy64qty4x\.blogspot\.com
+https?:\/\/([^\/]*\.)?bookcq\.com
+https?:\/\/([^\/]*\.)?bookit-liwe\.blogspot\.com
+https?:\/\/([^\/]*\.)?boole\.cs\.iastate\.edu
+https?:\/\/([^\/]*\.)?boomer-hodo\.blogspot\.com
+https?:\/\/([^\/]*\.)?booster-leto\.blogspot\.com
+https?:\/\/([^\/]*\.)?boot-by-jessica-lyric-made-simpson-walking\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boot-camp-fitness-georgia-summer\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?boot-camp-for-out-of-control-teen\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?boot-cranston-shoes\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?boot-davidson-harley-riding\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?boot-disk-file\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?boot-dress-womens\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?boot-i-in-like-man-rubber\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boot-in-lancashire-maker-shoes\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boot-made-these-video-walkin-watch\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?boot-made-these-walking-who-wrote\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?boot-outlet-timberland\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?boot-riding-supplier\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?boot-these-walking\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bootsie-bihe\.blogspot\.com
+https?:\/\/([^\/]*\.)?bootsie-ku10yu\.blogspot\.com
+https?:\/\/([^\/]*\.)?booty-ebony-gallery\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?booty-ebony-info-remember-video\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?bootycollection-com-cf36tiy45\.blogspot\.com
+https?:\/\/([^\/]*\.)?bootycollection-com-rekiz\.blogspot\.com
+https?:\/\/([^\/]*\.)?boracboc\.su\.pl
+https?:\/\/([^\/]*\.)?borelco\.dl\.pl
+https?:\/\/([^\/]*\.)?borgshare\.org
+https?:\/\/([^\/]*\.)?borjone\.com
+https?:\/\/([^\/]*\.)?borncompany\.com
+https?:\/\/([^\/]*\.)?boryc\.com
+https?:\/\/([^\/]*\.)?boss-bitch-2\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?boss-coerced-fucking-into-wife\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?boss-suno\.blogspot\.com
+https?:\/\/([^\/]*\.)?boston-hardcore-site-myspace-com\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?boston-heqe\.blogspot\.com
+https?:\/\/([^\/]*\.)?bostvndaoe\.blogspot\.com
+https?:\/\/([^\/]*\.)?botaer\.dl\.pl
+https?:\/\/([^\/]*\.)?botast\.com
+https?:\/\/([^\/]*\.)?botrdar\.goodforum\.net
+https?:\/\/([^\/]*\.)?botrdar\.grafbb\.com
+https?:\/\/([^\/]*\.)?boulder-facial-plastic-surgery\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?bov-smut-house-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?bovaral\.naturalforum\.net
+https?:\/\/([^\/]*\.)?bowse\.info
+https?:\/\/([^\/]*\.)?bowtrol\.ventilacia\.yi\.org
+https?:\/\/([^\/]*\.)?bowtrolcoloncleanse\.vlocka\.yi\.org
+https?:\/\/([^\/]*\.)?boy-boy-gay-young\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?boysfirsttime-com-ele2y\.blogspot\.com
+https?:\/\/([^\/]*\.)?bphentermine\.c24\.pl
+https?:\/\/([^\/]*\.)?bphentermine\.ovp\.pl
+https?:\/\/([^\/]*\.)?bqtcfu7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?braburka\.ifrance\.com
+https?:\/\/([^\/]*\.)?bradley-fitu\.blogspot\.com
+https?:\/\/([^\/]*\.)?brahma-steel-toe-boot\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?brandi-a5tds\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandi-vuwi\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandibelle-com-mzqj8l\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandibelle-com-ti\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandon-duso\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandy-cnz56l\.blogspot\.com
+https?:\/\/([^\/]*\.)?brandy-dobu\.blogspot\.com
+https?:\/\/([^\/]*\.)?brasil-pire\.blogspot\.com
+https?:\/\/([^\/]*\.)?brat-nikodim\.blogspot\.com
+https?:\/\/([^\/]*\.)?braves-t7\.blogspot\.com
+https?:\/\/([^\/]*\.)?braves-tuku\.blogspot\.com
+https?:\/\/([^\/]*\.)?bravogirls-com-a7nbqd\.blogspot\.com
+https?:\/\/([^\/]*\.)?bravogirls-com-w12\.blogspot\.com
+https?:\/\/([^\/]*\.)?bravoteens-com-d0v\.blogspot\.com
+https?:\/\/([^\/]*\.)?bravovids-com-rouqs0py\.blogspot\.com
+https?:\/\/([^\/]*\.)?bravovids-r55rxyszt0\.blogspot\.com
+https?:\/\/([^\/]*\.)?brazil-butt-thong\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?brazil-gevo\.blogspot\.com
+https?:\/\/([^\/]*\.)?brazilian-butt-lift-plastic-surgery\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?brb\.pl
+https?:\/\/([^\/]*\.)?breana-foki\.blogspot\.com
+https?:\/\/([^\/]*\.)?breana-wvqscvo5u\.blogspot\.com
+https?:\/\/([^\/]*\.)?breanna-kiwu\.blogspot\.com
+https?:\/\/([^\/]*\.)?breanne-leri\.blogspot\.com
+https?:\/\/([^\/]*\.)?breeanna-quhu\.blogspot\.com
+https?:\/\/([^\/]*\.)?breiana-quhe\.blogspot\.com
+https?:\/\/([^\/]*\.)?brenda-i5z8n4zkb7\.blogspot\.com
+https?:\/\/([^\/]*\.)?brenda-rezo\.blogspot\.com
+https?:\/\/([^\/]*\.)?brenna-xivo\.blogspot\.com
+https?:\/\/([^\/]*\.)?brewster-opqnec8v\.blogspot\.com
+https?:\/\/([^\/]*\.)?brfq6\.szm\.sk
+https?:\/\/([^\/]*\.)?brian-bchd\.blogspot\.com
+https?:\/\/([^\/]*\.)?brianna-dc04k04ivu\.blogspot\.com
+https?:\/\/([^\/]*\.)?brianne-ejv40\.blogspot\.com
+https?:\/\/([^\/]*\.)?brick55\.5gbfree\.com
+https?:\/\/([^\/]*\.)?brickes\.8888mb\.com
+https?:\/\/([^\/]*\.)?bricktilemachine\.com\.cn
+https?:\/\/([^\/]*\.)?bridgette-rjc3pbx6\.blogspot\.com
+https?:\/\/([^\/]*\.)?brightflashes\.blogspot\.com
+https?:\/\/([^\/]*\.)?brionna-hl530r3fe\.blogspot\.com
+https?:\/\/([^\/]*\.)?brisbeck\.com
+https?:\/\/([^\/]*\.)?britney-spear-sexy-ass\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?britney-spears-0\.blogspot\.com
+https?:\/\/([^\/]*\.)?britney-spears-sex-video-t-j-g\.blogspot\.com
+https?:\/\/([^\/]*\.)?brittany-i7ekj3hll\.blogspot\.com
+https?:\/\/([^\/]*\.)?broadcaster-crazy-popular\.freehostss\.info
+https?:\/\/([^\/]*\.)?broadway-ow\.blogspot\.com
+https?:\/\/([^\/]*\.)?brokenbond\.blogspot\.com
+https?:\/\/([^\/]*\.)?bronc\.info
+https?:\/\/([^\/]*\.)?brooke-bejuzava\.blogspot\.com
+https?:\/\/([^\/]*\.)?brooklynn-du\.blogspot\.com
+https?:\/\/([^\/]*\.)?brooks-rare\.lkerfocu\.be
+https?:\/\/([^\/]*\.)?brplank\.ifrance\.com
+https?:\/\/([^\/]*\.)?brrddd\.org
+https?:\/\/([^\/]*\.)?bruce-egqva1m\.blogspot\.com
+https?:\/\/([^\/]*\.)?brunettesexwrl\.blogspot\.com
+https?:\/\/([^\/]*\.)?brush\.hostaim\.com
+https?:\/\/([^\/]*\.)?brutlag\.stanford\.edu
+https?:\/\/([^\/]*\.)?bryan-rdu\.blogspot\.com
+https?:\/\/([^\/]*\.)?bs21sa\.com
+https?:\/\/([^\/]*\.)?bsd-hd\.blogspot\.com
+https?:\/\/([^\/]*\.)?bsoma\.c24\.pl
+https?:\/\/([^\/]*\.)?bsoma\.ovp\.pl
+https?:\/\/([^\/]*\.)?bsri3\.szm\.sk
+https?:\/\/([^\/]*\.)?btipu\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?btix\.combasketball-tickets
+https?:\/\/([^\/]*\.)?btqvb\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?btramadol\.c24\.pl
+https?:\/\/([^\/]*\.)?bubba1-i2pblfp2m\.blogspot\.com
+https?:\/\/([^\/]*\.)?bublifuk\.php5\.cz
+https?:\/\/([^\/]*\.)?bucina\.asp2\.cz
+https?:\/\/([^\/]*\.)?buck-o1i5bt\.blogspot\.com
+https?:\/\/([^\/]*\.)?buddy-bqam83yt\.blogspot\.com
+https?:\/\/([^\/]*\.)?budget7i\.info
+https?:\/\/([^\/]*\.)?buff-com-es-gay-porn-site-l-s-g\.blogspot\.com
+https?:\/\/([^\/]*\.)?bug\.phil\.cmu\.edu
+https?:\/\/([^\/]*\.)?buildercareer\.us
+https?:\/\/([^\/]*\.)?bukicon-free-bisexual-s-b\.blogspot\.com
+https?:\/\/([^\/]*\.)?bukkake-cum-facial-shot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?bulldog-dc86aq4l\.blogspot\.com
+https?:\/\/([^\/]*\.)?bumast\.com
+https?:\/\/([^\/]*\.)?bumins\.com
+https?:\/\/([^\/]*\.)?bunnyteens-com-clpxyq6of\.blogspot\.com
+https?:\/\/([^\/]*\.)?bunnyteens-com-gz7\.blogspot\.com
+https?:\/\/([^\/]*\.)?bupropion-hcl\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?buruan\.dl\.pl
+https?:\/\/([^\/]*\.)?business-brokers\.lkerfocu\.be
+https?:\/\/([^\/]*\.)?business-school\.hotmail\.ru
+https?:\/\/([^\/]*\.)?business-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?business1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?business2school\.chat\.ru
+https?:\/\/([^\/]*\.)?businessitaly\.info
+https?:\/\/([^\/]*\.)?businesx\.atspace\.com
+https?:\/\/([^\/]*\.)?buspar\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?buspirone\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?busstopwhores-com-c0f\.blogspot\.com
+https?:\/\/([^\/]*\.)?busstopwhores-com-ki7\.blogspot\.com
+https?:\/\/([^\/]*\.)?busty-blonde-bomb-shell\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?busty-blonde-fuck\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?busty-escort-porn\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?busty-horny-milf\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?busty-little-girl\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?busty-mature-red-head\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?busty-sex-star\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?busty-super-girl\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?busty-thick-ebony\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?bustyadventures-com-oh518h8l\.blogspot\.com
+https?:\/\/([^\/]*\.)?bustyisland-com-au\.blogspot\.com
+https?:\/\/([^\/]*\.)?bustyisland-mdjgr6khy\.blogspot\.com
+https?:\/\/([^\/]*\.)?bustypassion-com-bpe84\.blogspot\.com
+https?:\/\/([^\/]*\.)?butalbital-apap\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?butalbital\.ru\.tf
+https?:\/\/([^\/]*\.)?butler-h3bpdq\.blogspot\.com
+https?:\/\/([^\/]*\.)?butseriouslyimprov\.com
+https?:\/\/([^\/]*\.)?butt-community-type-white\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?butt-face-fat-her-kong-love-picture-queen-sit\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?butt-fucking-teen\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?butt-girl-rate\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?buttons-iveta\.blogspot\.com
+https?:\/\/([^\/]*\.)?buwelch\.dl\.pl
+https?:\/\/([^\/]*\.)?buwu-admin\.blogspot\.com
+https?:\/\/([^\/]*\.)?buy-ambien-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-ambien\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-ativan\.fil\.ph
+https?:\/\/([^\/]*\.)?buy-bontril\.contact\.cc
+https?:\/\/([^\/]*\.)?buy-carisoprodol\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-celebrex\.bigsitecity\.com
+https?:\/\/([^\/]*\.)?buy-cialis-online\.bigsitecity\.com
+https?:\/\/([^\/]*\.)?buy-cialis\.1k\.pl
+https?:\/\/([^\/]*\.)?buy-cialis\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-cialis\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-cialis20\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-cialishhb\.blogspot\.com
+https?:\/\/([^\/]*\.)?buy-cialisklx\.blogspot\.com
+https?:\/\/([^\/]*\.)?buy-hydrocodone-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?buy-hydrocodone-gs\.net\.tc
+https?:\/\/([^\/]*\.)?buy-hydrocodone\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-hydrocodone\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-levitra\.1k\.pl
+https?:\/\/([^\/]*\.)?buy-levitra\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-lipitor\.contact\.cc
+https?:\/\/([^\/]*\.)?buy-lortab-911\.jo\.pl
+https?:\/\/([^\/]*\.)?buy-online-tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?buy-pharmacy\.blogspot\.com
+https?:\/\/([^\/]*\.)?buy-phentermine-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?buy-phentermine-gs\.net\.tc
+https?:\/\/([^\/]*\.)?buy-phentermine\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-phentermine\.health-livening\.com
+https?:\/\/([^\/]*\.)?buy-phentermine\.hem\.nu
+https?:\/\/([^\/]*\.)?buy-phentermine\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-phentermine20\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-prozac-online\.com
+https?:\/\/([^\/]*\.)?buy-soma\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-tennis-shoes\.info
+https?:\/\/([^\/]*\.)?buy-tramadol-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?buy-tramadol-gs\.net\.tc
+https?:\/\/([^\/]*\.)?buy-tramadol-online911\.jo\.pl
+https?:\/\/([^\/]*\.)?buy-tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?buy-tramadol\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-tramadol\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-tramadol20\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-ultram\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-valium\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-viagra-online\.health-livening\.com
+https?:\/\/([^\/]*\.)?buy-viagra\.esguay\.com
+https?:\/\/([^\/]*\.)?buy-viagra\.health-livening\.com
+https?:\/\/([^\/]*\.)?buy-viagra\.presteert\.nl
+https?:\/\/([^\/]*\.)?buy-viagra20\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy-xanax20\.bravehost\.com
+https?:\/\/([^\/]*\.)?buy4levitra\.blogspot\.com
+https?:\/\/([^\/]*\.)?buy4viagra\.blogspot\.com
+https?:\/\/([^\/]*\.)?buyambien\.blog\.hr
+https?:\/\/([^\/]*\.)?buyambien\.guu\.pl
+https?:\/\/([^\/]*\.)?buybuspar\.4\.pl
+https?:\/\/([^\/]*\.)?buycialisonline\.forumlivre\.com
+https?:\/\/([^\/]*\.)?buycialisonline\.sprayblog\.se
+https?:\/\/([^\/]*\.)?buycialisonline\.sulekha\.com
+https?:\/\/([^\/]*\.)?buycialispills00\.blogspot\.com
+https?:\/\/([^\/]*\.)?buycialiss\.blogsome\.com
+https?:\/\/([^\/]*\.)?buycialiss\.ovp\.pl
+https?:\/\/([^\/]*\.)?buycipro\.4\.pl
+https?:\/\/([^\/]*\.)?buyeffexor\.4\.pl
+https?:\/\/([^\/]*\.)?buyhydrocodone\.blog\.hr
+https?:\/\/([^\/]*\.)?buylevitra\.blog\.hr
+https?:\/\/([^\/]*\.)?buylevitra\.forospace\.com
+https?:\/\/([^\/]*\.)?buylevitraonlin\.forumlivre\.com
+https?:\/\/([^\/]*\.)?buylevitraonline\.sprayblog\.se
+https?:\/\/([^\/]*\.)?buymeridia\.blog\.hr
+https?:\/\/([^\/]*\.)?buyonlineorder\.com
+https?:\/\/([^\/]*\.)?buypaxil\.blog\.hr
+https?:\/\/([^\/]*\.)?buyphentermine2\.livelog\.com
+https?:\/\/([^\/]*\.)?buyphenterminee\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyphenterminez\.blog\.hr
+https?:\/\/([^\/]*\.)?buypropecia\.blog\.hr
+https?:\/\/([^\/]*\.)?buyprozac\.blog\.hr
+https?:\/\/([^\/]*\.)?buyrosebowltickets\.com
+https?:\/\/([^\/]*\.)?buysoma\.1majorhost\.com
+https?:\/\/([^\/]*\.)?buysoma\.cay\.pl
+https?:\/\/([^\/]*\.)?buysomaaonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?buysomaonline\.forospace\.com
+https?:\/\/([^\/]*\.)?buysomaonlinez\.blogsome\.com
+https?:\/\/([^\/]*\.)?buytramadolonli\.forumlivre\.com
+https?:\/\/([^\/]*\.)?buytramadolonline\.sprayblog\.se
+https?:\/\/([^\/]*\.)?buytramadolz\.jubiiblog\.de
+https?:\/\/([^\/]*\.)?buytrazodone\.eamped\.com
+https?:\/\/([^\/]*\.)?buyultram\.forospace\.com
+https?:\/\/([^\/]*\.)?buyultram\.ir\.pl
+https?:\/\/([^\/]*\.)?buyultramonline\.ir\.pl
+https?:\/\/([^\/]*\.)?buyultramxp\.cay\.pl
+https?:\/\/([^\/]*\.)?buyvalium\.one2you\.info
+https?:\/\/([^\/]*\.)?buyvaliumonline\.forumlivre\.com
+https?:\/\/([^\/]*\.)?buyvaliumonline\.jubiiblog\.de
+https?:\/\/([^\/]*\.)?buyvaliumonline\.sprayblog\.se
+https?:\/\/([^\/]*\.)?buyviagra\.seesaa\.net
+https?:\/\/([^\/]*\.)?buyviagraa\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyviagraonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyviagraonline\.sprayblog\.se
+https?:\/\/([^\/]*\.)?buyviagraxp\.cay\.pl
+https?:\/\/([^\/]*\.)?buyvicodinxp\.cay\.pl
+https?:\/\/([^\/]*\.)?buyvvalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyxanax\.5u\.com
+https?:\/\/([^\/]*\.)?buyxanaxxonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyxanaxxp\.cay\.pl
+https?:\/\/([^\/]*\.)?buyxenical\.blog\.hr
+https?:\/\/([^\/]*\.)?buyxenical\.ir\.pl
+https?:\/\/([^\/]*\.)?buyxenicalonline\.ir\.pl
+https?:\/\/([^\/]*\.)?buyxxenical\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyxxenicalonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyycelexa\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyycialis\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyymeridiaonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyyphentermine\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyysoma\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyyviagra\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyyzithromax\.ovp\.pl
+https?:\/\/([^\/]*\.)?buyzoloft\.blog\.hr
+https?:\/\/([^\/]*\.)?buyzyban\.coz\.in
+https?:\/\/([^\/]*\.)?buzerave\.com
+https?:\/\/([^\/]*\.)?bvalium\.c24\.pl
+https?:\/\/([^\/]*\.)?bvalium\.fuks\.pl
+https?:\/\/([^\/]*\.)?bvalium1\.forumup\.org
+https?:\/\/([^\/]*\.)?bviagra\.ovp\.pl
+https?:\/\/([^\/]*\.)?bviagra1\.forumup\.org
+https?:\/\/([^\/]*\.)?bvse1\.szm\.sk
+https?:\/\/([^\/]*\.)?bwmi0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?bwzf6\.szm\.sk
+https?:\/\/([^\/]*\.)?bx6\.blrf\.net
+https?:\/\/([^\/]*\.)?bxanax\.c24\.pl
+https?:\/\/([^\/]*\.)?bxanax\.gog\.pl
+https?:\/\/([^\/]*\.)?bxanax1\.forumup\.org
+https?:\/\/([^\/]*\.)?byhydrocodone\.blog\.espresso\.repubblica\.it
+https?:\/\/([^\/]*\.)?bzxs\.org\.ua
+https?:\/\/([^\/]*\.)?c-canada\.com
+https?:\/\/([^\/]*\.)?c4taldron\.uy\.pl
+https?:\/\/([^\/]*\.)?c4tcaget\.blogcu\.com
+https?:\/\/([^\/]*\.)?c4tcoli\.td\.pl
+https?:\/\/([^\/]*\.)?c4tdarrel\.dl\.pl
+https?:\/\/([^\/]*\.)?c4tdronrel\.goodforum\.net
+https?:\/\/([^\/]*\.)?c4tdronrel\.grafbb\.com
+https?:\/\/([^\/]*\.)?c4tvarcna\.dl\.pl
+https?:\/\/([^\/]*\.)?ca57sgr0h\.org
+https?:\/\/([^\/]*\.)?cable-connection\.keckins\.be
+https?:\/\/([^\/]*\.)?caboboc\.blogcu\.com
+https?:\/\/([^\/]*\.)?cacalife\.com
+https?:\/\/([^\/]*\.)?cacas\.info
+https?:\/\/([^\/]*\.)?caculall\.forumzen\.com
+https?:\/\/([^\/]*\.)?cadiucna\.forumzen\.com
+https?:\/\/([^\/]*\.)?caeserch\.com
+https?:\/\/([^\/]*\.)?cafasc\.com
+https?:\/\/([^\/]*\.)?caguyea\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cahn\.mnsu\.edu
+https?:\/\/([^\/]*\.)?caitlyn-d66tmgwi1\.blogspot\.com
+https?:\/\/([^\/]*\.)?caked\.info
+https?:\/\/([^\/]*\.)?calciatore-nudo\.hostzz\.info
+https?:\/\/([^\/]*\.)?calcio-arbitri\.com
+https?:\/\/([^\/]*\.)?calcio-watch\.com
+https?:\/\/([^\/]*\.)?calcolo-rata-finanziamento\.ll33\.info
+https?:\/\/([^\/]*\.)?calendario-vari\.freespase\.info
+https?:\/\/([^\/]*\.)?calgary-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?californiamortgage-x\.com
+https?:\/\/([^\/]*\.)?call-kelly-com-ky\.blogspot\.com
+https?:\/\/([^\/]*\.)?call-kelly-com-tnm5k7042\.blogspot\.com
+https?:\/\/([^\/]*\.)?callie-es\.blogspot\.com
+https?:\/\/([^\/]*\.)?callsecurity\.blogspot\.com
+https?:\/\/([^\/]*\.)?camaro-r21nu37q\.blogspot\.com
+https?:\/\/([^\/]*\.)?camcrush-com-eudifxp82\.blogspot\.com
+https?:\/\/([^\/]*\.)?camcrush-com-igzig\.blogspot\.com
+https?:\/\/([^\/]*\.)?camcrush-com-my1v8l4\.blogspot\.com
+https?:\/\/([^\/]*\.)?camel-cigarettes\.s5\.com
+https?:\/\/([^\/]*\.)?camelclips-com-budun\.blogspot\.com
+https?:\/\/([^\/]*\.)?camelclips-com-d3s6o2\.blogspot\.com
+https?:\/\/([^\/]*\.)?camelclips-com-h6a5l\.blogspot\.com
+https?:\/\/([^\/]*\.)?camelmenthe\.blogspot\.com
+https?:\/\/([^\/]*\.)?cameralover\.net
+https?:\/\/([^\/]*\.)?camerascams\.info
+https?:\/\/([^\/]*\.)?cameron-h184o7b\.blogspot\.com
+https?:\/\/([^\/]*\.)?camini\.freehostss\.info
+https?:\/\/([^\/]*\.)?canada-birthday\.acb\.pl
+https?:\/\/([^\/]*\.)?canadian-pharmacyfur\.blogspot\.com
+https?:\/\/([^\/]*\.)?canadian-pharmacyyof\.blogspot\.com
+https?:\/\/([^\/]*\.)?cancer-skin\.nm\.ru
+https?:\/\/([^\/]*\.)?cancer-skin\.pochta\.ru
+https?:\/\/([^\/]*\.)?cancer_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?candi-door-hot-mom-next\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?candylist-com-dib\.blogspot\.com
+https?:\/\/([^\/]*\.)?candylist-com-ip72g5\.blogspot\.com
+https?:\/\/([^\/]*\.)?canjipiao\.com
+https?:\/\/([^\/]*\.)?cantante-arabe-sexy\.hostzz\.info
+https?:\/\/([^\/]*\.)?cantor-dz1h733\.blogspot\.com
+https?:\/\/([^\/]*\.)?caorzel\.discutforum\.com
+https?:\/\/([^\/]*\.)?capasdar\.td\.pl
+https?:\/\/([^\/]*\.)?car-free-insurance-quoteqch\.blogspot\.com
+https?:\/\/([^\/]*\.)?car-insurance-\.blogspot\.com
+https?:\/\/([^\/]*\.)?car-insurance-club\.com
+https?:\/\/([^\/]*\.)?car-insurance-p4zw\.blogspot\.com
+https?:\/\/([^\/]*\.)?car-insurance-ratsvex\.blogspot\.com
+https?:\/\/([^\/]*\.)?car-loan-newdma\.blogspot\.com
+https?:\/\/([^\/]*\.)?car-loan-neweei\.blogspot\.com
+https?:\/\/([^\/]*\.)?car1home\.info
+https?:\/\/([^\/]*\.)?carabidule\.net
+https?:\/\/([^\/]*\.)?carbest2006\.info
+https?:\/\/([^\/]*\.)?cardura-rapid-heartbeat\.tlg\.pl
+https?:\/\/([^\/]*\.)?care-skin\.pochta\.ru
+https?:\/\/([^\/]*\.)?career-business\.net
+https?:\/\/([^\/]*\.)?carepharmasite\.info
+https?:\/\/([^\/]*\.)?caribxpressparts\.com
+https?:\/\/([^\/]*\.)?caricc4t\.xa\.pl
+https?:\/\/([^\/]*\.)?carinsurance-x\.com
+https?:\/\/([^\/]*\.)?carinsuranceshh\.blogspot\.com
+https?:\/\/([^\/]*\.)?carisoprodol-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?carisoprodol\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?carisoprodol\.269g\.net
+https?:\/\/([^\/]*\.)?carisoprodol\.47\.pl
+https?:\/\/([^\/]*\.)?carisoprodol\.goodpharm\.info
+https?:\/\/([^\/]*\.)?carisoprodol\.hav\.pl
+https?:\/\/([^\/]*\.)?carisoprodol\.presteert\.nl
+https?:\/\/([^\/]*\.)?carisoprodol\.seesaa\.net
+https?:\/\/([^\/]*\.)?carisoprodol\.skocz\.net
+https?:\/\/([^\/]*\.)?carisoprodolrx\.weboficial\.com
+https?:\/\/([^\/]*\.)?carisoprodols\.blogspot\.com
+https?:\/\/([^\/]*\.)?carley-m3ia3\.blogspot\.com
+https?:\/\/([^\/]*\.)?carlie-a2s405\.blogspot\.com
+https?:\/\/([^\/]*\.)?carol-txxhdpnt\.blogspot\.com
+https?:\/\/([^\/]*\.)?carolina-w2aoe4xx\.blogspot\.com
+https?:\/\/([^\/]*\.)?carolyn-gp2s5\.blogspot\.com
+https?:\/\/([^\/]*\.)?carovi\.su\.pl
+https?:\/\/([^\/]*\.)?carson-ko8z7\.blogspot\.com
+https?:\/\/([^\/]*\.)?carspoker\.u288\.com
+https?:\/\/([^\/]*\.)?cartolina-pasqua\.host24h\.info
+https?:\/\/([^\/]*\.)?cartoon-free-gallery-gay\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cartoon-porn-clip-bloghvn\.blogspot\.com
+https?:\/\/([^\/]*\.)?carxm\.info
+https?:\/\/([^\/]*\.)?casaviva\.19mb\.info
+https?:\/\/([^\/]*\.)?cascq\.szm\.sk
+https?:\/\/([^\/]*\.)?casetvar\.forumzen\.com
+https?:\/\/([^\/]*\.)?cashadvance-x\.com
+https?:\/\/([^\/]*\.)?cashing-view\.com
+https?:\/\/([^\/]*\.)?casing\.dyndns\.dk
+https?:\/\/([^\/]*\.)?casino-555\.com
+https?:\/\/([^\/]*\.)?casino-attraction\.com
+https?:\/\/([^\/]*\.)?casino-games-wiki\.com
+https?:\/\/([^\/]*\.)?casino-magyck\.mutogen\.be
+https?:\/\/([^\/]*\.)?casino-ppp\.com
+https?:\/\/([^\/]*\.)?casino-startup\.com
+https?:\/\/([^\/]*\.)?casino-theory\.com
+https?:\/\/([^\/]*\.)?casino\.requirements\.be
+https?:\/\/([^\/]*\.)?casino1\.forumup\.org
+https?:\/\/([^\/]*\.)?casinos-new\.com
+https?:\/\/([^\/]*\.)?casinostates\.com
+https?:\/\/([^\/]*\.)?casper-a3r1z2a0\.blogspot\.com
+https?:\/\/([^\/]*\.)?cassay\.net
+https?:\/\/([^\/]*\.)?casual-boots\.massioni\.be
+https?:\/\/([^\/]*\.)?catch-c-teens\.blogspot\.com
+https?:\/\/([^\/]*\.)?catherine-tu75h6w\.blogspot\.com
+https?:\/\/([^\/]*\.)?catrelet\.forumzen\.com
+https?:\/\/([^\/]*\.)?cats-wjbreb7e\.blogspot\.com
+https?:\/\/([^\/]*\.)?cayuga-g2legvldk2\.blogspot\.com
+https?:\/\/([^\/]*\.)?cazelmon\.lolforum\.net
+https?:\/\/([^\/]*\.)?cazelolo\.dl\.pl
+https?:\/\/([^\/]*\.)?cbbi\.cn
+https?:\/\/([^\/]*\.)?cbhi8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cbkf0\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?cbwgkm8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cc5f\.dnyp\.com
+https?:\/\/([^\/]*\.)?ccak1\.szm\.sk
+https?:\/\/([^\/]*\.)?ccal\.cultureforum\.net
+https?:\/\/([^\/]*\.)?ccclfak\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ccheapcelexa\.ovp\.pl
+https?:\/\/([^\/]*\.)?ccheapvaliumonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ccline\.info
+https?:\/\/([^\/]*\.)?ccnarac\.uy\.pl
+https?:\/\/([^\/]*\.)?ccobhv7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cdq\.dzsbcn\.com
+https?:\/\/([^\/]*\.)?cdsmart\.info
+https?:\/\/([^\/]*\.)?cdzhs\.szm\.sk
+https?:\/\/([^\/]*\.)?ceasius\.blogspot\.com
+https?:\/\/([^\/]*\.)?cecily-koj\.blogspot\.com
+https?:\/\/([^\/]*\.)?ceclor\.tlg\.pl
+https?:\/\/([^\/]*\.)?celeb-filipina-movie-site\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?celebrex-911\.coz\.in
+https?:\/\/([^\/]*\.)?celebrex-celecoxib-200mg\.tlg\.pl
+https?:\/\/([^\/]*\.)?celebrex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?celebrity-sex-video-n-q-x\.blogspot\.com
+https?:\/\/([^\/]*\.)?celebrity-sex-video\.0800-porn\.com
+https?:\/\/([^\/]*\.)?celebrityprofiler\.com
+https?:\/\/([^\/]*\.)?celelt\.dl\.pl
+https?:\/\/([^\/]*\.)?celeste-mi8q701\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexa\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?celexa\.269g\.net
+https?:\/\/([^\/]*\.)?celexafcy\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexaodt\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexavby\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexavcc\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexazer\.blogspot\.com
+https?:\/\/([^\/]*\.)?celexxaonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?celine-ajha0vxo6\.blogspot\.com
+https?:\/\/([^\/]*\.)?celtic-frost-ringtonedbg\.blogspot\.com
+https?:\/\/([^\/]*\.)?celtic-frost-ringtonepxe\.blogspot\.com
+https?:\/\/([^\/]*\.)?celtic-ring\.boom\.ru
+https?:\/\/([^\/]*\.)?celtic1ring\.chat\.ru
+https?:\/\/([^\/]*\.)?cemast\.com
+https?:\/\/([^\/]*\.)?center-csy73nq1\.blogspot\.com
+https?:\/\/([^\/]*\.)?century-21\.co\.jp
+https?:\/\/([^\/]*\.)?cephalexin\.dynalias\.net
+https?:\/\/([^\/]*\.)?cephalexin\.kicks-ass\.net
+https?:\/\/([^\/]*\.)?cephalexinvyp\.blogspot\.com
+https?:\/\/([^\/]*\.)?ceremi\.com
+https?:\/\/([^\/]*\.)?cerveza\.republika\.pl
+https?:\/\/([^\/]*\.)?cetki\.blogspot\.com
+https?:\/\/([^\/]*\.)?cetuna\.com
+https?:\/\/([^\/]*\.)?cfhc2\.szm\.sk
+https?:\/\/([^\/]*\.)?cfi-tp\.blogspot\.com
+https?:\/\/([^\/]*\.)?cgj-wmkd0p54ap\.blogspot\.com
+https?:\/\/([^\/]*\.)?chain\.webmelia\.com
+https?:\/\/([^\/]*\.)?champion-ghdm2p\.blogspot\.com
+https?:\/\/([^\/]*\.)?chancec-i0\.blogspot\.com
+https?:\/\/([^\/]*\.)?chandler-ozbi2l\.blogspot\.com
+https?:\/\/([^\/]*\.)?chanel-ag2w\.blogspot\.com
+https?:\/\/([^\/]*\.)?charity-eu\.blogspot\.com
+https?:\/\/([^\/]*\.)?charles-rp7s\.blogspot\.com
+https?:\/\/([^\/]*\.)?charlie-gl3ig\.blogspot\.com
+https?:\/\/([^\/]*\.)?charming-kbatna2k\.blogspot\.com
+https?:\/\/([^\/]*\.)?charvis-mj35\.blogspot\.com
+https?:\/\/([^\/]*\.)?chase-online-bankingdir\.blogspot\.com
+https?:\/\/([^\/]*\.)?chasehunt\.com
+https?:\/\/([^\/]*\.)?chasity-oy2mgww10\.blogspot\.com
+https?:\/\/([^\/]*\.)?chat-a7gdn35u\.blogspot\.com
+https?:\/\/([^\/]*\.)?chat-gay-ohio-room\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?chat\.infty\.net
+https?:\/\/([^\/]*\.)?chatelaine-free-lipstick\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?chatou\.dzsc\.com
+https?:\/\/([^\/]*\.)?chatsky\.cn
+https?:\/\/([^\/]*\.)?chaucer\.umuc\.edu
+https?:\/\/([^\/]*\.)?chayse-c0z2untnw\.blogspot\.com
+https?:\/\/([^\/]*\.)?chazuo\.dzsc\.com
+https?:\/\/([^\/]*\.)?chazz-d86hk\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheap-cialis\.presteert\.nl
+https?:\/\/([^\/]*\.)?cheap-hydrocodone\.presteert\.nl
+https?:\/\/([^\/]*\.)?cheap-phentermine\.cheapills\.info
+https?:\/\/([^\/]*\.)?cheap-phentermine\.esguay\.com
+https?:\/\/([^\/]*\.)?cheap-phentermine\.health-livening\.com
+https?:\/\/([^\/]*\.)?cheap-phentermine\.presteert\.nl
+https?:\/\/([^\/]*\.)?cheap-rocky-boot\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?cheap-soma-online\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheap-tramadol-onlin\.zikforum\.com
+https?:\/\/([^\/]*\.)?cheap-tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?cheap-tramadol\.cheapills\.info
+https?:\/\/([^\/]*\.)?cheap-tramadol\.presteert\.nl
+https?:\/\/([^\/]*\.)?cheap-trashy-lingerie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cheap-travel-deal\.globaltr\.info
+https?:\/\/([^\/]*\.)?cheap-valium\.cheapills\.info
+https?:\/\/([^\/]*\.)?cheap-viagra\.health-livening\.com
+https?:\/\/([^\/]*\.)?cheap-viagra\.presteert\.nl
+https?:\/\/([^\/]*\.)?cheap-xanax\.us\.tf
+https?:\/\/([^\/]*\.)?cheapcialiss\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapest-pills\.org
+https?:\/\/([^\/]*\.)?cheapest-viagra-source\.com
+https?:\/\/([^\/]*\.)?cheapestlakerstickets\.com
+https?:\/\/([^\/]*\.)?cheaplakertickets\.com
+https?:\/\/([^\/]*\.)?cheappcialis\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapphentermine\.livelog\.com
+https?:\/\/([^\/]*\.)?cheapphenterminee\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapphntermine\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheappvalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheappviagra\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapsuperbowltickets\.com
+https?:\/\/([^\/]*\.)?cheaptramadol\.forospace\.com
+https?:\/\/([^\/]*\.)?cheaptramadols\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheaptramadolz\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapvaliumm\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapvvalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapxanaxx\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheapxxanax\.ovp\.pl
+https?:\/\/([^\/]*\.)?cheater-t3si78zbf\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheats-e2p3o7nhm\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheaviagra\.blogsome\.com
+https?:\/\/([^\/]*\.)?checkers-wn88\.blogspot\.com
+https?:\/\/([^\/]*\.)?checkproxy\.com
+https?:\/\/([^\/]*\.)?cheerleader-child-photo\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cheerleader-dolphin\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cheerleader-gallery-naughty\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?cheerleader-upskirt-picture\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?cheese-ratzl\.blogspot\.com
+https?:\/\/([^\/]*\.)?chellam-g2w\.blogspot\.com
+https?:\/\/([^\/]*\.)?chelsey-kifs\.blogspot\.com
+https?:\/\/([^\/]*\.)?chem-iv1c82\.blogspot\.com
+https?:\/\/([^\/]*\.)?chemistry-mrrx5e\.blogspot\.com
+https?:\/\/([^\/]*\.)?chemistry\.org\.ua
+https?:\/\/([^\/]*\.)?cheng-o08if\.blogspot\.com
+https?:\/\/([^\/]*\.)?chenglong\.com\.cn
+https?:\/\/([^\/]*\.)?cher-aorxm1s3j7\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheryl-b8\.blogspot\.com
+https?:\/\/([^\/]*\.)?chess-cy\.blogspot\.com
+https?:\/\/([^\/]*\.)?chester1-tfkfl51eb\.blogspot\.com
+https?:\/\/([^\/]*\.)?chevroletcam\.cn
+https?:\/\/([^\/]*\.)?chevy-ekv8ph\.blogspot\.com
+https?:\/\/([^\/]*\.)?chevy1-wwok0ww55\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheyanne-rnriiwno6l\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheyenne-g3l5fa87\.blogspot\.com
+https?:\/\/([^\/]*\.)?cheyne-hm7aik5u\.blogspot\.com
+https?:\/\/([^\/]*\.)?chfielde\.ifrance\.com
+https?:\/\/([^\/]*\.)?chic-ks\.blogspot\.com
+https?:\/\/([^\/]*\.)?chicago-kou3c7e58\.blogspot\.com
+https?:\/\/([^\/]*\.)?chick-gay-kissing\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?chicken-i66t8z76\.blogspot\.com
+https?:\/\/([^\/]*\.)?chico-myg8bv\.blogspot\.com
+https?:\/\/([^\/]*\.)?chidneuer\.frbb\.net
+https?:\/\/([^\/]*\.)?chidronrac\.ephpbb\.com
+https?:\/\/([^\/]*\.)?chidronrec\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?chiefs-oob\.blogspot\.com
+https?:\/\/([^\/]*\.)?chilacna\.td\.pl
+https?:\/\/([^\/]*\.)?child-leg-pain\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?chilton-b82sebrrue\.blogspot\.com
+https?:\/\/([^\/]*\.)?chimp-cu4gvwsceg\.blogspot\.com
+https?:\/\/([^\/]*\.)?china--magnet\.com
+https?:\/\/([^\/]*\.)?china-dwcuzqft6\.blogspot\.com
+https?:\/\/([^\/]*\.)?china-made-door\.com\.cn
+https?:\/\/([^\/]*\.)?china01\.52blog\.net
+https?:\/\/([^\/]*\.)?china02\.52blog\.net
+https?:\/\/([^\/]*\.)?china1\.52blog\.net
+https?:\/\/([^\/]*\.)?china1\.yculblog\.com
+https?:\/\/([^\/]*\.)?china2\.52blog\.net
+https?:\/\/([^\/]*\.)?china2\.yculblog\.com
+https?:\/\/([^\/]*\.)?china3\.yculblog\.com
+https?:\/\/([^\/]*\.)?chinacarcenter\.net
+https?:\/\/([^\/]*\.)?chinacid\.com
+https?:\/\/([^\/]*\.)?chinafoo\.com
+https?:\/\/([^\/]*\.)?chinafurnace\.net
+https?:\/\/([^\/]*\.)?chinakj\.net
+https?:\/\/([^\/]*\.)?chinalhcz\.com
+https?:\/\/([^\/]*\.)?chinaprojectors\.com
+https?:\/\/([^\/]*\.)?chinatranslation\.net
+https?:\/\/([^\/]*\.)?chinayoujiu\.com
+https?:\/\/([^\/]*\.)?chinese-google\.com
+https?:\/\/([^\/]*\.)?chineseaids\.com
+https?:\/\/([^\/]*\.)?chineseaids\.net
+https?:\/\/([^\/]*\.)?chinesezhouyi\.com
+https?:\/\/([^\/]*\.)?chip-thz\.blogspot\.com
+https?:\/\/([^\/]*\.)?chipper-eusa\.blogspot\.com
+https?:\/\/([^\/]*\.)?chippewa-work-boot\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?chiquita-wqok0t741\.blogspot\.com
+https?:\/\/([^\/]*\.)?chiricc4t\.zj\.pl
+https?:\/\/([^\/]*\.)?chiricdel\.fr-bb\.com
+https?:\/\/([^\/]*\.)?chitr\.discutforum\.com
+https?:\/\/([^\/]*\.)?chizelc\.goodforum\.net
+https?:\/\/([^\/]*\.)?chizelc\.grafbb\.com
+https?:\/\/([^\/]*\.)?chizelno\.cultureforum\.net
+https?:\/\/([^\/]*\.)?chkawai\.cn
+https?:\/\/([^\/]*\.)?chocolat-g4\.blogspot\.com
+https?:\/\/([^\/]*\.)?chocolate\.my10gb\.com
+https?:\/\/([^\/]*\.)?chongdianqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?chops-hg47n04tvi\.blogspot\.com
+https?:\/\/([^\/]*\.)?choudoufu\.com
+https?:\/\/([^\/]*\.)?chris-ks6u6dj\.blogspot\.com
+https?:\/\/([^\/]*\.)?chrissy-oyo8z\.blogspot\.com
+https?:\/\/([^\/]*\.)?christ-acczbi1t\.blogspot\.com
+https?:\/\/([^\/]*\.)?christen-bttdc0kn\.blogspot\.com
+https?:\/\/([^\/]*\.)?christeta\.com
+https?:\/\/([^\/]*\.)?christia-ccf2e6\.blogspot\.com
+https?:\/\/([^\/]*\.)?christiaan-dvb\.blogspot\.com
+https?:\/\/([^\/]*\.)?christianj-t3e1j3\.blogspot\.com
+https?:\/\/([^\/]*\.)?christin-ee1qjx\.blogspot\.com
+https?:\/\/([^\/]*\.)?christina-aguilera-pic\.blogspot\.com
+https?:\/\/([^\/]*\.)?christina-wf\.blogspot\.com
+https?:\/\/([^\/]*\.)?christine-rgosvndiqw\.blogspot\.com
+https?:\/\/([^\/]*\.)?christoffe-g4e\.blogspot\.com
+https?:\/\/([^\/]*\.)?christop-hqhff\.blogspot\.com
+https?:\/\/([^\/]*\.)?christy-kflb274n\.blogspot\.com
+https?:\/\/([^\/]*\.)?chrome-it8j\.blogspot\.com
+https?:\/\/([^\/]*\.)?chrykne\.info
+https?:\/\/([^\/]*\.)?chrystian-mgxw3jyfb1\.blogspot\.com
+https?:\/\/([^\/]*\.)?chuanganqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?chubby-bear-pic\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?chubby-chick\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?chubby-cum\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?chubby-teens-tus\.blogspot\.com
+https?:\/\/([^\/]*\.)?chuck-oh\.blogspot\.com
+https?:\/\/([^\/]*\.)?chucky-aklnscme\.blogspot\.com
+https?:\/\/([^\/]*\.)?chulyt\.com
+https?:\/\/([^\/]*\.)?church-b0w4\.blogspot\.com
+https?:\/\/([^\/]*\.)?chuvak-org\.blogspot\.com
+https?:\/\/([^\/]*\.)?chvpqa7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?chyna-c2\.blogspot\.com
+https?:\/\/([^\/]*\.)?ci-video-pornograficos-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?cialis-for-sale\.com
+https?:\/\/([^\/]*\.)?cialis-ok-1\.blogspot\.com
+https?:\/\/([^\/]*\.)?cialis-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?cialis-pharma\.tripod\.com
+https?:\/\/([^\/]*\.)?cialis-soft-tabs\.com
+https?:\/\/([^\/]*\.)?cialis\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?cialis\.esguay\.com
+https?:\/\/([^\/]*\.)?cialis\.fws1\.com
+https?:\/\/([^\/]*\.)?cialis\.goodpharm\.info
+https?:\/\/([^\/]*\.)?cialis\.page\.tl
+https?:\/\/([^\/]*\.)?cialis\.presteert\.nl
+https?:\/\/([^\/]*\.)?cialis\.rx4\.org
+https?:\/\/([^\/]*\.)?cialis\.seesaa\.net
+https?:\/\/([^\/]*\.)?cialis\.skocz\.net
+https?:\/\/([^\/]*\.)?cialises\.us\.tf
+https?:\/\/([^\/]*\.)?cialisjiq\.blogspot\.com
+https?:\/\/([^\/]*\.)?cialispills\.blog\.hr
+https?:\/\/([^\/]*\.)?cialisrx\.weboficial\.com
+https?:\/\/([^\/]*\.)?cialisx\.host-page\.com
+https?:\/\/([^\/]*\.)?ciara-d0\.blogspot\.com
+https?:\/\/([^\/]*\.)?cierra-t1f0hy\.blogspot\.com
+https?:\/\/([^\/]*\.)?cigar-ekelo\.blogspot\.com
+https?:\/\/([^\/]*\.)?cigarettes-smoking-online\.com
+https?:\/\/([^\/]*\.)?cigarettes\.4\.pl
+https?:\/\/([^\/]*\.)?cilmer\.com
+https?:\/\/([^\/]*\.)?cinast\.com
+https?:\/\/([^\/]*\.)?cincydj\.ifrance\.com
+https?:\/\/([^\/]*\.)?cinder-w6\.blogspot\.com
+https?:\/\/([^\/]*\.)?cindi-ruo8\.blogspot\.com
+https?:\/\/([^\/]*\.)?cindy-gdhs2i21u6\.blogspot\.com
+https?:\/\/([^\/]*\.)?cinem4\.com
+https?:\/\/([^\/]*\.)?cingularringtones\.269g\.net
+https?:\/\/([^\/]*\.)?ciplactin\.tlg\.pl
+https?:\/\/([^\/]*\.)?ciprobuy\.hop\.to
+https?:\/\/([^\/]*\.)?ciprobuycheap\.firstpage\.de
+https?:\/\/([^\/]*\.)?ciprobuygeneric\.move\.to
+https?:\/\/([^\/]*\.)?ciprocheap\.dive\.to
+https?:\/\/([^\/]*\.)?ciprofloxacin\.xwiki\.com
+https?:\/\/([^\/]*\.)?ciprogeneric\.i\.am
+https?:\/\/([^\/]*\.)?citdokcna\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?citeccit\.forumculture\.net
+https?:\/\/([^\/]*\.)?citpocit\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?civisi\.com
+https?:\/\/([^\/]*\.)?cixingcailiao\.dzsc\.com
+https?:\/\/([^\/]*\.)?cjhx6\.szm\.sk
+https?:\/\/([^\/]*\.)?ckalv\.szm\.sk
+https?:\/\/([^\/]*\.)?ckfhhw4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ckqabl1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?claca\.blogcu\.com
+https?:\/\/([^\/]*\.)?claire-k6kkha\.blogspot\.com
+https?:\/\/([^\/]*\.)?clancy-i1ib\.blogspot\.com
+https?:\/\/([^\/]*\.)?clara-mj6ts\.blogspot\.com
+https?:\/\/([^\/]*\.)?clarissa-o14r\.blogspot\.com
+https?:\/\/([^\/]*\.)?clark-asa0i3mfvr\.blogspot\.com
+https?:\/\/([^\/]*\.)?classic-porn-clip-zoneykt\.blogspot\.com
+https?:\/\/([^\/]*\.)?claude-blw\.blogspot\.com
+https?:\/\/([^\/]*\.)?claudia-c7ut8jj4\.blogspot\.com
+https?:\/\/([^\/]*\.)?clay-e-facial-mask-vitamin\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cleaner-ddiggwqy1t\.blogspot\.com
+https?:\/\/([^\/]*\.)?clearmp3\.net
+https?:\/\/([^\/]*\.)?clerk\.lir\.dk
+https?:\/\/([^\/]*\.)?cletoac\.lolbb\.com
+https?:\/\/([^\/]*\.)?cleveland-txjimr\.blogspot\.com
+https?:\/\/([^\/]*\.)?clickhere2\.net
+https?:\/\/([^\/]*\.)?clior\.graphforum\.com
+https?:\/\/([^\/]*\.)?clip-ebony-lesbian-porn\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?clip-ebony-porn\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?clip-free-hand-job-movie-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?clip-free-porn-psp-newsy66\.blogspot\.com
+https?:\/\/([^\/]*\.)?clip-hentai\.dreamsuit\.net
+https?:\/\/([^\/]*\.)?clip-hunter-porn-blogctv\.blogspot\.com
+https?:\/\/([^\/]*\.)?clip-hunter-porn-zone8y6\.blogspot\.com
+https?:\/\/([^\/]*\.)?clip-malay-porn-newsgrq\.blogspot\.com
+https?:\/\/([^\/]*\.)?clip-malay-porn-zone1w3\.blogspot\.com
+https?:\/\/([^\/]*\.)?clipgalaxy-com-i4z645\.blogspot\.com
+https?:\/\/([^\/]*\.)?clipgalaxy-com-io8ncz\.blogspot\.com
+https?:\/\/([^\/]*\.)?clipper-e2buyg\.blogspot\.com
+https?:\/\/([^\/]*\.)?clirol\.dl\.pl
+https?:\/\/([^\/]*\.)?clit-huge-real\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?cllivers\.dl\.pl
+https?:\/\/([^\/]*\.)?clobetasol-propionate\.tlg\.pl
+https?:\/\/([^\/]*\.)?cloclo-w046r\.blogspot\.com
+https?:\/\/([^\/]*\.)?clonazepam\.us\.tf
+https?:\/\/([^\/]*\.)?clonazepamscz\.blogspot\.com
+https?:\/\/([^\/]*\.)?clonazepamuej\.blogspot\.com
+https?:\/\/([^\/]*\.)?clonsex\.info
+https?:\/\/([^\/]*\.)?closeout-womens-rain-boot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?clothes-newborns\.loretic\.be
+https?:\/\/([^\/]*\.)?cloudydayshadow\.blogspot\.com
+https?:\/\/([^\/]*\.)?clover-rs04\.blogspot\.com
+https?:\/\/([^\/]*\.)?clowns-gloi\.blogspot\.com
+https?:\/\/([^\/]*\.)?clu\.cn
+https?:\/\/([^\/]*\.)?clumsy-hl0fwl1k\.blogspot\.com
+https?:\/\/([^\/]*\.)?cluster-k4ovd06ibi\.blogspot\.com
+https?:\/\/([^\/]*\.)?clwilbur\.ifrance\.com
+https?:\/\/([^\/]*\.)?clyaod2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cmauq\.com
+https?:\/\/([^\/]*\.)?cmnanwe\.com
+https?:\/\/([^\/]*\.)?cmsrt\.szm\.sk
+https?:\/\/([^\/]*\.)?cmubroadway\.blogspot\.com
+https?:\/\/([^\/]*\.)?cnaalget\.graphforum\.com
+https?:\/\/([^\/]*\.)?cnaalget\.highforum\.net
+https?:\/\/([^\/]*\.)?cnac4t-or\.bbgraf\.com
+https?:\/\/([^\/]*\.)?cnadel6or6\.dl\.pl
+https?:\/\/([^\/]*\.)?cnaeltbo\.discutforum\.com
+https?:\/\/([^\/]*\.)?cnaeltdron\.bb-fr\.com
+https?:\/\/([^\/]*\.)?cnapasou\.graphforum\.com
+https?:\/\/([^\/]*\.)?cnatral\.xa\.pl
+https?:\/\/([^\/]*\.)?cnbess\.com
+https?:\/\/([^\/]*\.)?cnbf2\.szm\.sk
+https?:\/\/([^\/]*\.)?cncarcenter\.com
+https?:\/\/([^\/]*\.)?cnfibernet\.com\.cn
+https?:\/\/([^\/]*\.)?cnmarketingresearch\.com
+https?:\/\/([^\/]*\.)?cnplayhome\.cn
+https?:\/\/([^\/]*\.)?cnticket\.net
+https?:\/\/([^\/]*\.)?co-alf\.blogspot\.com
+https?:\/\/([^\/]*\.)?co-video-de-sexo-gratis-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?co6or6bo\.dl\.pl
+https?:\/\/([^\/]*\.)?coacdar\.bbfr\.net
+https?:\/\/([^\/]*\.)?coachescorner\.com
+https?:\/\/([^\/]*\.)?cock-and-ball-punishment\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cock-deep-huge-throat\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cock-love-teen\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?cock-petite-sucker\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?cock-roaches-picture\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?cock-sexy-sucker\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?cock-story-sucker\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cocnacna\.dl\.pl
+https?:\/\/([^\/]*\.)?cocoel\.lightbb\.com
+https?:\/\/([^\/]*\.)?coconel\.frbb\.net
+https?:\/\/([^\/]*\.)?codarget\.dl\.pl
+https?:\/\/([^\/]*\.)?codigodor\.blogspot\.com
+https?:\/\/([^\/]*\.)?coiqen\.com
+https?:\/\/([^\/]*\.)?cold-hard-bitch-lyric\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?college-fucking-video-free\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?college1-degree\.boom\.ru
+https?:\/\/([^\/]*\.)?college1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?college1degree1p\.chat\.ru
+https?:\/\/([^\/]*\.)?colodom\.frbb\.net
+https?:\/\/([^\/]*\.)?colorado\.edu
+https?:\/\/([^\/]*\.)?coloradomortgage-x\.com
+https?:\/\/([^\/]*\.)?com-dick-fick-n-suck\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?comic-fetish-info-remember\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?comic-hardcore-info-remember-sex\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?comicvmarriage\.spycams777\.com
+https?:\/\/([^\/]*\.)?commercialleaseonline\.info
+https?:\/\/([^\/]*\.)?communicationagency\.com
+https?:\/\/([^\/]*\.)?comontr\.bb-fr\.com
+https?:\/\/([^\/]*\.)?companyforyou\.com
+https?:\/\/([^\/]*\.)?competitio\.ifrance\.com
+https?:\/\/([^\/]*\.)?computer-desk\.fromru\.com
+https?:\/\/([^\/]*\.)?computer1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?computerxchange\.com
+https?:\/\/([^\/]*\.)?comradealtmer\.blogspot\.com
+https?:\/\/([^\/]*\.)?condition-skin\.newmail\.ru
+https?:\/\/([^\/]*\.)?condition_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?condom-delivered-free-free-uk\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?condom-picture-penis\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?connecticutmortgage-x\.com
+https?:\/\/([^\/]*\.)?conor2k\.007webpro\.com
+https?:\/\/([^\/]*\.)?consistmay\.tripod\.com
+https?:\/\/([^\/]*\.)?consolidation-loan-studentqdl\.blogspot\.com
+https?:\/\/([^\/]*\.)?consultanthub\.com
+https?:\/\/([^\/]*\.)?cooking-crazy\.com
+https?:\/\/([^\/]*\.)?cool-mp3\.biz
+https?:\/\/([^\/]*\.)?coolhost\.biz
+https?:\/\/([^\/]*\.)?copasleto\.zj\.pl
+https?:\/\/([^\/]*\.)?copyok\.net
+https?:\/\/([^\/]*\.)?coricidin\.tlg\.pl
+https?:\/\/([^\/]*\.)?cornut\.ipupdater\.com
+https?:\/\/([^\/]*\.)?coro-aaliyah\.blogspot\.com
+https?:\/\/([^\/]*\.)?corporategifts-guide\.com
+https?:\/\/([^\/]*\.)?corsv\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?cortech\.cn
+https?:\/\/([^\/]*\.)?cositbo\.bbgraf\.com
+https?:\/\/([^\/]*\.)?cosmiboe\.forumzen\.com
+https?:\/\/([^\/]*\.)?cosmicray\.umd\.edu
+https?:\/\/([^\/]*\.)?coswishe\.dl\.pl
+https?:\/\/([^\/]*\.)?cotton-gloves\.loretic\.be
+https?:\/\/([^\/]*\.)?counciloflight\.com
+https?:\/\/([^\/]*\.)?couple-fucking-photo\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?couple-kissing-pic\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?couponmountain\.com
+https?:\/\/([^\/]*\.)?courses\.csusm\.edu
+https?:\/\/([^\/]*\.)?courtinfroggie\.blogspot\.com
+https?:\/\/([^\/]*\.)?covarou\.su\.pl
+https?:\/\/([^\/]*\.)?cowei\.net
+https?:\/\/([^\/]*\.)?cowlist-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?cozaar\.4\.pl
+https?:\/\/([^\/]*\.)?cozaarbuy\.hello\.to
+https?:\/\/([^\/]*\.)?cozaarcheap\.mysite\.de
+https?:\/\/([^\/]*\.)?cozaarcheapgeneric\.warp9\.to
+https?:\/\/([^\/]*\.)?cozaargeneric\.everything\.at
+https?:\/\/([^\/]*\.)?cozaargenericcheap\.dive\.to
+https?:\/\/([^\/]*\.)?cpayscom\.xwiki\.com
+https?:\/\/([^\/]*\.)?cpkna\.szm\.sk
+https?:\/\/([^\/]*\.)?cpsyy\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?cpyngke\.com
+https?:\/\/([^\/]*\.)?cqbhn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cqfmz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cqjbjx1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cr4ix7\.com
+https?:\/\/([^\/]*\.)?crabs\.isgre\.at
+https?:\/\/([^\/]*\.)?cramp-hand-leg\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?crashdome\.info
+https?:\/\/([^\/]*\.)?crazyvirgin\.info
+https?:\/\/([^\/]*\.)?crbackus\.dl\.pl
+https?:\/\/([^\/]*\.)?crcather\.dl\.pl
+https?:\/\/([^\/]*\.)?cream-facial-pie\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cream-hairy-mature-movie-pie-pussy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?creampie\.coz\.in
+https?:\/\/([^\/]*\.)?creating-a-boot-cd\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?credit-dreams\.com
+https?:\/\/([^\/]*\.)?creditcards-x\.com
+https?:\/\/([^\/]*\.)?credoninc\.com
+https?:\/\/([^\/]*\.)?crestor-rx\.one2you\.info
+https?:\/\/([^\/]*\.)?crestor\.dynalias\.net
+https?:\/\/([^\/]*\.)?criminal-j-degre\.boom\.ru
+https?:\/\/([^\/]*\.)?crimson-teens\.freeinsite\.net
+https?:\/\/([^\/]*\.)?cristal-fenix\.isuisse\.com
+https?:\/\/([^\/]*\.)?crookedscud\.myfreewebs\.net
+https?:\/\/([^\/]*\.)?crossed-leg-gallery\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?crossed-leg-short-skirt-stocking-top\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?crrenee\.dl\.pl
+https?:\/\/([^\/]*\.)?crsundke\.dl\.pl
+https?:\/\/([^\/]*\.)?cruise-guide\.org
+https?:\/\/([^\/]*\.)?cruise-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?crzvh\.szm\.sk
+https?:\/\/([^\/]*\.)?cscla\.net
+https?:\/\/([^\/]*\.)?cscserver\.cc\.edu
+https?:\/\/([^\/]*\.)?csitdom\.bbgraf\.com
+https?:\/\/([^\/]*\.)?csmwui11\.com
+https?:\/\/([^\/]*\.)?csosandbox\.clemson\.edu
+https?:\/\/([^\/]*\.)?ctdq0\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ctl\.csudh\.edu
+https?:\/\/([^\/]*\.)?ctusxc4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?cubaka\.yi\.org
+https?:\/\/([^\/]*\.)?cufgq\.szm\.sk
+https?:\/\/([^\/]*\.)?cuicui\.monblog\.ch
+https?:\/\/([^\/]*\.)?cuiugcg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?culinary-school\.newmail\.ru
+https?:\/\/([^\/]*\.)?culinary1school\.chat\.ru
+https?:\/\/([^\/]*\.)?cum-drenched-pantie\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-drink-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-dvd-face-private-private-rip-vcd\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?cum-ebony-face\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?cum-face-asian\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?cum-face-pic\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-face-picture\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-facial-messy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?cum-facial-video-free-clip\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cum-filled-pussy-picture\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-kiss-lick-shoes-suck-worship\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cum-mouth-ebony\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cum-nurse-sex-shot\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?cum-se-face-sex\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?cum-shot-movie\.dreamsuit\.net
+https?:\/\/([^\/]*\.)?cum-swallow-vids\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?cuola\.goodforum\.net
+https?:\/\/([^\/]*\.)?cut-xmeup-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?cute-ebony-girl\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?cute-girldzy\.blogspot\.com
+https?:\/\/([^\/]*\.)?cutgetolo\.zikforum\.com
+https?:\/\/([^\/]*\.)?cutvili\.winnerforum\.net
+https?:\/\/([^\/]*\.)?cvep2\.szm\.sk
+https?:\/\/([^\/]*\.)?cvipm\.com
+https?:\/\/([^\/]*\.)?cxolt\.szm\.sk
+https?:\/\/([^\/]*\.)?cyberlinx\.us
+https?:\/\/([^\/]*\.)?cycleworldsuzuki\.info
+https?:\/\/([^\/]*\.)?cyclobenzaprine\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?cysrf\.szm\.sk
+https?:\/\/([^\/]*\.)?cytonrok\.forumculture\.net
+https?:\/\/([^\/]*\.)?czelvar\.su\.pl
+https?:\/\/([^\/]*\.)?czis0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?d-z-free-lesbian-movie-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?daddy-bear-gay\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?daddy-long-leg-venom\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?daily-porn-clip-news0we\.blogspot\.com
+https?:\/\/([^\/]*\.)?dailybasis-com-cky8ax\.blogspot\.com
+https?:\/\/([^\/]*\.)?dami3\.com
+https?:\/\/([^\/]*\.)?danazol\.4\.pl
+https?:\/\/([^\/]*\.)?dance-instruction\.lkerfocu\.be
+https?:\/\/([^\/]*\.)?danga4ka\.blogspot\.com
+https?:\/\/([^\/]*\.)?dansmovies-com-mu2ywho24d\.blogspot\.com
+https?:\/\/([^\/]*\.)?daractr\.goodbb\.net
+https?:\/\/([^\/]*\.)?darboboc\.dl\.pl
+https?:\/\/([^\/]*\.)?darboctroc\.dl\.pl
+https?:\/\/([^\/]*\.)?darcnaec\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?darcoca\.dl\.pl
+https?:\/\/([^\/]*\.)?dardomcna\.blogcu\.com
+https?:\/\/([^\/]*\.)?dardomdom\.darkbb\.com
+https?:\/\/([^\/]*\.)?dardomzel\.blogcu\.com
+https?:\/\/([^\/]*\.)?dare-poker\.com
+https?:\/\/([^\/]*\.)?darelttr\.dl\.pl
+https?:\/\/([^\/]*\.)?dargetou\.darkbb\.com
+https?:\/\/([^\/]*\.)?darladom\.td\.pl
+https?:\/\/([^\/]*\.)?darlala\.winnerforum\.net
+https?:\/\/([^\/]*\.)?darlina-a1vds\.blogspot\.com
+https?:\/\/([^\/]*\.)?darlina-akp4\.blogspot\.com
+https?:\/\/([^\/]*\.)?darlina-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?darlina-tcifizmx\.blogspot\.com
+https?:\/\/([^\/]*\.)?darmonrol\.zj\.pl
+https?:\/\/([^\/]*\.)?darricer\.fr-bb\.com
+https?:\/\/([^\/]*\.)?darzeltroc\.dl\.pl
+https?:\/\/([^\/]*\.)?dasepluv\.dl\.pl
+https?:\/\/([^\/]*\.)?dashulya\.blogspot\.com
+https?:\/\/([^\/]*\.)?dastino\.republika\.pl
+https?:\/\/([^\/]*\.)?data-mining\.massioni\.be
+https?:\/\/([^\/]*\.)?datangid\.com
+https?:\/\/([^\/]*\.)?datasol\.org
+https?:\/\/([^\/]*\.)?dating-advice\.sexnation\.info
+https?:\/\/([^\/]*\.)?dating-direct\.sexnation\.info
+https?:\/\/([^\/]*\.)?dating\.sexnation\.info
+https?:\/\/([^\/]*\.)?dave-hollister-ringtoneezm\.blogspot\.com
+https?:\/\/([^\/]*\.)?dave-hollister-ringtonefoi\.blogspot\.com
+https?:\/\/([^\/]*\.)?dave-hollister-ringtonewqs\.blogspot\.com
+https?:\/\/([^\/]*\.)?davejackson\.com
+https?:\/\/([^\/]*\.)?davte\.info
+https?:\/\/([^\/]*\.)?dawsonanddadrealty\.com
+https?:\/\/([^\/]*\.)?dayzve4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dbxbqb7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dc-escort-gay\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?dcuoo\.szm\.sk
+https?:\/\/([^\/]*\.)?dcx\.org\.ua
+https?:\/\/([^\/]*\.)?ddfz1\.szm\.sk
+https?:\/\/([^\/]*\.)?ddlive\.info
+https?:\/\/([^\/]*\.)?ddovj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ddpb6\.szm\.sk
+https?:\/\/([^\/]*\.)?de-foto-gay-gratis-negros\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?dead-sea-product\.com
+https?:\/\/([^\/]*\.)?deadsex\.info
+https?:\/\/([^\/]*\.)?deadums\.blogspot\.com
+https?:\/\/([^\/]*\.)?debk6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?debt-consolidation-care\.com
+https?:\/\/([^\/]*\.)?debt-consolidation\.dd\.vg
+https?:\/\/([^\/]*\.)?debtconsolidation-today\.com
+https?:\/\/([^\/]*\.)?deepthroat\.coz\.in
+https?:\/\/([^\/]*\.)?deerdeji\.forumzen\.com
+https?:\/\/([^\/]*\.)?defacialize-com-td32\.blogspot\.com
+https?:\/\/([^\/]*\.)?defi-adrian\.blogspot\.com
+https?:\/\/([^\/]*\.)?degree-program\.hotmail\.ru
+https?:\/\/([^\/]*\.)?degree2program\.chat\.ru
+https?:\/\/([^\/]*\.)?dejablu503\.50webs\.org
+https?:\/\/([^\/]*\.)?dela88\.com
+https?:\/\/([^\/]*\.)?delacmon\.discutforum\.com
+https?:\/\/([^\/]*\.)?delawaremortgage-x\.com
+https?:\/\/([^\/]*\.)?delbocer\.dl\.pl
+https?:\/\/([^\/]*\.)?delcnacna\.lolbb\.com
+https?:\/\/([^\/]*\.)?delletopas\.su\.pl
+https?:\/\/([^\/]*\.)?delliric\.dl\.pl
+https?:\/\/([^\/]*\.)?delordel\.blogcu\.com
+https?:\/\/([^\/]*\.)?delricchi\.goodforum\.net
+https?:\/\/([^\/]*\.)?delricchi\.grafbb\.com
+https?:\/\/([^\/]*\.)?delricou\.dl\.pl
+https?:\/\/([^\/]*\.)?delserch\.com
+https?:\/\/([^\/]*\.)?deltasone\.4\.pl
+https?:\/\/([^\/]*\.)?deltnecca\.goodbb\.net
+https?:\/\/([^\/]*\.)?delzelleto\.dl\.pl
+https?:\/\/([^\/]*\.)?demingpower\.com
+https?:\/\/([^\/]*\.)?denocel\.blogcu\.com
+https?:\/\/([^\/]*\.)?dental-guide\.org
+https?:\/\/([^\/]*\.)?dental\.gulfcoast\.edu
+https?:\/\/([^\/]*\.)?dentalplans-x\.com
+https?:\/\/([^\/]*\.)?deomnoou\.jconserv\.net
+https?:\/\/([^\/]*\.)?depamu\.com
+https?:\/\/([^\/]*\.)?depstore\.milan\.jp
+https?:\/\/([^\/]*\.)?derast\.com
+https?:\/\/([^\/]*\.)?derimc\.com
+https?:\/\/([^\/]*\.)?description\.hostonmars\.com
+https?:\/\/([^\/]*\.)?desent\.8tt\.org
+https?:\/\/([^\/]*\.)?design4italy\.org
+https?:\/\/([^\/]*\.)?designatchina\.com
+https?:\/\/([^\/]*\.)?designer-purses\.blogspot\.com
+https?:\/\/([^\/]*\.)?desk-teen-d\.blogspot\.com
+https?:\/\/([^\/]*\.)?desyrel\.4\.pl
+https?:\/\/([^\/]*\.)?detriot\.dtdns\.net
+https?:\/\/([^\/]*\.)?deutschland-heute\.de\.tl
+https?:\/\/([^\/]*\.)?devine-friend-hot-mom\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?dewall\.info
+https?:\/\/([^\/]*\.)?dg\.188info\.com
+https?:\/\/([^\/]*\.)?dgvy5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dial3\.szm\.sk
+https?:\/\/([^\/]*\.)?diamond73\.50webs\.com
+https?:\/\/([^\/]*\.)?dianchi\.dzsc\.com
+https?:\/\/([^\/]*\.)?diandongji\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianganqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianluban\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianre\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianrong\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianweiqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianyuan\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianziguan\.dzsc\.com
+https?:\/\/([^\/]*\.)?dianzu\.dzsc\.com
+https?:\/\/([^\/]*\.)?diazepam\.47\.pl
+https?:\/\/([^\/]*\.)?diazepam\.skocz\.net
+https?:\/\/([^\/]*\.)?diazepam2\.forospace\.com
+https?:\/\/([^\/]*\.)?diazepams\.ru\.tf
+https?:\/\/([^\/]*\.)?dick-butkus-football-player\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?dick-donkey-sucking-woman\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?dick-fat-in-pussy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?dick-head-john-kerry\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?dick-hot-man-video\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?dicks-sporting-goods-web-site\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?didrex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?didrex\.int\.tf
+https?:\/\/([^\/]*\.)?diebart\.asp2\.cz
+https?:\/\/([^\/]*\.)?diesite\.com
+https?:\/\/([^\/]*\.)?diet-pills-phentermine-pill-buy-cheap-online\.com
+https?:\/\/([^\/]*\.)?diet-pills911\.com
+https?:\/\/([^\/]*\.)?diffusersudan\.org
+https?:\/\/([^\/]*\.)?diflucanbuycheap\.top\.ms
+https?:\/\/([^\/]*\.)?diflucancheapbuy\.drop\.to
+https?:\/\/([^\/]*\.)?diflucancheapgeneric\.notrix\.net
+https?:\/\/([^\/]*\.)?diflucangeneric\.hey\.to
+https?:\/\/([^\/]*\.)?diflucangenericbuy\.hp\.ms
+https?:\/\/([^\/]*\.)?digilander\.libero\.it
+https?:\/\/([^\/]*\.)?digital-glamour\.com
+https?:\/\/([^\/]*\.)?digitalpoimt\.com
+https?:\/\/([^\/]*\.)?dildo-extreme-free-movie\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?dildo-in-guys-ass\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?dilhbi7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dionysios-r\.blogspot\.com
+https?:\/\/([^\/]*\.)?dir\.opank\.com
+https?:\/\/([^\/]*\.)?dirare\.com
+https?:\/\/([^\/]*\.)?directonlineguide\.com
+https?:\/\/([^\/]*\.)?dirty-blonde-teen\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?dirty-ru-lenta\.blogspot\.com
+https?:\/\/([^\/]*\.)?dirtyrhino-com-iy5ps48s\.blogspot\.com
+https?:\/\/([^\/]*\.)?dirtyrhino-com-rjrotse3\.blogspot\.com
+https?:\/\/([^\/]*\.)?discasegeta\.0moola\.com
+https?:\/\/([^\/]*\.)?discontinued-chanel-lipstick\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?discount-femina-lingerie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?discount-phentermine\.health-livening\.com
+https?:\/\/([^\/]*\.)?discount-phentermine\.presteert\.nl
+https?:\/\/([^\/]*\.)?discounted-medications\.com
+https?:\/\/([^\/]*\.)?discountphentermine\.livelog\.com
+https?:\/\/([^\/]*\.)?discussions\.csbsju\.edu
+https?:\/\/([^\/]*\.)?dissected-voice\.blogspot\.com
+https?:\/\/([^\/]*\.)?diuvw\.szm\.sk
+https?:\/\/([^\/]*\.)?diva-58\.site\.voila\.fr
+https?:\/\/([^\/]*\.)?divtab\.com
+https?:\/\/([^\/]*\.)?dixe-alayna\.blogspot\.com
+https?:\/\/([^\/]*\.)?dixiecuties-com-av\.blogspot\.com
+https?:\/\/([^\/]*\.)?dixiecuties-com-wpf1g2a\.blogspot\.com
+https?:\/\/([^\/]*\.)?dka2e\.nokedem\.com
+https?:\/\/([^\/]*\.)?dlaners\.blogspot\.com
+https?:\/\/([^\/]*\.)?dljs5\.szm\.sk
+https?:\/\/([^\/]*\.)?dltz4\.szm\.sk
+https?:\/\/([^\/]*\.)?dlwlh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dlzgn\.szm\.sk
+https?:\/\/([^\/]*\.)?dm-cqsf\.cn
+https?:\/\/([^\/]*\.)?dm-soft\.com
+https?:\/\/([^\/]*\.)?dmnft\.net
+https?:\/\/([^\/]*\.)?dnk-design\.com
+https?:\/\/([^\/]*\.)?do-ali\.blogspot\.com
+https?:\/\/([^\/]*\.)?do-hot-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?doctorpinkerton\.ifrance\.com
+https?:\/\/([^\/]*\.)?doenertreff\.de
+https?:\/\/([^\/]*\.)?dogdead\.50webs\.com
+https?:\/\/([^\/]*\.)?dogider-big-tit-round-a-p\.blogspot\.com
+https?:\/\/([^\/]*\.)?dogzilla30\.blogspot\.com
+https?:\/\/([^\/]*\.)?dohr\.joolo\.com
+https?:\/\/([^\/]*\.)?dokrichi\.forumculture\.net
+https?:\/\/([^\/]*\.)?dokuno-porn-clip\.blogspot\.com
+https?:\/\/([^\/]*\.)?dollmovies-com-e7lqyhq\.blogspot\.com
+https?:\/\/([^\/]*\.)?dom-or-dron\.jc\.pl
+https?:\/\/([^\/]*\.)?domdronno\.xa\.pl
+https?:\/\/([^\/]*\.)?dome-ebony-foot-herbies\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?domelc4t\.dl\.pl
+https?:\/\/([^\/]*\.)?domest1co\.info
+https?:\/\/([^\/]*\.)?domestic0\.info
+https?:\/\/([^\/]*\.)?domnoor\.blogcu\.com
+https?:\/\/([^\/]*\.)?domorca\.darkbb\.com
+https?:\/\/([^\/]*\.)?dompasvi\.alkablog\.com
+https?:\/\/([^\/]*\.)?domrelou\.discutfree\.com
+https?:\/\/([^\/]*\.)?domtadom\.blogcu\.com
+https?:\/\/([^\/]*\.)?domtael\.dl\.pl
+https?:\/\/([^\/]*\.)?don-search\.com
+https?:\/\/([^\/]*\.)?dong-sheng\.com
+https?:\/\/([^\/]*\.)?dono-alaska\.blogspot\.com
+https?:\/\/([^\/]*\.)?doodlepets\.net
+https?:\/\/([^\/]*\.)?doormat\.ncedly\.be
+https?:\/\/([^\/]*\.)?dorank\.com
+https?:\/\/([^\/]*\.)?dorintop\.9999mb\.com
+https?:\/\/([^\/]*\.)?dotbusinessbroker\.info
+https?:\/\/([^\/]*\.)?dottorstranamore\.com
+https?:\/\/([^\/]*\.)?dotwirelessinternet\.info
+https?:\/\/([^\/]*\.)?double-anal-insertion\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?doubledrilled-com-ru\.blogspot\.com
+https?:\/\/([^\/]*\.)?douglasgenetic\.org
+https?:\/\/([^\/]*\.)?download-fisting-free-movie-pussy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?download-free-porn-clip-zone186\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-porn-movie-bb-bb-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-ringtonebso\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-ringtonekdw\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-ringtonekfb\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-ringtoneoug\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-free-ringtonesasd\.blogspot\.com
+https?:\/\/([^\/]*\.)?download-ringtonevnr\.blogspot\.com
+https?:\/\/([^\/]*\.)?downloadfreeringtonengp\.blogspot\.com
+https?:\/\/([^\/]*\.)?downsms\.blogbus\.com
+https?:\/\/([^\/]*\.)?dpfanatics-com-t7nqv\.blogspot\.com
+https?:\/\/([^\/]*\.)?dqezl\.szm\.sk
+https?:\/\/([^\/]*\.)?draghi\.ll11\.info
+https?:\/\/([^\/]*\.)?dragonballxxx-gratis\.19mb\.info
+https?:\/\/([^\/]*\.)?dragonmovies-dd2bm5sn\.blogspot\.com
+https?:\/\/([^\/]*\.)?dragonmovies-rwng8vm7j\.blogspot\.com
+https?:\/\/([^\/]*\.)?drbizzaro-com-r5\.blogspot\.com
+https?:\/\/([^\/]*\.)?drdos\.50webs\.org
+https?:\/\/([^\/]*\.)?dreamathk\.com
+https?:\/\/([^\/]*\.)?dreamatsh\.com
+https?:\/\/([^\/]*\.)?dreamhk\.org
+https?:\/\/([^\/]*\.)?dress-jacket\.haemati\.be
+https?:\/\/([^\/]*\.)?drithle\.com
+https?:\/\/([^\/]*\.)?driving-school\.hotmail\.ru
+https?:\/\/([^\/]*\.)?driving2school\.chat\.ru
+https?:\/\/([^\/]*\.)?dronaceldar\.darkbb\.com
+https?:\/\/([^\/]*\.)?dronc4tta\.blogcu\.com
+https?:\/\/([^\/]*\.)?droncaca\.blogcu\.com
+https?:\/\/([^\/]*\.)?dronchitr\.blogcu\.com
+https?:\/\/([^\/]*\.)?drondomrac\.bb-fr\.com
+https?:\/\/([^\/]*\.)?drondrontr\.zikforum\.com
+https?:\/\/([^\/]*\.)?dronladar\.discutfree\.com
+https?:\/\/([^\/]*\.)?dronladar\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?dronrelco\.td\.pl
+https?:\/\/([^\/]*\.)?drownedmagenta\.50webs\.org
+https?:\/\/([^\/]*\.)?drug\.prtime\.ru
+https?:\/\/([^\/]*\.)?drunkgirls\.coz\.in
+https?:\/\/([^\/]*\.)?dry-skin\.boom\.ru
+https?:\/\/([^\/]*\.)?dry1skin\.chat\.ru
+https?:\/\/([^\/]*\.)?dscw0\.szm\.sk
+https?:\/\/([^\/]*\.)?dtmpdpxmsu-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?du-alice\.blogspot\.com
+https?:\/\/([^\/]*\.)?duaroti\.50webs\.com
+https?:\/\/([^\/]*\.)?dub-dom-adu\.blogspot\.com
+https?:\/\/([^\/]*\.)?duckyporn-ifl4u28p\.blogspot\.com
+https?:\/\/([^\/]*\.)?ducpjo3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dudoctor\.com
+https?:\/\/([^\/]*\.)?dudubilz\.dl\.pl
+https?:\/\/([^\/]*\.)?dumtrric\.forumzen\.com
+https?:\/\/([^\/]*\.)?duncemoney\.com
+https?:\/\/([^\/]*\.)?dunham-hiking-boot\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?dup-xxxfolder-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?dupiwu\.com
+https?:\/\/([^\/]*\.)?duptv\.szm\.sk
+https?:\/\/([^\/]*\.)?dushen\.net\.cn
+https?:\/\/([^\/]*\.)?dusts\.info
+https?:\/\/([^\/]*\.)?dutbm\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?duxbd\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?duxfhgz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dvd-vergini-economici-r\.host24h\.info
+https?:\/\/([^\/]*\.)?dvdunwritten\.toplog\.nl
+https?:\/\/([^\/]*\.)?dwaeaz-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?dwsyv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?dxjyb\.szm\.sk
+https?:\/\/([^\/]*\.)?dykzozqlpt-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?dzb\.com\.cn
+https?:\/\/([^\/]*\.)?dzgzm\.cn
+https?:\/\/([^\/]*\.)?dzjp\.left-page\.com
+https?:\/\/([^\/]*\.)?dzjp\.zxvo\.com
+https?:\/\/([^\/]*\.)?dzsb\.com
+https?:\/\/([^\/]*\.)?dzsc\.com
+https?:\/\/([^\/]*\.)?e-dishnetworks\.com
+https?:\/\/([^\/]*\.)?e-fanyi\.org
+https?:\/\/([^\/]*\.)?e-holdem\.net
+https?:\/\/([^\/]*\.)?e\.kth\.se
+https?:\/\/([^\/]*\.)?e16\.info
+https?:\/\/([^\/]*\.)?e93\.iitalia\.com
+https?:\/\/([^\/]*\.)?eaby2\.szm\.sk
+https?:\/\/([^\/]*\.)?eacome\.com
+https?:\/\/([^\/]*\.)?eafg6\.szm\.sk
+https?:\/\/([^\/]*\.)?eaglechief\.com
+https?:\/\/([^\/]*\.)?eamon-fuck-it-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?eappf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?earticlesonline\.com
+https?:\/\/([^\/]*\.)?easy-furniture\.org
+https?:\/\/([^\/]*\.)?easygals-com-h4\.blogspot\.com
+https?:\/\/([^\/]*\.)?easypic-com-if7pnmrbxd\.blogspot\.com
+https?:\/\/([^\/]*\.)?easypornstars-com-b8k4y\.blogspot\.com
+https?:\/\/([^\/]*\.)?easypornstars-com-subut\.blogspot\.com
+https?:\/\/([^\/]*\.)?easysail\.net\.cn
+https?:\/\/([^\/]*\.)?eating-free-lesbian-pussy\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?eating-lesbian-pussy\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?ebackground-checks\.com
+https?:\/\/([^\/]*\.)?ebdoc\.com
+https?:\/\/([^\/]*\.)?ebnjj\.info
+https?:\/\/([^\/]*\.)?ebony-free-woman\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ebony-fuck-tit\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ebony-horny-hot-woman\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?ebony-hot-outdoor\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?ebony-info-photo-remember-sexy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?ebony-info-remember-tit\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?ebony-party-sex\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ebony-porn-trailer\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?ebony-sex-com\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?ebony-teen-pic\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?ebony-teen-tgp\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?ebonyblack-net-gf\.blogspot\.com
+https?:\/\/([^\/]*\.)?ebonyblack-net-m3dy7kn\.blogspot\.com
+https?:\/\/([^\/]*\.)?ebonybooty\.wehostporno\.com
+https?:\/\/([^\/]*\.)?ebusiness-cards\.org
+https?:\/\/([^\/]*\.)?ecar-rentals\.com
+https?:\/\/([^\/]*\.)?eccellente\.info
+https?:\/\/([^\/]*\.)?ececu\.com
+https?:\/\/([^\/]*\.)?echayka\.com
+https?:\/\/([^\/]*\.)?eclexion\.net
+https?:\/\/([^\/]*\.)?eclissi-di-luna\.host24h\.info
+https?:\/\/([^\/]*\.)?ecomm1\.csug\.rochester\.edu
+https?:\/\/([^\/]*\.)?econtact-lens\.com
+https?:\/\/([^\/]*\.)?ed2k\.net\.ua
+https?:\/\/([^\/]*\.)?edasim\.com
+https?:\/\/([^\/]*\.)?eddiereva\.com
+https?:\/\/([^\/]*\.)?edetrali\.jconserv\.net
+https?:\/\/([^\/]*\.)?edomerna\.jconserv\.net
+https?:\/\/([^\/]*\.)?edonline\.ua\.edu
+https?:\/\/([^\/]*\.)?edqlzct\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?education\.beta\.edgewood\.edu
+https?:\/\/([^\/]*\.)?education\.uncc\.edu
+https?:\/\/([^\/]*\.)?education1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?ee3\.be
+https?:\/\/([^\/]*\.)?eelive\.info
+https?:\/\/([^\/]*\.)?eenxn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ees\.ufl\.edu
+https?:\/\/([^\/]*\.)?eesg8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?eeshq\.com
+https?:\/\/([^\/]*\.)?eetop\.info
+https?:\/\/([^\/]*\.)?eevjgn7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?effexor-xr\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?effexor\.b0ne\.com
+https?:\/\/([^\/]*\.)?egciz\.szm\.sk
+https?:\/\/([^\/]*\.)?egnadn-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?egnpgno\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?egoldhyip\.athost\.net
+https?:\/\/([^\/]*\.)?egoldhyip\.sitesfree\.com
+https?:\/\/([^\/]*\.)?egunteronline\.com
+https?:\/\/([^\/]*\.)?eightalya\.blogspot\.com
+https?:\/\/([^\/]*\.)?eighty-8088\.blogspot\.com
+https?:\/\/([^\/]*\.)?eijy7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ejeesf2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ejreoonster\.blogspot\.com
+https?:\/\/([^\/]*\.)?ejvyd\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ejyt9\.szm\.sk
+https?:\/\/([^\/]*\.)?ekajl\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ekjms\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ekttsaj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ekviceaia\.blogspot\.com
+https?:\/\/([^\/]*\.)?ekxkfyz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?el-ladies-com-m4ayb\.blogspot\.com
+https?:\/\/([^\/]*\.)?elacelal\.informe\.com
+https?:\/\/([^\/]*\.)?elbasbo\.dl\.pl
+https?:\/\/([^\/]*\.)?elbocboc\.bbgraf\.com
+https?:\/\/([^\/]*\.)?elbows-at\.blogspot\.com
+https?:\/\/([^\/]*\.)?elbtoy\.realpornstar\.net
+https?:\/\/([^\/]*\.)?elcnaac\.cultureforum\.net
+https?:\/\/([^\/]*\.)?electric-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?electric1scooter\.chat\.ru
+https?:\/\/([^\/]*\.)?electricscooterland\.com
+https?:\/\/([^\/]*\.)?elephantlist-com-hozhkwuac6\.blogspot\.com
+https?:\/\/([^\/]*\.)?elephantlist-com-kedi0pfbp\.blogspot\.com
+https?:\/\/([^\/]*\.)?elerc4t\.blogcu\.com
+https?:\/\/([^\/]*\.)?eleven-heaven0a\.blogspot\.com
+https?:\/\/([^\/]*\.)?elevtenl\.blogspot\.com
+https?:\/\/([^\/]*\.)?elishacuthbertfansite\.com
+https?:\/\/([^\/]*\.)?eliteclips-com-c0hwm3fji\.blogspot\.com
+https?:\/\/([^\/]*\.)?eliteclips-com-k5hkm6yi\.blogspot\.com
+https?:\/\/([^\/]*\.)?eliteclips-com-kzjz30a5k4\.blogspot\.com
+https?:\/\/([^\/]*\.)?elixirium\.ifrance\.com
+https?:\/\/([^\/]*\.)?eloloac\.bbgraf\.com
+https?:\/\/([^\/]*\.)?eloudar\.discutforum\.com
+https?:\/\/([^\/]*\.)?elovejob\.info
+https?:\/\/([^\/]*\.)?elpos\.szm\.sk
+https?:\/\/([^\/]*\.)?eltalchi\.bbfr\.net
+https?:\/\/([^\/]*\.)?eltalli\.zj\.pl
+https?:\/\/([^\/]*\.)?eltbuzel\.forumzen\.com
+https?:\/\/([^\/]*\.)?eltcer\.winnerforum\.net
+https?:\/\/([^\/]*\.)?eltgetric\.uy\.pl
+https?:\/\/([^\/]*\.)?eltrelboc\.bbfr\.net
+https?:\/\/([^\/]*\.)?eltrical\.uy\.pl
+https?:\/\/([^\/]*\.)?eltroboc\.lolforum\.net
+https?:\/\/([^\/]*\.)?eltrolpas\.winnerforum\.net
+https?:\/\/([^\/]*\.)?elttaacel\.heavenforum\.com
+https?:\/\/([^\/]*\.)?elttaacel\.highforum\.net
+https?:\/\/([^\/]*\.)?elttrocpas\.discutforum\.com
+https?:\/\/([^\/]*\.)?elwg0\.szm\.sk
+https?:\/\/([^\/]*\.)?elysium-ringtonebub\.blogspot\.com
+https?:\/\/([^\/]*\.)?elysium-ringtonemzb\.blogspot\.com
+https?:\/\/([^\/]*\.)?elzelchi\.cultureforum\.net
+https?:\/\/([^\/]*\.)?emails\.ncedly\.be
+https?:\/\/([^\/]*\.)?emea-consulting\.net
+https?:\/\/([^\/]*\.)?emily\.slyip\.com
+https?:\/\/([^\/]*\.)?eminem-suck-my-dick\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?eminem-veyb\.blogspot\.com
+https?:\/\/([^\/]*\.)?eminen-lyric-ass-like-that\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?empire-holdem\.com
+https?:\/\/([^\/]*\.)?empire-holdem\.net
+https?:\/\/([^\/]*\.)?empire-holdem\.us
+https?:\/\/([^\/]*\.)?empire-poker\.black-poker\.com
+https?:\/\/([^\/]*\.)?empirepoker\.u288\.com
+https?:\/\/([^\/]*\.)?emxk0\.szm\.sk
+https?:\/\/([^\/]*\.)?ena-free-show\.net
+https?:\/\/([^\/]*\.)?enchanted1312\.blogspot\.com
+https?:\/\/([^\/]*\.)?end14april\.ifrance\.com
+https?:\/\/([^\/]*\.)?enema-fetish-free-picture\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?energo\.us
+https?:\/\/([^\/]*\.)?enetdrugsonline\.org
+https?:\/\/([^\/]*\.)?enfoldrevel\.epinoy\.com
+https?:\/\/([^\/]*\.)?engineerin2degre\.chat\.ru
+https?:\/\/([^\/]*\.)?engs\.info
+https?:\/\/([^\/]*\.)?enpresse\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?enteworld\.com
+https?:\/\/([^\/]*\.)?eoglu\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?eour8\.szm\.sk
+https?:\/\/([^\/]*\.)?ephedra\.269g\.net
+https?:\/\/([^\/]*\.)?ephedraproduct\.seesaa\.net
+https?:\/\/([^\/]*\.)?epiqq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?epointer\.freewebpage\.org
+https?:\/\/([^\/]*\.)?eprom-dresses\.com
+https?:\/\/([^\/]*\.)?epxxw\.szm\.sk
+https?:\/\/([^\/]*\.)?erasser\.8tt\.org
+https?:\/\/([^\/]*\.)?erbocco\.discutforum\.com
+https?:\/\/([^\/]*\.)?erc4tget\.blogcu\.com
+https?:\/\/([^\/]*\.)?erdomrol\.heavenforum\.com
+https?:\/\/([^\/]*\.)?erdomrol\.highforum\.net
+https?:\/\/([^\/]*\.)?ereaa\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?erealtystore\.com
+https?:\/\/([^\/]*\.)?erelleta\.forumzen\.com
+https?:\/\/([^\/]*\.)?eremat\.com
+https?:\/\/([^\/]*\.)?erjiguan\.dzsc\.com
+https?:\/\/([^\/]*\.)?erlitroc\.xa\.pl
+https?:\/\/([^\/]*\.)?ernvmf7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?erotic-gay-male-sex-story\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?erotic-story-fem-dom\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?ertral\.alkablog\.com
+https?:\/\/([^\/]*\.)?erw1r\.info
+https?:\/\/([^\/]*\.)?escher\.isis\.vanderbilt\.edu
+https?:\/\/([^\/]*\.)?eseo\.cn
+https?:\/\/([^\/]*\.)?esgic\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?eshilzet\.forumzen\.com
+https?:\/\/([^\/]*\.)?esino\.info
+https?:\/\/([^\/]*\.)?esiti-gara\.hostzz\.info
+https?:\/\/([^\/]*\.)?esjpd\.szm\.sk
+https?:\/\/([^\/]*\.)?esmpa\.com
+https?:\/\/([^\/]*\.)?esportswave\.com
+https?:\/\/([^\/]*\.)?esraj\.com
+https?:\/\/([^\/]*\.)?esseiwer\.dl\.pl
+https?:\/\/([^\/]*\.)?estarcollector\.blogspot\.com
+https?:\/\/([^\/]*\.)?etac4\.szm\.sk
+https?:\/\/([^\/]*\.)?etcoq\.szm\.sk
+https?:\/\/([^\/]*\.)?etgelcca\.forumzen\.com
+https?:\/\/([^\/]*\.)?ethnicpassion-com-db5\.blogspot\.com
+https?:\/\/([^\/]*\.)?ethnicpassion-com-ik80lyfnd\.blogspot\.com
+https?:\/\/([^\/]*\.)?ethnicpassion-com-iqa3gt\.blogspot\.com
+https?:\/\/([^\/]*\.)?ethnicpassion-com-itw\.blogspot\.com
+https?:\/\/([^\/]*\.)?etjhechi\.forumzen\.com
+https?:\/\/([^\/]*\.)?etjhetrd\.forumzen\.com
+https?:\/\/([^\/]*\.)?etkrudom\.forumzen\.com
+https?:\/\/([^\/]*\.)?etlitvir\.forumzen\.com
+https?:\/\/([^\/]*\.)?etlurlir\.forumzen\.com
+https?:\/\/([^\/]*\.)?etmuhlie\.forumzen\.com
+https?:\/\/([^\/]*\.)?etnuidet\.forumzen\.com
+https?:\/\/([^\/]*\.)?etofas\.com
+https?:\/\/([^\/]*\.)?etrart\.com
+https?:\/\/([^\/]*\.)?etrewlia\.forumzen\.com
+https?:\/\/([^\/]*\.)?etshalir\.forumzen\.com
+https?:\/\/([^\/]*\.)?ettamlet\.forumzen\.com
+https?:\/\/([^\/]*\.)?ettimera\.forumzen\.com
+https?:\/\/([^\/]*\.)?etwhiett\.forumzen\.com
+https?:\/\/([^\/]*\.)?etwhiolo\.forumzen\.com
+https?:\/\/([^\/]*\.)?etzvg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?etzyrpk\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?eubaspro\.com
+https?:\/\/([^\/]*\.)?eudrayv\.blogspot\.com
+https?:\/\/([^\/]*\.)?eueyniqott-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?euomtrna\.jconserv\.net
+https?:\/\/([^\/]*\.)?eurosexparties-com-jezun\.blogspot\.com
+https?:\/\/([^\/]*\.)?eurosexparties-com-mmnl2m\.blogspot\.com
+https?:\/\/([^\/]*\.)?eva-irina\.isuisse\.com
+https?:\/\/([^\/]*\.)?evamiee\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?eveqx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?everywhere-com-tpovy8exl\.blogspot\.com
+https?:\/\/([^\/]*\.)?evfegl9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?evhp2\.szm\.sk
+https?:\/\/([^\/]*\.)?evil-gummiworm\.blogspot\.com
+https?:\/\/([^\/]*\.)?ewdnqb4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?exchange-lingerie-link-womens\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?exciting-casino\.com
+https?:\/\/([^\/]*\.)?exhuq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?extrarx\.kvkb\.com
+https?:\/\/([^\/]*\.)?extremeapril-com-adsm\.blogspot\.com
+https?:\/\/([^\/]*\.)?extremeapril-com-woje\.blogspot\.com
+https?:\/\/([^\/]*\.)?extremeapril-dhx1z\.blogspot\.com
+https?:\/\/([^\/]*\.)?ez\.asn\.und\.edu
+https?:\/\/([^\/]*\.)?ezjor\.com
+https?:\/\/([^\/]*\.)?ezkes\.com
+https?:\/\/([^\/]*\.)?ezxwc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?f-download-free-sex-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?f-z-a\.com
+https?:\/\/([^\/]*\.)?faadney\.dl\.pl
+https?:\/\/([^\/]*\.)?fabrizio-corona\.freehostss\.info
+https?:\/\/([^\/]*\.)?face-lick-lickable-licker-tongue\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?facial-abuse--com\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?facial-hair-remover\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?facial-paralysis-treatment\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?facial-plastic-surgery-manhattan\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?facial-whore\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?faculty\.etsu\.edu
+https?:\/\/([^\/]*\.)?faculty\.hope\.edu
+https?:\/\/([^\/]*\.)?faculty\.oxy\.edu
+https?:\/\/([^\/]*\.)?faculty\.ugf\.edu
+https?:\/\/([^\/]*\.)?faculty\.whatcom\.ctc\.edu
+https?:\/\/([^\/]*\.)?facweb\.cs\.depaul\.edu
+https?:\/\/([^\/]*\.)?fadianji\.dzsc\.com
+https?:\/\/([^\/]*\.)?fagin\.info
+https?:\/\/([^\/]*\.)?fairy\.8888mb\.com
+https?:\/\/([^\/]*\.)?faleake\.dl\.pl
+https?:\/\/([^\/]*\.)?falling-anvil\.blogspot\.com
+https?:\/\/([^\/]*\.)?family-viagra\.com
+https?:\/\/([^\/]*\.)?famouspornstars-com-o020ss18d8\.blogspot\.com
+https?:\/\/([^\/]*\.)?famvir\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?fangdaqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?fantasticnudes-com-bol80a\.blogspot\.com
+https?:\/\/([^\/]*\.)?fantasticnudes-com-by8gook\.blogspot\.com
+https?:\/\/([^\/]*\.)?fantasticnudes-com-qic\.blogspot\.com
+https?:\/\/([^\/]*\.)?fantasticnudes-com-r60\.blogspot\.com
+https?:\/\/([^\/]*\.)?fantasy-hand-job-teen\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?farmius\.org
+https?:\/\/([^\/]*\.)?fascination\.my10gb\.com
+https?:\/\/([^\/]*\.)?fasnty\.com
+https?:\/\/([^\/]*\.)?fasoft\.com\.cn
+https?:\/\/([^\/]*\.)?fast-loaneqh\.blogspot\.com
+https?:\/\/([^\/]*\.)?fastmovers\.org
+https?:\/\/([^\/]*\.)?fat-banging\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?fat-blonde-woman\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?fat-fuck-video\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?fat-porn-clip-infoecm\.blogspot\.com
+https?:\/\/([^\/]*\.)?fat-porn-clip-infomyi\.blogspot\.com
+https?:\/\/([^\/]*\.)?fat-tgp-com-ee\.blogspot\.com
+https?:\/\/([^\/]*\.)?fat-tgp-com-g654ywug\.blogspot\.com
+https?:\/\/([^\/]*\.)?fatfucks-com-kdy41nn4fr\.blogspot\.com
+https?:\/\/([^\/]*\.)?fatfucks-com-t232q4\.blogspot\.com
+https?:\/\/([^\/]*\.)?fatfucks-com-tf0v115rm\.blogspot\.com
+https?:\/\/([^\/]*\.)?fatfucks-com-thr8\.blogspot\.com
+https?:\/\/([^\/]*\.)?fathut-com-db66nw2a\.blogspot\.com
+https?:\/\/([^\/]*\.)?fathut-com-hqloar2t8\.blogspot\.com
+https?:\/\/([^\/]*\.)?fattythumbs-com-el24t2\.blogspot\.com
+https?:\/\/([^\/]*\.)?fattythumbs-com-iq1\.blogspot\.com
+https?:\/\/([^\/]*\.)?fau75\.blogspot\.com
+https?:\/\/([^\/]*\.)?favorite-casino\.com
+https?:\/\/([^\/]*\.)?fawninglace\.freehostingz\.com
+https?:\/\/([^\/]*\.)?fbcjr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fbugy\.szm\.sk
+https?:\/\/([^\/]*\.)?fcpx5\.szm\.sk
+https?:\/\/([^\/]*\.)?fcuml\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fcup3\.szm\.sk
+https?:\/\/([^\/]*\.)?fdjcz\.sunp\.com
+https?:\/\/([^\/]*\.)?fdxyp\.szm\.sk
+https?:\/\/([^\/]*\.)?fe-algebra\.blogspot\.com
+https?:\/\/([^\/]*\.)?fe-whateve\.blogspot\.com
+https?:\/\/([^\/]*\.)?fedems\.com
+https?:\/\/([^\/]*\.)?feeltime\.cn
+https?:\/\/([^\/]*\.)?feeltime\.com
+https?:\/\/([^\/]*\.)?fehpks4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?feidenfurniture\.com
+https?:\/\/([^\/]*\.)?fejwh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fem-dom-art-and-drawing\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?female-ass-worship\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?female-condom-sex\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?female-v\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?femdog\.blogspot\.com
+https?:\/\/([^\/]*\.)?feq-tugjobs-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?ferda111\.php5\.cz
+https?:\/\/([^\/]*\.)?ferer\.superprovider\.de
+https?:\/\/([^\/]*\.)?feretuc\.forumculture\.net
+https?:\/\/([^\/]*\.)?ferrarimaser\.info
+https?:\/\/([^\/]*\.)?fest-frat-fuck\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fetish-club-in-ipswitch-uk\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?fetish-hardcore-lesbian-more\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?fetish-heel-high-in-nylon-pretty-toe\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fetish-pantie-white\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?fetus-free-sex-video-l\.blogspot\.com
+https?:\/\/([^\/]*\.)?ffhi7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fflive\.info
+https?:\/\/([^\/]*\.)?fge-teens-links-0\.blogspot\.com
+https?:\/\/([^\/]*\.)?fghrf\.8888mb\.com
+https?:\/\/([^\/]*\.)?fgvan\.info
+https?:\/\/([^\/]*\.)?fgvzq\.szm\.sk
+https?:\/\/([^\/]*\.)?fhbi5\.szm\.sk
+https?:\/\/([^\/]*\.)?fhmms\.szm\.sk
+https?:\/\/([^\/]*\.)?fhwl-com-dy1tbi5l\.blogspot\.com
+https?:\/\/([^\/]*\.)?fhwl-com-mn8ni\.blogspot\.com
+https?:\/\/([^\/]*\.)?fhwl-com-wc\.blogspot\.com
+https?:\/\/([^\/]*\.)?fhwl-com-wgrog\.blogspot\.com
+https?:\/\/([^\/]*\.)?fibiger\.org
+https?:\/\/([^\/]*\.)?fifa2007it\.org
+https?:\/\/([^\/]*\.)?fihqquj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?filipina-lesbian-teen\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?fillchill\.mybbland\.com
+https?:\/\/([^\/]*\.)?film-da-scaricare\.host24h\.info
+https?:\/\/([^\/]*\.)?finalteens-com-c6o0080y\.blogspot\.com
+https?:\/\/([^\/]*\.)?finalteens-com-kpngsoxf\.blogspot\.com
+https?:\/\/([^\/]*\.)?finanziamento-on-line\.19mb\.info
+https?:\/\/([^\/]*\.)?finanziamento-personale\.hostzz\.info
+https?:\/\/([^\/]*\.)?finanziamento-treviso\.host24h\.info
+https?:\/\/([^\/]*\.)?findbabychick\.info
+https?:\/\/([^\/]*\.)?findbabygirl\.info
+https?:\/\/([^\/]*\.)?findvic\.com
+https?:\/\/([^\/]*\.)?fine-lingerie-online-sexy\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?finger-fuck-clip\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fioricet\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?fioricet\.47\.pl
+https?:\/\/([^\/]*\.)?fioricet\.edu\.tf
+https?:\/\/([^\/]*\.)?fioricet\.hav\.pl
+https?:\/\/([^\/]*\.)?fioricet\.skocz\.net
+https?:\/\/([^\/]*\.)?fioricetrx\.weboficial\.com
+https?:\/\/([^\/]*\.)?fioricets\.blogspot\.com
+https?:\/\/([^\/]*\.)?firejedi\.blogspot\.com
+https?:\/\/([^\/]*\.)?first-free-fuck-time-video\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?first-lesbian-experience-story\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?first-lesbian-video-xxx\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?first-porn\.futureblog\.org
+https?:\/\/([^\/]*\.)?firstchristianbank\.info
+https?:\/\/([^\/]*\.)?firstdrugstorezone\.info
+https?:\/\/([^\/]*\.)?firstfriends\.us
+https?:\/\/([^\/]*\.)?firsthorizonmtg\.com
+https?:\/\/([^\/]*\.)?firstnightcharleston\.com
+https?:\/\/([^\/]*\.)?firsttimeauditions-com-asq5m\.blogspot\.com
+https?:\/\/([^\/]*\.)?firsttimeauditions-com-gxs\.blogspot\.com
+https?:\/\/([^\/]*\.)?fishdor\.joolo\.com
+https?:\/\/([^\/]*\.)?fishing-rod\.247ihost\.com
+https?:\/\/([^\/]*\.)?fishing-rod\.hostpresso\.com
+https?:\/\/([^\/]*\.)?fishing-rod\.joolo\.com
+https?:\/\/([^\/]*\.)?fishins\.247ihost\.com
+https?:\/\/([^\/]*\.)?fishman\.freewebhosting360\.com
+https?:\/\/([^\/]*\.)?fishmpegs-com-oet5\.blogspot\.com
+https?:\/\/([^\/]*\.)?fishmpegs-com-r5\.blogspot\.com
+https?:\/\/([^\/]*\.)?fishmpegs-com-r87f7ui\.blogspot\.com
+https?:\/\/([^\/]*\.)?fisting-gay-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?fisting-group-sex\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fisting-lesbian-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?fisting-lesson-maya\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?fistinglessons-com-dmskwfs\.blogspot\.com
+https?:\/\/([^\/]*\.)?fistinglessons-com-i03p\.blogspot\.com
+https?:\/\/([^\/]*\.)?fitofarm\.com
+https?:\/\/([^\/]*\.)?fitvzj-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?fjp\.left-page\.com
+https?:\/\/([^\/]*\.)?fjp\.zxvo\.com
+https?:\/\/([^\/]*\.)?fkcvlna\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fkvvp\.szm\.sk
+https?:\/\/([^\/]*\.)?flandra\.php5\.cz
+https?:\/\/([^\/]*\.)?flawformed\.hostonmars\.com
+https?:\/\/([^\/]*\.)?flexeril\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?flextra\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?flkkmex\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fllood\.blogspot\.com
+https?:\/\/([^\/]*\.)?fllwlv6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?flnet\.org
+https?:\/\/([^\/]*\.)?flonase\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?flooring-guide\.org
+https?:\/\/([^\/]*\.)?floridamortgage-x\.com
+https?:\/\/([^\/]*\.)?floridian-love\.blogspot\.com
+https?:\/\/([^\/]*\.)?flower\.hostonmars\.com
+https?:\/\/([^\/]*\.)?flowerdive\.info
+https?:\/\/([^\/]*\.)?flqcjnw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fluffy\.hostcroc\.com
+https?:\/\/([^\/]*\.)?fluoxetine\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?fnhtgggv\.t35\.com
+https?:\/\/([^\/]*\.)?fnxsj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?foecedh3artbrat\.blogspot\.com
+https?:\/\/([^\/]*\.)?foedu-de-solnil\.blogspot\.com
+https?:\/\/([^\/]*\.)?folast\.com
+https?:\/\/([^\/]*\.)?folcan\.my10gb\.com
+https?:\/\/([^\/]*\.)?fondi-italiano\.hostzz\.info
+https?:\/\/([^\/]*\.)?for-whorevideos-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?forbestcare\.info
+https?:\/\/([^\/]*\.)?forensic1nursing\.chat\.ru
+https?:\/\/([^\/]*\.)?forex\.fasthost\.pl
+https?:\/\/([^\/]*\.)?fork-hief\.ibelgique\.com
+https?:\/\/([^\/]*\.)?formulam\.net
+https?:\/\/([^\/]*\.)?fortune-slots\.com
+https?:\/\/([^\/]*\.)?forum\.kharkiv\.edu
+https?:\/\/([^\/]*\.)?fos-sologals-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?foto-sabrina-ferilli\.host24h\.info
+https?:\/\/([^\/]*\.)?foxeykie\.iespana\.es
+https?:\/\/([^\/]*\.)?fozq6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fpa7kctb\.t35\.com
+https?:\/\/([^\/]*\.)?fqred\.com
+https?:\/\/([^\/]*\.)?fragolla\.blogspot\.com
+https?:\/\/([^\/]*\.)?frbarber\.dl\.pl
+https?:\/\/([^\/]*\.)?frbracco\.dl\.pl
+https?:\/\/([^\/]*\.)?freakthumbs-com-bp\.blogspot\.com
+https?:\/\/([^\/]*\.)?freakthumbs-com-hcmkk\.blogspot\.com
+https?:\/\/([^\/]*\.)?frebnet\.com
+https?:\/\/([^\/]*\.)?fredd0\.info
+https?:\/\/([^\/]*\.)?free-access\.freeinsite\.net
+https?:\/\/([^\/]*\.)?free-adult-porn-clip-info43c\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-adult-porn-clip-infopqk\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-amateur-hardcore-pic\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-amateur-submitted-photo\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-amateur-video-e2843\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-anal-blonde-sex-pic\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-anal-porn-clip\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-anal-xxx-clip\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-anime-porn-clip-info6tn\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-anime-porn-clips-newsyby\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-asian-lesbian-sex-video\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-bbw-porn-clip-blog4wm\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-big-ass-porn\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-big-boob-porn-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-big-boob\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-bizarre-insertion-pic\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-bizarre-porn-pic\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-black-amateur\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-black-porn-clip-blogo7t\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-black-porn-movie-kebi\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-black-porn-video-clip-newsjqj\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-busty-asian-movie\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-busty-blonde-pic\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-busty-porn-movie\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-busty-redhead-pic\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-butt-fucking-video\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-cartoon-porn-clip-zoneikt\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-cartoon-porn-clip-zonewpm\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-celebrity-porn-clip-infowuz\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-celebrity-porn-video-bo\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-chubby-girl-pic\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-cock-sucking-slut-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-college-fuck-fest-gallery\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-cum-blow-job-gallery\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-cum-in-mouth-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-cum-swap-video\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-ebony-porn-clip-zonek7c\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-ebony-porn-clip-zonelcy\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-ebony-pussy-pic\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-ebony-sex-video-di\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-fat-porn-clip-infotno\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-fem-dom-thumb\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-female-orgasm-video-bb-bb-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-filipina-sex-movie\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-first-time-lesbian-sex-story\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-fisting-mpeg\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-fisting-sex-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-fucking-bitch\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-fucking-gallery-hardcore\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-fucking-sex-porn-site\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-full-length-porn-mov-bb-bb-w\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gang-bang-sample\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-gay-hunk-male-movie-muscled-stud-video\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-gay-muscle\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-gay-picture-sex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-gay-porn-clips-info35a\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-porn-movie-clip-bloglor\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-porn-movie-p-d-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-porn-video-clip-newsa83\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-porn-video-p-v-p\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-porn-web-site\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-gay-sex-movie-bb-bb-s\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-gay-sex-teen-trailer\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-gay-trailer\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-granny-lesbian\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-granny-movie-old\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-granny-pic-woman\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-group-lesbian-preview-sex-video\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-hand-job-movie-bb-bb-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-hand-job-video-clip-bb-bb-c\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-hardcore-movie-gallery-xxx\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-hardcore-porn-clip-blog07a\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-hardcore-porn-clip-blogi4k\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-hardcore-porn-star-picture\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-hardcore-sex-mpeg\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-heel-high-leg-pic-stilettos-stocking\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-homemade-porn-clip-news22n\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-homemade-porn-clip-news7ro\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-hot-blonde-nude-pic\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-hot-leg-nude-wallpaper-woman\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-hot-mom\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-hot-web-cam-video-h-s-f\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-huge-black-gay-cock\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-in-lesbian-movie-nylons\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-indian-porn-clip-infok6x\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-interracial-sex-video-ko\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-latin-ass\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-lesbian-cam-chat\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-lesbian-clip-zuxi\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-lesbian-hentai-movie\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-lesbian-licking-pic\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-lesbian-mature-sex-video-young\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-lesbian-movie-gjqvl\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-lesbian-porn-clips-blogagm\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-lesbian-porn-video-clip-newsidt\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-lesbian-video-a7e8t\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-lesbian-xxx-picture\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-long-porn-clip-info2fo\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-long-porn-clip-info7pr\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-long-porn-movie-clip-blogxn2\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-long-porn-movie-clip-zoneq4f\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-long-porn-video-wi\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-male-bisexual-porn\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-mature-porn-clip-zone5bz\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-mature-sex-clip\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-mature-sex-story\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-mature-thumbnail-post\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?free-milf-porn-clip-zonenqn\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-milf-video-bb-bb-n\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-mmf-bisex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-naked-mature-lady\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?free-nude-bitch\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-nude-blonde-gallery\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-older-woman-fucking\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-online-poker-000\.biz
+https?:\/\/([^\/]*\.)?free-orgasm-clip-supi\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-paris-hilton-porn-clip-infolah\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-personal-gay-links-tommys-favorite\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-pic-of-big-dicks\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-pic-of-busty-babes\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-pic-of-woman-kissing\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-picture-hardcore-anal\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-picture-hardcore-anal\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-picture-huge-clit\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?free-porn-chwd\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clip-nep\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clip-trailer-infog42\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clip-zoneil5\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clip-zonek61\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clip-zoneu7t\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-clips-newsid3\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-movie-to0r5\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-movie-zet\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-psp-video-po\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-sample-clip-infodwd\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-sample-clip-newsb26\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-sex-clip-zoneavj\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-star-movie-bb-bb-h\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-star-video-clip-blog81e\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-clip-info7km\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-clip-infoixk\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-clip-sample-newsw3t\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-clips-infooem\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-porn-clip-blogiep\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-porn-clip-zonepqd\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn-video-puz\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-porn\.xa\.pl
+https?:\/\/([^\/]*\.)?free-pussy-fucking-movie\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?free-ringtones\.269g\.net
+https?:\/\/([^\/]*\.)?free-ringtones\.aqhhhh\.info
+https?:\/\/([^\/]*\.)?free-ringtoneten\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sex-clip-ceb\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sex-movie-pow\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sex-video-clip-kog\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sex-video-hup\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sex-video\.hostithere\.org
+https?:\/\/([^\/]*\.)?free-sexy-leg-video\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-shemale-fucking-woman-movie\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?free-shemale-movie-w-r-s\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-skin\.newmail\.ru
+https?:\/\/([^\/]*\.)?free-skin\.pochta\.ru
+https?:\/\/([^\/]*\.)?free-spase\.info
+https?:\/\/([^\/]*\.)?free-sprint-ringtoneija\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-sprint-ringtonesrha\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-t-mobile-ringtonehvh\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-teen-movie-cock-sucking\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?free-teen-porn-clip-blogpmw\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-teen-porn-clip-infohxv\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-teen-porn-video-clip-newsi5v\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-teens-porn-com-wod\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-video-sex-chat-ki\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-xxx-amateur-web-cam\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free-xxx-porn-clip-infoibv\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-xxx-porn-video-clip-infopij\.blogspot\.com
+https?:\/\/([^\/]*\.)?free-young-lesbian-movie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?free2peek-com-c1iicr\.blogspot\.com
+https?:\/\/([^\/]*\.)?free2peek-com-co8g24x0ee\.blogspot\.com
+https?:\/\/([^\/]*\.)?free2peek-com-gi6v\.blogspot\.com
+https?:\/\/([^\/]*\.)?free_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?freebigmovies-com-b25i040z\.blogspot\.com
+https?:\/\/([^\/]*\.)?freebigmovies-com-bxf440\.blogspot\.com
+https?:\/\/([^\/]*\.)?freebigmovies-com-rst\.blogspot\.com
+https?:\/\/([^\/]*\.)?freebloger\.com
+https?:\/\/([^\/]*\.)?freecooktop\.info
+https?:\/\/([^\/]*\.)?freedirectoryv\.com
+https?:\/\/([^\/]*\.)?freeforumbuilder\.com
+https?:\/\/([^\/]*\.)?freegonzo-com-du\.blogspot\.com
+https?:\/\/([^\/]*\.)?freegonzo-com-e8n\.blogspot\.com
+https?:\/\/([^\/]*\.)?freegonzo-com-og5mpk\.blogspot\.com
+https?:\/\/([^\/]*\.)?freegonzo-od5evmn\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeheaven-com-ap22\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeheaven-com-w1kx4ymi\.blogspot\.com
+https?:\/\/([^\/]*\.)?freehost\.ag
+https?:\/\/([^\/]*\.)?freehugemovies-com-dr\.blogspot\.com
+https?:\/\/([^\/]*\.)?freehugemovies-com-hi3\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeinsite\.net
+https?:\/\/([^\/]*\.)?freeinternetplus\.info
+https?:\/\/([^\/]*\.)?freenextelringtonesupf\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeones-com-amrmdwb\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeones-com-m1fc\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeones-com-mb70w6\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeones-com-mqdm\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeones-com-tfirm5smvh\.blogspot\.com
+https?:\/\/([^\/]*\.)?freepaintballgun\.com
+https?:\/\/([^\/]*\.)?freepicseries-com-kb1\.blogspot\.com
+https?:\/\/([^\/]*\.)?freepicseries-com-tfct6n\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeportalnow\.com
+https?:\/\/([^\/]*\.)?freeringtonedgf\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeringtones\.seesaa\.net
+https?:\/\/([^\/]*\.)?freeringtonesptl\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeringtoness\.fr\.funpic\.de
+https?:\/\/([^\/]*\.)?frees--123clips-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--8teenfiles-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--africanvagina-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--ah-me-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--akissbetweenthelegs-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--allsitesaccess-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--amateurcurves-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--asssupply-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--atkmodels-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--auntmia-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--bigtitspalace-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--boneme-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--bootycollection-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--bustyadventures-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--camcrush-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--camelclips-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--caughtnude-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--celebrityscandal-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--cliphunter-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--cowlist-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--dirtydaughter-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--easygals-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--ebonyblack-net\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--el-ladies-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--eurosexparties-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--fuckingfreemovies-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--gallfree-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--girlfur-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--grannyplanet-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--greentits-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--hanksgalleries-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--hereistheporn-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--hornybanana-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--idealbabes-net\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--indianpassion-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?frees--ispycameltoe-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?freespaces\.com
+https?:\/\/([^\/]*\.)?freesprintringtoneenx\.blogspot\.com
+https?:\/\/([^\/]*\.)?freesprintringtoneswkd\.blogspot\.com
+https?:\/\/([^\/]*\.)?freestyman\.com
+https?:\/\/([^\/]*\.)?freetmobileringtonekaw\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeverizonringtonevol\.blogspot\.com
+https?:\/\/([^\/]*\.)?freewebsitehosting\.net
+https?:\/\/([^\/]*\.)?freexmovies-com-i1xi8s\.blogspot\.com
+https?:\/\/([^\/]*\.)?freexmovies-com-ojxc1k\.blogspot\.com
+https?:\/\/([^\/]*\.)?freeyaho\.com
+https?:\/\/([^\/]*\.)?french-kissing-my-sister\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?french-kissing\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?french-lick-child-family-entertainment\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?french-tickler-condom\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?french168\.com
+https?:\/\/([^\/]*\.)?frenchcum-btb\.blogspot\.com
+https?:\/\/([^\/]*\.)?frenchcum-com-mzqj8hpm\.blogspot\.com
+https?:\/\/([^\/]*\.)?frenchcum-com-w07ua1w7z\.blogspot\.com
+https?:\/\/([^\/]*\.)?fresh-sex\.futureblog\.org
+https?:\/\/([^\/]*\.)?friendsgrabber\.com
+https?:\/\/([^\/]*\.)?fripcn9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?frog-sexgtw\.blogspot\.com
+https?:\/\/([^\/]*\.)?frog-sexlfe\.blogspot\.com
+https?:\/\/([^\/]*\.)?frogm\.info
+https?:\/\/([^\/]*\.)?frogsex-com-ev4zmddt\.blogspot\.com
+https?:\/\/([^\/]*\.)?frogsex-com-ivtcaqfsx\.blogspot\.com
+https?:\/\/([^\/]*\.)?frogsex-gnle04e\.blogspot\.com
+https?:\/\/([^\/]*\.)?frt3\.org\.ua
+https?:\/\/([^\/]*\.)?fsxhl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fsyflower\.com
+https?:\/\/([^\/]*\.)?ft568\.com
+https?:\/\/([^\/]*\.)?ftffo\.szm\.sk
+https?:\/\/([^\/]*\.)?fthaop1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ftntg\.szm\.sk
+https?:\/\/([^\/]*\.)?fu-alexus\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuck-gallery-picture\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?fuck-her-in-mouth\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fuck-lesbian-pussy\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?fuck-pussy-suck-swallow\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?fuck-sexy-slut\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?fuck-the-maidens\.info
+https?:\/\/([^\/]*\.)?fuckfromass\.info
+https?:\/\/([^\/]*\.)?fucking-hardcore-japanese-slut\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?fucking-lesbian-licking-pussy\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?fucking-machine-thumbnail\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?fucking-preity-sucking-zinta\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?fucking-teen-party\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?fuckingfreemovies-com-gvps\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckingfreemovies-com-gy2\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckingfreemovies-com-qogog\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckingmachines-com-b4glo\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckingmachines-com-h3\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckingmachines-com-hqrbqh4\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckk-com-ot8wc\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckk-com-r6\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuckk-com-rw5485\.blogspot\.com
+https?:\/\/([^\/]*\.)?fucksakes-com-ks7uskz64\.blogspot\.com
+https?:\/\/([^\/]*\.)?fufpyl5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?funberry-com-meft\.blogspot\.com
+https?:\/\/([^\/]*\.)?funberry-com-mkjvxl\.blogspot\.com
+https?:\/\/([^\/]*\.)?funberry-com-tz8\.blogspot\.com
+https?:\/\/([^\/]*\.)?funkall\.us
+https?:\/\/([^\/]*\.)?funny-stuff\.3ae6ucb\.info
+https?:\/\/([^\/]*\.)?funpelv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fuohcbq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?furama\.dtdns\.net
+https?:\/\/([^\/]*\.)?furrysoap\.ifrance\.com
+https?:\/\/([^\/]*\.)?fuvo-aimee\.blogspot\.com
+https?:\/\/([^\/]*\.)?fuyinj\.ebloggy\.com
+https?:\/\/([^\/]*\.)?fvinc\.4t\.com
+https?:\/\/([^\/]*\.)?fvjz5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fwbhexo\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fweroze\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fwvsp\.szm\.sk
+https?:\/\/([^\/]*\.)?fx120\.com
+https?:\/\/([^\/]*\.)?fx120\.net
+https?:\/\/([^\/]*\.)?fxxb5\.szm\.sk
+https?:\/\/([^\/]*\.)?fyisy\.szm\.sk
+https?:\/\/([^\/]*\.)?fylfw\.szm\.sk
+https?:\/\/([^\/]*\.)?fyyvb\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?fzdlcfzh-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?g-maste\.com
+https?:\/\/([^\/]*\.)?g2c2rtc\.info
+https?:\/\/([^\/]*\.)?g3eros\.info
+https?:\/\/([^\/]*\.)?g76\.be
+https?:\/\/([^\/]*\.)?gadkj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gaeq2\.szm\.sk
+https?:\/\/([^\/]*\.)?gafdyq9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gagase\.com
+https?:\/\/([^\/]*\.)?gailc\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?galleries4free-com-e1ew\.blogspot\.com
+https?:\/\/([^\/]*\.)?galleries4free-com-o8\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallery-jenna-jameson-blonde\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gallery-kissing-woman-woman\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gallery-lesson-milf\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?gallery-lingerie-see-teen-thru\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?gallery-mature-stocking\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?gallfree-com-b0uf2q0\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallfree-com-ra5f1d7\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallfree-com-teruq\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallview-com-a2wqsk\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallview-com-ahasx\.blogspot\.com
+https?:\/\/([^\/]*\.)?gallview-com-wa6froqpl\.blogspot\.com
+https?:\/\/([^\/]*\.)?gambling-online-theory\.com
+https?:\/\/([^\/]*\.)?gamenase\.com
+https?:\/\/([^\/]*\.)?gamez4less\.com
+https?:\/\/([^\/]*\.)?gang-bang-free-pic-gallery\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gangsheng\.home4u\.china\.com
+https?:\/\/([^\/]*\.)?gaping-ass-sex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gaqx6\.szm\.sk
+https?:\/\/([^\/]*\.)?garid\.biz
+https?:\/\/([^\/]*\.)?garlic\.hostonmars\.com
+https?:\/\/([^\/]*\.)?garter\.nocostwebhosting\.com
+https?:\/\/([^\/]*\.)?gastrointestinal\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?gastrw\.com
+https?:\/\/([^\/]*\.)?gatalgat\.myrealboard\.com
+https?:\/\/([^\/]*\.)?gatloral\.myrealboard\.com
+https?:\/\/([^\/]*\.)?gatx10258\.blogspot\.com
+https?:\/\/([^\/]*\.)?gay-bareback-story\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?gay-big-cock-video-clip\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gay-black-blow-job\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-blonde-twinks\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gay-cum-eater\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-gang-bang-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?gay-girl-kissing\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?gay-girl-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-hispanic-man-naked\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-hot-latinos\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-huge-thick-cock\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-hunk-sex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-man-hardcore\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gay-man-man-sex\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-man-mature-old-picture\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?gay-man-naked-wrestling\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?gay-marriage-benefit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-photo-personals\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?gay-porn-clip-zonehyx\.blogspot\.com
+https?:\/\/([^\/]*\.)?gay-porn-video-clip-news8dd\.blogspot\.com
+https?:\/\/([^\/]*\.)?gay-pride-week-in-florida\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-sex-video-on-demand\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?gay-teen-man\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-teen-sex-clip\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-themed-movie\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?gay-twinks-fucking\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gay-web-cam-site\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gay-woman-chat-rooms\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?gazwc\.szm\.sk
+https?:\/\/([^\/]*\.)?gbapc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gbd-amy\.hostithere\.org
+https?:\/\/([^\/]*\.)?gbtw1\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?gbvgxus\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gceaq\.szm\.sk
+https?:\/\/([^\/]*\.)?gcqqkhx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gd-r\.com
+https?:\/\/([^\/]*\.)?gdfea\.szm\.sk
+https?:\/\/([^\/]*\.)?geb0cs\.nokedem\.com
+https?:\/\/([^\/]*\.)?gebu-aeh\.blogspot\.com
+https?:\/\/([^\/]*\.)?geddesvicente\.info
+https?:\/\/([^\/]*\.)?geflamio\.dl\.pl
+https?:\/\/([^\/]*\.)?genaholincorporated\.com
+https?:\/\/([^\/]*\.)?generic-paxil\.contact\.cc
+https?:\/\/([^\/]*\.)?genericbuy\.o-f\.com
+https?:\/\/([^\/]*\.)?genoux\.dnsrd\.com
+https?:\/\/([^\/]*\.)?georgiamortgage-x\.com
+https?:\/\/([^\/]*\.)?germani4\.blogspot\.com
+https?:\/\/([^\/]*\.)?gesrju\.com
+https?:\/\/([^\/]*\.)?get6or6li\.dl\.pl
+https?:\/\/([^\/]*\.)?getaer\.forumculture\.net
+https?:\/\/([^\/]*\.)?getbankruptcylaw\.info
+https?:\/\/([^\/]*\.)?getdeerelt\.forumzen\.com
+https?:\/\/([^\/]*\.)?getdelsit\.zj\.pl
+https?:\/\/([^\/]*\.)?getdomsit\.blogcu\.com
+https?:\/\/([^\/]*\.)?getfemon\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?getgetvi\.lolbb\.com
+https?:\/\/([^\/]*\.)?gethelp24x7\.net
+https?:\/\/([^\/]*\.)?getkuric\.blogcu\.com
+https?:\/\/([^\/]*\.)?getletovi\.winnerforum\.net
+https?:\/\/([^\/]*\.)?getlimon\.discutfree\.com
+https?:\/\/([^\/]*\.)?getowson\.dl\.pl
+https?:\/\/([^\/]*\.)?gettaer\.ephpbb\.com
+https?:\/\/([^\/]*\.)?getzelvi\.goodbb\.net
+https?:\/\/([^\/]*\.)?gezu-alaina\.blogspot\.com
+https?:\/\/([^\/]*\.)?gfd69\.tripod\.com
+https?:\/\/([^\/]*\.)?gg0\.be
+https?:\/\/([^\/]*\.)?ggfix\.com
+https?:\/\/([^\/]*\.)?gglive\.info
+https?:\/\/([^\/]*\.)?gguu\.com
+https?:\/\/([^\/]*\.)?ggww\.dtdns\.net
+https?:\/\/([^\/]*\.)?ggzhm\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ghhdh\.szm\.sk
+https?:\/\/([^\/]*\.)?ghiacci0\.info
+https?:\/\/([^\/]*\.)?ghnakjwcjp-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?ghrvu\.szm\.sk
+https?:\/\/([^\/]*\.)?ghvd7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?giant-cock-shemale\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?giant-dick-sucking\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?giant-dildo-in-pussy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gifo-administrator\.blogspot\.com
+https?:\/\/([^\/]*\.)?gigablast\.republika\.pl
+https?:\/\/([^\/]*\.)?gigagalleries-com-c1ylawg\.blogspot\.com
+https?:\/\/([^\/]*\.)?gigagalleries-com-cn4\.blogspot\.com
+https?:\/\/([^\/]*\.)?gigagalleries-com-gd0a\.blogspot\.com
+https?:\/\/([^\/]*\.)?gigavids-com-wcmck\.blogspot\.com
+https?:\/\/([^\/]*\.)?gimps\.info
+https?:\/\/([^\/]*\.)?giochi-java\.heroez\.info
+https?:\/\/([^\/]*\.)?gioco-avventura-vari\.bb22\.info
+https?:\/\/([^\/]*\.)?gioco-online-picchiaduro\.nnme\.info
+https?:\/\/([^\/]*\.)?gipolit\.asp2\.cz
+https?:\/\/([^\/]*\.)?girl-butt-in-tight-jeans\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?girl-guy-kissing\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?girl-kissing-video-bb-bb-j\.blogspot\.com
+https?:\/\/([^\/]*\.)?girl-playing-with-dildo\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?girl-showing-there-boob\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?girl-with-big-dildo\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?girlfur-com-ga\.blogspot\.com
+https?:\/\/([^\/]*\.)?girlfur-com-pisij\.blogspot\.com
+https?:\/\/([^\/]*\.)?gisogenu\.org
+https?:\/\/([^\/]*\.)?give-me-baby\.info
+https?:\/\/([^\/]*\.)?gjjf\.com
+https?:\/\/([^\/]*\.)?gjjp\.left-page\.com
+https?:\/\/([^\/]*\.)?gjjp\.zxvo\.com
+https?:\/\/([^\/]*\.)?gjqgec8\.info
+https?:\/\/([^\/]*\.)?gkjxcs1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gkwzrz8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?glamouronline\.info
+https?:\/\/([^\/]*\.)?glebo\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo1\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo2\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo3\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo4\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo5\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo6\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo7\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo8\.host-page\.com
+https?:\/\/([^\/]*\.)?glebo9\.host-page\.com
+https?:\/\/([^\/]*\.)?glmv6\.szm\.sk
+https?:\/\/([^\/]*\.)?globalbartertrade\.info
+https?:\/\/([^\/]*\.)?globalflights\.org
+https?:\/\/([^\/]*\.)?globalrecreationguide\.com
+https?:\/\/([^\/]*\.)?globegarment\.com\.cn
+https?:\/\/([^\/]*\.)?glodgreen\.info
+https?:\/\/([^\/]*\.)?gloryhole\.coz\.in
+https?:\/\/([^\/]*\.)?glovebox\.freewebpage\.org
+https?:\/\/([^\/]*\.)?gloveboxes\.cn
+https?:\/\/([^\/]*\.)?gloveboxes\.com\.cn
+https?:\/\/([^\/]*\.)?glover\.host-page\.com
+https?:\/\/([^\/]*\.)?glover1\.host-page\.com
+https?:\/\/([^\/]*\.)?glover2\.host-page\.com
+https?:\/\/([^\/]*\.)?glover3\.host-page\.com
+https?:\/\/([^\/]*\.)?glover4\.host-page\.com
+https?:\/\/([^\/]*\.)?glover5\.host-page\.com
+https?:\/\/([^\/]*\.)?glover6\.host-page\.com
+https?:\/\/([^\/]*\.)?glover7\.host-page\.com
+https?:\/\/([^\/]*\.)?glover8\.host-page\.com
+https?:\/\/([^\/]*\.)?glover9\.host-page\.com
+https?:\/\/([^\/]*\.)?gmldsb\.com
+https?:\/\/([^\/]*\.)?gnsgs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?go-ansna\.ibelgique\.com
+https?:\/\/([^\/]*\.)?goaie\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?goatlist-com-dk15cne\.blogspot\.com
+https?:\/\/([^\/]*\.)?goatlist-com-hi\.blogspot\.com
+https?:\/\/([^\/]*\.)?goatlist-com-o5\.blogspot\.com
+https?:\/\/([^\/]*\.)?gobabo\.nocostwebhosting\.com
+https?:\/\/([^\/]*\.)?gobald\.dtdns\.net
+https?:\/\/([^\/]*\.)?gobu4\.szm\.sk
+https?:\/\/([^\/]*\.)?gogllefr\.125mb\.com
+https?:\/\/([^\/]*\.)?gokletvi\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?goko-adeline\.blogspot\.com
+https?:\/\/([^\/]*\.)?gold-watch\.grimgoe\.be
+https?:\/\/([^\/]*\.)?gold\.fathippohosting\.com
+https?:\/\/([^\/]*\.)?goldsexcity\.info
+https?:\/\/([^\/]*\.)?goldshop\.freehostia\.com
+https?:\/\/([^\/]*\.)?golenord\.dl\.pl
+https?:\/\/([^\/]*\.)?goler-sor1z\.blogspot\.com
+https?:\/\/([^\/]*\.)?golfhq\.org
+https?:\/\/([^\/]*\.)?golfshoot\.com
+https?:\/\/([^\/]*\.)?gololed\.blogspot\.com
+https?:\/\/([^\/]*\.)?gomy0\.szm\.sk
+https?:\/\/([^\/]*\.)?gonzo-movies-com-ez\.blogspot\.com
+https?:\/\/([^\/]*\.)?gonzo-movies-rkk5jq\.blogspot\.com
+https?:\/\/([^\/]*\.)?good568\.com
+https?:\/\/([^\/]*\.)?goodhealthjobs\.info
+https?:\/\/([^\/]*\.)?goodticket\.org
+https?:\/\/([^\/]*\.)?google-pharmacy\.com
+https?:\/\/([^\/]*\.)?google110\.yculblog\.com
+https?:\/\/([^\/]*\.)?googlepaiming\.ebloggy\.com
+https?:\/\/([^\/]*\.)?googletosh\.org
+https?:\/\/([^\/]*\.)?goporn\.info
+https?:\/\/([^\/]*\.)?gopremen\.dl\.pl
+https?:\/\/([^\/]*\.)?gor-richards-realm-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?gorillalinks-com-t77\.blogspot\.com
+https?:\/\/([^\/]*\.)?gorillashaman\.blogspot\.com
+https?:\/\/([^\/]*\.)?gorlum\.t35\.com
+https?:\/\/([^\/]*\.)?gorunger\.com
+https?:\/\/([^\/]*\.)?goxzk\.szm\.sk
+https?:\/\/([^\/]*\.)?gpdmr\.szm\.sk
+https?:\/\/([^\/]*\.)?gphv0\.szm\.sk
+https?:\/\/([^\/]*\.)?gplea\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gqnzzlu\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?graduate-schools\.hotmail\.ru
+https?:\/\/([^\/]*\.)?graduate1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?graduate2schools\.chat\.ru
+https?:\/\/([^\/]*\.)?graf\.pp\.ru
+https?:\/\/([^\/]*\.)?grammatica-inglese\.bb11\.info
+https?:\/\/([^\/]*\.)?gran-roques\.forumhst\.info
+https?:\/\/([^\/]*\.)?granny-boy-free-pic\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?granny-movie-thumb\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?grannyorgies-com-o1w34\.blogspot\.com
+https?:\/\/([^\/]*\.)?grannyorgies-com-ormpubp\.blogspot\.com
+https?:\/\/([^\/]*\.)?grannyorgies-com-r2on\.blogspot\.com
+https?:\/\/([^\/]*\.)?grannypictures-com-a2w1\.blogspot\.com
+https?:\/\/([^\/]*\.)?grannypictures-com-ak6273j85t\.blogspot\.com
+https?:\/\/([^\/]*\.)?grannyplanet-com-k1bea\.blogspot\.com
+https?:\/\/([^\/]*\.)?great-ass-gallery\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?greataftorless\.com
+https?:\/\/([^\/]*\.)?greatbmwclub\.cn
+https?:\/\/([^\/]*\.)?greatbmwparts\.cn
+https?:\/\/([^\/]*\.)?greatbudgetinn\.info
+https?:\/\/([^\/]*\.)?greathal\.com
+https?:\/\/([^\/]*\.)?greatinsurancedirect\.info
+https?:\/\/([^\/]*\.)?greatmercedescar\.info
+https?:\/\/([^\/]*\.)?greatpsychology\.info
+https?:\/\/([^\/]*\.)?greatusainternet\.info
+https?:\/\/([^\/]*\.)?green-gradens\.org
+https?:\/\/([^\/]*\.)?green-tea-300\.co\.nr
+https?:\/\/([^\/]*\.)?green-tea\.co\.nr
+https?:\/\/([^\/]*\.)?greentits-com-kr3h3787pt\.blogspot\.com
+https?:\/\/([^\/]*\.)?greentits-com-t8xf3x5\.blogspot\.com
+https?:\/\/([^\/]*\.)?greentits-com-tr242sh16\.blogspot\.com
+https?:\/\/([^\/]*\.)?greet\.ipupdater\.net
+https?:\/\/([^\/]*\.)?grgul\.szm\.sk
+https?:\/\/([^\/]*\.)?griev\.ipupdater\.com
+https?:\/\/([^\/]*\.)?griffeylaw\.com
+https?:\/\/([^\/]*\.)?grimasa\.republika\.pl
+https?:\/\/([^\/]*\.)?groovybus-com-cv8ry83\.blogspot\.com
+https?:\/\/([^\/]*\.)?groovybus-com-gy1258kur3\.blogspot\.com
+https?:\/\/([^\/]*\.)?groupforums\.com
+https?:\/\/([^\/]*\.)?groups-msn-com-masturbating-site-woman\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?groups\.ku\.edu
+https?:\/\/([^\/]*\.)?grrualca\.jconserv\.net
+https?:\/\/([^\/]*\.)?gsaxz\.szm\.sk
+https?:\/\/([^\/]*\.)?gsebook\.org
+https?:\/\/([^\/]*\.)?gsloi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gsuyfy2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gsxez\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gu-amateur-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?guangdianyuanjian\.dzsc\.com
+https?:\/\/([^\/]*\.)?gudtk\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?guess76\.blogspot\.com
+https?:\/\/([^\/]*\.)?guilty-until-proven-innocent\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?gumaxxx-com-e3748i87g\.blogspot\.com
+https?:\/\/([^\/]*\.)?gumaxxx-com-ow774pk74m\.blogspot\.com
+https?:\/\/([^\/]*\.)?gumybear\.php5\.cz
+https?:\/\/([^\/]*\.)?gunterdirect\.com
+https?:\/\/([^\/]*\.)?gunterlawoffice\.com
+https?:\/\/([^\/]*\.)?guruful\.stabilt\.se
+https?:\/\/([^\/]*\.)?guys-butt-fucking\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?gvfefn3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gwebsearch\.org
+https?:\/\/([^\/]*\.)?gwjsx\.szm\.sk
+https?:\/\/([^\/]*\.)?gxrd3\.szm\.sk
+https?:\/\/([^\/]*\.)?gyig3\.szm\.sk
+https?:\/\/([^\/]*\.)?gym-equipments\.org
+https?:\/\/([^\/]*\.)?gyzvpxl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gzmayz6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?gzvwa\.szm\.sk
+https?:\/\/([^\/]*\.)?h0vutok\.nokedem\.com
+https?:\/\/([^\/]*\.)?h15\.ru
+https?:\/\/([^\/]*\.)?h3as88dw\.info
+https?:\/\/([^\/]*\.)?habromjw\.dl\.pl
+https?:\/\/([^\/]*\.)?haemcurio\.0moola\.com
+https?:\/\/([^\/]*\.)?hahas\.info
+https?:\/\/([^\/]*\.)?hairy-ass-hole\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?hairy-chubby-gallery\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?hairy-leg-pic-woman\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hairy-milf-movie\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?hairydivas-com-hg2gvyc\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairydivas-t150c5gmf8\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairyerotica-com-i4fl2x\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairypinktacos-com-djl\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairypinktacos-com-hlnfq3rea2\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairypussypost-com-mk0ymrj\.blogspot\.com
+https?:\/\/([^\/]*\.)?hairypussypost-com-w6\.blogspot\.com
+https?:\/\/([^\/]*\.)?hal\.engr\.smu\.edu
+https?:\/\/([^\/]*\.)?halloween2006\.info
+https?:\/\/([^\/]*\.)?halx8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hamalo\.com
+https?:\/\/([^\/]*\.)?hamas2007\.republika\.pl
+https?:\/\/([^\/]*\.)?hand-job-movie-x-x-d\.blogspot\.com
+https?:\/\/([^\/]*\.)?hand-stained-xx\.blogspot\.com
+https?:\/\/([^\/]*\.)?hangzhau\.cn
+https?:\/\/([^\/]*\.)?hanksgalleries-com-b73flku8\.blogspot\.com
+https?:\/\/([^\/]*\.)?hanksgalleries-com-rtuvbgdl\.blogspot\.com
+https?:\/\/([^\/]*\.)?hanry\.stabilt\.se
+https?:\/\/([^\/]*\.)?haole\.cn
+https?:\/\/([^\/]*\.)?happy-pharma\.com
+https?:\/\/([^\/]*\.)?hard-disk-esterno\.hostzz\.info
+https?:\/\/([^\/]*\.)?hard-disk-esterno\.ll11\.info
+https?:\/\/([^\/]*\.)?hardbabes-com-e061obbg\.blogspot\.com
+https?:\/\/([^\/]*\.)?hardbabes-com-e588iqk\.blogspot\.com
+https?:\/\/([^\/]*\.)?hardcore-amateur-thumbnail\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hardcore-asian-anal\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?hardcore-dancing-site-myspace-com\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hardcore-free-porn-xx\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?hardcore-lesbian-pussy-eating\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hardcore-mature-sex-young\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?hardcore-porn-clip-info73q\.blogspot\.com
+https?:\/\/([^\/]*\.)?hardcore-sex-black-on-white\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?hardcore-xxx-video\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hardcoregangstas\.hrable\.dtdns\.net
+https?:\/\/([^\/]*\.)?hardhut-com-ao8renz\.blogspot\.com
+https?:\/\/([^\/]*\.)?hardhut-com-tgi\.blogspot\.com
+https?:\/\/([^\/]*\.)?hardhut-com-wb8m8\.blogspot\.com
+https?:\/\/([^\/]*\.)?hargd\.szm\.sk
+https?:\/\/([^\/]*\.)?harley-davidson-womens-boot\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?harted\.hostpresso\.com
+https?:\/\/([^\/]*\.)?haungsanok\.com
+https?:\/\/([^\/]*\.)?hawaiimortgage-x\.com
+https?:\/\/([^\/]*\.)?hawbij4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hawkesnest\.com
+https?:\/\/([^\/]*\.)?hazell-keeley-sex-video-bb-bb-f\.blogspot\.com
+https?:\/\/([^\/]*\.)?hbyfq\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?hcgs\.unh\.edu
+https?:\/\/([^\/]*\.)?hclt-events\.blogspot\.com
+https?:\/\/([^\/]*\.)?hdbj\.com\.cn
+https?:\/\/([^\/]*\.)?hdchina\.com
+https?:\/\/([^\/]*\.)?hdlwc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hdndeuw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?he-wells\.blogspot\.com
+https?:\/\/([^\/]*\.)?he-wendy\.blogspot\.com
+https?:\/\/([^\/]*\.)?head-masturbating-shower-woman\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?health-insurance-0\.blogspot\.com
+https?:\/\/([^\/]*\.)?health-insurance-save\.com
+https?:\/\/([^\/]*\.)?health-jack\.com
+https?:\/\/([^\/]*\.)?healthinsurance-x\.com
+https?:\/\/([^\/]*\.)?healthprocare\.info
+https?:\/\/([^\/]*\.)?hebei-railings\.cn
+https?:\/\/([^\/]*\.)?hecarabi\.info
+https?:\/\/([^\/]*\.)?hefo-adrianna\.blogspot\.com
+https?:\/\/([^\/]*\.)?hek-tshirthell-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?hellim\.3x\.ro
+https?:\/\/([^\/]*\.)?heloween\.php5\.cz
+https?:\/\/([^\/]*\.)?hemilton\.stabilt\.se
+https?:\/\/([^\/]*\.)?hengxinbanjia\.com
+https?:\/\/([^\/]*\.)?her-first-anal-fucking\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?her-first-cum\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?her-first-lesbian-sex-kylie\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?her-first-small-dick\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?her-sweet-ass\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?here\.com\.cn
+https?:\/\/([^\/]*\.)?hereandnow0\.com
+https?:\/\/([^\/]*\.)?hereistheporn-com-abg\.blogspot\.com
+https?:\/\/([^\/]*\.)?hereistheporn-com-wxu4\.blogspot\.com
+https?:\/\/([^\/]*\.)?herpes\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?herufip\.info
+https?:\/\/([^\/]*\.)?heschlos\.dl\.pl
+https?:\/\/([^\/]*\.)?hevo-alannah\.blogspot\.com
+https?:\/\/([^\/]*\.)?hexingqc\.com
+https?:\/\/([^\/]*\.)?hfpm\.com
+https?:\/\/([^\/]*\.)?hfsflm0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hfslink\.com
+https?:\/\/([^\/]*\.)?hgdpy\.szm\.sk
+https?:\/\/([^\/]*\.)?hgh\.rx4\.org
+https?:\/\/([^\/]*\.)?hgqz5\.szm\.sk
+https?:\/\/([^\/]*\.)?hguldxxe-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?hgyxs\.szm\.sk
+https?:\/\/([^\/]*\.)?hhcoh\.szm\.sk
+https?:\/\/([^\/]*\.)?hhlive\.info
+https?:\/\/([^\/]*\.)?hhpump\.com
+https?:\/\/([^\/]*\.)?hiadadar\.forumzen\.com
+https?:\/\/([^\/]*\.)?higarret\.forumzen\.com
+https?:\/\/([^\/]*\.)?high-heel-western-boot\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?high-school-diploma\.hotmail\.ru
+https?:\/\/([^\/]*\.)?high1school4dipl\.chat\.ru
+https?:\/\/([^\/]*\.)?highclassblogs\.com
+https?:\/\/([^\/]*\.)?hilarykallin\.50webs\.org
+https?:\/\/([^\/]*\.)?hilipa\.com
+https?:\/\/([^\/]*\.)?hilipy\.com
+https?:\/\/([^\/]*\.)?hillery\.republika\.pl
+https?:\/\/([^\/]*\.)?himd4\.szm\.sk
+https?:\/\/([^\/]*\.)?himp3\.biz
+https?:\/\/([^\/]*\.)?hinn8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hioctane-com-dlmv6g7y\.blogspot\.com
+https?:\/\/([^\/]*\.)?hioctane-com-dq4opea\.blogspot\.com
+https?:\/\/([^\/]*\.)?hioctane-com-h0un\.blogspot\.com
+https?:\/\/([^\/]*\.)?hioctane-com-toxuz\.blogspot\.com
+https?:\/\/([^\/]*\.)?hipoldlady\.com
+https?:\/\/([^\/]*\.)?hirudaco\.forumzen\.com
+https?:\/\/([^\/]*\.)?his13lessings\.blogspot\.com
+https?:\/\/([^\/]*\.)?history-of-condom\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?hisyma\.dl\.pl
+https?:\/\/([^\/]*\.)?hitm4n\.blogspot\.com
+https?:\/\/([^\/]*\.)?hiv123\.com
+https?:\/\/([^\/]*\.)?hiv987\.zj\.com
+https?:\/\/([^\/]*\.)?hjia\.ebloggy\.com
+https?:\/\/([^\/]*\.)?hjolmed\.com
+https?:\/\/([^\/]*\.)?hkcompanyforyou\.cn
+https?:\/\/([^\/]*\.)?hkfeng\.com
+https?:\/\/([^\/]*\.)?hkwei\.com\.cn
+https?:\/\/([^\/]*\.)?hlemizd\.republika\.pl
+https?:\/\/([^\/]*\.)?hlusky\.republika\.pl
+https?:\/\/([^\/]*\.)?hlxn6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hmppbw-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?hnxsv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ho-big-clip-tit-video-hox\.blogspot\.com
+https?:\/\/([^\/]*\.)?hobaysin\.ifrance\.com
+https?:\/\/([^\/]*\.)?hocohn\.dl\.pl
+https?:\/\/([^\/]*\.)?hohoo\.cn
+https?:\/\/([^\/]*\.)?hold-em-play\.com
+https?:\/\/([^\/]*\.)?hold-em-play\.net
+https?:\/\/([^\/]*\.)?hold-em-winner\.us
+https?:\/\/([^\/]*\.)?home-made-porn-clip-blogt7y\.blogspot\.com
+https?:\/\/([^\/]*\.)?home-mortgages\.bigsitecity\.com
+https?:\/\/([^\/]*\.)?home-sauna\.boom\.ru
+https?:\/\/([^\/]*\.)?home-secure\.org
+https?:\/\/([^\/]*\.)?home-sex-video-t1ux7\.blogspot\.com
+https?:\/\/([^\/]*\.)?home-spire\.com
+https?:\/\/([^\/]*\.)?home\.graffiti\.net
+https?:\/\/([^\/]*\.)?home\.sailormoon\.com
+https?:\/\/([^\/]*\.)?home2-school\.boom\.ru
+https?:\/\/([^\/]*\.)?homeequitylineofcredit-x\.com
+https?:\/\/([^\/]*\.)?homeequitylineofcreditlenders\.com
+https?:\/\/([^\/]*\.)?homeequityloan-now\.com
+https?:\/\/([^\/]*\.)?homeequityloans-now\.com
+https?:\/\/([^\/]*\.)?homeequityloans-x\.com
+https?:\/\/([^\/]*\.)?homefinance-x\.com
+https?:\/\/([^\/]*\.)?homeloan-now\.com
+https?:\/\/([^\/]*\.)?homeloanlogic\.com
+https?:\/\/([^\/]*\.)?homeloans-now\.com
+https?:\/\/([^\/]*\.)?homemade-mature-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?homemade-porn-clip-infoywx\.blogspot\.com
+https?:\/\/([^\/]*\.)?homesafterbankruptcy\.info
+https?:\/\/([^\/]*\.)?homesbysellers\.com
+https?:\/\/([^\/]*\.)?homesbysellers\.net
+https?:\/\/([^\/]*\.)?homesexvideo\.org
+https?:\/\/([^\/]*\.)?hometowngirls\.be
+https?:\/\/([^\/]*\.)?hometwat-com-hrmml\.blogspot\.com
+https?:\/\/([^\/]*\.)?homos\.php5\.cz
+https?:\/\/([^\/]*\.)?homunkulus\.info
+https?:\/\/([^\/]*\.)?homunkulus\.republika\.pl
+https?:\/\/([^\/]*\.)?homy\.etowns\.net
+https?:\/\/([^\/]*\.)?honba\.republika\.pl
+https?:\/\/([^\/]*\.)?honey99\.cn
+https?:\/\/([^\/]*\.)?honey99\.com
+https?:\/\/([^\/]*\.)?hongjianlaw\.com
+https?:\/\/([^\/]*\.)?hongqi120\.com
+https?:\/\/([^\/]*\.)?hoodia\.269g\.net
+https?:\/\/([^\/]*\.)?hoodiadiet\.269g\.net
+https?:\/\/([^\/]*\.)?hopemarry\.com
+https?:\/\/([^\/]*\.)?horizondrugs\.zaclona\.yi\.org
+https?:\/\/([^\/]*\.)?hornina\.net
+https?:\/\/([^\/]*\.)?horny-butt-sex\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?horny-grannysex-bipiw\.blogspot\.com
+https?:\/\/([^\/]*\.)?horny-hailey\.hostithere\.org
+https?:\/\/([^\/]*\.)?hornybanana-com-mg\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornybanana-com-to0b\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornycrocodile-com-c37c85\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornycrocodile-com-gmb5ev\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornycrocodile-com-gv3x3oxt\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornyduck-com-esta\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornyduck-com-oix7y2v\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornykaren-com-b16sk5\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornykaren-com-bl4rw4\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornykaren-com-rg034\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornyspanishflies-com-c0cx6a3bo\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornyspanishflies-com-ks5856vf77\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornytiger-com-d3\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornytiger-com-il0x678fwr\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornywolf-com-m27\.blogspot\.com
+https?:\/\/([^\/]*\.)?hornywolf-com-tqwaj\.blogspot\.com
+https?:\/\/([^\/]*\.)?hospitalonline\.cn
+https?:\/\/([^\/]*\.)?host-page\.com
+https?:\/\/([^\/]*\.)?hosting1999\.com
+https?:\/\/([^\/]*\.)?hosting41\.com
+https?:\/\/([^\/]*\.)?hot-anal-sex-com\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hot-asian-cock\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?hot-ass-anal\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?hot-blonde-babe-gallery\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?hot-brazilian-ass\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?hot-bubble-butt-girl\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?hot-cheerleader-getting-fucked\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?hot-dating-chat\.ifastnet\.com
+https?:\/\/([^\/]*\.)?hot-latino-ass\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?hot-mature-sex-uk-woman\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?hot-mature-xxx\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?hot-mom-site-myspace-com\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?hot-nude-blonde-chick\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?hot-pussy-tit-ass\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?hot-sex-video-bb-bb-v\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotbigmovies-com-cd\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotbigmovies-com-k62que75im\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotchina\.org
+https?:\/\/([^\/]*\.)?hotel-centro-benessere\.host24h\.info
+https?:\/\/([^\/]*\.)?hotel-offerta\.nnme\.info
+https?:\/\/([^\/]*\.)?hotel-shop\.info
+https?:\/\/([^\/]*\.)?hotelsaccommodations\.info
+https?:\/\/([^\/]*\.)?hotfunhouse-com-pevuv\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotfunhouse-com-r5530\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotgirlsplayroom-com-dl0q21\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotgirlsplayroom-com-isnkeded\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotmoko\.info
+https?:\/\/([^\/]*\.)?hotorange-net-ms\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotpapai-com-hoc3g\.blogspot\.com
+https?:\/\/([^\/]*\.)?hotty-x\.com
+https?:\/\/([^\/]*\.)?hottystop-com-a252gugtk\.blogspot\.com
+https?:\/\/([^\/]*\.)?hottystop-com-grn\.blogspot\.com
+https?:\/\/([^\/]*\.)?house-15\.jeepsyc\.be
+https?:\/\/([^\/]*\.)?houses-bahamas\.ligamic\.be
+https?:\/\/([^\/]*\.)?housewifeaction-com-evv\.blogspot\.com
+https?:\/\/([^\/]*\.)?housewifeaction-com-o6z0yrnat\.blogspot\.com
+https?:\/\/([^\/]*\.)?housewifeaction-com-ob85\.blogspot\.com
+https?:\/\/([^\/]*\.)?hovadko\.isuisse\.com
+https?:\/\/([^\/]*\.)?hovass\.com
+https?:\/\/([^\/]*\.)?hovi-albatross\.blogspot\.com
+https?:\/\/([^\/]*\.)?how-to-catch-a-cheating-spouse\.com
+https?:\/\/([^\/]*\.)?how-to-make-a-boot-disk-on-win-xp\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?how-to-make-a-boot-disk\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?how-to-make-a-cock-ring\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?hppr7\.szm\.sk
+https?:\/\/([^\/]*\.)?hpua6\.szm\.sk
+https?:\/\/([^\/]*\.)?hpwe6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hq-casino\.org
+https?:\/\/([^\/]*\.)?hq-teens-com-aq\.blogspot\.com
+https?:\/\/([^\/]*\.)?hq-teens-com-w2opp2\.blogspot\.com
+https?:\/\/([^\/]*\.)?hq\.left-page\.com
+https?:\/\/([^\/]*\.)?hqgal-com-eu7gbk1o\.blogspot\.com
+https?:\/\/([^\/]*\.)?hqgal-com-ilxpxi0\.blogspot\.com
+https?:\/\/([^\/]*\.)?hqmovs-com-k31h4x37df\.blogspot\.com
+https?:\/\/([^\/]*\.)?hqmovs-com-tiou81\.blogspot\.com
+https?:\/\/([^\/]*\.)?hqmovs-com-ts5\.blogspot\.com
+https?:\/\/([^\/]*\.)?hrable\.ostabil\.nu
+https?:\/\/([^\/]*\.)?hrhbchj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hromotlk\.asp2\.cz
+https?:\/\/([^\/]*\.)?hrusky\.dtdns\.net
+https?:\/\/([^\/]*\.)?hscrza1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ht120\.com
+https?:\/\/([^\/]*\.)?htejj\.szm\.sk
+https?:\/\/([^\/]*\.)?huaeq\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?huapatossu\.blogspot\.com
+https?:\/\/([^\/]*\.)?huataix\.net
+https?:\/\/([^\/]*\.)?hubo-aileen\.blogspot\.com
+https?:\/\/([^\/]*\.)?huem-polbu\.netfirms\.com
+https?:\/\/([^\/]*\.)?huge-cock-shemale\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?huge-dick-anal\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?huge-dildo-fucking\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?huge-mexican-ass\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?huge-sexy-boob\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?huge-white-dick\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?hulio\.asp2\.cz
+https?:\/\/([^\/]*\.)?hulks\.info
+https?:\/\/([^\/]*\.)?hummerworldusa\.info
+https?:\/\/([^\/]*\.)?hupa4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hurvinek\.isuisse\.com
+https?:\/\/([^\/]*\.)?huspinina\.com
+https?:\/\/([^\/]*\.)?hutwistina\.com
+https?:\/\/([^\/]*\.)?huynani\.mpage\.jp
+https?:\/\/([^\/]*\.)?hvebjr2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hver5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hvlnb\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?hwantiig-yg\.blogspot\.com
+https?:\/\/([^\/]*\.)?hwcw4\.szm\.sk
+https?:\/\/([^\/]*\.)?hwhhw\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?hwkxt\.szm\.sk
+https?:\/\/([^\/]*\.)?hxbqpz3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?hxlll\.net
+https?:\/\/([^\/]*\.)?hydrochloride-tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?hydrocodone-911\.coz\.in
+https?:\/\/([^\/]*\.)?hydrocodone-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?hydrocodone-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?hydrocodone-gs\.net\.tc
+https?:\/\/([^\/]*\.)?hydrocodone-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?hydrocodone\.cheapills\.info
+https?:\/\/([^\/]*\.)?hydrocodone\.conto\.pl
+https?:\/\/([^\/]*\.)?hydrocodone\.esguay\.com
+https?:\/\/([^\/]*\.)?hydrocodone\.fws1\.com
+https?:\/\/([^\/]*\.)?hydrocodone\.guu\.pl
+https?:\/\/([^\/]*\.)?hydrocodone\.presteert\.nl
+https?:\/\/([^\/]*\.)?hydrocodone\.slyip\.net
+https?:\/\/([^\/]*\.)?hydrocodonebxs\.blogspot\.com
+https?:\/\/([^\/]*\.)?hydrocodoneq\.phpbbx\.de
+https?:\/\/([^\/]*\.)?hydrocodonerx\.weboficial\.com
+https?:\/\/([^\/]*\.)?hyip\.fanforum\.cc
+https?:\/\/([^\/]*\.)?hz7\.org
+https?:\/\/([^\/]*\.)?hzkap\.szm\.sk
+https?:\/\/([^\/]*\.)?hzmeitai\.com
+https?:\/\/([^\/]*\.)?hzui8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?i-truepoker\.com
+https?:\/\/([^\/]*\.)?iactive\.com\.cn
+https?:\/\/([^\/]*\.)?iapon\.galeon\.com
+https?:\/\/([^\/]*\.)?ibizababes-com-tr\.blogspot\.com
+https?:\/\/([^\/]*\.)?ic37\.com
+https?:\/\/([^\/]*\.)?icdufetc\.forumzen\.com
+https?:\/\/([^\/]*\.)?ickaboo\.com
+https?:\/\/([^\/]*\.)?icnfr\.szm\.sk
+https?:\/\/([^\/]*\.)?ict\.188info\.com
+https?:\/\/([^\/]*\.)?idahomortgage-x\.com
+https?:\/\/([^\/]*\.)?idc2008\.cn
+https?:\/\/([^\/]*\.)?idealbabes-net-r5x1puaah0\.blogspot\.com
+https?:\/\/([^\/]*\.)?iditarodhumor\.info
+https?:\/\/([^\/]*\.)?iehf\.blogspot\.com
+https?:\/\/([^\/]*\.)?iehffy8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?iehzup8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ifdbx\.szm\.sk
+https?:\/\/([^\/]*\.)?ifmnqm6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ifyj2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ihavenourl\.com
+https?:\/\/([^\/]*\.)?ihomebroker\.com
+https?:\/\/([^\/]*\.)?ihrd\.blogspot\.com
+https?:\/\/([^\/]*\.)?iiak2\.szm\.sk
+https?:\/\/([^\/]*\.)?iio91\.net
+https?:\/\/([^\/]*\.)?iisqvkk\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?iitop\.info
+https?:\/\/([^\/]*\.)?ikoxf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?il4unu\.com
+https?:\/\/([^\/]*\.)?ilflz\.szm\.sk
+https?:\/\/([^\/]*\.)?ilfwvf2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?illcom\.com
+https?:\/\/([^\/]*\.)?illinoismortgage-x\.com
+https?:\/\/([^\/]*\.)?ilove-movies-com-w5nx\.blogspot\.com
+https?:\/\/([^\/]*\.)?ilove-movies-com-wrde\.blogspot\.com
+https?:\/\/([^\/]*\.)?iloveubaby\.info
+https?:\/\/([^\/]*\.)?iltbl\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?im-really-cool\.blogspot\.com
+https?:\/\/([^\/]*\.)?imitrex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?imitrexinjections\.sblog\.cz
+https?:\/\/([^\/]*\.)?immagine-sfondo-hello-kitty\.i111i\.info
+https?:\/\/([^\/]*\.)?imposingimo\.com
+https?:\/\/([^\/]*\.)?impossiblemale61\.blogspot\.com
+https?:\/\/([^\/]*\.)?imteen\.attacke\.ch
+https?:\/\/([^\/]*\.)?incontri-amore\.19mb\.info
+https?:\/\/([^\/]*\.)?incontri-amore\.you-bizz\.info
+https?:\/\/([^\/]*\.)?indian-porn-clip-zone5j4\.blogspot\.com
+https?:\/\/([^\/]*\.)?indian-porn-video-zo\.blogspot\.com
+https?:\/\/([^\/]*\.)?indian-sex-fuck\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?indianamortgage-x\.com
+https?:\/\/([^\/]*\.)?indienudes-com-h4owj60\.blogspot\.com
+https?:\/\/([^\/]*\.)?infinitemonies\.com
+https?:\/\/([^\/]*\.)?infinitieyewear\.info
+https?:\/\/([^\/]*\.)?infinitims\.info
+https?:\/\/([^\/]*\.)?infinitipianeta\.info
+https?:\/\/([^\/]*\.)?infoarena\.info
+https?:\/\/([^\/]*\.)?infospm\.21publish\.de
+https?:\/\/([^\/]*\.)?infty\.net
+https?:\/\/([^\/]*\.)?injecfu\.com
+https?:\/\/([^\/]*\.)?injxx\.szm\.sk
+https?:\/\/([^\/]*\.)?innocent-ass\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?innocent-busty-teen\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?innocent-eve-pic\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?innocentdream-com-da\.blogspot\.com
+https?:\/\/([^\/]*\.)?inqygjz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?inrhqi3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?insidethecloset\.com
+https?:\/\/([^\/]*\.)?inspectorgalleries-com-k5\.blogspot\.com
+https?:\/\/([^\/]*\.)?insurance-leader\.com
+https?:\/\/([^\/]*\.)?insurance-top\.com
+https?:\/\/([^\/]*\.)?insurance\.topforyou\.net
+https?:\/\/([^\/]*\.)?internal-ass-cum-shot\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?international-dating\.sexnation\.info
+https?:\/\/([^\/]*\.)?interracial-gang-bang-crew\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?interracial-gay-anal-sex\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?interracial-lesbian-domination\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?interracial-teen-fucking\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?interracialpicsuux\.blogspot\.com
+https?:\/\/([^\/]*\.)?intersea-fdn\.com
+https?:\/\/([^\/]*\.)?inthevip-com-bc1b0kb0\.blogspot\.com
+https?:\/\/([^\/]*\.)?inthevip-com-bvw\.blogspot\.com
+https?:\/\/([^\/]*\.)?inthevip-com-rso\.blogspot\.com
+https?:\/\/([^\/]*\.)?intll\.com
+https?:\/\/([^\/]*\.)?intra\.som\.umass\.edu
+https?:\/\/([^\/]*\.)?intranet\.education\.umn\.edu
+https?:\/\/([^\/]*\.)?invest1\.org\.ua
+https?:\/\/([^\/]*\.)?ioauaq0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ionamin\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ionizatorit\.info
+https?:\/\/([^\/]*\.)?iowamortgage-x\.com
+https?:\/\/([^\/]*\.)?ipeddle\.com
+https?:\/\/([^\/]*\.)?ipha4\.szm\.sk
+https?:\/\/([^\/]*\.)?ipod-application\.info
+https?:\/\/([^\/]*\.)?ipokea\.com
+https?:\/\/([^\/]*\.)?iqzyk\.szm\.sk
+https?:\/\/([^\/]*\.)?iradorame\.site\.voila\.fr
+https?:\/\/([^\/]*\.)?ircv6\.szm\.sk
+https?:\/\/([^\/]*\.)?irenefah-gijul\.blogspot\.com
+https?:\/\/([^\/]*\.)?irishlover\.info
+https?:\/\/([^\/]*\.)?iron-island\.blogspot\.com
+https?:\/\/([^\/]*\.)?ironing-boards\.haemati\.be
+https?:\/\/([^\/]*\.)?irqs8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?isceby0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?islands-tour\.globaltr\.info
+https?:\/\/([^\/]*\.)?isoway-yoga\.com
+https?:\/\/([^\/]*\.)?ispycameltoe-com-cugh6n\.blogspot\.com
+https?:\/\/([^\/]*\.)?ispycameltoe-com-g4s2f7vevs\.blogspot\.com
+https?:\/\/([^\/]*\.)?italiagame\.org
+https?:\/\/([^\/]*\.)?italianosito\.info
+https?:\/\/([^\/]*\.)?italika\.info
+https?:\/\/([^\/]*\.)?italizzhot\.info
+https?:\/\/([^\/]*\.)?italoman\.info
+https?:\/\/([^\/]*\.)?italytraffic\.info
+https?:\/\/([^\/]*\.)?itchy-skin\.nm\.ru
+https?:\/\/([^\/]*\.)?itchy_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?itcweb\.ecsu\.edu
+https?:\/\/([^\/]*\.)?itdk0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?item4u\.com
+https?:\/\/([^\/]*\.)?itgeecna\.forumzen\.com
+https?:\/\/([^\/]*\.)?itp\.nyu\.edu
+https?:\/\/([^\/]*\.)?itpvewa\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?itsum\.com\.cn
+https?:\/\/([^\/]*\.)?ityh1\.szm\.sk
+https?:\/\/([^\/]*\.)?iugfsvv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?iuzjbpu\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ivana-fuck-a-lot\.hoffer\.ipupdater\.com
+https?:\/\/([^\/]*\.)?ivoyt\.blogspot\.com
+https?:\/\/([^\/]*\.)?ivs\.com\.cn
+https?:\/\/([^\/]*\.)?iwahigux\.info
+https?:\/\/([^\/]*\.)?iwantmature-com-mme\.blogspot\.com
+https?:\/\/([^\/]*\.)?iwuy8\.szm\.sk
+https?:\/\/([^\/]*\.)?ixiixi-com-guy\.blogspot\.com
+https?:\/\/([^\/]*\.)?ixllvdi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ixnl4\.szm\.sk
+https?:\/\/([^\/]*\.)?ixth4\.szm\.sk
+https?:\/\/([^\/]*\.)?izizyu-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?izui7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ja-rule-ringtonezad\.blogspot\.com
+https?:\/\/([^\/]*\.)?jablicko\.yi\.org
+https?:\/\/([^\/]*\.)?jablonec\.republika\.pl
+https?:\/\/([^\/]*\.)?jadelrel\.goodbb\.net
+https?:\/\/([^\/]*\.)?jagast\.com
+https?:\/\/([^\/]*\.)?jahmpf3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jaja-jak-globusy\.com
+https?:\/\/([^\/]*\.)?jajpip5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jamies-galleries-com-dr7itf8c\.blogspot\.com
+https?:\/\/([^\/]*\.)?jamm\.host-page\.com
+https?:\/\/([^\/]*\.)?janelolo\.fr-bb\.com
+https?:\/\/([^\/]*\.)?janet-jackson-boob-picture\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?janisy\.republika\.pl
+https?:\/\/([^\/]*\.)?jantiq\.com
+https?:\/\/([^\/]*\.)?jaoqmw1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?japan-girl-sex\.com
+https?:\/\/([^\/]*\.)?japan-whores-com-e28dwa2vvb\.blogspot\.com
+https?:\/\/([^\/]*\.)?japan-whores-com-elay3rzsu\.blogspot\.com
+https?:\/\/([^\/]*\.)?japanese-geisha-girl\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?japanese-teacher-fuck\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?japanese158\.com
+https?:\/\/([^\/]*\.)?japanshanye\.com
+https?:\/\/([^\/]*\.)?jarella\.goodbb\.net
+https?:\/\/([^\/]*\.)?jasara-com-t6fn6k8\.blogspot\.com
+https?:\/\/([^\/]*\.)?jasara-com-two5\.blogspot\.com
+https?:\/\/([^\/]*\.)?jasara-com-wibeh\.blogspot\.com
+https?:\/\/([^\/]*\.)?jastim\.com
+https?:\/\/([^\/]*\.)?jbixc\.szm\.sk
+https?:\/\/([^\/]*\.)?jblt7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jcbbxb0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jdmz\.com\.cn
+https?:\/\/([^\/]*\.)?jeanniexong\.blogspot\.com
+https?:\/\/([^\/]*\.)?jebmd\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?jed-two-lips-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?jeffrorocks21\.blogspot\.com
+https?:\/\/([^\/]*\.)?jelatko\.republika\.pl
+https?:\/\/([^\/]*\.)?jelito\.stabilt\.se
+https?:\/\/([^\/]*\.)?jennifer-lopez-music-photo\.blogspot\.com
+https?:\/\/([^\/]*\.)?jennifer-lopez-ringtoneqnf\.blogspot\.com
+https?:\/\/([^\/]*\.)?jennysbookmarks-com-kcr\.blogspot\.com
+https?:\/\/([^\/]*\.)?jessica-alba-jly9\.blogspot\.com
+https?:\/\/([^\/]*\.)?jessiethebestie\.blogspot\.com
+https?:\/\/([^\/]*\.)?jesuisleflet\.blogspot\.com
+https?:\/\/([^\/]*\.)?jet-cold-hard-bitch-album-version-lyric\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?jetoo\.cn
+https?:\/\/([^\/]*\.)?jeun\.fr
+https?:\/\/([^\/]*\.)?jewels667\.blogspot\.com
+https?:\/\/([^\/]*\.)?jezgy\.szm\.sk
+https?:\/\/([^\/]*\.)?jfmr\.com
+https?:\/\/([^\/]*\.)?jgeqhqa\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jhrxa\.szm\.sk
+https?:\/\/([^\/]*\.)?jhsy0\.szm\.sk
+https?:\/\/([^\/]*\.)?jiahuajipiao\.com
+https?:\/\/([^\/]*\.)?jiaju88\.com
+https?:\/\/([^\/]*\.)?jianfei\.cc
+https?:\/\/([^\/]*\.)?jianzhi168\.com
+https?:\/\/([^\/]*\.)?jiaza\.szm\.sk
+https?:\/\/([^\/]*\.)?jiboki-free-lesbian-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?jichengdianlu\.dzsc\.com
+https?:\/\/([^\/]*\.)?jidianqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?jieyan\.com\.cn
+https?:\/\/([^\/]*\.)?jiguang\.org
+https?:\/\/([^\/]*\.)?jijijo\.com
+https?:\/\/([^\/]*\.)?jimbo\.php5\.cz
+https?:\/\/([^\/]*\.)?jimmccarthy\.org\.uk
+https?:\/\/([^\/]*\.)?jimmini\.blogspot\.com
+https?:\/\/([^\/]*\.)?jinchengjipiao\.com
+https?:\/\/([^\/]*\.)?jinghuigift\.com
+https?:\/\/([^\/]*\.)?jingzhi-life\.com
+https?:\/\/([^\/]*\.)?jipiao\.51mp4mp3\.com
+https?:\/\/([^\/]*\.)?jipiaoweb\.co
+https?:\/\/([^\/]*\.)?jipiaoweb\.com
+https?:\/\/([^\/]*\.)?jiuwu\.com
+https?:\/\/([^\/]*\.)?jizzhut-com-oq4zf\.blogspot\.com
+https?:\/\/([^\/]*\.)?jizzonline-com-a3h52c1\.blogspot\.com
+https?:\/\/([^\/]*\.)?jizzonline-cz0h5y1nm\.blogspot\.com
+https?:\/\/([^\/]*\.)?jjfchljumf-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?jjuwt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jkpotv-free-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?jlhtj\.szm\.sk
+https?:\/\/([^\/]*\.)?jlibhe9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jmjx7\.szm\.sk
+https?:\/\/([^\/]*\.)?jnbxqy5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jnk713\.ifrance\.com
+https?:\/\/([^\/]*\.)?jnxx3\.szm\.sk
+https?:\/\/([^\/]*\.)?jobecraf\.dl\.pl
+https?:\/\/([^\/]*\.)?jobruler\.com
+https?:\/\/([^\/]*\.)?jocdy\.szm\.sk
+https?:\/\/([^\/]*\.)?jodofiv-free-fat-ass-mo-t\.blogspot\.com
+https?:\/\/([^\/]*\.)?johatch\.ifrance\.com
+https?:\/\/([^\/]*\.)?joia\.com
+https?:\/\/([^\/]*\.)?jointroompia\.com
+https?:\/\/([^\/]*\.)?jokerupot\.blogspot\.com
+https?:\/\/([^\/]*\.)?jon-a-ross\.blogspot\.com
+https?:\/\/([^\/]*\.)?jonn22\.com
+https?:\/\/([^\/]*\.)?jonsmovies-com-b23k3tx4h\.blogspot\.com
+https?:\/\/([^\/]*\.)?joperan\.org
+https?:\/\/([^\/]*\.)?journal\.eepis-its\.edu
+https?:\/\/([^\/]*\.)?joycclx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jozin\.php5\.cz
+https?:\/\/([^\/]*\.)?jp\.zxvo\.com
+https?:\/\/([^\/]*\.)?jpeghunter-com-h6rb6\.blogspot\.com
+https?:\/\/([^\/]*\.)?jpeghunter-com-hsa0g47vew\.blogspot\.com
+https?:\/\/([^\/]*\.)?jpha9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jplm\.cn
+https?:\/\/([^\/]*\.)?jptrip\.org
+https?:\/\/([^\/]*\.)?jqri2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?jrcreations\.com
+https?:\/\/([^\/]*\.)?jrqzje5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jsjgdpg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jsyuanyang\.com
+https?:\/\/([^\/]*\.)?jtdh\.fuwuqituoguan\.com
+https?:\/\/([^\/]*\.)?jtgq3\.szm\.sk
+https?:\/\/([^\/]*\.)?jtoph\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?jtut6\.szm\.sk
+https?:\/\/([^\/]*\.)?ju-alexis\.blogspot\.com
+https?:\/\/([^\/]*\.)?ju-free-porn-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?juanyuancailiao\.dzsc\.com
+https?:\/\/([^\/]*\.)?juggcrew-com-r4xwgs\.blogspot\.com
+https?:\/\/([^\/]*\.)?jugni\.50webs\.org
+https?:\/\/([^\/]*\.)?juicygals-com-c8o\.blogspot\.com
+https?:\/\/([^\/]*\.)?juliatalbot\.50webs\.org
+https?:\/\/([^\/]*\.)?julietsold\.info
+https?:\/\/([^\/]*\.)?jumasd\.com
+https?:\/\/([^\/]*\.)?jumtan\.com
+https?:\/\/([^\/]*\.)?junenanney\.site\.io
+https?:\/\/([^\/]*\.)?junky\.phpbb2\.us
+https?:\/\/([^\/]*\.)?junyuan\.com\.cn
+https?:\/\/([^\/]*\.)?jupka97\.blogspot\.com
+https?:\/\/([^\/]*\.)?juruortr\.jconserv\.net
+https?:\/\/([^\/]*\.)?juse-active\.blogspot\.com
+https?:\/\/([^\/]*\.)?justanotherebel\.blogspot\.com
+https?:\/\/([^\/]*\.)?justkor\.com
+https?:\/\/([^\/]*\.)?juyi6\.szm\.sk
+https?:\/\/([^\/]*\.)?jwfj8\.szm\.sk
+https?:\/\/([^\/]*\.)?jwk\.cn
+https?:\/\/([^\/]*\.)?jxxfl\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?jytpn\.szm\.sk
+https?:\/\/([^\/]*\.)?jzllteva-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?jzoqn\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?k-teens-more\.blogspot\.com
+https?:\/\/([^\/]*\.)?k98you\.info
+https?:\/\/([^\/]*\.)?kabierac\.blogspot\.com
+https?:\/\/([^\/]*\.)?kaejsi\.com
+https?:\/\/([^\/]*\.)?kaiguan\.dzsc\.com
+https?:\/\/([^\/]*\.)?kaimitech\.com
+https?:\/\/([^\/]*\.)?kaizokukitsune\.blogspot\.com
+https?:\/\/([^\/]*\.)?kakaloo\.dtdns\.net
+https?:\/\/([^\/]*\.)?kalbongzig64\.blogspot\.com
+https?:\/\/([^\/]*\.)?kamachair\.info
+https?:\/\/([^\/]*\.)?kansasmortgage-x\.com
+https?:\/\/([^\/]*\.)?kaopowh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kardashian\.6\.forumer\.com
+https?:\/\/([^\/]*\.)?karwee\.com\.tw
+https?:\/\/([^\/]*\.)?katal0g\.ru
+https?:\/\/([^\/]*\.)?kates-playground-cjs61770aq\.blogspot\.com
+https?:\/\/([^\/]*\.)?kates-playground-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?katie-fey-m8inou71nk\.blogspot\.com
+https?:\/\/([^\/]*\.)?katie-fey\.hostithere\.org
+https?:\/\/([^\/]*\.)?katsmovies-com-a4k0cr\.blogspot\.com
+https?:\/\/([^\/]*\.)?kc-generator\.com
+https?:\/\/([^\/]*\.)?kc\.vanderbilt\.edu
+https?:\/\/([^\/]*\.)?kchaiguang\.com
+https?:\/\/([^\/]*\.)?kdmj1\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?kedew-free-porn-movie-c\.blogspot\.com
+https?:\/\/([^\/]*\.)?kedrp\.szm\.sk
+https?:\/\/([^\/]*\.)?keflexbuy\.easy\.to
+https?:\/\/([^\/]*\.)?keflexbuycheap\.everything\.at
+https?:\/\/([^\/]*\.)?keflexcheap\.notrix\.at
+https?:\/\/([^\/]*\.)?keflexcheapgeneric\.drop\.to
+https?:\/\/([^\/]*\.)?keflexgeneric\.firstpage\.de
+https?:\/\/([^\/]*\.)?kelley\.iu\.edu
+https?:\/\/([^\/]*\.)?kellyfind-com-i1\.blogspot\.com
+https?:\/\/([^\/]*\.)?kellyslovespells\.com
+https?:\/\/([^\/]*\.)?kelvinova\.com
+https?:\/\/([^\/]*\.)?kenji-no-sorata\.blogspot\.com
+https?:\/\/([^\/]*\.)?kentuckymortgage-x\.com
+https?:\/\/([^\/]*\.)?kenwoodexcelon\.com
+https?:\/\/([^\/]*\.)?keps\.info
+https?:\/\/([^\/]*\.)?kesdirect\.com
+https?:\/\/([^\/]*\.)?keshome\.com
+https?:\/\/([^\/]*\.)?kewl-links\.com
+https?:\/\/([^\/]*\.)?keysplus\.com
+https?:\/\/([^\/]*\.)?keyword\.net\.cn
+https?:\/\/([^\/]*\.)?kfwd7\.szm\.sk
+https?:\/\/([^\/]*\.)?kgbsearch\.org
+https?:\/\/([^\/]*\.)?khawkslaxfan51\.blogspot\.com
+https?:\/\/([^\/]*\.)?khlnbo3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ki-westly\.blogspot\.com
+https?:\/\/([^\/]*\.)?kiboric\.net
+https?:\/\/([^\/]*\.)?kicfmaudio\.com
+https?:\/\/([^\/]*\.)?kicklikegirls\.info
+https?:\/\/([^\/]*\.)?kijub-free-porn-video-v\.blogspot\.com
+https?:\/\/([^\/]*\.)?kingdom\.webmelia\.com
+https?:\/\/([^\/]*\.)?kingofpics-com-beib6jsm5d\.blogspot\.com
+https?:\/\/([^\/]*\.)?kingofpics-com-c8f1bag\.blogspot\.com
+https?:\/\/([^\/]*\.)?kipredinstitute\.org
+https?:\/\/([^\/]*\.)?kiqi-airplane\.blogspot\.com
+https?:\/\/([^\/]*\.)?kirsten-dunst-boob-slip\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?kiska2\.com
+https?:\/\/([^\/]*\.)?kissing-foot\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?kissing-her-ass\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?kitchen-apron\.keckins\.be
+https?:\/\/([^\/]*\.)?kitchenrebuilding\.com
+https?:\/\/([^\/]*\.)?kiudcb0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kjbz0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kjor4\.szm\.sk
+https?:\/\/([^\/]*\.)?kkkpd\.szm\.sk
+https?:\/\/([^\/]*\.)?kkvalve\.com\.cn
+https?:\/\/([^\/]*\.)?klacim\.yi\.org
+https?:\/\/([^\/]*\.)?klasik111\.php5\.cz
+https?:\/\/([^\/]*\.)?kleinerachel\.blogspot\.com
+https?:\/\/([^\/]*\.)?klohy\.info
+https?:\/\/([^\/]*\.)?kmxab\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?knkbact\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?knzfpca\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ko-paris-hilton-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?koberec\.com
+https?:\/\/([^\/]*\.)?koled-porn-video-z\.blogspot\.com
+https?:\/\/([^\/]*\.)?kom4um\.com
+https?:\/\/([^\/]*\.)?koncatina\.dtdns\.net
+https?:\/\/([^\/]*\.)?konstantine01\.blogspot\.com
+https?:\/\/([^\/]*\.)?kordirect\.com
+https?:\/\/([^\/]*\.)?kos123\.dtdns\.net
+https?:\/\/([^\/]*\.)?kostya\.cabspace\.com
+https?:\/\/([^\/]*\.)?kpdsvd9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kpqf2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kpzq6\.szm\.sk
+https?:\/\/([^\/]*\.)?krakatoa\.slyip\.com
+https?:\/\/([^\/]*\.)?krakon\.republika\.pl
+https?:\/\/([^\/]*\.)?krasnota\.flnet\.org
+https?:\/\/([^\/]*\.)?krbd2\.szm\.sk
+https?:\/\/([^\/]*\.)?kreco\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ksbj5\.szm\.sk
+https?:\/\/([^\/]*\.)?ksiegagosci\.info
+https?:\/\/([^\/]*\.)?ktbug1373\.blogspot\.com
+https?:\/\/([^\/]*\.)?ktrv2\.szm\.sk
+https?:\/\/([^\/]*\.)?ku-whatnot\.blogspot\.com
+https?:\/\/([^\/]*\.)?kucitok\.forumculture\.net
+https?:\/\/([^\/]*\.)?kulhain\.blogspot\.com
+https?:\/\/([^\/]*\.)?kunshalawyer\.com
+https?:\/\/([^\/]*\.)?kvehuj8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kvywc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kwscx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kwvi\.com
+https?:\/\/([^\/]*\.)?kybel\.fetftp\.nu
+https?:\/\/([^\/]*\.)?kybele\.psych\.cornell\.edu
+https?:\/\/([^\/]*\.)?kyjcz\.sunp\.com
+https?:\/\/([^\/]*\.)?kymnruw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?kymyn\.info
+https?:\/\/([^\/]*\.)?l-paris-hilton-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?l\.0s48\.info
+https?:\/\/([^\/]*\.)?l1ttleblacky\.blogspot\.com
+https?:\/\/([^\/]*\.)?la-ringtones\.com
+https?:\/\/([^\/]*\.)?laaceler\.blogcu\.com
+https?:\/\/([^\/]*\.)?labelprinter\.printer\.net\.cn
+https?:\/\/([^\/]*\.)?labladar\.forumzen\.com
+https?:\/\/([^\/]*\.)?lacchi\.lolforum\.net
+https?:\/\/([^\/]*\.)?laconia4\.info
+https?:\/\/([^\/]*\.)?ladylike\.hostcroc\.com
+https?:\/\/([^\/]*\.)?lake-baikal\.info
+https?:\/\/([^\/]*\.)?laked\.info
+https?:\/\/([^\/]*\.)?lalisit\.heavenforum\.com
+https?:\/\/([^\/]*\.)?lalisit\.highforum\.net
+https?:\/\/([^\/]*\.)?lamalinks-com-ceefq\.blogspot\.com
+https?:\/\/([^\/]*\.)?lamisilbuy\.drive\.to
+https?:\/\/([^\/]*\.)?lamisilbuygeneric\.dive\.to
+https?:\/\/([^\/]*\.)?lamisilcheap\.drink\.to
+https?:\/\/([^\/]*\.)?lamisilgeneric\.drop\.to
+https?:\/\/([^\/]*\.)?lamisilgenericcheap\.dive\.to
+https?:\/\/([^\/]*\.)?lanasbigboobs-com-mxm7\.blogspot\.com
+https?:\/\/([^\/]*\.)?lanasbigboobs-com-repif\.blogspot\.com
+https?:\/\/([^\/]*\.)?laorer\.ephpbb\.com
+https?:\/\/([^\/]*\.)?lapelcna\.forumzen\.com
+https?:\/\/([^\/]*\.)?lapoer\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?large-lingerie-naughty-woman\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?las-vegas-gay-night-club\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?las-vegas-house\.nm\.ru
+https?:\/\/([^\/]*\.)?laser-drilled-diamonds\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?laser-wave\.com
+https?:\/\/([^\/]*\.)?laskai\.com
+https?:\/\/([^\/]*\.)?lasmercedessite\.info
+https?:\/\/([^\/]*\.)?lassie\.webmelia\.com
+https?:\/\/([^\/]*\.)?last-minute-travel\.ebem\.info
+https?:\/\/([^\/]*\.)?latex-ass\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?latex-dress\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?latex-foam-mattress-toppers\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?latex-mistress\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?latex-sluts\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?latex-swim-wear\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?latin\.hostaim\.com
+https?:\/\/([^\/]*\.)?latina-porn-clip-blog11q\.blogspot\.com
+https?:\/\/([^\/]*\.)?latina-porn-clip-blogden\.blogspot\.com
+https?:\/\/([^\/]*\.)?latinata\.galeon\.com
+https?:\/\/([^\/]*\.)?latoarril\.myrealboard\.com
+https?:\/\/([^\/]*\.)?laus-rmore\.blogspot\.com
+https?:\/\/([^\/]*\.)?lavemi\.com
+https?:\/\/([^\/]*\.)?lavender-dove\.blogspot\.com
+https?:\/\/([^\/]*\.)?lavor0\.info
+https?:\/\/([^\/]*\.)?law-school\.hotmail\.ru
+https?:\/\/([^\/]*\.)?law1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?law2school\.chat\.ru
+https?:\/\/([^\/]*\.)?lawrencegillies\.blogspot\.com
+https?:\/\/([^\/]*\.)?lawyer\.ebloggy\.com
+https?:\/\/([^\/]*\.)?laynamarya\.blogspot\.com
+https?:\/\/([^\/]*\.)?laythekatcom\.pupava\.dtdns\.net
+https?:\/\/([^\/]*\.)?lbgetm9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lbrnrme\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lczjunf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ldrdf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?le-alma\.blogspot\.com
+https?:\/\/([^\/]*\.)?le-big-free-movie-porn-cek\.blogspot\.com
+https?:\/\/([^\/]*\.)?leadora\.blogspot\.com
+https?:\/\/([^\/]*\.)?leannrae85\.blogspot\.com
+https?:\/\/([^\/]*\.)?lebu-adidas\.blogspot\.com
+https?:\/\/([^\/]*\.)?ledego\.com
+https?:\/\/([^\/]*\.)?ledgiest\.xhostar\.com
+https?:\/\/([^\/]*\.)?ledkrx\.com
+https?:\/\/([^\/]*\.)?ledled\.nease\.net
+https?:\/\/([^\/]*\.)?leebuc\.forumzen\.com
+https?:\/\/([^\/]*\.)?leeticarus\.blogspot\.com
+https?:\/\/([^\/]*\.)?leetvilt\.jconserv\.net
+https?:\/\/([^\/]*\.)?left-leg-numbness\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?leg-exercise\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?leg-in-stocking\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?leg-in-tan-pantie-hose\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?leg-neurontin-restless-syndrome\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?leg-preteen-spread\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?leg-shaved-spread\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?leisure-suit-larry-magna-cum-laude-nudity-patch\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?leisure-suit-larry-magna-cum-laude-uncut-and-uncensored\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?leo-the-bastet\.site\.voila\.fr
+https?:\/\/([^\/]*\.)?leopard-lady\.blogspot\.com
+https?:\/\/([^\/]*\.)?leroyhotel\.com
+https?:\/\/([^\/]*\.)?lesbian-anal-porn\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?lesbian-fisting-dvd\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lesbian-fucking-eachother\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?lesbian-girl-scout\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?lesbian-group-masturbation\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lesbian-oral-sex\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?lesbian-personals-ads\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?lesbian-personals-yahoo\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?lesbian-porn-clip-blog6e5\.blogspot\.com
+https?:\/\/([^\/]*\.)?lesbian-sex-teen\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?lesbian-sharing-dildo\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lesbian-tit-bondage\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lesbian-web-chat-and-cam\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?lesbians\.coz\.in
+https?:\/\/([^\/]*\.)?letoacel-or\.xa\.pl
+https?:\/\/([^\/]*\.)?letobocpas\.frbb\.net
+https?:\/\/([^\/]*\.)?letocvi\.goodbb\.net
+https?:\/\/([^\/]*\.)?letomon\.graphforum\.com
+https?:\/\/([^\/]*\.)?letorelpas\.xa\.pl
+https?:\/\/([^\/]*\.)?lettera-di-presentazione\.zoom4x\.info
+https?:\/\/([^\/]*\.)?lettersof-love\.blogspot\.com
+https?:\/\/([^\/]*\.)?levitra\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?levitra\.rx4\.org
+https?:\/\/([^\/]*\.)?levitra\.seesaa\.net
+https?:\/\/([^\/]*\.)?levitra\.skocz\.net
+https?:\/\/([^\/]*\.)?levitraejv\.blogspot\.com
+https?:\/\/([^\/]*\.)?levitras\.eu\.tf
+https?:\/\/([^\/]*\.)?levitraxpb\.blogspot\.com
+https?:\/\/([^\/]*\.)?lex-interracial\.hoffer\.ipupdater\.com
+https?:\/\/([^\/]*\.)?lexapro\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?lexaprobuyonline\.buzznet\.com
+https?:\/\/([^\/]*\.)?lexpov-com\.cornut\.ipupdater\.com
+https?:\/\/([^\/]*\.)?leyeager\.ifrance\.com
+https?:\/\/([^\/]*\.)?lezbomovies-com-dp3256w4cb\.blogspot\.com
+https?:\/\/([^\/]*\.)?lezbomovies-com-duvuv\.blogspot\.com
+https?:\/\/([^\/]*\.)?lezbomovies-com-dw7q2s6l\.blogspot\.com
+https?:\/\/([^\/]*\.)?lf-pm\.com
+https?:\/\/([^\/]*\.)?lfamas\.com
+https?:\/\/([^\/]*\.)?lhbtx\.szm\.sk
+https?:\/\/([^\/]*\.)?lhnzkp9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?li-adult-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?li6or6olo\.dl\.pl
+https?:\/\/([^\/]*\.)?lianjieqi\.dzsc\.com
+https?:\/\/([^\/]*\.)?liaozhi\.org
+https?:\/\/([^\/]*\.)?libasac\.ephpbb\.com
+https?:\/\/([^\/]*\.)?libertyliga\.com
+https?:\/\/([^\/]*\.)?library\.cshl\.edu
+https?:\/\/([^\/]*\.)?libraryofthumbs-com-oyz1qboq\.blogspot\.com
+https?:\/\/([^\/]*\.)?licecile\.dl\.pl
+https?:\/\/([^\/]*\.)?licnarol\.dl\.pl
+https?:\/\/([^\/]*\.)?lidaror\.blogcu\.com
+https?:\/\/([^\/]*\.)?lidiarac\.forumzen\.com
+https?:\/\/([^\/]*\.)?lidomca\.graphforum\.com
+https?:\/\/([^\/]*\.)?lidomca\.highforum\.net
+https?:\/\/([^\/]*\.)?lidompas\.td\.pl
+https?:\/\/([^\/]*\.)?lidomta\.frbb\.net
+https?:\/\/([^\/]*\.)?lidupett\.forumzen\.com
+https?:\/\/([^\/]*\.)?lifeinsurance-x\.com
+https?:\/\/([^\/]*\.)?lifewave\.com
+https?:\/\/([^\/]*\.)?ligettr\.dl\.pl
+https?:\/\/([^\/]*\.)?light365\.com
+https?:\/\/([^\/]*\.)?lightspeed-state\.hostithere\.org
+https?:\/\/([^\/]*\.)?lihach\.com
+https?:\/\/([^\/]*\.)?lijoho-video-porn-gratis\.blogspot\.com
+https?:\/\/([^\/]*\.)?likozrut\.stabilt\.se
+https?:\/\/([^\/]*\.)?lilaleemcrightrealty\.com
+https?:\/\/([^\/]*\.)?lilaliko\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?lile\.asp2\.cz
+https?:\/\/([^\/]*\.)?lilett\.blogspot\.com
+https?:\/\/([^\/]*\.)?lilhaq\.blogspot\.com
+https?:\/\/([^\/]*\.)?lilo-n\.blogspot\.com
+https?:\/\/([^\/]*\.)?lilotu\.com
+https?:\/\/([^\/]*\.)?linarcbo\.forumzen\.com
+https?:\/\/([^\/]*\.)?lincweb\.cacs\.louisiana\.edu
+https?:\/\/([^\/]*\.)?lindsaylife\.com
+https?:\/\/([^\/]*\.)?lineance-facial-hair-removal-cream\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?linefreeinternet\.info
+https?:\/\/([^\/]*\.)?linemd\.com
+https?:\/\/([^\/]*\.)?lingerie-babes-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?lingerie-girl-pic\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lingerie-guide\.org
+https?:\/\/([^\/]*\.)?lingerie-sex-photo\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?lingerie-videos-com-wcu8\.blogspot\.com
+https?:\/\/([^\/]*\.)?lingshengdown\.com
+https?:\/\/([^\/]*\.)?lingua-francese\.host24h\.info
+https?:\/\/([^\/]*\.)?link-o-rama-com-t5xhd\.blogspot\.com
+https?:\/\/([^\/]*\.)?link-o-rama-com-toz5x8i2ez\.blogspot\.com
+https?:\/\/([^\/]*\.)?linserch\.com
+https?:\/\/([^\/]*\.)?lioral\.dl\.pl
+https?:\/\/([^\/]*\.)?lioumon\.lolforum\.net
+https?:\/\/([^\/]*\.)?lipitor\.skocz\.net
+https?:\/\/([^\/]*\.)?lipstick-love\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?lipstick-mac\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?lipus\.org
+https?:\/\/([^\/]*\.)?lirolbo\.goodforum\.net
+https?:\/\/([^\/]*\.)?lirolbo\.grafbb\.com
+https?:\/\/([^\/]*\.)?lisinopril\.no-ip\.info
+https?:\/\/([^\/]*\.)?list\.eng\.utah\.edu
+https?:\/\/([^\/]*\.)?listinna772\.galeon\.com
+https?:\/\/([^\/]*\.)?listpharm\.com
+https?:\/\/([^\/]*\.)?lists\.gatech\.edu
+https?:\/\/([^\/]*\.)?litaacel\.lolforum\.net
+https?:\/\/([^\/]*\.)?litadal\.myrealboard\.com
+https?:\/\/([^\/]*\.)?litayj0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?literotica-com-t3yx\.blogspot\.com
+https?:\/\/([^\/]*\.)?literotica-com-tkncy\.blogspot\.com
+https?:\/\/([^\/]*\.)?litrget\.jc\.pl
+https?:\/\/([^\/]*\.)?little-april-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?little-april-masturbating-movie\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?little-dicks-bay\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?little-teen-fuck\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?littledevildoubt\.com
+https?:\/\/([^\/]*\.)?littlesunshine\.50webs\.org
+https?:\/\/([^\/]*\.)?litumdet\.forumzen\.com
+https?:\/\/([^\/]*\.)?liupy\.110mb\.com
+https?:\/\/([^\/]*\.)?live-gay-video-chat\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?live-jasmine-cams\.com
+https?:\/\/([^\/]*\.)?livejasmin-com-abc\.blogspot\.com
+https?:\/\/([^\/]*\.)?livejasmin-com-abz\.blogspot\.com
+https?:\/\/([^\/]*\.)?livejasmin-com-aky\.blogspot\.com
+https?:\/\/([^\/]*\.)?livejasmin-com-qujef\.blogspot\.com
+https?:\/\/([^\/]*\.)?livescore\.esguay\.com
+https?:\/\/([^\/]*\.)?livescore\.ven\.bz
+https?:\/\/([^\/]*\.)?livesupportpal\.com
+https?:\/\/([^\/]*\.)?liviral\.myrealboard\.com
+https?:\/\/([^\/]*\.)?lixin642\.com
+https?:\/\/([^\/]*\.)?liymcc0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lizardofoz\.com
+https?:\/\/([^\/]*\.)?lizas\.asp2\.cz
+https?:\/\/([^\/]*\.)?lizscottrawson\.com
+https?:\/\/([^\/]*\.)?lkrzfkg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ll-four-sterto\.blogspot\.com
+https?:\/\/([^\/]*\.)?llillith\.blogspot\.com
+https?:\/\/([^\/]*\.)?lll1l\.info
+https?:\/\/([^\/]*\.)?llline\.info
+https?:\/\/([^\/]*\.)?llpcoil\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?llsky\.net
+https?:\/\/([^\/]*\.)?lm4nmu\.com
+https?:\/\/([^\/]*\.)?lmyzm\.szm\.sk
+https?:\/\/([^\/]*\.)?lnalpas\.myrealboard\.com
+https?:\/\/([^\/]*\.)?lnki9\.szm\.sk
+https?:\/\/([^\/]*\.)?lnqfa\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?lnqixlz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?loan-unsecuredcxp\.blogspot\.com
+https?:\/\/([^\/]*\.)?loans-insurance\.net
+https?:\/\/([^\/]*\.)?lodge\.webmelia\.com
+https?:\/\/([^\/]*\.)?lodita-com-dya6s22zu\.blogspot\.com
+https?:\/\/([^\/]*\.)?lodita-com-dz\.blogspot\.com
+https?:\/\/([^\/]*\.)?loestrin\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?logast\.com
+https?:\/\/([^\/]*\.)?logowap\.com
+https?:\/\/([^\/]*\.)?lojlo\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lojunbas\.forumzen\.com
+https?:\/\/([^\/]*\.)?lola-providence\.blogspot\.com
+https?:\/\/([^\/]*\.)?lolabear1121\.blogspot\.com
+https?:\/\/([^\/]*\.)?lolaparris\.freetzi\.com
+https?:\/\/([^\/]*\.)?loliti-com-c5m8mt\.blogspot\.com
+https?:\/\/([^\/]*\.)?lolovi\.naturalforum\.net
+https?:\/\/([^\/]*\.)?lomsts\.com
+https?:\/\/([^\/]*\.)?londra-ristorante\.freehostss\.info
+https?:\/\/([^\/]*\.)?lonely-wolf-com-rjqlm1d6\.blogspot\.com
+https?:\/\/([^\/]*\.)?long-porn-clip-info67s\.blogspot\.com
+https?:\/\/([^\/]*\.)?long-porn-clip-infosm4\.blogspot\.com
+https?:\/\/([^\/]*\.)?longestlist-com-b6\.blogspot\.com
+https?:\/\/([^\/]*\.)?longestlist-com-b683g4ik\.blogspot\.com
+https?:\/\/([^\/]*\.)?longestlist-hb\.blogspot\.com
+https?:\/\/([^\/]*\.)?longestlist-hohen\.blogspot\.com
+https?:\/\/([^\/]*\.)?longonline\.net
+https?:\/\/([^\/]*\.)?longvideos-net-gq78qyba\.blogspot\.com
+https?:\/\/([^\/]*\.)?longxiong\.ebloggy\.com
+https?:\/\/([^\/]*\.)?lony\.info
+https?:\/\/([^\/]*\.)?look-at-his-dick\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lookcity\.com
+https?:\/\/([^\/]*\.)?lopata\.snusk\.nu
+https?:\/\/([^\/]*\.)?lopressorhct\.sblog\.cz
+https?:\/\/([^\/]*\.)?lorazepams\.ru\.tf
+https?:\/\/([^\/]*\.)?lortab-911\.coz\.in
+https?:\/\/([^\/]*\.)?lortab\.xwiki\.com
+https?:\/\/([^\/]*\.)?losangelestickets\.org
+https?:\/\/([^\/]*\.)?lotausch\.ifrance\.com
+https?:\/\/([^\/]*\.)?loudmp3\.net
+https?:\/\/([^\/]*\.)?louisianamortgage-x\.com
+https?:\/\/([^\/]*\.)?lovefuckk-com-eg7gx\.blogspot\.com
+https?:\/\/([^\/]*\.)?lovefuckk-com-et2x2g1sk\.blogspot\.com
+https?:\/\/([^\/]*\.)?lovefuckk-com-setos\.blogspot\.com
+https?:\/\/([^\/]*\.)?lovegirlsonline\.info
+https?:\/\/([^\/]*\.)?lovejuliet3\.blogspot\.com
+https?:\/\/([^\/]*\.)?lovetgp-com-d74h1ed3o\.blogspot\.com
+https?:\/\/([^\/]*\.)?lowbudgetsuccess\.info
+https?:\/\/([^\/]*\.)?lqsbjau\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lrff5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lriwaq-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?lrlep\.szm\.sk
+https?:\/\/([^\/]*\.)?ltfl5\.szm\.sk
+https?:\/\/([^\/]*\.)?ltntp\.szm\.sk
+https?:\/\/([^\/]*\.)?lu-porn-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?lucking\.com\.cn
+https?:\/\/([^\/]*\.)?lucqt\.szm\.sk
+https?:\/\/([^\/]*\.)?luridess\.125mb\.com
+https?:\/\/([^\/]*\.)?lusi-ada\.blogspot\.com
+https?:\/\/([^\/]*\.)?lustjob\.info
+https?:\/\/([^\/]*\.)?lustwork\.info
+https?:\/\/([^\/]*\.)?lusvqm-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?lutaltli\.naturalforum\.net
+https?:\/\/([^\/]*\.)?lutrilar\.naturalforum\.net
+https?:\/\/([^\/]*\.)?lutzalvi\.naturalforum\.net
+https?:\/\/([^\/]*\.)?lvanrts\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lvsi\.ebloggy\.com
+https?:\/\/([^\/]*\.)?lwdf2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lwkmewp\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lycosss\.com
+https?:\/\/([^\/]*\.)?lyganbaili\.com
+https?:\/\/([^\/]*\.)?lyhbs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?lying-facial-expression\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?lyndawyllie\.com
+https?:\/\/([^\/]*\.)?lzouv\.szm\.sk
+https?:\/\/([^\/]*\.)?m-i-a-s-m-a\.blogspot\.com
+https?:\/\/([^\/]*\.)?m-sr\.net
+https?:\/\/([^\/]*\.)?m-teens-000\.blogspot\.com
+https?:\/\/([^\/]*\.)?m\.domaindlx\.com
+https?:\/\/([^\/]*\.)?m2mvc\.com
+https?:\/\/([^\/]*\.)?machi-neko\.blogspot\.com
+https?:\/\/([^\/]*\.)?mackenzie-kayne\.hostingtree\.org
+https?:\/\/([^\/]*\.)?macromob\.com
+https?:\/\/([^\/]*\.)?madesukadana\.com
+https?:\/\/([^\/]*\.)?madthumbs-com-hcq1m1\.blogspot\.com
+https?:\/\/([^\/]*\.)?mafy69\.blogspot\.com
+https?:\/\/([^\/]*\.)?magical-casino\.com
+https?:\/\/([^\/]*\.)?magneticwoman88\.blogspot\.com
+https?:\/\/([^\/]*\.)?maidenpeace\.com
+https?:\/\/([^\/]*\.)?main\.g2\.bx\.psu\.edu
+https?:\/\/([^\/]*\.)?mainemortgage-x\.com
+https?:\/\/([^\/]*\.)?maitybaba\.blogspot\.com
+https?:\/\/([^\/]*\.)?makaky\.dtdns\.net
+https?:\/\/([^\/]*\.)?makblxn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?make-my-dick-hard\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?makemoneyfast\.us
+https?:\/\/([^\/]*\.)?makeup\.ifreehosts\.net
+https?:\/\/([^\/]*\.)?male-hairy-leg\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?malinka\.b0b\.org
+https?:\/\/([^\/]*\.)?mama-rachelbeth\.blogspot\.com
+https?:\/\/([^\/]*\.)?mamaswarm\.sultryserver\.com
+https?:\/\/([^\/]*\.)?man-caught-wearing-womens-lingerie\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?man-ring\.boom\.ru
+https?:\/\/([^\/]*\.)?man-rings\.boom\.ru
+https?:\/\/([^\/]*\.)?man-skin\.nightmail\.ru
+https?:\/\/([^\/]*\.)?man-skin\.nm\.ru
+https?:\/\/([^\/]*\.)?man-woman-fucking-video-clip\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?man_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?managementproperty\.us
+https?:\/\/([^\/]*\.)?manka-kapak\.blogspot\.com
+https?:\/\/([^\/]*\.)?manoke\.cn
+https?:\/\/([^\/]*\.)?map4um\.com
+https?:\/\/([^\/]*\.)?mapas6\.com
+https?:\/\/([^\/]*\.)?maradona\.stabilt\.se
+https?:\/\/([^\/]*\.)?marhula\.weedns\.com
+https?:\/\/([^\/]*\.)?marinol\.xwiki\.com
+https?:\/\/([^\/]*\.)?mario-lopez-gayfgg\.blogspot\.com
+https?:\/\/([^\/]*\.)?marketing1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?marklar\.republika\.pl
+https?:\/\/([^\/]*\.)?marti-adp\.iespana\.es
+https?:\/\/([^\/]*\.)?marucollet\.jp
+https?:\/\/([^\/]*\.)?maryannec\.com
+https?:\/\/([^\/]*\.)?marylandmortgage-x\.com
+https?:\/\/([^\/]*\.)?masfac\.com
+https?:\/\/([^\/]*\.)?masiki\.110mb\.com
+https?:\/\/([^\/]*\.)?masiti\.com
+https?:\/\/([^\/]*\.)?massachusetts-hs\.newmail\.ru
+https?:\/\/([^\/]*\.)?massachusettsmortgage-x\.com
+https?:\/\/([^\/]*\.)?mast3t\.com
+https?:\/\/([^\/]*\.)?master-z-great\.blogspot\.com
+https?:\/\/([^\/]*\.)?master1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?master2005degree\.chat\.ru
+https?:\/\/([^\/]*\.)?masterboat\.ru
+https?:\/\/([^\/]*\.)?mastun\.com
+https?:\/\/([^\/]*\.)?masturbating-shemale-video\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?masturbation-techniques1\.notlong\.com
+https?:\/\/([^\/]*\.)?masvit\.com
+https?:\/\/([^\/]*\.)?matching-mom-and-baby-outfit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?matrac\.loopback\.nu
+https?:\/\/([^\/]*\.)?mattsvids-com-aqjt\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-bitches-com-ccvi3l\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-black-female\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?mature-blonde-fuck\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?mature-blonde-movie\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?mature-blonde-toying\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?mature-british-granny\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?mature-clip\.babubi\.net
+https?:\/\/([^\/]*\.)?mature-for-you-com-mt66\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-gang-bang\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature-gay-black\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature-gay-man-gallery\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?mature-man-photo\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?mature-man-picture\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?mature-milf-milfmuffin-com\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature-nl-kss7\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-pantie-upskirt\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature-pic-post\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?mature-porn-clip-newsj8c\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-porn-clip-zone5s0\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-porn-movie-sihu\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-porn-video-ku\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-post-com-iecsmld78\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-redhead\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?mature-secret-com-r6t85u5\.blogspot\.com
+https?:\/\/([^\/]*\.)?mature-sex-orgy\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?mature-sex-thumb\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature-throat-fuck\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?mature-wife-in-pantie-hose\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?mature-woman-vs-young\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?mature\.coz\.in
+https?:\/\/([^\/]*\.)?matureandyoung-com-bgf1\.blogspot\.com
+https?:\/\/([^\/]*\.)?maturedaily-net-oipq5\.blogspot\.com
+https?:\/\/([^\/]*\.)?maturedaily-net-oywdf7pj0\.blogspot\.com
+https?:\/\/([^\/]*\.)?maturehit-com-w8\.blogspot\.com
+https?:\/\/([^\/]*\.)?maturehit-com-zifid\.blogspot\.com
+https?:\/\/([^\/]*\.)?maximumsearch\.net
+https?:\/\/([^\/]*\.)?maybachexelero\.org
+https?:\/\/([^\/]*\.)?mayphyoe\.blogspot\.com
+https?:\/\/([^\/]*\.)?maypopmusic\.cn
+https?:\/\/([^\/]*\.)?mazda-6\.keckins\.be
+https?:\/\/([^\/]*\.)?mazdamaindealer\.cn
+https?:\/\/([^\/]*\.)?mazecreatorhosting\.net
+https?:\/\/([^\/]*\.)?mba1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?mbiu1\.szm\.sk
+https?:\/\/([^\/]*\.)?mbkxs\.szm\.sk
+https?:\/\/([^\/]*\.)?mbsz0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mcfontai\.dl\.pl
+https?:\/\/([^\/]*\.)?mciicvn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mckeithl\.ifrance\.com
+https?:\/\/([^\/]*\.)?mcynwst\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mdfo2\.szm\.sk
+https?:\/\/([^\/]*\.)?mdna8\.szm\.sk
+https?:\/\/([^\/]*\.)?mdoq5\.szm\.sk
+https?:\/\/([^\/]*\.)?meadelante\.blogspot\.com
+https?:\/\/([^\/]*\.)?med-ph\.com
+https?:\/\/([^\/]*\.)?medbig\.com
+https?:\/\/([^\/]*\.)?medgarsting\.info
+https?:\/\/([^\/]*\.)?medhls\.com
+https?:\/\/([^\/]*\.)?medic\.kilu\.de
+https?:\/\/([^\/]*\.)?medication-cheap\.com
+https?:\/\/([^\/]*\.)?meds-today\.com
+https?:\/\/([^\/]*\.)?megadyneinc\.com
+https?:\/\/([^\/]*\.)?megan-qt-cjg\.blogspot\.com
+https?:\/\/([^\/]*\.)?megaupkoad\.com
+https?:\/\/([^\/]*\.)?meindies\.com
+https?:\/\/([^\/]*\.)?melatrol\.podstavec\.yi\.org
+https?:\/\/([^\/]*\.)?melissa-doll\.cornut\.ipupdater\.com
+https?:\/\/([^\/]*\.)?melsner\.blogspot\.com
+https?:\/\/([^\/]*\.)?mens\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?menshealth\.110mb\.com
+https?:\/\/([^\/]*\.)?meoqwzr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?meridasexo\.com
+https?:\/\/([^\/]*\.)?meridia\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?meridia\.edu\.tf
+https?:\/\/([^\/]*\.)?meridia\.hav\.pl
+https?:\/\/([^\/]*\.)?meridia\.skocz\.net
+https?:\/\/([^\/]*\.)?meridiager\.queroumforum\.com
+https?:\/\/([^\/]*\.)?meryland\.dtdns\.net
+https?:\/\/([^\/]*\.)?mesothelioma-lawyer-help\.org
+https?:\/\/([^\/]*\.)?meweb\.ecn\.purdue\.edu
+https?:\/\/([^\/]*\.)?mewqsd\.org
+https?:\/\/([^\/]*\.)?mgnzupi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mi-kkiechang\.ifrance\.com
+https?:\/\/([^\/]*\.)?mia-movies-com-g2g1\.blogspot\.com
+https?:\/\/([^\/]*\.)?mia-movies-e86q7ic4y7\.blogspot\.com
+https?:\/\/([^\/]*\.)?miami-cose-fare\.hostzz\.info
+https?:\/\/([^\/]*\.)?michelepug\.org
+https?:\/\/([^\/]*\.)?michiganmortgage-x\.com
+https?:\/\/([^\/]*\.)?midaslubbock\.com
+https?:\/\/([^\/]*\.)?midnis\.com
+https?:\/\/([^\/]*\.)?migree\.com
+https?:\/\/([^\/]*\.)?mihaso\.com
+https?:\/\/([^\/]*\.)?mikeinbrazil-com-k1s8higm1o\.blogspot\.com
+https?:\/\/([^\/]*\.)?mikeinbrazil-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?mikesapartment-com-iwb02e1v\.blogspot\.com
+https?:\/\/([^\/]*\.)?mikesapartment-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?mikewsd\.org
+https?:\/\/([^\/]*\.)?miks1\.szm\.sk
+https?:\/\/([^\/]*\.)?miku-thu-vilu\.110mb\.com
+https?:\/\/([^\/]*\.)?mildew\.789mb\.com
+https?:\/\/([^\/]*\.)?milf-blow-job-gallery\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?milf-busty-fucking\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?milf-hunter-kate\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?milf-mature-big-tit\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?milf-tgp-wife\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?milfhunter-com-h2a7q51\.blogspot\.com
+https?:\/\/([^\/]*\.)?milflessons-com-bh6\.blogspot\.com
+https?:\/\/([^\/]*\.)?milfnextdoor-bk23v2p4\.blogspot\.com
+https?:\/\/([^\/]*\.)?milfnextdoor-w3ii\.blogspot\.com
+https?:\/\/([^\/]*\.)?milkmanbook-com-o7\.blogspot\.com
+https?:\/\/([^\/]*\.)?milkmanbook-com-rrup5f\.blogspot\.com
+https?:\/\/([^\/]*\.)?milkmanbook-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?milkmanbook-ods016\.blogspot\.com
+https?:\/\/([^\/]*\.)?milton-twins-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?mimija\.com
+https?:\/\/([^\/]*\.)?miniurl\.pl
+https?:\/\/([^\/]*\.)?minnesotamortgage-x\.com
+https?:\/\/([^\/]*\.)?minzec\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?missensign\.blogspot\.com
+https?:\/\/([^\/]*\.)?mississippimortgage-x\.com
+https?:\/\/([^\/]*\.)?missourimortgage-x\.com
+https?:\/\/([^\/]*\.)?mitsubishicarhire\.cn
+https?:\/\/([^\/]*\.)?mj-net\.jp
+https?:\/\/([^\/]*\.)?mj\.left-page\.com
+https?:\/\/([^\/]*\.)?mjlvan4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mjqnxn1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mjspb\.szm\.sk
+https?:\/\/([^\/]*\.)?mkia3\.szm\.sk
+https?:\/\/([^\/]*\.)?mkiss47346\.blogspot\.com
+https?:\/\/([^\/]*\.)?mksahf-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?mkzvni8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mlgta\.szm\.sk
+https?:\/\/([^\/]*\.)?mlm-business-leader\.com
+https?:\/\/([^\/]*\.)?mlvej\.szm\.sk
+https?:\/\/([^\/]*\.)?mmm100-com-aj\.blogspot\.com
+https?:\/\/([^\/]*\.)?mmm100-com-cisec\.blogspot\.com
+https?:\/\/([^\/]*\.)?mmm100-com-tql1xojt\.blogspot\.com
+https?:\/\/([^\/]*\.)?mnsp\.cn
+https?:\/\/([^\/]*\.)?mobfiller\.com
+https?:\/\/([^\/]*\.)?mobic\.sytes\.net
+https?:\/\/([^\/]*\.)?mobile-phone-dealoft\.blogspot\.com
+https?:\/\/([^\/]*\.)?mobile-phone-shopmgl\.blogspot\.com
+https?:\/\/([^\/]*\.)?mobile-phonegsn\.blogspot\.com
+https?:\/\/([^\/]*\.)?mobilefamilydental\.com
+https?:\/\/([^\/]*\.)?mobilewallpaperkre\.blogspot\.com
+https?:\/\/([^\/]*\.)?mobility-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?mobility2scooter\.chat\.ru
+https?:\/\/([^\/]*\.)?mobprofile\.com
+https?:\/\/([^\/]*\.)?modelsgroup-com-wrx\.blogspot\.com
+https?:\/\/([^\/]*\.)?modelsgroup-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?modlang\.boisestate\.edu
+https?:\/\/([^\/]*\.)?moju\.net\.cn
+https?:\/\/([^\/]*\.)?mol-ch\.com
+https?:\/\/([^\/]*\.)?mom-and-son-song\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?mom-music-video\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?mom-n-son\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?mom-vs-young\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?mommia-com-h32\.blogspot\.com
+https?:\/\/([^\/]*\.)?mommia-com-hvr6wy\.blogspot\.com
+https?:\/\/([^\/]*\.)?mommia-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?moms-teaching-teens-ceb\.blogspot\.com
+https?:\/\/([^\/]*\.)?monbocchi\.zikforum\.com
+https?:\/\/([^\/]*\.)?moncnamon\.ephpbb\.com
+https?:\/\/([^\/]*\.)?moncnamon\.forumculture\.net
+https?:\/\/([^\/]*\.)?monctr\.cultureforum\.net
+https?:\/\/([^\/]*\.)?mondelacel\.dl\.pl
+https?:\/\/([^\/]*\.)?monelal\.discutfree\.com
+https?:\/\/([^\/]*\.)?moneta-algeria\.hostzz\.info
+https?:\/\/([^\/]*\.)?monjco\.blogcu\.com
+https?:\/\/([^\/]*\.)?monletochi\.bbgraf\.com
+https?:\/\/([^\/]*\.)?monokal\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?monorget\.lolbb\.com
+https?:\/\/([^\/]*\.)?monpasrel\.dl\.pl
+https?:\/\/([^\/]*\.)?monster-cock-movie-big\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?monstersofcock-com-rvdurm2\.blogspot\.com
+https?:\/\/([^\/]*\.)?montana-flugsport\.com
+https?:\/\/([^\/]*\.)?montanamortgage-x\.com
+https?:\/\/([^\/]*\.)?montessori-spielzeug\.com
+https?:\/\/([^\/]*\.)?moody-immortal2\.blogspot\.com
+https?:\/\/([^\/]*\.)?morekes\.com
+https?:\/\/([^\/]*\.)?moremoms-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?moremoms-rj8f2r\.blogspot\.com
+https?:\/\/([^\/]*\.)?mortgage-911\.net
+https?:\/\/([^\/]*\.)?mortgagebrokers-x\.com
+https?:\/\/([^\/]*\.)?mortgagecompanies-x\.com
+https?:\/\/([^\/]*\.)?mortgagelenders-x\.com
+https?:\/\/([^\/]*\.)?mortgageloan-x\.com
+https?:\/\/([^\/]*\.)?mortgageloans-x\.com
+https?:\/\/([^\/]*\.)?mortgagerates-x\.com
+https?:\/\/([^\/]*\.)?mortgagerefinance-x\.com
+https?:\/\/([^\/]*\.)?mortgagerefinancing-x\.com
+https?:\/\/([^\/]*\.)?mortgages-411\.com
+https?:\/\/([^\/]*\.)?mortgagesnrefinance\.com
+https?:\/\/([^\/]*\.)?mosquito-ringtoneaee\.blogspot\.com
+https?:\/\/([^\/]*\.)?mosquitoringtonewmf\.blogspot\.com
+https?:\/\/([^\/]*\.)?mothershope\.com
+https?:\/\/([^\/]*\.)?mothrinventor\.blogspot\.com
+https?:\/\/([^\/]*\.)?motnolado\.org
+https?:\/\/([^\/]*\.)?motor-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?motorized-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?motorizedscooter\.chat\.ru
+https?:\/\/([^\/]*\.)?motorolaringtonesfreeucq\.blogspot\.com
+https?:\/\/([^\/]*\.)?motorolaringtoneskvp\.blogspot\.com
+https?:\/\/([^\/]*\.)?motorolaringtonesym\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviegalleries-com-gl8\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviepost-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviepost-h4s2iin\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviesarena-com-r42rng0\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviesarena-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviesgold-com-ig86ukjw\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviesgold-com-k0\.blogspot\.com
+https?:\/\/([^\/]*\.)?movieshark-d0vdon27\.blogspot\.com
+https?:\/\/([^\/]*\.)?moviesparade-com-a3hxnn6\.blogspot\.com
+https?:\/\/([^\/]*\.)?movietitan-com-i6shde\.blogspot\.com
+https?:\/\/([^\/]*\.)?movietitan-o6i14o0\.blogspot\.com
+https?:\/\/([^\/]*\.)?mozzarell\.republika\.pl
+https?:\/\/([^\/]*\.)?mp3ringtonerxw\.blogspot\.com
+https?:\/\/([^\/]*\.)?mp3sunrise\.com
+https?:\/\/([^\/]*\.)?mpdtbq8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mpeghunter-com-cyc0bec7k\.blogspot\.com
+https?:\/\/([^\/]*\.)?mqirai4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mrako4\.com
+https?:\/\/([^\/]*\.)?mrchewsasianbeaver-bwhmc0sk\.blogspot\.com
+https?:\/\/([^\/]*\.)?mrchewsasianbeaver-com-omazvpr\.blogspot\.com
+https?:\/\/([^\/]*\.)?mrntf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mrs-vette-hot-mom\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?mrwolfy49\.blogspot\.com
+https?:\/\/([^\/]*\.)?ms-dos-boot-disk\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?mster6\.com
+https?:\/\/([^\/]*\.)?mtaa5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mthelen\.250free\.com
+https?:\/\/([^\/]*\.)?muecst9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mughalbank\.com
+https?:\/\/([^\/]*\.)?mumms\.info
+https?:\/\/([^\/]*\.)?murdersoul\.blogspot\.com
+https?:\/\/([^\/]*\.)?murku-gunush\.110mb\.com
+https?:\/\/([^\/]*\.)?mus1ca\.info
+https?:\/\/([^\/]*\.)?muscle-pain-leg-cause\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?muscle-relaxers\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?music\.spacepur\.de
+https?:\/\/([^\/]*\.)?musicguild\.bc\.edu
+https?:\/\/([^\/]*\.)?mutantalias\.blogspot\.com
+https?:\/\/([^\/]*\.)?muwn9\.szm\.sk
+https?:\/\/([^\/]*\.)?muzyr\.szm\.sk
+https?:\/\/([^\/]*\.)?mvoht\.szm\.sk
+https?:\/\/([^\/]*\.)?mvsyonh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mwqbg\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?mwwkps6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mxmva\.szm\.sk
+https?:\/\/([^\/]*\.)?mxqwnn2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?my-cashadvance\.com
+https?:\/\/([^\/]*\.)?my-first-sex-teacherlbp\.blogspot\.com
+https?:\/\/([^\/]*\.)?my-friends-hot-mom-free-pic\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?my-friends-hot-mom-lesbian\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?my-friends-hot-mom-mrs-lee\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?my-host-space\.com
+https?:\/\/([^\/]*\.)?my-land\.bravehost\.com
+https?:\/\/([^\/]*\.)?my-mortgagerates\.com
+https?:\/\/([^\/]*\.)?my-summit\.com
+https?:\/\/([^\/]*\.)?my-teensex-wikes\.blogspot\.com
+https?:\/\/([^\/]*\.)?myfgj\.info
+https?:\/\/([^\/]*\.)?myhost\.gb\.com
+https?:\/\/([^\/]*\.)?mymitsubishiparts\.cn
+https?:\/\/([^\/]*\.)?mymr\.net
+https?:\/\/([^\/]*\.)?mynet-poker\.com
+https?:\/\/([^\/]*\.)?myprintworks\.com
+https?:\/\/([^\/]*\.)?myrotunda\.com
+https?:\/\/([^\/]*\.)?mysecretmovies-com-tul73\.blogspot\.com
+https?:\/\/([^\/]*\.)?myseo\.com\.cn
+https?:\/\/([^\/]*\.)?myshcompany\.com
+https?:\/\/([^\/]*\.)?mysmetrix\.asp2\.cz
+https?:\/\/([^\/]*\.)?myspace-myspace-my\.blogspot\.com
+https?:\/\/([^\/]*\.)?myteepo-3\.blogspot\.com
+https?:\/\/([^\/]*\.)?myts\.vip\.sina\.com
+https?:\/\/([^\/]*\.)?mywaybackwhen\.blogspot\.com
+https?:\/\/([^\/]*\.)?mzaxl\.szm\.sk
+https?:\/\/([^\/]*\.)?mzayxt2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mzlurz8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?mzwbifn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?n-free-porn-video-sample\.blogspot\.com
+https?:\/\/([^\/]*\.)?n-free-video-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?na-hummer\.jot\.com
+https?:\/\/([^\/]*\.)?naacpncnetwork\.org
+https?:\/\/([^\/]*\.)?naarttrl\.forumzen\.com
+https?:\/\/([^\/]*\.)?naffpqh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?naomiserge\.info
+https?:\/\/([^\/]*\.)?napalerd\.forumzen\.com
+https?:\/\/([^\/]*\.)?napas5\.com
+https?:\/\/([^\/]*\.)?naprosyn500mg\.sblog\.cz
+https?:\/\/([^\/]*\.)?naproxen\.zapto\.org
+https?:\/\/([^\/]*\.)?naqowp1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nariclet\.forumzen\.com
+https?:\/\/([^\/]*\.)?nas7fk\.com
+https?:\/\/([^\/]*\.)?nasacort\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?nasonex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?nastyalien-com-dk0wnd58i\.blogspot\.com
+https?:\/\/([^\/]*\.)?nastyalien-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?nastyrat-b7\.blogspot\.com
+https?:\/\/([^\/]*\.)?nastyrat-com-b8mu31h87m\.blogspot\.com
+https?:\/\/([^\/]*\.)?nastyrat-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?natskam\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?natural-skin\.nm\.ru
+https?:\/\/([^\/]*\.)?natural-tit-cum\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?natural_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?naughty-com-wdk\.blogspot\.com
+https?:\/\/([^\/]*\.)?naughty-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?navse\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nbay2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nbikkpb\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nbmhvbv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nbxc3\.szm\.sk
+https?:\/\/([^\/]*\.)?nchqqi4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ncpx5\.szm\.sk
+https?:\/\/([^\/]*\.)?ncwash\.com
+https?:\/\/([^\/]*\.)?nd-tli\.com
+https?:\/\/([^\/]*\.)?ndarj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ndnwrby\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nebraskamortgage-x\.com
+https?:\/\/([^\/]*\.)?nedneutr\.goodbb\.net
+https?:\/\/([^\/]*\.)?nedpbi3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?need-site\.com
+https?:\/\/([^\/]*\.)?nefariouswraith\.blogspot\.com
+https?:\/\/([^\/]*\.)?negozio-strumento-musicale\.19mb\.info
+https?:\/\/([^\/]*\.)?nejqssk\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?neko-adg\.blogspot\.com
+https?:\/\/([^\/]*\.)?nekoo\.cn
+https?:\/\/([^\/]*\.)?nekostar3\.blogspot\.com
+https?:\/\/([^\/]*\.)?nelaidla\.ifrance\.com
+https?:\/\/([^\/]*\.)?nelcala\.fr-bb\.com
+https?:\/\/([^\/]*\.)?nelior\.goodbb\.net
+https?:\/\/([^\/]*\.)?neri-albany\.blogspot\.com
+https?:\/\/([^\/]*\.)?neroj\.szm\.sk
+https?:\/\/([^\/]*\.)?nerve\.zyns\.com
+https?:\/\/([^\/]*\.)?net0551\.com
+https?:\/\/([^\/]*\.)?netbank\.cn
+https?:\/\/([^\/]*\.)?nethams\.pp\.ru
+https?:\/\/([^\/]*\.)?netinternetbanking\.info
+https?:\/\/([^\/]*\.)?netteak\.pp\.ru
+https?:\/\/([^\/]*\.)?nettyre\.pp\.ru
+https?:\/\/([^\/]*\.)?neux9\.szm\.sk
+https?:\/\/([^\/]*\.)?nevadamortgage-x\.com
+https?:\/\/([^\/]*\.)?nevados-hiking-boot\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?nevulo-teen-sex-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?new-ringtonesou\.blogspot\.com
+https?:\/\/([^\/]*\.)?new-watches\.fasthost\.tv
+https?:\/\/([^\/]*\.)?newae\.info
+https?:\/\/([^\/]*\.)?newaf\.info
+https?:\/\/([^\/]*\.)?newah\.info
+https?:\/\/([^\/]*\.)?newai\.info
+https?:\/\/([^\/]*\.)?newaq\.info
+https?:\/\/([^\/]*\.)?newar\.info
+https?:\/\/([^\/]*\.)?newau\.info
+https?:\/\/([^\/]*\.)?newbabyface\.net
+https?:\/\/([^\/]*\.)?newboyu\.com
+https?:\/\/([^\/]*\.)?newdietpills\.bravehost\.com
+https?:\/\/([^\/]*\.)?newgals-com-ean\.blogspot\.com
+https?:\/\/([^\/]*\.)?newhampshiremortgage-x\.com
+https?:\/\/([^\/]*\.)?newjerseymortgage-x\.com
+https?:\/\/([^\/]*\.)?newmexicomortgage-x\.com
+https?:\/\/([^\/]*\.)?newnewsonline\.info
+https?:\/\/([^\/]*\.)?newob\.info
+https?:\/\/([^\/]*\.)?newoc\.info
+https?:\/\/([^\/]*\.)?newom\.info
+https?:\/\/([^\/]*\.)?newov\.info
+https?:\/\/([^\/]*\.)?newox\.info
+https?:\/\/([^\/]*\.)?newoz\.info
+https?:\/\/([^\/]*\.)?news\.101freehost\.com
+https?:\/\/([^\/]*\.)?news\.engin\.brown\.edu
+https?:\/\/([^\/]*\.)?newwesthonda\.info
+https?:\/\/([^\/]*\.)?newworldmen\.com
+https?:\/\/([^\/]*\.)?newyorkmortgage-x\.com
+https?:\/\/([^\/]*\.)?nexium\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?nexiumbuy\.on\.to
+https?:\/\/([^\/]*\.)?nexiumbuygeneric\.snap\.to
+https?:\/\/([^\/]*\.)?nexiumcheap\.notrix\.ch
+https?:\/\/([^\/]*\.)?nexiumcheapbuy\.notrix\.de
+https?:\/\/([^\/]*\.)?nexiumgeneric\.dive\.to
+https?:\/\/([^\/]*\.)?nexxx-com-r138wgeob5\.blogspot\.com
+https?:\/\/([^\/]*\.)?nexxx-kc113s775\.blogspot\.com
+https?:\/\/([^\/]*\.)?nfbwx\.szm\.sk
+https?:\/\/([^\/]*\.)?nffnj\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nfl-cheerleader-outfit\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?nfme8\.szm\.sk
+https?:\/\/([^\/]*\.)?nfpg4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nfyxtime\.com
+https?:\/\/([^\/]*\.)?nggleb0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nginju3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nhqkyun\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nibko\.info
+https?:\/\/([^\/]*\.)?nice-asian-ass-and-sex\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?nice-boob-picture\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?niche-porn-sites\.org
+https?:\/\/([^\/]*\.)?nickdarula\.com
+https?:\/\/([^\/]*\.)?nicwan\.com
+https?:\/\/([^\/]*\.)?nidarim\.com
+https?:\/\/([^\/]*\.)?niebn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nifedipine-solubility\.tlg\.pl
+https?:\/\/([^\/]*\.)?nifjv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?niharpe\.dl\.pl
+https?:\/\/([^\/]*\.)?nihosi\.com
+https?:\/\/([^\/]*\.)?nika-ru\.blogspot\.com
+https?:\/\/([^\/]*\.)?nikkie-cole\.blogspot\.com
+https?:\/\/([^\/]*\.)?nimast\.com
+https?:\/\/([^\/]*\.)?nimit-zood\.ibelgique\.com
+https?:\/\/([^\/]*\.)?ninenailteen\.blogspot\.com
+https?:\/\/([^\/]*\.)?ninjasidestep\.com
+https?:\/\/([^\/]*\.)?ninostarto\.blogspot\.com
+https?:\/\/([^\/]*\.)?ninuni\.com
+https?:\/\/([^\/]*\.)?nipples-puffy-teenage\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?nipverify\.icspace\.net
+https?:\/\/([^\/]*\.)?nissan-240sx\.newmail\.ru
+https?:\/\/([^\/]*\.)?nissan-dealer\.newmail\.ru
+https?:\/\/([^\/]*\.)?nissan-frontier\.nm\.ru
+https?:\/\/([^\/]*\.)?nissan-motor\.nm\.ru
+https?:\/\/([^\/]*\.)?nissan-murano\.newmail\.ru
+https?:\/\/([^\/]*\.)?nissan-part\.nightmail\.ru
+https?:\/\/([^\/]*\.)?nissan-pathfinder\.hotmail\.ru
+https?:\/\/([^\/]*\.)?nissan-sentra\.hotmail\.ru
+https?:\/\/([^\/]*\.)?nissan-titan\.hotmail\.ru
+https?:\/\/([^\/]*\.)?nissan-truck\.hotmail\.ru
+https?:\/\/([^\/]*\.)?nissan-xterra\.hotmail\.ru
+https?:\/\/([^\/]*\.)?nissan_240sx\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_dealer\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_frontier\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_motor\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_murano1\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_part\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_pathfind\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_sentra\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_titan\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_truck\.chat\.ru
+https?:\/\/([^\/]*\.)?nissan_xterra\.chat\.ru
+https?:\/\/([^\/]*\.)?nixve\.blogspot\.com
+https?:\/\/([^\/]*\.)?njfc\.nease\.net
+https?:\/\/([^\/]*\.)?njhk\.jiuwu\.com
+https?:\/\/([^\/]*\.)?njhk\.yushantang\.com
+https?:\/\/([^\/]*\.)?njuta78\.125mb\.com
+https?:\/\/([^\/]*\.)?njzthvq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nkkqq\.szm\.sk
+https?:\/\/([^\/]*\.)?nkxow\.szm\.sk
+https?:\/\/([^\/]*\.)?nkzzm\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nlexc\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nmagiietending\.blogspot\.com
+https?:\/\/([^\/]*\.)?nmwj5\.szm\.sk
+https?:\/\/([^\/]*\.)?nnline\.info
+https?:\/\/([^\/]*\.)?no-deposit-casino-bonus\.any\.pl
+https?:\/\/([^\/]*\.)?no-faxing-payday--loan\.blogspot\.com
+https?:\/\/([^\/]*\.)?no-free-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?no1babes-com-juquj\.blogspot\.com
+https?:\/\/([^\/]*\.)?noalzel\.blogcu\.com
+https?:\/\/([^\/]*\.)?nobocli\.bbfr\.net
+https?:\/\/([^\/]*\.)?nobullhardcore-com-i7mpf5i83t\.blogspot\.com
+https?:\/\/([^\/]*\.)?nodb0\.szm\.sk
+https?:\/\/([^\/]*\.)?noelchi\.td\.pl
+https?:\/\/([^\/]*\.)?noeldar\.td\.pl
+https?:\/\/([^\/]*\.)?nofatonline\.com
+https?:\/\/([^\/]*\.)?nolamon\.naturalforum\.net
+https?:\/\/([^\/]*\.)?noletoolo\.dl\.pl
+https?:\/\/([^\/]*\.)?nomote4\.blogspot\.com
+https?:\/\/([^\/]*\.)?nopasrol\.myrealboard\.com
+https?:\/\/([^\/]*\.)?nord9maedchen73\.blogspot\.com
+https?:\/\/([^\/]*\.)?nordette\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?norflex100mg\.sblog\.cz
+https?:\/\/([^\/]*\.)?normanburke\.blogspot\.com
+https?:\/\/([^\/]*\.)?noro-alanis\.blogspot\.com
+https?:\/\/([^\/]*\.)?northcarolinamortgage-x\.com
+https?:\/\/([^\/]*\.)?northdakotamortgage-x\.com
+https?:\/\/([^\/]*\.)?norvasc\.coz\.in
+https?:\/\/([^\/]*\.)?norwichwriters\.org
+https?:\/\/([^\/]*\.)?noscudom\.forumzen\.com
+https?:\/\/([^\/]*\.)?noseypets\.com
+https?:\/\/([^\/]*\.)?nostawnevets53\.blogspot\.com
+https?:\/\/([^\/]*\.)?not-another-teen-movie-ddw5x\.blogspot\.com
+https?:\/\/([^\/]*\.)?notelymphatic\.org
+https?:\/\/([^\/]*\.)?notereport\.info
+https?:\/\/([^\/]*\.)?notrocli\.zj\.pl
+https?:\/\/([^\/]*\.)?novanasa\.php5\.cz
+https?:\/\/([^\/]*\.)?novar\.darkbb\.com
+https?:\/\/([^\/]*\.)?noviac\.jc\.pl
+https?:\/\/([^\/]*\.)?nox-teeniefiles-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?npchwp9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nqfahsc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nqkt4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nqllo\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nqlp7\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nqod6\.szm\.sk
+https?:\/\/([^\/]*\.)?nqquc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nqyz6\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?nsstc\.uah\.edu
+https?:\/\/([^\/]*\.)?nsxslk5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nthfind\.com
+https?:\/\/([^\/]*\.)?nu-alicia\.blogspot\.com
+https?:\/\/([^\/]*\.)?nucs2\.szm\.sk
+https?:\/\/([^\/]*\.)?nuddxy-free-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?nude-ass-video\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?nude-lingerie-model-photo\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?nude-little-ass\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?nude-teacher\.com
+https?:\/\/([^\/]*\.)?nudecelebritypictures-c6ob080\.blogspot\.com
+https?:\/\/([^\/]*\.)?nudecelebritypictures-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?nudecelebritypictures-nu-hqb65kdn\.blogspot\.com
+https?:\/\/([^\/]*\.)?nudestarz-com-xurig\.blogspot\.com
+https?:\/\/([^\/]*\.)?nudistlog-com-oygsrji75\.blogspot\.com
+https?:\/\/([^\/]*\.)?nugo-aerobics\.blogspot\.com
+https?:\/\/([^\/]*\.)?nuje9\.szm\.sk
+https?:\/\/([^\/]*\.)?numbness-in-right-leg\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?numimb\.com
+https?:\/\/([^\/]*\.)?numr2\.szm\.sk
+https?:\/\/([^\/]*\.)?nunikal\.stabilt\.se
+https?:\/\/([^\/]*\.)?nuqfz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nurglesnymphs-com-nuxow\.blogspot\.com
+https?:\/\/([^\/]*\.)?nurs-employment\.boom\.ru
+https?:\/\/([^\/]*\.)?nurs2employment\.chat\.ru
+https?:\/\/([^\/]*\.)?nurse-fucking-video\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?nursi2-education\.boom\.ru
+https?:\/\/([^\/]*\.)?nursin-education\.boom\.ru
+https?:\/\/([^\/]*\.)?nursin2education\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing-career\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-college\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-degree\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-degree\.fromru\.com
+https?:\/\/([^\/]*\.)?nursing-degree\.pochta\.ru
+https?:\/\/([^\/]*\.)?nursing-home\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-home\.land\.ru
+https?:\/\/([^\/]*\.)?nursing-home\.pochta\.ru
+https?:\/\/([^\/]*\.)?nursing-job\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-job\.land\.ru
+https?:\/\/([^\/]*\.)?nursing-job\.pochta\.ru
+https?:\/\/([^\/]*\.)?nursing-school\.fromru\.com
+https?:\/\/([^\/]*\.)?nursing-school\.pochta\.ru
+https?:\/\/([^\/]*\.)?nursing-scrubs\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing-uniform\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing2-school\.boom\.ru
+https?:\/\/([^\/]*\.)?nursing2college\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing2school\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing2scrubs\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing4career\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing4degree\.chat\.ru
+https?:\/\/([^\/]*\.)?nursing4job\.chat\.ru
+https?:\/\/([^\/]*\.)?nursingeducation\.chat\.ru
+https?:\/\/([^\/]*\.)?nutramigen-lipil\.leg4is\.be
+https?:\/\/([^\/]*\.)?nvdwc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nwxnv\.szm\.sk
+https?:\/\/([^\/]*\.)?nxbbyhc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nxnmwlh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?nxsq0\.szm\.sk
+https?:\/\/([^\/]*\.)?o-medic\.tripod\.com
+https?:\/\/([^\/]*\.)?o8\.aus\.cc
+https?:\/\/([^\/]*\.)?oa18\.cc
+https?:\/\/([^\/]*\.)?oa2010\.com
+https?:\/\/([^\/]*\.)?oalink\.cn
+https?:\/\/([^\/]*\.)?obesity-check\.com
+https?:\/\/([^\/]*\.)?obosra\.com
+https?:\/\/([^\/]*\.)?obrazok\.dtdns\.net
+https?:\/\/([^\/]*\.)?obsque\.cn
+https?:\/\/([^\/]*\.)?ocapk\.szm\.sk
+https?:\/\/([^\/]*\.)?oceshdes\.forumzen\.com
+https?:\/\/([^\/]*\.)?ockulpas\.forumzen\.com
+https?:\/\/([^\/]*\.)?ocleelia\.forumzen\.com
+https?:\/\/([^\/]*\.)?ocscrtro\.forumzen\.com
+https?:\/\/([^\/]*\.)?oczt4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?odfxci8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?odmi1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?odqw4\.szm\.sk
+https?:\/\/([^\/]*\.)?oechnxln\.tripod\.com
+https?:\/\/([^\/]*\.)?oecx6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?oeqls\.szm\.sk
+https?:\/\/([^\/]*\.)?offerta-volo-madrid\.19mb\.info
+https?:\/\/([^\/]*\.)?officialkes\.com
+https?:\/\/([^\/]*\.)?ogooch\.ifrance\.com
+https?:\/\/([^\/]*\.)?ogzx4\.szm\.sk
+https?:\/\/([^\/]*\.)?ohgood-com-dv8l\.blogspot\.com
+https?:\/\/([^\/]*\.)?ohgood-com-isxvi72\.blogspot\.com
+https?:\/\/([^\/]*\.)?ohgood-com-rv0\.blogspot\.com
+https?:\/\/([^\/]*\.)?ohiomortgage-x\.com
+https?:\/\/([^\/]*\.)?ohmybaby\.net
+https?:\/\/([^\/]*\.)?oilpaintingkingdom\.com
+https?:\/\/([^\/]*\.)?oily-skin\.newmail\.ru
+https?:\/\/([^\/]*\.)?oily_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?oip\.org\.ua
+https?:\/\/([^\/]*\.)?oirwt\.szm\.sk
+https?:\/\/([^\/]*\.)?ojdo0\.szm\.sk
+https?:\/\/([^\/]*\.)?ojdx7\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?okayhotels\.com
+https?:\/\/([^\/]*\.)?okcompany\.org
+https?:\/\/([^\/]*\.)?oklahomamortgage-x\.com
+https?:\/\/([^\/]*\.)?okrentcar\.org
+https?:\/\/([^\/]*\.)?old-lady-fuck\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?old-lady-suck-dick\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?old69-com-mdt71k\.blogspot\.com
+https?:\/\/([^\/]*\.)?old69-k40bqc\.blogspot\.com
+https?:\/\/([^\/]*\.)?older-mature-tgp\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?oldon\.info
+https?:\/\/([^\/]*\.)?oldp9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?oldreboc\.forumzen\.com
+https?:\/\/([^\/]*\.)?olijanko\.republika\.pl
+https?:\/\/([^\/]*\.)?olml2\.szm\.sk
+https?:\/\/([^\/]*\.)?olnnt\.szm\.sk
+https?:\/\/([^\/]*\.)?olocnamon\.cultureforum\.net
+https?:\/\/([^\/]*\.)?olocobo\.goodforum\.net
+https?:\/\/([^\/]*\.)?olocobo\.grafbb\.com
+https?:\/\/([^\/]*\.)?olodarelt\.heavenforum\.com
+https?:\/\/([^\/]*\.)?olodarelt\.highforum\.net
+https?:\/\/([^\/]*\.)?olodronric\.su\.pl
+https?:\/\/([^\/]*\.)?olodronro\.blogcu\.com
+https?:\/\/([^\/]*\.)?oloolovi\.ephpbb\.com
+https?:\/\/([^\/]*\.)?oloorrac\.blogcu\.com
+https?:\/\/([^\/]*\.)?olorelrel\.blogcu\.com
+https?:\/\/([^\/]*\.)?olorodom\.blogcu\.com
+https?:\/\/([^\/]*\.)?oltcha\.blogspot\.com
+https?:\/\/([^\/]*\.)?olyelzet\.forumzen\.com
+https?:\/\/([^\/]*\.)?omchades\.forumzen\.com
+https?:\/\/([^\/]*\.)?omega\.spb\.ru
+https?:\/\/([^\/]*\.)?omxmlvf\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?on-poteen-1-2\.blogspot\.com
+https?:\/\/([^\/]*\.)?onac2\.szm\.sk
+https?:\/\/([^\/]*\.)?one2you\.biz
+https?:\/\/([^\/]*\.)?one2you\.info
+https?:\/\/([^\/]*\.)?onfew\.szm\.sk
+https?:\/\/([^\/]*\.)?onlin-nurs-degre\.boom\.ru
+https?:\/\/([^\/]*\.)?online-blackjack-site\.com
+https?:\/\/([^\/]*\.)?online-casino-l\.blogspot\.com
+https?:\/\/([^\/]*\.)?online-casino-wiki\.com
+https?:\/\/([^\/]*\.)?online-casinos-city\.com
+https?:\/\/([^\/]*\.)?online-casinos-discovered\.com
+https?:\/\/([^\/]*\.)?online-degree-4you\.com
+https?:\/\/([^\/]*\.)?online-gambling-b\.blogspot\.com
+https?:\/\/([^\/]*\.)?online-games24x7\.com
+https?:\/\/([^\/]*\.)?online-medications24x7\.com
+https?:\/\/([^\/]*\.)?online-pharm\.zmail\.ru
+https?:\/\/([^\/]*\.)?online-pharmacy-24x7\.net
+https?:\/\/([^\/]*\.)?online-pharmacy-4u\.net
+https?:\/\/([^\/]*\.)?online-poker-game\.blogspot\.com
+https?:\/\/([^\/]*\.)?online-poker-online-poker\.net
+https?:\/\/([^\/]*\.)?online-poker\.black-poker\.com
+https?:\/\/([^\/]*\.)?online-poker\.dd\.vg
+https?:\/\/([^\/]*\.)?online-prozac\.boom\.ru
+https?:\/\/([^\/]*\.)?online-shop-24x7\.com
+https?:\/\/([^\/]*\.)?online-tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?online1-degree\.boom\.ru
+https?:\/\/([^\/]*\.)?online1course\.chat\.ru
+https?:\/\/([^\/]*\.)?online1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?online3course\.chat\.ru
+https?:\/\/([^\/]*\.)?online4nursing\.chat\.ru
+https?:\/\/([^\/]*\.)?onlineglass\.siteburg\.com
+https?:\/\/([^\/]*\.)?onlinepharmacy-4u\.net
+https?:\/\/([^\/]*\.)?onlinepharmacy2004\.net
+https?:\/\/([^\/]*\.)?onlinesexcity\.info
+https?:\/\/([^\/]*\.)?only-ringtone\.com
+https?:\/\/([^\/]*\.)?only4game\.com
+https?:\/\/([^\/]*\.)?onlycuties-com\.jalovica\.dtdns\.net
+https?:\/\/([^\/]*\.)?onlymovies-com-e1tez\.blogspot\.com
+https?:\/\/([^\/]*\.)?onlymovies-com-eczm1w\.blogspot\.com
+https?:\/\/([^\/]*\.)?onlyteenstgp-com-rmn\.blogspot\.com
+https?:\/\/([^\/]*\.)?onlyteenstgp-com-rrcamwws3\.blogspot\.com
+https?:\/\/([^\/]*\.)?onlyteenstgp-we\.blogspot\.com
+https?:\/\/([^\/]*\.)?onmycrew\.blogspot\.com
+https?:\/\/([^\/]*\.)?onrueetd\.forumzen\.com
+https?:\/\/([^\/]*\.)?oogqj\.szm\.sk
+https?:\/\/([^\/]*\.)?oohsexy-com-hob8e5y8r\.blogspot\.com
+https?:\/\/([^\/]*\.)?oohsexy-com-hpemrnff\.blogspot\.com
+https?:\/\/([^\/]*\.)?oohsexy\.com
+https?:\/\/([^\/]*\.)?oohsexy000\.blogspot\.com
+https?:\/\/([^\/]*\.)?ooline\.info
+https?:\/\/([^\/]*\.)?oolive\.info
+https?:\/\/([^\/]*\.)?oonk1\.szm\.sk
+https?:\/\/([^\/]*\.)?ooooi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ootop\.info
+https?:\/\/([^\/]*\.)?ooyy2\.szm\.sk
+https?:\/\/([^\/]*\.)?opastr\.com
+https?:\/\/([^\/]*\.)?oping\.info
+https?:\/\/([^\/]*\.)?opiytr\.com
+https?:\/\/([^\/]*\.)?opkr1\.szm\.sk
+https?:\/\/([^\/]*\.)?optbblx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?optfzj5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?opyfsen\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?oqaknky\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?oqfwt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?or-drondron\.xa\.pl
+https?:\/\/([^\/]*\.)?orabc\.info
+https?:\/\/([^\/]*\.)?oracelta\.lolforum\.net
+https?:\/\/([^\/]*\.)?orasta\.com
+https?:\/\/([^\/]*\.)?orbasolo\.dl\.pl
+https?:\/\/([^\/]*\.)?orcnaac\.discutfree\.com
+https?:\/\/([^\/]*\.)?orcoc\.lolbb\.com
+https?:\/\/([^\/]*\.)?orcore\.graphforum\.com
+https?:\/\/([^\/]*\.)?orddercelexa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orddercialisonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordderlevitra\.ovp\.pl
+https?:\/\/([^\/]*\.)?orddertramadolonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orddervalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?orddervaliumonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordderviagra\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordderviagraonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordderzithromax\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordeertramadol\.ovp\.pl
+https?:\/\/([^\/]*\.)?order-blue-phentermine\.coz\.in
+https?:\/\/([^\/]*\.)?order-ritalin-online\.contact\.cc
+https?:\/\/([^\/]*\.)?order-viagra\.health-livening\.com
+https?:\/\/([^\/]*\.)?orderacyclovirr\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderadipexx\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderalbenzaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderalprazolamm\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderambienn\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderamoxicillinn\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderativann\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderccialiss\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordercelexaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderciaalisonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordercialisonline\.jubiiblog\.de
+https?:\/\/([^\/]*\.)?ordercialiss\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordercializ\.blogcu\.com
+https?:\/\/([^\/]*\.)?ordercializ\.spotbb\.com
+https?:\/\/([^\/]*\.)?ordercymbaltaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderhydrocodonee\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderlevitraa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderllevitra\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordermeridiaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderphentermin\.phpbbx\.de
+https?:\/\/([^\/]*\.)?orderphenterminee\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderpropeciaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrcialisonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrlevitra\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrtramadoll\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrtramadolonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrvalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrviagraa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderrviagraonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordersoma\.blogsome\.com
+https?:\/\/([^\/]*\.)?ordersomaa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderssoma\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordertramadoll\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordertramadollonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderultramm\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordervaliumm\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderviagraa\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderviagraaonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?ordervvalium\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderxanaxx\.ovp\.pl
+https?:\/\/([^\/]*\.)?orderxenicalonline\.ir\.pl
+https?:\/\/([^\/]*\.)?orecchino\.7god\.info
+https?:\/\/([^\/]*\.)?orecchino\.freespase\.info
+https?:\/\/([^\/]*\.)?oregonmortgage-x\.com
+https?:\/\/([^\/]*\.)?orgetacel\.discutforum\.com
+https?:\/\/([^\/]*\.)?orgeter\.cultureforum\.net
+https?:\/\/([^\/]*\.)?orgs\.indianatech\.edu
+https?:\/\/([^\/]*\.)?orletovar\.zikforum\.com
+https?:\/\/([^\/]*\.)?ormme\.com
+https?:\/\/([^\/]*\.)?ornildom\.forumzen\.com
+https?:\/\/([^\/]*\.)?orrdercialisonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orrdertramadolonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?orsaverc\.forumzen\.com
+https?:\/\/([^\/]*\.)?ortar\.com
+https?:\/\/([^\/]*\.)?ortho-tri-cyclen\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ortrocrol\.heavenforum\.com
+https?:\/\/([^\/]*\.)?ortrocrol\.highforum\.net
+https?:\/\/([^\/]*\.)?orvict\.ephpbb\.com
+https?:\/\/([^\/]*\.)?oryc0\.szm\.sk
+https?:\/\/([^\/]*\.)?orzeldron\.lightbb\.com
+https?:\/\/([^\/]*\.)?osakabondage\.info
+https?:\/\/([^\/]*\.)?osfi5\.szm\.sk
+https?:\/\/([^\/]*\.)?osthtp1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?otqsc\.szm\.sk
+https?:\/\/([^\/]*\.)?oudomdar\.dl\.pl
+https?:\/\/([^\/]*\.)?oudomolo\.lolbb\.com
+https?:\/\/([^\/]*\.)?oudronc4t\.blogcu\.com
+https?:\/\/([^\/]*\.)?ouerco\.lightbb\.com
+https?:\/\/([^\/]*\.)?oufienoc\.forumzen\.com
+https?:\/\/([^\/]*\.)?ouglova\.blogspot\.com
+https?:\/\/([^\/]*\.)?ouhymtro\.forumzen\.com
+https?:\/\/([^\/]*\.)?ouor\.lightbb\.com
+https?:\/\/([^\/]*\.)?ouorrac\.bbfr\.net
+https?:\/\/([^\/]*\.)?ouracdron\.discutfree\.com
+https?:\/\/([^\/]*\.)?ourolal\.discutfree\.com
+https?:\/\/([^\/]*\.)?outrocvar\.zj\.pl
+https?:\/\/([^\/]*\.)?outward-dev\.com
+https?:\/\/([^\/]*\.)?ouvier\.zj\.pl
+https?:\/\/([^\/]*\.)?overseas-adventure-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?ovparnel\.dl\.pl
+https?:\/\/([^\/]*\.)?ovpn2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ovrie\.szm\.sk
+https?:\/\/([^\/]*\.)?ovu\.edu
+https?:\/\/([^\/]*\.)?owll1\.szm\.sk
+https?:\/\/([^\/]*\.)?oxpass-com-g5\.blogspot\.com
+https?:\/\/([^\/]*\.)?oxpass-com-gt71a0\.blogspot\.com
+https?:\/\/([^\/]*\.)?oxpass-com-hurol\.blogspot\.com
+https?:\/\/([^\/]*\.)?oyspa\.szm\.sk
+https?:\/\/([^\/]*\.)?oz6soqa\.nokedem\.com
+https?:\/\/([^\/]*\.)?ozbk9\.szm\.sk
+https?:\/\/([^\/]*\.)?ozgzm\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ozxz5\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ozyexk2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?p-free-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?p-n-lesbian-sex-video-d\.blogspot\.com
+https?:\/\/([^\/]*\.)?p-teens-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?p-vi\.com
+https?:\/\/([^\/]*\.)?p1v\.org
+https?:\/\/([^\/]*\.)?p2l\.info
+https?:\/\/([^\/]*\.)?pa19\.com
+https?:\/\/([^\/]*\.)?pacfic-poker\.mutogen\.be
+https?:\/\/([^\/]*\.)?pacficpoker\.xwiki\.com
+https?:\/\/([^\/]*\.)?pacific-poker\.black-poker\.com
+https?:\/\/([^\/]*\.)?paddedapex\.org
+https?:\/\/([^\/]*\.)?paeecpx\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pafyawv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pain-medications\.us
+https?:\/\/([^\/]*\.)?pain-relief\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?pain-relief\.2x4\.ru
+https?:\/\/([^\/]*\.)?pain-relief\.fromru\.com
+https?:\/\/([^\/]*\.)?pain-relief\.newmail\.ru
+https?:\/\/([^\/]*\.)?pain_relief\.chat\.ru
+https?:\/\/([^\/]*\.)?paisi\.com
+https?:\/\/([^\/]*\.)?paisidesign\.com
+https?:\/\/([^\/]*\.)?pam\.freehostia\.com
+https?:\/\/([^\/]*\.)?pamlicohouse\.com
+https?:\/\/([^\/]*\.)?panama2cruise\.boom\.ru
+https?:\/\/([^\/]*\.)?panama2cruise\.chat\.ru
+https?:\/\/([^\/]*\.)?panamacruise1\.boom\.ru
+https?:\/\/([^\/]*\.)?panamacruise1\.chat\.ru
+https?:\/\/([^\/]*\.)?pandamovies-com-g6lz762n76\.blogspot\.com
+https?:\/\/([^\/]*\.)?pandamovies-com-tq32\.blogspot\.com
+https?:\/\/([^\/]*\.)?pandamovies-o4me7xqq0f\.blogspot\.com
+https?:\/\/([^\/]*\.)?panshan888\.com
+https?:\/\/([^\/]*\.)?panss\.org
+https?:\/\/([^\/]*\.)?panthersjaguar\.info
+https?:\/\/([^\/]*\.)?panty-ass-com-w1\.blogspot\.com
+https?:\/\/([^\/]*\.)?panty-ass-com-w8\.blogspot\.com
+https?:\/\/([^\/]*\.)?pantybuns-com-a6ejgve\.blogspot\.com
+https?:\/\/([^\/]*\.)?pantybuns-com-axeoa77ze5\.blogspot\.com
+https?:\/\/([^\/]*\.)?pantybuns-com-tl0\.blogspot\.com
+https?:\/\/([^\/]*\.)?pantyhose-face\.pupava\.dtdns\.net
+https?:\/\/([^\/]*\.)?pantyhose-net\.com
+https?:\/\/([^\/]*\.)?paola-e-chiara\.host24h\.info
+https?:\/\/([^\/]*\.)?paper--shredder\.boom\.ru
+https?:\/\/([^\/]*\.)?paper-s\.boom\.ru
+https?:\/\/([^\/]*\.)?paper1-shredder\.boom\.ru
+https?:\/\/([^\/]*\.)?paper1shredder\.chat\.ru
+https?:\/\/([^\/]*\.)?paper5shredder\.chat\.ru
+https?:\/\/([^\/]*\.)?paperbox\.freephpwebhosting\.net
+https?:\/\/([^\/]*\.)?paperroom\.blogspot\.com
+https?:\/\/([^\/]*\.)?papr-shredder\.boom\.ru
+https?:\/\/([^\/]*\.)?paradisenudes-com-o71a\.blogspot\.com
+https?:\/\/([^\/]*\.)?paradisenudes-com-os\.blogspot\.com
+https?:\/\/([^\/]*\.)?paralegal1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?parench\.ifrance\.com
+https?:\/\/([^\/]*\.)?parigi-appartamento-vacanza\.zoom10x\.info
+https?:\/\/([^\/]*\.)?paris-hilton-huxik\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-lukuv\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-nude-tape\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-pijid\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-pojic\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-porn\.0800-porn\.com
+https?:\/\/([^\/]*\.)?paris-hilton-sex-tape-xxx\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-sex-video-gf5m5\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-sex-video-sez\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-socog\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris-hilton-xidig\.blogspot\.com
+https?:\/\/([^\/]*\.)?paris\.php5\.cz
+https?:\/\/([^\/]*\.)?parishilton-paris-hilton\.blogspot\.com
+https?:\/\/([^\/]*\.)?parishilton-paris\.blogspot\.com
+https?:\/\/([^\/]*\.)?parnvf8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?partei-deutsches-reich\.de
+https?:\/\/([^\/]*\.)?parties-supply\.jeepsyc\.be
+https?:\/\/([^\/]*\.)?party-poker\.black-poker\.com
+https?:\/\/([^\/]*\.)?pasacvi\.zikforum\.com
+https?:\/\/([^\/]*\.)?paschiel\.blogcu\.com
+https?:\/\/([^\/]*\.)?pasdronli\.winnerforum\.net
+https?:\/\/([^\/]*\.)?pashkak0marov\.blogspot\.com
+https?:\/\/([^\/]*\.)?paslibo\.myrealboard\.com
+https?:\/\/([^\/]*\.)?pasoloro\.graphforum\.com
+https?:\/\/([^\/]*\.)?pasoloro\.highforum\.net
+https?:\/\/([^\/]*\.)?pasracco\.blogcu\.com
+https?:\/\/([^\/]*\.)?pasrodron\.xa\.pl
+https?:\/\/([^\/]*\.)?passaf\.com
+https?:\/\/([^\/]*\.)?pastmagic\.blogspot\.com
+https?:\/\/([^\/]*\.)?pasviric\.td\.pl
+https?:\/\/([^\/]*\.)?patsytestis\.0moola\.com
+https?:\/\/([^\/]*\.)?pattywhack91\.ibelgique\.com
+https?:\/\/([^\/]*\.)?paulino\.greekboston\.com
+https?:\/\/([^\/]*\.)?paulino\.idilis\.ro
+https?:\/\/([^\/]*\.)?paxil-cr\.contact\.cc
+https?:\/\/([^\/]*\.)?paxil-without-prescription\.contact\.cc
+https?:\/\/([^\/]*\.)?paxil\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?paxil\.forospace\.com
+https?:\/\/([^\/]*\.)?paxilonline\.zoomshare\.com
+https?:\/\/([^\/]*\.)?payday-loan\.de\.com
+https?:\/\/([^\/]*\.)?payday-loans-4us\.com
+https?:\/\/([^\/]*\.)?payday-loans-ooo\.blogspot\.com
+https?:\/\/([^\/]*\.)?paydayloans-guide\.com
+https?:\/\/([^\/]*\.)?paydayloans-x\.com
+https?:\/\/([^\/]*\.)?pcb2002\.home4u\.china\.com
+https?:\/\/([^\/]*\.)?pcgzt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pdslnw6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?peace-weasel\.blogspot\.com
+https?:\/\/([^\/]*\.)?peacedoorball\.blogspot\.com
+https?:\/\/([^\/]*\.)?pearlibuttons\.blogspot\.com
+https?:\/\/([^\/]*\.)?pebwgu0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pecilu-free-sex-video-clip\.blogspot\.com
+https?:\/\/([^\/]*\.)?pee-4a\.com
+https?:\/\/([^\/]*\.)?peetliel\.jconserv\.net
+https?:\/\/([^\/]*\.)?pefi-albert\.blogspot\.com
+https?:\/\/([^\/]*\.)?pelnp\.szm\.sk
+https?:\/\/([^\/]*\.)?pendant\.hostcroc\.com
+https?:\/\/([^\/]*\.)?pennsylvaniamortgage-x\.com
+https?:\/\/([^\/]*\.)?people\.msoe\.edu
+https?:\/\/([^\/]*\.)?percocet-without-prescription\.contact\.cc
+https?:\/\/([^\/]*\.)?percocet\.xwiki\.com
+https?:\/\/([^\/]*\.)?perfect-boob\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?permanentmagnet\.com
+https?:\/\/([^\/]*\.)?persiankitty-com-kcfsibt01d\.blogspot\.com
+https?:\/\/([^\/]*\.)?persiankitty-com-ksa6l1a\.blogspot\.com
+https?:\/\/([^\/]*\.)?personales\.ciudad\.com\.ar
+https?:\/\/([^\/]*\.)?personalserotic\.com
+https?:\/\/([^\/]*\.)?petite-mature-blonde\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?petite-teen-ass\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?petiteteenager-com-cm8ku8w\.blogspot\.com
+https?:\/\/([^\/]*\.)?petiteteenager-com-md6\.blogspot\.com
+https?:\/\/([^\/]*\.)?petiteteenager-com-mns4n5a4\.blogspot\.com
+https?:\/\/([^\/]*\.)?petiteteenager-g687rhasjq\.blogspot\.com
+https?:\/\/([^\/]*\.)?peuct\.szm\.sk
+https?:\/\/([^\/]*\.)?pfes7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pffl4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pgbnjja\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pharm1\.info
+https?:\/\/([^\/]*\.)?pharmacies\.in\.ua
+https?:\/\/([^\/]*\.)?pharmacy-experts\.org
+https?:\/\/([^\/]*\.)?pharmacy-x\.ru\.ru
+https?:\/\/([^\/]*\.)?pharmacy\.sovuennir\.be
+https?:\/\/([^\/]*\.)?pharmacy\.t28\.net
+https?:\/\/([^\/]*\.)?pharmacy05\.com
+https?:\/\/([^\/]*\.)?pharmacybuy1\.angelcities\.com
+https?:\/\/([^\/]*\.)?pharmaduk\.xshorturl\.com
+https?:\/\/([^\/]*\.)?phendimetrazine\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?phendimetrazinenx\.u\.yuku\.com
+https?:\/\/([^\/]*\.)?phentermine--mine\.blogspot\.com
+https?:\/\/([^\/]*\.)?phentermine-911\.bee\.pl
+https?:\/\/([^\/]*\.)?phentermine-911\.coz\.in
+https?:\/\/([^\/]*\.)?phentermine-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?phentermine-choise\.ebloggy\.com
+https?:\/\/([^\/]*\.)?phentermine-forum\.tripod\.com
+https?:\/\/([^\/]*\.)?phentermine-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?phentermine-gs\.net\.tc
+https?:\/\/([^\/]*\.)?phentermine-hcl\.org
+https?:\/\/([^\/]*\.)?phentermine-online\.cheapills\.info
+https?:\/\/([^\/]*\.)?phentermine-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?phentermine-pharmacy\.fws1\.com
+https?:\/\/([^\/]*\.)?phentermine-support\.com
+https?:\/\/([^\/]*\.)?phentermine\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?phentermine\.acbox\.com
+https?:\/\/([^\/]*\.)?phentermine\.acbox\.net
+https?:\/\/([^\/]*\.)?phentermine\.arkadasi\.com
+https?:\/\/([^\/]*\.)?phentermine\.asistani\.com
+https?:\/\/([^\/]*\.)?phentermine\.bz
+https?:\/\/([^\/]*\.)?phentermine\.clubpage\.net
+https?:\/\/([^\/]*\.)?phentermine\.esguay\.com
+https?:\/\/([^\/]*\.)?phentermine\.flygande-apor\.com
+https?:\/\/([^\/]*\.)?phentermine\.goodpharm\.info
+https?:\/\/([^\/]*\.)?phentermine\.gotgeeks\.com
+https?:\/\/([^\/]*\.)?phentermine\.hallonsaft\.info
+https?:\/\/([^\/]*\.)?phentermine\.health-livening\.com
+https?:\/\/([^\/]*\.)?phentermine\.on-4\.com
+https?:\/\/([^\/]*\.)?phentermine\.ontspant\.nl
+https?:\/\/([^\/]*\.)?phentermine\.presteert\.nl
+https?:\/\/([^\/]*\.)?phentermine\.skocz\.net
+https?:\/\/([^\/]*\.)?phentermine\.su\.pl
+https?:\/\/([^\/]*\.)?phentermine\.tv
+https?:\/\/([^\/]*\.)?phentermine\.websiam\.net
+https?:\/\/([^\/]*\.)?phentermine2\.freewebsites\.com
+https?:\/\/([^\/]*\.)?phentermine7x\.forumup\.org
+https?:\/\/([^\/]*\.)?phenterminec\.phpbbx\.de
+https?:\/\/([^\/]*\.)?phentermineonline\.ds4a\.com
+https?:\/\/([^\/]*\.)?phentermineonline\.livelog\.com
+https?:\/\/([^\/]*\.)?phentermineq\.host-page\.com
+https?:\/\/([^\/]*\.)?phentermines\.int\.tf
+https?:\/\/([^\/]*\.)?phoenixbrngbrt\.blogspot\.com
+https?:\/\/([^\/]*\.)?phol8\.szm\.sk
+https?:\/\/([^\/]*\.)?phone-service\.newmail\.ru
+https?:\/\/([^\/]*\.)?phones-gsm\.haemati\.be
+https?:\/\/([^\/]*\.)?photo-of-girl-boob\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?photospacefree\.com
+https?:\/\/([^\/]*\.)?phots\.info
+https?:\/\/([^\/]*\.)?phpbbx\.de
+https?:\/\/([^\/]*\.)?phun-org-i08kd\.blogspot\.com
+https?:\/\/([^\/]*\.)?phun-org-ingg0\.blogspot\.com
+https?:\/\/([^\/]*\.)?pi-allyson\.blogspot\.com
+https?:\/\/([^\/]*\.)?pichunter-com-bkfwk\.blogspot\.com
+https?:\/\/([^\/]*\.)?pichunter-com-bzf\.blogspot\.com
+https?:\/\/([^\/]*\.)?pichunter-com-hmmcyoud8\.blogspot\.com
+https?:\/\/([^\/]*\.)?pichunter-com-kesip\.blogspot\.com
+https?:\/\/([^\/]*\.)?picpost-com-e3xqsc6a\.blogspot\.com
+https?:\/\/([^\/]*\.)?picpost-com-eu7refa3s5\.blogspot\.com
+https?:\/\/([^\/]*\.)?picture-cast-on-broken-leg\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?picture-of-gay-guys-fucking\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?picture-of-used-condom\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?picture\.8tt\.org
+https?:\/\/([^\/]*\.)?pictureheaven-com-ri7hn\.blogspot\.com
+https?:\/\/([^\/]*\.)?pictureheaven-com-rw\.blogspot\.com
+https?:\/\/([^\/]*\.)?pictures-free-org-wl0nj\.blogspot\.com
+https?:\/\/([^\/]*\.)?pictures-free-org-wmmkv2w\.blogspot\.com
+https?:\/\/([^\/]*\.)?piggy-soldier\.blogspot\.com
+https?:\/\/([^\/]*\.)?pigtime\.net\.ru
+https?:\/\/([^\/]*\.)?pigxxx-com-ctjj1\.blogspot\.com
+https?:\/\/([^\/]*\.)?pigxxx-com-ge1omxgp20\.blogspot\.com
+https?:\/\/([^\/]*\.)?pigxxx-com-geo8asd1i\.blogspot\.com
+https?:\/\/([^\/]*\.)?pigxxx-com-nevew\.blogspot\.com
+https?:\/\/([^\/]*\.)?pijjyh-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?pillalli\.info
+https?:\/\/([^\/]*\.)?pillnext\.com
+https?:\/\/([^\/]*\.)?pillow\.2x4\.ru
+https?:\/\/([^\/]*\.)?pills-catalog\.com
+https?:\/\/([^\/]*\.)?pills-pharmacy\.us
+https?:\/\/([^\/]*\.)?pills\.007webpro\.com
+https?:\/\/([^\/]*\.)?pills\.siemprelisto\.net
+https?:\/\/([^\/]*\.)?pills1\.org
+https?:\/\/([^\/]*\.)?pillsz\.com
+https?:\/\/([^\/]*\.)?pimpmyblackteen-com-t6ijmwbu\.blogspot\.com
+https?:\/\/([^\/]*\.)?pimpmyblackteen-com-t7d432c\.blogspot\.com
+https?:\/\/([^\/]*\.)?pindosam\.com
+https?:\/\/([^\/]*\.)?pine\.hostonmars\.com
+https?:\/\/([^\/]*\.)?pinkpornstars-com-da3njbu\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkpornstars-com-dnjx\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkpornstars-com-drm\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkworld-com-c84agv\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkworld-com-ci8e6\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkworld-com-ge4k4kmsd\.blogspot\.com
+https?:\/\/([^\/]*\.)?pinkworld-com-kp7s8i5\.blogspot\.com
+https?:\/\/([^\/]*\.)?pino-daniele\.19mb\.info
+https?:\/\/([^\/]*\.)?pinoyteens\.net
+https?:\/\/([^\/]*\.)?piomchel\.jconserv\.net
+https?:\/\/([^\/]*\.)?pisces\.8tt\.org
+https?:\/\/([^\/]*\.)?pitch\.101freehost\.com
+https?:\/\/([^\/]*\.)?pizda4\.com
+https?:\/\/([^\/]*\.)?pizza-hut\.hotmail\.ru
+https?:\/\/([^\/]*\.)?pjim6\.szm\.sk
+https?:\/\/([^\/]*\.)?pjju3\.szm\.sk
+https?:\/\/([^\/]*\.)?pjmykz8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pjryskur-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?pjuibhe\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pkufl\.szm\.sk
+https?:\/\/([^\/]*\.)?place\.sex-jet\.net
+https?:\/\/([^\/]*\.)?planetaacura\.info
+https?:\/\/([^\/]*\.)?planetwatt\.republika\.pl
+https?:\/\/([^\/]*\.)?plastictec\.net
+https?:\/\/([^\/]*\.)?plavix\.coz\.in
+https?:\/\/([^\/]*\.)?plavixbuy\.gameday\.de
+https?:\/\/([^\/]*\.)?plavixbuycheap\.dive\.to
+https?:\/\/([^\/]*\.)?plavixcheap\.hey\.to
+https?:\/\/([^\/]*\.)?plavixcheapgeneric\.go\.to
+https?:\/\/([^\/]*\.)?plavixgeneric\.change\.to
+https?:\/\/([^\/]*\.)?play-777\.com
+https?:\/\/([^\/]*\.)?play-online-casino\.de\.com
+https?:\/\/([^\/]*\.)?play-online-poker\.newmail\.ru
+https?:\/\/([^\/]*\.)?play-station-2-boot-disk\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?playandwinit777\.net
+https?:\/\/([^\/]*\.)?pleasebangmywife-com-i8zdgo1\.blogspot\.com
+https?:\/\/([^\/]*\.)?pleasebangmywife-com-iq\.blogspot\.com
+https?:\/\/([^\/]*\.)?pleasebangmywife-com-koguq\.blogspot\.com
+https?:\/\/([^\/]*\.)?pleasure\.hostonmars\.com
+https?:\/\/([^\/]*\.)?ploob\.blox\.pl
+https?:\/\/([^\/]*\.)?plugkblow\.pornomagnat\.net
+https?:\/\/([^\/]*\.)?plumper69-com-on3664rg\.blogspot\.com
+https?:\/\/([^\/]*\.)?plumper69-com-os4\.blogspot\.com
+https?:\/\/([^\/]*\.)?plumper69-com-sokis\.blogspot\.com
+https?:\/\/([^\/]*\.)?plxn1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pmrd2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pmyk8\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?po-alora\.blogspot\.com
+https?:\/\/([^\/]*\.)?pobpa\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?pocmlaq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?podnos\.stabilt\.se
+https?:\/\/([^\/]*\.)?poeller\.dl\.pl
+https?:\/\/([^\/]*\.)?pogeh\.szm\.sk
+https?:\/\/([^\/]*\.)?pohuym\.jo\.pl
+https?:\/\/([^\/]*\.)?pointyou\.info
+https?:\/\/([^\/]*\.)?poker-0\.com
+https?:\/\/([^\/]*\.)?poker-24x7\.com
+https?:\/\/([^\/]*\.)?poker-4all\.com
+https?:\/\/([^\/]*\.)?poker-7\.com
+https?:\/\/([^\/]*\.)?poker-boulevard\.com
+https?:\/\/([^\/]*\.)?poker-check\.com
+https?:\/\/([^\/]*\.)?poker-new\.com
+https?:\/\/([^\/]*\.)?poker-party-a\.com
+https?:\/\/([^\/]*\.)?poker-places-4u\.net
+https?:\/\/([^\/]*\.)?poker-places\.net
+https?:\/\/([^\/]*\.)?poker-pro\.us
+https?:\/\/([^\/]*\.)?poker-stadium\.com
+https?:\/\/([^\/]*\.)?poker-sys\.com
+https?:\/\/([^\/]*\.)?poker-unique\.com
+https?:\/\/([^\/]*\.)?poker-valley\.com
+https?:\/\/([^\/]*\.)?poker\.black-poker\.com
+https?:\/\/([^\/]*\.)?poker\.land\.ru
+https?:\/\/([^\/]*\.)?poker1table\.chat\.ru
+https?:\/\/([^\/]*\.)?pokera\.web\.com
+https?:\/\/([^\/]*\.)?pokermaniab\.atspace\.com
+https?:\/\/([^\/]*\.)?polex\.com\.cn
+https?:\/\/([^\/]*\.)?police-motorcycle-boot\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?police\.site\.io
+https?:\/\/([^\/]*\.)?polonka\.php5\.cz
+https?:\/\/([^\/]*\.)?polott\.org
+https?:\/\/([^\/]*\.)?polyphonic-ringtoneslsh\.blogspot\.com
+https?:\/\/([^\/]*\.)?polysorb\.myoco\.be
+https?:\/\/([^\/]*\.)?polyurethane-condom\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?pool-table\.hotmail\.ru
+https?:\/\/([^\/]*\.)?poopoovi\.forumculture\.net
+https?:\/\/([^\/]*\.)?pop\.egi\.biz
+https?:\/\/([^\/]*\.)?porn-clip-blog5jc\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-clip-boj\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-clip-om16o\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-movie-clips-blogk8p\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-movie-rj8a7\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-movie-ted\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-movie\.hostingtree\.org
+https?:\/\/([^\/]*\.)?porn-samples\.com
+https?:\/\/([^\/]*\.)?porn-star-clip-info0n0\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-star-movie-clip-newsigj\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-star-video-clip-zone44f\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-teacher\.com
+https?:\/\/([^\/]*\.)?porn-teen-pic\.com
+https?:\/\/([^\/]*\.)?porn-video-clip-bb-bb-f\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-video-clip-gallery-zonehp1\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-video-clips-news5v2\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn-video-jef\.blogspot\.com
+https?:\/\/([^\/]*\.)?porn1clip\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornaccess-com-k58\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornaccess-com-kkd1zvcobi\.blogspot\.com
+https?:\/\/([^\/]*\.)?porndirectory-com-m544ar5z47\.blogspot\.com
+https?:\/\/([^\/]*\.)?porndirectory-com-miyza\.blogspot\.com
+https?:\/\/([^\/]*\.)?porneskimo-com-hizrd2on\.blogspot\.com
+https?:\/\/([^\/]*\.)?porneskimo-com-hr1frq8hrr\.blogspot\.com
+https?:\/\/([^\/]*\.)?porneskimo-d4p5\.blogspot\.com
+https?:\/\/([^\/]*\.)?porneskimo-diheh\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornfreeusa\.info
+https?:\/\/([^\/]*\.)?pornno-com-cdtkjmj\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornno-com-cz5dknpwc\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornogames4\.com
+https?:\/\/([^\/]*\.)?pornoho-com-d7f\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornoho-com-db2ge0p\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstar-com-be1mbdy0l1\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstar-com-bsrzs22gn\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstar-com-nuvor\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstar-dz8j\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarbook-com-ag3477t\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarbook-com-agrpd\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarfinder-net-wp2lsr0\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarfinder-net-wuag8\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstargals-com-tj\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstargals-com-tk7hoxv36\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstars\.hostingtree\.org
+https?:\/\/([^\/]*\.)?pornstarvid-com-dinif\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarvid-com-h5\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornstarvid-com-h8xe\.blogspot\.com
+https?:\/\/([^\/]*\.)?pornweek-com\.isabel\.dtdns\.net
+https?:\/\/([^\/]*\.)?portal777\.com
+https?:\/\/([^\/]*\.)?portalrate\.info
+https?:\/\/([^\/]*\.)?portcityhonda\.info
+https?:\/\/([^\/]*\.)?portly\.byinter\.net
+https?:\/\/([^\/]*\.)?porzo-com-dsmefbsl\.blogspot\.com
+https?:\/\/([^\/]*\.)?porzo-com-gxo\.blogspot\.com
+https?:\/\/([^\/]*\.)?poshlo\.com
+https?:\/\/([^\/]*\.)?postdream\.org
+https?:\/\/([^\/]*\.)?potulnik\.php5\.cz
+https?:\/\/([^\/]*\.)?povicyt\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?powerlevelingweb\.com
+https?:\/\/([^\/]*\.)?pozorvostoka\.250free\.com
+https?:\/\/([^\/]*\.)?pp-shredd\.boom\.ru
+https?:\/\/([^\/]*\.)?pppsp\.szm\.sk
+https?:\/\/([^\/]*\.)?ppuhldv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pqis2\.szm\.sk
+https?:\/\/([^\/]*\.)?prakashcommunication\.com
+https?:\/\/([^\/]*\.)?prama\.info
+https?:\/\/([^\/]*\.)?prasut\.com
+https?:\/\/([^\/]*\.)?prearnha\.dl\.pl
+https?:\/\/([^\/]*\.)?prednisone\.3d-game\.com
+https?:\/\/([^\/]*\.)?prenotazione-albergo-rimini\.host24h\.info
+https?:\/\/([^\/]*\.)?prestito-taranto\.robzz\.info
+https?:\/\/([^\/]*\.)?prettyhair24-7\.blogspot\.com
+https?:\/\/([^\/]*\.)?prettyhotbabes-com-r2lu08uojn\.blogspot\.com
+https?:\/\/([^\/]*\.)?prettyhotbabes-com-rkgrt\.blogspot\.com
+https?:\/\/([^\/]*\.)?prettymob\.com
+https?:\/\/([^\/]*\.)?prevacid\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?price-top\.com
+https?:\/\/([^\/]*\.)?price100\.info
+https?:\/\/([^\/]*\.)?prilosec\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?prilosecbuycheap\.turn\.to
+https?:\/\/([^\/]*\.)?prilosecbuygeneric\.redirect\.to
+https?:\/\/([^\/]*\.)?priloseccheap\.turn\.to
+https?:\/\/([^\/]*\.)?priloseccheapgeneric\.redirect\.to
+https?:\/\/([^\/]*\.)?prilosecgeneric\.come\.to
+https?:\/\/([^\/]*\.)?primer\.fidosoft\.de
+https?:\/\/([^\/]*\.)?primojerky\.cn
+https?:\/\/([^\/]*\.)?primonona\.info
+https?:\/\/([^\/]*\.)?princesscruises\.chat\.ru
+https?:\/\/([^\/]*\.)?princesskariboo\.blogspot\.com
+https?:\/\/([^\/]*\.)?printer\.net\.cn
+https?:\/\/([^\/]*\.)?printingok\.net
+https?:\/\/([^\/]*\.)?private-porn-clip-newsmzm\.blogspot\.com
+https?:\/\/([^\/]*\.)?proactive-facial-product\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?problem-skin\.nm\.ru
+https?:\/\/([^\/]*\.)?problem_skin\.chat\.ru
+https?:\/\/([^\/]*\.)?prodotti-cosmetico\.nnme\.info
+https?:\/\/([^\/]*\.)?projectvoyeur-com-ec15a\.blogspot\.com
+https?:\/\/([^\/]*\.)?projectvoyeur-com-eq2w\.blogspot\.com
+https?:\/\/([^\/]*\.)?projectvoyeur-com-eyyd4q\.blogspot\.com
+https?:\/\/([^\/]*\.)?projectvoyeur-t3j\.blogspot\.com
+https?:\/\/([^\/]*\.)?prom\.createforum\.us
+https?:\/\/([^\/]*\.)?propecia\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?propecia\.esguay\.com
+https?:\/\/([^\/]*\.)?propecia\.skocz\.net
+https?:\/\/([^\/]*\.)?protonixbuy\.stick\.by
+https?:\/\/([^\/]*\.)?protonixbuycheap\.redirect\.to
+https?:\/\/([^\/]*\.)?protonixcheap\.connect\.to
+https?:\/\/([^\/]*\.)?protonixcheapgeneric\.soft-ware\.de
+https?:\/\/([^\/]*\.)?protonixgenericbuy\.cut\.by
+https?:\/\/([^\/]*\.)?provigilweight\.sblog\.cz
+https?:\/\/([^\/]*\.)?prozac\.rx4\.org
+https?:\/\/([^\/]*\.)?prsl4\.szm\.sk
+https?:\/\/([^\/]*\.)?prznic\.dtdns\.net
+https?:\/\/([^\/]*\.)?psfc\.mit\.edu
+https?:\/\/([^\/]*\.)?psmorrison\.blogspot\.com
+https?:\/\/([^\/]*\.)?psnuni\.com
+https?:\/\/([^\/]*\.)?psrq4\.szm\.sk
+https?:\/\/([^\/]*\.)?psychology-degre\.boom\.ru
+https?:\/\/([^\/]*\.)?psychology1degre\.chat\.ru
+https?:\/\/([^\/]*\.)?pszdc\.szm\.sk
+https?:\/\/([^\/]*\.)?ptpm9\.szm\.sk
+https?:\/\/([^\/]*\.)?ptrip\.net
+https?:\/\/([^\/]*\.)?pttqt\.szm\.sk
+https?:\/\/([^\/]*\.)?publicinvasion-com-bhtum2\.blogspot\.com
+https?:\/\/([^\/]*\.)?publicinvasion-com-bj\.blogspot\.com
+https?:\/\/([^\/]*\.)?publicinvasion-com-furok\.blogspot\.com
+https?:\/\/([^\/]*\.)?publicsaftor\.com
+https?:\/\/([^\/]*\.)?pued-com-maxu1g7\.blogspot\.com
+https?:\/\/([^\/]*\.)?pued-com-mf3\.blogspot\.com
+https?:\/\/([^\/]*\.)?pued-com-r0078gie\.blogspot\.com
+https?:\/\/([^\/]*\.)?pued-ox5y12mn7s\.blogspot\.com
+https?:\/\/([^\/]*\.)?puffybet\.sultryserver\.com
+https?:\/\/([^\/]*\.)?pulaskiterm\.info
+https?:\/\/([^\/]*\.)?pulse-squad\.com
+https?:\/\/([^\/]*\.)?pumpthatass-com-a78juz38f2\.blogspot\.com
+https?:\/\/([^\/]*\.)?pumpthatass-com-a7ouybe\.blogspot\.com
+https?:\/\/([^\/]*\.)?pumpthatass-com-xudeb\.blogspot\.com
+https?:\/\/([^\/]*\.)?punguinodoom\.110mb\.com
+https?:\/\/([^\/]*\.)?punjqm0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?punk-ass-bitch-wheatus\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?puppykibble-com-o7\.blogspot\.com
+https?:\/\/([^\/]*\.)?puppykibble-com-oh0w2te3k\.blogspot\.com
+https?:\/\/([^\/]*\.)?puppykibble-com-oqm7hu8d\.blogspot\.com
+https?:\/\/([^\/]*\.)?purextc-com-i8\.blogspot\.com
+https?:\/\/([^\/]*\.)?purextc-com-iy\.blogspot\.com
+https?:\/\/([^\/]*\.)?pussy-ass-bitch\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?pussy-org-kjsb51la\.blogspot\.com
+https?:\/\/([^\/]*\.)?pussy-org-km5\.blogspot\.com
+https?:\/\/([^\/]*\.)?putsta\.com
+https?:\/\/([^\/]*\.)?pvfws\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pvqoa\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pvsiwi7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pvudt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pvzj1\.szm\.sk
+https?:\/\/([^\/]*\.)?pwqx0\.szm\.sk
+https?:\/\/([^\/]*\.)?pymiw\.szm\.sk
+https?:\/\/([^\/]*\.)?pyr0lys1s\.blogspot\.com
+https?:\/\/([^\/]*\.)?pyrebi\.blogspot\.com
+https?:\/\/([^\/]*\.)?pyujxu0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?pzch0\.szm\.sk
+https?:\/\/([^\/]*\.)?pzek6\.szm\.sk
+https?:\/\/([^\/]*\.)?pzif1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?q-n-homemade-sex-video-z\.blogspot\.com
+https?:\/\/([^\/]*\.)?qbzmbwz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qctbue2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qdhr9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qdojv\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?qe-hentai-sex-video-sun\.blogspot\.com
+https?:\/\/([^\/]*\.)?qek-wetplace-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?qfoo7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qgre5\.szm\.sk
+https?:\/\/([^\/]*\.)?qgtdivl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qhiqu\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?qhprfm6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qhyvt\.szm\.sk
+https?:\/\/([^\/]*\.)?qietingqi\.ebloggy\.com
+https?:\/\/([^\/]*\.)?qingpao\.com
+https?:\/\/([^\/]*\.)?qinjq\.szm\.sk
+https?:\/\/([^\/]*\.)?qiqiu\.org
+https?:\/\/([^\/]*\.)?qite-alanna\.blogspot\.com
+https?:\/\/([^\/]*\.)?qjok9\.szm\.sk
+https?:\/\/([^\/]*\.)?qjt230\.com
+https?:\/\/([^\/]*\.)?qjvkvcd\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qklb4\.szm\.sk
+https?:\/\/([^\/]*\.)?qklhtf0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qknfl\.szm\.sk
+https?:\/\/([^\/]*\.)?qknpl\.info
+https?:\/\/([^\/]*\.)?qkpple2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qlpkce6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qltx2\.szm\.sk
+https?:\/\/([^\/]*\.)?qmjrpuo\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qnax1\.szm\.sk
+https?:\/\/([^\/]*\.)?qo-video-porn-gratis-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?qoclick\.com
+https?:\/\/([^\/]*\.)?qoeg6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qojodeh-bdsm-post-video-f\.blogspot\.com
+https?:\/\/([^\/]*\.)?qosmwx9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qpdoc\.com
+https?:\/\/([^\/]*\.)?qqdaj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qqer6\.szm\.sk
+https?:\/\/([^\/]*\.)?qqnbon4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qqwgp\.szm\.sk
+https?:\/\/([^\/]*\.)?qrvkof5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qsc7\.org\.ua
+https?:\/\/([^\/]*\.)?qsskk\.info
+https?:\/\/([^\/]*\.)?qtru3\.szm\.sk
+https?:\/\/([^\/]*\.)?qu-free-latina-sex-vide-wiv\.blogspot\.com
+https?:\/\/([^\/]*\.)?quails\.ipupdater\.us
+https?:\/\/([^\/]*\.)?quandugift\.com
+https?:\/\/([^\/]*\.)?queryguild\.com
+https?:\/\/([^\/]*\.)?quqob\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qutgmzbuje-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?qvewr\.szm\.sk
+https?:\/\/([^\/]*\.)?qvrzi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qvulp\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qwhhmaj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qwrn6\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?qxmk2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?qyda0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qyf99\.com
+https?:\/\/([^\/]*\.)?qypv5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qz\.informs\.com
+https?:\/\/([^\/]*\.)?qzjeqcv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?qzrhj\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?r-t-free-porn-video-clip-c\.blogspot\.com
+https?:\/\/([^\/]*\.)?racelleto\.dl\.pl
+https?:\/\/([^\/]*\.)?racer\.graphforum\.com
+https?:\/\/([^\/]*\.)?racerboc\.ephpbb\.com
+https?:\/\/([^\/]*\.)?rachel-hunter-as-stacys-mom\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?racnelelt\.fr-bb\.com
+https?:\/\/([^\/]*\.)?racoloboc\.graphforum\.com
+https?:\/\/([^\/]*\.)?racoloboc\.highforum\.net
+https?:\/\/([^\/]*\.)?racoloor\.dl\.pl
+https?:\/\/([^\/]*\.)?racrella\.dl\.pl
+https?:\/\/([^\/]*\.)?racsitli\.dl\.pl
+https?:\/\/([^\/]*\.)?ractrcna\.bb-fr\.com
+https?:\/\/([^\/]*\.)?racviget\.blogcu\.com
+https?:\/\/([^\/]*\.)?raezey\.blogspot\.com
+https?:\/\/([^\/]*\.)?raged\.info
+https?:\/\/([^\/]*\.)?rajzhze\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ramandrom\.com
+https?:\/\/([^\/]*\.)?randomlogik\.blogspot\.com
+https?:\/\/([^\/]*\.)?rappture\.blogspot\.com
+https?:\/\/([^\/]*\.)?raruzeol\.jconserv\.net
+https?:\/\/([^\/]*\.)?rate-boob-pic\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?ratonhteroad\.blogspot\.com
+https?:\/\/([^\/]*\.)?rawpussy-b0q\.blogspot\.com
+https?:\/\/([^\/]*\.)?rawpussy-com-t3l\.blogspot\.com
+https?:\/\/([^\/]*\.)?rawpussy-com-tawon6x\.blogspot\.com
+https?:\/\/([^\/]*\.)?raxm2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?razor-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?razor2scooter\.chat\.ru
+https?:\/\/([^\/]*\.)?rboub\.szm\.sk
+https?:\/\/([^\/]*\.)?rdavisinc\.com
+https?:\/\/([^\/]*\.)?re-advertising\.boom\.ru
+https?:\/\/([^\/]*\.)?re\.rutan\.org
+https?:\/\/([^\/]*\.)?readworld\.com
+https?:\/\/([^\/]*\.)?real-gay-sex-story\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?real-ringtoneserd\.blogspot\.com
+https?:\/\/([^\/]*\.)?realitsen\.info
+https?:\/\/([^\/]*\.)?realitypassplus-com-e34pddwt1\.blogspot\.com
+https?:\/\/([^\/]*\.)?realitypassplus-com-e7y\.blogspot\.com
+https?:\/\/([^\/]*\.)?realityporn\.coz\.in
+https?:\/\/([^\/]*\.)?realtimewatches\.info
+https?:\/\/([^\/]*\.)?realtors-x\.com
+https?:\/\/([^\/]*\.)?reboteen5\.blogspot\.com
+https?:\/\/([^\/]*\.)?rebuildsanmateohighschool\.org
+https?:\/\/([^\/]*\.)?recipe4you\.info
+https?:\/\/([^\/]*\.)?recupero-dati-hard-disk\.ll11\.info
+https?:\/\/([^\/]*\.)?redder\.my-wifi\.info
+https?:\/\/([^\/]*\.)?redfxo\.blogspot\.com
+https?:\/\/([^\/]*\.)?redsex4\.info
+https?:\/\/([^\/]*\.)?redtcyw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?reductildrug\.coz\.in
+https?:\/\/([^\/]*\.)?redway-org-d8u\.blogspot\.com
+https?:\/\/([^\/]*\.)?redway-org-dtxz0863\.blogspot\.com
+https?:\/\/([^\/]*\.)?redway-rla\.blogspot\.com
+https?:\/\/([^\/]*\.)?reeringtonesptl\.blogspot\.com
+https?:\/\/([^\/]*\.)?refinance-x\.com
+https?:\/\/([^\/]*\.)?reggdr\.org
+https?:\/\/([^\/]*\.)?regsh\.com
+https?:\/\/([^\/]*\.)?reiw9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rejoicing\.gigsweb\.com
+https?:\/\/([^\/]*\.)?rekara\.com
+https?:\/\/([^\/]*\.)?relagen\.orkan\.yi\.org
+https?:\/\/([^\/]*\.)?relalract\.lolforum\.net
+https?:\/\/([^\/]*\.)?relcadron\.bbgraf\.com
+https?:\/\/([^\/]*\.)?relcoli\.lightbb\.com
+https?:\/\/([^\/]*\.)?relics\.hackers-unite\.info
+https?:\/\/([^\/]*\.)?relmonric\.lolforum\.net
+https?:\/\/([^\/]*\.)?reloading-software\.lycan\.be
+https?:\/\/([^\/]*\.)?relsitelt\.darkbb\.com
+https?:\/\/([^\/]*\.)?relsitrel\.xa\.pl
+https?:\/\/([^\/]*\.)?reltaro\.lolbb\.com
+https?:\/\/([^\/]*\.)?remiza\.dtdns\.net
+https?:\/\/([^\/]*\.)?renova\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?rentbuscompany\.net
+https?:\/\/([^\/]*\.)?rentcarcenter\.com
+https?:\/\/([^\/]*\.)?rentcarok\.org
+https?:\/\/([^\/]*\.)?replacement-batteries\.loretic\.be
+https?:\/\/([^\/]*\.)?repq7\.szm\.sk
+https?:\/\/([^\/]*\.)?rerdiq4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?reshall\.iweb\.bsu\.edu
+https?:\/\/([^\/]*\.)?responderpal\.com
+https?:\/\/([^\/]*\.)?restless-leg--com\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?restless-leg-syndrome-com\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?retin-a\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?retirement1comm\.chat\.ru
+https?:\/\/([^\/]*\.)?returboc\.forumculture\.net
+https?:\/\/([^\/]*\.)?revitolantiaging\.com
+https?:\/\/([^\/]*\.)?rfjn0\.szm\.sk
+https?:\/\/([^\/]*\.)?rgvlg\.szm\.sk
+https?:\/\/([^\/]*\.)?rhdhh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rhinotickets\.com
+https?:\/\/([^\/]*\.)?rhn45\.nokedem\.com
+https?:\/\/([^\/]*\.)?rhodeislandmortgage-x\.com
+https?:\/\/([^\/]*\.)?rhooh\.flnet\.org
+https?:\/\/([^\/]*\.)?ri-hardcore-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?ricacelco\.dl\.pl
+https?:\/\/([^\/]*\.)?ricaldneu\.fr-bb\.com
+https?:\/\/([^\/]*\.)?riceltleto\.dl\.pl
+https?:\/\/([^\/]*\.)?ricetta-cucina\.host24h\.info
+https?:\/\/([^\/]*\.)?rich-r\.blogspot\.com
+https?:\/\/([^\/]*\.)?richards-realm-com-c4h\.blogspot\.com
+https?:\/\/([^\/]*\.)?richards-realm-com-cs\.blogspot\.com
+https?:\/\/([^\/]*\.)?riclarol\.dl\.pl
+https?:\/\/([^\/]*\.)?ricostruzione-unghia\.hostzz\.info
+https?:\/\/([^\/]*\.)?ricrelnel\.frbb\.net
+https?:\/\/([^\/]*\.)?rictaget\.uy\.pl
+https?:\/\/([^\/]*\.)?rictrocvar\.zikforum\.com
+https?:\/\/([^\/]*\.)?riczelur\.forumzen\.com
+https?:\/\/([^\/]*\.)?ridiaulctions\.blogspot\.com
+https?:\/\/([^\/]*\.)?right-leg-swelling\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?rigour\.info
+https?:\/\/([^\/]*\.)?rijulina\.dl\.pl
+https?:\/\/([^\/]*\.)?ring-tonecti\.blogspot\.com
+https?:\/\/([^\/]*\.)?ring2man\.chat\.ru
+https?:\/\/([^\/]*\.)?ring4man\.chat\.ru
+https?:\/\/([^\/]*\.)?ring4tel\.com
+https?:\/\/([^\/]*\.)?ringg\.info
+https?:\/\/([^\/]*\.)?ringtones-4phone\.com
+https?:\/\/([^\/]*\.)?ringtones-dir\.com
+https?:\/\/([^\/]*\.)?ringtones-dir\.net
+https?:\/\/([^\/]*\.)?ringtones-for-a-samsungtwt\.blogspot\.com
+https?:\/\/([^\/]*\.)?ringtones-rate\.com
+https?:\/\/([^\/]*\.)?ringtones\.blogharbor\.com
+https?:\/\/([^\/]*\.)?ringts\.269g\.net
+https?:\/\/([^\/]*\.)?risajno\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?risque-sexy-plus-size-lingerie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?rit\.edu
+https?:\/\/([^\/]*\.)?ritalin-without-prescription\.contact\.cc
+https?:\/\/([^\/]*\.)?ritalin\.myvnc\.com
+https?:\/\/([^\/]*\.)?river-road-motorcycle-boot\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?river\.greatfreehosting\.com
+https?:\/\/([^\/]*\.)?rivotril\.int\.tf
+https?:\/\/([^\/]*\.)?rm-ast-pants\.blogspot\.com
+https?:\/\/([^\/]*\.)?rmsq9\.szm\.sk
+https?:\/\/([^\/]*\.)?rmuuur3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rndk1\.szm\.sk
+https?:\/\/([^\/]*\.)?rnmg6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ro-westin\.blogspot\.com
+https?:\/\/([^\/]*\.)?robotqueen\.250free\.com
+https?:\/\/([^\/]*\.)?rochili\.alkablog\.com
+https?:\/\/([^\/]*\.)?rodar6or6\.dl\.pl
+https?:\/\/([^\/]*\.)?rodvww7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rogetou\.dl\.pl
+https?:\/\/([^\/]*\.)?rojeracr\.forumzen\.com
+https?:\/\/([^\/]*\.)?roketplanet\.weedns\.com
+https?:\/\/([^\/]*\.)?rokminric\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?rokzecdok\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?rolccna\.dl\.pl
+https?:\/\/([^\/]*\.)?rolcnac\.td\.pl
+https?:\/\/([^\/]*\.)?rolex\.heberg-forum\.net
+https?:\/\/([^\/]*\.)?rolexreplica\.269g\.net
+https?:\/\/([^\/]*\.)?rolica\.blogcu\.com
+https?:\/\/([^\/]*\.)?rollaolo\.blogcu\.com
+https?:\/\/([^\/]*\.)?rollatobas\.naturalforum\.net
+https?:\/\/([^\/]*\.)?rolracboc\.bb-fr\.com
+https?:\/\/([^\/]*\.)?roltrsit\.bbfr\.net
+https?:\/\/([^\/]*\.)?rom\.dl\.pl
+https?:\/\/([^\/]*\.)?romahotel\.org
+https?:\/\/([^\/]*\.)?romandie\.com
+https?:\/\/([^\/]*\.)?romanticmaui\.net
+https?:\/\/([^\/]*\.)?room-house\.jeepsyc\.be
+https?:\/\/([^\/]*\.)?root\.dns\.bz
+https?:\/\/([^\/]*\.)?roouvar\.dl\.pl
+https?:\/\/([^\/]*\.)?roricdom\.lightbb\.com
+https?:\/\/([^\/]*\.)?roseofgold52\.50webs\.com
+https?:\/\/([^\/]*\.)?rotl\.info
+https?:\/\/([^\/]*\.)?rotrocrol\.darkbb\.com
+https?:\/\/([^\/]*\.)?roundandbrown-com-bkb03g0hi\.blogspot\.com
+https?:\/\/([^\/]*\.)?roundandbrown-com-kp04\.blogspot\.com
+https?:\/\/([^\/]*\.)?roundandbrown-com-wqzj337l\.blogspot\.com
+https?:\/\/([^\/]*\.)?roundandbrown-com-wus56c\.blogspot\.com
+https?:\/\/([^\/]*\.)?routan\.org
+https?:\/\/([^\/]*\.)?roxyobsessed7\.blogspot\.com
+https?:\/\/([^\/]*\.)?rphqj\.szm\.sk
+https?:\/\/([^\/]*\.)?rqhdnj4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rqpwn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rrefr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rrgr4\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?rrlive\.info
+https?:\/\/([^\/]*\.)?rrsfmw7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rseo7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?rshu2\.szm\.sk
+https?:\/\/([^\/]*\.)?rsmy8\.szm\.sk
+https?:\/\/([^\/]*\.)?rthl0\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?rtugwoy\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ruanjian\.cwrjcn\.com
+https?:\/\/([^\/]*\.)?rucowdena\.ifrance\.com
+https?:\/\/([^\/]*\.)?rudecomputing\.com
+https?:\/\/([^\/]*\.)?rudu-adam\.blogspot\.com
+https?:\/\/([^\/]*\.)?ruimingwei\.com\.cn
+https?:\/\/([^\/]*\.)?rulurbuc\.forumzen\.com
+https?:\/\/([^\/]*\.)?runutr\.forumzen\.com
+https?:\/\/([^\/]*\.)?russiannudesgirlszxa\.blogspot\.com
+https?:\/\/([^\/]*\.)?russiapreteen\.com
+https?:\/\/([^\/]*\.)?russiavista\.sitiasp\.it
+https?:\/\/([^\/]*\.)?rwfe5\.szm\.sk
+https?:\/\/([^\/]*\.)?rxdate\.net
+https?:\/\/([^\/]*\.)?rxdfh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ryehfpz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ryhgsb\.com
+https?:\/\/([^\/]*\.)?ryryj\.szm\.sk
+https?:\/\/([^\/]*\.)?ryu-jounetsu\.blogspot\.com
+https?:\/\/([^\/]*\.)?rzwj8\.szm\.sk
+https?:\/\/([^\/]*\.)?s-r-free-porn-movie-clip-x\.blogspot\.com
+https?:\/\/([^\/]*\.)?s1xbucksamonkey\.blogspot\.com
+https?:\/\/([^\/]*\.)?s32\.bilsay\.com
+https?:\/\/([^\/]*\.)?saaaaa\.52blog\.net
+https?:\/\/([^\/]*\.)?safety-product\.hotmail\.ru
+https?:\/\/([^\/]*\.)?safety-product\.pochta\.ru
+https?:\/\/([^\/]*\.)?safety_product\.chat\.ru
+https?:\/\/([^\/]*\.)?sahezzz\.blogspot\.com
+https?:\/\/([^\/]*\.)?saibon\.com\.cn
+https?:\/\/([^\/]*\.)?sakura-watanuki\.blogspot\.com
+https?:\/\/([^\/]*\.)?salewroughtiron\.cn
+https?:\/\/([^\/]*\.)?sample-porn-clip-newst1x\.blogspot\.com
+https?:\/\/([^\/]*\.)?sample-porn-clip-zoneapa\.blogspot\.com
+https?:\/\/([^\/]*\.)?samsung-ringtonedta\.blogspot\.com
+https?:\/\/([^\/]*\.)?sand-stars\.blogspot\.com
+https?:\/\/([^\/]*\.)?sandra-teen-model-qux\.blogspot\.com
+https?:\/\/([^\/]*\.)?sangrandy\.com
+https?:\/\/([^\/]*\.)?sanhy\.com
+https?:\/\/([^\/]*\.)?sanpaulo\.flnet\.org
+https?:\/\/([^\/]*\.)?santjhon\.php5\.cz
+https?:\/\/([^\/]*\.)?sapphiceroticacom\.klose\.ipupdater\.com
+https?:\/\/([^\/]*\.)?sapphicparadise-com-r00asy\.blogspot\.com
+https?:\/\/([^\/]*\.)?sarobo\.com
+https?:\/\/([^\/]*\.)?satellite-tv\.hotmail\.ru
+https?:\/\/([^\/]*\.)?sauna-eq\.boom\.ru
+https?:\/\/([^\/]*\.)?sauna-heater\.boom\.ru
+https?:\/\/([^\/]*\.)?sauna-kit\.boom\.ru
+https?:\/\/([^\/]*\.)?sauna-room\.boom\.ru
+https?:\/\/([^\/]*\.)?saunaguide\.org
+https?:\/\/([^\/]*\.)?save-on-auto-insurance\.info
+https?:\/\/([^\/]*\.)?saved\.ddns\.info
+https?:\/\/([^\/]*\.)?sbarzn3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?scanthenet\.com
+https?:\/\/([^\/]*\.)?scat-fetish-story\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?school-driving\.info
+https?:\/\/([^\/]*\.)?school-girl-butt\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?school2home\.chat\.ru
+https?:\/\/([^\/]*\.)?sciensezero\.republika\.pl
+https?:\/\/([^\/]*\.)?scnh6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?scooter11\.chat\.ru
+https?:\/\/([^\/]*\.)?scooter2\.hotmail\.ru
+https?:\/\/([^\/]*\.)?screwedupmovies-com-a5wj\.blogspot\.com
+https?:\/\/([^\/]*\.)?screwedupmovies-com-ax\.blogspot\.com
+https?:\/\/([^\/]*\.)?scripts-cert\.mit\.edu
+https?:\/\/([^\/]*\.)?scscj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sdao7\.szm\.sk
+https?:\/\/([^\/]*\.)?sdfr0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sdfsfssss\.com
+https?:\/\/([^\/]*\.)?se4u\.net
+https?:\/\/([^\/]*\.)?seafordmed\.info
+https?:\/\/([^\/]*\.)?seainsurancegroup\.info
+https?:\/\/([^\/]*\.)?search4sex\.us
+https?:\/\/([^\/]*\.)?searchbigtits-com-apxd1hwatd\.blogspot\.com
+https?:\/\/([^\/]*\.)?searchbigtits-com-obraj\.blogspot\.com
+https?:\/\/([^\/]*\.)?searcheng\.com
+https?:\/\/([^\/]*\.)?searcheon\.com
+https?:\/\/([^\/]*\.)?searchgalleries-com-i7\.blogspot\.com
+https?:\/\/([^\/]*\.)?searchgalleries-com-ib2bi6on5\.blogspot\.com
+https?:\/\/([^\/]*\.)?searchgals-com-gu1810j\.blogspot\.com
+https?:\/\/([^\/]*\.)?searcholdies-com-msa\.blogspot\.com
+https?:\/\/([^\/]*\.)?searchsuperhit\.com
+https?:\/\/([^\/]*\.)?searchvids-com-h47g8mf\.blogspot\.com
+https?:\/\/([^\/]*\.)?seasonale\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?secure-network\.info
+https?:\/\/([^\/]*\.)?seeallhomes\.com
+https?:\/\/([^\/]*\.)?seeallnatural\.com
+https?:\/\/([^\/]*\.)?seeallsite\.com
+https?:\/\/([^\/]*\.)?seecomplete\.com
+https?:\/\/([^\/]*\.)?seehersquirt-com-k0\.blogspot\.com
+https?:\/\/([^\/]*\.)?seehersquirt-com-k3\.blogspot\.com
+https?:\/\/([^\/]*\.)?seekcounty\.com
+https?:\/\/([^\/]*\.)?seeyo\.info
+https?:\/\/([^\/]*\.)?segbqj1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sege-addison\.blogspot\.com
+https?:\/\/([^\/]*\.)?seho-aiyana\.blogspot\.com
+https?:\/\/([^\/]*\.)?sekapad\.info
+https?:\/\/([^\/]*\.)?sekbad\.info
+https?:\/\/([^\/]*\.)?selfbuying\.com
+https?:\/\/([^\/]*\.)?semarqua\.dl\.pl
+https?:\/\/([^\/]*\.)?senapier\.dl\.pl
+https?:\/\/([^\/]*\.)?send-flowers\.acb\.pl
+https?:\/\/([^\/]*\.)?sendon\.net\.cn
+https?:\/\/([^\/]*\.)?senlu\.com
+https?:\/\/([^\/]*\.)?sensorscity\.marshall\.edu
+https?:\/\/([^\/]*\.)?seo\.ohsu\.edu
+https?:\/\/([^\/]*\.)?seo88\.com
+https?:\/\/([^\/]*\.)?seomdahi\.jconserv\.net
+https?:\/\/([^\/]*\.)?seozone\.net
+https?:\/\/([^\/]*\.)?seranton\.blogspot\.com
+https?:\/\/([^\/]*\.)?sercheng\.com
+https?:\/\/([^\/]*\.)?serchlid\.com
+https?:\/\/([^\/]*\.)?serious-skin\.boom\.ru
+https?:\/\/([^\/]*\.)?serts\.blogshot\.nl
+https?:\/\/([^\/]*\.)?servemp3\.com
+https?:\/\/([^\/]*\.)?serversolutions\.us
+https?:\/\/([^\/]*\.)?servitch\.com
+https?:\/\/([^\/]*\.)?ses1\.info
+https?:\/\/([^\/]*\.)?sestrenish\.biografi\.org
+https?:\/\/([^\/]*\.)?setara\.dl\.pl
+https?:\/\/([^\/]*\.)?seventeenlive-com-bado3i\.blogspot\.com
+https?:\/\/([^\/]*\.)?seventeenlive-com-bmg\.blogspot\.com
+https?:\/\/([^\/]*\.)?seventeenlive-com-h4dw652dzl\.blogspot\.com
+https?:\/\/([^\/]*\.)?severnfollow\.info
+https?:\/\/([^\/]*\.)?sevtentoe\.blogspot\.com
+https?:\/\/([^\/]*\.)?sewingmachinesusa\.com
+https?:\/\/([^\/]*\.)?sex--x\.com
+https?:\/\/([^\/]*\.)?sex-clip-ce872\.blogspot\.com
+https?:\/\/([^\/]*\.)?sex-dating\.sexnation\.info
+https?:\/\/([^\/]*\.)?sex-movie-e8qbm\.blogspot\.com
+https?:\/\/([^\/]*\.)?sex-movie-qig\.blogspot\.com
+https?:\/\/([^\/]*\.)?sex-video-clip-haq3r\.blogspot\.com
+https?:\/\/([^\/]*\.)?sex-video-juz\.blogspot\.com
+https?:\/\/([^\/]*\.)?sex-without-condom\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?sex-woman-only-fuck\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?sex-xxx-free\.100freemb\.com
+https?:\/\/([^\/]*\.)?sex\.yeahost\.com
+https?:\/\/([^\/]*\.)?sex1movie\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexadultdating\.com
+https?:\/\/([^\/]*\.)?sexape-bpb0\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexape-com-chdaj7\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexape-com-cz4z44iud3\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexape-com-kw7623jxvd\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexape-com-qipil\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexape-mte7jm\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexdirectory-com-tbt0\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexegirls\.net
+https?:\/\/([^\/]*\.)?sexgrannies-com-d17v0sa\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexgrannies-com-dvg3lh0\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexmaxx-com-w2aoe7q\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexmaxx-com-w7\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexmaxx-com-wy23e2588\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexmaxx-kvhilzx76\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexnemo-com-joxud\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexnemo-com-r7iv5\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexnemo-com-rpj18ot\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexo-anal-teen\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?sexoasis-a00r68ac\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexoasis-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexoasis-hkz6z4fmr6\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-com-e2zci5\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-com-ew426c7qej\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-com-itvux\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-com-r6fjn1dz\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean-ibf53b\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexocean000\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexy-ass-and-leg\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?sexy-blonde-big-tit\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?sexy-busty-hot\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?sexy-knee-high-boot\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?sexy-leg-xxx\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?sexy-lesbian-having-sex\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?sexy-models-net-g13hqljr0\.blogspot\.com
+https?:\/\/([^\/]*\.)?sexy-teacher\.net
+https?:\/\/([^\/]*\.)?sexy\.dastish\.org
+https?:\/\/([^\/]*\.)?sexyst\.info
+https?:\/\/([^\/]*\.)?sfjo7\.szm\.sk
+https?:\/\/([^\/]*\.)?sftic\.szm\.sk
+https?:\/\/([^\/]*\.)?sfzone\.cn
+https?:\/\/([^\/]*\.)?sgkr3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?shaffelrecords\.com
+https?:\/\/([^\/]*\.)?shahang\.net
+https?:\/\/([^\/]*\.)?shakira-pa3t\.blogspot\.com
+https?:\/\/([^\/]*\.)?shakirafortner\.hostingweb\.us
+https?:\/\/([^\/]*\.)?shampoo\.moistri\.be
+https?:\/\/([^\/]*\.)?shavedgoat-com-hlfai1dvfb\.blogspot\.com
+https?:\/\/([^\/]*\.)?shbuscenter\.com
+https?:\/\/([^\/]*\.)?shcarcenter\.com
+https?:\/\/([^\/]*\.)?shdianjiang\.cn
+https?:\/\/([^\/]*\.)?sheji\.paim123\.com
+https?:\/\/([^\/]*\.)?shemale-action\.net
+https?:\/\/([^\/]*\.)?shemale-ebony-fuck\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?shemale-fuck-guys-com\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?shemale-no-cock\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?shemalefuckguy\.isabel\.dtdns\.net
+https?:\/\/([^\/]*\.)?shemales\.coz\.in
+https?:\/\/([^\/]*\.)?shemp-com-k1yng8\.blogspot\.com
+https?:\/\/([^\/]*\.)?shemp-com-kcutd\.blogspot\.com
+https?:\/\/([^\/]*\.)?shemp-com-zuhig\.blogspot\.com
+https?:\/\/([^\/]*\.)?shenzhenjp\.com
+https?:\/\/([^\/]*\.)?shesexy-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy-com-i1xf\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy-com-rugok\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy-com-w0dffbvzz\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy-gogub\.blogspot\.com
+https?:\/\/([^\/]*\.)?shesexy000\.blogspot\.com
+https?:\/\/([^\/]*\.)?shetelel\.jconserv\.net
+https?:\/\/([^\/]*\.)?shexpo2010\.com
+https?:\/\/([^\/]*\.)?shijiren\.com
+https?:\/\/([^\/]*\.)?shinylights\.org
+https?:\/\/([^\/]*\.)?shipeng\.net
+https?:\/\/([^\/]*\.)?shmoorge\.tripod\.com
+https?:\/\/([^\/]*\.)?shoesnike\.cn
+https?:\/\/([^\/]*\.)?shoesorder\.biz
+https?:\/\/([^\/]*\.)?shoesshop\.biz
+https?:\/\/([^\/]*\.)?shop24x7\.net
+https?:\/\/([^\/]*\.)?short-porn-clip-news8rj\.blogspot\.com
+https?:\/\/([^\/]*\.)?shoujicaixin\.com
+https?:\/\/([^\/]*\.)?shplaycenter\.cn
+https?:\/\/([^\/]*\.)?shredder-4paper\.boom\.ru
+https?:\/\/([^\/]*\.)?shredder-paper\.boom\.ru
+https?:\/\/([^\/]*\.)?shredder\.boom\.ru
+https?:\/\/([^\/]*\.)?shredder4paper\.chat\.ru
+https?:\/\/([^\/]*\.)?shrentcar\.com
+https?:\/\/([^\/]*\.)?shrudant\.jconserv\.net
+https?:\/\/([^\/]*\.)?shticketcenter\.com
+https?:\/\/([^\/]*\.)?shtiklmiaou\.fizwig\.com
+https?:\/\/([^\/]*\.)?shtranslate\.com
+https?:\/\/([^\/]*\.)?shufflequince\.org
+https?:\/\/([^\/]*\.)?siamforum\.com
+https?:\/\/([^\/]*\.)?siek2\.szm\.sk
+https?:\/\/([^\/]*\.)?sifa600\.com
+https?:\/\/([^\/]*\.)?sigla-cartoni-animati\.19mb\.info
+https?:\/\/([^\/]*\.)?sijalik\.blogspot\.com
+https?:\/\/([^\/]*\.)?sik-sapphicparadise-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?sildenafil-citrate\.perso\.tc
+https?:\/\/([^\/]*\.)?siliconpulse\.info
+https?:\/\/([^\/]*\.)?silly-n\.blogspot\.com
+https?:\/\/([^\/]*\.)?simply-gamine\.hostingweb\.us
+https?:\/\/([^\/]*\.)?simtershrapnel\.blogspot\.com
+https?:\/\/([^\/]*\.)?sinbiom\.blogspot\.com
+https?:\/\/([^\/]*\.)?sindyhalliday\.com
+https?:\/\/([^\/]*\.)?sinequanwithdrawal\.sblog\.cz
+https?:\/\/([^\/]*\.)?sineto\.net
+https?:\/\/([^\/]*\.)?sinfulcurves-com-obh\.blogspot\.com
+https?:\/\/([^\/]*\.)?singova\.org
+https?:\/\/([^\/]*\.)?siq-xxlmovies-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?sirloincentury\.org
+https?:\/\/([^\/]*\.)?sisus\.org
+https?:\/\/([^\/]*\.)?sitacsit\.goodforum\.net
+https?:\/\/([^\/]*\.)?sitacsit\.grafbb\.com
+https?:\/\/([^\/]*\.)?sitchi-or\.xa\.pl
+https?:\/\/([^\/]*\.)?sitdelcna\.lightbb\.com
+https?:\/\/([^\/]*\.)?sitdelta\.jc\.pl
+https?:\/\/([^\/]*\.)?sitdeltroc\.bbfr\.net
+https?:\/\/([^\/]*\.)?site\.voila\.fr
+https?:\/\/([^\/]*\.)?siteapts\.info
+https?:\/\/([^\/]*\.)?sitedating\.org
+https?:\/\/([^\/]*\.)?sitel\.goodforum\.net
+https?:\/\/([^\/]*\.)?sitel\.grafbb\.com
+https?:\/\/([^\/]*\.)?sitladar\.dl\.pl
+https?:\/\/([^\/]*\.)?sitorsit\.discutfree\.com
+https?:\/\/([^\/]*\.)?sittazel\.bb-fr\.com
+https?:\/\/([^\/]*\.)?sj-qh\.com
+https?:\/\/([^\/]*\.)?sjzwz\.com
+https?:\/\/([^\/]*\.)?skbrql5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?skelaxin\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?skelaxin800mg\.sblog\.cz
+https?:\/\/([^\/]*\.)?skin-care-tip\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-care\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?skin-diseas\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-disease\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-disease\.fromru\.com
+https?:\/\/([^\/]*\.)?skin-disease\.newmail\.ru
+https?:\/\/([^\/]*\.)?skin-product\.hotmail\.ru
+https?:\/\/([^\/]*\.)?skin-treat\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-treatm\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-treatment\.boom\.ru
+https?:\/\/([^\/]*\.)?skin-trt\.boom\.ru
+https?:\/\/([^\/]*\.)?skin1-disease\.boom\.ru
+https?:\/\/([^\/]*\.)?skin1disease\.chat\.ru
+https?:\/\/([^\/]*\.)?skin1tip4care\.chat\.ru
+https?:\/\/([^\/]*\.)?skin1treatment\.chat\.ru
+https?:\/\/([^\/]*\.)?skin_product\.chat\.ru
+https?:\/\/([^\/]*\.)?skincare\.ixdm\.info
+https?:\/\/([^\/]*\.)?skodasite\.info
+https?:\/\/([^\/]*\.)?skvonk\.blogspot\.com
+https?:\/\/([^\/]*\.)?skvvdm2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sleep-aids\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?sleepingsex\.coz\.in
+https?:\/\/([^\/]*\.)?slickgalleries-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?slickgalleries-com-acf4a01s86\.blogspot\.com
+https?:\/\/([^\/]*\.)?slots-wiki\.com
+https?:\/\/([^\/]*\.)?slutsvideos-com-mwnyvb2\.blogspot\.com
+https?:\/\/([^\/]*\.)?smack-dvd\.mutogen\.be
+https?:\/\/([^\/]*\.)?smackinghotlips\.blogspot\.com
+https?:\/\/([^\/]*\.)?smal\.php5\.cz
+https?:\/\/([^\/]*\.)?small-bubble-butt\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?smart\.45\.kg
+https?:\/\/([^\/]*\.)?smbay\.cn
+https?:\/\/([^\/]*\.)?smithtownelementarypta\.org
+https?:\/\/([^\/]*\.)?smkpe\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?smlwqj2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?smnvapnd-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?smolyak\.isuisse\.com
+https?:\/\/([^\/]*\.)?sms\.bjicp\.net
+https?:\/\/([^\/]*\.)?smsdown\.blogbus\.com
+https?:\/\/([^\/]*\.)?smut-house-com-c6t8hcv1be\.blogspot\.com
+https?:\/\/([^\/]*\.)?smutgremlins-com-a46sull\.blogspot\.com
+https?:\/\/([^\/]*\.)?smutgremlins-com-w6d7m6ji\.blogspot\.com
+https?:\/\/([^\/]*\.)?smutmaestro\.net
+https?:\/\/([^\/]*\.)?snafusurfer\.net
+https?:\/\/([^\/]*\.)?snakesworld-com-bye\.blogspot\.com
+https?:\/\/([^\/]*\.)?sneakercool\.com
+https?:\/\/([^\/]*\.)?sneakernice\.com
+https?:\/\/([^\/]*\.)?sneck\.info
+https?:\/\/([^\/]*\.)?snkfbl1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?snmcq\.szm\.sk
+https?:\/\/([^\/]*\.)?snorting-ritalin\.contact\.cc
+https?:\/\/([^\/]*\.)?snymk\.szm\.sk
+https?:\/\/([^\/]*\.)?so-big-tit-video-clip-kos\.blogspot\.com
+https?:\/\/([^\/]*\.)?so-home-sex-clip-god\.blogspot\.com
+https?:\/\/([^\/]*\.)?so-so-young-com-kk727o82n\.blogspot\.com
+https?:\/\/([^\/]*\.)?so1di\.info
+https?:\/\/([^\/]*\.)?soafacil\.com
+https?:\/\/([^\/]*\.)?socalmovies-com-enr61t\.blogspot\.com
+https?:\/\/([^\/]*\.)?socalmovies-com-oy08pp72i\.blogspot\.com
+https?:\/\/([^\/]*\.)?soccer-mom-sticker\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?socialsciencedeg\.chat\.ru
+https?:\/\/([^\/]*\.)?socsci\.mccneb\.edu
+https?:\/\/([^\/]*\.)?sodo0\.szm\.sk
+https?:\/\/([^\/]*\.)?sofiefie\.blogspot\.com
+https?:\/\/([^\/]*\.)?soft17-com-d1577f\.blogspot\.com
+https?:\/\/([^\/]*\.)?softcore-erotica\.net
+https?:\/\/([^\/]*\.)?software-engine\.org
+https?:\/\/([^\/]*\.)?softwarematrix\.org
+https?:\/\/([^\/]*\.)?sohardcore-com-r56bt\.blogspot\.com
+https?:\/\/([^\/]*\.)?soho0\.szm\.sk
+https?:\/\/([^\/]*\.)?solacemysoul\.blogspot\.com
+https?:\/\/([^\/]*\.)?solder\.lowestprices\.at
+https?:\/\/([^\/]*\.)?soler\.net\.cn
+https?:\/\/([^\/]*\.)?sologals-com-hs2xad\.blogspot\.com
+https?:\/\/([^\/]*\.)?sologals-grr5g3\.blogspot\.com
+https?:\/\/([^\/]*\.)?soma\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?soma\.homelinux\.com
+https?:\/\/([^\/]*\.)?soma\.int\.tf
+https?:\/\/([^\/]*\.)?soma\.php5\.cz
+https?:\/\/([^\/]*\.)?soma1\.skocz\.net
+https?:\/\/([^\/]*\.)?someshit\.ru
+https?:\/\/([^\/]*\.)?somqyxli-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?sonata\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?sonr4\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?sotremont\.ru
+https?:\/\/([^\/]*\.)?soulswallo\.blogspot\.com
+https?:\/\/([^\/]*\.)?soundandmossl\.com
+https?:\/\/([^\/]*\.)?southcarolinamortgage-x\.com
+https?:\/\/([^\/]*\.)?southdakotamortgage-x\.com
+https?:\/\/([^\/]*\.)?southtecrepair\.com
+https?:\/\/([^\/]*\.)?spacedim68\.blogspot\.com
+https?:\/\/([^\/]*\.)?spamim\.net
+https?:\/\/([^\/]*\.)?spawww\.info
+https?:\/\/([^\/]*\.)?spcw3\.szm\.sk
+https?:\/\/([^\/]*\.)?special-ringtones\.net
+https?:\/\/([^\/]*\.)?specific911\.biz
+https?:\/\/([^\/]*\.)?specific911\.org
+https?:\/\/([^\/]*\.)?speed-casino\.com
+https?:\/\/([^\/]*\.)?speens\.pass\.as
+https?:\/\/([^\/]*\.)?spermicide-trojan-condom\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?spermshack-al\.blogspot\.com
+https?:\/\/([^\/]*\.)?spermshack-com-bef\.blogspot\.com
+https?:\/\/([^\/]*\.)?spermshack-com-gee1\.blogspot\.com
+https?:\/\/([^\/]*\.)?spermshack-com-gtafrogps\.blogspot\.com
+https?:\/\/([^\/]*\.)?spermshack-g01u1\.blogspot\.com
+https?:\/\/([^\/]*\.)?spewie-com-mbntjlrkk\.blogspot\.com
+https?:\/\/([^\/]*\.)?spfwq\.zhengstar\.com
+https?:\/\/([^\/]*\.)?spice-girlpkg\.blogspot\.com
+https?:\/\/([^\/]*\.)?spirit-of-llama\.blogspot\.com
+https?:\/\/([^\/]*\.)?spirit-psyki\.ifrance\.com
+https?:\/\/([^\/]*\.)?spiserch\.com
+https?:\/\/([^\/]*\.)?splashka\.xhostar\.com
+https?:\/\/([^\/]*\.)?splendid-casino\.com
+https?:\/\/([^\/]*\.)?spoilzone\.epinoy\.com
+https?:\/\/([^\/]*\.)?spqi6\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?sprint-ringtonenot\.blogspot\.com
+https?:\/\/([^\/]*\.)?sprintringtonesxvt\.blogspot\.com
+https?:\/\/([^\/]*\.)?sprintringtoneuad\.blogspot\.com
+https?:\/\/([^\/]*\.)?spstestfree\.com\.com
+https?:\/\/([^\/]*\.)?spunkmonster\.net
+https?:\/\/([^\/]*\.)?spwnk\.szm\.sk
+https?:\/\/([^\/]*\.)?spxqly9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?spyware-adware-killer\.com
+https?:\/\/([^\/]*\.)?sqoi8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?squall\.my10gb\.com
+https?:\/\/([^\/]*\.)?sqvde\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sralua\.com
+https?:\/\/([^\/]*\.)?srarware\.com
+https?:\/\/([^\/]*\.)?srkyyca\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?srtongje\.republika\.pl
+https?:\/\/([^\/]*\.)?sruqsz3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ssdcard\.info
+https?:\/\/([^\/]*\.)?sslive\.info
+https?:\/\/([^\/]*\.)?sspwye7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sswingersss-777\.tripod\.com
+https?:\/\/([^\/]*\.)?st-pharmacy\.com
+https?:\/\/([^\/]*\.)?staa8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?staff\.jccc\.edu
+https?:\/\/([^\/]*\.)?stainlesssteelpipe\.net
+https?:\/\/([^\/]*\.)?stampa-foto-digitale\.ll11\.info
+https?:\/\/([^\/]*\.)?starcelebs-com-ewe5\.blogspot\.com
+https?:\/\/([^\/]*\.)?starcelebs-com-i3a2mxf\.blogspot\.com
+https?:\/\/([^\/]*\.)?starcelebs-wihuk\.blogspot\.com
+https?:\/\/([^\/]*\.)?starryland\.com\.cn
+https?:\/\/([^\/]*\.)?startchicks\.info
+https?:\/\/([^\/]*\.)?state-gay-marriage-legal\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?state-of-germany\.com
+https?:\/\/([^\/]*\.)?statisticpal\.com
+https?:\/\/([^\/]*\.)?stcc9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?steeen-s-bl\.blogspot\.com
+https?:\/\/([^\/]*\.)?steel-table-leg\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?stocking-fetish-video\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?stocking-movies-com-du1\.blogspot\.com
+https?:\/\/([^\/]*\.)?stocking-tease-b7gl\.blogspot\.com
+https?:\/\/([^\/]*\.)?stocking-tease-com-bm6h145g\.blogspot\.com
+https?:\/\/([^\/]*\.)?stockings\.coz\.in
+https?:\/\/([^\/]*\.)?stop-smoking\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?stpetersburg\.it
+https?:\/\/([^\/]*\.)?stphipps\.dl\.pl
+https?:\/\/([^\/]*\.)?strakac\.dtdns\.net
+https?:\/\/([^\/]*\.)?strange-bizarre-things\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?stranieriinitalia\.org
+https?:\/\/([^\/]*\.)?straponpost\.net
+https?:\/\/([^\/]*\.)?street-poker\.com
+https?:\/\/([^\/]*\.)?streetmp3\.com
+https?:\/\/([^\/]*\.)?strega\.us
+https?:\/\/([^\/]*\.)?strip-tease-video-bb-bb-z\.blogspot\.com
+https?:\/\/([^\/]*\.)?strongsong\.republika\.pl
+https?:\/\/([^\/]*\.)?structure-settlement\.hotmail\.ru
+https?:\/\/([^\/]*\.)?sts\.ucsd\.edu
+https?:\/\/([^\/]*\.)?students\.hsc\.unt\.edu
+https?:\/\/([^\/]*\.)?study-us\.cn
+https?:\/\/([^\/]*\.)?stvincent\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?stydx\.szm\.sk
+https?:\/\/([^\/]*\.)?sublimedirectory-com-otb\.blogspot\.com
+https?:\/\/([^\/]*\.)?sublimemovies-com-wdvh2wmm3\.blogspot\.com
+https?:\/\/([^\/]*\.)?sublimepie-com-e8g3dw2\.blogspot\.com
+https?:\/\/([^\/]*\.)?sudanportal\.mrcc\.aast\.edu
+https?:\/\/([^\/]*\.)?suede-cowboy-boot\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?suicidexlove\.blogspot\.com
+https?:\/\/([^\/]*\.)?sumeshi0206\.dyndns\.org
+https?:\/\/([^\/]*\.)?sunaseth\.blogspot\.com
+https?:\/\/([^\/]*\.)?sunp\.com
+https?:\/\/([^\/]*\.)?sunporno-com-avbxn\.blogspot\.com
+https?:\/\/([^\/]*\.)?sunporno-com-go5\.blogspot\.com
+https?:\/\/([^\/]*\.)?sunsetdreamscondo\.com
+https?:\/\/([^\/]*\.)?sunsky365\.net
+https?:\/\/([^\/]*\.)?superadultdirect\.info
+https?:\/\/([^\/]*\.)?supercalcinhas-com-rij\.blogspot\.com
+https?:\/\/([^\/]*\.)?superdiosas-com-tm5k7f1v3\.blogspot\.com
+https?:\/\/([^\/]*\.)?superfinancesolutions\.com
+https?:\/\/([^\/]*\.)?supergirls\.pochta\.ru
+https?:\/\/([^\/]*\.)?superha\.angelcities\.com
+https?:\/\/([^\/]*\.)?superinsuranceworld\.info
+https?:\/\/([^\/]*\.)?superinternetexplorer\.info
+https?:\/\/([^\/]*\.)?supershare\.cn
+https?:\/\/([^\/]*\.)?suphost\.info
+https?:\/\/([^\/]*\.)?supplements\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?supplements\.mylonso\.be
+https?:\/\/([^\/]*\.)?supplierlist\.com
+https?:\/\/([^\/]*\.)?surfacing\.101freehost\.com
+https?:\/\/([^\/]*\.)?surmontil\.sblog\.cz
+https?:\/\/([^\/]*\.)?suxwyj-free-porn\.blogspot\.com
+https?:\/\/([^\/]*\.)?suzoro-amateur-sex-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?suzulan\.blogspot\.com
+https?:\/\/([^\/]*\.)?svetys9i\.125mb\.com
+https?:\/\/([^\/]*\.)?svike\.info
+https?:\/\/([^\/]*\.)?swdella\.ifrance\.com
+https?:\/\/([^\/]*\.)?swechat\.republika\.pl
+https?:\/\/([^\/]*\.)?sweet-krissy\.babubi\.net
+https?:\/\/([^\/]*\.)?sweetpniangel87\.blogspot\.com
+https?:\/\/([^\/]*\.)?swingersadult\.net
+https?:\/\/([^\/]*\.)?sx\.nazari\.org
+https?:\/\/([^\/]*\.)?sx\.z0rz\.com
+https?:\/\/([^\/]*\.)?sxwliwe\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?sy-casino\.com
+https?:\/\/([^\/]*\.)?sygz\.51mp4mp3\.com
+https?:\/\/([^\/]*\.)?sylvan-queen\.iespana\.es
+https?:\/\/([^\/]*\.)?symphony\.8tt\.org
+https?:\/\/([^\/]*\.)?symptom-of-allergic-reaction-to-latex-condom\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?symy\.jp
+https?:\/\/([^\/]*\.)?synnin-viemaa\.blogspot\.com
+https?:\/\/([^\/]*\.)?sz-cj\.com
+https?:\/\/([^\/]*\.)?sz-dongtai\.com
+https?:\/\/([^\/]*\.)?sz-tianyicn\.com
+https?:\/\/([^\/]*\.)?sz4a\.cn
+https?:\/\/([^\/]*\.)?szarts\.com
+https?:\/\/([^\/]*\.)?szbeiyang\.net
+https?:\/\/([^\/]*\.)?szhangkong\.com
+https?:\/\/([^\/]*\.)?szhjc\.net
+https?:\/\/([^\/]*\.)?szhowfine\.com
+https?:\/\/([^\/]*\.)?szhx\.ebloggy\.com
+https?:\/\/([^\/]*\.)?szhxseo\.com
+https?:\/\/([^\/]*\.)?szjiuli\.com
+https?:\/\/([^\/]*\.)?szjiuli\.ebloggy\.com
+https?:\/\/([^\/]*\.)?szjpnet\.ebloggy\.com
+https?:\/\/([^\/]*\.)?szjyhk\.com
+https?:\/\/([^\/]*\.)?szlawyer\.home4u\.china\.com
+https?:\/\/([^\/]*\.)?szlichuang\.cn
+https?:\/\/([^\/]*\.)?szlszx\.com
+https?:\/\/([^\/]*\.)?sznuts\.cn
+https?:\/\/([^\/]*\.)?szpptc\.com
+https?:\/\/([^\/]*\.)?szsc-car\.com
+https?:\/\/([^\/]*\.)?szsfbq\.com
+https?:\/\/([^\/]*\.)?szyongjin\.ebloggy\.com
+https?:\/\/([^\/]*\.)?szzhuce\.home4u\.china\.com
+https?:\/\/([^\/]*\.)?t-sonnaya\.blogspot\.com
+https?:\/\/([^\/]*\.)?t-teens-for\.blogspot\.com
+https?:\/\/([^\/]*\.)?t\.tl
+https?:\/\/([^\/]*\.)?tabarlie\.forumzen\.com
+https?:\/\/([^\/]*\.)?tabgand\.info
+https?:\/\/([^\/]*\.)?tablitki\.xwiki\.com
+https?:\/\/([^\/]*\.)?taboo-porn-clip-blogeq2\.blogspot\.com
+https?:\/\/([^\/]*\.)?tackle\.247ihost\.com
+https?:\/\/([^\/]*\.)?tacomanissansubaru\.info
+https?:\/\/([^\/]*\.)?tactroc\.dl\.pl
+https?:\/\/([^\/]*\.)?tadalafil-\.ql\.st
+https?:\/\/([^\/]*\.)?tadalafil\.scanthenet\.com
+https?:\/\/([^\/]*\.)?tadalafil\.skocz\.net
+https?:\/\/([^\/]*\.)?tadalafil35\.lookscool\.com
+https?:\/\/([^\/]*\.)?taefis\.com
+https?:\/\/([^\/]*\.)?tagetboc\.darkbb\.com
+https?:\/\/([^\/]*\.)?talj5\.szm\.sk
+https?:\/\/([^\/]*\.)?tanoli\.su\.pl
+https?:\/\/([^\/]*\.)?tanorol\.dl\.pl
+https?:\/\/([^\/]*\.)?taouolo\.dl\.pl
+https?:\/\/([^\/]*\.)?tapz3\.szm\.sk
+https?:\/\/([^\/]*\.)?taracdom\.heavenforum\.com
+https?:\/\/([^\/]*\.)?tarfol\.com
+https?:\/\/([^\/]*\.)?target-oo6qbtx\.blogspot\.com
+https?:\/\/([^\/]*\.)?taria-m4j\.blogspot\.com
+https?:\/\/([^\/]*\.)?taricdam\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?tarkupu\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?taroelt\.bb-fr\.com
+https?:\/\/([^\/]*\.)?tarra-i6vqa54v\.blogspot\.com
+https?:\/\/([^\/]*\.)?tart0938\.blogspot\.com
+https?:\/\/([^\/]*\.)?taryn-hgxikm27y\.blogspot\.com
+https?:\/\/([^\/]*\.)?tarzuf\.com
+https?:\/\/([^\/]*\.)?tasculio\.forumzen\.com
+https?:\/\/([^\/]*\.)?tasha-rup0n3a\.blogspot\.com
+https?:\/\/([^\/]*\.)?tashia-w1evjakk7\.blogspot\.com
+https?:\/\/([^\/]*\.)?tasia-emtoy\.blogspot\.com
+https?:\/\/([^\/]*\.)?tasimd\.com
+https?:\/\/([^\/]*\.)?tasizuwann-tm7y\.blogspot\.com
+https?:\/\/([^\/]*\.)?tasnin\.com
+https?:\/\/([^\/]*\.)?tate-dt\.blogspot\.com
+https?:\/\/([^\/]*\.)?tateyana-c8s1ms4ai\.blogspot\.com
+https?:\/\/([^\/]*\.)?tateyona-br48\.blogspot\.com
+https?:\/\/([^\/]*\.)?tatrocbas\.dl\.pl
+https?:\/\/([^\/]*\.)?tatrocmon\.dl\.pl
+https?:\/\/([^\/]*\.)?tattoo-ojqmc35d\.blogspot\.com
+https?:\/\/([^\/]*\.)?tatum-mlzsfqw\.blogspot\.com
+https?:\/\/([^\/]*\.)?tatumn-i4anj15\.blogspot\.com
+https?:\/\/([^\/]*\.)?tatyiana-kwg0ud8fqf\.blogspot\.com
+https?:\/\/([^\/]*\.)?tauntianna-h6\.blogspot\.com
+https?:\/\/([^\/]*\.)?taurus-gx\.blogspot\.com
+https?:\/\/([^\/]*\.)?tayamarn\.blogspot\.com
+https?:\/\/([^\/]*\.)?taydem-wdm6rxd328\.blogspot\.com
+https?:\/\/([^\/]*\.)?taydra-ejk45\.blogspot\.com
+https?:\/\/([^\/]*\.)?tayla-t7b\.blogspot\.com
+https?:\/\/([^\/]*\.)?tayler-cfez\.blogspot\.com
+https?:\/\/([^\/]*\.)?taylor-bof5\.blogspot\.com
+https?:\/\/([^\/]*\.)?taylorbow-com-il3f4ae\.blogspot\.com
+https?:\/\/([^\/]*\.)?taylorbow-com-inbg2nw\.blogspot\.com
+https?:\/\/([^\/]*\.)?taynafrates\.freetzi\.com
+https?:\/\/([^\/]*\.)?taysha-avsm8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tazman-m6\.blogspot\.com
+https?:\/\/([^\/]*\.)?tbgbnt5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tbns\.net
+https?:\/\/([^\/]*\.)?tbrgxjv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tcsgn\.szm\.sk
+https?:\/\/([^\/]*\.)?tczxwwz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tczxxm6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tdzkzkt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tdzl\.sunp\.com
+https?:\/\/([^\/]*\.)?tea-imk7ry1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tea-pot\.keckins\.be
+https?:\/\/([^\/]*\.)?teacher-fucking-free\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?teacher-km\.blogspot\.com
+https?:\/\/([^\/]*\.)?teaching1degree\.chat\.ru
+https?:\/\/([^\/]*\.)?teainfo\.org
+https?:\/\/([^\/]*\.)?teamsquirt-com-kjcj3u3i\.blogspot\.com
+https?:\/\/([^\/]*\.)?tear\.hostcroc\.com
+https?:\/\/([^\/]*\.)?tech-txyvo8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tech\.china\.com
+https?:\/\/([^\/]*\.)?techinpet\.blogspot\.com
+https?:\/\/([^\/]*\.)?technical-school\.fromru\.com
+https?:\/\/([^\/]*\.)?technical-school\.hotmail\.ru
+https?:\/\/([^\/]*\.)?technical-school\.newmail\.ru
+https?:\/\/([^\/]*\.)?technical1school\.chat\.ru
+https?:\/\/([^\/]*\.)?teen-anal-cum-shot\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?teen-blonde-beauty\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?teen-blow-job-movie\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?teen-boob-fuck\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?teen-boob-porn\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?teen-buff\.net
+https?:\/\/([^\/]*\.)?teen-chick-masturbating\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?teen-facial-fuck\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?teen-feet-bew\.blogspot\.com
+https?:\/\/([^\/]*\.)?teen-internal-cum-shot\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?teen-kelly-lesbian\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?teen-movie\.freeinsite\.net
+https?:\/\/([^\/]*\.)?teen-porn-clip-newsyk6\.blogspot\.com
+https?:\/\/([^\/]*\.)?teen-sex-movie-f-d-t\.blogspot\.com
+https?:\/\/([^\/]*\.)?teen-sex-video-w8jpk\.blogspot\.com
+https?:\/\/([^\/]*\.)?teen-zips\.babubi\.net
+https?:\/\/([^\/]*\.)?teen6\.vdforum\.ru
+https?:\/\/([^\/]*\.)?teenax-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenax-com-pidoq\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenax-com-rh0ssu62yh\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenax-com-rke6\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenbe-com-bdp\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenbe-com-mb6x\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenbe-com-mh03o\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenblowjobs\.vdforum\.ru
+https?:\/\/([^\/]*\.)?teenboat-com-g6\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenboat-com-g6f103r\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenboat-com-mu1s7p\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenboat-e76l\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenboys-wel\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenel-com-hhd\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenel-com-hq0sgbm\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniefiles-com-g84lu\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniefiles-com-o43\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniefiles-com-ob782u\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniemovies-com-aptqg\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniemovies-com-as\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniemovies-com-hinof\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeniesxxx-b00\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenmodels\.hostingtree\.org
+https?:\/\/([^\/]*\.)?teenporn\.vdforum\.ru
+https?:\/\/([^\/]*\.)?teenpornrur\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenpussyfhv\.blogspot\.com
+https?:\/\/([^\/]*\.)?teens-chat\.info
+https?:\/\/([^\/]*\.)?teens-list-b-all\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenseven-com-c0jvb2z\.blogspot\.com
+https?:\/\/([^\/]*\.)?teensex-com-c4w3g\.blogspot\.com
+https?:\/\/([^\/]*\.)?teensex-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?teensex\.adultserv\.info
+https?:\/\/([^\/]*\.)?teensss-com-b8s44\.blogspot\.com
+https?:\/\/([^\/]*\.)?teensss-com-tds\.blogspot\.com
+https?:\/\/([^\/]*\.)?teensss-com-thrd\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentera-com-d5j3qqs\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentera-com-dyty5cv\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentera-com-w65\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentiger-com-e4e6i2f\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentiger-com-eo602\.blogspot\.com
+https?:\/\/([^\/]*\.)?teentiger-com-fozol\.blogspot\.com
+https?:\/\/([^\/]*\.)?teeny-boppers-club-beg\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenybopperclub-com-bgqk6ejjv\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenybopperclub-com-bukb\.blogspot\.com
+https?:\/\/([^\/]*\.)?teenybopperclub-segod\.blogspot\.com
+https?:\/\/([^\/]*\.)?tegan-d1yagb\.blogspot\.com
+https?:\/\/([^\/]*\.)?tehxm\.szm\.sk
+https?:\/\/([^\/]*\.)?tehya-csxo8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tehyana-bg3\.blogspot\.com
+https?:\/\/([^\/]*\.)?tekd8\.szm\.sk
+https?:\/\/([^\/]*\.)?tekiartur\.xhostar\.com
+https?:\/\/([^\/]*\.)?tekila-a5x7\.blogspot\.com
+https?:\/\/([^\/]*\.)?tela-ou3khz\.blogspot\.com
+https?:\/\/([^\/]*\.)?telenglish\.com\.cn
+https?:\/\/([^\/]*\.)?telephone-ip\.blogspot\.com
+https?:\/\/([^\/]*\.)?telnushka\.blogspot\.com
+https?:\/\/([^\/]*\.)?temazepam\.xwiki\.com
+https?:\/\/([^\/]*\.)?temma-k1n03ege\.blogspot\.com
+https?:\/\/([^\/]*\.)?temp-h33\.blogspot\.com
+https?:\/\/([^\/]*\.)?temptation-gujlu2\.blogspot\.com
+https?:\/\/([^\/]*\.)?ten-ra66722hs5\.blogspot\.com
+https?:\/\/([^\/]*\.)?tenea-w1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tenisha-e6f\.blogspot\.com
+https?:\/\/([^\/]*\.)?tennasa-ttk2oqe4m\.blogspot\.com
+https?:\/\/([^\/]*\.)?tennesseemortgage-x\.com
+https?:\/\/([^\/]*\.)?tennille-dm\.blogspot\.com
+https?:\/\/([^\/]*\.)?tennis-ca8swtk\.blogspot\.com
+https?:\/\/([^\/]*\.)?tenor-saxophone-fingering\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?tenuate\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?teopoo\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?teplomer\.dtdns\.net
+https?:\/\/([^\/]*\.)?tequila-be5\.blogspot\.com
+https?:\/\/([^\/]*\.)?teresanict-oorzzsxmjd\.blogspot\.com
+https?:\/\/([^\/]*\.)?teri-m84ywv38\.blogspot\.com
+https?:\/\/([^\/]*\.)?terika-i10\.blogspot\.com
+https?:\/\/([^\/]*\.)?term-paper\.fromru\.com
+https?:\/\/([^\/]*\.)?term-paper\.nm\.ru
+https?:\/\/([^\/]*\.)?term_paper\.chat\.ru
+https?:\/\/([^\/]*\.)?terminal-h0o2cfsibt\.blogspot\.com
+https?:\/\/([^\/]*\.)?terri-gqdjfrm33d\.blogspot\.com
+https?:\/\/([^\/]*\.)?terrianna-ru\.blogspot\.com
+https?:\/\/([^\/]*\.)?terrin-wmwxu3v\.blogspot\.com
+https?:\/\/([^\/]*\.)?terriona-erbvdaj\.blogspot\.com
+https?:\/\/([^\/]*\.)?terry-tqzto0ek\.blogspot\.com
+https?:\/\/([^\/]*\.)?terryikah-dhw46164c2\.blogspot\.com
+https?:\/\/([^\/]*\.)?terryiona-czcng\.blogspot\.com
+https?:\/\/([^\/]*\.)?terryn-b8p04mxhn2\.blogspot\.com
+https?:\/\/([^\/]*\.)?tess-oybaa0ng\.blogspot\.com
+https?:\/\/([^\/]*\.)?tessa-mugg\.blogspot\.com
+https?:\/\/([^\/]*\.)?test1\.com
+https?:\/\/([^\/]*\.)?test123-kpgwe3vie4\.blogspot\.com
+https?:\/\/([^\/]*\.)?test2-h6qofysx\.blogspot\.com
+https?:\/\/([^\/]*\.)?test2\.com
+https?:\/\/([^\/]*\.)?test3\.com
+https?:\/\/([^\/]*\.)?testmutherfucker\.com
+https?:\/\/([^\/]*\.)?testtest-g14\.blogspot\.com
+https?:\/\/([^\/]*\.)?tetteteent\.blogspot\.com
+https?:\/\/([^\/]*\.)?tettgwk\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?texas-hold-em-winner\.net
+https?:\/\/([^\/]*\.)?texas-hold-em\.black-poker\.com
+https?:\/\/([^\/]*\.)?texas-holdem-poker\.us\.com
+https?:\/\/([^\/]*\.)?texas-holdem-winner\.com
+https?:\/\/([^\/]*\.)?texas-holdem\.black-poker\.com
+https?:\/\/([^\/]*\.)?texas-rvmu1a0\.blogspot\.com
+https?:\/\/([^\/]*\.)?texas-va-loan\.com
+https?:\/\/([^\/]*\.)?texasdad\.com
+https?:\/\/([^\/]*\.)?texasholdem2\.com
+https?:\/\/([^\/]*\.)?texasholdemcenteral\.com
+https?:\/\/([^\/]*\.)?texasholdemsite\.net
+https?:\/\/([^\/]*\.)?texasmortgage-x\.com
+https?:\/\/([^\/]*\.)?teyana-wtpu\.blogspot\.com
+https?:\/\/([^\/]*\.)?teylore-ew24\.blogspot\.com
+https?:\/\/([^\/]*\.)?tez-teenybopperclub-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?tgao2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tgksg\.szm\.sk
+https?:\/\/([^\/]*\.)?tgp-movie-facial\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?tgpprincess\.net
+https?:\/\/([^\/]*\.)?tgpseeker\.net
+https?:\/\/([^\/]*\.)?thailand-t865\.blogspot\.com
+https?:\/\/([^\/]*\.)?thalia-d125yh\.blogspot\.com
+https?:\/\/([^\/]*\.)?thalya-cgjm\.blogspot\.com
+https?:\/\/([^\/]*\.)?thbxg\.szm\.sk
+https?:\/\/([^\/]*\.)?the-amberlady\.blogspot\.com
+https?:\/\/([^\/]*\.)?the-craftman\.blogspot\.com
+https?:\/\/([^\/]*\.)?the-female-orgasm-com-h1sx\.blogspot\.com
+https?:\/\/([^\/]*\.)?the-female-orgasm-com-h8qf5l27j\.blogspot\.com
+https?:\/\/([^\/]*\.)?the-most-biggest-boob-in-the-world\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?the-murderer\.blogspot\.com
+https?:\/\/([^\/]*\.)?the-roulette\.net
+https?:\/\/([^\/]*\.)?theaddedtouch\.net
+https?:\/\/([^\/]*\.)?theaf\.info
+https?:\/\/([^\/]*\.)?theaftor\.com
+https?:\/\/([^\/]*\.)?theag\.info
+https?:\/\/([^\/]*\.)?theap\.info
+https?:\/\/([^\/]*\.)?theas\.info
+https?:\/\/([^\/]*\.)?theat\.info
+https?:\/\/([^\/]*\.)?theaw\.info
+https?:\/\/([^\/]*\.)?thebestjaguar\.info
+https?:\/\/([^\/]*\.)?thebigswallow-com-khcs\.blogspot\.com
+https?:\/\/([^\/]*\.)?thebigswallow-com-kp3hmbl2e\.blogspot\.com
+https?:\/\/([^\/]*\.)?thebondbroker\.info
+https?:\/\/([^\/]*\.)?thecardinaleempire\.com
+https?:\/\/([^\/]*\.)?thechryslerjeep\.info
+https?:\/\/([^\/]*\.)?thedailywash\.blogspot\.com
+https?:\/\/([^\/]*\.)?thedrivingsite\.info
+https?:\/\/([^\/]*\.)?theente\.com
+https?:\/\/([^\/]*\.)?thefiatspider\.info
+https?:\/\/([^\/]*\.)?thehomeworkco\.com
+https?:\/\/([^\/]*\.)?theiconclub\.info
+https?:\/\/([^\/]*\.)?theillegalcause\.blogspot\.com
+https?:\/\/([^\/]*\.)?thejaguarracing\.cn
+https?:\/\/([^\/]*\.)?thejaguarracing\.info
+https?:\/\/([^\/]*\.)?theking-ox0p87\.blogspot\.com
+https?:\/\/([^\/]*\.)?theluckyman\.magnesia\.dtdns\.net
+https?:\/\/([^\/]*\.)?theman-mbvc\.blogspot\.com
+https?:\/\/([^\/]*\.)?themazdaspeed\.info
+https?:\/\/([^\/]*\.)?themoblogs\.com
+https?:\/\/([^\/]*\.)?theofe\.com
+https?:\/\/([^\/]*\.)?theorless\.com
+https?:\/\/([^\/]*\.)?theorrent\.com
+https?:\/\/([^\/]*\.)?thepartyplaza\.info
+https?:\/\/([^\/]*\.)?theresa-ipvfeka0y\.blogspot\.com
+https?:\/\/([^\/]*\.)?thesam118\.blogspot\.com
+https?:\/\/([^\/]*\.)?theseeall\.com
+https?:\/\/([^\/]*\.)?theslots\.biz
+https?:\/\/([^\/]*\.)?thesmart-casino\.com
+https?:\/\/([^\/]*\.)?thesportspark\.net
+https?:\/\/([^\/]*\.)?thessaloni-ka8qpmq7\.blogspot\.com
+https?:\/\/([^\/]*\.)?thestartrekuniverse\.net
+https?:\/\/([^\/]*\.)?thetexasholdpoker\.com
+https?:\/\/([^\/]*\.)?thetrafficproject\.com
+https?:\/\/([^\/]*\.)?thetruevoyeur-com-gkjz2m\.blogspot\.com
+https?:\/\/([^\/]*\.)?thetruevoyeur-com-gy0\.blogspot\.com
+https?:\/\/([^\/]*\.)?thetruevoyeur-com-iuswifnlo\.blogspot\.com
+https?:\/\/([^\/]*\.)?thewarhal\.com
+https?:\/\/([^\/]*\.)?thexe\.info
+https?:\/\/([^\/]*\.)?thexo\.info
+https?:\/\/([^\/]*\.)?thg\.org\.ua
+https?:\/\/([^\/]*\.)?thick-ass-movie\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?thick-ass-stripper\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?thick-black-ass-pic\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?thigh-boot-movie\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?thiyanna-hl74o5m\.blogspot\.com
+https?:\/\/([^\/]*\.)?thomarina-gt\.blogspot\.com
+https?:\/\/([^\/]*\.)?thomas-r6ik\.blogspot\.com
+https?:\/\/([^\/]*\.)?thomasina-wpcw\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongbattle-com-rtrllksm\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongbattle-com-rx2f2tcqrm\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongdreams-com-w0r16sf\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongdreams-com-wq50\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongdreams-com-wx67\.blogspot\.com
+https?:\/\/([^\/]*\.)?thongdreams-com-xehiw\.blogspot\.com
+https?:\/\/([^\/]*\.)?thornblack-eq3a55o4\.blogspot\.com
+https?:\/\/([^\/]*\.)?three-to8p73\.blogspot\.com
+https?:\/\/([^\/]*\.)?threesforest\.blogspot\.com
+https?:\/\/([^\/]*\.)?thugs-djaox\.blogspot\.com
+https?:\/\/([^\/]*\.)?thugz-cqi0x7wkb6\.blogspot\.com
+https?:\/\/([^\/]*\.)?thumbzilla-com-mq\.blogspot\.com
+https?:\/\/([^\/]*\.)?thumbzilla-com-mqtw65e\.blogspot\.com
+https?:\/\/([^\/]*\.)?thumper-bs3t1\.blogspot\.com
+https?:\/\/([^\/]*\.)?thunder-aq\.blogspot\.com
+https?:\/\/([^\/]*\.)?thunder\.hostonmars\.com
+https?:\/\/([^\/]*\.)?thursday-om2jka\.blogspot\.com
+https?:\/\/([^\/]*\.)?thusqus\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?thx1138-mh86v55t2\.blogspot\.com
+https?:\/\/([^\/]*\.)?tia-icc0gbqhya\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiahaat\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tiahnna-kf24x7i4n\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiaja-hr4ci\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiana-g12f0\.blogspot\.com
+https?:\/\/([^\/]*\.)?tianna-r4s2r44e50\.blogspot\.com
+https?:\/\/([^\/]*\.)?tianti\.com\.cn
+https?:\/\/([^\/]*\.)?tiava-com-i60\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiava-com-i73ph\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiava-fiduh\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiava-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiava-tqfgkv74\.blogspot\.com
+https?:\/\/([^\/]*\.)?tibisa-e5d1w5g\.blogspot\.com
+https?:\/\/([^\/]*\.)?ticket\.hostaim\.com
+https?:\/\/([^\/]*\.)?ticketcenter\.cn
+https?:\/\/([^\/]*\.)?tied-gay-bondage\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?tiepin\.my10gb\.com
+https?:\/\/([^\/]*\.)?tieteler\.jconserv\.net
+https?:\/\/([^\/]*\.)?tiffani-dvy3\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiffany-b5arc\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiffany-teen-video-ces\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiffanyteen-a75atrdr\.blogspot\.com
+https?:\/\/([^\/]*\.)?tigers-ows\.blogspot\.com
+https?:\/\/([^\/]*\.)?tigger-muhul2h8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tight-ik340a6f\.blogspot\.com
+https?:\/\/([^\/]*\.)?tight-tranny-ass\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?tightdelights-com-bayzdrm4r\.blogspot\.com
+https?:\/\/([^\/]*\.)?tightdelights-com-bproar5r\.blogspot\.com
+https?:\/\/([^\/]*\.)?tigre-k0qdp\.blogspot\.com
+https?:\/\/([^\/]*\.)?tijldebie\.net
+https?:\/\/([^\/]*\.)?tilneshia-r1\.blogspot\.com
+https?:\/\/([^\/]*\.)?timank\.com
+https?:\/\/([^\/]*\.)?timelee\.pp\.ru
+https?:\/\/([^\/]*\.)?timetopaynow\.com
+https?:\/\/([^\/]*\.)?timewill\.pp\.ru
+https?:\/\/([^\/]*\.)?timex-ironman\.leg4is\.be
+https?:\/\/([^\/]*\.)?timothy-tkd\.blogspot\.com
+https?:\/\/([^\/]*\.)?timsmovies-com-ck0iq6v\.blogspot\.com
+https?:\/\/([^\/]*\.)?timsmovies-com-cui64k6qv\.blogspot\.com
+https?:\/\/([^\/]*\.)?timyra-dy\.blogspot\.com
+https?:\/\/([^\/]*\.)?tina-ce\.blogspot\.com
+https?:\/\/([^\/]*\.)?tinman-bb4k610\.blogspot\.com
+https?:\/\/([^\/]*\.)?tintin-abz\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiny-cock-blow-job\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?tiny18-net-e5zw0x8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiny18-net-thb44\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiny18-net-tq5qwp\.blogspot\.com
+https?:\/\/([^\/]*\.)?tinyeve-net-d8ejy5\.blogspot\.com
+https?:\/\/([^\/]*\.)?tinyeve-net-dzjflb1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tinysblackadventures-com-a61px\.blogspot\.com
+https?:\/\/([^\/]*\.)?tinysblackadventures-com-a638lqrud\.blogspot\.com
+https?:\/\/([^\/]*\.)?tipw\.org\.ua
+https?:\/\/([^\/]*\.)?tise2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?titanium-ring\.boom\.ru
+https?:\/\/([^\/]*\.)?titanium-rings\.boom\.ru
+https?:\/\/([^\/]*\.)?titanium1ring\.chat\.ru
+https?:\/\/([^\/]*\.)?titanium4ring\.chat\.ru
+https?:\/\/([^\/]*\.)?titkis\.com
+https?:\/\/([^\/]*\.)?tittypalace-com-o352hny\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiye-e5rhl\.blogspot\.com
+https?:\/\/([^\/]*\.)?tiyona-t4m7cq\.blogspot\.com
+https?:\/\/([^\/]*\.)?tizanidine\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?tj-d04qczfk\.blogspot\.com
+https?:\/\/([^\/]*\.)?tjbb1\.szm\.sk
+https?:\/\/([^\/]*\.)?tjjp\.left-page\.com
+https?:\/\/([^\/]*\.)?tjjp\.zxvo\.com
+https?:\/\/([^\/]*\.)?tjzhh\.com\.cn
+https?:\/\/([^\/]*\.)?tjzrr\.com
+https?:\/\/([^\/]*\.)?tkml\.tblog\.com
+https?:\/\/([^\/]*\.)?tknani\.50webs\.com
+https?:\/\/([^\/]*\.)?tkzrb\.szm\.sk
+https?:\/\/([^\/]*\.)?tladies\.net
+https?:\/\/([^\/]*\.)?tlchjhs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tldley4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tlhd3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tljsrq\.com
+https?:\/\/([^\/]*\.)?tlkdb\.szm\.sk
+https?:\/\/([^\/]*\.)?tmhbj\.com
+https?:\/\/([^\/]*\.)?tmobilenfn\.blogspot\.com
+https?:\/\/([^\/]*\.)?tmooeen-six\.blogspot\.com
+https?:\/\/([^\/]*\.)?tneccotnec\.fr-bb\.com
+https?:\/\/([^\/]*\.)?tnt163\.com
+https?:\/\/([^\/]*\.)?toggle-c0t3\.blogspot\.com
+https?:\/\/([^\/]*\.)?tohj3\.szm\.sk
+https?:\/\/([^\/]*\.)?tohqy\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tokuctro\.forumzen\.com
+https?:\/\/([^\/]*\.)?tom-b56vx6b48\.blogspot\.com
+https?:\/\/([^\/]*\.)?tomato-a7e\.blogspot\.com
+https?:\/\/([^\/]*\.)?tomems\.125mb\.com
+https?:\/\/([^\/]*\.)?tommys-bookmarks-com-eeb0\.blogspot\.com
+https?:\/\/([^\/]*\.)?tommys-bookmarks-com-ev\.blogspot\.com
+https?:\/\/([^\/]*\.)?tomng\.info
+https?:\/\/([^\/]*\.)?tomsthumbs-com-ihj\.blogspot\.com
+https?:\/\/([^\/]*\.)?tomsthumbs-com-iqkobr\.blogspot\.com
+https?:\/\/([^\/]*\.)?ton4all\.com
+https?:\/\/([^\/]*\.)?tonea-m3t\.blogspot\.com
+https?:\/\/([^\/]*\.)?tonegativeone\.blogspot\.com
+https?:\/\/([^\/]*\.)?toniann-kr3\.blogspot\.com
+https?:\/\/([^\/]*\.)?tony-h3xs1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tonya-g0x1\.blogspot\.com
+https?:\/\/([^\/]*\.)?toons-fuck-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?toor3\.szm\.sk
+https?:\/\/([^\/]*\.)?tootsie-rjg323oj2\.blogspot\.com
+https?:\/\/([^\/]*\.)?top-hold-em\.us
+https?:\/\/([^\/]*\.)?top-holdem\.com
+https?:\/\/([^\/]*\.)?top-holdem\.us
+https?:\/\/([^\/]*\.)?top-mp3\.biz
+https?:\/\/([^\/]*\.)?top\.pcanywhere\.net
+https?:\/\/([^\/]*\.)?topacio-w3fpzg\.blogspot\.com
+https?:\/\/([^\/]*\.)?topairlines\.ifrance\.com
+https?:\/\/([^\/]*\.)?topcelebs-com-hf34tmj\.blogspot\.com
+https?:\/\/([^\/]*\.)?topdasar\.com
+https?:\/\/([^\/]*\.)?topee\.info
+https?:\/\/([^\/]*\.)?topege\.com
+https?:\/\/([^\/]*\.)?topfarmasearch\.info
+https?:\/\/([^\/]*\.)?topgun-ef7gc204\.blogspot\.com
+https?:\/\/([^\/]*\.)?topless-babes-com-mq6hbe5uvq\.blogspot\.com
+https?:\/\/([^\/]*\.)?topo20\.org
+https?:\/\/([^\/]*\.)?topography-tuowheetle\.blogspot\.com
+https?:\/\/([^\/]*\.)?topozo\.org
+https?:\/\/([^\/]*\.)?topworldauto\.info
+https?:\/\/([^\/]*\.)?torey-dr343r\.blogspot\.com
+https?:\/\/([^\/]*\.)?tori-cmg8\.blogspot\.com
+https?:\/\/([^\/]*\.)?toriana-baui\.blogspot\.com
+https?:\/\/([^\/]*\.)?tornado-axe8uch1ar\.blogspot\.com
+https?:\/\/([^\/]*\.)?toronto-ox7aprp\.blogspot\.com
+https?:\/\/([^\/]*\.)?toropiz\.125mb\.com
+https?:\/\/([^\/]*\.)?torri-mrmj\.blogspot\.com
+https?:\/\/([^\/]*\.)?tortoise-iz\.blogspot\.com
+https?:\/\/([^\/]*\.)?torucnro\.jconserv\.net
+https?:\/\/([^\/]*\.)?tosuralz\.forumzen\.com
+https?:\/\/([^\/]*\.)?tottiona-k1zx8juj\.blogspot\.com
+https?:\/\/([^\/]*\.)?touya012\.blogspot\.com
+https?:\/\/([^\/]*\.)?town-china\.cn
+https?:\/\/([^\/]*\.)?toxic-h8jasyqt1\.blogspot\.com
+https?:\/\/([^\/]*\.)?toyota-g8\.blogspot\.com
+https?:\/\/([^\/]*\.)?tpwyc\.szm\.sk
+https?:\/\/([^\/]*\.)?tqdd7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tqnkaoi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tqrkf\.szm\.sk
+https?:\/\/([^\/]*\.)?traci-r30narn\.blogspot\.com
+https?:\/\/([^\/]*\.)?tracie-wskg17md\.blogspot\.com
+https?:\/\/([^\/]*\.)?trackting\.com
+https?:\/\/([^\/]*\.)?tractor-etae7hau1y\.blogspot\.com
+https?:\/\/([^\/]*\.)?tracy-kae\.babubi\.net
+https?:\/\/([^\/]*\.)?tracy-toe7\.blogspot\.com
+https?:\/\/([^\/]*\.)?traesha-d8u3731bb6\.blogspot\.com
+https?:\/\/([^\/]*\.)?traffit\.info
+https?:\/\/([^\/]*\.)?tralina-bvqz366sv\.blogspot\.com
+https?:\/\/([^\/]*\.)?tramadol-4u\.net
+https?:\/\/([^\/]*\.)?tramadol-911\.coz\.in
+https?:\/\/([^\/]*\.)?tramadol-bznz\.blogspot\.com
+https?:\/\/([^\/]*\.)?tramadol-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?tramadol-gs\.eu\.tc
+https?:\/\/([^\/]*\.)?tramadol-gs\.net\.tc
+https?:\/\/([^\/]*\.)?tramadol-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?tramadol-wiki\.com
+https?:\/\/([^\/]*\.)?tramadol\.1\.forogratis\.es
+https?:\/\/([^\/]*\.)?tramadol\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?tramadol\.esguay\.com
+https?:\/\/([^\/]*\.)?tramadol\.fws1\.com
+https?:\/\/([^\/]*\.)?tramadol\.goodpharm\.info
+https?:\/\/([^\/]*\.)?tramadol\.knopkabablo\.info
+https?:\/\/([^\/]*\.)?tramadol\.presteert\.nl
+https?:\/\/([^\/]*\.)?tramadol\.skocz\.net
+https?:\/\/([^\/]*\.)?tramadol\.su\.pl
+https?:\/\/([^\/]*\.)?tramadol\.weboficial\.com
+https?:\/\/([^\/]*\.)?tramadol7\.php5\.cz
+https?:\/\/([^\/]*\.)?tramadolnx\.u\.yuku\.com
+https?:\/\/([^\/]*\.)?tramadolonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?tramadolonlinez\.blogsome\.com
+https?:\/\/([^\/]*\.)?tramadolq\.bloggingmylife\.com
+https?:\/\/([^\/]*\.)?tramadols\.us\.tf
+https?:\/\/([^\/]*\.)?trami-a7oq4k1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tramika-o4no\.blogspot\.com
+https?:\/\/([^\/]*\.)?tran-ma86bq3\.blogspot\.com
+https?:\/\/([^\/]*\.)?tranici\.info
+https?:\/\/([^\/]*\.)?tranlaura-ktn\.blogspot\.com
+https?:\/\/([^\/]*\.)?trannysurprise-com-ghn6k4r88\.blogspot\.com
+https?:\/\/([^\/]*\.)?trannysurprise-com-gq\.blogspot\.com
+https?:\/\/([^\/]*\.)?trannysurprise-com-i05csl\.blogspot\.com
+https?:\/\/([^\/]*\.)?transbiding\.com
+https?:\/\/([^\/]*\.)?transchinese\.com
+https?:\/\/([^\/]*\.)?transfer-h56d4zxl4\.blogspot\.com
+https?:\/\/([^\/]*\.)?translateatsh\.cn
+https?:\/\/([^\/]*\.)?translatebbs\.com
+https?:\/\/([^\/]*\.)?translateforcompany\.cn
+https?:\/\/([^\/]*\.)?traore-guh68nn\.blogspot\.com
+https?:\/\/([^\/]*\.)?trashnx\.datadiri\.cc
+https?:\/\/([^\/]*\.)?trastian-r1\.blogspot\.com
+https?:\/\/([^\/]*\.)?travel-blast\.com
+https?:\/\/([^\/]*\.)?travel-wa4g2\.blogspot\.com
+https?:\/\/([^\/]*\.)?travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?travel2nursing\.chat\.ru
+https?:\/\/([^\/]*\.)?travelmarket\.mytravelsearch\.info
+https?:\/\/([^\/]*\.)?travis-ez8v\.blogspot\.com
+https?:\/\/([^\/]*\.)?tray-t5\.blogspot\.com
+https?:\/\/([^\/]*\.)?trbodel\.frbb\.net
+https?:\/\/([^\/]*\.)?trbusget\.forumzen\.com
+https?:\/\/([^\/]*\.)?trcchi\.td\.pl
+https?:\/\/([^\/]*\.)?trcota\.bb-fr\.com
+https?:\/\/([^\/]*\.)?trdombas\.blogcu\.com
+https?:\/\/([^\/]*\.)?trerdron\.discutfree\.com
+https?:\/\/([^\/]*\.)?trerdron\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?tressa-a7w83sb\.blogspot\.com
+https?:\/\/([^\/]*\.)?tretinoingelbuy\.move\.to
+https?:\/\/([^\/]*\.)?tretinoingelbuycheap\.move\.to
+https?:\/\/([^\/]*\.)?tretinoingelbuygeneric\.drive\.to
+https?:\/\/([^\/]*\.)?tretinoingelcheap\.rulestheweb\.com
+https?:\/\/([^\/]*\.)?tretinoingelgeneric\.germany\.ms
+https?:\/\/([^\/]*\.)?trevisos\.org
+https?:\/\/([^\/]*\.)?trevor-obp5qlgdb\.blogspot\.com
+https?:\/\/([^\/]*\.)?trhlina\.republika\.pl
+https?:\/\/([^\/]*\.)?tribuna\.asp2\.cz
+https?:\/\/([^\/]*\.)?trident-m6wm\.blogspot\.com
+https?:\/\/([^\/]*\.)?trinbagoauto\.com
+https?:\/\/([^\/]*\.)?trinity-ikvstb\.blogspot\.com
+https?:\/\/([^\/]*\.)?triobuy\.vtost\.com
+https?:\/\/([^\/]*\.)?triphasil\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?tripto\.com
+https?:\/\/([^\/]*\.)?trisha-ksmv\.blogspot\.com
+https?:\/\/([^\/]*\.)?tristen-h2b1b1\.blogspot\.com
+https?:\/\/([^\/]*\.)?trivial-gk13on\.blogspot\.com
+https?:\/\/([^\/]*\.)?trixie-rkn\.blogspot\.com
+https?:\/\/([^\/]*\.)?trkucorc\.forumzen\.com
+https?:\/\/([^\/]*\.)?trlicut\.winnerforum\.net
+https?:\/\/([^\/]*\.)?trocacsit\.dl\.pl
+https?:\/\/([^\/]*\.)?troccvi\.darkbb\.com
+https?:\/\/([^\/]*\.)?trocdarc\.bb-fr\.com
+https?:\/\/([^\/]*\.)?troceltolo\.dl\.pl
+https?:\/\/([^\/]*\.)?trocoches\.info
+https?:\/\/([^\/]*\.)?trocrolac\.dl\.pl
+https?:\/\/([^\/]*\.)?troctrocro\.zj\.pl
+https?:\/\/([^\/]*\.)?trombone-wafnt\.blogspot\.com
+https?:\/\/([^\/]*\.)?trorolo\.ephpbb\.com
+https?:\/\/([^\/]*\.)?trorta\.blogcu\.com
+https?:\/\/([^\/]*\.)?trte2\.szm\.sk
+https?:\/\/([^\/]*\.)?trtrocli\.uy\.pl
+https?:\/\/([^\/]*\.)?trucks-t5rikxk1yk\.blogspot\.com
+https?:\/\/([^\/]*\.)?trumpet-d5846b6u\.blogspot\.com
+https?:\/\/([^\/]*\.)?trumst\.com
+https?:\/\/([^\/]*\.)?trzelor\.bbfr\.net
+https?:\/\/([^\/]*\.)?ts998\.com
+https?:\/\/([^\/]*\.)?tsc-clara\.hostingtree\.org
+https?:\/\/([^\/]*\.)?tsfzia5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tshirthell-com-h4dd14cx0g\.blogspot\.com
+https?:\/\/([^\/]*\.)?tshirthell-com-wbc\.blogspot\.com
+https?:\/\/([^\/]*\.)?tshirthell-com-wvayrpu2\.blogspot\.com
+https?:\/\/([^\/]*\.)?tslist-com-rwwi8zl\.blogspot\.com
+https?:\/\/([^\/]*\.)?tslist-com-ry\.blogspot\.com
+https?:\/\/([^\/]*\.)?tsoy7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tss-car\.com
+https?:\/\/([^\/]*\.)?tssuih5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tsvibak\.blogspot\.com
+https?:\/\/([^\/]*\.)?tt001\.com
+https?:\/\/([^\/]*\.)?tt002\.com
+https?:\/\/([^\/]*\.)?tt003\.com
+https?:\/\/([^\/]*\.)?tt004\.com
+https?:\/\/([^\/]*\.)?tt005\.com
+https?:\/\/([^\/]*\.)?tthumvir\.forumzen\.com
+https?:\/\/([^\/]*\.)?ttjpm\.szm\.sk
+https?:\/\/([^\/]*\.)?ttlive\.info
+https?:\/\/([^\/]*\.)?ttrgb\.szm\.sk
+https?:\/\/([^\/]*\.)?ttvpkp0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tu-wendi\.blogspot\.com
+https?:\/\/([^\/]*\.)?tubas-bc45h\.blogspot\.com
+https?:\/\/([^\/]*\.)?tuesday-anx780we1\.blogspot\.com
+https?:\/\/([^\/]*\.)?tufa\.info
+https?:\/\/([^\/]*\.)?tugjobs-com-kmr4pm\.blogspot\.com
+https?:\/\/([^\/]*\.)?tuhe-advil\.blogspot\.com
+https?:\/\/([^\/]*\.)?tulip123456\.ifrance\.com
+https?:\/\/([^\/]*\.)?turbo-o3f520u0jd\.blogspot\.com
+https?:\/\/([^\/]*\.)?turl\.jp
+https?:\/\/([^\/]*\.)?turtle-m6pr6y\.blogspot\.com
+https?:\/\/([^\/]*\.)?tuttle-i5\.blogspot\.com
+https?:\/\/([^\/]*\.)?tuttosport\.freespase\.info
+https?:\/\/([^\/]*\.)?tuubu\.szm\.sk
+https?:\/\/([^\/]*\.)?tv-bazzar\.com
+https?:\/\/([^\/]*\.)?twam0\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?tweety-k8z4spyz\.blogspot\.com
+https?:\/\/([^\/]*\.)?twelvalve\.blogspot\.com
+https?:\/\/([^\/]*\.)?twilightsex-cixeh\.blogspot\.com
+https?:\/\/([^\/]*\.)?twilightsex-com-o31qd\.blogspot\.com
+https?:\/\/([^\/]*\.)?twilightsex-com-op\.blogspot\.com
+https?:\/\/([^\/]*\.)?twins-hzhz\.blogspot\.com
+https?:\/\/([^\/]*\.)?twist-ga\.blogspot\.com
+https?:\/\/([^\/]*\.)?twister-r4\.blogspot\.com
+https?:\/\/([^\/]*\.)?two-lips-com-cfvn7fu3\.blogspot\.com
+https?:\/\/([^\/]*\.)?two-lips-com-cwk\.blogspot\.com
+https?:\/\/([^\/]*\.)?two-teen-kissing\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?two-wgn3t3\.blogspot\.com
+https?:\/\/([^\/]*\.)?twoq5\.szm\.sk
+https?:\/\/([^\/]*\.)?twxtbqn\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?txnpgc2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?txvfpo7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tyepobv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?tyj\.cwrjcn\.com
+https?:\/\/([^\/]*\.)?tyra-dna0lnjav\.blogspot\.com
+https?:\/\/([^\/]*\.)?tytiana-bjag\.blogspot\.com
+https?:\/\/([^\/]*\.)?tyvj5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uaobs\.szm\.sk
+https?:\/\/([^\/]*\.)?ub-mongolia\.mn
+https?:\/\/([^\/]*\.)?ubasak\.stabilt\.se
+https?:\/\/([^\/]*\.)?ubpmr\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ucdrun\.forumzen\.com
+https?:\/\/([^\/]*\.)?ucol2\.szm\.sk
+https?:\/\/([^\/]*\.)?udqhh\.szm\.sk
+https?:\/\/([^\/]*\.)?udtm7\.szm\.sk
+https?:\/\/([^\/]*\.)?uemhpgv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uglyjezz\.asp2\.cz
+https?:\/\/([^\/]*\.)?ugmhq\.szm\.sk
+https?:\/\/([^\/]*\.)?ukbettingweb\.com
+https?:\/\/([^\/]*\.)?ukek-hin\.isuisse\.com
+https?:\/\/([^\/]*\.)?ukrosi\.com
+https?:\/\/([^\/]*\.)?uksr9\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ulqj9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ultimateairpurifier\.com
+https?:\/\/([^\/]*\.)?ultimatesurrender-com-bkio\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultimatesurrender-com-bm8z1b\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultimatesurrender-com-c75r71j2e\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultracet\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ultradonkey-com-acp\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultradonkey-com-ag0\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultram-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultram\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?ultram\.47\.pl
+https?:\/\/([^\/]*\.)?ultram\.goodpharm\.info
+https?:\/\/([^\/]*\.)?ultram\.hav\.pl
+https?:\/\/([^\/]*\.)?ultram\.is-a-geek\.com
+https?:\/\/([^\/]*\.)?ultram\.serveftp\.com
+https?:\/\/([^\/]*\.)?ultram\.skocz\.net
+https?:\/\/([^\/]*\.)?ultrameds\.dtdns\.net
+https?:\/\/([^\/]*\.)?ultrams\.eu\.tf
+https?:\/\/([^\/]*\.)?ultrasexmovies-com-dm2dmh\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultrasexmovies-com-dz02q7\.blogspot\.com
+https?:\/\/([^\/]*\.)?ultrasexmovies-com-zujuz\.blogspot\.com
+https?:\/\/([^\/]*\.)?umax-forum\.com
+https?:\/\/([^\/]*\.)?umax-ppc\.com
+https?:\/\/([^\/]*\.)?umax-se\.com
+https?:\/\/([^\/]*\.)?umax-se\.info
+https?:\/\/([^\/]*\.)?umax-search-ppc-se-board\.com
+https?:\/\/([^\/]*\.)?umax-search-se\.com
+https?:\/\/([^\/]*\.)?umax-search\.net
+https?:\/\/([^\/]*\.)?umaxppc\.com
+https?:\/\/([^\/]*\.)?umaxse\.net
+https?:\/\/([^\/]*\.)?umaxse\.org
+https?:\/\/([^\/]*\.)?umaxsearch-search-engine\.com
+https?:\/\/([^\/]*\.)?umojucd\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?umsbm\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?un-fois\.blogspot\.com
+https?:\/\/([^\/]*\.)?un-nachrichten\.de
+https?:\/\/([^\/]*\.)?unbelievable-poker\.com
+https?:\/\/([^\/]*\.)?uncledeadly83\.blogspot\.com
+https?:\/\/([^\/]*\.)?understandish\.50webs\.org
+https?:\/\/([^\/]*\.)?unglaublichkeiten\.com
+https?:\/\/([^\/]*\.)?unicom\.027168\.com
+https?:\/\/([^\/]*\.)?uniform2nursing\.chat\.ru
+https?:\/\/([^\/]*\.)?unit01\.com
+https?:\/\/([^\/]*\.)?united-airline\.boom\.ru
+https?:\/\/([^\/]*\.)?united24\.com
+https?:\/\/([^\/]*\.)?unitedinchristchurch\.org
+https?:\/\/([^\/]*\.)?universal-hosting\.net
+https?:\/\/([^\/]*\.)?university-degre\.boom\.ru
+https?:\/\/([^\/]*\.)?university1degre\.chat\.ru
+https?:\/\/([^\/]*\.)?unixbrewers\.org
+https?:\/\/([^\/]*\.)?unka\.su\.pl
+https?:\/\/([^\/]*\.)?unseenoyster\.blogspot\.com
+https?:\/\/([^\/]*\.)?unwqs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uobasdel\.fr-bb\.com
+https?:\/\/([^\/]*\.)?uokx8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uous6\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?up-skirt-butt\.medved\.odessa\.ua
+https?:\/\/([^\/]*\.)?updatenames\.dtdns\.net
+https?:\/\/([^\/]*\.)?upskirt-ebony-teen\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?upskirt-gallery-leg\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?upskirtsexxfh\.blogspot\.com
+https?:\/\/([^\/]*\.)?upwaldru\.ifrance\.com
+https?:\/\/([^\/]*\.)?uraharaben1hime\.blogspot\.com
+https?:\/\/([^\/]*\.)?urkrdh5\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?urky5\.szm\.sk
+https?:\/\/([^\/]*\.)?us-senator-dick-durbin\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?us-viagra\.us
+https?:\/\/([^\/]*\.)?us\.kopuz\.com
+https?:\/\/([^\/]*\.)?usa-online-pharmacy\.net
+https?:\/\/([^\/]*\.)?usa568\.com
+https?:\/\/([^\/]*\.)?usaah\.com
+https?:\/\/([^\/]*\.)?usbestlawyer\.org
+https?:\/\/([^\/]*\.)?usbuorl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?usednotebooks\.ru
+https?:\/\/([^\/]*\.)?ushoh\.szm\.sk
+https?:\/\/([^\/]*\.)?uskbbb9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?usuc\.us
+https?:\/\/([^\/]*\.)?uszfp\.szm\.sk
+https?:\/\/([^\/]*\.)?utahmortgage-x\.com
+https?:\/\/([^\/]*\.)?utranslate\.org
+https?:\/\/([^\/]*\.)?utranslation\.net
+https?:\/\/([^\/]*\.)?uucwsw7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uulitr\.forumzen\.com
+https?:\/\/([^\/]*\.)?uulive\.info
+https?:\/\/([^\/]*\.)?uvfotuc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uvgpy\.szm\.sk
+https?:\/\/([^\/]*\.)?uvndhxh\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uwacadweb\.uwyo\.edu
+https?:\/\/([^\/]*\.)?uwek\.info
+https?:\/\/([^\/]*\.)?uxyei\.szm\.sk
+https?:\/\/([^\/]*\.)?uyjdrg3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?uzfde\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?uzzclm9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?v-f-sex-video-clip-g\.blogspot\.com
+https?:\/\/([^\/]*\.)?v-j-big-movie-tit-v\.blogspot\.com
+https?:\/\/([^\/]*\.)?v1h\.com
+https?:\/\/([^\/]*\.)?v5wednesday\.info
+https?:\/\/([^\/]*\.)?v7njlwgd\.nokedem\.com
+https?:\/\/([^\/]*\.)?vacanza-barcellona\.zoom10x\.info
+https?:\/\/([^\/]*\.)?vacanza-montagna\.freespase\.info
+https?:\/\/([^\/]*\.)?vacanza-neve\.zoom4x\.info
+https?:\/\/([^\/]*\.)?vacanza-toscana\.host24h\.info
+https?:\/\/([^\/]*\.)?vacuums\.be
+https?:\/\/([^\/]*\.)?vahitchc\.dl\.pl
+https?:\/\/([^\/]*\.)?valiubusines\.blogcu\.com
+https?:\/\/([^\/]*\.)?valium-911\.coz\.in
+https?:\/\/([^\/]*\.)?valium-cc\.blogspot\.com
+https?:\/\/([^\/]*\.)?valium-cheap\.18\.to
+https?:\/\/([^\/]*\.)?valium-online\.cheapills\.info
+https?:\/\/([^\/]*\.)?valium-qrxo\.blogspot\.com
+https?:\/\/([^\/]*\.)?valium\.269g\.net
+https?:\/\/([^\/]*\.)?valium\.47\.pl
+https?:\/\/([^\/]*\.)?valium\.goodpharm\.info
+https?:\/\/([^\/]*\.)?valium\.skocz\.net
+https?:\/\/([^\/]*\.)?valium\.su\.pl
+https?:\/\/([^\/]*\.)?valiumnx\.u\.yuku\.com
+https?:\/\/([^\/]*\.)?valiums\.eu\.tf
+https?:\/\/([^\/]*\.)?valleyswap\.info
+https?:\/\/([^\/]*\.)?valtrex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?vametase\.com
+https?:\/\/([^\/]*\.)?vands88\.blogspot\.com
+https?:\/\/([^\/]*\.)?vanhelsingsgirl\.datadiri\.cc
+https?:\/\/([^\/]*\.)?vaniqa\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?varac\.heavenforum\.com
+https?:\/\/([^\/]*\.)?varac\.highforum\.net
+https?:\/\/([^\/]*\.)?varelvi\.discutfree\.com
+https?:\/\/([^\/]*\.)?varnish\.8888mb\.com
+https?:\/\/([^\/]*\.)?varnotr\.naturalforum\.net
+https?:\/\/([^\/]*\.)?varoracel\.bbfr\.net
+https?:\/\/([^\/]*\.)?varracleto\.dl\.pl
+https?:\/\/([^\/]*\.)?vazicoj\.info
+https?:\/\/([^\/]*\.)?vboya\.9999mb\.com
+https?:\/\/([^\/]*\.)?vcjwc\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?vcpk9\.szm\.sk
+https?:\/\/([^\/]*\.)?vcsps\.com
+https?:\/\/([^\/]*\.)?vdpf4\.szm\.sk
+https?:\/\/([^\/]*\.)?ve-alisa\.blogspot\.com
+https?:\/\/([^\/]*\.)?vegetnuks\.blogspot\.com
+https?:\/\/([^\/]*\.)?veggis\.org\.cn
+https?:\/\/([^\/]*\.)?vehal\.com
+https?:\/\/([^\/]*\.)?vek-xxxpower-net\.blogspot\.com
+https?:\/\/([^\/]*\.)?velvetimalice\.ibelgique\.com
+https?:\/\/([^\/]*\.)?vemiles\.ifrance\.com
+https?:\/\/([^\/]*\.)?verba\.dyndns\.dk
+https?:\/\/([^\/]*\.)?verfolva\.blogspot\.com
+https?:\/\/([^\/]*\.)?veriel\.dl\.pl
+https?:\/\/([^\/]*\.)?verizonringtonersy\.blogspot\.com
+https?:\/\/([^\/]*\.)?verizonringtonesdvf\.blogspot\.com
+https?:\/\/([^\/]*\.)?vermontmortgage-x\.com
+https?:\/\/([^\/]*\.)?vertyg\.org
+https?:\/\/([^\/]*\.)?veryge\.com
+https?:\/\/([^\/]*\.)?veryprivatebanking\.info
+https?:\/\/([^\/]*\.)?vestuk\.com
+https?:\/\/([^\/]*\.)?veterinar\.spb\.ru
+https?:\/\/([^\/]*\.)?vets\.appliedphysics\.swri\.edu
+https?:\/\/([^\/]*\.)?vfrkiv6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vfrrto\.org
+https?:\/\/([^\/]*\.)?vhuekxi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vi-allo\.blogspot\.com
+https?:\/\/([^\/]*\.)?viadele\.dl\.pl
+https?:\/\/([^\/]*\.)?viagaravaegra\.com
+https?:\/\/([^\/]*\.)?viaggi-del-ventaglio\.forumhst\.info
+https?:\/\/([^\/]*\.)?viagra-4u\.us
+https?:\/\/([^\/]*\.)?viagra-online\.presteert\.nl
+https?:\/\/([^\/]*\.)?viagra-soft-tabs\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?viagra\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?viagra\.cheapills\.info
+https?:\/\/([^\/]*\.)?viagra\.edu\.tf
+https?:\/\/([^\/]*\.)?viagra\.esguay\.com
+https?:\/\/([^\/]*\.)?viagra\.inc5\.com
+https?:\/\/([^\/]*\.)?viagra\.rx4\.org
+https?:\/\/([^\/]*\.)?viagra\.skocz\.net
+https?:\/\/([^\/]*\.)?viagrai\.blogspot\.com
+https?:\/\/([^\/]*\.)?viagraorder\.mail15\.com
+https?:\/\/([^\/]*\.)?viagraq\.bloggingmylife\.com
+https?:\/\/([^\/]*\.)?viagrarx\.weboficial\.com
+https?:\/\/([^\/]*\.)?vicodin-pharm\.fws1\.com
+https?:\/\/([^\/]*\.)?vicodin\.269g\.net
+https?:\/\/([^\/]*\.)?vicodin\.conto\.pl
+https?:\/\/([^\/]*\.)?vicodin\.esguay\.com
+https?:\/\/([^\/]*\.)?vicodin\.guu\.pl
+https?:\/\/([^\/]*\.)?vicodin88\.tblog\.com
+https?:\/\/([^\/]*\.)?victoria-silvstedt\.freehostss\.info
+https?:\/\/([^\/]*\.)?videlric\.dl\.pl
+https?:\/\/([^\/]*\.)?video-comico\.host24h\.info
+https?:\/\/([^\/]*\.)?video-porn-caseros-ju\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-porn-gratis-sod\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-post-com-bejiq\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-post-com-bfoybt\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-post-com-my\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-post-com-thumbview-rehif\.blogspot\.com
+https?:\/\/([^\/]*\.)?video-spot-sexy\.19mb\.info
+https?:\/\/([^\/]*\.)?video-spot-sexy\.you-bizz\.info
+https?:\/\/([^\/]*\.)?video-whore-bb-bb-b\.blogspot\.com
+https?:\/\/([^\/]*\.)?videosection-com-h0xon\.blogspot\.com
+https?:\/\/([^\/]*\.)?videosection-com-w1w\.blogspot\.com
+https?:\/\/([^\/]*\.)?videosection-com-w62l\.blogspot\.com
+https?:\/\/([^\/]*\.)?videosharez\.com
+https?:\/\/([^\/]*\.)?vidgals-com-e13sc4yv0\.blogspot\.com
+https?:\/\/([^\/]*\.)?vidgals-com-e6ig7a\.blogspot\.com
+https?:\/\/([^\/]*\.)?vidgals-com-edvo\.blogspot\.com
+https?:\/\/([^\/]*\.)?vidronla\.blogcu\.com
+https?:\/\/([^\/]*\.)?vielsit\.su\.pl
+https?:\/\/([^\/]*\.)?vietnamparadisetravel\.com
+https?:\/\/([^\/]*\.)?viewerswives-net-c4\.blogspot\.com
+https?:\/\/([^\/]*\.)?viewerswives-net-oc\.blogspot\.com
+https?:\/\/([^\/]*\.)?viewgals-com-ah\.blogspot\.com
+https?:\/\/([^\/]*\.)?viewgals-com-il253r\.blogspot\.com
+https?:\/\/([^\/]*\.)?vigduk30\.xshorturl\.com
+https?:\/\/([^\/]*\.)?vigetleto\.heavenforum\.com
+https?:\/\/([^\/]*\.)?vihl6\.szm\.sk
+https?:\/\/([^\/]*\.)?viliolo\.winnerforum\.net
+https?:\/\/([^\/]*\.)?village\.asp2\.cz
+https?:\/\/([^\/]*\.)?villaggio-ischia\.ll11\.info
+https?:\/\/([^\/]*\.)?vinnie-1-hit\.blogspot\.com
+https?:\/\/([^\/]*\.)?vintage\.sexcluborgy\.net
+https?:\/\/([^\/]*\.)?vioxx\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?vioxx\.3d-game\.com
+https?:\/\/([^\/]*\.)?vipasrel\.cultureforum\.net
+https?:\/\/([^\/]*\.)?vipcrew-com-bj\.blogspot\.com
+https?:\/\/([^\/]*\.)?vipcrew-com-r0w\.blogspot\.com
+https?:\/\/([^\/]*\.)?vipcrew-com-rs74r7iy5\.blogspot\.com
+https?:\/\/([^\/]*\.)?viphls\.com
+https?:\/\/([^\/]*\.)?vipliz\.com
+https?:\/\/([^\/]*\.)?vipmsite\.com
+https?:\/\/([^\/]*\.)?virgin-porn\.futureblog\.org
+https?:\/\/([^\/]*\.)?virgin-sexy\.com
+https?:\/\/([^\/]*\.)?virginfucked-com-h200n1lxcg\.blogspot\.com
+https?:\/\/([^\/]*\.)?virginiamortgage-x\.com
+https?:\/\/([^\/]*\.)?viricrel\.lolbb\.com
+https?:\/\/([^\/]*\.)?virinok\.dynamicforum\.net
+https?:\/\/([^\/]*\.)?virtualeinfiniti\.cn
+https?:\/\/([^\/]*\.)?vitalitymax\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?vivino\.ephpbb\.com
+https?:\/\/([^\/]*\.)?vizelvar\.frbb\.net
+https?:\/\/([^\/]*\.)?vjkavu6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vjsgby0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vjuk7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vjwm2\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?vkblq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vksfucm\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vmdes\.com
+https?:\/\/([^\/]*\.)?vmpi4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vmvip\.com
+https?:\/\/([^\/]*\.)?vmvip\.net
+https?:\/\/([^\/]*\.)?vmvip\.org
+https?:\/\/([^\/]*\.)?vo-free-oral-movie-clip-toc\.blogspot\.com
+https?:\/\/([^\/]*\.)?voip-guide\.org
+https?:\/\/([^\/]*\.)?vol-soft17-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?voli-amsterdam\.freespase\.info
+https?:\/\/([^\/]*\.)?voli-argentina\.zoom10x\.info
+https?:\/\/([^\/]*\.)?voli-londra\.freespase\.info
+https?:\/\/([^\/]*\.)?voli-spagna\.freespase\.info
+https?:\/\/([^\/]*\.)?volume5\.8888mb\.com
+https?:\/\/([^\/]*\.)?voxn2\.szm\.sk
+https?:\/\/([^\/]*\.)?voyeur-video-amateur-free\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?voyeurzine-com-af2\.blogspot\.com
+https?:\/\/([^\/]*\.)?voyeurzine-com-dbhx1q\.blogspot\.com
+https?:\/\/([^\/]*\.)?voyiu\.szm\.sk
+https?:\/\/([^\/]*\.)?vpbu1\.szm\.sk
+https?:\/\/([^\/]*\.)?vrlw9\.szm\.sk
+https?:\/\/([^\/]*\.)?vrnjgk1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vstqfs3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vtop\.fateback\.com
+https?:\/\/([^\/]*\.)?vtop\.kilu\.de
+https?:\/\/([^\/]*\.)?vtop\.topcities\.com
+https?:\/\/([^\/]*\.)?vtrxzzwj-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?vttolldd\.org
+https?:\/\/([^\/]*\.)?vttthtgg\.org
+https?:\/\/([^\/]*\.)?vtwm7\.szm\.sk
+https?:\/\/([^\/]*\.)?vu-alias\.blogspot\.com
+https?:\/\/([^\/]*\.)?vu-aliases\.blogspot\.com
+https?:\/\/([^\/]*\.)?vu-free-big-sex-movie-fen\.blogspot\.com
+https?:\/\/([^\/]*\.)?vud-vipcrew-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?vue\.uit\.tufts\.edu
+https?:\/\/([^\/]*\.)?vulgarisprime\.50webs\.org
+https?:\/\/([^\/]*\.)?vuqi-alana\.blogspot\.com
+https?:\/\/([^\/]*\.)?vutwwd6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vuzeq-sex-video-d\.blogspot\.com
+https?:\/\/([^\/]*\.)?vvaliumonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?vvline\.info
+https?:\/\/([^\/]*\.)?vwjr2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vwzm6\.szm\.sk
+https?:\/\/([^\/]*\.)?vyqdvf1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?vyuf9\.szm\.sk
+https?:\/\/([^\/]*\.)?vzevz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?w-q-elmo-extreme-video-n\.blogspot\.com
+https?:\/\/([^\/]*\.)?w-s-free-gay-sex-video-l\.blogspot\.com
+https?:\/\/([^\/]*\.)?w2\.ftpcn\.cn
+https?:\/\/([^\/]*\.)?w528\.com
+https?:\/\/([^\/]*\.)?wacks\.info
+https?:\/\/([^\/]*\.)?wak1ngmel0dies\.blogspot\.com
+https?:\/\/([^\/]*\.)?walker-ross\.com
+https?:\/\/([^\/]*\.)?walkerproconsulting\.com
+https?:\/\/([^\/]*\.)?walt-disney-world-travel\.globaltr\.info
+https?:\/\/([^\/]*\.)?wanadoo-fr-eyn6u1yt0\.blogspot\.com
+https?:\/\/([^\/]*\.)?wanadoo-fr-gsz\.blogspot\.com
+https?:\/\/([^\/]*\.)?wanadoo-fr-i0iq\.blogspot\.com
+https?:\/\/([^\/]*\.)?wannawatch-com-k1rckf8\.blogspot\.com
+https?:\/\/([^\/]*\.)?wannawatch-com-krz7dxd5a\.blogspot\.com
+https?:\/\/([^\/]*\.)?wannawatch-com-oaeedr\.blogspot\.com
+https?:\/\/([^\/]*\.)?wapzhijia\.com
+https?:\/\/([^\/]*\.)?waserk\.com
+https?:\/\/([^\/]*\.)?washingtonmortgage-x\.com
+https?:\/\/([^\/]*\.)?watch-free-porn-clip-zone43l\.blogspot\.com
+https?:\/\/([^\/]*\.)?watch-free-porn-clip-zonekjl\.blogspot\.com
+https?:\/\/([^\/]*\.)?watch-free-porn-video-bu\.blogspot\.com
+https?:\/\/([^\/]*\.)?watchersweb-com-t61o4wrr4h\.blogspot\.com
+https?:\/\/([^\/]*\.)?watchersweb-com-tnwrlyoqk\.blogspot\.com
+https?:\/\/([^\/]*\.)?watchingthetube\.com
+https?:\/\/([^\/]*\.)?water\.toxhost\.com
+https?:\/\/([^\/]*\.)?waxen\.kwik\.to
+https?:\/\/([^\/]*\.)?wbun7\.szm\.sk
+https?:\/\/([^\/]*\.)?wc1\.worldcrossing\.com
+https?:\/\/([^\/]*\.)?we-alfred\.blogspot\.com
+https?:\/\/([^\/]*\.)?we-alondra\.blogspot\.com
+https?:\/\/([^\/]*\.)?we-lesbian-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?web\.missouri\.edu
+https?:\/\/([^\/]*\.)?web\.scc\.losrios\.edu
+https?:\/\/([^\/]*\.)?web\.skku\.edu
+https?:\/\/([^\/]*\.)?web55\.info
+https?:\/\/([^\/]*\.)?webhost11\.com
+https?:\/\/([^\/]*\.)?webhosting-x\.com
+https?:\/\/([^\/]*\.)?weblog\.xanga\.com
+https?:\/\/([^\/]*\.)?webmd-drugs\.com
+https?:\/\/([^\/]*\.)?websz\.com
+https?:\/\/([^\/]*\.)?wedding-knot\.com
+https?:\/\/([^\/]*\.)?weddingactions\.com
+https?:\/\/([^\/]*\.)?wedner\.info
+https?:\/\/([^\/]*\.)?weekly-pay\.com
+https?:\/\/([^\/]*\.)?weersa\.com
+https?:\/\/([^\/]*\.)?weight-loss\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?weixing\.hk\.cn
+https?:\/\/([^\/]*\.)?welisi\.hk
+https?:\/\/([^\/]*\.)?welivetogether-com-ek6boac\.blogspot\.com
+https?:\/\/([^\/]*\.)?welivetogether-com-oc7yzd4ev\.blogspot\.com
+https?:\/\/([^\/]*\.)?welivetogether-com-wcu8\.blogspot\.com
+https?:\/\/([^\/]*\.)?wellbutrin\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?wellbutrin\.php5\.cz
+https?:\/\/([^\/]*\.)?wenmasterworld\.com
+https?:\/\/([^\/]*\.)?werdq\.com
+https?:\/\/([^\/]*\.)?wess\.250free\.com
+https?:\/\/([^\/]*\.)?westvirginiamortgage-x\.com
+https?:\/\/([^\/]*\.)?wet-mature-slut\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?wet-pussy-cum-shot\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?wet-teen-panties-wen\.blogspot\.com
+https?:\/\/([^\/]*\.)?wetplace-com-g16jfp6\.blogspot\.com
+https?:\/\/([^\/]*\.)?wfkd3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wgxq2\.szm\.sk
+https?:\/\/([^\/]*\.)?whipped-ass-slut\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?whipsnorkel\.275mb\.com
+https?:\/\/([^\/]*\.)?white-guys-fucking-black-teen\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?whitehole\.republika\.pl
+https?:\/\/([^\/]*\.)?wholesale-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?whorevideos-com-hj8shgp\.blogspot\.com
+https?:\/\/([^\/]*\.)?whorevideos-com-wddx\.blogspot\.com
+https?:\/\/([^\/]*\.)?whorevideos-txe5g0x\.blogspot\.com
+https?:\/\/([^\/]*\.)?whpsjw1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?whss0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wierdporno-com-kur70yvrl0\.blogspot\.com
+https?:\/\/([^\/]*\.)?wifi-planet\.org
+https?:\/\/([^\/]*\.)?wiku-aikman\.blogspot\.com
+https?:\/\/([^\/]*\.)?wild-party-fuck\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?wild-poker\.com
+https?:\/\/([^\/]*\.)?willeyfordmazda\.info
+https?:\/\/([^\/]*\.)?win-for-italy\.info
+https?:\/\/([^\/]*\.)?wind\.8888mb\.com
+https?:\/\/([^\/]*\.)?winter-gossamer\.blogspot\.com
+https?:\/\/([^\/]*\.)?winter\.12gbfree\.com
+https?:\/\/([^\/]*\.)?wired-shemales\.lampa\.ipupdater\.com
+https?:\/\/([^\/]*\.)?wiremesh-guanda\.com
+https?:\/\/([^\/]*\.)?wisconsinmortgage-x\.com
+https?:\/\/([^\/]*\.)?wisdom123\.com
+https?:\/\/([^\/]*\.)?wisewomanguide\.com
+https?:\/\/([^\/]*\.)?wisnp\.szm\.sk
+https?:\/\/([^\/]*\.)?wix-timsmovies-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?wizingsh\.dl\.pl
+https?:\/\/([^\/]*\.)?wjch5\.szm\.sk
+https?:\/\/([^\/]*\.)?wjhh9\.szm\.sk
+https?:\/\/([^\/]*\.)?wjjk0\.szm\.sk
+https?:\/\/([^\/]*\.)?wjsueg-free-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?wkelleylucas\.com
+https?:\/\/([^\/]*\.)?wkfsi774k\.org
+https?:\/\/([^\/]*\.)?wljp9\.szm\.sk
+https?:\/\/([^\/]*\.)?wm-u\.com
+https?:\/\/([^\/]*\.)?wmis\.com\.cn
+https?:\/\/([^\/]*\.)?wmlpv\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wmtnd\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wnwr5\.szm\.sk
+https?:\/\/([^\/]*\.)?woilco6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wolflist-com-rkj7d3\.blogspot\.com
+https?:\/\/([^\/]*\.)?wolverine-steel-toe-work-boot\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?woman-masturbating-man\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?woman-who-can-lick-their-own-pussy\.gameover\.in\.ua
+https?:\/\/([^\/]*\.)?woman-who-fuck-donkey\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?woman-with-prosthetic-leg\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?womansmith\.com
+https?:\/\/([^\/]*\.)?women-fitness\.org
+https?:\/\/([^\/]*\.)?womens-hard-nipples\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?womens-snake-boot\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?woolygrrl\.blogspot\.com
+https?:\/\/([^\/]*\.)?worldsex-com-byzv1xjl\.blogspot\.com
+https?:\/\/([^\/]*\.)?worldsex-com-eqn4b\.blogspot\.com
+https?:\/\/([^\/]*\.)?worldtalktv\.net\.ru
+https?:\/\/([^\/]*\.)?worldufo\.net\.ru
+https?:\/\/([^\/]*\.)?worldwide-games\.net
+https?:\/\/([^\/]*\.)?worldwide-online-pharmacy\.net
+https?:\/\/([^\/]*\.)?worldwide-tramadol\.net
+https?:\/\/([^\/]*\.)?woro-adriana\.blogspot\.com
+https?:\/\/([^\/]*\.)?wot-smutgremlins-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?wow-gold\.dinmo\.cn
+https?:\/\/([^\/]*\.)?wow-powerleveling-wow\.com
+https?:\/\/([^\/]*\.)?wowgold\.org\.cn
+https?:\/\/([^\/]*\.)?wowtgp-com-ap4y\.blogspot\.com
+https?:\/\/([^\/]*\.)?wowvids-com-ooiofshz5\.blogspot\.com
+https?:\/\/([^\/]*\.)?woww0\.szm\.sk
+https?:\/\/([^\/]*\.)?wpgt1\.szm\.sk
+https?:\/\/([^\/]*\.)?wpnvjk9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wqhnog2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wqr\.cn
+https?:\/\/([^\/]*\.)?wrnf9\.szm\.sk
+https?:\/\/([^\/]*\.)?wshcroq\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wsuonline\.weber\.edu
+https?:\/\/([^\/]*\.)?wszqc\.szm\.sk
+https?:\/\/([^\/]*\.)?wtrpfpa\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wuconweb\.wustl\.edu
+https?:\/\/([^\/]*\.)?wujin\.dzsc\.com
+https?:\/\/([^\/]*\.)?wulzi\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wvuf0\.szm\.sk
+https?:\/\/([^\/]*\.)?wvwd6\.szm\.sk
+https?:\/\/([^\/]*\.)?wwfedgechristian\.com
+https?:\/\/([^\/]*\.)?wwlive\.info
+https?:\/\/([^\/]*\.)?wwtop\.info
+https?:\/\/([^\/]*\.)?www-girlygangbang-com\.magnesia\.dtdns\.net
+https?:\/\/([^\/]*\.)?www-loadmymouth-com\.klose\.ipupdater\.com
+https?:\/\/([^\/]*\.)?www-shemales-from-hell-com\.magnesia\.dtdns\.net
+https?:\/\/([^\/]*\.)?www\.aet\.cup\.edu
+https?:\/\/([^\/]*\.)?www\.ags\.uci\.edu
+https?:\/\/([^\/]*\.)?www\.chaco\.gov\.ar
+https?:\/\/([^\/]*\.)?www\.coe\.ohio-state\.edu
+https?:\/\/([^\/]*\.)?www\.csulb\.edu
+https?:\/\/([^\/]*\.)?www\.cucsur\.udg\.mx
+https?:\/\/([^\/]*\.)?www\.depts\.ttu\.edu
+https?:\/\/([^\/]*\.)?www\.elie\.com\.cn
+https?:\/\/([^\/]*\.)?www\.forourbano\.gov\.ar
+https?:\/\/([^\/]*\.)?www\.grad\.english\.ttu\.edu
+https?:\/\/([^\/]*\.)?www\.hcs\.harvard\.edu
+https?:\/\/([^\/]*\.)?www\.health-livening\.com
+https?:\/\/([^\/]*\.)?www\.imperial\.edu
+https?:\/\/([^\/]*\.)?www\.isis\.vanderbilt\.edu
+https?:\/\/([^\/]*\.)?www\.leal-alfa\.upc\.edu
+https?:\/\/([^\/]*\.)?www\.ns\.ui\.edu
+https?:\/\/([^\/]*\.)?www\.oswego\.edu
+https?:\/\/([^\/]*\.)?www\.oznet\.ksu\.edu
+https?:\/\/([^\/]*\.)?www\.polisci\.berkeley\.edu
+https?:\/\/([^\/]*\.)?www\.redwingnet\.com
+https?:\/\/([^\/]*\.)?www\.rit\.edu
+https?:\/\/([^\/]*\.)?www\.rso\.cmich\.edu
+https?:\/\/([^\/]*\.)?www\.sccs\.swarthmore\.edu
+https?:\/\/([^\/]*\.)?www\.sportsbackers\.org
+https?:\/\/([^\/]*\.)?www\.tamug\.edu
+https?:\/\/([^\/]*\.)?www\.ug\.it\.usyd\.edu\.au
+https?:\/\/([^\/]*\.)?www\.uky\.edu
+https?:\/\/([^\/]*\.)?www\.wvup\.edu
+https?:\/\/([^\/]*\.)?www1\.freehostingguru\.com
+https?:\/\/([^\/]*\.)?www2\.cs\.washington\.edu
+https?:\/\/([^\/]*\.)?www3\.ddns\.ms
+https?:\/\/([^\/]*\.)?www4\.epac\.to
+https?:\/\/([^\/]*\.)?www4\.nau\.edu
+https?:\/\/([^\/]*\.)?www4\.vjc\.edu
+https?:\/\/([^\/]*\.)?www6\.ezua\.com
+https?:\/\/([^\/]*\.)?www6\.ns1\.name
+https?:\/\/([^\/]*\.)?www69\.bestdeals\.at
+https?:\/\/([^\/]*\.)?www69\.byinter\.net
+https?:\/\/([^\/]*\.)?www69\.dynu\.com
+https?:\/\/([^\/]*\.)?www69\.findhere\.org
+https?:\/\/([^\/]*\.)?www69\.fw\.nu
+https?:\/\/([^\/]*\.)?www69\.ugly\.as
+https?:\/\/([^\/]*\.)?www7\.25u\.com
+https?:\/\/([^\/]*\.)?www7\.ygto\.com
+https?:\/\/([^\/]*\.)?www8\.ns01\.us
+https?:\/\/([^\/]*\.)?www9\.servequake\.com
+https?:\/\/([^\/]*\.)?www9\.trickip\.org
+https?:\/\/([^\/]*\.)?www99\.bounceme\.net
+https?:\/\/([^\/]*\.)?www99\.zapto\.org
+https?:\/\/([^\/]*\.)?wwweazol\.znamka\.yi\.org
+https?:\/\/([^\/]*\.)?wwwmenozac\.gumaky\.yi\.org
+https?:\/\/([^\/]*\.)?wwwpeterscumshotscom\.jalovica\.dtdns\.net
+https?:\/\/([^\/]*\.)?wwwpornweekcom\.lampa\.ipupdater\.com
+https?:\/\/([^\/]*\.)?wwwtheluckymancom\.hrable\.dtdns\.net
+https?:\/\/([^\/]*\.)?wxcl6\.szm\.sk
+https?:\/\/([^\/]*\.)?wxmbv\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?wxsbjx\.com
+https?:\/\/([^\/]*\.)?wxzgyb\.com
+https?:\/\/([^\/]*\.)?wy-ls\.com
+https?:\/\/([^\/]*\.)?wyeax\.szm\.sk
+https?:\/\/([^\/]*\.)?wyloguj\.php5\.cz
+https?:\/\/([^\/]*\.)?wyomingmortgage-x\.com
+https?:\/\/([^\/]*\.)?wywurxj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wzcub\.szm\.sk
+https?:\/\/([^\/]*\.)?wzhj\.com\.cn
+https?:\/\/([^\/]*\.)?wzhjom6\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?wzlsx\.com
+https?:\/\/([^\/]*\.)?x-cialis\.be
+https?:\/\/([^\/]*\.)?x-ho-com-m23lsy\.blogspot\.com
+https?:\/\/([^\/]*\.)?x-ho-com-mlk2tai422\.blogspot\.com
+https?:\/\/([^\/]*\.)?x-orgy-com-in7nn0o1\.blogspot\.com
+https?:\/\/([^\/]*\.)?x24\.xxuz\.com
+https?:\/\/([^\/]*\.)?x25\.2mydns\.com
+https?:\/\/([^\/]*\.)?x25\.plorp\.com
+https?:\/\/([^\/]*\.)?x4\.lov3\.net
+https?:\/\/([^\/]*\.)?x6x\.a\.la
+https?:\/\/([^\/]*\.)?x888x\.myserver\.org
+https?:\/\/([^\/]*\.)?x8x\.trickip\.net
+https?:\/\/([^\/]*\.)?xadultpersonals\.com
+https?:\/\/([^\/]*\.)?xafengyuan\.com
+https?:\/\/([^\/]*\.)?xaltc\.szm\.sk
+https?:\/\/([^\/]*\.)?xanax-911\.coz\.in
+https?:\/\/([^\/]*\.)?xanax-acpq\.blogspot\.com
+https?:\/\/([^\/]*\.)?xanax-ccc\.blogspot\.com
+https?:\/\/([^\/]*\.)?xanax-lyiy\.blogspot\.com
+https?:\/\/([^\/]*\.)?xanax-online\.cheapills\.info
+https?:\/\/([^\/]*\.)?xanax\.esguay\.com
+https?:\/\/([^\/]*\.)?xanax\.goodpharm\.info
+https?:\/\/([^\/]*\.)?xanax\.skocz\.net
+https?:\/\/([^\/]*\.)?xanax\.su\.pl
+https?:\/\/([^\/]*\.)?xanaxnx\.u\.yuku\.com
+https?:\/\/([^\/]*\.)?xawcj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xboct13\.blogspot\.com
+https?:\/\/([^\/]*\.)?xbyzkngo-teensite\.blogspot\.com
+https?:\/\/([^\/]*\.)?xcp\.51mp4mp3\.com
+https?:\/\/([^\/]*\.)?xd-fw\.com
+https?:\/\/([^\/]*\.)?xdwxs\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xdzs\.com\.cn
+https?:\/\/([^\/]*\.)?xef-publicinvasion-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?xejedot-sophie-marceau-c\.blogspot\.com
+https?:\/\/([^\/]*\.)?xelby0\.blogspot\.com
+https?:\/\/([^\/]*\.)?xenical\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?xenical\.1k\.pl
+https?:\/\/([^\/]*\.)?xenicallem\.queroumforum\.com
+https?:\/\/([^\/]*\.)?xfdr7\.szm\.sk
+https?:\/\/([^\/]*\.)?xfokcw0\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xgdlfj\.com
+https?:\/\/([^\/]*\.)?xhttp\.net
+https?:\/\/([^\/]*\.)?xian-hua\.nease\.net
+https?:\/\/([^\/]*\.)?xiangyujipiao\.com
+https?:\/\/([^\/]*\.)?xibch\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xih-snakesworld-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?xih-topless-babes-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?xihdl\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xionny\.cn
+https?:\/\/([^\/]*\.)?xitokiry\.blogspot\.com
+https?:\/\/([^\/]*\.)?xiwhr\.szm\.sk
+https?:\/\/([^\/]*\.)?xjenhx\.blogspot\.com
+https?:\/\/([^\/]*\.)?xlala\.com
+https?:\/\/([^\/]*\.)?xlale\.com
+https?:\/\/([^\/]*\.)?xlalu\.com
+https?:\/\/([^\/]*\.)?xlvc3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xlxx-com-i0xeru\.blogspot\.com
+https?:\/\/([^\/]*\.)?xlxx-fokiq\.blogspot\.com
+https?:\/\/([^\/]*\.)?xlxx-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?xmail\.net
+https?:\/\/([^\/]*\.)?xmodem-mal\.blogspot\.com
+https?:\/\/([^\/]*\.)?xnbs1\.szm\.sk
+https?:\/\/([^\/]*\.)?xnews\.soad\.umich\.edu
+https?:\/\/([^\/]*\.)?xnxx-com-e06t\.blogspot\.com
+https?:\/\/([^\/]*\.)?xnxx-crcdfs0jy6\.blogspot\.com
+https?:\/\/([^\/]*\.)?xnxxmovies-com-bv10g2\.blogspot\.com
+https?:\/\/([^\/]*\.)?xnxxmovies-com-wv\.blogspot\.com
+https?:\/\/([^\/]*\.)?xo-whatever\.blogspot\.com
+https?:\/\/([^\/]*\.)?xolz4\.szm\.sk
+https?:\/\/([^\/]*\.)?xometi\.com
+https?:\/\/([^\/]*\.)?xonlinedating\.com
+https?:\/\/([^\/]*\.)?xoomer\.alice\.it
+https?:\/\/([^\/]*\.)?xparamacy\.org
+https?:\/\/([^\/]*\.)?xpharmacy\.org
+https?:\/\/([^\/]*\.)?xqnqh\.szm\.sk
+https?:\/\/([^\/]*\.)?xr\.bz
+https?:\/\/([^\/]*\.)?xsecrets-com-kyms\.blogspot\.com
+https?:\/\/([^\/]*\.)?xsgr7\.szm\.sk
+https?:\/\/([^\/]*\.)?xshorturl\.info
+https?:\/\/([^\/]*\.)?xsyvh\.szm\.sk
+https?:\/\/([^\/]*\.)?xt168\.com
+https?:\/\/([^\/]*\.)?xudo-akira\.blogspot\.com
+https?:\/\/([^\/]*\.)?xujwy\.szm\.sk
+https?:\/\/([^\/]*\.)?xun-screwedupmovies-com\.blogspot\.com
+https?:\/\/([^\/]*\.)?xvbbols\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?xvec\.com
+https?:\/\/([^\/]*\.)?xvnj5\.szm\.sk
+https?:\/\/([^\/]*\.)?xwsdr\.szm\.sk
+https?:\/\/([^\/]*\.)?xxellaxx\.250free\.com
+https?:\/\/([^\/]*\.)?xxhk2\.szm\.sk
+https?:\/\/([^\/]*\.)?xxlmovies-com-gswie\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxlmovies-com-m7rg0g8viu\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxlmovies-mcorb4\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxufdm-free-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxx-mature-movie-gallery\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?xxx-pic-blonde\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?xxx-porn-clip-blogn0y\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxx0movie\.info
+https?:\/\/([^\/]*\.)?xxx1adult1video\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxx1clip\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxx1movie\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxx1video\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxdessert-com-rl7e3\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxfolder-com-h3126\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxkey-com-ma\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxlost\.info
+https?:\/\/([^\/]*\.)?xxxphenterm1nen0w\.tripod\.com
+https?:\/\/([^\/]*\.)?xxxpornstarclassics-com-cezx51lw8\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxpornstarclassics-com-d2ttwy\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxpower-net-aped3c1xa\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxproposal-com-b06etpw\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxvogue-hux\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxvogue-net-oe2t1p081c\.blogspot\.com
+https?:\/\/([^\/]*\.)?xxxvogue-net-qerij\.blogspot\.com
+https?:\/\/([^\/]*\.)?xyz-i2\.blogspot\.com
+https?:\/\/([^\/]*\.)?xyzzy-k7c37b5tuw\.blogspot\.com
+https?:\/\/([^\/]*\.)?xzc\.org\.ua
+https?:\/\/([^\/]*\.)?xzgang-bangorgy\.hav\.pl
+https?:\/\/([^\/]*\.)?xznylonlycra\.hav\.pl
+https?:\/\/([^\/]*\.)?xzrapeextreme\.hav\.pl
+https?:\/\/([^\/]*\.)?xzzoodogsex\.hav\.pl
+https?:\/\/([^\/]*\.)?y--e--s\.com
+https?:\/\/([^\/]*\.)?ya\.ru
+https?:\/\/([^\/]*\.)?yaahoeu\.com
+https?:\/\/([^\/]*\.)?yaco-hbkklx6ltp\.blogspot\.com
+https?:\/\/([^\/]*\.)?yahia-g3x\.blogspot\.com
+https?:\/\/([^\/]*\.)?yaho-rei6\.blogspot\.com
+https?:\/\/([^\/]*\.)?yahoochat-w11g7\.blogspot\.com
+https?:\/\/([^\/]*\.)?yale-eui5rgcu\.blogspot\.com
+https?:\/\/([^\/]*\.)?yamaha-scooter\.hotmail\.ru
+https?:\/\/([^\/]*\.)?yamaha-t46nzou\.blogspot\.com
+https?:\/\/([^\/]*\.)?yamaha2scooter\.chat\.ru
+https?:\/\/([^\/]*\.)?yamel-da\.blogspot\.com
+https?:\/\/([^\/]*\.)?yamil-c1n2ob52\.blogspot\.com
+https?:\/\/([^\/]*\.)?yamonee-bqcyojq\.blogspot\.com
+https?:\/\/([^\/]*\.)?yang-as\.blogspot\.com
+https?:\/\/([^\/]*\.)?yankees-o3\.blogspot\.com
+https?:\/\/([^\/]*\.)?yasashisa\.blogspot\.com
+https?:\/\/([^\/]*\.)?yashun-i63\.blogspot\.com
+https?:\/\/([^\/]*\.)?yasin-kfn0g\.blogspot\.com
+https?:\/\/([^\/]*\.)?yaskap\.com
+https?:\/\/([^\/]*\.)?yasmin-hovn5q\.blogspot\.com
+https?:\/\/([^\/]*\.)?yasmin\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?yazar-rnzt\.blogspot\.com
+https?:\/\/([^\/]*\.)?yblwoh-free-video\.blogspot\.com
+https?:\/\/([^\/]*\.)?ycft3\.szm\.sk
+https?:\/\/([^\/]*\.)?ycixxgt\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ycsv1\.szm\.sk
+https?:\/\/([^\/]*\.)?ydyofrj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ydyp\.left-web\.com
+https?:\/\/([^\/]*\.)?ydyp\.zxvo\.com
+https?:\/\/([^\/]*\.)?yehuo\.cn
+https?:\/\/([^\/]*\.)?yell0w-n1njaman\.blogspot\.com
+https?:\/\/([^\/]*\.)?yellow-wc4pxnc\.blogspot\.com
+https?:\/\/([^\/]*\.)?yellowstone-e4b\.blogspot\.com
+https?:\/\/([^\/]*\.)?yes-t2cfk28\.blogspot\.com
+https?:\/\/([^\/]*\.)?yesenia-dip5700iq\.blogspot\.com
+https?:\/\/([^\/]*\.)?yessenia-c0ue443\.blogspot\.com
+https?:\/\/([^\/]*\.)?yetbarek-b31fe\.blogspot\.com
+https?:\/\/([^\/]*\.)?yfojo\.szm\.sk
+https?:\/\/([^\/]*\.)?yfxy2\.szm\.sk
+https?:\/\/([^\/]*\.)?yhmh\.vip\.myrice\.com
+https?:\/\/([^\/]*\.)?yi-gan\.com
+https?:\/\/([^\/]*\.)?yicloqd\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?yiqiyibiao\.dzsc\.com
+https?:\/\/([^\/]*\.)?yisroel-a5dk2rzyvx\.blogspot\.com
+https?:\/\/([^\/]*\.)?yjyvm\.szm\.sk
+https?:\/\/([^\/]*\.)?ymaby\.info
+https?:\/\/([^\/]*\.)?yncharm\.com
+https?:\/\/([^\/]*\.)?ynij1\.szm\.sk
+https?:\/\/([^\/]*\.)?ynkbb\.szm\.sk
+https?:\/\/([^\/]*\.)?ynndy\.szm\.sk
+https?:\/\/([^\/]*\.)?ynztp\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?yoda-oz08ueg\.blogspot\.com
+https?:\/\/([^\/]*\.)?yoel-mu5ej\.blogspot\.com
+https?:\/\/([^\/]*\.)?yogee\.info
+https?:\/\/([^\/]*\.)?yojany-iu3bpg2\.blogspot\.com
+https?:\/\/([^\/]*\.)?yolanda-k1\.blogspot\.com
+https?:\/\/([^\/]*\.)?yomama-hmsa\.blogspot\.com
+https?:\/\/([^\/]*\.)?yongxun\.net
+https?:\/\/([^\/]*\.)?yosemite-gf77c0ggp\.blogspot\.com
+https?:\/\/([^\/]*\.)?yoshi-in-black\.blogspot\.com
+https?:\/\/([^\/]*\.)?yosuke-r8aua1\.blogspot\.com
+https?:\/\/([^\/]*\.)?young-anal-fuck\.travel-ag\.od\.ua
+https?:\/\/([^\/]*\.)?young-anal-sex\.travel-ag\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?young-blonde-slut\.medved\.uzhgorod\.ua
+https?:\/\/([^\/]*\.)?young-britney\.babubi\.net
+https?:\/\/([^\/]*\.)?young-cheerleader-pic\.medved\.od\.ua
+https?:\/\/([^\/]*\.)?young-chubby-pussy\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?young-ffm\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?young-lesbian-having-sex\.protime\.in\.ua
+https?:\/\/([^\/]*\.)?young-sex\.futureblog\.org
+https?:\/\/([^\/]*\.)?young-teen-girl-anal\.aroundworld\.in\.ua
+https?:\/\/([^\/]*\.)?young-tender\.info
+https?:\/\/([^\/]*\.)?young-wqn\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngerbabes-com-d1fem\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngerbabes-com-dpdc\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngerbabes-freesite\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngleafs-eh2a6kcze\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngpervs-com-wdh\.blogspot\.com
+https?:\/\/([^\/]*\.)?youngshemalesex\.com
+https?:\/\/([^\/]*\.)?your-online-health\.com
+https?:\/\/([^\/]*\.)?your-starry-sky\.blogspot\.com
+https?:\/\/([^\/]*\.)?yourbudgetcar\.info
+https?:\/\/([^\/]*\.)?yourbusinesshouston\.info
+https?:\/\/([^\/]*\.)?yourchryslersebring\.info
+https?:\/\/([^\/]*\.)?yourgunter\.com
+https?:\/\/([^\/]*\.)?yourhealthypharmacy\.com
+https?:\/\/([^\/]*\.)?yourlust-com-rttu8a0a\.blogspot\.com
+https?:\/\/([^\/]*\.)?yourmazdacar\.info
+https?:\/\/([^\/]*\.)?yourmerchandise\.org
+https?:\/\/([^\/]*\.)?yourofe\.com
+https?:\/\/([^\/]*\.)?yrada\.flnet\.org
+https?:\/\/([^\/]*\.)?yrecnfz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?yrgs2\.szm\.sk
+https?:\/\/([^\/]*\.)?yronc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ysvc0\.szm\.sk
+https?:\/\/([^\/]*\.)?ytdebao\.com
+https?:\/\/([^\/]*\.)?ytgf84j\.nokedem\.com
+https?:\/\/([^\/]*\.)?ythsq\.com
+https?:\/\/([^\/]*\.)?ytifexil\.org
+https?:\/\/([^\/]*\.)?ytlmc\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ytwoqlj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?yucaibooks\.com
+https?:\/\/([^\/]*\.)?yuebing\.com
+https?:\/\/([^\/]*\.)?yume-taira\.blogspot\.com
+https?:\/\/([^\/]*\.)?yuniel-ebyd5\.blogspot\.com
+https?:\/\/([^\/]*\.)?yunmak\.com
+https?:\/\/([^\/]*\.)?yushantang\.com
+https?:\/\/([^\/]*\.)?yvette-tshq577\.blogspot\.com
+https?:\/\/([^\/]*\.)?yvonte-dyv02l\.blogspot\.com
+https?:\/\/([^\/]*\.)?yvpwh\.szm\.sk
+https?:\/\/([^\/]*\.)?ywnid\.szm\.sk
+https?:\/\/([^\/]*\.)?ywuyuan\.com
+https?:\/\/([^\/]*\.)?ywxjm\.com
+https?:\/\/([^\/]*\.)?yycp\.com
+https?:\/\/([^\/]*\.)?yylive\.info
+https?:\/\/([^\/]*\.)?yyys\.com\.cn
+https?:\/\/([^\/]*\.)?z411\.net
+https?:\/\/([^\/]*\.)?za\.spamim\.net
+https?:\/\/([^\/]*\.)?zabavna9sy4ka\.biografi\.org
+https?:\/\/([^\/]*\.)?zaccary-ciworog\.blogspot\.com
+https?:\/\/([^\/]*\.)?zachariah-bebg88d2x\.blogspot\.com
+https?:\/\/([^\/]*\.)?zacharias-a0kmh1em7\.blogspot\.com
+https?:\/\/([^\/]*\.)?zacharygen-okno4540\.blogspot\.com
+https?:\/\/([^\/]*\.)?zacherie-m82qs0617\.blogspot\.com
+https?:\/\/([^\/]*\.)?zack-ir368\.blogspot\.com
+https?:\/\/([^\/]*\.)?zackari-kkcdz8\.blogspot\.com
+https?:\/\/([^\/]*\.)?zackarylee-h4qu\.blogspot\.com
+https?:\/\/([^\/]*\.)?zackerize-ge\.blogspot\.com
+https?:\/\/([^\/]*\.)?zahtavia-riy3\.blogspot\.com
+https?:\/\/([^\/]*\.)?zaid-wi0g\.blogspot\.com
+https?:\/\/([^\/]*\.)?zaidimar-ej\.blogspot\.com
+https?:\/\/([^\/]*\.)?zainab-t46we0w3y\.blogspot\.com
+https?:\/\/([^\/]*\.)?zakaria-c5j57crpj7\.blogspot\.com
+https?:\/\/([^\/]*\.)?zanaflex\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?zanuda-juja\.blogspot\.com
+https?:\/\/([^\/]*\.)?zap-ar2fzu\.blogspot\.com
+https?:\/\/([^\/]*\.)?zara-oze5dt\.blogspot\.com
+https?:\/\/([^\/]*\.)?zarat\.php5\.cz
+https?:\/\/([^\/]*\.)?zatowana-m5hsah3h\.blogspot\.com
+https?:\/\/([^\/]*\.)?zaxswq\.com
+https?:\/\/([^\/]*\.)?zayfa\.com
+https?:\/\/([^\/]*\.)?zazu-ikzc0402\.blogspot\.com
+https?:\/\/([^\/]*\.)?zbbi8\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?zbifhoep\.t35\.com
+https?:\/\/([^\/]*\.)?zbjyzm1\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zbrown\.org
+https?:\/\/([^\/]*\.)?zbwk\.com
+https?:\/\/([^\/]*\.)?zcld\.net
+https?:\/\/([^\/]*\.)?zdei\.nokedem\.com
+https?:\/\/([^\/]*\.)?zdpid\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?ze-sex-video-download\.blogspot\.com
+https?:\/\/([^\/]*\.)?zebbiejohnson\.blogspot\.com
+https?:\/\/([^\/]*\.)?zebra-ka8g\.blogspot\.com
+https?:\/\/([^\/]*\.)?zebutal\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?zeds\.info
+https?:\/\/([^\/]*\.)?zeku-airhead\.blogspot\.com
+https?:\/\/([^\/]*\.)?zelalal\.darkbb\.com
+https?:\/\/([^\/]*\.)?zelalli\.blogcu\.com
+https?:\/\/([^\/]*\.)?zelbasleto\.heavenforum\.com
+https?:\/\/([^\/]*\.)?zeldomric\.dl\.pl
+https?:\/\/([^\/]*\.)?zelekah-h5u4yo\.blogspot\.com
+https?:\/\/([^\/]*\.)?zella\.grafbb\.com
+https?:\/\/([^\/]*\.)?zelladar\.bb-fr\.com
+https?:\/\/([^\/]*\.)?zellapask\.lolbb\.com
+https?:\/\/([^\/]*\.)?zelpasacel\.dl\.pl
+https?:\/\/([^\/]*\.)?zelrelacel\.su\.pl
+https?:\/\/([^\/]*\.)?zelrelli\.zj\.pl
+https?:\/\/([^\/]*\.)?zelrelzel\.blogcu\.com
+https?:\/\/([^\/]*\.)?zelrictr\.lolforum\.net
+https?:\/\/([^\/]*\.)?zelvaracel\.zikforum\.com
+https?:\/\/([^\/]*\.)?zelviacel\.frbb\.net
+https?:\/\/([^\/]*\.)?zelvicat\.fr-bb\.com
+https?:\/\/([^\/]*\.)?zemiacik\.yi\.org
+https?:\/\/([^\/]*\.)?zena-grmhf3shi\.blogspot\.com
+https?:\/\/([^\/]*\.)?zenaidalee-rm0p6t8md\.blogspot\.com
+https?:\/\/([^\/]*\.)?zenda-wszf1\.blogspot\.com
+https?:\/\/([^\/]*\.)?zennie-ey5i633f\.blogspot\.com
+https?:\/\/([^\/]*\.)?zenw7\.szm\.sk
+https?:\/\/([^\/]*\.)?zephyr-tk1\.blogspot\.com
+https?:\/\/([^\/]*\.)?zepporah-dypvn5g3\.blogspot\.com
+https?:\/\/([^\/]*\.)?zerks\.info
+https?:\/\/([^\/]*\.)?zfbfbs9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zfkmaei\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zghy2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zgzr\.com
+https?:\/\/([^\/]*\.)?zhenrong\.com\.cn
+https?:\/\/([^\/]*\.)?zhihehotel\.com
+https?:\/\/([^\/]*\.)?zhiju\.home4u\.china\.com
+https?:\/\/([^\/]*\.)?zhkaw\.com
+https?:\/\/([^\/]*\.)?zhkuj\.fr33webhost\.com
+https?:\/\/([^\/]*\.)?zhopaitalii\.info
+https?:\/\/([^\/]*\.)?zhuxg\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zhw35iida\.org
+https?:\/\/([^\/]*\.)?ziahya-cbqb\.blogspot\.com
+https?:\/\/([^\/]*\.)?zimg4\.szm\.sk
+https?:\/\/([^\/]*\.)?zimmerman-a4shi\.blogspot\.com
+https?:\/\/([^\/]*\.)?zippedurl\.com
+https?:\/\/([^\/]*\.)?zisai\.com\.cn
+https?:\/\/([^\/]*\.)?ziseq-sex-movie-x\.blogspot\.com
+https?:\/\/([^\/]*\.)?zithromaxbuycheap\.drive\.to
+https?:\/\/([^\/]*\.)?zithromaxbuygeneric\.cut\.by
+https?:\/\/([^\/]*\.)?zithromaxcheap\.drive\.to
+https?:\/\/([^\/]*\.)?zithromaxgenericbuy\.drive\.to
+https?:\/\/([^\/]*\.)?zithromaxgenericcheap\.dive\.to
+https?:\/\/([^\/]*\.)?zithromaxxonline\.ovp\.pl
+https?:\/\/([^\/]*\.)?zivuc-free-sex-movie-l\.blogspot\.com
+https?:\/\/([^\/]*\.)?zjeyu\.com
+https?:\/\/([^\/]*\.)?zjpgxo4\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zjudeyah-m2r38d\.blogspot\.com
+https?:\/\/([^\/]*\.)?zjww\.com
+https?:\/\/([^\/]*\.)?zlid3\.szm\.sk
+https?:\/\/([^\/]*\.)?zljekr8\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zlocztw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zmga3\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zmodem-isjrjd\.blogspot\.com
+https?:\/\/([^\/]*\.)?zocor\.bad-food\.net
+https?:\/\/([^\/]*\.)?zocor\.barnkalas\.net
+https?:\/\/([^\/]*\.)?zocor\.blomberg\.nu
+https?:\/\/([^\/]*\.)?zocor\.bokmarke\.nu
+https?:\/\/([^\/]*\.)?zocor\.bredbandsfabriken\.nu
+https?:\/\/([^\/]*\.)?zocor\.center\.nu
+https?:\/\/([^\/]*\.)?zocor\.hellstrom\.nu
+https?:\/\/([^\/]*\.)?zocor\.hem\.nu
+https?:\/\/([^\/]*\.)?zocor\.infosajt\.net
+https?:\/\/([^\/]*\.)?zocor\.internetreklam\.nu
+https?:\/\/([^\/]*\.)?zocor\.jacobson\.nu
+https?:\/\/([^\/]*\.)?zoe-ktd\.blogspot\.com
+https?:\/\/([^\/]*\.)?zofarl\.com
+https?:\/\/([^\/]*\.)?zofia-hkn\.blogspot\.com
+https?:\/\/([^\/]*\.)?zoie-g2h02z5mta\.blogspot\.com
+https?:\/\/([^\/]*\.)?zoklaku\.forumculture\.net
+https?:\/\/([^\/]*\.)?zoklapec\.dynamicbb\.com
+https?:\/\/([^\/]*\.)?zoloft\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?zoloft\.1k\.pl
+https?:\/\/([^\/]*\.)?zoloft\.skocz\.net
+https?:\/\/([^\/]*\.)?zombie-r7ye\.blogspot\.com
+https?:\/\/([^\/]*\.)?zovirax\.esdemasiado\.com
+https?:\/\/([^\/]*\.)?zovirax\.inicioya\.com
+https?:\/\/([^\/]*\.)?zovirax\.ole\.to
+https?:\/\/([^\/]*\.)?zovirax\.redireccion\.com
+https?:\/\/([^\/]*\.)?zoya-w1tebgqbtr\.blogspot\.com
+https?:\/\/([^\/]*\.)?zpbvsng\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zpco4\.szm\.sk
+https?:\/\/([^\/]*\.)?zpykbi9\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zqit6\.szm\.sk
+https?:\/\/([^\/]*\.)?zqxss\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zsbupdo\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zswok\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zsxqgv2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ztauk\.szm\.sk
+https?:\/\/([^\/]*\.)?ztkvz\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ztlztpj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?ztnqok7\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zuleima-epbxv\.blogspot\.com
+https?:\/\/([^\/]*\.)?zulema-tsaieb\.blogspot\.com
+https?:\/\/([^\/]*\.)?zulmarie-dk8\.blogspot\.com
+https?:\/\/([^\/]*\.)?zuri-ch0\.blogspot\.com
+https?:\/\/([^\/]*\.)?zurysarai-bykp\.blogspot\.com
+https?:\/\/([^\/]*\.)?zusette-ai2\.blogspot\.com
+https?:\/\/([^\/]*\.)?zvcqr\.szm\.sk
+https?:\/\/([^\/]*\.)?zvnaw\.szm\.sk
+https?:\/\/([^\/]*\.)?zvoh2\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zvzsxqw\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zxtpets\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zya9\.info
+https?:\/\/([^\/]*\.)?zyban\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?zyban\.controlando\.com
+https?:\/\/([^\/]*\.)?zybans\.blogspot\.com
+https?:\/\/([^\/]*\.)?zyrtec\.1\.p2l\.info
+https?:\/\/([^\/]*\.)?zyrtec\.1k\.pl
+https?:\/\/([^\/]*\.)?zyrtec\.coz\.in
+https?:\/\/([^\/]*\.)?zywyn\.info
+https?:\/\/([^\/]*\.)?zzcwj\.myfreewebhost\.org
+https?:\/\/([^\/]*\.)?zzdx\.com
diff --git a/mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist b/mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist
new file mode 100644
index 000000000..a49138fcb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist
@@ -0,0 +1,5 @@
+personal_ws-1.1 en 4 utf-8
+DokuWiki
+Wiki
+WikiWiki
+Gohr
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/_dummy
new file mode 100644
index 000000000..37ed18a63
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/_dummy
@@ -0,0 +1 @@
+data directory
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/index/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/index/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ 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/mod/dokuwiki/vendors/dokuwiki/data/media/wiki/dokuwiki-128.png b/mod/dokuwiki/vendors/dokuwiki/data/media/wiki/dokuwiki-128.png
new file mode 100644
index 000000000..b2306ac95
--- /dev/null
+++ 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/mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt
new file mode 100644
index 000000000..a2274bda4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt
@@ -0,0 +1 @@
+====== PlayGround ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt
new file mode 100644
index 000000000..090a66349
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt
@@ -0,0 +1,2 @@
+{{indexmenu>..#1|js#thread navbar}}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt
new file mode 100644
index 000000000..2cede366f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt
@@ -0,0 +1,66 @@
+[[http://www.dokuwiki.org/es:dokuwiki|es]] [[http://www.dokuwiki.org/ca:dokuwiki|ca]] [[http://www.dokuwiki.org/fr:dokuwiki|fr]] [[http://www.dokuwiki.org/dokuwiki|more]]
+
+====== DokuWiki ======
+
+[[doku>wiki:dokuwiki|{{wiki:dokuwiki-128.png }}]] DokuWiki is a standards compliant, simple to use [[wp>Wiki]], mainly aimed at creating documentation of any kind. It is targeted at developer teams, workgroups and small companies. It has a simple but powerful [[wiki:syntax]] which makes sure the datafiles remain readable outside the Wiki and eases the creation of structured texts. All data is stored in plain text files -- no database is required.
+
+Read the [[doku>manual|DokuWiki Manual]] to unleash the full power of DokuWiki.
+
+===== Download =====
+
+DokuWiki is available at http://www.splitbrain.org/go/dokuwiki
+
+
+===== Read More =====
+
+All documentation and additional information besides the [[syntax|syntax description]] is maintained in the DokuWiki at [[doku>|www.dokuwiki.org]].
+
+**About DokuWiki**
+
+ * [[doku>features|A feature list]] :!:
+ * [[doku>users|Happy Users]]
+ * [[doku>press|Who wrote about it]]
+ * [[doku>blogroll|What Bloggers think]]
+ * [[http://www.wikimatrix.org/show/DokuWiki|Compare it with other wiki software]]
+
+**Installing DokuWiki**
+
+ * [[doku>requirements|System Requirements]]
+ * [[http://www.splitbrain.org/go/dokuwiki|Download DokuWiki]] :!:
+ * [[doku>changes|Change Log]]
+ * [[doku>Install|How to install or upgrade]] :!:
+ * [[doku>config|Configuration]]
+
+**Using DokuWiki**
+
+ * [[doku>syntax|Wiki Syntax]]
+ * [[doku>manual|The manual]] :!:
+ * [[doku>FAQ|Frequently Asked Questions (FAQ)]]
+ * [[doku>glossary|Glossary]]
+ * [[http://search.dokuwiki.org|Search for DokuWiki help and documentation]]
+
+**Customizing DokuWiki**
+
+ * [[doku>tips|Tips and Tricks]]
+ * [[doku>Template|How to create and use templates]]
+ * [[doku>plugins|Installing plugins]]
+ * [[doku>development|Development Resources]]
+
+**DokuWiki Feedback and Community**
+
+ * [[doku>newsletter|Subscribe to the newsletter]] :!:
+ * [[doku>mailinglist|Join the mailing list]]
+ * [[http://forum.dokuwiki.org|Check out the user forum]]
+ * [[doku>irc|Talk to other users in the IRC channel]]
+ * [[http://bugs.splitbrain.org/index.php?project=1|Submit bugs and feature wishes]]
+ * [[http://www.wikimatrix.org/forum/viewforum.php?id=10|Share your experiences in the WikiMatrix forum]]
+ * [[doku>thanks|Some humble thanks]]
+
+
+===== Copyright =====
+
+2004-2009 (c) Andreas Gohr <andi@splitbrain.org>((Please do not contact me for help and support -- use the [[doku>mailinglist]] or [[http://forum.dokuwiki.org|forum]] instead))
+
+The DokuWiki engine is licensed under [[http://www.gnu.org/licenses/gpl.html|GNU General Public License]] Version 2. If you use DokuWiki in your company, consider [[doku>donate|donating]] a few bucks ;-).
+
+Not sure what this means? See the [[doku>faq:license|FAQ on the Licenses]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt
new file mode 100644
index 000000000..7dad453db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt
@@ -0,0 +1,488 @@
+[[http://www.dokuwiki.org/es:syntax|es]] [[http://www.dokuwiki.org/ca:syntax|ca]] [[http://www.dokuwiki.org/fr:syntax|fr]] [[http://www.dokuwiki.org/syntax|more]]
+
+====== Formatting Syntax ======
+
+[[doku>DokuWiki]] supports some simple markup language, which tries to make the datafiles to be as readable as possible. This page contains all possible syntax you may use when editing the pages. Simply have a look at the source of this page by pressing the //Edit this page// button at the top or bottom of the page. If you want to try something, just use the [[playground:playground|playground]] page. The simpler markup is easily accessible via [[doku>toolbar|quickbuttons]], too.
+
+===== Basic Text Formatting =====
+
+DokuWiki supports **bold**, //italic//, __underlined__ and ''monospaced'' texts. Of course you can **__//''combine''//__** all these.
+
+ DokuWiki supports **bold**, //italic//, __underlined__ and ''monospaced'' texts.
+ Of course you can **__//''combine''//__** all these.
+
+You can use <sub>subscript</sub> and <sup>superscript</sup>, too.
+
+ You can use <sub>subscript</sub> and <sup>superscript</sup>, too.
+
+You can mark something as <del>deleted</del> as well.
+
+ You can mark something as <del>deleted</del> as well.
+
+**Paragraphs** are created from blank lines. If you want to **force a newline** without a paragraph, you can use two backslashes followed by a whitespace or the end of line.
+
+This is some text with some linebreaks\\ Note that the
+two backslashes are only recognized at the end of a line\\
+or followed by\\ a whitespace \\this happens without it.
+
+ This is some text with some linebreaks\\ Note that the
+ two backslashes are only recognized at the end of a line\\
+ or followed by\\ a whitespace \\this happens without it.
+
+You should use forced newlines only if really needed.
+
+===== Links =====
+
+DokuWiki supports multiple ways of creating links.
+
+==== External ====
+
+External links are recognized automagically: http://www.google.com or simply www.google.com - You can set the link text as well: [[http://www.google.com|This Link points to google]]. Email addresses like this one: <andi@splitbrain.org> are recognized, too.
+
+ DokuWiki supports multiple ways of creating links. External links are recognized
+ automagically: http://www.google.com or simply www.google.com - You can set
+ link text as well: [[http://www.google.com|This Link points to google]]. Email
+ addresses like this one: <andi@splitbrain.org> are recognized, too.
+
+==== Internal ====
+
+Internal links are created by using square brackets. You can either just give a [[pagename]] or use an additional [[pagename|link text]].
+
+ Internal links are created by using square brackets. You can either just give
+ a [[pagename]] or use an additional [[pagename|link text]].
+
+[[doku>pagename|Wiki pagenames]] are converted to lowercase automatically, special characters are not allowed.
+
+You can use [[some:namespaces]] by using a colon in the pagename.
+
+ You can use [[some:namespaces]] by using a colon in the pagename.
+
+For details about namespaces see [[doku>namespaces]].
+
+Linking to a specific section is possible, too. Just add the section name behind a hash character as known from HTML. This links to [[syntax#internal|this Section]].
+
+ This links to [[syntax#internal|this Section]].
+
+Notes:
+
+ * Links to [[syntax|existing pages]] are shown in a different style from [[nonexisting]] ones.
+ * DokuWiki does not use [[wp>CamelCase]] to automatically create links by default, but this behavior can be enabled in the [[doku>config]] file. Hint: If DokuWiki is a link, then it's enabled.
+ * When a section's heading is changed, its bookmark changes, too. So don't rely on section linking too much.
+
+==== Interwiki ====
+
+DokuWiki supports [[doku>Interwiki]] links. These are quick links to other Wikis. For example this is a link to Wikipedia's page about Wikis: [[wp>Wiki]].
+
+ DokuWiki supports [[doku>Interwiki]] links. These are quick links to other Wikis.
+ For example this is a link to Wikipedia's page about Wikis: [[wp>Wiki]].
+
+
+==== Windows Shares ====
+
+Windows shares like [[\\server\share|this]] are recognized, too. Please note that these only make sense in a homogeneous user group like a corporate [[wp>Intranet]].
+
+ Windows Shares like [[\\server\share|this]] are recognized, too.
+
+Notes:
+
+ * For security reasons direct browsing of windows shares only works in Microsoft Internet Explorer per default (and only in the "local zone").
+ * For Mozilla and Firefox it can be enabled through different workaround mentioned in the [[http://kb.mozillazine.org/Links_to_local_pages_don't_work|Mozilla Knowledge Base]].
+
+
+==== Image Links ====
+
+You can also use an image to link to another internal or external page by combining the syntax for links and [[#images_and_other_files|images]] (see below) like this:
+
+ [[http://www.php.net|{{wiki:dokuwiki-128.png}}]]
+
+[[http://www.php.net|{{wiki:dokuwiki-128.png}}]]
+
+Please note: The image formatting is the only formatting syntax accepted in link names.
+
+The whole [[#images_and_other_files|image]] and [[#links|link]] syntax is supported (including image resizing, internal and external images and URLs and interwiki links).
+
+===== Footnotes =====
+
+You can add footnotes ((This is a footnote)) by using double parentheses.
+
+ You can add footnotes ((This is a footnote)) by using double parentheses.
+
+===== Sectioning =====
+
+You can use up to five different levels of headlines to structure your content. If you have more than three headlines, a table of contents is generated automatically -- this can be disabled by including the string ''<nowiki>~~NOTOC~~</nowiki>'' in the document.
+
+==== Headline Level 3 ====
+=== Headline Level 4 ===
+== Headline Level 5 ==
+
+ ==== Headline Level 3 ====
+ === Headline Level 4 ===
+ == Headline Level 5 ==
+
+By using four or more dashes, you can make a horizontal line:
+
+----
+
+===== Images and Other Files =====
+
+You can include external and internal [[doku>images]] with curly brackets. Optionally you can specify the size of them.
+
+Real size: {{wiki:dokuwiki-128.png}}
+
+Resize to given width: {{wiki:dokuwiki-128.png?50}}
+
+Resize to given width and height((when the aspect ratio of the given width and height doesn't match that of the image, it will be cropped to the new ratio before resizing)): {{wiki:dokuwiki-128.png?200x50}}
+
+Resized external image: {{http://de3.php.net/images/php.gif?200x50}}
+
+ Real size: {{wiki:dokuwiki-128.png}}
+ Resize to given width: {{wiki:dokuwiki-128.png?50}}
+ Resize to given width and height: {{wiki:dokuwiki-128.png?200x50}}
+ Resized external image: {{http://de3.php.net/images/php.gif?200x50}}
+
+
+By using left or right whitespaces you can choose the alignment.
+
+{{ wiki:dokuwiki-128.png}}
+
+{{wiki:dokuwiki-128.png }}
+
+{{ wiki:dokuwiki-128.png }}
+
+ {{ wiki:dokuwiki-128.png}}
+ {{wiki:dokuwiki-128.png }}
+ {{ wiki:dokuwiki-128.png }}
+
+Of course, you can add a title (displayed as a tooltip by most browsers), too.
+
+{{ wiki:dokuwiki-128.png |This is the caption}}
+
+ {{ wiki:dokuwiki-128.png |This is the caption}}
+
+If you specify a filename (external or internal) that is not an image (''gif, jpeg, png''), then it will be displayed as a link instead.
+
+For linking an image to another page see [[#Image Links]] above.
+
+===== Lists =====
+
+Dokuwiki supports ordered and unordered lists. To create a list item, indent your text by two spaces and use a ''*'' for unordered lists or a ''-'' for ordered ones.
+
+ * This is a list
+ * The second item
+ * You may have different levels
+ * Another item
+
+ - The same list but ordered
+ - Another item
+ - Just use indention for deeper levels
+ - That's it
+
+<code>
+ * This is a list
+ * The second item
+ * You may have different levels
+ * Another item
+
+ - The same list but ordered
+ - Another item
+ - Just use indention for deeper levels
+ - That's it
+</code>
+
+Also take a look at the [[doku>faq:lists|FAQ on list items]].
+
+===== Text Conversions =====
+
+DokuWiki can convert certain pre-defined characters or strings into images or other text or HTML.
+
+The text to image conversion is mainly done for smileys. And the text to HTML conversion is used for typography replacements, but can be configured to use other HTML as well.
+
+==== Text to Image Conversions ====
+
+DokuWiki converts commonly used [[wp>emoticon]]s to their graphical equivalents. Those [[doku>Smileys]] and other images can be configured and extended. Here is an overview of Smileys included in DokuWiki:
+
+ * 8-) %% 8-) %%
+ * 8-O %% 8-O %%
+ * :-( %% :-( %%
+ * :-) %% :-) %%
+ * =) %% =) %%
+ * :-/ %% :-/ %%
+ * :-\ %% :-\ %%
+ * :-? %% :-? %%
+ * :-D %% :-D %%
+ * :-P %% :-P %%
+ * :-O %% :-O %%
+ * :-X %% :-X %%
+ * :-| %% :-| %%
+ * ;-) %% ;-) %%
+ * ^_^ %% ^_^ %%
+ * :?: %% :?: %%
+ * :!: %% :!: %%
+ * LOL %% LOL %%
+ * FIXME %% FIXME %%
+ * DELETEME %% DELETEME %%
+
+==== Text to HTML Conversions ====
+
+Typography: [[DokuWiki]] can convert simple text characters to their typographically correct entities. Here is an example of recognized characters.
+
+-> <- <-> => <= <=> >> << -- --- 640x480 (c) (tm) (r)
+"He thought 'It's a man's world'..."
+
+<code>
+-> <- <-> => <= <=> >> << -- --- 640x480 (c) (tm) (r)
+"He thought 'It's a man's world'..."
+</code>
+
+The same can be done to produce any kind of HTML, it just needs to be added to the [[doku>entities|pattern file]].
+
+There are three exceptions which do not come from that pattern file: multiplication entity (640x480), 'single' and "double quotes". They can be turned off through a [[doku>config:typography|config option]].
+
+===== Quoting =====
+
+Some times you want to mark some text to show it's a reply or comment. You can use the following syntax:
+
+ I think we should do it
+
+ > No we shouldn't
+
+ >> Well, I say we should
+
+ > Really?
+
+ >> Yes!
+
+ >>> Then lets do it!
+
+I think we should do it
+
+> No we shouldn't
+
+>> Well, I say we should
+
+> Really?
+
+>> Yes!
+
+>>> Then lets do it!
+
+===== Tables =====
+
+DokuWiki supports a simple syntax to create tables.
+
+^ Heading 1 ^ Heading 2 ^ Heading 3 ^
+| Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+| Row 2 Col 1 | some colspan (note the double pipe) ||
+| Row 3 Col 1 | Row 3 Col 2 | Row 3 Col 3 |
+
+Table rows have to start and end with a ''|'' for normal rows or a ''^'' for headers.
+
+ ^ Heading 1 ^ Heading 2 ^ Heading 3 ^
+ | Row 1 Col 1 | Row 1 Col 2 | Row 1 Col 3 |
+ | Row 2 Col 1 | some colspan (note the double pipe) ||
+ | Row 3 Col 1 | Row 3 Col 2 | Row 3 Col 3 |
+
+To connect cells horizontally, just make the next cell completely empty as shown above. Be sure to have always the same amount of cell separators!
+
+Vertical tableheaders are possible, too.
+
+| ^ Heading 1 ^ Heading 2 ^
+^ Heading 3 | Row 1 Col 2 | Row 1 Col 3 |
+^ Heading 4 | no colspan this time | |
+^ Heading 5 | Row 2 Col 2 | Row 2 Col 3 |
+
+As you can see, it's the cell separator before a cell which decides about the formatting:
+
+ | ^ Heading 1 ^ Heading 2 ^
+ ^ Heading 3 | Row 1 Col 2 | Row 1 Col 3 |
+ ^ Heading 4 | no colspan this time | |
+ ^ Heading 5 | Row 2 Col 2 | Row 2 Col 3 |
+
+You can have rowspans (vertically connected cells) by adding '':::'' into the cells below the one to which they should connect.
+
+^ Heading 1 ^ Heading 2 ^ Heading 3 ^
+| Row 1 Col 1 | this cell spans vertically | Row 1 Col 3 |
+| Row 2 Col 1 | ::: | Row 2 Col 3 |
+| Row 3 Col 1 | ::: | Row 2 Col 3 |
+
+Apart from the rowspan syntax those cells should not contain anything else.
+
+ ^ Heading 1 ^ Heading 2 ^ Heading 3 ^
+ | Row 1 Col 1 | this cell spans vertically | Row 1 Col 3 |
+ | Row 2 Col 1 | ::: | Row 2 Col 3 |
+ | Row 3 Col 1 | ::: | Row 2 Col 3 |
+
+You can align the table contents, too. Just add at least two whitespaces at the opposite end of your text: Add two spaces on the left to align right, two spaces on the right to align left and two spaces at least at both ends for centered text.
+
+^ Table with alignment ^^^
+| right| center |left |
+|left | right| center |
+| xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx |
+
+This is how it looks in the source:
+
+ ^ Table with alignment ^^^
+ | right| center |left |
+ |left | right| center |
+ | xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx |
+
+Note: Vertical alignment is not supported.
+
+===== No Formatting =====
+
+If you need to display text exactly like it is typed (without any formatting), enclose the area either with ''%%<nowiki>%%'' tags or even simpler, with double percent signs ''<nowiki>%%</nowiki>''.
+
+<nowiki>
+This is some text which contains addresses like this: http://www.splitbrain.org and **formatting**, but nothing is done with it.
+</nowiki>
+The same is true for %%//__this__ text// with a smiley ;-)%%.
+
+ <nowiki>
+ This is some text which contains addresses like this: http://www.splitbrain.org and **formatting**, but nothing is done with it.
+ </nowiki>
+ The same is true for %%//__this__ text// with a smiley ;-)%%.
+
+===== Code Blocks =====
+
+You can include code blocks into your documents by either indenting them by at least two spaces (like used for the previous examples) or by using the tags ''%%<code>%%'' or ''%%<file>%%''.
+
+ This is text is indented by two spaces.
+
+<code>
+This is preformatted code all spaces are preserved: like <-this
+</code>
+
+<file>
+This is pretty much the same, but you could use it to show that you quoted a file.
+</file>
+
+Those blocks were created by this source:
+
+ This is text is indented by two spaces.
+
+ <code>
+ This is preformatted code all spaces are preserved: like <-this
+ </code>
+
+ <file>
+ This is pretty much the same, but you could use it to show that you quoted a file.
+ </file>
+
+==== Syntax Highlighting ====
+
+[[wiki:DokuWiki]] can highlight sourcecode, which makes it easier to read. It uses the [[http://qbnz.com/highlighter/|GeSHi]] Generic Syntax Highlighter -- so any language supported by GeSHi is supported. The syntax is the same like in the code and file blocks in the previous section, but this time the name of the used language is inserted inside the tag. Eg. ''<nowiki><code java></nowiki>'' or ''<nowiki><file java></nowiki>''.
+
+<code java>
+/**
+ * The HelloWorldApp class implements an application that
+ * simply displays "Hello World!" to the standard output.
+ */
+class HelloWorldApp {
+ public static void main(String[] args) {
+ System.out.println("Hello World!"); //Display the string.
+ }
+}
+</code>
+
+The following language strings are currently recognized: //abap, actionscript-french, actionscript, actionscript3, ada, apache, applescript, asm, asp, autoit, avisynth, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_mac, caddcl, cadlisp, cfdg, cfm, cil, cmake, cobol, cpp, cpp-qt, csharp, css, d, dcs, delphi, diff, div, dos, dot, eiffel, email, erlang, fo, fortran, freebasic, genero, glsl, gml, gnuplot, groovy, gettext, haskell, hq9plus, html, idl, ini, inno, intercal, io, java5, java, javascript, kixtart, klonec, klonecpp, latex, lisp, locobasic, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, make, matlab, mirc, modula3, mpasm, mxml, mysql, nsis, oberon2, objc, ocaml-brief, ocaml, oobas, oracle8, oracle11, pascal, perl, per, php-brief, php, pic16, pixelbender, plsql, povray, powershell, progress, prolog, properties, providex, python, qbasic, rails, rebol, reg, robots, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, sql, tcl, teraterm, text, thinbasic, tsql, typoscript, vbnet, vb, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, winbatch, whois, xml, xorg_conf, xpp, z80//
+
+==== Downloadable Code Blocks ====
+
+When you use the ''%%<code>%%'' or ''%%<file>%%'' syntax as above, you might want to make the shown code available for download as well. You can to this by specifying a file name after language code like this:
+
+<code>
+<file php myexample.php>
+<?php echo "hello world!"; ?>
+</file>
+</code>
+
+<file php myexample.php>
+<?php echo "hello world!"; ?>
+</file>
+
+If you don't want any highlighting but want a downloadable file, specify a dash (''-'') as the language code: ''%%<code - myfile.foo>%%''.
+
+
+===== Embedding HTML and PHP =====
+
+You can embed raw HTML or PHP code into your documents by using the ''%%<html>%%'' or ''%%<php>%%'' tags. (Use uppercase tags if you need to enclose block level elements.)
+
+HTML example:
+
+<code>
+<html>
+This is some <span style="color:red;font-size:150%;">inline HTML</span>
+</html>
+<HTML>
+<p style="border:2px dashed red;">And this is some block HTML</p>
+</HTML>
+</code>
+
+<html>
+This is some <span style="color:red;font-size:150%;">inline HTML</span>
+</html>
+<HTML>
+<p style="border:2px dashed red;">And this is some block HTML</p>
+</HTML>
+
+PHP example:
+
+<code>
+<php>
+echo 'A logo generated by PHP:';
+echo '<img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" />';
+echo '(generated inline HTML)';
+</php>
+<PHP>
+echo '<table class="inline"><tr><td>The same, but inside a block level element:</td>';
+echo '<td><img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" /></td>';
+echo '</tr></table>';
+</PHP>
+</code>
+
+<php>
+echo 'A logo generated by PHP:';
+echo '<img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" />';
+echo '(inline HTML)';
+</php>
+<PHP>
+echo '<table class="inline"><tr><td>The same, but inside a block level element:</td>';
+echo '<td><img src="' . $_SERVER['PHP_SELF'] . '?=' . php_logo_guid() . '" alt="PHP Logo !" /></td>';
+echo '</tr></table>';
+</PHP>
+
+**Please Note**: HTML and PHP embedding is disabled by default in the configuration. If disabled, the code is displayed instead of executed.
+
+===== RSS/ATOM Feed Aggregation =====
+[[DokuWiki]] can integrate data from external XML feeds. For parsing the XML feeds, [[http://simplepie.org/|SimplePie]] is used. All formats understood by SimplePie can be used in DokuWiki as well. You can influence the rendering by multiple additional space separated parameters:
+
+^ Parameter ^ Description ^
+| any number | will be used as maximum number items to show, defaults to 8 |
+| reverse | display the last items in the feed first |
+| author | show item authors names |
+| date | show item dates |
+| description| show the item description. If [[doku>config:htmlok|HTML]] is disabled all tags will be stripped |
+| //n//[dhm] | refresh period, where d=days, h=hours, m=minutes. (e.g. 12h = 12 hours). |
+
+The refresh period defaults to 4 hours. Any value below 10 minutes will be treated as 10 minutes. [[wiki:DokuWiki]] will generally try to supply a cached version of a page, obviously this is inappropriate when the page contains dynamic external content. The parameter tells [[wiki:DokuWiki]] to re-render the page if it is more than //refresh period// since the page was last rendered.
+
+**Example:**
+
+ {{rss>http://slashdot.org/index.rss 5 author date 1h }}
+
+{{rss>http://slashdot.org/index.rss 5 author date 1h }}
+
+
+===== Control Macros =====
+
+Some syntax influences how DokuWiki renders a page without creating any output it self. The following control macros are availble:
+
+^ Macro ^ Description |
+| %%~~NOTOC~~%% | If this macro is found on the page, no table of contents will be created |
+| %%~~NOCACHE~~%% | DokuWiki caches all output by default. Sometimes this might not be wanted (eg. when the %%<php>%% syntax above is used), adding this macro will force DokuWiki to rerender a page on every call |
+
+===== Syntax Plugins =====
+
+DokuWiki's syntax can be extended by [[doku>plugins|Plugins]]. How the installed plugins are used is described on their appropriate description pages. The following syntax plugins are available in this particular DokuWiki installation:
+
+~~INFO:syntaxplugins~~
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/mod/dokuwiki/vendors/dokuwiki/doku.php b/mod/dokuwiki/vendors/dokuwiki/doku.php
new file mode 100644
index 000000000..5566577f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/doku.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * DokuWiki mainscript
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// xdebug_start_profiling();
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/');
+global $ACT;
+global $conf;
+
+if (isset($_SERVER['HTTP_X_DOKUWIKI_DO'])){
+ $ACT = trim(strtolower($_SERVER['HTTP_X_DOKUWIKI_DO']));
+} elseif (!empty($IDX)) {
+ $ACT = 'index';
+} elseif (get_input('do')) {
+ $ACT = get_input('do');
+} else {
+ $ACT = 'show';
+}
+
+global $QUERY;
+global $ID;
+global $NS;
+global $REV;
+global $IDX;
+global $DATE;
+global $RANGE;
+global $HIGH;
+global $TEXT;
+global $PRE;
+global $SUF;
+global $SUM;
+global $REV;
+global $INFO;
+global $JSINFO;
+
+
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/events.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/html.php');
+require_once(DOKU_INC.'inc/auth.php');
+require_once(DOKU_INC.'inc/actions.php');
+
+//import variables
+$QUERY = trim(get_input('id'));
+$ID = getID();
+$NS = getNS($ID);
+$REV = get_input('rev');
+$IDX = get_input('idx');
+$DATE = get_input('date');
+$RANGE = get_input('lines');
+$HIGH = get_input('s');
+if(empty($HIGH)) $HIGH = getGoogleQuery();
+
+$TEXT = cleanText($_POST['wikitext']);
+$PRE = cleanText($_POST['prefix']);
+$SUF = cleanText($_POST['suffix']);
+$SUM = get_input('summary');
+
+//sanitize revision
+$REV = preg_replace('/[^0-9]/','',$REV);
+
+//make infos about the selected page available
+$INFO = pageinfo();
+
+//export minimal infos to JS, plugins can add more
+$JSINFO['id'] = $ID;
+$JSINFO['namespace'] = (string) $INFO['namespace'];
+
+
+// handle debugging
+if($conf['allowdebug'] && $ACT == 'debug'){
+ html_debug();
+ exit;
+}
+
+//send 404 for missing pages if configured or ID has special meaning to bots
+if(!$INFO['exists'] &&
+ ($conf['send404'] || preg_match('/^(robots\.txt|sitemap\.xml(\.gz)?|favicon\.ico|crossdomain\.xml)$/',$ID)) &&
+ ($ACT == 'show' || substr($ACT,0,7) == 'export_') ){
+ header('HTTP/1.0 404 Not Found');
+}
+
+//prepare breadcrumbs (initialize a static var)
+if ($conf['breadcrumbs']) breadcrumbs();
+
+// check upstream
+checkUpdateMessages();
+
+$tmp = array(); // No event data
+trigger_event('DOKUWIKI_STARTED',$tmp);
+
+//close session
+session_write_close();
+
+//do the work
+act_dispatch($ACT);
+
+$tmp = array(); // No event data
+trigger_event('DOKUWIKI_DONE', $tmp);
+
+// xdebug_dump_function_profile(1);
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/feed.php b/mod/dokuwiki/vendors/dokuwiki/feed.php
new file mode 100644
index 000000000..e7ea5808c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/feed.php
@@ -0,0 +1,353 @@
+<?php
+/**
+ * XML feed export
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/events.php');
+require_once(DOKU_INC.'inc/parserutils.php');
+require_once(DOKU_INC.'inc/feedcreator.class.php');
+require_once(DOKU_INC.'inc/auth.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/httputils.php');
+
+//close session
+session_write_close();
+
+// get params
+$opt = rss_parseOptions();
+
+// the feed is dynamic - we need a cache for each combo
+// (but most people just use the default feed so it's still effective)
+$cache = getCacheName(join('',array_values($opt)).$_SERVER['REMOTE_USER'],'.feed');
+$key = join('', array_values($opt)) . $_SERVER['REMOTE_USER'];
+$cache = new cache($key, '.feed');
+
+// prepare cache depends
+$depends['files'] = getConfigFiles('main');
+$depends['age'] = $conf['rss_update'];
+$depends['purge'] = ($_REQUEST['purge']) ? true : false;
+
+// check cacheage and deliver if nothing has changed since last
+// time or the update interval has not passed, also handles conditional requests
+header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
+header('Pragma: public');
+header('Content-Type: application/xml; charset=utf-8');
+header('X-Robots-Tag: noindex');
+if($cache->useCache($depends)) {
+ http_conditionalRequest($cache->_time);
+ if($conf['allowdebug']) header("X-CacheUsed: $cache->cache");
+ print $cache->retrieveCache();
+ exit;
+} else {
+ http_conditionalRequest(time());
+ }
+
+// create new feed
+$rss = new DokuWikiFeedCreator();
+$rss->title = $conf['title'].(($opt['namespace']) ? ' '.$opt['namespace'] : '');
+$rss->link = DOKU_URL;
+$rss->syndicationURL = DOKU_URL.'feed.php';
+$rss->cssStyleSheet = DOKU_URL.'lib/exe/css.php?s=feed';
+
+$image = new FeedImage();
+$image->title = $conf['title'];
+$image->url = DOKU_URL."lib/images/favicon.ico";
+$image->link = DOKU_URL;
+$rss->image = $image;
+
+$data = null;
+if($opt['feed_mode'] == 'list'){
+ $data = rssListNamespace($opt);
+}elseif($opt['feed_mode'] == 'search'){
+ $data = rssSearch($opt);
+}else{
+ $eventData = array(
+ 'opt' => &$opt,
+ 'data' => &$data,
+ );
+ $event = new Doku_Event('FEED_MODE_UNKNOWN', $eventData);
+ if ($event->advise_before(true)) {
+ $data = rssRecentChanges($opt);
+ }
+ $event->advise_after();
+}
+
+rss_buildItems($rss, $data, $opt);
+$feed = $rss->createFeed($opt['feed_type'],'utf-8');
+
+// save cachefile
+$cache->storeCache($feed);
+
+// finally deliver
+print $feed;
+
+// ---------------------------------------------------------------- //
+
+/**
+ * Get URL parameters and config options and return a initialized option array
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rss_parseOptions(){
+ global $conf;
+
+ $opt['items'] = (int) $_REQUEST['num'];
+ $opt['feed_type'] = $_REQUEST['type'];
+ $opt['feed_mode'] = $_REQUEST['mode'];
+ $opt['show_minor'] = $_REQUEST['minor'];
+ $opt['namespace'] = $_REQUEST['ns'];
+ $opt['link_to'] = $_REQUEST['linkto'];
+ $opt['item_content'] = $_REQUEST['content'];
+ $opt['search_query'] = $_REQUEST['q'];
+
+ if(!$opt['feed_type']) $opt['feed_type'] = $conf['rss_type'];
+ if(!$opt['item_content']) $opt['item_content'] = $conf['rss_content'];
+ if(!$opt['link_to']) $opt['link_to'] = $conf['rss_linkto'];
+ if(!$opt['items']) $opt['items'] = $conf['recent'];
+ $opt['guardmail'] = ($conf['mailguard'] != '' && $conf['mailguard'] != 'none');
+
+ switch ($opt['feed_type']){
+ case 'rss':
+ $opt['feed_type'] = 'RSS0.91';
+ $opt['mime_type'] = 'text/xml';
+ break;
+ case 'rss2':
+ $opt['feed_type'] = 'RSS2.0';
+ $opt['mime_type'] = 'text/xml';
+ break;
+ case 'atom':
+ $opt['feed_type'] = 'ATOM0.3';
+ $opt['mime_type'] = 'application/xml';
+ break;
+ case 'atom1':
+ $opt['feed_type'] = 'ATOM1.0';
+ $opt['mime_type'] = 'application/atom+xml';
+ break;
+ default:
+ $opt['feed_type'] = 'RSS1.0';
+ $opt['mime_type'] = 'application/xml';
+ }
+
+ $eventData = array(
+ 'opt' => &$opt,
+ );
+ trigger_event('FEED_OPTS_POSTPROCESS', $eventData);
+ return $opt;
+}
+
+/**
+ * Add recent changed pages to a feed object
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param object $rss - the FeedCreator Object
+ * @param array $data - the items to add
+ * @param array $opt - the feed options
+ */
+function rss_buildItems(&$rss,&$data,$opt){
+ global $conf;
+ global $lang;
+ global $auth;
+
+ $eventData = array(
+ 'rss' => &$rss,
+ 'data' => &$data,
+ 'opt' => &$opt,
+ );
+ $event = new Doku_Event('FEED_DATA_PROCESS', $eventData);
+ if ($event->advise_before(false)){
+ foreach($data as $ditem){
+ if(!is_array($ditem)){
+ // not an array? then only a list of IDs was given
+ $ditem = array( 'id' => $ditem );
+ }
+
+ $item = new FeedItem();
+ $id = $ditem['id'];
+ $meta = p_get_metadata($id);
+
+ // add date
+ if($ditem['date']){
+ $date = $ditem['date'];
+ }elseif($meta['date']['modified']){
+ $date = $meta['date']['modified'];
+ }else{
+ $date = @filemtime(wikiFN($id));
+ }
+ if($date) $item->date = date('r',$date);
+
+ // add title
+ if($conf['useheading'] && $meta['title']){
+ $item->title = $meta['title'];
+ }else{
+ $item->title = $ditem['id'];
+ }
+ if($conf['rss_show_summary'] && !empty($ditem['sum'])){
+ $item->title .= ' - '.strip_tags($ditem['sum']);
+ }
+
+ // add item link
+ switch ($opt['link_to']){
+ case 'page':
+ $item->link = wl($id,'rev='.$date,true,'&');
+ break;
+ case 'rev':
+ $item->link = wl($id,'do=revisions&rev='.$date,true,'&');
+ break;
+ case 'current':
+ $item->link = wl($id, '', true,'&');
+ break;
+ case 'diff':
+ default:
+ $item->link = wl($id,'rev='.$date.'&do=diff',true,'&');
+ }
+
+ // add item content
+ switch ($opt['item_content']){
+ case 'diff':
+ case 'htmldiff':
+ require_once(DOKU_INC.'inc/DifferenceEngine.php');
+ $revs = getRevisions($id, 0, 1);
+ $rev = $revs[0];
+
+ if($rev){
+ $df = new Diff(explode("\n",htmlspecialchars(rawWiki($id,$rev))),
+ explode("\n",htmlspecialchars(rawWiki($id,''))));
+ }else{
+ $df = new Diff(array(''),
+ explode("\n",htmlspecialchars(rawWiki($id,''))));
+ }
+
+ if($opt['item_content'] == 'htmldiff'){
+ $tdf = new TableDiffFormatter();
+ $content = '<table>';
+ $content .= '<tr><th colspan="2" width="50%">'.$rev.'</th>';
+ $content .= '<th colspan="2" width="50%">'.$lang['current'].'</th></tr>';
+ $content .= $tdf->format($df);
+ $content .= '</table>';
+ }else{
+ $udf = new UnifiedDiffFormatter();
+ $content = "<pre>\n".$udf->format($df)."\n</pre>";
+ }
+ break;
+ case 'html':
+ $content = p_wiki_xhtml($id,$date,false);
+ // no TOC in feeds
+ $content = preg_replace('/(<!-- TOC START -->).*(<!-- TOC END -->)/s','',$content);
+
+ // make URLs work when canonical is not set, regexp instead of rerendering!
+ if(!$conf['canonical']){
+ $base = preg_quote(DOKU_REL,'/');
+ $content = preg_replace('/(<a href|<img src)="('.$base.')/s','$1="'.DOKU_URL,$content);
+ }
+
+ break;
+ case 'abstract':
+ default:
+ $content = $meta['description']['abstract'];
+ }
+ $item->description = $content; //FIXME a plugin hook here could be senseful
+
+ // add user
+ # FIXME should the user be pulled from metadata as well?
+ $user = null;
+ $user = @$ditem['user']; // the @ spares time repeating lookup
+ $item->author = '';
+ if($user && $conf['useacl'] && $auth){
+ $userInfo = $auth->getUserData($user);
+ $item->author = $userInfo['name'];
+ if($userInfo && !$opt['guardmail']){
+ $item->authorEmail = $userInfo['mail'];
+ }else{
+ //cannot obfuscate because some RSS readers may check validity
+ $item->authorEmail = $user.'@'.$ditem['ip'];
+ }
+ }elseif($user){
+ // this happens when no ACL but some Apache auth is used
+ $item->author = $user;
+ $item->authorEmail = $user.'@'.$ditem['ip'];
+ }else{
+ $item->authorEmail = 'anonymous@'.$ditem['ip'];
+ }
+
+ // add category
+ if($meta['subject']){
+ $item->category = $meta['subject'];
+ }else{
+ $cat = getNS($id);
+ if($cat) $item->category = $cat;
+ }
+
+ // finally add the item to the feed object, after handing it to registered plugins
+ $evdata = array('item' => &$item,
+ 'opt' => &$opt,
+ 'ditem' => &$ditem,
+ 'rss' => &$rss);
+ $evt = new Doku_Event('FEED_ITEM_ADD', $evdata);
+ if ($evt->advise_before()){
+ $rss->addItem($item);
+ }
+ $evt->advise_after(); // for completeness
+ }
+ }
+ $event->advise_after();
+}
+
+
+/**
+ * Add recent changed pages to the feed object
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rssRecentChanges($opt){
+ global $conf;
+ global $auth;
+
+ $flags = RECENTS_SKIP_DELETED;
+ if(!$opt['show_minor']) $flags += RECENTS_SKIP_MINORS;
+
+ $recents = getRecents(0,$opt['items'],$opt['namespace'],$flags);
+ return $recents;
+}
+
+/**
+ * Add all pages of a namespace to the feed object
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rssListNamespace($opt){
+ require_once(DOKU_INC.'inc/search.php');
+ global $conf;
+
+ $ns=':'.cleanID($opt['namespace']);
+ $ns=str_replace(':','/',$ns);
+
+ $data = array();
+ sort($data);
+ search($data,$conf['datadir'],'search_list','',$ns);
+
+ return $data;
+}
+
+/**
+ * Add the result of a full text search to the feed object
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rssSearch($opt){
+ if(!$opt['search_query']) return;
+
+ require_once(DOKU_INC.'inc/fulltext.php');
+ $data = array();
+ $data = ft_pageSearch($opt['search_query'],$poswords);
+ $data = array_keys($data);
+
+ return $data;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php b/mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php
new file mode 100644
index 000000000..e28826c1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php
@@ -0,0 +1,1066 @@
+<?php
+/**
+ * A PHP diff engine for phpwiki. (Taken from phpwiki-1.3.3)
+ *
+ * Additions by Axel Boldt for MediaWiki
+ *
+ * @copyright (C) 2000, 2001 Geoffrey T. Dairiki <dairiki@dairiki.org>
+ * @license You may copy this code freely under the conditions of the GPL.
+ */
+define('USE_ASSERTS', function_exists('assert'));
+
+class _DiffOp {
+ var $type;
+ var $orig;
+ var $closing;
+
+ function reverse() {
+ trigger_error("pure virtual", E_USER_ERROR);
+ }
+
+ function norig() {
+ return $this->orig ? sizeof($this->orig) : 0;
+ }
+
+ function nclosing() {
+ return $this->closing ? sizeof($this->closing) : 0;
+ }
+}
+
+class _DiffOp_Copy extends _DiffOp {
+ var $type = 'copy';
+
+ function _DiffOp_Copy ($orig, $closing = false) {
+ if (!is_array($closing))
+ $closing = $orig;
+ $this->orig = $orig;
+ $this->closing = $closing;
+ }
+
+ function reverse() {
+ return new _DiffOp_Copy($this->closing, $this->orig);
+ }
+}
+
+class _DiffOp_Delete extends _DiffOp {
+ var $type = 'delete';
+
+ function _DiffOp_Delete ($lines) {
+ $this->orig = $lines;
+ $this->closing = false;
+ }
+
+ function reverse() {
+ return new _DiffOp_Add($this->orig);
+ }
+}
+
+class _DiffOp_Add extends _DiffOp {
+ var $type = 'add';
+
+ function _DiffOp_Add ($lines) {
+ $this->closing = $lines;
+ $this->orig = false;
+ }
+
+ function reverse() {
+ return new _DiffOp_Delete($this->closing);
+ }
+}
+
+class _DiffOp_Change extends _DiffOp {
+ var $type = 'change';
+
+ function _DiffOp_Change ($orig, $closing) {
+ $this->orig = $orig;
+ $this->closing = $closing;
+ }
+
+ function reverse() {
+ return new _DiffOp_Change($this->closing, $this->orig);
+ }
+}
+
+
+/**
+ * Class used internally by Diff to actually compute the diffs.
+ *
+ * The algorithm used here is mostly lifted from the perl module
+ * Algorithm::Diff (version 1.06) by Ned Konz, which is available at:
+ * http://www.perl.com/CPAN/authors/id/N/NE/NEDKONZ/Algorithm-Diff-1.06.zip
+ *
+ * More ideas are taken from:
+ * http://www.ics.uci.edu/~eppstein/161/960229.html
+ *
+ * Some ideas are (and a bit of code) are from from analyze.c, from GNU
+ * diffutils-2.7, which can be found at:
+ * ftp://gnudist.gnu.org/pub/gnu/diffutils/diffutils-2.7.tar.gz
+ *
+ * closingly, some ideas (subdivision by NCHUNKS > 2, and some optimizations)
+ * are my own.
+ *
+ * @author Geoffrey T. Dairiki
+ * @access private
+ */
+class _DiffEngine
+{
+ function diff ($from_lines, $to_lines) {
+ $n_from = sizeof($from_lines);
+ $n_to = sizeof($to_lines);
+
+ $this->xchanged = $this->ychanged = array();
+ $this->xv = $this->yv = array();
+ $this->xind = $this->yind = array();
+ unset($this->seq);
+ unset($this->in_seq);
+ unset($this->lcs);
+
+ // Skip leading common lines.
+ for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
+ if ($from_lines[$skip] != $to_lines[$skip])
+ break;
+ $this->xchanged[$skip] = $this->ychanged[$skip] = false;
+ }
+ // Skip trailing common lines.
+ $xi = $n_from; $yi = $n_to;
+ for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
+ if ($from_lines[$xi] != $to_lines[$yi])
+ break;
+ $this->xchanged[$xi] = $this->ychanged[$yi] = false;
+ }
+
+ // Ignore lines which do not exist in both files.
+ for ($xi = $skip; $xi < $n_from - $endskip; $xi++)
+ $xhash[$from_lines[$xi]] = 1;
+ for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
+ $line = $to_lines[$yi];
+ if ( ($this->ychanged[$yi] = empty($xhash[$line])) )
+ continue;
+ $yhash[$line] = 1;
+ $this->yv[] = $line;
+ $this->yind[] = $yi;
+ }
+ for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
+ $line = $from_lines[$xi];
+ if ( ($this->xchanged[$xi] = empty($yhash[$line])) )
+ continue;
+ $this->xv[] = $line;
+ $this->xind[] = $xi;
+ }
+
+ // Find the LCS.
+ $this->_compareseq(0, sizeof($this->xv), 0, sizeof($this->yv));
+
+ // Merge edits when possible
+ $this->_shift_boundaries($from_lines, $this->xchanged, $this->ychanged);
+ $this->_shift_boundaries($to_lines, $this->ychanged, $this->xchanged);
+
+ // Compute the edit operations.
+ $edits = array();
+ $xi = $yi = 0;
+ while ($xi < $n_from || $yi < $n_to) {
+ USE_ASSERTS && assert($yi < $n_to || $this->xchanged[$xi]);
+ USE_ASSERTS && assert($xi < $n_from || $this->ychanged[$yi]);
+
+ // Skip matching "snake".
+ $copy = array();
+ while ( $xi < $n_from && $yi < $n_to
+ && !$this->xchanged[$xi] && !$this->ychanged[$yi]) {
+ $copy[] = $from_lines[$xi++];
+ ++$yi;
+ }
+ if ($copy)
+ $edits[] = new _DiffOp_Copy($copy);
+
+ // Find deletes & adds.
+ $delete = array();
+ while ($xi < $n_from && $this->xchanged[$xi])
+ $delete[] = $from_lines[$xi++];
+
+ $add = array();
+ while ($yi < $n_to && $this->ychanged[$yi])
+ $add[] = $to_lines[$yi++];
+
+ if ($delete && $add)
+ $edits[] = new _DiffOp_Change($delete, $add);
+ elseif ($delete)
+ $edits[] = new _DiffOp_Delete($delete);
+ elseif ($add)
+ $edits[] = new _DiffOp_Add($add);
+ }
+ return $edits;
+ }
+
+
+ /**
+ * Divide the Largest Common Subsequence (LCS) of the sequences
+ * [XOFF, XLIM) and [YOFF, YLIM) into NCHUNKS approximately equally
+ * sized segments.
+ *
+ * Returns (LCS, PTS). LCS is the length of the LCS. PTS is an
+ * array of NCHUNKS+1 (X, Y) indexes giving the diving points between
+ * sub sequences. The first sub-sequence is contained in [X0, X1),
+ * [Y0, Y1), the second in [X1, X2), [Y1, Y2) and so on. Note
+ * that (X0, Y0) == (XOFF, YOFF) and
+ * (X[NCHUNKS], Y[NCHUNKS]) == (XLIM, YLIM).
+ *
+ * This function assumes that the first lines of the specified portions
+ * of the two files do not match, and likewise that the last lines do not
+ * match. The caller must trim matching lines from the beginning and end
+ * of the portions it is going to specify.
+ */
+ function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks) {
+ $flip = false;
+
+ if ($xlim - $xoff > $ylim - $yoff) {
+ // Things seems faster (I'm not sure I understand why)
+ // when the shortest sequence in X.
+ $flip = true;
+ list ($xoff, $xlim, $yoff, $ylim)
+ = array( $yoff, $ylim, $xoff, $xlim);
+ }
+
+ if ($flip)
+ for ($i = $ylim - 1; $i >= $yoff; $i--)
+ $ymatches[$this->xv[$i]][] = $i;
+ else
+ for ($i = $ylim - 1; $i >= $yoff; $i--)
+ $ymatches[$this->yv[$i]][] = $i;
+
+ $this->lcs = 0;
+ $this->seq[0]= $yoff - 1;
+ $this->in_seq = array();
+ $ymids[0] = array();
+
+ $numer = $xlim - $xoff + $nchunks - 1;
+ $x = $xoff;
+ for ($chunk = 0; $chunk < $nchunks; $chunk++) {
+ if ($chunk > 0)
+ for ($i = 0; $i <= $this->lcs; $i++)
+ $ymids[$i][$chunk-1] = $this->seq[$i];
+
+ $x1 = $xoff + (int)(($numer + ($xlim-$xoff)*$chunk) / $nchunks);
+ for ( ; $x < $x1; $x++) {
+ $line = $flip ? $this->yv[$x] : $this->xv[$x];
+ if (empty($ymatches[$line]))
+ continue;
+ $matches = $ymatches[$line];
+ reset($matches);
+ while (list ($junk, $y) = each($matches))
+ if (empty($this->in_seq[$y])) {
+ $k = $this->_lcs_pos($y);
+ USE_ASSERTS && assert($k > 0);
+ $ymids[$k] = $ymids[$k-1];
+ break;
+ }
+ while (list ($junk, $y) = each($matches)) {
+ if ($y > $this->seq[$k-1]) {
+ USE_ASSERTS && assert($y < $this->seq[$k]);
+ // Optimization: this is a common case:
+ // next match is just replacing previous match.
+ $this->in_seq[$this->seq[$k]] = false;
+ $this->seq[$k] = $y;
+ $this->in_seq[$y] = 1;
+ }
+ else if (empty($this->in_seq[$y])) {
+ $k = $this->_lcs_pos($y);
+ USE_ASSERTS && assert($k > 0);
+ $ymids[$k] = $ymids[$k-1];
+ }
+ }
+ }
+ }
+
+ $seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
+ $ymid = $ymids[$this->lcs];
+ for ($n = 0; $n < $nchunks - 1; $n++) {
+ $x1 = $xoff + (int)(($numer + ($xlim - $xoff) * $n) / $nchunks);
+ $y1 = $ymid[$n] + 1;
+ $seps[] = $flip ? array($y1, $x1) : array($x1, $y1);
+ }
+ $seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);
+
+ return array($this->lcs, $seps);
+ }
+
+ function _lcs_pos ($ypos) {
+ $end = $this->lcs;
+ if ($end == 0 || $ypos > $this->seq[$end]) {
+ $this->seq[++$this->lcs] = $ypos;
+ $this->in_seq[$ypos] = 1;
+ return $this->lcs;
+ }
+
+ $beg = 1;
+ while ($beg < $end) {
+ $mid = (int)(($beg + $end) / 2);
+ if ( $ypos > $this->seq[$mid] )
+ $beg = $mid + 1;
+ else
+ $end = $mid;
+ }
+
+ USE_ASSERTS && assert($ypos != $this->seq[$end]);
+
+ $this->in_seq[$this->seq[$end]] = false;
+ $this->seq[$end] = $ypos;
+ $this->in_seq[$ypos] = 1;
+ return $end;
+ }
+
+ /**
+ * Find LCS of two sequences.
+ *
+ * The results are recorded in the vectors $this->{x,y}changed[], by
+ * storing a 1 in the element for each line that is an insertion
+ * or deletion (ie. is not in the LCS).
+ *
+ * The subsequence of file 0 is [XOFF, XLIM) and likewise for file 1.
+ *
+ * Note that XLIM, YLIM are exclusive bounds.
+ * All line numbers are origin-0 and discarded lines are not counted.
+ */
+ function _compareseq ($xoff, $xlim, $yoff, $ylim) {
+ // Slide down the bottom initial diagonal.
+ while ($xoff < $xlim && $yoff < $ylim
+ && $this->xv[$xoff] == $this->yv[$yoff]) {
+ ++$xoff;
+ ++$yoff;
+ }
+
+ // Slide up the top initial diagonal.
+ while ($xlim > $xoff && $ylim > $yoff
+ && $this->xv[$xlim - 1] == $this->yv[$ylim - 1]) {
+ --$xlim;
+ --$ylim;
+ }
+
+ if ($xoff == $xlim || $yoff == $ylim)
+ $lcs = 0;
+ else {
+ // This is ad hoc but seems to work well.
+ //$nchunks = sqrt(min($xlim - $xoff, $ylim - $yoff) / 2.5);
+ //$nchunks = max(2,min(8,(int)$nchunks));
+ $nchunks = min(7, $xlim - $xoff, $ylim - $yoff) + 1;
+ list ($lcs, $seps)
+ = $this->_diag($xoff,$xlim,$yoff, $ylim,$nchunks);
+ }
+
+ if ($lcs == 0) {
+ // X and Y sequences have no common subsequence:
+ // mark all changed.
+ while ($yoff < $ylim)
+ $this->ychanged[$this->yind[$yoff++]] = 1;
+ while ($xoff < $xlim)
+ $this->xchanged[$this->xind[$xoff++]] = 1;
+ }
+ else {
+ // Use the partitions to split this problem into subproblems.
+ reset($seps);
+ $pt1 = $seps[0];
+ while ($pt2 = next($seps)) {
+ $this->_compareseq ($pt1[0], $pt2[0], $pt1[1], $pt2[1]);
+ $pt1 = $pt2;
+ }
+ }
+ }
+
+ /**
+ * Adjust inserts/deletes of identical lines to join changes
+ * as much as possible.
+ *
+ * We do something when a run of changed lines include a
+ * line at one end and has an excluded, identical line at the other.
+ * We are free to choose which identical line is included.
+ * `compareseq' usually chooses the one at the beginning,
+ * but usually it is cleaner to consider the following identical line
+ * to be the "change".
+ *
+ * This is extracted verbatim from analyze.c (GNU diffutils-2.7).
+ */
+ function _shift_boundaries ($lines, &$changed, $other_changed) {
+ $i = 0;
+ $j = 0;
+
+ USE_ASSERTS && assert('sizeof($lines) == sizeof($changed)');
+ $len = sizeof($lines);
+ $other_len = sizeof($other_changed);
+
+ while (1) {
+ /*
+ * Scan forwards to find beginning of another run of changes.
+ * Also keep track of the corresponding point in the other file.
+ *
+ * Throughout this code, $i and $j are adjusted together so that
+ * the first $i elements of $changed and the first $j elements
+ * of $other_changed both contain the same number of zeros
+ * (unchanged lines).
+ * Furthermore, $j is always kept so that $j == $other_len or
+ * $other_changed[$j] == false.
+ */
+ while ($j < $other_len && $other_changed[$j])
+ $j++;
+
+ while ($i < $len && ! $changed[$i]) {
+ USE_ASSERTS && assert('$j < $other_len && ! $other_changed[$j]');
+ $i++; $j++;
+ while ($j < $other_len && $other_changed[$j])
+ $j++;
+ }
+
+ if ($i == $len)
+ break;
+
+ $start = $i;
+
+ // Find the end of this run of changes.
+ while (++$i < $len && $changed[$i])
+ continue;
+
+ do {
+ /*
+ * Record the length of this run of changes, so that
+ * we can later determine whether the run has grown.
+ */
+ $runlength = $i - $start;
+
+ /*
+ * Move the changed region back, so long as the
+ * previous unchanged line matches the last changed one.
+ * This merges with previous changed regions.
+ */
+ while ($start > 0 && $lines[$start - 1] == $lines[$i - 1]) {
+ $changed[--$start] = 1;
+ $changed[--$i] = false;
+ while ($start > 0 && $changed[$start - 1])
+ $start--;
+ USE_ASSERTS && assert('$j > 0');
+ while ($other_changed[--$j])
+ continue;
+ USE_ASSERTS && assert('$j >= 0 && !$other_changed[$j]');
+ }
+
+ /*
+ * Set CORRESPONDING to the end of the changed run, at the last
+ * point where it corresponds to a changed run in the other file.
+ * CORRESPONDING == LEN means no such point has been found.
+ */
+ $corresponding = $j < $other_len ? $i : $len;
+
+ /*
+ * Move the changed region forward, so long as the
+ * first changed line matches the following unchanged one.
+ * This merges with following changed regions.
+ * Do this second, so that if there are no merges,
+ * the changed region is moved forward as far as possible.
+ */
+ while ($i < $len && $lines[$start] == $lines[$i]) {
+ $changed[$start++] = false;
+ $changed[$i++] = 1;
+ while ($i < $len && $changed[$i])
+ $i++;
+
+ USE_ASSERTS && assert('$j < $other_len && ! $other_changed[$j]');
+ $j++;
+ if ($j < $other_len && $other_changed[$j]) {
+ $corresponding = $i;
+ while ($j < $other_len && $other_changed[$j])
+ $j++;
+ }
+ }
+ } while ($runlength != $i - $start);
+
+ /*
+ * If possible, move the fully-merged run of changes
+ * back to a corresponding run in the other file.
+ */
+ while ($corresponding < $i) {
+ $changed[--$start] = 1;
+ $changed[--$i] = 0;
+ USE_ASSERTS && assert('$j > 0');
+ while ($other_changed[--$j])
+ continue;
+ USE_ASSERTS && assert('$j >= 0 && !$other_changed[$j]');
+ }
+ }
+ }
+}
+
+/**
+ * Class representing a 'diff' between two sequences of strings.
+ */
+class Diff
+{
+ var $edits;
+
+ /**
+ * Constructor.
+ * Computes diff between sequences of strings.
+ *
+ * @param $from_lines array An array of strings.
+ * (Typically these are lines from a file.)
+ * @param $to_lines array An array of strings.
+ */
+ function Diff($from_lines, $to_lines) {
+ $eng = new _DiffEngine;
+ $this->edits = $eng->diff($from_lines, $to_lines);
+ //$this->_check($from_lines, $to_lines);
+ }
+
+ /**
+ * Compute reversed Diff.
+ *
+ * SYNOPSIS:
+ *
+ * $diff = new Diff($lines1, $lines2);
+ * $rev = $diff->reverse();
+ * @return object A Diff object representing the inverse of the
+ * original diff.
+ */
+ function reverse () {
+ $rev = $this;
+ $rev->edits = array();
+ foreach ($this->edits as $edit) {
+ $rev->edits[] = $edit->reverse();
+ }
+ return $rev;
+ }
+
+ /**
+ * Check for empty diff.
+ *
+ * @return bool True iff two sequences were identical.
+ */
+ function isEmpty () {
+ foreach ($this->edits as $edit) {
+ if ($edit->type != 'copy')
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Compute the length of the Longest Common Subsequence (LCS).
+ *
+ * This is mostly for diagnostic purposed.
+ *
+ * @return int The length of the LCS.
+ */
+ function lcs () {
+ $lcs = 0;
+ foreach ($this->edits as $edit) {
+ if ($edit->type == 'copy')
+ $lcs += sizeof($edit->orig);
+ }
+ return $lcs;
+ }
+
+ /**
+ * Get the original set of lines.
+ *
+ * This reconstructs the $from_lines parameter passed to the
+ * constructor.
+ *
+ * @return array The original sequence of strings.
+ */
+ function orig() {
+ $lines = array();
+
+ foreach ($this->edits as $edit) {
+ if ($edit->orig)
+ array_splice($lines, sizeof($lines), 0, $edit->orig);
+ }
+ return $lines;
+ }
+
+ /**
+ * Get the closing set of lines.
+ *
+ * This reconstructs the $to_lines parameter passed to the
+ * constructor.
+ *
+ * @return array The sequence of strings.
+ */
+ function closing() {
+ $lines = array();
+
+ foreach ($this->edits as $edit) {
+ if ($edit->closing)
+ array_splice($lines, sizeof($lines), 0, $edit->closing);
+ }
+ return $lines;
+ }
+
+ /**
+ * Check a Diff for validity.
+ *
+ * This is here only for debugging purposes.
+ */
+ function _check ($from_lines, $to_lines) {
+ if (serialize($from_lines) != serialize($this->orig()))
+ trigger_error("Reconstructed original doesn't match", E_USER_ERROR);
+ if (serialize($to_lines) != serialize($this->closing()))
+ trigger_error("Reconstructed closing doesn't match", E_USER_ERROR);
+
+ $rev = $this->reverse();
+ if (serialize($to_lines) != serialize($rev->orig()))
+ trigger_error("Reversed original doesn't match", E_USER_ERROR);
+ if (serialize($from_lines) != serialize($rev->closing()))
+ trigger_error("Reversed closing doesn't match", E_USER_ERROR);
+
+
+ $prevtype = 'none';
+ foreach ($this->edits as $edit) {
+ if ( $prevtype == $edit->type )
+ trigger_error("Edit sequence is non-optimal", E_USER_ERROR);
+ $prevtype = $edit->type;
+ }
+
+ $lcs = $this->lcs();
+ trigger_error("Diff okay: LCS = $lcs", E_USER_NOTICE);
+ }
+}
+
+/**
+ * FIXME: bad name.
+ */
+class MappedDiff
+extends Diff
+{
+ /**
+ * Constructor.
+ *
+ * Computes diff between sequences of strings.
+ *
+ * This can be used to compute things like
+ * case-insensitve diffs, or diffs which ignore
+ * changes in white-space.
+ *
+ * @param $from_lines array An array of strings.
+ * (Typically these are lines from a file.)
+ *
+ * @param $to_lines array An array of strings.
+ *
+ * @param $mapped_from_lines array This array should
+ * have the same size number of elements as $from_lines.
+ * The elements in $mapped_from_lines and
+ * $mapped_to_lines are what is actually compared
+ * when computing the diff.
+ *
+ * @param $mapped_to_lines array This array should
+ * have the same number of elements as $to_lines.
+ */
+ function MappedDiff($from_lines, $to_lines,
+ $mapped_from_lines, $mapped_to_lines) {
+
+ assert(sizeof($from_lines) == sizeof($mapped_from_lines));
+ assert(sizeof($to_lines) == sizeof($mapped_to_lines));
+
+ $this->Diff($mapped_from_lines, $mapped_to_lines);
+
+ $xi = $yi = 0;
+ for ($i = 0; $i < sizeof($this->edits); $i++) {
+ $orig = &$this->edits[$i]->orig;
+ if (is_array($orig)) {
+ $orig = array_slice($from_lines, $xi, sizeof($orig));
+ $xi += sizeof($orig);
+ }
+
+ $closing = &$this->edits[$i]->closing;
+ if (is_array($closing)) {
+ $closing = array_slice($to_lines, $yi, sizeof($closing));
+ $yi += sizeof($closing);
+ }
+ }
+ }
+}
+
+/**
+ * A class to format Diffs
+ *
+ * This class formats the diff in classic diff format.
+ * It is intended that this class be customized via inheritance,
+ * to obtain fancier outputs.
+ */
+class DiffFormatter
+{
+ /**
+ * Number of leading context "lines" to preserve.
+ *
+ * This should be left at zero for this class, but subclasses
+ * may want to set this to other values.
+ */
+ var $leading_context_lines = 0;
+
+ /**
+ * Number of trailing context "lines" to preserve.
+ *
+ * This should be left at zero for this class, but subclasses
+ * may want to set this to other values.
+ */
+ var $trailing_context_lines = 0;
+
+ /**
+ * Format a diff.
+ *
+ * @param $diff object A Diff object.
+ * @return string The formatted output.
+ */
+ function format($diff) {
+
+ $xi = $yi = 1;
+ $block = false;
+ $context = array();
+
+ $nlead = $this->leading_context_lines;
+ $ntrail = $this->trailing_context_lines;
+
+ $this->_start_diff();
+
+ foreach ($diff->edits as $edit) {
+ if ($edit->type == 'copy') {
+ if (is_array($block)) {
+ if (sizeof($edit->orig) <= $nlead + $ntrail) {
+ $block[] = $edit;
+ }
+ else{
+ if ($ntrail) {
+ $context = array_slice($edit->orig, 0, $ntrail);
+ $block[] = new _DiffOp_Copy($context);
+ }
+ $this->_block($x0, $ntrail + $xi - $x0,
+ $y0, $ntrail + $yi - $y0,
+ $block);
+ $block = false;
+ }
+ }
+ $context = $edit->orig;
+ }
+ else {
+ if (! is_array($block)) {
+ $context = array_slice($context, sizeof($context) - $nlead);
+ $x0 = $xi - sizeof($context);
+ $y0 = $yi - sizeof($context);
+ $block = array();
+ if ($context)
+ $block[] = new _DiffOp_Copy($context);
+ }
+ $block[] = $edit;
+ }
+
+ if ($edit->orig)
+ $xi += sizeof($edit->orig);
+ if ($edit->closing)
+ $yi += sizeof($edit->closing);
+ }
+
+ if (is_array($block))
+ $this->_block($x0, $xi - $x0,
+ $y0, $yi - $y0,
+ $block);
+
+ return $this->_end_diff();
+ }
+
+ function _block($xbeg, $xlen, $ybeg, $ylen, &$edits) {
+ $this->_start_block($this->_block_header($xbeg, $xlen, $ybeg, $ylen));
+ foreach ($edits as $edit) {
+ if ($edit->type == 'copy')
+ $this->_context($edit->orig);
+ elseif ($edit->type == 'add')
+ $this->_added($edit->closing);
+ elseif ($edit->type == 'delete')
+ $this->_deleted($edit->orig);
+ elseif ($edit->type == 'change')
+ $this->_changed($edit->orig, $edit->closing);
+ else
+ trigger_error("Unknown edit type", E_USER_ERROR);
+ }
+ $this->_end_block();
+ }
+
+ function _start_diff() {
+ ob_start();
+ }
+
+ function _end_diff() {
+ $val = ob_get_contents();
+ ob_end_clean();
+ return $val;
+ }
+
+ function _block_header($xbeg, $xlen, $ybeg, $ylen) {
+ if ($xlen > 1)
+ $xbeg .= "," . ($xbeg + $xlen - 1);
+ if ($ylen > 1)
+ $ybeg .= "," . ($ybeg + $ylen - 1);
+
+ return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
+ }
+
+ function _start_block($header) {
+ echo $header;
+ }
+
+ function _end_block() {
+ }
+
+ function _lines($lines, $prefix = ' ') {
+ foreach ($lines as $line)
+ echo "$prefix $line\n";
+ }
+
+ function _context($lines) {
+ $this->_lines($lines);
+ }
+
+ function _added($lines) {
+ $this->_lines($lines, ">");
+ }
+ function _deleted($lines) {
+ $this->_lines($lines, "<");
+ }
+
+ function _changed($orig, $closing) {
+ $this->_deleted($orig);
+ echo "---\n";
+ $this->_added($closing);
+ }
+}
+
+
+/**
+ * Additions by Axel Boldt follow, partly taken from diff.php, phpwiki-1.3.3
+ *
+ */
+
+define('NBSP', "\xC2\xA0"); // utf-8 non-breaking space.
+
+class _HWLDF_WordAccumulator {
+ function _HWLDF_WordAccumulator () {
+ $this->_lines = array();
+ $this->_line = '';
+ $this->_group = '';
+ $this->_tag = '';
+ }
+
+ function _flushGroup ($new_tag) {
+ if ($this->_group !== '') {
+ if ($this->_tag == 'mark')
+ $this->_line .= '<strong>'.$this->_group.'</strong>';
+ else
+ $this->_line .= $this->_group;
+ }
+ $this->_group = '';
+ $this->_tag = $new_tag;
+ }
+
+ function _flushLine ($new_tag) {
+ $this->_flushGroup($new_tag);
+ if ($this->_line != '')
+ $this->_lines[] = $this->_line;
+ $this->_line = '';
+ }
+
+ function addWords ($words, $tag = '') {
+ if ($tag != $this->_tag)
+ $this->_flushGroup($tag);
+
+ foreach ($words as $word) {
+ // new-line should only come as first char of word.
+ if ($word == '')
+ continue;
+ if ($word[0] == "\n") {
+ $this->_group .= NBSP;
+ $this->_flushLine($tag);
+ $word = substr($word, 1);
+ }
+ assert(!strstr($word, "\n"));
+ $this->_group .= $word;
+ }
+ }
+
+ function getLines() {
+ $this->_flushLine('~done');
+ return $this->_lines;
+ }
+}
+
+class WordLevelDiff extends MappedDiff
+{
+ function WordLevelDiff ($orig_lines, $closing_lines) {
+ list ($orig_words, $orig_stripped) = $this->_split($orig_lines);
+ list ($closing_words, $closing_stripped) = $this->_split($closing_lines);
+
+
+ $this->MappedDiff($orig_words, $closing_words,
+ $orig_stripped, $closing_stripped);
+ }
+
+ function _split($lines) {
+ // FIXME: fix POSIX char class.
+# if (!preg_match_all('/ ( [^\S\n]+ | [[:alnum:]]+ | . ) (?: (?!< \n) [^\S\n])? /xs',
+ if (!preg_match_all('/ ( [^\S\n]+ | [0-9_A-Za-z\x80-\xff]+ | . ) (?: (?!< \n) [^\S\n])? /xs',
+ implode("\n", $lines),
+ $m)) {
+ return array(array(''), array(''));
+ }
+ return array($m[0], $m[1]);
+ }
+
+ function orig () {
+ $orig = new _HWLDF_WordAccumulator;
+
+ foreach ($this->edits as $edit) {
+ if ($edit->type == 'copy')
+ $orig->addWords($edit->orig);
+ elseif ($edit->orig)
+ $orig->addWords($edit->orig, 'mark');
+ }
+ return $orig->getLines();
+ }
+
+ function closing () {
+ $closing = new _HWLDF_WordAccumulator;
+
+ foreach ($this->edits as $edit) {
+ if ($edit->type == 'copy')
+ $closing->addWords($edit->closing);
+ elseif ($edit->closing)
+ $closing->addWords($edit->closing, 'mark');
+ }
+ return $closing->getLines();
+ }
+}
+
+/**
+ * "Unified" diff formatter.
+ *
+ * This class formats the diff in classic "unified diff" format.
+ */
+class UnifiedDiffFormatter extends DiffFormatter
+{
+ function UnifiedDiffFormatter($context_lines = 4) {
+ $this->leading_context_lines = $context_lines;
+ $this->trailing_context_lines = $context_lines;
+ }
+
+ function _block_header($xbeg, $xlen, $ybeg, $ylen) {
+ if ($xlen != 1)
+ $xbeg .= "," . $xlen;
+ if ($ylen != 1)
+ $ybeg .= "," . $ylen;
+ return "@@ -$xbeg +$ybeg @@\n";
+ }
+
+ function _added($lines) {
+ $this->_lines($lines, "+");
+ }
+ function _deleted($lines) {
+ $this->_lines($lines, "-");
+ }
+ function _changed($orig, $final) {
+ $this->_deleted($orig);
+ $this->_added($final);
+ }
+}
+
+/**
+ * Wikipedia Table style diff formatter.
+ *
+ */
+class TableDiffFormatter extends DiffFormatter
+{
+ function TableDiffFormatter() {
+ $this->leading_context_lines = 2;
+ $this->trailing_context_lines = 2;
+ }
+
+ function _pre($text){
+ $text = htmlspecialchars($text);
+ $text = str_replace(' ',' &nbsp;',$text);
+ if($text{0} == ' ') $text = '&nbsp;'.substr($text,1);
+ return $text;
+ }
+
+ function _block_header( $xbeg, $xlen, $ybeg, $ylen ) {
+ global $lang;
+ $l1 = $lang['line'].' '.$xbeg;
+ $l2 = $lang['line'].' '.$ybeg;
+ $r = '<tr><td class="diff-blockheader" colspan="2">'.$l1.":</td>\n" .
+ '<td class="diff-blockheader" colspan="2">'.$l2.":</td></tr>\n";
+ return $r;
+ }
+
+ function _start_block( $header ) {
+ print( $header );
+ }
+
+ function _end_block() {
+ }
+
+ function _lines( $lines, $prefix=' ', $color="white" ) {
+ }
+
+ function addedLine( $line ) {
+ $line = str_replace(' ',' &nbsp;',$line);
+ if($line{0} == ' ') $line = '&nbsp;'.substr($line,1);
+ return '<td>+</td><td class="diff-addedline">' .
+ $line.'</td>';
+ }
+
+ function deletedLine( $line ) {
+ $line = str_replace(' ',' &nbsp;',$line);
+ if($line{0} == ' ') $line = '&nbsp;'.substr($line,1);
+ return '<td>-</td><td class="diff-deletedline">' .
+ $line.'</td>';
+ }
+
+ function emptyLine() {
+ //$line = str_replace(' ','&nbsp; ',$line);
+ return '<td colspan="2">&nbsp;</td>';
+ }
+
+ function contextLine( $line ) {
+ $line = str_replace(' ',' &nbsp;',$line);
+ if($line{0} == ' ') $line = '&nbsp;'.substr($line,1);
+ return '<td> </td><td class="diff-context">'.$line.'</td>';
+ }
+
+ function _added($lines) {
+ foreach ($lines as $line) {
+ print( '<tr>' . $this->emptyLine() .
+ $this->addedLine( $line ) . "</tr>\n" );
+ }
+ }
+
+ function _deleted($lines) {
+ foreach ($lines as $line) {
+ print( '<tr>' . $this->deletedLine( $line ) .
+ $this->emptyLine() . "</tr>\n" );
+ }
+ }
+
+ function _context( $lines ) {
+ foreach ($lines as $line) {
+ print( '<tr>' . $this->contextLine( $line ) .
+ $this->contextLine( $line ) . "</tr>\n" );
+ }
+ }
+
+ function _changed( $orig, $closing ) {
+ $diff = new WordLevelDiff( $orig, $closing );
+ $del = $diff->orig();
+ $add = $diff->closing();
+
+ while ( $line = array_shift( $del ) ) {
+ $aline = array_shift( $add );
+ print( '<tr>' . $this->deletedLine( $line ) .
+ $this->addedLine( $aline ) . "</tr>\n" );
+ }
+ $this->_added( $add ); # If any leftovers
+ }
+}
+
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php b/mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php
new file mode 100644
index 000000000..2ce2093e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php
@@ -0,0 +1,146 @@
+<?php
+/**
+ * EmailAddressValidator Class
+ *
+ * @author Dave Child <dave@addedbytes.com>
+ * @link http://code.google.com/p/php-email-address-validation/
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ */
+class EmailAddressValidator {
+
+ /**
+ * Check email address validity
+ * @param strEmailAddress Email address to be checked
+ * @return True if email is valid, false if not
+ */
+ function check_email_address($strEmailAddress) {
+
+ // Control characters are not allowed
+ if (preg_match('/[\x00-\x1F\x7F-\xFF]/', $strEmailAddress)) {
+ return false;
+ }
+
+ // Split it into sections using last instance of "@"
+ $intAtSymbol = strrpos($strEmailAddress, '@');
+ if ($intAtSymbol === false) {
+ // No "@" symbol in email.
+ return false;
+ }
+ $arrEmailAddress[0] = substr($strEmailAddress, 0, $intAtSymbol);
+ $arrEmailAddress[1] = substr($strEmailAddress, $intAtSymbol + 1);
+
+ // Count the "@" symbols. Only one is allowed, except where
+ // contained in quote marks in the local part. Quickest way to
+ // check this is to remove anything in quotes.
+ $arrTempAddress[0] = preg_replace('/"[^"]+"/'
+ ,''
+ ,$arrEmailAddress[0]);
+ $arrTempAddress[1] = $arrEmailAddress[1];
+ $strTempAddress = $arrTempAddress[0] . $arrTempAddress[1];
+ // Then check - should be no "@" symbols.
+ if (strrpos($strTempAddress, '@') !== false) {
+ // "@" symbol found
+ return false;
+ }
+
+ // Check local portion
+ if (!$this->check_local_portion($arrEmailAddress[0])) {
+ return false;
+ }
+
+ // Check domain portion
+ if (!$this->check_domain_portion($arrEmailAddress[1])) {
+ return false;
+ }
+
+ // If we're still here, all checks above passed. Email is valid.
+ return true;
+
+ }
+
+ /**
+ * Checks email section before "@" symbol for validity
+ * @param strLocalPortion Text to be checked
+ * @return True if local portion is valid, false if not
+ */
+ function check_local_portion($strLocalPortion) {
+ // Local portion can only be from 1 to 64 characters, inclusive.
+ // Please note that servers are encouraged to accept longer local
+ // parts than 64 characters.
+ if (!$this->check_text_length($strLocalPortion, 1, 64)) {
+ return false;
+ }
+ // Local portion must be:
+ // 1) a dot-atom (strings separated by periods)
+ // 2) a quoted string
+ // 3) an obsolete format string (combination of the above)
+ $arrLocalPortion = explode('.', $strLocalPortion);
+ for ($i = 0, $max = sizeof($arrLocalPortion); $i < $max; $i++) {
+ if (!preg_match('.^('
+ . '([A-Za-z0-9!#$%&\'*+/=?^_`{|}~-]'
+ . '[A-Za-z0-9!#$%&\'*+/=?^_`{|}~-]{0,63})'
+ .'|'
+ . '("[^\\\"]{0,62}")'
+ .')$.'
+ ,$arrLocalPortion[$i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Checks email section after "@" symbol for validity
+ * @param strDomainPortion Text to be checked
+ * @return True if domain portion is valid, false if not
+ */
+ function check_domain_portion($strDomainPortion) {
+ // Total domain can only be from 1 to 255 characters, inclusive
+ if (!$this->check_text_length($strDomainPortion, 1, 255)) {
+ return false;
+ }
+ // Check if domain is IP, possibly enclosed in square brackets.
+ if (preg_match('/^(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])'
+ .'(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}$/'
+ ,$strDomainPortion) ||
+ preg_match('/^\[(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])'
+ .'(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])){3}\]$/'
+ ,$strDomainPortion)) {
+ return true;
+ } else {
+ $arrDomainPortion = explode('.', $strDomainPortion);
+ if (sizeof($arrDomainPortion) < 2) {
+ return false; // Not enough parts to domain
+ }
+ for ($i = 0, $max = sizeof($arrDomainPortion); $i < $max; $i++) {
+ // Each portion must be between 1 and 63 characters, inclusive
+ if (!$this->check_text_length($arrDomainPortion[$i], 1, 63)) {
+ return false;
+ }
+ if (!preg_match('/^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|'
+ .'([A-Za-z0-9]+))$/', $arrDomainPortion[$i])) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Check given text length is between defined bounds
+ * @param strText Text to be checked
+ * @param intMinimum Minimum acceptable length
+ * @param intMaximum Maximum acceptable length
+ * @return True if string is within bounds (inclusive), false if not
+ */
+ function check_text_length($strText, $intMinimum, $intMaximum) {
+ // Minimum and maximum are both inclusive
+ $intTextLength = strlen($strText);
+ if (($intTextLength < $intMinimum) || ($intTextLength > $intMaximum)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php b/mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php
new file mode 100644
index 000000000..f37888f01
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Class used to parse RSS and ATOM feeds
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/HTTPClient.php');
+require_once(DOKU_INC.'inc/SimplePie.php');
+
+
+/**
+ * We override some methods of the original SimplePie class here
+ */
+class FeedParser extends SimplePie {
+
+ /**
+ * Constructor. Set some defaults
+ */
+ function FeedParser(){
+ $this->SimplePie();
+ $this->enable_cache(false);
+ $this->set_file_class('FeedParser_File');
+ }
+
+ /**
+ * Backward compatibility for older plugins
+ */
+ function feed_url($url){
+ $this->set_feed_url($url);
+ }
+}
+
+/**
+ * Fetch an URL using our own HTTPClient
+ *
+ * Replaces SimplePie's own class
+ */
+class FeedParser_File extends SimplePie_File {
+ var $http;
+ var $useragent;
+ var $success = true;
+ var $headers = array();
+ var $body;
+ var $error;
+
+ /**
+ * Inititializes the HTTPClient
+ *
+ * We ignore all given parameters - they are set in DokuHTTPClient
+ */
+ function FeedParser_File($url, $timeout=10, $redirects=5,
+ $headers=null, $useragent=null, $force_fsockopen=false) {
+ $this->http = new DokuHTTPClient();
+ $this->success = $this->http->sendRequest($url);
+
+ $this->headers = $this->http->resp_headers;
+ $this->body = $this->http->resp_body;
+ $this->error = $this->http->error;
+ return $this->success;
+ }
+
+ function headers(){
+ return $this->headers;
+ }
+
+ function body(){
+ return $this->body;
+ }
+
+ function close(){
+ return true;
+ }
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php b/mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php
new file mode 100644
index 000000000..578d7e7cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php
@@ -0,0 +1,573 @@
+<?php
+/**
+ * HTTP Client
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Goetz <cpuidle@gmx.de>
+ */
+
+
+define('HTTP_NL',"\r\n");
+
+
+/**
+ * Adds DokuWiki specific configs to the HTTP client
+ *
+ * @author Andreas Goetz <cpuidle@gmx.de>
+ */
+class DokuHTTPClient extends HTTPClient {
+
+ /**
+ * Constructor.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function DokuHTTPClient(){
+ global $conf;
+
+ // call parent constructor
+ $this->HTTPClient();
+
+ // set some values from the config
+ $this->proxy_host = $conf['proxy']['host'];
+ $this->proxy_port = $conf['proxy']['port'];
+ $this->proxy_user = $conf['proxy']['user'];
+ $this->proxy_pass = conf_decodeString($conf['proxy']['pass']);
+ $this->proxy_ssl = $conf['proxy']['ssl'];
+ }
+
+
+ /**
+ * Wraps an event around the parent function
+ *
+ * @triggers HTTPCLIENT_REQUEST_SEND
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function sendRequest($url,$data='',$method='GET'){
+ $httpdata = array('url' => $url,
+ 'data' => $data,
+ 'method' => $method);
+ $evt = new Doku_Event('HTTPCLIENT_REQUEST_SEND',$httpdata);
+ if($evt->advise_before()){
+ $url = $httpdata['url'];
+ $data = $httpdata['data'];
+ $method = $httpdata['method'];
+ }
+ $evt->advise_after();
+ unset($evt);
+ return parent::sendRequest($url,$data,$method);
+ }
+
+}
+
+/**
+ * This class implements a basic HTTP client
+ *
+ * It supports POST and GET, Proxy usage, basic authentication,
+ * handles cookies and referers. It is based upon the httpclient
+ * function from the VideoDB project.
+ *
+ * @link http://www.splitbrain.org/go/videodb
+ * @author Andreas Goetz <cpuidle@gmx.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+class HTTPClient {
+ //set these if you like
+ var $agent; // User agent
+ var $http; // HTTP version defaults to 1.0
+ var $timeout; // read timeout (seconds)
+ var $cookies;
+ var $referer;
+ var $max_redirect;
+ var $max_bodysize;
+ var $max_bodysize_abort = true; // if set, abort if the response body is bigger than max_bodysize
+ var $header_regexp; // if set this RE must match against the headers, else abort
+ var $headers;
+ var $debug;
+ var $start = 0; // for timings
+
+ // don't set these, read on error
+ var $error;
+ var $redirect_count;
+
+ // read these after a successful request
+ var $resp_status;
+ var $resp_body;
+ var $resp_headers;
+
+ // set these to do basic authentication
+ var $user;
+ var $pass;
+
+ // set these if you need to use a proxy
+ var $proxy_host;
+ var $proxy_port;
+ var $proxy_user;
+ var $proxy_pass;
+ var $proxy_ssl; //boolean set to true if your proxy needs SSL
+
+ // what we use as boundary on multipart/form-data posts
+ var $boundary = '---DokuWikiHTTPClient--4523452351';
+
+ /**
+ * Constructor.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function HTTPClient(){
+ $this->agent = 'Mozilla/4.0 (compatible; DokuWiki HTTP Client; '.PHP_OS.')';
+ $this->timeout = 15;
+ $this->cookies = array();
+ $this->referer = '';
+ $this->max_redirect = 3;
+ $this->redirect_count = 0;
+ $this->status = 0;
+ $this->headers = array();
+ $this->http = '1.0';
+ $this->debug = false;
+ $this->max_bodysize = 0;
+ $this->header_regexp= '';
+ if(extension_loaded('zlib')) $this->headers['Accept-encoding'] = 'gzip';
+ $this->headers['Accept'] = 'text/xml,application/xml,application/xhtml+xml,'.
+ 'text/html,text/plain,image/png,image/jpeg,image/gif,*/*';
+ $this->headers['Accept-Language'] = 'en-us';
+ }
+
+
+ /**
+ * Simple function to do a GET request
+ *
+ * Returns the wanted page or false on an error;
+ *
+ * @param string $url The URL to fetch
+ * @param bool $sloppy304 Return body on 304 not modified
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function get($url,$sloppy304=false){
+ if(!$this->sendRequest($url)) return false;
+ if($this->status == 304 && $sloppy304) return $this->resp_body;
+ if($this->status < 200 || $this->status > 206) return false;
+ return $this->resp_body;
+ }
+
+ /**
+ * Simple function to do a POST request
+ *
+ * Returns the resulting page or false on an error;
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function post($url,$data){
+ if(!$this->sendRequest($url,$data,'POST')) return false;
+ if($this->status < 200 || $this->status > 206) return false;
+ return $this->resp_body;
+ }
+
+ /**
+ * Send an HTTP request
+ *
+ * This method handles the whole HTTP communication. It respects set proxy settings,
+ * builds the request headers, follows redirects and parses the response.
+ *
+ * Post data should be passed as associative array. When passed as string it will be
+ * sent as is. You will need to setup your own Content-Type header then.
+ *
+ * @param string $url - the complete URL
+ * @param mixed $data - the post data either as array or raw data
+ * @param string $method - HTTP Method usually GET or POST.
+ * @return bool - true on success
+ * @author Andreas Goetz <cpuidle@gmx.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function sendRequest($url,$data='',$method='GET'){
+ $this->start = $this->_time();
+ $this->error = '';
+ $this->status = 0;
+
+ // don't accept gzip if truncated bodies might occur
+ if($this->max_bodysize &&
+ !$this->max_bodysize_abort &&
+ $this->headers['Accept-encoding'] == 'gzip'){
+ unset($this->headers['Accept-encoding']);
+ }
+
+ // parse URL into bits
+ $uri = parse_url($url);
+ $server = $uri['host'];
+ $path = $uri['path'];
+ if(empty($path)) $path = '/';
+ if(!empty($uri['query'])) $path .= '?'.$uri['query'];
+ $port = $uri['port'];
+ if(isset($uri['user'])) $this->user = $uri['user'];
+ if(isset($uri['pass'])) $this->pass = $uri['pass'];
+
+ // proxy setup
+ if($this->proxy_host){
+ $request_url = $url;
+ $server = $this->proxy_host;
+ $port = $this->proxy_port;
+ if (empty($port)) $port = 8080;
+ }else{
+ $request_url = $path;
+ $server = $server;
+ if (empty($port)) $port = ($uri['scheme'] == 'https') ? 443 : 80;
+ }
+
+ // add SSL stream prefix if needed - needs SSL support in PHP
+ if($port == 443 || $this->proxy_ssl) $server = 'ssl://'.$server;
+
+ // prepare headers
+ $headers = $this->headers;
+ $headers['Host'] = $uri['host'];
+ $headers['User-Agent'] = $this->agent;
+ $headers['Referer'] = $this->referer;
+ $headers['Connection'] = 'Close';
+ if($method == 'POST'){
+ if(is_array($data)){
+ if($headers['Content-Type'] == 'multipart/form-data'){
+ $headers['Content-Type'] = 'multipart/form-data; boundary='.$this->boundary;
+ $data = $this->_postMultipartEncode($data);
+ }else{
+ $headers['Content-Type'] = 'application/x-www-form-urlencoded';
+ $data = $this->_postEncode($data);
+ }
+ }
+ $headers['Content-Length'] = strlen($data);
+ $rmethod = 'POST';
+ }elseif($method == 'GET'){
+ $data = ''; //no data allowed on GET requests
+ }
+ if($this->user) {
+ $headers['Authorization'] = 'Basic '.base64_encode($this->user.':'.$this->pass);
+ }
+ if($this->proxy_user) {
+ $headers['Proxy-Authorization'] = 'Basic '.base64_encode($this->proxy_user.':'.$this->proxy_pass);
+ }
+
+ // stop time
+ $start = time();
+
+ // open socket
+ $socket = @fsockopen($server,$port,$errno, $errstr, $this->timeout);
+ if (!$socket){
+ $resp->status = '-100';
+ $this->error = "Could not connect to $server:$port\n$errstr ($errno)";
+ return false;
+ }
+ //set non blocking
+ stream_set_blocking($socket,0);
+
+ // build request
+ $request = "$method $request_url HTTP/".$this->http.HTTP_NL;
+ $request .= $this->_buildHeaders($headers);
+ $request .= $this->_getCookies();
+ $request .= HTTP_NL;
+ $request .= $data;
+
+ $this->_debug('request',$request);
+
+ // send request
+ $towrite = strlen($request);
+ $written = 0;
+ while($written < $towrite){
+ $ret = fwrite($socket, substr($request,$written));
+ if($ret === false){
+ $this->status = -100;
+ $this->error = 'Failed writing to socket';
+ return false;
+ }
+ $written += $ret;
+ }
+
+
+ // read headers from socket
+ $r_headers = '';
+ do{
+ if(time()-$start > $this->timeout){
+ $this->status = -100;
+ $this->error = sprintf('Timeout while reading headers (%.3fs)',$this->_time() - $this->start);
+ return false;
+ }
+ if(feof($socket)){
+ $this->error = 'Premature End of File (socket)';
+ return false;
+ }
+ $r_headers .= fgets($socket,1024);
+ }while(!preg_match('/\r?\n\r?\n$/',$r_headers));
+
+ $this->_debug('response headers',$r_headers);
+
+ // check if expected body size exceeds allowance
+ if($this->max_bodysize && preg_match('/\r?\nContent-Length:\s*(\d+)\r?\n/i',$r_headers,$match)){
+ if($match[1] > $this->max_bodysize){
+ $this->error = 'Reported content length exceeds allowed response size';
+ if ($this->max_bodysize_abort)
+ return false;
+ }
+ }
+
+ // get Status
+ if (!preg_match('/^HTTP\/(\d\.\d)\s*(\d+).*?\n/', $r_headers, $m)) {
+ $this->error = 'Server returned bad answer';
+ return false;
+ }
+ $this->status = $m[2];
+
+ // handle headers and cookies
+ $this->resp_headers = $this->_parseHeaders($r_headers);
+ if(isset($this->resp_headers['set-cookie'])){
+ foreach ((array) $this->resp_headers['set-cookie'] as $cookie){
+ list($cookie) = explode(';',$cookie,2);
+ list($key,$val) = explode('=',$cookie,2);
+ $key = trim($key);
+ if($val == 'deleted'){
+ if(isset($this->cookies[$key])){
+ unset($this->cookies[$key]);
+ }
+ }elseif($key){
+ $this->cookies[$key] = $val;
+ }
+ }
+ }
+
+ $this->_debug('Object headers',$this->resp_headers);
+
+ // check server status code to follow redirect
+ if($this->status == 301 || $this->status == 302 ){
+ if (empty($this->resp_headers['location'])){
+ $this->error = 'Redirect but no Location Header found';
+ return false;
+ }elseif($this->redirect_count == $this->max_redirect){
+ $this->error = 'Maximum number of redirects exceeded';
+ return false;
+ }else{
+ $this->redirect_count++;
+ $this->referer = $url;
+ // handle non-RFC-compliant relative redirects
+ if (!preg_match('/^http/i', $this->resp_headers['location'])){
+ if($this->resp_headers['location'][0] != '/'){
+ $this->resp_headers['location'] = $uri['scheme'].'://'.$uri['host'].':'.$uri['port'].
+ dirname($uri['path']).'/'.$this->resp_headers['location'];
+ }else{
+ $this->resp_headers['location'] = $uri['scheme'].'://'.$uri['host'].':'.$uri['port'].
+ $this->resp_headers['location'];
+ }
+ }
+ // perform redirected request, always via GET (required by RFC)
+ return $this->sendRequest($this->resp_headers['location'],array(),'GET');
+ }
+ }
+
+ // check if headers are as expected
+ if($this->header_regexp && !preg_match($this->header_regexp,$r_headers)){
+ $this->error = 'The received headers did not match the given regexp';
+ return false;
+ }
+
+ //read body (with chunked encoding if needed)
+ $r_body = '';
+ if(preg_match('/transfer\-(en)?coding:\s*chunked\r\n/i',$r_headers)){
+ do {
+ unset($chunk_size);
+ do {
+ if(feof($socket)){
+ $this->error = 'Premature End of File (socket)';
+ return false;
+ }
+ if(time()-$start > $this->timeout){
+ $this->status = -100;
+ $this->error = sprintf('Timeout while reading chunk (%.3fs)',$this->_time() - $this->start);
+ return false;
+ }
+ $byte = fread($socket,1);
+ $chunk_size .= $byte;
+ } while (preg_match('/[a-zA-Z0-9]/',$byte)); // read chunksize including \r
+
+ $byte = fread($socket,1); // readtrailing \n
+ $chunk_size = hexdec($chunk_size);
+ if ($chunk_size) {
+ $this_chunk = fread($socket,$chunk_size);
+ $r_body .= $this_chunk;
+ $byte = fread($socket,2); // read trailing \r\n
+ }
+
+ if($this->max_bodysize && strlen($r_body) > $this->max_bodysize){
+ $this->error = 'Allowed response size exceeded';
+ if ($this->max_bodysize_abort)
+ return false;
+ else
+ break;
+ }
+ } while ($chunk_size);
+ }else{
+ // read entire socket
+ while (!feof($socket)) {
+ if(time()-$start > $this->timeout){
+ $this->status = -100;
+ $this->error = sprintf('Timeout while reading response (%.3fs)',$this->_time() - $this->start);
+ return false;
+ }
+ $r_body .= fread($socket,4096);
+ $r_size = strlen($r_body);
+ if($this->max_bodysize && $r_size > $this->max_bodysize){
+ $this->error = 'Allowed response size exceeded';
+ if ($this->max_bodysize_abort)
+ return false;
+ else
+ break;
+ }
+ if(isset($this->resp_headers['content-length']) &&
+ !isset($this->resp_headers['transfer-encoding']) &&
+ $this->resp_headers['content-length'] == $r_size){
+ // we read the content-length, finish here
+ break;
+ }
+ }
+ }
+
+ // close socket
+ $status = socket_get_status($socket);
+ fclose($socket);
+
+ // decode gzip if needed
+ if(isset($this->resp_headers['content-encoding']) &&
+ $this->resp_headers['content-encoding'] == 'gzip' &&
+ strlen($r_body) > 10 && substr($r_body,0,3)=="\x1f\x8b\x08"){
+ $this->resp_body = @gzinflate(substr($r_body, 10));
+ }else{
+ $this->resp_body = $r_body;
+ }
+
+ $this->_debug('response body',$this->resp_body);
+ $this->redirect_count = 0;
+ return true;
+ }
+
+ /**
+ * print debug info
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _debug($info,$var=null){
+ if(!$this->debug) return;
+ print '<b>'.$info.'</b> '.($this->_time() - $this->start).'s<br />';
+ if(!is_null($var)){
+ ob_start();
+ print_r($var);
+ $content = htmlspecialchars(ob_get_contents());
+ ob_end_clean();
+ print '<pre>'.$content.'</pre>';
+ }
+ }
+
+ /**
+ * Return current timestamp in microsecond resolution
+ */
+ function _time(){
+ list($usec, $sec) = explode(" ", microtime());
+ return ((float)$usec + (float)$sec);
+ }
+
+ /**
+ * convert given header string to Header array
+ *
+ * All Keys are lowercased.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _parseHeaders($string){
+ $headers = array();
+ $lines = explode("\n",$string);
+ foreach($lines as $line){
+ list($key,$val) = explode(':',$line,2);
+ $key = strtolower(trim($key));
+ $val = trim($val);
+ if(empty($val)) continue;
+ if(isset($headers[$key])){
+ if(is_array($headers[$key])){
+ $headers[$key][] = $val;
+ }else{
+ $headers[$key] = array($headers[$key],$val);
+ }
+ }else{
+ $headers[$key] = $val;
+ }
+ }
+ return $headers;
+ }
+
+ /**
+ * convert given header array to header string
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _buildHeaders($headers){
+ $string = '';
+ foreach($headers as $key => $value){
+ if(empty($value)) continue;
+ $string .= $key.': '.$value.HTTP_NL;
+ }
+ return $string;
+ }
+
+ /**
+ * get cookies as http header string
+ *
+ * @author Andreas Goetz <cpuidle@gmx.de>
+ */
+ function _getCookies(){
+ $headers = '';
+ foreach ($this->cookies as $key => $val){
+ $headers .= "$key=$val; ";
+ }
+ $headers = substr($headers, 0, -2);
+ if ($headers !== '') $headers = "Cookie: $headers".HTTP_NL;
+ return $headers;
+ }
+
+ /**
+ * Encode data for posting
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _postEncode($data){
+ foreach($data as $key => $val){
+ if($url) $url .= '&';
+ $url .= urlencode($key).'='.urlencode($val);
+ }
+ return $url;
+ }
+
+ /**
+ * Encode data for posting using multipart encoding
+ *
+ * @fixme use of urlencode might be wrong here
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _postMultipartEncode($data){
+ $boundary = '--'.$this->boundary;
+ $out = '';
+ foreach($data as $key => $val){
+ $out .= $boundary.HTTP_NL;
+ if(!is_array($val)){
+ $out .= 'Content-Disposition: form-data; name="'.urlencode($key).'"'.HTTP_NL;
+ $out .= HTTP_NL; // end of headers
+ $out .= $val;
+ $out .= HTTP_NL;
+ }else{
+ $out .= 'Content-Disposition: form-data; name="'.urlencode($key).'"';
+ if($val['filename']) $out .= '; filename="'.urlencode($val['filename']).'"';
+ $out .= HTTP_NL;
+ if($val['mimetype']) $out .= 'Content-Type: '.$val['mimetype'].HTTP_NL;
+ $out .= HTTP_NL; // end of headers
+ $out .= $val['body'];
+ $out .= HTTP_NL;
+ }
+ }
+ $out .= "$boundary--".HTTP_NL;
+ return $out;
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php b/mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php
new file mode 100644
index 000000000..2752e31f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php
@@ -0,0 +1,817 @@
+<?php
+/**
+ * IXR - The Inutio XML-RPC Library - (c) Incutio Ltd 2002
+ *
+ * @version 1.61
+ * @author Simon Willison
+ * @date 11th July 2003
+ * @link http://scripts.incutio.com/xmlrpc/
+ * @link http://scripts.incutio.com/xmlrpc/manual.php
+ * @license Artistic License http://www.opensource.org/licenses/artistic-license.php
+ *
+ * Modified for DokuWiki
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+
+class IXR_Value {
+ var $data;
+ var $type;
+ function IXR_Value ($data, $type = false) {
+ $this->data = $data;
+ if (!$type) {
+ $type = $this->calculateType();
+ }
+ $this->type = $type;
+ if ($type == 'struct') {
+ /* Turn all the values in the array in to new IXR_Value objects */
+ foreach ($this->data as $key => $value) {
+ $this->data[$key] = new IXR_Value($value);
+ }
+ }
+ if ($type == 'array') {
+ for ($i = 0, $j = count($this->data); $i < $j; $i++) {
+ $this->data[$i] = new IXR_Value($this->data[$i]);
+ }
+ }
+ }
+ function calculateType() {
+ if ($this->data === true || $this->data === false) {
+ return 'boolean';
+ }
+ if (is_integer($this->data)) {
+ return 'int';
+ }
+ if (is_double($this->data)) {
+ return 'double';
+ }
+ // Deal with IXR object types base64 and date
+ if (is_object($this->data) && is_a($this->data, 'IXR_Date')) {
+ return 'date';
+ }
+ if (is_object($this->data) && is_a($this->data, 'IXR_Base64')) {
+ return 'base64';
+ }
+ // If it is a normal PHP object convert it in to a struct
+ if (is_object($this->data)) {
+
+ $this->data = get_object_vars($this->data);
+ return 'struct';
+ }
+ if (!is_array($this->data)) {
+ return 'string';
+ }
+ /* We have an array - is it an array or a struct ? */
+ if ($this->isStruct($this->data)) {
+ return 'struct';
+ } else {
+ return 'array';
+ }
+ }
+ function getXml() {
+ /* Return XML for this value */
+ switch ($this->type) {
+ case 'boolean':
+ return '<boolean>'.(($this->data) ? '1' : '0').'</boolean>';
+ break;
+ case 'int':
+ return '<int>'.$this->data.'</int>';
+ break;
+ case 'double':
+ return '<double>'.$this->data.'</double>';
+ break;
+ case 'string':
+ return '<string>'.htmlspecialchars($this->data).'</string>';
+ break;
+ case 'array':
+ $return = '<array><data>'."\n";
+ foreach ($this->data as $item) {
+ $return .= ' <value>'.$item->getXml()."</value>\n";
+ }
+ $return .= '</data></array>';
+ return $return;
+ break;
+ case 'struct':
+ $return = '<struct>'."\n";
+ foreach ($this->data as $name => $value) {
+ $return .= " <member><name>$name</name><value>";
+ $return .= $value->getXml()."</value></member>\n";
+ }
+ $return .= '</struct>';
+ return $return;
+ break;
+ case 'date':
+ case 'base64':
+ return $this->data->getXml();
+ break;
+ }
+ return false;
+ }
+ function isStruct($array) {
+ /* Nasty function to check if an array is a struct or not */
+ $expected = 0;
+ foreach ($array as $key => $value) {
+ if ((string)$key != (string)$expected) {
+ return true;
+ }
+ $expected++;
+ }
+ return false;
+ }
+}
+
+
+class IXR_Message {
+ var $message;
+ var $messageType; // methodCall / methodResponse / fault
+ var $faultCode;
+ var $faultString;
+ var $methodName;
+ var $params;
+ // Current variable stacks
+ var $_arraystructs = array(); // The stack used to keep track of the current array/struct
+ var $_arraystructstypes = array(); // Stack keeping track of if things are structs or array
+ var $_currentStructName = array(); // A stack as well
+ var $_param;
+ var $_value;
+ var $_currentTag;
+ var $_currentTagContents;
+ // The XML parser
+ var $_parser;
+ function IXR_Message ($message) {
+ $this->message = $message;
+ }
+ function parse() {
+ // first remove the XML declaration
+ $this->message = preg_replace('/<\?xml(.*)?\?'.'>/', '', $this->message);
+ // workaround for a bug in PHP/libxml2, see http://bugs.php.net/bug.php?id=45996
+ $this->message = str_replace('&lt;', '&#60;', $this->message);
+ $this->message = str_replace('&gt;', '&#62;', $this->message);
+ $this->message = str_replace('&amp;', '&#38;', $this->message);
+ $this->message = str_replace('&apos;', '&#39;', $this->message);
+ $this->message = str_replace('&quot;', '&#34;', $this->message);
+ if (trim($this->message) == '') {
+ return false;
+ }
+ $this->_parser = xml_parser_create();
+ // Set XML parser to take the case of tags in to account
+ xml_parser_set_option($this->_parser, XML_OPTION_CASE_FOLDING, false);
+ // Set XML parser callback functions
+ xml_set_object($this->_parser, $this);
+ xml_set_element_handler($this->_parser, 'tag_open', 'tag_close');
+ xml_set_character_data_handler($this->_parser, 'cdata');
+ if (!xml_parse($this->_parser, $this->message)) {
+ /* die(sprintf('XML error: %s at line %d',
+ xml_error_string(xml_get_error_code($this->_parser)),
+ xml_get_current_line_number($this->_parser))); */
+ return false;
+ }
+ xml_parser_free($this->_parser);
+ // Grab the error messages, if any
+ if ($this->messageType == 'fault') {
+ $this->faultCode = $this->params[0]['faultCode'];
+ $this->faultString = $this->params[0]['faultString'];
+ }
+ return true;
+ }
+ function tag_open($parser, $tag, $attr) {
+ $this->currentTag = $tag;
+ $this->_currentTagContents = '';
+ switch($tag) {
+ case 'methodCall':
+ case 'methodResponse':
+ case 'fault':
+ $this->messageType = $tag;
+ break;
+ /* Deal with stacks of arrays and structs */
+ case 'data': // data is to all intents and puposes more interesting than array
+ $this->_arraystructstypes[] = 'array';
+ $this->_arraystructs[] = array();
+ break;
+ case 'struct':
+ $this->_arraystructstypes[] = 'struct';
+ $this->_arraystructs[] = array();
+ break;
+ }
+ }
+ function cdata($parser, $cdata) {
+ $this->_currentTagContents .= $cdata;
+ }
+ function tag_close($parser, $tag) {
+ $valueFlag = false;
+ switch($tag) {
+ case 'int':
+ case 'i4':
+ $value = (int)trim($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ case 'double':
+ $value = (double)trim($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ case 'string':
+ $value = (string)$this->_currentTagContents;
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ case 'dateTime.iso8601':
+ $value = new IXR_Date(trim($this->_currentTagContents));
+ // $value = $iso->getTimestamp();
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ case 'value':
+ // "If no type is indicated, the type is string."
+ if (trim($this->_currentTagContents) != '') {
+ $value = (string)$this->_currentTagContents;
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ }
+ break;
+ case 'boolean':
+ $value = (boolean)trim($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ case 'base64':
+ $value = base64_decode($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ $valueFlag = true;
+ break;
+ /* Deal with stacks of arrays and structs */
+ case 'data':
+ case 'struct':
+ $value = array_pop($this->_arraystructs);
+ array_pop($this->_arraystructstypes);
+ $valueFlag = true;
+ break;
+ case 'member':
+ array_pop($this->_currentStructName);
+ break;
+ case 'name':
+ $this->_currentStructName[] = trim($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ break;
+ case 'methodName':
+ $this->methodName = trim($this->_currentTagContents);
+ $this->_currentTagContents = '';
+ break;
+ }
+ if ($valueFlag) {
+ /*
+ if (!is_array($value) && !is_object($value)) {
+ $value = trim($value);
+ }
+ */
+ if (count($this->_arraystructs) > 0) {
+ // Add value to struct or array
+ if ($this->_arraystructstypes[count($this->_arraystructstypes)-1] == 'struct') {
+ // Add to struct
+ $this->_arraystructs[count($this->_arraystructs)-1][$this->_currentStructName[count($this->_currentStructName)-1]] = $value;
+ } else {
+ // Add to array
+ $this->_arraystructs[count($this->_arraystructs)-1][] = $value;
+ }
+ } else {
+ // Just add as a paramater
+ $this->params[] = $value;
+ }
+ }
+ }
+}
+
+
+class IXR_Server {
+ var $data;
+ var $callbacks = array();
+ var $message;
+ var $capabilities;
+ function IXR_Server($callbacks = false, $data = false) {
+ $this->setCapabilities();
+ if ($callbacks) {
+ $this->callbacks = $callbacks;
+ }
+ $this->setCallbacks();
+ $this->serve($data);
+ }
+ function serve($data = false) {
+ if (!$data) {
+ global $HTTP_RAW_POST_DATA;
+ if (!$HTTP_RAW_POST_DATA) {
+ die('XML-RPC server accepts POST requests only.');
+ }
+ $data = $HTTP_RAW_POST_DATA;
+ }
+ $this->message = new IXR_Message($data);
+ if (!$this->message->parse()) {
+ $this->error(-32700, 'parse error. not well formed');
+ }
+ if ($this->message->messageType != 'methodCall') {
+ $this->error(-32600, 'server error. invalid xml-rpc. not conforming to spec. Request must be a methodCall');
+ }
+ $result = $this->call($this->message->methodName, $this->message->params);
+ // Is the result an error?
+ if (is_a($result, 'IXR_Error')) {
+ $this->error($result);
+ }
+ // Encode the result
+ $r = new IXR_Value($result);
+ $resultxml = $r->getXml();
+ // Create the XML
+ $xml = <<<EOD
+<methodResponse>
+ <params>
+ <param>
+ <value>
+ $resultxml
+ </value>
+ </param>
+ </params>
+</methodResponse>
+
+EOD;
+ // Send it
+ $this->output($xml);
+ }
+ function call($methodname, $args) {
+ if (!$this->hasMethod($methodname)) {
+ return new IXR_Error(-32601, 'server error. requested method '.$methodname.' does not exist.');
+ }
+ $method = $this->callbacks[$methodname];
+ // Perform the callback and send the response
+
+# Removed for DokuWiki to have a more consistent interface
+# if (count($args) == 1) {
+# // If only one paramater just send that instead of the whole array
+# $args = $args[0];
+# }
+
+
+# Adjusted for DokuWiki to use call_user_func_array
+
+ // args need to be an array
+ $args = (array) $args;
+
+ // Are we dealing with a function or a method?
+ if (substr($method, 0, 5) == 'this:') {
+ // It's a class method - check it exists
+ $method = substr($method, 5);
+ if (!method_exists($this, $method)) {
+ return new IXR_Error(-32601, 'server error. requested class method "'.$method.'" does not exist.');
+ }
+ // Call the method
+ #$result = $this->$method($args);
+ $result = call_user_func_array(array(&$this,$method),$args);
+ } elseif (substr($method, 0, 7) == 'plugin:') {
+ require_once(DOKU_INC.'inc/pluginutils.php');
+ list($pluginname, $callback) = explode(':', substr($method, 7), 2);
+ if(!plugin_isdisabled($pluginname)) {
+ $plugin = plugin_load('action', $pluginname);
+ return call_user_func_array(array($plugin, $callback), $args);
+ } else {
+ return new IXR_Error(-99999, 'server error');
+ }
+ } else {
+ // It's a function - does it exist?
+ if (!function_exists($method)) {
+ return new IXR_Error(-32601, 'server error. requested function "'.$method.'" does not exist.');
+ }
+ // Call the function
+ #$result = $method($args);
+ $result = call_user_func_array($method,$args);
+ }
+ return $result;
+ }
+
+ function error($error, $message = false) {
+ // Accepts either an error object or an error code and message
+ if ($message && !is_object($error)) {
+ $error = new IXR_Error($error, $message);
+ }
+ $this->output($error->getXml());
+ }
+ function output($xml) {
+ $xml = '<?xml version="1.0"?>'."\n".$xml;
+ $length = strlen($xml);
+ header('Connection: close');
+ header('Content-Length: '.$length);
+ header('Content-Type: text/xml');
+ header('Date: '.date('r'));
+ echo $xml;
+ exit;
+ }
+ function hasMethod($method) {
+ return in_array($method, array_keys($this->callbacks));
+ }
+ function setCapabilities() {
+ // Initialises capabilities array
+ $this->capabilities = array(
+ 'xmlrpc' => array(
+ 'specUrl' => 'http://www.xmlrpc.com/spec',
+ 'specVersion' => 1
+ ),
+ 'faults_interop' => array(
+ 'specUrl' => 'http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php',
+ 'specVersion' => 20010516
+ ),
+ 'system.multicall' => array(
+ 'specUrl' => 'http://www.xmlrpc.com/discuss/msgReader$1208',
+ 'specVersion' => 1
+ ),
+ );
+ }
+ function getCapabilities() {
+ return $this->capabilities;
+ }
+ function setCallbacks() {
+ $this->callbacks['system.getCapabilities'] = 'this:getCapabilities';
+ $this->callbacks['system.listMethods'] = 'this:listMethods';
+ $this->callbacks['system.multicall'] = 'this:multiCall';
+ }
+ function listMethods() {
+ // Returns a list of methods - uses array_reverse to ensure user defined
+ // methods are listed before server defined methods
+ return array_reverse(array_keys($this->callbacks));
+ }
+ function multiCall($methodcalls) {
+ // See http://www.xmlrpc.com/discuss/msgReader$1208
+ $return = array();
+ foreach ($methodcalls as $call) {
+ $method = $call['methodName'];
+ $params = $call['params'];
+ if ($method == 'system.multicall') {
+ $result = new IXR_Error(-32600, 'Recursive calls to system.multicall are forbidden');
+ } else {
+ $result = $this->call($method, $params);
+ }
+ if (is_a($result, 'IXR_Error')) {
+ $return[] = array(
+ 'faultCode' => $result->code,
+ 'faultString' => $result->message
+ );
+ } else {
+ $return[] = array($result);
+ }
+ }
+ return $return;
+ }
+}
+
+class IXR_Request {
+ var $method;
+ var $args;
+ var $xml;
+ function IXR_Request($method, $args) {
+ $this->method = $method;
+ $this->args = $args;
+ $this->xml = <<<EOD
+<?xml version="1.0"?>
+<methodCall>
+<methodName>{$this->method}</methodName>
+<params>
+
+EOD;
+ foreach ($this->args as $arg) {
+ $this->xml .= '<param><value>';
+ $v = new IXR_Value($arg);
+ $this->xml .= $v->getXml();
+ $this->xml .= "</value></param>\n";
+ }
+ $this->xml .= '</params></methodCall>';
+ }
+ function getLength() {
+ return strlen($this->xml);
+ }
+ function getXml() {
+ return $this->xml;
+ }
+}
+
+/**
+ * Changed for DokuWiki to use DokuHTTPClient
+ *
+ * This should be compatible to the original class, but uses DokuWiki's
+ * HTTP client library which will respect proxy settings
+ *
+ * Because the XMLRPC client is not used in DokuWiki currently this is completely
+ * untested
+ */
+class IXR_Client extends DokuHTTPClient {
+ var $posturl = '';
+ var $message = false;
+ var $xmlerror = false;
+
+ function IXR_Client($server, $path = false, $port = 80) {
+ $this->DokuHTTPClient();
+ if (!$path) {
+ // Assume we have been given a URL instead
+ $this->posturl = $server;
+ }else{
+ $this->posturl = 'http://'.$server.':'.$port.$path;
+ }
+ }
+
+ function query() {
+ $args = func_get_args();
+ $method = array_shift($args);
+ $request = new IXR_Request($method, $args);
+ $xml = $request->getXml();
+
+ $this->headers['Content-Type'] = 'text/xml';
+ if(!$this->sendRequest($this->posturl,$xml,'POST')){
+ $this->xmlerror = new IXR_Error(-32300, 'transport error - '.$this->error);
+ return false;
+ }
+
+ // Check HTTP Response code
+ if($this->status < 200 || $this->status > 206){
+ $this->xmlerror = new IXR_Error(-32300, 'transport error - HTTP status '.$this->status);
+ return false;
+ }
+
+ // Now parse what we've got back
+ $this->message = new IXR_Message($this->resp_body);
+ if (!$this->message->parse()) {
+ // XML error
+ $this->xmlerror = new IXR_Error(-32700, 'parse error. not well formed');
+ return false;
+ }
+ // Is the message a fault?
+ if ($this->message->messageType == 'fault') {
+ $this->xmlerror = new IXR_Error($this->message->faultCode, $this->message->faultString);
+ return false;
+ }
+ // Message must be OK
+ return true;
+ }
+ function getResponse() {
+ // methodResponses can only have one param - return that
+ return $this->message->params[0];
+ }
+ function isError() {
+ return (is_object($this->xmlerror));
+ }
+ function getErrorCode() {
+ return $this->xmlerror->code;
+ }
+ function getErrorMessage() {
+ return $this->xmlerror->message;
+ }
+}
+
+
+class IXR_Error {
+ var $code;
+ var $message;
+ function IXR_Error($code, $message) {
+ $this->code = $code;
+ $this->message = $message;
+ }
+ function getXml() {
+ $xml = <<<EOD
+<methodResponse>
+ <fault>
+ <value>
+ <struct>
+ <member>
+ <name>faultCode</name>
+ <value><int>{$this->code}</int></value>
+ </member>
+ <member>
+ <name>faultString</name>
+ <value><string>{$this->message}</string></value>
+ </member>
+ </struct>
+ </value>
+ </fault>
+</methodResponse>
+
+EOD;
+ return $xml;
+ }
+}
+
+
+class IXR_Date {
+ var $year;
+ var $month;
+ var $day;
+ var $hour;
+ var $minute;
+ var $second;
+ function IXR_Date($time) {
+ // $time can be a PHP timestamp or an ISO one
+ if (is_numeric($time)) {
+ $this->parseTimestamp($time);
+ } else {
+ $this->parseIso($time);
+ }
+ }
+ function parseTimestamp($timestamp) {
+ $this->year = gmdate('Y', $timestamp);
+ $this->month = gmdate('m', $timestamp);
+ $this->day = gmdate('d', $timestamp);
+ $this->hour = gmdate('H', $timestamp);
+ $this->minute = gmdate('i', $timestamp);
+ $this->second = gmdate('s', $timestamp);
+ }
+ function parseIso($iso) {
+ $this->year = substr($iso, 0, 4);
+ $this->month = substr($iso, 5, 2);
+ $this->day = substr($iso, 8, 2);
+ $this->hour = substr($iso, 11, 2);
+ $this->minute = substr($iso, 14, 2);
+ $this->second = substr($iso, 17, 2);
+ }
+ function getIso() {
+ return $this->year.'-'.$this->month.'-'.$this->day.'T'.$this->hour.':'.$this->minute.':'.$this->second;
+ }
+ function getXml() {
+ return '<dateTime.iso8601>'.$this->getIso().'</dateTime.iso8601>';
+ }
+ function getTimestamp() {
+ return gmmktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year);
+ }
+}
+
+
+class IXR_Base64 {
+ var $data;
+ function IXR_Base64($data) {
+ $this->data = $data;
+ }
+ function getXml() {
+ return '<base64>'.base64_encode($this->data).'</base64>';
+ }
+}
+
+
+class IXR_IntrospectionServer extends IXR_Server {
+ var $signatures;
+ var $help;
+ function IXR_IntrospectionServer() {
+ $this->setCallbacks();
+ $this->setCapabilities();
+ $this->capabilities['introspection'] = array(
+ 'specUrl' => 'http://xmlrpc.usefulinc.com/doc/reserved.html',
+ 'specVersion' => 1
+ );
+ $this->addCallback(
+ 'system.methodSignature',
+ 'this:methodSignature',
+ array('array', 'string'),
+ 'Returns an array describing the return type and required parameters of a method'
+ );
+ $this->addCallback(
+ 'system.getCapabilities',
+ 'this:getCapabilities',
+ array('struct'),
+ 'Returns a struct describing the XML-RPC specifications supported by this server'
+ );
+ $this->addCallback(
+ 'system.listMethods',
+ 'this:listMethods',
+ array('array'),
+ 'Returns an array of available methods on this server'
+ );
+ $this->addCallback(
+ 'system.methodHelp',
+ 'this:methodHelp',
+ array('string', 'string'),
+ 'Returns a documentation string for the specified method'
+ );
+ }
+ function addCallback($method, $callback, $args, $help) {
+ $this->callbacks[$method] = $callback;
+ $this->signatures[$method] = $args;
+ $this->help[$method] = $help;
+ }
+ function call($methodname, $args) {
+ // Make sure it's in an array
+ if ($args && !is_array($args)) {
+ $args = array($args);
+ }
+ // Over-rides default call method, adds signature check
+ if (!$this->hasMethod($methodname)) {
+ return new IXR_Error(-32601, 'server error. requested method "'.$this->message->methodName.'" not specified.');
+ }
+ $method = $this->callbacks[$methodname];
+ $signature = $this->signatures[$methodname];
+ $returnType = array_shift($signature);
+ // Check the number of arguments. Check only, if the minimum count of parameters is specified. More parameters are possible.
+ // This is a hack to allow optional parameters...
+ if (count($args) < count($signature)) {
+ // print 'Num of args: '.count($args).' Num in signature: '.count($signature);
+ return new IXR_Error(-32602, 'server error. wrong number of method parameters');
+ }
+ // Check the argument types
+ $ok = true;
+ $argsbackup = $args;
+ for ($i = 0, $j = count($args); $i < $j; $i++) {
+ $arg = array_shift($args);
+ $type = array_shift($signature);
+ switch ($type) {
+ case 'int':
+ case 'i4':
+ if (is_array($arg) || !is_int($arg)) {
+ $ok = false;
+ }
+ break;
+ case 'base64':
+ case 'string':
+ if (!is_string($arg)) {
+ $ok = false;
+ }
+ break;
+ case 'boolean':
+ if ($arg !== false && $arg !== true) {
+ $ok = false;
+ }
+ break;
+ case 'float':
+ case 'double':
+ if (!is_float($arg)) {
+ $ok = false;
+ }
+ break;
+ case 'date':
+ case 'dateTime.iso8601':
+ if (!is_a($arg, 'IXR_Date')) {
+ $ok = false;
+ }
+ break;
+ }
+ if (!$ok) {
+ return new IXR_Error(-32602, 'server error. invalid method parameters');
+ }
+ }
+ // It passed the test - run the "real" method call
+ return parent::call($methodname, $argsbackup);
+ }
+ function methodSignature($method) {
+ if (!$this->hasMethod($method)) {
+ return new IXR_Error(-32601, 'server error. requested method "'.$method.'" not specified.');
+ }
+ // We should be returning an array of types
+ $types = $this->signatures[$method];
+ $return = array();
+ foreach ($types as $type) {
+ switch ($type) {
+ case 'string':
+ $return[] = 'string';
+ break;
+ case 'int':
+ case 'i4':
+ $return[] = 42;
+ break;
+ case 'double':
+ $return[] = 3.1415;
+ break;
+ case 'dateTime.iso8601':
+ $return[] = new IXR_Date(time());
+ break;
+ case 'boolean':
+ $return[] = true;
+ break;
+ case 'base64':
+ $return[] = new IXR_Base64('base64');
+ break;
+ case 'array':
+ $return[] = array('array');
+ break;
+ case 'struct':
+ $return[] = array('struct' => 'struct');
+ break;
+ }
+ }
+ return $return;
+ }
+ function methodHelp($method) {
+ return $this->help[$method];
+ }
+}
+
+
+class IXR_ClientMulticall extends IXR_Client {
+ var $calls = array();
+ function IXR_ClientMulticall($server, $path = false, $port = 80) {
+ parent::IXR_Client($server, $path, $port);
+ //$this->useragent = 'The Incutio XML-RPC PHP Library (multicall client)';
+ }
+ function addCall() {
+ $args = func_get_args();
+ $methodName = array_shift($args);
+ $struct = array(
+ 'methodName' => $methodName,
+ 'params' => $args
+ );
+ $this->calls[] = $struct;
+ }
+ function query() {
+ // Prepare multicall, then call the parent::query() method
+ return parent::query('system.multicall', $this->calls);
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/JSON.php b/mod/dokuwiki/vendors/dokuwiki/inc/JSON.php
new file mode 100644
index 000000000..ea66c9c32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/JSON.php
@@ -0,0 +1,624 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Converts to and from JSON format.
+ *
+ * JSON (JavaScript Object Notation) is a lightweight data-interchange
+ * format. It is easy for humans to read and write. It is easy for machines
+ * to parse and generate. It is based on a subset of the JavaScript
+ * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
+ * This feature can also be found in Python. JSON is a text format that is
+ * completely language independent but uses conventions that are familiar
+ * to programmers of the C-family of languages, including C, C++, C#, Java,
+ * JavaScript, Perl, TCL, and many others. These properties make JSON an
+ * ideal data-interchange language.
+ *
+ * This package provides a simple encoder and decoder for JSON notation. It
+ * is intended for use with client-side Javascript applications that make
+ * use of HTTPRequest to perform server communication functions - data can
+ * be encoded into JSON notation for use in a client-side javascript, or
+ * decoded from incoming Javascript requests. JSON format is native to
+ * Javascript, and can be directly eval()'ed with no further parsing
+ * overhead
+ *
+ * All strings should be in ASCII or UTF-8 format!
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: 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.
+ *
+ * THIS SOFTWARE IS PROVIDED ``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 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.
+ *
+ * @category
+ * @package
+ * @author Michal Migurski <mike-json@teczno.com>
+ * @author Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @copyright 2005 Michal Migurski
+ * @license http://www.freebsd.org/copyright/freebsd-license.html
+ * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
+ */
+
+// for DokuWiki
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/utf8.php');
+
+/**
+ * Marker constant for JSON::decode(), used to flag stack state
+ */
+define('JSON_SLICE', 1);
+
+/**
+ * Marker constant for JSON::decode(), used to flag stack state
+ */
+define('JSON_IN_STR', 2);
+
+/**
+ * Marker constant for JSON::decode(), used to flag stack state
+ */
+define('JSON_IN_ARR', 4);
+
+/**
+ * Marker constant for JSON::decode(), used to flag stack state
+ */
+define('JSON_IN_OBJ', 8);
+
+/**
+ * Marker constant for JSON::decode(), used to flag stack state
+ */
+define('JSON_IN_CMT', 16);
+
+/**
+ * Behavior switch for JSON::decode()
+ */
+define('JSON_LOOSE_TYPE', 10);
+
+/**
+ * Behavior switch for JSON::decode()
+ */
+define('JSON_STRICT_TYPE', 11);
+
+/**
+ * Converts to and from JSON format.
+ *
+ * @category
+ * @package
+ * @author Michal Migurski <mike-json@teczno.com>
+ * @author Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @copyright 2005 Michal Migurski
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version
+ * @link
+ * @see
+ * @since
+ * @deprecated
+ */
+class JSON
+{
+ /**
+ * constructs a new JSON instance
+ *
+ * @param int $use object behavior: when encoding or decoding,
+ * be loose or strict about object/array usage
+ *
+ * possible values:
+ * JSON_STRICT_TYPE - strict typing, default
+ * "{...}" syntax creates objects in decode.
+ * JSON_LOOSE_TYPE - loose typing
+ * "{...}" syntax creates associative arrays in decode.
+ */
+ function JSON($use=JSON_STRICT_TYPE)
+ {
+ $this->use = $use;
+ }
+
+ /**
+ * encodes an arbitrary variable into JSON format
+ *
+ * @param mixed $var any number, boolean, string, array, or object to be encoded.
+ * see argument 1 to JSON() above for array-parsing behavior.
+ * if var is a strng, note that encode() always expects it
+ * to be in ASCII or UTF-8 format!
+ *
+ * @return string JSON string representation of input var
+ * @access public
+ */
+ function encode($var)
+ {
+ switch (gettype($var)) {
+ case 'boolean':
+ return $var ? 'true' : 'false';
+
+ case 'NULL':
+ return 'null';
+
+ case 'integer':
+ return sprintf('%d', $var);
+
+ case 'double':
+ case 'float':
+ return sprintf('%f', $var);
+
+ case 'string':
+ // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
+ $ascii = '';
+ $strlen_var = strlen($var);
+
+ /*
+ * Iterate over every character in the string,
+ * escaping with a slash or encoding to UTF-8 where necessary
+ */
+ for ($c = 0; $c < $strlen_var; ++$c) {
+
+ $ord_var_c = ord($var{$c});
+
+ switch ($ord_var_c) {
+ case 0x08: $ascii .= '\b'; break;
+ case 0x09: $ascii .= '\t'; break;
+ case 0x0A: $ascii .= '\n'; break;
+ case 0x0C: $ascii .= '\f'; break;
+ case 0x0D: $ascii .= '\r'; break;
+
+ case 0x22:
+ case 0x2F:
+ case 0x5C:
+ // double quote, slash, slosh
+ $ascii .= '\\'.$var{$c};
+ break;
+
+ case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
+ // characters U-00000000 - U-0000007F (same as ASCII)
+ $ascii .= $var{$c};
+ break;
+
+ case (($ord_var_c & 0xE0) == 0xC0):
+ // characters U-00000080 - U-000007FF, mask 110XXXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c, ord($var{$c+1}));
+ $c+=1;
+ //$utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8');
+ $utf16 = utf8_to_utf16be($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF0) == 0xE0):
+ // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c+1}),
+ ord($var{$c+2}));
+ $c+=2;
+ //$utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8');
+ $utf16 = utf8_to_utf16be($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF8) == 0xF0):
+ // characters U-00010000 - U-001FFFFF, mask 11110XXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c+1}),
+ ord($var{$c+2}),
+ ord($var{$c+3}));
+ $c+=3;
+ //$utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8');
+ $utf16 = utf8_to_utf16be($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFC) == 0xF8):
+ // characters U-00200000 - U-03FFFFFF, mask 111110XX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c+1}),
+ ord($var{$c+2}),
+ ord($var{$c+3}),
+ ord($var{$c+4}));
+ $c+=4;
+ //$utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8');
+ $utf16 = utf8_to_utf16be($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFE) == 0xFC):
+ // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c+1}),
+ ord($var{$c+2}),
+ ord($var{$c+3}),
+ ord($var{$c+4}),
+ ord($var{$c+5}));
+ $c+=5;
+ //$utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8');
+ $utf16 = utf8_to_utf16be($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+ }
+ }
+
+ return '"'.$ascii.'"';
+
+ case 'array':
+ /*
+ * As per JSON spec if any array key is not an integer
+ * we must treat the the whole array as an object. We
+ * also try to catch a sparsely populated associative
+ * array with numeric keys here because some JS engines
+ * will create an array with empty indexes up to
+ * max_index which can cause memory issues and because
+ * the keys, which may be relevant, will be remapped
+ * otherwise.
+ *
+ * As per the ECMA and JSON specification an object may
+ * have any string as a property. Unfortunately due to
+ * a hole in the ECMA specification if the key is a
+ * ECMA reserved word or starts with a digit the
+ * parameter is only accessible using ECMAScript's
+ * bracket notation.
+ */
+
+ // treat as a JSON object
+ if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
+ return sprintf('{%s}', join(',', array_map(array($this, 'name_value'),
+ array_keys($var),
+ array_values($var))));
+ }
+
+ // treat it like a regular array
+ return sprintf('[%s]', join(',', array_map(array($this, 'encode'), $var)));
+
+ case 'object':
+ $vars = get_object_vars($var);
+ return sprintf('{%s}', join(',', array_map(array($this, 'name_value'),
+ array_keys($vars),
+ array_values($vars))));
+
+ default:
+ return '';
+ }
+ }
+
+ /**
+ * encodes an arbitrary variable into JSON format, alias for encode()
+ */
+ function enc($var)
+ {
+ return $this->encode($var);
+ }
+
+ /** function name_value
+ * array-walking function for use in generating JSON-formatted name-value pairs
+ *
+ * @param string $name name of key to use
+ * @param mixed $value reference to an array element to be encoded
+ *
+ * @return string JSON-formatted name-value pair, like '"name":value'
+ * @access private
+ */
+ function name_value($name, $value)
+ {
+ return (sprintf("%s:%s", $this->encode(strval($name)), $this->encode($value)));
+ }
+
+ /**
+ * reduce a string by removing leading and trailing comments and whitespace
+ *
+ * @param $str string string value to strip of comments and whitespace
+ *
+ * @return string string value stripped of comments and whitespace
+ * @access private
+ */
+ function reduce_string($str)
+ {
+ $str = preg_replace(array(
+
+ // eliminate single line comments in '// ...' form
+ '#^\s*//(.+)$#m',
+
+ // eliminate multi-line comments in '/* ... */' form, at start of string
+ '#^\s*/\*(.+)\*/#Us',
+
+ // eliminate multi-line comments in '/* ... */' form, at end of string
+ '#/\*(.+)\*/\s*$#Us'
+
+ ), '', $str);
+
+ // eliminate extraneous space
+ return trim($str);
+ }
+
+ /**
+ * decodes a JSON string into appropriate variable
+ *
+ * @param string $str JSON-formatted string
+ *
+ * @return mixed number, boolean, string, array, or object
+ * corresponding to given JSON input string.
+ * See argument 1 to JSON() above for object-output behavior.
+ * Note that decode() always returns strings
+ * in ASCII or UTF-8 format!
+ * @access public
+ */
+ function decode($str)
+ {
+ $str = $this->reduce_string($str);
+
+ switch (strtolower($str)) {
+ case 'true':
+ return true;
+
+ case 'false':
+ return false;
+
+ case 'null':
+ return null;
+
+ default:
+ if (is_numeric($str)) {
+ // Lookie-loo, it's a number
+
+ // This would work on its own, but I'm trying to be
+ // good about returning integers where appropriate:
+ // return (float)$str;
+
+ // Return float or int, as appropriate
+ return ((float)$str == (integer)$str)
+ ? (integer)$str
+ : (float)$str;
+
+ } elseif (preg_match('/^("|\').+("|\')$/s', $str, $m) && $m[1] == $m[2]) {
+ // STRINGS RETURNED IN UTF-8 FORMAT
+ $delim = substr($str, 0, 1);
+ $chrs = substr($str, 1, -1);
+ $utf8 = '';
+ $strlen_chrs = strlen($chrs);
+
+ for ($c = 0; $c < $strlen_chrs; ++$c) {
+
+ $substr_chrs_c_2 = substr($chrs, $c, 2);
+ $ord_chrs_c = ord($chrs{$c});
+
+ switch ($substr_chrs_c_2) {
+ case '\b': $utf8 .= chr(0x08); $c+=1; break;
+ case '\t': $utf8 .= chr(0x09); $c+=1; break;
+ case '\n': $utf8 .= chr(0x0A); $c+=1; break;
+ case '\f': $utf8 .= chr(0x0C); $c+=1; break;
+ case '\r': $utf8 .= chr(0x0D); $c+=1; break;
+
+ case '\\"':
+ case '\\\'':
+ case '\\\\':
+ case '\\/':
+ if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
+ ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
+ $utf8 .= $chrs{++$c};
+ }
+ break;
+
+ default:
+ if (preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6))) {
+ // single, escaped unicode character
+ $utf16 = chr(hexdec(substr($chrs, ($c+2), 2)))
+ . chr(hexdec(substr($chrs, ($c+4), 2)));
+ //$utf8 .= mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
+ $utf8 .= utf16be_to_utf8($utf16);
+ $c+=5;
+
+ } elseif(($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F)) {
+ $utf8 .= $chrs{$c};
+
+ } elseif(($ord_chrs_c & 0xE0) == 0xC0) {
+ // characters U-00000080 - U-000007FF, mask 110XXXXX
+ //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 2); $c += 1;
+
+ } elseif(($ord_chrs_c & 0xF0) == 0xE0) {
+ // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 3); $c += 2;
+
+ } elseif(($ord_chrs_c & 0xF8) == 0xF0) {
+ // characters U-00010000 - U-001FFFFF, mask 11110XXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 4); $c += 3;
+
+ } elseif(($ord_chrs_c & 0xFC) == 0xF8) {
+ // characters U-00200000 - U-03FFFFFF, mask 111110XX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 5); $c += 4;
+
+ } elseif(($ord_chrs_c & 0xFE) == 0xFC) {
+ // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $utf8 .= substr($chrs, $c, 6); $c += 5;
+
+ }
+ break;
+
+ }
+
+ }
+
+ return $utf8;
+
+ } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
+ // array, or object notation
+
+ if ($str{0} == '[') {
+ $stk = array(JSON_IN_ARR);
+ $arr = array();
+ } else {
+ if ($this->use == JSON_LOOSE_TYPE) {
+ $stk = array(JSON_IN_OBJ);
+ $obj = array();
+ } else {
+ $stk = array(JSON_IN_OBJ);
+ $obj = new stdClass();
+ }
+ }
+
+ array_push($stk, array('what' => JSON_SLICE,
+ 'where' => 0,
+ 'delim' => false));
+
+ $chrs = substr($str, 1, -1);
+ $chrs = $this->reduce_string($chrs);
+
+ if ($chrs == '') {
+ if (reset($stk) == JSON_IN_ARR) {
+ return $arr;
+
+ } else {
+ return $obj;
+
+ }
+ }
+
+ //print("\nparsing {$chrs}\n");
+
+ $strlen_chrs = strlen($chrs);
+
+ for ($c = 0; $c <= $strlen_chrs; ++$c) {
+
+ $top = end($stk);
+ $substr_chrs_c_2 = substr($chrs, $c, 2);
+
+ if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == JSON_SLICE))) {
+ // found a comma that is not inside a string, array, etc.,
+ // OR we've reached the end of the character list
+ $slice = substr($chrs, $top['where'], ($c - $top['where']));
+ array_push($stk, array('what' => JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
+ //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ if (reset($stk) == JSON_IN_ARR) {
+ // we are in an array, so just push an element onto the stack
+ array_push($arr, $this->decode($slice));
+
+ } elseif (reset($stk) == JSON_IN_OBJ) {
+ // we are in an object, so figure
+ // out the property name and set an
+ // element in an associative array,
+ // for now
+ if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+ // "name":value pair
+ $key = $this->decode($parts[1]);
+ $val = $this->decode($parts[2]);
+
+ if ($this->use == JSON_LOOSE_TYPE) {
+ $obj[$key] = $val;
+ } else {
+ $obj->$key = $val;
+ }
+ } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
+ // name:value pair, where name is unquoted
+ $key = $parts[1];
+ $val = $this->decode($parts[2]);
+
+ if ($this->use == JSON_LOOSE_TYPE) {
+ $obj[$key] = $val;
+ } else {
+ $obj->$key = $val;
+ }
+ }
+
+ }
+
+ } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) &&
+ in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) {
+ // found a quote, and we are not inside a string
+ array_push($stk, array('what' => JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
+ //print("Found start of string at {$c}\n");
+
+ } elseif (($chrs{$c} == $top['delim']) &&
+ ($top['what'] == JSON_IN_STR) &&
+ (($chrs{$c - 1} != "\\") ||
+ ($chrs{$c - 1} == "\\" && $chrs{$c - 2} == "\\"))) {
+ // found a quote, we're in a string, and it's not escaped
+ array_pop($stk);
+ //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
+
+ } elseif (($chrs{$c} == '[') &&
+ in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) {
+ // found a left-bracket, and we are in an array, object, or slice
+ array_push($stk, array('what' => JSON_IN_ARR, 'where' => $c, 'delim' => false));
+ //print("Found start of array at {$c}\n");
+
+ } elseif (($chrs{$c} == ']') && ($top['what'] == JSON_IN_ARR)) {
+ // found a right-bracket, and we're in an array
+ array_pop($stk);
+ //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ } elseif (($chrs{$c} == '{') &&
+ in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) {
+ // found a left-brace, and we are in an array, object, or slice
+ array_push($stk, array('what' => JSON_IN_OBJ, 'where' => $c, 'delim' => false));
+ //print("Found start of object at {$c}\n");
+
+ } elseif (($chrs{$c} == '}') && ($top['what'] == JSON_IN_OBJ)) {
+ // found a right-brace, and we're in an object
+ array_pop($stk);
+ //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ } elseif (($substr_chrs_c_2 == '/*') &&
+ in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) {
+ // found a comment start, and we are in an array, object, or slice
+ array_push($stk, array('what' => JSON_IN_CMT, 'where' => $c, 'delim' => false));
+ $c++;
+ //print("Found start of comment at {$c}\n");
+
+ } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == JSON_IN_CMT)) {
+ // found a comment end, and we're in one now
+ array_pop($stk);
+ $c++;
+
+ for ($i = $top['where']; $i <= $c; ++$i)
+ $chrs = substr_replace($chrs, ' ', $i, 1);
+
+ //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
+
+ }
+
+ }
+
+ if (reset($stk) == JSON_IN_ARR) {
+ return $arr;
+
+ } elseif (reset($stk) == JSON_IN_OBJ) {
+ return $obj;
+
+ }
+
+ }
+ }
+ }
+
+ /**
+ * decodes a JSON string into appropriate variable; alias for decode()
+ */
+ function dec($var)
+ {
+ return $this->decode($var);
+ }
+
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php b/mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php
new file mode 100644
index 000000000..cb1d7d694
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php
@@ -0,0 +1,3116 @@
+<?php
+/**
+ * JPEG metadata reader/writer
+ *
+ * @license PHP license 2.0 (http://www.php.net/license/2_02.txt)
+ * @link http://www.zonageek.com/software/php/jpeg/index.php
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Hakan Sandell <hakan.sandell@mydata.se>
+ * @todo Add support for Maker Notes, Extend for GIF and PNG metadata
+ */
+
+// This class is a modified and enhanced version of the JPEG class by
+// Sebastian Delmont. Original Copyright notice follows:
+//
+// +----------------------------------------------------------------------+
+// | PHP version 4.0 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 2.0 of the PHP license, |
+// | that is bundled with this package in the file LICENSE, and is |
+// | available at through the world-wide-web at |
+// | http://www.php.net/license/2_02.txt. |
+// | If you did not receive a copy of the PHP license and are unable to |
+// | obtain it through the world-wide-web, please send a note to |
+// | license@php.net so we can mail you a copy immediately. |
+// +----------------------------------------------------------------------+
+// | Authors: Sebastian Delmont <sdelmont@zonageek.com> |
+// +----------------------------------------------------------------------+
+
+class JpegMeta
+{
+ var $_fileName;
+ var $_fp = null;
+ var $_type = 'unknown';
+
+ var $_markers;
+ var $_info;
+
+
+ /**
+ * Constructor
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function JpegMeta($fileName)
+ {
+
+ $this->_fileName = $fileName;
+
+ $this->_fp = null;
+ $this->_type = 'unknown';
+
+ unset($this->_info);
+ unset($this->_markers);
+ }
+
+ /**
+ * Returns all gathered info as multidim array
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function & getRawInfo()
+ {
+ $this->_parseAll();
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ return $this->_info;
+ }
+
+ /**
+ * Returns basic image info
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function & getBasicInfo()
+ {
+ $this->_parseAll();
+
+ $info = array();
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $info['Name'] = $this->_info['file']['Name'];
+ if (isset($this->_info['file']['Url'])) {
+ $info['Url'] = $this->_info['file']['Url'];
+ $info['NiceSize'] = "???KB";
+ }
+ else {
+ $info['Size'] = $this->_info['file']['Size'];
+ $info['NiceSize'] = $this->_info['file']['NiceSize'];
+ }
+
+ if (@isset($this->_info['sof']['Format'])) {
+ $info['Format'] = $this->_info['sof']['Format'] . " JPEG";
+ }
+ else {
+ $info['Format'] = $this->_info['sof']['Format'] . " JPEG";
+ }
+
+ if (@isset($this->_info['sof']['ColorChannels'])) {
+ $info['ColorMode'] = ($this->_info['sof']['ColorChannels'] > 1) ? "Color" : "B&W";
+ }
+
+ $info['Width'] = $this->getWidth();
+ $info['Height'] = $this->getHeight();
+ $info['DimStr'] = $this->getDimStr();
+
+ $dates = $this->getDates();
+
+ $info['DateTime'] = $dates['EarliestTime'];
+ $info['DateTimeStr'] = $dates['EarliestTimeStr'];
+
+ $info['HasThumbnail'] = $this->hasThumbnail();
+
+ return $info;
+ }
+
+
+ /**
+ * Convinience function to access nearly all available Data
+ * through one function
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getField($fields)
+ {
+ if(!is_array($fields)) $fields = array($fields);
+ $info = false;
+ foreach($fields as $field){
+ if(strtolower(substr($field,0,5)) == 'iptc.'){
+ $info = $this->getIPTCField(substr($field,5));
+ }elseif(strtolower(substr($field,0,5)) == 'exif.'){
+ $info = $this->getExifField(substr($field,5));
+ }elseif(strtolower(substr($field,0,4)) == 'xmp.'){
+ $info = $this->getXmpField(substr($field,4));
+ }elseif(strtolower(substr($field,0,5)) == 'file.'){
+ $info = $this->getFileField(substr($field,5));
+ }elseif(strtolower(substr($field,0,5)) == 'date.'){
+ $info = $this->getDateField(substr($field,5));
+ }elseif(strtolower($field) == 'simple.camera'){
+ $info = $this->getCamera();
+ }elseif(strtolower($field) == 'simple.raw'){
+ return $this->getRawInfo();
+ }elseif(strtolower($field) == 'simple.title'){
+ $info = $this->getTitle();
+ }elseif(strtolower($field) == 'simple.shutterspeed'){
+ $info = $this->getShutterSpeed();
+ }else{
+ $info = $this->getExifField($field);
+ }
+ if($info != false) break;
+ }
+
+ if($info === false) $info = $alt;
+ if(is_array($info)){
+ if(isset($info['val'])){
+ $info = $info['val'];
+ }else{
+ $info = join(', ',$info);
+ }
+ }
+ return trim($info);
+ }
+
+ /**
+ * Convinience function to set nearly all available Data
+ * through one function
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function setField($field, $value)
+ {
+ if(strtolower(substr($field,0,5)) == 'iptc.'){
+ return $this->setIPTCField(substr($field,5),$value);
+ }elseif(strtolower(substr($field,0,5)) == 'exif.'){
+ return $this->setExifField(substr($field,5),$value);
+ }else{
+ return $this->setExifField($field,$value);
+ }
+ }
+
+ /**
+ * Convinience function to delete nearly all available Data
+ * through one function
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function deleteField($field)
+ {
+ if(strtolower(substr($field,0,5)) == 'iptc.'){
+ return $this->deleteIPTCField(substr($field,5));
+ }elseif(strtolower(substr($field,0,5)) == 'exif.'){
+ return $this->deleteExifField(substr($field,5));
+ }else{
+ return $this->deleteExifField($field);
+ }
+ }
+
+ /**
+ * Return a date field
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getDateField($field)
+ {
+ if (!isset($this->_info['dates'])) {
+ $this->_info['dates'] = $this->getDates();
+ }
+
+ if (isset($this->_info['dates'][$field])) {
+ return $this->_info['dates'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Return a file info field
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getFileField($field)
+ {
+ if (!isset($this->_info['file'])) {
+ $this->_parseFileInfo();
+ }
+
+ if (isset($this->_info['file'][$field])) {
+ return $this->_info['file'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Return the camera info (Maker and Model)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @todo handle makernotes
+ */
+ function getCamera(){
+ $make = $this->getField(array('Exif.Make','Exif.TIFFMake'));
+ $model = $this->getField(array('Exif.Model','Exif.TIFFModel'));
+ $cam = trim("$make $model");
+ if(empty($cam)) return false;
+ return $cam;
+ }
+
+ /**
+ * Return shutter speed as a ratio
+ *
+ * @author Joe Lapp <joe.lapp@pobox.com>
+ */
+ function getShutterSpeed()
+ {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+ if(!isset($this->_info['exif']['ExposureTime'])){
+ return '';
+ }
+
+ $field = $this->_info['exif']['ExposureTime'];
+ if($field['den'] == 1) return $field['num'];
+ return $field['num'].'/'.$field['den'];
+ }
+
+ /**
+ * Return an EXIF field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getExifField($field)
+ {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['exif'][$field])) {
+ return $this->_info['exif'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Return an XMP field
+ *
+ * @author Hakan Sandell <hakan.sandell@mydata.se>
+ */
+ function getXmpField($field)
+ {
+ if (!isset($this->_info['xmp'])) {
+ $this->_parseMarkerXmp();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['xmp'][$field])) {
+ return $this->_info['xmp'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Return an Adobe Field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getAdobeField($field)
+ {
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['adobe'][$field])) {
+ return $this->_info['adobe'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Return an IPTC field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getIPTCField($field)
+ {
+ if (!isset($this->_info['iptc'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['iptc'][$field])) {
+ return $this->_info['iptc'][$field];
+ }
+
+ return false;
+ }
+
+ /**
+ * Set an EXIF field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ * @author Joe Lapp <joe.lapp@pobox.com>
+ */
+ function setExifField($field, $value)
+ {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['exif'] == false) {
+ $this->_info['exif'] = array();
+ }
+
+ // make sure datetimes are in correct format
+ if(strlen($field) >= 8 && strtolower(substr($field, 0, 8)) == 'datetime') {
+ if(strlen($value) < 8 || $value{4} != ':' || $value{7} != ':') {
+ $value = date('Y:m:d H:i:s', strtotime($value));
+ }
+ }
+
+ $this->_info['exif'][$field] = $value;
+
+ return true;
+ }
+
+ /**
+ * Set an Adobe Field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function setAdobeField($field, $value)
+ {
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['adobe'] == false) {
+ $this->_info['adobe'] = array();
+ }
+
+ $this->_info['adobe'][$field] = $value;
+
+ return true;
+ }
+
+ /**
+ * Calculates the multiplier needed to resize the image to the given
+ * dimensions
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getResizeRatio($maxwidth,$maxheight=0){
+ if(!$maxheight) $maxheight = $maxwidth;
+
+ $w = $this->getField('File.Width');
+ $h = $this->getField('File.Height');
+
+ $ratio = 1;
+ if($w >= $h){
+ if($w >= $maxwidth){
+ $ratio = $maxwidth/$w;
+ }elseif($h > $maxheight){
+ $ratio = $maxheight/$h;
+ }
+ }else{
+ if($h >= $maxheight){
+ $ratio = $maxheight/$h;
+ }elseif($w > $maxwidth){
+ $ratio = $maxwidth/$w;
+ }
+ }
+ return $ratio;
+ }
+
+
+ /**
+ * Set an IPTC field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function setIPTCField($field, $value)
+ {
+ if (!isset($this->_info['iptc'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['iptc'] == false) {
+ $this->_info['iptc'] = array();
+ }
+
+ $this->_info['iptc'][$field] = $value;
+
+ return true;
+ }
+
+ /**
+ * Delete an EXIF field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function deleteExifField($field)
+ {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['exif'] != false) {
+ unset($this->_info['exif'][$field]);
+ }
+
+ return true;
+ }
+
+ /**
+ * Delete an Adobe field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function deleteAdobeField($field)
+ {
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['adobe'] != false) {
+ unset($this->_info['adobe'][$field]);
+ }
+
+ return true;
+ }
+
+ /**
+ * Delete an IPTC field
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function deleteIPTCField($field)
+ {
+ if (!isset($this->_info['iptc'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if ($this->_info['iptc'] != false) {
+ unset($this->_info['iptc'][$field]);
+ }
+
+ return true;
+ }
+
+ /**
+ * Get the image's title, tries various fields
+ *
+ * @param int $max maximum number chars (keeps words)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getTitle($max=80){
+ $cap = '';
+
+ // try various fields
+ $cap = $this->getField(array('Iptc.Headline',
+ 'Iptc.Caption',
+ 'Xmp.dc:title',
+ 'Exif.UserComment',
+ 'Exif.TIFFUserComment',
+ 'Exif.TIFFImageDescription',
+ 'File.Name'));
+ if (empty($cap)) return false;
+
+ if(!$max) return $cap;
+ // Shorten to 80 chars (keeping words)
+ $new = preg_replace('/\n.+$/','',wordwrap($cap, $max));
+ if($new != $cap) $new .= '...';
+
+ return $new;
+ }
+
+ /**
+ * Gather various date fields
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getDates()
+ {
+ $this->_parseAll();
+ if ($this->_markers == null) {
+ if (@isset($this->_info['file']['UnixTime'])) {
+ $dates['FileModified'] = $this->_info['file']['UnixTime'];
+ $dates['Time'] = $this->_info['file']['UnixTime'];
+ $dates['TimeSource'] = 'FileModified';
+ $dates['TimeStr'] = date("Y-m-d H:i:s", $this->_info['file']['UnixTime']);
+ $dates['EarliestTime'] = $this->_info['file']['UnixTime'];
+ $dates['EarliestTimeSource'] = 'FileModified';
+ $dates['EarliestTimeStr'] = date("Y-m-d H:i:s", $this->_info['file']['UnixTime']);
+ $dates['LatestTime'] = $this->_info['file']['UnixTime'];
+ $dates['LatestTimeSource'] = 'FileModified';
+ $dates['LatestTimeStr'] = date("Y-m-d H:i:s", $this->_info['file']['UnixTime']);
+ return $dates;
+ }
+ return false;
+ }
+
+ $dates = array();
+
+ $latestTime = 0;
+ $latestTimeSource = "";
+ $earliestTime = time();
+ $earliestTimeSource = "";
+
+ if (@isset($this->_info['exif']['DateTime'])) {
+ $dates['ExifDateTime'] = $this->_info['exif']['DateTime'];
+
+ $aux = $this->_info['exif']['DateTime'];
+ $aux{4} = "-";
+ $aux{7} = "-";
+ $t = strtotime($aux);
+
+ if ($t && $t > $latestTime) {
+ $latestTime = $t;
+ $latestTimeSource = "ExifDateTime";
+ }
+
+ if ($t && $t < $earliestTime) {
+ $earliestTime = $t;
+ $earliestTimeSource = "ExifDateTime";
+ }
+ }
+
+ if (@isset($this->_info['exif']['DateTimeOriginal'])) {
+ $dates['ExifDateTimeOriginal'] = $this->_info['exif']['DateTime'];
+
+ $aux = $this->_info['exif']['DateTimeOriginal'];
+ $aux{4} = "-";
+ $aux{7} = "-";
+ $t = strtotime($aux);
+
+ if ($t && $t > $latestTime) {
+ $latestTime = $t;
+ $latestTimeSource = "ExifDateTimeOriginal";
+ }
+
+ if ($t && $t < $earliestTime) {
+ $earliestTime = $t;
+ $earliestTimeSource = "ExifDateTimeOriginal";
+ }
+ }
+
+ if (@isset($this->_info['exif']['DateTimeDigitized'])) {
+ $dates['ExifDateTimeDigitized'] = $this->_info['exif']['DateTime'];
+
+ $aux = $this->_info['exif']['DateTimeDigitized'];
+ $aux{4} = "-";
+ $aux{7} = "-";
+ $t = strtotime($aux);
+
+ if ($t && $t > $latestTime) {
+ $latestTime = $t;
+ $latestTimeSource = "ExifDateTimeDigitized";
+ }
+
+ if ($t && $t < $earliestTime) {
+ $earliestTime = $t;
+ $earliestTimeSource = "ExifDateTimeDigitized";
+ }
+ }
+
+ if (@isset($this->_info['iptc']['DateCreated'])) {
+ $dates['IPTCDateCreated'] = $this->_info['iptc']['DateCreated'];
+
+ $aux = $this->_info['iptc']['DateCreated'];
+ $aux = substr($aux, 0, 4) . "-" . substr($aux, 4, 2) . "-" . substr($aux, 6, 2);
+ $t = strtotime($aux);
+
+ if ($t && $t > $latestTime) {
+ $latestTime = $t;
+ $latestTimeSource = "IPTCDateCreated";
+ }
+
+ if ($t && $t < $earliestTime) {
+ $earliestTime = $t;
+ $earliestTimeSource = "IPTCDateCreated";
+ }
+ }
+
+ if (@isset($this->_info['file']['UnixTime'])) {
+ $dates['FileModified'] = $this->_info['file']['UnixTime'];
+
+ $t = $this->_info['file']['UnixTime'];
+
+ if ($t && $t > $latestTime) {
+ $latestTime = $t;
+ $latestTimeSource = "FileModified";
+ }
+
+ if ($t && $t < $earliestTime) {
+ $earliestTime = $t;
+ $earliestTimeSource = "FileModified";
+ }
+ }
+
+ $dates['Time'] = $earliestTime;
+ $dates['TimeSource'] = $earliestTimeSource;
+ $dates['TimeStr'] = date("Y-m-d H:i:s", $earliestTime);
+ $dates['EarliestTime'] = $earliestTime;
+ $dates['EarliestTimeSource'] = $earliestTimeSource;
+ $dates['EarliestTimeStr'] = date("Y-m-d H:i:s", $earliestTime);
+ $dates['LatestTime'] = $latestTime;
+ $dates['LatestTimeSource'] = $latestTimeSource;
+ $dates['LatestTimeStr'] = date("Y-m-d H:i:s", $latestTime);
+
+ return $dates;
+ }
+
+ /**
+ * Get the image width, tries various fields
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getWidth()
+ {
+ if (!isset($this->_info['sof'])) {
+ $this->_parseMarkerSOF();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['sof']['ImageWidth'])) {
+ return $this->_info['sof']['ImageWidth'];
+ }
+
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if (isset($this->_info['exif']['PixelXDimension'])) {
+ return $this->_info['exif']['PixelXDimension'];
+ }
+
+ return false;
+ }
+
+ /**
+ * Get the image height, tries various fields
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getHeight()
+ {
+ if (!isset($this->_info['sof'])) {
+ $this->_parseMarkerSOF();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['sof']['ImageHeight'])) {
+ return $this->_info['sof']['ImageHeight'];
+ }
+
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if (isset($this->_info['exif']['PixelYDimension'])) {
+ return $this->_info['exif']['PixelYDimension'];
+ }
+
+ return false;
+ }
+
+ /**
+ * Get an dimension string for use in img tag
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function getDimStr()
+ {
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $w = $this->getWidth();
+ $h = $this->getHeight();
+
+ return "width='" . $w . "' height='" . $h . "'";
+ }
+
+ /**
+ * Checks for an embedded thumbnail
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function hasThumbnail($which = 'any')
+ {
+ if (($which == 'any') || ($which == 'exif')) {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['exif']) && is_array($this->_info['exif'])) {
+ if (isset($this->_info['exif']['JFIFThumbnail'])) {
+ return 'exif';
+ }
+ }
+ }
+
+ if ($which == 'adobe') {
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['adobe']) && is_array($this->_info['adobe'])) {
+ if (isset($this->_info['adobe']['ThumbnailData'])) {
+ return 'exif';
+ }
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Send embedded thumbnail to browser
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ */
+ function sendThumbnail($which = 'any')
+ {
+ $data = null;
+
+ if (($which == 'any') || ($which == 'exif')) {
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['exif']) && is_array($this->_info['exif'])) {
+ if (isset($this->_info['exif']['JFIFThumbnail'])) {
+ $data =& $this->_info['exif']['JFIFThumbnail'];
+ }
+ }
+ }
+
+ if (($which == 'adobe') || ($data == null)){
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (isset($this->_info['adobe']) && is_array($this->_info['adobe'])) {
+ if (isset($this->_info['adobe']['ThumbnailData'])) {
+ $data =& $this->_info['adobe']['ThumbnailData'];
+ }
+ }
+ }
+
+ if ($data != null) {
+ header("Content-type: image/jpeg");
+ echo $data;
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Save changed Metadata
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function save($fileName = "") {
+ if ($fileName == "") {
+ $tmpName = tempnam(dirname($this->_fileName),'_metatemp_');
+ $this->_writeJPEG($tmpName);
+ if (@file_exists($tmpName)) {
+ return io_rename($tmpName, $this->_fileName);
+ }
+ } else {
+ return $this->_writeJPEG($fileName);
+ }
+ return false;
+ }
+
+ /*************************************************************/
+ /* PRIVATE FUNCTIONS (Internal Use Only!) */
+ /*************************************************************/
+
+ /*************************************************************/
+ function _dispose()
+ {
+ $this->_fileName = $fileName;
+
+ $this->_fp = null;
+ $this->_type = 'unknown';
+
+ unset($this->_markers);
+ unset($this->_info);
+ }
+
+ /*************************************************************/
+ function _readJPEG()
+ {
+ unset($this->_markers);
+ //unset($this->_info);
+ $this->_markers = array();
+ //$this->_info = array();
+
+ $this->_fp = @fopen($this->_fileName, 'rb');
+ if ($this->_fp) {
+ if (file_exists($this->_fileName)) {
+ $this->_type = 'file';
+ }
+ else {
+ $this->_type = 'url';
+ }
+ }
+ else {
+ $this->_fp = null;
+ return false; // ERROR: Can't open file
+ }
+
+ // Check for the JPEG signature
+ $c1 = ord(fgetc($this->_fp));
+ $c2 = ord(fgetc($this->_fp));
+
+ if ($c1 != 0xFF || $c2 != 0xD8) { // (0xFF + SOI)
+ $this->_markers = null;
+ return false; // ERROR: File is not a JPEG
+ }
+
+ $count = 0;
+
+ $done = false;
+ $ok = true;
+
+ while (!$done) {
+ $capture = false;
+
+ // First, skip any non 0xFF bytes
+ $discarded = 0;
+ $c = ord(fgetc($this->_fp));
+ while (!feof($this->_fp) && ($c != 0xFF)) {
+ $discarded++;
+ $c = ord(fgetc($this->_fp));
+ }
+ // Then skip all 0xFF until the marker byte
+ do {
+ $marker = ord(fgetc($this->_fp));
+ } while (!feof($this->_fp) && ($marker == 0xFF));
+
+ if (feof($this->_fp)) {
+ return false; // ERROR: Unexpected EOF
+ }
+ if ($discarded != 0) {
+ return false; // ERROR: Extraneous data
+ }
+
+ $length = ord(fgetc($this->_fp)) * 256 + ord(fgetc($this->_fp));
+ if (feof($this->_fp)) {
+ return false; // ERROR: Unexpected EOF
+ }
+ if ($length < 2) {
+ return false; // ERROR: Extraneous data
+ }
+ $length = $length - 2; // The length we got counts itself
+
+ switch ($marker) {
+ case 0xC0: // SOF0
+ case 0xC1: // SOF1
+ case 0xC2: // SOF2
+ case 0xC9: // SOF9
+ case 0xE0: // APP0: JFIF data
+ case 0xE1: // APP1: EXIF or XMP data
+ case 0xED: // APP13: IPTC / Photoshop data
+ $capture = true;
+ break;
+ case 0xDA: // SOS: Start of scan... the image itself and the last block on the file
+ $capture = false;
+ $length = -1; // This field has no length... it includes all data until EOF
+ $done = true;
+ break;
+ default:
+ $capture = true;//false;
+ break;
+ }
+
+ $this->_markers[$count] = array();
+ $this->_markers[$count]['marker'] = $marker;
+ $this->_markers[$count]['length'] = $length;
+
+ if ($capture) {
+ if ($length)
+ $this->_markers[$count]['data'] =& fread($this->_fp, $length);
+ else
+ $this->_markers[$count]['data'] = "";
+ }
+ elseif (!$done) {
+ $result = @fseek($this->_fp, $length, SEEK_CUR);
+ // fseek doesn't seem to like HTTP 'files', but fgetc has no problem
+ if (!($result === 0)) {
+ for ($i = 0; $i < $length; $i++) {
+ fgetc($this->_fp);
+ }
+ }
+ }
+ $count++;
+ }
+
+ if ($this->_fp) {
+ fclose($this->_fp);
+ $this->_fp = null;
+ }
+
+ return $ok;
+ }
+
+ /*************************************************************/
+ function _parseAll()
+ {
+ if (!isset($this->_info['file'])) {
+ $this->_parseFileInfo();
+ }
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ if (!isset($this->_info['jfif'])) {
+ $this->_parseMarkerJFIF();
+ }
+ if (!isset($this->_info['jpeg'])) {
+ $this->_parseMarkerSOF();
+ }
+ if (!isset($this->_info['exif'])) {
+ $this->_parseMarkerExif();
+ }
+ if (!isset($this->_info['xmp'])) {
+ $this->_parseMarkerXmp();
+ }
+ if (!isset($this->_info['adobe'])) {
+ $this->_parseMarkerAdobe();
+ }
+ }
+
+ /*************************************************************/
+ function _writeJPEG($outputName)
+ {
+ $this->_parseAll();
+
+ $wroteEXIF = false;
+ $wroteAdobe = false;
+
+ $this->_fp = @fopen($this->_fileName, 'r');
+ if ($this->_fp) {
+ if (file_exists($this->_fileName)) {
+ $this->_type = 'file';
+ }
+ else {
+ $this->_type = 'url';
+ }
+ }
+ else {
+ $this->_fp = null;
+ return false; // ERROR: Can't open file
+ }
+
+ $this->_fpout = fopen($outputName, 'wb');
+ if ($this->_fpout) {
+ }
+ else {
+ $this->_fpout = null;
+ fclose($this->_fp);
+ $this->_fp = null;
+ return false; // ERROR: Can't open output file
+ }
+
+ // Check for the JPEG signature
+ $c1 = ord(fgetc($this->_fp));
+ $c2 = ord(fgetc($this->_fp));
+
+ if ($c1 != 0xFF || $c2 != 0xD8) { // (0xFF + SOI)
+ return false; // ERROR: File is not a JPEG
+ }
+
+ fputs($this->_fpout, chr(0xFF), 1);
+ fputs($this->_fpout, chr(0xD8), 1); // (0xFF + SOI)
+
+ $count = 0;
+
+ $done = false;
+ $ok = true;
+
+ while (!$done) {
+ // First, skip any non 0xFF bytes
+ $discarded = 0;
+ $c = ord(fgetc($this->_fp));
+ while (!feof($this->_fp) && ($c != 0xFF)) {
+ $discarded++;
+ $c = ord(fgetc($this->_fp));
+ }
+ // Then skip all 0xFF until the marker byte
+ do {
+ $marker = ord(fgetc($this->_fp));
+ } while (!feof($this->_fp) && ($marker == 0xFF));
+
+ if (feof($this->_fp)) {
+ $ok = false;
+ break; // ERROR: Unexpected EOF
+ }
+ if ($discarded != 0) {
+ $ok = false;
+ break; // ERROR: Extraneous data
+ }
+
+ $length = ord(fgetc($this->_fp)) * 256 + ord(fgetc($this->_fp));
+ if (feof($this->_fp)) {
+ $ok = false;
+ break; // ERROR: Unexpected EOF
+ }
+ if ($length < 2) {
+ $ok = false;
+ break; // ERROR: Extraneous data
+ }
+ $length = $length - 2; // The length we got counts itself
+
+ unset($data);
+ if ($marker == 0xE1) { // APP1: EXIF data
+ $data =& $this->_createMarkerEXIF();
+ $wroteEXIF = true;
+ }
+ elseif ($marker == 0xED) { // APP13: IPTC / Photoshop data
+ $data =& $this->_createMarkerAdobe();
+ $wroteAdobe = true;
+ }
+ elseif ($marker == 0xDA) { // SOS: Start of scan... the image itself and the last block on the file
+ $done = true;
+ }
+
+ if (!$wroteEXIF && (($marker < 0xE0) || ($marker > 0xEF))) {
+ if (isset($this->_info['exif']) && is_array($this->_info['exif'])) {
+ $exif =& $this->_createMarkerEXIF();
+ $this->_writeJPEGMarker(0xE1, strlen($exif), $exif, 0);
+ unset($exif);
+ }
+ $wroteEXIF = true;
+ }
+
+ if (!$wroteAdobe && (($marker < 0xE0) || ($marker > 0xEF))) {
+ if ((isset($this->_info['adobe']) && is_array($this->_info['adobe']))
+ || (isset($this->_info['iptc']) && is_array($this->_info['iptc']))) {
+ $adobe =& $this->_createMarkerAdobe();
+ $this->_writeJPEGMarker(0xED, strlen($adobe), $adobe, 0);
+ unset($adobe);
+ }
+ $wroteAdobe = true;
+ }
+
+ $origLength = $length;
+ if (isset($data)) {
+ $length = strlen($data);
+ }
+
+ if ($marker != -1) {
+ $this->_writeJPEGMarker($marker, $length, $data, $origLength);
+ }
+ }
+
+ if ($this->_fp) {
+ fclose($this->_fp);
+ $this->_fp = null;
+ }
+
+ if ($this->_fpout) {
+ fclose($this->_fpout);
+ $this->_fpout = null;
+ }
+
+ return $ok;
+ }
+
+ /*************************************************************/
+ function _writeJPEGMarker($marker, $length, &$data, $origLength)
+ {
+ if ($length <= 0) {
+ return false;
+ }
+
+ fputs($this->_fpout, chr(0xFF), 1);
+ fputs($this->_fpout, chr($marker), 1);
+ fputs($this->_fpout, chr((($length + 2) & 0x0000FF00) >> 8), 1);
+ fputs($this->_fpout, chr((($length + 2) & 0x000000FF) >> 0), 1);
+
+ if (isset($data)) {
+ // Copy the generated data
+ fputs($this->_fpout, $data, $length);
+
+ if ($origLength > 0) { // Skip the original data
+ $result = @fseek($this->_fp, $origLength, SEEK_CUR);
+ // fseek doesn't seem to like HTTP 'files', but fgetc has no problem
+ if ($result != 0) {
+ for ($i = 0; $i < $origLength; $i++) {
+ fgetc($this->_fp);
+ }
+ }
+ }
+ }
+ else {
+ if ($marker == 0xDA) { // Copy until EOF
+ while (!feof($this->_fp)) {
+ $data = fread($this->_fp, 1024 * 16);
+ fputs($this->_fpout, $data, strlen($data));
+ }
+ }
+ else { // Copy only $length bytes
+ $data = @fread($this->_fp, $length);
+ fputs($this->_fpout, $data, $length);
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Gets basic info from the file - should work with non-JPEGs
+ *
+ * @author Sebastian Delmont <sdelmont@zonageek.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _parseFileInfo()
+ {
+ if (file_exists($this->_fileName)) {
+ $this->_info['file'] = array();
+ $this->_info['file']['Name'] = basename($this->_fileName);
+ $this->_info['file']['Path'] = fullpath($this->_fileName);
+ $this->_info['file']['Size'] = filesize($this->_fileName);
+ if ($this->_info['file']['Size'] < 1024) {
+ $this->_info['file']['NiceSize'] = $this->_info['file']['Size'] . 'B';
+ }
+ elseif ($this->_info['file']['Size'] < (1024 * 1024)) {
+ $this->_info['file']['NiceSize'] = round($this->_info['file']['Size'] / 1024) . 'KB';
+ }
+ elseif ($this->_info['file']['Size'] < (1024 * 1024 * 1024)) {
+ $this->_info['file']['NiceSize'] = round($this->_info['file']['Size'] / (1024*1024)) . 'MB';
+ }
+ else {
+ $this->_info['file']['NiceSize'] = $this->_info['file']['Size'] . 'B';
+ }
+ $this->_info['file']['UnixTime'] = filemtime($this->_fileName);
+
+ // get image size directly from file
+ $size = getimagesize($this->_fileName);
+ $this->_info['file']['Width'] = $size[0];
+ $this->_info['file']['Height'] = $size[1];
+ // set mime types and formats
+ // http://www.php.net/manual/en/function.getimagesize.php
+ // http://www.php.net/manual/en/function.image-type-to-mime-type.php
+ switch ($size[2]){
+ case 1:
+ $this->_info['file']['Mime'] = 'image/gif';
+ $this->_info['file']['Format'] = 'GIF';
+ break;
+ case 2:
+ $this->_info['file']['Mime'] = 'image/jpeg';
+ $this->_info['file']['Format'] = 'JPEG';
+ break;
+ case 3:
+ $this->_info['file']['Mime'] = 'image/png';
+ $this->_info['file']['Format'] = 'PNG';
+ break;
+ case 4:
+ $this->_info['file']['Mime'] = 'application/x-shockwave-flash';
+ $this->_info['file']['Format'] = 'SWF';
+ break;
+ case 5:
+ $this->_info['file']['Mime'] = 'image/psd';
+ $this->_info['file']['Format'] = 'PSD';
+ break;
+ case 6:
+ $this->_info['file']['Mime'] = 'image/bmp';
+ $this->_info['file']['Format'] = 'BMP';
+ break;
+ case 7:
+ $this->_info['file']['Mime'] = 'image/tiff';
+ $this->_info['file']['Format'] = 'TIFF (Intel)';
+ break;
+ case 8:
+ $this->_info['file']['Mime'] = 'image/tiff';
+ $this->_info['file']['Format'] = 'TIFF (Motorola)';
+ break;
+ case 9:
+ $this->_info['file']['Mime'] = 'application/octet-stream';
+ $this->_info['file']['Format'] = 'JPC';
+ break;
+ case 10:
+ $this->_info['file']['Mime'] = 'image/jp2';
+ $this->_info['file']['Format'] = 'JP2';
+ break;
+ case 11:
+ $this->_info['file']['Mime'] = 'application/octet-stream';
+ $this->_info['file']['Format'] = 'JPX';
+ break;
+ case 12:
+ $this->_info['file']['Mime'] = 'application/octet-stream';
+ $this->_info['file']['Format'] = 'JB2';
+ break;
+ case 13:
+ $this->_info['file']['Mime'] = 'application/x-shockwave-flash';
+ $this->_info['file']['Format'] = 'SWC';
+ break;
+ case 14:
+ $this->_info['file']['Mime'] = 'image/iff';
+ $this->_info['file']['Format'] = 'IFF';
+ break;
+ case 15:
+ $this->_info['file']['Mime'] = 'image/vnd.wap.wbmp';
+ $this->_info['file']['Format'] = 'WBMP';
+ break;
+ case 16:
+ $this->_info['file']['Mime'] = 'image/xbm';
+ $this->_info['file']['Format'] = 'XBM';
+ break;
+ default:
+ $this->_info['file']['Mime'] = 'image/unknown';
+ }
+ }
+ else {
+ $this->_info['file'] = array();
+ $this->_info['file']['Name'] = basename($this->_fileName);
+ $this->_info['file']['Url'] = $this->_fileName;
+ }
+
+ return true;
+ }
+
+ /*************************************************************/
+ function _parseMarkerJFIF()
+ {
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ if ($this->_markers[$i]['marker'] == 0xE0) {
+ $signature = $this->_getFixedString($this->_markers[$i]['data'], 0, 4);
+ if ($signature == 'JFIF') {
+ $data =& $this->_markers[$i]['data'];
+ break;
+ }
+ }
+ }
+
+ if ($data == null) {
+ $this->_info['jfif'] = false;
+ return false;
+ }
+
+ $pos = 0;
+ $this->_info['jfif'] = array();
+
+
+ $vmaj = $this->_getByte($data, 5);
+ $vmin = $this->_getByte($data, 6);
+
+ $this->_info['jfif']['Version'] = sprintf('%d.%02d', $vmaj, $vmin);
+
+ $units = $this->_getByte($data, 7);
+ switch ($units) {
+ case 0:
+ $this->_info['jfif']['Units'] = 'pixels';
+ break;
+ case 1:
+ $this->_info['jfif']['Units'] = 'dpi';
+ break;
+ case 2:
+ $this->_info['jfif']['Units'] = 'dpcm';
+ break;
+ default:
+ $this->_info['jfif']['Units'] = 'unknown';
+ break;
+ }
+
+ $xdens = $this->_getShort($data, 8);
+ $ydens = $this->_getShort($data, 10);
+
+ $this->_info['jfif']['XDensity'] = $xdens;
+ $this->_info['jfif']['YDensity'] = $ydens;
+
+ $thumbx = $this->_getByte($data, 12);
+ $thumby = $this->_getByte($data, 13);
+
+ $this->_info['jfif']['ThumbnailWidth'] = $thumbx;
+ $this->_info['jfif']['ThumbnailHeight'] = $thumby;
+
+ return true;
+ }
+
+ /*************************************************************/
+ function _parseMarkerSOF()
+ {
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ switch ($this->_markers[$i]['marker']) {
+ case 0xC0: // SOF0
+ case 0xC1: // SOF1
+ case 0xC2: // SOF2
+ case 0xC9: // SOF9
+ $data =& $this->_markers[$i]['data'];
+ $marker = $this->_markers[$i]['marker'];
+ break;
+ }
+ }
+
+ if ($data == null) {
+ $this->_info['sof'] = false;
+ return false;
+ }
+
+ $pos = 0;
+ $this->_info['sof'] = array();
+
+
+ switch ($marker) {
+ case 0xC0: // SOF0
+ $format = 'Baseline';
+ break;
+ case 0xC1: // SOF1
+ $format = 'Progessive';
+ break;
+ case 0xC2: // SOF2
+ $format = 'Non-baseline';
+ break;
+ case 0xC9: // SOF9
+ $format = 'Arithmetic';
+ break;
+ default:
+ return false;
+ break;
+ }
+
+
+ $this->_info['sof']['Format'] = $format;
+
+ $this->_info['sof']['SamplePrecision'] = $this->_getByte($data, $pos + 0);
+ $this->_info['sof']['ImageHeight'] = $this->_getShort($data, $pos + 1);
+ $this->_info['sof']['ImageWidth'] = $this->_getShort($data, $pos + 3);
+ $this->_info['sof']['ColorChannels'] = $this->_getByte($data, $pos + 5);
+
+ return true;
+ }
+
+ /**
+ * Parses the XMP data
+ *
+ * @author Hakan Sandell <hakan.sandell@mydata.se>
+ */
+ function _parseMarkerXmp()
+ {
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ if ($this->_markers[$i]['marker'] == 0xE1) {
+ $signature = $this->_getFixedString($this->_markers[$i]['data'], 0, 29);
+ if ($signature == "http://ns.adobe.com/xap/1.0/\0") {
+ $data =& substr($this->_markers[$i]['data'], 29);
+ break;
+ }
+ }
+ }
+
+ if ($data == null) {
+ $this->_info['xmp'] = false;
+ return false;
+ }
+
+ $parser = xml_parser_create();
+ xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
+ xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
+ xml_parse_into_struct($parser, $data, $values, $tags);
+ xml_parser_free($parser);
+
+ $this->_info['xmp'] = array();
+ $count = count($values);
+ for ($i = 0; $i < $count; $i++) {
+ if ($values[$i][tag] == 'rdf:Description' && $values[$i][type] == 'open') {
+
+ while ($values[++$i][tag] != 'rdf:Description') {
+ $this->_parseXmpNode($values, $i, $this->_info['xmp'][$values[$i][tag]]);
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Parses XMP nodes by recursion
+ *
+ * @author Hakan Sandell <hakan.sandell@mydata.se>
+ */
+ function _parseXmpNode($values, &$i, &$meta)
+ {
+ if ($values[$i][type] == 'complete') {
+ // Simple Type property
+ $meta = $values[$i][value];
+ return;
+ }
+
+ $i++;
+ if ($values[$i][tag] == 'rdf:Bag' || $values[$i][tag] == 'rdf:Seq') {
+ // Array property
+ $meta = array();
+ while ($values[++$i][tag] == 'rdf:li') {
+ $this->_parseXmpNode($values, $i, $meta[]);
+ }
+ $i++; // skip closing tag
+
+ } elseif ($values[$i][tag] == 'rdf:Alt') {
+ // Language Alternative property, only the first (default) value is used
+ $i++;
+ $this->_parseXmpNode($values, $i, $meta);
+ while ($values[++$i][tag] != 'rdf:Alt');
+ $i++; // skip closing tag
+
+ } else {
+ // Structure property
+ $meta = array();
+ $startTag = $values[$i-1][tag];
+ do {
+ $this->_parseXmpNode($values, $i, $meta[$values[$i][tag]]);
+ } while ($values[++$i][tag] != $startTag);
+ }
+ }
+
+ /*************************************************************/
+ function _parseMarkerExif()
+ {
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ if ($this->_markers[$i]['marker'] == 0xE1) {
+ $signature = $this->_getFixedString($this->_markers[$i]['data'], 0, 6);
+ if ($signature == "Exif\0\0") {
+ $data =& $this->_markers[$i]['data'];
+ break;
+ }
+ }
+ }
+
+ if ($data == null) {
+ $this->_info['exif'] = false;
+ return false;
+ }
+ $pos = 6;
+ $this->_info['exif'] = array();
+
+ // We don't increment $pos after this because Exif uses offsets relative to this point
+
+ $byteAlign = $this->_getShort($data, $pos + 0);
+
+ if ($byteAlign == 0x4949) { // "II"
+ $isBigEndian = false;
+ }
+ elseif ($byteAlign == 0x4D4D) { // "MM"
+ $isBigEndian = true;
+ }
+ else {
+ return false; // Unexpected data
+ }
+
+ $alignCheck = $this->_getShort($data, $pos + 2, $isBigEndian);
+ if ($alignCheck != 0x002A) // That's the expected value
+ return false; // Unexpected data
+
+ if ($isBigEndian) {
+ $this->_info['exif']['ByteAlign'] = "Big Endian";
+ }
+ else {
+ $this->_info['exif']['ByteAlign'] = "Little Endian";
+ }
+
+ $offsetIFD0 = $this->_getLong($data, $pos + 4, $isBigEndian);
+ if ($offsetIFD0 < 8)
+ return false; // Unexpected data
+
+ $offsetIFD1 = $this->_readIFD($data, $pos, $offsetIFD0, $isBigEndian, 'ifd0');
+ if ($offsetIFD1 != 0)
+ $this->_readIFD($data, $pos, $offsetIFD1, $isBigEndian, 'ifd1');
+
+ return true;
+ }
+
+ /*************************************************************/
+ function _readIFD($data, $base, $offset, $isBigEndian, $mode)
+ {
+ $EXIFTags = $this->_exifTagNames($mode);
+
+ $numEntries = $this->_getShort($data, $base + $offset, $isBigEndian);
+ $offset += 2;
+
+ $exifTIFFOffset = 0;
+ $exifTIFFLength = 0;
+ $exifThumbnailOffset = 0;
+ $exifThumbnailLength = 0;
+
+ for ($i = 0; $i < $numEntries; $i++) {
+ $tag = $this->_getShort($data, $base + $offset, $isBigEndian);
+ $offset += 2;
+ $type = $this->_getShort($data, $base + $offset, $isBigEndian);
+ $offset += 2;
+ $count = $this->_getLong($data, $base + $offset, $isBigEndian);
+ $offset += 4;
+
+ if (($type < 1) || ($type > 12))
+ return false; // Unexpected Type
+
+ $typeLengths = array( -1, 1, 1, 2, 4, 8, 1, 1, 2, 4, 8, 4, 8 );
+
+ $dataLength = $typeLengths[$type] * $count;
+ if ($dataLength > 4) {
+ $dataOffset = $this->_getLong($data, $base + $offset, $isBigEndian);
+ $rawValue = $this->_getFixedString($data, $base + $dataOffset, $dataLength);
+ }
+ else {
+ $rawValue = $this->_getFixedString($data, $base + $offset, $dataLength);
+ }
+ $offset += 4;
+
+ switch ($type) {
+ case 1: // UBYTE
+ if ($count == 1) {
+ $value = $this->_getByte($rawValue, 0);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getByte($rawValue, $j);
+ }
+ break;
+ case 2: // ASCII
+ $value = $rawValue;
+ break;
+ case 3: // USHORT
+ if ($count == 1) {
+ $value = $this->_getShort($rawValue, 0, $isBigEndian);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getShort($rawValue, $j * 2, $isBigEndian);
+ }
+ break;
+ case 4: // ULONG
+ if ($count == 1) {
+ $value = $this->_getLong($rawValue, 0, $isBigEndian);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getLong($rawValue, $j * 4, $isBigEndian);
+ }
+ break;
+ case 5: // URATIONAL
+ if ($count == 1) {
+ $a = $this->_getLong($rawValue, 0, $isBigEndian);
+ $b = $this->_getLong($rawValue, 4, $isBigEndian);
+ $value = array();
+ $value['val'] = 0;
+ $value['num'] = $a;
+ $value['den'] = $b;
+ if (($a != 0) && ($b != 0)) {
+ $value['val'] = $a / $b;
+ }
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++) {
+ $a = $this->_getLong($rawValue, $j * 8, $isBigEndian);
+ $b = $this->_getLong($rawValue, ($j * 8) + 4, $isBigEndian);
+ $value = array();
+ $value[$j]['val'] = 0;
+ $value[$j]['num'] = $a;
+ $value[$j]['den'] = $b;
+ if (($a != 0) && ($b != 0))
+ $value[$j]['val'] = $a / $b;
+ }
+ }
+ break;
+ case 6: // SBYTE
+ if ($count == 1) {
+ $value = $this->_getByte($rawValue, 0);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getByte($rawValue, $j);
+ }
+ break;
+ case 7: // UNDEFINED
+ $value = $rawValue;
+ break;
+ case 8: // SSHORT
+ if ($count == 1) {
+ $value = $this->_getShort($rawValue, 0, $isBigEndian);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getShort($rawValue, $j * 2, $isBigEndian);
+ }
+ break;
+ case 9: // SLONG
+ if ($count == 1) {
+ $value = $this->_getLong($rawValue, 0, $isBigEndian);
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++)
+ $value[$j] = $this->_getLong($rawValue, $j * 4, $isBigEndian);
+ }
+ break;
+ case 10: // SRATIONAL
+ if ($count == 1) {
+ $a = $this->_getLong($rawValue, 0, $isBigEndian);
+ $b = $this->_getLong($rawValue, 4, $isBigEndian);
+ $value = array();
+ $value['val'] = 0;
+ $value['num'] = $a;
+ $value['den'] = $b;
+ if (($a != 0) && ($b != 0))
+ $value['val'] = $a / $b;
+ }
+ else {
+ $value = array();
+ for ($j = 0; $j < $count; $j++) {
+ $a = $this->_getLong($rawValue, $j * 8, $isBigEndian);
+ $b = $this->_getLong($rawValue, ($j * 8) + 4, $isBigEndian);
+ $value = array();
+ $value[$j]['val'] = 0;
+ $value[$j]['num'] = $a;
+ $value[$j]['den'] = $b;
+ if (($a != 0) && ($b != 0))
+ $value[$j]['val'] = $a / $b;
+ }
+ }
+ break;
+ case 11: // FLOAT
+ $value = $rawValue;
+ break;
+
+ case 12: // DFLOAT
+ $value = $rawValue;
+ break;
+ default:
+ return false; // Unexpected Type
+ }
+
+ $tagName = '';
+ if (($mode == 'ifd0') && ($tag == 0x8769)) { // ExifIFDOffset
+ $this->_readIFD($data, $base, $value, $isBigEndian, 'exif');
+ }
+ elseif (($mode == 'ifd0') && ($tag == 0x8825)) { // GPSIFDOffset
+ $this->_readIFD($data, $base, $value, $isBigEndian, 'gps');
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0111)) { // TIFFStripOffsets
+ $exifTIFFOffset = $value;
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0117)) { // TIFFStripByteCounts
+ $exifTIFFLength = $value;
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0201)) { // TIFFJFIFOffset
+ $exifThumbnailOffset = $value;
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0202)) { // TIFFJFIFLength
+ $exifThumbnailLength = $value;
+ }
+ elseif (($mode == 'exif') && ($tag == 0xA005)) { // InteropIFDOffset
+ $this->_readIFD($data, $base, $value, $isBigEndian, 'interop');
+ }
+ // elseif (($mode == 'exif') && ($tag == 0x927C)) { // MakerNote
+ // }
+ else {
+ if (isset($EXIFTags[$tag])) {
+ $tagName = $EXIFTags[$tag];
+ if (isset($this->_info['exif'][$tagName])) {
+ if (!is_array($this->_info['exif'][$tagName])) {
+ $aux = array();
+ $aux[0] = $this->_info['exif'][$tagName];
+ $this->_info['exif'][$tagName] = $aux;
+ }
+
+ $this->_info['exif'][$tagName][count($this->_info['exif'][$tagName])] = $value;
+ }
+ else {
+ $this->_info['exif'][$tagName] = $value;
+ }
+ }
+ else {
+#echo sprintf("<h1>Unknown tag %02x (t: %d l: %d) %s in %s</h1>", $tag, $type, $count, $mode, $this->_fileName);
+ // Unknown Tags will be ignored!!!
+ // That's because the tag might be a pointer (like the Exif tag)
+ // and saving it without saving the data it points to might
+ // create an invalid file.
+ }
+ }
+ }
+
+ if (($exifThumbnailOffset > 0) && ($exifThumbnailLength > 0)) {
+ $this->_info['exif']['JFIFThumbnail'] = $this->_getFixedString($data, $base + $exifThumbnailOffset, $exifThumbnailLength);
+ }
+
+ if (($exifTIFFOffset > 0) && ($exifTIFFLength > 0)) {
+ $this->_info['exif']['TIFFStrips'] = $this->_getFixedString($data, $base + $exifTIFFOffset, $exifTIFFLength);
+ }
+
+ $nextOffset = $this->_getLong($data, $base + $offset, $isBigEndian);
+ return $nextOffset;
+ }
+
+ /*************************************************************/
+ function & _createMarkerExif()
+ {
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ if ($this->_markers[$i]['marker'] == 0xE1) {
+ $signature = $this->_getFixedString($this->_markers[$i]['data'], 0, 6);
+ if ($signature == "Exif\0\0") {
+ $data =& $this->_markers[$i]['data'];
+ break;
+ }
+ }
+ }
+
+ if (!isset($this->_info['exif'])) {
+ return false;
+ }
+
+ $data = "Exif\0\0";
+ $pos = 6;
+ $offsetBase = 6;
+
+ if (isset($this->_info['exif']['ByteAlign']) && ($this->_info['exif']['ByteAlign'] == "Big Endian")) {
+ $isBigEndian = true;
+ $aux = "MM";
+ $pos = $this->_putString($data, $pos, $aux);
+ }
+ else {
+ $isBigEndian = false;
+ $aux = "II";
+ $pos = $this->_putString($data, $pos, $aux);
+ }
+ $pos = $this->_putShort($data, $pos, 0x002A, $isBigEndian);
+ $pos = $this->_putLong($data, $pos, 0x00000008, $isBigEndian); // IFD0 Offset is always 8
+
+ $ifd0 =& $this->_getIFDEntries($isBigEndian, 'ifd0');
+ $ifd1 =& $this->_getIFDEntries($isBigEndian, 'ifd1');
+
+ $pos = $this->_writeIFD($data, $pos, $offsetBase, $ifd0, $isBigEndian, true);
+ $pos = $this->_writeIFD($data, $pos, $offsetBase, $ifd1, $isBigEndian, false);
+
+ return $data;
+ }
+
+ /*************************************************************/
+ function _writeIFD(&$data, $pos, $offsetBase, &$entries, $isBigEndian, $hasNext)
+ {
+ $tiffData = null;
+ $tiffDataOffsetPos = -1;
+
+ $entryCount = count($entries);
+
+ $dataPos = $pos + 2 + ($entryCount * 12) + 4;
+ $pos = $this->_putShort($data, $pos, $entryCount, $isBigEndian);
+
+ for ($i = 0; $i < $entryCount; $i++) {
+ $tag = $entries[$i]['tag'];
+ $type = $entries[$i]['type'];
+
+ if ($type == -99) { // SubIFD
+ $pos = $this->_putShort($data, $pos, $tag, $isBigEndian);
+ $pos = $this->_putShort($data, $pos, 0x04, $isBigEndian); // LONG
+ $pos = $this->_putLong($data, $pos, 0x01, $isBigEndian); // Count = 1
+ $pos = $this->_putLong($data, $pos, $dataPos - $offsetBase, $isBigEndian);
+
+ $dataPos = $this->_writeIFD($data, $dataPos, $offsetBase, $entries[$i]['value'], $isBigEndian, false);
+ }
+ elseif ($type == -98) { // TIFF Data
+ $pos = $this->_putShort($data, $pos, $tag, $isBigEndian);
+ $pos = $this->_putShort($data, $pos, 0x04, $isBigEndian); // LONG
+ $pos = $this->_putLong($data, $pos, 0x01, $isBigEndian); // Count = 1
+ $tiffDataOffsetPos = $pos;
+ $pos = $this->_putLong($data, $pos, 0x00, $isBigEndian); // For Now
+ $tiffData =& $entries[$i]['value'] ;
+ }
+ else { // Regular Entry
+ $pos = $this->_putShort($data, $pos, $tag, $isBigEndian);
+ $pos = $this->_putShort($data, $pos, $type, $isBigEndian);
+ $pos = $this->_putLong($data, $pos, $entries[$i]['count'], $isBigEndian);
+ if (strlen($entries[$i]['value']) > 4) {
+ $pos = $this->_putLong($data, $pos, $dataPos - $offsetBase, $isBigEndian);
+ $dataPos = $this->_putString($data, $dataPos, $entries[$i]['value']);
+ }
+ else {
+ $val = str_pad($entries[$i]['value'], 4, "\0");
+ $pos = $this->_putString($data, $pos, $val);
+ }
+ }
+ }
+
+ if ($tiffData != null) {
+ $this->_putLong($data, $tiffDataOffsetPos, $dataPos - $offsetBase, $isBigEndian);
+ $dataPos = $this->_putString($data, $dataPos, $tiffData);
+ }
+
+ if ($hasNext) {
+ $pos = $this->_putLong($data, $pos, $dataPos - $offsetBase, $isBigEndian);
+ }
+ else {
+ $pos = $this->_putLong($data, $pos, 0, $isBigEndian);
+ }
+
+ return $dataPos;
+ }
+
+ /*************************************************************/
+ function & _getIFDEntries($isBigEndian, $mode)
+ {
+ $EXIFNames = $this->_exifTagNames($mode);
+ $EXIFTags = $this->_exifNameTags($mode);
+ $EXIFTypeInfo = $this->_exifTagTypes($mode);
+
+ $ifdEntries = array();
+ $entryCount = 0;
+
+ reset($EXIFNames);
+ while (list($tag, $name) = each($EXIFNames)) {
+ $type = $EXIFTypeInfo[$tag][0];
+ $count = $EXIFTypeInfo[$tag][1];
+ $value = null;
+
+ if (($mode == 'ifd0') && ($tag == 0x8769)) { // ExifIFDOffset
+ if (isset($this->_info['exif']['EXIFVersion'])) {
+ $value =& $this->_getIFDEntries($isBigEndian, "exif");
+ $type = -99;
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'ifd0') && ($tag == 0x8825)) { // GPSIFDOffset
+ if (isset($this->_info['exif']['GPSVersionID'])) {
+ $value =& $this->_getIFDEntries($isBigEndian, "gps");
+ $type = -99;
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0111)) { // TIFFStripOffsets
+ if (isset($this->_info['exif']['TIFFStrips'])) {
+ $value =& $this->_info['exif']['TIFFStrips'];
+ $type = -98;
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0117)) { // TIFFStripByteCounts
+ if (isset($this->_info['exif']['TIFFStrips'])) {
+ $value = strlen($this->_info['exif']['TIFFStrips']);
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0201)) { // TIFFJFIFOffset
+ if (isset($this->_info['exif']['JFIFThumbnail'])) {
+ $value =& $this->_info['exif']['JFIFThumbnail'];
+ $type = -98;
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'ifd1') && ($tag == 0x0202)) { // TIFFJFIFLength
+ if (isset($this->_info['exif']['JFIFThumbnail'])) {
+ $value = strlen($this->_info['exif']['JFIFThumbnail']);
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (($mode == 'exif') && ($tag == 0xA005)) { // InteropIFDOffset
+ if (isset($this->_info['exif']['InteroperabilityIndex'])) {
+ $value =& $this->_getIFDEntries($isBigEndian, "interop");
+ $type = -99;
+ }
+ else {
+ $value = null;
+ }
+ }
+ elseif (isset($this->_info['exif'][$name])) {
+ $origValue =& $this->_info['exif'][$name];
+
+ // This makes it easier to process variable size elements
+ if (!is_array($origValue) || isset($origValue['val'])) {
+ unset($origValue); // Break the reference
+ $origValue = array($this->_info['exif'][$name]);
+ }
+ $origCount = count($origValue);
+
+ if ($origCount == 0 ) {
+ $type = -1; // To ignore this field
+ }
+
+ $value = " ";
+
+ switch ($type) {
+ case 1: // UBYTE
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+
+ $this->_putByte($value, $j, $origValue[$j]);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putByte($value, $j, 0);
+ $j++;
+ }
+ break;
+ case 2: // ASCII
+ $v = strval($origValue[0]);
+ if (($count != 0) && (strlen($v) > $count)) {
+ $v = substr($v, 0, $count);
+ }
+ elseif (($count > 0) && (strlen($v) < $count)) {
+ $v = str_pad($v, $count, "\0");
+ }
+
+ $count = strlen($v);
+
+ $this->_putString($value, 0, $v);
+ break;
+ case 3: // USHORT
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $this->_putShort($value, $j * 2, $origValue[$j], $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putShort($value, $j * 2, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 4: // ULONG
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $this->_putLong($value, $j * 4, $origValue[$j], $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putLong($value, $j * 4, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 5: // URATIONAL
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $v = $origValue[$j];
+ if (is_array($v)) {
+ $a = $v['num'];
+ $b = $v['den'];
+ }
+ else {
+ $a = 0;
+ $b = 0;
+ // TODO: Allow other types and convert them
+ }
+ $this->_putLong($value, $j * 8, $a, $isBigEndian);
+ $this->_putLong($value, ($j * 8) + 4, $b, $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putLong($value, $j * 8, 0, $isBigEndian);
+ $this->_putLong($value, ($j * 8) + 4, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 6: // SBYTE
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $this->_putByte($value, $j, $origValue[$j]);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putByte($value, $j, 0);
+ $j++;
+ }
+ break;
+ case 7: // UNDEFINED
+ $v = strval($origValue[0]);
+ if (($count != 0) && (strlen($v) > $count)) {
+ $v = substr($v, 0, $count);
+ }
+ elseif (($count > 0) && (strlen($v) < $count)) {
+ $v = str_pad($v, $count, "\0");
+ }
+
+ $count = strlen($v);
+
+ $this->_putString($value, 0, $v);
+ break;
+ case 8: // SSHORT
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $this->_putShort($value, $j * 2, $origValue[$j], $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putShort($value, $j * 2, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 9: // SLONG
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $this->_putLong($value, $j * 4, $origValue[$j], $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putLong($value, $j * 4, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 10: // SRATIONAL
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $v = $origValue[$j];
+ if (is_array($v)) {
+ $a = $v['num'];
+ $b = $v['den'];
+ }
+ else {
+ $a = 0;
+ $b = 0;
+ // TODO: Allow other types and convert them
+ }
+
+ $this->_putLong($value, $j * 8, $a, $isBigEndian);
+ $this->_putLong($value, ($j * 8) + 4, $b, $isBigEndian);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putLong($value, $j * 8, 0, $isBigEndian);
+ $this->_putLong($value, ($j * 8) + 4, 0, $isBigEndian);
+ $j++;
+ }
+ break;
+ case 11: // FLOAT
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $v = strval($origValue[$j]);
+ if (strlen($v) > 4) {
+ $v = substr($v, 0, 4);
+ }
+ elseif (strlen($v) < 4) {
+ $v = str_pad($v, 4, "\0");
+ }
+ $this->_putString($value, $j * 4, $v);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putString($value, $j * 4, "\0\0\0\0");
+ $j++;
+ }
+ break;
+ case 12: // DFLOAT
+ if ($count == 0) {
+ $count = $origCount;
+ }
+
+ $j = 0;
+ while (($j < $count) && ($j < $origCount)) {
+ $v = strval($origValue[$j]);
+ if (strlen($v) > 8) {
+ $v = substr($v, 0, 8);
+ }
+ elseif (strlen($v) < 8) {
+ $v = str_pad($v, 8, "\0");
+ }
+ $this->_putString($value, $j * 8, $v);
+ $j++;
+ }
+
+ while ($j < $count) {
+ $this->_putString($value, $j * 8, "\0\0\0\0\0\0\0\0");
+ $j++;
+ }
+ break;
+ default:
+ $value = null;
+ break;
+ }
+ }
+
+ if ($value != null) {
+ $ifdEntries[$entryCount] = array();
+ $ifdEntries[$entryCount]['tag'] = $tag;
+ $ifdEntries[$entryCount]['type'] = $type;
+ $ifdEntries[$entryCount]['count'] = $count;
+ $ifdEntries[$entryCount]['value'] = $value;
+
+ $entryCount++;
+ }
+ }
+
+ return $ifdEntries;
+ }
+
+ /*************************************************************/
+ function _parseMarkerAdobe()
+ {
+ if (!isset($this->_markers)) {
+ $this->_readJPEG();
+ }
+
+ if ($this->_markers == null) {
+ return false;
+ }
+
+ $data = null;
+ $count = count($this->_markers);
+ for ($i = 0; $i < $count; $i++) {
+ if ($this->_markers[$i]['marker'] == 0xED) {
+ $signature = $this->_getFixedString($this->_markers[$i]['data'], 0, 14);
+ if ($signature == "Photoshop 3.0\0") {
+ $data =& $this->_markers[$i]['data'];
+ break;
+ }
+ }
+ }
+
+ if ($data == null) {
+ $this->_info['adobe'] = false;
+ $this->_info['iptc'] = false;
+ return false;
+ }
+ $pos = 14;
+ $this->_info['adobe'] = array();
+ $this->_info['adobe']['raw'] = array();
+ $this->_info['iptc'] = array();
+
+ $datasize = strlen($data);
+
+ while ($pos < $datasize) {
+ $signature = $this->_getFixedString($data, $pos, 4);
+ if ($signature != '8BIM')
+ return false;
+ $pos += 4;
+
+ $type = $this->_getShort($data, $pos);
+ $pos += 2;
+
+ $strlen = $this->_getByte($data, $pos);
+ $pos += 1;
+ $header = '';
+ for ($i = 0; $i < $strlen; $i++) {
+ $header .= $data{$pos + $i};
+ }
+ $pos += $strlen + 1 - ($strlen % 2); // The string is padded to even length, counting the length byte itself
+
+ $length = $this->_getLong($data, $pos);
+ $pos += 4;
+
+ $basePos = $pos;
+
+ switch ($type) {
+ case 0x0404: // Caption (IPTC Data)
+ $pos = $this->_readIPTC($data, $pos);
+ if ($pos == false)
+ return false;
+ break;
+ case 0x040A: // CopyrightFlag
+ $this->_info['adobe']['CopyrightFlag'] = $this->_getByte($data, $pos);
+ $pos += $length;
+ break;
+ case 0x040B: // ImageURL
+ $this->_info['adobe']['ImageURL'] = $this->_getFixedString($data, $pos, $length);
+ $pos += $length;
+ break;
+ case 0x040C: // Thumbnail
+ $aux = $this->_getLong($data, $pos);
+ $pos += 4;
+ if ($aux == 1) {
+ $this->_info['adobe']['ThumbnailWidth'] = $this->_getLong($data, $pos);
+ $pos += 4;
+ $this->_info['adobe']['ThumbnailHeight'] = $this->_getLong($data, $pos);
+ $pos += 4;
+
+ $pos += 16; // Skip some data
+
+ $this->_info['adobe']['ThumbnailData'] = $this->_getFixedString($data, $pos, $length - 28);
+ $pos += $length - 28;
+ }
+ break;
+ default:
+ break;
+ }
+
+ // We save all blocks, even those we recognized
+ $label = sprintf('8BIM_0x%04x', $type);
+ $this->_info['adobe']['raw'][$label] = array();
+ $this->_info['adobe']['raw'][$label]['type'] = $type;
+ $this->_info['adobe']['raw'][$label]['header'] = $header;
+ $this->_info['adobe']['raw'][$label]['data'] =& $this->_getFixedString($data, $basePos, $length);
+
+ $pos = $basePos + $length + ($length % 2); // Even padding
+ }
+
+ }
+
+ /*************************************************************/
+ function _readIPTC(&$data, $pos = 0)
+ {
+ $totalLength = strlen($data);
+
+ $IPTCTags =& $this->_iptcTagNames();
+
+ while ($pos < ($totalLength - 5)) {
+ $signature = $this->_getShort($data, $pos);
+ if ($signature != 0x1C02)
+ return $pos;
+ $pos += 2;
+
+ $type = $this->_getByte($data, $pos);
+ $pos += 1;
+ $length = $this->_getShort($data, $pos);
+ $pos += 2;
+
+ $basePos = $pos;
+ $label = '';
+
+ if (isset($IPTCTags[$type])) {
+ $label = $IPTCTags[$type];
+ }
+ else {
+ $label = sprintf('IPTC_0x%02x', $type);
+ }
+
+ if ($label != '') {
+ if (isset($this->_info['iptc'][$label])) {
+ if (!is_array($this->_info['iptc'][$label])) {
+ $aux = array();
+ $aux[0] = $this->_info['iptc'][$label];
+ $this->_info['iptc'][$label] = $aux;
+ }
+ $this->_info['iptc'][$label][ count($this->_info['iptc'][$label]) ] = $this->_getFixedString($data, $pos, $length);
+ }
+ else {
+ $this->_info['iptc'][$label] = $this->_getFixedString($data, $pos, $length);
+ }
+ }
+
+ $pos = $basePos + $length; // No padding
+ }
+ return $pos;
+ }
+
+ /*************************************************************/
+ function & _createMarkerAdobe()
+ {
+ if (isset($this->_info['iptc'])) {
+ if (!isset($this->_info['adobe'])) {
+ $this->_info['adobe'] = array();
+ }
+ if (!isset($this->_info['adobe']['raw'])) {
+ $this->_info['adobe']['raw'] = array();
+ }
+ if (!isset($this->_info['adobe']['raw']['8BIM_0x0404'])) {
+ $this->_info['adobe']['raw']['8BIM_0x0404'] = array();
+ }
+ $this->_info['adobe']['raw']['8BIM_0x0404']['type'] = 0x0404;
+ $this->_info['adobe']['raw']['8BIM_0x0404']['header'] = "Caption";
+ $this->_info['adobe']['raw']['8BIM_0x0404']['data'] =& $this->_writeIPTC();
+ }
+
+ if (isset($this->_info['adobe']['raw']) && (count($this->_info['adobe']['raw']) > 0)) {
+ $data = "Photoshop 3.0\0";
+ $pos = 14;
+
+ reset($this->_info['adobe']['raw']);
+ while (list($key) = each($this->_info['adobe']['raw'])) {
+ $pos = $this->_write8BIM(
+ $data,
+ $pos,
+ $this->_info['adobe']['raw'][$key]['type'],
+ $this->_info['adobe']['raw'][$key]['header'],
+ $this->_info['adobe']['raw'][$key]['data'] );
+ }
+ }
+
+ return $data;
+ }
+
+ /*************************************************************/
+ function _write8BIM(&$data, $pos, $type, $header, &$value)
+ {
+ $signature = "8BIM";
+
+ $pos = $this->_putString($data, $pos, $signature);
+ $pos = $this->_putShort($data, $pos, $type);
+
+ $len = strlen($header);
+
+ $pos = $this->_putByte($data, $pos, $len);
+ $pos = $this->_putString($data, $pos, $header);
+ if (($len % 2) == 0) { // Even padding, including the length byte
+ $pos = $this->_putByte($data, $pos, 0);
+ }
+
+ $len = strlen($value);
+ $pos = $this->_putLong($data, $pos, $len);
+ $pos = $this->_putString($data, $pos, $value);
+ if (($len % 2) != 0) { // Even padding
+ $pos = $this->_putByte($data, $pos, 0);
+ }
+ return $pos;
+ }
+
+ /*************************************************************/
+ function & _writeIPTC()
+ {
+ $data = " ";
+ $pos = 0;
+
+ $IPTCNames =& $this->_iptcNameTags();
+
+ reset($this->_info['iptc']);
+
+
+ while (list($label) = each($this->_info['iptc'])) {
+ $value =& $this->_info['iptc'][$label];
+ $type = -1;
+
+ if (isset($IPTCNames[$label])) {
+ $type = $IPTCNames[$label];
+ }
+ elseif (substr($label, 0, 7) == "IPTC_0x") {
+ $type = hexdec(substr($label, 7, 2));
+ }
+
+ if ($type != -1) {
+ if (is_array($value)) {
+ for ($i = 0; $i < count($value); $i++) {
+ $pos = $this->_writeIPTCEntry($data, $pos, $type, $value[$i]);
+ }
+ }
+ else {
+ $pos = $this->_writeIPTCEntry($data, $pos, $type, $value);
+ }
+ }
+ }
+
+ return $data;
+ }
+
+ /*************************************************************/
+ function _writeIPTCEntry(&$data, $pos, $type, &$value)
+ {
+ $pos = $this->_putShort($data, $pos, 0x1C02);
+ $pos = $this->_putByte($data, $pos, $type);
+ $pos = $this->_putShort($data, $pos, strlen($value));
+ $pos = $this->_putString($data, $pos, $value);
+
+ return $pos;
+ }
+
+ /*************************************************************/
+ function _exifTagNames($mode)
+ {
+ $tags = array();
+
+ if ($mode == 'ifd0') {
+ $tags[0x010E] = 'ImageDescription';
+ $tags[0x010F] = 'Make';
+ $tags[0x0110] = 'Model';
+ $tags[0x0112] = 'Orientation';
+ $tags[0x011A] = 'XResolution';
+ $tags[0x011B] = 'YResolution';
+ $tags[0x0128] = 'ResolutionUnit';
+ $tags[0x0131] = 'Software';
+ $tags[0x0132] = 'DateTime';
+ $tags[0x013B] = 'Artist';
+ $tags[0x013E] = 'WhitePoint';
+ $tags[0x013F] = 'PrimaryChromaticities';
+ $tags[0x0211] = 'YCbCrCoefficients';
+ $tags[0x0212] = 'YCbCrSubSampling';
+ $tags[0x0213] = 'YCbCrPositioning';
+ $tags[0x0214] = 'ReferenceBlackWhite';
+ $tags[0x8298] = 'Copyright';
+ $tags[0x8769] = 'ExifIFDOffset';
+ $tags[0x8825] = 'GPSIFDOffset';
+ }
+ if ($mode == 'ifd1') {
+ $tags[0x00FE] = 'TIFFNewSubfileType';
+ $tags[0x00FF] = 'TIFFSubfileType';
+ $tags[0x0100] = 'TIFFImageWidth';
+ $tags[0x0101] = 'TIFFImageHeight';
+ $tags[0x0102] = 'TIFFBitsPerSample';
+ $tags[0x0103] = 'TIFFCompression';
+ $tags[0x0106] = 'TIFFPhotometricInterpretation';
+ $tags[0x0107] = 'TIFFThreshholding';
+ $tags[0x0108] = 'TIFFCellWidth';
+ $tags[0x0109] = 'TIFFCellLength';
+ $tags[0x010A] = 'TIFFFillOrder';
+ $tags[0x010E] = 'TIFFImageDescription';
+ $tags[0x010F] = 'TIFFMake';
+ $tags[0x0110] = 'TIFFModel';
+ $tags[0x0111] = 'TIFFStripOffsets';
+ $tags[0x0112] = 'TIFFOrientation';
+ $tags[0x0115] = 'TIFFSamplesPerPixel';
+ $tags[0x0116] = 'TIFFRowsPerStrip';
+ $tags[0x0117] = 'TIFFStripByteCounts';
+ $tags[0x0118] = 'TIFFMinSampleValue';
+ $tags[0x0119] = 'TIFFMaxSampleValue';
+ $tags[0x011A] = 'TIFFXResolution';
+ $tags[0x011B] = 'TIFFYResolution';
+ $tags[0x011C] = 'TIFFPlanarConfiguration';
+ $tags[0x0122] = 'TIFFGrayResponseUnit';
+ $tags[0x0123] = 'TIFFGrayResponseCurve';
+ $tags[0x0128] = 'TIFFResolutionUnit';
+ $tags[0x0131] = 'TIFFSoftware';
+ $tags[0x0132] = 'TIFFDateTime';
+ $tags[0x013B] = 'TIFFArtist';
+ $tags[0x013C] = 'TIFFHostComputer';
+ $tags[0x0140] = 'TIFFColorMap';
+ $tags[0x0152] = 'TIFFExtraSamples';
+ $tags[0x0201] = 'TIFFJFIFOffset';
+ $tags[0x0202] = 'TIFFJFIFLength';
+ $tags[0x0211] = 'TIFFYCbCrCoefficients';
+ $tags[0x0212] = 'TIFFYCbCrSubSampling';
+ $tags[0x0213] = 'TIFFYCbCrPositioning';
+ $tags[0x0214] = 'TIFFReferenceBlackWhite';
+ $tags[0x8298] = 'TIFFCopyright';
+ $tags[0x9286] = 'TIFFUserComment';
+ }
+ elseif ($mode == 'exif') {
+ $tags[0x829A] = 'ExposureTime';
+ $tags[0x829D] = 'FNumber';
+ $tags[0x8822] = 'ExposureProgram';
+ $tags[0x8824] = 'SpectralSensitivity';
+ $tags[0x8827] = 'ISOSpeedRatings';
+ $tags[0x8828] = 'OECF';
+ $tags[0x9000] = 'EXIFVersion';
+ $tags[0x9003] = 'DatetimeOriginal';
+ $tags[0x9004] = 'DatetimeDigitized';
+ $tags[0x9101] = 'ComponentsConfiguration';
+ $tags[0x9102] = 'CompressedBitsPerPixel';
+ $tags[0x9201] = 'ShutterSpeedValue';
+ $tags[0x9202] = 'ApertureValue';
+ $tags[0x9203] = 'BrightnessValue';
+ $tags[0x9204] = 'ExposureBiasValue';
+ $tags[0x9205] = 'MaxApertureValue';
+ $tags[0x9206] = 'SubjectDistance';
+ $tags[0x9207] = 'MeteringMode';
+ $tags[0x9208] = 'LightSource';
+ $tags[0x9209] = 'Flash';
+ $tags[0x920A] = 'FocalLength';
+ $tags[0x927C] = 'MakerNote';
+ $tags[0x9286] = 'UserComment';
+ $tags[0x9290] = 'SubSecTime';
+ $tags[0x9291] = 'SubSecTimeOriginal';
+ $tags[0x9292] = 'SubSecTimeDigitized';
+ $tags[0xA000] = 'FlashPixVersion';
+ $tags[0xA001] = 'ColorSpace';
+ $tags[0xA002] = 'PixelXDimension';
+ $tags[0xA003] = 'PixelYDimension';
+ $tags[0xA004] = 'RelatedSoundFile';
+ $tags[0xA005] = 'InteropIFDOffset';
+ $tags[0xA20B] = 'FlashEnergy';
+ $tags[0xA20C] = 'SpatialFrequencyResponse';
+ $tags[0xA20E] = 'FocalPlaneXResolution';
+ $tags[0xA20F] = 'FocalPlaneYResolution';
+ $tags[0xA210] = 'FocalPlaneResolutionUnit';
+ $tags[0xA214] = 'SubjectLocation';
+ $tags[0xA215] = 'ExposureIndex';
+ $tags[0xA217] = 'SensingMethod';
+ $tags[0xA300] = 'FileSource';
+ $tags[0xA301] = 'SceneType';
+ $tags[0xA302] = 'CFAPattern';
+ }
+ elseif ($mode == 'interop') {
+ $tags[0x0001] = 'InteroperabilityIndex';
+ $tags[0x0002] = 'InteroperabilityVersion';
+ $tags[0x1000] = 'RelatedImageFileFormat';
+ $tags[0x1001] = 'RelatedImageWidth';
+ $tags[0x1002] = 'RelatedImageLength';
+ }
+ elseif ($mode == 'gps') {
+ $tags[0x0000] = 'GPSVersionID';
+ $tags[0x0001] = 'GPSLatitudeRef';
+ $tags[0x0002] = 'GPSLatitude';
+ $tags[0x0003] = 'GPSLongitudeRef';
+ $tags[0x0004] = 'GPSLongitude';
+ $tags[0x0005] = 'GPSAltitudeRef';
+ $tags[0x0006] = 'GPSAltitude';
+ $tags[0x0007] = 'GPSTimeStamp';
+ $tags[0x0008] = 'GPSSatellites';
+ $tags[0x0009] = 'GPSStatus';
+ $tags[0x000A] = 'GPSMeasureMode';
+ $tags[0x000B] = 'GPSDOP';
+ $tags[0x000C] = 'GPSSpeedRef';
+ $tags[0x000D] = 'GPSSpeed';
+ $tags[0x000E] = 'GPSTrackRef';
+ $tags[0x000F] = 'GPSTrack';
+ $tags[0x0010] = 'GPSImgDirectionRef';
+ $tags[0x0011] = 'GPSImgDirection';
+ $tags[0x0012] = 'GPSMapDatum';
+ $tags[0x0013] = 'GPSDestLatitudeRef';
+ $tags[0x0014] = 'GPSDestLatitude';
+ $tags[0x0015] = 'GPSDestLongitudeRef';
+ $tags[0x0016] = 'GPSDestLongitude';
+ $tags[0x0017] = 'GPSDestBearingRef';
+ $tags[0x0018] = 'GPSDestBearing';
+ $tags[0x0019] = 'GPSDestDistanceRef';
+ $tags[0x001A] = 'GPSDestDistance';
+ }
+
+ return $tags;
+ }
+
+ /*************************************************************/
+ function _exifTagTypes($mode)
+ {
+ $tags = array();
+
+ if ($mode == 'ifd0') {
+ $tags[0x010E] = array(2, 0); // ImageDescription -> ASCII, Any
+ $tags[0x010F] = array(2, 0); // Make -> ASCII, Any
+ $tags[0x0110] = array(2, 0); // Model -> ASCII, Any
+ $tags[0x0112] = array(3, 1); // Orientation -> SHORT, 1
+ $tags[0x011A] = array(5, 1); // XResolution -> RATIONAL, 1
+ $tags[0x011B] = array(5, 1); // YResolution -> RATIONAL, 1
+ $tags[0x0128] = array(3, 1); // ResolutionUnit -> SHORT
+ $tags[0x0131] = array(2, 0); // Software -> ASCII, Any
+ $tags[0x0132] = array(2, 20); // DateTime -> ASCII, 20
+ $tags[0x013B] = array(2, 0); // Artist -> ASCII, Any
+ $tags[0x013E] = array(5, 2); // WhitePoint -> RATIONAL, 2
+ $tags[0x013F] = array(5, 6); // PrimaryChromaticities -> RATIONAL, 6
+ $tags[0x0211] = array(5, 3); // YCbCrCoefficients -> RATIONAL, 3
+ $tags[0x0212] = array(3, 2); // YCbCrSubSampling -> SHORT, 2
+ $tags[0x0213] = array(3, 1); // YCbCrPositioning -> SHORT, 1
+ $tags[0x0214] = array(5, 6); // ReferenceBlackWhite -> RATIONAL, 6
+ $tags[0x8298] = array(2, 0); // Copyright -> ASCII, Any
+ $tags[0x8769] = array(4, 1); // ExifIFDOffset -> LONG, 1
+ $tags[0x8825] = array(4, 1); // GPSIFDOffset -> LONG, 1
+ }
+ if ($mode == 'ifd1') {
+ $tags[0x00FE] = array(4, 1); // TIFFNewSubfileType -> LONG, 1
+ $tags[0x00FF] = array(3, 1); // TIFFSubfileType -> SHORT, 1
+ $tags[0x0100] = array(4, 1); // TIFFImageWidth -> LONG (or SHORT), 1
+ $tags[0x0101] = array(4, 1); // TIFFImageHeight -> LONG (or SHORT), 1
+ $tags[0x0102] = array(3, 3); // TIFFBitsPerSample -> SHORT, 3
+ $tags[0x0103] = array(3, 1); // TIFFCompression -> SHORT, 1
+ $tags[0x0106] = array(3, 1); // TIFFPhotometricInterpretation -> SHORT, 1
+ $tags[0x0107] = array(3, 1); // TIFFThreshholding -> SHORT, 1
+ $tags[0x0108] = array(3, 1); // TIFFCellWidth -> SHORT, 1
+ $tags[0x0109] = array(3, 1); // TIFFCellLength -> SHORT, 1
+ $tags[0x010A] = array(3, 1); // TIFFFillOrder -> SHORT, 1
+ $tags[0x010E] = array(2, 0); // TIFFImageDescription -> ASCII, Any
+ $tags[0x010F] = array(2, 0); // TIFFMake -> ASCII, Any
+ $tags[0x0110] = array(2, 0); // TIFFModel -> ASCII, Any
+ $tags[0x0111] = array(4, 0); // TIFFStripOffsets -> LONG (or SHORT), Any (one per strip)
+ $tags[0x0112] = array(3, 1); // TIFFOrientation -> SHORT, 1
+ $tags[0x0115] = array(3, 1); // TIFFSamplesPerPixel -> SHORT, 1
+ $tags[0x0116] = array(4, 1); // TIFFRowsPerStrip -> LONG (or SHORT), 1
+ $tags[0x0117] = array(4, 0); // TIFFStripByteCounts -> LONG (or SHORT), Any (one per strip)
+ $tags[0x0118] = array(3, 0); // TIFFMinSampleValue -> SHORT, Any (SamplesPerPixel)
+ $tags[0x0119] = array(3, 0); // TIFFMaxSampleValue -> SHORT, Any (SamplesPerPixel)
+ $tags[0x011A] = array(5, 1); // TIFFXResolution -> RATIONAL, 1
+ $tags[0x011B] = array(5, 1); // TIFFYResolution -> RATIONAL, 1
+ $tags[0x011C] = array(3, 1); // TIFFPlanarConfiguration -> SHORT, 1
+ $tags[0x0122] = array(3, 1); // TIFFGrayResponseUnit -> SHORT, 1
+ $tags[0x0123] = array(3, 0); // TIFFGrayResponseCurve -> SHORT, Any (2^BitsPerSample)
+ $tags[0x0128] = array(3, 1); // TIFFResolutionUnit -> SHORT, 1
+ $tags[0x0131] = array(2, 0); // TIFFSoftware -> ASCII, Any
+ $tags[0x0132] = array(2, 20); // TIFFDateTime -> ASCII, 20
+ $tags[0x013B] = array(2, 0); // TIFFArtist -> ASCII, Any
+ $tags[0x013C] = array(2, 0); // TIFFHostComputer -> ASCII, Any
+ $tags[0x0140] = array(3, 0); // TIFFColorMap -> SHORT, Any (3 * 2^BitsPerSample)
+ $tags[0x0152] = array(3, 0); // TIFFExtraSamples -> SHORT, Any (SamplesPerPixel - 3)
+ $tags[0x0201] = array(4, 1); // TIFFJFIFOffset -> LONG, 1
+ $tags[0x0202] = array(4, 1); // TIFFJFIFLength -> LONG, 1
+ $tags[0x0211] = array(5, 3); // TIFFYCbCrCoefficients -> RATIONAL, 3
+ $tags[0x0212] = array(3, 2); // TIFFYCbCrSubSampling -> SHORT, 2
+ $tags[0x0213] = array(3, 1); // TIFFYCbCrPositioning -> SHORT, 1
+ $tags[0x0214] = array(5, 6); // TIFFReferenceBlackWhite -> RATIONAL, 6
+ $tags[0x8298] = array(2, 0); // TIFFCopyright -> ASCII, Any
+ $tags[0x9286] = array(2, 0); // TIFFUserComment -> ASCII, Any
+ }
+ elseif ($mode == 'exif') {
+ $tags[0x829A] = array(5, 1); // ExposureTime -> RATIONAL, 1
+ $tags[0x829D] = array(5, 1); // FNumber -> RATIONAL, 1
+ $tags[0x8822] = array(3, 1); // ExposureProgram -> SHORT, 1
+ $tags[0x8824] = array(2, 0); // SpectralSensitivity -> ASCII, Any
+ $tags[0x8827] = array(3, 0); // ISOSpeedRatings -> SHORT, Any
+ $tags[0x8828] = array(7, 0); // OECF -> UNDEFINED, Any
+ $tags[0x9000] = array(7, 4); // EXIFVersion -> UNDEFINED, 4
+ $tags[0x9003] = array(2, 20); // DatetimeOriginal -> ASCII, 20
+ $tags[0x9004] = array(2, 20); // DatetimeDigitized -> ASCII, 20
+ $tags[0x9101] = array(7, 4); // ComponentsConfiguration -> UNDEFINED, 4
+ $tags[0x9102] = array(5, 1); // CompressedBitsPerPixel -> RATIONAL, 1
+ $tags[0x9201] = array(10, 1); // ShutterSpeedValue -> SRATIONAL, 1
+ $tags[0x9202] = array(5, 1); // ApertureValue -> RATIONAL, 1
+ $tags[0x9203] = array(10, 1); // BrightnessValue -> SRATIONAL, 1
+ $tags[0x9204] = array(10, 1); // ExposureBiasValue -> SRATIONAL, 1
+ $tags[0x9205] = array(5, 1); // MaxApertureValue -> RATIONAL, 1
+ $tags[0x9206] = array(5, 1); // SubjectDistance -> RATIONAL, 1
+ $tags[0x9207] = array(3, 1); // MeteringMode -> SHORT, 1
+ $tags[0x9208] = array(3, 1); // LightSource -> SHORT, 1
+ $tags[0x9209] = array(3, 1); // Flash -> SHORT, 1
+ $tags[0x920A] = array(5, 1); // FocalLength -> RATIONAL, 1
+ $tags[0x927C] = array(7, 0); // MakerNote -> UNDEFINED, Any
+ $tags[0x9286] = array(7, 0); // UserComment -> UNDEFINED, Any
+ $tags[0x9290] = array(2, 0); // SubSecTime -> ASCII, Any
+ $tags[0x9291] = array(2, 0); // SubSecTimeOriginal -> ASCII, Any
+ $tags[0x9292] = array(2, 0); // SubSecTimeDigitized -> ASCII, Any
+ $tags[0xA000] = array(7, 4); // FlashPixVersion -> UNDEFINED, 4
+ $tags[0xA001] = array(3, 1); // ColorSpace -> SHORT, 1
+ $tags[0xA002] = array(4, 1); // PixelXDimension -> LONG (or SHORT), 1
+ $tags[0xA003] = array(4, 1); // PixelYDimension -> LONG (or SHORT), 1
+ $tags[0xA004] = array(2, 13); // RelatedSoundFile -> ASCII, 13
+ $tags[0xA005] = array(4, 1); // InteropIFDOffset -> LONG, 1
+ $tags[0xA20B] = array(5, 1); // FlashEnergy -> RATIONAL, 1
+ $tags[0xA20C] = array(7, 0); // SpatialFrequencyResponse -> UNDEFINED, Any
+ $tags[0xA20E] = array(5, 1); // FocalPlaneXResolution -> RATIONAL, 1
+ $tags[0xA20F] = array(5, 1); // FocalPlaneYResolution -> RATIONAL, 1
+ $tags[0xA210] = array(3, 1); // FocalPlaneResolutionUnit -> SHORT, 1
+ $tags[0xA214] = array(3, 2); // SubjectLocation -> SHORT, 2
+ $tags[0xA215] = array(5, 1); // ExposureIndex -> RATIONAL, 1
+ $tags[0xA217] = array(3, 1); // SensingMethod -> SHORT, 1
+ $tags[0xA300] = array(7, 1); // FileSource -> UNDEFINED, 1
+ $tags[0xA301] = array(7, 1); // SceneType -> UNDEFINED, 1
+ $tags[0xA302] = array(7, 0); // CFAPattern -> UNDEFINED, Any
+ }
+ elseif ($mode == 'interop') {
+ $tags[0x0001] = array(2, 0); // InteroperabilityIndex -> ASCII, Any
+ $tags[0x0002] = array(7, 4); // InteroperabilityVersion -> UNKNOWN, 4
+ $tags[0x1000] = array(2, 0); // RelatedImageFileFormat -> ASCII, Any
+ $tags[0x1001] = array(4, 1); // RelatedImageWidth -> LONG (or SHORT), 1
+ $tags[0x1002] = array(4, 1); // RelatedImageLength -> LONG (or SHORT), 1
+ }
+ elseif ($mode == 'gps') {
+ $tags[0x0000] = array(1, 4); // GPSVersionID -> BYTE, 4
+ $tags[0x0001] = array(2, 2); // GPSLatitudeRef -> ASCII, 2
+ $tags[0x0002] = array(5, 3); // GPSLatitude -> RATIONAL, 3
+ $tags[0x0003] = array(2, 2); // GPSLongitudeRef -> ASCII, 2
+ $tags[0x0004] = array(5, 3); // GPSLongitude -> RATIONAL, 3
+ $tags[0x0005] = array(2, 2); // GPSAltitudeRef -> ASCII, 2
+ $tags[0x0006] = array(5, 1); // GPSAltitude -> RATIONAL, 1
+ $tags[0x0007] = array(5, 3); // GPSTimeStamp -> RATIONAL, 3
+ $tags[0x0008] = array(2, 0); // GPSSatellites -> ASCII, Any
+ $tags[0x0009] = array(2, 2); // GPSStatus -> ASCII, 2
+ $tags[0x000A] = array(2, 2); // GPSMeasureMode -> ASCII, 2
+ $tags[0x000B] = array(5, 1); // GPSDOP -> RATIONAL, 1
+ $tags[0x000C] = array(2, 2); // GPSSpeedRef -> ASCII, 2
+ $tags[0x000D] = array(5, 1); // GPSSpeed -> RATIONAL, 1
+ $tags[0x000E] = array(2, 2); // GPSTrackRef -> ASCII, 2
+ $tags[0x000F] = array(5, 1); // GPSTrack -> RATIONAL, 1
+ $tags[0x0010] = array(2, 2); // GPSImgDirectionRef -> ASCII, 2
+ $tags[0x0011] = array(5, 1); // GPSImgDirection -> RATIONAL, 1
+ $tags[0x0012] = array(2, 0); // GPSMapDatum -> ASCII, Any
+ $tags[0x0013] = array(2, 2); // GPSDestLatitudeRef -> ASCII, 2
+ $tags[0x0014] = array(5, 3); // GPSDestLatitude -> RATIONAL, 3
+ $tags[0x0015] = array(2, 2); // GPSDestLongitudeRef -> ASCII, 2
+ $tags[0x0016] = array(5, 3); // GPSDestLongitude -> RATIONAL, 3
+ $tags[0x0017] = array(2, 2); // GPSDestBearingRef -> ASCII, 2
+ $tags[0x0018] = array(5, 1); // GPSDestBearing -> RATIONAL, 1
+ $tags[0x0019] = array(2, 2); // GPSDestDistanceRef -> ASCII, 2
+ $tags[0x001A] = array(5, 1); // GPSDestDistance -> RATIONAL, 1
+ }
+
+ return $tags;
+ }
+
+ /*************************************************************/
+ function _exifNameTags($mode)
+ {
+ $tags = $this->_exifTagNames($mode);
+ return $this->_names2Tags($tags);
+ }
+
+ /*************************************************************/
+ function _iptcTagNames()
+ {
+ $tags = array();
+ $tags[0x14] = 'SuplementalCategories';
+ $tags[0x19] = 'Keywords';
+ $tags[0x78] = 'Caption';
+ $tags[0x7A] = 'CaptionWriter';
+ $tags[0x69] = 'Headline';
+ $tags[0x28] = 'SpecialInstructions';
+ $tags[0x0F] = 'Category';
+ $tags[0x50] = 'Byline';
+ $tags[0x55] = 'BylineTitle';
+ $tags[0x6E] = 'Credit';
+ $tags[0x73] = 'Source';
+ $tags[0x74] = 'CopyrightNotice';
+ $tags[0x05] = 'ObjectName';
+ $tags[0x5A] = 'City';
+ $tags[0x5C] = 'Sublocation';
+ $tags[0x5F] = 'ProvinceState';
+ $tags[0x65] = 'CountryName';
+ $tags[0x67] = 'OriginalTransmissionReference';
+ $tags[0x37] = 'DateCreated';
+ $tags[0x0A] = 'CopyrightFlag';
+
+ return $tags;
+ }
+
+ /*************************************************************/
+ function & _iptcNameTags()
+ {
+ $tags = $this->_iptcTagNames();
+ return $this->_names2Tags($tags);
+ }
+
+ /*************************************************************/
+ function _names2Tags($tags2Names)
+ {
+ $names2Tags = array();
+ reset($tags2Names);
+ while (list($tag, $name) = each($tags2Names)) {
+ $names2Tags[$name] = $tag;
+ }
+
+ return $names2Tags;
+ }
+
+ /*************************************************************/
+ function _getByte(&$data, $pos)
+ {
+ return ord($data{$pos});
+ }
+
+ /*************************************************************/
+ function _putByte(&$data, $pos, $val)
+ {
+ $val = intval($val);
+
+ $data{$pos} = chr($val);
+
+ return $pos + 1;
+ }
+
+ /*************************************************************/
+ function _getShort(&$data, $pos, $bigEndian = true)
+ {
+ if ($bigEndian) {
+ return (ord($data{$pos}) << 8)
+ + ord($data{$pos + 1});
+ }
+ else {
+ return ord($data{$pos})
+ + (ord($data{$pos + 1}) << 8);
+ }
+ }
+
+ /*************************************************************/
+ function _putShort(&$data, $pos = 0, $val, $bigEndian = true)
+ {
+ $val = intval($val);
+
+ if ($bigEndian) {
+ $data{$pos + 0} = chr(($val & 0x0000FF00) >> 8);
+ $data{$pos + 1} = chr(($val & 0x000000FF) >> 0);
+ }
+ else {
+ $data{$pos + 0} = chr(($val & 0x00FF) >> 0);
+ $data{$pos + 1} = chr(($val & 0xFF00) >> 8);
+ }
+
+ return $pos + 2;
+ }
+
+ /*************************************************************/
+ function _getLong(&$data, $pos, $bigEndian = true)
+ {
+ if ($bigEndian) {
+ return (ord($data{$pos}) << 24)
+ + (ord($data{$pos + 1}) << 16)
+ + (ord($data{$pos + 2}) << 8)
+ + ord($data{$pos + 3});
+ }
+ else {
+ return ord($data{$pos})
+ + (ord($data{$pos + 1}) << 8)
+ + (ord($data{$pos + 2}) << 16)
+ + (ord($data{$pos + 3}) << 24);
+ }
+ }
+
+ /*************************************************************/
+ function _putLong(&$data, $pos, $val, $bigEndian = true)
+ {
+ $val = intval($val);
+
+ if ($bigEndian) {
+ $data{$pos + 0} = chr(($val & 0xFF000000) >> 24);
+ $data{$pos + 1} = chr(($val & 0x00FF0000) >> 16);
+ $data{$pos + 2} = chr(($val & 0x0000FF00) >> 8);
+ $data{$pos + 3} = chr(($val & 0x000000FF) >> 0);
+ }
+ else {
+ $data{$pos + 0} = chr(($val & 0x000000FF) >> 0);
+ $data{$pos + 1} = chr(($val & 0x0000FF00) >> 8);
+ $data{$pos + 2} = chr(($val & 0x00FF0000) >> 16);
+ $data{$pos + 3} = chr(($val & 0xFF000000) >> 24);
+ }
+
+ return $pos + 4;
+ }
+
+ /*************************************************************/
+ function & _getNullString(&$data, $pos)
+ {
+ $str = '';
+ $max = strlen($data);
+
+ while ($pos < $max) {
+ if (ord($data{$pos}) == 0) {
+ return $str;
+ }
+ else {
+ $str .= $data{$pos};
+ }
+ $pos++;
+ }
+
+ return $str;
+ }
+
+ /*************************************************************/
+ function & _getFixedString(&$data, $pos, $length = -1)
+ {
+ if ($length == -1) {
+ $length = strlen($data) - $pos;
+ }
+
+ return substr($data, $pos, $length);
+ }
+
+ /*************************************************************/
+ function _putString(&$data, $pos, &$str)
+ {
+ $len = strlen($str);
+ for ($i = 0; $i < $len; $i++) {
+ $data{$pos + $i} = $str{$i};
+ }
+
+ return $pos + $len;
+ }
+
+ /*************************************************************/
+ function _hexDump(&$data, $start = 0, $length = -1)
+ {
+ if (($length == -1) || (($length + $start) > strlen($data))) {
+ $end = strlen($data);
+ }
+ else {
+ $end = $start + $length;
+ }
+
+ $ascii = '';
+ $count = 0;
+
+ echo "<tt>\n";
+
+ while ($start < $end) {
+ if (($count % 16) == 0) {
+ echo sprintf('%04d', $count) . ': ';
+ }
+
+ $c = ord($data{$start});
+ $count++;
+ $start++;
+
+ $aux = dechex($c);
+ if (strlen($aux) == 1)
+ echo '0';
+ echo $aux . ' ';
+
+ if ($c == 60)
+ $ascii .= '&lt;';
+ elseif ($c == 62)
+ $ascii .= '&gt;';
+ elseif ($c == 32)
+ $ascii .= '&nbsp;';
+ elseif ($c > 32)
+ $ascii .= chr($c);
+ else
+ $ascii .= '.';
+
+ if (($count % 4) == 0) {
+ echo ' - ';
+ }
+
+ if (($count % 16) == 0) {
+ echo ': ' . $ascii . "<br>\n";
+ $ascii = '';
+ }
+ }
+
+ if ($ascii != '') {
+ while (($count % 16) != 0) {
+ echo '-- ';
+ $count++;
+ if (($count % 4) == 0) {
+ echo ' - ';
+ }
+ }
+ echo ': ' . $ascii . "<br>\n";
+ }
+
+ echo "</tt>\n";
+ }
+
+/*****************************************************************/
+}
+
+/* vim: set expandtab tabstop=4 shiftwidth=4: */
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php b/mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php
new file mode 100644
index 000000000..1c97e2384
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php
@@ -0,0 +1,10849 @@
+<?php
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2007, Ryan Parman and Geoffrey Sneddon
+ * 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 SimplePie Team nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND 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.
+ *
+ * @package SimplePie
+ * @version "Razzleberry"
+ * @copyright 2004-2007 Ryan Parman, Geoffrey Sneddon
+ * @author Ryan Parman
+ * @author Geoffrey Sneddon
+ * @link http://simplepie.org/ SimplePie
+ * @link http://simplepie.org/support/ Please submit all bug reports and feature requests to the SimplePie forums
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @todo phpDoc comments
+ */
+
+/**
+ * SimplePie Name
+ */
+define('SIMPLEPIE_NAME', 'SimplePie');
+
+/**
+ * SimplePie Version
+ */
+define('SIMPLEPIE_VERSION', '1.0.1');
+
+/**
+ * SimplePie Build
+ * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::parse_date() only every load of simplepie.inc)
+ */
+define('SIMPLEPIE_BUILD', 20070719221955);
+
+/**
+ * SimplePie Website URL
+ */
+define('SIMPLEPIE_URL', 'http://simplepie.org/');
+
+/**
+ * SimplePie Useragent
+ * @see SimplePie::set_useragent()
+ */
+define('SIMPLEPIE_USERAGENT', SIMPLEPIE_NAME . '/' . SIMPLEPIE_VERSION . ' (Feed Parser; ' . SIMPLEPIE_URL . '; Allow like Gecko) Build/' . SIMPLEPIE_BUILD);
+
+/**
+ * SimplePie Linkback
+ */
+define('SIMPLEPIE_LINKBACK', '<a href="' . SIMPLEPIE_URL . '" title="' . SIMPLEPIE_NAME . ' ' . SIMPLEPIE_VERSION . '">' . SIMPLEPIE_NAME . '</a>');
+
+/**
+ * No Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_NONE', 0);
+
+/**
+ * Feed Link Element Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', 1);
+
+/**
+ * Local Feed Extension Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', 2);
+
+/**
+ * Local Feed Body Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_LOCAL_BODY', 4);
+
+/**
+ * Remote Feed Extension Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', 8);
+
+/**
+ * Remote Feed Body Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_REMOTE_BODY', 16);
+
+/**
+ * All Feed Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_ALL', 31);
+
+/**
+ * No known feed type
+ */
+define('SIMPLEPIE_TYPE_NONE', 0);
+
+/**
+ * RSS 0.90
+ */
+define('SIMPLEPIE_TYPE_RSS_090', 1);
+
+/**
+ * RSS 0.91 (Netscape)
+ */
+define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', 2);
+
+/**
+ * RSS 0.91 (Userland)
+ */
+define('SIMPLEPIE_TYPE_RSS_091_USERLAND', 4);
+
+/**
+ * RSS 0.91 (both Netscape and Userland)
+ */
+define('SIMPLEPIE_TYPE_RSS_091', 6);
+
+/**
+ * RSS 0.92
+ */
+define('SIMPLEPIE_TYPE_RSS_092', 8);
+
+/**
+ * RSS 0.93
+ */
+define('SIMPLEPIE_TYPE_RSS_093', 16);
+
+/**
+ * RSS 0.94
+ */
+define('SIMPLEPIE_TYPE_RSS_094', 32);
+
+/**
+ * RSS 1.0
+ */
+define('SIMPLEPIE_TYPE_RSS_10', 64);
+
+/**
+ * RSS 2.0
+ */
+define('SIMPLEPIE_TYPE_RSS_20', 128);
+
+/**
+ * RDF-based RSS
+ */
+define('SIMPLEPIE_TYPE_RSS_RDF', 65);
+
+/**
+ * Non-RDF-based RSS (truly intended as syndication format)
+ */
+define('SIMPLEPIE_TYPE_RSS_SYNDICATION', 190);
+
+/**
+ * All RSS
+ */
+define('SIMPLEPIE_TYPE_RSS_ALL', 255);
+
+/**
+ * Atom 0.3
+ */
+define('SIMPLEPIE_TYPE_ATOM_03', 256);
+
+/**
+ * Atom 1.0
+ */
+define('SIMPLEPIE_TYPE_ATOM_10', 512);
+
+/**
+ * All Atom
+ */
+define('SIMPLEPIE_TYPE_ATOM_ALL', 768);
+
+/**
+ * All feed types
+ */
+define('SIMPLEPIE_TYPE_ALL', 1023);
+
+/**
+ * No construct
+ */
+define('SIMPLEPIE_CONSTRUCT_NONE', 0);
+
+/**
+ * Text construct
+ */
+define('SIMPLEPIE_CONSTRUCT_TEXT', 1);
+
+/**
+ * HTML construct
+ */
+define('SIMPLEPIE_CONSTRUCT_HTML', 2);
+
+/**
+ * XHTML construct
+ */
+define('SIMPLEPIE_CONSTRUCT_XHTML', 4);
+
+/**
+ * base64-encoded construct
+ */
+define('SIMPLEPIE_CONSTRUCT_BASE64', 8);
+
+/**
+ * IRI construct
+ */
+define('SIMPLEPIE_CONSTRUCT_IRI', 16);
+
+/**
+ * A construct that might be HTML
+ */
+define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32);
+
+/**
+ * All constructs
+ */
+define('SIMPLEPIE_CONSTRUCT_ALL', 63);
+
+/**
+ * PCRE for HTML attributes
+ */
+define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)(?:\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[a-z0-9\-._:]*)))?)*)\s*');
+
+/**
+ * PCRE for XML attributes
+ */
+define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*');
+
+/**
+ * XML Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_XML', 'http://www.w3.org/XML/1998/namespace');
+
+/**
+ * Atom 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ATOM_10', 'http://www.w3.org/2005/Atom');
+
+/**
+ * Atom 0.3 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ATOM_03', 'http://purl.org/atom/ns#');
+
+/**
+ * RDF Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RDF', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
+
+/**
+ * RSS 0.90 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_090', 'http://my.netscape.com/rdf/simple/0.9/');
+
+/**
+ * RSS 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_10', 'http://purl.org/rss/1.0/');
+
+/**
+ * RSS 1.0 Content Module Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', 'http://purl.org/rss/1.0/modules/content/');
+
+/**
+ * DC 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_DC_10', 'http://purl.org/dc/elements/1.0/');
+
+/**
+ * DC 1.1 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_DC_11', 'http://purl.org/dc/elements/1.1/');
+
+/**
+ * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', 'http://www.w3.org/2003/01/geo/wgs84_pos#');
+
+/**
+ * GeoRSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss');
+
+/**
+ * Media RSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/');
+
+/**
+ * iTunes RSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
+
+/**
+ * XHTML Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml');
+
+/**
+ * IANA Link Relations Registry
+ */
+define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/');
+
+/**
+ * Whether we're running on PHP5
+ */
+define('SIMPLEPIE_PHP5', version_compare(PHP_VERSION, '5.0.0', '>='));
+
+/**
+ * SimplePie
+ *
+ * @package SimplePie
+ * @version "Razzleberry"
+ * @copyright 2004-2007 Ryan Parman, Geoffrey Sneddon
+ * @author Ryan Parman
+ * @author Geoffrey Sneddon
+ * @todo Option for type of fetching (cache, not modified header, fetch, etc.)
+ */
+class SimplePie
+{
+ /**
+ * @var array Raw data
+ * @access private
+ */
+ var $data = array();
+
+ /**
+ * @var mixed Error string
+ * @access private
+ */
+ var $error;
+
+ /**
+ * @var object Instance of SimplePie_Sanitize (or other class)
+ * @see SimplePie::set_sanitize_class()
+ * @access private
+ */
+ var $sanitize;
+
+ /**
+ * @var string SimplePie Useragent
+ * @see SimplePie::set_useragent()
+ * @access private
+ */
+ var $useragent = SIMPLEPIE_USERAGENT;
+
+ /**
+ * @var string Feed URL
+ * @see SimplePie::set_feed_url()
+ * @access private
+ */
+ var $feed_url;
+
+ /**
+ * @var object Instance of SimplePie_File to use as a feed
+ * @see SimplePie::set_file()
+ * @access private
+ */
+ var $file;
+
+ /**
+ * @var string Raw feed data
+ * @see SimplePie::set_raw_data()
+ * @access private
+ */
+ var $raw_data;
+
+ /**
+ * @var int Timeout for fetching remote files
+ * @see SimplePie::set_timeout()
+ * @access private
+ */
+ var $timeout = 10;
+
+ /**
+ * @var bool Forces fsockopen() to be used for remote files instead
+ * of cURL, even if a new enough version is installed
+ * @see SimplePie::force_fsockopen()
+ * @access private
+ */
+ var $force_fsockopen = false;
+
+ /**
+ * @var bool Enable/Disable XML dump
+ * @see SimplePie::enable_xml_dump()
+ * @access private
+ */
+ var $xml_dump = false;
+
+ /**
+ * @var bool Enable/Disable Caching
+ * @see SimplePie::enable_cache()
+ * @access private
+ */
+ var $cache = true;
+
+ /**
+ * @var int Cache duration (in seconds)
+ * @see SimplePie::set_cache_duration()
+ * @access private
+ */
+ var $cache_duration = 3600;
+
+ /**
+ * @var int Auto-discovery cache duration (in seconds)
+ * @see SimplePie::set_autodiscovery_cache_duration()
+ * @access private
+ */
+ var $autodiscovery_cache_duration = 604800; // 7 Days.
+
+ /**
+ * @var string Cache location (relative to executing script)
+ * @see SimplePie::set_cache_location()
+ * @access private
+ */
+ var $cache_location = './cache';
+
+ /**
+ * @var string Function that creates the cache filename
+ * @see SimplePie::set_cache_name_function()
+ * @access private
+ */
+ var $cache_name_function = 'md5';
+
+ /**
+ * @var bool Reorder feed by date descending
+ * @see SimplePie::enable_order_by_date()
+ * @access private
+ */
+ var $order_by_date = true;
+
+ /**
+ * @var mixed Force input encoding to be set to the follow value
+ * (false, or anything type-cast to false, disables this feature)
+ * @see SimplePie::set_input_encoding()
+ * @access private
+ */
+ var $input_encoding = false;
+
+ /**
+ * @var int Feed Autodiscovery Level
+ * @see SimplePie::set_autodiscovery_level()
+ * @access private
+ */
+ var $autodiscovery = SIMPLEPIE_LOCATOR_ALL;
+
+ /**
+ * @var string Class used for caching feeds
+ * @see SimplePie::set_cache_class()
+ * @access private
+ */
+ var $cache_class = 'SimplePie_Cache';
+
+ /**
+ * @var string Class used for locating feeds
+ * @see SimplePie::set_locator_class()
+ * @access private
+ */
+ var $locator_class = 'SimplePie_Locator';
+
+ /**
+ * @var string Class used for parsing feeds
+ * @see SimplePie::set_parser_class()
+ * @access private
+ */
+ var $parser_class = 'SimplePie_Parser';
+
+ /**
+ * @var string Class used for fetching feeds
+ * @see SimplePie::set_file_class()
+ * @access private
+ */
+ var $file_class = 'SimplePie_File';
+
+ /**
+ * @var string Class used for items
+ * @see SimplePie::set_item_class()
+ * @access private
+ */
+ var $item_class = 'SimplePie_Item';
+
+ /**
+ * @var string Class used for authors
+ * @see SimplePie::set_author_class()
+ * @access private
+ */
+ var $author_class = 'SimplePie_Author';
+
+ /**
+ * @var string Class used for categories
+ * @see SimplePie::set_category_class()
+ * @access private
+ */
+ var $category_class = 'SimplePie_Category';
+
+ /**
+ * @var string Class used for enclosures
+ * @see SimplePie::set_enclosures_class()
+ * @access private
+ */
+ var $enclosure_class = 'SimplePie_Enclosure';
+
+ /**
+ * @var string Class used for Media RSS <media:text> captions
+ * @see SimplePie::set_caption_class()
+ * @access private
+ */
+ var $caption_class = 'SimplePie_Caption';
+
+ /**
+ * @var string Class used for Media RSS <media:copyright>
+ * @see SimplePie::set_copyright_class()
+ * @access private
+ */
+ var $copyright_class = 'SimplePie_Copyright';
+
+ /**
+ * @var string Class used for Media RSS <media:credit>
+ * @see SimplePie::set_credit_class()
+ * @access private
+ */
+ var $credit_class = 'SimplePie_Credit';
+
+ /**
+ * @var string Class used for Media RSS <media:rating>
+ * @see SimplePie::set_rating_class()
+ * @access private
+ */
+ var $rating_class = 'SimplePie_Rating';
+
+ /**
+ * @var string Class used for Media RSS <media:restriction>
+ * @see SimplePie::set_restriction_class()
+ * @access private
+ */
+ var $restriction_class = 'SimplePie_Restriction';
+
+ /**
+ * @var mixed Set javascript query string parameter (false, or
+ * anything type-cast to false, disables this feature)
+ * @see SimplePie::set_javascript()
+ * @access private
+ */
+ var $javascript = 'js';
+
+ /**
+ * @var int Maximum number of feeds to check with autodiscovery
+ * @see SimplePie::set_max_checked_feeds()
+ * @access private
+ */
+ var $max_checked_feeds = 10;
+
+ /**
+ * @var string Web-accessible path to the handler_favicon.php file.
+ * @see SimplePie::set_favicon_handler()
+ * @access private
+ */
+ var $favicon_handler = '';
+
+ /**
+ * @var string Web-accessible path to the handler_image.php file.
+ * @see SimplePie::set_image_handler()
+ * @access private
+ */
+ var $image_handler = '';
+
+ /**
+ * @var array Stores the URLs when multiple feeds are being initialized.
+ * @see SimplePie::set_feed_url()
+ * @access private
+ */
+ var $multifeed_url = array();
+
+ /**
+ * @var array Stores SimplePie objects when multiple feeds initialized.
+ * @access private
+ */
+ var $multifeed_objects = array();
+
+ /**
+ * @var array Stores the get_object_vars() array for use with multifeeds.
+ * @see SimplePie::set_feed_url()
+ * @access private
+ */
+ var $config_settings = null;
+
+ /**
+ * @var array Stores the default attributes to be stripped by strip_attributes().
+ * @see SimplePie::strip_attributes()
+ * @access private
+ */
+ var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
+
+ /**
+ * @var array Stores the default tags to be stripped by strip_htmltags().
+ * @see SimplePie::strip_htmltags()
+ * @access private
+ */
+ var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
+
+ /**
+ * The SimplePie class contains feed level data and options
+ *
+ * There are two ways that you can create a new SimplePie object. The first
+ * is by passing a feed URL as a parameter to the SimplePie constructor
+ * (as well as optionally setting the cache location and cache expiry). This
+ * will initialise the whole feed with all of the default settings, and you
+ * can begin accessing methods and properties immediately.
+ *
+ * The second way is to create the SimplePie object with no parameters
+ * at all. This will enable you to set configuration options. After setting
+ * them, you must initialise the feed using $feed->init(). At that point the
+ * object's methods and properties will be available to you. This format is
+ * what is used throughout this documentation.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param string $feed_url This is the URL you want to parse.
+ * @param string $cache_location This is where you want the cache to be stored.
+ * @param int $cache_duration This is the number of seconds that you want to store the cache file for.
+ */
+ function SimplePie($feed_url = null, $cache_location = null, $cache_duration = null)
+ {
+ // Other objects, instances created here so we can set options on them
+ $this->sanitize =& new SimplePie_Sanitize;
+
+ // Set options if they're passed to the constructor
+ if ($cache_location !== null)
+ {
+ $this->set_cache_location($cache_location);
+ }
+
+ if ($cache_duration !== null)
+ {
+ $this->set_cache_duration($cache_duration);
+ }
+
+ // Only init the script if we're passed a feed URL
+ if ($feed_url !== null)
+ {
+ $this->set_feed_url($feed_url);
+ $this->init();
+ }
+ }
+
+ /**
+ * Used for converting object to a string
+ */
+ function __toString()
+ {
+ return md5(serialize($this->data));
+ }
+
+ /**
+ * This is the URL of the feed you want to parse.
+ *
+ * This allows you to enter the URL of the feed you want to parse, or the
+ * website you want to try to use auto-discovery on. This takes priority
+ * over any set raw data.
+ *
+ * You can set multiple feeds to mash together by passing an array instead
+ * of a string for the $url. Remember that with each additional feed comes
+ * additional processing and resources.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param mixed $url This is the URL (or array of URLs) that you want to parse.
+ * @see SimplePie::set_raw_data()
+ */
+ function set_feed_url($url)
+ {
+ if (is_array($url))
+ {
+ $this->multifeed_url = array();
+ foreach ($url as $value)
+ {
+ $this->multifeed_url[] = SimplePie_Misc::fix_protocol($value, 1);
+ }
+ }
+ else
+ {
+ $this->feed_url = SimplePie_Misc::fix_protocol($url, 1);
+ }
+ }
+
+ /**
+ * Provides an instance of SimplePie_File to use as a feed
+ *
+ * @access public
+ * @param object &$file Instance of SimplePie_File (or subclass)
+ * @return bool True on success, false on failure
+ */
+ function set_file(&$file)
+ {
+ if (SimplePie_Misc::is_a($file, 'SimplePie_File'))
+ {
+ $this->feed_url = $file->url;
+ $this->file =& $file;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to use a string of RSS/Atom data instead of a remote feed.
+ *
+ * If you have a feed available as a string in PHP, you can tell SimplePie
+ * to parse that data string instead of a remote feed. Any set feed URL
+ * takes precedence.
+ *
+ * @access public
+ * @since 1.0 Beta 3
+ * @param string $data RSS or Atom data as a string.
+ * @see SimplePie::set_feed_url()
+ */
+ function set_raw_data($data)
+ {
+ $this->raw_data = trim($data);
+ }
+
+ /**
+ * Allows you to override the default timeout for fetching remote feeds.
+ *
+ * This allows you to change the maximum time the feed's server to respond
+ * and send the feed back.
+ *
+ * @access public
+ * @since 1.0 Beta 3
+ * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed.
+ */
+ function set_timeout($timeout = 10)
+ {
+ $this->timeout = (int) $timeout;
+ }
+
+ /**
+ * Forces SimplePie to use fsockopen() instead of the preferred cURL
+ * functions.
+ *
+ * @access public
+ * @since 1.0 Beta 3
+ * @param bool $enable Force fsockopen() to be used
+ */
+ function force_fsockopen($enable = false)
+ {
+ $this->force_fsockopen = (bool) $enable;
+ }
+
+ /**
+ * Outputs the raw XML content of the feed, after it has gone through
+ * SimplePie's filters.
+ *
+ * Used only for debugging, this function will output the XML content as
+ * text/xml. When SimplePie reads in a feed, it does a bit of cleaning up
+ * before trying to parse it. Many parts of the feed are re-written in
+ * memory, and in the end, you have a parsable feed. XML dump shows you the
+ * actual XML that SimplePie tries to parse, which may or may not be very
+ * different from the original feed.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param bool $enable Enable XML dump
+ */
+ function enable_xml_dump($enable = false)
+ {
+ $this->xml_dump = (bool) $enable;
+ }
+
+ /**
+ * Enables/disables caching in SimplePie.
+ *
+ * This option allows you to disable caching all-together in SimplePie.
+ * However, disabling the cache can lead to longer load times.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param bool $enable Enable caching
+ */
+ function enable_cache($enable = true)
+ {
+ $this->cache = (bool) $enable;
+ }
+
+ /**
+ * Set the length of time (in seconds) that the contents of a feed
+ * will be cached.
+ *
+ * @access public
+ * @param int $seconds The feed content cache duration.
+ */
+ function set_cache_duration($seconds = 3600)
+ {
+ $this->cache_duration = (int) $seconds;
+ }
+
+ /**
+ * Set the length of time (in seconds) that the autodiscovered feed
+ * URL will be cached.
+ *
+ * @access public
+ * @param int $seconds The autodiscovered feed URL cache duration.
+ */
+ function set_autodiscovery_cache_duration($seconds = 604800)
+ {
+ $this->autodiscovery_cache_duration = (int) $seconds;
+ }
+
+ /**
+ * Set the file system location where the cached files should be stored.
+ *
+ * @access public
+ * @param string $location The file system location.
+ */
+ function set_cache_location($location = './cache')
+ {
+ $this->cache_location = (string) $location;
+ }
+
+ /**
+ * Determines whether feed items should be sorted into reverse chronological order.
+ *
+ * @access public
+ * @param bool $enable Sort as reverse chronological order.
+ */
+ function enable_order_by_date($enable = true)
+ {
+ $this->order_by_date = (bool) $enable;
+ }
+
+ /**
+ * Allows you to override the character encoding reported by the feed.
+ *
+ * @access public
+ * @param string $encoding Character encoding.
+ */
+ function set_input_encoding($encoding = false)
+ {
+ if ($encoding)
+ {
+ $this->input_encoding = (string) $encoding;
+ }
+ else
+ {
+ $this->input_encoding = false;
+ }
+ }
+
+ /**
+ * Set how much feed autodiscovery to do
+ *
+ * @access public
+ * @see SIMPLEPIE_LOCATOR_NONE
+ * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY
+ * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION
+ * @see SIMPLEPIE_LOCATOR_LOCAL_BODY
+ * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION
+ * @see SIMPLEPIE_LOCATOR_REMOTE_BODY
+ * @see SIMPLEPIE_LOCATOR_ALL
+ * @param int $level Feed Autodiscovery Level (level can be a
+ * combination of the above constants, see bitwise OR operator)
+ */
+ function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL)
+ {
+ $this->autodiscovery = (int) $level;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for caching.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_cache_class($class = 'SimplePie_Cache')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Cache'))
+ {
+ $this->cache_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for auto-discovery.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_locator_class($class = 'SimplePie_Locator')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Locator'))
+ {
+ $this->locator_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for XML parsing.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_parser_class($class = 'SimplePie_Parser')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Parser'))
+ {
+ $this->parser_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for remote file fetching.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_file_class($class = 'SimplePie_File')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_File'))
+ {
+ $this->file_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for data sanitization.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_sanitize_class($class = 'SimplePie_Sanitize')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Sanitize'))
+ {
+ $this->sanitize =& new $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for handling feed items.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_item_class($class = 'SimplePie_Item')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Item'))
+ {
+ $this->item_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for handling author data.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_author_class($class = 'SimplePie_Author')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Author'))
+ {
+ $this->author_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for handling category data.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_category_class($class = 'SimplePie_Category')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Category'))
+ {
+ $this->category_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for feed enclosures.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_enclosure_class($class = 'SimplePie_Enclosure')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Enclosure'))
+ {
+ $this->enclosure_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:text> captions
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_caption_class($class = 'SimplePie_Caption')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Caption'))
+ {
+ $this->caption_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:copyright>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_copyright_class($class = 'SimplePie_Copyright')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Copyright'))
+ {
+ $this->copyright_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:credit>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_credit_class($class = 'SimplePie_Credit')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Credit'))
+ {
+ $this->credit_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:rating>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_rating_class($class = 'SimplePie_Rating')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Rating'))
+ {
+ $this->rating_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:restriction>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_restriction_class($class = 'SimplePie_Restriction')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Restriction'))
+ {
+ $this->restriction_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to override the default user agent string.
+ *
+ * @access public
+ * @param string $ua New user agent string.
+ */
+ function set_useragent($ua = SIMPLEPIE_USERAGENT)
+ {
+ $this->useragent = (string) $ua;
+ }
+
+ /**
+ * Set callback function to create cache filename with
+ *
+ * @access public
+ * @param mixed $function Callback function
+ */
+ function set_cache_name_function($function = 'md5')
+ {
+ if (is_callable($function))
+ {
+ $this->cache_name_function = $function;
+ }
+ }
+
+ /**
+ * Set javascript query string parameter
+ *
+ * @access public
+ * @param mixed $get Javascript query string parameter
+ */
+ function set_javascript($get = 'js')
+ {
+ if ($get)
+ {
+ $this->javascript = (string) $get;
+ }
+ else
+ {
+ $this->javascript = false;
+ }
+ }
+
+ /**
+ * Set options to make SP as fast as possible. Forgoes a
+ * substantial amount of data sanitization in favor of speed.
+ *
+ * @access public
+ * @param bool $set Whether to set them or not
+ */
+ function set_stupidly_fast($set = false)
+ {
+ if ($set)
+ {
+ $this->enable_order_by_date(false);
+ $this->remove_div(false);
+ $this->strip_comments(false);
+ $this->strip_htmltags(false);
+ $this->strip_attributes(false);
+ $this->set_image_handler(false);
+ }
+ }
+
+ /**
+ * Set maximum number of feeds to check with autodiscovery
+ *
+ * @access public
+ * @param int $max Maximum number of feeds to check
+ */
+ function set_max_checked_feeds($max = 10)
+ {
+ $this->max_checked_feeds = (int) $max;
+ }
+
+ function remove_div($enable = true)
+ {
+ $this->sanitize->remove_div($enable);
+ }
+
+ function strip_htmltags($tags = '', $encode = null)
+ {
+ if ($tags === '')
+ {
+ $tags = $this->strip_htmltags;
+ }
+ $this->sanitize->strip_htmltags($tags);
+ if ($encode !== null)
+ {
+ $this->sanitize->encode_instead_of_strip($tags);
+ }
+ }
+
+ function encode_instead_of_strip($enable = true)
+ {
+ $this->sanitize->encode_instead_of_strip($enable);
+ }
+
+ function strip_attributes($attribs = '')
+ {
+ if ($attribs === '')
+ {
+ $attribs = $this->strip_attributes;
+ }
+ $this->sanitize->strip_attributes($attribs);
+ }
+
+ function set_output_encoding($encoding = 'UTF-8')
+ {
+ $this->sanitize->set_output_encoding($encoding);
+ }
+
+ function strip_comments($strip = false)
+ {
+ $this->sanitize->strip_comments($strip);
+ }
+
+ /**
+ * Set element/attribute key/value pairs of HTML attributes
+ * containing URLs that need to be resolved relative to the feed
+ *
+ * @access public
+ * @since 1.0
+ * @param array $element_attribute Element/attribute key/value pairs
+ */
+ function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite'))
+ {
+ $this->sanitize->set_url_replacements($element_attribute);
+ }
+
+ /**
+ * Set the handler to enable the display of cached favicons.
+ *
+ * @access public
+ * @param str $page Web-accessible path to the handler_favicon.php file.
+ * @param str $qs The query string that the value should be passed to.
+ */
+ function set_favicon_handler($page = false, $qs = 'i')
+ {
+ if ($page != false)
+ {
+ $this->favicon_handler = $page . '?' . $qs . '=';
+ }
+ else
+ {
+ $this->favicon_handler = '';
+ }
+ }
+
+ /**
+ * Set the handler to enable the display of cached images.
+ *
+ * @access public
+ * @param str $page Web-accessible path to the handler_image.php file.
+ * @param str $qs The query string that the value should be passed to.
+ */
+ function set_image_handler($page = false, $qs = 'i')
+ {
+ if ($page != false)
+ {
+ $this->sanitize->set_image_handler($page . '?' . $qs . '=');
+ }
+ else
+ {
+ $this->image_handler = '';
+ }
+ }
+
+ function init()
+ {
+ if ((function_exists('version_compare') && version_compare(PHP_VERSION, '4.1.0', '<')) || !extension_loaded('xml') || !extension_loaded('pcre'))
+ {
+ return false;
+ }
+ if (isset($_GET[$this->javascript]))
+ {
+ if (function_exists('ob_gzhandler'))
+ {
+ ob_start('ob_gzhandler');
+ }
+ header('Content-type: text/javascript; charset: UTF-8');
+ header('Cache-Control: must-revalidate');
+ header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
+ ?>
+function embed_odeo(link) {
+ document.writeln('<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url='+link+'"></embed>');
+}
+
+function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
+ if (placeholder != '') {
+ document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+ }
+ else {
+ document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+ }
+}
+
+function embed_flash(bgcolor, width, height, link, loop, type) {
+ document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>');
+}
+
+function embed_flv(width, height, link, placeholder, loop, player) {
+ document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>');
+}
+
+function embed_wmedia(width, height, link) {
+ document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>');
+}
+ <?php
+ exit;
+ }
+
+ // Pass whatever was set with config options over to the sanitizer.
+ $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->cache_class);
+ $this->sanitize->pass_file_data($this->file_class, $this->timeout, $this->useragent, $this->force_fsockopen);
+
+ if ($this->feed_url !== null || $this->raw_data !== null)
+ {
+ $this->data = array();
+ $this->multifeed_objects = array();
+ $cache = false;
+
+ if ($this->feed_url !== null)
+ {
+ $parsed_feed_url = SimplePie_Misc::parse_url($this->feed_url);
+ // Decide whether to enable caching
+ if ($this->cache && $parsed_feed_url['scheme'] !== '')
+ {
+ $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc');
+ }
+ // If it's enabled and we don't want an XML dump, use the cache
+ if ($cache && !$this->xml_dump)
+ {
+ // Load the Cache
+ $this->data = $cache->load();
+ if (!empty($this->data))
+ {
+ // If the cache is for an outdated build of SimplePie
+ if (!isset($this->data['build']) || $this->data['build'] != SIMPLEPIE_BUILD)
+ {
+ $cache->unlink();
+ $this->data = array();
+ }
+ // If we've hit a collision just rerun it with caching disabled
+ elseif (isset($this->data['url']) && $this->data['url'] != $this->feed_url)
+ {
+ $cache = false;
+ $this->data = array();
+ }
+ // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL.
+ elseif (isset($this->data['feed_url']))
+ {
+ // If the autodiscovery cache is still valid use it.
+ if ($cache->mtime() + $this->autodiscovery_cache_duration > time())
+ {
+ // Do not need to do feed autodiscovery yet.
+ if ($this->data['feed_url'] == $this->data['url'])
+ {
+ $cache->unlink();
+ $this->data = array();
+ }
+ else
+ {
+ $this->set_feed_url($this->data['feed_url']);
+ return $this->init();
+ }
+ }
+ }
+ // Check if the cache has been updated
+ elseif ($cache->mtime() + $this->cache_duration < time())
+ {
+ // If we have last-modified and/or etag set
+ if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag']))
+ {
+ $headers = array();
+ if (isset($this->data['headers']['last-modified']))
+ {
+ $headers['if-modified-since'] = $this->data['headers']['last-modified'];
+ }
+ if (isset($this->data['headers']['etag']))
+ {
+ $headers['if-none-match'] = $this->data['headers']['etag'];
+ }
+ $file =& new $this->file_class($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen);
+ if ($file->success)
+ {
+ if ($file->status_code == 304)
+ {
+ $cache->touch();
+ return true;
+ }
+ else
+ {
+ $headers = $file->headers;
+ }
+ }
+ else
+ {
+ unset($file);
+ }
+ }
+ }
+ // If the cache is still valid, just return true
+ else
+ {
+ return true;
+ }
+ }
+ // If the cache is empty, delete it
+ else
+ {
+ $cache->unlink();
+ $this->data = array();
+ }
+ }
+ // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
+ if (!isset($file))
+ {
+ if (SimplePie_Misc::is_a($this->file, 'SimplePie_File') && $this->file->url == $this->feed_url)
+ {
+ $file =& $this->file;
+ }
+ else
+ {
+ $file =& new $this->file_class($this->feed_url, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen);
+ }
+ }
+ // If the file connection has an error, set SimplePie::error to that and quit
+ if (!$file->success)
+ {
+ $this->error = $file->error;
+ if (!empty($this->data))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ // Check if the supplied URL is a feed, if it isn't, look for it.
+ $locate =& new $this->locator_class($file, $this->timeout, $this->useragent, $this->file_class, $this->max_checked_feeds);
+ if (!$locate->is_feed($file))
+ {
+ // We need to unset this so that if SimplePie::set_file() has been called that object is untouched
+ unset($file);
+ if ($file = $locate->find($this->autodiscovery))
+ {
+ if ($cache)
+ {
+ if (!$cache->save(array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD)))
+ {
+ trigger_error("$cache->name is not writeable", E_USER_WARNING);
+ }
+ $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc');
+ }
+ $this->feed_url = $file->url;
+ }
+ else
+ {
+ $this->error = "A feed could not be found at $this->feed_url";
+ SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+ return false;
+ }
+ }
+ $locate = null;
+
+ $headers = $file->headers;
+ $data = trim($file->body);
+ unset($file);
+ }
+ else
+ {
+ $data = $this->raw_data;
+ }
+
+ // First check to see if input has been overridden.
+ if ($this->input_encoding !== false)
+ {
+ $encoding = $this->input_encoding;
+ }
+ // Second try HTTP headers
+ elseif (isset($headers['content-type']) && preg_match('/;[\x09\x20]*charset=([^;]*)/i', $headers['content-type'], $charset))
+ {
+ $encoding = $charset[1];
+ }
+ // Then prolog, if at the very start of the document
+ elseif (preg_match("/^<\?xml[\x20\x9\xD\xA]+version([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"1.0\"|'1.0'|\"1.1\"|'1.1')[\x20\x9\xD\xA]+encoding([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"[A-Za-z][A-Za-z0-9._\-]*\"|'[A-Za-z][A-Za-z0-9._\-]*')([\x20\x9\xD\xA]+standalone([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"(yes|no)\"|'(yes|no)'))?([\x20\x9\xD\xA]+)?\?>/", $data, $prolog))
+ {
+ $encoding = substr($prolog[6], 1, -1);
+ }
+ // UTF-32 Big Endian BOM
+ elseif (strpos($data, "\x0\x0\xFE\xFF") === 0)
+ {
+ $encoding = 'UTF-32be';
+ }
+ // UTF-32 Little Endian BOM
+ elseif (strpos($data, "\xFF\xFE\x0\x0") === 0)
+ {
+ $encoding = 'UTF-32';
+ }
+ // UTF-16 Big Endian BOM
+ elseif (strpos($data, "\xFE\xFF") === 0)
+ {
+ $encoding = 'UTF-16be';
+ }
+ // UTF-16 Little Endian BOM
+ elseif (strpos($data, "\xFF\xFE") === 0)
+ {
+ $encoding = 'UTF-16le';
+ }
+ // UTF-8 BOM
+ elseif (strpos($data, "\xEF\xBB\xBF") === 0)
+ {
+ $encoding = 'UTF-8';
+ }
+ // Fallback to the default (US-ASCII for text/xml, ISO-8859-1 for text/* MIME types, UTF-8 otherwise)
+ elseif (isset($headers['content-type']) && strtolower(SimplePie_Misc::parse_mime($headers['content-type'])) == 'text/xml')
+ {
+ $encoding = 'US-ASCII';
+ }
+ elseif (isset($headers['content-type']) && SimplePie_Misc::stripos(SimplePie_Misc::parse_mime($headers['content-type']), 'text/') === 0)
+ {
+ $encoding = 'ISO-8859-1';
+ }
+ else
+ {
+ $encoding = 'UTF-8';
+ }
+
+ // Change the encoding to UTF-8 (as we always use UTF-8 internally)
+ if ($encoding != 'UTF-8')
+ {
+ $data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8');
+ }
+
+ // Strip illegal characters
+ $data = SimplePie_Misc::utf8_bad_replace($data);
+
+ $parser =& new $this->parser_class();
+ $parser->pre_process($data, 'UTF-8');
+ // If we want the XML, just output that and quit
+ if ($this->xml_dump)
+ {
+ header('Content-type: text/xml; charset=UTF-8');
+ echo $data;
+ exit;
+ }
+ // If it's parsed fine
+ elseif ($parser->parse($data))
+ {
+ unset($data);
+ $this->data = $parser->get_data();
+ if (isset($this->data['child']))
+ {
+ if (isset($headers))
+ {
+ $this->data['headers'] = $headers;
+ }
+ $this->data['build'] = SIMPLEPIE_BUILD;
+
+ // Cache the file if caching is enabled
+ if ($cache && !$cache->save($this->data))
+ {
+ trigger_error("$cache->name is not writeable", E_USER_WARNING);
+ }
+ return true;
+ }
+ else
+ {
+ $this->error = "A feed could not be found at $this->feed_url";
+ SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+ return false;
+ }
+ }
+ // If we have an error, just set SimplePie::error to it and quit
+ else
+ {
+ $this->error = sprintf('XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column());
+ SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+ return false;
+ }
+ }
+ elseif (!empty($this->multifeed_url))
+ {
+ $i = 0;
+ $success = 0;
+ $this->multifeed_objects = array();
+ foreach ($this->multifeed_url as $url)
+ {
+ if (SIMPLEPIE_PHP5)
+ {
+ // This keyword needs to defy coding standards for PHP4 compatibility
+ $this->multifeed_objects[$i] = clone($this);
+ }
+ else
+ {
+ $this->multifeed_objects[$i] = $this;
+ }
+ $this->multifeed_objects[$i]->set_feed_url($url);
+ $success |= $this->multifeed_objects[$i]->init();
+ $i++;
+ }
+ return (bool) $success;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Return the error message for the occured error
+ *
+ * @access public
+ * @return string Error message
+ */
+ function error()
+ {
+ return $this->error;
+ }
+
+ function get_encoding()
+ {
+ return $this->sanitize->output_encoding;
+ }
+
+ function handle_content_type($mime = 'text/html')
+ {
+ if (!headers_sent())
+ {
+ $header = "Content-type: $mime;";
+ if ($this->get_encoding())
+ {
+ $header .= ' charset=' . $this->get_encoding();
+ }
+ else
+ {
+ $header .= ' charset=UTF-8';
+ }
+ header($header);
+ }
+ }
+
+ function get_type()
+ {
+ if (!isset($this->data['type']))
+ {
+ $this->data['type'] = SIMPLEPIE_TYPE_ALL;
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_10;
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_03;
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF']))
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['channel'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['image'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['textinput']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_10;
+ }
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['channel'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['image'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['textinput']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090;
+ }
+ }
+ elseif (isset($this->data['child']['']['rss']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL;
+ if (isset($this->data['child']['']['rss'][0]['attribs']['']['version']))
+ {
+ switch (trim($this->data['child']['']['rss'][0]['attribs']['']['version']))
+ {
+ case '0.91':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091;
+ if (isset($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data']))
+ {
+ switch (trim($this->data['child']['']['rss'][0]['child']['']['skiphours']['hour'][0]['data']))
+ {
+ case '0':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE;
+ break;
+
+ case '24':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_USERLAND;
+ break;
+ }
+ }
+ break;
+
+ case '0.92':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_092;
+ break;
+
+ case '0.93':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_093;
+ break;
+
+ case '0.94':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_094;
+ break;
+
+ case '2.0':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_20;
+ break;
+ }
+ }
+ }
+ else
+ {
+ $this->data['type'] = SIMPLEPIE_TYPE_NONE;
+ }
+ }
+ return $this->data['type'];
+ }
+
+ /**
+ * Returns the URL for the favicon of the feed's website.
+ *
+ * @access public
+ * @since 1.0
+ */
+ function get_favicon()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif (($url = $this->get_link()) !== null && preg_match('/^http(s)?:\/\//i', $url))
+ {
+ $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $url);
+
+ if ($this->cache && $this->favicon_handler)
+ {
+ $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $favicon), 'spi');
+
+ if ($cache->load())
+ {
+ return $this->sanitize($this->favicon_handler . rawurlencode($favicon), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ $file =& new $this->file_class($favicon, $this->timeout / 10, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen);
+
+ if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300)) && strlen($file->body) > 0)
+ {
+ if ($cache->save(array('headers' => $file->headers, 'body' => $file->body)))
+ {
+ return $this->sanitize($this->favicon_handler . rawurlencode($favicon), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ trigger_error("$cache->name is not writeable", E_USER_WARNING);
+ return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ }
+ }
+ else
+ {
+ return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @todo If we have a perm redirect we should return the new URL
+ * @todo When we make the above change, let's support <itunes:new-feed-url> as well
+ * @todo Also, |atom:link|@rel=self
+ */
+ function subscribe_url()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_feed()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_outlook()
+ {
+ if ($this->feed_url !== null)
+ {
+ return 'outlook' . $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_podcast()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 3), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_itunes()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 4), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Creates the subscribe_* methods' return data
+ *
+ * @access private
+ * @param string $feed_url String to prefix to the feed URL
+ * @param string $site_url String to prefix to the site URL (and
+ * suffix to the feed URL)
+ * @return mixed URL if feed exists, false otherwise
+ */
+ function subscribe_service($feed_url, $site_url = null)
+ {
+ if ($this->subscribe_url())
+ {
+ $return = $this->sanitize($feed_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->subscribe_url());
+ if ($site_url !== null && $this->get_link() !== null)
+ {
+ $return .= $this->sanitize($site_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_link());
+ }
+ return $return;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_aol()
+ {
+ return $this->subscribe_service('http://feeds.my.aol.com/add.jsp?url=');
+ }
+
+ function subscribe_bloglines()
+ {
+ return urldecode($this->subscribe_service('http://www.bloglines.com/sub/'));
+ }
+
+ function subscribe_eskobo()
+ {
+ return $this->subscribe_service('http://www.eskobo.com/?AddToMyPage=');
+ }
+
+ function subscribe_feedfeeds()
+ {
+ return $this->subscribe_service('http://www.feedfeeds.com/add?feed=');
+ }
+
+ function subscribe_feedster()
+ {
+ return $this->subscribe_service('http://www.feedster.com/myfeedster.php?action=addrss&confirm=no&rssurl=');
+ }
+
+ function subscribe_google()
+ {
+ return $this->subscribe_service('http://fusion.google.com/add?feedurl=');
+ }
+
+ function subscribe_gritwire()
+ {
+ return $this->subscribe_service('http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl=');
+ }
+
+ function subscribe_msn()
+ {
+ return $this->subscribe_service('http://my.msn.com/addtomymsn.armx?id=rss&ut=', '&ru=');
+ }
+
+ function subscribe_netvibes()
+ {
+ return $this->subscribe_service('http://www.netvibes.com/subscribe.php?url=');
+ }
+
+ function subscribe_newsburst()
+ {
+ return $this->subscribe_service('http://www.newsburst.com/Source/?add=');
+ }
+
+ function subscribe_newsgator()
+ {
+ return $this->subscribe_service('http://www.newsgator.com/ngs/subscriber/subext.aspx?url=');
+ }
+
+ function subscribe_odeo()
+ {
+ return $this->subscribe_service('http://www.odeo.com/listen/subscribe?feed=');
+ }
+
+ function subscribe_podnova()
+ {
+ return $this->subscribe_service('http://www.podnova.com/index_your_podcasts.srf?action=add&url=');
+ }
+
+ function subscribe_rojo()
+ {
+ return $this->subscribe_service('http://www.rojo.com/add-subscription?resource=');
+ }
+
+ function subscribe_yahoo()
+ {
+ return $this->subscribe_service('http://add.my.yahoo.com/rss?url=');
+ }
+
+ function get_feed_tags($namespace, $tag)
+ {
+ $type = $this->get_type();
+ if ($type & SIMPLEPIE_TYPE_ATOM_10)
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag];
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_ATOM_03)
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag];
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_RDF)
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag];
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+ {
+ if (isset($this->data['child']['']['rss'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child']['']['rss'][0]['child'][$namespace][$tag];
+ }
+ }
+ return null;
+ }
+
+ function get_channel_tags($namespace, $tag)
+ {
+ $type = $this->get_type();
+ if ($type & SIMPLEPIE_TYPE_ATOM_ALL)
+ {
+ if ($return = $this->get_feed_tags($namespace, $tag))
+ {
+ return $return;
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_10)
+ {
+ if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'channel'))
+ {
+ if (isset($channel[0]['child'][$namespace][$tag]))
+ {
+ return $channel[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_090)
+ {
+ if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'channel'))
+ {
+ if (isset($channel[0]['child'][$namespace][$tag]))
+ {
+ return $channel[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+ {
+ if ($channel = $this->get_feed_tags('', 'channel'))
+ {
+ if (isset($channel[0]['child'][$namespace][$tag]))
+ {
+ return $channel[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ return null;
+ }
+
+ function get_image_tags($namespace, $tag)
+ {
+ $type = $this->get_type();
+ if ($type & SIMPLEPIE_TYPE_RSS_10)
+ {
+ if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'image'))
+ {
+ if (isset($image[0]['child'][$namespace][$tag]))
+ {
+ return $image[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_090)
+ {
+ if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'image'))
+ {
+ if (isset($image[0]['child'][$namespace][$tag]))
+ {
+ return $image[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+ {
+ if ($image = $this->get_channel_tags('', 'image'))
+ {
+ if (isset($image[0]['child'][$namespace][$tag]))
+ {
+ return $image[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ return null;
+ }
+
+ function get_base($element = array())
+ {
+ if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base']))
+ {
+ return $element['xml_base'];
+ }
+ elseif ($this->get_link() !== null)
+ {
+ return $this->get_link();
+ }
+ elseif (isset($this->data['headers']['content-location']))
+ {
+ return SimplePie_Misc::absolutize_url($this->data['headers']['content-location'], $this->subscribe_url());
+ }
+ else
+ {
+ return $this->subscribe_url();
+ }
+ }
+
+ function sanitize($data, $type, $base = '')
+ {
+ return $this->sanitize->sanitize($data, $type, $base);
+ }
+
+ function get_title()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags('', 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link($key = 0, $rel = 'alternate')
+ {
+ $links = $this->get_links($rel);
+ if (isset($links[$key]))
+ {
+ return $links[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Added for parity between the parent-level and the item/entry-level.
+ */
+ function get_permalink()
+ {
+ return $this->get_link(0);
+ }
+
+ function get_links($rel = 'alternate')
+ {
+ if (!isset($this->data['links']))
+ {
+ $this->data['links'] = array();
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link'))
+ {
+ foreach ($links as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ }
+ }
+ }
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link'))
+ {
+ foreach ($links as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+
+ }
+ }
+ }
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_channel_tags('', 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+
+ $keys = array_keys($this->data['links']);
+ foreach ($keys as $key)
+ {
+ if (SimplePie_Misc::is_isegment_nz_nc($key))
+ {
+ if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
+ $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
+ }
+ else
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+ }
+ }
+ elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
+ {
+ $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+ }
+ $this->data['links'][$key] = array_unique($this->data['links'][$key]);
+ }
+ }
+
+ if (isset($this->data['links'][$rel]))
+ {
+ return $this->data['links'][$rel];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_description()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags('', 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_copyright()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags('', 'copyright'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_language()
+ {
+ if ($return = $this->get_channel_tags('', 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang']))
+ {
+ return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang']))
+ {
+ return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang']))
+ {
+ return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['headers']['content-language']))
+ {
+ return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_latitude()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+ {
+ return (float) $match[1];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_longitude()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+ {
+ return (float) $match[2];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_title()
+ {
+ if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags('', 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_url()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image'))
+ {
+ return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'url'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'url'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags('', 'url'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_link()
+ {
+ if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags('', 'link'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_width()
+ {
+ if ($return = $this->get_image_tags('', 'width'))
+ {
+ return round($return[0]['data']);
+ }
+ elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url'))
+ {
+ return 88.0;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_height()
+ {
+ if ($return = $this->get_image_tags('', 'height'))
+ {
+ return round($return[0]['data']);
+ }
+ elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags('', 'url'))
+ {
+ return 31.0;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_item_quantity($max = 0)
+ {
+ $qty = count($this->get_items());
+ if ($max == 0)
+ {
+ return $qty;
+ }
+ else
+ {
+ return ($qty > $max) ? $max : $qty;
+ }
+ }
+
+ function get_item($key = 0)
+ {
+ $items = $this->get_items();
+ if (isset($items[$key]))
+ {
+ return $items[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_items($start = 0, $end = 0)
+ {
+ if (!empty($this->multifeed_objects))
+ {
+ return SimplePie::merge_items($this->multifeed_objects, $start, $end);
+ }
+ elseif (!isset($this->data['items']))
+ {
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_channel_tags('', 'item'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ }
+
+ if (!empty($this->data['items']))
+ {
+ // If we want to order it by date, check if all items have a date, and then sort it
+ if ($this->order_by_date)
+ {
+ if (!isset($this->data['ordered_items']))
+ {
+ $do_sort = true;
+ foreach ($this->data['items'] as $item)
+ {
+ if (!$item->get_date('U'))
+ {
+ $do_sort = false;
+ break;
+ }
+ }
+ $item = null;
+ $this->data['ordered_items'] = $this->data['items'];
+ if ($do_sort)
+ {
+ usort($this->data['ordered_items'], array(&$this, 'sort_items'));
+ }
+ }
+ $items = $this->data['ordered_items'];
+ }
+ else
+ {
+ $items = $this->data['items'];
+ }
+
+ // Slice the data as desired
+ if ($end == 0)
+ {
+ return array_slice($items, $start);
+ }
+ else
+ {
+ return array_slice($items, $start, $end);
+ }
+ }
+ else
+ {
+ return array();
+ }
+ }
+
+ function sort_items($a, $b)
+ {
+ return $a->get_date('U') <= $b->get_date('U');
+ }
+
+ function merge_items($urls, $start = 0, $end = 0)
+ {
+ if (is_array($urls) && sizeof($urls) > 0)
+ {
+ $items = array();
+ foreach ($urls as $arg)
+ {
+ if (SimplePie_Misc::is_a($arg, 'SimplePie'))
+ {
+ $items = array_merge($items, $arg->get_items());
+ }
+ else
+ {
+ trigger_error('Arguments must be SimplePie objects', E_USER_WARNING);
+ }
+ }
+
+ $do_sort = true;
+ foreach ($items as $item)
+ {
+ if (!$item->get_date('U'))
+ {
+ $do_sort = false;
+ break;
+ }
+ }
+ $item = null;
+ if ($do_sort)
+ {
+ usort($items, array('SimplePie', 'sort_items'));
+ }
+
+ if ($end == 0)
+ {
+ return array_slice($items, $start);
+ }
+ else
+ {
+ return array_slice($items, $start, $end);
+ }
+ }
+ else
+ {
+ trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING);
+ return array();
+ }
+ }
+}
+
+class SimplePie_Item
+{
+ var $feed;
+ var $data = array();
+
+ function SimplePie_Item($feed, $data)
+ {
+ $this->feed = $feed;
+ $this->data = $data;
+ }
+
+ function __toString()
+ {
+ return md5(serialize($this->data));
+ }
+
+ function get_item_tags($namespace, $tag)
+ {
+ if (isset($this->data['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][$namespace][$tag];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_base($element = array())
+ {
+ return $this->feed->get_base($element);
+ }
+
+ function sanitize($data, $type, $base = '')
+ {
+ return $this->feed->sanitize($data, $type, $base);
+ }
+
+ function get_feed()
+ {
+ return $this->feed;
+ }
+
+ function get_id($hash = false)
+ {
+ if ($hash)
+ {
+ return $this->__toString();
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags('', 'guid'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (($return = $this->get_permalink()) !== null)
+ {
+ return $return;
+ }
+ elseif (($return = $this->get_title()) !== null)
+ {
+ return $return;
+ }
+ else
+ {
+ return $this->__toString();
+ }
+ }
+
+ function get_title()
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags('', 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_description($description_only = false)
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags('', 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (!$description_only)
+ {
+ return $this->get_content(true);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_content($content_only = false)
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_content_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif (!$content_only)
+ {
+ return $this->get_description(true);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_category($key = 0)
+ {
+ $categories = $this->get_categories();
+ if (isset($categories[$key]))
+ {
+ return $categories[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_categories()
+ {
+ $categories = array();
+
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['attribs']['']['term']))
+ {
+ $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ foreach ((array) $this->get_item_tags('', 'category') as $category)
+ {
+ $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
+ {
+ $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
+ {
+ $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+
+ if (!empty($categories))
+ {
+ return SimplePie_Misc::array_unique($categories);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_author($key = 0)
+ {
+ $authors = $this->get_authors();
+ if (isset($authors[$key]))
+ {
+ return $authors[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * @todo Atom inheritance (item author, source author, feed author)
+ */
+ function get_authors()
+ {
+ $authors = array();
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
+ {
+ $name = null;
+ $uri = null;
+ $email = null;
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
+ {
+ $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
+ {
+ $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
+ }
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
+ {
+ $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $uri !== null)
+ {
+ $authors[] =& new $this->feed->author_class($name, $uri, $email);
+ }
+ }
+ if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
+ {
+ $name = null;
+ $url = null;
+ $email = null;
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
+ {
+ $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
+ {
+ $uri = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
+ }
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
+ {
+ $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $uri !== null)
+ {
+ $authors[] =& new $this->feed->author_class($name, $url, $email);
+ }
+ }
+ if ($author = $this->get_item_tags('', 'author'))
+ {
+ $authors[] =& new $this->feed->author_class(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
+ {
+ $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
+ {
+ $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
+ {
+ $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+
+ if (!empty($authors))
+ {
+ return SimplePie_Misc::array_unique($authors);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_date($date_format = 'j F Y, g:i a')
+ {
+ if (!isset($this->data['date']))
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags('', 'pubDate'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+
+ if (!empty($this->data['date']['raw']))
+ {
+ $this->data['date']['parsed'] = SimplePie_Misc::parse_date($this->data['date']['raw']);
+ }
+ else
+ {
+ $this->data['date'] = null;
+ }
+ }
+ if ($this->data['date'])
+ {
+ $date_format = (string) $date_format;
+ switch ($date_format)
+ {
+ case '':
+ return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
+
+ case 'U':
+ return $this->data['date']['parsed'];
+
+ default:
+ return date($date_format, $this->data['date']['parsed']);
+ }
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_local_date($date_format = '%c')
+ {
+ if (!$date_format)
+ {
+ return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (($date = $this->get_date('U')) !== null)
+ {
+ return strftime($date_format, $date);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_permalink()
+ {
+ $link = $this->get_link();
+ $enclosure = $this->get_enclosure(0);
+ if ($link !== null)
+ {
+ return $link;
+ }
+ elseif ($enclosure !== null)
+ {
+ return $enclosure->get_link();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link($key = 0, $rel = 'alternate')
+ {
+ $links = $this->get_links($rel);
+ if ($links[$key] !== null)
+ {
+ return $links[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_links($rel = 'alternate')
+ {
+ if (!isset($this->data['links']))
+ {
+ $this->data['links'] = array();
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+
+ }
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ }
+ }
+ if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_item_tags('', 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_item_tags('', 'guid'))
+ {
+ if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) == 'true')
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ }
+
+ $keys = array_keys($this->data['links']);
+ foreach ($keys as $key)
+ {
+ if (SimplePie_Misc::is_isegment_nz_nc($key))
+ {
+ if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
+ $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
+ }
+ else
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+ }
+ }
+ elseif (substr($key, 0, 41) == SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
+ {
+ $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+ }
+ $this->data['links'][$key] = array_unique($this->data['links'][$key]);
+ }
+ }
+ if (isset($this->data['links'][$rel]))
+ {
+ return $this->data['links'][$rel];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * @todo Add ability to prefer one type of content over another (in a media group).
+ */
+ function get_enclosure($key = 0, $prefer = null)
+ {
+ $enclosures = $this->get_enclosures();
+ if (isset($enclosures[$key]))
+ {
+ return $enclosures[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Grabs all available enclosures (podcasts, etc.)
+ *
+ * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
+ *
+ * At this point, we're pretty much assuming that all enclosures for an item are the same content. Anything else is too complicated to properly support.
+ *
+ * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
+ * @todo Add support for itunes: tags. These should be relatively simple compared to media:.
+ * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists).
+ */
+ function get_enclosures()
+ {
+ if (!isset($this->data['enclosures']))
+ {
+ $this->data['enclosures'] = array();
+
+ // Elements
+ $captions_parent = null;
+ $categories_parent = null;
+ $copyrights_parent = null;
+ $credits_parent = null;
+ $description_parent = null;
+ $duration_parent = null;
+ $hashes_parent = null;
+ $keywords_parent = null;
+ $player_parent = null;
+ $ratings_parent = null;
+ $restrictions_parent = null;
+ $thumbnails_parent = null;
+ $title_parent = null;
+
+ // Let's do the channel and item-level ones first, and just re-use them if we need to.
+ $parent = $this->get_feed();
+
+ // CAPTIONS
+ if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
+ {
+ foreach ($captions as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ }
+ elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
+ {
+ foreach ($captions as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ }
+ if (is_array($captions_parent))
+ {
+ $captions_parent = array_values(SimplePie_Misc::array_unique($captions_parent));
+ }
+
+ // CATEGORIES
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category)
+ {
+ $term = null;
+ $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
+ $label = null;
+ if (isset($category['attribs']['']['text']))
+ {
+ $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+
+ if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category']))
+ {
+ foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory)
+ {
+ if (isset($subcategory['attribs']['']['text']))
+ {
+ $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ }
+ if (is_array($categories_parent))
+ {
+ $categories_parent = array_values(SimplePie_Misc::array_unique($categories_parent));
+ }
+
+ // COPYRIGHT
+ if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($copyright[0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($copyright[0]['data']))
+ {
+ $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($copyright[0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($copyright[0]['data']))
+ {
+ $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+
+ // CREDITS
+ if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
+ {
+ foreach ($credits as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ }
+ elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
+ {
+ foreach ($credits as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ }
+ if (is_array($credits_parent))
+ {
+ $credits_parent = array_values(SimplePie_Misc::array_unique($credits_parent));
+ }
+
+ // DESCRIPTION
+ if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
+ {
+ if (isset($description_parent[0]['data']))
+ {
+ $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+ elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
+ {
+ if (isset($description_parent[0]['data']))
+ {
+ $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+
+ // DURATION
+ if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration'))
+ {
+ $seconds = null;
+ $minutes = null;
+ $hours = null;
+ if (isset($duration_parent[0]['data']))
+ {
+ $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ if (sizeof($temp) > 0)
+ {
+ (int) $seconds = array_pop($temp);
+ }
+ if (sizeof($temp) > 0)
+ {
+ (int) $minutes = array_pop($temp);
+ $seconds += $minutes * 60;
+ }
+ if (sizeof($temp) > 0)
+ {
+ (int) $hours = array_pop($temp);
+ $seconds += $hours * 3600;
+ }
+ unset($temp);
+ $duration_parent = $seconds;
+ }
+ }
+
+ // HASHES
+ if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
+ {
+ foreach ($hashes_iterator as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes_parent[] = $algo.':'.$value;
+ }
+ }
+ elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
+ {
+ foreach ($hashes_iterator as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes_parent[] = $algo.':'.$value;
+ }
+ }
+ if (is_array($hashes_parent))
+ {
+ $hashes_parent = array_values(SimplePie_Misc::array_unique($hashes_parent));
+ }
+
+ // KEYWORDS
+ if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ if (is_array($keywords_parent))
+ {
+ $keywords_parent = array_values(SimplePie_Misc::array_unique($keywords_parent));
+ }
+
+ // PLAYER
+ if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
+ {
+ if (isset($player_parent[0]['attribs']['']['url']))
+ {
+ $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
+ {
+ if (isset($player_parent[0]['attribs']['']['url']))
+ {
+ $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+
+ // RATINGS
+ if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = 'urn:itunes';
+ $rating_value = null;
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = 'urn:itunes';
+ $rating_value = null;
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ if (is_array($ratings_parent))
+ {
+ $ratings_parent = array_values(SimplePie_Misc::array_unique($ratings_parent));
+ }
+
+ // RESTRICTIONS
+ if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = 'allow';
+ $restriction_type = null;
+ $restriction_value = 'itunes';
+ if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes')
+ {
+ $restriction_relationship = 'deny';
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = 'allow';
+ $restriction_type = null;
+ $restriction_value = 'itunes';
+ if (isset($restriction['data']) && strtolower($restriction['data']) == 'yes')
+ {
+ $restriction_relationship = 'deny';
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ if (is_array($restrictions_parent))
+ {
+ $restrictions_parent = array_values(SimplePie_Misc::array_unique($restrictions_parent));
+ }
+
+ // THUMBNAILS
+ if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
+ {
+ foreach ($thumbnails as $thumbnail)
+ {
+ if (isset($thumbnail['attribs']['']['url']))
+ {
+ $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ }
+ elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
+ {
+ foreach ($thumbnails as $thumbnail)
+ {
+ if (isset($thumbnail['attribs']['']['url']))
+ {
+ $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ }
+
+ // TITLES
+ if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
+ {
+ if (isset($title_parent[0]['data']))
+ {
+ $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+ elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
+ {
+ if (isset($title_parent[0]['data']))
+ {
+ $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+
+ // Clear the memory
+ unset($parent);
+
+ // If we have media:group tags, loop through them.
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group)
+ {
+ // If we have media:content tags, loop through them.
+ foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
+ {
+ if (isset($content['attribs']['']['url']))
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ // Elements
+ $captions = null;
+ $categories = null;
+ $copyrights = null;
+ $credits = null;
+ $description = null;
+ $hashes = null;
+ $keywords = null;
+ $player = null;
+ $ratings = null;
+ $restrictions = null;
+ $thumbnails = null;
+ $title = null;
+
+ // Start checking the attributes of media:content
+ if (isset($content['attribs']['']['bitrate']))
+ {
+ $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['channels']))
+ {
+ $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['duration']))
+ {
+ $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $duration = $duration_parent;
+ }
+ if (isset($content['attribs']['']['expression']))
+ {
+ $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['framerate']))
+ {
+ $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['height']))
+ {
+ $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['lang']))
+ {
+ $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['fileSize']))
+ {
+ $length = ceil($content['attribs']['']['fileSize']);
+ }
+ if (isset($content['attribs']['']['medium']))
+ {
+ $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['samplingrate']))
+ {
+ $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['type']))
+ {
+ $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['width']))
+ {
+ $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+
+ // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
+
+ // CAPTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ if (is_array($captions))
+ {
+ $captions = array_values(SimplePie_Misc::array_unique($captions));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ if (is_array($captions))
+ {
+ $captions = array_values(SimplePie_Misc::array_unique($captions));
+ }
+ }
+ else
+ {
+ $captions = $captions_parent;
+ }
+
+ // CATEGORIES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+ {
+ foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+ {
+ foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ if (is_array($categories) && is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
+ }
+ elseif (is_array($categories))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories));
+ }
+ elseif (is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
+ }
+
+ // COPYRIGHTS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+ {
+ $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+ {
+ $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ else
+ {
+ $copyrights = $copyrights_parent;
+ }
+
+ // CREDITS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ if (is_array($credits))
+ {
+ $credits = array_values(SimplePie_Misc::array_unique($credits));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ if (is_array($credits))
+ {
+ $credits = array_values(SimplePie_Misc::array_unique($credits));
+ }
+ }
+ else
+ {
+ $credits = $credits_parent;
+ }
+
+ // DESCRIPTION
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+ {
+ $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+ {
+ $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $description = $description_parent;
+ }
+
+ // HASHES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes[] = $algo.':'.$value;
+ }
+ if (is_array($hashes))
+ {
+ $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes[] = $algo.':'.$value;
+ }
+ if (is_array($hashes))
+ {
+ $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+ }
+ }
+ else
+ {
+ $hashes = $hashes_parent;
+ }
+
+ // KEYWORDS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+ {
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords[] = trim($word);
+ }
+ unset($temp);
+ }
+ if (is_array($keywords))
+ {
+ $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+ {
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords[] = trim($word);
+ }
+ unset($temp);
+ }
+ if (is_array($keywords))
+ {
+ $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+ }
+ }
+ else
+ {
+ $keywords = $keywords_parent;
+ }
+
+ // PLAYER
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+ {
+ $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+ {
+ $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ $player = $player_parent;
+ }
+
+ // RATINGS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ if (is_array($ratings))
+ {
+ $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ if (is_array($ratings))
+ {
+ $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+ }
+ }
+ else
+ {
+ $ratings = $ratings_parent;
+ }
+
+ // RESTRICTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ if (is_array($restrictions))
+ {
+ $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ if (is_array($restrictions))
+ {
+ $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+ }
+ }
+ else
+ {
+ $restrictions = $restrictions_parent;
+ }
+
+ // THUMBNAILS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+ {
+ $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ if (is_array($thumbnails))
+ {
+ $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+ {
+ $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ if (is_array($thumbnails))
+ {
+ $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+ }
+ }
+ else
+ {
+ $thumbnails = $thumbnails_parent;
+ }
+
+ // TITLES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+ {
+ $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+ {
+ $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $title = $title_parent;
+ }
+
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
+ }
+ }
+ }
+
+ // If we have standalone media:content tags, loop through them.
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
+ {
+ foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
+ {
+ if (isset($content['attribs']['']['url']))
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ // Elements
+ $captions = null;
+ $categories = null;
+ $copyrights = null;
+ $credits = null;
+ $description = null;
+ $hashes = null;
+ $keywords = null;
+ $player = null;
+ $ratings = null;
+ $restrictions = null;
+ $thumbnails = null;
+ $title = null;
+
+ // Start checking the attributes of media:content
+ if (isset($content['attribs']['']['bitrate']))
+ {
+ $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['channels']))
+ {
+ $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['duration']))
+ {
+ $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $duration = $duration_parent;
+ }
+ if (isset($content['attribs']['']['expression']))
+ {
+ $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['framerate']))
+ {
+ $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['height']))
+ {
+ $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['lang']))
+ {
+ $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['fileSize']))
+ {
+ $length = ceil($content['attribs']['']['fileSize']);
+ }
+ if (isset($content['attribs']['']['medium']))
+ {
+ $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['samplingrate']))
+ {
+ $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['type']))
+ {
+ $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['width']))
+ {
+ $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+
+ // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
+
+ // CAPTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ if (is_array($captions))
+ {
+ $captions = array_values(SimplePie_Misc::array_unique($captions));
+ }
+ }
+ else
+ {
+ $captions = $captions_parent;
+ }
+
+ // CATEGORIES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+ {
+ foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ if (is_array($categories) && is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
+ }
+ elseif (is_array($categories))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories));
+ }
+ elseif (is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
+ }
+ else
+ {
+ $categories = null;
+ }
+
+ // COPYRIGHTS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+ {
+ $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ else
+ {
+ $copyrights = $copyrights_parent;
+ }
+
+ // CREDITS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ if (is_array($credits))
+ {
+ $credits = array_values(SimplePie_Misc::array_unique($credits));
+ }
+ }
+ else
+ {
+ $credits = $credits_parent;
+ }
+
+ // DESCRIPTION
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+ {
+ $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $description = $description_parent;
+ }
+
+ // HASHES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes[] = $algo.':'.$value;
+ }
+ if (is_array($hashes))
+ {
+ $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+ }
+ }
+ else
+ {
+ $hashes = $hashes_parent;
+ }
+
+ // KEYWORDS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+ {
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords[] = trim($word);
+ }
+ unset($temp);
+ }
+ if (is_array($keywords))
+ {
+ $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+ }
+ }
+ else
+ {
+ $keywords = $keywords_parent;
+ }
+
+ // PLAYER
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+ {
+ $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ $player = $player_parent;
+ }
+
+ // RATINGS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ if (is_array($ratings))
+ {
+ $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+ }
+ }
+ else
+ {
+ $ratings = $ratings_parent;
+ }
+
+ // RESTRICTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ if (is_array($restrictions))
+ {
+ $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+ }
+ }
+ else
+ {
+ $restrictions = $restrictions_parent;
+ }
+
+ // THUMBNAILS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+ {
+ $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ if (is_array($thumbnails))
+ {
+ $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+ }
+ }
+ else
+ {
+ $thumbnails = $thumbnails_parent;
+ }
+
+ // TITLES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+ {
+ $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $title = $title_parent;
+ }
+
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
+ }
+ }
+ }
+
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure')
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ if (isset($link['attribs']['']['type']))
+ {
+ $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($link['attribs']['']['length']))
+ {
+ $length = ceil($link['attribs']['']['length']);
+ }
+
+ // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+ }
+ }
+
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] == 'enclosure')
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ if (isset($link['attribs']['']['type']))
+ {
+ $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($link['attribs']['']['length']))
+ {
+ $length = ceil($link['attribs']['']['length']);
+ }
+
+ // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+ }
+ }
+
+ if ($enclosure = $this->get_item_tags('', 'enclosure'))
+ {
+ if (isset($enclosure[0]['attribs']['']['url']))
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0]));
+ if (isset($enclosure[0]['attribs']['']['type']))
+ {
+ $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($enclosure[0]['attribs']['']['length']))
+ {
+ $length = ceil($enclosure[0]['attribs']['']['length']);
+ }
+
+ // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+ }
+ }
+ $this->data['enclosures'] = array_values(SimplePie_Misc::array_unique($this->data['enclosures']));
+ }
+ if (!empty($this->data['enclosures']))
+ {
+ return $this->data['enclosures'];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_latitude()
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+ {
+ return (float) $match[1];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_longitude()
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', $return[0]['data'], $match))
+ {
+ return (float) $match[2];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Creates the add_to_* methods' return data
+ *
+ * @access private
+ * @param string $item_url String to prefix to the item permalink
+ * @param string $title_url String to prefix to the item title
+ * (and suffix to the item permalink)
+ * @return mixed URL if feed exists, false otherwise
+ */
+ function add_to_service($item_url, $title_url = null)
+ {
+ if ($this->get_permalink() !== null)
+ {
+ $return = $this->sanitize($item_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_permalink());
+ if ($title_url !== null && $this->get_title() !== null)
+ {
+ $return .= $this->sanitize($title_url, SIMPLEPIE_CONSTRUCT_IRI) . rawurlencode($this->get_title());
+ }
+ return $return;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function add_to_blinklist()
+ {
+ return $this->add_to_service('http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=&Url=', '&Title=');
+ }
+
+ function add_to_blogmarks()
+ {
+ return $this->add_to_service('http://blogmarks.net/my/new.php?mini=1&simple=1&url=', '&title=');
+ }
+
+ function add_to_delicious()
+ {
+ return $this->add_to_service('http://del.icio.us/post/?v=3&url=', '&title=');
+ }
+
+ function add_to_digg()
+ {
+ return $this->add_to_service('http://digg.com/submit?phase=2&URL=');
+ }
+
+ function add_to_furl()
+ {
+ return $this->add_to_service('http://www.furl.net/storeIt.jsp?u=', '&t=');
+ }
+
+ function add_to_magnolia()
+ {
+ return $this->add_to_service('http://ma.gnolia.com/bookmarklet/add?url=', '&title=');
+ }
+
+ function add_to_myweb20()
+ {
+ return $this->add_to_service('http://myweb2.search.yahoo.com/myresults/bookmarklet?u=', '&t=');
+ }
+
+ function add_to_newsvine()
+ {
+ return $this->add_to_service('http://www.newsvine.com/_wine/save?u=', '&h=');
+ }
+
+ function add_to_reddit()
+ {
+ return $this->add_to_service('http://reddit.com/submit?url=', '&title=');
+ }
+
+ function add_to_segnalo()
+ {
+ return $this->add_to_service('http://segnalo.com/post.html.php?url=', '&title=');
+ }
+
+ function add_to_simpy()
+ {
+ return $this->add_to_service('http://www.simpy.com/simpy/LinkAdd.do?href=', '&title=');
+ }
+
+ function add_to_spurl()
+ {
+ return $this->add_to_service('http://www.spurl.net/spurl.php?v=3&url=', '&title=');
+ }
+
+ function add_to_wists()
+ {
+ return $this->add_to_service('http://wists.com/r.php?c=&r=', '&title=');
+ }
+
+ function search_technorati()
+ {
+ return $this->add_to_service('http://www.technorati.com/search/');
+ }
+}
+
+class SimplePie_Author
+{
+ var $name;
+ var $link;
+ var $email;
+
+ // Constructor, used to input the data
+ function SimplePie_Author($name = null, $link = null, $email = null)
+ {
+ $this->name = $name;
+ $this->link = $link;
+ $this->email = $email;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_name()
+ {
+ if ($this->name !== null)
+ {
+ return $this->name;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link()
+ {
+ if ($this->link !== null)
+ {
+ return $this->link;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_email()
+ {
+ if ($this->email !== null)
+ {
+ return $this->email;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Category
+{
+ var $term;
+ var $scheme;
+ var $label;
+
+ // Constructor, used to input the data
+ function SimplePie_Category($term = null, $scheme = null, $label = null)
+ {
+ $this->term = $term;
+ $this->scheme = $scheme;
+ $this->label = $label;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_term()
+ {
+ if ($this->term !== null)
+ {
+ return $this->term;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_scheme()
+ {
+ if ($this->scheme !== null)
+ {
+ return $this->scheme;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_label()
+ {
+ if ($this->label !== null)
+ {
+ return $this->label;
+ }
+ else
+ {
+ return $this->get_term();
+ }
+ }
+}
+
+class SimplePie_Enclosure
+{
+ var $bitrate;
+ var $captions;
+ var $categories;
+ var $channels;
+ var $copyright;
+ var $credits;
+ var $description;
+ var $duration;
+ var $expression;
+ var $framerate;
+ var $handler;
+ var $hashes;
+ var $height;
+ var $javascript;
+ var $keywords;
+ var $lang;
+ var $length;
+ var $link;
+ var $medium;
+ var $player;
+ var $ratings;
+ var $restrictions;
+ var $samplingrate;
+ var $thumbnails;
+ var $title;
+ var $type;
+ var $width;
+
+ // Constructor, used to input the data
+ function SimplePie_Enclosure($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null)
+ {
+ $this->bitrate = $bitrate;
+ $this->captions = $captions;
+ $this->categories = $categories;
+ $this->channels = $channels;
+ $this->copyright = $copyright;
+ $this->credits = $credits;
+ $this->description = $description;
+ $this->duration = $duration;
+ $this->expression = $expression;
+ $this->framerate = $framerate;
+ $this->hashes = $hashes;
+ $this->height = $height;
+ $this->javascript = $javascript;
+ $this->keywords = $keywords;
+ $this->lang = $lang;
+ $this->length = $length;
+ $this->link = $link;
+ $this->medium = $medium;
+ $this->player = $player;
+ $this->ratings = $ratings;
+ $this->restrictions = $restrictions;
+ $this->samplingrate = $samplingrate;
+ $this->thumbnails = $thumbnails;
+ $this->title = $title;
+ $this->type = $type;
+ $this->width = $width;
+ if (class_exists('idna_convert'))
+ {
+ $idn =& new idna_convert;
+ $parsed = SimplePie_Misc::parse_url($link);
+ $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
+ }
+ $this->handler = $this->get_handler(); // Needs to load last
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_bitrate()
+ {
+ if ($this->bitrate !== null)
+ {
+ return $this->bitrate;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_caption($key = 0)
+ {
+ $captions = $this->get_captions();
+ if (isset($captions[$key]))
+ {
+ return $captions[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_captions()
+ {
+ if ($this->captions !== null)
+ {
+ return $this->captions;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_category($key = 0)
+ {
+ $categories = $this->get_categories();
+ if (isset($categories[$key]))
+ {
+ return $categories[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_categories()
+ {
+ if ($this->categories !== null)
+ {
+ return $this->categories;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_channels()
+ {
+ if ($this->channels !== null)
+ {
+ return $this->channels;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_copyright()
+ {
+ if ($this->copyright !== null)
+ {
+ return $this->copyright;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_credit($key = 0)
+ {
+ $credits = $this->get_credits();
+ if (isset($credits[$key]))
+ {
+ return $credits[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_credits()
+ {
+ if ($this->credits !== null)
+ {
+ return $this->credits;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_description()
+ {
+ if ($this->description !== null)
+ {
+ return $this->description;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_duration($convert = false)
+ {
+ if ($this->duration !== null)
+ {
+ if ($convert)
+ {
+ $time = SimplePie_Misc::time_hms($this->duration);
+ return $time;
+ }
+ else
+ {
+ return $this->duration;
+ }
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_expression()
+ {
+ if ($this->expression !== null)
+ {
+ return $this->expression;
+ }
+ else
+ {
+ return 'full';
+ }
+ }
+
+ function get_extension()
+ {
+ if ($this->link !== null)
+ {
+ $url = SimplePie_Misc::parse_url($this->link);
+ if ($url['path'] !== '')
+ {
+ return pathinfo($url['path'], PATHINFO_EXTENSION);
+ }
+ }
+ return null;
+ }
+
+ function get_framerate()
+ {
+ if ($this->framerate !== null)
+ {
+ return $this->framerate;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_handler()
+ {
+ return $this->get_real_type(true);
+ }
+
+ function get_hash($key = 0)
+ {
+ $hashes = $this->get_hashes();
+ if (isset($hashes[$key]))
+ {
+ return $hashes[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_hashes()
+ {
+ if ($this->hashes !== null)
+ {
+ return $this->hashes;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_height()
+ {
+ if ($this->height !== null)
+ {
+ return $this->height;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_language()
+ {
+ if ($this->lang !== null)
+ {
+ return $this->lang;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_keyword($key = 0)
+ {
+ $keywords = $this->get_keywords();
+ if (isset($keywords[$key]))
+ {
+ return $keywords[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_keywords()
+ {
+ if ($this->keywords !== null)
+ {
+ return $this->keywords;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_length()
+ {
+ if ($this->length !== null)
+ {
+ return $this->length;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link()
+ {
+ if ($this->link !== null)
+ {
+ return urldecode($this->link);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_medium()
+ {
+ if ($this->medium !== null)
+ {
+ return $this->medium;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_player()
+ {
+ if ($this->player !== null)
+ {
+ return $this->player;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_rating($key = 0)
+ {
+ $ratings = $this->get_ratings();
+ if (isset($ratings[$key]))
+ {
+ return $ratings[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_ratings()
+ {
+ if ($this->ratings !== null)
+ {
+ return $this->ratings;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_restriction($key = 0)
+ {
+ $restrictions = $this->get_restrictions();
+ if (isset($restrictions[$key]))
+ {
+ return $restrictions[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_restrictions()
+ {
+ if ($this->restrictions !== null)
+ {
+ return $this->restrictions;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_sampling_rate()
+ {
+ if ($this->samplingrate !== null)
+ {
+ return $this->samplingrate;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_size()
+ {
+ $length = $this->get_length();
+ if ($length !== null)
+ {
+ return round($length/1048576, 2);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_thumbnail($key = 0)
+ {
+ $thumbnails = $this->get_thumbnails();
+ if (isset($thumbnails[$key]))
+ {
+ return $thumbnails[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_thumbnails()
+ {
+ if ($this->thumbnails !== null)
+ {
+ return $this->thumbnails;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_title()
+ {
+ if ($this->title !== null)
+ {
+ return $this->title;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_type()
+ {
+ if ($this->type !== null)
+ {
+ return $this->type;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_width()
+ {
+ if ($this->width !== null)
+ {
+ return $this->width;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function native_embed($options='')
+ {
+ return $this->embed($options, true);
+ }
+
+ /**
+ * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'.
+ */
+ function embed($options = '', $native = false)
+ {
+ // Set up defaults
+ $audio = '';
+ $video = '';
+ $alt = '';
+ $altclass = '';
+ $loop = 'false';
+ $width = 'auto';
+ $height = 'auto';
+ $bgcolor = '#ffffff';
+ $mediaplayer = '';
+ $widescreen = false;
+ $handler = $this->get_handler();
+ $type = $this->get_real_type();
+
+ // Process options and reassign values as necessary
+ if (is_array($options))
+ {
+ extract($options);
+ }
+ else
+ {
+ $options = explode(',', $options);
+ foreach($options as $option)
+ {
+ $opt = explode(':', $option, 2);
+ if (isset($opt[0], $opt[1]))
+ {
+ $opt[0] = trim($opt[0]);
+ $opt[1] = trim($opt[1]);
+ switch ($opt[0])
+ {
+ case 'audio':
+ $audio = $opt[1];
+ break;
+
+ case 'video':
+ $video = $opt[1];
+ break;
+
+ case 'alt':
+ $alt = $opt[1];
+ break;
+
+ case 'altclass':
+ $altclass = $opt[1];
+ break;
+
+ case 'loop':
+ $loop = $opt[1];
+ break;
+
+ case 'width':
+ $width = $opt[1];
+ break;
+
+ case 'height':
+ $height = $opt[1];
+ break;
+
+ case 'bgcolor':
+ $bgcolor = $opt[1];
+ break;
+
+ case 'mediaplayer':
+ $mediaplayer = $opt[1];
+ break;
+
+ case 'widescreen':
+ $widescreen = $opt[1];
+ break;
+ }
+ }
+ }
+ }
+
+ $mime = explode('/', $type, 2);
+ $mime = $mime[0];
+
+ // Process values for 'auto'
+ if ($width == 'auto')
+ {
+ if ($mime == 'video')
+ {
+ if ($height == 'auto')
+ {
+ $width = 480;
+ }
+ elseif ($widescreen)
+ {
+ $width = round((intval($height)/9)*16);
+ }
+ else
+ {
+ $width = round((intval($height)/3)*4);
+ }
+ }
+ else
+ {
+ $width = '100%';
+ }
+ }
+
+ if ($height == 'auto')
+ {
+ if ($mime == 'audio')
+ {
+ $height = 0;
+ }
+ elseif ($mime == 'video')
+ {
+ if ($width == 'auto')
+ {
+ if ($widescreen)
+ {
+ $height = 270;
+ }
+ else
+ {
+ $height = 360;
+ }
+ }
+ elseif ($widescreen)
+ {
+ $height = round((intval($width)/16)*9);
+ }
+ else
+ {
+ $height = round((intval($width)/4)*3);
+ }
+ }
+ else
+ {
+ $height = 376;
+ }
+ }
+ elseif ($mime == 'audio')
+ {
+ $height = 0;
+ }
+
+ // Set proper placeholder value
+ if ($mime == 'audio')
+ {
+ $placeholder = $audio;
+ }
+ elseif ($mime == 'video')
+ {
+ $placeholder = $video;
+ }
+
+ $embed = '';
+
+ // Make sure the JS library is included
+ if (!$native)
+ {
+ static $javascript_outputted = null;
+ if (!$javascript_outputted && $this->javascript)
+ {
+ $embed .= '<script type="text/javascript" src="?' . htmlspecialchars($this->javascript) . '"></script>';
+ $javascript_outputted = true;
+ }
+ }
+
+ // Odeo Feed MP3's
+ if ($handler == 'odeo')
+ {
+ if ($native)
+ {
+ $embed .= '<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://adobe.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url=' . $this->get_link() . '"></embed>';
+ }
+ else
+ {
+ $embed .= '<script type="text/javascript">embed_odeo("' . $this->get_link() . '");</script>';
+ }
+ }
+
+ // Flash
+ elseif ($handler == 'flash')
+ {
+ if ($native)
+ {
+ $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
+ }
+ }
+
+ // Flash Media Player file types.
+ // Preferred handler for MP3 file types.
+ elseif ($handler == 'fmedia' || ($handler == 'mp3' && $mediaplayer != ''))
+ {
+ $height += 20;
+ if ($native)
+ {
+ $embed .= "<embed src=\"$mediaplayer\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" quality=\"high\" width=\"$width\" height=\"$height\" wmode=\"transparent\" flashvars=\"file=" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\"></embed>";
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_flv('$width', '$height', '" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "', '$placeholder', '$loop', '$mediaplayer');</script>";
+ }
+ }
+
+ // QuickTime 7 file types. Need to test with QuickTime 6.
+ // Only handle MP3's if the Flash Media Player is not present.
+ elseif ($handler == 'quicktime' || ($handler == 'mp3' && $mediaplayer == ''))
+ {
+ $height += 16;
+ if ($native)
+ {
+ if ($placeholder != ""){
+ $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
+ }
+ else {
+ $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
+ }
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
+ }
+ }
+
+ // Windows Media
+ elseif ($handler == 'wmedia')
+ {
+ $height += 45;
+ if ($native)
+ {
+ $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
+ }
+ }
+
+ // Everything else
+ else $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
+
+ return $embed;
+ }
+
+ function get_real_type($find_handler = false)
+ {
+ // If it's Odeo, let's get it out of the way.
+ if (substr(strtolower($this->get_link()), 0, 15) == 'http://odeo.com')
+ {
+ return 'odeo';
+ }
+
+ // Mime-types by handler.
+ $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash
+ $types_fmedia = array('video/flv', 'video/x-flv'); // Flash Media Player
+ $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime
+ $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media
+ $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3
+
+ if ($this->get_type() !== null)
+ {
+ $type = strtolower($this->type);
+ }
+ else
+ {
+ $type = null;
+ }
+
+ // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
+ if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3)))
+ {
+ switch (strtolower($this->get_extension()))
+ {
+ // Audio mime-types
+ case 'aac':
+ case 'adts':
+ $type = 'audio/acc';
+ break;
+
+ case 'aif':
+ case 'aifc':
+ case 'aiff':
+ case 'cdda':
+ $type = 'audio/aiff';
+ break;
+
+ case 'bwf':
+ $type = 'audio/wav';
+ break;
+
+ case 'kar':
+ case 'mid':
+ case 'midi':
+ case 'smf':
+ $type = 'audio/midi';
+ break;
+
+ case 'm4a':
+ $type = 'audio/x-m4a';
+ break;
+
+ case 'mp3':
+ case 'swa':
+ $type = 'audio/mp3';
+ break;
+
+ case 'wav':
+ $type = 'audio/wav';
+ break;
+
+ case 'wax':
+ $type = 'audio/x-ms-wax';
+ break;
+
+ case 'wma':
+ $type = 'audio/x-ms-wma';
+ break;
+
+ // Video mime-types
+ case '3gp':
+ case '3gpp':
+ $type = 'video/3gpp';
+ break;
+
+ case '3g2':
+ case '3gp2':
+ $type = 'video/3gpp2';
+ break;
+
+ case 'asf':
+ $type = 'video/x-ms-asf';
+ break;
+
+ case 'flv':
+ $type = 'video/x-flv';
+ break;
+
+ case 'm1a':
+ case 'm1s':
+ case 'm1v':
+ case 'm15':
+ case 'm75':
+ case 'mp2':
+ case 'mpa':
+ case 'mpeg':
+ case 'mpg':
+ case 'mpm':
+ case 'mpv':
+ $type = 'video/mpeg';
+ break;
+
+ case 'm4v':
+ $type = 'video/x-m4v';
+ break;
+
+ case 'mov':
+ case 'qt':
+ $type = 'video/quicktime';
+ break;
+
+ case 'mp4':
+ case 'mpg4':
+ $type = 'video/mp4';
+ break;
+
+ case 'sdv':
+ $type = 'video/sd-video';
+ break;
+
+ case 'wm':
+ $type = 'video/x-ms-wm';
+ break;
+
+ case 'wmv':
+ $type = 'video/x-ms-wmv';
+ break;
+
+ case 'wvx':
+ $type = 'video/x-ms-wvx';
+ break;
+
+ // Flash mime-types
+ case 'spl':
+ $type = 'application/futuresplash';
+ break;
+
+ case 'swf':
+ $type = 'application/x-shockwave-flash';
+ break;
+ }
+ }
+
+ if ($find_handler)
+ {
+ if (in_array($type, $types_flash))
+ {
+ return 'flash';
+ }
+ elseif (in_array($type, $types_fmedia))
+ {
+ return 'fmedia';
+ }
+ elseif (in_array($type, $types_quicktime))
+ {
+ return 'quicktime';
+ }
+ elseif (in_array($type, $types_wmedia))
+ {
+ return 'wmedia';
+ }
+ elseif (in_array($type, $types_mp3))
+ {
+ return 'mp3';
+ }
+ else
+ {
+ return null;
+ }
+ }
+ else
+ {
+ return $type;
+ }
+ }
+}
+
+class SimplePie_Caption
+{
+ var $type;
+ var $lang;
+ var $startTime;
+ var $endTime;
+ var $text;
+
+ // Constructor, used to input the data
+ function SimplePie_Caption($type = null, $lang = null, $startTime = null, $endTime = null, $text = null)
+ {
+ $this->type = $type;
+ $this->lang = $lang;
+ $this->startTime = $startTime;
+ $this->endTime = $endTime;
+ $this->text = $text;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_endtime()
+ {
+ if ($this->endTime !== null)
+ {
+ return $this->endTime;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_language()
+ {
+ if ($this->language !== null)
+ {
+ return $this->language;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_starttime()
+ {
+ if ($this->startTime !== null)
+ {
+ return $this->startTime;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_text()
+ {
+ if ($this->text !== null)
+ {
+ return $this->text;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_type()
+ {
+ if ($this->type !== null)
+ {
+ return $this->type;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Credit
+{
+ var $role;
+ var $scheme;
+ var $name;
+
+ // Constructor, used to input the data
+ function SimplePie_Credit($role = null, $scheme = null, $name = null)
+ {
+ $this->role = $role;
+ $this->scheme = $scheme;
+ $this->name = $name;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_role()
+ {
+ if ($this->role !== null)
+ {
+ return $this->role;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_scheme()
+ {
+ if ($this->scheme !== null)
+ {
+ return $this->scheme;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_name()
+ {
+ if ($this->name !== null)
+ {
+ return $this->name;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Copyright
+{
+ var $url;
+ var $label;
+
+ // Constructor, used to input the data
+ function SimplePie_Copyright($url = null, $label = null)
+ {
+ $this->url = $url;
+ $this->label = $label;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_url()
+ {
+ if ($this->url !== null)
+ {
+ return $this->url;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_attribution()
+ {
+ if ($this->label !== null)
+ {
+ return $this->label;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Rating
+{
+ var $scheme;
+ var $value;
+
+ // Constructor, used to input the data
+ function SimplePie_Rating($scheme = null, $value = null)
+ {
+ $this->scheme = $scheme;
+ $this->value = $value;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_scheme()
+ {
+ if ($this->scheme !== null)
+ {
+ return $this->scheme;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_value()
+ {
+ if ($this->value !== null)
+ {
+ return $this->value;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Restriction
+{
+ var $relationship;
+ var $type;
+ var $value;
+
+ // Constructor, used to input the data
+ function SimplePie_Restriction($relationship = null, $type = null, $value = null)
+ {
+ $this->relationship = $relationship;
+ $this->type = $type;
+ $this->value = $value;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_relationship()
+ {
+ if ($this->relationship !== null)
+ {
+ return $this->relationship;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_type()
+ {
+ if ($this->type !== null)
+ {
+ return $this->type;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_value()
+ {
+ if ($this->value !== null)
+ {
+ return $this->value;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+/**
+ * @todo Move to properly supporting RFC2616 (HTTP/1.1)
+ */
+class SimplePie_File
+{
+ var $url;
+ var $useragent;
+ var $success = true;
+ var $headers = array();
+ var $body;
+ var $status_code;
+ var $redirects = 0;
+ var $error;
+ var $method;
+
+ function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false)
+ {
+ if (class_exists('idna_convert'))
+ {
+ $idn =& new idna_convert;
+ $parsed = SimplePie_Misc::parse_url($url);
+ $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
+ }
+ $this->url = $url;
+ $this->useragent = $useragent;
+ if (preg_match('/^http(s)?:\/\//i', $url))
+ {
+ if ($useragent === null)
+ {
+ $useragent = ini_get('user_agent');
+ $this->useragent = $useragent;
+ }
+ if (!is_array($headers))
+ {
+ $headers = array();
+ }
+ if (!$force_fsockopen && extension_loaded('curl'))
+ {
+ $this->method = 'curl';
+ $fp = curl_init();
+ $headers2 = array();
+ foreach ($headers as $key => $value)
+ {
+ $headers2[] = "$key: $value";
+ }
+ if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>='))
+ {
+ curl_setopt($fp, CURLOPT_ENCODING, '');
+ }
+ curl_setopt($fp, CURLOPT_URL, $url);
+ curl_setopt($fp, CURLOPT_HEADER, 1);
+ curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
+ curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout);
+ curl_setopt($fp, CURLOPT_REFERER, $url);
+ curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
+ curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
+ if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>='))
+ {
+ curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1);
+ curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects);
+ }
+
+ $this->headers = curl_exec($fp);
+ if (curl_errno($fp) == 23 || curl_errno($fp) == 61)
+ {
+ curl_setopt($fp, CURLOPT_ENCODING, 'none');
+ $this->headers = curl_exec($fp);
+ }
+ if (curl_errno($fp))
+ {
+ $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp);
+ $this->success = false;
+ }
+ else
+ {
+ $info = curl_getinfo($fp);
+ curl_close($fp);
+ $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1);
+ $this->headers = array_pop($this->headers);
+ $parser =& new SimplePie_HTTP_Parser($this->headers);
+ if ($parser->parse())
+ {
+ $this->headers = $parser->headers;
+ $this->body = $parser->body;
+ $this->status_code = $parser->status_code;
+ if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
+ {
+ $this->redirects++;
+ if (isset($this->headers['content-location']))
+ {
+ $location = SimplePie_Misc::absolutize_url($this->headers['location'], SimplePie_Misc::absolutize_url($this->headers['content-location'], $url));
+ }
+ else
+ {
+ $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
+ }
+ return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+ }
+ }
+ }
+ }
+ else
+ {
+ $this->method = 'fsockopen';
+ $url_parts = parse_url($url);
+ if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) == 'https')
+ {
+ $url_parts['host'] = "ssl://$url_parts[host]";
+ $url_parts['port'] = 443;
+ }
+ if (!isset($url_parts['port']))
+ {
+ $url_parts['port'] = 80;
+ }
+ $fp = fsockopen($url_parts['host'], $url_parts['port'], $errno, $errstr, $timeout);
+ if (!$fp)
+ {
+ $this->error = 'fsockopen error: ' . $errstr;
+ $this->success = false;
+ }
+ else
+ {
+ if (function_exists('stream_set_timeout'))
+ {
+ stream_set_timeout($fp, $timeout);
+ }
+ else
+ {
+ socket_set_timeout($fp, $timeout);
+ }
+ if (isset($url_parts['path']))
+ {
+ if (isset($url_parts['query']))
+ {
+ $get = "$url_parts[path]?$url_parts[query]";
+ }
+ else
+ {
+ $get = $url_parts['path'];
+ }
+ }
+ else
+ {
+ $get = '/';
+ }
+ $out = "GET $get HTTP/1.0\r\n";
+ $out .= "Host: $url_parts[host]\r\n";
+ $out .= "User-Agent: $useragent\r\n";
+ if (function_exists('gzinflate'))
+ {
+ $out .= "Accept-Encoding: gzip,deflate\r\n";
+ }
+
+ if (isset($url_parts['user']) && isset($url_parts['pass']))
+ {
+ $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n";
+ }
+ foreach ($headers as $key => $value)
+ {
+ $out .= "$key: $value\r\n";
+ }
+ $out .= "Connection: Close\r\n\r\n";
+ fwrite($fp, $out);
+
+ if (function_exists('stream_get_meta_data'))
+ {
+ $info = stream_get_meta_data($fp);
+ }
+ else
+ {
+ $info = socket_get_status($fp);
+ }
+
+ $this->headers = '';
+ while (!$info['eof'] && !$info['timed_out'])
+ {
+ $this->headers .= fread($fp, 1160);
+ if (function_exists('stream_get_meta_data'))
+ {
+ $info = stream_get_meta_data($fp);
+ }
+ else
+ {
+ $info = socket_get_status($fp);
+ }
+ }
+ if (!$info['timed_out'])
+ {
+ $parser =& new SimplePie_HTTP_Parser($this->headers);
+ if ($parser->parse())
+ {
+ $this->headers = $parser->headers;
+ $this->body = $parser->body;
+ $this->status_code = $parser->status_code;
+ if (($this->status_code == 300 || $this->status_code == 301 || $this->status_code == 302 || $this->status_code == 303 || $this->status_code == 307 || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
+ {
+ $this->redirects++;
+ if (isset($this->headers['content-location']))
+ {
+ $location = SimplePie_Misc::absolutize_url($this->headers['location'], SimplePie_Misc::absolutize_url($this->headers['content-location'], $url));
+ }
+ else
+ {
+ $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
+ }
+ return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+ }
+ if (isset($this->headers['content-encoding']) && ($this->headers['content-encoding'] == 'gzip' || $this->headers['content-encoding'] == 'deflate'))
+ {
+ if (substr($this->body, 0, 8) == "\x1f\x8b\x08\x00\x00\x00\x00\x00")
+ {
+ $this->body = substr($this->body, 10);
+ }
+ $this->body = gzinflate($this->body);
+ }
+ }
+ }
+ else
+ {
+ $this->error = 'fsocket timed out';
+ $this->success = false;
+ }
+ fclose($fp);
+ }
+ }
+ }
+ elseif (function_exists('file_get_contents'))
+ {
+ $this->method = 'file_get_contents';
+ if (!$this->body = file_get_contents($url))
+ {
+ $this->error = 'file_get_contents could not read the file';
+ $this->success = false;
+ }
+ }
+ else
+ {
+ $this->method = 'fopen';
+ if (($fp = fopen($url, 'rb')) === false)
+ {
+ $this->error = 'failed to open stream: No such file or directory';
+ $this->success = false;
+ }
+ else
+ {
+ $this->body = '';
+ while (!feof($fp))
+ {
+ $this->body .= fread($fp, 8192);
+ }
+ fclose($fp);
+ }
+ }
+ }
+}
+
+/**
+ * HTTP Response Parser
+ *
+ * @package SimplePie
+ * @todo Support HTTP Requests
+ */
+class SimplePie_HTTP_Parser
+{
+ /**
+ * HTTP Version
+ *
+ * @access public
+ * @var string
+ */
+ var $http_version = '';
+
+ /**
+ * Status code
+ *
+ * @access public
+ * @var string
+ */
+ var $status_code = '';
+
+ /**
+ * Reason phrase
+ *
+ * @access public
+ * @var string
+ */
+ var $reason = '';
+
+ /**
+ * Key/value pairs of the headers
+ *
+ * @access public
+ * @var array
+ */
+ var $headers = array();
+
+ /**
+ * Body of the response
+ *
+ * @access public
+ * @var string
+ */
+ var $body = '';
+
+ /**
+ * Current state of the state machine
+ *
+ * @access private
+ * @var string
+ */
+ var $state = 'start';
+
+ /**
+ * Input data
+ *
+ * @access private
+ * @var string
+ */
+ var $data = '';
+
+ /**
+ * Input data length (to avoid calling strlen() everytime this is needed)
+ *
+ * @access private
+ * @var int
+ */
+ var $data_length = 0;
+
+ /**
+ * Current position of the pointer
+ *
+ * @access private
+ * @var int
+ */
+ var $position = 0;
+
+ /**
+ * Name of the hedaer currently being parsed
+ *
+ * @access private
+ * @var string
+ */
+ var $name = '';
+
+ /**
+ * Value of the hedaer currently being parsed
+ *
+ * @access private
+ * @var string
+ */
+ var $value = '';
+
+ /**
+ * Create an instance of the class with the input data
+ *
+ * @access public
+ * @param string $data Input data
+ */
+ function SimplePie_HTTP_Parser($data)
+ {
+ $this->data = $data;
+ $this->data_length = strlen($this->data);
+ }
+
+ /**
+ * Parse the input data
+ *
+ * @access public
+ * @return bool true on success, false on failure
+ */
+ function parse()
+ {
+ while ($this->state && $this->state != 'emit' && $this->has_data())
+ {
+ $state = $this->state;
+ $this->$state();
+ }
+ $this->data = '';
+ if ($this->state == 'emit')
+ {
+ return true;
+ }
+ else
+ {
+ $this->http_version = '';
+ $this->status_code = '';
+ $this->headers = array();
+ $this->body = '';
+ return false;
+ }
+ }
+
+ /**
+ * Check whether there is data beyond the pointer
+ *
+ * @access private
+ * @return bool true if there is further data, false if not
+ */
+ function has_data()
+ {
+ return (bool) ($this->position < $this->data_length);
+ }
+
+ /**
+ * See if the next character is LWS
+ *
+ * @access private
+ * @return bool true if the next character is LWS, false if not
+ */
+ function is_linear_whitespace()
+ {
+ return (bool) (strspn($this->data, "\x09\x20", $this->position, 1)
+ || (substr($this->data, $this->position, 2) == "\r\n" && strspn($this->data, "\x09\x20", $this->position + 2, 1))
+ || (strspn($this->data, "\r\n", $this->position, 1) && strspn($this->data, "\x09\x20", $this->position + 1, 1)));
+ }
+
+ /**
+ * The starting state of the state machine, see if the data is a response or request
+ *
+ * @access private
+ */
+ function start()
+ {
+ $this->state = 'http_version_response';
+ }
+
+ /**
+ * Parse an HTTP-version string
+ *
+ * @access private
+ */
+ function http_version()
+ {
+ if (preg_match('/^HTTP\/([0-9]+\.[0-9]+)/i', substr($this->data, $this->position, strcspn($this->data, "\r\n", $this->position)), $match))
+ {
+ $this->position += strlen($match[0]);
+ $this->http_version = $match[1];
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Parse LWS, replacing consecutive characters with a single space
+ *
+ * @access private
+ */
+ function linear_whitespace()
+ {
+ do
+ {
+ if (substr($this->data, $this->position, 2) == "\r\n")
+ {
+ $this->position += 2;
+ }
+ elseif (strspn($this->data, "\r\n", $this->position, 1))
+ {
+ $this->position++;
+ }
+ $this->position += strspn($this->data, "\x09\x20", $this->position);
+ } while ($this->is_linear_whitespace());
+ $this->value .= "\x20";
+ }
+
+ /**
+ * Parse an HTTP-version string within a response
+ *
+ * @access private
+ */
+ function http_version_response()
+ {
+ if ($this->http_version() && $this->data[$this->position] == "\x20")
+ {
+ $this->state = 'status_code';
+ $this->position++;
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ /**
+ * Parse a status code
+ *
+ * @access private
+ */
+ function status_code()
+ {
+ if (strspn($this->data, '1234567890', $this->position, 3) == 3)
+ {
+ $this->status_code = substr($this->data, $this->position, 3);
+ $this->state = 'reason_phrase';
+ $this->position += 3;
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ /**
+ * Skip over the reason phrase (it has no normative value, and you can send absolutely anything here)
+ *
+ * @access private
+ */
+ function reason_phrase()
+ {
+ $len = strcspn($this->data, "\r\n", $this->position);
+ $this->reason = substr($this->data, $this->position, $len);
+ $this->position += $len;
+ if ($this->has_data())
+ {
+ if (substr($this->data, $this->position, 2) == "\r\n")
+ {
+ $this->position += 2;
+ }
+ elseif (strspn($this->data, "\r\n", $this->position, 1))
+ {
+ $this->position++;
+ }
+ $this->state = 'name';
+ }
+ }
+
+ /**
+ * Parse a header name
+ *
+ * @access private
+ */
+ function name()
+ {
+ $len = strcspn($this->data, ':', $this->position);
+ $this->name = substr($this->data, $this->position, $len);
+ $this->position += $len;
+
+ if ($this->has_data() && $this->data[$this->position] == ':')
+ {
+ $this->state = 'value_next';
+ $this->position++;
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ /**
+ * See what state to move the state machine to while within non-quoted header values
+ *
+ * @access private
+ */
+ function value_next()
+ {
+ if ($this->is_linear_whitespace())
+ {
+ $this->state = 'value_linear_whitespace';
+ }
+ elseif ($this->data[$this->position] == '"')
+ {
+ $this->state = 'value_quote_next';
+ $this->position++;
+ }
+ elseif (substr($this->data, $this->position, 2) == "\r\n")
+ {
+ $this->state = 'end_crlf';
+ $this->position += 2;
+ }
+ elseif (strspn($this->data, "\r\n", $this->position, 1))
+ {
+ $this->state = 'end_crlf';
+ $this->position++;
+ }
+ else
+ {
+ $this->state = 'value_no_quote';
+ }
+ }
+
+ /**
+ * Parse a header value while outside quotes
+ *
+ * @access private
+ */
+ function value_no_quote()
+ {
+ $len = strcspn($this->data, "\x09\x20\r\n\"", $this->position);
+ $this->value .= substr($this->data, $this->position, $len);
+ $this->state = 'value_next';
+ $this->position += $len;
+ }
+
+ /**
+ * Parse LWS outside quotes
+ *
+ * @access private
+ */
+ function value_linear_whitespace()
+ {
+ $this->linear_whitespace();
+ $this->state = 'value_next';
+ }
+
+ /**
+ * See what state to move the state machine to while within quoted header values
+ *
+ * @access private
+ */
+ function value_quote_next()
+ {
+ if ($this->is_linear_whitespace())
+ {
+ $this->state = 'value_linear_whitespace_quote';
+ }
+ else
+ {
+ switch ($this->data[$this->position])
+ {
+ case '"':
+ $this->state = 'value_next';
+ $this->position++;
+ break;
+
+ case '\\':
+ $this->state = 'value_quote_char';
+ $this->position++;
+ break;
+
+ default:
+ $this->state = 'value_quote';
+ break;
+ }
+ }
+ }
+
+ /**
+ * Parse a header value while within quotes
+ *
+ * @access private
+ */
+ function value_quote()
+ {
+ $len = strcspn($this->data, "\x09\x20\r\n\"\\", $this->position);
+ $this->value .= substr($this->data, $this->position, $len);
+ $this->position += $len;
+ $this->state = 'value_quote_next';
+ }
+
+ /**
+ * Parse an escaped character within quotes
+ *
+ * @access private
+ */
+ function value_quote_char()
+ {
+ $this->value .= $this->data[$this->position];
+ $this->state = 'value_quote_next';
+ $this->position++;
+ }
+
+ /**
+ * Parse LWS within quotes
+ *
+ * @access private
+ */
+ function value_linear_whitespace_quote()
+ {
+ $this->linear_whitespace();
+ $this->state = 'value_quote_next';
+ }
+
+ /**
+ * Parse a CRLF, and see whether we have a further header, or whether we are followed by the body
+ *
+ * @access private
+ */
+ function end_crlf()
+ {
+ $this->name = strtolower($this->name);
+ $this->value = trim($this->value, "\x20");
+ if (isset($this->headers[$this->name]))
+ {
+ $this->headers[$this->name] .= ', ' . $this->value;
+ }
+ else
+ {
+ $this->headers[$this->name] = $this->value;
+ }
+
+ if (substr($this->data, $this->position, 2) == "\r\n")
+ {
+ $this->body = substr($this->data, $this->position + 2);
+ $this->state = 'emit';
+ }
+ elseif (strspn($this->data, "\r\n", $this->position, 1))
+ {
+ $this->body = substr($this->data, $this->position + 1);
+ $this->state = 'emit';
+ }
+ else
+ {
+ $this->name = '';
+ $this->value = '';
+ $this->state = 'name';
+ }
+ }
+}
+
+class SimplePie_Cache
+{
+ var $location;
+ var $filename;
+ var $extension;
+ var $name;
+
+ function SimplePie_Cache($location, $filename, $extension)
+ {
+ $this->location = $location;
+ $this->filename = rawurlencode($filename);
+ $this->extension = rawurlencode($extension);
+ $this->name = "$location/$this->filename.$this->extension";
+ }
+
+ function save($data)
+ {
+ if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location))
+ {
+ if (function_exists('file_put_contents'))
+ {
+ return (bool) file_put_contents($this->name, serialize($data));
+ }
+ else
+ {
+ $fp = fopen($this->name, 'wb');
+ if ($fp)
+ {
+ fwrite($fp, serialize($data));
+ fclose($fp);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ function load()
+ {
+ if (file_exists($this->name) && is_readable($this->name))
+ {
+ if (function_exists('file_get_contents'))
+ {
+ return unserialize(file_get_contents($this->name));
+ }
+ elseif (($fp = fopen($this->name, 'rb')) !== false)
+ {
+ $data = '';
+ while (!feof($fp))
+ {
+ $data .= fread($fp, 8192);
+ }
+ fclose($fp);
+ return unserialize($data);
+ }
+ }
+ return false;
+ }
+
+ function mtime()
+ {
+ if (file_exists($this->name))
+ {
+ return filemtime($this->name);
+ }
+ return false;
+ }
+
+ function touch()
+ {
+ if (file_exists($this->name))
+ {
+ return touch($this->name);
+ }
+ return false;
+ }
+
+ function unlink()
+ {
+ if (file_exists($this->name))
+ {
+ return unlink($this->name);
+ }
+ return false;
+ }
+}
+
+class SimplePie_Misc
+{
+ function time_hms($seconds)
+ {
+ $time = '';
+
+ $hours = floor($seconds / 3600);
+ $remainder = $seconds % 3600;
+ if ($hours > 0)
+ {
+ $time .= $hours.':';
+ }
+
+ $minutes = floor($remainder / 60);
+ $seconds = $remainder % 60;
+ if ($minutes < 10 && $hours > 0)
+ {
+ $minutes = '0' . $minutes;
+ }
+ if ($seconds < 10)
+ {
+ $seconds = '0' . $seconds;
+ }
+
+ $time .= $minutes.':';
+ $time .= $seconds;
+
+ return $time;
+ }
+
+ function absolutize_url($relative, $base)
+ {
+ if ($relative !== '')
+ {
+ $relative = SimplePie_Misc::parse_url($relative);
+ if ($relative['scheme'] !== '')
+ {
+ $target = $relative;
+ }
+ elseif ($base !== '')
+ {
+ $base = SimplePie_Misc::parse_url($base);
+ $target = SimplePie_Misc::parse_url('');
+ if ($relative['authority'] !== '')
+ {
+ $target = $relative;
+ $target['scheme'] = $base['scheme'];
+ }
+ else
+ {
+ $target['scheme'] = $base['scheme'];
+ $target['authority'] = $base['authority'];
+ if ($relative['path'] !== '')
+ {
+ if (strpos($relative['path'], '/') === 0)
+ {
+ $target['path'] = $relative['path'];
+ }
+ elseif (($target['path'] = dirname("$base[path].")) == '/')
+ {
+ $target['path'] .= $relative['path'];
+ }
+ else
+ {
+ $target['path'] .= '/' . $relative['path'];
+ }
+ if ($relative['query'] !== '')
+ {
+ $target['query'] = $relative['query'];
+ }
+ }
+ else
+ {
+ if ($base['path'] !== '')
+ {
+ $target['path'] = $base['path'];
+ }
+ else
+ {
+ $target['path'] = '/';
+ }
+ if ($relative['query'] !== '')
+ {
+ $target['query'] = $relative['query'];
+ }
+ elseif ($base['query'] !== '')
+ {
+ $target['query'] = $base['query'];
+ }
+ }
+ }
+ if ($relative['fragment'] !== '')
+ {
+ $target['fragment'] = $relative['fragment'];
+ }
+ }
+ else
+ {
+ // No base URL, just return the relative URL
+ $target = $relative;
+ }
+ $return = SimplePie_Misc::compress_parse_url($target['scheme'], $target['authority'], $target['path'], $target['query'], $target['fragment']);
+ }
+ else
+ {
+ $return = $base;
+ }
+ $return = SimplePie_Misc::normalize_url($return);
+ return $return;
+ }
+
+ function remove_dot_segments($input)
+ {
+ $output = '';
+ while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input == '.' || $input == '..')
+ {
+ // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
+ if (strpos($input, '../') === 0)
+ {
+ $input = substr($input, 3);
+ }
+ elseif (strpos($input, './') === 0)
+ {
+ $input = substr($input, 2);
+ }
+ // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
+ elseif (strpos($input, '/./') === 0)
+ {
+ $input = substr_replace($input, '/', 0, 3);
+ }
+ elseif ($input == '/.')
+ {
+ $input = '/';
+ }
+ // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
+ elseif (strpos($input, '/../') === 0)
+ {
+ $input = substr_replace($input, '/', 0, 4);
+ $output = substr_replace($output, '', strrpos($output, '/'));
+ }
+ elseif ($input == '/..')
+ {
+ $input = '/';
+ $output = substr_replace($output, '', strrpos($output, '/'));
+ }
+ // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
+ elseif ($input == '.' || $input == '..')
+ {
+ $input = '';
+ }
+ // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
+ elseif (($pos = strpos($input, '/', 1)) !== false)
+ {
+ $output .= substr($input, 0, $pos);
+ $input = substr_replace($input, '', 0, $pos);
+ }
+ else
+ {
+ $output .= $input;
+ $input = '';
+ }
+ }
+ return $output . $input;
+ }
+
+ function get_element($realname, $string)
+ {
+ $return = array();
+ $name = preg_quote($realname, '/');
+ if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE))
+ {
+ for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++)
+ {
+ $return[$i]['tag'] = $realname;
+ $return[$i]['full'] = $matches[$i][0][0];
+ $return[$i]['offset'] = $matches[$i][0][1];
+ if (strlen($matches[$i][3][0]) <= 2)
+ {
+ $return[$i]['self_closing'] = true;
+ }
+ else
+ {
+ $return[$i]['self_closing'] = false;
+ $return[$i]['content'] = $matches[$i][4][0];
+ }
+ $return[$i]['attribs'] = array();
+ if (isset($matches[$i][2][0]) && preg_match_all('/((?:[^\s:]+:)?[^\s:]+)(?:\s*=\s*(?:"([^"]*)"|\'([^\']*)\'|([a-z0-9\-._:]*)))?\s/U', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER))
+ {
+ for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++)
+ {
+ if (count($attribs[$j]) == 2)
+ {
+ $attribs[$j][2] = $attribs[$j][1];
+ }
+ $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8');
+ }
+ }
+ }
+ }
+ return $return;
+ }
+
+ function element_implode($element)
+ {
+ $full = "<$element[tag]";
+ foreach ($element['attribs'] as $key => $value)
+ {
+ $key = strtolower($key);
+ $full .= " $key=\"" . htmlspecialchars($value['data']) . '"';
+ }
+ if ($element['self_closing'])
+ {
+ $full .= ' />';
+ }
+ else
+ {
+ $full .= ">$element[content]</$element[tag]>";
+ }
+ return $full;
+ }
+
+ function error($message, $level, $file, $line)
+ {
+ switch ($level)
+ {
+ case E_USER_ERROR:
+ $note = 'PHP Error';
+ break;
+ case E_USER_WARNING:
+ $note = 'PHP Warning';
+ break;
+ case E_USER_NOTICE:
+ $note = 'PHP Notice';
+ break;
+ default:
+ $note = 'Unknown Error';
+ break;
+ }
+ error_log("$note: $message in $file on line $line", 0);
+ return $message;
+ }
+
+ /**
+ * If a file has been cached, retrieve and display it.
+ *
+ * This is most useful for caching images (get_favicon(), etc.),
+ * however it works for all cached files. This WILL NOT display ANY
+ * file/image/page/whatever, but rather only display what has already
+ * been cached by SimplePie.
+ *
+ * @access public
+ * @see SimplePie::get_favicon()
+ * @param str $identifier_url URL that is used to identify the content.
+ * This may or may not be the actual URL of the live content.
+ * @param str $cache_location Location of SimplePie's cache. Defaults
+ * to './cache'.
+ * @param str $cache_extension The file extension that the file was
+ * cached with. Defaults to 'spc'.
+ * @param str $cache_class Name of the cache-handling class being used
+ * in SimplePie. Defaults to 'SimplePie_Cache', and should be left
+ * as-is unless you've overloaded the class.
+ * @param str $cache_name_function Function that converts the filename
+ * for saving. Defaults to 'md5'.
+ */
+ function display_cached_file($identifier_url, $cache_location = './cache', $cache_extension = 'spc', $cache_class = 'SimplePie_Cache', $cache_name_function = 'md5')
+ {
+ $cache =& new $cache_class($cache_location, call_user_func($cache_name_function, $identifier_url), $cache_extension);
+
+ if ($file = $cache->load())
+ {
+ header('Content-type:' . $file['headers']['content-type']);
+ header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
+ echo $file['body'];
+ exit;
+ }
+
+ die('Cached file for ' . $identifier_url . ' cannot be found.');
+ }
+
+ function fix_protocol($url, $http = 1)
+ {
+ $url = SimplePie_Misc::normalize_url($url);
+ $parsed = SimplePie_Misc::parse_url($url);
+ if ($parsed['scheme'] !== '' && $parsed['scheme'] != 'http' && $parsed['scheme'] != 'https')
+ {
+ return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http);
+ }
+
+ if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url))
+ {
+ return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http);
+ }
+
+ if ($http == 2 && $parsed['scheme'] !== '')
+ {
+ return "feed:$url";
+ }
+ elseif ($http == 3 && strtolower($parsed['scheme']) == 'http')
+ {
+ return substr_replace($url, 'podcast', 0, 4);
+ }
+ elseif ($http == 4 && strtolower($parsed['scheme']) == 'http')
+ {
+ return substr_replace($url, 'itpc', 0, 4);
+ }
+ else
+ {
+ return $url;
+ }
+ }
+
+ function parse_url($url)
+ {
+ static $cache = array();
+ if (isset($cache[$url]))
+ {
+ return $cache[$url];
+ }
+ elseif (preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/', $url, $match))
+ {
+ for ($i = count($match); $i <= 9; $i++)
+ {
+ $match[$i] = '';
+ }
+ return $cache[$url] = array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]);
+ }
+ else
+ {
+ return $cache[$url] = array('scheme' => '', 'authority' => '', 'path' => '', 'query' => '', 'fragment' => '');
+ }
+ }
+
+ function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '')
+ {
+ $return = '';
+ if ($scheme !== '')
+ {
+ $return .= "$scheme:";
+ }
+ if ($authority !== '')
+ {
+ $return .= "//$authority";
+ }
+ if ($path !== '')
+ {
+ $return .= $path;
+ }
+ if ($query !== '')
+ {
+ $return .= "?$query";
+ }
+ if ($fragment !== '')
+ {
+ $return .= "#$fragment";
+ }
+ return $return;
+ }
+
+ function normalize_url($url)
+ {
+ $url = preg_replace_callback('/%([0-9A-Fa-f]{2})/', array('SimplePie_Misc', 'percent_encoding_normalization'), $url);
+ $url = SimplePie_Misc::parse_url($url);
+ $url['scheme'] = strtolower($url['scheme']);
+ if ($url['authority'] !== '')
+ {
+ $url['authority'] = strtolower($url['authority']);
+ $url['path'] = SimplePie_Misc::remove_dot_segments($url['path']);
+ }
+ return SimplePie_Misc::compress_parse_url($url['scheme'], $url['authority'], $url['path'], $url['query'], $url['fragment']);
+ }
+
+ function percent_encoding_normalization($match)
+ {
+ $integer = hexdec($match[1]);
+ if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer == 0x2D || $integer == 0x2E || $integer == 0x5F || $integer == 0x7E)
+ {
+ return chr($integer);
+ }
+ else
+ {
+ return strtoupper($match[0]);
+ }
+ }
+
+ /**
+ * Remove bad UTF-8 bytes
+ *
+ * PCRE Pattern to locate bad bytes in a UTF-8 string comes from W3C
+ * FAQ: Multilingual Forms (modified to include full ASCII range)
+ *
+ * @author Geoffrey Sneddon
+ * @see http://www.w3.org/International/questions/qa-forms-utf-8
+ * @param string $str String to remove bad UTF-8 bytes from
+ * @return string UTF-8 string
+ */
+ function utf8_bad_replace($str)
+ {
+ if (function_exists('iconv'))
+ {
+ $out = iconv('UTF-8', 'UTF-8//IGNORE', $str);
+ if($out !== false) return $out;
+ }
+ if (function_exists('mb_convert_encoding'))
+ {
+ return mb_convert_encoding($str, 'UTF-8', 'UTF-8');
+ }
+ elseif (preg_match_all('/([\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})/', $str, $matches))
+ {
+ return implode("\xEF\xBF\xBD", $matches[0]);
+ }
+ elseif ($str !== '')
+ {
+ return "\xEF\xBF\xBD";
+ }
+ else
+ {
+ return '';
+ }
+ }
+
+ function change_encoding($data, $input, $output)
+ {
+ $input = SimplePie_Misc::encoding($input);
+ $output = SimplePie_Misc::encoding($output);
+
+ if (function_exists('iconv') && ($return = @iconv($input, "$output//IGNORE", $data)))
+ {
+ return $return;
+ }
+ elseif (function_exists('iconv') && ($return = @iconv($input, $output, $data)))
+ {
+ return $return;
+ }
+ elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($data, $output, $input)))
+ {
+ return $return;
+ }
+ elseif ($input == 'ISO-8859-1' && $output == 'UTF-8')
+ {
+ return utf8_encode($data);
+ }
+ elseif ($input == 'UTF-8' && $output == 'ISO-8859-1')
+ {
+ return utf8_decode($data);
+ }
+ return $data;
+ }
+
+ function encoding($encoding)
+ {
+ // Character sets are case-insensitive (though we'll return them in the form given in their registration)
+ switch (strtoupper($encoding))
+ {
+ case 'ANSI_X3.4-1968':
+ case 'ISO-IR-6':
+ case 'ANSI_X3.4-1986':
+ case 'ISO_646.IRV:1991':
+ case 'ASCII':
+ case 'ISO646-US':
+ case 'US-ASCII':
+ case 'US':
+ case 'IBM367':
+ case 'CP367':
+ case 'CSASCII':
+ return 'US-ASCII';
+
+ case 'ISO_8859-1:1987':
+ case 'ISO-IR-100':
+ case 'ISO_8859-1':
+ case 'ISO-8859-1':
+ case 'LATIN1':
+ case 'L1':
+ case 'IBM819':
+ case 'CP819':
+ case 'CSISOLATIN1':
+ return 'ISO-8859-1';
+
+ case 'ISO_8859-2:1987':
+ case 'ISO-IR-101':
+ case 'ISO_8859-2':
+ case 'ISO-8859-2':
+ case 'LATIN2':
+ case 'L2':
+ case 'CSISOLATIN2':
+ return 'ISO-8859-2';
+
+ case 'ISO_8859-3:1988':
+ case 'ISO-IR-109':
+ case 'ISO_8859-3':
+ case 'ISO-8859-3':
+ case 'LATIN3':
+ case 'L3':
+ case 'CSISOLATIN3':
+ return 'ISO-8859-3';
+
+ case 'ISO_8859-4:1988':
+ case 'ISO-IR-110':
+ case 'ISO_8859-4':
+ case 'ISO-8859-4':
+ case 'LATIN4':
+ case 'L4':
+ case 'CSISOLATIN4':
+ return 'ISO-8859-4';
+
+ case 'ISO_8859-5:1988':
+ case 'ISO-IR-144':
+ case 'ISO_8859-5':
+ case 'ISO-8859-5':
+ case 'CYRILLIC':
+ case 'CSISOLATINCYRILLIC':
+ return 'ISO-8859-5';
+
+ case 'ISO_8859-6:1987':
+ case 'ISO-IR-127':
+ case 'ISO_8859-6':
+ case 'ISO-8859-6':
+ case 'ECMA-114':
+ case 'ASMO-708':
+ case 'ARABIC':
+ case 'CSISOLATINARABIC':
+ return 'ISO-8859-6';
+
+ case 'ISO_8859-7:1987':
+ case 'ISO-IR-126':
+ case 'ISO_8859-7':
+ case 'ISO-8859-7':
+ case 'ELOT_928':
+ case 'ECMA-118':
+ case 'GREEK':
+ case 'GREEK8':
+ case 'CSISOLATINGREEK':
+ return 'ISO-8859-7';
+
+ case 'ISO_8859-8:1988':
+ case 'ISO-IR-138':
+ case 'ISO_8859-8':
+ case 'ISO-8859-8':
+ case 'HEBREW':
+ case 'CSISOLATINHEBREW':
+ return 'ISO-8859-8';
+
+ case 'ISO_8859-9:1989':
+ case 'ISO-IR-148':
+ case 'ISO_8859-9':
+ case 'ISO-8859-9':
+ case 'LATIN5':
+ case 'L5':
+ case 'CSISOLATIN5':
+ return 'ISO-8859-9';
+
+ case 'ISO-8859-10':
+ case 'ISO-IR-157':
+ case 'L6':
+ case 'ISO_8859-10:1992':
+ case 'CSISOLATIN6':
+ case 'LATIN6':
+ return 'ISO-8859-10';
+
+ case 'ISO_6937-2-ADD':
+ case 'ISO-IR-142':
+ case 'CSISOTEXTCOMM':
+ return 'ISO_6937-2-add';
+
+ case 'JIS_X0201':
+ case 'X0201':
+ case 'CSHALFWIDTHKATAKANA':
+ return 'JIS_X0201';
+
+ case 'JIS_ENCODING':
+ case 'CSJISENCODING':
+ return 'JIS_Encoding';
+
+ case 'SHIFT_JIS':
+ case 'MS_KANJI':
+ case 'CSSHIFTJIS':
+ return 'Shift_JIS';
+
+ case 'EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE':
+ case 'CSEUCPKDFMTJAPANESE':
+ case 'EUC-JP':
+ return 'EUC-JP';
+
+ case 'EXTENDED_UNIX_CODE_FIXED_WIDTH_FOR_JAPANESE':
+ case 'CSEUCFIXWIDJAPANESE':
+ return 'Extended_UNIX_Code_Fixed_Width_for_Japanese';
+
+ case 'BS_4730':
+ case 'ISO-IR-4':
+ case 'ISO646-GB':
+ case 'GB':
+ case 'UK':
+ case 'CSISO4UNITEDKINGDOM':
+ return 'BS_4730';
+
+ case 'SEN_850200_C':
+ case 'ISO-IR-11':
+ case 'ISO646-SE2':
+ case 'SE2':
+ case 'CSISO11SWEDISHFORNAMES':
+ return 'SEN_850200_C';
+
+ case 'IT':
+ case 'ISO-IR-15':
+ case 'ISO646-IT':
+ case 'CSISO15ITALIAN':
+ return 'IT';
+
+ case 'ES':
+ case 'ISO-IR-17':
+ case 'ISO646-ES':
+ case 'CSISO17SPANISH':
+ return 'ES';
+
+ case 'DIN_66003':
+ case 'ISO-IR-21':
+ case 'DE':
+ case 'ISO646-DE':
+ case 'CSISO21GERMAN':
+ return 'DIN_66003';
+
+ case 'NS_4551-1':
+ case 'ISO-IR-60':
+ case 'ISO646-NO':
+ case 'NO':
+ case 'CSISO60DANISHNORWEGIAN':
+ case 'CSISO60NORWEGIAN1':
+ return 'NS_4551-1';
+
+ case 'NF_Z_62-010':
+ case 'ISO-IR-69':
+ case 'ISO646-FR':
+ case 'FR':
+ case 'CSISO69FRENCH':
+ return 'NF_Z_62-010';
+
+ case 'ISO-10646-UTF-1':
+ case 'CSISO10646UTF1':
+ return 'ISO-10646-UTF-1';
+
+ case 'ISO_646.BASIC:1983':
+ case 'REF':
+ case 'CSISO646BASIC1983':
+ return 'ISO_646.basic:1983';
+
+ case 'INVARIANT':
+ case 'CSINVARIANT':
+ return 'INVARIANT';
+
+ case 'ISO_646.IRV:1983':
+ case 'ISO-IR-2':
+ case 'IRV':
+ case 'CSISO2INTLREFVERSION':
+ return 'ISO_646.irv:1983';
+
+ case 'NATS-SEFI':
+ case 'ISO-IR-8-1':
+ case 'CSNATSSEFI':
+ return 'NATS-SEFI';
+
+ case 'NATS-SEFI-ADD':
+ case 'ISO-IR-8-2':
+ case 'CSNATSSEFIADD':
+ return 'NATS-SEFI-ADD';
+
+ case 'NATS-DANO':
+ case 'ISO-IR-9-1':
+ case 'CSNATSDANO':
+ return 'NATS-DANO';
+
+ case 'NATS-DANO-ADD':
+ case 'ISO-IR-9-2':
+ case 'CSNATSDANOADD':
+ return 'NATS-DANO-ADD';
+
+ case 'SEN_850200_B':
+ case 'ISO-IR-10':
+ case 'FI':
+ case 'ISO646-FI':
+ case 'ISO646-SE':
+ case 'SE':
+ case 'CSISO10SWEDISH':
+ return 'SEN_850200_B';
+
+ case 'KS_C_5601-1987':
+ case 'ISO-IR-149':
+ case 'KS_C_5601-1989':
+ case 'KSC_5601':
+ case 'KOREAN':
+ case 'CSKSC56011987':
+ return 'KS_C_5601-1987';
+
+ case 'ISO-2022-KR':
+ case 'CSISO2022KR':
+ return 'ISO-2022-KR';
+
+ case 'EUC-KR':
+ case 'CSEUCKR':
+ return 'EUC-KR';
+
+ case 'ISO-2022-JP':
+ case 'CSISO2022JP':
+ return 'ISO-2022-JP';
+
+ case 'ISO-2022-JP-2':
+ case 'CSISO2022JP2':
+ return 'ISO-2022-JP-2';
+
+ case 'JIS_C6220-1969-JP':
+ case 'JIS_C6220-1969':
+ case 'ISO-IR-13':
+ case 'KATAKANA':
+ case 'X0201-7':
+ case 'CSISO13JISC6220JP':
+ return 'JIS_C6220-1969-jp';
+
+ case 'JIS_C6220-1969-RO':
+ case 'ISO-IR-14':
+ case 'JP':
+ case 'ISO646-JP':
+ case 'CSISO14JISC6220RO':
+ return 'JIS_C6220-1969-ro';
+
+ case 'PT':
+ case 'ISO-IR-16':
+ case 'ISO646-PT':
+ case 'CSISO16PORTUGUESE':
+ return 'PT';
+
+ case 'GREEK7-OLD':
+ case 'ISO-IR-18':
+ case 'CSISO18GREEK7OLD':
+ return 'greek7-old';
+
+ case 'LATIN-GREEK':
+ case 'ISO-IR-19':
+ case 'CSISO19LATINGREEK':
+ return 'latin-greek';
+
+ case 'NF_Z_62-010_(1973)':
+ case 'ISO-IR-25':
+ case 'ISO646-FR1':
+ case 'CSISO25FRENCH':
+ return 'NF_Z_62-010_(1973)';
+
+ case 'LATIN-GREEK-1':
+ case 'ISO-IR-27':
+ case 'CSISO27LATINGREEK1':
+ return 'Latin-greek-1';
+
+ case 'ISO_5427':
+ case 'ISO-IR-37':
+ case 'CSISO5427CYRILLIC':
+ return 'ISO_5427';
+
+ case 'JIS_C6226-1978':
+ case 'ISO-IR-42':
+ case 'CSISO42JISC62261978':
+ return 'JIS_C6226-1978';
+
+ case 'BS_VIEWDATA':
+ case 'ISO-IR-47':
+ case 'CSISO47BSVIEWDATA':
+ return 'BS_viewdata';
+
+ case 'INIS':
+ case 'ISO-IR-49':
+ case 'CSISO49INIS':
+ return 'INIS';
+
+ case 'INIS-8':
+ case 'ISO-IR-50':
+ case 'CSISO50INIS8':
+ return 'INIS-8';
+
+ case 'INIS-CYRILLIC':
+ case 'ISO-IR-51':
+ case 'CSISO51INISCYRILLIC':
+ return 'INIS-cyrillic';
+
+ case 'ISO_5427:1981':
+ case 'ISO-IR-54':
+ case 'ISO5427CYRILLIC1981':
+ return 'ISO_5427:1981';
+
+ case 'ISO_5428:1980':
+ case 'ISO-IR-55':
+ case 'CSISO5428GREEK':
+ return 'ISO_5428:1980';
+
+ case 'GB_1988-80':
+ case 'ISO-IR-57':
+ case 'CN':
+ case 'ISO646-CN':
+ case 'CSISO57GB1988':
+ return 'GB_1988-80';
+
+ case 'GB_2312-80':
+ case 'ISO-IR-58':
+ case 'CHINESE':
+ case 'CSISO58GB231280':
+ return 'GB_2312-80';
+
+ case 'NS_4551-2':
+ case 'ISO646-NO2':
+ case 'ISO-IR-61':
+ case 'NO2':
+ case 'CSISO61NORWEGIAN2':
+ return 'NS_4551-2';
+
+ case 'VIDEOTEX-SUPPL':
+ case 'ISO-IR-70':
+ case 'CSISO70VIDEOTEXSUPP1':
+ return 'videotex-suppl';
+
+ case 'PT2':
+ case 'ISO-IR-84':
+ case 'ISO646-PT2':
+ case 'CSISO84PORTUGUESE2':
+ return 'PT2';
+
+ case 'ES2':
+ case 'ISO-IR-85':
+ case 'ISO646-ES2':
+ case 'CSISO85SPANISH2':
+ return 'ES2';
+
+ case 'MSZ_7795.3':
+ case 'ISO-IR-86':
+ case 'ISO646-HU':
+ case 'HU':
+ case 'CSISO86HUNGARIAN':
+ return 'MSZ_7795.3';
+
+ case 'JIS_C6226-1983':
+ case 'ISO-IR-87':
+ case 'X0208':
+ case 'JIS_X0208-1983':
+ case 'CSISO87JISX0208':
+ return 'JIS_C6226-1983';
+
+ case 'GREEK7':
+ case 'ISO-IR-88':
+ case 'CSISO88GREEK7':
+ return 'greek7';
+
+ case 'ASMO_449':
+ case 'ISO_9036':
+ case 'ARABIC7':
+ case 'ISO-IR-89':
+ case 'CSISO89ASMO449':
+ return 'ASMO_449';
+
+ case 'ISO-IR-90':
+ case 'CSISO90':
+ return 'iso-ir-90';
+
+ case 'JIS_C6229-1984-A':
+ case 'ISO-IR-91':
+ case 'JP-OCR-A':
+ case 'CSISO91JISC62291984A':
+ return 'JIS_C6229-1984-a';
+
+ case 'JIS_C6229-1984-B':
+ case 'ISO-IR-92':
+ case 'ISO646-JP-OCR-B':
+ case 'JP-OCR-B':
+ case 'CSISO92JISC62991984B':
+ return 'JIS_C6229-1984-b';
+
+ case 'JIS_C6229-1984-B-ADD':
+ case 'ISO-IR-93':
+ case 'JP-OCR-B-ADD':
+ case 'CSISO93JIS62291984BADD':
+ return 'JIS_C6229-1984-b-add';
+
+ case 'JIS_C6229-1984-HAND':
+ case 'ISO-IR-94':
+ case 'JP-OCR-HAND':
+ case 'CSISO94JIS62291984HAND':
+ return 'JIS_C6229-1984-hand';
+
+ case 'JIS_C6229-1984-HAND-ADD':
+ case 'ISO-IR-95':
+ case 'JP-OCR-HAND-ADD':
+ case 'CSISO95JIS62291984HANDADD':
+ return 'JIS_C6229-1984-hand-add';
+
+ case 'JIS_C6229-1984-KANA':
+ case 'ISO-IR-96':
+ case 'CSISO96JISC62291984KANA':
+ return 'JIS_C6229-1984-kana';
+
+ case 'ISO_2033-1983':
+ case 'ISO-IR-98':
+ case 'E13B':
+ case 'CSISO2033':
+ return 'ISO_2033-1983';
+
+ case 'ANSI_X3.110-1983':
+ case 'ISO-IR-99':
+ case 'CSA_T500-1983':
+ case 'NAPLPS':
+ case 'CSISO99NAPLPS':
+ return 'ANSI_X3.110-1983';
+
+ case 'T.61-7BIT':
+ case 'ISO-IR-102':
+ case 'CSISO102T617BIT':
+ return 'T.61-7bit';
+
+ case 'T.61-8BIT':
+ case 'T.61':
+ case 'ISO-IR-103':
+ case 'CSISO103T618BIT':
+ return 'T.61-8bit';
+
+ case 'ECMA-CYRILLIC':
+ case 'ISO-IR-111':
+ case 'KOI8-E':
+ case 'CSISO111ECMACYRILLIC':
+ return 'ECMA-cyrillic';
+
+ case 'CSA_Z243.4-1985-1':
+ case 'ISO-IR-121':
+ case 'ISO646-CA':
+ case 'CSA7-1':
+ case 'CA':
+ case 'CSISO121CANADIAN1':
+ return 'CSA_Z243.4-1985-1';
+
+ case 'CSA_Z243.4-1985-2':
+ case 'ISO-IR-122':
+ case 'ISO646-CA2':
+ case 'CSA7-2':
+ case 'CSISO122CANADIAN2':
+ return 'CSA_Z243.4-1985-2';
+
+ case 'CSA_Z243.4-1985-GR':
+ case 'ISO-IR-123':
+ case 'CSISO123CSAZ24341985GR':
+ return 'CSA_Z243.4-1985-gr';
+
+ case 'ISO_8859-6-E':
+ case 'CSISO88596E':
+ case 'ISO-8859-6-E':
+ return 'ISO-8859-6-E';
+
+ case 'ISO_8859-6-I':
+ case 'CSISO88596I':
+ case 'ISO-8859-6-I':
+ return 'ISO-8859-6-I';
+
+ case 'T.101-G2':
+ case 'ISO-IR-128':
+ case 'CSISO128T101G2':
+ return 'T.101-G2';
+
+ case 'ISO_8859-8-E':
+ case 'CSISO88598E':
+ case 'ISO-8859-8-E':
+ return 'ISO-8859-8-E';
+
+ case 'ISO_8859-8-I':
+ case 'CSISO88598I':
+ case 'ISO-8859-8-I':
+ return 'ISO-8859-8-I';
+
+ case 'CSN_369103':
+ case 'ISO-IR-139':
+ case 'CSISO139CSN369103':
+ return 'CSN_369103';
+
+ case 'JUS_I.B1.002':
+ case 'ISO-IR-141':
+ case 'ISO646-YU':
+ case 'JS':
+ case 'YU':
+ case 'CSISO141JUSIB1002':
+ return 'JUS_I.B1.002';
+
+ case 'IEC_P27-1':
+ case 'ISO-IR-143':
+ case 'CSISO143IECP271':
+ return 'IEC_P27-1';
+
+ case 'JUS_I.B1.003-SERB':
+ case 'ISO-IR-146':
+ case 'SERBIAN':
+ case 'CSISO146SERBIAN':
+ return 'JUS_I.B1.003-serb';
+
+ case 'JUS_I.B1.003-MAC':
+ case 'MACEDONIAN':
+ case 'ISO-IR-147':
+ case 'CSISO147MACEDONIAN':
+ return 'JUS_I.B1.003-mac';
+
+ case 'GREEK-CCITT':
+ case 'ISO-IR-150':
+ case 'CSISO150':
+ case 'CSISO150GREEKCCITT':
+ return 'greek-ccitt';
+
+ case 'NC_NC00-10:81':
+ case 'CUBA':
+ case 'ISO-IR-151':
+ case 'ISO646-CU':
+ case 'CSISO151CUBA':
+ return 'NC_NC00-10:81';
+
+ case 'ISO_6937-2-25':
+ case 'ISO-IR-152':
+ case 'CSISO6937ADD':
+ return 'ISO_6937-2-25';
+
+ case 'GOST_19768-74':
+ case 'ST_SEV_358-88':
+ case 'ISO-IR-153':
+ case 'CSISO153GOST1976874':
+ return 'GOST_19768-74';
+
+ case 'ISO_8859-SUPP':
+ case 'ISO-IR-154':
+ case 'LATIN1-2-5':
+ case 'CSISO8859SUPP':
+ return 'ISO_8859-supp';
+
+ case 'ISO_10367-BOX':
+ case 'ISO-IR-155':
+ case 'CSISO10367BOX':
+ return 'ISO_10367-box';
+
+ case 'LATIN-LAP':
+ case 'LAP':
+ case 'ISO-IR-158':
+ case 'CSISO158LAP':
+ return 'latin-lap';
+
+ case 'JIS_X0212-1990':
+ case 'X0212':
+ case 'ISO-IR-159':
+ case 'CSISO159JISX02121990':
+ return 'JIS_X0212-1990';
+
+ case 'DS_2089':
+ case 'DS2089':
+ case 'ISO646-DK':
+ case 'DK':
+ case 'CSISO646DANISH':
+ return 'DS_2089';
+
+ case 'US-DK':
+ case 'CSUSDK':
+ return 'us-dk';
+
+ case 'DK-US':
+ case 'CSDKUS':
+ return 'dk-us';
+
+ case 'KSC5636':
+ case 'ISO646-KR':
+ case 'CSKSC5636':
+ return 'KSC5636';
+
+ case 'UNICODE-1-1-UTF-7':
+ case 'CSUNICODE11UTF7':
+ return 'UNICODE-1-1-UTF-7';
+
+ case 'ISO-2022-CN':
+ return 'ISO-2022-CN';
+
+ case 'ISO-2022-CN-EXT':
+ return 'ISO-2022-CN-EXT';
+
+ case 'UTF-8':
+ return 'UTF-8';
+
+ case 'ISO-8859-13':
+ return 'ISO-8859-13';
+
+ case 'ISO-8859-14':
+ case 'ISO-IR-199':
+ case 'ISO_8859-14:1998':
+ case 'ISO_8859-14':
+ case 'LATIN8':
+ case 'ISO-CELTIC':
+ case 'L8':
+ return 'ISO-8859-14';
+
+ case 'ISO-8859-15':
+ case 'ISO_8859-15':
+ case 'LATIN-9':
+ return 'ISO-8859-15';
+
+ case 'ISO-8859-16':
+ case 'ISO-IR-226':
+ case 'ISO_8859-16:2001':
+ case 'ISO_8859-16':
+ case 'LATIN10':
+ case 'L10':
+ return 'ISO-8859-16';
+
+ case 'GBK':
+ case 'CP936':
+ case 'MS936':
+ case 'WINDOWS-936':
+ return 'GBK';
+
+ case 'GB18030':
+ return 'GB18030';
+
+ case 'OSD_EBCDIC_DF04_15':
+ return 'OSD_EBCDIC_DF04_15';
+
+ case 'OSD_EBCDIC_DF03_IRV':
+ return 'OSD_EBCDIC_DF03_IRV';
+
+ case 'OSD_EBCDIC_DF04_1':
+ return 'OSD_EBCDIC_DF04_1';
+
+ case 'ISO-11548-1':
+ case 'ISO_11548-1':
+ case 'ISO_TR_11548-1':
+ case 'CSISO115481':
+ return 'ISO-11548-1';
+
+ case 'KZ-1048':
+ case 'STRK1048-2002':
+ case 'RK1048':
+ case 'CSKZ1048':
+ return 'KZ-1048';
+
+ case 'ISO-10646-UCS-2':
+ case 'CSUNICODE':
+ return 'ISO-10646-UCS-2';
+
+ case 'ISO-10646-UCS-4':
+ case 'CSUCS4':
+ return 'ISO-10646-UCS-4';
+
+ case 'ISO-10646-UCS-BASIC':
+ case 'CSUNICODEASCII':
+ return 'ISO-10646-UCS-Basic';
+
+ case 'ISO-10646-UNICODE-LATIN1':
+ case 'CSUNICODELATIN1':
+ case 'ISO-10646':
+ return 'ISO-10646-Unicode-Latin1';
+
+ case 'ISO-10646-J-1':
+ return 'ISO-10646-J-1';
+
+ case 'ISO-UNICODE-IBM-1261':
+ case 'CSUNICODEIBM1261':
+ return 'ISO-Unicode-IBM-1261';
+
+ case 'ISO-UNICODE-IBM-1268':
+ case 'CSUNICODEIBM1268':
+ return 'ISO-Unicode-IBM-1268';
+
+ case 'ISO-UNICODE-IBM-1276':
+ case 'CSUNICODEIBM1276':
+ return 'ISO-Unicode-IBM-1276';
+
+ case 'ISO-UNICODE-IBM-1264':
+ case 'CSUNICODEIBM1264':
+ return 'ISO-Unicode-IBM-1264';
+
+ case 'ISO-UNICODE-IBM-1265':
+ case 'CSUNICODEIBM1265':
+ return 'ISO-Unicode-IBM-1265';
+
+ case 'UNICODE-1-1':
+ case 'CSUNICODE11':
+ return 'UNICODE-1-1';
+
+ case 'SCSU':
+ return 'SCSU';
+
+ case 'UTF-7':
+ return 'UTF-7';
+
+ case 'UTF-16BE':
+ return 'UTF-16BE';
+
+ case 'UTF-16LE':
+ return 'UTF-16LE';
+
+ case 'UTF-16':
+ return 'UTF-16';
+
+ case 'CESU-8':
+ case 'CSCESU-8':
+ return 'CESU-8';
+
+ case 'UTF-32':
+ return 'UTF-32';
+
+ case 'UTF-32BE':
+ return 'UTF-32BE';
+
+ case 'UTF-32LE':
+ return 'UTF-32LE';
+
+ case 'BOCU-1':
+ case 'CSBOCU-1':
+ return 'BOCU-1';
+
+ case 'ISO-8859-1-WINDOWS-3.0-LATIN-1':
+ case 'CSWINDOWS30LATIN1':
+ return 'ISO-8859-1-Windows-3.0-Latin-1';
+
+ case 'ISO-8859-1-WINDOWS-3.1-LATIN-1':
+ case 'CSWINDOWS31LATIN1':
+ return 'ISO-8859-1-Windows-3.1-Latin-1';
+
+ case 'ISO-8859-2-WINDOWS-LATIN-2':
+ case 'CSWINDOWS31LATIN2':
+ return 'ISO-8859-2-Windows-Latin-2';
+
+ case 'ISO-8859-9-WINDOWS-LATIN-5':
+ case 'CSWINDOWS31LATIN5':
+ return 'ISO-8859-9-Windows-Latin-5';
+
+ case 'HP-ROMAN8':
+ case 'ROMAN8':
+ case 'R8':
+ case 'CSHPROMAN8':
+ return 'hp-roman8';
+
+ case 'ADOBE-STANDARD-ENCODING':
+ case 'CSADOBESTANDARDENCODING':
+ return 'Adobe-Standard-Encoding';
+
+ case 'VENTURA-US':
+ case 'CSVENTURAUS':
+ return 'Ventura-US';
+
+ case 'VENTURA-INTERNATIONAL':
+ case 'CSVENTURAINTERNATIONAL':
+ return 'Ventura-International';
+
+ case 'DEC-MCS':
+ case 'DEC':
+ case 'CSDECMCS':
+ return 'DEC-MCS';
+
+ case 'IBM850':
+ case 'CP850':
+ case '850':
+ case 'CSPC850MULTILINGUAL':
+ return 'IBM850';
+
+ case 'PC8-DANISH-NORWEGIAN':
+ case 'CSPC8DANISHNORWEGIAN':
+ return 'PC8-Danish-Norwegian';
+
+ case 'IBM862':
+ case 'CP862':
+ case '862':
+ case 'CSPC862LATINHEBREW':
+ return 'IBM862';
+
+ case 'PC8-TURKISH':
+ case 'CSPC8TURKISH':
+ return 'PC8-Turkish';
+
+ case 'IBM-SYMBOLS':
+ case 'CSIBMSYMBOLS':
+ return 'IBM-Symbols';
+
+ case 'IBM-THAI':
+ case 'CSIBMTHAI':
+ return 'IBM-Thai';
+
+ case 'HP-LEGAL':
+ case 'CSHPLEGAL':
+ return 'HP-Legal';
+
+ case 'HP-PI-FONT':
+ case 'CSHPPIFONT':
+ return 'HP-Pi-font';
+
+ case 'HP-MATH8':
+ case 'CSHPMATH8':
+ return 'HP-Math8';
+
+ case 'ADOBE-SYMBOL-ENCODING':
+ case 'CSHPPSMATH':
+ return 'Adobe-Symbol-Encoding';
+
+ case 'HP-DESKTOP':
+ case 'CSHPDESKTOP':
+ return 'HP-DeskTop';
+
+ case 'VENTURA-MATH':
+ case 'CSVENTURAMATH':
+ return 'Ventura-Math';
+
+ case 'MICROSOFT-PUBLISHING':
+ case 'CSMICROSOFTPUBLISHING':
+ return 'Microsoft-Publishing';
+
+ case 'WINDOWS-31J':
+ case 'CSWINDOWS31J':
+ return 'Windows-31J';
+
+ case 'GB2312':
+ case 'CSGB2312':
+ return 'GB2312';
+
+ case 'BIG5':
+ case 'CSBIG5':
+ return 'Big5';
+
+ case 'MACINTOSH':
+ case 'MAC':
+ case 'CSMACINTOSH':
+ return 'macintosh';
+
+ case 'IBM037':
+ case 'CP037':
+ case 'EBCDIC-CP-US':
+ case 'EBCDIC-CP-CA':
+ case 'EBCDIC-CP-WT':
+ case 'EBCDIC-CP-NL':
+ case 'CSIBM037':
+ return 'IBM037';
+
+ case 'IBM038':
+ case 'EBCDIC-INT':
+ case 'CP038':
+ case 'CSIBM038':
+ return 'IBM038';
+
+ case 'IBM273':
+ case 'CP273':
+ case 'CSIBM273':
+ return 'IBM273';
+
+ case 'IBM274':
+ case 'EBCDIC-BE':
+ case 'CP274':
+ case 'CSIBM274':
+ return 'IBM274';
+
+ case 'IBM275':
+ case 'EBCDIC-BR':
+ case 'CP275':
+ case 'CSIBM275':
+ return 'IBM275';
+
+ case 'IBM277':
+ case 'EBCDIC-CP-DK':
+ case 'EBCDIC-CP-NO':
+ case 'CSIBM277':
+ return 'IBM277';
+
+ case 'IBM278':
+ case 'CP278':
+ case 'EBCDIC-CP-FI':
+ case 'EBCDIC-CP-SE':
+ case 'CSIBM278':
+ return 'IBM278';
+
+ case 'IBM280':
+ case 'CP280':
+ case 'EBCDIC-CP-IT':
+ case 'CSIBM280':
+ return 'IBM280';
+
+ case 'IBM281':
+ case 'EBCDIC-JP-E':
+ case 'CP281':
+ case 'CSIBM281':
+ return 'IBM281';
+
+ case 'IBM284':
+ case 'CP284':
+ case 'EBCDIC-CP-ES':
+ case 'CSIBM284':
+ return 'IBM284';
+
+ case 'IBM285':
+ case 'CP285':
+ case 'EBCDIC-CP-GB':
+ case 'CSIBM285':
+ return 'IBM285';
+
+ case 'IBM290':
+ case 'CP290':
+ case 'EBCDIC-JP-KANA':
+ case 'CSIBM290':
+ return 'IBM290';
+
+ case 'IBM297':
+ case 'CP297':
+ case 'EBCDIC-CP-FR':
+ case 'CSIBM297':
+ return 'IBM297';
+
+ case 'IBM420':
+ case 'CP420':
+ case 'EBCDIC-CP-AR1':
+ case 'CSIBM420':
+ return 'IBM420';
+
+ case 'IBM423':
+ case 'CP423':
+ case 'EBCDIC-CP-GR':
+ case 'CSIBM423':
+ return 'IBM423';
+
+ case 'IBM424':
+ case 'CP424':
+ case 'EBCDIC-CP-HE':
+ case 'CSIBM424':
+ return 'IBM424';
+
+ case 'IBM437':
+ case 'CP437':
+ case '437':
+ case 'CSPC8CODEPAGE437':
+ return 'IBM437';
+
+ case 'IBM500':
+ case 'CP500':
+ case 'EBCDIC-CP-BE':
+ case 'EBCDIC-CP-CH':
+ case 'CSIBM500':
+ return 'IBM500';
+
+ case 'IBM851':
+ case 'CP851':
+ case '851':
+ case 'CSIBM851':
+ return 'IBM851';
+
+ case 'IBM852':
+ case 'CP852':
+ case '852':
+ case 'CSPCP852':
+ return 'IBM852';
+
+ case 'IBM855':
+ case 'CP855':
+ case '855':
+ case 'CSIBM855':
+ return 'IBM855';
+
+ case 'IBM857':
+ case 'CP857':
+ case '857':
+ case 'CSIBM857':
+ return 'IBM857';
+
+ case 'IBM860':
+ case 'CP860':
+ case '860':
+ case 'CSIBM860':
+ return 'IBM860';
+
+ case 'IBM861':
+ case 'CP861':
+ case '861':
+ case 'CP-IS':
+ case 'CSIBM861':
+ return 'IBM861';
+
+ case 'IBM863':
+ case 'CP863':
+ case '863':
+ case 'CSIBM863':
+ return 'IBM863';
+
+ case 'IBM864':
+ case 'CP864':
+ case 'CSIBM864':
+ return 'IBM864';
+
+ case 'IBM865':
+ case 'CP865':
+ case '865':
+ case 'CSIBM865':
+ return 'IBM865';
+
+ case 'IBM868':
+ case 'CP868':
+ case 'CP-AR':
+ case 'CSIBM868':
+ return 'IBM868';
+
+ case 'IBM869':
+ case 'CP869':
+ case '869':
+ case 'CP-GR':
+ case 'CSIBM869':
+ return 'IBM869';
+
+ case 'IBM870':
+ case 'CP870':
+ case 'EBCDIC-CP-ROECE':
+ case 'EBCDIC-CP-YU':
+ case 'CSIBM870':
+ return 'IBM870';
+
+ case 'IBM871':
+ case 'CP871':
+ case 'EBCDIC-CP-IS':
+ case 'CSIBM871':
+ return 'IBM871';
+
+ case 'IBM880':
+ case 'CP880':
+ case 'EBCDIC-CYRILLIC':
+ case 'CSIBM880':
+ return 'IBM880';
+
+ case 'IBM891':
+ case 'CP891':
+ case 'CSIBM891':
+ return 'IBM891';
+
+ case 'IBM903':
+ case 'CP903':
+ case 'CSIBM903':
+ return 'IBM903';
+
+ case 'IBM904':
+ case 'CP904':
+ case '904':
+ case 'CSIBBM904':
+ return 'IBM904';
+
+ case 'IBM905':
+ case 'CP905':
+ case 'EBCDIC-CP-TR':
+ case 'CSIBM905':
+ return 'IBM905';
+
+ case 'IBM918':
+ case 'CP918':
+ case 'EBCDIC-CP-AR2':
+ case 'CSIBM918':
+ return 'IBM918';
+
+ case 'IBM1026':
+ case 'CP1026':
+ case 'CSIBM1026':
+ return 'IBM1026';
+
+ case 'EBCDIC-AT-DE':
+ case 'CSIBMEBCDICATDE':
+ return 'EBCDIC-AT-DE';
+
+ case 'EBCDIC-AT-DE-A':
+ case 'CSEBCDICATDEA':
+ return 'EBCDIC-AT-DE-A';
+
+ case 'EBCDIC-CA-FR':
+ case 'CSEBCDICCAFR':
+ return 'EBCDIC-CA-FR';
+
+ case 'EBCDIC-DK-NO':
+ case 'CSEBCDICDKNO':
+ return 'EBCDIC-DK-NO';
+
+ case 'EBCDIC-DK-NO-A':
+ case 'CSEBCDICDKNOA':
+ return 'EBCDIC-DK-NO-A';
+
+ case 'EBCDIC-FI-SE':
+ case 'CSEBCDICFISE':
+ return 'EBCDIC-FI-SE';
+
+ case 'EBCDIC-FI-SE-A':
+ case 'CSEBCDICFISEA':
+ return 'EBCDIC-FI-SE-A';
+
+ case 'EBCDIC-FR':
+ case 'CSEBCDICFR':
+ return 'EBCDIC-FR';
+
+ case 'EBCDIC-IT':
+ case 'CSEBCDICIT':
+ return 'EBCDIC-IT';
+
+ case 'EBCDIC-PT':
+ case 'CSEBCDICPT':
+ return 'EBCDIC-PT';
+
+ case 'EBCDIC-ES':
+ case 'CSEBCDICES':
+ return 'EBCDIC-ES';
+
+ case 'EBCDIC-ES-A':
+ case 'CSEBCDICESA':
+ return 'EBCDIC-ES-A';
+
+ case 'EBCDIC-ES-S':
+ case 'CSEBCDICESS':
+ return 'EBCDIC-ES-S';
+
+ case 'EBCDIC-UK':
+ case 'CSEBCDICUK':
+ return 'EBCDIC-UK';
+
+ case 'EBCDIC-US':
+ case 'CSEBCDICUS':
+ return 'EBCDIC-US';
+
+ case 'UNKNOWN-8BIT':
+ case 'CSUNKNOWN8BIT':
+ return 'UNKNOWN-8BIT';
+
+ case 'MNEMONIC':
+ case 'CSMNEMONIC':
+ return 'MNEMONIC';
+
+ case 'MNEM':
+ case 'CSMNEM':
+ return 'MNEM';
+
+ case 'VISCII':
+ case 'CSVISCII':
+ return 'VISCII';
+
+ case 'VIQR':
+ case 'CSVIQR':
+ return 'VIQR';
+
+ case 'KOI8-R':
+ case 'CSKOI8R':
+ return 'KOI8-R';
+
+ case 'HZ-GB-2312':
+ return 'HZ-GB-2312';
+
+ case 'IBM866':
+ case 'CP866':
+ case '866':
+ case 'CSIBM866':
+ return 'IBM866';
+
+ case 'IBM775':
+ case 'CP775':
+ case 'CSPC775BALTIC':
+ return 'IBM775';
+
+ case 'KOI8-U':
+ return 'KOI8-U';
+
+ case 'IBM00858':
+ case 'CCSID00858':
+ case 'CP00858':
+ case 'PC-MULTILINGUAL-850+EURO':
+ return 'IBM00858';
+
+ case 'IBM00924':
+ case 'CCSID00924':
+ case 'CP00924':
+ case 'EBCDIC-LATIN9--EURO':
+ return 'IBM00924';
+
+ case 'IBM01140':
+ case 'CCSID01140':
+ case 'CP01140':
+ case 'EBCDIC-US-37+EURO':
+ return 'IBM01140';
+
+ case 'IBM01141':
+ case 'CCSID01141':
+ case 'CP01141':
+ case 'EBCDIC-DE-273+EURO':
+ return 'IBM01141';
+
+ case 'IBM01142':
+ case 'CCSID01142':
+ case 'CP01142':
+ case 'EBCDIC-DK-277+EURO':
+ case 'EBCDIC-NO-277+EURO':
+ return 'IBM01142';
+
+ case 'IBM01143':
+ case 'CCSID01143':
+ case 'CP01143':
+ case 'EBCDIC-FI-278+EURO':
+ case 'EBCDIC-SE-278+EURO':
+ return 'IBM01143';
+
+ case 'IBM01144':
+ case 'CCSID01144':
+ case 'CP01144':
+ case 'EBCDIC-IT-280+EURO':
+ return 'IBM01144';
+
+ case 'IBM01145':
+ case 'CCSID01145':
+ case 'CP01145':
+ case 'EBCDIC-ES-284+EURO':
+ return 'IBM01145';
+
+ case 'IBM01146':
+ case 'CCSID01146':
+ case 'CP01146':
+ case 'EBCDIC-GB-285+EURO':
+ return 'IBM01146';
+
+ case 'IBM01147':
+ case 'CCSID01147':
+ case 'CP01147':
+ case 'EBCDIC-FR-297+EURO':
+ return 'IBM01147';
+
+ case 'IBM01148':
+ case 'CCSID01148':
+ case 'CP01148':
+ case 'EBCDIC-INTERNATIONAL-500+EURO':
+ return 'IBM01148';
+
+ case 'IBM01149':
+ case 'CCSID01149':
+ case 'CP01149':
+ case 'EBCDIC-IS-871+EURO':
+ return 'IBM01149';
+
+ case 'BIG5-HKSCS':
+ return 'Big5-HKSCS';
+
+ case 'IBM1047':
+ case 'IBM-1047':
+ return 'IBM1047';
+
+ case 'PTCP154':
+ case 'CSPTCP154':
+ case 'PT154':
+ case 'CP154':
+ case 'CYRILLIC-ASIAN':
+ return 'PTCP154';
+
+ case 'AMIGA-1251':
+ case 'AMI1251':
+ case 'AMIGA1251':
+ case 'AMI-1251':
+ return 'Amiga-1251';
+
+ case 'KOI7-SWITCHED':
+ return 'KOI7-switched';
+
+ case 'BRF':
+ case 'CSBRF':
+ return 'BRF';
+
+ case 'TSCII':
+ case 'CSTSCII':
+ return 'TSCII';
+
+ case 'WINDOWS-1250':
+ return 'windows-1250';
+
+ case 'WINDOWS-1251':
+ return 'windows-1251';
+
+ case 'WINDOWS-1252':
+ return 'windows-1252';
+
+ case 'WINDOWS-1253':
+ return 'windows-1253';
+
+ case 'WINDOWS-1254':
+ return 'windows-1254';
+
+ case 'WINDOWS-1255':
+ return 'windows-1255';
+
+ case 'WINDOWS-1256':
+ return 'windows-1256';
+
+ case 'WINDOWS-1257':
+ return 'windows-1257';
+
+ case 'WINDOWS-1258':
+ return 'windows-1258';
+
+ default:
+ return (string) $encoding;
+ }
+ }
+
+ function get_curl_version()
+ {
+ if (is_array($curl = curl_version()))
+ {
+ $curl = $curl['version'];
+ }
+ elseif (substr($curl, 0, 5) == 'curl/')
+ {
+ $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5));
+ }
+ elseif (substr($curl, 0, 8) == 'libcurl/')
+ {
+ $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8));
+ }
+ else
+ {
+ $curl = 0;
+ }
+ return $curl;
+ }
+
+ function is_subclass_of($class1, $class2)
+ {
+ if (func_num_args() != 2)
+ {
+ trigger_error('Wrong parameter count for SimplePie_Misc::is_subclass_of()', E_USER_WARNING);
+ }
+ elseif (version_compare(PHP_VERSION, '5.0.3', '>=') || is_object($class1))
+ {
+ return is_subclass_of($class1, $class2);
+ }
+ elseif (is_string($class1) && is_string($class2))
+ {
+ if (class_exists($class1))
+ {
+ if (class_exists($class2))
+ {
+ $class2 = strtolower($class2);
+ while ($class1 = strtolower(get_parent_class($class1)))
+ {
+ if ($class1 == $class2)
+ {
+ return true;
+ }
+ }
+ }
+ }
+ else
+ {
+ trigger_error('Unknown class passed as parameter', E_USER_WARNNG);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Strip HTML comments
+ *
+ * @access public
+ * @param string $data Data to strip comments from
+ * @return string Comment stripped string
+ */
+ function strip_comments($data)
+ {
+ $output = '';
+ while (($start = strpos($data, '<!--')) !== false)
+ {
+ $output .= substr($data, 0, $start);
+ if (($end = strpos($data, '-->', $start)) !== false)
+ {
+ $data = substr_replace($data, '', 0, $end + 3);
+ }
+ else
+ {
+ $data = '';
+ }
+ }
+ return $output . $data;
+ }
+
+ function parse_date($dt, $rfc822_tz = true)
+ {
+ static $cache = array();
+ if (!isset($cache[$dt][$rfc822_tz]))
+ {
+ $dt = SimplePie_Misc::uncomment_rfc822($dt);
+ /*
+ Capturing subpatterns:
+ 1: RFC 822 date
+ 2: RFC 822 day
+ 3: RFC 822 month
+ 4: RFC 822 year
+ 5: ISO 8601 date
+ 6: ISO 8601 century
+ 7: ISO 8601 year
+ 8: ISO 8601 month
+ 9: ISO 8601 day
+ 10: ISO 8601 ordinal day
+ 11: ISO 8601 month
+ 12: ISO 8601 day
+ 13: ISO 8601 week
+ 14: ISO 8601 day of week
+ 15: Time
+ 16: Hour
+ 17: Hour Decimal
+ 18: Minute
+ 19: Minute Decimal
+ 20: Second
+ 21: Second Decimal
+ 22: Timezone
+ 23: Diff ±
+ 24: Hour
+ 25: Hour Decimal
+ 26: Minute
+ 27: Minute Decimal
+ 28: Alphabetic Timezone
+ */
+ if (preg_match('/^(?:(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun)[,\s]+)?(([0-9]{1,2})\s*(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s*([0-9]{4}|[0-9]{2}))|(([0-9]{2})(?:([0-9]{2})(?:(?:-|\s)*(?:([0-9]{2})([0-9]{2})|([0-9]{3})|([0-9]{2})(?:(?:-|\s)*([0-9]{2}))?|W([0-9]{2})(?:(?:-|\s)*([0-9]))?))?)?))((?:T|\s)+([0-9]{2})(?:(?:,|\.)([0-9]*)|(?:\:|\s)*([0-9]{2})(?:(?:,|\.)([0-9]*)|(?:\:|\s)*([0-9]{2})(?:(?:,|\.)([0-9]*))?)?)?(?:\s)*((?:(\+|-)([0-9]{2})(?:(?:,|\.)([0-9]*)|(?:\:|\s)*(?:([0-9]{2})(?:(?:,|\.)([0-9]*))?))?)|(UTC|GMT|EST|CST|MST|PST|EDT|CDT|MDT|PDT|UT|[A-IK-Z]))?)?$/i', $dt, $match))
+ {
+ // Fill all matches
+ for ($i = count($match); $i <= 28; $i++)
+ {
+ $match[$i] = '';
+ }
+
+ // Set blank vars
+ $year = 1970;
+ $month = 1;
+ $day = 1;
+ $hour = 0;
+ $minute = 0;
+ $second = 0;
+ $timezone = false;
+
+ // RFC 822
+ if ($match[1] !== '')
+ {
+ if (strlen($match[4]) == 2)
+ {
+ $year = ($match[4] < 70) ? "20$match[4]" : "19$match[4]";
+ }
+ else
+ {
+ $year = $match[4];
+ }
+ switch (strtolower($match[3]))
+ {
+ case 'jan':
+ $month = 1;
+ break;
+
+ case 'feb':
+ $month = 2;
+ break;
+
+ case 'mar':
+ $month = 3;
+ break;
+
+ case 'apr':
+ $month = 4;
+ break;
+
+ case 'may':
+ $month = 5;
+ break;
+
+ case 'jun':
+ $month = 6;
+ break;
+
+ case 'jul':
+ $month = 7;
+ break;
+
+ case 'aug':
+ $month = 8;
+ break;
+
+ case 'sep':
+ $month = 9;
+ break;
+
+ case 'oct':
+ $month = 10;
+ break;
+
+ case 'nov':
+ $month = 11;
+ break;
+
+ case 'dec':
+ $month = 12;
+ break;
+ }
+ $day = $match[2];
+ }
+ // ISO 8601
+ else
+ {
+ // Year
+ if ($match[7] !== '')
+ {
+ $year = "$match[6]$match[7]";
+
+ // Two Digit Month/Day
+ if ($match[11] !== '')
+ {
+ $month = $match[11];
+ if ($match[12] !== '')
+ {
+ $day = $match[12];
+ }
+ }
+
+ // Four Digit Month/Day
+ elseif ($match[8] !== '')
+ {
+ $month = $match[8];
+ $day = $match[9];
+ }
+
+ // Ordinal Day
+ elseif ($match[10] !== '')
+ {
+ $day = $match[10];
+ }
+
+ // Week Date
+ elseif ($match[13] !== '')
+ {
+ // Week Day
+ if ($match[14] !== '')
+ {
+ $day = $match[14];
+ }
+
+ $first_day_of_year = date('w', mktime(0, 0, 0, 1, 1, $year));
+ if ($first_day_of_year == 0)
+ {
+ $first_day_of_year = 7;
+ }
+
+ $day = 7 * ($match[13] - 1) + $day - ($first_day_of_year - 1);
+ }
+ }
+ else
+ {
+ $year = "$match[6]00";
+ }
+ }
+ // Time
+ if ($match[15] !== '')
+ {
+ $time = 0;
+ $time += ($match[16] + ('.' . $match[17])) * 3600;
+ $time += ($match[18] + ('.' . $match[19])) * 60;
+ $time += $match[20] + ('.' . $match[21]);
+ $hour = floor($time / 3600);
+ $time -= $hour * 3600;
+ $minute = floor($time / 60);
+ $time -= $minute * 60;
+ $second = round($time);
+
+ // Timezone
+ if ($match[22] !== '')
+ {
+ // Alphabetic Timezone
+ if ($match[28] !== '')
+ {
+ // Military
+ if (strlen($match[28]) == 1)
+ {
+ if ($match[28] == 'Z' || $match[28] == 'z' || !$rfc822_tz)
+ {
+ $timezone = 0;
+ }
+ else
+ {
+ $timezone = ord(strtoupper($match[28]));
+
+ if ($timezone > 74)
+ {
+ $timezone--;
+ }
+
+ if ($timezone <= 76)
+ {
+ $timezone = -($timezone - 64);
+ }
+ else
+ {
+ $timezone -= 76;
+ }
+
+ $timezone *= 3600;
+ }
+ }
+ // Code
+ else
+ {
+ switch (strtoupper($match[28]))
+ {
+ case 'UT':
+ case 'UTC':
+ case 'GMT':
+ $timezone = 0;
+ break;
+
+ case 'EST':
+ $timezone = -18000;
+ break;
+
+ case 'CST':
+ $timezone = -21600;
+ break;
+
+ case 'MST':
+ $timezone = -25200;
+ break;
+
+ case 'PST':
+ $timezone = -28800;
+ break;
+
+ case 'EDT':
+ $timezone = -14400;
+ break;
+
+ case 'CDT':
+ $timezone = -18000;
+ break;
+
+ case 'MDT':
+ $timezone = -21600;
+ break;
+
+ case 'PDT':
+ $timezone = -25200;
+ break;
+ }
+ }
+ }
+ // Timezone difference from UTC
+ else
+ {
+ $timezone = 0;
+ $timezone += ($match[24] + ('.' . $match[25])) * 3600;
+ $timezone += ($match[26] + ('.' . $match[27])) * 60;
+ $timezone = (int) round($timezone);
+
+ if ($match[23] == '-')
+ {
+ $timezone = -$timezone;
+ }
+ }
+ }
+ }
+ if ($timezone === false)
+ {
+ $cache[$dt][$rfc822_tz] = mktime($hour, $minute, $second, $month, $day, $year);
+ }
+ else
+ {
+ $cache[$dt][$rfc822_tz] = gmmktime($hour, $minute, $second, $month, $day, $year) - $timezone;
+ }
+ }
+ elseif (($time = strtotime($dt)) > 0)
+ {
+ $cache[$dt][$rfc822_tz] = $time;
+ }
+ else
+ {
+ $cache[$dt][$rfc822_tz] = false;
+ }
+ }
+ return $cache[$dt][$rfc822_tz];
+ }
+
+ /**
+ * Decode HTML entities
+ *
+ * @static
+ * @access public
+ * @param string $data Input data
+ * @return string Output data
+ */
+ function entities_decode($data)
+ {
+ $decoder = new SimplePie_Decode_HTML_Entities($data);
+ return $decoder->parse();
+ }
+
+ /**
+ * Remove RFC822 comments
+ *
+ * @author Tomas V.V.Cox <cox@idecnet.com>
+ * @author Pierre-Alain Joye <pajoye@php.net>
+ * @author Amir Mohammad Saied <amir@php.net>
+ * @copyright 1997-2006 Pierre-Alain Joye,Tomas V.V.Cox,Amir Mohammad Saied
+ * @license http://www.opensource.org/licenses/bsd-license.php New BSD License
+ * @version CVS: $Id: Validate.php,v 1.104 2006/11/17 16:32:06 amir Exp $
+ * @link http://pear.php.net/package/Validate
+ * @access public
+ * @param string $data Data to strip comments from
+ * @return string Comment stripped string
+ */
+ function uncomment_rfc822($data)
+ {
+ if ((version_compare(PHP_VERSION, '4.4.6', '>=') && version_compare(PHP_VERSION, '5', '<')) || version_compare(PHP_VERSION, '5.2.2', '>='))
+ {
+ return $data;
+ }
+ else
+ {
+ return preg_replace('/((?:(?:\\\\"|[^("])*(?:"(?:[^"\\\\\r]|\\\\.)*"\s*)?)*)((?<!\\\\)\((?:(?2)|.)*?(?<!\\\\)\))/', '$1', $data);
+ }
+ }
+
+ function parse_mime($mime)
+ {
+ if (($pos = strpos($mime, ';')) === false)
+ {
+ return trim($mime);
+ }
+ else
+ {
+ return trim(substr($mime, 0, $pos));
+ }
+ }
+
+ function htmlspecialchars_decode($string, $quote_style)
+ {
+ if (function_exists('htmlspecialchars_decode'))
+ {
+ return htmlspecialchars_decode($string, $quote_style);
+ }
+ else
+ {
+ return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style)));
+ }
+ }
+
+ function atom_03_construct_type($attribs)
+ {
+ if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) == 'base64'))
+ {
+ $mode = SIMPLEPIE_CONSTRUCT_BASE64;
+ }
+ else
+ {
+ $mode = SIMPLEPIE_CONSTRUCT_NONE;
+ }
+ if (isset($attribs['']['type']))
+ {
+ switch (strtolower(trim($attribs['']['type'])))
+ {
+ case 'text':
+ case 'text/plain':
+ return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
+
+ case 'html':
+ case 'text/html':
+ return SIMPLEPIE_CONSTRUCT_HTML | $mode;
+
+ case 'xhtml':
+ case 'application/xhtml+xml':
+ return SIMPLEPIE_CONSTRUCT_XHTML | $mode;
+
+ default:
+ return SIMPLEPIE_CONSTRUCT_NONE | $mode;
+ }
+ }
+ else
+ {
+ return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
+ }
+ }
+
+ function atom_10_construct_type($attribs)
+ {
+ if (isset($attribs['']['type']))
+ {
+ switch (strtolower(trim($attribs['']['type'])))
+ {
+ case 'text':
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+
+ case 'html':
+ return SIMPLEPIE_CONSTRUCT_HTML;
+
+ case 'xhtml':
+ return SIMPLEPIE_CONSTRUCT_XHTML;
+
+ default:
+ return SIMPLEPIE_CONSTRUCT_NONE;
+ }
+ }
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+ }
+
+ function atom_10_content_construct_type($attribs)
+ {
+ if (isset($attribs['']['type']))
+ {
+ $type = strtolower(trim($attribs['']['type']));
+ switch ($type)
+ {
+ case 'text':
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+
+ case 'html':
+ return SIMPLEPIE_CONSTRUCT_HTML;
+
+ case 'xhtml':
+ return SIMPLEPIE_CONSTRUCT_XHTML;
+ }
+ if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) == 'text/')
+ {
+ return SIMPLEPIE_CONSTRUCT_NONE;
+ }
+ else
+ {
+ return SIMPLEPIE_CONSTRUCT_BASE64;
+ }
+ }
+ else
+ {
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+ }
+ }
+
+ function is_isegment_nz_nc($string)
+ {
+ return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string);
+ }
+
+ function space_seperated_tokens($string)
+ {
+ $space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
+ $string_length = strlen($string);
+
+ $position = strspn($string, $space_characters);
+ $tokens = array();
+
+ while ($position < $string_length)
+ {
+ $len = strcspn($string, $space_characters, $position);
+ $tokens[] = substr($string, $position, $len);
+ $position += $len;
+ $position += strspn($string, $space_characters, $position);
+ }
+
+ return $tokens;
+ }
+
+ function array_unique($array)
+ {
+ if (version_compare(PHP_VERSION, '5.2', '>='))
+ {
+ return array_unique($array);
+ }
+ else
+ {
+ $array = (array) $array;
+ $new_array = array();
+ $new_array_strings = array();
+ foreach ($array as $key => $value)
+ {
+ if (is_object($value))
+ {
+ if (method_exists($value, '__toString'))
+ {
+ $cmp = $value->__toString();
+ }
+ else
+ {
+ trigger_error('Object of class ' . get_class($value) . ' could not be converted to string', E_USER_ERROR);
+ }
+ }
+ elseif (is_array($value))
+ {
+ $cmp = (string) reset($value);
+ }
+ else
+ {
+ $cmp = (string) $value;
+ }
+ if (!in_array($cmp, $new_array_strings))
+ {
+ $new_array[$key] = $value;
+ $new_array_strings[] = $cmp;
+ }
+ }
+ return $new_array;
+ }
+ }
+
+ /**
+ * Converts a unicode codepoint to a UTF-8 character
+ *
+ * @static
+ * @access public
+ * @param int $codepoint Unicode codepoint
+ * @return string UTF-8 character
+ */
+ function codepoint_to_utf8($codepoint)
+ {
+ static $cache = array();
+ $codepoint = (int) $codepoint;
+ if (isset($cache[$codepoint]))
+ {
+ return $cache[$codepoint];
+ }
+ elseif ($codepoint < 0)
+ {
+ return $cache[$codepoint] = false;
+ }
+ else if ($codepoint <= 0x7f)
+ {
+ return $cache[$codepoint] = chr($codepoint);
+ }
+ else if ($codepoint <= 0x7ff)
+ {
+ return $cache[$codepoint] = chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f));
+ }
+ else if ($codepoint <= 0xffff)
+ {
+ return $cache[$codepoint] = chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
+ }
+ else if ($codepoint <= 0x10ffff)
+ {
+ return $cache[$codepoint] = chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
+ }
+ else
+ {
+ // U+FFFD REPLACEMENT CHARACTER
+ return $cache[$codepoint] = "\xEF\xBF\xBD";
+ }
+ }
+
+ /**
+ * Re-implementation of PHP 4.2.0's is_a()
+ *
+ * @static
+ * @access public
+ * @param object $object The tested object
+ * @param string $class_name The class name
+ * @return bool Returns true if the object is of this class or has this class as one of its parents, false otherwise
+ */
+ function is_a($object, $class_name)
+ {
+ if (function_exists('is_a'))
+ {
+ return is_a($object, $class_name);
+ }
+ elseif (!is_object($object))
+ {
+ return false;
+ }
+ elseif (get_class($object) == strtolower($class_name))
+ {
+ return true;
+ }
+ else
+ {
+ return is_subclass_of($object, $class_name);
+ }
+ }
+
+ /**
+ * Re-implementation of PHP 5's stripos()
+ *
+ * Returns the numeric position of the first occurrence of needle in the
+ * haystack string.
+ *
+ * @static
+ * @access string
+ * @param object $haystack
+ * @param string $needle Note that the needle may be a string of one or more
+ * characters. If needle is not a string, it is converted to an integer
+ * and applied as the ordinal value of a character.
+ * @param int $offset The optional offset parameter allows you to specify which
+ * character in haystack to start searching. The position returned is still
+ * relative to the beginning of haystack.
+ * @return bool If needle is not found, stripos() will return boolean false.
+ */
+ function stripos($haystack, $needle, $offset = 0)
+ {
+ if (function_exists('stripos'))
+ {
+ return stripos($haystack, $needle, $offset);
+ }
+ else
+ {
+ if (is_string($needle))
+ {
+ $needle = strtolower($needle);
+ }
+ elseif (is_int($needle) || is_bool($needle) || is_double($needle))
+ {
+ $needle = strtolower(chr($needle));
+ }
+ else
+ {
+ trigger_error('needle is not a string or an integer', E_USER_WARNING);
+ return false;
+ }
+
+ return strpos(strtolower($haystack), $needle, $offset);
+ }
+ }
+}
+
+/**
+ * Decode HTML Entities
+ *
+ * This implements HTML5 as of revision 967 (2007-06-28)
+ *
+ * @package SimplePie
+ */
+class SimplePie_Decode_HTML_Entities
+{
+ /**
+ * Data to be parsed
+ *
+ * @access private
+ * @var string
+ */
+ var $data = '';
+
+ /**
+ * Currently consumed bytes
+ *
+ * @access private
+ * @var string
+ */
+ var $consumed = '';
+
+ /**
+ * Position of the current byte being parsed
+ *
+ * @access private
+ * @var int
+ */
+ var $position = 0;
+
+ /**
+ * Create an instance of the class with the input data
+ *
+ * @access public
+ * @param string $data Input data
+ */
+ function SimplePie_Decode_HTML_Entities($data)
+ {
+ $this->data = $data;
+ }
+
+ /**
+ * Parse the input data
+ *
+ * @access public
+ * @return string Output data
+ */
+ function parse()
+ {
+ while (($this->position = strpos($this->data, '&', $this->position)) !== false)
+ {
+ $this->consume();
+ $this->entity();
+ $this->consumed = '';
+ }
+ return $this->data;
+ }
+
+ /**
+ * Consume the next byte
+ *
+ * @access private
+ * @return mixed The next byte, or false, if there is no more data
+ */
+ function consume()
+ {
+ if (isset($this->data[$this->position]))
+ {
+ $this->consumed .= $this->data[$this->position];
+ return $this->data[$this->position++];
+ }
+ else
+ {
+ $this->consumed = false;
+ return false;
+ }
+ }
+
+ /**
+ * Consume a range of characters
+ *
+ * @access private
+ * @param string $chars Characters to consume
+ * @return mixed A series of characters that match the range, or false
+ */
+ function consume_range($chars)
+ {
+ if ($len = strspn($this->data, $chars, $this->position))
+ {
+ $data = substr($this->data, $this->position, $len);
+ $this->consumed .= $data;
+ $this->position += $len;
+ return $data;
+ }
+ else
+ {
+ $this->consumed = false;
+ return false;
+ }
+ }
+
+ /**
+ * Unconsume one byte
+ *
+ * @access private
+ */
+ function unconsume()
+ {
+ $this->consumed = substr($this->consumed, 0, -1);
+ $this->position--;
+ }
+
+ /**
+ * Decode an entity
+ *
+ * @access private
+ */
+ function entity()
+ {
+ switch ($this->consume())
+ {
+ case "\x09":
+ case "\x0A":
+ case "\x0B":
+ case "\x0B":
+ case "\x0C":
+ case "\x20":
+ case "\x3C":
+ case "\x26":
+ case false:
+ break;
+
+ case "\x23":
+ switch ($this->consume())
+ {
+ case "\x78":
+ case "\x58":
+ $range = '0123456789ABCDEFabcdef';
+ $hex = true;
+ break;
+
+ default:
+ $range = '0123456789';
+ $hex = false;
+ $this->unconsume();
+ break;
+ }
+
+ if ($codepoint = $this->consume_range($range))
+ {
+ static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8");
+
+ if ($hex)
+ {
+ $codepoint = hexdec($codepoint);
+ }
+ else
+ {
+ $codepoint = intval($codepoint);
+ }
+
+ if (isset($windows_1252_specials[$codepoint]))
+ {
+ $replacement = $windows_1252_specials[$codepoint];
+ }
+ else
+ {
+ $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint);
+ }
+
+ if ($this->consume() != ';')
+ {
+ $this->unconsume();
+ }
+
+ $consumed_length = strlen($this->consumed);
+ $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length);
+ $this->position += strlen($replacement) - $consumed_length;
+ }
+ break;
+
+ default:
+ static $entities = array('Aacute' => "\xC3\x81", 'aacute' => "\xC3\xA1", 'Aacute;' => "\xC3\x81", 'aacute;' => "\xC3\xA1", 'Acirc' => "\xC3\x82", 'acirc' => "\xC3\xA2", 'Acirc;' => "\xC3\x82", 'acirc;' => "\xC3\xA2", 'acute' => "\xC2\xB4", 'acute;' => "\xC2\xB4", 'AElig' => "\xC3\x86", 'aelig' => "\xC3\xA6", 'AElig;' => "\xC3\x86", 'aelig;' => "\xC3\xA6", 'Agrave' => "\xC3\x80", 'agrave' => "\xC3\xA0", 'Agrave;' => "\xC3\x80", 'agrave;' => "\xC3\xA0", 'alefsym;' => "\xE2\x84\xB5", 'Alpha;' => "\xCE\x91", 'alpha;' => "\xCE\xB1", 'AMP' => "\x26", 'amp' => "\x26", 'AMP;' => "\x26", 'amp;' => "\x26", 'and;' => "\xE2\x88\xA7", 'ang;' => "\xE2\x88\xA0", 'apos;' => "\x27", 'Aring' => "\xC3\x85", 'aring' => "\xC3\xA5", 'Aring;' => "\xC3\x85", 'aring;' => "\xC3\xA5", 'asymp;' => "\xE2\x89\x88", 'Atilde' => "\xC3\x83", 'atilde' => "\xC3\xA3", 'Atilde;' => "\xC3\x83", 'atilde;' => "\xC3\xA3", 'Auml' => "\xC3\x84", 'auml' => "\xC3\xA4", 'Auml;' => "\xC3\x84", 'auml;' => "\xC3\xA4", 'bdquo;' => "\xE2\x80\x9E", 'Beta;' => "\xCE\x92", 'beta;' => "\xCE\xB2", 'brvbar' => "\xC2\xA6", 'brvbar;' => "\xC2\xA6", 'bull;' => "\xE2\x80\xA2", 'cap;' => "\xE2\x88\xA9", 'Ccedil' => "\xC3\x87", 'ccedil' => "\xC3\xA7", 'Ccedil;' => "\xC3\x87", 'ccedil;' => "\xC3\xA7", 'cedil' => "\xC2\xB8", 'cedil;' => "\xC2\xB8", 'cent' => "\xC2\xA2", 'cent;' => "\xC2\xA2", 'Chi;' => "\xCE\xA7", 'chi;' => "\xCF\x87", 'circ;' => "\xCB\x86", 'clubs;' => "\xE2\x99\xA3", 'cong;' => "\xE2\x89\x85", 'COPY' => "\xC2\xA9", 'copy' => "\xC2\xA9", 'COPY;' => "\xC2\xA9", 'copy;' => "\xC2\xA9", 'crarr;' => "\xE2\x86\xB5", 'cup;' => "\xE2\x88\xAA", 'curren' => "\xC2\xA4", 'curren;' => "\xC2\xA4", 'Dagger;' => "\xE2\x80\xA1", 'dagger;' => "\xE2\x80\xA0", 'dArr;' => "\xE2\x87\x93", 'darr;' => "\xE2\x86\x93", 'deg' => "\xC2\xB0", 'deg;' => "\xC2\xB0", 'Delta;' => "\xCE\x94", 'delta;' => "\xCE\xB4", 'diams;' => "\xE2\x99\xA6", 'divide' => "\xC3\xB7", 'divide;' => "\xC3\xB7", 'Eacute' => "\xC3\x89", 'eacute' => "\xC3\xA9", 'Eacute;' => "\xC3\x89", 'eacute;' => "\xC3\xA9", 'Ecirc' => "\xC3\x8A", 'ecirc' => "\xC3\xAA", 'Ecirc;' => "\xC3\x8A", 'ecirc;' => "\xC3\xAA", 'Egrave' => "\xC3\x88", 'egrave' => "\xC3\xA8", 'Egrave;' => "\xC3\x88", 'egrave;' => "\xC3\xA8", 'empty;' => "\xE2\x88\x85", 'emsp;' => "\xE2\x80\x83", 'ensp;' => "\xE2\x80\x82", 'Epsilon;' => "\xCE\x95", 'epsilon;' => "\xCE\xB5", 'equiv;' => "\xE2\x89\xA1", 'Eta;' => "\xCE\x97", 'eta;' => "\xCE\xB7", 'ETH' => "\xC3\x90", 'eth' => "\xC3\xB0", 'ETH;' => "\xC3\x90", 'eth;' => "\xC3\xB0", 'Euml' => "\xC3\x8B", 'euml' => "\xC3\xAB", 'Euml;' => "\xC3\x8B", 'euml;' => "\xC3\xAB", 'euro;' => "\xE2\x82\xAC", 'exist;' => "\xE2\x88\x83", 'fnof;' => "\xC6\x92", 'forall;' => "\xE2\x88\x80", 'frac12' => "\xC2\xBD", 'frac12;' => "\xC2\xBD", 'frac14' => "\xC2\xBC", 'frac14;' => "\xC2\xBC", 'frac34' => "\xC2\xBE", 'frac34;' => "\xC2\xBE", 'frasl;' => "\xE2\x81\x84", 'Gamma;' => "\xCE\x93", 'gamma;' => "\xCE\xB3", 'ge;' => "\xE2\x89\xA5", 'GT' => "\x3E", 'gt' => "\x3E", 'GT;' => "\x3E", 'gt;' => "\x3E", 'hArr;' => "\xE2\x87\x94", 'harr;' => "\xE2\x86\x94", 'hearts;' => "\xE2\x99\xA5", 'hellip;' => "\xE2\x80\xA6", 'Iacute' => "\xC3\x8D", 'iacute' => "\xC3\xAD", 'Iacute;' => "\xC3\x8D", 'iacute;' => "\xC3\xAD", 'Icirc' => "\xC3\x8E", 'icirc' => "\xC3\xAE", 'Icirc;' => "\xC3\x8E", 'icirc;' => "\xC3\xAE", 'iexcl' => "\xC2\xA1", 'iexcl;' => "\xC2\xA1", 'Igrave' => "\xC3\x8C", 'igrave' => "\xC3\xAC", 'Igrave;' => "\xC3\x8C", 'igrave;' => "\xC3\xAC", 'image;' => "\xE2\x84\x91", 'infin;' => "\xE2\x88\x9E", 'int;' => "\xE2\x88\xAB", 'Iota;' => "\xCE\x99", 'iota;' => "\xCE\xB9", 'iquest' => "\xC2\xBF", 'iquest;' => "\xC2\xBF", 'isin;' => "\xE2\x88\x88", 'Iuml' => "\xC3\x8F", 'iuml' => "\xC3\xAF", 'Iuml;' => "\xC3\x8F", 'iuml;' => "\xC3\xAF", 'Kappa;' => "\xCE\x9A", 'kappa;' => "\xCE\xBA", 'Lambda;' => "\xCE\x9B", 'lambda;' => "\xCE\xBB", 'lang;' => "\xE3\x80\x88", 'laquo' => "\xC2\xAB", 'laquo;' => "\xC2\xAB", 'lArr;' => "\xE2\x87\x90", 'larr;' => "\xE2\x86\x90", 'lceil;' => "\xE2\x8C\x88", 'ldquo;' => "\xE2\x80\x9C", 'le;' => "\xE2\x89\xA4", 'lfloor;' => "\xE2\x8C\x8A", 'lowast;' => "\xE2\x88\x97", 'loz;' => "\xE2\x97\x8A", 'lrm;' => "\xE2\x80\x8E", 'lsaquo;' => "\xE2\x80\xB9", 'lsquo;' => "\xE2\x80\x98", 'LT' => "\x3C", 'lt' => "\x3C", 'LT;' => "\x3C", 'lt;' => "\x3C", 'macr' => "\xC2\xAF", 'macr;' => "\xC2\xAF", 'mdash;' => "\xE2\x80\x94", 'micro' => "\xC2\xB5", 'micro;' => "\xC2\xB5", 'middot' => "\xC2\xB7", 'middot;' => "\xC2\xB7", 'minus;' => "\xE2\x88\x92", 'Mu;' => "\xCE\x9C", 'mu;' => "\xCE\xBC", 'nabla;' => "\xE2\x88\x87", 'nbsp' => "\xC2\xA0", 'nbsp;' => "\xC2\xA0", 'ndash;' => "\xE2\x80\x93", 'ne;' => "\xE2\x89\xA0", 'ni;' => "\xE2\x88\x8B", 'not' => "\xC2\xAC", 'not;' => "\xC2\xAC", 'notin;' => "\xE2\x88\x89", 'nsub;' => "\xE2\x8A\x84", 'Ntilde' => "\xC3\x91", 'ntilde' => "\xC3\xB1", 'Ntilde;' => "\xC3\x91", 'ntilde;' => "\xC3\xB1", 'Nu;' => "\xCE\x9D", 'nu;' => "\xCE\xBD", 'Oacute' => "\xC3\x93", 'oacute' => "\xC3\xB3", 'Oacute;' => "\xC3\x93", 'oacute;' => "\xC3\xB3", 'Ocirc' => "\xC3\x94", 'ocirc' => "\xC3\xB4", 'Ocirc;' => "\xC3\x94", 'ocirc;' => "\xC3\xB4", 'OElig;' => "\xC5\x92", 'oelig;' => "\xC5\x93", 'Ograve' => "\xC3\x92", 'ograve' => "\xC3\xB2", 'Ograve;' => "\xC3\x92", 'ograve;' => "\xC3\xB2", 'oline;' => "\xE2\x80\xBE", 'Omega;' => "\xCE\xA9", 'omega;' => "\xCF\x89", 'Omicron;' => "\xCE\x9F", 'omicron;' => "\xCE\xBF", 'oplus;' => "\xE2\x8A\x95", 'or;' => "\xE2\x88\xA8", 'ordf' => "\xC2\xAA", 'ordf;' => "\xC2\xAA", 'ordm' => "\xC2\xBA", 'ordm;' => "\xC2\xBA", 'Oslash' => "\xC3\x98", 'oslash' => "\xC3\xB8", 'Oslash;' => "\xC3\x98", 'oslash;' => "\xC3\xB8", 'Otilde' => "\xC3\x95", 'otilde' => "\xC3\xB5", 'Otilde;' => "\xC3\x95", 'otilde;' => "\xC3\xB5", 'otimes;' => "\xE2\x8A\x97", 'Ouml' => "\xC3\x96", 'ouml' => "\xC3\xB6", 'Ouml;' => "\xC3\x96", 'ouml;' => "\xC3\xB6", 'para' => "\xC2\xB6", 'para;' => "\xC2\xB6", 'part;' => "\xE2\x88\x82", 'permil;' => "\xE2\x80\xB0", 'perp;' => "\xE2\x8A\xA5", 'Phi;' => "\xCE\xA6", 'phi;' => "\xCF\x86", 'Pi;' => "\xCE\xA0", 'pi;' => "\xCF\x80", 'piv;' => "\xCF\x96", 'plusmn' => "\xC2\xB1", 'plusmn;' => "\xC2\xB1", 'pound' => "\xC2\xA3", 'pound;' => "\xC2\xA3", 'Prime;' => "\xE2\x80\xB3", 'prime;' => "\xE2\x80\xB2", 'prod;' => "\xE2\x88\x8F", 'prop;' => "\xE2\x88\x9D", 'Psi;' => "\xCE\xA8", 'psi;' => "\xCF\x88", 'QUOT' => "\x22", 'quot' => "\x22", 'QUOT;' => "\x22", 'quot;' => "\x22", 'radic;' => "\xE2\x88\x9A", 'rang;' => "\xE3\x80\x89", 'raquo' => "\xC2\xBB", 'raquo;' => "\xC2\xBB", 'rArr;' => "\xE2\x87\x92", 'rarr;' => "\xE2\x86\x92", 'rceil;' => "\xE2\x8C\x89", 'rdquo;' => "\xE2\x80\x9D", 'real;' => "\xE2\x84\x9C", 'REG' => "\xC2\xAE", 'reg' => "\xC2\xAE", 'REG;' => "\xC2\xAE", 'reg;' => "\xC2\xAE", 'rfloor;' => "\xE2\x8C\x8B", 'Rho;' => "\xCE\xA1", 'rho;' => "\xCF\x81", 'rlm;' => "\xE2\x80\x8F", 'rsaquo;' => "\xE2\x80\xBA", 'rsquo;' => "\xE2\x80\x99", 'sbquo;' => "\xE2\x80\x9A", 'Scaron;' => "\xC5\xA0", 'scaron;' => "\xC5\xA1", 'sdot;' => "\xE2\x8B\x85", 'sect' => "\xC2\xA7", 'sect;' => "\xC2\xA7", 'shy' => "\xC2\xAD", 'shy;' => "\xC2\xAD", 'Sigma;' => "\xCE\xA3", 'sigma;' => "\xCF\x83", 'sigmaf;' => "\xCF\x82", 'sim;' => "\xE2\x88\xBC", 'spades;' => "\xE2\x99\xA0", 'sub;' => "\xE2\x8A\x82", 'sube;' => "\xE2\x8A\x86", 'sum;' => "\xE2\x88\x91", 'sup;' => "\xE2\x8A\x83", 'sup1' => "\xC2\xB9", 'sup1;' => "\xC2\xB9", 'sup2' => "\xC2\xB2", 'sup2;' => "\xC2\xB2", 'sup3' => "\xC2\xB3", 'sup3;' => "\xC2\xB3", 'supe;' => "\xE2\x8A\x87", 'szlig' => "\xC3\x9F", 'szlig;' => "\xC3\x9F", 'Tau;' => "\xCE\xA4", 'tau;' => "\xCF\x84", 'there4;' => "\xE2\x88\xB4", 'Theta;' => "\xCE\x98", 'theta;' => "\xCE\xB8", 'thetasym;' => "\xCF\x91", 'thinsp;' => "\xE2\x80\x89", 'THORN' => "\xC3\x9E", 'thorn' => "\xC3\xBE", 'THORN;' => "\xC3\x9E", 'thorn;' => "\xC3\xBE", 'tilde;' => "\xCB\x9C", 'times' => "\xC3\x97", 'times;' => "\xC3\x97", 'TRADE;' => "\xE2\x84\xA2", 'trade;' => "\xE2\x84\xA2", 'Uacute' => "\xC3\x9A", 'uacute' => "\xC3\xBA", 'Uacute;' => "\xC3\x9A", 'uacute;' => "\xC3\xBA", 'uArr;' => "\xE2\x87\x91", 'uarr;' => "\xE2\x86\x91", 'Ucirc' => "\xC3\x9B", 'ucirc' => "\xC3\xBB", 'Ucirc;' => "\xC3\x9B", 'ucirc;' => "\xC3\xBB", 'Ugrave' => "\xC3\x99", 'ugrave' => "\xC3\xB9", 'Ugrave;' => "\xC3\x99", 'ugrave;' => "\xC3\xB9", 'uml' => "\xC2\xA8", 'uml;' => "\xC2\xA8", 'upsih;' => "\xCF\x92", 'Upsilon;' => "\xCE\xA5", 'upsilon;' => "\xCF\x85", 'Uuml' => "\xC3\x9C", 'uuml' => "\xC3\xBC", 'Uuml;' => "\xC3\x9C", 'uuml;' => "\xC3\xBC", 'weierp;' => "\xE2\x84\x98", 'Xi;' => "\xCE\x9E", 'xi;' => "\xCE\xBE", 'Yacute' => "\xC3\x9D", 'yacute' => "\xC3\xBD", 'Yacute;' => "\xC3\x9D", 'yacute;' => "\xC3\xBD", 'yen' => "\xC2\xA5", 'yen;' => "\xC2\xA5", 'yuml' => "\xC3\xBF", 'Yuml;' => "\xC5\xB8", 'yuml;' => "\xC3\xBF", 'Zeta;' => "\xCE\x96", 'zeta;' => "\xCE\xB6", 'zwj;' => "\xE2\x80\x8D", 'zwnj;' => "\xE2\x80\x8C");
+
+ for ($i = 0, $match = null; $i < 9 && $this->consume(); $i++)
+ {
+ $consumed = substr($this->consumed, 1);
+ if (isset($entities[$consumed]))
+ {
+ $match = $consumed;
+ }
+ }
+
+ if ($match !== null)
+ {
+ $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1);
+ $this->position += strlen($entities[$match]) - strlen($consumed) - 1;
+ }
+ break;
+ }
+ }
+}
+
+class SimplePie_Locator
+{
+ var $useragent;
+ var $timeout;
+ var $file;
+ var $local = array();
+ var $elsewhere = array();
+ var $file_class = 'SimplePie_File';
+ var $cached_entities = array();
+ var $http_base;
+ var $base;
+ var $base_location = 0;
+ var $checked_feeds = 0;
+ var $max_checked_feeds = 10;
+
+ function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File', $max_checked_feeds = 10)
+ {
+ $this->file =& $file;
+ $this->file_class = $file_class;
+ $this->useragent = $useragent;
+ $this->timeout = $timeout;
+ $this->max_checked_feeds = $max_checked_feeds;
+ }
+
+ function find($type = SIMPLEPIE_LOCATOR_ALL)
+ {
+ if ($this->is_feed($this->file))
+ {
+ return $this->file;
+ }
+
+ if ($type & ~SIMPLEPIE_LOCATOR_NONE)
+ {
+ $this->get_base();
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery())
+ {
+ return $working;
+ }
+
+ if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links())
+ {
+ if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local))
+ {
+ return $working;
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local))
+ {
+ return $working;
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere))
+ {
+ return $working;
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere))
+ {
+ return $working;
+ }
+ }
+ return null;
+ }
+
+ function is_feed(&$file)
+ {
+ $body = SimplePie_Misc::strip_comments($file->body);
+ if (preg_match('/<([^\s:]+:)?(rss|RDF|feed)' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/i', $body))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ function get_base()
+ {
+ if (isset($this->file->headers['content-location']))
+ {
+ $this->http_base = SimplePie_Misc::absolutize_url(trim($this->file->headers['content-location']), $this->file->url);
+ }
+ else
+ {
+ $this->http_base = $this->file->url;
+ }
+ $this->base = $this->http_base;
+ $elements = SimplePie_Misc::get_element('base', $this->file->body);
+ foreach ($elements as $element)
+ {
+ if ($element['attribs']['href']['data'] !== '')
+ {
+ $this->base = SimplePie_Misc::absolutize_url(trim($element['attribs']['href']['data']), $this->http_base);
+ $this->base_location = $element['offset'];
+ break;
+ }
+ }
+ }
+
+ function autodiscovery()
+ {
+ $links = array_merge(SimplePie_Misc::get_element('link', $this->file->body), SimplePie_Misc::get_element('a', $this->file->body), SimplePie_Misc::get_element('area', $this->file->body));
+ $done = array();
+ foreach ($links as $link)
+ {
+ if ($this->checked_feeds == $this->max_checked_feeds)
+ {
+ break;
+ }
+ if (isset($link['attribs']['href']['data']) && isset($link['attribs']['rel']['data']))
+ {
+ $rel = array_unique(SimplePie_Misc::space_seperated_tokens(strtolower($link['attribs']['rel']['data'])));
+
+ if ($this->base_location < $link['offset'])
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base);
+ }
+ else
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base);
+ }
+
+ if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !empty($link['attribs']['type']['data']) && in_array(strtolower(SimplePie_Misc::parse_mime($link['attribs']['type']['data'])), array('application/rss+xml', 'application/atom+xml'))))
+ {
+ $this->checked_feeds++;
+ $feed =& new $this->file_class($href, $this->timeout, 5, null, $this->useragent);
+ if ($this->is_feed($feed))
+ {
+ return $feed;
+ }
+ }
+ $done[] = $href;
+ }
+ }
+ return null;
+ }
+
+ function get_links()
+ {
+ $links = SimplePie_Misc::get_element('a', $this->file->body);
+ foreach ($links as $link)
+ {
+ if (isset($link['attribs']['href']['data']))
+ {
+ $href = trim($link['attribs']['href']['data']);
+ $parsed = SimplePie_Misc::parse_url($href);
+ if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme']))
+ {
+ if ($this->base_location < $link['offset'])
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base);
+ }
+ else
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base);
+ }
+
+ $current = SimplePie_Misc::parse_url($this->file->url);
+
+ if ($parsed['authority'] === '' || $parsed['authority'] == $current['authority'])
+ {
+ $this->local[] = $href;
+ }
+ else
+ {
+ $this->elsewhere[] = $href;
+ }
+ }
+ }
+ }
+ $this->local = array_unique($this->local);
+ $this->elsewhere = array_unique($this->elsewhere);
+ if (!empty($this->local) || !empty($this->elsewhere))
+ {
+ return true;
+ }
+ return null;
+ }
+
+ function extension(&$array)
+ {
+ foreach ($array as $key => $value)
+ {
+ if ($this->checked_feeds == $this->max_checked_feeds)
+ {
+ break;
+ }
+ if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml')))
+ {
+ $this->checked_feeds++;
+ $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent);
+ if ($this->is_feed($feed))
+ {
+ return $feed;
+ }
+ else
+ {
+ unset($array[$key]);
+ }
+ }
+ }
+ return null;
+ }
+
+ function body(&$array)
+ {
+ foreach ($array as $key => $value)
+ {
+ if ($this->checked_feeds == $this->max_checked_feeds)
+ {
+ break;
+ }
+ if (preg_match('/(rss|rdf|atom|xml)/i', $value))
+ {
+ $this->checked_feeds++;
+ $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent);
+ if ($this->is_feed($feed))
+ {
+ return $feed;
+ }
+ else
+ {
+ unset($array[$key]);
+ }
+ }
+ }
+ return null;
+ }
+}
+
+class SimplePie_Parser
+{
+ var $xml;
+ var $error_code;
+ var $error_string;
+ var $current_line;
+ var $current_column;
+ var $current_byte;
+ var $separator = ' ';
+ var $feed = false;
+ var $namespace = array('');
+ var $element = array('');
+ var $xml_base = array('');
+ var $xml_base_explicit = array(false);
+ var $xml_lang = array('');
+ var $data = array();
+ var $datas = array(array());
+ var $current_xhtml_construct = -1;
+ var $encoding;
+
+ function pre_process(&$data, $encoding)
+ {
+ // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character
+ if (strtoupper($encoding) == 'US-ASCII')
+ {
+ $this->encoding = 'UTF-8';
+ }
+ else
+ {
+ $this->encoding = $encoding;
+ }
+
+ // Strip BOM:
+ // UTF-32 Big Endian BOM
+ if (strpos($data, "\x0\x0\xFE\xFF") === 0)
+ {
+ $data = substr($data, 4);
+ }
+ // UTF-32 Little Endian BOM
+ elseif (strpos($data, "\xFF\xFE\x0\x0") === 0)
+ {
+ $data = substr($data, 4);
+ }
+ // UTF-16 Big Endian BOM
+ elseif (strpos($data, "\xFE\xFF") === 0)
+ {
+ $data = substr($data, 2);
+ }
+ // UTF-16 Little Endian BOM
+ elseif (strpos($data, "\xFF\xFE") === 0)
+ {
+ $data = substr($data, 2);
+ }
+ // UTF-8 BOM
+ elseif (strpos($data, "\xEF\xBB\xBF") === 0)
+ {
+ $data = substr($data, 3);
+ }
+
+ // Make sure the XML prolog is sane and has the correct encoding
+ $data = preg_replace("/^<\?xml[\x20\x9\xD\xA]+version([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"1.0\"|'1.0'|\"1.1\"|'1.1')([\x20\x9\xD\xA]+encoding([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"[A-Za-z][A-Za-z0-9._\-]*\"|'[A-Za-z][A-Za-z0-9._\-]*'))?([\x20\x9\xD\xA]+standalone([\x20\x9\xD\xA]+)?=([\x20\x9\xD\xA]+)?(\"(yes|no)\"|'(yes|no)'))?([\x20\x9\xD\xA]+)?\?>/", '', $data);
+ $data = "<?xml version='1.0' encoding='$encoding'?>\n" . $data;
+ }
+
+ function parse(&$data)
+ {
+ $return = true;
+
+ // Create the parser
+ $this->xml = xml_parser_create_ns($this->encoding, $this->separator);
+ xml_parser_set_option($this->xml, XML_OPTION_SKIP_WHITE, 1);
+ xml_parser_set_option($this->xml, XML_OPTION_CASE_FOLDING, 0);
+ xml_set_object($this->xml, $this);
+ xml_set_character_data_handler($this->xml, 'cdata');
+ xml_set_element_handler($this->xml, 'tag_open', 'tag_close');
+
+ // workound for a bug in PHP/libxml2 as described on http://bugs.simplepie.org/issues/show/101
+ $data = str_replace('&lt;', '&#60;', $data);
+ $data = str_replace('&gt;', '&#62;', $data);
+ $data = str_replace('&amp;', '&#38;', $data);
+ $data = str_replace('&apos;', '&#39;', $data);
+ $data = str_replace('&quot;', '&#34;', $data);
+
+ // Parse!
+ if (!xml_parse($this->xml, $data, true))
+ {
+ $this->data = null;
+ $this->error_code = xml_get_error_code($this->xml);
+ $this->error_string = xml_error_string($this->error_code);
+ $return = false;
+ }
+ $this->current_line = xml_get_current_line_number($this->xml);
+ $this->current_column = xml_get_current_column_number($this->xml);
+ $this->current_byte = xml_get_current_byte_index($this->xml);
+ xml_parser_free($this->xml);
+ return $return;
+ }
+
+ function get_error_code()
+ {
+ return $this->error_code;
+ }
+
+ function get_error_string()
+ {
+ return $this->error_string;
+ }
+
+ function get_current_line()
+ {
+ return $this->current_line;
+ }
+
+ function get_current_column()
+ {
+ return $this->current_column;
+ }
+
+ function get_current_byte()
+ {
+ return $this->current_byte;
+ }
+
+ function get_data()
+ {
+ return $this->data;
+ }
+
+ function tag_open($parser, $tag, $attributes)
+ {
+ if ($this->feed === 0)
+ {
+ return;
+ }
+ elseif ($this->feed == false)
+ {
+ if (in_array($tag, array(
+ SIMPLEPIE_NAMESPACE_ATOM_10 . $this->separator . 'feed',
+ SIMPLEPIE_NAMESPACE_ATOM_03 . $this->separator . 'feed',
+ 'rss',
+ SIMPLEPIE_NAMESPACE_RDF . $this->separator . 'RDF'
+ )))
+ {
+ $this->feed = 1;
+ }
+ }
+ else
+ {
+ $this->feed++;
+ }
+
+ list($this->namespace[], $this->element[]) = $this->split_ns($tag);
+
+ $attribs = array();
+ foreach ($attributes as $name => $value)
+ {
+ list($attrib_namespace, $attribute) = $this->split_ns($name);
+ $attribs[$attrib_namespace][$attribute] = $value;
+ }
+
+ if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base']))
+ {
+ $this->xml_base[] = SimplePie_Misc::absolutize_url($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base));
+ $this->xml_base_explicit[] = true;
+ }
+ else
+ {
+ $this->xml_base[] = end($this->xml_base);
+ $this->xml_base_explicit[] = end($this->xml_base_explicit);
+ }
+
+ if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang']))
+ {
+ $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang'];
+ }
+ else
+ {
+ $this->xml_lang[] = end($this->xml_lang);
+ }
+
+ if ($this->current_xhtml_construct >= 0)
+ {
+ $this->current_xhtml_construct++;
+ if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML)
+ {
+ $this->data['data'] .= '<' . end($this->element);
+ if (isset($attribs['']))
+ {
+ foreach ($attribs[''] as $name => $value)
+ {
+ $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"';
+ }
+ }
+ $this->data['data'] .= '>';
+ }
+ }
+ else
+ {
+ $this->datas[] =& $this->data;
+ $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][];
+ $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang));
+ if ((end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] == 'xml')
+ || (end($this->namespace) == SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] == 'xhtml'))
+ {
+ $this->current_xhtml_construct = 0;
+ }
+ }
+ }
+
+ function cdata($parser, $cdata)
+ {
+ if ($this->current_xhtml_construct >= 0)
+ {
+ $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding);
+ }
+ elseif ($this->feed > 1)
+ {
+ $this->data['data'] .= $cdata;
+ }
+ }
+
+ function tag_close($parser, $tag)
+ {
+ if (!$this->feed)
+ {
+ return;
+ }
+
+ if ($this->current_xhtml_construct >= 0)
+ {
+ $this->current_xhtml_construct--;
+ if (end($this->namespace) == SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param')))
+ {
+ $this->data['data'] .= '</' . end($this->element) . '>';
+ }
+ }
+ if ($this->current_xhtml_construct == -1)
+ {
+ $this->data =& $this->datas[$this->feed];
+ array_pop($this->datas);
+ }
+
+ array_pop($this->element);
+ array_pop($this->namespace);
+ array_pop($this->xml_base);
+ array_pop($this->xml_base_explicit);
+ array_pop($this->xml_lang);
+ $this->feed--;
+ }
+
+ function split_ns($string)
+ {
+ static $cache = array();
+ if (!isset($cache[$string]))
+ {
+ if ($pos = strpos($string, $this->separator))
+ {
+ static $separator_length;
+ if (!$separator_length)
+ {
+ $separator_length = strlen($this->separator);
+ }
+ $cache[$string] = array(substr($string, 0, $pos), substr($string, $pos + $separator_length));
+ }
+ else
+ {
+ $cache[$string] = array('', $string);
+ }
+ }
+ return $cache[$string];
+ }
+}
+
+/**
+ * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shortern a string while preserving HTML tags
+ */
+class SimplePie_Sanitize
+{
+ // Private vars
+ var $base;
+
+ // Options
+ var $remove_div = true;
+ var $image_handler = '';
+ var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
+ var $encode_instead_of_strip = false;
+ var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
+ var $strip_comments = false;
+ var $output_encoding = 'UTF-8';
+ var $enable_cache = true;
+ var $cache_location = './cache';
+ var $cache_name_function = 'md5';
+ var $cache_class = 'SimplePie_Cache';
+ var $file_class = 'SimplePie_File';
+ var $timeout = 10;
+ var $useragent = '';
+ var $force_fsockopen = false;
+
+ var $replace_url_attributes = array(
+ 'a' => 'href',
+ 'area' => 'href',
+ 'blockquote' => 'cite',
+ 'del' => 'cite',
+ 'form' => 'action',
+ 'img' => array('longdesc', 'src'),
+ 'input' => 'src',
+ 'ins' => 'cite',
+ 'q' => 'cite'
+ );
+
+ function remove_div($enable = true)
+ {
+ $this->remove_div = (bool) $enable;
+ }
+
+ function set_image_handler($page = false)
+ {
+ if ($page)
+ {
+ $this->image_handler = (string) $page;
+ }
+ else
+ {
+ $this->image_handler = false;
+ }
+ }
+
+ function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache')
+ {
+ if (isset($enable_cache))
+ {
+ $this->enable_cache = (bool) $enable_cache;
+ }
+
+ if ($cache_location)
+ {
+ $this->cache_location = (string) $cache_location;
+ }
+
+ if ($cache_name_function)
+ {
+ $this->cache_name_function = (string) $cache_name_function;
+ }
+
+ if ($cache_class)
+ {
+ $this->cache_class = (string) $cache_class;
+ }
+ }
+
+ function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false)
+ {
+ if ($file_class)
+ {
+ $this->file_class = (string) $file_class;
+ }
+
+ if ($timeout)
+ {
+ $this->timeout = (string) $timeout;
+ }
+
+ if ($useragent)
+ {
+ $this->useragent = (string) $useragent;
+ }
+
+ if ($force_fsockopen)
+ {
+ $this->force_fsockopen = (string) $force_fsockopen;
+ }
+ }
+
+ function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
+ {
+ if ($tags)
+ {
+ if (is_array($tags))
+ {
+ $this->strip_htmltags = $tags;
+ }
+ else
+ {
+ $this->strip_htmltags = explode(',', $tags);
+ }
+ }
+ else
+ {
+ $this->strip_htmltags = false;
+ }
+ }
+
+ function encode_instead_of_strip($encode = false)
+ {
+ $this->encode_instead_of_strip = (bool) $encode;
+ }
+
+ function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'))
+ {
+ if ($attribs)
+ {
+ if (is_array($attribs))
+ {
+ $this->strip_attributes = $attribs;
+ }
+ else
+ {
+ $this->strip_attributes = explode(',', $attribs);
+ }
+ }
+ else
+ {
+ $this->strip_attributes = false;
+ }
+ }
+
+ function strip_comments($strip = false)
+ {
+ $this->strip_comments = (bool) $strip;
+ }
+
+ function set_output_encoding($encoding = 'UTF-8')
+ {
+ $this->output_encoding = (string) $encoding;
+ }
+
+ /**
+ * Set element/attribute key/value pairs of HTML attributes
+ * containing URLs that need to be resolved relative to the feed
+ *
+ * @access public
+ * @since 1.0
+ * @param array $element_attribute Element/attribute key/value pairs
+ */
+ function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite'))
+ {
+ $this->replace_url_attributes = (array) $element_attribute;
+ }
+
+ function sanitize($data, $type, $base = '')
+ {
+ $data = trim($data);
+ if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI)
+ {
+ if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML)
+ {
+ if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/(\w+)' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data))
+ {
+ $type |= SIMPLEPIE_CONSTRUCT_HTML;
+ }
+ else
+ {
+ $type |= SIMPLEPIE_CONSTRUCT_TEXT;
+ }
+ }
+
+ if ($type & SIMPLEPIE_CONSTRUCT_BASE64)
+ {
+ $data = base64_decode($data);
+ }
+
+ if ($type & SIMPLEPIE_CONSTRUCT_XHTML)
+ {
+ if ($this->remove_div)
+ {
+ $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '', $data);
+ $data = preg_replace('/<\/div>$/', '', $data);
+ }
+ else
+ {
+ $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '<div>', $data);
+ }
+ }
+
+ if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML))
+ {
+ // Strip comments
+ if ($this->strip_comments)
+ {
+ $data = SimplePie_Misc::strip_comments($data);
+ }
+
+ // Strip out HTML tags and attributes that might cause various security problems.
+ // Based on recommendations by Mark Pilgrim at:
+ // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
+ if ($this->strip_htmltags)
+ {
+ foreach ($this->strip_htmltags as $tag)
+ {
+ $pcre = "/<($tag)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$tag" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>|(\/)?>)/siU';
+ while (preg_match($pcre, $data))
+ {
+ $data = preg_replace_callback($pcre, array(&$this, 'do_strip_htmltags'), $data);
+ }
+ }
+ }
+
+ if ($this->strip_attributes)
+ {
+ foreach ($this->strip_attributes as $attrib)
+ {
+ $data = preg_replace('/ '. trim($attrib) .'=("|&quot;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\'|&apos;|<|>|\+|{|})*("|&quot;)/i', '', $data);
+ $data = preg_replace('/ '. trim($attrib) .'=(\'|&apos;)(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|"|&quot;|<|>|\+|{|})*(\'|&apos;)/i', '', $data);
+ $data = preg_replace('/ '. trim($attrib) .'=(\w|\s|=|-|:|;|\/|\.|\?|&|,|#|!|\(|\)|\+|{|})*/i', '', $data);
+ }
+ }
+
+ // Replace relative URLs
+ $this->base = $base;
+ foreach ($this->replace_url_attributes as $element => $attributes)
+ {
+ $data = $this->replace_urls($data, $element, $attributes);
+ }
+
+ // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags.
+ if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache)
+ {
+ $images = SimplePie_Misc::get_element('img', $data);
+ foreach ($images as $img)
+ {
+ if (isset($img['attribs']['src']['data']))
+ {
+ $image_url = $img['attribs']['src']['data'];
+ $cache =& new $this->cache_class($this->cache_location, call_user_func($this->cache_name_function, $image_url), 'spi');
+
+ if ($cache->load())
+ {
+ $img['attribs']['src']['data'] = $this->image_handler . rawurlencode($img['attribs']['src']['data']);
+ $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
+ }
+ else
+ {
+ $file =& new $this->file_class($image_url, $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen);
+ $headers = $file->headers;
+
+ if ($file->success && ($file->status_code == 200 || ($file->status_code > 206 && $file->status_code < 300)))
+ {
+ if (!$cache->save(array('headers' => $file->headers, 'body' => $file->body)))
+ {
+ trigger_error("$cache->name is not writeable", E_USER_WARNING);
+ }
+ $img['attribs']['src']['data'] = $this->image_handler . rawurlencode($img['attribs']['src']['data']);
+ $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
+ }
+ }
+ }
+ }
+ }
+
+ // Having (possibly) taken stuff out, there may now be whitespace at the beginning/end of the data
+ $data = trim($data);
+ }
+
+ if ($type & SIMPLEPIE_CONSTRUCT_IRI)
+ {
+ $data = SimplePie_Misc::absolutize_url($data, $base);
+ }
+
+ if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI))
+ {
+ $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
+ }
+
+ if ($this->output_encoding != 'UTF-8')
+ {
+ $data = SimplePie_Misc::change_encoding($data, 'UTF-8', $this->output_encoding);
+ }
+ }
+ return $data;
+ }
+
+ function replace_urls($data, $tag, $attributes)
+ {
+ if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags))
+ {
+ $elements = SimplePie_Misc::get_element($tag, $data);
+ foreach ($elements as $element)
+ {
+ if (is_array($attributes))
+ {
+ foreach ($attributes as $attribute)
+ {
+ if (isset($element['attribs'][$attribute]['data']))
+ {
+ $element['attribs'][$attribute]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attribute]['data'], $this->base);
+ $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data);
+ }
+ }
+ }
+ elseif (isset($element['attribs'][$attributes]['data']))
+ {
+ $element['attribs'][$attributes]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attributes]['data'], $this->base);
+ $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data);
+ }
+ }
+ }
+ return $data;
+ }
+
+ function do_strip_htmltags($match)
+ {
+ if ($this->encode_instead_of_strip)
+ {
+ if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
+ {
+ $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8');
+ $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8');
+ return "&lt;$match[1]$match[2]&gt;$match[3]&lt;/$match[1]&gt;";
+ }
+ else
+ {
+ return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8');
+ }
+ }
+ elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
+ {
+ return $match[4];
+ }
+ else
+ {
+ return '';
+ }
+ }
+}
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php
new file mode 100644
index 000000000..ab802163b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php
@@ -0,0 +1,918 @@
+<?php
+/**
+ * TAR format class - Creates TAR archives
+ *
+ * This class is part or the MaxgComp suite and originally named
+ * MaxgTar class.
+ *
+ * Modified for Dokuwiki
+ *
+ * @license GPL
+ * @link http://docs.maxg.info
+ * @author Bouchon <tarlib@bouchon.org> (Maxg)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+
+/**
+ * Those constants represent the compression method to use.
+ * COMPRESS_GZIP is used for the GZIP compression; COMPRESS_BZIP for
+ * BZIP2 and COMPRESS_NONE for no compression.
+ *
+ * On the other hand, COMPRESS_AUTO is a bit harder. It will first check
+ * if the zlib extensions are loaded.
+ * If it is, GZIP will be used. Else it will check if the bz2 extensions
+ * are loaded. If it is, BZIP2 will be used. Else no compression will be
+ * performed.
+ *
+ * You can then use getCompression() to know the compression chosen.
+ *
+ * If you selected a compression which can't be used (i.e extension not
+ * present), it will be just disabled, and won't produce any error !
+ * As a consequence, getCompression() will return COMPRESS_NONE
+ *
+ * ARCHIVE_DYNAMIC can be passed as the first argument of the constructor, to
+ * create an archive in memory instead of a file. See also: MaxgTar(),
+ * getDynamicArchive() and writeArchive()
+ *
+ * ARCHIVE_RENAMECOMP is a flag that can be multiplied by the compression method
+ * (i.e COMPRESS_AUTO * ARCHIVE_RENAMECOMP). This will add the correct extension
+ * to the archive name, which is useful with COMPRESS_AUTO, ie .bz2 if you gave
+ * COMPRESS_BZIP. See also getCompression(TRUE) which does exactly the
+ * same
+ *
+ * COMPRESS_DETECT does exactly the opposite and try to detect the
+ * compression to use to read the archive depending on its extension. (i.e if
+ * the archive ends with .tar.gz TarLib will try to decompress it with
+ * GZIP). See also setCompression()
+ *
+ * FULL_ARCHIVE is a -1 constant that means "the complete archive" when
+ * extracting. This is explained in Extract()
+ */
+define('COMPRESS_GZIP',1);
+define('COMPRESS_BZIP',2);
+define('COMPRESS_AUTO',3);
+define('COMPRESS_NONE',0);
+define('TARLIB_VERSION','1.2');
+define('FULL_ARCHIVE',-1);
+define('ARCHIVE_DYNAMIC',0);
+define('ARCHIVE_RENAMECOMP',5);
+define('COMPRESS_DETECT',-1);
+
+class TarLib
+{
+ var $_comptype;
+ var $_compzlevel;
+ var $_fp;
+ var $_memdat;
+ var $_nomf;
+ var $_result;
+ var $_initerror;
+
+ /**
+ * constructor, initialize the class
+ *
+ * The constructor initialize the variables and prepare the class for the
+ * archive, and return the object created. Note that you can use multiple
+ * instances of the MaxgTar class, if you call this function another time and
+ * store the object in an other variable.
+ *
+ * In fact, MaxgTar accepts the following arguments (all are optional) :
+ *
+ * filename can be either a file name (absolute or relative). In this
+ * case, it can be used both for reading and writing. You can also open
+ * remote archive if you add a protocole name at the beginning of the file
+ * (ie https://host.dom/archive.tar.gz), but for reading only and if the
+ * directive allow_url_fopen is enabled in PHP.INI (this can be checked with
+ * TarInfo()). If you pass a file that doesn't exist, the script
+ * will try to create it. If the archive already exists and contains files,
+ * you can use Add() to append files.But by default this parameter
+ * is ARCHIVE_DYNAMIC (write only) so the archive is created in memory and
+ * can be sent to a file [writeArchive()] or to the client
+ * [sendClient()]
+ *
+ * compression_type should be a constant that represents a type of
+ * compression, or its integer value. The different values are described in
+ * the constants.
+ *
+ * compression_level is an integer between 1 and 9 (by default) an
+ * represent the GZIP or BZIP compression level. 1 produce fast compression,
+ * and 9 produce smaller files. See the RFC 1952 for more infos.
+ */
+ function tarlib($p_filen = ARCHIVE_DYNAMIC , $p_comptype = COMPRESS_AUTO, $p_complevel = 9)
+ {
+ $this->_initerror = 0;
+ $this->_nomf = $p_filen; $flag=0;
+ if($p_comptype && $p_comptype % 5 == 0){$p_comptype /= ARCHIVE_RENAMECOMP; $flag=1;}
+
+ if($p_complevel > 0 && $p_complevel <= 9) $this->_compzlevel = $p_complevel;
+ else $p_complevel = 9;
+
+ if($p_comptype == COMPRESS_DETECT)
+ {
+ if(strtolower(substr($p_filen,-3)) == '.gz') $p_comptype = COMPRESS_GZIP;
+ elseif(strtolower(substr($p_filen,-4)) == '.bz2') $p_comptype = COMPRESS_BZIP;
+ else $p_comptype = COMPRESS_NONE;
+ }
+
+ switch($p_comptype)
+ {
+ case COMPRESS_GZIP:
+ if(!extension_loaded('zlib')) $this->_initerror = -1;
+ $this->_comptype = COMPRESS_GZIP;
+ break;
+
+ case COMPRESS_BZIP:
+ if(!extension_loaded('bz2')) $this->_inierror = -2;
+ $this->_comptype = COMPRESS_BZIP;
+ break;
+
+ case COMPRESS_AUTO:
+ if(extension_loaded('zlib'))
+ $this->_comptype = COMPRESS_GZIP;
+ elseif(extension_loaded('bz2'))
+ $this->_comptype = COMPRESS_BZIP;
+ else
+ $this->_comptype = COMPRESS_NONE;
+ break;
+
+ default:
+ $this->_comptype = COMPRESS_NONE;
+ }
+
+ if($this->_init_error < 0) $this->_comptype = COMPRESS_NONE;
+
+ if($flag) $this->_nomf.= '.'.$this->getCompression(1);
+ $this->_result = true;
+ }
+
+ /**
+ * Recycle a TAR object.
+ *
+ * This function does exactly the same as TarLib (constructor), except it
+ * returns a status code.
+ */
+ function setArchive($p_name='', $p_comp = COMPRESS_AUTO, $p_level=9)
+ {
+ $this->_CompTar();
+ $this->TarLib($p_name, $p_comp, $p_level);
+ return $this->_result;
+ }
+
+ /**
+ * Get the compression used to generate the archive
+ *
+ * This is a very useful function when you're using dynamical archives.
+ * Besides, if you let the script chose which compression to use, you'll have
+ * a problem when you'll want to send it to the client if you don't know
+ * which compression was used.
+ *
+ * There are two ways to call this function : if you call it without argument
+ * or with FALSE, it will return the compression constants, explained on the
+ * MaxgTar Constants. If you call it with GetExtension on TRUE it will
+ * return the extension without starting dot (ie "tar" or "tar.bz2" or
+ * "tar.gz")
+ *
+ * NOTE: This can be done with the flag ARCHIVE_RENAMECOMP, see the
+ * MaxgTar Constants
+ */
+ function getCompression($ext = false)
+ {
+ $exts = Array('tar','tar.gz','tar.bz2');
+ if($ext) return $exts[$this->_comptype];
+ return $this->_comptype;
+ }
+
+ /**
+ * Change the compression mode.
+ *
+ * This function will change the compression methode to read or write
+ * the archive. See the MaxgTar Constants to see which constants you can use.
+ * It may look strange, but it returns the GZIP compression level.
+ */
+ function setCompression($p_comp = COMPRESS_AUTO)
+ {
+ $this->setArchive($this->_nomf, $p_comp, $this->_compzlevel);
+ return $this->_compzlevel;
+ }
+
+ /**
+ * Returns the compressed dynamic archive.
+ *
+ * When you're working with dynamic archives, use this function to grab
+ * the final compressed archive in a string ready to be put in a SQL table or
+ * in a file.
+ */
+ function getDynamicArchive()
+ {
+ return $this->_encode($this->_memdat);
+ }
+
+ /**
+ * Write a dynamical archive into a file
+ *
+ * This function attempts to write a dynamicaly-genrated archive into
+ * TargetFile on the webserver. It returns a TarErrorStr() status
+ * code.
+ *
+ * To know the extension to add to the file if you're using AUTO_DETECT
+ * compression, you can use getCompression().
+ */
+ function writeArchive($p_archive) {
+ if(!$this->_memdat) return -7;
+ $fp = @fopen($p_archive, 'wb');
+ if(!$fp) return -6;
+
+ fwrite($fp, $this->_memdat);
+ fclose($fp);
+
+ return true;
+ }
+
+ /**
+ * Send a TAR archive to the client browser.
+ *
+ * This function will send an archive to the client, and return a status
+ * code, but can behave differently depending on the arguments you give. All
+ * arguments are optional.
+ *
+ * ClientName is used to specify the archive name to give to the browser. If
+ * you don't give one, it will send the constructor filename or return an
+ * error code in case of dynamical archive.
+ *
+ * FileName is optional and used to send a specific archive. Leave it blank
+ * to send dynamical archives or the current working archive.
+ *
+ * If SendHeaders is enabled (by default), the library will send the HTTP
+ * headers itself before it sends the contents. This headers are :
+ * Content-Type, Content-Disposition, Content-Length and Accept-Range.
+ *
+ * Please note that this function DOES NOT stops the script so don't forget
+ * to exit() to avoid your script sending other data and corrupt the archive.
+ * Another note : for AUTO_DETECT dynamical archives you can know the
+ * extension to add to the name with getCompression()
+ */
+ function sendClient($name = '', $archive = '', $headers = true)
+ {
+ if(!$name && !$this->_nomf) return -9;
+ if(!$archive && !$this->_memdat) return -10;
+ if(!$name) $name = basename($this->_nomf);
+
+ if($archive){ if(!file_exists($archive)) return -11; }
+ else $decoded = $this->getDynamicArchive();
+
+ if($headers)
+ {
+ header('Content-Type: application/x-gtar');
+ header('Content-Disposition: attachment; filename='.basename($name));
+ header('Accept-Ranges: bytes');
+ header('Content-Length: '.($archive ? filesize($archive) : strlen($decoded)));
+ }
+
+ if($archive)
+ {
+ $fp = @fopen($archive,'rb');
+ if(!$fp) return -4;
+
+ while(!feof($fp)) echo fread($fp,2048);
+ }
+ else
+ {
+ echo $decoded;
+ }
+
+ return true;
+ }
+
+ /**
+ * Extract part or totality of the archive.
+ *
+ * This function can extract files from an archive, and returns then a
+ * status codes that can be converted with TarErrorStr() into a
+ * human readable message.
+ *
+ * Only the first argument is required, What and it can be either the
+ * constant FULL_ARCHIVE or an indexed array containing each file you want to
+ * extract.
+ *
+ * To contains the target folder to extract the archive. It is optional and
+ * the default value is '.' which means the current folder. If the target
+ * folder doesn't exist, the script attempts to create it and give it
+ * permissions 0777 by default.
+ *
+ * RemovePath is very usefull when you want to extract files from a subfoler
+ * in the archive to a root folder. For instance, if you have a file in the
+ * archive called some/sub/folder/test.txt and you want to extract it to the
+ * script folder, you can call Extract with To = '.' and RemovePath =
+ * 'some/sub/folder/'
+ *
+ * FileMode is optional and its default value is 0755. It is in fact the UNIX
+ * permission in octal mode (prefixed with a 0) that will be given on each
+ * extracted file.
+ */
+ function Extract($p_what = FULL_ARCHIVE, $p_to = '.', $p_remdir='', $p_mode = 0755)
+ {
+ if(!$this->_OpenRead()) return -4;
+// if(!@is_dir($p_to)) if(!@mkdir($p_to, 0777)) return -8; --CS
+ if(!@is_dir($p_to)) if(!$this->_dirApp($p_to)) return -8; //--CS (route through correct dir fn)
+
+ $ok = $this->_extractList($p_to, $p_what, $p_remdir, $p_mode);
+ $this->_CompTar();
+
+ return $ok;
+ }
+
+ /**
+ * Create a new package with the given files
+ *
+ * This function will attempt to create a new archive with global headers
+ * then add the given files into. If the archive is a real file, the
+ * contents are written directly into the file, if it is a dynamic archive
+ * contents are only stored in memory. This function should not be used to
+ * add files to an existing archive, you should use Add() instead.
+ *
+ * The FileList actually supports three different modes :
+ *
+ * - You can pass a string containing filenames separated by pipes '|'.
+ * In this case the file are read from the webserver filesystem and the
+ * root folder is the folder where the script using the MaxgTar is called.
+ *
+ * - You can also give a unidimensional indexed array containing the
+ * filenames. The behaviour for the content reading is the same that a
+ * '|'ed string.
+ *
+ * - The more useful usage is to pass bidimensional arrays, where the
+ * first element contains the filename and the second contains the file
+ * contents. You can even add empty folders to the package if the filename
+ * has a leading '/'. Once again, have a look at the exemples to understand
+ * better.
+ *
+ * Note you can also give arrays with both dynamic contents and static files.
+ *
+ * The optional parameter RemovePath can be used to delete a part of the tree
+ * of the filename you're adding, for instance if you're adding in the root
+ * of a package a file that is stored somewhere in the server tree.
+ *
+ * On the contrary the parameter AddPath can be used to add a prefix folder
+ * to the file you store. Note also that the RemovePath is applied before the
+ * AddPath is added, so it HAS a sense to use both parameters together.
+ */
+ function Create($p_filelist,$p_add='',$p_rem='')
+ {
+ if(!$fl = $this->_fetchFilelist($p_filelist)) return -5;
+ if(!$this->_OpenWrite()) return -6;
+
+ $ok = $this->_addFileList($fl,$p_add,$p_rem);
+
+ if($ok) $this->_writeFooter();
+ else{ $this->_CompTar(); @unlink($this->_nomf); }
+
+ return $ok;
+ }
+
+ /**
+ * Add files to an existing package.
+ *
+ * This function does exactly the same than Create() exept it
+ * will append the given files at the end of the archive. Please not the is
+ * safe to call Add() on a newly created archive whereas the
+ * contrary will fail !
+ *
+ * This function returns a status code, you can use TarErrorStr() on
+ * it to get the human-readable description of the error.
+ */
+ function Add($p_filelist, $p_add = '', $p_rem = '') { if (($this->_nomf
+!= ARCHIVE_DYNAMIC && @is_file($this->_nomf)) || ($this->_nomf ==
+ARCHIVE_DYNAMIC && !$this->_memdat)) return $this->Create($p_filelist,
+$p_add, $p_rem);
+
+ if(!$fl = $this->_fetchFilelist($p_filelist)) return -5;
+ return $this->_append($fl, $p_add, $p_rem);
+ }
+
+ /**
+ * Read the contents of a TAR archive
+ *
+ * This function attempts to get the list of the files stored in the
+ * archive, and return either an error code or an indexed array of
+ * associative array containing for each file the following informations :
+ *
+ * checksum Tar Checksum of the file
+ * filename The full name of the stored file (up to 100 c.)
+ * mode UNIX permissions in DECIMAL, not octal
+ * uid The Owner ID
+ * gid The Group ID
+ * size Uncompressed filesize
+ * mtime Timestamp of last modification
+ * typeflag Empty for files, set for folders
+ * link For the links, did you guess it ?
+ * uname Owner name
+ * gname Group name
+ */
+ function ListContents()
+ {
+ if(!$this->_nomf) return -3;
+ if(!$this->_OpenRead()) return -4;
+
+ $result = Array();
+
+ while ($dat = $this->_read(512))
+ {
+ $dat = $this->_readHeader($dat);
+ if(!is_array($dat)) continue;
+
+ $this->_seek(ceil($dat['size']/512)*512,1);
+ $result[] = $dat;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Convert a status code into a human readable message
+ *
+ * Some MaxgTar functions like Create(), Add() ... return numerical
+ * status code. You can pass them to this function to grab their english
+ * equivalent.
+ */
+ function TarErrorStr($i)
+ {
+ $ecodes = Array(
+ 1 => true,
+ 0 => "Undocumented error",
+ -1 => "Can't use COMPRESS_GZIP compression : ZLIB extensions are not loaded !",
+ -2 => "Can't use COMPRESS_BZIP compression : BZ2 extensions are not loaded !",
+ -3 => "You must set a archive file to read the contents !",
+ -4 => "Can't open the archive file for read !",
+ -5 => "Invalide file list !",
+ -6 => "Can't open the archive in write mode !",
+ -7 => "There is no ARCHIVE_DYNAMIC to write !",
+ -8 => "Can't create the directory to extract files !",
+ -9 => "Please pass a archive name to send if you made created an ARCHIVE_DYNAMIC !",
+ -10 => "You didn't pass an archive filename and there is no stored ARCHIVE_DYNAMIC !",
+ -11 => "Given archive doesn't exist !"
+ );
+
+ return isset($ecodes[$i]) ? $ecodes[$i] : $ecodes[0];
+ }
+
+ /**
+ * Display informations about the MaxgTar Class.
+ *
+ * This function will display vaious informations about the server
+ * MaxgTar is running on.
+ *
+ * The optional parameter DispHeaders is used to generate a full page with
+ * HTML headers (TRUE by default) or just the table with the informations
+ * (FALSE). Note that the HTML page generated is verified compatible XHTML
+ * 1.0, but not HTML 4.0 compatible.
+ */
+ function TarInfo($headers = true)
+ {
+ if($headers)
+ {
+ ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+
+<head>
+ <title>MaxgComp TAR</title>
+ <style type="text/css">
+ body{margin: 20px;}
+ body,td{font-size:10pt;font-family: arial;}
+ </style>
+ <meta name="Author" content="The Maxg Network, http://maxg.info" />
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+</head>
+
+<body bgcolor="#EFEFEF">
+<?php
+ }
+?>
+<table border="0" align="center" width="500" cellspacing="4" cellpadding="5" style="border:1px dotted black;">
+<tr>
+ <td align="center" bgcolor="#DFDFEF" colspan="3" style="font-size:15pt;font-color:#330000;border:1px solid black;">MaxgComp TAR</td>
+</tr>
+<tr>
+ <td colspan="2" bgcolor="#EFEFFE" style="border:1px solid black;">This software was created by the Maxg Network, <a href="http://maxg.info" target="_blank" style="text-decoration:none;color:#333366;">http://maxg.info</a>
+ <br />It is distributed under the GNU <a href="http://www.gnu.org/copyleft/lesser.html" target="_blank" style="text-decoration:none;color:#333366;">Lesser General Public License</a>
+ <br />You can find the documentation of this class <a href="http://docs.maxg.info" target="_blank" style="text-decoration:none;color:#333366;">here</a></td>
+ <td width="60" bgcolor="#EFEFFE" style="border:1px solid black;" align="center"><img src="http://img.maxg.info/menu/tar.gif" border="0" alt="MaxgComp TAR" /></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">MaxgComp TAR version</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=TARLIB_VERSION?></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">ZLIB extensions</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=(extension_loaded('zlib') ? '<b>Yes</b>' : '<i>No</i>')?></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">BZ2 extensions</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=(extension_loaded('bz2') ? '<b>Yes</b>' : '<i>No</i>')?></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">Allow URL fopen</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=(ini_get('allow_url_fopen') ? '<b>Yes</b>' : '<i>No</i>')?></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">Time limit</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=ini_get('max_execution_time')?></td>
+</tr>
+<tr>
+ <td width="50%" align="center" style="border:1px solid black;" bgcolor="#DFDFEF">PHP Version</td>
+ <td colspan="2" align="center" bgcolor="#EFEFFE" style="border:1px solid black;"><?=phpversion()?></td>
+</tr>
+<tr>
+ <td colspan="3" align="center" bgcolor="#EFEFFE" style="border:1px solid black;">
+ <i>Special thanks to &laquo; Vincent Blavet &raquo; for his PEAR::Archive_Tar class</i>
+ </td>
+</tr>
+</table>
+<?php
+ if($headers) echo '</body></html>';
+ }
+
+ function _seek($p_flen, $tell=0)
+ {
+ if($this->_nomf === ARCHIVE_DYNAMIC)
+ $this->_memdat=substr($this->_memdat,0,($tell ? strlen($this->_memdat) : 0) + $p_flen);
+ elseif($this->_comptype == COMPRESS_GZIP)
+ @gzseek($this->_fp, ($tell ? @gztell($this->_fp) : 0)+$p_flen);
+ elseif($this->_comptype == COMPRESS_BZIP)
+ @fseek($this->_fp, ($tell ? @ftell($this->_fp) : 0)+$p_flen);
+ else
+ @fseek($this->_fp, ($tell ? @ftell($this->_fp) : 0)+$p_flen);
+ }
+
+ function _OpenRead()
+ {
+ if($this->_comptype == COMPRESS_GZIP)
+ $this->_fp = @gzopen($this->_nomf, 'rb');
+ elseif($this->_comptype == COMPRESS_BZIP)
+ $this->_fp = @bzopen($this->_nomf, 'rb');
+ else
+ $this->_fp = @fopen($this->_nomf, 'rb');
+
+ return ($this->_fp ? true : false);
+ }
+
+ function _OpenWrite($add = 'w')
+ {
+ if($this->_nomf === ARCHIVE_DYNAMIC) return true;
+
+ if($this->_comptype == COMPRESS_GZIP)
+ $this->_fp = @gzopen($this->_nomf, $add.'b'.$this->_compzlevel);
+ elseif($this->_comptype == COMPRESS_BZIP)
+ $this->_fp = @bzopen($this->_nomf, $add.'b');
+ else
+ $this->_fp = @fopen($this->_nomf, $add.'b');
+
+ return ($this->_fp ? true : false);
+ }
+
+ function _CompTar()
+ {
+ if($this->_nomf === ARCHIVE_DYNAMIC || !$this->_fp) return;
+
+ if($this->_comptype == COMPRESS_GZIP) @gzclose($this->_fp);
+ elseif($this->_comptype == COMPRESS_BZIP) @bzclose($this->_fp);
+ else @fclose($this->_fp);
+ }
+
+ function _read($p_len)
+ {
+ if($this->_comptype == COMPRESS_GZIP)
+ return @gzread($this->_fp,$p_len);
+ elseif($this->_comptype == COMPRESS_BZIP)
+ return @bzread($this->_fp,$p_len);
+ else
+ return @fread($this->_fp,$p_len);
+ }
+
+ function _write($p_data)
+ {
+ if($this->_nomf === ARCHIVE_DYNAMIC) $this->_memdat .= $p_data;
+ elseif($this->_comptype == COMPRESS_GZIP)
+ return @gzwrite($this->_fp,$p_data);
+
+ elseif($this->_comptype == COMPRESS_BZIP)
+ return @bzwrite($this->_fp,$p_data);
+
+ else
+ return @fwrite($this->_fp,$p_data);
+ }
+
+ function _encode($p_dat)
+ {
+ if($this->_comptype == COMPRESS_GZIP)
+ return gzencode($p_dat, $this->_compzlevel);
+ elseif($this->_comptype == COMPRESS_BZIP)
+ return bzcompress($p_dat, $this->_compzlevel);
+ else return $p_dat;
+ }
+
+ function _readHeader($p_dat)
+ {
+ if (!$p_dat || strlen($p_dat) != 512) return false;
+
+ for ($i=0, $chks=0; $i<148; $i++)
+ $chks += ord($p_dat[$i]);
+
+ for ($i=156,$chks+=256; $i<512; $i++)
+ $chks += ord($p_dat[$i]);
+
+ $headers = @unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1typeflag/a100link/a6magic/a2version/a32uname/a32gname/a8devmajor/a8devminor", $p_dat);
+ if(!$headers) return false;
+
+ $return['checksum'] = OctDec(trim($headers['checksum']));
+ if ($return['checksum'] != $chks) return false;
+
+ $return['filename'] = trim($headers['filename']);
+ $return['mode'] = OctDec(trim($headers['mode']));
+ $return['uid'] = OctDec(trim($headers['uid']));
+ $return['gid'] = OctDec(trim($headers['gid']));
+ $return['size'] = OctDec(trim($headers['size']));
+ $return['mtime'] = OctDec(trim($headers['mtime']));
+ $return['typeflag'] = $headers['typeflag'];
+ $return['link'] = trim($headers['link']);
+ $return['uname'] = trim($headers['uname']);
+ $return['gname'] = trim($headers['gname']);
+
+ return $return;
+ }
+
+ function _fetchFilelist($p_filelist)
+ {
+ if(!$p_filelist || (is_array($p_filelist) && !@count($p_filelist))) return false;
+
+ if(is_string($p_filelist))
+ {
+ $p_filelist = explode('|',$p_filelist);
+ if(!is_array($p_filelist)) $p_filelist = Array($p_filelist);
+ }
+
+ return $p_filelist;
+ }
+
+ function _addFileList($p_fl, $p_addir, $p_remdir)
+ {
+ foreach($p_fl as $file)
+ {
+ if(($file == $this->_nomf && $this->_nomf != ARCHIVE_DYNAMIC) || !$file || (!file_exists($file) && !is_array($file)))
+ continue;
+
+ if (!$this->_addFile($file, $p_addir, $p_remdir))
+ continue;
+
+ if (@is_dir($file))
+ {
+ $d = @opendir($file);
+
+ if(!$d) continue;
+ readdir($d); readdir($d);
+
+ while($f = readdir($d))
+ {
+ if($file != ".") $tmplist[0] = "$file/$f";
+ else $tmplist[0] = $d;
+
+ $this->_addFileList($tmplist, $p_addir, $p_remdir);
+ }
+
+ closedir($d); unset($tmplist,$f);
+ }
+ }
+ return true;
+ }
+
+ function _addFile($p_fn, $p_addir = '', $p_remdir = '')
+ {
+ if(is_array($p_fn)) list($p_fn, $data) = $p_fn;
+ $sname = $p_fn;
+
+ if($p_remdir)
+ {
+ if(substr($p_remdir,-1) != '/') $p_remdir .= "/";
+
+ if(substr($sname, 0, strlen($p_remdir)) == $p_remdir)
+ $sname = substr($sname, strlen($p_remdir));
+ }
+
+ if($p_addir) $sname = $p_addir.(substr($p_addir,-1) == '/' ? '' : "/").$sname;
+
+ if(strlen($sname) > 99) return;
+
+ if(@is_dir($p_fn))
+ {
+ if(!$this->_writeFileHeader($p_fn, $sname)) return false;
+ }
+ else
+ {
+ if(!$data)
+ {
+ $fp = fopen($p_fn, 'rb');
+ if(!$fp) return false;
+ }
+
+ if(!$this->_writeFileHeader($p_fn, $sname, ($data ? strlen($data) : false))) return false;
+
+ if(!$data)
+ {
+ while(!feof($fp))
+ {
+ $packed = pack("a512", fread($fp,512));
+ $this->_write($packed);
+ }
+ fclose($fp);
+ }
+ else
+ {
+ for($s = 0; $s < strlen($data); $s += 512)
+ $this->_write(pack("a512",substr($data,$s,512)));
+ }
+ }
+
+ return true;
+ }
+
+ function _writeFileHeader($p_file, $p_sname, $p_data=false)
+ {
+ if(!$p_data)
+ {
+ if (!$p_sname) $p_sname = $p_file;
+ $p_sname = $this->_pathTrans($p_sname);
+
+ $h_info = stat($p_file);
+ $h[0] = sprintf("%6s ", DecOct($h_info[4]));
+ $h[] = sprintf("%6s ", DecOct($h_info[5]));
+ $h[] = sprintf("%6s ", DecOct(fileperms($p_file)));
+ clearstatcache();
+ $h[] = sprintf("%11s ", DecOct(filesize($p_file)));
+ $h[] = sprintf("%11s", DecOct(filemtime($p_file)));
+
+ $dir = @is_dir($p_file) ? '5' : '';
+ }
+ else
+ {
+ $dir = '';
+ $p_data = sprintf("%11s ", DecOct($p_data));
+ $time = sprintf("%11s ", DecOct(time()));
+ $h = Array(" 0 "," 0 "," 40777 ",$p_data,$time);
+ }
+
+ $data_first = pack("a100a8a8a8a12A12", $p_sname, $h[2], $h[0], $h[1], $h[3], $h[4]);
+ $data_last = pack("a1a100a6a2a32a32a8a8a155a12", $dir, '', '', '', '', '', '', '', '', "");
+
+ for ($i=0,$chks=0; $i<148; $i++)
+ $chks += ord($data_first[$i]);
+
+ for ($i=156, $chks+=256, $j=0; $i<512; $i++, $j++)
+ $chks += ord($data_last[$j]);
+
+ $this->_write($data_first);
+
+ $chks = pack("a8",sprintf("%6s ", DecOct($chks)));
+ $this->_write($chks.$data_last);
+
+ return true;
+ }
+
+ function _append($p_filelist, $p_addir="", $p_remdir="")
+ {
+ if(!$this->_fp) if(!$this->_OpenWrite('a')) return -6;
+
+ if($this->_nomf == ARCHIVE_DYNAMIC)
+ {
+ $s = strlen($this->_memdat);
+ $this->_memdat = substr($this->_memdat,0,-512);
+ }
+ else
+ {
+ $s = filesize($this->_nomf);
+ $this->_seek($s-512);
+ }
+
+ $ok = $this->_addFileList($p_filelist, $p_addir, $p_remdir);
+ $this->_writeFooter();
+
+ return $ok;
+ }
+
+ function _pathTrans($p_dir)
+ {
+ if ($p_dir)
+ {
+ $subf = explode("/", $p_dir); $r='';
+
+ for ($i=count($subf)-1; $i>=0; $i--)
+ {
+ if ($subf[$i] == ".") {}
+ else if ($subf[$i] == "..") $i--;
+ else if (!$subf[$i] && $i!=count($subf)-1 && $i) {}
+ else $r = $subf[$i].($i!=(count($subf)-1) ? "/".$r : "");
+ }
+ }
+ return $r;
+ }
+
+ function _writeFooter()
+ {
+ $this->_write(pack("a512", ""));
+ }
+
+ function _extractList($p_to, $p_files, $p_remdir, $p_mode = 0755)
+ {
+ if (!$p_to || ($p_to[0]!="/"&&substr($p_to,0,3)!="../"&&substr($p_to,1,3)!=":\\"&&substr($p_to,1,2)!=":/")) /*" // <- PHP Coder bug */
+ $p_to = "./$p_to";
+
+ if ($p_remdir && substr($p_remdir,-1)!='/') $p_remdir .= '/';
+ $p_remdirs = strlen($p_remdir);
+ while($dat = $this->_read(512))
+ {
+ $headers = $this->_readHeader($dat);
+ if(!$headers['filename']) continue;
+
+ if($p_files == -1 || $p_files[0] == -1) $extract = true;
+ else
+ {
+ $extract = false;
+
+ foreach($p_files as $f)
+ {
+ if(substr($f,-1) == "/") {
+ if((strlen($headers['filename']) > strlen($f)) && (substr($headers['filename'],0,strlen($f))==$f)) {
+ $extract = true; break;
+ }
+ }
+ elseif($f == $headers['filename']) {
+ $extract = true; break;
+ }
+ }
+ }
+
+ if ($extract)
+ {
+ $det[] = $headers;
+ if ($p_remdir && substr($headers['filename'],0,$p_remdirs)==$p_remdir)
+ $headers['filename'] = substr($headers['filename'],$p_remdirs);
+
+ if($headers['filename'].'/' == $p_remdir && $headers['typeflag']=='5') continue;
+
+ if ($p_to != "./" && $p_to != "/")
+ {
+ while($p_to{-1}=="/") $p_to = substr($p_to,0,-1);
+
+ if($headers['filename']{0} == "/")
+ $headers['filename'] = $p_to.$headers['filename'];
+ else
+ $headers['filename'] = $p_to."/".$headers['filename'];
+ }
+
+ $ok = $this->_dirApp($headers['typeflag']=="5" ? $headers['filename'] : dirname($headers['filename']));
+ if($ok < 0) return $ok;
+
+ if (!$headers['typeflag'])
+ {
+ if (!$fp = @fopen($headers['filename'], "wb")) return -6;
+ $n = floor($headers['size']/512);
+
+ for ($i=0; $i<$n; $i++) fwrite($fp, $this->_read(512),512);
+ if (($headers['size'] % 512) != 0) fwrite($fp, $this->_read(512), $headers['size'] % 512);
+
+ fclose($fp);
+ touch($headers['filename'], $headers['mtime']);
+ chmod($headers['filename'], $p_mode);
+ }
+ else
+ {
+ $this->_seek(ceil($headers['size']/512)*512,1);
+ }
+ }else $this->_seek(ceil($headers['size']/512)*512,1);
+ }
+ return $det;
+ }
+
+function _dirApp($d)
+ {
+// map to dokuwiki function (its more robust)
+ return io_mkdir_p($d);
+/*
+ $d = explode('/', $d);
+ $base = '';
+
+ foreach($d as $f)
+ {
+ if(!is_dir($base.$f))
+ {
+ $ok = @mkdir($base.$f, 0777);
+ if(!$ok) return false;
+ }
+ $base .= "$f/";
+ }
+*/
+ }
+
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php
new file mode 100644
index 000000000..836e9d9e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php
@@ -0,0 +1,475 @@
+<?php
+
+/**
+ * @author bouchon
+ * @link http://dev.maxg.info
+ * @link http://forum.maxg.info
+ *
+ * Modified for Dokuwiki
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+class ZipLib
+{
+
+ var $datasec, $ctrl_dir = array();
+ var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
+ var $old_offset = 0; var $dirs = Array(".");
+
+ function get_List($zip_name)
+ {
+ $zip = @fopen($zip_name, 'rb');
+ if(!$zip) return(0);
+ $centd = $this->ReadCentralDir($zip,$zip_name);
+
+ @rewind($zip);
+ @fseek($zip, $centd['offset']);
+
+ for ($i=0; $i<$centd['entries']; $i++)
+ {
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i;$info['filename'] = $header['filename'];
+ $info['stored_filename'] = $header['stored_filename'];
+ $info['size'] = $header['size'];$info['compressed_size']=$header['compressed_size'];
+ $info['crc'] = strtoupper(dechex( $header['crc'] ));
+ $info['mtime'] = $header['mtime']; $info['comment'] = $header['comment'];
+ $info['folder'] = ($header['external']==0x41FF0010||$header['external']==16)?1:0;
+ $info['index'] = $header['index'];$info['status'] = $header['status'];
+ $ret[]=$info; unset($header);
+ }
+ return $ret;
+ }
+
+ function Add($files,$compact)
+ {
+ if(!is_array($files[0])) $files=Array($files);
+
+ for($i=0;$files[$i];$i++){
+ $fn = $files[$i];
+ if(!in_Array(dirname($fn[0]),$this->dirs))
+ $this->add_Dir(dirname($fn[0]));
+ if(basename($fn[0]))
+ $ret[basename($fn[0])]=$this->add_File($fn[1],$fn[0],$compact);
+ }
+ return $ret;
+ }
+
+ /**
+ * Zips recursively the $folder directory, from the $basedir directory
+ */
+ function Compress($folder, $basedir=null, $parent=null)
+ {
+ $full_path = $basedir."/".$parent.$folder;
+ $zip_path = $parent.$folder;
+ if ($zip_path) {
+ $zip_path .= "/";
+ $this->add_dir($zip_path);
+ }
+ $dir = new DirectoryIterator($full_path);
+ foreach($dir as $file) {
+ if(!$file->isDot()) {
+ $filename = $file->getFilename();
+ if($file->isDir()) {
+ $this->Compress($filename, $basedir, $zip_path);
+ } else {
+ $content = join('', file($full_path.'/'.$filename));
+ $this->add_File($content, $zip_path.$filename);
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the Zip file
+ */
+ function get_file()
+ {
+ $data = implode('', $this -> datasec);
+ $ctrldir = implode('', $this -> ctrl_dir);
+
+ return $data . $ctrldir . $this -> eof_ctrl_dir .
+ pack('v', sizeof($this -> ctrl_dir)).pack('v', sizeof($this -> ctrl_dir)).
+ pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";
+ }
+
+ function add_dir($name)
+ {
+ $name = str_replace("\\", "/", $name);
+ $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+
+ $fr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
+ $fr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0);
+ $this -> datasec[] = $fr;
+
+ $new_offset = strlen(implode("", $this->datasec));
+
+ $cdrec = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+ $cdrec .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
+ $cdrec .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 );
+ $ext = "\xff\xff\xff\xff";
+ $cdrec .= pack("V", 16 ).pack("V", $this -> old_offset ).$name;
+
+ $this -> ctrl_dir[] = $cdrec;
+ $this -> old_offset = $new_offset;
+ $this -> dirs[] = $name;
+ }
+
+ /**
+ * Add a file named $name from a string $data
+ */
+ function add_File($data, $name, $compact = 1)
+ {
+ $name = str_replace('\\', '/', $name);
+ $dtime = dechex($this->DosTime());
+
+ $hexdtime = '\x' . $dtime[6] . $dtime[7].'\x'.$dtime[4] . $dtime[5]
+ . '\x' . $dtime[2] . $dtime[3].'\x'.$dtime[0].$dtime[1];
+ eval('$hexdtime = "' . $hexdtime . '";');
+
+ if($compact)
+ $fr = "\x50\x4b\x03\x04\x14\x00\x00\x00\x08\x00".$hexdtime;
+ else $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00".$hexdtime;
+ $unc_len = strlen($data); $crc = crc32($data);
+
+ if($compact){
+ $zdata = gzcompress($data); $c_len = strlen($zdata);
+ $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
+ }else{
+ $zdata = $data;
+ }
+ $c_len=strlen($zdata);
+ $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+ $fr .= pack('v', strlen($name)).pack('v', 0).$name.$zdata;
+
+ $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+
+ $this -> datasec[] = $fr;
+ $new_offset = strlen(implode('', $this->datasec));
+ if($compact)
+ $cdrec = "\x50\x4b\x01\x02\x00\x00\x14\x00\x00\x00\x08\x00";
+ else $cdrec = "\x50\x4b\x01\x02\x14\x00\x0a\x00\x00\x00\x00\x00";
+ $cdrec .= $hexdtime.pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+ $cdrec .= pack('v', strlen($name) ).pack('v', 0 ).pack('v', 0 );
+ $cdrec .= pack('v', 0 ).pack('v', 0 ).pack('V', 32 );
+ $cdrec .= pack('V', $this -> old_offset );
+
+ $this -> old_offset = $new_offset;
+ $cdrec .= $name;
+ $this -> ctrl_dir[] = $cdrec;
+ return true;
+ }
+
+ function DosTime() {
+ $timearray = getdate();
+ if ($timearray['year'] < 1980) {
+ $timearray['year'] = 1980; $timearray['mon'] = 1;
+ $timearray['mday'] = 1; $timearray['hours'] = 0;
+ $timearray['minutes'] = 0; $timearray['seconds'] = 0;
+ }
+ return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) |
+ ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
+ }
+
+ /**
+ * Extract a zip file $zn to the $to directory
+ */
+ function Extract ( $zn, $to, $index = Array(-1) )
+ {
+ if(!@is_dir($to)) $this->_mkdir($to);
+ $ok = 0; $zip = @fopen($zn,'rb');
+ if(!$zip) return(-1);
+ $cdir = $this->ReadCentralDir($zip,$zn);
+ $pos_entry = $cdir['offset'];
+
+ if(!is_array($index)){ $index = array($index); }
+ for($i=0; isset($index[$i]);$i++){
+ if(intval($index[$i])!=$index[$i]||$index[$i]>$cdir['entries'])
+ return(-1);
+ }
+
+ for ($i=0; $i<$cdir['entries']; $i++)
+ {
+ @fseek($zip, $pos_entry);
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i; $pos_entry = ftell($zip);
+ @rewind($zip); fseek($zip, $header['offset']);
+ if(in_array("-1",$index)||in_array($i,$index))
+ $stat[$header['filename']]=$this->ExtractFile($header, $to, $zip);
+
+ }
+ fclose($zip);
+ return $stat;
+ }
+
+ function ReadFileHeader($zip, $header)
+ {
+ $binary_data = fread($zip, 30);
+ $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);
+
+ $header['filename'] = fread($zip, $data['filename_len']);
+ if ($data['extra_len'] != 0) {
+ $header['extra'] = fread($zip, $data['extra_len']);
+ } else { $header['extra'] = ''; }
+
+ $header['compression'] = $data['compression'];
+ foreach (array('size','compressed_size','crc') as $hd) { // On ODT files, these headers are 0. Keep the previous value.
+ if ($data[$hd] != 0) $header[$hd] = $data[$hd];
+ }
+ $header['flag'] = $data['flag'];
+ $header['mdate'] = $data['mdate'];$header['mtime'] = $data['mtime'];
+
+ if ($header['mdate'] && $header['mtime']){
+ $hour=($header['mtime']&0xF800)>>11;$minute=($header['mtime']&0x07E0)>>5;
+ $seconde=($header['mtime']&0x001F)*2;$year=(($header['mdate']&0xFE00)>>9)+1980;
+ $month=($header['mdate']&0x01E0)>>5;$day=$header['mdate']&0x001F;
+ $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
+ }else{$header['mtime'] = time();}
+
+ $header['stored_filename'] = $header['filename'];
+ $header['status'] = "ok";
+ return $header;
+ }
+
+ function ReadCentralFileHeaders($zip){
+ $binary_data = fread($zip, 46);
+ $header = unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $binary_data);
+
+ if ($header['filename_len'] != 0)
+ $header['filename'] = fread($zip,$header['filename_len']);
+ else $header['filename'] = '';
+
+ if ($header['extra_len'] != 0)
+ $header['extra'] = fread($zip, $header['extra_len']);
+ else $header['extra'] = '';
+
+ if ($header['comment_len'] != 0)
+ $header['comment'] = fread($zip, $header['comment_len']);
+ else $header['comment'] = '';
+
+ if ($header['mdate'] && $header['mtime'])
+ {
+ $hour = ($header['mtime'] & 0xF800) >> 11;
+ $minute = ($header['mtime'] & 0x07E0) >> 5;
+ $seconde = ($header['mtime'] & 0x001F)*2;
+ $year = (($header['mdate'] & 0xFE00) >> 9) + 1980;
+ $month = ($header['mdate'] & 0x01E0) >> 5;
+ $day = $header['mdate'] & 0x001F;
+ $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
+ } else {
+ $header['mtime'] = time();
+ }
+ $header['stored_filename'] = $header['filename'];
+ $header['status'] = 'ok';
+ if (substr($header['filename'], -1) == '/')
+ $header['external'] = 0x41FF0010;
+ return $header;
+ }
+
+ function ReadCentralDir($zip,$zip_name)
+ {
+ $size = filesize($zip_name);
+ if ($size < 277) $maximum_size = $size;
+ else $maximum_size=277;
+
+ @fseek($zip, $size-$maximum_size);
+ $pos = ftell($zip); $bytes = 0x00000000;
+
+ while ($pos < $size)
+ {
+ $byte = @fread($zip, 1);
+ $bytes=(($bytes << 8) & 0xFFFFFFFF) | Ord($byte);
+ if ($bytes == 0x504b0506){ $pos++; break; } $pos++;
+ }
+
+ $data=unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',
+ fread($zip, 18));
+
+ if ($data['comment_size'] != 0)
+ $centd['comment'] = fread($zip, $data['comment_size']);
+ else $centd['comment'] = ''; $centd['entries'] = $data['entries'];
+ $centd['disk_entries'] = $data['disk_entries'];
+ $centd['offset'] = $data['offset'];$centd['disk_start'] = $data['disk_start'];
+ $centd['size'] = $data['size']; $centd['disk'] = $data['disk'];
+ return $centd;
+ }
+
+ function ExtractFile($header,$to,$zip)
+ {
+ $header = $this->readfileheader($zip, $header);
+
+ if(substr($to,-1)!="/") $to.="/";
+ if(substr($header['filename'],-1)=="/")
+ {
+// @mkdir($to.$header['filename']); --CS
+ $this->_mkdir($to.$header['filename']); //-- CS
+ return +2;
+ }
+
+// $pth = explode("/",dirname($header['filename']));
+// for($i=0,$tmp="";isset($pth[$i]);$i++){
+// if(!$pth[$i]) continue;
+// if(!is_dir($to.$tmp.$pth[$i])) @mkdir($to.$pth[$i],0777);
+// $tmp.=$pth[$i]."/";
+// }
+ if (!$this->_mkdir($to.dirname($header['filename']))) return (-1); //--CS
+
+ if (!array_key_exists("external", $header) || (!($header['external']==0x41FF0010)&&!($header['external']==16)))
+ {
+ if ($header['compression']==0)
+ {
+ $fp = @fopen($to.$header['filename'], 'wb');
+ if(!$fp) return(-1);
+ $size = $header['compressed_size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = fread($zip, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+ fclose($fp);
+ touch($to.$header['filename'], $header['mtime']);
+
+ }else{
+ if (!is_dir(dirname($to.$header['filename']))) $this->_mkdir(dirname($to.$header['filename'])); //-CS
+ $fp = fopen($to.$header['filename'].'.gz','wb');
+ if(!$fp) return(-1);
+ $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']),
+ Chr(0x00), time(), Chr(0x00), Chr(3));
+
+ fwrite($fp, $binary_data, 10);
+ $size = $header['compressed_size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 1024 ? $size : 1024);
+ $buffer = fread($zip, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+
+ $binary_data = pack('VV', $header['crc'], $header['size']);
+ fwrite($fp, $binary_data,8); fclose($fp);
+
+ $gzp = @gzopen($to.$header['filename'].'.gz','rb');
+ if(!$gzp){
+ @gzclose($gzp); @unlink($to.$header['filename']);
+ die("Archive is compressed whereas ZLIB is not enabled.");
+ }
+ $fp = @fopen($to.$header['filename'],'wb');
+ if(!$fp) return(-1);
+ $size = $header['size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = gzread($gzp, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+ fclose($fp); gzclose($gzp);
+
+ touch($to.$header['filename'], $header['mtime']);
+ @unlink($to.$header['filename'].'.gz');
+
+ }}
+ return true;
+ }
+
+ //--CS start
+ // centralize mkdir calls and use dokuwiki io functions
+ function _mkdir($d) {
+ return io_mkdir_p($d);
+ }
+ //--CS end
+
+
+ function ExtractStr($zn, $name) {
+ $ok = 0;
+ $zip = @fopen($zn,'rb');
+ if(!$zip) return(NULL);
+ $cdir = $this->ReadCentralDir($zip,$zn);
+ $pos_entry = $cdir['offset'];
+
+ for ($i=0; $i<$cdir['entries']; $i++)
+ {
+ @fseek($zip, $pos_entry);
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i;
+ $pos_entry = ftell($zip);
+ @rewind($zip);
+ fseek($zip, $header['offset']);
+ if ($name == $header['stored_filename'] || $name == $header['filename']) {
+ $str = $this->ExtractStrFile($header, $zip);
+ fclose($zip);
+ return $str;
+ }
+
+ }
+ fclose($zip);
+ return null;
+ }
+
+ function ExtractStrFile($header,$zip) {
+ $hdr = $this->readfileheader($zip);
+ $binary_data = '';
+ if (!($header['external']==0x41FF0010) && !($header['external']==16))
+ {
+ if ($header['compression']==0)
+ {
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = fread($zip, $read_size);
+ $binary_data .= pack('a'.$read_size, $buffer);
+ $size -= $read_size;
+ }
+ return $binary_data;
+ } else {
+ $size = $header['compressed_size'];
+ if ($size == 0) {
+ return '';
+ }
+ //Just in case
+ if ($size > ($this->_ret_bytes(ini_get('memory_limit'))/2)) {
+ die("Compressed file is to huge to be uncompress in memory.");
+ }
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = fread($zip, $read_size);
+ $binary_data .= pack('a'.$read_size, $buffer);
+ $size -= $read_size;
+ }
+ $str = gzinflate($binary_data, $header['size']);
+ if ($header['crc'] == crc32($str)) {
+ return $str;
+ } else {
+ die("Crc Error");
+ }
+ }
+ }
+ return NULL;
+ }
+
+ function _ret_bytes($val) {
+ $val = trim($val);
+ $last = $val{strlen($val)-1};
+ switch($last) {
+ case 'k':
+ case 'K':
+ return (int) $val * 1024;
+ break;
+ case 'm':
+ case 'M':
+ return (int) $val * 1048576;
+ break;
+ default:
+ return $val;
+ }
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/actions.php b/mod/dokuwiki/vendors/dokuwiki/inc/actions.php
new file mode 100644
index 000000000..ed3c12666
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/actions.php
@@ -0,0 +1,639 @@
+<?php
+/**
+ * DokuWiki Actions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/template.php');
+
+
+/**
+ * Call the needed action handlers
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @triggers ACTION_ACT_PREPROCESS
+ * @triggers ACTION_HEADERS_SEND
+ */
+function act_dispatch(){
+ global $INFO;
+ global $ACT;
+ global $ID;
+ global $QUERY;
+ global $lang;
+ global $conf;
+ global $license;
+
+ $preact = $ACT;
+
+ //error_log("dokuact:".$ACT);
+ // give plugins an opportunity to process the action
+ $evt = new Doku_Event('ACTION_ACT_PREPROCESS',$ACT);
+ if ($evt->advise_before()) {
+
+ //sanitize $ACT
+ $ACT = act_clean($ACT);
+
+ //check if searchword was given - else just show
+ $s = cleanID($QUERY);
+ if($ACT == 'search' && empty($s)){
+ $ACT = 'show';
+ }
+
+ //login stuff
+ if(in_array($ACT,array('login','logout'))){
+ $ACT = act_auth($ACT);
+ }
+
+ //check if user is asking to (un)subscribe a page
+ if($ACT == 'subscribe' || $ACT == 'unsubscribe')
+ $ACT = act_subscription($ACT);
+
+ //check if user is asking to (un)subscribe a namespace
+ if($ACT == 'subscribens' || $ACT == 'unsubscribens')
+ $ACT = act_subscriptionns($ACT);
+
+ //check permissions
+ $ACT = act_permcheck($ACT);
+
+ //register
+ $nil = array();
+ if($ACT == 'register' && $_POST['save'] && register()){
+ $ACT = 'login';
+ }
+
+ if ($ACT == 'resendpwd' && act_resendpwd()) {
+ $ACT = 'login';
+ }
+
+ //update user profile
+ if ($ACT == 'profile') {
+ if(!$_SERVER['REMOTE_USER']) {
+ $ACT = 'login';
+ } else {
+ if(updateprofile()) {
+ msg($lang['profchanged'],1);
+ $ACT = 'show';
+ }
+ }
+ }
+
+ //revert
+ if($ACT == 'revert'){
+ if(checkSecurityToken()){
+ $ACT = act_revert($ACT);
+ }else{
+ $ACT = 'show';
+ }
+ }
+
+ //save
+ if($ACT == 'save'){
+ if(checkSecurityToken()){
+ $ACT = act_save($ACT);
+ }else{
+ $ACT = 'show';
+ }
+ }
+
+ //cancel conflicting edit
+ if($ACT == 'cancel')
+ $ACT = 'show';
+
+ //draft deletion
+ if($ACT == 'draftdel')
+ $ACT = act_draftdel($ACT);
+
+ //draft saving on preview
+ if($ACT == 'preview')
+ $ACT = act_draftsave($ACT);
+
+ //edit
+ if(($ACT == 'edit' || $ACT == 'preview') && $INFO['editable']){
+ $ACT = act_edit($ACT);
+ }else{
+ unlock($ID); //try to unlock
+ }
+
+ //handle export
+ if(substr($ACT,0,7) == 'export_')
+ $ACT = act_export($ACT);
+
+ //display some infos
+ if($ACT == 'check'){
+ check();
+ $ACT = 'show';
+ }
+
+ //handle admin tasks
+ if($ACT == 'admin'){
+ // retrieve admin plugin name from $_REQUEST['page']
+ $page = get_input('dokupage');
+ if (!empty($page)) {
+ $pluginlist = plugin_list('admin');
+ if (in_array($page, $pluginlist)) {
+ // attempt to load the plugin
+ if ($plugin =& plugin_load('admin',$page) !== NULL)
+ $plugin->handle();
+ }
+ }
+ }
+
+ // check permissions again - the action may have changed
+ $ACT = act_permcheck($ACT);
+ } // end event ACTION_ACT_PREPROCESS default action
+ $evt->advise_after();
+ unset($evt);
+ if ($ACT == 'save') {
+ $user = elgg_get_logged_in_user_entity();
+ $doku = current_dokuwiki_entity();
+ $group = get_entity($doku->container_guid);
+ add_to_river('river/dokuwiki', 'wiki/'.$ACT.'/'.$QUERY, $user->getGUID(), $doku->getGUID(), $group->access_id);
+ }
+ // when action 'show', the intial not 'show' and POST, do a redirect
+ if($ACT == 'show' && $preact != 'show' && strtolower($_SERVER['REQUEST_METHOD']) == 'post'){
+ act_redirect($ID,$preact);
+ }
+
+ //call template FIXME: all needed vars available?
+ $headers[] = 'Content-Type: text/html; charset=utf-8';
+ trigger_event('ACTION_HEADERS_SEND',$headers,'act_sendheaders');
+
+ include(template('main.php'));
+ // output for the commands is now handled in inc/templates.php
+ // in function tpl_content()
+}
+
+function act_sendheaders($headers) {
+ foreach ($headers as $hdr) header($hdr);
+}
+
+/**
+ * Sanitize the action command
+ *
+ * Add all allowed commands here.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_clean($act){
+ global $lang;
+ global $conf;
+
+ // check if the action was given as array key
+ if(is_array($act)){
+ list($act) = array_keys($act);
+ }
+
+ //remove all bad chars
+ $act = strtolower($act);
+ $act = preg_replace('/[^1-9a-z_]+/','',$act);
+
+ if($act == 'export_html') $act = 'export_xhtml';
+ if($act == 'export_htmlbody') $act = 'export_xhtmlbody';
+
+ // check if action is disabled
+ if(!actionOK($act)){
+ msg('Command disabled: '.htmlspecialchars($act),-1);
+ return 'show';
+ }
+
+ //disable all acl related commands if ACL is disabled
+ if(!$conf['useacl'] && in_array($act,array('login','logout','register','admin',
+ 'subscribe','unsubscribe','profile','revert',
+ 'resendpwd','subscribens','unsubscribens',))){
+ msg('Command unavailable: '.htmlspecialchars($act),-1);
+ return 'show';
+ }
+
+ if(!in_array($act,array('login','logout','register','save','cancel','edit','draft',
+ 'preview','search','show','check','index','revisions',
+ 'diff','recent','backlink','admin','subscribe','revert',
+ 'unsubscribe','profile','resendpwd','recover','wordblock',
+ 'draftdel','subscribens','unsubscribens',)) && substr($act,0,7) != 'export_' ) {
+ msg('Command unknown: '.htmlspecialchars($act),-1);
+ return 'show';
+ }
+ return $act;
+}
+
+/**
+ * Run permissionchecks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_permcheck($act){
+ global $INFO;
+ global $conf;
+//error_log("dokuwiki act:".$act.$INFO['perm']);
+ if(in_array($act,array('save','preview','edit','recover'))){
+ if($INFO['exists']){
+ if($act == 'edit'){
+ //the edit function will check again and do a source show
+ //when no AUTH_EDIT available
+ $permneed = AUTH_READ;
+ }else{
+ $permneed = AUTH_EDIT;
+ }
+ }else{
+ $permneed = AUTH_CREATE;
+ }
+ }elseif(in_array($act,array('login','search','recent','profile'))){
+ $permneed = AUTH_NONE;
+ }elseif($act == 'revert'){
+ $permneed = AUTH_ADMIN;
+ if($INFO['ismanager']) $permneed = AUTH_EDIT;
+ }elseif($act == 'register'){
+ $permneed = AUTH_NONE;
+ }elseif($act == 'resendpwd'){
+ $permneed = AUTH_NONE;
+ }elseif($act == 'admin'){
+ if($INFO['ismanager']){
+ //error_log("is manager");
+ // if the manager has the needed permissions for a certain admin
+ // action is checked later
+ $permneed = AUTH_READ;
+ }else{
+ //error_log("is admin");
+ $permneed = AUTH_ADMIN;
+ }
+ }else{
+ $permneed = AUTH_READ;
+ }
+ if($INFO['perm'] >= $permneed) return $act;
+
+ return 'denied';
+}
+
+/**
+ * Handle 'draftdel'
+ *
+ * Deletes the draft for the current page and user
+ */
+function act_draftdel($act){
+ global $INFO;
+ @unlink($INFO['draft']);
+ $INFO['draft'] = null;
+ return 'show';
+}
+
+/**
+ * Saves a draft on preview
+ *
+ * @todo this currently duplicates code from ajax.php :-/
+ */
+function act_draftsave($act){
+ global $INFO;
+ global $ID;
+ global $conf;
+ if($conf['usedraft'] && $_POST['wikitext']){
+ $draft = array('id' => $ID,
+ 'prefix' => $_POST['prefix'],
+ 'text' => $_POST['wikitext'],
+ 'suffix' => $_POST['suffix'],
+ 'date' => $_POST['date'],
+ 'client' => $INFO['client'],
+ );
+ $cname = getCacheName($draft['client'].$ID,'.draft');
+ if(io_saveFile($cname,serialize($draft))){
+ $INFO['draft'] = $cname;
+ }
+ }
+ return $act;
+}
+
+/**
+ * Handle 'save'
+ *
+ * Checks for spam and conflicts and saves the page.
+ * Does a redirect to show the page afterwards or
+ * returns a new action.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_save($act){
+ global $ID;
+ global $DATE;
+ global $PRE;
+ global $TEXT;
+ global $SUF;
+ global $SUM;
+
+ //spam check
+ if(checkwordblock())
+ return 'wordblock';
+ //conflict check //FIXME use INFO
+ if($DATE != 0 && @filemtime(wikiFN($ID)) > $DATE )
+ return 'conflict';
+
+ //save it
+ saveWikiText($ID,con($PRE,$TEXT,$SUF,1),$SUM,get_input('minor')); //use pretty mode for con
+ //unlock it
+ unlock($ID);
+
+ //delete draft
+ act_draftdel($act);
+ session_write_close();
+
+ // when done, show page
+ return 'show';
+}
+
+/**
+ * Revert to a certain revision
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_revert($act){
+ global $ID;
+ global $REV;
+ global $lang;
+
+ // when no revision is given, delete current one
+ // FIXME this feature is not exposed in the GUI currently
+ $text = '';
+ $sum = $lang['deleted'];
+ if($REV){
+ $text = rawWiki($ID,$REV);
+ if(!$text) return 'show'; //something went wrong
+ $sum = $lang['restored'];
+ }
+
+ // spam check
+ if(checkwordblock($Text))
+ return 'wordblock';
+
+ saveWikiText($ID,$text,$sum,false);
+ msg($sum,1);
+
+ //delete any draft
+ act_draftdel($act);
+ session_write_close();
+
+ // when done, show current page
+ $_SERVER['REQUEST_METHOD'] = 'post'; //should force a redirect
+ $REV = '';
+ return 'show';
+}
+
+/**
+ * Do a redirect after receiving post data
+ *
+ * Tries to add the section id as hash mark after section editing
+ */
+function act_redirect($id,$preact){
+ global $PRE;
+ global $TEXT;
+ global $MSG;
+
+ //are there any undisplayed messages? keep them in session for display
+ //on the next page
+ if(isset($MSG) && count($MSG)){
+ //reopen session, store data and close session again
+ @session_start();
+ $_SESSION[DOKU_COOKIE]['msg'] = $MSG;
+ session_write_close();
+ }
+
+ $opts = array(
+ 'id' => $id,
+ 'preact' => $preact
+ );
+ //get section name when coming from section edit
+ if($PRE && preg_match('/^\s*==+([^=\n]+)/',$TEXT,$match)){
+ $check = false; //Byref
+ $opts['fragment'] = sectionID($match[0], $check);
+ }
+
+ trigger_event('ACTION_SHOW_REDIRECT',$opts,'act_redirect_execute');
+}
+
+function act_redirect_execute($opts){
+ $go = wl($opts['id'],'',true);
+ if(isset($opts['fragment'])) $go .= '#'.$opts['fragment'];
+
+ //show it
+ send_redirect($go);
+}
+
+/**
+ * Handle 'login', 'logout'
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_auth($act){
+ global $ID;
+ global $INFO;
+
+ //already logged in?
+ if(isset($_SERVER['REMOTE_USER']) && $act=='login'){
+ return 'show';
+ }
+
+ //handle logout
+ if($act=='logout'){
+ $lockedby = checklock($ID); //page still locked?
+ if($lockedby == $_SERVER['REMOTE_USER'])
+ unlock($ID); //try to unlock
+
+ // do the logout stuff
+ auth_logoff();
+
+ // rebuild info array
+ $INFO = pageinfo();
+
+ act_redirect($ID,'login');
+ }
+
+ return $act;
+}
+
+/**
+ * Handle 'edit', 'preview'
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function act_edit($act){
+ global $ID;
+ global $INFO;
+
+ //check if locked by anyone - if not lock for my self
+ $lockedby = checklock($ID);
+ if($lockedby) return 'locked';
+
+ lock($ID);
+ return $act;
+}
+
+/**
+ * Export a wiki page for various formats
+ *
+ * Triggers ACTION_EXPORT_POSTPROCESS
+ *
+ * Event data:
+ * data['id'] -- page id
+ * data['mode'] -- requested export mode
+ * data['headers'] -- export headers
+ * data['output'] -- export output
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function act_export($act){
+ global $ID;
+ global $REV;
+ global $conf;
+ global $lang;
+
+ $pre = '';
+ $post = '';
+ $output = '';
+ $headers = array();
+
+ // search engines: never cache exported docs! (Google only currently)
+ $headers['X-Robots-Tag'] = 'noindex';
+
+ $mode = substr($act,7);
+ switch($mode) {
+ case 'raw':
+ $headers['Content-Type'] = 'text/plain; charset=utf-8';
+ $headers['Content-Disposition'] = 'attachment; filename='.noNS($ID).'.txt';
+ $output = rawWiki($ID,$REV);
+ break;
+ case 'xhtml':
+ $pre .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"' . DOKU_LF;
+ $pre .= ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' . DOKU_LF;
+ $pre .= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="'.$conf['lang'].'"' . DOKU_LF;
+ $pre .= ' lang="'.$conf['lang'].'" dir="'.$lang['direction'].'">' . DOKU_LF;
+ $pre .= '<head>' . DOKU_LF;
+ $pre .= ' <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . DOKU_LF;
+ $pre .= ' <title>'.$ID.'</title>' . DOKU_LF;
+
+ // get metaheaders
+ ob_start();
+ tpl_metaheaders();
+ $pre .= ob_get_clean();
+
+ $pre .= '</head>' . DOKU_LF;
+ $pre .= '<body>' . DOKU_LF;
+ $pre .= '<div class="dokuwiki export">' . DOKU_LF;
+
+ // get toc
+ $pre .= tpl_toc(true);
+
+ $headers['Content-Type'] = 'text/html; charset=utf-8';
+ $output = p_wiki_xhtml($ID,$REV,false);
+
+ $post .= '</div>' . DOKU_LF;
+ $post .= '</body>' . DOKU_LF;
+ $post .= '</html>' . DOKU_LF;
+ break;
+ case 'xhtmlbody':
+ $headers['Content-Type'] = 'text/html; charset=utf-8';
+ $output = p_wiki_xhtml($ID,$REV,false);
+ break;
+ default:
+ $output = p_cached_output(wikiFN($ID,$REV), $mode);
+ $headers = p_get_metadata($ID,"format $mode");
+ break;
+ }
+
+ // prepare event data
+ $data = array();
+ $data['id'] = $ID;
+ $data['mode'] = $mode;
+ $data['headers'] = $headers;
+ $data['output'] =& $output;
+
+ trigger_event('ACTION_EXPORT_POSTPROCESS', $data);
+
+ if(!empty($data['output'])){
+ if(is_array($data['headers'])) foreach($data['headers'] as $key => $val){
+ header("$key: $val");
+ }
+ print $pre.$data['output'].$post;
+ exit;
+ }
+ return 'show';
+}
+
+/**
+ * Handle page 'subscribe', 'unsubscribe'
+ *
+ * @author Steven Danz <steven-danz@kc.rr.com>
+ * @todo localize
+ */
+function act_subscription($act){
+ global $ID;
+ global $INFO;
+ global $lang;
+
+ $file=metaFN($ID,'.mlist');
+ if ($act=='subscribe' && !$INFO['subscribed']){
+ if ($INFO['userinfo']['mail']){
+ if (io_saveFile($file,$_SERVER['REMOTE_USER']."\n",true)) {
+ $INFO['subscribed'] = true;
+ msg(sprintf($lang[$act.'_success'], $INFO['userinfo']['name'], $ID),1);
+ } else {
+ msg(sprintf($lang[$act.'_error'], $INFO['userinfo']['name'], $ID),1);
+ }
+ } else {
+ msg($lang['subscribe_noaddress']);
+ }
+ } elseif ($act=='unsubscribe' && $INFO['subscribed']){
+ if (io_deleteFromFile($file,$_SERVER['REMOTE_USER']."\n")) {
+ $INFO['subscribed'] = false;
+ msg(sprintf($lang[$act.'_success'], $INFO['userinfo']['name'], $ID),1);
+ } else {
+ msg(sprintf($lang[$act.'_error'], $INFO['userinfo']['name'], $ID),1);
+ }
+ }
+
+ return 'show';
+}
+
+/**
+ * Handle namespace 'subscribe', 'unsubscribe'
+ *
+ */
+function act_subscriptionns($act){
+ global $ID;
+ global $INFO;
+ global $lang;
+
+ if(!getNS($ID)) {
+ $file = metaFN(getNS($ID),'.mlist');
+ $ns = "root";
+ } else {
+ $file = metaFN(getNS($ID),'/.mlist');
+ $ns = getNS($ID);
+ }
+
+ // reuse strings used to display the status of the subscribe action
+ $act_msg = rtrim($act, 'ns');
+
+ if ($act=='subscribens' && !$INFO['subscribedns']){
+ if ($INFO['userinfo']['mail']){
+ if (io_saveFile($file,$_SERVER['REMOTE_USER']."\n",true)) {
+ $INFO['subscribedns'] = true;
+ msg(sprintf($lang[$act_msg.'_success'], $INFO['userinfo']['name'], $ns),1);
+ } else {
+ msg(sprintf($lang[$act_msg.'_error'], $INFO['userinfo']['name'], $ns),1);
+ }
+ } else {
+ msg($lang['subscribe_noaddress']);
+ }
+ } elseif ($act=='unsubscribens' && $INFO['subscribedns']){
+ if (io_deleteFromFile($file,$_SERVER['REMOTE_USER']."\n")) {
+ $INFO['subscribedns'] = false;
+ msg(sprintf($lang[$act_msg.'_success'], $INFO['userinfo']['name'], $ns),1);
+ } else {
+ msg(sprintf($lang[$act_msg.'_error'], $INFO['userinfo']['name'], $ns),1);
+ }
+ }
+
+ return 'show';
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php b/mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php
new file mode 100644
index 000000000..94cd8a50d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php
@@ -0,0 +1,2347 @@
+<?php
+/**
+ * PHP LDAP CLASS FOR MANIPULATING ACTIVE DIRECTORY
+ * Version 3.3.1
+ *
+ * PHP Version 5 with SSL and LDAP support
+ *
+ * Written by Scott Barnett, Richard Hyland
+ * email: scott@wiggumworld.com, adldap@richardhyland.com
+ * http://adldap.sourceforge.net/
+ *
+ * Copyright (c) 2006-2009 Scott Barnett, Richard Hyland
+ *
+ * We'd appreciate any improvements or additions to be submitted back
+ * to benefit the entire community :)
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * @category ToolsAndUtilities
+ * @package adLDAP
+ * @author Scott Barnett, Richard Hyland
+ * @copyright (c) 2006-2009 Scott Barnett, Richard Hyland
+ * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html LGPLv2.1
+ * @revision $Revision: 67 $
+ * @version 3.3.1
+ * @link http://adldap.sourceforge.net/
+ */
+
+/**
+ * Define the different types of account in AD
+ */
+define ('ADLDAP_NORMAL_ACCOUNT', 805306368);
+define ('ADLDAP_WORKSTATION_TRUST', 805306369);
+define ('ADLDAP_INTERDOMAIN_TRUST', 805306370);
+define ('ADLDAP_SECURITY_GLOBAL_GROUP', 268435456);
+define ('ADLDAP_DISTRIBUTION_GROUP', 268435457);
+define ('ADLDAP_SECURITY_LOCAL_GROUP', 536870912);
+define ('ADLDAP_DISTRIBUTION_LOCAL_GROUP', 536870913);
+define ('ADLDAP_FOLDER', 'OU');
+define ('ADLDAP_CONTAINER', 'CN');
+
+/**
+* Main adLDAP class
+*
+* Can be initialised using $adldap = new adLDAP();
+*
+* Something to keep in mind is that Active Directory is a permissions
+* based directory. If you bind as a domain user, you can't fetch as
+* much information on other users as you could as a domain admin.
+*
+* Before asking questions, please read the Documentation at
+* http://adldap.sourceforge.net/wiki/doku.php?id=api
+*/
+class adLDAP {
+ /**
+ * The account suffix for your domain, can be set when the class is invoked
+ *
+ * @var string
+ */
+ protected $_account_suffix = "@mydomain.local";
+
+ /**
+ * The base dn for your domain
+ *
+ * @var string
+ */
+ protected $_base_dn = "DC=mydomain,DC=local";
+
+ /**
+ * Array of domain controllers. Specifiy multiple controllers if you
+ * would like the class to balance the LDAP queries amongst multiple servers
+ *
+ * @var array
+ */
+ protected $_domain_controllers = array ("dc01.mydomain.local");
+
+ /**
+ * Optional account with higher privileges for searching
+ * This should be set to a domain admin account
+ *
+ * @var string
+ * @var string
+ */
+ protected $_ad_username=NULL;
+ protected $_ad_password=NULL;
+
+ /**
+ * AD does not return the primary group. http://support.microsoft.com/?kbid=321360
+ * This tweak will resolve the real primary group.
+ * Setting to false will fudge "Domain Users" and is much faster. Keep in mind though that if
+ * someone's primary group is NOT domain users, this is obviously going to mess up the results
+ *
+ * @var bool
+ */
+ protected $_real_primarygroup=true;
+
+ /**
+ * Use SSL (LDAPS), your server needs to be setup, please see
+ * http://adldap.sourceforge.net/wiki/doku.php?id=ldap_over_ssl
+ *
+ * @var bool
+ */
+ protected $_use_ssl=false;
+
+ /**
+ * Use TLS
+ * If you wish to use TLS you should ensure that $_use_ssl is set to false and vice-versa
+ *
+ * @var bool
+ */
+ protected $_use_tls=false;
+
+ /**
+ * When querying group memberships, do it recursively
+ * eg. User Fred is a member of Group A, which is a member of Group B, which is a member of Group C
+ * user_ingroup("Fred","C") will returns true with this option turned on, false if turned off
+ *
+ * @var bool
+ */
+ protected $_recursive_groups=true;
+
+ // You should not need to edit anything below this line
+ //******************************************************************************************
+
+ /**
+ * Connection and bind default variables
+ *
+ * @var mixed
+ * @var mixed
+ */
+ protected $_conn;
+ protected $_bind;
+
+ /**
+ * Getters and Setters
+ */
+
+ /**
+ * Set the account suffix
+ *
+ * @param string $_account_suffix
+ * @return void
+ */
+ public function set_account_suffix($_account_suffix)
+ {
+ $this->_account_suffix = $_account_suffix;
+ }
+
+ /**
+ * Get the account suffix
+ *
+ * @return string
+ */
+ public function get_account_suffix()
+ {
+ return $this->_account_suffix;
+ }
+
+ /**
+ * Set the domain controllers array
+ *
+ * @param array $_domain_controllers
+ * @return void
+ */
+ public function set_domain_controllers(array $_domain_controllers)
+ {
+ $this->_domain_controllers = $_domain_controllers;
+ }
+
+ /**
+ * Get the list of domain controllers
+ *
+ * @return void
+ */
+ public function get_domain_controllers()
+ {
+ return $this->_domain_controllers;
+ }
+
+ /**
+ * Set the username of an account with higher priviledges
+ *
+ * @param string $_ad_username
+ * @return void
+ */
+ public function set_ad_username($_ad_username)
+ {
+ $this->_ad_username = $_ad_username;
+ }
+
+ /**
+ * Get the username of the account with higher priviledges
+ *
+ * This will throw an exception for security reasons
+ */
+ public function get_ad_username()
+ {
+ throw new adLDAPException('For security reasons you cannot access the domain administrator account details');
+ }
+
+ /**
+ * Set the password of an account with higher priviledges
+ *
+ * @param string $_ad_password
+ * @return void
+ */
+ public function set_ad_password($_ad_password)
+ {
+ $this->_ad_password = $_ad_password;
+ }
+
+ /**
+ * Get the password of the account with higher priviledges
+ *
+ * This will throw an exception for security reasons
+ */
+ public function get_ad_password()
+ {
+ throw new adLDAPException('For security reasons you cannot access the domain administrator account details');
+ }
+
+ /**
+ * Set whether to detect the true primary group
+ *
+ * @param bool $_real_primary_group
+ * @return void
+ */
+ public function set_real_primarygroup($_real_primarygroup)
+ {
+ $this->_real_primarygroup = $_real_primarygroup;
+ }
+
+ /**
+ * Get the real primary group setting
+ *
+ * @return bool
+ */
+ public function get_real_primarygroup()
+ {
+ return $this->_real_primarygroup;
+ }
+
+ /**
+ * Set whether to use SSL
+ *
+ * @param bool $_use_ssl
+ * @return void
+ */
+ public function set_use_ssl($_use_ssl)
+ {
+ $this->_use_ssl = $_use_ssl;
+ }
+
+ /**
+ * Get the SSL setting
+ *
+ * @return bool
+ */
+ public function get_use_ssl()
+ {
+ return $this->_use_ssl;
+ }
+
+ /**
+ * Set whether to use TLS
+ *
+ * @param bool $_use_tls
+ * @return void
+ */
+ public function set_use_tls($_use_tls)
+ {
+ $this->_use_tls = $_use_tls;
+ }
+
+ /**
+ * Get the TLS setting
+ *
+ * @return bool
+ */
+ public function get_use_tls()
+ {
+ return $this->_use_tls;
+ }
+
+ /**
+ * Set whether to lookup recursive groups
+ *
+ * @param bool $_recursive_groups
+ * @return void
+ */
+ public function set_recursive_groups($_recursive_groups)
+ {
+ $this->_recursive_groups = $_recursive_groups;
+ }
+
+ /**
+ * Get the recursive groups setting
+ *
+ * @return bool
+ */
+ public function get_recursive_groups()
+ {
+ return $this->_recursive_groups;
+ }
+
+ /**
+ * Default Constructor
+ *
+ * Tries to bind to the AD domain over LDAP or LDAPs
+ *
+ * @param array $options Array of options to pass to the constructor
+ * @throws Exception - if unable to bind to Domain Controller
+ * @return bool
+ */
+ function __construct($options=array()){
+ // You can specifically overide any of the default configuration options setup above
+ if (count($options)>0){
+ if (array_key_exists("account_suffix",$options)){ $this->_account_suffix=$options["account_suffix"]; }
+ if (array_key_exists("base_dn",$options)){ $this->_base_dn=$options["base_dn"]; }
+ if (array_key_exists("domain_controllers",$options)){ $this->_domain_controllers=$options["domain_controllers"]; }
+ if (array_key_exists("ad_username",$options)){ $this->_ad_username=$options["ad_username"]; }
+ if (array_key_exists("ad_password",$options)){ $this->_ad_password=$options["ad_password"]; }
+ if (array_key_exists("real_primarygroup",$options)){ $this->_real_primarygroup=$options["real_primarygroup"]; }
+ if (array_key_exists("use_ssl",$options)){ $this->_use_ssl=$options["use_ssl"]; }
+ if (array_key_exists("use_tls",$options)){ $this->_use_tls=$options["use_tls"]; }
+ if (array_key_exists("recursive_groups",$options)){ $this->_recursive_groups=$options["recursive_groups"]; }
+ }
+
+ if ($this->ldap_supported() === false) {
+ throw new adLDAPException('No LDAP support for PHP. See: http://www.php.net/ldap');
+ }
+
+ return $this->connect();
+ }
+
+ /**
+ * Default Destructor
+ *
+ * Closes the LDAP connection
+ *
+ * @return void
+ */
+ function __destruct(){ $this->close(); }
+
+ /**
+ * Connects and Binds to the Domain Controller
+ *
+ * @return bool
+ */
+ public function connect() {
+ // Connect to the AD/LDAP server as the username/password
+ $dc=$this->random_controller();
+ if ($this->_use_ssl){
+ $this->_conn = ldap_connect("ldaps://".$dc, 636);
+ } else {
+ $this->_conn = ldap_connect($dc);
+ }
+
+ // Set some ldap options for talking to AD
+ ldap_set_option($this->_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
+ ldap_set_option($this->_conn, LDAP_OPT_REFERRALS, 0);
+
+ if ($this->_use_tls) {
+ ldap_start_tls($this->_conn);
+ }
+
+ // Bind as a domain admin if they've set it up
+ if ($this->_ad_username!=NULL && $this->_ad_password!=NULL){
+ $this->_bind = @ldap_bind($this->_conn,$this->_ad_username.$this->_account_suffix,$this->_ad_password);
+ if (!$this->_bind){
+ if ($this->_use_ssl && !$this->_use_tls){
+ // If you have problems troubleshooting, remove the @ character from the ldap_bind command above to get the actual error message
+ throw new adLDAPException('Bind to Active Directory failed. Either the LDAPs connection failed or the login credentials are incorrect. AD said: ' . $this->get_last_error());
+ } else {
+ throw new adLDAPException('Bind to Active Directory failed. Check the login credentials and/or server details. AD said: ' . $this->get_last_error());
+ }
+ }
+ }
+
+ if ($this->_base_dn == NULL) {
+ $this->_base_dn = $this->find_base_dn();
+ }
+
+ return (true);
+ }
+
+ /**
+ * Closes the LDAP connection
+ *
+ * @return void
+ */
+ public function close() {
+ ldap_close ($this->_conn);
+ }
+
+ /**
+ * Validate a user's login credentials
+ *
+ * @param string $username A user's AD username
+ * @param string $password A user's AD password
+ * @param bool optional $prevent_rebind
+ * @return bool
+ */
+ public function authenticate($username,$password,$prevent_rebind=false){
+ // Prevent null binding
+ if ($username===NULL || $password===NULL){ return (false); }
+ if (empty($username) || empty($password)){ return (false); }
+
+ // Bind as the user
+ $this->_bind = @ldap_bind($this->_conn,$username.$this->_account_suffix,$password);
+ if (!$this->_bind){ return (false); }
+
+ // Cnce we've checked their details, kick back into admin mode if we have it
+ if ($this->_ad_username!=NULL && !$prevent_rebind){
+ $this->_bind = @ldap_bind($this->_conn,$this->_ad_username.$this->_account_suffix,$this->_ad_password);
+ if (!$this->_bind){
+ // This should never happen in theory
+ throw new adLDAPException('Rebind to Active Directory failed. AD said: ' . $this->get_last_error());
+ }
+ }
+
+ return (true);
+ }
+
+ //*****************************************************************************************************************
+ // GROUP FUNCTIONS
+
+ /**
+ * Add a group to a group
+ *
+ * @param string $parent The parent group name
+ * @param string $child The child group name
+ * @return bool
+ */
+ public function group_add_group($parent,$child){
+
+ // Find the parent group's dn
+ $parent_group=$this->group_info($parent,array("cn"));
+ if ($parent_group[0]["dn"]===NULL){ return (false); }
+ $parent_dn=$parent_group[0]["dn"];
+
+ // Find the child group's dn
+ $child_group=$this->group_info($child,array("cn"));
+ if ($child_group[0]["dn"]===NULL){ return (false); }
+ $child_dn=$child_group[0]["dn"];
+
+ $add=array();
+ $add["member"] = $child_dn;
+
+ $result=@ldap_mod_add($this->_conn,$parent_dn,$add);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Add a user to a group
+ *
+ * @param string $group The group to add the user to
+ * @param string $user The user to add to the group
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function group_add_user($group,$user,$isGUID=false){
+ // Adding a user is a bit fiddly, we need to get the full DN of the user
+ // and add it using the full DN of the group
+
+ // Find the user's dn
+ $user_dn=$this->user_dn($user,$isGUID);
+ if ($user_dn===false){ return (false); }
+
+ // Find the group's dn
+ $group_info=$this->group_info($group,array("cn"));
+ if ($group_info[0]["dn"]===NULL){ return (false); }
+ $group_dn=$group_info[0]["dn"];
+
+ $add=array();
+ $add["member"] = $user_dn;
+
+ $result=@ldap_mod_add($this->_conn,$group_dn,$add);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Add a contact to a group
+ *
+ * @param string $group The group to add the contact to
+ * @param string $contact_dn The DN of the contact to add
+ * @return bool
+ */
+ public function group_add_contact($group,$contact_dn){
+ // To add a contact we take the contact's DN
+ // and add it using the full DN of the group
+
+ // Find the group's dn
+ $group_info=$this->group_info($group,array("cn"));
+ if ($group_info[0]["dn"]===NULL){ return (false); }
+ $group_dn=$group_info[0]["dn"];
+
+ $add=array();
+ $add["member"] = $contact_dn;
+
+ $result=@ldap_mod_add($this->_conn,$group_dn,$add);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Create a group
+ *
+ * @param array $attributes Default attributes of the group
+ * @return bool
+ */
+ public function group_create($attributes){
+ if (!is_array($attributes)){ return ("Attributes must be an array"); }
+ if (!array_key_exists("group_name",$attributes)){ return ("Missing compulsory field [group_name]"); }
+ if (!array_key_exists("container",$attributes)){ return ("Missing compulsory field [container]"); }
+ if (!array_key_exists("description",$attributes)){ return ("Missing compulsory field [description]"); }
+ if (!is_array($attributes["container"])){ return ("Container attribute must be an array."); }
+ $attributes["container"]=array_reverse($attributes["container"]);
+
+ //$member_array = array();
+ //$member_array[0] = "cn=user1,cn=Users,dc=yourdomain,dc=com";
+ //$member_array[1] = "cn=administrator,cn=Users,dc=yourdomain,dc=com";
+
+ $add=array();
+ $add["cn"] = $attributes["group_name"];
+ $add["samaccountname"] = $attributes["group_name"];
+ $add["objectClass"] = "Group";
+ $add["description"] = $attributes["description"];
+ //$add["member"] = $member_array; UNTESTED
+
+ $container="OU=".implode(",OU=",$attributes["container"]);
+ $result=ldap_add($this->_conn,"CN=".$add["cn"].", ".$container.",".$this->_base_dn,$add);
+ if ($result!=true){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Remove a group from a group
+ *
+ * @param string $parent The parent group name
+ * @param string $child The child group name
+ * @return bool
+ */
+ public function group_del_group($parent,$child){
+
+ // Find the parent dn
+ $parent_group=$this->group_info($parent,array("cn"));
+ if ($parent_group[0]["dn"]===NULL){ return (false); }
+ $parent_dn=$parent_group[0]["dn"];
+
+ // Find the child dn
+ $child_group=$this->group_info($child,array("cn"));
+ if ($child_group[0]["dn"]===NULL){ return (false); }
+ $child_dn=$child_group[0]["dn"];
+
+ $del=array();
+ $del["member"] = $child_dn;
+
+ $result=@ldap_mod_del($this->_conn,$parent_dn,$del);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Remove a user from a group
+ *
+ * @param string $group The group to remove a user from
+ * @param string $user The AD user to remove from the group
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function group_del_user($group,$user,$isGUID=false){
+
+ // Find the parent dn
+ $group_info=$this->group_info($group,array("cn"));
+ if ($group_info[0]["dn"]===NULL){ return (false); }
+ $group_dn=$group_info[0]["dn"];
+
+ // Find the users dn
+ $user_dn=$this->user_dn($user,$isGUID);
+ if ($user_dn===false){ return (false); }
+
+ $del=array();
+ $del["member"] = $user_dn;
+
+ $result=@ldap_mod_del($this->_conn,$group_dn,$del);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Remove a contact from a group
+ *
+ * @param string $group The group to remove a user from
+ * @param string $contact_dn The DN of a contact to remove from the group
+ * @return bool
+ */
+ public function group_del_contact($group,$contact_dn){
+
+ // Find the parent dn
+ $group_info=$this->group_info($group,array("cn"));
+ if ($group_info[0]["dn"]===NULL){ return (false); }
+ $group_dn=$group_info[0]["dn"];
+
+ $del=array();
+ $del["member"] = $contact_dn;
+
+ $result=@ldap_mod_del($this->_conn,$group_dn,$del);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Return a list of groups in a group
+ *
+ * @param string $group The group to query
+ * @param bool $recursive Recursively get groups
+ * @return array
+ */
+ public function groups_in_group($group, $recursive = NULL){
+ if (!$this->_bind){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } // Use the default option if they haven't set it
+
+ // Search the directory for the members of a group
+ $info=$this->group_info($group,array("member","cn"));
+ $groups=$info[0]["member"];
+ if (!is_array($groups)) {
+ return (false);
+ }
+
+ $group_array=array();
+
+ for ($i=0; $i<$groups["count"]; $i++){
+ $filter="(&(objectCategory=group)(distinguishedName=".$this->ldap_slashes($groups[$i])."))";
+ $fields = array("samaccountname", "distinguishedname", "objectClass");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ // not a person, look for a group
+ if ($entries['count'] == 0 && $recursive == true) {
+ $filter="(&(objectCategory=group)(distinguishedName=".$this->ldap_slashes($groups[$i])."))";
+ $fields = array("distinguishedname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+ if (!isset($entries[0]['distinguishedname'][0])) {
+ continue;
+ }
+ $sub_groups = $this->groups_in_group($entries[0]['distinguishedname'][0], $recursive);
+ if (is_array($sub_groups)) {
+ $group_array = array_merge($group_array, $sub_groups);
+ $group_array = array_unique($group_array);
+ }
+ continue;
+ }
+
+ $group_array[] = $entries[0]['distinguishedname'][0];
+ }
+ return ($group_array);
+ }
+
+ /**
+ * Return a list of members in a group
+ *
+ * @param string $group The group to query
+ * @param bool $recursive Recursively get group members
+ * @return array
+ */
+ public function group_members($group, $recursive = NULL){
+ if (!$this->_bind){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } // Use the default option if they haven't set it
+ // Search the directory for the members of a group
+ $info=$this->group_info($group,array("member","cn"));
+ $users=$info[0]["member"];
+ if (!is_array($users)) {
+ return (false);
+ }
+
+ $user_array=array();
+
+ for ($i=0; $i<$users["count"]; $i++){
+ $filter="(&(objectCategory=person)(distinguishedName=".$this->ldap_slashes($users[$i])."))";
+ $fields = array("samaccountname", "distinguishedname", "objectClass");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ // not a person, look for a group
+ if ($entries['count'] == 0 && $recursive == true) {
+ $filter="(&(objectCategory=group)(distinguishedName=".$this->ldap_slashes($users[$i])."))";
+ $fields = array("samaccountname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+ if (!isset($entries[0]['samaccountname'][0])) {
+ continue;
+ }
+ $sub_users = $this->group_members($entries[0]['samaccountname'][0], $recursive);
+ if (is_array($sub_users)) {
+ $user_array = array_merge($user_array, $sub_users);
+ $user_array = array_unique($user_array);
+ }
+ continue;
+ }
+
+ if ($entries[0]['samaccountname'][0] === NULL && $entries[0]['distinguishedname'][0] !== NULL) {
+ $user_array[] = $entries[0]['distinguishedname'][0];
+ }
+ elseif ($entries[0]['samaccountname'][0] !== NULL) {
+ $user_array[] = $entries[0]['samaccountname'][0];
+ }
+ }
+ return ($user_array);
+ }
+
+ /**
+ * Group Information. Returns an array of information about a group.
+ * The group name is case sensitive
+ *
+ * @param string $group_name The group name to retrieve info about
+ * @param array $fields Fields to retrieve
+ * @return array
+ */
+ public function group_info($group_name,$fields=NULL){
+ if ($group_name===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+
+ if (stristr($group_name, '+')) {
+ $group_name=stripslashes($group_name);
+ }
+
+ $filter="(&(objectCategory=group)(name=".$this->ldap_slashes($group_name)."))";
+ //echo ($filter."!!!<br>");
+ if ($fields===NULL){ $fields=array("member","memberof","cn","description","distinguishedname","objectcategory","samaccountname"); }
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+ //print_r($entries);
+ return ($entries);
+ }
+
+ /**
+ * Return a complete list of "groups in groups"
+ *
+ * @param string $group The group to get the list from
+ * @return array
+ */
+ public function recursive_groups($group){
+ if ($group===NULL){ return (false); }
+
+ $ret_groups=array();
+
+ $groups=$this->group_info($group,array("memberof"));
+ if (is_array($groups[0]["memberof"])) {
+ $groups=$groups[0]["memberof"];
+
+ if ($groups){
+ $group_names=$this->nice_names($groups);
+ $ret_groups=array_merge($ret_groups,$group_names); //final groups to return
+
+ foreach ($group_names as $id => $group_name){
+ $child_groups=$this->recursive_groups($group_name);
+ $ret_groups=array_merge($ret_groups,$child_groups);
+ }
+ }
+ }
+
+ return ($ret_groups);
+ }
+
+ /**
+ * Returns a complete list of the groups in AD based on a SAM Account Type
+ *
+ * @param string $samaccounttype The account type to return
+ * @param bool $include_desc Whether to return a description
+ * @param string $search Search parameters
+ * @param bool $sorted Whether to sort the results
+ * @return array
+ */
+ public function search_groups($samaccounttype = ADLDAP_SECURITY_GLOBAL_GROUP, $include_desc = false, $search = "*", $sorted = true) {
+ if (!$this->_bind){ return (false); }
+
+ $filter = '(&(objectCategory=group)';
+ if ($samaccounttype !== null) {
+ $filter .= '(samaccounttype='. $samaccounttype .')';
+ }
+ $filter .= '(cn='.$search.'))';
+ // Perform the search and grab all their details
+ $fields=array("samaccountname","description");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ $groups_array = array();
+ for ($i=0; $i<$entries["count"]; $i++){
+ if ($include_desc && strlen($entries[$i]["description"][0]) > 0 ){
+ $groups_array[ $entries[$i]["samaccountname"][0] ] = $entries[$i]["description"][0];
+ } elseif ($include_desc){
+ $groups_array[ $entries[$i]["samaccountname"][0] ] = $entries[$i]["samaccountname"][0];
+ } else {
+ array_push($groups_array, $entries[$i]["samaccountname"][0]);
+ }
+ }
+ if( $sorted ){ asort($groups_array); }
+ return ($groups_array);
+ }
+
+ /**
+ * Returns a complete list of all groups in AD
+ *
+ * @param bool $include_desc Whether to return a description
+ * @param string $search Search parameters
+ * @param bool $sorted Whether to sort the results
+ * @return array
+ */
+ public function all_groups($include_desc = false, $search = "*", $sorted = true){
+ $groups_array = $this->search_groups(null, $include_desc, $search, $sorted);
+ return ($groups_array);
+ }
+
+ /**
+ * Returns a complete list of security groups in AD
+ *
+ * @param bool $include_desc Whether to return a description
+ * @param string $search Search parameters
+ * @param bool $sorted Whether to sort the results
+ * @return array
+ */
+ public function all_security_groups($include_desc = false, $search = "*", $sorted = true){
+ $groups_array = $this->search_groups(ADLDAP_SECURITY_GLOBAL_GROUP, $include_desc, $search, $sorted);
+ return ($groups_array);
+ }
+
+ /**
+ * Returns a complete list of distribution lists in AD
+ *
+ * @param bool $include_desc Whether to return a description
+ * @param string $search Search parameters
+ * @param bool $sorted Whether to sort the results
+ * @return array
+ */
+ public function all_distribution_groups($include_desc = false, $search = "*", $sorted = true){
+ $groups_array = $this->search_groups(ADLDAP_DISTRIBUTION_GROUP, $include_desc, $search, $sorted);
+ return ($groups_array);
+ }
+
+ //*****************************************************************************************************************
+ // USER FUNCTIONS
+
+ /**
+ * Create a user
+ *
+ * If you specify a password here, this can only be performed over SSL
+ *
+ * @param array $attributes The attributes to set to the user account
+ * @return bool
+ */
+ public function user_create($attributes){
+ // Check for compulsory fields
+ if (!array_key_exists("username",$attributes)){ return ("Missing compulsory field [username]"); }
+ if (!array_key_exists("firstname",$attributes)){ return ("Missing compulsory field [firstname]"); }
+ if (!array_key_exists("surname",$attributes)){ return ("Missing compulsory field [surname]"); }
+ if (!array_key_exists("email",$attributes)){ return ("Missing compulsory field [email]"); }
+ if (!array_key_exists("container",$attributes)){ return ("Missing compulsory field [container]"); }
+ if (!is_array($attributes["container"])){ return ("Container attribute must be an array."); }
+
+ if (array_key_exists("password",$attributes) && (!$this->_use_ssl && !$this->_use_tls)){
+ throw new adLDAPException('SSL must be configured on your webserver and enabled in the class to set passwords.');
+ }
+
+ if (!array_key_exists("display_name",$attributes)){ $attributes["display_name"]=$attributes["firstname"]." ".$attributes["surname"]; }
+
+ // Translate the schema
+ $add=$this->adldap_schema($attributes);
+
+ // Additional stuff only used for adding accounts
+ $add["cn"][0]=$attributes["display_name"];
+ $add["samaccountname"][0]=$attributes["username"];
+ $add["objectclass"][0]="top";
+ $add["objectclass"][1]="person";
+ $add["objectclass"][2]="organizationalPerson";
+ $add["objectclass"][3]="user"; //person?
+ //$add["name"][0]=$attributes["firstname"]." ".$attributes["surname"];
+
+ // Set the account control attribute
+ $control_options=array("NORMAL_ACCOUNT");
+ if (!$attributes["enabled"]){ $control_options[]="ACCOUNTDISABLE"; }
+ $add["userAccountControl"][0]=$this->account_control($control_options);
+ //echo ("<pre>"); print_r($add);
+
+ // Determine the container
+ $attributes["container"]=array_reverse($attributes["container"]);
+ $container="OU=".implode(",OU=",$attributes["container"]);
+
+ // Add the entry
+ $result=@ldap_add($this->_conn, "CN=".$add["cn"][0].", ".$container.",".$this->_base_dn, $add);
+ if ($result!=true){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Delete a user account
+ *
+ * @param string $username The username to delete (please be careful here!)
+ * @param bool $isGUID Is the username a GUID or a samAccountName
+ * @return array
+ */
+ public function user_delete($username,$isGUID=false) {
+ $userinfo = $this->user_info($username, array("*"),$isGUID);
+ $dn = $userinfo[0]['distinguishedname'][0];
+ $result=$this->dn_delete($dn);
+ if ($result!=true){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Groups the user is a member of
+ *
+ * @param string $username The username to query
+ * @param bool $recursive Recursive list of groups
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return array
+ */
+ public function user_groups($username,$recursive=NULL,$isGUID=false){
+ if ($username===NULL){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } // Use the default option if they haven't set it
+ if (!$this->_bind){ return (false); }
+
+ // Search the directory for their information
+ $info=@$this->user_info($username,array("memberof","primarygroupid"),$isGUID);
+ $groups=$this->nice_names($info[0]["memberof"]); // Presuming the entry returned is our guy (unique usernames)
+
+ if ($recursive === true){
+ foreach ($groups as $id => $group_name){
+ $extra_groups=$this->recursive_groups($group_name);
+ $groups=array_merge($groups,$extra_groups);
+ }
+ }
+
+ return ($groups);
+ }
+
+ /**
+ * Find information about the users
+ *
+ * @param string $username The username to query
+ * @param array $fields Array of parameters to query
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return array
+ */
+ public function user_info($username,$fields=NULL,$isGUID=false){
+ if ($username===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+
+ if ($isGUID === true) {
+ $username = $this->strguid2hex($username);
+ $filter="objectguid=".$username;
+ }
+ else {
+ $filter="samaccountname=".$username;
+ }
+ if ($fields===NULL){ $fields=array("samaccountname","mail","memberof","department","displayname","telephonenumber","primarygroupid","objectsid"); }
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ if ($entries[0]['count'] >= 1) {
+ // AD does not return the primary group in the ldap query, we may need to fudge it
+ if ($this->_real_primarygroup && isset($entries[0]["primarygroupid"][0]) && isset($entries[0]["objectsid"][0])){
+ //$entries[0]["memberof"][]=$this->group_cn($entries[0]["primarygroupid"][0]);
+ $entries[0]["memberof"][]=$this->get_primary_group($entries[0]["primarygroupid"][0], $entries[0]["objectsid"][0]);
+ } else {
+ $entries[0]["memberof"][]="CN=Domain Users,CN=Users,".$this->_base_dn;
+ }
+ }
+
+ $entries[0]["memberof"]["count"]++;
+ return ($entries);
+ }
+
+ /**
+ * Determine if a user is in a specific group
+ *
+ * @param string $username The username to query
+ * @param string $group The name of the group to check against
+ * @param bool $recursive Check groups recursively
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function user_ingroup($username,$group,$recursive=NULL,$isGUID=false){
+ if ($username===NULL){ return (false); }
+ if ($group===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } // Use the default option if they haven't set it
+
+ // Get a list of the groups
+ $groups=$this->user_groups($username,$recursive,$isGUID);
+
+ // Return true if the specified group is in the group list
+ if (in_array($group,$groups)){ return (true); }
+
+ return (false);
+ }
+
+ /**
+ * Determine a user's password expiry date
+ *
+ * @param string $username The username to query
+ * @param book $isGUID Is the username passed a GUID or a samAccountName
+ * @requires bcmath http://www.php.net/manual/en/book.bc.php
+ * @return array
+ */
+ public function user_password_expiry($username,$isGUID=false) {
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if (!$this->_bind){ return (false); }
+ if (!function_exists('bcmod')) { return ("Missing function support [bcmod] http://www.php.net/manual/en/book.bc.php"); };
+
+ $userinfo = $this->user_info($username, array("pwdlastset", "useraccountcontrol"), $isGUID);
+ $pwdlastset = $userinfo[0]['pwdlastset'][0];
+ $status = array();
+
+ if ($userinfo[0]['useraccountcontrol'][0] == '66048') {
+ // Password does not expire
+ return "Does not expire";
+ }
+ if ($pwdlastset === '0') {
+ // Password has already expired
+ return "Password has expired";
+ }
+
+ // Password expiry in AD can be calculated from TWO values:
+ // - User's own pwdLastSet attribute: stores the last time the password was changed
+ // - Domain's maxPwdAge attribute: how long passwords last in the domain
+ //
+ // Although Microsoft chose to use a different base and unit for time measurements.
+ // This function will convert them to Unix timestamps
+ $sr = ldap_read($this->_conn, $this->_base_dn, 'objectclass=*', array('maxPwdAge'));
+ if (!$sr) {
+ return false;
+ }
+ $info = ldap_get_entries($this->_conn, $sr);
+ $maxpwdage = $info[0]['maxpwdage'][0];
+
+
+ // See MSDN: http://msdn.microsoft.com/en-us/library/ms974598.aspx
+ //
+ // pwdLastSet contains the number of 100 nanosecond intervals since January 1, 1601 (UTC),
+ // stored in a 64 bit integer.
+ //
+ // The number of seconds between this date and Unix epoch is 11644473600.
+ //
+ // maxPwdAge is stored as a large integer that represents the number of 100 nanosecond
+ // intervals from the time the password was set before the password expires.
+ //
+ // We also need to scale this to seconds but also this value is a _negative_ quantity!
+ //
+ // If the low 32 bits of maxPwdAge are equal to 0 passwords do not expire
+ //
+ // Unfortunately the maths involved are too big for PHP integers, so I've had to require
+ // BCMath functions to work with arbitrary precision numbers.
+ if (bcmod($maxpwdage, 4294967296) === '0') {
+ return "Domain does not expire passwords";
+ }
+
+ // Add maxpwdage and pwdlastset and we get password expiration time in Microsoft's
+ // time units. Because maxpwd age is negative we need to subtract it.
+ $pwdexpire = bcsub($pwdlastset, $maxpwdage);
+
+ // Convert MS's time to Unix time
+ $status['expiryts'] = bcsub(bcdiv($pwdexpire, '10000000'), '11644473600');
+ $status['expiryformat'] = date('Y-m-d H:i:s', bcsub(bcdiv($pwdexpire, '10000000'), '11644473600'));
+
+ return $status;
+ }
+
+ /**
+ * Modify a user
+ *
+ * @param string $username The username to query
+ * @param array $attributes The attributes to modify. Note if you set the enabled attribute you must not specify any other attributes
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function user_modify($username,$attributes,$isGUID=false){
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if (array_key_exists("password",$attributes) && !$this->_use_ssl){
+ throw new adLDAPException('SSL must be configured on your webserver and enabled in the class to set passwords.');
+ }
+
+ // Find the dn of the user
+ $user_dn=$this->user_dn($username,$isGUID);
+ if ($user_dn===false){ return (false); }
+
+ // Translate the update to the LDAP schema
+ $mod=$this->adldap_schema($attributes);
+
+ // Check to see if this is an enabled status update
+ if (!$mod && !array_key_exists("enabled", $attributes)){ return (false); }
+
+ // Set the account control attribute (only if specified)
+ if (array_key_exists("enabled",$attributes)){
+ if ($attributes["enabled"]){ $control_options=array("NORMAL_ACCOUNT"); }
+ else { $control_options=array("NORMAL_ACCOUNT","ACCOUNTDISABLE"); }
+ $mod["userAccountControl"][0]=$this->account_control($control_options);
+ }
+
+ // Do the update
+ $result=@ldap_modify($this->_conn,$user_dn,$mod);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Disable a user account
+ *
+ * @param string $username The username to disable
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function user_disable($username,$isGUID=false){
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ $attributes=array("enabled"=>0);
+ $result = $this->user_modify($username, $attributes, $isGUID);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Enable a user account
+ *
+ * @param string $username The username to enable
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function user_enable($username,$isGUID=false){
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ $attributes=array("enabled"=>1);
+ $result = $this->user_modify($username, $attributes, $isGUID);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Set the password of a user - This must be performed over SSL
+ *
+ * @param string $username The username to modify
+ * @param string $password The new password
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function user_password($username,$password,$isGUID=false){
+ if ($username===NULL){ return (false); }
+ if ($password===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+ if (!$this->_use_ssl && !$this->_use_tls){
+ throw new adLDAPException('SSL must be configured on your webserver and enabled in the class to set passwords.');
+ }
+
+ $user_dn=$this->user_dn($username,$isGUID);
+ if ($user_dn===false){ return (false); }
+
+ $add=array();
+ $add["unicodePwd"][0]=$this->encode_password($password);
+
+ $result=ldap_mod_replace($this->_conn,$user_dn,$add);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Return a list of all users in AD
+ *
+ * @param bool $include_desc Return a description of the user
+ * @param string $search Search parameter
+ * @param bool $sorted Sort the user accounts
+ * @return array
+ */
+ public function all_users($include_desc = false, $search = "*", $sorted = true){
+ if (!$this->_bind){ return (false); }
+
+ // Perform the search and grab all their details
+ $filter = "(&(objectClass=user)(samaccounttype=". ADLDAP_NORMAL_ACCOUNT .")(objectCategory=person)(cn=".$search."))";
+ $fields=array("samaccountname","displayname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ $users_array = array();
+ for ($i=0; $i<$entries["count"]; $i++){
+ if ($include_desc && strlen($entries[$i]["displayname"][0])>0){
+ $users_array[ $entries[$i]["samaccountname"][0] ] = $entries[$i]["displayname"][0];
+ } elseif ($include_desc){
+ $users_array[ $entries[$i]["samaccountname"][0] ] = $entries[$i]["samaccountname"][0];
+ } else {
+ array_push($users_array, $entries[$i]["samaccountname"][0]);
+ }
+ }
+ if ($sorted){ asort($users_array); }
+ return ($users_array);
+ }
+
+ /**
+ * Converts a username (samAccountName) to a GUID
+ *
+ * @param string $username The username to query
+ * @return string
+ */
+ public function username2guid($username) {
+ if (!$this->_bind){ return (false); }
+ if ($username === null){ return ("Missing compulsory field [username]"); }
+
+ $filter = "samaccountname=" . $username;
+ $fields = array("objectGUID");
+ $sr = @ldap_search($this->_conn, $this->_base_dn, $filter, $fields);
+ if (ldap_count_entries($this->_conn, $sr) > 0) {
+ $entry = @ldap_first_entry($this->_conn, $sr);
+ $guid = @ldap_get_values_len($this->_conn, $entry, 'objectGUID');
+ $strGUID = $this->binary2text($guid[0]);
+ return ($strGUID);
+ }
+ else {
+ return (false);
+ }
+ }
+
+ //*****************************************************************************************************************
+ // CONTACT FUNCTIONS
+ // * Still work to do in this area, and new functions to write
+
+ /**
+ * Create a contact
+ *
+ * @param array $attributes The attributes to set to the contact
+ * @return bool
+ */
+ public function contact_create($attributes){
+ // Check for compulsory fields
+ if (!array_key_exists("display_name",$attributes)){ return ("Missing compulsory field [display_name]"); }
+ if (!array_key_exists("email",$attributes)){ return ("Missing compulsory field [email]"); }
+ if (!array_key_exists("container",$attributes)){ return ("Missing compulsory field [container]"); }
+ if (!is_array($attributes["container"])){ return ("Container attribute must be an array."); }
+
+ // Translate the schema
+ $add=$this->adldap_schema($attributes);
+
+ // Additional stuff only used for adding contacts
+ $add["cn"][0]=$attributes["display_name"];
+ $add["objectclass"][0]="top";
+ $add["objectclass"][1]="person";
+ $add["objectclass"][2]="organizationalPerson";
+ $add["objectclass"][3]="contact";
+ if (!isset($attributes['exchange_hidefromlists'])) {
+ $add["msExchHideFromAddressLists"][0]="TRUE";
+ }
+
+ // Determine the container
+ $attributes["container"]=array_reverse($attributes["container"]);
+ $container="OU=".implode(",OU=",$attributes["container"]);
+
+ // Add the entry
+ $result=@ldap_add($this->_conn, "CN=".$add["cn"][0].", ".$container.",".$this->_base_dn, $add);
+ if ($result!=true){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Determine the list of groups a contact is a member of
+ *
+ * @param string $distinguisedname The full DN of a contact
+ * @param bool $recursive Recursively check groups
+ * @return array
+ */
+ public function contact_groups($distinguishedname,$recursive=NULL){
+ if ($distinguishedname===NULL){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } //use the default option if they haven't set it
+ if (!$this->_bind){ return (false); }
+
+ // Search the directory for their information
+ $info=@$this->contact_info($distinguishedname,array("memberof","primarygroupid"));
+ $groups=$this->nice_names($info[0]["memberof"]); //presuming the entry returned is our contact
+
+ if ($recursive === true){
+ foreach ($groups as $id => $group_name){
+ $extra_groups=$this->recursive_groups($group_name);
+ $groups=array_merge($groups,$extra_groups);
+ }
+ }
+
+ return ($groups);
+ }
+
+ /**
+ * Get contact information
+ *
+ * @param string $distinguisedname The full DN of a contact
+ * @param array $fields Attributes to be returned
+ * @return array
+ */
+ public function contact_info($distinguishedname,$fields=NULL){
+ if ($distinguishedname===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+
+ $filter="distinguishedName=".$distinguishedname;
+ if ($fields===NULL){ $fields=array("distinguishedname","mail","memberof","department","displayname","telephonenumber","primarygroupid","objectsid"); }
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ if ($entries[0]['count'] >= 1) {
+ // AD does not return the primary group in the ldap query, we may need to fudge it
+ if ($this->_real_primarygroup && isset($entries[0]["primarygroupid"][0]) && isset($entries[0]["primarygroupid"][0])){
+ //$entries[0]["memberof"][]=$this->group_cn($entries[0]["primarygroupid"][0]);
+ $entries[0]["memberof"][]=$this->get_primary_group($entries[0]["primarygroupid"][0], $entries[0]["objectsid"][0]);
+ } else {
+ $entries[0]["memberof"][]="CN=Domain Users,CN=Users,".$this->_base_dn;
+ }
+ }
+
+ $entries[0]["memberof"]["count"]++;
+ return ($entries);
+ }
+
+ /**
+ * Determine if a contact is a member of a group
+ *
+ * @param string $distinguisedname The full DN of a contact
+ * @param string $group The group name to query
+ * @param bool $recursive Recursively check groups
+ * @return bool
+ */
+ public function contact_ingroup($distinguisedname,$group,$recursive=NULL){
+ if ($distinguisedname===NULL){ return (false); }
+ if ($group===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } //use the default option if they haven't set it
+
+ // Get a list of the groups
+ $groups=$this->contact_groups($distinguisedname,array("memberof"),$recursive);
+
+ // Return true if the specified group is in the group list
+ if (in_array($group,$groups)){ return (true); }
+
+ return (false);
+ }
+
+ /**
+ * Modify a contact
+ *
+ * @param string $distinguishedname The contact to query
+ * @param array $attributes The attributes to modify. Note if you set the enabled attribute you must not specify any other attributes
+ * @return bool
+ */
+ public function contact_modify($distinguishedname,$attributes){
+ if ($distinguishedname===NULL){ return ("Missing compulsory field [distinguishedname]"); }
+
+ // Translate the update to the LDAP schema
+ $mod=$this->adldap_schema($attributes);
+
+ // Check to see if this is an enabled status update
+ if (!$mod){ return (false); }
+
+ // Do the update
+ $result=ldap_modify($this->_conn,$distinguishedname,$mod);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Delete a contact
+ *
+ * @param string $distinguishedname The contact dn to delete (please be careful here!)
+ * @return array
+ */
+ public function contact_delete($distinguishedname) {
+ $result = $this->dn_delete($distinguishedname);
+ if ($result!=true){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Return a list of all contacts
+ *
+ * @param bool $include_desc Include a description of a contact
+ * @param string $search The search parameters
+ * @param bool $sorted Whether to sort the results
+ * @return array
+ */
+ public function all_contacts($include_desc = false, $search = "*", $sorted = true){
+ if (!$this->_bind){ return (false); }
+
+ // Perform the search and grab all their details
+ $filter = "(&(objectClass=contact)(cn=".$search."))";
+ $fields=array("displayname","distinguishedname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ $users_array = array();
+ for ($i=0; $i<$entries["count"]; $i++){
+ if ($include_desc && strlen($entries[$i]["displayname"][0])>0){
+ $users_array[ $entries[$i]["distinguishedname"][0] ] = $entries[$i]["displayname"][0];
+ } elseif ($include_desc){
+ $users_array[ $entries[$i]["distinguishedname"][0] ] = $entries[$i]["distinguishedname"][0];
+ } else {
+ array_push($users_array, $entries[$i]["distinguishedname"][0]);
+ }
+ }
+ if ($sorted){ asort($users_array); }
+ return ($users_array);
+ }
+
+ //*****************************************************************************************************************
+ // FOLDER FUNCTIONS
+
+ /**
+ * Returns a folder listing for a specific OU
+ * See http://adldap.sourceforge.net/wiki/doku.php?id=api_folder_functions
+ *
+ * @param array $folder_name An array to the OU you wish to list.
+ * If set to NULL will list the root, strongly recommended to set
+ * $recursive to false in that instance!
+ * @param string $dn_type The type of record to list. This can be ADLDAP_FOLDER or ADLDAP_CONTAINER.
+ * @param bool $recursive Recursively search sub folders
+ * @param bool $type Specify a type of object to search for
+ * @return array
+ */
+ public function folder_list($folder_name = NULL, $dn_type = ADLDAP_FOLDER, $recursive = NULL, $type = NULL) {
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } //use the default option if they haven't set it
+ if (!$this->_bind){ return (false); }
+
+ $filter = '(&';
+ if ($type !== NULL) {
+ switch ($type) {
+ case 'contact':
+ $filter .= '(objectClass=contact)';
+ break;
+ case 'computer':
+ $filter .= '(objectClass=computer)';
+ break;
+ case 'group':
+ $filter .= '(objectClass=group)';
+ break;
+ case 'folder':
+ $filter .= '(objectClass=organizationalUnit)';
+ break;
+ case 'container':
+ $filter .= '(objectClass=container)';
+ break;
+ case 'domain':
+ $filter .= '(objectClass=builtinDomain)';
+ break;
+ default:
+ $filter .= '(objectClass=user)';
+ break;
+ }
+ }
+ else {
+ $filter .= '(objectClass=*)';
+ }
+ // If the folder name is null then we will search the root level of AD
+ // This requires us to not have an OU= part, just the base_dn
+ $searchou = $this->_base_dn;
+ if (is_array($folder_name)) {
+ $ou = $dn_type . "=".implode("," . $dn_type . "=",$folder_name);
+ $filter .= '(!(distinguishedname=' . $ou . ',' . $this->_base_dn . ')))';
+ $searchou = $ou . ',' . $this->_base_dn;
+ }
+ else {
+ $filter .= '(!(distinguishedname=' . $this->_base_dn . ')))';
+ }
+
+ if ($recursive === true) {
+ $sr=ldap_search($this->_conn, $searchou, $filter, array('objectclass', 'distinguishedname', 'samaccountname'));
+ $entries = @ldap_get_entries($this->_conn, $sr);
+ if (is_array($entries)) {
+ return $entries;
+ }
+ }
+ else {
+ $sr=ldap_list($this->_conn, $searchou, $filter, array('objectclass', 'distinguishedname', 'samaccountname'));
+ $entries = @ldap_get_entries($this->_conn, $sr);
+ if (is_array($entries)) {
+ return $entries;
+ }
+ }
+
+ return false;
+ }
+
+ //*****************************************************************************************************************
+ // COMPUTER FUNCTIONS
+
+ /**
+ * Get information about a specific computer
+ *
+ * @param string $computer_name The name of the computer
+ * @param array $fields Attributes to return
+ * @return array
+ */
+ public function computer_info($computer_name,$fields=NULL){
+ if ($computer_name===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+
+ $filter="(&(objectClass=computer)(cn=".$computer_name."))";
+ if ($fields===NULL){ $fields=array("memberof","cn","displayname","dnshostname","distinguishedname","objectcategory","operatingsystem","operatingsystemservicepack","operatingsystemversion"); }
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ return ($entries);
+ }
+
+ /**
+ * Check if a computer is in a group
+ *
+ * @param string $computer_name The name of the computer
+ * @param string $group The group to check
+ * @param bool $recursive Whether to check recursively
+ * @return array
+ */
+ public function computer_ingroup($computer_name,$group,$recursive=NULL){
+ if ($computer_name===NULL){ return (false); }
+ if ($group===NULL){ return (false); }
+ if (!$this->_bind){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } // use the default option if they haven't set it
+
+ //get a list of the groups
+ $groups=$this->computer_groups($computer_name,array("memberof"),$recursive);
+
+ //return true if the specified group is in the group list
+ if (in_array($group,$groups)){ return (true); }
+
+ return (false);
+ }
+
+ /**
+ * Get the groups a computer is in
+ *
+ * @param string $computer_name The name of the computer
+ * @param bool $recursive Whether to check recursively
+ * @return array
+ */
+ public function computer_groups($computer_name,$recursive=NULL){
+ if ($computer_name===NULL){ return (false); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; } //use the default option if they haven't set it
+ if (!$this->_bind){ return (false); }
+
+ //search the directory for their information
+ $info=@$this->computer_info($computer_name,array("memberof","primarygroupid"));
+ $groups=$this->nice_names($info[0]["memberof"]); //presuming the entry returned is our guy (unique usernames)
+
+ if ($recursive === true){
+ foreach ($groups as $id => $group_name){
+ $extra_groups=$this->recursive_groups($group_name);
+ $groups=array_merge($groups,$extra_groups);
+ }
+ }
+
+ return ($groups);
+ }
+
+ //************************************************************************************************************
+ // EXCHANGE FUNCTIONS
+
+ /**
+ * Create an Exchange account
+ *
+ * @param string $username The username of the user to add the Exchange account to
+ * @param array $storagegroup The mailbox, Exchange Storage Group, for the user account, this must be a full CN
+ * If the storage group has a different base_dn to the adLDAP configuration, set it using $base_dn
+ * @param string $emailaddress The primary email address to add to this user
+ * @param string $mailnickname The mail nick name. If mail nickname is blank, the username will be used
+ * @param bool $usedefaults Indicates whether the store should use the default quota, rather than the per-mailbox quota.
+ * @param string $base_dn Specify an alternative base_dn for the Exchange storage group
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function exchange_create_mailbox($username, $storagegroup, $emailaddress, $mailnickname=NULL, $usedefaults=TRUE, $base_dn=NULL, $isGUID=false){
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if ($storagegroup===NULL){ return ("Missing compulsory array [storagegroup]"); }
+ if (!is_array($storagegroup)){ return ("[storagegroup] must be an array"); }
+ if ($emailaddress===NULL){ return ("Missing compulsory field [emailaddress]"); }
+
+ if ($base_dn===NULL) {
+ $base_dn = $this->_base_dn;
+ }
+
+ $container="CN=".implode(",CN=",$storagegroup);
+
+ if ($mailnickname===NULL) { $mailnickname=$username; }
+ $mdbUseDefaults = $this->bool2str($usedefaults);
+
+ $attributes = array(
+ 'exchange_homemdb'=>$container.",".$base_dn,
+ 'exchange_proxyaddress'=>'SMTP:' . $emailaddress,
+ 'exchange_mailnickname'=>$mailnickname,
+ 'exchange_usedefaults'=>$mdbUseDefaults
+ );
+ $result = $this->user_modify($username,$attributes,$isGUID);
+ if ($result==false){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Add an X400 address to Exchange
+ * See http://tools.ietf.org/html/rfc1685 for more information.
+ * An X400 Address looks similar to this X400:c=US;a= ;p=Domain;o=Organization;s=Doe;g=John;
+ *
+ * @param string $username The username of the user to add the X400 to to
+ * @param string $country Country
+ * @param string $admd Administration Management Domain
+ * @param string $pdmd Private Management Domain (often your AD domain)
+ * @param string $org Organization
+ * @param string $surname Surname
+ * @param string $givenName Given name
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function exchange_add_X400($username, $country, $admd, $pdmd, $org, $surname, $givenname, $isGUID=false) {
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+
+ $proxyvalue = 'X400:';
+
+ // Find the dn of the user
+ $user=$this->user_info($username,array("cn","proxyaddresses"), $isGUID);
+ if ($user[0]["dn"]===NULL){ return (false); }
+ $user_dn=$user[0]["dn"];
+
+ // We do not have to demote an email address from the default so we can just add the new proxy address
+ $attributes['exchange_proxyaddress'] = $proxyvalue . 'c=' . $country . ';a=' . $admd . ';p=' . $pdmd . ';o=' . $org . ';s=' . $surname . ';g=' . $givenname . ';';
+
+ // Translate the update to the LDAP schema
+ $add=$this->adldap_schema($attributes);
+
+ if (!$add){ return (false); }
+
+ // Do the update
+ // Take out the @ to see any errors, usually this error might occur because the address already
+ // exists in the list of proxyAddresses
+ $result=@ldap_mod_add($this->_conn,$user_dn,$add);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Add an address to Exchange
+ *
+ * @param string $username The username of the user to add the Exchange account to
+ * @param string $emailaddress The email address to add to this user
+ * @param bool $default Make this email address the default address, this is a bit more intensive as we have to demote any existing default addresses
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function exchange_add_address($username, $emailaddress, $default=FALSE, $isGUID=false) {
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if ($emailaddress===NULL) { return ("Missing compulsory fields [emailaddress]"); }
+
+ $proxyvalue = 'smtp:';
+ if ($default === true) {
+ $proxyvalue = 'SMTP:';
+ }
+
+ // Find the dn of the user
+ $user=$this->user_info($username,array("cn","proxyaddresses"),$isGUID);
+ if ($user[0]["dn"]===NULL){ return (false); }
+ $user_dn=$user[0]["dn"];
+
+ // We need to scan existing proxy addresses and demote the default one
+ if (is_array($user[0]["proxyaddresses"]) && $default===true) {
+ $modaddresses = array();
+ for ($i=0;$i<sizeof($user[0]['proxyaddresses']);$i++) {
+ if (strstr($user[0]['proxyaddresses'][$i], 'SMTP:') !== false) {
+ $user[0]['proxyaddresses'][$i] = str_replace('SMTP:', 'smtp:', $user[0]['proxyaddresses'][$i]);
+ }
+ if ($user[0]['proxyaddresses'][$i] != '') {
+ $modaddresses['proxyAddresses'][$i] = $user[0]['proxyaddresses'][$i];
+ }
+ }
+ $modaddresses['proxyAddresses'][(sizeof($user[0]['proxyaddresses'])-1)] = 'SMTP:' . $emailaddress;
+
+ $result=@ldap_mod_replace($this->_conn,$user_dn,$modaddresses);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+ else {
+ // We do not have to demote an email address from the default so we can just add the new proxy address
+ $attributes['exchange_proxyaddress'] = $proxyvalue . $emailaddress;
+
+ // Translate the update to the LDAP schema
+ $add=$this->adldap_schema($attributes);
+
+ if (!$add){ return (false); }
+
+ // Do the update
+ // Take out the @ to see any errors, usually this error might occur because the address already
+ // exists in the list of proxyAddresses
+ $result=@ldap_mod_add($this->_conn,$user_dn,$add);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+ }
+
+ /**
+ * Remove an address to Exchange
+ * If you remove a default address the account will no longer have a default,
+ * we recommend changing the default address first
+ *
+ * @param string $username The username of the user to add the Exchange account to
+ * @param string $emailaddress The email address to add to this user
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function exchange_del_address($username, $emailaddress, $isGUID=false) {
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if ($emailaddress===NULL) { return ("Missing compulsory fields [emailaddress]"); }
+
+ // Find the dn of the user
+ $user=$this->user_info($username,array("cn","proxyaddresses"),$isGUID);
+ if ($user[0]["dn"]===NULL){ return (false); }
+ $user_dn=$user[0]["dn"];
+
+ if (is_array($user[0]["proxyaddresses"])) {
+ $mod = array();
+ for ($i=0;$i<sizeof($user[0]['proxyaddresses']);$i++) {
+ if (strstr($user[0]['proxyaddresses'][$i], 'SMTP:') !== false && $user[0]['proxyaddresses'][$i] == 'SMTP:' . $emailaddress) {
+ $mod['proxyAddresses'][0] = 'SMTP:' . $emailaddress;
+ }
+ elseif (strstr($user[0]['proxyaddresses'][$i], 'smtp:') !== false && $user[0]['proxyaddresses'][$i] == 'smtp:' . $emailaddress) {
+ $mod['proxyAddresses'][0] = 'smtp:' . $emailaddress;
+ }
+ }
+
+ $result=@ldap_mod_del($this->_conn,$user_dn,$mod);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+ else {
+ return (false);
+ }
+ }
+ /**
+ * Change the default address
+ *
+ * @param string $username The username of the user to add the Exchange account to
+ * @param string $emailaddress The email address to make default
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return bool
+ */
+ public function exchange_primary_address($username, $emailaddress, $isGUID=false) {
+ if ($username===NULL){ return ("Missing compulsory field [username]"); }
+ if ($emailaddress===NULL) { return ("Missing compulsory fields [emailaddress]"); }
+
+ // Find the dn of the user
+ $user=$this->user_info($username,array("cn","proxyaddresses"), $isGUID);
+ if ($user[0]["dn"]===NULL){ return (false); }
+ $user_dn=$user[0]["dn"];
+
+ if (is_array($user[0]["proxyaddresses"])) {
+ $modaddresses = array();
+ for ($i=0;$i<sizeof($user[0]['proxyaddresses']);$i++) {
+ if (strstr($user[0]['proxyaddresses'][$i], 'SMTP:') !== false) {
+ $user[0]['proxyaddresses'][$i] = str_replace('SMTP:', 'smtp:', $user[0]['proxyaddresses'][$i]);
+ }
+ if ($user[0]['proxyaddresses'][$i] == 'smtp:' . $emailaddress) {
+ $user[0]['proxyaddresses'][$i] = str_replace('smtp:', 'SMTP:', $user[0]['proxyaddresses'][$i]);
+ }
+ if ($user[0]['proxyaddresses'][$i] != '') {
+ $modaddresses['proxyAddresses'][$i] = $user[0]['proxyaddresses'][$i];
+ }
+ }
+
+ $result=@ldap_mod_replace($this->_conn,$user_dn,$modaddresses);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ }
+
+ /**
+ * Mail enable a contact
+ * Allows email to be sent to them through Exchange
+ *
+ * @param string $distinguishedname The contact to mail enable
+ * @param string $emailaddress The email address to allow emails to be sent through
+ * @param string $mailnickname The mailnickname for the contact in Exchange. If NULL this will be set to the display name
+ * @return bool
+ */
+ public function exchange_contact_mailenable($distinguishedname, $emailaddress, $mailnickname=NULL){
+ if ($distinguishedname===NULL){ return ("Missing compulsory field [distinguishedname]"); }
+ if ($emailaddress===NULL){ return ("Missing compulsory field [emailaddress]"); }
+
+ if ($mailnickname !== NULL) {
+ // Find the dn of the user
+ $user=$this->contact_info($distinguishedname,array("cn","displayname"));
+ if ($user[0]["displayname"]===NULL){ return (false); }
+ $mailnickname = $user[0]['displayname'][0];
+ }
+
+ $attributes = array("email"=>$emailaddress,"contact_email"=>"SMTP:" . $emailaddress,"exchange_proxyaddress"=>"SMTP:" . $emailaddress,"exchange_mailnickname"=>$mailnickname);
+
+ // Translate the update to the LDAP schema
+ $mod=$this->adldap_schema($attributes);
+
+ // Check to see if this is an enabled status update
+ if (!$mod){ return (false); }
+
+ // Do the update
+ $result=ldap_modify($this->_conn,$distinguishedname,$mod);
+ if ($result==false){ return (false); }
+
+ return (true);
+ }
+
+ /**
+ * Returns a list of Exchange Servers in the ConfigurationNamingContext of the domain
+ *
+ * @param array $attributes An array of the AD attributes you wish to return
+ * @return array
+ */
+ public function exchange_servers($attributes = array('cn','distinguishedname','serialnumber')) {
+ if (!$this->_bind){ return (false); }
+
+ $configurationNamingContext = $this->get_root_dse(array('configurationnamingcontext'));
+ $sr = @ldap_search($this->_conn,$configurationNamingContext[0]['configurationnamingcontext'][0],'(&(objectCategory=msExchExchangeServer))',$attributes);
+ $entries = @ldap_get_entries($this->_conn, $sr);
+ return $entries;
+ }
+
+ /**
+ * Returns a list of Storage Groups in Exchange for a given mail server
+ *
+ * @param string $exchangeServer The full DN of an Exchange server. You can use exchange_servers() to find the DN for your server
+ * @param array $attributes An array of the AD attributes you wish to return
+ * @param bool $recursive If enabled this will automatically query the databases within a storage group
+ * @return array
+ */
+ public function exchange_storage_groups($exchangeServer, $attributes = array('cn','distinguishedname'), $recursive = NULL) {
+ if (!$this->_bind){ return (false); }
+ if ($exchangeServer===NULL){ return ("Missing compulsory field [exchangeServer]"); }
+ if ($recursive===NULL){ $recursive=$this->_recursive_groups; }
+
+ $filter = '(&(objectCategory=msExchStorageGroup))';
+ $sr=@ldap_search($this->_conn, $exchangeServer, $filter, $attributes);
+ $entries = @ldap_get_entries($this->_conn, $sr);
+
+ if ($recursive === true) {
+ for ($i=0; $i<$entries['count']; $i++) {
+ $entries[$i]['msexchprivatemdb'] = $this->exchange_storage_databases($entries[$i]['distinguishedname'][0]);
+ }
+ }
+
+ return $entries;
+ }
+
+ /**
+ * Returns a list of Databases within any given storage group in Exchange for a given mail server
+ *
+ * @param string $storageGroup The full DN of an Storage Group. You can use exchange_storage_groups() to find the DN
+ * @param array $attributes An array of the AD attributes you wish to return
+ * @return array
+ */
+ public function exchange_storage_databases($storageGroup, $attributes = array('cn','distinguishedname','displayname')) {
+ if (!$this->_bind){ return (false); }
+ if ($storageGroup===NULL){ return ("Missing compulsory field [storageGroup]"); }
+
+ $filter = '(&(objectCategory=msExchPrivateMDB))';
+ $sr=@ldap_search($this->_conn, $storageGroup, $filter, $attributes);
+ $entries = @ldap_get_entries($this->_conn, $sr);
+ return $entries;
+ }
+
+ //************************************************************************************************************
+ // SERVER FUNCTIONS
+
+ /**
+ * Find the Base DN of your domain controller
+ *
+ * @return string
+ */
+ public function find_base_dn() {
+ $namingContext = $this->get_root_dse(array('defaultnamingcontext'));
+ return $namingContext[0]['defaultnamingcontext'][0];
+ }
+
+ /**
+ * Get the RootDSE properties from a domain controller
+ *
+ * @param array $attributes The attributes you wish to query e.g. defaultnamingcontext
+ * @return array
+ */
+ public function get_root_dse($attributes = array("*", "+")) {
+ if (!$this->_bind){ return (false); }
+
+ $sr = @ldap_read($this->_conn, NULL, 'objectClass=*', $attributes);
+ $entries = @ldap_get_entries($this->_conn, $sr);
+ return $entries;
+ }
+
+ //************************************************************************************************************
+ // UTILITY FUNCTIONS (Many of these functions are protected and can only be called from within the class)
+
+ /**
+ * Get last error from Active Directory
+ *
+ * This function gets the last message from Active Directory
+ * This may indeed be a 'Success' message but if you get an unknown error
+ * it might be worth calling this function to see what errors were raised
+ *
+ * return string
+ */
+ public function get_last_error() {
+ return @ldap_error($this->_conn);
+ }
+
+ /**
+ * Detect LDAP support in php
+ *
+ * @return bool
+ */
+ protected function ldap_supported() {
+ if (!function_exists('ldap_connect')) {
+ return (false);
+ }
+ return (true);
+ }
+
+ /**
+ * Schema
+ *
+ * @param array $attributes Attributes to be queried
+ * @return array
+ */
+ protected function adldap_schema($attributes){
+
+ // LDAP doesn't like NULL attributes, only set them if they have values
+ // If you wish to remove an attribute you should set it to a space
+ // TO DO: Adapt user_modify to use ldap_mod_delete to remove a NULL attribute
+ $mod=array();
+
+ // Check every attribute to see if it contains 8bit characters and then UTF8 encode them
+ array_walk($attributes, array($this, 'encode8bit'));
+
+ if ($attributes["address_city"]){ $mod["l"][0]=$attributes["address_city"]; }
+ if ($attributes["address_code"]){ $mod["postalCode"][0]=$attributes["address_code"]; }
+ //if ($attributes["address_country"]){ $mod["countryCode"][0]=$attributes["address_country"]; } // use country codes?
+ if ($attributes["address_country"]){ $mod["c"][0]=$attributes["address_country"]; }
+ if ($attributes["address_pobox"]){ $mod["postOfficeBox"][0]=$attributes["address_pobox"]; }
+ if ($attributes["address_state"]){ $mod["st"][0]=$attributes["address_state"]; }
+ if ($attributes["address_street"]){ $mod["streetAddress"][0]=$attributes["address_street"]; }
+ if ($attributes["company"]){ $mod["company"][0]=$attributes["company"]; }
+ if ($attributes["change_password"]){ $mod["pwdLastSet"][0]=0; }
+ if ($attributes["department"]){ $mod["department"][0]=$attributes["department"]; }
+ if ($attributes["description"]){ $mod["description"][0]=$attributes["description"]; }
+ if ($attributes["display_name"]){ $mod["displayName"][0]=$attributes["display_name"]; }
+ if ($attributes["email"]){ $mod["mail"][0]=$attributes["email"]; }
+ if ($attributes["expires"]){ $mod["accountExpires"][0]=$attributes["expires"]; } //unix epoch format?
+ if ($attributes["firstname"]){ $mod["givenName"][0]=$attributes["firstname"]; }
+ if ($attributes["home_directory"]){ $mod["homeDirectory"][0]=$attributes["home_directory"]; }
+ if ($attributes["home_drive"]){ $mod["homeDrive"][0]=$attributes["home_drive"]; }
+ if ($attributes["initials"]){ $mod["initials"][0]=$attributes["initials"]; }
+ if ($attributes["logon_name"]){ $mod["userPrincipalName"][0]=$attributes["logon_name"]; }
+ if ($attributes["manager"]){ $mod["manager"][0]=$attributes["manager"]; } //UNTESTED ***Use DistinguishedName***
+ if ($attributes["office"]){ $mod["physicalDeliveryOfficeName"][0]=$attributes["office"]; }
+ if ($attributes["password"]){ $mod["unicodePwd"][0]=$this->encode_password($attributes["password"]); }
+ if ($attributes["profile_path"]){ $mod["profilepath"][0]=$attributes["profile_path"]; }
+ if ($attributes["script_path"]){ $mod["scriptPath"][0]=$attributes["script_path"]; }
+ if ($attributes["surname"]){ $mod["sn"][0]=$attributes["surname"]; }
+ if ($attributes["title"]){ $mod["title"][0]=$attributes["title"]; }
+ if ($attributes["telephone"]){ $mod["telephoneNumber"][0]=$attributes["telephone"]; }
+ if ($attributes["mobile"]){ $mod["mobile"][0]=$attributes["mobile"]; }
+ if ($attributes["pager"]){ $mod["pager"][0]=$attributes["pager"]; }
+ if ($attributes["ipphone"]){ $mod["ipphone"][0]=$attributes["ipphone"]; }
+ if ($attributes["web_page"]){ $mod["wWWHomePage"][0]=$attributes["web_page"]; }
+ if ($attributes["fax"]){ $mod["facsimileTelephoneNumber"][0]=$attributes["fax"]; }
+ if ($attributes["enabled"]){ $mod["userAccountControl"][0]=$attributes["enabled"]; }
+
+ // Distribution List specific schema
+ if ($attributes["group_sendpermission"]){ $mod["dlMemSubmitPerms"][0]=$attributes["group_sendpermission"]; }
+ if ($attributes["group_rejectpermission"]){ $mod["dlMemRejectPerms"][0]=$attributes["group_rejectpermission"]; }
+
+ // Exchange Schema
+ if ($attributes["exchange_homemdb"]){ $mod["homeMDB"][0]=$attributes["exchange_homemdb"]; }
+ if ($attributes["exchange_mailnickname"]){ $mod["mailNickname"][0]=$attributes["exchange_mailnickname"]; }
+ if ($attributes["exchange_proxyaddress"]){ $mod["proxyAddresses"][0]=$attributes["exchange_proxyaddress"]; }
+ if ($attributes["exchange_usedefaults"]){ $mod["mDBUseDefaults"][0]=$attributes["exchange_usedefaults"]; }
+ if ($attributes["exchange_policyexclude"]){ $mod["msExchPoliciesExcluded"][0]=$attributes["exchange_policyexclude"]; }
+ if ($attributes["exchange_policyinclude"]){ $mod["msExchPoliciesIncluded"][0]=$attributes["exchange_policyinclude"]; }
+
+ // This schema is designed for contacts
+ if ($attributes["exchange_hidefromlists"]){ $mod["msExchHideFromAddressLists"][0]=$attributes["exchange_hidefromlists"]; }
+ if ($attributes["contact_email"]){ $mod["targetAddress"][0]=$attributes["contact_email"]; }
+
+ //echo ("<pre>"); print_r($mod);
+ /*
+ // modifying a name is a bit fiddly
+ if ($attributes["firstname"] && $attributes["surname"]){
+ $mod["cn"][0]=$attributes["firstname"]." ".$attributes["surname"];
+ $mod["displayname"][0]=$attributes["firstname"]." ".$attributes["surname"];
+ $mod["name"][0]=$attributes["firstname"]." ".$attributes["surname"];
+ }
+ */
+
+ if (count($mod)==0){ return (false); }
+ return ($mod);
+ }
+
+ /**
+ * Coping with AD not returning the primary group
+ * http://support.microsoft.com/?kbid=321360
+ *
+ * For some reason it's not possible to search on primarygrouptoken=XXX
+ * If someone can show otherwise, I'd like to know about it :)
+ * this way is resource intensive and generally a pain in the @#%^
+ *
+ * @deprecated deprecated since version 3.1, see get get_primary_group
+ * @param string $gid Group ID
+ * @return string
+ */
+ protected function group_cn($gid){
+ if ($gid===NULL){ return (false); }
+ $r=false;
+
+ $filter="(&(objectCategory=group)(samaccounttype=". ADLDAP_SECURITY_GLOBAL_GROUP ."))";
+ $fields=array("primarygrouptoken","samaccountname","distinguishedname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ for ($i=0; $i<$entries["count"]; $i++){
+ if ($entries[$i]["primarygrouptoken"][0]==$gid){
+ $r=$entries[$i]["distinguishedname"][0];
+ $i=$entries["count"];
+ }
+ }
+
+ return ($r);
+ }
+
+ /**
+ * Coping with AD not returning the primary group
+ * http://support.microsoft.com/?kbid=321360
+ *
+ * This is a re-write based on code submitted by Bruce which prevents the
+ * need to search each security group to find the true primary group
+ *
+ * @param string $gid Group ID
+ * @param string $usersid User's Object SID
+ * @return string
+ */
+ protected function get_primary_group($gid, $usersid){
+ if ($gid===NULL || $usersid===NULL){ return (false); }
+ $r=false;
+
+ $gsid = substr_replace($usersid,pack('V',$gid),strlen($usersid)-4,4);
+ $filter='(objectsid='.$this->getTextSID($gsid).')';
+ $fields=array("samaccountname","distinguishedname");
+ $sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields);
+ $entries = ldap_get_entries($this->_conn, $sr);
+
+ return $entries[0]['distinguishedname'][0];
+ }
+
+ /**
+ * Convert a binary SID to a text SID
+ *
+ * @param string $binsid A Binary SID
+ * @return string
+ */
+ protected function getTextSID($binsid) {
+ $hex_sid = bin2hex($binsid);
+ $rev = hexdec(substr($hex_sid, 0, 2));
+ $subcount = hexdec(substr($hex_sid, 2, 2));
+ $auth = hexdec(substr($hex_sid, 4, 12));
+ $result = "$rev-$auth";
+
+ for ($x=0;$x < $subcount; $x++) {
+ $subauth[$x] =
+ hexdec($this->little_endian(substr($hex_sid, 16 + ($x * 8), 8)));
+ $result .= "-" . $subauth[$x];
+ }
+
+ // Cheat by tacking on the S-
+ return 'S-' . $result;
+ }
+
+ /**
+ * Converts a little-endian hex number to one that hexdec() can convert
+ *
+ * @param string $hex A hex code
+ * @return string
+ */
+ protected function little_endian($hex) {
+ $result = '';
+ for ($x = strlen($hex) - 2; $x >= 0; $x = $x - 2) {
+ $result .= substr($hex, $x, 2);
+ }
+ return $result;
+ }
+
+ /**
+ * Converts a binary attribute to a string
+ *
+ * @param string $bin A binary LDAP attribute
+ * @return string
+ */
+ protected function binary2text($bin) {
+ $hex_guid = bin2hex($bin);
+ $hex_guid_to_guid_str = '';
+ for($k = 1; $k <= 4; ++$k) {
+ $hex_guid_to_guid_str .= substr($hex_guid, 8 - 2 * $k, 2);
+ }
+ $hex_guid_to_guid_str .= '-';
+ for($k = 1; $k <= 2; ++$k) {
+ $hex_guid_to_guid_str .= substr($hex_guid, 12 - 2 * $k, 2);
+ }
+ $hex_guid_to_guid_str .= '-';
+ for($k = 1; $k <= 2; ++$k) {
+ $hex_guid_to_guid_str .= substr($hex_guid, 16 - 2 * $k, 2);
+ }
+ $hex_guid_to_guid_str .= '-' . substr($hex_guid, 16, 4);
+ $hex_guid_to_guid_str .= '-' . substr($hex_guid, 20);
+ return strtoupper($hex_guid_to_guid_str);
+ }
+
+ /**
+ * Converts a binary GUID to a string GUID
+ *
+ * @param string $binaryGuid The binary GUID attribute to convert
+ * @return string
+ */
+ public function decodeGuid($binaryGuid) {
+ if ($binaryGuid === null){ return ("Missing compulsory field [binaryGuid]"); }
+
+ $strGUID = $this->binary2text($binaryGuid);
+ return ($strGUID);
+ }
+
+ /**
+ * Converts a string GUID to a hexdecimal value so it can be queried
+ *
+ * @param string $strGUID A string representation of a GUID
+ * @return string
+ */
+ protected function strguid2hex($strGUID) {
+ $strGUID = str_replace('-', '', $strGUID);
+
+ $octet_str = '\\' . substr($strGUID, 6, 2);
+ $octet_str .= '\\' . substr($strGUID, 4, 2);
+ $octet_str .= '\\' . substr($strGUID, 2, 2);
+ $octet_str .= '\\' . substr($strGUID, 0, 2);
+ $octet_str .= '\\' . substr($strGUID, 10, 2);
+ $octet_str .= '\\' . substr($strGUID, 8, 2);
+ $octet_str .= '\\' . substr($strGUID, 14, 2);
+ $octet_str .= '\\' . substr($strGUID, 12, 2);
+ //$octet_str .= '\\' . substr($strGUID, 16, strlen($strGUID));
+ for ($i=16; $i<=(strlen($strGUID)-2); $i++) {
+ if (($i % 2) == 0) {
+ $octet_str .= '\\' . substr($strGUID, $i, 2);
+ }
+ }
+
+ return $octet_str;
+ }
+
+ /**
+ * Obtain the user's distinguished name based on their userid
+ *
+ *
+ * @param string $username The username
+ * @param bool $isGUID Is the username passed a GUID or a samAccountName
+ * @return string
+ */
+ protected function user_dn($username,$isGUID=false){
+ $user=$this->user_info($username,array("cn"),$isGUID);
+ if ($user[0]["dn"]===NULL){ return (false); }
+ $user_dn=$user[0]["dn"];
+ return ($user_dn);
+ }
+
+ /**
+ * Encode a password for transmission over LDAP
+ *
+ * @param string $password The password to encode
+ * @return string
+ */
+ protected function encode_password($password){
+ $password="\"".$password."\"";
+ $encoded="";
+ for ($i=0; $i <strlen($password); $i++){ $encoded.="{$password{$i}}\000"; }
+ return ($encoded);
+ }
+
+ /**
+ * Escape strings for the use in LDAP filters
+ *
+ * DEVELOPERS SHOULD BE DOING PROPER FILTERING IF THEY'RE ACCEPTING USER INPUT
+ * Ported from Perl's Net::LDAP::Util escape_filter_value
+ *
+ * @param string $str The string the parse
+ * @author Port by Andreas Gohr <andi@splitbrain.org>
+ * @return string
+ */
+ protected function ldap_slashes($str){
+ return preg_replace('/([\x00-\x1F\*\(\)\\\\])/e',
+ '"\\\\\".join("",unpack("H2","$1"))',
+ $str);
+ }
+
+ /**
+ * Select a random domain controller from your domain controller array
+ *
+ * @return string
+ */
+ protected function random_controller(){
+ mt_srand(doubleval(microtime()) * 100000000); // For older PHP versions
+ return ($this->_domain_controllers[array_rand($this->_domain_controllers)]);
+ }
+
+ /**
+ * Account control options
+ *
+ * @param array $options The options to convert to int
+ * @return int
+ */
+ protected function account_control($options){
+ $val=0;
+
+ if (is_array($options)){
+ if (in_array("SCRIPT",$options)){ $val=$val+1; }
+ if (in_array("ACCOUNTDISABLE",$options)){ $val=$val+2; }
+ if (in_array("HOMEDIR_REQUIRED",$options)){ $val=$val+8; }
+ if (in_array("LOCKOUT",$options)){ $val=$val+16; }
+ if (in_array("PASSWD_NOTREQD",$options)){ $val=$val+32; }
+ //PASSWD_CANT_CHANGE Note You cannot assign this permission by directly modifying the UserAccountControl attribute.
+ //For information about how to set the permission programmatically, see the "Property flag descriptions" section.
+ if (in_array("ENCRYPTED_TEXT_PWD_ALLOWED",$options)){ $val=$val+128; }
+ if (in_array("TEMP_DUPLICATE_ACCOUNT",$options)){ $val=$val+256; }
+ if (in_array("NORMAL_ACCOUNT",$options)){ $val=$val+512; }
+ if (in_array("INTERDOMAIN_TRUST_ACCOUNT",$options)){ $val=$val+2048; }
+ if (in_array("WORKSTATION_TRUST_ACCOUNT",$options)){ $val=$val+4096; }
+ if (in_array("SERVER_TRUST_ACCOUNT",$options)){ $val=$val+8192; }
+ if (in_array("DONT_EXPIRE_PASSWORD",$options)){ $val=$val+65536; }
+ if (in_array("MNS_LOGON_ACCOUNT",$options)){ $val=$val+131072; }
+ if (in_array("SMARTCARD_REQUIRED",$options)){ $val=$val+262144; }
+ if (in_array("TRUSTED_FOR_DELEGATION",$options)){ $val=$val+524288; }
+ if (in_array("NOT_DELEGATED",$options)){ $val=$val+1048576; }
+ if (in_array("USE_DES_KEY_ONLY",$options)){ $val=$val+2097152; }
+ if (in_array("DONT_REQ_PREAUTH",$options)){ $val=$val+4194304; }
+ if (in_array("PASSWORD_EXPIRED",$options)){ $val=$val+8388608; }
+ if (in_array("TRUSTED_TO_AUTH_FOR_DELEGATION",$options)){ $val=$val+16777216; }
+ }
+ return ($val);
+ }
+
+ /**
+ * Take an LDAP query and return the nice names, without all the LDAP prefixes (eg. CN, DN)
+ *
+ * @param array $groups
+ * @return array
+ */
+ protected function nice_names($groups){
+
+ $group_array=array();
+ for ($i=0; $i<$groups["count"]; $i++){ // For each group
+ $line=$groups[$i];
+
+ if (strlen($line)>0){
+ // More presumptions, they're all prefixed with CN=
+ // so we ditch the first three characters and the group
+ // name goes up to the first comma
+ $bits=explode(",",$line);
+ $group_array[]=substr($bits[0],3,(strlen($bits[0])-3));
+ }
+ }
+ return ($group_array);
+ }
+
+ /**
+ * Delete a distinguished name from Active Directory
+ * You should never need to call this yourself, just use the wrapper functions user_delete and contact_delete
+ *
+ * @param string $dn The distinguished name to delete
+ * @return bool
+ */
+ protected function dn_delete($dn){
+ $result=ldap_delete($this->_conn, $dn);
+ if ($result!=true){ return (false); }
+ return (true);
+ }
+
+ /**
+ * Convert a boolean value to a string
+ * You should never need to call this yourself
+ *
+ * @param bool $bool Boolean value
+ * @return string
+ */
+ protected function bool2str($bool) {
+ return ($bool) ? 'TRUE' : 'FALSE';
+ }
+
+ /**
+ * Convert 8bit characters e.g. accented characters to UTF8 encoded characters
+ */
+ protected function encode8bit(&$item, $key) {
+ $encode = false;
+ if (is_string($item)) {
+ for ($i=0; $i<strlen($item); $i++) {
+ if (ord($item[$i]) >> 7) {
+ $encode = true;
+ }
+ }
+ }
+ if ($encode === true && $key != 'password') {
+ $item = utf8_encode($item);
+ }
+ }
+}
+
+/**
+* adLDAP Exception Handler
+*
+* Exceptions of this type are thrown on bind failure or when SSL is required but not configured
+* Example:
+* try {
+* $adldap = new adLDAP();
+* }
+* catch (adLDAPException $e) {
+* echo $e;
+* exit();
+* }
+*/
+class adLDAPException extends Exception {}
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth.php
new file mode 100644
index 000000000..587e7c4e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth.php
@@ -0,0 +1,1099 @@
+<?php
+/**
+ * Authentication library
+ *
+ * Including this file will automatically try to login
+ * a user by calling auth_login()
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/io.php');
+
+// some ACL level defines
+define('AUTH_NONE',0);
+define('AUTH_READ',1);
+define('AUTH_EDIT',2);
+define('AUTH_CREATE',4);
+define('AUTH_UPLOAD',8);
+define('AUTH_DELETE',16);
+define('AUTH_ADMIN',255);
+
+global $conf;
+
+if($conf['useacl']){
+ require_once(DOKU_INC.'inc/blowfish.php');
+ require_once(DOKU_INC.'inc/mail.php');
+
+ global $auth;
+
+ // load the the backend auth functions and instantiate the auth object
+ if (@file_exists(DOKU_INC.'inc/auth/'.$conf['authtype'].'.class.php')) {
+ require_once(DOKU_INC.'inc/auth/basic.class.php');
+ require_once(DOKU_INC.'inc/auth/'.$conf['authtype'].'.class.php');
+
+ $auth_class = "auth_".$conf['authtype'];
+ if (class_exists($auth_class)) {
+ $auth = new $auth_class();
+ if ($auth->success == false) {
+ // degrade to unauthenticated user
+ unset($auth);
+ auth_logoff();
+ msg($lang['authtempfail'], -1);
+ }
+ } else {
+ nice_die($lang['authmodfailed']);
+ }
+ } else {
+ nice_die($lang['authmodfailed']);
+ }
+}
+
+// do the login either by cookie or provided credentials
+if($conf['useacl']){
+ if($auth){
+ if (!isset($_REQUEST['u'])) $_REQUEST['u'] = '';
+ if (!isset($_REQUEST['p'])) $_REQUEST['p'] = '';
+ if (!isset($_REQUEST['r'])) $_REQUEST['r'] = '';
+ $_REQUEST['http_credentials'] = false;
+ if (!$conf['rememberme']) $_REQUEST['r'] = false;
+
+ // streamline HTTP auth credentials (IIS/rewrite -> mod_php)
+ if(isset($_SERVER['HTTP_AUTHORIZATION'])){
+ list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) =
+ explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
+ }
+
+ // if no credentials were given try to use HTTP auth (for SSO)
+ if(empty($_REQUEST['u']) && empty($_COOKIE[DOKU_COOKIE]) && !empty($_SERVER['PHP_AUTH_USER'])){
+ $_REQUEST['u'] = $_SERVER['PHP_AUTH_USER'];
+ $_REQUEST['p'] = $_SERVER['PHP_AUTH_PW'];
+ $_REQUEST['http_credentials'] = true;
+ }
+
+ // apply cleaning
+ $_REQUEST['u'] = $auth->cleanUser($_REQUEST['u']);
+
+ if(isset($_REQUEST['authtok'])){
+ // when an authentication token is given, trust the session
+ auth_validateToken($_REQUEST['authtok']);
+ }elseif(!is_null($auth) && $auth->canDo('external')){
+ // external trust mechanism in place
+ $auth->trustExternal($_REQUEST['u'],$_REQUEST['p'],$_REQUEST['r']);
+ }else{
+ $evdata = array(
+ 'user' => $_REQUEST['u'],
+ 'password' => $_REQUEST['p'],
+ 'sticky' => $_REQUEST['r'],
+ 'silent' => $_REQUEST['http_credentials'],
+ );
+ $evt = new Doku_Event('AUTH_LOGIN_CHECK',$evdata);
+ if($evt->advise_before()){
+ auth_login($evdata['user'],
+ $evdata['password'],
+ $evdata['sticky'],
+ $evdata['silent']);
+ }
+ }
+ }
+
+ //load ACL into a global array
+ global $AUTH_ACL;
+ if($auth->cando['getACL']) {
+ $AUTH_ACL = $auth->getACL();
+ //support user wildcard
+ if(isset($_SERVER['REMOTE_USER'])){
+ $AUTH_ACL = str_replace('%USER%',$_SERVER['REMOTE_USER'],$AUTH_ACL);
+ $AUTH_ACL = str_replace('@USER@',$_SERVER['REMOTE_USER'],$AUTH_ACL); //legacy
+ }
+ }
+ elseif(is_readable(DOKU_CONF.'acl.auth.php')){
+ $AUTH_ACL = file(DOKU_CONF.'acl.auth.php');
+ //support user wildcard
+ if(isset($_SERVER['REMOTE_USER'])){
+ $AUTH_ACL = str_replace('%USER%',$_SERVER['REMOTE_USER'],$AUTH_ACL);
+ $AUTH_ACL = str_replace('@USER@',$_SERVER['REMOTE_USER'],$AUTH_ACL); //legacy
+ }
+ }else{
+ $AUTH_ACL = array();
+ }
+}
+
+/**
+ * This tries to login the user based on the sent auth credentials
+ *
+ * The authentication works like this: if a username was given
+ * a new login is assumed and user/password are checked. If they
+ * are correct the password is encrypted with blowfish and stored
+ * together with the username in a cookie - the same info is stored
+ * in the session, too. Additonally a browserID is stored in the
+ * session.
+ *
+ * If no username was given the cookie is checked: if the username,
+ * crypted password and browserID match between session and cookie
+ * no further testing is done and the user is accepted
+ *
+ * If a cookie was found but no session info was availabe the
+ * blowfish encrypted password from the cookie is decrypted and
+ * together with username rechecked by calling this function again.
+ *
+ * On a successful login $_SERVER[REMOTE_USER] and $USERINFO
+ * are set.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $user Username
+ * @param string $pass Cleartext Password
+ * @param bool $sticky Cookie should not expire
+ * @param bool $silent Don't show error on bad auth
+ * @return bool true on successful auth
+ */
+function auth_login($user,$pass,$sticky=false,$silent=false){
+ global $USERINFO;
+ global $conf;
+ global $lang;
+ global $auth;
+ $sticky ? $sticky = true : $sticky = false; //sanity check
+
+ if (!$auth) return false;
+
+ if(!empty($user)){
+ //usual login
+ if ($auth->checkPass($user,$pass)){
+ // make logininfo globally available
+ $_SERVER['REMOTE_USER'] = $user;
+ auth_setCookie($user,PMA_blowfish_encrypt($pass,auth_cookiesalt()),$sticky);
+ return true;
+ }else{
+ //invalid credentials - log off
+ if(!$silent) msg($lang['badlogin'],-1);
+ auth_logoff();
+ return false;
+ }
+ }else{
+ // read cookie information
+ list($user,$sticky,$pass) = auth_getCookie();
+ // get session info
+ $session = $_SESSION[DOKU_COOKIE]['auth'];
+ if($user && $pass){
+ // we got a cookie - see if we can trust it
+ if(isset($session) &&
+ $auth->useSessionCache($user) &&
+ ($session['time'] >= time()-$conf['auth_security_timeout']) &&
+ ($session['user'] == $user) &&
+ ($session['pass'] == $pass) && //still crypted
+ ($session['buid'] == auth_browseruid()) ){
+ // he has session, cookie and browser right - let him in
+ $_SERVER['REMOTE_USER'] = $user;
+ $USERINFO = $session['info']; //FIXME move all references to session
+ return true;
+ }
+ // no we don't trust it yet - recheck pass but silent
+ $pass = PMA_blowfish_decrypt($pass,auth_cookiesalt());
+ return auth_login($user,$pass,$sticky,true);
+ }
+ }
+ //just to be sure
+ auth_logoff(true);
+ return false;
+}
+
+/**
+ * Checks if a given authentication token was stored in the session
+ *
+ * Will setup authentication data using data from the session if the
+ * token is correct. Will exit with a 401 Status if not.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $token The authentication token
+ * @return boolean true (or will exit on failure)
+ */
+function auth_validateToken($token){
+ if(!$token || $token != $_SESSION[DOKU_COOKIE]['auth']['token']){
+ // bad token
+ header("HTTP/1.0 401 Unauthorized");
+ print 'Invalid auth token - maybe the session timed out';
+ unset($_SESSION[DOKU_COOKIE]['auth']['token']); // no second chance
+ exit;
+ }
+ // still here? trust the session data
+ global $USERINFO;
+ $_SERVER['REMOTE_USER'] = $_SESSION[DOKU_COOKIE]['auth']['user'];
+ $USERINFO = $_SESSION[DOKU_COOKIE]['auth']['info'];
+ return true;
+}
+
+/**
+ * Create an auth token and store it in the session
+ *
+ * NOTE: this is completely unrelated to the getSecurityToken() function
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return string The auth token
+ */
+function auth_createToken(){
+ $token = md5(mt_rand());
+ @session_start(); // reopen the session if needed
+ $_SESSION[DOKU_COOKIE]['auth']['token'] = $token;
+ session_write_close();
+ return $token;
+}
+
+/**
+ * Builds a pseudo UID from browser and IP data
+ *
+ * This is neither unique nor unfakable - still it adds some
+ * security. Using the first part of the IP makes sure
+ * proxy farms like AOLs are stil okay.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @return string a MD5 sum of various browser headers
+ */
+function auth_browseruid(){
+ $ip = clientIP(true);
+ $uid = '';
+ $uid .= $_SERVER['HTTP_USER_AGENT'];
+ $uid .= $_SERVER['HTTP_ACCEPT_ENCODING'];
+ $uid .= $_SERVER['HTTP_ACCEPT_LANGUAGE'];
+ $uid .= $_SERVER['HTTP_ACCEPT_CHARSET'];
+ $uid .= substr($ip,0,strpos($ip,'.'));
+ return md5($uid);
+}
+
+/**
+ * Creates a random key to encrypt the password in cookies
+ *
+ * This function tries to read the password for encrypting
+ * cookies from $conf['metadir'].'/_htcookiesalt'
+ * if no such file is found a random key is created and
+ * and stored in this file.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @return string
+ */
+function auth_cookiesalt(){
+ global $conf;
+ $file = $conf['metadir'].'/_htcookiesalt';
+ $salt = io_readFile($file);
+ if(empty($salt)){
+ $salt = uniqid(rand(),true);
+ io_saveFile($file,$salt);
+ }
+ return $salt;
+}
+
+/**
+ * Log out the current user
+ *
+ * This clears all authentication data and thus log the user
+ * off. It also clears session data.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param bool $keepbc - when true, the breadcrumb data is not cleared
+ */
+function auth_logoff($keepbc=false){
+ global $conf;
+ global $USERINFO;
+ global $INFO, $ID;
+ global $auth;
+
+ // make sure the session is writable (it usually is)
+ @session_start();
+
+ if(isset($_SESSION[DOKU_COOKIE]['auth']['user']))
+ unset($_SESSION[DOKU_COOKIE]['auth']['user']);
+ if(isset($_SESSION[DOKU_COOKIE]['auth']['pass']))
+ unset($_SESSION[DOKU_COOKIE]['auth']['pass']);
+ if(isset($_SESSION[DOKU_COOKIE]['auth']['info']))
+ unset($_SESSION[DOKU_COOKIE]['auth']['info']);
+ if(!$keepbc && isset($_SESSION[DOKU_COOKIE]['bc']))
+ unset($_SESSION[DOKU_COOKIE]['bc']);
+ if(isset($_SERVER['REMOTE_USER']))
+ unset($_SERVER['REMOTE_USER']);
+ $USERINFO=null; //FIXME
+
+ if (version_compare(PHP_VERSION, '5.2.0', '>')) {
+ setcookie(DOKU_COOKIE,'',time()-600000,DOKU_REL,'',($conf['securecookie'] && is_ssl()),true);
+ }else{
+ setcookie(DOKU_COOKIE,'',time()-600000,DOKU_REL,'',($conf['securecookie'] && is_ssl()));
+ }
+
+ if($auth && $auth->canDo('logoff')){
+ $auth->logOff();
+ }
+}
+
+/**
+ * Check if a user is a manager
+ *
+ * Should usually be called without any parameters to check the current
+ * user.
+ *
+ * The info is available through $INFO['ismanager'], too
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see auth_isadmin
+ * @param string user - Username
+ * @param array groups - List of groups the user is in
+ * @param bool adminonly - when true checks if user is admin
+ */
+function auth_ismanager($user=null,$groups=null,$adminonly=false){
+ global $conf;
+ global $USERINFO;
+ global $auth;
+
+ if (!$auth) return false;
+ if(is_null($user)) {
+ if (!isset($_SERVER['REMOTE_USER'])) {
+ return false;
+ } else {
+ $user = $_SERVER['REMOTE_USER'];
+ }
+ }
+ $user = $auth->cleanUser($user);
+ if(is_null($groups)) $groups = (array) $USERINFO['grps'];
+ $groups = array_map(array($auth,'cleanGroup'),$groups);
+ $user = auth_nameencode($user);
+
+ // check username against superuser and manager
+ $superusers = explode(',', $conf['superuser']);
+ $superusers = array_unique($superusers);
+ $superusers = array_map('trim', $superusers);
+ // prepare an array containing only true values for array_map call
+ $alltrue = array_fill(0, count($superusers), true);
+ $superusers = array_map('auth_nameencode', $superusers, $alltrue);
+
+ // case insensitive?
+ if(!$auth->isCaseSensitive()){
+ $superusers = array_map('utf8_strtolower',$superusers);
+ $user = utf8_strtolower($user);
+ }
+
+ // check user match
+ if(in_array($user, $superusers)) return true;
+
+ // check managers
+ if(!$adminonly){
+ $managers = explode(',', $conf['manager']);
+ $managers = array_unique($managers);
+ $managers = array_map('trim', $managers);
+ // prepare an array containing only true values for array_map call
+ $alltrue = array_fill(0, count($managers), true);
+ $managers = array_map('auth_nameencode', $managers, $alltrue);
+ if(!$auth->isCaseSensitive()) $managers = array_map('utf8_strtolower',$managers);
+ if(in_array($user, $managers)) return true;
+ }
+
+ // check user's groups against superuser and manager
+ if (!empty($groups)) {
+
+ //prepend groups with @ and nameencode
+ $cnt = count($groups);
+ for($i=0; $i<$cnt; $i++){
+ $groups[$i] = '@'.auth_nameencode($groups[$i]);
+ if(!$auth->isCaseSensitive()){
+ $groups[$i] = utf8_strtolower($groups[$i]);
+ }
+ }
+
+ // check groups against superuser and manager
+ foreach($superusers as $supu)
+ if(in_array($supu, $groups)) return true;
+ if(!$adminonly){
+ foreach($managers as $mana)
+ if(in_array($mana, $groups)) return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Check if a user is admin
+ *
+ * Alias to auth_ismanager with adminonly=true
+ *
+ * The info is available through $INFO['isadmin'], too
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see auth_ismanager
+ */
+function auth_isadmin($user=null,$groups=null){
+ return auth_ismanager($user,$groups,true);
+}
+
+/**
+ * Convinience function for auth_aclcheck()
+ *
+ * This checks the permissions for the current user
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $id page ID (needs to be resolved and cleaned)
+ * @return int permission level
+ */
+function auth_quickaclcheck($id){
+ global $conf;
+ global $USERINFO;
+ # if no ACL is used always return upload rights
+ if(!$conf['useacl']) return AUTH_UPLOAD;
+ //error_log("DOKUWIKI: auth_quickaclcheck:".$_SERVER['REMOTE_USER'].":".$id.json_encode($USERINFO));
+ return auth_aclcheck($id,$_SERVER['REMOTE_USER'],$USERINFO['grps']);
+}
+
+/**
+ * Returns the maximum rights a user has for
+ * the given ID or its namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $id page ID (needs to be resolved and cleaned)
+ * @param string $user Username
+ * @param array $groups Array of groups the user is in
+ * @return int permission level
+ */
+function auth_aclcheck($id,$user,$groups){
+ global $conf;
+ global $AUTH_ACL;
+ global $auth;
+
+ // if no ACL is used always return upload rights
+ if(!$conf['useacl']) return AUTH_UPLOAD;
+ if (!$auth) return AUTH_NONE;
+
+ //make sure groups is an array
+ if(!is_array($groups)) $groups = array();
+
+ //if user is superuser or in superusergroup return 255 (acl_admin)
+ if(auth_isadmin($user,$groups)) { return AUTH_ADMIN; }
+
+ $ci = '';
+ if(!$auth->isCaseSensitive()) $ci = 'ui';
+
+ $user = $auth->cleanUser($user);
+ $groups = array_map(array($auth,'cleanGroup'),(array)$groups);
+ $user = auth_nameencode($user);
+
+ //prepend groups with @ and nameencode
+ $cnt = count($groups);
+ for($i=0; $i<$cnt; $i++){
+ $groups[$i] = '@'.auth_nameencode($groups[$i]);
+ }
+
+ $ns = getNS($id);
+ $perm = -1;
+
+ if($user || count($groups)){
+ //add ALL group
+ $groups[] = '@ALL';
+ //add User
+ if($user) $groups[] = $user;
+ //build regexp
+ $regexp = join('|',$groups);
+ }else{
+ $regexp = '@ALL';
+ }
+
+ //check exact match first
+ $matches = preg_grep('/^'.preg_quote($id,'/').'\s+('.$regexp.')\s+/'.$ci,$AUTH_ACL);
+ if(count($matches)){
+ foreach($matches as $match){
+ $match = preg_replace('/#.*$/','',$match); //ignore comments
+ $acl = preg_split('/\s+/',$match);
+ if($acl[2] > AUTH_DELETE) $acl[2] = AUTH_DELETE; //no admins in the ACL!
+ if($acl[2] > $perm){
+ $perm = $acl[2];
+ }
+ }
+ if($perm > -1){
+ //we had a match - return it
+ return $perm;
+ }
+ }
+
+ //still here? do the namespace checks
+ if($ns){
+ $path = $ns.':\*';
+ }else{
+ $path = '\*'; //root document
+ }
+
+ do{
+ $matches = preg_grep('/^'.$path.'\s+('.$regexp.')\s+/'.$ci,$AUTH_ACL);
+ if(count($matches)){
+ foreach($matches as $match){
+ $match = preg_replace('/#.*$/','',$match); //ignore comments
+ $acl = preg_split('/\s+/',$match);
+ if($acl[2] > AUTH_DELETE) $acl[2] = AUTH_DELETE; //no admins in the ACL!
+ if($acl[2] > $perm){
+ $perm = $acl[2];
+ }
+ }
+ //we had a match - return it
+ return $perm;
+ }
+
+ //get next higher namespace
+ $ns = getNS($ns);
+
+ if($path != '\*'){
+ $path = $ns.':\*';
+ if($path == ':\*') $path = '\*';
+ }else{
+ //we did this already
+ //looks like there is something wrong with the ACL
+ //break here
+ msg('No ACL setup yet! Denying access to everyone.');
+ return AUTH_NONE;
+ }
+ }while(1); //this should never loop endless
+
+ //still here? return no permissions
+ return AUTH_NONE;
+}
+
+/**
+ * Encode ASCII special chars
+ *
+ * Some auth backends allow special chars in their user and groupnames
+ * The special chars are encoded with this function. Only ASCII chars
+ * are encoded UTF-8 multibyte are left as is (different from usual
+ * urlencoding!).
+ *
+ * Decoding can be done with rawurldecode
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ * @see rawurldecode()
+ */
+function auth_nameencode($name,$skip_group=false){
+ global $cache_authname;
+ $cache =& $cache_authname;
+ $name = (string) $name;
+
+ if (!isset($cache[$name][$skip_group])) {
+ if($skip_group && $name{0} =='@'){
+ $cache[$name][$skip_group] = '@'.preg_replace('/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f])/e',
+ "'%'.dechex(ord(substr('\\1',-1)))",substr($name,1));
+ }else{
+ $cache[$name][$skip_group] = preg_replace('/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f])/e',
+ "'%'.dechex(ord(substr('\\1',-1)))",$name);
+ }
+ }
+
+ return $cache[$name][$skip_group];
+}
+
+/**
+ * Create a pronouncable password
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://www.phpbuilder.com/annotate/message.php3?id=1014451
+ *
+ * @return string pronouncable password
+ */
+function auth_pwgen(){
+ $pw = '';
+ $c = 'bcdfghjklmnprstvwz'; //consonants except hard to speak ones
+ $v = 'aeiou'; //vowels
+ $a = $c.$v; //both
+
+ //use two syllables...
+ for($i=0;$i < 2; $i++){
+ $pw .= $c[rand(0, strlen($c)-1)];
+ $pw .= $v[rand(0, strlen($v)-1)];
+ $pw .= $a[rand(0, strlen($a)-1)];
+ }
+ //... and add a nice number
+ $pw .= rand(10,99);
+
+ return $pw;
+}
+
+/**
+ * Sends a password to the given user
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @return bool true on success
+ */
+function auth_sendPassword($user,$password){
+ global $conf;
+ global $lang;
+ global $auth;
+ if (!$auth) return false;
+
+ $hdrs = '';
+ $user = $auth->cleanUser($user);
+ $userinfo = $auth->getUserData($user);
+
+ if(!$userinfo['mail']) return false;
+
+ $text = rawLocale('password');
+ $text = str_replace('@DOKUWIKIURL@',DOKU_URL,$text);
+ $text = str_replace('@FULLNAME@',$userinfo['name'],$text);
+ $text = str_replace('@LOGIN@',$user,$text);
+ $text = str_replace('@PASSWORD@',$password,$text);
+ $text = str_replace('@TITLE@',$conf['title'],$text);
+
+ return mail_send($userinfo['name'].' <'.$userinfo['mail'].'>',
+ $lang['regpwmail'],
+ $text,
+ $conf['mailfrom']);
+}
+
+/**
+ * Register a new user
+ *
+ * This registers a new user - Data is read directly from $_POST
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @return bool true on success, false on any error
+ */
+function register(){
+ global $lang;
+ global $conf;
+ global $auth;
+
+ if (!$auth) return false;
+ if(!$_POST['save']) return false;
+ if(!$auth->canDo('addUser')) return false;
+
+ //clean username
+ $_POST['login'] = trim($auth->cleanUser($_POST['login']));
+
+ //clean fullname and email
+ $_POST['fullname'] = trim(preg_replace('/[\x00-\x1f:<>&%,;]+/','',$_POST['fullname']));
+ $_POST['email'] = trim(preg_replace('/[\x00-\x1f:<>&%,;]+/','',$_POST['email']));
+
+ if( empty($_POST['login']) ||
+ empty($_POST['fullname']) ||
+ empty($_POST['email']) ){
+ msg($lang['regmissing'],-1);
+ return false;
+ }
+
+ if ($conf['autopasswd']) {
+ $pass = auth_pwgen(); // automatically generate password
+ } elseif (empty($_POST['pass']) ||
+ empty($_POST['passchk'])) {
+ msg($lang['regmissing'], -1); // complain about missing passwords
+ return false;
+ } elseif ($_POST['pass'] != $_POST['passchk']) {
+ msg($lang['regbadpass'], -1); // complain about misspelled passwords
+ return false;
+ } else {
+ $pass = $_POST['pass']; // accept checked and valid password
+ }
+
+ //check mail
+ if(!mail_isvalid($_POST['email'])){
+ msg($lang['regbadmail'],-1);
+ return false;
+ }
+
+ //okay try to create the user
+ if(!$auth->triggerUserMod('create', array($_POST['login'],$pass,$_POST['fullname'],$_POST['email']))){
+ msg($lang['reguexists'],-1);
+ return false;
+ }
+
+ // create substitutions for use in notification email
+ $substitutions = array(
+ 'NEWUSER' => $_POST['login'],
+ 'NEWNAME' => $_POST['fullname'],
+ 'NEWEMAIL' => $_POST['email'],
+ );
+
+ if (!$conf['autopasswd']) {
+ msg($lang['regsuccess2'],1);
+ notify('', 'register', '', $_POST['login'], false, $substitutions);
+ return true;
+ }
+
+ // autogenerated password? then send him the password
+ if (auth_sendPassword($_POST['login'],$pass)){
+ msg($lang['regsuccess'],1);
+ notify('', 'register', '', $_POST['login'], false, $substitutions);
+ return true;
+ }else{
+ msg($lang['regmailfail'],-1);
+ return false;
+ }
+}
+
+/**
+ * Update user profile
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+function updateprofile() {
+ global $conf;
+ global $INFO;
+ global $lang;
+ global $auth;
+
+ if (!$auth) return false;
+ if(empty($_POST['save'])) return false;
+ if(!checkSecurityToken()) return false;
+
+ // should not be able to get here without Profile being possible...
+ if(!$auth->canDo('Profile')) {
+ msg($lang['profna'],-1);
+ return false;
+ }
+
+ if ($_POST['newpass'] != $_POST['passchk']) {
+ msg($lang['regbadpass'], -1); // complain about misspelled passwords
+ return false;
+ }
+
+ //clean fullname and email
+ $_POST['fullname'] = trim(preg_replace('/[\x00-\x1f:<>&%,;]+/','',$_POST['fullname']));
+ $_POST['email'] = trim(preg_replace('/[\x00-\x1f:<>&%,;]+/','',$_POST['email']));
+
+ if ((empty($_POST['fullname']) && $auth->canDo('modName')) ||
+ (empty($_POST['email']) && $auth->canDo('modMail'))) {
+ msg($lang['profnoempty'],-1);
+ return false;
+ }
+
+ if (!mail_isvalid($_POST['email']) && $auth->canDo('modMail')){
+ msg($lang['regbadmail'],-1);
+ return false;
+ }
+
+ if ($_POST['fullname'] != $INFO['userinfo']['name'] && $auth->canDo('modName')) $changes['name'] = $_POST['fullname'];
+ if ($_POST['email'] != $INFO['userinfo']['mail'] && $auth->canDo('modMail')) $changes['mail'] = $_POST['email'];
+ if (!empty($_POST['newpass']) && $auth->canDo('modPass')) $changes['pass'] = $_POST['newpass'];
+
+ if (!count($changes)) {
+ msg($lang['profnochange'], -1);
+ return false;
+ }
+
+ if ($conf['profileconfirm']) {
+ if (!$auth->checkPass($_SERVER['REMOTE_USER'], $_POST['oldpass'])) {
+ msg($lang['badlogin'],-1);
+ return false;
+ }
+ }
+
+ if ($result = $auth->triggerUserMod('modify', array($_SERVER['REMOTE_USER'], $changes))) {
+ // update cookie and session with the changed data
+ $cookie = base64_decode($_COOKIE[DOKU_COOKIE]);
+ list($user,$sticky,$pass) = explode('|',$cookie,3);
+ if ($changes['pass']) $pass = PMA_blowfish_encrypt($changes['pass'],auth_cookiesalt());
+
+ auth_setCookie($_SERVER['REMOTE_USER'],$pass,(bool)$sticky);
+ return true;
+ }
+}
+
+/**
+ * Send a new password
+ *
+ * This function handles both phases of the password reset:
+ *
+ * - handling the first request of password reset
+ * - validating the password reset auth token
+ *
+ * @author Benoit Chesneau <benoit@bchesneau.info>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @return bool true on success, false on any error
+ */
+function act_resendpwd(){
+ global $lang;
+ global $conf;
+ global $auth;
+
+ if(!actionOK('resendpwd')) return false;
+ if (!$auth) return false;
+
+ // should not be able to get here without modPass being possible...
+ if(!$auth->canDo('modPass')) {
+ msg($lang['resendna'],-1);
+ return false;
+ }
+
+ $token = preg_replace('/[^a-f0-9]+/','',$_REQUEST['pwauth']);
+
+ if($token){
+ // we're in token phase
+
+ $tfile = $conf['cachedir'].'/'.$token{0}.'/'.$token.'.pwauth';
+ if(!@file_exists($tfile)){
+ msg($lang['resendpwdbadauth'],-1);
+ return false;
+ }
+ $user = io_readfile($tfile);
+ @unlink($tfile);
+ $userinfo = $auth->getUserData($user);
+ if(!$userinfo['mail']) {
+ msg($lang['resendpwdnouser'], -1);
+ return false;
+ }
+
+ $pass = auth_pwgen();
+ if (!$auth->triggerUserMod('modify', array($user,array('pass' => $pass)))) {
+ msg('error modifying user data',-1);
+ return false;
+ }
+
+ if (auth_sendPassword($user,$pass)) {
+ msg($lang['resendpwdsuccess'],1);
+ } else {
+ msg($lang['regmailfail'],-1);
+ }
+ return true;
+
+ } else {
+ // we're in request phase
+
+ if(!$_POST['save']) return false;
+
+ if (empty($_POST['login'])) {
+ msg($lang['resendpwdmissing'], -1);
+ return false;
+ } else {
+ $user = trim($auth->cleanUser($_POST['login']));
+ }
+
+ $userinfo = $auth->getUserData($user);
+ if(!$userinfo['mail']) {
+ msg($lang['resendpwdnouser'], -1);
+ return false;
+ }
+
+ // generate auth token
+ $token = md5(auth_cookiesalt().$user); //secret but user based
+ $tfile = $conf['cachedir'].'/'.$token{0}.'/'.$token.'.pwauth';
+ $url = wl('',array('do'=>'resendpwd','pwauth'=>$token),true,'&');
+
+ io_saveFile($tfile,$user);
+
+ $text = rawLocale('pwconfirm');
+ $text = str_replace('@DOKUWIKIURL@',DOKU_URL,$text);
+ $text = str_replace('@FULLNAME@',$userinfo['name'],$text);
+ $text = str_replace('@LOGIN@',$user,$text);
+ $text = str_replace('@TITLE@',$conf['title'],$text);
+ $text = str_replace('@CONFIRM@',$url,$text);
+
+ if(mail_send($userinfo['name'].' <'.$userinfo['mail'].'>',
+ $lang['regpwmail'],
+ $text,
+ $conf['mailfrom'])){
+ msg($lang['resendpwdconfirm'],1);
+ }else{
+ msg($lang['regmailfail'],-1);
+ }
+ return true;
+ }
+
+ return false; // never reached
+}
+
+/**
+ * Encrypts a password using the given method and salt
+ *
+ * If the selected method needs a salt and none was given, a random one
+ * is chosen.
+ *
+ * The following methods are understood:
+ *
+ * smd5 - Salted MD5 hashing
+ * apr1 - Apache salted MD5 hashing
+ * md5 - Simple MD5 hashing
+ * sha1 - SHA1 hashing
+ * ssha - Salted SHA1 hashing
+ * crypt - Unix crypt
+ * mysql - MySQL password (old method)
+ * my411 - MySQL 4.1.1 password
+ * kmd5 - Salted MD5 hashing as used by UNB
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return string The crypted password
+ */
+function auth_cryptPassword($clear,$method='',$salt=null){
+ global $conf;
+ if(empty($method)) $method = $conf['passcrypt'];
+
+ //prepare a salt
+ if(is_null($salt)) $salt = md5(uniqid(rand(), true));
+
+ switch(strtolower($method)){
+ case 'smd5':
+ if(defined('CRYPT_MD5') && CRYPT_MD5) return crypt($clear,'$1$'.substr($salt,0,8).'$');
+ // when crypt can't handle SMD5, falls through to pure PHP implementation
+ $magic = '1';
+ case 'apr1':
+ //from http://de.php.net/manual/en/function.crypt.php#73619 comment by <mikey_nich at hotmail dot com>
+ if(!$magic) $magic = 'apr1';
+ $salt = substr($salt,0,8);
+ $len = strlen($clear);
+ $text = $clear.'$'.$magic.'$'.$salt;
+ $bin = pack("H32", md5($clear.$salt.$clear));
+ for($i = $len; $i > 0; $i -= 16) {
+ $text .= substr($bin, 0, min(16, $i));
+ }
+ for($i = $len; $i > 0; $i >>= 1) {
+ $text .= ($i & 1) ? chr(0) : $clear{0};
+ }
+ $bin = pack("H32", md5($text));
+ for($i = 0; $i < 1000; $i++) {
+ $new = ($i & 1) ? $clear : $bin;
+ if ($i % 3) $new .= $salt;
+ if ($i % 7) $new .= $clear;
+ $new .= ($i & 1) ? $bin : $clear;
+ $bin = pack("H32", md5($new));
+ }
+ $tmp = '';
+ for ($i = 0; $i < 5; $i++) {
+ $k = $i + 6;
+ $j = $i + 12;
+ if ($j == 16) $j = 5;
+ $tmp = $bin[$i].$bin[$k].$bin[$j].$tmp;
+ }
+ $tmp = chr(0).chr(0).$bin[11].$tmp;
+ $tmp = strtr(strrev(substr(base64_encode($tmp), 2)),
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
+ "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
+ return '$'.$magic.'$'.$salt.'$'.$tmp;
+ case 'md5':
+ return md5($clear);
+ case 'sha1':
+ return sha1($clear);
+ case 'ssha':
+ $salt=substr($salt,0,4);
+ return '{SSHA}'.base64_encode(pack("H*", sha1($clear.$salt)).$salt);
+ case 'crypt':
+ return crypt($clear,substr($salt,0,2));
+ case 'mysql':
+ //from http://www.php.net/mysql comment by <soren at byu dot edu>
+ $nr=0x50305735;
+ $nr2=0x12345671;
+ $add=7;
+ $charArr = preg_split("//", $clear);
+ foreach ($charArr as $char) {
+ if (($char == '') || ($char == ' ') || ($char == '\t')) continue;
+ $charVal = ord($char);
+ $nr ^= ((($nr & 63) + $add) * $charVal) + ($nr << 8);
+ $nr2 += ($nr2 << 8) ^ $nr;
+ $add += $charVal;
+ }
+ return sprintf("%08x%08x", ($nr & 0x7fffffff), ($nr2 & 0x7fffffff));
+ case 'my411':
+ return '*'.sha1(pack("H*", sha1($clear)));
+ case 'kmd5':
+ $key = substr($salt, 16, 2);
+ $hash1 = strtolower(md5($key . md5($clear)));
+ $hash2 = substr($hash1, 0, 16) . $key . substr($hash1, 16);
+ return $hash2;
+ default:
+ msg("Unsupported crypt method $method",-1);
+ }
+}
+
+/**
+ * Verifies a cleartext password against a crypted hash
+ *
+ * The method and salt used for the crypted hash is determined automatically
+ * then the clear text password is crypted using the same method. If both hashs
+ * match true is is returned else false
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+function auth_verifyPassword($clear,$crypt){
+ $method='';
+ $salt='';
+
+ //determine the used method and salt
+ $len = strlen($crypt);
+ if(preg_match('/^\$1\$([^\$]{0,8})\$/',$crypt,$m)){
+ $method = 'smd5';
+ $salt = $m[1];
+ }elseif(preg_match('/^\$apr1\$([^\$]{0,8})\$/',$crypt,$m)){
+ $method = 'apr1';
+ $salt = $m[1];
+ }elseif(substr($crypt,0,6) == '{SSHA}'){
+ $method = 'ssha';
+ $salt = substr(base64_decode(substr($crypt, 6)),20);
+ }elseif($len == 32){
+ $method = 'md5';
+ }elseif($len == 40){
+ $method = 'sha1';
+ }elseif($len == 16){
+ $method = 'mysql';
+ }elseif($len == 41 && $crypt[0] == '*'){
+ $method = 'my411';
+ }elseif($len == 34){
+ $method = 'kmd5';
+ $salt = $crypt;
+ }else{
+ $method = 'crypt';
+ $salt = substr($crypt,0,2);
+ }
+
+ //crypt and compare
+ if(auth_cryptPassword($clear,$method,$salt) === $crypt){
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Set the authentication cookie and add user identification data to the session
+ *
+ * @param string $user username
+ * @param string $pass encrypted password
+ * @param bool $sticky whether or not the cookie will last beyond the session
+ */
+function auth_setCookie($user,$pass,$sticky) {
+ global $conf;
+ global $auth;
+ global $USERINFO;
+
+ if (!$auth) return false;
+ $USERINFO = $auth->getUserData($user);
+
+ // set cookie
+ $cookie = base64_encode($user).'|'.((int) $sticky).'|'.base64_encode($pass);
+ $time = $sticky ? (time()+60*60*24*365) : 0; //one year
+ if (version_compare(PHP_VERSION, '5.2.0', '>')) {
+ setcookie(DOKU_COOKIE,$cookie,$time,DOKU_REL,'',($conf['securecookie'] && is_ssl()),true);
+ }else{
+ setcookie(DOKU_COOKIE,$cookie,$time,DOKU_REL,'',($conf['securecookie'] && is_ssl()));
+ }
+ // set session
+ $_SESSION[DOKU_COOKIE]['auth']['user'] = $user;
+ $_SESSION[DOKU_COOKIE]['auth']['pass'] = $pass;
+ $_SESSION[DOKU_COOKIE]['auth']['buid'] = auth_browseruid();
+ $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
+ $_SESSION[DOKU_COOKIE]['auth']['time'] = time();
+}
+
+/**
+ * Returns the user, (encrypted) password and sticky bit from cookie
+ *
+ * @returns array
+ */
+function auth_getCookie(){
+ if (!isset($_COOKIE[DOKU_COOKIE])) {
+ return array(null, null, null);
+ }
+ list($user,$sticky,$pass) = explode('|',$_COOKIE[DOKU_COOKIE],3);
+ $sticky = (bool) $sticky;
+ $pass = base64_decode($pass);
+ $user = base64_decode($user);
+ return array($user,$sticky,$pass);
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php
new file mode 100644
index 000000000..9915b9f11
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php
@@ -0,0 +1,205 @@
+<?php
+/**
+ * Active Directory authentication backend for DokuWiki
+ *
+ * This makes authentication with a Active Directory server much easier
+ * than when using the normal LDAP backend by utilizing the adLDAP library
+ *
+ * Usage:
+ * Set DokuWiki's local.protected.php auth setting to read
+ *
+ * $conf['useacl'] = 1;
+ * $conf['disableactions'] = 'register';
+ * $conf['autopasswd'] = 0;
+ * $conf['authtype'] = 'ad';
+ * $conf['passcrypt'] = 'ssha';
+ *
+ * $conf['auth']['ad']['account_suffix'] = '@my.domain.org';
+ * $conf['auth']['ad']['base_dn'] = 'DC=my,DC=domain,DC=org';
+ * $conf['auth']['ad']['domain_controllers'] = 'srv1.domain.org,srv2.domain.org';
+ *
+ * //optional:
+ * $conf['auth']['ad']['sso'] = 1;
+ * $conf['auth']['ad']['ad_username'] = 'root';
+ * $conf['auth']['ad']['ad_password'] = 'pass';
+ * $conf['auth']['ad']['real_primarygroup'] = 1;
+ * $conf['auth']['ad']['use_ssl'] = 1;
+ * $conf['auth']['ad']['debug'] = 1;
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author James Van Lommel <jamesvl@gmail.com>
+ * @link http://www.nosq.com/blog/2005/08/ldap-activedirectory-and-dokuwiki/
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+require_once(DOKU_INC.'inc/adLDAP.php');
+
+class auth_ad extends auth_basic {
+ var $cnf = null;
+ var $opts = null;
+ var $adldap = null;
+
+ /**
+ * Constructor
+ */
+ function auth_ad() {
+ global $conf;
+ $this->cnf = $conf['auth']['ad'];
+
+ // ldap extension is needed
+ if (!function_exists('ldap_connect')) {
+ if ($this->cnf['debug'])
+ msg("LDAP err: PHP LDAP extension not found.",-1);
+ $this->success = false;
+ return;
+ }
+
+ // Prepare SSO
+ if($_SERVER['REMOTE_USER'] && $this->cnf['sso']){
+ // remove possible NTLM domain
+ list($dom,$usr) = explode('\\',$_SERVER['REMOTE_USER'],2);
+ if(!$usr) $usr = $dom;
+
+ // remove possible Kerberos domain
+ list($usr,$dom) = explode('@',$usr);
+
+ $dom = strtolower($dom);
+ $_SERVER['REMOTE_USER'] = $usr;
+
+ // we need to simulate a login
+ if(empty($_COOKIE[DOKU_COOKIE])){
+ $_REQUEST['u'] = $_SERVER['REMOTE_USER'];
+ $_REQUEST['p'] = 'sso_only';
+ }
+ }
+
+ // prepare adLDAP standard configuration
+ $this->opts = $this->cnf;
+
+ // add possible domain specific configuration
+ if($dom && is_array($this->cnf[$dom])) foreach($this->cnf[$dom] as $key => $val){
+ $this->opts[$key] = $val;
+ }
+
+ // handle multiple AD servers
+ $this->opts['domain_controllers'] = explode(',',$this->opts['domain_controllers']);
+ $this->opts['domain_controllers'] = array_map('trim',$this->opts['domain_controllers']);
+ $this->opts['domain_controllers'] = array_filter($this->opts['domain_controllers']);
+
+ // we currently just handle authentication, so no capabilities are set
+ }
+
+ /**
+ * Check user+password [required auth function]
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct by trying to bind
+ * to the LDAP server
+ *
+ * @author James Van Lommel <james@nosq.com>
+ * @return bool
+ */
+ function checkPass($user, $pass){
+ if($_SERVER['REMOTE_USER'] &&
+ $_SERVER['REMOTE_USER'] == $user &&
+ $this->cnf['sso']) return true;
+
+ if(!$this->_init()) return false;
+ return $this->adldap->authenticate($user, $pass);
+ }
+
+ /**
+ * Return user info [required auth function]
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * This LDAP specific function returns the following
+ * addional fields:
+ *
+ * dn string distinguished name (DN)
+ * uid string Posix User ID
+ *
+ * @author James Van Lommel <james@nosq.com>
+ */
+ function getUserData($user){
+ global $conf;
+ if(!$this->_init()) return false;
+
+ //get info for given user
+ $result = $this->adldap->user_info($user);
+
+ //general user info
+ $info['name'] = $result[0]['displayname'][0];
+ $info['mail'] = $result[0]['mail'][0];
+ $info['uid'] = $result[0]['samaccountname'][0];
+ $info['dn'] = $result[0]['dn'];
+
+ // handle ActiveDirectory memberOf
+ $info['grps'] = $this->adldap->user_groups($user,(bool) $this->opts['recursive_groups']);
+
+ if (is_array($info['grps'])) {
+ foreach ($info['grps'] as $ndx => $group) {
+ $info['grps'][$ndx] = $this->cleanGroup($group);
+ }
+ }
+
+ // always add the default group to the list of groups
+ if(!is_array($info['grps']) || !in_array($conf['defaultgroup'],$info['grps'])){
+ $info['grps'][] = $conf['defaultgroup'];
+ }
+
+ return $info;
+ }
+
+ /**
+ * Make AD group names usable by DokuWiki.
+ *
+ * Removes backslashes ('\'), pound signs ('#'), and converts spaces to underscores.
+ *
+ * @author James Van Lommel (jamesvl@gmail.com)
+ */
+ function cleanGroup($name) {
+ $sName = str_replace('\\', '', $name);
+ $sName = str_replace('#', '', $sName);
+ $sName = preg_replace('[\s]', '_', $sName);
+ return $sName;
+ }
+
+ /**
+ * Sanitize user names
+ */
+ function cleanUser($name) {
+ return $this->cleanGroup($name);
+ }
+
+ /**
+ * Most values in LDAP are case-insensitive
+ */
+ function isCaseSensitive(){
+ return false;
+ }
+
+ /**
+ * Initialize the AdLDAP library and connect to the server
+ */
+ function _init(){
+ if(!is_null($this->adldap)) return true;
+
+ // connect
+ try {
+ $this->adldap = new adLDAP($this->opts);
+ return true;
+ } catch (adLDAPException $e) {
+ $this->success = false;
+ $this->adldap = null;
+ }
+ return false;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php
new file mode 100644
index 000000000..c08422488
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php
@@ -0,0 +1,403 @@
+<?php
+/**
+ * auth/basic.class.php
+ *
+ * foundation authorisation class
+ * all auth classes should inherit from this class
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+class auth_basic {
+
+ var $success = true;
+
+
+ /**
+ * Posible things an auth backend module may be able to
+ * do. The things a backend can do need to be set to true
+ * in the constructor.
+ */
+ var $cando = array (
+ 'addUser' => false, // can Users be created?
+ 'delUser' => false, // can Users be deleted?
+ 'modLogin' => false, // can login names be changed?
+ 'modPass' => false, // can passwords be changed?
+ 'modName' => false, // can real names be changed?
+ 'modMail' => false, // can emails be changed?
+ 'modGroups' => false, // can groups be changed?
+ 'getUsers' => false, // can a (filtered) list of users be retrieved?
+ 'getUserCount'=> false, // can the number of users be retrieved?
+ 'getGroups' => false, // can a list of available groups be retrieved?
+ 'external' => false, // does the module do external auth checking?
+ 'logoff' => false, // has the module some special logoff method?
+ );
+
+
+ /**
+ * Constructor.
+ *
+ * Carry out sanity checks to ensure the object is
+ * able to operate. Set capabilities in $this->cando
+ * array here
+ *
+ * Set $this->success to false if checks fail
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+ function auth_basic() {
+ // the base class constructor does nothing, derived class
+ // constructors do the real work
+ }
+
+ /**
+ * Capability check. [ DO NOT OVERRIDE ]
+ *
+ * Checks the capabilities set in the $this->cando array and
+ * some pseudo capabilities (shortcutting access to multiple
+ * ones)
+ *
+ * ususal capabilities start with lowercase letter
+ * shortcut capabilities start with uppercase letter
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function canDo($cap) {
+ switch($cap){
+ case 'Profile':
+ // can at least one of the user's properties be changed?
+ return ( $this->cando['modPass'] ||
+ $this->cando['modName'] ||
+ $this->cando['modMail'] );
+ break;
+ case 'UserMod':
+ // can at least anything be changed?
+ return ( $this->cando['modPass'] ||
+ $this->cando['modName'] ||
+ $this->cando['modMail'] ||
+ $this->cando['modLogin'] ||
+ $this->cando['modGroups'] ||
+ $this->cando['modMail'] );
+ break;
+ default:
+ // print a helping message for developers
+ if(!isset($this->cando[$cap])){
+ msg("Check for unknown capability '$cap' - Do you use an outdated Plugin?",-1);
+ }
+ return $this->cando[$cap];
+ }
+ }
+
+ /**
+ * Trigger the AUTH_USERDATA_CHANGE event and call the modification function. [ DO NOT OVERRIDE ]
+ *
+ * You should use this function instead of calling createUser, modifyUser or
+ * deleteUsers directly. The event handlers can prevent the modification, for
+ * example for enforcing a user name schema.
+ *
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @param string $type Modification type ('create', 'modify', 'delete')
+ * @param array $params Parameters for the createUser, modifyUser or deleteUsers method. The content of this array depends on the modification type
+ * @return mixed Result from the modification function or false if an event handler has canceled the action
+ */
+ function triggerUserMod($type, $params)
+ {
+ $validTypes = array(
+ 'create' => 'createUser',
+ 'modify' => 'modifyUser',
+ 'delete' => 'deleteUsers'
+ );
+ if(empty($validTypes[$type]))
+ return false;
+ $eventdata = array('type' => $type, 'params' => $params, 'modification_result' => null);
+ $evt = new Doku_Event('AUTH_USER_CHANGE', $eventdata);
+ if ($evt->advise_before(true)) {
+ $result = call_user_func_array(array($this, $validTypes[$type]), $params);
+ $evt->data['modification_result'] = $result;
+ }
+ $evt->advise_after();
+ unset($evt);
+ return $result;
+ }
+
+ /**
+ * Log off the current user [ OPTIONAL ]
+ *
+ * Is run in addition to the ususal logoff method. Should
+ * only be needed when trustExternal is implemented.
+ *
+ * @see auth_logoff()
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function logOff(){
+ }
+
+ /**
+ * Do all authentication [ OPTIONAL ]
+ *
+ * Set $this->cando['external'] = true when implemented
+ *
+ * If this function is implemented it will be used to
+ * authenticate a user - all other DokuWiki internals
+ * will not be used for authenticating, thus
+ * implementing the checkPass() function is not needed
+ * anymore.
+ *
+ * The function can be used to authenticate against third
+ * party cookies or Apache auth mechanisms and replaces
+ * the auth_login() function
+ *
+ * The function will be called with or without a set
+ * username. If the Username is given it was called
+ * from the login form and the given credentials might
+ * need to be checked. If no username was given it
+ * the function needs to check if the user is logged in
+ * by other means (cookie, environment).
+ *
+ * The function needs to set some globals needed by
+ * DokuWiki like auth_login() does.
+ *
+ * @see auth_login()
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $user Username
+ * @param string $pass Cleartext Password
+ * @param bool $sticky Cookie should not expire
+ * @return bool true on successful auth
+ */
+ function trustExternal($user,$pass,$sticky=false){
+# // some example:
+#
+# global $USERINFO;
+# global $conf;
+# $sticky ? $sticky = true : $sticky = false; //sanity check
+#
+# // do the checking here
+#
+# // set the globals if authed
+# $USERINFO['name'] = 'FIXME';
+# $USERINFO['mail'] = 'FIXME';
+# $USERINFO['grps'] = array('FIXME');
+# $_SERVER['REMOTE_USER'] = $user;
+# $_SESSION[DOKU_COOKIE]['auth']['user'] = $user;
+# $_SESSION[DOKU_COOKIE]['auth']['pass'] = $pass;
+# $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
+# return true;
+ }
+
+ /**
+ * Check user+password [ MUST BE OVERRIDDEN ]
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct
+ *
+ * May be ommited if trustExternal is used.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function checkPass($user,$pass){
+ msg("no valid authorisation system in use", -1);
+ return false;
+ }
+
+ /**
+ * Return user info [ MUST BE OVERRIDDEN ]
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return array containing user data or false
+ */
+ function getUserData($user) {
+ if(!$this->cando['external']) msg("no valid authorisation system in use", -1);
+ return false;
+ }
+
+ /**
+ * Create a new User [implement only where required/possible]
+ *
+ * Returns false if the user already exists, null when an error
+ * occurred and true if everything went well.
+ *
+ * The new user HAS TO be added to the default group by this
+ * function!
+ *
+ * Set addUser capability when implemented
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function createUser($user,$pass,$name,$mail,$grps=null){
+ msg("authorisation method does not allow creation of new users", -1);
+ return null;
+ }
+
+ /**
+ * Modify user data [implement only where required/possible]
+ *
+ * Set the mod* capabilities according to the implemented features
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param $user nick of the user to be changed
+ * @param $changes array of field/value pairs to be changed (password will be clear text)
+ * @return bool
+ */
+ function modifyUser($user, $changes) {
+ msg("authorisation method does not allow modifying of user data", -1);
+ return false;
+ }
+
+ /**
+ * Delete one or more users [implement only where required/possible]
+ *
+ * Set delUser capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param array $users
+ * @return int number of users deleted
+ */
+ function deleteUsers($users) {
+ msg("authorisation method does not allow deleting of users", -1);
+ return false;
+ }
+
+ /**
+ * Return a count of the number of user which meet $filter criteria
+ * [should be implemented whenever retrieveUsers is implemented]
+ *
+ * Set getUserCount capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function getUserCount($filter=array()) {
+ msg("authorisation method does not provide user counts", -1);
+ return 0;
+ }
+
+ /**
+ * Bulk retrieval of user data [implement only where required/possible]
+ *
+ * Set getUsers capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param start index of first user to be returned
+ * @param limit max number of users to be returned
+ * @param filter array of field/pattern pairs, null for no filter
+ * @return array of userinfo (refer getUserData for internal userinfo details)
+ */
+ function retrieveUsers($start=0,$limit=-1,$filter=null) {
+ msg("authorisation method does not support mass retrieval of user data", -1);
+ return array();
+ }
+
+ /**
+ * Define a group [implement only where required/possible]
+ *
+ * Set addGroup capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @return bool
+ */
+ function addGroup($group) {
+ msg("authorisation method does not support independent group creation", -1);
+ return false;
+ }
+
+ /**
+ * Retrieve groups [implement only where required/possible]
+ *
+ * Set getGroups capability when implemented
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @return array
+ */
+ function retrieveGroups($start=0,$limit=0) {
+ msg("authorisation method does not support group list retrieval", -1);
+ return array();
+ }
+
+ /**
+ * Return case sensitivity of the backend [OPTIONAL]
+ *
+ * When your backend is caseinsensitive (eg. you can login with USER and
+ * user) then you need to overwrite this method and return false
+ */
+ function isCaseSensitive(){
+ return true;
+ }
+
+ /**
+ * Sanitize a given username [OPTIONAL]
+ *
+ * This function is applied to any user name that is given to
+ * the backend and should also be applied to any user name within
+ * the backend before returning it somewhere.
+ *
+ * This should be used to enforce username restrictions.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $user - username
+ * @param string - the cleaned username
+ */
+ function cleanUser($user){
+ return $user;
+ }
+
+ /**
+ * Sanitize a given groupname [OPTIONAL]
+ *
+ * This function is applied to any groupname that is given to
+ * the backend and should also be applied to any groupname within
+ * the backend before returning it somewhere.
+ *
+ * This should be used to enforce groupname restrictions.
+ *
+ * Groupnames are to be passed without a leading '@' here.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $group - groupname
+ * @param string - the cleaned groupname
+ */
+ function cleanGroup($group){
+ return $group;
+ }
+
+
+ /**
+ * Check Session Cache validity [implement only where required/possible]
+ *
+ * DokuWiki caches user info in the user's session for the timespan defined
+ * in $conf['auth_security_timeout'].
+ *
+ * This makes sure slow authentication backends do not slow down DokuWiki.
+ * This also means that changes to the user database will not be reflected
+ * on currently logged in users.
+ *
+ * To accommodate for this, the user manager plugin will touch a reference
+ * file whenever a change is submitted. This function compares the filetime
+ * of this reference file with the time stored in the session.
+ *
+ * This reference file mechanism does not reflect changes done directly in
+ * the backend's database through other means than the user manager plugin.
+ *
+ * Fast backends might want to return always false, to force rechecks on
+ * each page load. Others might want to use their own checking here. If
+ * unsure, do not override.
+ *
+ * @param string $user - The username
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function useSessionCache($user){
+ global $conf;
+ return ($_SESSION[DOKU_COOKIE]['auth']['time'] >= @filemtime($conf['cachedir'].'/sessionpurge'));
+ }
+
+}
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php
new file mode 100644
index 000000000..c0a291832
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php
@@ -0,0 +1,352 @@
+<?php
+/**
+ * Plaintext authentication backend
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+define('DOKU_AUTH', dirname(__FILE__));
+require_once(DOKU_AUTH.'/basic.class.php');
+
+//define('AUTH_USERFILE',DOKU_CONF.'users.auth.php');
+
+class auth_elgg extends auth_basic {
+
+ var $users = null;
+ var $_pattern = array();
+
+ /**
+ * Constructor
+ *
+ * Carry out sanity checks to ensure the object is
+ * able to operate. Set capabilities.
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+ function auth_elgg() {
+ // $this->cando['addUser'] = true;
+ // $this->cando['delUser'] = true;
+ // $this->cando['modLogin'] = true;
+ // $this->cando['modPass'] = true;
+ // $this->cando['modName'] = true;
+ // $this->cando['modMail'] = true;
+ $this->cando['getACL'] = true;
+ $this->cando['modGroups'] = true;
+ // $this->cando['getUsers'] = true;
+ $this->cando['getUserCount'] = true;
+ }
+
+ /**
+ * Check user+password [required auth function]
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function checkPass($user,$pass){
+ $user = get_user_by_username($user);
+ if ($user && $user->password == $pass)
+ return true;
+ /*if (authenticate($user, $pass)) {
+ return true;
+ }*/
+ return false;
+ }
+
+ /**
+ * Return user info
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getUserData($username){
+ $user = get_user_by_username($username);
+ //error_log("getUserData:".$username);
+ if (!$user)
+ return false;
+ //error_log("getUserData:".$username);
+ $page_owner = elgg_get_page_owner_entity();
+ $grps = array();
+ if ($page_owner instanceof ElggGroup) {
+ if ($page_owner->canEdit($user->getGUID())) {
+ $grps[] = "admin";
+ $grps[] = "root";
+ //error_log('operator');
+ }
+ elseif ($page_owner->isMember($user)) {
+ $grps[] = "member";
+ }
+ }
+ elseif ($page_owner instanceof ElggUser) {
+ if ($page_owner == $user) {
+ $grps[] = "admin";
+ }
+ elseif ($page_owner->isFriendsWith($user->getGUID())) {
+ $grps[] = "member";
+ }
+ }
+ if ($user->isAdmin()) {
+ $grps[] = "root";
+ $grps[] = "admin";
+ }
+ $groups = elgg_get_entities_from_relationship(array('relationship' => 'member', 'relationship_guid' => $user->getGUID(), 'inverse_relationship' => FALSE, 'limit'=>0));
+ foreach($groups as $group) {
+ $grps[] = $this->cleanUser($group->name);
+ }
+ return array('name'=>$user->name, 'mail'=>$user->email, 'grps'=>$grps);
+ }
+
+ /**
+ * Create a new User
+ *
+ * Returns false if the user already exists, null when an error
+ * occurred and true if everything went well.
+ *
+ * The new user will be added to the default group by this
+ * function if grps are not specified (default behaviour).
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function createUser($user,$pwd,$name,$mail,$grps=null){
+ global $conf;
+
+ // user mustn't already exist
+ if ($this->getUserData($user) !== false) return false;
+
+ $pass = auth_cryptPassword($pwd);
+
+ // set default group if no groups specified
+ if (!is_array($grps)) $grps = array($conf['defaultgroup']);
+
+ // prepare user line
+ $groups = join(',',$grps);
+ $userline = join(':',array($user,$pass,$name,$mail,$groups))."\n";
+
+ if (io_saveFile(AUTH_USERFILE,$userline,true)) {
+ $this->users[$user] = compact('pass','name','mail','grps');
+ return $pwd;
+ }
+
+ msg('The '.AUTH_USERFILE.' file is not writable. Please inform the Wiki-Admin',-1);
+ return null;
+ }
+
+ /**
+ * Modify user data
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param $user nick of the user to be changed
+ * @param $changes array of field/value pairs to be changed (password will be clear text)
+ * @return bool
+ */
+ function modifyUser($user, $changes) {
+ global $conf;
+ global $ACT;
+ global $INFO;
+
+ // sanity checks, user must already exist and there must be something to change
+ if (($userinfo = $this->getUserData($user)) === false) return false;
+ if (!is_array($changes) || !count($changes)) return true;
+
+ // update userinfo with new data, remembering to encrypt any password
+ $newuser = $user;
+ foreach ($changes as $field => $value) {
+ if ($field == 'user') {
+ $newuser = $value;
+ continue;
+ }
+ if ($field == 'pass') $value = auth_cryptPassword($value);
+ $userinfo[$field] = $value;
+ }
+
+ $groups = join(',',$userinfo['grps']);
+ $userline = join(':',array($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $groups))."\n";
+
+ if (!$this->deleteUsers(array($user))) {
+ msg('Unable to modify user data. Please inform the Wiki-Admin',-1);
+ return false;
+ }
+
+ if (!io_saveFile(AUTH_USERFILE,$userline,true)) {
+ msg('There was an error modifying your user data. You should register again.',-1);
+ // FIXME, user has been deleted but not recreated, should force a logout and redirect to login page
+ $ACT == 'register';
+ return false;
+ }
+
+ $this->users[$newuser] = $userinfo;
+ return true;
+ }
+
+ /**
+ * Remove one or more users from the list of registered users
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @param array $users array of users to be deleted
+ * @return int the number of users deleted
+ */
+ function deleteUsers($users) {
+
+ if (!is_array($users) || empty($users)) return 0;
+
+ if ($this->users === null) $this->_loadUserData();
+
+ $deleted = array();
+ foreach ($users as $user) {
+ if (isset($this->users[$user])) $deleted[] = preg_quote($user,'/');
+ }
+
+ if (empty($deleted)) return 0;
+
+ $pattern = '/^('.join('|',$deleted).'):/';
+
+ if (io_deleteFromFile(AUTH_USERFILE,$pattern,true)) {
+ foreach ($deleted as $user) unset($this->users[$user]);
+ return count($deleted);
+ }
+
+ // problem deleting, reload the user list and count the difference
+ $count = count($this->users);
+ $this->_loadUserData();
+ $count -= count($this->users);
+ return $count;
+ }
+
+ /**
+ * Return a count of the number of user which meet $filter criteria
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function getUserCount($filter=array()) {
+ return get_number_users(true);
+ }
+
+ /**
+ * Bulk retrieval of user data
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param start index of first user to be returned
+ * @param limit max number of users to be returned
+ * @param filter array of field/pattern pairs
+ * @return array of userinfo (refer getUserData for internal userinfo details)
+ */
+ function retrieveUsers($start=0,$limit=0,$filter=array()) {
+ $entities = elgg_get_entities(array('types'=>'user','limit'=>$limit, 'offset'=>$start));
+ $allusers = array();
+ foreach ($entities as $entity) {
+ $allusers[$entity->username] = getUserData($entity->username);
+ }
+ return $allusers;
+ }
+
+ /**
+ * Only valid pageid's (no namespaces) for usernames
+ */
+ function cleanUser($user){
+ global $conf;
+ return cleanID(str_replace(':',$conf['sepchar'],$user));
+ }
+
+ function getACL(){
+ $doku = current_dokuwiki_entity();
+ elgg_set_ignore_access(true);
+ $acl = explode("\n" ,$doku->wiki_acl);
+ //error_log(json_encode($acl));
+ elgg_set_ignore_access(false);
+ return $acl;
+ global $conf;
+ $acl = array();
+ $acl[] = "# acl.auth.php";
+ $acl[] = '# <?php exit()?\>';
+ $acl[] = "* @ALL 0";
+ $acl[] = "* @user 1";
+ $acl[] = "* @member 8";
+ $acl[] = "* @admin 16";
+ $acl[] = "* @root 255";
+ $acl[] = "* @testers_de_la_red_social 8";
+ return $acl;
+ }
+ function setACL($newacl){
+ $doku = current_dokuwiki_entity();
+ elgg_set_ignore_access(true);
+ $doku->wiki_acl = $newacl;
+ elgg_set_ignore_access(false);
+ }
+
+ /**
+ * Only valid pageid's (no namespaces) for groupnames
+ */
+ function cleanGroup($group){
+ global $conf;
+ return cleanID(str_replace(':',$conf['sepchar'],$group));
+ }
+
+ /**
+ * Load all user data
+ *
+ * loads the user file into a datastructure
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _loadUserData(){
+ //error_log("getUserData:");
+ $this->users = array();
+
+ if(!@file_exists(AUTH_USERFILE)) return;
+
+ $lines = file(AUTH_USERFILE);
+ foreach($lines as $line){
+ $line = preg_replace('/#.*$/','',$line); //ignore comments
+ $line = trim($line);
+ if(empty($line)) continue;
+
+ $row = explode(":",$line,5);
+ $groups = array_values(array_filter(explode(",",$row[4])));
+
+ $this->users[$row[0]]['pass'] = $row[1];
+ $this->users[$row[0]]['name'] = urldecode($row[2]);
+ $this->users[$row[0]]['mail'] = $row[3];
+ $this->users[$row[0]]['grps'] = $groups;
+ }
+ }
+
+ /**
+ * return 1 if $user + $info match $filter criteria, 0 otherwise
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function _filter($user, $info) {
+ // FIXME
+ foreach ($this->_pattern as $item => $pattern) {
+ if ($item == 'user') {
+ if (!preg_match($pattern, $user)) return 0;
+ } else if ($item == 'grps') {
+ if (!count(preg_grep($pattern, $info['grps']))) return 0;
+ } else {
+ if (!preg_match($pattern, $info[$item])) return 0;
+ }
+ }
+ return 1;
+ }
+
+ function _constructPattern($filter) {
+ $this->_pattern = array();
+ foreach ($filter as $item => $pattern) {
+// $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters
+ $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters
+ }
+ }
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php
new file mode 100644
index 000000000..c51924135
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php
@@ -0,0 +1,357 @@
+<?php
+/**
+ * LDAP authentication backend
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakaic.co.uk>
+ */
+
+class auth_ldap extends auth_basic {
+ var $cnf = null;
+ var $con = null;
+ var $bound = 0; // 0: anonymous, 1: user, 2: superuser
+
+ /**
+ * Constructor
+ */
+ function auth_ldap(){
+ global $conf;
+ $this->cnf = $conf['auth']['ldap'];
+
+ // ldap extension is needed
+ if(!function_exists('ldap_connect')) {
+ if ($this->cnf['debug'])
+ msg("LDAP err: PHP LDAP extension not found.",-1,__LINE__,__FILE__);
+ $this->success = false;
+ return;
+ }
+
+ if(empty($this->cnf['groupkey'])) $this->cnf['groupkey'] = 'cn';
+
+ // auth_ldap currently just handles authentication, so no
+ // capabilities are set
+ }
+
+ /**
+ * Check user+password
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct by trying to bind
+ * to the LDAP server
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function checkPass($user,$pass){
+ // reject empty password
+ if(empty($pass)) return false;
+ if(!$this->_openLDAP()) return false;
+
+ // indirect user bind
+ if($this->cnf['binddn'] && $this->cnf['bindpw']){
+ // use superuser credentials
+ if(!@ldap_bind($this->con,$this->cnf['binddn'],$this->cnf['bindpw'])){
+ if($this->cnf['debug'])
+ msg('LDAP bind as superuser: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ return false;
+ }
+ $this->bound = 2;
+ }else if($this->cnf['binddn'] &&
+ $this->cnf['usertree'] &&
+ $this->cnf['userfilter']) {
+ // special bind string
+ $dn = $this->_makeFilter($this->cnf['binddn'],
+ array('user'=>$user,'server'=>$this->cnf['server']));
+
+ }else if(strpos($this->cnf['usertree'], '%{user}')) {
+ // direct user bind
+ $dn = $this->_makeFilter($this->cnf['usertree'],
+ array('user'=>$user,'server'=>$this->cnf['server']));
+
+ }else{
+ // Anonymous bind
+ if(!@ldap_bind($this->con)){
+ msg("LDAP: can not bind anonymously",-1);
+ if($this->cnf['debug'])
+ msg('LDAP anonymous bind: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ return false;
+ }
+ }
+
+ // Try to bind to with the dn if we have one.
+ if(!empty($dn)) {
+ // User/Password bind
+ if(!@ldap_bind($this->con,$dn,$pass)){
+ if($this->cnf['debug']){
+ msg("LDAP: bind with $dn failed", -1,__LINE__,__FILE__);
+ msg('LDAP user dn bind: '.htmlspecialchars(ldap_error($this->con)),0);
+ }
+ return false;
+ }
+ $this->bound = 1;
+ return true;
+ }else{
+ // See if we can find the user
+ $info = $this->getUserData($user,true);
+ if(empty($info['dn'])) {
+ return false;
+ } else {
+ $dn = $info['dn'];
+ }
+
+ // Try to bind with the dn provided
+ if(!@ldap_bind($this->con,$dn,$pass)){
+ if($this->cnf['debug']){
+ msg("LDAP: bind with $dn failed", -1,__LINE__,__FILE__);
+ msg('LDAP user bind: '.htmlspecialchars(ldap_error($this->con)),0);
+ }
+ return false;
+ }
+ $this->bound = 1;
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Return user info
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * This LDAP specific function returns the following
+ * addional fields:
+ *
+ * dn string distinguished name (DN)
+ * uid string Posix User ID
+ * inbind bool for internal use - avoid loop in binding
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Trouble
+ * @author Dan Allen <dan.j.allen@gmail.com>
+ * @author <evaldas.auryla@pheur.org>
+ * @author Stephane Chazelas <stephane.chazelas@emerson.com>
+ * @return array containing user data or false
+ */
+ function getUserData($user,$inbind=false) {
+ global $conf;
+ if(!$this->_openLDAP()) return false;
+
+ // force superuser bind if wanted and not bound as superuser yet
+ if($this->cnf['binddn'] && $this->cnf['bindpw'] && $this->bound < 2){
+ // use superuser credentials
+ if(!@ldap_bind($this->con,$this->cnf['binddn'],$this->cnf['bindpw'])){
+ if($this->cnf['debug'])
+ msg('LDAP bind as superuser: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ return false;
+ }
+ $this->bound = 2;
+ }elseif($this->bound == 0 && !$inbind) {
+ // in some cases getUserData is called outside the authentication workflow
+ // eg. for sending email notification on subscribed pages. This data might not
+ // be accessible anonymously, so we try to rebind the current user here
+ $pass = PMA_blowfish_decrypt($_SESSION[DOKU_COOKIE]['auth']['pass'],auth_cookiesalt());
+ $this->checkPass($_SESSION[DOKU_COOKIE]['auth']['user'], $pass);
+ }
+
+ $info['user'] = $user;
+ $info['server'] = $this->cnf['server'];
+
+ //get info for given user
+ $base = $this->_makeFilter($this->cnf['usertree'], $info);
+ if(!empty($this->cnf['userfilter'])) {
+ $filter = $this->_makeFilter($this->cnf['userfilter'], $info);
+ } else {
+ $filter = "(ObjectClass=*)";
+ }
+
+ $sr = @ldap_search($this->con, $base, $filter);
+ $result = @ldap_get_entries($this->con, $sr);
+ if($this->cnf['debug']){
+ msg('LDAP user search: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ msg('LDAP search at: '.htmlspecialchars($base.' '.$filter),0,__LINE__,__FILE__);
+ }
+
+ // Don't accept more or less than one response
+ if(!is_array($result) || $result['count'] != 1){
+ return false; //user not found
+ }
+
+ $user_result = $result[0];
+ ldap_free_result($sr);
+
+ // general user info
+ $info['dn'] = $user_result['dn'];
+ $info['gid'] = $user_result['gidnumber'][0];
+ $info['mail'] = $user_result['mail'][0];
+ $info['name'] = $user_result['cn'][0];
+ $info['grps'] = array();
+
+ // overwrite if other attribs are specified.
+ if(is_array($this->cnf['mapping'])){
+ foreach($this->cnf['mapping'] as $localkey => $key) {
+ if(is_array($key)) {
+ // use regexp to clean up user_result
+ list($key, $regexp) = each($key);
+ if($user_result[$key]) foreach($user_result[$key] as $grp){
+ if (preg_match($regexp,$grp,$match)) {
+ if($localkey == 'grps') {
+ $info[$localkey][] = $match[1];
+ } else {
+ $info[$localkey] = $match[1];
+ }
+ }
+ }
+ } else {
+ $info[$localkey] = $user_result[$key][0];
+ }
+ }
+ }
+ $user_result = array_merge($info,$user_result);
+
+ //get groups for given user if grouptree is given
+ if ($this->cnf['grouptree'] && $this->cnf['groupfilter']) {
+ $base = $this->_makeFilter($this->cnf['grouptree'], $user_result);
+ $filter = $this->_makeFilter($this->cnf['groupfilter'], $user_result);
+ $sr = @ldap_search($this->con, $base, $filter, array($this->cnf['groupkey']));
+ if(!$sr){
+ msg("LDAP: Reading group memberships failed",-1);
+ if($this->cnf['debug']){
+ msg('LDAP group search: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ msg('LDAP search at: '.htmlspecialchars($base.' '.$filter),0,__LINE__,__FILE__);
+ }
+ return false;
+ }
+ $result = ldap_get_entries($this->con, $sr);
+ ldap_free_result($sr);
+
+ if(is_array($result)) foreach($result as $grp){
+ if(!empty($grp[$this->cnf['groupkey']][0])){
+ if($this->cnf['debug'])
+ msg('LDAP usergroup: '.htmlspecialchars($grp[$this->cnf['groupkey']][0]),0,__LINE__,__FILE__);
+ $info['grps'][] = $grp[$this->cnf['groupkey']][0];
+ }
+ }
+ }
+
+ // always add the default group to the list of groups
+ if(!in_array($conf['defaultgroup'],$info['grps'])){
+ $info['grps'][] = $conf['defaultgroup'];
+ }
+ return $info;
+ }
+
+ /**
+ * Most values in LDAP are case-insensitive
+ */
+ function isCaseSensitive(){
+ return false;
+ }
+
+ /**
+ * Make LDAP filter strings.
+ *
+ * Used by auth_getUserData to make the filter
+ * strings for grouptree and groupfilter
+ *
+ * filter string ldap search filter with placeholders
+ * placeholders array array with the placeholders
+ *
+ * @author Troels Liebe Bentsen <tlb@rapanden.dk>
+ * @return string
+ */
+ function _makeFilter($filter, $placeholders) {
+ preg_match_all("/%{([^}]+)/", $filter, $matches, PREG_PATTERN_ORDER);
+ //replace each match
+ foreach ($matches[1] as $match) {
+ //take first element if array
+ if(is_array($placeholders[$match])) {
+ $value = $placeholders[$match][0];
+ } else {
+ $value = $placeholders[$match];
+ }
+ $value = $this->_filterEscape($value);
+ $filter = str_replace('%{'.$match.'}', $value, $filter);
+ }
+ return $filter;
+ }
+
+ /**
+ * Escape a string to be used in a LDAP filter
+ *
+ * Ported from Perl's Net::LDAP::Util escape_filter_value
+ *
+ * @author Andreas Gohr
+ */
+ function _filterEscape($string){
+ return preg_replace('/([\x00-\x1F\*\(\)\\\\])/e',
+ '"\\\\\".join("",unpack("H2","$1"))',
+ $string);
+ }
+
+ /**
+ * Opens a connection to the configured LDAP server and sets the wanted
+ * option on the connection
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _openLDAP(){
+ if($this->con) return true; // connection already established
+
+ $this->bound = 0;
+
+ $port = ($this->cnf['port']) ? $this->cnf['port'] : 389;
+ $this->con = @ldap_connect($this->cnf['server'],$port);
+ if(!$this->con){
+ msg("LDAP: couldn't connect to LDAP server",-1);
+ return false;
+ }
+
+ //set protocol version and dependend options
+ if($this->cnf['version']){
+ if(!@ldap_set_option($this->con, LDAP_OPT_PROTOCOL_VERSION,
+ $this->cnf['version'])){
+ msg('Setting LDAP Protocol version '.$this->cnf['version'].' failed',-1);
+ if($this->cnf['debug'])
+ msg('LDAP version set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ }else{
+ //use TLS (needs version 3)
+ if($this->cnf['starttls']) {
+ if (!@ldap_start_tls($this->con)){
+ msg('Starting TLS failed',-1);
+ if($this->cnf['debug'])
+ msg('LDAP TLS set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ }
+ }
+ // needs version 3
+ if(isset($this->cnf['referrals'])) {
+ if(!@ldap_set_option($this->con, LDAP_OPT_REFERRALS,
+ $this->cnf['referrals'])){
+ msg('Setting LDAP referrals to off failed',-1);
+ if($this->cnf['debug'])
+ msg('LDAP referal set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ }
+ }
+ }
+ }
+
+ //set deref mode
+ if($this->cnf['deref']){
+ if(!@ldap_set_option($this->con, LDAP_OPT_DEREF, $this->cnf['deref'])){
+ msg('Setting LDAP Deref mode '.$this->cnf['deref'].' failed',-1);
+ if($this->cnf['debug'])
+ msg('LDAP deref set: '.htmlspecialchars(ldap_error($this->con)),0,__LINE__,__FILE__);
+ }
+ }
+
+ return true;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php
new file mode 100644
index 000000000..b1c6a3a52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php
@@ -0,0 +1,942 @@
+<?php
+/**
+ * MySQLP authentication backend
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthias.grimmm@sourceforge.net>
+*/
+
+define('DOKU_AUTH', dirname(__FILE__));
+require_once(DOKU_AUTH.'/basic.class.php');
+
+class auth_mysql extends auth_basic {
+
+ var $dbcon = 0;
+ var $dbver = 0; // database version
+ var $dbrev = 0; // database revision
+ var $dbsub = 0; // database subrevision
+ var $cnf = null;
+ var $defaultgroup = "";
+
+ /**
+ * Constructor
+ *
+ * checks if the mysql interface is available, otherwise it will
+ * set the variable $success of the basis class to false
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function auth_mysql() {
+ global $conf;
+ $this->cnf = $conf['auth']['mysql'];
+
+ if (method_exists($this, 'auth_basic'))
+ parent::auth_basic();
+
+ if(!function_exists('mysql_connect')) {
+ if ($this->cnf['debug'])
+ msg("MySQL err: PHP MySQL extension not found.",-1,__LINE__,__FILE__);
+ $this->success = false;
+ return;
+ }
+
+ // default to UTF-8, you rarely want something else
+ if(!isset($this->cnf['charset'])) $this->cnf['charset'] = 'utf8';
+
+ $this->defaultgroup = $conf['defaultgroup'];
+
+ // set capabilities based upon config strings set
+ if (empty($this->cnf['server']) || empty($this->cnf['user']) ||
+ empty($this->cnf['password']) || empty($this->cnf['database'])){
+ if ($this->cnf['debug'])
+ msg("MySQL err: insufficient configuration.",-1,__LINE__,__FILE__);
+ $this->success = false;
+ return;
+ }
+
+ $this->cando['addUser'] = $this->_chkcnf(array('getUserInfo',
+ 'getGroups',
+ 'addUser',
+ 'getUserID',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup'),true);
+ $this->cando['delUser'] = $this->_chkcnf(array('getUserID',
+ 'delUser',
+ 'delUserRefs'),true);
+ $this->cando['modLogin'] = $this->_chkcnf(array('getUserID',
+ 'updateUser',
+ 'UpdateTarget'),true);
+ $this->cando['modPass'] = $this->cando['modLogin'];
+ $this->cando['modName'] = $this->cando['modLogin'];
+ $this->cando['modMail'] = $this->cando['modLogin'];
+ $this->cando['modGroups'] = $this->_chkcnf(array('getUserID',
+ 'getGroups',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup',
+ 'delGroup',
+ 'getGroupID',
+ 'delUserGroup'),true);
+ /* getGroups is not yet supported
+ $this->cando['getGroups'] = $this->_chkcnf(array('getGroups',
+ 'getGroupID'),false); */
+ $this->cando['getUsers'] = $this->_chkcnf(array('getUsers',
+ 'getUserInfo',
+ 'getGroups'),false);
+ $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'),false);
+ }
+
+ /**
+ * Check if the given config strings are set
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @return bool
+ */
+ function _chkcnf($keys, $wop=false){
+ foreach ($keys as $key){
+ if (empty($this->cnf[$key])) return false;
+ }
+
+ /* write operation and lock array filled with tables names? */
+ if ($wop && (!is_array($this->cnf['TablesToLock']) ||
+ !count($this->cnf['TablesToLock']))){
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Checks if the given user exists and the given plaintext password
+ * is correct. Furtheron it might be checked wether the user is
+ * member of the right group
+ *
+ * Depending on which SQL string is defined in the config, password
+ * checking is done here (getpass) or by the database (passcheck)
+ *
+ * @param $user user who would like access
+ * @param $pass user's clear text password to check
+ * @return bool
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function checkPass($user,$pass){
+ $rc = false;
+
+ if($this->_openDB()) {
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['checkPass']);
+ $sql = str_replace('%{pass}',$this->_escape($pass),$sql);
+ $sql = str_replace('%{dgroup}',$this->_escape($this->defaultgroup),$sql);
+ $result = $this->_queryDB($sql);
+
+ if($result !== false && count($result) == 1) {
+ if($this->cnf['forwardClearPass'] == 1)
+ $rc = true;
+ else
+ $rc = auth_verifyPassword($pass,$result[0]['pass']);
+ }
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * [public function]
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * @param $user user's nick to get data for
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function getUserData($user){
+ if($this->_openDB()) {
+ $this->_lockTables("READ");
+ $info = $this->_getUserInfo($user);
+ $this->_unlockTables();
+ $this->_closeDB();
+ } else
+ $info = false;
+ return $info;
+ }
+
+ /**
+ * [public function]
+ *
+ * Create a new User. Returns false if the user already exists,
+ * null when an error occurred and true if everything went well.
+ *
+ * The new user will be added to the default group by this
+ * function if grps are not specified (default behaviour).
+ *
+ * @param $user nick of the user
+ * @param $pwd clear text password
+ * @param $name full name of the user
+ * @param $mail email address
+ * @param $grps array of groups the user should become member of
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function createUser($user,$pwd,$name,$mail,$grps=null){
+ if($this->_openDB()) {
+ if (($info = $this->_getUserInfo($user)) !== false)
+ return false; // user already exists
+
+ // set defaultgroup if no groups were given
+ if ($grps == null)
+ $grps = array($this->defaultgroup);
+
+ $this->_lockTables("WRITE");
+ $pwd = $this->cnf['forwardClearPass'] ? $pwd : auth_cryptPassword($pwd);
+ $rc = $this->_addUser($user,$pwd,$name,$mail,$grps);
+ $this->_unlockTables();
+ $this->_closeDB();
+ if ($rc) return true;
+ }
+ return null; // return error
+ }
+
+ /**
+ * Modify user data [public function]
+ *
+ * An existing user dataset will be modified. Changes are given in an array.
+ *
+ * The dataset update will be rejected if the user name should be changed
+ * to an already existing one.
+ *
+ * The password must be provides unencrypted. Pasword cryption is done
+ * automatically if configured.
+ *
+ * If one or more groups could't be updated, an error would be set. In
+ * this case the dataset might already be changed and we can't rollback
+ * the changes. Transactions would be really usefull here.
+ *
+ * modifyUser() may be called without SQL statements defined that are
+ * needed to change group membership (for example if only the user profile
+ * should be modified). In this case we asure that we don't touch groups
+ * even $changes['grps'] is set by mistake.
+ *
+ * @param $user nick of the user to be changed
+ * @param $changes array of field/value pairs to be changed (password
+ * will be clear text)
+ * @return bool true on success, false on error
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function modifyUser($user, $changes) {
+ $rc = false;
+
+ if (!is_array($changes) || !count($changes))
+ return true; // nothing to change
+
+ if($this->_openDB()) {
+ $this->_lockTables("WRITE");
+
+ if (($uid = $this->_getUserID($user))) {
+ $rc = $this->_updateUserInfo($changes, $uid);
+
+ if ($rc && isset($changes['grps']) && $this->cando['modGroups']) {
+ $groups = $this->_getGroups($user);
+ $grpadd = array_diff($changes['grps'], $groups);
+ $grpdel = array_diff($groups, $changes['grps']);
+
+ foreach($grpadd as $group)
+ if (($this->_addUserToGroup($user, $group, 1)) == false)
+ $rc = false;
+
+ foreach($grpdel as $group)
+ if (($this->_delUserFromGroup($user, $group)) == false)
+ $rc = false;
+ }
+ }
+
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * [public function]
+ *
+ * Remove one or more users from the list of registered users
+ *
+ * @param array $users array of users to be deleted
+ * @return int the number of users deleted
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function deleteUsers($users) {
+ $count = 0;
+
+ if($this->_openDB()) {
+ if (is_array($users) && count($users)) {
+ $this->_lockTables("WRITE");
+ foreach ($users as $user) {
+ if ($this->_delUser($user))
+ $count++;
+ }
+ $this->_unlockTables();
+ }
+ $this->_closeDB();
+ }
+ return $count;
+ }
+
+ /**
+ * [public function]
+ *
+ * Counts users which meet certain $filter criteria.
+ *
+ * @param array $filter filter criteria in item/pattern pairs
+ * @return count of found users.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function getUserCount($filter=array()) {
+ $rc = 0;
+
+ if($this->_openDB()) {
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+
+ if ($this->dbver >= 4) {
+ $sql = substr($sql, 6); /* remove 'SELECT' or 'select' */
+ $sql = "SELECT SQL_CALC_FOUND_ROWS".$sql." LIMIT 1";
+ $this->_queryDB($sql);
+ $result = $this->_queryDB("SELECT FOUND_ROWS()");
+ $rc = $result[0]['FOUND_ROWS()'];
+ } else if (($result = $this->_queryDB($sql)))
+ $rc = count($result);
+
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * Bulk retrieval of user data. [public function]
+ *
+ * @param first index of first user to be returned
+ * @param limit max number of users to be returned
+ * @param filter array of field/pattern pairs
+ * @return array of userinfo (refer getUserData for internal userinfo details)
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function retrieveUsers($first=0,$limit=10,$filter=array()) {
+ $out = array();
+
+ if($this->_openDB()) {
+ $this->_lockTables("READ");
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+ $sql .= " ".$this->cnf['SortOrder']." LIMIT $first, $limit";
+ $result = $this->_queryDB($sql);
+
+ if (!empty($result)) {
+ foreach ($result as $user)
+ if (($info = $this->_getUserInfo($user['user'])))
+ $out[$user['user']] = $info;
+ }
+
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $out;
+ }
+
+ /**
+ * Give user membership of a group [public function]
+ *
+ * @param $user
+ * @param $group
+ * @return bool true on success, false on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function joinGroup($user, $group) {
+ $rc = false;
+
+ if ($this->_openDB()) {
+ $this->_lockTables("WRITE");
+ $rc = $this->_addUserToGroup($user, $group);
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * Remove user from a group [public function]
+ *
+ * @param $user user that leaves a group
+ * @param $group group to leave
+ * @return bool
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function leaveGroup($user, $group) {
+ $rc = false;
+
+ if ($this->_openDB()) {
+ $this->_lockTables("WRITE");
+ $uid = $this->_getUserID($user);
+ $rc = $this->_delUserFromGroup($user, $group);
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * MySQL is case-insensitive
+ */
+ function isCaseSensitive(){
+ return false;
+ }
+
+ /**
+ * Adds a user to a group.
+ *
+ * If $force is set to '1' non existing groups would be created.
+ *
+ * The database connection must already be established. Otherwise
+ * this function does nothing and returns 'false'. It is strongly
+ * recommended to call this function only after all participating
+ * tables (group and usergroup) have been locked.
+ *
+ * @param $user user to add to a group
+ * @param $group name of the group
+ * @param $force '1' create missing groups
+ * @return bool 'true' on success, 'false' on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _addUserToGroup($user, $group, $force=0) {
+ $newgroup = 0;
+
+ if (($this->dbcon) && ($user)) {
+ $gid = $this->_getGroupID($group);
+ if (!$gid) {
+ if ($force) { // create missing groups
+ $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['addGroup']);
+ $gid = $this->_modifyDB($sql);
+ $newgroup = 1; // group newly created
+ }
+ if (!$gid) return false; // group didn't exist and can't be created
+ }
+
+ $sql = $this->cnf['addUserGroup'];
+ if(strpos($sql,'%{uid}') !== false){
+ $uid = $this->_getUserID($user);
+ $sql = str_replace('%{uid}', $this->_escape($uid),$sql);
+ }
+ $sql = str_replace('%{user}', $this->_escape($user),$sql);
+ $sql = str_replace('%{gid}', $this->_escape($gid),$sql);
+ $sql = str_replace('%{group}',$this->_escape($group),$sql);
+ if ($this->_modifyDB($sql) !== false) return true;
+
+ if ($newgroup) { // remove previously created group on error
+ $sql = str_replace('%{gid}', $this->_escape($gid),$this->cnf['delGroup']);
+ $sql = str_replace('%{group}',$this->_escape($group),$sql);
+ $this->_modifyDB($sql);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Remove user from a group
+ *
+ * @param $user user that leaves a group
+ * @param $group group to leave
+ * @return bool true on success, false on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _delUserFromGroup($user, $group) {
+ $rc = false;
+
+
+ if (($this->dbcon) && ($user)) {
+ $sql = $this->cnf['delUserGroup'];
+ if(strpos($sql,'%{uid}') !== false){
+ $uid = $this->_getUserID($user);
+ $sql = str_replace('%{uid}', $this->_escape($uid),$sql);
+ }
+ $gid = $this->_getGroupID($group);
+ if ($gid) {
+ $sql = str_replace('%{user}', $this->_escape($user),$sql);
+ $sql = str_replace('%{gid}', $this->_escape($gid),$sql);
+ $sql = str_replace('%{group}',$this->_escape($group),$sql);
+ $rc = $this->_modifyDB($sql) == 0 ? true : false;
+ }
+ }
+ return $rc;
+ }
+
+ /**
+ * Retrieves a list of groups the user is a member off.
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $user user whose groups should be listed
+ * @return bool false on error
+ * @return array array containing all groups on success
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _getGroups($user) {
+ $groups = array();
+
+ if($this->dbcon) {
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getGroups']);
+ $result = $this->_queryDB($sql);
+
+ if($result !== false && count($result)) {
+ foreach($result as $row)
+ $groups[] = $row['group'];
+ }
+ return $groups;
+ }
+ return false;
+ }
+
+ /**
+ * Retrieves the user id of a given user name
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $user user whose id is desired
+ * @return user id
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _getUserID($user) {
+ if($this->dbcon) {
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserID']);
+ $result = $this->_queryDB($sql);
+ return $result === false ? false : $result[0]['id'];
+ }
+ return false;
+ }
+
+ /**
+ * Adds a new User to the database.
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $user login of the user
+ * @param $pwd encrypted password
+ * @param $name full name of the user
+ * @param $mail email address
+ * @param $grps array of groups the user should become member of
+ * @return bool
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _addUser($user,$pwd,$name,$mail,$grps){
+ if($this->dbcon && is_array($grps)) {
+ $sql = str_replace('%{user}', $this->_escape($user),$this->cnf['addUser']);
+ $sql = str_replace('%{pass}', $this->_escape($pwd),$sql);
+ $sql = str_replace('%{name}', $this->_escape($name),$sql);
+ $sql = str_replace('%{email}',$this->_escape($mail),$sql);
+ $uid = $this->_modifyDB($sql);
+
+ if ($uid) {
+ foreach($grps as $group) {
+ $gid = $this->_addUserToGroup($user, $group, 1);
+ if ($gid === false) break;
+ }
+
+ if ($gid) return true;
+ else {
+ /* remove the new user and all group relations if a group can't
+ * be assigned. Newly created groups will remain in the database
+ * and won't be removed. This might create orphaned groups but
+ * is not a big issue so we ignore this problem here.
+ */
+ $this->_delUser($user);
+ if ($this->cnf['debug'])
+ msg ("MySQL err: Adding user '$user' to group '$group' failed.",-1,__LINE__,__FILE__);
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Deletes a given user and all his group references.
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $user user whose id is desired
+ * @return bool
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _delUser($user) {
+ if($this->dbcon) {
+ $uid = $this->_getUserID($user);
+ if ($uid) {
+ $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUserRefs']);
+ $this->_modifyDB($sql);
+ $sql = str_replace('%{uid}',$this->_escape($uid),$this->cnf['delUser']);
+ $sql = str_replace('%{user}', $this->_escape($user),$sql);
+ $this->_modifyDB($sql);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * getUserInfo
+ *
+ * Gets the data for a specific user The database connection
+ * must already be established for this function to work.
+ * Otherwise it will return 'false'.
+ *
+ * @param $user user's nick to get data for
+ * @return bool false on error
+ * @return array user info on success
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _getUserInfo($user){
+ $sql = str_replace('%{user}',$this->_escape($user),$this->cnf['getUserInfo']);
+ $result = $this->_queryDB($sql);
+ if($result !== false && count($result)) {
+ $info = $result[0];
+ $info['grps'] = $this->_getGroups($user);
+ return $info;
+ }
+ return false;
+ }
+
+ /**
+ * Updates the user info in the database
+ *
+ * Update a user data structure in the database according changes
+ * given in an array. The user name can only be changes if it didn't
+ * exists already. If the new user name exists the update procedure
+ * will be aborted. The database keeps unchanged.
+ *
+ * The database connection has already to be established for this
+ * function to work. Otherwise it will return 'false'.
+ *
+ * The password will be crypted if necessary.
+ *
+ * @param $changes array of items to change as pairs of item and value
+ * @param $uid user id of dataset to change, must be unique in DB
+ * @return true on success or false on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _updateUserInfo($changes, $uid) {
+ $sql = $this->cnf['updateUser']." ";
+ $cnt = 0;
+ $err = 0;
+
+ if($this->dbcon) {
+ foreach ($changes as $item => $value) {
+ if ($item == 'user') {
+ if (($this->_getUserID($changes['user']))) {
+ $err = 1; /* new username already exists */
+ break; /* abort update */
+ }
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{user}',$value,$this->cnf['UpdateLogin']);
+ } else if ($item == 'name') {
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{name}',$value,$this->cnf['UpdateName']);
+ } else if ($item == 'pass') {
+ if (!$this->cnf['forwardClearPass'])
+ $value = auth_cryptPassword($value);
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{pass}',$value,$this->cnf['UpdatePass']);
+ } else if ($item == 'mail') {
+ if ($cnt++ > 0) $sql .= ", ";
+ $sql .= str_replace('%{email}',$value,$this->cnf['UpdateEmail']);
+ }
+ }
+
+ if ($err == 0) {
+ if ($cnt > 0) {
+ $sql .= " ".str_replace('%{uid}', $uid, $this->cnf['UpdateTarget']);
+ if(get_class($this) == 'auth_mysql') $sql .= " LIMIT 1"; //some PgSQL inheritance comp.
+ $this->_modifyDB($sql);
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Retrieves the group id of a given group name
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $group group name which id is desired
+ * @return group id
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _getGroupID($group) {
+ if($this->dbcon) {
+ $sql = str_replace('%{group}',$this->_escape($group),$this->cnf['getGroupID']);
+ $result = $this->_queryDB($sql);
+ return $result === false ? false : $result[0]['id'];
+ }
+ return false;
+ }
+
+ /**
+ * Opens a connection to a database and saves the handle for further
+ * usage in the object. The successful call to this functions is
+ * essential for most functions in this object.
+ *
+ * @return bool
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _openDB() {
+ if (!$this->dbcon) {
+ $con = @mysql_connect ($this->cnf['server'], $this->cnf['user'], $this->cnf['password']);
+ if ($con) {
+ if ((mysql_select_db($this->cnf['database'], $con))) {
+ if ((preg_match("/^(\d+)\.(\d+)\.(\d+).*/", mysql_get_server_info ($con), $result)) == 1) {
+ $this->dbver = $result[1];
+ $this->dbrev = $result[2];
+ $this->dbsub = $result[3];
+ }
+ $this->dbcon = $con;
+ if(!empty($this->cnf['charset'])){
+ mysql_query('SET CHARACTER SET "' . $this->cnf['charset'] . '"', $con);
+ }
+ return true; // connection and database successfully opened
+ } else {
+ mysql_close ($con);
+ if ($this->cnf['debug'])
+ msg("MySQL err: No access to database {$this->cnf['database']}.",-1,__LINE__,__FILE__);
+ }
+ } else if ($this->cnf['debug'])
+ msg ("MySQL err: Connection to {$this->cnf['user']}@{$this->cnf['server']} not possible.",
+ -1,__LINE__,__FILE__);
+
+ return false; // connection failed
+ }
+ return true; // connection already open
+ }
+
+ /**
+ * Closes a database connection.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _closeDB() {
+ if ($this->dbcon) {
+ mysql_close ($this->dbcon);
+ $this->dbcon = 0;
+ }
+ }
+
+ /**
+ * Sends a SQL query to the database and transforms the result into
+ * an associative array.
+ *
+ * This function is only able to handle queries that returns a
+ * table such as SELECT.
+ *
+ * @param $query SQL string that contains the query
+ * @return array with the result table
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _queryDB($query) {
+ if($this->cnf['debug'] >= 2){
+ msg('MySQL query: '.hsc($query),0,__LINE__,__FILE__);
+ }
+
+ $resultarray = array();
+ if ($this->dbcon) {
+ $result = @mysql_query($query,$this->dbcon);
+ if ($result) {
+ while (($t = mysql_fetch_assoc($result)) !== false)
+ $resultarray[]=$t;
+ mysql_free_result ($result);
+ return $resultarray;
+ }
+ if ($this->cnf['debug'])
+ msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
+ return false;
+ }
+
+ /**
+ * Sends a SQL query to the database
+ *
+ * This function is only able to handle queries that returns
+ * either nothing or an id value such as INPUT, DELETE, UPDATE, etc.
+ *
+ * @param $query SQL string that contains the query
+ * @return insert id or 0, false on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _modifyDB($query) {
+ if ($this->dbcon) {
+ $result = @mysql_query($query,$this->dbcon);
+ if ($result) {
+ $rc = mysql_insert_id($this->dbcon); //give back ID on insert
+ if ($rc !== false) return $rc;
+ }
+ if ($this->cnf['debug'])
+ msg('MySQL err: '.mysql_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
+ return false;
+ }
+
+ /**
+ * Locked a list of tables for exclusive access so that modifications
+ * to the database can't be disturbed by other threads. The list
+ * could be set with $conf['auth']['mysql']['TablesToLock'] = array()
+ *
+ * If aliases for tables are used in SQL statements, also this aliases
+ * must be locked. For eg. you use a table 'user' and the alias 'u' in
+ * some sql queries, the array must looks like this (order is important):
+ * array("user", "user AS u");
+ *
+ * MySQL V3 is not able to handle transactions with COMMIT/ROLLBACK
+ * so that this functionality is simulated by this function. Nevertheless
+ * it is not as powerful as transactions, it is a good compromise in safty.
+ *
+ * @param $mode could be 'READ' or 'WRITE'
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _lockTables($mode) {
+ if ($this->dbcon) {
+ if (is_array($this->cnf['TablesToLock']) && !empty($this->cnf['TablesToLock'])) {
+ if ($mode == "READ" || $mode == "WRITE") {
+ $sql = "LOCK TABLES ";
+ $cnt = 0;
+ foreach ($this->cnf['TablesToLock'] as $table) {
+ if ($cnt++ != 0) $sql .= ", ";
+ $sql .= "$table $mode";
+ }
+ $this->_modifyDB($sql);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Unlock locked tables. All existing locks of this thread will be
+ * abrogated.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _unlockTables() {
+ if ($this->dbcon) {
+ $this->_modifyDB("UNLOCK TABLES");
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Transforms the filter settings in an filter string for a SQL database
+ * The database connection must already be established, otherwise the
+ * original SQL string without filter criteria will be returned.
+ *
+ * @param $sql SQL string to which the $filter criteria should be added
+ * @param $filter array of filter criteria as pairs of item and pattern
+ * @return SQL string with attached $filter criteria on success
+ * @return the original SQL string on error.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _createSQLFilter($sql, $filter) {
+ $SQLfilter = "";
+ $cnt = 0;
+
+ if ($this->dbcon) {
+ foreach ($filter as $item => $pattern) {
+ $tmp = '%'.$this->_escape($pattern).'%';
+ if ($item == 'user') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{user}',$tmp,$this->cnf['FilterLogin']);
+ } else if ($item == 'name') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{name}',$tmp,$this->cnf['FilterName']);
+ } else if ($item == 'mail') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{email}',$tmp,$this->cnf['FilterEmail']);
+ } else if ($item == 'grps') {
+ if ($cnt++ > 0) $SQLfilter .= " AND ";
+ $SQLfilter .= str_replace('%{group}',$tmp,$this->cnf['FilterGroup']);
+ }
+ }
+
+ // we have to check SQLfilter here and must not use $cnt because if
+ // any of cnf['Filter????'] is not defined, a malformed SQL string
+ // would be generated.
+
+ if (strlen($SQLfilter)) {
+ $glue = strpos(strtolower($sql),"where") ? " AND " : " WHERE ";
+ $sql = $sql.$glue.$SQLfilter;
+ }
+ }
+
+ return $sql;
+ }
+
+ /**
+ * Escape a string for insertion into the database
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $string The string to escape
+ * @param boolean $like Escape wildcard chars as well?
+ */
+ function _escape($string,$like=false){
+ if($this->dbcon){
+ $string = mysql_real_escape_string($string, $this->dbcon);
+ }else{
+ $string = addslashes($string);
+ }
+ if($like){
+ $string = addcslashes($string,'%_');
+ }
+ return $string;
+ }
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php
new file mode 100644
index 000000000..a6da56af5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php
@@ -0,0 +1,411 @@
+<?php
+/**
+ * PgSQL authentication backend
+ *
+ * This class inherits much functionality from the MySQL class
+ * and just reimplements the Postgres specific parts.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthias.grimmm@sourceforge.net>
+*/
+
+define('DOKU_AUTH', dirname(__FILE__));
+require_once(DOKU_AUTH.'/mysql.class.php');
+
+class auth_pgsql extends auth_mysql {
+
+ /**
+ * Constructor
+ *
+ * checks if the pgsql interface is available, otherwise it will
+ * set the variable $success of the basis class to false
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function auth_pgsql() {
+ global $conf;
+ $this->cnf = $conf['auth']['pgsql'];
+ if(!$this->cnf['port']) $this->cnf['port'] = 5432;
+
+ if (method_exists($this, 'auth_basic'))
+ parent::auth_basic();
+
+ if(!function_exists('pg_connect')) {
+ if ($this->cnf['debug'])
+ msg("PgSQL err: PHP Postgres extension not found.",-1);
+ $this->success = false;
+ return;
+ }
+
+ $this->defaultgroup = $conf['defaultgroup'];
+
+ // set capabilities based upon config strings set
+ if (empty($this->cnf['user']) ||
+ empty($this->cnf['password']) || empty($this->cnf['database'])){
+ if ($this->cnf['debug'])
+ msg("PgSQL err: insufficient configuration.",-1,__LINE__,__FILE__);
+ $this->success = false;
+ return;
+ }
+
+ $this->cando['addUser'] = $this->_chkcnf(array('getUserInfo',
+ 'getGroups',
+ 'addUser',
+ 'getUserID',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup'));
+ $this->cando['delUser'] = $this->_chkcnf(array('getUserID',
+ 'delUser',
+ 'delUserRefs'));
+ $this->cando['modLogin'] = $this->_chkcnf(array('getUserID',
+ 'updateUser',
+ 'UpdateTarget'));
+ $this->cando['modPass'] = $this->cando['modLogin'];
+ $this->cando['modName'] = $this->cando['modLogin'];
+ $this->cando['modMail'] = $this->cando['modLogin'];
+ $this->cando['modGroups'] = $this->_chkcnf(array('getUserID',
+ 'getGroups',
+ 'getGroupID',
+ 'addGroup',
+ 'addUserGroup',
+ 'delGroup',
+ 'getGroupID',
+ 'delUserGroup'));
+ /* getGroups is not yet supported
+ $this->cando['getGroups'] = $this->_chkcnf(array('getGroups',
+ 'getGroupID')); */
+ $this->cando['getUsers'] = $this->_chkcnf(array('getUsers',
+ 'getUserInfo',
+ 'getGroups'));
+ $this->cando['getUserCount'] = $this->_chkcnf(array('getUsers'));
+ }
+
+ /**
+ * Check if the given config strings are set
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @return bool
+ */
+ function _chkcnf($keys, $wop=false){
+ foreach ($keys as $key){
+ if (empty($this->cnf[$key])) return false;
+ }
+ return true;
+ }
+
+ // @inherit function checkPass($user,$pass)
+ // @inherit function getUserData($user)
+ // @inherit function createUser($user,$pwd,$name,$mail,$grps=null)
+ // @inherit function modifyUser($user, $changes)
+ // @inherit function deleteUsers($users)
+
+
+ /**
+ * [public function]
+ *
+ * Counts users which meet certain $filter criteria.
+ *
+ * @param array $filter filter criteria in item/pattern pairs
+ * @return count of found users.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function getUserCount($filter=array()) {
+ $rc = 0;
+
+ if($this->_openDB()) {
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+
+ // no equivalent of SQL_CALC_FOUND_ROWS in pgsql?
+ if (($result = $this->_queryDB($sql))){
+ $rc = count($result);
+ }
+ $this->_closeDB();
+ }
+ return $rc;
+ }
+
+ /**
+ * Bulk retrieval of user data. [public function]
+ *
+ * @param first index of first user to be returned
+ * @param limit max number of users to be returned
+ * @param filter array of field/pattern pairs
+ * @return array of userinfo (refer getUserData for internal userinfo details)
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function retrieveUsers($first=0,$limit=10,$filter=array()) {
+ $out = array();
+
+ if($this->_openDB()) {
+ $this->_lockTables("READ");
+ $sql = $this->_createSQLFilter($this->cnf['getUsers'], $filter);
+ $sql .= " ".$this->cnf['SortOrder']." LIMIT $limit OFFSET $first";
+ $result = $this->_queryDB($sql);
+
+ foreach ($result as $user)
+ if (($info = $this->_getUserInfo($user['user'])))
+ $out[$user['user']] = $info;
+
+ $this->_unlockTables();
+ $this->_closeDB();
+ }
+ return $out;
+ }
+
+ // @inherit function joinGroup($user, $group)
+ // @inherit function leaveGroup($user, $group) {
+
+ /**
+ * Adds a user to a group.
+ *
+ * If $force is set to '1' non existing groups would be created.
+ *
+ * The database connection must already be established. Otherwise
+ * this function does nothing and returns 'false'.
+ *
+ * @param $user user to add to a group
+ * @param $group name of the group
+ * @param $force '1' create missing groups
+ * @return bool 'true' on success, 'false' on error
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _addUserToGroup($user, $group, $force=0) {
+ $newgroup = 0;
+
+ if (($this->dbcon) && ($user)) {
+ $gid = $this->_getGroupID($group);
+ if (!$gid) {
+ if ($force) { // create missing groups
+ $sql = str_replace('%{group}',addslashes($group),$this->cnf['addGroup']);
+ $this->_modifyDB($sql);
+ //group should now exists try again to fetch it
+ $gid = $this->_getGroupID($group);
+ $newgroup = 1; // group newly created
+ }
+ }
+ if (!$gid) return false; // group didn't exist and can't be created
+
+ $sql = $this->cnf['addUserGroup'];
+ if(strpos($sql,'%{uid}') !== false){
+ $uid = $this->_getUserID($user);
+ $sql = str_replace('%{uid}', addslashes($uid), $sql);
+ }
+ $sql = str_replace('%{user}', addslashes($user),$sql);
+ $sql = str_replace('%{gid}', addslashes($gid),$sql);
+ $sql = str_replace('%{group}',addslashes($group),$sql);
+ if ($this->_modifyDB($sql) !== false) return true;
+
+ if ($newgroup) { // remove previously created group on error
+ $sql = str_replace('%{gid}', addslashes($gid),$this->cnf['delGroup']);
+ $sql = str_replace('%{group}',addslashes($group),$sql);
+ $this->_modifyDB($sql);
+ }
+ }
+ return false;
+ }
+
+ // @inherit function _delUserFromGroup($user $group)
+ // @inherit function _getGroups($user)
+ // @inherit function _getUserID($user)
+
+ /**
+ * Adds a new User to the database.
+ *
+ * The database connection must already be established
+ * for this function to work. Otherwise it will return
+ * 'false'.
+ *
+ * @param $user login of the user
+ * @param $pwd encrypted password
+ * @param $name full name of the user
+ * @param $mail email address
+ * @param $grps array of groups the user should become member of
+ * @return bool
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _addUser($user,$pwd,$name,$mail,$grps){
+ if($this->dbcon && is_array($grps)) {
+ $sql = str_replace('%{user}', addslashes($user),$this->cnf['addUser']);
+ $sql = str_replace('%{pass}', addslashes($pwd),$sql);
+ $sql = str_replace('%{name}', addslashes($name),$sql);
+ $sql = str_replace('%{email}',addslashes($mail),$sql);
+ if($this->_modifyDB($sql)){
+ $uid = $this->_getUserID($user);
+ }else{
+ return false;
+ }
+
+ if ($uid) {
+ foreach($grps as $group) {
+ $gid = $this->_addUserToGroup($user, $group, 1);
+ if ($gid === false) break;
+ }
+
+ if ($gid) return true;
+ else {
+ /* remove the new user and all group relations if a group can't
+ * be assigned. Newly created groups will remain in the database
+ * and won't be removed. This might create orphaned groups but
+ * is not a big issue so we ignore this problem here.
+ */
+ $this->_delUser($user);
+ if ($this->cnf['debug'])
+ msg("PgSQL err: Adding user '$user' to group '$group' failed.",-1,__LINE__,__FILE__);
+ }
+ }
+ }
+ return false;
+ }
+
+ // @inherit function _delUser($user)
+ // @inherit function _getUserInfo($user)
+ // @inherit function _updateUserInfo($changes, $uid)
+ // @inherit function _getGroupID($group)
+
+ /**
+ * Opens a connection to a database and saves the handle for further
+ * usage in the object. The successful call to this functions is
+ * essential for most functions in this object.
+ *
+ * @return bool
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _openDB() {
+ if (!$this->dbcon) {
+ $dsn = $this->cnf['server'] ? 'host='.$this->cnf['server'] : '';
+ $dsn .= ' port='.$this->cnf['port'];
+ $dsn .= ' dbname='.$this->cnf['database'];
+ $dsn .= ' user='.$this->cnf['user'];
+ $dsn .= ' password='.$this->cnf['password'];
+
+ $con = @pg_connect($dsn);
+ if ($con) {
+ $this->dbcon = $con;
+ return true; // connection and database successfully opened
+ } else if ($this->cnf['debug']){
+ msg ("PgSQL err: Connection to {$this->cnf['user']}@{$this->cnf['server']} not possible.",
+ -1,__LINE__,__FILE__);
+ }
+ return false; // connection failed
+ }
+ return true; // connection already open
+ }
+
+ /**
+ * Closes a database connection.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _closeDB() {
+ if ($this->dbcon) {
+ pg_close ($this->dbcon);
+ $this->dbcon = 0;
+ }
+ }
+
+ /**
+ * Sends a SQL query to the database and transforms the result into
+ * an associative array.
+ *
+ * This function is only able to handle queries that returns a
+ * table such as SELECT.
+ *
+ * @param $query SQL string that contains the query
+ * @return array with the result table
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _queryDB($query) {
+ if ($this->dbcon) {
+ $result = @pg_query($this->dbcon,$query);
+ if ($result) {
+ while (($t = pg_fetch_assoc($result)) !== false)
+ $resultarray[]=$t;
+ pg_free_result ($result);
+ return $resultarray;
+ }elseif ($this->cnf['debug'])
+ msg('PgSQL err: '.pg_last_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
+ return false;
+ }
+
+ /**
+ * Executes an update or insert query. This differs from the
+ * MySQL one because it does NOT return the last insertID
+ *
+ * @author Andreas Gohr
+ */
+ function _modifyDB($query) {
+ if ($this->dbcon) {
+ $result = @pg_query($this->dbcon,$query);
+ if ($result) {
+ pg_free_result ($result);
+ return true;
+ }
+ if ($this->cnf['debug']){
+ msg('PgSQL err: '.pg_last_error($this->dbcon),-1,__LINE__,__FILE__);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Start a transaction
+ *
+ * @param $mode could be 'READ' or 'WRITE'
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _lockTables($mode) {
+ if ($this->dbcon) {
+ $this->_modifyDB('BEGIN');
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Commit a transaction
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+ function _unlockTables() {
+ if ($this->dbcon) {
+ $this->_modifyDB('COMMIT');
+ return true;
+ }
+ return false;
+ }
+
+ // @inherit function _createSQLFilter($sql, $filter)
+
+
+ /**
+ * Escape a string for insertion into the database
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $string The string to escape
+ * @param boolean $like Escape wildcard chars as well?
+ */
+ function _escape($string,$like=false){
+ $string = pg_escape_string($string);
+ if($like){
+ $string = addcslashes($string,'%_');
+ }
+ return $string;
+ }
+
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php
new file mode 100644
index 000000000..94e0c6bc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php
@@ -0,0 +1,324 @@
+<?php
+/**
+ * Plaintext authentication backend
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+define('DOKU_AUTH', dirname(__FILE__));
+require_once(DOKU_AUTH.'/basic.class.php');
+
+define('AUTH_USERFILE',DOKU_CONF.'users.auth.php');
+
+class auth_plain extends auth_basic {
+
+ var $users = null;
+ var $_pattern = array();
+
+ /**
+ * Constructor
+ *
+ * Carry out sanity checks to ensure the object is
+ * able to operate. Set capabilities.
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+ function auth_plain() {
+ if (!@is_readable(AUTH_USERFILE)){
+ $this->success = false;
+ }else{
+ if(@is_writable(AUTH_USERFILE)){
+ $this->cando['addUser'] = true;
+ $this->cando['delUser'] = true;
+ $this->cando['modLogin'] = true;
+ $this->cando['modPass'] = true;
+ $this->cando['modName'] = true;
+ $this->cando['modMail'] = true;
+ $this->cando['modGroups'] = true;
+ }
+ $this->cando['getUsers'] = true;
+ $this->cando['getUserCount'] = true;
+ }
+ }
+
+ /**
+ * Check user+password [required auth function]
+ *
+ * Checks if the given user exists and the given
+ * plaintext password is correct
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool
+ */
+ function checkPass($user,$pass){
+
+ $userinfo = $this->getUserData($user);
+ if ($userinfo === false) return false;
+
+ return auth_verifyPassword($pass,$this->users[$user]['pass']);
+ }
+
+ /**
+ * Return user info
+ *
+ * Returns info about the given user needs to contain
+ * at least these fields:
+ *
+ * name string full name of the user
+ * mail string email addres of the user
+ * grps array list of groups the user is in
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getUserData($user){
+
+ if($this->users === null) $this->_loadUserData();
+ return isset($this->users[$user]) ? $this->users[$user] : false;
+ }
+
+ /**
+ * Create a new User
+ *
+ * Returns false if the user already exists, null when an error
+ * occurred and true if everything went well.
+ *
+ * The new user will be added to the default group by this
+ * function if grps are not specified (default behaviour).
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function createUser($user,$pwd,$name,$mail,$grps=null){
+ global $conf;
+
+ // user mustn't already exist
+ if ($this->getUserData($user) !== false) return false;
+
+ $pass = auth_cryptPassword($pwd);
+
+ // set default group if no groups specified
+ if (!is_array($grps)) $grps = array($conf['defaultgroup']);
+
+ // prepare user line
+ $groups = join(',',$grps);
+ $userline = join(':',array($user,$pass,$name,$mail,$groups))."\n";
+
+ if (io_saveFile(AUTH_USERFILE,$userline,true)) {
+ $this->users[$user] = compact('pass','name','mail','grps');
+ return $pwd;
+ }
+
+ msg('The '.AUTH_USERFILE.' file is not writable. Please inform the Wiki-Admin',-1);
+ return null;
+ }
+
+ /**
+ * Modify user data
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param $user nick of the user to be changed
+ * @param $changes array of field/value pairs to be changed (password will be clear text)
+ * @return bool
+ */
+ function modifyUser($user, $changes) {
+ global $conf;
+ global $ACT;
+ global $INFO;
+
+ // sanity checks, user must already exist and there must be something to change
+ if (($userinfo = $this->getUserData($user)) === false) return false;
+ if (!is_array($changes) || !count($changes)) return true;
+
+ // update userinfo with new data, remembering to encrypt any password
+ $newuser = $user;
+ foreach ($changes as $field => $value) {
+ if ($field == 'user') {
+ $newuser = $value;
+ continue;
+ }
+ if ($field == 'pass') $value = auth_cryptPassword($value);
+ $userinfo[$field] = $value;
+ }
+
+ $groups = join(',',$userinfo['grps']);
+ $userline = join(':',array($newuser, $userinfo['pass'], $userinfo['name'], $userinfo['mail'], $groups))."\n";
+
+ if (!$this->deleteUsers(array($user))) {
+ msg('Unable to modify user data. Please inform the Wiki-Admin',-1);
+ return false;
+ }
+
+ if (!io_saveFile(AUTH_USERFILE,$userline,true)) {
+ msg('There was an error modifying your user data. You should register again.',-1);
+ // FIXME, user has been deleted but not recreated, should force a logout and redirect to login page
+ $ACT == 'register';
+ return false;
+ }
+
+ $this->users[$newuser] = $userinfo;
+ return true;
+ }
+
+ /**
+ * Remove one or more users from the list of registered users
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @param array $users array of users to be deleted
+ * @return int the number of users deleted
+ */
+ function deleteUsers($users) {
+
+ if (!is_array($users) || empty($users)) return 0;
+
+ if ($this->users === null) $this->_loadUserData();
+
+ $deleted = array();
+ foreach ($users as $user) {
+ if (isset($this->users[$user])) $deleted[] = preg_quote($user,'/');
+ }
+
+ if (empty($deleted)) return 0;
+
+ $pattern = '/^('.join('|',$deleted).'):/';
+
+ if (io_deleteFromFile(AUTH_USERFILE,$pattern,true)) {
+ foreach ($deleted as $user) unset($this->users[$user]);
+ return count($deleted);
+ }
+
+ // problem deleting, reload the user list and count the difference
+ $count = count($this->users);
+ $this->_loadUserData();
+ $count -= count($this->users);
+ return $count;
+ }
+
+ /**
+ * Return a count of the number of user which meet $filter criteria
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function getUserCount($filter=array()) {
+ if($this->users === null) $this->_loadUserData();
+
+ if (!count($filter)) return count($this->users);
+
+ $count = 0;
+ $this->_constructPattern($filter);
+
+ foreach ($this->users as $user => $info) {
+ $count += $this->_filter($user, $info);
+ }
+
+ return $count;
+ }
+
+ /**
+ * Bulk retrieval of user data
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param start index of first user to be returned
+ * @param limit max number of users to be returned
+ * @param filter array of field/pattern pairs
+ * @return array of userinfo (refer getUserData for internal userinfo details)
+ */
+ function retrieveUsers($start=0,$limit=0,$filter=array()) {
+
+ if ($this->users === null) $this->_loadUserData();
+
+ ksort($this->users);
+
+ $i = 0;
+ $count = 0;
+ $out = array();
+ $this->_constructPattern($filter);
+
+ foreach ($this->users as $user => $info) {
+ if ($this->_filter($user, $info)) {
+ if ($i >= $start) {
+ $out[$user] = $info;
+ $count++;
+ if (($limit > 0) && ($count >= $limit)) break;
+ }
+ $i++;
+ }
+ }
+
+ return $out;
+ }
+
+ /**
+ * Only valid pageid's (no namespaces) for usernames
+ */
+ function cleanUser($user){
+ global $conf;
+ return cleanID(str_replace(':',$conf['sepchar'],$user));
+ }
+
+ /**
+ * Only valid pageid's (no namespaces) for groupnames
+ */
+ function cleanGroup($group){
+ global $conf;
+ return cleanID(str_replace(':',$conf['sepchar'],$group));
+ }
+
+ /**
+ * Load all user data
+ *
+ * loads the user file into a datastructure
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _loadUserData(){
+ $this->users = array();
+
+ if(!@file_exists(AUTH_USERFILE)) return;
+
+ $lines = file(AUTH_USERFILE);
+ foreach($lines as $line){
+ $line = preg_replace('/#.*$/','',$line); //ignore comments
+ $line = trim($line);
+ if(empty($line)) continue;
+
+ $row = explode(":",$line,5);
+ $groups = array_values(array_filter(explode(",",$row[4])));
+
+ $this->users[$row[0]]['pass'] = $row[1];
+ $this->users[$row[0]]['name'] = urldecode($row[2]);
+ $this->users[$row[0]]['mail'] = $row[3];
+ $this->users[$row[0]]['grps'] = $groups;
+ }
+ }
+
+ /**
+ * return 1 if $user + $info match $filter criteria, 0 otherwise
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+ function _filter($user, $info) {
+ // FIXME
+ foreach ($this->_pattern as $item => $pattern) {
+ if ($item == 'user') {
+ if (!preg_match($pattern, $user)) return 0;
+ } else if ($item == 'grps') {
+ if (!count(preg_grep($pattern, $info['grps']))) return 0;
+ } else {
+ if (!preg_match($pattern, $info[$item])) return 0;
+ }
+ }
+ return 1;
+ }
+
+ function _constructPattern($filter) {
+ $this->_pattern = array();
+ foreach ($filter as $item => $pattern) {
+// $this->_pattern[$item] = '/'.preg_quote($pattern,"/").'/i'; // don't allow regex characters
+ $this->_pattern[$item] = '/'.str_replace('/','\/',$pattern).'/i'; // allow regex characters
+ }
+ }
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php b/mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php
new file mode 100644
index 000000000..42e3a589a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php
@@ -0,0 +1,521 @@
+<?php
+/* vim: set expandtab sw=4 ts=4 sts=4: */
+/**
+ * The Cipher_blowfish:: class implements the Cipher interface enryption data
+ * using the Blowfish algorithm.
+ *
+ * $Horde: horde/lib/Cipher/blowfish.php,v 1.2.2.3 2003/01/03 13:23:22 jan Exp $
+ *
+ * Copyright 2002-2003 Mike Cochrane <mike@graftonhall.co.nz>
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @author Mike Cochrane <mike@graftonhall.co.nz>
+ * @version $Id: blowfish.php 11081 2008-01-25 09:35:48Z cybot_tm $
+ * @since Horde 2.2
+ * @package horde.cipher
+ */
+
+// Change for phpMyAdmin by lem9:
+//class Horde_Cipher_blowfish extends Horde_Cipher {
+class Horde_Cipher_blowfish
+{
+ /* Pi Array */
+ var $p = array(
+ 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,
+ 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,
+ 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,
+ 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,
+ 0x9216D5D9, 0x8979FB1B);
+
+ /* S Boxes */
+ var $s1 = array(
+ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,
+ 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,
+ 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,
+ 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,
+ 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,
+ 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,
+ 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,
+ 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,
+ 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,
+ 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,
+ 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,
+ 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,
+ 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,
+ 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,
+ 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,
+ 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,
+ 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,
+ 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,
+ 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,
+ 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,
+ 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,
+ 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,
+ 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,
+ 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,
+ 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,
+ 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,
+ 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,
+ 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,
+ 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,
+ 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,
+ 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,
+ 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,
+ 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,
+ 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,
+ 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,
+ 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,
+ 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,
+ 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,
+ 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,
+ 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,
+ 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,
+ 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,
+ 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,
+ 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,
+ 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,
+ 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,
+ 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,
+ 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,
+ 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,
+ 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,
+ 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,
+ 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,
+ 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,
+ 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,
+ 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,
+ 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,
+ 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,
+ 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,
+ 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,
+ 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,
+ 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,
+ 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,
+ 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,
+ 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A);
+ var $s2 = array(
+ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,
+ 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,
+ 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,
+ 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,
+ 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,
+ 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,
+ 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,
+ 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,
+ 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,
+ 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,
+ 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,
+ 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,
+ 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,
+ 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,
+ 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,
+ 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,
+ 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,
+ 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,
+ 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,
+ 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,
+ 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,
+ 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,
+ 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,
+ 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,
+ 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,
+ 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,
+ 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,
+ 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,
+ 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,
+ 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,
+ 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,
+ 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,
+ 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,
+ 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,
+ 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,
+ 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,
+ 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,
+ 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,
+ 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,
+ 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,
+ 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,
+ 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,
+ 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,
+ 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,
+ 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,
+ 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,
+ 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,
+ 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,
+ 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,
+ 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,
+ 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,
+ 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,
+ 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,
+ 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,
+ 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,
+ 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,
+ 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,
+ 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,
+ 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,
+ 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,
+ 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,
+ 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,
+ 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,
+ 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7);
+ var $s3 = array(
+ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,
+ 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,
+ 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,
+ 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,
+ 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,
+ 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,
+ 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,
+ 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,
+ 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,
+ 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,
+ 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,
+ 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,
+ 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,
+ 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,
+ 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,
+ 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,
+ 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,
+ 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,
+ 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,
+ 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,
+ 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,
+ 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,
+ 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,
+ 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,
+ 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,
+ 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,
+ 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,
+ 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,
+ 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,
+ 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,
+ 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,
+ 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,
+ 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,
+ 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,
+ 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,
+ 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,
+ 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,
+ 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,
+ 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,
+ 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,
+ 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,
+ 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,
+ 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,
+ 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,
+ 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,
+ 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,
+ 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,
+ 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,
+ 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,
+ 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,
+ 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,
+ 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,
+ 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,
+ 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,
+ 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,
+ 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,
+ 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,
+ 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,
+ 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,
+ 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,
+ 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,
+ 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,
+ 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,
+ 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0);
+ var $s4 = array(
+ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,
+ 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,
+ 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,
+ 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,
+ 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,
+ 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,
+ 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,
+ 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,
+ 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,
+ 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,
+ 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,
+ 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,
+ 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,
+ 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,
+ 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,
+ 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,
+ 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,
+ 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,
+ 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,
+ 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,
+ 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,
+ 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,
+ 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,
+ 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,
+ 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,
+ 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,
+ 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,
+ 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,
+ 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,
+ 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,
+ 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,
+ 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,
+ 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,
+ 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,
+ 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,
+ 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,
+ 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,
+ 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,
+ 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,
+ 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,
+ 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,
+ 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,
+ 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,
+ 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,
+ 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,
+ 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,
+ 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,
+ 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,
+ 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,
+ 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,
+ 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,
+ 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,
+ 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,
+ 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,
+ 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,
+ 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,
+ 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,
+ 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,
+ 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,
+ 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,
+ 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,
+ 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,
+ 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,
+ 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6);
+
+ /* The number of rounds to do */
+ var $_rounds = 16;
+
+ /**
+ * Set the key to be used for en/decryption
+ *
+ * @param String $key The key to use
+ */
+ function setKey($key)
+ {
+ $key = $this->_formatKey($key);
+ $keyPos = $keyXor = 0;
+
+ $iMax = count($this->p);
+ $keyLen = count($key);
+ for ($i = 0; $i < $iMax; $i++) {
+ for ($t = 0; $t < 4; $t++) {
+ $keyXor = ($keyXor << 8) | (($key[$keyPos]) & 0x0ff);
+ if (++$keyPos == $keyLen) {
+ $keyPos = 0;
+ }
+ }
+ $this->p[$i] = $this->p[$i] ^ $keyXor;
+ }
+
+ $encZero = array('L' => 0, 'R' => 0);
+ for ($i = 0; $i + 1 < $iMax; $i += 2) {
+ $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
+ $this->p[$i] = $encZero['L'];
+ $this->p[$i + 1] = $encZero['R'];
+ }
+
+ $iMax = count($this->s1);
+ for ($i = 0; $i < $iMax; $i += 2) {
+ $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
+ $this->s1[$i] = $encZero['L'];
+ $this->s1[$i + 1] = $encZero['R'];
+ }
+
+ $iMax = count($this->s2);
+ for ($i = 0; $i < $iMax; $i += 2) {
+ $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
+ $this->s2[$i] = $encZero['L'];
+ $this->s2[$i + 1] = $encZero['R'];
+ }
+
+ $iMax = count($this->s3);
+ for ($i = 0; $i < $iMax; $i += 2) {
+ $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
+ $this->s3[$i] = $encZero['L'];
+ $this->s3[$i + 1] = $encZero['R'];
+ }
+
+ $iMax = count($this->s4);
+ for ($i = 0; $i < $iMax; $i += 2) {
+ $encZero = $this->_encryptBlock($encZero['L'], $encZero['R']);
+ $this->s4[$i] = $encZero['L'];
+ $this->s4[$i + 1] = $encZero['R'];
+ }
+
+ }
+
+ /**
+ * Encrypt a block on data.
+ *
+ * @param String $block The data to encrypt
+ * @param optional String $key The key to use
+ *
+ * @return String the encrypted output
+ */
+ function encryptBlock($block, $key = null)
+ {
+ if (!is_null($key)) {
+ $this->setKey($key);
+ }
+
+ list($L, $R) = array_values(unpack('N*', $block));
+ $parts = $this->_encryptBlock($L, $R);
+ return pack("NN", $parts['L'], $parts['R']);
+ }
+
+ /**
+ * Encrypt a block on data.
+ *
+ * @param String $L The data to encrypt.
+ * @param String $R The data to encrypt.
+ *
+ * @return String The encrypted output.
+ */
+ function _encryptBlock($L, $R)
+ {
+ $L ^= $this->p[0];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[1];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[2];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[3];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[4];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[5];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[6];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[7];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[8];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[9];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[10];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[11];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[12];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[13];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[14];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[15];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[16];
+ $R ^= $this->p[17];
+
+ return array('L' => $R, 'R' => $L);
+ }
+
+ /**
+ * Decrypt a block on data.
+ *
+ * @param String $block The data to decrypt
+ * @param optional String $key The key to use
+ *
+ * @return String the decrypted output
+ */
+ function decryptBlock($block, $key = null)
+ {
+ if (!is_null($key)) {
+ $this->setKey($key);
+ }
+
+// change for phpMyAdmin
+ $L = null;
+ $R = null;
+
+ $retarray = array_values(unpack('N*', $block));
+ if (isset($retarray[0])) {
+ $L = $retarray[0];
+ }
+ if (isset($retarray[1])) {
+ $R = $retarray[1];
+ }
+// end change for phpMyAdmin
+
+ $L ^= $this->p[17];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[16];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[15];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[14];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[13];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[12];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[11];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[10];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[9];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[8];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[7];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[6];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[5];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[4];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[3];
+ $R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[2];
+ $L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[1];
+
+ $decrypted = pack("NN", $R ^ $this->p[0], $L);
+ return $decrypted;
+ }
+
+ /**
+ * Converts a text key into an array.
+ *
+ * @return array The key.
+ */
+ function _formatKey($key)
+ {
+ return array_values(unpack('C*', $key));
+ }
+
+}
+
+// higher-level functions:
+/**
+ * Encryption using blowfish algorithm
+ *
+ * @param string original data
+ * @param string the secret
+ *
+ * @return string the encrypted result
+ *
+ * @access public
+ *
+ * @author lem9
+ */
+function PMA_blowfish_encrypt($data, $secret)
+{
+ $pma_cipher = new Horde_Cipher_blowfish;
+ $encrypt = '';
+
+ $data .= '_'; // triming fixed for DokuWiki FS#1690 FS#1713
+ $mod = strlen($data) % 8;
+
+ if ($mod > 0) {
+ $data .= str_repeat("\0", 8 - $mod);
+ }
+
+ foreach (str_split($data, 8) as $chunk) {
+ $encrypt .= $pma_cipher->encryptBlock($chunk, $secret);
+ }
+ return base64_encode($encrypt);
+}
+
+/**
+ * Decryption using blowfish algorithm
+ *
+ * @param string encrypted data
+ * @param string the secret
+ *
+ * @return string original data
+ *
+ * @access public
+ *
+ * @author lem9
+ */
+function PMA_blowfish_decrypt($encdata, $secret)
+{
+ $pma_cipher = new Horde_Cipher_blowfish;
+ $decrypt = '';
+ $data = base64_decode($encdata);
+
+ foreach (str_split($data, 8) as $chunk) {
+ $decrypt .= $pma_cipher->decryptBlock($chunk, $secret);
+ }
+ return substr(rtrim($decrypt, "\0"), 0, -1); // triming fixed for DokuWiki FS#1690 FS#1713
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/cache.php b/mod/dokuwiki/vendors/dokuwiki/inc/cache.php
new file mode 100644
index 000000000..8e8adfd6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/cache.php
@@ -0,0 +1,292 @@
+<?php
+/**
+ * Generic class to handle caching
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/parserutils.php');
+
+class cache {
+ var $key = ''; // primary identifier for this item
+ var $ext = ''; // file ext for cache data, secondary identifier for this item
+ var $cache = ''; // cache file name
+ var $depends = array(); // array containing cache dependency information,
+ // used by _useCache to determine cache validity
+
+ var $_event = ''; // event to be triggered during useCache
+
+ function cache($key,$ext) {
+ $this->key = $key;
+ $this->ext = $ext;
+ $this->cache = getCacheName($key,$ext);
+ }
+
+ /**
+ * public method to determine whether the cache can be used
+ *
+ * to assist in cetralisation of event triggering and calculation of cache statistics,
+ * don't override this function override _useCache()
+ *
+ * @param array $depends array of cache dependencies, support dependecies:
+ * 'age' => max age of the cache in seconds
+ * 'files' => cache must be younger than mtime of each file
+ * (nb. dependency passes if file doesn't exist)
+ *
+ * @return bool true if cache can be used, false otherwise
+ */
+ function useCache($depends=array()) {
+ $this->depends = $depends;
+ $this->_addDependencies();
+
+ if ($this->_event) {
+ return $this->_stats(trigger_event($this->_event,$this,array($this,'_useCache')));
+ } else {
+ return $this->_stats($this->_useCache());
+ }
+ }
+
+ /**
+ * private method containing cache use decision logic
+ *
+ * this function processes the following keys in the depends array
+ * purge - force a purge on any non empty value
+ * age - expire cache if older than age (seconds)
+ * files - expire cache if any file in this array was updated more recently than the cache
+ *
+ * can be overridden
+ *
+ * @return bool see useCache()
+ */
+ function _useCache() {
+
+ if (!empty($this->depends['purge'])) return false; // purge requested?
+ if (!($this->_time = @filemtime($this->cache))) return false; // cache exists?
+
+ // cache too old?
+ if (!empty($this->depends['age']) && ((time() - $this->_time) > $this->depends['age'])) return false;
+
+ if (!empty($this->depends['files'])) {
+ foreach ($this->depends['files'] as $file) {
+ if ($this->_time < @filemtime($file)) return false; // cache older than files it depends on?
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * add dependencies to the depends array
+ *
+ * this method should only add dependencies,
+ * it should not remove any existing dependencies and
+ * it should only overwrite a dependency when the new value is more stringent than the old
+ */
+ function _addDependencies() {
+ if (isset($_REQUEST['purge'])) $this->depends['purge'] = true; // purge requested
+ }
+
+ /**
+ * retrieve the cached data
+ *
+ * @param bool $clean true to clean line endings, false to leave line endings alone
+ * @return string cache contents
+ */
+ function retrieveCache($clean=true) {
+ return io_readFile($this->cache, $clean);
+ }
+
+ /**
+ * cache $data
+ *
+ * @param string $data the data to be cached
+ * @return bool true on success, false otherwise
+ */
+ function storeCache($data) {
+ return io_savefile($this->cache, $data);
+ }
+
+ /**
+ * remove any cached data associated with this cache instance
+ */
+ function removeCache() {
+ @unlink($this->cache);
+ }
+
+ /**
+ * Record cache hits statistics.
+ * (Only when debugging allowed, to reduce overhead.)
+ *
+ * @param bool $success result of this cache use attempt
+ * @return bool pass-thru $success value
+ */
+ function _stats($success) {
+ global $conf;
+ static $stats = NULL;
+ static $file;
+
+ if (!$conf['allowdebug']) { return $success; }
+
+ if (is_null($stats)) {
+ $file = $conf['cachedir'].'/cache_stats.txt';
+ $lines = explode("\n",io_readFile($file));
+
+ foreach ($lines as $line) {
+ $i = strpos($line,',');
+ $stats[substr($line,0,$i)] = $line;
+ }
+ }
+
+ if (isset($stats[$this->ext])) {
+ list($ext,$count,$hits) = explode(',',$stats[$this->ext]);
+ } else {
+ $ext = $this->ext;
+ $count = 0;
+ $hits = 0;
+ }
+
+ $count++;
+ if ($success) $hits++;
+ $stats[$this->ext] = "$ext,$count,$hits";
+
+ io_saveFile($file,join("\n",$stats));
+
+ return $success;
+ }
+}
+
+class cache_parser extends cache {
+
+ var $file = ''; // source file for cache
+ var $mode = ''; // input mode (represents the processing the input file will undergo)
+
+ var $_event = 'PARSER_CACHE_USE';
+
+ function cache_parser($id, $file, $mode) {
+ if ($id) $this->page = $id;
+ $this->file = $file;
+ $this->mode = $mode;
+
+ parent::cache($file.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.'.$mode);
+ }
+
+ function _useCache() {
+
+ if (!@file_exists($this->file)) return false; // source exists?
+ return parent::_useCache();
+ }
+
+ function _addDependencies() {
+ global $conf, $config_cascade;
+
+ $this->depends['age'] = isset($this->depends['age']) ?
+ min($this->depends['age'],$conf['cachetime']) : $conf['cachetime'];
+
+ // parser cache file dependencies ...
+ $files = array($this->file, // ... source
+ DOKU_INC.'inc/parser/parser.php', // ... parser
+ DOKU_INC.'inc/parser/handler.php', // ... handler
+ );
+ $files = array_merge($files, getConfigFiles('main')); // ... wiki settings
+
+ $this->depends['files'] = !empty($this->depends['files']) ? array_merge($files, $this->depends['files']) : $files;
+ parent::_addDependencies();
+ }
+
+}
+
+class cache_renderer extends cache_parser {
+
+ function useCache($depends=array()) {
+ $use = parent::useCache($depends);
+
+ // meta data needs to be kept in step with the cache
+ if (!$use && isset($this->page)) {
+ p_set_metadata($this->page,array(),true);
+ }
+
+ return $use;
+ }
+
+ function _useCache() {
+ global $conf;
+
+ if (!parent::_useCache()) return false;
+
+ if (!isset($this->page)) {
+ return true;
+ }
+
+ // check current link existence is consistent with cache version
+ // first check the purgefile
+ // - if the cache is more recent than the purgefile we know no links can have been updated
+ if ($this->_time >= @filemtime($conf['cachedir'].'/purgefile')) {
+ return true;
+ }
+
+ // for wiki pages, check metadata dependencies
+ $metadata = p_get_metadata($this->page);
+
+ if (!isset($metadata['relation']['references']) ||
+ empty($metadata['relation']['references'])) {
+ return true;
+ }
+
+ foreach ($metadata['relation']['references'] as $id => $exists) {
+ if ($exists != page_exists($id,'',false)) return false;
+ }
+
+ return true;
+ }
+
+ function _addDependencies() {
+
+ // renderer cache file dependencies ...
+ $files = array(
+ DOKU_INC.'inc/parser/'.$this->mode.'.php', // ... the renderer
+ );
+
+ // page implies metadata and possibly some other dependencies
+ if (isset($this->page)) {
+
+ $metafile = metaFN($this->page,'.meta');
+ if (@file_exists($metafile)) {
+ $files[] = $metafile; // ... the page's own metadata
+ $files[] = DOKU_INC.'inc/parser/metadata.php'; // ... the metadata renderer
+
+ $valid = p_get_metadata($this->page, 'date valid');
+ if (!empty($valid['age'])) {
+ $this->depends['age'] = isset($this->depends['age']) ?
+ min($this->depends['age'],$valid['age']) : $valid['age'];
+ }
+
+ } else {
+ $this->depends['purge'] = true; // ... purging cache will generate metadata
+ return;
+ }
+ }
+
+ $this->depends['files'] = !empty($this->depends['files']) ? array_merge($files, $this->depends['files']) : $files;
+ parent::_addDependencies();
+ }
+}
+
+class cache_instructions extends cache_parser {
+
+ function cache_instructions($id, $file) {
+ parent::cache_parser($id, $file, 'i');
+ }
+
+ function retrieveCache($clean=true) {
+ $contents = io_readFile($this->cache, false);
+ return !empty($contents) ? unserialize($contents) : array();
+ }
+
+ function storeCache($instructions) {
+ return io_savefile($this->cache,serialize($instructions));
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/changelog.php b/mod/dokuwiki/vendors/dokuwiki/inc/changelog.php
new file mode 100644
index 000000000..bc2af2de3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/changelog.php
@@ -0,0 +1,474 @@
+<?php
+/**
+ * Changelog handling functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// Constants for known core changelog line types.
+// Use these in place of string literals for more readable code.
+define('DOKU_CHANGE_TYPE_CREATE', 'C');
+define('DOKU_CHANGE_TYPE_EDIT', 'E');
+define('DOKU_CHANGE_TYPE_MINOR_EDIT', 'e');
+define('DOKU_CHANGE_TYPE_DELETE', 'D');
+define('DOKU_CHANGE_TYPE_REVERT', 'R');
+
+/**
+ * parses a changelog line into it's components
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function parseChangelogLine($line) {
+ $tmp = explode("\t", $line);
+ if ($tmp!==false && count($tmp)>1) {
+ $info = array();
+ $info['date'] = (int)$tmp[0]; // unix timestamp
+ $info['ip'] = $tmp[1]; // IPv4 address (127.0.0.1)
+ $info['type'] = $tmp[2]; // log line type
+ $info['id'] = $tmp[3]; // page id
+ $info['user'] = $tmp[4]; // user name
+ $info['sum'] = $tmp[5]; // edit summary (or action reason)
+ $info['extra'] = rtrim($tmp[6], "\n"); // extra data (varies by line type)
+ return $info;
+ } else { return false; }
+}
+
+/**
+ * Add's an entry to the changelog and saves the metadata for the page
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extra='', $flags=null){
+ global $conf, $INFO;
+
+ // check for special flags as keys
+ if (!is_array($flags)) { $flags = array(); }
+ $flagExternalEdit = isset($flags['ExternalEdit']);
+
+ $id = cleanid($id);
+ $file = wikiFN($id);
+ $created = @filectime($file);
+ $minor = ($type===DOKU_CHANGE_TYPE_MINOR_EDIT);
+ $wasRemoved = ($type===DOKU_CHANGE_TYPE_DELETE);
+
+ if(!$date) $date = time(); //use current time if none supplied
+ $remote = (!$flagExternalEdit)?clientIP(true):'127.0.0.1';
+ $user = (!$flagExternalEdit)?$_SERVER['REMOTE_USER']:'';
+
+ $strip = array("\t", "\n");
+ $logline = array(
+ 'date' => $date,
+ 'ip' => $remote,
+ 'type' => str_replace($strip, '', $type),
+ 'id' => $id,
+ 'user' => $user,
+ 'sum' => str_replace($strip, '', $summary),
+ 'extra' => str_replace($strip, '', $extra)
+ );
+
+ // update metadata
+ if (!$wasRemoved) {
+ $oldmeta = p_read_metadata($id);
+ $meta = array();
+ if (!$INFO['exists'] && empty($oldmeta['persistent']['date']['created'])){ // newly created
+ $meta['date']['created'] = $created;
+ if ($user) $meta['creator'] = $INFO['userinfo']['name'];
+ } elseif (!$INFO['exists'] && !empty($oldmeta['persistent']['date']['created'])) { // re-created / restored
+ $meta['date']['created'] = $oldmeta['persistent']['date']['created'];
+ $meta['date']['modified'] = $created; // use the files ctime here
+ $meta['creator'] = $oldmeta['persistent']['creator'];
+ if ($user) $meta['contributor'][$user] = $INFO['userinfo']['name'];
+ } elseif (!$minor) { // non-minor modification
+ $meta['date']['modified'] = $date;
+ if ($user) $meta['contributor'][$user] = $INFO['userinfo']['name'];
+ }
+ $meta['last_change'] = $logline;
+ p_set_metadata($id, $meta, true);
+ }
+
+ // add changelog lines
+ $logline = implode("\t", $logline)."\n";
+ io_saveFile(metaFN($id,'.changes'),$logline,true); //page changelog
+ io_saveFile($conf['changelog'],$logline,true); //global changelog cache
+}
+
+/**
+ * Add's an entry to the media changelog
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Esther Brunner <wikidesign@gmail.com>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function addMediaLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extra='', $flags=null){
+ global $conf, $INFO;
+
+ $id = cleanid($id);
+
+ if(!$date) $date = time(); //use current time if none supplied
+ $remote = clientIP(true);
+ $user = $_SERVER['REMOTE_USER'];
+
+ $strip = array("\t", "\n");
+ $logline = array(
+ 'date' => $date,
+ 'ip' => $remote,
+ 'type' => str_replace($strip, '', $type),
+ 'id' => $id,
+ 'user' => $user,
+ 'sum' => str_replace($strip, '', $summary),
+ 'extra' => str_replace($strip, '', $extra)
+ );
+
+ // add changelog lines
+ $logline = implode("\t", $logline)."\n";
+ io_saveFile($conf['media_changelog'],$logline,true); //global media changelog cache
+}
+
+/**
+ * returns an array of recently changed files using the
+ * changelog
+ *
+ * The following constants can be used to control which changes are
+ * included. Add them together as needed.
+ *
+ * RECENTS_SKIP_DELETED - don't include deleted pages
+ * RECENTS_SKIP_MINORS - don't include minor changes
+ * RECENTS_SKIP_SUBSPACES - don't include subspaces
+ * RECENTS_MEDIA_CHANGES - return media changes instead of page changes
+ *
+ * @param int $first number of first entry returned (for paginating
+ * @param int $num return $num entries
+ * @param string $ns restrict to given namespace
+ * @param bool $flags see above
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function getRecents($first,$num,$ns='',$flags=0){
+ global $conf;
+ $recent = array();
+ $count = 0;
+
+ if(!$num)
+ return $recent;
+
+ // read all recent changes. (kept short)
+ if ($flags & RECENTS_MEDIA_CHANGES) {
+ $lines = @file($conf['media_changelog']);
+ } else {
+ $lines = @file($conf['changelog']);
+ }
+
+
+ // handle lines
+ $seen = array(); // caches seen lines, _handleRecent() skips them
+ for($i = count($lines)-1; $i >= 0; $i--){
+ $rec = _handleRecent($lines[$i], $ns, $flags, $seen);
+ if($rec !== false) {
+ if(--$first >= 0) continue; // skip first entries
+ $recent[] = $rec;
+ $count++;
+ // break when we have enough entries
+ if($count >= $num){ break; }
+ }
+ }
+
+ return $recent;
+}
+
+/**
+ * returns an array of files changed since a given time using the
+ * changelog
+ *
+ * The following constants can be used to control which changes are
+ * included. Add them together as needed.
+ *
+ * RECENTS_SKIP_DELETED - don't include deleted pages
+ * RECENTS_SKIP_MINORS - don't include minor changes
+ * RECENTS_SKIP_SUBSPACES - don't include subspaces
+ * RECENTS_MEDIA_CHANGES - return media changes instead of page changes
+ *
+ * @param int $from date of the oldest entry to return
+ * @param int $to date of the newest entry to return (for pagination, optional)
+ * @param string $ns restrict to given namespace (optional)
+ * @param bool $flags see above (optional)
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function getRecentsSince($from,$to=null,$ns='',$flags=0){
+ global $conf;
+ $recent = array();
+
+ if($to && $to < $from)
+ return $recent;
+
+ // read all recent changes. (kept short)
+ if ($flags & RECENTS_MEDIA_CHANGES) {
+ $lines = @file($conf['media_changelog']);
+ } else {
+ $lines = @file($conf['changelog']);
+ }
+
+ // we start searching at the end of the list
+ $lines = array_reverse($lines);
+
+ // handle lines
+ $seen = array(); // caches seen lines, _handleRecent() skips them
+
+ foreach($lines as $line){
+ $rec = _handleRecent($line, $ns, $flags, $seen);
+ if($rec !== false) {
+ if ($rec['date'] >= $from) {
+ if (!$to || $rec['date'] <= $to) {
+ $recent[] = $rec;
+ }
+ } else {
+ break;
+ }
+ }
+ }
+
+ return array_reverse($recent);
+}
+
+/**
+ * Internal function used by getRecents
+ *
+ * don't call directly
+ *
+ * @see getRecents()
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function _handleRecent($line,$ns,$flags,&$seen){
+ if(empty($line)) return false; //skip empty lines
+
+ // split the line into parts
+ $recent = parseChangelogLine($line);
+ if ($recent===false) { return false; }
+
+ // skip seen ones
+ if(isset($seen[$recent['id']])) return false;
+
+ // skip minors
+ if($recent['type']===DOKU_CHANGE_TYPE_MINOR_EDIT && ($flags & RECENTS_SKIP_MINORS)) return false;
+
+ // remember in seen to skip additional sights
+ $seen[$recent['id']] = 1;
+
+ // check if it's a hidden page
+ if(isHiddenPage($recent['id'])) return false;
+
+ // filter namespace
+ if (($ns) && (strpos($recent['id'],$ns.':') !== 0)) return false;
+
+ // exclude subnamespaces
+ if (($flags & RECENTS_SKIP_SUBSPACES) && (getNS($recent['id']) != $ns)) return false;
+
+ // check ACL
+ $recent['perms'] = auth_quickaclcheck($recent['id']);
+ if ($recent['perms'] < AUTH_READ) return false;
+
+ // check existance
+ $fn = (($flags & RECENTS_MEDIA_CHANGES) ? mediaFN($recent['id']) : wikiFN($recent['id']));
+ if((!@file_exists($fn)) && ($flags & RECENTS_SKIP_DELETED)) return false;
+
+ return $recent;
+}
+
+/**
+ * Get the changelog information for a specific page id
+ * and revision (timestamp). Adjacent changelog lines
+ * are optimistically parsed and cached to speed up
+ * consecutive calls to getRevisionInfo. For large
+ * changelog files, only the chunk containing the
+ * requested changelog line is read.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function getRevisionInfo($id, $rev, $chunk_size=8192) {
+ global $cache_revinfo;
+ $cache =& $cache_revinfo;
+ if (!isset($cache[$id])) { $cache[$id] = array(); }
+ $rev = max($rev, 0);
+
+ // check if it's already in the memory cache
+ if (isset($cache[$id]) && isset($cache[$id][$rev])) {
+ return $cache[$id][$rev];
+ }
+
+ $file = metaFN($id, '.changes');
+ if (!@file_exists($file)) { return false; }
+ if (filesize($file)<$chunk_size || $chunk_size==0) {
+ // read whole file
+ $lines = file($file);
+ if ($lines===false) { return false; }
+ } else {
+ // read by chunk
+ $fp = fopen($file, 'rb'); // "file pointer"
+ if ($fp===false) { return false; }
+ $head = 0;
+ fseek($fp, 0, SEEK_END);
+ $tail = ftell($fp);
+ $finger = 0;
+ $finger_rev = 0;
+
+ // find chunk
+ while ($tail-$head>$chunk_size) {
+ $finger = $head+floor(($tail-$head)/2.0);
+ fseek($fp, $finger);
+ fgets($fp); // slip the finger forward to a new line
+ $finger = ftell($fp);
+ $tmp = fgets($fp); // then read at that location
+ $tmp = parseChangelogLine($tmp);
+ $finger_rev = $tmp['date'];
+ if ($finger==$head || $finger==$tail) { break; }
+ if ($finger_rev>$rev) {
+ $tail = $finger;
+ } else {
+ $head = $finger;
+ }
+ }
+
+ if ($tail-$head<1) {
+ // cound not find chunk, assume requested rev is missing
+ fclose($fp);
+ return false;
+ }
+
+ // read chunk
+ $chunk = '';
+ $chunk_size = max($tail-$head, 0); // found chunk size
+ $got = 0;
+ fseek($fp, $head);
+ while ($got<$chunk_size && !feof($fp)) {
+ $tmp = @fread($fp, max($chunk_size-$got, 0));
+ if ($tmp===false) { break; } //error state
+ $got += strlen($tmp);
+ $chunk .= $tmp;
+ }
+ $lines = explode("\n", $chunk);
+ array_pop($lines); // remove trailing newline
+ fclose($fp);
+ }
+
+ // parse and cache changelog lines
+ foreach ($lines as $value) {
+ $tmp = parseChangelogLine($value);
+ if ($tmp!==false) {
+ $cache[$id][$tmp['date']] = $tmp;
+ }
+ }
+ if (!isset($cache[$id][$rev])) { return false; }
+ return $cache[$id][$rev];
+}
+
+/**
+ * Return a list of page revisions numbers
+ * Does not guarantee that the revision exists in the attic,
+ * only that a line with the date exists in the changelog.
+ * By default the current revision is skipped.
+ *
+ * id: the page of interest
+ * first: skip the first n changelog lines
+ * num: number of revisions to return
+ *
+ * The current revision is automatically skipped when the page exists.
+ * See $INFO['meta']['last_change'] for the current revision.
+ *
+ * For efficiency, the log lines are parsed and cached for later
+ * calls to getRevisionInfo. Large changelog files are read
+ * backwards in chunks until the requested number of changelog
+ * lines are recieved.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function getRevisions($id, $first, $num, $chunk_size=8192) {
+ global $cache_revinfo;
+ $cache =& $cache_revinfo;
+ if (!isset($cache[$id])) { $cache[$id] = array(); }
+
+ $revs = array();
+ $lines = array();
+ $count = 0;
+ $file = metaFN($id, '.changes');
+ $num = max($num, 0);
+ $chunk_size = max($chunk_size, 0);
+ if ($first<0) { $first = 0; }
+ else if (@file_exists(wikiFN($id))) {
+ // skip current revision if the page exists
+ $first = max($first+1, 0);
+ }
+
+ if (!@file_exists($file)) { return $revs; }
+ if (filesize($file)<$chunk_size || $chunk_size==0) {
+ // read whole file
+ $lines = file($file);
+ if ($lines===false) { return $revs; }
+ } else {
+ // read chunks backwards
+ $fp = fopen($file, 'rb'); // "file pointer"
+ if ($fp===false) { return $revs; }
+ fseek($fp, 0, SEEK_END);
+ $tail = ftell($fp);
+
+ // chunk backwards
+ $finger = max($tail-$chunk_size, 0);
+ while ($count<$num+$first) {
+ fseek($fp, $finger);
+ if ($finger>0) {
+ fgets($fp); // slip the finger forward to a new line
+ $finger = ftell($fp);
+ }
+
+ // read chunk
+ if ($tail<=$finger) { break; }
+ $chunk = '';
+ $read_size = max($tail-$finger, 0); // found chunk size
+ $got = 0;
+ while ($got<$read_size && !feof($fp)) {
+ $tmp = @fread($fp, max($read_size-$got, 0));
+ if ($tmp===false) { break; } //error state
+ $got += strlen($tmp);
+ $chunk .= $tmp;
+ }
+ $tmp = explode("\n", $chunk);
+ array_pop($tmp); // remove trailing newline
+
+ // combine with previous chunk
+ $count += count($tmp);
+ $lines = array_merge($tmp, $lines);
+
+ // next chunk
+ if ($finger==0) { break; } // already read all the lines
+ else {
+ $tail = $finger;
+ $finger = max($tail-$chunk_size, 0);
+ }
+ }
+ fclose($fp);
+ }
+
+ // skip parsing extra lines
+ $num = max(min(count($lines)-$first, $num), 0);
+ if ($first>0 && $num>0) { $lines = array_slice($lines, max(count($lines)-$first-$num, 0), $num); }
+ else if ($first>0 && $num==0) { $lines = array_slice($lines, 0, max(count($lines)-$first, 0)); }
+ else if ($first==0 && $num>0) { $lines = array_slice($lines, max(count($lines)-$num, 0)); }
+
+ // handle lines in reverse order
+ for ($i = count($lines)-1; $i >= 0; $i--) {
+ $tmp = parseChangelogLine($lines[$i]);
+ if ($tmp!==false) {
+ $cache[$id][$tmp['date']] = $tmp;
+ $revs[] = $tmp['date'];
+ }
+ }
+
+ return $revs;
+}
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php b/mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php
new file mode 100644
index 000000000..a3698ab24
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php
@@ -0,0 +1,361 @@
+<?php
+/**
+* Brutally chopped and modified from http://pear.php.net/package/Console_Getopts
+*/
+// +----------------------------------------------------------------------+
+// | PHP Version 4 |
+// +----------------------------------------------------------------------+
+// | Copyright (c) 1997-2003 The PHP Group |
+// +----------------------------------------------------------------------+
+// | This source file is subject to version 3.0 of the PHP license, |
+// | that is bundled with this package in the file LICENSE, and is |
+// | available through the world-wide-web at the following url: |
+// | http://www.php.net/license/3_0.txt. |
+// | If you did not receive a copy of the PHP license and are unable to |
+// | obtain it through the world-wide-web, please send a note to |
+// | license@php.net so we can mail you a copy immediately. |
+// +----------------------------------------------------------------------+
+// | Author: Andrei Zmievski <andrei@php.net> |
+// | Modified: Harry Fuecks hfuecks gmail.com |
+// +----------------------------------------------------------------------+
+//
+
+
+//------------------------------------------------------------------------------
+/**
+* Sets up CLI environment based on SAPI and PHP version
+* Helps resolve some issues between the CGI and CLI SAPIs
+* as well is inconsistencies between PHP 4.3+ and older versions
+*/
+if (version_compare(phpversion(), '4.3.0', '<') || php_sapi_name() == 'cgi') {
+ // Handle output buffering
+ @ob_end_flush();
+ ob_implicit_flush(true);
+
+ // PHP ini settings
+ set_time_limit(0);
+ ini_set('track_errors', true);
+ ini_set('html_errors', false);
+ ini_set('magic_quotes_runtime', false);
+
+ // Define stream constants
+ define('STDIN', fopen('php://stdin', 'r'));
+ define('STDOUT', fopen('php://stdout', 'w'));
+ define('STDERR', fopen('php://stderr', 'w'));
+
+ // Close the streams on script termination
+ register_shutdown_function(
+ create_function('',
+ 'fclose(STDIN); fclose(STDOUT); fclose(STDERR); return true;')
+ );
+}
+
+//------------------------------------------------------------------------------
+/**
+* Error codes
+*/
+define('DOKU_CLI_OPTS_UNKNOWN_OPT',1); //Unrecognized option
+define('DOKU_CLI_OPTS_OPT_ARG_REQUIRED',2); //Option requires argument
+define('DOKU_CLI_OPTS_OPT_ARG_DENIED',3); //Option not allowed argument
+define('DOKU_CLI_OPTS_OPT_ABIGUOUS',4);//Option abiguous
+define('DOKU_CLI_OPTS_ARG_READ',5);//Could not read argv
+
+//------------------------------------------------------------------------------
+/**
+ * Command-line options parsing class.
+ *
+ * @author Andrei Zmievski <andrei@php.net>
+ *
+ */
+ class Doku_Cli_Opts {
+
+ /**
+ * <?php ?>
+ * @see http://www.sitepoint.com/article/php-command-line-1/3
+ * @param string executing file name - this MUST be passed the __FILE__ constant
+ * @param string short options
+ * @param array (optional) long options
+ * @return Doku_Cli_Opts_Container or Doku_Cli_Opts_Error
+ */
+ function & getOptions($bin_file, $short_options, $long_options = null) {
+ $args = Doku_Cli_Opts::readPHPArgv();
+
+ if ( Doku_Cli_Opts::isError($args) ) {
+ return $args;
+ }
+
+ // Compatibility between "php extensions.php" and "./extensions.php"
+ if ( realpath($_SERVER['argv'][0]) == $bin_file ) {
+ $options = Doku_Cli_Opts::getOpt($args,$short_options,$long_options);
+ } else {
+ $options = Doku_Cli_Opts::getOpt2($args,$short_options,$long_options);
+ }
+
+ if ( Doku_Cli_Opts::isError($options) ) {
+ return $options;
+ }
+
+ $container = new Doku_Cli_Opts_Container($options);
+ return $container;
+ }
+
+ function getopt2($args, $short_options, $long_options = null) {
+ return Doku_Cli_Opts::doGetopt(
+ 2, $args, $short_options, $long_options
+ );
+ }
+
+ function getopt($args, $short_options, $long_options = null) {
+ return Doku_Cli_Opts::doGetopt(
+ 1, $args, $short_options, $long_options
+ );
+ }
+
+ function doGetopt($version, $args, $short_options, $long_options = null) {
+
+ // in case you pass directly readPHPArgv() as the first arg
+ if (Doku_Cli_Opts::isError($args)) {
+ return $args;
+ }
+ if (empty($args)) {
+ return array(array(), array());
+ }
+ $opts = array();
+ $non_opts = array();
+
+ settype($args, 'array');
+
+ if ($long_options && is_array($long_options)) {
+ sort($long_options);
+ }
+
+ /*
+ * Preserve backwards compatibility with callers that relied on
+ * erroneous POSIX fix.
+ */
+ if ($version < 2) {
+ if (isset($args[0]{0}) && $args[0]{0} != '-') {
+ array_shift($args);
+ }
+ }
+
+ reset($args);
+ while (list($i, $arg) = each($args)) {
+
+ /* The special element '--' means explicit end of
+ options. Treat the rest of the arguments as non-options
+ and end the loop. */
+ if ($arg == '--') {
+ $non_opts = array_merge($non_opts, array_slice($args, $i + 1));
+ break;
+ }
+
+ if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) {
+ $non_opts = array_merge($non_opts, array_slice($args, $i));
+ break;
+ } elseif (strlen($arg) > 1 && $arg{1} == '-') {
+ $error = Doku_Cli_Opts::_parseLongOption(substr($arg, 2), $long_options, $opts, $args);
+ if (Doku_Cli_Opts::isError($error))
+ return $error;
+ } else {
+ $error = Doku_Cli_Opts::_parseShortOption(substr($arg, 1), $short_options, $opts, $args);
+ if (Doku_Cli_Opts::isError($error))
+ return $error;
+ }
+ }
+
+ return array($opts, $non_opts);
+ }
+
+ function _parseShortOption($arg, $short_options, &$opts, &$args) {
+ for ($i = 0; $i < strlen($arg); $i++) {
+ $opt = $arg{$i};
+ $opt_arg = null;
+
+ /* Try to find the short option in the specifier string. */
+ if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':')
+ {
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_UNKNOWN_OPT,
+ "Unrecognized option -- $opt"
+ );
+ }
+
+ if (strlen($spec) > 1 && $spec{1} == ':') {
+ if (strlen($spec) > 2 && $spec{2} == ':') {
+ if ($i + 1 < strlen($arg)) {
+ /* Option takes an optional argument. Use the remainder of
+ the arg string if there is anything left. */
+ $opts[] = array($opt, substr($arg, $i + 1));
+ break;
+ }
+ } else {
+ /* Option requires an argument. Use the remainder of the arg
+ string if there is anything left. */
+ if ($i + 1 < strlen($arg)) {
+ $opts[] = array($opt, substr($arg, $i + 1));
+ break;
+ } else if (list(, $opt_arg) = each($args))
+ /* Else use the next argument. */;
+ else
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_OPT_ARG_REQUIRED,
+ "Option requires an argument -- $opt"
+ );
+ }
+ }
+
+ $opts[] = array($opt, $opt_arg);
+ }
+ }
+
+ function _parseLongOption($arg, $long_options, &$opts, &$args) {
+ @list($opt, $opt_arg) = explode('=', $arg);
+ $opt_len = strlen($opt);
+
+ for ($i = 0; $i < count($long_options); $i++) {
+ $long_opt = $long_options[$i];
+ $opt_start = substr($long_opt, 0, $opt_len);
+
+ /* Option doesn't match. Go on to the next one. */
+ if ($opt_start != $opt)
+ continue;
+
+ $opt_rest = substr($long_opt, $opt_len);
+
+ /* Check that the options uniquely matches one of the allowed
+ options. */
+ if ($opt_rest != '' && $opt{0} != '=' &&
+ $i + 1 < count($long_options) &&
+ $opt == substr($long_options[$i+1], 0, $opt_len)) {
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_OPT_ABIGUOUS,
+ "Option --$opt is ambiguous"
+ );
+ }
+
+ if (substr($long_opt, -1) == '=') {
+ if (substr($long_opt, -2) != '==') {
+ /* Long option requires an argument.
+ Take the next argument if one wasn't specified. */;
+ if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) {
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_OPT_ARG_REQUIRED,
+ "Option --$opt requires an argument"
+ );
+ }
+ }
+ } else if ($opt_arg) {
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_OPT_ARG_DENIED,
+ "Option --$opt doesn't allow an argument"
+ );
+ }
+
+ $opts[] = array('--' . $opt, $opt_arg);
+ return;
+ }
+
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_UNKNOWN_OPT,
+ "Unrecognized option --$opt"
+ );
+ }
+
+ function readPHPArgv() {
+ global $argv;
+ if (!is_array($argv)) {
+ if (!@is_array($_SERVER['argv'])) {
+ if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])) {
+ return Doku_Cli_Opts::raiseError(
+ DOKU_CLI_OPTS_ARG_READ,
+ "Could not read cmd args (register_argc_argv=Off?)"
+ );
+ }
+ return $GLOBALS['HTTP_SERVER_VARS']['argv'];
+ }
+ return $_SERVER['argv'];
+ }
+ return $argv;
+ }
+
+ function raiseError($code, $msg) {
+ return new Doku_Cli_Opts_Error($code, $msg);
+ }
+
+ function isError($obj) {
+ return is_a($obj, 'Doku_Cli_Opts_Error');
+ }
+
+}
+
+//------------------------------------------------------------------------------
+class Doku_Cli_Opts_Error {
+
+ var $code;
+ var $msg;
+
+ function Doku_Cli_Opts_Error($code, $msg) {
+ $this->code = $code;
+ $this->msg = $msg;
+ }
+
+ function getMessage() {
+ return $this->msg;
+ }
+
+ function isError() {
+ return true;
+ }
+
+}
+
+//------------------------------------------------------------------------------
+class Doku_Cli_Opts_Container {
+
+ var $options = array();
+ var $args = array();
+
+ function Doku_Cli_Opts_Container($options) {
+ foreach ( $options[0] as $option ) {
+ if ( false !== ( strpos($option[0], '--') ) ) {
+ $opt_name = substr($option[0], 2);
+ } else {
+ $opt_name = $option[0];
+ }
+ $this->options[$opt_name] = $option[1];
+ }
+
+
+ $this->args = $options[1];
+ }
+
+ function has($option) {
+ return array_key_exists($option, $this->options);
+ }
+
+ function get($option) {
+ if ( isset($this->options[$option]) ) {
+ return ( $this->options[$option] ) ;
+ }
+ }
+
+ function arg($index) {
+ if ( isset($this->args[$index]) ) {
+ return $this->args[$index];
+ }
+ }
+
+ function numArgs() {
+ return count($this->args);
+ }
+
+ function hasArgs() {
+ return count($this->args) !== 0;
+ }
+
+ function isError() {
+ return false;
+ }
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/common.php b/mod/dokuwiki/vendors/dokuwiki/inc/common.php
new file mode 100644
index 000000000..610bd8de6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/common.php
@@ -0,0 +1,1549 @@
+<?php
+/**
+ * Common DokuWiki functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/changelog.php');
+require_once(DOKU_INC.'inc/utf8.php');
+require_once(DOKU_INC.'inc/mail.php');
+require_once(DOKU_INC.'inc/parserutils.php');
+require_once(DOKU_INC.'inc/infoutils.php');
+
+/**
+ * These constants are used with the recents function
+ */
+define('RECENTS_SKIP_DELETED',2);
+define('RECENTS_SKIP_MINORS',4);
+define('RECENTS_SKIP_SUBSPACES',8);
+define('RECENTS_MEDIA_CHANGES',16);
+
+/**
+ * Wrapper around htmlspecialchars()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see htmlspecialchars()
+ */
+function hsc($string){
+ return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
+}
+
+/**
+ * print a newline terminated string
+ *
+ * You can give an indention as optional parameter
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ptln($string,$indent=0){
+ echo str_repeat(' ', $indent)."$string\n";
+}
+
+/**
+ * strips control characters (<32) from the given string
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function stripctl($string){
+ return preg_replace('/[\x00-\x1F]+/s','',$string);
+}
+
+/**
+ * Return a secret token to be used for CSRF attack prevention
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://en.wikipedia.org/wiki/Cross-site_request_forgery
+ * @link http://christ1an.blogspot.com/2007/04/preventing-csrf-efficiently.html
+ * @return string
+ */
+function getSecurityToken(){
+ return md5(auth_cookiesalt().session_id());
+}
+
+/**
+ * Check the secret CSRF token
+ */
+function checkSecurityToken($token=null){
+ if(!$_SERVER['REMOTE_USER']) return true; // no logged in user, no need for a check
+
+ if(is_null($token)) $token = $_REQUEST['sectok'];
+ if(getSecurityToken() != $token){
+ msg('Security Token did not match. Possible CSRF attack.',-1);
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Print a hidden form field with a secret CSRF token
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function formSecurityToken($print=true){
+ $ret = '<div class="no"><input type="hidden" name="sectok" value="'.getSecurityToken().'" /></div>'."\n";
+ if($print){
+ echo $ret;
+ }else{
+ return $ret;
+ }
+}
+
+/**
+ * Return info about the current document as associative
+ * array.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pageinfo(){
+ global $ID;
+ global $REV;
+ global $RANGE;
+ global $USERINFO;
+ global $conf;
+ global $lang;
+
+ // include ID & REV not redundant, as some parts of DokuWiki may temporarily change $ID, e.g. p_wiki_xhtml
+ // FIXME ... perhaps it would be better to ensure the temporary changes weren't necessary
+ $info['id'] = $ID;
+ $info['rev'] = $REV;
+
+ // set info about manager/admin status.
+ $info['isadmin'] = false;
+ $info['ismanager'] = false;
+ if(isset($_SERVER['REMOTE_USER'])){
+ $info['userinfo'] = $USERINFO;
+ $info['perm'] = auth_quickaclcheck($ID);
+ $info['subscribed'] = is_subscribed($ID,$_SERVER['REMOTE_USER'],false);
+ $info['subscribedns'] = is_subscribed($ID,$_SERVER['REMOTE_USER'],true);
+ $info['client'] = $_SERVER['REMOTE_USER'];
+
+ if($info['perm'] == AUTH_ADMIN){
+ $info['isadmin'] = true;
+ $info['ismanager'] = true;
+ }elseif(auth_ismanager()){
+ $info['ismanager'] = true;
+ }
+
+ // if some outside auth were used only REMOTE_USER is set
+ if(!$info['userinfo']['name']){
+ $info['userinfo']['name'] = $_SERVER['REMOTE_USER'];
+ }
+
+ }else{
+ $info['perm'] = auth_aclcheck($ID,'',null);
+ $info['subscribed'] = false;
+ $info['client'] = clientIP(true);
+ }
+
+ //error_log("dokuwiki actpageinfo!!".$info['perm']);
+ $info['namespace'] = getNS($ID);
+ $info['locked'] = checklock($ID);
+ $info['filepath'] = fullpath(wikiFN($ID));
+ $info['exists'] = @file_exists($info['filepath']);
+ if($REV){
+ //check if current revision was meant
+ if($info['exists'] && (@filemtime($info['filepath'])==$REV)){
+ $REV = '';
+ }elseif($RANGE){
+ //section editing does not work with old revisions!
+ $REV = '';
+ $RANGE = '';
+ msg($lang['nosecedit'],0);
+ }else{
+ //really use old revision
+ $info['filepath'] = fullpath(wikiFN($ID,$REV));
+ $info['exists'] = @file_exists($info['filepath']);
+ }
+ }
+ $info['rev'] = $REV;
+ if($info['exists']){
+ $info['writable'] = (is_writable($info['filepath']) &&
+ ($info['perm'] >= AUTH_EDIT));
+ }else{
+ $info['writable'] = ($info['perm'] >= AUTH_CREATE);
+ }
+ $info['editable'] = ($info['writable'] && empty($info['lock']));
+ $info['lastmod'] = @filemtime($info['filepath']);
+
+ //load page meta data
+ $info['meta'] = p_get_metadata($ID);
+
+ //who's the editor
+ if($REV){
+ $revinfo = getRevisionInfo($ID, $REV, 1024);
+ }else{
+ if (is_array($info['meta']['last_change'])) {
+ $revinfo = $info['meta']['last_change'];
+ } else {
+ $revinfo = getRevisionInfo($ID, $info['lastmod'], 1024);
+ // cache most recent changelog line in metadata if missing and still valid
+ if ($revinfo!==false) {
+ $info['meta']['last_change'] = $revinfo;
+ p_set_metadata($ID, array('last_change' => $revinfo));
+ }
+ }
+ }
+ //and check for an external edit
+ if($revinfo!==false && $revinfo['date']!=$info['lastmod']){
+ // cached changelog line no longer valid
+ $revinfo = false;
+ $info['meta']['last_change'] = $revinfo;
+ p_set_metadata($ID, array('last_change' => $revinfo));
+ }
+
+ $info['ip'] = $revinfo['ip'];
+ $info['user'] = $revinfo['user'];
+ $info['sum'] = $revinfo['sum'];
+ // See also $INFO['meta']['last_change'] which is the most recent log line for page $ID.
+ // Use $INFO['meta']['last_change']['type']===DOKU_CHANGE_TYPE_MINOR_EDIT in place of $info['minor'].
+
+ if($revinfo['user']){
+ $info['editor'] = $revinfo['user'];
+ }else{
+ $info['editor'] = $revinfo['ip'];
+ }
+
+ // draft
+ $draft = getCacheName($info['client'].$ID,'.draft');
+ if(@file_exists($draft)){
+ if(@filemtime($draft) < @filemtime(wikiFN($ID))){
+ // remove stale draft
+ @unlink($draft);
+ }else{
+ $info['draft'] = $draft;
+ }
+ }
+
+ // mobile detection
+ $info['ismobile'] = clientismobile();
+
+ return $info;
+}
+
+/**
+ * Build an string of URL parameters
+ *
+ * @author Andreas Gohr
+ */
+function buildURLparams($params, $sep='&amp;'){
+ $url = '';
+ $amp = false;
+ foreach($params as $key => $val){
+ if($amp) $url .= $sep;
+
+ $url .= $key.'=';
+ $url .= rawurlencode((string)$val);
+ $amp = true;
+ }
+ return $url;
+}
+
+/**
+ * Build an string of html tag attributes
+ *
+ * Skips keys starting with '_', values get HTML encoded
+ *
+ * @author Andreas Gohr
+ */
+function buildAttributes($params,$skipempty=false){
+ $url = '';
+ foreach($params as $key => $val){
+ if($key{0} == '_') continue;
+ if($val === '' && $skipempty) continue;
+
+ $url .= $key.'="';
+ $url .= htmlspecialchars ($val);
+ $url .= '" ';
+ }
+ return $url;
+}
+
+
+/**
+ * This builds the breadcrumb trail and returns it as array
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function breadcrumbs(){
+ // we prepare the breadcrumbs early for quick session closing
+ static $crumbs = null;
+ if($crumbs != null) return $crumbs;
+
+ global $ID;
+ global $ACT;
+ global $conf;
+
+ //first visit?
+ $crumbs = isset($_SESSION[DOKU_COOKIE]['bc']) ? $_SESSION[DOKU_COOKIE]['bc'] : array();
+ //we only save on show and existing wiki documents
+ $file = wikiFN($ID);
+ if($ACT != 'show' || !@file_exists($file)){
+ $_SESSION[DOKU_COOKIE]['bc'] = $crumbs;
+ return $crumbs;
+ }
+
+ // page names
+ $name = noNSorNS($ID);
+ if (useHeading('navigation')) {
+ // get page title
+ $title = p_get_first_heading($ID,true);
+ if ($title) {
+ $name = $title;
+ }
+ }
+
+ //remove ID from array
+ if (isset($crumbs[$ID])) {
+ unset($crumbs[$ID]);
+ }
+
+ //add to array
+ $crumbs[$ID] = $name;
+ //reduce size
+ while(count($crumbs) > $conf['breadcrumbs']){
+ array_shift($crumbs);
+ }
+ //save to session
+ $_SESSION[DOKU_COOKIE]['bc'] = $crumbs;
+ return $crumbs;
+}
+
+/**
+ * Filter for page IDs
+ *
+ * This is run on a ID before it is outputted somewhere
+ * currently used to replace the colon with something else
+ * on Windows systems and to have proper URL encoding
+ *
+ * Urlencoding is ommitted when the second parameter is false
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idfilter($id,$ue=true){
+ global $conf;
+ if ($conf['useslash'] && $conf['userewrite']){
+ $id = strtr($id,':','/');
+ }elseif (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' &&
+ $conf['userewrite']) {
+ $id = strtr($id,':',';');
+ }
+ if($ue){
+ $id = rawurlencode($id);
+ $id = str_replace('%3A',':',$id); //keep as colon
+ $id = str_replace('%2F','/',$id); //keep as slash
+ }
+ return $id;
+}
+
+/**
+ * This builds a link to a wikipage
+ *
+ * It handles URL rewriting and adds additional parameter if
+ * given in $more
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function wl($id='',$more='',$abs=false,$sep='&amp;'){
+ global $conf;
+ if(is_array($more)){
+ $more = buildURLparams($more,$sep);
+ }else{
+ $more = str_replace(',',$sep,$more);
+ }
+
+ $id = idfilter($id);
+ if($abs){
+ $xlink = DOKU_URL;
+ }else{
+ $xlink = DOKU_BASE;
+ }
+
+ if($conf['userewrite'] == 2){
+ $xlink .= DOKU_SCRIPT.'/'.$id;
+ if($more) $xlink .= '?'.$more;
+ }elseif($conf['userewrite']){
+ $xlink .= $id;
+ if($more) $xlink .= '?'.$more;
+ }elseif($id){
+ $xlink .= DOKU_SCRIPT.'?id='.$id;
+ if($more) $xlink .= $sep.$more;
+ }else{
+ $xlink .= DOKU_SCRIPT;
+ if($more) $xlink .= '?'.$more;
+ }
+
+ return $xlink;
+}
+
+/**
+ * This builds a link to an alternate page format
+ *
+ * Handles URL rewriting if enabled. Follows the style of wl().
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function exportlink($id='',$format='raw',$more='',$abs=false,$sep='&amp;'){
+ global $conf;
+ if(is_array($more)){
+ $more = buildURLparams($more,$sep);
+ }else{
+ $more = str_replace(',',$sep,$more);
+ }
+
+ $format = rawurlencode($format);
+ $id = idfilter($id);
+ if($abs){
+ $xlink = DOKU_URL;
+ }else{
+ $xlink = DOKU_BASE;
+ }
+
+ if($conf['userewrite'] == 2){
+ $xlink .= DOKU_SCRIPT.'/'.$id.'?do=export_'.$format;
+ if($more) $xlink .= $sep.$more;
+ }elseif($conf['userewrite'] == 1){
+ $xlink .= '_export/'.$format.'/'.$id;
+ if($more) $xlink .= '?'.$more;
+ }else{
+ $xlink .= DOKU_SCRIPT.'?do=export_'.$format.$sep.'id='.$id;
+ if($more) $xlink .= $sep.$more;
+ }
+
+ return $xlink;
+}
+
+/**
+ * Build a link to a media file
+ *
+ * Will return a link to the detail page if $direct is false
+ *
+ * The $more parameter should always be given as array, the function then
+ * will strip default parameters to produce even cleaner URLs
+ *
+ * @param string $id - the media file id or URL
+ * @param mixed $more - string or array with additional parameters
+ * @param boolean $direct - link to detail page if false
+ * @param string $sep - URL parameter separator
+ * @param boolean $abs - Create an absolute URL
+ */
+function ml($id='',$more='',$direct=true,$sep='&amp;',$abs=false){
+ global $conf;
+ if(is_array($more)){
+ // strip defaults for shorter URLs
+ if(isset($more['cache']) && $more['cache'] == 'cache') unset($more['cache']);
+ if(!$more['w']) unset($more['w']);
+ if(!$more['h']) unset($more['h']);
+ if(isset($more['id']) && $direct) unset($more['id']);
+ $more = buildURLparams($more,$sep);
+ }else{
+ $more = str_replace('cache=cache','',$more); //skip default
+ $more = str_replace(',,',',',$more);
+ $more = str_replace(',',$sep,$more);
+ }
+
+ if($abs){
+ $xlink = DOKU_URL;
+ }else{
+ $xlink = DOKU_BASE;
+ }
+
+ // external URLs are always direct without rewriting
+ if(preg_match('#^(https?|ftp)://#i',$id)){
+ $xlink .= 'lib/exe/fetch.php';
+ // add hash:
+ $xlink .= '?hash='.substr(md5(auth_cookiesalt().$id),0,6);
+ if($more){
+ $xlink .= $sep.$more;
+ $xlink .= $sep.'media='.rawurlencode($id);
+ }else{
+ $xlink .= $sep.'media='.rawurlencode($id);
+ }
+ return $xlink;
+ }
+
+ $id = idfilter($id);
+
+ // decide on scriptname
+ if($direct){
+ if($conf['userewrite'] == 1){
+ $script = '_media';
+ }else{
+ $script = 'lib/exe/fetch.php';
+ }
+ }else{
+ if($conf['userewrite'] == 1){
+ $script = '_detail';
+ }else{
+ $script = 'lib/exe/detail.php';
+ }
+ }
+
+ // build URL based on rewrite mode
+ if($conf['userewrite']){
+ $xlink .= $script.'/'.$id;
+ if($more) $xlink .= '?'.$more;
+ }else{
+ if($more){
+ $xlink .= $script.'?'.$more;
+ $xlink .= $sep.'media='.$id;
+ }else{
+ $xlink .= $script.'?media='.$id;
+ }
+ }
+
+ return $xlink;
+}
+
+
+
+/**
+ * Just builds a link to a script
+ *
+ * @todo maybe obsolete
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function script($script='doku.php'){
+# $link = getBaseURL();
+# $link .= $script;
+# return $link;
+ return DOKU_BASE.DOKU_SCRIPT;
+}
+
+/**
+ * Spamcheck against wordlist
+ *
+ * Checks the wikitext against a list of blocked expressions
+ * returns true if the text contains any bad words
+ *
+ * Triggers COMMON_WORDBLOCK_BLOCKED
+ *
+ * Action Plugins can use this event to inspect the blocked data
+ * and gain information about the user who was blocked.
+ *
+ * Event data:
+ * data['matches'] - array of matches
+ * data['userinfo'] - information about the blocked user
+ * [ip] - ip address
+ * [user] - username (if logged in)
+ * [mail] - mail address (if logged in)
+ * [name] - real name (if logged in)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ * @param string $text - optional text to check, if not given the globals are used
+ * @return bool - true if a spam word was found
+ */
+function checkwordblock($text=''){
+ global $TEXT;
+ global $PRE;
+ global $SUF;
+ global $conf;
+ global $INFO;
+
+ if(!$conf['usewordblock']) return false;
+
+ if(!$text) $text = "$PRE $TEXT $SUF";
+
+ // we prepare the text a tiny bit to prevent spammers circumventing URL checks
+ $text = preg_replace('!(\b)(www\.[\w.:?\-;,]+?\.[\w.:?\-;,]+?[\w/\#~:.?+=&%@\!\-.:?\-;,]+?)([.:?\-;,]*[^\w/\#~:.?+=&%@\!\-.:?\-;,])!i','\1http://\2 \2\3',$text);
+
+ $wordblocks = getWordblocks();
+ //how many lines to read at once (to work around some PCRE limits)
+ if(version_compare(phpversion(),'4.3.0','<')){
+ //old versions of PCRE define a maximum of parenthesises even if no
+ //backreferences are used - the maximum is 99
+ //this is very bad performancewise and may even be too high still
+ $chunksize = 40;
+ }else{
+ //read file in chunks of 200 - this should work around the
+ //MAX_PATTERN_SIZE in modern PCRE
+ $chunksize = 200;
+ }
+ while($blocks = array_splice($wordblocks,0,$chunksize)){
+ $re = array();
+ #build regexp from blocks
+ foreach($blocks as $block){
+ $block = preg_replace('/#.*$/','',$block);
+ $block = trim($block);
+ if(empty($block)) continue;
+ $re[] = $block;
+ }
+ if(count($re) && preg_match('#('.join('|',$re).')#si',$text,$matches)) {
+ //prepare event data
+ $data['matches'] = $matches;
+ $data['userinfo']['ip'] = $_SERVER['REMOTE_ADDR'];
+ if($_SERVER['REMOTE_USER']) {
+ $data['userinfo']['user'] = $_SERVER['REMOTE_USER'];
+ $data['userinfo']['name'] = $INFO['userinfo']['name'];
+ $data['userinfo']['mail'] = $INFO['userinfo']['mail'];
+ }
+ $callback = create_function('', 'return true;');
+ return trigger_event('COMMON_WORDBLOCK_BLOCKED', $data, $callback, true);
+ }
+ }
+ return false;
+}
+
+/**
+ * Return the IP of the client
+ *
+ * Honours X-Forwarded-For and X-Real-IP Proxy Headers
+ *
+ * It returns a comma separated list of IPs if the above mentioned
+ * headers are set. If the single parameter is set, it tries to return
+ * a routable public address, prefering the ones suplied in the X
+ * headers
+ *
+ * @param boolean $single If set only a single IP is returned
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function clientIP($single=false){
+ $ip = array();
+ $ip[] = $_SERVER['REMOTE_ADDR'];
+ if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
+ $ip = array_merge($ip,explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']));
+ if(!empty($_SERVER['HTTP_X_REAL_IP']))
+ $ip = array_merge($ip,explode(',',$_SERVER['HTTP_X_REAL_IP']));
+
+ // some IPv4/v6 regexps borrowed from Feyd
+ // see: http://forums.devnetwork.net/viewtopic.php?f=38&t=53479
+ $dec_octet = '(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[0-9])';
+ $hex_digit = '[A-Fa-f0-9]';
+ $h16 = "{$hex_digit}{1,4}";
+ $IPv4Address = "$dec_octet\\.$dec_octet\\.$dec_octet\\.$dec_octet";
+ $ls32 = "(?:$h16:$h16|$IPv4Address)";
+ $IPv6Address =
+ "(?:(?:{$IPv4Address})|(?:".
+ "(?:$h16:){6}$ls32" .
+ "|::(?:$h16:){5}$ls32" .
+ "|(?:$h16)?::(?:$h16:){4}$ls32" .
+ "|(?:(?:$h16:){0,1}$h16)?::(?:$h16:){3}$ls32" .
+ "|(?:(?:$h16:){0,2}$h16)?::(?:$h16:){2}$ls32" .
+ "|(?:(?:$h16:){0,3}$h16)?::(?:$h16:){1}$ls32" .
+ "|(?:(?:$h16:){0,4}$h16)?::$ls32" .
+ "|(?:(?:$h16:){0,5}$h16)?::$h16" .
+ "|(?:(?:$h16:){0,6}$h16)?::" .
+ ")(?:\\/(?:12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))?)";
+
+ // remove any non-IP stuff
+ $cnt = count($ip);
+ $match = array();
+ for($i=0; $i<$cnt; $i++){
+ if(preg_match("/^$IPv4Address$/",$ip[$i],$match) || preg_match("/^$IPv6Address$/",$ip[$i],$match)) {
+ $ip[$i] = $match[0];
+ } else {
+ $ip[$i] = '';
+ }
+ if(empty($ip[$i])) unset($ip[$i]);
+ }
+ $ip = array_values(array_unique($ip));
+ if(!$ip[0]) $ip[0] = '0.0.0.0'; // for some strange reason we don't have a IP
+
+ if(!$single) return join(',',$ip);
+
+ // decide which IP to use, trying to avoid local addresses
+ $ip = array_reverse($ip);
+ foreach($ip as $i){
+ if(preg_match('/^(127\.|10\.|192\.168\.|172\.((1[6-9])|(2[0-9])|(3[0-1]))\.)/',$i)){
+ continue;
+ }else{
+ return $i;
+ }
+ }
+ // still here? just use the first (last) address
+ return $ip[0];
+}
+
+/**
+ * Check if the browser is on a mobile device
+ *
+ * Adapted from the example code at url below
+ *
+ * @link http://www.brainhandles.com/2007/10/15/detecting-mobile-browsers/#code
+ */
+function clientismobile(){
+
+ if(isset($_SERVER['HTTP_X_WAP_PROFILE'])) return true;
+
+ if(preg_match('/wap\.|\.wap/i',$_SERVER['HTTP_ACCEPT'])) return true;
+
+ if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;
+
+ $uamatches = 'midp|j2me|avantg|docomo|novarra|palmos|palmsource|240x320|opwv|chtml|pda|windows ce|mmp\/|blackberry|mib\/|symbian|wireless|nokia|hand|mobi|phone|cdm|up\.b|audio|SIE\-|SEC\-|samsung|HTC|mot\-|mitsu|sagem|sony|alcatel|lg|erics|vx|NEC|philips|mmm|xx|panasonic|sharp|wap|sch|rover|pocket|benq|java|pt|pg|vox|amoi|bird|compal|kg|voda|sany|kdd|dbt|sendo|sgh|gradi|jb|\d\d\di|moto';
+
+ if(preg_match("/$uamatches/i",$_SERVER['HTTP_USER_AGENT'])) return true;
+
+ return false;
+}
+
+
+/**
+ * Convert one or more comma separated IPs to hostnames
+ *
+ * @author Glen Harris <astfgl@iamnota.org>
+ * @returns a comma separated list of hostnames
+ */
+function gethostsbyaddrs($ips){
+ $hosts = array();
+ $ips = explode(',',$ips);
+
+ if(is_array($ips)) {
+ foreach($ips as $ip){
+ $hosts[] = gethostbyaddr(trim($ip));
+ }
+ return join(',',$hosts);
+ } else {
+ return gethostbyaddr(trim($ips));
+ }
+}
+
+/**
+ * Checks if a given page is currently locked.
+ *
+ * removes stale lockfiles
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function checklock($id){
+ global $conf;
+ $lock = wikiLockFN($id);
+
+ //no lockfile
+ if(!@file_exists($lock)) return false;
+
+ //lockfile expired
+ if((time() - filemtime($lock)) > $conf['locktime']){
+ @unlink($lock);
+ return false;
+ }
+
+ //my own lock
+ $ip = io_readFile($lock);
+ if( ($ip == clientIP()) || ($ip == $_SERVER['REMOTE_USER']) ){
+ return false;
+ }
+
+ return $ip;
+}
+
+/**
+ * Lock a page for editing
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function lock($id){
+ $lock = wikiLockFN($id);
+ if($_SERVER['REMOTE_USER']){
+ io_saveFile($lock,$_SERVER['REMOTE_USER']);
+ }else{
+ io_saveFile($lock,clientIP());
+ }
+}
+
+/**
+ * Unlock a page if it was locked by the user
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool true if a lock was removed
+ */
+function unlock($id){
+ $lock = wikiLockFN($id);
+ if(@file_exists($lock)){
+ $ip = io_readFile($lock);
+ if( ($ip == clientIP()) || ($ip == $_SERVER['REMOTE_USER']) ){
+ @unlink($lock);
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * convert line ending to unix format
+ *
+ * @see formText() for 2crlf conversion
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function cleanText($text){
+ $text = preg_replace("/(\015\012)|(\015)/","\012",$text);
+ return $text;
+}
+
+/**
+ * Prepares text for print in Webforms by encoding special chars.
+ * It also converts line endings to Windows format which is
+ * pseudo standard for webforms.
+ *
+ * @see cleanText() for 2unix conversion
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function formText($text){
+ $text = str_replace("\012","\015\012",$text);
+ return htmlspecialchars($text);
+}
+
+/**
+ * Returns the specified local text in raw format
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rawLocale($id){
+ return io_readFile(localeFN($id));
+}
+
+/**
+ * Returns the raw WikiText
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rawWiki($id,$rev=''){
+ return io_readWikiPage(wikiFN($id, $rev), $id, $rev);
+}
+
+/**
+ * Returns the pagetemplate contents for the ID's namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pageTemplate($data){
+ $id = $data[0];
+ global $conf;
+ global $INFO;
+
+ $path = dirname(wikiFN($id));
+
+ if(@file_exists($path.'/_template.txt')){
+ $tpl = io_readFile($path.'/_template.txt');
+ }else{
+ // search upper namespaces for templates
+ $len = strlen(rtrim($conf['datadir'],'/'));
+ while (strlen($path) >= $len){
+ if(@file_exists($path.'/__template.txt')){
+ $tpl = io_readFile($path.'/__template.txt');
+ break;
+ }
+ $path = substr($path, 0, strrpos($path, '/'));
+ }
+ }
+ if(!$tpl) return '';
+
+ // replace placeholders
+ $file = noNS($id);
+ $page = strtr($file,'_',' ');
+
+ $tpl = str_replace(array(
+ '@ID@',
+ '@NS@',
+ '@FILE@',
+ '@!FILE@',
+ '@!FILE!@',
+ '@PAGE@',
+ '@!PAGE@',
+ '@!!PAGE@',
+ '@!PAGE!@',
+ '@USER@',
+ '@NAME@',
+ '@MAIL@',
+ '@DATE@',
+ ),
+ array(
+ $id,
+ getNS($id),
+ $file,
+ utf8_ucfirst($file),
+ utf8_strtoupper($file),
+ $page,
+ utf8_ucfirst($page),
+ utf8_ucwords($page),
+ utf8_strtoupper($page),
+ $_SERVER['REMOTE_USER'],
+ $INFO['userinfo']['name'],
+ $INFO['userinfo']['mail'],
+ $conf['dformat'],
+ ), $tpl);
+
+ // we need the callback to work around strftime's char limit
+ $tpl = preg_replace_callback('/%./',create_function('$m','return strftime($m[0]);'),$tpl);
+
+ return $tpl;
+}
+
+
+/**
+ * Returns the raw Wiki Text in three slices.
+ *
+ * The range parameter needs to have the form "from-to"
+ * and gives the range of the section in bytes - no
+ * UTF-8 awareness is needed.
+ * The returned order is prefix, section and suffix.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function rawWikiSlices($range,$id,$rev=''){
+ list($from,$to) = explode('-',$range,2);
+ $text = io_readWikiPage(wikiFN($id, $rev), $id, $rev);
+ if(!$from) $from = 0;
+ if(!$to) $to = strlen($text)+1;
+
+ $slices[0] = substr($text,0,$from-1);
+ $slices[1] = substr($text,$from-1,$to-$from);
+ $slices[2] = substr($text,$to);
+
+ return $slices;
+}
+
+/**
+ * Joins wiki text slices
+ *
+ * function to join the text slices with correct lineendings again.
+ * When the pretty parameter is set to true it adds additional empty
+ * lines between sections if needed (used on saving).
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function con($pre,$text,$suf,$pretty=false){
+
+ if($pretty){
+ if($pre && substr($pre,-1) != "\n") $pre .= "\n";
+ if($suf && substr($text,-1) != "\n") $text .= "\n";
+ }
+
+ // Avoid double newline above section when saving section edit
+ //if($pre) $pre .= "\n";
+ if($suf) $text .= "\n";
+ return $pre.$text.$suf;
+}
+
+/**
+ * Saves a wikitext by calling io_writeWikiPage.
+ * Also directs changelog and attic updates.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function saveWikiText($id,$text,$summary,$minor=false){
+ /* Note to developers:
+ This code is subtle and delicate. Test the behavior of
+ the attic and changelog with dokuwiki and external edits
+ after any changes. External edits change the wiki page
+ directly without using php or dokuwiki.
+ */
+ global $conf;
+ global $lang;
+ global $REV;
+ // ignore if no changes were made
+ if($text == rawWiki($id,'')){
+ return;
+ }
+
+ $file = wikiFN($id);
+ $old = @filemtime($file); // from page
+ $wasRemoved = empty($text);
+ $wasCreated = !@file_exists($file);
+ $wasReverted = ($REV==true);
+ $newRev = false;
+ $oldRev = getRevisions($id, -1, 1, 1024); // from changelog
+ $oldRev = (int)(empty($oldRev)?0:$oldRev[0]);
+ if(!@file_exists(wikiFN($id, $old)) && @file_exists($file) && $old>=$oldRev) {
+ // add old revision to the attic if missing
+ saveOldRevision($id);
+ // add a changelog entry if this edit came from outside dokuwiki
+ if ($old>$oldRev) {
+ addLogEntry($old, $id, DOKU_CHANGE_TYPE_EDIT, $lang['external_edit'], '', array('ExternalEdit'=>true));
+ // remove soon to be stale instructions
+ $cache = new cache_instructions($id, $file);
+ $cache->removeCache();
+ }
+ }
+
+ if ($wasRemoved){
+ // Send "update" event with empty data, so plugins can react to page deletion
+ $data = array(array($file, '', false), getNS($id), noNS($id), false);
+ trigger_event('IO_WIKIPAGE_WRITE', $data);
+ // pre-save deleted revision
+ @touch($file);
+ clearstatcache();
+ $newRev = saveOldRevision($id);
+ // remove empty file
+ @unlink($file);
+ // remove old meta info...
+ $mfiles = metaFiles($id);
+ $changelog = metaFN($id, '.changes');
+ $metadata = metaFN($id, '.meta');
+ foreach ($mfiles as $mfile) {
+ // but keep per-page changelog to preserve page history and keep meta data
+ if (@file_exists($mfile) && $mfile!==$changelog && $mfile!==$metadata) { @unlink($mfile); }
+ }
+ // purge meta data
+ p_purge_metadata($id);
+ $del = true;
+ // autoset summary on deletion
+ if(empty($summary)) $summary = $lang['deleted'];
+ // remove empty namespaces
+ io_sweepNS($id, 'datadir');
+ io_sweepNS($id, 'mediadir');
+ }else{
+ // save file (namespace dir is created in io_writeWikiPage)
+ io_writeWikiPage($file, $text, $id);
+ // pre-save the revision, to keep the attic in sync
+ $newRev = saveOldRevision($id);
+ $del = false;
+ }
+
+ // select changelog line type
+ $extra = '';
+ $type = DOKU_CHANGE_TYPE_EDIT;
+ if ($wasReverted) {
+ $type = DOKU_CHANGE_TYPE_REVERT;
+ $extra = $REV;
+ }
+ else if ($wasCreated) { $type = DOKU_CHANGE_TYPE_CREATE; }
+ else if ($wasRemoved) { $type = DOKU_CHANGE_TYPE_DELETE; }
+ else if ($minor && $conf['useacl'] && $_SERVER['REMOTE_USER']) { $type = DOKU_CHANGE_TYPE_MINOR_EDIT; } //minor edits only for logged in users
+
+ addLogEntry($newRev, $id, $type, $summary, $extra);
+ // send notify mails
+ notify($id,'admin',$old,$summary,$minor);
+ notify($id,'subscribers',$old,$summary,$minor);
+
+ // update the purgefile (timestamp of the last time anything within the wiki was changed)
+ io_saveFile($conf['cachedir'].'/purgefile',time());
+
+ // if useheading is enabled, purge the cache of all linking pages
+ if(useHeading('content')){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ $pages = ft_backlinks($id);
+ foreach ($pages as $page) {
+ $cache = new cache_renderer($page, wikiFN($page), 'xhtml');
+ $cache->removeCache();
+ }
+ }
+}
+
+/**
+ * moves the current version to the attic and returns its
+ * revision date
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function saveOldRevision($id){
+ global $conf;
+ $oldf = wikiFN($id);
+ if(!@file_exists($oldf)) return '';
+ $date = filemtime($oldf);
+ $newf = wikiFN($id,$date);
+ io_writeWikiPage($newf, rawWiki($id), $id, $date);
+ return $date;
+}
+
+/**
+ * Sends a notify mail on page change or registration
+ *
+ * @param string $id The changed page
+ * @param string $who Who to notify (admin|subscribers|register)
+ * @param int $rev Old page revision
+ * @param string $summary What changed
+ * @param boolean $minor Is this a minor edit?
+ * @param array $replace Additional string substitutions, @KEY@ to be replaced by value
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function notify($id,$who,$rev='',$summary='',$minor=false,$replace=array()){
+ global $lang;
+ global $conf;
+ global $INFO;
+
+ // decide if there is something to do
+ if($who == 'admin'){
+ if(empty($conf['notify'])) return; //notify enabled?
+ $text = rawLocale('mailtext');
+ $to = $conf['notify'];
+ $bcc = '';
+ }elseif($who == 'subscribers'){
+ if(!$conf['subscribers']) return; //subscribers enabled?
+ if($conf['useacl'] && $_SERVER['REMOTE_USER'] && $minor) return; //skip minors
+ $bcc = subscriber_addresslist($id,false);
+ if(empty($bcc)) return;
+ $to = '';
+ $text = rawLocale('subscribermail');
+ }elseif($who == 'register'){
+ if(empty($conf['registernotify'])) return;
+ $text = rawLocale('registermail');
+ $to = $conf['registernotify'];
+ $bcc = '';
+ }else{
+ return; //just to be safe
+ }
+
+ $ip = clientIP();
+ $text = str_replace('@DATE@',dformat(),$text);
+ $text = str_replace('@BROWSER@',$_SERVER['HTTP_USER_AGENT'],$text);
+ $text = str_replace('@IPADDRESS@',$ip,$text);
+ $text = str_replace('@HOSTNAME@',gethostsbyaddrs($ip),$text);
+ $text = str_replace('@NEWPAGE@',wl($id,'',true,'&'),$text);
+ $text = str_replace('@PAGE@',$id,$text);
+ $text = str_replace('@TITLE@',$conf['title'],$text);
+ $text = str_replace('@DOKUWIKIURL@',DOKU_URL,$text);
+ $text = str_replace('@SUMMARY@',$summary,$text);
+ $text = str_replace('@USER@',$_SERVER['REMOTE_USER'],$text);
+
+ foreach ($replace as $key => $substitution) {
+ $text = str_replace('@'.strtoupper($key).'@',$substitution, $text);
+ }
+
+ if($who == 'register'){
+ $subject = $lang['mail_new_user'].' '.$summary;
+ }elseif($rev){
+ $subject = $lang['mail_changed'].' '.$id;
+ $text = str_replace('@OLDPAGE@',wl($id,"rev=$rev",true,'&'),$text);
+ require_once(DOKU_INC.'inc/DifferenceEngine.php');
+ $df = new Diff(explode("\n",rawWiki($id,$rev)),
+ explode("\n",rawWiki($id)));
+ $dformat = new UnifiedDiffFormatter();
+ $diff = $dformat->format($df);
+ }else{
+ $subject=$lang['mail_newpage'].' '.$id;
+ $text = str_replace('@OLDPAGE@','none',$text);
+ $diff = rawWiki($id);
+ }
+ $text = str_replace('@DIFF@',$diff,$text);
+ $subject = '['.$conf['title'].'] '.$subject;
+
+ $from = $conf['mailfrom'];
+ $from = str_replace('@USER@',$_SERVER['REMOTE_USER'],$from);
+ $from = str_replace('@NAME@',$INFO['userinfo']['name'],$from);
+ $from = str_replace('@MAIL@',$INFO['userinfo']['mail'],$from);
+
+ mail_send($to,$subject,$text,$from,'',$bcc);
+}
+
+/**
+ * extracts the query from a search engine referrer
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Todd Augsburger <todd@rollerorgans.com>
+ */
+function getGoogleQuery(){
+ if (!isset($_SERVER['HTTP_REFERER'])) {
+ return '';
+ }
+ $url = parse_url($_SERVER['HTTP_REFERER']);
+
+ $query = array();
+
+ // temporary workaround against PHP bug #49733
+ // see http://bugs.php.net/bug.php?id=49733
+ if(UTF8_MBSTRING) $enc = mb_internal_encoding();
+ parse_str($url['query'],$query);
+ if(UTF8_MBSTRING) mb_internal_encoding($enc);
+
+ $q = '';
+ if(isset($query['q']))
+ $q = $query['q']; // google, live/msn, aol, ask, altavista, alltheweb, gigablast
+ elseif(isset($query['p']))
+ $q = $query['p']; // yahoo
+ elseif(isset($query['query']))
+ $q = $query['query']; // lycos, netscape, clusty, hotbot
+ elseif(preg_match("#a9\.com#i",$url['host'])) // a9
+ $q = urldecode(ltrim($url['path'],'/'));
+
+ if($q === '') return '';
+ $q = preg_split('/[\s\'"\\\\`()\]\[?:!\.{};,#+*<>\\/]+/',$q,-1,PREG_SPLIT_NO_EMPTY);
+ return $q;
+}
+
+/**
+ * Try to set correct locale
+ *
+ * @deprecated No longer used
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function setCorrectLocale(){
+ global $conf;
+ global $lang;
+
+ $enc = strtoupper($lang['encoding']);
+ foreach ($lang['locales'] as $loc){
+ //try locale
+ if(@setlocale(LC_ALL,$loc)) return;
+ //try loceale with encoding
+ if(@setlocale(LC_ALL,"$loc.$enc")) return;
+ }
+ //still here? try to set from environment
+ @setlocale(LC_ALL,"");
+}
+
+/**
+ * Return the human readable size of a file
+ *
+ * @param int $size A file size
+ * @param int $dec A number of decimal places
+ * @author Martin Benjamin <b.martin@cybernet.ch>
+ * @author Aidan Lister <aidan@php.net>
+ * @version 1.0.0
+ */
+function filesize_h($size, $dec = 1){
+ $sizes = array('B', 'KB', 'MB', 'GB');
+ $count = count($sizes);
+ $i = 0;
+
+ while ($size >= 1024 && ($i < $count - 1)) {
+ $size /= 1024;
+ $i++;
+ }
+
+ return round($size, $dec) . ' ' . $sizes[$i];
+}
+
+/**
+ * Return the given timestamp as human readable, fuzzy age
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function datetime_h($dt){
+ global $lang;
+
+ $ago = time() - $dt;
+ if($ago > 24*60*60*30*12*2){
+ return sprintf($lang['years'], round($ago/(24*60*60*30*12)));
+ }
+ if($ago > 24*60*60*30*2){
+ return sprintf($lang['months'], round($ago/(24*60*60*30)));
+ }
+ if($ago > 24*60*60*7*2){
+ return sprintf($lang['weeks'], round($ago/(24*60*60*7)));
+ }
+ if($ago > 24*60*60*2){
+ return sprintf($lang['days'], round($ago/(24*60*60)));
+ }
+ if($ago > 60*60*2){
+ return sprintf($lang['hours'], round($ago/(60*60)));
+ }
+ if($ago > 60*2){
+ return sprintf($lang['minutes'], round($ago/(60)));
+ }
+ return sprintf($lang['seconds'], $ago);
+
+}
+
+/**
+ * Wraps around strftime but provides support for fuzzy dates
+ *
+ * The format default to $conf['dformat']. It is passed to
+ * strftime - %f can be used to get the value from datetime_h()
+ *
+ * @see datetime_h
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function dformat($dt=null,$format=''){
+ global $conf;
+
+ if(is_null($dt)) $dt = time();
+ $dt = (int) $dt;
+ if(!$format) $format = $conf['dformat'];
+
+ $format = str_replace('%f',datetime_h($dt),$format);
+ return strftime($format,$dt);
+}
+
+/**
+ * return an obfuscated email address in line with $conf['mailguard'] setting
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+function obfuscate($email) {
+ global $conf;
+
+ switch ($conf['mailguard']) {
+ case 'visible' :
+ $obfuscate = array('@' => ' [at] ', '.' => ' [dot] ', '-' => ' [dash] ');
+ return strtr($email, $obfuscate);
+
+ case 'hex' :
+ $encode = '';
+ for ($x=0; $x < strlen($email); $x++) $encode .= '&#x' . bin2hex($email{$x}).';';
+ return $encode;
+
+ case 'none' :
+ default :
+ return $email;
+ }
+}
+
+/**
+ * Let us know if a user is tracking a page or a namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function is_subscribed($id,$uid,$ns=false){
+ if(!$ns) {
+ $file=metaFN($id,'.mlist');
+ } else {
+ if(!getNS($id)) {
+ $file = metaFN(getNS($id),'.mlist');
+ } else {
+ $file = metaFN(getNS($id),'/.mlist');
+ }
+ }
+ if (@file_exists($file)) {
+ $mlist = file($file);
+ $pos = array_search($uid."\n",$mlist);
+ return is_int($pos);
+ }
+
+ return false;
+}
+
+/**
+ * Return a string with the email addresses of all the
+ * users subscribed to a page
+ *
+ * @author Steven Danz <steven-danz@kc.rr.com>
+ */
+function subscriber_addresslist($id,$self=true){
+ global $conf;
+ global $auth;
+
+ if (!$conf['subscribers']) return '';
+
+ $users = array();
+ $emails = array();
+
+ // load the page mlist file content
+ $mlist = array();
+ $file=metaFN($id,'.mlist');
+ if (@file_exists($file)) {
+ $mlist = file($file);
+ foreach ($mlist as $who) {
+ $who = rtrim($who);
+ if(!$self && $who == $_SERVER['REMOTE_USER']) continue;
+ $users[$who] = true;
+ }
+ }
+
+ // load also the namespace mlist file content
+ $ns = getNS($id);
+ while ($ns) {
+ $nsfile = metaFN($ns,'/.mlist');
+ if (@file_exists($nsfile)) {
+ $mlist = file($nsfile);
+ foreach ($mlist as $who) {
+ $who = rtrim($who);
+ if(!$self && $who == $_SERVER['REMOTE_USER']) continue;
+ $users[$who] = true;
+ }
+ }
+ $ns = getNS($ns);
+ }
+ // root namespace
+ $nsfile = metaFN('','.mlist');
+ if (@file_exists($nsfile)) {
+ $mlist = file($nsfile);
+ foreach ($mlist as $who) {
+ $who = rtrim($who);
+ if(!$self && $who == $_SERVER['REMOTE_USER']) continue;
+ $users[$who] = true;
+ }
+ }
+ if(!empty($users)) {
+ foreach (array_keys($users) as $who) {
+ $info = $auth->getUserData($who);
+ if($info === false) continue;
+ $level = auth_aclcheck($id,$who,$info['grps']);
+ if ($level >= AUTH_READ) {
+ if (strcasecmp($info['mail'],$conf['notify']) != 0) {
+ $emails[] = $info['mail'];
+ }
+ }
+ }
+ }
+
+ return implode(',',$emails);
+}
+
+/**
+ * Removes quoting backslashes
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function unslash($string,$char="'"){
+ return str_replace('\\'.$char,$char,$string);
+}
+
+/**
+ * Convert php.ini shorthands to byte
+ *
+ * @author <gilthans dot NO dot SPAM at gmail dot com>
+ * @link http://de3.php.net/manual/en/ini.core.php#79564
+ */
+function php_to_byte($v){
+ $l = substr($v, -1);
+ $ret = substr($v, 0, -1);
+ switch(strtoupper($l)){
+ case 'P':
+ $ret *= 1024;
+ case 'T':
+ $ret *= 1024;
+ case 'G':
+ $ret *= 1024;
+ case 'M':
+ $ret *= 1024;
+ case 'K':
+ $ret *= 1024;
+ break;
+ }
+ return $ret;
+}
+
+/**
+ * Wrapper around preg_quote adding the default delimiter
+ */
+function preg_quote_cb($string){
+ return preg_quote($string,'/');
+}
+
+/**
+ * Shorten a given string by removing data from the middle
+ *
+ * You can give the string in two parts, the first part $keep
+ * will never be shortened. The second part $short will be cut
+ * in the middle to shorten but only if at least $min chars are
+ * left to display it. Otherwise it will be left off.
+ *
+ * @param string $keep the part to keep
+ * @param string $short the part to shorten
+ * @param int $max maximum chars you want for the whole string
+ * @param int $min minimum number of chars to have left for middle shortening
+ * @param string $char the shortening character to use
+ */
+function shorten($keep,$short,$max,$min=9,$char='…'){
+ $max = $max - utf8_strlen($keep);
+ if($max < $min) return $keep;
+ $len = utf8_strlen($short);
+ if($len <= $max) return $keep.$short;
+ $half = floor($max/2);
+ return $keep.utf8_substr($short,0,$half-1).$char.utf8_substr($short,$len-$half);
+}
+
+/**
+ * Return the users realname or e-mail address for use
+ * in page footer and recent changes pages
+ *
+ * @author Andy Webber <dokuwiki AT andywebber DOT com>
+ */
+function editorinfo($username){
+ global $conf;
+ global $auth;
+
+ switch($conf['showuseras']){
+ case 'username':
+ case 'email':
+ case 'email_link':
+ if($auth) $info = $auth->getUserData($username);
+ break;
+ default:
+ return hsc($username);
+ }
+
+ if(isset($info) && $info) {
+ switch($conf['showuseras']){
+ case 'username':
+ return hsc($info['name']);
+ case 'email':
+ return obfuscate($info['mail']);
+ case 'email_link':
+ $mail=obfuscate($info['mail']);
+ return '<a href="mailto:'.$mail.'">'.$mail.'</a>';
+ default:
+ return hsc($username);
+ }
+ } else {
+ return hsc($username);
+ }
+}
+
+/**
+ * Returns the path to a image file for the currently chosen license.
+ * When no image exists, returns an empty string
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $type - type of image 'badge' or 'button'
+ */
+function license_img($type){
+ global $license;
+ global $conf;
+ if(!$conf['license']) return '';
+ if(!is_array($license[$conf['license']])) return '';
+ $lic = $license[$conf['license']];
+ $try = array();
+ $try[] = 'lib/images/license/'.$type.'/'.$conf['license'].'.png';
+ $try[] = 'lib/images/license/'.$type.'/'.$conf['license'].'.gif';
+ if(substr($conf['license'],0,3) == 'cc-'){
+ $try[] = 'lib/images/license/'.$type.'/cc.png';
+ }
+ foreach($try as $src){
+ if(@file_exists(DOKU_INC.$src)) return $src;
+ }
+ return '';
+}
+
+/**
+ * Checks if the given amount of memory is available
+ *
+ * If the memory_get_usage() function is not available the
+ * function just assumes $bytes of already allocated memory
+ *
+ * @param int $mem Size of memory you want to allocate in bytes
+ * @param int $used already allocated memory (see above)
+ * @author Filip Oscadal <webmaster@illusionsoftworks.cz>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function is_mem_available($mem,$bytes=1048576){
+ $limit = trim(ini_get('memory_limit'));
+ if(empty($limit)) return true; // no limit set!
+
+ // parse limit to bytes
+ $limit = php_to_byte($limit);
+
+ // get used memory if possible
+ if(function_exists('memory_get_usage')){
+ $used = memory_get_usage();
+ }
+
+ if($used+$mem > $limit){
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Send a HTTP redirect to the browser
+ *
+ * Works arround Microsoft IIS cookie sending bug. Exits the script.
+ *
+ * @link http://support.microsoft.com/kb/q176113/
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function send_redirect($url){
+ // always close the session
+ session_write_close();
+
+ // check if running on IIS < 6 with CGI-PHP
+ if( isset($_SERVER['SERVER_SOFTWARE']) && isset($_SERVER['GATEWAY_INTERFACE']) &&
+ (strpos($_SERVER['GATEWAY_INTERFACE'],'CGI') !== false) &&
+ (preg_match('|^Microsoft-IIS/(\d)\.\d$|', trim($_SERVER['SERVER_SOFTWARE']), $matches)) &&
+ $matches[1] < 6 ){
+ header('Refresh: 0;url='.$url);
+ }else{
+ header('Location: '.$url);
+ }
+ exit;
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/confutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/confutils.php
new file mode 100644
index 000000000..9ec7a551e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/confutils.php
@@ -0,0 +1,320 @@
+<?php
+/**
+ * Utilities for collecting data from config files
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+
+
+/**
+ * Returns the (known) extension and mimetype of a given filename
+ *
+ * If $knownonly is true (the default), then only known extensions
+ * are returned.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function mimetype($file, $knownonly=true){
+ $ret = array(false,false,false); // return array
+ $mtypes = getMimeTypes(); // known mimetypes
+ $exts = join('|',array_keys($mtypes)); // known extensions (regexp)
+ if(!$knownonly){
+ $exts = $exts.'|[_\-A-Za-z0-9]+'; // any extension
+ }
+ if(preg_match('#\.('.$exts.')$#i',$file,$matches)){
+ $ext = strtolower($matches[1]);
+ }
+
+ if($ext){
+ if (isset($mtypes[$ext])){
+ if($mtypes[$ext][0] == '!'){
+ $ret = array($ext, substr($mtypes[$ext],1), true);
+ }else{
+ $ret = array($ext, $mtypes[$ext], false);
+ }
+ }elseif(!$knownonly){
+ $ret = array($ext, 'application/octet-stream', true);
+ }
+ }
+
+ return $ret;
+}
+
+/**
+ * returns a hash of mimetypes
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function getMimeTypes() {
+ static $mime = NULL;
+ if ( !$mime ) {
+ $mime = retrieveConfig('mime','confToHash');
+ }
+ return $mime;
+}
+
+/**
+ * returns a hash of acronyms
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function getAcronyms() {
+ static $acronyms = NULL;
+ if ( !$acronyms ) {
+ $acronyms = retrieveConfig('acronyms','confToHash');
+ }
+ return $acronyms;
+}
+
+/**
+ * returns a hash of smileys
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function getSmileys() {
+ static $smileys = NULL;
+ if ( !$smileys ) {
+ $smileys = retrieveConfig('smileys','confToHash');
+ }
+ return $smileys;
+}
+
+/**
+ * returns a hash of entities
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function getEntities() {
+ static $entities = NULL;
+ if ( !$entities ) {
+ $entities = retrieveConfig('entities','confToHash');
+ }
+ return $entities;
+}
+
+/**
+ * returns a hash of interwikilinks
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function getInterwiki() {
+ static $wikis = NULL;
+ if ( !$wikis ) {
+ $wikis = retrieveConfig('interwiki','confToHash',array(true));
+ }
+ //add sepecial case 'this'
+ $wikis['this'] = DOKU_URL.'{NAME}';
+ return $wikis;
+}
+
+/**
+ * returns array of wordblock patterns
+ *
+ */
+function getWordblocks() {
+ static $wordblocks = NULL;
+ if ( !$wordblocks ) {
+ $wordblocks = retrieveConfig('wordblock','file');
+ }
+ return $wordblocks;
+}
+
+
+function getSchemes() {
+ static $schemes = NULL;
+ if ( !$schemes ) {
+ $schemes = retrieveConfig('scheme','file');
+ }
+ $schemes = array_map('trim', $schemes);
+ $schemes = preg_replace('/^#.*/', '', $schemes);
+ $schemes = array_filter($schemes);
+ return $schemes;
+}
+
+/**
+ * Builds a hash from an array of lines
+ *
+ * If $lower is set to true all hash keys are converted to
+ * lower case.
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Gina Haeussge <gina@foosel.net>
+ */
+function linesToHash($lines, $lower=false) {
+ foreach ( $lines as $line ) {
+ //ignore comments (except escaped ones)
+ $line = preg_replace('/(?<![&\\\\])#.*$/','',$line);
+ $line = str_replace('\\#','#',$line);
+ $line = trim($line);
+ if(empty($line)) continue;
+ $line = preg_split('/\s+/',$line,2);
+ // Build the associative array
+ if($lower){
+ $conf[strtolower($line[0])] = $line[1];
+ }else{
+ $conf[$line[0]] = $line[1];
+ }
+ }
+
+ return $conf;
+}
+
+/**
+ * Builds a hash from a configfile
+ *
+ * If $lower is set to true all hash keys are converted to
+ * lower case.
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Gina Haeussge <gina@foosel.net>
+ */
+function confToHash($file,$lower=false) {
+ $conf = array();
+ $lines = @file( $file );
+ if ( !$lines ) return $conf;
+
+ return linesToHash($lines, $lower);
+}
+
+/**
+ * Retrieve the requested configuration information
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ *
+ * @param string $type the configuration settings to be read, must correspond to a key/array in $config_cascade
+ * @param callback $fn the function used to process the configuration file into an array
+ * @param array $param optional additional params to pass to the callback
+ * @return array configuration values
+ */
+function retrieveConfig($type,$fn,$params=null) {
+ global $config_cascade;
+
+ if(!is_array($params)) $params = array();
+
+ $combined = array();
+ if (!is_array($config_cascade[$type])) trigger_error('Missing config cascade for "'.$type.'"',E_USER_WARNING);
+ foreach (array('default','local','protected') as $config_group) {
+ if (empty($config_cascade[$type][$config_group])) continue;
+ foreach ($config_cascade[$type][$config_group] as $file) {
+ if (@file_exists($file)) {
+ $config = call_user_func_array($fn,array_merge(array($file),$params));
+ $combined = array_merge($combined, $config);
+ }
+ }
+ }
+
+ return $combined;
+}
+
+/**
+ * Include the requested configuration information
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ *
+ * @param string $type the configuration settings to be read, must correspond to a key/array in $config_cascade
+ * @return array list of files, default before local before protected
+ */
+function getConfigFiles($type) {
+ global $config_cascade;
+ $files = array();
+
+ if (!is_array($config_cascade[$type])) trigger_error('Missing config cascade for "'.$type.'"',E_USER_WARNING);
+ foreach (array('default','local','protected') as $config_group) {
+ if (empty($config_cascade[$type][$config_group])) continue;
+ $files = array_merge($files, $config_cascade[$type][$config_group]);
+ }
+
+ return $files;
+}
+
+/**
+ * check if the given action was disabled in config
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @returns boolean true if enabled, false if disabled
+ */
+function actionOK($action){
+ static $disabled = null;
+ if(is_null($disabled)){
+ global $conf;
+
+ // prepare disabled actions array and handle legacy options
+ $disabled = explode(',',$conf['disableactions']);
+ $disabled = array_map('trim',$disabled);
+ if(isset($conf['openregister']) && !$conf['openregister']) $disabled[] = 'register';
+ if(isset($conf['resendpasswd']) && !$conf['resendpasswd']) $disabled[] = 'resendpwd';
+ if(isset($conf['subscribers']) && !$conf['subscribers']) {
+ $disabled[] = 'subscribe';
+ $disabled[] = 'subscribens';
+ }
+ $disabled = array_unique($disabled);
+ }
+
+ return !in_array($action,$disabled);
+}
+
+/**
+ * check if headings should be used as link text for the specified link type
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ *
+ * @param string $linktype 'content'|'navigation', content applies to links in wiki text
+ * navigation applies to all other links
+ * @returns boolean true if headings should be used for $linktype, false otherwise
+ */
+function useHeading($linktype) {
+ static $useHeading = null;
+
+ if (is_null($useHeading)) {
+ global $conf;
+
+ if (!empty($conf['useheading'])) {
+ switch ($conf['useheading']) {
+ case 'content' : $useHeading['content'] = true; break;
+ case 'navigation' : $useHeading['navigation'] = true; break;
+ default:
+ $useHeading['content'] = true;
+ $useHeading['navigation'] = true;
+ }
+ } else {
+ $useHeading = array();
+ }
+ }
+
+ return (!empty($useHeading[$linktype]));
+}
+
+/**
+ * obscure config data so information isn't plain text
+ *
+ * @param string $str data to be encoded
+ * @param string $code encoding method, values: plain, base64, uuencode.
+ * @return string the encoded value
+ */
+function conf_encodeString($str,$code) {
+ switch ($code) {
+ case 'base64' : return '<b>'.base64_encode($str);
+ case 'uuencode' : return '<u>'.convert_uuencode($str);
+ case 'plain':
+ default:
+ return $str;
+ }
+}
+/**
+ * return obscured data as plain text
+ *
+ * @param string $str encoded data
+ * @return string plain text
+ */
+function conf_decodeString($str) {
+ switch (substr($str,0,3)) {
+ case '<b>' : return base64_decode(substr($str,3));
+ case '<u>' : return convert_uudecode(substr($str,3));
+ default: // not encode (or unknown)
+ return $str;
+ }
+}
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/events.php b/mod/dokuwiki/vendors/dokuwiki/inc/events.php
new file mode 100644
index 000000000..1604c73c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/events.php
@@ -0,0 +1,202 @@
+<?php
+/**
+ * DokuWiki Events
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/pluginutils.php');
+
+class Doku_Event {
+
+ // public properties
+ var $name = ''; // READONLY event name, objects must register against this name to see the event
+ var $data = NULL; // READWRITE data relevant to the event, no standardised format (YET!)
+ var $result = NULL; // READWRITE the results of the event action, only relevant in "_AFTER" advise
+ // event handlers may modify this if they are preventing the default action
+ // to provide the after event handlers with event results
+ var $canPreventDefault = true; // READONLY if true, event handlers can prevent the events default action
+
+ // private properties, event handlers can effect these through the provided methods
+ var $_default = true; // whether or not to carry out the default action associated with the event
+ var $_continue = true; // whether or not to continue propagating the event to other handlers
+
+ /**
+ * event constructor
+ */
+ function Doku_Event($name, &$data) {
+
+ $this->name = $name;
+ $this->data =& $data;
+
+ }
+
+ /**
+ * advise functions
+ *
+ * advise all registered handlers of this event
+ *
+ * if these methods are used by functions outside of this object, they must
+ * properly handle correct processing of any default action and issue an
+ * advise_after() signal. e.g.
+ * $evt = new Doku_Event(name, data);
+ * if ($evt->advise_before(canPreventDefault) {
+ * // default action code block
+ * }
+ * $evt->advise_after();
+ * unset($evt);
+ *
+ * @return results of processing the event, usually $this->_default
+ */
+ function advise_before($enablePreventDefault=true) {
+ global $EVENT_HANDLER;
+
+ $this->canPreventDefault = $enablePreventDefault;
+ $EVENT_HANDLER->process_event($this,'BEFORE');
+
+ return (!$enablePreventDefault || $this->_default);
+ }
+
+ function advise_after() {
+ global $EVENT_HANDLER;
+
+ $this->_continue = true;
+ $EVENT_HANDLER->process_event($this,'AFTER');
+ }
+
+ /**
+ * trigger
+ *
+ * - advise all registered (<event>_BEFORE) handlers that this event is about to take place
+ * - carry out the default action using $this->data based on $enablePrevent and
+ * $this->_default, all of which may have been modified by the event handlers.
+ * - advise all registered (<event>_AFTER) handlers that the event has taken place
+ *
+ * @return $event->results
+ * the value set by any <event>_before or <event> handlers if the default action is prevented
+ * or the results of the default action (as modified by <event>_after handlers)
+ * or NULL no action took place and no handler modified the value
+ */
+ function trigger($action=NULL, $enablePrevent=true) {
+
+ if (!is_callable($action)) $enablePrevent = false;
+
+ if ($this->advise_before($enablePrevent) && is_callable($action)) {
+ if (is_array($action)) {
+ list($obj,$method) = $action;
+ $this->result = $obj->$method($this->data);
+ } else {
+ $this->result = $action($this->data);
+ }
+ }
+
+ $this->advise_after();
+
+ return $this->result;
+ }
+
+ /**
+ * stopPropagation
+ *
+ * stop any further processing of the event by event handlers
+ * this function does not prevent the default action taking place
+ */
+ function stopPropagation() { $this->_continue = false; }
+
+ /**
+ * preventDefault
+ *
+ * prevent the default action taking place
+ */
+ function preventDefault() { $this->_default = false; }
+}
+
+class Doku_Event_Handler {
+
+ // public properties: none
+
+ // private properties
+ var $_hooks = array(); // array of events and their registered handlers
+
+ /**
+ * event_handler
+ *
+ * constructor, loads all action plugins and calls their register() method giving them
+ * an opportunity to register any hooks they require
+ */
+ function Doku_Event_Handler() {
+
+ // load action plugins
+ $plugin = NULL;
+ $pluginlist = plugin_list('action');
+
+ foreach ($pluginlist as $plugin_name) {
+ $plugin =& plugin_load('action',$plugin_name);
+
+ if ($plugin !== NULL) $plugin->register($this);
+ }
+ }
+
+ /**
+ * register_hook
+ *
+ * register a hook for an event
+ *
+ * @PARAM $event (string) name used by the event, (incl '_before' or '_after' for triggers)
+ * @PARAM $obj (obj) object in whose scope method is to be executed,
+ * if NULL, method is assumed to be a globally available function
+ * @PARAM $method (function) event handler function
+ * @PARAM $param (mixed) data passed to the event handler
+ */
+ function register_hook($event, $advise, &$obj, $method, $param=NULL) {
+ $this->_hooks[$event.'_'.$advise][] = array(&$obj, $method, $param);
+ }
+
+ function process_event(&$event,$advise='') {
+
+ $evt_name = $event->name . ($advise ? '_'.$advise : '_BEFORE');
+
+ if (!empty($this->_hooks[$evt_name])) {
+ $hook = reset($this->_hooks[$evt_name]);
+ do {
+// list($obj, $method, $param) = $hook;
+ $obj =& $hook[0];
+ $method = $hook[1];
+ $param = $hook[2];
+
+ if (is_null($obj)) {
+ $method($event, $param);
+ } else {
+ $obj->$method($event, $param);
+ }
+
+ } while ($event->_continue && $hook = next($this->_hooks[$evt_name]));
+ }
+ }
+}
+
+/**
+ * trigger_event
+ *
+ * function wrapper to process (create, trigger and destroy) an event
+ *
+ * @PARAM $name (string) name for the event
+ * @PARAM $data (mixed) event data
+ * @PARAM $action (callback) (optional, default=NULL) default action, a php callback function
+ * @PARAM $canPreventDefault (bool) (optional, default=true) can hooks prevent the default action
+ *
+ * @RETURN (mixed) the event results value after all event processing is complete
+ * by default this is the return value of the default action however
+ * it can be set or modified by event handler hooks
+ */
+function trigger_event($name, &$data, $action=NULL, $canPreventDefault=true) {
+
+ $evt = new Doku_Event($name, $data);
+ return $evt->trigger($action, $canPreventDefault);
+}
+
+// create the event handler
+global $EVENT_HANDLER;
+$EVENT_HANDLER = new Doku_Event_Handler();
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php
new file mode 100644
index 000000000..86113e8c3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php
@@ -0,0 +1,1572 @@
+<?php
+/***************************************************************************
+ * FeedCreator class v1.7.2-ppt
+ * originally (c) Kai Blankenhorn
+ * www.bitfolge.de
+ * kaib@bitfolge.de
+ * v1.3 work by Scott Reynen (scott@randomchaos.com) and Kai Blankenhorn
+ * v1.5 OPML support by Dirk Clemens
+ * v1.7.2-mod on-the-fly feed generation by Fabian Wolf (info@f2w.de)
+ * v1.7.2-ppt ATOM 1.0 support by Mohammad Hafiz bin Ismail (mypapit@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * @author www.bitfolge.de
+ *
+ * Changelog:
+ *
+ * this version contains some smaller modifications for DokuWiki as well
+ *
+ * v1.7.2-ppt 11-21-05
+ * added Atom 1.0 support
+ * added enclosure support for RSS 2.0/ATOM 1.0
+ * added docs for v1.7.2-ppt only!
+ *
+ * v1.7.2-mod 03-12-05
+ * added output function outputFeed for on-the-fly feed generation
+ *
+ * v1.7.2 10-11-04
+ * license changed to LGPL
+ *
+ * v1.7.1
+ * fixed a syntax bug
+ * fixed left over debug code
+ *
+ * v1.7 07-18-04
+ * added HTML and JavaScript feeds (configurable via CSS) (thanks to Pascal Van Hecke)
+ * added HTML descriptions for all feed formats (thanks to Pascal Van Hecke)
+ * added a switch to select an external stylesheet (thanks to Pascal Van Hecke)
+ * changed default content-type to application/xml
+ * added character encoding setting
+ * fixed numerous smaller bugs (thanks to Sören Fuhrmann of golem.de)
+ * improved changing ATOM versions handling (thanks to August Trometer)
+ * improved the UniversalFeedCreator's useCached method (thanks to Sören Fuhrmann of golem.de)
+ * added charset output in HTTP headers (thanks to Sören Fuhrmann of golem.de)
+ * added Slashdot namespace to RSS 1.0 (thanks to Sören Fuhrmann of golem.de)
+ *
+ * See www.bitfolge.de for additional changelog info
+ */
+// your local timezone, set to "" to disable or for GMT
+define("TIME_ZONE",date("O", time()));
+
+
+
+
+/**
+ * Version string.
+ **/
+
+define("FEEDCREATOR_VERSION", "FeedCreator 1.7.2-ppt DokuWiki");
+
+
+
+/**
+ * A FeedItem is a part of a FeedCreator feed.
+ *
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ * @since 1.3
+ */
+class FeedItem extends HtmlDescribable {
+ /**
+ * Mandatory attributes of an item.
+ */
+ var $title, $description, $link;
+
+ /**
+ * Optional attributes of an item.
+ */
+ var $author, $authorEmail, $image, $category, $comments, $guid, $source, $creator;
+
+ /**
+ * Publishing date of an item. May be in one of the following formats:
+ *
+ * RFC 822:
+ * "Mon, 20 Jan 03 18:05:41 +0400"
+ * "20 Jan 03 18:05:41 +0000"
+ *
+ * ISO 8601:
+ * "2003-01-20T18:05:41+04:00"
+ *
+ * Unix:
+ * 1043082341
+ */
+ var $date;
+
+ /**
+ * Add <enclosure> element tag RSS 2.0
+ * modified by : Mohammad Hafiz bin Ismail (mypapit@gmail.com)
+ *
+ *
+ * display :
+ * <enclosure length="17691" url="http://something.com/picture.jpg" type="image/jpeg" />
+ *
+ */
+ var $enclosure;
+
+ /**
+ * Any additional elements to include as an assiciated array. All $key => $value pairs
+ * will be included unencoded in the feed item in the form
+ * <$key>$value</$key>
+ * Again: No encoding will be used! This means you can invalidate or enhance the feed
+ * if $value contains markup. This may be abused to embed tags not implemented by
+ * the FeedCreator class used.
+ */
+ var $additionalElements = Array();
+
+ // on hold
+ // var $source;
+}
+
+class EnclosureItem extends HtmlDescribable {
+ /*
+ *
+ * core variables
+ *
+ **/
+ var $url,$length,$type;
+
+ /*
+ * For use with another extension like Yahoo mRSS
+ * Warning :
+ * These variables might not show up in
+ * later release / not finalize yet!
+ *
+ */
+ var $width, $height, $title, $description, $keywords, $thumburl;
+
+ var $additionalElements = Array();
+
+}
+
+
+/**
+ * An FeedImage may be added to a FeedCreator feed.
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ * @since 1.3
+ */
+class FeedImage extends HtmlDescribable {
+ /**
+ * Mandatory attributes of an image.
+ */
+ var $title, $url, $link;
+
+ /**
+ * Optional attributes of an image.
+ */
+ var $width, $height, $description;
+}
+
+
+
+/**
+ * An HtmlDescribable is an item within a feed that can have a description that may
+ * include HTML markup.
+ */
+class HtmlDescribable {
+ /**
+ * Indicates whether the description field should be rendered in HTML.
+ */
+ var $descriptionHtmlSyndicated;
+
+ /**
+ * Indicates whether and to how many characters a description should be truncated.
+ */
+ var $descriptionTruncSize;
+
+ /**
+ * Returns a formatted description field, depending on descriptionHtmlSyndicated and
+ * $descriptionTruncSize properties
+ * @return string the formatted description
+ */
+ function getDescription() {
+ $descriptionField = new FeedHtmlField($this->description);
+ $descriptionField->syndicateHtml = $this->descriptionHtmlSyndicated;
+ $descriptionField->truncSize = $this->descriptionTruncSize;
+ return $descriptionField->output();
+ }
+
+}
+
+
+
+/**
+ * An FeedHtmlField describes and generates
+ * a feed, item or image html field (probably a description). Output is
+ * generated based on $truncSize, $syndicateHtml properties.
+ * @author Pascal Van Hecke <feedcreator.class.php@vanhecke.info>
+ * @version 1.6
+ */
+class FeedHtmlField {
+ /**
+ * Mandatory attributes of a FeedHtmlField.
+ */
+ var $rawFieldContent;
+
+ /**
+ * Optional attributes of a FeedHtmlField.
+ *
+ */
+ var $truncSize, $syndicateHtml;
+
+ /**
+ * Creates a new instance of FeedHtmlField.
+ * @param $string: if given, sets the rawFieldContent property
+ */
+ function FeedHtmlField($parFieldContent) {
+ if ($parFieldContent) {
+ $this->rawFieldContent = $parFieldContent;
+ }
+ }
+
+
+ /**
+ * Creates the right output, depending on $truncSize, $syndicateHtml properties.
+ * @return string the formatted field
+ */
+ function output() {
+ // when field available and syndicated in html we assume
+ // - valid html in $rawFieldContent and we enclose in CDATA tags
+ // - no truncation (truncating risks producing invalid html)
+ if (!$this->rawFieldContent) {
+ $result = "";
+ } elseif ($this->syndicateHtml) {
+ $result = "<![CDATA[".$this->rawFieldContent."]]>";
+ } else {
+ if ($this->truncSize and is_int($this->truncSize)) {
+ $result = FeedCreator::iTrunc(htmlspecialchars($this->rawFieldContent),$this->truncSize);
+ } else {
+ $result = htmlspecialchars($this->rawFieldContent);
+ }
+ }
+ return $result;
+ }
+
+}
+
+
+
+/**
+ * UniversalFeedCreator lets you choose during runtime which
+ * format to build.
+ * For general usage of a feed class, see the FeedCreator class
+ * below or the example above.
+ *
+ * @since 1.3
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class UniversalFeedCreator extends FeedCreator {
+ var $_feed;
+
+ function _setFormat($format) {
+ switch (strtoupper($format)) {
+
+ case "2.0":
+ // fall through
+ case "RSS2.0":
+ $this->_feed = new RSSCreator20();
+ break;
+
+ case "1.0":
+ // fall through
+ case "RSS1.0":
+ $this->_feed = new RSSCreator10();
+ break;
+
+ case "0.91":
+ // fall through
+ case "RSS0.91":
+ $this->_feed = new RSSCreator091();
+ break;
+
+ case "PIE0.1":
+ $this->_feed = new PIECreator01();
+ break;
+
+ case "MBOX":
+ $this->_feed = new MBOXCreator();
+ break;
+
+ case "OPML":
+ $this->_feed = new OPMLCreator();
+ break;
+
+ case "ATOM":
+ // fall through: always the latest ATOM version
+ case "ATOM1.0":
+ $this->_feed = new AtomCreator10();
+ break;
+
+ case "ATOM0.3":
+ $this->_feed = new AtomCreator03();
+ break;
+
+ case "HTML":
+ $this->_feed = new HTMLCreator();
+ break;
+
+ case "JS":
+ // fall through
+ case "JAVASCRIPT":
+ $this->_feed = new JSCreator();
+ break;
+
+ default:
+ $this->_feed = new RSSCreator091();
+ break;
+ }
+
+ $vars = get_object_vars($this);
+ foreach ($vars as $key => $value) {
+ // prevent overwriting of properties "contentType", "encoding"; do not copy "_feed" itself
+ if (!in_array($key, array("_feed", "contentType", "encoding"))) {
+ $this->_feed->{$key} = $this->{$key};
+ }
+ }
+ }
+
+ function _sendMIME($format) {
+ header('Content-Type: '.$this->contentType.'; charset='.$this->encoding, true);
+ }
+
+ /**
+ * Creates a syndication feed based on the items previously added.
+ *
+ * @see FeedCreator::addItem()
+ * @param string format format the feed should comply to. Valid values are:
+ * "PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3", "HTML", "JS"
+ * @return string the contents of the feed.
+ */
+ function createFeed($format = "RSS0.91") {
+ $this->_setFormat($format);
+ return $this->_feed->createFeed();
+ }
+
+ /**
+ * Saves this feed as a file on the local disk. After the file is saved, an HTTP redirect
+ * header may be sent to redirect the use to the newly created file.
+ * @since 1.4
+ *
+ * @param string format format the feed should comply to. Valid values are:
+ * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM", "ATOM0.3", "HTML", "JS"
+ * @param string filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
+ * @param boolean displayContents optional send the content of the file or not. If true, the file will be sent in the body of the response.
+ */
+ function saveFeed($format="RSS0.91", $filename="", $displayContents=true) {
+ $this->_setFormat($format);
+ $this->_feed->saveFeed($filename, $displayContents);
+ }
+
+
+ /**
+ * Turns on caching and checks if there is a recent version of this feed in the cache.
+ * If there is, an HTTP redirect header is sent.
+ * To effectively use caching, you should create the FeedCreator object and call this method
+ * before anything else, especially before you do the time consuming task to build the feed
+ * (web fetching, for example).
+ *
+ * @param string format format the feed should comply to. Valid values are:
+ * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
+ * @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
+ * @param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)
+ */
+ function useCached($format="RSS0.91", $filename="", $timeout=3600) {
+ $this->_setFormat($format);
+ $this->_feed->useCached($filename, $timeout);
+ }
+
+
+ /**
+ * Outputs feed to the browser - needed for on-the-fly feed generation (like it is done in WordPress, etc.)
+ *
+ * @param format string format the feed should comply to. Valid values are:
+ * "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".
+ */
+ function outputFeed($format='RSS0.91') {
+ $this->_setFormat($format);
+ $this->_sendMIME($format);
+ $this->_feed->outputFeed();
+ }
+
+
+}
+
+
+/**
+ * FeedCreator is the abstract base implementation for concrete
+ * implementations that implement a specific format of syndication.
+ *
+ * @abstract
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ * @since 1.4
+ */
+class FeedCreator extends HtmlDescribable {
+
+ /**
+ * Mandatory attributes of a feed.
+ */
+ var $title, $description, $link;
+
+
+ /**
+ * Optional attributes of a feed.
+ */
+ var $syndicationURL, $image, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays;
+
+ /**
+ * The url of the external xsl stylesheet used to format the naked rss feed.
+ * Ignored in the output when empty.
+ */
+ var $xslStyleSheet = "";
+
+
+ /**
+ * @access private
+ */
+ var $items = Array();
+
+
+ /**
+ * This feed's MIME content type.
+ * @since 1.4
+ * @access private
+ */
+ var $contentType = "application/xml";
+
+
+ /**
+ * This feed's character encoding.
+ * @since 1.6.1
+ **/
+ var $encoding = "utf-8";
+
+
+ /**
+ * Any additional elements to include as an assiciated array. All $key => $value pairs
+ * will be included unencoded in the feed in the form
+ * <$key>$value</$key>
+ * Again: No encoding will be used! This means you can invalidate or enhance the feed
+ * if $value contains markup. This may be abused to embed tags not implemented by
+ * the FeedCreator class used.
+ */
+ var $additionalElements = Array();
+
+
+ /**
+ * Adds an FeedItem to the feed.
+ *
+ * @param object FeedItem $item The FeedItem to add to the feed.
+ * @access public
+ */
+ function addItem($item) {
+ $this->items[] = $item;
+ }
+
+
+ /**
+ * Truncates a string to a certain length at the most sensible point.
+ * First, if there's a '.' character near the end of the string, the string is truncated after this character.
+ * If there is no '.', the string is truncated after the last ' ' character.
+ * If the string is truncated, " ..." is appended.
+ * If the string is already shorter than $length, it is returned unchanged.
+ *
+ * @static
+ * @param string string A string to be truncated.
+ * @param int length the maximum length the string should be truncated to
+ * @return string the truncated string
+ */
+ function iTrunc($string, $length) {
+ if (strlen($string)<=$length) {
+ return $string;
+ }
+
+ $pos = strrpos($string,".");
+ if ($pos>=$length-4) {
+ $string = substr($string,0,$length-4);
+ $pos = strrpos($string,".");
+ }
+ if ($pos>=$length*0.4) {
+ return substr($string,0,$pos+1)." ...";
+ }
+
+ $pos = strrpos($string," ");
+ if ($pos>=$length-4) {
+ $string = substr($string,0,$length-4);
+ $pos = strrpos($string," ");
+ }
+ if ($pos>=$length*0.4) {
+ return substr($string,0,$pos)." ...";
+ }
+
+ return substr($string,0,$length-4)." ...";
+
+ }
+
+
+ /**
+ * Creates a comment indicating the generator of this feed.
+ * The format of this comment seems to be recognized by
+ * Syndic8.com.
+ */
+ function _createGeneratorComment() {
+ return "<!-- generator=\"".FEEDCREATOR_VERSION."\" -->\n";
+ }
+
+
+ /**
+ * Creates a string containing all additional elements specified in
+ * $additionalElements.
+ * @param elements array an associative array containing key => value pairs
+ * @param indentString string a string that will be inserted before every generated line
+ * @return string the XML tags corresponding to $additionalElements
+ */
+ function _createAdditionalElements($elements, $indentString="") {
+ $ae = "";
+ if (is_array($elements)) {
+ foreach($elements AS $key => $value) {
+ $ae.= $indentString."<$key>$value</$key>\n";
+ }
+ }
+ return $ae;
+ }
+
+ function _createStylesheetReferences() {
+ $xml = "";
+ if ($this->cssStyleSheet) $xml .= "<?xml-stylesheet href=\"".$this->cssStyleSheet."\" type=\"text/css\"?>\n";
+ if ($this->xslStyleSheet) $xml .= "<?xml-stylesheet href=\"".$this->xslStyleSheet."\" type=\"text/xsl\"?>\n";
+ return $xml;
+ }
+
+
+ /**
+ * Builds the feed's text.
+ * @abstract
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ }
+
+ /**
+ * Generate a filename for the feed cache file. The result will be $_SERVER["PHP_SELF"] with the extension changed to .xml.
+ * For example:
+ *
+ * echo $_SERVER["PHP_SELF"]."\n";
+ * echo FeedCreator::_generateFilename();
+ *
+ * would produce:
+ *
+ * /rss/latestnews.php
+ * latestnews.xml
+ *
+ * @return string the feed cache filename
+ * @since 1.4
+ * @access private
+ */
+ function _generateFilename() {
+ $fileInfo = pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".xml";
+ }
+
+
+ /**
+ * @since 1.4
+ * @access private
+ */
+ function _redirect($filename) {
+ // attention, heavily-commented-out-area
+
+ // maybe use this in addition to file time checking
+ //Header("Expires: ".date("r",time()+$this->_timeout));
+
+ /* no caching at all, doesn't seem to work as good:
+ Header("Cache-Control: no-cache");
+ Header("Pragma: no-cache");
+ */
+
+ // HTTP redirect, some feed readers' simple HTTP implementations don't follow it
+ //Header("Location: ".$filename);
+
+ header("Content-Type: ".$this->contentType."; charset=".$this->encoding."; filename=".basename($filename));
+ header("Content-Disposition: inline; filename=".basename($filename));
+ readfile($filename, "r");
+ die();
+ }
+
+ /**
+ * Turns on caching and checks if there is a recent version of this feed in the cache.
+ * If there is, an HTTP redirect header is sent.
+ * To effectively use caching, you should create the FeedCreator object and call this method
+ * before anything else, especially before you do the time consuming task to build the feed
+ * (web fetching, for example).
+ * @since 1.4
+ * @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
+ * @param timeout int optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)
+ */
+ function useCached($filename="", $timeout=3600) {
+ $this->_timeout = $timeout;
+ if ($filename=="") {
+ $filename = $this->_generateFilename();
+ }
+ if (file_exists($filename) AND (time()-filemtime($filename) < $timeout)) {
+ $this->_redirect($filename);
+ }
+ }
+
+
+ /**
+ * Saves this feed as a file on the local disk. After the file is saved, a redirect
+ * header may be sent to redirect the user to the newly created file.
+ * @since 1.4
+ *
+ * @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).
+ * @param redirect boolean optional send an HTTP redirect header or not. If true, the user will be automatically redirected to the created file.
+ */
+ function saveFeed($filename="", $displayContents=true) {
+ if ($filename=="") {
+ $filename = $this->_generateFilename();
+ }
+ $feedFile = fopen($filename, "w+");
+ if ($feedFile) {
+ fputs($feedFile,$this->createFeed());
+ fclose($feedFile);
+ if ($displayContents) {
+ $this->_redirect($filename);
+ }
+ } else {
+ echo "<br /><b>Error creating feed file, please check write permissions.</b><br />";
+ }
+ }
+
+ /**
+ * Outputs this feed directly to the browser - for on-the-fly feed generation
+ * @since 1.7.2-mod
+ *
+ * still missing: proper header output - currently you have to add it manually
+ */
+ function outputFeed() {
+ echo $this->createFeed();
+ }
+
+
+}
+
+
+/**
+ * FeedDate is an internal class that stores a date for a feed or feed item.
+ * Usually, you won't need to use this.
+ */
+class FeedDate {
+ var $unix;
+
+ /**
+ * Creates a new instance of FeedDate representing a given date.
+ * Accepts RFC 822, ISO 8601 date formats as well as unix time stamps.
+ * @param mixed $dateString optional the date this FeedDate will represent. If not specified, the current date and time is used.
+ */
+ function FeedDate($dateString="") {
+ if ($dateString=="") $dateString = date("r");
+
+ if (is_numeric($dateString)) {
+ $this->unix = $dateString;
+ return;
+ }
+ if (preg_match("~(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s+)?(\\d{1,2})\\s+([a-zA-Z]{3})\\s+(\\d{4})\\s+(\\d{2}):(\\d{2}):(\\d{2})\\s+(.*)~",$dateString,$matches)) {
+ $months = Array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12);
+ $this->unix = mktime($matches[4],$matches[5],$matches[6],$months[$matches[2]],$matches[1],$matches[3]);
+ if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') {
+ $tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;
+ } else {
+ if (strlen($matches[7])==1) {
+ $oneHour = 3600;
+ $ord = ord($matches[7]);
+ if ($ord < ord("M")) {
+ $tzOffset = (ord("A") - $ord - 1) * $oneHour;
+ } elseif ($ord >= ord("M") AND $matches[7]!="Z") {
+ $tzOffset = ($ord - ord("M")) * $oneHour;
+ } elseif ($matches[7]=="Z") {
+ $tzOffset = 0;
+ }
+ }
+ switch ($matches[7]) {
+ case "UT":
+ case "GMT": $tzOffset = 0;
+ }
+ }
+ $this->unix += $tzOffset;
+ return;
+ }
+ if (preg_match("~(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(.*)~",$dateString,$matches)) {
+ $this->unix = mktime($matches[4],$matches[5],$matches[6],$matches[2],$matches[3],$matches[1]);
+ if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') {
+ $tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;
+ } else {
+ if ($matches[7]=="Z") {
+ $tzOffset = 0;
+ }
+ }
+ $this->unix += $tzOffset;
+ return;
+ }
+ $this->unix = 0;
+ }
+
+ /**
+ * Gets the date stored in this FeedDate as an RFC 822 date.
+ *
+ * @return a date in RFC 822 format
+ */
+ function rfc822() {
+ //return gmdate("r",$this->unix);
+ $date = gmdate("D, d M Y H:i:s", $this->unix);
+ if (TIME_ZONE!="") $date .= " ".str_replace(":","",TIME_ZONE);
+ return $date;
+ }
+
+ /**
+ * Gets the date stored in this FeedDate as an ISO 8601 date.
+ *
+ * @return a date in ISO 8601 (RFC 3339) format
+ */
+ function iso8601() {
+ $date = gmdate("Y-m-d\TH:i:sO",$this->unix);
+ if (TIME_ZONE!="") $date = str_replace("+0000",TIME_ZONE,$date);
+ $date = substr($date,0,22) . ':' . substr($date,-2);
+ return $date;
+ }
+
+
+ /**
+ * Gets the date stored in this FeedDate as unix time stamp.
+ *
+ * @return a date as a unix time stamp
+ */
+ function unix() {
+ return $this->unix;
+ }
+}
+
+
+/**
+ * RSSCreator10 is a FeedCreator that implements RDF Site Summary (RSS) 1.0.
+ *
+ * @see http://www.purl.org/rss/1.0/
+ * @since 1.3
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class RSSCreator10 extends FeedCreator {
+
+ /**
+ * Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0.
+ * The feed will contain all items previously added in the same order.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ if ($this->cssStyleSheet=="") {
+ $cssStyleSheet = "http://www.w3.org/2000/08/w3c-synd/style.css";
+ }
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<rdf:RDF\n";
+ $feed.= " xmlns=\"http://purl.org/rss/1.0/\"\n";
+ $feed.= " xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n";
+ $feed.= " xmlns:slash=\"http://purl.org/rss/1.0/modules/slash/\"\n";
+ $feed.= " xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n";
+ $feed.= " <channel rdf:about=\"".$this->syndicationURL."\">\n";
+ $feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
+ $feed.= " <description>".htmlspecialchars($this->description)."</description>\n";
+ $feed.= " <link>".$this->link."</link>\n";
+ if ($this->image!=null) {
+ $feed.= " <image rdf:resource=\"".$this->image->url."\" />\n";
+ }
+ $now = new FeedDate();
+ $feed.= " <dc:date>".htmlspecialchars($now->iso8601())."</dc:date>\n";
+ $feed.= " <items>\n";
+ $feed.= " <rdf:Seq>\n";
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <rdf:li rdf:resource=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
+ }
+ $feed.= " </rdf:Seq>\n";
+ $feed.= " </items>\n";
+ $feed.= " </channel>\n";
+ if ($this->image!=null) {
+ $feed.= " <image rdf:about=\"".$this->image->url."\">\n";
+ $feed.= " <title>".htmlspecialchars($this->image->title)."</title>\n";
+ $feed.= " <link>".$this->image->link."</link>\n";
+ $feed.= " <url>".$this->image->url."</url>\n";
+ $feed.= " </image>\n";
+ }
+ $feed.= $this->_createAdditionalElements($this->additionalElements, " ");
+
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <item rdf:about=\"".htmlspecialchars($this->items[$i]->link)."\">\n";
+ //$feed.= " <dc:type>Posting</dc:type>\n";
+ $feed.= " <dc:format>text/html</dc:format>\n";
+ if ($this->items[$i]->date!=null) {
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <dc:date>".htmlspecialchars($itemDate->iso8601())."</dc:date>\n";
+ }
+ if ($this->items[$i]->source!="") {
+ $feed.= " <dc:source>".htmlspecialchars($this->items[$i]->source)."</dc:source>\n";
+ }
+ if ($this->items[$i]->author!="") {
+ $feed.= " <dc:creator>".htmlspecialchars($this->items[$i]->author)."</dc:creator>\n";
+ }
+ $feed.= " <title>".htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")))."</title>\n";
+ $feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
+ $feed.= " <description>".htmlspecialchars($this->items[$i]->description)."</description>\n";
+ $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+ $feed.= " </item>\n";
+ }
+ $feed.= "</rdf:RDF>\n";
+ return $feed;
+ }
+}
+
+
+
+/**
+ * RSSCreator091 is a FeedCreator that implements RSS 0.91 Spec, revision 3.
+ *
+ * @see http://my.netscape.com/publish/formats/rss-spec-0.91.html
+ * @since 1.3
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class RSSCreator091 extends FeedCreator {
+
+ /**
+ * Stores this RSS feed's version number.
+ * @access private
+ */
+ var $RSSVersion;
+
+ function RSSCreator091() {
+ $this->_setRSSVersion("0.91");
+ $this->contentType = "application/rss+xml";
+ }
+
+ /**
+ * Sets this RSS feed's version number.
+ * @access private
+ */
+ function _setRSSVersion($version) {
+ $this->RSSVersion = $version;
+ }
+
+ /**
+ * Builds the RSS feed's text. The feed will be compliant to RDF Site Summary (RSS) 1.0.
+ * The feed will contain all items previously added in the same order.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<rss version=\"".$this->RSSVersion."\">\n";
+ $feed.= " <channel>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
+ $this->descriptionTruncSize = 500;
+ $feed.= " <description>".$this->getDescription()."</description>\n";
+ $feed.= " <link>".$this->link."</link>\n";
+ $now = new FeedDate();
+ $feed.= " <lastBuildDate>".htmlspecialchars($now->rfc822())."</lastBuildDate>\n";
+ $feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
+
+ if ($this->image!=null) {
+ $feed.= " <image>\n";
+ $feed.= " <url>".$this->image->url."</url>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->image->title),100)."</title>\n";
+ $feed.= " <link>".$this->image->link."</link>\n";
+ if ($this->image->width!="") {
+ $feed.= " <width>".$this->image->width."</width>\n";
+ }
+ if ($this->image->height!="") {
+ $feed.= " <height>".$this->image->height."</height>\n";
+ }
+ if ($this->image->description!="") {
+ $feed.= " <description>".$this->image->getDescription()."</description>\n";
+ }
+ $feed.= " </image>\n";
+ }
+ if ($this->language!="") {
+ $feed.= " <language>".$this->language."</language>\n";
+ }
+ if ($this->copyright!="") {
+ $feed.= " <copyright>".FeedCreator::iTrunc(htmlspecialchars($this->copyright),100)."</copyright>\n";
+ }
+ if ($this->editor!="") {
+ $feed.= " <managingEditor>".FeedCreator::iTrunc(htmlspecialchars($this->editor),100)."</managingEditor>\n";
+ }
+ if ($this->webmaster!="") {
+ $feed.= " <webMaster>".FeedCreator::iTrunc(htmlspecialchars($this->webmaster),100)."</webMaster>\n";
+ }
+ if ($this->pubDate!="") {
+ $pubDate = new FeedDate($this->pubDate);
+ $feed.= " <pubDate>".htmlspecialchars($pubDate->rfc822())."</pubDate>\n";
+ }
+ if ($this->category!="") {
+ // Changed for DokuWiki: multiple categories are possible
+ if(is_array($this->category)) foreach($this->category as $cat){
+ $feed.= " <category>".htmlspecialchars($cat)."</category>\n";
+ }else{
+ $feed.= " <category>".htmlspecialchars($this->category)."</category>\n";
+ }
+ }
+ if ($this->docs!="") {
+ $feed.= " <docs>".FeedCreator::iTrunc(htmlspecialchars($this->docs),500)."</docs>\n";
+ }
+ if ($this->ttl!="") {
+ $feed.= " <ttl>".htmlspecialchars($this->ttl)."</ttl>\n";
+ }
+ if ($this->rating!="") {
+ $feed.= " <rating>".FeedCreator::iTrunc(htmlspecialchars($this->rating),500)."</rating>\n";
+ }
+ if ($this->skipHours!="") {
+ $feed.= " <skipHours>".htmlspecialchars($this->skipHours)."</skipHours>\n";
+ }
+ if ($this->skipDays!="") {
+ $feed.= " <skipDays>".htmlspecialchars($this->skipDays)."</skipDays>\n";
+ }
+ $feed.= $this->_createAdditionalElements($this->additionalElements, " ");
+
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <item>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n";
+ $feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
+ $feed.= " <description>".$this->items[$i]->getDescription()."</description>\n";
+
+ if ($this->items[$i]->author!="") {
+ $feed.= " <author>".htmlspecialchars($this->items[$i]->author)."</author>\n";
+ }
+ /*
+ // on hold
+ if ($this->items[$i]->source!="") {
+ $feed.= " <source>".htmlspecialchars($this->items[$i]->source)."</source>\n";
+ }
+ */
+ if ($this->items[$i]->category!="") {
+ // Changed for DokuWiki: multiple categories are possible
+ if(is_array($this->items[$i]->category)) foreach($this->items[$i]->category as $cat){
+ $feed.= " <category>".htmlspecialchars($cat)."</category>\n";
+ }else{
+ $feed.= " <category>".htmlspecialchars($this->items[$i]->category)."</category>\n";
+ }
+ }
+
+ if ($this->items[$i]->comments!="") {
+ $feed.= " <comments>".htmlspecialchars($this->items[$i]->comments)."</comments>\n";
+ }
+ if ($this->items[$i]->date!="") {
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <pubDate>".htmlspecialchars($itemDate->rfc822())."</pubDate>\n";
+ }
+ if ($this->items[$i]->guid!="") {
+ $feed.= " <guid>".htmlspecialchars($this->items[$i]->guid)."</guid>\n";
+ }
+ $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+
+ if ($this->RSSVersion == "2.0" && $this->items[$i]->enclosure != NULL)
+ {
+ $feed.= " <enclosure url=\"";
+ $feed.= $this->items[$i]->enclosure->url;
+ $feed.= "\" length=\"";
+ $feed.= $this->items[$i]->enclosure->length;
+ $feed.= "\" type=\"";
+ $feed.= $this->items[$i]->enclosure->type;
+ $feed.= "\"/>\n";
+ }
+
+
+
+ $feed.= " </item>\n";
+ }
+
+ $feed.= " </channel>\n";
+ $feed.= "</rss>\n";
+ return $feed;
+ }
+}
+
+
+
+/**
+ * RSSCreator20 is a FeedCreator that implements RDF Site Summary (RSS) 2.0.
+ *
+ * @see http://backend.userland.com/rss
+ * @since 1.3
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class RSSCreator20 extends RSSCreator091 {
+
+ function RSSCreator20() {
+ parent::_setRSSVersion("2.0");
+ }
+
+}
+
+
+/**
+ * PIECreator01 is a FeedCreator that implements the emerging PIE specification,
+ * as in http://intertwingly.net/wiki/pie/Syntax.
+ *
+ * @deprecated
+ * @since 1.3
+ * @author Scott Reynen <scott@randomchaos.com> and Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class PIECreator01 extends FeedCreator {
+
+ function PIECreator01() {
+ $this->encoding = "utf-8";
+ }
+
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<feed version=\"0.1\" xmlns=\"http://example.com/newformat#\">\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</title>\n";
+ $this->truncSize = 500;
+ $feed.= " <subtitle>".$this->getDescription()."</subtitle>\n";
+ $feed.= " <link>".$this->link."</link>\n";
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <entry>\n";
+ $feed.= " <title>".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100)."</title>\n";
+ $feed.= " <link>".htmlspecialchars($this->items[$i]->link)."</link>\n";
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n";
+ $feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n";
+ $feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n";
+ $feed.= " <id>".htmlspecialchars($this->items[$i]->guid)."</id>\n";
+ if ($this->items[$i]->author!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
+ if ($this->items[$i]->authorEmail!="") {
+ $feed.= " <email>".$this->items[$i]->authorEmail."</email>\n";
+ }
+ $feed.=" </author>\n";
+ }
+ $feed.= " <content type=\"text/html\" xml:lang=\"en-us\">\n";
+ $feed.= " <div xmlns=\"http://www.w3.org/1999/xhtml\">".$this->items[$i]->getDescription()."</div>\n";
+ $feed.= " </content>\n";
+ $feed.= " </entry>\n";
+ }
+ $feed.= "</feed>\n";
+ return $feed;
+ }
+}
+
+/**
+ * AtomCreator10 is a FeedCreator that implements the atom specification,
+ * as in http://www.atomenabled.org/developers/syndication/atom-format-spec.php
+ * Please note that just by using AtomCreator10 you won't automatically
+ * produce valid atom files. For example, you have to specify either an editor
+ * for the feed or an author for every single feed item.
+ *
+ * Some elements have not been implemented yet. These are (incomplete list):
+ * author URL, item author's email and URL, item contents, alternate links,
+ * other link content types than text/html. Some of them may be created with
+ * AtomCreator10::additionalElements.
+ *
+ * @see FeedCreator#additionalElements
+ * @since 1.7.2-mod (modified)
+ * @author Mohammad Hafiz Ismail (mypapit@gmail.com)
+ */
+ class AtomCreator10 extends FeedCreator {
+
+ function AtomCreator10() {
+ $this->contentType = "application/atom+xml";
+ $this->encoding = "utf-8";
+ }
+
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<feed xmlns=\"http://www.w3.org/2005/Atom\"";
+ if ($this->language!="") {
+ $feed.= " xml:lang=\"".$this->language."\"";
+ }
+ $feed.= ">\n";
+ $feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
+ $feed.= " <subtitle>".htmlspecialchars($this->description)."</subtitle>\n";
+ $feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->link)."\"/>\n";
+ $feed.= " <id>".htmlspecialchars($this->link)."</id>\n";
+ $now = new FeedDate();
+ $feed.= " <updated>".htmlspecialchars($now->iso8601())."</updated>\n";
+ if ($this->editor!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".$this->editor."</name>\n";
+ if ($this->editorEmail!="") {
+ $feed.= " <email>".$this->editorEmail."</email>\n";
+ }
+ $feed.= " </author>\n";
+ }
+ $feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
+ $feed.= "<link rel=\"self\" type=\"application/atom+xml\" href=\"". $this->syndicationURL . "\" />\n";
+ $feed.= $this->_createAdditionalElements($this->additionalElements, " ");
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <entry>\n";
+ $feed.= " <title>".htmlspecialchars(strip_tags($this->items[$i]->title))."</title>\n";
+ $feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
+ if ($this->items[$i]->date=="") {
+ $this->items[$i]->date = time();
+ }
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <published>".htmlspecialchars($itemDate->iso8601())."</published>\n";
+ $feed.= " <updated>".htmlspecialchars($itemDate->iso8601())."</updated>\n";
+ $feed.= " <id>".htmlspecialchars($this->items[$i]->link)."</id>\n";
+ $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+ if ($this->items[$i]->author!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
+ $feed.= " </author>\n";
+ }
+ if ($this->items[$i]->description!="") {
+ $feed.= " <summary>".htmlspecialchars($this->items[$i]->description)."</summary>\n";
+ }
+ if ($this->items[$i]->enclosure != NULL) {
+ $feed.=" <link rel=\"enclosure\" href=\"". $this->items[$i]->enclosure->url ."\" type=\"". $this->items[$i]->enclosure->type."\" length=\"". $this->items[$i]->enclosure->length . "\" />\n";
+ }
+ $feed.= " </entry>\n";
+ }
+ $feed.= "</feed>\n";
+ return $feed;
+ }
+
+
+}
+
+
+/**
+ * AtomCreator03 is a FeedCreator that implements the atom specification,
+ * as in http://www.intertwingly.net/wiki/pie/FrontPage.
+ * Please note that just by using AtomCreator03 you won't automatically
+ * produce valid atom files. For example, you have to specify either an editor
+ * for the feed or an author for every single feed item.
+ *
+ * Some elements have not been implemented yet. These are (incomplete list):
+ * author URL, item author's email and URL, item contents, alternate links,
+ * other link content types than text/html. Some of them may be created with
+ * AtomCreator03::additionalElements.
+ *
+ * @see FeedCreator#additionalElements
+ * @since 1.6
+ * @author Kai Blankenhorn <kaib@bitfolge.de>, Scott Reynen <scott@randomchaos.com>
+ */
+class AtomCreator03 extends FeedCreator {
+
+ function AtomCreator03() {
+ $this->contentType = "application/atom+xml";
+ $this->encoding = "utf-8";
+ }
+
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<feed version=\"0.3\" xmlns=\"http://purl.org/atom/ns#\"";
+ if ($this->language!="") {
+ $feed.= " xml:lang=\"".$this->language."\"";
+ }
+ $feed.= ">\n";
+ $feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
+ $feed.= " <tagline>".htmlspecialchars($this->description)."</tagline>\n";
+ $feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->link)."\"/>\n";
+ $feed.= " <id>".htmlspecialchars($this->link)."</id>\n";
+ $now = new FeedDate();
+ $feed.= " <modified>".htmlspecialchars($now->iso8601())."</modified>\n";
+ if ($this->editor!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".$this->editor."</name>\n";
+ if ($this->editorEmail!="") {
+ $feed.= " <email>".$this->editorEmail."</email>\n";
+ }
+ $feed.= " </author>\n";
+ }
+ $feed.= " <generator>".FEEDCREATOR_VERSION."</generator>\n";
+ $feed.= $this->_createAdditionalElements($this->additionalElements, " ");
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <entry>\n";
+ $feed.= " <title>".htmlspecialchars(strip_tags($this->items[$i]->title))."</title>\n";
+ $feed.= " <link rel=\"alternate\" type=\"text/html\" href=\"".htmlspecialchars($this->items[$i]->link)."\"/>\n";
+ if ($this->items[$i]->date=="") {
+ $this->items[$i]->date = time();
+ }
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= " <created>".htmlspecialchars($itemDate->iso8601())."</created>\n";
+ $feed.= " <issued>".htmlspecialchars($itemDate->iso8601())."</issued>\n";
+ $feed.= " <modified>".htmlspecialchars($itemDate->iso8601())."</modified>\n";
+ $feed.= " <id>".htmlspecialchars($this->items[$i]->link)."</id>\n";
+ $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " ");
+ if ($this->items[$i]->author!="") {
+ $feed.= " <author>\n";
+ $feed.= " <name>".htmlspecialchars($this->items[$i]->author)."</name>\n";
+ $feed.= " </author>\n";
+ }
+ if ($this->items[$i]->description!="") {
+ $feed.= " <summary>".htmlspecialchars($this->items[$i]->description)."</summary>\n";
+ }
+ $feed.= " </entry>\n";
+ }
+ $feed.= "</feed>\n";
+ return $feed;
+ }
+}
+
+
+/**
+ * MBOXCreator is a FeedCreator that implements the mbox format
+ * as described in http://www.qmail.org/man/man5/mbox.html
+ *
+ * @since 1.3
+ * @author Kai Blankenhorn <kaib@bitfolge.de>
+ */
+class MBOXCreator extends FeedCreator {
+
+ function MBOXCreator() {
+ $this->contentType = "text/plain";
+ $this->encoding = "utf-8";
+ }
+
+ function qp_enc($input = "", $line_max = 76) {
+ $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F');
+ $lines = preg_split("/(?:\r\n|\r|\n)/", $input);
+ $eol = "\r\n";
+ $escape = "=";
+ $output = "";
+ while( list(, $line) = each($lines) ) {
+ //$line = rtrim($line); // remove trailing white space -> no =20\r\n necessary
+ $linlen = strlen($line);
+ $newline = "";
+ for($i = 0; $i < $linlen; $i++) {
+ $c = substr($line, $i, 1);
+ $dec = ord($c);
+ if ( ($dec == 32) && ($i == ($linlen - 1)) ) { // convert space at eol only
+ $c = "=20";
+ } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required
+ $h2 = floor($dec/16); $h1 = floor($dec%16);
+ $c = $escape.$hex["$h2"].$hex["$h1"];
+ }
+ if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted
+ $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay
+ $newline = "";
+ }
+ $newline .= $c;
+ } // end of for
+ $output .= $newline.$eol;
+ }
+ return trim($output);
+ }
+
+
+ /**
+ * Builds the MBOX contents.
+ * @return string the feed's complete text
+ */
+ function createFeed() {
+ for ($i=0;$i<count($this->items);$i++) {
+ if ($this->items[$i]->author!="") {
+ $from = $this->items[$i]->author;
+ } else {
+ $from = $this->title;
+ }
+ $itemDate = new FeedDate($this->items[$i]->date);
+ $feed.= "From ".strtr(MBOXCreator::qp_enc($from)," ","_")." ".date("D M d H:i:s Y",$itemDate->unix())."\n";
+ $feed.= "Content-Type: text/plain;\n";
+ $feed.= " charset=\"".$this->encoding."\"\n";
+ $feed.= "Content-Transfer-Encoding: quoted-printable\n";
+ $feed.= "Content-Type: text/plain\n";
+ $feed.= "From: \"".MBOXCreator::qp_enc($from)."\"\n";
+ $feed.= "Date: ".$itemDate->rfc822()."\n";
+ $feed.= "Subject: ".MBOXCreator::qp_enc(FeedCreator::iTrunc($this->items[$i]->title,100))."\n";
+ $feed.= "\n";
+ $body = chunk_split(MBOXCreator::qp_enc($this->items[$i]->description));
+ $feed.= preg_replace("~\nFrom ([^\n]*)(\n?)~","\n>From $1$2\n",$body);
+ $feed.= "\n";
+ $feed.= "\n";
+ }
+ return $feed;
+ }
+
+ /**
+ * Generate a filename for the feed cache file. Overridden from FeedCreator to prevent XML data types.
+ * @return string the feed cache filename
+ * @since 1.4
+ * @access private
+ */
+ function _generateFilename() {
+ $fileInfo = pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".mbox";
+ }
+}
+
+
+/**
+ * OPMLCreator is a FeedCreator that implements OPML 1.0.
+ *
+ * @see http://opml.scripting.com/spec
+ * @author Dirk Clemens, Kai Blankenhorn
+ * @since 1.5
+ */
+class OPMLCreator extends FeedCreator {
+
+ function OPMLCreator() {
+ $this->encoding = "utf-8";
+ }
+
+ function createFeed() {
+ $feed = "<?xml version=\"1.0\" encoding=\"".$this->encoding."\"?>\n";
+ $feed.= $this->_createGeneratorComment();
+ $feed.= $this->_createStylesheetReferences();
+ $feed.= "<opml xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n";
+ $feed.= " <head>\n";
+ $feed.= " <title>".htmlspecialchars($this->title)."</title>\n";
+ if ($this->pubDate!="") {
+ $date = new FeedDate($this->pubDate);
+ $feed.= " <dateCreated>".$date->rfc822()."</dateCreated>\n";
+ }
+ if ($this->lastBuildDate!="") {
+ $date = new FeedDate($this->lastBuildDate);
+ $feed.= " <dateModified>".$date->rfc822()."</dateModified>\n";
+ }
+ if ($this->editor!="") {
+ $feed.= " <ownerName>".$this->editor."</ownerName>\n";
+ }
+ if ($this->editorEmail!="") {
+ $feed.= " <ownerEmail>".$this->editorEmail."</ownerEmail>\n";
+ }
+ $feed.= " </head>\n";
+ $feed.= " <body>\n";
+ for ($i=0;$i<count($this->items);$i++) {
+ $feed.= " <outline type=\"rss\" ";
+ $title = htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")));
+ $feed.= " title=\"".$title."\"";
+ $feed.= " text=\"".$title."\"";
+ //$feed.= " description=\"".htmlspecialchars($this->items[$i]->description)."\"";
+ $feed.= " url=\"".htmlspecialchars($this->items[$i]->link)."\"";
+ $feed.= "/>\n";
+ }
+ $feed.= " </body>\n";
+ $feed.= "</opml>\n";
+ return $feed;
+ }
+}
+
+
+
+/**
+ * HTMLCreator is a FeedCreator that writes an HTML feed file to a specific
+ * location, overriding the createFeed method of the parent FeedCreator.
+ * The HTML produced can be included over http by scripting languages, or serve
+ * as the source for an IFrame.
+ * All output by this class is embedded in <div></div> tags to enable formatting
+ * using CSS.
+ *
+ * @author Pascal Van Hecke
+ * @since 1.7
+ */
+class HTMLCreator extends FeedCreator {
+
+ var $contentType = "text/html";
+
+ /**
+ * Contains HTML to be output at the start of the feed's html representation.
+ */
+ var $header;
+
+ /**
+ * Contains HTML to be output at the end of the feed's html representation.
+ */
+ var $footer ;
+
+ /**
+ * Contains HTML to be output between entries. A separator is only used in
+ * case of multiple entries.
+ */
+ var $separator;
+
+ /**
+ * Used to prefix the stylenames to make sure they are unique
+ * and do not clash with stylenames on the users' page.
+ */
+ var $stylePrefix;
+
+ /**
+ * Determines whether the links open in a new window or not.
+ */
+ var $openInNewWindow = true;
+
+ var $imageAlign ="right";
+
+ /**
+ * In case of very simple output you may want to get rid of the style tags,
+ * hence this variable. There's no equivalent on item level, but of course you can
+ * add strings to it while iterating over the items ($this->stylelessOutput .= ...)
+ * and when it is non-empty, ONLY the styleless output is printed, the rest is ignored
+ * in the function createFeed().
+ */
+ var $stylelessOutput ="";
+
+ /**
+ * Writes the HTML.
+ * @return string the scripts's complete text
+ */
+ function createFeed() {
+ // if there is styleless output, use the content of this variable and ignore the rest
+ if ($this->stylelessOutput!="") {
+ return $this->stylelessOutput;
+ }
+
+ //if no stylePrefix is set, generate it yourself depending on the script name
+ if ($this->stylePrefix=="") {
+ $this->stylePrefix = str_replace(".", "_", $this->_generateFilename())."_";
+ }
+
+ //set an openInNewWindow_token_to be inserted or not
+ if ($this->openInNewWindow) {
+ $targetInsert = " target='_blank'";
+ }
+
+ // use this array to put the lines in and implode later with "document.write" javascript
+ $feedArray = array();
+ if ($this->image!=null) {
+ $imageStr = "<a href='".$this->image->link."'".$targetInsert.">".
+ "<img src='".$this->image->url."' border='0' alt='".
+ FeedCreator::iTrunc(htmlspecialchars($this->image->title),100).
+ "' align='".$this->imageAlign."' ";
+ if ($this->image->width) {
+ $imageStr .=" width='".$this->image->width. "' ";
+ }
+ if ($this->image->height) {
+ $imageStr .=" height='".$this->image->height."' ";
+ }
+ $imageStr .="/></a>";
+ $feedArray[] = $imageStr;
+ }
+
+ if ($this->title) {
+ $feedArray[] = "<div class='".$this->stylePrefix."title'><a href='".$this->link."' ".$targetInsert." class='".$this->stylePrefix."title'>".
+ FeedCreator::iTrunc(htmlspecialchars($this->title),100)."</a></div>";
+ }
+ if ($this->getDescription()) {
+ $feedArray[] = "<div class='".$this->stylePrefix."description'>".
+ str_replace("]]>", "", str_replace("<![CDATA[", "", $this->getDescription())).
+ "</div>";
+ }
+
+ if ($this->header) {
+ $feedArray[] = "<div class='".$this->stylePrefix."header'>".$this->header."</div>";
+ }
+
+ for ($i=0;$i<count($this->items);$i++) {
+ if ($this->separator and $i > 0) {
+ $feedArray[] = "<div class='".$this->stylePrefix."separator'>".$this->separator."</div>";
+ }
+
+ if ($this->items[$i]->title) {
+ if ($this->items[$i]->link) {
+ $feedArray[] =
+ "<div class='".$this->stylePrefix."item_title'><a href='".$this->items[$i]->link."' class='".$this->stylePrefix.
+ "item_title'".$targetInsert.">".FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100).
+ "</a></div>";
+ } else {
+ $feedArray[] =
+ "<div class='".$this->stylePrefix."item_title'>".
+ FeedCreator::iTrunc(htmlspecialchars(strip_tags($this->items[$i]->title)),100).
+ "</div>";
+ }
+ }
+ if ($this->items[$i]->getDescription()) {
+ $feedArray[] =
+ "<div class='".$this->stylePrefix."item_description'>".
+ str_replace("]]>", "", str_replace("<![CDATA[", "", $this->items[$i]->getDescription())).
+ "</div>";
+ }
+ }
+ if ($this->footer) {
+ $feedArray[] = "<div class='".$this->stylePrefix."footer'>".$this->footer."</div>";
+ }
+
+ $feed= "".join($feedArray, "\r\n");
+ return $feed;
+ }
+
+ /**
+ * Overrrides parent to produce .html extensions
+ *
+ * @return string the feed cache filename
+ * @since 1.4
+ * @access private
+ */
+ function _generateFilename() {
+ $fileInfo = pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".html";
+ }
+}
+
+
+/**
+ * JSCreator is a class that writes a js file to a specific
+ * location, overriding the createFeed method of the parent HTMLCreator.
+ *
+ * @author Pascal Van Hecke
+ */
+class JSCreator extends HTMLCreator {
+ var $contentType = "text/javascript";
+
+ /**
+ * writes the javascript
+ * @return string the scripts's complete text
+ */
+ function createFeed()
+ {
+ $feed = parent::createFeed();
+ $feedArray = explode("\n",$feed);
+
+ $jsFeed = "";
+ foreach ($feedArray as $value) {
+ $jsFeed .= "document.write('".trim(addslashes($value))."');\n";
+ }
+ return $jsFeed;
+ }
+
+ /**
+ * Overrrides parent to produce .js extensions
+ *
+ * @return string the feed cache filename
+ * @since 1.4
+ * @access private
+ */
+ function _generateFilename() {
+ $fileInfo = pathinfo($_SERVER["PHP_SELF"]);
+ return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".js";
+ }
+
+}
+
+/**
+ * This class allows to override the hardcoded charset
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+class DokuWikiFeedCreator extends UniversalFeedCreator{
+ function createFeed($format = "RSS0.91",$encoding='iso-8859-15') {
+ $this->_setFormat($format);
+ $this->_feed->encoding = $encoding;
+ return $this->_feed->createFeed();
+ }
+}
+
+
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/form.php b/mod/dokuwiki/vendors/dokuwiki/inc/form.php
new file mode 100644
index 000000000..a514526b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/form.php
@@ -0,0 +1,918 @@
+<?php
+/**
+ * DokuWiki XHTML Form
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/html.php');
+
+/**
+ * Class for creating simple HTML forms.
+ *
+ * The forms is built from a list of pseudo-tags (arrays with expected keys).
+ * Every pseudo-tag must have the key '_elem' set to the name of the element.
+ * When printed, the form class calls functions named 'form_$type' for each
+ * element it contains.
+ *
+ * Standard practice is for non-attribute keys in a pseudo-element to start
+ * with '_'. Other keys are HTML attributes that will be included in the element
+ * tag. That way, the element output functions can pass the pseudo-element
+ * directly to buildAttributes.
+ *
+ * See the form_make* functions later in this file.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+class Doku_Form {
+
+ // Form id attribute
+ var $params = array();
+
+ // Draw a border around form fields.
+ // Adds <fieldset></fieldset> around the elements
+ var $_infieldset = false;
+
+ // Hidden form fields.
+ var $_hidden = array();
+
+ // Array of pseudo-tags
+ var $_content = array();
+
+ /**
+ * Constructor
+ *
+ * Sets parameters and autoadds a security token. The old calling convention
+ * with up to four parameters is deprecated, instead the first parameter
+ * should be an array with parameters.
+ *
+ * @param mixed $params Parameters for the HTML form element; Using the
+ * deprecated calling convention this is the ID
+ * attribute of the form
+ * @param string $action (optional, deprecated) submit URL, defaults to
+ * current page
+ * @param string $method (optional, deprecated) 'POST' or 'GET', default
+ * is POST
+ * @param string $enctype (optional, deprecated) Encoding type of the
+ * data
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function Doku_Form($params, $action=false, $method=false, $enctype=false) {
+ if(!is_array($params)) {
+ $this->params = array('id' => $params);
+ if ($action !== false) $this->params['action'] = $action;
+ if ($method !== false) $this->params['method'] = strtolower($method);
+ if ($enctype !== false) $this->params['enctype'] = $enctype;
+ } else {
+ $this->params = $params;
+ }
+
+ if (!isset($this->params['method'])) {
+ $this->params['method'] = 'post';
+ } else {
+ $this->params['method'] = strtolower($this->params['method']);
+ }
+
+ if (!isset($this->params['action'])) {
+ $this->params['action'] = '';
+ }
+
+ $this->addHidden('sectok', getSecurityToken());
+ }
+
+ /**
+ * startFieldset
+ *
+ * Add <fieldset></fieldset> tags around fields.
+ * Usually results in a border drawn around the form.
+ *
+ * @param string $legend Label that will be printed with the border.
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function startFieldset($legend) {
+ if ($this->_infieldset) {
+ $this->addElement(array('_elem'=>'closefieldset'));
+ }
+ $this->addElement(array('_elem'=>'openfieldset', '_legend'=>$legend));
+ $this->_infieldset = true;
+ }
+
+ /**
+ * endFieldset
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function endFieldset() {
+ if ($this->_infieldset) {
+ $this->addElement(array('_elem'=>'closefieldset'));
+ }
+ $this->_infieldset = false;
+ }
+
+ /**
+ * addHidden
+ *
+ * Adds a name/value pair as a hidden field.
+ * The value of the field (but not the name) will be passed to
+ * formText() before printing.
+ *
+ * @param string $name Field name.
+ * @param string $value Field value. If null, remove a previously added field.
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function addHidden($name, $value) {
+ if (is_null($value))
+ unset($this->_hidden[$name]);
+ else
+ $this->_hidden[$name] = $value;
+ }
+
+ /**
+ * addElement
+ *
+ * Appends a content element to the form.
+ * The element can be either a pseudo-tag or string.
+ * If string, it is printed without escaping special chars. *
+ *
+ * @param string $elem Pseudo-tag or string to add to the form.
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function addElement($elem) {
+ $this->_content[] = $elem;
+ }
+
+ /**
+ * insertElement
+ *
+ * Inserts a content element at a position.
+ *
+ * @param string $pos 0-based index where the element will be inserted.
+ * @param string $elem Pseudo-tag or string to add to the form.
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function insertElement($pos, $elem) {
+ array_splice($this->_content, $pos, 0, array($elem));
+ }
+
+ /**
+ * replaceElement
+ *
+ * Replace with NULL to remove an element.
+ *
+ * @param int $pos 0-based index the element will be placed at.
+ * @param string $elem Pseudo-tag or string to add to the form.
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function replaceElement($pos, $elem) {
+ $rep = array();
+ if (!is_null($elem)) $rep[] = $elem;
+ array_splice($this->_content, $pos, 1, $rep);
+ }
+
+ /**
+ * findElementByType
+ *
+ * Gets the position of the first of a type of element.
+ *
+ * @param string $type Element type to look for.
+ * @return array pseudo-element if found, false otherwise
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function findElementByType($type) {
+ foreach ($this->_content as $pos=>$elem) {
+ if (is_array($elem) && $elem['_elem'] == $type)
+ return $pos;
+ }
+ return false;
+ }
+
+ /**
+ * findElementById
+ *
+ * Gets the position of the element with an ID attribute.
+ *
+ * @param string $id ID of the element to find.
+ * @return array pseudo-element if found, false otherwise
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function findElementById($id) {
+ foreach ($this->_content as $pos=>$elem) {
+ if (is_array($elem) && isset($elem['id']) && $elem['id'] == $id)
+ return $pos;
+ }
+ return false;
+ }
+
+ /**
+ * findElementByAttribute
+ *
+ * Gets the position of the first element with a matching attribute value.
+ *
+ * @param string $name Attribute name.
+ * @param string $value Attribute value.
+ * @return array pseudo-element if found, false otherwise
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function findElementByAttribute($name, $value) {
+ foreach ($this->_content as $pos=>$elem) {
+ if (is_array($elem) && isset($elem[$name]) && $elem[$name] == $value)
+ return $pos;
+ }
+ return false;
+ }
+
+ /**
+ * getElementAt
+ *
+ * Returns a reference to the element at a position.
+ * A position out-of-bounds will return either the
+ * first (underflow) or last (overflow) element.
+ *
+ * @param int $pos 0-based index
+ * @return arrayreference pseudo-element
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function &getElementAt($pos) {
+ if ($pos < 0) $pos = count($this->_content) + $pos;
+ if ($pos < 0) $pos = 0;
+ if ($pos >= count($this->_content)) $pos = count($this->_content) - 1;
+ return $this->_content[$pos];
+ }
+
+ /**
+ * Return the assembled HTML for the form.
+ *
+ * Each element in the form will be passed to a function named
+ * 'form_$type'. The function should return the HTML to be printed.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function getForm() {
+ global $lang;
+ $form = '';
+ $this->params['accept-charset'] = $lang['encoding'];
+ $form .= '<form ' . html_attbuild($this->params) . '><div class="no">' . DOKU_LF;
+ if (!empty($this->_hidden)) {
+ foreach ($this->_hidden as $name=>$value)
+ $form .= form_hidden(array('name'=>$name, 'value'=>$value));
+ }
+ foreach ($this->_content as $element) {
+ if (is_array($element)) {
+ $elem_type = $element['_elem'];
+ if (function_exists('form_'.$elem_type)) {
+ $form .= call_user_func('form_'.$elem_type, $element).DOKU_LF;
+ }
+ } else {
+ $form .= $element;
+ }
+ }
+ if ($this->_infieldset) $form .= form_closefieldset().DOKU_LF;
+ $form .= '</div></form>'.DOKU_LF;
+
+ return $form;
+ }
+
+ /**
+ * Print the assembled form
+ *
+ * wraps around getForm()
+ */
+ function printForm(){
+ echo $this->getForm();
+ }
+
+}
+
+/**
+ * form_makeTag
+ *
+ * Create a form element for a non-specific empty tag.
+ *
+ * @param string $tag Tag name.
+ * @param array $attrs Optional attributes.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeTag($tag, $attrs=array()) {
+ $elem = array('_elem'=>'tag', '_tag'=>$tag);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeOpenTag
+ *
+ * Create a form element for a non-specific opening tag.
+ * Remember to put a matching close tag after this as well.
+ *
+ * @param string $tag Tag name.
+ * @param array $attrs Optional attributes.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeOpenTag($tag, $attrs=array()) {
+ $elem = array('_elem'=>'opentag', '_tag'=>$tag);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeCloseTag
+ *
+ * Create a form element for a non-specific closing tag.
+ * Careless use of this will result in invalid XHTML.
+ *
+ * @param string $tag Tag name.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeCloseTag($tag) {
+ return array('_elem'=>'closetag', '_tag'=>$tag);
+}
+
+/**
+ * form_makeWikiText
+ *
+ * Create a form element for a textarea containing wiki text.
+ * Only one wikitext element is allowed on a page. It will have
+ * a name of 'wikitext' and id 'wiki__text'. The text will
+ * be passed to formText() before printing.
+ *
+ * @param string $text Text to fill the field with.
+ * @param array $attrs Optional attributes.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeWikiText($text, $attrs=array()) {
+ $elem = array('_elem'=>'wikitext', '_text'=>$text,
+ 'class'=>'edit', 'cols'=>'80', 'rows'=>'10');
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeButton
+ *
+ * Create a form element for an action button.
+ * A title will automatically be generated using the value and
+ * accesskey attributes, unless you provide one.
+ *
+ * @param string $type Type attribute. 'submit' or 'cancel'
+ * @param string $act Wiki action of the button, will be used as the do= parameter
+ * @param string $value (optional) Displayed label. Uses $act if not provided.
+ * @param array $attrs Optional attributes.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeButton($type, $act, $value='', $attrs=array()) {
+ if ($value == '') $value = $act;
+ $elem = array('_elem'=>'button', 'type'=>$type, '_action'=>$act,
+ 'value'=>$value, 'class'=>'button');
+ if (!empty($attrs['accesskey']) && empty($attrs['title'])) {
+ $attrs['title'] = $value . ' ['.strtoupper($attrs['accesskey']).']';
+ }
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeField
+ *
+ * Create a form element for a labelled input element.
+ * The label text will be printed before the input.
+ *
+ * @param string $type Type attribute of input.
+ * @param string $name Name attribute of the input.
+ * @param string $value (optional) Default value.
+ * @param string $class Class attribute of the label. If this is 'block',
+ * then a line break will be added after the field.
+ * @param string $label Label that will be printed before the input.
+ * @param string $id ID attribute of the input. If set, the label will
+ * reference it with a 'for' attribute.
+ * @param array $attrs Optional attributes.
+ * @return array pseudo-tag
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeField($type, $name, $value='', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $elem = array('_elem'=>'field', '_text'=>$label, '_class'=>$class,
+ 'type'=>$type, 'id'=>$id, 'name'=>$name, 'value'=>$value);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeFieldRight
+ *
+ * Create a form element for a labelled input element.
+ * The label text will be printed after the input.
+ *
+ * @see form_makeField
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeFieldRight($type, $name, $value='', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $elem = array('_elem'=>'fieldright', '_text'=>$label, '_class'=>$class,
+ 'type'=>$type, 'id'=>$id, 'name'=>$name, 'value'=>$value);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeTextField
+ *
+ * Create a form element for a text input element with label.
+ *
+ * @see form_makeField
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeTextField($name, $value='', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $elem = array('_elem'=>'textfield', '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name, 'value'=>$value, 'class'=>'edit');
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makePasswordField
+ *
+ * Create a form element for a password input element with label.
+ * Password elements have no default value, for obvious reasons.
+ *
+ * @see form_makeField
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makePasswordField($name, $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $elem = array('_elem'=>'passwordfield', '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name, 'class'=>'edit');
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeFileField
+ *
+ * Create a form element for a file input element with label
+ *
+ * @see form_makeField
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function form_makeFileField($name, $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $elem = array('_elem'=>'filefield', '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name, 'class'=>'edit');
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeCheckboxField
+ *
+ * Create a form element for a checkbox input element with label.
+ *
+ * @see form_makeFieldRight
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeCheckboxField($name, $value='1', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ if (is_null($value) || $value=='') $value='0';
+ $elem = array('_elem'=>'checkboxfield', '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name, 'value'=>$value);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeRadioField
+ *
+ * Create a form element for a radio button input element with label.
+ *
+ * @see form_makeFieldRight
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeRadioField($name, $value='1', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ if (is_null($value) || $value=='') $value='0';
+ $elem = array('_elem'=>'radiofield', '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name, 'value'=>$value);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeMenuField
+ *
+ * Create a form element for a drop-down menu with label.
+ * The list of values can be strings, arrays of (value,text),
+ * or an associative array with the values as keys and labels as values.
+ * An item is selected by supplying its value or integer index.
+ * If the list of values is an associative array, the selected item must be
+ * a string.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeMenuField($name, $values, $selected='', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $options = array();
+ reset($values);
+ // FIXME: php doesn't know the difference between a string and an integer
+ if (is_string(key($values))) {
+ foreach ($values as $val=>$text) {
+ $options[] = array($val,$text, (!is_null($selected) && $val==$selected));
+ }
+ } else {
+ if (is_integer($selected)) $selected = $values[$selected];
+ foreach ($values as $val) {
+ if (is_array($val))
+ @list($val,$text) = $val;
+ else
+ $text = null;
+ $options[] = array($val,$text,$val===$selected);
+ }
+ }
+ $elem = array('_elem'=>'menufield', '_options'=>$options, '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_makeListboxField
+ *
+ * Create a form element for a list box with label.
+ * The list of values can be strings, arrays of (value,text),
+ * or an associative array with the values as keys and labels as values.
+ * Items are selected by supplying its value or an array of values.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_makeListboxField($name, $values, $selected='', $label=null, $id='', $class='', $attrs=array()) {
+ if (is_null($label)) $label = $name;
+ $options = array();
+ reset($values);
+ if (is_null($selected) || $selected == '')
+ $selected = array();
+ elseif (!is_array($selected))
+ $selected = array($selected);
+ // FIXME: php doesn't know the difference between a string and an integer
+ if (is_string(key($values))) {
+ foreach ($values as $val=>$text) {
+ $options[] = array($val,$text,in_array($val,$selected));
+ }
+ } else {
+ foreach ($values as $val) {
+ if (is_array($val))
+ @list($val,$text) = $val;
+ else
+ $text = null;
+ $options[] = array($val,$text,in_array($val,$selected));
+ }
+ }
+ $elem = array('_elem'=>'listboxfield', '_options'=>$options, '_text'=>$label, '_class'=>$class,
+ 'id'=>$id, 'name'=>$name);
+ return array_merge($elem, $attrs);
+}
+
+/**
+ * form_tag
+ *
+ * Print the HTML for a generic empty tag.
+ * Requires '_tag' key with name of the tag.
+ * Attributes are passed to buildAttributes()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_tag($attrs) {
+ return '<'.$attrs['_tag'].' '.buildAttributes($attrs).'/>';
+}
+
+/**
+ * form_opentag
+ *
+ * Print the HTML for a generic opening tag.
+ * Requires '_tag' key with name of the tag.
+ * Attributes are passed to buildAttributes()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_opentag($attrs) {
+ return '<'.$attrs['_tag'].' '.buildAttributes($attrs,true).'>';
+}
+
+/**
+ * form_closetag
+ *
+ * Print the HTML for a generic closing tag.
+ * Requires '_tag' key with name of the tag.
+ * There are no attributes.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_closetag($attrs) {
+ return '</'.$attrs['_tag'].'>';
+}
+
+/**
+ * form_openfieldset
+ *
+ * Print the HTML for an opening fieldset tag.
+ * Uses the '_legend' key.
+ * Attributes are passed to buildAttributes()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_openfieldset($attrs) {
+ $s = '<fieldset '.buildAttributes($attrs,true).'>';
+ if (!is_null($attrs['_legend'])) $s .= '<legend>'.$attrs['_legend'].'</legend>';
+ return $s;
+}
+
+/**
+ * form_closefieldset
+ *
+ * Print the HTML for a closing fieldset tag.
+ * There are no attributes.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_closefieldset() {
+ return '</fieldset>';
+}
+
+/**
+ * form_hidden
+ *
+ * Print the HTML for a hidden input element.
+ * Uses only 'name' and 'value' attributes.
+ * Value is passed to formText()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_hidden($attrs) {
+ return '<input type="hidden" name="'.$attrs['name'].'" value="'.formText($attrs['value']).'" />';
+}
+
+/**
+ * form_wikitext
+ *
+ * Print the HTML for the wiki textarea.
+ * Requires '_text' with default text of the field.
+ * Text will be passed to formText(), attributes to buildAttributes()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_wikitext($attrs) {
+ // mandatory attributes
+ unset($attrs['name']);
+ unset($attrs['id']);
+ return '<textarea name="wikitext" id="wiki__text" '
+ .buildAttributes($attrs,true).'>'.DOKU_LF
+ .formText($attrs['_text'])
+ .'</textarea>';
+}
+
+/**
+ * form_button
+ *
+ * Print the HTML for a form button.
+ * If '_action' is set, the button name will be "do[_action]".
+ * Other attributes are passed to buildAttributes()
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_button($attrs) {
+ $p = (!empty($attrs['_action'])) ? 'name="do['.$attrs['_action'].']" ' : '';
+ return '<input '.$p.buildAttributes($attrs,true).'/>';
+}
+
+/**
+ * form_field
+ *
+ * Print the HTML for a form input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_field($attrs) {
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span>';
+ $s .= ' <input '.buildAttributes($attrs,true).'/></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_fieldright
+ *
+ * Print the HTML for a form input field. (right-aligned)
+ * _class : class attribute used on the label tag
+ * _text : Text to display after the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_fieldright($attrs) {
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><input '.buildAttributes($attrs,true).'/>';
+ $s .= ' <span>'.$attrs['_text'].'</span></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_textfield
+ *
+ * Print the HTML for a text input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_textfield($attrs) {
+ // mandatory attributes
+ unset($attrs['type']);
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span> ';
+ $s .= '<input type="text" '.buildAttributes($attrs,true).'/></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_passwordfield
+ *
+ * Print the HTML for a password input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_passwordfield($attrs) {
+ // mandatory attributes
+ unset($attrs['type']);
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span> ';
+ $s .= '<input type="password" '.buildAttributes($attrs,true).'/></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_filefield
+ *
+ * Print the HTML for a file input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the input. Not escaped
+ * _maxlength : Allowed size in byte
+ * _accept : Accepted mime-type
+ * Other attributes are passed to buildAttributes() for the input tag
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function form_filefield($attrs) {
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span> ';
+ $s .= '<input type="file" '.buildAttributes($attrs,true);
+ if (!empty($attrs['_maxlength'])) $s .= ' maxlength="'.$attrs['_maxlength'].'"';
+ if (!empty($attrs['_accept'])) $s .= ' accept="'.$attrs['_accept'].'"';
+ $s .= '/></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_checkboxfield
+ *
+ * Print the HTML for a checkbox input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display after the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_checkboxfield($attrs) {
+ // mandatory attributes
+ unset($attrs['type']);
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><input type="checkbox" '.buildAttributes($attrs,true).'/>';
+ $s .= ' <span>'.$attrs['_text'].'</span></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_radiofield
+ *
+ * Print the HTML for a radio button input field.
+ * _class : class attribute used on the label tag
+ * _text : Text to display after the input. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_radiofield($attrs) {
+ // mandatory attributes
+ unset($attrs['type']);
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><input type="radio" '.buildAttributes($attrs,true).'/>';
+ $s .= ' <span>'.$attrs['_text'].'</span></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_menufield
+ *
+ * Print the HTML for a drop-down menu.
+ * _options : Array of (value,text,selected) for the menu.
+ * Text can be omitted. Text and value are passed to formText()
+ * Only one item can be selected.
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the menu. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_menufield($attrs) {
+ $attrs['size'] = '1';
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span>';
+ $s .= ' <select '.buildAttributes($attrs,true).'>'.DOKU_LF;
+ if (!empty($attrs['_options'])) {
+ $selected = false;
+ for($n=0;$n<count($attrs['_options']);$n++){
+ @list($value,$text,$select) = $attrs['_options'][$n];
+ $p = '';
+ if (!is_null($text))
+ $p .= ' value="'.formText($value).'"';
+ else
+ $text = $value;
+ if (!empty($select) && !$selected) {
+ $p .= ' selected="selected"';
+ $selected = true;
+ }
+ $s .= '<option'.$p.'>'.formText($text).'</option>';
+ }
+ } else {
+ $s .= '<option></option>';
+ }
+ $s .= DOKU_LF.'</select></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
+
+/**
+ * form_listboxfield
+ *
+ * Print the HTML for a list box.
+ * _options : Array of (value,text,selected) for the list.
+ * Text can be omitted. Text and value are passed to formText()
+ * _class : class attribute used on the label tag
+ * _text : Text to display before the menu. Not escaped.
+ * Other attributes are passed to buildAttributes() for the input tag.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function form_listboxfield($attrs) {
+ $s = '<label';
+ if ($attrs['_class']) $s .= ' class="'.$attrs['_class'].'"';
+ if (!empty($attrs['id'])) $s .= ' for="'.$attrs['id'].'"';
+ $s .= '><span>'.$attrs['_text'].'</span> ';
+ $s .= '<select '.buildAttributes($attrs,true).'>'.DOKU_LF;
+ if (!empty($attrs['_options'])) {
+ foreach ($attrs['_options'] as $opt) {
+ @list($value,$text,$select) = $opt;
+ $p = '';
+ if(is_null($text)) $text = $value;
+ $p .= ' value="'.formText($value).'"';
+ if (!empty($select)) $p .= ' selected="selected"';
+ $s .= '<option'.$p.'>'.formText($text).'</option>';
+ }
+ } else {
+ $s .= '<option></option>';
+ }
+ $s .= DOKU_LF.'</select></label>';
+ if (preg_match('/(^| )block($| )/', $attrs['_class']))
+ $s .= '<br />';
+ return $s;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php b/mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php
new file mode 100644
index 000000000..c8236e1d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php
@@ -0,0 +1,722 @@
+<?php
+/**
+ * DokuWiki fulltextsearch functions using the index
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/indexer.php');
+
+
+/**
+ * The fulltext search
+ *
+ * Returns a list of matching documents for the given query
+ *
+ * refactored into ft_pageSearch(), _ft_pageSearch() and trigger_event()
+ *
+ */
+function ft_pageSearch($query,&$highlight){
+
+ $data['query'] = $query;
+ $data['highlight'] =& $highlight;
+
+ return trigger_event('SEARCH_QUERY_FULLPAGE', $data, '_ft_pageSearch');
+}
+
+/**
+ * Returns a list of matching documents for the given query
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+function _ft_pageSearch(&$data) {
+ // parse the given query
+ $q = ft_queryParser($data['query']);
+ $data['highlight'] = $q['highlight'];
+
+ if (empty($q['parsed_ary'])) return array();
+
+ // lookup all words found in the query
+ $lookup = idx_lookup($q['words']);
+
+ // get all pages in this dokuwiki site (!: includes nonexistent pages)
+ $pages_all = array();
+ foreach (idx_getIndex('page', '') as $id) {
+ $pages_all[trim($id)] = 0; // base: 0 hit
+ }
+
+ // process the query
+ $stack = array();
+ foreach ($q['parsed_ary'] as $token) {
+ switch (substr($token, 0, 3)) {
+ case 'W+:':
+ case 'W-:':
+ case 'W_:': // word
+ $word = substr($token, 3);
+ $stack[] = (array) $lookup[$word];
+ break;
+ case 'P+:':
+ case 'P-:': // phrase
+ $phrase = substr($token, 3);
+ // since phrases are always parsed as ((W1)(W2)...(P)),
+ // the end($stack) always points the pages that contain
+ // all words in this phrase
+ $pages = end($stack);
+ $pages_matched = array();
+ foreach(array_keys($pages) as $id){
+ $text = utf8_strtolower(rawWiki($id));
+ if (strpos($text, $phrase) !== false) {
+ $pages_matched[$id] = 0; // phrase: always 0 hit
+ }
+ }
+ $stack[] = $pages_matched;
+ break;
+ case 'N+:':
+ case 'N-:': // namespace
+ $ns = substr($token, 3);
+ $pages_matched = array();
+ foreach (array_keys($pages_all) as $id) {
+ if (strpos($id, $ns) === 0) {
+ $pages_matched[$id] = 0; // namespace: always 0 hit
+ }
+ }
+ $stack[] = $pages_matched;
+ break;
+ case 'AND': // and operation
+ list($pages1, $pages2) = array_splice($stack, -2);
+ $stack[] = ft_resultCombine(array($pages1, $pages2));
+ break;
+ case 'OR': // or operation
+ list($pages1, $pages2) = array_splice($stack, -2);
+ $stack[] = ft_resultUnite(array($pages1, $pages2));
+ break;
+ case 'NOT': // not operation (unary)
+ $pages = array_pop($stack);
+ $stack[] = ft_resultComplement(array($pages_all, $pages));
+ break;
+ }
+ }
+ $docs = array_pop($stack);
+
+ if (empty($docs)) return array();
+
+ // check: settings, acls, existence
+ foreach (array_keys($docs) as $id) {
+ if (isHiddenPage($id) || auth_quickaclcheck($id) < AUTH_READ || !page_exists($id, '', false)) {
+ unset($docs[$id]);
+ }
+ }
+
+ // sort docs by count
+ arsort($docs);
+
+ return $docs;
+}
+
+/**
+ * Returns the backlinks for a given page
+ *
+ * Does a quick lookup with the fulltext index, then
+ * evaluates the instructions of the found pages
+ */
+function ft_backlinks($id){
+ global $conf;
+ $swfile = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
+ $stopwords = @file_exists($swfile) ? file($swfile) : array();
+
+ $result = array();
+
+ // quick lookup of the pagename
+ $page = noNS($id);
+ $matches = idx_lookup(idx_tokenizer($page,$stopwords)); // pagename may contain specials (_ or .)
+ $docs = array_keys(ft_resultCombine(array_values($matches)));
+ $docs = array_filter($docs,'isVisiblePage'); // discard hidden pages
+ if(!count($docs)) return $result;
+ require_once(DOKU_INC.'inc/parserutils.php');
+
+ // check metadata for matching links
+ foreach($docs as $match){
+ // metadata relation reference links are already resolved
+ $links = p_get_metadata($match,'relation references');
+ if (isset($links[$id])) $result[] = $match;
+ }
+
+ if(!count($result)) return $result;
+
+ // check ACL permissions
+ foreach(array_keys($result) as $idx){
+ if(auth_quickaclcheck($result[$idx]) < AUTH_READ){
+ unset($result[$idx]);
+ }
+ }
+
+ sort($result);
+ return $result;
+}
+
+/**
+ * Returns the pages that use a given media file
+ *
+ * Does a quick lookup with the fulltext index, then
+ * evaluates the instructions of the found pages
+ *
+ * Aborts after $max found results
+ */
+function ft_mediause($id,$max){
+ global $conf;
+ $swfile = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
+ $stopwords = @file_exists($swfile) ? file($swfile) : array();
+
+ if(!$max) $max = 1; // need to find at least one
+
+ $result = array();
+
+ // quick lookup of the mediafile
+ $media = noNS($id);
+ $matches = idx_lookup(idx_tokenizer($media,$stopwords));
+ $docs = array_keys(ft_resultCombine(array_values($matches)));
+ if(!count($docs)) return $result;
+
+ // go through all found pages
+ $found = 0;
+ $pcre = preg_quote($media,'/');
+ foreach($docs as $doc){
+ $ns = getNS($doc);
+ preg_match_all('/\{\{([^|}]*'.$pcre.'[^|}]*)(|[^}]+)?\}\}/i',rawWiki($doc),$matches);
+ foreach($matches[1] as $img){
+ $img = trim($img);
+ if(preg_match('/^https?:\/\//i',$img)) continue; // skip external images
+ list($img) = explode('?',$img); // remove any parameters
+ resolve_mediaid($ns,$img,$exists); // resolve the possibly relative img
+
+ if($img == $id){ // we have a match
+ $result[] = $doc;
+ $found++;
+ break;
+ }
+ }
+ if($found >= $max) break;
+ }
+
+ sort($result);
+ return $result;
+}
+
+
+
+/**
+ * Quicksearch for pagenames
+ *
+ * By default it only matches the pagename and ignores the
+ * namespace. This can be changed with the second parameter
+ *
+ * refactored into ft_pageLookup(), _ft_pageLookup() and trigger_event()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ft_pageLookup($id,$pageonly=true){
+ $data = array('id' => $id, 'pageonly' => $pageonly);
+ return trigger_event('SEARCH_QUERY_PAGELOOKUP',$data,'_ft_pageLookup');
+}
+
+function _ft_pageLookup(&$data){
+ // split out original parameterrs
+ $id = $data['id'];
+ $pageonly = $data['pageonly'];
+
+ global $conf;
+ $id = preg_quote($id,'/');
+ $pages = file($conf['indexdir'].'/page.idx');
+ if($id) $pages = array_values(preg_grep('/'.$id.'/',$pages));
+
+ $cnt = count($pages);
+ for($i=0; $i<$cnt; $i++){
+ if($pageonly){
+ if(!preg_match('/'.$id.'/',noNS($pages[$i]))){
+ unset($pages[$i]);
+ continue;
+ }
+ }
+ if(!page_exists($pages[$i])){
+ unset($pages[$i]);
+ continue;
+ }
+ }
+
+ $pages = array_filter($pages,'isVisiblePage'); // discard hidden pages
+ if(!count($pages)) return array();
+
+ // check ACL permissions
+ foreach(array_keys($pages) as $idx){
+ if(auth_quickaclcheck(trim($pages[$idx])) < AUTH_READ){
+ unset($pages[$idx]);
+ }
+ }
+
+ $pages = array_map('trim',$pages);
+ usort($pages,'ft_pagesorter');
+ return $pages;
+}
+
+/**
+ * Sort pages based on their namespace level first, then on their string
+ * values. This makes higher hierarchy pages rank higher than lower hierarchy
+ * pages.
+ */
+function ft_pagesorter($a, $b){
+ $ac = count(explode(':',$a));
+ $bc = count(explode(':',$b));
+ if($ac < $bc){
+ return -1;
+ }elseif($ac > $bc){
+ return 1;
+ }
+ return strcmp ($a,$b);
+}
+
+/**
+ * Creates a snippet extract
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @triggers FULLTEXT_SNIPPET_CREATE
+ */
+function ft_snippet($id,$highlight){
+ $text = rawWiki($id);
+ $evdata = array(
+ 'id' => $id,
+ 'text' => &$text,
+ 'highlight' => &$highlight,
+ 'snippet' => '',
+ );
+
+ $evt = new Doku_Event('FULLTEXT_SNIPPET_CREATE',$evdata);
+ if ($evt->advise_before()) {
+ $match = array();
+ $snippets = array();
+ $utf8_offset = $offset = $end = 0;
+ $len = utf8_strlen($text);
+
+ // build a regexp from the phrases to highlight
+ $re1 = '('.join('|',array_map('preg_quote_cb',array_filter((array) $highlight))).')';
+ $re2 = "$re1.{0,75}(?!\\1)$re1";
+ $re3 = "$re1.{0,45}(?!\\1)$re1.{0,45}(?!\\1)(?!\\2)$re1";
+
+ for ($cnt=4; $cnt--;) {
+ if (0) {
+ } else if (preg_match('/'.$re3.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
+ } else if (preg_match('/'.$re2.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
+ } else if (preg_match('/'.$re1.'/iu',$text,$match,PREG_OFFSET_CAPTURE,$offset)) {
+ } else {
+ break;
+ }
+
+ list($str,$idx) = $match[0];
+
+ // convert $idx (a byte offset) into a utf8 character offset
+ $utf8_idx = utf8_strlen(substr($text,0,$idx));
+ $utf8_len = utf8_strlen($str);
+
+ // establish context, 100 bytes surrounding the match string
+ // first look to see if we can go 100 either side,
+ // then drop to 50 adding any excess if the other side can't go to 50,
+ $pre = min($utf8_idx-$utf8_offset,100);
+ $post = min($len-$utf8_idx-$utf8_len,100);
+
+ if ($pre>50 && $post>50) {
+ $pre = $post = 50;
+ } else if ($pre>50) {
+ $pre = min($pre,100-$post);
+ } else if ($post>50) {
+ $post = min($post, 100-$pre);
+ } else {
+ // both are less than 50, means the context is the whole string
+ // make it so and break out of this loop - there is no need for the
+ // complex snippet calculations
+ $snippets = array($text);
+ break;
+ }
+
+ // establish context start and end points, try to append to previous
+ // context if possible
+ $start = $utf8_idx - $pre;
+ $append = ($start < $end) ? $end : false; // still the end of the previous context snippet
+ $end = $utf8_idx + $utf8_len + $post; // now set it to the end of this context
+
+ if ($append) {
+ $snippets[count($snippets)-1] .= utf8_substr($text,$append,$end-$append);
+ } else {
+ $snippets[] = utf8_substr($text,$start,$end-$start);
+ }
+
+ // set $offset for next match attempt
+ // substract strlen to avoid splitting a potential search success,
+ // this is an approximation as the search pattern may match strings
+ // of varying length and it will fail if the context snippet
+ // boundary breaks a matching string longer than the current match
+ $utf8_offset = $utf8_idx + $post;
+ $offset = $idx + strlen(utf8_substr($text,$utf8_idx,$post));
+ $offset = utf8_correctIdx($text,$offset);
+ }
+
+ $m = "\1";
+ $snippets = preg_replace('/'.$re1.'/iu',$m.'$1'.$m,$snippets);
+ $snippet = preg_replace('/'.$m.'([^'.$m.']*?)'.$m.'/iu','<strong class="search_hit">$1</strong>',hsc(join('... ',$snippets)));
+
+ $evdata['snippet'] = $snippet;
+ }
+ $evt->advise_after();
+ unset($evt);
+
+ return $evdata['snippet'];
+}
+
+/**
+ * Combine found documents and sum up their scores
+ *
+ * This function is used to combine searched words with a logical
+ * AND. Only documents available in all arrays are returned.
+ *
+ * based upon PEAR's PHP_Compat function for array_intersect_key()
+ *
+ * @param array $args An array of page arrays
+ */
+function ft_resultCombine($args){
+ $array_count = count($args);
+ if($array_count == 1){
+ return $args[0];
+ }
+
+ $result = array();
+ if ($array_count > 1) {
+ foreach ($args[0] as $key => $value) {
+ $result[$key] = $value;
+ for ($i = 1; $i !== $array_count; $i++) {
+ if (!isset($args[$i][$key])) {
+ unset($result[$key]);
+ break;
+ }
+ $result[$key] += $args[$i][$key];
+ }
+ }
+ }
+ return $result;
+}
+
+/**
+ * Unites found documents and sum up their scores
+ *
+ * based upon ft_resultCombine() function
+ *
+ * @param array $args An array of page arrays
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+function ft_resultUnite($args) {
+ $array_count = count($args);
+ if ($array_count === 1) {
+ return $args[0];
+ }
+
+ $result = $args[0];
+ for ($i = 1; $i !== $array_count; $i++) {
+ foreach (array_keys($args[$i]) as $id) {
+ $result[$id] += $args[$i][$id];
+ }
+ }
+ return $result;
+}
+
+/**
+ * Computes the difference of documents using page id for comparison
+ *
+ * nearly identical to PHP5's array_diff_key()
+ *
+ * @param array $args An array of page arrays
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+function ft_resultComplement($args) {
+ $array_count = count($args);
+ if ($array_count === 1) {
+ return $args[0];
+ }
+
+ $result = $args[0];
+ foreach (array_keys($result) as $id) {
+ for ($i = 1; $i !== $array_count; $i++) {
+ if (isset($args[$i][$id])) unset($result[$id]);
+ }
+ }
+ return $result;
+}
+
+/**
+ * Parses a search query and builds an array of search formulas
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+function ft_queryParser($query){
+ global $conf;
+ $swfile = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
+ $stopwords = @file_exists($swfile) ? file($swfile) : array();
+
+ /**
+ * parse a search query and transform it into intermediate representation
+ *
+ * in a search query, you can use the following expressions:
+ *
+ * words:
+ * include
+ * -exclude
+ * phrases:
+ * "phrase to be included"
+ * -"phrase you want to exclude"
+ * namespaces:
+ * @include:namespace (or ns:include:namespace)
+ * ^exclude:namespace (or -ns:exclude:namespace)
+ * groups:
+ * ()
+ * -()
+ * operators:
+ * and ('and' is the default operator: you can always omit this)
+ * or (or pipe symbol '|', lower precedence than 'and')
+ *
+ * e.g. a query [ aa "bb cc" @dd:ee ] means "search pages which contain
+ * a word 'aa', a phrase 'bb cc' and are within a namespace 'dd:ee'".
+ * this query is equivalent to [ -(-aa or -"bb cc" or -ns:dd:ee) ]
+ * as long as you don't mind hit counts.
+ *
+ * intermediate representation consists of the following parts:
+ *
+ * ( ) - group
+ * AND - logical and
+ * OR - logical or
+ * NOT - logical not
+ * W+:, W-:, W_: - word (underscore: no need to highlight)
+ * P+:, P-: - phrase (minus sign: logically in NOT group)
+ * N+:, N-: - namespace
+ */
+ $parsed_query = '';
+ $parens_level = 0;
+ $terms = preg_split('/(-?".*?")/u', utf8_strtolower($query), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+
+ foreach ($terms as $term) {
+ $parsed = '';
+ if (preg_match('/^(-?)"(.+)"$/u', $term, $matches)) {
+ // phrase-include and phrase-exclude
+ $not = $matches[1] ? 'NOT' : '';
+ $parsed = $not.ft_termParser($matches[2], $stopwords, false, true);
+ } else {
+ // fix incomplete phrase
+ $term = str_replace('"', ' ', $term);
+
+ // fix parentheses
+ $term = str_replace(')' , ' ) ', $term);
+ $term = str_replace('(' , ' ( ', $term);
+ $term = str_replace('- (', ' -(', $term);
+
+ // treat pipe symbols as 'OR' operators
+ $term = str_replace('|', ' or ', $term);
+
+ // treat ideographic spaces (U+3000) as search term separators
+ // FIXME: some more separators?
+ $term = preg_replace('/[ \x{3000}]+/u', ' ', $term);
+ $term = trim($term);
+ if ($term === '') continue;
+
+ $tokens = explode(' ', $term);
+ foreach ($tokens as $token) {
+ if ($token === '(') {
+ // parenthesis-include-open
+ $parsed .= '(';
+ ++$parens_level;
+ } elseif ($token === '-(') {
+ // parenthesis-exclude-open
+ $parsed .= 'NOT(';
+ ++$parens_level;
+ } elseif ($token === ')') {
+ // parenthesis-any-close
+ if ($parens_level === 0) continue;
+ $parsed .= ')';
+ $parens_level--;
+ } elseif ($token === 'and') {
+ // logical-and (do nothing)
+ } elseif ($token === 'or') {
+ // logical-or
+ $parsed .= 'OR';
+ } elseif (preg_match('/^(?:\^|-ns:)(.+)$/u', $token, $matches)) {
+ // namespace-exclude
+ $parsed .= 'NOT(N+:'.$matches[1].')';
+ } elseif (preg_match('/^(?:@|ns:)(.+)$/u', $token, $matches)) {
+ // namespace-include
+ $parsed .= '(N+:'.$matches[1].')';
+ } elseif (preg_match('/^-(.+)$/', $token, $matches)) {
+ // word-exclude
+ $parsed .= 'NOT('.ft_termParser($matches[1], $stopwords).')';
+ } else {
+ // word-include
+ $parsed .= ft_termParser($token, $stopwords);
+ }
+ }
+ }
+ $parsed_query .= $parsed;
+ }
+
+ // cleanup (very sensitive)
+ $parsed_query .= str_repeat(')', $parens_level);
+ do {
+ $parsed_query_old = $parsed_query;
+ $parsed_query = preg_replace('/(NOT)?\(\)/u', '', $parsed_query);
+ } while ($parsed_query !== $parsed_query_old);
+ $parsed_query = preg_replace('/(NOT|OR)+\)/u', ')' , $parsed_query);
+ $parsed_query = preg_replace('/(OR)+/u' , 'OR' , $parsed_query);
+ $parsed_query = preg_replace('/\(OR/u' , '(' , $parsed_query);
+ $parsed_query = preg_replace('/^OR|OR$/u' , '' , $parsed_query);
+ $parsed_query = preg_replace('/\)(NOT)?\(/u' , ')AND$1(', $parsed_query);
+
+ // adjustment: make highlightings right
+ $parens_level = 0;
+ $notgrp_levels = array();
+ $parsed_query_new = '';
+ $tokens = preg_split('/(NOT\(|[()])/u', $parsed_query, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ foreach ($tokens as $token) {
+ if ($token === 'NOT(') {
+ $notgrp_levels[] = ++$parens_level;
+ } elseif ($token === '(') {
+ ++$parens_level;
+ } elseif ($token === ')') {
+ if ($parens_level-- === end($notgrp_levels)) array_pop($notgrp_levels);
+ } elseif (count($notgrp_levels) % 2 === 1) {
+ // turn highlight-flag off if terms are logically in "NOT" group
+ $token = preg_replace('/([WPN])\+\:/u', '$1-:', $token);
+ }
+ $parsed_query_new .= $token;
+ }
+ $parsed_query = $parsed_query_new;
+
+ /**
+ * convert infix notation string into postfix (Reverse Polish notation) array
+ * by Shunting-yard algorithm
+ *
+ * see: http://en.wikipedia.org/wiki/Reverse_Polish_notation
+ * see: http://en.wikipedia.org/wiki/Shunting-yard_algorithm
+ */
+ $parsed_ary = array();
+ $ope_stack = array();
+ $ope_precedence = array(')' => 1, 'OR' => 2, 'AND' => 3, 'NOT' => 4, '(' => 5);
+ $ope_regex = '/([()]|OR|AND|NOT)/u';
+
+ $tokens = preg_split($ope_regex, $parsed_query, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ foreach ($tokens as $token) {
+ if (preg_match($ope_regex, $token)) {
+ // operator
+ $last_ope = end($ope_stack);
+ while ($ope_precedence[$token] <= $ope_precedence[$last_ope] && $last_ope != '(') {
+ $parsed_ary[] = array_pop($ope_stack);
+ $last_ope = end($ope_stack);
+ }
+ if ($token == ')') {
+ array_pop($ope_stack); // this array_pop always deletes '('
+ } else {
+ $ope_stack[] = $token;
+ }
+ } else {
+ // operand
+ $token_decoded = str_replace(array('OP', 'CP'), array('(', ')'), $token);
+ $parsed_ary[] = $token_decoded;
+ }
+ }
+ $parsed_ary = array_values(array_merge($parsed_ary, array_reverse($ope_stack)));
+
+ // cleanup: each double "NOT" in RPN array actually does nothing
+ $parsed_ary_count = count($parsed_ary);
+ for ($i = 1; $i < $parsed_ary_count; ++$i) {
+ if ($parsed_ary[$i] === 'NOT' && $parsed_ary[$i - 1] === 'NOT') {
+ unset($parsed_ary[$i], $parsed_ary[$i - 1]);
+ }
+ }
+ $parsed_ary = array_values($parsed_ary);
+
+ // build return value
+ $q = array();
+ $q['query'] = $query;
+ $q['parsed_str'] = $parsed_query;
+ $q['parsed_ary'] = $parsed_ary;
+
+ foreach ($q['parsed_ary'] as $token) {
+ if ($token[2] !== ':') continue;
+ $body = substr($token, 3);
+
+ switch (substr($token, 0, 3)) {
+ case 'N+:':
+ $q['ns'][] = $body; // for backward compatibility
+ break;
+ case 'N-:':
+ $q['notns'][] = $body; // for backward compatibility
+ break;
+ case 'W_:':
+ $q['words'][] = $body;
+ break;
+ case 'W-:':
+ $q['words'][] = $body;
+ $q['not'][] = $body; // for backward compatibility
+ break;
+ case 'W+:':
+ $q['words'][] = $body;
+ $q['highlight'][] = str_replace('*', '', $body);
+ $q['and'][] = $body; // for backward compatibility
+ break;
+ case 'P-:':
+ $q['phrases'][] = $body;
+ break;
+ case 'P+:':
+ $q['phrases'][] = $body;
+ $q['highlight'][] = str_replace('*', '', $body);
+ break;
+ }
+ }
+ foreach (array('words', 'phrases', 'highlight', 'ns', 'notns', 'and', 'not') as $key) {
+ $q[$key] = empty($q[$key]) ? array() : array_values(array_unique($q[$key]));
+ }
+
+ return $q;
+}
+
+/**
+ * Transforms given search term into intermediate representation
+ *
+ * This function is used in ft_queryParser() and not for general purpose use.
+ *
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+function ft_termParser($term, &$stopwords, $consider_asian = true, $phrase_mode = false) {
+ $parsed = '';
+ if ($consider_asian) {
+ // successive asian characters need to be searched as a phrase
+ $words = preg_split('/('.IDX_ASIAN.'+)/u', $term, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
+ foreach ($words as $word) {
+ if (preg_match('/'.IDX_ASIAN.'/u', $word)) $phrase_mode = true;
+ $parsed .= ft_termParser($word, $stopwords, false, $phrase_mode);
+ }
+ } else {
+ $term_noparen = str_replace(array('(', ')'), ' ', $term);
+ $words = idx_tokenizer($term_noparen, $stopwords, true);
+
+ // W_: no need to highlight
+ if (empty($words)) {
+ $parsed = '()'; // important: do not remove
+ } elseif ($words[0] === $term) {
+ $parsed = '(W+:'.$words[0].')';
+ } elseif ($phrase_mode) {
+ $term_encoded = str_replace(array('(', ')'), array('OP', 'CP'), $term);
+ $parsed = '((W_:'.implode(')(W_:', $words).')(P+:'.$term_encoded.'))';
+ } else {
+ $parsed = '((W+:'.implode(')(W+:', $words).'))';
+ }
+ }
+ return $parsed;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi.php
new file mode 100644
index 000000000..abe69a2bd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi.php
@@ -0,0 +1,4644 @@
+<?php
+/**
+ * GeSHi - Generic Syntax Highlighter
+ *
+ * The GeSHi class for Generic Syntax Highlighting. Please refer to the
+ * documentation at http://qbnz.com/highlighter/documentation.php for more
+ * information about how to use this class.
+ *
+ * For changes, release notes, TODOs etc, see the relevant files in the docs/
+ * directory.
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * @package geshi
+ * @subpackage core
+ * @author Nigel McNie <nigel@geshi.org>, Benny Baumann <BenBE@omorphia.de>
+ * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann
+ * @license http://gnu.org/copyleft/gpl.html GNU GPL
+ *
+ */
+
+//
+// GeSHi Constants
+// You should use these constant names in your programs instead of
+// their values - you never know when a value may change in a future
+// version
+//
+
+/** The version of this GeSHi file */
+define('GESHI_VERSION', '1.0.8.4');
+
+// Define the root directory for the GeSHi code tree
+if (!defined('GESHI_ROOT')) {
+ /** The root directory for GeSHi */
+ define('GESHI_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);
+}
+/** The language file directory for GeSHi
+ @access private */
+define('GESHI_LANG_ROOT', GESHI_ROOT . 'geshi' . DIRECTORY_SEPARATOR);
+
+// Define if GeSHi should be paranoid about security
+if (!defined('GESHI_SECURITY_PARANOID')) {
+ /** Tells GeSHi to be paranoid about security settings */
+ define('GESHI_SECURITY_PARANOID', false);
+}
+
+// Line numbers - use with enable_line_numbers()
+/** Use no line numbers when building the result */
+define('GESHI_NO_LINE_NUMBERS', 0);
+/** Use normal line numbers when building the result */
+define('GESHI_NORMAL_LINE_NUMBERS', 1);
+/** Use fancy line numbers when building the result */
+define('GESHI_FANCY_LINE_NUMBERS', 2);
+
+// Container HTML type
+/** Use nothing to surround the source */
+define('GESHI_HEADER_NONE', 0);
+/** Use a "div" to surround the source */
+define('GESHI_HEADER_DIV', 1);
+/** Use a "pre" to surround the source */
+define('GESHI_HEADER_PRE', 2);
+/** Use a pre to wrap lines when line numbers are enabled or to wrap the whole code. */
+define('GESHI_HEADER_PRE_VALID', 3);
+/**
+ * Use a "table" to surround the source:
+ *
+ * <table>
+ * <thead><tr><td colspan="2">$header</td></tr></thead>
+ * <tbody><tr><td><pre>$linenumbers</pre></td><td><pre>$code></pre></td></tr></tbody>
+ * <tfooter><tr><td colspan="2">$footer</td></tr></tfoot>
+ * </table>
+ *
+ * this is essentially only a workaround for Firefox, see sf#1651996 or take a look at
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=365805
+ * @note when linenumbers are disabled this is essentially the same as GESHI_HEADER_PRE
+ */
+define('GESHI_HEADER_PRE_TABLE', 4);
+
+// Capatalisation constants
+/** Lowercase keywords found */
+define('GESHI_CAPS_NO_CHANGE', 0);
+/** Uppercase keywords found */
+define('GESHI_CAPS_UPPER', 1);
+/** Leave keywords found as the case that they are */
+define('GESHI_CAPS_LOWER', 2);
+
+// Link style constants
+/** Links in the source in the :link state */
+define('GESHI_LINK', 0);
+/** Links in the source in the :hover state */
+define('GESHI_HOVER', 1);
+/** Links in the source in the :active state */
+define('GESHI_ACTIVE', 2);
+/** Links in the source in the :visited state */
+define('GESHI_VISITED', 3);
+
+// Important string starter/finisher
+// Note that if you change these, they should be as-is: i.e., don't
+// write them as if they had been run through htmlentities()
+/** The starter for important parts of the source */
+define('GESHI_START_IMPORTANT', '<BEGIN GeSHi>');
+/** The ender for important parts of the source */
+define('GESHI_END_IMPORTANT', '<END GeSHi>');
+
+/**#@+
+ * @access private
+ */
+// When strict mode applies for a language
+/** Strict mode never applies (this is the most common) */
+define('GESHI_NEVER', 0);
+/** Strict mode *might* apply, and can be enabled or
+ disabled by {@link GeSHi->enable_strict_mode()} */
+define('GESHI_MAYBE', 1);
+/** Strict mode always applies */
+define('GESHI_ALWAYS', 2);
+
+// Advanced regexp handling constants, used in language files
+/** The key of the regex array defining what to search for */
+define('GESHI_SEARCH', 0);
+/** The key of the regex array defining what bracket group in a
+ matched search to use as a replacement */
+define('GESHI_REPLACE', 1);
+/** The key of the regex array defining any modifiers to the regular expression */
+define('GESHI_MODIFIERS', 2);
+/** The key of the regex array defining what bracket group in a
+ matched search to put before the replacement */
+define('GESHI_BEFORE', 3);
+/** The key of the regex array defining what bracket group in a
+ matched search to put after the replacement */
+define('GESHI_AFTER', 4);
+/** The key of the regex array defining a custom keyword to use
+ for this regexp's html tag class */
+define('GESHI_CLASS', 5);
+
+/** Used in language files to mark comments */
+define('GESHI_COMMENTS', 0);
+
+/** Used to work around missing PHP features **/
+define('GESHI_PHP_PRE_433', !(version_compare(PHP_VERSION, '4.3.3') === 1));
+
+/** make sure we can call stripos **/
+if (!function_exists('stripos')) {
+ // the offset param of preg_match is not supported below PHP 4.3.3
+ if (GESHI_PHP_PRE_433) {
+ /**
+ * @ignore
+ */
+ function stripos($haystack, $needle, $offset = null) {
+ if (!is_null($offset)) {
+ $haystack = substr($haystack, $offset);
+ }
+ if (preg_match('/'. preg_quote($needle, '/') . '/', $haystack, $match, PREG_OFFSET_CAPTURE)) {
+ return $match[0][1];
+ }
+ return false;
+ }
+ }
+ else {
+ /**
+ * @ignore
+ */
+ function stripos($haystack, $needle, $offset = null) {
+ if (preg_match('/'. preg_quote($needle, '/') . '/', $haystack, $match, PREG_OFFSET_CAPTURE, $offset)) {
+ return $match[0][1];
+ }
+ return false;
+ }
+ }
+}
+
+/** some old PHP / PCRE subpatterns only support up to xxx subpatterns in
+ regular expressions. Set this to false if your PCRE lib is up to date
+ @see GeSHi->optimize_regexp_list()
+ **/
+define('GESHI_MAX_PCRE_SUBPATTERNS', 500);
+/** it's also important not to generate too long regular expressions
+ be generous here... but keep in mind, that when reaching this limit we
+ still have to close open patterns. 12k should do just fine on a 16k limit.
+ @see GeSHi->optimize_regexp_list()
+ **/
+define('GESHI_MAX_PCRE_LENGTH', 12288);
+
+//Number format specification
+/** Basic number format for integers */
+define('GESHI_NUMBER_INT_BASIC', 1); //Default integers \d+
+/** Enhanced number format for integers like seen in C */
+define('GESHI_NUMBER_INT_CSTYLE', 2); //Default C-Style \d+[lL]?
+/** Number format to highlight binary numbers with a suffix "b" */
+define('GESHI_NUMBER_BIN_SUFFIX', 16); //[01]+[bB]
+/** Number format to highlight binary numbers with a prefix % */
+define('GESHI_NUMBER_BIN_PREFIX_PERCENT', 32); //%[01]+
+/** Number format to highlight binary numbers with a prefix 0b (C) */
+define('GESHI_NUMBER_BIN_PREFIX_0B', 64); //0b[01]+
+/** Number format to highlight octal numbers with a leading zero */
+define('GESHI_NUMBER_OCT_PREFIX', 256); //0[0-7]+
+/** Number format to highlight octal numbers with a suffix of o */
+define('GESHI_NUMBER_OCT_SUFFIX', 512); //[0-7]+[oO]
+/** Number format to highlight hex numbers with a prefix 0x */
+define('GESHI_NUMBER_HEX_PREFIX', 4096); //0x[0-9a-fA-F]+
+/** Number format to highlight hex numbers with a suffix of h */
+define('GESHI_NUMBER_HEX_SUFFIX', 8192); //[0-9][0-9a-fA-F]*h
+/** Number format to highlight floating-point numbers without support for scientific notation */
+define('GESHI_NUMBER_FLT_NONSCI', 65536); //\d+\.\d+
+/** Number format to highlight floating-point numbers without support for scientific notation */
+define('GESHI_NUMBER_FLT_NONSCI_F', 131072); //\d+(\.\d+)?f
+/** Number format to highlight floating-point numbers with support for scientific notation (E) and optional leading zero */
+define('GESHI_NUMBER_FLT_SCI_SHORT', 262144); //\.\d+e\d+
+/** Number format to highlight floating-point numbers with support for scientific notation (E) and required leading digit */
+define('GESHI_NUMBER_FLT_SCI_ZERO', 524288); //\d+(\.\d+)?e\d+
+//Custom formats are passed by RX array
+
+// Error detection - use these to analyse faults
+/** No sourcecode to highlight was specified
+ * @deprecated
+ */
+define('GESHI_ERROR_NO_INPUT', 1);
+/** The language specified does not exist */
+define('GESHI_ERROR_NO_SUCH_LANG', 2);
+/** GeSHi could not open a file for reading (generally a language file) */
+define('GESHI_ERROR_FILE_NOT_READABLE', 3);
+/** The header type passed to {@link GeSHi->set_header_type()} was invalid */
+define('GESHI_ERROR_INVALID_HEADER_TYPE', 4);
+/** The line number type passed to {@link GeSHi->enable_line_numbers()} was invalid */
+define('GESHI_ERROR_INVALID_LINE_NUMBER_TYPE', 5);
+/**#@-*/
+
+
+/**
+ * The GeSHi Class.
+ *
+ * Please refer to the documentation for GeSHi 1.0.X that is available
+ * at http://qbnz.com/highlighter/documentation.php for more information
+ * about how to use this class.
+ *
+ * @package geshi
+ * @author Nigel McNie <nigel@geshi.org>, Benny Baumann <BenBE@omorphia.de>
+ * @copyright (C) 2004 - 2007 Nigel McNie, (C) 2007 - 2008 Benny Baumann
+ */
+class GeSHi {
+ /**#@+
+ * @access private
+ */
+ /**
+ * The source code to highlight
+ * @var string
+ */
+ var $source = '';
+
+ /**
+ * The language to use when highlighting
+ * @var string
+ */
+ var $language = '';
+
+ /**
+ * The data for the language used
+ * @var array
+ */
+ var $language_data = array();
+
+ /**
+ * The path to the language files
+ * @var string
+ */
+ var $language_path = GESHI_LANG_ROOT;
+
+ /**
+ * The error message associated with an error
+ * @var string
+ * @todo check err reporting works
+ */
+ var $error = false;
+
+ /**
+ * Possible error messages
+ * @var array
+ */
+ var $error_messages = array(
+ GESHI_ERROR_NO_SUCH_LANG => 'GeSHi could not find the language {LANGUAGE} (using path {PATH})',
+ GESHI_ERROR_FILE_NOT_READABLE => 'The file specified for load_from_file was not readable',
+ GESHI_ERROR_INVALID_HEADER_TYPE => 'The header type specified is invalid',
+ GESHI_ERROR_INVALID_LINE_NUMBER_TYPE => 'The line number type specified is invalid'
+ );
+
+ /**
+ * Whether highlighting is strict or not
+ * @var boolean
+ */
+ var $strict_mode = false;
+
+ /**
+ * Whether to use CSS classes in output
+ * @var boolean
+ */
+ var $use_classes = false;
+
+ /**
+ * The type of header to use. Can be one of the following
+ * values:
+ *
+ * - GESHI_HEADER_PRE: Source is outputted in a "pre" HTML element.
+ * - GESHI_HEADER_DIV: Source is outputted in a "div" HTML element.
+ * - GESHI_HEADER_NONE: No header is outputted.
+ *
+ * @var int
+ */
+ var $header_type = GESHI_HEADER_PRE;
+
+ /**
+ * Array of permissions for which lexics should be highlighted
+ * @var array
+ */
+ var $lexic_permissions = array(
+ 'KEYWORDS' => array(),
+ 'COMMENTS' => array('MULTI' => true),
+ 'REGEXPS' => array(),
+ 'ESCAPE_CHAR' => true,
+ 'BRACKETS' => true,
+ 'SYMBOLS' => false,
+ 'STRINGS' => true,
+ 'NUMBERS' => true,
+ 'METHODS' => true,
+ 'SCRIPT' => true
+ );
+
+ /**
+ * The time it took to parse the code
+ * @var double
+ */
+ var $time = 0;
+
+ /**
+ * The content of the header block
+ * @var string
+ */
+ var $header_content = '';
+
+ /**
+ * The content of the footer block
+ * @var string
+ */
+ var $footer_content = '';
+
+ /**
+ * The style of the header block
+ * @var string
+ */
+ var $header_content_style = '';
+
+ /**
+ * The style of the footer block
+ * @var string
+ */
+ var $footer_content_style = '';
+
+ /**
+ * Tells if a block around the highlighted source should be forced
+ * if not using line numbering
+ * @var boolean
+ */
+ var $force_code_block = false;
+
+ /**
+ * The styles for hyperlinks in the code
+ * @var array
+ */
+ var $link_styles = array();
+
+ /**
+ * Whether important blocks should be recognised or not
+ * @var boolean
+ * @deprecated
+ * @todo REMOVE THIS FUNCTIONALITY!
+ */
+ var $enable_important_blocks = false;
+
+ /**
+ * Styles for important parts of the code
+ * @var string
+ * @deprecated
+ * @todo As above - rethink the whole idea of important blocks as it is buggy and
+ * will be hard to implement in 1.2
+ */
+ var $important_styles = 'font-weight: bold; color: red;'; // Styles for important parts of the code
+
+ /**
+ * Whether CSS IDs should be added to the code
+ * @var boolean
+ */
+ var $add_ids = false;
+
+ /**
+ * Lines that should be highlighted extra
+ * @var array
+ */
+ var $highlight_extra_lines = array();
+
+ /**
+ * Styles of lines that should be highlighted extra
+ * @var array
+ */
+ var $highlight_extra_lines_styles = array();
+
+ /**
+ * Styles of extra-highlighted lines
+ * @var string
+ */
+ var $highlight_extra_lines_style = 'background-color: #ffc;';
+
+ /**
+ * The line ending
+ * If null, nl2br() will be used on the result string.
+ * Otherwise, all instances of \n will be replaced with $line_ending
+ * @var string
+ */
+ var $line_ending = null;
+
+ /**
+ * Number at which line numbers should start at
+ * @var int
+ */
+ var $line_numbers_start = 1;
+
+ /**
+ * The overall style for this code block
+ * @var string
+ */
+ var $overall_style = 'font-family:monospace;';
+
+ /**
+ * The style for the actual code
+ * @var string
+ */
+ var $code_style = 'font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;';
+
+ /**
+ * The overall class for this code block
+ * @var string
+ */
+ var $overall_class = '';
+
+ /**
+ * The overall ID for this code block
+ * @var string
+ */
+ var $overall_id = '';
+
+ /**
+ * Line number styles
+ * @var string
+ */
+ var $line_style1 = 'font-weight: normal; vertical-align:top;';
+
+ /**
+ * Line number styles for fancy lines
+ * @var string
+ */
+ var $line_style2 = 'font-weight: bold; vertical-align:top;';
+
+ /**
+ * Style for line numbers when GESHI_HEADER_PRE_TABLE is chosen
+ * @var string
+ */
+ var $table_linenumber_style = 'width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;';
+
+ /**
+ * Flag for how line numbers are displayed
+ * @var boolean
+ */
+ var $line_numbers = GESHI_NO_LINE_NUMBERS;
+
+ /**
+ * Flag to decide if multi line spans are allowed. Set it to false to make sure
+ * each tag is closed before and reopened after each linefeed.
+ * @var boolean
+ */
+ var $allow_multiline_span = true;
+
+ /**
+ * The "nth" value for fancy line highlighting
+ * @var int
+ */
+ var $line_nth_row = 0;
+
+ /**
+ * The size of tab stops
+ * @var int
+ */
+ var $tab_width = 8;
+
+ /**
+ * Should we use language-defined tab stop widths?
+ * @var int
+ */
+ var $use_language_tab_width = false;
+
+ /**
+ * Default target for keyword links
+ * @var string
+ */
+ var $link_target = '';
+
+ /**
+ * The encoding to use for entity encoding
+ * NOTE: Used with Escape Char Sequences to fix UTF-8 handling (cf. SF#2037598)
+ * @var string
+ */
+ var $encoding = 'utf-8';
+
+ /**
+ * Should keywords be linked?
+ * @var boolean
+ */
+ var $keyword_links = true;
+
+ /**
+ * Currently loaded language file
+ * @var string
+ * @since 1.0.7.22
+ */
+ var $loaded_language = '';
+
+ /**
+ * Wether the caches needed for parsing are built or not
+ *
+ * @var bool
+ * @since 1.0.8
+ */
+ var $parse_cache_built = false;
+
+ /**
+ * Work around for Suhosin Patch with disabled /e modifier
+ *
+ * Note from suhosins author in config file:
+ * <blockquote>
+ * The /e modifier inside <code>preg_replace()</code> allows code execution.
+ * Often it is the cause for remote code execution exploits. It is wise to
+ * deactivate this feature and test where in the application it is used.
+ * The developer using the /e modifier should be made aware that he should
+ * use <code>preg_replace_callback()</code> instead
+ * </blockquote>
+ *
+ * @var array
+ * @since 1.0.8
+ */
+ var $_kw_replace_group = 0;
+ var $_rx_key = 0;
+
+ /**
+ * some "callback parameters" for handle_multiline_regexps
+ *
+ * @since 1.0.8
+ * @access private
+ * @var string
+ */
+ var $_hmr_before = '';
+ var $_hmr_replace = '';
+ var $_hmr_after = '';
+ var $_hmr_key = 0;
+
+ /**#@-*/
+
+ /**
+ * Creates a new GeSHi object, with source and language
+ *
+ * @param string The source code to highlight
+ * @param string The language to highlight the source with
+ * @param string The path to the language file directory. <b>This
+ * is deprecated!</b> I've backported the auto path
+ * detection from the 1.1.X dev branch, so now it
+ * should be automatically set correctly. If you have
+ * renamed the language directory however, you will
+ * still need to set the path using this parameter or
+ * {@link GeSHi->set_language_path()}
+ * @since 1.0.0
+ */
+ function GeSHi($source = '', $language = '', $path = '') {
+ if (!empty($source)) {
+ $this->set_source($source);
+ }
+ if (!empty($language)) {
+ $this->set_language($language);
+ }
+ $this->set_language_path($path);
+ }
+
+ /**
+ * Returns an error message associated with the last GeSHi operation,
+ * or false if no error has occured
+ *
+ * @return string|false An error message if there has been an error, else false
+ * @since 1.0.0
+ */
+ function error() {
+ if ($this->error) {
+ //Put some template variables for debugging here ...
+ $debug_tpl_vars = array(
+ '{LANGUAGE}' => $this->language,
+ '{PATH}' => $this->language_path
+ );
+ $msg = str_replace(
+ array_keys($debug_tpl_vars),
+ array_values($debug_tpl_vars),
+ $this->error_messages[$this->error]);
+
+ return "<br /><strong>GeSHi Error:</strong> $msg (code {$this->error})<br />";
+ }
+ return false;
+ }
+
+ /**
+ * Gets a human-readable language name (thanks to Simon Patterson
+ * for the idea :))
+ *
+ * @return string The name for the current language
+ * @since 1.0.2
+ */
+ function get_language_name() {
+ if (GESHI_ERROR_NO_SUCH_LANG == $this->error) {
+ return $this->language_data['LANG_NAME'] . ' (Unknown Language)';
+ }
+ return $this->language_data['LANG_NAME'];
+ }
+
+ /**
+ * Sets the source code for this object
+ *
+ * @param string The source code to highlight
+ * @since 1.0.0
+ */
+ function set_source($source) {
+ $this->source = $source;
+ $this->highlight_extra_lines = array();
+ }
+
+ /**
+ * Sets the language for this object
+ *
+ * @note since 1.0.8 this function won't reset language-settings by default anymore!
+ * if you need this set $force_reset = true
+ *
+ * @param string The name of the language to use
+ * @since 1.0.0
+ */
+ function set_language($language, $force_reset = false) {
+ if ($force_reset) {
+ $this->loaded_language = false;
+ }
+
+ //Clean up the language name to prevent malicious code injection
+ $language = preg_replace('#[^a-zA-Z0-9\-_]#', '', $language);
+
+ $language = strtolower($language);
+
+ //Retreive the full filename
+ $file_name = $this->language_path . $language . '.php';
+ if ($file_name == $this->loaded_language) {
+ // this language is already loaded!
+ return;
+ }
+
+ $this->language = $language;
+
+ $this->error = false;
+ $this->strict_mode = GESHI_NEVER;
+
+ //Check if we can read the desired file
+ if (!is_readable($file_name)) {
+ $this->error = GESHI_ERROR_NO_SUCH_LANG;
+ return;
+ }
+
+ // Load the language for parsing
+ $this->load_language($file_name);
+ }
+
+ /**
+ * Sets the path to the directory containing the language files. Note
+ * that this path is relative to the directory of the script that included
+ * geshi.php, NOT geshi.php itself.
+ *
+ * @param string The path to the language directory
+ * @since 1.0.0
+ * @deprecated The path to the language files should now be automatically
+ * detected, so this method should no longer be needed. The
+ * 1.1.X branch handles manual setting of the path differently
+ * so this method will disappear in 1.2.0.
+ */
+ function set_language_path($path) {
+ if(strpos($path,':')) {
+ //Security Fix to prevent external directories using fopen wrappers.
+ if(DIRECTORY_SEPARATOR == "\\") {
+ if(!preg_match('#^[a-zA-Z]:#', $path) || false !== strpos($path, ':', 2)) {
+ return;
+ }
+ } else {
+ return;
+ }
+ }
+ if(preg_match('#[^/a-zA-Z0-9_\.\-\\\s:]#', $path)) {
+ //Security Fix to prevent external directories using fopen wrappers.
+ return;
+ }
+ if(GESHI_SECURITY_PARANOID && false !== strpos($path, '/.')) {
+ //Security Fix to prevent external directories using fopen wrappers.
+ return;
+ }
+ if(GESHI_SECURITY_PARANOID && false !== strpos($path, '..')) {
+ //Security Fix to prevent external directories using fopen wrappers.
+ return;
+ }
+ if ($path) {
+ $this->language_path = ('/' == $path[strlen($path) - 1]) ? $path : $path . '/';
+ $this->set_language($this->language); // otherwise set_language_path has no effect
+ }
+ }
+
+ /**
+ * Sets the type of header to be used.
+ *
+ * If GESHI_HEADER_DIV is used, the code is surrounded in a "div".This
+ * means more source code but more control over tab width and line-wrapping.
+ * GESHI_HEADER_PRE means that a "pre" is used - less source, but less
+ * control. Default is GESHI_HEADER_PRE.
+ *
+ * From 1.0.7.2, you can use GESHI_HEADER_NONE to specify that no header code
+ * should be outputted.
+ *
+ * @param int The type of header to be used
+ * @since 1.0.0
+ */
+ function set_header_type($type) {
+ //Check if we got a valid header type
+ if (!in_array($type, array(GESHI_HEADER_NONE, GESHI_HEADER_DIV,
+ GESHI_HEADER_PRE, GESHI_HEADER_PRE_VALID, GESHI_HEADER_PRE_TABLE))) {
+ $this->error = GESHI_ERROR_INVALID_HEADER_TYPE;
+ return;
+ }
+
+ //Set that new header type
+ $this->header_type = $type;
+ }
+
+ /**
+ * Sets the styles for the code that will be outputted
+ * when this object is parsed. The style should be a
+ * string of valid stylesheet declarations
+ *
+ * @param string The overall style for the outputted code block
+ * @param boolean Whether to merge the styles with the current styles or not
+ * @since 1.0.0
+ */
+ function set_overall_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->overall_style = $style;
+ } else {
+ $this->overall_style .= $style;
+ }
+ }
+
+ /**
+ * Sets the overall classname for this block of code. This
+ * class can then be used in a stylesheet to style this object's
+ * output
+ *
+ * @param string The class name to use for this block of code
+ * @since 1.0.0
+ */
+ function set_overall_class($class) {
+ $this->overall_class = $class;
+ }
+
+ /**
+ * Sets the overall id for this block of code. This id can then
+ * be used in a stylesheet to style this object's output
+ *
+ * @param string The ID to use for this block of code
+ * @since 1.0.0
+ */
+ function set_overall_id($id) {
+ $this->overall_id = $id;
+ }
+
+ /**
+ * Sets whether CSS classes should be used to highlight the source. Default
+ * is off, calling this method with no arguments will turn it on
+ *
+ * @param boolean Whether to turn classes on or not
+ * @since 1.0.0
+ */
+ function enable_classes($flag = true) {
+ $this->use_classes = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the style for the actual code. This should be a string
+ * containing valid stylesheet declarations. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * Note: Use this method to override any style changes you made to
+ * the line numbers if you are using line numbers, else the line of
+ * code will have the same style as the line number! Consult the
+ * GeSHi documentation for more information about this.
+ *
+ * @param string The style to use for actual code
+ * @param boolean Whether to merge the current styles with the new styles
+ * @since 1.0.2
+ */
+ function set_code_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->code_style = $style;
+ } else {
+ $this->code_style .= $style;
+ }
+ }
+
+ /**
+ * Sets the styles for the line numbers.
+ *
+ * @param string The style for the line numbers that are "normal"
+ * @param string|boolean If a string, this is the style of the line
+ * numbers that are "fancy", otherwise if boolean then this
+ * defines whether the normal styles should be merged with the
+ * new normal styles or not
+ * @param boolean If set, is the flag for whether to merge the "fancy"
+ * styles with the current styles or not
+ * @since 1.0.2
+ */
+ function set_line_style($style1, $style2 = '', $preserve_defaults = false) {
+ //Check if we got 2 or three parameters
+ if (is_bool($style2)) {
+ $preserve_defaults = $style2;
+ $style2 = '';
+ }
+
+ //Actually set the new styles
+ if (!$preserve_defaults) {
+ $this->line_style1 = $style1;
+ $this->line_style2 = $style2;
+ } else {
+ $this->line_style1 .= $style1;
+ $this->line_style2 .= $style2;
+ }
+ }
+
+ /**
+ * Sets whether line numbers should be displayed.
+ *
+ * Valid values for the first parameter are:
+ *
+ * - GESHI_NO_LINE_NUMBERS: Line numbers will not be displayed
+ * - GESHI_NORMAL_LINE_NUMBERS: Line numbers will be displayed
+ * - GESHI_FANCY_LINE_NUMBERS: Fancy line numbers will be displayed
+ *
+ * For fancy line numbers, the second parameter is used to signal which lines
+ * are to be fancy. For example, if the value of this parameter is 5 then every
+ * 5th line will be fancy.
+ *
+ * @param int How line numbers should be displayed
+ * @param int Defines which lines are fancy
+ * @since 1.0.0
+ */
+ function enable_line_numbers($flag, $nth_row = 5) {
+ if (GESHI_NO_LINE_NUMBERS != $flag && GESHI_NORMAL_LINE_NUMBERS != $flag
+ && GESHI_FANCY_LINE_NUMBERS != $flag) {
+ $this->error = GESHI_ERROR_INVALID_LINE_NUMBER_TYPE;
+ }
+ $this->line_numbers = $flag;
+ $this->line_nth_row = $nth_row;
+ }
+
+ /**
+ * Sets wether spans and other HTML markup generated by GeSHi can
+ * span over multiple lines or not. Defaults to true to reduce overhead.
+ * Set it to false if you want to manipulate the output or manually display
+ * the code in an ordered list.
+ *
+ * @param boolean Wether multiline spans are allowed or not
+ * @since 1.0.7.22
+ */
+ function enable_multiline_span($flag) {
+ $this->allow_multiline_span = (bool) $flag;
+ }
+
+ /**
+ * Get current setting for multiline spans, see GeSHi->enable_multiline_span().
+ *
+ * @see enable_multiline_span
+ * @return bool
+ */
+ function get_multiline_span() {
+ return $this->allow_multiline_span;
+ }
+
+ /**
+ * Sets the style for a keyword group. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param int The key of the keyword group to change the styles of
+ * @param string The style to make the keywords
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_keyword_group_style($key, $style, $preserve_defaults = false) {
+ //Set the style for this keyword group
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['KEYWORDS'][$key] = $style;
+ } else {
+ $this->language_data['STYLES']['KEYWORDS'][$key] .= $style;
+ }
+
+ //Update the lexic permissions
+ if (!isset($this->lexic_permissions['KEYWORDS'][$key])) {
+ $this->lexic_permissions['KEYWORDS'][$key] = true;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for a keyword group
+ *
+ * @param int The key of the keyword group to turn on or off
+ * @param boolean Whether to turn highlighting for that group on or off
+ * @since 1.0.0
+ */
+ function set_keyword_group_highlighting($key, $flag = true) {
+ $this->lexic_permissions['KEYWORDS'][$key] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for comment groups. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param int The key of the comment group to change the styles of
+ * @param string The style to make the comments
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_comments_style($key, $style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['COMMENTS'][$key] = $style;
+ } else {
+ $this->language_data['STYLES']['COMMENTS'][$key] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for comment groups
+ *
+ * @param int The key of the comment group to turn on or off
+ * @param boolean Whether to turn highlighting for that group on or off
+ * @since 1.0.0
+ */
+ function set_comments_highlighting($key, $flag = true) {
+ $this->lexic_permissions['COMMENTS'][$key] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for escaped characters. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the escape characters
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_escape_characters_style($style, $preserve_defaults = false, $group = 0) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['ESCAPE_CHAR'][$group] = $style;
+ } else {
+ $this->language_data['STYLES']['ESCAPE_CHAR'][$group] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for escaped characters
+ *
+ * @param boolean Whether to turn highlighting for escape characters on or off
+ * @since 1.0.0
+ */
+ function set_escape_characters_highlighting($flag = true) {
+ $this->lexic_permissions['ESCAPE_CHAR'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for brackets. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * This method is DEPRECATED: use set_symbols_style instead.
+ * This method will be removed in 1.2.X
+ *
+ * @param string The style to make the brackets
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ * @deprecated In favour of set_symbols_style
+ */
+ function set_brackets_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['BRACKETS'][0] = $style;
+ } else {
+ $this->language_data['STYLES']['BRACKETS'][0] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for brackets
+ *
+ * This method is DEPRECATED: use set_symbols_highlighting instead.
+ * This method will be remove in 1.2.X
+ *
+ * @param boolean Whether to turn highlighting for brackets on or off
+ * @since 1.0.0
+ * @deprecated In favour of set_symbols_highlighting
+ */
+ function set_brackets_highlighting($flag) {
+ $this->lexic_permissions['BRACKETS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for symbols. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the symbols
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @param int Tells the group of symbols for which style should be set.
+ * @since 1.0.1
+ */
+ function set_symbols_style($style, $preserve_defaults = false, $group = 0) {
+ // Update the style of symbols
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['SYMBOLS'][$group] = $style;
+ } else {
+ $this->language_data['STYLES']['SYMBOLS'][$group] .= $style;
+ }
+
+ // For backward compatibility
+ if (0 == $group) {
+ $this->set_brackets_style ($style, $preserve_defaults);
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for symbols
+ *
+ * @param boolean Whether to turn highlighting for symbols on or off
+ * @since 1.0.0
+ */
+ function set_symbols_highlighting($flag) {
+ // Update lexic permissions for this symbol group
+ $this->lexic_permissions['SYMBOLS'] = ($flag) ? true : false;
+
+ // For backward compatibility
+ $this->set_brackets_highlighting ($flag);
+ }
+
+ /**
+ * Sets the styles for strings. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the escape characters
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_strings_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['STRINGS'][0] = $style;
+ } else {
+ $this->language_data['STYLES']['STRINGS'][0] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for strings
+ *
+ * @param boolean Whether to turn highlighting for strings on or off
+ * @since 1.0.0
+ */
+ function set_strings_highlighting($flag) {
+ $this->lexic_permissions['STRINGS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for strict code blocks. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the script blocks
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @param int Tells the group of script blocks for which style should be set.
+ * @since 1.0.8.4
+ */
+ function set_script_style($style, $preserve_defaults = false, $group = 0) {
+ // Update the style of symbols
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['SCRIPT'][$group] = $style;
+ } else {
+ $this->language_data['STYLES']['SCRIPT'][$group] .= $style;
+ }
+ }
+
+ /**
+ * Sets the styles for numbers. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the numbers
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_numbers_style($style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['NUMBERS'][0] = $style;
+ } else {
+ $this->language_data['STYLES']['NUMBERS'][0] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for numbers
+ *
+ * @param boolean Whether to turn highlighting for numbers on or off
+ * @since 1.0.0
+ */
+ function set_numbers_highlighting($flag) {
+ $this->lexic_permissions['NUMBERS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for methods. $key is a number that references the
+ * appropriate "object splitter" - see the language file for the language
+ * you are highlighting to get this number. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param int The key of the object splitter to change the styles of
+ * @param string The style to make the methods
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_methods_style($key, $style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['METHODS'][$key] = $style;
+ } else {
+ $this->language_data['STYLES']['METHODS'][$key] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for methods
+ *
+ * @param boolean Whether to turn highlighting for methods on or off
+ * @since 1.0.0
+ */
+ function set_methods_highlighting($flag) {
+ $this->lexic_permissions['METHODS'] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets the styles for regexps. If $preserve_defaults is
+ * true, then styles are merged with the default styles, with the
+ * user defined styles having priority
+ *
+ * @param string The style to make the regular expression matches
+ * @param boolean Whether to merge the new styles with the old or just
+ * to overwrite them
+ * @since 1.0.0
+ */
+ function set_regexps_style($key, $style, $preserve_defaults = false) {
+ if (!$preserve_defaults) {
+ $this->language_data['STYLES']['REGEXPS'][$key] = $style;
+ } else {
+ $this->language_data['STYLES']['REGEXPS'][$key] .= $style;
+ }
+ }
+
+ /**
+ * Turns highlighting on/off for regexps
+ *
+ * @param int The key of the regular expression group to turn on or off
+ * @param boolean Whether to turn highlighting for the regular expression group on or off
+ * @since 1.0.0
+ */
+ function set_regexps_highlighting($key, $flag) {
+ $this->lexic_permissions['REGEXPS'][$key] = ($flag) ? true : false;
+ }
+
+ /**
+ * Sets whether a set of keywords are checked for in a case sensitive manner
+ *
+ * @param int The key of the keyword group to change the case sensitivity of
+ * @param boolean Whether to check in a case sensitive manner or not
+ * @since 1.0.0
+ */
+ function set_case_sensitivity($key, $case) {
+ $this->language_data['CASE_SENSITIVE'][$key] = ($case) ? true : false;
+ }
+
+ /**
+ * Sets the case that keywords should use when found. Use the constants:
+ *
+ * - GESHI_CAPS_NO_CHANGE: leave keywords as-is
+ * - GESHI_CAPS_UPPER: convert all keywords to uppercase where found
+ * - GESHI_CAPS_LOWER: convert all keywords to lowercase where found
+ *
+ * @param int A constant specifying what to do with matched keywords
+ * @since 1.0.1
+ */
+ function set_case_keywords($case) {
+ if (in_array($case, array(
+ GESHI_CAPS_NO_CHANGE, GESHI_CAPS_UPPER, GESHI_CAPS_LOWER))) {
+ $this->language_data['CASE_KEYWORDS'] = $case;
+ }
+ }
+
+ /**
+ * Sets how many spaces a tab is substituted for
+ *
+ * Widths below zero are ignored
+ *
+ * @param int The tab width
+ * @since 1.0.0
+ */
+ function set_tab_width($width) {
+ $this->tab_width = intval($width);
+
+ //Check if it fit's the constraints:
+ if ($this->tab_width < 1) {
+ //Return it to the default
+ $this->tab_width = 8;
+ }
+ }
+
+ /**
+ * Sets whether or not to use tab-stop width specifed by language
+ *
+ * @param boolean Whether to use language-specific tab-stop widths
+ * @since 1.0.7.20
+ */
+ function set_use_language_tab_width($use) {
+ $this->use_language_tab_width = (bool) $use;
+ }
+
+ /**
+ * Returns the tab width to use, based on the current language and user
+ * preference
+ *
+ * @return int Tab width
+ * @since 1.0.7.20
+ */
+ function get_real_tab_width() {
+ if (!$this->use_language_tab_width ||
+ !isset($this->language_data['TAB_WIDTH'])) {
+ return $this->tab_width;
+ } else {
+ return $this->language_data['TAB_WIDTH'];
+ }
+ }
+
+ /**
+ * Enables/disables strict highlighting. Default is off, calling this
+ * method without parameters will turn it on. See documentation
+ * for more details on strict mode and where to use it.
+ *
+ * @param boolean Whether to enable strict mode or not
+ * @since 1.0.0
+ */
+ function enable_strict_mode($mode = true) {
+ if (GESHI_MAYBE == $this->language_data['STRICT_MODE_APPLIES']) {
+ $this->strict_mode = ($mode) ? GESHI_ALWAYS : GESHI_NEVER;
+ }
+ }
+
+ /**
+ * Disables all highlighting
+ *
+ * @since 1.0.0
+ * @todo Rewrite with array traversal
+ * @deprecated In favour of enable_highlighting
+ */
+ function disable_highlighting() {
+ $this->enable_highlighting(false);
+ }
+
+ /**
+ * Enables all highlighting
+ *
+ * The optional flag parameter was added in version 1.0.7.21 and can be used
+ * to enable (true) or disable (false) all highlighting.
+ *
+ * @since 1.0.0
+ * @param boolean A flag specifying whether to enable or disable all highlighting
+ * @todo Rewrite with array traversal
+ */
+ function enable_highlighting($flag = true) {
+ $flag = $flag ? true : false;
+ foreach ($this->lexic_permissions as $key => $value) {
+ if (is_array($value)) {
+ foreach ($value as $k => $v) {
+ $this->lexic_permissions[$key][$k] = $flag;
+ }
+ } else {
+ $this->lexic_permissions[$key] = $flag;
+ }
+ }
+
+ // Context blocks
+ $this->enable_important_blocks = $flag;
+ }
+
+ /**
+ * Given a file extension, this method returns either a valid geshi language
+ * name, or the empty string if it couldn't be found
+ *
+ * @param string The extension to get a language name for
+ * @param array A lookup array to use instead of the default one
+ * @since 1.0.5
+ * @todo Re-think about how this method works (maybe make it private and/or make it
+ * a extension->lang lookup?)
+ * @todo static?
+ */
+ function get_language_name_from_extension( $extension, $lookup = array() ) {
+ if ( !is_array($lookup) || empty($lookup)) {
+ $lookup = array(
+ 'abap' => array('abap'),
+ 'actionscript' => array('as'),
+ 'ada' => array('a', 'ada', 'adb', 'ads'),
+ 'apache' => array('conf'),
+ 'asm' => array('ash', 'asm', 'inc'),
+ 'asp' => array('asp'),
+ 'bash' => array('sh'),
+ 'bf' => array('bf'),
+ 'c' => array('c', 'h'),
+ 'c_mac' => array('c', 'h'),
+ 'caddcl' => array(),
+ 'cadlisp' => array(),
+ 'cdfg' => array('cdfg'),
+ 'cobol' => array('cbl'),
+ 'cpp' => array('cpp', 'hpp', 'C', 'H', 'CPP', 'HPP'),
+ 'csharp' => array('cs'),
+ 'css' => array('css'),
+ 'd' => array('d'),
+ 'delphi' => array('dpk', 'dpr', 'pp', 'pas'),
+ 'diff' => array('diff', 'patch'),
+ 'dos' => array('bat', 'cmd'),
+ 'gettext' => array('po', 'pot'),
+ 'gml' => array('gml'),
+ 'gnuplot' => array('plt'),
+ 'groovy' => array('groovy'),
+ 'haskell' => array('hs'),
+ 'html4strict' => array('html', 'htm'),
+ 'ini' => array('ini', 'desktop'),
+ 'java' => array('java'),
+ 'javascript' => array('js'),
+ 'klonec' => array('kl1'),
+ 'klonecpp' => array('klx'),
+ 'latex' => array('tex'),
+ 'lisp' => array('lisp'),
+ 'lua' => array('lua'),
+ 'matlab' => array('m'),
+ 'mpasm' => array(),
+ 'mysql' => array('sql'),
+ 'nsis' => array(),
+ 'objc' => array(),
+ 'oobas' => array(),
+ 'oracle8' => array(),
+ 'oracle10' => array(),
+ 'pascal' => array('pas'),
+ 'perl' => array('pl', 'pm'),
+ 'php' => array('php', 'php5', 'phtml', 'phps'),
+ 'povray' => array('pov'),
+ 'providex' => array('pvc', 'pvx'),
+ 'prolog' => array('pl'),
+ 'python' => array('py'),
+ 'qbasic' => array('bi'),
+ 'reg' => array('reg'),
+ 'ruby' => array('rb'),
+ 'sas' => array('sas'),
+ 'scala' => array('scala'),
+ 'scheme' => array('scm'),
+ 'scilab' => array('sci'),
+ 'smalltalk' => array('st'),
+ 'smarty' => array(),
+ 'tcl' => array('tcl'),
+ 'vb' => array('bas'),
+ 'vbnet' => array(),
+ 'visualfoxpro' => array(),
+ 'whitespace' => array('ws'),
+ 'xml' => array('xml', 'svg', 'xrc'),
+ 'z80' => array('z80', 'asm', 'inc')
+ );
+ }
+
+ foreach ($lookup as $lang => $extensions) {
+ if (in_array($extension, $extensions)) {
+ return $lang;
+ }
+ }
+ return '';
+ }
+
+ /**
+ * Given a file name, this method loads its contents in, and attempts
+ * to set the language automatically. An optional lookup table can be
+ * passed for looking up the language name. If not specified a default
+ * table is used
+ *
+ * The language table is in the form
+ * <pre>array(
+ * 'lang_name' => array('extension', 'extension', ...),
+ * 'lang_name' ...
+ * );</pre>
+ *
+ * @param string The filename to load the source from
+ * @param array A lookup array to use instead of the default one
+ * @todo Complete rethink of this and above method
+ * @since 1.0.5
+ */
+ function load_from_file($file_name, $lookup = array()) {
+ if (is_readable($file_name)) {
+ $this->set_source(file_get_contents($file_name));
+ $this->set_language($this->get_language_name_from_extension(substr(strrchr($file_name, '.'), 1), $lookup));
+ } else {
+ $this->error = GESHI_ERROR_FILE_NOT_READABLE;
+ }
+ }
+
+ /**
+ * Adds a keyword to a keyword group for highlighting
+ *
+ * @param int The key of the keyword group to add the keyword to
+ * @param string The word to add to the keyword group
+ * @since 1.0.0
+ */
+ function add_keyword($key, $word) {
+ if (!in_array($word, $this->language_data['KEYWORDS'][$key])) {
+ $this->language_data['KEYWORDS'][$key][] = $word;
+
+ //NEW in 1.0.8 don't recompile the whole optimized regexp, simply append it
+ if ($this->parse_cache_built) {
+ $subkey = count($this->language_data['CACHED_KEYWORD_LISTS'][$key]) - 1;
+ $this->language_data['CACHED_KEYWORD_LISTS'][$key][$subkey] .= '|' . preg_quote($word, '/');
+ }
+ }
+ }
+
+ /**
+ * Removes a keyword from a keyword group
+ *
+ * @param int The key of the keyword group to remove the keyword from
+ * @param string The word to remove from the keyword group
+ * @param bool Wether to automatically recompile the optimized regexp list or not.
+ * Note: if you set this to false and @see GeSHi->parse_code() was already called once,
+ * for the current language, you have to manually call @see GeSHi->optimize_keyword_group()
+ * or the removed keyword will stay in cache and still be highlighted! On the other hand
+ * it might be too expensive to recompile the regexp list for every removal if you want to
+ * remove a lot of keywords.
+ * @since 1.0.0
+ */
+ function remove_keyword($key, $word, $recompile = true) {
+ $key_to_remove = array_search($word, $this->language_data['KEYWORDS'][$key]);
+ if ($key_to_remove !== false) {
+ unset($this->language_data['KEYWORDS'][$key][$key_to_remove]);
+
+ //NEW in 1.0.8, optionally recompile keyword group
+ if ($recompile && $this->parse_cache_built) {
+ $this->optimize_keyword_group($key);
+ }
+ }
+ }
+
+ /**
+ * Creates a new keyword group
+ *
+ * @param int The key of the keyword group to create
+ * @param string The styles for the keyword group
+ * @param boolean Whether the keyword group is case sensitive ornot
+ * @param array The words to use for the keyword group
+ * @since 1.0.0
+ */
+ function add_keyword_group($key, $styles, $case_sensitive = true, $words = array()) {
+ $words = (array) $words;
+ if (empty($words)) {
+ // empty word lists mess up highlighting
+ return false;
+ }
+
+ //Add the new keyword group internally
+ $this->language_data['KEYWORDS'][$key] = $words;
+ $this->lexic_permissions['KEYWORDS'][$key] = true;
+ $this->language_data['CASE_SENSITIVE'][$key] = $case_sensitive;
+ $this->language_data['STYLES']['KEYWORDS'][$key] = $styles;
+
+ //NEW in 1.0.8, cache keyword regexp
+ if ($this->parse_cache_built) {
+ $this->optimize_keyword_group($key);
+ }
+ }
+
+ /**
+ * Removes a keyword group
+ *
+ * @param int The key of the keyword group to remove
+ * @since 1.0.0
+ */
+ function remove_keyword_group ($key) {
+ //Remove the keyword group internally
+ unset($this->language_data['KEYWORDS'][$key]);
+ unset($this->lexic_permissions['KEYWORDS'][$key]);
+ unset($this->language_data['CASE_SENSITIVE'][$key]);
+ unset($this->language_data['STYLES']['KEYWORDS'][$key]);
+
+ //NEW in 1.0.8
+ unset($this->language_data['CACHED_KEYWORD_LISTS'][$key]);
+ }
+
+ /**
+ * compile optimized regexp list for keyword group
+ *
+ * @param int The key of the keyword group to compile & optimize
+ * @since 1.0.8
+ */
+ function optimize_keyword_group($key) {
+ $this->language_data['CACHED_KEYWORD_LISTS'][$key] =
+ $this->optimize_regexp_list($this->language_data['KEYWORDS'][$key]);
+ $space_as_whitespace = false;
+ if(isset($this->language_data['PARSER_CONTROL'])) {
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS'])) {
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['SPACE_AS_WHITESPACE'])) {
+ $space_as_whitespace = $this->language_data['PARSER_CONTROL']['KEYWORDS']['SPACE_AS_WHITESPACE'];
+ }
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$key]['SPACE_AS_WHITESPACE'])) {
+ if(isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$key]['SPACE_AS_WHITESPACE'])) {
+ $space_as_whitespace = $this->language_data['PARSER_CONTROL']['KEYWORDS'][$key]['SPACE_AS_WHITESPACE'];
+ }
+ }
+ }
+ }
+ if($space_as_whitespace) {
+ foreach($this->language_data['CACHED_KEYWORD_LISTS'][$key] as $rxk => $rxv) {
+ $this->language_data['CACHED_KEYWORD_LISTS'][$key][$rxk] =
+ str_replace(" ", "\\s+", $rxv);
+ }
+ }
+ }
+
+ /**
+ * Sets the content of the header block
+ *
+ * @param string The content of the header block
+ * @since 1.0.2
+ */
+ function set_header_content($content) {
+ $this->header_content = $content;
+ }
+
+ /**
+ * Sets the content of the footer block
+ *
+ * @param string The content of the footer block
+ * @since 1.0.2
+ */
+ function set_footer_content($content) {
+ $this->footer_content = $content;
+ }
+
+ /**
+ * Sets the style for the header content
+ *
+ * @param string The style for the header content
+ * @since 1.0.2
+ */
+ function set_header_content_style($style) {
+ $this->header_content_style = $style;
+ }
+
+ /**
+ * Sets the style for the footer content
+ *
+ * @param string The style for the footer content
+ * @since 1.0.2
+ */
+ function set_footer_content_style($style) {
+ $this->footer_content_style = $style;
+ }
+
+ /**
+ * Sets whether to force a surrounding block around
+ * the highlighted code or not
+ *
+ * @param boolean Tells whether to enable or disable this feature
+ * @since 1.0.7.20
+ */
+ function enable_inner_code_block($flag) {
+ $this->force_code_block = (bool)$flag;
+ }
+
+ /**
+ * Sets the base URL to be used for keywords
+ *
+ * @param int The key of the keyword group to set the URL for
+ * @param string The URL to set for the group. If {FNAME} is in
+ * the url somewhere, it is replaced by the keyword
+ * that the URL is being made for
+ * @since 1.0.2
+ */
+ function set_url_for_keyword_group($group, $url) {
+ $this->language_data['URLS'][$group] = $url;
+ }
+
+ /**
+ * Sets styles for links in code
+ *
+ * @param int A constant that specifies what state the style is being
+ * set for - e.g. :hover or :visited
+ * @param string The styles to use for that state
+ * @since 1.0.2
+ */
+ function set_link_styles($type, $styles) {
+ $this->link_styles[$type] = $styles;
+ }
+
+ /**
+ * Sets the target for links in code
+ *
+ * @param string The target for links in the code, e.g. _blank
+ * @since 1.0.3
+ */
+ function set_link_target($target) {
+ if (!$target) {
+ $this->link_target = '';
+ } else {
+ $this->link_target = ' target="' . $target . '"';
+ }
+ }
+
+ /**
+ * Sets styles for important parts of the code
+ *
+ * @param string The styles to use on important parts of the code
+ * @since 1.0.2
+ */
+ function set_important_styles($styles) {
+ $this->important_styles = $styles;
+ }
+
+ /**
+ * Sets whether context-important blocks are highlighted
+ *
+ * @param boolean Tells whether to enable or disable highlighting of important blocks
+ * @todo REMOVE THIS SHIZ FROM GESHI!
+ * @deprecated
+ * @since 1.0.2
+ */
+ function enable_important_blocks($flag) {
+ $this->enable_important_blocks = ( $flag ) ? true : false;
+ }
+
+ /**
+ * Whether CSS IDs should be added to each line
+ *
+ * @param boolean If true, IDs will be added to each line.
+ * @since 1.0.2
+ */
+ function enable_ids($flag = true) {
+ $this->add_ids = ($flag) ? true : false;
+ }
+
+ /**
+ * Specifies which lines to highlight extra
+ *
+ * The extra style parameter was added in 1.0.7.21.
+ *
+ * @param mixed An array of line numbers to highlight, or just a line
+ * number on its own.
+ * @param string A string specifying the style to use for this line.
+ * If null is specified, the default style is used.
+ * If false is specified, the line will be removed from
+ * special highlighting
+ * @since 1.0.2
+ * @todo Some data replication here that could be cut down on
+ */
+ function highlight_lines_extra($lines, $style = null) {
+ if (is_array($lines)) {
+ //Split up the job using single lines at a time
+ foreach ($lines as $line) {
+ $this->highlight_lines_extra($line, $style);
+ }
+ } else {
+ //Mark the line as being highlighted specially
+ $lines = intval($lines);
+ $this->highlight_extra_lines[$lines] = $lines;
+
+ //Decide on which style to use
+ if ($style === null) { //Check if we should use default style
+ unset($this->highlight_extra_lines_styles[$lines]);
+ } else if ($style === false) { //Check if to remove this line
+ unset($this->highlight_extra_lines[$lines]);
+ unset($this->highlight_extra_lines_styles[$lines]);
+ } else {
+ $this->highlight_extra_lines_styles[$lines] = $style;
+ }
+ }
+ }
+
+ /**
+ * Sets the style for extra-highlighted lines
+ *
+ * @param string The style for extra-highlighted lines
+ * @since 1.0.2
+ */
+ function set_highlight_lines_extra_style($styles) {
+ $this->highlight_extra_lines_style = $styles;
+ }
+
+ /**
+ * Sets the line-ending
+ *
+ * @param string The new line-ending
+ * @since 1.0.2
+ */
+ function set_line_ending($line_ending) {
+ $this->line_ending = (string)$line_ending;
+ }
+
+ /**
+ * Sets what number line numbers should start at. Should
+ * be a positive integer, and will be converted to one.
+ *
+ * <b>Warning:</b> Using this method will add the "start"
+ * attribute to the &lt;ol&gt; that is used for line numbering.
+ * This is <b>not</b> valid XHTML strict, so if that's what you
+ * care about then don't use this method. Firefox is getting
+ * support for the CSS method of doing this in 1.1 and Opera
+ * has support for the CSS method, but (of course) IE doesn't
+ * so it's not worth doing it the CSS way yet.
+ *
+ * @param int The number to start line numbers at
+ * @since 1.0.2
+ */
+ function start_line_numbers_at($number) {
+ $this->line_numbers_start = abs(intval($number));
+ }
+
+ /**
+ * Sets the encoding used for htmlspecialchars(), for international
+ * support.
+ *
+ * NOTE: This is not needed for now because htmlspecialchars() is not
+ * being used (it has a security hole in PHP4 that has not been patched).
+ * Maybe in a future version it may make a return for speed reasons, but
+ * I doubt it.
+ *
+ * @param string The encoding to use for the source
+ * @since 1.0.3
+ */
+ function set_encoding($encoding) {
+ if ($encoding) {
+ $this->encoding = strtolower($encoding);
+ }
+ }
+
+ /**
+ * Turns linking of keywords on or off.
+ *
+ * @param boolean If true, links will be added to keywords
+ * @since 1.0.2
+ */
+ function enable_keyword_links($enable = true) {
+ $this->keyword_links = (bool) $enable;
+ }
+
+ /**
+ * Setup caches needed for styling. This is automatically called in
+ * parse_code() and get_stylesheet() when appropriate. This function helps
+ * stylesheet generators as they rely on some style information being
+ * preprocessed
+ *
+ * @since 1.0.8
+ * @access private
+ */
+ function build_style_cache() {
+ //Build the style cache needed to highlight numbers appropriate
+ if($this->lexic_permissions['NUMBERS']) {
+ //First check what way highlighting information for numbers are given
+ if(!isset($this->language_data['NUMBERS'])) {
+ $this->language_data['NUMBERS'] = 0;
+ }
+
+ if(is_array($this->language_data['NUMBERS'])) {
+ $this->language_data['NUMBERS_CACHE'] = $this->language_data['NUMBERS'];
+ } else {
+ $this->language_data['NUMBERS_CACHE'] = array();
+ if(!$this->language_data['NUMBERS']) {
+ $this->language_data['NUMBERS'] =
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_FLT_NONSCI;
+ }
+
+ for($i = 0, $j = $this->language_data['NUMBERS']; $j > 0; ++$i, $j>>=1) {
+ //Rearrange style indices if required ...
+ if(isset($this->language_data['STYLES']['NUMBERS'][1<<$i])) {
+ $this->language_data['STYLES']['NUMBERS'][$i] =
+ $this->language_data['STYLES']['NUMBERS'][1<<$i];
+ unset($this->language_data['STYLES']['NUMBERS'][1<<$i]);
+ }
+
+ //Check if this bit is set for highlighting
+ if($j&1) {
+ //So this bit is set ...
+ //Check if it belongs to group 0 or the actual stylegroup
+ if(isset($this->language_data['STYLES']['NUMBERS'][$i])) {
+ $this->language_data['NUMBERS_CACHE'][$i] = 1 << $i;
+ } else {
+ if(!isset($this->language_data['NUMBERS_CACHE'][0])) {
+ $this->language_data['NUMBERS_CACHE'][0] = 0;
+ }
+ $this->language_data['NUMBERS_CACHE'][0] |= 1 << $i;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Setup caches needed for parsing. This is automatically called in parse_code() when appropriate.
+ * This function makes stylesheet generators much faster as they do not need these caches.
+ *
+ * @since 1.0.8
+ * @access private
+ */
+ function build_parse_cache() {
+ // cache symbol regexp
+ //As this is a costy operation, we avoid doing it for multiple groups ...
+ //Instead we perform it for all symbols at once.
+ //
+ //For this to work, we need to reorganize the data arrays.
+ if ($this->lexic_permissions['SYMBOLS'] && !empty($this->language_data['SYMBOLS'])) {
+ $this->language_data['MULTIPLE_SYMBOL_GROUPS'] = count($this->language_data['STYLES']['SYMBOLS']) > 1;
+
+ $this->language_data['SYMBOL_DATA'] = array();
+ $symbol_preg_multi = array(); // multi char symbols
+ $symbol_preg_single = array(); // single char symbols
+ foreach ($this->language_data['SYMBOLS'] as $key => $symbols) {
+ if (is_array($symbols)) {
+ foreach ($symbols as $sym) {
+ $sym = $this->hsc($sym);
+ if (!isset($this->language_data['SYMBOL_DATA'][$sym])) {
+ $this->language_data['SYMBOL_DATA'][$sym] = $key;
+ if (isset($sym[1])) { // multiple chars
+ $symbol_preg_multi[] = preg_quote($sym, '/');
+ } else { // single char
+ if ($sym == '-') {
+ // don't trigger range out of order error
+ $symbol_preg_single[] = '\-';
+ } else {
+ $symbol_preg_single[] = preg_quote($sym, '/');
+ }
+ }
+ }
+ }
+ } else {
+ $symbols = $this->hsc($symbols);
+ if (!isset($this->language_data['SYMBOL_DATA'][$symbols])) {
+ $this->language_data['SYMBOL_DATA'][$symbols] = 0;
+ if (isset($symbols[1])) { // multiple chars
+ $symbol_preg_multi[] = preg_quote($symbols, '/');
+ } else if ($symbols == '-') {
+ // don't trigger range out of order error
+ $symbol_preg_single[] = '\-';
+ } else { // single char
+ $symbol_preg_single[] = preg_quote($symbols, '/');
+ }
+ }
+ }
+ }
+
+ //Now we have an array with each possible symbol as the key and the style as the actual data.
+ //This way we can set the correct style just the moment we highlight ...
+ //
+ //Now we need to rewrite our array to get a search string that
+ $symbol_preg = array();
+ if (!empty($symbol_preg_multi)) {
+ rsort($symbol_preg_multi);
+ $symbol_preg[] = implode('|', $symbol_preg_multi);
+ }
+ if (!empty($symbol_preg_single)) {
+ rsort($symbol_preg_single);
+ $symbol_preg[] = '[' . implode('', $symbol_preg_single) . ']';
+ }
+ $this->language_data['SYMBOL_SEARCH'] = implode("|", $symbol_preg);
+ }
+
+ // cache optimized regexp for keyword matching
+ // remove old cache
+ $this->language_data['CACHED_KEYWORD_LISTS'] = array();
+ foreach (array_keys($this->language_data['KEYWORDS']) as $key) {
+ if (!isset($this->lexic_permissions['KEYWORDS'][$key]) ||
+ $this->lexic_permissions['KEYWORDS'][$key]) {
+ $this->optimize_keyword_group($key);
+ }
+ }
+
+ // brackets
+ if ($this->lexic_permissions['BRACKETS']) {
+ $this->language_data['CACHE_BRACKET_MATCH'] = array('[', ']', '(', ')', '{', '}');
+ if (!$this->use_classes && isset($this->language_data['STYLES']['BRACKETS'][0])) {
+ $this->language_data['CACHE_BRACKET_REPLACE'] = array(
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#91;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#93;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#40;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#41;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#123;|>',
+ '<| style="' . $this->language_data['STYLES']['BRACKETS'][0] . '">&#125;|>',
+ );
+ }
+ else {
+ $this->language_data['CACHE_BRACKET_REPLACE'] = array(
+ '<| class="br0">&#91;|>',
+ '<| class="br0">&#93;|>',
+ '<| class="br0">&#40;|>',
+ '<| class="br0">&#41;|>',
+ '<| class="br0">&#123;|>',
+ '<| class="br0">&#125;|>',
+ );
+ }
+ }
+
+ //Build the parse cache needed to highlight numbers appropriate
+ if($this->lexic_permissions['NUMBERS']) {
+ //Check if the style rearrangements have been processed ...
+ //This also does some preprocessing to check which style groups are useable ...
+ if(!isset($this->language_data['NUMBERS_CACHE'])) {
+ $this->build_style_cache();
+ }
+
+ //Number format specification
+ //All this formats are matched case-insensitively!
+ static $numbers_format = array(
+ GESHI_NUMBER_INT_BASIC =>
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])([1-9]\d*?|0)(?![0-9a-z]|\.(?!(?m:$)))',
+ GESHI_NUMBER_INT_CSTYLE =>
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])([1-9]\d*?|0)l(?![0-9a-z\.])',
+ GESHI_NUMBER_BIN_SUFFIX =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])[01]+?b(?![0-9a-z\.])',
+ GESHI_NUMBER_BIN_PREFIX_PERCENT =>
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])%[01]+?(?![0-9a-z\.])',
+ GESHI_NUMBER_BIN_PREFIX_0B =>
+ '(?<![0-9a-z_\.%])(?<![\d\.]e[+\-])0b[01]+?(?![0-9a-z\.])',
+ GESHI_NUMBER_OCT_PREFIX =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])0[0-7]+?(?![0-9a-z\.])',
+ GESHI_NUMBER_OCT_SUFFIX =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])[0-7]+?o(?![0-9a-z\.])',
+ GESHI_NUMBER_HEX_PREFIX =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])0x[0-9a-f]+?(?![0-9a-z\.])',
+ GESHI_NUMBER_HEX_SUFFIX =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])\d[0-9a-f]*?h(?![0-9a-z\.])',
+ GESHI_NUMBER_FLT_NONSCI =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])\d+?\.\d+?(?![0-9a-z\.])',
+ GESHI_NUMBER_FLT_NONSCI_F =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])(?:\d+?(?:\.\d*?)?|\.\d+?)f(?![0-9a-z\.])',
+ GESHI_NUMBER_FLT_SCI_SHORT =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])\.\d+?(?:e[+\-]?\d+?)?(?![0-9a-z\.])',
+ GESHI_NUMBER_FLT_SCI_ZERO =>
+ '(?<![0-9a-z_\.])(?<![\d\.]e[+\-])(?:\d+?(?:\.\d*?)?|\.\d+?)(?:e[+\-]?\d+?)?(?![0-9a-z\.])'
+ );
+
+ //At this step we have an associative array with flag groups for a
+ //specific style or an string denoting a regexp given its index.
+ $this->language_data['NUMBERS_RXCACHE'] = array();
+ foreach($this->language_data['NUMBERS_CACHE'] as $key => $rxdata) {
+ if(is_string($rxdata)) {
+ $regexp = $rxdata;
+ } else {
+ //This is a bitfield of number flags to highlight:
+ //Build an array, implode them together and make this the actual RX
+ $rxuse = array();
+ for($i = 1; $i <= $rxdata; $i<<=1) {
+ if($rxdata & $i) {
+ $rxuse[] = $numbers_format[$i];
+ }
+ }
+ $regexp = implode("|", $rxuse);
+ }
+
+ $this->language_data['NUMBERS_RXCACHE'][$key] =
+ "/(?<!<\|\/)(?<!<\|!REG3XP)(?<!<\|\/NUM!)(?<!\d\/>)($regexp)(?!\|>)(?![^\"\|\>\<]+<)/i";
+ }
+ }
+
+ $this->parse_cache_built = true;
+ }
+
+ /**
+ * Returns the code in $this->source, highlighted and surrounded by the
+ * nessecary HTML.
+ *
+ * This should only be called ONCE, cos it's SLOW! If you want to highlight
+ * the same source multiple times, you're better off doing a whole lot of
+ * str_replaces to replace the &lt;span&gt;s
+ *
+ * @since 1.0.0
+ */
+ function parse_code () {
+ // Start the timer
+ $start_time = microtime();
+
+ // Firstly, if there is an error, we won't highlight
+ if ($this->error) {
+ //Escape the source for output
+ $result = $this->hsc($this->source);
+
+ //This fix is related to SF#1923020, but has to be applied regardless of
+ //actually highlighting symbols.
+ $result = str_replace(array('<SEMI>', '<PIPE>'), array(';', '|'), $result);
+
+ // Timing is irrelevant
+ $this->set_time($start_time, $start_time);
+ $this->finalise($result);
+ return $result;
+ }
+
+ // make sure the parse cache is up2date
+ if (!$this->parse_cache_built) {
+ $this->build_parse_cache();
+ }
+
+ // Replace all newlines to a common form.
+ $code = str_replace("\r\n", "\n", $this->source);
+ $code = str_replace("\r", "\n", $code);
+
+ // Add spaces for regular expression matching and line numbers
+// $code = "\n" . $code . "\n";
+
+ // Initialise various stuff
+ $length = strlen($code);
+ $COMMENT_MATCHED = false;
+ $stuff_to_parse = '';
+ $endresult = '';
+
+ // "Important" selections are handled like multiline comments
+ // @todo GET RID OF THIS SHIZ
+ if ($this->enable_important_blocks) {
+ $this->language_data['COMMENT_MULTI'][GESHI_START_IMPORTANT] = GESHI_END_IMPORTANT;
+ }
+
+ if ($this->strict_mode) {
+ // Break the source into bits. Each bit will be a portion of the code
+ // within script delimiters - for example, HTML between < and >
+ $k = 0;
+ $parts = array();
+ $matches = array();
+ $next_match_pointer = null;
+ // we use a copy to unset delimiters on demand (when they are not found)
+ $delim_copy = $this->language_data['SCRIPT_DELIMITERS'];
+ $i = 0;
+ while ($i < $length) {
+ $next_match_pos = $length + 1; // never true
+ foreach ($delim_copy as $dk => $delimiters) {
+ if(is_array($delimiters)) {
+ foreach ($delimiters as $open => $close) {
+ // make sure the cache is setup properly
+ if (!isset($matches[$dk][$open])) {
+ $matches[$dk][$open] = array(
+ 'next_match' => -1,
+ 'dk' => $dk,
+
+ 'open' => $open, // needed for grouping of adjacent code blocks (see below)
+ 'open_strlen' => strlen($open),
+
+ 'close' => $close,
+ 'close_strlen' => strlen($close),
+ );
+ }
+ // Get the next little bit for this opening string
+ if ($matches[$dk][$open]['next_match'] < $i) {
+ // only find the next pos if it was not already cached
+ $open_pos = strpos($code, $open, $i);
+ if ($open_pos === false) {
+ // no match for this delimiter ever
+ unset($delim_copy[$dk][$open]);
+ continue;
+ }
+ $matches[$dk][$open]['next_match'] = $open_pos;
+ }
+ if ($matches[$dk][$open]['next_match'] < $next_match_pos) {
+ //So we got a new match, update the close_pos
+ $matches[$dk][$open]['close_pos'] =
+ strpos($code, $close, $matches[$dk][$open]['next_match']+1);
+
+ $next_match_pointer =& $matches[$dk][$open];
+ $next_match_pos = $matches[$dk][$open]['next_match'];
+ }
+ }
+ } else {
+ //So we should match an RegExp as Strict Block ...
+ /**
+ * The value in $delimiters is expected to be an RegExp
+ * containing exactly 2 matching groups:
+ * - Group 1 is the opener
+ * - Group 2 is the closer
+ */
+ if(!GESHI_PHP_PRE_433 && //Needs proper rewrite to work with PHP >=4.3.0; 4.3.3 is guaranteed to work.
+ preg_match($delimiters, $code, $matches_rx, PREG_OFFSET_CAPTURE, $i)) {
+ //We got a match ...
+ if(isset($matches_rx['start']) && isset($matches_rx['end']))
+ {
+ $matches[$dk] = array(
+ 'next_match' => $matches_rx['start'][1],
+ 'dk' => $dk,
+
+ 'close_strlen' => strlen($matches_rx['end'][0]),
+ 'close_pos' => $matches_rx['end'][1],
+ );
+ } else {
+ $matches[$dk] = array(
+ 'next_match' => $matches_rx[1][1],
+ 'dk' => $dk,
+
+ 'close_strlen' => strlen($matches_rx[2][0]),
+ 'close_pos' => $matches_rx[2][1],
+ );
+ }
+ } else {
+ // no match for this delimiter ever
+ unset($delim_copy[$dk]);
+ continue;
+ }
+
+ if ($matches[$dk]['next_match'] <= $next_match_pos) {
+ $next_match_pointer =& $matches[$dk];
+ $next_match_pos = $matches[$dk]['next_match'];
+ }
+ }
+ }
+
+ // non-highlightable text
+ $parts[$k] = array(
+ 1 => substr($code, $i, $next_match_pos - $i)
+ );
+ ++$k;
+
+ if ($next_match_pos > $length) {
+ // out of bounds means no next match was found
+ break;
+ }
+
+ // highlightable code
+ $parts[$k][0] = $next_match_pointer['dk'];
+
+ //Only combine for non-rx script blocks
+ if(is_array($delim_copy[$next_match_pointer['dk']])) {
+ // group adjacent script blocks, e.g. <foobar><asdf> should be one block, not three!
+ $i = $next_match_pos + $next_match_pointer['open_strlen'];
+ while (true) {
+ $close_pos = strpos($code, $next_match_pointer['close'], $i);
+ if ($close_pos == false) {
+ break;
+ }
+ $i = $close_pos + $next_match_pointer['close_strlen'];
+ if ($i == $length) {
+ break;
+ }
+ if ($code[$i] == $next_match_pointer['open'][0] && ($next_match_pointer['open_strlen'] == 1 ||
+ substr($code, $i, $next_match_pointer['open_strlen']) == $next_match_pointer['open'])) {
+ // merge adjacent but make sure we don't merge things like <tag><!-- comment -->
+ foreach ($matches as $submatches) {
+ foreach ($submatches as $match) {
+ if ($match['next_match'] == $i) {
+ // a different block already matches here!
+ break 3;
+ }
+ }
+ }
+ } else {
+ break;
+ }
+ }
+ } else {
+ $close_pos = $next_match_pointer['close_pos'] + $next_match_pointer['close_strlen'];
+ $i = $close_pos;
+ }
+
+ if ($close_pos === false) {
+ // no closing delimiter found!
+ $parts[$k][1] = substr($code, $next_match_pos);
+ ++$k;
+ break;
+ } else {
+ $parts[$k][1] = substr($code, $next_match_pos, $i - $next_match_pos);
+ ++$k;
+ }
+ }
+ unset($delim_copy, $next_match_pointer, $next_match_pos, $matches);
+ $num_parts = $k;
+
+ if ($num_parts == 1 && $this->strict_mode == GESHI_MAYBE) {
+ // when we have only one part, we don't have anything to highlight at all.
+ // if we have a "maybe" strict language, this should be handled as highlightable code
+ $parts = array(
+ 0 => array(
+ 0 => '',
+ 1 => ''
+ ),
+ 1 => array(
+ 0 => null,
+ 1 => $parts[0][1]
+ )
+ );
+ $num_parts = 2;
+ }
+
+ } else {
+ // Not strict mode - simply dump the source into
+ // the array at index 1 (the first highlightable block)
+ $parts = array(
+ 0 => array(
+ 0 => '',
+ 1 => ''
+ ),
+ 1 => array(
+ 0 => null,
+ 1 => $code
+ )
+ );
+ $num_parts = 2;
+ }
+
+ //Unset variables we won't need any longer
+ unset($code);
+
+ //Preload some repeatedly used values regarding hardquotes ...
+ $hq = isset($this->language_data['HARDQUOTE']) ? $this->language_data['HARDQUOTE'][0] : false;
+ $hq_strlen = strlen($hq);
+
+ //Preload if line numbers are to be generated afterwards
+ //Added a check if line breaks should be forced even without line numbers, fixes SF#1727398
+ $check_linenumbers = $this->line_numbers != GESHI_NO_LINE_NUMBERS ||
+ !empty($this->highlight_extra_lines) || !$this->allow_multiline_span;
+
+ //preload the escape char for faster checking ...
+ $escaped_escape_char = $this->hsc($this->language_data['ESCAPE_CHAR']);
+
+ // this is used for single-line comments
+ $sc_disallowed_before = "";
+ $sc_disallowed_after = "";
+
+ if (isset($this->language_data['PARSER_CONTROL'])) {
+ if (isset($this->language_data['PARSER_CONTROL']['COMMENTS'])) {
+ if (isset($this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_BEFORE'])) {
+ $sc_disallowed_before = $this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_BEFORE'];
+ }
+ if (isset($this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_AFTER'])) {
+ $sc_disallowed_after = $this->language_data['PARSER_CONTROL']['COMMENTS']['DISALLOWED_AFTER'];
+ }
+ }
+ }
+
+ //Fix for SF#1932083: Multichar Quotemarks unsupported
+ $is_string_starter = array();
+ if ($this->lexic_permissions['STRINGS']) {
+ foreach ($this->language_data['QUOTEMARKS'] as $quotemark) {
+ if (!isset($is_string_starter[$quotemark[0]])) {
+ $is_string_starter[$quotemark[0]] = (string)$quotemark;
+ } else if (is_string($is_string_starter[$quotemark[0]])) {
+ $is_string_starter[$quotemark[0]] = array(
+ $is_string_starter[$quotemark[0]],
+ $quotemark);
+ } else {
+ $is_string_starter[$quotemark[0]][] = $quotemark;
+ }
+ }
+ }
+
+ // Now we go through each part. We know that even-indexed parts are
+ // code that shouldn't be highlighted, and odd-indexed parts should
+ // be highlighted
+ for ($key = 0; $key < $num_parts; ++$key) {
+ $STRICTATTRS = '';
+
+ // If this block should be highlighted...
+ if (!($key & 1)) {
+ // Else not a block to highlight
+ $endresult .= $this->hsc($parts[$key][1]);
+ unset($parts[$key]);
+ continue;
+ }
+
+ $result = '';
+ $part = $parts[$key][1];
+
+ $highlight_part = true;
+ if ($this->strict_mode && !is_null($parts[$key][0])) {
+ // get the class key for this block of code
+ $script_key = $parts[$key][0];
+ $highlight_part = $this->language_data['HIGHLIGHT_STRICT_BLOCK'][$script_key];
+ if ($this->language_data['STYLES']['SCRIPT'][$script_key] != '' &&
+ $this->lexic_permissions['SCRIPT']) {
+ // Add a span element around the source to
+ // highlight the overall source block
+ if (!$this->use_classes &&
+ $this->language_data['STYLES']['SCRIPT'][$script_key] != '') {
+ $attributes = ' style="' . $this->language_data['STYLES']['SCRIPT'][$script_key] . '"';
+ } else {
+ $attributes = ' class="sc' . $script_key . '"';
+ }
+ $result .= "<span$attributes>";
+ $STRICTATTRS = $attributes;
+ }
+ }
+
+ if ($highlight_part) {
+ // Now, highlight the code in this block. This code
+ // is really the engine of GeSHi (along with the method
+ // parse_non_string_part).
+
+ // cache comment regexps incrementally
+ $next_comment_regexp_key = '';
+ $next_comment_regexp_pos = -1;
+ $next_comment_multi_pos = -1;
+ $next_comment_single_pos = -1;
+ $comment_regexp_cache_per_key = array();
+ $comment_multi_cache_per_key = array();
+ $comment_single_cache_per_key = array();
+ $next_open_comment_multi = '';
+ $next_comment_single_key = '';
+ $escape_regexp_cache_per_key = array();
+ $next_escape_regexp_key = '';
+ $next_escape_regexp_pos = -1;
+
+ $length = strlen($part);
+ for ($i = 0; $i < $length; ++$i) {
+ // Get the next char
+ $char = $part[$i];
+ $char_len = 1;
+
+ // update regexp comment cache if needed
+ if (isset($this->language_data['COMMENT_REGEXP']) && $next_comment_regexp_pos < $i) {
+ $next_comment_regexp_pos = $length;
+ foreach ($this->language_data['COMMENT_REGEXP'] as $comment_key => $regexp) {
+ $match_i = false;
+ if (isset($comment_regexp_cache_per_key[$comment_key]) &&
+ ($comment_regexp_cache_per_key[$comment_key]['pos'] >= $i ||
+ $comment_regexp_cache_per_key[$comment_key]['pos'] === false)) {
+ // we have already matched something
+ if ($comment_regexp_cache_per_key[$comment_key]['pos'] === false) {
+ // this comment is never matched
+ continue;
+ }
+ $match_i = $comment_regexp_cache_per_key[$comment_key]['pos'];
+ } else if (
+ //This is to allow use of the offset parameter in preg_match and stay as compatible with older PHP versions as possible
+ (GESHI_PHP_PRE_433 && preg_match($regexp, substr($part, $i), $match, PREG_OFFSET_CAPTURE)) ||
+ (!GESHI_PHP_PRE_433 && preg_match($regexp, $part, $match, PREG_OFFSET_CAPTURE, $i))
+ ) {
+ $match_i = $match[0][1];
+ if (GESHI_PHP_PRE_433) {
+ $match_i += $i;
+ }
+
+ $comment_regexp_cache_per_key[$comment_key] = array(
+ 'key' => $comment_key,
+ 'length' => strlen($match[0][0]),
+ 'pos' => $match_i
+ );
+ } else {
+ $comment_regexp_cache_per_key[$comment_key]['pos'] = false;
+ continue;
+ }
+
+ if ($match_i !== false && $match_i < $next_comment_regexp_pos) {
+ $next_comment_regexp_pos = $match_i;
+ $next_comment_regexp_key = $comment_key;
+ if ($match_i === $i) {
+ break;
+ }
+ }
+ }
+ }
+
+ $string_started = false;
+
+ if (isset($is_string_starter[$char])) {
+ // Possibly the start of a new string ...
+
+ //Check which starter it was ...
+ //Fix for SF#1932083: Multichar Quotemarks unsupported
+ if (is_array($is_string_starter[$char])) {
+ $char_new = '';
+ foreach ($is_string_starter[$char] as $testchar) {
+ if ($testchar === substr($part, $i, strlen($testchar)) &&
+ strlen($testchar) > strlen($char_new)) {
+ $char_new = $testchar;
+ $string_started = true;
+ }
+ }
+ if ($string_started) {
+ $char = $char_new;
+ }
+ } else {
+ $testchar = $is_string_starter[$char];
+ if ($testchar === substr($part, $i, strlen($testchar))) {
+ $char = $testchar;
+ $string_started = true;
+ }
+ }
+ $char_len = strlen($char);
+ }
+
+ if ($string_started && ($i != $next_comment_regexp_pos)) {
+ // Hand out the correct style information for this string
+ $string_key = array_search($char, $this->language_data['QUOTEMARKS']);
+ if (!isset($this->language_data['STYLES']['STRINGS'][$string_key]) ||
+ !isset($this->language_data['STYLES']['ESCAPE_CHAR'][$string_key])) {
+ $string_key = 0;
+ }
+
+ // parse the stuff before this
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+
+ if (!$this->use_classes) {
+ $string_attributes = ' style="' . $this->language_data['STYLES']['STRINGS'][$string_key] . '"';
+ } else {
+ $string_attributes = ' class="st'.$string_key.'"';
+ }
+
+ // now handle the string
+ $string = "<span$string_attributes>" . GeSHi::hsc($char);
+ $start = $i + $char_len;
+ $string_open = true;
+
+ if(empty($this->language_data['ESCAPE_REGEXP'])) {
+ $next_escape_regexp_pos = $length;
+ }
+
+ do {
+ //Get the regular ending pos ...
+ $close_pos = strpos($part, $char, $start);
+ if(false === $close_pos) {
+ $close_pos = $length;
+ }
+
+ if($this->lexic_permissions['ESCAPE_CHAR']) {
+ // update escape regexp cache if needed
+ if (isset($this->language_data['ESCAPE_REGEXP']) && $next_escape_regexp_pos < $start) {
+ $next_escape_regexp_pos = $length;
+ foreach ($this->language_data['ESCAPE_REGEXP'] as $escape_key => $regexp) {
+ $match_i = false;
+ if (isset($escape_regexp_cache_per_key[$escape_key]) &&
+ ($escape_regexp_cache_per_key[$escape_key]['pos'] >= $start ||
+ $escape_regexp_cache_per_key[$escape_key]['pos'] === false)) {
+ // we have already matched something
+ if ($escape_regexp_cache_per_key[$escape_key]['pos'] === false) {
+ // this comment is never matched
+ continue;
+ }
+ $match_i = $escape_regexp_cache_per_key[$escape_key]['pos'];
+ } else if (
+ //This is to allow use of the offset parameter in preg_match and stay as compatible with older PHP versions as possible
+ (GESHI_PHP_PRE_433 && preg_match($regexp, substr($part, $start), $match, PREG_OFFSET_CAPTURE)) ||
+ (!GESHI_PHP_PRE_433 && preg_match($regexp, $part, $match, PREG_OFFSET_CAPTURE, $start))
+ ) {
+ $match_i = $match[0][1];
+ if (GESHI_PHP_PRE_433) {
+ $match_i += $start;
+ }
+
+ $escape_regexp_cache_per_key[$escape_key] = array(
+ 'key' => $escape_key,
+ 'length' => strlen($match[0][0]),
+ 'pos' => $match_i
+ );
+ } else {
+ $escape_regexp_cache_per_key[$escape_key]['pos'] = false;
+ continue;
+ }
+
+ if ($match_i !== false && $match_i < $next_escape_regexp_pos) {
+ $next_escape_regexp_pos = $match_i;
+ $next_escape_regexp_key = $escape_key;
+ if ($match_i === $start) {
+ break;
+ }
+ }
+ }
+ }
+
+ //Find the next simple escape position
+ if('' != $this->language_data['ESCAPE_CHAR']) {
+ $simple_escape = strpos($part, $this->language_data['ESCAPE_CHAR'], $start);
+ if(false === $simple_escape) {
+ $simple_escape = $length;
+ }
+ } else {
+ $simple_escape = $length;
+ }
+ } else {
+ $next_escape_regexp_pos = $length;
+ $simple_escape = $length;
+ }
+
+ if($simple_escape < $next_escape_regexp_pos &&
+ $simple_escape < $length &&
+ $simple_escape < $close_pos) {
+ //The nexxt escape sequence is a simple one ...
+ $es_pos = $simple_escape;
+
+ //Add the stuff not in the string yet ...
+ $string .= $this->hsc(substr($part, $start, $es_pos - $start));
+
+ //Get the style for this escaped char ...
+ if (!$this->use_classes) {
+ $escape_char_attributes = ' style="' . $this->language_data['STYLES']['ESCAPE_CHAR'][0] . '"';
+ } else {
+ $escape_char_attributes = ' class="es0"';
+ }
+
+ //Add the style for the escape char ...
+ $string .= "<span$escape_char_attributes>" .
+ GeSHi::hsc($this->language_data['ESCAPE_CHAR']);
+
+ //Get the byte AFTER the ESCAPE_CHAR we just found
+ $es_char = $part[$es_pos + 1];
+ if ($es_char == "\n") {
+ // don't put a newline around newlines
+ $string .= "</span>\n";
+ $start = $es_pos + 2;
+ } else if (ord($es_char) >= 128) {
+ //This is an non-ASCII char (UTF8 or single byte)
+ //This code tries to work around SF#2037598 ...
+ if(function_exists('mb_substr')) {
+ $es_char_m = mb_substr(substr($part, $es_pos+1, 16), 0, 1, $this->encoding);
+ $string .= $es_char_m . '</span>';
+ } else if (!GESHI_PHP_PRE_433 && 'utf-8' == $this->encoding) {
+ if(preg_match("/[\xC2-\xDF][\x80-\xBF]".
+ "|\xE0[\xA0-\xBF][\x80-\xBF]".
+ "|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}".
+ "|\xED[\x80-\x9F][\x80-\xBF]".
+ "|\xF0[\x90-\xBF][\x80-\xBF]{2}".
+ "|[\xF1-\xF3][\x80-\xBF]{3}".
+ "|\xF4[\x80-\x8F][\x80-\xBF]{2}/s",
+ $part, $es_char_m, null, $es_pos + 1)) {
+ $es_char_m = $es_char_m[0];
+ } else {
+ $es_char_m = $es_char;
+ }
+ $string .= $this->hsc($es_char_m) . '</span>';
+ } else {
+ $es_char_m = $this->hsc($es_char);
+ }
+ $start = $es_pos + strlen($es_char_m) + 1;
+ } else {
+ $string .= $this->hsc($es_char) . '</span>';
+ $start = $es_pos + 2;
+ }
+ } else if ($next_escape_regexp_pos < $length &&
+ $next_escape_regexp_pos < $close_pos) {
+ $es_pos = $next_escape_regexp_pos;
+ //Add the stuff not in the string yet ...
+ $string .= $this->hsc(substr($part, $start, $es_pos - $start));
+
+ //Get the key and length of this match ...
+ $escape = $escape_regexp_cache_per_key[$next_escape_regexp_key];
+ $escape_str = substr($part, $es_pos, $escape['length']);
+ $escape_key = $escape['key'];
+
+ //Get the style for this escaped char ...
+ if (!$this->use_classes) {
+ $escape_char_attributes = ' style="' . $this->language_data['STYLES']['ESCAPE_CHAR'][$escape_key] . '"';
+ } else {
+ $escape_char_attributes = ' class="es' . $escape_key . '"';
+ }
+
+ //Add the style for the escape char ...
+ $string .= "<span$escape_char_attributes>" .
+ $this->hsc($escape_str) . '</span>';
+
+ $start = $es_pos + $escape['length'];
+ } else {
+ //Copy the remainder of the string ...
+ $string .= $this->hsc(substr($part, $start, $close_pos - $start + $char_len)) . '</span>';
+ $start = $close_pos + $char_len;
+ $string_open = false;
+ }
+ } while($string_open);
+
+ if ($check_linenumbers) {
+ // Are line numbers used? If, we should end the string before
+ // the newline and begin it again (so when <li>s are put in the source
+ // remains XHTML compliant)
+ // note to self: This opens up possibility of config files specifying
+ // that languages can/cannot have multiline strings???
+ $string = str_replace("\n", "</span>\n<span$string_attributes>", $string);
+ }
+
+ $result .= $string;
+ $string = '';
+ $i = $start - 1;
+ continue;
+ } else if ($this->lexic_permissions['STRINGS'] && $hq && $hq[0] == $char &&
+ substr($part, $i, $hq_strlen) == $hq && ($i != $next_comment_regexp_pos)) {
+ // The start of a hard quoted string
+ if (!$this->use_classes) {
+ $string_attributes = ' style="' . $this->language_data['STYLES']['STRINGS']['HARD'] . '"';
+ $escape_char_attributes = ' style="' . $this->language_data['STYLES']['ESCAPE_CHAR']['HARD'] . '"';
+ } else {
+ $string_attributes = ' class="st_h"';
+ $escape_char_attributes = ' class="es_h"';
+ }
+ // parse the stuff before this
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+
+ // now handle the string
+ $string = '';
+
+ // look for closing quote
+ $start = $i + $hq_strlen;
+ while ($close_pos = strpos($part, $this->language_data['HARDQUOTE'][1], $start)) {
+ $start = $close_pos + 1;
+ if ($this->lexic_permissions['ESCAPE_CHAR'] && $part[$close_pos - 1] == $this->language_data['HARDCHAR']) {
+ // make sure this quote is not escaped
+ foreach ($this->language_data['HARDESCAPE'] as $hardescape) {
+ if (substr($part, $close_pos - 1, strlen($hardescape)) == $hardescape) {
+ // check wether this quote is escaped or if it is something like '\\'
+ $escape_char_pos = $close_pos - 1;
+ while ($escape_char_pos > 0
+ && $part[$escape_char_pos - 1] == $this->language_data['HARDCHAR']) {
+ --$escape_char_pos;
+ }
+ if (($close_pos - $escape_char_pos) & 1) {
+ // uneven number of escape chars => this quote is escaped
+ continue 2;
+ }
+ }
+ }
+ }
+
+ // found closing quote
+ break;
+ }
+
+ //Found the closing delimiter?
+ if (!$close_pos) {
+ // span till the end of this $part when no closing delimiter is found
+ $close_pos = $length;
+ }
+
+ //Get the actual string
+ $string = substr($part, $i, $close_pos - $i + 1);
+ $i = $close_pos;
+
+ // handle escape chars and encode html chars
+ // (special because when we have escape chars within our string they may not be escaped)
+ if ($this->lexic_permissions['ESCAPE_CHAR'] && $this->language_data['ESCAPE_CHAR']) {
+ $start = 0;
+ $new_string = '';
+ while ($es_pos = strpos($string, $this->language_data['ESCAPE_CHAR'], $start)) {
+ // hmtl escape stuff before
+ $new_string .= $this->hsc(substr($string, $start, $es_pos - $start));
+ // check if this is a hard escape
+ foreach ($this->language_data['HARDESCAPE'] as $hardescape) {
+ if (substr($string, $es_pos, strlen($hardescape)) == $hardescape) {
+ // indeed, this is a hardescape
+ $new_string .= "<span$escape_char_attributes>" .
+ $this->hsc($hardescape) . '</span>';
+ $start = $es_pos + strlen($hardescape);
+ continue 2;
+ }
+ }
+ // not a hard escape, but a normal escape
+ // they come in pairs of two
+ $c = 0;
+ while (isset($string[$es_pos + $c]) && isset($string[$es_pos + $c + 1])
+ && $string[$es_pos + $c] == $this->language_data['ESCAPE_CHAR']
+ && $string[$es_pos + $c + 1] == $this->language_data['ESCAPE_CHAR']) {
+ $c += 2;
+ }
+ if ($c) {
+ $new_string .= "<span$escape_char_attributes>" .
+ str_repeat($escaped_escape_char, $c) .
+ '</span>';
+ $start = $es_pos + $c;
+ } else {
+ // this is just a single lonely escape char...
+ $new_string .= $escaped_escape_char;
+ $start = $es_pos + 1;
+ }
+ }
+ $string = $new_string . $this->hsc(substr($string, $start));
+ } else {
+ $string = $this->hsc($string);
+ }
+
+ if ($check_linenumbers) {
+ // Are line numbers used? If, we should end the string before
+ // the newline and begin it again (so when <li>s are put in the source
+ // remains XHTML compliant)
+ // note to self: This opens up possibility of config files specifying
+ // that languages can/cannot have multiline strings???
+ $string = str_replace("\n", "</span>\n<span$string_attributes>", $string);
+ }
+
+ $result .= "<span$string_attributes>" . $string . '</span>';
+ $string = '';
+ continue;
+ } else {
+ //Have a look for regexp comments
+ if ($i == $next_comment_regexp_pos) {
+ $COMMENT_MATCHED = true;
+ $comment = $comment_regexp_cache_per_key[$next_comment_regexp_key];
+ $test_str = $this->hsc(substr($part, $i, $comment['length']));
+
+ //@todo If remove important do remove here
+ if ($this->lexic_permissions['COMMENTS']['MULTI']) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS'][$comment['key']] . '"';
+ } else {
+ $attributes = ' class="co' . $comment['key'] . '"';
+ }
+
+ $test_str = "<span$attributes>" . $test_str . "</span>";
+
+ // Short-cut through all the multiline code
+ if ($check_linenumbers) {
+ // strreplace to put close span and open span around multiline newlines
+ $test_str = str_replace(
+ "\n", "</span>\n<span$attributes>",
+ str_replace("\n ", "\n&nbsp;", $test_str)
+ );
+ }
+ }
+
+ $i += $comment['length'] - 1;
+
+ // parse the rest
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ }
+
+ // If we haven't matched a regexp comment, try multi-line comments
+ if (!$COMMENT_MATCHED) {
+ // Is this a multiline comment?
+ if (!empty($this->language_data['COMMENT_MULTI']) && $next_comment_multi_pos < $i) {
+ $next_comment_multi_pos = $length;
+ foreach ($this->language_data['COMMENT_MULTI'] as $open => $close) {
+ $match_i = false;
+ if (isset($comment_multi_cache_per_key[$open]) &&
+ ($comment_multi_cache_per_key[$open] >= $i ||
+ $comment_multi_cache_per_key[$open] === false)) {
+ // we have already matched something
+ if ($comment_multi_cache_per_key[$open] === false) {
+ // this comment is never matched
+ continue;
+ }
+ $match_i = $comment_multi_cache_per_key[$open];
+ } else if (($match_i = stripos($part, $open, $i)) !== false) {
+ $comment_multi_cache_per_key[$open] = $match_i;
+ } else {
+ $comment_multi_cache_per_key[$open] = false;
+ continue;
+ }
+ if ($match_i !== false && $match_i < $next_comment_multi_pos) {
+ $next_comment_multi_pos = $match_i;
+ $next_open_comment_multi = $open;
+ if ($match_i === $i) {
+ break;
+ }
+ }
+ }
+ }
+ if ($i == $next_comment_multi_pos) {
+ $open = $next_open_comment_multi;
+ $close = $this->language_data['COMMENT_MULTI'][$open];
+ $open_strlen = strlen($open);
+ $close_strlen = strlen($close);
+ $COMMENT_MATCHED = true;
+ $test_str_match = $open;
+ //@todo If remove important do remove here
+ if ($this->lexic_permissions['COMMENTS']['MULTI'] ||
+ $open == GESHI_START_IMPORTANT) {
+ if ($open != GESHI_START_IMPORTANT) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS']['MULTI'] . '"';
+ } else {
+ $attributes = ' class="coMULTI"';
+ }
+ $test_str = "<span$attributes>" . $this->hsc($open);
+ } else {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->important_styles . '"';
+ } else {
+ $attributes = ' class="imp"';
+ }
+
+ // We don't include the start of the comment if it's an
+ // "important" part
+ $test_str = "<span$attributes>";
+ }
+ } else {
+ $test_str = $this->hsc($open);
+ }
+
+ $close_pos = strpos( $part, $close, $i + $open_strlen );
+
+ if ($close_pos === false) {
+ $close_pos = $length;
+ }
+
+ // Short-cut through all the multiline code
+ $rest_of_comment = $this->hsc(substr($part, $i + $open_strlen, $close_pos - $i - $open_strlen + $close_strlen));
+ if (($this->lexic_permissions['COMMENTS']['MULTI'] ||
+ $test_str_match == GESHI_START_IMPORTANT) &&
+ $check_linenumbers) {
+
+ // strreplace to put close span and open span around multiline newlines
+ $test_str .= str_replace(
+ "\n", "</span>\n<span$attributes>",
+ str_replace("\n ", "\n&nbsp;", $rest_of_comment)
+ );
+ } else {
+ $test_str .= $rest_of_comment;
+ }
+
+ if ($this->lexic_permissions['COMMENTS']['MULTI'] ||
+ $test_str_match == GESHI_START_IMPORTANT) {
+ $test_str .= '</span>';
+ }
+
+ $i = $close_pos + $close_strlen - 1;
+
+ // parse the rest
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ }
+ }
+
+ // If we haven't matched a multiline comment, try single-line comments
+ if (!$COMMENT_MATCHED) {
+ // cache potential single line comment occurances
+ if (!empty($this->language_data['COMMENT_SINGLE']) && $next_comment_single_pos < $i) {
+ $next_comment_single_pos = $length;
+ foreach ($this->language_data['COMMENT_SINGLE'] as $comment_key => $comment_mark) {
+ $match_i = false;
+ if (isset($comment_single_cache_per_key[$comment_key]) &&
+ ($comment_single_cache_per_key[$comment_key] >= $i ||
+ $comment_single_cache_per_key[$comment_key] === false)) {
+ // we have already matched something
+ if ($comment_single_cache_per_key[$comment_key] === false) {
+ // this comment is never matched
+ continue;
+ }
+ $match_i = $comment_single_cache_per_key[$comment_key];
+ } else if (
+ // case sensitive comments
+ ($this->language_data['CASE_SENSITIVE'][GESHI_COMMENTS] &&
+ ($match_i = stripos($part, $comment_mark, $i)) !== false) ||
+ // non case sensitive
+ (!$this->language_data['CASE_SENSITIVE'][GESHI_COMMENTS] &&
+ (($match_i = strpos($part, $comment_mark, $i)) !== false))) {
+ $comment_single_cache_per_key[$comment_key] = $match_i;
+ } else {
+ $comment_single_cache_per_key[$comment_key] = false;
+ continue;
+ }
+ if ($match_i !== false && $match_i < $next_comment_single_pos) {
+ $next_comment_single_pos = $match_i;
+ $next_comment_single_key = $comment_key;
+ if ($match_i === $i) {
+ break;
+ }
+ }
+ }
+ }
+ if ($next_comment_single_pos == $i) {
+ $comment_key = $next_comment_single_key;
+ $comment_mark = $this->language_data['COMMENT_SINGLE'][$comment_key];
+ $com_len = strlen($comment_mark);
+
+ // This check will find special variables like $# in bash
+ // or compiler directives of Delphi beginning {$
+ if ((empty($sc_disallowed_before) || ($i == 0) ||
+ (false === strpos($sc_disallowed_before, $part[$i-1]))) &&
+ (empty($sc_disallowed_after) || ($length <= $i + $com_len) ||
+ (false === strpos($sc_disallowed_after, $part[$i + $com_len]))))
+ {
+ // this is a valid comment
+ $COMMENT_MATCHED = true;
+ if ($this->lexic_permissions['COMMENTS'][$comment_key]) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['COMMENTS'][$comment_key] . '"';
+ } else {
+ $attributes = ' class="co' . $comment_key . '"';
+ }
+ $test_str = "<span$attributes>" . $this->hsc($this->change_case($comment_mark));
+ } else {
+ $test_str = $this->hsc($comment_mark);
+ }
+
+ //Check if this comment is the last in the source
+ $close_pos = strpos($part, "\n", $i);
+ $oops = false;
+ if ($close_pos === false) {
+ $close_pos = $length;
+ $oops = true;
+ }
+ $test_str .= $this->hsc(substr($part, $i + $com_len, $close_pos - $i - $com_len));
+ if ($this->lexic_permissions['COMMENTS'][$comment_key]) {
+ $test_str .= "</span>";
+ }
+
+ // Take into account that the comment might be the last in the source
+ if (!$oops) {
+ $test_str .= "\n";
+ }
+
+ $i = $close_pos;
+
+ // parse the rest
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ }
+ }
+ }
+ }
+
+ // Where are we adding this char?
+ if (!$COMMENT_MATCHED) {
+ $stuff_to_parse .= $char;
+ } else {
+ $result .= $test_str;
+ unset($test_str);
+ $COMMENT_MATCHED = false;
+ }
+ }
+ // Parse the last bit
+ $result .= $this->parse_non_string_part($stuff_to_parse);
+ $stuff_to_parse = '';
+ } else {
+ $result .= $this->hsc($part);
+ }
+ // Close the <span> that surrounds the block
+ if ($STRICTATTRS != '') {
+ $result = str_replace("\n", "</span>\n<span$STRICTATTRS>", $result);
+ $result .= '</span>';
+ }
+
+ $endresult .= $result;
+ unset($part, $parts[$key], $result);
+ }
+
+ //This fix is related to SF#1923020, but has to be applied regardless of
+ //actually highlighting symbols.
+ /** NOTE: memorypeak #3 */
+ $endresult = str_replace(array('<SEMI>', '<PIPE>'), array(';', '|'), $endresult);
+
+// // Parse the last stuff (redundant?)
+// $result .= $this->parse_non_string_part($stuff_to_parse);
+
+ // Lop off the very first and last spaces
+// $result = substr($result, 1, -1);
+
+ // We're finished: stop timing
+ $this->set_time($start_time, microtime());
+
+ $this->finalise($endresult);
+ return $endresult;
+ }
+
+ /**
+ * Swaps out spaces and tabs for HTML indentation. Not needed if
+ * the code is in a pre block...
+ *
+ * @param string The source to indent (reference!)
+ * @since 1.0.0
+ * @access private
+ */
+ function indent(&$result) {
+ /// Replace tabs with the correct number of spaces
+ if (false !== strpos($result, "\t")) {
+ $lines = explode("\n", $result);
+ $result = null;//Save memory while we process the lines individually
+ $tab_width = $this->get_real_tab_width();
+ $tab_string = '&nbsp;' . str_repeat(' ', $tab_width);
+
+ for ($key = 0, $n = count($lines); $key < $n; $key++) {
+ $line = $lines[$key];
+ if (false === strpos($line, "\t")) {
+ continue;
+ }
+
+ $pos = 0;
+ $length = strlen($line);
+ $lines[$key] = ''; // reduce memory
+
+ $IN_TAG = false;
+ for ($i = 0; $i < $length; ++$i) {
+ $char = $line[$i];
+ // Simple engine to work out whether we're in a tag.
+ // If we are we modify $pos. This is so we ignore HTML
+ // in the line and only workout the tab replacement
+ // via the actual content of the string
+ // This test could be improved to include strings in the
+ // html so that < or > would be allowed in user's styles
+ // (e.g. quotes: '<' '>'; or similar)
+ if ($IN_TAG) {
+ if ('>' == $char) {
+ $IN_TAG = false;
+ }
+ $lines[$key] .= $char;
+ } else if ('<' == $char) {
+ $IN_TAG = true;
+ $lines[$key] .= '<';
+ } else if ('&' == $char) {
+ $substr = substr($line, $i + 3, 5);
+ $posi = strpos($substr, ';');
+ if (false === $posi) {
+ ++$pos;
+ } else {
+ $pos -= $posi+2;
+ }
+ $lines[$key] .= $char;
+ } else if ("\t" == $char) {
+ $str = '';
+ // OPTIMISE - move $strs out. Make an array:
+ // $tabs = array(
+ // 1 => '&nbsp;',
+ // 2 => '&nbsp; ',
+ // 3 => '&nbsp; &nbsp;' etc etc
+ // to use instead of building a string every time
+ $tab_end_width = $tab_width - ($pos % $tab_width); //Moved out of the look as it doesn't change within the loop
+ if (($pos & 1) || 1 == $tab_end_width) {
+ $str .= substr($tab_string, 6, $tab_end_width);
+ } else {
+ $str .= substr($tab_string, 0, $tab_end_width+5);
+ }
+ $lines[$key] .= $str;
+ $pos += $tab_end_width;
+
+ if (false === strpos($line, "\t", $i + 1)) {
+ $lines[$key] .= substr($line, $i + 1);
+ break;
+ }
+ } else if (0 == $pos && ' ' == $char) {
+ $lines[$key] .= '&nbsp;';
+ ++$pos;
+ } else {
+ $lines[$key] .= $char;
+ ++$pos;
+ }
+ }
+ }
+ $result = implode("\n", $lines);
+ unset($lines);//We don't need the lines separated beyond this --- free them!
+ }
+ // Other whitespace
+ // BenBE: Fix to reduce the number of replacements to be done
+ $result = preg_replace('/^ /m', '&nbsp;', $result);
+ $result = str_replace(' ', ' &nbsp;', $result);
+
+ if ($this->line_numbers == GESHI_NO_LINE_NUMBERS) {
+ if ($this->line_ending === null) {
+ $result = nl2br($result);
+ } else {
+ $result = str_replace("\n", $this->line_ending, $result);
+ }
+ }
+ }
+
+ /**
+ * Changes the case of a keyword for those languages where a change is asked for
+ *
+ * @param string The keyword to change the case of
+ * @return string The keyword with its case changed
+ * @since 1.0.0
+ * @access private
+ */
+ function change_case($instr) {
+ switch ($this->language_data['CASE_KEYWORDS']) {
+ case GESHI_CAPS_UPPER:
+ return strtoupper($instr);
+ case GESHI_CAPS_LOWER:
+ return strtolower($instr);
+ default:
+ return $instr;
+ }
+ }
+
+ /**
+ * Handles replacements of keywords to include markup and links if requested
+ *
+ * @param string The keyword to add the Markup to
+ * @return The HTML for the match found
+ * @since 1.0.8
+ * @access private
+ *
+ * @todo Get rid of ender in keyword links
+ */
+ function handle_keyword_replace($match) {
+ $k = $this->_kw_replace_group;
+ $keyword = $match[0];
+
+ $before = '';
+ $after = '';
+
+ if ($this->keyword_links) {
+ // Keyword links have been ebabled
+
+ if (isset($this->language_data['URLS'][$k]) &&
+ $this->language_data['URLS'][$k] != '') {
+ // There is a base group for this keyword
+
+ // Old system: strtolower
+ //$keyword = ( $this->language_data['CASE_SENSITIVE'][$group] ) ? $keyword : strtolower($keyword);
+ // New system: get keyword from language file to get correct case
+ if (!$this->language_data['CASE_SENSITIVE'][$k] &&
+ strpos($this->language_data['URLS'][$k], '{FNAME}') !== false) {
+ foreach ($this->language_data['KEYWORDS'][$k] as $word) {
+ if (strcasecmp($word, $keyword) == 0) {
+ break;
+ }
+ }
+ } else {
+ $word = $keyword;
+ }
+
+ $before = '<|UR1|"' .
+ str_replace(
+ array(
+ '{FNAME}',
+ '{FNAMEL}',
+ '{FNAMEU}',
+ '.'),
+ array(
+ str_replace('+', '%20', urlencode($this->hsc($word))),
+ str_replace('+', '%20', urlencode($this->hsc(strtolower($word)))),
+ str_replace('+', '%20', urlencode($this->hsc(strtoupper($word)))),
+ '<DOT>'),
+ $this->language_data['URLS'][$k]
+ ) . '">';
+ $after = '</a>';
+ }
+ }
+
+ return $before . '<|/'. $k .'/>' . $this->change_case($keyword) . '|>' . $after;
+ }
+
+ /**
+ * handles regular expressions highlighting-definitions with callback functions
+ *
+ * @note this is a callback, don't use it directly
+ *
+ * @param array the matches array
+ * @return The highlighted string
+ * @since 1.0.8
+ * @access private
+ */
+ function handle_regexps_callback($matches) {
+ // before: "' style=\"' . call_user_func(\"$func\", '\\1') . '\"\\1|>'",
+ return ' style="' . call_user_func($this->language_data['STYLES']['REGEXPS'][$this->_rx_key], $matches[1]) . '"'. $matches[1] . '|>';
+ }
+
+ /**
+ * handles newlines in REGEXPS matches. Set the _hmr_* vars before calling this
+ *
+ * @note this is a callback, don't use it directly
+ *
+ * @param array the matches array
+ * @return string
+ * @since 1.0.8
+ * @access private
+ */
+ function handle_multiline_regexps($matches) {
+ $before = $this->_hmr_before;
+ $after = $this->_hmr_after;
+ if ($this->_hmr_replace) {
+ $replace = $this->_hmr_replace;
+ $search = array();
+
+ foreach (array_keys($matches) as $k) {
+ $search[] = '\\' . $k;
+ }
+
+ $before = str_replace($search, $matches, $before);
+ $after = str_replace($search, $matches, $after);
+ $replace = str_replace($search, $matches, $replace);
+ } else {
+ $replace = $matches[0];
+ }
+ return $before
+ . '<|!REG3XP' . $this->_hmr_key .'!>'
+ . str_replace("\n", "|>\n<|!REG3XP" . $this->_hmr_key . '!>', $replace)
+ . '|>'
+ . $after;
+ }
+
+ /**
+ * Takes a string that has no strings or comments in it, and highlights
+ * stuff like keywords, numbers and methods.
+ *
+ * @param string The string to parse for keyword, numbers etc.
+ * @since 1.0.0
+ * @access private
+ * @todo BUGGY! Why? Why not build string and return?
+ */
+ function parse_non_string_part($stuff_to_parse) {
+ $stuff_to_parse = ' ' . $this->hsc($stuff_to_parse);
+
+ // Highlight keywords
+ $disallowed_before = "(?<![a-zA-Z0-9\$_\|\#;>|^&";
+ $disallowed_after = "(?![a-zA-Z0-9_\|%\\-&;";
+ if ($this->lexic_permissions['STRINGS']) {
+ $quotemarks = preg_quote(implode($this->language_data['QUOTEMARKS']), '/');
+ $disallowed_before .= $quotemarks;
+ $disallowed_after .= $quotemarks;
+ }
+ $disallowed_before .= "])";
+ $disallowed_after .= "])";
+
+ $parser_control_pergroup = false;
+ if (isset($this->language_data['PARSER_CONTROL'])) {
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS'])) {
+ $x = 0; // check wether per-keyword-group parser_control is enabled
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'])) {
+ $disallowed_before = $this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_BEFORE'];
+ ++$x;
+ }
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'])) {
+ $disallowed_after = $this->language_data['PARSER_CONTROL']['KEYWORDS']['DISALLOWED_AFTER'];
+ ++$x;
+ }
+ $parser_control_pergroup = (count($this->language_data['PARSER_CONTROL']['KEYWORDS']) - $x) > 0;
+ }
+ }
+
+ foreach (array_keys($this->language_data['KEYWORDS']) as $k) {
+ if (!isset($this->lexic_permissions['KEYWORDS'][$k]) ||
+ $this->lexic_permissions['KEYWORDS'][$k]) {
+
+ $case_sensitive = $this->language_data['CASE_SENSITIVE'][$k];
+ $modifiers = $case_sensitive ? '' : 'i';
+
+ // NEW in 1.0.8 - per-keyword-group parser control
+ $disallowed_before_local = $disallowed_before;
+ $disallowed_after_local = $disallowed_after;
+ if ($parser_control_pergroup && isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$k])) {
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_BEFORE'])) {
+ $disallowed_before_local =
+ $this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_BEFORE'];
+ }
+
+ if (isset($this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_AFTER'])) {
+ $disallowed_after_local =
+ $this->language_data['PARSER_CONTROL']['KEYWORDS'][$k]['DISALLOWED_AFTER'];
+ }
+ }
+
+ $this->_kw_replace_group = $k;
+
+ //NEW in 1.0.8, the cached regexp list
+ // since we don't want PHP / PCRE to crash due to too large patterns we split them into smaller chunks
+ for ($set = 0, $set_length = count($this->language_data['CACHED_KEYWORD_LISTS'][$k]); $set < $set_length; ++$set) {
+ $keywordset =& $this->language_data['CACHED_KEYWORD_LISTS'][$k][$set];
+ // Might make a more unique string for putting the number in soon
+ // Basically, we don't put the styles in yet because then the styles themselves will
+ // get highlighted if the language has a CSS keyword in it (like CSS, for example ;))
+ $stuff_to_parse = preg_replace_callback(
+ "/$disallowed_before_local({$keywordset})(?!\<DOT\>(?:htm|php))$disallowed_after_local/$modifiers",
+ array($this, 'handle_keyword_replace'),
+ $stuff_to_parse
+ );
+ }
+ }
+ }
+
+ // Regular expressions
+ foreach ($this->language_data['REGEXPS'] as $key => $regexp) {
+ if ($this->lexic_permissions['REGEXPS'][$key]) {
+ if (is_array($regexp)) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ // produce valid HTML when we match multiple lines
+ $this->_hmr_replace = $regexp[GESHI_REPLACE];
+ $this->_hmr_before = $regexp[GESHI_BEFORE];
+ $this->_hmr_key = $key;
+ $this->_hmr_after = $regexp[GESHI_AFTER];
+ $stuff_to_parse = preg_replace_callback(
+ "/" . $regexp[GESHI_SEARCH] . "/{$regexp[GESHI_MODIFIERS]}",
+ array($this, 'handle_multiline_regexps'),
+ $stuff_to_parse);
+ $this->_hmr_replace = false;
+ $this->_hmr_before = '';
+ $this->_hmr_after = '';
+ } else {
+ $stuff_to_parse = preg_replace(
+ '/' . $regexp[GESHI_SEARCH] . '/' . $regexp[GESHI_MODIFIERS],
+ $regexp[GESHI_BEFORE] . '<|!REG3XP'. $key .'!>' . $regexp[GESHI_REPLACE] . '|>' . $regexp[GESHI_AFTER],
+ $stuff_to_parse);
+ }
+ } else {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ // produce valid HTML when we match multiple lines
+ $this->_hmr_key = $key;
+ $stuff_to_parse = preg_replace_callback( "/(" . $regexp . ")/",
+ array($this, 'handle_multiline_regexps'), $stuff_to_parse);
+ $this->_hmr_key = '';
+ } else {
+ $stuff_to_parse = preg_replace( "/(" . $regexp . ")/", "<|!REG3XP$key!>\\1|>", $stuff_to_parse);
+ }
+ }
+ }
+ }
+
+ // Highlight numbers. As of 1.0.8 we support different types of numbers
+ $numbers_found = false;
+ if ($this->lexic_permissions['NUMBERS'] && preg_match('#\d#', $stuff_to_parse )) {
+ $numbers_found = true;
+
+ //For each of the formats ...
+ foreach($this->language_data['NUMBERS_RXCACHE'] as $id => $regexp) {
+ //Check if it should be highlighted ...
+ $stuff_to_parse = preg_replace($regexp, "<|/NUM!$id/>\\1|>", $stuff_to_parse);
+ }
+ }
+
+ //
+ // Now that's all done, replace /[number]/ with the correct styles
+ //
+ foreach (array_keys($this->language_data['KEYWORDS']) as $k) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' .
+ (isset($this->language_data['STYLES']['KEYWORDS'][$k]) ?
+ $this->language_data['STYLES']['KEYWORDS'][$k] : "") . '"';
+ } else {
+ $attributes = ' class="kw' . $k . '"';
+ }
+ $stuff_to_parse = str_replace("<|/$k/>", "<|$attributes>", $stuff_to_parse);
+ }
+
+ if ($numbers_found) {
+ // Put number styles in
+ foreach($this->language_data['NUMBERS_RXCACHE'] as $id => $regexp) {
+ //Commented out for now, as this needs some review ...
+ // if ($numbers_permissions & $id) {
+ //Get the appropriate style ...
+ //Checking for unset styles is done by the style cache builder ...
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['NUMBERS'][$id] . '"';
+ } else {
+ $attributes = ' class="nu'.$id.'"';
+ }
+
+ //Set in the correct styles ...
+ $stuff_to_parse = str_replace("/NUM!$id/", $attributes, $stuff_to_parse);
+ // }
+ }
+ }
+
+ // Highlight methods and fields in objects
+ if ($this->lexic_permissions['METHODS'] && $this->language_data['OOLANG']) {
+ $oolang_spaces = "[\s]*";
+ $oolang_before = "";
+ $oolang_after = "[a-zA-Z][a-zA-Z0-9_]*";
+ if (isset($this->language_data['PARSER_CONTROL'])) {
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG'])) {
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_BEFORE'])) {
+ $oolang_before = $this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_BEFORE'];
+ }
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_AFTER'])) {
+ $oolang_after = $this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_AFTER'];
+ }
+ if (isset($this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_SPACES'])) {
+ $oolang_spaces = $this->language_data['PARSER_CONTROL']['OOLANG']['MATCH_SPACES'];
+ }
+ }
+ }
+
+ foreach ($this->language_data['OBJECT_SPLITTERS'] as $key => $splitter) {
+ if (false !== strpos($stuff_to_parse, $splitter)) {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['METHODS'][$key] . '"';
+ } else {
+ $attributes = ' class="me' . $key . '"';
+ }
+ $stuff_to_parse = preg_replace("/($oolang_before)(" . preg_quote($this->language_data['OBJECT_SPLITTERS'][$key], '/') . ")($oolang_spaces)($oolang_after)/", "\\1\\2\\3<|$attributes>\\4|>", $stuff_to_parse);
+ }
+ }
+ }
+
+ //
+ // Highlight brackets. Yes, I've tried adding a semi-colon to this list.
+ // You try it, and see what happens ;)
+ // TODO: Fix lexic permissions not converting entities if shouldn't
+ // be highlighting regardless
+ //
+ if ($this->lexic_permissions['BRACKETS']) {
+ $stuff_to_parse = str_replace( $this->language_data['CACHE_BRACKET_MATCH'],
+ $this->language_data['CACHE_BRACKET_REPLACE'], $stuff_to_parse );
+ }
+
+
+ //FIX for symbol highlighting ...
+ if ($this->lexic_permissions['SYMBOLS'] && !empty($this->language_data['SYMBOLS'])) {
+ //Get all matches and throw away those witin a block that is already highlighted... (i.e. matched by a regexp)
+ $n_symbols = preg_match_all("/<\|(?:<DOT>|[^>])+>(?:(?!\|>).*?)\|>|<\/a>|(?:" . $this->language_data['SYMBOL_SEARCH'] . ")+/", $stuff_to_parse, $pot_symbols, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
+ $global_offset = 0;
+ for ($s_id = 0; $s_id < $n_symbols; ++$s_id) {
+ $symbol_match = $pot_symbols[$s_id][0][0];
+ if (strpos($symbol_match, '<') !== false || strpos($symbol_match, '>') !== false) {
+ // already highlighted blocks _must_ include either < or >
+ // so if this conditional applies, we have to skip this match
+ // BenBE: UNLESS the block contains <SEMI> or <PIPE>
+ if(strpos($symbol_match, '<SEMI>') === false &&
+ strpos($symbol_match, '<PIPE>') === false) {
+ continue;
+ }
+ }
+
+ // if we reach this point, we have a valid match which needs to be highlighted
+
+ $symbol_length = strlen($symbol_match);
+ $symbol_offset = $pot_symbols[$s_id][0][1];
+ unset($pot_symbols[$s_id]);
+ $symbol_end = $symbol_length + $symbol_offset;
+ $symbol_hl = "";
+
+ // if we have multiple styles, we have to handle them properly
+ if ($this->language_data['MULTIPLE_SYMBOL_GROUPS']) {
+ $old_sym = -1;
+ // Split the current stuff to replace into its atomic symbols ...
+ preg_match_all("/" . $this->language_data['SYMBOL_SEARCH'] . "/", $symbol_match, $sym_match_syms, PREG_PATTERN_ORDER);
+ foreach ($sym_match_syms[0] as $sym_ms) {
+ //Check if consequtive symbols belong to the same group to save output ...
+ if (isset($this->language_data['SYMBOL_DATA'][$sym_ms])
+ && ($this->language_data['SYMBOL_DATA'][$sym_ms] != $old_sym)) {
+ if (-1 != $old_sym) {
+ $symbol_hl .= "|>";
+ }
+ $old_sym = $this->language_data['SYMBOL_DATA'][$sym_ms];
+ if (!$this->use_classes) {
+ $symbol_hl .= '<| style="' . $this->language_data['STYLES']['SYMBOLS'][$old_sym] . '">';
+ } else {
+ $symbol_hl .= '<| class="sy' . $old_sym . '">';
+ }
+ }
+ $symbol_hl .= $sym_ms;
+ }
+ unset($sym_match_syms);
+
+ //Close remaining tags and insert the replacement at the right position ...
+ //Take caution if symbol_hl is empty to avoid doubled closing spans.
+ if (-1 != $old_sym) {
+ $symbol_hl .= "|>";
+ }
+ } else {
+ if (!$this->use_classes) {
+ $symbol_hl = '<| style="' . $this->language_data['STYLES']['SYMBOLS'][0] . '">';
+ } else {
+ $symbol_hl = '<| class="sy0">';
+ }
+ $symbol_hl .= $symbol_match . '|>';
+ }
+
+ $stuff_to_parse = substr_replace($stuff_to_parse, $symbol_hl, $symbol_offset + $global_offset, $symbol_length);
+
+ // since we replace old text with something of different size,
+ // we'll have to keep track of the differences
+ $global_offset += strlen($symbol_hl) - $symbol_length;
+ }
+ }
+ //FIX for symbol highlighting ...
+
+ // Add class/style for regexps
+ foreach (array_keys($this->language_data['REGEXPS']) as $key) {
+ if ($this->lexic_permissions['REGEXPS'][$key]) {
+ if (is_callable($this->language_data['STYLES']['REGEXPS'][$key])) {
+ $this->_rx_key = $key;
+ $stuff_to_parse = preg_replace_callback("/!REG3XP$key!(.*)\|>/U",
+ array($this, 'handle_regexps_callback'),
+ $stuff_to_parse);
+ } else {
+ if (!$this->use_classes) {
+ $attributes = ' style="' . $this->language_data['STYLES']['REGEXPS'][$key] . '"';
+ } else {
+ if (is_array($this->language_data['REGEXPS'][$key]) &&
+ array_key_exists(GESHI_CLASS, $this->language_data['REGEXPS'][$key])) {
+ $attributes = ' class="' .
+ $this->language_data['REGEXPS'][$key][GESHI_CLASS] . '"';
+ } else {
+ $attributes = ' class="re' . $key . '"';
+ }
+ }
+ $stuff_to_parse = str_replace("!REG3XP$key!", "$attributes", $stuff_to_parse);
+ }
+ }
+ }
+
+ // Replace <DOT> with . for urls
+ $stuff_to_parse = str_replace('<DOT>', '.', $stuff_to_parse);
+ // Replace <|UR1| with <a href= for urls also
+ if (isset($this->link_styles[GESHI_LINK])) {
+ if ($this->use_classes) {
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' href=', $stuff_to_parse);
+ } else {
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' style="' . $this->link_styles[GESHI_LINK] . '" href=', $stuff_to_parse);
+ }
+ } else {
+ $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' href=', $stuff_to_parse);
+ }
+
+ //
+ // NOW we add the span thingy ;)
+ //
+
+ $stuff_to_parse = str_replace('<|', '<span', $stuff_to_parse);
+ $stuff_to_parse = str_replace ( '|>', '</span>', $stuff_to_parse );
+ return substr($stuff_to_parse, 1);
+ }
+
+ /**
+ * Sets the time taken to parse the code
+ *
+ * @param microtime The time when parsing started
+ * @param microtime The time when parsing ended
+ * @since 1.0.2
+ * @access private
+ */
+ function set_time($start_time, $end_time) {
+ $start = explode(' ', $start_time);
+ $end = explode(' ', $end_time);
+ $this->time = $end[0] + $end[1] - $start[0] - $start[1];
+ }
+
+ /**
+ * Gets the time taken to parse the code
+ *
+ * @return double The time taken to parse the code
+ * @since 1.0.2
+ */
+ function get_time() {
+ return $this->time;
+ }
+
+ /**
+ * Merges arrays recursively, overwriting values of the first array with values of later arrays
+ *
+ * @since 1.0.8
+ * @access private
+ */
+ function merge_arrays() {
+ $arrays = func_get_args();
+ $narrays = count($arrays);
+
+ // check arguments
+ // comment out if more performance is necessary (in this case the foreach loop will trigger a warning if the argument is not an array)
+ for ($i = 0; $i < $narrays; $i ++) {
+ if (!is_array($arrays[$i])) {
+ // also array_merge_recursive returns nothing in this case
+ trigger_error('Argument #' . ($i+1) . ' is not an array - trying to merge array with scalar! Returning false!', E_USER_WARNING);
+ return false;
+ }
+ }
+
+ // the first array is in the output set in every case
+ $ret = $arrays[0];
+
+ // merege $ret with the remaining arrays
+ for ($i = 1; $i < $narrays; $i ++) {
+ foreach ($arrays[$i] as $key => $value) {
+ if (is_array($value) && isset($ret[$key])) {
+ // if $ret[$key] is not an array you try to merge an scalar value with an array - the result is not defined (incompatible arrays)
+ // in this case the call will trigger an E_USER_WARNING and the $ret[$key] will be false.
+ $ret[$key] = $this->merge_arrays($ret[$key], $value);
+ } else {
+ $ret[$key] = $value;
+ }
+ }
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Gets language information and stores it for later use
+ *
+ * @param string The filename of the language file you want to load
+ * @since 1.0.0
+ * @access private
+ * @todo Needs to load keys for lexic permissions for keywords, regexps etc
+ */
+ function load_language($file_name) {
+ if ($file_name == $this->loaded_language) {
+ // this file is already loaded!
+ return;
+ }
+
+ //Prepare some stuff before actually loading the language file
+ $this->loaded_language = $file_name;
+ $this->parse_cache_built = false;
+ $this->enable_highlighting();
+ $language_data = array();
+
+ //Load the language file
+ require $file_name;
+
+ // Perhaps some checking might be added here later to check that
+ // $language data is a valid thing but maybe not
+ $this->language_data = $language_data;
+
+ // Set strict mode if should be set
+ $this->strict_mode = $this->language_data['STRICT_MODE_APPLIES'];
+
+ // Set permissions for all lexics to true
+ // so they'll be highlighted by default
+ foreach (array_keys($this->language_data['KEYWORDS']) as $key) {
+ if (!empty($this->language_data['KEYWORDS'][$key])) {
+ $this->lexic_permissions['KEYWORDS'][$key] = true;
+ } else {
+ $this->lexic_permissions['KEYWORDS'][$key] = false;
+ }
+ }
+
+ foreach (array_keys($this->language_data['COMMENT_SINGLE']) as $key) {
+ $this->lexic_permissions['COMMENTS'][$key] = true;
+ }
+ foreach (array_keys($this->language_data['REGEXPS']) as $key) {
+ $this->lexic_permissions['REGEXPS'][$key] = true;
+ }
+
+ // for BenBE and future code reviews:
+ // we can use empty here since we only check for existance and emptiness of an array
+ // if it is not an array at all but rather false or null this will work as intended as well
+ // even if $this->language_data['PARSER_CONTROL'] is undefined this won't trigger a notice
+ if (!empty($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS'])) {
+ foreach ($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS'] as $flag => $value) {
+ // it's either true or false and maybe is true as well
+ $perm = $value !== GESHI_NEVER;
+ if ($flag == 'ALL') {
+ $this->enable_highlighting($perm);
+ continue;
+ }
+ if (!isset($this->lexic_permissions[$flag])) {
+ // unknown lexic permission
+ continue;
+ }
+ if (is_array($this->lexic_permissions[$flag])) {
+ foreach ($this->lexic_permissions[$flag] as $key => $val) {
+ $this->lexic_permissions[$flag][$key] = $perm;
+ }
+ } else {
+ $this->lexic_permissions[$flag] = $perm;
+ }
+ }
+ unset($this->language_data['PARSER_CONTROL']['ENABLE_FLAGS']);
+ }
+
+ //Fix: Problem where hardescapes weren't handled if no ESCAPE_CHAR was given
+ //You need to set one for HARDESCAPES only in this case.
+ if(!isset($this->language_data['HARDCHAR'])) {
+ $this->language_data['HARDCHAR'] = $this->language_data['ESCAPE_CHAR'];
+ }
+
+ //NEW in 1.0.8: Allow styles to be loaded from a separate file to override defaults
+ $style_filename = substr($file_name, 0, -4) . '.style.php';
+ if (is_readable($style_filename)) {
+ //Clear any style_data that could have been set before ...
+ if (isset($style_data)) {
+ unset($style_data);
+ }
+
+ //Read the Style Information from the style file
+ include $style_filename;
+
+ //Apply the new styles to our current language styles
+ if (isset($style_data) && is_array($style_data)) {
+ $this->language_data['STYLES'] =
+ $this->merge_arrays($this->language_data['STYLES'], $style_data);
+ }
+ }
+ }
+
+ /**
+ * Takes the parsed code and various options, and creates the HTML
+ * surrounding it to make it look nice.
+ *
+ * @param string The code already parsed (reference!)
+ * @since 1.0.0
+ * @access private
+ */
+ function finalise(&$parsed_code) {
+ // Remove end parts of important declarations
+ // This is BUGGY!! My fault for bad code: fix coming in 1.2
+ // @todo Remove this crap
+ if ($this->enable_important_blocks &&
+ (strpos($parsed_code, $this->hsc(GESHI_START_IMPORTANT)) === false)) {
+ $parsed_code = str_replace($this->hsc(GESHI_END_IMPORTANT), '', $parsed_code);
+ }
+
+ // Add HTML whitespace stuff if we're using the <div> header
+ if ($this->header_type != GESHI_HEADER_PRE && $this->header_type != GESHI_HEADER_PRE_VALID) {
+ $this->indent($parsed_code);
+ }
+
+ // purge some unnecessary stuff
+ /** NOTE: memorypeak #1 */
+ $parsed_code = preg_replace('#<span[^>]+>(\s*)</span>#', '\\1', $parsed_code);
+
+ // If we are using IDs for line numbers, there needs to be an overall
+ // ID set to prevent collisions.
+ if ($this->add_ids && !$this->overall_id) {
+ $this->overall_id = 'geshi-' . substr(md5(microtime()), 0, 4);
+ }
+
+ // Get code into lines
+ /** NOTE: memorypeak #2 */
+ $code = explode("\n", $parsed_code);
+ $parsed_code = $this->header();
+
+ // If we're using line numbers, we insert <li>s and appropriate
+ // markup to style them (otherwise we don't need to do anything)
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS && $this->header_type != GESHI_HEADER_PRE_TABLE) {
+ // If we're using the <pre> header, we shouldn't add newlines because
+ // the <pre> will line-break them (and the <li>s already do this for us)
+ $ls = ($this->header_type != GESHI_HEADER_PRE && $this->header_type != GESHI_HEADER_PRE_VALID) ? "\n" : '';
+
+ // Set vars to defaults for following loop
+ $i = 0;
+
+ // Foreach line...
+ for ($i = 0, $n = count($code); $i < $n;) {
+ //Reset the attributes for a new line ...
+ $attrs = array();
+
+ // Make lines have at least one space in them if they're empty
+ // BenBE: Checking emptiness using trim instead of relying on blanks
+ if ('' == trim($code[$i])) {
+ $code[$i] = '&nbsp;';
+ }
+
+ // If this is a "special line"...
+ if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS &&
+ $i % $this->line_nth_row == ($this->line_nth_row - 1)) {
+ // Set the attributes to style the line
+ if ($this->use_classes) {
+ //$attr = ' class="li2"';
+ $attrs['class'][] = 'li2';
+ $def_attr = ' class="de2"';
+ } else {
+ //$attr = ' style="' . $this->line_style2 . '"';
+ $attrs['style'][] = $this->line_style2;
+ // This style "covers up" the special styles set for special lines
+ // so that styles applied to special lines don't apply to the actual
+ // code on that line
+ $def_attr = ' style="' . $this->code_style . '"';
+ }
+ } else {
+ if ($this->use_classes) {
+ //$attr = ' class="li1"';
+ $attrs['class'][] = 'li1';
+ $def_attr = ' class="de1"';
+ } else {
+ //$attr = ' style="' . $this->line_style1 . '"';
+ $attrs['style'][] = $this->line_style1;
+ $def_attr = ' style="' . $this->code_style . '"';
+ }
+ }
+
+ //Check which type of tag to insert for this line
+ if ($this->header_type == GESHI_HEADER_PRE_VALID) {
+ $start = "<pre$def_attr>";
+ $end = '</pre>';
+ } else {
+ // Span or div?
+ $start = "<div$def_attr>";
+ $end = '</div>';
+ }
+
+ ++$i;
+
+ // Are we supposed to use ids? If so, add them
+ if ($this->add_ids) {
+ $attrs['id'][] = "$this->overall_id-$i";
+ }
+
+ //Is this some line with extra styles???
+ if (in_array($i, $this->highlight_extra_lines)) {
+ if ($this->use_classes) {
+ if (isset($this->highlight_extra_lines_styles[$i])) {
+ $attrs['class'][] = "lx$i";
+ } else {
+ $attrs['class'][] = "ln-xtra";
+ }
+ } else {
+ array_push($attrs['style'], $this->get_line_style($i));
+ }
+ }
+
+ // Add in the line surrounded by appropriate list HTML
+ $attr_string = '';
+ foreach ($attrs as $key => $attr) {
+ $attr_string .= ' ' . $key . '="' . implode(' ', $attr) . '"';
+ }
+
+ $parsed_code .= "<li$attr_string>$start{$code[$i-1]}$end</li>$ls";
+ unset($code[$i - 1]);
+ }
+ } else {
+ $n = count($code);
+ if ($this->use_classes) {
+ $attributes = ' class="de1"';
+ } else {
+ $attributes = ' style="'. $this->code_style .'"';
+ }
+ if ($this->header_type == GESHI_HEADER_PRE_VALID) {
+ $parsed_code .= '<pre'. $attributes .'>';
+ } elseif ($this->header_type == GESHI_HEADER_PRE_TABLE) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ if ($this->use_classes) {
+ $attrs = ' class="ln"';
+ } else {
+ $attrs = ' style="'. $this->table_linenumber_style .'"';
+ }
+ $parsed_code .= '<td'.$attrs.'><pre'.$attributes.'>';
+ // get linenumbers
+ // we don't merge it with the for below, since it should be better for
+ // memory consumption this way
+ // @todo: but... actually it would still be somewhat nice to merge the two loops
+ // the mem peaks are at different positions
+ for ($i = 0; $i < $n; ++$i) {
+ $close = 0;
+ // fancy lines
+ if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS &&
+ $i % $this->line_nth_row == ($this->line_nth_row - 1)) {
+ // Set the attributes to style the line
+ if ($this->use_classes) {
+ $parsed_code .= '<span class="xtra li2"><span class="de2">';
+ } else {
+ // This style "covers up" the special styles set for special lines
+ // so that styles applied to special lines don't apply to the actual
+ // code on that line
+ $parsed_code .= '<span style="display:block;' . $this->line_style2 . '">'
+ .'<span style="' . $this->code_style .'">';
+ }
+ $close += 2;
+ }
+ //Is this some line with extra styles???
+ if (in_array($i + 1, $this->highlight_extra_lines)) {
+ if ($this->use_classes) {
+ if (isset($this->highlight_extra_lines_styles[$i])) {
+ $parsed_code .= "<span class=\"xtra lx$i\">";
+ } else {
+ $parsed_code .= "<span class=\"xtra ln-xtra\">";
+ }
+ } else {
+ $parsed_code .= "<span style=\"display:block;" . $this->get_line_style($i) . "\">";
+ }
+ ++$close;
+ }
+ $parsed_code .= $this->line_numbers_start + $i;
+ if ($close) {
+ $parsed_code .= str_repeat('</span>', $close);
+ } else if ($i != $n) {
+ $parsed_code .= "\n";
+ }
+ }
+ $parsed_code .= '</pre></td><td'.$attributes.'>';
+ }
+ $parsed_code .= '<pre'. $attributes .'>';
+ }
+ // No line numbers, but still need to handle highlighting lines extra.
+ // Have to use divs so the full width of the code is highlighted
+ $close = 0;
+ for ($i = 0; $i < $n; ++$i) {
+ // Make lines have at least one space in them if they're empty
+ // BenBE: Checking emptiness using trim instead of relying on blanks
+ if ('' == trim($code[$i])) {
+ $code[$i] = '&nbsp;';
+ }
+ // fancy lines
+ if ($this->line_numbers == GESHI_FANCY_LINE_NUMBERS &&
+ $i % $this->line_nth_row == ($this->line_nth_row - 1)) {
+ // Set the attributes to style the line
+ if ($this->use_classes) {
+ $parsed_code .= '<span class="xtra li2"><span class="de2">';
+ } else {
+ // This style "covers up" the special styles set for special lines
+ // so that styles applied to special lines don't apply to the actual
+ // code on that line
+ $parsed_code .= '<span style="display:block;' . $this->line_style2 . '">'
+ .'<span style="' . $this->code_style .'">';
+ }
+ $close += 2;
+ }
+ //Is this some line with extra styles???
+ if (in_array($i + 1, $this->highlight_extra_lines)) {
+ if ($this->use_classes) {
+ if (isset($this->highlight_extra_lines_styles[$i])) {
+ $parsed_code .= "<span class=\"xtra lx$i\">";
+ } else {
+ $parsed_code .= "<span class=\"xtra ln-xtra\">";
+ }
+ } else {
+ $parsed_code .= "<span style=\"display:block;" . $this->get_line_style($i) . "\">";
+ }
+ ++$close;
+ }
+
+ $parsed_code .= $code[$i];
+
+ if ($close) {
+ $parsed_code .= str_repeat('</span>', $close);
+ $close = 0;
+ }
+ elseif ($i + 1 < $n) {
+ $parsed_code .= "\n";
+ }
+ unset($code[$i]);
+ }
+
+ if ($this->header_type == GESHI_HEADER_PRE_VALID || $this->header_type == GESHI_HEADER_PRE_TABLE) {
+ $parsed_code .= '</pre>';
+ }
+ if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ $parsed_code .= '</td>';
+ }
+ }
+
+ $parsed_code .= $this->footer();
+ }
+
+ /**
+ * Creates the header for the code block (with correct attributes)
+ *
+ * @return string The header for the code block
+ * @since 1.0.0
+ * @access private
+ */
+ function header() {
+ // Get attributes needed
+ /**
+ * @todo Document behaviour change - class is outputted regardless of whether
+ * we're using classes or not. Same with style
+ */
+ $attributes = ' class="' . $this->language;
+ if ($this->overall_class != '') {
+ $attributes .= " ".$this->overall_class;
+ }
+ $attributes .= '"';
+
+ if ($this->overall_id != '') {
+ $attributes .= " id=\"{$this->overall_id}\"";
+ }
+ if ($this->overall_style != '') {
+ $attributes .= ' style="' . $this->overall_style . '"';
+ }
+
+ $ol_attributes = '';
+
+ if ($this->line_numbers_start != 1) {
+ $ol_attributes .= ' start="' . $this->line_numbers_start . '"';
+ }
+
+ // Get the header HTML
+ $header = $this->header_content;
+ if ($header) {
+ if ($this->header_type == GESHI_HEADER_PRE || $this->header_type == GESHI_HEADER_PRE_VALID) {
+ $header = str_replace("\n", '', $header);
+ }
+ $header = $this->replace_keywords($header);
+
+ if ($this->use_classes) {
+ $attr = ' class="head"';
+ } else {
+ $attr = " style=\"{$this->header_content_style}\"";
+ }
+ if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ $header = "<thead><tr><td colspan=\"2\" $attr>$header</td></tr></thead>";
+ } else {
+ $header = "<div$attr>$header</div>";
+ }
+ }
+
+ if (GESHI_HEADER_NONE == $this->header_type) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ return "$header<ol$attributes$ol_attributes>";
+ }
+ return $header . ($this->force_code_block ? '<div>' : '');
+ }
+
+ // Work out what to return and do it
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ if ($this->header_type == GESHI_HEADER_PRE) {
+ return "<pre$attributes>$header<ol$ol_attributes>";
+ } else if ($this->header_type == GESHI_HEADER_DIV ||
+ $this->header_type == GESHI_HEADER_PRE_VALID) {
+ return "<div$attributes>$header<ol$ol_attributes>";
+ } else if ($this->header_type == GESHI_HEADER_PRE_TABLE) {
+ return "<table$attributes>$header<tbody><tr class=\"li1\">";
+ }
+ } else {
+ if ($this->header_type == GESHI_HEADER_PRE) {
+ return "<pre$attributes>$header" .
+ ($this->force_code_block ? '<div>' : '');
+ } else {
+ return "<div$attributes>$header" .
+ ($this->force_code_block ? '<div>' : '');
+ }
+ }
+ }
+
+ /**
+ * Returns the footer for the code block.
+ *
+ * @return string The footer for the code block
+ * @since 1.0.0
+ * @access private
+ */
+ function footer() {
+ $footer = $this->footer_content;
+ if ($footer) {
+ if ($this->header_type == GESHI_HEADER_PRE) {
+ $footer = str_replace("\n", '', $footer);;
+ }
+ $footer = $this->replace_keywords($footer);
+
+ if ($this->use_classes) {
+ $attr = ' class="foot"';
+ } else {
+ $attr = " style=\"{$this->footer_content_style}\"";
+ }
+ if ($this->header_type == GESHI_HEADER_PRE_TABLE && $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ $footer = "<tfoot><tr><td colspan=\"2\">$footer</td></tr></tfoot>";
+ } else {
+ $footer = "<div$attr>$footer</div>";
+ }
+ }
+
+ if (GESHI_HEADER_NONE == $this->header_type) {
+ return ($this->line_numbers != GESHI_NO_LINE_NUMBERS) ? '</ol>' . $footer : $footer;
+ }
+
+ if ($this->header_type == GESHI_HEADER_DIV || $this->header_type == GESHI_HEADER_PRE_VALID) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ return "</ol>$footer</div>";
+ }
+ return ($this->force_code_block ? '</div>' : '') .
+ "$footer</div>";
+ }
+ elseif ($this->header_type == GESHI_HEADER_PRE_TABLE) {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ return "</tr></tbody>$footer</table>";
+ }
+ return ($this->force_code_block ? '</div>' : '') .
+ "$footer</div>";
+ }
+ else {
+ if ($this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ return "</ol>$footer</pre>";
+ }
+ return ($this->force_code_block ? '</div>' : '') .
+ "$footer</pre>";
+ }
+ }
+
+ /**
+ * Replaces certain keywords in the header and footer with
+ * certain configuration values
+ *
+ * @param string The header or footer content to do replacement on
+ * @return string The header or footer with replaced keywords
+ * @since 1.0.2
+ * @access private
+ */
+ function replace_keywords($instr) {
+ $keywords = $replacements = array();
+
+ $keywords[] = '<TIME>';
+ $keywords[] = '{TIME}';
+ $replacements[] = $replacements[] = number_format($time = $this->get_time(), 3);
+
+ $keywords[] = '<LANGUAGE>';
+ $keywords[] = '{LANGUAGE}';
+ $replacements[] = $replacements[] = $this->language_data['LANG_NAME'];
+
+ $keywords[] = '<VERSION>';
+ $keywords[] = '{VERSION}';
+ $replacements[] = $replacements[] = GESHI_VERSION;
+
+ $keywords[] = '<SPEED>';
+ $keywords[] = '{SPEED}';
+ if ($time <= 0) {
+ $speed = 'N/A';
+ } else {
+ $speed = strlen($this->source) / $time;
+ if ($speed >= 1024) {
+ $speed = sprintf("%.2f KB/s", $speed / 1024.0);
+ } else {
+ $speed = sprintf("%.0f B/s", $speed);
+ }
+ }
+ $replacements[] = $replacements[] = $speed;
+
+ return str_replace($keywords, $replacements, $instr);
+ }
+
+ /**
+ * Secure replacement for PHP built-in function htmlspecialchars().
+ *
+ * See ticket #427 (http://wush.net/trac/wikka/ticket/427) for the rationale
+ * for this replacement function.
+ *
+ * The INTERFACE for this function is almost the same as that for
+ * htmlspecialchars(), with the same default for quote style; however, there
+ * is no 'charset' parameter. The reason for this is as follows:
+ *
+ * The PHP docs say:
+ * "The third argument charset defines character set used in conversion."
+ *
+ * I suspect PHP's htmlspecialchars() is working at the byte-value level and
+ * thus _needs_ to know (or asssume) a character set because the special
+ * characters to be replaced could exist at different code points in
+ * different character sets. (If indeed htmlspecialchars() works at
+ * byte-value level that goes some way towards explaining why the
+ * vulnerability would exist in this function, too, and not only in
+ * htmlentities() which certainly is working at byte-value level.)
+ *
+ * This replacement function however works at character level and should
+ * therefore be "immune" to character set differences - so no charset
+ * parameter is needed or provided. If a third parameter is passed, it will
+ * be silently ignored.
+ *
+ * In the OUTPUT there is a minor difference in that we use '&#39;' instead
+ * of PHP's '&#039;' for a single quote: this provides compatibility with
+ * get_html_translation_table(HTML_SPECIALCHARS, ENT_QUOTES)
+ * (see comment by mikiwoz at yahoo dot co dot uk on
+ * http://php.net/htmlspecialchars); it also matches the entity definition
+ * for XML 1.0
+ * (http://www.w3.org/TR/xhtml1/dtds.html#a_dtd_Special_characters).
+ * Like PHP we use a numeric character reference instead of '&apos;' for the
+ * single quote. For the other special characters we use the named entity
+ * references, as PHP is doing.
+ *
+ * @author {@link http://wikkawiki.org/JavaWoman Marjolein Katsma}
+ *
+ * @license http://www.gnu.org/copyleft/lgpl.html
+ * GNU Lesser General Public License
+ * @copyright Copyright 2007, {@link http://wikkawiki.org/CreditsPage
+ * Wikka Development Team}
+ *
+ * @access private
+ * @param string $string string to be converted
+ * @param integer $quote_style
+ * - ENT_COMPAT: escapes &, <, > and double quote (default)
+ * - ENT_NOQUOTES: escapes only &, < and >
+ * - ENT_QUOTES: escapes &, <, >, double and single quotes
+ * @return string converted string
+ * @since 1.0.7.18
+ */
+ function hsc($string, $quote_style = ENT_COMPAT) {
+ // init
+ static $aTransSpecchar = array(
+ '&' => '&amp;',
+ '"' => '&quot;',
+ '<' => '&lt;',
+ '>' => '&gt;',
+
+ //This fix is related to SF#1923020, but has to be applied
+ //regardless of actually highlighting symbols.
+
+ //Circumvent a bug with symbol highlighting
+ //This is required as ; would produce undesirable side-effects if it
+ //was not to be processed as an entity.
+ ';' => '<SEMI>', // Force ; to be processed as entity
+ '|' => '<PIPE>' // Force | to be processed as entity
+ ); // ENT_COMPAT set
+
+ switch ($quote_style) {
+ case ENT_NOQUOTES: // don't convert double quotes
+ unset($aTransSpecchar['"']);
+ break;
+ case ENT_QUOTES: // convert single quotes as well
+ $aTransSpecchar["'"] = '&#39;'; // (apos) htmlspecialchars() uses '&#039;'
+ break;
+ }
+
+ // return translated string
+ return strtr($string, $aTransSpecchar);
+ }
+
+ /**
+ * Returns a stylesheet for the highlighted code. If $economy mode
+ * is true, we only return the stylesheet declarations that matter for
+ * this code block instead of the whole thing
+ *
+ * @param boolean Whether to use economy mode or not
+ * @return string A stylesheet built on the data for the current language
+ * @since 1.0.0
+ */
+ function get_stylesheet($economy_mode = true) {
+ // If there's an error, chances are that the language file
+ // won't have populated the language data file, so we can't
+ // risk getting a stylesheet...
+ if ($this->error) {
+ return '';
+ }
+
+ //Check if the style rearrangements have been processed ...
+ //This also does some preprocessing to check which style groups are useable ...
+ if(!isset($this->language_data['NUMBERS_CACHE'])) {
+ $this->build_style_cache();
+ }
+
+ // First, work out what the selector should be. If there's an ID,
+ // that should be used, the same for a class. Otherwise, a selector
+ // of '' means that these styles will be applied anywhere
+ if ($this->overall_id) {
+ $selector = '#' . $this->overall_id;
+ } else {
+ $selector = '.' . $this->language;
+ if ($this->overall_class) {
+ $selector .= '.' . $this->overall_class;
+ }
+ }
+ $selector .= ' ';
+
+ // Header of the stylesheet
+ if (!$economy_mode) {
+ $stylesheet = "/**\n".
+ " * GeSHi Dynamically Generated Stylesheet\n".
+ " * --------------------------------------\n".
+ " * Dynamically generated stylesheet for {$this->language}\n".
+ " * CSS class: {$this->overall_class}, CSS id: {$this->overall_id}\n".
+ " * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\n" .
+ " * (http://qbnz.com/highlighter/ and http://geshi.org/)\n".
+ " * --------------------------------------\n".
+ " */\n";
+ } else {
+ $stylesheet = "/**\n".
+ " * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\n" .
+ " * (http://qbnz.com/highlighter/ and http://geshi.org/)\n".
+ " */\n";
+ }
+
+ // Set the <ol> to have no effect at all if there are line numbers
+ // (<ol>s have margins that should be destroyed so all layout is
+ // controlled by the set_overall_style method, which works on the
+ // <pre> or <div> container). Additionally, set default styles for lines
+ if (!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) {
+ //$stylesheet .= "$selector, {$selector}ol, {$selector}ol li {margin: 0;}\n";
+ $stylesheet .= "$selector.de1, $selector.de2 {{$this->code_style}}\n";
+ }
+
+ // Add overall styles
+ // note: neglect economy_mode, empty styles are meaningless
+ if ($this->overall_style != '') {
+ $stylesheet .= "$selector {{$this->overall_style}}\n";
+ }
+
+ // Add styles for links
+ // note: economy mode does not make _any_ sense here
+ // either the style is empty and thus no selector is needed
+ // or the appropriate key is given.
+ foreach ($this->link_styles as $key => $style) {
+ if ($style != '') {
+ switch ($key) {
+ case GESHI_LINK:
+ $stylesheet .= "{$selector}a:link {{$style}}\n";
+ break;
+ case GESHI_HOVER:
+ $stylesheet .= "{$selector}a:hover {{$style}}\n";
+ break;
+ case GESHI_ACTIVE:
+ $stylesheet .= "{$selector}a:active {{$style}}\n";
+ break;
+ case GESHI_VISITED:
+ $stylesheet .= "{$selector}a:visited {{$style}}\n";
+ break;
+ }
+ }
+ }
+
+ // Header and footer
+ // note: neglect economy_mode, empty styles are meaningless
+ if ($this->header_content_style != '') {
+ $stylesheet .= "$selector.head {{$this->header_content_style}}\n";
+ }
+ if ($this->footer_content_style != '') {
+ $stylesheet .= "$selector.foot {{$this->footer_content_style}}\n";
+ }
+
+ // Styles for important stuff
+ // note: neglect economy_mode, empty styles are meaningless
+ if ($this->important_styles != '') {
+ $stylesheet .= "$selector.imp {{$this->important_styles}}\n";
+ }
+
+ // Simple line number styles
+ if ((!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) && $this->line_style1 != '') {
+ $stylesheet .= "{$selector}li, {$selector}.li1 {{$this->line_style1}}\n";
+ }
+ if ((!$economy_mode || $this->line_numbers != GESHI_NO_LINE_NUMBERS) && $this->table_linenumber_style != '') {
+ $stylesheet .= "{$selector}.ln {{$this->table_linenumber_style}}\n";
+ }
+ // If there is a style set for fancy line numbers, echo it out
+ if ((!$economy_mode || $this->line_numbers == GESHI_FANCY_LINE_NUMBERS) && $this->line_style2 != '') {
+ $stylesheet .= "{$selector}.li2 {{$this->line_style2}}\n";
+ }
+
+ // note: empty styles are meaningless
+ foreach ($this->language_data['STYLES']['KEYWORDS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode ||
+ (isset($this->lexic_permissions['KEYWORDS'][$group]) &&
+ $this->lexic_permissions['KEYWORDS'][$group]))) {
+ $stylesheet .= "$selector.kw$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['COMMENTS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode ||
+ (isset($this->lexic_permissions['COMMENTS'][$group]) &&
+ $this->lexic_permissions['COMMENTS'][$group]) ||
+ (!empty($this->language_data['COMMENT_REGEXP']) &&
+ !empty($this->language_data['COMMENT_REGEXP'][$group])))) {
+ $stylesheet .= "$selector.co$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['ESCAPE_CHAR'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['ESCAPE_CHAR'])) {
+ // NEW: since 1.0.8 we have to handle hardescapes
+ if ($group === 'HARD') {
+ $group = '_h';
+ }
+ $stylesheet .= "$selector.es$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['BRACKETS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['BRACKETS'])) {
+ $stylesheet .= "$selector.br$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['SYMBOLS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['SYMBOLS'])) {
+ $stylesheet .= "$selector.sy$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['STRINGS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['STRINGS'])) {
+ // NEW: since 1.0.8 we have to handle hardquotes
+ if ($group === 'HARD') {
+ $group = '_h';
+ }
+ $stylesheet .= "$selector.st$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['NUMBERS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['NUMBERS'])) {
+ $stylesheet .= "$selector.nu$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['METHODS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode || $this->lexic_permissions['METHODS'])) {
+ $stylesheet .= "$selector.me$group {{$styles}}\n";
+ }
+ }
+ // note: neglect economy_mode, empty styles are meaningless
+ foreach ($this->language_data['STYLES']['SCRIPT'] as $group => $styles) {
+ if ($styles != '') {
+ $stylesheet .= "$selector.sc$group {{$styles}}\n";
+ }
+ }
+ foreach ($this->language_data['STYLES']['REGEXPS'] as $group => $styles) {
+ if ($styles != '' && (!$economy_mode ||
+ (isset($this->lexic_permissions['REGEXPS'][$group]) &&
+ $this->lexic_permissions['REGEXPS'][$group]))) {
+ if (is_array($this->language_data['REGEXPS'][$group]) &&
+ array_key_exists(GESHI_CLASS, $this->language_data['REGEXPS'][$group])) {
+ $stylesheet .= "$selector.";
+ $stylesheet .= $this->language_data['REGEXPS'][$group][GESHI_CLASS];
+ $stylesheet .= " {{$styles}}\n";
+ } else {
+ $stylesheet .= "$selector.re$group {{$styles}}\n";
+ }
+ }
+ }
+ // Styles for lines being highlighted extra
+ if (!$economy_mode || (count($this->highlight_extra_lines)!=count($this->highlight_extra_lines_styles))) {
+ $stylesheet .= "{$selector}.ln-xtra, {$selector}li.ln-xtra, {$selector}div.ln-xtra {{$this->highlight_extra_lines_style}}\n";
+ }
+ $stylesheet .= "{$selector}span.xtra { display:block; }\n";
+ foreach ($this->highlight_extra_lines_styles as $lineid => $linestyle) {
+ $stylesheet .= "{$selector}.lx$lineid, {$selector}li.lx$lineid, {$selector}div.lx$lineid {{$linestyle}}\n";
+ }
+
+ return $stylesheet;
+ }
+
+ /**
+ * Get's the style that is used for the specified line
+ *
+ * @param int The line number information is requested for
+ * @access private
+ * @since 1.0.7.21
+ */
+ function get_line_style($line) {
+ //$style = null;
+ $style = null;
+ if (isset($this->highlight_extra_lines_styles[$line])) {
+ $style = $this->highlight_extra_lines_styles[$line];
+ } else { // if no "extra" style assigned
+ $style = $this->highlight_extra_lines_style;
+ }
+
+ return $style;
+ }
+
+ /**
+ * this functions creates an optimized regular expression list
+ * of an array of strings.
+ *
+ * Example:
+ * <code>$list = array('faa', 'foo', 'foobar');
+ * => string 'f(aa|oo(bar)?)'</code>
+ *
+ * @param $list array of (unquoted) strings
+ * @param $regexp_delimiter your regular expression delimiter, @see preg_quote()
+ * @return string for regular expression
+ * @author Milian Wolff <mail@milianw.de>
+ * @since 1.0.8
+ * @access private
+ */
+ function optimize_regexp_list($list, $regexp_delimiter = '/') {
+ $regex_chars = array('.', '\\', '+', '*', '?', '[', '^', ']', '$',
+ '(', ')', '{', '}', '=', '!', '<', '>', '|', ':', $regexp_delimiter);
+ sort($list);
+ $regexp_list = array('');
+ $num_subpatterns = 0;
+ $list_key = 0;
+
+ // the tokens which we will use to generate the regexp list
+ $tokens = array();
+ $prev_keys = array();
+ // go through all entries of the list and generate the token list
+ $cur_len = 0;
+ for ($i = 0, $i_max = count($list); $i < $i_max; ++$i) {
+ if ($cur_len > GESHI_MAX_PCRE_LENGTH) {
+ // seems like the length of this pcre is growing exorbitantly
+ $regexp_list[++$list_key] = $this->_optimize_regexp_list_tokens_to_string($tokens);
+ $num_subpatterns = substr_count($regexp_list[$list_key], '(?:');
+ $tokens = array();
+ $cur_len = 0;
+ }
+ $level = 0;
+ $entry = preg_quote((string) $list[$i], $regexp_delimiter);
+ $pointer = &$tokens;
+ // properly assign the new entry to the correct position in the token array
+ // possibly generate smaller common denominator keys
+ while (true) {
+ // get the common denominator
+ if (isset($prev_keys[$level])) {
+ if ($prev_keys[$level] == $entry) {
+ // this is a duplicate entry, skip it
+ continue 2;
+ }
+ $char = 0;
+ while (isset($entry[$char]) && isset($prev_keys[$level][$char])
+ && $entry[$char] == $prev_keys[$level][$char]) {
+ ++$char;
+ }
+ if ($char > 0) {
+ // this entry has at least some chars in common with the current key
+ if ($char == strlen($prev_keys[$level])) {
+ // current key is totally matched, i.e. this entry has just some bits appended
+ $pointer = &$pointer[$prev_keys[$level]];
+ } else {
+ // only part of the keys match
+ $new_key_part1 = substr($prev_keys[$level], 0, $char);
+ $new_key_part2 = substr($prev_keys[$level], $char);
+
+ if (in_array($new_key_part1[0], $regex_chars)
+ || in_array($new_key_part2[0], $regex_chars)) {
+ // this is bad, a regex char as first character
+ $pointer[$entry] = array('' => true);
+ array_splice($prev_keys, $level, count($prev_keys), $entry);
+ $cur_len += strlen($entry);
+ continue;
+ } else {
+ // relocate previous tokens
+ $pointer[$new_key_part1] = array($new_key_part2 => $pointer[$prev_keys[$level]]);
+ unset($pointer[$prev_keys[$level]]);
+ $pointer = &$pointer[$new_key_part1];
+ // recreate key index
+ array_splice($prev_keys, $level, count($prev_keys), array($new_key_part1, $new_key_part2));
+ $cur_len += strlen($new_key_part2);
+ }
+ }
+ ++$level;
+ $entry = substr($entry, $char);
+ continue;
+ }
+ // else: fall trough, i.e. no common denominator was found
+ }
+ if ($level == 0 && !empty($tokens)) {
+ // we can dump current tokens into the string and throw them away afterwards
+ $new_entry = $this->_optimize_regexp_list_tokens_to_string($tokens);
+ $new_subpatterns = substr_count($new_entry, '(?:');
+ if (GESHI_MAX_PCRE_SUBPATTERNS && $num_subpatterns + $new_subpatterns > GESHI_MAX_PCRE_SUBPATTERNS) {
+ $regexp_list[++$list_key] = $new_entry;
+ $num_subpatterns = $new_subpatterns;
+ } else {
+ if (!empty($regexp_list[$list_key])) {
+ $new_entry = '|' . $new_entry;
+ }
+ $regexp_list[$list_key] .= $new_entry;
+ $num_subpatterns += $new_subpatterns;
+ }
+ $tokens = array();
+ $cur_len = 0;
+ }
+ // no further common denominator found
+ $pointer[$entry] = array('' => true);
+ array_splice($prev_keys, $level, count($prev_keys), $entry);
+
+ $cur_len += strlen($entry);
+ break;
+ }
+ unset($list[$i]);
+ }
+ // make sure the last tokens get converted as well
+ $new_entry = $this->_optimize_regexp_list_tokens_to_string($tokens);
+ if (GESHI_MAX_PCRE_SUBPATTERNS && $num_subpatterns + substr_count($new_entry, '(?:') > GESHI_MAX_PCRE_SUBPATTERNS) {
+ $regexp_list[++$list_key] = $new_entry;
+ } else {
+ if (!empty($regexp_list[$list_key])) {
+ $new_entry = '|' . $new_entry;
+ }
+ $regexp_list[$list_key] .= $new_entry;
+ }
+ return $regexp_list;
+ }
+ /**
+ * this function creates the appropriate regexp string of an token array
+ * you should not call this function directly, @see $this->optimize_regexp_list().
+ *
+ * @param &$tokens array of tokens
+ * @param $recursed bool to know wether we recursed or not
+ * @return string
+ * @author Milian Wolff <mail@milianw.de>
+ * @since 1.0.8
+ * @access private
+ */
+ function _optimize_regexp_list_tokens_to_string(&$tokens, $recursed = false) {
+ $list = '';
+ foreach ($tokens as $token => $sub_tokens) {
+ $list .= $token;
+ $close_entry = isset($sub_tokens['']);
+ unset($sub_tokens['']);
+ if (!empty($sub_tokens)) {
+ $list .= '(?:' . $this->_optimize_regexp_list_tokens_to_string($sub_tokens, true) . ')';
+ if ($close_entry) {
+ // make sub_tokens optional
+ $list .= '?';
+ }
+ }
+ $list .= '|';
+ }
+ if (!$recursed) {
+ // do some optimizations
+ // common trailing strings
+ // BUGGY!
+ //$list = preg_replace_callback('#(?<=^|\:|\|)\w+?(\w+)(?:\|.+\1)+(?=\|)#', create_function(
+ // '$matches', 'return "(?:" . preg_replace("#" . preg_quote($matches[1], "#") . "(?=\||$)#", "", $matches[0]) . ")" . $matches[1];'), $list);
+ // (?:p)? => p?
+ $list = preg_replace('#\(\?\:(.)\)\?#', '\1?', $list);
+ // (?:a|b|c|d|...)? => [abcd...]?
+ // TODO: a|bb|c => [ac]|bb
+ static $callback_2;
+ if (!isset($callback_2)) {
+ $callback_2 = create_function('$matches', 'return "[" . str_replace("|", "", $matches[1]) . "]";');
+ }
+ $list = preg_replace_callback('#\(\?\:((?:.\|)+.)\)#', $callback_2, $list);
+ }
+ // return $list without trailing pipe
+ return substr($list, 0, -1);
+ }
+} // End Class GeSHi
+
+
+if (!function_exists('geshi_highlight')) {
+ /**
+ * Easy way to highlight stuff. Behaves just like highlight_string
+ *
+ * @param string The code to highlight
+ * @param string The language to highlight the code in
+ * @param string The path to the language files. You can leave this blank if you need
+ * as from version 1.0.7 the path should be automatically detected
+ * @param boolean Whether to return the result or to echo
+ * @return string The code highlighted (if $return is true)
+ * @since 1.0.2
+ */
+ function geshi_highlight($string, $language, $path = null, $return = false) {
+ $geshi = new GeSHi($string, $language, $path);
+ $geshi->set_header_type(GESHI_HEADER_NONE);
+
+ if ($return) {
+ return '<code>' . $geshi->parse_code() . '</code>';
+ }
+
+ echo '<code>' . $geshi->parse_code() . '</code>';
+
+ if ($geshi->error()) {
+ return false;
+ }
+ return true;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php
new file mode 100644
index 000000000..229de9891
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php
@@ -0,0 +1,1409 @@
+<?php
+/*************************************************************************************
+ * abap.php
+ * --------
+ * Author: Andres Picazo (andres@andrespicazo.com)
+ * Contributors:
+ * - Sandra Rossi (sandra.rossi@gmail.com)
+ * - Jacob Laursen (jlu@kmd.dk)
+ * Copyright: (c) 2007 Andres Picazo
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * ABAP language file for GeSHi.
+ *
+ * Reference abap language documentation (abap 7.1) : http://help.sap.com/abapdocu/en/ABENABAP_INDEX.htm
+ *
+ * ABAP syntax is highly complex, several problems could not be addressed, see TODO below if you dare ;-)
+ * Be aware that in ABAP language, keywords may be composed of several tokens,
+ * separated by one or more spaces or carriage returns
+ * (for example CONCATENATE 'hello' 'world' INTO string SEPARATED BY ' ')
+ * it's why we must decode them with REGEXPS. As there are many keywords with several tokens,
+ * I had to create a separate section in the code to simplify the reading.
+ * Be aware that some words may be highlighted several times like for "ref to data", which is first
+ * highlighted for "ref to data", then secondly for "ref to". It is very important to
+ * position "ref to" after "ref to data" otherwise "data" wouldn't be highlighted because
+ * of the previous highlight.
+ * Control, declarative and other statements are assigned URLs to sap documentation website:
+ * http://help.sap.com/abapdocu/en/ABAP<statement_name>.htm
+ *
+ * CHANGES
+ * -------
+ * 2009/02/25 (1.0.8.3)
+ * - Some more rework of the language file
+ * 2009/01/04 (1.0.8.2)
+ * - Major Release, more than 1000 statements and keywords added = whole abap 7.1 (Sandra Rossi)
+ * 2007/06/27 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * ----
+ * - in DATA data TYPE type, 2nd "data" and 2nd "type" are highlighted with data
+ * style, but should be ignored. Same problem for all words!!! This is quite impossible to
+ * solve it as we should define syntaxes of all statements (huge effort!) and use a lex
+ * or something like that instead of regexp I guess.
+ * - Some words are considered as being statement names (report, tables, etc.) though they
+ * are used as keyword in some statements. For example: FORM xxxx TABLES itab. It was
+ * arbitrary decided to define them as statement instead of keyword, because it may be
+ * useful to have the URL to SAP help for some of them.
+ * - if a comment is between 2 words of a keyword (for example SEPARATED "comment \n BY),
+ * it is not considered as a keyword, but it should!
+ * - for statements like "READ DATASET", GeSHi does not allow to set URLs because these
+ * statements are determined by REGEXPS. For "READ DATASET", the URL should be
+ * ABAPREAD_DATASET.htm. If a technical solution is found, be careful : URLs
+ * are sometimes not valid because the URL does not exist. For example, for "AT NEW"
+ * statement, the URL should be ABAPAT_ITAB.htm (not ABAPAT_NEW.htm).
+ * There are many other exceptions.
+ * Note: for adding this functionality within your php program, you can execute this code:
+ * function add_urls_to_multi_tokens( $matches ) {
+ * $url = preg_replace( "/[ \n]+/" , "_" , $matches[3] );
+ * if( $url == $matches[3] ) return $matches[0] ;
+ * else return $matches[1]."<a href=\"http://help.sap.com/abapdocu/en/ABAP".strtoupper($url).".htm\">".$matches[3]."</a>".$matches[4];
+ * }
+ * $html = $geshi->parse_code();
+ * $html = preg_replace_callback( "£(zzz:(control|statement|data);\">)(.+?)(</span>)£s", "add_urls_to_multi_tokens", $html );
+ * echo $html;
+ * - Numbers followed by a dot terminating the statement are not properly recognized
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'ABAP',
+ 'COMMENT_SINGLE' => array(
+ 1 => '"'
+ ),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ // lines beginning with star at 1st position are comments
+ // (star anywhere else is not a comment, especially be careful with
+ // "assign dref->* to <fs>" statement)
+ 2 => '/^\*.*?$/m'
+ ),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array(
+ 1 => "'",
+ 2 => "`"
+ ),
+ 'ESCAPE_CHAR' => '',
+
+ 'KEYWORDS' => array(
+ //***********************************************
+ // Section 2 : process sequences of several tokens
+ //***********************************************
+
+ 7 => array(
+ 'at new',
+ 'at end of',
+ 'at first',
+ 'at last',
+ 'loop at',
+ 'loop at screen',
+ ),
+
+ 8 => array(
+ 'private section',
+ 'protected section',
+ 'public section',
+ 'at line-selection',
+ 'at selection-screen',
+ 'at user-command',
+ 'assign component',
+ 'assign table field',
+ 'call badi',
+ 'call customer-function',
+ 'call customer subscreen',
+ 'call dialog',
+ 'call function',
+ 'call method',
+ 'call screen',
+ 'call selection-screen',
+ 'call transaction',
+ 'call transformation',
+ 'close cursor',
+ 'close dataset',
+ 'commit work',
+ 'convert date',
+ 'convert text',
+ 'convert time stamp',
+ 'create data',
+ 'create object',
+ 'delete dataset',
+ 'delete from',
+ 'describe distance',
+ 'describe field',
+ 'describe list',
+ 'describe table',
+ 'exec sql',
+ 'exit from sql',
+ 'exit from step-loop',
+ 'export dynpro',
+ 'export nametab',
+ 'free memory',
+ 'generate subroutine-pool',
+ 'get badi',
+ 'get bit',
+ 'get cursor',
+ 'get dataset',
+ 'get locale',
+ 'get parameter',
+ 'get pf-status',
+ 'get property',
+ 'get reference',
+ 'get run time',
+ 'get time',
+ 'get time stamp',
+ 'import directory',
+ 'insert report',
+ 'insert text-pool',
+ 'leave list-processing',
+ 'leave program',
+ 'leave screen',
+ 'leave to list-processing',
+ 'leave to transaction',
+ 'modify line',
+ 'modify screen',
+ 'move percentage',
+ 'open cursor',
+ 'open dataset',
+ 'raise event',
+ 'raise exception',
+ 'read dataset',
+ 'read line',
+ 'read report',
+ 'read table',
+ 'read textpool',
+ 'receive results from function',
+ 'refresh control',
+ 'rollback work',
+ 'set bit',
+ 'set blank lines',
+ 'set country',
+ 'set cursor',
+ 'set dataset',
+ 'set extended check',
+ 'set handler',
+ 'set hold data',
+ 'set language',
+ 'set left scroll-boundary',
+ 'set locale',
+ 'set margin',
+ 'set parameter',
+ 'set pf-status',
+ 'set property',
+ 'set run time analyzer',
+ 'set run time clock',
+ 'set screen',
+ 'set titlebar',
+ 'set update task',
+ 'set user-command',
+ 'suppress dialog',
+ 'truncate dataset',
+ 'wait until',
+ 'wait up to',
+ ),
+
+ 9 => array(
+ 'accepting duplicate keys',
+ 'accepting padding',
+ 'accepting truncation',
+ 'according to',
+ 'actual length',
+ 'adjacent duplicates',
+ 'after input',
+ 'all blob columns',
+ 'all clob columns',
+ 'all fields',
+ 'all methods',
+ 'all other columns',
+ 'and mark',
+ 'and return to screen',
+ 'and return',
+ 'and skip first screen',
+ 'and wait',
+ 'any table',
+ 'appendage type',
+ 'archive mode',
+ 'archiving parameters',
+ 'area handle',
+ 'as checkbox',
+ 'as icon',
+ 'as line',
+ 'as listbox',
+ 'as person table',
+ 'as search patterns',
+ 'as separate unit',
+ 'as subscreen',
+ 'as symbol',
+ 'as text',
+ 'as window',
+ 'at cursor-selection',
+ 'at exit-command',
+ 'at next application statement',
+ 'at position',
+
+ 'backup into',
+ 'before output',
+ 'before unwind',
+ 'begin of block',
+ 'begin of common part',
+ 'begin of line',
+ 'begin of screen',
+ 'begin of tabbed block',
+ 'begin of version',
+ 'begin of',
+ 'big endian',
+ 'binary mode',
+ 'binary search',
+ 'by kernel module',
+ 'bypassing buffer',
+
+ 'client specified',
+ 'code page',
+ 'code page hint',
+ 'code page into',
+ 'color black',
+ 'color blue',
+ 'color green',
+ 'color pink',
+ 'color red',
+ 'color yellow',
+ 'compression off',
+ 'compression on',
+ 'connect to',
+ 'corresponding fields of table',
+ 'corresponding fields of',
+ 'cover page',
+ 'cover text',
+ 'create package',
+ 'create private',
+ 'create protected',
+ 'create public',
+ 'current position',
+
+ 'data buffer',
+ 'data values',
+ 'dataset expiration',
+ 'daylight saving time',
+ 'default key',
+ 'default program',
+ 'default screen',
+ 'defining database',
+ 'deleting leading',
+ 'deleting trailing',
+ 'directory entry',
+ 'display like',
+ 'display offset',
+ 'during line-selection',
+ 'dynamic selections',
+
+ 'edit mask',
+ 'end of block',
+ 'end of common part',
+ 'end of file',
+ 'end of line',
+ 'end of screen',
+ 'end of tabbed block',
+ 'end of version',
+ 'end of',
+ 'endian into',
+ 'ending at',
+ 'enhancement options into',
+ 'enhancement into',
+ 'environment time format',
+ 'execute procedure',
+ 'exporting list to memory',
+ 'extension type',
+
+ 'field format',
+ 'field selection',
+ 'field value into',
+ 'final methods',
+ 'first occurrence of',
+ 'fixed-point arithmetic',
+ 'for all entries',
+ 'for all instances',
+ 'for appending',
+ 'for columns',
+ 'for event of',
+ 'for field',
+ 'for high',
+ 'for input',
+ 'for lines',
+ 'for low',
+ 'for node',
+ 'for output',
+ 'for select',
+ 'for table',
+ 'for testing',
+ 'for update',
+ 'for user',
+ 'frame entry',
+ 'frame program from',
+ 'from code page',
+ 'from context',
+ 'from database',
+ 'from logfile id',
+ 'from number format',
+ 'from screen',
+ 'from table',
+ 'function key',
+
+ 'get connection',
+ 'global friends',
+ 'group by',
+
+ 'hashed table of',
+ 'hashed table',
+
+ 'if found',
+ 'ignoring case',
+ 'ignoring conversion errors',
+ 'ignoring structure boundaries',
+ 'implementations from',
+ 'in background',
+ 'in background task',
+ 'in background unit',
+ 'in binary mode',
+ 'in byte mode',
+ 'in char-to-hex mode',
+ 'in character mode',
+ 'in group',
+ 'in legacy binary mode',
+ 'in legacy text mode',
+ 'in program',
+ 'in remote task',
+ 'in text mode',
+ 'in table',
+ 'in update task',
+ 'include bound',
+ 'include into',
+ 'include program from',
+ 'include structure',
+ 'include type',
+ 'including gaps',
+ 'index table',
+ 'inheriting from',
+ 'init destination',
+ 'initial line of',
+ 'initial line',
+ 'initial size',
+ 'internal table',
+ 'into sortable code',
+
+ 'keep in spool',
+ 'keeping directory entry',
+ 'keeping logical unit of work',
+ 'keeping task',
+ 'keywords from',
+
+ 'left margin',
+ 'left outer',
+ 'levels into',
+ 'line format',
+ 'line into',
+ 'line of',
+ 'line page',
+ 'line value from',
+ 'line value into',
+ 'lines of',
+ 'list authority',
+ 'list dataset',
+ 'list name',
+ 'little endian',
+ 'lob handle for',
+ 'local friends',
+ 'locator for',
+ 'lower case',
+
+ 'main table field',
+ 'match count',
+ 'match length',
+ 'match line',
+ 'match offset',
+ 'matchcode object',
+ 'maximum length',
+ 'maximum width into',
+ 'memory id',
+ 'message into',
+ 'messages into',
+ 'modif id',
+
+ 'nesting level',
+ 'new list identification',
+ 'next cursor',
+ 'no database selection',
+ 'no dialog',
+ 'no end of line',
+ 'no fields',
+ 'no flush',
+ 'no intervals',
+ 'no intervals off',
+ 'no standard page heading',
+ 'no-extension off',
+ 'non-unique key',
+ 'non-unique sorted key',
+ 'not at end of mode',
+ 'number of lines',
+ 'number of pages',
+
+ 'object key',
+ 'obligatory off',
+ 'of current page',
+ 'of page',
+ 'of program',
+ 'offset into',
+ 'on block',
+ 'on commit',
+ 'on end of task',
+ 'on end of',
+ 'on exit-command',
+ 'on help-request for',
+ 'on radiobutton group',
+ 'on rollback',
+ 'on value-request for',
+ 'open for package',
+ 'option class-coding',
+ 'option class',
+ 'option coding',
+ 'option expand',
+ 'option syncpoints',
+ 'options from',
+ 'order by',
+ 'overflow into',
+
+ 'package section',
+ 'package size',
+ 'preferred parameter',
+ 'preserving identifier escaping',
+ 'primary key',
+ 'print off',
+ 'print on',
+ 'program from',
+ 'program type',
+
+ 'radiobutton groups',
+ 'radiobutton group',
+ 'range of',
+ 'reader for',
+ 'receive buffer',
+ 'reduced functionality',
+ 'ref to data',
+ 'ref to object',
+ 'ref to',
+
+ 'reference into',
+ 'renaming with suffix',
+ 'replacement character',
+ 'replacement count',
+ 'replacement length',
+ 'replacement line',
+ 'replacement offset',
+ 'respecting blanks',
+ 'respecting case',
+ 'result into',
+ 'risk level',
+
+ 'sap cover page',
+ 'search fkeq',
+ 'search fkge',
+ 'search gkeq',
+ 'search gkge',
+ 'section of',
+ 'send buffer',
+ 'separated by',
+ 'shared buffer',
+ 'shared memory',
+ 'shared memory enabled',
+ 'skipping byte-order mark',
+ 'sorted by',
+ 'sorted table of',
+ 'sorted table',
+ 'spool parameters',
+ 'standard table of',
+ 'standard table',
+ 'starting at',
+ 'starting new task',
+ 'statements into',
+ 'structure default',
+ 'structures into',
+
+ 'table field',
+ 'table of',
+ 'text mode',
+ 'time stamp',
+ 'time zone',
+ 'to code page',
+ 'to column',
+ 'to context',
+ 'to first page',
+ 'to last page',
+ 'to last line',
+ 'to line',
+ 'to lower case',
+ 'to number format',
+ 'to page',
+ 'to sap spool',
+ 'to upper case',
+ 'tokens into',
+ 'transporting no fields',
+ 'type tableview',
+ 'type tabstrip',
+
+ 'unicode enabling',
+ 'up to',
+ 'upper case',
+ 'using edit mask',
+ 'using key',
+ 'using no edit mask',
+ 'using screen',
+ 'using selection-screen',
+ 'using selection-set',
+ 'using selection-sets of program',
+
+ 'valid between',
+ 'valid from',
+ 'value check',
+ 'via job',
+ 'via selection-screen',
+ 'visible length',
+
+ 'whenever found',
+ 'with analysis',
+ 'with byte-order mark',
+ 'with comments',
+ 'with current switchstates',
+ 'with explicit enhancements',
+ 'with frame',
+ 'with free selections',
+ 'with further secondary keys',
+ 'with header line',
+ 'with hold',
+ 'with implicit enhancements',
+ 'with inactive enhancements',
+ 'with includes',
+ 'with key',
+ 'with linefeed',
+ 'with list tokenization',
+ 'with native linefeed',
+ 'with non-unique key',
+ 'with null',
+ 'with pragmas',
+ 'with precompiled headers',
+ 'with selection-table',
+ 'with smart linefeed',
+ 'with table key',
+ 'with test code',
+ 'with type-pools',
+ 'with unique key',
+ 'with unix linefeed',
+ 'with windows linefeed',
+ 'without further secondary keys',
+ 'without selection-screen',
+ 'without spool dynpro',
+ 'without trmac',
+ 'word into',
+ 'writer for'
+ ),
+
+ //**********************************************************
+ // Other abap statements
+ //**********************************************************
+ 3 => array(
+ 'add',
+ 'add-corresponding',
+ 'aliases',
+ 'append',
+ 'assign',
+ 'at',
+ 'authority-check',
+
+ 'break-point',
+
+ 'clear',
+ 'collect',
+ 'compute',
+ 'concatenate',
+ 'condense',
+ 'class',
+ 'class-events',
+ 'class-methods',
+ 'class-pool',
+
+ 'define',
+ 'delete',
+ 'demand',
+ 'detail',
+ 'divide',
+ 'divide-corresponding',
+
+ 'editor-call',
+ 'end-of-file',
+ 'end-enhancement-section',
+ 'end-of-definition',
+ 'end-of-page',
+ 'end-of-selection',
+ 'endclass',
+ 'endenhancement',
+ 'endexec',
+ 'endform',
+ 'endfunction',
+ 'endinterface',
+ 'endmethod',
+ 'endmodule',
+ 'endon',
+ 'endprovide',
+ 'endselect',
+ 'enhancement',
+ 'enhancement-point',
+ 'enhancement-section',
+ 'export',
+ 'extract',
+ 'events',
+
+ 'fetch',
+ 'field-groups',
+ 'find',
+ 'format',
+ 'form',
+ 'free',
+ 'function-pool',
+ 'function',
+
+ 'get',
+
+ 'hide',
+
+ 'import',
+ 'infotypes',
+ 'input',
+ 'insert',
+ 'include',
+ 'initialization',
+ 'interface',
+ 'interface-pool',
+ 'interfaces',
+
+ 'leave',
+ 'load-of-program',
+ 'log-point',
+
+ 'maximum',
+ 'message',
+ 'methods',
+ 'method',
+ 'minimum',
+ 'modify',
+ 'move',
+ 'move-corresponding',
+ 'multiply',
+ 'multiply-corresponding',
+
+ 'new-line',
+ 'new-page',
+ 'new-section',
+
+ 'overlay',
+
+ 'pack',
+ 'perform',
+ 'position',
+ 'print-control',
+ 'program',
+ 'provide',
+ 'put',
+
+ 'raise',
+ 'refresh',
+ 'reject',
+ 'replace',
+ 'report',
+ 'reserve',
+
+ 'scroll',
+ 'search',
+ 'select',
+ 'selection-screen',
+ 'shift',
+ 'skip',
+ 'sort',
+ 'split',
+ 'start-of-selection',
+ 'submit',
+ 'subtract',
+ 'subtract-corresponding',
+ 'sum',
+ 'summary',
+ 'summing',
+ 'supply',
+ 'syntax-check',
+
+ 'top-of-page',
+ 'transfer',
+ 'translate',
+ 'type-pool',
+
+ 'uline',
+ 'unpack',
+ 'update',
+
+ 'window',
+ 'write'
+
+ ),
+
+ //**********************************************************
+ // keywords
+ //**********************************************************
+
+ 4 => array(
+ 'abbreviated',
+ 'abstract',
+ 'accept',
+ 'acos',
+ 'activation',
+ 'alias',
+ 'align',
+ 'all',
+ 'allocate',
+ 'and',
+ 'assigned',
+ 'any',
+ 'appending',
+ 'area',
+ 'as',
+ 'ascending',
+ 'asin',
+ 'assigning',
+ 'atan',
+ 'attributes',
+ 'avg',
+
+ 'backward',
+ 'between',
+ 'bit-and',
+ 'bit-not',
+ 'bit-or',
+ 'bit-set',
+ 'bit-xor',
+ 'boolc',
+ 'boolx',
+ 'bound',
+ 'bt',
+ 'blocks',
+ 'bounds',
+ 'boxed',
+ 'by',
+ 'byte-ca',
+ 'byte-cn',
+ 'byte-co',
+ 'byte-cs',
+ 'byte-na',
+ 'byte-ns',
+
+ 'ca',
+ 'calling',
+ 'casting',
+ 'ceil',
+ 'center',
+ 'centered',
+ 'changing',
+ 'char_off',
+ 'charlen',
+ 'circular',
+ 'class_constructor',
+ 'client',
+ 'clike',
+ 'close',
+ 'cmax',
+ 'cmin',
+ 'cn',
+ 'cnt',
+ 'co',
+ 'col_background',
+ 'col_group',
+ 'col_heading',
+ 'col_key',
+ 'col_negative',
+ 'col_normal',
+ 'col_positive',
+ 'col_total',
+ 'color',
+ 'column',
+ 'comment',
+ 'comparing',
+ 'components',
+ 'condition',
+ 'context',
+ 'copies',
+ 'count',
+ 'country',
+ 'cpi',
+ 'creating',
+ 'critical',
+ 'concat_lines_of',
+ 'cos',
+ 'cosh',
+ 'count_any_not_of',
+ 'count_any_of',
+ 'cp',
+ 'cs',
+ 'csequence',
+ 'currency',
+ 'current',
+ 'cx_static_check',
+ 'cx_root',
+ 'cx_dynamic_check',
+
+ 'dangerous',
+ 'database',
+ 'datainfo',
+ 'date',
+ 'dbmaxlen',
+ 'dd/mm/yy',
+ 'dd/mm/yyyy',
+ 'ddmmyy',
+ 'deallocate',
+ 'decfloat',
+ 'decfloat16',
+ 'decfloat34',
+ 'decimals',
+ 'default',
+ 'deferred',
+ 'definition',
+ 'department',
+ 'descending',
+ 'destination',
+ 'disconnect',
+ 'display-mode',
+ 'distance',
+ 'distinct',
+ 'div',
+ 'dummy',
+
+ 'encoding',
+ 'end-lines',
+ 'engineering',
+ 'environment',
+ 'eq',
+ 'equiv',
+ 'error_message',
+ 'errormessage',
+ 'escape',
+ 'exact',
+ 'exception-table',
+ 'exceptions',
+ 'exclude',
+ 'excluding',
+ 'exists',
+ 'exp',
+ 'exponent',
+ 'exporting',
+ 'extended_monetary',
+
+ 'field',
+ 'filter-table',
+ 'filters',
+ 'filter',
+ 'final',
+ 'find_any_not_of',
+ 'find_any_of',
+ 'find_end',
+ 'floor',
+ 'first-line',
+ 'font',
+ 'forward',
+ 'for',
+ 'frac',
+ 'from_mixed',
+ 'friends',
+ 'from',
+
+ 'giving',
+ 'ge',
+ 'gt',
+
+ 'handle',
+ 'harmless',
+ 'having',
+ 'head-lines',
+ 'help-id',
+ 'help-request',
+ 'high',
+ 'hold',
+ 'hotspot',
+
+ 'id',
+ 'ids',
+ 'immediately',
+ 'implementation',
+ 'importing',
+ 'in',
+ 'initial',
+ 'incl',
+ 'including',
+ 'increment',
+ 'index',
+ 'index-line',
+ 'inner',
+ 'inout',
+ 'intensified',
+ 'into',
+ 'inverse',
+ 'is',
+ 'iso',
+
+ 'join',
+
+ 'key',
+ 'kind',
+
+ 'log10',
+ 'language',
+ 'late',
+ 'layout',
+ 'le',
+ 'lt',
+ 'left-justified',
+ 'leftplus',
+ 'leftspace',
+ 'left',
+ 'length',
+ 'level',
+ 'like',
+ 'line-count',
+ 'line-size',
+ 'lines',
+ 'line',
+ 'load',
+ 'long',
+ 'lower',
+ 'low',
+ 'lpi',
+
+ 'matches',
+ 'match',
+ 'mail',
+ 'major-id',
+ 'max',
+ 'medium',
+ 'memory',
+ 'message-id',
+ 'module',
+ 'minor-id',
+ 'min',
+ 'mm/dd/yyyy',
+ 'mm/dd/yy',
+ 'mmddyy',
+ 'mode',
+ 'modifier',
+ 'mod',
+ 'monetary',
+
+ 'name',
+ 'nb',
+ 'ne',
+ 'next',
+ 'no-display',
+ 'no-extension',
+ 'no-gap',
+ 'no-gaps',
+ 'no-grouping',
+ 'no-heading',
+ 'no-scrolling',
+ 'no-sign',
+ 'no-title',
+ 'no-topofpage',
+ 'no-zero',
+ 'nodes',
+ 'non-unicode',
+ 'no',
+ 'number',
+ 'nmax',
+ 'nmin',
+ 'not',
+ 'null',
+ 'numeric',
+ 'numofchar',
+
+ 'o',
+ 'objects',
+ 'obligatory',
+ 'occurs',
+ 'offset',
+ 'off',
+ 'of',
+ 'only',
+ 'open',
+ 'option',
+ 'optional',
+ 'options',
+ 'output-length',
+ 'output',
+ 'out',
+ 'on change of',
+ 'or',
+ 'others',
+
+ 'pad',
+ 'page',
+ 'pages',
+ 'parameter-table',
+ 'part',
+ 'performing',
+ 'pos_high',
+ 'pos_low',
+ 'priority',
+ 'public',
+ 'pushbutton',
+
+ 'queue-only',
+ 'quickinfo',
+
+ 'raising',
+ 'range',
+ 'read-only',
+ 'received',
+ 'receiver',
+ 'receiving',
+ 'redefinition',
+ 'reference',
+ 'regex',
+ 'replacing',
+ 'reset',
+ 'responsible',
+ 'result',
+ 'results',
+ 'resumable',
+ 'returncode',
+ 'returning',
+ 'right',
+ 'right-specified',
+ 'rightplus',
+ 'rightspace',
+ 'round',
+ 'rows',
+ 'repeat',
+ 'requested',
+ 'rescale',
+ 'reverse',
+
+ 'scale_preserving',
+ 'scale_preserving_scientific',
+ 'scientific',
+ 'scientific_with_leading_zero',
+ 'screen',
+ 'scrolling',
+ 'seconds',
+ 'segment',
+ 'shift_left',
+ 'shift_right',
+ 'sign',
+ 'simple',
+ 'sin',
+ 'sinh',
+ 'short',
+ 'shortdump-id',
+ 'sign_as_postfix',
+ 'single',
+ 'size',
+ 'some',
+ 'source',
+ 'space',
+ 'spots',
+ 'stable',
+ 'state',
+ 'static',
+ 'statusinfo',
+ 'sqrt',
+ 'string',
+ 'strlen',
+ 'structure',
+ 'style',
+ 'subkey',
+ 'submatches',
+ 'substring',
+ 'substring_after',
+ 'substring_before',
+ 'substring_from',
+ 'substring_to',
+ 'super',
+ 'supplied',
+ 'switch',
+
+ 'tan',
+ 'tanh',
+ 'table_line',
+ 'table',
+ 'tab',
+ 'then',
+ 'timestamp',
+ 'times',
+ 'time',
+ 'timezone',
+ 'title-lines',
+ 'title',
+ 'top-lines',
+ 'to',
+ 'to_lower',
+ 'to_mixed',
+ 'to_upper',
+ 'trace-file',
+ 'trace-table',
+ 'transporting',
+ 'trunc',
+ 'type',
+
+ 'under',
+ 'unique',
+ 'unit',
+ 'user-command',
+ 'using',
+ 'utf-8',
+
+ 'valid',
+ 'value',
+ 'value-request',
+ 'values',
+ 'vary',
+ 'varying',
+ 'version',
+
+ 'warning',
+ 'where',
+ 'width',
+ 'with',
+ 'word',
+ 'with-heading',
+ 'with-title',
+
+ 'xsequence',
+ 'xstring',
+ 'xstrlen',
+
+ 'yes',
+ 'yymmdd',
+
+ 'z',
+ 'zero'
+
+ ),
+
+ //**********************************************************
+ // screen statements
+ //**********************************************************
+
+ 5 => array(
+ 'call subscreen',
+ 'chain',
+ 'endchain',
+ 'on chain-input',
+ 'on chain-request',
+ 'on help-request',
+ 'on input',
+ 'on request',
+ 'on value-request',
+ 'process'
+ ),
+
+ //**********************************************************
+ // internal statements
+ //**********************************************************
+
+ 6 => array(
+ 'generate dynpro',
+ 'generate report',
+ 'import dynpro',
+ 'import nametab',
+ 'include methods',
+ 'load report',
+ 'scan abap-source',
+ 'scan and check abap-source',
+ 'syntax-check for dynpro',
+ 'syntax-check for program',
+ 'syntax-trace',
+ 'system-call',
+ 'system-exit',
+ 'verification-message'
+ ),
+
+ //**********************************************************
+ // Control statements
+ //**********************************************************
+
+ 1 => array(
+ 'assert',
+ 'case',
+ 'catch',
+ 'check',
+ 'cleanup',
+ 'continue',
+ 'do',
+ 'else',
+ 'elseif',
+ 'endat',
+ 'endcase',
+ 'endcatch',
+ 'endif',
+ 'enddo',
+ 'endloop',
+ 'endtry',
+ 'endwhile',
+ 'exit',
+ 'if',
+ 'loop',
+ 'resume',
+ 'retry',
+ 'return',
+ 'stop',
+ 'try',
+ 'when',
+ 'while'
+
+ ),
+
+ //**********************************************************
+ // variable declaration statements
+ //**********************************************************
+
+ 2 => array(
+ 'class-data',
+ 'controls',
+ 'constants',
+ 'data',
+ 'field-symbols',
+ 'fields',
+ 'local',
+ 'parameters',
+ 'ranges',
+ 'select-options',
+ 'statics',
+ 'tables',
+ 'type-pools',
+ 'types'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 0 => array(
+ '->*', '->', '=>',
+ '(', ')', '{', '}', '[', ']', '+', '-', '*', '/', '!', '%', '^', '&', ':', ',', '.'
+ ),
+ 1 => array(
+ '>=', '<=', '<', '>', '='
+ ),
+ 2 => array(
+ '?='
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;', //control statements
+ 2 => 'color: #cc4050; text-transform: uppercase; font-weight: bold; zzz:data;', //data statements
+ 3 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;', //first token of other statements
+ 4 => 'color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;', // next tokens of other statements ("keywords")
+ 5 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;',
+ 6 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;',
+ 7 => 'color: #000066; text-transform: uppercase; font-weight: bold; zzz:control;',
+ 8 => 'color: #005066; text-transform: uppercase; font-weight: bold; zzz:statement;',
+ 9 => 'color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #339933;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #4da619;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #3399ff;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;',
+ 2 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #808080;',
+ 1 => 'color: #800080;',
+ 2 => 'color: #0000ff;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',
+ 2 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',
+ 3 => 'http://help.sap.com/abapdocu/en/ABAP{FNAMEU}.htm',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '-&gt;',
+ 2 => '=&gt;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 7 => array(
+ 'SPACE_AS_WHITESPACE' => true
+ ),
+ 8 => array(
+ 'SPACE_AS_WHITESPACE' => true
+ ),
+ 9 => array(
+ 'SPACE_AS_WHITESPACE' => true
+ )
+ )
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php
new file mode 100644
index 000000000..e81605098
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php
@@ -0,0 +1,957 @@
+<?php
+/*************************************************************************************
+ * actionscript.php
+ * ----------------
+ * Author: Steffen Krause (Steffen.krause@muse.de)
+ * Copyright: (c) 2004 Steffen Krause, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.7.9
+ * CVS Revision Version: $Revision: 1.9 $
+ * Date Started: 2004/06/20
+ * Last Modified: $Date: 2006/04/23 01:14:41 $
+ *
+ * Actionscript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/25 (1.0.2)
+ * Author [ NikO ] - http://niko.informatif.org
+ * - add full link for myInstance.methods to http://wiki.media-box.net/documentation/flash
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Actionscript',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '#include',
+ 'for',
+ 'foreach',
+ 'if',
+ 'elseif',
+ 'else',
+ 'while',
+ 'do',
+ 'dowhile',
+ 'endwhile',
+ 'endif',
+ 'switch',
+ 'case',
+ 'endswitch',
+ 'break',
+ 'continue',
+ 'in',
+ 'null',
+ 'false',
+ 'true',
+ 'var',
+ 'default',
+ 'new',
+ '_global',
+ 'undefined',
+ 'super'
+ ),
+ 2 => array(
+ 'static',
+ 'private',
+ 'public',
+ 'class',
+ 'extends',
+ 'implements',
+ 'import',
+ 'return',
+ 'trace',
+ '_quality',
+ '_root',
+ 'set',
+ 'setInterval',
+ 'setProperty',
+ 'stopAllSounds',
+ 'targetPath',
+ 'this',
+ 'typeof',
+ 'unescape',
+ 'updateAfterEvent'
+ ),
+ 3 => array (
+ 'Accessibility',
+ 'Array',
+ 'Boolean',
+ 'Button',
+ 'Camera',
+ 'Color',
+ 'ContextMenuItem',
+ 'ContextMenu',
+ 'Cookie',
+ 'Date',
+ 'Error',
+ 'function',
+ 'FWEndCommand',
+ 'FWJavascript',
+ 'Key',
+ 'LoadMovieNum',
+ 'LoadMovie',
+ 'LoadVariablesNum',
+ 'LoadVariables',
+ 'LoadVars',
+ 'LocalConnection',
+ 'Math',
+ 'Microphone',
+ 'MMExecute',
+ 'MMEndCommand',
+ 'MMSave',
+ 'Mouse',
+ 'MovieClipLoader',
+ 'MovieClip',
+ 'NetConnexion',
+ 'NetStream',
+ 'Number',
+ 'Object',
+ 'printAsBitmapNum',
+ 'printNum',
+ 'printAsBitmap',
+ 'printJob',
+ 'print',
+ 'Selection',
+ 'SharedObject',
+ 'Sound',
+ 'Stage',
+ 'String',
+ 'System',
+ 'TextField',
+ 'TextFormat',
+ 'Tween',
+ 'Video',
+ 'XMLUI',
+ 'XMLNode',
+ 'XMLSocket',
+ 'XML'
+ ),
+ 4 => array (
+ 'isactive',
+ 'updateProperties'
+ ),
+ 5 => array (
+ 'callee',
+ 'caller',
+ ),
+ 6 => array (
+ 'concat',
+ 'join',
+ 'pop',
+ 'push',
+ 'reverse',
+ 'shift',
+ 'slice',
+ 'sort',
+ 'sortOn',
+ 'splice',
+ 'toString',
+ 'unshift'
+ ),
+ 7 => array (
+ 'valueOf'
+ ),
+ 8 => array (
+ 'onDragOut',
+ 'onDragOver',
+ 'onKeyUp',
+ 'onKillFocus',
+ 'onPress',
+ 'onRelease',
+ 'onReleaseOutside',
+ 'onRollOut',
+ 'onRollOver',
+ 'onSetFocus'
+ ),
+ 9 => array (
+ 'setMode',
+ 'setMotionLevel',
+ 'setQuality',
+ 'activityLevel',
+ 'bandwidth',
+ 'currentFps',
+ 'fps',
+ 'index',
+ 'motionLevel',
+ 'motionTimeOut',
+ 'muted',
+ 'names',
+ 'quality',
+ 'onActivity',
+ 'onStatus'
+ ),
+ 10 => array (
+ 'getRGB',
+ 'setRGB',
+ 'getTransform',
+ 'setTransform'
+ ),
+ 11 => array (
+ 'caption',
+ 'enabled',
+ 'separatorBefore',
+ 'visible',
+ 'onSelect'
+ ),
+ 12 => array (
+ 'setCookie',
+ 'getcookie'
+ ),
+ 13 => array (
+ 'hideBuiltInItems',
+ 'builtInItems',
+ 'customItems',
+ 'onSelect'
+ ),
+ 14 => array (
+ 'CustomActions.get',
+ 'CustomActions.install',
+ 'CustomActions.list',
+ 'CustomActions.uninstall',
+ ),
+ 15 => array (
+ 'getDate',
+ 'getDay',
+ 'getFullYear',
+ 'getHours',
+ 'getMilliseconds',
+ 'getMinutes',
+ 'getMonth',
+ 'getSeconds',
+ 'getTime',
+ 'getTimezoneOffset',
+ 'getUTCDate',
+ 'getUTCDay',
+ 'getUTCFullYear',
+ 'getUTCHours',
+ 'getUTCMinutes',
+ 'getUTCMilliseconds',
+ 'getUTCMonth',
+ 'getUTCSeconds',
+ 'getYear',
+ 'setDate',
+ 'setFullYear',
+ 'setHours',
+ 'setMilliseconds',
+ 'setMinutes',
+ 'setMonth',
+ 'setSeconds',
+ 'setTime',
+ 'setUTCDate',
+ 'setUTCDay',
+ 'setUTCFullYear',
+ 'setUTCHours',
+ 'setUTCMinutes',
+ 'setUTCMilliseconds',
+ 'setUTCMonth',
+ 'setUTCSeconds',
+ 'setYear',
+ 'UTC'
+ ),
+ 16 => array (
+ 'message',
+ 'name',
+ 'throw',
+ 'try',
+ 'catch',
+ 'finally'
+ ),
+ 17 => array (
+ 'apply',
+ 'call'
+ ),
+ 18 => array (
+ 'BACKSPACE',
+ 'CAPSLOCK',
+ 'CONTROL',
+ 'DELETEKEY',
+ 'DOWN',
+ 'END',
+ 'ENTER',
+ 'ESCAPE',
+ 'getAscii',
+ 'getCode',
+ 'HOME',
+ 'INSERT',
+ 'isDown',
+ 'isToggled',
+ 'LEFT',
+ 'onKeyDown',
+ 'onKeyUp',
+ 'PGDN',
+ 'PGUP',
+ 'RIGHT',
+ 'SPACE',
+ 'TAB',
+ 'UP'
+ ),
+ 19 => array (
+ 'addRequestHeader',
+ 'contentType',
+ 'decode'
+ ),
+ 20 => array (
+ 'allowDomain',
+ 'allowInsecureDomain',
+ 'close',
+ 'domain'
+ ),
+ 21 => array (
+ 'abs',
+ 'acos',
+ 'asin',
+ 'atan',
+ 'atan2',
+ 'ceil',
+ 'cos',
+ 'exp',
+ 'floor',
+ 'log',
+ 'LN2',
+ 'LN10',
+ 'LOG2E',
+ 'LOG10E',
+ 'max',
+ 'min',
+ 'PI',
+ 'pow',
+ 'random',
+ 'sin',
+ 'SQRT1_2',
+ 'sqrt',
+ 'tan',
+ 'round',
+ 'SQRT2'
+ ),
+ 22 => array (
+ 'activityLevel',
+ 'muted',
+ 'names',
+ 'onActivity',
+ 'onStatus',
+ 'setRate',
+ 'setGain',
+ 'gain',
+ 'rate',
+ 'setSilenceLevel',
+ 'setUseEchoSuppression',
+ 'silenceLevel',
+ 'silenceTimeOut',
+ 'useEchoSuppression'
+ ),
+ 23 => array (
+ 'hide',
+ 'onMouseDown',
+ 'onMouseMove',
+ 'onMouseUp',
+ 'onMouseWeel',
+ 'show'
+ ),
+ 24 => array (
+ '_alpha',
+ 'attachAudio',
+ 'attachMovie',
+ 'beginFill',
+ 'beginGradientFill',
+ 'clear',
+ 'createEmptyMovieClip',
+ 'createTextField',
+ '_current',
+ 'curveTo',
+ '_dropTarget',
+ 'duplicateMovieClip',
+ 'endFill',
+ 'focusEnabled',
+ 'enabled',
+ '_focusrec',
+ '_framesLoaded',
+ 'getBounds',
+ 'getBytesLoaded',
+ 'getBytesTotal',
+ 'getDepth',
+ 'getInstanceAtDepth',
+ 'getNextHighestDepth',
+ 'getSWFVersion',
+ 'getTextSnapshot',
+ 'getURL',
+ 'globalToLocal',
+ 'gotoAndPlay',
+ 'gotoAndStop',
+ '_height',
+ 'hitArea',
+ 'hitTest',
+ 'lineStyle',
+ 'lineTo',
+ 'localToGlobal',
+ '_lockroot',
+ 'menu',
+ 'onUnload',
+ '_parent',
+ 'play',
+ 'prevFrame',
+ '_quality',
+ 'removeMovieClip',
+ '_rotation',
+ 'setMask',
+ '_soundbuftime',
+ 'startDrag',
+ 'stopDrag',
+ 'stop',
+ 'swapDepths',
+ 'tabChildren',
+ '_target',
+ '_totalFrames',
+ 'trackAsMenu',
+ 'unloadMovie',
+ 'useHandCursor',
+ '_visible',
+ '_width',
+ '_xmouse',
+ '_xscale',
+ '_x',
+ '_ymouse',
+ '_yscale',
+ '_y'
+ ),
+ 25 => array (
+ 'getProgress',
+ 'loadClip',
+ 'onLoadComplete',
+ 'onLoadError',
+ 'onLoadInit',
+ 'onLoadProgress',
+ 'onLoadStart'
+ ),
+ 26 => array (
+ 'bufferLength',
+ 'currentFps',
+ 'seek',
+ 'setBufferTime',
+ 'bufferTime',
+ 'time',
+ 'pause'
+ ),
+ 27 => array (
+ 'MAX_VALUE',
+ 'MIN_VALUE',
+ 'NEGATIVE_INFINITY',
+ 'POSITIVE_INFINITY'
+ ),
+ 28 => array (
+ 'addProperty',
+ 'constructor',
+ '__proto__',
+ 'registerClass',
+ '__resolve',
+ 'unwatch',
+ 'watch',
+ 'onUpDate'
+ ),
+ 29 => array (
+ 'addPage'
+ ),
+ 30 => array (
+ 'getBeginIndex',
+ 'getCaretIndex',
+ 'getEndIndex',
+ 'setSelection'
+ ),
+ 31 => array (
+ 'flush',
+ 'getLocal',
+ 'getSize'
+ ),
+ 32 => array (
+ 'attachSound',
+ 'duration',
+ 'getPan',
+ 'getVolume',
+ 'onID3',
+ 'loadSound',
+ 'id3',
+ 'onSoundComplete',
+ 'position',
+ 'setPan',
+ 'setVolume'
+ ),
+ 33 => array (
+ 'getBeginIndex',
+ 'getCaretIndex',
+ 'getEndIndex',
+ 'setSelection'
+ ),
+ 34 => array (
+ 'getEndIndex',
+ ),
+ 35 => array (
+ 'align',
+ 'height',
+ 'width',
+ 'onResize',
+ 'scaleMode',
+ 'showMenu'
+ ),
+ 36 => array (
+ 'charAt',
+ 'charCodeAt',
+ 'concat',
+ 'fromCharCode',
+ 'indexOf',
+ 'lastIndexOf',
+ 'substr',
+ 'substring',
+ 'toLowerCase',
+ 'toUpperCase'
+ ),
+ 37 => array (
+ 'avHardwareDisable',
+ 'hasAccessibility',
+ 'hasAudioEncoder',
+ 'hasAudio',
+ 'hasEmbeddedVideo',
+ 'hasMP3',
+ 'hasPrinting',
+ 'hasScreenBroadcast',
+ 'hasScreenPlayback',
+ 'hasStreamingAudio',
+ 'hasStreamingVideo',
+ 'hasVideoEncoder',
+ 'isDebugger',
+ 'language',
+ 'localFileReadDisable',
+ 'manufacturer',
+ 'os',
+ 'pixelAspectRatio',
+ 'playerType',
+ 'screenColor',
+ 'screenDPI',
+ 'screenResolutionX',
+ 'screenResolutionY',
+ 'serverString',
+ 'version'
+ ),
+ 38 => array (
+ 'allowDomain',
+ 'allowInsecureDomain',
+ 'loadPolicyFile'
+ ),
+ 39 => array (
+ 'exactSettings',
+ 'setClipboard',
+ 'showSettings',
+ 'useCodepage'
+ ),
+ 40 => array (
+ 'getStyle',
+ 'getStyleNames',
+ 'parseCSS',
+ 'setStyle',
+ 'transform'
+ ),
+ 41 => array (
+ 'autoSize',
+ 'background',
+ 'backgroundColor',
+ 'border',
+ 'borderColor',
+ 'bottomScroll',
+ 'condenseWhite',
+ 'embedFonts',
+ 'getFontList',
+ 'getNewTextFormat',
+ 'getTextFormat',
+ 'hscroll',
+ 'htmlText',
+ 'html',
+ 'maxChars',
+ 'maxhscroll',
+ 'maxscroll',
+ 'mouseWheelEnabled',
+ 'multiline',
+ 'onScroller',
+ 'password',
+ 'removeTextField',
+ 'replaceSel',
+ 'replaceText',
+ 'restrict',
+ 'scroll',
+ 'selectable',
+ 'setNewTextFormat',
+ 'setTextFormat',
+ 'styleSheet',
+ 'tabEnabled',
+ 'tabIndex',
+ 'textColor',
+ 'textHeight',
+ 'textWidth',
+ 'text',
+ 'type',
+ '_url',
+ 'variable',
+ 'wordWrap'
+ ),
+ 42 => array (
+ 'blockIndent',
+ 'bold',
+ 'bullet',
+ 'font',
+ 'getTextExtent',
+ 'indent',
+ 'italic',
+ 'leading',
+ 'leftMargin',
+ 'rightMargin',
+ 'size',
+ 'tabStops',
+ 'underline'
+ ),
+ 43 => array (
+ 'findText',
+ 'getCount',
+ 'getSelected',
+ 'getSelectedText',
+ 'getText',
+ 'hitTestTextNearPos',
+ 'setSelectColor',
+ 'setSelected'
+ ),
+ 44 => array (
+ 'begin',
+ 'change',
+ 'continueTo',
+ 'fforward',
+ 'finish',
+ 'func',
+ 'FPS',
+ 'getPosition',
+ 'isPlaying',
+ 'looping',
+ 'obj',
+ 'onMotionChanged',
+ 'onMotionFinished',
+ 'onMotionLooped',
+ 'onMotionStarted',
+ 'onMotionResumed',
+ 'onMotionStopped',
+ 'prop',
+ 'rewind',
+ 'resume',
+ 'setPosition',
+ 'time',
+ 'userSeconds',
+ 'yoyo'
+ ),
+ 45 => array (
+ 'attachVideo',
+ 'deblocking',
+ 'smoothing'
+ ),
+ 46 => array (
+ 'addRequestHeader',
+ 'appendChild',
+ 'attributes',
+ 'childNodes',
+ 'cloneNode',
+ 'contentType',
+ 'createElement',
+ 'createTextNode',
+ 'docTypeDecl',
+ 'firstChild',
+ 'hasChildNodes',
+ 'ignoreWhite',
+ 'insertBefore',
+ 'lastChild',
+ 'nextSibling',
+ 'nodeName',
+ 'nodeType',
+ 'nodeValue',
+ 'parentNode',
+ 'parseXML',
+ 'previousSibling',
+ 'removeNode',
+ 'xmlDecl'
+ ),
+ 47 => array (
+ 'onClose',
+ 'onXML'
+ ),
+ 48 => array (
+ 'add',
+ 'and',
+ '_highquality',
+ 'chr',
+ 'eq',
+ 'ge',
+ 'ifFrameLoaded',
+ 'int',
+ 'le',
+ 'it',
+ 'mbchr',
+ 'mblength',
+ 'mbord',
+ 'ne',
+ 'not',
+ 'or',
+ 'ord',
+ 'tellTarget',
+ 'toggleHighQuality'
+ ),
+ 49 => array (
+ 'ASSetPropFlags',
+ 'ASnative',
+ 'ASconstructor',
+ 'AsSetupError',
+ 'FWEndCommand',
+ 'FWJavascript',
+ 'MMEndCommand',
+ 'MMSave',
+ 'XMLUI'
+ ),
+ 50 => array (
+ 'System.capabilities'
+ ),
+ 51 => array (
+ 'System.security'
+ ),
+ 52 => array (
+ 'TextField.StyleSheet'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>','='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true,
+ 10 => true,
+ 11 => true,
+ 12 => true,
+ 13 => true,
+ 14 => true,
+ 15 => true,
+ 16 => true,
+ 17 => true,
+ 18 => true,
+ 19 => true,
+ 20 => true,
+ 21 => true,
+ 22 => true,
+ 23 => true,
+ 24 => true,
+ 25 => true,
+ 26 => true,
+ 27 => true,
+ 28 => true,
+ 29 => true,
+ 30 => true,
+ 31 => true,
+ 32 => true,
+ 33 => true,
+ 34 => true,
+ 35 => true,
+ 36 => true,
+ 37 => true,
+ 38 => true,
+ 39 => true,
+ 40 => true,
+ 41 => true,
+ 42 => true,
+ 43 => true,
+ 44 => true,
+ 45 => true,
+ 46 => true,
+ 47 => true,
+ 48 => true,
+ 49 => true,
+ 50 => true,
+ 51 => true,
+ 52 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #006600;',
+ 3 => 'color: #000080;',
+ 4 => 'color: #006600;',
+ 5 => 'color: #006600;',
+ 6 => 'color: #006600;',
+ 7 => 'color: #006600;',
+ 8 => 'color: #006600;',
+ 9 => 'color: #006600;',
+ 10 => 'color: #006600;',
+ 11 => 'color: #006600;',
+ 12 => 'color: #006600;',
+ 13 => 'color: #006600;',
+ 14 => 'color: #006600;',
+ 15 => 'color: #006600;',
+ 16 => 'color: #006600;',
+ 17 => 'color: #006600;',
+ 18 => 'color: #006600;',
+ 19 => 'color: #006600;',
+ 20 => 'color: #006600;',
+ 21 => 'color: #006600;',
+ 22 => 'color: #006600;',
+ 23 => 'color: #006600;',
+ 24 => 'color: #006600;',
+ 25 => 'color: #006600;',
+ 26 => 'color: #006600;',
+ 27 => 'color: #006600;',
+ 28 => 'color: #006600;',
+ 29 => 'color: #006600;',
+ 30 => 'color: #006600;',
+ 31 => 'color: #006600;',
+ 32 => 'color: #006600;',
+ 33 => 'color: #006600;',
+ 34 => 'color: #006600;',
+ 35 => 'color: #006600;',
+ 36 => 'color: #006600;',
+ 37 => 'color: #006600;',
+ 38 => 'color: #006600;',
+ 39 => 'color: #006600;',
+ 40 => 'color: #006600;',
+ 41 => 'color: #006600;',
+ 42 => 'color: #006600;',
+ 43 => 'color: #006600;',
+ 44 => 'color: #006600;',
+ 45 => 'color: #006600;',
+ 46 => 'color: #006600;',
+ 47 => 'color: #006600;',
+ 48 => 'color: #CC0000;',
+ 49 => 'color: #5700d1;',
+ 50 => 'color: #006600;',
+ 51 => 'color: #006600;',
+ 52 => 'color: #CC0000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #ff8000; font-style: italic;',
+ 2 => 'color: #ff8000; font-style: italic;',
+ 'MULTI' => 'color: #ff8000; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #333333;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #333333; background-color: #eeeeee;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #c50000;'
+ ),
+
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
+ 2 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
+ 3 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
+ 4 => 'http://wiki.media-box.net/documentation/flash/accessibility/{FNAME}',
+ 5 => 'http://wiki.media-box.net/documentation/flash/arguments/{FNAME}',
+ 6 => 'http://wiki.media-box.net/documentation/flash/array/{FNAME}',
+ 7 => 'http://wiki.media-box.net/documentation/flash/boolean/{FNAME}',
+ 8 => 'http://wiki.media-box.net/documentation/flash/button/{FNAME}',
+ 9 => 'http://wiki.media-box.net/documentation/flash/camera/{FNAME}',
+ 10 => 'http://wiki.media-box.net/documentation/flash/color/{FNAME}',
+ 11 => 'http://wiki.media-box.net/documentation/flash/contextmenuitem/{FNAME}',
+ 12 => 'http://wiki.media-box.net/documentation/flash/contextmenu/{FNAME}',
+ 13 => 'http://wiki.media-box.net/documentation/flash/cookie/{FNAME}',
+ 14 => 'http://wiki.media-box.net/documentation/flash/customactions/{FNAME}',
+ 15 => 'http://wiki.media-box.net/documentation/flash/date/{FNAME}',
+ 16 => 'http://wiki.media-box.net/documentation/flash/error/{FNAME}',
+ 17 => 'http://wiki.media-box.net/documentation/flash/function/{FNAME}',
+ 18 => 'http://wiki.media-box.net/documentation/flash/key/{FNAME}',
+ 19 => 'http://wiki.media-box.net/documentation/flash/loadvars/{FNAME}',
+ 20 => 'http://wiki.media-box.net/documentation/flash/localconnection/{FNAME}',
+ 21 => 'http://wiki.media-box.net/documentation/flash/math/{FNAME}',
+ 22 => 'http://wiki.media-box.net/documentation/flash/microphone/{FNAME}',
+ 23 => 'http://wiki.media-box.net/documentation/flash/mouse/{FNAME}',
+ 24 => 'http://wiki.media-box.net/documentation/flash/movieclip/{FNAME}',
+ 25 => 'http://wiki.media-box.net/documentation/flash/moviecliploader/{FNAME}',
+ 26 => 'http://wiki.media-box.net/documentation/flash/netstream/{FNAME}',
+ 27 => 'http://wiki.media-box.net/documentation/flash/number/{FNAME}',
+ 28 => 'http://wiki.media-box.net/documentation/flash/object/{FNAME}',
+ 29 => 'http://wiki.media-box.net/documentation/flash/printJob/{FNAME}',
+ 30 => 'http://wiki.media-box.net/documentation/flash/selection/{FNAME}',
+ 31 => 'http://wiki.media-box.net/documentation/flash/sharedobject/{FNAME}',
+ 32 => 'http://wiki.media-box.net/documentation/flash/sound/{FNAME}',
+ 33 => 'http://wiki.media-box.net/documentation/flash/selection/{FNAME}',
+ 34 => 'http://wiki.media-box.net/documentation/flash/sharedobject/{FNAME}',
+ 35 => 'http://wiki.media-box.net/documentation/flash/stage/{FNAME}',
+ 36 => 'http://wiki.media-box.net/documentation/flash/string/{FNAME}',
+ 37 => 'http://wiki.media-box.net/documentation/flash/system/capabilities/{FNAME}',
+ 38 => 'http://wiki.media-box.net/documentation/flash/system/security/{FNAME}',
+ 39 => 'http://wiki.media-box.net/documentation/flash/system/{FNAME}',
+ 40 => 'http://wiki.media-box.net/documentation/flash/textfield/stylesheet/{FNAME}',
+ 41 => 'http://wiki.media-box.net/documentation/flash/textfield/{FNAME}',
+ 42 => 'http://wiki.media-box.net/documentation/flash/textformat/{FNAME}',
+ 43 => 'http://wiki.media-box.net/documentation/flash/textsnapshot/{FNAME}',
+ 44 => 'http://wiki.media-box.net/documentation/flash/tween/{FNAME}',
+ 45 => 'http://wiki.media-box.net/documentation/flash/video/{FNAME}',
+ 46 => 'http://wiki.media-box.net/documentation/flash/xml/{FNAME}',
+ 47 => 'http://wiki.media-box.net/documentation/flash/xmlsocket/{FNAME}',
+ 48 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
+ 49 => 'http://wiki.media-box.net/documentation/flash/{FNAME}',
+ 50 => 'http://wiki.media-box.net/documentation/flash/system/capabilities',
+ 51 => 'http://wiki.media-box.net/documentation/flash/system/security',
+ 52 => 'http://wiki.media-box.net/documentation/flash/textfield/stylesheet'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php
new file mode 100644
index 000000000..016dc8e90
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php
@@ -0,0 +1,197 @@
+<?php
+/*************************************************************************************
+ * actionscript.php
+ * ----------------
+ * Author: Steffen Krause (Steffen.krause@muse.de)
+ * Copyright: (c) 2004 Steffen Krause, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/20
+ *
+ * Actionscript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ActionScript',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '#include', 'for', 'foreach', 'each', 'if', 'elseif', 'else', 'while', 'do', 'dowhile',
+ 'endwhile', 'endif', 'switch', 'case', 'endswitch', 'return', 'break', 'continue', 'in'
+ ),
+ 2 => array(
+ 'null', 'false', 'true', 'var',
+ 'default', 'function', 'class',
+ 'new', '_global'
+ ),
+ 3 => array(
+ '#endinitclip', '#initclip', '__proto__', '_accProps', '_alpha', '_currentframe',
+ '_droptarget', '_focusrect', '_framesloaded', '_height', '_highquality', '_lockroot',
+ '_name', '_parent', '_quality', '_root', '_rotation', '_soundbuftime', '_target', '_totalframes',
+ '_url', '_visible', '_width', '_x', '_xmouse', '_xscale', '_y', '_ymouse', '_yscale', 'abs',
+ 'Accessibility', 'acos', 'activityLevel', 'add', 'addListener', 'addPage', 'addProperty',
+ 'addRequestHeader', 'align', 'allowDomain', 'allowInsecureDomain', 'and', 'appendChild',
+ 'apply', 'Arguments', 'Array', 'asfunction', 'asin', 'atan', 'atan2', 'attachAudio', 'attachMovie',
+ 'attachSound', 'attachVideo', 'attributes', 'autosize', 'avHardwareDisable', 'background',
+ 'backgroundColor', 'BACKSPACE', 'bandwidth', 'beginFill', 'beginGradientFill', 'blockIndent',
+ 'bold', 'Boolean', 'border', 'borderColor', 'bottomScroll', 'bufferLength', 'bufferTime',
+ 'builtInItems', 'bullet', 'Button', 'bytesLoaded', 'bytesTotal', 'call', 'callee', 'caller',
+ 'Camera', 'capabilities', 'CAPSLOCK', 'caption', 'catch', 'ceil', 'charAt', 'charCodeAt',
+ 'childNodes', 'chr', 'clear', 'clearInterval', 'cloneNode', 'close', 'Color', 'concat',
+ 'connect', 'condenseWhite', 'constructor', 'contentType', 'ContextMenu', 'ContextMenuItem',
+ 'CONTROL', 'copy', 'cos', 'createElement', 'createEmptyMovieClip', 'createTextField',
+ 'createTextNode', 'currentFps', 'curveTo', 'CustomActions', 'customItems', 'data', 'Date',
+ 'deblocking', 'delete', 'DELETEKEY', 'docTypeDecl', 'domain', 'DOWN',
+ 'duplicateMovieClip', 'duration', 'dynamic', 'E', 'embedFonts', 'enabled',
+ 'END', 'endFill', 'ENTER', 'eq', 'Error', 'ESCAPE(Konstante)', 'escape(Funktion)', 'eval',
+ 'exactSettings', 'exp', 'extends', 'finally', 'findText', 'firstChild', 'floor',
+ 'flush', 'focusEnabled', 'font', 'fps', 'fromCharCode', 'fscommand',
+ 'gain', 'ge', 'get', 'getAscii', 'getBeginIndex', 'getBounds', 'getBytesLoaded', 'getBytesTotal',
+ 'getCaretIndex', 'getCode', 'getCount', 'getDate', 'getDay', 'getDepth', 'getEndIndex', 'getFocus',
+ 'getFontList', 'getFullYear', 'getHours', 'getInstanceAtDepth', 'getLocal', 'getMilliseconds',
+ 'getMinutes', 'getMonth', 'getNewTextFormat', 'getNextHighestDepth', 'getPan', 'getProgress',
+ 'getProperty', 'getRGB', 'getSeconds', 'getSelected', 'getSelectedText', 'getSize', 'getStyle',
+ 'getStyleNames', 'getSWFVersion', 'getText', 'getTextExtent', 'getTextFormat', 'getTextSnapshot',
+ 'getTime', 'getTimer', 'getTimezoneOffset', 'getTransform', 'getURL', 'getUTCDate', 'getUTCDay',
+ 'getUTCFullYear', 'getUTCHours', 'getUTCMilliseconds', 'getUTCMinutes', 'getUTCMonth', 'getUTCSeconds',
+ 'getVersion', 'getVolume', 'getYear', 'globalToLocal', 'goto', 'gotoAndPlay', 'gotoAndStop',
+ 'hasAccessibility', 'hasAudio', 'hasAudioEncoder', 'hasChildNodes', 'hasEmbeddedVideo', 'hasMP3',
+ 'hasPrinting', 'hasScreenBroadcast', 'hasScreenPlayback', 'hasStreamingAudio', 'hasStreamingVideo',
+ 'hasVideoEncoder', 'height', 'hide', 'hideBuiltInItems', 'hitArea', 'hitTest', 'hitTestTextNearPos',
+ 'HOME', 'hscroll', 'html', 'htmlText', 'ID3', 'ifFrameLoaded', 'ignoreWhite', 'implements',
+ 'import', 'indent', 'index', 'indexOf', 'Infinity', '-Infinity', 'INSERT', 'insertBefore', 'install',
+ 'instanceof', 'int', 'interface', 'isActive', 'isDebugger', 'isDown', 'isFinite', 'isNaN', 'isToggled',
+ 'italic', 'join', 'Key', 'language', 'lastChild', 'lastIndexOf', 'le', 'leading', 'LEFT', 'leftMargin',
+ 'length', 'level', 'lineStyle', 'lineTo', 'list', 'LN10', 'LN2', 'load', 'loadClip', 'loaded', 'loadMovie',
+ 'loadMovieNum', 'loadSound', 'loadVariables', 'loadVariablesNum', 'LoadVars', 'LocalConnection',
+ 'localFileReadDisable', 'localToGlobal', 'log', 'LOG10E', 'LOG2E', 'manufacturer', 'Math', 'max',
+ 'MAX_VALUE', 'maxChars', 'maxhscroll', 'maxscroll', 'mbchr', 'mblength', 'mbord', 'mbsubstring', 'menu',
+ 'message', 'Microphone', 'min', 'MIN_VALUE', 'MMExecute', 'motionLevel', 'motionTimeOut', 'Mouse',
+ 'mouseWheelEnabled', 'moveTo', 'Movieclip', 'MovieClipLoader', 'multiline', 'muted', 'name', 'names', 'NaN',
+ 'ne', 'NEGATIVE_INFINITY', 'NetConnection', 'NetStream', 'newline', 'nextFrame',
+ 'nextScene', 'nextSibling', 'nodeName', 'nodeType', 'nodeValue', 'not', 'Number', 'Object',
+ 'on', 'onActivity', 'onChanged', 'onClipEvent', 'onClose', 'onConnect', 'onData', 'onDragOut',
+ 'onDragOver', 'onEnterFrame', 'onID3', 'onKeyDown', 'onKeyUp', 'onKillFocus', 'onLoad', 'onLoadComplete',
+ 'onLoadError', 'onLoadInit', 'onLoadProgress', 'onLoadStart', 'onMouseDown', 'onMouseMove', 'onMouseUp',
+ 'onMouseWheel', 'onPress', 'onRelease', 'onReleaseOutside', 'onResize', 'onRollOut', 'onRollOver',
+ 'onScroller', 'onSelect', 'onSetFocus', 'onSoundComplete', 'onStatus', 'onUnload', 'onUpdate', 'onXML',
+ 'or(logischesOR)', 'ord', 'os', 'parentNode', 'parseCSS', 'parseFloat', 'parseInt', 'parseXML', 'password',
+ 'pause', 'PGDN', 'PGUP', 'PI', 'pixelAspectRatio', 'play', 'playerType', 'pop', 'position',
+ 'POSITIVE_INFINITY', 'pow', 'prevFrame', 'previousSibling', 'prevScene', 'print', 'printAsBitmap',
+ 'printAsBitmapNum', 'PrintJob', 'printNum', 'private', 'prototype', 'public', 'push', 'quality',
+ 'random', 'rate', 'registerClass', 'removeListener', 'removeMovieClip', 'removeNode', 'removeTextField',
+ 'replaceSel', 'replaceText', 'resolutionX', 'resolutionY', 'restrict', 'reverse', 'RIGHT',
+ 'rightMargin', 'round', 'scaleMode', 'screenColor', 'screenDPI', 'screenResolutionX', 'screenResolutionY',
+ 'scroll', 'seek', 'selectable', 'Selection', 'send', 'sendAndLoad', 'separatorBefore', 'serverString',
+ 'set', 'setvariable', 'setBufferTime', 'setClipboard', 'setDate', 'setFocus', 'setFullYear', 'setGain',
+ 'setHours', 'setInterval', 'setMask', 'setMilliseconds', 'setMinutes', 'setMode', 'setMonth',
+ 'setMotionLevel', 'setNewTextFormat', 'setPan', 'setProperty', 'setQuality', 'setRate', 'setRGB',
+ 'setSeconds', 'setSelectColor', 'setSelected', 'setSelection', 'setSilenceLevel', 'setStyle',
+ 'setTextFormat', 'setTime', 'setTransform', 'setUseEchoSuppression', 'setUTCDate', 'setUTCFullYear',
+ 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', 'setVolume',
+ 'setYear', 'SharedObject', 'SHIFT(Konstante)', 'shift(Methode)', 'show', 'showMenu', 'showSettings',
+ 'silenceLevel', 'silenceTimeout', 'sin', 'size', 'slice', 'smoothing', 'sort', 'sortOn', 'Sound', 'SPACE',
+ 'splice', 'split', 'sqrt', 'SQRT1_2', 'SQRT2', 'Stage', 'start', 'startDrag', 'static', 'status', 'stop',
+ 'stopAllSounds', 'stopDrag', 'String', 'StyleSheet(Klasse)', 'styleSheet(Eigenschaft)', 'substr',
+ 'substring', 'super', 'swapDepths', 'System', 'TAB', 'tabChildren', 'tabEnabled', 'tabIndex',
+ 'tabStops', 'tan', 'target', 'targetPath', 'tellTarget', 'text', 'textColor', 'TextField', 'TextFormat',
+ 'textHeight', 'TextSnapshot', 'textWidth', 'this', 'throw', 'time', 'toggleHighQuality', 'toLowerCase',
+ 'toString', 'toUpperCase', 'trace', 'trackAsMenu', 'try', 'type', 'typeof', 'undefined',
+ 'underline', 'unescape', 'uninstall', 'unloadClip', 'unloadMovie', 'unLoadMovieNum', 'unshift', 'unwatch',
+ 'UP', 'updateAfterEvent', 'updateProperties', 'url', 'useCodePage', 'useEchoSuppression', 'useHandCursor',
+ 'UTC', 'valueOf', 'variable', 'version', 'Video', 'visible', 'void', 'watch', 'width',
+ 'with', 'wordwrap', 'XML', 'xmlDecl', 'XMLNode', 'XMLSocket'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #0066CC;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php
new file mode 100644
index 000000000..a54e9d4df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php
@@ -0,0 +1,473 @@
+<?php
+/*************************************************************************************
+ * actionscript3.php
+ * ----------------
+ * Author: Jordi Boggiano (j.boggiano@seld.be)
+ * Copyright: (c) 2007 Jordi Boggiano (http://www.seld.be/), Benny Baumann (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/11/26
+ *
+ * ActionScript3 language file for GeSHi.
+ *
+ * All keywords scraped from the Flex 2.0.1 Documentation
+ *
+ * The default style is based on FlexBuilder2 coloring, with the addition of class, package, method and
+ * constant names that are highlighted to help identifying problem when used on public pastebins.
+ *
+ * For styling, keywords data from 0 to 1 (accessible through .kw1, etc.) are described here :
+ *
+ * 1 : operators
+ * 2 : 'var' keyword
+ * 3 : 'function' keyword
+ * 4 : 'class' and 'package' keywords
+ * 5 : all flash.* class names plus Top Level classes, mx are excluded
+ * 6 : all flash.* package names, mx are excluded
+ * 7 : valid flash method names and properties (there is no type checks sadly, for example String().x will be highlighted as 'x' is valid, but obviously strings don't have a x property)
+ * 8 : valid flash constant names (again, no type check)
+ *
+ *
+ * CHANGES
+ * -------
+ * 2007/12/06 (1.0.7.22)
+ * - Added the 'this' keyword (oops)
+ *
+ * TODO (updated 2007/11/30)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ActionScript 3',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Regular expressions
+ 2 => "/(?<=[\\s^])(s|tr|y)\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])*\\/[msixpogcde]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])(m|q[qrwx]?)?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[msixpogc]*(?=[\\s$\\.\\,\\;\\)])/iU",
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'with', 'while', 'void', 'undefined', 'typeof', 'try', 'true',
+ 'throw', 'this', 'switch', 'super', 'set', 'return', 'public', 'protected',
+ 'private', 'null', 'new', 'is', 'internal', 'instanceof', 'in',
+ 'import', 'if', 'get', 'for', 'false', 'else', 'each', 'do',
+ 'delete', 'default', 'continue', 'catch', 'case', 'break', 'as',
+ 'extends'
+ ),
+ 2 => array(
+ 'var'
+ ),
+ 3 => array(
+ 'function'
+ ),
+ 4 => array(
+ 'class', 'package'
+ ),
+ 6 => array(
+ 'flash.xml', 'flash.utils', 'flash.ui', 'flash.text',
+ 'flash.system', 'flash.profiler', 'flash.printing', 'flash.net',
+ 'flash.media', 'flash.geom', 'flash.filters', 'flash.external',
+ 'flash.events', 'flash.errors', 'flash.display',
+ 'flash.accessibility'
+ ),
+ 7 => array(
+ 'zoom', 'year', 'y', 'xmlDecl', 'x', 'writeUnsignedInt',
+ 'writeUTFBytes', 'writeUTF', 'writeShort', 'writeObject',
+ 'writeMultiByte', 'writeInt', 'writeFloat', 'writeExternal',
+ 'writeDynamicProperty', 'writeDynamicProperties', 'writeDouble',
+ 'writeBytes', 'writeByte', 'writeBoolean', 'wordWrap',
+ 'willTrigger', 'width', 'volume', 'visible', 'videoWidth',
+ 'videoHeight', 'version', 'valueOf', 'value', 'usingTLS',
+ 'useRichTextClipboard', 'useHandCursor', 'useEchoSuppression',
+ 'useCodePage', 'url', 'uri', 'uploadCompleteData', 'upload',
+ 'updateProperties', 'updateAfterEvent', 'upState', 'unshift',
+ 'unlock', 'unload', 'union', 'unescapeMultiByte', 'unescape',
+ 'underline', 'uncompress', 'type', 'ty', 'tx', 'transparent',
+ 'translate', 'transformPoint', 'transform', 'trackAsMenu', 'track',
+ 'trace', 'totalMemory', 'totalFrames', 'topLeft', 'top',
+ 'togglePause', 'toXMLString', 'toUpperCase', 'toUTCString',
+ 'toTimeString', 'toString', 'toPrecision', 'toLowerCase',
+ 'toLocaleUpperCase', 'toLocaleTimeString', 'toLocaleString',
+ 'toLocaleLowerCase', 'toLocaleDateString', 'toFixed',
+ 'toExponential', 'toDateString', 'timezoneOffset', 'timerComplete',
+ 'timer', 'time', 'threshold', 'thickness', 'textWidth',
+ 'textSnapshot', 'textInput', 'textHeight', 'textColor', 'text',
+ 'test', 'target', 'tan', 'tabStops', 'tabIndexChange', 'tabIndex',
+ 'tabEnabledChange', 'tabEnabled', 'tabChildrenChange',
+ 'tabChildren', 'sync', 'swfVersion', 'swapChildrenAt',
+ 'swapChildren', 'subtract', 'substring', 'substr', 'styleSheet',
+ 'styleNames', 'strength', 'stopPropagation',
+ 'stopImmediatePropagation', 'stopDrag', 'stopAll', 'stop', 'status',
+ 'startDrag', 'start', 'stageY', 'stageX', 'stageWidth',
+ 'stageHeight', 'stageFocusRect', 'stage', 'sqrt', 'split', 'splice',
+ 'source', 'soundTransform', 'soundComplete', 'sortOn', 'sort',
+ 'songName', 'some', 'socketData', 'smoothing', 'slice', 'size',
+ 'sin', 'silent', 'silenceTimeout', 'silenceLevel', 'showSettings',
+ 'showRedrawRegions', 'showDefaultContextMenu', 'show', 'shortcut',
+ 'shiftKey', 'shift', 'sharpness', 'sharedEvents', 'shadowColor',
+ 'shadowAlpha', 'settings', 'setUseEchoSuppression', 'setUTCSeconds',
+ 'setUTCMonth', 'setUTCMinutes', 'setUTCMilliseconds', 'setUTCHours',
+ 'setUTCFullYear', 'setUTCDate', 'setTimeout', 'setTime',
+ 'setTextFormat', 'setStyle', 'setSilenceLevel', 'setSettings',
+ 'setSelection', 'setSelected', 'setSelectColor', 'setSeconds',
+ 'setQuality', 'setPropertyIsEnumerable', 'setProperty', 'setPixels',
+ 'setPixel32', 'setPixel', 'setNamespace', 'setName',
+ 'setMotionLevel', 'setMonth', 'setMode', 'setMinutes',
+ 'setMilliseconds', 'setLoopback', 'setLoopBack', 'setLocalName',
+ 'setKeyFrameInterval', 'setInterval', 'setHours', 'setFullYear',
+ 'setEmpty', 'setDirty', 'setDate', 'setCompositionString',
+ 'setClipboard', 'setChildren', 'setChildIndex',
+ 'setAdvancedAntiAliasingTable', 'serverString', 'separatorBefore',
+ 'sendToURL', 'send', 'selectionEndIndex', 'selectionBeginIndex',
+ 'selectable', 'select', 'seek', 'securityError', 'securityDomain',
+ 'secondsUTC', 'seconds', 'search', 'scrollV', 'scrollRect',
+ 'scrollH', 'scroll', 'screenResolutionY', 'screenResolutionX',
+ 'screenDPI', 'screenColor', 'scenes', 'scaleY', 'scaleX',
+ 'scaleMode', 'scale9Grid', 'scale', 'save', 'sandboxType',
+ 'sameDomain', 'running', 'round', 'rotation', 'rotate', 'root',
+ 'rollOver', 'rollOut', 'rightToRight', 'rightToLeft', 'rightPeak',
+ 'rightMargin', 'right', 'rewind', 'reverse', 'resume', 'restrict',
+ 'resize', 'reset', 'requestHeaders', 'replaceText',
+ 'replaceSelectedText', 'replace', 'repeatCount', 'render',
+ 'removedFromStage', 'removed', 'removeNode', 'removeNamespace',
+ 'removeEventListener', 'removeChildAt', 'removeChild',
+ 'relatedObject', 'registerFont', 'registerClassAlias', 'redOffset',
+ 'redMultiplier', 'rect', 'receiveVideo', 'receiveAudio',
+ 'readUnsignedShort', 'readUnsignedInt', 'readUnsignedByte',
+ 'readUTFBytes', 'readUTF', 'readShort', 'readObject',
+ 'readMultiByte', 'readInt', 'readFloat', 'readExternal',
+ 'readDouble', 'readBytes', 'readByte', 'readBoolean', 'ratios',
+ 'rate', 'random', 'quality', 'push', 'publish', 'proxyType',
+ 'prototype', 'propertyIsEnumerable', 'progress',
+ 'processingInstructions', 'printAsBitmap', 'print',
+ 'previousSibling', 'preventDefault', 'prevScene', 'prevFrame',
+ 'prettyPrinting', 'prettyIndent', 'preserveAlpha', 'prependChild',
+ 'prefix', 'pow', 'position', 'pop', 'polar', 'playerType', 'play',
+ 'pixelSnapping', 'pixelDissolve', 'pixelBounds', 'pixelAspectRatio',
+ 'perlinNoise', 'pause', 'parseXML', 'parseInt', 'parseFloat',
+ 'parseCSS', 'parse', 'parentNode', 'parentDomain',
+ 'parentAllowsChild', 'parent', 'parameters', 'paperWidth',
+ 'paperHeight', 'pan', 'paletteMap', 'pageWidth', 'pageHeight',
+ 'overState', 'outsideCutoff', 'os', 'orientation', 'open',
+ 'opaqueBackground', 'onPlayStatus', 'onMetaData', 'onCuePoint',
+ 'offsetPoint', 'offset', 'objectID', 'objectEncoding', 'numLock',
+ 'numLines', 'numFrames', 'numChildren', 'normalize', 'noise',
+ 'nodeValue', 'nodeType', 'nodeName', 'nodeKind', 'noAutoLabeling',
+ 'nextValue', 'nextSibling', 'nextScene', 'nextNameIndex',
+ 'nextName', 'nextFrame', 'netStatus', 'navigateToURL',
+ 'namespaceURI', 'namespaceDeclarations', 'namespace', 'names',
+ 'name', 'muted', 'multiline', 'moveTo', 'mouseY', 'mouseX',
+ 'mouseWheelEnabled', 'mouseWheel', 'mouseUp', 'mouseTarget',
+ 'mouseOver', 'mouseOut', 'mouseMove', 'mouseLeave',
+ 'mouseFocusChange', 'mouseEnabled', 'mouseDown', 'mouseChildren',
+ 'motionTimeout', 'motionLevel', 'monthUTC', 'month',
+ 'modificationDate', 'mode', 'minutesUTC', 'minutes', 'min',
+ 'millisecondsUTC', 'milliseconds', 'method', 'message', 'merge',
+ 'menuSelect', 'menuItemSelect', 'maxScrollV', 'maxScrollH',
+ 'maxLevel', 'maxChars', 'max', 'matrixY', 'matrixX', 'matrix',
+ 'match', 'mask', 'mapPoint', 'mapBitmap', 'map', 'manufacturer',
+ 'macType', 'loopback', 'loop', 'log', 'lock', 'localeCompare',
+ 'localY', 'localX', 'localToGlobal', 'localName',
+ 'localFileReadDisable', 'loaderURL', 'loaderInfo', 'loader',
+ 'loadPolicyFile', 'loadBytes', 'load', 'liveDelay', 'link',
+ 'lineTo', 'lineStyle', 'lineGradientStyle', 'level',
+ 'letterSpacing', 'length', 'leftToRight', 'leftToLeft', 'leftPeak',
+ 'leftMargin', 'left', 'leading', 'lastIndexOf', 'lastIndex',
+ 'lastChild', 'language', 'labels', 'knockout', 'keyUp',
+ 'keyLocation', 'keyFrameInterval', 'keyFocusChange', 'keyDown',
+ 'keyCode', 'kerning', 'join', 'italic', 'isXMLName',
+ 'isPrototypeOf', 'isNaN', 'isFocusInaccessible', 'isFinite',
+ 'isEmpty', 'isDefaultPrevented', 'isDebugger', 'isBuffering',
+ 'isAttribute', 'isAccessible', 'ioError', 'invert', 'invalidate',
+ 'intersects', 'intersection', 'interpolate', 'insideCutoff',
+ 'insertChildBefore', 'insertChildAfter', 'insertBefore', 'inner',
+ 'init', 'info', 'inflatePoint', 'inflate', 'indexOf', 'index',
+ 'indent', 'inScopeNamespaces', 'imeComposition', 'ime',
+ 'ignoreWhitespace', 'ignoreWhite', 'ignoreProcessingInstructions',
+ 'ignoreComments', 'ignoreCase', 'identity', 'idMap', 'id3',
+ 'httpStatus', 'htmlText', 'hoursUTC', 'hours', 'hitTestTextNearPos',
+ 'hitTestState', 'hitTestPoint', 'hitTestObject', 'hitTest',
+ 'hitArea', 'highlightColor', 'highlightAlpha', 'hideObject',
+ 'hideBuiltInItems', 'hide', 'height', 'hasVideoEncoder', 'hasTLS',
+ 'hasStreamingVideo', 'hasStreamingAudio', 'hasSimpleContent',
+ 'hasScreenPlayback', 'hasScreenBroadcast', 'hasProperty',
+ 'hasPrinting', 'hasOwnProperty', 'hasMP3', 'hasIME', 'hasGlyphs',
+ 'hasEventListener', 'hasEmbeddedVideo', 'hasDefinition',
+ 'hasComplexContent', 'hasChildNodes', 'hasAudioEncoder', 'hasAudio',
+ 'hasAccessibility', 'gridFitType', 'greenOffset', 'greenMultiplier',
+ 'graphics', 'gotoAndStop', 'gotoAndPlay', 'globalToLocal', 'global',
+ 'getUTCSeconds', 'getUTCMonth', 'getUTCMinutes',
+ 'getUTCMilliseconds', 'getUTCHours', 'getUTCFullYear', 'getUTCDay',
+ 'getUTCDate', 'getTimezoneOffset', 'getTimer', 'getTime',
+ 'getTextRunInfo', 'getTextFormat', 'getText', 'getStyle',
+ 'getStackTrace', 'getSelectedText', 'getSelected', 'getSeconds',
+ 'getRemote', 'getRect', 'getQualifiedSuperclassName',
+ 'getQualifiedClassName', 'getProperty', 'getPrefixForNamespace',
+ 'getPixels', 'getPixel32', 'getPixel', 'getParagraphLength',
+ 'getObjectsUnderPoint', 'getNamespaceForPrefix', 'getMonth',
+ 'getMinutes', 'getMilliseconds', 'getMicrophone', 'getLocal',
+ 'getLineText', 'getLineOffset', 'getLineMetrics', 'getLineLength',
+ 'getLineIndexOfChar', 'getLineIndexAtPoint', 'getImageReference',
+ 'getHours', 'getFullYear', 'getFirstCharInParagraph',
+ 'getDescendants', 'getDefinitionByName', 'getDefinition', 'getDay',
+ 'getDate', 'getColorBoundsRect', 'getClassByAlias', 'getChildIndex',
+ 'getChildByName', 'getChildAt', 'getCharIndexAtPoint',
+ 'getCharBoundaries', 'getCamera', 'getBounds', 'genre',
+ 'generateFilterRect', 'gain', 'fullYearUTC', 'fullYear',
+ 'fullScreen', 'fscommand', 'fromCharCode', 'framesLoaded',
+ 'frameRate', 'frame', 'fps', 'forwardAndBack', 'formatToString',
+ 'forceSimple', 'forEach', 'fontType', 'fontStyle', 'fontSize',
+ 'fontName', 'font', 'focusRect', 'focusOut', 'focusIn', 'focus',
+ 'flush', 'floor', 'floodFill', 'firstChild', 'findText', 'filters',
+ 'filter', 'fillRect', 'fileList', 'extension', 'extended', 'exp',
+ 'exec', 'exactSettings', 'every', 'eventPhase', 'escapeMultiByte',
+ 'escape', 'errorID', 'error', 'equals', 'enumerateFonts',
+ 'enterFrame', 'endian', 'endFill', 'encodeURIComponent',
+ 'encodeURI', 'enabled', 'embedFonts', 'elements',
+ 'dynamicPropertyWriter', 'dropTarget', 'drawRoundRect', 'drawRect',
+ 'drawEllipse', 'drawCircle', 'draw', 'download', 'downState',
+ 'doubleClickEnabled', 'doubleClick', 'dotall', 'domain',
+ 'docTypeDecl', 'doConversion', 'divisor', 'distance', 'dispose',
+ 'displayState', 'displayMode', 'displayAsPassword', 'dispatchEvent',
+ 'description', 'describeType', 'descent', 'descendants',
+ 'deltaTransformPoint', 'delta', 'deleteProperty', 'delay',
+ 'defaultTextFormat', 'defaultSettings', 'defaultObjectEncoding',
+ 'decodeURIComponent', 'decodeURI', 'decode', 'deblocking',
+ 'deactivate', 'dayUTC', 'day', 'dateUTC', 'date', 'dataFormat',
+ 'data', 'd', 'customItems', 'curveTo', 'currentTarget',
+ 'currentScene', 'currentLabels', 'currentLabel', 'currentFrame',
+ 'currentFPS', 'currentDomain', 'currentCount', 'ctrlKey', 'creator',
+ 'creationDate', 'createTextNode', 'createGradientBox',
+ 'createElement', 'createBox', 'cos', 'copyPixels', 'copyChannel',
+ 'copy', 'conversionMode', 'contextMenuOwner', 'contextMenu',
+ 'contentType', 'contentLoaderInfo', 'content', 'containsRect',
+ 'containsPoint', 'contains', 'constructor', 'connectedProxyType',
+ 'connected', 'connect', 'condenseWhite', 'concatenatedMatrix',
+ 'concatenatedColorTransform', 'concat', 'computeSpectrum',
+ 'compress', 'componentY', 'componentX', 'complete', 'compare',
+ 'comments', 'comment', 'colors', 'colorTransform', 'color', 'code',
+ 'close', 'cloneNode', 'clone', 'client', 'click', 'clearTimeout',
+ 'clearInterval', 'clear', 'clamp', 'children', 'childNodes',
+ 'childIndex', 'childAllowsParent', 'child', 'checkPolicyFile',
+ 'charCount', 'charCodeAt', 'charCode', 'charAt', 'changeList',
+ 'change', 'ceil', 'caretIndex', 'caption', 'capsLock', 'cancelable',
+ 'cancel', 'callee', 'callProperty', 'call', 'cacheAsBitmap', 'c',
+ 'bytesTotal', 'bytesLoaded', 'bytesAvailable', 'buttonMode',
+ 'buttonDown', 'bullet', 'builtInItems', 'bufferTime',
+ 'bufferLength', 'bubbles', 'browse', 'bottomScrollV', 'bottomRight',
+ 'bottom', 'borderColor', 'border', 'bold', 'blurY', 'blurX',
+ 'blueOffset', 'blueMultiplier', 'blockIndent', 'blendMode',
+ 'bitmapData', 'bias', 'beginGradientFill', 'beginFill',
+ 'beginBitmapFill', 'bandwidth', 'backgroundColor', 'background',
+ 'b', 'available', 'avHardwareDisable', 'autoSize', 'attributes',
+ 'attribute', 'attachNetStream', 'attachCamera', 'attachAudio',
+ 'atan2', 'atan', 'asyncError', 'asin', 'ascent', 'artist',
+ 'areSoundsInaccessible', 'areInaccessibleObjectsUnderPoint',
+ 'applyFilter', 'apply', 'applicationDomain', 'appendText',
+ 'appendChild', 'antiAliasType', 'angle', 'alwaysShowSelection',
+ 'altKey', 'alphas', 'alphaOffset', 'alphaMultiplier', 'alpha',
+ 'allowInsecureDomain', 'allowDomain', 'align', 'album',
+ 'addedToStage', 'added', 'addPage', 'addNamespace', 'addHeader',
+ 'addEventListener', 'addChildAt', 'addChild', 'addCallback', 'add',
+ 'activityLevel', 'activity', 'active', 'activating', 'activate',
+ 'actionScriptVersion', 'acos', 'accessibilityProperties', 'abs'
+ ),
+ 8 => array(
+ 'WRAP', 'VERTICAL', 'VARIABLES',
+ 'UTC', 'UPLOAD_COMPLETE_DATA', 'UP', 'UNLOAD', 'UNKNOWN',
+ 'UNIQUESORT', 'TOP_RIGHT', 'TOP_LEFT', 'TOP', 'TIMER_COMPLETE',
+ 'TIMER', 'TEXT_NODE', 'TEXT_INPUT', 'TEXT', 'TAB_INDEX_CHANGE',
+ 'TAB_ENABLED_CHANGE', 'TAB_CHILDREN_CHANGE', 'TAB', 'SYNC',
+ 'SUBTRACT', 'SUBPIXEL', 'STATUS', 'STANDARD', 'SQUARE', 'SQRT2',
+ 'SQRT1_2', 'SPACE', 'SOUND_COMPLETE', 'SOCKET_DATA', 'SHOW_ALL',
+ 'SHIFT', 'SETTINGS_MANAGER', 'SELECT', 'SECURITY_ERROR', 'SCROLL',
+ 'SCREEN', 'ROUND', 'ROLL_OVER', 'ROLL_OUT', 'RIGHT', 'RGB',
+ 'RETURNINDEXEDARRAY', 'RESIZE', 'REPEAT', 'RENDER',
+ 'REMOVED_FROM_STAGE', 'REMOVED', 'REMOTE', 'REGULAR', 'REFLECT',
+ 'RED', 'RADIAL', 'PROGRESS', 'PRIVACY', 'POST', 'POSITIVE_INFINITY',
+ 'PORTRAIT', 'PIXEL', 'PI', 'PENDING', 'PAGE_UP', 'PAGE_DOWN', 'PAD',
+ 'OVERLAY', 'OUTER', 'OPEN', 'NaN', 'NUM_PAD', 'NUMPAD_SUBTRACT',
+ 'NUMPAD_MULTIPLY', 'NUMPAD_ENTER', 'NUMPAD_DIVIDE',
+ 'NUMPAD_DECIMAL', 'NUMPAD_ADD', 'NUMPAD_9', 'NUMPAD_8', 'NUMPAD_7',
+ 'NUMPAD_6', 'NUMPAD_5', 'NUMPAD_4', 'NUMPAD_3', 'NUMPAD_2',
+ 'NUMPAD_1', 'NUMPAD_0', 'NUMERIC', 'NO_SCALE', 'NO_BORDER',
+ 'NORMAL', 'NONE', 'NEVER', 'NET_STATUS', 'NEGATIVE_INFINITY',
+ 'MULTIPLY', 'MOUSE_WHEEL', 'MOUSE_UP', 'MOUSE_OVER', 'MOUSE_OUT',
+ 'MOUSE_MOVE', 'MOUSE_LEAVE', 'MOUSE_FOCUS_CHANGE', 'MOUSE_DOWN',
+ 'MITER', 'MIN_VALUE', 'MICROPHONE', 'MENU_SELECT',
+ 'MENU_ITEM_SELECT', 'MEDIUM', 'MAX_VALUE', 'LOW', 'LOG2E', 'LOG10E',
+ 'LOCAL_WITH_NETWORK', 'LOCAL_WITH_FILE', 'LOCAL_TRUSTED',
+ 'LOCAL_STORAGE', 'LN2', 'LN10', 'LITTLE_ENDIAN', 'LINK',
+ 'LINEAR_RGB', 'LINEAR', 'LIGHT_COLOR', 'LIGHTEN', 'LEFT', 'LCD',
+ 'LAYER', 'LANDSCAPE', 'KOREAN', 'KEY_UP', 'KEY_FOCUS_CHANGE',
+ 'KEY_DOWN', 'JUSTIFY', 'JAPANESE_KATAKANA_HALF',
+ 'JAPANESE_KATAKANA_FULL', 'JAPANESE_HIRAGANA', 'Infinity', 'ITALIC',
+ 'IO_ERROR', 'INVERT', 'INSERT', 'INPUT', 'INNER', 'INIT',
+ 'IME_COMPOSITION', 'IGNORE', 'ID3', 'HTTP_STATUS', 'HORIZONTAL',
+ 'HOME', 'HIGH', 'HARDLIGHT', 'GREEN', 'GET', 'FULLSCREEN', 'FULL',
+ 'FOCUS_OUT', 'FOCUS_IN', 'FLUSHED', 'FLASH9', 'FLASH8', 'FLASH7',
+ 'FLASH6', 'FLASH5', 'FLASH4', 'FLASH3', 'FLASH2', 'FLASH1', 'F9',
+ 'F8', 'F7', 'F6', 'F5', 'F4', 'F3', 'F2', 'F15', 'F14', 'F13',
+ 'F12', 'F11', 'F10', 'F1', 'EXACT_FIT', 'ESCAPE', 'ERROR', 'ERASE',
+ 'ENTER_FRAME', 'ENTER', 'END', 'EMBEDDED', 'ELEMENT_NODE', 'E',
+ 'DYNAMIC', 'DOWN', 'DOUBLE_CLICK', 'DIFFERENCE', 'DEVICE',
+ 'DESCENDING', 'DELETE', 'DEFAULT', 'DEACTIVATE', 'DATA',
+ 'DARK_COLOR', 'DARKEN', 'CRT', 'CONTROL', 'CONNECT', 'COMPLETE',
+ 'COLOR', 'CLOSE', 'CLICK', 'CLAMP', 'CHINESE', 'CHANGE', 'CENTER',
+ 'CASEINSENSITIVE', 'CAPTURING_PHASE', 'CAPS_LOCK', 'CANCEL',
+ 'CAMERA', 'BUBBLING_PHASE', 'BOTTOM_RIGHT', 'BOTTOM_LEFT', 'BOTTOM',
+ 'BOLD_ITALIC', 'BOLD', 'BLUE', 'BINARY', 'BIG_ENDIAN', 'BEVEL',
+ 'BEST', 'BACKSPACE', 'AUTO', 'AT_TARGET', 'ASYNC_ERROR', 'AMF3',
+ 'AMF0', 'ALWAYS', 'ALPHANUMERIC_HALF', 'ALPHANUMERIC_FULL', 'ALPHA',
+ 'ADVANCED', 'ADDED_TO_STAGE', 'ADDED', 'ADD', 'ACTIVITY',
+ 'ACTIONSCRIPT3', 'ACTIONSCRIPT2'
+ ),
+ //FIX: Must be last in order to avoid conflicts with keywords present
+ //in other keyword groups, that might get highlighted as part of the URL.
+ //I know this is not a proper work-around, but should do just fine.
+ 5 => array(
+ 'uint', 'int', 'arguments', 'XMLSocket', 'XMLNodeType', 'XMLNode',
+ 'XMLList', 'XMLDocument', 'XML', 'Video', 'VerifyError',
+ 'URLVariables', 'URLStream', 'URLRequestMethod', 'URLRequestHeader',
+ 'URLRequest', 'URLLoaderDataFormat', 'URLLoader', 'URIError',
+ 'TypeError', 'Transform', 'TimerEvent', 'Timer', 'TextSnapshot',
+ 'TextRenderer', 'TextLineMetrics', 'TextFormatAlign', 'TextFormat',
+ 'TextFieldType', 'TextFieldAutoSize', 'TextField', 'TextEvent',
+ 'TextDisplayMode', 'TextColorType', 'System', 'SyntaxError',
+ 'SyncEvent', 'StyleSheet', 'String', 'StatusEvent', 'StaticText',
+ 'StageScaleMode', 'StageQuality', 'StageAlign', 'Stage',
+ 'StackOverflowError', 'Sprite', 'SpreadMethod', 'SoundTransform',
+ 'SoundMixer', 'SoundLoaderContext', 'SoundChannel', 'Sound',
+ 'Socket', 'SimpleButton', 'SharedObjectFlushStatus', 'SharedObject',
+ 'Shape', 'SecurityPanel', 'SecurityErrorEvent', 'SecurityError',
+ 'SecurityDomain', 'Security', 'ScriptTimeoutError', 'Scene',
+ 'SWFVersion', 'Responder', 'RegExp', 'ReferenceError', 'Rectangle',
+ 'RangeError', 'QName', 'Proxy', 'ProgressEvent',
+ 'PrintJobOrientation', 'PrintJobOptions', 'PrintJob', 'Point',
+ 'PixelSnapping', 'ObjectEncoding', 'Object', 'Number', 'NetStream',
+ 'NetStatusEvent', 'NetConnection', 'Namespace', 'MovieClip',
+ 'MouseEvent', 'Mouse', 'MorphShape', 'Microphone', 'MemoryError',
+ 'Matrix', 'Math', 'LocalConnection', 'LoaderInfo', 'LoaderContext',
+ 'Loader', 'LineScaleMode', 'KeyboardEvent', 'Keyboard',
+ 'KeyLocation', 'JointStyle', 'InvalidSWFError',
+ 'InterpolationMethod', 'InteractiveObject', 'IllegalOperationError',
+ 'IOErrorEvent', 'IOError', 'IMEEvent', 'IMEConversionMode', 'IME',
+ 'IExternalizable', 'IEventDispatcher', 'IDynamicPropertyWriter',
+ 'IDynamicPropertyOutput', 'IDataOutput', 'IDataInput', 'ID3Info',
+ 'IBitmapDrawable', 'HTTPStatusEvent', 'GridFitType', 'Graphics',
+ 'GradientType', 'GradientGlowFilter', 'GradientBevelFilter',
+ 'GlowFilter', 'Function', 'FrameLabel', 'FontType', 'FontStyle',
+ 'Font', 'FocusEvent', 'FileReferenceList', 'FileReference',
+ 'FileFilter', 'ExternalInterface', 'EventPhase', 'EventDispatcher',
+ 'Event', 'EvalError', 'ErrorEvent', 'Error', 'Endian', 'EOFError',
+ 'DropShadowFilter', 'DisplayObjectContainer', 'DisplayObject',
+ 'DisplacementMapFilterMode', 'DisplacementMapFilter', 'Dictionary',
+ 'DefinitionError', 'Date', 'DataEvent', 'ConvolutionFilter',
+ 'ContextMenuItem', 'ContextMenuEvent', 'ContextMenuBuiltInItems',
+ 'ContextMenu', 'ColorTransform', 'ColorMatrixFilter', 'Class',
+ 'CapsStyle', 'Capabilities', 'Camera', 'CSMSettings', 'ByteArray',
+ 'Boolean', 'BlurFilter', 'BlendMode', 'BitmapFilterType',
+ 'BitmapFilterQuality', 'BitmapFilter', 'BitmapDataChannel',
+ 'BitmapData', 'Bitmap', 'BevelFilter', 'AsyncErrorEvent', 'Array',
+ 'ArgumentError', 'ApplicationDomain', 'AntiAliasType',
+ 'ActivityEvent', 'ActionScriptVersion', 'AccessibilityProperties',
+ 'Accessibility', 'AVM1Movie'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '%', '&', '*', '|', '/', '<', '>', '^', '-', '+', '~', '?', ':', ';', '.', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0033ff; font-weight: bold;',
+ 2 => 'color: #6699cc; font-weight: bold;',
+ 3 => 'color: #339966; font-weight: bold;',
+ 4 => 'color: #9900cc; font-weight: bold;',
+ 5 => 'color: #004993;',
+ 6 => 'color: #004993;',
+ 7 => 'color: #004993;',
+ 8 => 'color: #004993;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #009900; font-style: italic;',
+ 2 => 'color: #009966; font-style: italic;',
+ 'MULTI' => 'color: #3f5fbf;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #990000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000; font-weight:bold;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #000000;',
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => 'http://www.google.com/search?q={FNAMEL}%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:{FNAMEL}.html',
+ 6 => '',
+ 7 => '',
+ 8 => ''
+ ),
+ 'OOLANG' => false,//Save some time as OO identifiers aren't used
+ 'OBJECT_SPLITTERS' => array(
+ // commented out because it's not very relevant for AS, as all properties, methods and constants are dot-accessed.
+ // I believe it's preferable to have package highlighting for example, which is not possible with this enabled.
+ // 0 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php
new file mode 100644
index 000000000..530ed5e4c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php
@@ -0,0 +1,133 @@
+<?php
+/*************************************************************************************
+ * ada.php
+ * -------
+ * Author: Tux (tux@inmail.cz)
+ * Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/29
+ *
+ * Ada language file for GeSHi.
+ * Words are from SciTe configuration file
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Removed apostrophe as string delimiter
+ * - Added URL support
+ * 2004/08/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Ada',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'begin', 'declare', 'do', 'else', 'elsif', 'exception', 'for', 'if',
+ 'is', 'loop', 'while', 'then', 'end', 'select', 'case', 'until',
+ 'goto', 'return'
+ ),
+ 2 => array(
+ 'abs', 'and', 'mod', 'not', 'or', 'rem', 'xor'
+ ),
+ 3 => array(
+ 'abort', 'abstract', 'accept', 'access', 'aliased', 'all', 'array', 'at', 'body',
+ 'constant', 'delay', 'delta', 'digits', 'entry', 'exit',
+ 'function', 'generic', 'in', 'limited', 'new', 'null', 'of', 'others', 'out', 'package', 'pragma',
+ 'private', 'procedure', 'protected', 'raise', 'range', 'record', 'renames', 'requeue', 'reverse',
+ 'separate', 'subtype', 'tagged', 'task', 'terminate', 'type', 'use', 'when', 'with'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00007f;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #46aa03; font-weight:bold;',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php
new file mode 100644
index 000000000..f319e3e3c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php
@@ -0,0 +1,480 @@
+<?php
+/*************************************************************************************
+ * apache.php
+ * ----------
+ * Author: Tux (tux@inmail.cz)
+ * Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/29/07
+ *
+ * Apache language file for GeSHi.
+ * Words are from SciTe configuration file
+ *
+ * CHANGES
+ * -------
+ * 2008/17/06 (1.0.8)
+ * - Added support for apache configuration sections (milian)
+ * - Added missing php keywords (milian)
+ * - Added some more keywords
+ * - Disabled highlighting of brackets by default
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/29)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Apache configuration',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ /*keywords*/
+ 1 => array(
+ //core.c
+ 'AcceptFilter','AcceptPathInfo','AccessConfig','AccessFileName',
+ 'AddDefaultCharset','AddOutputFilterByType','AllowEncodedSlashes',
+ 'AllowOverride','AuthName','AuthType','ContentDigest',
+ 'CoreDumpDirectory','DefaultType','DocumentRoot','EnableMMAP',
+ 'EnableSendfile','ErrorDocument','ErrorLog','FileETag','ForceType',
+ 'HostnameLookups','Include','LimitInternalRecursion',
+ 'LimitRequestBody','LimitRequestFields','LimitRequestFieldsize',
+ 'LimitRequestLine','LimitXMLRequestBody','LogLevel','MaxMemFree',
+ 'MaxRequestsPerChild','NameVirtualHost','Options','PidFile','Port',
+ 'Protocol','Require','RLimitCPU','RLimitMEM','RLimitNPROC',
+ 'Satisfy','ScoreBoardFile','ServerAdmin','ServerAlias','ServerName',
+ 'ServerPath','ServerRoot','ServerSignature','ServerTokens',
+ 'SetHandler','SetInputFilter','SetOutputFilter','ThreadStackSize',
+ 'Timeout','TraceEnable','UseCanonicalName',
+ 'UseCanonicalPhysicalPort',
+
+ //http_core.c
+ 'KeepAlive','KeepAliveTimeout','MaxKeepAliveRequests',
+
+ //mod_actions.c
+ 'Action','Script',
+
+ //mod_alias.c
+ 'Alias','AliasMatch','Redirect','RedirectMatch','RedirectPermanent',
+ 'RedirectTemp','ScriptAlias','ScriptAliasMatch',
+
+ //mod_asis.c
+
+ //mod_auth_basic.c
+ 'AuthBasicAuthoritative','AuthBasicProvider',
+
+ //mod_auth_digest.c
+ 'AuthDigestAlgorithm','AuthDigestDomain','AuthDigestNcCheck',
+ 'AuthDigestNonceFormat','AuthDigestNonceLifetime',
+ 'AuthDigestProvider','AuthDigestQop','AuthDigestShmemSize',
+
+ //mod_authn_alias.c
+
+ //mod_authn_anon.c
+ 'Anonymous','Anonymous_LogEmail','Anonymous_MustGiveEmail',
+ 'Anonymous_NoUserId','Anonymous_VerifyEmail',
+
+ //mod_authn_dbd.c
+ 'AuthDBDUserPWQuery','AuthDBDUserRealmQuery',
+
+ //mod_authn_dbm.c
+ 'AuthDBMType','AuthDBMUserFile',
+
+ //mod_authn_default.c
+ 'AuthDefaultAuthoritative',
+
+ //mod_authn_file.c
+ 'AuthUserFile',
+
+ //mod_authnz_ldap.c
+ 'AuthLDAPBindDN','AuthLDAPBindPassword','AuthLDAPCharsetConfig',
+ 'AuthLDAPCompareDNOnServer','AuthLDAPDereferenceAliases',
+ 'AuthLDAPGroupAttribute','AuthLDAPGroupAttributeIsDN',
+ 'AuthLDAPRemoteUserAttribute','AuthLDAPRemoteUserIsDN',
+ 'AuthLDAPURL','AuthzLDAPAuthoritative',
+
+ //mod_authz_dbm.c
+ 'AuthDBMGroupFile','AuthzDBMAuthoritative','AuthzDBMType',
+
+ //mod_authz_default.c
+ 'AuthzDefaultAuthoritative',
+
+ //mod_authz_groupfile.c
+ 'AuthGroupFile','AuthzGroupFileAuthoritative',
+
+ //mod_authz_host.c
+ 'Allow','Deny','Order',
+
+ //mod_authz_owner.c
+ 'AuthzOwnerAuthoritative',
+
+ //mod_authz_svn.c
+ 'AuthzForceUsernameCase','AuthzSVNAccessFile','AuthzSVNAnonymous',
+ 'AuthzSVNAuthoritative','AuthzSVNNoAuthWhenAnonymousAllowed',
+
+ //mod_authz_user.c
+ 'AuthzUserAuthoritative',
+
+ //mod_autoindex.c
+ 'AddAlt','AddAltByEncoding','AddAltByType','AddDescription',
+ 'AddIcon','AddIconByEncoding','AddIconByType','DefaultIcon',
+ 'FancyIndexing','HeaderName','IndexHeadInsert','IndexIgnore',
+ 'IndexOptions','IndexOrderDefault','IndexStyleSheet','ReadmeName',
+
+ //mod_bt.c
+ 'Tracker','TrackerDetailURL','TrackerFlags','TrackerHashMaxAge',
+ 'TrackerHashMinAge','TrackerHashWatermark','TrackerHome',
+ 'TrackerReturnInterval','TrackerReturnMax',
+ 'TrackerReturnPeerFactor','TrackerReturnPeers','TrackerRootInclude',
+ 'TrackerStyleSheet',
+
+ //mod_bw.c
+ 'BandWidth','BandWidthError','BandWidthModule','BandWidthPacket',
+ 'ForceBandWidthModule','LargeFileLimit','MaxConnection',
+ 'MinBandWidth',
+
+ //mod_cache.c
+ 'CacheDefaultExpire','CacheDisable','CacheEnable',
+ 'CacheIgnoreCacheControl','CacheIgnoreHeaders',
+ 'CacheIgnoreNoLastMod','CacheIgnoreQueryString',
+ 'CacheLastModifiedFactor','CacheMaxExpire','CacheStoreNoStore',
+ 'CacheStorePrivate',
+
+ //mod_cern_meta.c
+ 'MetaDir','MetaFiles','MetaSuffix',
+
+ //mod_cgi.c
+ 'ScriptLog','ScriptLogBuffer','ScriptLogLength',
+
+ //mod_charset_lite.c
+ 'CharsetDefault','CharsetOptions','CharsetSourceEnc',
+
+ //mod_dav.c
+ 'DAV','DAVDepthInfinity','DAVMinTimeout',
+
+ //mod_dav_fs.c
+ 'DAVLockDB',
+
+ //mod_dav_lock.c
+ 'DAVGenericLockDB',
+
+ //mod_dav_svn.c
+ 'SVNActivitiesDB','SVNAllowBulkUpdates','SVNAutoversioning',
+ 'SVNIndexXSLT','SVNListParentPath','SVNMasterURI','SVNParentPath',
+ 'SVNPath','SVNPathAuthz','SVNReposName','SVNSpecialURI',
+
+ //mod_dbd.c
+ 'DBDExptime','DBDKeep','DBDMax','DBDMin','DBDParams','DBDPersist',
+ 'DBDPrepareSQL','DBDriver',
+
+ //mod_deflate.c
+ 'DeflateBufferSize','DeflateCompressionLevel','DeflateFilterNote',
+ 'DeflateMemLevel','DeflateWindowSize',
+
+ //mod_dir.c
+ 'DirectoryIndex','DirectorySlash',
+
+ //mod_disk_cache.c
+ 'CacheDirLength','CacheDirLevels','CacheMaxFileSize',
+ 'CacheMinFileSize','CacheRoot',
+
+ //mod_dumpio.c
+ 'DumpIOInput','DumpIOLogLevel','DumpIOOutput',
+
+ //mod_env.c
+ 'PassEnv','SetEnv','UnsetEnv',
+
+ //mod_expires.c
+ 'ExpiresActive','ExpiresByType','ExpiresDefault',
+
+ //mod_ext_filter.c
+ 'ExtFilterDefine','ExtFilterOptions',
+
+ //mod_file_cache.c
+ 'cachefile','mmapfile',
+
+ //mod_filter.c
+ 'FilterChain','FilterDeclare','FilterProtocol','FilterProvider',
+ 'FilterTrace',
+
+ //mod_gnutls.c
+ 'GnuTLSCache','GnuTLSCacheTimeout','GnuTLSCertificateFile',
+ 'GnuTLSKeyFile','GnuTLSPGPCertificateFile','GnuTLSPGPKeyFile',
+ 'GnuTLSClientVerify','GnuTLSClientCAFile','GnuTLSPGPKeyringFile',
+ 'GnuTLSEnable','GnuTLSDHFile','GnuTLSRSAFile','GnuTLSSRPPasswdFile',
+ 'GnuTLSSRPPasswdConfFile','GnuTLSPriorities',
+ 'GnuTLSExportCertificates',
+
+ //mod_headers.c
+ 'Header','RequestHeader',
+
+ //mod_imagemap.c
+ 'ImapBase','ImapDefault','ImapMenu',
+
+ //mod_include.c
+ 'SSIAccessEnable','SSIEndTag','SSIErrorMsg','SSIStartTag',
+ 'SSITimeFormat','SSIUndefinedEcho','XBitHack',
+
+ //mod_ident.c
+ 'IdentityCheck','IdentityCheckTimeout',
+
+ //mod_info.c
+ 'AddModuleInfo',
+
+ //mod_isapi.c
+ 'ISAPIAppendLogToErrors','ISAPIAppendLogToQuery','ISAPICacheFile',
+ 'ISAPIFakeAsync','ISAPILogNotSupported','ISAPIReadAheadBuffer',
+
+ //mod_log_config.c
+ 'BufferedLogs','CookieLog','CustomLog','LogFormat','TransferLog',
+
+ //mod_log_forensic.c
+ 'ForensicLog',
+
+ //mod_log_rotate.c
+ 'RotateInterval','RotateLogs','RotateLogsLocalTime',
+
+ //mod_logio.c
+
+ //mod_mem_cache.c
+ 'MCacheMaxObjectCount','MCacheMaxObjectSize',
+ 'MCacheMaxStreamingBuffer','MCacheMinObjectSize',
+ 'MCacheRemovalAlgorithm','MCacheSize',
+
+ //mod_mime.c
+ 'AddCharset','AddEncoding','AddHandler','AddInputFilter',
+ 'AddLanguage','AddOutputFilter','AddType','DefaultLanguage',
+ 'ModMimeUsePathInfo','MultiviewsMatch','RemoveCharset',
+ 'RemoveEncoding','RemoveHandler','RemoveInputFilter',
+ 'RemoveLanguage','RemoveOutputFilter','RemoveType','TypesConfig',
+
+ //mod_mime_magic.c
+ 'MimeMagicFile',
+
+ //mod_negotiation.c
+ 'CacheNegotiatedDocs','ForceLanguagePriority','LanguagePriority',
+
+ //mod_php5.c
+ 'php_admin_flag','php_admin_value','php_flag','php_value',
+ 'PHPINIDir',
+
+ //mod_proxy.c
+ 'AllowCONNECT','BalancerMember','NoProxy','ProxyBadHeader',
+ 'ProxyBlock','ProxyDomain','ProxyErrorOverride',
+ 'ProxyFtpDirCharset','ProxyIOBufferSize','ProxyMaxForwards',
+ 'ProxyPass','ProxyPassInterpolateEnv','ProxyPassMatch',
+ 'ProxyPassReverse','ProxyPassReverseCookieDomain',
+ 'ProxyPassReverseCookiePath','ProxyPreserveHost',
+ 'ProxyReceiveBufferSize','ProxyRemote','ProxyRemoteMatch',
+ 'ProxyRequests','ProxySet','ProxyStatus','ProxyTimeout','ProxyVia',
+
+ //mod_proxy_ajp.c
+
+ //mod_proxy_balancer.c
+
+ //mod_proxy_connect.c
+
+ //mod_proxy_ftp.c
+
+ //mod_proxy_http.c
+
+ //mod_rewrite.c
+ 'RewriteBase','RewriteCond','RewriteEngine','RewriteLock',
+ 'RewriteLog','RewriteLogLevel','RewriteMap','RewriteOptions',
+ 'RewriteRule',
+
+ //mod_setenvif.c
+ 'BrowserMatch','BrowserMatchNoCase','SetEnvIf','SetEnvIfNoCase',
+
+ //mod_so.c
+ 'LoadFile','LoadModule',
+
+ //mod_speling.c
+ 'CheckCaseOnly','CheckSpelling',
+
+ //mod_ssl.c
+ 'SSLCACertificateFile','SSLCACertificatePath','SSLCADNRequestFile',
+ 'SSLCADNRequestPath','SSLCARevocationFile','SSLCARevocationPath',
+ 'SSLCertificateChainFile','SSLCertificateFile',
+ 'SSLCertificateKeyFile','SSLCipherSuite','SSLCryptoDevice',
+ 'SSLEngine','SSLHonorCipherOrder','SSLMutex','SSLOptions',
+ 'SSLPassPhraseDialog','SSLProtocol','SSLProxyCACertificateFile',
+ 'SSLProxyCACertificatePath','SSLProxyCARevocationFile',
+ 'SSLProxyCARevocationPath','SSLProxyCipherSuite','SSLProxyEngine',
+ 'SSLProxyMachineCertificateFile','SSLProxyMachineCertificatePath',
+ 'SSLProxyProtocol','SSLProxyVerify','SSLProxyVerifyDepth',
+ 'SSLRandomSeed','SSLRenegBufferSize','SSLRequire','SSLRequireSSL',
+ 'SSLSessionCache','SSLSessionCacheTimeout','SSLUserName',
+ 'SSLVerifyClient','SSLVerifyDepth',
+
+ //mod_status.c
+ 'ExtendedStatus','SeeRequestTail',
+
+ //mod_substitute.c
+ 'Substitute',
+
+ //mod_suexec.c
+ 'SuexecUserGroup',
+
+ //mod_unique_id.c
+
+ //mod_userdir.c
+ 'UserDir',
+
+ //mod_usertrack.c
+ 'CookieDomain','CookieExpires','CookieName','CookieStyle',
+ 'CookieTracking',
+
+ //mod_version.c
+
+ //mod_vhost_alias.c
+ 'VirtualDocumentRoot','VirtualDocumentRootIP',
+ 'VirtualScriptAlias','VirtualScriptAliasIP',
+
+ //mod_view.c
+ 'ViewEnable',
+
+ //mod_win32.c
+ 'ScriptInterpreterSource',
+
+ //mpm_winnt.c
+ 'Listen','ListenBacklog','ReceiveBufferSize','SendBufferSize',
+ 'ThreadLimit','ThreadsPerChild','Win32DisableAcceptEx',
+
+ //mpm_common.c
+ 'AcceptMutex','AddModule','ClearModuleList','EnableExceptionHook',
+ 'Group','LockFile','MaxClients','MaxSpareServers','MaxSpareThreads',
+ 'MinSpareServers','MinSpareThreads','ServerLimit','StartServers',
+ 'StartThreads','User',
+
+ //util_ldap.c
+ 'LDAPCacheEntries','LDAPCacheTTL','LDAPConnectionTimeout',
+ 'LDAPOpCacheEntries','LDAPOpCacheTTL','LDAPSharedCacheFile',
+ 'LDAPSharedCacheSize','LDAPTrustedClientCert',
+ 'LDAPTrustedGlobalCert','LDAPTrustedMode','LDAPVerifyServerCert',
+
+ //Unknown Mods ...
+ 'AgentLog','BindAddress','bs2000account','CacheForceCompletion',
+ 'CacheGCInterval','CacheSize','NoCache','qsc','RefererIgnore',
+ 'RefererLog','Resourceconfig','ServerType','SingleListen'
+ ),
+ /*keywords 2*/
+ 2 => array(
+ 'all','on','off','standalone','inetd','indexes',
+ 'force-response-1.0','downgrade-1.0','nokeepalive',
+ 'includes','followsymlinks','none',
+ 'x-compress','x-gzip'
+ ),
+ /*keywords 3*/
+ 3 => array(
+ //core.c
+ 'Directory','DirectoryMatch','Files','FilesMatch','IfDefine',
+ 'IfModule','Limit','LimitExcept','Location','LocationMatch',
+ 'VirtualHost',
+
+ //mod_authn_alias.c
+ 'AuthnProviderAlias',
+
+ //mod_proxy.c
+ 'Proxy','ProxyMatch',
+
+ //mod_version.c
+ 'IfVersion'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '+', '-'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00007f;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #000000; font-weight:bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'BRACKETS' => GESHI_NEVER,
+ 'SYMBOLS' => GESHI_NEVER
+ ),
+ 'KEYWORDS' => array(
+ 3 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php
new file mode 100644
index 000000000..85e3d6d0d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php
@@ -0,0 +1,157 @@
+<?php
+/*************************************************************************************
+ * applescript.php
+ * --------
+ * Author: Stephan Klimek (http://www.initware.org)
+ * Copyright: Stephan Klimek (http://www.initware.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/07/20
+ *
+ * AppleScript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ *
+ * TODO
+ * -------------------------
+ * URL settings to references
+ *
+ **************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'AppleScript',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array( '(*' => '*)'),
+ 'COMMENT_REGEXP' => array(
+ 2 => '/(?<=[a-z])\'/i',
+ 3 => '/(?<![a-z])\'.*?\'/i',
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'application','close','count','delete','duplicate','exists','launch','make','move','open',
+ 'print','quit','reopen','run','save','saving', 'idle', 'path to', 'number', 'alias', 'list', 'text', 'string',
+ 'integer', 'it','me','version','pi','result','space','tab','anything','case','diacriticals','expansion',
+ 'hyphens','punctuation','bold','condensed','expanded','hidden','italic','outline','plain',
+ 'shadow','strikethrough','subscript','superscript','underline','ask','no','yes','false', 'id',
+ 'true','weekday','monday','mon','tuesday','tue','wednesday','wed','thursday','thu','friday',
+ 'fri','saturday','sat','sunday','sun','month','january','jan','february','feb','march',
+ 'mar','april','apr','may','june','jun','july','jul','august','aug','september', 'quote', 'do JavaScript',
+ 'sep','october','oct','november','nov','december','dec','minutes','hours', 'name', 'default answer',
+ 'days','weeks', 'folder', 'folders', 'file', 'files', 'window', 'eject', 'disk', 'reveal', 'sleep',
+ 'shut down', 'restart', 'display dialog', 'buttons', 'invisibles', 'item', 'items', 'delimiters', 'offset of',
+ 'AppleScript\'s', 'choose file', 'choose folder', 'choose from list', 'beep', 'contents', 'do shell script',
+ 'paragraph', 'paragraphs', 'missing value', 'quoted form', 'desktop', 'POSIX path', 'POSIX file',
+ 'activate', 'document', 'adding', 'receiving', 'content', 'new', 'properties', 'info for', 'bounds',
+ 'selection', 'extension', 'into', 'onto', 'by', 'between', 'against', 'set the clipboard to', 'the clipboard'
+ ),
+ 2 => array(
+ 'each','some','every','whose','where','index','first','second','third','fourth',
+ 'fifth','sixth','seventh','eighth','ninth','tenth','last','front','back','st','nd',
+ 'rd','th','middle','named','through','thru','before','after','beginning','the', 'as',
+ 'div','mod','and','not','or','contains','equal','equals','isnt', 'less', 'greater'
+ ),
+ 3 => array(
+ 'script','property','prop','end','to','set','global','local','on','of',
+ 'in','given','with','without','return','continue','tell','if','then','else','repeat',
+ 'times','while','until','from','exit','try','error','considering','ignoring','timeout',
+ 'transaction','my','get','put','is', 'copy'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ')','+','-','^','*','/','&','<','>=','<','<=','=','�'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0066ff;',
+ 2 => 'color: #ff0033;',
+ 3 => 'color: #ff0033; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => '',
+ 3 => 'color: #ff0000;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #339933;',
+ 4 => 'color: #0066ff;',
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => ',+-=&lt;&gt;/?^&amp;*'
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*',
+ //File descriptors
+ 4 => '&lt;[a-zA-Z_][a-zA-Z0-9_]*&gt;',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'SPACE_AS_WHITESPACE' => true
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php
new file mode 100644
index 000000000..891c10e5e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php
@@ -0,0 +1,144 @@
+<?php
+/*************************************************************************************
+ * apt_sources.php
+ * ----------
+ * Author: Milian Wolff (mail@milianw.de)
+ * Copyright: (c) 2008 Milian Wolff (http://milianw.de)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/06/17
+ *
+ * Apt sources.list language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/06/17 (1.0.8)
+ * - Initial import
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Apt sources',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ /*keywords*/
+ 1 => array(
+ 'deb-src', 'deb'
+ ),
+ 2 => array(
+ //Generic
+ 'stable', 'old-stable', 'testing', 'testing-proposed-updates',
+ 'unstable', 'unstable-proposed-updates', 'experimental',
+ 'non-US', 'security', 'volatile', 'volatile-sloppy',
+ 'apt-build',
+ 'stable/updates',
+ //Debian
+ 'buzz', 'rex', 'bo', 'hamm', 'slink', 'potato', 'woody', 'sarge',
+ 'etch', 'lenny', 'sid',
+ //Ubuntu
+ 'warty', 'warty-updates', 'warty-security', 'warty-proposed', 'warty-backports',
+ 'hoary', 'hoary-updates', 'hoary-security', 'hoary-proposed', 'hoary-backports',
+ 'breezy', 'breezy-updates', 'breezy-security', 'breezy-proposed', 'breezy-backports',
+ 'dapper', 'dapper-updates', 'dapper-security', 'dapper-proposed', 'dapper-backports',
+ 'edgy', 'edgy-updates', 'edgy-security', 'edgy-proposed', 'edgy-backports',
+ 'feisty', 'feisty-updates', 'feisty-security', 'feisty-proposed', 'feisty-backports',
+ 'gutsy', 'gutsy-updates', 'gutsy-security', 'gutsy-proposed', 'gutsy-backports',
+ 'hardy', 'hardy-updates', 'hardy-security', 'hardy-proposed', 'hardy-backports',
+ 'intrepid', 'intrepid-updates', 'intrepid-security', 'intrepid-proposed', 'intrepid-backports'
+ ),
+ 3 => array(
+ 'main', 'restricted', 'preview', 'contrib', 'non-free',
+ 'commercial', 'universe', 'multiverse'
+ )
+ ),
+ 'REGEXPS' => array(
+ 0 => "(((http|ftp):\/\/|file:\/)[^\s]+)|(cdrom:\[[^\]]*\][^\s]*)",
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => true,
+ 3 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00007f;',
+ 2 => 'color: #b1b100;',
+ 3 => 'color: #b16000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ ),
+ 'STRINGS' => array(
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #009900;',
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER,
+ 'METHODS' => GESHI_NEVER,
+ 'SCRIPT' => GESHI_NEVER,
+ 'SYMBOLS' => GESHI_NEVER,
+ 'ESCAPE_CHAR' => GESHI_NEVER,
+ 'BRACKETS' => GESHI_NEVER,
+ 'STRINGS' => GESHI_NEVER,
+ ),
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9\$_\|\#;>|^\/])',
+ 'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-&\.])'
+ )
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php
new file mode 100644
index 000000000..2efeac9dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php
@@ -0,0 +1,225 @@
+<?php
+/*************************************************************************************
+ * asm.php
+ * -------
+ * Author: Tux (tux@inmail.cz)
+ * Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/27
+ *
+ * x86 Assembler language file for GeSHi.
+ * Words are from SciTe configuration file (based on NASM syntax)
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * - Added binary and hexadecimal regexps
+ * 2004/08/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ASM',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ //Line address prefix suppression
+ 'COMMENT_REGEXP' => array(2 => "/^(?:[0-9a-f]{0,4}:)?[0-9a-f]{4}(?:[0-9a-f]{4})?/mi"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /*CPU*/
+ 1 => array(
+ 'aaa','aad','aam','aas','adc','add','and','call','cbw','clc','cld','cli','cmc','cmp',
+ 'cmps','cmpsb','cmpsw','cwd','daa','das','dec','div','esc','hlt','idiv','imul','in','inc',
+ 'int','into','iret','ja','jae','jb','jbe','jc','jcxz','je','jg','jge','jl','jle','jmp',
+ 'jna','jnae','jnb','jnbe','jnc','jne','jng','jnge','jnl','jnle','jno','jnp','jns','jnz',
+ 'jo','jp','jpe','jpo','js','jz','lahf','lds','lea','les','lods','lodsb','lodsw','loop',
+ 'loope','loopew','loopne','loopnew','loopnz','loopnzw','loopw','loopz','loopzw','mov',
+ 'movs','movsb','movsw','mul','neg','nop','not','or','out','pop','popf','push','pushf',
+ 'rcl','rcr','ret','retf','retn','rol','ror','sahf','sal','sar','sbb','scas','scasb','scasw',
+ 'shl','shr','stc','std','sti','stos','stosb','stosw','sub','test','wait','xchg','xlat',
+ 'xlatb','xor','bound','enter','ins','insb','insw','leave','outs','outsb','outsw','popa','pusha','pushw',
+ 'arpl','lar','lsl','sgdt','sidt','sldt','smsw','str','verr','verw','clts','lgdt','lidt','lldt','lmsw','ltr',
+ 'bsf','bsr','bt','btc','btr','bts','cdq','cmpsd','cwde','insd','iretd','iretdf','iretf',
+ 'jecxz','lfs','lgs','lodsd','loopd','looped','loopned','loopnzd','loopzd','lss','movsd',
+ 'movsx','movzx','outsd','popad','popfd','pushad','pushd','pushfd','scasd','seta','setae',
+ 'setb','setbe','setc','sete','setg','setge','setl','setle','setna','setnae','setnb','setnbe',
+ 'setnc','setne','setng','setnge','setnl','setnle','setno','setnp','setns','setnz','seto','setp',
+ 'setpe','setpo','sets','setz','shld','shrd','stosd','bswap','cmpxchg','invd','invlpg','wbinvd','xadd','lock',
+ 'rep','repe','repne','repnz','repz'
+ ),
+ /*FPU*/
+ 2 => array(
+ 'f2xm1','fabs','fadd','faddp','fbld','fbstp','fchs','fclex','fcom','fcomp','fcompp','fdecstp',
+ 'fdisi','fdiv','fdivp','fdivr','fdivrp','feni','ffree','fiadd','ficom','ficomp','fidiv',
+ 'fidivr','fild','fimul','fincstp','finit','fist','fistp','fisub','fisubr','fld','fld1',
+ 'fldcw','fldenv','fldenvw','fldl2e','fldl2t','fldlg2','fldln2','fldpi','fldz','fmul',
+ 'fmulp','fnclex','fndisi','fneni','fninit','fnop','fnsave','fnsavew','fnstcw','fnstenv',
+ 'fnstenvw','fnstsw','fpatan','fprem','fptan','frndint','frstor','frstorw','fsave',
+ 'fsavew','fscale','fsqrt','fst','fstcw','fstenv','fstenvw','fstp','fstsw','fsub','fsubp',
+ 'fsubr','fsubrp','ftst','fwait','fxam','fxch','fxtract','fyl2x','fyl2xp1',
+ 'fsetpm','fcos','fldenvd','fnsaved','fnstenvd','fprem1','frstord','fsaved','fsin','fsincos',
+ 'fstenvd','fucom','fucomp','fucompp'
+ ),
+ /*registers*/
+ 3 => array(
+ 'ah','al','ax','bh','bl','bp','bx','ch','cl','cr0','cr2','cr3','cs','cx','dh','di','dl',
+ 'dr0','dr1','dr2','dr3','dr6','dr7','ds','dx','eax','ebp','ebx','ecx','edi','edx',
+ 'es','esi','esp','fs','gs','si','sp','ss','st','tr3','tr4','tr5','tr6','tr7'
+ ),
+ /*Directive*/
+ 4 => array(
+ '186','286','286c','286p','287','386','386c','386p','387','486','486p',
+ '8086','8087','alpha','break','code','const','continue','cref','data','data?',
+ 'dosseg','else','elseif','endif','endw','err','err1','err2','errb',
+ 'errdef','errdif','errdifi','erre','erridn','erridni','errnb','errndef',
+ 'errnz','exit','fardata','fardata?','if','lall','lfcond','list','listall',
+ 'listif','listmacro','listmacroall',' model','no87','nocref','nolist',
+ 'nolistif','nolistmacro','radix','repeat','sall','seq','sfcond','stack',
+ 'startup','tfcond','type','until','untilcxz','while','xall','xcref',
+ 'xlist','alias','align','assume','catstr','comm','comment','db','dd','df','dq',
+ 'dt','dup','dw','echo','elseif1','elseif2','elseifb','elseifdef','elseifdif',
+ 'elseifdifi','elseife','elseifidn','elseifidni','elseifnb','elseifndef','end',
+ 'endm','endp','ends','eq',' equ','even','exitm','extern','externdef','extrn','for',
+ 'forc','ge','goto','group','high','highword','if1','if2','ifb','ifdef','ifdif',
+ 'ifdifi','ife',' ifidn','ifidni','ifnb','ifndef','include','includelib','instr','invoke',
+ 'irp','irpc','label','le','length','lengthof','local','low','lowword','lroffset',
+ 'macro','mask','mod','msfloat','name','ne','offset','opattr','option','org','%out',
+ 'page','popcontext','private','proc','proto','ptr','public','purge','pushcontext','record',
+ 'rept','seg','segment','short','size','sizeof','sizestr','struc','struct',
+ 'substr','subtitle','subttl','textequ','this','title','typedef','union','width',
+ '.model', '.stack', '.code', '.data'
+ ),
+ /*Operands*/
+ 5 => array(
+ '@b','@f','addr','basic','byte','c','carry?','dword',
+ 'far','far16','fortran','fword','near','near16','overflow?','parity?','pascal','qword',
+ 'real4',' real8','real10','sbyte','sdword','sign?','stdcall','sword','syscall','tbyte',
+ 'vararg','word','zero?','flat','near32','far32',
+ 'abs','all','assumes','at','casemap','common','compact',
+ 'cpu','dotname','emulator','epilogue','error','export','expr16','expr32','farstack',
+ 'forceframe','huge','language','large','listing','ljmp','loadds','m510','medium','memory',
+ 'nearstack','nodotname','noemulator','nokeyword','noljmp','nom510','none','nonunique',
+ 'nooldmacros','nooldstructs','noreadonly','noscoped','nosignextend','nothing',
+ 'notpublic','oldmacros','oldstructs','os_dos','para','prologue',
+ 'readonly','req','scoped','setif2','smallstack','tiny','use16','use32','uses'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '(', ')',
+ '+', '-', '*', '/', '%',
+ '.', ',', ';', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00007f; font-weight: bold;',
+ 2 => 'color: #0000ff; font-weight: bold;',
+ 3 => 'color: #00007f;',
+ 4 => 'color: #000000; font-weight: bold;',
+ 5 => 'color: #000000; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900; font-weight: bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+// 0 => 'color: #0000ff;',
+// 1 => 'color: #0000ff;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_BIN_PREFIX_PERCENT |
+ GESHI_NUMBER_BIN_SUFFIX |
+ GESHI_NUMBER_HEX_PREFIX |
+ GESHI_NUMBER_HEX_SUFFIX |
+ GESHI_NUMBER_OCT_SUFFIX |
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers
+// 0 => /* */ "(?<=([\\s\\(\\)\\[\\],;.:+\\-\\/*]))(?:[0-9][0-9a-fA-F]{0,31}[hH]|0x[0-9a-fA-F]{1,32})(?=([\\s\\(\\)\\[\\],;.:+\\-\\/*]))",
+ //Binary numbers
+// 1 => "(?<=([\\s\\(\\)\\[\\],;.:+\\-\\/*]))[01]{1,64}[bB](?=([\\s\\(\\)\\[\\],;.:+\\-\\/*]))"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 8,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#>|^])",
+ 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%])"
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php
new file mode 100644
index 000000000..7bfec11e1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php
@@ -0,0 +1,164 @@
+<?php
+/*************************************************************************************
+ * asp.php
+ * --------
+ * Author: Amit Gupta (http://blog.igeek.info/)
+ * Copyright: (c) 2004 Amit Gupta (http://blog.igeek.info/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/13
+ *
+ * ASP language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/12/30 (1.0.3)
+ * - Strings only delimited by ", comments by '
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * 2004/08/13 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Include all the functions, keywords etc that I have missed
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ASP',
+ 'COMMENT_SINGLE' => array(1 => "'", 2 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'include', 'file', 'Const', 'Dim', 'Option', 'Explicit', 'Implicit', 'Set', 'Select', 'ReDim', 'Preserve',
+ 'ByVal', 'ByRef', 'End', 'Private', 'Public', 'If', 'Then', 'Else', 'ElseIf', 'Case', 'With', 'NOT',
+ 'While', 'Wend', 'For', 'Loop', 'Do', 'Request', 'Response', 'Server', 'ADODB', 'Session', 'Application',
+ 'Each', 'In', 'Get', 'Next', 'INT', 'CINT', 'CBOOL', 'CDATE', 'CBYTE', 'CCUR', 'CDBL', 'CLNG', 'CSNG',
+ 'CSTR', 'Fix', 'Is', 'Sgn', 'String', 'Boolean', 'Currency', 'Me', 'Single', 'Long', 'Integer', 'Byte',
+ 'Variant', 'Double', 'To', 'Let', 'Xor', 'Resume', 'On', 'Error', 'Imp', 'GoTo', 'Call', 'Global'
+ ),
+ 2 => array(
+ 'Null', 'Nothing', 'And',
+ 'False',
+ 'True', 'var', 'Or', 'BOF', 'EOF', 'xor',
+ 'Function', 'Class', 'New', 'Sub'
+ ),
+ 3 => array(
+ 'CreateObject', 'Write', 'Redirect', 'Cookies', 'BinaryRead', 'ClientCertificate', 'Form', 'QueryString',
+ 'ServerVariables', 'TotalBytes', 'AddHeader', 'AppendToLog', 'BinaryWrite', 'Buffer', 'CacheControl',
+ 'Charset', 'Clear', 'ContentType', 'End()', 'Expires', 'ExpiresAbsolute', 'Flush()', 'IsClientConnected',
+ 'PICS', 'Status', 'Connection', 'Recordset', 'Execute', 'Abandon', 'Lock', 'UnLock', 'Command', 'Fields',
+ 'Properties', 'Property', 'Send', 'Replace', 'InStr', 'TRIM', 'NOW', 'Day', 'Month', 'Hour', 'Minute', 'Second',
+ 'Year', 'MonthName', 'LCase', 'UCase', 'Abs', 'Array', 'As', 'LEN', 'MoveFirst', 'MoveLast', 'MovePrevious',
+ 'MoveNext', 'LBound', 'UBound', 'Transfer', 'Open', 'Close', 'MapPath', 'FileExists', 'OpenTextFile', 'ReadAll'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ '<%', '%>'
+ ),
+ 0 => array(
+ '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>',
+ ';', ':', '?', '='),
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #990099; font-weight: bold;',
+ 2 => 'color: #0000ff; font-weight: bold;',
+ 3 => 'color: #330066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;',
+ 2 => 'color: #ff6600;',
+ 'MULTI' => 'color: #008000;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #006600; font-weight:bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #cc0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #800000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #9900cc;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006600; font-weight: bold;',
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<%' => '%>'
+ ),
+ 1 => array(
+ '<script language="vbscript" runat="server">' => '</script>'
+ ),
+ 2 => array(
+ '<script language="javascript" runat="server">' => '</script>'
+ ),
+ 3 => "/(?<start><%=?)(?:\"[^\"]*?\"|\/\*(?!\*\/).*?\*\/|.)*?(?<end>%>|\Z)/sm"
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php
new file mode 100644
index 000000000..526fe5d99
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php
@@ -0,0 +1,1171 @@
+<?php
+/*************************************************************************************
+ * autoit.php
+ * --------
+ * Author: big_daddy (robert.i.anthony@gmail.com)
+ * Copyright: (c) 2006 and to GESHi ;)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/01/26
+ *
+ * AutoIT language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * Release 1.0.8.1 (2008/09/15)
+ * - Updated on 22.03.2008 By Tlem (tlem@tuxolem.fr)
+ * - The link on functions will now correctly re-direct to
+ * - http://www.autoitscript.com/autoit3/docs/functions/{FNAME}.htm
+ * - Updated whith au3.api (09.02.2008).
+ * - Updated - 16 Mai 2008 - v3.2.12.0
+ * - Updated - 12 June 2008 - v3.2.12.1
+ * Release 1.0.7.20 (2006/01/26)
+ * - First Release
+ *
+ * Current bugs & todo:
+ * ----------
+ * - not sure how to get sendkeys to work " {!}, {SPACE} etc... "
+ * - just copyied the regexp for variable from php so this HAVE to be checked and fixed to a better one ;)
+ *
+ * Reference: http://www.autoitscript.com/autoit3/docs/
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License,
+or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not,
+write to the Free Software
+ * Foundation,
+Inc.,
+59 Temple Place,
+Suite 330,
+Boston,
+MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'AutoIt',
+ 'COMMENT_SINGLE' => array(';'),
+ 'COMMENT_MULTI' => array(
+ '#comments-start' => '#comments-end',
+ '#cs' => '#ce'),
+ 'COMMENT_REGEXP' => array(0 => '/(?<!#)#(\s.*)?$/m'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'And','ByRef','Case','Const','ContinueCase','ContinueLoop',
+ 'Default','Dim','Do','Else','ElseIf','EndFunc','EndIf','EndSelect',
+ 'EndSwitch','EndWith','Enum','Exit','ExitLoop','False','For','Func',
+ 'Global','If','In','Local','Next','Not','Or','ReDim','Return',
+ 'Select','Step','Switch','Then','To','True','Until','WEnd','While',
+ 'With'
+ ),
+ 2 => array(
+ '@AppDataCommonDir','@AppDataDir','@AutoItExe','@AutoItPID',
+ '@AutoItUnicode','@AutoItVersion','@AutoItX64','@COM_EventObj',
+ '@CommonFilesDir','@Compiled','@ComputerName','@ComSpec','@CR',
+ '@CRLF','@DesktopCommonDir','@DesktopDepth','@DesktopDir',
+ '@DesktopHeight','@DesktopRefresh','@DesktopWidth',
+ '@DocumentsCommonDir','@error','@exitCode','@exitMethod',
+ '@extended','@FavoritesCommonDir','@FavoritesDir','@GUI_CtrlHandle',
+ '@GUI_CtrlId','@GUI_DragFile','@GUI_DragId','@GUI_DropId',
+ '@GUI_WinHandle','@HomeDrive','@HomePath','@HomeShare',
+ '@HotKeyPressed','@HOUR','@InetGetActive','@InetGetBytesRead',
+ '@IPAddress1','@IPAddress2','@IPAddress3','@IPAddress4','@KBLayout',
+ '@LF','@LogonDNSDomain','@LogonDomain','@LogonServer','@MDAY',
+ '@MIN','@MON','@MyDocumentsDir','@NumParams','@OSBuild','@OSLang',
+ '@OSServicePack','@OSTYPE','@OSVersion','@ProcessorArch',
+ '@ProgramFilesDir','@ProgramsCommonDir','@ProgramsDir','@ScriptDir',
+ '@ScriptFullPath','@ScriptLineNumber','@ScriptName','@SEC',
+ '@StartMenuCommonDir','@StartMenuDir','@StartupCommonDir',
+ '@StartupDir','@SW_DISABLE','@SW_ENABLE','@SW_HIDE','@SW_LOCK',
+ '@SW_MAXIMIZE','@SW_MINIMIZE','@SW_RESTORE','@SW_SHOW',
+ '@SW_SHOWDEFAULT','@SW_SHOWMAXIMIZED','@SW_SHOWMINIMIZED',
+ '@SW_SHOWMINNOACTIVE','@SW_SHOWNA','@SW_SHOWNOACTIVATE',
+ '@SW_SHOWNORMAL','@SW_UNLOCK','@SystemDir','@TAB','@TempDir',
+ '@TRAY_ID','@TrayIconFlashing','@TrayIconVisible','@UserName',
+ '@UserProfileDir','@WDAY','@WindowsDir','@WorkingDir','@YDAY',
+ '@YEAR'
+ ),
+ 3 => array(
+ 'Abs','ACos','AdlibDisable','AdlibEnable','Asc','AscW','ASin',
+ 'Assign','ATan','AutoItSetOption','AutoItWinGetTitle',
+ 'AutoItWinSetTitle','Beep','Binary','BinaryLen','BinaryMid',
+ 'BinaryToString','BitAND','BitNOT','BitOR','BitRotate','BitShift',
+ 'BitXOR','BlockInput','Break','Call','CDTray','Ceiling','Chr',
+ 'ChrW','ClipGet','ClipPut','ConsoleRead','ConsoleWrite',
+ 'ConsoleWriteError','ControlClick','ControlCommand',
+ 'ControlDisable','ControlEnable','ControlFocus','ControlGetFocus',
+ 'ControlGetHandle','ControlGetPos','ControlGetText','ControlHide',
+ 'ControlListView','ControlMove','ControlSend','ControlSetText',
+ 'ControlShow','ControlTreeView','Cos','Dec','DirCopy','DirCreate',
+ 'DirGetSize','DirMove','DirRemove','DllCall','DllCallbackFree',
+ 'DllCallbackGetPtr','DllCallbackRegister','DllClose','DllOpen',
+ 'DllStructCreate','DllStructGetData','DllStructGetPtr',
+ 'DllStructGetSize','DllStructSetData','DriveGetDrive',
+ 'DriveGetFileSystem','DriveGetLabel','DriveGetSerial',
+ 'DriveGetType','DriveMapAdd','DriveMapDel','DriveMapGet',
+ 'DriveSetLabel','DriveSpaceFree','DriveSpaceTotal','DriveStatus',
+ 'EnvGet','EnvSet','EnvUpdate','Eval','Execute','Exp',
+ 'FileChangeDir','FileClose','FileCopy','FileCreateNTFSLink',
+ 'FileCreateShortcut','FileDelete','FileExists','FileFindFirstFile',
+ 'FileFindNextFile','FileGetAttrib','FileGetLongName',
+ 'FileGetShortcut','FileGetShortName','FileGetSize','FileGetTime',
+ 'FileGetVersion','FileInstall','FileMove','FileOpen',
+ 'FileOpenDialog','FileRead','FileReadLine','FileRecycle',
+ 'FileRecycleEmpty','FileSaveDialog','FileSelectFolder',
+ 'FileSetAttrib','FileSetTime','FileWrite','FileWriteLine','Floor',
+ 'FtpSetProxy','GUICreate','GUICtrlCreateAvi','GUICtrlCreateButton',
+ 'GUICtrlCreateCheckbox','GUICtrlCreateCombo',
+ 'GUICtrlCreateContextMenu','GUICtrlCreateDate','GUICtrlCreateDummy',
+ 'GUICtrlCreateEdit','GUICtrlCreateGraphic','GUICtrlCreateGroup',
+ 'GUICtrlCreateIcon','GUICtrlCreateInput','GUICtrlCreateLabel',
+ 'GUICtrlCreateList','GUICtrlCreateListView',
+ 'GUICtrlCreateListViewItem','GUICtrlCreateMenu',
+ 'GUICtrlCreateMenuItem','GUICtrlCreateMonthCal','GUICtrlCreateObj',
+ 'GUICtrlCreatePic','GUICtrlCreateProgress','GUICtrlCreateRadio',
+ 'GUICtrlCreateSlider','GUICtrlCreateTab','GUICtrlCreateTabItem',
+ 'GUICtrlCreateTreeView','GUICtrlCreateTreeViewItem',
+ 'GUICtrlCreateUpdown','GUICtrlDelete','GUICtrlGetHandle',
+ 'GUICtrlGetState','GUICtrlRead','GUICtrlRecvMsg',
+ 'GUICtrlRegisterListViewSort','GUICtrlSendMsg','GUICtrlSendToDummy',
+ 'GUICtrlSetBkColor','GUICtrlSetColor','GUICtrlSetCursor',
+ 'GUICtrlSetData','GUICtrlSetFont','GUICtrlSetDefColor',
+ 'GUICtrlSetDefBkColor','GUICtrlSetGraphic','GUICtrlSetImage',
+ 'GUICtrlSetLimit','GUICtrlSetOnEvent','GUICtrlSetPos',
+ 'GUICtrlSetResizing','GUICtrlSetState','GUICtrlSetStyle',
+ 'GUICtrlSetTip','GUIDelete','GUIGetCursorInfo','GUIGetMsg',
+ 'GUIGetStyle','GUIRegisterMsg','GUISetAccelerators()',
+ 'GUISetBkColor','GUISetCoord','GUISetCursor','GUISetFont',
+ 'GUISetHelp','GUISetIcon','GUISetOnEvent','GUISetState',
+ 'GUISetStyle','GUIStartGroup','GUISwitch','Hex','HotKeySet',
+ 'HttpSetProxy','HWnd','InetGet','InetGetSize','IniDelete','IniRead',
+ 'IniReadSection','IniReadSectionNames','IniRenameSection',
+ 'IniWrite','IniWriteSection','InputBox','Int','IsAdmin','IsArray',
+ 'IsBinary','IsBool','IsDeclared','IsDllStruct','IsFloat','IsHWnd',
+ 'IsInt','IsKeyword','IsNumber','IsObj','IsPtr','IsString','Log',
+ 'MemGetStats','Mod','MouseClick','MouseClickDrag','MouseDown',
+ 'MouseGetCursor','MouseGetPos','MouseMove','MouseUp','MouseWheel',
+ 'MsgBox','Number','ObjCreate','ObjEvent','ObjGet','ObjName','Opt',
+ 'Ping','PixelChecksum','PixelGetColor','PixelSearch','PluginClose',
+ 'PluginOpen','ProcessClose','ProcessExists','ProcessGetStats',
+ 'ProcessList','ProcessSetPriority','ProcessWait','ProcessWaitClose',
+ 'ProgressOff','ProgressOn','ProgressSet','Ptr','Random','RegDelete',
+ 'RegEnumKey','RegEnumVal','RegRead','RegWrite','Round','Run',
+ 'RunAs','RunAsWait','RunWait','Send','SendKeepActive','SetError',
+ 'SetExtended','ShellExecute','ShellExecuteWait','Shutdown','Sin',
+ 'Sleep','SoundPlay','SoundSetWaveVolume','SplashImageOn',
+ 'SplashOff','SplashTextOn','Sqrt','SRandom','StatusbarGetText',
+ 'StderrRead','StdinWrite','StdioClose','StdoutRead','String',
+ 'StringAddCR','StringCompare','StringFormat','StringInStr',
+ 'StringIsAlNum','StringIsAlpha','StringIsASCII','StringIsDigit',
+ 'StringIsFloat','StringIsInt','StringIsLower','StringIsSpace',
+ 'StringIsUpper','StringIsXDigit','StringLeft','StringLen',
+ 'StringLower','StringMid','StringRegExp','StringRegExpReplace',
+ 'StringReplace','StringRight','StringSplit','StringStripCR',
+ 'StringStripWS','StringToBinary','StringTrimLeft','StringTrimRight',
+ 'StringUpper','Tan','TCPAccept','TCPCloseSocket','TCPConnect',
+ 'TCPListen','TCPNameToIP','TCPRecv','TCPSend','TCPShutdown',
+ 'TCPStartup','TimerDiff','TimerInit','ToolTip','TrayCreateItem',
+ 'TrayCreateMenu','TrayGetMsg','TrayItemDelete','TrayItemGetHandle',
+ 'TrayItemGetState','TrayItemGetText','TrayItemSetOnEvent',
+ 'TrayItemSetState','TrayItemSetText','TraySetClick','TraySetIcon',
+ 'TraySetOnEvent','TraySetPauseIcon','TraySetState','TraySetToolTip',
+ 'TrayTip','UBound','UDPBind','UDPCloseSocket','UDPOpen','UDPRecv',
+ 'UDPSend','UDPShutdown','UDPStartup','VarGetType','WinActivate',
+ 'WinActive','WinClose','WinExists','WinFlash','WinGetCaretPos',
+ 'WinGetClassList','WinGetClientSize','WinGetHandle','WinGetPos',
+ 'WinGetProcess','WinGetState','WinGetText','WinGetTitle','WinKill',
+ 'WinList','WinMenuSelectItem','WinMinimizeAll','WinMinimizeAllUndo',
+ 'WinMove','WinSetOnTop','WinSetState','WinSetTitle','WinSetTrans',
+ 'WinWait','WinWaitActive','WinWaitClose','WinWaitNotActive'
+ ),
+ 4 => array(
+ 'ArrayAdd','ArrayBinarySearch','ArrayConcatenate','ArrayDelete',
+ 'ArrayDisplay','ArrayFindAll','ArrayInsert','ArrayMax',
+ 'ArrayMaxIndex','ArrayMin','ArrayMinIndex','ArrayPop','ArrayPush',
+ 'ArrayReverse','ArraySearch','ArraySort','ArraySwap','ArrayToClip',
+ 'ArrayToString','ArrayTrim','ChooseColor','ChooseFont',
+ 'ClipBoard_ChangeChain','ClipBoard_Close','ClipBoard_CountFormats',
+ 'ClipBoard_Empty','ClipBoard_EnumFormats','ClipBoard_FormatStr',
+ 'ClipBoard_GetData','ClipBoard_GetDataEx','ClipBoard_GetFormatName',
+ 'ClipBoard_GetOpenWindow','ClipBoard_GetOwner',
+ 'ClipBoard_GetPriorityFormat','ClipBoard_GetSequenceNumber',
+ 'ClipBoard_GetViewer','ClipBoard_IsFormatAvailable',
+ 'ClipBoard_Open','ClipBoard_RegisterFormat','ClipBoard_SetData',
+ 'ClipBoard_SetDataEx','ClipBoard_SetViewer','ClipPutFile',
+ 'ColorConvertHSLtoRGB','ColorConvertRGBtoHSL','ColorGetBlue',
+ 'ColorGetGreen','ColorGetRed','Date_Time_CompareFileTime',
+ 'Date_Time_DOSDateTimeToArray','Date_Time_DOSDateTimeToFileTime',
+ 'Date_Time_DOSDateTimeToStr','Date_Time_DOSDateToArray',
+ 'Date_Time_DOSDateToStr','Date_Time_DOSTimeToArray',
+ 'Date_Time_DOSTimeToStr','Date_Time_EncodeFileTime',
+ 'Date_Time_EncodeSystemTime','Date_Time_FileTimeToArray',
+ 'Date_Time_FileTimeToDOSDateTime',
+ 'Date_Time_FileTimeToLocalFileTime','Date_Time_FileTimeToStr',
+ 'Date_Time_FileTimeToSystemTime','Date_Time_GetFileTime',
+ 'Date_Time_GetLocalTime','Date_Time_GetSystemTime',
+ 'Date_Time_GetSystemTimeAdjustment',
+ 'Date_Time_GetSystemTimeAsFileTime',
+ 'Date_Time_GetSystemTimes','Date_Time_GetTickCount',
+ 'Date_Time_GetTimeZoneInformation',
+ 'Date_Time_LocalFileTimeToFileTime','Date_Time_SetFileTime',
+ 'Date_Time_SetLocalTime','Date_Time_SetSystemTime',
+ 'Date_Time_SetSystemTimeAdjustment',
+ 'Date_Time_SetTimeZoneInformation','Date_Time_SystemTimeToArray',
+ 'Date_Time_SystemTimeToDateStr','Date_Time_SystemTimeToDateTimeStr',
+ 'Date_Time_SystemTimeToFileTime','Date_Time_SystemTimeToTimeStr',
+ 'Date_Time_SystemTimeToTzSpecificLocalTime',
+ 'Date_Time_TzSpecificLocalTimeToSystemTime','DateAdd',
+ 'DateDayOfWeek','DateDaysInMonth','DateDiff','DateIsLeapYear',
+ 'DateIsValid','DateTimeFormat','DateTimeSplit','DateToDayOfWeek',
+ 'DateToDayOfWeekISO','DateToDayValue','DateToMonth',
+ 'DayValueToDate','DebugBugReportEnv','DebugOut','DebugSetup',
+ 'Degree','EventLog__Backup','EventLog__Clear','EventLog__Close',
+ 'EventLog__Count','EventLog__DeregisterSource','EventLog__Full',
+ 'EventLog__Notify','EventLog__Oldest','EventLog__Open',
+ 'EventLog__OpenBackup','EventLog__Read','EventLog__RegisterSource',
+ 'EventLog__Report','FileCountLines','FileCreate','FileListToArray',
+ 'FilePrint','FileReadToArray','FileWriteFromArray',
+ 'FileWriteLog','FileWriteToLine','GDIPlus_ArrowCapCreate',
+ 'GDIPlus_ArrowCapDispose','GDIPlus_ArrowCapGetFillState',
+ 'GDIPlus_ArrowCapGetHeight','GDIPlus_ArrowCapGetMiddleInset',
+ 'GDIPlus_ArrowCapGetWidth','GDIPlus_ArrowCapSetFillState',
+ 'GDIPlus_ArrowCapSetHeight','GDIPlus_ArrowCapSetMiddleInset',
+ 'GDIPlus_ArrowCapSetWidth','GDIPlus_BitmapCloneArea',
+ 'GDIPlus_BitmapCreateFromFile','GDIPlus_BitmapCreateFromGraphics',
+ 'GDIPlus_BitmapCreateFromHBITMAP',
+ 'GDIPlus_BitmapCreateHBITMAPFromBitmap','GDIPlus_BitmapDispose',
+ 'GDIPlus_BitmapLockBits','GDIPlus_BitmapUnlockBits',
+ 'GDIPlus_BrushClone','GDIPlus_BrushCreateSolid',
+ 'GDIPlus_BrushDispose','GDIPlus_BrushGetType',
+ 'GDIPlus_CustomLineCapDispose','GDIPlus_Decoders',
+ 'GDIPlus_DecodersGetCount','GDIPlus_DecodersGetSize',
+ 'GDIPlus_Encoders','GDIPlus_EncodersGetCLSID',
+ 'GDIPlus_EncodersGetCount','GDIPlus_EncodersGetParamList',
+ 'GDIPlus_EncodersGetParamListSize','GDIPlus_EncodersGetSize',
+ 'GDIPlus_FontCreate','GDIPlus_FontDispose',
+ 'GDIPlus_FontFamilyCreate','GDIPlus_FontFamilyDispose',
+ 'GDIPlus_GraphicsClear','GDIPlus_GraphicsCreateFromHDC',
+ 'GDIPlus_GraphicsCreateFromHWND','GDIPlus_GraphicsDispose',
+ 'GDIPlus_GraphicsDrawArc','GDIPlus_GraphicsDrawBezier',
+ 'GDIPlus_GraphicsDrawClosedCurve','GDIPlus_GraphicsDrawCurve',
+ 'GDIPlus_GraphicsDrawEllipse','GDIPlus_GraphicsDrawImage',
+ 'GDIPlus_GraphicsDrawImageRect','GDIPlus_GraphicsDrawImageRectRect',
+ 'GDIPlus_GraphicsDrawLine','GDIPlus_GraphicsDrawPie',
+ 'GDIPlus_GraphicsDrawPolygon','GDIPlus_GraphicsDrawRect',
+ 'GDIPlus_GraphicsDrawString','GDIPlus_GraphicsDrawStringEx',
+ 'GDIPlus_GraphicsFillClosedCurve','GDIPlus_GraphicsFillEllipse',
+ 'GDIPlus_GraphicsFillPie','GDIPlus_GraphicsFillRect',
+ 'GDIPlus_GraphicsGetDC','GDIPlus_GraphicsGetSmoothingMode',
+ 'GDIPlus_GraphicsMeasureString','GDIPlus_GraphicsReleaseDC',
+ 'GDIPlus_GraphicsSetSmoothingMode','GDIPlus_GraphicsSetTransform',
+ 'GDIPlus_ImageDispose','GDIPlus_ImageGetGraphicsContext',
+ 'GDIPlus_ImageGetHeight','GDIPlus_ImageGetWidth',
+ 'GDIPlus_ImageLoadFromFile','GDIPlus_ImageSaveToFile',
+ 'GDIPlus_ImageSaveToFileEx','GDIPlus_MatrixCreate',
+ 'GDIPlus_MatrixDispose','GDIPlus_MatrixRotate','GDIPlus_ParamAdd',
+ 'GDIPlus_ParamInit','GDIPlus_PenCreate','GDIPlus_PenDispose',
+ 'GDIPlus_PenGetAlignment','GDIPlus_PenGetColor',
+ 'GDIPlus_PenGetCustomEndCap','GDIPlus_PenGetDashCap',
+ 'GDIPlus_PenGetDashStyle','GDIPlus_PenGetEndCap',
+ 'GDIPlus_PenGetWidth','GDIPlus_PenSetAlignment',
+ 'GDIPlus_PenSetColor','GDIPlus_PenSetCustomEndCap',
+ 'GDIPlus_PenSetDashCap','GDIPlus_PenSetDashStyle',
+ 'GDIPlus_PenSetEndCap','GDIPlus_PenSetWidth','GDIPlus_RectFCreate',
+ 'GDIPlus_Shutdown','GDIPlus_Startup','GDIPlus_StringFormatCreate',
+ 'GDIPlus_StringFormatDispose','GetIP','GUICtrlAVI_Close',
+ 'GUICtrlAVI_Create','GUICtrlAVI_Destroy','GUICtrlAVI_Open',
+ 'GUICtrlAVI_OpenEx','GUICtrlAVI_Play','GUICtrlAVI_Seek',
+ 'GUICtrlAVI_Show','GUICtrlAVI_Stop','GUICtrlButton_Click',
+ 'GUICtrlButton_Create','GUICtrlButton_Destroy',
+ 'GUICtrlButton_Enable','GUICtrlButton_GetCheck',
+ 'GUICtrlButton_GetFocus','GUICtrlButton_GetIdealSize',
+ 'GUICtrlButton_GetImage','GUICtrlButton_GetImageList',
+ 'GUICtrlButton_GetState','GUICtrlButton_GetText',
+ 'GUICtrlButton_GetTextMargin','GUICtrlButton_SetCheck',
+ 'GUICtrlButton_SetFocus','GUICtrlButton_SetImage',
+ 'GUICtrlButton_SetImageList','GUICtrlButton_SetSize',
+ 'GUICtrlButton_SetState','GUICtrlButton_SetStyle',
+ 'GUICtrlButton_SetText','GUICtrlButton_SetTextMargin',
+ 'GUICtrlButton_Show','GUICtrlComboBox_AddDir',
+ 'GUICtrlComboBox_AddString','GUICtrlComboBox_AutoComplete',
+ 'GUICtrlComboBox_BeginUpdate','GUICtrlComboBox_Create',
+ 'GUICtrlComboBox_DeleteString','GUICtrlComboBox_Destroy',
+ 'GUICtrlComboBox_EndUpdate','GUICtrlComboBox_FindString',
+ 'GUICtrlComboBox_FindStringExact','GUICtrlComboBox_GetComboBoxInfo',
+ 'GUICtrlComboBox_GetCount','GUICtrlComboBox_GetCurSel',
+ 'GUICtrlComboBox_GetDroppedControlRect',
+ 'GUICtrlComboBox_GetDroppedControlRectEx',
+ 'GUICtrlComboBox_GetDroppedState','GUICtrlComboBox_GetDroppedWidth',
+ 'GUICtrlComboBox_GetEditSel','GUICtrlComboBox_GetEditText',
+ 'GUICtrlComboBox_GetExtendedUI',
+ 'GUICtrlComboBox_GetHorizontalExtent',
+ 'GUICtrlComboBox_GetItemHeight','GUICtrlComboBox_GetLBText',
+ 'GUICtrlComboBox_GetLBTextLen','GUICtrlComboBox_GetList',
+ 'GUICtrlComboBox_GetListArray','GUICtrlComboBox_GetLocale',
+ 'GUICtrlComboBox_GetLocaleCountry','GUICtrlComboBox_GetLocaleLang',
+ 'GUICtrlComboBox_GetLocalePrimLang',
+ 'GUICtrlComboBox_GetLocaleSubLang','GUICtrlComboBox_GetMinVisible',
+ 'GUICtrlComboBox_GetTopIndex','GUICtrlComboBox_InitStorage',
+ 'GUICtrlComboBox_InsertString','GUICtrlComboBox_LimitText',
+ 'GUICtrlComboBox_ReplaceEditSel','GUICtrlComboBox_ResetContent',
+ 'GUICtrlComboBox_SelectString','GUICtrlComboBox_SetCurSel',
+ 'GUICtrlComboBox_SetDroppedWidth','GUICtrlComboBox_SetEditSel',
+ 'GUICtrlComboBox_SetEditText','GUICtrlComboBox_SetExtendedUI',
+ 'GUICtrlComboBox_SetHorizontalExtent',
+ 'GUICtrlComboBox_SetItemHeight','GUICtrlComboBox_SetMinVisible',
+ 'GUICtrlComboBox_SetTopIndex','GUICtrlComboBox_ShowDropDown',
+ 'GUICtrlComboBoxEx_AddDir','GUICtrlComboBoxEx_AddString',
+ 'GUICtrlComboBoxEx_BeginUpdate','GUICtrlComboBoxEx_Create',
+ 'GUICtrlComboBoxEx_CreateSolidBitMap',
+ 'GUICtrlComboBoxEx_DeleteString','GUICtrlComboBoxEx_Destroy',
+ 'GUICtrlComboBoxEx_EndUpdate','GUICtrlComboBoxEx_FindStringExact',
+ 'GUICtrlComboBoxEx_GetComboBoxInfo',
+ 'GUICtrlComboBoxEx_GetComboControl','GUICtrlComboBoxEx_GetCount',
+ 'GUICtrlComboBoxEx_GetCurSel',
+ 'GUICtrlComboBoxEx_GetDroppedControlRect',
+ 'GUICtrlComboBoxEx_GetDroppedControlRectEx',
+ 'GUICtrlComboBoxEx_GetDroppedState',
+ 'GUICtrlComboBoxEx_GetDroppedWidth',
+ 'GUICtrlComboBoxEx_GetEditControl','GUICtrlComboBoxEx_GetEditSel',
+ 'GUICtrlComboBoxEx_GetEditText',
+ 'GUICtrlComboBoxEx_GetExtendedStyle',
+ 'GUICtrlComboBoxEx_GetExtendedUI','GUICtrlComboBoxEx_GetImageList',
+ 'GUICtrlComboBoxEx_GetItem','GUICtrlComboBoxEx_GetItemEx',
+ 'GUICtrlComboBoxEx_GetItemHeight','GUICtrlComboBoxEx_GetItemImage',
+ 'GUICtrlComboBoxEx_GetItemIndent',
+ 'GUICtrlComboBoxEx_GetItemOverlayImage',
+ 'GUICtrlComboBoxEx_GetItemParam',
+ 'GUICtrlComboBoxEx_GetItemSelectedImage',
+ 'GUICtrlComboBoxEx_GetItemText','GUICtrlComboBoxEx_GetItemTextLen',
+ 'GUICtrlComboBoxEx_GetList','GUICtrlComboBoxEx_GetListArray',
+ 'GUICtrlComboBoxEx_GetLocale','GUICtrlComboBoxEx_GetLocaleCountry',
+ 'GUICtrlComboBoxEx_GetLocaleLang',
+ 'GUICtrlComboBoxEx_GetLocalePrimLang',
+ 'GUICtrlComboBoxEx_GetLocaleSubLang',
+ 'GUICtrlComboBoxEx_GetMinVisible','GUICtrlComboBoxEx_GetTopIndex',
+ 'GUICtrlComboBoxEx_InitStorage','GUICtrlComboBoxEx_InsertString',
+ 'GUICtrlComboBoxEx_LimitText','GUICtrlComboBoxEx_ReplaceEditSel',
+ 'GUICtrlComboBoxEx_ResetContent','GUICtrlComboBoxEx_SetCurSel',
+ 'GUICtrlComboBoxEx_SetDroppedWidth','GUICtrlComboBoxEx_SetEditSel',
+ 'GUICtrlComboBoxEx_SetEditText',
+ 'GUICtrlComboBoxEx_SetExtendedStyle',
+ 'GUICtrlComboBoxEx_SetExtendedUI','GUICtrlComboBoxEx_SetImageList',
+ 'GUICtrlComboBoxEx_SetItem','GUICtrlComboBoxEx_SetItemEx',
+ 'GUICtrlComboBoxEx_SetItemHeight','GUICtrlComboBoxEx_SetItemImage',
+ 'GUICtrlComboBoxEx_SetItemIndent',
+ 'GUICtrlComboBoxEx_SetItemOverlayImage',
+ 'GUICtrlComboBoxEx_SetItemParam',
+ 'GUICtrlComboBoxEx_SetItemSelectedImage',
+ 'GUICtrlComboBoxEx_SetMinVisible','GUICtrlComboBoxEx_SetTopIndex',
+ 'GUICtrlComboBoxEx_ShowDropDown','GUICtrlDTP_Create',
+ 'GUICtrlDTP_Destroy','GUICtrlDTP_GetMCColor','GUICtrlDTP_GetMCFont',
+ 'GUICtrlDTP_GetMonthCal','GUICtrlDTP_GetRange',
+ 'GUICtrlDTP_GetRangeEx','GUICtrlDTP_GetSystemTime',
+ 'GUICtrlDTP_GetSystemTimeEx','GUICtrlDTP_SetFormat',
+ 'GUICtrlDTP_SetMCColor','GUICtrlDTP_SetMCFont',
+ 'GUICtrlDTP_SetRange','GUICtrlDTP_SetRangeEx',
+ 'GUICtrlDTP_SetSystemTime','GUICtrlDTP_SetSystemTimeEx',
+ 'GUICtrlEdit_AppendText','GUICtrlEdit_BeginUpdate',
+ 'GUICtrlEdit_CanUndo','GUICtrlEdit_CharFromPos',
+ 'GUICtrlEdit_Create','GUICtrlEdit_Destroy',
+ 'GUICtrlEdit_EmptyUndoBuffer','GUICtrlEdit_EndUpdate',
+ 'GUICtrlEdit_Find','GUICtrlEdit_FmtLines',
+ 'GUICtrlEdit_GetFirstVisibleLine','GUICtrlEdit_GetLimitText',
+ 'GUICtrlEdit_GetLine','GUICtrlEdit_GetLineCount',
+ 'GUICtrlEdit_GetMargins','GUICtrlEdit_GetModify',
+ 'GUICtrlEdit_GetPasswordChar','GUICtrlEdit_GetRECT',
+ 'GUICtrlEdit_GetRECTEx','GUICtrlEdit_GetSel','GUICtrlEdit_GetText',
+ 'GUICtrlEdit_GetTextLen','GUICtrlEdit_HideBalloonTip',
+ 'GUICtrlEdit_InsertText','GUICtrlEdit_LineFromChar',
+ 'GUICtrlEdit_LineIndex','GUICtrlEdit_LineLength',
+ 'GUICtrlEdit_LineScroll','GUICtrlEdit_PosFromChar',
+ 'GUICtrlEdit_ReplaceSel','GUICtrlEdit_Scroll',
+ 'GUICtrlEdit_SetLimitText','GUICtrlEdit_SetMargins',
+ 'GUICtrlEdit_SetModify','GUICtrlEdit_SetPasswordChar',
+ 'GUICtrlEdit_SetReadOnly','GUICtrlEdit_SetRECT',
+ 'GUICtrlEdit_SetRECTEx','GUICtrlEdit_SetRECTNP',
+ 'GUICtrlEdit_SetRectNPEx','GUICtrlEdit_SetSel',
+ 'GUICtrlEdit_SetTabStops','GUICtrlEdit_SetText',
+ 'GUICtrlEdit_ShowBalloonTip','GUICtrlEdit_Undo',
+ 'GUICtrlHeader_AddItem','GUICtrlHeader_ClearFilter',
+ 'GUICtrlHeader_ClearFilterAll','GUICtrlHeader_Create',
+ 'GUICtrlHeader_CreateDragImage','GUICtrlHeader_DeleteItem',
+ 'GUICtrlHeader_Destroy','GUICtrlHeader_EditFilter',
+ 'GUICtrlHeader_GetBitmapMargin','GUICtrlHeader_GetImageList',
+ 'GUICtrlHeader_GetItem','GUICtrlHeader_GetItemAlign',
+ 'GUICtrlHeader_GetItemBitmap','GUICtrlHeader_GetItemCount',
+ 'GUICtrlHeader_GetItemDisplay','GUICtrlHeader_GetItemFlags',
+ 'GUICtrlHeader_GetItemFormat','GUICtrlHeader_GetItemImage',
+ 'GUICtrlHeader_GetItemOrder','GUICtrlHeader_GetItemParam',
+ 'GUICtrlHeader_GetItemRect','GUICtrlHeader_GetItemRectEx',
+ 'GUICtrlHeader_GetItemText','GUICtrlHeader_GetItemWidth',
+ 'GUICtrlHeader_GetOrderArray','GUICtrlHeader_GetUnicodeFormat',
+ 'GUICtrlHeader_HitTest','GUICtrlHeader_InsertItem',
+ 'GUICtrlHeader_Layout','GUICtrlHeader_OrderToIndex',
+ 'GUICtrlHeader_SetBitmapMargin',
+ 'GUICtrlHeader_SetFilterChangeTimeout',
+ 'GUICtrlHeader_SetHotDivider','GUICtrlHeader_SetImageList',
+ 'GUICtrlHeader_SetItem','GUICtrlHeader_SetItemAlign',
+ 'GUICtrlHeader_SetItemBitmap','GUICtrlHeader_SetItemDisplay',
+ 'GUICtrlHeader_SetItemFlags','GUICtrlHeader_SetItemFormat',
+ 'GUICtrlHeader_SetItemImage','GUICtrlHeader_SetItemOrder',
+ 'GUICtrlHeader_SetItemParam','GUICtrlHeader_SetItemText',
+ 'GUICtrlHeader_SetItemWidth','GUICtrlHeader_SetOrderArray',
+ 'GUICtrlHeader_SetUnicodeFormat','GUICtrlIpAddress_ClearAddress',
+ 'GUICtrlIpAddress_Create','GUICtrlIpAddress_Destroy',
+ 'GUICtrlIpAddress_Get','GUICtrlIpAddress_GetArray',
+ 'GUICtrlIpAddress_GetEx','GUICtrlIpAddress_IsBlank',
+ 'GUICtrlIpAddress_Set','GUICtrlIpAddress_SetArray',
+ 'GUICtrlIpAddress_SetEx','GUICtrlIpAddress_SetFocus',
+ 'GUICtrlIpAddress_SetFont','GUICtrlIpAddress_SetRange',
+ 'GUICtrlIpAddress_ShowHide','GUICtrlListBox_AddFile',
+ 'GUICtrlListBox_AddString','GUICtrlListBox_BeginUpdate',
+ 'GUICtrlListBox_Create','GUICtrlListBox_DeleteString',
+ 'GUICtrlListBox_Destroy','GUICtrlListBox_Dir',
+ 'GUICtrlListBox_EndUpdate','GUICtrlListBox_FindInText',
+ 'GUICtrlListBox_FindString','GUICtrlListBox_GetAnchorIndex',
+ 'GUICtrlListBox_GetCaretIndex','GUICtrlListBox_GetCount',
+ 'GUICtrlListBox_GetCurSel','GUICtrlListBox_GetHorizontalExtent',
+ 'GUICtrlListBox_GetItemData','GUICtrlListBox_GetItemHeight',
+ 'GUICtrlListBox_GetItemRect','GUICtrlListBox_GetItemRectEx',
+ 'GUICtrlListBox_GetListBoxInfo','GUICtrlListBox_GetLocale',
+ 'GUICtrlListBox_GetLocaleCountry','GUICtrlListBox_GetLocaleLang',
+ 'GUICtrlListBox_GetLocalePrimLang',
+ 'GUICtrlListBox_GetLocaleSubLang','GUICtrlListBox_GetSel',
+ 'GUICtrlListBox_GetSelCount','GUICtrlListBox_GetSelItems',
+ 'GUICtrlListBox_GetSelItemsText','GUICtrlListBox_GetText',
+ 'GUICtrlListBox_GetTextLen','GUICtrlListBox_GetTopIndex',
+ 'GUICtrlListBox_InitStorage','GUICtrlListBox_InsertString',
+ 'GUICtrlListBox_ItemFromPoint','GUICtrlListBox_ReplaceString',
+ 'GUICtrlListBox_ResetContent','GUICtrlListBox_SelectString',
+ 'GUICtrlListBox_SelItemRange','GUICtrlListBox_SelItemRangeEx',
+ 'GUICtrlListBox_SetAnchorIndex','GUICtrlListBox_SetCaretIndex',
+ 'GUICtrlListBox_SetColumnWidth','GUICtrlListBox_SetCurSel',
+ 'GUICtrlListBox_SetHorizontalExtent','GUICtrlListBox_SetItemData',
+ 'GUICtrlListBox_SetItemHeight','GUICtrlListBox_SetLocale',
+ 'GUICtrlListBox_SetSel','GUICtrlListBox_SetTabStops',
+ 'GUICtrlListBox_SetTopIndex','GUICtrlListBox_Sort',
+ 'GUICtrlListBox_SwapString','GUICtrlListBox_UpdateHScroll',
+ 'GUICtrlListView_AddArray','GUICtrlListView_AddColumn',
+ 'GUICtrlListView_AddItem','GUICtrlListView_AddSubItem',
+ 'GUICtrlListView_ApproximateViewHeight',
+ 'GUICtrlListView_ApproximateViewRect',
+ 'GUICtrlListView_ApproximateViewWidth','GUICtrlListView_Arrange',
+ 'GUICtrlListView_BeginUpdate','GUICtrlListView_CancelEditLabel',
+ 'GUICtrlListView_ClickItem','GUICtrlListView_CopyItems',
+ 'GUICtrlListView_Create','GUICtrlListView_CreateDragImage',
+ 'GUICtrlListView_CreateSolidBitMap',
+ 'GUICtrlListView_DeleteAllItems','GUICtrlListView_DeleteColumn',
+ 'GUICtrlListView_DeleteItem','GUICtrlListView_DeleteItemsSelected',
+ 'GUICtrlListView_Destroy','GUICtrlListView_DrawDragImage',
+ 'GUICtrlListView_EditLabel','GUICtrlListView_EnableGroupView',
+ 'GUICtrlListView_EndUpdate','GUICtrlListView_EnsureVisible',
+ 'GUICtrlListView_FindInText','GUICtrlListView_FindItem',
+ 'GUICtrlListView_FindNearest','GUICtrlListView_FindParam',
+ 'GUICtrlListView_FindText','GUICtrlListView_GetBkColor',
+ 'GUICtrlListView_GetBkImage','GUICtrlListView_GetCallbackMask',
+ 'GUICtrlListView_GetColumn','GUICtrlListView_GetColumnCount',
+ 'GUICtrlListView_GetColumnOrder',
+ 'GUICtrlListView_GetColumnOrderArray',
+ 'GUICtrlListView_GetColumnWidth','GUICtrlListView_GetCounterPage',
+ 'GUICtrlListView_GetEditControl',
+ 'GUICtrlListView_GetExtendedListViewStyle',
+ 'GUICtrlListView_GetGroupInfo',
+ 'GUICtrlListView_GetGroupViewEnabled','GUICtrlListView_GetHeader',
+ 'GUICtrlListView_GetHotCursor','GUICtrlListView_GetHotItem',
+ 'GUICtrlListView_GetHoverTime','GUICtrlListView_GetImageList',
+ 'GUICtrlListView_GetISearchString','GUICtrlListView_GetItem',
+ 'GUICtrlListView_GetItemChecked','GUICtrlListView_GetItemCount',
+ 'GUICtrlListView_GetItemCut','GUICtrlListView_GetItemDropHilited',
+ 'GUICtrlListView_GetItemEx','GUICtrlListView_GetItemFocused',
+ 'GUICtrlListView_GetItemGroupID','GUICtrlListView_GetItemImage',
+ 'GUICtrlListView_GetItemIndent','GUICtrlListView_GetItemParam',
+ 'GUICtrlListView_GetItemPosition',
+ 'GUICtrlListView_GetItemPositionX',
+ 'GUICtrlListView_GetItemPositionY','GUICtrlListView_GetItemRect',
+ 'GUICtrlListView_GetItemRectEx','GUICtrlListView_GetItemSelected',
+ 'GUICtrlListView_GetItemSpacing','GUICtrlListView_GetItemSpacingX',
+ 'GUICtrlListView_GetItemSpacingY','GUICtrlListView_GetItemState',
+ 'GUICtrlListView_GetItemStateImage','GUICtrlListView_GetItemText',
+ 'GUICtrlListView_GetItemTextArray',
+ 'GUICtrlListView_GetItemTextString','GUICtrlListView_GetNextItem',
+ 'GUICtrlListView_GetNumberOfWorkAreas','GUICtrlListView_GetOrigin',
+ 'GUICtrlListView_GetOriginX','GUICtrlListView_GetOriginY',
+ 'GUICtrlListView_GetOutlineColor',
+ 'GUICtrlListView_GetSelectedColumn',
+ 'GUICtrlListView_GetSelectedCount',
+ 'GUICtrlListView_GetSelectedIndices',
+ 'GUICtrlListView_GetSelectionMark','GUICtrlListView_GetStringWidth',
+ 'GUICtrlListView_GetSubItemRect','GUICtrlListView_GetTextBkColor',
+ 'GUICtrlListView_GetTextColor','GUICtrlListView_GetToolTips',
+ 'GUICtrlListView_GetTopIndex','GUICtrlListView_GetUnicodeFormat',
+ 'GUICtrlListView_GetView','GUICtrlListView_GetViewDetails',
+ 'GUICtrlListView_GetViewLarge','GUICtrlListView_GetViewList',
+ 'GUICtrlListView_GetViewRect','GUICtrlListView_GetViewSmall',
+ 'GUICtrlListView_GetViewTile','GUICtrlListView_HideColumn',
+ 'GUICtrlListView_HitTest','GUICtrlListView_InsertColumn',
+ 'GUICtrlListView_InsertGroup','GUICtrlListView_InsertItem',
+ 'GUICtrlListView_JustifyColumn','GUICtrlListView_MapIDToIndex',
+ 'GUICtrlListView_MapIndexToID','GUICtrlListView_RedrawItems',
+ 'GUICtrlListView_RegisterSortCallBack',
+ 'GUICtrlListView_RemoveAllGroups','GUICtrlListView_RemoveGroup',
+ 'GUICtrlListView_Scroll','GUICtrlListView_SetBkColor',
+ 'GUICtrlListView_SetBkImage','GUICtrlListView_SetCallBackMask',
+ 'GUICtrlListView_SetColumn','GUICtrlListView_SetColumnOrder',
+ 'GUICtrlListView_SetColumnOrderArray',
+ 'GUICtrlListView_SetColumnWidth',
+ 'GUICtrlListView_SetExtendedListViewStyle',
+ 'GUICtrlListView_SetGroupInfo','GUICtrlListView_SetHotItem',
+ 'GUICtrlListView_SetHoverTime','GUICtrlListView_SetIconSpacing',
+ 'GUICtrlListView_SetImageList','GUICtrlListView_SetItem',
+ 'GUICtrlListView_SetItemChecked','GUICtrlListView_SetItemCount',
+ 'GUICtrlListView_SetItemCut','GUICtrlListView_SetItemDropHilited',
+ 'GUICtrlListView_SetItemEx','GUICtrlListView_SetItemFocused',
+ 'GUICtrlListView_SetItemGroupID','GUICtrlListView_SetItemImage',
+ 'GUICtrlListView_SetItemIndent','GUICtrlListView_SetItemParam',
+ 'GUICtrlListView_SetItemPosition',
+ 'GUICtrlListView_SetItemPosition32',
+ 'GUICtrlListView_SetItemSelected','GUICtrlListView_SetItemState',
+ 'GUICtrlListView_SetItemStateImage','GUICtrlListView_SetItemText',
+ 'GUICtrlListView_SetOutlineColor',
+ 'GUICtrlListView_SetSelectedColumn',
+ 'GUICtrlListView_SetSelectionMark','GUICtrlListView_SetTextBkColor',
+ 'GUICtrlListView_SetTextColor','GUICtrlListView_SetToolTips',
+ 'GUICtrlListView_SetUnicodeFormat','GUICtrlListView_SetView',
+ 'GUICtrlListView_SetWorkAreas','GUICtrlListView_SimpleSort',
+ 'GUICtrlListView_SortItems','GUICtrlListView_SubItemHitTest',
+ 'GUICtrlListView_UnRegisterSortCallBack',
+ 'GUICtrlMenu_AddMenuItem','GUICtrlMenu_AppendMenu',
+ 'GUICtrlMenu_CheckMenuItem','GUICtrlMenu_CheckRadioItem',
+ 'GUICtrlMenu_CreateMenu','GUICtrlMenu_CreatePopup',
+ 'GUICtrlMenu_DeleteMenu','GUICtrlMenu_DestroyMenu',
+ 'GUICtrlMenu_DrawMenuBar','GUICtrlMenu_EnableMenuItem',
+ 'GUICtrlMenu_FindItem','GUICtrlMenu_FindParent',
+ 'GUICtrlMenu_GetItemBmp','GUICtrlMenu_GetItemBmpChecked',
+ 'GUICtrlMenu_GetItemBmpUnchecked','GUICtrlMenu_GetItemChecked',
+ 'GUICtrlMenu_GetItemCount','GUICtrlMenu_GetItemData',
+ 'GUICtrlMenu_GetItemDefault','GUICtrlMenu_GetItemDisabled',
+ 'GUICtrlMenu_GetItemEnabled','GUICtrlMenu_GetItemGrayed',
+ 'GUICtrlMenu_GetItemHighlighted','GUICtrlMenu_GetItemID',
+ 'GUICtrlMenu_GetItemInfo','GUICtrlMenu_GetItemRect',
+ 'GUICtrlMenu_GetItemRectEx','GUICtrlMenu_GetItemState',
+ 'GUICtrlMenu_GetItemStateEx','GUICtrlMenu_GetItemSubMenu',
+ 'GUICtrlMenu_GetItemText','GUICtrlMenu_GetItemType',
+ 'GUICtrlMenu_GetMenu','GUICtrlMenu_GetMenuBackground',
+ 'GUICtrlMenu_GetMenuBarInfo','GUICtrlMenu_GetMenuContextHelpID',
+ 'GUICtrlMenu_GetMenuData','GUICtrlMenu_GetMenuDefaultItem',
+ 'GUICtrlMenu_GetMenuHeight','GUICtrlMenu_GetMenuInfo',
+ 'GUICtrlMenu_GetMenuStyle','GUICtrlMenu_GetSystemMenu',
+ 'GUICtrlMenu_InsertMenuItem','GUICtrlMenu_InsertMenuItemEx',
+ 'GUICtrlMenu_IsMenu','GUICtrlMenu_LoadMenu',
+ 'GUICtrlMenu_MapAccelerator','GUICtrlMenu_MenuItemFromPoint',
+ 'GUICtrlMenu_RemoveMenu','GUICtrlMenu_SetItemBitmaps',
+ 'GUICtrlMenu_SetItemBmp','GUICtrlMenu_SetItemBmpChecked',
+ 'GUICtrlMenu_SetItemBmpUnchecked','GUICtrlMenu_SetItemChecked',
+ 'GUICtrlMenu_SetItemData','GUICtrlMenu_SetItemDefault',
+ 'GUICtrlMenu_SetItemDisabled','GUICtrlMenu_SetItemEnabled',
+ 'GUICtrlMenu_SetItemGrayed','GUICtrlMenu_SetItemHighlighted',
+ 'GUICtrlMenu_SetItemID','GUICtrlMenu_SetItemInfo',
+ 'GUICtrlMenu_SetItemState','GUICtrlMenu_SetItemSubMenu',
+ 'GUICtrlMenu_SetItemText','GUICtrlMenu_SetItemType',
+ 'GUICtrlMenu_SetMenu','GUICtrlMenu_SetMenuBackground',
+ 'GUICtrlMenu_SetMenuContextHelpID','GUICtrlMenu_SetMenuData',
+ 'GUICtrlMenu_SetMenuDefaultItem','GUICtrlMenu_SetMenuHeight',
+ 'GUICtrlMenu_SetMenuInfo','GUICtrlMenu_SetMenuStyle',
+ 'GUICtrlMenu_TrackPopupMenu','GUICtrlMonthCal_Create',
+ 'GUICtrlMonthCal_Destroy','GUICtrlMonthCal_GetColor',
+ 'GUICtrlMonthCal_GetColorArray','GUICtrlMonthCal_GetCurSel',
+ 'GUICtrlMonthCal_GetCurSelStr','GUICtrlMonthCal_GetFirstDOW',
+ 'GUICtrlMonthCal_GetFirstDOWStr','GUICtrlMonthCal_GetMaxSelCount',
+ 'GUICtrlMonthCal_GetMaxTodayWidth',
+ 'GUICtrlMonthCal_GetMinReqHeight','GUICtrlMonthCal_GetMinReqRect',
+ 'GUICtrlMonthCal_GetMinReqRectArray',
+ 'GUICtrlMonthCal_GetMinReqWidth','GUICtrlMonthCal_GetMonthDelta',
+ 'GUICtrlMonthCal_GetMonthRange','GUICtrlMonthCal_GetMonthRangeMax',
+ 'GUICtrlMonthCal_GetMonthRangeMaxStr',
+ 'GUICtrlMonthCal_GetMonthRangeMin',
+ 'GUICtrlMonthCal_GetMonthRangeMinStr',
+ 'GUICtrlMonthCal_GetMonthRangeSpan','GUICtrlMonthCal_GetRange',
+ 'GUICtrlMonthCal_GetRangeMax','GUICtrlMonthCal_GetRangeMaxStr',
+ 'GUICtrlMonthCal_GetRangeMin','GUICtrlMonthCal_GetRangeMinStr',
+ 'GUICtrlMonthCal_GetSelRange','GUICtrlMonthCal_GetSelRangeMax',
+ 'GUICtrlMonthCal_GetSelRangeMaxStr',
+ 'GUICtrlMonthCal_GetSelRangeMin',
+ 'GUICtrlMonthCal_GetSelRangeMinStr','GUICtrlMonthCal_GetToday',
+ 'GUICtrlMonthCal_GetTodayStr','GUICtrlMonthCal_GetUnicodeFormat',
+ 'GUICtrlMonthCal_HitTest','GUICtrlMonthCal_SetColor',
+ 'GUICtrlMonthCal_SetCurSel','GUICtrlMonthCal_SetDayState',
+ 'GUICtrlMonthCal_SetFirstDOW','GUICtrlMonthCal_SetMaxSelCount',
+ 'GUICtrlMonthCal_SetMonthDelta','GUICtrlMonthCal_SetRange',
+ 'GUICtrlMonthCal_SetSelRange','GUICtrlMonthCal_SetToday',
+ 'GUICtrlMonthCal_SetUnicodeFormat','GUICtrlRebar_AddBand',
+ 'GUICtrlRebar_AddToolBarBand','GUICtrlRebar_BeginDrag',
+ 'GUICtrlRebar_Create','GUICtrlRebar_DeleteBand',
+ 'GUICtrlRebar_Destroy','GUICtrlRebar_DragMove',
+ 'GUICtrlRebar_EndDrag','GUICtrlRebar_GetBandBackColor',
+ 'GUICtrlRebar_GetBandBorders','GUICtrlRebar_GetBandBordersEx',
+ 'GUICtrlRebar_GetBandChildHandle','GUICtrlRebar_GetBandChildSize',
+ 'GUICtrlRebar_GetBandCount','GUICtrlRebar_GetBandForeColor',
+ 'GUICtrlRebar_GetBandHeaderSize','GUICtrlRebar_GetBandID',
+ 'GUICtrlRebar_GetBandIdealSize','GUICtrlRebar_GetBandLength',
+ 'GUICtrlRebar_GetBandLParam','GUICtrlRebar_GetBandMargins',
+ 'GUICtrlRebar_GetBandMarginsEx','GUICtrlRebar_GetBandRect',
+ 'GUICtrlRebar_GetBandRectEx','GUICtrlRebar_GetBandStyle',
+ 'GUICtrlRebar_GetBandStyleBreak',
+ 'GUICtrlRebar_GetBandStyleChildEdge',
+ 'GUICtrlRebar_GetBandStyleFixedBMP',
+ 'GUICtrlRebar_GetBandStyleFixedSize',
+ 'GUICtrlRebar_GetBandStyleGripperAlways',
+ 'GUICtrlRebar_GetBandStyleHidden',
+ 'GUICtrlRebar_GetBandStyleHideTitle',
+ 'GUICtrlRebar_GetBandStyleNoGripper',
+ 'GUICtrlRebar_GetBandStyleTopAlign',
+ 'GUICtrlRebar_GetBandStyleUseChevron',
+ 'GUICtrlRebar_GetBandStyleVariableHeight',
+ 'GUICtrlRebar_GetBandText','GUICtrlRebar_GetBarHeight',
+ 'GUICtrlRebar_GetBKColor','GUICtrlRebar_GetColorScheme',
+ 'GUICtrlRebar_GetRowCount','GUICtrlRebar_GetRowHeight',
+ 'GUICtrlRebar_GetTextColor','GUICtrlRebar_GetToolTips',
+ 'GUICtrlRebar_GetUnicodeFormat','GUICtrlRebar_HitTest',
+ 'GUICtrlRebar_IDToIndex','GUICtrlRebar_MaximizeBand',
+ 'GUICtrlRebar_MinimizeBand','GUICtrlRebar_MoveBand',
+ 'GUICtrlRebar_SetBandBackColor','GUICtrlRebar_SetBandForeColor',
+ 'GUICtrlRebar_SetBandHeaderSize','GUICtrlRebar_SetBandID',
+ 'GUICtrlRebar_SetBandIdealSize','GUICtrlRebar_SetBandLength',
+ 'GUICtrlRebar_SetBandLParam','GUICtrlRebar_SetBandStyle',
+ 'GUICtrlRebar_SetBandStyleBreak',
+ 'GUICtrlRebar_SetBandStyleChildEdge',
+ 'GUICtrlRebar_SetBandStyleFixedBMP',
+ 'GUICtrlRebar_SetBandStyleFixedSize',
+ 'GUICtrlRebar_SetBandStyleGripperAlways',
+ 'GUICtrlRebar_SetBandStyleHidden',
+ 'GUICtrlRebar_SetBandStyleHideTitle',
+ 'GUICtrlRebar_SetBandStyleNoGripper',
+ 'GUICtrlRebar_SetBandStyleTopAlign',
+ 'GUICtrlRebar_SetBandStyleUseChevron',
+ 'GUICtrlRebar_SetBandStyleVariableHeight',
+ 'GUICtrlRebar_SetBandText','GUICtrlRebar_SetBKColor',
+ 'GUICtrlRebar_SetColorScheme','GUICtrlRebar_SetTextColor',
+ 'GUICtrlRebar_SetToolTips','GUICtrlRebar_SetUnicodeFormat',
+ 'GUICtrlRebar_ShowBand','GUICtrlSlider_ClearSel',
+ 'GUICtrlSlider_ClearTics','GUICtrlSlider_Create',
+ 'GUICtrlSlider_Destroy','GUICtrlSlider_GetBuddy',
+ 'GUICtrlSlider_GetChannelRect','GUICtrlSlider_GetLineSize',
+ 'GUICtrlSlider_GetNumTics','GUICtrlSlider_GetPageSize',
+ 'GUICtrlSlider_GetPos','GUICtrlSlider_GetPTics',
+ 'GUICtrlSlider_GetRange','GUICtrlSlider_GetRangeMax',
+ 'GUICtrlSlider_GetRangeMin','GUICtrlSlider_GetSel',
+ 'GUICtrlSlider_GetSelEnd','GUICtrlSlider_GetSelStart',
+ 'GUICtrlSlider_GetThumbLength','GUICtrlSlider_GetThumbRect',
+ 'GUICtrlSlider_GetThumbRectEx','GUICtrlSlider_GetTic',
+ 'GUICtrlSlider_GetTicPos','GUICtrlSlider_GetToolTips',
+ 'GUICtrlSlider_GetUnicodeFormat','GUICtrlSlider_SetBuddy',
+ 'GUICtrlSlider_SetLineSize','GUICtrlSlider_SetPageSize',
+ 'GUICtrlSlider_SetPos','GUICtrlSlider_SetRange',
+ 'GUICtrlSlider_SetRangeMax','GUICtrlSlider_SetRangeMin',
+ 'GUICtrlSlider_SetSel','GUICtrlSlider_SetSelEnd',
+ 'GUICtrlSlider_SetSelStart','GUICtrlSlider_SetThumbLength',
+ 'GUICtrlSlider_SetTic','GUICtrlSlider_SetTicFreq',
+ 'GUICtrlSlider_SetTipSide','GUICtrlSlider_SetToolTips',
+ 'GUICtrlSlider_SetUnicodeFormat','GUICtrlStatusBar_Create',
+ 'GUICtrlStatusBar_Destroy','GUICtrlStatusBar_EmbedControl',
+ 'GUICtrlStatusBar_GetBorders','GUICtrlStatusBar_GetBordersHorz',
+ 'GUICtrlStatusBar_GetBordersRect','GUICtrlStatusBar_GetBordersVert',
+ 'GUICtrlStatusBar_GetCount','GUICtrlStatusBar_GetHeight',
+ 'GUICtrlStatusBar_GetIcon','GUICtrlStatusBar_GetParts',
+ 'GUICtrlStatusBar_GetRect','GUICtrlStatusBar_GetRectEx',
+ 'GUICtrlStatusBar_GetText','GUICtrlStatusBar_GetTextFlags',
+ 'GUICtrlStatusBar_GetTextLength','GUICtrlStatusBar_GetTextLengthEx',
+ 'GUICtrlStatusBar_GetTipText','GUICtrlStatusBar_GetUnicodeFormat',
+ 'GUICtrlStatusBar_GetWidth','GUICtrlStatusBar_IsSimple',
+ 'GUICtrlStatusBar_Resize','GUICtrlStatusBar_SetBkColor',
+ 'GUICtrlStatusBar_SetIcon','GUICtrlStatusBar_SetMinHeight',
+ 'GUICtrlStatusBar_SetParts','GUICtrlStatusBar_SetSimple',
+ 'GUICtrlStatusBar_SetText','GUICtrlStatusBar_SetTipText',
+ 'GUICtrlStatusBar_SetUnicodeFormat','GUICtrlStatusBar_ShowHide',
+ 'GUICtrlTab_Create','GUICtrlTab_DeleteAllItems',
+ 'GUICtrlTab_DeleteItem','GUICtrlTab_DeselectAll',
+ 'GUICtrlTab_Destroy','GUICtrlTab_FindTab','GUICtrlTab_GetCurFocus',
+ 'GUICtrlTab_GetCurSel','GUICtrlTab_GetDisplayRect',
+ 'GUICtrlTab_GetDisplayRectEx','GUICtrlTab_GetExtendedStyle',
+ 'GUICtrlTab_GetImageList','GUICtrlTab_GetItem',
+ 'GUICtrlTab_GetItemCount','GUICtrlTab_GetItemImage',
+ 'GUICtrlTab_GetItemParam','GUICtrlTab_GetItemRect',
+ 'GUICtrlTab_GetItemRectEx','GUICtrlTab_GetItemState',
+ 'GUICtrlTab_GetItemText','GUICtrlTab_GetRowCount',
+ 'GUICtrlTab_GetToolTips','GUICtrlTab_GetUnicodeFormat',
+ 'GUICtrlTab_HighlightItem','GUICtrlTab_HitTest',
+ 'GUICtrlTab_InsertItem','GUICtrlTab_RemoveImage',
+ 'GUICtrlTab_SetCurFocus','GUICtrlTab_SetCurSel',
+ 'GUICtrlTab_SetExtendedStyle','GUICtrlTab_SetImageList',
+ 'GUICtrlTab_SetItem','GUICtrlTab_SetItemImage',
+ 'GUICtrlTab_SetItemParam','GUICtrlTab_SetItemSize',
+ 'GUICtrlTab_SetItemState','GUICtrlTab_SetItemText',
+ 'GUICtrlTab_SetMinTabWidth','GUICtrlTab_SetPadding',
+ 'GUICtrlTab_SetToolTips','GUICtrlTab_SetUnicodeFormat',
+ 'GUICtrlToolbar_AddBitmap','GUICtrlToolbar_AddButton',
+ 'GUICtrlToolbar_AddButtonSep','GUICtrlToolbar_AddString',
+ 'GUICtrlToolbar_ButtonCount','GUICtrlToolbar_CheckButton',
+ 'GUICtrlToolbar_ClickAccel','GUICtrlToolbar_ClickButton',
+ 'GUICtrlToolbar_ClickIndex','GUICtrlToolbar_CommandToIndex',
+ 'GUICtrlToolbar_Create','GUICtrlToolbar_Customize',
+ 'GUICtrlToolbar_DeleteButton','GUICtrlToolbar_Destroy',
+ 'GUICtrlToolbar_EnableButton','GUICtrlToolbar_FindToolbar',
+ 'GUICtrlToolbar_GetAnchorHighlight','GUICtrlToolbar_GetBitmapFlags',
+ 'GUICtrlToolbar_GetButtonBitmap','GUICtrlToolbar_GetButtonInfo',
+ 'GUICtrlToolbar_GetButtonInfoEx','GUICtrlToolbar_GetButtonParam',
+ 'GUICtrlToolbar_GetButtonRect','GUICtrlToolbar_GetButtonRectEx',
+ 'GUICtrlToolbar_GetButtonSize','GUICtrlToolbar_GetButtonState',
+ 'GUICtrlToolbar_GetButtonStyle','GUICtrlToolbar_GetButtonText',
+ 'GUICtrlToolbar_GetColorScheme',
+ 'GUICtrlToolbar_GetDisabledImageList',
+ 'GUICtrlToolbar_GetExtendedStyle','GUICtrlToolbar_GetHotImageList',
+ 'GUICtrlToolbar_GetHotItem','GUICtrlToolbar_GetImageList',
+ 'GUICtrlToolbar_GetInsertMark','GUICtrlToolbar_GetInsertMarkColor',
+ 'GUICtrlToolbar_GetMaxSize','GUICtrlToolbar_GetMetrics',
+ 'GUICtrlToolbar_GetPadding','GUICtrlToolbar_GetRows',
+ 'GUICtrlToolbar_GetString','GUICtrlToolbar_GetStyle',
+ 'GUICtrlToolbar_GetStyleAltDrag',
+ 'GUICtrlToolbar_GetStyleCustomErase','GUICtrlToolbar_GetStyleFlat',
+ 'GUICtrlToolbar_GetStyleList','GUICtrlToolbar_GetStyleRegisterDrop',
+ 'GUICtrlToolbar_GetStyleToolTips',
+ 'GUICtrlToolbar_GetStyleTransparent',
+ 'GUICtrlToolbar_GetStyleWrapable','GUICtrlToolbar_GetTextRows',
+ 'GUICtrlToolbar_GetToolTips','GUICtrlToolbar_GetUnicodeFormat',
+ 'GUICtrlToolbar_HideButton','GUICtrlToolbar_HighlightButton',
+ 'GUICtrlToolbar_HitTest','GUICtrlToolbar_IndexToCommand',
+ 'GUICtrlToolbar_InsertButton','GUICtrlToolbar_InsertMarkHitTest',
+ 'GUICtrlToolbar_IsButtonChecked','GUICtrlToolbar_IsButtonEnabled',
+ 'GUICtrlToolbar_IsButtonHidden',
+ 'GUICtrlToolbar_IsButtonHighlighted',
+ 'GUICtrlToolbar_IsButtonIndeterminate',
+ 'GUICtrlToolbar_IsButtonPressed','GUICtrlToolbar_LoadBitmap',
+ 'GUICtrlToolbar_LoadImages','GUICtrlToolbar_MapAccelerator',
+ 'GUICtrlToolbar_MoveButton','GUICtrlToolbar_PressButton',
+ 'GUICtrlToolbar_SetAnchorHighlight','GUICtrlToolbar_SetBitmapSize',
+ 'GUICtrlToolbar_SetButtonBitMap','GUICtrlToolbar_SetButtonInfo',
+ 'GUICtrlToolbar_SetButtonInfoEx','GUICtrlToolbar_SetButtonParam',
+ 'GUICtrlToolbar_SetButtonSize','GUICtrlToolbar_SetButtonState',
+ 'GUICtrlToolbar_SetButtonStyle','GUICtrlToolbar_SetButtonText',
+ 'GUICtrlToolbar_SetButtonWidth','GUICtrlToolbar_SetCmdID',
+ 'GUICtrlToolbar_SetColorScheme',
+ 'GUICtrlToolbar_SetDisabledImageList',
+ 'GUICtrlToolbar_SetDrawTextFlags','GUICtrlToolbar_SetExtendedStyle',
+ 'GUICtrlToolbar_SetHotImageList','GUICtrlToolbar_SetHotItem',
+ 'GUICtrlToolbar_SetImageList','GUICtrlToolbar_SetIndent',
+ 'GUICtrlToolbar_SetIndeterminate','GUICtrlToolbar_SetInsertMark',
+ 'GUICtrlToolbar_SetInsertMarkColor','GUICtrlToolbar_SetMaxTextRows',
+ 'GUICtrlToolbar_SetMetrics','GUICtrlToolbar_SetPadding',
+ 'GUICtrlToolbar_SetParent','GUICtrlToolbar_SetRows',
+ 'GUICtrlToolbar_SetStyle','GUICtrlToolbar_SetStyleAltDrag',
+ 'GUICtrlToolbar_SetStyleCustomErase','GUICtrlToolbar_SetStyleFlat',
+ 'GUICtrlToolbar_SetStyleList','GUICtrlToolbar_SetStyleRegisterDrop',
+ 'GUICtrlToolbar_SetStyleToolTips',
+ 'GUICtrlToolbar_SetStyleTransparent',
+ 'GUICtrlToolbar_SetStyleWrapable','GUICtrlToolbar_SetToolTips',
+ 'GUICtrlToolbar_SetUnicodeFormat','GUICtrlToolbar_SetWindowTheme',
+ 'GUICtrlTreeView_Add','GUICtrlTreeView_AddChild',
+ 'GUICtrlTreeView_AddChildFirst','GUICtrlTreeView_AddFirst',
+ 'GUICtrlTreeView_BeginUpdate','GUICtrlTreeView_ClickItem',
+ 'GUICtrlTreeView_Create','GUICtrlTreeView_CreateDragImage',
+ 'GUICtrlTreeView_CreateSolidBitMap','GUICtrlTreeView_Delete',
+ 'GUICtrlTreeView_DeleteAll','GUICtrlTreeView_DeleteChildren',
+ 'GUICtrlTreeView_Destroy','GUICtrlTreeView_DisplayRect',
+ 'GUICtrlTreeView_DisplayRectEx','GUICtrlTreeView_EditText',
+ 'GUICtrlTreeView_EndEdit','GUICtrlTreeView_EndUpdate',
+ 'GUICtrlTreeView_EnsureVisible','GUICtrlTreeView_Expand',
+ 'GUICtrlTreeView_ExpandedOnce','GUICtrlTreeView_FindItem',
+ 'GUICtrlTreeView_FindItemEx','GUICtrlTreeView_GetBkColor',
+ 'GUICtrlTreeView_GetBold','GUICtrlTreeView_GetChecked',
+ 'GUICtrlTreeView_GetChildCount','GUICtrlTreeView_GetChildren',
+ 'GUICtrlTreeView_GetCount','GUICtrlTreeView_GetCut',
+ 'GUICtrlTreeView_GetDropTarget','GUICtrlTreeView_GetEditControl',
+ 'GUICtrlTreeView_GetExpanded','GUICtrlTreeView_GetFirstChild',
+ 'GUICtrlTreeView_GetFirstItem','GUICtrlTreeView_GetFirstVisible',
+ 'GUICtrlTreeView_GetFocused','GUICtrlTreeView_GetHeight',
+ 'GUICtrlTreeView_GetImageIndex',
+ 'GUICtrlTreeView_GetImageListIconHandle',
+ 'GUICtrlTreeView_GetIndent','GUICtrlTreeView_GetInsertMarkColor',
+ 'GUICtrlTreeView_GetISearchString','GUICtrlTreeView_GetItemByIndex',
+ 'GUICtrlTreeView_GetItemHandle','GUICtrlTreeView_GetItemParam',
+ 'GUICtrlTreeView_GetLastChild','GUICtrlTreeView_GetLineColor',
+ 'GUICtrlTreeView_GetNext','GUICtrlTreeView_GetNextChild',
+ 'GUICtrlTreeView_GetNextSibling','GUICtrlTreeView_GetNextVisible',
+ 'GUICtrlTreeView_GetNormalImageList',
+ 'GUICtrlTreeView_GetParentHandle','GUICtrlTreeView_GetParentParam',
+ 'GUICtrlTreeView_GetPrev','GUICtrlTreeView_GetPrevChild',
+ 'GUICtrlTreeView_GetPrevSibling','GUICtrlTreeView_GetPrevVisible',
+ 'GUICtrlTreeView_GetScrollTime','GUICtrlTreeView_GetSelected',
+ 'GUICtrlTreeView_GetSelectedImageIndex',
+ 'GUICtrlTreeView_GetSelection','GUICtrlTreeView_GetSiblingCount',
+ 'GUICtrlTreeView_GetState','GUICtrlTreeView_GetStateImageIndex',
+ 'GUICtrlTreeView_GetStateImageList','GUICtrlTreeView_GetText',
+ 'GUICtrlTreeView_GetTextColor','GUICtrlTreeView_GetToolTips',
+ 'GUICtrlTreeView_GetTree','GUICtrlTreeView_GetUnicodeFormat',
+ 'GUICtrlTreeView_GetVisible','GUICtrlTreeView_GetVisibleCount',
+ 'GUICtrlTreeView_HitTest','GUICtrlTreeView_HitTestEx',
+ 'GUICtrlTreeView_HitTestItem','GUICtrlTreeView_Index',
+ 'GUICtrlTreeView_InsertItem','GUICtrlTreeView_IsFirstItem',
+ 'GUICtrlTreeView_IsParent','GUICtrlTreeView_Level',
+ 'GUICtrlTreeView_SelectItem','GUICtrlTreeView_SelectItemByIndex',
+ 'GUICtrlTreeView_SetBkColor','GUICtrlTreeView_SetBold',
+ 'GUICtrlTreeView_SetChecked','GUICtrlTreeView_SetCheckedByIndex',
+ 'GUICtrlTreeView_SetChildren','GUICtrlTreeView_SetCut',
+ 'GUICtrlTreeView_SetDropTarget','GUICtrlTreeView_SetFocused',
+ 'GUICtrlTreeView_SetHeight','GUICtrlTreeView_SetIcon',
+ 'GUICtrlTreeView_SetImageIndex','GUICtrlTreeView_SetIndent',
+ 'GUICtrlTreeView_SetInsertMark',
+ 'GUICtrlTreeView_SetInsertMarkColor',
+ 'GUICtrlTreeView_SetItemHeight','GUICtrlTreeView_SetItemParam',
+ 'GUICtrlTreeView_SetLineColor','GUICtrlTreeView_SetNormalImageList',
+ 'GUICtrlTreeView_SetScrollTime','GUICtrlTreeView_SetSelected',
+ 'GUICtrlTreeView_SetSelectedImageIndex','GUICtrlTreeView_SetState',
+ 'GUICtrlTreeView_SetStateImageIndex',
+ 'GUICtrlTreeView_SetStateImageList','GUICtrlTreeView_SetText',
+ 'GUICtrlTreeView_SetTextColor','GUICtrlTreeView_SetToolTips',
+ 'GUICtrlTreeView_SetUnicodeFormat','GUICtrlTreeView_Sort',
+ 'GUIImageList_Add','GUIImageList_AddBitmap','GUIImageList_AddIcon',
+ 'GUIImageList_AddMasked','GUIImageList_BeginDrag',
+ 'GUIImageList_Copy','GUIImageList_Create','GUIImageList_Destroy',
+ 'GUIImageList_DestroyIcon','GUIImageList_DragEnter',
+ 'GUIImageList_DragLeave','GUIImageList_DragMove',
+ 'GUIImageList_Draw','GUIImageList_DrawEx','GUIImageList_Duplicate',
+ 'GUIImageList_EndDrag','GUIImageList_GetBkColor',
+ 'GUIImageList_GetIcon','GUIImageList_GetIconHeight',
+ 'GUIImageList_GetIconSize','GUIImageList_GetIconSizeEx',
+ 'GUIImageList_GetIconWidth','GUIImageList_GetImageCount',
+ 'GUIImageList_GetImageInfoEx','GUIImageList_Remove',
+ 'GUIImageList_ReplaceIcon','GUIImageList_SetBkColor',
+ 'GUIImageList_SetIconSize','GUIImageList_SetImageCount',
+ 'GUIImageList_Swap','GUIScrollBars_EnableScrollBar',
+ 'GUIScrollBars_GetScrollBarInfoEx','GUIScrollBars_GetScrollBarRect',
+ 'GUIScrollBars_GetScrollBarRGState',
+ 'GUIScrollBars_GetScrollBarXYLineButton',
+ 'GUIScrollBars_GetScrollBarXYThumbBottom',
+ 'GUIScrollBars_GetScrollBarXYThumbTop',
+ 'GUIScrollBars_GetScrollInfo','GUIScrollBars_GetScrollInfoEx',
+ 'GUIScrollBars_GetScrollInfoMax','GUIScrollBars_GetScrollInfoMin',
+ 'GUIScrollBars_GetScrollInfoPage','GUIScrollBars_GetScrollInfoPos',
+ 'GUIScrollBars_GetScrollInfoTrackPos','GUIScrollBars_GetScrollPos',
+ 'GUIScrollBars_GetScrollRange','GUIScrollBars_Init',
+ 'GUIScrollBars_ScrollWindow','GUIScrollBars_SetScrollInfo',
+ 'GUIScrollBars_SetScrollInfoMax','GUIScrollBars_SetScrollInfoMin',
+ 'GUIScrollBars_SetScrollInfoPage','GUIScrollBars_SetScrollInfoPos',
+ 'GUIScrollBars_SetScrollRange','GUIScrollBars_ShowScrollBar',
+ 'GUIToolTip_Activate','GUIToolTip_AddTool','GUIToolTip_AdjustRect',
+ 'GUIToolTip_BitsToTTF','GUIToolTip_Create','GUIToolTip_DelTool',
+ 'GUIToolTip_Destroy','GUIToolTip_EnumTools',
+ 'GUIToolTip_GetBubbleHeight','GUIToolTip_GetBubbleSize',
+ 'GUIToolTip_GetBubbleWidth','GUIToolTip_GetCurrentTool',
+ 'GUIToolTip_GetDelayTime','GUIToolTip_GetMargin',
+ 'GUIToolTip_GetMarginEx','GUIToolTip_GetMaxTipWidth',
+ 'GUIToolTip_GetText','GUIToolTip_GetTipBkColor',
+ 'GUIToolTip_GetTipTextColor','GUIToolTip_GetTitleBitMap',
+ 'GUIToolTip_GetTitleText','GUIToolTip_GetToolCount',
+ 'GUIToolTip_GetToolInfo','GUIToolTip_HitTest',
+ 'GUIToolTip_NewToolRect','GUIToolTip_Pop','GUIToolTip_PopUp',
+ 'GUIToolTip_SetDelayTime','GUIToolTip_SetMargin',
+ 'GUIToolTip_SetMaxTipWidth','GUIToolTip_SetTipBkColor',
+ 'GUIToolTip_SetTipTextColor','GUIToolTip_SetTitle',
+ 'GUIToolTip_SetToolInfo','GUIToolTip_SetWindowTheme',
+ 'GUIToolTip_ToolExists','GUIToolTip_ToolToArray',
+ 'GUIToolTip_TrackActivate','GUIToolTip_TrackPosition',
+ 'GUIToolTip_TTFToBits','GUIToolTip_Update',
+ 'GUIToolTip_UpdateTipText','HexToString','IE_Example',
+ 'IE_Introduction','IE_VersionInfo','IEAction','IEAttach',
+ 'IEBodyReadHTML','IEBodyReadText','IEBodyWriteHTML','IECreate',
+ 'IECreateEmbedded','IEDocGetObj','IEDocInsertHTML',
+ 'IEDocInsertText','IEDocReadHTML','IEDocWriteHTML',
+ 'IEErrorHandlerDeRegister','IEErrorHandlerRegister','IEErrorNotify',
+ 'IEFormElementCheckBoxSelect','IEFormElementGetCollection',
+ 'IEFormElementGetObjByName','IEFormElementGetValue',
+ 'IEFormElementOptionSelect','IEFormElementRadioSelect',
+ 'IEFormElementSetValue','IEFormGetCollection','IEFormGetObjByName',
+ 'IEFormImageClick','IEFormReset','IEFormSubmit',
+ 'IEFrameGetCollection','IEFrameGetObjByName','IEGetObjById',
+ 'IEGetObjByName','IEHeadInsertEventScript','IEImgClick',
+ 'IEImgGetCollection','IEIsFrameSet','IELinkClickByIndex',
+ 'IELinkClickByText','IELinkGetCollection','IELoadWait',
+ 'IELoadWaitTimeout','IENavigate','IEPropertyGet','IEPropertySet',
+ 'IEQuit','IETableGetCollection','IETableWriteToArray',
+ 'IETagNameAllGetCollection','IETagNameGetCollection','Iif',
+ 'INetExplorerCapable','INetGetSource','INetMail','INetSmtpMail',
+ 'IsPressed','MathCheckDiv','Max','MemGlobalAlloc','MemGlobalFree',
+ 'MemGlobalLock','MemGlobalSize','MemGlobalUnlock','MemMoveMemory',
+ 'MemMsgBox','MemShowError','MemVirtualAlloc','MemVirtualAllocEx',
+ 'MemVirtualFree','MemVirtualFreeEx','Min','MouseTrap',
+ 'NamedPipes_CallNamedPipe','NamedPipes_ConnectNamedPipe',
+ 'NamedPipes_CreateNamedPipe','NamedPipes_CreatePipe',
+ 'NamedPipes_DisconnectNamedPipe',
+ 'NamedPipes_GetNamedPipeHandleState','NamedPipes_GetNamedPipeInfo',
+ 'NamedPipes_PeekNamedPipe','NamedPipes_SetNamedPipeHandleState',
+ 'NamedPipes_TransactNamedPipe','NamedPipes_WaitNamedPipe',
+ 'Net_Share_ConnectionEnum','Net_Share_FileClose',
+ 'Net_Share_FileEnum','Net_Share_FileGetInfo','Net_Share_PermStr',
+ 'Net_Share_ResourceStr','Net_Share_SessionDel',
+ 'Net_Share_SessionEnum','Net_Share_SessionGetInfo',
+ 'Net_Share_ShareAdd','Net_Share_ShareCheck','Net_Share_ShareDel',
+ 'Net_Share_ShareEnum','Net_Share_ShareGetInfo',
+ 'Net_Share_ShareSetInfo','Net_Share_StatisticsGetSvr',
+ 'Net_Share_StatisticsGetWrk','Now','NowCalc','NowCalcDate',
+ 'NowDate','NowTime','PathFull','PathMake','PathSplit',
+ 'ProcessGetName','ProcessGetPriority','Radian',
+ 'ReplaceStringInFile','RunDOS','ScreenCapture_Capture',
+ 'ScreenCapture_CaptureWnd','ScreenCapture_SaveImage',
+ 'ScreenCapture_SetBMPFormat','ScreenCapture_SetJPGQuality',
+ 'ScreenCapture_SetTIFColorDepth','ScreenCapture_SetTIFCompression',
+ 'Security__AdjustTokenPrivileges','Security__GetAccountSid',
+ 'Security__GetLengthSid','Security__GetTokenInformation',
+ 'Security__ImpersonateSelf','Security__IsValidSid',
+ 'Security__LookupAccountName','Security__LookupAccountSid',
+ 'Security__LookupPrivilegeValue','Security__OpenProcessToken',
+ 'Security__OpenThreadToken','Security__OpenThreadTokenEx',
+ 'Security__SetPrivilege','Security__SidToStringSid',
+ 'Security__SidTypeStr','Security__StringSidToSid','SendMessage',
+ 'SendMessageA','SetDate','SetTime','Singleton','SoundClose',
+ 'SoundLength','SoundOpen','SoundPause','SoundPlay','SoundPos',
+ 'SoundResume','SoundSeek','SoundStatus','SoundStop',
+ 'SQLite_Changes','SQLite_Close','SQLite_Display2DResult',
+ 'SQLite_Encode','SQLite_ErrCode','SQLite_ErrMsg','SQLite_Escape',
+ 'SQLite_Exec','SQLite_FetchData','SQLite_FetchNames',
+ 'SQLite_GetTable','SQLite_GetTable2d','SQLite_LastInsertRowID',
+ 'SQLite_LibVersion','SQLite_Open','SQLite_Query',
+ 'SQLite_QueryFinalize','SQLite_QueryReset','SQLite_QuerySingleRow',
+ 'SQLite_SaveMode','SQLite_SetTimeout','SQLite_Shutdown',
+ 'SQLite_SQLiteExe','SQLite_Startup','SQLite_TotalChanges',
+ 'StringAddComma','StringBetween','StringEncrypt','StringInsert',
+ 'StringProper','StringRepeat','StringReverse','StringSplit',
+ 'StringToHex','TCPIpToName','TempFile','TicksToTime','Timer_Diff',
+ 'Timer_GetTimerID','Timer_Init','Timer_KillAllTimers',
+ 'Timer_KillTimer','Timer_SetTimer','TimeToTicks','VersionCompare',
+ 'viClose','viExecCommand','viFindGpib','viGpibBusReset','viGTL',
+ 'viOpen','viSetAttribute','viSetTimeout','WeekNumberISO',
+ 'WinAPI_AttachConsole','WinAPI_AttachThreadInput','WinAPI_Beep',
+ 'WinAPI_BitBlt','WinAPI_CallNextHookEx','WinAPI_Check',
+ 'WinAPI_ClientToScreen','WinAPI_CloseHandle',
+ 'WinAPI_CommDlgExtendedError','WinAPI_CopyIcon',
+ 'WinAPI_CreateBitmap','WinAPI_CreateCompatibleBitmap',
+ 'WinAPI_CreateCompatibleDC','WinAPI_CreateEvent',
+ 'WinAPI_CreateFile','WinAPI_CreateFont','WinAPI_CreateFontIndirect',
+ 'WinAPI_CreateProcess','WinAPI_CreateSolidBitmap',
+ 'WinAPI_CreateSolidBrush','WinAPI_CreateWindowEx',
+ 'WinAPI_DefWindowProc','WinAPI_DeleteDC','WinAPI_DeleteObject',
+ 'WinAPI_DestroyIcon','WinAPI_DestroyWindow','WinAPI_DrawEdge',
+ 'WinAPI_DrawFrameControl','WinAPI_DrawIcon','WinAPI_DrawIconEx',
+ 'WinAPI_DrawText','WinAPI_EnableWindow','WinAPI_EnumDisplayDevices',
+ 'WinAPI_EnumWindows','WinAPI_EnumWindowsPopup',
+ 'WinAPI_EnumWindowsTop','WinAPI_ExpandEnvironmentStrings',
+ 'WinAPI_ExtractIconEx','WinAPI_FatalAppExit','WinAPI_FillRect',
+ 'WinAPI_FindExecutable','WinAPI_FindWindow','WinAPI_FlashWindow',
+ 'WinAPI_FlashWindowEx','WinAPI_FloatToInt',
+ 'WinAPI_FlushFileBuffers','WinAPI_FormatMessage','WinAPI_FrameRect',
+ 'WinAPI_FreeLibrary','WinAPI_GetAncestor','WinAPI_GetAsyncKeyState',
+ 'WinAPI_GetClassName','WinAPI_GetClientHeight',
+ 'WinAPI_GetClientRect','WinAPI_GetClientWidth',
+ 'WinAPI_GetCurrentProcess','WinAPI_GetCurrentProcessID',
+ 'WinAPI_GetCurrentThread','WinAPI_GetCurrentThreadId',
+ 'WinAPI_GetCursorInfo','WinAPI_GetDC','WinAPI_GetDesktopWindow',
+ 'WinAPI_GetDeviceCaps','WinAPI_GetDIBits','WinAPI_GetDlgCtrlID',
+ 'WinAPI_GetDlgItem','WinAPI_GetFileSizeEx','WinAPI_GetFocus',
+ 'WinAPI_GetForegroundWindow','WinAPI_GetIconInfo',
+ 'WinAPI_GetLastError','WinAPI_GetLastErrorMessage',
+ 'WinAPI_GetModuleHandle','WinAPI_GetMousePos','WinAPI_GetMousePosX',
+ 'WinAPI_GetMousePosY','WinAPI_GetObject','WinAPI_GetOpenFileName',
+ 'WinAPI_GetOverlappedResult','WinAPI_GetParent',
+ 'WinAPI_GetProcessAffinityMask','WinAPI_GetSaveFileName',
+ 'WinAPI_GetStdHandle','WinAPI_GetStockObject','WinAPI_GetSysColor',
+ 'WinAPI_GetSysColorBrush','WinAPI_GetSystemMetrics',
+ 'WinAPI_GetTextExtentPoint32','WinAPI_GetWindow',
+ 'WinAPI_GetWindowDC','WinAPI_GetWindowHeight',
+ 'WinAPI_GetWindowLong','WinAPI_GetWindowRect',
+ 'WinAPI_GetWindowText','WinAPI_GetWindowThreadProcessId',
+ 'WinAPI_GetWindowWidth','WinAPI_GetXYFromPoint',
+ 'WinAPI_GlobalMemStatus','WinAPI_GUIDFromString',
+ 'WinAPI_GUIDFromStringEx','WinAPI_HiWord','WinAPI_InProcess',
+ 'WinAPI_IntToFloat','WinAPI_InvalidateRect','WinAPI_IsClassName',
+ 'WinAPI_IsWindow','WinAPI_IsWindowVisible','WinAPI_LoadBitmap',
+ 'WinAPI_LoadImage','WinAPI_LoadLibrary','WinAPI_LoadLibraryEx',
+ 'WinAPI_LoadShell32Icon','WinAPI_LoadString','WinAPI_LocalFree',
+ 'WinAPI_LoWord','WinAPI_MakeDWord','WinAPI_MAKELANGID',
+ 'WinAPI_MAKELCID','WinAPI_MakeLong','WinAPI_MessageBeep',
+ 'WinAPI_Mouse_Event','WinAPI_MoveWindow','WinAPI_MsgBox',
+ 'WinAPI_MulDiv','WinAPI_MultiByteToWideChar',
+ 'WinAPI_MultiByteToWideCharEx','WinAPI_OpenProcess',
+ 'WinAPI_PointFromRect','WinAPI_PostMessage','WinAPI_PrimaryLangId',
+ 'WinAPI_PtInRect','WinAPI_ReadFile','WinAPI_ReadProcessMemory',
+ 'WinAPI_RectIsEmpty','WinAPI_RedrawWindow',
+ 'WinAPI_RegisterWindowMessage','WinAPI_ReleaseCapture',
+ 'WinAPI_ReleaseDC','WinAPI_ScreenToClient','WinAPI_SelectObject',
+ 'WinAPI_SetBkColor','WinAPI_SetCapture','WinAPI_SetCursor',
+ 'WinAPI_SetDefaultPrinter','WinAPI_SetDIBits','WinAPI_SetEvent',
+ 'WinAPI_SetFocus','WinAPI_SetFont','WinAPI_SetHandleInformation',
+ 'WinAPI_SetLastError','WinAPI_SetParent',
+ 'WinAPI_SetProcessAffinityMask','WinAPI_SetSysColors',
+ 'WinAPI_SetTextColor','WinAPI_SetWindowLong','WinAPI_SetWindowPos',
+ 'WinAPI_SetWindowsHookEx','WinAPI_SetWindowText',
+ 'WinAPI_ShowCursor','WinAPI_ShowError','WinAPI_ShowMsg',
+ 'WinAPI_ShowWindow','WinAPI_StringFromGUID','WinAPI_SubLangId',
+ 'WinAPI_SystemParametersInfo','WinAPI_TwipsPerPixelX',
+ 'WinAPI_TwipsPerPixelY','WinAPI_UnhookWindowsHookEx',
+ 'WinAPI_UpdateLayeredWindow','WinAPI_UpdateWindow',
+ 'WinAPI_ValidateClassName','WinAPI_WaitForInputIdle',
+ 'WinAPI_WaitForMultipleObjects','WinAPI_WaitForSingleObject',
+ 'WinAPI_WideCharToMultiByte','WinAPI_WindowFromPoint',
+ 'WinAPI_WriteConsole','WinAPI_WriteFile',
+ 'WinAPI_WriteProcessMemory','WinNet_AddConnection',
+ 'WinNet_AddConnection2','WinNet_AddConnection3',
+ 'WinNet_CancelConnection','WinNet_CancelConnection2',
+ 'WinNet_CloseEnum','WinNet_ConnectionDialog',
+ 'WinNet_ConnectionDialog1','WinNet_DisconnectDialog',
+ 'WinNet_DisconnectDialog1','WinNet_EnumResource',
+ 'WinNet_GetConnection','WinNet_GetConnectionPerformance',
+ 'WinNet_GetLastError','WinNet_GetNetworkInformation',
+ 'WinNet_GetProviderName','WinNet_GetResourceInformation',
+ 'WinNet_GetResourceParent','WinNet_GetUniversalName',
+ 'WinNet_GetUser','WinNet_OpenEnum','WinNet_RestoreConnection',
+ 'WinNet_UseConnection','Word_VersionInfo','WordAttach','WordCreate',
+ 'WordDocAdd','WordDocAddLink','WordDocAddPicture','WordDocClose',
+ 'WordDocFindReplace','WordDocGetCollection',
+ 'WordDocLinkGetCollection','WordDocOpen','WordDocPrint',
+ 'WordDocPropertyGet','WordDocPropertySet','WordDocSave',
+ 'WordDocSaveAs','WordErrorHandlerDeRegister',
+ 'WordErrorHandlerRegister','WordErrorNotify','WordMacroRun',
+ 'WordPropertyGet','WordPropertySet','WordQuit'
+ ),
+ 5 => array(
+ 'ce','comments-end','comments-start','cs','include','include-once',
+ 'NoTrayIcon','RequireAdmin'
+ ),
+ 6 => array(
+ 'AutoIt3Wrapper_Au3Check_Parameters',
+ 'AutoIt3Wrapper_Au3Check_Stop_OnWarning',
+ 'AutoIt3Wrapper_Change2CUI','AutoIt3Wrapper_Compression',
+ 'AutoIt3Wrapper_cvsWrapper_Parameters','AutoIt3Wrapper_Icon',
+ 'AutoIt3Wrapper_Outfile','AutoIt3Wrapper_Outfile_Type',
+ 'AutoIt3Wrapper_Plugin_Funcs','AutoIt3Wrapper_Res_Comment',
+ 'AutoIt3Wrapper_Res_Description','AutoIt3Wrapper_Res_Field',
+ 'AutoIt3Wrapper_Res_File_Add','AutoIt3Wrapper_Res_Fileversion',
+ 'AutoIt3Wrapper_Res_FileVersion_AutoIncrement',
+ 'AutoIt3Wrapper_Res_Icon_Add','AutoIt3Wrapper_Res_Language',
+ 'AutoIt3Wrapper_Res_LegalCopyright',
+ 'AutoIt3Wrapper_res_requestedExecutionLevel',
+ 'AutoIt3Wrapper_Res_SaveSource','AutoIt3Wrapper_Run_After',
+ 'AutoIt3Wrapper_Run_Au3check','AutoIt3Wrapper_Run_Before',
+ 'AutoIt3Wrapper_Run_cvsWrapper','AutoIt3Wrapper_Run_Debug_Mode',
+ 'AutoIt3Wrapper_Run_Obfuscator','AutoIt3Wrapper_Run_Tidy',
+ 'AutoIt3Wrapper_Tidy_Stop_OnError','AutoIt3Wrapper_UseAnsi',
+ 'AutoIt3Wrapper_UseUpx','AutoIt3Wrapper_UseX64',
+ 'AutoIt3Wrapper_Version','EndRegion','forceref',
+ 'Obfuscator_Ignore_Funcs','Obfuscator_Ignore_Variables',
+ 'Obfuscator_Parameters','Region','Tidy_Parameters'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(',')','[',']',
+ '+','-','*','/','&','^',
+ '=','+=','-=','*=','/=','&=',
+ '==','<','<=','>','>=',
+ ',','.'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF; font-weight: bold;',
+ 2 => 'color: #800000; font-weight: bold;',
+ 3 => 'color: #000080; font-style: italic; font-weight: bold;',
+ 4 => 'color: #0080FF; font-style: italic; font-weight: bold;',
+ 5 => 'color: #F000FF; font-style: italic;',
+ 6 => 'color: #A00FF0; font-style: italic;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'font-style: italic; color: #009933;',
+ 'MULTI' => 'font-style: italic; color: #669900;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #FF0000; font-weight: bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'font-weight: bold; color: #008080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #AC00A9; font-style: italic; font-weight: bold;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000FF; font-style: italic; font-weight: bold;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #FF0000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'font-weight: bold; color: #AA0000;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.autoitscript.com/autoit3/docs/keywords.htm',
+ 2 => 'http://www.autoitscript.com/autoit3/docs/macros.htm',
+ 3 => 'http://www.autoitscript.com/autoit3/docs/functions/{FNAME}.htm',
+ 4 => '',
+ 5 => '',
+ 6 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 4 => array(
+ 'DISALLOWED_BEFORE' => '(?<!\w)\_'
+ ),
+ 5 => array(
+ 'DISALLOWED_BEFORE' => '(?<!\w)\#'
+ ),
+ 6 => array(
+ 'DISALLOWED_BEFORE' => '(?<!\w)\#'
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php
new file mode 100644
index 000000000..c0526e956
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php
@@ -0,0 +1,194 @@
+<?php
+/*************************************************************************************
+ * avisynth.php
+ * --------
+ * Author: Ryan Jones (sciguyryan@gmail.com)
+ * Copyright: (c) 2008 Ryan Jones
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/10/08
+ *
+ * AviSynth language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/08 (1.0.8.1)
+ * - First Release
+ *
+ * TODO (updated 2008/10/08)
+ * -------------------------
+ * * There are also some special words that can't currently be specified directly in GeSHi as they may
+ * also be used as variables which would really mess things up.
+ * * Also there is an issue with the escape character as this language uses a muti-character escape system. Escape char should be """ but has been left
+ * as empty due to this restiction.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'AviSynth',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/', '[*' => '*]'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ // Reserved words.
+ 1 => array(
+ 'try', 'cache', 'function', 'global', 'return'
+ ),
+ // Constants / special variables.
+ 2 => array(
+ 'true', 'yes', 'false', 'no', '__END__'
+ ),
+ // Internal Filters.
+ 3 => array(
+ 'AviSource', 'AviFileSource', 'AddBorders', 'AlignedSplice', 'AssumeFPS', 'AssumeScaledFPS',
+ 'AssumeFrameBased', 'AssumeFieldBased', 'AssumeBFF', 'AssumeTFF', 'Amplify', 'AmplifydB',
+ 'AssumeSampleRate', 'AudioDub', 'AudioDubEx', 'Animate', 'ApplyRange',
+ 'BicubicResize', 'BilinearResize', 'BlackmanResize', 'Blur', 'Bob', 'BlankClip', 'Blackness',
+ 'ColorYUV', 'ConvertBackToYUY2', 'ConvertToRGB', 'ConvertToRGB24', 'ConvertToRGB32',
+ 'ConvertToYUY2', 'ConvertToY8', 'ConvertToYV411', 'ConvertToYV12', 'ConvertToYV16', 'ConvertToYV24',
+ 'ColorKeyMask', 'Crop', 'CropBottom', 'ChangeFPS', 'ConvertFPS', 'ComplementParity', 'ConvertAudioTo8bit',
+ 'ConvertAudioTo16bit', 'ConvertAudioTo24bit', 'ConvertAudioTo32bit', 'ConvertAudioToFloat', 'ConvertToMono',
+ 'ConditionalFilter', 'ConditionalReader', 'ColorBars', 'Compare',
+ 'DirectShowSource', 'DeleteFrame', 'Dissolve', 'DuplicateFrame', 'DoubleWeave', 'DelayAudio',
+ 'EnsureVBRMP3Sync',
+ 'FixLuminance', 'FlipHorizontal', 'FlipVertical', 'FixBrokenChromaUpsampling', 'FadeIn0', 'FadeIn',
+ 'FadeIn2', 'FadeOut0', 'FadeOut', 'FadeOut2', 'FadeIO0', 'FadeIO', 'FadeIO2', 'FreezeFrame', 'FrameEvaluate',
+ 'GreyScale', 'GaussResize', 'GeneralConvolution', 'GetChannel', 'GetLeftChannel', 'GetRightChannel',
+ 'HorizontalReduceBy2', 'Histogram',
+ 'ImageReader', 'ImageSource', 'ImageWriter', 'Invert', 'Interleave', 'Info',
+ 'KillAudio', 'KillVideo',
+ 'Levels', 'Limiter', 'Layer', 'Letterbox', 'LanczosResize', 'Lanczos4Resize', 'Loop',
+ 'MergeARGB', 'MergeRGB', 'MergeChroma', 'MergeLuma', 'Merge', 'Mask', 'MaskHS', 'MergeChannels', 'MixAudio',
+ 'MonoToStereo', 'MessageClip',
+ 'Normalize',
+ 'OpenDMLSource', 'Overlay',
+ 'PointResize', 'PeculiarBlend', 'Pulldown',
+ 'RGBAdjust', 'ResetMask', 'Reverse', 'ResampleAudio', 'ReduceBy2',
+ 'SegmentedAviSource', 'SegmentedDirectShowSource', 'SoundOut', 'ShowAlpha', 'ShowRed', 'ShowGreen',
+ 'ShowBlue', 'SwapUV', 'Subtract', 'SincResize', 'Spline16Resize', 'Spline36Resize', 'Spline64Resize',
+ 'SelectEven', 'SelectOdd', 'SelectEvery', 'SelectRangeEvery', 'Sharpen', 'SpatialSoften', 'SeparateFields',
+ 'ShowFiveVersions', 'ShowFrameNumber', 'ShowSMPTE', 'ShowTime', 'StackHorizontal', 'StackVertical', 'Subtitle',
+ 'SwapFields', 'SuperEQ', 'SSRC', 'ScriptClip',
+ 'Tweak', 'TurnLeft', 'TurnRight', 'Turn180', 'TemporalSoften', 'TimeStretch', 'TCPServer', 'TCPSource', 'Trim',
+ 'Tone',
+ 'UToY', 'UToY8', 'UnalignedSplice',
+ 'VToY', 'VToY8', 'VerticalReduceBy2', 'Version',
+ 'WavSource', 'Weave', 'WriteFile', 'WriteFileIf', 'WriteFileStart', 'WriteFileEnd',
+ 'YToUV'
+ ),
+ // Internal functions.
+ 4 => array(
+ 'Abs', 'Apply', 'Assert', 'AverageLuma', 'AverageChromaU', 'AverageChromaV',
+ 'Ceil', 'Cos', 'Chr', 'ChromaUDifference', 'ChromaVDifference',
+ 'Defined', 'Default',
+ 'Exp', 'Exist', 'Eval',
+ 'Floor', 'Frac', 'Float', 'Findstr', 'GetMTMode',
+ 'HexValue',
+ 'Int', 'IsBool', 'IsClip', 'IsFloat', 'IsInt', 'IsString', 'Import',
+ 'LoadPlugin', 'Log', 'LCase', 'LeftStr', 'LumaDifference', 'LoadVirtualDubPlugin', 'LoadVFAPIPlugin',
+ 'LoadCPlugin', 'Load_Stdcall_Plugin',
+ 'Max', 'MulDiv', 'MidStr',
+ 'NOP',
+ 'OPT_AllowFloatAudio', 'OPT_UseWaveExtensible',
+ 'Pi', 'Pow',
+ 'Round', 'Rand', 'RevStr', 'RightStr', 'RGBDifference', 'RGBDifferenceFromPrevious', 'RGBDifferenceToNext',
+ 'Sin', 'Sqrt', 'Sign', 'Spline', 'StrLen', 'String', 'Select', 'SetMemoryMax', 'SetWorkingDir', 'SetMTMode',
+ 'SetPlanarLegacyAlignment',
+ 'Time',
+ 'UCase', 'UDifferenceFromPrevious', 'UDifferenceToNext', 'UPlaneMax', 'UPlaneMin', 'UPlaneMedian',
+ 'UPlaneMinMaxDifference',
+ 'Value', 'VersionNumber', 'VersionString', 'VDifferenceFromPrevious', 'VDifferenceToNext', 'VPlaneMax',
+ 'VPlaneMin', 'VPlaneMedian', 'VPlaneMinMaxDifference',
+ 'YDifferenceFromPrevious', 'YDifferenceToNext', 'YPlaneMax', 'YPlaneMin', 'YPlaneMedian',
+ 'YPlaneMinMaxDifference'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '+', '++', '-', '--', '/', '*', '%',
+ '=', '==', '<', '<=', '>', '>=', '<>', '!=',
+ '!', '?', ':',
+ '|', '||', '&&',
+ '\\',
+ '(', ')', '{', '}',
+ '.', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color:#9966CC; font-weight:bold;',
+ 2 => 'color:#0000FF; font-weight:bold;',
+ 3 => 'color:#CC3300; font-weight:bold;',
+ 4 => 'color:#660000; font-weight:bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color:#008000; font-style:italic;',
+ 'MULTI' => 'color:#000080; font-style:italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color:#000099;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color:#996600;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color:#006666;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color:#9900CC;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://avisynth.org/mediawiki/{FNAME}',
+ 4 => ''
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php
new file mode 100644
index 000000000..bb0a571ba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php
@@ -0,0 +1,282 @@
+<?php
+/*************************************************************************************
+ * bash.php
+ * --------
+ * Author: Andreas Gohr (andi@splitbrain.org)
+ * Copyright: (c) 2004 Andreas Gohr, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/20
+ *
+ * BASH language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/06/21 (1.0.8)
+ * - Added loads of keywords and commands of GNU/Linux
+ * - Added support for parameters starting with a dash
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2007/09/05 (1.0.7.21)
+ * - PARSER_CONTROL patch using SF #1788408 (BenBE)
+ * 2007/06/11 (1.0.7.20)
+ * - Added a lot of keywords (BenBE / Jan G)
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * 2004/08/20 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Get symbols working
+ * * Highlight builtin vars
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Bash',
+ // Bash DOES have single line comments with # markers. But bash also has
+ // the $# variable, so comments need special handling (see sf.net
+ // 1564839)
+ 'COMMENT_SINGLE' => array('#'),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ //Variables
+ 1 => "/\\$\\{[^\\n\\}]*?\\}/i",
+ //BASH-style Heredoc
+ 2 => '/<<-?\s*?(\'?)([a-zA-Z0-9]+)\1\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
+ //Escaped String Starters
+ 3 => "/\\\\['\"]/siU"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("\'"),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[nfrtv\\$\\\"\n]#i",
+ // $var
+ 2 => "#\\$[a-z_][a-z0-9_]*#i",
+ // ${...}
+ 3 => "/\\$\\{[^\\n\\}]*?\\}/i",
+ // $(...)
+ 4 => "/\\$\\([^\\n\\)]*?\\)/i",
+ // `...`
+ 5 => "/`[^`]*`/"
+ ),
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'case', 'do', 'done', 'elif', 'else', 'esac', 'fi', 'for', 'function',
+ 'if', 'in', 'select', 'set', 'then', 'until', 'while', 'time'
+ ),
+ 2 => array(
+ 'aclocal', 'aconnect', 'aplay', 'apm', 'apmsleep', 'apropos',
+ 'apt-cache', 'apt-get', 'apt-key', 'aptitude',
+ 'ar', 'arch', 'arecord', 'as', 'as86', 'ash', 'autoconf',
+ 'autoheader', 'automake', 'awk',
+
+ 'basename', 'bash', 'bc', 'bison', 'bunzip2', 'bzcat',
+ 'bzcmp', 'bzdiff', 'bzegrep', 'bzfgrep', 'bzgrep',
+ 'bzip2', 'bzip2recover', 'bzless', 'bzmore',
+
+ 'c++', 'cal', 'cat', 'chattr', 'cc', 'cdda2wav', 'cdparanoia',
+ 'cdrdao', 'cd-read', 'cdrecord', 'chfn', 'chgrp', 'chmod',
+ 'chown', 'chroot', 'chsh', 'chvt', 'clear', 'cmp', 'comm', 'co',
+ 'col', 'cp', 'cpio', 'cpp', 'csh', 'cut', 'cvs', 'cvs-pserver',
+
+ 'dash', 'date', 'dd', 'dc', 'dcop', 'deallocvt', 'df', 'dialog',
+ 'diff', 'diff3', 'dir', 'dircolors', 'directomatic', 'dirname',
+ 'dmesg', 'dnsdomainname', 'domainname', 'dpkg', 'dselect', 'du',
+ 'dumpkeys',
+
+ 'ed', 'egrep', 'env', 'expr',
+
+ 'false', 'fbset', 'ffmpeg', 'fgconsole','fgrep', 'file', 'find',
+ 'flex', 'flex++', 'fmt', 'free', 'ftp', 'funzip', 'fuser',
+
+ 'g++', 'gawk', 'gc','gcc', 'gdb', 'getent', 'getkeycodes',
+ 'getopt', 'gettext', 'gettextize', 'gimp', 'gimp-remote',
+ 'gimptool', 'gmake', 'gocr', 'grep', 'groups', 'gs', 'gunzip',
+ 'gzexe', 'gzip',
+
+ 'head', 'hexdump', 'hostname',
+
+ 'id', 'ifconfig', 'igawk', 'install',
+
+ 'join',
+
+ 'kbd_mode','kbdrate', 'kdialog', 'kfile', 'kill', 'killall',
+
+ 'lame', 'last', 'lastb', 'ld', 'ld86', 'ldd', 'less', 'lex', 'link',
+ 'ln', 'loadkeys', 'loadunimap', 'locate', 'lockfile', 'login',
+ 'logname', 'lp', 'lpr', 'ls', 'lsattr', 'lsmod', 'lsmod.old',
+ 'lspci', 'ltrace', 'lynx',
+
+ 'm4', 'make', 'man', 'mapscrn', 'mesg', 'mkdir', 'mkfifo',
+ 'mknod', 'mktemp', 'more', 'mount', 'mplayer', 'msgfmt', 'mv',
+
+ 'namei', 'nano', 'nasm', 'nawk', 'netstat', 'nice',
+ 'nisdomainname', 'nl', 'nm', 'nm86', 'nmap', 'nohup', 'nop',
+
+ 'od', 'openvt',
+
+ 'passwd', 'patch', 'pcregrep', 'pcretest', 'perl', 'perror',
+ 'pgawk', 'pidof', 'ping', 'pr', 'procmail', 'prune', 'ps', 'pstree',
+ 'ps2ascii', 'ps2epsi', 'ps2frag', 'ps2pdf', 'ps2ps', 'psbook',
+ 'psmerge', 'psnup', 'psresize', 'psselect', 'pstops',
+
+ 'rbash', 'rcs', 'rcs2log', 'read', 'readlink', 'red', 'resizecons',
+ 'rev', 'rm', 'rmdir', 'rsh', 'run-parts',
+
+ 'sash', 'scp', 'screen', 'sed', 'seq', 'sendmail', 'setfont',
+ 'setkeycodes', 'setleds', 'setmetamode', 'setserial', 'setterm',
+ 'sh', 'showkey', 'shred', 'size', 'size86', 'skill', 'sleep',
+ 'slogin', 'snice', 'sort', 'sox', 'split', 'ssed', 'ssh', 'ssh-add',
+ 'ssh-agent', 'ssh-keygen', 'ssh-keyscan', 'stat', 'strace',
+ 'strings', 'strip', 'stty', 'su', 'sudo', 'suidperl', 'sum', 'svn',
+ 'svnadmin', 'svndumpfilter', 'svnlook', 'svnmerge', 'svnmucc',
+ 'svnserve', 'svnshell', 'svnsync', 'svnversion', 'svnwrap', 'sync',
+
+ 'tac', 'tail', 'tar', 'tee', 'tempfile', 'touch', 'tr', 'tree',
+ 'true',
+
+ 'umount', 'uname', 'unicode_start', 'unicode_stop', 'uniq',
+ 'unlink', 'unzip', 'updatedb', 'updmap', 'uptime', 'users',
+ 'utmpdump', 'uuidgen',
+
+ 'valgrind', 'vdir', 'vi', 'vim', 'vmstat',
+
+ 'w', 'wall', 'wc', 'wget', 'whatis', 'whereis', 'which', 'whiptail',
+ 'who', 'whoami', 'write',
+
+ 'xargs', 'xhost', 'xmodmap', 'xset',
+
+ 'yacc', 'yes', 'ypdomainname',
+
+ 'zcat', 'zcmp', 'zdiff', 'zdump', 'zegrep', 'zfgrep', 'zforce',
+ 'zgrep', 'zip', 'zipgrep', 'zipinfo', 'zless', 'zmore', 'znew',
+ 'zsh', 'zsoelim'
+ ),
+ 3 => array(
+ 'alias', 'bg', 'bind', 'break', 'builtin', 'cd', 'command',
+ 'compgen', 'complete', 'continue', 'declare', 'dirs', 'disown',
+ 'echo', 'enable', 'eval', 'exec', 'exit', 'export', 'fc',
+ 'fg', 'getopts', 'hash', 'help', 'history', 'jobs', 'let',
+ 'local', 'logout', 'popd', 'printf', 'pushd', 'pwd', 'readonly',
+ 'return', 'shift', 'shopt', 'source', 'suspend', 'test', 'times',
+ 'trap', 'type', 'typeset', 'ulimit', 'umask', 'unalias', 'unset',
+ 'wait'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>', ';;', '`'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #c20cb9; font-weight: bold;',
+ 3 => 'color: #7a0874; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #666666; font-style: italic;',
+ 1 => 'color: #800000;',
+ 2 => 'color: #cc0000; font-style: italic;',
+ 3 => 'color: #000000; font-weight: bold;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #007800;',
+ 3 => 'color: #007800;',
+ 4 => 'color: #007800;',
+ 5 => 'color: #780078;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #7a0874; font-weight: bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #007800;',
+ 1 => 'color: #007800;',
+ 2 => 'color: #007800;',
+ 4 => 'color: #007800;',
+ 5 => 'color: #660033;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Variables (will be handled by comment_regexps)
+ 0 => "\\$\\{[a-zA-Z_][a-zA-Z0-9_]*?\\}",
+ //Variables without braces
+ 1 => "\\$[a-zA-Z_][a-zA-Z0-9_]*",
+ //Variable assignment
+ 2 => "(?<![\.a-zA-Z_\-])([a-zA-Z_][a-zA-Z0-9_]*?)(?==)",
+ //Shorthand shell variables
+ 4 => "\\$[*#\$\\-\\?!]",
+ //Parameters of commands
+ 5 => "(?<=\s)--?[0-9a-zA-Z\-]+(?=[\s=]|$)"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'COMMENTS' => array(
+ 'DISALLOWED_BEFORE' => '$'
+ ),
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![\.\-a-zA-Z0-9_\$\#])",
+ 'DISALLOWED_AFTER' => "(?![\.\-a-zA-Z0-9_%\\/])"
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php
new file mode 100644
index 000000000..5e3330930
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php
@@ -0,0 +1,341 @@
+<?php
+/*************************************************************************************
+ * basic4gl.php
+ * ---------------------------------
+ * Author: Matthew Webb (bmatthew1@blueyonder.co.uk)
+ * Copyright: (c) 2004 Matthew Webb (http://matthew-4gl.wikispaces.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/09/15
+ *
+ * Basic4GL language file for GeSHi.
+ *
+ * You can find the Basic4GL Website at (http://www.basic4gl.net/)
+ *
+ * CHANGES
+ * -------
+ * 2007/09/17 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2007/09/17)
+ * -------------------------
+ * Make sure all the OpenGL and Basic4GL commands have been added and are complete.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Basic4GL',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+
+ // Navy Blue Bold Keywords
+
+ 'true','rnd_max','m_pi','m_e','false','VK_ZOOM','VK_UP','VK_TAB','VK_SUBTRACT','VK_SPACE','VK_SNAPSHOT',
+ 'VK_SHIFT','VK_SEPARATOR','VK_SELECT','VK_SCROLL','VK_RWIN','VK_RSHIFT','VK_RMENU','VK_RIGHT','VK_RETURN',
+ 'VK_RCONTROL','VK_RBUTTON','VK_PROCESSKEY','VK_PRIOR','VK_PRINT','VK_PLAY','VK_PAUSE','VK_NUMPAD9','VK_NUMPAD8',
+ 'VK_NUMPAD7','VK_NUMPAD6','VK_NUMPAD5','VK_NUMPAD4','VK_NUMPAD3','VK_NUMPAD2','VK_NUMPAD1','VK_NUMPAD0',
+ 'VK_NUMLOCK','VK_NONCONVERT','VK_NEXT','VK_MULTIPLY','VK_MODECHANGE','VK_MENU','VK_MBUTTON','VK_LWIN',
+ 'VK_LSHIFT','VK_LMENU','VK_LEFT','VK_LCONTROL','VK_LBUTTON','VK_KANJI','VK_KANA','VK_JUNJA','VK_INSERT',
+ 'VK_HOME','VK_HELP','VK_HANJA','VK_HANGUL','VK_HANGEUL','VK_FINAL','VK_F9','VK_F8','VK_F7','VK_F6','VK_F5',
+ 'VK_F4','VK_F3','VK_F24','VK_F23','VK_F22','VK_F21','VK_F20','VK_F2','VK_F19','VK_F18','VK_F17','VK_F16',
+ 'VK_F15','VK_F14','VK_F13','VK_F12','VK_F11','VK_F10','VK_F1','VK_EXSEL','VK_EXECUTE','VK_ESCAPE','VK_EREOF',
+ 'VK_END','VK_DOWN','VK_DIVIDE','VK_DELETE','VK_DECIMAL','VK_CRSEL','VK_CONVERT','VK_CONTROL','VK_CLEAR',
+ 'VK_CAPITAL','VK_CANCEL','VK_BACK','VK_ATTN','VK_APPS','VK_ADD','VK_ACCEPT','TEXT_SIMPLE','TEXT_OVERLAID',
+ 'TEXT_BUFFERED','SPR_TILEMAP','SPR_SPRITE','SPR_INVALID','MOUSE_RBUTTON','MOUSE_MBUTTON','MOUSE_LBUTTON',
+ 'GL_ZOOM_Y','GL_ZOOM_X','GL_ZERO','GL_XOR','GL_WIN_swap_hint','GL_WIN_draw_range_elements','GL_VIEWPORT_BIT',
+ 'GL_VIEWPORT','GL_VERTEX_ARRAY_TYPE_EXT','GL_VERTEX_ARRAY_TYPE','GL_VERTEX_ARRAY_STRIDE_EXT','GL_VERTEX_ARRAY_STRIDE',
+ 'GL_VERTEX_ARRAY_SIZE_EXT','GL_VERTEX_ARRAY_SIZE','GL_VERTEX_ARRAY_POINTER_EXT','GL_VERTEX_ARRAY_POINTER',
+ 'GL_VERTEX_ARRAY_EXT','GL_VERTEX_ARRAY_COUNT_EXT','GL_VERTEX_ARRAY','GL_VERSION_1_1','GL_VERSION','GL_VENDOR',
+ 'GL_V3F','GL_V2F','GL_UNSIGNED_SHORT','GL_UNSIGNED_INT','GL_UNSIGNED_BYTE','GL_UNPACK_SWAP_BYTES','GL_UNPACK_SKIP_ROWS',
+ 'GL_UNPACK_SKIP_PIXELS','GL_UNPACK_ROW_LENGTH','GL_UNPACK_LSB_FIRST','GL_UNPACK_ALIGNMENT','GL_TRUE','GL_TRIANGLE_STRIP',
+ 'GL_TRIANGLE_FAN','GL_TRIANGLES','GL_TRANSFORM_BIT','GL_TEXTURE_WRAP_T','GL_TEXTURE_WRAP_S','GL_TEXTURE_WIDTH',
+ 'GL_TEXTURE_STACK_DEPTH','GL_TEXTURE_RESIDENT','GL_TEXTURE_RED_SIZE','GL_TEXTURE_PRIORITY','GL_TEXTURE_MIN_FILTER',
+ 'GL_TEXTURE_MATRIX','GL_TEXTURE_MAG_FILTER','GL_TEXTURE_LUMINANCE_SIZE','GL_TEXTURE_INTERNAL_FORMAT','GL_TEXTURE_INTENSITY_SIZE',
+ 'GL_TEXTURE_HEIGHT','GL_TEXTURE_GREEN_SIZE','GL_TEXTURE_GEN_T','GL_TEXTURE_GEN_S','GL_TEXTURE_GEN_R','GL_TEXTURE_GEN_Q',
+ 'GL_TEXTURE_GEN_MODE','GL_TEXTURE_ENV_MODE','GL_TEXTURE_ENV_COLOR','GL_TEXTURE_ENV','GL_TEXTURE_COORD_ARRAY_TYPE_EXT',
+ 'GL_TEXTURE_COORD_ARRAY_TYPE','GL_TEXTURE_COORD_ARRAY_STRIDE_EXT','GL_TEXTURE_COORD_ARRAY_STRIDE','GL_TEXTURE_COORD_ARRAY_SIZE_EXT',
+ 'GL_TEXTURE_COORD_ARRAY_SIZE','GL_TEXTURE_COORD_ARRAY_POINTER_EXT','GL_TEXTURE_COORD_ARRAY_POINTER','GL_TEXTURE_COORD_ARRAY_EXT',
+ 'GL_TEXTURE_COORD_ARRAY_COUNT_EXT','GL_TEXTURE_COORD_ARRAY','GL_TEXTURE_COMPONENTS','GL_TEXTURE_BORDER_COLOR','GL_TEXTURE_BORDER',
+ 'GL_TEXTURE_BLUE_SIZE','GL_TEXTURE_BIT','GL_TEXTURE_BINDING_2D','GL_TEXTURE_BINDING_1D','GL_TEXTURE_ALPHA_SIZE',
+ 'GL_TEXTURE_2D','GL_TEXTURE_1D','GL_TEXTURE9_ARB','GL_TEXTURE9','GL_TEXTURE8_ARB','GL_TEXTURE8','GL_TEXTURE7_ARB',
+ 'GL_TEXTURE7','GL_TEXTURE6_ARB','GL_TEXTURE6','GL_TEXTURE5_ARB','GL_TEXTURE5','GL_TEXTURE4_ARB','GL_TEXTURE4',
+ 'GL_TEXTURE3_ARB','GL_TEXTURE31_ARB','GL_TEXTURE31','GL_TEXTURE30_ARB','GL_TEXTURE30','GL_TEXTURE3','GL_TEXTURE2_ARB',
+ 'GL_TEXTURE29_ARB','GL_TEXTURE29','GL_TEXTURE28_ARB','GL_TEXTURE28','GL_TEXTURE27_ARB','GL_TEXTURE27','GL_TEXTURE26_ARB',
+ 'GL_TEXTURE26','GL_TEXTURE25_ARB','GL_TEXTURE25','GL_TEXTURE24_ARB','GL_TEXTURE24','GL_TEXTURE23_ARB','GL_TEXTURE23',
+ 'GL_TEXTURE22_ARB','GL_TEXTURE22','GL_TEXTURE21_ARB','GL_TEXTURE21','GL_TEXTURE20_ARB','GL_TEXTURE20','GL_TEXTURE2',
+ 'GL_TEXTURE1_ARB','GL_TEXTURE19_ARB','GL_TEXTURE19','GL_TEXTURE18_ARB','GL_TEXTURE18','GL_TEXTURE17_ARB',
+ 'GL_TEXTURE17','GL_TEXTURE16_ARB','GL_TEXTURE16','GL_TEXTURE15_ARB','GL_TEXTURE15','GL_TEXTURE14_ARB','GL_TEXTURE14',
+ 'GL_TEXTURE13_ARB','GL_TEXTURE13','GL_TEXTURE12_ARB','GL_TEXTURE12','GL_TEXTURE11_ARB','GL_TEXTURE11','GL_TEXTURE10_ARB',
+ 'GL_TEXTURE10','GL_TEXTURE1','GL_TEXTURE0_ARB','GL_TEXTURE0','GL_TEXTURE','GL_T4F_V4F','GL_T4F_C4F_N3F_V4F','GL_T2F_V3F',
+ 'GL_T2F_N3F_V3F','GL_T2F_C4UB_V3F','GL_T2F_C4F_N3F_V3F','GL_T2F_C3F_V3F','GL_T','GL_SUBPIXEL_BITS','GL_STEREO',
+ 'GL_STENCIL_WRITEMASK','GL_STENCIL_VALUE_MASK','GL_STENCIL_TEST','GL_STENCIL_REF','GL_STENCIL_PASS_DEPTH_PASS',
+ 'GL_STENCIL_PASS_DEPTH_FAIL','GL_STENCIL_INDEX','GL_STENCIL_FUNC','GL_STENCIL_FAIL','GL_STENCIL_CLEAR_VALUE',
+ 'GL_STENCIL_BUFFER_BIT','GL_STENCIL_BITS','GL_STENCIL','GL_STACK_UNDERFLOW','GL_STACK_OVERFLOW','GL_SRC_COLOR',
+ 'GL_SRC_ALPHA_SATURATE','GL_SRC_ALPHA','GL_SPOT_EXPONENT','GL_SPOT_DIRECTION','GL_SPOT_CUTOFF','GL_SPHERE_MAP',
+ 'GL_SPECULAR','GL_SOURCE2_RGB_EXT','GL_SOURCE2_RGB','GL_SOURCE2_ALPHA_EXT','GL_SOURCE2_ALPHA','GL_SOURCE1_RGB_EXT',
+ 'GL_SOURCE1_RGB','GL_SOURCE1_ALPHA_EXT','GL_SOURCE1_ALPHA','GL_SOURCE0_RGB_EXT','GL_SOURCE0_RGB','GL_SOURCE0_ALPHA_EXT',
+ 'GL_SOURCE0_ALPHA','GL_SMOOTH','GL_SHORT','GL_SHININESS','GL_SHADE_MODEL','GL_SET','GL_SELECTION_BUFFER_SIZE',
+ 'GL_SELECTION_BUFFER_POINTER','GL_SELECT','GL_SCISSOR_TEST','GL_SCISSOR_BOX','GL_SCISSOR_BIT','GL_S','GL_RIGHT',
+ 'GL_RGB_SCALE_EXT','GL_RGB_SCALE','GL_RGBA_MODE','GL_RGBA8','GL_RGBA4','GL_RGBA2','GL_RGBA16','GL_RGBA12','GL_RGBA',
+ 'GL_RGB8','GL_RGB5_A1','GL_RGB5','GL_RGB4','GL_RGB16','GL_RGB12','GL_RGB10_A2','GL_RGB10','GL_RGB','GL_RETURN',
+ 'GL_REPLACE','GL_REPEAT','GL_RENDER_MODE','GL_RENDERER','GL_RENDER','GL_RED_SCALE','GL_RED_BITS','GL_RED_BIAS',
+ 'GL_RED','GL_READ_BUFFER','GL_R3_G3_B2','GL_R','GL_QUAD_STRIP','GL_QUADS','GL_QUADRATIC_ATTENUATION','GL_Q',
+ 'GL_PROXY_TEXTURE_2D','GL_PROXY_TEXTURE_1D','GL_PROJECTION_STACK_DEPTH','GL_PROJECTION_MATRIX','GL_PROJECTION',
+ 'GL_PRIMARY_COLOR_EXT','GL_PRIMARY_COLOR','GL_PREVIOUS_EXT','GL_PREVIOUS','GL_POSITION','GL_POLYGON_TOKEN',
+ 'GL_POLYGON_STIPPLE_BIT','GL_POLYGON_STIPPLE','GL_POLYGON_SMOOTH_HINT','GL_POLYGON_SMOOTH','GL_POLYGON_OFFSET_UNITS',
+ 'GL_POLYGON_OFFSET_POINT','GL_POLYGON_OFFSET_LINE','GL_POLYGON_OFFSET_FILL','GL_POLYGON_OFFSET_FACTOR','GL_POLYGON_MODE',
+ 'GL_POLYGON_BIT','GL_POLYGON','GL_POINT_TOKEN','GL_POINT_SMOOTH_HINT','GL_POINT_SMOOTH','GL_POINT_SIZE_RANGE',
+ 'GL_POINT_SIZE_GRANULARITY','GL_POINT_SIZE','GL_POINT_BIT','GL_POINTS','GL_POINT','GL_PIXEL_MODE_BIT',
+ 'GL_PIXEL_MAP_S_TO_S_SIZE','GL_PIXEL_MAP_S_TO_S','GL_PIXEL_MAP_R_TO_R_SIZE','GL_PIXEL_MAP_R_TO_R','GL_PIXEL_MAP_I_TO_R_SIZE',
+ 'GL_PIXEL_MAP_I_TO_R','GL_PIXEL_MAP_I_TO_I_SIZE','GL_PIXEL_MAP_I_TO_I','GL_PIXEL_MAP_I_TO_G_SIZE','GL_PIXEL_MAP_I_TO_G',
+ 'GL_PIXEL_MAP_I_TO_B_SIZE','GL_PIXEL_MAP_I_TO_B','GL_PIXEL_MAP_I_TO_A_SIZE','GL_PIXEL_MAP_I_TO_A','GL_PIXEL_MAP_G_TO_G_SIZE',
+ 'GL_PIXEL_MAP_G_TO_G','GL_PIXEL_MAP_B_TO_B_SIZE','GL_PIXEL_MAP_B_TO_B','GL_PIXEL_MAP_A_TO_A_SIZE','GL_PIXEL_MAP_A_TO_A',
+ 'GL_PHONG_WIN','GL_PHONG_HINT_WIN','GL_PERSPECTIVE_CORRECTION_HINT','GL_PASS_THROUGH_TOKEN','GL_PACK_SWAP_BYTES',
+ 'GL_PACK_SKIP_ROWS','GL_PACK_SKIP_PIXELS','GL_PACK_ROW_LENGTH','GL_PACK_LSB_FIRST','GL_PACK_ALIGNMENT','GL_OUT_OF_MEMORY',
+ 'GL_OR_REVERSE','GL_OR_INVERTED','GL_ORDER','GL_OR','GL_OPERAND2_RGB_EXT','GL_OPERAND2_RGB','GL_OPERAND2_ALPHA_EXT',
+ 'GL_OPERAND2_ALPHA','GL_OPERAND1_RGB_EXT','GL_OPERAND1_RGB','GL_OPERAND1_ALPHA_EXT','GL_OPERAND1_ALPHA','GL_OPERAND0_RGB_EXT',
+ 'GL_OPERAND0_RGB','GL_OPERAND0_ALPHA_EXT','GL_OPERAND0_ALPHA','GL_ONE_MINUS_SRC_COLOR','GL_ONE_MINUS_SRC_ALPHA',
+ 'GL_ONE_MINUS_DST_COLOR','GL_ONE_MINUS_DST_ALPHA','GL_ONE','GL_OBJECT_PLANE','GL_OBJECT_LINEAR','GL_NO_ERROR',
+ 'GL_NOTEQUAL','GL_NORMAL_ARRAY_TYPE_EXT','GL_NORMAL_ARRAY_TYPE','GL_NORMAL_ARRAY_STRIDE_EXT','GL_NORMAL_ARRAY_STRIDE',
+ 'GL_NORMAL_ARRAY_POINTER_EXT','GL_NORMAL_ARRAY_POINTER','GL_NORMAL_ARRAY_EXT','GL_NORMAL_ARRAY_COUNT_EXT',
+ 'GL_NORMAL_ARRAY','GL_NORMALIZE','GL_NOR','GL_NOOP','GL_NONE','GL_NICEST','GL_NEVER','GL_NEAREST_MIPMAP_NEAREST','GL_NEAREST_MIPMAP_LINEAR',
+ 'GL_NEAREST','GL_NAND','GL_NAME_STACK_DEPTH','GL_N3F_V3F','GL_MULT','GL_MODULATE','GL_MODELVIEW_STACK_DEPTH','GL_MODELVIEW_MATRIX',
+ 'GL_MODELVIEW','GL_MAX_VIEWPORT_DIMS','GL_MAX_TEXTURE_UNITS_ARB','GL_MAX_TEXTURE_UNITS','GL_MAX_TEXTURE_STACK_DEPTH',
+ 'GL_MAX_TEXTURE_SIZE','GL_MAX_PROJECTION_STACK_DEPTH','GL_MAX_PIXEL_MAP_TABLE','GL_MAX_NAME_STACK_DEPTH','GL_MAX_MODELVIEW_STACK_DEPTH',
+ 'GL_MAX_LIST_NESTING','GL_MAX_LIGHTS','GL_MAX_EVAL_ORDER','GL_MAX_ELEMENTS_VERTICES_WIN','GL_MAX_ELEMENTS_INDICES_WIN',
+ 'GL_MAX_CLIP_PLANES','GL_MAX_CLIENT_ATTRIB_STACK_DEPTH','GL_MAX_ATTRIB_STACK_DEPTH','GL_MATRIX_MODE','GL_MAP_STENCIL',
+ 'GL_MAP_COLOR','GL_MAP2_VERTEX_4','GL_MAP2_VERTEX_3','GL_MAP2_TEXTURE_COORD_4','GL_MAP2_TEXTURE_COORD_3','GL_MAP2_TEXTURE_COORD_2',
+ 'GL_MAP2_TEXTURE_COORD_1','GL_MAP2_NORMAL','GL_MAP2_INDEX','GL_MAP2_GRID_SEGMENTS','GL_MAP2_GRID_DOMAIN','GL_MAP2_COLOR_4',
+ 'GL_MAP1_VERTEX_4','GL_MAP1_VERTEX_3','GL_MAP1_TEXTURE_COORD_4','GL_MAP1_TEXTURE_COORD_3','GL_MAP1_TEXTURE_COORD_2',
+ 'GL_MAP1_TEXTURE_COORD_1','GL_MAP1_NORMAL','GL_MAP1_INDEX','GL_MAP1_GRID_SEGMENTS','GL_MAP1_GRID_DOMAIN',
+ 'GL_MAP1_COLOR_4','GL_LUMINANCE_ALPHA','GL_LUMINANCE8_ALPHA8','GL_LUMINANCE8','GL_LUMINANCE6_ALPHA2','GL_LUMINANCE4_ALPHA4',
+ 'GL_LUMINANCE4','GL_LUMINANCE16_ALPHA16','GL_LUMINANCE16','GL_LUMINANCE12_ALPHA4','GL_LUMINANCE12_ALPHA12','GL_LUMINANCE12',
+ 'GL_LUMINANCE','GL_LOGIC_OP_MODE','GL_LOGIC_OP','GL_LOAD','GL_LIST_MODE','GL_LIST_INDEX','GL_LIST_BIT',
+ 'GL_LIST_BASE','GL_LINE_WIDTH_RANGE','GL_LINE_WIDTH_GRANULARITY','GL_LINE_WIDTH','GL_LINE_TOKEN','GL_LINE_STRIP','GL_LINE_STIPPLE_REPEAT',
+ 'GL_LINE_STIPPLE_PATTERN','GL_LINE_STIPPLE','GL_LINE_SMOOTH_HINT','GL_LINE_SMOOTH','GL_LINE_RESET_TOKEN','GL_LINE_LOOP',
+ 'GL_LINE_BIT','GL_LINES','GL_LINEAR_MIPMAP_NEAREST','GL_LINEAR_MIPMAP_LINEAR','GL_LINEAR_ATTENUATION','GL_LINEAR',
+ 'GL_LINE','GL_LIGHT_MODEL_TWO_SIDE','GL_LIGHT_MODEL_LOCAL_VIEWER','GL_LIGHT_MODEL_AMBIENT','GL_LIGHTING_BIT',
+ 'GL_LIGHTING','GL_LIGHT7','GL_LIGHT6','GL_LIGHT5','GL_LIGHT4','GL_LIGHT3','GL_LIGHT2','GL_LIGHT1','GL_LIGHT0',
+ 'GL_LESS','GL_LEQUAL','GL_LEFT','GL_KEEP','GL_INVERT','GL_INVALID_VALUE','GL_INVALID_OPERATION','GL_INVALID_ENUM','GL_INTERPOLATE_EXT',
+ 'GL_INTERPOLATE','GL_INTENSITY8','GL_INTENSITY4','GL_INTENSITY16','GL_INTENSITY12','GL_INTENSITY','GL_INT',
+ 'GL_INDEX_WRITEMASK','GL_INDEX_SHIFT','GL_INDEX_OFFSET','GL_INDEX_MODE','GL_INDEX_LOGIC_OP','GL_INDEX_CLEAR_VALUE','GL_INDEX_BITS',
+ 'GL_INDEX_ARRAY_TYPE_EXT','GL_INDEX_ARRAY_TYPE','GL_INDEX_ARRAY_STRIDE_EXT','GL_INDEX_ARRAY_STRIDE','GL_INDEX_ARRAY_POINTER_EXT',
+ 'GL_INDEX_ARRAY_POINTER','GL_INDEX_ARRAY_EXT','GL_INDEX_ARRAY_COUNT_EXT','GL_INDEX_ARRAY','GL_INCR','GL_HINT_BIT',
+ 'GL_GREEN_SCALE','GL_GREEN_BITS','GL_GREEN_BIAS','GL_GREEN','GL_GREATER','GL_GEQUAL','GL_FRONT_RIGHT','GL_FRONT_LEFT',
+ 'GL_FRONT_FACE','GL_FRONT_AND_BACK','GL_FRONT','GL_FOG_START','GL_FOG_SPECULAR_TEXTURE_WIN','GL_FOG_MODE','GL_FOG_INDEX',
+ 'GL_FOG_HINT','GL_FOG_END','GL_FOG_DENSITY','GL_FOG_COLOR','GL_FOG_BIT','GL_FOG','GL_FLOAT','GL_FLAT','GL_FILL',
+ 'GL_FEEDBACK_BUFFER_TYPE','GL_FEEDBACK_BUFFER_SIZE','GL_FEEDBACK_BUFFER_POINTER','GL_FEEDBACK','GL_FASTEST','GL_FALSE',
+ 'GL_EYE_PLANE','GL_EYE_LINEAR','GL_EXT_vertex_array','GL_EXT_paletted_texture','GL_EXT_bgra','GL_EXTENSIONS','GL_EXP2',
+ 'GL_EXP','GL_EVAL_BIT','GL_EQUIV','GL_EQUAL','GL_ENABLE_BIT','GL_EMISSION','GL_EDGE_FLAG_ARRAY_STRIDE_EXT','GL_EDGE_FLAG_ARRAY_STRIDE',
+ 'GL_EDGE_FLAG_ARRAY_POINTER_EXT','GL_EDGE_FLAG_ARRAY_POINTER','GL_EDGE_FLAG_ARRAY_EXT','GL_EDGE_FLAG_ARRAY_COUNT_EXT','GL_EDGE_FLAG_ARRAY',
+ 'GL_EDGE_FLAG','GL_DST_COLOR','GL_DST_ALPHA','GL_DRAW_PIXEL_TOKEN','GL_DRAW_BUFFER','GL_DOUBLE_EXT','GL_DOUBLEBUFFER',
+ 'GL_DOUBLE','GL_DONT_CARE','GL_DOMAIN','GL_DITHER','GL_DIFFUSE','GL_DEPTH_WRITEMASK','GL_DEPTH_TEST','GL_DEPTH_SCALE',
+ 'GL_DEPTH_RANGE','GL_DEPTH_FUNC','GL_DEPTH_COMPONENT','GL_DEPTH_CLEAR_VALUE','GL_DEPTH_BUFFER_BIT','GL_DEPTH_BITS',
+ 'GL_DEPTH_BIAS','GL_DEPTH','GL_DECR','GL_DECAL','GL_CW','GL_CURRENT_TEXTURE_COORDS','GL_CURRENT_RASTER_TEXTURE_COORDS','GL_CURRENT_RASTER_POSITION_VALID',
+ 'GL_CURRENT_RASTER_POSITION','GL_CURRENT_RASTER_INDEX','GL_CURRENT_RASTER_DISTANCE','GL_CURRENT_RASTER_COLOR','GL_CURRENT_NORMAL',
+ 'GL_CURRENT_INDEX','GL_CURRENT_COLOR','GL_CURRENT_BIT','GL_CULL_FACE_MODE','GL_CULL_FACE','GL_COPY_PIXEL_TOKEN',
+ 'GL_COPY_INVERTED','GL_COPY','GL_CONSTANT_EXT','GL_CONSTANT_ATTENUATION','GL_CONSTANT','GL_COMPILE_AND_EXECUTE','GL_COMPILE','GL_COMBINE_RGB_EXT',
+ 'GL_COMBINE_RGB','GL_COMBINE_EXT','GL_COMBINE_ALPHA_EXT','GL_COMBINE_ALPHA','GL_COMBINE','GL_COLOR_WRITEMASK',
+ 'GL_COLOR_TABLE_WIDTH_EXT','GL_COLOR_TABLE_RED_SIZE_EXT','GL_COLOR_TABLE_LUMINANCE_SIZE_EXT','GL_COLOR_TABLE_INTENSITY_SIZE_EXT',
+ 'GL_COLOR_TABLE_GREEN_SIZE_EXT','GL_COLOR_TABLE_FORMAT_EXT','GL_COLOR_TABLE_BLUE_SIZE_EXT','GL_COLOR_TABLE_ALPHA_SIZE_EXT',
+ 'GL_COLOR_MATERIAL_PARAMETER','GL_COLOR_MATERIAL_FACE','GL_COLOR_MATERIAL','GL_COLOR_LOGIC_OP','GL_COLOR_INDEXES',
+ 'GL_COLOR_INDEX8_EXT','GL_COLOR_INDEX4_EXT','GL_COLOR_INDEX2_EXT','GL_COLOR_INDEX1_EXT','GL_COLOR_INDEX16_EXT',
+ 'GL_COLOR_INDEX12_EXT','GL_COLOR_INDEX','GL_COLOR_CLEAR_VALUE','GL_COLOR_BUFFER_BIT','GL_COLOR_ARRAY_TYPE_EXT',
+ 'GL_COLOR_ARRAY_TYPE','GL_COLOR_ARRAY_STRIDE_EXT','GL_COLOR_ARRAY_STRIDE','GL_COLOR_ARRAY_SIZE_EXT','GL_COLOR_ARRAY_SIZE',
+ 'GL_COLOR_ARRAY_POINTER_EXT','GL_COLOR_ARRAY_POINTER','GL_COLOR_ARRAY_EXT','GL_COLOR_ARRAY_COUNT_EXT','GL_COLOR_ARRAY',
+ 'GL_COLOR','GL_COEFF','GL_CLIP_PLANE5','GL_CLIP_PLANE4','GL_CLIP_PLANE3','GL_CLIP_PLANE2','GL_CLIP_PLANE1','GL_CLIP_PLANE0',
+ 'GL_CLIENT_VERTEX_ARRAY_BIT','GL_CLIENT_PIXEL_STORE_BIT','GL_CLIENT_ATTRIB_STACK_DEPTH','GL_CLIENT_ALL_ATTRIB_BITS',
+ 'GL_CLIENT_ACTIVE_TEXTURE_ARB','GL_CLIENT_ACTIVE_TEXTURE','GL_CLEAR','GL_CLAMP','GL_CCW','GL_C4UB_V3F','GL_C4UB_V2F',
+ 'GL_C4F_N3F_V3F','GL_C3F_V3F','GL_BYTE','GL_BLUE_SCALE','GL_BLUE_BITS','GL_BLUE_BIAS','GL_BLUE','GL_BLEND_SRC','GL_BLEND_DST',
+ 'GL_BLEND','GL_BITMAP_TOKEN','GL_BITMAP','GL_BGR_EXT','GL_BGRA_EXT','GL_BACK_RIGHT','GL_BACK_LEFT','GL_BACK',
+ 'GL_AUX_BUFFERS','GL_AUX3','GL_AUX2','GL_AUX1','GL_AUX0','GL_AUTO_NORMAL','GL_ATTRIB_STACK_DEPTH','GL_AND_REVERSE',
+ 'GL_AND_INVERTED','GL_AND','GL_AMBIENT_AND_DIFFUSE','GL_AMBIENT','GL_ALWAYS','GL_ALPHA_TEST_REF','GL_ALPHA_TEST_FUNC',
+ 'GL_ALPHA_TEST','GL_ALPHA_SCALE','GL_ALPHA_BITS','GL_ALPHA_BIAS','GL_ALPHA8','GL_ALPHA4','GL_ALPHA16','GL_ALPHA12',
+ 'GL_ALPHA','GL_ALL_ATTRIB_BITS','GL_ADD_SIGNED_EXT','GL_ADD_SIGNED','GL_ADD','GL_ACTIVE_TEXTURE_ARB','GL_ACTIVE_TEXTURE',
+ 'GL_ACCUM_RED_BITS','GL_ACCUM_GREEN_BITS','GL_ACCUM_CLEAR_VALUE','GL_ACCUM_BUFFER_BIT','GL_ACCUM_BLUE_BITS','GL_ACCUM_ALPHA_BITS',
+ 'GL_ACCUM','GL_4_BYTES','GL_4D_COLOR_TEXTURE','GL_3_BYTES','GL_3D_COLOR_TEXTURE','GL_3D_COLOR','GL_3D','GL_2_BYTES',
+ 'GL_2D','GLU_V_STEP','GLU_VERTEX','GLU_VERSION_1_2','GLU_VERSION_1_1','GLU_VERSION','GLU_U_STEP','GLU_UNKNOWN','GLU_TRUE',
+ 'GLU_TESS_WINDING_RULE','GLU_TESS_WINDING_POSITIVE','GLU_TESS_WINDING_ODD','GLU_TESS_WINDING_NONZERO','GLU_TESS_WINDING_NEGATIVE',
+ 'GLU_TESS_WINDING_ABS_GEQ_TWO','GLU_TESS_VERTEX_DATA','GLU_TESS_VERTEX','GLU_TESS_TOLERANCE','GLU_TESS_NEED_COMBINE_CALLBACK','GLU_TESS_MISSING_END_POLYGON',
+ 'GLU_TESS_MISSING_END_CONTOUR','GLU_TESS_MISSING_BEGIN_POLYGON','GLU_TESS_MISSING_BEGIN_CONTOUR','GLU_TESS_ERROR_DATA',
+ 'GLU_TESS_ERROR8','GLU_TESS_ERROR7','GLU_TESS_ERROR6','GLU_TESS_ERROR5','GLU_TESS_ERROR4','GLU_TESS_ERROR3','GLU_TESS_ERROR2',
+ 'GLU_TESS_ERROR1','GLU_TESS_ERROR','GLU_TESS_END_DATA','GLU_TESS_END','GLU_TESS_EDGE_FLAG_DATA','GLU_TESS_EDGE_FLAG',
+ 'GLU_TESS_COORD_TOO_LARGE','GLU_TESS_COMBINE_DATA','GLU_TESS_COMBINE','GLU_TESS_BOUNDARY_ONLY','GLU_TESS_BEGIN_DATA',
+ 'GLU_TESS_BEGIN','GLU_SMOOTH','GLU_SILHOUETTE','GLU_SAMPLING_TOLERANCE','GLU_SAMPLING_METHOD','GLU_POINT','GLU_PATH_LENGTH',
+ 'GLU_PARAMETRIC_TOLERANCE','GLU_PARAMETRIC_ERROR','GLU_OUT_OF_MEMORY','GLU_OUTSIDE','GLU_OUTLINE_POLYGON','GLU_OUTLINE_PATCH',
+ 'GLU_NURBS_ERROR9','GLU_NURBS_ERROR8','GLU_NURBS_ERROR7','GLU_NURBS_ERROR6','GLU_NURBS_ERROR5','GLU_NURBS_ERROR4',
+ 'GLU_NURBS_ERROR37','GLU_NURBS_ERROR36','GLU_NURBS_ERROR35','GLU_NURBS_ERROR34','GLU_NURBS_ERROR33','GLU_NURBS_ERROR32',
+ 'GLU_NURBS_ERROR31','GLU_NURBS_ERROR30','GLU_NURBS_ERROR3','GLU_NURBS_ERROR29','GLU_NURBS_ERROR28','GLU_NURBS_ERROR27','GLU_NURBS_ERROR26',
+ 'GLU_NURBS_ERROR25','GLU_NURBS_ERROR24','GLU_NURBS_ERROR23','GLU_NURBS_ERROR22','GLU_NURBS_ERROR21','GLU_NURBS_ERROR20',
+ 'GLU_NURBS_ERROR2','GLU_NURBS_ERROR19','GLU_NURBS_ERROR18','GLU_NURBS_ERROR17','GLU_NURBS_ERROR16','GLU_NURBS_ERROR15','GLU_NURBS_ERROR14',
+ 'GLU_NURBS_ERROR13','GLU_NURBS_ERROR12','GLU_NURBS_ERROR11','GLU_NURBS_ERROR10','GLU_NURBS_ERROR1','GLU_NONE',
+ 'GLU_MAP1_TRIM_3','GLU_MAP1_TRIM_2','GLU_LINE','GLU_INVALID_VALUE','GLU_INVALID_ENUM','GLU_INTERIOR','GLU_INSIDE','GLU_INCOMPATIBLE_GL_VERSION',
+ 'GLU_FLAT','GLU_FILL','GLU_FALSE','GLU_EXTERIOR','GLU_EXTENSIONS','GLU_ERROR','GLU_END','GLU_EDGE_FLAG','GLU_DOMAIN_DISTANCE',
+ 'GLU_DISPLAY_MODE','GLU_CW','GLU_CULLING','GLU_CCW','GLU_BEGIN','GLU_AUTO_LOAD_MATRIX','CHANNEL_UNORDERED','CHANNEL_ORDERED',
+ 'CHANNEL_MAX'
+ ),
+ 2 => array(
+
+ // Red Lowercase Keywords
+
+ 'WriteWord','WriteString','WriteReal','WriteLine','WriteInt','WriteFloat','WriteDouble','WriteChar','WriteByte',
+ 'windowwidth','windowheight','waittimer','Vec4','Vec3','Vec2','val','UpdateJoystick','ucase$','Transpose','tickcount',
+ 'textscroll','textrows','textmode','textcols','tanh','tand','tan','synctimercatchup','synctimer','swapbuffers',
+ 'str$','stopsoundvoice','stopsounds','stopmusic','sqrt','sqr','sprzorder','spryvel','sprytiles','sprysize','spryrepeat',
+ 'spryflip','sprycentre','spry','sprxvel','sprxtiles','sprxsize','sprxrepeat','sprxflip','sprxcentre','sprx',
+ 'sprvisible','sprvel','sprtype','sprtop','sprspin','sprsolid','sprsetzorder','sprsetyvel','sprsetysize','sprsetyrepeat',
+ 'sprsetyflip','sprsetycentre','sprsety','sprsetxvel','sprsetxsize','sprsetxrepeat','sprsetxflip','sprsetxcentre',
+ 'sprsetx','sprsetvisible','sprsetvel','sprsettiles','sprsettextures','sprsettexture','sprsetspin','sprsetsolid',
+ 'sprsetsize','sprsetscale','sprsetpos','sprsetparallax','sprsetframe','sprsetcolor','sprsetanimspeed','sprsetanimloop',
+ 'sprsetangle','sprsetalpha','sprscale','sprright','sprpos','sprparallax','sprleft','spriteareawidth','spriteareaheight',
+ 'sprframe','sprcolor','sprcameraz','sprcameray','sprcamerax','sprcamerasetz','sprcamerasety','sprcamerasetx',
+ 'sprcamerasetpos','sprcamerasetfov','sprcamerasetangle','sprcamerapos','sprcamerafov','sprcameraangle',
+ 'sprbottom','spranimspeed','spranimloop','spranimdone','sprangle','spralpha','spraddtextures','spraddtexture',
+ 'sounderror','sleep','sind','sin','showcursor','sgn','settextscroll','setmusicvolume','SendMessage','Seek',
+ 'scankeydown','RTInvert','rnd','right$','resizetext','resizespritearea','RejectConnection','ReceiveMessage','ReadWord',
+ 'ReadText','ReadReal','ReadLine','ReadInt','ReadFloat','ReadDouble','ReadChar','ReadByte','randomize','printr',
+ 'print','pow','playsound','playmusic','performancecounter','Orthonormalize','OpenFileWrite','OpenFileRead','Normalize',
+ 'newtilemap','newsprite','NewServer','NewConnection','musicplaying','mouse_yd','mouse_y','mouse_xd','mouse_x',
+ 'mouse_wheel','mouse_button','mid$','MessageSmoothed','MessageReliable','MessagePending','MessageChannel','maxtextureunits',
+ 'MatrixZero','MatrixTranslate','MatrixScale','MatrixRotateZ','MatrixRotateY','MatrixRotateX','MatrixRotate','MatrixIdentity',
+ 'MatrixCrossProduct','MatrixBasis','log','locate','loadtexture','loadsound','loadmipmaptexture','loadmipmapimagestrip',
+ 'loadimagestrip','loadimage','Length','len','left$','lcase$','keydown','Joy_Y','Joy_X','Joy_Up','Joy_Right','Joy_Left',
+ 'Joy_Keys','Joy_Down','Joy_Button','Joy_3','Joy_2','Joy_1','Joy_0','int','inscankey','input$','inkey$','inittimer',
+ 'imagewidth','imagestripframes','imageheight','imageformat','imagedatatype','hidecursor','glViewport','glVertex4sv',
+ 'glVertex4s','glVertex4iv','glVertex4i','glVertex4fv','glVertex4f','glVertex4dv','glVertex4d','glVertex3sv','glVertex3s',
+ 'glVertex3iv','glVertex3i','glVertex3fv','glVertex3f','glVertex3dv','glVertex3d','glVertex2sv','glVertex2s','glVertex2iv',
+ 'glVertex2i','glVertex2fv','glVertex2f','glVertex2dv','glVertex2d','gluPerspective','gluOrtho2D','gluLookAt',
+ 'glubuild2dmipmaps','glTranslatef','glTranslated','gltexsubimage2d','glTexParameteriv','glTexParameteri',
+ 'glTexParameterfv','glTexParameterf','glteximage2d','glTexGeniv','glTexGeni','glTexGenfv','glTexGenf','glTexGendv',
+ 'glTexGend','glTexEnviv','glTexEnvi','glTexEnvfv','glTexEnvf','glTexCoord4sv','glTexCoord4s','glTexCoord4iv','glTexCoord4i',
+ 'glTexCoord4fv','glTexCoord4f','glTexCoord4dv','glTexCoord4d','glTexCoord3sv','glTexCoord3s','glTexCoord3iv','glTexCoord3i',
+ 'glTexCoord3fv','glTexCoord3f','glTexCoord3dv','glTexCoord3d','glTexCoord2sv','glTexCoord2s','glTexCoord2iv','glTexCoord2i',
+ 'glTexCoord2fv','glTexCoord2f','glTexCoord2dv','glTexCoord2d','glTexCoord1sv','glTexCoord1s','glTexCoord1iv','glTexCoord1i','glTexCoord1fv',
+ 'glTexCoord1f','glTexCoord1dv','glTexCoord1d','glStencilOp','glStencilMask','glStencilFunc','glShadeModel','glSelectBuffer',
+ 'glScissor','glScalef','glScaled','glRotatef','glRotated','glRenderMode','glRectsv','glRects','glRectiv','glRecti',
+ 'glRectfv','glRectf','glRectdv','glRectd','glReadBuffer','glRasterPos4sv','glRasterPos4s','glRasterPos4iv',
+ 'glRasterPos4i','glRasterPos4fv','glRasterPos4f','glRasterPos4dv','glRasterPos4d','glRasterPos3sv','glRasterPos3s',
+ 'glRasterPos3iv','glRasterPos3i','glRasterPos3fv','glRasterPos3f','glRasterPos3dv','glRasterPos3d','glRasterPos2sv',
+ 'glRasterPos2s','glRasterPos2iv','glRasterPos2i','glRasterPos2fv','glRasterPos2f','glRasterPos2dv','glRasterPos2d',
+ 'glPushName','glPushMatrix','glPushClientAttrib','glPushAttrib','glPrioritizeTextures','glPopName','glPopMatrix',
+ 'glPopClientAttrib','glPopAttrib','glpolygonstipple','glPolygonOffset','glPolygonMode','glPointSize','glPixelZoom',
+ 'glPixelTransferi','glPixelTransferf','glPixelStorei','glPixelStoref','glPassThrough','glOrtho','glNormal3sv','glNormal3s',
+ 'glNormal3iv','glNormal3i','glNormal3fv','glNormal3f','glNormal3dv','glNormal3d','glNormal3bv','glNormal3b','glNewList',
+ 'glMultMatrixf','glMultMatrixd','glmultitexcoord2f','glmultitexcoord2d','glMatrixMode','glMaterialiv','glMateriali',
+ 'glMaterialfv','glMaterialf','glMapGrid2f','glMapGrid2d','glMapGrid1f','glMapGrid1d','glLogicOp','glLoadName','glLoadMatrixf',
+ 'glLoadMatrixd','glLoadIdentity','glListBase','glLineWidth','glLineStipple','glLightModeliv','glLightModeli','glLightModelfv',
+ 'glLightModelf','glLightiv','glLighti','glLightfv','glLightf','glIsTexture','glIsList','glIsEnabled','glInitNames',
+ 'glIndexubv','glIndexub','glIndexsv','glIndexs','glIndexMask','glIndexiv','glIndexi','glIndexfv','glIndexf','glIndexdv',
+ 'glIndexd','glHint','glGetTexParameteriv','glGetTexParameterfv','glGetTexLevelParameteriv','glGetTexLevelParameterfv',
+ 'glGetTexGeniv','glGetTexGenfv','glGetTexGendv','glGetTexEnviv','glGetTexEnvfv','glgetstring','glgetpolygonstipple','glGetPixelMapuiv',
+ 'glGetMaterialiv','glGetMaterialfv','glGetLightiv','glGetLightfv','glGetIntegerv','glGetFloatv',
+ 'glGetError','glGetDoublev','glGetClipPlane','glGetBooleanv','glgentextures','glgentexture',
+ 'glgenlists','glFrustum','glFrontFace','glFogiv','glFogi','glFogfv','glFogf','glFlush','glFinish','glFeedbackBuffer',
+ 'glEvalPoint2','glEvalPoint1','glEvalMesh2','glEvalMesh1','glEvalCoord2fv','glEvalCoord2f','glEvalCoord2dv','glEvalCoord2d',
+ 'glEvalCoord1fv','glEvalCoord1f','glEvalCoord1dv','glEvalCoord1d','glEndList','glEnd','glEnableClientState','glEnable',
+ 'glEdgeFlagv','glEdgeFlag','glDrawBuffer','glDrawArrays','glDisableClientState','glDisable','glDepthRange','glDepthMask',
+ 'glDepthFunc','gldeletetextures','gldeletetexture','gldeletelists','glCullFace','glCopyTexSubImage2D','glCopyTexSubImage1D',
+ 'glCopyTexImage2D','glCopyTexImage1D','glColorMaterial','glColorMask','glColor4usv','glColor4us','glColor4uiv','glColor4ui',
+ 'glColor4ubv','glColor4ub','glColor4sv','glColor4s','glColor4iv','glColor4i','glColor4fv','glColor4f','glColor4dv',
+ 'glColor4d','glColor4bv','glColor4b','glColor3usv','glColor3us','glColor3uiv','glColor3ui','glColor3ubv','glColor3ub',
+ 'glColor3sv','glColor3s','glColor3iv','glColor3i','glColor3fv','glColor3f','glColor3dv','glColor3d','glColor3bv',
+ 'glColor3b','glClipPlane','glClearStencil','glClearIndex','glClearDepth','glClearColor','glClearAccum','glClear',
+ 'glcalllists','glCallList','glBlendFunc','glBindTexture','glBegin','glArrayElement','glAreTexturesResident',
+ 'glAlphaFunc','glactivetexture','glAccum','font','FindNextFile','FindFirstFile','FindClose','FileError',
+ 'extensionsupported','exp','execute','EndOfFile','drawtext','divbyzero','Determinant','deletesprite','deletesound',
+ 'DeleteServer','deleteimage','DeleteConnection','defaultfont','CrossProduct','cosd','cos','copysprite','ConnectionPending',
+ 'ConnectionHandShaking','ConnectionConnected','ConnectionAddress','compilererrorline','compilererrorcol','compilererror',
+ 'compilefile','compile','color','cls','CloseFile','clearregion','clearline','clearkeys','chr$','charat$','bindsprite',
+ 'beep','atnd','atn2d','atn2','atn','atand','asc','argcount','arg','animatesprites','AcceptConnection','abs'
+ ),
+ 3 => array(
+
+ // Blue Lowercase Keywords
+
+ 'xor','while','wend','until','type','traditional_print','traditional','to','then','struc','string','step','single',
+ 'run','return','reset','read','or','null','not','next','lor','loop','language','land','integer','input','if',
+ 'goto','gosub','for','endstruc','endif','end','elseif','else','double','do','dim','data','const','basic4gl','as',
+ 'and','alloc'
+ )
+
+ ),
+ 'SYMBOLS' => array(
+ '=', '<', '>', '>=', '<=', '+', '-', '*', '/', '%', '(', ')', '{', '}', '[', ']', '&', ';', ':', '$'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080; font-weight: bold;',
+ 2 => 'color: #FF0000;',
+ 3 => 'color: #0000FF;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #657CC4; font-style: italic;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000080;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000080; font-weight: bold;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #0000FF;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php
new file mode 100644
index 000000000..c4be922e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php
@@ -0,0 +1,114 @@
+<?php
+/*************************************************************************************
+ * bf.php
+ * ----------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/10/31
+ *
+ * Brainfuck language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/31 (1.0.8.1)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'Brainfuck',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(1 => '/[^\n+\-<>\[\]\.\,Y]+/s'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('+', '-'),
+ 1 => array('[', ']'),
+ 2 => array('<', '>'),
+ 3 => array('.', ','),
+ 4 => array('Y') //Brainfork Extension ;-)
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006600;',
+ 1 => 'color: #660000;',
+ 2 => 'color: #000066;',
+ 3 => 'color: #660066;',
+ 4 => 'color: #666600;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'STRINGS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ ),
+ 'KEYWORDS' => array(
+ 'DISALLOW_BEFORE' => '',
+ 'DISALLOW_AFTER' => ''
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php
new file mode 100644
index 000000000..3ad5eabf0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php
@@ -0,0 +1,185 @@
+<?php
+/*************************************************************************************
+ * blitzbasic.php
+ * --------------
+ * Author: P�draig O`Connel (info@moonsword.info)
+ * Copyright: (c) 2005 P�draig O`Connel (http://moonsword.info)
+ * Release Version: 1.0.8.4
+ * Date Started: 16.10.2005
+ *
+ * BlitzBasic language file for GeSHi.
+ *
+ * It is a simple Basic dialect. Released for Games and Network Connections.
+ * In this Language File are all functions included (2D BB and 3D BB)
+ *
+ *
+ * CHANGES
+ * -------
+ * 2005/12/28 (1.0.1)
+ * - Remove unnecessary style index for regexps
+ * 2005/10/22 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/10/22)
+ * -------------------------
+ * * Sort out the Basic commands for splitting up.
+ * * To set up the right colors.
+ * (the colors are ok, but not the correct ones)
+ * * Split to BlitzBasic 2D and BlitzBasic 3D.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'BlitzBasic',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'If','EndIf','ElseIf','Else If','Else','While','Wend','Return','Next','Include','End Type','End Select','End If','End Function','End','Select',
+ 'Type','Forever','For','Or','And','AppTitle','Case','Goto','Gosub','Step','Stop','Int','Last','False','Then','To','True','Until','Float',
+ 'String','Before','Not'
+ ),
+ 2 => array(
+ // All Functions - 2D BB and 3D BB
+ 'Xor','WriteString','WriteShort','WritePixelFast','WritePixel','WriteLine','WriteInt','WriteFloat','WriteFile','WriteBytes',
+ 'WriteByte','Write','WaitTimer','WaitMouse','WaitKey','WaitJoy','VWait','Viewport',
+ 'Upper','UpdateGamma','UnlockBuffer','UDPTimeouts','UDPStreamPort','UDPStreamIP','UDPMsgPort','UDPMsgIP',
+ 'Trim','TotalVidMem','TileImage','TileBlock','TFormImage','TFormFilter','Text',
+ 'TCPTimeouts','TCPStreamPort','TCPStreamIP','Tan','SystemProperty','StringWidth','StringHeight','Str','StopNetGame',
+ 'StopChannel','StartNetGame','Sqr','SoundVolume','SoundPitch','SoundPan','Sin','Shr',
+ 'ShowPointer','Shl','Sgn','SetGfxDriver','SetGamma','SetFont','SetEnv','SetBuffer','SendUDPMsg','SendNetMsg',
+ 'SeekFile','SeedRnd','ScanLine','ScaleImage','SaveImage','SaveBuffer','Sar','RuntimeError','RSet',
+ 'RotateImage','RndSeed','Rnd','Right','ResumeChannel','Restore','ResizeImage','ResizeBank','Replace',
+ 'Repeat','RecvUDPMsg','RecvNetMsg','RectsOverlap','Rect','ReadString','ReadShort','ReadPixelFast','ReadPixel','ReadLine',
+ 'ReadInt','ReadFloat','ReadFile','ReadDir','ReadBytes','ReadByte','ReadAvail','Read','Rand','Print',
+ 'PokeShort','PokeInt','PokeFloat','PokeByte','Plot','PlaySound','PlayMusic','PlayCDTrack','Pi','PeekShort',
+ 'PeekInt','PeekFloat','PeekByte','PauseChannel','Oval','Origin','OpenTCPStream','OpenMovie','OpenFile',
+ 'Null','NextFile','New','NetPlayerName','NetPlayerLocal','NetMsgType','NetMsgTo','NetMsgFrom',
+ 'NetMsgData','MovieWidth','MoviePlaying','MovieHeight','MoveMouse','MouseZSpeed','MouseZ','MouseYSpeed','MouseY','MouseXSpeed',
+ 'MouseX','MouseHit','MouseDown','Mod','Millisecs','MidHandle','Mid','MaskImage','LSet','Lower',
+ 'LoopSound','Log10','Log','LockBuffer','Locate','Local','LoadSound','LoadImage','LoadFont','LoadBuffer',
+ 'LoadAnimImage','Line','Len','Left','KeyHit','KeyDown','JoyZDir','JoyZ','JoyYDir',
+ 'JoyYaw','JoyY','JoyXDir','JoyX','JoyVDir','JoyV','JoyUDir','JoyU','JoyType','JoyRoll',
+ 'JoyPitch','JoyHit','JoyHat','JoyDown','JoinNetGame','Instr','Insert','Input',
+ 'ImageYHandle','ImageXHandle','ImageWidth','ImagesOverlap','ImagesCollide','ImageRectOverlap','ImageRectCollide','ImageHeight','ImageBuffer',
+ 'HostNetGame','HostIP','HidePointer','Hex','HandleImage','GraphicsWidth','GraphicsHeight','GraphicsDepth','GraphicsBuffer','Graphics',
+ 'GrabImage','Global','GFXModeWidth','GFXModeHeight','GfxModeExists','GFXModeDepth','GfxDriverName','GetMouse',
+ 'GetKey','GetJoy','GetEnv','GetColor','GammaRed','GammaGreen','GammaBlue','Function','FrontBuffer','FreeTimer',
+ 'FreeSound','FreeImage','FreeFont','FreeBank','FontWidth','FontHeight','FlushMouse','FlushKeys',
+ 'FlushJoy','Floor','Flip','First','FileType','FileSize','FilePos','Field',
+ 'Exp','Exit','ExecFile','Eof','EndGraphics','Each','DrawMovie','DrawImageRect','DrawImage','DrawBlockRect','DrawBlock',
+ 'DottedIP','Dim','DeleteNetPlayer','DeleteFile','DeleteDir','Delete','Delay','Default','DebugLog','Data',
+ 'CurrentTime','CurrentDir','CurrentDate','CreateUDPStream','CreateTimer','CreateTCPServer','CreateNetPlayer','CreateImage','CreateDir','CreateBank',
+ 'CountHostIPs','CountGFXModes','CountGfxDrivers','Cos','CopyStream','CopyRect','CopyPixelFast','CopyPixel','CopyImage','CopyFile',
+ 'CopyBank','Const','CommandLine','ColorRed','ColorGreen','ColorBlue','Color','ClsColor','Cls','CloseUDPStream',
+ 'CloseTCPStream','CloseTCPServer','CloseMovie','CloseFile','CloseDir','Chr','ChannelVolume','ChannelPlaying','ChannelPitch','ChannelPan',
+ 'ChangeDir','Ceil','CallDLL','Bin','BankSize','BackBuffer','AvailVidMem','AutoMidHandle',
+ 'ATan2','ATan','ASin','Asc','After','ACos','AcceptTCPStream','Abs',
+ // 3D Commands
+ 'Wireframe','Windowed3D','WBuffer','VertexZ','VertexY',
+ 'VertexX','VertexW','VertexV','VertexU','VertexTexCoords','VertexRed','VertexNZ','VertexNY','VertexNX','VertexNormal',
+ 'VertexGreen','VertexCoords','VertexColor','VertexBlue','VertexAlpha','VectorYaw','VectorPitch','UpdateWorld','UpdateNormals','TurnEntity',
+ 'TrisRendered','TriangleVertex','TranslateEntity','TFormVector','TFormPoint','TFormNormal','TFormedZ','TFormedY','TFormedX','TextureWidth',
+ 'TextureName','TextureHeight','TextureFilter','TextureCoords','TextureBuffer','TextureBlend','TerrainZ','TerrainY','TerrainX','TerrainSize',
+ 'TerrainShading','TerrainHeight','TerrainDetail','SpriteViewMode','ShowEntity','SetCubeFace','SetAnimTime','SetAnimKey','ScaleTexture','ScaleSprite',
+ 'ScaleMesh','ScaleEntity','RotateTexture','RotateSprite','RotateMesh','RotateEntity','ResetEntity','RenderWorld','ProjectedZ','ProjectedY',
+ 'ProjectedX','PositionTexture','PositionMesh','PositionEntity','PointEntity','PickedZ','PickedY','PickedX','PickedTriangle','PickedTime',
+ 'PickedSurface','PickedNZ','PickedNY','PickedNX','PickedEntity','PaintSurface','PaintMesh','PaintEntity','NameEntity','MoveEntity',
+ 'ModifyTerrain','MeshWidth','MeshHeight','MeshesIntersect','MeshDepth','MD2AnimTime','MD2AnimLength','MD2Animating','LoadTexture','LoadTerrain',
+ 'LoadSprite','LoadMesh','LoadMD2','LoaderMatrix','LoadBSP','LoadBrush','LoadAnimTexture','LoadAnimSeq','LoadAnimMesh','Load3DSound',
+ 'LinePick','LightRange','LightMesh','LightConeAngles','LightColor','HWMultiTex','HideEntity','HandleSprite','Graphics3D','GfxMode3DExists',
+ 'GfxMode3D','GfxDriverCaps3D','GfxDriver3D','GetSurfaceBrush','GetSurface','GetParent','GetMatElement','GetEntityType','GetEntityBrush','GetChild',
+ 'GetBrushTexture','FreeTexture','FreeEntity','FreeBrush','FlipMesh','FitMesh','FindSurface','FindChild','ExtractAnimSeq','EntityZ',
+ 'EntityYaw','EntityY','EntityX','EntityVisible','EntityType','EntityTexture','EntityShininess','EntityRoll','EntityRadius','EntityPitch',
+ 'EntityPickMode','EntityPick','EntityParent','EntityOrder','EntityName','EntityInView','EntityFX','EntityDistance','EntityColor','EntityCollided',
+ 'EntityBox','EntityBlend','EntityAutoFade','EntityAlpha','EmitSound','Dither','DeltaYaw','DeltaPitch','CreateTexture','CreateTerrain',
+ 'CreateSurface','CreateSprite','CreateSphere','CreatePlane','CreatePivot','CreateMirror','CreateMesh','CreateListener','CreateLight','CreateCylinder',
+ 'CreateCube','CreateCone','CreateCamera','CreateBrush','CountVertices','CountTriangles','CountSurfaces','CountGfxModes3D','CountCollisions','CountChildren',
+ 'CopyMesh','CopyEntity','CollisionZ','CollisionY','CollisionX','CollisionTriangle','CollisionTime','CollisionSurface','Collisions','CollisionNZ',
+ 'CollisionNY','CollisionNX','CollisionEntity','ClearWorld','ClearTextureFilters','ClearSurface','ClearCollisions','CaptureWorld','CameraZoom','CameraViewport',
+ 'CameraRange','CameraProjMode','CameraProject','CameraPick','CameraFogRange','CameraFogMode','CameraFogColor','CameraClsMode','CameraClsColor','BSPLighting',
+ 'BSPAmbientLight','BrushTexture','BrushShininess','BrushFX','BrushColor','BrushBlend','BrushAlpha','AntiAlias','AnimTime','AnimSeq',
+ 'AnimLength','Animating','AnimateMD2','Animate','AmbientLight','AlignToVector','AddVertex','AddTriangle','AddMesh','AddAnimSeq',
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(',')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000066; font-weight: bold;',
+ 2 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #D9D100; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #CC0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '\\'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ 1 => false
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php
new file mode 100644
index 000000000..0032acf48
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php
@@ -0,0 +1,110 @@
+<?php
+/*************************************************************************************
+ * bnf.php
+ * --------
+ * Author: Rowan Rodrik van der Molen (rowan@bigsmoke.us)
+ * Copyright: (c) 2006 Rowan Rodrik van der Molen (http://www.bigsmoke.us/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/09/28
+ *
+ * BNF (Backus-Naur form) language file for GeSHi.
+ *
+ * See http://en.wikipedia.org/wiki/Backus-Naur_form for more info on BNF.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * - Removed superflicious regexps
+ * 2006/09/18 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/09/18)
+ * -------------------------
+ * * Nothing I can think of
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'bnf',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(),
+ 'SYMBOLS' => array(
+ '(', ')', '<', '>', '::=', '|'
+ ),
+ 'CASE_SENSITIVE' => array(
+ //GESHI_COMMENTS => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(),
+ 'COMMENTS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => ''
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #a00;',
+ 1 => 'color: #a00;'
+ ),
+ 'NUMBERS' => array(
+ 0 => ''
+ ),
+ 'METHODS' => array(
+ 0 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066; font-weight: bold;', // Unused
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #007;',
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ //terminal symbols
+ 0 => array(
+ GESHI_SEARCH => '(&lt;)([^&]+?)(&gt;)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php
new file mode 100644
index 000000000..d555dd4a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php
@@ -0,0 +1,217 @@
+<?php
+/*************************************************************************************
+ * boo.php
+ * --------
+ * Author: Marcus Griep (neoeinstein+GeSHi@gmail.com)
+ * Copyright: (c) 2007 Marcus Griep (http://www.xpdm.us)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/09/10
+ *
+ * Boo language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/09/10 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2007/09/10)
+ * -------------------------
+ * Regular Expression Literal matching
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Boo',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'''", "'", '"""', '"'),
+ 'HARDQUOTE' => array('"""', '"""'),
+ 'HARDESCAPE' => array('\"""'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(//Namespace
+ 'namespace', 'import', 'from'
+ ),
+ 2 => array(//Jump
+ 'yield', 'return', 'goto', 'continue', 'break'
+ ),
+ 3 => array(//Conditional
+ 'while', 'unless', 'then', 'in', 'if', 'for', 'else', 'elif'
+ ),
+ 4 => array(//Property
+ 'set', 'get'
+ ),
+ 5 => array(//Exception
+ 'try', 'raise', 'failure', 'except', 'ensure'
+ ),
+ 6 => array(//Visibility
+ 'public', 'private', 'protected', 'internal'
+ ),
+ 7 => array(//Define
+ 'struct', 'ref', 'of', 'interface', 'event', 'enum', 'do', 'destructor', 'def', 'constructor', 'class'
+ ),
+ 8 => array(//Cast
+ 'typeof', 'cast', 'as'
+ ),
+ 9 => array(//BiMacro
+ 'yieldAll', 'using', 'unchecked', 'rawArayIndexing', 'print', 'normalArrayIndexing', 'lock',
+ 'debug', 'checked', 'assert'
+ ),
+ 10 => array(//BiAttr
+ 'required', 'property', 'meta', 'getter', 'default'
+ ),
+ 11 => array(//BiFunc
+ 'zip', 'shellp', 'shellm', 'shell', 'reversed', 'range', 'prompt',
+ 'matrix', 'map', 'len', 'join', 'iterator', 'gets', 'enumerate', 'cat', 'array'
+ ),
+ 12 => array(//HiFunc
+ '__switch__', '__initobj__', '__eval__', '__addressof__', 'quack'
+ ),
+ 13 => array(//Primitive
+ 'void', 'ushort', 'ulong', 'uint', 'true', 'timespan', 'string', 'single',
+ 'short', 'sbyte', 'regex', 'object', 'null', 'long', 'int', 'false', 'duck',
+ 'double', 'decimal', 'date', 'char', 'callable', 'byte', 'bool'
+ ),
+ 14 => array(//Operator
+ 'not', 'or', 'and', 'is', 'isa',
+ ),
+ 15 => array(//Modifier
+ 'virtual', 'transient', 'static', 'partial', 'override', 'final', 'abstract'
+ ),
+ 16 => array(//Access
+ 'super', 'self'
+ ),
+ 17 => array(//Pass
+ 'pass'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '[|', '|]', '${', '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>', '+', '-', ';'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true,
+ 10 => true,
+ 11 => true,
+ 12 => true,
+ 13 => true,
+ 14 => true,
+ 15 => true,
+ 16 => true,
+ 17 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color:green;font-weight:bold;',
+ 2 => 'color:navy;',
+ 3 => 'color:blue;font-weight:bold;',
+ 4 => 'color:#8B4513;',
+ 5 => 'color:teal;font-weight:bold;',
+ 6 => 'color:blue;font-weight:bold;',
+ 7 => 'color:blue;font-weight:bold;',
+ 8 => 'color:blue;font-weight:bold;',
+ 9 => 'color:maroon;',
+ 10 => 'color:maroon;',
+ 11 => 'color:purple;',
+ 12 => 'color:#4B0082;',
+ 13 => 'color:purple;font-weight:bold;',
+ 14 => 'color:#008B8B;font-weight:bold;',
+ 15 => 'color:brown;',
+ 16 => 'color:black;font-weight:bold;',
+ 17 => 'color:gray;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #999999; font-style: italic;',
+ 2 => 'color: #999999; font-style: italic;',
+ 'MULTI' => 'color: #008000; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #0000FF; font-weight: bold;',
+ 'HARD' => 'color: #0000FF; font-weight: bold;',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #006400;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #008000;',
+ 'HARD' => 'color: #008000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #00008B;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: 000000;',
+ 1 => 'color: 000000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006400;'
+ ),
+ 'REGEXPS' => array(
+ #0 => 'color: #0066ff;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => '',
+ 17 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 0 => '.',
+ 1 => '::'
+ ),
+ 'REGEXPS' => array(
+ #0 => '%(@)?\/(?:(?(1)[^\/\\\\\r\n]+|[^\/\\\\\r\n \t]+)|\\\\[\/\\\\\w+()|.*?$^[\]{}\d])+\/%'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php
new file mode 100644
index 000000000..86f576ef6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php
@@ -0,0 +1,188 @@
+<?php
+/*************************************************************************************
+ * c.php
+ * -----
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Contributors:
+ * - Jack Lloyd (lloyd@randombit.net)
+ * - Michael Mol (mikemol@gmail.com)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * C language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2009/01/22 (1.0.8.3)
+ * - Made keywords case-sensitive.
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/XX/XX (1.0.4)
+ * - Added a couple of new keywords (Jack Lloyd)
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2009/02/08)
+ * -------------------------
+ * - Get a list of inbuilt functions to add (and explore C more
+ * to complete this rather bare language file
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'if', 'return', 'while', 'case', 'continue', 'default',
+ 'do', 'else', 'for', 'switch', 'goto'
+ ),
+ 2 => array(
+ 'null', 'false', 'break', 'true', 'function', 'enum', 'extern', 'inline'
+ ),
+ 3 => array(
+ 'printf', 'cout'
+ ),
+ 4 => array(
+ 'auto', 'char', 'const', 'double', 'float', 'int', 'long',
+ 'register', 'short', 'signed', 'sizeof', 'static', 'string', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'wchar_t'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']',
+ '+', '-', '*', '/', '%',
+ '=', '<', '>',
+ '!', '^', '&', '|',
+ '?', ':',
+ ';', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #993333;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #339933;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;',
+ 2 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php
new file mode 100644
index 000000000..46a3600fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php
@@ -0,0 +1,212 @@
+<?php
+/*************************************************************************************
+ * c_mac.php
+ * ---------
+ * Author: M. Uli Kusterer (witness.of.teachtext@gmx.net)
+ * Copyright: (c) 2004 M. Uli Kusterer, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * C for Macs language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C (Mac)',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'if', 'return', 'while', 'case', 'continue', 'default',
+ 'do', 'else', 'for', 'switch', 'goto'
+ ),
+ 2 => array(
+ 'NULL', 'false', 'break', 'true', 'enum', 'errno', 'EDOM',
+ 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
+ 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
+ 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
+ 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
+ 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
+ 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
+ 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
+ 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
+ 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
+ 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
+ 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
+ // Mac-specific constants:
+ 'kCFAllocatorDefault'
+ ),
+ 3 => array(
+ 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
+ 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
+ 'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
+ 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
+ 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
+ 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
+ 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
+ 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
+ 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
+ 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
+ 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
+ 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
+ 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
+ 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
+ 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
+ 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
+ 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
+ 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
+ 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
+ ),
+ 4 => array(
+ 'auto', 'char', 'const', 'double', 'float', 'int', 'long',
+ 'register', 'short', 'signed', 'static', 'string', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
+ 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
+ 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm',
+ // Mac-specific types:
+ 'CFArrayRef', 'CFDictionaryRef', 'CFMutableDictionaryRef', 'CFBundleRef', 'CFSetRef', 'CFStringRef',
+ 'CFURLRef', 'CFLocaleRef', 'CFDateFormatterRef', 'CFNumberFormatterRef', 'CFPropertyListRef',
+ 'CFTreeRef', 'CFWriteStreamRef', 'CFCharacterSetRef', 'CFMutableStringRef', 'CFNotificationRef',
+ 'CFReadStreamRef', 'CFNull', 'CFAllocatorRef', 'CFBagRef', 'CFBinaryHeapRef',
+ 'CFBitVectorRef', 'CFBooleanRef', 'CFDataRef', 'CFDateRef', 'CFMachPortRef', 'CFMessagePortRef',
+ 'CFMutableArrayRef', 'CFMutableBagRef', 'CFMutableBitVectorRef', 'CFMutableCharacterSetRef',
+ 'CFMutableDataRef', 'CFMutableSetRef', 'CFNumberRef', 'CFPlugInRef', 'CFPlugInInstanceRef',
+ 'CFRunLoopRef', 'CFRunLoopObserverRef', 'CFRunLoopSourceRef', 'CFRunLoopTimerRef', 'CFSocketRef',
+ 'CFTimeZoneRef', 'CFTypeRef', 'CFUserNotificationRef', 'CFUUIDRef', 'CFXMLNodeRef', 'CFXMLParserRef',
+ 'CFXMLTreeRef'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #0000dd;',
+ 4 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #ff0000;',
+ 2 => 'color: #339900;',
+ 'MULTI' => 'color: #ff0000; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #666666;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #00eeff;',
+ 2 => 'color: #00eeff;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php
new file mode 100644
index 000000000..12e1d3b75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php
@@ -0,0 +1,126 @@
+<?php
+/*************************************************************************************
+ * caddcl.php
+ * ----------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * CAD DCL (Dialog Control Language) language file for GeSHi.
+ *
+ * DCL for AutoCAD 12 or later and IntelliCAD all versions.
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/1!/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'CAD DCL',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'boxed_column','boxed_radio_column','boxed_radio_row','boxed_row',
+ 'column','concatenation','button','dialog','edit_box','image','image_button',
+ 'errtile','list_box','ok_cancel','ok_cancel_help','ok_cancel_help_errtile',
+ 'ok_cancel_help_info','ok_only','paragraph','popup_list','radio_button',
+ 'radio_column','radio_row','row','slider','spacer','spacer_0','spacer_1','text',
+ 'text_part','toggle',
+ 'action','alignment','allow_accept','aspect_ratio','big_increment',
+ 'children_alignment','children_fixed_height',
+ 'children_fixed_width','color',
+ 'edit_limit','edit_width','fixed_height','fixed_width',
+ 'height','initial_focus','is_cancel','is_default',
+ 'is_enabled','is_tab_stop','is-bold','key','label','layout','list',
+ 'max_value','min_value','mnemonic','multiple_select','password_char',
+ 'small_increment','tabs','tab_truncate','value','width',
+ 'false','true','left','right','centered','top','bottom',
+ 'dialog_line','dialog_foreground','dialog_background',
+ 'graphics_background','black','red','yellow','green','cyan',
+ 'blue','magenta','whitegraphics_foreground',
+ 'horizontal','vertical'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php
new file mode 100644
index 000000000..c537370d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php
@@ -0,0 +1,186 @@
+<?php
+/*************************************************************************************
+ * cadlisp.php
+ * -----------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/blog)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * AutoCAD/IntelliCAD Lisp language file for GeSHi.
+ *
+ * For AutoCAD V.12..2005 and IntelliCAD all versions.
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'CAD Lisp',
+ 'COMMENT_SINGLE' => array(1 => ";"),
+ 'COMMENT_MULTI' => array(";|" => "|;"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abs','acad_colordlg','acad_helpdlg','acad_strlsort','action_tile',
+ 'add_list','alert','alloc','and','angle','angtof','angtos','append','apply',
+ 'arx','arxload','arxunload','ascii','assoc','atan','atof','atoi','atom',
+ 'atoms-family','autoarxload','autoload','Boole','boundp','caddr',
+ 'cadr','car','cdr','chr','client_data_tile','close','command','cond',
+ 'cons','cos','cvunit','defun','defun-q','defun-q-list-ref',
+ 'defun-q-list-set','dictadd','dictnext','dictremove','dictrename',
+ 'dictsearch','dimx_tile','dimy_tile','distance','distof','done_dialog',
+ 'end_image','end_list','entdel','entget','entlast','entmake',
+ 'entmakex','entmod','entnext','entsel','entupd','eq','equal','eval','exit',
+ 'exp','expand','expt','fill_image','findfile','fix','float','foreach','function',
+ 'gc','gcd','get_attr','get_tile','getangle','getcfg','getcname','getcorner',
+ 'getdist','getenv','getfiled','getint','getkword','getorient','getpoint',
+ 'getreal','getstring','getvar','graphscr','grclear','grdraw','grread','grtext',
+ 'grvecs','handent','help','if','initdia','initget','inters','itoa','lambda','last',
+ 'layoutlist','length','list','listp','load','load_dialog','log','logand','logior',
+ 'lsh','mapcar','max','mem','member','menucmd','menugroup','min','minusp','mode_tile',
+ 'namedobjdict','nentsel','nentselp','new_dialog','nil','not','nth','null',
+ 'numberp','open','or','osnap','polar','prin1','princ','print','progn','prompt',
+ 'quit','quote','read','read-char','read-line','redraw','regapp','rem','repeat',
+ 'reverse','rtos','set','set_tile','setcfg','setenv','setfunhelp','setq','setvar',
+ 'setview','sin','slide_image','snvalid','sqrt','ssadd','ssdel','ssget','ssgetfirst',
+ 'sslength','ssmemb','ssname','ssnamex','sssetfirst','start_dialog','start_image',
+ 'start_list','startapp','strcase','strcat','strlen','subst','substr','t','tablet',
+ 'tblnext','tblobjname','tblsearch','term_dialog','terpri','textbox','textpage',
+ 'textscr','trace','trans','type','unload_dialog','untrace','vector_image','ver',
+ 'vports','wcmatch','while','write-char','write-line','xdroom','xdsize','zerop',
+ 'vl-acad-defun','vl-acad-undefun','vl-arx-import','vlax-3D-point',
+ 'vlax-add-cmd','vlax-create-object','vlax-curve-getArea',
+ 'vlax-curve-getClosestPointTo','vlax-curve-getClosestPointToProjection',
+ 'vlax-curve-getDistAtParam','vlax-curve-getDistAtPoint',
+ 'vlax-curve-getEndParam','vlax-curve-getEndPoint',
+ 'vlax-curve-getFirstDeriv','vlax-curve-getParamAtDist',
+ 'vlax-curve-getParamAtPoint','vlax-curve-getPointAtDist',
+ 'vlax-curve-getPointAtParam','vlax-curve-getSecondDeriv',
+ 'vlax-curve-getStartParam','vlax-curve-getStartPoint',
+ 'vlax-curve-isClosed','vlax-curve-isPeriodic','vlax-curve-isPlanar',
+ 'vlax-dump-object','vlax-erased-p','vlax-for','vlax-get-acad-object',
+ 'vlax-get-object','vlax-get-or-create-object','vlax-get-property',
+ 'vlax-import-type-library','vlax-invoke-method','vlax-ldata-delete',
+ 'vlax-ldata-get','vlax-ldata-list','vlax-ldata-put','vlax-ldata-test',
+ 'vlax-make-safearray','vlax-make-variant','vlax-map-collection',
+ 'vlax-method-applicable-p','vlax-object-released-p','vlax-product-key',
+ 'vlax-property-available-p','vlax-put-property','vlax-read-enabled-p',
+ 'vlax-release-object','vlax-remove-cmd','vlax-safearray-fill',
+ 'vlax-safearray-get-dim','vlax-safearray-get-element',
+ 'vlax-safearray-get-l-bound','vlax-safearray-get-u-bound',
+ 'vlax-safearray-put-element','vlax-safearray-type','vlax-tmatrix',
+ 'vlax-typeinfo-available-p','vlax-variant-change-type',
+ 'vlax-variant-type','vlax-variant-value','vlax-write-enabled-p',
+ 'vl-bb-ref','vl-bb-set','vl-catch-all-apply','vl-catch-all-error-message',
+ 'vl-catch-all-error-p','vl-cmdf','vl-consp','vl-directory-files','vl-doc-export',
+ 'vl-doc-import','vl-doc-ref','vl-doc-set','vl-every','vl-exit-with-error',
+ 'vl-exit-with-value','vl-file-copy','vl-file-delete','vl-file-directory-p',
+ 'vl-filename-base','vl-filename-directory','vl-filename-extension',
+ 'vl-filename-mktemp','vl-file-rename','vl-file-size','vl-file-systime',
+ 'vl-get-resource','vlisp-compile','vl-list-exported-functions',
+ 'vl-list-length','vl-list-loaded-vlx','vl-load-all','vl-load-com',
+ 'vl-load-reactors','vl-member-if','vl-member-if-not','vl-position',
+ 'vl-prin1-to-string','vl-princ-to-string','vl-propagate','vlr-acdb-reactor',
+ 'vlr-add','vlr-added-p','vlr-beep-reaction','vlr-command-reactor',
+ 'vlr-current-reaction-name','vlr-data','vlr-data-set',
+ 'vlr-deepclone-reactor','vlr-docmanager-reactor','vlr-dwg-reactor',
+ 'vlr-dxf-reactor','vlr-editor-reactor','vl-registry-delete',
+ 'vl-registry-descendents','vl-registry-read','vl-registry-write',
+ 'vl-remove','vl-remove-if','vl-remove-if-not','vlr-insert-reactor',
+ 'vlr-linker-reactor','vlr-lisp-reactor','vlr-miscellaneous-reactor',
+ 'vlr-mouse-reactor','vlr-notification','vlr-object-reactor',
+ 'vlr-owner-add','vlr-owner-remove','vlr-owners','vlr-pers','vlr-pers-list',
+ 'vlr-pers-p','vlr-pers-release','vlr-reaction-names','vlr-reactions',
+ 'vlr-reaction-set','vlr-reactors','vlr-remove','vlr-remove-all',
+ 'vlr-set-notification','vlr-sysvar-reactor','vlr-toolbar-reactor',
+ 'vlr-trace-reaction','vlr-type','vlr-types','vlr-undo-reactor',
+ 'vlr-wblock-reactor','vlr-window-reactor','vlr-xref-reactor',
+ 'vl-some','vl-sort','vl-sort-i','vl-string-elt','vl-string-left-trim',
+ 'vl-string-mismatch','vl-string-position','vl-string-right-trim',
+ 'vl-string-search','vl-string-subst','vl-string-translate','vl-string-trim',
+ 'vl-symbol-name','vl-symbolp','vl-symbol-value','vl-unload-vlx','vl-vbaload',
+ 'vl-vbarun','vl-vlx-loaded-p'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php
new file mode 100644
index 000000000..5091ffa4c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php
@@ -0,0 +1,124 @@
+<?php
+/*************************************************************************************
+ * cfdg.php
+ * --------
+ * Author: John Horigan <john@glyphic.com>
+ * Copyright: (c) 2006 John Horigan http://www.ozonehouse.com/john/
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/03/11
+ *
+ * CFDG language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2006/03/11 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/03/11)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'CFDG',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'include', 'startshape', 'rule', 'background'
+ ),
+ 2 => array(
+ 'SQUARE', 'CIRCLE', 'TRIANGLE',
+ ),
+ 3 => array(
+ 'b','brightness','h','hue','sat','saturation',
+ 'a','alpha','x','y','z','s','size',
+ 'r','rotate','f','flip','skew','xml_set_object'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '{', '}', '*', '|'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #717100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #006666;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php
new file mode 100644
index 000000000..ac81695ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php
@@ -0,0 +1,299 @@
+<?php
+/*************************************************************************************
+ * cfm.php
+ * -------
+ * Author: Diego
+ * Copyright: (c) 2006 Diego
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/02/25
+ *
+ * ColdFusion language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2006/02/25 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/02/25)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ColdFusion',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ /* CFM Tags */
+ 1 => array(
+ 'cfabort', 'cfapplet', 'cfapplication', 'cfargument', 'cfassociate',
+ 'cfbreak', 'cfcache', 'cfcase', 'cfcatch', 'cfchart', 'cfchartdata',
+ 'cfchartseries', 'cfcol', 'cfcollection', 'cfcomponent',
+ 'cfcontent', 'cfcookie', 'cfdefaultcase', 'cfdirectory',
+ 'cfdocument', 'cfdocumentitem', 'cfdocumentsection', 'cfdump',
+ 'cfelse', 'cfelseif', 'cferror', 'cfexecute', 'cfexit', 'cffile',
+ 'cfflush', 'cfform', 'cfformgroup', 'cfformitem', 'cfftp',
+ 'cffunction', 'cfgrid', 'cfgridcolumn', 'cfgridrow', 'cfgridupdate',
+ 'cfheader', 'cfhtmlhead', 'cfhttp', 'cfhttpparam', 'cfif',
+ 'cfimport', 'cfinclude', 'cfindex', 'cfinput', 'cfinsert',
+ 'cfinvoke', 'cfinvokeargument', 'cfldap', 'cflocation', 'cflock',
+ 'cflog', 'cflogin', 'cfloginuser', 'cflogout', 'cfloop', 'cfmail',
+ 'cfmailparam', 'cfmailpart', 'cfmodule', 'cfNTauthenticate',
+ 'cfobject', 'cfobjectcache', 'cfoutput', 'cfparam', 'cfpop',
+ 'cfprocessingdirective', 'cfprocparam',
+ 'cfprocresult', 'cfproperty', 'cfquery', 'cfqueryparam',
+ 'cfregistry', 'cfreport', 'cfreportparam', 'cfrethrow', 'cfreturn',
+ 'cfsavecontent', 'cfschedule', 'cfscript', 'cfsearch', 'cfselect',
+ 'cfset', 'cfsetting', 'cfsilent', 'cfstoredproc',
+ 'cfswitch', 'cftable', 'cftextarea', 'cfthrow', 'cftimer',
+ 'cftrace', 'cftransaction', 'cftree', 'cftreeitem', 'cftry',
+ 'cfupdate', 'cfwddx'
+ ),
+ /* HTML Tags */
+ 2 => array(
+ 'a', 'abbr', 'acronym', 'address', 'applet',
+
+ 'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
+
+ 'caption', 'center', 'cite', 'code', 'colgroup', 'col',
+
+ 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
+
+ 'em',
+
+ 'fieldset', 'font', 'form', 'frame', 'frameset',
+
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
+
+ 'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
+
+ 'kbd',
+
+ 'label', 'legend', 'link', 'li',
+
+ 'map', 'meta',
+
+ 'noframes', 'noscript',
+
+ 'object', 'ol', 'optgroup', 'option',
+
+ 'param', 'pre', 'p',
+
+ 'q',
+
+ 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
+
+ 'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
+
+ 'ul', 'u',
+
+ 'var',
+ ),
+ /* HTML attributes */
+ 3 => array(
+ 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
+ 'background', 'bgcolor', 'border',
+ 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
+ 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
+ 'enctype',
+ 'face', 'for', 'frame', 'frameborder',
+ 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
+ 'id', 'ismap',
+ 'label', 'lang', 'language', 'link', 'longdesc',
+ 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
+ 'name', 'nohref', 'noresize', 'noshade', 'nowrap',
+ 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
+ 'profile', 'prompt',
+ 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
+ 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
+ 'tabindex', 'target', 'text', 'title', 'type',
+ 'usemap',
+ 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
+ 'width'
+ ),
+ /* CFM Script delimeters */
+ 4 => array(
+ 'var', 'function', 'while', 'if','else'
+ ),
+ /* CFM Functions */
+ 5 => array(
+ 'Abs', 'GetFunctionList', 'LSTimeFormat','ACos','GetGatewayHelper','LTrim','AddSOAPRequestHeader','GetHttpRequestData',
+ 'Max','AddSOAPResponseHeader','GetHttpTimeString','Mid','ArrayAppend','GetLocale','Min','ArrayAvg','GetLocaleDisplayName',
+ 'Minute','ArrayClear','GetMetaData','Month','ArrayDeleteAt','GetMetricData','MonthAsString','ArrayInsertAt','GetPageContext',
+ 'Now','ArrayIsEmpty','GetProfileSections','NumberFormat','ArrayLen','GetProfileString','ParagraphFormat','ArrayMax',
+ 'GetLocalHostIP','ParseDateTime','ArrayMin','GetSOAPRequest','Pi','ArrayNew','GetSOAPRequestHeader','PreserveSingleQuotes',
+ 'ArrayPrepend','GetSOAPResponse','Quarter','ArrayResize','GetSOAPResponseHeader','QueryAddColumn','ArraySet',
+ 'GetTempDirectory','QueryAddRow','ArraySort','QueryNew','ArraySum','GetTempFile','QuerySetCell',
+ 'ArraySwap','GetTickCount','QuotedValueList','ArrayToList','GetTimeZoneInfo','Rand','Asc','GetToken','Randomize',
+ 'ASin','Hash','RandRange','Atn','Hour','REFind','BinaryDecode','HTMLCodeFormat','REFindNoCase','BinaryEncode',
+ 'HTMLEditFormat','ReleaseComObject','BitAnd','IIf','RemoveChars','BitMaskClear','IncrementValue','RepeatString',
+ 'BitMaskRead','InputBaseN','Replace','BitMaskSet','Insert','ReplaceList','BitNot','Int','ReplaceNoCase','BitOr',
+ 'IsArray','REReplace','BitSHLN','IsBinary','REReplaceNoCase','BitSHRN','IsBoolean','Reverse','BitXor','IsCustomFunction',
+ 'Right','Ceiling','IsDate','RJustify','CharsetDecode','IsDebugMode','Round','CharsetEncode','IsDefined','RTrim',
+ 'Chr','IsLeapYear','Second','CJustify','IsLocalHost','SendGatewayMessage','Compare','IsNumeric','SetEncoding',
+ 'CompareNoCase','IsNumericDate','SetLocale','Cos','IsObject','SetProfileString','CreateDate','IsQuery','SetVariable',
+ 'CreateDateTime','IsSimpleValue','Sgn','CreateObject','IsSOAPRequest','Sin','CreateODBCDate','IsStruct','SpanExcluding',
+ 'CreateODBCDateTime','IsUserInRole','SpanIncluding','CreateODBCTime','IsValid','Sqr','CreateTime','IsWDDX','StripCR',
+ 'CreateTimeSpan','IsXML','StructAppend','CreateUUID','IsXmlAttribute','StructClear','DateAdd','IsXmlDoc','StructCopy',
+ 'DateCompare','IsXmlElem','StructCount','DateConvert','IsXmlNode','StructDelete','DateDiff','IsXmlRoot','StructFind',
+ 'DateFormat','JavaCast','StructFindKey','DatePart','JSStringFormat','StructFindValue','Day','LCase','StructGet',
+ 'DayOfWeek','Left','StructInsert','DayOfWeekAsString','Len','StructIsEmpty','DayOfYear','ListAppend','StructKeyArray',
+ 'DaysInMonth','ListChangeDelims','StructKeyExists','DaysInYear','ListContains','StructKeyList','DE','ListContainsNoCase',
+ 'StructNew','DecimalFormat','ListDeleteAt','StructSort','DecrementValue','ListFind','StructUpdate','Decrypt','ListFindNoCase',
+ 'Tan','DecryptBinary','ListFirst','TimeFormat','DeleteClientVariable','ListGetAt','ToBase64','DirectoryExists',
+ 'ListInsertAt','ToBinary','DollarFormat','ListLast','ToScript','Duplicate','ListLen','ToString','Encrypt','ListPrepend',
+ 'Trim','EncryptBinary','ListQualify','UCase','Evaluate','ListRest','URLDecode','Exp','ListSetAt','URLEncodedFormat',
+ 'ExpandPath','ListSort','URLSessionFormat','FileExists','ListToArray','Val','Find','ListValueCount','ValueList',
+ 'FindNoCase','ListValueCountNoCase','Week','FindOneOf','LJustify','Wrap','FirstDayOfMonth','Log','WriteOutput',
+ 'Fix','Log10','XmlChildPos','FormatBaseN','LSCurrencyFormat','XmlElemNew','GetAuthUser','LSDateFormat','XmlFormat',
+ 'GetBaseTagData','LSEuroCurrencyFormat','XmlGetNodeType','GetBaseTagList','LSIsCurrency','XmlNew','GetBaseTemplatePath',
+ 'LSIsDate','XmlParse','GetClientVariablesList','LSIsNumeric','XmlSearch','GetCurrentTemplatePath','LSNumberFormat',
+ 'XmlTransform','GetDirectoryFromPath','LSParseCurrency','XmlValidate','GetEncoding','LSParseDateTime','Year',
+ 'GetException','LSParseEuroCurrency','YesNoFormat','GetFileFromPath','LSParseNumber'
+ ),
+ /* CFM Attributes */
+ 6 => array(
+ 'dbtype','connectstring','datasource','username','password','query','delimeter','description','required','hint','default','access','from','to','list','index'
+ ),
+ 7 => array(
+ 'EQ', 'GT', 'LT', 'GTE', 'LTE', 'IS', 'LIKE', 'NEQ'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '/', '=', '{', '}', '(', ')', '[', ']', '<', '>', '&'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #990000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #0000FF;',
+ 4 => 'color: #000000; font-weight: bold;',
+ 5 => 'color: #0000FF;',
+ 6 => 'color: #0000FF;',
+ 7 => 'color: #0000FF;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #0000FF;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #0000FF;'
+ ),
+ 'SCRIPT' => array(
+ 0 => 'color: #808080; font-style: italic;',
+ 1 => 'color: #00bbdd;',
+ 2 => 'color: #0000FF;',
+ 3 => 'color: #000099;',
+ 4 => 'color: #333333;',
+ 5 => 'color: #333333;'
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => 'http://december.com/html/4/element/{FNAMEL}.html',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<!--' => '-->'
+ ),
+ 1 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 2 => "/(?!<#)(?:(?:##)*)(#)[a-zA-Z0-9_\.\(\)]+(#)/",
+ 3 => array(
+ '<cfscript>' => '</cfscript>'
+ ),
+ 4 => array(
+ '<' => '>'
+ ),
+ 5 => '/((?!<!)<)(?:"[^"]*"|\'[^\']*\'|(?R)|[^">])+?(>)/si'
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ 1 => false,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ ),
+ 2 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ ),
+ 3 => array(
+ 'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9\$_\|\#>|^])', // allow ; before keywords
+ 'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-])', // allow & after keywords
+ ),
+ 7 => array(
+ 'DISALLOWED_BEFORE' => '(?<![a-zA-Z0-9\$_\|\#>&|^])', // allow ; before keywords
+ 'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-])', // allow & after keywords
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php
new file mode 100644
index 000000000..994f86316
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php
@@ -0,0 +1,196 @@
+<?php
+/*************************************************************************************
+ * cil.php
+ * --------
+ * Author: Marcus Griep (neoeinstein+GeSHi@gmail.com)
+ * Copyright: (c) 2007 Marcus Griep (http://www.xpdm.us)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/10/24
+ *
+ * CIL (Common Intermediate Language) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/10/24 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2007/10/24)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'CIL',
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'COMMENT_SINGLE' => array('//'),
+ 'COMMENT_MULTI' => array(),
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(//Dotted
+ '.zeroinit', '.vtfixup', '.vtentry', '.vtable', '.ver', '.try', '.subsystem', '.size', '.set', '.removeon',
+ '.publickeytoken', '.publickey', '.property', '.permissionset', '.permission', '.pdirect', '.param', '.pack',
+ '.override', '.other', '.namespace', '.mresource', '.module', '.method', '.maxstack', '.manifestres', '.locals',
+ '.localized', '.locale', '.line', '.language', '.import', '.imagebase', '.hash', '.get', '.fire', '.file', '.field',
+ '.export', '.event', '.entrypoint', '.emitbyte', '.data', '.custom', '.culture', '.ctor', '.corflags', '.class',
+ '.cctor', '.assembly', '.addon'
+ ),
+ 2 => array(//Attributes
+ 'wrapper', 'with', 'winapi', 'virtual', 'vector', 'vararg', 'value', 'userdefined', 'unused', 'unmanagedexp',
+ 'unmanaged', 'unicode', 'to', 'tls', 'thiscall', 'synchronized', 'struct', 'strict', 'storage', 'stdcall',
+ 'static', 'specialname', 'special', 'serializable', 'sequential', 'sealed', 'runtime', 'rtspecialname', 'request',
+ 'reqsecobj', 'reqrefuse', 'reqopt', 'reqmin', 'record', 'public', 'privatescope', 'private', 'preservesig',
+ 'prejitgrant', 'prejitdeny', 'platformapi', 'pinvokeimpl', 'pinned', 'permitonly', 'out', 'optil', 'opt',
+ 'notserialized', 'notremotable', 'not_in_gc_heap', 'noprocess', 'noncaslinkdemand', 'noncasinheritance',
+ 'noncasdemand', 'nometadata', 'nomangle', 'nomachine', 'noinlining', 'noappdomain', 'newslot', 'nested', 'native',
+ 'modreq', 'modopt', 'marshal', 'managed', 'literal', 'linkcheck', 'lcid', 'lasterr', 'internalcall', 'interface',
+ 'instance', 'initonly', 'init', 'inheritcheck', 'in', 'import', 'implicitres', 'implicitcom', 'implements',
+ 'illegal', 'il', 'hidebysig', 'handler', 'fromunmanaged', 'forwardref', 'fixed', 'finally', 'final', 'filter',
+ 'filetime', 'field', 'fault', 'fastcall', 'famorassem', 'family', 'famandassem', 'extern', 'extends', 'explicit',
+ 'error', 'enum', 'endmac', 'deny', 'demand', 'default', 'custom', 'compilercontrolled', 'clsid', 'class', 'cil',
+ 'cf', 'cdecl', 'catch', 'beforefieldinit', 'autochar', 'auto', 'at', 'assert', 'assembly', 'as', 'any', 'ansi',
+ 'alignment', 'algorithm', 'abstract'
+ ),
+ 3 => array(//Types
+ 'wchar', 'void', 'variant', 'unsigned', 'valuetype', 'typedref', 'tbstr', 'sysstring', 'syschar', 'string',
+ 'streamed_object', 'stream', 'stored_object', 'safearray', 'objectref', 'object', 'nullref', 'method', 'lpwstr',
+ 'lpvoid', 'lptstr', 'lpstruct', 'lpstr', 'iunknown', 'int64', 'int32', 'int16', 'int8', 'int', 'idispatch',
+ 'hresult', 'float64', 'float32', 'float', 'decimal', 'date', 'currency', 'char', 'carray', 'byvalstr',
+ 'bytearray', 'boxed', 'bool', 'blob_object', 'blob', 'array'
+ ),
+ 4 => array(//Prefix
+ 'volatile', 'unaligned', 'tail', 'readonly', 'no', 'constrained'
+ ),
+ 5 => array(//Suffix
+ 'un', 'u8', 'u4', 'u2', 'u1', 'u', 's', 'ref', 'r8', 'r4', 'm1', 'i8', 'i4', 'i2', 'i1', 'i'#, '.8', '.7', '.6', '.5', '.4', '.3', '.2', '.1', '.0'
+ ),
+ 6 => array(//Base
+ 'xor', 'switch', 'sub', 'stloc',
+ 'stind', 'starg',
+ 'shr', 'shl', 'ret', 'rem', 'pop', 'or', 'not', 'nop', 'neg', 'mul',
+ 'localloc', 'leave', 'ldnull', 'ldloca',
+ 'ldloc', 'ldind', 'ldftn', 'ldc', 'ldarga',
+ 'ldarg', 'jmp', 'initblk', 'endfinally', 'endfilter',
+ 'endfault', 'dup', 'div', 'cpblk', 'conv', 'clt', 'ckfinite', 'cgt', 'ceq', 'calli',
+ 'call', 'brzero', 'brtrue', 'brnull', 'brinst',
+ 'brfalse', 'break', 'br', 'bne', 'blt', 'ble', 'bgt', 'bge', 'beq', 'arglist',
+ 'and', 'add'
+ ),
+ 7 => array(//Object
+ 'unbox.any', 'unbox', 'throw', 'stsfld', 'stobj', 'stfld', 'stelem', 'sizeof', 'rethrow', 'refanyval', 'refanytype', 'newobj',
+ 'newarr', 'mkrefany', 'ldvirtftn', 'ldtoken', 'ldstr', 'ldsflda', 'ldsfld', 'ldobj', 'ldlen', 'ldflda', 'ldfld',
+ 'ldelema', 'ldelem', 'isinst', 'initobj', 'cpobj', 'castclass',
+ 'callvirt', 'callmostderived', 'box'
+ ),
+ 8 => array(//Other
+ 'prefixref', 'prefix7', 'prefix6', 'prefix5', 'prefix4', 'prefix3', 'prefix2', 'prefix1', 'prefix0'
+ ),
+ 9 => array(//Literal
+ 'true', 'null', 'false'
+ ),
+ 10 => array(//Comment-like
+ '#line', '^THE_END^'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '!!'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true,
+ 10 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color:maroon;font-weight:bold;',
+ 2 => 'color:blue;font-weight:bold;',
+ 3 => 'color:purple;font-weight:bold;',
+ 4 => 'color:teal;',
+ 5 => 'color:blue;',
+ 6 => 'color:blue;',
+ 7 => 'color:blue;',
+ 8 => 'color:blue;',
+ 9 => 'color:00008B',
+ 10 => 'color:gray'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color:gray;font-style:italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #006400;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #00008B;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #000033;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006400;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color:blue;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '::'
+ ),
+ 'REGEXPS' => array(
+ 0 => '(?<=ldc\\.i4\\.)[0-8]|(?<=(?:ldarg|ldloc|stloc)\\.)[0-3]' # Pickup the opcodes that end with integers
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php
new file mode 100644
index 000000000..9adae16e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php
@@ -0,0 +1,244 @@
+<?php
+/*************************************************************************************
+ * cobol.php
+ * ----------
+ * Author: BenBE (BenBE@omorphia.org)
+ * Copyright: (c) 2007-2008 BenBE (http://www.omorphia.de/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/07/02
+ *
+ * COBOL language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ *
+ * TODO (updated 2007/07/02)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'COBOL',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(1 => '/^\*.*?$/m'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_SCI_SHORT |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array( //Compiler Directives
+ 'ANSI', 'BLANK', 'NOBLANK', 'CALL-SHARED', 'CANCEL', 'NOCANCEL',
+ 'CHECK', 'CODE', 'NOCODE', 'COLUMNS', 'COMPACT', 'NOCOMPACT',
+ 'COMPILE', 'CONSULT', 'NOCONSULT', 'CROSSREF', 'NOCROSSREF',
+ 'DIAGNOSE-74', 'NODIAGNOSE-74', 'DIAGNOSE-85', 'NODIAGNOSE-85',
+ 'DIAGNOSEALL', 'NODIAGNOSEALL', 'ENDIF', 'ENDUNIT', 'ENV',
+ 'ERRORFILE', 'ERRORS', 'FIPS', 'NOFIPS', 'FMAP', 'HEADING', 'HEAP',
+ 'HIGHPIN', 'HIGHREQUESTERS', 'ICODE', 'NOICODE', 'IF', 'IFNOT',
+ 'INNERLIST', 'NOINNERLIST', 'INSPECT', 'NOINSPECT', 'LARGEDATA',
+ 'LD', 'LESS-CODE', 'LIBRARY', 'LINES', 'LIST', 'NOLIST', 'LMAP',
+ 'NOLMAP', 'MAIN', 'MAP', 'NOMAP', 'NLD', 'NONSTOP', 'NON-SHARED',
+ 'OPTIMIZE', 'PERFORM-TRACE', 'PORT', 'NOPORT', 'RESETTOG',
+ 'RUNNABLE', 'RUNNAMED', 'SAVE', 'SAVEABEND', 'NOSAVEABEND',
+ 'SEARCH', 'NOSEARCH', 'SECTION', 'SETTOG', 'SHARED', 'SHOWCOPY',
+ 'NOSHOWCOPY', 'SHOWFILE', 'NOSHOWFILE', 'SOURCE', 'SQL', 'NOSQL',
+ 'SQLMEM', 'SUBSET', 'SUBTYPE', 'SUPPRESS', 'NOSUPPRESS', 'SYMBOLS',
+ 'NOSYMBOLS', 'SYNTAX', 'TANDEM', 'TRAP2', 'NOTRAP2', 'TRAP2-74',
+ 'NOTRAP2-74', 'UL', 'WARN', 'NOWARN'
+ ),
+ 2 => array( //Statement Keywords
+ 'ACCEPT', 'ADD', 'TO', 'GIVING', 'CORRESPONDING', 'ALTER', 'CALL',
+ 'CHECKPOINT', 'CLOSE', 'COMPUTE', 'CONTINUE', 'COPY',
+ 'DELETE', 'DISPLAY', 'DIVIDE', 'INTO', 'REMAINDER', 'ENTER',
+ 'COBOL', 'EVALUATE', 'EXIT', 'GO', 'INITIALIZE',
+ 'TALLYING', 'REPLACING', 'CONVERTING', 'LOCKFILE', 'MERGE', 'MOVE',
+ 'MULTIPLY', 'OPEN', 'PERFORM', 'TIMES',
+ 'UNTIL', 'VARYING', 'RETURN',
+ ),
+ 3 => array( //Reserved in some contexts
+ 'ACCESS', 'ADDRESS', 'ADVANCING', 'AFTER', 'ALL',
+ 'ALPHABET', 'ALPHABETIC', 'ALPHABETIC-LOWER', 'ALPHABETIC-UPPER',
+ 'ALPHANUMERIC', 'ALPHANUMERIC-EDITED', 'ALSO', 'ALTERNATE',
+ 'AND', 'ANY', 'APPROXIMATE', 'AREA', 'AREAS', 'ASCENDING', 'ASSIGN',
+ 'AT', 'AUTHOR', 'BEFORE', 'BINARY', 'BLOCK', 'BOTTOM', 'BY',
+ 'CD', 'CF', 'CH', 'CHARACTER', 'CHARACTERS',
+ 'CHARACTER-SET', 'CLASS', 'CLOCK-UNITS',
+ 'CODE-SET', 'COLLATING', 'COLUMN', 'COMMA',
+ 'COMMON', 'COMMUNICATION', 'COMP', 'COMP-3', 'COMP-5',
+ 'COMPUTATIONAL', 'COMPUTATIONAL-3', 'COMPUTATIONAL-5',
+ 'CONFIGURATION', 'CONTAINS', 'CONTENT', 'CONTROL',
+ 'CONTROLS', 'CORR', 'COUNT',
+ 'CURRENCY', 'DATA', 'DATE', 'DATE-COMPILED', 'DATE-WRITTEN', 'DAY',
+ 'DAY-OF-WEEK', 'DE', 'DEBUG-CONTENTS', 'DEBUG-ITEM', 'DEBUG-LINE',
+ 'DEBUG-SUB-2', 'DEBUG-SUB-3', 'DEBUGGING', 'DECIMAL-POINT',
+ 'DECLARATIVES', 'DEBUG-NAME', 'DEBUG-SUB-1', 'DELIMITED',
+ 'DELIMITER', 'DEPENDING', 'DESCENDING', 'DESTINATION', 'DETAIL',
+ 'DISABLE', 'DIVISION', 'DOWN', 'DUPLICATES',
+ 'DYNAMIC', 'EGI', 'ELSE', 'EMI', 'ENABLE', 'END', 'END-ADD',
+ 'END-COMPUTE', 'END-DELETE', 'END-DIVIDE', 'END-EVALUATE', 'END-IF',
+ 'END-MULTIPLY', 'END-OF-PAGE', 'END-PERFORM', 'END-READ',
+ 'END-RECEIVE', 'END-RETURN', 'END-REWRITE', 'END-SEARCH',
+ 'END-START', 'END-STRING', 'END-SUBTRACT', 'END-UNSTRING',
+ 'END-WRITE', 'EOP', 'EQUAL', 'ERROR', 'ESI',
+ 'EVERY', 'EXCEPTION', 'EXCLUSIVE', 'EXTEND',
+ 'EXTENDED-STORAGE', 'EXTERNAL', 'FALSE', 'FD', 'FILE',
+ 'FILE-CONTROL', 'FILLER', 'FINAL', 'FIRST', 'FOOTING', 'FOR',
+ 'FROM', 'FUNCTION', 'GENERATE', 'GENERIC', 'GLOBAL',
+ 'GREATER', 'GROUP', 'GUARDIAN-ERR', 'HIGH-VALUE',
+ 'HIGH-VALUES', 'I-O', 'I-O-CONTROL', 'IDENTIFICATION', 'IN',
+ 'INDEX', 'INDEXED', 'INDICATE', 'INITIAL', 'INITIATE',
+ 'INPUT', 'INPUT-OUTPUT', 'INSTALLATION',
+ 'INVALID', 'IS', 'JUST', 'JUSTIFIED', 'KEY', 'LABEL', 'LAST',
+ 'LEADING', 'LEFT', 'LESS', 'LIMIT', 'LIMITS', 'LINAGE',
+ 'LINAGE-COUNTER', 'LINE', 'LINE-COUNTER', 'LINKAGE', 'LOCK',
+ 'LOW-VALUE', 'LOW-VALUES', 'MEMORY', 'MESSAGE',
+ 'MODE', 'MODULES', 'MULTIPLE', 'NATIVE',
+ 'NEGATIVE', 'NEXT', 'NO', 'NOT', 'NULL', 'NULLS', 'NUMBER',
+ 'NUMERIC', 'NUMERIC-EDITED', 'OBJECT-COMPUTER', 'OCCURS', 'OF',
+ 'OFF', 'OMITTED', 'ON', 'OPTIONAL', 'OR', 'ORDER',
+ 'ORGANIZATION', 'OTHER', 'OUTPUT', 'OVERFLOW', 'PACKED-DECIMAL',
+ 'PADDING', 'PAGE', 'PAGE-COUNTER', 'PF', 'PH', 'PIC',
+ 'PICTURE', 'PLUS', 'POINTER', 'POSITION', 'POSITIVE', 'PRINTING',
+ 'PROCEDURE', 'PROCEDURES', 'PROCEED', 'PROGRAM', 'PROGRAM-ID',
+ 'PROGRAM-STATUS', 'PROGRAM-STATUS-1', 'PROGRAM-STATUS-2', 'PROMPT',
+ 'PROTECTED', 'PURGE', 'QUEUE', 'QUOTE', 'QUOTES', 'RD',
+ 'RECEIVE', 'RECEIVE-CONTROL', 'RECORD', 'RECORDS',
+ 'REDEFINES', 'REEL', 'REFERENCE', 'REFERENCES', 'RELATIVE',
+ 'REMOVAL', 'RENAMES', 'REPLACE',
+ 'REPLY', 'REPORT', 'REPORTING', 'REPORTS', 'RERUN',
+ 'RESERVE', 'RESET', 'REVERSED', 'REWIND', 'REWRITE', 'RF',
+ 'RH', 'RIGHT', 'ROUNDED', 'RUN', 'SAME', 'SD',
+ 'SECURITY', 'SEGMENT', 'SEGMENT-LIMIT', 'SELECT', 'SEND',
+ 'SENTENCE', 'SEPARATE', 'SEQUENCE', 'SEQUENTIAL', 'SET',
+ 'SIGN', 'SIZE', 'SORT', 'SORT-MERGE', 'SOURCE-COMPUTER',
+ 'SPACE', 'SPACES', 'SPECIAL-NAMES', 'STANDARD', 'STANDARD-1',
+ 'STANDARD-2', 'START', 'STARTBACKUP', 'STATUS', 'STOP', 'STRING',
+ 'SUB-QUEUE-1', 'SUB-QUEUE-2', 'SUB-QUEUE-3', 'SUBTRACT',
+ 'SYMBOLIC', 'SYNC', 'SYNCDEPTH', 'SYNCHRONIZED',
+ 'TABLE', 'TAL', 'TAPE', 'TERMINAL', 'TERMINATE', 'TEST',
+ 'TEXT', 'THAN', 'THEN', 'THROUGH', 'THRU', 'TIME',
+ 'TOP', 'TRAILING', 'TRUE', 'TYPE', 'UNIT', 'UNLOCK', 'UNLOCKFILE',
+ 'UNLOCKRECORD', 'UNSTRING', 'UP', 'UPON', 'USAGE', 'USE',
+ 'USING', 'VALUE', 'VALUES', 'WHEN', 'WITH', 'WORDS',
+ 'WORKING-STORAGE', 'WRITE', 'ZERO', 'ZEROES'
+ ),
+ 4 => array( //Standard functions
+ 'ACOS', 'ANNUITY', 'ASIN', 'ATAN', 'CHAR', 'COS', 'CURRENT-DATE',
+ 'DATE-OF-INTEGER', 'DAY-OF-INTEGER', 'FACTORIAL', 'INTEGER',
+ 'INTEGER-OF-DATE', 'INTEGER-OF-DAY', 'INTEGER-PART', 'LENGTH',
+ 'LOG', 'LOG10', 'LOWER-CASE', 'MAX', 'MEAN', 'MEDIAN', 'MIDRANGE',
+ 'MIN', 'MOD', 'NUMVAL', 'NUMVAL-C', 'ORD', 'ORD-MAX', 'ORD-MIN',
+ 'PRESENT-VALUE', 'RANDOM', 'RANGE', 'REM', 'REVERSE', 'SIN', 'SQRT',
+ 'STANDARD-DEVIATION', 'SUM', 'TAN', 'UPPER-CASE', 'VARIANCE',
+ 'WHEN-COMPILED'
+ ),
+ 5 => array( //Privileged Built-in Functions
+ '#IN', '#OUT', '#TERM', '#TEMP', '#DYNAMIC', 'COBOL85^ARMTRAP',
+ 'COBOL85^COMPLETION', 'COBOL_COMPLETION_', 'COBOL_CONTROL_',
+ 'COBOL_GETENV_', 'COBOL_PUTENV_', 'COBOL85^RETURN^SORT^ERRORS',
+ 'COBOL_RETURN_SORT_ERRORS_', 'COBOL85^REWIND^SEQUENTIAL',
+ 'COBOL_REWIND_SEQUENTIAL_', 'COBOL85^SET^SORT^PARAM^TEXT',
+ 'COBOL_SET_SORT_PARAM_TEXT_', 'COBOL85^SET^SORT^PARAM^VALUE',
+ 'COBOL_SET_SORT_PARAM_VALUE_', 'COBOL_SET_MAX_RECORD_',
+ 'COBOL_SETMODE_', 'COBOL85^SPECIAL^OPEN', 'COBOL_SPECIAL_OPEN_',
+ 'COBOLASSIGN', 'COBOL_ASSIGN_', 'COBOLFILEINFO', 'COBOL_FILE_INFO_',
+ 'COBOLSPOOLOPEN', 'CREATEPROCESS', 'ALTERPARAMTEXT',
+ 'CHECKLOGICALNAME', 'CHECKMESSAGE', 'DELETEASSIGN', 'DELETEPARAM',
+ 'DELETESTARTUP', 'GETASSIGNTEXT', 'GETASSIGNVALUE', 'GETBACKUPCPU',
+ 'GETPARAMTEXT', 'GETSTARTUPTEXT', 'PUTASSIGNTEXT', 'PUTASSIGNVALUE',
+ 'PUTPARAMTEXT', 'PUTSTARTUPTEXT'
+ )
+ ),
+ 'SYMBOLS' => array(
+ //Avoid having - in identifiers marked as symbols
+ ' + ', ' - ', ' * ', ' / ', ' ** ',
+ '.', ',',
+ '=',
+ '(', ')', '[', ']'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #008000; font-weight: bold;',
+ 4 => 'color: #000080;',
+ 5 => 'color: #008000;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #a0a0a0; font-style: italic;',
+ 'MULTI' => 'color: #a0a0a0; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #993399;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+ );
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php
new file mode 100644
index 000000000..43105de3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php
@@ -0,0 +1,315 @@
+<?php
+/*************************************************************************************
+ * cpp.php
+ * -------
+ * Author: Iulian M
+ * Copyright: (c) 2006 Iulian M
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/09/27
+ *
+ * C++ (with QT extensions) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C++ (QT)',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return',
+ 'switch', 'while', 'delete', 'new', 'this'
+ ),
+ 2 => array(
+ 'NULL', 'false', 'break', 'true', 'enum', 'errno', 'EDOM',
+ 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
+ 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
+ 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
+ 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
+ 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
+ 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
+ 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
+ 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
+ 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
+ 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
+ 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
+ 'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
+ 'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
+ 'static_cast', 'explicit', 'friend', 'wchar_t', 'typename', 'typeid', 'class' ,
+ 'foreach','connect', 'Q_OBJECT' , 'slots' , 'signals'
+ ),
+ 3 => array(
+ 'cin', 'cerr', 'clog', 'cout',
+ 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
+ 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
+ 'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
+ 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
+ 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
+ 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
+ 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
+ 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
+ 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
+ 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
+ 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
+ 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
+ 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
+ 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
+ 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
+ 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
+ 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
+ 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
+ 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
+ ),
+ 4 => array(
+ 'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
+ 'register', 'short', 'shortint', 'signed', 'static', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
+ 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
+ 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm',
+ ),
+ 5 => array(
+ 'QAbstractButton','QDir','QIntValidator','QRegExpValidator','QTabWidget','QAbstractEventDispatcher',
+ 'QDirectPainter','QIODevice','QRegion','QTcpServer','QAbstractExtensionFactory','QDirModel',
+ 'QItemDelegate','QResizeEvent','QTcpSocket','QAbstractExtensionManager','QDockWidget',
+ 'QItemEditorCreatorBase','QResource','QTemporaryFile','QAbstractFileEngine','QDomAttr',
+ 'QItemEditorFactory','QRubberBand','QTestEventList','QAbstractFileEngineHandler','QDomCDATASection',
+ 'QItemSelection','QScreen','QTextBlock','QAbstractFormBuilder','QDomCharacterData','QItemSelectionModel',
+ 'QScreenCursor','QTextBlockFormat','QAbstractGraphicsShapeItem','QDomComment','QItemSelectionRange',
+ 'QScreenDriverFactory','QTextBlockGroup','QAbstractItemDelegate','QDomDocument','QKbdDriverFactory',
+ 'QScreenDriverPlugin','QTextBlockUserData','QAbstractItemModel','QDomDocumentFragment','QKbdDriverPlugin',
+ 'QScrollArea','QTextBrowser','QAbstractItemView','QDomDocumentType','QKeyEvent','QScrollBar',
+ 'QTextCharFormat','QAbstractListModel','QDomElement','QKeySequence','QSemaphore','QTextCodec',
+ 'QAbstractPrintDialog','QDomEntity','QLabel','QSessionManager','QTextCodecPlugin','QAbstractProxyModel',
+ 'QDomEntityReference','QLatin1Char','QSet','QTextCursor','QAbstractScrollArea','QDomImplementation',
+ 'QLatin1String','QSetIterator','QTextDecoder','QAbstractSlider','QDomNamedNodeMap','QLayout','QSettings',
+ 'QTextDocument','QAbstractSocket','QDomNode','QLayoutItem','QSharedData','QTextDocumentFragment',
+ 'QAbstractSpinBox','QDomNodeList','QLCDNumber','QSharedDataPointer','QTextEdit','QAbstractTableModel',
+ 'QDomNotation','QLibrary','QShortcut','QTextEncoder','QAbstractTextDocumentLayout',
+ 'QDomProcessingInstruction','QLibraryInfo','QShortcutEvent','QTextFormat','QAccessible','QDomText',
+ 'QLine','QShowEvent','QTextFragment','QAccessibleBridge','QDoubleSpinBox','QLinearGradient',
+ 'QSignalMapper','QTextFrame','QAccessibleBridgePlugin','QDoubleValidator','QLineEdit','QSignalSpy',
+ 'QTextFrameFormat','QAccessibleEvent','QDrag','QLineF','QSize','QTextImageFormat','QAccessibleInterface',
+ 'QDragEnterEvent','QLinkedList','QSizeF','QTextInlineObject','QAccessibleObject','QDragLeaveEvent',
+ 'QLinkedListIterator','QSizeGrip','QTextLayout','QAccessiblePlugin','QDragMoveEvent','QLinuxFbScreen',
+ 'QSizePolicy','QTextLength','QAccessibleWidget','QDropEvent','QList','QSlider','QTextLine','QAction',
+ 'QDynamicPropertyChangeEvent','QListIterator','QSocketNotifier','QTextList','QActionEvent','QErrorMessage',
+ 'QListView','QSortFilterProxyModel','QTextListFormat','QActionGroup','QEvent','QListWidget','QSound',
+ 'QTextObject','QApplication','QEventLoop','QListWidgetItem','QSpacerItem','QTextOption','QAssistantClient',
+ 'QExtensionFactory','QLocale','QSpinBox','QTextStream','QAxAggregated','QExtensionManager',
+ 'QMacPasteboardMime','QSplashScreen','QTextTable','QAxBase','QFile','QMacStyle','QSplitter',
+ 'QTextTableCell','QAxBindable','QFileDialog','QMainWindow','QSplitterHandle','QTextTableFormat',
+ 'QAxFactory','QFileIconProvider','QMap','QSqlDatabase','QThread','QAxObject','QFileInfo','QMapIterator',
+ 'QSqlDriver','QThreadStorage','QAxScript','QFileOpenEvent','QMatrix','QSqlDriverCreator','QTime',
+ 'QAxScriptEngine','QFileSystemWatcher','QMenu','QSqlDriverCreatorBase','QTimeEdit','QAxScriptManager',
+ 'QFlag','QMenuBar','QSqlDriverPlugin','QTimeLine','QAxWidget','QFlags','QMessageBox','QSqlError','QTimer',
+ 'QBasicTimer','QFocusEvent','QMetaClassInfo','QSqlField','QTimerEvent','QBitArray','QFocusFrame',
+ 'QMetaEnum','QSqlIndex','QToolBar','QBitmap','QFont','QMetaMethod','QSqlQuery','QToolBox','QBoxLayout',
+ 'QFontComboBox','QMetaObject','QSqlQueryModel','QToolButton','QBrush','QFontDatabase','QMetaProperty',
+ 'QSqlRecord','QToolTip','QBuffer','QFontDialog','QMetaType','QSqlRelation','QTransformedScreen',
+ 'QButtonGroup','QFontInfo','QMimeData','QSqlRelationalDelegate','QTranslator','QByteArray','QFontMetrics',
+ 'QMimeSource','QSqlRelationalTableModel','QTreeView','QByteArrayMatcher','QFontMetricsF','QModelIndex',
+ 'QSqlResult','QTreeWidget','QCache','QFormBuilder','QMotifStyle','QSqlTableModel','QTreeWidgetItem',
+ 'QCalendarWidget','QFrame','QMouseDriverFactory','QStack','QTreeWidgetItemIterator','QCDEStyle',
+ 'QFSFileEngine','QMouseDriverPlugin','QStackedLayout','QUdpSocket','QChar','QFtp','QMouseEvent',
+ 'QStackedWidget','QUiLoader','QCheckBox','QGenericArgument','QMoveEvent','QStandardItem','QUndoCommand',
+ 'QChildEvent','QGenericReturnArgument','QMovie','QStandardItemEditorCreator','QUndoGroup',
+ 'QCleanlooksStyle','QGLColormap','QMultiHash','QStandardItemModel','QUndoStack','QClipboard',
+ 'QGLContext','QMultiMap','QStatusBar','QUndoView','QCloseEvent','QGLFormat','QMutableHashIterator',
+ 'QStatusTipEvent','QUrl','QColor','QGLFramebufferObject','QMutableLinkedListIterator','QString',
+ 'QUrlInfo','QColorDialog','QGLPixelBuffer','QMutableListIterator','QStringList','QUuid','QColormap',
+ 'QGLWidget','QMutableMapIterator','QStringListModel','QValidator','QComboBox','QGradient',
+ 'QMutableSetIterator','QStringMatcher','QVariant','QCommonStyle','QGraphicsEllipseItem',
+ 'QMutableVectorIterator','QStyle','QVarLengthArray','QCompleter','QGraphicsItem','QMutex',
+ 'QStyleFactory','QVBoxLayout','QConicalGradient','QGraphicsItemAnimation','QMutexLocker',
+ 'QStyleHintReturn','QVector','QContextMenuEvent','QGraphicsItemGroup','QNetworkAddressEntry',
+ 'QStyleHintReturnMask','QVectorIterator','QCopChannel','QGraphicsLineItem','QNetworkInterface',
+ 'QStyleOption','QVFbScreen','QCoreApplication','QGraphicsPathItem','QNetworkProxy','QStyleOptionButton',
+ 'QVNCScreen','QCursor','QGraphicsPixmapItem','QObject','QStyleOptionComboBox','QWaitCondition',
+ 'QCustomRasterPaintDevice','QGraphicsPolygonItem','QObjectCleanupHandler','QStyleOptionComplex',
+ 'QWhatsThis','QDataStream','QGraphicsRectItem','QPageSetupDialog','QStyleOptionDockWidget',
+ 'QWhatsThisClickedEvent','QDataWidgetMapper','QGraphicsScene','QPaintDevice','QStyleOptionFocusRect',
+ 'QWheelEvent','QDate','QGraphicsSceneContextMenuEvent','QPaintEngine','QStyleOptionFrame','QWidget',
+ 'QDateEdit','QGraphicsSceneEvent','QPaintEngineState','QStyleOptionFrameV2','QWidgetAction','QDateTime',
+ 'QGraphicsSceneHoverEvent','QPainter','QStyleOptionGraphicsItem','QWidgetItem','QDateTimeEdit',
+ 'QGraphicsSceneMouseEvent','QPainterPath','QStyleOptionGroupBox','QWindowsMime','QDBusAbstractAdaptor',
+ 'QGraphicsSceneWheelEvent','QPainterPathStroker','QStyleOptionHeader','QWindowsStyle',
+ 'QDBusAbstractInterface','QGraphicsSimpleTextItem','QPaintEvent','QStyleOptionMenuItem',
+ 'QWindowStateChangeEvent','QDBusArgument','QGraphicsSvgItem','QPair','QStyleOptionProgressBar',
+ 'QWindowsXPStyle','QDBusConnection','QGraphicsTextItem','QPalette','QStyleOptionProgressBarV2',
+ 'QWorkspace','QDBusConnectionInterface','QGraphicsView','QPen','QStyleOptionQ3DockWindow','QWriteLocker',
+ 'QDBusError','QGridLayout','QPersistentModelIndex','QStyleOptionQ3ListView','QWSCalibratedMouseHandler',
+ 'QDBusInterface','QGroupBox','QPicture','QStyleOptionQ3ListViewItem','QWSClient','QDBusMessage','QHash',
+ 'QPictureFormatPlugin','QStyleOptionRubberBand','QWSEmbedWidget','QDBusObjectPath','QHashIterator',
+ 'QPictureIO','QStyleOptionSizeGrip','QWSEvent','QDBusReply','QHBoxLayout','QPixmap','QStyleOptionSlider',
+ 'QWSInputMethod','QDBusServer','QHeaderView','QPixmapCache','QStyleOptionSpinBox','QWSKeyboardHandler',
+ 'QDBusSignature','QHelpEvent','QPlastiqueStyle','QStyleOptionTab','QWSMouseHandler','QDBusVariant',
+ 'QHideEvent','QPluginLoader','QStyleOptionTabBarBase','QWSPointerCalibrationData','QDecoration',
+ 'QHostAddress','QPoint','QStyleOptionTabV2','QWSScreenSaver','QDecorationFactory','QHostInfo','QPointer',
+ 'QStyleOptionTabWidgetFrame','QWSServer','QDecorationPlugin','QHoverEvent','QPointF','QStyleOptionTitleBar',
+ 'QWSTslibMouseHandler','QDesignerActionEditorInterface','QHttp','QPolygon','QStyleOptionToolBar','QWSWindow',
+ 'QDesignerContainerExtension','QHttpHeader','QPolygonF','QStyleOptionToolBox','QWSWindowSurface',
+ 'QDesignerCustomWidgetCollectionInterface','QHttpRequestHeader','QPrintDialog','QStyleOptionToolButton',
+ 'QX11EmbedContainer','QDesignerCustomWidgetInterface','QHttpResponseHeader','QPrintEngine',
+ 'QStyleOptionViewItem','QX11EmbedWidget','QDesignerFormEditorInterface','QIcon','QPrinter',
+ 'QStyleOptionViewItemV2','QX11Info','QDesignerFormWindowCursorInterface','QIconDragEvent','QProcess',
+ 'QStylePainter','QXmlAttributes','QDesignerFormWindowInterface','QIconEngine','QProgressBar',
+ 'QStylePlugin','QXmlContentHandler','QDesignerFormWindowManagerInterface','QIconEnginePlugin',
+ 'QProgressDialog','QSvgRenderer','QXmlDeclHandler','QDesignerMemberSheetExtension','QImage',
+ 'QProxyModel','QSvgWidget','QXmlDefaultHandler','QDesignerObjectInspectorInterface','QImageIOHandler',
+ 'QPushButton','QSyntaxHighlighter','QXmlDTDHandler','QDesignerPropertyEditorInterface','QImageIOPlugin',
+ 'QQueue','QSysInfo','QXmlEntityResolver','QDesignerPropertySheetExtension','QImageReader','QRadialGradient',
+ 'QSystemLocale','QXmlErrorHandler','QDesignerTaskMenuExtension','QImageWriter','QRadioButton',
+ 'QSystemTrayIcon','QXmlInputSource','QDesignerWidgetBoxInterface','QInputContext','QRasterPaintEngine',
+ 'QTabBar','QXmlLexicalHandler','QDesktopServices','QInputContextFactory','QReadLocker','QTabletEvent',
+ 'QXmlLocator','QDesktopWidget','QInputContextPlugin','QReadWriteLock','QTableView','QXmlNamespaceSupport',
+ 'QDial','QInputDialog','QRect','QTableWidget','QXmlParseException','QDialog','QInputEvent','QRectF',
+ 'QTableWidgetItem','QXmlReader','QDialogButtonBox','QInputMethodEvent','QRegExp',
+ 'QTableWidgetSelectionRange','QXmlSimpleReader'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':', ',', ';', '|', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight:bold;',
+ 2 => 'color: #0057AE;',
+ 3 => 'color: #2B74C7;',
+ 4 => 'color: #0057AE;',
+ 5 => 'color: #22aadd;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #888888;',
+ 2 => 'color: #006E28;',
+ 'MULTI' => 'color: #888888; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #006E28;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #BF0303;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #B08000;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #2B74C7;',
+ 2 => 'color: #2B74C7;',
+ 3 => 'color: #2B74C7;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006E28;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => 'http://doc.trolltech.com/latest/{FNAMEL}.html'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::',
+ 3 => '-&gt;',
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#>|^])",
+ 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-])"
+ ),
+ 'OOLANG' => array(
+ 'MATCH_AFTER' => '~?[a-zA-Z][a-zA-Z0-9_]*',
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php
new file mode 100644
index 000000000..264ef638d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php
@@ -0,0 +1,226 @@
+<?php
+/*************************************************************************************
+ * cpp.php
+ * -------
+ * Author: Dennis Bayer (Dennis.Bayer@mnifh-giessen.de)
+ * Contributors:
+ * - M. Uli Kusterer (witness.of.teachtext@gmx.net)
+ * - Jack Lloyd (lloyd@randombit.net)
+ * Copyright: (c) 2004 Dennis Bayer, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/09/27
+ *
+ * C++ language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/XX/XX (1.0.2)
+ * - Added several new keywords (Jack Lloyd)
+ * 2004/11/27 (1.0.1)
+ * - Added StdCLib function and constant names, changed color scheme to
+ * a cleaner one. (M. Uli Kusterer)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C++',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[\\\\abfnrtv\'\"?\n]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#"
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'break', 'case', 'continue', 'default', 'do', 'else', 'for', 'goto', 'if', 'return',
+ 'switch', 'throw', 'while'
+ ),
+ 2 => array(
+ 'NULL', 'false', 'true', 'enum', 'errno', 'EDOM',
+ 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
+ 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
+ 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
+ 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
+ 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
+ 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
+ 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
+ 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
+ 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam',
+ 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'stdin', 'stdout', 'stderr',
+ 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC',
+ 'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
+ 'try', 'catch', 'inline', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
+ 'static_cast', 'explicit', 'friend', 'wchar_t', 'typename', 'typeid', 'class'
+ ),
+ 3 => array(
+ 'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this',
+ 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
+ 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
+ 'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
+ 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
+ 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
+ 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
+ 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
+ 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
+ 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
+ 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
+ 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
+ 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
+ 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
+ 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
+ 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
+ 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
+ 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
+ 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
+ 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
+ ),
+ 4 => array(
+ 'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
+ 'register', 'short', 'shortint', 'signed', 'static', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'extern', 'jmp_buf',
+ 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
+ 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm',
+ ),
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('(', ')', '{', '}', '[', ']'),
+ 1 => array('<', '>','='),
+ 2 => array('+', '-', '*', '/', '%'),
+ 3 => array('!', '^', '&', '|'),
+ 4 => array('?', ':', ';')
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #0000dd;',
+ 4 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666;',
+ 2 => 'color: #339900;',
+ 'MULTI' => 'color: #ff0000; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #007788;',
+ 2 => 'color: #007788;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;',
+ 1 => 'color: #000080;',
+ 2 => 'color: #000040;',
+ 3 => 'color: #000040;',
+ 4 => 'color: #008080;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#])",
+ 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_\|%\\-])"
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php
new file mode 100644
index 000000000..0f8a5e2a3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php
@@ -0,0 +1,250 @@
+<?php
+/*************************************************************************************
+ * csharp.php
+ * ----------
+ * Author: Alan Juden (alan@judenware.org)
+ * Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * C# language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/25 (1.0.7.22)
+ * - Added highlighting of using and namespace directives as non-OOP
+ * 2005/01/05 (1.0.1)
+ * - Used hardquote support for @"..." strings (Cliff Stanford)
+ * 2004/11/27 (1.0.0)
+ * - Initial release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'C#',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Using and Namespace directives (basic support)
+ //Please note that the alias syntax for using is not supported
+ 3 => '/(?:(?<=using[\\n\\s])|(?<=namespace[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*[a-zA-Z0-9_]+[\n\s]*(?=[;=])/i'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'HARDQUOTE' => array('@"', '"'),
+ 'HARDESCAPE' => array('"'),
+ 'HARDCHAR' => '"',
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'as', 'auto', 'base', 'break', 'case', 'catch', 'const', 'continue',
+ 'default', 'do', 'else', 'event', 'explicit', 'extern', 'false',
+ 'finally', 'fixed', 'for', 'foreach', 'goto', 'if', 'implicit',
+ 'in', 'internal', 'lock', 'namespace', 'null', 'operator', 'out',
+ 'override', 'params', 'partial', 'private', 'protected', 'public',
+ 'readonly', 'ref', 'return', 'sealed', 'stackalloc', 'static',
+ 'switch', 'this', 'throw', 'true', 'try', 'unsafe', 'using',
+ 'virtual', 'void', 'while'
+ ),
+ 2 => array(
+ '#elif', '#endif', '#endregion', '#else', '#error', '#define', '#if',
+ '#line', '#region', '#undef', '#warning'
+ ),
+ 3 => array(
+ 'checked', 'is', 'new', 'sizeof', 'typeof', 'unchecked'
+ ),
+ 4 => array(
+ 'bool', 'byte', 'char', 'class', 'decimal', 'delegate', 'double',
+ 'enum', 'float', 'int', 'interface', 'long', 'object', 'sbyte',
+ 'short', 'string', 'struct', 'uint', 'ulong', 'ushort'
+ ),
+ 5 => array(
+ 'Microsoft.Win32',
+ 'System',
+ 'System.CodeDOM',
+ 'System.CodeDOM.Compiler',
+ 'System.Collections',
+ 'System.Collections.Bases',
+ 'System.ComponentModel',
+ 'System.ComponentModel.Design',
+ 'System.ComponentModel.Design.CodeModel',
+ 'System.Configuration',
+ 'System.Configuration.Assemblies',
+ 'System.Configuration.Core',
+ 'System.Configuration.Install',
+ 'System.Configuration.Interceptors',
+ 'System.Configuration.Schema',
+ 'System.Configuration.Web',
+ 'System.Core',
+ 'System.Data',
+ 'System.Data.ADO',
+ 'System.Data.Design',
+ 'System.Data.Internal',
+ 'System.Data.SQL',
+ 'System.Data.SQLTypes',
+ 'System.Data.XML',
+ 'System.Data.XML.DOM',
+ 'System.Data.XML.XPath',
+ 'System.Data.XML.XSLT',
+ 'System.Diagnostics',
+ 'System.Diagnostics.SymbolStore',
+ 'System.DirectoryServices',
+ 'System.Drawing',
+ 'System.Drawing.Design',
+ 'System.Drawing.Drawing2D',
+ 'System.Drawing.Imaging',
+ 'System.Drawing.Printing',
+ 'System.Drawing.Text',
+ 'System.Globalization',
+ 'System.IO',
+ 'System.IO.IsolatedStorage',
+ 'System.Messaging',
+ 'System.Net',
+ 'System.Net.Sockets',
+ 'System.NewXml',
+ 'System.NewXml.XPath',
+ 'System.NewXml.Xsl',
+ 'System.Reflection',
+ 'System.Reflection.Emit',
+ 'System.Resources',
+ 'System.Runtime.InteropServices',
+ 'System.Runtime.InteropServices.Expando',
+ 'System.Runtime.Remoting',
+ 'System.Runtime.Serialization',
+ 'System.Runtime.Serialization.Formatters',
+ 'System.Runtime.Serialization.Formatters.Binary',
+ 'System.Security',
+ 'System.Security.Cryptography',
+ 'System.Security.Cryptography.X509Certificates',
+ 'System.Security.Permissions',
+ 'System.Security.Policy',
+ 'System.Security.Principal',
+ 'System.ServiceProcess',
+ 'System.Text',
+ 'System.Text.RegularExpressions',
+ 'System.Threading',
+ 'System.Timers',
+ 'System.Web',
+ 'System.Web.Caching',
+ 'System.Web.Configuration',
+ 'System.Web.Security',
+ 'System.Web.Services',
+ 'System.Web.Services.Description',
+ 'System.Web.Services.Discovery',
+ 'System.Web.Services.Protocols',
+ 'System.Web.UI',
+ 'System.Web.UI.Design',
+ 'System.Web.UI.Design.WebControls',
+ 'System.Web.UI.Design.WebControls.ListControls',
+ 'System.Web.UI.HtmlControls',
+ 'System.Web.UI.WebControls',
+ 'System.WinForms',
+ 'System.WinForms.ComponentModel',
+ 'System.WinForms.Design',
+ 'System.Xml',
+ 'System.Xml.Serialization',
+ 'System.Xml.Serialization.Code',
+ 'System.Xml.Serialization.Schema'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', ':', ';',
+ '(', ')', '{', '}', '[', ']', '|'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF;',
+ 2 => 'color: #FF8000; font-weight: bold;',
+ 3 => 'color: #008000;',
+ 4 => 'color: #FF0000;',
+ 5 => 'color: #000000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080; font-style: italic;',
+ 2 => 'color: #008080;',
+ 3 => 'color: #008080;',
+ 'MULTI' => 'color: #008080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080; font-weight: bold;',
+ 'HARD' => 'color: #008080; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #666666;',
+ 'HARD' => 'color: #666666;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #0000FF;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.google.com/search?q={FNAMEL}+msdn.microsoft.com',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#>|^])",
+ 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-])"
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php
new file mode 100644
index 000000000..f6386bdc0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php
@@ -0,0 +1,212 @@
+<?php
+/*************************************************************************************
+ * css.php
+ * -------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/18
+ *
+ * CSS language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ * - Changed regexps to catch "-" symbols
+ * - Added support for URLs
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Improve or drop regexps for class/id/psuedoclass highlighting
+ * * Re-look at keywords - possibly to make several CSS language
+ * files, all with different versions of CSS in them
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'CSS',
+ 'COMMENT_SINGLE' => array(1 => '@'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ 2 => "/(?<=\\()\\s*(?:(?:[a-z0-9]+?:\\/\\/)?[a-z0-9_\\-\\.\\/:]+?)?[a-z]+?\\.[a-z]+?(\\?[^\)]+?)?\\s*?(?=\\))/i"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'aqua', 'azimuth', 'background-attachment', 'background-color',
+ 'background-image', 'background-position', 'background-repeat',
+ 'background', 'black', 'blue', 'border-bottom-color',
+ 'border-bottom-style', 'border-bottom-width', 'border-left-color',
+ 'border-left-style', 'border-left-width', 'border-right',
+ 'border-right-color', 'border-right-style', 'border-right-width',
+ 'border-top-color', 'border-top-style',
+ 'border-top-width','border-bottom', 'border-collapse',
+ 'border-left', 'border-width', 'border-color', 'border-spacing',
+ 'border-style', 'border-top', 'border', 'caption-side', 'clear',
+ 'clip', 'color', 'content', 'counter-increment', 'counter-reset',
+ 'cue-after', 'cue-before', 'cue', 'cursor', 'direction', 'display',
+ 'elevation', 'empty-cells', 'float', 'font-family', 'font-size',
+ 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant',
+ 'font-weight', 'font', 'line-height', 'letter-spacing',
+ 'list-style', 'list-style-image', 'list-style-position',
+ 'list-style-type', 'margin-bottom', 'margin-left', 'margin-right',
+ 'margin-top', 'margin', 'marker-offset', 'marks', 'max-height',
+ 'max-width', 'min-height', 'min-width', 'orphans', 'outline',
+ 'outline-color', 'outline-style', 'outline-width', 'overflow',
+ 'padding-bottom', 'padding-left', 'padding-right', 'padding-top',
+ 'padding', 'page', 'page-break-after', 'page-break-before',
+ 'page-break-inside', 'pause-after', 'pause-before', 'pause',
+ 'pitch', 'pitch-range', 'play-during', 'position', 'quotes',
+ 'richness', 'right', 'size', 'speak-header', 'speak-numeral',
+ 'speak-punctuation', 'speak', 'speech-rate', 'stress',
+ 'table-layout', 'text-align', 'text-decoration', 'text-indent',
+ 'text-shadow', 'text-transform', 'top', 'unicode-bidi',
+ 'vertical-align', 'visibility', 'voice-family', 'volume',
+ 'white-space', 'widows', 'width', 'word-spacing', 'z-index',
+ 'bottom', 'left', 'height'
+ ),
+ 2 => array(
+ 'above', 'absolute', 'always', 'armenian', 'aural', 'auto',
+ 'avoid', 'baseline', 'behind', 'below', 'bidi-override', 'blink',
+ 'block', 'bold', 'bolder', 'both', 'capitalize', 'center-left',
+ 'center-right', 'center', 'circle', 'cjk-ideographic',
+ 'close-quote', 'collapse', 'condensed', 'continuous', 'crop',
+ 'crosshair', 'cross', 'cursive', 'dashed', 'decimal-leading-zero',
+ 'decimal', 'default', 'digits', 'disc', 'dotted', 'double',
+ 'e-resize', 'embed', 'extra-condensed', 'extra-expanded',
+ 'expanded', 'fantasy', 'far-left', 'far-right', 'faster', 'fast',
+ 'fixed', 'fuchsia', 'georgian', 'gray', 'green', 'groove',
+ 'hebrew', 'help', 'hidden', 'hide', 'higher', 'high',
+ 'hiragana-iroha', 'hiragana', 'icon', 'inherit', 'inline-table',
+ 'inline', 'inset', 'inside', 'invert', 'italic', 'justify',
+ 'katakana-iroha', 'katakana', 'landscape', 'larger', 'large',
+ 'left-side', 'leftwards', 'level', 'lighter', 'lime',
+ 'line-through', 'list-item', 'loud', 'lower-alpha', 'lower-greek',
+ 'lower-roman', 'lowercase', 'ltr', 'lower', 'low', 'maroon',
+ 'medium', 'message-box', 'middle', 'mix', 'monospace', 'n-resize',
+ 'narrower', 'navy', 'ne-resize', 'no-close-quote',
+ 'no-open-quote', 'no-repeat', 'none', 'normal', 'nowrap',
+ 'nw-resize', 'oblique', 'olive', 'once', 'open-quote', 'outset',
+ 'outside', 'overline', 'pointer', 'portrait', 'purple', 'px',
+ 'red', 'relative', 'repeat-x', 'repeat-y', 'repeat', 'rgb',
+ 'ridge', 'right-side', 'rightwards', 's-resize', 'sans-serif',
+ 'scroll', 'se-resize', 'semi-condensed', 'semi-expanded',
+ 'separate', 'serif', 'show', 'silent', 'silver', 'slow', 'slower',
+ 'small-caps', 'small-caption', 'smaller', 'soft', 'solid',
+ 'spell-out', 'square', 'static', 'status-bar', 'super',
+ 'sw-resize', 'table-caption', 'table-cell', 'table-column',
+ 'table-column-group', 'table-footer-group', 'table-header-group',
+ 'table-row', 'table-row-group', 'teal', 'text', 'text-bottom',
+ 'text-top', 'thick', 'thin', 'transparent', 'ultra-condensed',
+ 'ultra-expanded', 'underline', 'upper-alpha', 'upper-latin',
+ 'upper-roman', 'uppercase', 'url', 'visible', 'w-resize', 'wait',
+ 'white', 'wider', 'x-fast', 'x-high', 'x-large', 'x-loud',
+ 'x-low', 'x-small', 'x-soft', 'xx-large', 'xx-small', 'yellow',
+ 'yes'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', ':', ';',
+ '>', '+', '*', ',', '^', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #993333;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #a1a100;',
+ 2 => 'color: #ff0000; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #00AA00;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #00AA00;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #cc00cc;',
+ 1 => 'color: #6666ff;',
+ 2 => 'color: #3333ff;',
+ 3 => 'color: #933;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //DOM Node ID
+ 0 => '\#[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*',
+ //CSS classname
+ 1 => '\.(?!\d)[a-zA-Z0-9\-_]+(?:\\\\:[a-zA-Z0-9\-_]+)*\b(?=[\{\.#\s,:].|<\|)',
+ //CSS Pseudo classes
+ //note: & is needed for &gt; (i.e. > )
+ 2 => '(?<!\\\\):(?!\d)[a-zA-Z0-9\-]+\b(?:\s*(?=[\{\.#a-zA-Z,:+*&](.|\n)|<\|))',
+ //Measurements
+ 3 => '[+\-]?(\d+|(\d*\.\d+))(em|ex|pt|px|cm|in|%)',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_AFTER' => '(?![a-zA-Z0-9_\|%\\-&\.])'
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php
new file mode 100644
index 000000000..691091809
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php
@@ -0,0 +1,272 @@
+<?php
+/*************************************************************************************
+ * d.php
+ * -----
+ * Author: Thomas Kuehne (thomas@kuehne.cn)
+ * Copyright: (c) 2005 Thomas Kuehne (http://thomas.kuehne.cn/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/04/22
+ *
+ * D language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/04/22 (0.0.2)
+ * - added _d_* and sizeof/ptrdiff_t
+ * 2005/04/20 (0.0.1)
+ * - First release
+ *
+ * TODO (updated 2005/04/22)
+ * -------------------------
+ * * nested comments
+ * * correct handling of r"" and ``
+ * * correct handling of ... and ..
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'D',
+ 'COMMENT_SINGLE' => array(2 => '///', 1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ // doxygen comments
+ 3 => '#/\*\*(?![\*\/]).*\*/#sU',
+ // raw strings
+ 4 => '#r"[^"]*"#s',
+ // Script Style interpreter comment
+ 5 => "/\A#!(?=\\/).*?$/m"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[abfnrtv\\'\"?\n\\\\]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{2}#",
+ //Hexadecimal Char Specs
+ 3 => "#\\\\u[\da-fA-F]{4}#",
+ //Hexadecimal Char Specs
+ 4 => "#\\\\U[\da-fA-F]{8}#",
+ //Octal Char Specs
+ 5 => "#\\\\[0-7]{1,3}#",
+ //Named entity escapes
+ /*6 => "#\\\\&(?:quot|amp|lt|gt|OElig|oelig|Scaron|scaron|Yuml|circ|tilde|".
+ "ensp|emsp|thinsp|zwnj|zwj|lrm|rlm|ndash|mdash|lsquo|rsquo|sbquo|".
+ "ldquo|rdquo|bdquo|dagger|Dagger|permil|lsaquo|rsaquo|euro|nbsp|".
+ "iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|".
+ "shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|".
+ "sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|".
+ "Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|".
+ "Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|".
+ "times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|".
+ "aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|".
+ "euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|".
+ "otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|".
+ "yuml|fnof|Alpha|Beta|Gamma|Delta|Epsilon|Zeta|Eta|Theta|Iota|".
+ "Kappa|Lambda|Mu|Nu|Xi|Omicron|Pi|Rho|Sigma|Tau|Upsilon|Phi|Chi|".
+ "Psi|Omega|alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|".
+ "kappa|lambda|mu|nu|xi|omicron|pi|rho|sigmaf|sigma|tau|upsilon|".
+ "phi|chi|psi|omega|thetasym|upsih|piv|bull|hellip|prime|Prime|".
+ "oline|frasl|weierp|image|real|trade|alefsym|larr|uarr|rarr|darr|".
+ "harr|crarr|lArr|uArr|rArr|dArr|hArr|forall|part|exist|empty|".
+ "nabla|isin|notin|ni|prod|sum|minus|lowast|radic|prop|infin|ang|".
+ "and|or|cap|cup|int|there4|sim|cong|asymp|ne|equiv|le|ge|sub|sup|".
+ "nsub|sube|supe|oplus|otimes|perp|sdot|lceil|rceil|lfloor|rfloor|".
+ "lang|rang|loz|spades|clubs|hearts|diams);#",*/
+ // optimized:
+ 6 => "#\\\\&(?:A(?:Elig|acute|circ|grave|lpha|ring|tilde|uml)|Beta|".
+ "C(?:cedil|hi)|D(?:agger|elta)|E(?:TH|acute|circ|grave|psilon|ta|uml)|".
+ "Gamma|I(?:acute|circ|grave|ota|uml)|Kappa|Lambda|Mu|N(?:tilde|u)|".
+ "O(?:Elig|acute|circ|grave|m(?:ega|icron)|slash|tilde|uml)|".
+ "P(?:hi|i|rime|si)|Rho|S(?:caron|igma)|T(?:HORN|au|heta)|".
+ "U(?:acute|circ|grave|psilon|uml)|Xi|Y(?:acute|uml)|Zeta|".
+ "a(?:acute|c(?:irc|ute)|elig|grave|l(?:efsym|pha)|mp|n[dg]|ring|".
+ "symp|tilde|uml)|b(?:dquo|eta|rvbar|ull)|c(?:ap|cedil|e(?:dil|nt)|".
+ "hi|irc|lubs|o(?:ng|py)|rarr|u(?:p|rren))|d(?:Arr|a(?:gger|rr)|".
+ "e(?:g|lta)|i(?:ams|vide))|e(?:acute|circ|grave|m(?:pty|sp)|nsp|".
+ "psilon|quiv|t[ah]|u(?:ml|ro)|xist)|f(?:nof|orall|ra(?:c(?:1[24]|34)|sl))|".
+ "g(?:amma|e|t)|h(?:Arr|arr|e(?:arts|llip))|i(?:acute|circ|excl|grave|mage|".
+ "n(?:fin|t)|ota|quest|sin|uml)|kappa|l(?:Arr|a(?:mbda|ng|quo|rr)|ceil|".
+ "dquo|e|floor|o(?:wast|z)|rm|s(?:aquo|quo)|t)|m(?:acr|dash|".
+ "i(?:cro|ddot|nus)|u)|n(?:abla|bsp|dash|e|i|ot(?:in)?|sub|tilde|u)|".
+ "o(?:acute|circ|elig|grave|line|m(?:ega|icron)|plus|r(?:d[fm])?|".
+ "slash|ti(?:lde|mes)|uml)|p(?:ar[at]|er(?:mil|p)|hi|iv?|lusmn|ound|".
+ "r(?:ime|o[dp])|si)|quot|r(?:Arr|a(?:dic|ng|quo|rr)|ceil|dquo|e(?:al|g)|".
+ "floor|ho|lm|s(?:aquo|quo))|s(?:bquo|caron|dot|ect|hy|i(?:gmaf?|m)|".
+ "pades|u(?:be?|m|p[123e]?)|zlig)|t(?:au|h(?:e(?:re4|ta(?:sym)?)|insp|".
+ "orn)|i(?:lde|mes)|rade)|u(?:Arr|a(?:cute|rr)|circ|grave|ml|".
+ "psi(?:h|lon)|uml)|weierp|xi|y(?:acute|en|uml)|z(?:eta|w(?:j|nj)));#",
+ ),
+ 'HARDQUOTE' => array('`', '`'),
+ 'HARDESCAPE' => array(),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_INT_CSTYLE | GESHI_NUMBER_BIN_PREFIX_0B |
+ GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX | GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_NONSCI_F | GESHI_NUMBER_FLT_SCI_SHORT | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'break', 'case', 'continue', 'do', 'else',
+ 'for', 'foreach', 'goto', 'if', 'return',
+ 'switch', 'while'
+ ),
+ 2 => array(
+ 'alias', 'asm', 'assert', 'body', 'cast',
+ 'catch', 'default', 'delegate', 'delete',
+ 'extern', 'false', 'finally', 'function',
+ 'import', 'in', 'inout', 'interface',
+ 'invariant', 'is', 'mixin', 'module', 'new',
+ 'null', 'out', 'pragma', 'ref', 'super', 'this',
+ 'throw', 'true', 'try', 'typedef', 'typeid',
+ 'typeof', 'union', 'with'
+ ),
+ 3 => array(
+ 'ArrayBoundsError', 'AssertError',
+ 'ClassInfo', 'Error', 'Exception',
+ 'Interface', 'ModuleInfo', 'Object',
+ 'OutOfMemoryException', 'SwitchError',
+ 'TypeInfo', '_d_arrayappend',
+ '_d_arrayappendb', '_d_arrayappendc',
+ '_d_arrayappendcb', '_d_arraycast',
+ '_d_arraycast_frombit', '_d_arraycat',
+ '_d_arraycatb', '_d_arraycatn',
+ '_d_arraycopy', '_d_arraycopybit',
+ '_d_arraysetbit', '_d_arraysetbit2',
+ '_d_arraysetlength', '_d_arraysetlengthb',
+ '_d_callfinalizer',
+ '_d_create_exception_object',
+ '_d_criticalenter', '_d_criticalexit',
+ '_d_delarray', '_d_delclass',
+ '_d_delinterface', '_d_delmemory',
+ '_d_dynamic_cast', '_d_exception',
+ '_d_exception_filter', '_d_framehandler',
+ '_d_interface_cast', '_d_interface_vtbl',
+ '_d_invariant', '_d_isbaseof',
+ '_d_isbaseof2', '_d_local_unwind',
+ '_d_monitorenter', '_d_monitorexit',
+ '_d_monitorrelease', '_d_monitor_epilog',
+ '_d_monitor_handler', '_d_monitor_prolog',
+ '_d_new', '_d_newarrayi', '_d_newbitarray',
+ '_d_newclass', '_d_obj_cmp', '_d_obj_eq',
+ '_d_OutOfMemory', '_d_switch_dstring',
+ '_d_switch_string', '_d_switch_ustring',
+ '_d_throw',
+ ),
+ 4 => array(
+ 'abstract', 'align', 'auto', 'bit', 'bool',
+ 'byte', 'cdouble', 'cent', 'cfloat', 'char',
+ 'class', 'const', 'creal', 'dchar', 'debug',
+ 'deprecated', 'double', 'enum', 'export',
+ 'final', 'float', 'idouble', 'ifloat', 'int',
+ 'ireal', 'long', 'override', 'package',
+ 'private', 'protected', 'ptrdiff_t',
+ 'public', 'real', 'short', 'size_t',
+ 'static', 'struct', 'synchronized',
+ 'template', 'ubyte', 'ucent', 'uint',
+ 'ulong', 'unittest', 'ushort', 'version',
+ 'void', 'volatile', 'wchar'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '?', '!', ';', ':', ',', '...', '..',
+ '+', '-', '*', '/', '%', '&', '|', '^', '<', '>', '=', '~',
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #aaaadd; font-weight: bold;',
+ 4 => 'color: #993333;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #009933; font-style: italic;',
+ 3 => 'color: #009933; font-style: italic;',
+ 4 => 'color: #ff0000;',
+ 5 => 'color: #0040ff;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #660099; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold;',
+ 6 => 'color: #666699; font-weight: bold; font-style: italic;',
+ 'HARD' => '',
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;',
+ GESHI_NUMBER_BIN_PREFIX_0B => 'color: #208080;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_SHORT => 'color:#800080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI_F => 'color:#800080;',
+ GESHI_NUMBER_FLT_NONSCI => 'color:#800080;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php
new file mode 100644
index 000000000..0f6bad372
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php
@@ -0,0 +1,185 @@
+<?php
+/*************************************************************************************
+ * dcs.php
+ * ---------------------------------
+ * Author: Stelio Passaris (GeSHi@stelio.net)
+ * Copyright: (c) 2009 Stelio Passaris (http://stelio.net/stiki/GeSHi)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/01/20
+ *
+ * DCS language file for GeSHi.
+ *
+ * DCS (Data Conversion System) is part of Sungard iWorks' Prophet suite and is used
+ * to convert external data files into a format that Prophet and Glean can read.
+ * See http://www.prophet-web.com/Products/DCS for product information.
+ * This language file is current for DCS version 7.3.2.
+ *
+ * Note that the DCS IDE does not handle escape characters correctly. The IDE thinks
+ * that a backslash '\' is an escape character, but in practice the backslash does
+ * not escape the string delimiter character '"' when the program runs. A '\\' is
+ * escaped to '\' when the program runs, but '\"' is treated as '\' at the end of a
+ * string. Therefore in this language file, we do not recognise the backslash as an
+ * escape character. For the purposes of GeSHi, there is no character escaping.
+ *
+ * CHANGES
+ * -------
+ * 2009/02/21 (1.0.8.3)
+ * - First Release
+ *
+ * TODO (updated 2009/02/21)
+ * -------------------------
+ * * Add handling for embedded C code. Note that the DCS IDE does not highlight C code
+ * correctly, but that doesn't mean that we can't! This will be included for a
+ * stable release of GeSHi of version 1.1.x (or later) that allows for highlighting
+ * embedded code using that code's appropriate language file.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'DCS',
+ 'COMMENT_SINGLE' => array(
+ 1 => ';'
+ ),
+ 'COMMENT_MULTI' => array(
+ ),
+ 'HARDQUOTE' => array(
+ ),
+ 'HARDESCAPE' => '',
+ 'COMMENT_REGEXP' => array(
+ // Highlight embedded C code in a separate color:
+ 2 => '/\bINSERT_C_CODE\b.*?\bEND_C_CODE\b/ims'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array(
+ '"'
+ ),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => '',
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abs', 'ascii_value', 'bit_value', 'blank_date', 'calc_unit_values', 'cm',
+ 'complete_months', 'complete_years', 'correct', 'create_input_file', 'cy',
+ 'date_convert', 'day', 'del_output_separator',
+ 'delete_existing_output_files', 'div', 'ex', 'exact_years', 'exp',
+ 'extract_date', 'failed_validation', 'file_number', 'first_record',
+ 'fract', 'fund_fac_a', 'fund_fac_b', 'fund_fac_c', 'fund_fac_d',
+ 'fund_fac_e', 'fund_fac_f', 'fund_fac_g', 'fund_fac_h', 'fund_fac_i',
+ 'fund_fac_j', 'fund_fac_k', 'fund_fac_l', 'fund_fac_m', 'fund_fac_n',
+ 'fund_fac_o', 'fund_fac_p', 'fund_fac_q', 'fund_fac_r', 'fund_fac_s',
+ 'fund_fac_t', 'fund_fac_u', 'fund_fac_v', 'fund_fac_w', 'fund_fac_x',
+ 'fund_fac_y', 'fund_fac_z', 'group', 'group_record',
+ 'input_file_date_time', 'input_file_extension', 'input_file_location',
+ 'input_file_name', 'int', 'invalid', 'last_record', 'leap_year', 'len',
+ 'ln', 'log', 'main_format_name', 'max', 'max_num_subrecords', 'message',
+ 'min', 'mod', 'month', 'months_add', 'months_sub', 'nearest_months',
+ 'nearest_years', 'next_record', 'nm', 'no_of_current_records',
+ 'no_of_records', 'numval', 'ny', 'output', 'output_array_as_constants',
+ 'output_file_path', 'output_record', 'pmdf_output', 'previous', 'rand',
+ 're_start', 'read_generic_table', 'read_generic_table_text',
+ 'read_input_footer', 'read_input_footer_text', 'read_input_header',
+ 'read_input_header_text', 'record_count', 'record_suppressed', 'round',
+ 'round_down', 'round_near', 'round_up', 'run_dcs_program', 'run_parameter',
+ 'run_parameter_text', 'set_main_record', 'set_num_subrecords',
+ 'sort_array', 'sort_current_records', 'sort_input', 'strval', 'substr',
+ 'summarise', 'summarise_record', 'summarise_units',
+ 'summarise_units_record', 'suppress_record', 'table_correct',
+ 'table_validate', 'terminate', 'time', 'today', 'trim', 'ubound', 'year',
+ 'years_add', 'years_sub'
+ ),
+ 2 => array(
+ 'and', 'as', 'begin', 'boolean', 'byref', 'byval', 'call', 'case', 'date',
+ 'default', 'do', 'else', 'elseif', 'end_c_code', 'endfor', 'endfunction',
+ 'endif', 'endproc', 'endswitch', 'endwhile', 'eq',
+ 'explicit_declarations', 'false', 'for', 'from', 'function', 'ge', 'gt',
+ 'if', 'insert_c_code', 'integer', 'le', 'loop', 'lt', 'ne', 'not',
+ 'number', 'or', 'private', 'proc', 'public', 'quitloop', 'return',
+ 'short', 'step', 'switch', 'text', 'then', 'to', 'true', 'while'
+ ),
+ 3 => array(
+ // These keywords are not highlighted by the DCS IDE but we may as well
+ // keep track of them anyway:
+ 'mp_file', 'odbc_file'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']',
+ '=', '<', '>',
+ '+', '-', '*', '/', '^',
+ ':', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: red;',
+ 2 => 'color: blue;',
+ 3 => 'color: black;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: black; background-color: silver;',
+ // Colors for highlighting embedded C code:
+ 2 => 'color: maroon; background-color: pink;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: black;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: green;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: green;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: black;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php
new file mode 100644
index 000000000..9d7ad7e7d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php
@@ -0,0 +1,289 @@
+<?php
+/*************************************************************************************
+ * delphi.php
+ * ----------
+ * Author: J�rja Norbert (jnorbi@vipmail.hu), Benny Baumann (BenBE@omorphia.de)
+ * Copyright: (c) 2004 J�rja Norbert, Benny Baumann (BenBE@omorphia.de), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/26
+ *
+ * Delphi (Object Pascal) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2005/11/19 (1.0.3)
+ * - Updated the very incomplete keyword and type lists
+ * 2005/09/03 (1.0.2)
+ * - Added support for hex numbers and string entities
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Delphi',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('(*' => '*)', '{' => '}'),
+ //Compiler directives
+ 'COMMENT_REGEXP' => array(2 => '/\\{\\$.*?}|\\(\\*\\$.*?\\*\\)/U'),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array("'"),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'Abstract', 'And', 'Array', 'As', 'Asm', 'At', 'Begin', 'Case',
+ 'Class', 'Const', 'Constructor', 'Contains', 'Destructor',
+ 'DispInterface', 'Div', 'Do', 'DownTo', 'Else', 'End', 'Except',
+ 'Export', 'Exports', 'External', 'File', 'Finalization', 'Finally',
+ 'For', 'Function', 'Goto', 'If', 'Implementation', 'In', 'Inherited',
+ 'Initialization', 'Inline', 'Interface', 'Is', 'Label', 'Library',
+ 'Mod', 'Not', 'Object', 'Of', 'On', 'Or', 'Overload', 'Override',
+ 'Package', 'Packed', 'Private', 'Procedure', 'Program', 'Property',
+ 'Protected', 'Public', 'Published', 'Raise', 'Record', 'Register',
+ 'Repeat', 'Requires', 'Resourcestring', 'Set', 'Shl', 'Shr', 'Then',
+ 'ThreadVar', 'To', 'Try', 'Type', 'Unit', 'Until', 'Uses', 'Var',
+ 'Virtual', 'While', 'With', 'Xor', 'assembler', 'far',
+ 'near', 'pascal', 'register', 'cdecl', 'safecall', 'stdcall', 'varargs'
+ ),
+ 2 => array(
+ 'nil', 'false', 'self', 'true', 'var', 'type', 'const'
+ ),
+ 3 => array(
+ 'Abs', 'AcquireExceptionObject', 'Addr', 'AnsiToUtf8', 'Append', 'ArcTan',
+ 'Assert', 'AssignFile', 'Assigned', 'BeginThread', 'BlockRead',
+ 'BlockWrite', 'Break', 'ChDir', 'Chr', 'Close', 'CloseFile',
+ 'CompToCurrency', 'CompToDouble', 'Concat', 'Continue', 'Copy', 'Cos',
+ 'Dec', 'Delete', 'Dispose', 'DoubleToComp', 'EndThread', 'EnumModules',
+ 'EnumResourceModules', 'Eof', 'Eoln', 'Erase', 'ExceptAddr',
+ 'ExceptObject', 'Exclude', 'Exit', 'Exp', 'FilePos', 'FileSize',
+ 'FillChar', 'Finalize', 'FindClassHInstance', 'FindHInstance',
+ 'FindResourceHInstance', 'Flush', 'Frac', 'FreeMem', 'Get8087CW',
+ 'GetDir', 'GetLastError', 'GetMem', 'GetMemoryManager',
+ 'GetModuleFileName', 'GetVariantManager', 'Halt', 'Hi', 'High',
+ 'IOResult', 'Inc', 'Include', 'Initialize', 'Insert', 'Int',
+ 'IsMemoryManagerSet', 'IsVariantManagerSet', 'Length', 'Ln', 'Lo', 'Low',
+ 'MkDir', 'Move', 'New', 'Odd', 'OleStrToStrVar', 'OleStrToString', 'Ord',
+ 'PUCS4Chars', 'ParamCount', 'ParamStr', 'Pi', 'Pos', 'Pred', 'Ptr',
+ 'Random', 'Randomize', 'Read', 'ReadLn', 'ReallocMem',
+ 'ReleaseExceptionObject', 'Rename', 'Reset', 'Rewrite', 'RmDir', 'Round',
+ 'RunError', 'Seek', 'SeekEof', 'SeekEoln', 'Set8087CW', 'SetLength',
+ 'SetLineBreakStyle', 'SetMemoryManager', 'SetString', 'SetTextBuf',
+ 'SetVariantManager', 'Sin', 'SizeOf', 'Slice', 'Sqr', 'Sqrt', 'Str',
+ 'StringOfChar', 'StringToOleStr', 'StringToWideChar', 'Succ', 'Swap',
+ 'Trunc', 'Truncate', 'TypeInfo', 'UCS4StringToWideString', 'UTF8Decode',
+ 'UTF8Encode', 'UnicodeToUtf8', 'UniqueString', 'UpCase', 'Utf8ToAnsi',
+ 'Utf8ToUnicode', 'Val', 'VarArrayRedim', 'VarClear',
+ 'WideCharLenToStrVar', 'WideCharLenToString', 'WideCharToStrVar',
+ 'WideCharToString', 'WideStringToUCS4String', 'Write', 'WriteLn',
+
+ 'Abort', 'AddExitProc', 'AddTerminateProc', 'AdjustLineBreaks', 'AllocMem',
+ 'AnsiCompareFileName', 'AnsiCompareStr', 'AnsiCompareText',
+ 'AnsiDequotedStr', 'AnsiExtractQuotedStr', 'AnsiLastChar',
+ 'AnsiLowerCase', 'AnsiLowerCaseFileName', 'AnsiPos', 'AnsiQuotedStr',
+ 'AnsiSameStr', 'AnsiSameText', 'AnsiStrComp', 'AnsiStrIComp',
+ 'AnsiStrLComp', 'AnsiStrLIComp', 'AnsiStrLastChar', 'AnsiStrLower',
+ 'AnsiStrPos', 'AnsiStrRScan', 'AnsiStrScan', 'AnsiStrUpper',
+ 'AnsiUpperCase', 'AnsiUpperCaseFileName', 'AppendStr', 'AssignStr',
+ 'Beep', 'BoolToStr', 'ByteToCharIndex', 'ByteToCharLen', 'ByteType',
+ 'CallTerminateProcs', 'ChangeFileExt', 'CharLength', 'CharToByteIndex',
+ 'CharToByteLen', 'CompareMem', 'CompareStr', 'CompareText', 'CreateDir',
+ 'CreateGUID', 'CurrToStr', 'CurrToStrF', 'CurrentYear', 'Date',
+ 'DateTimeToFileDate', 'DateTimeToStr', 'DateTimeToString',
+ 'DateTimeToSystemTime', 'DateTimeToTimeStamp', 'DateToStr', 'DayOfWeek',
+ 'DecodeDate', 'DecodeDateFully', 'DecodeTime', 'DeleteFile',
+ 'DirectoryExists', 'DiskFree', 'DiskSize', 'DisposeStr', 'EncodeDate',
+ 'EncodeTime', 'ExceptionErrorMessage', 'ExcludeTrailingBackslash',
+ 'ExcludeTrailingPathDelimiter', 'ExpandFileName', 'ExpandFileNameCase',
+ 'ExpandUNCFileName', 'ExtractFileDir', 'ExtractFileDrive',
+ 'ExtractFileExt', 'ExtractFileName', 'ExtractFilePath',
+ 'ExtractRelativePath', 'ExtractShortPathName', 'FileAge', 'FileClose',
+ 'FileCreate', 'FileDateToDateTime', 'FileExists', 'FileGetAttr',
+ 'FileGetDate', 'FileIsReadOnly', 'FileOpen', 'FileRead', 'FileSearch',
+ 'FileSeek', 'FileSetAttr', 'FileSetDate', 'FileSetReadOnly', 'FileWrite',
+ 'FinalizePackage', 'FindClose', 'FindCmdLineSwitch', 'FindFirst',
+ 'FindNext', 'FloatToCurr', 'FloatToDateTime', 'FloatToDecimal',
+ 'FloatToStr', 'FloatToStrF', 'FloatToText', 'FloatToTextFmt',
+ 'FmtLoadStr', 'FmtStr', 'ForceDirectories', 'Format', 'FormatBuf',
+ 'FormatCurr', 'FormatDateTime', 'FormatFloat', 'FreeAndNil',
+ 'GUIDToString', 'GetCurrentDir', 'GetEnvironmentVariable',
+ 'GetFileVersion', 'GetFormatSettings', 'GetLocaleFormatSettings',
+ 'GetModuleName', 'GetPackageDescription', 'GetPackageInfo', 'GetTime',
+ 'IncAMonth', 'IncMonth', 'IncludeTrailingBackslash',
+ 'IncludeTrailingPathDelimiter', 'InitializePackage', 'IntToHex',
+ 'IntToStr', 'InterlockedDecrement', 'InterlockedExchange',
+ 'InterlockedExchangeAdd', 'InterlockedIncrement', 'IsDelimiter',
+ 'IsEqualGUID', 'IsLeapYear', 'IsPathDelimiter', 'IsValidIdent',
+ 'Languages', 'LastDelimiter', 'LoadPackage', 'LoadStr', 'LowerCase',
+ 'MSecsToTimeStamp', 'NewStr', 'NextCharIndex', 'Now', 'OutOfMemoryError',
+ 'QuotedStr', 'RaiseLastOSError', 'RaiseLastWin32Error', 'RemoveDir',
+ 'RenameFile', 'ReplaceDate', 'ReplaceTime', 'SafeLoadLibrary',
+ 'SameFileName', 'SameText', 'SetCurrentDir', 'ShowException', 'Sleep',
+ 'StrAlloc', 'StrBufSize', 'StrByteType', 'StrCat', 'StrCharLength',
+ 'StrComp', 'StrCopy', 'StrDispose', 'StrECopy', 'StrEnd', 'StrFmt',
+ 'StrIComp', 'StrLCat', 'StrLComp', 'StrLCopy', 'StrLFmt', 'StrLIComp',
+ 'StrLen', 'StrLower', 'StrMove', 'StrNew', 'StrNextChar', 'StrPCopy',
+ 'StrPLCopy', 'StrPas', 'StrPos', 'StrRScan', 'StrScan', 'StrToBool',
+ 'StrToBoolDef', 'StrToCurr', 'StrToCurrDef', 'StrToDate', 'StrToDateDef',
+ 'StrToDateTime', 'StrToDateTimeDef', 'StrToFloat', 'StrToFloatDef',
+ 'StrToInt', 'StrToInt64', 'StrToInt64Def', 'StrToIntDef', 'StrToTime',
+ 'StrToTimeDef', 'StrUpper', 'StringReplace', 'StringToGUID', 'Supports',
+ 'SysErrorMessage', 'SystemTimeToDateTime', 'TextToFloat', 'Time',
+ 'TimeStampToDateTime', 'TimeStampToMSecs', 'TimeToStr', 'Trim',
+ 'TrimLeft', 'TrimRight', 'TryEncodeDate', 'TryEncodeTime',
+ 'TryFloatToCurr', 'TryFloatToDateTime', 'TryStrToBool', 'TryStrToCurr',
+ 'TryStrToDate', 'TryStrToDateTime', 'TryStrToFloat', 'TryStrToInt',
+ 'TryStrToInt64', 'TryStrToTime', 'UnloadPackage', 'UpperCase',
+ 'WideCompareStr', 'WideCompareText', 'WideFmtStr', 'WideFormat',
+ 'WideFormatBuf', 'WideLowerCase', 'WideSameStr', 'WideSameText',
+ 'WideUpperCase', 'Win32Check', 'WrapText',
+
+ 'ActivateClassGroup', 'AllocateHwnd', 'BinToHex', 'CheckSynchronize',
+ 'CollectionsEqual', 'CountGenerations', 'DeallocateHwnd', 'EqualRect',
+ 'ExtractStrings', 'FindClass', 'FindGlobalComponent', 'GetClass',
+ 'GroupDescendantsWith', 'HexToBin', 'IdentToInt',
+ 'InitInheritedComponent', 'IntToIdent', 'InvalidPoint',
+ 'IsUniqueGlobalComponentName', 'LineStart', 'ObjectBinaryToText',
+ 'ObjectResourceToText', 'ObjectTextToBinary', 'ObjectTextToResource',
+ 'PointsEqual', 'ReadComponentRes', 'ReadComponentResEx',
+ 'ReadComponentResFile', 'Rect', 'RegisterClass', 'RegisterClassAlias',
+ 'RegisterClasses', 'RegisterComponents', 'RegisterIntegerConsts',
+ 'RegisterNoIcon', 'RegisterNonActiveX', 'SmallPoint', 'StartClassGroup',
+ 'TestStreamFormat', 'UnregisterClass', 'UnregisterClasses',
+ 'UnregisterIntegerConsts', 'UnregisterModuleClasses',
+ 'WriteComponentResFile',
+
+ 'ArcCos', 'ArcCosh', 'ArcCot', 'ArcCotH', 'ArcCsc', 'ArcCscH', 'ArcSec',
+ 'ArcSecH', 'ArcSin', 'ArcSinh', 'ArcTan2', 'ArcTanh', 'Ceil',
+ 'CompareValue', 'Cosecant', 'Cosh', 'Cot', 'CotH', 'Cotan', 'Csc', 'CscH',
+ 'CycleToDeg', 'CycleToGrad', 'CycleToRad', 'DegToCycle', 'DegToGrad',
+ 'DegToRad', 'DivMod', 'DoubleDecliningBalance', 'EnsureRange', 'Floor',
+ 'Frexp', 'FutureValue', 'GetExceptionMask', 'GetPrecisionMode',
+ 'GetRoundMode', 'GradToCycle', 'GradToDeg', 'GradToRad', 'Hypot',
+ 'InRange', 'IntPower', 'InterestPayment', 'InterestRate',
+ 'InternalRateOfReturn', 'IsInfinite', 'IsNan', 'IsZero', 'Ldexp', 'LnXP1',
+ 'Log10', 'Log2', 'LogN', 'Max', 'MaxIntValue', 'MaxValue', 'Mean',
+ 'MeanAndStdDev', 'Min', 'MinIntValue', 'MinValue', 'MomentSkewKurtosis',
+ 'NetPresentValue', 'Norm', 'NumberOfPeriods', 'Payment', 'PeriodPayment',
+ 'Poly', 'PopnStdDev', 'PopnVariance', 'Power', 'PresentValue',
+ 'RadToCycle', 'RadToDeg', 'RadToGrad', 'RandG', 'RandomRange', 'RoundTo',
+ 'SLNDepreciation', 'SYDDepreciation', 'SameValue', 'Sec', 'SecH',
+ 'Secant', 'SetExceptionMask', 'SetPrecisionMode', 'SetRoundMode', 'Sign',
+ 'SimpleRoundTo', 'SinCos', 'Sinh', 'StdDev', 'Sum', 'SumInt',
+ 'SumOfSquares', 'SumsAndSquares', 'Tan', 'Tanh', 'TotalVariance',
+ 'Variance'
+ ),
+ 4 => array(
+ 'AnsiChar', 'AnsiString', 'Bool', 'Boolean', 'Byte', 'ByteBool', 'Cardinal', 'Char',
+ 'Comp', 'Currency', 'DWORD', 'Double', 'Extended', 'Int64', 'Integer', 'IUnknown',
+ 'LongBool', 'LongInt', 'LongWord', 'PAnsiChar', 'PAnsiString', 'PBool', 'PBoolean', 'PByte',
+ 'PByteArray', 'PCardinal', 'PChar', 'PComp', 'PCurrency', 'PDWORD', 'PDate', 'PDateTime',
+ 'PDouble', 'PExtended', 'PInt64', 'PInteger', 'PLongInt', 'PLongWord', 'Pointer', 'PPointer',
+ 'PShortInt', 'PShortString', 'PSingle', 'PSmallInt', 'PString', 'PHandle', 'PVariant', 'PWord',
+ 'PWordArray', 'PWordBool', 'PWideChar', 'PWideString', 'Real', 'Real48', 'ShortInt', 'ShortString',
+ 'Single', 'SmallInt', 'String', 'TClass', 'TDate', 'TDateTime', 'TextFile', 'THandle',
+ 'TObject', 'TTime', 'Variant', 'WideChar', 'WideString', 'Word', 'WordBool'
+ ),
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('(', ')', '[', ']'),
+ 1 => array('.', ',', ':', ';'),
+ 2 => array('@', '^'),
+ 3 => array('=', '+', '-', '*', '/')
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #000066; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #008000; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #ff0000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #9ac;',
+ 1 => 'color: #ff0000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066;',
+ 1 => 'color: #000066;',
+ 2 => 'color: #000066;',
+ 3 => 'color: #000066;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers
+ 0 => '\$[0-9a-fA-F]+',
+ //Characters
+ 1 => '\#(?:\$[0-9a-fA-F]{1,2}|\d{1,3})'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 2
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php
new file mode 100644
index 000000000..b4703c1d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php
@@ -0,0 +1,196 @@
+<?php
+/*************************************************************************************
+ * diff.php
+ * --------
+ * Author: Conny Brunnkvist (conny@fuchsia.se), W. Tasin (tasin@fhm.edu)
+ * Copyright: (c) 2004 Fuchsia Open Source Solutions (http://www.fuchsia.se/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/12/29
+ *
+ * Diff-output language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/02/27
+ * - changing language file to use matching of start (^) and end ($) (wt)
+ * 2004/12/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/02/27)
+ * -------------------------
+ *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+
+$language_data = array (
+ 'LANG_NAME' => 'Diff',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => ' ',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '\ No newline at end of file'
+ ),
+// 2 => array(
+// '***************' /* This only seems to works in some cases? */
+// ),
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ 1 => false,
+// 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #aaaaaa; font-style: italic;',
+// 2 => 'color: #dd6611;',
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => ''
+ ),
+ 'STRINGS' => array(
+ 0 => ''
+ ),
+ 'NUMBERS' => array(
+ 0 => ''
+ ),
+ 'METHODS' => array(
+ 0 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => ''
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #440088;',
+ 1 => 'color: #991111;',
+ 2 => 'color: #00b000;',
+ 3 => 'color: #888822;',
+ 4 => 'color: #888822;',
+ 5 => 'color: #0011dd;',
+ 6 => 'color: #440088;',
+ 7 => 'color: #991111;',
+ 8 => 'color: #00b000;',
+ 9 => 'color: #888822;',
+ ),
+ ),
+ 'URLS' => array(
+ 1 => '',
+// 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ 0 => "[0-9,]+[acd][0-9,]+",
+ //Removed lines
+ 1 => array(
+ GESHI_SEARCH => '^\\&lt;.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Inserted lines
+ 2 => array(
+ GESHI_SEARCH => '^\\&gt;.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Location line
+ 3 => array(
+ GESHI_SEARCH => '^[\\-]{3}\\s.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Inserted line
+ 4 => array(
+ GESHI_SEARCH => '^(\\+){3}\\s.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Modified line
+ 5 => array(
+ GESHI_SEARCH => '^\\!.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //File specification
+ 6 => array(
+ GESHI_SEARCH => '^[\\@]{2}.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Removed line
+ 7 => array(
+ GESHI_SEARCH => '^\\-.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //Inserted line
+ 8 => array(
+ GESHI_SEARCH => '^\\+.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ //File specification
+ 9 => array(
+ GESHI_SEARCH => '^(\\*){3}\\s.*$',
+ GESHI_REPLACE => '\\0',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php
new file mode 100644
index 000000000..0e249740c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php
@@ -0,0 +1,126 @@
+<?php
+/*************************************************************************************
+ * div.php
+ * ---------------------------------
+ * Author: Gabriel Lorenzo (ermakina@gmail.com)
+ * Copyright: (c) 2005 Gabriel Lorenzo (http://ermakina.gazpachito.net)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/06/19
+ *
+ * DIV language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/06/22 (1.0.0)
+ * - First Release, includes "2nd gen" ELSEIF statement
+ *
+ * TODO (updated 2005/06/22)
+ * -------------------------
+ * - I'm pretty satisfied with this, so nothing for now... :P
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'DIV',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'while','until','to','switch','step','return','repeat','loop','if','from','frame','for','end','elseif',
+ 'else','default','debug','continue','clone','case','break','begin'
+ ),
+ 2 => array(
+ 'xor','whoami','type','sizeof','pointer','or','offset','not','neg','mod','id','dup','and','_ne','_lt',
+ '_le','_gt','_ge','_eq'
+ ),
+ 3 => array(
+ 'setup_program','program','process','private','local','import','global','function','const',
+ 'compiler_options'
+ ),
+ 4 => array(
+ 'word','struct','string','int','byte'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(',')','[',']','=','+','-','*','/','!','%','^','&',':',';',',','<','>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0040b1;',
+ 2 => 'color: #000000;',
+ 3 => 'color: #000066; font-weight: bold;',
+ 4 => 'color: #993333;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #44aa44;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #202020;',
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #44aa44;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php
new file mode 100644
index 000000000..bec3de129
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php
@@ -0,0 +1,198 @@
+<?php
+/*************************************************************************************
+ * dos.php
+ * -------
+ * Author: Alessandro Staltari (staltari@geocities.com)
+ * Copyright: (c) 2005 Alessandro Staltari (http://www.geocities.com/SiliconValley/Vista/8155/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/07/05
+ *
+ * DOS language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2005/07/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/07/05)
+ * -------------------------
+ *
+ * - Highlight pipes and redirection (do we really need this?)
+ * - Add missing keywords.
+ * - Find a good hyperlink for keywords.
+ * - Improve styles.
+ *
+ * KNOWN ISSUES (updated 2005/07/07)
+ * ---------------------------------
+ *
+ * - Doesn't even try to handle spaces in variables name or labels (I can't
+ * find a reliable way to establish if a sting is a name or not, in some
+ * cases it depends on the contex or enviroment status).
+ * - Doesn't handle %%[letter] pseudo variable used inside FOR constructs
+ * (it should be done only into its scope: how to handle variable it?).
+ * - Doesn't handle %~[something] pseudo arguments.
+ * - If the same keyword is placed at the end of the line and the
+ * beginning of the next, the second occourrence is not highlighted
+ * (this should be a GeSHi bug, not related to the language definition).
+ * - I can't avoid to have keyword highlighted even when they are not used
+ * as keywords but, for example, as arguments to the echo command.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'DOS',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ //DOS comment lines
+ 'COMMENT_REGEXP' => array(1 => "/^\s*@?REM.*$/mi"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /* Flow control keywords */
+ 1 => array(
+ 'if', 'else', 'goto', 'shift',
+ 'for', 'in', 'do',
+ 'call', 'exit'
+ ),
+ /* IF statement keywords */
+ 2 => array(
+ 'not', 'exist', 'errorlevel',
+ 'defined',
+ 'equ', 'neq', 'lss', 'leq', 'gtr', 'geq'
+ ),
+ /* Internal commands */
+ 3 => array(
+ 'cd', 'md', 'rd', 'chdir', 'mkdir', 'rmdir', 'dir',
+ 'del', 'copy', 'move', 'ren', 'rename',
+ 'echo',
+ 'setlocal', 'endlocal', 'set',
+ 'pause',
+ 'pushd', 'popd', 'title', 'verify'
+ ),
+ /* Special files */
+ 4 => array(
+ 'prn', 'nul', 'lpt3', 'lpt2', 'lpt1', 'con',
+ 'com4', 'com3', 'com2', 'com1', 'aux'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '@', '%'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00b100; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #b1b100; font-weight: bold;',
+ 4 => 'color: #0000ff; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #ff0000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #33cc33;',
+ 1 => 'color: #33cc33;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #b100b1; font-weight: bold;',
+ 1 => 'color: #448844;',
+ 2 => 'color: #448888;'
+ )
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.ss64.com/nt/{FNAMEL}.html',
+ 2 => 'http://www.ss64.com/nt/{FNAMEL}.html',
+ 3 => 'http://www.ss64.com/nt/{FNAMEL}.html',
+ 4 => 'http://www.ss64.com/nt/{FNAMEL}.html'
+ ),
+ 'REGEXPS' => array(
+ /* Label */
+ 0 => array(
+/* GESHI_SEARCH => '((?si:[@\s]+GOTO\s+|\s+:)[\s]*)((?<!\n)[^\s\n]*)',*/
+ GESHI_SEARCH => '((?si:[@\s]+GOTO\s+|\s+:)[\s]*)((?<!\n)[^\n]*)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'si',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ /* Variable assignement */
+ 1 => array(
+/* GESHI_SEARCH => '(SET[\s]+(?si:\/A[\s]+|\/P[\s]+|))([^=\s\n]+)([\s]*=)',*/
+ GESHI_SEARCH => '(SET[\s]+(?si:\/A[\s]+|\/P[\s]+|))([^=\n]+)([\s]*=)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'si',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ /* Arguments or variable evaluation */
+ 2 => array(
+/* GESHI_SEARCH => '(%)([\d*]|[^%\s]*(?=%))((?<!%\d)%|)',*/
+ GESHI_SEARCH => '(%(?:%(?=[a-z0-9]))?)([\d*]|(?:~[adfnpstxz]*(?:$\w+:)?)?[a-z0-9](?!\w)|[^%\n]*(?=%))((?<!%\d)%|)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'si',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 4 => array(
+ 'DISALLOWED_BEFORE' => '(?<!\w)'
+ )
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php
new file mode 100644
index 000000000..c45a74af7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php
@@ -0,0 +1,164 @@
+<?php
+/*************************************************************************************
+ * dot.php
+ * ---------------------------------
+ * Author: Adrien Friggeri (adrien@friggeri.net)
+ * Copyright: (c) 2007 Adrien Friggeri (http://www.friggeri.net)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/05/30
+ *
+ * dot language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2007/05/30 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2007/05/30)
+ * -------------------------
+ * Everything
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'dot',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'URL', 'arrowhead', 'arrowsize', 'arrowtail', 'bb', 'bgcolor', 'bottomlabel',
+ 'center', 'clusterrank', 'color', 'comment', 'constraint', 'decorate',
+ 'dir', 'distortion', 'fillcolor', 'fixedsize', 'fontcolor',
+ 'fontname', 'fontsize', 'group', 'headclip', 'headlabel', 'headport',
+ 'height', 'id', 'label', 'labelangle', 'labeldistance', 'labelfontcolor',
+ 'labelfontname', 'labelfontsize', 'layer', 'layers', 'margin', 'mclimit',
+ 'minlen', 'nodesep', 'nslimit', 'ordering', 'orientation', 'page',
+ 'pagedir', 'peripheries', 'port_label_distance', 'quantum', 'rank', 'rankdir',
+ 'ranksep', 'ratio', 'regular', 'rotate', 'samehead', 'sametail', 'searchsize',
+ 'shape', 'shapefile', 'showboxes', 'sides', 'size', 'skew', 'style',
+ 'tailclip', 'taillabel', 'tailport', 'toplabel', 'weight', 'width'
+ ),
+ 2 => array(
+ 'node', 'graph', 'digraph', 'strict', 'edge', 'subgraph'
+ ),
+ 3 => array(
+ 'Mcircle', 'Mdiamond', 'Mrecord', 'Msquare', 'TRUE', 'auto', 'back',
+ 'bold', 'both', 'box', 'circle', 'compress', 'dashed', 'diamond', 'dot',
+ 'dotted', 'doublecircle', 'doubleoctagon', 'egg', 'ellipse', 'epsf', 'false',
+ 'fill', 'filled', 'forward', 'global', 'hexagon', 'house', 'inv', 'invdot',
+ 'invhouse', 'invis', 'invodot', 'invtrapezium', 'invtriangle', 'local', 'max',
+ 'min', 'none', 'normal', 'octagon', 'odot', 'out', 'parallelogram', 'plaintext',
+ 'polygon', 'record', 'same', 'solid', 'trapezium', 'triangle', 'tripleoctagon',
+ 'true'
+ ),
+ 4 => array(
+ 'aliceblue', 'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'black',
+ 'blanchedalmond', 'blue', 'blueviolet', 'brown', 'burlywood', 'cadetblue',
+ 'chartreuse', 'chocolate', 'coral', 'cornflowerblue', 'cornsilk', 'crimson',
+ 'cyan', 'darkgoldenrod', 'darkgreen', 'darkkhaki', 'darkolivegreen',
+ 'darkorange', 'darkorchid', 'darksalmon', 'darkseagreen', 'darkslateblue',
+ 'darkslategray', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue',
+ 'dimgray', 'dodgerblue', 'firebrick', 'forestgreen', 'gainsboro', 'ghostwhite',
+ 'gold', 'goldenrod', 'gray', 'green', 'greenyellow', 'honeydew', 'hotpink',
+ 'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush',
+ 'lawngreen', 'lemonchiffon', 'lightblue', 'lightcyan', 'lightgoldenrod',
+ 'lightgoldenrodyellow', 'lightgray', 'lightpink', 'lightsalmon',
+ 'lightseagreen', 'lightskyblue', 'lightslateblue', 'lightslategray',
+ 'lightyellow', 'limegreen', 'linen', 'magenta', 'maroon', 'mediumaquamarine',
+ 'mediumblue', 'mediumorchid', 'mediumpurple', 'mediumseagreen',
+ 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise', 'mediumvioletred',
+ 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite', 'navy',
+ 'navyblue', 'oldlace', 'olivedrab', 'oralwhite', 'orange', 'orangered',
+ 'orchid', 'palegoldenrod', 'palegreen', 'paleturquoise', 'palevioletred',
+ 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum', 'powderblue', 'purple',
+ 'red', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'salmon2', 'sandybrown',
+ 'seagreen', 'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'snow',
+ 'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet',
+ 'violetred', 'wheat', 'white', 'whitesmoke', 'yellow', 'yellowgreen'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '{', '}', '-', '+', '*', '/', '<', '>', '!', '~', '%', '&', '|', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000066;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #993333;',
+ 4 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #339933;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #af624d; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php
new file mode 100644
index 000000000..ab7abf974
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php
@@ -0,0 +1,395 @@
+<?php
+/*************************************************************************************
+ * eiffel.php
+ * ----------
+ * Author: Zoran Simic (zsimic@axarosenberg.com)
+ * Copyright: (c) 2005 Zoran Simic
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/06/30
+ *
+ * Eiffel language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/06/30 (1.0.7)
+ * - Initial release
+ *
+ * TODO (updated 2005/06/30)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Eiffel',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '%',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'separate',
+ 'invariant',
+ 'inherit',
+ 'indexing',
+ 'feature',
+ 'expanded',
+ 'deferred',
+ 'class'
+ ),
+ 2 => array(
+ 'xor',
+ 'when',
+ 'variant',
+ 'until',
+ 'unique',
+ 'undefine',
+ 'then',
+ 'strip',
+ 'select',
+ 'retry',
+ 'rescue',
+ 'require',
+ 'rename',
+ 'reference',
+ 'redefine',
+ 'prefix',
+ 'or',
+ 'once',
+ 'old',
+ 'obsolete',
+ 'not',
+ 'loop',
+ 'local',
+ 'like',
+ 'is',
+ 'inspect',
+ 'infix',
+ 'include',
+ 'implies',
+ 'if',
+ 'frozen',
+ 'from',
+ 'external',
+ 'export',
+ 'ensure',
+ 'end',
+ 'elseif',
+ 'else',
+ 'do',
+ 'creation',
+ 'create',
+ 'check',
+ 'as',
+ 'and',
+ 'alias',
+ 'agent'
+ ),
+ 3 => array(
+ 'Void',
+ 'True',
+ 'Result',
+ 'Precursor',
+ 'False',
+ 'Current'
+ ),
+ 4 => array(
+ 'UNIX_SIGNALS',
+ 'UNIX_FILE_INFO',
+ 'UNBOUNDED',
+ 'TWO_WAY_TREE_CURSOR',
+ 'TWO_WAY_TREE',
+ 'TWO_WAY_SORTED_SET',
+ 'TWO_WAY_LIST',
+ 'TWO_WAY_CURSOR_TREE',
+ 'TWO_WAY_CIRCULAR',
+ 'TWO_WAY_CHAIN_ITERATOR',
+ 'TUPLE',
+ 'TREE',
+ 'TRAVERSABLE',
+ 'TO_SPECIAL',
+ 'THREAD_CONTROL',
+ 'THREAD_ATTRIBUTES',
+ 'THREAD',
+ 'TABLE',
+ 'SUBSET',
+ 'STRING_HANDLER',
+ 'STRING',
+ 'STREAM',
+ 'STORABLE',
+ 'STD_FILES',
+ 'STACK',
+ 'SPECIAL',
+ 'SORTED_TWO_WAY_LIST',
+ 'SORTED_STRUCT',
+ 'SORTED_LIST',
+ 'SINGLE_MATH',
+ 'SET',
+ 'SEQUENCE',
+ 'SEQ_STRING',
+ 'SEMAPHORE',
+ 'ROUTINE',
+ 'RESIZABLE',
+ 'RECURSIVE_TREE_CURSOR',
+ 'RECURSIVE_CURSOR_TREE',
+ 'REAL_REF',
+ 'REAL',
+ 'RAW_FILE',
+ 'RANDOM',
+ 'QUEUE',
+ 'PROXY',
+ 'PROFILING_SETTING',
+ 'PROCEDURE',
+ 'PRIORITY_QUEUE',
+ 'PRIMES',
+ 'PRECOMP',
+ 'POINTER_REF',
+ 'POINTER',
+ 'PLATFORM',
+ 'PLAIN_TEXT_FILE',
+ 'PATH_NAME',
+ 'PART_SORTED_TWO_WAY_LIST',
+ 'PART_SORTED_SET',
+ 'PART_SORTED_LIST',
+ 'PART_COMPARABLE',
+ 'OPERATING_ENVIRONMENT',
+ 'ONCE_CONTROL',
+ 'OBJECT_OWNER',
+ 'OBJECT_CONTROL',
+ 'NUMERIC',
+ 'NONE',
+ 'MUTEX',
+ 'MULTI_ARRAY_LIST',
+ 'MULTAR_LIST_CURSOR',
+ 'MEMORY',
+ 'MEM_INFO',
+ 'MEM_CONST',
+ 'MATH_CONST',
+ 'LIST',
+ 'LINKED_TREE_CURSOR',
+ 'LINKED_TREE',
+ 'LINKED_STACK',
+ 'LINKED_SET',
+ 'LINKED_QUEUE',
+ 'LINKED_PRIORITY_QUEUE',
+ 'LINKED_LIST_CURSOR',
+ 'LINKED_LIST',
+ 'LINKED_CURSOR_TREE',
+ 'LINKED_CIRCULAR',
+ 'LINKABLE',
+ 'LINEAR_ITERATOR',
+ 'LINEAR',
+ 'ITERATOR',
+ 'IO_MEDIUM',
+ 'INTERNAL',
+ 'INTEGER_REF',
+ 'INTEGER_INTERVAL',
+ 'INTEGER',
+ 'INFINITE',
+ 'INDEXABLE',
+ 'IDENTIFIED_CONTROLLER',
+ 'IDENTIFIED',
+ 'HIERARCHICAL',
+ 'HEAP_PRIORITY_QUEUE',
+ 'HASHABLE',
+ 'HASH_TABLE_CURSOR',
+ 'HASH_TABLE',
+ 'GENERAL',
+ 'GC_INFO',
+ 'FUNCTION',
+ 'FORMAT_INTEGER',
+ 'FORMAT_DOUBLE',
+ 'FIXED_TREE',
+ 'FIXED_LIST',
+ 'FIXED',
+ 'FINITE',
+ 'FILE_NAME',
+ 'FILE',
+ 'FIBONACCI',
+ 'EXECUTION_ENVIRONMENT',
+ 'EXCEPTIONS',
+ 'EXCEP_CONST',
+ 'DYNAMIC_TREE',
+ 'DYNAMIC_LIST',
+ 'DYNAMIC_CIRCULAR',
+ 'DYNAMIC_CHAIN',
+ 'DOUBLE_REF',
+ 'DOUBLE_MATH',
+ 'DOUBLE',
+ 'DISPENSER',
+ 'DIRECTORY_NAME',
+ 'DIRECTORY',
+ 'DECLARATOR',
+ 'DEBUG_OUTPUT',
+ 'CURSOR_TREE_ITERATOR',
+ 'CURSOR_TREE',
+ 'CURSOR_STRUCTURE',
+ 'CURSOR',
+ 'COUNTABLE_SEQUENCE',
+ 'COUNTABLE',
+ 'CONTAINER',
+ 'CONSOLE',
+ 'CONDITION_VARIABLE',
+ 'COMPARABLE_STRUCT',
+ 'COMPARABLE_SET',
+ 'COMPARABLE',
+ 'COMPACT_TREE_CURSOR',
+ 'COMPACT_CURSOR_TREE',
+ 'COLLECTION',
+ 'CIRCULAR_CURSOR',
+ 'CIRCULAR',
+ 'CHARACTER_REF',
+ 'CHARACTER',
+ 'CHAIN',
+ 'CELL',
+ 'BOX',
+ 'BOUNDED_STACK',
+ 'BOUNDED_QUEUE',
+ 'BOUNDED',
+ 'BOOLEAN_REF',
+ 'BOOLEAN',
+ 'BOOL_STRING',
+ 'BIT_REF',
+ 'BINARY_TREE',
+ 'BINARY_SEARCH_TREE_SET',
+ 'BINARY_SEARCH_TREE',
+ 'BILINEAR',
+ 'BI_LINKABLE',
+ 'BASIC_ROUTINES',
+ 'BAG',
+ 'ASCII',
+ 'ARRAYED_TREE',
+ 'ARRAYED_STACK',
+ 'ARRAYED_QUEUE',
+ 'ARRAYED_LIST_CURSOR',
+ 'ARRAYED_LIST',
+ 'ARRAYED_CIRCULAR',
+ 'ARRAY2',
+ 'ARRAY',
+ 'ARGUMENTS',
+ 'ANY',
+ 'ACTIVE'
+ ),
+ 5 => array(
+ 'yes',
+ 'visible',
+ 'trace',
+ 'system',
+ 'root',
+ 'profile',
+ 'override_cluster',
+ 'object',
+ 'no',
+ 'multithreaded',
+ 'msil_generation_type',
+ 'line_generation',
+ 'library',
+ 'inlining_size',
+ 'inlining',
+ 'include_path',
+ 'il_verifiable',
+ 'exclude',
+ 'exception_trace',
+ 'dynamic_runtime',
+ 'dotnet_naming_convention',
+ 'disabled_debug',
+ 'default',
+ 'debug',
+ 'dead_code_removal',
+ 'console_application',
+ 'cluster',
+ 'cls_compliant',
+ 'check_vape',
+ 'assertion',
+ 'array_optimization',
+ 'all',
+ 'address_expression'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '+', '-', '*', '?', '=', '/', '%', '&', '>', '<', '^', '!', '|', ':',
+ '(', ')', '{', '}', '[', ']', '#'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => true,
+ 5 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF; font-weight: bold;',
+ 2 => 'color: #0600FF; font-weight: bold;',
+ 3 => 'color: #800080;',
+ 4 => 'color: #800000',
+ 5 => 'color: #603000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000; font-style: italic;',
+ 'MULTI' => ''
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #005070; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0080A0;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #000060;',
+ 2 => 'color: #000050;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #600000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => 'http://www.google.com/search?q=site%3Ahttp%3A%2F%2Fdocs.eiffel.com%2Feiffelstudio%2Flibraries+{FNAMEL}&amp;btnI=I%27m+Feeling+Lucky',
+ 5 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php
new file mode 100644
index 000000000..a0a744c6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php
@@ -0,0 +1,209 @@
+<?php
+/*************************************************************************************
+ * email.php
+ * ---------------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/10/19
+ *
+ * Email (mbox \ eml \ RFC format) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/19 (1.0.8.1)
+ * - First Release
+ *
+ * TODO (updated 2008/10/19)
+ * -------------------------
+ * * Better checks when a header field should be expected
+ * * Fix the bound checks for kw groups 2 and 3, as well as rx group 1
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'eMail (mbox)',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'HTTP', 'SMTP', 'ASMTP', 'ESMTP'
+ ),
+ 2 => array(
+ 'Content-Type','Content-Transfer-Encoding','Content-Disposition',
+ 'Delivered-To','Dkim-Signature','Domainkey-Signature','In-Reply-To',
+ 'Message-Id','MIME-Version','Received','Received-SPF','References',
+ 'Resend-From','Resend-To','Return-Path'
+ ),
+ 3 => array(
+ 'Date','From','Subject','To',
+ ),
+ 4 => array(
+ 'by', 'for', 'from', 'id', 'with'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ':', ';', '<', '>', '[', ']'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => false,
+ 3 => false,
+ 4 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #800000; font-weight: bold;',
+ 4 => 'font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ 0 => 'color: #000040;',
+ ),
+ 'REGEXPS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #0000FF;',
+ 3 => 'color: #008000;',
+ 4 => 'color: #0000FF; font-weight: bold;',
+ 5 => 'font-weight: bold;',
+ 6 => 'color: #400080;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // Non-Standard-Header
+ 1 => array(
+ GESHI_SEARCH => "(?<=\A\x20|\n)x-[a-z0-9\-]*(?=\s*:|\s*<)",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "smi",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ //Email-Adresses or Mail-IDs
+ 2 => array(
+ GESHI_SEARCH => "\b[\w\.]+@\w+(?:(?:\.\w+)*\.\w{2,4})?",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "mi",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ //Date values in RFC format
+ 3 => array(
+ GESHI_SEARCH => "\b(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s+\d\d?\s+" .
+ "(?:Jan|Feb|Mar|apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+" .
+ "\d{4}\s+\d\d?:\d\d:\d\d\s+[+\-]\d{4}(?:\s+\(\w+\))?",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "mi",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ //IP addresses
+ 4 => array(
+ GESHI_SEARCH => "(?<=\s)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=\s)|".
+ "(?<=\[)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=\])|".
+ "(?<==)\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}(?=<)",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "i",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ //Field-Assignments
+ 5 => array(
+ GESHI_SEARCH => "(?<=\s)[A-Z0-9\-]+(?==(?!\s|$))",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "mi",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ //MIME type
+ 6 => array(
+ GESHI_SEARCH => "(?<=\s)(?:audio|application|image|multipart|text|".
+ "video|x-[a-z0-9\-]+)\/[a-z0-9][a-z0-9\-]*(?=\s|<|$)",
+ GESHI_REPLACE => "\\0",
+ GESHI_MODIFIERS => "m",
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => "/(?<start>^)[A-Z][a-zA-Z0-9\-]*\s*:\s*(?:.|(?=\n\s)\n)*(?<end>$)/m"
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 2 => array(
+ 'DISALLOWED_BEFORE' => '(?<=\A\x20|\n)',
+ 'DISALLOWED_AFTER' => '(?=\s*:)',
+ ),
+ 3 => array(
+ 'DISALLOWED_BEFORE' => '(?<=\A\x20|\n)',
+ 'DISALLOWED_AFTER' => '(?=\s*:)',
+ ),
+ 4 => array(
+ 'DISALLOWED_BEFORE' => '(?<=\s)',
+ 'DISALLOWED_AFTER' => '(?=\s|\b)',
+ )
+ ),
+ 'ENABLE_FLAGS' => array(
+ 'BRACKETS' => GESHI_NEVER,
+ 'COMMENTS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php
new file mode 100644
index 000000000..26dc9b19d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php
@@ -0,0 +1,160 @@
+<?php
+/*************************************************************************************
+ * fortran.php
+ * -----------
+ * Author: Cedric Arrabie (cedric.arrabie@univ-pau.fr)
+ * Copyright: (C) 2006 Cetric Arrabie
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/04/22
+ *
+ * Fortran language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/04/20 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ * - Get a list of inbuilt functions to add (and explore fortran more
+ * to complete this rather bare language file)
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME'=>'Fortran',
+ 'COMMENT_SINGLE'=> array(1 =>'!',2=>'Cf2py'),
+ 'COMMENT_MULTI'=> array(),
+ //Fortran Comments
+ 'COMMENT_REGEXP' => array(1 => '/^C.*?$/mi'),
+ 'CASE_KEYWORDS'=> GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS'=> array("'",'"'),
+ 'ESCAPE_CHAR'=>'\\',
+ 'KEYWORDS'=> array(
+ 1 => array(
+ 'allocate','block','call','case','contains','continue','cycle','deallocate',
+ 'default','do','else','elseif','elsewhere','end','enddo','endif','endwhere',
+ 'entry','exit','function','go','goto','if','interface','module','nullify','only',
+ 'operator','procedure','program','recursive','return','select','stop',
+ 'subroutine','then','to','where','while',
+ 'access','action','advance','blank','blocksize','carriagecontrol',
+ 'delim','direct','eor','err','exist','file','flen','fmt','form','formatted',
+ 'iostat','name','named','nextrec','nml','number','opened','pad','position',
+ 'readwrite','recl','sequential','status','unformatted','unit'
+ ),
+ 2 => array(
+ '.AND.','.EQ.','.EQV.','.GE.','.GT.','.LE.','.LT.','.NE.','.NEQV.','.NOT.',
+ '.OR.','.TRUE.','.FALSE.'
+ ),
+ 3 => array(
+ 'allocatable','character','common','complex','data','dimension','double',
+ 'equivalence','external','implicit','in','inout','integer','intent','intrinsic',
+ 'kind','logical','namelist','none','optional','out','parameter','pointer',
+ 'private','public','real','result','save','sequence','target','type','use'
+ ),
+ 4 => array(
+ 'abs','achar','acos','adjustl','adjustr','aimag','aint','all','allocated',
+ 'anint','any','asin','atan','atan2','bit_size','break','btest','carg',
+ 'ceiling','char','cmplx','conjg','cos','cosh','cpu_time','count','cshift',
+ 'date_and_time','dble','digits','dim','dot_product','dprod dvchk',
+ 'eoshift','epsilon','error','exp','exponent','floor','flush','fraction',
+ 'getcl','huge','iachar','iand','ibclr','ibits','ibset','ichar','ieor','index',
+ 'int','intrup','invalop','ior','iostat_msg','ishft','ishftc','lbound',
+ 'len','len_trim','lge','lgt','lle','llt','log','log10','matmul','max','maxexponent',
+ 'maxloc','maxval','merge','min','minexponent','minloc','minval','mod','modulo',
+ 'mvbits','nbreak','ndperr','ndpexc','nearest','nint','not','offset','ovefl',
+ 'pack','precfill','precision','present','product','prompt','radix',
+ 'random_number','random_seed','range','repeat','reshape','rrspacing',
+ 'scale','scan','segment','selected_int_kind','selected_real_kind',
+ 'set_exponent','shape','sign','sin','sinh','size','spacing','spread','sqrt',
+ 'sum system','system_clock','tan','tanh','timer','tiny','transfer','transpose',
+ 'trim','ubound','undfl','unpack','val','verify'
+ ),
+ ),
+ 'SYMBOLS'=> array(
+ '(',')','{','}','[',']','=','+','-','*','/','!','%','^','&',':'
+ ),
+ 'CASE_SENSITIVE'=> array(
+ GESHI_COMMENTS => true,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES'=> array(
+ 'KEYWORDS'=> array(
+ 1 =>'color: #b1b100;',
+ 2 =>'color: #000000; font-weight: bold;',
+ 3 =>'color: #000066;',
+ 4 =>'color: #993333;'
+ ),
+ 'COMMENTS'=> array(
+ 1 =>'color: #666666; font-style: italic;',
+ 2 =>'color: #339933;',
+ 'MULTI'=>'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR'=> array(
+ 0 =>'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS'=> array(
+ 0 =>'color: #009900;'
+ ),
+ 'STRINGS'=> array(
+ 0 =>'color: #ff0000;'
+ ),
+ 'NUMBERS'=> array(
+ 0 =>'color: #cc66cc;'
+ ),
+ 'METHODS'=> array(
+ 1 =>'color: #202020;',
+ 2 =>'color: #202020;'
+ ),
+ 'SYMBOLS'=> array(
+ 0 =>'color: #339933;'
+ ),
+ 'REGEXPS'=> array(
+ ),
+ 'SCRIPT'=> array(
+ )
+ ),
+ 'URLS'=> array(
+ 1 =>'',
+ 2 =>'',
+ 3 =>'',
+ 4 =>''
+ ),
+ 'OOLANG'=> true,
+ 'OBJECT_SPLITTERS'=> array(
+ 1 =>'.',
+ 2 =>'::'
+ ),
+ 'REGEXPS'=> array(
+ ),
+ 'STRICT_MODE_APPLIES'=> GESHI_NEVER,
+ 'SCRIPT_DELIMITERS'=> array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK'=> array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php
new file mode 100644
index 000000000..780305ba3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php
@@ -0,0 +1,141 @@
+<?php
+/*************************************************************************************
+ * freebasic.php
+ * -------------
+ * Author: Roberto Rossi
+ * Copyright: (c) 2005 Roberto Rossi (http://rsoftware.altervista.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/08/19
+ *
+ * FreeBasic (http://www.freebasic.net/) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/19 (1.0.0)
+ * - First Release
+ *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'FreeBasic',
+ 'COMMENT_SINGLE' => array(1 => "'", 2 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ "append", "as", "asc", "asin", "asm", "atan2", "atn", "beep", "bin", "binary", "bit",
+ "bitreset", "bitset", "bload", "bsave", "byref", "byte", "byval", "call",
+ "callocate", "case", "cbyte", "cdbl", "cdecl", "chain", "chdir", "chr", "cint",
+ "circle", "clear", "clng", "clngint", "close", "cls", "color", "command",
+ "common", "cons", "const", "continue", "cos", "cshort", "csign", "csng",
+ "csrlin", "cubyte", "cuint", "culngint", "cunsg", "curdir", "cushort", "custom",
+ "cvd", "cvi", "cvl", "cvlongint", "cvs", "cvshort", "data", "date",
+ "deallocate", "declare", "defbyte", "defdbl", "defined", "defint", "deflng",
+ "deflngint", "defshort", "defsng", "defstr", "defubyte", "defuint",
+ "defulngint", "defushort", "dim", "dir", "do", "double", "draw", "dylibload",
+ "dylibsymbol", "else", "elseif", "end", "enum", "environ", 'environ$', "eof",
+ "eqv", "erase", "err", "error", "exec", "exepath", "exit", "exp", "export",
+ "extern", "field", "fix", "flip", "for", "fre", "freefile", "function", "get",
+ "getjoystick", "getkey", "getmouse", "gosub", "goto", "hex", "hibyte", "hiword",
+ "if", "iif", "imagecreate", "imagedestroy", "imp", "inkey", "inp", "input",
+ "instr", "int", "integer", "is", "kill", "lbound", "lcase", "left", "len",
+ "let", "lib", "line", "lobyte", "loc", "local", "locate", "lock", "lof", "log",
+ "long", "longint", "loop", "loword", "lset", "ltrim", "mid", "mkd", "mkdir",
+ "mki", "mkl", "mklongint", "mks", "mkshort", "mod", "multikey", "mutexcreate",
+ "mutexdestroy", "mutexlock", "mutexunlock", "name", "next", "not", "oct", "on",
+ "once", "open", "option", "or", "out", "output", "overload", "paint", "palette",
+ "pascal", "pcopy", "peek", "peeki", "peeks", "pipe", "pmap", "point", "pointer",
+ "poke", "pokei", "pokes", "pos", "preserve", "preset", "print", "private",
+ "procptr", "pset", "ptr", "public", "put", "random", "randomize", "read",
+ "reallocate", "redim", "rem", "reset", "restore", "resume",
+ "return", "rgb", "rgba", "right", "rmdir", "rnd", "rset", "rtrim", "run",
+ "sadd", "screen", "screencopy", "screeninfo", "screenlock", "screenptr",
+ "screenres", "screenset", "screensync", "screenunlock", "seek", "statement",
+ "selectcase", "setdate", "setenviron", "setmouse",
+ "settime", "sgn", "shared", "shell", "shl", "short", "shr", "sin", "single",
+ "sizeof", "sleep", "space", "spc", "sqr", "static", "stdcall", "step", "stop",
+ "str", "string", "strptr", "sub", "swap", "system", "tab", "tan",
+ "then", "threadcreate", "threadwait", "time", "timer", "to", "trans",
+ "trim", "type", "ubound", "ubyte", "ucase", "uinteger", "ulongint", "union",
+ "unlock", "unsigned", "until", "ushort", "using", "va_arg", "va_first",
+ "va_next", "val", "val64", "valint", "varptr", "view", "viewprint", "wait",
+ "wend", "while", "width", "window", "windowtitle", "with", "write", "xor",
+ "zstring", "explicit", "escape", "true", "false"
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080;',
+ 2 => 'color: #339933;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php
new file mode 100644
index 000000000..1e3d7efb6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php
@@ -0,0 +1,463 @@
+<?php
+/*************************************************************************************
+ * genero.php
+ * ----------
+ * Author: Lars Gersmann (lars.gersmann@gmail.com)
+ * Copyright: (c) 2007 Lars Gersmann, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/07/01
+ *
+ * Genero (FOURJ's Genero 4GL) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2007/07/01 (1.0.0)
+ * - Initial release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'genero',
+ 'COMMENT_SINGLE' => array(1 => '--', 2 => '#'),
+ 'COMMENT_MULTI' => array('{' => '}'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ "ABSOLUTE",
+ "ACCEPT",
+ "ACTION",
+ "ADD",
+ "AFTER",
+ "ALL",
+ "ALTER",
+ "AND",
+ "ANY",
+ "APPEND",
+ "APPLICATION",
+ "AS",
+ "AT",
+ "ATTRIBUTE",
+ "ATTRIBUTES",
+ "AUDIT",
+ "AVG",
+ "BEFORE",
+ "BEGIN",
+ "BETWEEN",
+ "BORDER",
+ "BOTTOM",
+ "BREAKPOINT",
+ "BUFFER",
+ "BUFFERED",
+ "BY",
+ "CALL",
+ "CANCEL",
+ "CASE",
+ "CENTURY",
+ "CHANGE",
+ "CHECK",
+ "CLEAR",
+ "CLIPPED",
+ "CLOSE",
+ "CLUSTER",
+ "COLUMN",
+ "COLUMNS",
+ "COMMAND",
+ "COMMENT",
+ "COMMIT",
+ "COMMITTED",
+ "CONCURRENT ",
+ "CONNECT",
+ "CONNECTION",
+ "CONSTANT",
+ "CONSTRAINED",
+ "CONSTRAINT",
+ "CONSTRUCT",
+ "CONTINUE",
+ "CONTROL",
+ "COUNT",
+ "CREATE",
+ "CROSS",
+ "CURRENT",
+ "DATABASE",
+ "DBA",
+ "DEC",
+ "DECLARE",
+ "DEFAULT",
+ "DEFAULTS",
+ "DEFER",
+ "DEFINE",
+ "DELETE",
+ "DELIMITER",
+ "DESCRIBE",
+ "DESTINATION",
+ "DIM",
+ "DIALOG",
+ "DIMENSION",
+ "DIRTY",
+ "DISCONNECT",
+ "DISPLAY",
+ "DISTINCT",
+ "DORMANT",
+ "DOWN",
+ "DROP",
+ "DYNAMIC",
+ "ELSE",
+ "END",
+ "ERROR",
+ "ESCAPE",
+ "EVERY",
+ "EXCLUSIVE",
+ "EXECUTE",
+ "EXISTS",
+ "EXIT",
+ "EXPLAIN",
+ "EXTEND",
+ "EXTENT",
+ "EXTERNAL",
+ "FETCH",
+ "FGL_DRAWBOX",
+ "FIELD",
+ "FIELD_TOUCHED",
+ "FILE",
+ "FILL",
+ "FINISH",
+ "FIRST",
+ "FLOAT",
+ "FLUSH",
+ "FOR",
+ "FOREACH",
+ "FORM",
+ "FORMAT",
+ "FOUND",
+ "FRACTION",
+ "FREE",
+ "FROM",
+ "FULL",
+ "FUNCTION",
+ "GET_FLDBUF",
+ "GLOBALS",
+ "GO",
+ "GOTO",
+ "GRANT",
+ "GROUP",
+ "HAVING",
+ "HEADER",
+ "HELP",
+ "HIDE",
+ "HOLD",
+ "HOUR",
+ "IDLE",
+ "IF",
+ "IMAGE",
+ "IMMEDIATE",
+ "IN",
+ "INDEX",
+ "INFIELD",
+ "INITIALIZE",
+ "INNER",
+ "INPUT",
+ "INSERT",
+ "INTERRUPT",
+ "INTERVAL",
+ "INTO",
+ "INVISIBLE",
+ "IS",
+ "ISOLATION",
+ "JOIN",
+ "KEEP",
+ "KEY",
+ "LABEL",
+ "LAST",
+ "LEFT",
+ "LENGTH",
+ "LET",
+ "LIKE",
+ "LINE",
+ "LINENO",
+ "LINES",
+ "LOAD",
+ "LOCATE",
+ "LOCK",
+ "LOG",
+ "LSTR",
+ "MAIN",
+ "MARGIN",
+ "MATCHES",
+ "MAX",
+ "MAXCOUNT",
+ "MDY",
+ "MEMORY",
+ "MENU",
+ "MESSAGE",
+ "MIN",
+ "MINUTE",
+ "MOD",
+ "MODE",
+ "MODIFY",
+ "MONEY",
+ "NAME",
+ "NEED",
+ "NEXT",
+ "NO",
+ "NORMAL",
+ "NOT",
+ "NOTFOUND",
+ "NULL",
+ "NUMERIC",
+ "OF",
+ "ON",
+ "OPEN",
+ "OPTION",
+ "OPTIONS",
+ "OR",
+ "ORDER",
+ "OTHERWISE",
+ "OUTER",
+ "OUTPUT",
+ "PAGE",
+ "PAGENO",
+ "PAUSE",
+ "PERCENT",
+ "PICTURE",
+ "PIPE",
+ "PRECISION",
+ "PREPARE",
+ "PREVIOUS",
+ "PRINT",
+ "PRINTER",
+ "PRINTX",
+ "PRIOR",
+ "PRIVILEGES",
+ "PROCEDURE",
+ "PROGRAM",
+ "PROMPT",
+ "PUBLIC",
+ "PUT",
+ "QUIT",
+ "READ",
+ "REAL",
+ "RECORD",
+ "RECOVER",
+ "RED ",
+ "RELATIVE",
+ "RENAME",
+ "REOPTIMIZATION",
+ "REPEATABLE",
+ "REPORT",
+ "RESOURCE",
+ "RETURN",
+ "RETURNING",
+ "REVERSE",
+ "REVOKE",
+ "RIGHT",
+ "ROLLBACK",
+ "ROLLFORWARD",
+ "ROW",
+ "ROWS",
+ "RUN",
+ "SCHEMA",
+ "SCREEN",
+ "SCROLL",
+ "SECOND",
+ "SELECT",
+ "SERIAL",
+ "SET",
+ "SFMT",
+ "SHARE",
+ "SHIFT",
+ "SHOW",
+ "SIGNAL ",
+ "SIZE",
+ "SKIP",
+ "SLEEP",
+ "SOME",
+ "SPACE",
+ "SPACES",
+ "SQL",
+ "SQLERRMESSAGE",
+ "SQLERROR",
+ "SQLSTATE",
+ "STABILITY",
+ "START",
+ "STATISTICS",
+ "STEP",
+ "STOP",
+ "STYLE",
+ "SUM",
+ "SYNONYM",
+ "TABLE",
+ "TEMP",
+ "TERMINATE",
+ "TEXT",
+ "THEN",
+ "THROUGH",
+ "THRU",
+ "TO",
+ "TODAY",
+ "TOP",
+ "TRAILER",
+ "TRANSACTION ",
+ "UNBUFFERED",
+ "UNCONSTRAINED",
+ "UNDERLINE",
+ "UNION",
+ "UNIQUE",
+ "UNITS",
+ "UNLOAD",
+ "UNLOCK",
+ "UP",
+ "UPDATE",
+ "USE",
+ "USER",
+ "USING",
+ "VALIDATE",
+ "VALUE",
+ "VALUES",
+ "VARCHAR",
+ "VIEW",
+ "WAIT",
+ "WAITING",
+ "WARNING",
+ "WHEN",
+ "WHENEVER",
+ "WHERE",
+ "WHILE",
+ "WINDOW",
+ "WITH",
+ "WITHOUT",
+ "WORDWRAP",
+ "WORK",
+ "WRAP"
+ ),
+ 2 => array(
+ '&amp;IFDEF', '&amp;ENDIF'
+ ),
+ 3 => array(
+ "ARRAY",
+ "BYTE",
+ "CHAR",
+ "CHARACTER",
+ "CURSOR",
+ "DATE",
+ "DATETIME",
+ "DECIMAL",
+ "DOUBLE",
+ "FALSE",
+ "INT",
+ "INTEGER",
+ "SMALLFLOAT",
+ "SMALLINT",
+ "STRING",
+ "TIME",
+ "TRUE"
+ ),
+ 4 => array(
+ "BLACK",
+ "BLINK",
+ "BLUE",
+ "BOLD",
+ "ANSI",
+ "ASC",
+ "ASCENDING",
+ "ASCII",
+ "CYAN",
+ "DESC",
+ "DESCENDING",
+ "GREEN",
+ "MAGENTA",
+ "OFF",
+ "WHITE",
+ "YELLOW",
+ "YEAR",
+ "DAY",
+ "MONTH",
+ "WEEKDAY"
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '+', '-', '*', '?', '=', '/', '%', '>', '<', '^', '!', '|', ':',
+ '(', ')', '[', ']'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF;',
+ 2 => 'color: #0000FF; font-weight: bold;',
+ 3 => 'color: #008000;',
+ 4 => 'color: #FF0000;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080; font-style: italic;',
+ 2 => 'color: #008080;',
+ 'MULTI' => 'color: #008080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #0000FF;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php
new file mode 100644
index 000000000..a1dcd8c8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php
@@ -0,0 +1,97 @@
+<?php
+/*************************************************************************************
+ * gettext.php
+ * --------
+ * Author: Milian Wolff (mail@milianw.de)
+ * Copyright: (c) 2008 Milian Wolff
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/05/25
+ *
+ * GNU Gettext .po/.pot language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/08/02 (1.0.8)
+ * - New comments: flags and previous-fields
+ * - New keywords: msgctxt, msgid_plural
+ * - Msgstr array indices
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'GNU Gettext',
+ 'COMMENT_SINGLE' => array('#:', '#.', '#,', '#|', '#'),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array('msgctxt', 'msgid_plural', 'msgid', 'msgstr'),
+ ),
+ 'SYMBOLS' => array(),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #000099;',
+ 1 => 'color: #000099;',
+ 2 => 'color: #000099;',
+ 3 => 'color: #006666;',
+ 4 => 'color: #666666; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'REGEXPS' => array(),
+ 'SYMBOLS' => array(),
+ 'NUMBERS' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'METHODS' => array(),
+ 'SCRIPT' => array(),
+ 'BRACKETS' => array(
+ 0 => 'color: #000099;'
+ ),
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php
new file mode 100644
index 000000000..9b31fa482
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php
@@ -0,0 +1,205 @@
+<?php
+/*************************************************************************************
+ * glsl.php
+ * -----
+ * Author: Benny Baumann (BenBE@omorphia.de)
+ * Copyright: (c) 2008 Benny Baumann (BenBE@omorphia.de)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/03/20
+ *
+ * glSlang language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/03/20 (1.0.7.21)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'glSlang',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline-continued single-line comments
+ 1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Multiline-continued preprocessor define
+ 2 => '/#(?:\\\\\\\\|\\\\\\n|.)*$/m'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'if', 'else', 'for', 'while', 'do', 'break', 'continue', 'asm',
+ 'switch', 'case', 'default', 'return', 'discard',
+ 'namespace', 'using', 'sizeof', 'cast'
+ ),
+ 2 => array(
+ 'const', 'uniform', 'attribute', 'centroid', 'varying', 'invariant',
+ 'in', 'out', 'inout', 'input', 'output', 'typedef', 'volatile',
+ 'public', 'static', 'extern', 'external', 'packed',
+ 'inline', 'noinline', 'noperspective', 'flat'
+ ),
+ 3 => array(
+ 'void', 'bool', 'int', 'long', 'short', 'float', 'half', 'fixed',
+ 'unsigned', 'lowp', 'mediump', 'highp', 'precision',
+ 'vec2', 'vec3', 'vec4', 'bvec2', 'bvec3', 'bvec4',
+ 'dvec2', 'dvec3', 'dvec4', 'fvec2', 'fvec3', 'fvec4',
+ 'hvec2', 'hvec3', 'hvec4', 'ivec2', 'ivec3', 'ivec4',
+ 'mat2', 'mat3', 'mat4', 'mat2x2', 'mat3x2', 'mat4x2',
+ 'mat2x3', 'mat3x3', 'mat4x3', 'mat2x4', 'mat3x4', 'mat4x4',
+ 'sampler1D', 'sampler2D', 'sampler3D', 'samplerCube',
+ 'sampler1DShadow', 'sampler2DShadow',
+ 'struct', 'class', 'union', 'enum', 'interface', 'template'
+ ),
+ 4 => array(
+ 'this', 'false', 'true'
+ ),
+ 5 => array(
+ 'radians', 'degrees', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan',
+ 'pow', 'exp2', 'log2', 'sqrt', 'inversesqrt', 'abs', 'sign', 'ceil',
+ 'floor', 'fract', 'mod', 'min', 'max', 'clamp', 'mix', 'step',
+ 'smoothstep', 'length', 'distance', 'dot', 'cross', 'normalize',
+ 'ftransform', 'faceforward', 'reflect', 'matrixCompMult', 'equal',
+ 'lessThan', 'lessThanEqual', 'greaterThan', 'greaterThanEqual',
+ 'notEqual', 'any', 'all', 'not', 'texture1D', 'texture1DProj',
+ 'texture1DLod', 'texture1DProjLod', 'texture2D', 'texture2DProj',
+ 'texture2DLod', 'texture2DProjLod', 'texture3D', 'texture3DProj',
+ 'texture3DLod', 'texture3DProjLod', 'textureCube', 'textureCubeLod',
+ 'shadow1D', 'shadow1DProj', 'shadow1DLod', 'shadow1DProjLod',
+ 'shadow2D', 'shadow2DProj', 'shadow2DLod', 'shadow2DProjLod',
+ 'noise1', 'noise2', 'noise3', 'noise4'
+ ),
+ 6 => array(
+ 'gl_Position', 'gl_PointSize', 'gl_ClipVertex', 'gl_FragColor',
+ 'gl_FragData', 'gl_FragDepth', 'gl_FragCoord', 'gl_FrontFacing',
+ 'gl_Color', 'gl_SecondaryColor', 'gl_Normal', 'gl_Vertex',
+ 'gl_MultiTexCoord0', 'gl_MultiTexCoord1', 'gl_MultiTexCoord2',
+ 'gl_MultiTexCoord3', 'gl_MultiTexCoord4', 'gl_MultiTexCoord5',
+ 'gl_MultiTexCoord6', 'gl_MultiTexCoord7', 'gl_FogCoord',
+ 'gl_MaxLights', 'gl_MaxClipPlanes', 'gl_MaxTextureUnits',
+ 'gl_MaxTextureCoords', 'gl_MaxVertexAttribs', 'gl_MaxVaryingFloats',
+ 'gl_MaxVertexUniformComponents', 'gl_MaxVertexTextureImageUnits',
+ 'gl_MaxCombinedTextureImageUnits', 'gl_MaxTextureImageUnits',
+ 'gl_MaxFragmentUniformComponents', 'gl_MaxDrawBuffers', 'gl_Point',
+ 'gl_ModelViewMatrix', 'gl_ProjectionMatrix', 'gl_FrontMaterial',
+ 'gl_ModelViewProjectionMatrix', 'gl_TextureMatrix', 'gl_ClipPlane',
+ 'gl_NormalMatrix', 'gl_ModelViewMatrixInverse', 'gl_BackMaterial',
+ 'gl_ProjectionMatrixInverse', 'gl_ModelViewProjectionMatrixInverse',
+ 'gl_TextureMatrixInverse', 'gl_ModelViewMatrixTranspose', 'gl_Fog',
+ 'gl_ProjectionMatrixTranspose', 'gl_NormalScale', 'gl_DepthRange',
+ 'gl_odelViewProjectionMatrixTranspose', 'gl_TextureMatrixTranspose',
+ 'gl_ModelViewMatrixInverseTranspose', 'gl_LightSource',
+ 'gl_ProjectionMatrixInverseTranspose', 'gl_LightModel',
+ 'gl_ModelViewProjectionMatrixInverseTranspose', 'gl_TexCoord',
+ 'gl_TextureMatrixInverseTranspose', 'gl_TextureEnvColor',
+ 'gl_FrontLightModelProduct', 'gl_BackLightModelProduct',
+ 'gl_FrontLightProduct', 'gl_BackLightProduct', 'gl_ObjectPlaneS',
+ 'gl_ObjectPlaneT', 'gl_ObjectPlaneR', 'gl_ObjectPlaneQ',
+ 'gl_EyePlaneS', 'gl_EyePlaneT', 'gl_EyePlaneR', 'gl_EyePlaneQ',
+ 'gl_FrontColor', 'gl_BackColor', 'gl_FrontSecondaryColor',
+ 'gl_BackSecondaryColor', 'gl_FogFragCoord', 'gl_PointCoord'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^',
+ '&', '?', ':', '.', '|', ';', ',', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #333399; font-weight: bold;',
+ 3 => 'color: #000066; font-weight: bold;',
+ 4 => 'color: #333399; font-weight: bold;',
+ 5 => 'color: #993333; font-weight: bold;',
+ 6 => 'color: #551111;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #009900;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'OOLANG' => array(
+ 'MATCH_BEFORE' => '',
+ 'MATCH_AFTER' => '[a-zA-Z_][a-zA-Z0-9_]*',
+ 'MATCH_SPACES' => '[\s]*'
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php
new file mode 100644
index 000000000..da3d3a8e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php
@@ -0,0 +1,506 @@
+<?php
+/*************************************************************************************
+ * gml.php
+ * --------
+ * Author: Jos� Jorge Enr�quez (jenriquez@users.sourceforge.net)
+ * Copyright: (c) 2005 Jos� Jorge Enr�quez Rodr�guez (http://www.zonamakers.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/06/21
+ *
+ * GML language file for GeSHi.
+ *
+ * GML (Game Maker Language) is a script language that is built-in into Game Maker,
+ * a game creation program, more info about Game Maker can be found at
+ * http://www.gamemaker.nl/
+ * All GML keywords were extracted from the Game Maker HTML Help file using a PHP
+ * script (one section at a time). I love PHP for saving me that bunch of work :P!.
+ * I think all GML functions have been indexed here, but I'm not sure about it, so
+ * please let me know of any issue you may find.
+ *
+ * CHANGES
+ * -------
+ * 2005/11/11
+ * - Changed 'CASE_KEYWORDS' fom 'GESHI_CAPS_LOWER' to 'GESHI_CAPS_NO_CHANGE',
+ * so that MCI_command appears correctly (the only GML function using capitals).
+ * - Changed 'CASE_SENSITIVE' options, 'GESHI_COMMENTS' from true to false and all
+ * of the others from false to true.
+ * - Deleted repeated entries.
+ * - div and mod are language keywords, moved (from symbols) to the appropiate section (1).
+ * - Moved self, other, all, noone and global identifiers to language keywords section 1.
+ * - Edited this file lines to a maximum width of 100 characters (as stated in
+ * the GeSHi docs). Well, not strictly to 100 but around it.
+ * - Corrected some minor issues (the vk_f1...vk_f12 keys and similar).
+ * - Deleted the KEYWORDS=>5 and KEYWORDS=>6 sections (actually, they were empty).
+ * I was planning of using those for the GML functions available only in the
+ * registered version of the program, but not anymore.
+ *
+ * 2005/06/26 (1.0.3)
+ * - First Release.
+ *
+ * TODO (updated 2005/11/11)
+ * -------------------------
+ * - Test it for a while and make the appropiate corrections.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'GML',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ // language keywords
+ 1 => array(
+ 'break', 'continue', 'do', 'until', 'if', 'else',
+ 'exit', 'for', 'repeat', 'return', 'switch',
+ 'case', 'default', 'var', 'while', 'with', 'div', 'mod',
+ // GML Language overview
+ 'self', 'other', 'all', 'noone', 'global',
+ ),
+ // modifiers and built-in variables
+ 2 => array(
+ // Game play
+ 'x','y','xprevious','yprevious','xstart','ystart','hspeed','vspeed','direction','speed',
+ 'friction','gravity','gravity_direction',
+ 'path_index','path_position','path_positionprevious','path_speed','path_orientation',
+ 'path_endaction',
+ 'object_index','id','mask_index','solid','persistent','instance_count','instance_id',
+ 'room_speed','fps','current_time','current_year','current_month','current_day','current_weekday',
+ 'current_hour','current_minute','current_second','alarm','timeline_index','timeline_position',
+ 'timeline_speed',
+ 'room','room_first','room_last','room_width','room_height','room_caption','room_persistent',
+ 'score','lives','health','show_score','show_lives','show_health','caption_score','caption_lives',
+ 'caption_health',
+ 'event_type','event_number','event_object','event_action',
+ 'error_occurred','error_last',
+ // User interaction
+ 'keyboard_lastkey','keyboard_key','keyboard_lastchar','keyboard_string',
+ 'mouse_x','mouse_y','mouse_button','mouse_lastbutton',
+ // Game Graphics
+ 'sprite_index','sprite_width','sprite_height','sprite_xoffset','sprite_yoffset',
+ 'image_number','image_index','image_speed','image_xscale','image_yscale','image_angle',
+ 'image_alpha','image_blend','bbox_left','bbox_right','bbox_top','bbox_bottom',
+ 'background_color','background_showcolor','background_visible','background_foreground',
+ 'background_index','background_x','background_y','background_width','background_height',
+ 'background_htiled','background_vtiled','background_xscale','background_yscale',
+ 'background_hspeed','background_vspeed','background_blend','background_alpha',
+ 'background','left, top, width, height','depth','visible','xscale','yscale','blend','alpha',
+ 'view_enabled','view_current','view_visible','view_yview','view_wview','view_hview','view_xport',
+ 'view_yport','view_wport','view_hport','view_angle','view_hborder','view_vborder','view_hspeed',
+ 'view_vspeed','view_object',
+ 'transition_kind',
+ // Files, registry and executing programs
+ 'game_id','working_directory','temp_directory',
+ 'secure_mode',
+ // Creating particles
+ 'xmin', 'xmax', 'ymin', 'ymax','shape','distribution','particle type','number',
+ 'force','dist','kind','additive', 'parttype1', 'parttype2'
+ ),
+ // functions
+ 3 => array(
+ // Computing things
+ 'random','choose','abs','sign','round','floor','ceil','frac','sqrt','sqr','power','exp','ln',
+ 'log2','log10','logn','sin','cos','tan','arcsin','arccos','arctan','arctan2','degtorad',
+ 'radtodeg','min','max','mean','median','point_distance','point_direction','lengthdir_x',
+ 'lengthdir_y','is_real','is_string',
+ 'chr','ord','real','string','string_format','string_length','string_pos','string_copy',
+ 'string_char_at','string_delete','string_insert','string_replace','string_replace_all',
+ 'string_count','string_lower','string_upper','string_repeat','string_letters','string_digits',
+ 'string_lettersdigits','clipboard_has_text','clipboard_get_text','clipboard_set_text',
+ 'date_current_datetime','date_current_date','date_current_time','date_create_datetime',
+ 'date_create_date','date_create_time','date_valid_datetime','date_valid_date','date_valid_time',
+ 'date_inc_year','date_inc_month','date_inc_week','date_inc_day','date_inc_hour',
+ 'date_inc_minute','date_inc_second','date_get_year','date_get_month','date_get_week',
+ 'date_get_day','date_get_hour', 'date_get_minute','date_get_second','date_get_weekday',
+ 'date_get_day_of_year','date_get_hour_of_year','date_get_minute_of_year',
+ 'date_get_second_of_year','date_year_span','date_month_span','date_week_span','date_day_span',
+ 'date_hour_span','date_minute_span','date_second_span','date_compare_datetime',
+ 'date_compare_date','date_compare_time','date_date_of','date_time_of','date_datetime_string',
+ 'date_date_string','date_time_string','date_days_in_month','date_days_in_year','date_leap_year',
+ 'date_is_today',
+ // Game play
+ 'motion_set','motion_add','place_free','place_empty','place_meeting','place_snapped',
+ 'move_random','move_snap','move_wrap','move_towards_point','move_bounce_solid','move_bounce_all',
+ 'move_contact_solid','move_contact_all','move_outside_solid','move_outside_all',
+ 'distance_to_point','distance_to_object','position_empty','position_meeting',
+ 'path_start','path_end',
+ 'mp_linear_step','mp_linear_step_object','mp_potential_step','mp_potential_step_object',
+ 'mp_potential_settings','mp_linear_path','mp_linear_path_object', 'mp_potential_path',
+ 'mp_potential_path_object','mp_grid_create','mp_grid_destroy','mp_grid_clear_all',
+ 'mp_grid_clear_cell','mp_grid_clear_rectangle','mp_grid_add_cell','mp_grid_add_rectangle',
+ 'mp_grid_add_instances','mp_grid_path','mp_grid_draw',
+ 'collision_point','collision_rectangle','collision_circle','collision_ellipse','collision_line',
+ 'instance_find','instance_exists','instance_number','instance_position','instance_nearest',
+ 'instance_furthest','instance_place','instance_create','instance_copy','instance_destroy',
+ 'instance_change','position_destroy','position_change',
+ 'instance_deactivate_all','instance_deactivate_object','instance_deactivate_region',
+ 'instance_activate_all','instance_activate_object','instance_activate_region',
+ 'sleep',
+ 'room_goto','room_goto_previous','room_goto_next','room_restart','room_previous','room_next',
+ 'game_end','game_restart','game_save','game_load',
+ 'event_perform', 'event_perform_object','event_user','event_inherited',
+ 'show_debug_message','variable_global_exists','variable_local_exists','variable_global_get',
+ 'variable_global_array_get','variable_global_array2_get','variable_local_get',
+ 'variable_local_array_get','variable_local_array2_get','variable_global_set',
+ 'variable_global_array_set','variable_global_array2_set','variable_local_set',
+ 'variable_local_array_set','variable_local_array2_set','set_program_priority',
+ // User interaction
+ 'keyboard_set_map','keyboard_get_map','keyboard_unset_map','keyboard_check',
+ 'keyboard_check_pressed','keyboard_check_released','keyboard_check_direct',
+ 'keyboard_get_numlock','keyboard_set_numlock','keyboard_key_press','keyboard_key_release',
+ 'keyboard_clear','io_clear','io_handle','keyboard_wait',
+ 'mouse_check_button','mouse_check_button_pressed','mouse_check_button_released','mouse_clear',
+ 'mouse_wait',
+ 'joystick_exists','joystick_name','joystick_axes','joystick_buttons','joystick_has_pov',
+ 'joystick_direction','joystick_check_button','joystick_xpos','joystick_ypos','joystick_zpos',
+ 'joystick_rpos','joystick_upos','joystick_vpos','joystick_pov',
+ // Game Graphics
+ 'draw_sprite','draw_sprite_stretched','draw_sprite_tiled','draw_sprite_part','draw_background',
+ 'draw_background_stretched','draw_background_tiled','draw_background_part','draw_sprite_ext',
+ 'draw_sprite_stretched_ext','draw_sprite_tiled_ext','draw_sprite_part_ext','draw_sprite_general',
+ 'draw_background_ext','draw_background_stretched_ext','draw_background_tiled_ext',
+ 'draw_background_part_ext','draw_background_general',
+ 'draw_clear','draw_clear_alpha','draw_point','draw_line','draw_rectangle','draw_roundrect',
+ 'draw_triangle','draw_circle','draw_ellipse','draw_arrow','draw_button','draw_path',
+ 'draw_healthbar','draw_set_color','draw_set_alpha','draw_get_color','draw_get_alpha',
+ 'make_color_rgb','make_color_hsv','color_get_red','color_get_green','color_get_blue',
+ 'color_get_hue','color_get_saturation','color_get_value','merge_color','draw_getpixel',
+ 'screen_save','screen_save_part',
+ 'draw_set_font','draw_set_halign','draw_set_valign','draw_text','draw_text_ext','string_width',
+ 'string_height','string_width_ext','string_height_ext','draw_text_transformed',
+ 'draw_text_ext_transformed','draw_text_color','draw_text_ext_color',
+ 'draw_text_transformed_color','draw_text_ext_transformed_color',
+ 'draw_point_color','draw_line_color','draw_rectangle_color','draw_roundrect_color',
+ 'draw_triangle_color','draw_circle_color','draw_ellipse_color','draw_primitive_begin',
+ 'draw_vertex','draw_vertex_color','draw_primitive_end','sprite_get_texture',
+ 'background_get_texture','texture_preload','texture_set_priority',
+ 'texture_get_width','texture_get_height','draw_primitive_begin_texture','draw_vertex_texture',
+ 'draw_vertex_texture_color','texture_set_interpolation',
+ 'texture_set_blending','texture_set_repeat','draw_set_blend_mode','draw_set_blend_mode_ext',
+ 'surface_create','surface_free','surface_exists','surface_get_width','surface_get_height',
+ 'surface_get_texture','surface_set_target','surface_reset_target','surface_getpixel',
+ 'surface_save','surface_save_part','draw_surface','draw_surface_stretched','draw_surface_tiled',
+ 'draw_surface_part','draw_surface_ext','draw_surface_stretched_ext','draw_surface_tiled_ext',
+ 'draw_surface_part_ext','draw_surface_general','surface_copy','surface_copy_part',
+ 'tile_add','tile_delete','tile_exists','tile_get_x','tile_get_y','tile_get_left','tile_get_top',
+ 'tile_get_width','tile_get_height','tile_get_depth','tile_get_visible','tile_get_xscale',
+ 'tile_get_yscale','tile_get_background','tile_get_blend','tile_get_alpha','tile_set_position',
+ 'tile_set_region','tile_set_background','tile_set_visible','tile_set_depth','tile_set_scale',
+ 'tile_set_blend','tile_set_alpha','tile_layer_hide','tile_layer_show','tile_layer_delete',
+ 'tile_layer_shift','tile_layer_find','tile_layer_delete_at','tile_layer_depth',
+ 'display_get_width','display_get_height','display_get_colordepth','display_get_frequency',
+ 'display_set_size','display_set_colordepth','display_set_frequency','display_set_all',
+ 'display_test_all','display_reset','display_mouse_get_x','display_mouse_get_y','display_mouse_set',
+ 'window_set_visible','window_get_visible','window_set_fullscreen','window_get_fullscreen',
+ 'window_set_showborder','window_get_showborder','window_set_showicons','window_get_showicons',
+ 'window_set_stayontop','window_get_stayontop','window_set_sizeable','window_get_sizeable',
+ 'window_set_caption','window_get_caption','window_set_cursor', 'window_get_cursor',
+ 'window_set_color','window_get_color','window_set_region_scale','window_get_region_scale',
+ 'window_set_position','window_set_size','window_set_rectangle','window_center','window_default',
+ 'window_get_x','window_get_y','window_get_width','window_get_height','window_mouse_get_x',
+ 'window_mouse_get_y','window_mouse_set',
+ 'window_set_region_size','window_get_region_width','window_get_region_height',
+ 'window_view_mouse_get_x','window_view_mouse_get_y','window_view_mouse_set',
+ 'window_views_mouse_get_x','window_views_mouse_get_y','window_views_mouse_set',
+ 'screen_redraw','screen_refresh','set_automatic_draw','set_synchronization','screen_wait_vsync',
+ // Sound and music)
+ 'sound_play','sound_loop','sound_stop','sound_stop_all','sound_isplaying','sound_volume',
+ 'sound_global_volume','sound_fade','sound_pan','sound_background_tempo','sound_set_search_directory',
+ 'sound_effect_set','sound_effect_chorus','sound_effect_echo', 'sound_effect_flanger',
+ 'sound_effect_gargle','sound_effect_reverb','sound_effect_compressor','sound_effect_equalizer',
+ 'sound_3d_set_sound_position','sound_3d_set_sound_velocity','sound_3d_set_sound_distance',
+ 'sound_3d_set_sound_cone',
+ 'cd_init','cd_present','cd_number','cd_playing','cd_paused','cd_track','cd_length',
+ 'cd_track_length','cd_position','cd_track_position','cd_play','cd_stop','cd_pause','cd_resume',
+ 'cd_set_position','cd_set_track_position','cd_open_door','cd_close_door','MCI_command',
+ // Splash screens, highscores, and other pop-ups
+ 'show_text','show_image','show_video','show_info','load_info',
+ 'show_message','show_message_ext','show_question','get_integer','get_string',
+ 'message_background','message_alpha','message_button','message_text_font','message_button_font',
+ 'message_input_font','message_mouse_color','message_input_color','message_caption',
+ 'message_position','message_size','show_menu','show_menu_pos','get_color','get_open_filename',
+ 'get_save_filename','get_directory','get_directory_alt','show_error',
+ 'highscore_show','highscore_set_background','highscore_set_border','highscore_set_font',
+ 'highscore_set_colors','highscore_set_strings','highscore_show_ext','highscore_clear',
+ 'highscore_add','highscore_add_current','highscore_value','highscore_name','draw_highscore',
+ // Resources
+ 'sprite_exists','sprite_get_name','sprite_get_number','sprite_get_width','sprite_get_height',
+ 'sprite_get_transparent','sprite_get_smooth','sprite_get_preload','sprite_get_xoffset',
+ 'sprite_get_yoffset','sprite_get_bbox_left','sprite_get_bbox_right','sprite_get_bbox_top',
+ 'sprite_get_bbox_bottom','sprite_get_bbox_mode','sprite_get_precise',
+ 'sound_exists','sound_get_name','sound_get_kind','sound_get_preload','sound_discard',
+ 'sound_restore',
+ 'background_exists','background_get_name','background_get_width','background_get_height',
+ 'background_get_transparent','background_get_smooth','background_get_preload',
+ 'font_exists','font_get_name','font_get_fontname','font_get_bold','font_get_italic',
+ 'font_get_first','font_get_last',
+ 'path_exists','path_get_name','path_get_length','path_get_kind','path_get_closed',
+ 'path_get_precision','path_get_number','path_get_point_x','path_get_point_y',
+ 'path_get_point_speed','path_get_x','path_get_y','path_get_speed',
+ 'script_exists','script_get_name','script_get_text',
+ 'timeline_exists','timeline_get_name',
+ 'object_exists','object_get_name','object_get_sprite','object_get_solid','object_get_visible',
+ 'object_get_depth','object_get_persistent','object_get_mask','object_get_parent',
+ 'object_is_ancestor',
+ 'room_exists','room_get_name',
+ // Changing resources
+ 'sprite_set_offset','sprite_set_bbox_mode','sprite_set_bbox','sprite_set_precise',
+ 'sprite_duplicate','sprite_assign','sprite_merge','sprite_add','sprite_replace',
+ 'sprite_create_from_screen','sprite_add_from_screen','sprite_create_from_surface',
+ 'sprite_add_from_surface','sprite_delete','sprite_set_alpha_from_sprite',
+ 'sound_add','sound_replace','sound_delete',
+ 'background_duplicate','background_assign','background_add','background_replace',
+ 'background_create_color','background_create_gradient','background_create_from_screen',
+ 'background_create_from_surface','background_delete','background_set_alpha_from_background',
+ 'font_add','font_add_sprite','font_replace_sprite','font_delete',
+ 'path_set_kind','path_set_closed','path_set_precision','path_add','path_delete','path_duplicate',
+ 'path_assign','path_append','path_add_point','path_insert_point','path_change_point',
+ 'path_delete_point','path_clear_points','path_reverse','path_mirror','path_flip','path_rotate',
+ 'path_scale','path_shift',
+ 'execute_string','execute_file','script_execute',
+ 'timeline_add','timeline_delete','timeline_moment_add','timeline_moment_clear',
+ 'object_set_sprite','object_set_solid','object_set_visible','object_set_depth',
+ 'object_set_persistent','object_set_mask','object_set_parent','object_add','object_delete',
+ 'object_event_add','object_event_clear',
+ 'room_set_width','room_set_height','room_set_caption','room_set_persistent','room_set_code',
+ 'room_set_background_color','room_set_background','room_set_view','room_set_view_enabled',
+ 'room_add','room_duplicate','room_assign','room_instance_add','room_instance_clear',
+ 'room_tile_add','room_tile_add_ext','room_tile_clear',
+ // Files, registry and executing programs
+ 'file_text_open_read','file_text_open_write','file_text_open_append','file_text_close',
+ 'file_text_write_string','file_text_write_real','file_text_writeln','file_text_read_string',
+ 'file_text_read_real','file_text_readln','file_text_eof','file_exists','file_delete',
+ 'file_rename','file_copy','directory_exists','directory_create','file_find_first',
+ 'file_find_next','file_find_close','file_attributes', 'filename_name','filename_path',
+ 'filename_dir','filename_drive','filename_ext','filename_change_ext','file_bin_open',
+ 'file_bin_rewrite','file_bin_close','file_bin_size','file_bin_position','file_bin_seek',
+ 'file_bin_write_byte','file_bin_read_byte','parameter_count','parameter_string',
+ 'environment_get_variable',
+ 'registry_write_string','registry_write_real','registry_read_string','registry_read_real',
+ 'registry_exists','registry_write_string_ext','registry_write_real_ext',
+ 'registry_read_string_ext','registry_read_real_ext','registry_exists_ext','registry_set_root',
+ 'ini_open','ini_close','ini_read_string','ini_read_real','ini_write_string','ini_write_real',
+ 'ini_key_exists','ini_section_exists','ini_key_delete','ini_section_delete',
+ 'execute_program','execute_shell',
+ // Data structures
+ 'ds_stack_create','ds_stack_destroy','ds_stack_clear','ds_stack_size','ds_stack_empty',
+ 'ds_stack_push','ds_stack_pop','ds_stack_top',
+ 'ds_queue_create','ds_queue_destroy','ds_queue_clear','ds_queue_size','ds_queue_empty',
+ 'ds_queue_enqueue','ds_queue_dequeue','ds_queue_head','ds_queue_tail',
+ 'ds_list_create','ds_list_destroy','ds_list_clear','ds_list_size','ds_list_empty','ds_list_add',
+ 'ds_list_insert','ds_list_replace','ds_list_delete','ds_list_find_index','ds_list_find_value',
+ 'ds_list_sort',
+ 'ds_map_create','ds_map_destroy','ds_map_clear','ds_map_size','ds_map_empty','ds_map_add',
+ 'ds_map_replace','ds_map_delete','ds_map_exists','ds_map_find_value','ds_map_find_previous',
+ 'ds_map_find_next','ds_map_find_first','ds_map_find_last',
+ 'ds_priority_create','ds_priority_destroy','ds_priority_clear','ds_priority_size',
+ 'ds_priority_empty','ds_priority_add','ds_priority_change_priority','ds_priority_find_priority',
+ 'ds_priority_delete_value','ds_priority_delete_min','ds_priority_find_min',
+ 'ds_priority_delete_max','ds_priority_find_max',
+ 'ds_grid_create','ds_grid_destroy','ds_grid_resize','ds_grid_width','ds_grid_height',
+ 'ds_grid_clear','ds_grid_set','ds_grid_add','ds_grid_multiply','ds_grid_set_region',
+ 'ds_grid_add_region','ds_grid_multiply_region','ds_grid_set_disk','ds_grid_add_disk',
+ 'ds_grid_multiply_disk','ds_grid_get','ds_grid_get_sum','ds_grid_get_max','ds_grid_get_min',
+ 'ds_grid_get_mean','ds_grid_get_disk_sum','ds_grid_get_disk_min','ds_grid_get_disk_max',
+ 'ds_grid_get_disk_mean','ds_grid_value_exists','ds_grid_value_x','ds_grid_value_y',
+ 'ds_grid_value_disk_exists','ds_grid_value_disk_x','ds_grid_value_disk_y',
+ // Creating particles
+ 'effect_create_below','effect_create_above','effect_clear',
+ 'part_type_create','part_type_destroy','part_type_exists','part_type_clear','part_type_shape',
+ 'part_type_sprite','part_type_size','part_type_scale',
+ 'part_type_orientation','part_type_color1','part_type_color2','part_type_color3',
+ 'part_type_color_mix','part_type_color_rgb','part_type_color_hsv',
+ 'part_type_alpha1','part_type_alpha2','part_type_alpha3','part_type_blend','part_type_life',
+ 'part_type_step','part_type_death','part_type_speed','part_type_direction','part_type_gravity',
+ 'part_system_create','part_system_destroy','part_system_exists','part_system_clear',
+ 'part_system_draw_order','part_system_depth','part_system_position',
+ 'part_system_automatic_update','part_system_automatic_draw','part_system_update',
+ 'part_system_drawit','part_particles_create','part_particles_create_color',
+ 'part_particles_clear','part_particles_count',
+ 'part_emitter_create','part_emitter_destroy','part_emitter_destroy_all','part_emitter_exists',
+ 'part_emitter_clear','part_emitter_region','part_emitter_burst','part_emitter_stream',
+ 'part_attractor_create','part_attractor_destroy','part_attractor_destroy_all',
+ 'part_attractor_exists','part_attractor_clear','part_attractor_position','part_attractor_force',
+ 'part_destroyer_create','part_destroyer_destroy','part_destroyer_destroy_all',
+ 'part_destroyer_exists','part_destroyer_clear','part_destroyer_region',
+ 'part_deflector_create','part_deflector_destroy','part_deflector_destroy_all',
+ 'part_deflector_exists','part_deflector_clear','part_deflector_region','part_deflector_kind',
+ 'part_deflector_friction',
+ 'part_changer_create','part_changer_destroy','part_changer_destroy_all','part_changer_exists',
+ 'part_changer_clear','part_changer_region','part_changer_types','part_changer_kind',
+ // Multiplayer games
+ 'mplay_init_ipx','mplay_init_tcpip','mplay_init_modem','mplay_init_serial',
+ 'mplay_connect_status','mplay_end','mplay_ipaddress',
+ 'mplay_session_create','mplay_session_find','mplay_session_name','mplay_session_join',
+ 'mplay_session_mode','mplay_session_status','mplay_session_end',
+ 'mplay_player_find','mplay_player_name','mplay_player_id',
+ 'mplay_data_write','mplay_data_read','mplay_data_mode',
+ 'mplay_message_send','mplay_message_send_guaranteed','mplay_message_receive','mplay_message_id',
+ 'mplay_message_value','mplay_message_player','mplay_message_name','mplay_message_count',
+ 'mplay_message_clear',
+ // Using DLL's
+ 'external_define','external_call','external_free','window_handle',
+ // 3D Graphics
+ 'd3d_start','d3d_end','d3d_set_hidden','d3d_set_perspective',
+ 'd3d_set_depth',
+ 'd3d_primitive_begin','d3d_vertex','d3d_vertex_color','d3d_primitive_end',
+ 'd3d_primitive_begin_texture','d3d_vertex_texture','d3d_vertex_texture_color','d3d_set_culling',
+ 'd3d_draw_block','d3d_draw_cylinder','d3d_draw_cone','d3d_draw_ellipsoid','d3d_draw_wall',
+ 'd3d_draw_floor',
+ 'd3d_set_projection','d3d_set_projection_ext','d3d_set_projection_ortho',
+ 'd3d_set_projection_perspective',
+ 'd3d_transform_set_identity','d3d_transform_set_translation','d3d_transform_set_scaling',
+ 'd3d_transform_set_rotation_x','d3d_transform_set_rotation_y','d3d_transform_set_rotation_z',
+ 'd3d_transform_set_rotation_axis','d3d_transform_add_translation','d3d_transform_add_scaling',
+ 'd3d_transform_add_rotation_x','d3d_transform_add_rotation_y','d3d_transform_add_rotation_z',
+ 'd3d_transform_add_rotation_axis','d3d_transform_stack_clear','d3d_transform_stack_empty',
+ 'd3d_transform_stack_push','d3d_transform_stack_pop','d3d_transform_stack_top',
+ 'd3d_transform_stack_discard',
+ 'd3d_set_fog',
+ 'd3d_set_lighting','d3d_set_shading','d3d_light_define_direction','d3d_light_define_point',
+ 'd3d_light_enable','d3d_vertex_normal','d3d_vertex_normal_color','d3d_vertex_normal_texture',
+ 'd3d_vertex_normal_texture_color',
+ 'd3d_model_create','d3d_model_destroy','d3d_model_clear','d3d_model_save','d3d_model_load',
+ 'd3d_model_draw','d3d_model_primitive_begin','d3d_model_vertex','d3d_model_vertex_color',
+ 'd3d_model_vertex_texture','d3d_model_vertex_texture_color','d3d_model_vertex_normal',
+ 'd3d_model_vertex_normal_color','d3d_model_vertex_normal_texture',
+ 'd3d_model_vertex_normal_texture_color','d3d_model_primitive_end','d3d_model_block',
+ 'd3d_model_cylinder','d3d_model_cone','d3d_model_ellipsoid','d3d_model_wall','d3d_model_floor'
+ ),
+ // constants
+ 4 => array(
+ 'true', 'false', 'pi',
+ 'ev_destroy','ev_step','ev_alarm','ev_keyboard','ev_mouse','ev_collision','ev_other','ev_draw',
+ 'ev_keypress','ev_keyrelease','ev_left_button','ev_right_button','ev_middle_button',
+ 'ev_no_button','ev_left_press','ev_right_press','ev_middle_press','ev_left_release',
+ 'ev_right_release','ev_middle_release','ev_mouse_enter','ev_mouse_leave','ev_mouse_wheel_up',
+ 'ev_mouse_wheel_down','ev_global_left_button','ev_global_right_button','ev_global_middle_button',
+ 'ev_global_left_press','ev_global_right_press','ev_global_middle_press','ev_global_left_release',
+ 'ev_global_right_release','ev_global_middle_release','ev_joystick1_left','ev_joystick1_right',
+ 'ev_joystick1_up','ev_joystick1_down','ev_joystick1_button1','ev_joystick1_button2',
+ 'ev_joystick1_button3','ev_joystick1_button4','ev_joystick1_button5','ev_joystick1_button6',
+ 'ev_joystick1_button7','ev_joystick1_button8','ev_joystick2_left','ev_joystick2_right',
+ 'ev_joystick2_up','ev_joystick2_down','ev_joystick2_button1','ev_joystick2_button2',
+ 'ev_joystick2_button3','ev_joystick2_button4','ev_joystick2_button5','ev_joystick2_button6',
+ 'ev_joystick2_button7','ev_joystick2_button8',
+ 'ev_outside','ev_boundary','ev_game_start','ev_game_end','ev_room_start','ev_room_end',
+ 'ev_no_more_lives','ev_no_more_health','ev_animation_end','ev_end_of_path','ev_user0','ev_user1',
+ 'ev_user2','ev_user3','ev_user4','ev_user5','ev_user6','ev_user7','ev_user8','ev_user9',
+ 'ev_user10','ev_user11','ev_user12','ev_user13','ev_user14','ev_user15','ev_step_normal',
+ 'ev_step_begin','ev_step_end',
+ 'vk_nokey','vk_anykey','vk_left','vk_right','vk_up','vk_down','vk_enter','vk_escape','vk_space',
+ 'vk_shift','vk_control','vk_alt','vk_backspace','vk_tab','vk_home','vk_end','vk_delete',
+ 'vk_insert','vk_pageup','vk_pagedown','vk_pause','vk_printscreen',
+ 'vk_f1','vk_f2','vk_f3','vk_f4','vk_f5','vk_f6','vk_f7','vk_f8','vk_f9','vk_f10','vk_f11','vk_f12',
+ 'vk_numpad0','vk_numpad1','vk_numpad2','vk_numpad3','vk_numpad4','vk_numpad5','vk_numpad6',
+ 'vk_numpad7','vk_numpad8','vk_numpad9', 'vk_multiply','vk_divide','vk_add','vk_subtract',
+ 'vk_decimal','vk_lshift','vk_lcontrol','vk_lalt','vk_rshift','vk_rcontrol','vk_ralt',
+ 'c_aqua','c_black','c_blue','c_dkgray','c_fuchsia','c_gray','c_green','c_lime','c_ltgray',
+ 'c_maroon','c_navy','c_olive','c_purple','c_red','c_silver','c_teal','c_white','c_yellow',
+ 'fa_left', 'fa_center','fa_right','fa_top','fa_middle','fa_bottom',
+ 'pr_pointlist','pr_linelist','pr_linestrip','pr_trianglelist','pr_trianglestrip',
+ 'pr_trianglefan',
+ 'cr_none','cr_arrow','cr_cross','cr_beam','cr_size_nesw','cr_size_ns','cr_size_nwse',
+ 'cr_size_we','cr_uparrow','cr_hourglass','cr_drag','cr_nodrop','cr_hsplit','cr_vsplit',
+ 'cr_multidrag','cr_sqlwait','cr_no','cr_appstart','cr_help','cr_handpoint','cr_size_all',
+ 'se_chorus','se_echo','se_flanger','se_gargle','se_reverb','se_compressor','se_equalizer',
+ 'fa_readonly','fa_hidden','fa_sysfile','fa_volumeid','fa_directory','fa_archive',
+ 'pt_shape_pixel','pt_shape_disk','pt_shape_square','pt_shape_line','pt_shape_star',
+ 'pt_shape_circle','pt_shape_ring','pt_shape_sphere','pt_shape_flare','pt_shape_spark',
+ 'pt_shape_explosion','pt_shape_cloud','pt_shape_smoke','pt_shape_snow',
+ 'ps_shape_rectangle','ps_shape_ellipse ','ps_shape_diamond','ps_shape_line',
+ 'ps_distr_linear','ps_distr_gaussian','ps_force_constant','ps_force_linear','ps_force_quadratic',
+ 'ps_deflect_horizontal', 'ps_deflect_vertical',
+ 'ps_change_motion','ps_change_shape','ps_change_all'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']',
+ '&&', '||', '^^', '&', '|', '^',
+ '<', '<=', '==', '!=', '>', '>=', '=',
+ '<<', '>>',
+ '+=', '-=', '*=', '/=',
+ '+', '-', '*', '/',
+ '!', '~', ',', ';'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'font-weight: bold; color: #000000;',
+ 2 => 'font-weight: bold; color: #000000;',
+ 3 => 'color: navy;',
+ 4 => 'color: #663300;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'font-style: italic; color: green;',
+ 'MULTI' => 'font-style: italic; color: green;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;' //'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php
new file mode 100644
index 000000000..863d0dbd6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php
@@ -0,0 +1,296 @@
+<?php
+/*************************************************************************************
+ * gnuplot.php
+ * ----------
+ * Author: Milian Wolff (mail@milianw.de)
+ * Copyright: (c) 2008 Milian Wolff (http://milianw.de)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/07/07
+ *
+ * Gnuplot script language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/07 (1.0.8)
+ * - Initial import
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Gnuplot',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('`', '"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_SCI_SHORT |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ // copy output of help command, indent properly and use this replace regexp:
+ // ([a-z0-9_\-]+)(( )+|$) => '\1',\3
+
+ // commands as found in `help commands`
+ 1 => array(
+ 'bind', 'call', 'cd', 'clear',
+ 'exit', 'fit', 'help', 'history',
+ 'if', 'load', 'lower', 'pause',
+ 'plot', 'print', 'pwd', 'quit',
+ 'raise', 'replot', 'reread', 'reset',
+ 'save', 'set', 'shell', 'show',
+ 'splot', 'system', 'test', 'unset',
+ 'update'
+ ),
+ 2 => array(
+ // set commands as returned by `help set`
+ 'angles', 'arrow', 'autoscale', 'bars',
+ 'bmargin', 'border', 'boxwidth', 'cbdata',
+ 'cbdtics', 'cblabel', 'cbmtics', 'cbrange',
+ 'cbtics', 'clabel', 'clip', 'cntrparam',
+ 'colorbox', 'contour', 'datafile', 'date_specifiers',
+ 'decimalsign', 'dgrid3d', 'dummy', 'encoding',
+ 'fontpath', 'format', 'grid',
+ 'hidden3d', 'historysize', 'isosamples', 'key',
+ 'label', 'lmargin', 'loadpath', 'locale',
+ 'log', 'logscale', 'macros', 'mapping',
+ 'margin', 'missing', 'mouse', 'multiplot',
+ 'mx2tics', 'mxtics', 'my2tics', 'mytics',
+ 'mztics', 'object', 'offsets', 'origin',
+ 'output', 'palette', 'parametric', 'pm3d',
+ 'pointsize', 'polar', 'rmargin',
+ 'rrange', 'samples', 'size', 'style',
+ 'surface', 'table', 'term', 'terminal',
+ 'termoption', 'tics', 'ticscale', 'ticslevel',
+ 'time_specifiers', 'timefmt', 'timestamp', 'title',
+ 'trange', 'urange', 'view',
+ 'vrange', 'x2data', 'x2dtics', 'x2label',
+ 'x2mtics', 'x2range', 'x2tics', 'x2zeroaxis',
+ 'xdata', 'xdtics', 'xlabel', 'xmtics',
+ 'xrange', 'xtics', 'xyplane', 'xzeroaxis',
+ 'y2data', 'y2dtics', 'y2label', 'y2mtics',
+ 'y2range', 'y2tics', 'y2zeroaxis', 'ydata',
+ 'ydtics', 'ylabel', 'ymtics', 'yrange',
+ 'ytics', 'yzeroaxis', 'zdata', 'zdtics',
+ 'zero', 'zeroaxis', 'zlabel', 'zmtics',
+ 'zrange', 'ztics', 'zzeroaxis',
+ // same but with leading no
+ 'noangles', 'noarrow', 'noautoscale', 'nobars',
+ 'nobmargin', 'noborder', 'noboxwidth', 'nocbdata',
+ 'nocbdtics', 'nocblabel', 'nocbmtics', 'nocbrange',
+ 'nocbtics', 'noclabel', 'noclip', 'nocntrparam',
+ 'nocolorbox', 'nocontour', 'nodatafile', 'nodate_specifiers',
+ 'nodecimalsign', 'nodgrid3d', 'nodummy', 'noencoding',
+ 'nofit', 'nofontpath', 'noformat', 'nogrid',
+ 'nohidden3d', 'nohistorysize', 'noisosamples', 'nokey',
+ 'nolabel', 'nolmargin', 'noloadpath', 'nolocale',
+ 'nolog', 'nologscale', 'nomacros', 'nomapping',
+ 'nomargin', 'nomissing', 'nomouse', 'nomultiplot',
+ 'nomx2tics', 'nomxtics', 'nomy2tics', 'nomytics',
+ 'nomztics', 'noobject', 'nooffsets', 'noorigin',
+ 'nooutput', 'nopalette', 'noparametric', 'nopm3d',
+ 'nopointsize', 'nopolar', 'noprint', 'normargin',
+ 'norrange', 'nosamples', 'nosize', 'nostyle',
+ 'nosurface', 'notable', 'noterm', 'noterminal',
+ 'notermoption', 'notics', 'noticscale', 'noticslevel',
+ 'notime_specifiers', 'notimefmt', 'notimestamp', 'notitle',
+ 'notmargin', 'notrange', 'nourange', 'noview',
+ 'novrange', 'nox2data', 'nox2dtics', 'nox2label',
+ 'nox2mtics', 'nox2range', 'nox2tics', 'nox2zeroaxis',
+ 'noxdata', 'noxdtics', 'noxlabel', 'noxmtics',
+ 'noxrange', 'noxtics', 'noxyplane', 'noxzeroaxis',
+ 'noy2data', 'noy2dtics', 'noy2label', 'noy2mtics',
+ 'noy2range', 'noy2tics', 'noy2zeroaxis', 'noydata',
+ 'noydtics', 'noylabel', 'noymtics', 'noyrange',
+ 'noytics', 'noyzeroaxis', 'nozdata', 'nozdtics',
+ 'nozero', 'nozeroaxis', 'nozlabel', 'nozmtics',
+ 'nozrange', 'noztics', 'nozzeroaxis',
+ ),
+ 3 => array(
+ // predefined variables
+ 'pi', 'NaN', 'GNUTERM',
+ 'GPVAL_X_MIN', 'GPVAL_X_MAX', 'GPVAL_Y_MIN', 'GPVAL_Y_MAX',
+ 'GPVAL_TERM', 'GPVAL_TERMOPTIONS', 'GPVAL_OUTPUT',
+ 'GPVAL_VERSION', 'GPVAL_PATcHLEVEL', 'GPVAL_COMPILE_OPTIONS',
+ 'MOUSE_KEY', 'MOUSE_X', 'MOUSE_X2', 'MOUSE_Y', 'MOUSE_Y2',
+ 'MOUSE_BUTTON', 'MOUSE_SHIFT', 'MOUSE_ALT', 'MOUSE_CTRL'
+ ),
+ 4 => array(
+ // predefined functions `help functions`
+ 'abs', 'acos', 'acosh', 'arg',
+ 'asin', 'asinh', 'atan', 'atan2',
+ 'atanh', 'besj0', 'besj1', 'besy0',
+ 'besy1', 'ceil', 'column', 'cos',
+ 'cosh', 'defined', 'erf', 'erfc',
+ 'exists', 'exp', 'floor', 'gamma',
+ 'gprintf', 'ibeta', 'igamma', 'imag',
+ 'int', 'inverf', 'invnorm', 'lambertw',
+ 'lgamma', 'log10', 'norm',
+ 'rand', 'random', 'real', 'sgn',
+ 'sin', 'sinh', 'sprintf', 'sqrt',
+ 'stringcolumn', 'strlen', 'strstrt', 'substr',
+ 'tan', 'tanh', 'timecolumn',
+ 'tm_hour', 'tm_mday', 'tm_min', 'tm_mon',
+ 'tm_sec', 'tm_wday', 'tm_yday', 'tm_year',
+ 'valid', 'word', 'words',
+ ),
+ 5 => array(
+ // mixed arguments
+ // there is no sane way to get these ones easily...
+ 'autofreq', 'x', 'y', 'z',
+ 'lt', 'linetype', 'lw', 'linewidth', 'ls', 'linestyle',
+ 'out', 'rotate by', 'screen',
+ 'enhanced', 'via',
+ // `help set key`
+ 'on', 'off', 'default', 'inside', 'outside', 'tmargin',
+ 'at', 'left', 'right', 'center', 'top', 'bottom', 'vertical', 'horizontal', 'Left', 'Right',
+ 'noreverse', 'reverse', 'noinvert', 'invert', 'samplen', 'spacing', 'width', 'height',
+ 'noautotitle', 'autotitle', 'noenhanced', 'nobox', 'box',
+
+ // help set terminal postscript
+ 'landscape', 'portrait', 'eps', 'defaultplex', 'simplex', 'duplex',
+ 'fontfile', 'add', 'delete', 'nofontfiles', 'level1', 'leveldefault',
+ 'color', 'colour', 'monochrome', 'solid', 'dashed', 'dashlength', 'dl',
+ 'rounded', 'butt', 'palfuncparam', 'blacktext', 'colortext', 'colourtext',
+ 'font',
+
+ // help set terminal png
+ 'notransparent', 'transparent', 'nointerlace', 'interlace',
+ 'notruecolor', 'truecolor', 'tiny', 'small', 'medium', 'large', 'giant',
+ 'nocrop', 'crop',
+
+ // `help plot`
+ 'acsplines', 'bezier', 'binary', 'csplines',
+ 'every',
+ 'example', 'frequency', 'index', 'matrix',
+ 'ranges', 'sbezier', 'smooth',
+ 'special-filenames', 'thru',
+ 'unique', 'using', 'with',
+
+ // `help plotting styles`
+ 'boxerrorbars', 'boxes', 'boxxyerrorbars', 'candlesticks',
+ 'dots', 'errorbars', 'errorlines', 'filledcurves',
+ 'financebars', 'fsteps', 'histeps', 'histograms',
+ 'image', 'impulses', 'labels', 'lines',
+ 'linespoints', 'points', 'rgbimage', 'steps',
+ 'vectors', 'xerrorbars', 'xerrorlines', 'xyerrorbars',
+ 'xyerrorlines', 'yerrorbars', 'yerrorlines',
+
+
+ // terminals `help terminals`
+ 'aed512', 'aed767', 'aifm', 'bitgraph',
+ 'cgm', 'corel', 'dumb', 'dxf',
+ 'eepic', 'emf', 'emtex', 'epslatex',
+ 'epson-180dpi', 'epson-60dpi', 'epson-lx800', 'fig',
+ 'gif', 'gpic', 'hp2623a', 'hp2648',
+ 'hp500c', 'hpdj', 'hpgl', 'hpljii',
+ 'hppj', 'imagen', 'jpeg', 'kc-tek40xx',
+ 'km-tek40xx', 'latex', 'mf', 'mif',
+ 'mp', 'nec-cp6', 'okidata', 'pbm',
+ 'pcl5', 'png', 'pop', 'postscript',
+ 'pslatex', 'pstex', 'pstricks', 'push',
+ 'qms', 'regis', 'selanar', 'starc',
+ 'svg', 'tandy-60dpi', 'tek40xx', 'tek410x',
+ 'texdraw', 'tgif', 'tkcanvas', 'tpic',
+ 'vttek', 'x11', 'xlib',
+ )
+ ),
+ 'REGEXPS' => array(
+ //Variable assignment
+ 0 => "(?<![?;>\w])([a-zA-Z_][a-zA-Z0-9_]*)\s*=",
+ //Numbers with unit
+ 1 => "(?<=^|\s)([0-9]*\.?[0-9]+\s*cm)"
+ ),
+ 'SYMBOLS' => array(
+ '-', '+', '~', '!', '$',
+ '*', '/', '%', '=', '<', '>', '&',
+ '^', '|', '.', 'eq', 'ne', '?:', ':', '`', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #990000;',
+ 3 => 'color: #550000;',
+ 4 => 'color: #7a0874;',
+ 5 => 'color: #448888;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight:bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000099; font-weight:bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;',
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #007800;',
+ 1 => 'color: #cc66cc;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => 'http://www.google.com/search?q=%22set+{FNAME}%22+site%3Ahttp%3A%2F%2Fwww.gnuplot.info%2Fdocs%2F&amp;btnI=lucky',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 4 => array(
+ 'DISALLOWED_AFTER' => "(?![\.\-a-zA-Z0-9_%])"
+ )
+ )
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php
new file mode 100644
index 000000000..7db153c75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php
@@ -0,0 +1,1011 @@
+<?php
+/*************************************************************************************
+ * groovy.php
+ * ----------
+ * Author: Ivan F. Villanueva B. (geshi_groovy@artificialidea.com)
+ * Copyright: (c) 2006 Ivan F. Villanueva B.(http://www.artificialidea.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/04/29
+ *
+ * Groovy language file for GeSHi.
+ *
+ * Keywords from http: http://docs.codehaus.org/download/attachments/2715/groovy-reference-card.pdf?version=1
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/04/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/04/29)
+ * -------------------------
+ * Testing
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Groovy',
+ 'COMMENT_SINGLE' => array(1 => '//', 3 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Import and Package directives (Basic Support only)
+ 2 => '/(?:(?<=import[\\n\\s])|(?<=package[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*([a-zA-Z0-9_]+|\*)(?=[\n\s;])/i',
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'''", '"""', "'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'case', 'do', 'else', 'for', 'foreach', 'if', 'in', 'switch',
+ 'while',
+ ),
+ 2 => array(
+ 'abstract', 'as', 'assert', 'break', 'catch', 'class', 'const',
+ 'continue', 'def', 'default', 'enum', 'extends',
+ 'false', 'final', 'finally', 'goto', 'implements', 'import',
+ 'instanceof', 'interface', 'native', 'new', 'null',
+ 'package', 'private', 'property', 'protected',
+ 'public', 'return', 'static', 'strictfp', 'super',
+ 'synchronized', 'this', 'throw', 'throws',
+ 'transient', 'true', 'try', 'volatile'
+ ),
+ 3 => array(
+ 'AbstractAction', 'AbstractBorder', 'AbstractButton',
+ 'AbstractCellEditor', 'AbstractCollection',
+ 'AbstractColorChooserPanel', 'AbstractDocument',
+ 'AbstractDocument.AttributeContext',
+ 'AbstractDocument.Content',
+ 'AbstractDocument.ElementEdit',
+ 'AbstractLayoutCache',
+ 'AbstractLayoutCache.NodeDimensions', 'AbstractList',
+ 'AbstractListModel', 'AbstractMap',
+ 'AbstractMethodError', 'AbstractSequentialList',
+ 'AbstractSet', 'AbstractTableModel',
+ 'AbstractUndoableEdit', 'AbstractWriter',
+ 'AccessControlContext', 'AccessControlException',
+ 'AccessController', 'AccessException', 'Accessible',
+ 'AccessibleAction', 'AccessibleBundle',
+ 'AccessibleComponent', 'AccessibleContext',
+ 'AccessibleHyperlink', 'AccessibleHypertext',
+ 'AccessibleIcon', 'AccessibleObject',
+ 'AccessibleRelation', 'AccessibleRelationSet',
+ 'AccessibleResourceBundle', 'AccessibleRole',
+ 'AccessibleSelection', 'AccessibleState',
+ 'AccessibleStateSet', 'AccessibleTable',
+ 'AccessibleTableModelChange', 'AccessibleText',
+ 'AccessibleValue', 'Acl', 'AclEntry',
+ 'AclNotFoundException', 'Action', 'ActionEvent',
+ 'ActionListener', 'ActionMap', 'ActionMapUIResource',
+ 'Activatable', 'ActivateFailedException',
+ 'ActivationDesc', 'ActivationException',
+ 'ActivationGroup', 'ActivationGroupDesc',
+ 'ActivationGroupDesc.CommandEnvironment',
+ 'ActivationGroupID', 'ActivationID',
+ 'ActivationInstantiator', 'ActivationMonitor',
+ 'ActivationSystem', 'Activator', 'ActiveEvent',
+ 'Adjustable', 'AdjustmentEvent',
+ 'AdjustmentListener', 'Adler32', 'AffineTransform',
+ 'AffineTransformOp', 'AlgorithmParameterGenerator',
+ 'AlgorithmParameterGeneratorSpi',
+ 'AlgorithmParameters', 'AlgorithmParameterSpec',
+ 'AlgorithmParametersSpi', 'AllPermission',
+ 'AlphaComposite', 'AlreadyBound',
+ 'AlreadyBoundException', 'AlreadyBoundHelper',
+ 'AlreadyBoundHolder', 'AncestorEvent',
+ 'AncestorListener', 'Annotation', 'Any', 'AnyHolder',
+ 'AnySeqHelper', 'AnySeqHolder', 'Applet',
+ 'AppletContext', 'AppletInitializer', 'AppletStub',
+ 'ApplicationException', 'Arc2D', 'Arc2D.Double',
+ 'Arc2D.Float', 'Area', 'AreaAveragingScaleFilter',
+ 'ARG_IN', 'ARG_INOUT', 'ARG_OUT',
+ 'ArithmeticException', 'Array',
+ 'ArrayIndexOutOfBoundsException', 'ArrayList',
+ 'Arrays', 'ArrayStoreException', 'AsyncBoxView',
+ 'Attribute', 'AttributedCharacterIterator',
+ 'AttributedCharacterIterator.Attribute',
+ 'AttributedString', 'AttributeInUseException',
+ 'AttributeList', 'AttributeModificationException',
+ 'Attributes', 'Attributes.Name', 'AttributeSet',
+ 'AttributeSet.CharacterAttribute',
+ 'AttributeSet.ColorAttribute',
+ 'AttributeSet.FontAttribute',
+ 'AttributeSet.ParagraphAttribute', 'AudioClip',
+ 'AudioFileFormat', 'AudioFileFormat.Type',
+ 'AudioFileReader', 'AudioFileWriter', 'AudioFormat',
+ 'AudioFormat.Encoding', 'AudioInputStream',
+ 'AudioPermission', 'AudioSystem',
+ 'AuthenticationException',
+ 'AuthenticationNotSupportedException',
+ 'Authenticator', 'Autoscroll', 'AWTError',
+ 'AWTEvent', 'AWTEventListener',
+ 'AWTEventMulticaster', 'AWTException',
+ 'AWTPermission', 'BadKind', 'BadLocationException',
+ 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION',
+ 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE',
+ 'BAD_POLICY_VALUE', 'BAD_TYPECODE', 'BandCombineOp',
+ 'BandedSampleModel', 'BasicArrowButton',
+ 'BasicAttribute', 'BasicAttributes', 'BasicBorders',
+ 'BasicBorders.ButtonBorder',
+ 'BasicBorders.FieldBorder',
+ 'BasicBorders.MarginBorder',
+ 'BasicBorders.MenuBarBorder',
+ 'BasicBorders.RadioButtonBorder',
+ 'BasicBorders.SplitPaneBorder',
+ 'BasicBorders.ToggleButtonBorder',
+ 'BasicButtonListener', 'BasicButtonUI',
+ 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI',
+ 'BasicColorChooserUI', 'BasicComboBoxEditor',
+ 'BasicComboBoxEditor.UIResource',
+ 'BasicComboBoxRenderer',
+ 'BasicComboBoxRenderer.UIResource',
+ 'BasicComboBoxUI', 'BasicComboPopup',
+ 'BasicDesktopIconUI', 'BasicDesktopPaneUI',
+ 'BasicDirectoryModel', 'BasicEditorPaneUI',
+ 'BasicFileChooserUI', 'BasicGraphicsUtils',
+ 'BasicHTML', 'BasicIconFactory',
+ 'BasicInternalFrameTitlePane',
+ 'BasicInternalFrameUI', 'BasicLabelUI',
+ 'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI',
+ 'BasicMenuItemUI', 'BasicMenuUI',
+ 'BasicOptionPaneUI',
+ 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI',
+ 'BasicPasswordFieldUI', 'BasicPermission',
+ 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI',
+ 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI',
+ 'BasicRadioButtonUI', 'BasicRootPaneUI',
+ 'BasicScrollBarUI', 'BasicScrollPaneUI',
+ 'BasicSeparatorUI', 'BasicSliderUI',
+ 'BasicSplitPaneDivider', 'BasicSplitPaneUI',
+ 'BasicStroke', 'BasicTabbedPaneUI',
+ 'BasicTableHeaderUI', 'BasicTableUI',
+ 'BasicTextAreaUI', 'BasicTextFieldUI',
+ 'BasicTextPaneUI', 'BasicTextUI',
+ 'BasicTextUI.BasicCaret',
+ 'BasicTextUI.BasicHighlighter',
+ 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI',
+ 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI',
+ 'BasicViewportUI', 'BatchUpdateException',
+ 'BeanContext', 'BeanContextChild',
+ 'BeanContextChildComponentProxy',
+ 'BeanContextChildSupport',
+ 'BeanContextContainerProxy', 'BeanContextEvent',
+ 'BeanContextMembershipEvent',
+ 'BeanContextMembershipListener', 'BeanContextProxy',
+ 'BeanContextServiceAvailableEvent',
+ 'BeanContextServiceProvider',
+ 'BeanContextServiceProviderBeanInfo',
+ 'BeanContextServiceRevokedEvent',
+ 'BeanContextServiceRevokedListener',
+ 'BeanContextServices', 'BeanContextServicesListener',
+ 'BeanContextServicesSupport',
+ 'BeanContextServicesSupport.BCSSServiceProvider',
+ 'BeanContextSupport',
+ 'BeanContextSupport.BCSIterator', 'BeanDescriptor',
+ 'BeanInfo', 'Beans', 'BevelBorder', 'BigDecimal',
+ 'BigInteger', 'BinaryRefAddr', 'BindException',
+ 'Binding', 'BindingHelper', 'BindingHolder',
+ 'BindingIterator', 'BindingIteratorHelper',
+ 'BindingIteratorHolder', 'BindingIteratorOperations',
+ 'BindingListHelper', 'BindingListHolder',
+ 'BindingType', 'BindingTypeHelper',
+ 'BindingTypeHolder', 'BitSet', 'Blob', 'BlockView',
+ 'Book', 'Boolean', 'BooleanControl',
+ 'BooleanControl.Type', 'BooleanHolder',
+ 'BooleanSeqHelper', 'BooleanSeqHolder', 'Border',
+ 'BorderFactory', 'BorderLayout', 'BorderUIResource',
+ 'BorderUIResource.BevelBorderUIResource',
+ 'BorderUIResource.CompoundBorderUIResource',
+ 'BorderUIResource.EmptyBorderUIResource',
+ 'BorderUIResource.EtchedBorderUIResource',
+ 'BorderUIResource.LineBorderUIResource',
+ 'BorderUIResource.MatteBorderUIResource',
+ 'BorderUIResource.TitledBorderUIResource',
+ 'BoundedRangeModel', 'Bounds', 'Box', 'Box.Filler',
+ 'BoxedValueHelper', 'BoxLayout', 'BoxView',
+ 'BreakIterator', 'BufferedImage',
+ 'BufferedImageFilter', 'BufferedImageOp',
+ 'BufferedInputStream', 'BufferedOutputStream',
+ 'BufferedReader', 'BufferedWriter', 'Button',
+ 'ButtonGroup', 'ButtonModel', 'ButtonUI', 'Byte',
+ 'ByteArrayInputStream', 'ByteArrayOutputStream',
+ 'ByteHolder', 'ByteLookupTable', 'Calendar',
+ 'CallableStatement', 'CannotProceed',
+ 'CannotProceedException', 'CannotProceedHelper',
+ 'CannotProceedHolder', 'CannotRedoException',
+ 'CannotUndoException', 'Canvas', 'CardLayout',
+ 'Caret', 'CaretEvent', 'CaretListener', 'CellEditor',
+ 'CellEditorListener', 'CellRendererPane',
+ 'Certificate', 'Certificate.CertificateRep',
+ 'CertificateEncodingException',
+ 'CertificateException',
+ 'CertificateExpiredException', 'CertificateFactory',
+ 'CertificateFactorySpi',
+ 'CertificateNotYetValidException',
+ 'CertificateParsingException',
+ 'ChangedCharSetException', 'ChangeEvent',
+ 'ChangeListener', 'Character', 'Character.Subset',
+ 'Character.UnicodeBlock', 'CharacterIterator',
+ 'CharArrayReader', 'CharArrayWriter',
+ 'CharConversionException', 'CharHolder',
+ 'CharSeqHelper', 'CharSeqHolder', 'Checkbox',
+ 'CheckboxGroup', 'CheckboxMenuItem',
+ 'CheckedInputStream', 'CheckedOutputStream',
+ 'Checksum', 'Choice', 'ChoiceFormat', 'Class',
+ 'ClassCastException', 'ClassCircularityError',
+ 'ClassDesc', 'ClassFormatError', 'ClassLoader',
+ 'ClassNotFoundException', 'Clip', 'Clipboard',
+ 'ClipboardOwner', 'Clob', 'Cloneable',
+ 'CloneNotSupportedException', 'CMMException',
+ 'CodeSource', 'CollationElementIterator',
+ 'CollationKey', 'Collator', 'Collection',
+ 'Collections', 'Color',
+ 'ColorChooserComponentFactory', 'ColorChooserUI',
+ 'ColorConvertOp', 'ColorModel',
+ 'ColorSelectionModel', 'ColorSpace',
+ 'ColorUIResource', 'ComboBoxEditor', 'ComboBoxModel',
+ 'ComboBoxUI', 'ComboPopup', 'CommunicationException',
+ 'COMM_FAILURE', 'Comparable', 'Comparator',
+ 'Compiler', 'CompletionStatus',
+ 'CompletionStatusHelper', 'Component',
+ 'ComponentAdapter', 'ComponentColorModel',
+ 'ComponentEvent', 'ComponentInputMap',
+ 'ComponentInputMapUIResource', 'ComponentListener',
+ 'ComponentOrientation', 'ComponentSampleModel',
+ 'ComponentUI', 'ComponentView', 'Composite',
+ 'CompositeContext', 'CompositeName', 'CompositeView',
+ 'CompoundBorder', 'CompoundControl',
+ 'CompoundControl.Type', 'CompoundEdit',
+ 'CompoundName', 'ConcurrentModificationException',
+ 'ConfigurationException', 'ConnectException',
+ 'ConnectIOException', 'Connection', 'Constructor',
+ 'Container', 'ContainerAdapter', 'ContainerEvent',
+ 'ContainerListener', 'ContentHandler',
+ 'ContentHandlerFactory', 'ContentModel', 'Context',
+ 'ContextList', 'ContextNotEmptyException',
+ 'ContextualRenderedImageFactory', 'Control',
+ 'Control.Type', 'ControlFactory',
+ 'ControllerEventListener', 'ConvolveOp', 'CRC32',
+ 'CRL', 'CRLException', 'CropImageFilter', 'CSS',
+ 'CSS.Attribute', 'CTX_RESTRICT_SCOPE',
+ 'CubicCurve2D', 'CubicCurve2D.Double',
+ 'CubicCurve2D.Float', 'Current', 'CurrentHelper',
+ 'CurrentHolder', 'CurrentOperations', 'Cursor',
+ 'Customizer', 'CustomMarshal', 'CustomValue',
+ 'DatabaseMetaData', 'DataBuffer', 'DataBufferByte',
+ 'DataBufferInt', 'DataBufferShort',
+ 'DataBufferUShort', 'DataFlavor',
+ 'DataFormatException', 'DatagramPacket',
+ 'DatagramSocket', 'DatagramSocketImpl',
+ 'DatagramSocketImplFactory', 'DataInput',
+ 'DataInputStream', 'DataLine', 'DataLine.Info',
+ 'DataOutput', 'DataOutputStream', 'DataTruncation',
+ 'DATA_CONVERSION', 'Date', 'DateFormat',
+ 'DateFormatSymbols', 'DebugGraphics',
+ 'DecimalFormat', 'DecimalFormatSymbols',
+ 'DefaultBoundedRangeModel', 'DefaultButtonModel',
+ 'DefaultCaret', 'DefaultCellEditor',
+ 'DefaultColorSelectionModel', 'DefaultComboBoxModel',
+ 'DefaultDesktopManager', 'DefaultEditorKit',
+ 'DefaultEditorKit.BeepAction',
+ 'DefaultEditorKit.CopyAction',
+ 'DefaultEditorKit.CutAction',
+ 'DefaultEditorKit.DefaultKeyTypedAction',
+ 'DefaultEditorKit.InsertBreakAction',
+ 'DefaultEditorKit.InsertContentAction',
+ 'DefaultEditorKit.InsertTabAction',
+ 'DefaultEditorKit.PasteAction,',
+ 'DefaultFocusManager', 'DefaultHighlighter',
+ 'DefaultHighlighter.DefaultHighlightPainter',
+ 'DefaultListCellRenderer',
+ 'DefaultListCellRenderer.UIResource',
+ 'DefaultListModel', 'DefaultListSelectionModel',
+ 'DefaultMenuLayout', 'DefaultMetalTheme',
+ 'DefaultMutableTreeNode',
+ 'DefaultSingleSelectionModel',
+ 'DefaultStyledDocument',
+ 'DefaultStyledDocument.AttributeUndoableEdit',
+ 'DefaultStyledDocument.ElementSpec',
+ 'DefaultTableCellRenderer',
+ 'DefaultTableCellRenderer.UIResource',
+ 'DefaultTableColumnModel', 'DefaultTableModel',
+ 'DefaultTextUI', 'DefaultTreeCellEditor',
+ 'DefaultTreeCellRenderer', 'DefaultTreeModel',
+ 'DefaultTreeSelectionModel', 'DefinitionKind',
+ 'DefinitionKindHelper', 'Deflater',
+ 'DeflaterOutputStream', 'Delegate', 'DesignMode',
+ 'DesktopIconUI', 'DesktopManager', 'DesktopPaneUI',
+ 'DGC', 'Dialog', 'Dictionary', 'DigestException',
+ 'DigestInputStream', 'DigestOutputStream',
+ 'Dimension', 'Dimension2D', 'DimensionUIResource',
+ 'DirContext', 'DirectColorModel', 'DirectoryManager',
+ 'DirObjectFactory', 'DirStateFactory',
+ 'DirStateFactory.Result', 'DnDConstants', 'Document',
+ 'DocumentEvent', 'DocumentEvent.ElementChange',
+ 'DocumentEvent.EventType', 'DocumentListener',
+ 'DocumentParser', 'DomainCombiner', 'DomainManager',
+ 'DomainManagerOperations', 'Double', 'DoubleHolder',
+ 'DoubleSeqHelper', 'DoubleSeqHolder',
+ 'DragGestureEvent', 'DragGestureListener',
+ 'DragGestureRecognizer', 'DragSource',
+ 'DragSourceContext', 'DragSourceDragEvent',
+ 'DragSourceDropEvent', 'DragSourceEvent',
+ 'DragSourceListener', 'Driver', 'DriverManager',
+ 'DriverPropertyInfo', 'DropTarget',
+ 'DropTarget.DropTargetAutoScroller',
+ 'DropTargetContext', 'DropTargetDragEvent',
+ 'DropTargetDropEvent', 'DropTargetEvent',
+ 'DropTargetListener', 'DSAKey',
+ 'DSAKeyPairGenerator', 'DSAParameterSpec',
+ 'DSAParams', 'DSAPrivateKey', 'DSAPrivateKeySpec',
+ 'DSAPublicKey', 'DSAPublicKeySpec', 'DTD',
+ 'DTDConstants', 'DynamicImplementation', 'DynAny',
+ 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence',
+ 'DynStruct', 'DynUnion', 'DynValue', 'EditorKit',
+ 'Element', 'ElementIterator', 'Ellipse2D',
+ 'Ellipse2D.Double', 'Ellipse2D.Float', 'EmptyBorder',
+ 'EmptyStackException', 'EncodedKeySpec', 'Entity',
+ 'EnumControl', 'EnumControl.Type', 'Enumeration',
+ 'Environment', 'EOFException', 'Error',
+ 'EtchedBorder', 'Event', 'EventContext',
+ 'EventDirContext', 'EventListener',
+ 'EventListenerList', 'EventObject', 'EventQueue',
+ 'EventSetDescriptor', 'Exception',
+ 'ExceptionInInitializerError', 'ExceptionList',
+ 'ExpandVetoException', 'ExportException',
+ 'ExtendedRequest', 'ExtendedResponse',
+ 'Externalizable', 'FeatureDescriptor', 'Field',
+ 'FieldNameHelper', 'FieldPosition', 'FieldView',
+ 'File', 'FileChooserUI', 'FileDescriptor',
+ 'FileDialog', 'FileFilter', 'FileInputStream',
+ 'FilenameFilter', 'FileNameMap',
+ 'FileNotFoundException', 'FileOutputStream',
+ 'FilePermission', 'FileReader', 'FileSystemView',
+ 'FileView', 'FileWriter', 'FilteredImageSource',
+ 'FilterInputStream', 'FilterOutputStream',
+ 'FilterReader', 'FilterWriter',
+ 'FixedHeightLayoutCache', 'FixedHolder',
+ 'FlatteningPathIterator', 'FlavorMap', 'Float',
+ 'FloatControl', 'FloatControl.Type', 'FloatHolder',
+ 'FloatSeqHelper', 'FloatSeqHolder', 'FlowLayout',
+ 'FlowView', 'FlowView.FlowStrategy', 'FocusAdapter',
+ 'FocusEvent', 'FocusListener', 'FocusManager',
+ 'Font', 'FontFormatException', 'FontMetrics',
+ 'FontRenderContext', 'FontUIResource', 'Format',
+ 'FormatConversionProvider', 'FormView', 'Frame',
+ 'FREE_MEM', 'GapContent', 'GeneralPath',
+ 'GeneralSecurityException', 'GlyphJustificationInfo',
+ 'GlyphMetrics', 'GlyphVector', 'GlyphView',
+ 'GlyphView.GlyphPainter', 'GradientPaint',
+ 'GraphicAttribute', 'Graphics', 'Graphics2D',
+ 'GraphicsConfigTemplate', 'GraphicsConfiguration',
+ 'GraphicsDevice', 'GraphicsEnvironment',
+ 'GrayFilter', 'GregorianCalendar',
+ 'GridBagConstraints', 'GridBagLayout', 'GridLayout',
+ 'Group', 'Guard', 'GuardedObject', 'GZIPInputStream',
+ 'GZIPOutputStream', 'HasControls', 'HashMap',
+ 'HashSet', 'Hashtable', 'HierarchyBoundsAdapter',
+ 'HierarchyBoundsListener', 'HierarchyEvent',
+ 'HierarchyListener', 'Highlighter',
+ 'Highlighter.Highlight',
+ 'Highlighter.HighlightPainter', 'HTML',
+ 'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag',
+ 'HTMLDocument', 'HTMLDocument.Iterator',
+ 'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory',
+ 'HTMLEditorKit.HTMLTextAction',
+ 'HTMLEditorKit.InsertHTMLTextAction',
+ 'HTMLEditorKit.LinkController',
+ 'HTMLEditorKit.Parser',
+ 'HTMLEditorKit.ParserCallback',
+ 'HTMLFrameHyperlinkEvent', 'HTMLWriter',
+ 'HttpURLConnection', 'HyperlinkEvent',
+ 'HyperlinkEvent.EventType', 'HyperlinkListener',
+ 'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray',
+ 'ICC_ProfileRGB', 'Icon', 'IconUIResource',
+ 'IconView', 'IdentifierHelper', 'Identity',
+ 'IdentityScope', 'IDLEntity', 'IDLType',
+ 'IDLTypeHelper', 'IDLTypeOperations',
+ 'IllegalAccessError', 'IllegalAccessException',
+ 'IllegalArgumentException',
+ 'IllegalComponentStateException',
+ 'IllegalMonitorStateException',
+ 'IllegalPathStateException', 'IllegalStateException',
+ 'IllegalThreadStateException', 'Image',
+ 'ImageConsumer', 'ImageFilter',
+ 'ImageGraphicAttribute', 'ImageIcon',
+ 'ImageObserver', 'ImageProducer',
+ 'ImagingOpException', 'IMP_LIMIT',
+ 'IncompatibleClassChangeError',
+ 'InconsistentTypeCode', 'IndexColorModel',
+ 'IndexedPropertyDescriptor',
+ 'IndexOutOfBoundsException', 'IndirectionException',
+ 'InetAddress', 'Inflater', 'InflaterInputStream',
+ 'InheritableThreadLocal', 'InitialContext',
+ 'InitialContextFactory',
+ 'InitialContextFactoryBuilder', 'InitialDirContext',
+ 'INITIALIZE', 'Initializer', 'InitialLdapContext',
+ 'InlineView', 'InputContext', 'InputEvent',
+ 'InputMap', 'InputMapUIResource', 'InputMethod',
+ 'InputMethodContext', 'InputMethodDescriptor',
+ 'InputMethodEvent', 'InputMethodHighlight',
+ 'InputMethodListener', 'InputMethodRequests',
+ 'InputStream', 'InputStreamReader', 'InputSubset',
+ 'InputVerifier', 'Insets', 'InsetsUIResource',
+ 'InstantiationError', 'InstantiationException',
+ 'Instrument', 'InsufficientResourcesException',
+ 'Integer', 'INTERNAL', 'InternalError',
+ 'InternalFrameAdapter', 'InternalFrameEvent',
+ 'InternalFrameListener', 'InternalFrameUI',
+ 'InterruptedException', 'InterruptedIOException',
+ 'InterruptedNamingException', 'INTF_REPOS',
+ 'IntHolder', 'IntrospectionException',
+ 'Introspector', 'Invalid',
+ 'InvalidAlgorithmParameterException',
+ 'InvalidAttributeIdentifierException',
+ 'InvalidAttributesException',
+ 'InvalidAttributeValueException',
+ 'InvalidClassException',
+ 'InvalidDnDOperationException',
+ 'InvalidKeyException', 'InvalidKeySpecException',
+ 'InvalidMidiDataException', 'InvalidName',
+ 'InvalidNameException', 'InvalidNameHelper',
+ 'InvalidNameHolder', 'InvalidObjectException',
+ 'InvalidParameterException',
+ 'InvalidParameterSpecException',
+ 'InvalidSearchControlsException',
+ 'InvalidSearchFilterException', 'InvalidSeq',
+ 'InvalidTransactionException', 'InvalidValue',
+ 'INVALID_TRANSACTION', 'InvocationEvent',
+ 'InvocationHandler', 'InvocationTargetException',
+ 'InvokeHandler', 'INV_FLAG', 'INV_IDENT',
+ 'INV_OBJREF', 'INV_POLICY', 'IOException',
+ 'IRObject', 'IRObjectOperations', 'IstringHelper',
+ 'ItemEvent', 'ItemListener', 'ItemSelectable',
+ 'Iterator', 'JApplet', 'JarEntry', 'JarException',
+ 'JarFile', 'JarInputStream', 'JarOutputStream',
+ 'JarURLConnection', 'JButton', 'JCheckBox',
+ 'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox',
+ 'JComboBox.KeySelectionManager', 'JComponent',
+ 'JDesktopPane', 'JDialog', 'JEditorPane',
+ 'JFileChooser', 'JFrame', 'JInternalFrame',
+ 'JInternalFrame.JDesktopIcon', 'JLabel',
+ 'JLayeredPane', 'JList', 'JMenu', 'JMenuBar',
+ 'JMenuItem', 'JobAttributes',
+ 'JobAttributes.DefaultSelectionType',
+ 'JobAttributes.DestinationType',
+ 'JobAttributes.DialogType',
+ 'JobAttributes.MultipleDocumentHandlingType',
+ 'JobAttributes.SidesType', 'JOptionPane', 'JPanel',
+ 'JPasswordField', 'JPopupMenu',
+ 'JPopupMenu.Separator', 'JProgressBar',
+ 'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane',
+ 'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider',
+ 'JSplitPane', 'JTabbedPane', 'JTable',
+ 'JTableHeader', 'JTextArea', 'JTextComponent',
+ 'JTextComponent.KeyBinding', 'JTextField',
+ 'JTextPane', 'JToggleButton',
+ 'JToggleButton.ToggleButtonModel', 'JToolBar',
+ 'JToolBar.Separator', 'JToolTip', 'JTree',
+ 'JTree.DynamicUtilTreeNode',
+ 'JTree.EmptySelectionModel', 'JViewport', 'JWindow',
+ 'Kernel', 'Key', 'KeyAdapter', 'KeyEvent',
+ 'KeyException', 'KeyFactory', 'KeyFactorySpi',
+ 'KeyListener', 'KeyManagementException', 'Keymap',
+ 'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi',
+ 'KeySpec', 'KeyStore', 'KeyStoreException',
+ 'KeyStoreSpi', 'KeyStroke', 'Label', 'LabelUI',
+ 'LabelView', 'LastOwnerException',
+ 'LayeredHighlighter',
+ 'LayeredHighlighter.LayerPainter', 'LayoutManager',
+ 'LayoutManager2', 'LayoutQueue', 'LdapContext',
+ 'LdapReferralException', 'Lease',
+ 'LimitExceededException', 'Line', 'Line.Info',
+ 'Line2D', 'Line2D.Double', 'Line2D.Float',
+ 'LineBorder', 'LineBreakMeasurer', 'LineEvent',
+ 'LineEvent.Type', 'LineListener', 'LineMetrics',
+ 'LineNumberInputStream', 'LineNumberReader',
+ 'LineUnavailableException', 'LinkageError',
+ 'LinkedList', 'LinkException', 'LinkLoopException',
+ 'LinkRef', 'List', 'ListCellRenderer',
+ 'ListDataEvent', 'ListDataListener', 'ListIterator',
+ 'ListModel', 'ListResourceBundle',
+ 'ListSelectionEvent', 'ListSelectionListener',
+ 'ListSelectionModel', 'ListUI', 'ListView',
+ 'LoaderHandler', 'Locale', 'LocateRegistry',
+ 'LogStream', 'Long', 'LongHolder',
+ 'LongLongSeqHelper', 'LongLongSeqHolder',
+ 'LongSeqHelper', 'LongSeqHolder', 'LookAndFeel',
+ 'LookupOp', 'LookupTable', 'MalformedLinkException',
+ 'MalformedURLException', 'Manifest', 'Map',
+ 'Map.Entry', 'MARSHAL', 'MarshalException',
+ 'MarshalledObject', 'Math', 'MatteBorder',
+ 'MediaTracker', 'Member', 'MemoryImageSource',
+ 'Menu', 'MenuBar', 'MenuBarUI', 'MenuComponent',
+ 'MenuContainer', 'MenuDragMouseEvent',
+ 'MenuDragMouseListener', 'MenuElement', 'MenuEvent',
+ 'MenuItem', 'MenuItemUI', 'MenuKeyEvent',
+ 'MenuKeyListener', 'MenuListener',
+ 'MenuSelectionManager', 'MenuShortcut',
+ 'MessageDigest', 'MessageDigestSpi', 'MessageFormat',
+ 'MetaEventListener', 'MetalBorders',
+ 'MetalBorders.ButtonBorder',
+ 'MetalBorders.Flush3DBorder',
+ 'MetalBorders.InternalFrameBorder',
+ 'MetalBorders.MenuBarBorder',
+ 'MetalBorders.MenuItemBorder',
+ 'MetalBorders.OptionDialogBorder',
+ 'MetalBorders.PaletteBorder',
+ 'MetalBorders.PopupMenuBorder',
+ 'MetalBorders.RolloverButtonBorder',
+ 'MetalBorders.ScrollPaneBorder',
+ 'MetalBorders.TableHeaderBorder',
+ 'MetalBorders.TextFieldBorder',
+ 'MetalBorders.ToggleButtonBorder',
+ 'MetalBorders.ToolBarBorder', 'MetalButtonUI',
+ 'MetalCheckBoxIcon', 'MetalCheckBoxUI',
+ 'MetalComboBoxButton', 'MetalComboBoxEditor',
+ 'MetalComboBoxEditor.UIResource',
+ 'MetalComboBoxIcon', 'MetalComboBoxUI',
+ 'MetalDesktopIconUI', 'MetalFileChooserUI',
+ 'MetalIconFactory', 'MetalIconFactory.FileIcon16',
+ 'MetalIconFactory.FolderIcon16',
+ 'MetalIconFactory.PaletteCloseIcon',
+ 'MetalIconFactory.TreeControlIcon',
+ 'MetalIconFactory.TreeFolderIcon',
+ 'MetalIconFactory.TreeLeafIcon',
+ 'MetalInternalFrameTitlePane',
+ 'MetalInternalFrameUI', 'MetalLabelUI',
+ 'MetalLookAndFeel', 'MetalPopupMenuSeparatorUI',
+ 'MetalProgressBarUI', 'MetalRadioButtonUI',
+ 'MetalScrollBarUI', 'MetalScrollButton',
+ 'MetalScrollPaneUI', 'MetalSeparatorUI',
+ 'MetalSliderUI', 'MetalSplitPaneUI',
+ 'MetalTabbedPaneUI', 'MetalTextFieldUI',
+ 'MetalTheme', 'MetalToggleButtonUI',
+ 'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI',
+ 'MetaMessage', 'Method', 'MethodDescriptor',
+ 'MidiChannel', 'MidiDevice', 'MidiDevice.Info',
+ 'MidiDeviceProvider', 'MidiEvent', 'MidiFileFormat',
+ 'MidiFileReader', 'MidiFileWriter', 'MidiMessage',
+ 'MidiSystem', 'MidiUnavailableException',
+ 'MimeTypeParseException', 'MinimalHTMLWriter',
+ 'MissingResourceException', 'Mixer', 'Mixer.Info',
+ 'MixerProvider', 'ModificationItem', 'Modifier',
+ 'MouseAdapter', 'MouseDragGestureRecognizer',
+ 'MouseEvent', 'MouseInputAdapter',
+ 'MouseInputListener', 'MouseListener',
+ 'MouseMotionAdapter', 'MouseMotionListener',
+ 'MultiButtonUI', 'MulticastSocket',
+ 'MultiColorChooserUI', 'MultiComboBoxUI',
+ 'MultiDesktopIconUI', 'MultiDesktopPaneUI',
+ 'MultiFileChooserUI', 'MultiInternalFrameUI',
+ 'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel',
+ 'MultiMenuBarUI', 'MultiMenuItemUI',
+ 'MultiOptionPaneUI', 'MultiPanelUI',
+ 'MultiPixelPackedSampleModel', 'MultipleMaster',
+ 'MultiPopupMenuUI', 'MultiProgressBarUI',
+ 'MultiScrollBarUI', 'MultiScrollPaneUI',
+ 'MultiSeparatorUI', 'MultiSliderUI',
+ 'MultiSplitPaneUI', 'MultiTabbedPaneUI',
+ 'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI',
+ 'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI',
+ 'MultiViewportUI', 'MutableAttributeSet',
+ 'MutableComboBoxModel', 'MutableTreeNode', 'Name',
+ 'NameAlreadyBoundException', 'NameClassPair',
+ 'NameComponent', 'NameComponentHelper',
+ 'NameComponentHolder', 'NamedValue', 'NameHelper',
+ 'NameHolder', 'NameNotFoundException', 'NameParser',
+ 'NamespaceChangeListener', 'NameValuePair',
+ 'NameValuePairHelper', 'Naming', 'NamingContext',
+ 'NamingContextHelper', 'NamingContextHolder',
+ 'NamingContextOperations', 'NamingEnumeration',
+ 'NamingEvent', 'NamingException',
+ 'NamingExceptionEvent', 'NamingListener',
+ 'NamingManager', 'NamingSecurityException',
+ 'NegativeArraySizeException', 'NetPermission',
+ 'NoClassDefFoundError', 'NoInitialContextException',
+ 'NoninvertibleTransformException',
+ 'NoPermissionException', 'NoRouteToHostException',
+ 'NoSuchAlgorithmException',
+ 'NoSuchAttributeException', 'NoSuchElementException',
+ 'NoSuchFieldError', 'NoSuchFieldException',
+ 'NoSuchMethodError', 'NoSuchMethodException',
+ 'NoSuchObjectException', 'NoSuchProviderException',
+ 'NotActiveException', 'NotBoundException',
+ 'NotContextException', 'NotEmpty', 'NotEmptyHelper',
+ 'NotEmptyHolder', 'NotFound', 'NotFoundHelper',
+ 'NotFoundHolder', 'NotFoundReason',
+ 'NotFoundReasonHelper', 'NotFoundReasonHolder',
+ 'NotOwnerException', 'NotSerializableException',
+ 'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION',
+ 'NO_RESOURCES', 'NO_RESPONSE',
+ 'NullPointerException', 'Number', 'NumberFormat',
+ 'NumberFormatException', 'NVList', 'Object',
+ 'ObjectChangeListener', 'ObjectFactory',
+ 'ObjectFactoryBuilder', 'ObjectHelper',
+ 'ObjectHolder', 'ObjectImpl', 'ObjectInput',
+ 'ObjectInputStream', 'ObjectInputStream.GetField',
+ 'ObjectInputValidation', 'ObjectOutput',
+ 'ObjectOutputStream', 'ObjectOutputStream.PutField',
+ 'ObjectStreamClass', 'ObjectStreamConstants',
+ 'ObjectStreamException', 'ObjectStreamField',
+ 'ObjectView', 'OBJECT_NOT_EXIST', 'ObjID',
+ 'OBJ_ADAPTER', 'Observable', 'Observer',
+ 'OctetSeqHelper', 'OctetSeqHolder', 'OMGVMCID',
+ 'OpenType', 'Operation',
+ 'OperationNotSupportedException', 'Option',
+ 'OptionalDataException', 'OptionPaneUI', 'ORB',
+ 'OutOfMemoryError', 'OutputStream',
+ 'OutputStreamWriter', 'OverlayLayout', 'Owner',
+ 'Package', 'PackedColorModel', 'Pageable',
+ 'PageAttributes', 'PageAttributes.ColorType',
+ 'PageAttributes.MediaType',
+ 'PageAttributes.OrientationRequestedType',
+ 'PageAttributes.OriginType',
+ 'PageAttributes.PrintQualityType', 'PageFormat',
+ 'Paint', 'PaintContext', 'PaintEvent', 'Panel',
+ 'PanelUI', 'Paper', 'ParagraphView',
+ 'ParameterBlock', 'ParameterDescriptor',
+ 'ParseException', 'ParsePosition', 'Parser',
+ 'ParserDelegator', 'PartialResultException',
+ 'PasswordAuthentication', 'PasswordView', 'Patch',
+ 'PathIterator', 'Permission', 'PermissionCollection',
+ 'Permissions', 'PERSIST_STORE', 'PhantomReference',
+ 'PipedInputStream', 'PipedOutputStream',
+ 'PipedReader', 'PipedWriter', 'PixelGrabber',
+ 'PixelInterleavedSampleModel', 'PKCS8EncodedKeySpec',
+ 'PlainDocument', 'PlainView', 'Point', 'Point2D',
+ 'Point2D.Double', 'Point2D.Float', 'Policy',
+ 'PolicyError', 'PolicyHelper', 'PolicyHolder',
+ 'PolicyListHelper', 'PolicyListHolder',
+ 'PolicyOperations', 'PolicyTypeHelper', 'Polygon',
+ 'PopupMenu', 'PopupMenuEvent', 'PopupMenuListener',
+ 'PopupMenuUI', 'Port', 'Port.Info',
+ 'PortableRemoteObject',
+ 'PortableRemoteObjectDelegate', 'Position',
+ 'Position.Bias', 'PreparedStatement', 'Principal',
+ 'PrincipalHolder', 'Printable',
+ 'PrinterAbortException', 'PrinterException',
+ 'PrinterGraphics', 'PrinterIOException',
+ 'PrinterJob', 'PrintGraphics', 'PrintJob',
+ 'PrintStream', 'PrintWriter', 'PrivateKey',
+ 'PRIVATE_MEMBER', 'PrivilegedAction',
+ 'PrivilegedActionException',
+ 'PrivilegedExceptionAction', 'Process',
+ 'ProfileDataException', 'ProgressBarUI',
+ 'ProgressMonitor', 'ProgressMonitorInputStream',
+ 'Properties', 'PropertyChangeEvent',
+ 'PropertyChangeListener', 'PropertyChangeSupport',
+ 'PropertyDescriptor', 'PropertyEditor',
+ 'PropertyEditorManager', 'PropertyEditorSupport',
+ 'PropertyPermission', 'PropertyResourceBundle',
+ 'PropertyVetoException', 'ProtectionDomain',
+ 'ProtocolException', 'Provider', 'ProviderException',
+ 'Proxy', 'PublicKey', 'PUBLIC_MEMBER',
+ 'PushbackInputStream', 'PushbackReader',
+ 'QuadCurve2D', 'QuadCurve2D.Double',
+ 'QuadCurve2D.Float', 'Random', 'RandomAccessFile',
+ 'Raster', 'RasterFormatException', 'RasterOp',
+ 'Reader', 'Receiver', 'Rectangle', 'Rectangle2D',
+ 'Rectangle2D.Double', 'Rectangle2D.Float',
+ 'RectangularShape', 'Ref', 'RefAddr', 'Reference',
+ 'Referenceable', 'ReferenceQueue',
+ 'ReferralException', 'ReflectPermission', 'Registry',
+ 'RegistryHandler', 'RemarshalException', 'Remote',
+ 'RemoteCall', 'RemoteException', 'RemoteObject',
+ 'RemoteRef', 'RemoteServer', 'RemoteStub',
+ 'RenderableImage', 'RenderableImageOp',
+ 'RenderableImageProducer', 'RenderContext',
+ 'RenderedImage', 'RenderedImageFactory', 'Renderer',
+ 'RenderingHints', 'RenderingHints.Key',
+ 'RepaintManager', 'ReplicateScaleFilter',
+ 'Repository', 'RepositoryIdHelper', 'Request',
+ 'RescaleOp', 'Resolver', 'ResolveResult',
+ 'ResourceBundle', 'ResponseHandler', 'ResultSet',
+ 'ResultSetMetaData', 'ReverbType', 'RGBImageFilter',
+ 'RMIClassLoader', 'RMIClientSocketFactory',
+ 'RMIFailureHandler', 'RMISecurityException',
+ 'RMISecurityManager', 'RMIServerSocketFactory',
+ 'RMISocketFactory', 'Robot', 'RootPaneContainer',
+ 'RootPaneUI', 'RoundRectangle2D',
+ 'RoundRectangle2D.Double', 'RoundRectangle2D.Float',
+ 'RowMapper', 'RSAKey', 'RSAKeyGenParameterSpec',
+ 'RSAPrivateCrtKey', 'RSAPrivateCrtKeySpec',
+ 'RSAPrivateKey', 'RSAPrivateKeySpec', 'RSAPublicKey',
+ 'RSAPublicKeySpec', 'RTFEditorKit',
+ 'RuleBasedCollator', 'Runnable', 'Runtime',
+ 'RunTime', 'RuntimeException', 'RunTimeOperations',
+ 'RuntimePermission', 'SampleModel',
+ 'SchemaViolationException', 'Scrollable',
+ 'Scrollbar', 'ScrollBarUI', 'ScrollPane',
+ 'ScrollPaneConstants', 'ScrollPaneLayout',
+ 'ScrollPaneLayout.UIResource', 'ScrollPaneUI',
+ 'SearchControls', 'SearchResult',
+ 'SecureClassLoader', 'SecureRandom',
+ 'SecureRandomSpi', 'Security', 'SecurityException',
+ 'SecurityManager', 'SecurityPermission', 'Segment',
+ 'SeparatorUI', 'Sequence', 'SequenceInputStream',
+ 'Sequencer', 'Sequencer.SyncMode', 'Serializable',
+ 'SerializablePermission', 'ServantObject',
+ 'ServerCloneException', 'ServerError',
+ 'ServerException', 'ServerNotActiveException',
+ 'ServerRef', 'ServerRequest',
+ 'ServerRuntimeException', 'ServerSocket',
+ 'ServiceDetail', 'ServiceDetailHelper',
+ 'ServiceInformation', 'ServiceInformationHelper',
+ 'ServiceInformationHolder',
+ 'ServiceUnavailableException', 'Set',
+ 'SetOverrideType', 'SetOverrideTypeHelper', 'Shape',
+ 'ShapeGraphicAttribute', 'Short', 'ShortHolder',
+ 'ShortLookupTable', 'ShortMessage', 'ShortSeqHelper',
+ 'ShortSeqHolder', 'Signature', 'SignatureException',
+ 'SignatureSpi', 'SignedObject', 'Signer',
+ 'SimpleAttributeSet', 'SimpleBeanInfo',
+ 'SimpleDateFormat', 'SimpleTimeZone',
+ 'SinglePixelPackedSampleModel',
+ 'SingleSelectionModel', 'SizeLimitExceededException',
+ 'SizeRequirements', 'SizeSequence', 'Skeleton',
+ 'SkeletonMismatchException',
+ 'SkeletonNotFoundException', 'SliderUI', 'Socket',
+ 'SocketException', 'SocketImpl', 'SocketImplFactory',
+ 'SocketOptions', 'SocketPermission',
+ 'SocketSecurityException', 'SoftBevelBorder',
+ 'SoftReference', 'SortedMap', 'SortedSet',
+ 'Soundbank', 'SoundbankReader', 'SoundbankResource',
+ 'SourceDataLine', 'SplitPaneUI', 'SQLData',
+ 'SQLException', 'SQLInput', 'SQLOutput',
+ 'SQLPermission', 'SQLWarning', 'Stack',
+ 'StackOverflowError', 'StateEdit', 'StateEditable',
+ 'StateFactory', 'Statement', 'Streamable',
+ 'StreamableValue', 'StreamCorruptedException',
+ 'StreamTokenizer', 'StrictMath', 'String',
+ 'StringBuffer', 'StringBufferInputStream',
+ 'StringCharacterIterator', 'StringContent',
+ 'StringHolder', 'StringIndexOutOfBoundsException',
+ 'StringReader', 'StringRefAddr', 'StringSelection',
+ 'StringTokenizer', 'StringValueHelper',
+ 'StringWriter', 'Stroke', 'Struct', 'StructMember',
+ 'StructMemberHelper', 'Stub', 'StubDelegate',
+ 'StubNotFoundException', 'Style', 'StyleConstants',
+ 'StyleConstants.CharacterConstants',
+ 'StyleConstants.ColorConstants',
+ 'StyleConstants.FontConstants',
+ 'StyleConstants.ParagraphConstants', 'StyleContext',
+ 'StyledDocument', 'StyledEditorKit',
+ 'StyledEditorKit.AlignmentAction',
+ 'StyledEditorKit.BoldAction',
+ 'StyledEditorKit.FontFamilyAction',
+ 'StyledEditorKit.FontSizeAction',
+ 'StyledEditorKit.ForegroundAction',
+ 'StyledEditorKit.ItalicAction',
+ 'StyledEditorKit.StyledTextAction',
+ 'StyledEditorKit.UnderlineAction', 'StyleSheet',
+ 'StyleSheet.BoxPainter', 'StyleSheet.ListPainter',
+ 'SwingConstants', 'SwingPropertyChangeSupport',
+ 'SwingUtilities', 'SyncFailedException',
+ 'Synthesizer', 'SysexMessage', 'System',
+ 'SystemColor', 'SystemException', 'SystemFlavorMap',
+ 'TabableView', 'TabbedPaneUI', 'TabExpander',
+ 'TableCellEditor', 'TableCellRenderer',
+ 'TableColumn', 'TableColumnModel',
+ 'TableColumnModelEvent', 'TableColumnModelListener',
+ 'TableHeaderUI', 'TableModel', 'TableModelEvent',
+ 'TableModelListener', 'TableUI', 'TableView',
+ 'TabSet', 'TabStop', 'TagElement', 'TargetDataLine',
+ 'TCKind', 'TextAction', 'TextArea', 'TextAttribute',
+ 'TextComponent', 'TextEvent', 'TextField',
+ 'TextHitInfo', 'TextLayout',
+ 'TextLayout.CaretPolicy', 'TextListener',
+ 'TextMeasurer', 'TextUI', 'TexturePaint', 'Thread',
+ 'ThreadDeath', 'ThreadGroup', 'ThreadLocal',
+ 'Throwable', 'Tie', 'TileObserver', 'Time',
+ 'TimeLimitExceededException', 'Timer', 'TimerTask',
+ 'Timestamp', 'TimeZone', 'TitledBorder', 'ToolBarUI',
+ 'Toolkit', 'ToolTipManager', 'ToolTipUI',
+ 'TooManyListenersException', 'Track',
+ 'TransactionRequiredException',
+ 'TransactionRolledbackException',
+ 'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK',
+ 'Transferable', 'TransformAttribute', 'TRANSIENT',
+ 'Transmitter', 'Transparency', 'TreeCellEditor',
+ 'TreeCellRenderer', 'TreeExpansionEvent',
+ 'TreeExpansionListener', 'TreeMap', 'TreeModel',
+ 'TreeModelEvent', 'TreeModelListener', 'TreeNode',
+ 'TreePath', 'TreeSelectionEvent',
+ 'TreeSelectionListener', 'TreeSelectionModel',
+ 'TreeSet', 'TreeUI', 'TreeWillExpandListener',
+ 'TypeCode', 'TypeCodeHolder', 'TypeMismatch',
+ 'Types', 'UID', 'UIDefaults',
+ 'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap',
+ 'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue',
+ 'UIManager', 'UIManager.LookAndFeelInfo',
+ 'UIResource', 'ULongLongSeqHelper',
+ 'ULongLongSeqHolder', 'ULongSeqHelper',
+ 'ULongSeqHolder', 'UndeclaredThrowableException',
+ 'UndoableEdit', 'UndoableEditEvent',
+ 'UndoableEditListener', 'UndoableEditSupport',
+ 'UndoManager', 'UnexpectedException',
+ 'UnicastRemoteObject', 'UnionMember',
+ 'UnionMemberHelper', 'UNKNOWN', 'UnknownError',
+ 'UnknownException', 'UnknownGroupException',
+ 'UnknownHostException', 'UnknownObjectException',
+ 'UnknownServiceException', 'UnknownUserException',
+ 'UnmarshalException', 'UnrecoverableKeyException',
+ 'Unreferenced', 'UnresolvedPermission',
+ 'UnsatisfiedLinkError', 'UnsolicitedNotification',
+ 'UnsolicitedNotificationEvent',
+ 'UnsolicitedNotificationListener',
+ 'UnsupportedAudioFileException',
+ 'UnsupportedClassVersionError',
+ 'UnsupportedEncodingException',
+ 'UnsupportedFlavorException',
+ 'UnsupportedLookAndFeelException',
+ 'UnsupportedOperationException',
+ 'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE',
+ 'URL', 'URLClassLoader', 'URLConnection',
+ 'URLDecoder', 'URLEncoder', 'URLStreamHandler',
+ 'URLStreamHandlerFactory', 'UserException',
+ 'UShortSeqHelper', 'UShortSeqHolder',
+ 'UTFDataFormatException', 'Util', 'UtilDelegate',
+ 'Utilities', 'ValueBase', 'ValueBaseHelper',
+ 'ValueBaseHolder', 'ValueFactory', 'ValueHandler',
+ 'ValueMember', 'ValueMemberHelper',
+ 'VariableHeightLayoutCache', 'Vector', 'VerifyError',
+ 'VersionSpecHelper', 'VetoableChangeListener',
+ 'VetoableChangeSupport', 'View', 'ViewFactory',
+ 'ViewportLayout', 'ViewportUI',
+ 'VirtualMachineError', 'Visibility',
+ 'VisibilityHelper', 'VMID', 'VM_ABSTRACT',
+ 'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE',
+ 'VoiceStatus', 'Void', 'WCharSeqHelper',
+ 'WCharSeqHolder', 'WeakHashMap', 'WeakReference',
+ 'Window', 'WindowAdapter', 'WindowConstants',
+ 'WindowEvent', 'WindowListener', 'WrappedPlainView',
+ 'WritableRaster', 'WritableRenderedImage',
+ 'WriteAbortedException', 'Writer',
+ 'WrongTransaction', 'WStringValueHelper',
+ 'X509Certificate', 'X509CRL', 'X509CRLEntry',
+ 'X509EncodedKeySpec', 'X509Extension', 'ZipEntry',
+ 'ZipException', 'ZipFile', 'ZipInputStream',
+ 'ZipOutputStream', 'ZoneView',
+ '_BindingIteratorImplBase', '_BindingIteratorStub',
+ '_IDLTypeStub', '_NamingContextImplBase',
+ '_NamingContextStub', '_PolicyStub', '_Remote_Stub'
+ ),
+ 4 => array(
+ 'boolean', 'byte', 'char', 'double', 'float', 'int', 'long',
+ 'short', 'void'
+ ),
+ 5 => array(
+ 'allProperties', 'asImmutable', 'asSynchronized', 'collect',
+ 'count', 'each', 'eachProperty', 'eachPropertyName',
+ 'eachWithIndex', 'find', 'findAll', 'findIndexOf',
+ 'flatten', 'get', 'grep', 'inject', 'intersect',
+ 'join', 'max', 'min', 'pop', 'reverse',
+ 'reverseEach', 'size', 'sort', 'subMap', 'toList'
+ ),
+ 6 => array(
+ 'center', 'contains', 'eachMatch', 'padLeft', 'padRight',
+ 'toCharacter', 'tokenize', 'toLong', 'toURL'
+ ),
+ 7 => array(
+ 'append', 'eachByte', 'eachFile', 'eachFileRecurse', 'eachLine',
+ 'eachLines', 'encodeBase64', 'filterLine', 'getText',
+ 'splitEachLine', 'transformChar', 'transformLine',
+ 'withOutputStream', 'withPrintWriter', 'withReader',
+ 'withStream', 'withStreams', 'withWriter',
+ 'withWriterAppend', 'write', 'writeLine'
+ ),
+ 8 => array(
+ 'dump', 'getLastMatcher', 'inspect', 'invokeMethod', 'print',
+ 'println', 'start', 'startDaemon', 'step', 'times',
+ 'upto', 'use'
+ ),
+ 9 => array(
+ 'call', 'close', 'eachRow', 'execute', 'executeUpdate', 'Sql'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?', '|', '=',
+ '=>', '||', '-', '+', '<<', '<<<', '&&'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => false,
+ 2 => false,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #aaaadd; font-weight: bold;',
+ 4 => 'color: #993333;',
+ 5 => 'color: #663399;',
+ 6 => 'color: #CC0099;',
+ 7 => 'color: #FFCC33;',
+ 8 => 'color: #993399;',
+ 9 => 'color: #993399; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1=> 'color: #808080; font-style: italic;',
+ 2=> 'color: #a1a100;',
+ 3=> 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAMEL}',
+ 2 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAMEL}',
+ 3 => 'http://www.google.de/search?as_q={FNAME}&amp;num=100&amp;hl=en&amp;as_occt=url&amp;as_sitesearch=java.sun.com%2Fj2se%2F1.5.0%2Fdocs%2Fapi%2F',
+ 4 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}',
+ 5 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}',
+ 6 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}',
+ 7 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}',
+ 8 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}',
+ 9 => 'http://www.google.de/search?q=site%3Adocs.codehaus.org/%20{FNAME}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => '\\$\\{[a-zA-Z_][a-zA-Z0-9_]*\\}'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php
new file mode 100644
index 000000000..f0e570f1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php
@@ -0,0 +1,198 @@
+<?php
+/*************************************************************************************
+ * haskell.php
+ * ----------
+ * Author: Jason Dagit (dagit@codersbase.com) based on ocaml.php by Flaie (fireflaie@gmail.com)
+ * Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/08/27
+ *
+ * Haskell language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/08/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Haskell',
+ 'COMMENT_SINGLE' => array( 1 => '--'),
+ 'COMMENT_MULTI' => array('{-' => '-}'),
+ 'COMMENT_REGEXP' => array(2 => "/-->/"),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => "\\",
+ 'KEYWORDS' => array(
+ /* main haskell keywords */
+ 1 => array(
+ 'as',
+ 'case', 'of', 'class', 'data', 'default',
+ 'deriving', 'do', 'forall', 'hiding', 'if', 'then',
+ 'else', 'import', 'infix', 'infixl', 'infixr',
+ 'instance', 'let', 'in', 'module', 'newtype',
+ 'qualified', 'type', 'where'
+ ),
+ /* define names of main librarys, so we can link to it */
+ 2 => array(
+ 'Foreign', 'Numeric', 'Prelude'
+ ),
+ /* just link to Prelude functions, cause it's the default opened library when starting Haskell */
+ 3 => array(
+ 'not', 'otherwise', 'maybe',
+ 'either', 'fst', 'snd', 'curry', 'uncurry',
+ 'compare',
+ 'max', 'min', 'succ', 'pred', 'toEnum', 'fromEnum',
+ 'enumFrom', 'enumFromThen', 'enumFromTo',
+ 'enumFromThenTo', 'minBound', 'maxBound',
+ 'negate', 'abs', 'signum',
+ 'fromInteger', 'toRational', 'quot', 'rem',
+ 'div', 'mod', 'quotRem', 'divMod', 'toInteger',
+ 'recip', 'fromRational', 'pi', 'exp',
+ 'log', 'sqrt', 'logBase', 'sin', 'cos',
+ 'tan', 'asin', 'acos', 'atan', 'sinh', 'cosh',
+ 'tanh', 'asinh', 'acosh', 'atanh',
+ 'properFraction', 'truncate', 'round', 'ceiling',
+ 'floor', 'floatRadix', 'floatDigits', 'floatRange',
+ 'decodeFloat', 'encodeFloat', 'exponent',
+ 'significand', 'scaleFloat', 'isNaN', 'isInfinite',
+ 'isDenomalized', 'isNegativeZero', 'isIEEE',
+ 'atan2', 'subtract', 'even', 'odd', 'gcd',
+ 'lcm', 'fromIntegral', 'realToFrac',
+ 'return', 'fail', 'fmap',
+ 'mapM', 'mapM_', 'sequence', 'sequence_',
+ 'id', 'const','flip',
+ 'until', 'asTypeOf', 'error', 'undefined',
+ 'seq','map','filter', 'head',
+ 'last', 'tail', 'init', 'null', 'length',
+ 'reverse', 'foldl', 'foldl1', 'foldr',
+ 'foldr1', 'and', 'or', 'any', 'all', 'sum',
+ 'product', 'concat', 'concatMap', 'maximum',
+ 'minimum', 'scanl', 'scanl1', 'scanr', 'scanr1',
+ 'iterate', 'repeat', 'cycle', 'take', 'drop',
+ 'splitAt', 'teakWhile', 'dropWhile', 'span',
+ 'break', 'elem', 'notElem', 'lookup', 'zip',
+ 'zip3', 'zipWith', 'zipWith3', 'unzip', 'unzip3',
+ 'lines', 'words', 'unlines',
+ 'unwords', 'showPrec', 'show', 'showList',
+ 'shows', 'showChar', 'showString', 'showParen',
+ 'readsPrec', 'readList', 'reads', 'readParen',
+ 'read', 'lex', 'putChar', 'putStr', 'putStrLn',
+ 'print', 'getChar', 'getLine', 'getContents',
+ 'interact', 'readFile', 'writeFile', 'appendFile',
+ 'readIO', 'readLn', 'ioError', 'userError', 'catch'
+ ),
+ /* here Prelude Types */
+ 4 => array (
+ 'Bool', 'Maybe', 'Either', 'Ord', 'Ordering',
+ 'Char', 'String', 'Eq', 'Enum', 'Bounded',
+ 'Int', 'Integer', 'Float', 'Double', 'Rational',
+ 'Num', 'Real', 'Integral', 'Fractional',
+ 'Floating', 'RealFrac', 'RealFloat', 'Monad',
+ 'Functor', 'Show', 'ShowS', 'Read', 'ReadS',
+ 'IO'
+ ),
+ /* finally Prelude Exceptions */
+ 5 => array (
+ 'IOError', 'IOException'
+ )
+ ),
+ /* highlighting symbols is really important in Haskell */
+ 'SYMBOLS' => array(
+ '|', '->', '<-', '@', '!', '::', '_', '~', '=', '?',
+ '&&', '||', '==', '/=', '<', '<=', '>',
+ '>=','+', '-', '*','/', '%', '**', '^', '^^',
+ '>>=', '>>', '=<<', '$', '.', ',', '$!',
+ '++', '!!'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true, /* functions name are case seinsitive */
+ 3 => true, /* types name too */
+ 4 => true, /* finally exceptions too */
+ 5 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #06c; font-weight: bold;', /* nice blue */
+ 2 => 'color: #06c; font-weight: bold;', /* blue as well */
+ 3 => 'font-weight: bold;', /* make the preduled functions bold */
+ 4 => 'color: #cccc00; font-weight: bold;', /* give types a different bg */
+ 5 => 'color: maroon;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #5d478b; font-style: italic;',
+ 2 => 'color: #339933; font-weight: bold;',
+ 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purpHle */
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'background-color: #3cb371; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: green;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'background-color: #3cb371;' /* nice green */
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: red;' /* pink */
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #060;' /* dark green */
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933; font-weight: bold;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ /* some of keywords are Prelude functions */
+ 1 => '',
+ /* link to the wanted library */
+ 2 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/{FNAME}.html',
+ /* link to Prelude functions */
+ 3 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:{FNAME}',
+ /* link to Prelude types */
+ 4 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}',
+ /* link to Prelude exceptions */
+ 5 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}',
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php
new file mode 100644
index 000000000..2a5c429ca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php
@@ -0,0 +1,104 @@
+<?php
+/*************************************************************************************
+ * hq9plus.php
+ * ----------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/10/31
+ *
+ * HQ9+ language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/31 (1.0.8.1)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'HQ9+',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 'H', 'Q', '9', '+', 'h', 'q'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #a16000;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'KEYWORDS' => GESHI_NEVER,
+ 'COMMENTS' => GESHI_NEVER,
+ 'STRINGS' => GESHI_NEVER,
+ 'REGEXPS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php
new file mode 100644
index 000000000..314351523
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php
@@ -0,0 +1,203 @@
+<?php
+/*************************************************************************************
+ * html4strict.php
+ * ---------------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/10
+ *
+ * HTML 4.01 strict language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/12/28 (1.0.4)
+ * - Removed escape character for strings
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.1)
+ * - Added INS and DEL
+ * - Removed the background colour from tags' styles
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Check that only HTML4 strict attributes are highlighted
+ * * Eliminate empty tags that aren't allowed in HTML4 strict
+ * * Split to several files - html4trans, xhtml1 etc
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'HTML',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 2 => array(
+ 'a', 'abbr', 'acronym', 'address', 'applet',
+
+ 'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
+
+ 'caption', 'center', 'cite', 'code', 'colgroup', 'col',
+
+ 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
+
+ 'em',
+
+ 'fieldset', 'font', 'form', 'frame', 'frameset',
+
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
+
+ 'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
+
+ 'kbd',
+
+ 'label', 'legend', 'link', 'li',
+
+ 'map', 'meta',
+
+ 'noframes', 'noscript',
+
+ 'object', 'ol', 'optgroup', 'option',
+
+ 'param', 'pre', 'p',
+
+ 'q',
+
+ 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
+
+ 'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
+
+ 'ul', 'u',
+
+ 'var',
+ ),
+ 3 => array(
+ 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
+ 'background', 'bgcolor', 'border',
+ 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
+ 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
+ 'enctype',
+ 'face', 'for', 'frame', 'frameborder',
+ 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
+ 'id', 'ismap',
+ 'label', 'lang', 'language', 'link', 'longdesc',
+ 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
+ 'name', 'nohref', 'noresize', 'noshade', 'nowrap',
+ 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
+ 'profile', 'prompt',
+ 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
+ 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
+ 'tabindex', 'target', 'text', 'title', 'type',
+ 'usemap',
+ 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
+ 'width'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '/', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ -1 => 'color: #808080; font-style: italic;', // comments
+ 0 => 'color: #00bbdd;',
+ 1 => 'color: #ddbb00;',
+ 2 => 'color: #009900;'
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 2 => 'http://december.com/html/4/element/{FNAMEL}.html',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ -1 => array(
+ '<!--' => '-->'
+ ),
+ 0 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 1 => array(
+ '&' => ';'
+ ),
+ 2 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ -1 => false,
+ 0 => false,
+ 1 => false,
+ 2 => true
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 2 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ )
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php
new file mode 100644
index 000000000..9160fd150
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php
@@ -0,0 +1,123 @@
+<?php
+/*************************************************************************************
+ * idl.php
+ * -------
+ * Author: Cedric Bosdonnat (cedricbosdo@openoffice.org)
+ * Copyright: (c) 2006 Cedric Bosdonnat
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/08/20
+ *
+ * Unoidl language file for GeSHi.
+ *
+ * 2006/08/20 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+
+$language_data = array (
+ 'LANG_NAME' => 'Uno Idl',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'published', 'get', 'set', 'service', 'singleton', 'type', 'module', 'interface', 'struct',
+ 'const', 'constants', 'exception', 'enum', 'raises', 'typedef'
+ ),
+ 2 => array(
+ 'bound', 'maybeambiguous', 'maybedefault', 'maybevoid', 'oneway', 'optional',
+ 'readonly', 'in', 'out', 'inout', 'attribute', 'transient', 'removable'
+ ),
+ 3 => array(
+ 'True', 'False', 'TRUE', 'FALSE'
+ ),
+ 4 => array(
+ 'string', 'long', 'byte', 'hyper', 'boolean', 'any', 'char', 'double',
+ 'void', 'sequence', 'unsigned'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':', ';', '...'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #990078; font-weight: bold',
+ 2 => 'color: #36dd1c;',
+ 3 => 'color: #990078; font-weight: bold',
+ 4 => 'color: #0000ec;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #3f7f5f;',
+ 2 => 'color: #808080;',
+ 'MULTI' => 'color: #4080ff; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #666666; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000dd;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php
new file mode 100644
index 000000000..365b4d6f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php
@@ -0,0 +1,128 @@
+<?php
+/*************************************************************************************
+ * ini.php
+ * --------
+ * Author: deguix (cevo_deguix@yahoo.com.br)
+ * Copyright: (c) 2005 deguix
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/03/27
+ *
+ * INI language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2005/12/28 (1.0.1)
+ * - Removed unnecessary keyword style index
+ * - Added support for " strings
+ * 2005/04/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/03/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'INI',
+ 'COMMENT_SINGLE' => array(0 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => ''
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #933;'
+ ),
+ 'NUMBERS' => array(
+ 0 => ''
+ ),
+ 'METHODS' => array(
+ 0 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000066; font-weight:bold;',
+ 1 => 'color: #000099;',
+ 2 => 'color: #660066;'
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Section names
+ 0 => '\[.+\]',
+ //Entry names
+ 1 => array(
+ GESHI_SEARCH => '^(\s*)([a-zA-Z0-9_\-]+)(\s*=)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ //Entry values
+ 2 => array(
+ // Evil hackery to get around GeSHi bug: <>" and ; are added so <span>s can be matched
+ // Explicit match on variable names because if a comment is before the first < of the span
+ // gets chewed up...
+ GESHI_SEARCH => '([<>";a-zA-Z0-9_]+\s*)=(.*)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1=',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php
new file mode 100644
index 000000000..99563514d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php
@@ -0,0 +1,212 @@
+<?php
+/*************************************************************************************
+ * Inno.php
+ * ----------
+ * Author: Thomas Klingler (hotline@theratech.de) based on delphi.php from J�rja Norbert (jnorbi@vipmail.hu)
+ * Copyright: (c) 2004 J�rja Norbert, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/07/29
+ *
+ * Inno Script language inkl. Delphi (Object Pascal) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/09/03
+ * - First Release
+ *
+ * TODO (updated 2005/07/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Inno',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'Setup','Types','Components','Tasks','Dirs','Files','Icons','INI',
+ 'InstallDelete','Languages','Messages','CustomMessage',
+ 'LangOptions','Registry','RUN','UninstallDelete','UninstallRun',
+ 'app','win','sys','syswow64','src','sd','pf','pf32','pf64','cf',
+ 'cf32','cf64','tmp','fonts','dao','group','localappdata','sendto',
+ 'userappdata','commonappdata','userdesktop','commondesktop',
+ 'userdocs','commondocs','userfavorites','commonfavorites',
+ 'userprograms','commonprograms','userstartmenu','commonstartmenu',
+ 'userstartup','commonstartup','usertemplates','commontemplates'
+ ),
+ 2 => array(
+ 'nil', 'false', 'true', 'var', 'type', 'const','And', 'Array', 'As', 'Begin', 'Case', 'Class', 'Constructor', 'Destructor', 'Div', 'Do', 'DownTo', 'Else',
+ 'End', 'Except', 'File', 'Finally', 'For', 'Function', 'Goto', 'If', 'Implementation', 'In', 'Inherited', 'Interface',
+ 'Is', 'Mod', 'Not', 'Object', 'Of', 'On', 'Or', 'Packed', 'Procedure', 'Property', 'Raise', 'Record',
+ 'Repeat', 'Set', 'Shl', 'Shr', 'Then', 'ThreadVar', 'To', 'Try', 'Unit', 'Until', 'Uses', 'While', 'With', 'Xor',
+
+ 'HKCC','HKCR','HKCU','HKLM','HKU','alwaysoverwrite','alwaysskipifsameorolder','append',
+ 'binary','classic','closeonexit','comparetimestamp','confirmoverwrite',
+ 'createkeyifdoesntexist','createonlyiffileexists','createvalueifdoesntexist',
+ 'deleteafterinstall','deletekey','deletevalue','dirifempty','dontcloseonexit',
+ 'dontcopy','dontcreatekey','disablenouninstallwarning','dword','exclusive','expandsz',
+ 'external','files','filesandordirs','fixed','fontisnttruetype','ignoreversion','iscustom','isreadme',
+ 'modern','multisz','new','noerror','none','normal','nowait','onlyifdestfileexists',
+ 'onlyifdoesntexist','onlyifnewer','overwrite','overwritereadonly','postinstall',
+ 'preservestringtype','promptifolder','regserver','regtypelib','restart','restartreplace',
+ 'runhidden','runmaximized','runminimized','sharedfile','shellexec','showcheckbox',
+ 'skipifnotsilent','skipifsilent','silent','skipifdoesntexist',
+ 'skipifsourcedoesntexist','sortfilesbyextension','unchecked','uninsalwaysuninstall',
+ 'uninsclearvalue','uninsdeleteentry','uninsdeletekey','uninsdeletekeyifempty',
+ 'uninsdeletesection','uninsdeletesectionifempty','uninsdeletevalue',
+ 'uninsneveruninstall','useapppaths','verysilent','waituntilidle'
+ ),
+ 3 => array(
+ 'Abs', 'Addr', 'AnsiCompareStr', 'AnsiCompareText', 'AnsiContainsStr', 'AnsiEndsStr', 'AnsiIndexStr', 'AnsiLeftStr',
+ 'AnsiLowerCase', 'AnsiMatchStr', 'AnsiMidStr', 'AnsiPos', 'AnsiReplaceStr', 'AnsiReverseString', 'AnsiRightStr',
+ 'AnsiStartsStr', 'AnsiUpperCase', 'ArcCos', 'ArcSin', 'ArcTan', 'Assigned', 'BeginThread', 'Bounds', 'CelsiusToFahrenheit',
+ 'ChangeFileExt', 'Chr', 'CompareStr', 'CompareText', 'Concat', 'Convert', 'Copy', 'Cos', 'CreateDir', 'CurrToStr',
+ 'CurrToStrF', 'Date', 'DateTimeToFileDate', 'DateTimeToStr', 'DateToStr', 'DayOfTheMonth', 'DayOfTheWeek', 'DayOfTheYear',
+ 'DayOfWeek', 'DaysBetween', 'DaysInAMonth', 'DaysInAYear', 'DaySpan', 'DegToRad', 'DeleteFile', 'DiskFree', 'DiskSize',
+ 'DupeString', 'EncodeDate', 'EncodeDateTime', 'EncodeTime', 'EndOfADay', 'EndOfAMonth', 'Eof', 'Eoln', 'Exp', 'ExtractFileDir',
+ 'ExtractFileDrive', 'ExtractFileExt', 'ExtractFileName', 'ExtractFilePath', 'FahrenheitToCelsius', 'FileAge',
+ 'FileDateToDateTime', 'FileExists', 'FilePos', 'FileSearch', 'FileSetDate', 'FileSize', 'FindClose', 'FindCmdLineSwitch',
+ 'FindFirst', 'FindNext', 'FloatToStr', 'FloatToStrF', 'Format', 'FormatCurr', 'FormatDateTime', 'FormatFloat', 'Frac',
+ 'GetCurrentDir', 'GetLastError', 'GetMem', 'High', 'IncDay', 'IncMinute', 'IncMonth', 'IncYear', 'InputBox',
+ 'InputQuery', 'Int', 'IntToHex', 'IntToStr', 'IOResult', 'IsInfinite', 'IsLeapYear', 'IsMultiThread', 'IsNaN',
+ 'LastDelimiter', 'Length', 'Ln', 'Lo', 'Log10', 'Low', 'LowerCase', 'Max', 'Mean', 'MessageDlg', 'MessageDlgPos',
+ 'MonthOfTheYear', 'Now', 'Odd', 'Ord', 'ParamCount', 'ParamStr', 'Pi', 'Point', 'PointsEqual', 'Pos', 'Pred',
+ 'Printer', 'PromptForFileName', 'PtInRect', 'RadToDeg', 'Random', 'RandomRange', 'RecodeDate', 'RecodeTime', 'Rect',
+ 'RemoveDir', 'RenameFile', 'Round', 'SeekEof', 'SeekEoln', 'SelectDirectory', 'SetCurrentDir', 'Sin', 'SizeOf',
+ 'Slice', 'Sqr', 'Sqrt', 'StringOfChar', 'StringReplace', 'StringToWideChar', 'StrToCurr', 'StrToDate', 'StrToDateTime',
+ 'StrToFloat', 'StrToInt', 'StrToInt64', 'StrToInt64Def', 'StrToIntDef', 'StrToTime', 'StuffString', 'Succ', 'Sum', 'Tan',
+ 'Time', 'TimeToStr', 'Tomorrow', 'Trunc', 'UpCase', 'UpperCase', 'VarType', 'WideCharToString', 'WrapText', 'Yesterday',
+ 'Append', 'AppendStr', 'Assign', 'AssignFile', 'AssignPrn', 'Beep', 'BlockRead', 'BlockWrite', 'Break',
+ 'ChDir', 'Close', 'CloseFile', 'Continue', 'DateTimeToString', 'Dec', 'DecodeDate', 'DecodeDateTime',
+ 'DecodeTime', 'Delete', 'Dispose', 'EndThread', 'Erase', 'Exclude', 'Exit', 'FillChar', 'Flush', 'FreeAndNil',
+ 'FreeMem', 'GetDir', 'GetLocaleFormatSettings', 'Halt', 'Inc', 'Include', 'Insert', 'MkDir', 'Move', 'New',
+ 'ProcessPath', 'Randomize', 'Read', 'ReadLn', 'ReallocMem', 'Rename', 'ReplaceDate', 'ReplaceTime',
+ 'Reset', 'ReWrite', 'RmDir', 'RunError', 'Seek', 'SetLength', 'SetString', 'ShowMessage', 'ShowMessageFmt',
+ 'ShowMessagePos', 'Str', 'Truncate', 'Val', 'Write', 'WriteLn',
+
+ 'AdminPrivilegesRequired','AfterInstall','AllowCancelDuringInstall','AllowNoIcons','AllowRootDirectory','AllowUNCPath','AlwaysRestart','AlwaysShowComponentsList','AlwaysShowDirOnReadyPage','AlwaysShowGroupOnReadyPage ','AlwaysUsePersonalGroup','AppComments','AppContact','AppCopyright','AppendDefaultDirName',
+ 'AppendDefaultGroupName','AppId','AppModifyPath','AppMutex','AppName','AppPublisher',
+ 'AppPublisherURL','AppReadmeFile','AppSupportURL','AppUpdatesURL','AppVerName','AppVersion',
+ 'Attribs','BackColor','BackColor2','BackColorDirection','BackSolid','BeforeInstall',
+ 'ChangesAssociations','ChangesEnvironment','Check','CodeFile','Comment','Compression','CopyMode',
+ 'CreateAppDir','CreateUninstallRegKey','DefaultDirName','DefaultGroupName',
+ 'DefaultUserInfoName','DefaultUserInfoOrg','DefaultUserInfoSerial',
+ 'Description','DestDir','DestName','DirExistsWarning',
+ 'DisableDirPage','DisableFinishedPage',
+ 'DisableProgramGroupPage','DisableReadyMemo','DisableReadyPage',
+ 'DisableStartupPrompt','DiskClusterSize','DiskSliceSize','DiskSpaceMBLabel',
+ 'DiskSpanning','DontMergeDuplicateFiles','EnableDirDoesntExistWarning','Encryption',
+ 'Excludes','ExtraDiskSpaceRequired','Filename','Flags','FlatComponentsList','FontInstall',
+ 'GroupDescription','HotKey','IconFilename','IconIndex','InfoAfterFile','InfoBeforeFile',
+ 'InternalCompressLevel','Key','LanguageDetectionMethod',
+ 'LicenseFile','MergeDuplicateFiles','MessagesFile','MinVersion','Name',
+ 'OnlyBelowVersion','OutputBaseFilename','OutputManifestFile','OutputDir',
+ 'Parameters','Password','Permissions','PrivilegesRequired','ReserveBytes',
+ 'RestartIfNeededByRun','Root','RunOnceId','Section','SetupIconFile',
+ 'ShowComponentSizes','ShowLanguageDialog','ShowTasksTreeLines','SlicesPerDisk',
+ 'SolidCompression','Source','SourceDir','StatusMsg','Subkey',
+ 'TimeStampRounding','TimeStampsInUTC','TouchDate','TouchTime','Type',
+ 'UninstallDisplayIcon','UninstallDisplayName','UninstallFilesDir','UninstallIconFile',
+ 'UninstallLogMode','UninstallRestartComputer','UninstallStyle','Uninstallable',
+ 'UpdateUninstallLogAppName','UsePreviousAppDir','UsePreviousGroup',
+ 'UsePreviousTasks','UsePreviousSetupType','UsePreviousUserInfo',
+ 'UserInfoPage','UseSetupLdr','ValueData','ValueName','ValueType',
+ 'VersionInfoVersion','VersionInfoCompany','VersionInfoDescription','VersionInfoTextVersion',
+ 'WindowResizable','WindowShowCaption','WindowStartMaximized',
+ 'WindowVisible','WizardImageBackColor','WizardImageFile','WizardImageStretch','WizardSmallImageBackColor','WizardSmallImageFile','WizardStyle','WorkingDir'
+ ),
+ 4 => array(
+ 'AnsiChar', 'AnsiString', 'Boolean', 'Byte', 'Cardinal', 'Char', 'Comp', 'Currency', 'Double', 'Extended',
+ 'Int64', 'Integer', 'LongInt', 'LongWord', 'PAnsiChar', 'PAnsiString', 'PChar', 'PCurrency', 'PDateTime',
+ 'PExtended', 'PInt64', 'Pointer', 'PShortString', 'PString', 'PVariant', 'PWideChar', 'PWideString',
+ 'Real', 'Real48', 'ShortInt', 'ShortString', 'Single', 'SmallInt', 'String', 'TBits', 'TConvType', 'TDateTime',
+ 'Text', 'TextFile', 'TFloatFormat', 'TFormatSettings', 'TList', 'TObject', 'TOpenDialog', 'TPoint',
+ 'TPrintDialog', 'TRect', 'TReplaceFlags', 'TSaveDialog', 'TSearchRec', 'TStringList', 'TSysCharSet',
+ 'TThreadFunc', 'Variant', 'WideChar', 'WideString', 'Word'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '@', '%', '&', '*', '|', '/', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',/*bold Black*/
+ 2 => 'color: #000000;font-style: italic;',/*Black*/
+ 3 => 'color: #0000FF;',/*blue*/
+ 4 => 'color: #CC0000;'/*red*/
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #33FF00; font-style: italic;',
+ 'MULTI' => 'color: #33FF00; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000; font-weight: bold;',
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php
new file mode 100644
index 000000000..a58960089
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php
@@ -0,0 +1,122 @@
+<?php
+/*************************************************************************************
+ * intercal.php
+ * ----------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/10/31
+ *
+ * INTERCAL language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/31 (1.0.8.1)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'INTERCAL',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ //Politeness
+ 1 => array(
+ 'DO', 'DOES', 'DONT', 'DON\'T', 'NOT', 'PLEASE', 'PLEASENT', 'PLEASEN\'T', 'MAYBE'
+ ),
+ //Statements
+ 2 => array(
+ 'STASH', 'RETRIEVE', 'NEXT', 'RESUME', 'FORGET', 'ABSTAIN', 'ABSTAINING',
+ 'COME', 'FROM', 'CALCULATING', 'REINSTATE', 'IGNORE', 'REMEMBER',
+ 'WRITE', 'IN', 'READ', 'OUT', 'GIVE', 'UP'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '.', ',', ':', ';', '#',
+ '~', '$', '&', '?',
+ '\'', '"', '<-'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080; font-weight: bold;',
+ 2 => 'color: #000080; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 1 => 'color: #808080; font-style: italic;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 1 => '^\(\d+\)'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'COMMENTS' => GESHI_NEVER,
+ 'STRINGS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php
new file mode 100644
index 000000000..7ec53a881
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php
@@ -0,0 +1,138 @@
+<?php
+/*************************************************************************************
+ * io.php
+ * -------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2006 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/09/23
+ *
+ * Io language file for GeSHi. Thanks to Johnathan Wright for the suggestion and help
+ * with this language :)
+ *
+ * CHANGES
+ * -------
+ * 2006/09/23(1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Io',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'and', 'break', 'else', 'elseif', 'exit', 'for', 'foreach', 'if', 'ifFalse', 'ifNil',
+ 'ifTrue', 'or', 'pass', 'raise', 'return', 'then', 'try', 'wait', 'while', 'yield'
+ ),
+ 2 => array(
+ 'activate', 'activeCoroCount', 'asString', 'block', 'catch', 'clone', 'collectGarbage',
+ 'compileString', 'continue', 'do', 'doFile', 'doMessage', 'doString', 'forward',
+ 'getSlot', 'getenv', 'hasSlot', 'isActive', 'isNil', 'isResumable', 'list', 'message',
+ 'method', 'parent', 'pause', 'perform', 'performWithArgList', 'print', 'proto',
+ 'raiseResumable', 'removeSlot', 'resend', 'resume', 'schedulerSleepSeconds', 'self',
+ 'sender', 'setSchedulerSleepSeconds', 'setSlot', 'shallowCopy', 'slotNames', 'super',
+ 'system', 'thisBlock', 'thisContext', 'thisMessage', 'type', 'uniqueId', 'updateSlot',
+ 'write'
+ ),
+ 3 => array(
+ 'Array', 'AudioDevice', 'AudioMixer', 'Block', 'Box', 'Buffer', 'CFunction', 'CGI',
+ 'Color', 'Curses', 'DBM', 'DNSResolver', 'DOConnection', 'DOProxy', 'DOServer',
+ 'Date', 'Directory', 'Duration', 'DynLib', 'Error', 'Exception', 'FFT', 'File',
+ 'Fnmatch', 'Font', 'Future', 'GL', 'GLE', 'GLScissor', 'GLU', 'GLUCylinder',
+ 'GLUQuadric', 'GLUSphere', 'GLUT', 'Host', 'Image', 'Importer', 'LinkList', 'List',
+ 'Lobby', 'Locals', 'MD5', 'MP3Decoder', 'MP3Encoder', 'Map', 'Message', 'Movie',
+ 'NULL', 'Nil', 'Nop', 'Notifiction', 'Number', 'Object', 'OpenGL', 'Point', 'Protos',
+ 'Regex', 'SGMLTag', 'SQLite', 'Server', 'ShowMessage', 'SleepyCat', 'SleepyCatCursor',
+ 'Socket', 'SocketManager', 'Sound', 'Soup', 'Store', 'String', 'Tree', 'UDPSender',
+ 'UDPReceiver', 'URL', 'User', 'Warning', 'WeakLink'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php
new file mode 100644
index 000000000..d8a2d5e4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php
@@ -0,0 +1,983 @@
+<?php
+/*************************************************************************************
+ * java.php
+ * --------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/10
+ *
+ * Java language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/25 (1.0.7.22)
+ * - Added highlighting of import and package directives as non-OOP
+ * 2005/12/28 (1.0.4)
+ * - Added instanceof keyword
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/08/05 (1.0.2)
+ * - Added URL support
+ * - Added keyword "this", as bugs in GeSHi class ironed out
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * - Added extra missed keywords
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Compact the class names like the first few have been
+ * and eliminate repeats
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Java',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Import and Package directives (Basic Support only)
+ 2 => '/(?:(?<=import[\\n\\s])|(?<=package[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*([a-zA-Z0-9_]+|\*)(?=[\n\s;])/i',
+ // javadoc comments
+ 3 => '#/\*\*(?![\*\/]).*\*/#sU'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'for', 'foreach', 'if', 'else', 'while', 'do',
+ 'switch', 'case', 'return', 'public',
+ 'private', 'protected', 'extends', 'break', 'class',
+ 'new', 'try', 'catch', 'throws', 'finally', 'implements',
+ 'interface', 'throw', 'final', 'native', 'synchronized', 'this',
+ 'abstract', 'transient', 'instanceof', 'assert', 'continue',
+ 'default', 'enum', 'package', 'static', 'strictfp', 'super',
+ 'volatile', 'const', 'goto', 'import'
+ ),
+ 2 => array(
+ 'null', 'false', 'true'
+ ),
+ 3 => array(
+ 'AbstractAction', 'AbstractBorder', 'AbstractButton',
+ 'AbstractCellEditor', 'AbstractCollection',
+ 'AbstractColorChooserPanel', 'AbstractDocument',
+ 'AbstractDocument.AttributeContext',
+ 'AbstractDocument.Content',
+ 'AbstractDocument.ElementEdit',
+ 'AbstractLayoutCache',
+ 'AbstractLayoutCache.NodeDimensions', 'AbstractList',
+ 'AbstractListModel', 'AbstractMap',
+ 'AbstractMethodError', 'AbstractSequentialList',
+ 'AbstractSet', 'AbstractTableModel',
+ 'AbstractUndoableEdit', 'AbstractWriter',
+ 'AccessControlContext', 'AccessControlException',
+ 'AccessController', 'AccessException', 'Accessible',
+ 'AccessibleAction', 'AccessibleBundle',
+ 'AccessibleComponent', 'AccessibleContext',
+ 'AccessibleHyperlink', 'AccessibleHypertext',
+ 'AccessibleIcon', 'AccessibleObject',
+ 'AccessibleRelation', 'AccessibleRelationSet',
+ 'AccessibleResourceBundle', 'AccessibleRole',
+ 'AccessibleSelection', 'AccessibleState',
+ 'AccessibleStateSet', 'AccessibleTable',
+ 'AccessibleTableModelChange', 'AccessibleText',
+ 'AccessibleValue', 'Acl', 'AclEntry',
+ 'AclNotFoundException', 'Action', 'ActionEvent',
+ 'ActionListener', 'ActionMap', 'ActionMapUIResource',
+ 'Activatable', 'ActivateFailedException',
+ 'ActivationDesc', 'ActivationException',
+ 'ActivationGroup', 'ActivationGroupDesc',
+ 'ActivationGroupDesc.CommandEnvironment',
+ 'ActivationGroupID', 'ActivationID',
+ 'ActivationInstantiator', 'ActivationMonitor',
+ 'ActivationSystem', 'Activator', 'ActiveEvent',
+ 'Adjustable', 'AdjustmentEvent',
+ 'AdjustmentListener', 'Adler32', 'AffineTransform',
+ 'AffineTransformOp', 'AlgorithmParameterGenerator',
+ 'AlgorithmParameterGeneratorSpi',
+ 'AlgorithmParameters', 'AlgorithmParameterSpec',
+ 'AlgorithmParametersSpi', 'AllPermission',
+ 'AlphaComposite', 'AlreadyBound',
+ 'AlreadyBoundException', 'AlreadyBoundHelper',
+ 'AlreadyBoundHolder', 'AncestorEvent',
+ 'AncestorListener', 'Annotation', 'Any', 'AnyHolder',
+ 'AnySeqHelper', 'AnySeqHolder', 'Applet',
+ 'AppletContext', 'AppletInitializer', 'AppletStub',
+ 'ApplicationException', 'Arc2D', 'Arc2D.Double',
+ 'Arc2D.Float', 'Area', 'AreaAveragingScaleFilter',
+ 'ARG_IN', 'ARG_INOUT', 'ARG_OUT',
+ 'ArithmeticException', 'Array',
+ 'ArrayIndexOutOfBoundsException', 'ArrayList',
+ 'Arrays', 'ArrayStoreException', 'AsyncBoxView',
+ 'Attribute', 'AttributedCharacterIterator',
+ 'AttributedCharacterIterator.Attribute',
+ 'AttributedString', 'AttributeInUseException',
+ 'AttributeList', 'AttributeModificationException',
+ 'Attributes', 'Attributes.Name', 'AttributeSet',
+ 'AttributeSet.CharacterAttribute',
+ 'AttributeSet.ColorAttribute',
+ 'AttributeSet.FontAttribute',
+ 'AttributeSet.ParagraphAttribute', 'AudioClip',
+ 'AudioFileFormat', 'AudioFileFormat.Type',
+ 'AudioFileReader', 'AudioFileWriter', 'AudioFormat',
+ 'AudioFormat.Encoding', 'AudioInputStream',
+ 'AudioPermission', 'AudioSystem',
+ 'AuthenticationException',
+ 'AuthenticationNotSupportedException',
+ 'Authenticator', 'Autoscroll', 'AWTError',
+ 'AWTEvent', 'AWTEventListener',
+ 'AWTEventMulticaster', 'AWTException',
+ 'AWTPermission', 'BadKind', 'BadLocationException',
+ 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION',
+ 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE',
+ 'BAD_POLICY_VALUE', 'BAD_TYPECODE', 'BandCombineOp',
+ 'BandedSampleModel', 'BasicArrowButton',
+ 'BasicAttribute', 'BasicAttributes', 'BasicBorders',
+ 'BasicBorders.ButtonBorder',
+ 'BasicBorders.FieldBorder',
+ 'BasicBorders.MarginBorder',
+ 'BasicBorders.MenuBarBorder',
+ 'BasicBorders.RadioButtonBorder',
+ 'BasicBorders.SplitPaneBorder',
+ 'BasicBorders.ToggleButtonBorder',
+ 'BasicButtonListener', 'BasicButtonUI',
+ 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI',
+ 'BasicColorChooserUI', 'BasicComboBoxEditor',
+ 'BasicComboBoxEditor.UIResource',
+ 'BasicComboBoxRenderer',
+ 'BasicComboBoxRenderer.UIResource',
+ 'BasicComboBoxUI', 'BasicComboPopup',
+ 'BasicDesktopIconUI', 'BasicDesktopPaneUI',
+ 'BasicDirectoryModel', 'BasicEditorPaneUI',
+ 'BasicFileChooserUI', 'BasicGraphicsUtils',
+ 'BasicHTML', 'BasicIconFactory',
+ 'BasicInternalFrameTitlePane',
+ 'BasicInternalFrameUI', 'BasicLabelUI',
+ 'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI',
+ 'BasicMenuItemUI', 'BasicMenuUI',
+ 'BasicOptionPaneUI',
+ 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI',
+ 'BasicPasswordFieldUI', 'BasicPermission',
+ 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI',
+ 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI',
+ 'BasicRadioButtonUI', 'BasicRootPaneUI',
+ 'BasicScrollBarUI', 'BasicScrollPaneUI',
+ 'BasicSeparatorUI', 'BasicSliderUI',
+ 'BasicSplitPaneDivider', 'BasicSplitPaneUI',
+ 'BasicStroke', 'BasicTabbedPaneUI',
+ 'BasicTableHeaderUI', 'BasicTableUI',
+ 'BasicTextAreaUI', 'BasicTextFieldUI',
+ 'BasicTextPaneUI', 'BasicTextUI',
+ 'BasicTextUI.BasicCaret',
+ 'BasicTextUI.BasicHighlighter',
+ 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI',
+ 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI',
+ 'BasicViewportUI', 'BatchUpdateException',
+ 'BeanContext', 'BeanContextChild',
+ 'BeanContextChildComponentProxy',
+ 'BeanContextChildSupport',
+ 'BeanContextContainerProxy', 'BeanContextEvent',
+ 'BeanContextMembershipEvent',
+ 'BeanContextMembershipListener', 'BeanContextProxy',
+ 'BeanContextServiceAvailableEvent',
+ 'BeanContextServiceProvider',
+ 'BeanContextServiceProviderBeanInfo',
+ 'BeanContextServiceRevokedEvent',
+ 'BeanContextServiceRevokedListener',
+ 'BeanContextServices', 'BeanContextServicesListener',
+ 'BeanContextServicesSupport',
+ 'BeanContextServicesSupport.BCSSServiceProvider',
+ 'BeanContextSupport',
+ 'BeanContextSupport.BCSIterator', 'BeanDescriptor',
+ 'BeanInfo', 'Beans', 'BevelBorder', 'BigDecimal',
+ 'BigInteger', 'BinaryRefAddr', 'BindException',
+ 'Binding', 'BindingHelper', 'BindingHolder',
+ 'BindingIterator', 'BindingIteratorHelper',
+ 'BindingIteratorHolder', 'BindingIteratorOperations',
+ 'BindingListHelper', 'BindingListHolder',
+ 'BindingType', 'BindingTypeHelper',
+ 'BindingTypeHolder', 'BitSet', 'Blob', 'BlockView',
+ 'Book', 'Boolean', 'BooleanControl',
+ 'BooleanControl.Type', 'BooleanHolder',
+ 'BooleanSeqHelper', 'BooleanSeqHolder', 'Border',
+ 'BorderFactory', 'BorderLayout', 'BorderUIResource',
+ 'BorderUIResource.BevelBorderUIResource',
+ 'BorderUIResource.CompoundBorderUIResource',
+ 'BorderUIResource.EmptyBorderUIResource',
+ 'BorderUIResource.EtchedBorderUIResource',
+ 'BorderUIResource.LineBorderUIResource',
+ 'BorderUIResource.MatteBorderUIResource',
+ 'BorderUIResource.TitledBorderUIResource',
+ 'BoundedRangeModel', 'Bounds', 'Box', 'Box.Filler',
+ 'BoxedValueHelper', 'BoxLayout', 'BoxView',
+ 'BreakIterator', 'BufferedImage',
+ 'BufferedImageFilter', 'BufferedImageOp',
+ 'BufferedInputStream', 'BufferedOutputStream',
+ 'BufferedReader', 'BufferedWriter', 'Button',
+ 'ButtonGroup', 'ButtonModel', 'ButtonUI', 'Byte',
+ 'ByteArrayInputStream', 'ByteArrayOutputStream',
+ 'ByteHolder', 'ByteLookupTable', 'Calendar',
+ 'CallableStatement', 'CannotProceed',
+ 'CannotProceedException', 'CannotProceedHelper',
+ 'CannotProceedHolder', 'CannotRedoException',
+ 'CannotUndoException', 'Canvas', 'CardLayout',
+ 'Caret', 'CaretEvent', 'CaretListener', 'CellEditor',
+ 'CellEditorListener', 'CellRendererPane',
+ 'Certificate', 'Certificate.CertificateRep',
+ 'CertificateEncodingException',
+ 'CertificateException',
+ 'CertificateExpiredException', 'CertificateFactory',
+ 'CertificateFactorySpi',
+ 'CertificateNotYetValidException',
+ 'CertificateParsingException',
+ 'ChangedCharSetException', 'ChangeEvent',
+ 'ChangeListener', 'Character', 'Character.Subset',
+ 'Character.UnicodeBlock', 'CharacterIterator',
+ 'CharArrayReader', 'CharArrayWriter',
+ 'CharConversionException', 'CharHolder',
+ 'CharSeqHelper', 'CharSeqHolder', 'Checkbox',
+ 'CheckboxGroup', 'CheckboxMenuItem',
+ 'CheckedInputStream', 'CheckedOutputStream',
+ 'Checksum', 'Choice', 'ChoiceFormat', 'Class',
+ 'ClassCastException', 'ClassCircularityError',
+ 'ClassDesc', 'ClassFormatError', 'ClassLoader',
+ 'ClassNotFoundException', 'Clip', 'Clipboard',
+ 'ClipboardOwner', 'Clob', 'Cloneable',
+ 'CloneNotSupportedException', 'CMMException',
+ 'CodeSource', 'CollationElementIterator',
+ 'CollationKey', 'Collator', 'Collection',
+ 'Collections', 'Color',
+ 'ColorChooserComponentFactory', 'ColorChooserUI',
+ 'ColorConvertOp', 'ColorModel',
+ 'ColorSelectionModel', 'ColorSpace',
+ 'ColorUIResource', 'ComboBoxEditor', 'ComboBoxModel',
+ 'ComboBoxUI', 'ComboPopup', 'CommunicationException',
+ 'COMM_FAILURE', 'Comparable', 'Comparator',
+ 'Compiler', 'CompletionStatus',
+ 'CompletionStatusHelper', 'Component',
+ 'ComponentAdapter', 'ComponentColorModel',
+ 'ComponentEvent', 'ComponentInputMap',
+ 'ComponentInputMapUIResource', 'ComponentListener',
+ 'ComponentOrientation', 'ComponentSampleModel',
+ 'ComponentUI', 'ComponentView', 'Composite',
+ 'CompositeContext', 'CompositeName', 'CompositeView',
+ 'CompoundBorder', 'CompoundControl',
+ 'CompoundControl.Type', 'CompoundEdit',
+ 'CompoundName', 'ConcurrentModificationException',
+ 'ConfigurationException', 'ConnectException',
+ 'ConnectIOException', 'Connection', 'Constructor', 'Container',
+ 'ContainerAdapter', 'ContainerEvent',
+ 'ContainerListener', 'ContentHandler',
+ 'ContentHandlerFactory', 'ContentModel', 'Context',
+ 'ContextList', 'ContextNotEmptyException',
+ 'ContextualRenderedImageFactory', 'Control',
+ 'Control.Type', 'ControlFactory',
+ 'ControllerEventListener', 'ConvolveOp', 'CRC32',
+ 'CRL', 'CRLException', 'CropImageFilter', 'CSS',
+ 'CSS.Attribute', 'CTX_RESTRICT_SCOPE',
+ 'CubicCurve2D', 'CubicCurve2D.Double',
+ 'CubicCurve2D.Float', 'Current', 'CurrentHelper',
+ 'CurrentHolder', 'CurrentOperations', 'Cursor',
+ 'Customizer', 'CustomMarshal', 'CustomValue',
+ 'DatabaseMetaData', 'DataBuffer', 'DataBufferByte',
+ 'DataBufferInt', 'DataBufferShort',
+ 'DataBufferUShort', 'DataFlavor',
+ 'DataFormatException', 'DatagramPacket',
+ 'DatagramSocket', 'DatagramSocketImpl',
+ 'DatagramSocketImplFactory', 'DataInput',
+ 'DataInputStream', 'DataLine', 'DataLine.Info',
+ 'DataOutput', 'DataOutputStream',
+ 'DataTruncation', 'DATA_CONVERSION', 'Date',
+ 'DateFormat', 'DateFormatSymbols', 'DebugGraphics',
+ 'DecimalFormat', 'DecimalFormatSymbols',
+ 'DefaultBoundedRangeModel', 'DefaultButtonModel',
+ 'DefaultCaret', 'DefaultCellEditor',
+ 'DefaultColorSelectionModel', 'DefaultComboBoxModel',
+ 'DefaultDesktopManager', 'DefaultEditorKit',
+ 'DefaultEditorKit.BeepAction',
+ 'DefaultEditorKit.CopyAction',
+ 'DefaultEditorKit.CutAction',
+ 'DefaultEditorKit.DefaultKeyTypedAction',
+ 'DefaultEditorKit.InsertBreakAction',
+ 'DefaultEditorKit.InsertContentAction',
+ 'DefaultEditorKit.InsertTabAction',
+ 'DefaultEditorKit.PasteAction,',
+ 'DefaultFocusManager', 'DefaultHighlighter',
+ 'DefaultHighlighter.DefaultHighlightPainter',
+ 'DefaultListCellRenderer',
+ 'DefaultListCellRenderer.UIResource',
+ 'DefaultListModel', 'DefaultListSelectionModel',
+ 'DefaultMenuLayout', 'DefaultMetalTheme',
+ 'DefaultMutableTreeNode',
+ 'DefaultSingleSelectionModel',
+ 'DefaultStyledDocument',
+ 'DefaultStyledDocument.AttributeUndoableEdit',
+ 'DefaultStyledDocument.ElementSpec',
+ 'DefaultTableCellRenderer',
+ 'DefaultTableCellRenderer.UIResource',
+ 'DefaultTableColumnModel', 'DefaultTableModel',
+ 'DefaultTextUI', 'DefaultTreeCellEditor',
+ 'DefaultTreeCellRenderer', 'DefaultTreeModel',
+ 'DefaultTreeSelectionModel', 'DefinitionKind',
+ 'DefinitionKindHelper', 'Deflater',
+ 'DeflaterOutputStream', 'Delegate', 'DesignMode',
+ 'DesktopIconUI', 'DesktopManager', 'DesktopPaneUI',
+ 'DGC', 'Dialog', 'Dictionary', 'DigestException',
+ 'DigestInputStream', 'DigestOutputStream',
+ 'Dimension', 'Dimension2D', 'DimensionUIResource',
+ 'DirContext', 'DirectColorModel', 'DirectoryManager',
+ 'DirObjectFactory', 'DirStateFactory',
+ 'DirStateFactory.Result', 'DnDConstants', 'Document',
+ 'DocumentEvent', 'DocumentEvent.ElementChange',
+ 'DocumentEvent.EventType', 'DocumentListener',
+ 'DocumentParser', 'DomainCombiner', 'DomainManager',
+ 'DomainManagerOperations', 'Double', 'DoubleHolder',
+ 'DoubleSeqHelper', 'DoubleSeqHolder',
+ 'DragGestureEvent', 'DragGestureListener',
+ 'DragGestureRecognizer', 'DragSource',
+ 'DragSourceContext', 'DragSourceDragEvent',
+ 'DragSourceDropEvent', 'DragSourceEvent',
+ 'DragSourceListener', 'Driver', 'DriverManager',
+ 'DriverPropertyInfo', 'DropTarget',
+ 'DropTarget.DropTargetAutoScroller',
+ 'DropTargetContext', 'DropTargetDragEvent',
+ 'DropTargetDropEvent', 'DropTargetEvent',
+ 'DropTargetListener', 'DSAKey',
+ 'DSAKeyPairGenerator', 'DSAParameterSpec',
+ 'DSAParams', 'DSAPrivateKey', 'DSAPrivateKeySpec',
+ 'DSAPublicKey', 'DSAPublicKeySpec', 'DTD',
+ 'DTDConstants', 'DynamicImplementation', 'DynAny',
+ 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence',
+ 'DynStruct', 'DynUnion', 'DynValue', 'EditorKit',
+ 'Element', 'ElementIterator', 'Ellipse2D',
+ 'Ellipse2D.Double', 'Ellipse2D.Float', 'EmptyBorder',
+ 'EmptyStackException', 'EncodedKeySpec', 'Entity',
+ 'EnumControl', 'EnumControl.Type', 'Enumeration',
+ 'Environment', 'EOFException', 'Error',
+ 'EtchedBorder', 'Event', 'EventContext',
+ 'EventDirContext', 'EventListener',
+ 'EventListenerList', 'EventObject', 'EventQueue',
+ 'EventSetDescriptor', 'Exception',
+ 'ExceptionInInitializerError', 'ExceptionList',
+ 'ExpandVetoException', 'ExportException',
+ 'ExtendedRequest', 'ExtendedResponse',
+ 'Externalizable', 'FeatureDescriptor', 'Field',
+ 'FieldNameHelper', 'FieldPosition', 'FieldView',
+ 'File', 'FileChooserUI', 'FileDescriptor',
+ 'FileDialog', 'FileFilter',
+ 'FileInputStream', 'FilenameFilter', 'FileNameMap',
+ 'FileNotFoundException', 'FileOutputStream',
+ 'FilePermission', 'FileReader', 'FileSystemView',
+ 'FileView', 'FileWriter', 'FilteredImageSource',
+ 'FilterInputStream', 'FilterOutputStream',
+ 'FilterReader', 'FilterWriter',
+ 'FixedHeightLayoutCache', 'FixedHolder',
+ 'FlatteningPathIterator', 'FlavorMap', 'Float',
+ 'FloatControl', 'FloatControl.Type', 'FloatHolder',
+ 'FloatSeqHelper', 'FloatSeqHolder', 'FlowLayout',
+ 'FlowView', 'FlowView.FlowStrategy', 'FocusAdapter',
+ 'FocusEvent', 'FocusListener', 'FocusManager',
+ 'Font', 'FontFormatException', 'FontMetrics',
+ 'FontRenderContext', 'FontUIResource', 'Format',
+ 'FormatConversionProvider', 'FormView', 'Frame',
+ 'FREE_MEM', 'GapContent', 'GeneralPath',
+ 'GeneralSecurityException', 'GlyphJustificationInfo',
+ 'GlyphMetrics', 'GlyphVector', 'GlyphView',
+ 'GlyphView.GlyphPainter', 'GradientPaint',
+ 'GraphicAttribute', 'Graphics', 'Graphics2D',
+ 'GraphicsConfigTemplate', 'GraphicsConfiguration',
+ 'GraphicsDevice', 'GraphicsEnvironment',
+ 'GrayFilter', 'GregorianCalendar',
+ 'GridBagConstraints', 'GridBagLayout', 'GridLayout',
+ 'Group', 'Guard', 'GuardedObject', 'GZIPInputStream',
+ 'GZIPOutputStream', 'HasControls', 'HashMap',
+ 'HashSet', 'Hashtable', 'HierarchyBoundsAdapter',
+ 'HierarchyBoundsListener', 'HierarchyEvent',
+ 'HierarchyListener', 'Highlighter',
+ 'Highlighter.Highlight',
+ 'Highlighter.HighlightPainter', 'HTML',
+ 'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag',
+ 'HTMLDocument', 'HTMLDocument.Iterator',
+ 'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory',
+ 'HTMLEditorKit.HTMLTextAction',
+ 'HTMLEditorKit.InsertHTMLTextAction',
+ 'HTMLEditorKit.LinkController',
+ 'HTMLEditorKit.Parser',
+ 'HTMLEditorKit.ParserCallback',
+ 'HTMLFrameHyperlinkEvent', 'HTMLWriter',
+ 'HttpURLConnection', 'HyperlinkEvent',
+ 'HyperlinkEvent.EventType', 'HyperlinkListener',
+ 'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray',
+ 'ICC_ProfileRGB', 'Icon', 'IconUIResource',
+ 'IconView', 'IdentifierHelper', 'Identity',
+ 'IdentityScope', 'IDLEntity', 'IDLType',
+ 'IDLTypeHelper', 'IDLTypeOperations',
+ 'IllegalAccessError', 'IllegalAccessException',
+ 'IllegalArgumentException',
+ 'IllegalComponentStateException',
+ 'IllegalMonitorStateException',
+ 'IllegalPathStateException', 'IllegalStateException',
+ 'IllegalThreadStateException', 'Image',
+ 'ImageConsumer', 'ImageFilter',
+ 'ImageGraphicAttribute', 'ImageIcon',
+ 'ImageObserver', 'ImageProducer',
+ 'ImagingOpException', 'IMP_LIMIT',
+ 'IncompatibleClassChangeError',
+ 'InconsistentTypeCode', 'IndexColorModel',
+ 'IndexedPropertyDescriptor',
+ 'IndexOutOfBoundsException', 'IndirectionException',
+ 'InetAddress', 'Inflater', 'InflaterInputStream',
+ 'InheritableThreadLocal', 'InitialContext',
+ 'InitialContextFactory',
+ 'InitialContextFactoryBuilder', 'InitialDirContext',
+ 'INITIALIZE', 'Initializer', 'InitialLdapContext',
+ 'InlineView', 'InputContext', 'InputEvent',
+ 'InputMap', 'InputMapUIResource', 'InputMethod',
+ 'InputMethodContext', 'InputMethodDescriptor',
+ 'InputMethodEvent', 'InputMethodHighlight',
+ 'InputMethodListener', 'InputMethodRequests',
+ 'InputStream',
+ 'InputStreamReader', 'InputSubset', 'InputVerifier',
+ 'Insets', 'InsetsUIResource', 'InstantiationError',
+ 'InstantiationException', 'Instrument',
+ 'InsufficientResourcesException', 'Integer',
+ 'INTERNAL', 'InternalError', 'InternalFrameAdapter',
+ 'InternalFrameEvent', 'InternalFrameListener',
+ 'InternalFrameUI', 'InterruptedException',
+ 'InterruptedIOException',
+ 'InterruptedNamingException', 'INTF_REPOS',
+ 'IntHolder', 'IntrospectionException',
+ 'Introspector', 'Invalid',
+ 'InvalidAlgorithmParameterException',
+ 'InvalidAttributeIdentifierException',
+ 'InvalidAttributesException',
+ 'InvalidAttributeValueException',
+ 'InvalidClassException',
+ 'InvalidDnDOperationException',
+ 'InvalidKeyException', 'InvalidKeySpecException',
+ 'InvalidMidiDataException', 'InvalidName',
+ 'InvalidNameException',
+ 'InvalidNameHelper', 'InvalidNameHolder',
+ 'InvalidObjectException',
+ 'InvalidParameterException',
+ 'InvalidParameterSpecException',
+ 'InvalidSearchControlsException',
+ 'InvalidSearchFilterException', 'InvalidSeq',
+ 'InvalidTransactionException', 'InvalidValue',
+ 'INVALID_TRANSACTION', 'InvocationEvent',
+ 'InvocationHandler', 'InvocationTargetException',
+ 'InvokeHandler', 'INV_FLAG', 'INV_IDENT',
+ 'INV_OBJREF', 'INV_POLICY', 'IOException',
+ 'IRObject', 'IRObjectOperations', 'IstringHelper',
+ 'ItemEvent', 'ItemListener', 'ItemSelectable',
+ 'Iterator', 'JApplet', 'JarEntry', 'JarException',
+ 'JarFile', 'JarInputStream', 'JarOutputStream',
+ 'JarURLConnection', 'JButton', 'JCheckBox',
+ 'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox',
+ 'JComboBox.KeySelectionManager', 'JComponent',
+ 'JDesktopPane', 'JDialog', 'JEditorPane',
+ 'JFileChooser', 'JFrame', 'JInternalFrame',
+ 'JInternalFrame.JDesktopIcon', 'JLabel',
+ 'JLayeredPane', 'JList', 'JMenu', 'JMenuBar',
+ 'JMenuItem', 'JobAttributes',
+ 'JobAttributes.DefaultSelectionType',
+ 'JobAttributes.DestinationType',
+ 'JobAttributes.DialogType',
+ 'JobAttributes.MultipleDocumentHandlingType',
+ 'JobAttributes.SidesType', 'JOptionPane', 'JPanel',
+ 'JPasswordField', 'JPopupMenu',
+ 'JPopupMenu.Separator', 'JProgressBar',
+ 'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane',
+ 'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider',
+ 'JSplitPane', 'JTabbedPane', 'JTable',
+ 'JTableHeader', 'JTextArea', 'JTextComponent',
+ 'JTextComponent.KeyBinding', 'JTextField',
+ 'JTextPane', 'JToggleButton',
+ 'JToggleButton.ToggleButtonModel', 'JToolBar',
+ 'JToolBar.Separator', 'JToolTip', 'JTree',
+ 'JTree.DynamicUtilTreeNode',
+ 'JTree.EmptySelectionModel', 'JViewport', 'JWindow',
+ 'Kernel', 'Key', 'KeyAdapter', 'KeyEvent',
+ 'KeyException', 'KeyFactory', 'KeyFactorySpi',
+ 'KeyListener', 'KeyManagementException', 'Keymap',
+ 'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi',
+ 'KeySpec', 'KeyStore', 'KeyStoreException',
+ 'KeyStoreSpi', 'KeyStroke', 'Label', 'LabelUI',
+ 'LabelView', 'LastOwnerException',
+ 'LayeredHighlighter',
+ 'LayeredHighlighter.LayerPainter', 'LayoutManager',
+ 'LayoutManager2', 'LayoutQueue', 'LdapContext',
+ 'LdapReferralException', 'Lease',
+ 'LimitExceededException', 'Line', 'Line.Info',
+ 'Line2D', 'Line2D.Double', 'Line2D.Float',
+ 'LineBorder', 'LineBreakMeasurer', 'LineEvent',
+ 'LineEvent.Type', 'LineListener', 'LineMetrics',
+ 'LineNumberInputStream', 'LineNumberReader',
+ 'LineUnavailableException', 'LinkageError',
+ 'LinkedList', 'LinkException', 'LinkLoopException',
+ 'LinkRef', 'List', 'ListCellRenderer',
+ 'ListDataEvent', 'ListDataListener', 'ListIterator',
+ 'ListModel', 'ListResourceBundle',
+ 'ListSelectionEvent', 'ListSelectionListener',
+ 'ListSelectionModel', 'ListUI', 'ListView',
+ 'LoaderHandler', 'Locale', 'LocateRegistry',
+ 'LogStream', 'Long', 'LongHolder',
+ 'LongLongSeqHelper', 'LongLongSeqHolder',
+ 'LongSeqHelper', 'LongSeqHolder', 'LookAndFeel',
+ 'LookupOp', 'LookupTable', 'MalformedLinkException',
+ 'MalformedURLException', 'Manifest', 'Map',
+ 'Map.Entry', 'MARSHAL', 'MarshalException',
+ 'MarshalledObject', 'Math', 'MatteBorder',
+ 'MediaTracker', 'Member', 'MemoryImageSource',
+ 'Menu', 'MenuBar', 'MenuBarUI', 'MenuComponent',
+ 'MenuContainer', 'MenuDragMouseEvent',
+ 'MenuDragMouseListener', 'MenuElement', 'MenuEvent',
+ 'MenuItem', 'MenuItemUI', 'MenuKeyEvent',
+ 'MenuKeyListener', 'MenuListener',
+ 'MenuSelectionManager', 'MenuShortcut',
+ 'MessageDigest', 'MessageDigestSpi', 'MessageFormat',
+ 'MetaEventListener', 'MetalBorders',
+ 'MetalBorders.ButtonBorder',
+ 'MetalBorders.Flush3DBorder',
+ 'MetalBorders.InternalFrameBorder',
+ 'MetalBorders.MenuBarBorder',
+ 'MetalBorders.MenuItemBorder',
+ 'MetalBorders.OptionDialogBorder',
+ 'MetalBorders.PaletteBorder',
+ 'MetalBorders.PopupMenuBorder',
+ 'MetalBorders.RolloverButtonBorder',
+ 'MetalBorders.ScrollPaneBorder',
+ 'MetalBorders.TableHeaderBorder',
+ 'MetalBorders.TextFieldBorder',
+ 'MetalBorders.ToggleButtonBorder',
+ 'MetalBorders.ToolBarBorder', 'MetalButtonUI',
+ 'MetalCheckBoxIcon', 'MetalCheckBoxUI',
+ 'MetalComboBoxButton', 'MetalComboBoxEditor',
+ 'MetalComboBoxEditor.UIResource',
+ 'MetalComboBoxIcon', 'MetalComboBoxUI',
+ 'MetalDesktopIconUI', 'MetalFileChooserUI',
+ 'MetalIconFactory', 'MetalIconFactory.FileIcon16',
+ 'MetalIconFactory.FolderIcon16',
+ 'MetalIconFactory.PaletteCloseIcon',
+ 'MetalIconFactory.TreeControlIcon',
+ 'MetalIconFactory.TreeFolderIcon',
+ 'MetalIconFactory.TreeLeafIcon',
+ 'MetalInternalFrameTitlePane',
+ 'MetalInternalFrameUI', 'MetalLabelUI',
+ 'MetalLookAndFeel', 'MetalPopupMenuSeparatorUI',
+ 'MetalProgressBarUI', 'MetalRadioButtonUI',
+ 'MetalScrollBarUI', 'MetalScrollButton',
+ 'MetalScrollPaneUI', 'MetalSeparatorUI',
+ 'MetalSliderUI', 'MetalSplitPaneUI',
+ 'MetalTabbedPaneUI', 'MetalTextFieldUI',
+ 'MetalTheme', 'MetalToggleButtonUI',
+ 'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI',
+ 'MetaMessage', 'Method', 'MethodDescriptor',
+ 'MidiChannel', 'MidiDevice', 'MidiDevice.Info',
+ 'MidiDeviceProvider', 'MidiEvent', 'MidiFileFormat',
+ 'MidiFileReader', 'MidiFileWriter', 'MidiMessage',
+ 'MidiSystem', 'MidiUnavailableException',
+ 'MimeTypeParseException', 'MinimalHTMLWriter',
+ 'MissingResourceException', 'Mixer', 'Mixer.Info',
+ 'MixerProvider', 'ModificationItem', 'Modifier',
+ 'MouseAdapter', 'MouseDragGestureRecognizer',
+ 'MouseEvent', 'MouseInputAdapter',
+ 'MouseInputListener', 'MouseListener',
+ 'MouseMotionAdapter', 'MouseMotionListener',
+ 'MultiButtonUI', 'MulticastSocket',
+ 'MultiColorChooserUI', 'MultiComboBoxUI',
+ 'MultiDesktopIconUI', 'MultiDesktopPaneUI',
+ 'MultiFileChooserUI', 'MultiInternalFrameUI',
+ 'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel',
+ 'MultiMenuBarUI', 'MultiMenuItemUI',
+ 'MultiOptionPaneUI', 'MultiPanelUI',
+ 'MultiPixelPackedSampleModel', 'MultipleMaster',
+ 'MultiPopupMenuUI', 'MultiProgressBarUI',
+ 'MultiScrollBarUI', 'MultiScrollPaneUI',
+ 'MultiSeparatorUI', 'MultiSliderUI',
+ 'MultiSplitPaneUI', 'MultiTabbedPaneUI',
+ 'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI',
+ 'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI',
+ 'MultiViewportUI', 'MutableAttributeSet',
+ 'MutableComboBoxModel', 'MutableTreeNode', 'Name',
+ 'NameAlreadyBoundException', 'NameClassPair',
+ 'NameComponent', 'NameComponentHelper',
+ 'NameComponentHolder', 'NamedValue', 'NameHelper',
+ 'NameHolder', 'NameNotFoundException', 'NameParser',
+ 'NamespaceChangeListener', 'NameValuePair',
+ 'NameValuePairHelper', 'Naming', 'NamingContext',
+ 'NamingContextHelper', 'NamingContextHolder',
+ 'NamingContextOperations', 'NamingEnumeration',
+ 'NamingEvent', 'NamingException',
+ 'NamingExceptionEvent', 'NamingListener',
+ 'NamingManager', 'NamingSecurityException',
+ 'NegativeArraySizeException', 'NetPermission',
+ 'NoClassDefFoundError', 'NoInitialContextException',
+ 'NoninvertibleTransformException',
+ 'NoPermissionException', 'NoRouteToHostException',
+ 'NoSuchAlgorithmException',
+ 'NoSuchAttributeException', 'NoSuchElementException',
+ 'NoSuchFieldError', 'NoSuchFieldException',
+ 'NoSuchMethodError', 'NoSuchMethodException',
+ 'NoSuchObjectException', 'NoSuchProviderException',
+ 'NotActiveException', 'NotBoundException',
+ 'NotContextException', 'NotEmpty', 'NotEmptyHelper',
+ 'NotEmptyHolder', 'NotFound', 'NotFoundHelper',
+ 'NotFoundHolder', 'NotFoundReason',
+ 'NotFoundReasonHelper', 'NotFoundReasonHolder',
+ 'NotOwnerException', 'NotSerializableException',
+ 'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION',
+ 'NO_RESOURCES', 'NO_RESPONSE',
+ 'NullPointerException', 'Number', 'NumberFormat',
+ 'NumberFormatException', 'NVList', 'Object',
+ 'ObjectChangeListener', 'ObjectFactory',
+ 'ObjectFactoryBuilder', 'ObjectHelper',
+ 'ObjectHolder', 'ObjectImpl',
+ 'ObjectInput', 'ObjectInputStream',
+ 'ObjectInputStream.GetField',
+ 'ObjectInputValidation', 'ObjectOutput',
+ 'ObjectOutputStream', 'ObjectOutputStream.PutField',
+ 'ObjectStreamClass', 'ObjectStreamConstants',
+ 'ObjectStreamException', 'ObjectStreamField',
+ 'ObjectView', 'OBJECT_NOT_EXIST', 'ObjID',
+ 'OBJ_ADAPTER', 'Observable', 'Observer',
+ 'OctetSeqHelper', 'OctetSeqHolder', 'OMGVMCID',
+ 'OpenType', 'Operation',
+ 'OperationNotSupportedException', 'Option',
+ 'OptionalDataException', 'OptionPaneUI', 'ORB',
+ 'OutOfMemoryError', 'OutputStream',
+ 'OutputStreamWriter', 'OverlayLayout', 'Owner',
+ 'Package', 'PackedColorModel', 'Pageable',
+ 'PageAttributes', 'PageAttributes.ColorType',
+ 'PageAttributes.MediaType',
+ 'PageAttributes.OrientationRequestedType',
+ 'PageAttributes.OriginType',
+ 'PageAttributes.PrintQualityType', 'PageFormat',
+ 'Paint', 'PaintContext', 'PaintEvent', 'Panel',
+ 'PanelUI', 'Paper', 'ParagraphView',
+ 'ParameterBlock', 'ParameterDescriptor',
+ 'ParseException', 'ParsePosition', 'Parser',
+ 'ParserDelegator', 'PartialResultException',
+ 'PasswordAuthentication', 'PasswordView', 'Patch',
+ 'PathIterator', 'Permission',
+ 'PermissionCollection', 'Permissions',
+ 'PERSIST_STORE', 'PhantomReference',
+ 'PipedInputStream', 'PipedOutputStream',
+ 'PipedReader', 'PipedWriter', 'PixelGrabber',
+ 'PixelInterleavedSampleModel', 'PKCS8EncodedKeySpec',
+ 'PlainDocument', 'PlainView', 'Point', 'Point2D',
+ 'Point2D.Double', 'Point2D.Float', 'Policy',
+ 'PolicyError', 'PolicyHelper',
+ 'PolicyHolder', 'PolicyListHelper',
+ 'PolicyListHolder', 'PolicyOperations',
+ 'PolicyTypeHelper', 'Polygon', 'PopupMenu',
+ 'PopupMenuEvent', 'PopupMenuListener', 'PopupMenuUI',
+ 'Port', 'Port.Info', 'PortableRemoteObject',
+ 'PortableRemoteObjectDelegate', 'Position',
+ 'Position.Bias', 'PreparedStatement', 'Principal',
+ 'PrincipalHolder', 'Printable',
+ 'PrinterAbortException', 'PrinterException',
+ 'PrinterGraphics', 'PrinterIOException',
+ 'PrinterJob', 'PrintGraphics', 'PrintJob',
+ 'PrintStream', 'PrintWriter', 'PrivateKey',
+ 'PRIVATE_MEMBER', 'PrivilegedAction',
+ 'PrivilegedActionException',
+ 'PrivilegedExceptionAction', 'Process',
+ 'ProfileDataException', 'ProgressBarUI',
+ 'ProgressMonitor', 'ProgressMonitorInputStream',
+ 'Properties', 'PropertyChangeEvent',
+ 'PropertyChangeListener', 'PropertyChangeSupport',
+ 'PropertyDescriptor', 'PropertyEditor',
+ 'PropertyEditorManager', 'PropertyEditorSupport',
+ 'PropertyPermission', 'PropertyResourceBundle',
+ 'PropertyVetoException', 'ProtectionDomain',
+ 'ProtocolException', 'Provider', 'ProviderException',
+ 'Proxy', 'PublicKey', 'PUBLIC_MEMBER',
+ 'PushbackInputStream', 'PushbackReader',
+ 'QuadCurve2D', 'QuadCurve2D.Double',
+ 'QuadCurve2D.Float', 'Random', 'RandomAccessFile',
+ 'Raster', 'RasterFormatException', 'RasterOp',
+ 'Reader', 'Receiver', 'Rectangle', 'Rectangle2D',
+ 'Rectangle2D.Double', 'Rectangle2D.Float',
+ 'RectangularShape', 'Ref', 'RefAddr', 'Reference',
+ 'Referenceable', 'ReferenceQueue',
+ 'ReferralException', 'ReflectPermission', 'Registry',
+ 'RegistryHandler', 'RemarshalException', 'Remote',
+ 'RemoteCall', 'RemoteException', 'RemoteObject',
+ 'RemoteRef', 'RemoteServer', 'RemoteStub',
+ 'RenderableImage', 'RenderableImageOp',
+ 'RenderableImageProducer', 'RenderContext',
+ 'RenderedImage', 'RenderedImageFactory', 'Renderer',
+ 'RenderingHints', 'RenderingHints.Key',
+ 'RepaintManager', 'ReplicateScaleFilter',
+ 'Repository', 'RepositoryIdHelper', 'Request',
+ 'RescaleOp', 'Resolver', 'ResolveResult',
+ 'ResourceBundle', 'ResponseHandler', 'ResultSet',
+ 'ResultSetMetaData', 'ReverbType', 'RGBImageFilter',
+ 'RMIClassLoader', 'RMIClientSocketFactory',
+ 'RMIFailureHandler', 'RMISecurityException',
+ 'RMISecurityManager', 'RMIServerSocketFactory',
+ 'RMISocketFactory', 'Robot', 'RootPaneContainer',
+ 'RootPaneUI', 'RoundRectangle2D',
+ 'RoundRectangle2D.Double', 'RoundRectangle2D.Float',
+ 'RowMapper', 'RSAKey', 'RSAKeyGenParameterSpec',
+ 'RSAPrivateCrtKey', 'RSAPrivateCrtKeySpec',
+ 'RSAPrivateKey', 'RSAPrivateKeySpec', 'RSAPublicKey',
+ 'RSAPublicKeySpec', 'RTFEditorKit',
+ 'RuleBasedCollator', 'Runnable', 'RunTime',
+ 'Runtime', 'RuntimeException', 'RunTimeOperations',
+ 'RuntimePermission', 'SampleModel',
+ 'SchemaViolationException', 'Scrollable',
+ 'Scrollbar', 'ScrollBarUI', 'ScrollPane',
+ 'ScrollPaneConstants', 'ScrollPaneLayout',
+ 'ScrollPaneLayout.UIResource', 'ScrollPaneUI',
+ 'SearchControls', 'SearchResult',
+ 'SecureClassLoader', 'SecureRandom',
+ 'SecureRandomSpi', 'Security', 'SecurityException',
+ 'SecurityManager', 'SecurityPermission', 'Segment',
+ 'SeparatorUI', 'Sequence', 'SequenceInputStream',
+ 'Sequencer', 'Sequencer.SyncMode', 'Serializable',
+ 'SerializablePermission', 'ServantObject',
+ 'ServerCloneException', 'ServerError',
+ 'ServerException', 'ServerNotActiveException',
+ 'ServerRef', 'ServerRequest',
+ 'ServerRuntimeException', 'ServerSocket',
+ 'ServiceDetail', 'ServiceDetailHelper',
+ 'ServiceInformation', 'ServiceInformationHelper',
+ 'ServiceInformationHolder',
+ 'ServiceUnavailableException', 'Set',
+ 'SetOverrideType', 'SetOverrideTypeHelper', 'Shape',
+ 'ShapeGraphicAttribute', 'Short', 'ShortHolder',
+ 'ShortLookupTable', 'ShortMessage', 'ShortSeqHelper',
+ 'ShortSeqHolder', 'Signature', 'SignatureException',
+ 'SignatureSpi', 'SignedObject', 'Signer',
+ 'SimpleAttributeSet', 'SimpleBeanInfo',
+ 'SimpleDateFormat', 'SimpleTimeZone',
+ 'SinglePixelPackedSampleModel',
+ 'SingleSelectionModel', 'SizeLimitExceededException',
+ 'SizeRequirements', 'SizeSequence', 'Skeleton',
+ 'SkeletonMismatchException',
+ 'SkeletonNotFoundException', 'SliderUI', 'Socket',
+ 'SocketException', 'SocketImpl', 'SocketImplFactory',
+ 'SocketOptions', 'SocketPermission',
+ 'SocketSecurityException', 'SoftBevelBorder',
+ 'SoftReference', 'SortedMap', 'SortedSet',
+ 'Soundbank', 'SoundbankReader', 'SoundbankResource',
+ 'SourceDataLine', 'SplitPaneUI', 'SQLData',
+ 'SQLException', 'SQLInput', 'SQLOutput',
+ 'SQLPermission', 'SQLWarning', 'Stack',
+ 'StackOverflowError', 'StateEdit', 'StateEditable',
+ 'StateFactory', 'Statement', 'Streamable',
+ 'StreamableValue', 'StreamCorruptedException',
+ 'StreamTokenizer', 'StrictMath', 'String',
+ 'StringBuffer', 'StringBufferInputStream',
+ 'StringCharacterIterator', 'StringContent',
+ 'StringHolder', 'StringIndexOutOfBoundsException',
+ 'StringReader', 'StringRefAddr', 'StringSelection',
+ 'StringTokenizer', 'StringValueHelper',
+ 'StringWriter', 'Stroke', 'Struct', 'StructMember',
+ 'StructMemberHelper', 'Stub', 'StubDelegate',
+ 'StubNotFoundException', 'Style', 'StyleConstants',
+ 'StyleConstants.CharacterConstants',
+ 'StyleConstants.ColorConstants',
+ 'StyleConstants.FontConstants',
+ 'StyleConstants.ParagraphConstants', 'StyleContext',
+ 'StyledDocument', 'StyledEditorKit',
+ 'StyledEditorKit.AlignmentAction',
+ 'StyledEditorKit.BoldAction',
+ 'StyledEditorKit.FontFamilyAction',
+ 'StyledEditorKit.FontSizeAction',
+ 'StyledEditorKit.ForegroundAction',
+ 'StyledEditorKit.ItalicAction',
+ 'StyledEditorKit.StyledTextAction',
+ 'StyledEditorKit.UnderlineAction', 'StyleSheet',
+ 'StyleSheet.BoxPainter', 'StyleSheet.ListPainter',
+ 'SwingConstants', 'SwingPropertyChangeSupport',
+ 'SwingUtilities', 'SyncFailedException',
+ 'Synthesizer', 'SysexMessage', 'System',
+ 'SystemColor', 'SystemException', 'SystemFlavorMap',
+ 'TabableView', 'TabbedPaneUI', 'TabExpander',
+ 'TableCellEditor', 'TableCellRenderer',
+ 'TableColumn', 'TableColumnModel',
+ 'TableColumnModelEvent', 'TableColumnModelListener',
+ 'TableHeaderUI', 'TableModel', 'TableModelEvent',
+ 'TableModelListener', 'TableUI', 'TableView',
+ 'TabSet', 'TabStop', 'TagElement', 'TargetDataLine',
+ 'TCKind', 'TextAction', 'TextArea', 'TextAttribute',
+ 'TextComponent', 'TextEvent', 'TextField',
+ 'TextHitInfo', 'TextLayout',
+ 'TextLayout.CaretPolicy', 'TextListener',
+ 'TextMeasurer', 'TextUI', 'TexturePaint', 'Thread',
+ 'ThreadDeath', 'ThreadGroup', 'ThreadLocal',
+ 'Throwable', 'Tie', 'TileObserver', 'Time',
+ 'TimeLimitExceededException', 'Timer',
+ 'TimerTask', 'Timestamp', 'TimeZone', 'TitledBorder',
+ 'ToolBarUI', 'Toolkit', 'ToolTipManager',
+ 'ToolTipUI', 'TooManyListenersException', 'Track',
+ 'TransactionRequiredException',
+ 'TransactionRolledbackException',
+ 'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK',
+ 'Transferable', 'TransformAttribute', 'TRANSIENT',
+ 'Transmitter', 'Transparency', 'TreeCellEditor',
+ 'TreeCellRenderer', 'TreeExpansionEvent',
+ 'TreeExpansionListener', 'TreeMap', 'TreeModel',
+ 'TreeModelEvent', 'TreeModelListener', 'TreeNode',
+ 'TreePath', 'TreeSelectionEvent',
+ 'TreeSelectionListener', 'TreeSelectionModel',
+ 'TreeSet', 'TreeUI', 'TreeWillExpandListener',
+ 'TypeCode', 'TypeCodeHolder', 'TypeMismatch',
+ 'Types', 'UID', 'UIDefaults',
+ 'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap',
+ 'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue',
+ 'UIManager', 'UIManager.LookAndFeelInfo',
+ 'UIResource', 'ULongLongSeqHelper',
+ 'ULongLongSeqHolder', 'ULongSeqHelper',
+ 'ULongSeqHolder', 'UndeclaredThrowableException',
+ 'UndoableEdit', 'UndoableEditEvent',
+ 'UndoableEditListener', 'UndoableEditSupport',
+ 'UndoManager', 'UnexpectedException',
+ 'UnicastRemoteObject', 'UnionMember',
+ 'UnionMemberHelper', 'UNKNOWN', 'UnknownError',
+ 'UnknownException', 'UnknownGroupException',
+ 'UnknownHostException',
+ 'UnknownObjectException', 'UnknownServiceException',
+ 'UnknownUserException', 'UnmarshalException',
+ 'UnrecoverableKeyException', 'Unreferenced',
+ 'UnresolvedPermission', 'UnsatisfiedLinkError',
+ 'UnsolicitedNotification',
+ 'UnsolicitedNotificationEvent',
+ 'UnsolicitedNotificationListener',
+ 'UnsupportedAudioFileException',
+ 'UnsupportedClassVersionError',
+ 'UnsupportedEncodingException',
+ 'UnsupportedFlavorException',
+ 'UnsupportedLookAndFeelException',
+ 'UnsupportedOperationException',
+ 'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE',
+ 'URL', 'URLClassLoader', 'URLConnection',
+ 'URLDecoder', 'URLEncoder', 'URLStreamHandler',
+ 'URLStreamHandlerFactory', 'UserException',
+ 'UShortSeqHelper', 'UShortSeqHolder',
+ 'UTFDataFormatException', 'Util', 'UtilDelegate',
+ 'Utilities', 'ValueBase', 'ValueBaseHelper',
+ 'ValueBaseHolder', 'ValueFactory', 'ValueHandler',
+ 'ValueMember', 'ValueMemberHelper',
+ 'VariableHeightLayoutCache', 'Vector', 'VerifyError',
+ 'VersionSpecHelper', 'VetoableChangeListener',
+ 'VetoableChangeSupport', 'View', 'ViewFactory',
+ 'ViewportLayout', 'ViewportUI',
+ 'VirtualMachineError', 'Visibility',
+ 'VisibilityHelper', 'VMID', 'VM_ABSTRACT',
+ 'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE',
+ 'VoiceStatus', 'Void', 'WCharSeqHelper',
+ 'WCharSeqHolder', 'WeakHashMap', 'WeakReference',
+ 'Window', 'WindowAdapter', 'WindowConstants',
+ 'WindowEvent', 'WindowListener', 'WrappedPlainView',
+ 'WritableRaster', 'WritableRenderedImage',
+ 'WriteAbortedException', 'Writer',
+ 'WrongTransaction', 'WStringValueHelper',
+ 'X509Certificate', 'X509CRL', 'X509CRLEntry',
+ 'X509EncodedKeySpec', 'X509Extension', 'ZipEntry',
+ 'ZipException', 'ZipFile', 'ZipInputStream',
+ 'ZipOutputStream', 'ZoneView',
+ '_BindingIteratorImplBase', '_BindingIteratorStub',
+ '_IDLTypeStub', '_NamingContextImplBase',
+ '_NamingContextStub', '_PolicyStub', '_Remote_Stub'
+ ),
+ 4 => array(
+ 'void', 'double', 'int', 'boolean', 'byte', 'short', 'long', 'char', 'float'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}',
+ '+', '-', '*', '/', '%',
+ '!', '&', '|', '^',
+ '<', '>', '=',
+ '?', ':', ';',
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => true,
+ 4 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000066; font-weight: bold;',
+ 3 => 'color: #003399;',
+ 4 => 'color: #000066; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #006699;',
+ 3 => 'color: #008000; font-style: italic; font-weight: bold;',
+ 3 => 'color: #008000; font-style: italic; font-weight: bold;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006633;',
+ 2 => 'color: #006633;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.google.com/search?hl=en&amp;q=allinurl%3A{FNAMEL}+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php
new file mode 100644
index 000000000..34696d760
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php
@@ -0,0 +1,1031 @@
+<?php
+/*************************************************************************************
+ * java.php
+ * --------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/10
+ *
+ * Java language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/25 (1.0.7.22)
+ * - Added highlighting of import and package directives as non-OOP
+ * 2005/12/28 (1.0.4)
+ * - Added instanceof keyword
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/08/05 (1.0.2)
+ * - Added URL support
+ * - Added keyword "this", as bugs in GeSHi class ironed out
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * - Added extra missed keywords
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ * *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Java(TM) 2 Platform Standard Edition 5.0',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Import and Package directives (Basic Support only)
+ 2 => '/(?:(?<=import[\\n\\s])|(?<=package[\\n\\s]))[\\n\\s]*([a-zA-Z0-9_]+\\.)*([a-zA-Z0-9_]+|\*)(?=[\n\s;])/i',
+ // javadoc comments
+ 3 => '#/\*\*(?![\*\/]).*\*/#sU'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ /* see the authoritative list of all 50 Java keywords at */
+ /* http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#229308 */
+
+ /* java keywords, part 1: control flow */
+ 'case', 'default', 'do', 'else', 'for',
+ 'goto', 'if', 'switch', 'while'
+
+ /* IMO 'break', 'continue', 'return' and 'throw' */
+ /* should also be added to this group, as they */
+ /* also manage the control flow, */
+ /* arguably 'try'/'catch'/'finally' as well */
+ ),
+ 2 => array(
+ /* java keywords, part 2 */
+
+ 'break', 'continue', 'return', 'throw',
+ 'try', 'catch', 'finally',
+
+ 'abstract', 'assert', 'class', 'const', 'enum', 'extends',
+ 'final', 'implements', 'import', 'instanceof', 'interface',
+ 'native', 'new', 'package', 'private', 'protected',
+ 'public', 'static', 'strictfp', 'super', 'synchronized',
+ 'this', 'throws', 'transient', 'volatile'
+ ),
+ 3 => array(
+ /* Java keywords, part 3: primitive data types and 'void' */
+ 'boolean', 'byte', 'char', 'double',
+ 'float', 'int', 'long', 'short', 'void'
+ ),
+ 4 => array(
+ /* other reserved words in Java: literals */
+ /* should be styled to look similar to numbers and Strings */
+ 'false', 'null', 'true'
+ ),
+ 5 => array (
+ 'Applet', 'AppletContext', 'AppletStub', 'AudioClip'
+ ),
+ 6 => array (
+ 'AWTError', 'AWTEvent', 'AWTEventMulticaster', 'AWTException', 'AWTKeyStroke', 'AWTPermission', 'ActiveEvent', 'Adjustable', 'AlphaComposite', 'BasicStroke', 'BorderLayout', 'BufferCapabilities', 'BufferCapabilities.FlipContents', 'Button', 'Canvas', 'CardLayout', 'Checkbox', 'CheckboxGroup', 'CheckboxMenuItem', 'Choice', 'Color', 'Component', 'ComponentOrientation', 'Composite', 'CompositeContext', 'Container', 'ContainerOrderFocusTraversalPolicy', 'Cursor', 'DefaultFocusTraversalPolicy', 'DefaultKeyboardFocusManager', 'Dialog', 'Dimension', 'DisplayMode', 'EventQueue', 'FileDialog', 'FlowLayout', 'FocusTraversalPolicy', 'Font', 'FontFormatException', 'FontMetrics', 'Frame', 'GradientPaint', 'Graphics', 'Graphics2D', 'GraphicsConfigTemplate', 'GraphicsConfiguration', 'GraphicsDevice', 'GraphicsEnvironment', 'GridBagConstraints', 'GridBagLayout', 'GridLayout', 'HeadlessException', 'IllegalComponentStateException', 'Image', 'ImageCapabilities', 'Insets', 'ItemSelectable', 'JobAttributes',
+ 'JobAttributes.DefaultSelectionType', 'JobAttributes.DestinationType', 'JobAttributes.DialogType', 'JobAttributes.MultipleDocumentHandlingType', 'JobAttributes.SidesType', 'KeyEventDispatcher', 'KeyEventPostProcessor', 'KeyboardFocusManager', 'Label', 'LayoutManager', 'LayoutManager2', 'MediaTracker', 'Menu', 'MenuBar', 'MenuComponent', 'MenuContainer', 'MenuItem', 'MenuShortcut', 'MouseInfo', 'PageAttributes', 'PageAttributes.ColorType', 'PageAttributes.MediaType', 'PageAttributes.OrientationRequestedType', 'PageAttributes.OriginType', 'PageAttributes.PrintQualityType', 'Paint', 'PaintContext', 'Panel', 'Point', 'PointerInfo', 'Polygon', 'PopupMenu', 'PrintGraphics', 'PrintJob', 'Rectangle', 'RenderingHints', 'RenderingHints.Key', 'Robot', 'ScrollPane', 'ScrollPaneAdjustable', 'Scrollbar', 'Shape', 'Stroke', 'SystemColor', 'TextArea', 'TextComponent', 'TextField', 'TexturePaint', 'Toolkit', 'Transparency', 'Window'
+ ),
+ 7 => array (
+ 'CMMException', 'ColorSpace', 'ICC_ColorSpace', 'ICC_Profile', 'ICC_ProfileGray', 'ICC_ProfileRGB', 'ProfileDataException'
+ ),
+ 8 => array (
+ 'Clipboard', 'ClipboardOwner', 'DataFlavor', 'FlavorEvent', 'FlavorListener', 'FlavorMap', 'FlavorTable', 'MimeTypeParseException', 'StringSelection', 'SystemFlavorMap', 'Transferable', 'UnsupportedFlavorException'
+ ),
+ 9 => array (
+ 'Autoscroll', 'DnDConstants', 'DragGestureEvent', 'DragGestureListener', 'DragGestureRecognizer', 'DragSource', 'DragSourceAdapter', 'DragSourceContext', 'DragSourceDragEvent', 'DragSourceDropEvent', 'DragSourceEvent', 'DragSourceListener', 'DragSourceMotionListener', 'DropTarget', 'DropTarget.DropTargetAutoScroller', 'DropTargetAdapter', 'DropTargetContext', 'DropTargetDragEvent', 'DropTargetDropEvent', 'DropTargetEvent', 'DropTargetListener', 'InvalidDnDOperationException', 'MouseDragGestureRecognizer'
+ ),
+ 10 => array (
+ 'AWTEventListener', 'AWTEventListenerProxy', 'ActionEvent', 'ActionListener', 'AdjustmentEvent', 'AdjustmentListener', 'ComponentAdapter', 'ComponentEvent', 'ComponentListener', 'ContainerAdapter', 'ContainerEvent', 'ContainerListener', 'FocusAdapter', 'FocusEvent', 'FocusListener', 'HierarchyBoundsAdapter', 'HierarchyBoundsListener', 'HierarchyEvent', 'HierarchyListener', 'InputEvent', 'InputMethodEvent', 'InputMethodListener', 'InvocationEvent', 'ItemEvent', 'ItemListener', 'KeyAdapter', 'KeyEvent', 'KeyListener', 'MouseAdapter', 'MouseListener', 'MouseMotionAdapter', 'MouseMotionListener', 'MouseWheelEvent', 'MouseWheelListener', 'PaintEvent', 'TextEvent', 'TextListener', 'WindowAdapter', 'WindowEvent', 'WindowFocusListener', 'WindowListener', 'WindowStateListener'
+ ),
+ 11 => array (
+ 'FontRenderContext', 'GlyphJustificationInfo', 'GlyphMetrics', 'GlyphVector', 'GraphicAttribute', 'ImageGraphicAttribute', 'LineBreakMeasurer', 'LineMetrics', 'MultipleMaster', 'NumericShaper', 'ShapeGraphicAttribute', 'TextAttribute', 'TextHitInfo', 'TextLayout', 'TextLayout.CaretPolicy', 'TextMeasurer', 'TransformAttribute'
+ ),
+ 12 => array (
+ 'AffineTransform', 'Arc2D', 'Arc2D.Double', 'Arc2D.Float', 'Area', 'CubicCurve2D', 'CubicCurve2D.Double', 'CubicCurve2D.Float', 'Dimension2D', 'Ellipse2D', 'Ellipse2D.Double', 'Ellipse2D.Float', 'FlatteningPathIterator', 'GeneralPath', 'IllegalPathStateException', 'Line2D', 'Line2D.Double', 'Line2D.Float', 'NoninvertibleTransformException', 'PathIterator', 'Point2D', 'Point2D.Double', 'Point2D.Float', 'QuadCurve2D', 'QuadCurve2D.Double', 'QuadCurve2D.Float', 'Rectangle2D', 'Rectangle2D.Double', 'Rectangle2D.Float', 'RectangularShape', 'RoundRectangle2D', 'RoundRectangle2D.Double', 'RoundRectangle2D.Float'
+ ),
+ 13 => array (
+ 'InputContext', 'InputMethodHighlight', 'InputMethodRequests', 'InputSubset'
+ ),
+ 14 => array (
+ 'InputMethod', 'InputMethodContext', 'InputMethodDescriptor'
+ ),
+ 15 => array (
+ 'AffineTransformOp', 'AreaAveragingScaleFilter', 'BandCombineOp', 'BandedSampleModel', 'BufferStrategy', 'BufferedImage', 'BufferedImageFilter', 'BufferedImageOp', 'ByteLookupTable', 'ColorConvertOp', 'ColorModel', 'ComponentColorModel', 'ComponentSampleModel', 'ConvolveOp', 'CropImageFilter', 'DataBuffer', 'DataBufferByte', 'DataBufferDouble', 'DataBufferFloat', 'DataBufferInt', 'DataBufferShort', 'DataBufferUShort', 'DirectColorModel', 'FilteredImageSource', 'ImageConsumer', 'ImageFilter', 'ImageObserver', 'ImageProducer', 'ImagingOpException', 'IndexColorModel', 'Kernel', 'LookupOp', 'LookupTable', 'MemoryImageSource', 'MultiPixelPackedSampleModel', 'PackedColorModel', 'PixelGrabber', 'PixelInterleavedSampleModel', 'RGBImageFilter', 'Raster', 'RasterFormatException', 'RasterOp', 'RenderedImage', 'ReplicateScaleFilter', 'RescaleOp', 'SampleModel', 'ShortLookupTable', 'SinglePixelPackedSampleModel', 'TileObserver', 'VolatileImage', 'WritableRaster', 'WritableRenderedImage'
+ ),
+ 16 => array (
+ 'ContextualRenderedImageFactory', 'ParameterBlock', 'RenderContext', 'RenderableImage', 'RenderableImageOp', 'RenderableImageProducer', 'RenderedImageFactory'
+ ),
+ 17 => array (
+ 'Book', 'PageFormat', 'Pageable', 'Paper', 'Printable', 'PrinterAbortException', 'PrinterException', 'PrinterGraphics', 'PrinterIOException', 'PrinterJob'
+ ),
+ 18 => array (
+ 'AppletInitializer', 'BeanDescriptor', 'BeanInfo', 'Beans', 'Customizer', 'DefaultPersistenceDelegate', 'DesignMode', 'Encoder', 'EventHandler', 'EventSetDescriptor', 'ExceptionListener', 'Expression', 'FeatureDescriptor', 'IndexedPropertyChangeEvent', 'IndexedPropertyDescriptor', 'Introspector', 'MethodDescriptor', 'ParameterDescriptor', 'PersistenceDelegate', 'PropertyChangeEvent', 'PropertyChangeListener', 'PropertyChangeListenerProxy', 'PropertyChangeSupport', 'PropertyDescriptor', 'PropertyEditor', 'PropertyEditorManager', 'PropertyEditorSupport', 'PropertyVetoException', 'SimpleBeanInfo', 'VetoableChangeListener', 'VetoableChangeListenerProxy', 'VetoableChangeSupport', 'Visibility', 'XMLDecoder', 'XMLEncoder'
+ ),
+ 19 => array (
+ 'BeanContext', 'BeanContextChild', 'BeanContextChildComponentProxy', 'BeanContextChildSupport', 'BeanContextContainerProxy', 'BeanContextEvent', 'BeanContextMembershipEvent', 'BeanContextMembershipListener', 'BeanContextProxy', 'BeanContextServiceAvailableEvent', 'BeanContextServiceProvider', 'BeanContextServiceProviderBeanInfo', 'BeanContextServiceRevokedEvent', 'BeanContextServiceRevokedListener', 'BeanContextServices', 'BeanContextServicesListener', 'BeanContextServicesSupport', 'BeanContextServicesSupport.BCSSServiceProvider', 'BeanContextSupport', 'BeanContextSupport.BCSIterator'
+ ),
+ 20 => array (
+ 'BufferedInputStream', 'BufferedOutputStream', 'BufferedReader', 'BufferedWriter', 'ByteArrayInputStream', 'ByteArrayOutputStream', 'CharArrayReader', 'CharArrayWriter', 'CharConversionException', 'Closeable', 'DataInput', 'DataOutput', 'EOFException', 'Externalizable', 'File', 'FileDescriptor', 'FileInputStream', 'FileNotFoundException', 'FileOutputStream', 'FilePermission', 'FileReader', 'FileWriter', 'FilenameFilter', 'FilterInputStream', 'FilterOutputStream', 'FilterReader', 'FilterWriter', 'Flushable', 'IOException', 'InputStreamReader', 'InterruptedIOException', 'InvalidClassException', 'InvalidObjectException', 'LineNumberInputStream', 'LineNumberReader', 'NotActiveException', 'NotSerializableException', 'ObjectInput', 'ObjectInputStream', 'ObjectInputStream.GetField', 'ObjectInputValidation', 'ObjectOutput', 'ObjectOutputStream', 'ObjectOutputStream.PutField', 'ObjectStreamClass', 'ObjectStreamConstants', 'ObjectStreamException', 'ObjectStreamField', 'OptionalDataException', 'OutputStreamWriter',
+ 'PipedInputStream', 'PipedOutputStream', 'PipedReader', 'PipedWriter', 'PrintStream', 'PrintWriter', 'PushbackInputStream', 'PushbackReader', 'RandomAccessFile', 'Reader', 'SequenceInputStream', 'Serializable', 'SerializablePermission', 'StreamCorruptedException', 'StreamTokenizer', 'StringBufferInputStream', 'StringReader', 'StringWriter', 'SyncFailedException', 'UTFDataFormatException', 'UnsupportedEncodingException', 'WriteAbortedException', 'Writer'
+ ),
+ 21 => array (
+ 'AbstractMethodError', 'Appendable', 'ArithmeticException', 'ArrayIndexOutOfBoundsException', 'ArrayStoreException', 'AssertionError', 'Boolean', 'Byte', 'CharSequence', 'Character', 'Character.Subset', 'Character.UnicodeBlock', 'Class', 'ClassCastException', 'ClassCircularityError', 'ClassFormatError', 'ClassLoader', 'ClassNotFoundException', 'CloneNotSupportedException', 'Cloneable', 'Comparable', 'Compiler', 'Deprecated', 'Double', 'Enum', 'EnumConstantNotPresentException', 'Error', 'Exception', 'ExceptionInInitializerError', 'Float', 'IllegalAccessError', 'IllegalAccessException', 'IllegalArgumentException', 'IllegalMonitorStateException', 'IllegalStateException', 'IllegalThreadStateException', 'IncompatibleClassChangeError', 'IndexOutOfBoundsException', 'InheritableThreadLocal', 'InstantiationError', 'InstantiationException', 'Integer', 'InternalError', 'InterruptedException', 'Iterable', 'LinkageError', 'Long', 'Math', 'NegativeArraySizeException', 'NoClassDefFoundError', 'NoSuchFieldError',
+ 'NoSuchFieldException', 'NoSuchMethodError', 'NoSuchMethodException', 'NullPointerException', 'Number', 'NumberFormatException', 'OutOfMemoryError', 'Override', 'Package', 'Process', 'ProcessBuilder', 'Readable', 'Runnable', 'Runtime', 'RuntimeException', 'RuntimePermission', 'SecurityException', 'SecurityManager', 'Short', 'StackOverflowError', 'StackTraceElement', 'StrictMath', 'String', 'StringBuffer', 'StringBuilder', 'StringIndexOutOfBoundsException', 'SuppressWarnings', 'System', 'Thread', 'Thread.State', 'Thread.UncaughtExceptionHandler', 'ThreadDeath', 'ThreadGroup', 'ThreadLocal', 'Throwable', 'TypeNotPresentException', 'UnknownError', 'UnsatisfiedLinkError', 'UnsupportedClassVersionError', 'UnsupportedOperationException', 'VerifyError', 'VirtualMachineError', 'Void'
+ ),
+ 22 => array (
+ 'AnnotationFormatError', 'AnnotationTypeMismatchException', 'Documented', 'ElementType', 'IncompleteAnnotationException', 'Inherited', 'Retention', 'RetentionPolicy', 'Target'
+ ),
+ 23 => array (
+ 'ClassDefinition', 'ClassFileTransformer', 'IllegalClassFormatException', 'Instrumentation', 'UnmodifiableClassException'
+ ),
+ 24 => array (
+ 'ClassLoadingMXBean', 'CompilationMXBean', 'GarbageCollectorMXBean', 'ManagementFactory', 'ManagementPermission', 'MemoryMXBean', 'MemoryManagerMXBean', 'MemoryNotificationInfo', 'MemoryPoolMXBean', 'MemoryType', 'MemoryUsage', 'OperatingSystemMXBean', 'RuntimeMXBean', 'ThreadInfo', 'ThreadMXBean'
+ ),
+ 25 => array (
+ 'PhantomReference', 'ReferenceQueue', 'SoftReference', 'WeakReference'
+ ),
+ 26 => array (
+ 'AccessibleObject', 'AnnotatedElement', 'Constructor', 'Field', 'GenericArrayType', 'GenericDeclaration', 'GenericSignatureFormatError', 'InvocationHandler', 'InvocationTargetException', 'MalformedParameterizedTypeException', 'Member', 'Method', 'Modifier', 'ParameterizedType', 'ReflectPermission', 'Type', 'TypeVariable', 'UndeclaredThrowableException', 'WildcardType'
+ ),
+ 27 => array (
+ 'BigDecimal', 'BigInteger', 'MathContext', 'RoundingMode'
+ ),
+ 28 => array (
+ 'Authenticator', 'Authenticator.RequestorType', 'BindException', 'CacheRequest', 'CacheResponse', 'ContentHandlerFactory', 'CookieHandler', 'DatagramPacket', 'DatagramSocket', 'DatagramSocketImpl', 'DatagramSocketImplFactory', 'FileNameMap', 'HttpRetryException', 'HttpURLConnection', 'Inet4Address', 'Inet6Address', 'InetAddress', 'InetSocketAddress', 'JarURLConnection', 'MalformedURLException', 'MulticastSocket', 'NetPermission', 'NetworkInterface', 'NoRouteToHostException', 'PasswordAuthentication', 'PortUnreachableException', 'ProtocolException', 'Proxy.Type', 'ProxySelector', 'ResponseCache', 'SecureCacheResponse', 'ServerSocket', 'Socket', 'SocketAddress', 'SocketException', 'SocketImpl', 'SocketImplFactory', 'SocketOptions', 'SocketPermission', 'SocketTimeoutException', 'URI', 'URISyntaxException', 'URL', 'URLClassLoader', 'URLConnection', 'URLDecoder', 'URLEncoder', 'URLStreamHandler', 'URLStreamHandlerFactory', 'UnknownServiceException'
+ ),
+ 29 => array (
+ 'Buffer', 'BufferOverflowException', 'BufferUnderflowException', 'ByteBuffer', 'ByteOrder', 'CharBuffer', 'DoubleBuffer', 'FloatBuffer', 'IntBuffer', 'InvalidMarkException', 'LongBuffer', 'MappedByteBuffer', 'ReadOnlyBufferException', 'ShortBuffer'
+ ),
+ 30 => array (
+ 'AlreadyConnectedException', 'AsynchronousCloseException', 'ByteChannel', 'CancelledKeyException', 'Channel', 'Channels', 'ClosedByInterruptException', 'ClosedChannelException', 'ClosedSelectorException', 'ConnectionPendingException', 'DatagramChannel', 'FileChannel', 'FileChannel.MapMode', 'FileLock', 'FileLockInterruptionException', 'GatheringByteChannel', 'IllegalBlockingModeException', 'IllegalSelectorException', 'InterruptibleChannel', 'NoConnectionPendingException', 'NonReadableChannelException', 'NonWritableChannelException', 'NotYetBoundException', 'NotYetConnectedException', 'OverlappingFileLockException', 'Pipe', 'Pipe.SinkChannel', 'Pipe.SourceChannel', 'ReadableByteChannel', 'ScatteringByteChannel', 'SelectableChannel', 'SelectionKey', 'Selector', 'ServerSocketChannel', 'SocketChannel', 'UnresolvedAddressException', 'UnsupportedAddressTypeException', 'WritableByteChannel'
+ ),
+ 31 => array (
+ 'AbstractInterruptibleChannel', 'AbstractSelectableChannel', 'AbstractSelectionKey', 'AbstractSelector', 'SelectorProvider'
+ ),
+ 32 => array (
+ 'CharacterCodingException', 'Charset', 'CharsetDecoder', 'CharsetEncoder', 'CoderMalfunctionError', 'CoderResult', 'CodingErrorAction', 'IllegalCharsetNameException', 'MalformedInputException', 'UnmappableCharacterException', 'UnsupportedCharsetException'
+ ),
+ 33 => array (
+ 'CharsetProvider'
+ ),
+ 34 => array (
+ 'AccessException', 'AlreadyBoundException', 'ConnectIOException', 'MarshalException', 'MarshalledObject', 'Naming', 'NoSuchObjectException', 'NotBoundException', 'RMISecurityException', 'RMISecurityManager', 'Remote', 'RemoteException', 'ServerError', 'ServerException', 'ServerRuntimeException', 'StubNotFoundException', 'UnexpectedException', 'UnmarshalException'
+ ),
+ 35 => array (
+ 'Activatable', 'ActivateFailedException', 'ActivationDesc', 'ActivationException', 'ActivationGroup', 'ActivationGroupDesc', 'ActivationGroupDesc.CommandEnvironment', 'ActivationGroupID', 'ActivationGroup_Stub', 'ActivationID', 'ActivationInstantiator', 'ActivationMonitor', 'ActivationSystem', 'Activator', 'UnknownGroupException', 'UnknownObjectException'
+ ),
+ 36 => array (
+ 'DGC', 'Lease', 'VMID'
+ ),
+ 37 => array (
+ 'LocateRegistry', 'Registry', 'RegistryHandler'
+ ),
+ 38 => array (
+ 'ExportException', 'LoaderHandler', 'LogStream', 'ObjID', 'Operation', 'RMIClassLoader', 'RMIClassLoaderSpi', 'RMIClientSocketFactory', 'RMIFailureHandler', 'RMIServerSocketFactory', 'RMISocketFactory', 'RemoteCall', 'RemoteObject', 'RemoteObjectInvocationHandler', 'RemoteRef', 'RemoteServer', 'RemoteStub', 'ServerCloneException', 'ServerNotActiveException', 'ServerRef', 'Skeleton', 'SkeletonMismatchException', 'SkeletonNotFoundException', 'SocketSecurityException', 'UID', 'UnicastRemoteObject', 'Unreferenced'
+ ),
+ 39 => array (
+ 'AccessControlContext', 'AccessControlException', 'AccessController', 'AlgorithmParameterGenerator', 'AlgorithmParameterGeneratorSpi', 'AlgorithmParameters', 'AlgorithmParametersSpi', 'AllPermission', 'AuthProvider', 'BasicPermission', 'CodeSigner', 'CodeSource', 'DigestException', 'DigestInputStream', 'DigestOutputStream', 'DomainCombiner', 'GeneralSecurityException', 'Guard', 'GuardedObject', 'Identity', 'IdentityScope', 'InvalidAlgorithmParameterException', 'InvalidParameterException', 'Key', 'KeyException', 'KeyFactory', 'KeyFactorySpi', 'KeyManagementException', 'KeyPair', 'KeyPairGenerator', 'KeyPairGeneratorSpi', 'KeyRep', 'KeyRep.Type', 'KeyStore', 'KeyStore.Builder', 'KeyStore.CallbackHandlerProtection', 'KeyStore.Entry', 'KeyStore.LoadStoreParameter', 'KeyStore.PasswordProtection', 'KeyStore.PrivateKeyEntry', 'KeyStore.ProtectionParameter', 'KeyStore.SecretKeyEntry', 'KeyStore.TrustedCertificateEntry', 'KeyStoreException', 'KeyStoreSpi', 'MessageDigest', 'MessageDigestSpi',
+ 'NoSuchAlgorithmException', 'NoSuchProviderException', 'PermissionCollection', 'Permissions', 'PrivateKey', 'PrivilegedAction', 'PrivilegedActionException', 'PrivilegedExceptionAction', 'ProtectionDomain', 'Provider', 'Provider.Service', 'ProviderException', 'PublicKey', 'SecureClassLoader', 'SecureRandom', 'SecureRandomSpi', 'Security', 'SecurityPermission', 'Signature', 'SignatureException', 'SignatureSpi', 'SignedObject', 'Signer', 'UnrecoverableEntryException', 'UnrecoverableKeyException', 'UnresolvedPermission'
+ ),
+ 40 => array (
+ 'Acl', 'AclEntry', 'AclNotFoundException', 'Group', 'LastOwnerException', 'NotOwnerException', 'Owner'
+ ),
+ 41 => array (
+ 'CRL', 'CRLException', 'CRLSelector', 'CertPath', 'CertPath.CertPathRep', 'CertPathBuilder', 'CertPathBuilderException', 'CertPathBuilderResult', 'CertPathBuilderSpi', 'CertPathParameters', 'CertPathValidator', 'CertPathValidatorException', 'CertPathValidatorResult', 'CertPathValidatorSpi', 'CertSelector', 'CertStore', 'CertStoreException', 'CertStoreParameters', 'CertStoreSpi', 'Certificate.CertificateRep', 'CertificateFactory', 'CertificateFactorySpi', 'CollectionCertStoreParameters', 'LDAPCertStoreParameters', 'PKIXBuilderParameters', 'PKIXCertPathBuilderResult', 'PKIXCertPathChecker', 'PKIXCertPathValidatorResult', 'PKIXParameters', 'PolicyNode', 'PolicyQualifierInfo', 'TrustAnchor', 'X509CRL', 'X509CRLEntry', 'X509CRLSelector', 'X509CertSelector', 'X509Extension'
+ ),
+ 42 => array (
+ 'DSAKey', 'DSAKeyPairGenerator', 'DSAParams', 'DSAPrivateKey', 'DSAPublicKey', 'ECKey', 'ECPrivateKey', 'ECPublicKey', 'RSAKey', 'RSAMultiPrimePrivateCrtKey', 'RSAPrivateCrtKey', 'RSAPrivateKey', 'RSAPublicKey'
+ ),
+ 43 => array (
+ 'AlgorithmParameterSpec', 'DSAParameterSpec', 'DSAPrivateKeySpec', 'DSAPublicKeySpec', 'ECField', 'ECFieldF2m', 'ECFieldFp', 'ECGenParameterSpec', 'ECParameterSpec', 'ECPoint', 'ECPrivateKeySpec', 'ECPublicKeySpec', 'EllipticCurve', 'EncodedKeySpec', 'InvalidKeySpecException', 'InvalidParameterSpecException', 'KeySpec', 'MGF1ParameterSpec', 'PKCS8EncodedKeySpec', 'PSSParameterSpec', 'RSAKeyGenParameterSpec', 'RSAMultiPrimePrivateCrtKeySpec', 'RSAOtherPrimeInfo', 'RSAPrivateCrtKeySpec', 'RSAPrivateKeySpec', 'RSAPublicKeySpec', 'X509EncodedKeySpec'
+ ),
+ 44 => array (
+ 'BatchUpdateException', 'Blob', 'CallableStatement', 'Clob', 'Connection', 'DataTruncation', 'DatabaseMetaData', 'Driver', 'DriverManager', 'DriverPropertyInfo', 'ParameterMetaData', 'PreparedStatement', 'Ref', 'ResultSet', 'ResultSetMetaData', 'SQLData', 'SQLException', 'SQLInput', 'SQLOutput', 'SQLPermission', 'SQLWarning', 'Savepoint', 'Struct', 'Time', 'Types'
+ ),
+ 45 => array (
+ 'AttributedCharacterIterator', 'AttributedCharacterIterator.Attribute', 'AttributedString', 'Bidi', 'BreakIterator', 'CharacterIterator', 'ChoiceFormat', 'CollationElementIterator', 'CollationKey', 'Collator', 'DateFormat', 'DateFormat.Field', 'DateFormatSymbols', 'DecimalFormat', 'DecimalFormatSymbols', 'FieldPosition', 'Format', 'Format.Field', 'MessageFormat', 'MessageFormat.Field', 'NumberFormat', 'NumberFormat.Field', 'ParseException', 'ParsePosition', 'RuleBasedCollator', 'SimpleDateFormat', 'StringCharacterIterator'
+ ),
+ 46 => array (
+ 'AbstractCollection', 'AbstractList', 'AbstractMap', 'AbstractQueue', 'AbstractSequentialList', 'AbstractSet', 'ArrayList', 'Arrays', 'BitSet', 'Calendar', 'Collection', 'Collections', 'Comparator', 'ConcurrentModificationException', 'Currency', 'Dictionary', 'DuplicateFormatFlagsException', 'EmptyStackException', 'EnumMap', 'EnumSet', 'Enumeration', 'EventListenerProxy', 'EventObject', 'FormatFlagsConversionMismatchException', 'Formattable', 'FormattableFlags', 'Formatter.BigDecimalLayoutForm', 'FormatterClosedException', 'GregorianCalendar', 'HashMap', 'HashSet', 'Hashtable', 'IdentityHashMap', 'IllegalFormatCodePointException', 'IllegalFormatConversionException', 'IllegalFormatException', 'IllegalFormatFlagsException', 'IllegalFormatPrecisionException', 'IllegalFormatWidthException', 'InputMismatchException', 'InvalidPropertiesFormatException', 'Iterator', 'LinkedHashMap', 'LinkedHashSet', 'LinkedList', 'ListIterator', 'ListResourceBundle', 'Locale', 'Map', 'Map.Entry', 'MissingFormatArgumentException',
+ 'MissingFormatWidthException', 'MissingResourceException', 'NoSuchElementException', 'Observable', 'Observer', 'PriorityQueue', 'Properties', 'PropertyPermission', 'PropertyResourceBundle', 'Queue', 'Random', 'RandomAccess', 'ResourceBundle', 'Scanner', 'Set', 'SimpleTimeZone', 'SortedMap', 'SortedSet', 'Stack', 'StringTokenizer', 'TimeZone', 'TimerTask', 'TooManyListenersException', 'TreeMap', 'TreeSet', 'UUID', 'UnknownFormatConversionException', 'UnknownFormatFlagsException', 'Vector', 'WeakHashMap'
+ ),
+ 47 => array (
+ 'AbstractExecutorService', 'ArrayBlockingQueue', 'BlockingQueue', 'BrokenBarrierException', 'Callable', 'CancellationException', 'CompletionService', 'ConcurrentHashMap', 'ConcurrentLinkedQueue', 'ConcurrentMap', 'CopyOnWriteArrayList', 'CopyOnWriteArraySet', 'CountDownLatch', 'CyclicBarrier', 'DelayQueue', 'Delayed', 'Exchanger', 'ExecutionException', 'Executor', 'ExecutorCompletionService', 'ExecutorService', 'Executors', 'Future', 'FutureTask', 'LinkedBlockingQueue', 'PriorityBlockingQueue', 'RejectedExecutionException', 'RejectedExecutionHandler', 'ScheduledExecutorService', 'ScheduledFuture', 'ScheduledThreadPoolExecutor', 'Semaphore', 'SynchronousQueue', 'ThreadFactory', 'ThreadPoolExecutor', 'ThreadPoolExecutor.AbortPolicy', 'ThreadPoolExecutor.CallerRunsPolicy', 'ThreadPoolExecutor.DiscardOldestPolicy', 'ThreadPoolExecutor.DiscardPolicy', 'TimeUnit', 'TimeoutException'
+ ),
+ 48 => array (
+ 'AtomicBoolean', 'AtomicInteger', 'AtomicIntegerArray', 'AtomicIntegerFieldUpdater', 'AtomicLong', 'AtomicLongArray', 'AtomicLongFieldUpdater', 'AtomicMarkableReference', 'AtomicReference', 'AtomicReferenceArray', 'AtomicReferenceFieldUpdater', 'AtomicStampedReference'
+ ),
+ 49 => array (
+ 'AbstractQueuedSynchronizer', 'Condition', 'Lock', 'LockSupport', 'ReadWriteLock', 'ReentrantLock', 'ReentrantReadWriteLock', 'ReentrantReadWriteLock.ReadLock', 'ReentrantReadWriteLock.WriteLock'
+ ),
+ 50 => array (
+ 'Attributes.Name', 'JarEntry', 'JarException', 'JarFile', 'JarInputStream', 'JarOutputStream', 'Manifest', 'Pack200', 'Pack200.Packer', 'Pack200.Unpacker'
+ ),
+ 51 => array (
+ 'ConsoleHandler', 'ErrorManager', 'FileHandler', 'Filter', 'Handler', 'Level', 'LogManager', 'LogRecord', 'Logger', 'LoggingMXBean', 'LoggingPermission', 'MemoryHandler', 'SimpleFormatter', 'SocketHandler', 'StreamHandler', 'XMLFormatter'
+ ),
+ 52 => array (
+ 'AbstractPreferences', 'BackingStoreException', 'InvalidPreferencesFormatException', 'NodeChangeEvent', 'NodeChangeListener', 'PreferenceChangeEvent', 'PreferenceChangeListener', 'Preferences', 'PreferencesFactory'
+ ),
+ 53 => array (
+ 'MatchResult', 'Matcher', 'Pattern', 'PatternSyntaxException'
+ ),
+ 54 => array (
+ 'Adler32', 'CRC32', 'CheckedInputStream', 'CheckedOutputStream', 'Checksum', 'DataFormatException', 'Deflater', 'DeflaterOutputStream', 'GZIPInputStream', 'GZIPOutputStream', 'Inflater', 'InflaterInputStream', 'ZipEntry', 'ZipException', 'ZipFile', 'ZipInputStream', 'ZipOutputStream'
+ ),
+ 55 => array (
+ 'Accessible', 'AccessibleAction', 'AccessibleAttributeSequence', 'AccessibleBundle', 'AccessibleComponent', 'AccessibleContext', 'AccessibleEditableText', 'AccessibleExtendedComponent', 'AccessibleExtendedTable', 'AccessibleExtendedText', 'AccessibleHyperlink', 'AccessibleHypertext', 'AccessibleIcon', 'AccessibleKeyBinding', 'AccessibleRelation', 'AccessibleRelationSet', 'AccessibleResourceBundle', 'AccessibleRole', 'AccessibleSelection', 'AccessibleState', 'AccessibleStateSet', 'AccessibleStreamable', 'AccessibleTable', 'AccessibleTableModelChange', 'AccessibleText', 'AccessibleTextSequence', 'AccessibleValue'
+ ),
+ 56 => array (
+ 'ActivityCompletedException', 'ActivityRequiredException', 'InvalidActivityException'
+ ),
+ 57 => array (
+ 'BadPaddingException', 'Cipher', 'CipherInputStream', 'CipherOutputStream', 'CipherSpi', 'EncryptedPrivateKeyInfo', 'ExemptionMechanism', 'ExemptionMechanismException', 'ExemptionMechanismSpi', 'IllegalBlockSizeException', 'KeyAgreement', 'KeyAgreementSpi', 'KeyGenerator', 'KeyGeneratorSpi', 'Mac', 'MacSpi', 'NoSuchPaddingException', 'NullCipher', 'SealedObject', 'SecretKey', 'SecretKeyFactory', 'SecretKeyFactorySpi', 'ShortBufferException'
+ ),
+ 58 => array (
+ 'DHKey', 'DHPrivateKey', 'DHPublicKey', 'PBEKey'
+ ),
+ 59 => array (
+ 'DESKeySpec', 'DESedeKeySpec', 'DHGenParameterSpec', 'DHParameterSpec', 'DHPrivateKeySpec', 'DHPublicKeySpec', 'IvParameterSpec', 'OAEPParameterSpec', 'PBEKeySpec', 'PBEParameterSpec', 'PSource', 'PSource.PSpecified', 'RC2ParameterSpec', 'RC5ParameterSpec', 'SecretKeySpec'
+ ),
+ 60 => array (
+ 'IIOException', 'IIOImage', 'IIOParam', 'IIOParamController', 'ImageIO', 'ImageReadParam', 'ImageReader', 'ImageTranscoder', 'ImageTypeSpecifier', 'ImageWriteParam', 'ImageWriter'
+ ),
+ 61 => array (
+ 'IIOReadProgressListener', 'IIOReadUpdateListener', 'IIOReadWarningListener', 'IIOWriteProgressListener', 'IIOWriteWarningListener'
+ ),
+ 62 => array (
+ 'IIOInvalidTreeException', 'IIOMetadata', 'IIOMetadataController', 'IIOMetadataFormat', 'IIOMetadataFormatImpl', 'IIOMetadataNode'
+ ),
+ 63 => array (
+ 'BMPImageWriteParam'
+ ),
+ 64 => array (
+ 'JPEGHuffmanTable', 'JPEGImageReadParam', 'JPEGImageWriteParam', 'JPEGQTable'
+ ),
+ 65 => array (
+ 'IIORegistry', 'IIOServiceProvider', 'ImageInputStreamSpi', 'ImageOutputStreamSpi', 'ImageReaderSpi', 'ImageReaderWriterSpi', 'ImageTranscoderSpi', 'ImageWriterSpi', 'RegisterableService', 'ServiceRegistry', 'ServiceRegistry.Filter'
+ ),
+ 66 => array (
+ 'FileCacheImageInputStream', 'FileCacheImageOutputStream', 'FileImageInputStream', 'FileImageOutputStream', 'IIOByteBuffer', 'ImageInputStream', 'ImageInputStreamImpl', 'ImageOutputStream', 'ImageOutputStreamImpl', 'MemoryCacheImageInputStream', 'MemoryCacheImageOutputStream'
+ ),
+ 67 => array (
+ 'AttributeChangeNotification', 'AttributeChangeNotificationFilter', 'AttributeNotFoundException', 'AttributeValueExp', 'BadAttributeValueExpException', 'BadBinaryOpValueExpException', 'BadStringOperationException', 'Descriptor', 'DescriptorAccess', 'DynamicMBean', 'InstanceAlreadyExistsException', 'InstanceNotFoundException', 'InvalidApplicationException', 'JMException', 'JMRuntimeException', 'ListenerNotFoundException', 'MBeanAttributeInfo', 'MBeanConstructorInfo', 'MBeanException', 'MBeanFeatureInfo', 'MBeanInfo', 'MBeanNotificationInfo', 'MBeanOperationInfo', 'MBeanParameterInfo', 'MBeanPermission', 'MBeanRegistration', 'MBeanRegistrationException', 'MBeanServer', 'MBeanServerBuilder', 'MBeanServerConnection', 'MBeanServerDelegate', 'MBeanServerDelegateMBean', 'MBeanServerFactory', 'MBeanServerInvocationHandler', 'MBeanServerNotification', 'MBeanServerPermission', 'MBeanTrustPermission', 'MalformedObjectNameException', 'NotCompliantMBeanException', 'Notification', 'NotificationBroadcaster',
+ 'NotificationBroadcasterSupport', 'NotificationEmitter', 'NotificationFilter', 'NotificationFilterSupport', 'NotificationListener', 'ObjectInstance', 'ObjectName', 'OperationsException', 'PersistentMBean', 'Query', 'QueryEval', 'QueryExp', 'ReflectionException', 'RuntimeErrorException', 'RuntimeMBeanException', 'RuntimeOperationsException', 'ServiceNotFoundException', 'StandardMBean', 'StringValueExp', 'ValueExp'
+ ),
+ 68 => array (
+ 'ClassLoaderRepository', 'MLet', 'MLetMBean', 'PrivateClassLoader', 'PrivateMLet'
+ ),
+ 69 => array (
+ 'DescriptorSupport', 'InvalidTargetObjectTypeException', 'ModelMBean', 'ModelMBeanAttributeInfo', 'ModelMBeanConstructorInfo', 'ModelMBeanInfo', 'ModelMBeanInfoSupport', 'ModelMBeanNotificationBroadcaster', 'ModelMBeanNotificationInfo', 'ModelMBeanOperationInfo', 'RequiredModelMBean', 'XMLParseException'
+ ),
+ 70 => array (
+ 'CounterMonitor', 'CounterMonitorMBean', 'GaugeMonitor', 'GaugeMonitorMBean', 'Monitor', 'MonitorMBean', 'MonitorNotification', 'MonitorSettingException', 'StringMonitor', 'StringMonitorMBean'
+ ),
+ 71 => array (
+ 'ArrayType', 'CompositeData', 'CompositeDataSupport', 'CompositeType', 'InvalidOpenTypeException', 'KeyAlreadyExistsException', 'OpenDataException', 'OpenMBeanAttributeInfo', 'OpenMBeanAttributeInfoSupport', 'OpenMBeanConstructorInfo', 'OpenMBeanConstructorInfoSupport', 'OpenMBeanInfo', 'OpenMBeanInfoSupport', 'OpenMBeanOperationInfo', 'OpenMBeanOperationInfoSupport', 'OpenMBeanParameterInfo', 'OpenMBeanParameterInfoSupport', 'SimpleType', 'TabularData', 'TabularDataSupport', 'TabularType'
+ ),
+ 72 => array (
+ 'InvalidRelationIdException', 'InvalidRelationServiceException', 'InvalidRelationTypeException', 'InvalidRoleInfoException', 'InvalidRoleValueException', 'MBeanServerNotificationFilter', 'Relation', 'RelationException', 'RelationNotFoundException', 'RelationNotification', 'RelationService', 'RelationServiceMBean', 'RelationServiceNotRegisteredException', 'RelationSupport', 'RelationSupportMBean', 'RelationType', 'RelationTypeNotFoundException', 'RelationTypeSupport', 'Role', 'RoleInfo', 'RoleInfoNotFoundException', 'RoleList', 'RoleNotFoundException', 'RoleResult', 'RoleStatus', 'RoleUnresolved', 'RoleUnresolvedList'
+ ),
+ 73 => array (
+ 'JMXAuthenticator', 'JMXConnectionNotification', 'JMXConnector', 'JMXConnectorFactory', 'JMXConnectorProvider', 'JMXConnectorServer', 'JMXConnectorServerFactory', 'JMXConnectorServerMBean', 'JMXConnectorServerProvider', 'JMXPrincipal', 'JMXProviderException', 'JMXServerErrorException', 'JMXServiceURL', 'MBeanServerForwarder', 'NotificationResult', 'SubjectDelegationPermission', 'TargetedNotification'
+ ),
+ 74 => array (
+ 'RMIConnection', 'RMIConnectionImpl', 'RMIConnectionImpl_Stub', 'RMIConnector', 'RMIConnectorServer', 'RMIIIOPServerImpl', 'RMIJRMPServerImpl', 'RMIServer', 'RMIServerImpl', 'RMIServerImpl_Stub'
+ ),
+ 75 => array (
+ 'TimerAlarmClockNotification', 'TimerMBean', 'TimerNotification'
+ ),
+ 76 => array (
+ 'AuthenticationNotSupportedException', 'BinaryRefAddr', 'CannotProceedException', 'CommunicationException', 'CompositeName', 'CompoundName', 'ConfigurationException', 'ContextNotEmptyException', 'InitialContext', 'InsufficientResourcesException', 'InterruptedNamingException', 'InvalidNameException', 'LimitExceededException', 'LinkException', 'LinkLoopException', 'LinkRef', 'MalformedLinkException', 'Name', 'NameAlreadyBoundException', 'NameClassPair', 'NameNotFoundException', 'NameParser', 'NamingEnumeration', 'NamingException', 'NamingSecurityException', 'NoInitialContextException', 'NoPermissionException', 'NotContextException', 'OperationNotSupportedException', 'PartialResultException', 'RefAddr', 'Referenceable', 'ReferralException', 'ServiceUnavailableException', 'SizeLimitExceededException', 'StringRefAddr', 'TimeLimitExceededException'
+ ),
+ 77 => array (
+ 'AttributeInUseException', 'AttributeModificationException', 'BasicAttribute', 'BasicAttributes', 'DirContext', 'InitialDirContext', 'InvalidAttributeIdentifierException', 'InvalidAttributesException', 'InvalidSearchControlsException', 'InvalidSearchFilterException', 'ModificationItem', 'NoSuchAttributeException', 'SchemaViolationException', 'SearchControls', 'SearchResult'
+ ),
+ 78 => array (
+ 'EventContext', 'EventDirContext', 'NamespaceChangeListener', 'NamingEvent', 'NamingExceptionEvent', 'NamingListener', 'ObjectChangeListener'
+ ),
+ 79 => array (
+ 'BasicControl', 'ControlFactory', 'ExtendedRequest', 'ExtendedResponse', 'HasControls', 'InitialLdapContext', 'LdapContext', 'LdapName', 'LdapReferralException', 'ManageReferralControl', 'PagedResultsControl', 'PagedResultsResponseControl', 'Rdn', 'SortControl', 'SortKey', 'SortResponseControl', 'StartTlsRequest', 'StartTlsResponse', 'UnsolicitedNotification', 'UnsolicitedNotificationEvent', 'UnsolicitedNotificationListener'
+ ),
+ 80 => array (
+ 'DirObjectFactory', 'DirStateFactory', 'DirStateFactory.Result', 'DirectoryManager', 'InitialContextFactory', 'InitialContextFactoryBuilder', 'NamingManager', 'ObjectFactory', 'ObjectFactoryBuilder', 'ResolveResult', 'Resolver', 'StateFactory'
+ ),
+ 81 => array (
+ 'ServerSocketFactory', 'SocketFactory'
+ ),
+ 82 => array (
+ 'CertPathTrustManagerParameters', 'HandshakeCompletedEvent', 'HandshakeCompletedListener', 'HostnameVerifier', 'HttpsURLConnection', 'KeyManager', 'KeyManagerFactory', 'KeyManagerFactorySpi', 'KeyStoreBuilderParameters', 'ManagerFactoryParameters', 'SSLContext', 'SSLContextSpi', 'SSLEngine', 'SSLEngineResult', 'SSLEngineResult.HandshakeStatus', 'SSLEngineResult.Status', 'SSLException', 'SSLHandshakeException', 'SSLKeyException', 'SSLPeerUnverifiedException', 'SSLPermission', 'SSLProtocolException', 'SSLServerSocket', 'SSLServerSocketFactory', 'SSLSession', 'SSLSessionBindingEvent', 'SSLSessionBindingListener', 'SSLSessionContext', 'SSLSocket', 'SSLSocketFactory', 'TrustManager', 'TrustManagerFactory', 'TrustManagerFactorySpi', 'X509ExtendedKeyManager', 'X509KeyManager', 'X509TrustManager'
+ ),
+ 83 => array (
+ 'AttributeException', 'CancelablePrintJob', 'Doc', 'DocFlavor', 'DocFlavor.BYTE_ARRAY', 'DocFlavor.CHAR_ARRAY', 'DocFlavor.INPUT_STREAM', 'DocFlavor.READER', 'DocFlavor.SERVICE_FORMATTED', 'DocFlavor.STRING', 'DocFlavor.URL', 'DocPrintJob', 'FlavorException', 'MultiDoc', 'MultiDocPrintJob', 'MultiDocPrintService', 'PrintException', 'PrintService', 'PrintServiceLookup', 'ServiceUI', 'ServiceUIFactory', 'SimpleDoc', 'StreamPrintService', 'StreamPrintServiceFactory', 'URIException'
+ ),
+ 84 => array (
+ 'AttributeSetUtilities', 'DateTimeSyntax', 'DocAttribute', 'DocAttributeSet', 'EnumSyntax', 'HashAttributeSet', 'HashDocAttributeSet', 'HashPrintJobAttributeSet', 'HashPrintRequestAttributeSet', 'HashPrintServiceAttributeSet', 'IntegerSyntax', 'PrintJobAttribute', 'PrintJobAttributeSet', 'PrintRequestAttribute', 'PrintRequestAttributeSet', 'PrintServiceAttribute', 'PrintServiceAttributeSet', 'ResolutionSyntax', 'SetOfIntegerSyntax', 'Size2DSyntax', 'SupportedValuesAttribute', 'TextSyntax', 'URISyntax', 'UnmodifiableSetException'
+ ),
+ 85 => array (
+ 'Chromaticity', 'ColorSupported', 'Compression', 'Copies', 'CopiesSupported', 'DateTimeAtCompleted', 'DateTimeAtCreation', 'DateTimeAtProcessing', 'Destination', 'DocumentName', 'Fidelity', 'Finishings', 'JobHoldUntil', 'JobImpressions', 'JobImpressionsCompleted', 'JobImpressionsSupported', 'JobKOctets', 'JobKOctetsProcessed', 'JobKOctetsSupported', 'JobMediaSheets', 'JobMediaSheetsCompleted', 'JobMediaSheetsSupported', 'JobMessageFromOperator', 'JobName', 'JobOriginatingUserName', 'JobPriority', 'JobPrioritySupported', 'JobSheets', 'JobState', 'JobStateReason', 'JobStateReasons', 'Media', 'MediaName', 'MediaPrintableArea', 'MediaSize', 'MediaSize.Engineering', 'MediaSize.ISO', 'MediaSize.JIS', 'MediaSize.NA', 'MediaSize.Other', 'MediaSizeName', 'MediaTray', 'MultipleDocumentHandling', 'NumberOfDocuments', 'NumberOfInterveningJobs', 'NumberUp', 'NumberUpSupported', 'OrientationRequested', 'OutputDeviceAssigned', 'PDLOverrideSupported', 'PageRanges', 'PagesPerMinute', 'PagesPerMinuteColor',
+ 'PresentationDirection', 'PrintQuality', 'PrinterInfo', 'PrinterIsAcceptingJobs', 'PrinterLocation', 'PrinterMakeAndModel', 'PrinterMessageFromOperator', 'PrinterMoreInfo', 'PrinterMoreInfoManufacturer', 'PrinterName', 'PrinterResolution', 'PrinterState', 'PrinterStateReason', 'PrinterStateReasons', 'PrinterURI', 'QueuedJobCount', 'ReferenceUriSchemesSupported', 'RequestingUserName', 'Severity', 'SheetCollate', 'Sides'
+ ),
+ 86 => array (
+ 'PrintEvent', 'PrintJobAdapter', 'PrintJobAttributeEvent', 'PrintJobAttributeListener', 'PrintJobEvent', 'PrintJobListener', 'PrintServiceAttributeEvent', 'PrintServiceAttributeListener'
+ ),
+ 87 => array (
+ 'PortableRemoteObject'
+ ),
+ 88 => array (
+ 'ClassDesc', 'PortableRemoteObjectDelegate', 'Stub', 'StubDelegate', 'Tie', 'Util', 'UtilDelegate', 'ValueHandler', 'ValueHandlerMultiFormat'
+ ),
+ 89 => array (
+ 'SslRMIClientSocketFactory', 'SslRMIServerSocketFactory'
+ ),
+ 90 => array (
+ 'AuthPermission', 'DestroyFailedException', 'Destroyable', 'PrivateCredentialPermission', 'RefreshFailedException', 'Refreshable', 'Subject', 'SubjectDomainCombiner'
+ ),
+ 91 => array (
+ 'Callback', 'CallbackHandler', 'ChoiceCallback', 'ConfirmationCallback', 'LanguageCallback', 'NameCallback', 'PasswordCallback', 'TextInputCallback', 'TextOutputCallback', 'UnsupportedCallbackException'
+ ),
+ 92 => array (
+ 'DelegationPermission', 'KerberosKey', 'KerberosPrincipal', 'KerberosTicket', 'ServicePermission'
+ ),
+ 93 => array (
+ 'AccountException', 'AccountExpiredException', 'AccountLockedException', 'AccountNotFoundException', 'AppConfigurationEntry', 'AppConfigurationEntry.LoginModuleControlFlag', 'Configuration', 'CredentialException', 'CredentialExpiredException', 'CredentialNotFoundException', 'FailedLoginException', 'LoginContext', 'LoginException'
+ ),
+ 94 => array (
+ 'LoginModule'
+ ),
+ 95 => array (
+ 'X500Principal', 'X500PrivateCredential'
+ ),
+ 96 => array (
+ 'AuthorizeCallback', 'RealmCallback', 'RealmChoiceCallback', 'Sasl', 'SaslClient', 'SaslClientFactory', 'SaslException', 'SaslServer', 'SaslServerFactory'
+ ),
+ 97 => array (
+ 'ControllerEventListener', 'Instrument', 'InvalidMidiDataException', 'MetaEventListener', 'MetaMessage', 'MidiChannel', 'MidiDevice', 'MidiDevice.Info', 'MidiEvent', 'MidiFileFormat', 'MidiMessage', 'MidiSystem', 'MidiUnavailableException', 'Patch', 'Receiver', 'Sequence', 'Sequencer', 'Sequencer.SyncMode', 'ShortMessage', 'Soundbank', 'SoundbankResource', 'Synthesizer', 'SysexMessage', 'Track', 'Transmitter', 'VoiceStatus'
+ ),
+ 98 => array (
+ 'MidiDeviceProvider', 'MidiFileReader', 'MidiFileWriter', 'SoundbankReader'
+ ),
+ 99 => array (
+ 'AudioFileFormat', 'AudioFileFormat.Type', 'AudioFormat', 'AudioFormat.Encoding', 'AudioInputStream', 'AudioPermission', 'AudioSystem', 'BooleanControl', 'BooleanControl.Type', 'Clip', 'CompoundControl', 'CompoundControl.Type', 'Control.Type', 'DataLine', 'DataLine.Info', 'EnumControl', 'EnumControl.Type', 'FloatControl', 'FloatControl.Type', 'Line', 'Line.Info', 'LineEvent', 'LineEvent.Type', 'LineListener', 'LineUnavailableException', 'Mixer', 'Mixer.Info', 'Port', 'Port.Info', 'ReverbType', 'SourceDataLine', 'TargetDataLine', 'UnsupportedAudioFileException'
+ ),
+ 100 => array (
+ 'AudioFileReader', 'AudioFileWriter', 'FormatConversionProvider', 'MixerProvider'
+ ),
+ 101 => array (
+ 'ConnectionEvent', 'ConnectionEventListener', 'ConnectionPoolDataSource', 'DataSource', 'PooledConnection', 'RowSet', 'RowSetEvent', 'RowSetInternal', 'RowSetListener', 'RowSetMetaData', 'RowSetReader', 'RowSetWriter', 'XAConnection', 'XADataSource'
+ ),
+ 102 => array (
+ 'BaseRowSet', 'CachedRowSet', 'FilteredRowSet', 'JdbcRowSet', 'JoinRowSet', 'Joinable', 'Predicate', 'RowSetMetaDataImpl', 'RowSetWarning', 'WebRowSet'
+ ),
+ 103 => array (
+ 'SQLInputImpl', 'SQLOutputImpl', 'SerialArray', 'SerialBlob', 'SerialClob', 'SerialDatalink', 'SerialException', 'SerialJavaObject', 'SerialRef', 'SerialStruct'
+ ),
+ 104 => array (
+ 'SyncFactory', 'SyncFactoryException', 'SyncProvider', 'SyncProviderException', 'SyncResolver', 'TransactionalWriter', 'XmlReader', 'XmlWriter'
+ ),
+ 105 => array (
+ 'AbstractAction', 'AbstractButton', 'AbstractCellEditor', 'AbstractListModel', 'AbstractSpinnerModel', 'Action', 'ActionMap', 'BorderFactory', 'BoundedRangeModel', 'Box', 'Box.Filler', 'BoxLayout', 'ButtonGroup', 'ButtonModel', 'CellEditor', 'CellRendererPane', 'ComboBoxEditor', 'ComboBoxModel', 'ComponentInputMap', 'DebugGraphics', 'DefaultBoundedRangeModel', 'DefaultButtonModel', 'DefaultCellEditor', 'DefaultComboBoxModel', 'DefaultDesktopManager', 'DefaultFocusManager', 'DefaultListCellRenderer', 'DefaultListCellRenderer.UIResource', 'DefaultListModel', 'DefaultListSelectionModel', 'DefaultSingleSelectionModel', 'DesktopManager', 'FocusManager', 'GrayFilter', 'Icon', 'ImageIcon', 'InputMap', 'InputVerifier', 'InternalFrameFocusTraversalPolicy', 'JApplet', 'JButton', 'JCheckBox', 'JCheckBoxMenuItem', 'JColorChooser', 'JComboBox', 'JComboBox.KeySelectionManager', 'JComponent', 'JDesktopPane', 'JDialog', 'JEditorPane', 'JFileChooser', 'JFormattedTextField', 'JFormattedTextField.AbstractFormatter',
+ 'JFormattedTextField.AbstractFormatterFactory', 'JFrame', 'JInternalFrame', 'JInternalFrame.JDesktopIcon', 'JLabel', 'JLayeredPane', 'JList', 'JMenu', 'JMenuBar', 'JMenuItem', 'JOptionPane', 'JPanel', 'JPasswordField', 'JPopupMenu', 'JPopupMenu.Separator', 'JProgressBar', 'JRadioButton', 'JRadioButtonMenuItem', 'JRootPane', 'JScrollBar', 'JScrollPane', 'JSeparator', 'JSlider', 'JSpinner', 'JSpinner.DateEditor', 'JSpinner.DefaultEditor', 'JSpinner.ListEditor', 'JSpinner.NumberEditor', 'JSplitPane', 'JTabbedPane', 'JTable', 'JTable.PrintMode', 'JTextArea', 'JTextField', 'JTextPane', 'JToggleButton', 'JToggleButton.ToggleButtonModel', 'JToolBar', 'JToolBar.Separator', 'JToolTip', 'JTree', 'JTree.DynamicUtilTreeNode', 'JTree.EmptySelectionModel', 'JViewport', 'JWindow', 'KeyStroke', 'LayoutFocusTraversalPolicy', 'ListCellRenderer', 'ListModel', 'ListSelectionModel', 'LookAndFeel', 'MenuElement', 'MenuSelectionManager', 'MutableComboBoxModel', 'OverlayLayout', 'Popup', 'PopupFactory', 'ProgressMonitor',
+ 'ProgressMonitorInputStream', 'Renderer', 'RepaintManager', 'RootPaneContainer', 'ScrollPaneConstants', 'ScrollPaneLayout', 'ScrollPaneLayout.UIResource', 'Scrollable', 'SingleSelectionModel', 'SizeRequirements', 'SizeSequence', 'SortingFocusTraversalPolicy', 'SpinnerDateModel', 'SpinnerListModel', 'SpinnerModel', 'SpinnerNumberModel', 'Spring', 'SpringLayout', 'SpringLayout.Constraints', 'SwingConstants', 'SwingUtilities', 'ToolTipManager', 'TransferHandler', 'UIDefaults', 'UIDefaults.ActiveValue', 'UIDefaults.LazyInputMap', 'UIDefaults.LazyValue', 'UIDefaults.ProxyLazyValue', 'UIManager', 'UIManager.LookAndFeelInfo', 'UnsupportedLookAndFeelException', 'ViewportLayout', 'WindowConstants'
+ ),
+ 106 => array (
+ 'AbstractBorder', 'BevelBorder', 'Border', 'CompoundBorder', 'EmptyBorder', 'EtchedBorder', 'LineBorder', 'MatteBorder', 'SoftBevelBorder', 'TitledBorder'
+ ),
+ 107 => array (
+ 'AbstractColorChooserPanel', 'ColorChooserComponentFactory', 'ColorSelectionModel', 'DefaultColorSelectionModel'
+ ),
+ 108 => array (
+ 'AncestorEvent', 'AncestorListener', 'CaretEvent', 'CaretListener', 'CellEditorListener', 'ChangeEvent', 'ChangeListener', 'DocumentEvent.ElementChange', 'DocumentEvent.EventType', 'DocumentListener', 'EventListenerList', 'HyperlinkEvent', 'HyperlinkEvent.EventType', 'HyperlinkListener', 'InternalFrameAdapter', 'InternalFrameEvent', 'InternalFrameListener', 'ListDataEvent', 'ListDataListener', 'ListSelectionEvent', 'ListSelectionListener', 'MenuDragMouseEvent', 'MenuDragMouseListener', 'MenuEvent', 'MenuKeyEvent', 'MenuKeyListener', 'MenuListener', 'MouseInputAdapter', 'MouseInputListener', 'PopupMenuEvent', 'PopupMenuListener', 'SwingPropertyChangeSupport', 'TableColumnModelEvent', 'TableColumnModelListener', 'TableModelEvent', 'TableModelListener', 'TreeExpansionEvent', 'TreeExpansionListener', 'TreeModelEvent', 'TreeModelListener', 'TreeSelectionEvent', 'TreeSelectionListener', 'TreeWillExpandListener', 'UndoableEditEvent', 'UndoableEditListener'
+ ),
+ 109 => array (
+ 'FileSystemView', 'FileView'
+ ),
+ 110 => array (
+ 'ActionMapUIResource', 'BorderUIResource', 'BorderUIResource.BevelBorderUIResource', 'BorderUIResource.CompoundBorderUIResource', 'BorderUIResource.EmptyBorderUIResource', 'BorderUIResource.EtchedBorderUIResource', 'BorderUIResource.LineBorderUIResource', 'BorderUIResource.MatteBorderUIResource', 'BorderUIResource.TitledBorderUIResource', 'ButtonUI', 'ColorChooserUI', 'ColorUIResource', 'ComboBoxUI', 'ComponentInputMapUIResource', 'ComponentUI', 'DesktopIconUI', 'DesktopPaneUI', 'DimensionUIResource', 'FileChooserUI', 'FontUIResource', 'IconUIResource', 'InputMapUIResource', 'InsetsUIResource', 'InternalFrameUI', 'LabelUI', 'ListUI', 'MenuBarUI', 'MenuItemUI', 'OptionPaneUI', 'PanelUI', 'PopupMenuUI', 'ProgressBarUI', 'RootPaneUI', 'ScrollBarUI', 'ScrollPaneUI', 'SeparatorUI', 'SliderUI', 'SpinnerUI', 'SplitPaneUI', 'TabbedPaneUI', 'TableHeaderUI', 'TableUI', 'TextUI', 'ToolBarUI', 'ToolTipUI', 'TreeUI', 'UIResource', 'ViewportUI'
+ ),
+ 111 => array (
+ 'BasicArrowButton', 'BasicBorders', 'BasicBorders.ButtonBorder', 'BasicBorders.FieldBorder', 'BasicBorders.MarginBorder', 'BasicBorders.MenuBarBorder', 'BasicBorders.RadioButtonBorder', 'BasicBorders.RolloverButtonBorder', 'BasicBorders.SplitPaneBorder', 'BasicBorders.ToggleButtonBorder', 'BasicButtonListener', 'BasicButtonUI', 'BasicCheckBoxMenuItemUI', 'BasicCheckBoxUI', 'BasicColorChooserUI', 'BasicComboBoxEditor', 'BasicComboBoxEditor.UIResource', 'BasicComboBoxRenderer', 'BasicComboBoxRenderer.UIResource', 'BasicComboBoxUI', 'BasicComboPopup', 'BasicDesktopIconUI', 'BasicDesktopPaneUI', 'BasicDirectoryModel', 'BasicEditorPaneUI', 'BasicFileChooserUI', 'BasicFormattedTextFieldUI', 'BasicGraphicsUtils', 'BasicHTML', 'BasicIconFactory', 'BasicInternalFrameTitlePane', 'BasicInternalFrameUI', 'BasicLabelUI', 'BasicListUI', 'BasicLookAndFeel', 'BasicMenuBarUI', 'BasicMenuItemUI', 'BasicMenuUI', 'BasicOptionPaneUI', 'BasicOptionPaneUI.ButtonAreaLayout', 'BasicPanelUI', 'BasicPasswordFieldUI',
+ 'BasicPopupMenuSeparatorUI', 'BasicPopupMenuUI', 'BasicProgressBarUI', 'BasicRadioButtonMenuItemUI', 'BasicRadioButtonUI', 'BasicRootPaneUI', 'BasicScrollBarUI', 'BasicScrollPaneUI', 'BasicSeparatorUI', 'BasicSliderUI', 'BasicSpinnerUI', 'BasicSplitPaneDivider', 'BasicSplitPaneUI', 'BasicTabbedPaneUI', 'BasicTableHeaderUI', 'BasicTableUI', 'BasicTextAreaUI', 'BasicTextFieldUI', 'BasicTextPaneUI', 'BasicTextUI', 'BasicTextUI.BasicCaret', 'BasicTextUI.BasicHighlighter', 'BasicToggleButtonUI', 'BasicToolBarSeparatorUI', 'BasicToolBarUI', 'BasicToolTipUI', 'BasicTreeUI', 'BasicViewportUI', 'ComboPopup', 'DefaultMenuLayout'
+ ),
+ 112 => array (
+ 'DefaultMetalTheme', 'MetalBorders', 'MetalBorders.ButtonBorder', 'MetalBorders.Flush3DBorder', 'MetalBorders.InternalFrameBorder', 'MetalBorders.MenuBarBorder', 'MetalBorders.MenuItemBorder', 'MetalBorders.OptionDialogBorder', 'MetalBorders.PaletteBorder', 'MetalBorders.PopupMenuBorder', 'MetalBorders.RolloverButtonBorder', 'MetalBorders.ScrollPaneBorder', 'MetalBorders.TableHeaderBorder', 'MetalBorders.TextFieldBorder', 'MetalBorders.ToggleButtonBorder', 'MetalBorders.ToolBarBorder', 'MetalButtonUI', 'MetalCheckBoxIcon', 'MetalCheckBoxUI', 'MetalComboBoxButton', 'MetalComboBoxEditor', 'MetalComboBoxEditor.UIResource', 'MetalComboBoxIcon', 'MetalComboBoxUI', 'MetalDesktopIconUI', 'MetalFileChooserUI', 'MetalIconFactory', 'MetalIconFactory.FileIcon16', 'MetalIconFactory.FolderIcon16', 'MetalIconFactory.PaletteCloseIcon', 'MetalIconFactory.TreeControlIcon', 'MetalIconFactory.TreeFolderIcon', 'MetalIconFactory.TreeLeafIcon', 'MetalInternalFrameTitlePane', 'MetalInternalFrameUI', 'MetalLabelUI',
+ 'MetalLookAndFeel', 'MetalMenuBarUI', 'MetalPopupMenuSeparatorUI', 'MetalProgressBarUI', 'MetalRadioButtonUI', 'MetalRootPaneUI', 'MetalScrollBarUI', 'MetalScrollButton', 'MetalScrollPaneUI', 'MetalSeparatorUI', 'MetalSliderUI', 'MetalSplitPaneUI', 'MetalTabbedPaneUI', 'MetalTextFieldUI', 'MetalTheme', 'MetalToggleButtonUI', 'MetalToolBarUI', 'MetalToolTipUI', 'MetalTreeUI', 'OceanTheme'
+ ),
+ 113 => array (
+ 'MultiButtonUI', 'MultiColorChooserUI', 'MultiComboBoxUI', 'MultiDesktopIconUI', 'MultiDesktopPaneUI', 'MultiFileChooserUI', 'MultiInternalFrameUI', 'MultiLabelUI', 'MultiListUI', 'MultiLookAndFeel', 'MultiMenuBarUI', 'MultiMenuItemUI', 'MultiOptionPaneUI', 'MultiPanelUI', 'MultiPopupMenuUI', 'MultiProgressBarUI', 'MultiRootPaneUI', 'MultiScrollBarUI', 'MultiScrollPaneUI', 'MultiSeparatorUI', 'MultiSliderUI', 'MultiSpinnerUI', 'MultiSplitPaneUI', 'MultiTabbedPaneUI', 'MultiTableHeaderUI', 'MultiTableUI', 'MultiTextUI', 'MultiToolBarUI', 'MultiToolTipUI', 'MultiTreeUI', 'MultiViewportUI'
+ ),
+ 114 => array (
+ 'ColorType', 'Region', 'SynthConstants', 'SynthContext', 'SynthGraphicsUtils', 'SynthLookAndFeel', 'SynthPainter', 'SynthStyle', 'SynthStyleFactory'
+ ),
+ 115 => array (
+ 'AbstractTableModel', 'DefaultTableCellRenderer', 'DefaultTableCellRenderer.UIResource', 'DefaultTableColumnModel', 'DefaultTableModel', 'JTableHeader', 'TableCellEditor', 'TableCellRenderer', 'TableColumn', 'TableColumnModel', 'TableModel'
+ ),
+ 116 => array (
+ 'AbstractDocument', 'AbstractDocument.AttributeContext', 'AbstractDocument.Content', 'AbstractDocument.ElementEdit', 'AbstractWriter', 'AsyncBoxView', 'AttributeSet.CharacterAttribute', 'AttributeSet.ColorAttribute', 'AttributeSet.FontAttribute', 'AttributeSet.ParagraphAttribute', 'BadLocationException', 'BoxView', 'Caret', 'ChangedCharSetException', 'ComponentView', 'CompositeView', 'DateFormatter', 'DefaultCaret', 'DefaultEditorKit', 'DefaultEditorKit.BeepAction', 'DefaultEditorKit.CopyAction', 'DefaultEditorKit.CutAction', 'DefaultEditorKit.DefaultKeyTypedAction', 'DefaultEditorKit.InsertBreakAction', 'DefaultEditorKit.InsertContentAction', 'DefaultEditorKit.InsertTabAction', 'DefaultEditorKit.PasteAction', 'DefaultFormatter', 'DefaultFormatterFactory', 'DefaultHighlighter', 'DefaultHighlighter.DefaultHighlightPainter', 'DefaultStyledDocument', 'DefaultStyledDocument.AttributeUndoableEdit', 'DefaultStyledDocument.ElementSpec', 'DefaultTextUI', 'DocumentFilter', 'DocumentFilter.FilterBypass',
+ 'EditorKit', 'ElementIterator', 'FieldView', 'FlowView', 'FlowView.FlowStrategy', 'GapContent', 'GlyphView', 'GlyphView.GlyphPainter', 'Highlighter', 'Highlighter.Highlight', 'Highlighter.HighlightPainter', 'IconView', 'InternationalFormatter', 'JTextComponent', 'JTextComponent.KeyBinding', 'Keymap', 'LabelView', 'LayeredHighlighter', 'LayeredHighlighter.LayerPainter', 'LayoutQueue', 'MaskFormatter', 'MutableAttributeSet', 'NavigationFilter', 'NavigationFilter.FilterBypass', 'NumberFormatter', 'PasswordView', 'PlainDocument', 'PlainView', 'Position', 'Position.Bias', 'Segment', 'SimpleAttributeSet', 'StringContent', 'Style', 'StyleConstants', 'StyleConstants.CharacterConstants', 'StyleConstants.ColorConstants', 'StyleConstants.FontConstants', 'StyleConstants.ParagraphConstants', 'StyleContext', 'StyledDocument', 'StyledEditorKit', 'StyledEditorKit.AlignmentAction', 'StyledEditorKit.BoldAction', 'StyledEditorKit.FontFamilyAction', 'StyledEditorKit.FontSizeAction', 'StyledEditorKit.ForegroundAction',
+ 'StyledEditorKit.ItalicAction', 'StyledEditorKit.StyledTextAction', 'StyledEditorKit.UnderlineAction', 'TabExpander', 'TabSet', 'TabStop', 'TabableView', 'TableView', 'TextAction', 'Utilities', 'View', 'ViewFactory', 'WrappedPlainView', 'ZoneView'
+ ),
+ 117 => array (
+ 'BlockView', 'CSS', 'CSS.Attribute', 'FormSubmitEvent', 'FormSubmitEvent.MethodType', 'FormView', 'HTML', 'HTML.Attribute', 'HTML.Tag', 'HTML.UnknownTag', 'HTMLDocument', 'HTMLDocument.Iterator', 'HTMLEditorKit', 'HTMLEditorKit.HTMLFactory', 'HTMLEditorKit.HTMLTextAction', 'HTMLEditorKit.InsertHTMLTextAction', 'HTMLEditorKit.LinkController', 'HTMLEditorKit.Parser', 'HTMLEditorKit.ParserCallback', 'HTMLFrameHyperlinkEvent', 'HTMLWriter', 'ImageView', 'InlineView', 'ListView', 'MinimalHTMLWriter', 'ObjectView', 'Option', 'StyleSheet', 'StyleSheet.BoxPainter', 'StyleSheet.ListPainter'
+ ),
+ 118 => array (
+ 'ContentModel', 'DTD', 'DTDConstants', 'DocumentParser', 'ParserDelegator', 'TagElement'
+ ),
+ 119 => array (
+ 'RTFEditorKit'
+ ),
+ 120 => array (
+ 'AbstractLayoutCache', 'AbstractLayoutCache.NodeDimensions', 'DefaultMutableTreeNode', 'DefaultTreeCellEditor', 'DefaultTreeCellRenderer', 'DefaultTreeModel', 'DefaultTreeSelectionModel', 'ExpandVetoException', 'FixedHeightLayoutCache', 'MutableTreeNode', 'RowMapper', 'TreeCellEditor', 'TreeCellRenderer', 'TreeModel', 'TreeNode', 'TreePath', 'TreeSelectionModel', 'VariableHeightLayoutCache'
+ ),
+ 121 => array (
+ 'AbstractUndoableEdit', 'CannotRedoException', 'CannotUndoException', 'CompoundEdit', 'StateEdit', 'StateEditable', 'UndoManager', 'UndoableEdit', 'UndoableEditSupport'
+ ),
+ 122 => array (
+ 'InvalidTransactionException', 'TransactionRequiredException', 'TransactionRolledbackException'
+ ),
+ 123 => array (
+ 'XAException', 'XAResource', 'Xid'
+ ),
+ 124 => array (
+ 'XMLConstants'
+ ),
+ 125 => array (
+ 'DatatypeConfigurationException', 'DatatypeConstants', 'DatatypeConstants.Field', 'DatatypeFactory', 'Duration', 'XMLGregorianCalendar'
+ ),
+ 126 => array (
+ 'NamespaceContext', 'QName'
+ ),
+ 127 => array (
+ 'DocumentBuilder', 'DocumentBuilderFactory', 'FactoryConfigurationError', 'ParserConfigurationException', 'SAXParser', 'SAXParserFactory'
+ ),
+ 128 => array (
+ 'ErrorListener', 'OutputKeys', 'Result', 'Source', 'SourceLocator', 'Templates', 'Transformer', 'TransformerConfigurationException', 'TransformerException', 'TransformerFactory', 'TransformerFactoryConfigurationError', 'URIResolver'
+ ),
+ 129 => array (
+ 'DOMResult', 'DOMSource'
+ ),
+ 130 => array (
+ 'SAXResult', 'SAXSource', 'SAXTransformerFactory', 'TemplatesHandler', 'TransformerHandler'
+ ),
+ 131 => array (
+ 'StreamResult', 'StreamSource'
+ ),
+ 132 => array (
+ 'Schema', 'SchemaFactory', 'SchemaFactoryLoader', 'TypeInfoProvider', 'Validator', 'ValidatorHandler'
+ ),
+ 133 => array (
+ 'XPath', 'XPathConstants', 'XPathException', 'XPathExpression', 'XPathExpressionException', 'XPathFactory', 'XPathFactoryConfigurationException', 'XPathFunction', 'XPathFunctionException', 'XPathFunctionResolver', 'XPathVariableResolver'
+ ),
+ 134 => array (
+ 'ChannelBinding', 'GSSContext', 'GSSCredential', 'GSSException', 'GSSManager', 'GSSName', 'MessageProp', 'Oid'
+ ),
+ 135 => array (
+ 'ACTIVITY_COMPLETED', 'ACTIVITY_REQUIRED', 'ARG_IN', 'ARG_INOUT', 'ARG_OUT', 'Any', 'AnyHolder', 'AnySeqHolder', 'BAD_CONTEXT', 'BAD_INV_ORDER', 'BAD_OPERATION', 'BAD_PARAM', 'BAD_POLICY', 'BAD_POLICY_TYPE', 'BAD_POLICY_VALUE', 'BAD_QOS', 'BAD_TYPECODE', 'BooleanHolder', 'BooleanSeqHelper', 'BooleanSeqHolder', 'ByteHolder', 'CODESET_INCOMPATIBLE', 'COMM_FAILURE', 'CTX_RESTRICT_SCOPE', 'CharHolder', 'CharSeqHelper', 'CharSeqHolder', 'CompletionStatus', 'CompletionStatusHelper', 'ContextList', 'CurrentHolder', 'CustomMarshal', 'DATA_CONVERSION', 'DefinitionKind', 'DefinitionKindHelper', 'DomainManager', 'DomainManagerOperations', 'DoubleHolder', 'DoubleSeqHelper', 'DoubleSeqHolder', 'Environment', 'ExceptionList', 'FREE_MEM', 'FixedHolder', 'FloatHolder', 'FloatSeqHelper', 'FloatSeqHolder', 'IDLType', 'IDLTypeHelper', 'IDLTypeOperations', 'IMP_LIMIT', 'INITIALIZE', 'INTERNAL', 'INTF_REPOS', 'INVALID_ACTIVITY', 'INVALID_TRANSACTION', 'INV_FLAG', 'INV_IDENT', 'INV_OBJREF', 'INV_POLICY', 'IRObject',
+ 'IRObjectOperations', 'IdentifierHelper', 'IntHolder', 'LocalObject', 'LongHolder', 'LongLongSeqHelper', 'LongLongSeqHolder', 'LongSeqHelper', 'LongSeqHolder', 'MARSHAL', 'NO_IMPLEMENT', 'NO_MEMORY', 'NO_PERMISSION', 'NO_RESOURCES', 'NO_RESPONSE', 'NVList', 'NamedValue', 'OBJECT_NOT_EXIST', 'OBJ_ADAPTER', 'OMGVMCID', 'ObjectHelper', 'ObjectHolder', 'OctetSeqHelper', 'OctetSeqHolder', 'PERSIST_STORE', 'PRIVATE_MEMBER', 'PUBLIC_MEMBER', 'ParameterMode', 'ParameterModeHelper', 'ParameterModeHolder', 'PolicyError', 'PolicyErrorCodeHelper', 'PolicyErrorHelper', 'PolicyErrorHolder', 'PolicyHelper', 'PolicyHolder', 'PolicyListHelper', 'PolicyListHolder', 'PolicyOperations', 'PolicyTypeHelper', 'PrincipalHolder', 'REBIND', 'RepositoryIdHelper', 'Request', 'ServerRequest', 'ServiceDetail', 'ServiceDetailHelper', 'ServiceInformation', 'ServiceInformationHelper', 'ServiceInformationHolder', 'SetOverrideType', 'SetOverrideTypeHelper', 'ShortHolder', 'ShortSeqHelper', 'ShortSeqHolder', 'StringHolder',
+ 'StringSeqHelper', 'StringSeqHolder', 'StringValueHelper', 'StructMember', 'StructMemberHelper', 'SystemException', 'TCKind', 'TIMEOUT', 'TRANSACTION_MODE', 'TRANSACTION_REQUIRED', 'TRANSACTION_ROLLEDBACK', 'TRANSACTION_UNAVAILABLE', 'TRANSIENT', 'TypeCode', 'TypeCodeHolder', 'ULongLongSeqHelper', 'ULongLongSeqHolder', 'ULongSeqHelper', 'ULongSeqHolder', 'UNSUPPORTED_POLICY', 'UNSUPPORTED_POLICY_VALUE', 'UShortSeqHelper', 'UShortSeqHolder', 'UnionMember', 'UnionMemberHelper', 'UnknownUserException', 'UnknownUserExceptionHelper', 'UnknownUserExceptionHolder', 'UserException', 'VM_ABSTRACT', 'VM_CUSTOM', 'VM_NONE', 'VM_TRUNCATABLE', 'ValueBaseHelper', 'ValueBaseHolder', 'ValueMember', 'ValueMemberHelper', 'VersionSpecHelper', 'VisibilityHelper', 'WCharSeqHelper', 'WCharSeqHolder', 'WStringSeqHelper', 'WStringSeqHolder', 'WStringValueHelper', 'WrongTransaction', 'WrongTransactionHelper', 'WrongTransactionHolder', '_IDLTypeStub', '_PolicyStub'
+ ),
+ 136 => array (
+ 'Invalid', 'InvalidSeq'
+ ),
+ 137 => array (
+ 'BadKind'
+ ),
+ 138 => array (
+ 'ApplicationException', 'BoxedValueHelper', 'CustomValue', 'IDLEntity', 'IndirectionException', 'InvokeHandler', 'RemarshalException', 'ResponseHandler', 'ServantObject', 'Streamable', 'StreamableValue', 'UnknownException', 'ValueBase', 'ValueFactory', 'ValueInputStream', 'ValueOutputStream'
+ ),
+ 139 => array (
+ 'BindingHelper', 'BindingHolder', 'BindingIterator', 'BindingIteratorHelper', 'BindingIteratorHolder', 'BindingIteratorOperations', 'BindingIteratorPOA', 'BindingListHelper', 'BindingListHolder', 'BindingType', 'BindingTypeHelper', 'BindingTypeHolder', 'IstringHelper', 'NameComponent', 'NameComponentHelper', 'NameComponentHolder', 'NameHelper', 'NameHolder', 'NamingContext', 'NamingContextExt', 'NamingContextExtHelper', 'NamingContextExtHolder', 'NamingContextExtOperations', 'NamingContextExtPOA', 'NamingContextHelper', 'NamingContextHolder', 'NamingContextOperations', 'NamingContextPOA', '_BindingIteratorImplBase', '_BindingIteratorStub', '_NamingContextExtStub', '_NamingContextImplBase', '_NamingContextStub'
+ ),
+ 140 => array (
+ 'AddressHelper', 'InvalidAddress', 'InvalidAddressHelper', 'InvalidAddressHolder', 'StringNameHelper', 'URLStringHelper'
+ ),
+ 141 => array (
+ 'AlreadyBound', 'AlreadyBoundHelper', 'AlreadyBoundHolder', 'CannotProceed', 'CannotProceedHelper', 'CannotProceedHolder', 'InvalidNameHolder', 'NotEmpty', 'NotEmptyHelper', 'NotEmptyHolder', 'NotFound', 'NotFoundHelper', 'NotFoundHolder', 'NotFoundReason', 'NotFoundReasonHelper', 'NotFoundReasonHolder'
+ ),
+ 142 => array (
+ 'Parameter'
+ ),
+ 143 => array (
+ 'DynAnyFactory', 'DynAnyFactoryHelper', 'DynAnyFactoryOperations', 'DynAnyHelper', 'DynAnyOperations', 'DynAnySeqHelper', 'DynArrayHelper', 'DynArrayOperations', 'DynEnumHelper', 'DynEnumOperations', 'DynFixedHelper', 'DynFixedOperations', 'DynSequenceHelper', 'DynSequenceOperations', 'DynStructHelper', 'DynStructOperations', 'DynUnionHelper', 'DynUnionOperations', 'DynValueBox', 'DynValueBoxOperations', 'DynValueCommon', 'DynValueCommonOperations', 'DynValueHelper', 'DynValueOperations', 'NameDynAnyPair', 'NameDynAnyPairHelper', 'NameDynAnyPairSeqHelper', 'NameValuePairSeqHelper', '_DynAnyFactoryStub', '_DynAnyStub', '_DynArrayStub', '_DynEnumStub', '_DynFixedStub', '_DynSequenceStub', '_DynStructStub', '_DynUnionStub', '_DynValueStub'
+ ),
+ 144 => array (
+ 'InconsistentTypeCodeHelper'
+ ),
+ 145 => array (
+ 'InvalidValueHelper'
+ ),
+ 146 => array (
+ 'CodeSets', 'Codec', 'CodecFactory', 'CodecFactoryHelper', 'CodecFactoryOperations', 'CodecOperations', 'ComponentIdHelper', 'ENCODING_CDR_ENCAPS', 'Encoding', 'ExceptionDetailMessage', 'IOR', 'IORHelper', 'IORHolder', 'MultipleComponentProfileHelper', 'MultipleComponentProfileHolder', 'ProfileIdHelper', 'RMICustomMaxStreamFormat', 'ServiceContext', 'ServiceContextHelper', 'ServiceContextHolder', 'ServiceContextListHelper', 'ServiceContextListHolder', 'ServiceIdHelper', 'TAG_ALTERNATE_IIOP_ADDRESS', 'TAG_CODE_SETS', 'TAG_INTERNET_IOP', 'TAG_JAVA_CODEBASE', 'TAG_MULTIPLE_COMPONENTS', 'TAG_ORB_TYPE', 'TAG_POLICIES', 'TAG_RMI_CUSTOM_MAX_STREAM_FORMAT', 'TaggedComponent', 'TaggedComponentHelper', 'TaggedComponentHolder', 'TaggedProfile', 'TaggedProfileHelper', 'TaggedProfileHolder', 'TransactionService'
+ ),
+ 147 => array (
+ 'UnknownEncoding', 'UnknownEncodingHelper'
+ ),
+ 148 => array (
+ 'FormatMismatch', 'FormatMismatchHelper', 'InvalidTypeForEncoding', 'InvalidTypeForEncodingHelper'
+ ),
+ 149 => array (
+ 'SYNC_WITH_TRANSPORT', 'SyncScopeHelper'
+ ),
+ 150 => array (
+ 'ACTIVE', 'AdapterManagerIdHelper', 'AdapterNameHelper', 'AdapterStateHelper', 'ClientRequestInfo', 'ClientRequestInfoOperations', 'ClientRequestInterceptor', 'ClientRequestInterceptorOperations', 'DISCARDING', 'HOLDING', 'INACTIVE', 'IORInfo', 'IORInfoOperations', 'IORInterceptor', 'IORInterceptorOperations', 'IORInterceptor_3_0', 'IORInterceptor_3_0Helper', 'IORInterceptor_3_0Holder', 'IORInterceptor_3_0Operations', 'Interceptor', 'InterceptorOperations', 'InvalidSlot', 'InvalidSlotHelper', 'LOCATION_FORWARD', 'NON_EXISTENT', 'ORBIdHelper', 'ORBInitInfo', 'ORBInitInfoOperations', 'ORBInitializer', 'ORBInitializerOperations', 'ObjectReferenceFactory', 'ObjectReferenceFactoryHelper', 'ObjectReferenceFactoryHolder', 'ObjectReferenceTemplate', 'ObjectReferenceTemplateHelper', 'ObjectReferenceTemplateHolder', 'ObjectReferenceTemplateSeqHelper', 'ObjectReferenceTemplateSeqHolder', 'PolicyFactory', 'PolicyFactoryOperations', 'RequestInfo', 'RequestInfoOperations', 'SUCCESSFUL', 'SYSTEM_EXCEPTION',
+ 'ServerIdHelper', 'ServerRequestInfo', 'ServerRequestInfoOperations', 'ServerRequestInterceptor', 'ServerRequestInterceptorOperations', 'TRANSPORT_RETRY', 'USER_EXCEPTION'
+ ),
+ 151 => array (
+ 'DuplicateName', 'DuplicateNameHelper'
+ ),
+ 152 => array (
+ 'AdapterActivator', 'AdapterActivatorOperations', 'ID_ASSIGNMENT_POLICY_ID', 'ID_UNIQUENESS_POLICY_ID', 'IMPLICIT_ACTIVATION_POLICY_ID', 'IdAssignmentPolicy', 'IdAssignmentPolicyOperations', 'IdAssignmentPolicyValue', 'IdUniquenessPolicy', 'IdUniquenessPolicyOperations', 'IdUniquenessPolicyValue', 'ImplicitActivationPolicy', 'ImplicitActivationPolicyOperations', 'ImplicitActivationPolicyValue', 'LIFESPAN_POLICY_ID', 'LifespanPolicy', 'LifespanPolicyOperations', 'LifespanPolicyValue', 'POA', 'POAHelper', 'POAManager', 'POAManagerOperations', 'POAOperations', 'REQUEST_PROCESSING_POLICY_ID', 'RequestProcessingPolicy', 'RequestProcessingPolicyOperations', 'RequestProcessingPolicyValue', 'SERVANT_RETENTION_POLICY_ID', 'Servant', 'ServantActivator', 'ServantActivatorHelper', 'ServantActivatorOperations', 'ServantActivatorPOA', 'ServantLocator', 'ServantLocatorHelper', 'ServantLocatorOperations', 'ServantLocatorPOA', 'ServantManager', 'ServantManagerOperations', 'ServantRetentionPolicy',
+ 'ServantRetentionPolicyOperations', 'ServantRetentionPolicyValue', 'THREAD_POLICY_ID', 'ThreadPolicy', 'ThreadPolicyOperations', 'ThreadPolicyValue', '_ServantActivatorStub', '_ServantLocatorStub'
+ ),
+ 153 => array (
+ 'NoContext', 'NoContextHelper'
+ ),
+ 154 => array (
+ 'AdapterInactive', 'AdapterInactiveHelper', 'State'
+ ),
+ 155 => array (
+ 'AdapterAlreadyExists', 'AdapterAlreadyExistsHelper', 'AdapterNonExistent', 'AdapterNonExistentHelper', 'InvalidPolicy', 'InvalidPolicyHelper', 'NoServant', 'NoServantHelper', 'ObjectAlreadyActive', 'ObjectAlreadyActiveHelper', 'ObjectNotActive', 'ObjectNotActiveHelper', 'ServantAlreadyActive', 'ServantAlreadyActiveHelper', 'ServantNotActive', 'ServantNotActiveHelper', 'WrongAdapter', 'WrongAdapterHelper', 'WrongPolicy', 'WrongPolicyHelper'
+ ),
+ 156 => array (
+ 'CookieHolder'
+ ),
+ 157 => array (
+ 'RunTime', 'RunTimeOperations'
+ ),
+ 158 => array (
+ '_Remote_Stub'
+ ),
+ 159 => array (
+ 'Attr', 'CDATASection', 'CharacterData', 'Comment', 'DOMConfiguration', 'DOMError', 'DOMErrorHandler', 'DOMException', 'DOMImplementation', 'DOMImplementationList', 'DOMImplementationSource', 'DOMStringList', 'DocumentFragment', 'DocumentType', 'EntityReference', 'NameList', 'NamedNodeMap', 'Node', 'NodeList', 'Notation', 'ProcessingInstruction', 'Text', 'TypeInfo', 'UserDataHandler'
+ ),
+ 160 => array (
+ 'DOMImplementationRegistry'
+ ),
+ 161 => array (
+ 'EventException', 'EventTarget', 'MutationEvent', 'UIEvent'
+ ),
+ 162 => array (
+ 'DOMImplementationLS', 'LSException', 'LSInput', 'LSLoadEvent', 'LSOutput', 'LSParser', 'LSParserFilter', 'LSProgressEvent', 'LSResourceResolver', 'LSSerializer', 'LSSerializerFilter'
+ ),
+ 163 => array (
+ 'DTDHandler', 'DocumentHandler', 'EntityResolver', 'ErrorHandler', 'HandlerBase', 'InputSource', 'Locator', 'SAXException', 'SAXNotRecognizedException', 'SAXNotSupportedException', 'SAXParseException', 'XMLFilter', 'XMLReader'
+ ),
+ 164 => array (
+ 'Attributes2', 'Attributes2Impl', 'DeclHandler', 'DefaultHandler2', 'EntityResolver2', 'LexicalHandler', 'Locator2', 'Locator2Impl'
+ ),
+ 165 => array (
+ 'AttributeListImpl', 'AttributesImpl', 'DefaultHandler', 'LocatorImpl', 'NamespaceSupport', 'ParserAdapter', 'ParserFactory', 'XMLFilterImpl', 'XMLReaderAdapter', 'XMLReaderFactory'
+ ),
+ /* ambiguous class names (appear in more than one package) */
+ 166 => array (
+ 'Annotation', 'AnySeqHelper', 'Array', 'Attribute', 'AttributeList', 'AttributeSet', 'Attributes', 'AuthenticationException', 'Binding', 'Bounds', 'Certificate', 'CertificateEncodingException', 'CertificateException', 'CertificateExpiredException', 'CertificateNotYetValidException', 'CertificateParsingException', 'ConnectException', 'ContentHandler', 'Context', 'Control', 'Current', 'CurrentHelper', 'CurrentOperations', 'DOMLocator', 'DataInputStream', 'DataOutputStream', 'Date', 'DefaultLoaderRepository', 'Delegate', 'Document', 'DocumentEvent', 'DynAny', 'DynArray', 'DynEnum', 'DynFixed', 'DynSequence', 'DynStruct', 'DynUnion', 'DynValue', 'DynamicImplementation', 'Element', 'Entity', 'Event', 'EventListener', 'FieldNameHelper', 'FileFilter', 'Formatter', 'ForwardRequest', 'ForwardRequestHelper', 'InconsistentTypeCode', 'InputStream', 'IntrospectionException', 'InvalidAttributeValueException', 'InvalidKeyException', 'InvalidName', 'InvalidNameHelper', 'InvalidValue', 'List', 'MouseEvent',
+ 'NameValuePair', 'NameValuePairHelper', 'ORB', 'Object', 'ObjectIdHelper', 'ObjectImpl', 'OpenType', 'OutputStream', 'ParagraphView', 'Parser', 'Permission', 'Policy', 'Principal', 'Proxy', 'Reference', 'Statement', 'Timer', 'Timestamp', 'TypeMismatch', 'TypeMismatchHelper', 'UNKNOWN', 'UnknownHostException', 'X509Certificate'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ /* all Java keywords are case sensitive */
+ 1 => true, 2 => true, 3 => true, 4 => true,
+ 5 => true, 6 => true, 7 => true, 8 => true, 9 => true,
+ 10 => true, 11 => true, 12 => true, 13 => true, 14 => true,
+ 15 => true, 16 => true, 17 => true, 18 => true, 19 => true,
+ 20 => true, 21 => true, 22 => true, 23 => true, 24 => true,
+ 25 => true, 26 => true, 27 => true, 28 => true, 29 => true,
+ 30 => true, 31 => true, 32 => true, 33 => true, 34 => true,
+ 35 => true, 36 => true, 37 => true, 38 => true, 39 => true,
+ 40 => true, 41 => true, 42 => true, 43 => true, 44 => true,
+ 45 => true, 46 => true, 47 => true, 48 => true, 49 => true,
+ 50 => true, 51 => true, 52 => true, 53 => true, 54 => true,
+ 55 => true, 56 => true, 57 => true, 58 => true, 59 => true,
+ 60 => true, 61 => true, 62 => true, 63 => true, 64 => true,
+ 65 => true, 66 => true, 67 => true, 68 => true, 69 => true,
+ 70 => true, 71 => true, 72 => true, 73 => true, 74 => true,
+ 75 => true, 76 => true, 77 => true, 78 => true, 79 => true,
+ 80 => true, 81 => true, 82 => true, 83 => true, 84 => true,
+ 85 => true, 86 => true, 87 => true, 88 => true, 89 => true,
+ 90 => true, 91 => true, 92 => true, 93 => true, 94 => true,
+ 95 => true, 96 => true, 97 => true, 98 => true, 99 => true,
+ 100 => true, 101 => true, 102 => true, 103 => true, 104 => true,
+ 105 => true, 106 => true, 107 => true, 108 => true, 109 => true,
+ 110 => true, 111 => true, 112 => true, 113 => true, 114 => true,
+ 115 => true, 116 => true, 117 => true, 118 => true, 119 => true,
+ 120 => true, 121 => true, 122 => true, 123 => true, 124 => true,
+ 125 => true, 126 => true, 127 => true, 128 => true, 129 => true,
+ 130 => true, 131 => true, 132 => true, 133 => true, 134 => true,
+ 135 => true, 136 => true, 137 => true, 138 => true, 139 => true,
+ 140 => true, 141 => true, 142 => true, 143 => true, 144 => true,
+ 145 => true, 146 => true, 147 => true, 148 => true, 149 => true,
+ 150 => true, 151 => true, 152 => true, 153 => true, 154 => true,
+ 155 => true, 156 => true, 157 => true, 158 => true, 159 => true,
+ 160 => true, 161 => true, 162 => true, 163 => true, 164 => true,
+ 165 => true, 166 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #006600; font-weight: bold;',
+ 4 => 'color: #006600; font-weight: bold;',
+ 5 => 'color: #003399; font-weight: bold;',
+ 6 => 'color: #003399; font-weight: bold;',
+ 7 => 'color: #003399; font-weight: bold;',
+ 8 => 'color: #003399; font-weight: bold;',
+ 9 => 'color: #003399; font-weight: bold;',
+ 10 => 'color: #003399; font-weight: bold;',
+ 11 => 'color: #003399; font-weight: bold;',
+ 12 => 'color: #003399; font-weight: bold;',
+ 13 => 'color: #003399; font-weight: bold;',
+ 14 => 'color: #003399; font-weight: bold;',
+ 15 => 'color: #003399; font-weight: bold;',
+ 16 => 'color: #003399; font-weight: bold;',
+ 17 => 'color: #003399; font-weight: bold;',
+ 18 => 'color: #003399; font-weight: bold;',
+ 19 => 'color: #003399; font-weight: bold;',
+ 20 => 'color: #003399; font-weight: bold;',
+ 21 => 'color: #003399; font-weight: bold;',
+ 22 => 'color: #003399; font-weight: bold;',
+ 23 => 'color: #003399; font-weight: bold;',
+ 24 => 'color: #003399; font-weight: bold;',
+ 25 => 'color: #003399; font-weight: bold;',
+ 26 => 'color: #003399; font-weight: bold;',
+ 27 => 'color: #003399; font-weight: bold;',
+ 28 => 'color: #003399; font-weight: bold;',
+ 29 => 'color: #003399; font-weight: bold;',
+ 30 => 'color: #003399; font-weight: bold;',
+ 31 => 'color: #003399; font-weight: bold;',
+ 32 => 'color: #003399; font-weight: bold;',
+ 33 => 'color: #003399; font-weight: bold;',
+ 34 => 'color: #003399; font-weight: bold;',
+ 35 => 'color: #003399; font-weight: bold;',
+ 36 => 'color: #003399; font-weight: bold;',
+ 37 => 'color: #003399; font-weight: bold;',
+ 38 => 'color: #003399; font-weight: bold;',
+ 39 => 'color: #003399; font-weight: bold;',
+ 40 => 'color: #003399; font-weight: bold;',
+ 41 => 'color: #003399; font-weight: bold;',
+ 42 => 'color: #003399; font-weight: bold;',
+ 43 => 'color: #003399; font-weight: bold;',
+ 44 => 'color: #003399; font-weight: bold;',
+ 45 => 'color: #003399; font-weight: bold;',
+ 46 => 'color: #003399; font-weight: bold;',
+ 47 => 'color: #003399; font-weight: bold;',
+ 48 => 'color: #003399; font-weight: bold;',
+ 49 => 'color: #003399; font-weight: bold;',
+ 50 => 'color: #003399; font-weight: bold;',
+ 51 => 'color: #003399; font-weight: bold;',
+ 52 => 'color: #003399; font-weight: bold;',
+ 53 => 'color: #003399; font-weight: bold;',
+ 54 => 'color: #003399; font-weight: bold;',
+ 55 => 'color: #003399; font-weight: bold;',
+ 56 => 'color: #003399; font-weight: bold;',
+ 57 => 'color: #003399; font-weight: bold;',
+ 58 => 'color: #003399; font-weight: bold;',
+ 59 => 'color: #003399; font-weight: bold;',
+ 60 => 'color: #003399; font-weight: bold;',
+ 61 => 'color: #003399; font-weight: bold;',
+ 62 => 'color: #003399; font-weight: bold;',
+ 63 => 'color: #003399; font-weight: bold;',
+ 64 => 'color: #003399; font-weight: bold;',
+ 65 => 'color: #003399; font-weight: bold;',
+ 66 => 'color: #003399; font-weight: bold;',
+ 67 => 'color: #003399; font-weight: bold;',
+ 68 => 'color: #003399; font-weight: bold;',
+ 69 => 'color: #003399; font-weight: bold;',
+ 70 => 'color: #003399; font-weight: bold;',
+ 71 => 'color: #003399; font-weight: bold;',
+ 72 => 'color: #003399; font-weight: bold;',
+ 73 => 'color: #003399; font-weight: bold;',
+ 74 => 'color: #003399; font-weight: bold;',
+ 75 => 'color: #003399; font-weight: bold;',
+ 76 => 'color: #003399; font-weight: bold;',
+ 77 => 'color: #003399; font-weight: bold;',
+ 78 => 'color: #003399; font-weight: bold;',
+ 79 => 'color: #003399; font-weight: bold;',
+ 80 => 'color: #003399; font-weight: bold;',
+ 81 => 'color: #003399; font-weight: bold;',
+ 82 => 'color: #003399; font-weight: bold;',
+ 83 => 'color: #003399; font-weight: bold;',
+ 84 => 'color: #003399; font-weight: bold;',
+ 85 => 'color: #003399; font-weight: bold;',
+ 86 => 'color: #003399; font-weight: bold;',
+ 87 => 'color: #003399; font-weight: bold;',
+ 88 => 'color: #003399; font-weight: bold;',
+ 89 => 'color: #003399; font-weight: bold;',
+ 90 => 'color: #003399; font-weight: bold;',
+ 91 => 'color: #003399; font-weight: bold;',
+ 92 => 'color: #003399; font-weight: bold;',
+ 93 => 'color: #003399; font-weight: bold;',
+ 94 => 'color: #003399; font-weight: bold;',
+ 95 => 'color: #003399; font-weight: bold;',
+ 96 => 'color: #003399; font-weight: bold;',
+ 97 => 'color: #003399; font-weight: bold;',
+ 98 => 'color: #003399; font-weight: bold;',
+ 99 => 'color: #003399; font-weight: bold;',
+ 100 => 'color: #003399; font-weight: bold;',
+ 101 => 'color: #003399; font-weight: bold;',
+ 102 => 'color: #003399; font-weight: bold;',
+ 103 => 'color: #003399; font-weight: bold;',
+ 104 => 'color: #003399; font-weight: bold;',
+ 105 => 'color: #003399; font-weight: bold;',
+ 106 => 'color: #003399; font-weight: bold;',
+ 107 => 'color: #003399; font-weight: bold;',
+ 108 => 'color: #003399; font-weight: bold;',
+ 109 => 'color: #003399; font-weight: bold;',
+ 110 => 'color: #003399; font-weight: bold;',
+ 111 => 'color: #003399; font-weight: bold;',
+ 112 => 'color: #003399; font-weight: bold;',
+ 113 => 'color: #003399; font-weight: bold;',
+ 114 => 'color: #003399; font-weight: bold;',
+ 115 => 'color: #003399; font-weight: bold;',
+ 116 => 'color: #003399; font-weight: bold;',
+ 117 => 'color: #003399; font-weight: bold;',
+ 118 => 'color: #003399; font-weight: bold;',
+ 119 => 'color: #003399; font-weight: bold;',
+ 120 => 'color: #003399; font-weight: bold;',
+ 121 => 'color: #003399; font-weight: bold;',
+ 122 => 'color: #003399; font-weight: bold;',
+ 123 => 'color: #003399; font-weight: bold;',
+ 124 => 'color: #003399; font-weight: bold;',
+ 125 => 'color: #003399; font-weight: bold;',
+ 126 => 'color: #003399; font-weight: bold;',
+ 127 => 'color: #003399; font-weight: bold;',
+ 128 => 'color: #003399; font-weight: bold;',
+ 129 => 'color: #003399; font-weight: bold;',
+ 130 => 'color: #003399; font-weight: bold;',
+ 131 => 'color: #003399; font-weight: bold;',
+ 132 => 'color: #003399; font-weight: bold;',
+ 133 => 'color: #003399; font-weight: bold;',
+ 134 => 'color: #003399; font-weight: bold;',
+ 135 => 'color: #003399; font-weight: bold;',
+ 136 => 'color: #003399; font-weight: bold;',
+ 137 => 'color: #003399; font-weight: bold;',
+ 138 => 'color: #003399; font-weight: bold;',
+ 139 => 'color: #003399; font-weight: bold;',
+ 140 => 'color: #003399; font-weight: bold;',
+ 141 => 'color: #003399; font-weight: bold;',
+ 142 => 'color: #003399; font-weight: bold;',
+ 143 => 'color: #003399; font-weight: bold;',
+ 144 => 'color: #003399; font-weight: bold;',
+ 145 => 'color: #003399; font-weight: bold;',
+ 146 => 'color: #003399; font-weight: bold;',
+ 147 => 'color: #003399; font-weight: bold;',
+ 148 => 'color: #003399; font-weight: bold;',
+ 149 => 'color: #003399; font-weight: bold;',
+ 150 => 'color: #003399; font-weight: bold;',
+ 151 => 'color: #003399; font-weight: bold;',
+ 152 => 'color: #003399; font-weight: bold;',
+ 153 => 'color: #003399; font-weight: bold;',
+ 154 => 'color: #003399; font-weight: bold;',
+ 155 => 'color: #003399; font-weight: bold;',
+ 156 => 'color: #003399; font-weight: bold;',
+ 157 => 'color: #003399; font-weight: bold;',
+ 158 => 'color: #003399; font-weight: bold;',
+ 159 => 'color: #003399; font-weight: bold;',
+ 160 => 'color: #003399; font-weight: bold;',
+ 161 => 'color: #003399; font-weight: bold;',
+ 162 => 'color: #003399; font-weight: bold;',
+ 163 => 'color: #003399; font-weight: bold;',
+ 164 => 'color: #003399; font-weight: bold;',
+ 165 => 'color: #003399; font-weight: bold;',
+ 166 => 'color: #003399; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #006699;',
+ 3 => 'color: #008000; font-style: italic; font-weight: bold;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006633;',
+ 2 => 'color: #006633;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/applet/{FNAME}.html',
+ 6 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/{FNAME}.html',
+ 7 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/color/{FNAME}.html',
+ 8 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/datatransfer/{FNAME}.html',
+ 9 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/dnd/{FNAME}.html',
+ 10 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/{FNAME}.html',
+ 11 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/font/{FNAME}.html',
+ 12 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/geom/{FNAME}.html',
+ 13 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/im/{FNAME}.html',
+ 14 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/im/spi/{FNAME}.html',
+ 15 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/{FNAME}.html',
+ 16 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/renderable/{FNAME}.html',
+ 17 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/awt/print/{FNAME}.html',
+ 18 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/beans/{FNAME}.html',
+ 19 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/beans/beancontext/{FNAME}.html',
+ 20 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/io/{FNAME}.html',
+ 21 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/{FNAME}.html',
+ 22 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/annotation/{FNAME}.html',
+ 23 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/instrument/{FNAME}.html',
+ 24 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/{FNAME}.html',
+ 25 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ref/{FNAME}.html',
+ 26 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/{FNAME}.html',
+ 27 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/math/{FNAME}.html',
+ 28 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/net/{FNAME}.html',
+ 29 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/{FNAME}.html',
+ 30 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/channels/{FNAME}.html',
+ 31 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/channels/spi/{FNAME}.html',
+ 32 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/{FNAME}.html',
+ 33 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/nio/charset/spi/{FNAME}.html',
+ 34 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/{FNAME}.html',
+ 35 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/activation/{FNAME}.html',
+ 36 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/dgc/{FNAME}.html',
+ 37 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/registry/{FNAME}.html',
+ 38 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/server/{FNAME}.html',
+ 39 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/{FNAME}.html',
+ 40 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/acl/{FNAME}.html',
+ 41 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/cert/{FNAME}.html',
+ 42 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/interfaces/{FNAME}.html',
+ 43 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/security/spec/{FNAME}.html',
+ 44 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/sql/{FNAME}.html',
+ 45 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/text/{FNAME}.html',
+ 46 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/{FNAME}.html',
+ 47 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/{FNAME}.html',
+ 48 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/atomic/{FNAME}.html',
+ 49 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/{FNAME}.html',
+ 50 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/jar/{FNAME}.html',
+ 51 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/{FNAME}.html',
+ 52 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/prefs/{FNAME}.html',
+ 53 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/{FNAME}.html',
+ 54 => 'http://java.sun.com/j2se/1.5.0/docs/api/java/util/zip/{FNAME}.html',
+ 55 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/accessibility/{FNAME}.html',
+ 56 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/activity/{FNAME}.html',
+ 57 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/{FNAME}.html',
+ 58 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/interfaces/{FNAME}.html',
+ 59 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/crypto/spec/{FNAME}.html',
+ 60 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/{FNAME}.html',
+ 61 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/event/{FNAME}.html',
+ 62 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/metadata/{FNAME}.html',
+ 63 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/plugins/bmp/{FNAME}.html',
+ 64 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/plugins/jpeg/{FNAME}.html',
+ 65 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/spi/{FNAME}.html',
+ 66 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/imageio/stream/{FNAME}.html',
+ 67 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/{FNAME}.html',
+ 68 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/loading/{FNAME}.html',
+ 69 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/modelmbean/{FNAME}.html',
+ 70 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/monitor/{FNAME}.html',
+ 71 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/openmbean/{FNAME}.html',
+ 72 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/relation/{FNAME}.html',
+ 73 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/remote/{FNAME}.html',
+ 74 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/remote/rmi/{FNAME}.html',
+ 75 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/management/timer/{FNAME}.html',
+ 76 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/{FNAME}.html',
+ 77 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/directory/{FNAME}.html',
+ 78 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/event/{FNAME}.html',
+ 79 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/ldap/{FNAME}.html',
+ 80 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/naming/spi/{FNAME}.html',
+ 81 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/net/{FNAME}.html',
+ 82 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/net/ssl/{FNAME}.html',
+ 83 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/{FNAME}.html',
+ 84 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/attribute/{FNAME}.html',
+ 85 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/attribute/standard/{FNAME}.html',
+ 86 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/print/event/{FNAME}.html',
+ 87 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/{FNAME}.html',
+ 88 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/CORBA/{FNAME}.html',
+ 89 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/rmi/ssl/{FNAME}.html',
+ 90 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/{FNAME}.html',
+ 91 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/callback/{FNAME}.html',
+ 92 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/kerberos/{FNAME}.html',
+ 93 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/login/{FNAME}.html',
+ 94 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/spi/{FNAME}.html',
+ 95 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/auth/x500/{FNAME}.html',
+ 96 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/security/sasl/{FNAME}.html',
+ 97 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/{FNAME}.html',
+ 98 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/spi/{FNAME}.html',
+ 99 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/{FNAME}.html',
+ 100 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/sampled/spi/{FNAME}.html',
+ 101 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/{FNAME}.html',
+ 102 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/{FNAME}.html',
+ 103 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/serial/{FNAME}.html',
+ 104 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/sql/rowset/spi/{FNAME}.html',
+ 105 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/{FNAME}.html',
+ 106 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/border/{FNAME}.html',
+ 107 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/colorchooser/{FNAME}.html',
+ 108 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/event/{FNAME}.html',
+ 109 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/filechooser/{FNAME}.html',
+ 110 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/{FNAME}.html',
+ 111 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/basic/{FNAME}.html',
+ 112 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/metal/{FNAME}.html',
+ 113 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/multi/{FNAME}.html',
+ 114 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/plaf/synth/{FNAME}.html',
+ 115 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/table/{FNAME}.html',
+ 116 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/{FNAME}.html',
+ 117 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/html/{FNAME}.html',
+ 118 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/html/parser/{FNAME}.html',
+ 119 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/text/rtf/{FNAME}.html',
+ 120 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/tree/{FNAME}.html',
+ 121 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/undo/{FNAME}.html',
+ 122 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/transaction/{FNAME}.html',
+ 123 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/transaction/xa/{FNAME}.html',
+ 124 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/{FNAME}.html',
+ 125 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/datatype/{FNAME}.html',
+ 126 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/namespace/{FNAME}.html',
+ 127 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/parsers/{FNAME}.html',
+ 128 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/{FNAME}.html',
+ 129 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/dom/{FNAME}.html',
+ 130 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/sax/{FNAME}.html',
+ 131 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/transform/stream/{FNAME}.html',
+ 132 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/validation/{FNAME}.html',
+ 133 => 'http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/{FNAME}.html',
+ 134 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/ietf/jgss/{FNAME}.html',
+ 135 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/{FNAME}.html',
+ 136 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/DynAnyPackage/{FNAME}.html',
+ 137 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/TypeCodePackage/{FNAME}.html',
+ 138 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CORBA/portable/{FNAME}.html',
+ 139 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/{FNAME}.html',
+ 140 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/NamingContextExtPackage/{FNAME}.html',
+ 141 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/CosNaming/NamingContextPackage/{FNAME}.html',
+ 142 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/Dynamic/{FNAME}.html',
+ 143 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/{FNAME}.html',
+ 144 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/DynAnyFactoryPackage/{FNAME}.html',
+ 145 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/DynamicAny/DynAnyPackage/{FNAME}.html',
+ 146 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/{FNAME}.html',
+ 147 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/CodecFactoryPackage/{FNAME}.html',
+ 148 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/IOP/CodecPackage/{FNAME}.html',
+ 149 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/Messaging/{FNAME}.html',
+ 150 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableInterceptor/{FNAME}.html',
+ 151 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableInterceptor/ORBInitInfoPackage/{FNAME}.html',
+ 152 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/{FNAME}.html',
+ 153 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/CurrentPackage/{FNAME}.html',
+ 154 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/{FNAME}.html',
+ 155 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/POAPackage/{FNAME}.html',
+ 156 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/PortableServer/ServantLocatorPackage/{FNAME}.html',
+ 157 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/SendingContext/{FNAME}.html',
+ 158 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/omg/stub/java/rmi/{FNAME}.html',
+ 159 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/{FNAME}.html',
+ 160 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/bootstrap/{FNAME}.html',
+ 161 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/events/{FNAME}.html',
+ 162 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/w3c/dom/ls/{FNAME}.html',
+ 163 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/{FNAME}.html',
+ 164 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/ext/{FNAME}.html',
+ 165 => 'http://java.sun.com/j2se/1.5.0/docs/api/org/xml/sax/helpers/{FNAME}.html',
+ /* ambiguous class names (appear in more than one package) */
+ 166 => 'http://www.google.com/search?sitesearch=java.sun.com&amp;q=allinurl%3Aj2se%2F1+5+0%2Fdocs%2Fapi+{FNAME}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ /* Java does not use '::' */
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php
new file mode 100644
index 000000000..4ffef2b2e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php
@@ -0,0 +1,150 @@
+<?php
+/*************************************************************************************
+ * javascript.php
+ * --------------
+ * Author: Ben Keen (ben.keen@gmail.com)
+ * Copyright: (c) 2004 Ben Keen (ben.keen@gmail.com), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/20
+ *
+ * JavaScript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Javascript',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ //Regular Expressions
+ 'COMMENT_REGEXP' => array(2 => "/(?<=[\\s^])s\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[gimsu]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])m?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[gimsu]*(?=[\\s$\\.\\,\\;\\)])/iU"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'as', 'break', 'case', 'catch', 'continue', 'decodeURI', 'delete', 'do',
+ 'else', 'encodeURI', 'eval', 'finally', 'for', 'if', 'in', 'is', 'item',
+ 'instanceof', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'void',
+ 'while', 'write', 'with'
+ ),
+ 2 => array(
+ 'class', 'const', 'default', 'debugger', 'export', 'extends', 'false',
+ 'function', 'import', 'namespace', 'new', 'null', 'package', 'private',
+ 'protected', 'public', 'super', 'true', 'use', 'var'
+ ),
+ 3 => array(
+ // common functions for Window object
+ 'alert', 'back', 'blur', 'close', 'confirm', 'focus', 'forward', 'home',
+ 'name', 'navigate', 'onblur', 'onerror', 'onfocus', 'onload', 'onmove',
+ 'onresize', 'onunload', 'open', 'print', 'prompt', 'scroll', 'status',
+ 'stop',
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}',
+ '+', '-', '*', '/', '%',
+ '!', '@', '&', '|', '^',
+ '<', '>', '=',
+ ',', ';', '?', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000066; font-weight: bold;',
+ 2 => 'color: #003366; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #006600; font-style: italic;',
+ 2 => 'color: #009966; font-style: italic;',
+ 'MULTI' => 'color: #006600; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #3366CC;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #CC0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #660066;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<script type="text/javascript">' => '</script>'
+ ),
+ 1 => array(
+ '<script language="javascript">' => '</script>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php
new file mode 100644
index 000000000..bdffd5875
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php
@@ -0,0 +1,329 @@
+<?php
+/*************************************************************************************
+ * kixtart.php
+ * --------
+ * Author: Riley McArdle (riley@glyff.net)
+ * Copyright: (c) 2007 Riley McArdle (http://www.glyff.net/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/08/31
+ *
+ * PHP language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2007/08/31 (1.0.7.22)
+ * - First Release
+ *
+ * TODO (updated 2007/08/31)
+ * -------------------------
+ * *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'KiXtart',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'While', 'Loop',
+ 'Use',
+ 'Small',
+ 'Sleep',
+ 'Shell',
+ 'SetTime',
+ 'SetM',
+ 'SetL',
+ 'Set',
+ 'Select', 'Case',
+ 'Run',
+ 'Return',
+ 'Redim',
+ 'RD',
+ 'Quit',
+ 'Play',
+ 'Move',
+ 'MD',
+ 'Include',
+ 'If', 'Else', 'Endif',
+ 'GoTo',
+ 'GoSub',
+ 'Go',
+ 'Global',
+ 'GetS',
+ 'Get',
+ 'Function', 'Endfunction',
+ 'For', 'Next',
+ 'Each',
+ 'FlushKb',
+ 'Exit',
+ 'Do', 'Until',
+ 'Display',
+ 'Dim',
+ 'Del',
+ 'Debug',
+ 'Copy',
+ 'Cookie1',
+ 'Color',
+ 'CLS',
+ 'CD',
+ 'Call',
+ 'Break',
+ 'Big',
+ 'Beep',
+ ),
+ 2 => array(
+ '@Address',
+ '@Build',
+ '@Color',
+ '@Comment',
+ '@CPU',
+ '@CRLF',
+ '@CSD',
+ '@CurDir',
+ '@Date',
+ '@Day',
+ '@Domain',
+ '@DOS',
+ '@Error',
+ '@FullName',
+ '@HomeDir',
+ '@HomeDrive',
+ '@HomeShr',
+ '@HostName',
+ '@InWin',
+ '@IPaddressX',
+ '@KiX',
+ '@LanRoot',
+ '@LDomain',
+ '@LDrive',
+ '@LM',
+ '@LogonMode',
+ '@LongHomeDir',
+ '@LServer',
+ '@MaxPWAge',
+ '@MDayNo',
+ '@MHz',
+ '@MonthNo',
+ '@Month',
+ '@MSecs',
+ '@OnWoW64',
+ '@PID',
+ '@PrimaryGroup',
+ '@Priv',
+ '@ProductSuite',
+ '@ProductType',
+ '@PWAge',
+ '@RAS',
+ '@Result',
+ '@RServer',
+ '@ScriptDir',
+ '@ScriptExe',
+ '@ScriptName',
+ '@SError',
+ '@SID',
+ '@Site',
+ '@StartDir',
+ '@SysLang',
+ '@Ticks',
+ '@Time',
+ '@TsSession',
+ '@UserID',
+ '@UserLang',
+ '@WDayNo',
+ '@Wksta',
+ '@WUserID',
+ '@YDayNo',
+ '@Year',
+ ),
+ 3 => array(
+ 'WriteValue',
+ 'WriteProfileString',
+ 'WriteLine',
+ 'VarTypeName',
+ 'VarType',
+ 'Val',
+ 'UnloadHive',
+ 'UCase',
+ 'Ubound',
+ 'Trim',
+ 'Substr',
+ 'SRnd',
+ 'Split',
+ 'SidToName',
+ 'ShutDown',
+ 'ShowProgramGroup',
+ 'SetWallpaper',
+ 'SetTitle',
+ 'SetSystemState',
+ 'SetOption',
+ 'SetFocus',
+ 'SetFileAttr',
+ 'SetDefaultPrinter',
+ 'SetConsole',
+ 'SetAscii',
+ 'SendMessage',
+ 'SendKeys',
+ 'SaveKey',
+ 'RTrim',
+ 'Round',
+ 'Rnd',
+ 'Right',
+ 'RedirectOutput',
+ 'ReadValue',
+ 'ReadType',
+ 'ReadProfileString',
+ 'ReadLine',
+ 'Open',
+ 'MessageBox',
+ 'MemorySize',
+ 'LTrim',
+ 'Logoff',
+ 'LogEvent',
+ 'LoadKey',
+ 'LoadHive',
+ 'Len',
+ 'Left',
+ 'LCase',
+ 'KeyExist',
+ 'KbHit',
+ 'Join',
+ 'IsDeclared',
+ 'Int',
+ 'InStrRev',
+ 'InStr',
+ 'InGroup',
+ 'IIF',
+ 'GetObject',
+ 'GetFileVersion',
+ 'GetFileTime',
+ 'GetFileSize',
+ 'GetFileAttr',
+ 'GetDiskSpace',
+ 'FreeFileHandle',
+ 'FormatNumber',
+ 'Fix',
+ 'ExpandEnvironmentVars',
+ 'Exist',
+ 'Execute',
+ 'EnumValue',
+ 'EnumLocalGroup',
+ 'EnumKey',
+ 'EnumIpInfo',
+ 'EnumGroup',
+ 'Dir',
+ 'DelValue',
+ 'DelTree',
+ 'DelProgramItem',
+ 'DelProgramGroup',
+ 'DelPrinterConnection',
+ 'DelKey',
+ 'DecToHex',
+ 'CStr',
+ 'CreateObject',
+ 'CompareFileTimes',
+ 'Close',
+ 'ClearEventLog',
+ 'CInt',
+ 'Chr',
+ 'CDbl',
+ 'Box',
+ 'BackupEventLog',
+ 'At',
+ 'AScan',
+ 'Asc',
+ 'AddProgramItem',
+ 'AddProgramGroup',
+ 'AddPrinterConnection',
+ 'AddKey',
+ 'Abs'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '?', ':', '+', '-', '*', '/', '&', '|', '^', '~', '<', '>', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.kixtart.org/manual/Commands/{FNAMEL}.htm',
+ 2 => '',
+ 3 => 'http://www.kixtart.org/manual/Functions/{FNAMEL}.htm'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php
new file mode 100644
index 000000000..03d64a166
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php
@@ -0,0 +1,282 @@
+<?php
+/*************************************************************************************
+ * klonec.php
+ * --------
+ * Author: AUGER Mickael
+ * Copyright: Synchronic
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/04/16
+ *
+ * KLone with C language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/04/16 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2008/04/16)
+ * -------------------------
+ * A tester et a completer si besoin
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'KLone C',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),//#pour precede les include de C
+ 'COMMENT_MULTI' => array('/*' => '*/', '<!--' => '-->' ),//comentaires C et KLone suivi de ceux pour HTML
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(//mots-cles C
+ 'if', 'return', 'while', 'case', 'class', 'continue', 'default',
+ 'do', 'else', 'for', 'switch', 'goto',
+ 'null', 'break', 'true', 'enum', 'extern', 'inline', 'false'
+ ),
+ 2 => array(//mots-cles KLone
+ 'out', 'request', 'response',
+ ),
+ 3 => array(//fonctions C usuelles
+ 'printf', 'malloc', 'fopen', 'fclose', 'free', 'fputs', 'fgets', 'feof', 'fwrite',
+ 'perror', 'ferror', 'qsort', 'stats', 'sscanf', 'scanf',
+ 'strdup', 'strcpy', 'strcmp', 'strncpy', 'strcasecmp', 'cat', 'strcat', 'strstr',
+ 'strlen', 'strtof', 'strtod', 'strtok', 'towlower', 'towupper',
+ 'cd', 'system', 'exit', 'exec', 'fork', 'vfork', 'kill', 'signal', 'syslog',
+ 'usleep', 'utime', 'wait', 'waitpid', 'waitid',
+ 'ceil', 'eval', 'round', 'floor',
+ 'atoi', 'atol', 'abs', 'cos', 'sin', 'tan', 'acos', 'asin', 'atan', 'exp',
+ 'time', 'ctime', 'localtime', 'asctime', 'gmtime', 'difftime', 'date'
+ ),
+ 4 => array(//fonctions KLone usuelles
+ 'request_get_cookies', 'request_get_cookie', 'request_get_args', 'request_get_arg',
+ 'request_io', 'request_get_uri', 'request_get_filename', 'request_get_query_string', 'request_get_path_info',
+ 'request_get_if_modified_since', 'request_get_http', 'request_get_client_request',
+ 'request_get_content_length', 'request_get_uploads', 'request_get_uploaded_file',
+ 'request_get_method', 'request_get_protocol', 'request_get_resolved_filename',
+ 'request_get_resolved_path_info', 'request_get_addr', 'request_get_peer_addr',
+ 'request_get_header', 'request_get_field', 'request_get_field_value',
+ 'response_set_content_encoding', 'response_disable_caching', 'response_enable_caching',
+ 'response_set_cookie', 'response_set_method', 'response_get_method',
+ 'response_print_header', 'response_set_field', 'response_del_field',
+ 'response_set_content_type', 'response_set_date', 'response_set_last_modified',
+ 'response_set_content_length', 'response_get_status', 'response_get_header',
+ 'response_io', 'response_redirect', 'response_set_status',
+ 'session_get_vars', 'session_get', 'session_set', 'session_age', 'session_clean', 'session_del',
+ 'io_type', 'io_pipe', 'io_dup', 'io_copy', 'io_seek', 'io_tell', 'io_close',
+ 'io_free', 'io_read', 'io_printf', 'io_flush', 'io_write', 'io_putc', 'io_getc',
+ 'io_get_until', 'io_gets', 'io_codec_add_head', 'io_codec_add_tail',
+ 'io_codecs_remove', 'io_name_set', 'io_name_get'
+ ),
+ 5 => array(//types C
+ 'auto', 'char', 'const', 'double', 'float', 'int', 'long',
+ 'register', 'short', 'signed', 'sizeof', 'static', 'string', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile',
+ 'wchar_t', 'time_t', 'FILE'
+ ),
+ 6 => array(//mots-cles HTML
+ 'a', 'abbr', 'acronym', 'address', 'applet',
+
+ 'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
+
+ 'caption', 'center', 'cite', 'code', 'colgroup', 'col',
+
+ 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
+
+ 'em',
+
+ 'fieldset', 'font', 'form', 'frame', 'frameset',
+
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
+
+ 'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
+
+ 'kbd',
+
+ 'label', 'legend', 'link', 'li',
+
+ 'map', 'meta',
+
+ 'noframes', 'noscript',
+
+ 'object', 'ol', 'optgroup', 'option',
+
+ 'param', 'pre', 'p',
+
+ 'q',
+
+ 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
+
+ 'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
+
+ 'ul', 'u',
+
+ 'var',
+ ),
+ 7 => array(//autres mots-cles HTML
+ 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
+ 'background', 'bgcolor', 'border',
+ 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
+ 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
+ 'enctype',
+ 'face', 'for', 'frame', 'frameborder',
+ 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
+ 'id', 'ismap',
+ 'label', 'lang', 'language', 'link', 'longdesc',
+ 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
+ 'name', 'nohref', 'noresize', 'noshade', 'nowrap',
+ 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
+ 'profile', 'prompt',
+ 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
+ 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
+ 'tabindex', 'target', 'text', 'title', 'type',
+ 'usemap',
+ 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
+ 'width'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ '<%=', '<%!', '<%', '%>'
+ ),
+ 0 => array(
+ '(', ')', '[', ']', '{', '}',
+ '!', '%', '&', '|', '/',
+ '<', '>',
+ '=', '-', '+', '*',
+ '.', ':', ',', ';', '^'
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100; font-weight: bold;',//pour les mots-cles C
+ 2 => 'color: #000000; font-weight: bold;',//pour les mots-cles KLone
+ 3 => 'color: #6600FF;',//pour les fonctions C
+ 4 => 'color: #6600FF;',//pour les fonctions Klone
+ 5 => 'color: #0099FF; font-weight: bold;',//pour les types C
+ 6 => 'color: #990099; font-weight: bold;',//pour les mots-cles HTML
+ 7 => 'color: #000066;'//pour les autres mots-cles HTML
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',//commentaire sur une ligne C et KLone
+ 2 => 'color: #339933;',//pour les #... en C
+ 'MULTI' => 'color: #808080; font-style: italic;'//commentaire sur plusieurs lignes C et KLone
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;',
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(),
+ 'SCRIPT' => array(
+ 0 => 'background-color:#ffccff; font-weight: bold; color:#000000;',
+ 1 => '',
+ 2 => '',
+ 3 => 'color: #00bbdd; font-weight: bold;',
+ 4 => 'color: #ddbb00;',
+ 5 => 'color: #009900;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
+ 4 => 'http://www.koanlogic.com/klone/api/html/globals.html',
+ 5 => '',
+ 6 => 'http://december.com/html/4/element/{FNAMEL}.html',
+ 7 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ //delimiteurs pour KLone
+ 0 => array(
+ '<%=' => '%>'
+ ),
+ 1 => array(
+ '<%!' => '%>'
+ ),
+ 2 => array(
+ '<%' => '%>'
+ ),
+ //delimiteur pour HTML
+ 3 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 4 => array(
+ '&' => ';'
+ ),
+ 5 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ 1 => true,
+ 2 => true,
+ 3 => false,
+ 4 => false,
+ 5 => true
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 6 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ ),
+ 7 => array(
+ 'DISALLOWED_AFTER' => '(?=\s*=)',
+ )
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php
new file mode 100644
index 000000000..fd2d53864
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php
@@ -0,0 +1,310 @@
+<?php
+/*************************************************************************************
+ * klonecpp.php
+ * --------
+ * Author: AUGER Mickael
+ * Copyright: Synchronic
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/04/16
+ *
+ * KLone with C++ language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/04/16 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2008/04/16)
+ * -------------------------
+ * A tester et a completer si besoin
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'KLone C++',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),//#pour precede les include de C
+ 'COMMENT_MULTI' => array('/*' => '*/', '<!--' => '-->' ),//comentaires C et KLone suivi de ceux pour HTML
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(//mots-cles C++
+ 'if', 'return', 'while', 'case', 'continue', 'default',
+ 'do', 'else', 'for', 'switch', 'goto',
+ 'break', 'true', 'enum', 'extern', 'inline', 'false',
+ 'errno', 'stdin', 'stdout', 'stderr',
+ 'virtual', 'public', 'private', 'protected', 'template', 'using', 'namespace',
+ 'try', 'catch', 'dynamic_cast', 'const_cast', 'reinterpret_cast',
+ 'static_cast', 'explicit', 'friend', 'typename', 'typeid', 'class',
+ 'EDOM', 'ERANGE', 'FLT_RADIX', 'FLT_ROUNDS', 'FLT_DIG', 'DBL_DIG', 'LDBL_DIG',
+ 'FLT_EPSILON', 'DBL_EPSILON', 'LDBL_EPSILON', 'FLT_MANT_DIG', 'DBL_MANT_DIG',
+ 'LDBL_MANT_DIG', 'FLT_MAX', 'DBL_MAX', 'LDBL_MAX', 'FLT_MAX_EXP', 'DBL_MAX_EXP',
+ 'LDBL_MAX_EXP', 'FLT_MIN', 'DBL_MIN', 'LDBL_MIN', 'FLT_MIN_EXP', 'DBL_MIN_EXP',
+ 'LDBL_MIN_EXP', 'CHAR_BIT', 'CHAR_MAX', 'CHAR_MIN', 'SCHAR_MAX', 'SCHAR_MIN',
+ 'UCHAR_MAX', 'SHRT_MAX', 'SHRT_MIN', 'USHRT_MAX', 'INT_MAX', 'INT_MIN',
+ 'UINT_MAX', 'LONG_MAX', 'LONG_MIN', 'ULONG_MAX', 'HUGE_VAL', 'SIGABRT',
+ 'SIGFPE', 'SIGILL', 'SIGINT', 'SIGSEGV', 'SIGTERM', 'SIG_DFL', 'SIG_ERR',
+ 'SIG_IGN', 'BUFSIZ', 'EOF', 'FILENAME_MAX', 'FOPEN_MAX', 'L_tmpnam', 'NULL',
+ 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX',
+ 'EXIT_FAILURE', 'EXIT_SUCCESS', 'RAND_MAX', 'CLOCKS_PER_SEC'
+ ),
+ 2 => array(//mots-cles KLone
+ 'out', 'request', 'response',
+ ),
+ 3 => array(//fonctions C++ usuelles
+ 'cin', 'cerr', 'clog', 'cout', 'delete', 'new', 'this',
+ 'printf', 'fprintf', 'snprintf', 'sprintf', 'assert',
+ 'isalnum', 'isalpha', 'isdigit', 'iscntrl', 'isgraph', 'islower', 'isprint',
+ 'ispunct', 'isspace', 'isupper', 'isxdigit', 'tolower', 'toupper',
+ 'exp', 'log', 'log10', 'pow', 'sqrt', 'ceil', 'floor', 'fabs', 'ldexp',
+ 'frexp', 'modf', 'fmod', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'atan2',
+ 'sinh', 'cosh', 'tanh', 'setjmp', 'longjmp',
+ 'va_start', 'va_arg', 'va_end', 'offsetof', 'sizeof', 'fopen', 'freopen',
+ 'fflush', 'fclose', 'remove', 'rename', 'tmpfile', 'tmpname', 'setvbuf',
+ 'setbuf', 'vfprintf', 'vprintf', 'vsprintf', 'fscanf', 'scanf', 'sscanf',
+ 'fgetc', 'fgets', 'fputc', 'fputs', 'getc', 'getchar', 'gets', 'putc',
+ 'putchar', 'puts', 'ungetc', 'fread', 'fwrite', 'fseek', 'ftell', 'rewind',
+ 'fgetpos', 'fsetpos', 'clearerr', 'feof', 'ferror', 'perror', 'abs', 'labs',
+ 'div', 'ldiv', 'atof', 'atoi', 'atol', 'strtod', 'strtol', 'strtoul', 'calloc',
+ 'malloc', 'realloc', 'free', 'abort', 'exit', 'atexit', 'system', 'getenv',
+ 'bsearch', 'qsort', 'rand', 'srand', 'strcpy', 'strncpy', 'strcat', 'strncat',
+ 'strcmp', 'strncmp', 'strcoll', 'strchr', 'strrchr', 'strspn', 'strcspn',
+ 'strpbrk', 'strstr', 'strlen', 'strerror', 'strtok', 'strxfrm', 'memcpy',
+ 'memmove', 'memcmp', 'memchr', 'memset', 'clock', 'time', 'difftime', 'mktime',
+ 'asctime', 'ctime', 'gmtime', 'localtime', 'strftime'
+ ),
+ 4 => array(//fonctions KLone usuelles
+ 'request_get_cookies', 'request_get_cookie', 'request_get_args', 'request_get_arg',
+ 'request_io', 'request_get_uri', 'request_get_filename', 'request_get_query_string', 'request_get_path_info',
+ 'request_get_if_modified_since', 'request_get_http', 'request_get_client_request',
+ 'request_get_content_length', 'request_get_uploads', 'request_get_uploaded_file',
+ 'request_get_method', 'request_get_protocol', 'request_get_resolved_filename',
+ 'request_get_resolved_path_info', 'request_get_addr', 'request_get_peer_addr',
+ 'request_get_header', 'request_get_field', 'request_get_field_value',
+ 'response_set_content_encoding', 'response_disable_caching', 'response_enable_caching',
+ 'response_set_cookie', 'response_set_method', 'response_get_method',
+ 'response_print_header', 'response_set_field', 'response_del_field',
+ 'response_set_content_type', 'response_set_date', 'response_set_last_modified',
+ 'response_set_content_length', 'response_get_status', 'response_get_header',
+ 'response_io', 'response_redirect', 'response_set_status',
+ 'session_get_vars', 'session_get', 'session_set', 'session_age', 'session_clean', 'session_del',
+ 'io_type', 'io_pipe', 'io_dup', 'io_copy', 'io_seek', 'io_tell', 'io_close',
+ 'io_free', 'io_read', 'io_printf', 'io_flush', 'io_write', 'io_putc', 'io_getc',
+ 'io_get_until', 'io_gets', 'io_codec_add_head', 'io_codec_add_tail',
+ 'io_codecs_remove', 'io_name_set', 'io_name_get'
+ ),
+ 5 => array(//types C++
+ 'auto', 'bool', 'char', 'const', 'double', 'float', 'int', 'long', 'longint',
+ 'register', 'short', 'shortint', 'signed', 'static', 'struct',
+ 'typedef', 'union', 'unsigned', 'void', 'volatile', 'jmp_buf',
+ 'signal', 'raise', 'va_list', 'ptrdiff_t', 'size_t', 'FILE', 'fpos_t',
+ 'div_t', 'ldiv_t', 'clock_t', 'time_t', 'tm',
+ 'string', 'wchar_t'
+ ),
+ 6 => array(//mots-cles HTML
+ 'a', 'abbr', 'acronym', 'address', 'applet',
+
+ 'base', 'basefont', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'b',
+
+ 'caption', 'center', 'cite', 'code', 'colgroup', 'col',
+
+ 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt',
+
+ 'em',
+
+ 'fieldset', 'font', 'form', 'frame', 'frameset',
+
+ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'hr', 'html',
+
+ 'iframe', 'ilayer', 'img', 'input', 'ins', 'isindex', 'i',
+
+ 'kbd',
+
+ 'label', 'legend', 'link', 'li',
+
+ 'map', 'meta',
+
+ 'noframes', 'noscript',
+
+ 'object', 'ol', 'optgroup', 'option',
+
+ 'param', 'pre', 'p',
+
+ 'q',
+
+ 'samp', 'script', 'select', 'small', 'span', 'strike', 'strong', 'style', 'sub', 'sup', 's',
+
+ 'table', 'tbody', 'td', 'textarea', 'text', 'tfoot', 'thead', 'th', 'title', 'tr', 'tt',
+
+ 'ul', 'u',
+
+ 'var',
+ ),
+ 7 => array(//autres mots-cles HTML
+ 'abbr', 'accept-charset', 'accept', 'accesskey', 'action', 'align', 'alink', 'alt', 'archive', 'axis',
+ 'background', 'bgcolor', 'border',
+ 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'classid', 'clear', 'code', 'codebase', 'codetype', 'color', 'cols', 'colspan', 'compact', 'content', 'coords',
+ 'data', 'datetime', 'declare', 'defer', 'dir', 'disabled',
+ 'enctype',
+ 'face', 'for', 'frame', 'frameborder',
+ 'headers', 'height', 'href', 'hreflang', 'hspace', 'http-equiv',
+ 'id', 'ismap',
+ 'label', 'lang', 'language', 'link', 'longdesc',
+ 'marginheight', 'marginwidth', 'maxlength', 'media', 'method', 'multiple',
+ 'name', 'nohref', 'noresize', 'noshade', 'nowrap',
+ 'object', 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect', 'onsubmit', 'onunload',
+ 'profile', 'prompt',
+ 'readonly', 'rel', 'rev', 'rowspan', 'rows', 'rules',
+ 'scheme', 'scope', 'scrolling', 'selected', 'shape', 'size', 'span', 'src', 'standby', 'start', 'style', 'summary',
+ 'tabindex', 'target', 'text', 'title', 'type',
+ 'usemap',
+ 'valign', 'value', 'valuetype', 'version', 'vlink', 'vspace',
+ 'width'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ '<%=', '<%!', '<%', '%>'
+ ),
+ 0 => array(
+ '(', ')', '[', ']', '{', '}',
+ '!', '%', '&', '|', '/',
+ '<', '>',
+ '=', '-', '+', '*',
+ '.', ':', ',', ';', '^'
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100; font-weight: bold;',//pour les mots-cles C++
+ 2 => 'color: #000000; font-weight: bold;',//pour les mots-cles KLone
+ 3 => 'color: #6600FF;',//pour les fonctions C++
+ 4 => 'color: #6600FF;',//pour les fonctions Klone
+ 5 => 'color: #0099FF; font-weight: bold;',//pour les types C++
+ 6 => 'color: #990099; font-weight: bold;',//pour les mots-cles HTML
+ 7 => 'color: #000066;'//pour les autres mots-cles HTML
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',//commentaire sur une ligne C++ et KLone
+ 2 => 'color: #339933;',//pour les #... en C++
+ 'MULTI' => 'color: #808080; font-style: italic;'//commentaire sur plusieurs lignes C++ et KLone
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;',
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(),
+ 'SCRIPT' => array(
+ 0 => 'background-color:#ffccff; font-weight: bold; color:#000000;',
+ 1 => '',
+ 2 => '',
+ 3 => 'color: #00bbdd; font-weight: bold;',
+ 4 => 'color: #ddbb00;',
+ 5 => 'color: #009900;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAMEL}.html',
+ 4 => 'http://www.koanlogic.com/klone/api/html/globals.html',
+ 5 => '',
+ 6 => 'http://december.com/html/4/element/{FNAMEL}.html',
+ 7 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ //delimiteurs pour KLone
+ 0 => array(
+ '<%=' => '%>'
+ ),
+ 1 => array(
+ '<%!' => '%>'
+ ),
+ 2 => array(
+ '<%' => '%>'
+ ),
+ //delimiteur pour HTML
+ 3 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 4 => array(
+ '&' => ';'
+ ),
+ 5 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ 1 => true,
+ 2 => true,
+ 3 => false,
+ 4 => false,
+ 5 => true
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 6 => array(
+ 'DISALLOWED_BEFORE' => '(?<=&lt;|&lt;\/)',
+ 'DISALLOWED_AFTER' => '(?=\s|\/|&gt;)',
+ ),
+ 7 => array(
+ 'DISALLOWED_AFTER' => '(?=\s*=)',
+ )
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php
new file mode 100644
index 000000000..bad2c1861
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php
@@ -0,0 +1,218 @@
+<?php
+/*************************************************************************************
+ * latex.php
+ * -----
+ * Author: efi, Matthias Pospiech (matthias@pospiech.eu)
+ * Copyright: (c) 2006 efi, Matthias Pospiech (matthias@pospiech.eu), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/09/23
+ *
+ * LaTeX language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/08/18 (1.0.8.1)
+ * - Changes in color and some additional command recognition
+ * - No special Color for Brackets, it is only distracting
+ * if color should be reintroduced it should be less bright
+ * - Math color changed from green to violett, since green is now used for comments
+ * - Comments are now colored and the only green. The reason for coloring the comments
+ * is that often important information is in the comments und was merely unvisible before.
+ * - New Color for [Options]
+ * - color for labels not specialised anymore. It makes sence in large documents but less in
+ * small web examples.
+ * - \@keyword introduced
+ * - Fixed \& escaped ampersand
+ * 2006/09/23 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ * *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'LaTeX',
+ 'COMMENT_SINGLE' => array(
+ 1 => '%'
+ ),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'addlinespace','address','appendix','author','backmatter',
+ 'bfseries','bibitem','bigskip','blindtext','caption','captionabove',
+ 'captionbelow','cdot','centering','cite','color','colorbox','date',
+ 'def','definecolor','documentclass','edef','eqref','else','email','emph','fbox',
+ 'fi','flushleft','flushright','footnote','frac','frontmatter','graphicspath','hfill',
+ 'hline','hspace','huge','include','includegraphics','infty','input','int','ifx',
+ 'item','label','LaTeX','left','let','limits','listfiles','listoffigures',
+ 'listoftables','mainmatter','makeatletter','makeatother','makebox',
+ 'makeindex','maketitle','mbox','mediumskip','newcommand',
+ 'newenvironment','newpage','nocite','nonumber','pagestyle','par','paragraph','parbox',
+ 'parident','parskip','partial','raggedleft','raggedright','raisebox','ref',
+ 'renewcommand','renewenvironment','right','rule','section','setlength',
+ 'sffamily','subparagraph','subsection','subsubsection','sum','table',
+ 'tableofcontents','textbf','textcolor','textit','textnormal',
+ 'textsuperscript','texttt','title','today','ttfamily','urlstyle',
+ 'usepackage','vspace'
+ )
+ ),
+ 'SYMBOLS' => array(
+ "&", "\\", "{", "}", "[", "]"
+ ),
+ 'CASE_SENSITIVE' => array(
+ 1 => true,
+ GESHI_COMMENTS => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #800000;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #2C922C; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #E02020; '
+ ),
+ 'REGEXPS' => array(
+ 1 => 'color: #8020E0; font-weight: normal;', // Math inner
+ 2 => 'color: #C08020; font-weight: normal;', // [Option]
+ 3 => 'color: #8020E0; font-weight: normal;', // Maths
+ 4 => 'color: #800000; font-weight: normal;', // Structure: Labels
+ 5 => 'color: #00008B; font-weight: bold;', // Structure (\section{->x<-})
+ 6 => 'color: #800000; font-weight: normal;', // Structure (\section)
+ 7 => 'color: #0000D0; font-weight: normal;', // Environment \end or \begin{->x<-} (brighter blue)
+ 8 => 'color: #C00000; font-weight: normal;', // Structure \end or \begin
+ 9 => 'color: #2020C0; font-weight: normal;', // {...}
+ 10 => 'color: #800000; font-weight: normal;', // \%, \& etc.
+ 11 => 'color: #E00000; font-weight: normal;', // \@keyword
+ 12 => 'color: #800000; font-weight: normal;', // \keyword
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.golatex.de/wiki/index.php?title=%5C{FNAME}',
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // Math inner
+ 1 => array(
+ GESHI_SEARCH => "(\\\\begin\\{(equation|displaymath|eqnarray|subeqnarray|math|multline|gather|align|alignat|flalign)\\})(.*)(\\\\end\\{\\2\\})",
+ GESHI_REPLACE => '\3',
+ GESHI_MODIFIERS => 'Us',
+ GESHI_BEFORE => '\1',
+ GESHI_AFTER => '\4'
+ ),
+ // [options]
+ 2 => array(
+ GESHI_SEARCH => "(?<=\[).+(?=\])",
+ GESHI_REPLACE => '\0',
+ GESHI_MODIFIERS => 'Us',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // Math mode with $ ... $
+ 3 => array(
+ GESHI_SEARCH => "\\$.+\\$",
+ GESHI_REPLACE => '\0',
+ GESHI_MODIFIERS => 'Us',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // Structure: Label
+ 4 => "\\\\(?:label|pageref|ref|cite)(?=[^a-zA-Z])",
+ // Structure: sections
+ 5 => array(
+ GESHI_SEARCH => "(\\\\(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph|addpart|addchap|addsec)\*?\\{)(.*)(?=\\})",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'U',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ // Structure: sections
+ 6 => "\\\\(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph|addpart|addchap|addsec)\*?(?=[^a-zA-Z])",
+ // environment \begin{} and \end{} (i.e. the things inside the {})
+ 7 => array(
+ GESHI_SEARCH => "(\\\\(?:begin|end)\\{)(.*)(?=\\})",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'U',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ // Structure \begin and \end
+ 8 => "\\\\(?:end|begin)(?=[^a-zA-Z])",
+ // {parameters}
+ 9 => array(
+ GESHI_SEARCH => "(?<=\\{)(?!<\|!REG3XP5!>).*(?=\\})",
+ GESHI_REPLACE => '\0',
+ GESHI_MODIFIERS => 'Us',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // \%, \& usw.
+ 10 => "\\\\(?:[_$%]|&amp;)",
+ // \@keywords
+ 11 => "(?<!<\|!REG3XP[8]!>)\\\\@[a-zA-Z]+\*?",
+ // \keywords
+ 12 => "(?<!<\|!REG3XP[468]!>)\\\\[a-zA-Z]+\*?",
+
+// ---------------------------------------------
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'COMMENTS' => array(
+ 'DISALLOWED_BEFORE' => '\\'
+ ),
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<=\\\\)",
+ 'DISALLOWED_AFTER' => "(?![A-Za-z0-9])"
+ ),
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER,
+ 'BRACKETS' => GESHI_NEVER
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php
new file mode 100644
index 000000000..aa492058b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php
@@ -0,0 +1,144 @@
+<?php
+/*************************************************************************************
+ * lisp.php
+ * --------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * Generic Lisp language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/12/9 (1.0.2)
+ * - Added support for :keywords and ::access (Denis Mashkevich)
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/08/30 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Lisp',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(';|' => '|;'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'not','defun','princ','when',
+ 'eval','apply','funcall','quote','identity','function',
+ 'complement','backquote','lambda','set','setq','setf',
+ 'defmacro','gensym','make','symbol','intern',
+ 'name','value','plist','get',
+ 'getf','putprop','remprop','hash','array','aref',
+ 'car','cdr','caar','cadr','cdar','cddr','caaar','caadr','cadar',
+ 'caddr','cdaar','cdadr','cddar','cdddr','caaaar','caaadr',
+ 'caadar','caaddr','cadaar','cadadr','caddar','cadddr',
+ 'cdaaar','cdaadr','cdadar','cdaddr','cddaar','cddadr',
+ 'cdddar','cddddr','cons','list','append','reverse','last','nth',
+ 'nthcdr','member','assoc','subst','sublis','nsubst',
+ 'nsublis','remove','length',
+ 'mapc','mapcar','mapl','maplist','mapcan','mapcon','rplaca',
+ 'rplacd','nconc','delete','atom','symbolp','numberp',
+ 'boundp','null','listp','consp','minusp','zerop','plusp',
+ 'evenp','oddp','eq','eql','equal','cond','case','and','or',
+ 'let','l','if','prog','prog1','prog2','progn','go','return',
+ 'do','dolist','dotimes','catch','throw','error','cerror','break',
+ 'continue','errset','baktrace','evalhook','truncate','float',
+ 'rem','min','max','abs','sin','cos','tan','expt','exp','sqrt',
+ 'random','logand','logior','logxor','lognot','bignums','logeqv',
+ 'lognand','lognor','logorc2','logtest','logbitp','logcount',
+ 'integer','nil','parse-integer'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']',
+ '!', '%', '^', '&',
+ ' + ',' - ',' * ',' / ',
+ '=','<','>',
+ '.',':',',',';',
+ '|'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #555;',
+ 1 => 'color: #555;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ '::', ':'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'OOLANG' => array(
+ 'MATCH_AFTER' => '[a-zA-Z][a-zA-Z0-9_\-]*'
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php
new file mode 100644
index 000000000..a799d6900
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php
@@ -0,0 +1,130 @@
+<?php
+/*************************************************************************************
+ * locobasic.php
+ * -------------
+ * Author: Nacho Cabanes
+ * Copyright: (c) 2009 Nacho Cabanes (http://www.nachocabanes.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/03/22
+ *
+ * Locomotive Basic (Amstrad CPC series) language file for GeSHi.
+ *
+ * More details at http://en.wikipedia.org/wiki/Locomotive_BASIC
+ *
+ * CHANGES
+ * -------
+ * 2009/03/22 (1.0.8.3)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Locomotive Basic',
+ 'COMMENT_SINGLE' => array(1 => "'", 2 => 'REM'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ "AFTER", "AND", "AUTO", "BORDER", "BREAK", "CALL", "CAT", "CHAIN",
+ "CLEAR", "CLG", "CLS", "CLOSEIN", "CLOSEOUT", "CONT", "CURSOR",
+ "DATA", "DEF", "DEFINT", "DEFREAL", "DEFSTR", "DEG", "DELETE",
+ "DERR", "DI", "DIM", "DRAW", "DRAWR", "EDIT", "EI", "ELSE", "END",
+ "ENV", "ENT", "EOF", "ERASE", "ERL", "ERR", "ERROR", "EVERY",
+ "FILL", "FN", "FOR", "FRAME", "GOSUB", "GOTO", "GRAPHICS", "HIMEM",
+ "IF", "INK", "INPUT", "KEY", "LET", "LINE", "LIST", "LOAD",
+ "LOCATE", "MASK", "MEMORY", "MERGE", "MODE", "MOVE", "MOVER", "NEW",
+ "NEXT", "NOT", "ON", "OPENIN", "OPENOUT", "OR", "ORIGIN", "PAPER",
+ "PEEK", "PEN", "PLOT", "PLOTR", "POKE", "PRINT", "RAD", "RANDOMIZE",
+ "READ", "RELEASE", "REMAIN", "RENUM", "RESTORE", "RESUME", "RETURN",
+ "RUN", "SAVE", "SPEED", "SOUND", "SPC", "SQ", "STEP", "STOP", "SWAP",
+ "SYMBOL", "TAB", "TAG", "TAGOFF", "TEST", "TESTR", "TIME", "TO",
+ "THEN", "TRON", "TROFF", "USING", "WAIT", "WEND", "WHILE", "WIDTH",
+ "WINDOW", "WRITE", "XOR", "ZONE"
+ ),
+ 2 => array(
+ "ABS", "ASC", "ATN", "BIN", "CHR", "CINT", "COPYCHR", "COS",
+ "CREAL", "DEC", "FIX", "FRE", "EXP", "HEX", "INKEY", "INP", "INSTR",
+ "INT", "JOY", "LEFT", "LEN", "LOG", "LOG10", "LOWER", "MAX", "MID",
+ "MIN", "MOD", "OUT", "PI", "POS", "RIGHT", "RND", "ROUND", "SGN",
+ "SIN", "SPACE", "SQR", "STR", "STRING", "TAN", "UNT", "UPPER",
+ "VAL", "VPOS", "XPOS", "YPOS"
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff; font-weight: bold;',
+ 2 => 'color: #008888; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080;',
+ 2 => 'color: #808080;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0044ff;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php
new file mode 100644
index 000000000..fc60e3e9f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php
@@ -0,0 +1,152 @@
+<?php
+/*************************************************************************************
+ * lolcode.php
+ * ----------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/10/31
+ *
+ * LOLcode language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/31 (1.0.8.1)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'LOLcode',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ 1 => "/\bBTW\b.*$/im",
+ 2 => "/(^|\b)(?:OBTW\b.+?\bTLDR|LOL\b.+?\/LOL)(\b|$)/si"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ 1 => '/:[)>o":]/',
+ 2 => '/:\([\da-f]+\)/i',
+ 3 => '/:\{\w+\}/i',
+ 4 => '/:\[\w+\]/i',
+ ),
+ 'KEYWORDS' => array(
+ //Statements
+ 1 => array(
+ 'VISIBLE', 'HAI', 'KTHX', 'KTHXBYE', 'SMOOSH', 'GIMMEH', 'PLZ',
+ 'ON', 'INVISIBLE', 'R', 'ITZ', 'GTFO', 'COMPLAIN', 'GIMME',
+
+ 'OPEN', 'FILE', 'I HAS A', 'AWSUM THX', 'O NOES', 'CAN', 'HAS', 'HAZ',
+ 'HOW DOES I', 'IF U SAY SO', 'FOUND YR', 'BORROW', 'OWN', 'ALONG',
+ 'WITH', 'WIT', 'LOOK', 'AT', 'AWSUM', 'THX'
+ ),
+ //Conditionals
+ 2 => array(
+ 'IZ', 'YARLY', 'NOWAI', 'WTF?', 'MEBBE', 'OMG', 'OMGWTF',
+ 'ORLY?', 'OF', 'NOPE', 'SO', 'IM', 'MAI',
+
+ 'O RLY?', 'SUM', 'BOTH SAEM', 'DIFFRINT', 'BOTH', 'EITHER', 'WON',
+ 'DIFF', 'PRODUKT', 'QUOSHUNT', 'MOD', 'MKAY', 'OK', 'THING',
+ 'BIGNESS'
+ ),
+ //Repetition
+ 3 => array(
+ 'IN', 'OUTTA', 'LOOP', 'WHILE'
+ ),
+ //Operators \Math
+ 4 => array(
+ 'AN', 'AND', 'NOT', 'UP', 'YR', 'UPPIN', 'NERF', 'NERFIN', 'NERFZ',
+ 'SMASHING', 'UR', 'KINDA', 'LIKE', 'SAEM', 'BIG', 'SMALL',
+ 'BIGGR', 'SMALLR', 'BIGGER', 'SMALLER', 'GOOD', 'CUTE', 'THAN'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '.', ',', '?',
+ '!!'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #008000;',
+ 2 => 'color: #000080;',
+ 3 => 'color: #000080;',
+ 4 => 'color: #800000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; style: italic;',
+ 2 => 'color: #666666; style: italic;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'SPACE_AS_WHITESPACE' => true
+ )
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php
new file mode 100644
index 000000000..e82d6bf3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php
@@ -0,0 +1,318 @@
+<?php
+/*************************************************************************************
+ * lotusformulas.php
+ * ------------------------
+ * Author: Richard Civil (info@richardcivil.net)
+ * Copyright: (c) 2008 Richard Civil (info@richardcivil.net), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/04/12
+ *
+ * @Formula/@Command language file for GeSHi.
+ *
+ * @Formula/@Command source: IBM Lotus Notes/Domino 8 Designer Help
+ *
+ * CHANGES
+ * -------
+ * 2008/04/12 (1.0.7.22)
+ * - First Release
+ *
+ * TODO (updated 2008/04/12)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Lotus Notes @Formulas',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array('REM' => ';'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array (
+ '[ZoomPreview]', '[WorkspaceStackReplicaIcons]',
+ '[WorkspaceProperties]', '[WindowWorkspace]',
+ '[WindowTile]', '[WindowRestore]', '[WindowNext]',
+ '[WindowMinimizeAll]', '[WindowMinimize]', '[WindowMaximizeAll]',
+ '[WindowMaximize]', '[WindowCascade]', '[ViewSwitchForm]',
+ '[ViewShowUnread]', '[ViewShowServerNames]', '[ViewShowSearchBar]',
+ '[ViewShowRuler]', '[ViewShowPageBreaks]', '[ViewShowOnlyUnread]',
+ '[ViewShowOnlySelected]', '[ViewShowOnlySearchResults]',
+ '[ViewShowOnlyCategories]', '[ViewShowObject]',
+ '[ViewShowFieldHelp]', '[ViewRenamePerson]', '[ViewRefreshUnread]',
+ '[ViewRefreshFields]', '[ViewNavigatorsNone]',
+ '[ViewNavigatorsFolders]', '[ViewMoveName]', '[ViewHorizScrollbar]',
+ '[ViewExpandWithChildren]', '[ViewExpandAll]', '[ViewExpand]',
+ '[ViewCollapseAll]', '[ViewCollapse]', '[ViewChange]',
+ '[ViewCertify]', '[ViewBesideFolders]', '[ViewBelowFolders]',
+ '[ViewArrangeIcons]', '[V3EditPrevField]', '[V3EditNextField]',
+ '[UserIDSwitch]', '[UserIDSetPassword]', '[UserIDMergeCopy]',
+ '[UserIDInfo]', '[UserIDEncryptionKeys]', '[UserIDCreateSafeCopy]',
+ '[UserIDClearPassword]', '[UserIDCertificates]',
+ '[ToolsUserLogoff]', '[ToolsSpellCheck]', '[ToolsSmartIcons]',
+ '[ToolsSetupUserSetup]', '[ToolsSetupPorts]', '[ToolsSetupMail]',
+ '[ToolsSetupLocation]', '[ToolsScanUnreadSelected]',
+ '[ToolsScanUnreadPreferred]', '[ToolsScanUnreadChoose]',
+ '[ToolsRunMacro]', '[ToolsRunBackgroundMacros]', '[ToolsReplicate]',
+ '[ToolsRefreshSelectedDocs]', '[ToolsRefreshAllDocs]',
+ '[ToolsMarkSelectedUnread]', '[ToolsMarkSelectedRead]',
+ '[ToolsMarkAllUnread]', '[ToolsMarkAllRead]', '[ToolsHangUp]',
+ '[ToolsCategorize]', '[ToolsCall]', '[TextUnderline]',
+ '[TextSpacingSingle]', '[TextSpacingOneAndaHalf]',
+ '[TextSpacingDouble]', '[TextSetFontSize]', '[TextSetFontFace]',
+ '[TextSetFontColor]', '[TextReduceFont]', '[TextPermanentPen]',
+ '[TextParagraphStyles]', '[TextParagraph]', '[TextOutdent]',
+ '[TextNumbers]', '[TextNormal]', '[TextItalic]', '[TextFont]',
+ '[TextEnlargeFont]', '[TextCycleSpacing]', '[TextBullet]',
+ '[TextBold]', '[TextAlignRight]', '[TextAlignNone]',
+ '[TextAlignLeft]', '[TextAlignFull]', '[TextAlignCenter]',
+ '[SwitchView]', '[SwitchForm]', '[StyleCycleKey]',
+ '[SmartIconsNextSet]', '[SmartIconsFloating]', '[ShowProperties]',
+ '[ShowHidePreviewPane]', '[ShowHideParentPreview]',
+ '[ShowHideLinkPreview]', '[ShowHideIMContactList]',
+ '[SetCurrentLocation]', '[SendInstantMessage]',
+ '[SectionRemoveHeader]', '[SectionProperties]',
+ '[SectionExpandAll]', '[SectionExpand]', '[SectionDefineEditors]',
+ '[SectionCollapseAll]', '[SectionCollapse]', '[RunScheduledAgents]',
+ '[RunAgent]', '[ReplicatorStop]', '[ReplicatorStart]',
+ '[ReplicatorSendReceiveMail]', '[ReplicatorSendMail]',
+ '[ReplicatorReplicateWithServer]', '[ReplicatorReplicateSelected]',
+ '[ReplicatorReplicateNext]', '[ReplicatorReplicateHigh]',
+ '[Replicator]', '[RenameDatabase]', '[RemoveFromFolder]',
+ '[RemoteDebugLotusScript]', '[ReloadWindow]', '[RefreshWindow]',
+ '[RefreshParentNote]', '[RefreshHideFormulas]', '[RefreshFrame]',
+ '[PublishDatabase]', '[PictureProperties]', '[PasteBitmapAsObject]',
+ '[PasteBitmapAsBackground]', '[OpenView]', '[OpenPage]',
+ '[OpenNavigator]', '[OpenInNewWindow]', '[OpenHelpDocument]',
+ '[OpenFrameset]', '[OpenDocument]', '[OpenCalendar]',
+ '[ObjectProperties]', '[ObjectOpen]', '[ObjectDisplayAs]',
+ '[NavPrevUnread]', '[NavPrevSelected]', '[NavPrevMain]',
+ '[NavPrev]', '[NavNextUnread]', '[NavNextSelected]',
+ '[NavNextMain]', '[NavNext]', '[NavigatorTest]',
+ '[NavigatorProperties]', '[NavigateToBacklink]',
+ '[NavigatePrevUnread]', '[NavigatePrevSelected]',
+ '[NavigatePrevMain]', '[NavigatePrevHighlight]', '[NavigatePrev]',
+ '[NavigateNextUnread]', '[NavigateNextSelected]',
+ '[NavigateNextMain]', '[NavigateNextHighlight]', '[NavigateNext]',
+ '[MoveToTrash]', '[MailSendPublicKey]', '[MailSendEncryptionKey]',
+ '[MailSendCertificateRequest]', '[MailSend]', '[MailScanUnread]',
+ '[MailRequestNewPublicKey]', '[MailRequestNewName]',
+ '[MailRequestCrossCert]', '[MailOpen]', '[MailForwardAsAttachment]',
+ '[MailForward]', '[MailComposeMemo]', '[MailAddress]',
+ '[LayoutProperties]', '[LayoutElementSendToBack]',
+ '[LayoutElementProperties]', '[LayoutElementBringToFront]',
+ '[LayoutAddText]', '[LayoutAddGraphic]', '[InsertSubform]',
+ '[HotspotProperties]', '[HotspotClear]', '[HelpUsingDatabase]',
+ '[HelpAboutNotes]', '[HelpAboutDatabase]', '[GoUpLevel]',
+ '[FormTestDocument]', '[FormActions]', '[FolderRename]',
+ '[FolderProperties]', '[FolderMove]', '[FolderExpandWithChildren]',
+ '[FolderExpandAll]', '[FolderExpand]', '[FolderDocuments]',
+ '[FolderCustomize]', '[FolderCollapse]', '[Folder]',
+ '[FindFreeTimeDialog]', '[FileSaveNewVersion]', '[FileSave]',
+ '[FilePrintSetup]', '[FilePrint]', '[FilePageSetup]',
+ '[FileOpenDBRepID]', '[FileOpenDatabase]', '[FileNewReplica]',
+ '[FileNewDatabase]', '[FileImport]', '[FileFullTextUpdate]',
+ '[FileFullTextInfo]', '[FileFullTextDelete]',
+ '[FileFullTextCreate]', '[FileExport]', '[FileExit]',
+ '[FileDatabaseUseServer]', '[FileDatabaseRemove]',
+ '[FileDatabaseInfo]', '[FileDatabaseDelete]', '[FileDatabaseCopy]',
+ '[FileDatabaseCompact]', '[FileDatabaseACL]', '[FileCloseWindow]',
+ '[ExitNotes]', '[Execute]', '[ExchangeUnreadMarks]', '[EmptyTrash]',
+ '[EditUp]', '[EditUntruncate]', '[EditUndo]', '[EditTop]',
+ '[EditTableInsertRowColumn]', '[EditTableFormat]',
+ '[EditTableDeleteRowColumn]', '[EditShowHideHiddenChars]',
+ '[EditSelectByDate]', '[EditSelectAll]', '[EditRight]',
+ '[EditRestoreDocument]', '[EditResizePicture]',
+ '[EditQuoteSelection]', '[EditProfileDocument]', '[EditProfile]',
+ '[EditPrevField]', '[EditPhoneNumbers]', '[EditPasteSpecial]',
+ '[EditPaste]', '[EditOpenLink]', '[EditNextField]',
+ '[EditMakeDocLink]', '[EditLocations]', '[EditLinks]', '[EditLeft]',
+ '[EditInsertText]', '[EditInsertTable]', '[EditInsertPopup]',
+ '[EditInsertPageBreak]', '[EditInsertObject]',
+ '[EditInsertFileAttachment]', '[EditInsertButton]',
+ '[EditIndentFirstLine]', '[EditIndent]', '[EditHorizScrollbar]',
+ '[EditHeaderFooter]', '[EditGotoField]', '[EditFindNext]',
+ '[EditFindInPreview]', '[EditFind]', '[EditEncryptionKeys]',
+ '[EditDown]', '[EditDocument]', '[EditDetach]', '[EditDeselectAll]',
+ '[EditCut]', '[EditCopy]', '[EditClear]', '[EditButton]',
+ '[EditBottom]', '[DiscoverFolders]', '[Directories]',
+ '[DialingRules]', '[DesignViewSelectFormula]', '[DesignViews]',
+ '[DesignViewNewColumn]', '[DesignViewFormFormula]',
+ '[DesignViewEditActions]', '[DesignViewColumnDef]',
+ '[DesignViewAttributes]', '[DesignViewAppendColumn]',
+ '[DesignSynopsis]', '[DesignSharedFields]', '[DesignReplace]',
+ '[DesignRefresh]', '[DesignMacros]', '[DesignIcon]',
+ '[DesignHelpUsingDocument]', '[DesignHelpAboutDocument]',
+ '[DesignFormWindowTitle]', '[DesignFormUseField]',
+ '[DesignFormShareField]', '[DesignForms]', '[DesignFormNewField]',
+ '[DesignFormFieldDef]', '[DesignFormAttributes]',
+ '[DesignDocumentInfo]', '[DebugLotusScript]',
+ '[DatabaseReplSettings]', '[DatabaseDelete]', '[CreateView]',
+ '[CreateTextbox]', '[CreateSubForm]', '[CreateSection]',
+ '[CreateRectangularHotspot]', '[CreateRectangle]',
+ '[CreatePolyline]', '[CreatePolygon]', '[CreateNavigator]',
+ '[CreateLayoutRegion]', '[CreateForm]', '[CreateFolder]',
+ '[CreateEllipse]', '[CreateControlledAccessSection]',
+ '[CreateAgent]', '[CreateAction]', '[CopySelectedAsTable]',
+ '[ComposeWithReference]', '[Compose]', '[CloseWindow]', '[Clear]',
+ '[ChooseFolders]', '[CalendarGoTo]', '[CalendarFormat]',
+ '[AttachmentView]', '[AttachmentProperties]', '[AttachmentLaunch]',
+ '[AttachmentDetachAll]', '[AgentTestRun]', '[AgentSetServerName]',
+ '[AgentRun]', '[AgentLog]', '[AgentEnableDisable]', '[AgentEdit]',
+ '[AdminTraceConnection]', '[AdminStatisticsConfig]',
+ '[AdminSendMailTrace]', '[AdminRemoteConsole]',
+ '[AdminRegisterUser]', '[AdminRegisterServer]',
+ '[AdminRegisterFromFile]', '[AdminOutgoingMail]',
+ '[AdminOpenUsersView]', '[AdminOpenStatistics]',
+ '[AdminOpenServersView]', '[AdminOpenServerLog]',
+ '[AdminOpenGroupsView]', '[AdminOpenCertLog]', '[AdminOpenCatalog]',
+ '[AdminOpenAddressBook]', '[AdminNewOrgUnit]',
+ '[AdminNewOrganization]', '[Administration]',
+ '[AdminIDFileSetPassword]', '[AdminIDFileExamine]',
+ '[AdminIDFileClearPassword]', '[AdminDatabaseQuotas]',
+ '[AdminDatabaseAnalysis]', '[AdminCrossCertifyKey]',
+ '[AdminCrossCertifyIDFile]', '[AdminCreateGroup]', '[AdminCertify]',
+ '[AddToIMContactList]', '[AddDatabaseRepID]', '[AddDatabase]',
+ '[AddBookmark]'
+ ),
+ 2 => array(
+ 'SELECT', 'FIELD', 'ENVIRONMENT', 'DEFAULT', '@Zone ', '@Yesterday',
+ '@Yes', '@Year', '@Word', '@Wide', '@While', '@Weekday',
+ '@WebDbName', '@ViewTitle', '@ViewShowThisUnread', '@Version',
+ '@VerifyPassword', '@ValidateInternetAddress', '@V4UserAccess',
+ '@V3UserName', '@V2If', '@UserRoles', '@UserPrivileges',
+ '@UserNamesList', '@UserNameLanguage', '@UserName', '@UserAccess',
+ '@UrlQueryString', '@URLOpen', '@URLHistory', '@URLGetHeader',
+ '@URLEncode', '@URLDecode', '@UpperCase', '@UpdateFormulaContext',
+ '@Unique', '@UndeleteDocument', '@Unavailable', '@True', '@Trim',
+ '@Transform', '@ToTime', '@ToNumber', '@Tomorrow', '@Today',
+ '@TimeZoneToText', '@TimeToTextInZone', '@TimeMerge', '@Time',
+ '@ThisValue', '@ThisName', '@TextToTime', '@TextToNumber', '@Text',
+ '@TemplateVersion', '@Tan', '@Sum', '@Success', '@Subset',
+ '@StatusBar', '@Sqrt', '@Soundex', '@Sort', '@Sin', '@Sign',
+ '@SetViewInfo', '@SetTargetFrame', '@SetProfileField',
+ '@SetHTTPHeader', '@SetField', '@SetEnvironment', '@SetDocField',
+ '@Set', '@ServerName', '@ServerAccess', '@Select', '@Second',
+ '@Round', '@RightBack', '@Right', '@Return', '@Responses',
+ '@ReplicaID', '@ReplaceSubstring', '@Replace', '@Repeat',
+ '@RegQueryValue', '@RefreshECL', '@Random', '@ProperCase',
+ '@Prompt', '@Power', '@PostedCommand', '@PolicyIsFieldLocked',
+ '@Platform', '@PickList', '@Pi', '@PasswordQuality', '@Password',
+ '@OrgDir', '@OptimizeMailAddress', '@OpenInNewWindow', '@Now',
+ '@Nothing', '@NoteID', '@No', '@NewLine', '@Narrow', '@NameLookup',
+ '@Name', '@Month', '@Modulo', '@Modified', '@Minute', '@Min',
+ '@MiddleBack', '@Middle', '@Member', '@Max', '@Matches',
+ '@MailSignPreference', '@MailSend', '@MailSavePreference',
+ '@MailEncryptSentPreference', '@MailEncryptSavedPreference',
+ '@MailDbName', '@LowerCase', '@Log', '@Locale', '@Ln', '@Like',
+ '@Length', '@LeftBack', '@Left', '@LDAPServer', '@LaunchApp',
+ '@LanguagePreference', '@Keywords', '@IsVirtualizedDirectory',
+ '@IsValid', '@IsUsingJavaElement', '@IsUnavailable', '@IsTime',
+ '@IsText', '@IsResponseDoc', '@IsNumber', '@IsNull', '@IsNotMember',
+ '@IsNewDoc', '@IsModalHelp', '@IsMember', '@IsExpandable',
+ '@IsError', '@IsEmbeddedInsideWCT', '@IsDocTruncated',
+ '@IsDocBeingSaved', '@IsDocBeingRecalculated', '@IsDocBeingMailed',
+ '@IsDocBeingLoaded', '@IsDocBeingEdited', '@IsDB2', '@IsCategory',
+ '@IsAvailable', '@IsAppInstalled', '@IsAgentEnabled', '@Integer',
+ '@InheritedDocumentUniqueID', '@Implode', '@IfError', '@If',
+ '@Hour', '@HashPassword', '@HardDeleteDocument', '@GetViewInfo',
+ '@GetProfileField', '@GetPortsList', '@GetIMContactListGroupNames',
+ '@GetHTTPHeader', '@GetFocusTable', '@GetField', '@GetDocField',
+ '@GetCurrentTimeZone', '@GetAddressBooks', '@FormLanguage', '@For',
+ '@FontList', '@FloatEq', '@FileDir', '@False', '@Failure',
+ '@Explode', '@Exp', '@Eval', '@Error', '@Environment', '@Ends',
+ '@EnableAlarms', '@Elements', '@EditUserECL', '@EditECL',
+ '@DoWhile', '@Domain', '@DocumentUniqueID', '@DocSiblings',
+ '@DocParentNumber', '@DocOmmittedLength', '@DocNumber', '@DocMark',
+ '@DocLock', '@DocLevel', '@DocLength', '@DocFields',
+ '@DocDescendants', '@DocChildren', '@Do', '@DialogBox',
+ '@DeleteField', '@DeleteDocument', '@DDETerminate', '@DDEPoke',
+ '@DDEInitiate', '@DDEExecute', '@DbTitle', '@DbName', '@DbManager',
+ '@DbLookup', '@DbExists', '@DbCommand', '@DbColumn', '@DB2Schema',
+ '@Day', '@Date', '@Created', '@Count', '@Cos', '@Contains',
+ '@ConfigFile', '@Compare', '@Command', '@ClientType',
+ '@CheckFormulaSyntax', '@CheckAlarms', '@Char', '@Certificate',
+ '@BusinessDays', '@BrowserInfo', '@Begins', '@Author',
+ '@Attachments', '@AttachmentNames', '@AttachmentModifiedTimes',
+ '@AttachmentLengths', '@ATan2', '@ATan', '@ASin', '@Ascii',
+ '@AllDescendants', '@AllChildren', '@All', '@AdminECLIsLocked',
+ '@Adjust', '@AddToFolder', '@ACos', '@Accessed', '@AbstractSimple',
+ '@Abstract', '@Abs'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #800000;',
+ 2 => 'color: #0000FF;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #FF00FF;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF00FF;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000AA;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 2
+ );
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php
new file mode 100644
index 000000000..5272377b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * lotusscript.php
+ * ------------------------
+ * Author: Richard Civil (info@richardcivil.net)
+ * Copyright: (c) 2008 Richard Civil (info@richardcivil.net), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/04/12
+ *
+ * LotusScript language file for GeSHi.
+ *
+ * LotusScript source: IBM Lotus Notes/Domino 8 Designer Help
+ *
+ * CHANGES
+ * -------
+ * 2008/04/12 (1.0.7.22)
+ * - First Release
+ *
+ * TODO (2008/04/12)
+ * -----------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'LotusScript',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array('%REM' => '%END REM'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"' , "|"),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array (
+ 'Yield', 'Year', 'Xor', 'Write', 'With', 'Width', 'While', 'Wend',
+ 'Weekday', 'VarType', 'Variant', 'Val', 'UString', 'UString$',
+ 'UseLSX', 'Use', 'Until', 'Unlock', 'Unicode', 'Uni', 'UChr',
+ 'UChr$', 'UCase', 'UCase$', 'UBound', 'TypeName', 'Type', 'TRUE',
+ 'Trim', 'Trim$', 'Today', 'To', 'TimeValue', 'TimeSerial', 'Timer',
+ 'TimeNumber', 'Time', 'Time$', 'Then', 'Text', 'Tan', 'Tab', 'Sub',
+ 'StrToken', 'StrToken$', 'StrRightBack', 'StrRightBack$',
+ 'StrRight', 'StrRight$', 'StrLeftBack', 'StrLeftBack$', 'StrLeft',
+ 'StrLeft$', 'String', 'String$', 'StrConv', 'StrCompare', 'StrComp',
+ 'Str', 'Str$', 'Stop', 'Step', 'Static', 'Sqr', 'Split', 'Spc',
+ 'Space', 'Space$', 'Sleep', 'Single', 'Sin', 'Shell', 'Shared',
+ 'Sgn', 'SetFileAttr', 'SetAttr', 'Set', 'SendKeys', 'Select',
+ 'Seek', 'Second', 'RTrim', 'RTrim$', 'RSet', 'Round', 'Rnd',
+ 'RmDir', 'RightC', 'RightC$', 'RightBP', 'RightBP$', 'RightB',
+ 'RightB$', 'Right', 'Right$', 'Return', 'Resume', 'Reset',
+ 'Replace', 'Remove', 'Rem', 'ReDim', 'Read', 'Randomize',
+ 'Random', 'Put', 'Public', 'Property', 'Private', 'Print',
+ 'Preserve', 'Pitch', 'PI', 'Output', 'Or', 'Option', 'Open', 'On',
+ 'Oct', 'Oct$', 'NULL', 'Now', 'NOTHING', 'Not', 'NoPitch', 'NoCase',
+ 'Next', 'New', 'Name', 'MsgBox', 'Month', 'Mod', 'MkDir', 'Minute',
+ 'MidC', 'MidC$', 'MidBP', 'MidBP$', 'MidB', 'MidB$', 'Mid', 'Mid$',
+ 'MessageBox', 'Me', 'LTrim', 'LTrim$', 'LSServer', 'LSI_Info',
+ 'LSet', 'Loop', 'Long', 'Log', 'LOF', 'Lock', 'LOC', 'LMBCS',
+ 'ListTag', 'List', 'Line', 'Like', 'Lib', 'Let', 'LenC', 'LenBP',
+ 'LenB', 'Len', 'LeftC', 'LeftC$', 'LeftBP', 'LeftBP$', 'LeftB',
+ 'LeftB$', 'Left', 'Left$', 'LCase', 'LCase$', 'LBound', 'Kill',
+ 'Join', 'IsUnknown', 'IsScalar', 'IsObject', 'IsNumeric', 'IsNull',
+ 'IsList', 'IsEmpty', 'IsElement', 'IsDate', 'IsArray', 'IsA', 'Is',
+ 'Integer', 'Int', 'InStrC', 'InStrBP', 'InStrB', 'InStr', 'InputBP',
+ 'InputBP$', 'InputBox', 'InputBox$', 'InputB', 'InputB$', 'Input',
+ 'Input$', 'In', 'IMSetMode', 'Implode', 'Implode$', 'Imp',
+ 'IMEStatus', 'If', 'Hour', 'Hex', 'Hex$', 'Goto', 'GoSub',
+ 'GetThreadInfo', 'GetFileAttr', 'GetAttr', 'Get', 'Function',
+ 'FullTrim', 'From', 'FreeFile', 'Fraction', 'Format', 'Format$',
+ 'ForAll', 'For', 'Fix', 'FileLen', 'FileDateTime', 'FileCopy',
+ 'FileAttr', 'FALSE', 'Explicit', 'Exp', 'Exit', 'Execute', 'Event',
+ 'Evaluate', 'Error', 'Error$', 'Err', 'Erl', 'Erase', 'Eqv', 'EOF',
+ 'Environ', 'Environ$', 'End', 'ElseIf', 'Else', 'Double', 'DoEvents',
+ 'Do', 'Dir', 'Dir$', 'Dim', 'DestroyLock', 'Delete', 'DefVar',
+ 'DefStr', 'DefSng', 'DefLng', 'DefInt', 'DefDbl', 'DefCur',
+ 'DefByte', 'DefBool', 'Declare', 'Day', 'DateValue', 'DateSerial',
+ 'DateNumber', 'Date', 'Date$', 'DataType', 'CVDate', 'CVar',
+ 'Currency', 'CurDrive', 'CurDrive$', 'CurDir', 'CurDir$', 'CStr',
+ 'CSng', 'CreateLock', 'Cos', 'Const', 'Compare', 'Command',
+ 'Command$', 'CodeUnlock', 'CodeLockCheck', 'CodeLock', 'Close',
+ 'CLng', 'Class', 'CInt', 'Chr', 'Chr$', 'ChDrive', 'ChDir', 'CDbl',
+ 'CDat', 'CCur', 'CByte', 'CBool', 'Case', 'Call', 'ByVal', 'Byte',
+ 'Boolean', 'Bind', 'Binary', 'Bin', 'Bin$', 'Beep', 'Base', 'Atn2',
+ 'Atn', 'ASin', 'Asc', 'As', 'ArrayUnique', 'ArrayReplace',
+ 'ArrayGetIndex', 'ArrayAppend', 'Append', 'AppActivate', 'Any',
+ 'And', 'Alias', 'ActivateApp', 'ACos', 'Access', 'Abs', '%Include',
+ '%If', '%END', '%ElseIf', '%Else'
+ ),
+ 2 => array (
+ 'NotesXSLTransformer', 'NotesXMLProcessor', 'NotesViewNavigator',
+ 'NotesViewEntryCollection', 'NotesViewEntry', 'NotesViewColumn',
+ 'NotesView', 'NotesUIWorkspace', 'NotesUIView', 'NotesUIScheduler',
+ 'NotesUIDocument', 'NotesUIDatabase', 'NotesTimer', 'NotesStream',
+ 'NotesSession', 'NotesSAXParser', 'NotesSAXException',
+ 'NotesSAXAttributeList', 'NotesRichTextTable', 'NotesRichTextTab',
+ 'NotesRichTextStyle', 'NotesRichTextSection', 'NotesRichTextRange',
+ 'NotesRichTextParagraphStyle', 'NotesRichTextNavigator',
+ 'NotesRichTextItem', 'NotesRichTextDocLink',
+ 'NotesReplicationEntry', 'NotesReplication', 'NotesRegistration',
+ 'NotesOutlineEntry', 'NotesOutline', 'NotesNoteCollection',
+ 'NotesNewsLetter', 'NotesName', 'NotesMIMEHeader',
+ 'NotesMIMEEntity', 'NotesLog', 'NotesItem', 'NotesInternational',
+ 'NotesForm', 'NotesEmbeddedObject', 'NotesDXLImporter',
+ 'NotesDXLExporter', 'NotesDOMXMLDeclNode', 'NotesDOMTextNode',
+ 'NotesDOMProcessingInstructionNode', 'NotesDOMParser',
+ 'NotesDOMNotationNode', 'NotesDOMNodeList', 'NotesDOMNode',
+ 'NotesDOMNamedNodeMap', 'NotesDOMEntityReferenceNode',
+ 'NotesDOMEntityNode', 'NotesDOMElementNode',
+ 'NotesDOMDocumentTypeNode', 'NotesDOMDocumentNode',
+ 'NotesDOMDocumentFragmentNode', 'NotesDOMCommentNode',
+ 'NotesDOMCharacterDataNote', 'NotesDOMCDATASectionNode',
+ 'NotesDOMAttributeNode', 'NotesDocumentCollection', 'NotesDocument',
+ 'NotesDbDirectory', 'NotesDateTime', 'NotesDateRange',
+ 'NotesDatabase', 'NotesColorObject', 'NotesAgent',
+ 'NotesAdministrationProcess', 'NotesACLEntry', 'NotesACL',
+ 'Navigator', 'Field', 'Button'
+ )
+ ) ,
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #0000EE;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF00FF;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000AA;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #006600;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 2
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php
new file mode 100644
index 000000000..1a5b0726e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php
@@ -0,0 +1,387 @@
+<?php
+/*************************************************************************************
+ * lscript.php
+ * ---------
+ * Author: Arendedwinter (admin@arendedwinter.com)
+ * Copyright: (c) 2008 Beau McGuigan (http://www.arendedwinter.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 15/11/2008
+ *
+ * Lightwave Script language file for GeSHi.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'LScript',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ //Yes, I'm aware these are out of order,
+ //I had to rearrange and couldn't be bothered changing the numbers...
+ 7 => array(
+ '@data', '@define', '@else', '@end', '@fpdepth', '@if', '@include',
+ '@insert', '@library', '@localipc', '@name', '@save', '@script',
+ '@sequence', '@version', '@warnings'
+ ),
+ 1 => array(
+ 'break', 'case', 'continue', 'else', 'end', 'false', 'for',
+ 'foreach', 'if', 'return', 'switch', 'true', 'while',
+ ),
+ 3 => array(
+ 'active', 'alertlevel', 'alpha', 'alphaprefix', 'animfilename', 'autokeycreate',
+ 'backdroptype', 'blue', 'boxthreshold', 'button',
+ 'channelsvisible', 'childrenvisible', 'compfg', 'compbg', 'compfgalpha',
+ 'coneangles', 'cosine', 'count', 'ctl', 'curFilename', 'curFrame',
+ 'currenttime', 'curTime', 'curType',
+ 'depth', 'diffshade', 'diffuse', 'dimensions', 'displayopts', 'dynamicupdate',
+ 'end', 'eta',
+ 'filename', 'flags', 'fogtype', 'fps', 'frame', 'frameend', 'frameheight',
+ 'framestart', 'framestep', 'framewidth',
+ 'generalopts', 'genus', 'geometry', 'gNorm', 'goal', 'green',
+ 'h', 'hasAlpha', 'height',
+ 'id', 'innerlimit', 'isColor',
+ 'keyCount', 'keys',
+ 'limiteregion', 'locked', 'luminous',
+ 'maxsamplesperpixel', 'minsamplesperpixel', 'mirror', 'motionx', 'motiony',
+ 'name', 'newFilename', 'newFrame', 'newTime', 'newType', 'null', 'numthreads',
+ 'objID', 'oPos', 'outerlimit', 'oXfrm',
+ 'parent', 'pixel', 'pixelaspect', 'point', 'points', 'pointcount', 'polNum',
+ 'polycount', 'polygon', 'polygons', 'postBehavior', 'preBehavior', 'previewend',
+ 'previewstart', 'previewstep',
+ 'range', 'rawblue', 'rawgreen', 'rawred', 'rayLength', 'raySource', 'red',
+ 'reflectblue', 'reflectgreen', 'reflectred', 'recursiondepth', 'renderend',
+ 'renderopts', 'renderstart', 'renderstep', 'rendertype', 'restlength',
+ 'rgbprefix', 'roughness',
+ 'selected', 'setColor', 'setPattern', 'shading', 'shadow', 'shadows',
+ 'shadowtype', 'size', 'source', 'special', 'specshade', 'specular',
+ 'spotsize', 'start', 'sx', 'sy', 'sz',
+ 'target', 'totallayers', 'totalpoints', 'totalpolygons', 'trans', 'transparency',
+ 'type',
+ 'value', 'view', 'visible', 'visibility',
+ 'w', 'width', 'wNorm', 'wPos', 'wXfrm',
+ 'x', 'xoffset',
+ 'y', 'yoffset',
+ 'z'
+ ),
+ 4 => array(
+ 'addLayer', 'addParticle', 'alphaspot', 'ambient', 'asAsc', 'asBin',
+ 'asInt', 'asNum', 'asStr', 'asVec', 'attach', 'axislocks',
+ 'backdropColor', 'backdropRay', 'backdropSqueeze', 'bone', 'blurLength',
+ 'close', 'color', 'contains', 'copy', 'createKey',
+ 'deleteKey', 'detach', 'drawCircle', 'drawLine', 'drawPoint', 'drawText',
+ 'drawTriangle',
+ 'edit', 'eof', 'event',
+ 'firstChannel', 'firstLayer', 'firstSelect', 'focalLength', 'fogColor',
+ 'fogMaxAmount', 'fogMaxDist', 'fogMinAmount', 'fogMinDist',
+ 'fovAngles', 'fStop', 'firstChild', 'focalDistance',
+ 'get', 'getChannelGroup', 'getEnvelope', 'getForward', 'getKeyBias',
+ 'getKeyContinuity', 'getKeyCurve', 'getKeyHermite', 'getKeyTension',
+ 'getKeyTime', 'getKeyValue', 'getParticle', 'getPivot', 'getPosition',
+ 'getRight', 'getRotation', 'getSelect', 'getScaling', 'getTag', 'getTexture',
+ 'getUp', 'getValue', 'getWorldPosition', 'getWorldForward', 'getWorldRight',
+ 'getWorldRotation', 'getWorldUp', 'globalBlur', 'globalMask', 'globalResolution',
+ 'hasCCEnd', 'hasCCStart',
+ 'illuminate', 'indexOf', 'isAscii', 'isAlnum', 'isAlpha', 'isBone',
+ 'isCamera', 'isChannel', 'isChannelGroup', 'isCntrl', 'isCurve', 'isDigit',
+ 'isEnvelope', 'isImage', 'isInt', 'isLight', 'isLower', 'isMapped', 'isMesh',
+ 'isNil', 'isNum', 'IsOpen', 'isOriginal', 'isPrint', 'isPunct', 'isScene',
+ 'isSpace', 'isStr', 'isUpper', 'isValid', 'isVMap', 'isVec', 'isXDigit',
+ 'keyExists',
+ 'layer', 'layerName', 'layerVisible', 'limits', 'line', 'linecount', 'load', 'luma',
+ 'next', 'nextLayer', 'nextSelect', 'nextChannel', 'nextChild', 'nl',
+ 'offset', 'open',
+ 'pack', 'param', 'parse', 'paste', 'persist', 'polygonCount', 'position',
+ 'rayCast', 'rayTrace', 'read', 'readByte', 'readInt', 'readNumber',
+ 'readDouble', 'readShort', 'readString', 'readVector', 'reduce',
+ 'remParticle', 'renderCamera', 'reopen', 'replace', 'reset', 'restParam',
+ 'rewind', 'rgb', 'rgbambient', 'rgbcolor', 'rgbspot',
+ 'save', 'schemaPosition', 'select', 'set', 'setChannelGroup', 'setKeyBias',
+ 'setKeyContinuity', 'setKeyCurve',
+ 'setKeyHermite', 'setKeyTension', 'setKeyValue', 'setParticle', 'setPoints',
+ 'setTag', 'setValue', 'server', 'serverFlags', 'sortA', 'sortD', 'surface',
+ 'trunc',
+ 'write', 'writeln', 'writeByte', 'writeData', 'writeNumber', 'writeDouble',
+ 'writeShort', 'writeString', 'writeVector',
+ 'vertex', 'vertexCount',
+ 'zoomFactor'
+ ),
+ 2 => array(
+ 'abs', 'acos', 'angle', 'append', 'ascii', 'asin', 'atan',
+ 'binary',
+ 'ceil', 'center', 'chdir', 'clearimage', 'cloned', 'comringattach',
+ 'comringdecode', 'comringdetach', 'comringencode', 'comringmsg', 'cos',
+ 'cosh', 'cot', 'cross2d', 'cross3d', 'csc', 'ctlstring', 'ctlinteger',
+ 'ctlnumber', 'ctlvector', 'ctldistance', 'ctlchoice', 'ctltext',
+ 'ctlcolor', 'ctlsurface', 'ctlfont', 'ctlpopup', 'ctledit', 'ctlpercent',
+ 'ctlangle', 'ctlrgb', 'ctlhsv', 'ctlcheckbox', 'ctlstate', 'ctlfilename',
+ 'ctlbutton', 'ctllistbox', 'ctlslider', 'ctlminislider', 'ctlsep', 'ctlimage',
+ 'ctltab', 'ctlallitems', 'ctlmeshitems', 'ctlcameraitems', 'ctllightitems',
+ 'ctlboneitems', 'ctlimageitems', 'ctlchannel', 'ctlviewport', 'Control_Management',
+ 'ctlpage', 'ctlgroup', 'ctlposition', 'ctlactive', 'ctlvisible', 'ctlalign',
+ 'ctlrefresh', 'ctlmenu', 'ctlinfo',
+ 'date', 'debug', 'deg', 'dot2d', 'dot3d', 'drawborder', 'drawbox', 'drawcircle',
+ 'drawelipse', 'drawerase', 'drawfillcircle', 'drawfillelipse', 'drawline',
+ 'drawpixel', 'drawtext', 'drawtextwidth', 'drawtextheight', 'dump',
+ 'error', 'exp', 'expose', 'extent',
+ 'fac', 'filecrc', 'filedelete', 'fileexists', 'filefind', 'filerename',
+ 'filestat', 'floor', 'format', 'frac', 'fullpath',
+ 'gamma', 'getdir', 'getenv', 'getfile', 'getfirstitem', 'getsep', 'getvalue',
+ 'globalrecall', 'globalstore',
+ 'hash', 'hex', 'hostBuild', 'hostVersion', 'hypot',
+ 'info', 'integer',
+ 'library', 'licenseId', 'lscriptVersion', 'load', 'loadimage', 'log', 'log10',
+ 'matchdirs', 'matchfiles', 'max', 'min', 'mkdir', 'mod', 'monend', 'moninit', 'monstep',
+ 'nil', 'normalize', 'number',
+ 'octal', 'overlayglyph',
+ 'parse', 'platform', 'pow',
+ 'rad', 'random', 'randu', 'range', 'read', 'readdouble', 'readInt', 'readNumber',
+ 'readShort', 'recall', 'regexp', 'reqabort', 'reqbegin', 'reqend', 'reqisopen',
+ 'reqkeyboard', 'reqopen', 'reqposition', 'reqpost', 'reqredraw',
+ 'reqsize', 'reqresize', 'requpdate', 'rmdir', 'round', 'runningUnder',
+ 'save', 'sec', 'select', 'selector', 'setdesc', 'setvalue', 'sin', 'sinh', 'size',
+ 'sizeof', 'sleep', 'spawn', 'split', 'sqrt', 'step', 'store', 'string', 'strleft',
+ 'strlower', 'strright', 'strsub', 'strupper',
+ 'tan', 'tanh', 'targetobject', 'terminate', 'text', 'time',
+ 'wait', 'warn', 'when', 'write', 'writeDouble', 'writeInt', 'writeNumber', 'writeShort',
+ 'var', 'vector', 'visitnodes', 'vmag',
+ ),
+ 5 => array(
+ 'addcurve', 'addpoint', 'addpolygon', 'addquad', 'addtriangle', 'alignpols',
+ 'autoflex', 'axisdrill',
+ 'bend', 'bevel', 'boolean', 'boundingbox',
+ 'changepart', 'changesurface', 'close', 'closeall', 'cmdseq', 'copy', 'copysurface',
+ 'createsurface', 'cut',
+ 'deformregion', 'delete',
+ 'editbegin', 'editend', 'exit', 'extrude',
+ 'fixedflex', 'flip', 'fontclear', 'fontcount', 'fontindex', 'fontload',
+ 'fontname', 'fracsubdivide', 'freezecurves',
+ 'getdefaultsurface',
+ 'jitter',
+ 'lathe', 'layerName', 'layerVisible', 'lyrbg', 'lyrdata', 'lyrempty', 'lyremptybg',
+ 'lyremptyfg', 'lyrfg', 'lyrsetbg', 'lyrsetfg', 'lyrswap',
+ 'magnet', 'make4patch', 'makeball', 'makebox', 'makecone', 'makedisc',
+ 'maketesball', 'maketext', 'mergepoints', 'mergepols', 'meshedit', 'mirror',
+ 'morphpols', 'move',
+ 'new', 'nextsurface',
+ 'paste', 'pathclone', 'pathextrude', 'pixel', 'pointcount', 'pointinfo',
+ 'pointmove', 'pole', 'polycount', 'polyinfo', 'polynormal', 'polypointcount',
+ 'polypoints', 'polysurface',
+ 'quantize',
+ 'railclone', 'railextrude', 'redo', 'removepols', 'rempoint', 'rempoly',
+ 'renamesurface', 'revert', 'rotate',
+ 'scale', 'selhide', 'selinvert', 'selmode', 'selpoint', 'selpolygon', 'selunhide',
+ 'selectvmap', 'setlayername', 'setobject', 'setpivot', 'setsurface', 'shapebevel',
+ 'shear', 'skinpols', 'smooth', 'smoothcurves', 'smoothscale', 'smoothshift',
+ 'soliddrill', 'splitpols', 'subdivide', 'swaphidden',
+ 'taper', 'triple', 'toggleCCend', 'toggleCCstart', 'togglepatches', 'twist',
+ 'undo', 'undogroupend', 'undogroupbegin', 'unifypols', 'unweld',
+ 'vortex',
+ 'weldaverage', 'weldpoints'
+ ),
+ 6 => array(
+ 'About', 'AboutOpenGL', 'AdaptiveSampling', 'AdaptiveThreshold',
+ 'AddAreaLight', 'AddBone', 'AddButton', 'AddCamera', 'AddChildBone',
+ 'AddDistantLight', 'AddEnvelope', 'AddLinearLight', 'AddNull',
+ 'AddPartigon', 'AddPlugins', 'AddPointLight', 'AddPosition',
+ 'AddRotation', 'AddScale', 'AddSpotlight', 'AddToSelection',
+ 'AdjustRegionTool', 'AffectCaustics', 'AffectDiffuse', 'AffectOpenGL',
+ 'AffectSpecular', 'AlertLevel', 'AmbientColor', 'AmbientIntensity',
+ 'Antialiasing', 'ApertureHeight', 'ApplyServer', 'AreaLight',
+ 'AutoConfirm', 'AutoFrameAdvance', 'AutoKey',
+ 'BackdropColor', 'BackView', 'BController', 'BLimits', 'BLurLength', 'BoneActive',
+ 'BoneFalloffType', 'BoneJointComp', 'BoneJointCompAmounts', 'BoneJointCompParent',
+ 'BoneLimitedRange', 'BoneMaxRange', 'BoneMinRange', 'BoneMuscleFlex',
+ 'BoneMuscleFlexAmounts', 'BoneMuscleFlexParent', 'BoneNormalization',
+ 'BoneRestLength', 'BoneRestPosition', 'BoneRestRotation', 'BoneSource',
+ 'BoneStrength', 'BoneStrengthMultiply', 'BoneWeightMapName', 'BoneWeightMapOnly',
+ 'BoneWeightShade', 'BoneXRay', 'BottomView', 'BoundingBoxThreshold',
+ 'BStiffness',
+ 'CacheCaustics', 'CacheRadiosity', 'CacheShadowMap',
+ 'CameraMask', 'CameraView', 'CameraZoomTool', 'CastShadow', 'CausticIntensity',
+ 'CenterItem', 'CenterMouse', 'ChangeTool', 'ClearAllBones', 'ClearAllCameras',
+ 'ClearAllLights', 'ClearAllObjects', 'ClearAudio', 'ClearScene', 'ClearSelected',
+ 'Clone', 'CommandHistory', 'CommandInput', 'Compositing', 'ConeAngleTool',
+ 'ContentDirectory', 'CreateKey',
+ 'DecreaseGrid', 'DeleteKey', 'DepthBufferAA', 'DepthOfField', 'DisplayOptions',
+ 'DistantLight', 'DrawAntialiasing', 'DrawBones', 'DrawChildBones', 'DynamicUpdate',
+ 'EditBones', 'EditCameras', 'EditKeys', 'EditLights',
+ 'EditMenus', 'EditObjects', 'EditPlugins', 'EditServer', 'EnableCaustics',
+ 'EnableDeformations', 'EnableIK', 'EnableLensFlares', 'EnableRadiosity', 'EnableServer',
+ 'EnableShadowMaps', 'EnableVIPER', 'EnableVolumetricLights', 'EnableXH',
+ 'EnableYP', 'EnableZB', 'EnahancedAA', 'ExcludeLight', 'ExcludeObject',
+ 'EyeSeparation',
+ 'FasterBones', 'FirstFrame', 'FirstItem', 'FitAll', 'FitSelected',
+ 'FlareIntensity', 'FlareOptions', 'FocalDistance', 'FogColor', 'FogMaxAmount',
+ 'FogMaxDistance', 'FogMinAmount', 'FogMinDistance', 'FogType', 'FractionalFrames',
+ 'FrameSize', 'FramesPerSecond', 'FrameStep', 'FreePreview', 'FrontView', 'FullTimeIK',
+ 'GeneralOptions', 'Generics', 'GlobalApertureHeight', 'GlobalBlurLength',
+ 'GlobalFrameSize', 'GlobalIllumination', 'GlobalMaskPosition', 'GlobalMotionBlur',
+ 'GlobalParticleBlur', 'GlobalPixelAspect', 'GlobalResolutionMulitplier', 'GoalItem',
+ 'GoalStrength', 'GoToFrame', 'GradientBackdrop', 'GraphEditor', 'GridSize', 'GroundColor',
+ 'HController', 'HideToolbar', 'HideWindows', 'HLimits', 'HStiffness',
+ 'ImageEditor', 'ImageProcessing', 'IncludeLight', 'IncludeObject', 'IncreaseGrid',
+ 'IndirectBounces', 'Item_SetWindowPos', 'ItemActive', 'ItemColor', 'ItemLock',
+ 'ItemProperties', 'ItemVisibilty',
+ 'KeepGoalWithinReach',
+ 'LastFrame', 'LastItem', 'LastPluginInterface', 'Layout_SetWindowPos',
+ 'Layout_SetWindowSize', 'LeftView', 'LensFlare', 'LensFStop', 'LightColor',
+ 'LightConeAngle', 'LightEdgeAngle', 'LightFalloffType', 'LightIntensity',
+ 'LightIntensityTool', 'LightQuality', 'LightRange', 'LightView', 'LimitB',
+ 'LimitDynamicRange', 'LimitedRegion', 'LimitH', 'LimitP', 'LinearLight',
+ 'LoadAudio', 'LoadFromScene', 'LoadMotion', 'LoadObject', 'LoadObjectLayer',
+ 'LoadPreview', 'LoadScene', 'LocalCoordinateSystem',
+ 'MakePreview', 'MaskColor', 'MaskPosition', 'MasterPlugins', 'MatchGoalOrientation',
+ 'MatteColor', 'MatteObject', 'MetaballResolution', 'Model', 'MorphAmount',
+ 'MorphAmountTool', 'MorphMTSE', 'MorphSurfaces', 'MorphTarget', 'MotionBlur',
+ 'MotionBlurDOFPreview', 'MotionOptions', 'MovePathTool', 'MovePivotTool', 'MoveTool',
+ 'NadirColor', 'NetRender', 'NextFrame', 'NextItem', 'NextKey', 'NextSibling',
+ 'NextViewLayout', 'NoiseReduction', 'Numeric',
+ 'ObjectDissolve',
+ 'ParentCoordinateSystem', 'ParentInPlace', 'ParentItem',
+ 'ParticleBlur', 'PathAlignLookAhead', 'PathAlignMaxLookSteps', 'PathAlignReliableDist',
+ 'Pause', 'PController', 'PerspectiveView',
+ 'PivotPosition', 'PivotRotation', 'PixelAspect', 'PlayAudio', 'PlayBackward',
+ 'PlayForward', 'PlayPreview', 'PLimits', 'PointLight', 'PolygonEdgeColor',
+ 'PolygonEdgeFlags', 'PolygonEdgeThickness', 'PolygonEdgeZScale', 'PolygonSize',
+ 'Position', 'Presets', 'PreviewFirstFrame', 'PreviewFrameStep', 'PreviewLastFrame',
+ 'PreviewOptions', 'PreviousFrame', 'PreviousItem', 'PreviousKey', 'PreviousSibling',
+ 'PreviousViewLayout', 'PStiffness',
+ 'Quit',
+ 'RadiosityIntensity', 'RadiosityTolerance', 'RadiosityType', 'RayRecursionLimit',
+ 'RayTraceReflection', 'RayTraceShadows',
+ 'RayTraceTransparency', 'ReceiveShadow', 'RecentContentDirs', 'RecentScenes',
+ 'ReconstructionFilter', 'RecordMaxAngles', 'RecordMinAngles', 'RecordPivotRotation',
+ 'RecordRestPosition', 'Redraw', 'RedrawNow', 'Refresh', 'RefreshNow', 'RegionPosition',
+ 'RemoveEnvelope', 'RemoveFromSelection', 'RemoveServer', 'Rename', 'RenderFrame',
+ 'RenderOptions', 'RenderScene', 'RenderSelected', 'RenderThreads',
+ 'ReplaceObjectLayer', 'ReplaceWithNull', 'ReplaceWithObject', 'Reset',
+ 'ResolutionMultiplier', 'RestLengthTool', 'RightView', 'RotatePivotTool',
+ 'RotateTool', 'Rotation',
+ 'SaveAllObjects', 'SaveCommandList', 'SaveCommandMessages',
+ 'SaveEndomorph', 'SaveLight', 'SaveLWSC1', 'SaveMotion', 'SaveObject', 'SaveObjectCopy',
+ 'SavePreview', 'SaveScene', 'SaveSceneAs', 'SaveSceneCopy', 'SaveTransformed',
+ 'SaveViewLayout', 'Scale', 'Scene_SetWindowPos', 'Scene_SetWindowSize',
+ 'SceneEditor', 'SchematicPosition', 'SchematicView', 'SelectAllBones',
+ 'SelectAllCameras', 'SelectAllLights', 'SelectAllObjects', 'SelectByName',
+ 'SelectChild', 'SelectItem', 'SelectParent', 'SelfShadow', 'ShadowColor',
+ 'ShadowExclusion', 'ShadowMapAngle', 'ShadowMapFitCone', 'ShadowMapFuzziness',
+ 'ShadowMapSize', 'ShadowType', 'ShowCages', 'ShowFieldChart', 'ShowHandles',
+ 'ShowIKChains', 'ShowMotionPaths', 'ShowSafeAreas', 'ShowTargetLines',
+ 'ShrinkEdgesWithDistance', 'SingleView', 'SizeTool', 'SkelegonsToBones', 'SkyColor',
+ 'Spotlight', 'SquashTool', 'Statistics', 'StatusMsg', 'Stereoscopic', 'StretchTool',
+ 'SubdivisionOrder', 'SubPatchLevel', 'SurfaceEditor', 'Synchronize',
+ 'TargetItem', 'TopView',
+ 'UnaffectedByFog', 'UnaffectedByIK', 'Undo', 'UnseenByAlphaChannel', 'UnseenByCamera',
+ 'UnseenByRays', 'UseGlobalResolution', 'UseGlobalBlur', 'UseGlobalMask',
+ 'UseMorphedPositions',
+ 'ViewLayout', 'VIPER', 'VolumetricLighting',
+ 'VolumetricLightingOptions', 'VolumetricRadiosity', 'Volumetrics',
+ 'WorldCoordinateSystem',
+ 'XYView', 'XZView',
+ 'ZenithColor', 'ZoomFactor', 'ZoomIn', 'ZoomInX2', 'ZoomOut', 'ZoomOutX2', 'ZYView',
+ 'Camera', 'Channel', 'ChannelGroup', 'Envelope', 'File', 'Glyph', 'Icon', 'Image',
+ 'Light', 'Mesh', 'Scene', 'Surface', 'VMap'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '<', '>', '+', '-', '*', '/', '!', '%', '&', '@'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #FF6820; font-weight: bold;', //LS_COMMANDS
+ 3 => 'color: #007F7F; font-weight: bold;', //LS_MEMBERS
+ 4 => 'color: #800080; font-weight: bold;', //LS_METHODS
+ 5 => 'color: #51BD95; font-weight: bold;', //LS_MODELER
+ 6 => 'color: #416F85; font-weight: bold;', //LS_GENERAL
+ 7 => 'color: #C92929; font-weight: bold;' //LS_COMMANDS (cont)
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #7F7F7F;',
+ 'MULTI' => 'color: #7F7F7F;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #0040A0;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #00C800;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #6953AC;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #0040A0;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 3 => array(
+ 'DISALLOWED_BEFORE' => '(?<=\.)'
+ ),
+ 4 => array(
+ 'DISALLOWED_BEFORE' => '(?<=\.)'
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php
new file mode 100644
index 000000000..0b62ee8b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php
@@ -0,0 +1,898 @@
+<?php
+/*************************************************************************************
+ * lsl2.php
+ * --------
+ * Author: William Fry (william.fry@nyu.edu)
+ * Copyright: (c) 2009 William Fry
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/02/04
+ *
+ * Linden Scripting Language (LSL2) language file for GeSHi.
+ *
+ * Data derived and validated against the following:
+ * http://wiki.secondlife.com/wiki/LSL_Portal
+ * http://www.lslwiki.net/lslwiki/wakka.php?wakka=HomePage
+ * http://rpgstats.com/wiki/index.php?title=Main_Page
+ *
+ * CHANGES
+ * -------
+ * 2009/02/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2009/02/05)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'LSL2',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array( // flow control
+ 'do',
+ 'else',
+ 'for',
+ 'if',
+ 'jump',
+ 'return',
+ 'state',
+ 'while',
+ ),
+ 2 => array( // manifest constants
+ 'ACTIVE',
+ 'AGENT',
+ 'AGENT_ALWAYS_RUN',
+ 'AGENT_ATTACHMENTS',
+ 'AGENT_AWAY',
+ 'AGENT_BUSY',
+ 'AGENT_CROUCHING',
+ 'AGENT_FLYING',
+ 'AGENT_IN_AIR',
+ 'AGENT_MOUSELOOK',
+ 'AGENT_ON_OBJECT',
+ 'AGENT_SCRIPTED',
+ 'AGENT_SITTING',
+ 'AGENT_TYPING',
+ 'AGENT_WALKING',
+ 'ALL_SIDES',
+ 'ANIM_ON',
+ 'ATTACH_BACK',
+ 'ATTACH_BELLY',
+ 'ATTACH_CHEST',
+ 'ATTACH_CHIN',
+ 'ATTACH_HEAD',
+ 'ATTACH_HUD_BOTTOM',
+ 'ATTACH_HUD_BOTTOM_LEFT',
+ 'ATTACH_HUD_BOTTOM_RIGHT',
+ 'ATTACH_HUD_CENTER_1',
+ 'ATTACH_HUD_CENTER_2',
+ 'ATTACH_HUD_TOP_CENTER',
+ 'ATTACH_HUD_TOP_LEFT',
+ 'ATTACH_HUD_TOP_RIGHT',
+ 'ATTACH_LEAR',
+ 'ATTACH_LEYE',
+ 'ATTACH_LFOOT',
+ 'ATTACH_LHAND',
+ 'ATTACH_LHIP',
+ 'ATTACH_LLARM',
+ 'ATTACH_LLLEG',
+ 'ATTACH_LPEC',
+ 'ATTACH_LSHOULDER',
+ 'ATTACH_LUARM',
+ 'ATTACH_LULEG',
+ 'ATTACH_MOUTH',
+ 'ATTACH_NOSE',
+ 'ATTACH_PELVIS',
+ 'ATTACH_REAR',
+ 'ATTACH_REYE',
+ 'ATTACH_RFOOT',
+ 'ATTACH_RHAND',
+ 'ATTACH_RHIP',
+ 'ATTACH_RLARM',
+ 'ATTACH_RLLEG',
+ 'ATTACH_RPEC',
+ 'ATTACH_RSHOULDER',
+ 'ATTACH_RUARM',
+ 'ATTACH_RULEG',
+ 'CAMERA_ACTIVE',
+ 'CAMERA_BEHINDNESS_ANGLE',
+ 'CAMERA_BEHINDNESS_LAG',
+ 'CAMERA_DISTANCE',
+ 'CAMERA_FOCUS',
+ 'CAMERA_FOCUS_LAG',
+ 'CAMERA_FOCUS_LOCKED',
+ 'CAMERA_FOCUS_OFFSET',
+ 'CAMERA_FOCUS_THRESHOLD',
+ 'CAMERA_PITCH',
+ 'CAMERA_POSITION',
+ 'CAMERA_POSITION_LAG',
+ 'CAMERA_POSITION_LOCKED',
+ 'CAMERA_POSITION_THRESHOLD',
+ 'CHANGED_ALLOWED_DROP',
+ 'CHANGED_COLOR',
+ 'CHANGED_INVENTORY',
+ 'CHANGED_LINK',
+ 'CHANGED_OWNER',
+ 'CHANGED_REGION',
+ 'CHANGED_SCALE',
+ 'CHANGED_SHAPE',
+ 'CHANGED_TELEPORT',
+ 'CHANGED_TEXTURE',
+ 'CLICK_ACTION_NONE',
+ 'CLICK_ACTION_OPEN',
+ 'CLICK_ACTION_OPEN_MEDIA',
+ 'CLICK_ACTION_PAY',
+ 'CLICK_ACTION_SIT',
+ 'CLICK_ACTION_TOUCH',
+ 'CONTROL_BACK',
+ 'CONTROL_DOWN',
+ 'CONTROL_FWD',
+ 'CONTROL_LBUTTON',
+ 'CONTROL_LEFT',
+ 'CONTROL_ML_LBUTTON',
+ 'CONTROL_RIGHT',
+ 'CONTROL_ROT_LEFT',
+ 'CONTROL_ROT_RIGHT',
+ 'CONTROL_UP',
+ 'DATA_BORN',
+ 'DATA_NAME',
+ 'DATA_ONLINE',
+ 'DATA_PAYINFO',
+ 'DATA_RATING',
+ 'DATA_SIM_POS',
+ 'DATA_SIM_RATING',
+ 'DATA_SIM_STATUS',
+ 'DEBUG_CHANNEL',
+ 'DEG_TO_RAD',
+ 'EOF',
+ 'FALSE',
+ 'HTTP_BODY_MAXLENGTH',
+ 'HTTP_BODY_TRUNCATED',
+ 'HTTP_METHOD',
+ 'HTTP_MIMETYPE',
+ 'HTTP_VERIFY_CERT',
+ 'INVENTORY_ALL',
+ 'INVENTORY_ANIMATION',
+ 'INVENTORY_BODYPART',
+ 'INVENTORY_CLOTHING',
+ 'INVENTORY_GESTURE',
+ 'INVENTORY_LANDMARK',
+ 'INVENTORY_NONE',
+ 'INVENTORY_NOTECARD',
+ 'INVENTORY_OBJECT',
+ 'INVENTORY_SCRIPT',
+ 'INVENTORY_SOUND',
+ 'INVENTORY_TEXTURE',
+ 'LAND_LEVEL',
+ 'LAND_LOWER',
+ 'LAND_NOISE',
+ 'LAND_RAISE',
+ 'LAND_REVERT',
+ 'LAND_SMOOTH',
+ 'LINK_ALL_CHILDREN',
+ 'LINK_ALL_OTHERS',
+ 'LINK_ROOT',
+ 'LINK_SET',
+ 'LINK_THIS',
+ 'LIST_STAT_GEOMETRIC_MEAN',
+ 'LIST_STAT_MAX',
+ 'LIST_STAT_MEAN',
+ 'LIST_STAT_MEDIAN',
+ 'LIST_STAT_MIN',
+ 'LIST_STAT_NUM_COUNT',
+ 'LIST_STAT_RANGE',
+ 'LIST_STAT_STD_DEV',
+ 'LIST_STAT_SUM',
+ 'LIST_STAT_SUM_SQUARES',
+ 'LOOP',
+ 'MASK_BASE',
+ 'MASK_EVERYONE',
+ 'MASK_GROUP',
+ 'MASK_NEXT',
+ 'MASK_OWNER',
+ 'NULL_KEY',
+ 'OBJECT_CREATOR',
+ 'OBJECT_DESC',
+ 'OBJECT_GROUP',
+ 'OBJECT_NAME',
+ 'OBJECT_OWNER',
+ 'OBJECT_POS',
+ 'OBJECT_ROT',
+ 'OBJECT_UNKNOWN_DETAIL',
+ 'OBJECT_VELOCITY',
+ 'PARCEL_DETAILS_AREA',
+ 'PARCEL_DETAILS_DESC',
+ 'PARCEL_DETAILS_GROUP',
+ 'PARCEL_DETAILS_NAME',
+ 'PARCEL_DETAILS_OWNER',
+ 'PARCEL_FLAG_ALLOW_ALL_OBJECT_ENTRY',
+ 'PARCEL_FLAG_ALLOW_CREATE_GROUP_OBJECTS',
+ 'PARCEL_FLAG_ALLOW_CREATE_OBJECTS',
+ 'PARCEL_FLAG_ALLOW_DAMAGE',
+ 'PARCEL_FLAG_ALLOW_FLY',
+ 'PARCEL_FLAG_ALLOW_GROUP_OBJECT_ENTRY',
+ 'PARCEL_FLAG_ALLOW_GROUP_SCRIPTS',
+ 'PARCEL_FLAG_ALLOW_LANDMARK',
+ 'PARCEL_FLAG_ALLOW_SCRIPTS',
+ 'PARCEL_FLAG_ALLOW_TERRAFORM',
+ 'PARCEL_FLAG_LOCAL_SOUND_ONLY',
+ 'PARCEL_FLAG_RESTRICT_PUSHOBJECT',
+ 'PARCEL_FLAG_USE_ACCESS_GROUP',
+ 'PARCEL_FLAG_USE_ACCESS_LIST',
+ 'PARCEL_FLAG_USE_BAN_LIST',
+ 'PARCEL_FLAG_USE_LAND_PASS_LIST',
+ 'PARCEL_MEDIA_COMMAND_AGENT',
+ 'PARCEL_MEDIA_COMMAND_AUTO_ALIGN',
+ 'PARCEL_MEDIA_COMMAND_DESC',
+ 'PARCEL_MEDIA_COMMAND_LOOP_SET',
+ 'PARCEL_MEDIA_COMMAND_PAUSE',
+ 'PARCEL_MEDIA_COMMAND_PLAY',
+ 'PARCEL_MEDIA_COMMAND_SIZE',
+ 'PARCEL_MEDIA_COMMAND_STOP',
+ 'PARCEL_MEDIA_COMMAND_TEXTURE',
+ 'PARCEL_MEDIA_COMMAND_TIME',
+ 'PARCEL_MEDIA_COMMAND_TYPE',
+ 'PARCEL_MEDIA_COMMAND_URL',
+ 'PASSIVE',
+ 'PAYMENT_INFO_ON_FILE',
+ 'PAYMENT_INFO_USED',
+ 'PAY_DEFAULT',
+ 'PAY_HIDE',
+ 'PERMISSION_ATTACH',
+ 'PERMISSION_CHANGE_LINKS',
+ 'PERMISSION_CONTROL_CAMERA',
+ 'PERMISSION_DEBIT',
+ 'PERMISSION_TAKE_CONTROLS',
+ 'PERMISSION_TRACK_CAMERA',
+ 'PERMISSION_TRIGGER_ANIMATION',
+ 'PERM_ALL',
+ 'PERM_COPY',
+ 'PERM_MODIFY',
+ 'PERM_MOVE',
+ 'PERM_TRANSFER',
+ 'PI',
+ 'PI_BY_TWO',
+ 'PRIM_BUMP_BARK',
+ 'PRIM_BUMP_BLOBS',
+ 'PRIM_BUMP_BRICKS',
+ 'PRIM_BUMP_BRIGHT',
+ 'PRIM_BUMP_CHECKER',
+ 'PRIM_BUMP_CONCRETE',
+ 'PRIM_BUMP_DARK',
+ 'PRIM_BUMP_DISKS',
+ 'PRIM_BUMP_GRAVEL',
+ 'PRIM_BUMP_LARGETILE',
+ 'PRIM_BUMP_NONE',
+ 'PRIM_BUMP_SHINY',
+ 'PRIM_BUMP_SIDING',
+ 'PRIM_BUMP_STONE',
+ 'PRIM_BUMP_STUCCO',
+ 'PRIM_BUMP_SUCTION',
+ 'PRIM_BUMP_TILE',
+ 'PRIM_BUMP_WEAVE',
+ 'PRIM_BUMP_WOOD',
+ 'PRIM_COLOR',
+ 'PRIM_FULLBRIGHT',
+ 'PRIM_HOLE_CIRCLE',
+ 'PRIM_HOLE_DEFAULT',
+ 'PRIM_HOLE_SQUARE',
+ 'PRIM_HOLE_TRIANGLE',
+ 'PRIM_MATERIAL',
+ 'PRIM_MATERIAL_FLESH',
+ 'PRIM_MATERIAL_GLASS',
+ 'PRIM_MATERIAL_LIGHT',
+ 'PRIM_MATERIAL_METAL',
+ 'PRIM_MATERIAL_PLASTIC',
+ 'PRIM_MATERIAL_RUBBER',
+ 'PRIM_MATERIAL_STONE',
+ 'PRIM_MATERIAL_WOOD',
+ 'PRIM_PHANTOM',
+ 'PRIM_PHYSICS',
+ 'PRIM_POSITION',
+ 'PRIM_ROTATION',
+ 'PRIM_SHINY_HIGH',
+ 'PRIM_SHINY_LOW',
+ 'PRIM_SHINY_MEDIUM',
+ 'PRIM_SHINY_NONE',
+ 'PRIM_SIZE',
+ 'PRIM_TEMP_ON_REZ',
+ 'PRIM_TEXTURE',
+ 'PRIM_TYPE',
+ 'PRIM_TYPE_BOX',
+ 'PRIM_TYPE_CYLINDER',
+ 'PRIM_TYPE_PRISM',
+ 'PRIM_TYPE_RING',
+ 'PRIM_TYPE_SPHERE',
+ 'PRIM_TYPE_TORUS',
+ 'PRIM_TYPE_TUBE',
+ 'PSYS_PART_BOUNCE_MASK',
+ 'PSYS_PART_EMISSIVE_MASK',
+ 'PSYS_PART_END_ALPHA',
+ 'PSYS_PART_END_COLOR',
+ 'PSYS_PART_END_SCALE',
+ 'PSYS_PART_FLAGS',
+ 'PSYS_PART_FOLLOW_SRC_MASK',
+ 'PSYS_PART_FOLLOW_VELOCITY_MASK',
+ 'PSYS_PART_INTERP_COLOR_MASK',
+ 'PSYS_PART_INTERP_SCALE_MASK',
+ 'PSYS_PART_MAX_AGE',
+ 'PSYS_PART_START_ALPHA',
+ 'PSYS_PART_START_COLOR',
+ 'PSYS_PART_START_SCALE',
+ 'PSYS_PART_TARGET_LINEAR_MASK',
+ 'PSYS_PART_TARGET_POS_MASK',
+ 'PSYS_PART_WIND_MASK',
+ 'PSYS_SRC_ACCEL',
+ 'PSYS_SRC_ANGLE_BEGIN',
+ 'PSYS_SRC_ANGLE_END',
+ 'PSYS_SRC_BURST_PART_COUNT',
+ 'PSYS_SRC_BURST_RADIUS',
+ 'PSYS_SRC_BURST_RATE',
+ 'PSYS_SRC_BURST_SPEED_MAX',
+ 'PSYS_SRC_BURST_SPEED_MIN',
+ 'PSYS_SRC_INNERANGLE',
+ 'PSYS_SRC_MAX_AGE',
+ 'PSYS_SRC_OMEGA',
+ 'PSYS_SRC_OUTERANGLE',
+ 'PSYS_SRC_PATTERN',
+ 'PSYS_SRC_PATTERN_ANGLE',
+ 'PSYS_SRC_PATTERN_ANGLE_CONE',
+ 'PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY',
+ 'PSYS_SRC_PATTERN_DROP',
+ 'PSYS_SRC_PATTERN_EXPLODE',
+ 'PSYS_SRC_TARGET_KEY',
+ 'PSYS_SRC_TEXTURE',
+ 'RAD_TO_DEG',
+ 'REMOTE_DATA_CHANNEL',
+ 'REMOTE_DATA_REQUEST',
+ 'SCRIPTED',
+ 'SQRT2',
+ 'STATUS_BLOCK_GRAB',
+ 'STATUS_DIE_AT_EDGE',
+ 'STATUS_PHANTOM',
+ 'STATUS_PHYSICS',
+ 'STATUS_RETURN_AT_EDGE',
+ 'STATUS_ROTATE_X',
+ 'STATUS_ROTATE_Y',
+ 'STATUS_ROTATE_Z',
+ 'STATUS_SANDBOX',
+ 'TRUE',
+ 'TWO_PI',
+ 'VEHICLE_ANGULAR_DEFLECTION_EFFICIENCY',
+ 'VEHICLE_ANGULAR_DEFLECTION_TIMESCALE',
+ 'VEHICLE_ANGULAR_FRICTION_TIMESCALE',
+ 'VEHICLE_ANGULAR_MOTOR_DECAY_TIMESCALE',
+ 'VEHICLE_ANGULAR_MOTOR_DIRECTION',
+ 'VEHICLE_ANGULAR_MOTOR_TIMESCALE',
+ 'VEHICLE_BANKING_EFFICIENCY',
+ 'VEHICLE_BANKING_MIX',
+ 'VEHICLE_BANKING_TIMESCALE',
+ 'VEHICLE_BUOYANCY',
+ 'VEHICLE_FLAG_CAMERA_DECOUPLED',
+ 'VEHICLE_FLAG_HOVER_GLOBAL_HEIGHT',
+ 'VEHICLE_FLAG_HOVER_TERRAIN_ONLY',
+ 'VEHICLE_FLAG_HOVER_UP_ONLY',
+ 'VEHICLE_FLAG_HOVER_WATER_ONLY',
+ 'VEHICLE_FLAG_LIMIT_MOTOR_UP',
+ 'VEHICLE_FLAG_LIMIT_ROLL_ONLY',
+ 'VEHICLE_FLAG_MOUSELOOK_BANK',
+ 'VEHICLE_FLAG_MOUSELOOK_STEER',
+ 'VEHICLE_FLAG_NO_DEFLECTION_UP',
+ 'VEHICLE_HOVER_EFFICIENCY',
+ 'VEHICLE_HOVER_HEIGHT',
+ 'VEHICLE_HOVER_TIMESCALE',
+ 'VEHICLE_LINEAR_DEFLECTION_EFFICIENCY',
+ 'VEHICLE_LINEAR_DEFLECTION_TIMESCALE',
+ 'VEHICLE_LINEAR_FRICTION_TIMESCALE',
+ 'VEHICLE_LINEAR_MOTOR_DECAY_TIMESCALE',
+ 'VEHICLE_LINEAR_MOTOR_DIRECTION',
+ 'VEHICLE_LINEAR_MOTOR_OFFSET',
+ 'VEHICLE_LINEAR_MOTOR_TIMESCALE',
+ 'VEHICLE_REFERENCE_FRAME',
+ 'VEHICLE_TYPE_AIRPLANE',
+ 'VEHICLE_TYPE_BALLOON',
+ 'VEHICLE_TYPE_BOAT',
+ 'VEHICLE_TYPE_CAR',
+ 'VEHICLE_TYPE_NONE',
+ 'VEHICLE_TYPE_SLED',
+ 'VEHICLE_VERTICAL_ATTRACTION_EFFICIENCY',
+ 'VEHICLE_VERTICAL_ATTRACTION_TIMESCALE',
+ 'ZERO_ROTATION',
+ 'ZERO_VECTOR',
+ ),
+ 3 => array( // handlers
+ 'at_rot_target',
+ 'at_target',
+ 'attached',
+ 'changed',
+ 'collision',
+ 'collision_end',
+ 'collision_start',
+ 'control',
+ 'dataserver',
+ 'email',
+ 'http_response',
+ 'land_collision',
+ 'land_collision_end',
+ 'land_collision_start',
+ 'link_message',
+ 'listen',
+ 'money',
+ 'moving_end',
+ 'moving_start',
+ 'no_sensor',
+ 'not_at_rot_target',
+ 'not_at_target',
+ 'object_rez',
+ 'on_rez',
+ 'remote_data',
+ 'run_time_permissions',
+ 'sensor',
+ 'state_entry',
+ 'state_exit',
+ 'timer',
+ 'touch',
+ 'touch_end',
+ 'touch_start',
+ ),
+ 4 => array( // data types
+ 'float',
+ 'integer',
+ 'key',
+ 'list',
+ 'rotation',
+ 'string',
+ 'vector',
+ ),
+ 5 => array( // library
+ 'default',
+ 'llAbs',
+ 'llAcos',
+ 'llAddToLandBanList',
+ 'llAddToLandPassList',
+ 'llAdjustSoundVolume',
+ 'llAllowInventoryDrop',
+ 'llAngleBetween',
+ 'llApplyImpulse',
+ 'llApplyRotationalImpulse',
+ 'llAsin',
+ 'llAtan2',
+ 'llAttachToAvatar',
+ 'llAvatarOnSitTarget',
+ 'llAxes2Rot',
+ 'llAxisAngle2Rot',
+ 'llBase64ToInteger',
+ 'llBase64ToString',
+ 'llBreakAllLinks',
+ 'llBreakLink',
+ 'llCeil',
+ 'llClearCameraParams',
+ 'llCloseRemoteDataChannel',
+ 'llCloud',
+ 'llCollisionFilter',
+ 'llCollisionSound',
+ 'llCollisionSprite',
+ 'llCos',
+ 'llCreateLink',
+ 'llCSV2List',
+ 'llDeleteSubList',
+ 'llDeleteSubString',
+ 'llDetachFromAvatar',
+ 'llDetectedGrab',
+ 'llDetectedGroup',
+ 'llDetectedKey',
+ 'llDetectedLinkNumber',
+ 'llDetectedName',
+ 'llDetectedOwner',
+ 'llDetectedPos',
+ 'llDetectedRot',
+ 'llDetectedTouchBinormal',
+ 'llDetectedTouchFace',
+ 'llDetectedTouchNormal',
+ 'llDetectedTouchPos',
+ 'llDetectedTouchST',
+ 'llDetectedTouchUV',
+ 'llDetectedType',
+ 'llDetectedVel',
+ 'llDialog',
+ 'llDie',
+ 'llDumpList2String',
+ 'llEdgeOfWorld',
+ 'llEjectFromLand',
+ 'llEmail',
+ 'llEscapeURL',
+ 'llEuler2Rot',
+ 'llFabs',
+ 'llFloor',
+ 'llForceMouselook',
+ 'llFrand',
+ 'llGetAccel',
+ 'llGetAgentInfo',
+ 'llGetAgentLanguage',
+ 'llGetAgentSize',
+ 'llGetAlpha',
+ 'llGetAndResetTime',
+ 'llGetAnimation',
+ 'llGetAnimationList',
+ 'llGetAttached',
+ 'llGetBoundingBox',
+ 'llGetCameraPos',
+ 'llGetCameraRot',
+ 'llGetCenterOfMass',
+ 'llGetColor',
+ 'llGetCreator',
+ 'llGetDate',
+ 'llGetEnergy',
+ 'llGetForce',
+ 'llGetFreeMemory',
+ 'llGetGeometricCenter',
+ 'llGetGMTclock',
+ 'llGetInventoryCreator',
+ 'llGetInventoryKey',
+ 'llGetInventoryName',
+ 'llGetInventoryNumber',
+ 'llGetInventoryPermMask',
+ 'llGetInventoryType',
+ 'llGetKey',
+ 'llGetLandOwnerAt',
+ 'llGetLinkKey',
+ 'llGetLinkName',
+ 'llGetLinkNumber',
+ 'llGetListEntryType',
+ 'llGetListLength',
+ 'llGetLocalPos',
+ 'llGetLocalRot',
+ 'llGetMass',
+ 'llGetNextEmail',
+ 'llGetNotecardLine',
+ 'llGetNumberOfNotecardLines',
+ 'llGetNumberOfPrims',
+ 'llGetNumberOfSides',
+ 'llGetObjectDesc',
+ 'llGetObjectDetails',
+ 'llGetObjectMass',
+ 'llGetObjectName',
+ 'llGetObjectPermMask',
+ 'llGetObjectPrimCount',
+ 'llGetOmega',
+ 'llGetOwner',
+ 'llGetOwnerKey',
+ 'llGetParcelDetails',
+ 'llGetParcelFlags',
+ 'llGetParcelMaxPrims',
+ 'llGetParcelPrimCount',
+ 'llGetParcelPrimOwners',
+ 'llGetPermissions',
+ 'llGetPermissionsKey',
+ 'llGetPos',
+ 'llGetPrimitiveParams',
+ 'llGetRegionAgentCount',
+ 'llGetRegionCorner',
+ 'llGetRegionFlags',
+ 'llGetRegionFPS',
+ 'llGetRegionName',
+ 'llGetRegionTimeDilation',
+ 'llGetRootPosition',
+ 'llGetRootRotation',
+ 'llGetRot',
+ 'llGetScale',
+ 'llGetScriptName',
+ 'llGetScriptState',
+ 'llGetSimulatorHostname',
+ 'llGetStartParameter',
+ 'llGetStatus',
+ 'llGetSubString',
+ 'llGetSunDirection',
+ 'llGetTexture',
+ 'llGetTextureOffset',
+ 'llGetTextureRot',
+ 'llGetTextureScale',
+ 'llGetTime',
+ 'llGetTimeOfDay',
+ 'llGetTimestamp',
+ 'llGetTorque',
+ 'llGetUnixTime',
+ 'llGetVel',
+ 'llGetWallclock',
+ 'llGiveInventory',
+ 'llGiveInventoryList',
+ 'llGiveMoney',
+ 'llGround',
+ 'llGroundContour',
+ 'llGroundNormal',
+ 'llGroundRepel',
+ 'llGroundSlope',
+ 'llHTTPRequest',
+ 'llInsertString',
+ 'llInstantMessage',
+ 'llIntegerToBase64',
+ 'llKey2Name',
+ 'llList2CSV',
+ 'llList2Float',
+ 'llList2Integer',
+ 'llList2Key',
+ 'llList2List',
+ 'llList2ListStrided',
+ 'llList2Rot',
+ 'llList2String',
+ 'llList2Vector',
+ 'llListen',
+ 'llListenControl',
+ 'llListenRemove',
+ 'llListFindList',
+ 'llListInsertList',
+ 'llListRandomize',
+ 'llListReplaceList',
+ 'llListSort',
+ 'llListStatistics',
+ 'llLoadURL',
+ 'llLog',
+ 'llLog10',
+ 'llLookAt',
+ 'llLoopSound',
+ 'llLoopSoundMaster',
+ 'llLoopSoundSlave',
+ 'llMapDestination',
+ 'llMD5String',
+ 'llMessageLinked',
+ 'llMinEventDelay',
+ 'llModifyLand',
+ 'llModPow',
+ 'llMoveToTarget',
+ 'llOffsetTexture',
+ 'llOpenRemoteDataChannel',
+ 'llOverMyLand',
+ 'llOwnerSay',
+ 'llParcelMediaCommandList',
+ 'llParcelMediaQuery',
+ 'llParseString2List',
+ 'llParseStringKeepNulls',
+ 'llParticleSystem',
+ 'llPassCollisions',
+ 'llPassTouches',
+ 'llPlaySound',
+ 'llPlaySoundSlave',
+ 'llPow',
+ 'llPreloadSound',
+ 'llPushObject',
+ 'llRegionSay',
+ 'llReleaseControls',
+ 'llRemoteDataReply',
+ 'llRemoteDataSetRegion',
+ 'llRemoteLoadScriptPin',
+ 'llRemoveFromLandBanList',
+ 'llRemoveFromLandPassList',
+ 'llRemoveInventory',
+ 'llRemoveVehicleFlags',
+ 'llRequestAgentData',
+ 'llRequestInventoryData',
+ 'llRequestPermissions',
+ 'llRequestSimulatorData',
+ 'llResetLandBanList',
+ 'llResetLandPassList',
+ 'llResetOtherScript',
+ 'llResetScript',
+ 'llResetTime',
+ 'llRezAtRoot',
+ 'llRezObject',
+ 'llRot2Angle',
+ 'llRot2Axis',
+ 'llRot2Euler',
+ 'llRot2Fwd',
+ 'llRot2Left',
+ 'llRot2Up',
+ 'llRotateTexture',
+ 'llRotBetween',
+ 'llRotLookAt',
+ 'llRotTarget',
+ 'llRotTargetRemove',
+ 'llRound',
+ 'llSameGroup',
+ 'llSay',
+ 'llScaleTexture',
+ 'llScriptDanger',
+ 'llSendRemoteData',
+ 'llSensor',
+ 'llSensorRemove',
+ 'llSensorRepeat',
+ 'llSetAlpha',
+ 'llSetBuoyancy',
+ 'llSetCameraAtOffset',
+ 'llSetCameraEyeOffset',
+ 'llSetCameraParams',
+ 'llSetClickAction',
+ 'llSetColor',
+ 'llSetDamage',
+ 'llSetForce',
+ 'llSetForceAndTorque',
+ 'llSetHoverHeight',
+ 'llSetLinkAlpha',
+ 'llSetLinkColor',
+ 'llSetLinkPrimitiveParams',
+ 'llSetLinkTexture',
+ 'llSetLocalRot',
+ 'llSetObjectDesc',
+ 'llSetObjectName',
+ 'llSetParcelMusicURL',
+ 'llSetPayPrice',
+ 'llSetPos',
+ 'llSetPrimitiveParams',
+ 'llSetRemoteScriptAccessPin',
+ 'llSetRot',
+ 'llSetScale',
+ 'llSetScriptState',
+ 'llSetSitText',
+ 'llSetSoundQueueing',
+ 'llSetSoundRadius',
+ 'llSetStatus',
+ 'llSetText',
+ 'llSetTexture',
+ 'llSetTextureAnim',
+ 'llSetTimerEvent',
+ 'llSetTorque',
+ 'llSetTouchText',
+ 'llSetVehicleFlags',
+ 'llSetVehicleFloatParam',
+ 'llSetVehicleRotationParam',
+ 'llSetVehicleType',
+ 'llSetVehicleVectorParam',
+ 'llSHA1String',
+ 'llShout',
+ 'llSin',
+ 'llSitTarget',
+ 'llSleep',
+ 'llSqrt',
+ 'llStartAnimation',
+ 'llStopAnimation',
+ 'llStopHover',
+ 'llStopLookAt',
+ 'llStopMoveToTarget',
+ 'llStopSound',
+ 'llStringLength',
+ 'llStringToBase64',
+ 'llStringTrim',
+ 'llSubStringIndex',
+ 'llTakeControls',
+ 'llTan',
+ 'llTarget',
+ 'llTargetOmega',
+ 'llTargetRemove',
+ 'llTeleportAgentHome',
+ 'llToLower',
+ 'llToUpper',
+ 'llTriggerSound',
+ 'llTriggerSoundLimited',
+ 'llUnescapeURL',
+ 'llUnSit',
+ 'llVecDist',
+ 'llVecMag',
+ 'llVecNorm',
+ 'llVolumeDetect',
+ 'llWater',
+ 'llWhisper',
+ 'llWind',
+ 'llXorBase64StringsCorrect',
+ ),
+ 6 => array( // deprecated
+ 'llMakeExplosion',
+ 'llMakeFire',
+ 'llMakeFountain',
+ 'llMakeSmoke',
+ 'llSound',
+ 'llSoundPreload',
+ 'llXorBase64Strings',
+ ),
+ 7 => array( // unimplemented
+ 'llPointAt',
+ 'llRefreshPrimURL',
+ 'llReleaseCamera',
+ 'llRemoteLoadScript',
+ 'llSetPrimURL',
+ 'llStopPointAt',
+ 'llTakeCamera',
+ 'llTextBox',
+ ),
+ 8 => array( // God mode
+ 'llGodLikeRezObject',
+ 'llSetInventoryPermMask',
+ 'llSetObjectPermMask',
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '{', '}', '(', ')', '[', ']',
+ '=', '+', '-', '*', '/',
+ '+=', '-=', '*=', '/=', '++', '--',
+ '!', '%', '&amp;', '|', '&amp;&amp;', '||',
+ '==', '!=', '&lt;', '&gt;', '&lt;=', '&gt;=',
+ '~', '&lt;&lt;', '&gt;&gt;', '^', ':',
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #000080;',
+ 3 => 'color: #008080;',
+ 4 => 'color: #228b22;',
+ 5 => 'color: #b22222;',
+ 6 => 'color: #8b0000; background-color: #ffff00;',
+ 7 => 'color: #8b0000; background-color: #fa8072;',
+ 8 => 'color: #000000; background-color: #ba55d3;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #ff7f50; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #006400;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ 4 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ 5 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ 6 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ 7 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ 8 => 'http://www.lslwiki.net/lslwiki/wakka.php?wakka={FNAME}', // http://wiki.secondlife.com/wiki/{FNAME}
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php
new file mode 100644
index 000000000..f85086bb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php
@@ -0,0 +1,137 @@
+<?php
+/*************************************************************************************
+ * lua.php
+ * -------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/10
+ *
+ * LUA language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/26 (1.0.2)
+ * - Added support for objects and methods
+ * - Removed unusable keywords
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Lua',
+ 'COMMENT_SINGLE' => array(1 => "--"),
+ 'COMMENT_MULTI' => array('--[[' => ']]'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'and','break','do','else','elseif','end','false','for','function','if',
+ 'in','local','nil','not','or','repeat','return','then','true','until','while',
+ '_VERSION','assert','collectgarbage','dofile','error','gcinfo','loadfile','loadstring',
+ 'print','tonumber','tostring','type','unpack',
+ '_ALERT','_ERRORMESSAGE','_INPUT','_PROMPT','_OUTPUT',
+ '_STDERR','_STDIN','_STDOUT','call','dostring','foreach','foreachi','getn','globals','newtype',
+ 'rawget','rawset','require','sort','tinsert','tremove',
+ 'abs','acos','asin','atan','atan2','ceil','cos','deg','exp',
+ 'floor','format','frexp','gsub','ldexp','log','log10','max','min','mod','rad','random','randomseed',
+ 'sin','sqrt','strbyte','strchar','strfind','strlen','strlower','strrep','strsub','strupper','tan',
+ 'openfile','closefile','readfrom','writeto','appendto',
+ 'remove','rename','flush','seek','tmpfile','tmpname','read','write',
+ 'clock','date','difftime','execute','exit','getenv','setlocale','time',
+ '_G','getfenv','getmetatable','ipairs','loadlib','next','pairs','pcall',
+ 'rawegal','setfenv','setmetatable','xpcall',
+ 'string.byte','string.char','string.dump','string.find','string.len',
+ 'string.lower','string.rep','string.sub','string.upper','string.format','string.gfind','string.gsub',
+ 'table.concat','table.foreach','table.foreachi','table.getn','table.sort','table.insert','table.remove','table.setn',
+ 'math.abs','math.acos','math.asin','math.atan','math.atan2','math.ceil','math.cos','math.deg','math.exp',
+ 'math.floor','math.frexp','math.ldexp','math.log','math.log10','math.max','math.min','math.mod',
+ 'math.pi','math.rad','math.random','math.randomseed','math.sin','math.sqrt','math.tan',
+ 'coroutine.create','coroutine.resume','coroutine.status',
+ 'coroutine.wrap','coroutine.yield',
+ 'io.close','io.flush','io.input','io.lines','io.open','io.output','io.read','io.tmpfile','io.type','io.write',
+ 'io.stdin','io.stdout','io.stderr',
+ 'os.clock','os.date','os.difftime','os.execute','os.exit','os.getenv','os.remove','os.rename',
+ 'os.setlocale','os.time','os.tmpname',
+ 'string','table','math','coroutine','io','os','debug'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>', '=', ';'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #b1b100;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php
new file mode 100644
index 000000000..cc5807c6f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php
@@ -0,0 +1,143 @@
+<?php
+/*************************************************************************************
+ * m68k.php
+ * --------
+ * Author: Benny Baumann (BenBE@omorphia.de)
+ * Copyright: (c) 2007 Benny Baumann (http://www.omorphia.de/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/02/06
+ *
+ * Motorola 68000 Assembler language file for GeSHi.
+ *
+ * Syntax definition as commonly used by the motorola documentation for the
+ * MC68HC908GP32 Microcontroller (and maybe others).
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2007/06/02 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2007/06/02)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Motorola 68000 Assembler',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /*CPU*/
+ 1 => array(
+ 'adc','add','ais','aix','and','asl','asr','bcc','bclr','bcs','beq',
+ 'bge','bgt','bhcc','bhcs','bhi','bhs','bih','bil','bit','ble','blo',
+ 'bls','blt','bmc','bmi','bms','bne','bpl','bra','brclr','brn',
+ 'brset','bset','bsr','cbeq','clc','cli','clr','cmp','com','cphx',
+ 'cpx','daa','dbnz','dec','div','eor','inc','jmp','jsr','lda','ldhx',
+ 'ldx','lsl','lsr','mov','mul','neg','nop','nsa','ora','psha','pshh',
+ 'pshx','pula','pulh','pulx','rol','ror','rsp','rti','rts','sbc',
+ 'sec','sei','sta','sthx','stop','stx','sub','swi','tap','tax','tpa',
+ 'tst','tsx','txa','txs','wait'
+ ),
+ /*registers*/
+ 2 => array(
+ 'a','h','x',
+ 'hx','sp'
+ ),
+ /*Directive*/
+ 3 => array(
+ '#define','#endif','#else','#ifdef','#ifndef','#include','#undef',
+ '.db','.dd','.df','.dq','.dt','.dw','.end','.org','equ'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff; font-weight:bold;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #46aa03; font-weight:bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #dd22dd;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #22bbff;',
+ 1 => 'color: #22bbff;',
+ 2 => 'color: #993333;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers
+ 0 => '#?0[0-9a-fA-F]{1,32}[hH]',
+ //Binary numbers
+ 1 => '\%[01]{1,64}[bB]',
+ //Labels
+ 2 => '^[_a-zA-Z][_a-zA-Z0-9]*?\:'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 8
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php
new file mode 100644
index 000000000..f01209ebf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php
@@ -0,0 +1,151 @@
+<?php
+/*************************************************************************************
+ * make.php
+ * --------
+ * Author: Neil Bird <phoenix@fnxweb.com>
+ * Copyright: (c) 2008 Neil Bird
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/08/26
+ *
+ * make language file for GeSHi.
+ *
+ * (GNU make specific)
+ *
+ * CHANGES
+ * -------
+ * 2008/09/05 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'GNU make',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_REGEXP' => array(
+ //Escaped String Starters
+ 2 => "/\\\\['\"]/siU"
+ ),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ // core
+ 'ifeq', 'else', 'endif', 'ifneq', 'ifdef', 'ifndef',
+ 'include', 'vpath', 'export', 'unexport', 'override',
+ 'info', 'warning', 'error'
+ ),
+ 2 => array(
+ // macros, literals
+ '.SUFFIXES', '.PHONY', '.DEFAULT', '.PRECIOUS', '.IGNORE', '.SILENT', '.EXPORT_ALL_VARIABLES', '.KEEP_STATE',
+ '.LIBPATTERNS', '.NOTPARALLEL', '.DELETE_ON_ERROR', '.INTERMEDIATE', '.POSIX', '.SECONDARY'
+ ),
+ /*
+ 3 => array(
+ // funcs - see regex
+ //'subst', 'addprefix', 'addsuffix', 'basename', 'call', 'dir', 'error', 'eval', 'filter-out', 'filter',
+ //'findstring', 'firstword', 'foreach', 'if', 'join', 'notdir', 'origin', 'patsubst', 'shell', 'sort', 'strip',
+ //'suffix', 'warning', 'wildcard', 'word', 'wordlist', 'words'
+ )*/
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}',
+ '!', '@', '%', '&', '|', '/',
+ '<', '>',
+ '=', '-', '+', '*',
+ '.', ':', ',', ';',
+ '$'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ //3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #666622; font-weight: bold;',
+ 2 => 'color: #990000;',
+ //3 => 'color: #000000; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #339900; font-style: italic;',
+ 2 => 'color: #000099; font-weight: bold;',
+ 'MULTI' => ''
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array( # keep same as symbols so as to make ${} and $() equiv.
+ 0 => 'color: #004400;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #CC2200;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #CC2200;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #004400;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000088; font-weight: bold;',
+ 1 => 'color: #0000CC; font-weight: bold;',
+ 2 => 'color: #000088;'
+ ),
+ 'SCRIPT' => array(),
+ 'METHODS' => array()
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ //3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ //Simple variables
+ 0 => "\\$(?:[^{(&]|&(?:amp|lt|gt);)",
+ //Complex variables/functions [built-ins]
+ 1 => array(
+ GESHI_SEARCH => '(\\$[({])(subst|addprefix|addsuffix|basename|call|dir|error|eval|filter-out|filter,|findstring|firstword|foreach|if|join|notdir|origin|patsubst|shell|sort|strip,|suffix|warning|wildcard|word|wordlist|words)([ })])',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ //Complex variables/functions [others]
+ 2 => array(
+ GESHI_SEARCH => '(\\$[({])([A-Za-z_][A-Za-z_0-9]*)([ })])',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
+ 'TAB_WIDTH' => 8
+// vim: set sw=4 sts=4 :
+);
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php
new file mode 100644
index 000000000..f7b649573
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php
@@ -0,0 +1,227 @@
+<?php
+/*************************************************************************************
+ * matlab.php
+ * -----------
+ * Author: Florian Knorn (floz@gmx.de)
+ * Copyright: (c) 2004 Florian Knorn (http://www.florian-knorn.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/02/09
+ *
+ * Matlab M-file language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2006-03-25 (1.0.7.22)
+ * - support for the transpose operator
+ * - many keywords added
+ * - links to the matlab documentation at mathworks
+ * by: Olivier Verdier (olivier.verdier@free.fr)
+ * 2005/05/07 (1.0.0)
+ * - First Release
+ *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Matlab M',
+ 'COMMENT_SINGLE' => array(1 => '%'),
+ 'COMMENT_MULTI' => array(),
+ //Matlab Strings
+ 'COMMENT_REGEXP' => array(
+ 2 => "/(?<![\\w\\)\\]\\}\\.])('[^\\n']*?')/"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'break', 'case', 'catch', 'continue', 'elseif', 'else', 'end', 'for',
+ 'function', 'global', 'if', 'otherwise', 'persistent', 'return',
+ 'switch', 'try', 'while'
+ ),
+ 2 => array(
+ 'all','any','exist','is','logical','mislocked',
+
+ 'abs','acos','acosh','acot','acoth','acsc','acsch','airy','angle',
+ 'ans','area','asec','asech','asin','asinh','atan','atan2','atanh',
+ 'auread','autumn','auwrite','axes','axis','balance','bar','bar3',
+ 'bar3h','barh','besselh','besseli','besselj','besselk','Bessely',
+ 'beta','betainc','betaln','bicg','bicgstab','bin2dec','bitand',
+ 'bitcmp','bitget','bitmax','bitor','bitset','bitshift','bitxor',
+ 'blkdiag','bone','box','brighten','builtin','bwcontr','calendar',
+ 'camdolly','camlight','camlookat','camorbit','campan','campos',
+ 'camproj','camroll','camtarget','camup','camva','camzoom','capture',
+ 'cart2pol','cart2sph','cat','caxis','cdf2rdf','ceil','cell',
+ 'cell2struct','celldisp','cellfun','cellplot','cellstr','cgs',
+ 'char','chol','cholinc','cholupdate','cla','clabel','class','clc',
+ 'clf','clg','clock','close','colmmd','colorbar','colorcube',
+ 'colordef','colormap','colperm','comet','comet3','compan','compass',
+ 'complex','computer','cond','condeig','condest','coneplot','conj',
+ 'contour','contourc','contourf','contourslice','contrast','conv',
+ 'conv2','convhull','cool','copper','copyobj','corrcoef','cos',
+ 'cosh','cot','coth','cov','cplxpair','cputime','cross','csc','csch',
+ 'cumprod','cumsum','cumtrapz','cylinder','daspect','date','datenum',
+ 'datestr','datetick','datevec','dbclear','dbcont','dbdown',
+ 'dblquad','dbmex','dbquit','dbstack','dbstatus','dbstep','dbstop',
+ 'dbtype','dbup','deblank','dec2bin','dec2hex','deconv','del2',
+ 'delaunay','det','diag','dialog','diff','diffuse','dlmread',
+ 'dlmwrite','dmperm','double','dragrect','drawnow','dsearch','eig',
+ 'eigs','ellipj','ellipke','eomday','eps','erf','erfc','erfcx',
+ 'erfiny','error','errorbar','errordlg','etime','eval','evalc',
+ 'evalin','exp','expint','expm','eye','ezcontour','ezcontourf',
+ 'ezmesh','ezmeshc','ezplot','ezplot3','ezpolar','ezsurf','ezsurfc',
+ 'factor','factorial','fclose','feather','feof','ferror','feval',
+ 'fft','fft2','fftshift','fgetl','fgets','fieldnames','figure',
+ 'fill','fill3','filter','filter2','find','findfigs','findobj',
+ 'findstr','fix','flag','flipdim','fliplr','flipud','floor','flops',
+ 'fmin','fmins','fopen','fplot','fprintf','fread','frewind','fscanf',
+ 'fseek','ftell','full','funm','fwrite','fzero','gallery','gamma',
+ 'gammainc','gammaln','gca','gcbo','gcd','gcf','gco','get',
+ 'getfield','ginput','gmres','gradient','gray','graymon','grid',
+ 'griddata','gsvd','gtext','hadamard','hankel','hdf','helpdlg',
+ 'hess','hex2dec','hex2num','hidden','hilb','hist','hold','hot',
+ 'hsv','hsv2rgb','i','ifft','ifft2','ifftn','ifftshift','imag',
+ 'image','imfinfo','imread','imwrite','ind2sub','Inf','inferiorto',
+ 'inline','inpolygon','input','inputdlg','inputname','int16',
+ 'int2str','int32','int8','interp1','interp2','interp3','interpft',
+ 'interpn','intersect','inv','invhilb','ipermute','isa','ishandle',
+ 'ismember','isocaps','isonormals','isosurface','j','jet','keyboard',
+ 'lcm','legend','legendre','light','lighting','lightingangle',
+ 'lin2mu','line','lines','linspace','listdlg','loadobj','log',
+ 'log10','log2','loglog','logm','logspace','lower','lscov','lu',
+ 'luinc','magic','mat2str','material','max','mean','median','menu',
+ 'menuedit','mesh','meshc','meshgrid','min','mod','msgbox','mu2lin',
+ 'NaN','nargchk','nargin','nargout','nchoosek','ndgrid','ndims',
+ 'newplot','nextpow2','nnls','nnz','nonzeros','norm','normest','now',
+ 'null','num2cell','num2str','nzmax','ode113,','ode15s,','ode23s,',
+ 'ode23t,','ode23tb','ode45,','odefile','odeget','odeset','ones',
+ 'orient','orth','pagedlg','pareto','pascal','patch','pause',
+ 'pbaspect','pcg','pcolor','peaks','perms','permute','pi','pie',
+ 'pie3','pinv','plot','plot3','plotmatrix','plotyy','pol2cart',
+ 'polar','poly','polyarea','polyder','polyeig','polyfit','polyval',
+ 'polyvalm','pow2','primes','print','printdlg','printopt','prism',
+ 'prod','propedit','qmr','qr','qrdelete','qrinsert','qrupdate',
+ 'quad','questdlg','quiver','quiver3','qz','rand','randn','randperm',
+ 'rank','rat','rats','rbbox','rcond','real','realmax','realmin',
+ 'rectangle','reducepatch','reducevolume','refresh','rem','repmat',
+ 'reset','reshape','residue','rgb2hsv','rgbplot','ribbon','rmfield',
+ 'roots','rose','rot90','rotate','rotate3d','round','rref',
+ 'rrefmovie','rsf2csf','saveobj','scatter','scatter3','schur',
+ 'script','sec','sech','selectmoveresize','semilogx','semilogy',
+ 'set','setdiff','setfield','setxor','shading','shg','shiftdim',
+ 'shrinkfaces','sign','sin','single','sinh','slice','smooth3','sort',
+ 'sortrows','sound','soundsc','spalloc','sparse','spconvert',
+ 'spdiags','specular','speye','spfun','sph2cart','sphere','spinmap',
+ 'spline','spones','spparms','sprand','sprandn','sprandsym','spring',
+ 'sprintf','sqrt','sqrtm','squeeze','sscanf','stairs','std','stem',
+ 'stem3','str2double','str2num','strcat','strcmp','strcmpi',
+ 'stream2','stream3','streamline','strings','strjust','strmatch',
+ 'strncmp','strrep','strtok','struct','struct2cell','strvcat',
+ 'sub2ind','subplot','subspace','subvolume','sum','summer',
+ 'superiorto','surf','surf2patch','surface','surfc','surfl',
+ 'surfnorm','svd','svds','symmmd','symrcm','symvar','tan','tanh',
+ 'texlabel','text Create','textread','textwrap','tic','title','toc',
+ 'toeplitz','trace','trapz','tril','trimesh','trisurf','triu',
+ 'tsearch','uicontext Create','uicontextmenu','uicontrol',
+ 'uigetfile','uimenu','uint32','uint8','uiputfile','uiresume',
+ 'uisetcolor','uisetfont','uiwait Used','union','unique','unwrap',
+ 'upper','var','varargin','varargout','vectorize','view','viewmtx',
+ 'voronoi','waitbar','waitforbuttonpress','warndlg','warning',
+ 'waterfall','wavread','wavwrite','weekday','whitebg','wilkinson',
+ 'winter','wk1read','wk1write','xlabel','xlim','ylabel','ylim',
+ 'zeros','zlabel','zlim','zoom',
+ //'[Keywords 6]',
+ 'addpath','cd','clear','copyfile','delete','diary','dir','disp',
+ 'doc','docopt','echo','edit','fileparts','format','fullfile','help',
+ 'helpdesk','helpwin','home','inmem','lasterr','lastwarn','length',
+ 'load','lookfor','ls','matlabrc','matlabroot','mkdir','mlock',
+ 'more','munlock','open','openvar','pack','partialpath','path',
+ 'pathtool','profile','profreport','pwd','quit','rmpath','save',
+ 'saveas','size','tempdir','tempname','type','ver','version','web',
+ 'what','whatsnew','which','who','whos','workspace'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '...'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ //3 => false,
+ //4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #0000FF;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #228B22;',
+ 2 => 'color:#A020F0;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #080;'
+ ),
+ 'STRINGS' => array(
+ //0 => 'color: #A020F0;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #33f;'
+ ),
+ 'METHODS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #080;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #33f;'
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => 'http://www.mathworks.com/access/helpdesk/help/techdoc/ref/{FNAMEL}.html'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Complex numbers
+ 0 => '(?<![\\w])[+-]?[\\d]*([\\d]\\.|\\.[\\d])?[\\d]*[ij](?![\\w])'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php
new file mode 100644
index 000000000..bc773458c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php
@@ -0,0 +1,171 @@
+<?php
+/*************************************************************************************
+ * mirc.php
+ * -----
+ * Author: Alberto 'Birckin' de Areba (Birckin@hotmail.com)
+ * Copyright: (c) 2006 Alberto de Areba
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/05/29
+ *
+ * mIRC Scripting language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/05/29 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'mIRC Scripting',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'alias', 'menu', 'dialog',
+ ),
+ 2 => array(
+ 'if', 'elseif', 'else', 'while', 'return', 'goto', 'var'
+ ),
+ 3 => array(
+ 'action','ajinvite','amsg','ame','anick','aop','auser',
+ 'avoice','auto','autojoin','away','background','ban','beep',
+ 'channel','clear','clearall','clipboard','close','closemsg','color',
+ 'copy','creq','ctcp','ctcpreply','ctcps','dcc','dde','ddeserver',
+ 'debug','describe','disable','disconnect','dlevel','dll','dns',
+ 'dqwindow','ebeeps','echo','editbox','emailaddr','enable','events',
+ 'exit','filter','findtext','finger','flash','flood','flush',
+ 'flushini','font','fsend','fserve','fullname','ghide','gload',
+ 'gmove','gopts','gplay','gpoint','gqreq','groups','gshow','gsize',
+ 'gstop','gtalk','gunload','guser','help','hop','ignore','invite',
+ 'join','kick','linesep','links','list','load','loadbuf','localinfo',
+ 'log','me','mdi','mkdir','mnick','mode','msg','names','nick','noop',
+ 'notice','notify','omsg','onotice','part','partall','pdcc',
+ 'perform','ping','play','pop','protect','pvoice','qmsg','qme',
+ 'query','queryrn','quit','raw','remini','remote','remove','rename',
+ 'enwin','resetidle','rlevel','rmdir','run','ruser','save','savebuf',
+ 'saveini','say','server','showmirc','sline','sound','speak','splay',
+ 'sreq','strip','time',
+ //'timer[N/name]', //Handled as a regular expression below ...
+ 'timers','timestamp','titlebar','tnick','tokenize','topic','ulist',
+ 'unload','updatenl','url','uwho','window','winhelp','write',
+ 'writeini','who','whois','whowas'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '/'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #994444;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #990000; font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #FF0000;',
+ ),
+ 'STRINGS' => array(
+ ),
+ 'NUMBERS' => array(
+ 0 => '',
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #FF0000;',
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000099;',
+ 1 => 'color: #990000;',
+ 2 => 'color: #000099;',
+ 3 => 'color: #888800;',
+ 4 => 'color: #888800;',
+ 5 => 'color: #000099;',
+ 6 => 'color: #990000; font-weight: bold;',
+ 7 => 'color: #990000; font-weight: bold;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.mirc.com/{FNAMEL}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array('.'),
+ 'REGEXPS' => array(
+ //Variable names
+ 0 => '\$[a-zA-Z0-9]+',
+ //Variable names
+ 1 => '(%|&amp;)[\w\x80-\xFE]+',
+ //Client to Client Protocol handling
+ 2 => '(on|ctcp) (!|@|&amp;)?(\d|\*):[a-zA-Z]+:',
+ /*4 => array(
+ GESHI_SEARCH => '((on|ctcp) (!|@|&)?(\d|\*):(Action|Active|Agent|AppActive|Ban|Chat|Close|Connect|Ctcp|CtcpReply|DccServer|DeHelp|DeOp|DeVoice|Dialog|Dns|Error|Exit|FileRcvd|FileSent|GetFail|Help|Hotlink|Input|Invite|Join|KeyDown|KeyUp|Kick|Load|Logon|MidiEnd|Mode|Mp3End|Nick|NoSound|Notice|Notify|Op|Open|Part|Ping|Pong|PlayEnd|Quit|Raw|RawMode|SendFail|Serv|ServerMode|ServerOp|Signal|Snotice|Start|Text|Topic|UnBan|Unload|Unotify|User|Mode|Voice|Wallops|WaveEnd):)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),*/
+ //Channel names
+ 3 => '(#|@)[a-zA-Z0-9]+',
+ 4 => '-[a-z\d]+',
+ //Raw protocol handling
+ 5 => 'raw (\d|\*):',
+ //Timer handling
+ 6 => '(?<!>|:|\/)\/timer(?!s\b)[0-9a-zA-Z_]+',
+ // /...
+ 7 => '(?<!>|:|\/|\w)\/[a-zA-Z][a-zA-Z0-9]*(?!>)'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER
+ ),
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => '(?<![\w\$\|\#;<^&])'
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php
new file mode 100644
index 000000000..a1f04ca59
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php
@@ -0,0 +1,135 @@
+<?php
+/*************************************************************************************
+ * modula3.php
+ * ----------
+ * Author: mbishop (mbishop@esoteriq.org)
+ * Copyright: (c) 2009 mbishop (mbishop@esoteriq.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/01/21
+ *
+ * Modula-3 language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ *
+ * TODO
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Modula-3',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("''"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'AND', 'ANY', 'ARRAY', 'AS', 'BEGIN', 'BITS', 'BRANDED', 'BY', 'CASE',
+ 'CONST', 'DIV', 'DO', 'ELSE', 'ELSIF', 'END', 'EVAL', 'EXCEPT', 'EXCEPTION',
+ 'EXIT', 'EXPORTS', 'FINALLY', 'FOR', 'FROM', 'GENERIC', 'IF', 'IMPORT', 'IN',
+ 'INTERFACE', 'LOCK', 'LOOP', 'METHODS', 'MOD', 'MODULE', 'NOT', 'OBJECT', 'OF',
+ 'OR', 'OVERRIDE', 'PROCEDURE', 'RAISE', 'RAISES', 'READONLY', 'RECORD', 'REF',
+ 'REPEAT', 'RETURN', 'REVEAL', 'ROOT', 'SET', 'THEN', 'TO', 'TRY', 'TYPE', 'TYPECASE',
+ 'UNSAFE', 'UNTIL', 'UNTRACED', 'VALUE', 'VAR', 'WHILE', 'WITH'
+ ),
+ 2 => array(
+ 'NIL', 'NULL', 'FALSE', 'TRUE',
+ ),
+ 3 => array(
+ 'ABS','ADR','ADRSIZE','BITSIZE','BYTESIZE','CEILING','DEC','DISPOSE',
+ 'EXTENDED','FIRST','FLOAT','FLOOR','INC','ISTYPE','LAST','LOOPHOLE','MAX','MIN',
+ 'NARROW','NEW','NUMBER','ORD','ROUND','SUBARRAY','TRUNC','TYPECODE', 'VAL'
+ ),
+ 4 => array(
+ 'ADDRESS', 'BOOLEAN', 'CARDINAL', 'CHAR', 'INTEGER',
+ 'LONGREAL', 'MUTEX', 'REAL', 'REFANY', 'TEXT'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ ',', ':', '=', '+', '-', '*', '/', '#'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #000066; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0066ee;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php
new file mode 100644
index 000000000..53aa9e7a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php
@@ -0,0 +1,164 @@
+<?php
+/*************************************************************************************
+ * mpasm.php
+ * ---------
+ * Author: Bakalex (bakalex@gmail.com)
+ * Copyright: (c) 2004 Bakalex, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/12/6
+ *
+ * Microchip Assembler language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2005/01/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/12/6)
+ * -------------------------
+ *
+ * For the moment, i've only added PIC16C6X registers. We need more (PIC16F/C7x/8x,
+ * PIC10, PIC18 and dsPIC registers).
+ * Must take a look to dsPIC instructions.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Microchip Assembler',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /*Directive Language*/
+ 4 => array(
+ 'CONSTANT', '#DEFINE', 'END', 'EQU', 'ERROR', 'ERROR-LEVEL', '#INCLUDE', 'LIST',
+ 'MESSG', 'NOLIST', 'ORG', 'PAGE', 'PROCESSOR', 'RADIX', 'SET', 'SPACE', 'SUBTITLE',
+ 'TITLE', '#UNDEFINE', 'VARIABLE', 'ELSE', 'ENDIF', 'ENDW', 'IF', 'IFDEF', 'IFNDEF',
+ 'WHILE', '__BADRAM', 'CBLOCK', '__CONFIG', 'DA', 'DATA', 'DB', 'DE', 'DT', 'DW',
+ 'ENDC', 'FILL', '__IDLOCS', '__MAXRAM', 'RES', 'ENDM', 'EXITM', 'EXPAND', 'LOCAL',
+ 'MACRO', 'NOEXPAND', 'BANKISEL', 'BANKSEL', 'CODE', 'EXTERN', 'GLOBAL', 'IDATA',
+ 'PAGESEL', 'UDATA', 'UDATA_ACS', 'UDATA_OVR', 'UDATA_SHR'
+ ),
+ /* 12&14-bit Specific Instruction Set*/
+ 1 => array(
+ 'andlw', 'call', 'clrwdt', 'goto', 'iorlw', 'movlw', 'option', 'retlw', 'sleep',
+ 'tris', 'xorlw', 'addwf', 'andwf', 'clrf', 'clrw', 'comf', 'decf', 'decfsz', 'incf',
+ 'incfsz', 'iorwf', 'movf', 'nop', 'rlf', 'rrf', 'subwf', 'swapf', 'xorwf',
+ 'bcf', 'bsf', 'btfsc', 'btfss',
+ 'addlw', 'retfie', 'return', 'sublw', 'addcf', 'adddcf', 'b', 'bc', 'bdc',
+ 'bnc', 'bndc', 'bnz', 'bz', 'clrc', 'clrdc', 'clrz', 'lcall', 'lgoto', 'movfw',
+ 'negf', 'setc', 'setdc', 'setz', 'skpc', 'skpdc', 'skpnc', 'skpndc', 'skpnz', 'skpz',
+ 'subcf', 'subdcf', 'tstf'
+ ),
+ /* 16-bit Specific Instructiob Set */
+ 2 => array (
+ 'movfp', 'movlb', 'movlp', 'movpf', 'movwf', 'tablrd', 'tablwt', 'tlrd', 'tlwt',
+ 'addwfc', 'daw', 'mullw', 'negw', 'rlcf', 'rlncf', 'rrcf', 'rrncf', 'setf', 'subwfb',
+ 'btg', 'cpfseq', 'cpfsgt', 'cpfslt', 'dcfsnz', 'infsnz', 'tstfsz', 'lfsr', 'bnn',
+ 'bnov', 'bra', 'pop', 'push', 'rcall', 'reset'
+ ),
+ /* Registers */
+ 3 => array(
+ 'INDF', 'TMR0', 'PCL', 'STATUS', 'FSR', 'PORTA', 'PORTB', 'PORTC', 'PORTD', 'PORTE',
+ 'PCLATH', 'INTCON', 'PIR1', 'PIR2', 'TMR1L', 'TMR1H', 'T1CON', 'TMR2', 'T2CON', 'TMR2L',
+ 'TMR2H', 'TMR0H', 'TMR0L', 'SSPBUF', 'SSPCON', 'CCPR1L', 'CCPR1H', 'CCP1CON', 'RCSTA',
+ 'TXREG', 'RCREG', 'CCPR2L', 'CCPR2H', 'CCP2CON', 'OPTION', 'TRISA', 'TRISB', 'TRISC',
+ 'TRISD', 'TRISE', 'PIE2', 'PIE1', 'PR2', 'SSPADD', 'SSPSTAT', 'TXSTA', 'SPBRG'
+ ),
+ /*Operands*/
+ 5 => array(
+ 'high','low'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00007f;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #007f00;',
+ 4 => 'color: #46aa03; font-weight:bold;',
+ 5 => 'color: #7f0000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #ff0000;',
+ 1 => 'color: #ff0000;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers
+ 0 => '[0-9a-fA-F]{1,32}[hH]',
+ //Binary numbers
+ 1 => '[01]{1,64}[bB]'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php
new file mode 100644
index 000000000..d34a92531
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php
@@ -0,0 +1,145 @@
+<?php
+/*************************************************************************************
+ * mxml.php
+ * -------
+ * Author: David Spurr
+ * Copyright: (c) 2007 David Spurr (http://www.defusion.org.uk/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/10/04
+ *
+ * MXML language file for GeSHi. Based on the XML file by Nigel McNie
+ *
+ * CHANGES
+ * -------
+ * 2007/10/04 (1.0.7.22)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'MXML',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('<!--' => '-->'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ 0 => 'color: #00bbdd;',
+ 1 => 'color: #ddbb00;',
+ 2 => 'color: #339933;',
+ 3 => 'color: #000000;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'font-weight: bold; color: black;',
+ 1 => 'color: #7400FF;',
+ 2 => 'color: #7400FF;'
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // xml declaration
+ 0 => array(
+ GESHI_SEARCH => '(&lt;[\/?|(\?xml)]?[a-z0-9_\-:]*(\?&gt;))',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // opening tags
+ 1 => array(
+ GESHI_SEARCH => '(&lt;\/?[a-z]+:[a-z]+)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // closing tags
+ 2 => array(
+ GESHI_SEARCH => '(\/?&gt;)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 1 => array(
+ '&' => ';'
+ ),
+ 2 => array(
+ //'<![CDATA[' => ']]>'
+ '<mx:Script>' => '</mx:Script>'
+ ),
+ 3 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php
new file mode 100644
index 000000000..f41092c16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php
@@ -0,0 +1,475 @@
+<?php
+/*************************************************************************************
+ * mysql.php
+ * ---------
+ * Author: Marjolein Katsma (marjolein.is.back@gmail.com)
+ * Copyright: (c) 2008 Marjolein Katsma (http://blog.marjoleinkatsma.com/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008-12-12
+ *
+ * MySQL language file for GeSHi.
+ *
+ * Based on original MySQL language file by Carl Fürstenberg (2004); brought
+ * up-to-date for current MySQL versions, and with more classes for different
+ * types of keywords; several minor errors were corrected as well.
+ *
+ * Some "classes" have two groups here: this is to allow for the fact that some
+ * keywords in MySQL have a double function: many of those are either a function
+ * (must be immediately followed by an opening bracket) or some other keyword:
+ * so they can be distinguished by the presence (or not) of that opening bracket.
+ * (An immediately following opening bracket is a default rule for functions in
+ * MySQL, though this may be overridden; because it's only a default, we use a
+ * regex lookahead only where necessary to distinguish homonyms, not generally
+ * to match any function.)
+ * Other keywords with double usage cannot be distinguished and are classified
+ * in the "Mix" category.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'MySQL',
+ //'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'), // '--' MUST be folowed by whitespace,not necessarily a space
+ 'COMMENT_SINGLE' => array(
+ 1 =>'-- ',
+ 2 => '#'
+ ),
+ 'COMMENT_REGEXP' => array(
+ 1 => "/(?:--\s).*?$/", // double dash followed by any whitespace
+ ),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, // @@@ would be nice if this could be defined per group!
+ 'QUOTEMARKS' => array("'", '"', '`'),
+ 'ESCAPE_CHAR' => '\\', // by default only, can be specified
+ 'ESCAPE_REGEXP' => array(
+ 1 => "/[_%]/", // search wildcards
+ ),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_OCT_PREFIX |
+ GESHI_NUMBER_HEX_PREFIX |
+ GESHI_NUMBER_FLT_NONSCI |
+ GESHI_NUMBER_FLT_SCI_SHORT |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ // Mix: statement keywords and keywords that don't fit in any other
+ // category, or have multiple usage/meanings
+ 'ACTION','ADD','AFTER','ALGORITHM','ALL','ALTER','ANALYZE','ANY',
+ 'ASC','AS','BDB','BEGIN','BERKELEYDB','BINARY','BTREE','CALL',
+ 'CASCADED','CASCADE','CHAIN','CHECK','COLUMNS','COLUMN','COMMENT',
+ 'COMMIT','COMMITTED','CONSTRAINT','CONTAINS SQL','CONSISTENT',
+ 'CONVERT','CREATE','CROSS','DATA','DATABASES',
+ 'DECLARE','DEFINER','DELAYED','DELETE','DESCRIBE','DESC',
+ 'DETERMINISTIC','DISABLE','DISCARD','DISTINCTROW','DISTINCT','DO',
+ 'DROP','DUMPFILE','DUPLICATE KEY','ENABLE','ENCLOSED BY','ENGINE',
+ 'ERRORS','ESCAPED BY','EXISTS','EXPLAIN','EXTENDED','FIELDS',
+ 'FIRST','FOR EACH ROW','FORCE','FOREIGN KEY','FROM','FULL',
+ 'FUNCTION','GLOBAL','GRANT','GROUP BY','HANDLER','HASH','HAVING',
+ 'HELP','HIGH_PRIORITY','IF NOT EXISTS','IGNORE','IMPORT','INDEX',
+ 'INFILE','INNER','INNODB','INOUT','INTO','INVOKER',
+ 'ISOLATION LEVEL','JOIN','KEYS','KEY','KILL','LANGUAGE SQL','LAST',
+ 'LIMIT','LINES','LOAD','LOCAL','LOCK','LOW_PRIORITY',
+ 'MASTER_SERVER_ID','MATCH','MERGE','MIDDLEINT','MODIFIES SQL DATA',
+ 'MODIFY','MRG_MYISAM','NATURAL','NEXT','NO SQL','NO','ON',
+ 'OPTIMIZE','OPTIONALLY','OPTION','ORDER BY','OUTER','OUTFILE','OUT',
+ 'PARTIAL','PREV','PRIMARY KEY','PRIVILEGES','PROCEDURE','PURGE',
+ 'QUICK','READS SQL DATA','READ','REFERENCES','RELEASE','RENAME',
+ 'REPEATABLE','REQUIRE','RESTRICT','RETURNS','REVOKE',
+ 'ROLLBACK','ROUTINE','RTREE','SAVEPOINT','SELECT',
+ 'SERIALIZABLE','SESSION','SET','SHARE MODE','SHOW','SIMPLE',
+ 'SNAPSHOT','SOME','SONAME','SQL SECURITY','SQL_BIG_RESULT',
+ 'SQL_BUFFER_RESULT','SQL_CACHE','SQL_CALC_FOUND_ROWS',
+ 'SQL_NO_CACHE','SQL_SMALL_RESULT','SSL','START','STARTING BY',
+ 'STATUS','STRAIGHT_JOIN','STRIPED','TABLESPACE','TABLES','TABLE',
+ 'TEMPORARY','TEMPTABLE','TERMINATED BY','TO','TRANSACTIONS',
+ 'TRANSACTION','TRIGGER','TYPES','TYPE','UNCOMMITTED','UNDEFINED',
+ 'UNION','UNLOCK_TABLES','UPDATE','USAGE','USE','USER_RESOURCES',
+ 'USING','VALUES','VALUE','VIEW','WARNINGS','WHERE','WITH ROLLUP',
+ 'WITH','WORK','WRITE',
+ ),
+ 2 => array( //No ( must follow
+ // Mix: statement keywords distinguished from functions by the same name
+ "CURRENT_USER", "DATABASE", "IN", "INSERT", "DEFAULT", "REPLACE", "SCHEMA", "TRUNCATE"
+ ),
+ 3 => array(
+ // Values (Constants)
+ 'FALSE','NULL','TRUE',
+ ),
+ 4 => array(
+ // Column Data Types
+ 'BIGINT','BIT','BLOB','BOOLEAN','BOOL','CHARACTER VARYING',
+ 'CHAR VARYING','DATETIME','DECIMAL','DEC','DOUBLE PRECISION',
+ 'DOUBLE','ENUM','FIXED','FLOAT','GEOMETRYCOLLECTION','GEOMETRY',
+ 'INTEGER','INT','LINESTRING','LONGBLOB','LONGTEXT','MEDIUMBLOB',
+ 'MEDIUMINT','MEDIUMTEXT','MULTIPOINT','MULTILINESTRING',
+ 'MULTIPOLYGON','NATIONAL CHARACTER','NATIONAL CHARACTER VARYING',
+ 'NATIONAL CHAR VARYING','NATIONAL VARCHAR','NCHAR VARCHAR','NCHAR',
+ 'NUMERIC','POINT','POLYGON','REAL','SERIAL',
+ 'SMALLINT','TEXT','TIMESTAMP','TINYBLOB','TINYINT',
+ 'TINYTEXT','VARBINARY','VARCHARACTER','VARCHAR',
+ ),
+ 5 => array( //No ( must follow
+ // Column data types distinguished from functions by the same name
+ "CHAR", "DATE", "TIME"
+ ),
+ 6 => array(
+ // Table, Column & Index Attributes
+ 'AUTO_INCREMENT','AVG_ROW_LENGTH','BOTH','CHECKSUM','CONNECTION',
+ 'DATA DIRECTORY','DEFAULT NULL','DELAY_KEY_WRITE','FULLTEXT',
+ 'INDEX DIRECTORY','INSERT_METHOD','LEADING','MAX_ROWS','MIN_ROWS',
+ 'NOT NULL','PACK_KEYS','ROW_FORMAT','SERIAL DEFAULT VALUE','SIGNED',
+ 'SPATIAL','TRAILING','UNIQUE','UNSIGNED','ZEROFILL'
+ ),
+ 7 => array( //No ( must follow
+ // Column attribute distinguished from function by the same name
+ "CHARSET"
+ ),
+ 8 => array(
+ // Date and Time Unit Specifiers
+ 'DAY_HOUR','DAY_MICROSECOND','DAY_MINUTE','DAY_SECOND',
+ 'HOUR_MICROSECOND','HOUR_MINUTE','HOUR_SECOND',
+ 'MINUTE_MICROSECOND','MINUTE_SECOND',
+ 'SECOND_MICROSECOND','YEAR_MONTH'
+ ),
+ 9 => array( //No ( must follow
+ // Date-time unit specifiers distinguished from functions by the same name
+ "DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER", "SECOND", "WEEK", "YEAR"
+ ),
+ 10 => array(
+ // Operators (see also Symbols)
+ 'AND','BETWEEN','CHARACTER SET','COLLATE','DIV','IS NOT NULL',
+ 'IS NOT','IS NULL','IS','LIKE','NOT','OFFSET','OR','REGEXP','RLIKE',
+ 'SOUNDS LIKE','XOR'
+ ),
+ 11 => array( //No ( must follow
+ // Operator distinghuished from function by the same name
+ "INTERVAL"
+ ),
+ 12 => array(
+ // Control Flow (functions)
+ 'CASE','ELSE','END','IFNULL','IF','NULLIF','THEN','WHEN',
+ ),
+ 13 => array(
+ // String Functions
+ 'ASCII','BIN','BIT_LENGTH','CHAR_LENGTH','CHARACTER_LENGTH',
+ 'CONCAT_WS','CONCAT','ELT','EXPORT_SET','FIELD',
+ 'FIND_IN_SET','FORMAT','HEX','INSTR','LCASE','LEFT','LENGTH',
+ 'LOAD_FILE','LOCATE','LOWER','LPAD','LTRIM','MAKE_SET','MID',
+ 'OCTET_LENGTH','ORD','POSITION','QUOTE','REPEAT','REVERSE',
+ 'RIGHT','RPAD','RTRIM','SOUNDEX','SPACE','STRCMP','SUBSTRING_INDEX',
+ 'SUBSTRING','TRIM','UCASE','UNHEX','UPPER',
+ ),
+ 14 => array( //A ( must follow
+ // String functions distinguished from other keywords by the same name
+ "INSERT", "REPLACE", "CHAR"
+ ),
+ 15 => array(
+ // Numeric Functions
+ 'ABS','ACOS','ASIN','ATAN2','ATAN','CEILING','CEIL',
+ 'CONV','COS','COT','CRC32','DEGREES','EXP','FLOOR','LN','LOG10',
+ 'LOG2','LOG','MOD','OCT','PI','POWER','POW','RADIANS','RAND',
+ 'ROUND','SIGN','SIN','SQRT','TAN',
+ ),
+ 16 => array( //A ( must follow
+ // Numeric function distinguished from other keyword by the same name
+ "TRUNCATE"
+ ),
+ 17 => array(
+ // Date and Time Functions
+ 'ADDDATE','ADDTIME','CONVERT_TZ','CURDATE','CURRENT_DATE',
+ 'CURRENT_TIME','CURRENT_TIMESTAMP','CURTIME','DATE_ADD',
+ 'DATE_FORMAT','DATE_SUB','DATEDIFF','DAYNAME','DAYOFMONTH',
+ 'DAYOFWEEK','DAYOFYEAR','EXTRACT','FROM_DAYS','FROM_UNIXTIME',
+ 'GET_FORMAT','LAST_DAY','LOCALTIME','LOCALTIMESTAMP','MAKEDATE',
+ 'MAKETIME','MONTHNAME','NOW','PERIOD_ADD',
+ 'PERIOD_DIFF','SEC_TO_TIME','STR_TO_DATE','SUBDATE','SUBTIME',
+ 'SYSDATE','TIME_FORMAT','TIME_TO_SEC',
+ 'TIMESTAMPADD','TIMESTAMPDIFF','TO_DAYS',
+ 'UNIX_TIMESTAMP','UTC_DATE','UTC_TIME','UTC_TIMESTAMP','WEEKDAY',
+ 'WEEKOFYEAR','YEARWEEK',
+ ),
+ 18 => array( //A ( must follow
+ // Date-time functions distinguished from other keywords by the same name
+ "DATE", "DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER",
+ "SECOND", "TIME", "WEEK", "YEAR"
+ ),
+ 19 => array(
+ // Comparison Functions
+ 'COALESCE','GREATEST','ISNULL','LEAST',
+ ),
+ 20 => array( //A ( must follow
+ // Comparison functions distinguished from other keywords by the same name
+ "IN", "INTERVAL"
+ ),
+ 21 => array(
+ // Encryption and Compression Functions
+ 'AES_DECRYPT','AES_ENCRYPT','COMPRESS','DECODE','DES_DECRYPT',
+ 'DES_ENCRYPT','ENCODE','ENCRYPT','MD5','OLD_PASSWORD','PASSWORD',
+ 'SHA1','SHA','UNCOMPRESS','UNCOMPRESSED_LENGTH',
+ ),
+ 22 => array(
+ // GROUP BY (aggregate) Functions
+ 'AVG','BIT_AND','BIT_OR','BIT_XOR','COUNT','GROUP_CONCAT',
+ 'MAX','MIN','STDDEV_POP','STDDEV_SAMP','STDDEV','STD','SUM',
+ 'VAR_POP','VAR_SAMP','VARIANCE',
+ ),
+ 23 => array(
+ // Information Functions
+ 'BENCHMARK','COERCIBILITY','COLLATION','CONNECTION_ID',
+ 'FOUND_ROWS','LAST_INSERT_ID','ROW_COUNT',
+ 'SESSION_USER','SYSTEM_USER','USER','VERSION',
+ ),
+ 24 => array( //A ( must follow
+ // Information functions distinguished from other keywords by the same name
+ "CURRENT_USER", "DATABASE", "SCHEMA", "CHARSET"
+ ),
+ 25 => array(
+ // Miscellaneous Functions
+ 'ExtractValue','BIT_COUNT','GET_LOCK','INET_ATON','INET_NTOA',
+ 'IS_FREE_LOCK','IS_USED_LOCK','MASTER_POS_WAIT','NAME_CONST',
+ 'RELEASE_LOCK','SLEEP','UpdateXML','UUID',
+ ),
+ 26 => array( //A ( must follow
+ // Miscellaneous function distinguished from other keyword by the same name
+ "DEFAULT"
+ ),
+ 27 => array(
+ // Geometry Functions
+ 'Area','AsBinary','AsText','AsWKB','AsWKT','Boundary','Buffer',
+ 'Centroid','Contains','ConvexHull','Crosses',
+ 'Difference','Dimension','Disjoint','Distance',
+ 'EndPoint','Envelope','Equals','ExteriorRing',
+ 'GLength','GeomCollFromText','GeomCollFromWKB','GeomFromText',
+ 'GeomFromWKB','GeometryCollectionFromText',
+ 'GeometryCollectionFromWKB','GeometryFromText','GeometryFromWKB',
+ 'GeometryN','GeometryType',
+ 'InteriorRingN','Intersection','Intersects','IsClosed','IsEmpty',
+ 'IsRing','IsSimple',
+ 'LineFromText','LineFromWKB','LineStringFromText',
+ 'LineStringFromWKB',
+ 'MBRContains','MBRDisjoint','MBREqual','MBRIntersects',
+ 'MBROverlaps','MBRTouches','MBRWithin','MLineFromText',
+ 'MLineFromWKB','MPointFromText','MPointFromWKB','MPolyFromText',
+ 'MPolyFromWKB','MultiLineStringFromText','MultiLineStringFromWKB',
+ 'MultiPointFromText','MultiPointFromWKB','MultiPolygonFromText',
+ 'MultiPolygonFromWKB',
+ 'NumGeometries','NumInteriorRings','NumPoints',
+ 'Overlaps',
+ 'PointFromText','PointFromWKB','PointN','PointOnSurface',
+ 'PolyFromText','PolyFromWKB','PolygonFromText','PolygonFromWKB',
+ 'Related','SRID','StartPoint','SymDifference',
+ 'Touches',
+ 'Union',
+ 'Within',
+ 'X',
+ 'Y',
+ ),
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ /* Operators */
+ '=', ':=', // assignment operators
+ '||', '&&', '!', // locical operators
+ '=', '<=>', '>=', '>', '<=', '<', '<>', '!=', // comparison operators
+ '|', '&', '^', '~', '<<', '>>', // bitwise operators
+ '-', '+', '*', '/', '%', // numerical operators
+ ),
+ 2 => array(
+ /* Other syntactical symbols */
+ '(', ')',
+ ',', ';',
+ ),
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false,
+ 17 => false,
+ 18 => false,
+ 19 => false,
+ 20 => false,
+ 21 => false,
+ 22 => false,
+ 23 => false,
+ 24 => false,
+ 25 => false,
+ 26 => false,
+ 27 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #990099; font-weight: bold;', // mix
+ 2 => 'color: #990099; font-weight: bold;', // mix
+ 3 => 'color: #9900FF; font-weight: bold;', // constants
+ 4 => 'color: #999900; font-weight: bold;', // column data types
+ 5 => 'color: #999900; font-weight: bold;', // column data types
+ 6 => 'color: #FF9900; font-weight: bold;', // attributes
+ 7 => 'color: #FF9900; font-weight: bold;', // attributes
+ 8 => 'color: #9900FF; font-weight: bold;', // date-time units
+ 9 => 'color: #9900FF; font-weight: bold;', // date-time units
+
+ 10 => 'color: #CC0099; font-weight: bold;', // operators
+ 11 => 'color: #CC0099; font-weight: bold;', // operators
+
+ 12 => 'color: #009900;', // control flow (functions)
+ 13 => 'color: #000099;', // string functions
+ 14 => 'color: #000099;', // string functions
+ 15 => 'color: #000099;', // numeric functions
+ 16 => 'color: #000099;', // numeric functions
+ 17 => 'color: #000099;', // date-time functions
+ 18 => 'color: #000099;', // date-time functions
+ 19 => 'color: #000099;', // comparison functions
+ 20 => 'color: #000099;', // comparison functions
+ 21 => 'color: #000099;', // encryption functions
+ 22 => 'color: #000099;', // aggregate functions
+ 23 => 'color: #000099;', // information functions
+ 24 => 'color: #000099;', // information functions
+ 25 => 'color: #000099;', // miscellaneous functions
+ 26 => 'color: #000099;', // miscellaneous functions
+ 27 => 'color: #00CC00;', // geometry functions
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #808000; font-style: italic;',
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #004000; font-weight: bold;',
+ 1 => 'color: #008080; font-weight: bold;' // search wildcards
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #FF00FF;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #008080;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 1 => 'color: #CC0099;', // operators
+ 2 => 'color: #000033;', // syntax
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 2 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 3 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 4 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 5 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 6 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 7 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 8 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+ 9 => 'http://search.mysql.com/search?site=refman-51&amp;q={FNAME}&amp;lr=lang_en',
+
+ 10 => 'http://dev.mysql.com/doc/refman/5.1/en/non-typed-operators.html',
+ 11 => 'http://dev.mysql.com/doc/refman/5.1/en/non-typed-operators.html',
+
+ 12 => 'http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html',
+ 13 => 'http://dev.mysql.com/doc/refman/5.1/en/string-functions.html',
+ 14 => 'http://dev.mysql.com/doc/refman/5.1/en/string-functions.html',
+ 15 => 'http://dev.mysql.com/doc/refman/5.1/en/numeric-functions.html',
+ 16 => 'http://dev.mysql.com/doc/refman/5.1/en/numeric-functions.html',
+ 17 => 'http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html',
+ 18 => 'http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html',
+ 19 => 'http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html',
+ 20 => 'http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html',
+ 21 => 'http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html',
+ 22 => 'http://dev.mysql.com/doc/refman/5.1/en/group-by-functions-and-modifiers.html',
+ 23 => 'http://dev.mysql.com/doc/refman/5.1/en/information-functions.html',
+ 24 => 'http://dev.mysql.com/doc/refman/5.1/en/information-functions.html',
+ 25 => 'http://dev.mysql.com/doc/refman/5.1/en/func-op-summary-ref.html',
+ 26 => 'http://dev.mysql.com/doc/refman/5.1/en/func-op-summary-ref.html',
+ 27 => 'http://dev.mysql.com/doc/refman/5.1/en/analysing-spatial-information.html',
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 2 => array(
+ 'DISALLOWED_AFTER' => '(?![\(\w])'
+ ),
+ 5 => array(
+ 'DISALLOWED_AFTER' => '(?![\(\w])'
+ ),
+ 7 => array(
+ 'DISALLOWED_AFTER' => '(?![\(\w])'
+ ),
+ 9 => array(
+ 'DISALLOWED_AFTER' => '(?![\(\w])'
+ ),
+ 11 => array(
+ 'DISALLOWED_AFTER' => '(?![\(\w])'
+ ),
+
+ 14 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ ),
+ 16 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ ),
+ 18 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ ),
+ 20 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ ),
+ 24 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ ),
+ 26 => array(
+ 'DISALLOWED_AFTER' => '(?=\()'
+ )
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php
new file mode 100644
index 000000000..63767b025
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php
@@ -0,0 +1,351 @@
+<?php
+/*************************************************************************************
+ * nsis.php
+ * --------
+ * Author: deguix (cevo_deguix@yahoo.com.br), Tux (http://tux.a4.cz/)
+ * Copyright: (c) 2005 deguix, 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/12/03
+ *
+ * Nullsoft Scriptable Install System language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/12/03 (2.0.2)
+ * - Updated to NSIS 2.11.
+ * 2005/06/17 (2.0.1)
+ * - Updated to NSIS 2.07b0.
+ * 2005/04/05 (2.0.0)
+ * - Updated to NSIS 2.06.
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'NSIS',
+ 'COMMENT_SINGLE' => array(1 => ';', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'",'"','`'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '!appendfile', '!addIncludeDir', '!addplugindir', '!cd', '!define', '!delfile', '!echo', '!else',
+ '!endif', '!error', '!execute', '!ifdef', '!ifmacrodef', '!ifmacrondef', '!ifndef', '!include',
+ '!insertmacro', '!macro', '!macroend', '!packhdr', '!tempfile', '!system', '!undef', '!verbose',
+ '!warning'
+ ),
+ 2 => array(
+ 'AddBrandingImage', 'AllowRootDirInstall', 'AutoCloseWindow', 'BGFont',
+ 'BGGradient', 'BrandingText', 'Caption', 'ChangeUI', 'CheckBitmap', 'CompletedText', 'ComponentText',
+ 'CRCCheck', 'DetailsButtonText', 'DirShow', 'DirText', 'DirVar', 'DirVerify', 'FileErrorText',
+ 'Function', 'FunctionEnd', 'Icon', 'InstallButtonText', 'InstallColors', 'InstallDir',
+ 'InstallDirRegKey', 'InstProgressFlags', 'InstType', 'LangString', 'LangStringUP', 'LicenseBkColor',
+ 'LicenseData', 'LicenseForceSelection', 'LicenseLangString', 'LicenseText', 'LoadLanguageFile',
+ 'MiscButtonText', 'Name', 'OutFile', 'Page', 'PageEx', 'PageExEnd', 'Section',
+ 'SectionEnd', 'SectionGroup', 'SectionGroupEnd', 'SetCompressor', 'SetFont', 'ShowInstDetails',
+ 'ShowUninstDetails', 'SilentInstall', 'SilentUnInstall', 'SpaceTexts', 'SubCaption', 'SubSection',
+ 'SubSectionEnd', 'UninstallButtonText', 'UninstallCaption', 'UninstallIcon', 'UninstallSubCaption',
+ 'UninstallText', 'UninstPage', 'Var', 'VIAddVersionKey', 'VIProductVersion', 'WindowIcon', 'XPStyle'
+ ),
+ 3 => array(
+ 'AddSize', 'AllowSkipFiles', 'FileBufSize', 'GetInstDirError', 'PageCallbacks',
+ 'SectionIn', 'SetCompress', 'SetCompressionLevel', 'SetCompressorDictSize',
+ 'SetDatablockOptimize', 'SetDateSave', 'SetOverwrite', 'SetPluginUnload'
+ ),
+ 4 => array(
+ 'Abort', 'BringToFront', 'Call', 'CallInstDLL', 'ClearErrors', 'CopyFiles','CreateDirectory',
+ 'CreateFont', 'CreateShortCut', 'Delete', 'DeleteINISec', 'DeleteINIStr', 'DeleteRegKey',
+ 'DeleteRegValue', 'DetailPrint', 'EnableWindow', 'EnumRegKey', 'EnumRegValue', 'Exch', 'Exec',
+ 'ExecShell', 'ExecWait', 'ExpandEnvStrings', 'File', 'FileClose', 'FileOpen', 'FileRead',
+ 'FileReadByte', 'FileSeek', 'FileWrite', 'FileWriteByte', 'FindClose', 'FindFirst', 'FindNext',
+ 'FindWindow', 'FlushINI', 'GetCurInstType', 'GetCurrentAddress', 'GetDlgItem', 'GetDLLVersion',
+ 'GetDLLVersionLocal', 'GetErrorLevel', 'GetFileTime', 'GetFileTimeLocal', 'GetFullPathName',
+ 'GetFunctionAddress', 'GetLabelAddress', 'GetTempFileName', 'GetWindowText', 'Goto', 'HideWindow',
+ 'IfAbort', 'IfErrors', 'IfFileExists', 'IfRebootFlag', 'IfSilent', 'InitPluginsDir', 'InstTypeGetText',
+ 'InstTypeSetText', 'IntCmp', 'IntCmpU', 'IntFmt', 'IntOp', 'IsWindow', 'LockWindow', 'LogSet', 'LogText',
+ 'MessageBox', 'Nop', 'Pop', 'Push', 'Quit', 'ReadEnvStr', 'ReadIniStr', 'ReadRegDWORD', 'ReadRegStr',
+ 'Reboot', 'RegDLL', 'Rename', 'ReserveFile', 'Return', 'RMDir', 'SearchPath', 'SectionGetFlags',
+ 'SectionGetInstTypes', 'SectionGetSize', 'SectionGetText', 'SectionSetFlags', 'SectionSetInstTypes',
+ 'SectionSetSize', 'SectionSetText', 'SendMessage', 'SetAutoClose', 'SetBrandingImage', 'SetCtlColors',
+ 'SetCurInstType', 'SetDetailsPrint', 'SetDetailsView', 'SetErrorLevel', 'SetErrors', 'SetFileAttributes',
+ 'SetOutPath', 'SetRebootFlag', 'SetShellVarContext', 'SetSilent', 'ShowWindow', 'Sleep', 'StrCmp',
+ 'StrCpy', 'StrLen', 'UnRegDLL', 'WriteINIStr', 'WriteRegBin', 'WriteRegDWORD', 'WriteRegExpandStr',
+ 'WriteRegStr', 'WriteUninstaller'
+ ),
+ 5 => array(
+ 'all', 'alwaysoff', 'ARCHIVE', 'auto', 'both', 'bzip2', 'checkbox', 'components', 'current',
+ 'custom', 'directory', 'false', 'FILE_ATTRIBUTE_ARCHIVE', 'FILE_ATTRIBUTE_HIDDEN', 'FILE_ATTRIBUTE_NORMAL',
+ 'FILE_ATTRIBUTE_OFFLINE', 'FILE_ATTRIBUTE_READONLY', 'FILE_ATTRIBUTE_SYSTEM,TEMPORARY',
+ 'FILE_ATTRIBUTE_TEMPORARY', 'force', 'HIDDEN', 'hide', 'HKCC', 'HKCR', 'HKCU', 'HKDD', 'HKEY_CLASSES_ROOT',
+ 'HKEY_CURRENT_CONFIG', 'HKEY_CURRENT_USER', 'HKEY_DYN_DATA', 'HKEY_LOCAL_MACHINE', 'HKEY_PERFORMANCE_DATA',
+ 'HKEY_USERS', 'HKLM', 'HKPD', 'HKU', 'IDABORT', 'IDCANCEL', 'IDIGNORE', 'IDNO', 'IDOK', 'IDRETRY', 'IDYES',
+ 'ifdiff', 'ifnewer', 'instfiles', 'lastused', 'leave', 'license', 'listonly', 'lzma', 'manual',
+ 'MB_ABORTRETRYIGNORE', 'MB_DEFBUTTON1', 'MB_DEFBUTTON2', 'MB_DEFBUTTON3', 'MB_DEFBUTTON4',
+ 'MB_ICONEXCLAMATION', 'MB_ICONINFORMATION', 'MB_ICONQUESTION', 'MB_ICONSTOP', 'MB_OK', 'MB_OKCANCEL',
+ 'MB_RETRYCANCEL', 'MB_RIGHT', 'MB_SETFOREGROUND', 'MB_TOPMOST', 'MB_YESNO', 'MB_YESNOCANCEL', 'nevershow',
+ 'none', 'normal', 'off', 'OFFLINE', 'on', 'radiobuttons', 'READONLY', 'RO', 'SHCTX', 'SHELL_CONTEXT', 'show',
+ 'silent', 'silentlog', 'SW_HIDE', 'SW_SHOWMAXIMIZED', 'SW_SHOWMINIMIZED', 'SW_SHOWNORMAL', 'SYSTEM',
+ 'textonly', 'true', 'try', 'uninstConfirm', 'zlib'
+ ),
+ 6 => array(
+ '/a', '/components', '/COMPONENTSONLYONCUSTOM', '/CUSTOMSTRING', '/e', '/FILESONLY', '/FINAL', '/gray', '/GLOBAL',
+ '/ifempty', '/IMGID', '/ITALIC', '/lang', '/NOCUSTOM', '/nonfatal', '/NOUNLOAD', '/oname', '/r', '/REBOOTOK',
+ '/RESIZETOFIT', '/SOLID', '/SD', '/SHORT', '/silent', '/STRIKE', '/TIMEOUT', '/TRIMCENTER', '/TRIMLEFT',
+ '/TRIMRIGHT', '/UNDERLINE', '/windows', '/x'
+ ),
+ 7 => array(
+ '.onGUIEnd', '.onGUIInit', '.onInit', '.onInstFailed', '.onInstSuccess', '.onMouseOverSection',
+ '.onRebootFailed', '.onSelChange', '.onUserAbort', '.onVerifyInstDir', 'un.onGUIEnd', 'un.onGUIInit',
+ 'un.onInit', 'un.onRebootFailed', 'un.onUninstFailed', 'un.onUninstSuccess', 'un.onUserAbort'
+ ),
+ 8 => array(
+ 'MUI.nsh', '"${NSISDIR}\Contrib\Modern UI\System.nsh"', 'MUI_SYSVERSION', 'MUI_ICON', 'MUI_UNICON',
+ 'MUI_HEADERIMAGE', 'MUI_HEADERIMAGE_BITMAP', 'MUI_HEADERIMAGE_BITMAP_NOSTRETCH', 'MUI_HEADERIMAGE_BITMAP_RTL',
+ 'MUI_HEADERIMAGE_BITMAP_RTL_NOSTRETCH', 'MUI_HEADERIMAGE_UNBITMAP', 'MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH',
+ 'MUI_HEADERIMAGE_UNBITMAP_RTL', 'MUI_HEADERIMAGE_UNBITMAP_RTL_NOSTRETCH', 'MUI_HEADERIMAGE_RIGHT', 'MUI_BGCOLOR',
+ 'MUI_UI', 'MUI_UI_HEADERIMAGE', 'MUI_UI_HEADERIMAGE_RIGHT', 'MUI_UI_COMPONENTSPAGE_SMALLDESC',
+ 'MUI_UI_COMPONENTSPAGE_NODESC', 'MUI_WELCOMEFINISHPAGE_BITMAP', 'MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH',
+ 'MUI_WELCOMEFINISHPAGE_INI', 'MUI_UNWELCOMEFINISHPAGE_BITMAP', 'MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH',
+ 'MUI_UNWELCOMEFINISHPAGE_INI', 'MUI_LICENSEPAGE_BGCOLOR', 'MUI_COMPONENTSPAGE_CHECKBITMAP',
+ 'MUI_COMPONENTSPAGE_SMALLDESC', 'MUI_COMPONENTSPAGE_NODESC', 'MUI_INSTFILESPAGE_COLORS',
+ 'MUI_INSTFILESPAGE_PROGRESSBAR', 'MUI_FINISHPAGE_NOAUTOCLOSE', 'MUI_UNFINISHPAGE_NOAUTOCLOSE',
+ 'MUI_ABORTWARNING', 'MUI_ABORTWARNING_TEXT', 'MUI_UNABORTWARNING', 'MUI_UNABORTWARNING_TEXT',
+ 'MUI_PAGE_WELCOME', 'MUI_PAGE_LICENSE', 'MUI_PAGE_COMPONENTS', 'MUI_PAGE_DIRECTORY',
+ 'MUI_PAGE_STARTMENU', 'MUI_PAGE_INSTFILES', 'MUI_PAGE_FINISH', 'MUI_UNPAGE_WELCOME',
+ 'MUI_UNPAGE_CONFIRM', 'MUI_UNPAGE_LICENSE', 'MUI_UNPAGE_COMPONENTS', 'MUI_UNPAGE_DIRECTORY',
+ 'MUI_UNPAGE_INSTFILES', 'MUI_UNPAGE_FINISH', 'MUI_PAGE_HEADER_TEXT', 'MUI_PAGE_HEADER_SUBTEXT',
+ 'MUI_WELCOMEPAGE_TITLE', 'MUI_WELCOMEPAGE_TITLE_3LINES', 'MUI_WELCOMEPAGE_TEXT',
+ 'MUI_LICENSEPAGE_TEXT_TOP', 'MUI_LICENSEPAGE_TEXT_BOTTOM', 'MUI_LICENSEPAGE_BUTTON',
+ 'MUI_LICENSEPAGE_CHECKBOX', 'MUI_LICENSEPAGE_CHECKBOX_TEXT', 'MUI_LICENSEPAGE_RADIOBUTTONS',
+ 'MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_ACCEPT', 'MUI_LICENSEPAGE_RADIOBUTTONS_TEXT_DECLINE',
+ 'MUI_COMPONENTSPAGE_TEXT_TOP', 'MUI_COMPONENTSPAGE_TEXT_COMPLIST', 'MUI_COMPONENTSPAGE_TEXT_INSTTYPE',
+ 'MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE', 'MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_INFO',
+ 'MUI_DIRECTORYPAGE_TEXT_TOP', 'MUI_DIRECTORYPAGE_TEXT_DESTINATION', 'MUI_DIRECTORYPAGE_VARIABLE',
+ 'MUI_DIRECTORYPAGE_VERIFYONLEAVE', 'MUI_STARTMENU_WRITE_BEGIN', 'MUI_STARTMENU_WRITE_END',
+ 'MUI_STARTMENUPAGE_TEXT_TOP', 'MUI_STARTMENUPAGE_TEXT_CHECKBOX', 'MUI_STARTMENUPAGE_DEFAULTFOLDER',
+ 'MUI_STARTMENUPAGE_NODISABLE', 'MUI_STARTMENUPAGE_REGISTRY_ROOT', 'MUI_STARTMENUPAGE_REGISTRY_KEY',
+ 'MUI_STARTMENUPAGE_REGISTRY_VALUENAME', 'MUI_INSTFILESPAGE_FINISHHEADER_TEXT',
+ 'MUI_INSTFILESPAGE_FINISHHEADER_SUBTEXT', 'MUI_INSTFILESPAGE_ABORTHEADER_TEXT',
+ 'MUI_INSTFILESPAGE_ABORTHEADER_SUBTEXT', 'MUI_FINISHPAGE_TITLE', 'MUI_FINISHPAGE_TITLE_3LINES',
+ 'MUI_FINISHPAGE_TEXT', 'MUI_FINISHPAGE_TEXT_LARGE', 'MUI_FINISHPAGE_BUTTON',
+ 'MUI_FINISHPAGE_TEXT_REBOOT', 'MUI_FINISHPAGE_TEXT_REBOOTNOW', 'MUI_FINISHPAGE_TEXT_REBOOTLATER',
+ 'MUI_FINISHPAGE_RUN', 'MUI_FINISHPAGE_RUN_TEXT', 'MUI_FINISHPAGE_RUN_PARAMETERS',
+ 'MUI_FINISHPAGE_RUN_NOTCHECKED', 'MUI_FINISHPAGE_RUN_FUNCTION', 'MUI_FINISHPAGE_SHOWREADME',
+ 'MUI_FINISHPAGE_SHOWREADME_TEXT', 'MUI_FINISHPAGE_SHOWREADME_NOTCHECKED',
+ 'MUI_FINISHPAGE_SHOWREADME_FUNCTION', 'MUI_FINISHPAGE_LINK', 'MUI_FINISHPAGE_LINK_LOCATION',
+ 'MUI_FINISHPAGE_LINK_COLOR', 'MUI_FINISHPAGE_NOREBOOTSUPPORT', 'MUI_UNCONFIRMPAGE_TEXT_TOP',
+ 'MUI_UNCONFIRMPAGE_TEXT_LOCATION', 'MUI_LANGUAGE', 'MUI_LANGDLL_DISPLAY',
+ 'MUI_LANGDLL_REGISTRY_ROOT', 'MUI_LANGDLL_REGISTRY_KEY', 'MUI_LANGDLL_REGISTRY_VALUENAME',
+ 'MUI_LANGDLL_WINDOWTITLE', 'MUI_LANGDLL_INFO', 'MUI_LANGDLL_ALWAYSSHOW',
+ 'MUI_RESERVEFILE_INSTALLOPTIONS', 'MUI_RESERVEFILE_LANGDLL', 'MUI_FUNCTION_DESCRIPTION_BEGIN',
+ 'MUI_DESCRIPTION_TEXT', 'MUI_FUNCTION_DESCRIPTION_END', 'MUI_INSTALLOPTIONS_EXTRACT',
+ 'MUI_INSTALLOPTIONS_EXTRACT_AS', 'MUI_HEADER_TEXT', 'MUI_INSTALLOPTIONS_DISPLAY',
+ 'MUI_INSTALLOPTIONS_INITDIALOG', 'MUI_INSTALLOPTIONS_SHOW',
+ 'MUI_INSTALLOPTIONS_DISPLAY_RETURN', 'MUI_INSTALLOPTIONS_SHOW_RETURN',
+ 'MUI_INSTALLOPTIONS_READ', 'MUI_INSTALLOPTIONS_WRITE',
+ 'MUI_CUSTOMFUNCTION_GUIINIT', 'MUI_CUSTOMFUNCTION_UNGUIINIT',
+ 'MUI_CUSTOMFUNCTION_ABORT', 'MUI_CUSTOMFUNCTION_UNABORT',
+ 'MUI_PAGE_CUSTOMFUNCTION_PRE', 'MUI_PAGE_CUSTOMFUNCTION_SHOW', 'MUI_PAGE_CUSTOMFUNCTION_LEAVE',
+ 'MUI_WELCOMEFINISHPAGE_CUSTOMFUNCTION_INIT'
+ ),
+ 9 => array(
+ 'LogicLib.nsh', '${LOGICLIB}', 'LOGICLIB_STRCMP', 'LOGICLIB_INT64CMP', 'LOGICLIB_SECTIONCMP', '${If}', '${Unless}',
+ '${ElseIf}', '${ElseUnless}', '${Else}', '${EndIf}', '${EndUnless}', '${AndIf}', '${AndUnless}',
+ '${OrIf}', '${OrUnless}', '${IfThen}', '${IfCmd}', '${Select}', '${Case2}', '${Case3}',
+ '${Case4}', '${Case5}', '${CaseElse}', '${Default}', '${EndSelect}', '${Switch}',
+ '${Case}', '${EndSwitch}', '${Do}', '${DoWhile}', '${UntilWhile}', '${Continue}', '${Break}',
+ '${Loop}', '${LoopWhile}', '${LoopUntil}', '${While}', '${ExitWhile}', '${EndWhile}', '${For}',
+ '${ForEach}', '${ExitFor}', '${Next}', '${Abort}', '${Errors}', '${RebootFlag}', '${Silent}',
+ '${FileExists}', '${Cmd}', '${SectionIsSelected}', '${SectionIsSectionGroup}',
+ '${SectionIsSectionGroupEnd}', '${SectionIsBold}', '${SectionIsReadOnly}',
+ '${SectionIsExpanded}', '${SectionIsPartiallySelected}'
+ ),
+ 10 => array(
+ 'StrFunc.nsh', '${STRFUNC}', '${StrCase}', '${StrClb}', '${StrIOToNSIS}', '${StrLoc}', '${StrNSISToIO}', '${StrRep}',
+ '${StrSort}', '${StrStr}', '${StrStrAdv}', '${StrTok}', '${StrTrimNewLines}'
+ ),
+ 11 => array(
+ 'UpgradeDLL.nsh', 'UPGRADEDLL_INCLUDED', 'UpgradeDLL'
+ ),
+ 12 => array(
+ 'Sections.nsh', 'SECTIONS_INCLUDED', '${SF_SELECTED}', '${SF_SECGRP}', '${SF_SUBSEC}', '${SF_SECGRPEND}',
+ '${SF_SUBSECEND}', '${SF_BOLD}', '${SF_RO}', '${SF_EXPAND}', '${SF_PSELECTED}', '${SF_TOGGLED}',
+ '${SF_NAMECHG}', '${SECTION_OFF}', 'SelectSection', 'UnselectSection', 'ReverseSection',
+ 'StartRadioButtons', 'RadioButton', 'EndRadioButtons', '${INSTTYPE_0}', '${INSTTYPE_1}', '${INSTTYPE_2}',
+ '${INSTTYPE_3}', '${INSTTYPE_4}', '${INSTTYPE_5}', '${INSTTYPE_6}', '${INSTTYPE_7}', '${INSTTYPE_8}',
+ '${INSTTYPE_9}', '${INSTTYPE_10}', '${INSTTYPE_11}', '${INSTTYPE_12}', '${INSTTYPE_13}', '${INSTTYPE_14}',
+ '${INSTTYPE_15}', '${INSTTYPE_16}', '${INSTTYPE_17}', '${INSTTYPE_18}', '${INSTTYPE_19}', '${INSTTYPE_20}',
+ '${INSTTYPE_21}', '${INSTTYPE_22}', '${INSTTYPE_23}', '${INSTTYPE_24}', '${INSTTYPE_25}', '${INSTTYPE_26}',
+ '${INSTTYPE_27}', '${INSTTYPE_28}', '${INSTTYPE_29}', '${INSTTYPE_30}', '${INSTTYPE_31}', '${INSTTYPE_32}',
+ 'SetSectionInInstType', 'ClearSectionInInstType', 'SetSectionFlag', 'ClearSectionFlag', 'SectionFlagIsSet'
+ ),
+ 13 => array(
+ 'Colors.nsh', 'WHITE', 'BLACK', 'YELLOW', 'RED', 'GREEN', 'BLUE', 'MAGENTA', 'CYAN', 'rgb2hex'
+ ),
+ 14 => array(
+ 'FileFunc.nsh', '${Locate}', '${GetSize}', '${DriveSpace}', '${GetDrives}', '${GetTime}', '${GetFileAttributes}', '${GetFileVersion}', '${GetExeName}', '${GetExePath}', '${GetParameters}', '${GetOptions}', '${GetRoot}', '${GetParent}', '${GetFileName}', '${GetBaseName}', '${GetFileExt}', '${BannerTrimPath}', '${DirState}', '${RefreshShellIcons}'
+ ),
+ 15 => array(
+ 'TextFunc.nsh', '${LineFind}', '${LineRead}', '${FileReadFromEnd}', '${LineSum}', '${FileJoin}', '${TextCompare}', '${ConfigRead}', '${ConfigWrite}', '${FileRecode}', '${TrimNewLines}'
+ ),
+ 16 => array(
+ 'WordFunc.nsh', '${WordFind}', '${WordFind2X}', '${WordFind3X}', '${WordReplace}', '${WordAdd}', '${WordInsert}', '${StrFilter}', '${VersionCompare}', '${VersionConvert}'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false,
+ 10 => false,
+ 11 => false,
+ 12 => false,
+ 13 => false,
+ 14 => false,
+ 15 => false,
+ 16 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000066; font-weight:bold;',
+ 2 => 'color: #000066;',
+ 3 => 'color: #003366;',
+ 4 => 'color: #000099;',
+ 5 => 'color: #ff6600;',
+ 6 => 'color: #ff6600;',
+ 7 => 'color: #006600;',
+ 8 => 'color: #006600;',
+ 9 => 'color: #006600;',
+ 10 => 'color: #006600;',
+ 11 => 'color: #006600;',
+ 12 => 'color: #006600;',
+ 13 => 'color: #006600;',
+ 14 => 'color: #006600;',
+ 15 => 'color: #006600;',
+ 16 => 'color: #006600;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #666666; font-style: italic;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #660066; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => ''
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #660066;'
+ ),
+ 'NUMBERS' => array(
+ 0 => ''
+ ),
+ 'METHODS' => array(
+ 0 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => ''
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #660000;',
+ 1 => 'color: #660000;',
+ 2 => 'color: #660000;',
+ 3 => 'color: #660000;',
+ 4 => 'color: #660000;',
+ 5 => 'color: #660000;',
+ 6 => 'color: #660000;',
+ 7 => 'color: #000099;',
+ 8 => 'color: #003399;'
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => '',
+ 10 => '',
+ 11 => '',
+ 12 => '',
+ 13 => '',
+ 14 => '',
+ 15 => '',
+ 16 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => '\$\$',
+ 1 => '\$\\r',
+ 2 => '\$\\n',
+ 3 => '\$\\t',
+ 4 => '\$[a-zA-Z0-9_]+',
+ 5 => '\$\{.{1,256}\}',
+ 6 => '\$\\\(.{1,256}\\\)',
+ 7 => array(
+ GESHI_SEARCH => '([^:\/\\\*\?\"\<\>(?:<PIPE>)\s]*?)(::)([^:\/\\\*\?\"\<\>(?:<PIPE>)\s]*?)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '\\2\\3'
+ ),
+ 8 => array(
+ GESHI_SEARCH => '([^:\/\\\*\?\"\<\>(?:<PIPE>)\s]*?)(::)([^:\/\\\*\?\"\<\>(?:<PIPE>)]*?\s)',
+ GESHI_REPLACE => '\\3',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1\\2',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php
new file mode 100644
index 000000000..4e4223f4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php
@@ -0,0 +1,135 @@
+<?php
+/*************************************************************************************
+ * oberon2.php
+ * ----------
+ * Author: mbishop (mbishop@esoteriq.org)
+ * Copyright: (c) 2009 mbishop (mbishop@esoteriq.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/02/10
+ *
+ * Oberon-2 language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ *
+ * TODO
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Oberon-2',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("''"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'ARRAY', 'BEGIN', 'BY', 'CASE',
+ 'CONST', 'DIV', 'DO', 'ELSE', 'ELSIF', 'END',
+ 'EXIT', 'FOR', 'IF', 'IMPORT', 'IN', 'IS',
+ 'LOOP', 'MOD', 'MODULE', 'OF',
+ 'OR', 'POINTER', 'PROCEDURE', 'RECORD',
+ 'REPEAT', 'RETURN', 'THEN', 'TO',
+ 'TYPE', 'UNTIL', 'VAR', 'WHILE', 'WITH'
+ ),
+ 2 => array(
+ 'NIL', 'FALSE', 'TRUE',
+ ),
+ 3 => array(
+ 'ABS', 'ASH', 'ASSERT', 'CAP', 'CHR', 'COPY', 'DEC',
+ 'ENTIER', 'EXCL', 'HALT', 'INC', 'INCL', 'LEN',
+ 'LONG', 'MAX', 'MIN', 'NEW', 'ODD', 'ORD', 'SHORT', 'SIZE'
+ ),
+ 4 => array(
+ 'BOOLEAN', 'CHAR', 'SHORTINT', 'LONGINT',
+ 'INTEGER', 'LONGREAL', 'REAL', 'SET', 'PTR'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ ',', ':', '=', '+', '-', '*', '/', '#', '~'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #000066; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0066ee;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php
new file mode 100644
index 000000000..ec8d18e72
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php
@@ -0,0 +1,358 @@
+<?php
+/*************************************************************************************
+ * objc.php
+ * --------
+ * Author: M. Uli Kusterer (witness.of.teachtext@gmx.net)
+ * Contributors: Quinn Taylor (quinntaylor@mac.com)
+ * Copyright: (c) 2008 Quinn Taylor, 2004 M. Uli Kusterer, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * Objective-C language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/11 (1.0.8)
+ * - Added support for @ before strings being highlighted
+ * 2008/06/10 (1.0.7.22)
+ * - Added keywords for Objective-C 2.0 (Leopard+).
+ * - Changed colors to match Xcode 3 highlighting more closely.
+ * - Updated API for AppKit and Foundation; added CoreData classes.
+ * - Updated URLs for AppKit and Foundation; split classes and protocols.
+ * - Sorted all keyword group in reverse-alpha order for correct matching.
+ * - Changed all keyword groups to be case-sensitive.
+ * 2004/11/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Objective-C',
+ 'COMMENT_SINGLE' => array(
+ //Compiler directives
+ 1 => '#',
+ //Single line C-Comments
+ 2 => '//'
+ ),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Multiline Continuation for single-line comment
+ 2 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ //Pseudo-Highlighting of the @-sign before strings
+ 3 => "/@(?=\")/"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+
+ 'KEYWORDS' => array(
+ // Objective-C keywords
+ 1 => array(
+ 'while', 'switch', 'return', 'in', 'if', 'goto', 'foreach', 'for',
+ 'else', 'do', 'default', 'continue', 'case', '@try', '@throw',
+ '@synthesize', '@synchronized', '@selector', '@public', '@protocol',
+ '@protected', '@property', '@private', '@interface',
+ '@implementation', '@finally', '@end', '@encode', '@defs', '@class',
+ '@catch'
+ ),
+ // Macros and constants
+ 2 => array(
+ 'YES', 'USHRT_MAX', 'ULONG_MAX', 'UINT_MAX', 'UCHAR_MAX', 'true',
+ 'TMP_MAX', 'stdout', 'stdin', 'stderr', 'SIGTERM', 'SIGSEGV',
+ 'SIGINT', 'SIGILL', 'SIG_IGN', 'SIGFPE', 'SIG_ERR', 'SIG_DFL',
+ 'SIGABRT', 'SHRT_MIN', 'SHRT_MAX', 'SEEK_SET', 'SEEK_END',
+ 'SEEK_CUR', 'SCHAR_MIN', 'SCHAR_MAX', 'RAND_MAX', 'NULL',
+ 'NO', 'nil', 'Nil', 'L_tmpnam', 'LONG_MIN', 'LONG_MAX',
+ 'LDBL_MIN_EXP', 'LDBL_MIN', 'LDBL_MAX_EXP', 'LDBL_MAX',
+ 'LDBL_MANT_DIG', 'LDBL_EPSILON', 'LDBL_DIG', 'INT_MIN', 'INT_MAX',
+ 'HUGE_VAL', 'FOPEN_MAX', 'FLT_ROUNDS', 'FLT_RADIX', 'FLT_MIN_EXP',
+ 'FLT_MIN', 'FLT_MAX_EXP', 'FLT_MAX', 'FLT_MANT_DIG', 'FLT_EPSILON',
+ 'FLT_DIG', 'FILENAME_MAX', 'false', 'EXIT_SUCCESS', 'EXIT_FAILURE',
+ 'errno', 'ERANGE', 'EOF', 'enum', 'EDOM', 'DBL_MIN_EXP', 'DBL_MIN',
+ 'DBL_MAX_EXP', 'DBL_MAX', 'DBL_MANT_DIG', 'DBL_EPSILON', 'DBL_DIG',
+ 'CLOCKS_PER_SEC', 'CHAR_MIN', 'CHAR_MAX', 'CHAR_BIT', 'BUFSIZ',
+ 'break'
+ ),
+ // C standard library functions
+ 3 => array(
+ 'vsprintf', 'vprintf', 'vfprintf', 'va_start', 'va_end', 'va_arg',
+ 'ungetc', 'toupper', 'tolower', 'tmpname', 'tmpfile', 'time',
+ 'tanh', 'tan', 'system', 'strxfrm', 'strtoul', 'strtol', 'strtok',
+ 'strtod', 'strstr', 'strspn', 'strrchr', 'strpbrk', 'strncpy',
+ 'strncmp', 'strncat', 'strlen', 'strftime', 'strerror', 'strcspn',
+ 'strcpy', 'strcoll', 'strcmp', 'strchr', 'strcat', 'sscanf',
+ 'srand', 'sqrt', 'sprintf', 'snprintf', 'sizeof', 'sinh', 'sin',
+ 'setvbuf', 'setjmp', 'setbuf', 'scanf', 'rewind', 'rename',
+ 'remove', 'realloc', 'rand', 'qsort', 'puts', 'putchar', 'putc',
+ 'printf', 'pow', 'perror', 'offsetof', 'modf', 'mktime', 'memset',
+ 'memmove', 'memcpy', 'memcmp', 'memchr', 'malloc', 'longjmp',
+ 'log10', 'log', 'localtime', 'ldiv', 'ldexp', 'labs', 'isxdigit',
+ 'isupper', 'isspace', 'ispunct', 'isprint', 'islower',
+ 'isgraph', 'isdigit', 'iscntrl', 'isalpha', 'isalnum', 'gmtime',
+ 'gets', 'getenv', 'getchar', 'getc', 'fwrite', 'ftell', 'fsetpos',
+ 'fseek', 'fscanf', 'frexp', 'freopen', 'free', 'fread', 'fputs',
+ 'fputc', 'fprintf', 'fopen', 'fmod', 'floor', 'fgets', 'fgetpos',
+ 'fgetc', 'fflush', 'ferror', 'feof', 'fclose', 'fabs', 'exp',
+ 'exit', 'div', 'difftime', 'ctime', 'cosh', 'cos', 'clock',
+ 'clearerr', 'ceil', 'calloc', 'bsearch', 'atol', 'atoi', 'atof',
+ 'atexit', 'atan2', 'atan', 'assert', 'asin', 'asctime', 'acos',
+ 'abs', 'abort'
+ ),
+ // Data types (C, Objective-C, Cocoa)
+ 4 => array(
+ 'volatile', 'void', 'va_list', 'unsigned', 'union', 'typedef', 'tm',
+ 'time_t', 'struct', 'string', 'static', 'size_t',
+ 'signed', 'signal', 'short', 'SEL', 'register', 'raise',
+ 'ptrdiff_t', 'NSZone', 'NSRect', 'NSRange', 'NSPoint', 'long',
+ 'ldiv_t', 'jmp_buf', 'int', 'IMP', 'id', 'fpos_t', 'float', 'FILE',
+ 'extern', 'double', 'div_t', 'const', 'clock_t', 'Class', 'char',
+ 'BOOL', 'auto'
+ ),
+ // Foundation classes
+ 5 => array(
+ 'NSXMLParser', 'NSXMLNode', 'NSXMLElement', 'NSXMLDTDNode',
+ 'NSXMLDTD', 'NSXMLDocument', 'NSWhoseSpecifier',
+ 'NSValueTransformer', 'NSValue', 'NSUserDefaults', 'NSURLResponse',
+ 'NSURLRequest', 'NSURLProtocol', 'NSURLProtectionSpace',
+ 'NSURLHandle', 'NSURLDownload', 'NSURLCredentialStorage',
+ 'NSURLCredential', 'NSURLConnection', 'NSURLCache',
+ 'NSURLAuthenticationChallenge', 'NSURL', 'NSUniqueIDSpecifier',
+ 'NSUndoManager', 'NSUnarchiver', 'NSTimeZone', 'NSTimer',
+ 'NSThread', 'NSTask', 'NSString', 'NSStream', 'NSSpellServer',
+ 'NSSpecifierTest', 'NSSortDescriptor', 'NSSocketPortNameServer',
+ 'NSSocketPort', 'NSSetCommand', 'NSSet', 'NSSerializer',
+ 'NSScriptWhoseTest', 'NSScriptSuiteRegistry',
+ 'NSScriptObjectSpecifier', 'NSScriptExecutionContext',
+ 'NSScriptCommandDescription', 'NSScriptCommand',
+ 'NSScriptCoercionHandler', 'NSScriptClassDescription', 'NSScanner',
+ 'NSRunLoop', 'NSRelativeSpecifier', 'NSRecursiveLock',
+ 'NSRangeSpecifier', 'NSRandomSpecifier', 'NSQuitCommand', 'NSProxy',
+ 'NSProtocolChecker', 'NSPropertySpecifier',
+ 'NSPropertyListSerialization', 'NSProcessInfo', 'NSPredicate',
+ 'NSPositionalSpecifier', 'NSPortNameServer', 'NSPortMessage',
+ 'NSPortCoder', 'NSPort', 'NSPointerFunctions', 'NSPointerArray',
+ 'NSPipe', 'NSOutputStream', 'NSOperationQueue', 'NSOperation',
+ 'NSObject', 'NSNumberFormatter', 'NSNumber', 'NSNull',
+ 'NSNotificationQueue', 'NSNotificationCenter', 'NSNotification',
+ 'NSNetServiceBrowser', 'NSNetService', 'NSNameSpecifier',
+ 'NSMutableURLRequest', 'NSMutableString', 'NSMutableSet',
+ 'NSMutableIndexSet', 'NSMutableDictionary', 'NSMutableData',
+ 'NSMutableCharacterSet', 'NSMutableAttributedString',
+ 'NSMutableArray', 'NSMoveCommand', 'NSMiddleSpecifier',
+ 'NSMethodSignature', 'NSMetadataQueryResultGroup',
+ 'NSMetadataQueryAttributeValueTuple', 'NSMetadataQuery',
+ 'NSMetadataItem', 'NSMessagePortNameServer', 'NSMessagePort',
+ 'NSMapTable', 'NSMachPort', 'NSMachBootstrapServer',
+ 'NSLogicalTest', 'NSLock', 'NSLocale', 'NSKeyedUnarchiver',
+ 'NSKeyedArchiver', 'NSInvocationOperation', 'NSInvocation',
+ 'NSInputStream', 'NSIndexSpecifier', 'NSIndexSet', 'NSIndexPath',
+ 'NSHTTPURLResponse', 'NSHTTPCookieStorage', 'NSHTTPCookie',
+ 'NSHost', 'NSHashTable', 'NSGetCommand', 'NSGarbageCollector',
+ 'NSFormatter', 'NSFileManager', 'NSFileHandle', 'NSExpression',
+ 'NSExistsCommand', 'NSException', 'NSError', 'NSEnumerator',
+ 'NSDistributedNotificationCenter', 'NSDistributedLock',
+ 'NSDistantObjectRequest', 'NSDistantObject',
+ 'NSDirectoryEnumerator', 'NSDictionary', 'NSDeserializer',
+ 'NSDeleteCommand', 'NSDecimalNumberHandler', 'NSDecimalNumber',
+ 'NSDateFormatter', 'NSDateComponents', 'NSDate', 'NSData',
+ 'NSCreateCommand', 'NSCountedSet', 'NSCountCommand', 'NSConnection',
+ 'NSConditionLock', 'NSCondition', 'NSCompoundPredicate',
+ 'NSComparisonPredicate', 'NSCoder', 'NSCloseCommand',
+ 'NSCloneCommand', 'NSClassDescription', 'NSCharacterSet',
+ 'NSCalendarDate', 'NSCalendar', 'NSCachedURLResponse', 'NSBundle',
+ 'NSAutoreleasePool', 'NSAttributedString', 'NSAssertionHandler',
+ 'NSArray', 'NSArchiver', 'NSAppleScript', 'NSAppleEventManager',
+ 'NSAppleEventDescriptor', 'NSAffineTransform'
+ ),
+ // Foundation protocols
+ 6 => array(
+ 'NSURLProtocolClient', 'NSURLHandleClient', 'NSURLClient',
+ 'NSURLAuthenticationChallengeSender', 'NSScriptObjectSpecifiers',
+ 'NSScriptKeyValueCoding', 'NSScriptingComparisonMethods',
+ 'NSObjCTypeSerializationCallBack', 'NSMutableCopying',
+ 'NSLocking', 'NSKeyValueObserving', 'NSKeyValueCoding',
+ 'NSFastEnumeration', 'NSErrorRecoveryAttempting',
+ 'NSDecimalNumberBehaviors', 'NSCopying', 'NSComparisonMethods',
+ 'NSCoding'
+ ),
+ // AppKit classes
+ 7 => array(
+ 'NSWorkspace', 'NSWindowController', 'NSWindow', 'NSViewController',
+ 'NSViewAnimation', 'NSView', 'NSUserDefaultsController',
+ 'NSTypesetter', 'NSTreeNode', 'NSTreeController', 'NSTrackingArea',
+ 'NSToolbarItemGroup', 'NSToolbarItem', 'NSToolbar',
+ 'NSTokenFieldCell', 'NSTokenField', 'NSTextView',
+ 'NSTextTableBlock', 'NSTextTable', 'NSTextTab', 'NSTextStorage',
+ 'NSTextList', 'NSTextFieldCell', 'NSTextField', 'NSTextContainer',
+ 'NSTextBlock', 'NSTextAttachmentCell', 'NSTextAttachment', 'NSText',
+ 'NSTabViewItem', 'NSTabView', 'NSTableView', 'NSTableHeaderView',
+ 'NSTableHeaderCell', 'NSTableColumn', 'NSStepperCell', 'NSStepper',
+ 'NSStatusItem', 'NSStatusBar', 'NSSplitView', 'NSSpellChecker',
+ 'NSSpeechSynthesizer', 'NSSpeechRecognizer', 'NSSound',
+ 'NSSliderCell', 'NSSlider', 'NSSimpleHorizontalTypesetter',
+ 'NSShadow', 'NSSegmentedControl', 'NSSegmentedCell',
+ 'NSSecureTextFieldCell', 'NSSecureTextField', 'NSSearchFieldCell',
+ 'NSSearchField', 'NSScrollView', 'NSScroller', 'NSScreen',
+ 'NSSavePanel', 'NSRulerView', 'NSRulerMarker', 'NSRuleEditor',
+ 'NSResponder', 'NSQuickDrawView', 'NSProgressIndicator',
+ 'NSPrintPanel', 'NSPrintOperation', 'NSPrintInfo', 'NSPrinter',
+ 'NSPredicateEditorRowTemplate', 'NSPredicateEditor',
+ 'NSPopUpButtonCell', 'NSPopUpButton', 'NSPICTImageRep',
+ 'NSPersistentDocument', 'NSPDFImageRep', 'NSPathControl',
+ 'NSPathComponentCell', 'NSPathCell', 'NSPasteboard',
+ 'NSParagraphStyle', 'NSPanel', 'NSPageLayout', 'NSOutlineView',
+ 'NSOpenPanel', 'NSOpenGLView', 'NSOpenGLPixelFormat',
+ 'NSOpenGLPixelBuffer', 'NSOpenGLContext', 'NSObjectController',
+ 'NSNibOutletConnector', 'NSNibControlConnector', 'NSNibConnector',
+ 'NSNib', 'NSMutableParagraphStyle', 'NSMovieView', 'NSMovie',
+ 'NSMenuView', 'NSMenuItemCell', 'NSMenuItem', 'NSMenu', 'NSMatrix',
+ 'NSLevelIndicatorCell', 'NSLevelIndicator', 'NSLayoutManager',
+ 'NSInputServer', 'NSInputManager', 'NSImageView', 'NSImageRep',
+ 'NSImageCell', 'NSImage', 'NSHelpManager', 'NSGraphicsContext',
+ 'NSGradient', 'NSGlyphInfo', 'NSGlyphGenerator', 'NSFormCell',
+ 'NSForm', 'NSFontPanel', 'NSFontManager', 'NSFontDescriptor',
+ 'NSFont', 'NSFileWrapper', 'NSEvent', 'NSEPSImageRep', 'NSDrawer',
+ 'NSDocumentController', 'NSDocument', 'NSDockTile',
+ 'NSDictionaryController', 'NSDatePickerCell', 'NSDatePicker',
+ 'NSCustomImageRep', 'NSCursor', 'NSController', 'NSControl',
+ 'NSComboBoxCell', 'NSComboBox', 'NSColorWell', 'NSColorSpace',
+ 'NSColorPicker', 'NSColorPanel', 'NSColorList', 'NSColor',
+ 'NSCollectionViewItem', 'NSCollectionView', 'NSClipView',
+ 'NSCIImageRep', 'NSCell', 'NSCachedImageRep', 'NSButtonCell',
+ 'NSButton', 'NSBrowserCell', 'NSBrowser', 'NSBox',
+ 'NSBitmapImageRep', 'NSBezierPath', 'NSATSTypesetter',
+ 'NSArrayController', 'NSApplication', 'NSAnimationContext',
+ 'NSAnimation', 'NSAlert', 'NSActionCell'
+ ),
+ // AppKit protocols
+ 8 => array(
+ 'NSWindowScripting', 'NSValidatedUserInterfaceItem',
+ 'NSUserInterfaceValidations', 'NSToolTipOwner',
+ 'NSToolbarItemValidation', 'NSTextInput',
+ 'NSTableDataSource', 'NSServicesRequests',
+ 'NSPrintPanelAccessorizing', 'NSPlaceholders',
+ 'NSPathControlDelegate', 'NSPathCellDelegate',
+ 'NSOutlineViewDataSource', 'NSNibAwaking', 'NSMenuValidation',
+ 'NSKeyValueBindingCreation', 'NSInputServiceProvider',
+ 'NSInputServerMouseTracker', 'NSIgnoreMisspelledWords',
+ 'NSGlyphStorage', 'NSFontPanelValidation', 'NSEditorRegistration',
+ 'NSEditor', 'NSDraggingSource', 'NSDraggingInfo',
+ 'NSDraggingDestination', 'NSDictionaryControllerKeyValuePair',
+ 'NSComboBoxDataSource', 'NSComboBoxCellDataSource',
+ 'NSColorPickingDefault', 'NSColorPickingCustom', 'NSChangeSpelling',
+ 'NSAnimatablePropertyContainer', 'NSAccessibility'
+ ),
+ // CoreData classes
+ 9 => array(
+ 'NSRelationshipDescription', 'NSPropertyMapping',
+ 'NSPropertyDescription', 'NSPersistentStoreCoordinator',
+ 'NSPersistentStore', 'NSMigrationManager', 'NSMappingModel',
+ 'NSManagedObjectModel', 'NSManagedObjectID',
+ 'NSManagedObjectContext', 'NSManagedObject',
+ 'NSFetchRequestExpression', 'NSFetchRequest',
+ 'NSFetchedPropertyDescription', 'NSEntityMigrationPolicy',
+ 'NSEntityMapping', 'NSEntityDescription', 'NSAttributeDescription',
+ 'NSAtomicStoreCacheNode', 'NSAtomicStore'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true
+ ),
+ // Define the colors for the groups listed above
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #a61390;', // Objective-C keywords
+ 2 => 'color: #a61390;', // Macros and constants
+ 3 => 'color: #a61390;', // C standard library functions
+ 4 => 'color: #a61390;', // data types
+ 5 => 'color: #400080;', // Foundation classes
+ 6 => 'color: #2a6f76;', // Foundation protocols
+ 7 => 'color: #400080;', // AppKit classes
+ 8 => 'color: #2a6f76;', // AppKit protocols
+ 9 => 'color: #400080;' // CoreData classes
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #6e371a;', // Preprocessor directives
+ 2 => 'color: #11740a; font-style: italic;', // Normal C single-line comments
+ 3 => 'color: #bf1d1a;', // Q-sign in front of Strings
+ 'MULTI' => 'color: #11740a; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #2400d9;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #002200;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #bf1d1a;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #2400d9;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #002200;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.opengroup.org/onlinepubs/009695399/functions/{FNAME}.html',
+ 4 => '',
+ 5 => 'http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/{FNAME}_Class/',
+ 6 => 'http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Protocols/{FNAME}_Protocol/',
+ 7 => 'http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/{FNAME}_Class/',
+ 8 => 'http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Protocols/{FNAME}_Protocol/',
+ 9 => 'http://developer.apple.com/documentation/Cocoa/Reference/CoreDataFramework/Classes/{FNAME}_Class/'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php
new file mode 100644
index 000000000..c26a334de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php
@@ -0,0 +1,111 @@
+<?php
+/*************************************************************************************
+ * ocaml.php
+ * ----------
+ * Author: Flaie (fireflaie@gmail.com)
+ * Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/08/27
+ *
+ * OCaml (Objective Caml) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/08/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'OCaml (brief)',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => "",
+ 'KEYWORDS' => array(
+ /* main OCaml keywords */
+ 1 => array(
+ 'and', 'as', 'asr', 'begin', 'class', 'closed', 'constraint', 'do', 'done', 'downto', 'else',
+ 'end', 'exception', 'external', 'failwith', 'false', 'flush', 'for', 'fun', 'function', 'functor',
+ 'if', 'in', 'include', 'inherit', 'incr', 'land', 'let', 'load', 'los', 'lsl', 'lsr', 'lxor',
+ 'match', 'method', 'mod', 'module', 'mutable', 'new', 'not', 'of', 'open', 'option', 'or', 'parser',
+ 'private', 'ref', 'rec', 'raise', 'regexp', 'sig', 'struct', 'stdout', 'stdin', 'stderr', 'then',
+ 'to', 'true', 'try', 'type', 'val', 'virtual', 'when', 'while', 'with'
+ )
+ ),
+ /* highlighting symbols is really important in OCaml */
+ 'SYMBOLS' => array(
+ ';', '!', ':', '.', '=', '%', '^', '*', '-', '/', '+',
+ '>', '<', '(', ')', '[', ']', '&', '|', '#', "'"
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #06c; font-weight: bold;' /* nice blue */
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purple */
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #6c6;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #3cb371;' /* nice green */
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #c6c;' /* pink */
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #060;' /* dark green */
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #a52a2a;' /* maroon */
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php
new file mode 100644
index 000000000..505149c31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php
@@ -0,0 +1,174 @@
+<?php
+/*************************************************************************************
+ * ocaml.php
+ * ----------
+ * Author: Flaie (fireflaie@gmail.com)
+ * Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/08/27
+ *
+ * OCaml (Objective Caml) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/03/29 (1.0.7.22)
+ * - Fixed warnings resulting from missing style information
+ * 2005/08/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/08/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'OCaml',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'CASE_KEYWORDS' => 0,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => "",
+ 'KEYWORDS' => array(
+ /* main OCaml keywords */
+ 1 => array(
+ 'and', 'as', 'asr', 'begin', 'class', 'closed', 'constraint', 'do', 'done', 'downto', 'else',
+ 'end', 'exception', 'external', 'failwith', 'false', 'for', 'fun', 'function', 'functor',
+ 'if', 'in', 'include', 'inherit', 'incr', 'land', 'let', 'load', 'los', 'lsl', 'lsr', 'lxor',
+ 'match', 'method', 'mod', 'module', 'mutable', 'new', 'not', 'of', 'open', 'option', 'or', 'parser',
+ 'private', 'ref', 'rec', 'raise', 'regexp', 'sig', 'struct', 'stdout', 'stdin', 'stderr', 'then',
+ 'to', 'true', 'try', 'type', 'val', 'virtual', 'when', 'while', 'with'
+ ),
+ /* define names of main librarys, so we can link to it */
+ 2 => array(
+ 'Arg', 'Arith_status', 'Array', 'ArrayLabels', 'Big_int', 'Bigarray', 'Buffer', 'Callback',
+ 'CamlinternalOO', 'Char', 'Complex', 'Condition', 'Dbm', 'Digest', 'Dynlink', 'Event',
+ 'Filename', 'Format', 'Gc', 'Genlex', 'Graphics', 'GraphicsX11', 'Hashtbl', 'Int32', 'Int64',
+ 'Lazy', 'Lexing', 'List', 'ListLabels', 'Map', 'Marshal', 'MoreLabels', 'Mutex', 'Nativeint',
+ 'Num', 'Obj', 'Oo', 'Parsing', 'Pervasives', 'Printexc', 'Printf', 'Queue', 'Random', 'Scanf',
+ 'Set', 'Sort', 'Stack', 'StdLabels', 'Str', 'Stream', 'String', 'StringLabels', 'Sys', 'Thread',
+ 'ThreadUnix', 'Tk'
+ ),
+ /* just link to the Pervasives functions library, cause it's the default opened library when starting OCaml */
+ 3 => array(
+ 'abs', 'abs_float', 'acos', 'asin', 'at_exit', 'atan', 'atan2',
+ 'bool_of_string', 'ceil', 'char_of_int', 'classify_float',
+ 'close_in', 'close_in_noerr', 'close_out', 'close_out_noerr',
+ 'compare', 'cos', 'cosh', 'decr', 'epsilon_float', 'exit', 'exp',
+ 'float', 'float_of_int', 'float_of_string', 'floor', 'flush',
+ 'flush_all', 'format_of_string', 'frexp', 'fst', 'ignore',
+ 'in_channel_length', 'infinity', 'input', 'input_binary_int',
+ 'input_byte', 'input_char', 'input_line', 'input_value',
+ 'int_of_char', 'int_of_float', 'int_of_string', 'invalid_arg',
+ 'ldexp', 'log', 'log10', 'max', 'max_float', 'max_int', 'min',
+ 'min_float', 'min_int', 'mod_float', 'modf', 'nan', 'open_in',
+ 'open_in_bin', 'open_in_gen', 'open_out', 'open_out_bin',
+ 'open_out_gen', 'out_channel_length', 'output', 'output_binary_int',
+ 'output_byte', 'output_char', 'output_string', 'output_value',
+ 'pos_in', 'pos_out', 'pred', 'prerr_char', 'prerr_endline',
+ 'prerr_float', 'prerr_int', 'prerr_newline', 'prerr_string',
+ 'print_char', 'print_endline', 'print_float', 'print_int',
+ 'print_newline', 'print_string', 'read_float', 'read_int',
+ 'read_line', 'really_input', 'seek_in', 'seek_out',
+ 'set_binary_mode_in', 'set_binary_mode_out', 'sin', 'sinh', 'snd',
+ 'sqrt', 'string_of_bool', 'string_of_float', 'string_of_format',
+ 'string_of_int', 'succ', 'tan', 'tanh', 'truncate'
+ ),
+ /* here Pervasives Types */
+ 4 => array (
+ 'fpclass', 'in_channel', 'out_channel', 'open_flag', 'Sys_error', 'format'
+ ),
+ /* finally Pervasives Exceptions */
+ 5 => array (
+ 'Exit', 'Invalid_Argument', 'Failure', 'Division_by_zero'
+ )
+ ),
+ /* highlighting symbols is really important in OCaml */
+ 'SYMBOLS' => array(
+ ';', '!', ':', '.', '=', '%', '^', '*', '-', '/', '+',
+ '>', '<', '(', ')', '[', ']', '&', '|', '#', "'"
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => true, /* functions name are case sensitive */
+ 3 => true, /* types name too */
+ 4 => true, /* pervasives types */
+ 5 => true /* pervasives exceptions */
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #06c; font-weight: bold;', /* nice blue */
+ 2 => 'color: #06c; font-weight: bold;', /* nice blue */
+ 3 => 'color: #06c; font-weight: bold;', /* nice blue */
+ 4 => 'color: #06c; font-weight: bold;', /* nice blue */
+ 5 => 'color: #06c; font-weight: bold;' /* nice blue */
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #5d478b; font-style: italic;' /* light purple */
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #6c6;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #3cb371;' /* nice green */
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #c6c;' /* pink */
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #060;' /* dark green */
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #a52a2a;' /* maroon */
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ /* some of keywords are Pervasives functions (land, lxor, asr, ...) */
+ 1 => '',
+ /* link to the wanted library */
+ 2 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/{FNAME}.html',
+ /* link to Pervasives functions */
+ 3 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#VAL{FNAME}',
+ /* link to Pervasives type */
+ 4 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#TYPE{FNAME}',
+ /* link to Pervasives exceptions */
+ 5 => 'http://caml.inria.fr/pub/docs/manual-ocaml/libref/Pervasives.html#EXCEPTION{FNAME}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php
new file mode 100644
index 000000000..b4f95512a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php
@@ -0,0 +1,135 @@
+<?php
+/*************************************************************************************
+ * oobas.php
+ * ---------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * OpenOffice.org Basic language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'OpenOffice.org Basic',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array(),
+ //Single-Line comments using REM keyword
+ 'COMMENT_REGEXP' => array(2 => '/\bREM.*?$/i'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'dim','private','public','global','as','if','redim','true','set','byval',
+ 'false','bool','double','integer','long','object','single','variant',
+ 'msgbox','print','inputbox','green','blue','red','qbcolor',
+ 'rgb','open','close','reset','freefile','get','input','line',
+ 'put','write','loc','seek','eof','lof','chdir','chdrive',
+ 'curdir','dir','fileattr','filecopy','filedatetime','fileexists',
+ 'filelen','getattr','kill','mkdir','name','rmdir','setattr',
+ 'dateserial','datevalue','day','month','weekday','year','cdatetoiso',
+ 'cdatefromiso','hour','minute','second','timeserial','timevalue',
+ 'date','now','time','timer','erl','err','error','on','goto','resume',
+ 'and','eqv','imp','not','or','xor','mod','atn','cos','sin','tan','log',
+ 'exp','rnd','randomize','sqr','fix','int','abs','sgn','hex','oct',
+ 'it','then','else','select','case','iif','do','loop','for','next','to',
+ 'while','wend','gosub','return','call','choose','declare',
+ 'end','exit','freelibrary','function','rem','stop','sub','switch','with',
+ 'cbool','cdate','cdbl','cint','clng','const','csng','cstr','defbool',
+ 'defdate','defdbl','defint','deflng','asc','chr','str','val','cbyte',
+ 'space','string','format','lcase','left','lset','ltrim','mid','right',
+ 'rset','rtrim','trim','ucase','split','join','converttourl','convertfromurl',
+ 'instr','len','strcomp','beep','shell','wait','getsystemticks','environ',
+ 'getsolarversion','getguitype','twipsperpixelx','twipsperpixely',
+ 'createunostruct','createunoservice','getprocessservicemanager',
+ 'createunodialog','createunolistener','createunovalue','thiscomponent',
+ 'globalscope'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080;',
+ 2 => 'color: #808080;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php
new file mode 100644
index 000000000..e5417d7d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php
@@ -0,0 +1,614 @@
+<?php
+/*************************************************************************************
+ * oracle11.php
+ * -----------
+ * Author: Guy Wicks (Guy.Wicks@rbs.co.uk)
+ * Contributions:
+ * - Updated for 11i by Simon Redhead
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * Oracle 11i language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/04/08 (1.0.8)
+ * - SR changes to oracle8.php to support Oracle 11i reserved words.
+ * 2005/01/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Oracle 11 SQL',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"', '`'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+//Put your package names here - e.g. select distinct ''''|| lower(name) || ''',' from user_source;
+// 6 => array(
+// ),
+
+//Put your table names here - e.g. select distinct ''''|| lower(table_name) || ''',' from user_tables;
+// 5 => array(
+// ),
+
+//Put your view names here - e.g. select distinct ''''|| lower(view_name) || ''',' from user_views;
+// 4 => array(
+// ),
+
+//Put your table field names here - e.g. select distinct ''''|| lower(column_name) || ''',' from user_tab_columns;
+// 3 => array(
+// ),
+
+ //Put ORACLE reserved keywords here (11i). I like mine uppercase.
+ 1 => array(
+ 'ABS',
+ 'ACCESS',
+ 'ACOS',
+ 'ADD',
+ 'ADD_MONTHS',
+ 'ALL',
+ 'ALTER',
+ 'ANALYZE',
+ 'AND',
+ 'ANY',
+ 'APPENDCHILDXML',
+ 'ARRAY',
+ 'AS',
+ 'ASC',
+ 'ASCII',
+ 'ASCIISTR',
+ 'ASIN',
+ 'ASSOCIATE',
+ 'AT',
+ 'ATAN',
+ 'ATAN2',
+ 'AUDIT',
+ 'AUTHID',
+ 'AVG',
+ 'BEGIN',
+ 'BETWEEN',
+ 'BFILENAME',
+ 'BIN_TO_NUM',
+ 'BINARY_INTEGER',
+ 'BITAND',
+ 'BODY',
+ 'BOOLEAN',
+ 'BULK',
+ 'BY',
+ 'CALL',
+ 'CARDINALITY',
+ 'CASCADE',
+ 'CASE',
+ 'CAST',
+ 'CEIL',
+ 'CHAR',
+ 'CHAR_BASE',
+ 'CHARTOROWID',
+ 'CHECK',
+ 'CHR',
+ 'CLOSE',
+ 'CLUSTER',
+ 'CLUSTER_ID',
+ 'CLUSTER_PROBABILITY',
+ 'CLUSTER_SET',
+ 'COALESCE',
+ 'COLLECT',
+ 'COLUMN',
+ 'COMMENT',
+ 'COMMIT',
+ 'COMPOSE',
+ 'COMPRESS',
+ 'CONCAT',
+ 'CONNECT',
+ 'CONSTANT',
+ 'CONSTRAINT',
+ 'CONSTRAINTS',
+ 'CONTEXT',
+ 'CONTROLFILE',
+ 'CONVERT',
+ 'CORR',
+ 'CORR_K',
+ 'CORR_S',
+ 'COS',
+ 'COSH',
+ 'COST',
+ 'COUNT',
+ 'COVAR_POP',
+ 'COVAR_SAMP',
+ 'CREATE',
+ 'CUBE_TABLE',
+ 'CUME_DIST',
+ 'CURRENT',
+ 'CURRENT_DATE',
+ 'CURRENT_TIMESTAMP',
+ 'CURRVAL',
+ 'CURSOR',
+ 'CV',
+ 'DATABASE',
+ 'DATAOBJ_TO_PARTITION',
+ 'DATE',
+ 'DAY',
+ 'DBTIMEZONE',
+ 'DECIMAL',
+ 'DECLARE',
+ 'DECODE',
+ 'DECOMPOSE',
+ 'DEFAULT',
+ 'DELETE',
+ 'DELETEXML',
+ 'DENSE_RANK',
+ 'DEPTH',
+ 'DEREF',
+ 'DESC',
+ 'DIMENSION',
+ 'DIRECTORY',
+ 'DISASSOCIATE',
+ 'DISTINCT',
+ 'DO',
+ 'DROP',
+ 'DUMP',
+ 'ELSE',
+ 'ELSIF',
+ 'EMPTY_BLOB',
+ 'EMPTY_CLOB',
+ 'END',
+ 'EXCEPTION',
+ 'EXCLUSIVE',
+ 'EXEC',
+ 'EXECUTE',
+ 'EXISTS',
+ 'EXISTSNODE',
+ 'EXIT',
+ 'EXP',
+ 'EXPLAIN',
+ 'EXTENDS',
+ 'EXTRACT',
+ 'EXTRACTVALUE',
+ 'FALSE',
+ 'FEATURE_ID',
+ 'FEATURE_SET',
+ 'FEATURE_VALUE',
+ 'FETCH',
+ 'FILE',
+ 'FIRST',
+ 'FIRST_VALUE',
+ 'FLOAT',
+ 'FLOOR',
+ 'FOR',
+ 'FORALL',
+ 'FROM',
+ 'FROM_TZ',
+ 'FUNCTION',
+ 'GOTO',
+ 'GRANT',
+ 'GREATEST',
+ 'GROUP',
+ 'GROUP_ID',
+ 'GROUPING',
+ 'GROUPING_ID',
+ 'HAVING',
+ 'HEAP',
+ 'HEXTORAW',
+ 'HOUR',
+ 'IDENTIFIED',
+ 'IF',
+ 'IMMEDIATE',
+ 'IN',
+ 'INCREMENT',
+ 'INDEX',
+ 'INDEXTYPE',
+ 'INDICATOR',
+ 'INITCAP',
+ 'INITIAL',
+ 'INSERT',
+ 'INSERTCHILDXML',
+ 'INSERTXMLBEFORE',
+ 'INSTR',
+ 'INSTRB',
+ 'INTEGER',
+ 'INTERFACE',
+ 'INTERSECT',
+ 'INTERVAL',
+ 'INTO',
+ 'IS',
+ 'ISOLATION',
+ 'ITERATION_NUMBER',
+ 'JAVA',
+ 'KEY',
+ 'LAG',
+ 'LAST',
+ 'LAST_DAY',
+ 'LAST_VALUE',
+ 'LEAD',
+ 'LEAST',
+ 'LENGTH',
+ 'LENGTHB',
+ 'LEVEL',
+ 'LIBRARY',
+ 'LIKE',
+ 'LIMITED',
+ 'LINK',
+ 'LN',
+ 'LNNVL',
+ 'LOCALTIMESTAMP',
+ 'LOCK',
+ 'LOG',
+ 'LONG',
+ 'LOOP',
+ 'LOWER',
+ 'LPAD',
+ 'LTRIM',
+ 'MAKE_REF',
+ 'MATERIALIZED',
+ 'MAX',
+ 'MAXEXTENTS',
+ 'MEDIAN',
+ 'MIN',
+ 'MINUS',
+ 'MINUTE',
+ 'MLSLABEL',
+ 'MOD',
+ 'MODE',
+ 'MODIFY',
+ 'MONTH',
+ 'MONTHS_BETWEEN',
+ 'NANVL',
+ 'NATURAL',
+ 'NATURALN',
+ 'NCHR',
+ 'NEW',
+ 'NEW_TIME',
+ 'NEXT_DAY',
+ 'NEXTVAL',
+ 'NLS_CHARSET_DECL_LEN',
+ 'NLS_CHARSET_ID',
+ 'NLS_CHARSET_NAME',
+ 'NLS_INITCAP',
+ 'NLS_LOWER',
+ 'NLS_UPPER',
+ 'NLSSORT',
+ 'NOAUDIT',
+ 'NOCOMPRESS',
+ 'NOCOPY',
+ 'NOT',
+ 'NOWAIT',
+ 'NTILE',
+ 'NULL',
+ 'NULLIF',
+ 'NUMBER',
+ 'NUMBER_BASE',
+ 'NUMTODSINTERVAL',
+ 'NUMTOYMINTERVAL',
+ 'NVL',
+ 'NVL2',
+ 'OCIROWID',
+ 'OF',
+ 'OFFLINE',
+ 'ON',
+ 'ONLINE',
+ 'OPAQUE',
+ 'OPEN',
+ 'OPERATOR',
+ 'OPTION',
+ 'OR',
+ 'ORA_HASH',
+ 'ORDER',
+ 'ORGANIZATION',
+ 'OTHERS',
+ 'OUT',
+ 'OUTLINE',
+ 'PACKAGE',
+ 'PARTITION',
+ 'PATH',
+ 'PCTFREE',
+ 'PERCENT_RANK',
+ 'PERCENTILE_CONT',
+ 'PERCENTILE_DISC',
+ 'PLAN',
+ 'PLS_INTEGER',
+ 'POSITIVE',
+ 'POSITIVEN',
+ 'POWER',
+ 'POWERMULTISET',
+ 'POWERMULTISET_BY_CARDINALITY',
+ 'PRAGMA',
+ 'PREDICTION',
+ 'PREDICTION_BOUNDS',
+ 'PREDICTION_COST',
+ 'PREDICTION_DETAILS',
+ 'PREDICTION_PROBABILITY',
+ 'PREDICTION_SET',
+ 'PRESENTNNV',
+ 'PRESENTV',
+ 'PREVIOUS',
+ 'PRIMARY',
+ 'PRIOR',
+ 'PRIVATE',
+ 'PRIVILEGES',
+ 'PROCEDURE',
+ 'PROFILE',
+ 'PUBLIC',
+ 'RAISE',
+ 'RANGE',
+ 'RANK',
+ 'RATIO_TO_REPORT',
+ 'RAW',
+ 'RAWTOHEX',
+ 'RAWTONHEX',
+ 'REAL',
+ 'RECORD',
+ 'REF',
+ 'REFTOHEX',
+ 'REGEXP_COUNT',
+ 'REGEXP_INSTR',
+ 'REGEXP_REPLACE',
+ 'REGEXP_SUBSTR',
+ 'REGR_AVGX',
+ 'REGR_AVGY',
+ 'REGR_COUNT',
+ 'REGR_INTERCEPT',
+ 'REGR_R2',
+ 'REGR_SLOPE',
+ 'REGR_SXX',
+ 'REGR_SXY',
+ 'REGR_SYY',
+ 'RELEASE',
+ 'REMAINDER',
+ 'RENAME',
+ 'REPLACE',
+ 'RESOURCE',
+ 'RETURN',
+ 'RETURNING',
+ 'REVERSE',
+ 'REVOKE',
+ 'ROLE',
+ 'ROLLBACK',
+ 'ROUND',
+ 'ROW',
+ 'ROW_NUMBER',
+ 'ROWID',
+ 'ROWIDTOCHAR',
+ 'ROWIDTONCHAR',
+ 'ROWNUM',
+ 'ROWS',
+ 'ROWTYPE',
+ 'RPAD',
+ 'RTRIM',
+ 'SAVEPOINT',
+ 'SCHEMA',
+ 'SCN_TO_TIMESTAMP',
+ 'SECOND',
+ 'SEGMENT',
+ 'SELECT',
+ 'SEPERATE',
+ 'SEQUENCE',
+ 'SESSION',
+ 'SESSIONTIMEZONE',
+ 'SET',
+ 'SHARE',
+ 'SIGN',
+ 'SIN',
+ 'SINH',
+ 'SIZE',
+ 'SMALLINT',
+ 'SOUNDEX',
+ 'SPACE',
+ 'SQL',
+ 'SQLCODE',
+ 'SQLERRM',
+ 'SQRT',
+ 'START',
+ 'STATISTICS',
+ 'STATS_BINOMIAL_TEST',
+ 'STATS_CROSSTAB',
+ 'STATS_F_TEST',
+ 'STATS_KS_TEST',
+ 'STATS_MODE',
+ 'STATS_MW_TEST',
+ 'STATS_ONE_WAY_ANOVA',
+ 'STATS_T_TEST_INDEP',
+ 'STATS_T_TEST_INDEPU',
+ 'STATS_T_TEST_ONE',
+ 'STATS_T_TEST_PAIRED',
+ 'STATS_WSR_TEST',
+ 'STDDEV',
+ 'STDDEV_POP',
+ 'STDDEV_SAMP',
+ 'STOP',
+ 'SUBSTR',
+ 'SUBSTRB',
+ 'SUBTYPE',
+ 'SUCCESSFUL',
+ 'SUM',
+ 'SYNONYM',
+ 'SYS_CONNECT_BY_PATH',
+ 'SYS_CONTEXT',
+ 'SYS_DBURIGEN',
+ 'SYS_EXTRACT_UTC',
+ 'SYS_GUID',
+ 'SYS_TYPEID',
+ 'SYS_XMLAGG',
+ 'SYS_XMLGEN',
+ 'SYSDATE',
+ 'SYSTEM',
+ 'SYSTIMESTAMP',
+ 'TABLE',
+ 'TABLESPACE',
+ 'TAN',
+ 'TANH',
+ 'TEMPORARY',
+ 'THEN',
+ 'TIME',
+ 'TIMESTAMP',
+ 'TIMESTAMP_TO_SCN',
+ 'TIMEZONE_ABBR',
+ 'TIMEZONE_HOUR',
+ 'TIMEZONE_MINUTE',
+ 'TIMEZONE_REGION',
+ 'TIMING',
+ 'TO',
+ 'TO_BINARY_DOUBLE',
+ 'TO_BINARY_FLOAT',
+ 'TO_CHAR',
+ 'TO_CLOB',
+ 'TO_DATE',
+ 'TO_DSINTERVAL',
+ 'TO_LOB',
+ 'TO_MULTI_BYTE',
+ 'TO_NCHAR',
+ 'TO_NCLOB',
+ 'TO_NUMBER',
+ 'TO_SINGLE_BYTE',
+ 'TO_TIMESTAMP',
+ 'TO_TIMESTAMP_TZ',
+ 'TO_YMINTERVAL',
+ 'TRANSACTION',
+ 'TRANSLATE',
+ 'TREAT',
+ 'TRIGGER',
+ 'TRIM',
+ 'TRUE',
+ 'TRUNC',
+ 'TRUNCATE',
+ 'TYPE',
+ 'TZ_OFFSET',
+ 'UI',
+ 'UID',
+ 'UNION',
+ 'UNIQUE',
+ 'UNISTR',
+ 'UPDATE',
+ 'UPDATEXML',
+ 'UPPER',
+ 'USE',
+ 'USER',
+ 'USERENV',
+ 'USING',
+ 'VALIDATE',
+ 'VALUE',
+ 'VALUES',
+ 'VAR_POP',
+ 'VAR_SAMP',
+ 'VARCHAR',
+ 'VARCHAR2',
+ 'VARIANCE',
+ 'VIEW',
+ 'VSIZE',
+ 'WHEN',
+ 'WHENEVER',
+ 'WHERE',
+ 'WHILE',
+ 'WIDTH_BUCKET',
+ 'WITH',
+ 'WORK',
+ 'WRITE',
+ 'XMLAGG',
+ 'XMLCAST',
+ 'XMLCDATA',
+ 'XMLCOLATTVAL',
+ 'XMLCOMMENT',
+ 'XMLCONCAT',
+ 'XMLDIFF',
+ 'XMLELEMENT',
+ 'XMLEXISTS',
+ 'XMLFOREST',
+ 'XMLPARSE',
+ 'XMLPATCH',
+ 'XMLPI',
+ 'XMLQUERY',
+ 'XMLROOT',
+ 'XMLSEQUENCE',
+ 'XMLSERIALIZE',
+ 'XMLTABLE',
+ 'XMLTRANSFORM',
+ 'YEAR',
+ 'ZONE'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '=', '<', '>', '|', '+', '-', '*', '/', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+// 3 => false,
+// 4 => false,
+// 5 => false,
+// 6 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #993333; font-weight: bold; text-transform: uppercase;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #ff0000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+// 3 => '',
+// 4 => '',
+// 5 => '',
+// 6 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php
new file mode 100644
index 000000000..d216db0a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php
@@ -0,0 +1,496 @@
+<?php
+/*************************************************************************************
+ * oracle8.php
+ * -----------
+ * Author: Guy Wicks (Guy.Wicks@rbs.co.uk)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * Oracle 8 language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/01/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Oracle 8 SQL',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"', '`'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+//Put your package names here - e.g. select distinct ''''|| lower(name) || ''',' from user_source;
+// 6 => array(
+// ),
+
+//Put your table names here - e.g. select distinct ''''|| lower(table_name) || ''',' from user_tables;
+// 5 => array(
+// ),
+
+//Put your view names here - e.g. select distinct ''''|| lower(view_name) || ''',' from user_views;
+// 4 => array(
+// ),
+
+//Put your table field names here - e.g. select distinct ''''|| lower(column_name) || ''',' from user_tab_columns;
+// 3 => array(
+// ),
+
+//Put ORACLE reserved keywords here (8.1.7). I like mine uppercase.
+ 1 => array(
+ 'ABS',
+ 'ACCESS',
+ 'ACOS',
+ 'ADD',
+ 'ADD_MONTHS',
+ 'ALL',
+ 'ALTER',
+ 'ANALYZE',
+ 'AND',
+ 'ANY',
+ 'ARRAY',
+ 'AS',
+ 'ASC',
+ 'ASCII',
+ 'ASIN',
+ 'ASSOCIATE',
+ 'AT',
+ 'ATAN',
+ 'ATAN2',
+ 'AUDIT',
+ 'AUTHID',
+ 'AVG',
+ 'BEGIN',
+ 'BETWEEN',
+ 'BFILENAME',
+ 'BINARY_INTEGER',
+ 'BITAND',
+ 'BODY',
+ 'BOOLEAN',
+ 'BULK',
+ 'BY',
+ 'CALL',
+ 'CASCADE',
+ 'CASE',
+ 'CEIL',
+ 'CHAR',
+ 'CHAR_BASE',
+ 'CHARTOROWID',
+ 'CHECK',
+ 'CHR',
+ 'CLOSE',
+ 'CLUSTER',
+ 'COALESCE',
+ 'COLLECT',
+ 'COLUMN',
+ 'COMMENT',
+ 'COMMIT',
+ 'COMPRESS',
+ 'CONCAT',
+ 'CONNECT',
+ 'CONSTANT',
+ 'CONSTRAINT',
+ 'CONSTRAINTS',
+ 'CONTEXT',
+ 'CONTROLFILE',
+ 'CONVERT',
+ 'CORR',
+ 'COS',
+ 'COSH',
+ 'COST',
+ 'COUNT',
+ 'COVAR_POP',
+ 'COVAR_SAMP',
+ 'CREATE',
+ 'CUME_DIST',
+ 'CURRENT',
+ 'CURRVAL',
+ 'CURSOR',
+ 'DATABASE',
+ 'DATE',
+ 'DAY',
+ 'DECIMAL',
+ 'DECLARE',
+ 'DECODE',
+ 'DEFAULT',
+ 'DELETE',
+ 'DENSE_RANK',
+ 'DEREF',
+ 'DESC',
+ 'DIMENSION',
+ 'DIRECTORY',
+ 'DISASSOCIATE',
+ 'DISTINCT',
+ 'DO',
+ 'DROP',
+ 'DUMP',
+ 'ELSE',
+ 'ELSIF',
+ 'EMPTY_BLOB',
+ 'EMPTY_CLOB',
+ 'END',
+ 'EXCEPTION',
+ 'EXCLUSIVE',
+ 'EXEC',
+ 'EXECUTE',
+ 'EXISTS',
+ 'EXIT',
+ 'EXP',
+ 'EXPLAIN',
+ 'EXTENDS',
+ 'EXTRACT',
+ 'FALSE',
+ 'FETCH',
+ 'FILE',
+ 'FIRST_VALUE',
+ 'FLOAT',
+ 'FLOOR',
+ 'FOR',
+ 'FORALL',
+ 'FROM',
+ 'FUNCTION',
+ 'GOTO',
+ 'GRANT',
+ 'GREATEST',
+ 'GROUP',
+ 'GROUPING',
+ 'HAVING',
+ 'HEAP',
+ 'HEXTORAW',
+ 'HOUR',
+ 'IDENTIFIED',
+ 'IF',
+ 'IMMEDIATE',
+ 'IN',
+ 'INCREMENT',
+ 'INDEX',
+ 'INDEXTYPE',
+ 'INDICATOR',
+ 'INITCAP',
+ 'INITIAL',
+ 'INSERT',
+ 'INSTR',
+ 'INSTRB',
+ 'INTEGER',
+ 'INTERFACE',
+ 'INTERSECT',
+ 'INTERVAL',
+ 'INTO',
+ 'IS',
+ 'ISOLATION',
+ 'JAVA',
+ 'KEY',
+ 'LAG',
+ 'LAST_DAY',
+ 'LAST_VALUE',
+ 'LEAD',
+ 'LEAST',
+ 'LENGTH',
+ 'LENGTHB',
+ 'LEVEL',
+ 'LIBRARY',
+ 'LIKE',
+ 'LIMITED',
+ 'LINK',
+ 'LN',
+ 'LOCK',
+ 'LOG',
+ 'LONG',
+ 'LOOP',
+ 'LOWER',
+ 'LPAD',
+ 'LTRIM',
+ 'MAKE_REF',
+ 'MATERIALIZED',
+ 'MAX',
+ 'MAXEXTENTS',
+ 'MIN',
+ 'MINUS',
+ 'MINUTE',
+ 'MLSLABEL',
+ 'MOD',
+ 'MODE',
+ 'MODIFY',
+ 'MONTH',
+ 'MONTHS_BETWEEN',
+ 'NATURAL',
+ 'NATURALN',
+ 'NEW',
+ 'NEW_TIME',
+ 'NEXT_DAY',
+ 'NEXTVAL',
+ 'NLS_CHARSET_DECL_LEN',
+ 'NLS_CHARSET_ID',
+ 'NLS_CHARSET_NAME',
+ 'NLS_INITCAP',
+ 'NLS_LOWER',
+ 'NLS_UPPER',
+ 'NLSSORT',
+ 'NOAUDIT',
+ 'NOCOMPRESS',
+ 'NOCOPY',
+ 'NOT',
+ 'NOWAIT',
+ 'NTILE',
+ 'NULL',
+ 'NULLIF',
+ 'NUMBER',
+ 'NUMBER_BASE',
+ 'NUMTODSINTERVAL',
+ 'NUMTOYMINTERVAL',
+ 'NVL',
+ 'NVL2',
+ 'OCIROWID',
+ 'OF',
+ 'OFFLINE',
+ 'ON',
+ 'ONLINE',
+ 'OPAQUE',
+ 'OPEN',
+ 'OPERATOR',
+ 'OPTION',
+ 'OR',
+ 'ORDER',
+ 'ORGANIZATION',
+ 'OTHERS',
+ 'OUT',
+ 'OUTLINE',
+ 'PACKAGE',
+ 'PARTITION',
+ 'PCTFREE',
+ 'PERCENT_RANK',
+ 'PLAN',
+ 'PLS_INTEGER',
+ 'POSITIVE',
+ 'POSITIVEN',
+ 'POWER',
+ 'PRAGMA',
+ 'PRIMARY',
+ 'PRIOR',
+ 'PRIVATE',
+ 'PRIVILEGES',
+ 'PROCEDURE',
+ 'PROFILE',
+ 'PUBLIC',
+ 'RAISE',
+ 'RANGE',
+ 'RANK',
+ 'RATIO_TO_REPORT',
+ 'RAW',
+ 'RAWTOHEX',
+ 'REAL',
+ 'RECORD',
+ 'REF',
+ 'REFTOHEX',
+ 'REGR_AVGX',
+ 'REGR_AVGY',
+ 'REGR_COUNT',
+ 'REGR_INTERCEPT',
+ 'REGR_R2',
+ 'REGR_SLOPE',
+ 'REGR_SXX',
+ 'REGR_SXY',
+ 'REGR_SYY',
+ 'RELEASE',
+ 'RENAME',
+ 'REPLACE',
+ 'RESOURCE',
+ 'RETURN',
+ 'RETURNING',
+ 'REVERSE',
+ 'REVOKE',
+ 'ROLE',
+ 'ROLLBACK',
+ 'ROUND',
+ 'ROW',
+ 'ROW_NUMBER',
+ 'ROWID',
+ 'ROWIDTOCHAR',
+ 'ROWNUM',
+ 'ROWS',
+ 'ROWTYPE',
+ 'RPAD',
+ 'RTRIM',
+ 'SAVEPOINT',
+ 'SCHEMA',
+ 'SECOND',
+ 'SEGMENT',
+ 'SELECT',
+ 'SEPERATE',
+ 'SEQUENCE',
+ 'SESSION',
+ 'SET',
+ 'SHARE',
+ 'SIGN',
+ 'SIN',
+ 'SINH',
+ 'SIZE',
+ 'SMALLINT',
+ 'SOUNDEX',
+ 'SPACE',
+ 'SQL',
+ 'SQLCODE',
+ 'SQLERRM',
+ 'SQRT',
+ 'START',
+ 'STATISTICS',
+ 'STDDEV',
+ 'STDDEV_POP',
+ 'STDDEV_SAMP',
+ 'STOP',
+ 'SUBSTR',
+ 'SUBSTRB',
+ 'SUBTYPE',
+ 'SUCCESSFUL',
+ 'SUM',
+ 'SYNONYM',
+ 'SYS_CONTEXT',
+ 'SYS_GUID',
+ 'SYSDATE',
+ 'SYSTEM',
+ 'TABLE',
+ 'TABLESPACE',
+ 'TAN',
+ 'TANH',
+ 'TEMPORARY',
+ 'THEN',
+ 'TIME',
+ 'TIMESTAMP',
+ 'TIMEZONE_ABBR',
+ 'TIMEZONE_HOUR',
+ 'TIMEZONE_MINUTE',
+ 'TIMEZONE_REGION',
+ 'TIMING',
+ 'TO',
+ 'TO_CHAR',
+ 'TO_DATE',
+ 'TO_LOB',
+ 'TO_MULTI_BYTE',
+ 'TO_NUMBER',
+ 'TO_SINGLE_BYTE',
+ 'TRANSACTION',
+ 'TRANSLATE',
+ 'TRIGGER',
+ 'TRIM',
+ 'TRUE',
+ 'TRUNC',
+ 'TRUNCATE',
+ 'TYPE',
+ 'UI',
+ 'UID',
+ 'UNION',
+ 'UNIQUE',
+ 'UPDATE',
+ 'UPPER',
+ 'USE',
+ 'USER',
+ 'USERENV',
+ 'USING',
+ 'VALIDATE',
+ 'VALUE',
+ 'VALUES',
+ 'VAR_POP',
+ 'VAR_SAMP',
+ 'VARCHAR',
+ 'VARCHAR2',
+ 'VARIANCE',
+ 'VIEW',
+ 'VSIZE',
+ 'WHEN',
+ 'WHENEVER',
+ 'WHERE',
+ 'WHILE',
+ 'WITH',
+ 'WORK',
+ 'WRITE',
+ 'YEAR',
+ 'ZONE'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '=', '<', '>', '|', '+', '-', '*', '/', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+// 3 => false,
+// 4 => false,
+// 5 => false,
+// 6 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #993333; font-weight: bold; text-transform: uppercase;'
+//Add the styles for groups 3-6 here when used
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #ff0000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+// 3 => '',
+// 4 => '',
+// 5 => '',
+// 6 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php
new file mode 100644
index 000000000..01a66bfa0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php
@@ -0,0 +1,152 @@
+<?php
+/*************************************************************************************
+ * pascal.php
+ * ----------
+ * Author: Tux (tux@inamil.cz)
+ * Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/26
+ *
+ * Pascal language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.2)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.1)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.0)
+ * - Added support for symbols
+ * 2004/07/27 (0.9.1)
+ * - Pascal is OO language. Some new words.
+ * 2004/07/26 (0.9.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Pascal',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('{' => '}','(*' => '*)'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("''"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'absolute','asm','assembler','begin','break','case','catch','cdecl',
+ 'const','constructor','default','destructor','div','do','downto',
+ 'else','end','except','export','exports','external','far',
+ 'finalization','finally','for','forward','function','goto','if',
+ 'implementation','in','index','inherited','initialization','inline',
+ 'interface','interrupt','label','library','mod','name','not','of',
+ 'or','overload','override','private','procedure','program',
+ 'property','protected','public','published','raise','repeat',
+ 'resourcestring','shl','shr','stdcall','stored','switch','then',
+ 'to','try','type','unit','until','uses','var','while','xor'
+ ),
+ 2 => array(
+ 'nil', 'false', 'true',
+ ),
+ 3 => array(
+ 'abs','and','arc','arctan','blockread','blockwrite','chr','dispose',
+ 'cos','eof','eoln','exp','get','ln','new','odd','ord','ordinal',
+ 'pred','read','readln','sin','sqrt','succ','write','writeln'
+ ),
+ 4 => array(
+ 'ansistring','array','boolean','byte','bytebool','char','file',
+ 'integer','longbool','longint','object','packed','pointer','real',
+ 'record','set','shortint','smallint','string','union','word'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ ',', ':', '=', '+', '-', '*', '/'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;',
+ 4 => 'color: #000066; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0066ee;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php
new file mode 100644
index 000000000..ea9c75f8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php
@@ -0,0 +1,302 @@
+<?php
+/*************************************************************************************
+ * per.php
+ * --------
+ * Author: Lars Gersmann (lars.gersmann@gmail.com)
+ * Copyright: (c) 2007 Lars Gersmann
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/06/03
+ *
+ * Per (forms) (FOURJ's Genero 4GL) language file for GeSHi.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'per',
+ 'COMMENT_SINGLE' => array(1 => '--', 2 => '#'),
+ 'COMMENT_MULTI' => array('{' => '}'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ "ACCELERATOR",
+ "ACCELERATOR2",
+ "ACTION",
+ "ALT",
+ "AND",
+ "AUTO",
+ "AUTONEXT",
+ "AUTOSCALE",
+ "BETWEEN",
+ "BOTH",
+ "BUTTON",
+ "BUTTONEDIT",
+ "BUTTONTEXTHIDDEN",
+ "BY",
+ "BYTE",
+ "CANVAS",
+ "CENTER",
+ "CHECKBOX",
+ "CLASS",
+ "COLOR",
+ "COLUMNS",
+ "COMBOBOX",
+ "COMMAND",
+ "COMMENT",
+ "COMMENTS",
+ "COMPACT",
+ "COMPRESS",
+ "CONFIG",
+ "CONTROL",
+ "CURRENT",
+ "DATABASE",
+ "DATEEDIT",
+ "DEC",
+ "DEFAULT",
+ "DEFAULTS",
+ "DELIMITERS",
+ "DISPLAY",
+ "DISPLAYONLY",
+ "DOWNSHIFT",
+ "DYNAMIC",
+ "EDIT",
+ "FIXED",
+ "FOLDER",
+ "FONTPITCH",
+ "FORMAT",
+ "FORMONLY",
+ "GRID",
+ "GRIDCHILDRENINPARENT",
+ "GROUP",
+ "HBOX",
+ "HEIGHT",
+ "HIDDEN",
+ "HORIZONTAL",
+ "INCLUDE",
+ "INITIAL",
+ "INITIALIZER",
+ "INPUT",
+ "INSTRUCTIONS",
+ "INTERVAL",
+ "INVISIBLE",
+ "IS",
+ "ITEM",
+ "ITEMS",
+ "JUSTIFY",
+ "KEY",
+ "KEYS",
+ "LABEL",
+ "LEFT",
+ "LIKE",
+ "LINES",
+ "MATCHES",
+ "NAME",
+ "NOENTRY",
+ "NONCOMPRESS",
+ "NORMAL",
+ "NOT",
+ "NOUPDATE",
+ "OPTIONS",
+ "OR",
+ "ORIENTATION",
+ "PACKED",
+ "PAGE",
+ "PICTURE",
+ "PIXELHEIGHT",
+ "PIXELS",
+ "PIXELWIDTH",
+ "POINTS",
+ "PROGRAM",
+ "PROGRESSBAR",
+ "QUERYCLEAR",
+ "QUERYEDITABLE",
+ "RADIOGROUP",
+ "RECORD",
+ "REQUIRED",
+ "REVERSE",
+ "RIGHT",
+ "SAMPLE",
+ "SCREEN",
+ "SCROLL",
+ "SCROLLBARS",
+ "SCROLLGRID",
+ "SECOND",
+ "SEPARATOR",
+ "SHIFT",
+ "SIZE",
+ "SIZEPOLICY",
+ "SMALLFLOAT",
+ "SMALLINT",
+ "SPACING",
+ "STRETCH",
+ "STYLE",
+ "TABINDEX",
+ "TABLE",
+ "TAG",
+ "TEXT",
+ "TEXTEDIT",
+ "THROUGH",
+ "THRU",
+ "TITLE",
+ "TO",
+ "TOOLBAR",
+ "TOPMENU",
+ "TYPE",
+ "UNHIDABLE",
+ "UNHIDABLECOLUMNS",
+ "UNMOVABLE",
+ "UNMOVABLECOLUMNS",
+ "UNSIZABLE",
+ "UNSIZABLECOLUMNS",
+ "UNSORTABLE",
+ "UNSORTABLECOLUMNS",
+ "UPSHIFT",
+ "USER",
+ "VALIDATE",
+ "VALUECHECKED",
+ "VALUEMAX",
+ "VALUEMIN",
+ "VALUEUNCHECKED",
+ "VARCHAR",
+ "VARIABLE",
+ "VBOX",
+ "VERIFY",
+ "VERSION",
+ "VERTICAL",
+ "TIMESTAMP",
+ "WANTCOLUMNSANCHORED", /* to be removed! */
+ "WANTFIXEDPAGESIZE",
+ "WANTNORETURNS",
+ "WANTTABS",
+ "WHERE",
+ "WIDGET",
+ "WIDTH",
+ "WINDOWSTYLE",
+ "WITHOUT",
+ "WORDWRAP",
+ "X",
+ "Y",
+ "ZEROFILL",
+ "SCHEMA",
+ "ATTRIBUTES",
+ "TABLES",
+ "LAYOUT",
+ "END"
+ ),
+ 2 => array(
+ "YEAR",
+ "BLACK",
+ "BLINK",
+ "BLUE",
+ "YELLOW",
+ "WHITE",
+ "UNDERLINE",
+ "CENTURY",
+ "FRACTION",
+ "CHAR",
+ "CHARACTER",
+ "CHARACTERS",
+ "CYAN",
+ "DATE",
+ "DATETIME",
+ "DAY",
+ "DECIMAL",
+ "FALSE",
+ "FLOAT",
+ "GREEN",
+ "HOUR",
+ "INT",
+ "INTEGER",
+ "MAGENTA",
+ "MINUTE",
+ "MONEY",
+ "NONE",
+ "NULL",
+ "REAL",
+ "RED",
+ "TRUE",
+ "TODAY",
+ "MONTH",
+ "IMAGE"
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '+', '-', '*', '?', '=', '/', '%', '>', '<', '^', '!', '|', ':',
+ '(', ')', '[', ']'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF;',
+ 2 => 'color: #0000FF; font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080; font-style: italic;',
+ 2 => 'color: #008080;',
+ 'MULTI' => 'color: green'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #0000FF;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php
new file mode 100644
index 000000000..7c212515e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php
@@ -0,0 +1,213 @@
+<?php
+/*************************************************************************************
+ * perl.php
+ * --------
+ * Author: Andreas Gohr (andi@splitbrain.org), Ben Keen (ben.keen@gmail.com)
+ * Copyright: (c) 2004 Andreas Gohr, Ben Keen (http://www.benjaminkeen.org/), Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/20
+ *
+ * Perl language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/06/22 (1.0.8)
+ * - Added support for system calls in backticks (Corley Kinnane)
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * - Added comment_regexp for predefined variables
+ * 2008/02/15 (1.003)
+ * - Fixed SF#1891630 with placebo patch
+ * 2006/01/05 (1.0.2)
+ * - Used hardescape feature for ' strings (Cliff Stanford)
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/08/20 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * LABEL:
+ * * string comparison operators
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Perl',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(
+ '=back' => '=cut',
+ '=head' => '=cut',
+ '=item' => '=cut',
+ '=over' => '=cut',
+ '=begin' => '=cut',
+ '=end' => '=cut',
+ '=for' => '=cut',
+ '=encoding' => '=cut',
+ '=pod' => '=cut'
+ ),
+ 'COMMENT_REGEXP' => array(
+ //Regular expressions
+ 2 => "/(?<=[\\s^])(s|tr|y)\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/(?:\\\\.|(?!\n)[^\\/\\\\])*\\/[msixpogcde]*(?=[\\s$\\.\\;])|(?<=[\\s^(=])(m|q[qrwx]?)?\\/(?:\\\\.|(?!\n)[^\\/\\\\])+\\/[msixpogc]*(?=[\\s$\\.\\,\\;\\)])/iU",
+ //Regular expression match variables
+ 3 => '/\$\d+/',
+ //Heredoc
+ 4 => '/<<\s*?([\'"]?)([a-zA-Z0-9]+)\1;[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
+ //Predefined variables
+ 5 => '/\$(\^[a-zA-Z]?|[\*\$`\'&_\.,+\-~:;\\\\\/"\|%=\?!@#<>\(\)\[\]])(?!\w)|@[_+\-]|%[!]|\$(?=\{)/',
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"','`'),
+ 'HARDQUOTE' => array("'", "'"), // An optional 2-element array defining the beginning and end of a hard-quoted string
+ 'HARDESCAPE' => array('\\\'',),
+ // Things that must still be escaped inside a hard-quoted string
+ // If HARDQUOTE is defined, HARDESCAPE must be defined
+ // This will not work unless the first character of each element is either in the
+ // QUOTEMARKS array or is the ESCAPE_CHAR
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'case', 'do', 'else', 'elsif', 'for', 'if', 'then', 'until', 'while', 'foreach', 'my',
+ 'xor', 'or', 'and', 'unless', 'next', 'last', 'redo', 'not', 'our',
+ 'reset', 'continue', 'cmp', 'ne', 'eq', 'lt', 'gt', 'le', 'ge',
+ ),
+ 2 => array(
+ 'use', 'sub', 'new', '__END__', '__DATA__', '__DIE__', '__WARN__', 'BEGIN',
+ 'STDIN', 'STDOUT', 'STDERR', 'ARGV', 'ARGVOUT'
+ ),
+ 3 => array(
+ 'abs', 'accept', 'alarm', 'atan2', 'bind', 'binmode', 'bless',
+ 'caller', 'chdir', 'chmod', 'chomp', 'chop', 'chown', 'chr',
+ 'chroot', 'close', 'closedir', 'connect', 'cos',
+ 'crypt', 'dbmclose', 'dbmopen', 'defined', 'delete', 'die',
+ 'dump', 'each', 'endgrent', 'endhostent', 'endnetent', 'endprotoent',
+ 'endpwent', 'endservent', 'eof', 'eval', 'exec', 'exists', 'exit',
+ 'exp', 'fcntl', 'fileno', 'flock', 'fork', 'format', 'formline',
+ 'getc', 'getgrent', 'getgrgid', 'getgrnam', 'gethostbyaddr',
+ 'gethostbyname', 'gethostent', 'getlogin', 'getnetbyaddr', 'getnetbyname',
+ 'getnetent', 'getpeername', 'getpgrp', 'getppid', 'getpriority',
+ 'getprotobyname', 'getprotobynumber', 'getprotoent', 'getpwent',
+ 'getpwnam', 'getpwuid', 'getservbyname', 'getservbyport', 'getservent',
+ 'getsockname', 'getsockopt', 'glob', 'gmtime', 'goto', 'grep',
+ 'hex', 'import', 'index', 'int', 'ioctl', 'join', 'keys', 'kill',
+ 'lc', 'lcfirst', 'length', 'link', 'listen', 'local',
+ 'localtime', 'log', 'lstat', 'm', 'map', 'mkdir', 'msgctl', 'msgget',
+ 'msgrcv', 'msgsnd', 'no', 'oct', 'open', 'opendir',
+ 'ord', 'pack', 'package', 'pipe', 'pop', 'pos', 'print',
+ 'printf', 'prototype', 'push', 'qq', 'qr', 'quotemeta', 'qw',
+ 'qx', 'q', 'rand', 'read', 'readdir', 'readline', 'readlink', 'readpipe',
+ 'recv', 'ref', 'rename', 'require', 'return',
+ 'reverse', 'rewinddir', 'rindex', 'rmdir', 's', 'scalar', 'seek',
+ 'seekdir', 'select', 'semctl', 'semget', 'semop', 'send', 'setgrent',
+ 'sethostent', 'setnetent', 'setpgrp', 'setpriority', 'setprotoent',
+ 'setpwent', 'setservent', 'setsockopt', 'shift', 'shmctl', 'shmget',
+ 'shmread', 'shmwrite', 'shutdown', 'sin', 'sleep', 'socket', 'socketpair',
+ 'sort', 'splice', 'split', 'sprintf', 'sqrt', 'srand', 'stat',
+ 'study', 'substr', 'symlink', 'syscall', 'sysopen', 'sysread',
+ 'sysseek', 'system', 'syswrite', 'tell', 'telldir', 'tie', 'tied',
+ 'time', 'times', 'tr', 'truncate', 'uc', 'ucfirst', 'umask', 'undef',
+ 'unlink', 'unpack', 'unshift', 'untie', 'utime', 'values',
+ 'vec', 'wait', 'waitpid', 'wantarray', 'warn', 'write', 'y'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '<', '>', '=',
+ '!', '@', '~', '&', '|', '^',
+ '+','-', '*', '/', '%',
+ ',', ';', '?', '.', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #009966; font-style: italic;',
+ 3 => 'color: #0000ff;',
+ 4 => 'color: #cc0000; font-style: italic;',
+ 5 => 'color: #0000ff;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;',
+ 4 => 'color: #009999;',
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://perldoc.perl.org/functions/{FNAMEL}.html'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '-&gt;',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Variable
+ 0 => '(?:\$[\$#]?|\\\\(?:[@%*]?|\\\\*\$|&amp;)|%[$]?|@[$]?|\*[$]?|&amp;[$]?)[a-zA-Z_][a-zA-Z0-9_]*',
+ //File Descriptor
+ 4 => '&lt;[a-zA-Z_][a-zA-Z0-9_]*&gt;',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'COMMENTS' => array(
+ 'DISALLOWED_BEFORE' => '$'
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php
new file mode 100644
index 000000000..2a5d78611
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php
@@ -0,0 +1,222 @@
+<?php
+/*************************************************************************************
+ * php-brief.php
+ * -------------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/02
+ *
+ * PHP (brief version) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * - Fixed &new problem
+ * 2004/10/27 (1.0.2)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * * Remove more functions that are hardly used
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'PHP (brief)',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ //Heredoc and Nowdoc syntax
+ 'COMMENT_REGEXP' => array(3 => '/<<<\s*?(\'?)([a-zA-Z0-9]+)\1[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("\'"),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'include', 'require', 'include_once', 'require_once',
+ 'for', 'as', 'foreach', 'if', 'elseif', 'else', 'while', 'do', 'endwhile', 'endif', 'switch', 'case', 'endswitch',
+ 'return', 'break'
+ ),
+ 2 => array(
+ 'null', '__LINE__', '__FILE__',
+ 'false', '&lt;?php',
+ 'true', 'var', 'default',
+ 'function', 'class', 'new', '&amp;new', 'public', 'private', 'interface', 'extends',
+ 'const', 'self'
+ ),
+ 3 => array(
+ 'func_num_args', 'func_get_arg', 'func_get_args', 'strlen', 'strcmp', 'strncmp', 'strcasecmp', 'strncasecmp', 'each', 'error_reporting', 'define', 'defined',
+ 'trigger_error', 'user_error', 'set_error_handler', 'restore_error_handler', 'get_declared_classes', 'get_loaded_extensions',
+ 'extension_loaded', 'get_extension_funcs', 'debug_backtrace',
+ 'constant', 'bin2hex', 'sleep', 'usleep', 'time', 'mktime', 'gmmktime', 'strftime', 'gmstrftime', 'strtotime', 'date', 'gmdate', 'getdate', 'localtime', 'checkdate', 'flush', 'wordwrap', 'htmlspecialchars', 'htmlentities', 'html_entity_decode', 'md5', 'md5_file', 'crc32', 'getimagesize', 'image_type_to_mime_type', 'phpinfo', 'phpversion', 'phpcredits', 'strnatcmp', 'strnatcasecmp', 'substr_count', 'strspn', 'strcspn', 'strtok', 'strtoupper', 'strtolower', 'strpos', 'strrpos', 'strrev', 'hebrev', 'hebrevc', 'nl2br', 'basename', 'dirname', 'pathinfo', 'stripslashes', 'stripcslashes', 'strstr', 'stristr', 'strrchr', 'str_shuffle', 'str_word_count', 'strcoll', 'substr', 'substr_replace', 'quotemeta', 'ucfirst', 'ucwords', 'strtr', 'addslashes', 'addcslashes', 'rtrim', 'str_replace', 'str_repeat', 'count_chars', 'chunk_split', 'trim', 'ltrim', 'strip_tags', 'similar_text', 'explode', 'implode', 'setlocale', 'localeconv',
+ 'parse_str', 'str_pad', 'chop', 'strchr', 'sprintf', 'printf', 'vprintf', 'vsprintf', 'sscanf', 'fscanf', 'parse_url', 'urlencode', 'urldecode', 'rawurlencode', 'rawurldecode', 'readlink', 'linkinfo', 'link', 'unlink', 'exec', 'system', 'escapeshellcmd', 'escapeshellarg', 'passthru', 'shell_exec', 'proc_open', 'proc_close', 'rand', 'srand', 'getrandmax', 'mt_rand', 'mt_srand', 'mt_getrandmax', 'base64_decode', 'base64_encode', 'abs', 'ceil', 'floor', 'round', 'is_finite', 'is_nan', 'is_infinite', 'bindec', 'hexdec', 'octdec', 'decbin', 'decoct', 'dechex', 'base_convert', 'number_format', 'fmod', 'ip2long', 'long2ip', 'getenv', 'putenv', 'getopt', 'microtime', 'gettimeofday', 'getrusage', 'uniqid', 'quoted_printable_decode', 'set_time_limit', 'get_cfg_var', 'magic_quotes_runtime', 'set_magic_quotes_runtime', 'get_magic_quotes_gpc', 'get_magic_quotes_runtime',
+ 'import_request_variables', 'error_log', 'serialize', 'unserialize', 'memory_get_usage', 'var_dump', 'var_export', 'debug_zval_dump', 'print_r','highlight_file', 'show_source', 'highlight_string', 'ini_get', 'ini_get_all', 'ini_set', 'ini_alter', 'ini_restore', 'get_include_path', 'set_include_path', 'restore_include_path', 'setcookie', 'header', 'headers_sent', 'connection_aborted', 'connection_status', 'ignore_user_abort', 'parse_ini_file', 'is_uploaded_file', 'move_uploaded_file', 'intval', 'floatval', 'doubleval', 'strval', 'gettype', 'settype', 'is_null', 'is_resource', 'is_bool', 'is_long', 'is_float', 'is_int', 'is_integer', 'is_double', 'is_real', 'is_numeric', 'is_string', 'is_array', 'is_object', 'is_scalar',
+ 'ereg', 'ereg_replace', 'eregi', 'eregi_replace', 'split', 'spliti', 'join', 'sql_regcase', 'dl', 'pclose', 'popen', 'readfile', 'rewind', 'rmdir', 'umask', 'fclose', 'feof', 'fgetc', 'fgets', 'fgetss', 'fread', 'fopen', 'fpassthru', 'ftruncate', 'fstat', 'fseek', 'ftell', 'fflush', 'fwrite', 'fputs', 'mkdir', 'rename', 'copy', 'tempnam', 'tmpfile', 'file', 'file_get_contents', 'stream_select', 'stream_context_create', 'stream_context_set_params', 'stream_context_set_option', 'stream_context_get_options', 'stream_filter_prepend', 'stream_filter_append', 'fgetcsv', 'flock', 'get_meta_tags', 'stream_set_write_buffer', 'set_file_buffer', 'set_socket_blocking', 'stream_set_blocking', 'socket_set_blocking', 'stream_get_meta_data', 'stream_register_wrapper', 'stream_wrapper_register', 'stream_set_timeout', 'socket_set_timeout', 'socket_get_status', 'realpath', 'fnmatch', 'fsockopen', 'pfsockopen', 'pack', 'unpack', 'get_browser', 'crypt', 'opendir', 'closedir', 'chdir', 'getcwd', 'rewinddir', 'readdir', 'dir', 'glob', 'fileatime', 'filectime', 'filegroup', 'fileinode', 'filemtime', 'fileowner', 'fileperms', 'filesize', 'filetype', 'file_exists', 'is_writable', 'is_writeable', 'is_readable', 'is_executable', 'is_file', 'is_dir', 'is_link', 'stat', 'lstat', 'chown',
+ 'touch', 'clearstatcache', 'mail', 'ob_start', 'ob_flush', 'ob_clean', 'ob_end_flush', 'ob_end_clean', 'ob_get_flush', 'ob_get_clean', 'ob_get_length', 'ob_get_level', 'ob_get_status', 'ob_get_contents', 'ob_implicit_flush', 'ob_list_handlers', 'ksort', 'krsort', 'natsort', 'natcasesort', 'asort', 'arsort', 'sort', 'rsort', 'usort', 'uasort', 'uksort', 'shuffle', 'array_walk', 'count', 'end', 'prev', 'next', 'reset', 'current', 'key', 'min', 'max', 'in_array', 'array_search', 'extract', 'compact', 'array_fill', 'range', 'array_multisort', 'array_push', 'array_pop', 'array_shift', 'array_unshift', 'array_splice', 'array_slice', 'array_merge', 'array_merge_recursive', 'array_keys', 'array_values', 'array_count_values', 'array_reverse', 'array_reduce', 'array_pad', 'array_flip', 'array_change_key_case', 'array_rand', 'array_unique', 'array_intersect', 'array_intersect_assoc', 'array_diff', 'array_diff_assoc', 'array_sum', 'array_filter', 'array_map', 'array_chunk', 'array_key_exists', 'pos', 'sizeof', 'key_exists', 'assert', 'assert_options', 'version_compare', 'ftok', 'str_rot13', 'aggregate',
+ 'session_name', 'session_module_name', 'session_save_path', 'session_id', 'session_regenerate_id', 'session_decode', 'session_register', 'session_unregister', 'session_is_registered', 'session_encode',
+ 'session_start', 'session_destroy', 'session_unset', 'session_set_save_handler', 'session_cache_limiter', 'session_cache_expire', 'session_set_cookie_params', 'session_get_cookie_params', 'session_write_close', 'preg_match', 'preg_match_all', 'preg_replace', 'preg_replace_callback', 'preg_split', 'preg_quote', 'preg_grep', 'overload', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', 'ctype_digit', 'ctype_lower', 'ctype_graph', 'ctype_print', 'ctype_punct', 'ctype_space', 'ctype_upper', 'ctype_xdigit', 'virtual', 'apache_request_headers', 'apache_note', 'apache_lookup_uri', 'apache_child_terminate', 'apache_setenv', 'apache_response_headers', 'apache_get_version', 'getallheaders', 'mysql_connect', 'mysql_pconnect', 'mysql_close', 'mysql_select_db', 'mysql_create_db', 'mysql_drop_db', 'mysql_query', 'mysql_unbuffered_query', 'mysql_db_query', 'mysql_list_dbs', 'mysql_list_tables', 'mysql_list_fields', 'mysql_list_processes', 'mysql_error', 'mysql_errno', 'mysql_affected_rows', 'mysql_insert_id', 'mysql_result', 'mysql_num_rows', 'mysql_num_fields', 'mysql_fetch_row', 'mysql_fetch_array', 'mysql_fetch_assoc', 'mysql_fetch_object', 'mysql_data_seek', 'mysql_fetch_lengths', 'mysql_fetch_field', 'mysql_field_seek', 'mysql_free_result', 'mysql_field_name', 'mysql_field_table', 'mysql_field_len', 'mysql_field_type', 'mysql_field_flags', 'mysql_escape_string', 'mysql_real_escape_string', 'mysql_stat',
+ 'mysql_thread_id', 'mysql_client_encoding', 'mysql_get_client_info', 'mysql_get_host_info', 'mysql_get_proto_info', 'mysql_get_server_info', 'mysql_info', 'mysql', 'mysql_fieldname', 'mysql_fieldtable', 'mysql_fieldlen', 'mysql_fieldtype', 'mysql_fieldflags', 'mysql_selectdb', 'mysql_createdb', 'mysql_dropdb', 'mysql_freeresult', 'mysql_numfields', 'mysql_numrows', 'mysql_listdbs', 'mysql_listtables', 'mysql_listfields', 'mysql_db_name', 'mysql_dbname', 'mysql_tablename', 'mysql_table_name', 'pg_connect', 'pg_pconnect', 'pg_close', 'pg_connection_status', 'pg_connection_busy', 'pg_connection_reset', 'pg_host', 'pg_dbname', 'pg_port', 'pg_tty', 'pg_options', 'pg_ping', 'pg_query', 'pg_send_query', 'pg_cancel_query', 'pg_fetch_result', 'pg_fetch_row', 'pg_fetch_assoc', 'pg_fetch_array', 'pg_fetch_object', 'pg_fetch_all', 'pg_affected_rows', 'pg_get_result', 'pg_result_seek', 'pg_result_status', 'pg_free_result', 'pg_last_oid', 'pg_num_rows', 'pg_num_fields', 'pg_field_name', 'pg_field_num', 'pg_field_size', 'pg_field_type', 'pg_field_prtlen', 'pg_field_is_null', 'pg_get_notify', 'pg_get_pid', 'pg_result_error', 'pg_last_error', 'pg_last_notice', 'pg_put_line', 'pg_end_copy', 'pg_copy_to', 'pg_copy_from',
+ 'pg_trace', 'pg_untrace', 'pg_lo_create', 'pg_lo_unlink', 'pg_lo_open', 'pg_lo_close', 'pg_lo_read', 'pg_lo_write', 'pg_lo_read_all', 'pg_lo_import', 'pg_lo_export', 'pg_lo_seek', 'pg_lo_tell', 'pg_escape_string', 'pg_escape_bytea', 'pg_unescape_bytea', 'pg_client_encoding', 'pg_set_client_encoding', 'pg_meta_data', 'pg_convert', 'pg_insert', 'pg_update', 'pg_delete', 'pg_select', 'pg_exec', 'pg_getlastoid', 'pg_cmdtuples', 'pg_errormessage', 'pg_numrows', 'pg_numfields', 'pg_fieldname', 'pg_fieldsize', 'pg_fieldtype', 'pg_fieldnum', 'pg_fieldprtlen', 'pg_fieldisnull', 'pg_freeresult', 'pg_result', 'pg_loreadall', 'pg_locreate', 'pg_lounlink', 'pg_loopen', 'pg_loclose', 'pg_loread', 'pg_lowrite', 'pg_loimport', 'pg_loexport',
+ 'echo', 'print', 'global', 'static', 'exit', 'array', 'empty', 'eval', 'isset', 'unset', 'die'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ '<%', '<%=', '%>', '<?', '<?=', '?>'
+ ),
+ 0 => array(
+ '(', ')', '[', ']', '{', '}',
+ '!', '@', '%', '&', '|', '/',
+ '<', '>',
+ '=', '-', '+', '*',
+ '.', ':', ',', ';'
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #990000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #666666; font-style: italic;',
+ 3 => 'color: #0000cc; font-style: italic;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;',
+ 'HARD' => 'color: #0000ff;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #004000;',
+ 2 => 'color: #004000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;',
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.php.net/{FNAMEL}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '-&gt;',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<?php' => '?>'
+ ),
+ 1 => array(
+ '<?' => '?>'
+ ),
+ 2 => array(
+ '<%' => '%>'
+ ),
+ 3 => array(
+ '<script language="php">' => '</script>'
+ ),
+ 4 => "/(?<start><\\?(?>php\b)?)(?:".
+ "(?>[^\"'?\\/<]+)|".
+ "\\?(?!>)|".
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
+ "(?>\"(?>[^\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
+ "\\/\\/(?>.*?$)|".
+ "\\/(?=[^*\\/])|".
+ "<(?!<<)|".
+ "<<<(?<phpdoc>\w+)\s.*?\s\k<phpdoc>".
+ ")*(?<end>\\?>|\Z)/sm",
+ 5 => "/(?<start><%)(?:".
+ "(?>[^\"'%\\/<]+)|".
+ "%(?!>)|".
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
+ "(?>\"(?>[^\\\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
+ "\\/\\/(?>.*?$)|".
+ "\\/(?=[^*\\/])|".
+ "<(?!<<)|".
+ "<<<(?<phpdoc>\w+)\s.*?\s\k<phpdoc>".
+ ")*(?<end>%>)/sm"
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php
new file mode 100644
index 000000000..b96c947ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php
@@ -0,0 +1,1114 @@
+<?php
+/*************************************************************************************
+ * php.php
+ * --------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/20
+ *
+ * PHP language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/25 (1.0.3)
+ * - Added support for multiple object splitters
+ * - Fixed &new problem
+ * 2004/10/27 (1.0.2)
+ * - Added URL support
+ * - Added extra constants
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * * Make sure the last few function I may have missed
+ * (like eval()) are included for highlighting
+ * * Split to several files - php4, php5 etc
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'PHP',
+ 'COMMENT_SINGLE' => array(1 => '//', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ //Heredoc and Nowdoc syntax
+ 3 => '/<<<\s*?(\'?)([a-zA-Z0-9]+?)\1[^\n]*?\\n.*\\n\\2(?![a-zA-Z0-9])/siU',
+ // phpdoc comments
+ 4 => '#/\*\*(?![\*\/]).*\*/#sU',
+ // Advanced # handling
+ 2 => "/#.*?(?:(?=\?\>)|^)/smi"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'ESCAPE_REGEXP' => array(
+ //Simple Single Char Escapes
+ 1 => "#\\\\[nfrtv\$\"\n\\\\]#i",
+ //Hexadecimal Char Specs
+ 2 => "#\\\\x[\da-fA-F]{1,2}#i",
+ //Octal Char Specs
+ 3 => "#\\\\[0-7]{1,3}#",
+ //String Parsing of Variable Names
+ 4 => "#\\$[a-z0-9_]+(?:\\[[a-z0-9_]+\\]|->[a-z0-9_]+)?|(?:\\{\\$|\\$\\{)[a-z0-9_]+(?:\\[('?)[a-z0-9_]*\\1\\]|->[a-z0-9_]+)*\\}#i",
+ //Experimental extension supporting cascaded {${$var}} syntax
+ 5 => "#\$[a-z0-9_]+(?:\[[a-z0-9_]+\]|->[a-z0-9_]+)?|(?:\{\$|\$\{)[a-z0-9_]+(?:\[('?)[a-z0-9_]*\\1\]|->[a-z0-9_]+)*\}|\{\$(?R)\}#i",
+ //Format String support in ""-Strings
+ 6 => "#%(?:%|(?:\d+\\\\\\\$)?\\+?(?:\x20|0|'.)?-?(?:\d+|\\*)?(?:\.\d+)?[bcdefFosuxX])#"
+ ),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("'", "\\"),
+ 'HARDCHAR' => "\\",
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |
+ GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'as','break','case','continue','default','do','else','elseif',
+ 'endfor','endforeach','endif','endswitch','endwhile','for',
+ 'foreach','if','include','include_once','require','require_once',
+ 'return','switch','while',
+
+ 'echo','print'
+ ),
+ 2 => array(
+ '&amp;new','&lt;/script&gt;','&lt;?php','&lt;script language',
+ 'class','const','declare','extends','function','global','interface',
+ 'namespace','new','private','public','self','var'
+ ),
+ 3 => array(
+ 'abs','acos','acosh','addcslashes','addslashes','aggregate',
+ 'aggregate_methods','aggregate_methods_by_list',
+ 'aggregate_methods_by_regexp','aggregate_properties',
+ 'aggregate_properties_by_list','aggregate_properties_by_regexp',
+ 'aggregation_info','apache_child_terminate','apache_get_modules',
+ 'apache_get_version','apache_getenv','apache_lookup_uri',
+ 'apache_note','apache_request_headers','apache_response_headers',
+ 'apache_setenv','array','array_change_key_case','array_chunk',
+ 'array_combine','array_count_values','array_diff',
+ 'array_diff_assoc','array_diff_key','array_diff_uassoc',
+ 'array_diff_ukey','array_fill','array_fill_keys','array_filter',
+ 'array_flip','array_intersect','array_intersect_assoc',
+ 'array_intersect_key','array_intersect_uassoc',
+ 'array_intersect_ukey','array_key_exists','array_keys','array_map',
+ 'array_merge','array_merge_recursive','array_multisort','array_pad',
+ 'array_pop','array_product','array_push','array_rand',
+ 'array_reduce','array_reverse','array_search','array_shift',
+ 'array_slice','array_splice','array_sum','array_udiff',
+ 'array_udiff_assoc','array_udiff_uassoc','array_uintersect',
+ 'array_uintersect_assoc','array_uintersect_uassoc','array_unique',
+ 'array_unshift','array_values','array_walk','array_walk_recursive',
+ 'arsort','asin','asinh','asort','assert','assert_options','atan',
+ 'atan2','atanh','base_convert','base64_decode','base64_encode',
+ 'basename','bcadd','bccomp','bcdiv','bcmod','bcmul',
+ 'bcompiler_load','bcompiler_load_exe','bcompiler_parse_class',
+ 'bcompiler_read','bcompiler_write_class','bcompiler_write_constant',
+ 'bcompiler_write_exe_footer','bcompiler_write_file',
+ 'bcompiler_write_footer','bcompiler_write_function',
+ 'bcompiler_write_functions_from_file','bcompiler_write_header',
+ 'bcompiler_write_included_filename','bcpow','bcpowmod','bcscale',
+ 'bcsqrt','bcsub','bin2hex','bindec','bindtextdomain',
+ 'bind_textdomain_codeset','bitset_empty','bitset_equal',
+ 'bitset_excl','bitset_fill','bitset_from_array','bitset_from_hash',
+ 'bitset_from_string','bitset_in','bitset_incl',
+ 'bitset_intersection','bitset_invert','bitset_is_empty',
+ 'bitset_subset','bitset_to_array','bitset_to_hash',
+ 'bitset_to_string','bitset_union','blenc_encrypt','bzclose',
+ 'bzcompress','bzdecompress','bzerrno','bzerror','bzerrstr',
+ 'bzflush','bzopen','bzread','bzwrite','cal_days_in_month',
+ 'cal_from_jd','cal_info','cal_to_jd','call_user_func',
+ 'call_user_func_array','call_user_method','call_user_method_array',
+ 'ceil','chdir','checkdate','checkdnsrr','chgrp','chmod','chop',
+ 'chown','chr','chunk_split','class_exists','class_implements',
+ 'class_parents','classkit_aggregate_methods',
+ 'classkit_doc_comments','classkit_import','classkit_method_add',
+ 'classkit_method_copy','classkit_method_redefine',
+ 'classkit_method_remove','classkit_method_rename','clearstatcache',
+ 'closedir','closelog','com_create_guid','com_event_sink',
+ 'com_get_active_object','com_load_typelib','com_message_pump',
+ 'com_print_typeinfo','compact','confirm_phpdoc_compiled',
+ 'connection_aborted','connection_status','constant',
+ 'convert_cyr_string','convert_uudecode','convert_uuencode','copy',
+ 'cos','cosh','count','count_chars','cpdf_add_annotation',
+ 'cpdf_add_outline','cpdf_arc','cpdf_begin_text','cpdf_circle',
+ 'cpdf_clip','cpdf_close','cpdf_closepath',
+ 'cpdf_closepath_fill_stroke','cpdf_closepath_stroke',
+ 'cpdf_continue_text','cpdf_curveto','cpdf_end_text','cpdf_fill',
+ 'cpdf_fill_stroke','cpdf_finalize','cpdf_finalize_page',
+ 'cpdf_global_set_document_limits','cpdf_import_jpeg','cpdf_lineto',
+ 'cpdf_moveto','cpdf_newpath','cpdf_open','cpdf_output_buffer',
+ 'cpdf_page_init','cpdf_rect','cpdf_restore','cpdf_rlineto',
+ 'cpdf_rmoveto','cpdf_rotate','cpdf_rotate_text','cpdf_save',
+ 'cpdf_save_to_file','cpdf_scale','cpdf_set_action_url',
+ 'cpdf_set_char_spacing','cpdf_set_creator','cpdf_set_current_page',
+ 'cpdf_set_font','cpdf_set_font_directories',
+ 'cpdf_set_font_map_file','cpdf_set_horiz_scaling',
+ 'cpdf_set_keywords','cpdf_set_leading','cpdf_set_page_animation',
+ 'cpdf_set_subject','cpdf_set_text_matrix','cpdf_set_text_pos',
+ 'cpdf_set_text_rendering','cpdf_set_text_rise','cpdf_set_title',
+ 'cpdf_set_viewer_preferences','cpdf_set_word_spacing',
+ 'cpdf_setdash','cpdf_setflat','cpdf_setgray','cpdf_setgray_fill',
+ 'cpdf_setgray_stroke','cpdf_setlinecap','cpdf_setlinejoin',
+ 'cpdf_setlinewidth','cpdf_setmiterlimit','cpdf_setrgbcolor',
+ 'cpdf_setrgbcolor_fill','cpdf_setrgbcolor_stroke','cpdf_show',
+ 'cpdf_show_xy','cpdf_stringwidth','cpdf_stroke','cpdf_text',
+ 'cpdf_translate','crack_check','crack_closedict',
+ 'crack_getlastmessage','crack_opendict','crc32','create_function',
+ 'crypt','ctype_alnum','ctype_alpha','ctype_cntrl','ctype_digit',
+ 'ctype_graph','ctype_lower','ctype_print','ctype_punct',
+ 'ctype_space','ctype_upper','ctype_xdigit','curl_close',
+ 'curl_copy_handle','curl_errno','curl_error','curl_exec',
+ 'curl_getinfo','curl_init','curl_multi_add_handle',
+ 'curl_multi_close','curl_multi_exec','curl_multi_getcontent',
+ 'curl_multi_info_read','curl_multi_init','curl_multi_remove_handle',
+ 'curl_multi_select','curl_setopt','curl_setopt_array',
+ 'curl_version','current','cvsclient_connect','cvsclient_log',
+ 'cvsclient_login','cvsclient_retrieve','date','date_create',
+ 'date_date_set','date_default_timezone_get',
+ 'date_default_timezone_set','date_format','date_isodate_set',
+ 'date_modify','date_offset_get','date_parse','date_sun_info',
+ 'date_sunrise','date_sunset','date_time_set','date_timezone_get',
+ 'date_timezone_set','db_id_list','dba_close','dba_delete',
+ 'dba_exists','dba_fetch','dba_firstkey','dba_handlers','dba_insert',
+ 'dba_key_split','dba_list','dba_nextkey','dba_open','dba_optimize',
+ 'dba_popen','dba_replace','dba_sync','dbase_add_record',
+ 'dbase_close','dbase_create','dbase_delete_record',
+ 'dbase_get_header_info','dbase_get_record',
+ 'dbase_get_record_with_names','dbase_numfields','dbase_numrecords',
+ 'dbase_open','dbase_pack','dbase_replace_record',
+ 'dbg_get_all_contexts','dbg_get_all_module_names',
+ 'dbg_get_all_source_lines','dbg_get_context_name',
+ 'dbg_get_module_name','dbg_get_profiler_results',
+ 'dbg_get_source_context','dblist','dbmclose','dbmdelete',
+ 'dbmexists','dbmfetch','dbmfirstkey','dbminsert','dbmnextkey',
+ 'dbmopen','dbmreplace','dbx_close','dbx_compare','dbx_connect',
+ 'dbx_error','dbx_escape_string','dbx_fetch_row','dbx_query',
+ 'dbx_sort','dcgettext','dcngettext','deaggregate','debug_backtrace',
+ 'debug_zval_dump','debugbreak','decbin','dechex','decoct','define',
+ 'defined','define_syslog_variables','deg2rad','dgettext','die',
+ 'dio_close','dio_open','dio_read','dio_seek','dio_stat','dio_write',
+ 'dir','dirname','disk_free_space','disk_total_space',
+ 'diskfreespace','dl','dngettext','docblock_token_name',
+ 'docblock_tokenize','dom_import_simplexml','domxml_add_root',
+ 'domxml_attributes','domxml_children','domxml_doc_add_root',
+ 'domxml_doc_document_element','domxml_doc_get_element_by_id',
+ 'domxml_doc_get_elements_by_tagname','domxml_doc_get_root',
+ 'domxml_doc_set_root','domxml_doc_validate','domxml_doc_xinclude',
+ 'domxml_dump_mem','domxml_dump_mem_file','domxml_dump_node',
+ 'domxml_dumpmem','domxml_elem_get_attribute',
+ 'domxml_elem_set_attribute','domxml_get_attribute','domxml_getattr',
+ 'domxml_html_dump_mem','domxml_new_child','domxml_new_doc',
+ 'domxml_new_xmldoc','domxml_node','domxml_node_add_namespace',
+ 'domxml_node_attributes','domxml_node_children',
+ 'domxml_node_get_content','domxml_node_has_attributes',
+ 'domxml_node_new_child','domxml_node_set_content',
+ 'domxml_node_set_namespace','domxml_node_unlink_node',
+ 'domxml_open_file','domxml_open_mem','domxml_parser',
+ 'domxml_parser_add_chunk','domxml_parser_cdata_section',
+ 'domxml_parser_characters','domxml_parser_comment',
+ 'domxml_parser_end','domxml_parser_end_document',
+ 'domxml_parser_end_element','domxml_parser_entity_reference',
+ 'domxml_parser_get_document','domxml_parser_namespace_decl',
+ 'domxml_parser_processing_instruction',
+ 'domxml_parser_start_document','domxml_parser_start_element',
+ 'domxml_root','domxml_set_attribute','domxml_setattr',
+ 'domxml_substitute_entities_default','domxml_unlink_node',
+ 'domxml_version','domxml_xmltree','doubleval','each','easter_date',
+ 'easter_days','empty','end','ereg','ereg_replace','eregi',
+ 'eregi_replace','error_get_last','error_log','error_reporting',
+ 'escapeshellarg','escapeshellcmd','eval','event_deschedule',
+ 'event_dispatch','event_free','event_handle_signal',
+ 'event_have_events','event_init','event_new','event_pending',
+ 'event_priority_set','event_schedule','event_set','event_timeout',
+ 'exec','exif_imagetype','exif_read_data','exif_tagname',
+ 'exif_thumbnail','exit','exp','explode','expm1','extension_loaded',
+ 'extract','ezmlm_hash','fbird_add_user','fbird_affected_rows',
+ 'fbird_backup','fbird_blob_add','fbird_blob_cancel',
+ 'fbird_blob_close','fbird_blob_create','fbird_blob_echo',
+ 'fbird_blob_get','fbird_blob_import','fbird_blob_info',
+ 'fbird_blob_open','fbird_close','fbird_commit','fbird_commit_ret',
+ 'fbird_connect','fbird_db_info','fbird_delete_user','fbird_drop_db',
+ 'fbird_errcode','fbird_errmsg','fbird_execute','fbird_fetch_assoc',
+ 'fbird_fetch_object','fbird_fetch_row','fbird_field_info',
+ 'fbird_free_event_handler','fbird_free_query','fbird_free_result',
+ 'fbird_gen_id','fbird_maintain_db','fbird_modify_user',
+ 'fbird_name_result','fbird_num_fields','fbird_num_params',
+ 'fbird_param_info','fbird_pconnect','fbird_prepare','fbird_query',
+ 'fbird_restore','fbird_rollback','fbird_rollback_ret',
+ 'fbird_server_info','fbird_service_attach','fbird_service_detach',
+ 'fbird_set_event_handler','fbird_trans','fbird_wait_event','fclose',
+ 'fdf_add_doc_javascript','fdf_add_template','fdf_close',
+ 'fdf_create','fdf_enum_values','fdf_errno','fdf_error','fdf_get_ap',
+ 'fdf_get_attachment','fdf_get_encoding','fdf_get_file',
+ 'fdf_get_flags','fdf_get_opt','fdf_get_status','fdf_get_value',
+ 'fdf_get_version','fdf_header','fdf_next_field_name','fdf_open',
+ 'fdf_open_string','fdf_remove_item','fdf_save','fdf_save_string',
+ 'fdf_set_ap','fdf_set_encoding','fdf_set_file','fdf_set_flags',
+ 'fdf_set_javascript_action','fdf_set_on_import_javascript',
+ 'fdf_set_opt','fdf_set_status','fdf_set_submit_form_action',
+ 'fdf_set_target_frame','fdf_set_value','fdf_set_version','feof',
+ 'fflush','fgetc','fgetcsv','fgets','fgetss','file','file_exists',
+ 'file_get_contents','file_put_contents','fileatime','filectime',
+ 'filegroup','fileinode','filemtime','fileowner','fileperms',
+ 'filepro','filepro_fieldcount','filepro_fieldname',
+ 'filepro_fieldtype','filepro_fieldwidth','filepro_retrieve',
+ 'filepro_rowcount','filesize','filetype','filter_has_var',
+ 'filter_id','filter_input','filter_input_array','filter_list',
+ 'filter_var','filter_var_array','finfo_buffer','finfo_close',
+ 'finfo_file','finfo_open','finfo_set_flags','floatval','flock',
+ 'floor','flush','fmod','fnmatch','fopen','fpassthru','fprintf',
+ 'fputcsv','fputs','fread','frenchtojd','fribidi_charset_info',
+ 'fribidi_get_charsets','fribidi_log2vis','fscanf','fseek',
+ 'fsockopen','fstat','ftell','ftok','ftp_alloc','ftp_cdup',
+ 'ftp_chdir','ftp_chmod','ftp_close','ftp_connect','ftp_delete',
+ 'ftp_exec','ftp_fget','ftp_fput','ftp_get','ftp_get_option',
+ 'ftp_login','ftp_mdtm','ftp_mkdir','ftp_nb_continue','ftp_nb_fget',
+ 'ftp_nb_fput','ftp_nb_get','ftp_nb_put','ftp_nlist','ftp_pasv',
+ 'ftp_put','ftp_pwd','ftp_quit','ftp_raw','ftp_rawlist','ftp_rename',
+ 'ftp_rmdir','ftp_set_option','ftp_site','ftp_size',
+ 'ftp_ssl_connect','ftp_systype','ftruncate','function_exists',
+ 'func_get_arg','func_get_args','func_num_args','fwrite','gd_info',
+ 'getallheaders','getcwd','getdate','getenv','gethostbyaddr',
+ 'gethostbyname','gethostbynamel','getimagesize','getlastmod',
+ 'getmxrr','getmygid','getmyinode','getmypid','getmyuid','getopt',
+ 'getprotobyname','getprotobynumber','getrandmax','getrusage',
+ 'getservbyname','getservbyport','gettext','gettimeofday','gettype',
+ 'get_browser','get_cfg_var','get_class','get_class_methods',
+ 'get_class_vars','get_current_user','get_declared_classes',
+ 'get_defined_constants','get_defined_functions','get_defined_vars',
+ 'get_extension_funcs','get_headers','get_html_translation_table',
+ 'get_included_files','get_include_path','get_loaded_extensions',
+ 'get_magic_quotes_gpc','get_magic_quotes_runtime','get_meta_tags',
+ 'get_object_vars','get_parent_class','get_required_files',
+ 'get_resource_type','glob','gmdate','gmmktime','gmp_abs','gmp_add',
+ 'gmp_and','gmp_clrbit','gmp_cmp','gmp_com','gmp_div','gmp_div_q',
+ 'gmp_div_qr','gmp_div_r','gmp_divexact','gmp_fact','gmp_gcd',
+ 'gmp_gcdext','gmp_hamdist','gmp_init','gmp_intval','gmp_invert',
+ 'gmp_jacobi','gmp_legendre','gmp_mod','gmp_mul','gmp_neg',
+ 'gmp_nextprime','gmp_or','gmp_perfect_square','gmp_popcount',
+ 'gmp_pow','gmp_powm','gmp_prob_prime','gmp_random','gmp_scan0',
+ 'gmp_scan1','gmp_setbit','gmp_sign','gmp_sqrt','gmp_sqrtrem',
+ 'gmp_strval','gmp_sub','gmp_xor','gmstrftime','gopher_parsedir',
+ 'gregoriantojd','gzclose','gzcompress','gzdeflate','gzencode',
+ 'gzeof','gzfile','gzgetc','gzgets','gzgetss','gzinflate','gzopen',
+ 'gzpassthru','gzputs','gzread','gzrewind','gzseek','gztell',
+ 'gzuncompress','gzwrite','hash','hash_algos','hash_file',
+ 'hash_final','hash_hmac','hash_hmac_file','hash_init','hash_update',
+ 'hash_update_file','hash_update_stream','header','headers_list',
+ 'headers_sent','hebrev','hebrevc','hexdec','highlight_file',
+ 'highlight_string','html_doc','html_doc_file','html_entity_decode',
+ 'htmlentities','htmlspecialchars','htmlspecialchars_decode',
+ 'http_build_cookie','http_build_query','http_build_str',
+ 'http_build_url','http_cache_etag','http_cache_last_modified',
+ 'http_chunked_decode','http_date','http_deflate','http_get',
+ 'http_get_request_body','http_get_request_body_stream',
+ 'http_get_request_headers','http_head','http_inflate',
+ 'http_match_etag','http_match_modified','http_match_request_header',
+ 'http_negotiate_charset','http_negotiate_content_type',
+ 'http_negotiate_language','http_parse_cookie','http_parse_headers',
+ 'http_parse_message','http_parse_params',
+ 'http_persistent_handles_clean','http_persistent_handles_count',
+ 'http_persistent_handles_ident','http_post_data','http_post_fields',
+ 'http_put_data','http_put_file','http_put_stream','http_redirect',
+ 'http_request','http_request_body_encode',
+ 'http_request_method_exists','http_request_method_name',
+ 'http_request_method_register','http_request_method_unregister',
+ 'http_send_content_disposition','http_send_content_type',
+ 'http_send_data','http_send_file','http_send_last_modified',
+ 'http_send_status','http_send_stream','http_support',
+ 'http_throttle','hypot','i18n_convert','i18n_discover_encoding',
+ 'i18n_http_input','i18n_http_output','i18n_internal_encoding',
+ 'i18n_ja_jp_hantozen','i18n_mime_header_decode',
+ 'i18n_mime_header_encode','ibase_add_user','ibase_affected_rows',
+ 'ibase_backup','ibase_blob_add','ibase_blob_cancel',
+ 'ibase_blob_close','ibase_blob_create','ibase_blob_echo',
+ 'ibase_blob_get','ibase_blob_import','ibase_blob_info',
+ 'ibase_blob_open','ibase_close','ibase_commit','ibase_commit_ret',
+ 'ibase_connect','ibase_db_info','ibase_delete_user','ibase_drop_db',
+ 'ibase_errcode','ibase_errmsg','ibase_execute','ibase_fetch_assoc',
+ 'ibase_fetch_object','ibase_fetch_row','ibase_field_info',
+ 'ibase_free_event_handler','ibase_free_query','ibase_free_result',
+ 'ibase_gen_id','ibase_maintain_db','ibase_modify_user',
+ 'ibase_name_result','ibase_num_fields','ibase_num_params',
+ 'ibase_param_info','ibase_pconnect','ibase_prepare','ibase_query',
+ 'ibase_restore','ibase_rollback','ibase_rollback_ret',
+ 'ibase_server_info','ibase_service_attach','ibase_service_detach',
+ 'ibase_set_event_handler','ibase_trans','ibase_wait_event','iconv',
+ 'iconv_get_encoding','iconv_mime_decode',
+ 'iconv_mime_decode_headers','iconv_mime_encode',
+ 'iconv_set_encoding','iconv_strlen','iconv_strpos','iconv_strrpos',
+ 'iconv_substr','id3_get_frame_long_name','id3_get_frame_short_name',
+ 'id3_get_genre_id','id3_get_genre_list','id3_get_genre_name',
+ 'id3_get_tag','id3_get_version','id3_remove_tag','id3_set_tag',
+ 'idate','ignore_user_abort','image_type_to_extension',
+ 'image_type_to_mime_type','image2wbmp','imagealphablending',
+ 'imageantialias','imagearc','imagechar','imagecharup',
+ 'imagecolorallocate','imagecolorallocatealpha','imagecolorat',
+ 'imagecolorclosest','imagecolorclosestalpha','imagecolordeallocate',
+ 'imagecolorexact','imagecolorexactalpha','imagecolormatch',
+ 'imagecolorresolve','imagecolorresolvealpha','imagecolorset',
+ 'imagecolorsforindex','imagecolorstotal','imagecolortransparent',
+ 'imageconvolution','imagecopy','imagecopymerge',
+ 'imagecopymergegray','imagecopyresampled','imagecopyresized',
+ 'imagecreate','imagecreatefromgd','imagecreatefromgd2',
+ 'imagecreatefromgd2part','imagecreatefromgif','imagecreatefromjpeg',
+ 'imagecreatefrompng','imagecreatefromstring','imagecreatefromwbmp',
+ 'imagecreatefromxbm','imagecreatetruecolor','imagedashedline',
+ 'imagedestroy','imageellipse','imagefill','imagefilledarc',
+ 'imagefilledellipse','imagefilledpolygon','imagefilledrectangle',
+ 'imagefilltoborder','imagefilter','imagefontheight',
+ 'imagefontwidth','imageftbbox','imagefttext','imagegammacorrect',
+ 'imagegd','imagegd2','imagegif','imagegrabscreen','imagegrabwindow',
+ 'imageinterlace','imageistruecolor','imagejpeg','imagelayereffect',
+ 'imageline','imageloadfont','imagepalettecopy','imagepng',
+ 'imagepolygon','imagepsbbox','imagepsencodefont',
+ 'imagepsextendfont','imagepsfreefont','imagepsloadfont',
+ 'imagepsslantfont','imagepstext','imagerectangle','imagerotate',
+ 'imagesavealpha','imagesetbrush','imagesetpixel','imagesetstyle',
+ 'imagesetthickness','imagesettile','imagestring','imagestringup',
+ 'imagesx','imagesy','imagetruecolortopalette','imagettfbbox',
+ 'imagettftext','imagetypes','imagewbmp','imagexbm','imap_8bit',
+ 'imap_alerts','imap_append','imap_base64','imap_binary','imap_body',
+ 'imap_bodystruct','imap_check','imap_clearflag_full','imap_close',
+ 'imap_create','imap_createmailbox','imap_delete',
+ 'imap_deletemailbox','imap_errors','imap_expunge',
+ 'imap_fetch_overview','imap_fetchbody','imap_fetchheader',
+ 'imap_fetchstructure','imap_fetchtext','imap_get_quota',
+ 'imap_get_quotaroot','imap_getacl','imap_getmailboxes',
+ 'imap_getsubscribed','imap_header','imap_headerinfo','imap_headers',
+ 'imap_last_error','imap_list','imap_listmailbox',
+ 'imap_listsubscribed','imap_lsub','imap_mail','imap_mail_compose',
+ 'imap_mail_copy','imap_mail_move','imap_mailboxmsginfo',
+ 'imap_mime_header_decode','imap_msgno','imap_num_msg',
+ 'imap_num_recent','imap_open','imap_ping','imap_qprint',
+ 'imap_rename','imap_renamemailbox','imap_reopen',
+ 'imap_rfc822_parse_adrlist','imap_rfc822_parse_headers',
+ 'imap_rfc822_write_address','imap_savebody','imap_scan',
+ 'imap_scanmailbox','imap_search','imap_set_quota','imap_setacl',
+ 'imap_setflag_full','imap_sort','imap_status','imap_subscribe',
+ 'imap_thread','imap_timeout','imap_uid','imap_undelete',
+ 'imap_unsubscribe','imap_utf7_decode','imap_utf7_encode',
+ 'imap_utf8','implode','import_request_variables','in_array',
+ 'ini_alter','ini_get','ini_get_all','ini_restore','ini_set',
+ 'intval','ip2long','iptcembed','iptcparse','isset','is_a',
+ 'is_array','is_bool','is_callable','is_dir','is_double',
+ 'is_executable','is_file','is_finite','is_float','is_infinite',
+ 'is_int','is_integer','is_link','is_long','is_nan','is_null',
+ 'is_numeric','is_object','is_readable','is_real','is_resource',
+ 'is_scalar','is_soap_fault','is_string','is_subclass_of',
+ 'is_uploaded_file','is_writable','is_writeable','iterator_apply',
+ 'iterator_count','iterator_to_array','java_last_exception_clear',
+ 'java_last_exception_get','jddayofweek','jdmonthname','jdtofrench',
+ 'jdtogregorian','jdtojewish','jdtojulian','jdtounix','jewishtojd',
+ 'join','jpeg2wbmp','json_decode','json_encode','juliantojd','key',
+ 'key_exists','krsort','ksort','lcg_value','ldap_add','ldap_bind',
+ 'ldap_close','ldap_compare','ldap_connect','ldap_count_entries',
+ 'ldap_delete','ldap_dn2ufn','ldap_err2str','ldap_errno',
+ 'ldap_error','ldap_explode_dn','ldap_first_attribute',
+ 'ldap_first_entry','ldap_first_reference','ldap_free_result',
+ 'ldap_get_attributes','ldap_get_dn','ldap_get_entries',
+ 'ldap_get_option','ldap_get_values','ldap_get_values_len',
+ 'ldap_list','ldap_mod_add','ldap_mod_del','ldap_mod_replace',
+ 'ldap_modify','ldap_next_attribute','ldap_next_entry',
+ 'ldap_next_reference','ldap_parse_reference','ldap_parse_result',
+ 'ldap_read','ldap_rename','ldap_search','ldap_set_option',
+ 'ldap_sort','ldap_start_tls','ldap_unbind','levenshtein',
+ 'libxml_clear_errors','libxml_get_errors','libxml_get_last_error',
+ 'libxml_set_streams_context','libxml_use_internal_errors','link',
+ 'linkinfo','list','localeconv','localtime','log','log1p','log10',
+ 'long2ip','lstat','ltrim','lzf_compress','lzf_decompress',
+ 'lzf_optimized_for','magic_quotes_runtime','mail','max','mbereg',
+ 'mberegi','mberegi_replace','mbereg_match','mbereg_replace',
+ 'mbereg_search','mbereg_search_getpos','mbereg_search_getregs',
+ 'mbereg_search_init','mbereg_search_pos','mbereg_search_regs',
+ 'mbereg_search_setpos','mbregex_encoding','mbsplit','mbstrcut',
+ 'mbstrlen','mbstrpos','mbstrrpos','mbsubstr','mb_check_encoding',
+ 'mb_convert_case','mb_convert_encoding','mb_convert_kana',
+ 'mb_convert_variables','mb_decode_mimeheader',
+ 'mb_decode_numericentity','mb_detect_encoding','mb_detect_order',
+ 'mb_encode_mimeheader','mb_encode_numericentity','mb_ereg',
+ 'mb_eregi','mb_eregi_replace','mb_ereg_match','mb_ereg_replace',
+ 'mb_ereg_search','mb_ereg_search_getpos','mb_ereg_search_getregs',
+ 'mb_ereg_search_init','mb_ereg_search_pos','mb_ereg_search_regs',
+ 'mb_ereg_search_setpos','mb_get_info','mb_http_input',
+ 'mb_http_output','mb_internal_encoding','mb_language',
+ 'mb_list_encodings','mb_output_handler','mb_parse_str',
+ 'mb_preferred_mime_name','mb_regex_encoding','mb_regex_set_options',
+ 'mb_send_mail','mb_split','mb_strcut','mb_strimwidth','mb_stripos',
+ 'mb_stristr','mb_strlen','mb_strpos','mb_strrchr','mb_strrichr',
+ 'mb_strripos','mb_strrpos','mb_strstr','mb_strtolower',
+ 'mb_strtoupper','mb_strwidth','mb_substitute_character','mb_substr',
+ 'mb_substr_count','mcrypt_cbc','mcrypt_cfb','mcrypt_create_iv',
+ 'mcrypt_decrypt','mcrypt_ecb','mcrypt_enc_get_algorithms_name',
+ 'mcrypt_enc_get_block_size','mcrypt_enc_get_iv_size',
+ 'mcrypt_enc_get_key_size','mcrypt_enc_get_modes_name',
+ 'mcrypt_enc_get_supported_key_sizes',
+ 'mcrypt_enc_is_block_algorithm',
+ 'mcrypt_enc_is_block_algorithm_mode','mcrypt_enc_is_block_mode',
+ 'mcrypt_enc_self_test','mcrypt_encrypt','mcrypt_generic',
+ 'mcrypt_generic_deinit','mcrypt_generic_end','mcrypt_generic_init',
+ 'mcrypt_get_block_size','mcrypt_get_cipher_name',
+ 'mcrypt_get_iv_size','mcrypt_get_key_size','mcrypt_list_algorithms',
+ 'mcrypt_list_modes','mcrypt_module_close',
+ 'mcrypt_module_get_algo_block_size',
+ 'mcrypt_module_get_algo_key_size',
+ 'mcrypt_module_get_supported_key_sizes',
+ 'mcrypt_module_is_block_algorithm',
+ 'mcrypt_module_is_block_algorithm_mode',
+ 'mcrypt_module_is_block_mode','mcrypt_module_open',
+ 'mcrypt_module_self_test','mcrypt_ofb','md5','md5_file',
+ 'mdecrypt_generic','memcache_add','memcache_add_server',
+ 'memcache_close','memcache_connect','memcache_debug',
+ 'memcache_decrement','memcache_delete','memcache_flush',
+ 'memcache_get','memcache_get_extended_stats',
+ 'memcache_get_server_status','memcache_get_stats',
+ 'memcache_get_version','memcache_increment','memcache_pconnect',
+ 'memcache_replace','memcache_set','memcache_set_compress_threshold',
+ 'memcache_set_server_params','memory_get_peak_usage',
+ 'memory_get_usage','metaphone','mhash','mhash_count',
+ 'mhash_get_block_size','mhash_get_hash_name','mhash_keygen_s2k',
+ 'method_exists','microtime','mime_content_type','min',
+ 'ming_keypress','ming_setcubicthreshold','ming_setscale',
+ 'ming_useconstants','ming_useswfversion','mkdir','mktime',
+ 'money_format','move_uploaded_file','msql','msql_affected_rows',
+ 'msql_close','msql_connect','msql_create_db','msql_createdb',
+ 'msql_data_seek','msql_db_query','msql_dbname','msql_drop_db',
+ 'msql_dropdb','msql_error','msql_fetch_array','msql_fetch_field',
+ 'msql_fetch_object','msql_fetch_row','msql_field_flags',
+ 'msql_field_len','msql_field_name','msql_field_seek',
+ 'msql_field_table','msql_field_type','msql_fieldflags',
+ 'msql_fieldlen','msql_fieldname','msql_fieldtable','msql_fieldtype',
+ 'msql_free_result','msql_freeresult','msql_list_dbs',
+ 'msql_list_fields','msql_list_tables','msql_listdbs',
+ 'msql_listfields','msql_listtables','msql_num_fields',
+ 'msql_num_rows','msql_numfields','msql_numrows','msql_pconnect',
+ 'msql_query','msql_regcase','msql_result','msql_select_db',
+ 'msql_selectdb','msql_tablename','mssql_bind','mssql_close',
+ 'mssql_connect','mssql_data_seek','mssql_execute',
+ 'mssql_fetch_array','mssql_fetch_assoc','mssql_fetch_batch',
+ 'mssql_fetch_field','mssql_fetch_object','mssql_fetch_row',
+ 'mssql_field_length','mssql_field_name','mssql_field_seek',
+ 'mssql_field_type','mssql_free_result','mssql_free_statement',
+ 'mssql_get_last_message','mssql_guid_string','mssql_init',
+ 'mssql_min_error_severity','mssql_min_message_severity',
+ 'mssql_next_result','mssql_num_fields','mssql_num_rows',
+ 'mssql_pconnect','mssql_query','mssql_result','mssql_rows_affected',
+ 'mssql_select_db','mt_getrandmax','mt_rand','mt_srand','mysql',
+ 'mysql_affected_rows','mysql_client_encoding','mysql_close',
+ 'mysql_connect','mysql_createdb','mysql_create_db',
+ 'mysql_data_seek','mysql_dbname','mysql_db_name','mysql_db_query',
+ 'mysql_dropdb','mysql_drop_db','mysql_errno','mysql_error',
+ 'mysql_escape_string','mysql_fetch_array','mysql_fetch_assoc',
+ 'mysql_fetch_field','mysql_fetch_lengths','mysql_fetch_object',
+ 'mysql_fetch_row','mysql_fieldflags','mysql_fieldlen',
+ 'mysql_fieldname','mysql_fieldtable','mysql_fieldtype',
+ 'mysql_field_flags','mysql_field_len','mysql_field_name',
+ 'mysql_field_seek','mysql_field_table','mysql_field_type',
+ 'mysql_freeresult','mysql_free_result','mysql_get_client_info',
+ 'mysql_get_host_info','mysql_get_proto_info',
+ 'mysql_get_server_info','mysql_info','mysql_insert_id',
+ 'mysql_listdbs','mysql_listfields','mysql_listtables',
+ 'mysql_list_dbs','mysql_list_fields','mysql_list_processes',
+ 'mysql_list_tables','mysql_numfields','mysql_numrows',
+ 'mysql_num_fields','mysql_num_rows','mysql_pconnect','mysql_ping',
+ 'mysql_query','mysql_real_escape_string','mysql_result',
+ 'mysql_selectdb','mysql_select_db','mysql_set_charset','mysql_stat',
+ 'mysql_tablename','mysql_table_name','mysql_thread_id',
+ 'mysql_unbuffered_query','mysqli_affected_rows','mysqli_autocommit',
+ 'mysqli_bind_param','mysqli_bind_result','mysqli_change_user',
+ 'mysqli_character_set_name','mysqli_client_encoding','mysqli_close',
+ 'mysqli_commit','mysqli_connect','mysqli_connect_errno',
+ 'mysqli_connect_error','mysqli_data_seek','mysqli_debug',
+ 'mysqli_disable_reads_from_master','mysqli_disable_rpl_parse',
+ 'mysqli_dump_debug_info','mysqli_embedded_server_end',
+ 'mysqli_embedded_server_start','mysqli_enable_reads_from_master',
+ 'mysqli_enable_rpl_parse','mysqli_errno','mysqli_error',
+ 'mysqli_escape_string','mysqli_execute','mysqli_fetch',
+ 'mysqli_fetch_array','mysqli_fetch_assoc','mysqli_fetch_field',
+ 'mysqli_fetch_field_direct','mysqli_fetch_fields',
+ 'mysqli_fetch_lengths','mysqli_fetch_object','mysqli_fetch_row',
+ 'mysqli_field_count','mysqli_field_seek','mysqli_field_tell',
+ 'mysqli_free_result','mysqli_get_charset','mysqli_get_client_info',
+ 'mysqli_get_client_version','mysqli_get_host_info',
+ 'mysqli_get_metadata','mysqli_get_proto_info',
+ 'mysqli_get_server_info','mysqli_get_server_version',
+ 'mysqli_get_warnings','mysqli_info','mysqli_init',
+ 'mysqli_insert_id','mysqli_kill','mysqli_master_query',
+ 'mysqli_more_results','mysqli_multi_query','mysqli_next_result',
+ 'mysqli_num_fields','mysqli_num_rows','mysqli_options',
+ 'mysqli_param_count','mysqli_ping','mysqli_prepare','mysqli_query',
+ 'mysqli_real_connect','mysqli_real_escape_string',
+ 'mysqli_real_query','mysqli_report','mysqli_rollback',
+ 'mysqli_rpl_parse_enabled','mysqli_rpl_probe',
+ 'mysqli_rpl_query_type','mysqli_select_db','mysqli_send_long_data',
+ 'mysqli_send_query','mysqli_set_charset',
+ 'mysqli_set_local_infile_default','mysqli_set_local_infile_handler',
+ 'mysqli_set_opt','mysqli_slave_query','mysqli_sqlstate',
+ 'mysqli_ssl_set','mysqli_stat','mysqli_stmt_affected_rows',
+ 'mysqli_stmt_attr_get','mysqli_stmt_attr_set',
+ 'mysqli_stmt_bind_param','mysqli_stmt_bind_result',
+ 'mysqli_stmt_close','mysqli_stmt_data_seek','mysqli_stmt_errno',
+ 'mysqli_stmt_error','mysqli_stmt_execute','mysqli_stmt_fetch',
+ 'mysqli_stmt_field_count','mysqli_stmt_free_result',
+ 'mysqli_stmt_get_warnings','mysqli_stmt_init',
+ 'mysqli_stmt_insert_id','mysqli_stmt_num_rows',
+ 'mysqli_stmt_param_count','mysqli_stmt_prepare','mysqli_stmt_reset',
+ 'mysqli_stmt_result_metadata','mysqli_stmt_send_long_data',
+ 'mysqli_stmt_sqlstate','mysqli_stmt_store_result',
+ 'mysqli_store_result','mysqli_thread_id','mysqli_thread_safe',
+ 'mysqli_use_result','mysqli_warning_count','natcasesort','natsort',
+ 'new_xmldoc','next','ngettext','nl2br','nl_langinfo',
+ 'ntuser_getdomaincontroller','ntuser_getusergroups',
+ 'ntuser_getuserinfo','ntuser_getuserlist','number_format',
+ 'ob_clean','ob_deflatehandler','ob_end_clean','ob_end_flush',
+ 'ob_etaghandler','ob_flush','ob_get_clean','ob_get_contents',
+ 'ob_get_flush','ob_get_length','ob_get_level','ob_get_status',
+ 'ob_gzhandler','ob_iconv_handler','ob_implicit_flush',
+ 'ob_inflatehandler','ob_list_handlers','ob_start','ob_tidyhandler',
+ 'octdec','odbc_autocommit','odbc_binmode','odbc_close',
+ 'odbc_close_all','odbc_columnprivileges','odbc_columns',
+ 'odbc_commit','odbc_connect','odbc_cursor','odbc_data_source',
+ 'odbc_do','odbc_error','odbc_errormsg','odbc_exec','odbc_execute',
+ 'odbc_fetch_array','odbc_fetch_into','odbc_fetch_object',
+ 'odbc_fetch_row','odbc_field_len','odbc_field_name',
+ 'odbc_field_num','odbc_field_precision','odbc_field_scale',
+ 'odbc_field_type','odbc_foreignkeys','odbc_free_result',
+ 'odbc_gettypeinfo','odbc_longreadlen','odbc_next_result',
+ 'odbc_num_fields','odbc_num_rows','odbc_pconnect','odbc_prepare',
+ 'odbc_primarykeys','odbc_procedurecolumns','odbc_procedures',
+ 'odbc_result','odbc_result_all','odbc_rollback','odbc_setoption',
+ 'odbc_specialcolumns','odbc_statistics','odbc_tableprivileges',
+ 'odbc_tables','opendir','openlog','openssl_csr_export',
+ 'openssl_csr_export_to_file','openssl_csr_get_public_key',
+ 'openssl_csr_get_subject','openssl_csr_new','openssl_csr_sign',
+ 'openssl_error_string','openssl_free_key','openssl_get_privatekey',
+ 'openssl_get_publickey','openssl_open','openssl_pkcs12_export',
+ 'openssl_pkcs12_export_to_file','openssl_pkcs12_read',
+ 'openssl_pkcs7_decrypt','openssl_pkcs7_encrypt',
+ 'openssl_pkcs7_sign','openssl_pkcs7_verify','openssl_pkey_export',
+ 'openssl_pkey_export_to_file','openssl_pkey_free',
+ 'openssl_pkey_get_details','openssl_pkey_get_private',
+ 'openssl_pkey_get_public','openssl_pkey_new',
+ 'openssl_private_decrypt','openssl_private_encrypt',
+ 'openssl_public_decrypt','openssl_public_encrypt','openssl_seal',
+ 'openssl_sign','openssl_verify','openssl_x509_checkpurpose',
+ 'openssl_x509_check_private_key','openssl_x509_export',
+ 'openssl_x509_export_to_file','openssl_x509_free',
+ 'openssl_x509_parse','openssl_x509_read','ord',
+ 'output_add_rewrite_var','output_reset_rewrite_vars','overload',
+ 'outputdebugstring','pack','parse_ini_file','parse_str','parse_url',
+ 'parsekit_compile_file','parsekit_compile_string',
+ 'parsekit_func_arginfo','parsekit_opcode_flags',
+ 'parsekit_opcode_name','passthru','pathinfo','pclose',
+ 'pdf_add_bookmark','pdf_add_launchlink','pdf_add_locallink',
+ 'pdf_add_nameddest','pdf_add_note','pdf_add_pdflink',
+ 'pdf_add_thumbnail','pdf_add_weblink','pdf_arc','pdf_arcn',
+ 'pdf_attach_file','pdf_begin_font','pdf_begin_glyph',
+ 'pdf_begin_page','pdf_begin_pattern','pdf_begin_template',
+ 'pdf_circle','pdf_clip','pdf_close','pdf_close_image',
+ 'pdf_close_pdi','pdf_close_pdi_page','pdf_closepath',
+ 'pdf_closepath_fill_stroke','pdf_closepath_stroke','pdf_concat',
+ 'pdf_continue_text','pdf_create_gstate','pdf_create_pvf',
+ 'pdf_curveto','pdf_delete','pdf_delete_pvf','pdf_encoding_set_char',
+ 'pdf_end_font','pdf_end_glyph','pdf_end_page','pdf_end_pattern',
+ 'pdf_end_template','pdf_endpath','pdf_fill','pdf_fill_imageblock',
+ 'pdf_fill_pdfblock','pdf_fill_stroke','pdf_fill_textblock',
+ 'pdf_findfont','pdf_fit_image','pdf_fit_pdi_page',
+ 'pdf_fit_textline','pdf_get_apiname','pdf_get_buffer',
+ 'pdf_get_errmsg','pdf_get_errnum','pdf_get_parameter',
+ 'pdf_get_pdi_parameter','pdf_get_pdi_value','pdf_get_value',
+ 'pdf_initgraphics','pdf_lineto','pdf_load_font',
+ 'pdf_load_iccprofile','pdf_load_image','pdf_makespotcolor',
+ 'pdf_moveto','pdf_new','pdf_open_ccitt','pdf_open_file',
+ 'pdf_open_image','pdf_open_image_file','pdf_open_pdi',
+ 'pdf_open_pdi_page','pdf_place_image','pdf_place_pdi_page',
+ 'pdf_process_pdi','pdf_rect','pdf_restore','pdf_rotate','pdf_save',
+ 'pdf_scale','pdf_set_border_color','pdf_set_border_dash',
+ 'pdf_set_border_style','pdf_set_gstate','pdf_set_info',
+ 'pdf_set_parameter','pdf_set_text_pos','pdf_set_value',
+ 'pdf_setcolor','pdf_setdash','pdf_setdashpattern','pdf_setflat',
+ 'pdf_setfont','pdf_setlinecap','pdf_setlinejoin','pdf_setlinewidth',
+ 'pdf_setmatrix','pdf_setmiterlimit','pdf_setpolydash','pdf_shading',
+ 'pdf_shading_pattern','pdf_shfill','pdf_show','pdf_show_boxed',
+ 'pdf_show_xy','pdf_skew','pdf_stringwidth','pdf_stroke',
+ 'pdf_translate','pdo_drivers','pfsockopen','pg_affected_rows',
+ 'pg_cancel_query','pg_clientencoding','pg_client_encoding',
+ 'pg_close','pg_cmdtuples','pg_connect','pg_connection_busy',
+ 'pg_connection_reset','pg_connection_status','pg_convert',
+ 'pg_copy_from','pg_copy_to','pg_dbname','pg_delete','pg_end_copy',
+ 'pg_errormessage','pg_escape_bytea','pg_escape_string','pg_exec',
+ 'pg_execute','pg_fetch_all','pg_fetch_all_columns','pg_fetch_array',
+ 'pg_fetch_assoc','pg_fetch_object','pg_fetch_result','pg_fetch_row',
+ 'pg_fieldisnull','pg_fieldname','pg_fieldnum','pg_fieldprtlen',
+ 'pg_fieldsize','pg_fieldtype','pg_field_is_null','pg_field_name',
+ 'pg_field_num','pg_field_prtlen','pg_field_size','pg_field_table',
+ 'pg_field_type','pg_field_type_oid','pg_free_result',
+ 'pg_freeresult','pg_get_notify','pg_get_pid','pg_get_result',
+ 'pg_getlastoid','pg_host','pg_insert','pg_last_error',
+ 'pg_last_notice','pg_last_oid','pg_loclose','pg_locreate',
+ 'pg_loexport','pg_loimport','pg_loopen','pg_loread','pg_loreadall',
+ 'pg_lounlink','pg_lowrite','pg_lo_close','pg_lo_create',
+ 'pg_lo_export','pg_lo_import','pg_lo_open','pg_lo_read',
+ 'pg_lo_read_all','pg_lo_seek','pg_lo_tell','pg_lo_unlink',
+ 'pg_lo_write','pg_meta_data','pg_numfields','pg_numrows',
+ 'pg_num_fields','pg_num_rows','pg_options','pg_parameter_status',
+ 'pg_pconnect','pg_ping','pg_port','pg_prepare','pg_put_line',
+ 'pg_query','pg_query_params','pg_result','pg_result_error',
+ 'pg_result_error_field','pg_result_seek','pg_result_status',
+ 'pg_select','pg_send_execute','pg_send_prepare','pg_send_query',
+ 'pg_send_query_params','pg_set_client_encoding',
+ 'pg_set_error_verbosity','pg_setclientencoding','pg_trace',
+ 'pg_transaction_status','pg_tty','pg_unescape_bytea','pg_untrace',
+ 'pg_update','pg_version','php_egg_logo_guid','php_ini_loaded_file',
+ 'php_ini_scanned_files','php_logo_guid','php_real_logo_guid',
+ 'php_sapi_name','php_strip_whitespace','php_uname','phpcredits',
+ 'phpdoc_xml_from_string','phpinfo','phpversion','pi','png2wbmp',
+ 'pop3_close','pop3_delete_message','pop3_get_account_size',
+ 'pop3_get_message','pop3_get_message_count',
+ 'pop3_get_message_header','pop3_get_message_ids',
+ 'pop3_get_message_size','pop3_get_message_sizes','pop3_open',
+ 'pop3_undelete','popen','pos','posix_ctermid','posix_errno',
+ 'posix_getcwd','posix_getegid','posix_geteuid','posix_getgid',
+ 'posix_getgrgid','posix_getgrnam','posix_getgroups',
+ 'posix_getlogin','posix_getpgid','posix_getpgrp','posix_getpid',
+ 'posix_getppid','posix_getpwnam','posix_getpwuid','posix_getrlimit',
+ 'posix_getsid','posix_getuid','posix_get_last_error','posix_isatty',
+ 'posix_kill','posix_mkfifo','posix_setegid','posix_seteuid',
+ 'posix_setgid','posix_setpgid','posix_setsid','posix_setuid',
+ 'posix_strerror','posix_times','posix_ttyname','posix_uname','pow',
+ 'preg_grep','preg_last_error','preg_match','preg_match_all',
+ 'preg_quote','preg_replace','preg_replace_callback','preg_split',
+ 'prev','print_r','printf','proc_close','proc_get_status',
+ 'proc_open','proc_terminate','putenv','quoted_printable_decode',
+ 'quotemeta','rad2deg','radius_acct_open','radius_add_server',
+ 'radius_auth_open','radius_close','radius_config',
+ 'radius_create_request','radius_cvt_addr','radius_cvt_int',
+ 'radius_cvt_string','radius_demangle','radius_demangle_mppe_key',
+ 'radius_get_attr','radius_get_vendor_attr','radius_put_addr',
+ 'radius_put_attr','radius_put_int','radius_put_string',
+ 'radius_put_vendor_addr','radius_put_vendor_attr',
+ 'radius_put_vendor_int','radius_put_vendor_string',
+ 'radius_request_authenticator','radius_send_request',
+ 'radius_server_secret','radius_strerror','rand','range',
+ 'rawurldecode','rawurlencode','read_exif_data','readdir','readfile',
+ 'readgzfile','readlink','realpath','reg_close_key','reg_create_key',
+ 'reg_enum_key','reg_enum_value','reg_get_value','reg_open_key',
+ 'reg_set_value','register_shutdown_function',
+ 'register_tick_function','rename','res_close','res_get','res_list',
+ 'res_list_type','res_open','res_set','reset',
+ 'restore_error_handler','restore_include_path','rewind','rewinddir',
+ 'rmdir','round','rsort','rtrim','runkit_class_adopt',
+ 'runkit_class_emancipate','runkit_constant_add',
+ 'runkit_constant_redefine','runkit_constant_remove',
+ 'runkit_default_property_add','runkit_function_add',
+ 'runkit_function_copy','runkit_function_redefine',
+ 'runkit_function_remove','runkit_function_rename','runkit_import',
+ 'runkit_lint','runkit_lint_file','runkit_method_add',
+ 'runkit_method_copy','runkit_method_redefine',
+ 'runkit_method_remove','runkit_method_rename','runkit_object_id',
+ 'runkit_return_value_used','runkit_sandbox_output_handler',
+ 'runkit_superglobals','runkit_zval_inspect','scandir','sem_acquire',
+ 'sem_get','sem_release','sem_remove','serialize',
+ 'session_cache_expire','session_cache_limiter','session_commit',
+ 'session_decode','session_destroy','session_encode',
+ 'session_get_cookie_params','session_id','session_is_registered',
+ 'session_module_name','session_name','session_regenerate_id',
+ 'session_register','session_save_path','session_set_cookie_params',
+ 'session_set_save_handler','session_start','session_unregister',
+ 'session_unset','session_write_close','set_content',
+ 'set_error_handler','set_file_buffer','set_include_path',
+ 'set_magic_quotes_runtime','set_socket_blocking','set_time_limit',
+ 'setcookie','setlocale','setrawcookie','settype','sha1','sha1_file',
+ 'shell_exec','shmop_close','shmop_delete','shmop_open','shmop_read',
+ 'shmop_size','shmop_write','shm_attach','shm_detach','shm_get_var',
+ 'shm_put_var','shm_remove','shm_remove_var','show_source','shuffle',
+ 'similar_text','simplexml_import_dom','simplexml_load_file',
+ 'simplexml_load_string','sin','sinh','sizeof','sleep','smtp_close',
+ 'smtp_cmd_data','smtp_cmd_mail','smtp_cmd_rcpt','smtp_connect',
+ 'snmp_get_quick_print','snmp_get_valueretrieval','snmp_read_mib',
+ 'snmp_set_quick_print','snmp_set_valueretrieval','snmp2_get',
+ 'snmp2_getnext','snmp2_real_walk','snmp2_set','snmp2_walk',
+ 'snmp3_get','snmp3_getnext','snmp3_real_walk','snmp3_set',
+ 'snmp3_walk','snmpget','snmpgetnext','snmprealwalk','snmpset',
+ 'snmpwalk','snmpwalkoid','socket_accept','socket_bind',
+ 'socket_clear_error','socket_close','socket_connect',
+ 'socket_create','socket_create_listen','socket_create_pair',
+ 'socket_getopt','socket_getpeername','socket_getsockname',
+ 'socket_get_option','socket_get_status','socket_iovec_add',
+ 'socket_iovec_alloc','socket_iovec_delete','socket_iovec_fetch',
+ 'socket_iovec_free','socket_iovec_set','socket_last_error',
+ 'socket_listen','socket_read','socket_readv','socket_recv',
+ 'socket_recvfrom','socket_recvmsg','socket_select','socket_send',
+ 'socket_sendmsg','socket_sendto','socket_setopt','socket_set_block',
+ 'socket_set_blocking','socket_set_nonblock','socket_set_option',
+ 'socket_set_timeout','socket_shutdown','socket_strerror',
+ 'socket_write','socket_writev','sort','soundex','spl_autoload',
+ 'spl_autoload_call','spl_autoload_extensions',
+ 'spl_autoload_functions','spl_autoload_register',
+ 'spl_autoload_unregister','spl_classes','spl_object_hash','split',
+ 'spliti','sprintf','sql_regcase','sqlite_array_query',
+ 'sqlite_busy_timeout','sqlite_changes','sqlite_close',
+ 'sqlite_column','sqlite_create_aggregate','sqlite_create_function',
+ 'sqlite_current','sqlite_error_string','sqlite_escape_string',
+ 'sqlite_exec','sqlite_factory','sqlite_fetch_all',
+ 'sqlite_fetch_array','sqlite_fetch_column_types',
+ 'sqlite_fetch_object','sqlite_fetch_single','sqlite_fetch_string',
+ 'sqlite_field_name','sqlite_has_more','sqlite_has_prev',
+ 'sqlite_last_error','sqlite_last_insert_rowid','sqlite_libencoding',
+ 'sqlite_libversion','sqlite_next','sqlite_num_fields',
+ 'sqlite_num_rows','sqlite_open','sqlite_popen','sqlite_prev',
+ 'sqlite_query','sqlite_rewind','sqlite_seek','sqlite_single_query',
+ 'sqlite_udf_decode_binary','sqlite_udf_encode_binary',
+ 'sqlite_unbuffered_query','sqlite_valid','sqrt','srand','sscanf',
+ 'ssh2_auth_hostbased_file','ssh2_auth_none','ssh2_auth_password',
+ 'ssh2_auth_pubkey_file','ssh2_connect','ssh2_exec',
+ 'ssh2_fetch_stream','ssh2_fingerprint','ssh2_forward_accept',
+ 'ssh2_forward_listen','ssh2_methods_negotiated','ssh2_poll',
+ 'ssh2_publickey_add','ssh2_publickey_init','ssh2_publickey_list',
+ 'ssh2_publickey_remove','ssh2_scp_recv','ssh2_scp_send','ssh2_sftp',
+ 'ssh2_sftp_lstat','ssh2_sftp_mkdir','ssh2_sftp_readlink',
+ 'ssh2_sftp_realpath','ssh2_sftp_rename','ssh2_sftp_rmdir',
+ 'ssh2_sftp_stat','ssh2_sftp_symlink','ssh2_sftp_unlink',
+ 'ssh2_shell','ssh2_tunnel','stat','stats_absolute_deviation',
+ 'stats_cdf_beta','stats_cdf_binomial','stats_cdf_cauchy',
+ 'stats_cdf_chisquare','stats_cdf_exponential','stats_cdf_f',
+ 'stats_cdf_gamma','stats_cdf_laplace','stats_cdf_logistic',
+ 'stats_cdf_negative_binomial','stats_cdf_noncentral_chisquare',
+ 'stats_cdf_noncentral_f','stats_cdf_noncentral_t',
+ 'stats_cdf_normal','stats_cdf_poisson','stats_cdf_t',
+ 'stats_cdf_uniform','stats_cdf_weibull','stats_covariance',
+ 'stats_dens_beta','stats_dens_cauchy','stats_dens_chisquare',
+ 'stats_dens_exponential','stats_dens_f','stats_dens_gamma',
+ 'stats_dens_laplace','stats_dens_logistic','stats_dens_normal',
+ 'stats_dens_pmf_binomial','stats_dens_pmf_hypergeometric',
+ 'stats_dens_pmf_negative_binomial','stats_dens_pmf_poisson',
+ 'stats_dens_t','stats_dens_uniform','stats_dens_weibull',
+ 'stats_harmonic_mean','stats_kurtosis','stats_rand_gen_beta',
+ 'stats_rand_gen_chisquare','stats_rand_gen_exponential',
+ 'stats_rand_gen_f','stats_rand_gen_funiform','stats_rand_gen_gamma',
+ 'stats_rand_gen_ipoisson','stats_rand_gen_iuniform',
+ 'stats_rand_gen_noncenral_f','stats_rand_gen_noncentral_chisquare',
+ 'stats_rand_gen_noncentral_t','stats_rand_gen_normal',
+ 'stats_rand_gen_t','stats_rand_getsd','stats_rand_ibinomial',
+ 'stats_rand_ibinomial_negative','stats_rand_ignlgi',
+ 'stats_rand_phrase_to_seeds','stats_rand_ranf','stats_rand_setall',
+ 'stats_skew','stats_standard_deviation','stats_stat_binomial_coef',
+ 'stats_stat_correlation','stats_stat_factorial',
+ 'stats_stat_independent_t','stats_stat_innerproduct',
+ 'stats_stat_paired_t','stats_stat_percentile','stats_stat_powersum',
+ 'stats_variance','strcasecmp','strchr','strcmp','strcoll','strcspn',
+ 'stream_bucket_append','stream_bucket_make_writeable',
+ 'stream_bucket_new','stream_bucket_prepend','stream_context_create',
+ 'stream_context_get_default','stream_context_get_options',
+ 'stream_context_set_default','stream_context_set_option',
+ 'stream_context_set_params','stream_copy_to_stream',
+ 'stream_encoding','stream_filter_append','stream_filter_prepend',
+ 'stream_filter_register','stream_filter_remove',
+ 'stream_get_contents','stream_get_filters','stream_get_line',
+ 'stream_get_meta_data','stream_get_transports',
+ 'stream_get_wrappers','stream_is_local',
+ 'stream_notification_callback','stream_register_wrapper',
+ 'stream_resolve_include_path','stream_select','stream_set_blocking',
+ 'stream_set_timeout','stream_set_write_buffer',
+ 'stream_socket_accept','stream_socket_client',
+ 'stream_socket_enable_crypto','stream_socket_get_name',
+ 'stream_socket_pair','stream_socket_recvfrom',
+ 'stream_socket_sendto','stream_socket_server',
+ 'stream_socket_shutdown','stream_supports_lock',
+ 'stream_wrapper_register','stream_wrapper_restore',
+ 'stream_wrapper_unregister','strftime','stripcslashes','stripos',
+ 'stripslashes','strip_tags','stristr','strlen','strnatcasecmp',
+ 'strnatcmp','strpbrk','strncasecmp','strncmp','strpos','strrchr',
+ 'strrev','strripos','strrpos','strspn','strstr','strtok',
+ 'strtolower','strtotime','strtoupper','strtr','strval',
+ 'str_ireplace','str_pad','str_repeat','str_replace','str_rot13',
+ 'str_split','str_shuffle','str_word_count','substr',
+ 'substr_compare','substr_count','substr_replace','svn_add',
+ 'svn_auth_get_parameter','svn_auth_set_parameter','svn_cat',
+ 'svn_checkout','svn_cleanup','svn_client_version','svn_commit',
+ 'svn_diff','svn_export','svn_fs_abort_txn','svn_fs_apply_text',
+ 'svn_fs_begin_txn2','svn_fs_change_node_prop','svn_fs_check_path',
+ 'svn_fs_contents_changed','svn_fs_copy','svn_fs_delete',
+ 'svn_fs_dir_entries','svn_fs_file_contents','svn_fs_file_length',
+ 'svn_fs_is_dir','svn_fs_is_file','svn_fs_make_dir',
+ 'svn_fs_make_file','svn_fs_node_created_rev','svn_fs_node_prop',
+ 'svn_fs_props_changed','svn_fs_revision_prop',
+ 'svn_fs_revision_root','svn_fs_txn_root','svn_fs_youngest_rev',
+ 'svn_import','svn_info','svn_log','svn_ls','svn_repos_create',
+ 'svn_repos_fs','svn_repos_fs_begin_txn_for_commit',
+ 'svn_repos_fs_commit_txn','svn_repos_hotcopy','svn_repos_open',
+ 'svn_repos_recover','svn_status','svn_update','symlink',
+ 'sys_get_temp_dir','syslog','system','tan','tanh','tempnam',
+ 'textdomain','thread_get','thread_include','thread_lock',
+ 'thread_lock_try','thread_mutex_destroy','thread_mutex_init',
+ 'thread_set','thread_start','thread_unlock','tidy_access_count',
+ 'tidy_clean_repair','tidy_config_count','tidy_diagnose',
+ 'tidy_error_count','tidy_get_body','tidy_get_config',
+ 'tidy_get_error_buffer','tidy_get_head','tidy_get_html',
+ 'tidy_get_html_ver','tidy_get_output','tidy_get_release',
+ 'tidy_get_root','tidy_get_status','tidy_getopt','tidy_is_xhtml',
+ 'tidy_is_xml','tidy_parse_file','tidy_parse_string',
+ 'tidy_repair_file','tidy_repair_string','tidy_warning_count','time',
+ 'timezone_abbreviations_list','timezone_identifiers_list',
+ 'timezone_name_from_abbr','timezone_name_get','timezone_offset_get',
+ 'timezone_open','timezone_transitions_get','tmpfile',
+ 'token_get_all','token_name','touch','trigger_error',
+ 'transliterate','transliterate_filters_get','trim','uasort',
+ 'ucfirst','ucwords','uksort','umask','uniqid','unixtojd','unlink',
+ 'unpack','unregister_tick_function','unserialize','unset',
+ 'urldecode','urlencode','user_error','use_soap_error_handler',
+ 'usleep','usort','utf8_decode','utf8_encode','var_dump',
+ 'var_export','variant_abs','variant_add','variant_and',
+ 'variant_cast','variant_cat','variant_cmp',
+ 'variant_date_from_timestamp','variant_date_to_timestamp',
+ 'variant_div','variant_eqv','variant_fix','variant_get_type',
+ 'variant_idiv','variant_imp','variant_int','variant_mod',
+ 'variant_mul','variant_neg','variant_not','variant_or',
+ 'variant_pow','variant_round','variant_set','variant_set_type',
+ 'variant_sub','variant_xor','version_compare','virtual','vfprintf',
+ 'vprintf','vsprintf','wddx_add_vars','wddx_deserialize',
+ 'wddx_packet_end','wddx_packet_start','wddx_serialize_value',
+ 'wddx_serialize_vars','win_beep','win_browse_file',
+ 'win_browse_folder','win_create_link','win_message_box',
+ 'win_play_wav','win_shell_execute','win32_create_service',
+ 'win32_delete_service','win32_get_last_control_message',
+ 'win32_ps_list_procs','win32_ps_stat_mem','win32_ps_stat_proc',
+ 'win32_query_service_status','win32_scheduler_delete_task',
+ 'win32_scheduler_enum_tasks','win32_scheduler_get_task_info',
+ 'win32_scheduler_run','win32_scheduler_set_task_info',
+ 'win32_set_service_status','win32_start_service',
+ 'win32_start_service_ctrl_dispatcher','win32_stop_service',
+ 'wordwrap','xml_error_string','xml_get_current_byte_index',
+ 'xml_get_current_column_number','xml_get_current_line_number',
+ 'xml_get_error_code','xml_parse','xml_parser_create',
+ 'xml_parser_create_ns','xml_parser_free','xml_parser_get_option',
+ 'xml_parser_set_option','xml_parse_into_struct',
+ 'xml_set_character_data_handler','xml_set_default_handler',
+ 'xml_set_element_handler','xml_set_end_namespace_decl_handler',
+ 'xml_set_external_entity_ref_handler',
+ 'xml_set_notation_decl_handler','xml_set_object',
+ 'xml_set_processing_instruction_handler',
+ 'xml_set_start_namespace_decl_handler',
+ 'xml_set_unparsed_entity_decl_handler','xmldoc','xmldocfile',
+ 'xmlrpc_decode','xmlrpc_decode_request','xmlrpc_encode',
+ 'xmlrpc_encode_request','xmlrpc_get_type','xmlrpc_is_fault',
+ 'xmlrpc_parse_method_descriptions',
+ 'xmlrpc_server_add_introspection_data','xmlrpc_server_call_method',
+ 'xmlrpc_server_create','xmlrpc_server_destroy',
+ 'xmlrpc_server_register_introspection_callback',
+ 'xmlrpc_server_register_method','xmlrpc_set_type','xmltree',
+ 'xmlwriter_end_attribute','xmlwriter_end_cdata',
+ 'xmlwriter_end_comment','xmlwriter_end_document',
+ 'xmlwriter_end_dtd','xmlwriter_end_dtd_attlist',
+ 'xmlwriter_end_dtd_element','xmlwriter_end_dtd_entity',
+ 'xmlwriter_end_element','xmlwriter_end_pi','xmlwriter_flush',
+ 'xmlwriter_full_end_element','xmlwriter_open_memory',
+ 'xmlwriter_open_uri','xmlwriter_output_memory',
+ 'xmlwriter_set_indent','xmlwriter_set_indent_string',
+ 'xmlwriter_start_attribute','xmlwriter_start_attribute_ns',
+ 'xmlwriter_start_cdata','xmlwriter_start_comment',
+ 'xmlwriter_start_document','xmlwriter_start_dtd',
+ 'xmlwriter_start_dtd_attlist','xmlwriter_start_dtd_element',
+ 'xmlwriter_start_dtd_entity','xmlwriter_start_element',
+ 'xmlwriter_start_element_ns','xmlwriter_start_pi','xmlwriter_text',
+ 'xmlwriter_write_attribute','xmlwriter_write_attribute_ns',
+ 'xmlwriter_write_cdata','xmlwriter_write_comment',
+ 'xmlwriter_write_dtd','xmlwriter_write_dtd_attlist',
+ 'xmlwriter_write_dtd_element','xmlwriter_write_dtd_entity',
+ 'xmlwriter_write_element','xmlwriter_write_element_ns',
+ 'xmlwriter_write_pi','xmlwriter_write_raw','xpath_eval',
+ 'xpath_eval_expression','xpath_new_context','xpath_register_ns',
+ 'xpath_register_ns_auto','xptr_eval','xptr_new_context','yp_all',
+ 'yp_cat','yp_errno','yp_err_string','yp_first',
+ 'yp_get_default_domain','yp_master','yp_match','yp_next','yp_order',
+ 'zend_current_obfuscation_level','zend_get_cfg_var','zend_get_id',
+ 'zend_loader_current_file','zend_loader_enabled',
+ 'zend_loader_file_encoded','zend_loader_file_licensed',
+ 'zend_loader_install_license','zend_loader_version',
+ 'zend_logo_guid','zend_match_hostmasks','zend_obfuscate_class_name',
+ 'zend_obfuscate_function_name','zend_optimizer_version',
+ 'zend_runtime_obfuscate','zend_version','zip_close',
+ 'zip_entry_close','zip_entry_compressedsize',
+ 'zip_entry_compressionmethod','zip_entry_filesize','zip_entry_name',
+ 'zip_entry_open','zip_entry_read','zip_open','zip_read',
+ 'zlib_get_coding_type'
+ ),
+ 4 => array(
+ 'DEFAULT_INCLUDE_PATH', 'DIRECTORY_SEPARATOR', 'E_ALL',
+ 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_CORE_ERROR',
+ 'E_CORE_WARNING', 'E_ERROR', 'E_NOTICE', 'E_PARSE', 'E_STRICT',
+ 'E_USER_ERROR', 'E_USER_NOTICE', 'E_USER_WARNING', 'E_WARNING',
+ 'ENT_COMPAT','ENT_QUOTES','ENT_NOQUOTES',
+ 'false', 'null', 'PEAR_EXTENSION_DIR', 'PEAR_INSTALL_DIR',
+ 'PHP_BINDIR', 'PHP_CONFIG_FILE_PATH', 'PHP_DATADIR',
+ 'PHP_EXTENSION_DIR', 'PHP_LIBDIR',
+ 'PHP_LOCALSTATEDIR', 'PHP_OS',
+ 'PHP_OUTPUT_HANDLER_CONT', 'PHP_OUTPUT_HANDLER_END',
+ 'PHP_OUTPUT_HANDLER_START', 'PHP_SYSCONFDIR',
+ 'PHP_VERSION', 'true', '__CLASS__', '__FILE__', '__FUNCTION__',
+ '__LINE__', '__METHOD__'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 1 => array(
+ '<'.'%', '<'.'%=', '%'.'>', '<'.'?', '<'.'?=', '?'.'>'
+ ),
+ 0 => array(
+ '(', ')', '[', ']', '{', '}',
+ '!', '@', '%', '&', '|', '/',
+ '<', '>',
+ '=', '-', '+', '*',
+ '.', ':', ',', ';'
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #990000;',
+ 4 => 'color: #009900; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => 'color: #666666; font-style: italic;',
+ 3 => 'color: #0000cc; font-style: italic;',
+ 4 => 'color: #009933; font-style: italic;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 1 => 'color: #000099; font-weight: bold;',
+ 2 => 'color: #660099; font-weight: bold;',
+ 3 => 'color: #660099; font-weight: bold;',
+ 4 => 'color: #006699; font-weight: bold;',
+ 5 => 'color: #006699; font-weight: bold; font-style: italic;',
+ 6 => 'color: #009933; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;',
+ 'HARD' => 'color: #0000ff;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;',
+ GESHI_NUMBER_OCT_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_HEX_PREFIX => 'color: #208080;',
+ GESHI_NUMBER_FLT_SCI_ZERO => 'color:#800080;',
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #004000;',
+ 2 => 'color: #004000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;',
+ 1 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000088;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.php.net/{FNAMEL}',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '-&gt;',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<'.'?php' => '?'.'>'
+ ),
+ 1 => array(
+ '<'.'?' => '?'.'>'
+ ),
+ 2 => array(
+ '<'.'%' => '%'.'>'
+ ),
+ 3 => array(
+ '<script language="php">' => '</script>'
+ ),
+ 4 => "/(?<start><\\?(?>php\b)?)(?:".
+ "(?>[^\"'?\\/<]+)|".
+ "\\?(?!>)|".
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
+ "(?>\"(?>[^\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
+ "\\/\\/(?>.*?$)|".
+ "\\/(?=[^*\\/])|".
+ "<(?!<<)|".
+ "<<<(?<phpdoc>\w+)\s.*?\s\k<phpdoc>".
+ ")*(?<end>\\?>|\Z)/sm",
+ 5 => "/(?<start><%)(?:".
+ "(?>[^\"'%\\/<]+)|".
+ "%(?!>)|".
+ "(?>'(?>[^'\\\\]|\\\\'|\\\\\\\|\\\\)*')|".
+ "(?>\"(?>[^\\\"\\\\]|\\\\\"|\\\\\\\\|\\\\)*\")|".
+ "(?>\\/\\*(?>[^\\*]|(?!\\*\\/)\\*)*\\*\\/)|".
+ "\\/\\/(?>.*?$)|".
+ "\\/(?=[^*\\/])|".
+ "<(?!<<)|".
+ "<<<(?<phpdoc>\w+)\s.*?\s\k<phpdoc>".
+ ")*(?<end>%>)/sm",
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php
new file mode 100644
index 000000000..f25183ffb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php
@@ -0,0 +1,141 @@
+<?php
+/*************************************************************************************
+ * pic16.php
+ * -------
+ * Author: Phil Mattison (mattison@ohmikron.com)
+ * Copyright: (c) 2008 Ohmikron Corp. (http://www.ohmikron.com/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/07/30
+ *
+ * PIC16 Assembler language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/30 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2008/07/30)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'PIC16',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ /*Instructions*/
+ 1 => array(
+ 'addcf','adddcf','addlw','addwf','andlw','andwf','bc','bcf','bdc',
+ 'bnc','bndc','bnz','bsf','btfsc','btfss','bz','call','clrc','clrdc',
+ 'clrf','clrw','clrwdt','clrz','comf','decf','goto','incf','incfsz',
+ 'iorlw','iorwf','lcall','lgoto','movf','movfw','movlw','movwf',
+ 'option','negf','nop','retfie','retlw','return','rlf','rrf','setc',
+ 'setdc','setz','skpc','skpdc','skpnc','skpndc','skpnz','skpz',
+ 'sleep','subcf','subdcf','sublw','subwf','swapf','tris','tstf',
+ 'xorlw','xorwf'
+ ),
+ /*Registers*/
+ 2 => array(
+ 'INDF','TMR0','OPTION','PCL','STATUS','FSR','PORTA','PORTB','PORTC',
+ 'PORTD','PORTE','PORTF','TRISA','TRISB','TRISC','TRISD','TRISE',
+ 'TRISF','PCLATH','INTCON','PIR1','PIE1','PCON','CMCON','VRCON',
+ 'F','W'
+ ),
+ /*Directives*/
+ 3 => array(
+ '_BADRAM','BANKISEL','BANKSEL','CBLOCK','CODE','_CONFIG','CONSTANT',
+ 'DA','DATA','DB','DE','#DEFINE','DT','DW','ELSE','END','ENDC',
+ 'ENDIF','ENDM','ENDW','EQU','ERROR','ERRORLEVEL','EXITM','EXPAND',
+ 'EXTERN','FILL','GLOBAL','IDATA','_IDLOCS','IF','IFDEF','IFNDEF',
+ 'INCLUDE','#INCLUDE','LIST','LOCAL','MACRO','_MAXRAM','MESSG',
+ 'NOEXPAND','NOLIST','ORG','PAGE','PAGESEL','PROCESSOR','RADIX',
+ 'RES','SET','SPACE','SUBTITLE','TITLE','UDATA','UDATA_ACS',
+ 'UDATA_OVR','UDATA_SHR','#UNDEFINE','VARIABLE','WHILE',
+ 'D','H','O','B','A'
+ ),
+ ),
+ 'SYMBOLS' => array('=','.',',',':'),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000a0; font-weight: bold;',
+ 2 => 'color: #aa3300; font-weight: bold;',
+ 3 => 'color: #0000ff;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #00a000;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff7700;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff7700;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #7777ff;'
+ ),
+ 'REGEXPS' => array(),
+ 'SCRIPT' => array()
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC |
+ GESHI_NUMBER_BIN_SUFFIX |
+ GESHI_NUMBER_HEX_PREFIX |
+ GESHI_NUMBER_HEX_SUFFIX,
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "a-zA-Z0-9\$_\|\#>|^",
+ 'DISALLOWED_AFTER' => "a-zA-Z0-9_<\|%"
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php
new file mode 100644
index 000000000..b65e228a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php
@@ -0,0 +1,176 @@
+<?php
+/*************************************************************************************
+ * pixelbender.php
+ * ----------------
+ * Author: Richard Olsson (r@richardolsson.se)
+ * Copyright: (c) 2008 Richard Olsson (richardolsson.se)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/11/16
+ *
+ * Pixel Bender 1.0 language file for GeSHi.
+ *
+ *
+ * Please feel free to modify this file, although I would greatly appreciate
+ * it if you would then send some feedback on why the file needed to be
+ * changed, using the e-mail address above.
+ *
+ *
+ * The colors are inspired by those used in the Pixel Bender Toolkit, with
+ * some slight modifications.
+ *
+ * For more info on Pixel Bender, see the Adobe Labs Wiki article at
+ * http://labs.adobe.com/wiki/index.php/Pixel_Bender_Toolkit.
+ *
+ * Keyword groups are defined as follows (groups marked with an asterisk
+ * inherit their names from terminology used in the language specification
+ * included with the Pixel Bender Toolkit, see URL above.)
+ *
+ * 1. languageVersion & kernel keywords
+ * 2. Kernel Members *
+ * 3. Types *
+ * 4. Statements * & qualifiers (in, out, inout)
+ * 5. Built-in functions *
+ * 6. Meta-data names
+ * 7. Preprocessor & Pre-defined symbols *
+ *
+ *
+ * CHANGES
+ * -------
+ * 2008/11/16 (1.0.8.2)
+ * - Initial release
+ *
+ * TODO (updated 2008/11/16)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'Pixel Bender 1.0',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'languageVersion', 'kernel'
+ ),
+ 2 => array(
+ 'import', 'parameter', 'dependent', 'const', 'input', 'output',
+ 'evaluatePixel', 'evaluateDependents', 'needed', 'changed', 'generated'
+ ),
+ 3 => array(
+ 'bool', 'bool2', 'bool3', 'bool4', 'int', 'int2', 'int3', 'int4',
+ 'float', 'float2', 'float3', 'float4', 'float2x2', 'float3x3', 'float4x4',
+ 'pixel2', 'pixel3', 'pixel4', 'region', 'image1', 'image2', 'image3', 'image4',
+ 'imageRef', 'void'
+ ),
+ 4 => array(
+ 'in', 'out', 'inout', 'if', 'else', 'for', 'while', 'do', 'break',
+ 'continue', 'return'
+ ),
+ 5 => array(
+ 'radians', 'degrees', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'pow',
+ 'exp', 'exp2', 'log', 'log2', 'sqrt', 'inverseSqrt', 'abs', 'sign', 'floor',
+ 'ceil', 'fract', 'mod', 'min', 'max', 'step', 'clamp', 'mix', 'smoothStep',
+ 'length', 'distance', 'dot', 'cross', 'normalize', 'matrixCompMult', 'lessThan',
+ 'lessThanEqual', 'greaterThan', 'greaterThanEqual', 'equal', 'notEqual', 'any',
+ 'all', 'not', 'nowhere', 'everywhere', 'transform', 'union', 'intersect',
+ 'outset', 'inset', 'bounds', 'isEmpty', 'sample', 'sampleLinear', 'sampleNearest',
+ 'outCoord', 'dod', 'pixelSize', 'pixelAspectRatio'
+ ),
+ 6 => array(
+ 'namespace', 'vendor', 'version', 'minValue', 'maxValue', 'defaultValue', 'description'
+ ),
+ 7 => array(
+ '#if', '#endif', '#ifdef', '#elif', 'defined', '#define',
+ 'AIF_ATI', 'AIF_NVIDIA', 'AIF_FLASH_TARGET'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '%', '&', '|', '+', '-', '*', '/', '=', '<', '>', '?', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0033ff;',
+ 2 => 'color: #0033ff; font-weight: bold;',
+ 3 => 'color: #0033ff;',
+ 4 => 'color: #9900cc; font-weight: bold;',
+ 5 => 'color: #333333;',
+ 6 => 'color: #666666;',
+ 7 => 'color: #990000;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #009900;',
+ 'MULTI' => 'color: #3f5fbf;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #990000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000; font-weight:bold;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #000000;',
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array('.'),
+ 'REGEXPS' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php
new file mode 100644
index 000000000..6534a1922
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php
@@ -0,0 +1,256 @@
+<?php
+/*************************************************************************************
+ * plsql.php
+ * -------
+ * Author: Victor Engmark <victor.engmark@gmail.com>
+ * Copyright: (c) 2006 Victor Engmark (http://l0b0.net/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/10/26
+ *
+ * Oracle 9.2 PL/SQL language file for GeSHi.
+ * Formatting is based on the default setup of TOAD 8.6.
+ *
+ * CHANGES
+ * -------
+ * 2006/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/10/27)
+ * -------------------------
+ * * Add < and > to brackets
+ * * Remove symbols which are also comment delimiters / quote marks?
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'PL/SQL',
+ 'COMMENT_SINGLE' => array(1 =>'--'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2930
+ 'COMMENT_MULTI' => array('/*' => '*/'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2950
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"'), //http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ //PL/SQL reserved keywords (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/f_words.htm#LNPLS019)
+ 1 => array('ZONE', 'YEAR', 'WRITE', 'WORK', 'WITH', 'WHILE', 'WHERE',
+ 'WHENEVER', 'WHEN', 'VIEW', 'VARCHAR2', 'VARCHAR', 'VALUES',
+ 'VALIDATE', 'USE', 'UPDATE', 'UNIQUE', 'UNION', 'TYPE', 'TRUE',
+ 'TRIGGER', 'TO', 'TIMEZONE_REGION', 'TIMEZONE_MINUTE', 'TIMEZONE_HOUR',
+ 'TIMEZONE_ABBR', 'TIMESTAMP', 'TIME', 'THEN', 'TABLE', 'SYNONYM',
+ 'SUCCESSFUL', 'SUBTYPE', 'START', 'SQLERRM', 'SQLCODE', 'SQL', 'SPACE',
+ 'SMALLINT', 'SHARE', 'SET', 'SEPARATE', 'SELECT', 'SECOND',
+ 'SAVEPOINT', 'ROWTYPE', 'ROWNUM', 'ROWID', 'ROW', 'ROLLBACK',
+ 'REVERSE', 'RETURN', 'RELEASE', 'RECORD', 'REAL', 'RAW', 'RANGE',
+ 'RAISE', 'PUBLIC', 'PROCEDURE', 'PRIVATE', 'PRIOR', 'PRAGMA',
+ 'POSITIVEN', 'POSITIVE', 'PLS_INTEGER', 'PCTFREE', 'PARTITION',
+ 'PACKAGE', 'OUT', 'OTHERS', 'ORGANIZATION', 'ORDER', 'OR', 'OPTION',
+ 'OPERATOR', 'OPEN', 'OPAQUE', 'ON', 'OF', 'OCIROWID', 'NUMBER_BASE',
+ 'NUMBER', 'NULL', 'NOWAIT', 'NOT', 'NOCOPY', 'NEXTVAL', 'NEW',
+ 'NATURALN', 'NATURAL', 'MONTH', 'MODE', 'MLSLABEL', 'MINUTE', 'MINUS',
+ 'LOOP', 'LONG', 'LOCK', 'LIMITED', 'LIKE', 'LEVEL', 'JAVA',
+ 'ISOLATION', 'IS', 'INTO', 'INTERVAL', 'INTERSECT', 'INTERFACE',
+ 'INTEGER', 'INSERT', 'INDICATOR', 'INDEX', 'IN', 'IMMEDIATE', 'IF',
+ 'HOUR', 'HEAP', 'HAVING', 'GROUP', 'GOTO', 'FUNCTION', 'FROM',
+ 'FORALL', 'FOR', 'FLOAT', 'FETCH', 'FALSE', 'EXTENDS', 'EXIT',
+ 'EXISTS', 'EXECUTE', 'EXCLUSIVE', 'EXCEPTION', 'END', 'ELSIF', 'ELSE',
+ 'DROP', 'DO', 'DISTINCT', 'DESC', 'DELETE', 'DEFAULT', 'DECLARE',
+ 'DECIMAL', 'DAY', 'DATE', 'CURSOR', 'CURRVAL', 'CURRENT', 'CREATE',
+ 'CONSTANT', 'CONNECT', 'COMPRESS', 'COMMIT', 'COMMENT', 'COLLECT',
+ 'CLUSTER', 'CLOSE', 'CHECK', 'CHAR_BASE', 'CHAR', 'CASE', 'BY', 'BULK',
+ 'BOOLEAN', 'BODY', 'BINARY_INTEGER', 'BETWEEN', 'BEGIN', 'AUTHID',
+ 'AT', 'ASC', 'AS', 'ARRAY', 'ANY', 'AND', 'ALTER', 'ALL'),
+ //SQL functions (http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96540/toc.htm & http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96540/functions101a.htm#85925)
+ 2 => array('XMLTRANSFORM', 'XMLSEQUENCE', 'XMLFOREST', 'XMLELEMENT',
+ 'XMLCONCAT', 'XMLCOLATTVAL', 'XMLAGG', 'WIDTH_BUCKET', 'VSIZE',
+ 'VARIANCE', 'VAR_SAMP', 'VAR_POP', 'VALUE', 'USERENV', 'USER', 'UPPER',
+ 'UPDATEXML', 'UNISTR', 'UID', 'TZ_OFFSET', 'TRUNC', 'TRIM', 'TREAT',
+ 'TRANSLATE', 'TO_YMINTERVAL', 'TO_TIMESTAMP_TZ', 'TO_TIMESTAMP',
+ 'TO_SINGLE_BYTE', 'TO_NUMBER', 'TO_NCLOB', 'TO_NCHAR', 'TO_MULTI_BYTE',
+ 'TO_LOB', 'TO_DSINTERVAL', 'TO_DATE', 'TO_CLOB', 'TO_CHAR', 'TANH',
+ 'TAN', 'SYSTIMESTAMP', 'SYSDATE', 'SYS_XMLGEN', 'SYS_XMLAGG',
+ 'SYS_TYPEID', 'SYS_GUID', 'SYS_EXTRACT_UTC', 'SYS_DBURIGEN',
+ 'SYS_CONTEXT', 'SYS_CONNECT_BY_PATH', 'SUM', 'SUBSTR', 'STDDEV_SAMP',
+ 'STDDEV_POP', 'STDDEV', 'SQRT', 'SOUNDEX', 'SINH', 'SIN', 'SIGN',
+ 'SESSIONTIMEZONE', 'RTRIM', 'RPAD', 'ROWIDTONCHAR', 'ROWIDTOCHAR',
+ 'ROW_NUMBER', 'ROUND', 'REPLACE', 'REGR_SYY', 'REGR_SXY', 'REGR_SXX',
+ 'REGR_SLOPE', 'REGR_R2', 'REGR_INTERCEPT', 'REGR_COUNT', 'REGR_AVGY',
+ 'REGR_AVGX', 'REFTOHEX', 'REF', 'RAWTONHEX', 'RAWTOHEX',
+ 'RATIO_TO_REPORT', 'RANK', 'POWER', 'PERCENTILE_DISC',
+ 'PERCENTILE_CONT', 'PERCENT_RANK', 'PATH', 'NVL2', 'NVL',
+ 'NUMTOYMINTERVAL', 'NUMTODSINTERVAL', 'NULLIF', 'NTILE', 'NLSSORT',
+ 'NLS_UPPER', 'NLS_LOWER', 'NLS_INITCAP', 'NLS_CHARSET_NAME',
+ 'NLS_CHARSET_ID', 'NLS_CHARSET_DECL_LEN', 'NEXT_DAY', 'NEW_TIME',
+ 'NCHR', 'MONTHS_BETWEEN', 'MOD', 'MIN', 'MAX', 'MAKE_REF', 'LTRIM',
+ 'LPAD', 'LOWER', 'LOG', 'LOCALTIMESTAMP', 'LN', 'LENGTH', 'LEAST',
+ 'LEAD', 'LAST_VALUE', 'LAST_DAY', 'LAST', 'LAG', 'INSTR', 'INITCAP',
+ 'HEXTORAW', 'GROUPING_ID', 'GROUPING', 'GROUP_ID', 'GREATEST',
+ 'FROM_TZ', 'FLOOR', 'FIRST_VALUE', 'FIRST', 'EXTRACTVALUE', 'EXTRACT',
+ 'EXP', 'EXISTSNODE', 'EMPTY_CLOB', 'EMPTY_BLOB', 'DUMP', 'DEREF',
+ 'DEPTH', 'DENSE_RANK', 'DECOMPOSE', 'DECODE', 'DBTIMEZONE',
+ 'CURRENT_TIMESTAMP', 'CURRENT_DATE', 'CUME_DIST', 'COVAR_SAMP',
+ 'COVAR_POP', 'COUNT', 'COSH', 'COS', 'CORR', 'CONVERT', 'CONCAT',
+ 'COMPOSE', 'COALESCE', 'CHR', 'CHARTOROWID', 'CEIL', 'CAST', 'BITAND',
+ 'BIN_TO_NUM', 'BFILENAME', 'AVG', 'ATAN2', 'ATAN', 'ASIN', 'ASCIISTR',
+ 'ASCII', 'ADD_MONTHS', 'ACOS', 'ABS'),
+ //PL/SQL packages (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96612/intro2.htm#1025672)
+ 3 => array('UTL_URL', 'UTL_TCP', 'UTL_SMTP', 'UTL_REF', 'UTL_RAW',
+ 'UTL_PG', 'UTL_INADDR', 'UTL_HTTP', 'UTL_FILE', 'UTL_ENCODE',
+ 'UTL_COLL', 'SDO_UTIL', 'SDO_TUNE', 'SDO_MIGRATE', 'SDO_LRS',
+ 'SDO_GEOM', 'SDO_CS', 'DMBS_XMLQUERY', 'DMBS_FLASHBACK',
+ 'DMBS_DEFER_SYS', 'DEBUG_EXTPROC', 'DBMS_XSLPROCESSOR', 'DBMS_XPLAN',
+ 'DBMS_XMLSCHEMA', 'DBMS_XMLSAVE', 'DBMS_XMLPARSER', 'DBMS_XMLGEN',
+ 'DBMS_XMLDOM', 'DBMS_XDBT', 'DBMS_XDB_VERSION', 'DBMS_XDB', 'DBMS_WM',
+ 'DBMS_UTILITY', 'DBMS_TYPES', 'DBMS_TTS', 'DBMS_TRANSFORM',
+ 'DBMS_TRANSACTION', 'DBMS_TRACE', 'DBMS_STRM_A', 'DBMS_STRM',
+ 'DBMS_STORAGE_MAP', 'DBMS_STATS', 'DBMS_SQL', 'DBMS_SPACE_ADMIN',
+ 'DBMS_SPACE', 'DBMS_SHARED_POOL', 'DBMS_SESSION', 'DBMS_RULE_ADM',
+ 'DBMS_RULE', 'DBMS_ROWID', 'DBMS_RLS', 'DBMS_RESUMABLE',
+ 'DBMS_RESOURCE_MANAGER_PRIVS', 'DBMS_RESOURCE_MANAGER', 'DBMS_REPUTIL',
+ 'DBMS_REPCAT_RGT', 'DBMS_REPCAT_INSTATIATE', 'DBMS_REPCAT_ADMIN',
+ 'DBMS_REPCAT', 'DBMS_REPAIR', 'DBMS_REFRESH', 'DBMS_REDEFINITION',
+ 'DBMS_RECTIFIER_DIFF', 'DBMS_RANDOM', 'DBMS_PROPAGATION_ADM',
+ 'DBMS_PROFILER', 'DBMS_PIPE', 'DBMS_PCLXUTIL', 'DBMS_OUTPUT',
+ 'DBMS_OUTLN_EDIT', 'DBMS_OUTLN', 'DBMS_ORACLE_TRACE_USER',
+ 'DBMS_ORACLE_TRACE_AGENT', 'DBMS_OLAP', 'DBMS_OFFLINE_SNAPSHOT',
+ 'DBMS_OFFLINE_OG', 'DBMS_ODCI', 'DBMS_OBFUSCATION_TOOLKIT',
+ 'DBMS_MVIEW', 'DBMS_MGWMSG', 'DBMS_MGWADM', 'DBMS_METADATA',
+ 'DBMS_LOGSTDBY', 'DBMS_LOGMNR_D', 'DBMS_LOGMNR_CDC_SUBSCRIBE',
+ 'DBMS_LOGMNR_CDC_PUBLISH', 'DBMS_LOGMNR', 'DBMS_LOCK', 'DBMS_LOB',
+ 'DBMS_LIBCACHE', 'DBMS_LDAP', 'DBMS_JOB', 'DBMS_IOT',
+ 'DBMS_HS_PASSTHROUGH', 'DBMS_FGA', 'DBMS_DISTRIBUTED_TRUST_ADMIN',
+ 'DBMS_DESCRIBE', 'DBMS_DEFER_QUERY', 'DBMS_DEFER', 'DBMS_DEBUG',
+ 'DBMS_DDL', 'DBMS_CAPTURE_ADM', 'DBMS_AW', 'DBMS_AQELM', 'DBMS_AQADM',
+ 'DBMS_AQ', 'DBMS_APPLY_ADM', 'DBMS_APPLICATION_INFO', 'DBMS_ALERT',
+ 'CWM2_OLAP_AW_ACCESS'),
+ //PL/SQL predefined exceptions (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/07_errs.htm#784)
+ 4 => array('ZERO_DIVIDE', 'VALUE_ERROR', 'TOO_MANY_ROWS',
+ 'TIMEOUT_ON_RESOURCE', 'SYS_INVALID_ROWID', 'SUBSCRIPT_OUTSIDE_LIMIT',
+ 'SUBSCRIPT_BEYOND_COUNT', 'STORAGE_ERROR', 'SELF_IS_NULL',
+ 'ROWTYPE_MISMATCH', 'PROGRAM_ERROR', 'NOT_LOGGED_ON', 'NO_DATA_FOUND',
+ 'LOGIN_DENIED', 'INVALID_NUMBER', 'INVALID_CURSOR', 'DUP_VAL_ON_INDEX',
+ 'CURSOR_ALREADY_OPEN', 'COLLECTION_IS_NULL', 'CASE_NOT_FOUND',
+ 'ACCESS_INTO_NULL'),
+ //Static data dictionary views (http://download-uk.oracle.com/docs/cd/B10501_01/server.920/a96536/ch2.htm)
+ 5 => array('USER_REPSITES', 'USER_REPSCHEMA',
+ 'USER_REPRESOLUTION_STATISTICS', 'USER_REPRESOLUTION_METHOD',
+ 'USER_REPRESOLUTION', 'USER_REPRESOL_STATS_CONTROL', 'USER_REPPROP',
+ 'USER_REPPRIORITY_GROUP', 'USER_REPPRIORITY',
+ 'USER_REPPARAMETER_COLUMN', 'USER_REPOBJECT', 'USER_REPKEY_COLUMNS',
+ 'USER_REPGROUPED_COLUMN', 'USER_REPGROUP_PRIVILEGES', 'USER_REPGROUP',
+ 'USER_REPGENOBJECTS', 'USER_REPGENERATED', 'USER_REPFLAVORS',
+ 'USER_REPFLAVOR_OBJECTS', 'USER_REPFLAVOR_COLUMNS', 'USER_REPDDL',
+ 'USER_REPCONFLICT', 'USER_REPCOLUMN_GROUP', 'USER_REPCOLUMN',
+ 'USER_REPCATLOG', 'USER_REPCAT_USER_PARM_VALUES',
+ 'USER_REPCAT_USER_AUTHORIZATIONS', 'USER_REPCAT_TEMPLATE_SITES',
+ 'USER_REPCAT_TEMPLATE_PARMS', 'USER_REPCAT_TEMPLATE_OBJECTS',
+ 'USER_REPCAT_REFRESH_TEMPLATES', 'USER_REPCAT', 'USER_REPAUDIT_COLUMN',
+ 'USER_REPAUDIT_ATTRIBUTE', 'DBA_REPSITES_NEW', 'DBA_REPSITES',
+ 'DBA_REPSCHEMA', 'DBA_REPRESOLUTION_STATISTICS',
+ 'DBA_REPRESOLUTION_METHOD', 'DBA_REPRESOLUTION',
+ 'DBA_REPRESOL_STATS_CONTROL', 'DBA_REPPROP', 'DBA_REPPRIORITY_GROUP',
+ 'DBA_REPPRIORITY', 'DBA_REPPARAMETER_COLUMN', 'DBA_REPOBJECT',
+ 'DBA_REPKEY_COLUMNS', 'DBA_REPGROUPED_COLUMN',
+ 'DBA_REPGROUP_PRIVILEGES', 'DBA_REPGROUP', 'DBA_REPGENOBJECTS',
+ 'DBA_REPGENERATED', 'DBA_REPFLAVORS', 'DBA_REPFLAVOR_OBJECTS',
+ 'DBA_REPFLAVOR_COLUMNS', 'DBA_REPEXTENSIONS', 'DBA_REPDDL',
+ 'DBA_REPCONFLICT', 'DBA_REPCOLUMN_GROUP', 'DBA_REPCOLUMN',
+ 'DBA_REPCATLOG', 'DBA_REPCAT_USER_PARM_VALUES',
+ 'DBA_REPCAT_USER_AUTHORIZATIONS', 'DBA_REPCAT_TEMPLATE_SITES',
+ 'DBA_REPCAT_TEMPLATE_PARMS', 'DBA_REPCAT_TEMPLATE_OBJECTS',
+ 'DBA_REPCAT_REFRESH_TEMPLATES', 'DBA_REPCAT_EXCEPTIONS', 'DBA_REPCAT',
+ 'DBA_REPAUDIT_COLUMN', 'DBA_REPAUDIT_ATTRIBUTE', 'ALL_REPSITES',
+ 'ALL_REPSCHEMA', 'ALL_REPRESOLUTION_STATISTICS',
+ 'ALL_REPRESOLUTION_METHOD', 'ALL_REPRESOLUTION',
+ 'ALL_REPRESOL_STATS_CONTROL', 'ALL_REPPROP', 'ALL_REPPRIORITY_GROUP',
+ 'ALL_REPPRIORITY', 'ALL_REPPARAMETER_COLUMN', 'ALL_REPOBJECT',
+ 'ALL_REPKEY_COLUMNS', 'ALL_REPGROUPED_COLUMN',
+ 'ALL_REPGROUP_PRIVILEGES', 'ALL_REPGROUP', 'ALL_REPGENOBJECTS',
+ 'ALL_REPGENERATED', 'ALL_REPFLAVORS', 'ALL_REPFLAVOR_OBJECTS',
+ 'ALL_REPFLAVOR_COLUMNS', 'ALL_REPDDL', 'ALL_REPCONFLICT',
+ 'ALL_REPCOLUMN_GROUP', 'ALL_REPCOLUMN', 'ALL_REPCATLOG',
+ 'ALL_REPCAT_USER_PARM_VALUES', 'ALL_REPCAT_USER_AUTHORIZATIONS',
+ 'ALL_REPCAT_TEMPLATE_SITES', 'ALL_REPCAT_TEMPLATE_PARMS',
+ 'ALL_REPCAT_TEMPLATE_OBJECTS', 'ALL_REPCAT_REFRESH_TEMPLATES',
+ 'ALL_REPCAT', 'ALL_REPAUDIT_COLUMN', 'ALL_REPAUDIT_ATTRIBUTE')
+ ),
+ 'SYMBOLS' => array(
+ //PL/SQL delimiters (http://download-uk.oracle.com/docs/cd/B10501_01/appdev.920/a96624/02_funds.htm#2732)
+ '+', '%', "'", '.', '/', '(', ')', ':', ',', '*', '"', '=', '<', '>', '@', ';', '-', ':=', '=>', '||', '**', '<<', '>>', '/*', '*/', '..', '<>', '!=', '~=', '^=', '<=', '>='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #00F;',
+ 2 => 'color: #000;',
+ 3 => 'color: #00F;',
+ 4 => 'color: #F00;',
+ 5 => 'color: #800;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #080; font-style: italic;',
+ 'MULTI' => 'color: #080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #00F;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #F00;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #800;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #0F0;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #00F;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ 0 => 'color: #0F0;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
+ 2 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
+ 3 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
+ 4 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}',
+ 5 => 'http://www.oracle.com/pls/db92/db92.drilldown?word={FNAMEU}'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php
new file mode 100644
index 000000000..af6c443da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php
@@ -0,0 +1,199 @@
+<?php
+/*************************************************************************************
+ * povray.php
+ * --------
+ * Author: Carl Fürstenberg (azatoth@gmail.com)
+ * Copyright: © 2007 Carl Fürstenberg
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/07/11
+ *
+ * Povray language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/11 (1.0.8)
+ * - initial import to GeSHi SVN
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'POVRAY',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'yes', 'wrinkles', 'wood', 'width', 'waves', 'water_level', 'warp', 'vturbulence',
+ 'vstr', 'vrotate', 'vnormalize', 'vlength', 'vcross', 'vaxis_rotate', 'variance', 'v_steps',
+ 'uv_mapping', 'utf8', 'use_index', 'use_colour', 'use_color', 'use_alpha', 'up', 'undef',
+ 'ultra_wide_angle', 'u_steps', 'type', 'turbulence', 'turb_depth', 'ttf', 'true', 'triangle_wave',
+ 'translate', 'transform', 'trace', 'toroidal', 'tolerance', 'tiles', 'tile2', 'tightness',
+ 'tiff', 'threshold', 'thickness', 'tga', 'texture_map', 'target', 'sys', 'sum',
+ 'substr', 'sturm', 'strupr', 'strlwr', 'strength', 'str', 'statistics', 'sqr',
+ 'spotted', 'spotlight', 'split_union', 'spline', 'spiral2', 'spiral1', 'spherical', 'specular',
+ 'spacing', 'solid', 'smooth', 'slope', 'slice', 'sky', 'size', 'sine_wave',
+ 'shadowless', 'scattering', 'scallop_wave', 'scale', 'save_file', 'samples', 'roughness', 'rotate',
+ 'ripples', 'right', 'rgbt', 'rgbft', 'rgbf', 'rgb', 'repeat', 'render',
+ 'refraction', 'reflection_exponent', 'recursion_limit', 'reciprocal', 'ratio', 'ramp_wave', 'radius', 'radial',
+ 'quilted', 'quick_colour', 'quick_color', 'quaternion', 'quadratic_spline', 'pwr', 'projected_through', 'prod',
+ 'pretrace_start', 'pretrace_end', 'precompute', 'precision', 'ppm', 'pow', 'pot', 'poly_wave',
+ 'point_at', 'png', 'planar', 'pigment_pattern', 'pi', 'phong_size', 'phong', 'phase',
+ 'pgm', 'perspective', 'pattern', 'pass_through', 'parallel', 'panoramic', 'orthographic', 'orientation',
+ 'orient', 'open', 'onion', 'once', 'on', 'omnimax', 'omega', 'offset',
+ 'off', 'octaves', 'number_of_waves', 'noise_generator', 'no_shadow', 'no_reflection', 'no_image', 'no_bump_scale',
+ 'no', 'nearest_count', 'natural_spline', 'mortar', 'minimum_reuse', 'min_extent', 'metric', 'method',
+ 'metallic', 'media_interaction', 'media_attenuation', 'media', 'max_trace_level', 'max_trace', 'max_sample', 'max_iteration',
+ 'max_intersections', 'max_gradient', 'max_extent', 'matrix', 'material_map', 'marble', 'map_type', 'mandel',
+ 'major_radius', 'magnet', 'low_error_factor', 'look_at', 'location', 'load_file', 'linear_sweep', 'linear_spline',
+ 'leopard', 'lambda', 'julia', 'jpeg', 'jitter', 'irid_wavelength', 'ior', 'inverse',
+ 'intervals', 'interpolate', 'internal', 'inside_vector', 'inside', 'initial_frame', 'initial_clock', 'image_width',
+ 'image_pattern', 'image_height', 'iff', 'hypercomplex', 'hollow', 'hierarchy', 'hf_gray_16', 'hexagon',
+ 'gray_threshold', 'granite', 'gradient', 'global_lights', 'gif', 'gather', 'fresnel', 'frequency',
+ 'frame_number', 'form', 'fog_type', 'fog_offset', 'fog_alt', 'focal_point', 'flip', 'flatness',
+ 'fisheye', 'final_frame', 'final_clock', 'false', 'falloff_angle', 'falloff', 'fade_power', 'fade_distance',
+ 'fade_colour', 'fade_color', 'facets', 'extinction', 'exterior', 'exponent', 'expand_thresholds', 'evaluate',
+ 'error_bound', 'emission', 'eccentricity', 'double_illuminate', 'distance', 'dist_exp', 'dispersion_samples', 'dispersion',
+ 'direction', 'diffuse', 'df3', 'dents', 'density_map', 'density_file', 'density', 'cylindrical',
+ 'cutaway_textures', 'cubic_wave', 'cubic_spline', 'cube', 'crand', 'crackle', 'count', 'coords',
+ 'control1', 'control0', 'conserve_energy', 'conic_sweep', 'confidence', 'concat', 'composite', 'component',
+ 'colour_map', 'colour', 'color', 'collect', 'clock_on', 'clock_delta', 'clock', 'circular',
+ 'chr', 'checker', 'charset', 'cells', 'caustics', 'bumps', 'bump_size', 'brilliance',
+ 'brightness', 'brick_size', 'brick', 'bozo', 'boxed', 'blur_samples', 'black_hole', 'bezier_spline',
+ 'b_spline', 'average', 'autostop', 'assumed_gamma', 'ascii', 'array', 'area_light', 'arc_angle',
+ 'append', 'aperture', 'angle', 'ambient_light', 'ambient', 'always_sample', 'altitude', 'alpha',
+ 'all_intersections', 'all', 'agate_turb', 'agate', 'adc_bailout', 'adaptive', 'accuracy', 'absorption',
+ 'aa_threshold', 'aa_level', 'reflection'
+ ),
+ 2 => array(
+ 'abs', 'acos', 'acosh', 'asc', 'asin', 'asinh', 'atan', 'atanh',
+ 'atan2', 'ceil', 'cos', 'cosh', 'defined', 'degrees', 'dimensions', 'dimension_size',
+ 'div', 'exp', 'file_exists', 'floor', 'int', 'ln', 'log', 'max',
+ 'min', 'mod', 'pov', 'radians', 'rand', 'seed', 'select', 'sin',
+ 'sinh', 'sqrt', 'strcmp', 'strlen', 'tan', 'tanh', 'val', 'vdot',
+ 'vlenght',
+ ),
+ 3 => array (
+ 'x', 'y', 'z', 't', 'u', 'v', 'red', 'blue',
+ 'green', 'filter', 'transmit', 'gray', 'e',
+ ),
+ 4 => array (
+ 'camera', 'background', 'fog', 'sky_sphere', 'rainbow', 'global_settings', 'radiosity', 'photon',
+ 'object', 'blob', 'sphere', 'cylinder', 'box', 'cone', 'height_field', 'julia_fractal',
+ 'lathe', 'prism', 'sphere_sweep', 'superellipsoid', 'sor', 'text', 'torus', 'bicubic_patch',
+ 'disc', 'mesh', 'triangle', 'smooth_triangle', 'mesh2', 'vertex_vectors', 'normal_vectors', 'uv_vectors',
+ 'texture_list', 'face_indices', 'normal_indices', 'uv_indices', 'texture', 'polygon', 'plane', 'poly',
+ 'cubic', 'quartic', 'quadric', 'isosurface', 'function', 'contained_by', 'parametric', 'pigment',
+ 'union', 'intersection', 'difference', 'merge', 'light_source', 'looks_like', 'light_group', 'clipped_by',
+ 'bounded_by', 'interior', 'material', 'interior_texture', 'normal', 'finish', 'color_map', 'pigment_map',
+ 'image_map', 'bump_map', 'slope_map', 'normal_map', 'irid', 'photons',
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!',
+ '@', '%', '&', '*', '|', '/', '<',
+ '>', '+', '-', '.', '=', '<=', '>=',
+ '!=',
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #a63123;',
+ 2 => 'color: #2312bc;',
+ 3 => 'color: #cc1122; font-weight: bold;',
+ 4 => 'color: #116688; font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+// 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66aa;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #6666cc; font-weight: bold;',
+ 1 => 'color: #66cc66; font-weight: bold;',
+ 2 => 'color: #66cc66; font-weight: bold;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ # normal hash lines
+ 0 => '\#(?!(include|declare|local|fopen|fclose|read|write|default|version|if|else|end|ifdef|ifndef|switch|case|range|break|while|debug|error|warning|macro) )[[:word:]]*',
+ # syntax functions hash thingis
+ 1 => "\#(include|declare|local|fopen|fclose|read|write|default|version|if|else|end|ifdef|ifndef|switch|case|range|break|while|debug|error|warning|macro)",
+ 2 => array(
+ GESHI_SEARCH => "([a-zA-Z]+)(\n)(.*)(\n)(\\1;?)",
+ GESHI_REPLACE => '\3',
+ GESHI_BEFORE => '\1\2',
+ GESHI_AFTER => '\4\5',
+ GESHI_MODIFIERS => 'siU'
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php
new file mode 100644
index 000000000..e427059d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php
@@ -0,0 +1,277 @@
+<?php
+/*************************************************************************************
+ * powershell.php
+ * ---------------------------------
+ * Author: Frode Aarebrot (frode@aarebrot.net)
+ * Copyright: (c) 2008 Frode Aarebrot (http://www.aarebrot.net)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/06/20
+ *
+ * PowerShell language file for GeSHi.
+ *
+ * I've tried to make this language file as true to the highlighting in PowerGUI as
+ * possible. Unfortunately it's not 100% complete, although it is pretty close.
+ *
+ * I've included some classes and their members, but there's tons and tons of these.
+ * I suggest you add the ones you need yourself. I've included a few Sharepoint ones
+ * in this language file.
+ *
+ * CHANGES
+ * -------
+ * 2008/06/20 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2008/06/20)
+ * -------------------------
+ * - Color text between Cmdlets/Aliases and pipe/end-of-line
+ * - Try and get -- and ++ to work in the KEYWORDS array with the other operators
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'PowerShell',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '`',
+ 'KEYWORDS' => array(
+ 1 => array(
+ // Cmdlets
+ 'Add-Content', 'Add-History', 'Add-Member', 'Add-PSSnapin', 'Clear-Content', 'Clear-Item',
+ 'Clear-ItemProperty', 'Clear-Variable', 'Compare-Object', 'ConvertFrom-SecureString',
+ 'Convert-Path', 'ConvertTo-Html', 'ConvertTo-SecureString', 'Copy-Item', 'Copy-ItemProperty',
+ 'Export-Alias', 'Export-Clixml', 'Export-Console', 'Export-Csv', 'ForEach-Object',
+ 'Format-Custom', 'Format-List', 'Format-Table', 'Format-Wide', 'Get-Acl', 'Get-Alias',
+ 'Get-AuthenticodeSignature', 'Get-ChildItem', 'Get-Command', 'Get-Content', 'Get-Credential',
+ 'Get-Culture', 'Get-Date', 'Get-EventLog', 'Get-ExecutionPolicy', 'Get-Help', 'Get-History',
+ 'Get-Host', 'Get-Item', 'Get-ItemProperty', 'Get-Location', 'Get-Member',
+ 'Get-PfxCertificate', 'Get-Process', 'Get-PSDrive', 'Get-PSProvider', 'Get-PSSnapin',
+ 'Get-Service', 'Get-TraceSource', 'Get-UICulture', 'Get-Unique', 'Get-Variable',
+ 'Get-WmiObject', 'Group-Object', 'Import-Alias', 'Import-Clixml', 'Import-Csv',
+ 'Invoke-Expression', 'Invoke-History', 'Invoke-Item', 'Join-Path', 'Measure-Command',
+ 'Measure-Object', 'Move-Item', 'Move-ItemProperty', 'New-Alias', 'New-Item',
+ 'New-ItemProperty', 'New-Object', 'New-PSDrive', 'New-Service', 'New-TimeSpan',
+ 'New-Variable', 'Out-Default', 'Out-File', 'Out-Host', 'Out-Null', 'Out-Printer',
+ 'Out-String', 'Pop-Location', 'Push-Location', 'Read-Host', 'Remove-Item',
+ 'Remove-ItemProperty', 'Remove-PSDrive', 'Remove-PSSnapin', 'Remove-Variable', 'Rename-Item',
+ 'Rename-ItemProperty', 'Resolve-Path', 'Restart-Service', 'Resume-Service', 'Select-Object',
+ 'Select-String', 'Set-Acl', 'Set-Alias', 'Set-AuthenticodeSignature', 'Set-Content',
+ 'Set-Date', 'Set-ExecutionPolicy', 'Set-Item', 'Set-ItemProperty', 'Set-Location',
+ 'Set-PSDebug', 'Set-Service', 'Set-TraceSource', 'Set-Variable', 'Sort-Object', 'Split-Path',
+ 'Start-Service', 'Start-Sleep', 'Start-Transcript', 'Stop-Process', 'Stop-Service',
+ 'Stop-Transcript', 'Suspend-Service', 'Tee-Object', 'Test-Path', 'Trace-Command',
+ 'Update-FormatData', 'Update-TypeData', 'Where-Object', 'Write-Debug', 'Write-Error',
+ 'Write-Host', 'Write-Output', 'Write-Progress', 'Write-Verbose', 'Write-Warning'
+ ),
+ 2 => array(
+ // Aliases
+ 'ac', 'asnp', 'clc', 'cli', 'clp', 'clv', 'cpi', 'cpp', 'cvpa', 'diff', 'epal', 'epcsv', 'fc',
+ 'fl', 'ft', 'fw', 'gal', 'gc', 'gci', 'gcm', 'gdr', 'ghy', 'gi', 'gl', 'gm',
+ 'gp', 'gps', 'group', 'gsv', 'gsnp', 'gu', 'gv', 'gwmi', 'iex', 'ihy', 'ii', 'ipal', 'ipcsv',
+ 'mi', 'mp', 'nal', 'ndr', 'ni', 'nv', 'oh', 'rdr', 'ri', 'rni', 'rnp', 'rp', 'rsnp', 'rv',
+ 'rvpa', 'sal', 'sasv', 'sc', 'select', 'si', 'sl', 'sleep', 'sort', 'sp', 'spps', 'spsv', 'sv',
+ 'tee', 'write', 'cat', 'cd', 'clear', 'cp', 'h', 'history', 'kill', 'lp', 'ls',
+ 'mount', 'mv', 'popd', 'ps', 'pushd', 'pwd', 'r', 'rm', 'rmdir', 'echo', 'cls', 'chdir',
+ 'copy', 'del', 'dir', 'erase', 'move', 'rd', 'ren', 'set', 'type'
+ ),
+ 3 => array(
+ // Reserved words
+ 'break', 'continue', 'do', 'for', 'foreach', 'while', 'if', 'switch', 'until', 'where',
+ 'function', 'filter', 'else', 'elseif', 'in', 'return', 'param', 'throw', 'trap'
+ ),
+ 4 => array(
+ // Operators
+ '-eq', '-ne', '-gt', '-ge', '-lt', '-le', '-ieq', '-ine', '-igt', '-ige', '-ilt', '-ile',
+ '-ceq', '-cne', '-cgt', '-cge', '-clt', '-cle', '-like', '-notlike', '-match', '-notmatch',
+ '-ilike', '-inotlike', '-imatch', '-inotmatch', '-clike', '-cnotlike', '-cmatch', '-cnotmatch',
+ '-contains', '-notcontains', '-icontains', '-inotcontains', '-ccontains', '-cnotcontains',
+ '-isnot', '-is', '-as', '-replace', '-ireplace', '-creplace', '-and', '-or', '-band', '-bor',
+ '-not', '-bnot', '-f', '-casesensitive', '-exact', '-file', '-regex', '-wildcard'
+ ),
+ 5 => array(
+ // Options
+ '-Year', '-Wrap', '-Word', '-Width', '-WhatIf', '-Wait', '-View', '-Verbose', '-Verb',
+ '-Variable', '-ValueOnly', '-Value', '-Unique', '-UFormat', '-TypeName', '-Trace', '-TotalCount',
+ '-Title', '-TimestampServer', '-TargetObject', '-Syntax', '-SyncWindow', '-Sum', '-String',
+ '-Strict', '-Stream', '-Step', '-Status', '-Static', '-StartupType', '-Start', '-StackName',
+ '-Stack', '-SourceId', '-SimpleMatch', '-ShowError', '-Separator', '-SecureString', '-SecureKey',
+ '-SecondValue', '-SecondsRemaining', '-Seconds', '-Second', '-Scope', '-Root', '-Role',
+ '-Resolve', '-RemoveListener', '-RemoveFileListener', '-Registered', '-ReferenceObject',
+ '-Recurse', '-RecommendedAction', '-ReadCount', '-Quiet', '-Query', '-Qualifier', '-PSSnapin',
+ '-PSProvider', '-PSHost', '-PSDrive', '-PropertyType', '-Property', '-Prompt', '-Process',
+ '-PrependPath', '-PercentComplete', '-Pattern', '-PathType', '-Path', '-PassThru', '-ParentId',
+ '-Parent', '-Parameter', '-Paging', '-OutVariable', '-OutBuffer', '-Option', '-OnType', '-Off',
+ '-Object', '-Noun', '-NoTypeInformation', '-NoQualifier', '-NoNewline', '-NoElement',
+ '-NoClobber', '-NewName', '-Newest', '-Namespace', '-Name', '-Month', '-Minutes', '-Minute',
+ '-Minimum', '-Milliseconds', '-Message', '-MemberType', '-Maximum', '-LogName', '-LiteralPath',
+ '-LiteralName', '-ListenerOption', '-List', '-Line', '-Leaf', '-Last', '-Key', '-ItemType',
+ '-IsValid', '-IsAbsolute', '-InputObject', '-IncludeEqual', '-IncludeChain', '-Include',
+ '-IgnoreWhiteSpace', '-Id', '-Hours', '-Hour', '-HideTableHeaders', '-Head', '-GroupBy',
+ '-Functionality', '-Full', '-Format', '-ForegroundColor', '-Force', '-First', '-FilterScript',
+ '-Filter', '-FilePath', '-Expression', '-ExpandProperty', '-Expand', '-ExecutionPolicy',
+ '-ExcludeProperty', '-ExcludeDifferent', '-Exclude', '-Exception', '-Examples', '-ErrorVariable',
+ '-ErrorRecord', '-ErrorId', '-ErrorAction', '-End', '-Encoding', '-DisplayName', '-DisplayHint',
+ '-DisplayError', '-DifferenceObject', '-Detailed', '-Destination', '-Description', '-Descending',
+ '-Depth', '-DependsOn', '-Delimiter', '-Debugger', '-Debug', '-Days', '-Day', '-Date',
+ '-CurrentOperation', '-Culture', '-Credential', '-Count', '-Container', '-Confirm',
+ '-ComputerName', '-Component', '-Completed', '-ComObject', '-CommandType', '-Command',
+ '-Column', '-Class', '-ChildPath', '-Character', '-Certificate', '-CategoryTargetType',
+ '-CategoryTargetName', '-CategoryReason', '-CategoryActivity', '-Category', '-CaseSensitive',
+ '-Body', '-BinaryPathName', '-Begin', '-BackgroundColor', '-Average', '-AutoSize', '-Audit',
+ '-AsString', '-AsSecureString', '-AsPlainText', '-As', '-ArgumentList', '-AppendPath', '-Append',
+ '-Adjust', '-Activity', '-AclObject'
+ ),
+ 6 => array(
+ '_','args','DebugPreference','Error','ErrorActionPreference',
+ 'foreach','Home','Host','Input','LASTEXITCODE','MaximumAliasCount',
+ 'MaximumDriveCount','MaximumFunctionCount','MaximumHistoryCount',
+ 'MaximumVariableCount','OFS','PsHome',
+ 'ReportErrorShowExceptionClass','ReportErrorShowInnerException',
+ 'ReportErrorShowSource','ReportErrorShowStackTrace',
+ 'ShouldProcessPreference','ShouldProcessReturnPreference',
+ 'StackTrace','VerbosePreference','WarningPreference','PWD'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '=', '<', '>', '@', '|', '&', ',', '?',
+ '+=', '-=', '*=', '/=', '%=', '*', '/', '%', '!', '+', '-', '++', '--'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #008080; font-weight: bold;',
+ 2 => 'color: #008080; font-weight: bold;',
+ 3 => 'color: #0000FF;',
+ 4 => 'color: #FF0000;',
+ 5 => 'color: #008080; font-style: italic;',
+ 6 => 'color: #000080;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;',
+ 'MULTI' => 'color: #008000;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #800000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #804000;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: pink;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: pink;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #800080;',
+ 3 => 'color: #008080;',
+ 4 => 'color: #008080;',
+ 5 => 'color: #800000;',
+ 6 => 'color: #000080;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => 'about:blank',
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // special after pipe
+ 3 => array(
+ GESHI_SEARCH => '(\[)(int|long|string|char|bool|byte|double|decimal|float|single|regex|array|xml|scriptblock|switch|hashtable|type|ref|psobject|wmi|wmisearcher|wmiclass|object)((\[.*\])?\])',
+ GESHI_REPLACE => '\2',
+ GESHI_MODIFIERS => 'si',
+ GESHI_BEFORE => '\1',
+ GESHI_AFTER => '\3'
+ ),
+ // Classes
+ 4 => array(
+ GESHI_SEARCH => '(\[)(System\.Reflection\.Assembly|System\.Net\.CredentialCache|Microsoft\.SharePoint\.SPFileLevel|Microsoft\.SharePoint\.Publishing\.PublishingWeb|Microsoft\.SharePoint\.Publishing|Microsoft\.SharePoint\.SPWeb)(\])',
+ GESHI_REPLACE => '\2',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '\1',
+ GESHI_AFTER => '\3'
+ ),
+ // Members
+ // There's about a hundred million of these, add the ones you need as you need them
+ 5 => array (
+ GESHI_SEARCH => '(::)(ReflectionOnlyLoadFrom|ReflectionOnlyLoad|ReferenceEquals|LoadWithPartialName|LoadFrom|LoadFile|Load|GetExecutingAssembly|GetEntryAssembly|GetCallingAssembly|GetAssembly|Equals|DefaultNetworkCredentials|DefaultCredentials|CreateQualifiedName|Checkout|Draft|Published|IsPublishingWeb)',
+ GESHI_REPLACE => '\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\1',
+ GESHI_AFTER => ''
+ ),
+ // Special variables
+ 6 => array(
+ GESHI_SEARCH => '(\$)(\$[_\^]?|\?)(?!\w)',
+ GESHI_REPLACE => '\1\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ // variables
+ //BenBE: Please note that changes here and in Keyword group 6 have to be synchronized in order to work properly.
+ //This Regexp must only match, if keyword group 6 doesn't. If this assumption fails
+ //Highlighting of the keywords will be incomplete or incorrect!
+ 0 => "(?<!\\\$|>)[\\\$](\w+)(?=[^|\w])",
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 4 => array(
+ 'DISALLOWED_AFTER' => '(?![a-zA-Z])',
+ 'DISALLOWED_BEFORE' => ''
+ ),
+ 6 => array(
+ 'DISALLOWED_BEFORE' => '(?<!\$>)\$'
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php
new file mode 100644
index 000000000..2d6024e74
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php
@@ -0,0 +1,485 @@
+<?php
+/*************************************************************************************
+ * progress.php
+ * --------
+ * Author: Marco Aurelio de Pasqual (marcop@hdi.com.br)
+ * Copyright: (c) 2008 Marco Aurelio de Pasqual, Benny Baumann (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/07/11
+ *
+ * Progress language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/11 (1.0.8)
+ * - First Release
+ *
+ * TODO (updated 2008/07/11)
+ * -------------------------
+ * * Clean up the keyword list
+ * * Sort Keyword lists by Control Structures, Predefined functions and other important keywords
+ * * Complete language support
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'Progress',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array (
+ 1 => array(
+ 'ACCUMULATE','APPLY','ASSIGN','BELL','QUERY',
+ 'BUFFER-COMPARE','BUFFER-COPY','CALL','CASE',
+ 'CHOOSE','CLASS','CLOSE QUERY','each','WHERE',
+ 'CLOSE STORED-PROCEDURE','COLOR','COMPILE','CONNECT',
+ 'CONSTRUCTOR','COPY-LOB','CREATE','CREATE ALIAS',
+ 'CREATE BROWSE','CREATE BUFFER','CREATE CALL','CREATE CLIENT-PRINCIPAL',
+ 'CREATE DATABASE','CREATE DATASET','CREATE DATA-SOURCE','CREATE QUERY',
+ 'CREATE SAX-attributeS','CREATE SAX-READER','CREATE SAX-WRITER','CREATE SERVER',
+ 'CREATE SERVER-SOCKET','CREATE SOAP-HEADER','CREATE SOAP-HEADER-ENTRYREF','CREATE SOCKET',
+ 'CREATE TEMP-TABLE','CREATE WIDGET','CREATE widget-POOL','CREATE X-DOCUMENT',
+ 'CREATE X-NODEREF','CURRENT-LANGUAGE','CURRENT-VALUE','DDE ADVISE',
+ 'DDE EXECUTE','DDE GET','DDE INITIATE','DDE REQUEST',
+ 'DDE SEND','DDE TERMINATE','DEFINE BROWSE','DEFINE BUFFER','DEFINE',
+ 'DEFINE BUTTON','DEFINE DATASET','DEFINE DATA-SOURCE','DEFINE FRAME','DEF','VAR',
+ 'DEFINE IMAGE','DEFINE MENU','DEFINE PARAMETER','DEFINE property','PARAM',
+ 'DEFINE QUERY','DEFINE RECTANGLE','DEFINE STREAM','DEFINE SUB-MENU',
+ 'DEFINE TEMP-TABLE','DEFINE WORKFILE','DEFINE WORK-TABLE',
+ 'DELETE','DELETE ALIAS','DELETE object','DELETE PROCEDURE',
+ 'DELETE widget','DELETE widget-POOL','DESTRUCTOR','DICTIONARY',
+ 'DISABLE','DISABLE TRIGGERS','DISCONNECT','DISPLAY',
+ 'DO','DOS','DOWN','DYNAMIC-CURRENT-VALUE',
+ 'ELSE','EMPTY TEMP-TABLE','ENABLE','END',
+ 'ENTRY','FIND','AND',
+ 'FIX-CODEPAGE','FOR','FORM','FRAME-VALUE',
+ 'GET','GET-KEY-VALUE','HIDE','IF',
+ 'IMPORT','INPUT CLEAR','INPUT CLOSE','INPUT FROM','input',
+ 'INPUT THROUGH','INPUT-OUTPUT CLOSE','INPUT-OUTPUT THROUGH',
+ 'INTERFACE','LEAVE','BREAK',
+ 'LOAD-PICTURE','MESSAGE','method','NEXT','prev',
+ 'NEXT-PROMPT','ON','OPEN QUERY','OS-APPEND',
+ 'OS-COMMAND','OS-COPY','OS-CREATE-DIR','OS-DELETE',
+ 'OS-RENAME','OUTPUT CLOSE','OUTPUT THROUGH','OUTPUT TO',
+ 'OVERLAY','PAGE','PAUSE','PROCEDURE',
+ 'PROCESS EVENTS','PROMPT-FOR','PROMSGS','PROPATH',
+ 'PUBLISH','PUT','PUT CURSOR','PUT SCREEN',
+ 'PUT-BITS','PUT-BYTE','PUT-BYTES','PUT-DOUBLE',
+ 'PUT-FLOAT','PUT-INT64','PUT-KEY-VALUE','PUT-LONG',
+ 'PUT-SHORT','PUT-STRING','PUT-UNSIGNED-LONG','PUT-UNSIGNED-SHORT',
+ 'QUIT','RAW-TRANSFER','READKEY','RELEASE',
+ 'RELEASE EXTERNAL','RELEASE object','REPEAT','REPOSITION',
+ 'RUN','RUN STORED-PROCEDURE','RUN SUPER',
+ 'SAVE CACHE','SCROLL','SEEK','SET',
+ 'SET-BYTE-ORDER','SET-POINTER-VALUE','SET-SIZE','SHOW-STATS',
+ 'STATUS','STOP','SUBSCRIBE','SUBSTRING',
+ 'system-DIALOG COLOR','system-DIALOG FONT','system-DIALOG GET-DIR','system-DIALOG GET-FILE',
+ 'system-DIALOG PRINTER-SETUP','system-HELP','THEN','THIS-object',
+ 'TRANSACTION-MODE AUTOMATIC','TRIGGER PROCEDURE','UNDERLINE','UNDO',
+ 'UNIX','UNLOAD','UNSUBSCRIBE','UP','STRING',
+ 'UPDATE','USE','USING','substr','SKIP','CLOSE',
+ 'VIEW','WAIT-FOR','MODULO','NE','AVAIL',
+ 'NOT','OR','&GLOBAL-DEFINE','&IF','UNFORMATTED','NO-PAUSE',
+ '&THEN','&ELSEIF','&ELSE','&ENDIF','OPEN','NO-WAIT',
+ '&MESSAGE','&SCOPED-DEFINE','&UNDEFINE','DEFINED',
+ 'BROWSE','BUTTON','COMBO-BOX','CONTROL-FRAME',
+ 'DIALOG-BOX','EDITOR','FIELD-GROUP','FILL-IN',
+ 'FRAME','IMAGE','LITERAL','MENU',
+ 'MENU-ITEM','RADIO-SET','RECTANGLE','SELECTION-LIST',
+ 'SLIDER','SUB-MENU','TEXT','TOGGLE-BOX',
+ 'WINDOW','WITH','AT','OF','EDITING','ON ENDKEY','output',
+ 'ON ERROR','ON QUIT','ON STOP','PRESELECT',
+ 'QUERY-TUNING','SIZE','Trigger','VIEW-AS','ALERT-BOX',
+ 'Buffer','Data-relation','ProDataSet','SAX-attributes',
+ 'SAX-reader','SAX-writer','Server socket','SOAP-fault',
+ 'SOAP-header','SOAP-header-entryref','Socket','Temp-table',
+ 'X-noderef','Height','Left','Top','TO',
+ 'Width','ACTIVE-WINDOW','AUDIT-CONTROL','FIRST','LAST',
+ 'AUDIT-POLICY','CLIPBOARD','CODEBASE-LOCATOR','COLOR-TABLE',
+ 'COMPILER','COM-SELF','DEBUGGER','DEFAULT-WINDOW',
+ 'ERROR-STATUS','FILE-INFO','FOCUS','FONT-TABLE',
+ 'LAST-EVENT','LOG-MANAGER','RCODE-INFO','SECURITY-POLICY',
+ 'SELF','SESSION','SOURCE-PROCEDURE','TARGET-PROCEDURE','NO-LOCK','NO-error',
+ 'THIS-PROCEDURE','WEB-CONTEXT','FUNCTION','RETURNS','NO-UNDO'
+ ),
+ 2 => array(
+ 'ACCEPT-CHANGES','ACCEPT-ROW-CHANGES','ADD-BUFFER','ADD-CALC-COLUMN',
+ 'ADD-COLUMNS-FROM','ADD-EVENTS-PROCEDURE','ADD-FIELDS-FROM','ADD-FIRST',
+ 'ADD-HEADER-ENTRY','ADD-INDEX-FIELD','ADD-LAST','ADD-LIKE-COLUMN',
+ 'ADD-LIKE-FIELD','ADD-LIKE-INDEX','ADD-NEW-FIELD','ADD-NEW-INDEX',
+ 'ADD-RELATION','ADD-SCHEMA-LOCATION','ADD-SOURCE-BUFFER','ADD-SUPER-PROCEDURE',
+ 'APPEND-CHILD','APPLY-CALLBACK','ATTACH-DATA-SOURCE','AUTHENTICATION-FAILED',
+ 'BEGIN-EVENT-GROUP','BUFFER-CREATE',
+ 'BUFFER-DELETE','BUFFER-RELEASE','BUFFER-VALIDATE',
+ 'CANCEL-BREAK','CANCEL-REQUESTS','CLEAR','CLEAR-APPL-CONTEXT',
+ 'CLEAR-LOG','CLEAR-SELECTION','CLEAR-SORT-ARROWS','CLONE-NODE',
+ 'CLOSE-LOG','CONNECTED','CONVERT-TO-OFFSET',
+ 'COPY-DATASET','COPY-SAX-attributeS','COPY-TEMP-TABLE','CREATE-LIKE',
+ 'CREATE-NODE','CREATE-NODE-NAMESPACE','CREATE-RESULT-LIST-ENTRY','DEBUG',
+ 'DECLARE-NAMESPACE','DELETE-CHAR','DELETE-CURRENT-ROW',
+ 'DELETE-HEADER-ENTRY','DELETE-LINE','DELETE-NODE','DELETE-RESULT-LIST-ENTRY',
+ 'DELETE-SELECTED-ROW','DELETE-SELECTED-ROWS','DESELECT-FOCUSED-ROW','DESELECT-ROWS',
+ 'DESELECT-SELECTED-ROW','DETACH-DATA-SOURCE','DISABLE-CONNECTIONS',
+ 'DISABLE-DUMP-TRIGGERS','DISABLE-LOAD-TRIGGERS','DISPLAY-MESSAGE',
+ 'DUMP-LOGGING-NOW','EDIT-CLEAR','EDIT-COPY','EDIT-CUT',
+ 'EDIT-PASTE','EDIT-UNDO','EMPTY-DATASET','EMPTY-TEMP-TABLE',
+ 'ENABLE-CONNECTIONS','ENABLE-EVENTS','ENCRYPT-AUDIT-MAC-KEY',
+ 'END-DOCUMENT','END-ELEMENT','END-EVENT-GROUP','END-FILE-DROP',
+ 'EXPORT','EXPORT-PRINCIPAL','FETCH-SELECTED-ROW',
+ 'FILL','FIND-BY-ROWID','FIND-CURRENT','FIND-FIRST',
+ 'FIND-LAST','FIND-UNIQUE','GET-attribute','GET-attribute-NODE',
+ 'GET-BINARY-DATA','GET-BLUE-VALUE','GET-BROWSE-COLUMN','GET-BUFFER-HANDLE',
+ 'GET-BYTES-AVAILABLE','GET-CALLBACK-PROC-CONTEXT','GET-CALLBACK-PROC-NAME','GET-CGI-LIST',
+ 'GET-CGI-LONG-VALUE','GET-CGI-VALUE','GET-CHANGES','GET-CHILD',
+ 'GET-CHILD-RELATION','GET-CONFIG-VALUE','GET-CURRENT','GET-DATASET-BUFFER',
+ 'GET-DOCUMENT-ELEMENT','GET-DROPPED-FILE','GET-DYNAMIC','GET-ERROR-COLUMN ',
+ 'GET-ERROR-ROW ','GET-FILE-NAME ','GET-FILE-OFFSET ','GET-FIRST',
+ 'GET-GREEN-VALUE','GET-HEADER-ENTRY','GET-INDEX-BY-NAMESPACE-NAME','GET-INDEX-BY-QNAME',
+ 'GET-ITERATION','GET-LAST','GET-LOCALNAME-BY-INDEX','GET-MESSAGE',
+ 'GET-NEXT','GET-NODE','GET-NUMBER','GET-PARENT',
+ 'GET-PREV','GET-PRINTERS','GET-property','GET-QNAME-BY-INDEX',
+ 'GET-RED-VALUE','GET-RELATION','GET-REPOSITIONED-ROW','GET-RGB-VALUE',
+ 'GET-SELECTED-widget','GET-SERIALIZED','GET-SIGNATURE','GET-SOCKET-OPTION',
+ 'GET-SOURCE-BUFFER','GET-TAB-ITEM','GET-TEXT-HEIGHT-CHARS','GET-TEXT-HEIGHT-PIXELS',
+ 'GET-TEXT-WIDTH-CHARS','GET-TEXT-WIDTH-PIXELS','GET-TOP-BUFFER','GET-TYPE-BY-INDEX',
+ 'GET-TYPE-BY-NAMESPACE-NAME','GET-TYPE-BY-QNAME','GET-URI-BY-INDEX','GET-VALUE-BY-INDEX',
+ 'GET-VALUE-BY-NAMESPACE-NAME','GET-VALUE-BY-QNAME','GET-WAIT-STATE','IMPORT-NODE',
+ 'IMPORT-PRINCIPAL','INCREMENT-EXCLUSIVE-ID','INITIALIZE-DOCUMENT-TYPE',
+ 'INITIATE','INSERT','INSERT-attribute','INSERT-BACKTAB',
+ 'INSERT-BEFORE','INSERT-FILE','INSERT-ROW','INSERT-STRING',
+ 'INSERT-TAB','INVOKE','IS-ROW-SELECTED','IS-SELECTED',
+ 'LIST-property-NAMES','LOAD','LoadControls','LOAD-DOMAINS',
+ 'LOAD-ICON','LOAD-IMAGE','LOAD-IMAGE-DOWN','LOAD-IMAGE-INSENSITIVE',
+ 'LOAD-IMAGE-UP','LOAD-MOUSE-POINTER','LOAD-SMALL-ICON','LOCK-REGISTRATION',
+ 'LOG-AUDIT-EVENT','LOGOUT','LONGCHAR-TO-NODE-VALUE','LOOKUP',
+ 'MEMPTR-TO-NODE-VALUE','MERGE-CHANGES','MERGE-ROW-CHANGES','MOVE-AFTER-TAB-ITEM',
+ 'MOVE-BEFORE-TAB-ITEM','MOVE-COLUMN','MOVE-TO-BOTTOM','MOVE-TO-EOF',
+ 'MOVE-TO-TOP','NODE-VALUE-TO-LONGCHAR','NODE-VALUE-TO-MEMPTR','NORMALIZE',
+ 'QUERY-CLOSE','QUERY-OPEN','QUERY-PREPARE',
+ 'READ','READ-FILE','READ-XML','READ-XMLSCHEMA',
+ 'REFRESH','REFRESH-AUDIT-POLICY','REGISTER-DOMAIN','REJECT-CHANGES',
+ 'REJECT-ROW-CHANGES','REMOVE-attribute','REMOVE-CHILD','REMOVE-EVENTS-PROCEDURE',
+ 'REMOVE-SUPER-PROCEDURE','REPLACE','REPLACE-CHILD','REPLACE-SELECTION-TEXT',
+ 'REPOSITION-BACKWARD','REPOSITION-FORWARD','REPOSITION-TO-ROW','REPOSITION-TO-ROWID',
+ 'RESET','SAVE','SAVE-FILE','SAVE-ROW-CHANGES',
+ 'SAX-PARSE','SAX-PARSE-FIRST','SAX-PARSE-NEXT','SCROLL-TO-CURRENT-ROW',
+ 'SCROLL-TO-ITEM','SCROLL-TO-SELECTED-ROW','SEAL','SEARCH',
+ 'SELECT-ALL','SELECT-FOCUSED-ROW','SELECT-NEXT-ROW','SELECT-PREV-ROW',
+ 'SELECT-ROW','SET-ACTOR','SET-APPL-CONTEXT','SET-attribute',
+ 'SET-attribute-NODE','SET-BLUE-VALUE','SET-BREAK','SET-BUFFERS',
+ 'SET-CALLBACK','SET-CALLBACK-PROCEDURE','SET-CLIENT','SET-COMMIT',
+ 'SET-CONNECT-PROCEDURE','SET-DYNAMIC','SET-GREEN-VALUE','SET-INPUT-SOURCE',
+ 'SET-MUST-UNDERSTAND','SET-NODE','SET-NUMERIC-FORMAT','SET-OUTPUT-DESTINATION',
+ 'SET-PARAMETER','SET-property','SET-READ-RESPONSE-PROCEDURE','SET-RED-VALUE',
+ 'SET-REPOSITIONED-ROW','SET-RGB-VALUE','SET-ROLLBACK','SET-SELECTION',
+ 'SET-SERIALIZED','SET-SOCKET-OPTION','SET-SORT-ARROW','SET-WAIT-STATE',
+ 'START-DOCUMENT','START-ELEMENT','STOP-PARSING','SYNCHRONIZE',
+ 'TEMP-TABLE-PREPARE','UPDATE-attribute','URL-DECODE','URL-ENCODE',
+ 'VALIDATE','VALIDATE-SEAL','WRITE','WRITE-CDATA','USE-INDEX',
+ 'WRITE-CHARACTERS','WRITE-COMMENT','WRITE-DATA-ELEMENT','WRITE-EMPTY-ELEMENT',
+ 'WRITE-ENTITY-REF','WRITE-EXTERNAL-DTD','WRITE-FRAGMENT','WRITE-MESSAGE',
+ 'WRITE-PROCESSING-INSTRUCTION','WRITE-XML','WRITE-XMLSCHEMA','FALSE','true'
+ ),
+ 3 => array(
+ 'ABSOLUTE','ACCUM','ADD-INTERVAL','ALIAS','mod',
+ 'AMBIGUOUS','ASC','AUDIT-ENABLED','AVAILABLE',
+ 'BASE64-DECODE','BASE64-ENCODE','CAN-DO','CAN-FIND',
+ 'CAN-QUERY','CAN-SET','CAPS','CAST','OS-DIR',
+ 'CHR','CODEPAGE-CONVERT','COMPARE',
+ 'COUNT-OF','CURRENT-CHANGED','CURRENT-RESULT-ROW','DATASERVERS',
+ 'DATA-SOURCE-MODIFIED','DATETIME','DATETIME-TZ',
+ 'DAY','DBCODEPAGE','DBCOLLATION','DBNAME',
+ 'DBPARAM','DBRESTRICTIONS','DBTASKID','DBTYPE',
+ 'DBVERSION','DECIMAL','DECRYPT','DYNAMIC-function',
+ 'DYNAMIC-NEXT-VALUE','ENCODE','ENCRYPT','ENTERED',
+ 'ERROR','ETIME','EXP','ENDKEY','END-error',
+ 'FIRST-OF','FRAME-DB','FRAME-DOWN',
+ 'FRAME-FIELD','FRAME-FILE','FRAME-INDEX','FRAME-LINE',
+ 'GATEWAYS','GENERATE-PBE-KEY','GENERATE-PBE-SALT','GENERATE-RANDOM-KEY',
+ 'GENERATE-UUID','GET-BITS','GET-BYTE','GET-BYTE-ORDER',
+ 'GET-BYTES','GET-CODEPAGE','GET-CODEPAGES','GET-COLLATION',
+ 'GET-COLLATIONS','GET-DOUBLE','GET-FLOAT','GET-INT64',
+ 'GET-LONG','GET-POINTER-VALUE','GET-SHORT','GET-SIZE',
+ 'GET-STRING','GET-UNSIGNED-LONG','GET-UNSIGNED-SHORT','GO-PENDING',
+ 'GUID','HEX-DECODE','INDEX',
+ 'INT64','INTEGER','INTERVAL','IS-ATTR-SPACE',
+ 'IS-CODEPAGE-FIXED','IS-COLUMN-CODEPAGE','IS-LEAD-BYTE','ISO-DATE',
+ 'KBLABEL','KEYCODE','KEYFUNCTION','KEYLABEL',
+ 'KEYWORD','KEYWORD-ALL','LASTKEY',
+ 'LAST-OF','LC','LDBNAME','LEFT-TRIM',
+ 'LIBRARY','LINE-COUNTER','LIST-EVENTS','LIST-QUERY-ATTRS',
+ 'LIST-SET-ATTRS','LIST-widgetS','LOCKED',
+ 'LOGICAL','MAXIMUM','MD5-DIGEST',
+ 'MEMBER','MESSAGE-LINES','MINIMUM','MONTH',
+ 'MTIME','NEW','NEXT-VALUE','SHARED',
+ 'NOT ENTERED','NOW','NUM-ALIASES','NUM-DBS',
+ 'NUM-ENTRIES','NUM-RESULTS','OPSYS','OS-DRIVES',
+ 'OS-ERROR','OS-GETENV','PAGE-NUMBER','PAGE-SIZE',
+ 'PDBNAME','PROC-HANDLE','PROC-STATUS','PROGRAM-NAME',
+ 'PROGRESS','PROVERSION','QUERY-OFF-END','QUOTER',
+ 'RANDOM','RAW','RECID','REJECTED',
+ 'RETRY','RETURN-VALUE','RGB-VALUE',
+ 'RIGHT-TRIM','R-INDEX','ROUND','ROWID','LENGTH',
+ 'SDBNAME','SET-DB-CLIENT','SETUSERID',
+ 'SHA1-DIGEST','SQRT','SUBSTITUTE','VARIABLE',
+ 'SUPER','TERMINAL','TIME','TIMEZONE','external',
+ 'TODAY','TO-ROWID','TRIM','TRUNCATE','return',
+ 'TYPE-OF','USERID','VALID-EVENT','VALID-HANDLE',
+ 'VALID-object','WEEKDAY','YEAR','BEGINS','VALUE',
+ 'EQ','GE','GT','LE','LT','MATCHES','AS','BY','LIKE'
+ ),
+ 4 => array(
+ 'ACCELERATOR','ACTIVE','ACTOR','ADM-DATA',
+ 'AFTER-BUFFER','AFTER-ROWID','AFTER-TABLE','ALLOW-COLUMN-SEARCHING',
+ 'ALWAYS-ON-TOP','APPL-ALERT-BOXES','APPL-CONTEXT-ID','APPSERVER-INFO',
+ 'APPSERVER-PASSWORD','APPSERVER-USERID','ASYNCHRONOUS','ASYNC-REQUEST-COUNT',
+ 'ASYNC-REQUEST-HANDLE','ATTACHED-PAIRLIST','attribute-NAMES','ATTR-SPACE',
+ 'AUDIT-EVENT-CONTEXT','AUTO-COMPLETION','AUTO-DELETE','AUTO-DELETE-XML',
+ 'AUTO-END-KEY','AUTO-GO','AUTO-INDENT','AUTO-RESIZE',
+ 'AUTO-RETURN','AUTO-SYNCHRONIZE','AUTO-VALIDATE','AUTO-ZAP',
+ 'AVAILABLE-FORMATS','BACKGROUND','BASE-ADE','BASIC-LOGGING',
+ 'BATCH-MODE','BATCH-SIZE','BEFORE-BUFFER','BEFORE-ROWID',
+ 'BEFORE-TABLE','BGCOLOR','BLANK','BLOCK-ITERATION-DISPLAY',
+ 'BORDER-BOTTOM-CHARS','BORDER-BOTTOM-PIXELS','BORDER-LEFT-CHARS','BORDER-LEFT-PIXELS',
+ 'BORDER-RIGHT-CHARS','BORDER-RIGHT-PIXELS','BORDER-TOP-CHARS','BORDER-TOP-PIXELS',
+ 'BOX','BOX-SELECTABLE','BUFFER-CHARS','BUFFER-FIELD',
+ 'BUFFER-HANDLE','BUFFER-LINES','BUFFER-NAME','BUFFER-VALUE',
+ 'BYTES-READ','BYTES-WRITTEN','CACHE','CALL-NAME',
+ 'CALL-TYPE','CANCEL-BUTTON','CANCELLED','CAN-CREATE',
+ 'CAN-DELETE','CAN-READ','CAN-WRITE','CAREFUL-PAINT',
+ 'CASE-SENSITIVE','CENTERED','CHARSET','CHECKED',
+ 'CHILD-BUFFER','CHILD-NUM','CLASS-TYPE','CLIENT-CONNECTION-ID',
+ 'CLIENT-TTY','CLIENT-TYPE','CLIENT-WORKSTATION','CODE',
+ 'CODEPAGE','COLUMN','COLUMN-BGCOLOR','COLUMN-DCOLOR',
+ 'COLUMN-FGCOLOR','COLUMN-FONT','COLUMN-LABEL','COLUMN-MOVABLE',
+ 'COLUMN-PFCOLOR','COLUMN-READ-ONLY','COLUMN-RESIZABLE','COLUMN-SCROLLING',
+ 'COM-HANDLE','COMPLETE','CONFIG-NAME','CONTEXT-HELP',
+ 'CONTEXT-HELP-FILE','CONTEXT-HELP-ID','CONTROL-BOX','CONVERT-3D-COLORS',
+ 'CPCASE','CPCOLL','CPINTERNAL','CPLOG',
+ 'CPPRINT','CPRCODEIN','CPRCODEOUT','CPSTREAM',
+ 'CPTERM','CRC-VALUE','CURRENT-COLUMN','CURRENT-ENVIRONMENT',
+ 'CURRENT-ITERATION','CURRENT-ROW-MODIFIED','CURRENT-WINDOW','CURSOR-CHAR',
+ 'CURSOR-LINE','CURSOR-OFFSET','DATA-ENTRY-RETURN','DATASET',
+ 'DATA-SOURCE','DATA-SOURCE-COMPLETE-MAP','DATA-TYPE','DATE-FORMAT',
+ 'DB-REFERENCES','DCOLOR','DDE-ERROR','DDE-ID',
+ 'DDE-ITEM','DDE-NAME','DDE-TOPIC','DEBLANK',
+ 'DEBUG-ALERT','DECIMALS','DEFAULT','DEFAULT-BUFFER-HANDLE',
+ 'DEFAULT-BUTTON','DEFAULT-COMMIT','DELIMITER','DISABLE-AUTO-ZAP',
+ 'DISPLAY-TIMEZONE','DISPLAY-TYPE','DOMAIN-DESCRIPTION','DOMAIN-NAME',
+ 'DOMAIN-TYPE','DRAG-ENABLED','DROP-TARGET','DYNAMIC',
+ 'EDGE-CHARS','EDGE-PIXELS','EDIT-CAN-PASTE','EDIT-CAN-UNDO',
+ 'EMPTY','ENCODING','ENCRYPTION-SALT','END-USER-PROMPT',
+ 'ENTRY-TYPES-LIST','ERROR-COLUMN','ERROR-object-DETAIL','ERROR-ROW',
+ 'ERROR-STRING','EVENT-GROUP-ID','EVENT-PROCEDURE','EVENT-PROCEDURE-CONTEXT',
+ 'EVENT-TYPE','EXCLUSIVE-ID','EXECUTION-LOG','EXPAND',
+ 'EXPANDABLE','FGCOLOR','FILE-CREATE-DATE','FILE-CREATE-TIME',
+ 'FILE-MOD-DATE','FILE-MOD-TIME','FILE-NAME','FILE-OFFSET',
+ 'FILE-SIZE','FILE-TYPE','FILLED','FILL-MODE',
+ 'FILL-WHERE-STRING','FIRST-ASYNC-REQUEST','FIRST-BUFFER','FIRST-CHILD',
+ 'FIRST-COLUMN','FIRST-DATASET','FIRST-DATA-SOURCE','FIRST-object',
+ 'FIRST-PROCEDURE','FIRST-QUERY','FIRST-SERVER','FIRST-SERVER-SOCKET',
+ 'FIRST-SOCKET','FIRST-TAB-ITEM','FIT-LAST-COLUMN','FLAT-BUTTON',
+ 'FOCUSED-ROW','FOCUSED-ROW-SELECTED','FONT','FOREGROUND',
+ 'FORMAT','FORMATTED','FORM-INPUT','FORM-LONG-INPUT',
+ 'FORWARD-ONLY','FRAGMENT','FRAME-COL','FRAME-NAME',
+ 'FRAME-ROW','FRAME-SPACING','FRAME-X','FRAME-Y',
+ 'FREQUENCY','FULL-HEIGHT-CHARS','FULL-HEIGHT-PIXELS','FULL-PATHNAME',
+ 'FULL-WIDTH-CHARS','FULL-WIDTH-PIXELS','GRAPHIC-EDGE',
+ 'GRID-FACTOR-HORIZONTAL','GRID-FACTOR-VERTICAL','GRID-SNAP','GRID-UNIT-HEIGHT-CHARS',
+ 'GRID-UNIT-HEIGHT-PIXELS','GRID-UNIT-WIDTH-CHARS','GRID-UNIT-WIDTH-PIXELS','GRID-VISIBLE',
+ 'GROUP-BOX','HANDLE','HANDLER','HAS-LOBS',
+ 'HAS-RECORDS','HEIGHT-CHARS','HEIGHT-PIXELS','HELP',
+ 'HIDDEN','HORIZONTAL','HTML-CHARSET','HTML-END-OF-LINE',
+ 'HTML-END-OF-PAGE','HTML-FRAME-BEGIN','HTML-FRAME-END','HTML-HEADER-BEGIN',
+ 'HTML-HEADER-END','HTML-TITLE-BEGIN','HTML-TITLE-END','HWND',
+ 'ICFPARAMETER','ICON','IGNORE-CURRENT-MODIFIED','IMAGE-DOWN',
+ 'IMAGE-INSENSITIVE','IMAGE-UP','IMMEDIATE-DISPLAY','INDEX-INFORMATION',
+ 'IN-HANDLE','INHERIT-BGCOLOR','INHERIT-FGCOLOR','INITIAL','INIT',
+ 'INNER-CHARS','INNER-LINES','INPUT-VALUE','INSTANTIATING-PROCEDURE',
+ 'INTERNAL-ENTRIES','IS-CLASS','IS-OPEN','IS-PARAMETER-SET',
+ 'IS-XML','ITEMS-PER-ROW','KEEP-CONNECTION-OPEN','KEEP-FRAME-Z-ORDER',
+ 'KEEP-SECURITY-CACHE','KEY','KEYS','LABEL',
+ 'LABEL-BGCOLOR','LABEL-DCOLOR','LABEL-FGCOLOR','LABEL-FONT',
+ 'LABELS','LANGUAGES','LARGE','LARGE-TO-SMALL',
+ 'LAST-ASYNC-REQUEST','LAST-BATCH','LAST-CHILD','LAST-object',
+ 'LAST-PROCEDURE','LAST-SERVER','LAST-SERVER-SOCKET','LAST-SOCKET',
+ 'LAST-TAB-ITEM','LINE','LIST-ITEM-PAIRS','LIST-ITEMS',
+ 'LITERAL-QUESTION','LOCAL-HOST','LOCAL-NAME','LOCAL-PORT',
+ 'LOCATOR-COLUMN-NUMBER','LOCATOR-LINE-NUMBER','LOCATOR-PUBLIC-ID','LOCATOR-system-ID',
+ 'LOCATOR-TYPE','LOG-ENTRY-TYPES','LOGFILE-NAME','LOGGING-LEVEL',
+ 'LOGIN-EXPIRATION-TIMESTAMP','LOGIN-HOST','LOGIN-STATE','LOG-THRESHOLD',
+ 'MANDATORY','MANUAL-HIGHLIGHT','MAX-BUTTON','MAX-CHARS',
+ 'MAX-DATA-GUESS','MAX-HEIGHT-CHARS','MAX-HEIGHT-PIXELS','MAX-VALUE',
+ 'MAX-WIDTH-CHARS','MAX-WIDTH-PIXELS','MD5-VALUE','MENU-BAR',
+ 'MENU-KEY','MENU-MOUSE','MERGE-BY-FIELD','MESSAGE-AREA',
+ 'MESSAGE-AREA-FONT','MIN-BUTTON','MIN-COLUMN-WIDTH-CHARS','MIN-COLUMN-WIDTH-PIXELS',
+ 'MIN-HEIGHT-CHARS','MIN-HEIGHT-PIXELS','MIN-SCHEMA-MARSHAL','MIN-VALUE',
+ 'MIN-WIDTH-CHARS','MIN-WIDTH-PIXELS','MODIFIED','MOUSE-POINTER',
+ 'MOVABLE','MULTI-COMPILE','MULTIPLE','MULTITASKING-INTERVAL',
+ 'MUST-UNDERSTAND','NAME','NAMESPACE-PREFIX','NAMESPACE-URI',
+ 'NEEDS-APPSERVER-PROMPT','NEEDS-PROMPT','NESTED','NEW-ROW',
+ 'NEXT-COLUMN','NEXT-ROWID','NEXT-SIBLING','NEXT-TAB-ITEM', 'NO-BOX',
+ 'NO-CURRENT-VALUE','NODE-VALUE','NO-EMPTY-SPACE','NO-FOCUS',
+ 'NONAMESPACE-SCHEMA-LOCATION','NO-SCHEMA-MARSHAL','NO-VALIDATE','NUM-BUFFERS',
+ 'NUM-BUTTONS','NUM-CHILD-RELATIONS','NUM-CHILDREN','NUM-COLUMNS',
+ 'NUM-DROPPED-FILES','NUMERIC-DECIMAL-POINT','NUMERIC-FORMAT','NUMERIC-SEPARATOR',
+ 'NUM-FIELDS','NUM-FORMATS','NUM-HEADER-ENTRIES','NUM-ITEMS',
+ 'NUM-ITERATIONS','NUM-LINES','NUM-LOCKED-COLUMNS','NUM-LOG-FILES',
+ 'NUM-MESSAGES','NUM-PARAMETERS','NUM-REFERENCES','NUM-RELATIONS',
+ 'NUM-REPLACED','NUM-SELECTED-ROWS','NUM-SELECTED-WIDGETS','NUM-SOURCE-BUFFERS',
+ 'NUM-TABS','NUM-TOP-BUFFERS','NUM-TO-RETAIN','NUM-VISIBLE-COLUMNS',
+ 'ON-FRAME-BORDER','ORIGIN-HANDLE','ORIGIN-ROWID','OWNER',
+ 'OWNER-DOCUMENT','PAGE-BOTTOM','PAGE-TOP','PARAMETER',
+ 'PARENT','PARENT-BUFFER','PARENT-RELATION','PARSE-STATUS',
+ 'PASSWORD-FIELD','PATHNAME','PBE-HASH-ALGORITHM','PBE-KEY-ROUNDS',
+ 'PERSISTENT','PERSISTENT-CACHE-DISABLED','PERSISTENT-PROCEDURE','PFCOLOR',
+ 'PIXELS-PER-COLUMN','PIXELS-PER-ROW','POPUP-MENU','POPUP-ONLY',
+ 'POSITION','PREFER-DATASET','PREPARED','PREPARE-STRING',
+ 'PREV-COLUMN','PREV-SIBLING','PREV-TAB-ITEM','PRIMARY',
+ 'PRINTER-CONTROL-HANDLE','PRINTER-HDC','PRINTER-NAME','PRINTER-PORT',
+ 'PRIVATE-DATA','PROCEDURE-NAME','PROGRESS-SOURCE','PROXY',
+ 'PROXY-PASSWORD','PROXY-USERID','PUBLIC-ID','PUBLISHED-EVENTS',
+ 'RADIO-BUTTONS','READ-ONLY','RECORD-LENGTH',
+ 'REFRESHABLE','RELATION-FIELDS','RELATIONS-ACTIVE','REMOTE',
+ 'REMOTE-HOST','REMOTE-PORT','RESIZABLE','RESIZE',
+ 'RESTART-ROWID','RETAIN-SHAPE','RETURN-INSERTED','RETURN-VALUE-DATA-TYPE',
+ 'ROLES','ROUNDED','COL','ROW','ROW-HEIGHT-CHARS',
+ 'ROW-HEIGHT-PIXELS','ROW-MARKERS','ROW-RESIZABLE','ROW-STATE',
+ 'SAVE-WHERE-STRING','SCHEMA-CHANGE','SCHEMA-LOCATION','SCHEMA-MARSHAL',
+ 'SCHEMA-PATH','SCREEN-LINES','SCREEN-VALUE','SCROLLABLE',
+ 'SCROLLBAR-HORIZONTAL','SCROLL-BARS','SCROLLBAR-VERTICAL','SEAL-TIMESTAMP',
+ 'SELECTABLE','SELECTED','SELECTION-END','SELECTION-START',
+ 'SELECTION-TEXT','SENSITIVE','SEPARATOR-FGCOLOR','SEPARATORS',
+ 'SERVER','SERVER-CONNECTION-BOUND','SERVER-CONNECTION-BOUND-REQUEST','SERVER-CONNECTION-CONTEXT',
+ 'SERVER-CONNECTION-ID','SERVER-OPERATING-MODE','SESSION-END','SESSION-ID',
+ 'SHOW-IN-TASKBAR','SIDE-LABEL-HANDLE','SIDE-LABELS','SKIP-DELETED-RECORD',
+ 'SMALL-ICON','SMALL-TITLE','SOAP-FAULT-ACTOR','SOAP-FAULT-CODE',
+ 'SOAP-FAULT-DETAIL','SOAP-FAULT-STRING','SORT','SORT-ASCENDING',
+ 'SORT-NUMBER','SSL-SERVER-NAME','STANDALONE','STARTUP-PARAMETERS',
+ 'STATE-DETAIL','STATUS-AREA','STATUS-AREA-FONT','STOPPED',
+ 'STREAM','STRETCH-TO-FIT','STRICT','STRING-VALUE',
+ 'SUBTYPE','SUPER-PROCEDURES','SUPPRESS-NAMESPACE-PROCESSING','SUPPRESS-WARNINGS',
+ 'SYMMETRIC-ENCRYPTION-ALGORITHM','SYMMETRIC-ENCRYPTION-IV','SYMMETRIC-ENCRYPTION-KEY','SYMMETRIC-SUPPORT',
+ 'system-ALERT-BOXES','system-ID','TABLE','TABLE-CRC-LIST',
+ 'TABLE-HANDLE','TABLE-LIST','TABLE-NUMBER','TAB-POSITION',
+ 'TAB-STOP','TEMP-DIRECTORY','TEXT-SELECTED','THREE-D',
+ 'TIC-MARKS','TIME-SOURCE','TITLE','TITLE-BGCOLOR','FIELD',
+ 'TITLE-DCOLOR','TITLE-FGCOLOR','TITLE-FONT','TOOLTIP',
+ 'TOOLTIPS','TOP-ONLY','TRACKING-CHANGES','TRANSACTION',
+ 'TRANS-INIT-PROCEDURE','TRANSPARENT','TYPE','UNIQUE-ID',
+ 'UNIQUE-MATCH','URL','URL-PASSWORD','URL-USERID','EXTENT',
+ 'USER-ID','V6DISPLAY','VALIDATE-EXPRESSION','VALIDATE-MESSAGE',
+ 'VALIDATE-XML','VALIDATION-ENABLED','VIEW-FIRST-COLUMN-ON-REOPEN',
+ 'VIRTUAL-HEIGHT-CHARS','VIRTUAL-HEIGHT-PIXELS','VIRTUAL-WIDTH-CHARS','VIRTUAL-WIDTH-PIXELS',
+ 'VISIBLE','WARNING','WHERE-STRING','widget-ENTER','DATE',
+ 'widget-LEAVE','WIDTH-CHARS','WIDTH-PIXELS','WINDOW-STATE',
+ 'WINDOW-system','WORD-WRAP','WORK-AREA-HEIGHT-PIXELS','WORK-AREA-WIDTH-PIXELS',
+ 'WORK-AREA-X','WORK-AREA-Y','WRITE-STATUS','X','widget-Handle',
+ 'X-DOCUMENT','XML-DATA-TYPE','XML-NODE-TYPE','XML-SCHEMA-PATH',
+ 'XML-SUPPRESS-NAMESPACE-PROCESSING','Y','YEAR-OFFSET','CHARACTER',
+ 'LONGCHAR','MEMPTR','CHAR','DEC','INT','LOG','DECI','INTE','LOGI','long'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}',
+ '<', '>', '=',
+ '+', '-', '*', '/',
+ '!', '@', '%', '|', '$',
+ ':', '.', ';', ',',
+ '?', '<=','<>','>=', '\\'
+ ),
+ 'CASE_SENSITIVE' => array (
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array (
+ 'KEYWORDS' => array (
+ 1 => 'color: #0000ff; font-weight: bold;',
+ 2 => 'color: #1D16B2;',
+ 3 => 'color: #993333;',
+ 4 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array (
+// 1 => 'color: #808080; font-style: italic;',
+// 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array (
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array (
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array (
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array (
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array (
+ 0 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array (
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array (
+ ),
+ 'SCRIPT' => array (
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 0 => ':'
+ ),
+ 'REGEXPS' => array (
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array (
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array (
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![\.\-a-zA-Z0-9_\$\#&])",
+ 'DISALLOWED_AFTER' => "(?![\-a-zA-Z0-9_%])",
+ 1 => array(
+ 'SPACE_AS_WHITESPACE' => true
+ ),
+ 2 => array(
+ 'SPACE_AS_WHITESPACE' => true
+ )
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php
new file mode 100644
index 000000000..fa9e03a63
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php
@@ -0,0 +1,143 @@
+<?php
+/*************************************************************************************
+ * prolog.php
+ * --------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/10/02
+ *
+ * Prolog language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/02 (1.0.8.1)
+ * - First Release
+ *
+ * TODO (updated 2008/10/02)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Prolog',
+ 'COMMENT_SINGLE' => array(1 => '%'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array("\'"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'NUMBERS' =>
+ GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_FLT_SCI_ZERO,
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abolish','abs','arg','asserta','assertz','at_end_of_stream','atan',
+ 'atom','atom_chars','atom_codes','atom_concat','atom_length',
+ 'atomic','bagof','call','catch','ceiling','char_code',
+ 'char_conversion','clause','close','compound','consult','copy_term',
+ 'cos','current_char_conversion','current_input','current_op',
+ 'current_output','current_predicate','current_prolog_flag',
+ 'discontiguous','dynamic','ensure_loaded','exp','fail','findall',
+ 'float','float_fractional_part','float_integer_part','floor',
+ 'flush_output','functor','get_byte','get_char','get_code','halt',
+ 'include','initialization','integer','is','listing','log','mod',
+ 'multifile','nl','nonvar','notrace','number','number_chars',
+ 'number_codes','once','op','open','peek_byte','peek_char',
+ 'peek_code','put_byte','put_char','put_code','read','read_term',
+ 'rem','repeat','retract','round','set_input','set_output',
+ 'set_prolog_flag','set_stream_position','setof','sign','sin','sqrt',
+ 'stream_property','sub_atom','throw','trace','true','truncate',
+ 'unify_with_occurs_check','univ','var','write','write_canonical',
+ 'write_term','writeq'
+ )
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('(', ')', '[', ']', '{', '}',),
+ 1 => array('?-', ':-', '=:='),
+ 2 => array('\-', '\+', '\*', '\/'),
+ 3 => array('-', '+', '*', '/'),
+ 4 => array('.', ':', ',', ';'),
+ 5 => array('!', '@', '&', '|'),
+ 6 => array('<', '>', '=')
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #990000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;',
+ 'HARD' => 'color: #0000ff;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #800080;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;',
+ 1 => 'color: #339933;',
+ 2 => 'color: #339933;',
+ 3 => 'color: #339933;',
+ 4 => 'color: #339933;',
+ 5 => 'color: #339933;',
+ 6 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #008080;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://pauillac.inria.fr/~deransar/prolog/bips.html'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Variables
+ 0 => "(?<![A-Z_])(?!(?:PIPE|SEMI)[^a-zA-Z0-9_])[A-Z_][a-zA-Z0-9_]*(?![a-zA-Z0-9_])"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php
new file mode 100644
index 000000000..f24a57d18
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php
@@ -0,0 +1,299 @@
+<?php
+/******************************************************************************
+ * providex.php
+ * ----------
+ * Author: Jeff Wilder (jeff@coastallogix.com)
+ * Copyright: (c) 2008 Coastal Logix (http://www.coastallogix.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/10/18
+ *
+ * ProvideX language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/21 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ * 1. Create a regexp for numeric global variables (ex: %VarName = 3)
+ * 2. Add standard object control properties
+ *
+ ******************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ *****************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'ProvideX',
+ 'COMMENT_SINGLE' => array(1 => '!'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(
+ // Single-Line Comments using REM command
+ 2 => "/\bREM\b.*?$/i"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ // Directives
+ '*break', '*continue', '*end', '*escape', '*next', '*proceed',
+ '*retry', '*return', '*same', 'accept', 'add index', 'addr',
+ 'auto', 'begin', 'break', 'button', 'bye', 'call', 'case',
+ 'chart', 'check_box', 'class', 'clear', 'clip_board', 'close',
+ 'continue', 'control', 'create required', 'create table',
+ 'cwdir', 'data', 'day_format', 'def', 'default', 'defctl',
+ 'defprt', 'deftty', 'delete required', 'dictionary', 'dim', 'direct',
+ 'directory', 'disable', 'drop', 'drop_box', 'dump', 'edit',
+ 'else', 'enable', 'end switch', 'end', 'end_if', 'endtrace',
+ 'enter', 'erase', 'error_handler', 'escape', 'event', 'execute',
+ 'exit', 'exitto', 'extract', 'file', 'find', 'floating point',
+ 'for', 'function', 'get_file_box', 'gosub', 'goto', 'grid',
+ 'h_scrollbar', 'hide', 'if', 'index', 'indexed', 'input',
+ 'insert', 'invoke', 'iolist', 'keyed', 'let', 'like',
+ 'line_switch', 'list', 'list_box', 'load', 'local', 'lock',
+ 'long_form', 'menu_bar', 'merge', 'message_lib', 'mnemonic',
+ 'msgbox', 'multi_line', 'multi_media', 'next', 'object', 'obtain',
+ 'on', 'open', 'password', 'perform', 'pop', 'popup_menu',
+ 'precision', 'prefix', 'preinput', 'print', 'process', 'program',
+ 'property', 'purge', 'quit', 'radio_button', 'randomize',
+ 'read', 'record', 'redim', 'refile', 'release', 'rem', 'remove',
+ 'rename', 'renumber', 'repeat', 'reset', 'restore', 'retry',
+ 'return', 'round', 'run', 'save', 'select', 'serial', 'server',
+ 'set_focus', 'set_nbf', 'set_param', 'setctl', 'setday', 'setdev',
+ 'setdrive', 'seterr', 'setesc', 'setfid', 'setmouse', 'settime',
+ 'settrace', 'short_form', 'show', 'sort', 'start', 'static',
+ 'step', 'stop', 'switch', 'system_help', 'system_jrnl', 'table',
+ 'then', 'to', 'translate', 'tristate_box', 'unlock', 'until',
+ 'update', 'user_lex', 'v_scrollbar', 'vardrop_box', 'varlist_box',
+ 'via', 'video_palette', 'wait', 'wend', 'while', 'winprt_setup',
+ 'with', 'write'
+ ),
+ 2 => array(
+ // System Functions
+ '@x', '@y', 'abs', 'acs', 'and', 'arg', 'asc', 'asn', 'ath',
+ 'atn', 'bin', 'bsz', 'chg', 'chr', 'cmp', 'cos', 'cpl',
+ 'crc', 'cse', 'ctl', 'cvs', 'dec', 'dir', 'dll', 'dsk',
+ 'dte', 'env', 'ept', 'err', 'evn', 'evs', 'exp', 'ffn',
+ 'fib', 'fid', 'fin', 'fpt', 'gap', 'gbl', 'gep', 'hsa',
+ 'hsh', 'hta', 'hwn', 'i3e', 'ind', 'int', 'iol', 'ior',
+ 'jul', 'jst', 'kec', 'kef', 'kel', 'ken', 'kep', 'key',
+ 'kgn', 'lcs', 'len', 'lno', 'log', 'lrc', 'lst', 'max',
+ 'mem', 'mid', 'min', 'mnm', 'mod', 'msg', 'msk', 'mxc',
+ 'mxl', 'new', 'not', 'nul', 'num', 'obj', 'opt', 'pad',
+ 'pck', 'pfx', 'pgm', 'pos', 'prc', 'prm', 'pth', 'pub',
+ 'rcd', 'rdx', 'rec', 'ref', 'rnd', 'rno', 'sep', 'sgn',
+ 'sin', 'sqr', 'srt', 'ssz', 'stk', 'stp', 'str', 'sub',
+ 'swp', 'sys', 'tan', 'tbl', 'tcb', 'tmr', 'trx', 'tsk',
+ 'txh', 'txw', 'ucp', 'ucs', 'upk', 'vin', 'vis', 'xeq',
+ 'xfa', 'xor', '_obj'
+ ),
+ 3 => array(
+ // System Variables
+ // Vars that are duplicates of functions
+ // 'ctl', 'err', 'pfx', 'prm', 'rnd', 'sep', 'sys',
+ 'bkg', 'chn', 'day', 'dlm', 'dsz', 'eom', 'ers', 'esc',
+ 'gfn', 'gid', 'hfn', 'hlp', 'hwd', 'lfa', 'lfo', 'lip',
+ 'lpg', 'lwd', 'mse', 'msl', 'nar', 'nid', 'pgn', 'psz',
+ 'quo', 'ret', 'sid', 'ssn', 'tim', 'tme', 'tms', 'tsm',
+ 'uid', 'unt', 'who'
+
+ ),
+ 4 => array(
+ // Nomads Variables
+ '%Flmaint_Lib$', '%Flmaint_Msg$', '%Nomads_Activation_Ok',
+ '%Nomads_Auto_Qry', '%Nomads_Disable_Debug',
+ '%Nomads_Disable_Trace', '%Nomads_Fkey_Handler$',
+ '%Nomads_Fkey_Tbl$', '%Nomads_Notest', '%Nomads_Onexit$',
+ '%Nomads_Post_Display', '%Nomads_Pre_Display$',
+ '%Nomads_Process$', '%Nomads_Trace_File$',
+ '%Nomad_Actv_Folder_Colors$', '%Nomad_Automation_Enabled',
+ '%Nomad_Auto_Close', '%Nomad_Center_Wdw', '%Nomad_Concurrent_Wdw',
+ '%Nomad_Custom_Define', '%Nomad_Custom_Dir$',
+ '%Nomad_Custom_Genmtc', '%Nomad_Custom_Skip_Definition',
+ '%Nomad_Def_Sfx$', '%Nomad_Enter_Tab', '%Nomad_Esc_Sel',
+ '%Nomad_Isjavx', '%Nomad_Iswindx', '%Nomad_Iswindx$',
+ '%Nomad_Menu$', '%Nomad_Menu_Leftedge_Clr$',
+ '%Nomad_Menu_Textbackground_Clr$', '%Nomad_Mln_Sep$',
+ '%Nomad_Msgmnt$', '%Nomad_Noplusw', '%Nomad_No_Customize',
+ '%Nomad_Object_Persistence', '%Nomad_Object_Resize',
+ '%Nomad_Open_Load', '%Nomad_Override_Font$',
+ '%Nomad_Palette_Loaded', '%Nomad_Panel_Info_Force',
+ '%Nomad_Panel_Info_Prog$', '%Nomad_Pnl_Def_Colour$',
+ '%Nomad_Pnl_Def_Font$', '%Nomad_Prg_Cache', '%Nomad_Qry_Attr$',
+ '%Nomad_Qry_Btn$', '%Nomad_Qry_Clear_Start', '%Nomad_Qry_Tip$',
+ '%Nomad_Qry_Wide', '%Nomad_Query_Clear_Status', '%Nomad_Query_Kno',
+ '%Nomad_Query_No_Gray', '%Nomad_Query_Odb_Ignore',
+ '%Nomad_Query_Retkno', '%Nomad_Query_Sbar_Max',
+ '%Nomad_Relative_Wdw', '%Nomad_Save_Qry_Path', '%Nomad_Script_Fn',
+ '%Nomad_Script_Log', '%Nomad_Script_Wdw',
+ '%Nomad_Skip_Change_Logic', '%Nomad_Skip_Onselect_Logic',
+ '%Nomad_Stk$', '%Nomad_Tab_Dir', '%Nomad_Timeout',
+ '%Nomad_Turbo_Off', '%Nomad_Visual_Effect',
+ '%Nomad_Visual_Override', '%Nomad_Win_Ver', '%Nomad_Xchar',
+ '%Nomad_Xmax', '%Nomad_Ychar', '%Nomad_Ymax', '%Scr_Def_Attr$',
+ '%Scr_Def_H_Fl$', '%Scr_Def_H_Id$', '%Scr_Lib', '%Scr_Lib$',
+ '%Z__Usr_Sec$', 'Alternate_Panel$', 'Alternate_Panel_Type$',
+ 'Arg_1$', 'Arg_10$', 'Arg_11$', 'Arg_12$', 'Arg_13$', 'Arg_14$',
+ 'Arg_15$', 'Arg_16$', 'Arg_17$', 'Arg_18$', 'Arg_19$', 'Arg_2$',
+ 'Arg_20$', 'Arg_3$', 'Arg_4$', 'Arg_5$', 'Arg_6$', 'Arg_7$',
+ 'Arg_8$', 'Arg_9$', 'Change_Flg', 'Cmd_Str$', 'Default_Prog$',
+ 'Disp_Cmd$', 'Entire_Record$', 'Exit_Cmd$', 'Fldr_Default_Prog$',
+ 'Folder_Id$', 'Id', 'Id$', 'Ignore_Exit', 'Initialize_Flg',
+ 'Init_Text$', 'Init_Val$', 'Main_Scrn_K$', 'Mnu_Ln$',
+ 'Next_Folder', 'Next_Id', 'Next_Id$', 'No_Flush', 'Prime_Key$',
+ 'Prior_Val', 'Prior_Val$', 'Qry_Val$', 'Refresh_Flg',
+ 'Replacement_Folder$', 'Replacement_Lib$', 'Replacement_Scrn$',
+ 'Scrn_Id$', 'Scrn_K$', 'Scrn_Lib$', 'Tab_Table$', '_Eom$'
+ ),
+ 5 => array(
+ // Mnemonics
+ "'!w'", "'*c'", "'*h'", "'*i'", "'*o'", "'*r'", "'*x'",
+ "'+b'", "'+d'", "'+e'", "'+f'", "'+i'", "'+n'",
+ "'+p'", "'+s'", "'+t'", "'+u'", "'+v'", "'+w'", "'+x'",
+ "'+z'", "'-b'", "'-d'", "'-e'", "'-f'", "'-i'",
+ "'-n'", "'-p'", "'-s'", "'-t'", "'-u'", "'-v'", "'-w'",
+ "'-x'", "'-z'", "'2d'", "'3d'", "'4d'", "'@@'", "'ab'",
+ "'arc'", "'at'", "'backgr'", "'bb'", "'be'", "'beep'",
+ "'bg'", "'bi'", "'bj'", "'bk'", "'black'", "'blue'",
+ "'bm'", "'bo'", "'box'", "'br'", "'bs'", "'bt'", "'bu'",
+ "'bw'", "'bx'", "'caption'", "'ce'", "'cf'", "'ch'",
+ "'ci'", "'circle'", "'cl'", "'colour'", "'cp'", "'cpi'",
+ "'cr'", "'cs'", "'cursor'", "'cyan''_cyan'", "'dc'",
+ "'default'", "'df'", "'dialogue'", "'dn'", "'do'",
+ "'drop'", "'eb'", "'ee'", "'ef'", "'eg'", "'ei'", "'ej'",
+ "'el'", "'em'", "'eo'", "'ep'", "'er'", "'es'", "'et'",
+ "'eu'", "'ew'", "'ff'", "'fill'", "'fl'", "'font'",
+ "'frame'", "'gd'", "'ge'", "'gf'", "'goto'", "'green'",
+ "'gs'", "'hide'", "'ic'", "'image'", "'jc'",
+ "'jd'", "'jl'", "'jn'", "'jr'", "'js'", "'l6'", "'l8'",
+ "'lc'", "'ld'", "'lf'", "'li'", "'line'", "'lm'",
+ "'lpi'", "'lt'", "'magenta'", "'maxsize'", "'me'",
+ "'message'", "'minsize'", "'mn'", "'mode'",
+ "'move'", "'mp'", "'ms'", "'ni'", "'offset'", "'option'",
+ "'pe'", "'pen'", "'picture'", "'pie'", "'pm'", "'polygon'",
+ "'pop'", "'ps'", "'push'", "'rb'", "'rc'", "'rectangle'",
+ "'red'", "'rl'", "'rm'", "'rp'", "'rs'", "'rt'", "'sb'",
+ "'scroll'", "'sd'", "'se'", "'sf'", "'show'", "'size'",
+ "'sl'", "'sn'", "'sp'", "'sr'", "'swap'", "'sx'", "'text'",
+ "'textwdw'", "'tr'", "'tw'", "'uc'", "'up'", "'vt'", "'wa'",
+ "'wc'", "'wd'", "'wg'", "'white'", "'window'", "'wm'",
+ "'wp'", "'wr'", "'wrap'", "'ws'", "'wx'", "'xp'", "'yellow'",
+ "'zx'", "'_black'", "'_blue'", "'_colour'", "'_green'",
+ "'_magenta'", "'_red'", "'_white'", "'_yellow'"
+ ),
+ ),
+ 'SYMBOLS' => array(
+ 0 => array('+', '-', '*', '/', '^', '|'),
+ 1 => array('++', '--', '+=', '-=', '*=', '/=', '^=', '|='),
+ 2 => array('&lt;', '&gt;', '='),
+ 3 => array('(', ')', '[', ']', '{', '}'),
+ 4 => array(',', '@', ';', '\\')
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: navy;', // Directives
+ 2 => 'color: blue;', // System Functions
+ 3 => 'color: blue;', // System Variables
+ 4 => 'color: #6A5ACD; font-style: italic;', // Nomads Global Variables
+ 5 => 'color: #BDB76B;', // Mnemonics
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080; font-style: italic;',
+ 2 => 'color: #008080;',
+ 'MULTI' => 'color: #008080; font-style: italic;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: green;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #00008B;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;',
+ 1 => 'color: #000099;',
+ 2 => 'color: #000099;',
+ 3 => 'color: #0000C9;',
+ 4 => 'color: #000099;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 1 => 'color: #006400; font-weight: bold',
+ 2 => 'color: #6A5ACD;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.allbasic.info./wiki/index.php/PX:Directive_{FNAME}',
+ 2 => 'http://www.allbasic.info./wiki/index.php/PX:System_function_{FNAME}',
+ 3 => 'http://www.allbasic.info./wiki/index.php/PX:System_variable_{FNAME}',
+ 4 => 'http://www.allbasic.info./wiki/index.php/PX:Nomads_{FNAME}',
+ 5 => 'http://www.allbasic.info./wiki/index.php/PX:Mnemonic_{FNAMEU}'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => "'"
+ ),
+ 'REGEXPS' => array(
+ 1 => array(
+ // Line Labels
+ GESHI_SEARCH => '([[:space:]])([a-zA-Z_][a-zA-Z0-9_]+)(:)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ 2 => array(
+ // Global String Variables
+ GESHI_SEARCH => '(\%)([a-zA-Z_][a-zA-Z0-9_]+)(\$)',
+ GESHI_REPLACE => '\\1\\2\\3',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER
+ )
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php
new file mode 100644
index 000000000..6f378f434
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php
@@ -0,0 +1,237 @@
+<?php
+/*************************************************************************************
+ * python.php
+ * ----------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * Python language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/12/18
+ * - Added missing functions and keywords. Also added two new Python 3.0 types. SF#2441839
+ * 2005/05/26
+ * - Modifications by Tim (tim@skreak.com): added more keyword categories, tweaked colors
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/08/30 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Python',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ //Longest quotemarks ALWAYS first
+ 'QUOTEMARKS' => array('"""', '"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+
+ /*
+ ** Set 1: reserved words
+ ** http://python.org/doc/current/ref/keywords.html
+ */
+ 1 => array(
+ 'and', 'del', 'for', 'is', 'raise', 'assert', 'elif', 'from', 'lambda', 'return', 'break',
+ 'else', 'global', 'not', 'try', 'class', 'except', 'if', 'or', 'while', 'continue', 'exec',
+ 'import', 'pass', 'yield', 'def', 'finally', 'in', 'print', 'with', 'as'
+ ),
+
+ /*
+ ** Set 2: builtins
+ ** http://python.org/doc/current/lib/built-in-funcs.html
+ */
+ 2 => array(
+ '__import__', 'abs', 'basestring', 'bool', 'callable', 'chr', 'classmethod', 'cmp',
+ 'compile', 'complex', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile',
+ 'file', 'filter', 'float', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help',
+ 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'list', 'locals',
+ 'long', 'map', 'max', 'min', 'object', 'oct', 'open', 'ord', 'pow', 'property', 'range',
+ 'raw_input', 'reduce', 'reload', 'reversed', 'round', 'set', 'setattr', 'slice',
+ 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode',
+ 'vars', 'xrange', 'zip',
+ // Built-in constants: http://python.org/doc/current/lib/node35.html
+ 'False', 'True', 'None', 'NotImplemented', 'Ellipsis',
+ // Built-in Exceptions: http://python.org/doc/current/lib/module-exceptions.html
+ 'Exception', 'StandardError', 'ArithmeticError', 'LookupError', 'EnvironmentError',
+ 'AssertionError', 'AttributeError', 'EOFError', 'FloatingPointError', 'IOError',
+ 'ImportError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'MemoryError', 'NameError',
+ 'NotImplementedError', 'OSError', 'OverflowError', 'ReferenceError', 'RuntimeError',
+ 'StopIteration', 'SyntaxError', 'SystemError', 'SystemExit', 'TypeError',
+ 'UnboundlocalError', 'UnicodeError', 'UnicodeEncodeError', 'UnicodeDecodeError',
+ 'UnicodeTranslateError', 'ValueError', 'WindowsError', 'ZeroDivisionError', 'Warning',
+ 'UserWarning', 'DeprecationWarning', 'PendingDeprecationWarning', 'SyntaxWarning',
+ 'RuntimeWarning', 'FutureWarning',
+ // self: this is a common python convention (but not a reserved word)
+ 'self',
+ // other
+ 'any', 'all'
+ ),
+
+ /*
+ ** Set 3: standard library
+ ** http://python.org/doc/current/lib/modindex.html
+ */
+ 3 => array(
+ '__builtin__', '__future__', '__main__', '_winreg', 'aifc', 'AL', 'al', 'anydbm',
+ 'array', 'asynchat', 'asyncore', 'atexit', 'audioop', 'base64', 'BaseHTTPServer',
+ 'Bastion', 'binascii', 'binhex', 'bisect', 'bsddb', 'bz2', 'calendar', 'cd', 'cgi',
+ 'CGIHTTPServer', 'cgitb', 'chunk', 'cmath', 'cmd', 'code', 'codecs', 'codeop',
+ 'collections', 'colorsys', 'commands', 'compileall', 'compiler',
+ 'ConfigParser', 'Cookie', 'cookielib', 'copy', 'copy_reg', 'cPickle', 'crypt',
+ 'cStringIO', 'csv', 'curses', 'datetime', 'dbhash', 'dbm', 'decimal', 'DEVICE',
+ 'difflib', 'dircache', 'dis', 'distutils', 'dl', 'doctest', 'DocXMLRPCServer', 'dumbdbm',
+ 'dummy_thread', 'dummy_threading', 'email', 'encodings', 'errno', 'exceptions', 'fcntl',
+ 'filecmp', 'fileinput', 'FL', 'fl', 'flp', 'fm', 'fnmatch', 'formatter', 'fpectl',
+ 'fpformat', 'ftplib', 'gc', 'gdbm', 'getopt', 'getpass', 'gettext', 'GL', 'gl', 'glob',
+ 'gopherlib', 'grp', 'gzip', 'heapq', 'hmac', 'hotshot', 'htmlentitydefs', 'htmllib',
+ 'HTMLParser', 'httplib', 'imageop', 'imaplib', 'imgfile', 'imghdr', 'imp', 'inspect',
+ 'itertools', 'jpeg', 'keyword', 'linecache', 'locale', 'logging', 'mailbox', 'mailcap',
+ 'marshal', 'math', 'md5', 'mhlib', 'mimetools', 'mimetypes', 'MimeWriter', 'mimify',
+ 'mmap', 'msvcrt', 'multifile', 'mutex', 'netrc', 'new', 'nis', 'nntplib', 'operator',
+ 'optparse', 'os', 'ossaudiodev', 'parser', 'pdb', 'pickle', 'pickletools', 'pipes',
+ 'pkgutil', 'platform', 'popen2', 'poplib', 'posix', 'posixfile', 'pprint', 'profile',
+ 'pstats', 'pty', 'pwd', 'py_compile', 'pyclbr', 'pydoc', 'Queue', 'quopri', 'random',
+ 're', 'readline', 'repr', 'resource', 'rexec', 'rfc822', 'rgbimg', 'rlcompleter',
+ 'robotparser', 'sched', 'ScrolledText', 'select', 'sets', 'sgmllib', 'sha', 'shelve',
+ 'shlex', 'shutil', 'signal', 'SimpleHTTPServer', 'SimpleXMLRPCServer', 'site', 'smtpd',
+ 'smtplib', 'sndhdr', 'socket', 'SocketServer', 'stat', 'statcache', 'statvfs', 'string',
+ 'StringIO', 'stringprep', 'struct', 'subprocess', 'sunau', 'SUNAUDIODEV', 'sunaudiodev',
+ 'symbol', 'sys', 'syslog', 'tabnanny', 'tarfile', 'telnetlib', 'tempfile', 'termios',
+ 'test', 'textwrap', 'thread', 'threading', 'time', 'timeit', 'Tix', 'Tkinter', 'token',
+ 'tokenize', 'traceback', 'tty', 'turtle', 'types', 'unicodedata', 'unittest', 'urllib2',
+ 'urllib', 'urlparse', 'user', 'UserDict', 'UserList', 'UserString', 'uu', 'warnings',
+ 'wave', 'weakref', 'webbrowser', 'whichdb', 'whrandom', 'winsound', 'xdrlib', 'xml',
+ 'xmllib', 'xmlrpclib', 'zipfile', 'zipimport', 'zlib',
+ // Python 3.0
+ 'bytes', 'bytearray'
+ ),
+
+ /*
+ ** Set 4: special methods
+ ** http://python.org/doc/current/ref/specialnames.html
+ */
+ 4 => array(
+ /*
+ // Iterator types: http://python.org/doc/current/lib/typeiter.html
+ '__iter__', 'next',
+ // String types: http://python.org/doc/current/lib/string-methods.html
+ 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
+ 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle',
+ 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust',
+ 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
+ 'translate', 'upper', 'zfill',
+ */
+ // Basic customization: http://python.org/doc/current/ref/customization.html
+ '__new__', '__init__', '__del__', '__repr__', '__str__',
+ '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__cmp__', '__rcmp__',
+ '__hash__', '__nonzero__', '__unicode__', '__dict__',
+ // Attribute access: http://python.org/doc/current/ref/attribute-access.html
+ '__setattr__', '__delattr__', '__getattr__', '__getattribute__', '__get__', '__set__',
+ '__delete__', '__slots__',
+ // Class creation, callable objects
+ '__metaclass__', '__call__',
+ // Container types: http://python.org/doc/current/ref/sequence-types.html
+ '__len__', '__getitem__', '__setitem__', '__delitem__', '__iter__', '__contains__',
+ '__getslice__', '__setslice__', '__delslice__',
+ // Numeric types: http://python.org/doc/current/ref/numeric-types.html
+ '__abs__','__add__','__and__','__coerce__','__div__','__divmod__','__float__',
+ '__hex__','__iadd__','__isub__','__imod__','__idiv__','__ipow__','__iand__',
+ '__ior__','__ixor__', '__ilshift__','__irshift__','__invert__','__int__',
+ '__long__','__lshift__',
+ '__mod__','__mul__','__neg__','__oct__','__or__','__pos__','__pow__',
+ '__radd__','__rdiv__','__rdivmod__','__rmod__','__rpow__','__rlshift__','__rrshift__',
+ '__rshift__','__rsub__','__rmul__','__rand__','__rxor__','__ror__',
+ '__sub__','__xor__'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?', '`'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #ff7700;font-weight:bold;', // Reserved
+ 2 => 'color: #008000;', // Built-ins + self
+ 3 => 'color: #dc143c;', // Standard lib
+ 4 => 'color: #0000cd;' // Special methods
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: black;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #483d8b;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff4500;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: black;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php
new file mode 100644
index 000000000..e3b5df8a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php
@@ -0,0 +1,151 @@
+<?php
+/*************************************************************************************
+ * qbasic.php
+ * ----------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/20
+ *
+ * QBasic/QuickBASIC language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ * - Added support for URLs
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * - Removed unnessecary slashes from some keywords
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Make sure all possible combinations of keywords with
+ * a space in them (EXIT FOR, END SELECT) are added
+ * to the first keyword group
+ * * Update colours, especially for the first keyword group
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'QBasic/QuickBASIC',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ //Single-Line Comments using REM command
+ 2 => "/\bREM.*?$/i"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'DO', 'LOOP', 'WHILE', 'WEND', 'THEN', 'ELSE', 'ELSEIF', 'IF',
+ 'FOR', 'TO', 'NEXT', 'STEP', 'GOTO', 'GOSUB', 'CALL', 'CALLS',
+ 'SUB', 'FUNCTION', 'RETURN', 'RESUME', 'SELECT', 'CASE', 'UNTIL'
+ ),
+ 3 => array(
+ 'ABS', 'ABSOLUTE', 'ACCESS', 'ALIAS', 'AND', 'ANY', 'APPEND', 'AS', 'ASC', 'ATN',
+ 'BASE', 'BEEP', 'BINARY', 'BLOAD', 'BSAVE', 'BYVAL',
+ 'CDBL', 'CDECL', 'CHAIN', 'CHDIR', 'CHR$', 'CINT', 'CIRCLE', 'CLEAR',
+ 'CLNG', 'CLOSE', 'CLS', 'COM', 'COMMAND$', 'COMMON', 'CONST', 'COS', 'CSNG',
+ 'CSRLIN', 'CVD', 'CVDMBF', 'CVI', 'CVL', 'CVS', 'CVSMDF', 'DATA', 'DATE$',
+ 'DECLARE', 'DEF', 'FN', 'SEG', 'DEFDBL', 'DEFINT', 'DEFLNG', 'DEFSNG', 'DEFSTR',
+ 'DIM', 'DOUBLE', 'DRAW', 'END', 'ENVIRON', 'ENVIRON$', 'EOF', 'EQV', 'ERASE',
+ 'ERDEV', 'ERDEV$', 'ERL', 'ERR', 'ERROR', 'EXIT', 'EXP', 'FIELD', 'FILEATTR',
+ 'FILES', 'FIX', 'FRE', 'FREEFILE', 'GET', 'HEX$', 'IMP', 'INKEY$',
+ 'INP', 'INPUT', 'INPUT$', 'INSTR', 'INT', 'INTEGER', 'IOCTL', 'IOCTL$', 'IS',
+ 'KEY', 'KILL', 'LBOUND', 'LCASE$', 'LEFT$', 'LEN', 'LET', 'LINE', 'LIST', 'LOC',
+ 'LOCAL', 'LOCATE', 'LOCK', 'LOF', 'LOG', 'LONG', 'LPOS', 'LPRINT',
+ 'LSET', 'LTRIM$', 'MID$', 'MKD$', 'MKDIR', 'MKDMBF$', 'MKI$', 'MKL$',
+ 'MKS$', 'MKSMBF$', 'MOD', 'NAME', 'NOT', 'OCT$', 'OFF', 'ON', 'PEN', 'PLAY',
+ 'OPEN', 'OPTION', 'OR', 'OUT', 'OUTPUT',
+ 'PAINT', 'PALETTE', 'PCOPY', 'PEEK', 'PMAP', 'POINT', 'POKE', 'POS', 'PRESET',
+ 'PRINT', 'PSET', 'PUT', 'RANDOM', 'RANDOMIZE', 'READ', 'REDIM', 'RESET',
+ 'RESTORE', 'RIGHT$', 'RMDIR', 'RND', 'RSET', 'RTRIM$', 'RUN', 'SADD', 'SCREEN',
+ 'SEEK', 'SETMEM', 'SGN', 'SHARED', 'SHELL', 'SIGNAL', 'SIN', 'SINGLE', 'SLEEP',
+ 'SOUND', 'SPACE$', 'SPC', 'SQR', 'STATIC', 'STICK', 'STOP', 'STR$', 'STRIG',
+ 'STRING', 'STRING$', 'SWAP', 'SYSTEM', 'TAB', 'TAN', 'TIME$', 'TIMER',
+ 'TROFF', 'TRON', 'TYPE', 'UBOUND', 'UCASE$', 'UEVENT', 'UNLOCK', 'USING', 'VAL',
+ 'VARPTR', 'VARPTR$', 'VARSEG', 'VIEW', 'WAIT', 'WIDTH', 'WINDOW', 'WRITE', 'XOR'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', ',', '+', '-', '*', '/', '=', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #a1a100;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080;',
+ 2 => 'color: #808080;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 3 => 'http://www.qbasicnews.com/qboho/qck{FNAMEL}.shtml'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 8
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php
new file mode 100644
index 000000000..cc6e079b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php
@@ -0,0 +1,406 @@
+<?php
+/*************************************************************************************
+ * rails.php
+ * ---------
+ * Author: Moises Deniz
+ * Copyright: (c) 2005 Moises Deniz
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/03/21
+ *
+ * Ruby (with Ruby on Rails Framework) language file for GeSHi.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Rails',
+ 'COMMENT_SINGLE' => array(1 => "#"),
+ 'COMMENT_MULTI' => array("=begin" => "=end"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', '`','\''),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'alias', 'and', 'begin', 'break', 'case', 'class',
+ 'def', 'defined', 'do', 'else', 'elsif', 'end',
+ 'ensure', 'for', 'if', 'in', 'module', 'while',
+ 'next', 'not', 'or', 'redo', 'rescue', 'yield',
+ 'retry', 'super', 'then', 'undef', 'unless',
+ 'until', 'when', 'BEGIN', 'END', 'include'
+ ),
+ 2 => array(
+ '__FILE__', '__LINE__', 'false', 'nil', 'self', 'true',
+ 'return'
+ ),
+ 3 => array(
+ 'Array', 'Float', 'Integer', 'String', 'at_exit',
+ 'autoload', 'binding', 'caller', 'catch', 'chop', 'chop!',
+ 'chomp', 'chomp!', 'eval', 'exec', 'exit', 'exit!', 'fail',
+ 'fork', 'format', 'gets', 'global_variables', 'gsub', 'gsub!',
+ 'iterator?', 'lambda', 'load', 'local_variables', 'loop',
+ 'open', 'p', 'print', 'printf', 'proc', 'putc', 'puts',
+ 'raise', 'rand', 'readline', 'readlines', 'require', 'select',
+ 'sleep', 'split', 'sprintf', 'srand', 'sub', 'sub!', 'syscall',
+ 'system', 'trace_var', 'trap', 'untrace_var'
+ ),
+ 4 => array(
+ 'Abbrev', 'ArgumentError', 'Base64', 'Benchmark',
+ 'Benchmark::Tms', 'Bignum', 'Binding', 'CGI', 'CGI::Cookie',
+ 'CGI::HtmlExtension', 'CGI::QueryExtension',
+ 'CGI::Session', 'CGI::Session::FileStore',
+ 'CGI::Session::MemoryStore', 'Class', 'Comparable', 'Complex',
+ 'ConditionVariable', 'Continuation', 'Data',
+ 'Date', 'DateTime', 'Delegator', 'Dir', 'EOFError', 'ERB',
+ 'ERB::Util', 'Enumerable', 'Enumerable::Enumerator', 'Errno',
+ 'Exception', 'FalseClass', 'File',
+ 'File::Constants', 'File::Stat', 'FileTest', 'FileUtils',
+ 'FileUtils::DryRun', 'FileUtils::NoWrite',
+ 'FileUtils::StreamUtils_', 'FileUtils::Verbose', 'Find',
+ 'Fixnum', 'FloatDomainError', 'Forwardable', 'GC', 'Generator',
+ 'Hash', 'IO', 'IOError', 'Iconv', 'Iconv::BrokenLibrary',
+ 'Iconv::Failure', 'Iconv::IllegalSequence',
+ 'Iconv::InvalidCharacter', 'Iconv::InvalidEncoding',
+ 'Iconv::OutOfRange', 'IndexError', 'Interrupt', 'Kernel',
+ 'LoadError', 'LocalJumpError', 'Logger', 'Logger::Application',
+ 'Logger::Error', 'Logger::Formatter', 'Logger::LogDevice',
+ 'Logger::LogDevice::LogDeviceMutex', 'Logger::Severity',
+ 'Logger::ShiftingError', 'Marshal', 'MatchData',
+ 'Math', 'Matrix', 'Method', 'Module', 'Mutex', 'NameError',
+ 'NameError::message', 'NilClass', 'NoMemoryError',
+ 'NoMethodError', 'NotImplementedError', 'Numeric', 'Object',
+ 'ObjectSpace', 'Observable', 'PStore', 'PStore::Error',
+ 'Pathname', 'Precision', 'Proc', 'Process', 'Process::GID',
+ 'Process::Status', 'Process::Sys', 'Process::UID', 'Queue',
+ 'Range', 'RangeError', 'Rational', 'Regexp', 'RegexpError',
+ 'RuntimeError', 'ScriptError', 'SecurityError', 'Set',
+ 'Shellwords', 'Signal', 'SignalException', 'SimpleDelegator',
+ 'SingleForwardable', 'Singleton', 'SingletonClassMethods',
+ 'SizedQueue', 'SortedSet', 'StandardError', 'StringIO',
+ 'StringScanner', 'StringScanner::Error', 'Struct', 'Symbol',
+ 'SyncEnumerator', 'SyntaxError', 'SystemCallError',
+ 'SystemExit', 'SystemStackError', 'Tempfile',
+ 'Test::Unit::TestCase', 'Test::Unit', 'Test', 'Thread',
+ 'ThreadError', 'ThreadGroup',
+ 'ThreadsWait', 'Time', 'TrueClass', 'TypeError', 'URI',
+ 'URI::BadURIError', 'URI::Error', 'URI::Escape', 'URI::FTP',
+ 'URI::Generic', 'URI::HTTP', 'URI::HTTPS',
+ 'URI::InvalidComponentError', 'URI::InvalidURIError',
+ 'URI::LDAP', 'URI::MailTo', 'URI::REGEXP',
+ 'URI::REGEXP::PATTERN', 'UnboundMethod', 'Vector', 'YAML',
+ 'ZeroDivisionError', 'Zlib',
+ 'Zlib::BufError', 'Zlib::DataError', 'Zlib::Deflate',
+ 'Zlib::Error', 'Zlib::GzipFile', 'Zlib::GzipFile::CRCError',
+ 'Zlib::GzipFile::Error', 'Zlib::GzipFile::LengthError',
+ 'Zlib::GzipFile::NoFooter', 'Zlib::GzipReader',
+ 'Zlib::GzipWriter', 'Zlib::Inflate', 'Zlib::MemError',
+ 'Zlib::NeedDict', 'Zlib::StreamEnd', 'Zlib::StreamError',
+ 'Zlib::VersionError',
+ 'Zlib::ZStream',
+ 'ActionController::AbstractRequest',
+ 'ActionController::Assertions::DomAssertions',
+ 'ActionController::Assertions::ModelAssertions',
+ 'ActionController::Assertions::ResponseAssertions',
+ 'ActionController::Assertions::RoutingAssertions',
+ 'ActionController::Assertions::SelectorAssertions',
+ 'ActionController::Assertions::TagAssertions',
+ 'ActionController::Base',
+ 'ActionController::Benchmarking::ClassMethods',
+ 'ActionController::Caching',
+ 'ActionController::Caching::Actions',
+ 'ActionController::Caching::Actions::ActionCachePath',
+ 'ActionController::Caching::Fragments',
+ 'ActionController::Caching::Pages',
+ 'ActionController::Caching::Pages::ClassMethods',
+ 'ActionController::Caching::Sweeping',
+ 'ActionController::Components',
+ 'ActionController::Components::ClassMethods',
+ 'ActionController::Components::InstanceMethods',
+ 'ActionController::Cookies',
+ 'ActionController::Filters::ClassMethods',
+ 'ActionController::Flash',
+ 'ActionController::Flash::FlashHash',
+ 'ActionController::Helpers::ClassMethods',
+ 'ActionController::Integration::Session',
+ 'ActionController::IntegrationTest',
+ 'ActionController::Layout::ClassMethods',
+ 'ActionController::Macros',
+ 'ActionController::Macros::AutoComplete::ClassMethods',
+ 'ActionController::Macros::InPlaceEditing::ClassMethods',
+ 'ActionController::MimeResponds::InstanceMethods',
+ 'ActionController::Pagination',
+ 'ActionController::Pagination::ClassMethods',
+ 'ActionController::Pagination::Paginator',
+ 'ActionController::Pagination::Paginator::Page',
+ 'ActionController::Pagination::Paginator::Window',
+ 'ActionController::Rescue', 'ActionController::Resources',
+ 'ActionController::Routing',
+ 'ActionController::Scaffolding::ClassMethods',
+ 'ActionController::SessionManagement::ClassMethods',
+ 'ActionController::Streaming', 'ActionController::TestProcess',
+ 'ActionController::TestUploadedFile',
+ 'ActionController::UrlWriter',
+ 'ActionController::Verification::ClassMethods',
+ 'ActionMailer::Base', 'ActionView::Base',
+ 'ActionView::Helpers::ActiveRecordHelper',
+ 'ActionView::Helpers::AssetTagHelper',
+ 'ActionView::Helpers::BenchmarkHelper',
+ 'ActionView::Helpers::CacheHelper',
+ 'ActionView::Helpers::CaptureHelper',
+ 'ActionView::Helpers::DateHelper',
+ 'ActionView::Helpers::DebugHelper',
+ 'ActionView::Helpers::FormHelper',
+ 'ActionView::Helpers::FormOptionsHelper',
+ 'ActionView::Helpers::FormTagHelper',
+ 'ActionView::Helpers::JavaScriptHelper',
+ 'ActionView::Helpers::JavaScriptMacrosHelper',
+ 'ActionView::Helpers::NumberHelper',
+ 'ActionView::Helpers::PaginationHelper',
+ 'ActionView::Helpers::PrototypeHelper',
+ 'ActionView::Helpers::PrototypeHelper::JavaScriptGenerator::GeneratorMethods',
+ 'ActionView::Helpers::ScriptaculousHelper',
+ 'ActionView::Helpers::TagHelper',
+ 'ActionView::Helpers::TextHelper',
+ 'ActionView::Helpers::UrlHelper', 'ActionView::Partials',
+ 'ActionWebService::API::Method', 'ActionWebService::Base',
+ 'ActionWebService::Client::Soap',
+ 'ActionWebService::Client::XmlRpc',
+ 'ActionWebService::Container::ActionController::ClassMethods',
+ 'ActionWebService::Container::Delegated::ClassMethods',
+ 'ActionWebService::Container::Direct::ClassMethods',
+ 'ActionWebService::Invocation::ClassMethods',
+ 'ActionWebService::Scaffolding::ClassMethods',
+ 'ActionWebService::SignatureTypes', 'ActionWebService::Struct',
+ 'ActiveRecord::Acts::List::ClassMethods',
+ 'ActiveRecord::Acts::List::InstanceMethods',
+ 'ActiveRecord::Acts::NestedSet::ClassMethods',
+ 'ActiveRecord::Acts::NestedSet::InstanceMethods',
+ 'ActiveRecord::Acts::Tree::ClassMethods',
+ 'ActiveRecord::Acts::Tree::InstanceMethods',
+ 'ActiveRecord::Aggregations::ClassMethods',
+ 'ActiveRecord::Associations::ClassMethods',
+ 'ActiveRecord::AttributeMethods::ClassMethods',
+ 'ActiveRecord::Base',
+ 'ActiveRecord::Calculations::ClassMethods',
+ 'ActiveRecord::Callbacks',
+ 'ActiveRecord::ConnectionAdapters::AbstractAdapter',
+ 'ActiveRecord::ConnectionAdapters::Column',
+ 'ActiveRecord::ConnectionAdapters::DB2Adapter',
+ 'ActiveRecord::ConnectionAdapters::DatabaseStatements',
+ 'ActiveRecord::ConnectionAdapters::FirebirdAdapter',
+ 'ActiveRecord::ConnectionAdapters::FrontBaseAdapter',
+ 'ActiveRecord::ConnectionAdapters::MysqlAdapter',
+ 'ActiveRecord::ConnectionAdapters::OpenBaseAdapter',
+ 'ActiveRecord::ConnectionAdapters::OracleAdapter',
+ 'ActiveRecord::ConnectionAdapters::PostgreSQLAdapter',
+ 'ActiveRecord::ConnectionAdapters::Quoting',
+ 'ActiveRecord::ConnectionAdapters::SQLServerAdapter',
+ 'ActiveRecord::ConnectionAdapters::SQLiteAdapter',
+ 'ActiveRecord::ConnectionAdapters::SchemaStatements',
+ 'ActiveRecord::ConnectionAdapters::SybaseAdapter::ColumnWithIdentity',
+ 'ActiveRecord::ConnectionAdapters::SybaseAdapterContext',
+ 'ActiveRecord::ConnectionAdapters::TableDefinition',
+ 'ActiveRecord::Errors', 'ActiveRecord::Locking',
+ 'ActiveRecord::Locking::Optimistic',
+ 'ActiveRecord::Locking::Optimistic::ClassMethods',
+ 'ActiveRecord::Locking::Pessimistic',
+ 'ActiveRecord::Migration', 'ActiveRecord::Observer',
+ 'ActiveRecord::Observing::ClassMethods',
+ 'ActiveRecord::Reflection::ClassMethods',
+ 'ActiveRecord::Reflection::MacroReflection',
+ 'ActiveRecord::Schema', 'ActiveRecord::Timestamp',
+ 'ActiveRecord::Transactions::ClassMethods',
+ 'ActiveRecord::Validations',
+ 'ActiveRecord::Validations::ClassMethods',
+ 'ActiveRecord::XmlSerialization',
+ 'ActiveSupport::CachingTools::HashCaching',
+ 'ActiveSupport::CoreExtensions::Array::Conversions',
+ 'ActiveSupport::CoreExtensions::Array::Grouping',
+ 'ActiveSupport::CoreExtensions::Date::Conversions',
+ 'ActiveSupport::CoreExtensions::Hash::Conversions',
+ 'ActiveSupport::CoreExtensions::Hash::Conversions::ClassMethods',
+ 'ActiveSupport::CoreExtensions::Hash::Diff',
+ 'ActiveSupport::CoreExtensions::Hash::Keys',
+ 'ActiveSupport::CoreExtensions::Hash::ReverseMerge',
+ 'ActiveSupport::CoreExtensions::Integer::EvenOdd',
+ 'ActiveSupport::CoreExtensions::Integer::Inflections',
+ 'ActiveSupport::CoreExtensions::Numeric::Bytes',
+ 'ActiveSupport::CoreExtensions::Numeric::Time',
+ 'ActiveSupport::CoreExtensions::Pathname::CleanWithin',
+ 'ActiveSupport::CoreExtensions::Range::Conversions',
+ 'ActiveSupport::CoreExtensions::String::Access',
+ 'ActiveSupport::CoreExtensions::String::Conversions',
+ 'ActiveSupport::CoreExtensions::String::Inflections',
+ 'ActiveSupport::CoreExtensions::String::Iterators',
+ 'ActiveSupport::CoreExtensions::String::StartsEndsWith',
+ 'ActiveSupport::CoreExtensions::String::Unicode',
+ 'ActiveSupport::CoreExtensions::Time::Calculations',
+ 'ActiveSupport::CoreExtensions::Time::Calculations::ClassMethods',
+ 'ActiveSupport::CoreExtensions::Time::Conversions',
+ 'ActiveSupport::Multibyte::Chars',
+ 'ActiveSupport::Multibyte::Handlers::UTF8Handler',
+ 'Breakpoint', 'Builder::BlankSlate', 'Builder::XmlMarkup',
+ 'Fixtures',
+ 'HTML::Selector', 'HashWithIndifferentAccess', 'Inflector',
+ 'Inflector::Inflections', 'Mime', 'Mime::Type',
+ 'OCI8AutoRecover', 'TimeZone', 'XmlSimple'
+ ),
+ 5 => array(
+ 'image_tag', 'link_to', 'link_to_remote', 'javascript_include_tag',
+ 'assert_equal', 'assert_not_equal', 'before_filter',
+ 'after_filter', 'render', 'redirect_to', 'hide_action',
+ 'render_to_string', 'url_for', 'controller_name',
+ 'controller_class_name', 'controller_path', 'session',
+ 'render_component', 'render_component_as_string', 'cookie',
+ 'layout', 'flash', 'auto_complete_for', 'in_place_editor_for',
+ 'respond_to', 'paginate', 'current_page', 'each', 'first',
+ 'first_page', 'last_page', 'last', 'length', 'new', 'page_count',
+ 'previous', 'scaffold', 'send_data',
+ 'send_file', 'deliver', 'receive', 'error_messages_for',
+ 'error_message_on', 'form', 'input', 'stylesheet_link_tag',
+ 'stylesheet_path', 'content_for', 'select_date', 'ago',
+ 'month', 'day', 'check_box', 'fields_for', 'file_field',
+ 'form_for', 'hidden_field', 'text_area', 'password_field',
+ 'collection_select', 'options_for_select',
+ 'options_from_collection_for_select', 'file_field_tag',
+ 'form_for_tag', 'hidden_field_tag', 'text_area_tag',
+ 'password_field_tag', 'link_to_function', 'javascript_tag',
+ 'human_size', 'number_to_currency', 'pagination_links',
+ 'form_remote_tag', 'form_remote_for',
+ 'submit_to_remote', 'remote_function', 'observe_form',
+ 'observe_field', 'remote_form_for', 'options_for_ajax', 'alert',
+ 'call', 'assign', 'show', 'hide', 'insert_html', 'sortable',
+ 'toggle', 'visual_effect', 'replace', 'replace_html', 'remove',
+ 'save', 'save!', 'draggable', 'drop_receiving', 'literal',
+ 'draggable_element', 'drop_receiving_element', 'sortable_element',
+ 'content_tag', 'tag', 'link_to_image', 'link_to_if',
+ 'link_to_unless', 'mail_to', 'link_image_to', 'button_to',
+ 'current_page?', 'act_as_list', 'act_as_nested', 'act_as_tree',
+ 'has_many', 'has_one', 'belongs_to', 'has_many_and_belogns_to',
+ 'delete', 'destroy', 'destroy_all', 'clone', 'deep_clone', 'copy',
+ 'update', 'table_name', 'primary_key', 'sum', 'maximun', 'minimum',
+ 'count', 'size', 'after_save', 'after_create', 'before_save',
+ 'before_create', 'add_to_base', 'errors', 'add', 'validate',
+ 'validates_presence_of', 'validates_numericality_of',
+ 'validates_uniqueness_of', 'validates_length_of',
+ 'validates_format_of', 'validates_size_of', 'to_a', 'to_s',
+ 'to_xml', 'to_i'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>',
+ '+', '-', '=>', '<<'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color:#9966CC; font-weight:bold;',
+ 2 => 'color:#0000FF; font-weight:bold;',
+ 3 => 'color:#CC0066; font-weight:bold;',
+ 4 => 'color:#CC00FF; font-weight:bold;',
+ 5 => 'color:#5A0A0A; font-weight:bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color:#008000; font-style:italic;',
+ 'MULTI' => 'color:#000080; font-style:italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color:#000099;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color:#996600;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color:#006666;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color:#9900CC;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color:#ff6633; font-weight:bold;',
+ 1 => 'color:#0066ff; font-weight:bold;',
+ 2 => 'color:#6666ff; font-weight:bold;',
+ 3 => 'color:#ff3333; font-weight:bold;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ 0 => array(
+ GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 1 => array(
+ GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*", //Static OOP References
+ 3 => array(
+ GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<%' => '%>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php
new file mode 100644
index 000000000..97eff1f32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php
@@ -0,0 +1,196 @@
+<?php
+/*************************************************************************************
+ * rebol.php
+ * --------
+ * Author: Lecanu Guillaume (Guillaume@LyA.fr)
+ * Copyright: (c) 2004-2005 Lecanu Guillaume (Guillaume@LyA.fr)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/12/22
+ *
+ * Rebol language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2009/01/26 (1.0.8.3)
+ * - Adapted language file to comply to GeSHi language file guidelines
+ * 2004/11/25 (1.0.3)
+ * - Added support for multiple object splitters
+ * - Fixed &new problem
+ * 2004/10/27 (1.0.2)
+ * - Added URL support
+ * - Added extra constants
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * * Make sure the last few function I may have missed
+ * (like eval()) are included for highlighting
+ * * Split to several files - php4, php5 etc
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'REBOL',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array('rebol [' => ']', 'comment [' => ']'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'binary!','block!','char!','date!','decimal!','email!','file!',
+ 'hash!','integer!','issue!','list!','logic!','money!','none!',
+ 'object!','paren!','pair!','path!','string!','tag!','time!',
+ 'tuple!','url!',
+ ),
+ 2 => array(
+ 'all','any','attempt','break','catch','compose','disarm','dispatch',
+ 'do','do-events','does','either','else','exit','for','forall',
+ 'foreach','forever','forskip','func','function','halt','has','if',
+ 'launch','loop','next','quit','reduce','remove-each','repeat',
+ 'return','secure','switch','throw','try','until','wait','while',
+ ),
+ 3 => array(
+ 'about','abs','absolute','add','alert','alias','alter','and',
+ 'any-block?','any-function?','any-string?','any-type?','any-word?',
+ 'append','arccosine','arcsine','arctangent','array','as-pair',
+ 'ask','at','back','binary?','bind','bitset?','block?','brightness?',
+ 'browse','build-tag','caret-to-offset','center-face','change',
+ 'change-dir','char?','charset','checksum','choose','clean-path',
+ 'clear','clear-fields','close','comment','complement','component?',
+ 'compress','confirm','connected?','construct','context','copy',
+ 'cosine','datatype?','date?','debase','decimal?','decode-cgi',
+ 'decompress','dehex','delete','detab','difference','dir?','dirize',
+ 'divide','dump-face','dump-obj','echo','email?','empty?','enbase',
+ 'entab','equal?','error?','even?','event?','exclude','exists?',
+ 'exp','extract','fifth','file?','find','first','flash','focus',
+ 'form','found?','fourth','free','function?','get','get-modes',
+ 'get-word?','greater-or-equal?','greater?','hash?','head','head?',
+ 'help','hide','hide-popup','image?','import-email','in',
+ 'in-window?','index?','info?','inform','input','input?','insert',
+ 'integer?','intersect','issue?','join','last','layout','length?',
+ 'lesser-or-equal?','lesser?','library?','license','link?',
+ 'list-dir','list?','lit-path?','lit-word?','load','load-image',
+ 'log-10','log-2','log-e','logic?','lowercase','make','make-dir',
+ 'make-face','max','maximum','maximum-of','min','minimum',
+ 'minimum-of','modified?','mold','money?','multiply','native?',
+ 'negate','negative?','none?','not','not-equal?','now','number?',
+ 'object?','odd?','offset-to-caret','offset?','op?','open','or',
+ 'pair?','paren?','parse','parse-xml','path?','pick','poke','port?',
+ 'positive?','power','prin','print','probe','protect',
+ 'protect-system','query','random','read','read-io','recycle',
+ 'refinement?','reform','rejoin','remainder','remold','remove',
+ 'rename',
+ //'repeat',
+ 'repend','replace','request','request-color','request-date',
+ 'request-download','request-file','request-list','request-pass',
+ 'request-text','resend','reverse','routine?','same?','save',
+ 'script?','second','select','send','series?','set','set-modes',
+ 'set-net','set-path?','set-word?','show','show-popup','sign?',
+ 'sine','size-text','size?','skip','sort','source','span?',
+ 'split-path','square-root','strict-equal?','strict-not-equal?',
+ 'string?','struct?','stylize','subtract','suffix?','tag?','tail',
+ 'tail?','tangent','third','time?','to','to-binary','to-bitset',
+ 'to-block','to-char','to-date','to-decimal','to-email','to-file',
+ 'to-get-word','to-hash','to-hex','to-idate','to-image','to-integer',
+ 'to-issue','to-list','to-lit-path','to-lit-word','to-local-file',
+ 'to-logic','to-money','to-pair','to-paren','to-path',
+ 'to-rebol-file','to-refinement','to-set-path','to-set-word',
+ 'to-string','to-tag','to-time','to-tuple','to-url','to-word',
+ 'trace','trim','tuple?','type?','unfocus','union','unique',
+ 'unprotect','unset','unset?','unview','update','upgrade',
+ 'uppercase','url?','usage','use','value?','view','viewed?','what',
+ 'what-dir','within?','word?','write','write-io','xor','zero?',
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '@', '%', '&', '*', '|', '/', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+// 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+// 2 => 'includes/dico_rebol.php?word={FNAME}',
+// 3 => 'includes/dico_rebol.php?word={FNAME}'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*",
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php
new file mode 100644
index 000000000..59199f743
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php
@@ -0,0 +1,233 @@
+<?php
+/*************************************************************************************
+ * reg.php
+ * -------
+ * Author: Sean Hanna (smokingrope@gmail.com)
+ * Copyright: (c) 2006 Sean Hanna
+ * Release Version: 1.0.8.4
+ * Date Started: 03/15/2006
+ *
+ * Microsoft Registry Editor language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * - Updated and optimized most regular expressions
+ * 03/15/2006 (0.5.0)
+ * - Syntax File Created
+ * 04/27/2006 (0.9.5)
+ * - Syntax Coloring Cleaned Up
+ * - First Release
+ * 04/29/2006 (1.0.0)
+ * - Updated a few coloring settings
+ *
+ * TODO (updated 4/27/2006)
+ * -------------------------
+ * - Add a verification to the multi-line portion of the hex field regex
+ * for a '\' character on the line preceding the line of the multi-line
+ * hex field.
+ *
+ * KNOWN ISSUES (updated 4/27/2006)
+ * ---------------------------------
+ *
+ * - There are two regexes for the multiline hex value regex. The regex for
+ * all lines after the first does not verify that the previous line contains
+ * a line continuation character '\'. This regex also does not check for
+ * end of line as it should.
+ *
+ * - If number_highlighting is enabled during processing of this syntax file
+ * many of the regexps used will appear slightly incorrect.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'Microsoft Registry',
+ 'COMMENT_SINGLE' => array(1 =>';'),
+ 'COMMENT_MULTI' => array( ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+// 1 => array(),
+// 2 => array(),
+ /* Registry Key Constants Not Used */
+ 3 => array(
+ 'HKEY_LOCAL_MACHINE',
+ 'HKEY_CLASSES_ROOT',
+ 'HKEY_CURRENT_USER',
+ 'HKEY_USERS',
+ 'HKEY_CURRENT_CONFIG',
+ 'HKEY_DYN_DATA',
+ 'HKLM', 'HKCR', 'HKCU', 'HKU', 'HKCC', 'HKDD'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+// 1 => false,
+// 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+// 1 => 'color: #00CCFF;',
+// 2 => 'color: #0000FF;',
+ 3 => 'color: #800000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #009900;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #00CCFF;',
+ 1 => 'color: #0000FF;',
+ 2 => '',
+ 3 => 'color: #0000FF;',
+ 4 => 'color: #0000FF;',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => 'color: #FF6600;',
+ )
+ ),
+ 'URLS' => array(
+// 1 => '',
+// 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // Highlight Key Delimiters
+ 0 => array(
+ GESHI_SEARCH => '((^|\\n)\\s*)(\\\\\\[(.*)\\\\\\])(\\s*(\\n|$))',
+ GESHI_REPLACE => '\\3',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\5'
+// GESHI_CLASS => 'kw1'
+ ),
+ // Highlight File Format Header Version 5
+ 1 => array(
+ GESHI_SEARCH => '(^\s*)(Windows Registry Editor Version \d+\.\d+)(\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ GESHI_CLASS => 'geshi_registry_header'
+ ),
+ // Highlight File Format Header Version 4
+ 2 => array(
+ GESHI_SEARCH => '(^\\s*)(REGEDIT\s?\d+)(\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ GESHI_CLASS => 'geshi_registry_header'
+ ),
+ // Highlight dword: 32 bit integer values
+ 3 => array(
+ GESHI_SEARCH => '(=\s*)(dword:[0-9a-fA-F]{8})(\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+// GESHI_CLASS => 'kw2'
+ ),
+ // Highlight variable names
+ 4 => array(
+ GESHI_SEARCH => '(^\s*)(\&quot;.*?\&quot;)(\s*=)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ GESHI_CLASS => 'geshi_variable'
+ ),
+ // Highlight String Values
+ 5 => array(
+ GESHI_SEARCH => '(=\s*)(\&quot;.*?\&quot;)(\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ GESHI_CLASS => 'st0'
+ ),
+ // Highlight Hexadecimal Values (Single-Line and Multi-Line)
+ 6 => array(
+ GESHI_SEARCH => '(=\s*\n?\s*)(hex:[0-9a-fA-F]{2}(,(\\\s*\n\s*)?[0-9a-fA-F]{2})*)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '',
+ GESHI_CLASS => 'kw2'
+ ),
+ // Highlight Default Variable
+ 7 => array(
+ GESHI_SEARCH => '(^\s*)(@)(\s*=)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ GESHI_CLASS => 'geshi_variable'
+ ),
+ // Highlight GUID's found anywhere.
+ 8 => array(
+ GESHI_SEARCH => '(\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\})',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '',
+ GESHI_CLASS => 'geshi_guid'
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER,
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php
new file mode 100644
index 000000000..af5fe1426
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php
@@ -0,0 +1,98 @@
+<?php
+/*************************************************************************************
+ * robots.php
+ * --------
+ * Author: Christian Lescuyer (cl@goelette.net)
+ * Copyright: (c) 2006 Christian Lescuyer http://xtian.goelette.info
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/02/17
+ *
+ * robots.txt language file for GeSHi.
+ *
+ * 2006/02/17 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'robots.txt',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'User-agent', 'Disallow'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.robotstxt.org/wc/norobots.html'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php
new file mode 100644
index 000000000..8c2b7d829
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php
@@ -0,0 +1,226 @@
+<?php
+/*************************************************************************************
+ * ruby.php
+ * --------
+ * Author: Moises Deniz
+ * Copyright: (c) 2007 Moises Deniz
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/03/21
+ *
+ * Ruby language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2007/03/21 (1.0.7.19)
+ * - Initial release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Ruby',
+ 'COMMENT_SINGLE' => array(1 => "#"),
+ 'COMMENT_MULTI' => array("=begin" => "=end"),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', '`','\''),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'alias', 'and', 'begin', 'break', 'case', 'class',
+ 'def', 'defined', 'do', 'else', 'elsif', 'end',
+ 'ensure', 'for', 'if', 'in', 'module', 'while',
+ 'next', 'not', 'or', 'redo', 'rescue', 'yield',
+ 'retry', 'super', 'then', 'undef', 'unless',
+ 'until', 'when', 'BEGIN', 'END', 'include'
+ ),
+ 2 => array(
+ '__FILE__', '__LINE__', 'false', 'nil', 'self', 'true',
+ 'return'
+ ),
+ 3 => array(
+ 'Array', 'Float', 'Integer', 'String', 'at_exit',
+ 'autoload', 'binding', 'caller', 'catch', 'chop', 'chop!',
+ 'chomp', 'chomp!', 'eval', 'exec', 'exit', 'exit!', 'fail',
+ 'fork', 'format', 'gets', 'global_variables', 'gsub', 'gsub!',
+ 'iterator?', 'lambda', 'load', 'local_variables', 'loop',
+ 'open', 'p', 'print', 'printf', 'proc', 'putc', 'puts',
+ 'raise', 'rand', 'readline', 'readlines', 'require', 'select',
+ 'sleep', 'split', 'sprintf', 'srand', 'sub', 'sub!', 'syscall',
+ 'system', 'trace_var', 'trap', 'untrace_var'
+ ),
+ 4 => array(
+ 'Abbrev', 'ArgumentError', 'Base64', 'Benchmark',
+ 'Benchmark::Tms', 'Bignum', 'Binding', 'CGI', 'CGI::Cookie',
+ 'CGI::HtmlExtension', 'CGI::QueryExtension',
+ 'CGI::Session', 'CGI::Session::FileStore',
+ 'CGI::Session::MemoryStore', 'Class', 'Comparable', 'Complex',
+ 'ConditionVariable', 'Continuation', 'Data',
+ 'Date', 'DateTime', 'Delegator', 'Dir', 'EOFError', 'ERB',
+ 'ERB::Util', 'Enumerable', 'Enumerable::Enumerator', 'Errno',
+ 'Exception', 'FalseClass', 'File',
+ 'File::Constants', 'File::Stat', 'FileTest', 'FileUtils',
+ 'FileUtils::DryRun', 'FileUtils::NoWrite',
+ 'FileUtils::StreamUtils_', 'FileUtils::Verbose', 'Find',
+ 'Fixnum', 'FloatDomainError', 'Forwardable', 'GC', 'Generator',
+ 'Hash', 'IO', 'IOError', 'Iconv', 'Iconv::BrokenLibrary',
+ 'Iconv::Failure', 'Iconv::IllegalSequence',
+ 'Iconv::InvalidCharacter', 'Iconv::InvalidEncoding',
+ 'Iconv::OutOfRange', 'IndexError', 'Interrupt', 'Kernel',
+ 'LoadError', 'LocalJumpError', 'Logger', 'Logger::Application',
+ 'Logger::Error', 'Logger::Formatter', 'Logger::LogDevice',
+ 'Logger::LogDevice::LogDeviceMutex', 'Logger::Severity',
+ 'Logger::ShiftingError', 'Marshal', 'MatchData',
+ 'Math', 'Matrix', 'Method', 'Module', 'Mutex', 'NameError',
+ 'NameError::message', 'NilClass', 'NoMemoryError',
+ 'NoMethodError', 'NotImplementedError', 'Numeric', 'Object',
+ 'ObjectSpace', 'Observable', 'PStore', 'PStore::Error',
+ 'Pathname', 'Precision', 'Proc', 'Process', 'Process::GID',
+ 'Process::Status', 'Process::Sys', 'Process::UID', 'Queue',
+ 'Range', 'RangeError', 'Rational', 'Regexp', 'RegexpError',
+ 'RuntimeError', 'ScriptError', 'SecurityError', 'Set',
+ 'Shellwords', 'Signal', 'SignalException', 'SimpleDelegator',
+ 'SingleForwardable', 'Singleton', 'SingletonClassMethods',
+ 'SizedQueue', 'SortedSet', 'StandardError', 'StringIO',
+ 'StringScanner', 'StringScanner::Error', 'Struct', 'Symbol',
+ 'SyncEnumerator', 'SyntaxError', 'SystemCallError',
+ 'SystemExit', 'SystemStackError', 'Tempfile',
+ 'Test::Unit::TestCase', 'Test::Unit', 'Test', 'Thread',
+ 'ThreadError', 'ThreadGroup',
+ 'ThreadsWait', 'Time', 'TrueClass', 'TypeError', 'URI',
+ 'URI::BadURIError', 'URI::Error', 'URI::Escape', 'URI::FTP',
+ 'URI::Generic', 'URI::HTTP', 'URI::HTTPS',
+ 'URI::InvalidComponentError', 'URI::InvalidURIError',
+ 'URI::LDAP', 'URI::MailTo', 'URI::REGEXP',
+ 'URI::REGEXP::PATTERN', 'UnboundMethod', 'Vector', 'YAML',
+ 'ZeroDivisionError', 'Zlib',
+ 'Zlib::BufError', 'Zlib::DataError', 'Zlib::Deflate',
+ 'Zlib::Error', 'Zlib::GzipFile', 'Zlib::GzipFile::CRCError',
+ 'Zlib::GzipFile::Error', 'Zlib::GzipFile::LengthError',
+ 'Zlib::GzipFile::NoFooter', 'Zlib::GzipReader',
+ 'Zlib::GzipWriter', 'Zlib::Inflate', 'Zlib::MemError',
+ 'Zlib::NeedDict', 'Zlib::StreamEnd', 'Zlib::StreamError',
+ 'Zlib::VersionError',
+ 'Zlib::ZStream',
+ 'HTML::Selector', 'HashWithIndifferentAccess', 'Inflector',
+ 'Inflector::Inflections', 'Mime', 'Mime::Type',
+ 'OCI8AutoRecover', 'TimeZone', 'XmlSimple'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '%', '&', '*', '|', '/', '<', '>',
+ '+', '-', '=>', '<<'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color:#9966CC; font-weight:bold;',
+ 2 => 'color:#0000FF; font-weight:bold;',
+ 3 => 'color:#CC0066; font-weight:bold;',
+ 4 => 'color:#CC00FF; font-weight:bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color:#008000; font-style:italic;',
+ 'MULTI' => 'color:#000080; font-style:italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color:#000099;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color:#996600;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color:#006666;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color:#9900CC;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color:#006600; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color:#ff6633; font-weight:bold;',
+ 1 => 'color:#0066ff; font-weight:bold;',
+ 2 => 'color:#6666ff; font-weight:bold;',
+ 3 => 'color:#ff3333; font-weight:bold;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ 0 => array(//Variables
+ GESHI_SEARCH => "([[:space:]])(\\$[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 1 => array(//Arrays
+ GESHI_SEARCH => "([[:space:]])(@[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 2 => "([A-Z][a-zA-Z0-9_]*::)+[A-Z][a-zA-Z0-9_]*",//Static OOP symbols
+ 3 => array(
+ GESHI_SEARCH => "([[:space:]]|\[|\()(:[a-zA-Z_][a-zA-Z0-9_]*)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '<%' => '%>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ ),
+ 'TAB_WIDTH' => 2
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php
new file mode 100644
index 000000000..bc6899716
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php
@@ -0,0 +1,290 @@
+<?php
+/*************************************************************************************
+ * sas.php
+ * -------
+ * Author: Galen Johnson (solitaryr@gmail.com)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/12/27
+ *
+ * SAS language file for GeSHi. Based on the sas vim file.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * - Cleaned up code style
+ * 2005/12/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/12/27)
+ * -------------------------
+ * * Check highlighting stuff works
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'SAS',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '_ALL_','_CHARACTER_','_INFILE_','_N_','_NULL_','_NUMERIC_',
+ '_WEBOUT_'
+ ),
+ 2 => array(
+ '%BQUOTE','%CMPRES','%COMPSTOR','%DATATYP','%DISPLAY','%DO','%ELSE',
+ '%END','%EVAL','%GLOBAL','%GOTO','%IF','%INDEX','%INPUT','%KEYDEF',
+ '%LABEL','%LEFT','%LENGTH','%LET','%LOCAL','%LOWCASE','%MACRO',
+ '%MEND','%NRBQUOTE','%NRQUOTE','%NRSTR','%PUT','%QCMPRES','%QLEFT',
+ '%QLOWCASE','%QSCAN','%QSUBSTR','%QSYSFUNC','%QTRIM','%QUOTE',
+ '%QUPCASE','%SCAN','%STR','%SUBSTR','%SUPERQ','%SYSCALL',
+ '%SYSEVALF','%SYSEXEC','%SYSFUNC','%SYSGET','%SYSLPUT','%SYSPROD',
+ '%SYSRC','%SYSRPUT','%THEN','%TO','%TRIM','%UNQUOTE','%UNTIL',
+ '%UPCASE','%VERIFY','%WHILE','%WINDOW'
+ ),
+ 3 => array(
+ 'ABS','ADDR','AIRY','ARCOS','ARSIN','ATAN','ATTRC','ATTRN','BAND',
+ 'BETAINV','BLSHIFT','BNOT','BOR','BRSHIFT','BXOR','BYTE','CDF',
+ 'CEIL','CEXIST','CINV','CLOSE','CNONCT','COLLATE','COMPBL',
+ 'COMPOUND','COMPRESS','COSH','COS','CSS','CUROBS','CV','DACCDBSL',
+ 'DACCDB','DACCSL','DACCSYD','DACCTAB','DAIRY','DATETIME','DATEJUL',
+ 'DATEPART','DATE','DAY','DCLOSE','DEPDBSL','DEPDB','DEPSL','DEPSYD',
+ 'DEPTAB','DEQUOTE','DHMS','DIF','DIGAMMA','DIM','DINFO','DNUM',
+ 'DOPEN','DOPTNAME','DOPTNUM','DREAD','DROPNOTE','DSNAME','ERFC',
+ 'ERF','EXIST','EXP','FAPPEND','FCLOSE','FCOL','FDELETE','FETCHOBS',
+ 'FETCH','FEXIST','FGET','FILEEXIST','FILENAME','FILEREF','FINFO',
+ 'FINV','FIPNAMEL','FIPNAME','FIPSTATE','FLOOR','FNONCT','FNOTE',
+ 'FOPEN','FOPTNAME','FOPTNUM','FPOINT','FPOS','FPUT','FREAD',
+ 'FREWIND','FRLEN','FSEP','FUZZ','FWRITE','GAMINV','GAMMA',
+ 'GETOPTION','GETVARC','GETVARN','HBOUND','HMS','HOSTHELP','HOUR',
+ 'IBESSEL','INDEXW','INDEXC','INDEX','INPUTN','INPUTC','INPUT',
+ 'INTRR','INTCK','INTNX','INT','IRR','JBESSEL','JULDATE','KURTOSIS',
+ 'LAG','LBOUND','LEFT','LENGTH','LGAMMA','LIBNAME','LIBREF','LOG10',
+ 'LOG2','LOGPDF','LOGPMF','LOGSDF','LOG','LOWCASE','MAX','MDY',
+ 'MEAN','MINUTE','MIN','MOD','MONTH','MOPEN','MORT','NETPV','NMISS',
+ 'NORMAL','NPV','N','OPEN','ORDINAL','PATHNAME','PDF','PEEKC','PEEK',
+ 'PMF','POINT','POISSON','POKE','PROBBETA','PROBBNML','PROBCHI',
+ 'PROBF','PROBGAM','PROBHYPR','PROBIT','PROBNEGB','PROBNORM','PROBT',
+ 'PUTN','PUTC','PUT','QTR','QUOTE','RANBIN','RANCAU','RANEXP',
+ 'RANGAM','RANGE','RANK','RANNOR','RANPOI','RANTBL','RANTRI',
+ 'RANUNI','REPEAT','RESOLVE','REVERSE','REWIND','RIGHT','ROUND',
+ 'SAVING','SCAN','SDF','SECOND','SIGN','SINH','SIN','SKEWNESS',
+ 'SOUNDEX','SPEDIS','SQRT','STDERR','STD','STFIPS','STNAME',
+ 'STNAMEL','SUBSTR','SUM','SYMGET','SYSGET','SYSMSG','SYSPROD',
+ 'SYSRC','SYSTEM','TANH','TAN','TIMEPART','TIME','TINV','TNONCT',
+ 'TODAY','TRANSLATE','TRANWRD','TRIGAMMA','TRIMN','TRIM','TRUNC',
+ 'UNIFORM','UPCASE','USS','VARFMT','VARINFMT','VARLABEL','VARLEN',
+ 'VARNAME','VARNUM','VARRAYX','VARRAY','VARTYPE','VAR','VERIFY',
+ 'VFORMATX','VFORMATDX','VFORMATD','VFORMATNX','VFORMATN',
+ 'VFORMATWX','VFORMATW','VFORMAT','VINARRAYX','VINARRAY',
+ 'VINFORMATX','VINFORMATDX','VINFORMATD','VINFORMATNX','VINFORMATN',
+ 'VINFORMATWX','VINFORMATW','VINFORMAT','VLABELX','VLABEL',
+ 'VLENGTHX','VLENGTH','VNAMEX','VNAME','VTYPEX','VTYPE','WEEKDAY',
+ 'YEAR','YYQ','ZIPFIPS','ZIPNAME','ZIPNAMEL','ZIPSTATE'
+ ),
+ 4 => array(
+ 'ABORT','ADD','ALTER','AND','ARRAY','AS','ATTRIB','BY','CALL',
+ 'CARDS4','CASCADE','CATNAME','CHECK','CONTINUE','CREATE',
+ 'DATALINES4','DELETE','DESCRIBE','DISPLAY','DISTINCT','DM','DROP',
+ 'ENDSAS','FILE','FOOTNOTE','FOREIGN','FORMAT','FROM',
+ 'GOTO','GROUP','HAVING','IN','INFILE','INFORMAT',
+ 'INSERT','INTO','KEEP','KEY','LABEL','LEAVE',
+ 'LIKE','LINK','LIST','LOSTCARD','MERGE','MESSAGE','MISSING',
+ 'MODIFY','MSGTYPE','NOT','NULL','ON','OPTIONS','OR','ORDER',
+ 'OUTPUT','PAGE','PRIMARY','REDIRECT','REFERENCES','REMOVE',
+ 'RENAME','REPLACE','RESET','RESTRICT','RETAIN','RETURN','SELECT',
+ 'SET','SKIP','STARTSAS','STOP','SYSTASK','TABLE','TITLE','UNIQUE',
+ 'UPDATE','VALIDATE','VIEW','WAITSAS','WHERE','WINDOW','X'
+ ),
+ 5 => array(
+ 'DO','ELSE','END','IF','THEN','UNTIL','WHILE'
+ ),
+ 6 => array(
+ 'RUN','QUIT','DATA'
+ ),
+ 7 => array(
+ 'ERROR'
+ ),
+ 8 => array(
+ 'WARNING'
+ ),
+ 9 => array(
+ 'NOTE'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ 9 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #0000ff;',
+ 4 => 'color: #0000ff;',
+ 5 => 'color: #0000ff;',
+ 6 => 'color: #000080; font-weight: bold;',
+ 7 => 'color: #ff0000;',
+ 8 => 'color: #00ff00;',
+ 9 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+// 1 => 'color: #006400; font-style: italic;',
+ 'MULTI' => 'color: #006400; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #a020f0;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #2e8b57; font-weight: bold;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff; font-weight: bold;',
+ 1 => 'color: #000080; font-weight: bold;',
+ 2 => 'color: #006400; font-style: italic;',
+ 3 => 'color: #006400; font-style: italic;',
+ 4 => 'color: #006400; font-style: italic;',
+ 5 => 'color: #ff0000; font-weight: bold;',
+ 6 => 'color: #00ff00; font-style: italic;',
+ 7 => 'color: #0000ff; font-style: normal;',
+ 8 => 'color: #b218b2; font-weight: bold;',
+ 9 => 'color: #b218b2; font-weight: bold;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => '',
+ 9 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => "&amp;[a-zA-Z_][a-zA-Z0-9_]*",
+ 1 => array(//Procedures
+ GESHI_SEARCH => '(^\\s*)(PROC \\w+)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 2 => array(
+ GESHI_SEARCH => '(^\\s*)(\\*.*;)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 3 => array(
+ GESHI_SEARCH => '(.*;\\s*)(\\*.*;)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 4 => array(
+ GESHI_SEARCH => '(^\\s*)(%\\*.*;)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 5 => array(//Error messages
+ GESHI_SEARCH => '(^ERROR.*)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 6 => array(//Warning messages
+ GESHI_SEARCH => '(^WARNING.*)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 7 => array(//Notice messages
+ GESHI_SEARCH => '(^NOTE.*)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'im',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 8 => array(
+ GESHI_SEARCH => '(^\\s*)(CARDS.*)(^\\s*;\\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'sim',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+ 9 => array(
+ GESHI_SEARCH => '(^\\s*)(DATALINES.*)(^\\s*;\\s*$)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'sim',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php
new file mode 100644
index 000000000..0eae52d92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php
@@ -0,0 +1,122 @@
+<?php
+/*************************************************************************************
+ * scala.php
+ * ----------
+ * Author: Franco Lombardo (franco@francolombardo.net)
+ * Copyright: (c) 2008 Franco Lombardo, Benny Baumann
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/02/08
+ *
+ * Scala language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/02/08 (1.0.7.22)
+ * - First Release
+ *
+ * TODO (updated 2007/04/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Scala',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abstract', 'case', 'catch', 'class', 'def',
+ 'do', 'else', 'extends', 'false', 'final',
+ 'finally', 'for', 'forSome', 'if', 'implicit',
+ 'import', 'match', 'new', 'null', 'object',
+ 'override', 'package', 'private', 'protected', 'requires',
+ 'return', 'sealed', 'super', 'this', 'throw',
+ 'trait', 'try', 'true', 'type', 'val',
+ 'var', 'while', 'with', 'yield'
+ ),
+ 2 => array(
+ 'void', 'double', 'int', 'boolean', 'byte', 'short', 'long', 'char', 'float'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '*', '&', '%', '!', ';', '<', '>', '?',
+ '_', ':', '=', '=>', '<<:',
+ '<%', '>:', '#', '@'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff; font-weight: bold;',
+ 2 => 'color: #9999cc; font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ 1=> 'color: #008000; font-style: italic;',
+ 'MULTI' => 'color: #00ff00; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #0000ff; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #F78811;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #6666FF;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #F78811;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #000000;',
+ 2 => 'color: #000000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000080;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://scala-lang.org',
+ 2 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php
new file mode 100644
index 000000000..1fffcb248
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php
@@ -0,0 +1,170 @@
+<?php
+/*************************************************************************************
+ * scheme.php
+ * ----------
+ * Author: Jon Raphaelson (jonraphaelson@gmail.com)
+ * Copyright: (c) 2005 Jon Raphaelson, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * Scheme language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/09/22 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2005/09/22)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Scheme',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array('#|' => '|#'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'abs', 'acos', 'and', 'angle', 'append', 'appply', 'approximate',
+ 'asin', 'assoc', 'assq', 'assv', 'atan',
+
+ 'begin', 'boolean?', 'bound-identifier=?',
+
+ 'caar', 'caddr', 'cadr', 'call-with-current-continuation',
+ 'call-with-input-file', 'call-with-output-file', 'call/cc', 'car',
+ 'case', 'catch', 'cdddar', 'cddddr', 'cdr', 'ceiling', 'char->integer',
+ 'char-alphabetic?', 'char-ci<=?', 'char-ci<?', 'char-ci?', 'char-ci>=?',
+ 'char-ci>?', 'char-ci=?', 'char-downcase', 'char-lower-case?',
+ 'char-numeric', 'char-ready', 'char-ready?', 'char-upcase',
+ 'char-upper-case?', 'char-whitespace?', 'char<=?', 'char<?', 'char=?',
+ 'char>=?', 'char>?', 'char?', 'close-input-port', 'close-output-port',
+ 'complex?', 'cond', 'cons', 'construct-identifier', 'cos',
+ 'current-input-port', 'current-output-port',
+
+ 'd', 'define', 'define-syntax', 'delay', 'denominator', 'display', 'do',
+
+ 'e', 'eof-object?', 'eq?', 'equal?', 'eqv?', 'even?', 'exact->inexact',
+ 'exact?', 'exp', 'expt', 'else',
+
+ 'f', 'floor', 'for-each', 'force', 'free-identifer=?',
+
+ 'gcd', 'gen-counter', 'gen-loser', 'generate-identifier',
+
+ 'identifier->symbol', 'identifier', 'if', 'imag-part', 'inexact->exact',
+ 'inexact?', 'input-port?', 'integer->char', 'integer?', 'integrate-system',
+
+ 'l', 'lambda', 'last-pair', 'lcm', 'length', 'let', 'let*', 'letrec',
+ 'list', 'list->string', 'list->vector', 'list-ref', 'list-tail', 'list?',
+ 'load', 'log',
+
+ 'magnitude', 'make-polar', 'make-promise', 'make-rectangular',
+ 'make-string', 'make-vector', 'map', 'map-streams', 'max', 'member',
+ 'memq', 'memv', 'min', 'modulo',
+
+ 'negative', 'newline', 'nil', 'not', 'null?', 'number->string', 'number?',
+ 'numerator',
+
+ 'odd?', 'open-input-file', 'open-output-file', 'or', 'output-port',
+
+ 'pair?', 'peek-char', 'positive?', 'procedure?',
+
+ 'quasiquote', 'quote', 'quotient',
+
+ 'rational', 'rationalize', 'read', 'read-char', 'real-part', 'real?',
+ 'remainder', 'return', 'reverse',
+
+ 's', 'sequence', 'set!', 'set-char!', 'set-cdr!', 'sin', 'sqrt', 'string',
+ 'string->list', 'string->number', 'string->symbol', 'string-append',
+ 'string-ci<=?', 'string-ci<?', 'string-ci=?', 'string-ci>=?',
+ 'string-ci>?', 'string-copy', 'string-fill!', 'string-length',
+ 'string-ref', 'string-set!', 'string<=?', 'string<?', 'string=?',
+ 'string>=?', 'string>?', 'string?', 'substring', 'symbol->string',
+ 'symbol?', 'syntax', 'syntax-rules',
+
+ 't', 'tan', 'template', 'transcript-off', 'transcript-on', 'truncate',
+
+ 'unquote', 'unquote-splicing', 'unwrap-syntax',
+
+ 'vector', 'vector->list', 'vector-fill!', 'vector-length', 'vector-ref',
+ 'vector-set!', 'vector?',
+
+ 'with-input-from-file', 'with-output-to-file', 'write', 'write-char',
+
+ 'zero?'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '!', '%', '^', '&', '/','+','-','*','=','<','>',';','|'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php
new file mode 100644
index 000000000..3d66d810a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php
@@ -0,0 +1,295 @@
+<?php
+/*************************************************************************************
+ * scilab.php
+ * --------
+ * Author: Christophe David (geshi@christophedavid.org)
+ * Copyright: (c) 2008 Christophe David (geshi@christophedavid.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/08/04
+ *
+ * SciLab language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/08/25 (1.0.8.1)
+ * - Corrected with the help of Benny Baumann (BenBE@geshi.org)
+ * 2008/08/04 (0.0.0.1)
+ * - First beta Release - known problem with ' used to transpose matrices considered as start of strings
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'SciLab',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ 2 => "/(?<=\)|\]|\w)'/"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'HARDQUOTE' => array("'", "'"),
+ 'HARDESCAPE' => array(),
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'if', 'else', 'elseif', 'end', 'select', 'case', 'for', 'while', 'break'
+ ),
+ 2 => array(
+ 'STDIN', 'STDOUT', 'STDERR',
+ '%i', '%pi', '%e', '%eps', '%nan', '%inf', '%s', '%t', '%f',
+ 'usual', 'polynomial', 'boolean', 'character', 'function', 'rational', 'state-space',
+ 'sparse', 'boolean sparse', 'list', 'tlist', 'library', 'endfunction'
+ ),
+ 3 => array(
+ '%asn', '%helps', '%k', '%sn', 'abcd', 'abinv', 'abort', 'about', 'About_M2SCI_tools',
+ 'abs', 'acos', 'acosh', 'acoshm', 'acosm', 'AdCommunications', 'add_demo', 'add_edge',
+ 'add_help_chapter', 'add_node', 'add_palette', 'addcolor', 'addf', 'addinter', 'addmenu',
+ 'adj_lists', 'adj2sp', 'aff2ab', 'alufunctions', 'amell', 'analpf', 'analyze', 'and',
+ 'ans', 'apropos', 'arc_graph', 'arc_number', 'arc_properties', 'argn', 'arhnk', 'arl2',
+ 'arma', 'arma2p', 'armac', 'armax', 'armax1', 'arsimul', 'artest', 'articul', 'ascii',
+ 'asciimat', 'asin', 'asinh', 'asinhm', 'asinm', 'assignation', 'atan', 'atanh', 'atanhm',
+ 'atanm', 'augment', 'auread', 'auwrite', 'axes_properties', 'axis_properties', 'backslash',
+ 'balanc', 'balreal', 'bandwr', 'banner','bar', 'barh', 'barhomogenize', 'basename', 'bdiag',
+ 'beep', 'besselh', 'besseli', 'besselj', 'besselk', 'bessely', 'best_match', 'beta','bezout',
+ 'bifish', 'bilin', 'binomial', 'black', 'bloc2exp', 'bloc2ss', 'bode', 'bool2s',
+ 'boucle', 'brackets', 'browsevar', 'bsplin3val', 'bstap', 'buttmag', 'buttondialog',
+ 'bvode', 'bvodeS', 'c_link', 'cainv', 'calendar', 'calerf', 'calfrq', 'call', 'canon', 'casc',
+ 'cat', 'catch', 'ccontrg', 'cd', 'cdfbet', 'cdfbin', 'cdfchi', 'cdfchn', 'cdff', 'cdffnc',
+ 'cdfgam', 'cdfnbn', 'cdfnor', 'cdfpoi', 'cdft', 'ceil', 'cell', 'cell2mat', 'cellstr', 'center',
+ 'cepstrum', 'chain_struct', 'chaintest', 'champ', 'champ_properties', 'champ1', 'char', 'chart',
+ 'chartooem', 'chdir', 'cheb1mag', 'cheb2mag', 'check_graph', 'chepol', 'chfact', 'chol', 'chsolve',
+ 'circuit', 'classmarkov', 'clc', 'clean', 'clear', 'clear_pixmap', 'clearfun', 'clearglobal','clf',
+ 'clipboard', 'close', 'cls2dls', 'cmb_lin', 'cmndred', 'cmoment', 'code2str', 'coeff', 'coff', 'coffg',
+ 'colcomp', 'colcompr', 'colinout', 'colon', 'color', 'color_list', 'colorbar', 'colordef', 'colormap',
+ 'colregul', 'comma', 'comments', 'comp', 'companion', 'comparison', 'Compound_properties', 'con_nodes',
+ 'cond', 'config', 'configure_msvc', 'conj', 'connex', 'console', 'cont_frm', 'cont_mat', 'Contents',
+ 'continue', 'contour', 'contour2d', 'contour2di', 'contourf', 'contr', 'contract_edge', 'contrss',
+ 'convex_hull', 'convol', 'convstr', 'copfac', 'copy', 'corr', 'correl', 'cos', 'cosh', 'coshm',
+ 'cosm', 'cotg', 'coth', 'cothm', 'covar', 'create_palette', 'cshep2d', 'csim', 'cspect', 'Cste',
+ 'ctr_gram', 'cumprod', 'cumsum', 'cycle_basis', 'czt', 'dasrt', 'dassl', 'datafit', 'date', 'datenum',
+ 'datevec', 'dbphi', 'dcf', 'ddp', 'debug', 'dec2hex', 'deff', 'definedfields', 'degree', 'delbpt',
+ 'delete', 'delete_arcs', 'delete_nodes', 'delip', 'delmenu', 'demoplay', 'denom', 'derivat', 'derivative',
+ 'des2ss', 'des2tf', 'det', 'determ', 'detr', 'detrend', 'dft', 'dhinf', 'dhnorm', 'diag', 'diary',
+ 'diff', 'diophant', 'dir', 'dirname', 'disp', 'dispbpt', 'dispfiles', 'dlgamma', 'dnaupd', 'do', 'dot',
+ 'double', 'dragrect', 'draw', 'drawaxis', 'drawlater', 'drawnow', 'driver', 'dsaupd', 'dscr',
+ 'dsearch', 'dsimul', 'dt_ility', 'dtsi', 'edge_number', 'edit', 'edit_curv', 'edit_error',
+ 'edit_graph', 'edit_graph_menus', 'editvar', 'eigenmarkov', 'ell1mag',
+ 'empty', 'emptystr', 'eqfir', 'eqiir', 'equal', 'Equal', 'equil', 'equil1',
+ 'ereduc', 'erf', 'erfc', 'erfcx', 'errbar', 'errcatch', 'errclear', 'error', 'error_table', 'etime',
+ 'eval', 'eval_cshep2d', 'eval3d', 'eval3dp', 'evans', 'evstr', 'excel2sci', 'exec', 'execstr', 'exists',
+ 'exit', 'exp', 'expm', 'external', 'extraction', 'eye', 'fac3d', 'factorial', 'factors', 'faurre', 'fchamp',
+ 'fcontour', 'fcontour2d', 'fec', 'fec_properties', 'feedback', 'feval', 'ffilt', 'fft', 'fft2', 'fftshift',
+ 'fgrayplot', 'figure', 'figure_properties', 'figure_style', 'file', 'fileinfo', 'fileparts', 'filter', 'find',
+ 'find_freq', 'find_path', 'findABCD', 'findAC', 'findBD', 'findBDK', 'findm', 'findmsvccompiler', 'findobj',
+ 'findR', 'findx0BD', 'firstnonsingleton', 'fit_dat', 'fix', 'floor', 'flts', 'foo', 'format',
+ 'formatman', 'fort', 'fourplan', 'fplot2d', 'fplot3d', 'fplot3d1', 'fprintf', 'fprintfMat', 'frep2tf',
+ 'freq', 'freson', 'frexp', 'frfit', 'frmag', 'fscanf', 'fscanfMat', 'fsfirlin', 'fsolve', 'fspecg',
+ 'fstabst', 'fstair', 'ftest', 'ftuneq', 'full', 'fullfile', 'fullrf', 'fullrfk', 'fun2string', 'Funcall',
+ 'funcprot', 'functions', 'funptr', 'fusee', 'G_make', 'g_margin', 'gainplot', 'gamitg',
+ 'gamma', 'gammaln', 'gca', 'gcare', 'gcd', 'gce', 'gcf', 'gda', 'gdf', 'gen_net', 'genfac3d', 'genlib',
+ 'genmarkov', 'geom3d', 'geomean', 'get', 'get_contents_infer', 'get_function_path', 'getcolor', 'getcwd',
+ 'getd', 'getdate', 'getenv', 'getf', 'getfield', 'getfont', 'gethistory', 'getio', 'getlinestyle',
+ 'getlongpathname', 'getmark', 'getmemory', 'getos', 'getpid', 'getscilabkeywords', 'getshell',
+ 'getshortpathname', 'getsymbol', 'getvalue', 'getversion', 'gfare', 'gfrancis', 'girth', 'givens',
+ 'glever', 'glist', 'global', 'GlobalProperty', 'glue', 'gmres', 'gpeche', 'gr_menu', 'graduate', 'grand',
+ 'graph_2_mat', 'graph_center', 'graph_complement', 'graph_diameter', 'graph_power', 'graph_simp', 'graph_sum',
+ 'graph_union', 'graphic', 'Graphics', 'graphics_entities', 'graph-list', 'graycolormap', 'grayplot',
+ 'grayplot_properties', 'graypolarplot', 'great', 'grep', 'group', 'gschur', 'gsort', 'gspec', 'gstacksize',
+ 'gtild', 'h_cl', 'h_inf', 'h_inf_st', 'h_norm', 'h2norm', 'halt', 'hamilton', 'hank', 'hankelsv', 'harmean',
+ 'hat', 'havewindow', 'head_comments', 'help', 'help_skeleton', 'hermit', 'hess', 'hex2dec', 'hilb', 'hinf',
+ 'hist3d', 'histplot', 'horner', 'host', 'hotcolormap', 'householder', 'hrmt', 'hsv2rgb', 'hsvcolormap',
+ 'htrianr', 'hypermat', 'hypermatrices', 'iconvert', 'ieee', 'ifft', 'iir', 'iirgroup', 'iirlp',
+ 'ilib_build', 'ilib_compile', 'ilib_for_link', 'ilib_gen_gateway', 'ilib_gen_loader', 'ilib_gen_Make',
+ 'im_inv', 'imag', 'impl', 'imrep2ss', 'imult', 'ind2sub', 'Infer', 'inistate', 'input', 'insertion', 'int',
+ 'int16', 'int2d', 'int32', 'int3d', 'int8', 'intc', 'intdec', 'integrate', 'interp', 'interp1', 'interp2d',
+ 'interp3d', 'interpln', 'intersci', 'intersect', 'intg', 'intl', 'intppty', 'intsplin', 'inttrap', 'inttype',
+ 'inv', 'inv_coeff', 'invr', 'invsyslin', 'iqr', 'is_connex', 'iscellstr', 'isdef', 'isdir', 'isempty',
+ 'isequal', 'isequalbitwise', 'iserror', 'isglobal', 'isinf', 'isnan', 'isoview', 'isreal', 'javasci',
+ 'jetcolormap', 'jmat', 'justify', 'kalm', 'karmarkar', 'kernel', 'keyboard', 'knapsack', 'kpure', 'krac2',
+ 'kron', 'kroneck', 'label_properties', 'labostat', 'LANGUAGE', 'lasterror', 'lattn', 'lattp', 'lcf', 'lcm',
+ 'lcmdiag', 'ldiv', 'ldivf', 'leastsq', 'left', 'legend', 'legend_properties', 'legendre', 'legends', 'length',
+ 'leqr', 'less', 'lev', 'levin', 'lex_sort', 'lft', 'lgfft', 'lib', 'lin', 'lin2mu', 'lindquist',
+ 'line_graph', 'linear_interpn', 'lines', 'LineSpec', 'linf', 'linfn', 'link', 'linmeq', 'linpro', 'linsolve',
+ 'linspace', 'listfiles', 'listvarinfile', 'lmisolver', 'lmitool', 'load', 'load_graph', 'loadhistory',
+ 'loadmatfile', 'loadplots', 'loadwave', 'locate', 'log', 'log10', 'log1p', 'log2', 'logm', 'logspace',
+ 'lotest', 'lqe', 'lqg', 'lqg_ltr', 'lqg2stan', 'lqr', 'ls', 'lsq', 'lsq_splin', 'lsqrsolve', 'lsslist',
+ 'lstcat', 'lstsize', 'ltitr', 'lu', 'ludel', 'lufact', 'luget', 'lusolve', 'lyap', 'm_circle', 'm2scideclare',
+ 'macglov', 'macr2lst', 'macr2tree', 'macro', 'macrovar', 'mad', 'make_graph', 'make_index', 'makecell', 'man',
+ 'manedit', 'mapsound', 'markp2ss', 'mat_2_graph', 'matfile2sci', 'Matlab-Scilab_character_strings', 'Matplot',
+ 'Matplot_properties', 'Matplot1', 'matrices', 'matrix', 'max', 'max_cap_path', 'max_clique', 'max_flow',
+ 'maxi', 'mcisendstring', 'mclearerr', 'mclose', 'mdelete', 'mean', 'meanf', 'median', 'menus', 'meof',
+ 'merror', 'mese', 'mesh', 'mesh2d', 'meshgrid', 'mfft', 'mfile2sci', 'mfprintf', 'mfscanf', 'mget', 'mgeti',
+ 'mgetl', 'mgetstr', 'milk_drop', 'min', 'min_lcost_cflow', 'min_lcost_flow1', 'min_lcost_flow2',
+ 'min_qcost_flow', 'min_weight_tree', 'mine', 'mini', 'minreal', 'minss', 'minus', 'mkdir', 'mlist', 'mode',
+ 'modulo', 'moment', 'mopen', 'move', 'mprintf', 'mps2linpro', 'mput', 'mputl', 'mputstr', 'mrfit', 'mscanf',
+ 'msd', 'mseek', 'msprintf', 'msscanf', 'mstr2sci', 'mtell', 'mtlb_0', 'mtlb_a', 'mtlb_all', 'mtlb_any',
+ 'mtlb_axis', 'mtlb_beta', 'mtlb_box', 'mtlb_close', 'mtlb_colordef', 'mtlb_conv', 'mtlb_cumprod', 'mtlb_cumsum',
+ 'mtlb_dec2hex', 'mtlb_delete', 'mtlb_diag', 'mtlb_diff', 'mtlb_dir', 'mtlb_double', 'mtlb_e', 'mtlb_echo',
+ 'mtlb_eig', 'mtlb_eval', 'mtlb_exist', 'mtlb_eye', 'mtlb_false', 'mtlb_fft', 'mtlb_fftshift', 'mtlb_find',
+ 'mtlb_findstr', 'mtlb_fliplr', 'mtlb_fopen', 'mtlb_format', 'mtlb_fprintf', 'mtlb_fread', 'mtlb_fscanf',
+ 'mtlb_full', 'mtlb_fwrite', 'mtlb_grid', 'mtlb_hold', 'mtlb_i', 'mtlb_ifft', 'mtlb_imp', 'mtlb_int16',
+ 'mtlb_int32', 'mtlb_int8', 'mtlb_is', 'mtlb_isa', 'mtlb_isfield', 'mtlb_isletter', 'mtlb_isspace', 'mtlb_l',
+ 'mtlb_legendre', 'mtlb_linspace', 'mtlb_load', 'mtlb_logic', 'mtlb_logical', 'mtlb_lower', 'mtlb_max',
+ 'mtlb_min', 'mtlb_mode', 'mtlb_more', 'mtlb_num2str', 'mtlb_ones', 'mtlb_plot', 'mtlb_prod', 'mtlb_rand',
+ 'mtlb_randn', 'mtlb_rcond', 'mtlb_realmax', 'mtlb_realmin', 'mtlb_repmat', 'mtlb_s', 'mtlb_save',
+ 'mtlb_setstr', 'mtlb_size', 'mtlb_sort', 'mtlb_sparse', 'mtlb_strcmp', 'mtlb_strcmpi', 'mtlb_strfind',
+ 'mtlb_strrep', 'mtlb_sum', 'mtlb_t', 'mtlb_toeplitz', 'mtlb_tril', 'mtlb_triu', 'mtlb_true', 'mtlb_uint16',
+ 'mtlb_uint32', 'mtlb_uint8', 'mtlb_upper', 'mtlb_zeros', 'mu2lin', 'mucomp', 'mulf', 'mvvacov', 'name2rgb',
+ 'names', 'nancumsum', 'nand2mean', 'nanmax', 'nanmean', 'nanmeanf', 'nanmedian', 'nanmin', 'nanstdev',
+ 'nansum', 'narsimul', 'NDcost', 'ndgrid', 'ndims', 'nearfloat', 'nehari', 'neighbors', 'netclose', 'netwindow',
+ 'netwindows', 'new', 'newaxes', 'newest', 'newfun', 'nextpow2', 'nf3d', 'nfreq', 'nlev', 'nnz', 'node_number',
+ 'nodes_2_path', 'nodes_degrees', 'noisegen', 'norm', 'not', 'null', 'number_properties', 'numdiff', 'numer',
+ 'nyquist', 'object_editor', 'obs_gram', 'obscont', 'obscont1', 'observer', 'obsv_mat', 'obsvss', 'ode',
+ 'ode_discrete', 'ode_optional_output', 'ode_root', 'odedc', 'odeoptions', 'oemtochar', 'old_style',
+ 'oldbesseli', 'oldbesselj', 'oldbesselk', 'oldbessely', 'oldload', 'oldplot', 'oldsave', 'ones',
+ 'Operation', 'optim', 'or', 'orth', 'overloading', 'p_margin', 'param3d', 'param3d_properties',
+ 'param3d1', 'paramfplot2d', 'parents', 'parrot', 'part', 'path_2_nodes', 'pathconvert', 'pause', 'pbig',
+ 'pca', 'pcg', 'pdiv', 'pen2ea', 'pencan', 'penlaur', 'percent', 'perctl', 'perfect_match', 'perl',
+ 'perms', 'permute', 'pertrans', 'pfss', 'phasemag', 'phc', 'pie', 'pinv', 'pipe_network', 'playsnd', 'plot',
+ 'plot_graph', 'plot2d', 'plot2d_old_version', 'plot2d1', 'plot2d2', 'plot2d3', 'plot2d4', 'plot3d',
+ 'plot3d_old_version', 'plot3d1', 'plot3d2', 'plot3d3', 'plotframe', 'plotprofile', 'plus', 'plzr',
+ 'pmodulo', 'pol2des', 'pol2str', 'pol2tex', 'polar', 'polarplot', 'polfact', 'poly', 'polyline_properties',
+ 'portr3d', 'portrait', 'power', 'ppol', 'prbs_a', 'predecessors', 'predef', 'print', 'printf',
+ 'printf_conversion', 'printing', 'printsetupbox', 'prod', 'profile', 'progressionbar', 'proj', 'projsl',
+ 'projspec', 'psmall', 'pspect', 'pvm', 'pvm_addhosts', 'pvm_barrier', 'pvm_bcast', 'pvm_bufinfo', 'pvm_config',
+ 'pvm_delhosts', 'pvm_error', 'pvm_exit', 'pvm_f772sci', 'pvm_get_timer', 'pvm_getinst', 'pvm_gettid',
+ 'pvm_gsize', 'pvm_halt', 'pvm_joingroup', 'pvm_kill', 'pvm_lvgroup', 'pvm_mytid', 'pvm_parent', 'pvm_probe',
+ 'pvm_recv', 'pvm_reduce', 'pvm_sci2f77', 'pvm_send', 'pvm_set_timer', 'pvm_spawn', 'pvm_spawn_independent',
+ 'pvm_start', 'pvm_tasks', 'pvm_tidtohost', 'pvmd3', 'pwd', 'qassign', 'qld', 'qmr', 'qr', 'quapro', 'quart',
+ 'quaskro', 'quit', 'quote', 'rand', 'randpencil', 'range', 'rank', 'rankqr', 'rat', 'rcond',
+ 'rdivf', 'read', 'read4b', 'readb', 'readc_', 'readmps', 'readxls', 'real', 'realtime', 'realtimeinit',
+ 'rectangle_properties', 'recur', 'reglin', 'regress', 'remez', 'remezb', 'repfreq', 'replot', 'resethistory',
+ 'residu', 'resume', 'return', 'rgb2name', 'ric_desc', 'ricc', 'riccati', 'rlist', 'rmdir', 'roots', 'rotate',
+ 'round', 'routh_t', 'rowcomp', 'rowcompr', 'rowinout', 'rowregul', 'rowshuff', 'rpem', 'rref', 'rtitr',
+ 'rubberbox', 'salesman', 'sample', 'samplef', 'samwr', 'save', 'save_format', 'save_graph', 'savehistory',
+ 'savematfile', 'savewave', 'sca', 'scaling', 'scanf', 'scanf_conversion', 'scf', 'schur', 'sci_files',
+ 'sci2exp', 'sci2for', 'sci2map', 'sciargs', 'SciComplex', 'SciComplexArray', 'SciDouble', 'SciDoubleArray',
+ 'scilab', 'Scilab', 'ScilabEval', 'scilink', 'scipad', 'SciString', 'SciStringArray', 'sd2sci', 'sda', 'sdf',
+ 'secto3d', 'segs_properties', 'semi', 'semicolon', 'semidef', 'sensi', 'set', 'set_posfig_dim',
+ 'setbpt', 'setdiff', 'setenv', 'seteventhandler', 'setfield', 'sethomedirectory', 'setlanguage', 'setmenu',
+ 'sfact', 'Sfgrayplot', 'Sgrayplot', 'sgrid', 'shortest_path', 'show_arcs', 'show_graph', 'show_nodes',
+ 'show_pixmap', 'showprofile', 'sident', 'sign', 'Signal', 'signm', 'simp', 'simp_mode', 'sin', 'sinc',
+ 'sincd', 'sinh', 'sinhm', 'sinm', 'size', 'slash', 'sleep', 'sm2des', 'sm2ss', 'smooth', 'solve',
+ 'sorder', 'sort', 'sound', 'soundsec', 'sp2adj', 'spaninter', 'spanplus', 'spantwo', 'spchol',
+ 'spcompack', 'spec', 'specfact', 'speye', 'spget', 'splin', 'splin2d', 'splin3d', 'split_edge', 'spones',
+ 'sprand', 'sprintf', 'spzeros', 'sqroot', 'sqrt', 'sqrtm', 'square', 'squarewave', 'srfaur', 'srkf', 'ss2des',
+ 'ss2ss', 'ss2tf', 'sscanf', 'sskf', 'ssprint', 'ssrand', 'st_deviation', 'st_ility', 'stabil', 'stacksize',
+ 'star', 'startup', 'stdev', 'stdevf', 'str2code', 'strange', 'strcat', 'strindex', 'string', 'stringbox',
+ 'strings', 'stripblanks', 'strong_con_nodes', 'strong_connex', 'strsplit', 'strsubst', 'struct', 'sub2ind',
+ 'subf', 'subgraph', 'subplot', 'successors', 'sum', 'supernode', 'surf', 'surface_properties', 'sva',
+ 'svd', 'svplot', 'sylm', 'sylv', 'symbols', 'sysconv', 'sysdiag', 'sysfact', 'syslin', 'syssize', 'system',
+ 'systems', 'systmat', 'tabul', 'tan', 'tangent', 'tanh', 'tanhm', 'tanm', 'TCL_CreateSlave', 'TCL_DeleteInterp',
+ 'TCL_EvalFile', 'TCL_EvalStr', 'TCL_ExistInterp', 'TCL_ExistVar', 'TCL_GetVar', 'TCL_GetVersion', 'TCL_SetVar',
+ 'TCL_UnsetVar', 'TCL_UpVar', 'tdinit', 'testmatrix', 'texprint', 'text_properties', 'tf2des', 'tf2ss', 'then',
+ 'thrownan', 'tic', 'tilda', 'time_id', 'timer', 'title', 'titlepage', 'TK_EvalFile', 'TK_EvalStr', 'tk_getdir',
+ 'tk_getfile', 'TK_GetVar', 'tk_savefile', 'TK_SetVar', 'toc', 'toeplitz', 'tohome', 'tokenpos',
+ 'tokens', 'toolbar', 'toprint', 'trace', 'trans', 'trans_closure', 'translatepaths', 'tree2code', 'trfmod',
+ 'trianfml', 'tril', 'trimmean', 'trisolve', 'triu', 'try', 'trzeros', 'twinkle', 'type', 'Type', 'typename',
+ 'typeof', 'ui_observer', 'uicontrol', 'uimenu', 'uint16', 'uint32', 'uint8', 'ulink', 'unglue', 'union',
+ 'unique', 'unix', 'unix_g', 'unix_s', 'unix_w', 'unix_x', 'unobs', 'unsetmenu', 'unzoom', 'user', 'varargin',
+ 'varargout', 'Variable', 'variance', 'variancef', 'varn', 'vectorfind', 'waitbar', 'warning', 'wavread',
+ 'wavwrite', 'wcenter', 'wfir', 'what', 'where', 'whereami', 'whereis', 'who', 'who_user', 'whos',
+ 'wiener', 'wigner', 'winclose', 'window', 'winlist', 'winopen', 'winqueryreg', 'winsid', 'with_atlas',
+ 'with_gtk', 'with_javasci', 'with_pvm', 'with_texmacs', 'with_tk', 'writb', 'write', 'write4b', 'x_choices',
+ 'x_choose', 'x_dialog', 'x_matrix', 'x_mdialog', 'x_message', 'x_message_modeless', 'xarc', 'xarcs', 'xarrows',
+ 'xaxis', 'xbasc', 'xbasimp', 'xbasr', 'xchange', 'xclea', 'xclear', 'xclick', 'xclip', 'xdel', 'xend',
+ 'xfarc', 'xfarcs', 'xfpoly', 'xfpolys', 'xfrect', 'xget', 'xgetech', 'xgetfile', 'xgetmouse', 'xgraduate',
+ 'xgrid', 'xinfo', 'xinit', 'xlfont', 'xload', 'xls_open', 'xls_read', 'xmltohtml', 'xname', 'xnumb', 'xpause',
+ 'xpoly', 'xpolys', 'xrect', 'xrects', 'xrpoly', 'xs2bmp', 'xs2emf', 'xs2eps', 'xs2fig', 'xs2gif', 'xs2ppm',
+ 'xs2ps', 'xsave', 'xsegs', 'xselect', 'xset', 'xsetech', 'xsetm', 'xstring', 'xstringb', 'xstringl', 'xtape',
+ 'xtitle', 'yulewalk', 'zeropen', 'zeros', 'zgrid', 'zoom_rect', 'zpbutt', 'zpch1', 'zpch2', 'zpell'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '<', '>', '=',
+ '!', '@', '~', '&', '|',
+ '+','-', '*', '/', '%',
+ ',', ';', '?', ':', "'"
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #000000; font-weight: bold;',
+ 3 => 'color: #000066;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #666666; font-style: italic;',
+ 2 => '',
+ 'MULTI' => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;',
+ 'HARD' => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;',
+ 'HARD' => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;',
+ 2 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;',
+ 4 => 'color: #009999;',
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm',
+ 2 => 'http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm',
+ 3 => 'http://www.scilab.org/product/dic-mat-sci/M2SCI_doc.htm'
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '-&gt;',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Variable
+ 0 => '[\\$%@]+[a-zA-Z_][a-zA-Z0-9_]*',
+ //File Descriptor
+ 4 => '&lt;[a-zA-Z_][a-zA-Z0-9_]*&gt;',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php
new file mode 100644
index 000000000..b756df514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php
@@ -0,0 +1,165 @@
+<?php
+/*************************************************************************************
+ * sdlbasic.php
+ * ------------
+ * Author: Roberto Rossi
+ * Copyright: (c) 2005 Roberto Rossi (http://rsoftware.altervista.org)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/08/19
+ *
+ * sdlBasic (http://sdlbasic.sf.net) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2005/08/19 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'sdlBasic',
+ 'COMMENT_SINGLE' => array(1 => "'", 2 => "rem", 3 => "!", 4 => "#"),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'const', 'option', 'explicit', 'qbasic', 'include', 'argc',
+ 'argv', 'command', 'command$', 'run', 'shell', 'os', 'declare',
+ 'sub', 'function', 'return', 'while', 'wend', 'exit', 'end',
+ 'continue', 'if', 'then', 'else', 'elseif',
+ 'select', 'case', 'for', 'each', 'step',
+ 'next', 'to', 'dim', 'shared', 'common', 'lbound', 'bound',
+ 'erase', 'asc', 'chr', 'chr$', 'insert', 'insert$', 'instr', 'lcase',
+ 'lcase$', 'left', 'left$', 'len', 'length', 'ltrim', 'ltrim$', 'mid',
+ 'mid$', 'replace', 'replace$', 'replacesubstr', 'replacesubstr$',
+ 'reverse', 'reverse$', 'right', 'right$', 'rinstr', 'rtrim', 'rtrim$',
+ 'space', 'space$', 'str', 'str$', 'strf', 'strf$', 'string', 'string$',
+ 'tally', 'trim', 'trim$', 'typeof', 'typeof$', 'ucase', 'ucase$', 'val',
+ 'abs', 'acos', 'andbit', 'asin', 'atan', 'bitwiseand', 'bitwiseor',
+ 'bitwisexor', 'cos', 'exp', 'fix', 'floor', 'frac', 'hex', 'hex$', 'int',
+ 'log', 'min', 'max', 'orbit', 'randomize', 'rnd', 'round', 'sgn', 'sin',
+ 'sqr', 'tan', 'xorbit', 'open', 'as', 'file', 'input', 'close', 'output',
+ 'append', 'eof', 'fileexists', 'filecopy', 'filemove', 'filerename',
+ 'freefile', 'kill', 'loc', 'lof', 'readbyte', 'rename', 'seek',
+ 'writebyte', 'chdir', 'dir', 'dir$', 'direxists', 'dirfirst', 'dirnext',
+ 'mkdir', 'rmdir', 'print', 'date', 'date$', 'time', 'time$', 'ticks',
+ 'data', 'read', 'reservebank', 'freebank', 'copybank', 'loadbank',
+ 'savebank', 'setbank', 'sizebank', 'poke', 'doke', 'loke', 'peek', 'deek',
+ 'leek', 'memcopy', 'setdisplay', 'setcaption', 'caption', 'displaywidth',
+ 'displayheight', 'displaybpp', 'screen', 'directscreen', 'screenopen',
+ 'screenclose', 'screenclone', 'screencopy', 'screenfade', 'screenfadein',
+ 'screencrossfade', 'screenalpha', 'screenlock', 'screenunlock',
+ 'screenrect', 'xscreenrect', 'yscreenrect', 'wscreenrect', 'hscreenrect',
+ 'flagscreenrect', 'screenwidth', 'screenheight', 'offset', 'xoffset',
+ 'yoffset', 'cls', 'screenswap', 'autoback', 'setautoback',
+ 'dualplayfield', 'waitvbl', 'fps', 'rgb', 'enablepalette', 'color',
+ 'palette', 'colorcycling', 'ink', 'point', 'dot', 'plot', 'line', 'box',
+ 'bar', 'circle', 'fillcircle', 'ellipse', 'fillellipse', 'paint',
+ 'loadimage', 'saveimage', 'loadsound', 'savesound', 'loadmusic',
+ 'hotspot', 'setcolorkey', 'imageexists', 'imagewidth', 'imageheight',
+ 'deleteimage', 'copyimage', 'setalpha', 'zoomimage', 'rotateimage',
+ 'rotozoomimage', 'blt', 'pastebob', 'pasteicon', 'grab', 'spriteclip',
+ 'sprite', 'deletesprite', 'xsprite', 'ysprite', 'spritewidth',
+ 'spriteheight', 'frsprite', 'livesprite', 'spritehit', 'autoupdatesprite',
+ 'updatesprite', 'setbob', 'bob', 'deletebob', 'xbob', 'ybob', 'bobwidth',
+ 'bobheight', 'frbob', 'livebob', 'bobhit', 'autoupdatebob', 'updatebob',
+ 'text', 'setfont', 'textrender', 'pen', 'paper', 'prints', 'locate',
+ 'atx', 'aty', 'curson', 'cursoff', 'inputs', 'zoneinputs',
+ 'isenabledsound', 'soundexists', 'deletesound', 'copysound',
+ 'musicexists', 'playsound', 'volumesound', 'stopsound', 'pausesound',
+ 'resumesound', 'vumetersound', 'positionsound', 'soundchannels',
+ 'playmusic', 'positionmusic', 'stopmusic', 'fademusic', 'pausemusic',
+ 'resumemusic', 'rewindmusic', 'volumemusic', 'speedmusic', 'numdrivescd',
+ 'namecd', 'getfreecd', 'opencd', 'indrivecd', 'trackscd', 'curtrackcd',
+ 'curframecd', 'playcd', 'playtrackscd',
+ 'pausecd', 'resumecd', 'stopcd', 'ejectcd', 'closecd', 'tracktypecd',
+ 'tracklengthcd', 'trackoffsetcd', 'key', 'inkey', 'waitkey', 'xmouse',
+ 'ymouse', 'xmousescreen', 'ymousescreen', 'bmouse', 'changemouse',
+ 'locatemouse', 'mouseshow', 'mousehide', 'mousezone', 'numjoysticks',
+ 'namejoystick', 'numaxesjoystick', 'numballsjoystick', 'numhatsjoystick',
+ 'numbuttonsjoystick', 'getaxisjoystick', 'gethatjoystick',
+ 'getbuttonjoystick', 'xgetballjoystick', 'ygetballjoystick', 'joy',
+ 'bjoy', 'wait', 'timer', 'isenabledsock', 'getfreesock', 'opensock',
+ 'acceptsock', 'isserverready', 'connectsock', 'connectionreadysock',
+ 'isclientready', 'losesock', 'peeksock', 'readsock', 'readbytesock',
+ 'readlinesock', 'writesock', 'writebytesock', 'writelinesock',
+ 'getremoteip', 'getremoteport', 'getlocalip'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080;',
+ 2 => 'color: #808080;',
+ 3 => 'color: #808080;',
+ 4 => 'color: #808080;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php
new file mode 100644
index 000000000..b4d67cc71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php
@@ -0,0 +1,160 @@
+<?php
+/*************************************************************************************
+ * smalltalk.php
+ * --------
+ * Author: Bananeweizen (Bananeweizen@gmx.de)
+ * Copyright: (c) 2005 Bananeweizen (www.bananeweizen.de)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/03/27
+ *
+ * Smalltalk language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2006-05-24 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * -------------------------
+ * * recognize nested array symbols correctly
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Smalltalk',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('"' => '"'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'"),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array('self','super','true','false','nil')
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '=' , ':=', '(', ')', '#'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #7f007f;'
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #007f00; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => ''
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #7f0000;'
+ ),
+ 'METHODS' => array(
+ 0 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;',
+ 1 => 'color: #7f0000;',
+ 2 => 'color: #7f0000;',
+ 3 => 'color: #00007f;',
+ 4 => 'color: #7f007f;',
+ 5 => 'color: #00007f;',
+ 6 => 'color: #00007f;'
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => array(
+ GESHI_SEARCH => '([^a-zA-Z0-9_#<])([A-Z]+[a-zA-Z0-9_]*)(?!>)', //class names
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 1 => array(
+ GESHI_SEARCH => '(#+)([a-zA-Z0-9_]+)', //symbols
+ GESHI_REPLACE => '\\1\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 2 => array(
+ GESHI_SEARCH => '(#\s*\([^)]*\))', //array symbols
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 3 => array(
+ GESHI_SEARCH => '<PIPE>([a-zA-Z0-9_\s]+)<PIPE>', //temporary variables
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '|',
+ GESHI_AFTER => '|'
+ ),
+ 4 => array(
+ GESHI_SEARCH => '(self|super|true|false|nil)', //keywords again (to avoid matching in next regexp)
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 5 => array(
+ GESHI_SEARCH => '([:(,=[.*\/+-]\s*)([a-zA-Z0-9_]+)', //message parameters, message receivers
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 's',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ 6 => array(
+ GESHI_SEARCH => '([a-zA-Z0-9_]+)(\s*:=)', //assignment targets
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '\\2'
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php
new file mode 100644
index 000000000..dcc11f61d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php
@@ -0,0 +1,192 @@
+<?php
+/*************************************************************************************
+ * smarty.php
+ * ----------
+ * Author: Alan Juden (alan@judenware.org)
+ * Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/07/10
+ *
+ * Smarty template language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.0)
+ * - Initial Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Smarty',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('{*' => '*}'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '$smarty', 'now', 'const', 'capture', 'config', 'section', 'foreach', 'template', 'version', 'ldelim', 'rdelim',
+ 'foreachelse', 'include', 'include_php', 'insert', 'if', 'elseif', 'else', 'php',
+ 'sectionelse', 'is_cached',
+ ),
+ 2 => array(
+ 'capitalize', 'count_characters', 'cat', 'count_paragraphs', 'count_sentences', 'count_words', 'date_format',
+ 'default', 'escape', 'indent', 'lower', 'nl2br', 'regex_replace', 'replace', 'spacify', 'string_format',
+ 'strip', 'strip_tags', 'truncate', 'upper', 'wordwrap',
+ ),
+ 3 => array(
+ 'counter', 'cycle', 'debug', 'eval', 'html_checkboxes', 'html_image', 'html_options',
+ 'html_radios', 'html_select_date', 'html_select_time', 'html_table', 'math', 'mailto', 'popup_init',
+ 'popup', 'textformat'
+ ),
+ 4 => array(
+ '$template_dir', '$compile_dir', '$config_dir', '$plugins_dir', '$debugging', '$debug_tpl',
+ '$debugging_ctrl', '$autoload_filters', '$compile_check', '$force_compile', '$caching', '$cache_dir',
+ '$cache_lifetime', '$cache_handler_func', '$cache_modified_check', '$config_overwrite',
+ '$config_booleanize', '$config_read_hidden', '$config_fix_newlines', '$default_template_handler_func',
+ '$php_handling', '$security', '$secure_dir', '$security_settings', '$trusted_dir', '$left_delimiter',
+ '$right_delimiter', '$compiler_class', '$request_vars_order', '$request_use_auto_globals',
+ '$error_reporting', '$compile_id', '$use_sub_dirs', '$default_modifiers', '$default_resource_type'
+ ),
+ 5 => array(
+ 'append', 'append_by_ref', 'assign', 'assign_by_ref', 'clear_all_assign', 'clear_all_cache',
+ 'clear_assign', 'clear_cache', 'clear_compiled_tpl', 'clear_config', 'config_load', 'display',
+ 'fetch', 'get_config_vars', 'get_registered_object', 'get_template_vars',
+ 'load_filter', 'register_block', 'register_compiler_function', 'register_function',
+ 'register_modifier', 'register_object', 'register_outputfilter', 'register_postfilter',
+ 'register_prefilter', 'register_resource', 'trigger_error', 'template_exists', 'unregister_block',
+ 'unregister_compiler_function', 'unregister_function', 'unregister_modifier', 'unregister_object',
+ 'unregister_outputfilter', 'unregister_postfilter', 'unregister_prefilter', 'unregister_resource'
+ ),
+ 6 => array(
+ 'name', 'file', 'scope', 'global', 'key', 'once', 'script',
+ 'loop', 'start', 'step', 'max', 'show', 'values', 'value', 'from', 'item'
+ ),
+ 7 => array(
+ 'eq', 'neq', 'ne', 'lte', 'gte', 'ge', 'le', 'not', 'mod'
+ ),
+ 8 => array(
+ // some common php functions
+ 'isset', 'is_array', 'empty', 'count', 'sizeof'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '/', '=', '==', '!=', '>', '<', '>=', '<=', '!', '%'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF;', //Functions
+ 2 => 'color: #008000;', //Modifiers
+ 3 => 'color: #0600FF;', //Custom Functions
+ 4 => 'color: #804040;', //Variables
+ 5 => 'color: #008000;', //Methods
+ 6 => 'color: #6A0A0A;', //Attributes
+ 7 => 'color: #D36900;', //Text-based symbols
+ 8 => 'color: #0600FF;' //php functions
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: #008080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #D36900;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #D36900;'
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #009000;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #00aaff;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://smarty.php.net/{FNAMEL}',
+ 2 => 'http://smarty.php.net/{FNAMEL}',
+ 3 => 'http://smarty.php.net/{FNAMEL}',
+ 4 => 'http://smarty.php.net/{FNAMEL}',
+ 5 => 'http://smarty.php.net/{FNAMEL}',
+ 6 => '',
+ 7 => 'http://smarty.php.net/{FNAMEL}',
+ 8 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ // variables
+ 0 => '\$[a-zA-Z][a-zA-Z0-9_]*'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ 0 => array(
+ '{' => '}'
+ ),
+ 1 => array(
+ '<!--' => '-->',
+ ),
+ 2 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => false,
+ 2 => false
+ ),
+ 'PARSER_CONTROL' => array(
+ 'KEYWORDS' => array(
+ 'DISALLOWED_BEFORE' => "(?<![a-zA-Z0-9\$_\|\#;>|^])",
+ 'DISALLOWED_AFTER' => "(?![a-zA-Z0-9_<\|%\\-&])"
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php
new file mode 100644
index 000000000..ba91191d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php
@@ -0,0 +1,140 @@
+<?php
+/*************************************************************************************
+ * sql.php
+ * -------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * SQL language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added additional symbols for highlighting
+ * 2004/11/27 (1.0.3)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.2)
+ * - Added "`" string delimiter
+ * - Added "#" single comment starter
+ * 2004/08/05 (1.0.1)
+ * - Added support for symbols
+ * - Added many more keywords (mostly MYSQL keywords)
+ * 2004/07/14 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Add all keywords
+ * * Split this to several sql files - mysql-sql, ansi-sql etc
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'SQL',
+ 'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => 1,
+ 'QUOTEMARKS' => array("'", '"', '`'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'ADD', 'ALL', 'ALTER', 'AND', 'AS', 'ASC',
+ 'AUTO_INCREMENT', 'BETWEEN', 'BINARY', 'BOOLEAN',
+ 'BOTH', 'BY', 'CHANGE', 'CHECK', 'COLUMN', 'COLUMNS',
+ 'CREATE', 'CROSS', 'DATA', 'DATABASE', 'DATABASES',
+ 'DEFAULT', 'DELAYED', 'DELETE', 'DESC', 'DESCRIBE',
+ 'DISTINCT', 'DROP', 'ENCLOSED', 'ESCAPED', 'EXISTS',
+ 'EXPLAIN', 'FIELD', 'FIELDS', 'FLUSH', 'FOR',
+ 'FOREIGN', 'FROM', 'FULL', 'FUNCTION', 'GRANT',
+ 'GROUP', 'HAVING', 'IDENTIFIED', 'IF', 'IGNORE',
+ 'IN', 'INDEX', 'INFILE', 'INNER', 'INSERT', 'INTO',
+ 'IS', 'JOIN', 'KEY', 'KEYS', 'KILL', 'LANGUAGE',
+ 'LEADING', 'LEFT', 'LIKE', 'LIMIT', 'LINES', 'LOAD',
+ 'LOCAL', 'LOCK', 'LOW_PRIORITY', 'MODIFY', 'NATURAL',
+ 'NEXTVAL', 'NOT', 'NULL', 'ON', 'OPTIMIZE', 'OPTION',
+ 'OPTIONALLY', 'OR', 'ORDER', 'OUTER', 'OUTFILE',
+ 'PRIMARY', 'PROCEDURAL', 'PROCEEDURE', 'READ',
+ 'REFERENCES', 'REGEXP', 'RENAME', 'REPLACE',
+ 'RETURN', 'REVOKE', 'RIGHT', 'RLIKE', 'SELECT',
+ 'SET', 'SETVAL', 'SHOW', 'SONAME', 'STATUS',
+ 'STRAIGHT_JOIN', 'TABLE', 'TABLES', 'TEMINATED',
+ 'TEMPORARY', 'TO', 'TRAILING', 'TRIGGER', 'TRUNCATE',
+ 'TRUSTED', 'UNION', 'UNIQUE', 'UNLOCK', 'UNSIGNED',
+ 'UPDATE', 'USE', 'USING', 'VALUES', 'VARIABLES',
+ 'VIEW', 'WHERE', 'WITH', 'WRITE', 'XOR', 'ZEROFILL'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '=', '<', '>', '|', ',', '.', '+', '-', '*', '/'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #993333; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #808080; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php
new file mode 100644
index 000000000..25cb31d5b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php
@@ -0,0 +1,194 @@
+<?php
+/*************************************************************************************
+ * tcl.php
+ * ---------------------------------
+ * Author: Reid van Melle (rvanmelle@gmail.com)
+ * Copyright: (c) 2004 Reid van Melle (sorry@nowhere)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/05/05
+ *
+ * TCL/iTCL language file for GeSHi.
+ *
+ * This was thrown together in about an hour so I don't expect
+ * really great things. However, it is a good start. I never
+ * got a change to try out the iTCL or object-based support but
+ * this is not widely used anyway.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/05/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/05/05)
+ * -------------------------
+ * - Get TCL built-in special variables highlighted with a new color..
+ * currently, these are listed in //special variables in the keywords
+ * section, but they get covered by the general REGEXP for symbols
+ * - General cleanup, testing, and verification
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'TCL',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ 1 => '/(?<!\\\\)#(?:\\\\\\\\|\\\\\\n|.)*$/m',
+ 2 => '/{[^}\n]+}/'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"', "'"),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ /*
+ * Set 1: reserved words
+ * http://python.org/doc/current/ref/keywords.html
+ */
+ 1 => array(
+ 'proc', 'global', 'upvar', 'if', 'then', 'else', 'elseif', 'for', 'foreach',
+ 'break', 'continue', 'while', 'set', 'eval', 'case', 'in', 'switch',
+ 'default', 'exit', 'error', 'return', 'uplevel', 'loop',
+ 'for_array_keys', 'for_recursive_glob', 'for_file', 'unwind_protect',
+ 'expr', 'catch', 'namespace', 'rename', 'variable',
+ // itcl
+ 'method', 'itcl_class', 'public', 'protected'),
+
+ /*
+ * Set 2: builtins
+ * http://asps.activatestate.com/ASPN/docs/ActiveTcl/8.4/tcl/tcl_2_contents.htm
+ */
+ 2 => array(
+ // string handling
+ 'append', 'binary', 'format', 're_syntax', 'regexp', 'regsub',
+ 'scan', 'string', 'subst',
+ // list handling
+ 'concat', 'join', 'lappend', 'lindex', 'list', 'llength', 'lrange',
+ 'lreplace', 'lsearch', 'lset', 'lsort', 'split',
+ // procedures and output
+ 'incr', 'close', 'eof', 'fblocked', 'fconfigure', 'fcopy', 'file',
+ 'fileevent', 'flush', 'gets', 'open', 'puts', 'read', 'seek',
+ 'socket', 'tell',
+ // packages and source files
+ 'load', 'loadTk', 'package', 'pgk::create', 'pgk_mkIndex', 'source',
+ // interpreter routines
+ 'bgerror', 'history', 'info', 'interp', 'memory', 'unknown',
+ // library routines
+ 'enconding', 'http', 'msgcat',
+ // system related
+ 'cd', 'clock', 'exec', 'glob', 'pid', 'pwd', 'time',
+ // platform specified
+ 'dde', 'registry', 'resource',
+ // special variables
+ '$argc', '$argv', '$errorCode', '$errorInfo', '$argv0',
+ '$auto_index', '$auto_oldpath', '$auto_path', '$env',
+ '$tcl_interactive', '$tcl_libpath', '$tcl_library',
+ '$tcl_pkgPath', '$tcl_platform', '$tcl_precision', '$tcl_traceExec',
+ ),
+
+ /*
+ * Set 3: standard library
+ */
+ 3 => array(
+ 'comment', 'filename', 'library', 'packagens', 'tcltest', 'tclvars',
+ ),
+
+ /*
+ * Set 4: special methods
+ */
+// 4 => array(
+// )
+
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '$', '*', '&', '%', '!', ';', '<', '>', '?'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+// 4 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #ff7700;font-weight:bold;', // Reserved
+ 2 => 'color: #008000;', // Built-ins + self
+ 3 => 'color: #dc143c;', // Standard lib
+// 4 => 'color: #0000cd;' // Special methods
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #808080; font-style: italic;',
+ 2 => 'color: #483d8b;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: black;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #483d8b;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff4500;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: black;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #ff3333;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+// 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '::'
+ ),
+ 'REGEXPS' => array(
+ //Special variables
+ 0 => '[\\$]+[a-zA-Z_][a-zA-Z0-9_]*',
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'COMMENTS' => array(
+ 'DISALLOWED_BEFORE' => '\\'
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php
new file mode 100644
index 000000000..5ac9f8743
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php
@@ -0,0 +1,317 @@
+<?php
+/*************************************************************************************
+ * teraterm.php
+ * --------
+ * Author: Boris Maisuradze (boris at logmett.com)
+ * Copyright: (c) 2008 Boris Maisuradze (http://logmett.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/09/26
+ *
+ * Tera Term Macro language file for GeSHi.
+ *
+ *
+ * This version of ttl.php was created for Tera Term 4.60 and LogMeTT 2.9.4.
+ * Newer versions of these application can contain additional Macro commands
+ * and/or keywords that are not listed here. The latest release of ttl.php
+ * can be downloaded from Download section of LogMeTT.com
+ *
+ * CHANGES
+ * -------
+ * 2008/09/26 (1.0.8)
+ * - First Release for Tera Term 4.60 and below.
+ *
+ * TODO (updated 2008/09/26)
+ * -------------------------
+ * *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Tera Term Macro',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /* Commands */
+ 1 => array(
+ 'Beep',
+ 'BplusRecv',
+ 'BplusSend',
+ 'Break', // (version 4.53 or later)
+ 'Call',
+ 'CallMenu', // (version 4.56 or later)
+ 'ChangeDir',
+ 'ClearScreen',
+ 'Clipb2Var', //(version 4.46 or later)
+ 'ClosesBox',
+ 'CloseTT',
+ 'Code2Str',
+ 'Connect',
+ 'CRC32', // (version 4.60 or later)
+ 'CRC32File', // (version 4.60 or later)
+ 'CygConnect', // (version 4.57 or later)
+ 'DelPassword',
+ 'Disconnect',
+ 'Do', // (version 4.56 or later)
+ 'Else',
+ 'EnableKeyb',
+ 'End',
+ 'EndIf',
+ 'EndUntil', // (version 4.56 or later)
+ 'EndWhile',
+ 'Exec',
+ 'ExecCmnd',
+ 'Exit',
+ 'FileClose',
+ 'FileConcat',
+ 'FileCopy',
+ 'FileCreate',
+ 'FileDelete',
+ 'FileMarkPtr',
+ 'FilenameBox', //(version 4.54 or later)
+ 'FileOpen',
+ 'FileRead',
+ 'FileReadln', // (version 4.48 or later)
+ 'FileRename',
+ 'FileSearch',
+ 'FileSeek',
+ 'FileSeekBack',
+ 'FileStrSeek',
+ 'FileStrSeek2',
+ 'FileWrite',
+ 'FileWriteln',
+ 'FindOperations',
+ 'FlushRecv',
+ 'ForNext',
+ 'GetDate',
+ 'GetDir', //(version 4.46 or later)
+ 'GetEnv',
+ 'GetPassword',
+ 'GetTime',
+ 'GetTitle',
+ 'GetVer', //(version 4.58 or later)
+ 'GoTo',
+ 'If',
+ 'IfDefined', // (version 4.46 or later)
+ 'IfThenElseIf',
+ 'Include',
+ 'InputBox',
+ 'Int2Str',
+ 'KmtFinish',
+ 'KmtGet',
+ 'KmtRecv',
+ 'KmtSend',
+ 'LoadKeyMap',
+ 'LogClose',
+ 'LogOpen',
+ 'LogPause',
+ 'LogStart',
+ 'LogWrite',
+ 'Loop', // (version 4.56 or later)
+ 'MakePath',
+ 'MessageBox',
+ 'MPause', // (version 4.27 or later)
+ 'PasswordBox',
+ 'Pause',
+ 'QuickvanRecv',
+ 'QuickvanSend',
+ 'Random', //(version 4.27 or later)
+ 'Recvln',
+ 'RestoreSetup',
+ 'Return',
+ 'RotateLeft', //(version 4.54 or later)
+ 'RotateRight', //(version 4.54 or later)
+ 'ScpRecv', // (version 4.57 or later)
+ 'ScpSend', // (version 4.57 or later)
+ 'Send',
+ 'SendBreak',
+ 'SendFile',
+ 'SendKcode',
+ 'Sendln',
+ 'SetBaud', // (version 4.58 or later)
+ 'SetDate',
+ 'SetDir',
+ 'SetDlgPos',
+ 'SetDTR', // (version 4.59 or later)
+ 'SetRTS', // (version 4.59 or later)
+ 'SetEnv', // (version 4.54 or later)
+ 'SetEcho',
+ 'SetExitCode',
+ 'SetSync',
+ 'SetTime',
+ 'SetTitle',
+ 'Show',
+ 'ShowTT',
+ 'Sprintf', // (version 4.52 or later)
+ 'StatusBox',
+ 'Str2Code',
+ 'Str2Int',
+ 'StrCompare',
+ 'StrConcat',
+ 'StrCopy',
+ 'StrLen',
+ 'StrMatch', // (version 4.59 or later)
+ 'StrScan',
+ 'Testlink',
+ 'Then',
+ 'ToLower', //(version 4.53 or later)
+ 'ToUpper', //(version 4.53 or later)
+ 'Unlink',
+ 'Until', // (version 4.56 or later)
+ 'Var2Clipb', //(version 4.46 or later)
+ 'Wait',
+ 'WaitEvent',
+ 'Waitln',
+ 'WaitRecv',
+ 'WaitRegex', // (version 4.21 or later)
+ 'While',
+ 'XmodemRecv',
+ 'XmodemSend',
+ 'YesNoBox',
+ 'ZmodemRecv',
+ 'ZmodemSend'
+ ),
+ /* System Variables */
+ 2 => array(
+ 'groupmatchstr1',
+ 'groupmatchstr2',
+ 'groupmatchstr3',
+ 'groupmatchstr4',
+ 'groupmatchstr5',
+ 'groupmatchstr6',
+ 'groupmatchstr7',
+ 'groupmatchstr8',
+ 'groupmatchstr9',
+ 'inputstr',
+ 'matchstr',
+ 'param2',
+ 'param3',
+ 'param4',
+ 'param5',
+ 'param6',
+ 'param7',
+ 'param8',
+ 'param9',
+ 'result',
+ 'timeout'
+ ),
+ /* LogMeTT Key Words */
+ 3 => array(
+ '$[1]',
+ '$[2]',
+ '$[3]',
+ '$[4]',
+ '$[5]',
+ '$[6]',
+ '$[7]',
+ '$[8]',
+ '$connection$',
+ '$email$',
+ '$logdir$',
+ '$logfilename$',
+ '$logit$',
+ '$mobile$',
+ '$name$',
+ '$pager$',
+ '$parent$',
+ '$phone$',
+ '$snippet$',
+ '$ttdir$',
+ '$user$',
+ '$windir$',
+ ),
+ /* Keyword Symbols */
+ 4 => array(
+ 'and',
+ 'not',
+ 'or',
+ 'xor'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']',
+ '~', '!', '+', '-', '*', '/', '%', '>>', '<<', '<<<', '>>>', '&', '^', '|',
+ '<>', '<=', '>=', '=', '==', '<>', '!=', '&&', '||'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080; font-weight: bold!important;',
+ 2 => 'color: #808000; font-weight: bold;', // System Variables
+ 3 => 'color: #ff0000; font-weight: bold;', // LogMeTT Key Words
+ 4 => 'color: #ff00ff; font-weight: bold;' // Keyword Symbols
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(),
+ 'BRACKETS' => array(
+ 0 => 'color: #ff00ff; font-weight: bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #800080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #008080;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #ff00ff; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff; font-weight: bold;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ 0 => array (
+ GESHI_SEARCH => '(\:[_a-zA-Z][_a-zA-Z0-9]+)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php
new file mode 100644
index 000000000..9183895c2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php
@@ -0,0 +1,84 @@
+<?php
+/*************************************************************************************
+ * text.php
+ * --------
+ * Author: Sean Hanna (smokingrope@gmail.com)
+ * Copyright: (c) 2006 Sean Hanna
+ * Release Version: 1.0.8.4
+ * Date Started: 04/23/2006
+ *
+ * Standard Text File (No Syntax Highlighting).
+ * Plaintext language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 04/23/2006 (0.5.0)
+ * - Syntax File Created
+ *
+ * 04/27/2006 (1.0.0)
+ * - Documentation Cleaned Up
+ * - First Release
+ *
+ * TODO (updated 04/27/2006)
+ * -------------------------
+ *
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Text',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(),
+ 'SYMBOLS' => array(),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(),
+ 'COMMENTS' => array(),
+ 'ESCAPE_CHAR' => array(),
+ 'BRACKETS' => array(),
+ 'STRINGS' => array(),
+ 'NUMBERS' => array(),
+ 'METHODS' => array(),
+ 'SYMBOLS' => array(),
+ 'SCRIPT' => array(),
+ 'REGEXPS' => array()
+ ),
+ 'URLS' => array(),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'ALL' => GESHI_NEVER
+ ),
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php
new file mode 100644
index 000000000..b9c9742c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php
@@ -0,0 +1,868 @@
+<?php
+/*************************************************************************************
+ * thinbasic.php
+ * ------
+ * Author: Eros Olmi (eros.olmi@thinbasic.com)
+ * Copyright: (c) 2006 Eros Olmi (http://www.thinbasic.com), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/05/12
+ *
+ * thinBasic language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2006/05/12 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/05/12)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'thinBasic',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'XOR','XML_TREETOSTRING','XML_PARSEFILE','XML_PARSE','XML_PARENT','XML_NODETYPE','XML_NODETOSTRING','XML_NEXTSIBLING',
+ 'XML_LASTERROR','XML_GETTAG','XML_FREE','XML_FINDNODE','XML_DECODEPARAM','XML_CHILDDATA','XML_CHILD','XML_ATTRIBVALUE',
+ 'XML_ATTRIBNAME','XML_ATTRIBCOUNT','WORD','WITH','WIN_SHOW','WIN_SETTITLE','WIN_SETFOREGROUND','WIN_ISZOOMED',
+ 'WIN_ISVISIBLE','WIN_ISICONIC','WIN_GETTITLE','WIN_GETFOREGROUND','WIN_GETCLASS','WIN_GETACTIVE','WIN_FLASH','WIN_FINDBYTITLE',
+ 'WIN_FINDBYCLASS','WHILE','WEND','VERIFY','VARPTR','VARIANTVT$','VARIANTVT','VARIANT',
+ 'VARIABLE_GETINFO','VARIABLE_EXISTS','VARIABLE_EXIST','VALUE','VAL','USING$','USING','USES',
+ 'USER','UNTIL','UNITS','UNION','UNICODE2ASCII','UDP_SEND','UDP_RECV','UDP_OPENSERVER',
+ 'UDP_OPEN','UDP_FREEFILE','UDP_CLOSE','UCODE$','UCASE$','UBOUND','TYPE','TRIMFULL$',
+ 'TRIM$','TOOLTIP','TOKENIZER_MOVETOEOL','TOKENIZER_KEYSETUSERSTRING','TOKENIZER_KEYSETUSERNUMBER','TOKENIZER_KEYGETUSERSTRING','TOKENIZER_KEYGETUSERNUMBER','TOKENIZER_KEYGETSUBTYPE',
+ 'TOKENIZER_KEYGETNAME','TOKENIZER_KEYGETMAINTYPE','TOKENIZER_KEYFIND','TOKENIZER_KEYADD','TOKENIZER_GETNEXTTOKEN','TOKENIZER_DEFAULT_SET','TOKENIZER_DEFAULT_GET','TOKENIZER_DEFAULT_CODE',
+ 'TOKENIZER_DEFAULT_CHAR','TO','TIMER','TIME$','THEN','TEXTBOX','TEXT','TCP_SEND',
+ 'TCP_RECV','TCP_PRINT','TCP_OPEN','TCP_LINEINPUT','TCP_FREEFILE','TCP_CLOSE','TB_IMGCTX_SETIMAGEADJUSTMENT','TB_IMGCTX_LOADIMAGE',
+ 'TB_IMGCTX_GETIMAGEADJUSTMENT','TBGL_VIEWPORT','TBGL_VERTEX','TBGL_USETEXTUREFLAG','TBGL_USETEXTURE','TBGL_USELINESTIPPLEFLAG','TBGL_USELINESTIPPLE','TBGL_USELIGHTSOURCEFLAG',
+ 'TBGL_USELIGHTSOURCE','TBGL_USELIGHTINGFLAG','TBGL_USELIGHTING','TBGL_USEFOGFLAG','TBGL_USEFOG','TBGL_USEDEPTHMASK','TBGL_USEDEPTHFLAG','TBGL_USEDEPTH',
+ 'TBGL_USECLIPPLANEFLAG','TBGL_USECLIPPLANE','TBGL_USEBLENDFLAG','TBGL_USEBLEND','TBGL_USEALPHATEST','TBGL_TRANSLATE','TBGL_TORUS','TBGL_TEXCOORD2D',
+ 'TBGL_SPHERE','TBGL_SHOWWINDOW','TBGL_SHOWCURSOR','TBGL_SETWINDOWTITLE','TBGL_SETUPLIGHTSOURCE','TBGL_SETUPFOG','TBGL_SETUPCLIPPLANE','TBGL_SETPRIMITIVEQUALITY',
+ 'TBGL_SETLIGHTPARAMETER','TBGL_SETDRAWDISTANCE','TBGL_SCALE','TBGL_SAVESCREENSHOT','TBGL_ROTATEXYZ','TBGL_ROTATE','TBGL_RESETMATRIX','TBGL_RENDERTOTEXTURE',
+ 'TBGL_RENDERMATRIX3D','TBGL_RENDERMATRIX2D','TBGL_PUSHMATRIX','TBGL_PRINTFONT','TBGL_PRINTBMP','TBGL_PRINT','TBGL_POS3DTOPOS2D','TBGL_POPMATRIX',
+ 'TBGL_POLYGONLOOK','TBGL_POINTSIZE','TBGL_POINTINSIDE3D','TBGL_NORMAL','TBGL_NEWLIST','TBGL_MOUSEGETWHEELDELTA','TBGL_MOUSEGETRBUTTON','TBGL_MOUSEGETPOSY',
+ 'TBGL_MOUSEGETPOSX','TBGL_MOUSEGETMBUTTON','TBGL_MOUSEGETLBUTTON','TBGL_M15SETVERTEXZ','TBGL_M15SETVERTEXY','TBGL_M15SETVERTEXXYZ','TBGL_M15SETVERTEXX','TBGL_M15SETVERTEXTEXY',
+ 'TBGL_M15SETVERTEXTEXXY','TBGL_M15SETVERTEXTEXX','TBGL_M15SETVERTEXTEXN','TBGL_M15SETVERTEXRGB','TBGL_M15SETVERTEXR','TBGL_M15SETVERTEXPSTOP','TBGL_M15SETVERTEXPARAM','TBGL_M15SETVERTEXLAYER',
+ 'TBGL_M15SETVERTEXG','TBGL_M15SETVERTEXB','TBGL_M15SETMODELVERTEXCOUNT','TBGL_M15SETBONECHILD','TBGL_M15ROTBONEZ','TBGL_M15ROTBONEY','TBGL_M15ROTBONEX','TBGL_M15ROTBONE',
+ 'TBGL_M15RESETBONES','TBGL_M15RECALCNORMALS','TBGL_M15LOADMODEL','TBGL_M15INITMODELBUFFERS','TBGL_M15GETVERTEXZ','TBGL_M15GETVERTEXY','TBGL_M15GETVERTEXXYZ','TBGL_M15GETVERTEXX',
+ 'TBGL_M15GETVERTEXTEXY','TBGL_M15GETVERTEXTEXXY','TBGL_M15GETVERTEXTEXX','TBGL_M15GETVERTEXTEXN','TBGL_M15GETVERTEXRGB','TBGL_M15GETVERTEXR','TBGL_M15GETVERTEXPSTOP','TBGL_M15GETVERTEXPARAM',
+ 'TBGL_M15GETVERTEXLAYER','TBGL_M15GETVERTEXG','TBGL_M15GETVERTEXB','TBGL_M15GETMODELVERTEXCOUNT','TBGL_M15GETMODELPOLYCOUNT','TBGL_M15ERASECHILDBONES','TBGL_M15DRAWMODEL','TBGL_M15DEFBONERESET',
+ 'TBGL_M15DEFBONELAYER','TBGL_M15DEFBONEBOX','TBGL_M15DEFBONEANCHOR','TBGL_M15DEFBONEADDVERTEX','TBGL_M15CLEARMODEL','TBGL_M15APPLYBONES','TBGL_M15ADDBONETREEITEM','TBGL_LOADTEXTURE',
+ 'TBGL_LOADFONT','TBGL_LOADBMPFONT','TBGL_LINEWIDTH','TBGL_LINESTIPPLE','TBGL_KILLFONT','TBGL_ISWINDOW','TBGL_ISPOINTVISIBLE','TBGL_ISPOINTBEHINDVIEW',
+ 'TBGL_GETWINDOWMULTIKEYSTATE','TBGL_GETWINDOWKEYSTATE','TBGL_GETWINDOWKEYONCE','TBGL_GETWINDOWCLIENT','TBGL_GETTEXTURENAME','TBGL_GETTEXTURELIST','TBGL_GETPIXELINFO','TBGL_GETMULTIASYNCKEYSTATE',
+ 'TBGL_GETLASTGLERROR','TBGL_GETFRAMERATE','TBGL_GETDESKTOPINFO','TBGL_GETASYNCKEYSTATE','TBGL_ERRORMESSAGES','TBGL_ENDPOLY','TBGL_ENDLIST','TBGL_DRAWFRAME',
+ 'TBGL_DESTROYWINDOW','TBGL_DELETELIST','TBGL_CYLINDER','TBGL_CREATEWINDOWEX','TBGL_CREATEWINDOW','TBGL_COLORALPHA','TBGL_COLOR','TBGL_CLEARFRAME',
+ 'TBGL_CAMERA','TBGL_CALLLIST','TBGL_BUILDFONT','TBGL_BOX','TBGL_BLENDFUNC','TBGL_BINDTEXTURE','TBGL_BEGINPOLY','TBGL_BACKCOLOR',
+ 'TBGL_ALPHAFUNC','TBDI_JOYZ','TBDI_JOYY','TBDI_JOYX','TBDI_JOYSTOPEFFECT','TBDI_JOYSLIDER','TBDI_JOYSETRANGEZ','TBDI_JOYSETRANGEY',
+ 'TBDI_JOYSETRANGEXYZ','TBDI_JOYSETRANGEX','TBDI_JOYSETDEADZONEZ','TBDI_JOYSETDEADZONEY','TBDI_JOYSETDEADZONEXYZ','TBDI_JOYSETDEADZONEX','TBDI_JOYSETAUTOCENTER','TBDI_JOYRZ',
+ 'TBDI_JOYRY','TBDI_JOYRX','TBDI_JOYPOV','TBDI_JOYPLAYEFFECT','TBDI_JOYLOADEFFECT','TBDI_JOYHASFF','TBDI_JOYHASEFFECT','TBDI_JOYGETEFFECTNAME',
+ 'TBDI_JOYGETEFFECTGUID','TBDI_JOYCREATEEFFECT','TBDI_JOYCOUNTPOV','TBDI_JOYCOUNTEFFECTS','TBDI_JOYCOUNTBTN','TBDI_JOYCOUNTAXES','TBDI_JOYBUTTON','TBDI_JOYAVAIL',
+ 'TBDI_INIT','TBASS_STREAMFREE','TBASS_STREAMCREATEFILE','TBASS_SETVOLUME','TBASS_SETEAXPRESET','TBASS_SETEAXPARAMETERS','TBASS_SETCONFIG','TBASS_SET3DPOSITION',
+ 'TBASS_SET3DFACTORS','TBASS_SAMPLELOAD','TBASS_SAMPLEGETCHANNEL','TBASS_MUSICLOAD','TBASS_MUSICFREE','TBASS_INIT','TBASS_GETVOLUME','TBASS_GETVERSION',
+ 'TBASS_GETCONFIG','TBASS_FREE','TBASS_ERRORGETCODE','TBASS_CHANNELSTOP','TBASS_CHANNELSETPOSITION','TBASS_CHANNELSETATTRIBUTES','TBASS_CHANNELSET3DPOSITION','TBASS_CHANNELPLAY',
+ 'TBASS_CHANNELPAUSE','TBASS_CHANNELISACTIVE','TBASS_CHANNELGETPOSITION','TBASS_CHANNELGETLENGTH','TBASS_CHANNELGETATTRIBUTES','TBASS_APPLY3D','TANH','TANGENT',
+ 'TAN','TALLY','TABCTRL_ONNOTIFY','TABCTRL_INSERTITEM','TABCTRL_GETCURSEL','SWAP','SUB','STRZIP$',
+ 'STRUNZIP$','STRREVERSE$','STRPTRLEN','STRPTR','STRINSERT$','STRING$','STRING','STRDELETE$',
+ 'STR$','STOP','STEP','STDOUT','STDIN','STAT_SUM','STAT_STDERROR','STAT_STDDEVIATION',
+ 'STAT_RANDOM','STAT_PRODUCT','STAT_MIN','STAT_MEDIAN','STAT_MEANHARMONIC','STAT_MEANGEOMETRIC','STAT_MEANARITHMETIC','STAT_MAX',
+ 'STAT_INVERSESUM','STAT_HISTOGRAM','STAT_FILLARRAY','STAT_COUNT','STAT_COPYARRAY','STAT_CLONEARRAY','STAT_CHISQUARE','STATIC',
+ 'STATE','SQR','SPLIT','SORT','SMTP_STATISTICS','SMTP_SETOPTION','SMTP_SETLOGFILE','SMTP_SENDHTML',
+ 'SMTP_SENDEMAIL','SMTP_GETERROR','SMTP_FINISHED','SMTP_DEBUG','SMTP_CONNECT','SMTP_CLOSE','SLEEP','SIZEOF',
+ 'SIZE','SINH','SINGLE','SIN','SIGNED','SHOW','SHIFT','SHAPETOBMP',
+ 'SGN','SETAT','SET','SENDMESSAGE','SENDKEYSBULK','SENDKEYS','SEND','SELECTEXPRESSION',
+ 'SELECT','SECH','SEC','SCAN','SAPI_SPEAK','SAPI_SETVOLUME','SAPI_SETRATE','SAPI_MODULELOADED',
+ 'SAPI_GETVOLUME','SAPI_GETRATE','RTRIM$','RTF_SETTEXT','RTF_SETFONTSIZE','RTF_SETFONTNAME','RTF_SETFGCOLOR','RTF_SETEFFECT',
+ 'RTF_SETBGCOLOR','RTF_SETALIGN','RTF_SAVETOFILE','RTF_LOADFROMFILE','RTF_GETTEXT','RTF_GETFONTSIZE','RTF_GETFONTNAME','RTF_GETEFFECT',
+ 'RTF_GETCLASS','RTF_APPENDTEXT','RSET$','ROUND','RNDF','RND','RIGHT$','RIGHT',
+ 'RGB','RESOURCE','RESIZE','RESET','REPLACE$','REPEAT$','REMOVE$','REM',
+ 'REGISTRY_SETVALUE','REGISTRY_SETTXTNUM','REGISTRY_SETTXTBOOL','REGISTRY_SETDWORD','REGISTRY_GETVALUE','REGISTRY_GETTXTNUM','REGISTRY_GETTXTBOOL','REGISTRY_GETDWORD',
+ 'REGISTRY_GETALLKEYS','REGISTRY_DELVALUE','REGISTRY_DELKEY','REFERENCE','REF','REDRAW','REDIM','RAS_SETPARAMS',
+ 'RAS_OPENDIALUPDIALOG','RAS_LOADENTRIES','RAS_HANGUPALL','RAS_HANGUP','RAS_GETENTRY','RAS_BEGINDIAL','RANDOMIZE','RADTODEG',
+ 'QUERYPERFORMANCEFREQUENCY','QUERYPERFORMANCECOUNTER','QUAD','PTR','PRESERVE','POST','POPUP','POKE$',
+ 'POKE','PIXELS','PI','PERMUTATIONS','PEEKMESSAGE','PEEK$','PEEK','PC_SYSTEMUPFROM',
+ 'PC_SUSPENDSTATE','PC_SHUTDOWN','PC_SHOWCARET','PC_SETCARETBLINKTIME','PC_RESTARTDIALOG','PC_PREVENTSHUTDOWN','PC_LOCK','PC_INSERTCD',
+ 'PC_HIDECARET','PC_GETSTATEONOFF','PC_GETSCROLLLOCKKEYSTATE','PC_GETNUMLOCKKEYSTATE','PC_GETCARETBLINKTIME','PC_GETCAPSLOCKKEYSTATE','PC_EMPTYBIN','PC_EJECTCD',
+ 'PC_DECODECDERROR','PCT','PARSESET$','PARSECOUNT','PARSE$','PARSE','PARAMETERS','OUTSIDE',
+ 'OS_WINVERSIONTEXT','OS_WINGETVERSIONTIMELINE','OS_SHELLEXECUTE','OS_SHELLABOUT','OS_SHELL','OS_SETLASTCALLDLLERROR','OS_SERVICESTOP','OS_SERVICESTATUSDESCRIPTION',
+ 'OS_SERVICESTARTTYPEDESCRIPTION','OS_SERVICESTART','OS_SERVICESETSTARTTYPE','OS_SERVICEQUERY','OS_SERVICEGETSTARTTYPE','OS_SERVICEGETLIST','OS_PROCESSKILLBYNAME','OS_PROCESSKILLBYID',
+ 'OS_PROCESSISRUNNING','OS_PROCESSGETLIST','OS_PROCESSGETID','OS_PROCESSARERUNNING','OS_MESSAGEBEEP','OS_ISWOW64','OS_ISFEATUREPRESENT','OS_IEVERSION',
+ 'OS_GETWINDOWSDIR','OS_GETUSERNAME','OS_GETTEMPDIR','OS_GETSYSTEMDIR','OS_GETSPECIALFOLDER','OS_GETLASTCALLDLLSTATUS','OS_GETLASTCALLDLLERROR','OS_GETCURRENTTHREADID',
+ 'OS_GETCURRENTPROCESSID','OS_GETCOMPUTERNAME','OS_GETCOMMANDS','OS_GETCOMMAND','OS_FLASHWINDOW','OS_FATALAPPEXIT','OS_ENVIRON','OS_CALLDLL',
+ 'OR','OPTIONAL','OPTION','OPT','ONCE','ON','OFF','NUMBER',
+ 'NOT','NEXT','NEW','MSGBOX','MOUSEPTR','MODULE','MODELESS','MODAL',
+ 'MOD','MKWRD$','MKS$','MKQ$','MKL$','MKI$','MKE$','MKDWD$',
+ 'MKD$','MKCUX$','MKCUR$','MKBYT$','MIN$','MIN','MID$','MENU',
+ 'MDI_CREATE','MCASE$','MAX$','MAX','MAKWRD','MAKLNG','MAKINT','MAKDWR',
+ 'LTRIM$','LSET$','LOWRD','LOOP','LONG','LOINT','LOG_WRITE','LOGB',
+ 'LOG2','LOG10','LOG','LOCAL','LOC','LL_UPDATEBYNAME','LL_UPDATE','LL_TOSTRING',
+ 'LL_TOFILE','LL_NAME','LL_GETITEM','LL_GETBYNUMBER','LL_FROMFILE','LL_FREE','LL_FINDLAST','LL_FINDBYNAME',
+ 'LL_FINDBYDATA','LL_DELETELIKE','LL_DELETEBYNAME','LL_DELETE','LL_DATABYNAME','LL_DATA','LL_COUNT','LL_ADD',
+ 'LISTBOX','LINE','LIBRARY_EXISTS','LIB','LEN','LEFT$','LEFT','LCASE$',
+ 'LBOUND','LABEL','KILL','JOIN$','ITERATE','ISWINDOW','ISUNICODE','ISTRUE',
+ 'ISODD','ISLIKE','ISFALSE','ISEVEN','IP_TOSTRING','IP_ADDR','INTERNALINFO','INTEGER',
+ 'INT','INSTR','INSIDE','INPUTBOX$','INI_SETKEY','INI_GETSECTIONSLIST','INI_GETSECTIONKEYLIST','INI_GETKEY',
+ 'INET_URLDOWNLOAD','INET_PING','INET_OPENDIALUPDIALOG','INET_GETSTATE','INET_GETREMOTEMACADDRESS','INET_GETIP','INET_GETCONNECTIONMODE','INCR',
+ 'IN','IMAGE','IIF$','IIF','IF','ICRYPTO_TESTSHA1','ICRYPTO_TESTMD5','ICRYPTO_TESTCRC32',
+ 'ICRYPTO_TESTCRC16','ICRYPTO_STRING2ASCII','ICRYPTO_SHA1','ICRYPTO_MD5','ICRYPTO_ENCRYPTRIJNDAEL','ICRYPTO_ENCRYPTRC4','ICRYPTO_DECRYPTRIJNDAEL','ICRYPTO_DECRYPTRC4',
+ 'ICRYPTO_CRC32','ICRYPTO_CRC16','ICRYPTO_BYTEXOR','ICRYPTO_BIN2ASCII','ICRYPTO_ASCII2STRING','ICRYPTO_ASCII2BIN','HOST_ADDR','HOSTNAME_TOIP',
+ 'HOSTIP_TONAME','HIWRD','HIINT','HEX$','HASH','HANDLE','GUIDTXT$','GUID$',
+ 'GRAPHIC','GLVOID','GLUSHORT','GLUINT','GLUBYTE','GLSIZEI','GLSHORT','GLOBAL',
+ 'GLINT','GLFLOAT','GLENUM','GLDOUBLE','GLCLAMPF','GLCLAMPD','GLBYTE','GLBOOLEAN',
+ 'GLBITFIELD','GETWINDOWMULTIKEYSTATE','GETWINDOWKEYSTATE','GETTICKCOUNT','GETS','GETMULTIASYNCKEYSTATE','GETMESSAGE','GETCURRENTINSTANCE',
+ 'GETAT','GETASYNCKEYSTATE','GET','FUNCTION_NPARAMS','FUNCTION_EXISTS','FUNCTION_CPARAMS','FUNCTION','FTP_SETSTRING',
+ 'FTP_SETSERVERDIR','FTP_SETNUMBER','FTP_SETMODE','FTP_SETLOGFILE','FTP_SETLOCALDIR','FTP_QUIT','FTP_PUTFILE','FTP_GETSTRING',
+ 'FTP_GETSERVERDIR','FTP_GETNUMBER','FTP_GETLOCALDIR','FTP_GETLIST','FTP_GETFILE','FTP_GETERRORSTRING','FTP_GETERRORNUMBER','FTP_FINISHED',
+ 'FTP_EXTRACT','FTP_DELFILE','FTP_CONNECT','FTP_COMMAND','FRAME','FRAC','FORMAT$','FOR',
+ 'FONT_LIST','FONT_CREATE','FONT','FOCUS','FLUSH','FIX','FILE_SIZE','FILE_SHELLDELETE',
+ 'FILE_SHELLCOPY','FILE_SETDATETIME','FILE_SEEK','FILE_SAVE','FILE_RENAME','FILE_PUT','FILE_PATHSPLIT','FILE_OPEN',
+ 'FILE_LOF','FILE_LOAD','FILE_LINEPRINT','FILE_LINEINPUT','FILE_KILL','FILE_GETVERSIONSTRING','FILE_GETVERSION','FILE_GETTIME',
+ 'FILE_GETDATETIMESTAMP','FILE_GETDATETIME','FILE_GETDATE','FILE_GET','FILE_EXISTS','FILE_EOF','FILE_COPY','FILE_CLOSE',
+ 'FILE_CHANGED','FILE_APPEND','FACTORIAL','EXTRACT$','EXT','EXPORT','EXP2','EXP10',
+ 'EXP','EXIT','EVAL_STRING','EVAL_SETSTRING','EVAL_SETNUMBER','EVAL_MATH','EVAL_LINKEXT','EVAL_GETSTRING',
+ 'EVAL_GETNUMBER','EVAL_ERRORGETTOKEN','EVAL_ERRORDESCRIPTION','EVAL_ERRORCLEAR','EVAL','ERRCLEAR','ERR','ENGINE_GETCURRENTTOKEN',
+ 'ENDIF','END','ENABLE','ELSEIF','ELSE','ECHO','DWORD','DT_YEAR',
+ 'DT_TIMETOSEC','DT_TIMESUBSECONDS','DT_TIMEFORMAT','DT_TIMEADDSECONDS','DT_SETTIMESEPARATOR','DT_SETDATESEPARATOR','DT_SETDATECENTURY','DT_SECTOTIME',
+ 'DT_SECTODATE','DT_SECOND','DT_MONTH','DT_MINUTE','DT_LASTDAYOFMONTH','DT_ISVALIDDATE','DT_ISLEAPYEAR','DT_HOUR',
+ 'DT_GETWEEKDAYNAME','DT_GETWEEKDAY','DT_GETTIMESTAMP','DT_GETTIMESEPARATOR','DT_GETMONTHNAME','DT_GETDATESEPARATOR','DT_GETDATECENTURY','DT_DAY',
+ 'DT_DATETOSEC','DT_DATETIMESUBSECONDS','DT_DATETIMEADDSECONDS','DT_DATESUBDAYS','DT_DATEFORMAT','DT_DATEDIFF','DT_DATEADDDAYS','DT_COOKIEDATE',
+ 'DRAW','DOUBLE','DOEVENTS','DO','DISABLE','DIR_REMOVE','DIR_MAKEALL','DIR_MAKE',
+ 'DIR_LISTARRAY','DIR_LIST','DIR_ISEMPTY','DIR_ISDIR','DIR_GETCURRENT','DIR_EXISTS','DIR_CHANGEDRIVE','DIR_CHANGE',
+ 'DIM','DICTIONARY_MEMINFO','DICTIONARY_LISTKEYS','DICTIONARY_FREE','DICTIONARY_FIND','DICTIONARY_EXISTS','DICTIONARY_CREATE','DICTIONARY_COUNT',
+ 'DICTIONARY_ADD','DIALOG_STOPEVENTS','DIALOG_SAVEFILE','DIALOG_OPENFILE','DIALOG_GETCONTROL','DIALOG_CHOOSECOLOR','DIALOG_BROWSEFORFOLDER','DIALOG',
+ 'DESKTOP','DESCENDING','DESCEND','DELETEOBJECT','DELETE','DEGTORAD','DECR','DECLARE',
+ 'DATE$','CVWRD','CVS','CVQ','CVL','CVI','CVE','CVDWD',
+ 'CVD','CVCUX','CVCUR','CVBYT','CURRENCY','CUR','CSET$','CSCH',
+ 'CSC','CRYPTO_GETPROVIDERTYPESCOUNT','CRYPTO_GETPROVIDERSCOUNT','CRYPTO_GETDEFAULTPROVIDER','CRYPTO_GENRANDOMSTRING','CRYPTO_ENUMPROVIDERTYPES','CRYPTO_ENUMPROVIDERS','CRYPTO_ENCRYPT',
+ 'CRYPTO_DECRYPT','CREATEFONT','COTH','COTAN','COSH','COS','CONTROL_SETTEXT','CONTROL_GETTEXT',
+ 'CONTROL_GETNUMBER','CONTROL','CONST','CONSOLE_WRITELINE','CONSOLE_WRITE','CONSOLE_WAITKEY','CONSOLE_SHOWWINDOW','CONSOLE_SHOWCURSOR',
+ 'CONSOLE_SETTITLE','CONSOLE_SETTEXTATTRIBUTE','CONSOLE_SETSTDHANDLE','CONSOLE_SETSCREENBUFFERSIZE','CONSOLE_SETPROGRESSBARCHAR','CONSOLE_SETOUTPUTMODE','CONSOLE_SETOUTPUTCP','CONSOLE_SETINPUTMODE',
+ 'CONSOLE_SETFILEAPISTOOEM','CONSOLE_SETFILEAPISTOANSI','CONSOLE_SETCURSORSIZE','CONSOLE_SETCURSORPOSITION','CONSOLE_SETCP','CONSOLE_SETACTIVESCREENBUFFER','CONSOLE_SCROLLWINDOW','CONSOLE_SCROLLBUFFERONEROW',
+ 'CONSOLE_SCROLLBUFFER','CONSOLE_SAVESCREEN','CONSOLE_RESTORESCREEN','CONSOLE_READLINE','CONSOLE_READ','CONSOLE_PROGRESSBAR','CONSOLE_PRINTLINE','CONSOLE_PRINTAT',
+ 'CONSOLE_PRINT','CONSOLE_NORMALSCREEN','CONSOLE_LINE','CONSOLE_INKEYB','CONSOLE_INKEY','CONSOLE_HIDECURSOR','CONSOLE_GETTITLE','CONSOLE_GETTEXTATTRIBUTE',
+ 'CONSOLE_GETSTDHANDLE','CONSOLE_GETSIZEY','CONSOLE_GETSIZEX','CONSOLE_GETPROGRESSBARCHAR','CONSOLE_GETOUTPUTMODE','CONSOLE_GETOUTPUTCP','CONSOLE_GETNUMBEROFMOUSEBUTTONS','CONSOLE_GETINPUTMODE',
+ 'CONSOLE_GETCURSORY','CONSOLE_GETCURSORX','CONSOLE_GETCURSORSIZE','CONSOLE_GETCURRENTFONTINDEX','CONSOLE_GETCP','CONSOLE_GENERATECTRLEVENT','CONSOLE_FULLSCREEN','CONSOLE_FREE',
+ 'CONSOLE_FOREGROUNDRGB','CONSOLE_ENABLECTRLC','CONSOLE_DISABLECTRLC','CONSOLE_CREATESCREENBUFFER','CONSOLE_COLORAT','CONSOLE_CLS','CONSOLE_BOX','CONSOLE_BACKGROUNDRGB',
+ 'CONSOLE_ATTACH','CONSOLE_AREFILEAPISANSI','CONSOLE_ALLOC','COM_VARIANTINIT','COM_VARIANTCOPY','COM_VARIANTCLEAR','COM_SUCCEEDED','COM_STRINGFROMCLSID',
+ 'COM_RELEASE','COM_QUERYINTERFACE','COM_PROGIDFROMCLSID','COM_ISEQUALIID','COM_ISEQUALGUID','COM_ISEQUALCLSID','COM_GETOBJECT','COM_GETENGINEGUID',
+ 'COM_EXECUTE','COM_DISPLAYERROR','COM_CREATEOBJECT','COM_CLSIDFROMSTRING','COM_CLSIDFROMPROGID','COM_BUILDVARIANT','COMBOBOX','COMBINATIONS',
+ 'COLOR','CLIPBOARD_SETTEXT','CLIPBOARD_GETTEXT','CLIENT','CLEARMESSAGES','CHR$','CHOOSE$','CHOOSE',
+ 'CHECKBOX','CHECK3STATE','CHECK','CGI_WRITELOGFILE','CGI_WRITE','CGI_URLDECODESTRING','CGI_UPLOADFILESTIME','CGI_UPLOADFILESNUMBER',
+ 'CGI_UPLOADFILESIZE','CGI_STARTSESSION','CGI_SETSESSIONVARIABLE','CGI_RESETDEFAULTSETTINGS','CGI_REMOVESPECIALCHARSPREFIX','CGI_REMOVEQUOTE','CGI_READ','CGI_LOADCONFIGFILE',
+ 'CGI_HEADER','CGI_GETSESSIONVARIABLE','CGI_GETREQUESTMETHOD','CGI_GETQUERYVALUE','CGI_GETCURRENTSESSION','CGI_GETCURRENTGUID','CGI_ENVIRON','CGI_CFGSETOPTION',
+ 'CGI_CFGGETOPTION','CGI_ADDSPECIALCHARSPREFIX','CGI_ADDQUOTE','CEIL','CASE','CALL','BYVAL','BYTE',
+ 'BYREF','BYCMD','BUTTON','BUNDLE_SETSCRIPTPARAMETERS','BUNDLE_SETSCRIPTNAME','BUNDLE_SETFLAGOBFUSCATEMAINSCRIPT','BUNDLE_SETFLAGDELETEAFTERRUN','BUNDLE_SETFLAGCOMPRESSALLFILES',
+ 'BUNDLE_SETFLAGASKBEFOREEXTRACT','BUNDLE_SETEXTRACTIONFOLDER','BUNDLE_SETCREATIONFOLDER','BUNDLE_SETBUNDLENAME','BUNDLE_RESET','BUNDLE_MAKE','BUNDLE_BUILDER','BUNDLE_ADDFOLDER',
+ 'BUNDLE_ADDFILE','BOUNDCHECK','BIN$','BIFF_WRITETEXT','BIFF_WRITENUMBER','BIFF_WRITEDATE','BIFF_SETROWHEIGHT','BIFF_SETCOLWIDTH',
+ 'BIFF_SETBUFFER','BIFF_CREATEFILE','BIFF_CLOSEFILE','BETWEEN','BEEP','BAR','ATTACH','ATN',
+ 'AT','ASSIGN','ASCIZ','ASCIIZ','ASCII2UNICODE','ASCENDING','ASCEND','ASC',
+ 'AS','ARRAY','ARCTANH','ARCSINH','ARCSIN','ARCSECH','ARCSEC','ARCCSCH',
+ 'ARCCSC','ARCCOTH','ARCCOT','ARCCOSH','ARCCOS','APP_TIMER','APP_SOURCEPATH','APP_SOURCENAME',
+ 'APP_SOURCEFULLNAME','APP_PATH','APP_NAME','APP_LISTVARIABLES','APP_LISTKEYWORDS','APP_LISTFUNCTIONS','APP_LISTEQUATES','APP_INCLUDEPATH',
+ 'APP_GETMODULEFULLPATH','APP_COUNTER','APPEND','ANY','ANIMATE_STOP','ANIMATE_PLAY','ANIMATE_OPEN','AND',
+ 'ALIAS','ALERT','ADD','ACODE$','ABS','%DEF','#MINVERSION','#IF',
+ '#ENDIF','#ELSEIF','#ELSE','#DEFAULT','#DEF','SQLWRITEPRIVATEPROFILESTRING','SQLWRITEFILEDSN','SQLWRITEDSNTOINI',
+ 'SQLVALIDDSN','SQLTRANSACT','SQLTABLES','SQLTABLEPRIVILEGES','SQLSTATISTICS','SQLSPECIALCOLUMNS','SQLSETSTMTOPTION','SQLSETSTMTATTR',
+ 'SQLSETSCROLLOPTIONS','SQLSETPOS','SQLSETPARAM','SQLSETENVATTR','SQLSETDESCREC','SQLSETDESCFIELD','SQLSETCURSORNAME','SQLSETCONNECTOPTION',
+ 'SQLSETCONNECTATTR','SQLSETCONFIGMODE','SQLROWCOUNT','SQLREMOVETRANSLATOR','SQLREMOVEDSNFROMINI','SQLREMOVEDRIVERMANAGER','SQLREMOVEDRIVER','SQLREADFILEDSN',
+ 'SQLPUTDATA','SQLPROCEDURES','SQLPROCEDURECOLUMNS','SQLPRIMARYKEYS','SQLPREPARE','SQLPOSTINSTALLERERROR','SQLPARAMOPTIONS','SQLPARAMDATA',
+ 'SQLNUMRESULTCOLS','SQLNUMPARAMS','SQLNATIVESQL','SQLMORERESULTS','SQLMANAGEDATASOURCES','SQLINSTALLTRANSLATOREX','SQLINSTALLERERROR','SQLINSTALLDRIVERMANAGER',
+ 'SQLINSTALLDRIVEREX','SQLGETTYPEINFO','SQLGETTRANSLATOR','SQLGETSTMTOPTION','SQLGETSTMTATTR','SQLGETPRIVATEPROFILESTRING','SQLGETINSTALLEDDRIVERS','SQLGETINFO',
+ 'SQLGETFUNCTIONS','SQLGETENVATTR','SQLGETDIAGREC','SQLGETDIAGFIELD','SQLGETDESCREC','SQLGETDESCFIELD','SQLGETDATA','SQLGETCURSORNAME',
+ 'SQLGETCONNECTOPTION','SQLGETCONNECTATTR','SQLGETCONFIGMODE','SQLFREESTMT','SQLFREEHANDLE','SQLFREEENV','SQLFREECONNECT','SQLFOREIGNKEYS',
+ 'SQLFETCHSCROLL','SQLFETCH','SQLEXTENDEDFETCH','SQLEXECUTE','SQLEXECDIRECT','SQLERROR','SQLENDTRAN','SQLDRIVERS',
+ 'SQLDRIVERCONNECT','SQLDISCONNECT','SQLDESCRIBEPARAM','SQLDESCRIBECOL','SQLDATASOURCES','SQLCREATEDATASOURCE','SQLCOPYDESC','SQLCONNECT',
+ 'SQLCONFIGDRIVER','SQLCONFIGDATASOURCE','SQLCOLUMNS','SQLCOLUMNPRIVILEGES','SQLCOLATTRIBUTES','SQLCOLATTRIBUTE','SQLCLOSECURSOR','SQLCANCEL',
+ 'SQLBULKOPERATIONS','SQLBROWSECONNECT','SQLBINDPARAMETER','SQLBINDPARAM','SQLBINDCOL','SQLALLOCSTMT','SQLALLOCHANDLE','SQLALLOCENV',
+ 'SQLALLOCCONNECT','ODBCWRONGDRIVER','ODBCWRITEPRIVATEPROFILESTRING','ODBCWRITEFILEDSN','ODBCWRITEDSNTOINI','ODBCVALIDDSN','ODBCUPDATERECORD','ODBCUPDATEBYBOOKMARK',
+ 'ODBCUNLOCKRECORD','ODBCUNBINDCOLUMNS','ODBCUNBINDCOL','ODBCTABLESCOUNT','ODBCTABLES','ODBCTABLEPRIVILEGESCOUNT','ODBCTABLEPRIVILEGES','ODBCSUPPORTS',
+ 'ODBCSTATTABLESCHEMANAME','ODBCSTATTABLEPAGES','ODBCSTATTABLECATALOGNAME','ODBCSTATTABLECARDINALITY','ODBCSTATISTICSCOUNT','ODBCSTATISTICS','ODBCSTATINDEXSORTSEQUENCE','ODBCSTATINDEXSCHEMANAME',
+ 'ODBCSTATINDEXQUALIFIER','ODBCSTATINDEXPAGES','ODBCSTATINDEXFILTERCONDITION','ODBCSTATINDEXCOLUMNORDINALPOSITION','ODBCSTATINDEXCOLUMNNAME','ODBCSTATINDEXCATALOGNAME','ODBCSTATINDEXCARDINALITY','ODBCSTATINDEXALLOWDUPLICATES',
+ 'ODBCSPECIALCOLUMNSCOUNT','ODBCSPECIALCOLUMNS','ODBCSETTXNISOLATION','ODBCSETTRANSLATELIB','ODBCSETTRACEFILE','ODBCSETTRACE','ODBCSETSTMTUSEBOOKMARKS','ODBCSETSTMTSIMULATECURSOR',
+ 'ODBCSETSTMTROWSTATUSPTR','ODBCSETSTMTROWSFETCHEDPTR','ODBCSETSTMTROWOPERATIONPTR','ODBCSETSTMTROWBINDTYPE','ODBCSETSTMTROWBINDOFFSETPTR','ODBCSETSTMTROWARRAYSIZE','ODBCSETSTMTRETRIEVEDATA','ODBCSETSTMTQUERYTIMEOUT',
+ 'ODBCSETSTMTPARAMSTATUSPTR','ODBCSETSTMTPARAMSPROCESSEDPTR','ODBCSETSTMTPARAMSETSIZE','ODBCSETSTMTPARAMOPERATIONPTR','ODBCSETSTMTPARAMBINDTYPE','ODBCSETSTMTPARAMBINDOFFSETPTR','ODBCSETSTMTNOSCAN','ODBCSETSTMTMETADATAID',
+ 'ODBCSETSTMTMAXROWS','ODBCSETSTMTMAXLENGTH','ODBCSETSTMTKEYSETSIZE','ODBCSETSTMTFETCHBOOKMARKPTR','ODBCSETSTMTENABLEAUTOIPD','ODBCSETSTMTCURSORTYPE','ODBCSETSTMTCURSORSENSITIVITY','ODBCSETSTMTCURSORSCROLLABLE',
+ 'ODBCSETSTMTCONCURRENCY','ODBCSETSTMTATTR','ODBCSETSTMTASYNCENABLE','ODBCSETSTMTAPPROWDESC','ODBCSETSTMTAPPPARAMDESC','ODBCSETSTATICCURSOR','ODBCSETROWVERCONCURRENCY','ODBCSETRESULT',
+ 'ODBCSETRELATIVEPOSITION','ODBCSETREADONLYCONCURRENCY','ODBCSETQUIETMODE','ODBCSETPOSITION','ODBCSETPOS','ODBCSETPACKETMODE','ODBCSETOPTIMISTICCONCURRENCY','ODBCSETODBCCURSORS',
+ 'ODBCSETMULTIUSERKEYSETCURSOR','ODBCSETMETADATAID','ODBCSETLOGINTIMEOUT','ODBCSETLOCKCONCURRENCY','ODBCSETKEYSETDRIVENCURSOR','ODBCSETFORWARDONLYCURSOR','ODBCSETENVOUTPUTNTS','ODBCSETENVODBCVERSION',
+ 'ODBCSETENVCPMATCH','ODBCSETENVCONNECTIONPOOLING','ODBCSETENVATTR','ODBCSETDYNAMICCURSOR','ODBCSETDESCREC','ODBCSETDESCFIELD','ODBCSETCURSORTYPE','ODBCSETCURSORSENSITIVITY',
+ 'ODBCSETCURSORSCROLLABILITY','ODBCSETCURSORNAME','ODBCSETCURSORLOCKTYPE','ODBCSETCURSORKEYSETSIZE','ODBCSETCURSORCONCURRENCY','ODBCSETCURRENTCATALOG','ODBCSETCONNECTIONTIMEOUT','ODBCSETCONNECTATTR',
+ 'ODBCSETCONFIGMODE','ODBCSETCONCURVALUESCONCURRENCY','ODBCSETAUTOCOMMITON','ODBCSETAUTOCOMMITOFF','ODBCSETAUTOCOMMIT','ODBCSETASYNCENABLE','ODBCSETACCESSMODE','ODBCSETABSOLUTEPOSITION',
+ 'ODBCROWCOUNT','ODBCROLLBACKTRAN','ODBCROLLBACKENVTRAN','ODBCROLLBACKDBCTRAN','ODBCRESULT','ODBCRESETPARAMS','ODBCREMOVETRANSLATOR','ODBCREMOVEDSNFROMINI',
+ 'ODBCREMOVEDRIVERMANAGER','ODBCREMOVEDRIVER','ODBCREFRESHRECORD','ODBCRECORDCOUNT','ODBCREADFILEDSN','ODBCQUOTEDIDENTIFIERCASE','ODBCPUTDATA','ODBCPROCEDURESCOUNT',
+ 'ODBCPROCEDURES','ODBCPROCEDURECOLUMNSCOUNT','ODBCPROCEDURECOLUMNS','ODBCPRIMARYKEYSCOUNT','ODBCPRIMARYKEYS','ODBCPREPARE','ODBCPOSTINSTALLERERROR','ODBCPARAMDATA',
+ 'ODBCOPENSTMT','ODBCOPENCONNECTION','ODBCNUMRESULTCOLS','ODBCNUMPARAMS','ODBCNATIVESQL','ODBCMOVEPREVIOUS','ODBCMOVENEXT','ODBCMOVELAST',
+ 'ODBCMOVEFIRST','ODBCMOVE','ODBCMORERESULTS','ODBCMANAGEDATASOURCES','ODBCLOCKRECORD','ODBCINSTALLTRANSLATOREX','ODBCINSTALLERERROR','ODBCINSTALLDRIVERMANAGER',
+ 'ODBCINSTALLDRIVEREX','ODBCGETXOPENCLIYEAR','ODBCGETUSERNAME','ODBCGETUNION','ODBCGETTYPEINFOCOUNT','ODBCGETTYPEINFO','ODBCGETTXNISOLATIONOPTION','ODBCGETTXNISOLATION',
+ 'ODBCGETTXNCAPABLE','ODBCGETTRANSLATOR','ODBCGETTRANSLATELIB','ODBCGETTRACEFILE','ODBCGETTRACE','ODBCGETTIMEDATEFUNCTIONS','ODBCGETTIMEDATEDIFFINTERVALS','ODBCGETTIMEDATEADDINTERVALS',
+ 'ODBCGETTABLETERM','ODBCGETSYSTEMFUNCTIONS','ODBCGETSUBQUERIES','ODBCGETSTRINGFUNCTIONS','ODBCGETSTMTUSEBOOKMARKS','ODBCGETSTMTSQLSTATE','ODBCGETSTMTSIMULATECURSOR','ODBCGETSTMTROWSTATUSPTR',
+ 'ODBCGETSTMTROWSFETCHEDPTR','ODBCGETSTMTROWOPERATIONPTR','ODBCGETSTMTROWNUMBER','ODBCGETSTMTROWBINDTYPE','ODBCGETSTMTROWBINDOFFSETPTR','ODBCGETSTMTROWARRAYSIZE','ODBCGETSTMTRETRIEVEDATA','ODBCGETSTMTQUERYTIMEOUT',
+ 'ODBCGETSTMTPARAMSTATUSPTR','ODBCGETSTMTPARAMSPROCESSEDPTR','ODBCGETSTMTPARAMSETSIZE','ODBCGETSTMTPARAMOPERATIONPTR','ODBCGETSTMTPARAMBINDTYPE','ODBCGETSTMTPARAMBINDOFFSETPTR','ODBCGETSTMTNOSCAN','ODBCGETSTMTMETADATAID',
+ 'ODBCGETSTMTMAXROWS','ODBCGETSTMTMAXLENGTH','ODBCGETSTMTKEYSETSIZE','ODBCGETSTMTIMPROWDESC','ODBCGETSTMTIMPPARAMDESC','ODBCGETSTMTFETCHBOOKMARKPTR','ODBCGETSTMTERRORINFO','ODBCGETSTMTENABLEAUTOIPD',
+ 'ODBCGETSTMTCURSORTYPE','ODBCGETSTMTCURSORSENSITIVITY','ODBCGETSTMTCURSORSCROLLABLE','ODBCGETSTMTCONCURRENCY','ODBCGETSTMTATTR','ODBCGETSTMTASYNCENABLE','ODBCGETSTMTAPPROWDESC','ODBCGETSTMTAPPPARAMDESC',
+ 'ODBCGETSTATICCURSORATTRIBUTES2','ODBCGETSTATICCURSORATTRIBUTES1','ODBCGETSTATEMENTSQLSTATE','ODBCGETSTATEMENTERRORINFO','ODBCGETSTANDARDCLICONFORMANCE','ODBCGETSQLSTATE','ODBCGETSQLCONFORMANCE','ODBCGETSQL92VALUEEXPRESSIONS',
+ 'ODBCGETSQL92STRINGFUNCTIONS','ODBCGETSQL92ROWVALUECONSTRUCTOR','ODBCGETSQL92REVOKE','ODBCGETSQL92RELATIONALJOINOPERATORS','ODBCGETSQL92PREDICATES','ODBCGETSQL92NUMERICVALUEFUNCTIONS','ODBCGETSQL92GRANT','ODBCGETSQL92FOREIGNKEYUPDATERULE',
+ 'ODBCGETSQL92FOREIGNKEYDELETERULE','ODBCGETSQL92DATETIMEFUNCTIONS','ODBCGETSPECIALCHARACTERS','ODBCGETSERVERNAME','ODBCGETSEARCHPATTERNESCAPE','ODBCGETSCROLLOPTIONS','ODBCGETSCHEMAUSAGE','ODBCGETSCHEMATERM',
+ 'ODBCGETROWUPDATES','ODBCGETQUIETMODE','ODBCGETPROCEDURETERM','ODBCGETPROCEDURESSUPPORT','ODBCGETPRIVATEPROFILESTRING','ODBCGETPOSOPERATIONS','ODBCGETPARAMARRAYSELECTS','ODBCGETPARAMARRAYROWCOUNTS',
+ 'ODBCGETPACKETMODE','ODBCGETOUTERJOINS','ODBCGETORDERBYCOLUMNSINSELECT','ODBCGETOJCAPABILITIES','ODBCGETODBCVER','ODBCGETODBCINTERFACECONFORMANCE','ODBCGETODBCCURSORS','ODBCGETNUMERICFUNCTIONS',
+ 'ODBCGETNULLCOLLATION','ODBCGETNONNULLABLECOLUMNS','ODBCGETNEEDLONGDATALEN','ODBCGETMULTRESULTSETS','ODBCGETMULTIPLEACTIVETXN','ODBCGETMETADATAID','ODBCGETMAXUSERNAMELEN','ODBCGETMAXTABLESINSELECT',
+ 'ODBCGETMAXTABLENAMELEN','ODBCGETMAXSTATEMENTLEN','ODBCGETMAXSCHEMANAMELEN','ODBCGETMAXROWSIZEINCLUDESLONG','ODBCGETMAXROWSIZE','ODBCGETMAXPROCEDURENAMELEN','ODBCGETMAXINDEXSIZE','ODBCGETMAXIDENTIFIERLEN',
+ 'ODBCGETMAXDRIVERCONNECTIONS','ODBCGETMAXCURSORNAMELEN','ODBCGETMAXCONCURRENTACTIVITIES','ODBCGETMAXCOLUMNSINTABLE','ODBCGETMAXCOLUMNSINSELECT','ODBCGETMAXCOLUMNSINORDERBY','ODBCGETMAXCOLUMNSININDEX','ODBCGETMAXCOLUMNSINGROUPBY',
+ 'ODBCGETMAXCOLUMNNAMELEN','ODBCGETMAXCHARLITERALLEN','ODBCGETMAXCATALOGNAMELEN','ODBCGETMAXBINARYLITERALLEN','ODBCGETMAXASYNCCONCURRENTSTATEMENTS','ODBCGETLONGVARCHARDATABYCOLNAME','ODBCGETLONGVARCHARDATA','ODBCGETLOGINTIMEOUT',
+ 'ODBCGETLIKEESCAPECLAUSE','ODBCGETKEYWORDS','ODBCGETKEYSETCURSORATTRIBUTES2','ODBCGETKEYSETCURSORATTRIBUTES1','ODBCGETINTEGRITY','ODBCGETINSTALLERERRORMESSAGE','ODBCGETINSTALLERERRORCODE','ODBCGETINSTALLEDDRIVERS',
+ 'ODBCGETINSERTSTATEMENT','ODBCGETINFOSTR','ODBCGETINFOSCHEMAVIEWS','ODBCGETINFOLONG','ODBCGETINFOINT','ODBCGETINFO','ODBCGETINDEXKEYWORDS','ODBCGETIMPROWDESCREC',
+ 'ODBCGETIMPROWDESCFIELDTYPE','ODBCGETIMPROWDESCFIELDSCALE','ODBCGETIMPROWDESCFIELDPRECISION','ODBCGETIMPROWDESCFIELDOCTETLENGTH','ODBCGETIMPROWDESCFIELDNULLABLE','ODBCGETIMPROWDESCFIELDNAME','ODBCGETIMPROWDESCFIELD','ODBCGETIMPPARAMDESCREC',
+ 'ODBCGETIMPPARAMDESCFIELDTYPE','ODBCGETIMPPARAMDESCFIELDSCALE','ODBCGETIMPPARAMDESCFIELDPRECISION','ODBCGETIMPPARAMDESCFIELDOCTETLENGTH','ODBCGETIMPPARAMDESCFIELDNULLABLE','ODBCGETIMPPARAMDESCFIELDNAME','ODBCGETIMPPARAMDESCFIELD','ODBCGETIDENTIFIERQUOTECHAR',
+ 'ODBCGETIDENTIFIERCASE','ODBCGETGROUPBY','ODBCGETFUNCTIONS','ODBCGETFORWARDONLYCURSORATTRIBUTES2','ODBCGETFORWARDONLYCURSORATTRIBUTES1','ODBCGETFILEUSAGE','ODBCGETEXPRESSIONSINORDERBY','ODBCGETERRORINFO',
+ 'ODBCGETENVSQLSTATE','ODBCGETENVOUTPUTNTS','ODBCGETENVODBCVERSION','ODBCGETENVIRONMENTSQLSTATE','ODBCGETENVIRONMENTERRORINFO','ODBCGETENVERRORINFO','ODBCGETENVCPMATCH','ODBCGETENVCONNECTIONPOOLING',
+ 'ODBCGETENVATTR','ODBCGETDYNAMICCURSORATTRIBUTES2','ODBCGETDYNAMICCURSORATTRIBUTES1','ODBCGETDROPVIEW','ODBCGETDROPTRANSLATION','ODBCGETDROPTABLE','ODBCGETDROPSCHEMA','ODBCGETDROPDOMAIN',
+ 'ODBCGETDROPCOLLATION','ODBCGETDROPCHARACTERSET','ODBCGETDROPASSERTION','ODBCGETDRIVERVER','ODBCGETDRIVERODBCVER','ODBCGETDRIVERNAME','ODBCGETDRIVERMANAGERINSTALLPATH','ODBCGETDRIVERHLIB',
+ 'ODBCGETDRIVERHENV','ODBCGETDRIVERHDBC','ODBCGETDMVERMINOR','ODBCGETDMVERMAJOR','ODBCGETDMVER','ODBCGETDIAGREC','ODBCGETDIAGFIELD','ODBCGETDESCSQLSTATE',
+ 'ODBCGETDESCRIPTORSQLSTATE','ODBCGETDESCRIPTORERRORINFO','ODBCGETDESCRIBEPARAMETER','ODBCGETDESCREC','ODBCGETDESCFIELD','ODBCGETDESCERRORINFO','ODBCGETDEFAULTTXNISOLATION','ODBCGETDDLINDEX',
+ 'ODBCGETDBMSVER','ODBCGETDBMSNAME','ODBCGETDBCSQLSTATE','ODBCGETDBCERRORINFO','ODBCGETDATETIMELITERALS','ODBCGETDATASTRINGBYCOLNAME','ODBCGETDATASTRING','ODBCGETDATASOURCEREADONLY',
+ 'ODBCGETDATASOURCENAME','ODBCGETDATAEXTENSIONS','ODBCGETDATABASENAME','ODBCGETDATA','ODBCGETCURSORTYPE','ODBCGETCURSORSENSITIVITYSUPPORT','ODBCGETCURSORSENSITIVITY','ODBCGETCURSORSCROLLABILITY',
+ 'ODBCGETCURSORROLLBACKBEHAVIOR','ODBCGETCURSORNAME','ODBCGETCURSORLOCKTYPE','ODBCGETCURSORKEYSETSIZE','ODBCGETCURSORCONCURRENCY','ODBCGETCURSORCOMMITBEHAVIOR','ODBCGETCURRENTCATALOG','ODBCGETCREATEVIEW',
+ 'ODBCGETCREATETRANSLATION','ODBCGETCREATETABLE','ODBCGETCREATESCHEMA','ODBCGETCREATEDOMAIN','ODBCGETCREATECOLLATION','ODBCGETCREATECHARACTERSET','ODBCGETCREATEASSERTION','ODBCGETCORRELATIONNAME',
+ 'ODBCGETCONVERTVARCHAR','ODBCGETCONVERTVARBINARY','ODBCGETCONVERTTINYINT','ODBCGETCONVERTTIMESTAMP','ODBCGETCONVERTTIME','ODBCGETCONVERTSMALLINT','ODBCGETCONVERTREAL','ODBCGETCONVERTNUMERIC',
+ 'ODBCGETCONVERTLONGVARCHAR','ODBCGETCONVERTLONGVARBINARY','ODBCGETCONVERTINTERVALYEARMONTH','ODBCGETCONVERTINTERVALDAYTIME','ODBCGETCONVERTINTEGER','ODBCGETCONVERTFUNCTIONS','ODBCGETCONVERTFLOAT','ODBCGETCONVERTDOUBLE',
+ 'ODBCGETCONVERTDECIMAL','ODBCGETCONVERTDATE','ODBCGETCONVERTCHAR','ODBCGETCONVERTBIT','ODBCGETCONVERTBINARY','ODBCGETCONVERTBIGINT','ODBCGETCONNECTIONTIMEOUT','ODBCGETCONNECTIONSQLSTATE',
+ 'ODBCGETCONNECTIONERRORINFO','ODBCGETCONNECTIONDEAD','ODBCGETCONNECTATTR','ODBCGETCONFIGMODE','ODBCGETCONCATNULLBEHAVIOR','ODBCGETCOLUMNALIAS','ODBCGETCOLLATIONSEQ','ODBCGETCATALOGUSAGE',
+ 'ODBCGETCATALOGTERM','ODBCGETCATALOGNAMESEPARATOR','ODBCGETCATALOGNAME','ODBCGETCATALOGLOCATION','ODBCGETBOOKMARKPERSISTENCE','ODBCGETBATCHSUPPORT','ODBCGETBATCHROWCOUNT','ODBCGETAUTOIPD',
+ 'ODBCGETAUTOCOMMIT','ODBCGETASYNCMODE','ODBCGETASYNCENABLE','ODBCGETALTERTABLE','ODBCGETALTERDOMAIN','ODBCGETAGGREGATEFUNCTIONS','ODBCGETACTIVEENVIRONMENTS','ODBCGETACCESSMODE',
+ 'ODBCGETACCESSIBLETABLES','ODBCGETACCESSIBLEPROCEDURES','ODBCFREESTMT','ODBCFREEHANDLE','ODBCFREEENV','ODBCFREEDESC','ODBCFREEDBC','ODBCFREECONNECT',
+ 'ODBCFOREIGNKEYSCOUNT','ODBCFOREIGNKEYS','ODBCFETCHSCROLL','ODBCFETCHBYBOOKMARK','ODBCFETCH','ODBCEXTENDEDFETCH','ODBCEXECUTE','ODBCEXECDIRECT',
+ 'ODBCERROR','ODBCEOF','ODBCENDTRAN','ODBCDRIVERSCOUNT','ODBCDRIVERS','ODBCDRIVERCONNECT','ODBCDISCONNECT','ODBCDESCRIBEPARAM',
+ 'ODBCDESCRIBECOL','ODBCDELETERECORD','ODBCDELETEBYBOOKMARK','ODBCDATASOURCES','ODBCCREATEDATASOURCE','ODBCCOPYDESC','ODBCCONNECTIONISDEAD','ODBCCONNECTIONISALIVE',
+ 'ODBCCONNECT','ODBCCONFIGDRIVER','ODBCCONFIGDATASOURCE','ODBCCOMMITTRAN','ODBCCOMMITENVTRAN','ODBCCOMMITDBCTRAN','ODBCCOLUPDATABLE','ODBCCOLUNSIGNED',
+ 'ODBCCOLUNNAMED','ODBCCOLUMNSCOUNT','ODBCCOLUMNS','ODBCCOLUMNPRIVILEGESCOUNT','ODBCCOLUMNPRIVILEGES','ODBCCOLUMN','ODBCCOLTYPENAME','ODBCCOLTYPE',
+ 'ODBCCOLTABLENAME','ODBCCOLSEARCHABLE','ODBCCOLSCHEMANAME','ODBCCOLSCALE','ODBCCOLPRECISION','ODBCCOLOCTETLENGTH','ODBCCOLNUMPRECRADIX','ODBCCOLNULLABLE',
+ 'ODBCCOLNAME','ODBCCOLLOCALTYPENAME','ODBCCOLLITERALSUFFIX','ODBCCOLLITERALPREFIX','ODBCCOLLENGTH','ODBCCOLLABEL','ODBCCOLISNULL','ODBCCOLFIXEDPRECSCALE',
+ 'ODBCCOLDISPLAYSIZE','ODBCCOLCOUNT','ODBCCOLCONCISETYPE','ODBCCOLCATALOGNAME','ODBCCOLCASESENSITIVE','ODBCCOLBASETABLENAME','ODBCCOLBASECOLUMNNAME','ODBCCOLAUTOUNIQUEVALUE',
+ 'ODBCCOLATTRIBUTE','ODBCCLOSESTMTCURSOR','ODBCCLOSESTMT','ODBCCLOSECURSOR','ODBCCLOSECONNECTION','ODBCCLEARRESULT','ODBCCANCEL','ODBCBULKOPERATIONS',
+ 'ODBCBROWSECONNECT','ODBCBINDPARAMETER','ODBCBINDCOLTOWORD','ODBCBINDCOLTOTIMESTAMP','ODBCBINDCOLTOTIME','ODBCBINDCOLTOSTRING','ODBCBINDCOLTOSINGLE','ODBCBINDCOLTOQUAD',
+ 'ODBCBINDCOLTONUMERIC','ODBCBINDCOLTOLONG','ODBCBINDCOLTOINTEGER','ODBCBINDCOLTODWORD','ODBCBINDCOLTODOUBLE','ODBCBINDCOLTODECIMAL','ODBCBINDCOLTODATE','ODBCBINDCOLTOCURRENCY',
+ 'ODBCBINDCOLTOBYTE','ODBCBINDCOLTOBIT','ODBCBINDCOLTOBINARY','ODBCBINDCOL','ODBCALLOCSTMT','ODBCALLOCHANDLE','ODBCALLOCENV','ODBCALLOCDESC',
+ 'ODBCALLOCDBC','ODBCALLOCCONNECT','ODBCADDRECORD','GLVIEWPORT','GLVERTEXPOINTER','GLVERTEX4SV','GLVERTEX4S','GLVERTEX4IV',
+ 'GLVERTEX4I','GLVERTEX4FV','GLVERTEX4F','GLVERTEX4DV','GLVERTEX4D','GLVERTEX3SV','GLVERTEX3S','GLVERTEX3IV',
+ 'GLVERTEX3I','GLVERTEX3FV','GLVERTEX3F','GLVERTEX3DV','GLVERTEX3D','GLVERTEX2SV','GLVERTEX2S','GLVERTEX2IV',
+ 'GLVERTEX2I','GLVERTEX2FV','GLVERTEX2F','GLVERTEX2DV','GLVERTEX2D','GLUUNPROJECT','GLUTESSVERTEX','GLUTESSPROPERTY',
+ 'GLUTESSNORMAL','GLUTESSENDPOLYGON','GLUTESSENDCONTOUR','GLUTESSCALLBACK','GLUTESSBEGINPOLYGON','GLUTESSBEGINCONTOUR','GLUSPHERE','GLUSCALEIMAGE',
+ 'GLUQUADRICTEXTURE','GLUQUADRICORIENTATION','GLUQUADRICNORMALS','GLUQUADRICDRAWSTYLE','GLUQUADRICCALLBACK','GLUPWLCURVE','GLUPROJECT','GLUPICKMATRIX',
+ 'GLUPERSPECTIVE','GLUPARTIALDISK','GLUORTHO2D','GLUNURBSSURFACE','GLUNURBSPROPERTY','GLUNURBSCURVE','GLUNURBSCALLBACK','GLUNEXTCONTOUR',
+ 'GLUNEWTESS','GLUNEWQUADRIC','GLUNEWNURBSRENDERER','GLULOOKAT','GLULOADSAMPLINGMATRICES','GLUGETTESSPROPERTY','GLUGETSTRING','GLUGETNURBSPROPERTY',
+ 'GLUERRORSTRING','GLUENDTRIM','GLUENDSURFACE','GLUENDPOLYGON','GLUENDCURVE','GLUDISK','GLUDELETETESS','GLUDELETEQUADRIC',
+ 'GLUDELETENURBSRENDERER','GLUCYLINDER','GLUBUILD2DMIPMAPS','GLUBUILD1DMIPMAPS','GLUBEGINTRIM','GLUBEGINSURFACE','GLUBEGINPOLYGON','GLUBEGINCURVE',
+ 'GLTRANSLATEF','GLTRANSLATED','GLTEXSUBIMAGE2D','GLTEXSUBIMAGE1D','GLTEXPARAMETERIV','GLTEXPARAMETERI','GLTEXPARAMETERFV','GLTEXPARAMETERF',
+ 'GLTEXIMAGE2D','GLTEXIMAGE1D','GLTEXGENIV','GLTEXGENI','GLTEXGENFV','GLTEXGENF','GLTEXGENDV','GLTEXGEND',
+ 'GLTEXENVIV','GLTEXENVI','GLTEXENVFV','GLTEXENVF','GLTEXCOORDPOINTER','GLTEXCOORD4SV','GLTEXCOORD4S','GLTEXCOORD4IV',
+ 'GLTEXCOORD4I','GLTEXCOORD4FV','GLTEXCOORD4F','GLTEXCOORD4DV','GLTEXCOORD4D','GLTEXCOORD3SV','GLTEXCOORD3S','GLTEXCOORD3IV',
+ 'GLTEXCOORD3I','GLTEXCOORD3FV','GLTEXCOORD3F','GLTEXCOORD3DV','GLTEXCOORD3D','GLTEXCOORD2SV','GLTEXCOORD2S','GLTEXCOORD2IV',
+ 'GLTEXCOORD2I','GLTEXCOORD2FV','GLTEXCOORD2F','GLTEXCOORD2DV','GLTEXCOORD2D','GLTEXCOORD1SV','GLTEXCOORD1S','GLTEXCOORD1IV',
+ 'GLTEXCOORD1I','GLTEXCOORD1FV','GLTEXCOORD1F','GLTEXCOORD1DV','GLTEXCOORD1D','GLSTENCILOP','GLSTENCILMASK','GLSTENCILFUNC',
+ 'GLSHADEMODEL','GLSELECTBUFFER','GLSCISSOR','GLSCALEF','GLSCALED','GLROTATEF','GLROTATED','GLRENDERMODE',
+ 'GLRECTSV','GLRECTS','GLRECTIV','GLRECTI','GLRECTFV','GLRECTF','GLRECTDV','GLRECTD',
+ 'GLREADPIXELS','GLREADBUFFER','GLRASTERPOS4SV','GLRASTERPOS4S','GLRASTERPOS4IV','GLRASTERPOS4I','GLRASTERPOS4FV','GLRASTERPOS4F',
+ 'GLRASTERPOS4DV','GLRASTERPOS4D','GLRASTERPOS3SV','GLRASTERPOS3S','GLRASTERPOS3IV','GLRASTERPOS3I','GLRASTERPOS3FV','GLRASTERPOS3F',
+ 'GLRASTERPOS3DV','GLRASTERPOS3D','GLRASTERPOS2SV','GLRASTERPOS2S','GLRASTERPOS2IV','GLRASTERPOS2I','GLRASTERPOS2FV','GLRASTERPOS2F',
+ 'GLRASTERPOS2DV','GLRASTERPOS2D','GLPUSHNAME','GLPUSHMATRIX','GLPUSHCLIENTATTRIB','GLPUSHATTRIB','GLPRIORITIZETEXTURES','GLPOPNAME',
+ 'GLPOPMATRIX','GLPOPCLIENTATTRIB','GLPOPATTRIB','GLPOLYGONSTIPPLE','GLPOLYGONOFFSET','GLPOLYGONMODE','GLPOINTSIZE','GLPIXELZOOM',
+ 'GLPIXELTRANSFERI','GLPIXELTRANSFERF','GLPIXELSTOREI','GLPIXELSTOREF','GLPIXELMAPUSV','GLPIXELMAPUIV','GLPIXELMAPFV','GLPASSTHROUGH',
+ 'GLORTHO','GLNORMALPOINTER','GLNORMAL3SV','GLNORMAL3S','GLNORMAL3IV','GLNORMAL3I','GLNORMAL3FV','GLNORMAL3F',
+ 'GLNORMAL3DV','GLNORMAL3D','GLNORMAL3BV','GLNORMAL3B','GLNEWLIST','GLMULTMATRIXF','GLMULTMATRIXD','GLMATRIXMODE',
+ 'GLMATERIALIV','GLMATERIALI','GLMATERIALFV','GLMATERIALF','GLMAPGRID2F','GLMAPGRID2D','GLMAPGRID1F','GLMAPGRID1D',
+ 'GLMAP2F','GLMAP2D','GLMAP1F','GLMAP1D','GLLOGICOP','GLLOADNAME','GLLOADMATRIXF','GLLOADMATRIXD',
+ 'GLLOADIDENTITY','GLLISTBASE','GLLINEWIDTH','GLLINESTIPPLE','GLLIGHTMODELIV','GLLIGHTMODELI','GLLIGHTMODELFV','GLLIGHTMODELF',
+ 'GLLIGHTIV','GLLIGHTI','GLLIGHTFV','GLLIGHTF','GLISTEXTURE','GLISLIST','GLISENABLED','GLINTERLEAVEDARRAYS',
+ 'GLINITNAMES','GLINDEXUBV','GLINDEXUB','GLINDEXSV','GLINDEXS','GLINDEXPOINTER','GLINDEXMASK','GLINDEXIV',
+ 'GLINDEXI','GLINDEXFV','GLINDEXF','GLINDEXDV','GLINDEXD','GLHINT','GLGETTEXPARAMETERIV','GLGETTEXPARAMETERFV',
+ 'GLGETTEXLEVELPARAMETERIV','GLGETTEXLEVELPARAMETERFV','GLGETTEXIMAGE','GLGETTEXGENIV','GLGETTEXGENFV','GLGETTEXGENDV','GLGETTEXENVIV','GLGETTEXENVFV',
+ 'GLGETSTRING','GLGETPOLYGONSTIPPLE','GLGETPOINTERV','GLGETPIXELMAPUSV','GLGETPIXELMAPUIV','GLGETPIXELMAPFV','GLGETMATERIALIV','GLGETMATERIALFV',
+ 'GLGETMAPIV','GLGETMAPFV','GLGETMAPDV','GLGETLIGHTIV','GLGETLIGHTFV','GLGETINTEGERV','GLGETFLOATV','GLGETERROR',
+ 'GLGETDOUBLEV','GLGETCLIPPLANE','GLGETBOOLEANV','GLGENTEXTURES','GLGENLISTS','GLFRUSTUM','GLFRONTFACE','GLFOGIV',
+ 'GLFOGI','GLFOGFV','GLFOGF','GLFLUSH','GLFINISH','GLFEEDBACKBUFFER','GLEVALPOINT2','GLEVALPOINT1',
+ 'GLEVALMESH2','GLEVALMESH1','GLEVALCOORD2FV','GLEVALCOORD2F','GLEVALCOORD2DV','GLEVALCOORD2D','GLEVALCOORD1FV','GLEVALCOORD1F',
+ 'GLEVALCOORD1DV','GLEVALCOORD1D','GLENDLIST','GLEND','GLENABLECLIENTSTATE','GLENABLE','GLEDGEFLAGV','GLEDGEFLAGPOINTER',
+ 'GLEDGEFLAG','GLDRAWPIXELS','GLDRAWELEMENTS','GLDRAWBUFFER','GLDRAWARRAYS','GLDISABLECLIENTSTATE','GLDISABLE','GLDEPTHRANGE',
+ 'GLDEPTHMASK','GLDEPTHFUNC','GLDELETETEXTURES','GLDELETELISTS','GLCULLFACE','GLCOPYTEXSUBIMAGE2D','GLCOPYTEXSUBIMAGE1D','GLCOPYTEXIMAGE2D',
+ 'GLCOPYTEXIMAGE1D','GLCOPYPIXELS','GLCOLORPOINTER','GLCOLORMATERIAL','GLCOLORMASK','GLCOLOR4USV','GLCOLOR4US','GLCOLOR4UIV',
+ 'GLCOLOR4UI','GLCOLOR4UBV','GLCOLOR4UB','GLCOLOR4SV','GLCOLOR4S','GLCOLOR4IV','GLCOLOR4I','GLCOLOR4FV',
+ 'GLCOLOR4F','GLCOLOR4DV','GLCOLOR4D','GLCOLOR4BV','GLCOLOR4B','GLCOLOR3USV','GLCOLOR3US','GLCOLOR3UIV',
+ 'GLCOLOR3UI','GLCOLOR3UBV','GLCOLOR3UB','GLCOLOR3SV','GLCOLOR3S','GLCOLOR3IV','GLCOLOR3I','GLCOLOR3FV',
+ 'GLCOLOR3F','GLCOLOR3DV','GLCOLOR3D','GLCOLOR3BV','GLCOLOR3B','GLCLIPPLANE','GLCLEARSTENCIL','GLCLEARINDEX',
+ 'GLCLEARDEPTH','GLCLEARCOLOR','GLCLEARACCUM','GLCLEAR','GLCALLLISTS','GLCALLLIST','GLBLENDFUNC','GLBITMAP',
+ 'GLBINDTEXTURE','GLBEGIN','GLARRAYELEMENT','GLARETEXTURESRESIDENT','GLALPHAFUNC','GLACCUM'),
+ 2 => array(
+ '$BEL','$BS','$CR','$CRLF','$DQ','$DT_DATE_SEPARATOR','$DT_LANGUAGE','$DT_TIME_SEPARATOR',
+ '$ESC','$FF','$LF','$NUL','$PC_SD_MY_PC','$SPC','$SQL_OPT_TRACE_FILE_DEFAULT','$SQL_SPEC_STRING',
+ '$TAB','$TRACKBAR_CLASS','$VT','%ACM_OPEN','%ACM_OPENW','%ACM_PLAY','%ACM_STOP','%ACN_START',
+ '%ACN_STOP','%ACS_AUTOPLAY','%ACS_CENTER','%ACS_TIMER','%ACS_TRANSPARENT','%APP_COUNTER_FUNLOOKUP','%APP_COUNTER_KEYLOOKUP','%APP_COUNTER_LOOKUP',
+ '%APP_COUNTER_TESTALPHA','%APP_COUNTER_UDTLOOKUP','%APP_COUNTER_VARLOOKUP','%APP_TIMER_EXECTOTAL','%APP_TIMER_INIT','%APP_TIMER_LOAD','%APP_TIMER_PREPROCESSOR','%AW_ACTIVATE',
+ '%AW_BLEND','%AW_CENTER','%AW_HIDE','%AW_HOR_NEGATIVE','%AW_HOR_POSITIVE','%AW_SLIDE','%AW_VER_NEGATIVE','%AW_VER_POSITIVE',
+ '%BCM_FIRST','%BLACK','%BLUE','%BM_GETCHECK','%BM_SETCHECK','%BST_CHECKED','%BST_UNCHECKED','%BS_AUTOCHECKBOX',
+ '%BS_BOTTOM','%BS_CENTER','%BS_DEFAULT','%BS_DEFPUSHBUTTON','%BS_FLAT','%BS_LEFT','%BS_LEFTTEXT','%BS_MULTILINE',
+ '%BS_NOTIFY','%BS_OWNERDRAW','%BS_PUSHLIKE','%BS_RIGHT','%BS_TOP','%BS_VCENTER','%BUNDLE_BUILDER_CANCELLED','%CBM_FIRST',
+ '%CBN_CLOSEUP','%CBN_DBLCLK','%CBN_DROPDOWN','%CBN_EDITCHANGE','%CBN_EDITUPDATE','%CBN_ERRSPACE','%CBN_KILLFOCUS','%CBN_SELCANCEL',
+ '%CBN_SELCHANGE','%CBN_SELENDCANCEL','%CBN_SELENDOK','%CBN_SETFOCUS','%CBS_AUTOHSCROLL','%CBS_DISABLENOSCROLL','%CBS_DROPDOWN','%CBS_DROPDOWNLIST',
+ '%CBS_HASSTRINGS','%CBS_LOWERCASE','%CBS_NOINTEGRALHEIGHT','%CBS_SIMPLE','%CBS_SORT','%CBS_UPPERCASE','%CB_SELECTSTRING','%CCM_FIRST',
+ '%CC_ANYCOLOR','%CC_ENABLEHOOK','%CC_ENABLETEMPLATE','%CC_ENABLETEMPLATEHANDLE','%CC_FULLOPEN','%CC_PREVENTFULLOPEN','%CC_RGBINIT','%CC_SHOWHELP',
+ '%CC_SOLIDCOLOR','%CFE_BOLD','%CFE_ITALIC','%CFE_LINK','%CFE_PROTECTED','%CFE_STRIKEOUT','%CFE_UNDERLINE','%CFM_ANIMATION',
+ '%CFM_BACKCOLOR','%CFM_BOLD','%CFM_CHARSET','%CFM_COLOR','%CFM_FACE','%CFM_ITALIC','%CFM_KERNING','%CFM_LCID',
+ '%CFM_LINK','%CFM_OFFSET','%CFM_PROTECTED','%CFM_REVAUTHOR','%CFM_SIZE','%CFM_SPACING','%CFM_STRIKEOUT','%CFM_STYLE',
+ '%CFM_UNDERLINE','%CFM_UNDERLINETYPE','%CFM_WEIGHT','%CGI_ACCEPT_FILE_UPLOAD','%CGI_AUTO_ADD_SPECIAL_CHARS_PREFIX','%CGI_AUTO_CREATE_VARS','%CGI_BUFFERIZE_OUTPUT','%CGI_DOUBLE_QUOTE',
+ '%CGI_FILE_UPLOAD_BASEPATH','%CGI_FORCE_SESSION_VALIDATION','%CGI_MAX_BYTE_FROM_STD_IN','%CGI_REQUEST_METHOD_GET','%CGI_REQUEST_METHOD_POST','%CGI_SESSION_FILE_BASEPATH','%CGI_SINGLE_QUOTE','%CGI_SPECIAL_CHARS_PREFIX',
+ '%CGI_TEMPORARY_UPLOAD_PATH','%CGI_UPLOAD_CAN_OVERWRITE','%CGI_WRITE_LOG_FILE','%CGI_WRITE_VARS_INTO_LOG_FILE','%CONOLE_ATTACH_PARENT_PROCESS','%CONSOLE_BACKGROUND_BLUE','%CONSOLE_BACKGROUND_GREEN','%CONSOLE_BACKGROUND_INTENSITY',
+ '%CONSOLE_BACKGROUND_RED','%CONSOLE_BOX_FLAG_3DOFF','%CONSOLE_BOX_FLAG_3DON','%CONSOLE_BOX_FLAG_SHADOW','%CONSOLE_COMMON_LVB_GRID_HORIZONTAL','%CONSOLE_COMMON_LVB_GRID_LVERTICAL','%CONSOLE_COMMON_LVB_GRID_RVERTICAL','%CONSOLE_COMMON_LVB_LEADING_BYTE',
+ '%CONSOLE_COMMON_LVB_REVERSE_VIDEO','%CONSOLE_COMMON_LVB_TRAILING_BYTE','%CONSOLE_COMMON_LVB_UNDERSCORE','%CONSOLE_CTRL_BREAK_EVENT','%CONSOLE_CTRL_C_EVENT','%CONSOLE_DOUBLE_CLICK','%CONSOLE_ENABLE_AUTO_POSITION','%CONSOLE_ENABLE_ECHO_INPUT',
+ '%CONSOLE_ENABLE_EXTENDED_FLAGS','%CONSOLE_ENABLE_INSERT_MODE','%CONSOLE_ENABLE_LINE_INPUT','%CONSOLE_ENABLE_MOUSE_INPUT','%CONSOLE_ENABLE_PROCESSED_INPUT','%CONSOLE_ENABLE_PROCESSED_OUTPUT','%CONSOLE_ENABLE_QUICK_EDIT_MODE','%CONSOLE_ENABLE_WINDOW_INPUT',
+ '%CONSOLE_ENABLE_WRAP_AT_EOL_OUTPUT','%CONSOLE_FOREGROUND_BLUE','%CONSOLE_FOREGROUND_GREEN','%CONSOLE_FOREGROUND_INTENSITY','%CONSOLE_FOREGROUND_RED','%CONSOLE_LBUTTON','%CONSOLE_LINE_HORIZONTAL','%CONSOLE_LINE_VERTICAL',
+ '%CONSOLE_MBUTTON','%CONSOLE_MOUSE_MOVED','%CONSOLE_MOUSE_WHEELED','%CONSOLE_RBUTTON','%CONSOLE_SCROLLBUF_DOWN','%CONSOLE_SCROLLBUF_UP','%CONSOLE_SCROLLWND_ABSOLUTE','%CONSOLE_SCROLLWND_RELATIVE',
+ '%CONSOLE_STD_ERROR_HANDLE','%CONSOLE_STD_INPUT_HANDLE','%CONSOLE_STD_OUTPUT_HANDLE','%CONSOLE_SW_FORCEMINIMIZE','%CONSOLE_SW_HIDE','%CONSOLE_SW_MAXIMIZE','%CONSOLE_SW_MINIMIZE','%CONSOLE_SW_RESTORE',
+ '%CONSOLE_SW_SHOW','%CONSOLE_SW_SHOWDEFAULT','%CONSOLE_SW_SHOWMAXIMIZED','%CONSOLE_SW_SHOWMINIMIZED','%CONSOLE_SW_SHOWMINNOACTIVE','%CONSOLE_SW_SHOWNA','%CONSOLE_SW_SHOWNOACTIVATE','%CONSOLE_SW_SHOWNORMAL',
+ '%CONSOLE_UNAVAILABLE','%CRYPTO_CALG_DES','%CRYPTO_CALG_RC2','%CRYPTO_CALG_RC4','%CRYPTO_PROV_DH_SCHANNEL','%CRYPTO_PROV_DSS','%CRYPTO_PROV_DSS_DH','%CRYPTO_PROV_FORTEZZA',
+ '%CRYPTO_PROV_MS_EXCHANGE','%CRYPTO_PROV_RSA_FULL','%CRYPTO_PROV_RSA_SCHANNEL','%CRYPTO_PROV_RSA_SIG','%CRYPTO_PROV_SSL','%CSIDL_ADMINTOOLS','%CSIDL_ALTSTARTUP','%CSIDL_APPDATA',
+ '%CSIDL_BITBUCKET','%CSIDL_CDBURN_AREA','%CSIDL_COMMON_ADMINTOOLS','%CSIDL_COMMON_ALTSTARTUP','%CSIDL_COMMON_APPDATA','%CSIDL_COMMON_DESKTOPDIRECTORY','%CSIDL_COMMON_DOCUMENTS','%CSIDL_COMMON_FAVORITES',
+ '%CSIDL_COMMON_MUSIC','%CSIDL_COMMON_PICTURES','%CSIDL_COMMON_PROGRAMS','%CSIDL_COMMON_STARTMENU','%CSIDL_COMMON_STARTUP','%CSIDL_COMMON_TEMPLATES','%CSIDL_COMMON_VIDEO','%CSIDL_CONTROLS',
+ '%CSIDL_COOKIES','%CSIDL_DESKTOP','%CSIDL_DESKTOPDIRECTORY','%CSIDL_DRIVES','%CSIDL_FAVORITES','%CSIDL_FLAG_CREATE','%CSIDL_FONTS','%CSIDL_HISTORY',
+ '%CSIDL_INTERNET','%CSIDL_INTERNET_CACHE','%CSIDL_LOCAL_APPDATA','%CSIDL_MYDOCUMENTS','%CSIDL_MYMUSIC','%CSIDL_MYPICTURES','%CSIDL_MYVIDEO','%CSIDL_NETHOOD',
+ '%CSIDL_NETWORK','%CSIDL_PERSONAL','%CSIDL_PRINTERS','%CSIDL_PRINTHOOD','%CSIDL_PROFILE','%CSIDL_PROGRAMS','%CSIDL_PROGRAM_FILES','%CSIDL_PROGRAM_FILES_COMMON',
+ '%CSIDL_RECENT','%CSIDL_SENDTO','%CSIDL_STARTMENU','%CSIDL_STARTUP','%CSIDL_SYSTEM','%CSIDL_TEMPLATES','%CSIDL_WINDOWS','%CW_USEDEFAULT',
+ '%CYAN','%DATE_TIME_FILE_CREATION','%DATE_TIME_LAST_FILE_ACCESS','%DATE_TIME_LAST_FILE_WRITE','%DICTIONARY_MEMINFO_DATA','%DICTIONARY_MEMINFO_KEYS','%DICTIONARY_MEMINFO_TOTAL','%DICTIONARY_SORTDESCENDING',
+ '%DICTIONARY_SORTKEYS','%DSCAPS_CERTIFIED','%DSCAPS_CONTINUOUSRATE','%DSCAPS_EMULDRIVER','%DSCAPS_SECONDARY16BIT','%DSCAPS_SECONDARY8BIT','%DSCAPS_SECONDARYMONO','%DSCAPS_SECONDARYSTEREO',
+ '%DSCCAPS_CERTIFIED','%DSCCAPS_EMULDRIVER','%DS_3DLOOK','%DS_ABSALIGN','%DS_CENTER','%DS_CENTERMOUSE','%DS_CONTEXTHELP','%DS_CONTROL',
+ '%DS_MODALFRAME','%DS_NOFAILCREATE','%DS_SETFONT','%DS_SETFOREGROUND','%DS_SYSMODAL','%DTM_FIRST','%DTM_GETMCCOLOR','%DTM_GETMCFONT',
+ '%DTM_GETMONTHCAL','%DTM_GETRANGE','%DTM_GETSYSTEMTIME','%DTM_SETFORMAT','%DTM_SETFORMATW','%DTM_SETMCCOLOR','%DTM_SETMCFONT','%DTM_SETRANGE',
+ '%DTM_SETSYSTEMTIME','%DTN_CLOSEUP','%DTN_DATETIMECHANGE','%DTN_DROPDOWN','%DTN_FORMAT','%DTN_FORMATQUERY','%DTN_FORMATQUERYW','%DTN_FORMATW',
+ '%DTN_USERSTRING','%DTN_USERSTRINGW','%DTN_WMKEYDOWN','%DTN_WMKEYDOWNW','%DTS_APPCANPARSE','%DTS_LONGDATEFORMAT','%DTS_RIGHTALIGN','%DTS_SHORTDATECENTURYFORMAT',
+ '%DTS_SHORTDATEFORMAT','%DTS_SHOWNONE','%DTS_TIMEFORMAT','%DTS_UPDOWN','%DT_DATE_CENTURY','%DT_DATE_OK','%DT_DAY_IN_YEAR','%DT_DIFF_IN_DAYS',
+ '%DT_DIFF_IN_HOURS','%DT_DIFF_IN_MINUTES','%DT_DIFF_IN_SECONDS','%DT_HOURS_IN_DAY','%DT_MINUTES_IN_HOUR','%DT_SECONDS_IN_DAY','%DT_SECONDS_IN_HOUR','%DT_SECONDS_IN_MINUTE',
+ '%DT_SECONDS_IN_YEAR','%DT_USE_LONG_FORM','%DT_USE_SHORT_FORM','%DT_WRONG_DATE','%DT_WRONG_DAY','%DT_WRONG_MONTH','%ECM_FIRST','%ECOOP_AND',
+ '%ECOOP_OR','%ECOOP_SET','%ECOOP_XOR','%ECO_AUTOHSCROLL','%ECO_AUTOVSCROLL','%ECO_AUTOWORDSELECTION','%ECO_NOHIDESEL','%ECO_READONLY',
+ '%ECO_SELECTIONBAR','%ECO_WANTRETURN','%EM_AUTOURLDETECT','%EM_CANPASTE','%EM_CANREDO','%EM_CANUNDO','%EM_CHARFROMPOS','%EM_DISPLAYBAND',
+ '%EM_EMPTYUNDOBUFFER','%EM_EXGETSEL','%EM_EXLIMITTEXT','%EM_EXLINEFROMCHAR','%EM_EXSETSEL','%EM_FINDTEXT','%EM_FINDTEXTEX','%EM_FINDWORDBREAK',
+ '%EM_FMTLINES','%EM_FORMATRANGE','%EM_GETAUTOURLDETECT','%EM_GETCHARFORMAT','%EM_GETEDITSTYLE','%EM_GETEVENTMASK','%EM_GETFIRSTVISIBLELINE','%EM_GETHANDLE',
+ '%EM_GETIMESTATUS','%EM_GETLIMITTEXT','%EM_GETLINE','%EM_GETLINECOUNT','%EM_GETMARGINS','%EM_GETMODIFY','%EM_GETOLEINTERFACE','%EM_GETOPTIONS',
+ '%EM_GETPARAFORMAT','%EM_GETPASSWORDCHAR','%EM_GETRECT','%EM_GETREDONAME','%EM_GETSCROLLPOS','%EM_GETSEL','%EM_GETSELTEXT','%EM_GETTEXTMODE',
+ '%EM_GETTEXTRANGE','%EM_GETTHUMB','%EM_GETUNDONAME','%EM_GETWORDBREAKPROC','%EM_GETWORDBREAKPROCEX','%EM_HIDESELECTION','%EM_LIMITTEXT','%EM_LINEFROMCHAR',
+ '%EM_LINEINDEX','%EM_LINELENGTH','%EM_LINESCROLL','%EM_PASTESPECIAL','%EM_POSFROMCHAR','%EM_REDO','%EM_REPLACESEL','%EM_REQUESTRESIZE',
+ '%EM_SCROLL','%EM_SCROLLCARET','%EM_SELECTIONTYPE','%EM_SETBKGNDCOLOR','%EM_SETCHARFORMAT','%EM_SETEDITSTYLE','%EM_SETEVENTMASK','%EM_SETHANDLE',
+ '%EM_SETIMESTATUS','%EM_SETLIMITTEXT','%EM_SETMARGINS','%EM_SETMODIFY','%EM_SETOLECALLBACK','%EM_SETOPTIONS','%EM_SETPARAFORMAT','%EM_SETPASSWORDCHAR',
+ '%EM_SETREADONLY','%EM_SETRECT','%EM_SETRECTNP','%EM_SETSCROLLPOS','%EM_SETSEL','%EM_SETTABSTOPS','%EM_SETTARGETDEVICE','%EM_SETTEXTMODE',
+ '%EM_SETUNDOLIMIT','%EM_SETWORDBREAKPROC','%EM_SETWORDBREAKPROCEX','%EM_SETWORDWRAPMODE','%EM_SETZOOM','%EM_STOPGROUPTYPING','%EM_STREAMIN','%EM_STREAMOUT',
+ '%EM_UNDO','%ENM_CHANGE','%ENM_CORRECTTEXT','%ENM_DRAGDROPDONE','%ENM_DROPFILES','%ENM_KEYEVENTS','%ENM_MOUSEEVENTS','%ENM_NONE',
+ '%ENM_PARAGRAPHEXPANDED','%ENM_PROTECTED','%ENM_REQUESTRESIZE','%ENM_SCROLL','%ENM_SCROLLEVENTS','%ENM_SELCHANGE','%ENM_UPDATE','%EN_CHANGE',
+ '%EN_MSGFILTER','%EN_SELCHANGE','%EN_UPDATE','%ES_AUTOHSCROLL','%ES_AUTOVSCROLL','%ES_CENTER','%ES_DISABLENOSCROLL','%ES_EX_NOCALLOLEINIT',
+ '%ES_LEFT','%ES_LOWERCASE','%ES_MULTILINE','%ES_NOHIDESEL','%ES_NOOLEDRAGDROP','%ES_NUMBER','%ES_OEMCONVERT','%ES_PASSWORD',
+ '%ES_READONLY','%ES_RIGHT','%ES_SAVESEL','%ES_SELECTIONBAR','%ES_SUNKEN','%ES_UPPERCASE','%ES_WANTRETURN','%EVAL_EXEC_STRING',
+ '%FALSE','%FILE_ADDPATH','%FILE_ARCHIVE','%FILE_BUILDVERSION','%FILE_HIDDEN','%FILE_MAJORVERSION','%FILE_MINORVERSION','%FILE_NORMAL',
+ '%FILE_READONLY','%FILE_REVISIONVERSION','%FILE_SUBDIR','%FILE_SYSTEM','%FILE_VLABEL','%FTP_GET_CONNECT_STATUS','%FTP_GET_FILE_BYTES_RCVD','%FTP_GET_FILE_BYTES_SENT',
+ '%FTP_GET_LAST_RESPONSE','%FTP_GET_LOCAL_IP','%FTP_GET_SERVER_IP','%FTP_GET_TOTAL_BYTES_RCVD','%FTP_GET_TOTAL_BYTES_SENT','%FTP_LIST_FULLLIST','%FTP_LIST_FULLLISTDIR','%FTP_LIST_FULLLISTFILE',
+ '%FTP_SET_ASYNC','%FTP_SET_CONNECT_WAIT','%FTP_SET_MAX_LISTEN_WAIT','%FTP_SET_MAX_RESPONSE_WAIT','%FTP_SET_PASSIVE','%FTP_SET_SYNC','%FW_BLACK','%FW_BOLD',
+ '%FW_DEMIBOLD','%FW_DONTCARE','%FW_EXTRABOLD','%FW_EXTRALIGHT','%FW_HEAVY','%FW_LIGHT','%FW_MEDIUM','%FW_NORMAL',
+ '%FW_REGULAR','%FW_SEMIBOLD','%FW_THIN','%FW_ULTRABOLD','%FW_ULTRALIGHT','%GDTR_MAX','%GDTR_MIN','%GLU_AUTO_LOAD_MATRIX',
+ '%GLU_BEGIN','%GLU_CCW','%GLU_CULLING','%GLU_CW','%GLU_DISPLAY_MODE','%GLU_DOMAIN_DISTANCE','%GLU_EDGE_FLAG','%GLU_END',
+ '%GLU_ERROR','%GLU_EXTENSIONS','%GLU_EXTERIOR','%GLU_FALSE','%GLU_FILL','%GLU_FLAT','%GLU_INCOMPATIBLE_GL_VERSION','%GLU_INSIDE',
+ '%GLU_INTERIOR','%GLU_INVALID_ENUM','%GLU_INVALID_VALUE','%GLU_LINE','%GLU_MAP1_TRIM_2','%GLU_MAP1_TRIM_3','%GLU_NONE','%GLU_NURBS_ERROR1',
+ '%GLU_NURBS_ERROR10','%GLU_NURBS_ERROR11','%GLU_NURBS_ERROR12','%GLU_NURBS_ERROR13','%GLU_NURBS_ERROR14','%GLU_NURBS_ERROR15','%GLU_NURBS_ERROR16','%GLU_NURBS_ERROR17',
+ '%GLU_NURBS_ERROR18','%GLU_NURBS_ERROR19','%GLU_NURBS_ERROR2','%GLU_NURBS_ERROR20','%GLU_NURBS_ERROR21','%GLU_NURBS_ERROR22','%GLU_NURBS_ERROR23','%GLU_NURBS_ERROR24',
+ '%GLU_NURBS_ERROR25','%GLU_NURBS_ERROR26','%GLU_NURBS_ERROR27','%GLU_NURBS_ERROR28','%GLU_NURBS_ERROR29','%GLU_NURBS_ERROR3','%GLU_NURBS_ERROR30','%GLU_NURBS_ERROR31',
+ '%GLU_NURBS_ERROR32','%GLU_NURBS_ERROR33','%GLU_NURBS_ERROR34','%GLU_NURBS_ERROR35','%GLU_NURBS_ERROR36','%GLU_NURBS_ERROR37','%GLU_NURBS_ERROR4','%GLU_NURBS_ERROR5',
+ '%GLU_NURBS_ERROR6','%GLU_NURBS_ERROR7','%GLU_NURBS_ERROR8','%GLU_NURBS_ERROR9','%GLU_OUTLINE_PATCH','%GLU_OUTLINE_POLYGON','%GLU_OUTSIDE','%GLU_OUT_OF_MEMORY',
+ '%GLU_PARAMETRIC_ERROR','%GLU_PARAMETRIC_TOLERANCE','%GLU_PATH_LENGTH','%GLU_POINT','%GLU_SAMPLING_METHOD','%GLU_SAMPLING_TOLERANCE','%GLU_SILHOUETTE','%GLU_SMOOTH',
+ '%GLU_TESS_BEGIN','%GLU_TESS_BEGIN_DATA','%GLU_TESS_BOUNDARY_ONLY','%GLU_TESS_COMBINE','%GLU_TESS_COMBINE_DATA','%GLU_TESS_COORD_TOO_LARGE','%GLU_TESS_EDGE_FLAG','%GLU_TESS_EDGE_FLAG_DATA',
+ '%GLU_TESS_END','%GLU_TESS_END_DATA','%GLU_TESS_ERROR','%GLU_TESS_ERROR1','%GLU_TESS_ERROR2','%GLU_TESS_ERROR3','%GLU_TESS_ERROR4','%GLU_TESS_ERROR5',
+ '%GLU_TESS_ERROR6','%GLU_TESS_ERROR7','%GLU_TESS_ERROR8','%GLU_TESS_ERROR_DATA','%GLU_TESS_MISSING_BEGIN_CONTOUR','%GLU_TESS_MISSING_BEGIN_POLYGON','%GLU_TESS_MISSING_END_CONTOUR','%GLU_TESS_MISSING_END_POLYGON',
+ '%GLU_TESS_NEED_COMBINE_CALLBACK','%GLU_TESS_TOLERANCE','%GLU_TESS_VERTEX','%GLU_TESS_VERTEX_DATA','%GLU_TESS_WINDING_ABS_GEQ_TWO','%GLU_TESS_WINDING_NEGATIVE','%GLU_TESS_WINDING_NONZERO','%GLU_TESS_WINDING_ODD',
+ '%GLU_TESS_WINDING_POSITIVE','%GLU_TESS_WINDING_RULE','%GLU_TRUE','%GLU_UNKNOWN','%GLU_U_STEP','%GLU_VERSION','%GLU_VERSION_1_1','%GLU_VERSION_1_2',
+ '%GLU_VERTEX','%GLU_V_STEP','%GL_2D','%GL_2_BYTES','%GL_3D','%GL_3D_COLOR','%GL_3D_COLOR_TEXTURE','%GL_3_BYTES',
+ '%GL_4D_COLOR_TEXTURE','%GL_4_BYTES','%GL_ABGR_EXT','%GL_ACCUM','%GL_ACCUM_ALPHA_BITS','%GL_ACCUM_BLUE_BITS','%GL_ACCUM_BUFFER_BIT','%GL_ACCUM_CLEAR_VALUE',
+ '%GL_ACCUM_GREEN_BITS','%GL_ACCUM_RED_BITS','%GL_ADD','%GL_ALL_ATTRIB_BITS','%GL_ALPHA','%GL_ALPHA12','%GL_ALPHA16','%GL_ALPHA4',
+ '%GL_ALPHA8','%GL_ALPHA_BIAS','%GL_ALPHA_BITS','%GL_ALPHA_SCALE','%GL_ALPHA_TEST','%GL_ALPHA_TEST_FUNC','%GL_ALPHA_TEST_REF','%GL_ALWAYS',
+ '%GL_AMBIENT','%GL_AMBIENT_AND_DIFFUSE','%GL_AND','%GL_AND_INVERTED','%GL_AND_REVERSE','%GL_ARRAY_ELEMENT_LOCK_COUNT_EXT','%GL_ARRAY_ELEMENT_LOCK_FIRST_EXT','%GL_ATTRIB_STACK_DEPTH',
+ '%GL_AUTO_NORMAL','%GL_AUX0','%GL_AUX1','%GL_AUX2','%GL_AUX3','%GL_AUX_BUFFERS','%GL_BACK','%GL_BACK_LEFT',
+ '%GL_BACK_RIGHT','%GL_BGRA_EXT','%GL_BGR_EXT','%GL_BITMAP','%GL_BITMAP_TOKEN','%GL_BLEND','%GL_BLEND_COLOR_EXT','%GL_BLEND_DST',
+ '%GL_BLEND_EQUATION_EXT','%GL_BLEND_SRC','%GL_BLUE','%GL_BLUE_BIAS','%GL_BLUE_BITS','%GL_BLUE_SCALE','%GL_BYTE','%GL_C3F_V3F',
+ '%GL_C4F_N3F_V3F','%GL_C4UB_V2F','%GL_C4UB_V3F','%GL_CCW','%GL_CLAMP','%GL_CLEAR','%GL_CLIENT_ALL_ATTRIB_BITS','%GL_CLIENT_ATTRIB_STACK_DEPTH',
+ '%GL_CLIENT_PIXEL_STORE_BIT','%GL_CLIENT_VERTEX_ARRAY_BIT','%GL_CLIP_PLANE0','%GL_CLIP_PLANE1','%GL_CLIP_PLANE2','%GL_CLIP_PLANE3','%GL_CLIP_PLANE4','%GL_CLIP_PLANE5',
+ '%GL_CLIP_VOLUME_CLIPPING_HINT_EXT','%GL_COEFF','%GL_COLOR','%GL_COLOR_ARRAY','%GL_COLOR_ARRAY_COUNT_EXT','%GL_COLOR_ARRAY_EXT','%GL_COLOR_ARRAY_POINTER','%GL_COLOR_ARRAY_POINTER_EXT',
+ '%GL_COLOR_ARRAY_SIZE','%GL_COLOR_ARRAY_SIZE_EXT','%GL_COLOR_ARRAY_STRIDE','%GL_COLOR_ARRAY_STRIDE_EXT','%GL_COLOR_ARRAY_TYPE','%GL_COLOR_ARRAY_TYPE_EXT','%GL_COLOR_BUFFER_BIT','%GL_COLOR_CLEAR_VALUE',
+ '%GL_COLOR_INDEX','%GL_COLOR_INDEX12_EXT','%GL_COLOR_INDEX16_EXT','%GL_COLOR_INDEX1_EXT','%GL_COLOR_INDEX2_EXT','%GL_COLOR_INDEX4_EXT','%GL_COLOR_INDEX8_EXT','%GL_COLOR_INDEXES',
+ '%GL_COLOR_LOGIC_OP','%GL_COLOR_MATERIAL','%GL_COLOR_MATERIAL_FACE','%GL_COLOR_MATERIAL_PARAMETER','%GL_COLOR_SUM_EXT','%GL_COLOR_TABLE_ALPHA_SIZE_EXT','%GL_COLOR_TABLE_BIAS_EXT','%GL_COLOR_TABLE_BLUE_SIZE_EXT',
+ '%GL_COLOR_TABLE_EXT','%GL_COLOR_TABLE_FORMAT_EXT','%GL_COLOR_TABLE_GREEN_SIZE_EXT','%GL_COLOR_TABLE_INTENSITY_SIZE_EXT','%GL_COLOR_TABLE_LUMINANCE_SIZE_EXT','%GL_COLOR_TABLE_RED_SIZE_EXT','%GL_COLOR_TABLE_SCALE_EXT','%GL_COLOR_TABLE_WIDTH_EXT',
+ '%GL_COLOR_WRITEMASK','%GL_COMPILE','%GL_COMPILE_AND_EXECUTE','%GL_CONSTANT_ALPHA_EXT','%GL_CONSTANT_ATTENUATION','%GL_CONSTANT_COLOR_EXT','%GL_CONVOLUTION_1D_EXT','%GL_CONVOLUTION_2D_EXT',
+ '%GL_CONVOLUTION_BORDER_MODE_EXT','%GL_CONVOLUTION_FILTER_BIAS_EXT','%GL_CONVOLUTION_FILTER_SCALE_EXT','%GL_CONVOLUTION_FORMAT_EXT','%GL_CONVOLUTION_HEIGHT_EXT','%GL_CONVOLUTION_WIDTH_EXT','%GL_COPY','%GL_COPY_INVERTED',
+ '%GL_COPY_PIXEL_TOKEN','%GL_CULL_FACE','%GL_CULL_FACE_MODE','%GL_CULL_VERTEX_EXT','%GL_CULL_VERTEX_EYE_POSITION_EXT','%GL_CULL_VERTEX_OBJECT_POSITION_EXT','%GL_CURRENT_BIT','%GL_CURRENT_COLOR',
+ '%GL_CURRENT_INDEX','%GL_CURRENT_NORMAL','%GL_CURRENT_RASTER_COLOR','%GL_CURRENT_RASTER_DISTANCE','%GL_CURRENT_RASTER_INDEX','%GL_CURRENT_RASTER_POSITION','%GL_CURRENT_RASTER_POSITION_VALID','%GL_CURRENT_RASTER_TEXTURE_COORDS',
+ '%GL_CURRENT_SECONDARY_COLOR_EXT','%GL_CURRENT_TEXTURE_COORDS','%GL_CW','%GL_DECAL','%GL_DECR','%GL_DEPTH','%GL_DEPTH_BIAS','%GL_DEPTH_BITS',
+ '%GL_DEPTH_BUFFER_BIT','%GL_DEPTH_CLEAR_VALUE','%GL_DEPTH_COMPONENT','%GL_DEPTH_FUNC','%GL_DEPTH_RANGE','%GL_DEPTH_SCALE','%GL_DEPTH_TEST','%GL_DEPTH_WRITEMASK',
+ '%GL_DIFFUSE','%GL_DITHER','%GL_DOMAIN','%GL_DONT_CARE','%GL_DOUBLE','%GL_DOUBLEBUFFER','%GL_DOUBLE_EXT','%GL_DRAW_BUFFER',
+ '%GL_DRAW_PIXEL_TOKEN','%GL_DST_ALPHA','%GL_DST_COLOR','%GL_EDGE_FLAG','%GL_EDGE_FLAG_ARRAY','%GL_EDGE_FLAG_ARRAY_COUNT_EXT','%GL_EDGE_FLAG_ARRAY_EXT','%GL_EDGE_FLAG_ARRAY_POINTER',
+ '%GL_EDGE_FLAG_ARRAY_POINTER_EXT','%GL_EDGE_FLAG_ARRAY_STRIDE','%GL_EDGE_FLAG_ARRAY_STRIDE_EXT','%GL_EMISSION','%GL_ENABLE_BIT','%GL_EQUAL','%GL_EQUIV','%GL_EVAL_BIT',
+ '%GL_EXP','%GL_EXP2','%GL_EXTENSIONS','%GL_EXT_ABGR','%GL_EXT_BGRA','%GL_EXT_BLEND_COLOR','%GL_EXT_BLEND_MINMAX','%GL_EXT_BLEND_SUBTRACT',
+ '%GL_EXT_CLIP_VOLUME_HINT','%GL_EXT_COLOR_TABLE','%GL_EXT_COMPILED_VERTEX_ARRAY','%GL_EXT_CONVOLUTION','%GL_EXT_CULL_VERTEX','%GL_EXT_HISTOGRAM','%GL_EXT_PACKED_PIXELS','%GL_EXT_PALETTED_TEXTURE',
+ '%GL_EXT_POLYGON_OFFSET','%GL_EXT_SECONDARY_COLOR','%GL_EXT_SEPARATE_SPECULAR_COLOR','%GL_EXT_VERTEX_ARRAY','%GL_EYE_LINEAR','%GL_EYE_PLANE','%GL_FALSE','%GL_FASTEST',
+ '%GL_FEEDBACK','%GL_FEEDBACK_BUFFER_POINTER','%GL_FEEDBACK_BUFFER_SIZE','%GL_FEEDBACK_BUFFER_TYPE','%GL_FILL','%GL_FLAT','%GL_FLOAT','%GL_FOG',
+ '%GL_FOG_BIT','%GL_FOG_COLOR','%GL_FOG_DENSITY','%GL_FOG_END','%GL_FOG_HINT','%GL_FOG_INDEX','%GL_FOG_MODE','%GL_FOG_START',
+ '%GL_FRONT','%GL_FRONT_AND_BACK','%GL_FRONT_FACE','%GL_FRONT_LEFT','%GL_FRONT_RIGHT','%GL_FUNC_ADD_EXT','%GL_FUNC_REVERSE_SUBTRACT_EXT','%GL_FUNC_SUBTRACT_EXT',
+ '%GL_GEQUAL','%GL_GREATER','%GL_GREEN','%GL_GREEN_BIAS','%GL_GREEN_BITS','%GL_GREEN_SCALE','%GL_HINT_BIT','%GL_HISTOGRAM_ALPHA_SIZE_EXT',
+ '%GL_HISTOGRAM_BLUE_SIZE_EXT','%GL_HISTOGRAM_EXT','%GL_HISTOGRAM_FORMAT_EXT','%GL_HISTOGRAM_GREEN_SIZE_EXT','%GL_HISTOGRAM_LUMINANCE_SIZE_EXT','%GL_HISTOGRAM_RED_SIZE_EXT','%GL_HISTOGRAM_SINK_EXT','%GL_HISTOGRAM_WIDTH_EXT',
+ '%GL_INCR','%GL_INDEX_ARRAY','%GL_INDEX_ARRAY_COUNT_EXT','%GL_INDEX_ARRAY_EXT','%GL_INDEX_ARRAY_POINTER','%GL_INDEX_ARRAY_POINTER_EXT','%GL_INDEX_ARRAY_STRIDE','%GL_INDEX_ARRAY_STRIDE_EXT',
+ '%GL_INDEX_ARRAY_TYPE','%GL_INDEX_ARRAY_TYPE_EXT','%GL_INDEX_BITS','%GL_INDEX_CLEAR_VALUE','%GL_INDEX_LOGIC_OP','%GL_INDEX_MODE','%GL_INDEX_OFFSET','%GL_INDEX_SHIFT',
+ '%GL_INDEX_WRITEMASK','%GL_INT','%GL_INTENSITY','%GL_INTENSITY12','%GL_INTENSITY16','%GL_INTENSITY4','%GL_INTENSITY8','%GL_INVALID_ENUM',
+ '%GL_INVALID_OPERATION','%GL_INVALID_VALUE','%GL_INVERT','%GL_KEEP','%GL_LEFT','%GL_LEQUAL','%GL_LESS','%GL_LIGHT0',
+ '%GL_LIGHT1','%GL_LIGHT2','%GL_LIGHT3','%GL_LIGHT4','%GL_LIGHT5','%GL_LIGHT6','%GL_LIGHT7','%GL_LIGHTING',
+ '%GL_LIGHTING_BIT','%GL_LIGHT_MODEL_AMBIENT','%GL_LIGHT_MODEL_COLOR_CONTROL_EXT','%GL_LIGHT_MODEL_LOCAL_VIEWER','%GL_LIGHT_MODEL_TWO_SIDE','%GL_LINE','%GL_LINEAR','%GL_LINEAR_ATTENUATION',
+ '%GL_LINEAR_MIPMAP_LINEAR','%GL_LINEAR_MIPMAP_NEAREST','%GL_LINES','%GL_LINE_BIT','%GL_LINE_LOOP','%GL_LINE_RESET_TOKEN','%GL_LINE_SMOOTH','%GL_LINE_SMOOTH_HINT',
+ '%GL_LINE_STIPPLE','%GL_LINE_STIPPLE_PATTERN','%GL_LINE_STIPPLE_REPEAT','%GL_LINE_STRIP','%GL_LINE_TOKEN','%GL_LINE_WIDTH','%GL_LINE_WIDTH_GRANULARITY','%GL_LINE_WIDTH_RANGE',
+ '%GL_LIST_BASE','%GL_LIST_BIT','%GL_LIST_INDEX','%GL_LIST_MODE','%GL_LOAD','%GL_LOGIC_OP','%GL_LOGIC_OP_MODE','%GL_LUMINANCE',
+ '%GL_LUMINANCE12','%GL_LUMINANCE12_ALPHA12','%GL_LUMINANCE12_ALPHA4','%GL_LUMINANCE16','%GL_LUMINANCE16_ALPHA16','%GL_LUMINANCE4','%GL_LUMINANCE4_ALPHA4','%GL_LUMINANCE6_ALPHA2',
+ '%GL_LUMINANCE8','%GL_LUMINANCE8_ALPHA8','%GL_LUMINANCE_ALPHA','%GL_MAP1_COLOR_4','%GL_MAP1_GRID_DOMAIN','%GL_MAP1_GRID_SEGMENTS','%GL_MAP1_INDEX','%GL_MAP1_NORMAL',
+ '%GL_MAP1_TEXTURE_COORD_1','%GL_MAP1_TEXTURE_COORD_2','%GL_MAP1_TEXTURE_COORD_3','%GL_MAP1_TEXTURE_COORD_4','%GL_MAP1_VERTEX_3','%GL_MAP1_VERTEX_4','%GL_MAP2_COLOR_4','%GL_MAP2_GRID_DOMAIN',
+ '%GL_MAP2_GRID_SEGMENTS','%GL_MAP2_INDEX','%GL_MAP2_NORMAL','%GL_MAP2_TEXTURE_COORD_1','%GL_MAP2_TEXTURE_COORD_2','%GL_MAP2_TEXTURE_COORD_3','%GL_MAP2_TEXTURE_COORD_4','%GL_MAP2_VERTEX_3',
+ '%GL_MAP2_VERTEX_4','%GL_MAP_COLOR','%GL_MAP_STENCIL','%GL_MATRIX_MODE','%GL_MAX_ATTRIB_STACK_DEPTH','%GL_MAX_CLIENT_ATTRIB_STACK_DEPTH','%GL_MAX_CLIP_PLANES','%GL_MAX_CONVOLUTION_HEIGHT_EXT',
+ '%GL_MAX_CONVOLUTION_WIDTH_EXT','%GL_MAX_EVAL_ORDER','%GL_MAX_EXT','%GL_MAX_LIGHTS','%GL_MAX_LIST_NESTING','%GL_MAX_MODELVIEW_STACK_DEPTH','%GL_MAX_NAME_STACK_DEPTH','%GL_MAX_PIXEL_MAP_TABLE',
+ '%GL_MAX_PROJECTION_STACK_DEPTH','%GL_MAX_TEXTURE_SIZE','%GL_MAX_TEXTURE_STACK_DEPTH','%GL_MAX_VIEWPORT_DIMS','%GL_MINMAX_EXT','%GL_MINMAX_FORMAT_EXT','%GL_MINMAX_SINK_EXT','%GL_MIN_EXT',
+ '%GL_MODELVIEW','%GL_MODELVIEW_MATRIX','%GL_MODELVIEW_STACK_DEPTH','%GL_MODULATE','%GL_MULT','%GL_N3F_V3F','%GL_NAME_STACK_DEPTH','%GL_NAND',
+ '%GL_NEAREST','%GL_NEAREST_MIPMAP_LINEAR','%GL_NEAREST_MIPMAP_NEAREST','%GL_NEVER','%GL_NICEST','%GL_NONE','%GL_NOOP','%GL_NOR',
+ '%GL_NORMALIZE','%GL_NORMAL_ARRAY','%GL_NORMAL_ARRAY_COUNT_EXT','%GL_NORMAL_ARRAY_EXT','%GL_NORMAL_ARRAY_POINTER','%GL_NORMAL_ARRAY_POINTER_EXT','%GL_NORMAL_ARRAY_STRIDE','%GL_NORMAL_ARRAY_STRIDE_EXT',
+ '%GL_NORMAL_ARRAY_TYPE','%GL_NORMAL_ARRAY_TYPE_EXT','%GL_NOTEQUAL','%GL_NO_ERROR','%GL_OBJECT_LINEAR','%GL_OBJECT_PLANE','%GL_ONE','%GL_ONE_MINUS_CONSTANT_ALPHA_EXT',
+ '%GL_ONE_MINUS_CONSTANT_COLOR_EXT','%GL_ONE_MINUS_DST_ALPHA','%GL_ONE_MINUS_DST_COLOR','%GL_ONE_MINUS_SRC_ALPHA','%GL_ONE_MINUS_SRC_COLOR','%GL_OR','%GL_ORDER','%GL_OR_INVERTED',
+ '%GL_OR_REVERSE','%GL_OUT_OF_MEMORY','%GL_PACK_ALIGNMENT','%GL_PACK_LSB_FIRST','%GL_PACK_ROW_LENGTH','%GL_PACK_SKIP_PIXELS','%GL_PACK_SKIP_ROWS','%GL_PACK_SWAP_BYTES',
+ '%GL_PASS_THROUGH_TOKEN','%GL_PERSPECTIVE_CORRECTION_HINT','%GL_PIXEL_MAP_A_TO_A','%GL_PIXEL_MAP_A_TO_A_SIZE','%GL_PIXEL_MAP_B_TO_B','%GL_PIXEL_MAP_B_TO_B_SIZE','%GL_PIXEL_MAP_G_TO_G','%GL_PIXEL_MAP_G_TO_G_SIZE',
+ '%GL_PIXEL_MAP_I_TO_A','%GL_PIXEL_MAP_I_TO_A_SIZE','%GL_PIXEL_MAP_I_TO_B','%GL_PIXEL_MAP_I_TO_B_SIZE','%GL_PIXEL_MAP_I_TO_G','%GL_PIXEL_MAP_I_TO_G_SIZE','%GL_PIXEL_MAP_I_TO_I','%GL_PIXEL_MAP_I_TO_I_SIZE',
+ '%GL_PIXEL_MAP_I_TO_R','%GL_PIXEL_MAP_I_TO_R_SIZE','%GL_PIXEL_MAP_R_TO_R','%GL_PIXEL_MAP_R_TO_R_SIZE','%GL_PIXEL_MAP_S_TO_S','%GL_PIXEL_MAP_S_TO_S_SIZE','%GL_PIXEL_MODE_BIT','%GL_POINT',
+ '%GL_POINTS','%GL_POINT_BIT','%GL_POINT_SIZE','%GL_POINT_SIZE_GRANULARITY','%GL_POINT_SIZE_RANGE','%GL_POINT_SMOOTH','%GL_POINT_SMOOTH_HINT','%GL_POINT_TOKEN',
+ '%GL_POLYGON','%GL_POLYGON_BIT','%GL_POLYGON_MODE','%GL_POLYGON_OFFSET_BIAS_EXT','%GL_POLYGON_OFFSET_EXT','%GL_POLYGON_OFFSET_FACTOR','%GL_POLYGON_OFFSET_FACTOR_EXT','%GL_POLYGON_OFFSET_FILL',
+ '%GL_POLYGON_OFFSET_LINE','%GL_POLYGON_OFFSET_POINT','%GL_POLYGON_OFFSET_UNITS','%GL_POLYGON_SMOOTH','%GL_POLYGON_SMOOTH_HINT','%GL_POLYGON_STIPPLE','%GL_POLYGON_STIPPLE_BIT','%GL_POLYGON_TOKEN',
+ '%GL_POSITION','%GL_POST_COLOR_MATRIX_COLOR_TABLE_EXT','%GL_POST_CONVOLUTION_ALPHA_BIAS_EXT','%GL_POST_CONVOLUTION_ALPHA_SCALE_EXT','%GL_POST_CONVOLUTION_BLUE_BIAS_EXT','%GL_POST_CONVOLUTION_BLUE_SCALE_EXT','%GL_POST_CONVOLUTION_COLOR_TABLE_EXT','%GL_POST_CONVOLUTION_GREEN_BIAS_EXT',
+ '%GL_POST_CONVOLUTION_GREEN_SCALE_EXT','%GL_POST_CONVOLUTION_RED_BIAS_EXT','%GL_POST_CONVOLUTION_RED_SCALE_EXT','%GL_PROJECTION','%GL_PROJECTION_MATRIX','%GL_PROJECTION_STACK_DEPTH','%GL_PROXY_COLOR_TABLE_EXT','%GL_PROXY_HISTOGRAM_EXT',
+ '%GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_EXT','%GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_EXT','%GL_PROXY_TEXTURE_1D','%GL_PROXY_TEXTURE_2D','%GL_Q','%GL_QUADRATIC_ATTENUATION','%GL_QUADS','%GL_QUAD_STRIP',
+ '%GL_R','%GL_R3_G3_B2','%GL_READ_BUFFER','%GL_RED','%GL_REDUCE_EXT','%GL_RED_BIAS','%GL_RED_BITS','%GL_RED_SCALE',
+ '%GL_RENDER','%GL_RENDERER','%GL_RENDER_MODE','%GL_REPEAT','%GL_REPLACE','%GL_RETURN','%GL_RGB','%GL_RGB10',
+ '%GL_RGB10_A2','%GL_RGB12','%GL_RGB16','%GL_RGB4','%GL_RGB5','%GL_RGB5_A1','%GL_RGB8','%GL_RGBA',
+ '%GL_RGBA12','%GL_RGBA16','%GL_RGBA2','%GL_RGBA4','%GL_RGBA8','%GL_RGBA_MODE','%GL_RIGHT','%GL_S',
+ '%GL_SCISSOR_BIT','%GL_SCISSOR_BOX','%GL_SCISSOR_TEST','%GL_SECONDARY_COLOR_ARRAY_EXT','%GL_SECONDARY_COLOR_ARRAY_POINTER_EXT','%GL_SECONDARY_COLOR_ARRAY_SIZE_EXT','%GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT','%GL_SECONDARY_COLOR_ARRAY_TYPE_EXT',
+ '%GL_SELECT','%GL_SELECTION_BUFFER_POINTER','%GL_SELECTION_BUFFER_SIZE','%GL_SEPARABLE_2D_EXT','%GL_SEPARATE_SPECULAR_COLOR_EXT','%GL_SET','%GL_SHADE_MODEL','%GL_SHININESS',
+ '%GL_SHORT','%GL_SINGLE_COLOR_EXT','%GL_SMOOTH','%GL_SPECULAR','%GL_SPHERE_MAP','%GL_SPOT_CUTOFF','%GL_SPOT_DIRECTION','%GL_SPOT_EXPONENT',
+ '%GL_SRC_ALPHA','%GL_SRC_ALPHA_SATURATE','%GL_SRC_COLOR','%GL_STACK_OVERFLOW','%GL_STACK_UNDERFLOW','%GL_STENCIL','%GL_STENCIL_BITS','%GL_STENCIL_BUFFER_BIT',
+ '%GL_STENCIL_CLEAR_VALUE','%GL_STENCIL_FAIL','%GL_STENCIL_FUNC','%GL_STENCIL_INDEX','%GL_STENCIL_PASS_DEPTH_FAIL','%GL_STENCIL_PASS_DEPTH_PASS','%GL_STENCIL_REF','%GL_STENCIL_TEST',
+ '%GL_STENCIL_VALUE_MASK','%GL_STENCIL_WRITEMASK','%GL_STEREO','%GL_SUBPIXEL_BITS','%GL_T','%GL_T2F_C3F_V3F','%GL_T2F_C4F_N3F_V3F','%GL_T2F_C4UB_V3F',
+ '%GL_T2F_N3F_V3F','%GL_T2F_V3F','%GL_T4F_C4F_N3F_V4F','%GL_T4F_V4F','%GL_TABLE_TOO_LARGE_EXT','%GL_TEXTURE','%GL_TEXTURE_1D','%GL_TEXTURE_2D',
+ '%GL_TEXTURE_ALPHA_SIZE','%GL_TEXTURE_BINDING_1D','%GL_TEXTURE_BINDING_2D','%GL_TEXTURE_BIT','%GL_TEXTURE_BLUE_SIZE','%GL_TEXTURE_BORDER','%GL_TEXTURE_BORDER_COLOR','%GL_TEXTURE_COMPONENTS',
+ '%GL_TEXTURE_COORD_ARRAY','%GL_TEXTURE_COORD_ARRAY_COUNT_EXT','%GL_TEXTURE_COORD_ARRAY_EXT','%GL_TEXTURE_COORD_ARRAY_POINTER','%GL_TEXTURE_COORD_ARRAY_POINTER_EXT','%GL_TEXTURE_COORD_ARRAY_SIZE','%GL_TEXTURE_COORD_ARRAY_SIZE_EXT','%GL_TEXTURE_COORD_ARRAY_STRIDE',
+ '%GL_TEXTURE_COORD_ARRAY_STRIDE_EXT','%GL_TEXTURE_COORD_ARRAY_TYPE','%GL_TEXTURE_COORD_ARRAY_TYPE_EXT','%GL_TEXTURE_ENV','%GL_TEXTURE_ENV_COLOR','%GL_TEXTURE_ENV_MODE','%GL_TEXTURE_GEN_MODE','%GL_TEXTURE_GEN_Q',
+ '%GL_TEXTURE_GEN_R','%GL_TEXTURE_GEN_S','%GL_TEXTURE_GEN_T','%GL_TEXTURE_GREEN_SIZE','%GL_TEXTURE_HEIGHT','%GL_TEXTURE_INTENSITY_SIZE','%GL_TEXTURE_INTERNAL_FORMAT','%GL_TEXTURE_LUMINANCE_SIZE',
+ '%GL_TEXTURE_MAG_FILTER','%GL_TEXTURE_MATRIX','%GL_TEXTURE_MIN_FILTER','%GL_TEXTURE_PRIORITY','%GL_TEXTURE_RED_SIZE','%GL_TEXTURE_RESIDENT','%GL_TEXTURE_STACK_DEPTH','%GL_TEXTURE_WIDTH',
+ '%GL_TEXTURE_WRAP_S','%GL_TEXTURE_WRAP_T','%GL_TRANSFORM_BIT','%GL_TRIANGLES','%GL_TRIANGLE_FAN','%GL_TRIANGLE_STRIP','%GL_TRUE','%GL_UNPACK_ALIGNMENT',
+ '%GL_UNPACK_LSB_FIRST','%GL_UNPACK_ROW_LENGTH','%GL_UNPACK_SKIP_PIXELS','%GL_UNPACK_SKIP_ROWS','%GL_UNPACK_SWAP_BYTES','%GL_UNSIGNED_BYTE','%GL_UNSIGNED_BYTE_3_3_2_EXT','%GL_UNSIGNED_INT',
+ '%GL_UNSIGNED_INT_10_10_10_2_EXT','%GL_UNSIGNED_INT_8_8_8_8_EXT','%GL_UNSIGNED_SHORT','%GL_UNSIGNED_SHORT_4_4_4_4_EXT','%GL_UNSIGNED_SHORT_5_5_5_1_EXT','%GL_V2F','%GL_V3F','%GL_VENDOR',
+ '%GL_VERSION','%GL_VERSION_1_1','%GL_VERTEX_ARRAY','%GL_VERTEX_ARRAY_COUNT_EXT','%GL_VERTEX_ARRAY_EXT','%GL_VERTEX_ARRAY_POINTER','%GL_VERTEX_ARRAY_POINTER_EXT','%GL_VERTEX_ARRAY_SIZE',
+ '%GL_VERTEX_ARRAY_SIZE_EXT','%GL_VERTEX_ARRAY_STRIDE','%GL_VERTEX_ARRAY_STRIDE_EXT','%GL_VERTEX_ARRAY_TYPE','%GL_VERTEX_ARRAY_TYPE_EXT','%GL_VIEWPORT','%GL_VIEWPORT_BIT','%GL_WIN_SWAP_HINT',
+ '%GL_XOR','%GL_ZERO','%GL_ZOOM_X','%GL_ZOOM_Y','%GRAY','%GREEN','%GWLP_HINSTANCE','%GWLP_HWNDPARENT',
+ '%GWLP_ID','%GWLP_USERDATA','%GWLP_WNDPROC','%GWL_EXSTYLE','%GWL_HINSTANCE','%GWL_HWNDPARENT','%GWL_ID','%GWL_STYLE',
+ '%GWL_USERDATA','%GWL_WNDPROC','%HDM_FIRST','%HTCAPTION','%HWND_BOTTOM','%HWND_DESKTOP','%HWND_MESSAGE','%HWND_NOTOPMOST',
+ '%HWND_TOP','%HWND_TOPMOST','%ICRYPTO_XOR_DECREASE','%ICRYPTO_XOR_INCREASE','%ICRYPTO_XOR_NORMAL','%IDABORT','%IDCANCEL','%IDCONTINUE',
+ '%IDIGNORE','%IDNO','%IDOK','%IDRETRY','%IDTIMEOUT','%IDTRYAGAIN','%IDYES','%INTERNET_CONNECTION_CONFIGURED',
+ '%INTERNET_CONNECTION_LAN','%INTERNET_CONNECTION_MODEM','%INTERNET_CONNECTION_MODEM_BUSY','%INTERNET_CONNECTION_OFFLINE','%INTERNET_CONNECTION_PROXY','%INTERNET_RAS_INSTALLED','%LBN_DBLCLK','%LBN_KILLFOCUS',
+ '%LBN_SELCANCEL','%LBN_SELCHANGE','%LBN_SETFOCUS','%LBS_DISABLENOSCROLL','%LBS_EXTENDEDSEL','%LBS_MULTICOLUMN','%LBS_MULTIPLESEL','%LBS_NOINTEGRALHEIGHT',
+ '%LBS_NOSEL','%LBS_NOTIFY','%LBS_SORT','%LBS_STANDARD','%LBS_USETABSTOPS','%LB_ADDFILE','%LB_ADDSTRING','%LB_DELETESTRING',
+ '%LB_DIR','%LB_FINDSTRING','%LB_FINDSTRINGEXACT','%LB_GETANCHORINDEX','%LB_GETCARETINDEX','%LB_GETCOUNT','%LB_GETCURSEL','%LB_GETHORIZONTALEXTENT',
+ '%LB_GETITEMDATA','%LB_GETITEMHEIGHT','%LB_GETITEMRECT','%LB_GETLISTBOXINFO','%LB_GETLOCALE','%LB_GETSEL','%LB_GETSELCOUNT','%LB_GETSELITEMS',
+ '%LB_GETTEXT','%LB_GETTEXTLEN','%LB_GETTOPINDEX','%LB_INITSTORAGE','%LB_INSERTSTRING','%LB_ITEMFROMPOINT','%LB_MULTIPLEADDSTRING','%LB_RESETCONTENT',
+ '%LB_SELECTSTRING','%LB_SELITEMRANGE','%LB_SELITEMRANGEEX','%LB_SETANCHORINDEX','%LB_SETCARETINDEX','%LB_SETCOLUMNWIDTH','%LB_SETCOUNT','%LB_SETCURSEL',
+ '%LB_SETHORIZONTALEXTENT','%LB_SETITEMDATA','%LB_SETITEMHEIGHT','%LB_SETLOCALE','%LB_SETSEL','%LB_SETTABSTOPS','%LB_SETTOPINDEX','%LF_FACESIZE',
+ '%LTGRAY','%LVM_FIRST','%LWA_ALPHA','%LWA_COLORKEY','%MAGENTA','%MAXBYTE','%MAXCHAR','%MAXDWORD',
+ '%MAXSHORT','%MAXWORD','%MAX_PATH','%MB_ABORTRETRYIGNORE','%MB_APPLMODAL','%MB_CANCELTRYCONTINUE','%MB_DEFBUTTON1','%MB_DEFBUTTON2',
+ '%MB_DEFBUTTON3','%MB_HELP','%MB_ICONASTERISK','%MB_ICONERROR','%MB_ICONEXCLAMATION','%MB_ICONHAND','%MB_ICONINFORMATION','%MB_ICONQUESTION',
+ '%MB_ICONSTOP','%MB_ICONWARNING','%MB_OK','%MB_OKCANCEL','%MB_RETRYCANCEL','%MB_SIMPLE','%MB_SYSTEMMODAL','%MB_TOPMOST',
+ '%MB_YESNO','%MB_YESNOCANCEL','%MF_CHECKED','%MF_DISABLED','%MF_ENABLED','%MF_GRAYED','%MF_SEPARATOR','%MF_UNCHECKED',
+ '%MINCHAR','%MINLONG','%MINSHORT','%NULL','%ODBC352_INC','%ODBCVER','%ODBC_ADD_DSN','%ODBC_ADD_SYS_DSN',
+ '%ODBC_BOTH_DSN','%ODBC_CONFIG_DRIVER','%ODBC_CONFIG_DRIVER_MAX','%ODBC_CONFIG_DSN','%ODBC_CONFIG_SYS_DSN','%ODBC_DRIVER_VERSION','%ODBC_ERROR_COMPONENT_NOT_FOUND','%ODBC_ERROR_CREATE_DSN_FAILED',
+ '%ODBC_ERROR_GENERAL_ERR','%ODBC_ERROR_INVALID_BUFF_LEN','%ODBC_ERROR_INVALID_DSN','%ODBC_ERROR_INVALID_HWND','%ODBC_ERROR_INVALID_INF','%ODBC_ERROR_INVALID_KEYWORD_VALUE','%ODBC_ERROR_INVALID_LOG_FILE','%ODBC_ERROR_INVALID_NAME',
+ '%ODBC_ERROR_INVALID_PARAM_SEQUENCE','%ODBC_ERROR_INVALID_PATH','%ODBC_ERROR_INVALID_REQUEST_TYPE','%ODBC_ERROR_INVALID_STR','%ODBC_ERROR_LOAD_LIB_FAILED','%ODBC_ERROR_OUTPUT_STRING_TRUNCATED','%ODBC_ERROR_OUT_OF_MEM','%ODBC_ERROR_REMOVE_DSN_FAILED',
+ '%ODBC_ERROR_REQUEST_FAILED','%ODBC_ERROR_USAGE_UPDATE_FAILED','%ODBC_ERROR_USER_CANCELED','%ODBC_ERROR_WRITING_SYSINFO_FAILED','%ODBC_INSTALL_COMPLETE','%ODBC_INSTALL_DRIVER','%ODBC_INSTALL_INQUIRY','%ODBC_REMOVE_DEFAULT_DSN',
+ '%ODBC_REMOVE_DRIVER','%ODBC_REMOVE_DSN','%ODBC_REMOVE_SYS_DSN','%ODBC_SYSTEM_DSN','%ODBC_USER_DSN','%OFN_ALLOWMULTISELECT','%OFN_CREATEPROMPT','%OFN_ENABLEHOOK',
+ '%OFN_ENABLEINCLUDENOTIFY','%OFN_ENABLESIZING','%OFN_ENABLETEMPLATE','%OFN_ENABLETEMPLATEHANDLE','%OFN_EXPLORER','%OFN_EXTENSIONDIFFERENT','%OFN_FILEMUSTEXIST','%OFN_HIDEREADONLY',
+ '%OFN_LONGNAMES','%OFN_NOCHANGEDIR','%OFN_NODEREFERENCELINKS','%OFN_NOLONGNAMES','%OFN_NONETWORKBUTTON','%OFN_NOREADONLYRETURN','%OFN_NOTESTFILECREATE','%OFN_NOVALIDATE',
+ '%OFN_OVERWRITEPROMPT','%OFN_PATHMUSTEXIST','%OFN_READONLY','%OFN_SHAREAWARE','%OFN_SHOWHELP','%OS_ERROR_CALLFUNCTION','%OS_ERROR_EMPTYSTRING','%OS_ERROR_LOADLIBRARY',
+ '%OS_ERROR_SUCCESS','%OS_ERROR_WRONGPARAMETER','%OS_SHELL_ASYNC','%OS_SHELL_SYNC','%OS_WINDOWS_2K','%OS_WINDOWS_95','%OS_WINDOWS_95_OSR2','%OS_WINDOWS_98',
+ '%OS_WINDOWS_98_SE','%OS_WINDOWS_ME','%OS_WINDOWS_NT','%OS_WINDOWS_SERVER_2003','%OS_WINDOWS_SERVER_LONGHORN','%OS_WINDOWS_SERVER_LONGHORN_DC','%OS_WINDOWS_VISTA','%OS_WINDOWS_XP',
+ '%OS_WNDSTYLE_HIDE','%OS_WNDSTYLE_MAXIMIZED','%OS_WNDSTYLE_MINIMIZED','%OS_WNDSTYLE_MINIMIZEDNOFOCUS','%OS_WNDSTYLE_NORMAL','%OS_WNDSTYLE_NORMALNOFOCUS','%PATH_EXT','%PATH_FILE',
+ '%PATH_FILEEXT','%PATH_ROOT','%PATH_ROOTPATH','%PATH_ROOTPATHPROG','%PATH_ROOTPATHPROGEXT','%PBM_DELTAPOS','%PBM_GETPOS','%PBM_GETRANGE',
+ '%PBM_SETBARCOLOR','%PBM_SETBKCOLOR','%PBM_SETPOS','%PBM_SETRANGE','%PBM_SETRANGE32','%PBM_SETSTEP','%PBM_STEPIT','%PBS_SMOOTH',
+ '%PBS_VERTICAL','%PC_DISABLEWAKEEVENT_OFF','%PC_DISABLEWAKEEVENT_ON','%PC_EB_NOCONFIRMATION','%PC_EB_NOPROGRESSUI','%PC_EB_NORMAL','%PC_EB_NOSOUND','%PC_FORCECRITICAL_OFF',
+ '%PC_FORCECRITICAL_ON','%PC_HIBERNATE_OFF','%PC_HIBERNATE_ON','%PC_RD_FORCE','%PC_RD_FORCEIFHUNG','%PC_RD_LOGOFF','%PC_RD_POWEROFF','%PC_RD_REBOOT',
+ '%PC_RD_SHUTDOWN','%PC_SD_DONOT_FORCE','%PC_SD_DONOT_REBOOT','%PC_SD_FORCE','%PC_SD_REBOOT','%PFA_CENTER','%PFA_LEFT','%PFA_RIGHT',
+ '%PF_3DNOW_INSTRUCTIONS_AVAILABLE','%PF_CHANNELS_ENABLED','%PF_COMPARE64_EXCHANGE128','%PF_COMPARE_EXCHANGE128','%PF_COMPARE_EXCHANGE_DOUBLE','%PF_FLOATING_POINT_EMULATED','%PF_FLOATING_POINT_PRECISION_ERRATA','%PF_MMX_INSTRUCTIONS_AVAILABLE',
+ '%PF_NX_ENABLED','%PF_PAE_ENABLED','%PF_RDTSC_INSTRUCTION_AVAILABLE','%PF_SSE3_INSTRUCTIONS_AVAILABLE','%PF_XMMI64_INSTRUCTIONS_AVAILABLE','%PF_XMMI_INSTRUCTIONS_AVAILABLE','%PGM_FIRST','%RED',
+ '%RTF_UBB','%SAPI_SVSFDEFAULT','%SAPI_SVSFISFILENAME','%SAPI_SVSFISNOTXML','%SAPI_SVSFISXML','%SAPI_SVSFLAGSASYNC','%SAPI_SVSFNLPMASK','%SAPI_SVSFNLPSPEAKPUNC',
+ '%SAPI_SVSFPERSISTXML','%SAPI_SVSFPURGEBEFORESPEAK','%SAPI_SVSFUNUSEDFLAGS','%SAPI_SVSFVOICEMASK','%SBS_SIZEGRIP','%SB_BOTTOM','%SB_ENDSCROLL','%SB_LEFT',
+ '%SB_LINEDOWN','%SB_LINELEFT','%SB_LINERIGHT','%SB_LINEUP','%SB_PAGEDOWN','%SB_PAGELEFT','%SB_PAGERIGHT','%SB_PAGEUP',
+ '%SB_RIGHT','%SB_SETPARTS','%SB_SETTEXT','%SB_THUMBPOSITION','%SB_THUMBTRACK','%SB_TOP','%SCF_ALL','%SCF_ASSOCIATEFONT',
+ '%SCF_DEFAULT','%SCF_NOKBUPDATE','%SCF_SELECTION','%SCF_USEUIRULES','%SCF_WORD','%SC_CLOSE','%SC_CONTEXTHELP','%SC_HOTKEY',
+ '%SC_HSCROLL','%SC_KEYMENU','%SC_MAXIMIZE','%SC_MINIMIZE','%SC_MONITORPOWER','%SC_MOUSEMENU','%SC_MOVE','%SC_NEXTWINDOW',
+ '%SC_PREVWINDOW','%SC_RESTORE','%SC_SCREENSAVE','%SC_SIZE','%SC_TASKLIST','%SC_VSCROLL','%SERVICE_ACTIVE','%SERVICE_AUTO_START',
+ '%SERVICE_BOOT_START','%SERVICE_CONTINUE_PENDING','%SERVICE_DEMAND_START','%SERVICE_DISABLED','%SERVICE_DRIVER','%SERVICE_INACTIVE','%SERVICE_INFO_DISPLAY_NAME','%SERVICE_INFO_NAME',
+ '%SERVICE_PAUSED','%SERVICE_PAUSE_PENDING','%SERVICE_RUNNING','%SERVICE_START_PENDING','%SERVICE_STATE_ALL','%SERVICE_STOPPED','%SERVICE_STOP_PENDING','%SERVICE_SYSTEM_START',
+ '%SERVICE_TYPE_ALL','%SERVICE_WIN32','%SES_ALLOWBEEPS','%SES_BEEPONMAXTEXT','%SES_BIDI','%SES_EMULATE10','%SES_EMULATESYSEDIT','%SES_EXTENDBACKCOLOR',
+ '%SES_LOWERCASE','%SES_MAPCPS','%SES_NOIME','%SES_NOINPUTSEQUENCECHK','%SES_SCROLLONKILLFOCUS','%SES_UPPERCASE','%SES_USEAIMM','%SES_USECRLF',
+ '%SES_XLTCRCRLFTOCR','%SF_RTF','%SF_TEXT','%SMTP_SET_ATTACH_CONTENT_TYPE','%SMTP_SET_CONTENT_TYPE_PREFIX','%SQL_AA_FALSE','%SQL_AA_TRUE','%SQL_ACCESSIBLE_PROCEDURES',
+ '%SQL_ACCESSIBLE_TABLES','%SQL_ACCESS_MODE','%SQL_ACTIVE_CONNECTIONS','%SQL_ACTIVE_ENVIRONMENTS','%SQL_ACTIVE_STATEMENTS','%SQL_ADD','%SQL_AD_ADD_CONSTRAINT_DEFERRABLE','%SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED',
+ '%SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE','%SQL_AD_ADD_DOMAIN_CONSTRAINT','%SQL_AD_ADD_DOMAIN_DEFAULT','%SQL_AD_CONSTRAINT_NAME_DEFINITION','%SQL_AD_DROP_DOMAIN_CONSTRAINT','%SQL_AD_DROP_DOMAIN_DEFAULT','%SQL_AF_ALL',
+ '%SQL_AF_AVG','%SQL_AF_COUNT','%SQL_AF_DISTINCT','%SQL_AF_MAX','%SQL_AF_MIN','%SQL_AF_SUM','%SQL_AGGREGATE_FUNCTIONS','%SQL_ALL_EXCEPT_LIKE',
+ '%SQL_ALL_TYPES','%SQL_ALTER_DOMAIN','%SQL_ALTER_TABLE','%SQL_AM_CONNECTION','%SQL_AM_NONE','%SQL_AM_STATEMENT','%SQL_API_ALL_FUNCTIONS','%SQL_API_LOADBYORDINAL',
+ '%SQL_API_ODBC3_ALL_FUNCTIONS','%SQL_API_ODBC3_ALL_FUNCTIONS_SIZE','%SQL_API_SQLALLOCCONNECT','%SQL_API_SQLALLOCENV','%SQL_API_SQLALLOCHANDLE','%SQL_API_SQLALLOCHANDLESTD','%SQL_API_SQLALLOCSTMT','%SQL_API_SQLBINDCOL',
+ '%SQL_API_SQLBINDPARAM','%SQL_API_SQLBINDPARAMETER','%SQL_API_SQLBROWSECONNECT','%SQL_API_SQLBULKOPERATIONS','%SQL_API_SQLCANCEL','%SQL_API_SQLCLOSECURSOR','%SQL_API_SQLCOLATTRIBUTE','%SQL_API_SQLCOLATTRIBUTES',
+ '%SQL_API_SQLCOLUMNPRIVILEGES','%SQL_API_SQLCOLUMNS','%SQL_API_SQLCONNECT','%SQL_API_SQLCOPYDESC','%SQL_API_SQLDATASOURCES','%SQL_API_SQLDESCRIBECOL','%SQL_API_SQLDESCRIBEPARAM','%SQL_API_SQLDISCONNECT',
+ '%SQL_API_SQLDRIVERCONNECT','%SQL_API_SQLDRIVERS','%SQL_API_SQLENDTRAN','%SQL_API_SQLERROR','%SQL_API_SQLEXECDIRECT','%SQL_API_SQLEXECUTE','%SQL_API_SQLEXTENDEDFETCH','%SQL_API_SQLFETCH',
+ '%SQL_API_SQLFETCHSCROLL','%SQL_API_SQLFOREIGNKEYS','%SQL_API_SQLFREECONNECT','%SQL_API_SQLFREEENV','%SQL_API_SQLFREEHANDLE','%SQL_API_SQLFREESTMT','%SQL_API_SQLGETCONNECTATTR','%SQL_API_SQLGETCONNECTOPTION',
+ '%SQL_API_SQLGETCURSORNAME','%SQL_API_SQLGETDATA','%SQL_API_SQLGETDESCFIELD','%SQL_API_SQLGETDESCREC','%SQL_API_SQLGETDIAGFIELD','%SQL_API_SQLGETDIAGREC','%SQL_API_SQLGETENVATTR','%SQL_API_SQLGETFUNCTIONS',
+ '%SQL_API_SQLGETINFO','%SQL_API_SQLGETSTMTATTR','%SQL_API_SQLGETSTMTOPTION','%SQL_API_SQLGETTYPEINFO','%SQL_API_SQLMORERESULTS','%SQL_API_SQLNATIVESQL','%SQL_API_SQLNUMPARAMS','%SQL_API_SQLNUMRESULTCOLS',
+ '%SQL_API_SQLPARAMDATA','%SQL_API_SQLPARAMOPTIONS','%SQL_API_SQLPREPARE','%SQL_API_SQLPRIMARYKEYS','%SQL_API_SQLPROCEDURECOLUMNS','%SQL_API_SQLPROCEDURES','%SQL_API_SQLPUTDATA','%SQL_API_SQLROWCOUNT',
+ '%SQL_API_SQLSETCONNECTATTR','%SQL_API_SQLSETCONNECTOPTION','%SQL_API_SQLSETCURSORNAME','%SQL_API_SQLSETDESCFIELD','%SQL_API_SQLSETDESCREC','%SQL_API_SQLSETENVATTR','%SQL_API_SQLSETPARAM','%SQL_API_SQLSETPOS',
+ '%SQL_API_SQLSETSCROLLOPTIONS','%SQL_API_SQLSETSTMTATTR','%SQL_API_SQLSETSTMTOPTION','%SQL_API_SQLSPECIALCOLUMNS','%SQL_API_SQLSTATISTICS','%SQL_API_SQLTABLEPRIVILEGES','%SQL_API_SQLTABLES','%SQL_API_SQLTRANSACT',
+ '%SQL_ARD_TYPE','%SQL_ASYNC_ENABLE','%SQL_ASYNC_ENABLE_DEFAULT','%SQL_ASYNC_ENABLE_OFF','%SQL_ASYNC_ENABLE_ON','%SQL_ASYNC_MODE','%SQL_ATTR_ACCESS_MODE','%SQL_ATTR_ANSI_APP',
+ '%SQL_ATTR_APP_PARAM_DESC','%SQL_ATTR_APP_ROW_DESC','%SQL_ATTR_ASYNC_ENABLE','%SQL_ATTR_AUTOCOMMIT','%SQL_ATTR_AUTO_IPD','%SQL_ATTR_CONCURRENCY','%SQL_ATTR_CONNECTION_DEAD','%SQL_ATTR_CONNECTION_POOLING',
+ '%SQL_ATTR_CONNECTION_TIMEOUT','%SQL_ATTR_CP_MATCH','%SQL_ATTR_CURRENT_CATALOG','%SQL_ATTR_CURSOR_SCROLLABLE','%SQL_ATTR_CURSOR_SENSITIVITY','%SQL_ATTR_CURSOR_TYPE','%SQL_ATTR_DISCONNECT_BEHAVIOR','%SQL_ATTR_ENABLE_AUTO_IPD',
+ '%SQL_ATTR_ENLIST_IN_DTC','%SQL_ATTR_ENLIST_IN_XA','%SQL_ATTR_FETCH_BOOKMARK_PTR','%SQL_ATTR_IMP_PARAM_DESC','%SQL_ATTR_IMP_ROW_DESC','%SQL_ATTR_KEYSET_SIZE','%SQL_ATTR_LOGIN_TIMEOUT','%SQL_ATTR_MAX_LENGTH',
+ '%SQL_ATTR_MAX_ROWS','%SQL_ATTR_METADATA_ID','%SQL_ATTR_NOSCAN','%SQL_ATTR_ODBC_CURSORS','%SQL_ATTR_ODBC_VERSION','%SQL_ATTR_OUTPUT_NTS','%SQL_ATTR_PACKET_SIZE','%SQL_ATTR_PARAMSET_SIZE',
+ '%SQL_ATTR_PARAMS_PROCESSED_PTR','%SQL_ATTR_PARAM_BIND_OFFSET_PTR','%SQL_ATTR_PARAM_BIND_TYPE','%SQL_ATTR_PARAM_OPERATION_PTR','%SQL_ATTR_PARAM_STATUS_PTR','%SQL_ATTR_QUERY_TIMEOUT','%SQL_ATTR_QUIET_MODE','%SQL_ATTR_READONLY',
+ '%SQL_ATTR_READWRITE_UNKNOWN','%SQL_ATTR_RETRIEVE_DATA','%SQL_ATTR_ROWS_FETCHED_PTR','%SQL_ATTR_ROW_ARRAY_SIZE','%SQL_ATTR_ROW_BIND_OFFSET_PTR','%SQL_ATTR_ROW_BIND_TYPE','%SQL_ATTR_ROW_NUMBER','%SQL_ATTR_ROW_OPERATION_PTR',
+ '%SQL_ATTR_ROW_STATUS_PTR','%SQL_ATTR_SIMULATE_CURSOR','%SQL_ATTR_TRACE','%SQL_ATTR_TRACEFILE','%SQL_ATTR_TRANSLATE_LIB','%SQL_ATTR_TRANSLATE_OPTION','%SQL_ATTR_TXN_ISOLATION','%SQL_ATTR_USE_BOOKMARKS',
+ '%SQL_ATTR_WRITE','%SQL_AT_ADD_COLUMN','%SQL_AT_ADD_COLUMN_COLLATION','%SQL_AT_ADD_COLUMN_DEFAULT','%SQL_AT_ADD_COLUMN_SINGLE','%SQL_AT_ADD_CONSTRAINT','%SQL_AT_ADD_TABLE_CONSTRAINT','%SQL_AT_CONSTRAINT_DEFERRABLE',
+ '%SQL_AT_CONSTRAINT_INITIALLY_DEFERRED','%SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_AT_CONSTRAINT_NAME_DEFINITION','%SQL_AT_CONSTRAINT_NON_DEFERRABLE','%SQL_AT_DROP_COLUMN','%SQL_AT_DROP_COLUMN_CASCADE','%SQL_AT_DROP_COLUMN_DEFAULT','%SQL_AT_DROP_COLUMN_RESTRICT',
+ '%SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE','%SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT','%SQL_AT_SET_COLUMN_DEFAULT','%SQL_AUTOCOMMIT','%SQL_AUTOCOMMIT_DEFAULT','%SQL_AUTOCOMMIT_OFF','%SQL_AUTOCOMMIT_ON','%SQL_BATCH_ROW_COUNT',
+ '%SQL_BATCH_SUPPORT','%SQL_BEST_ROWID','%SQL_BIGINT','%SQL_BINARY','%SQL_BIND_BY_COLUMN','%SQL_BIND_TYPE','%SQL_BIND_TYPE_DEFAULT','%SQL_BIT',
+ '%SQL_BOOKMARK_PERSISTENCE','%SQL_BP_CLOSE','%SQL_BP_DELETE','%SQL_BP_DROP','%SQL_BP_OTHER_HSTMT','%SQL_BP_SCROLL','%SQL_BP_TRANSACTION','%SQL_BP_UPDATE',
+ '%SQL_BRC_EXPLICIT','%SQL_BRC_PROCEDURES','%SQL_BRC_ROLLED_UP','%SQL_BS_ROW_COUNT_EXPLICIT','%SQL_BS_ROW_COUNT_PROC','%SQL_BS_SELECT_EXPLICIT','%SQL_BS_SELECT_PROC','%SQL_CA1_ABSOLUTE',
+ '%SQL_CA1_BOOKMARK','%SQL_CA1_BULK_ADD','%SQL_CA1_BULK_DELETE_BY_BOOKMARK','%SQL_CA1_BULK_FETCH_BY_BOOKMARK','%SQL_CA1_BULK_UPDATE_BY_BOOKMARK','%SQL_CA1_LOCK_EXCLUSIVE','%SQL_CA1_LOCK_NO_CHANGE','%SQL_CA1_LOCK_UNLOCK',
+ '%SQL_CA1_NEXT','%SQL_CA1_POSITIONED_DELETE','%SQL_CA1_POSITIONED_UPDATE','%SQL_CA1_POS_DELETE','%SQL_CA1_POS_POSITION','%SQL_CA1_POS_REFRESH','%SQL_CA1_POS_UPDATE','%SQL_CA1_RELATIVE',
+ '%SQL_CA1_SELECT_FOR_UPDATE','%SQL_CA2_CRC_APPROXIMATE','%SQL_CA2_CRC_EXACT','%SQL_CA2_LOCK_CONCURRENCY','%SQL_CA2_MAX_ROWS_AFFECTS_ALL','%SQL_CA2_MAX_ROWS_CATALOG','%SQL_CA2_MAX_ROWS_DELETE','%SQL_CA2_MAX_ROWS_INSERT',
+ '%SQL_CA2_MAX_ROWS_SELECT','%SQL_CA2_MAX_ROWS_UPDATE','%SQL_CA2_OPT_ROWVER_CONCURRENCY','%SQL_CA2_OPT_VALUES_CONCURRENCY','%SQL_CA2_READ_ONLY_CONCURRENCY','%SQL_CA2_SENSITIVITY_ADDITIONS','%SQL_CA2_SENSITIVITY_DELETIONS','%SQL_CA2_SENSITIVITY_UPDATES',
+ '%SQL_CA2_SIMULATE_NON_UNIQUE','%SQL_CA2_SIMULATE_TRY_UNIQUE','%SQL_CA2_SIMULATE_UNIQUE','%SQL_CASCADE','%SQL_CATALOG_LOCATION','%SQL_CATALOG_NAME','%SQL_CATALOG_NAME_SEPARATOR','%SQL_CATALOG_TERM',
+ '%SQL_CATALOG_USAGE','%SQL_CA_CONSTRAINT_DEFERRABLE','%SQL_CA_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CA_CONSTRAINT_NON_DEFERRABLE','%SQL_CA_CREATE_ASSERTION','%SQL_CB_CLOSE','%SQL_CB_DELETE',
+ '%SQL_CB_NON_NULL','%SQL_CB_NULL','%SQL_CB_PRESERVE','%SQL_CCOL_CREATE_COLLATION','%SQL_CCS_COLLATE_CLAUSE','%SQL_CCS_CREATE_CHARACTER_SET','%SQL_CCS_LIMITED_COLLATION','%SQL_CC_CLOSE',
+ '%SQL_CC_DELETE','%SQL_CC_PRESERVE','%SQL_CDO_COLLATION','%SQL_CDO_CONSTRAINT','%SQL_CDO_CONSTRAINT_DEFERRABLE','%SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CDO_CONSTRAINT_NAME_DEFINITION',
+ '%SQL_CDO_CONSTRAINT_NON_DEFERRABLE','%SQL_CDO_CREATE_DOMAIN','%SQL_CDO_DEFAULT','%SQL_CD_FALSE','%SQL_CD_TRUE','%SQL_CHAR','%SQL_CLOSE','%SQL_CL_END',
+ '%SQL_CL_START','%SQL_CN_ANY','%SQL_CN_DIFFERENT','%SQL_CN_NONE','%SQL_CODE_DATE','%SQL_CODE_DAY','%SQL_CODE_DAY_TO_HOUR','%SQL_CODE_DAY_TO_MINUTE',
+ '%SQL_CODE_DAY_TO_SECOND','%SQL_CODE_HOUR','%SQL_CODE_HOUR_TO_MINUTE','%SQL_CODE_HOUR_TO_SECOND','%SQL_CODE_MINUTE','%SQL_CODE_MINUTE_TO_SECOND','%SQL_CODE_MONTH','%SQL_CODE_SECOND',
+ '%SQL_CODE_TIME','%SQL_CODE_TIMESTAMP','%SQL_CODE_YEAR','%SQL_CODE_YEAR_TO_MONTH','%SQL_COLATT_OPT_MAX','%SQL_COLATT_OPT_MIN','%SQL_COLLATION_SEQ','%SQL_COLUMN_ALIAS',
+ '%SQL_COLUMN_AUTO_INCREMENT','%SQL_COLUMN_CASE_SENSITIVE','%SQL_COLUMN_COUNT','%SQL_COLUMN_DISPLAY_SIZE','%SQL_COLUMN_IGNORE','%SQL_COLUMN_LABEL','%SQL_COLUMN_LENGTH','%SQL_COLUMN_MONEY',
+ '%SQL_COLUMN_NAME','%SQL_COLUMN_NULLABLE','%SQL_COLUMN_NUMBER_UNKNOWN','%SQL_COLUMN_OWNER_NAME','%SQL_COLUMN_PRECISION','%SQL_COLUMN_QUALIFIER_NAME','%SQL_COLUMN_SCALE','%SQL_COLUMN_SEARCHABLE',
+ '%SQL_COLUMN_TABLE_NAME','%SQL_COLUMN_TYPE','%SQL_COLUMN_TYPE_NAME','%SQL_COLUMN_UNSIGNED','%SQL_COLUMN_UPDATABLE','%SQL_COL_PRED_BASIC','%SQL_COL_PRED_CHAR','%SQL_COMMIT',
+ '%SQL_CONCAT_NULL_BEHAVIOR','%SQL_CONCURRENCY','%SQL_CONCUR_DEFAULT','%SQL_CONCUR_LOCK','%SQL_CONCUR_READ_ONLY','%SQL_CONCUR_ROWVER','%SQL_CONCUR_TIMESTAMP','%SQL_CONCUR_VALUES',
+ '%SQL_CONVERT_BIGINT','%SQL_CONVERT_BINARY','%SQL_CONVERT_BIT','%SQL_CONVERT_CHAR','%SQL_CONVERT_DATE','%SQL_CONVERT_DECIMAL','%SQL_CONVERT_DOUBLE','%SQL_CONVERT_FLOAT',
+ '%SQL_CONVERT_FUNCTIONS','%SQL_CONVERT_GUID','%SQL_CONVERT_INTEGER','%SQL_CONVERT_INTERVAL_DAY_TIME','%SQL_CONVERT_INTERVAL_YEAR_MONTH','%SQL_CONVERT_LONGVARBINARY','%SQL_CONVERT_LONGVARCHAR','%SQL_CONVERT_NUMERIC',
+ '%SQL_CONVERT_REAL','%SQL_CONVERT_SMALLINT','%SQL_CONVERT_TIME','%SQL_CONVERT_TIMESTAMP','%SQL_CONVERT_TINYINT','%SQL_CONVERT_VARBINARY','%SQL_CONVERT_VARCHAR','%SQL_CONVERT_WCHAR',
+ '%SQL_CONVERT_WLONGVARCHAR','%SQL_CONVERT_WVARCHAR','%SQL_CORRELATION_NAME','%SQL_CP_DEFAULT','%SQL_CP_MATCH_DEFAULT','%SQL_CP_OFF','%SQL_CP_ONE_PER_DRIVER','%SQL_CP_ONE_PER_HENV',
+ '%SQL_CP_RELAXED_MATCH','%SQL_CP_STRICT_MATCH','%SQL_CREATE_ASSERTION','%SQL_CREATE_CHARACTER_SET','%SQL_CREATE_COLLATION','%SQL_CREATE_DOMAIN','%SQL_CREATE_SCHEMA','%SQL_CREATE_TABLE',
+ '%SQL_CREATE_TRANSLATION','%SQL_CREATE_VIEW','%SQL_CR_CLOSE','%SQL_CR_DELETE','%SQL_CR_PRESERVE','%SQL_CS_AUTHORIZATION','%SQL_CS_CREATE_SCHEMA','%SQL_CS_DEFAULT_CHARACTER_SET',
+ '%SQL_CTR_CREATE_TRANSLATION','%SQL_CT_COLUMN_COLLATION','%SQL_CT_COLUMN_CONSTRAINT','%SQL_CT_COLUMN_DEFAULT','%SQL_CT_COMMIT_DELETE','%SQL_CT_COMMIT_PRESERVE','%SQL_CT_CONSTRAINT_DEFERRABLE','%SQL_CT_CONSTRAINT_INITIALLY_DEFERRED',
+ '%SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CT_CONSTRAINT_NAME_DEFINITION','%SQL_CT_CONSTRAINT_NON_DEFERRABLE','%SQL_CT_CREATE_TABLE','%SQL_CT_GLOBAL_TEMPORARY','%SQL_CT_LOCAL_TEMPORARY','%SQL_CT_TABLE_CONSTRAINT','%SQL_CURRENT_QUALIFIER',
+ '%SQL_CURSOR_COMMIT_BEHAVIOR','%SQL_CURSOR_DYNAMIC','%SQL_CURSOR_FORWARD_ONLY','%SQL_CURSOR_KEYSET_DRIVEN','%SQL_CURSOR_ROLLBACK_BEHAVIOR','%SQL_CURSOR_SENSITIVITY','%SQL_CURSOR_STATIC','%SQL_CURSOR_TYPE',
+ '%SQL_CURSOR_TYPE_DEFAULT','%SQL_CUR_DEFAULT','%SQL_CUR_USE_DRIVER','%SQL_CUR_USE_IF_NEEDED','%SQL_CUR_USE_ODBC','%SQL_CU_DML_STATEMENTS','%SQL_CU_INDEX_DEFINITION','%SQL_CU_PRIVILEGE_DEFINITION',
+ '%SQL_CU_PROCEDURE_INVOCATION','%SQL_CU_TABLE_DEFINITION','%SQL_CVT_BIGINT','%SQL_CVT_BINARY','%SQL_CVT_BIT','%SQL_CVT_CHAR','%SQL_CVT_DATE','%SQL_CVT_DECIMAL',
+ '%SQL_CVT_DOUBLE','%SQL_CVT_FLOAT','%SQL_CVT_GUID','%SQL_CVT_INTEGER','%SQL_CVT_INTERVAL_DAY_TIME','%SQL_CVT_INTERVAL_YEAR_MONTH','%SQL_CVT_LONGVARBINARY','%SQL_CVT_LONGVARCHAR',
+ '%SQL_CVT_NUMERIC','%SQL_CVT_REAL','%SQL_CVT_SMALLINT','%SQL_CVT_TIME','%SQL_CVT_TIMESTAMP','%SQL_CVT_TINYINT','%SQL_CVT_VARBINARY','%SQL_CVT_VARCHAR',
+ '%SQL_CVT_WCHAR','%SQL_CVT_WLONGVARCHAR','%SQL_CVT_WVARCHAR','%SQL_CV_CASCADED','%SQL_CV_CHECK_OPTION','%SQL_CV_CREATE_VIEW','%SQL_CV_LOCAL','%SQL_C_BINARY',
+ '%SQL_C_BIT','%SQL_C_BOOKMARK','%SQL_C_CHAR','%SQL_C_DATE','%SQL_C_DEFAULT','%SQL_C_DOUBLE','%SQL_C_FLOAT','%SQL_C_GUID',
+ '%SQL_C_INTERVAL_DAY','%SQL_C_INTERVAL_DAY_TO_HOUR','%SQL_C_INTERVAL_DAY_TO_MINUTE','%SQL_C_INTERVAL_DAY_TO_SECOND','%SQL_C_INTERVAL_HOUR','%SQL_C_INTERVAL_HOUR_TO_MINUTE','%SQL_C_INTERVAL_HOUR_TO_SECOND','%SQL_C_INTERVAL_MINUTE',
+ '%SQL_C_INTERVAL_MINUTE_TO_SECOND','%SQL_C_INTERVAL_MONTH','%SQL_C_INTERVAL_SECOND','%SQL_C_INTERVAL_YEAR','%SQL_C_INTERVAL_YEAR_TO_MONTH','%SQL_C_LONG','%SQL_C_NUMERIC','%SQL_C_SBIGINT',
+ '%SQL_C_SHORT','%SQL_C_SLONG','%SQL_C_SSHORT','%SQL_C_STINYINT','%SQL_C_TIME','%SQL_C_TIMESTAMP','%SQL_C_TINYINT','%SQL_C_TYPE_DATE',
+ '%SQL_C_TYPE_TIME','%SQL_C_TYPE_TIMESTAMP','%SQL_C_UBIGINT','%SQL_C_ULONG','%SQL_C_USHORT','%SQL_C_UTINYINT','%SQL_C_VARBOOKMARK','%SQL_DATABASE_NAME',
+ '%SQL_DATA_AT_EXEC','%SQL_DATA_SOURCE_NAME','%SQL_DATA_SOURCE_READ_ONLY','%SQL_DATE','%SQL_DATETIME','%SQL_DATETIME_LITERALS','%SQL_DATE_LEN','%SQL_DAY',
+ '%SQL_DAY_TO_HOUR','%SQL_DAY_TO_MINUTE','%SQL_DAY_TO_SECOND','%SQL_DA_DROP_ASSERTION','%SQL_DBMS_NAME','%SQL_DBMS_VER','%SQL_DB_DEFAULT','%SQL_DB_DISCONNECT',
+ '%SQL_DB_RETURN_TO_POOL','%SQL_DCS_DROP_CHARACTER_SET','%SQL_DC_DROP_COLLATION','%SQL_DDL_INDEX','%SQL_DD_CASCADE','%SQL_DD_DROP_DOMAIN','%SQL_DD_RESTRICT','%SQL_DECIMAL',
+ '%SQL_DEFAULT','%SQL_DEFAULT_PARAM','%SQL_DEFAULT_TXN_ISOLATION','%SQL_DELETE','%SQL_DELETE_BY_BOOKMARK','%SQL_DESCRIBE_PARAMETER','%SQL_DESC_ALLOC_AUTO','%SQL_DESC_ALLOC_TYPE',
+ '%SQL_DESC_ALLOC_USER','%SQL_DESC_ARRAY_SIZE','%SQL_DESC_ARRAY_STATUS_PTR','%SQL_DESC_AUTO_UNIQUE_VALUE','%SQL_DESC_BASE_COLUMN_NAME','%SQL_DESC_BASE_TABLE_NAME','%SQL_DESC_BIND_OFFSET_PTR','%SQL_DESC_BIND_TYPE',
+ '%SQL_DESC_CASE_SENSITIVE','%SQL_DESC_CATALOG_NAME','%SQL_DESC_CONCISE_TYPE','%SQL_DESC_COUNT','%SQL_DESC_DATA_PTR','%SQL_DESC_DATETIME_INTERVAL_CODE','%SQL_DESC_DATETIME_INTERVAL_PRECISION','%SQL_DESC_DISPLAY_SIZE',
+ '%SQL_DESC_FIXED_PREC_SCALE','%SQL_DESC_INDICATOR_PTR','%SQL_DESC_LABEL','%SQL_DESC_LENGTH','%SQL_DESC_LITERAL_PREFIX','%SQL_DESC_LITERAL_SUFFIX','%SQL_DESC_LOCAL_TYPE_NAME','%SQL_DESC_MAXIMUM_SCALE',
+ '%SQL_DESC_MINIMUM_SCALE','%SQL_DESC_NAME','%SQL_DESC_NULLABLE','%SQL_DESC_NUM_PREC_RADIX','%SQL_DESC_OCTET_LENGTH','%SQL_DESC_OCTET_LENGTH_PTR','%SQL_DESC_PARAMETER_TYPE','%SQL_DESC_PRECISION',
+ '%SQL_DESC_ROWS_PROCESSED_PTR','%SQL_DESC_SCALE','%SQL_DESC_SCHEMA_NAME','%SQL_DESC_SEARCHABLE','%SQL_DESC_TABLE_NAME','%SQL_DESC_TYPE','%SQL_DESC_TYPE_NAME','%SQL_DESC_UNNAMED',
+ '%SQL_DESC_UNSIGNED','%SQL_DESC_UPDATABLE','%SQL_DIAG_ALTER_TABLE','%SQL_DIAG_CALL','%SQL_DIAG_CLASS_ORIGIN','%SQL_DIAG_COLUMN_NUMBER','%SQL_DIAG_CONNECTION_NAME','%SQL_DIAG_CREATE_INDEX',
+ '%SQL_DIAG_CREATE_TABLE','%SQL_DIAG_CREATE_VIEW','%SQL_DIAG_CURSOR_ROW_COUNT','%SQL_DIAG_DELETE_WHERE','%SQL_DIAG_DROP_INDEX','%SQL_DIAG_DROP_TABLE','%SQL_DIAG_DROP_VIEW','%SQL_DIAG_DYNAMIC_DELETE_CURSOR',
+ '%SQL_DIAG_DYNAMIC_FUNCTION','%SQL_DIAG_DYNAMIC_FUNCTION_CODE','%SQL_DIAG_DYNAMIC_UPDATE_CURSOR','%SQL_DIAG_GRANT','%SQL_DIAG_INSERT','%SQL_DIAG_MESSAGE_TEXT','%SQL_DIAG_NATIVE','%SQL_DIAG_NUMBER',
+ '%SQL_DIAG_RETURNCODE','%SQL_DIAG_REVOKE','%SQL_DIAG_ROW_COUNT','%SQL_DIAG_ROW_NUMBER','%SQL_DIAG_SELECT_CURSOR','%SQL_DIAG_SERVER_NAME','%SQL_DIAG_SQLSTATE','%SQL_DIAG_SUBCLASS_ORIGIN',
+ '%SQL_DIAG_UNKNOWN_STATEMENT','%SQL_DIAG_UPDATE_WHERE','%SQL_DI_CREATE_INDEX','%SQL_DI_DROP_INDEX','%SQL_DL_SQL92_DATE','%SQL_DL_SQL92_INTERVAL_DAY','%SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR','%SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE',
+ '%SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND','%SQL_DL_SQL92_INTERVAL_HOUR','%SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE','%SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MINUTE','%SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MONTH','%SQL_DL_SQL92_INTERVAL_SECOND',
+ '%SQL_DL_SQL92_INTERVAL_YEAR','%SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH','%SQL_DL_SQL92_TIME','%SQL_DL_SQL92_TIMESTAMP','%SQL_DM_VER','%SQL_DOUBLE','%SQL_DRIVER_COMPLETE','%SQL_DRIVER_COMPLETE_REQUIRED',
+ '%SQL_DRIVER_HDBC','%SQL_DRIVER_HDESC','%SQL_DRIVER_HENV','%SQL_DRIVER_HLIB','%SQL_DRIVER_HSTMT','%SQL_DRIVER_NAME','%SQL_DRIVER_NOPROMPT','%SQL_DRIVER_ODBC_VER',
+ '%SQL_DRIVER_PROMPT','%SQL_DRIVER_VER','%SQL_DROP','%SQL_DROP_ASSERTION','%SQL_DROP_CHARACTER_SET','%SQL_DROP_COLLATION','%SQL_DROP_DOMAIN','%SQL_DROP_SCHEMA',
+ '%SQL_DROP_TABLE','%SQL_DROP_TRANSLATION','%SQL_DROP_VIEW','%SQL_DS_CASCADE','%SQL_DS_DROP_SCHEMA','%SQL_DS_RESTRICT','%SQL_DTC_DONE','%SQL_DTC_ENLIST_EXPENSIVE',
+ '%SQL_DTC_TRANSITION_COST','%SQL_DTC_UNENLIST_EXPENSIVE','%SQL_DTR_DROP_TRANSLATION','%SQL_DT_CASCADE','%SQL_DT_DROP_TABLE','%SQL_DT_RESTRICT','%SQL_DV_CASCADE','%SQL_DV_DROP_VIEW',
+ '%SQL_DV_RESTRICT','%SQL_DYNAMIC_CURSOR_ATTRIBUTES1','%SQL_DYNAMIC_CURSOR_ATTRIBUTES2','%SQL_ENSURE','%SQL_ENTIRE_ROWSET','%SQL_ERROR','%SQL_EXPRESSIONS_IN_ORDERBY','%SQL_FALSE',
+ '%SQL_FD_FETCH_ABSOLUTE','%SQL_FD_FETCH_BOOKMARK','%SQL_FD_FETCH_FIRST','%SQL_FD_FETCH_LAST','%SQL_FD_FETCH_NEXT','%SQL_FD_FETCH_PREV','%SQL_FD_FETCH_PRIOR','%SQL_FD_FETCH_RELATIVE',
+ '%SQL_FETCH_ABSOLUTE','%SQL_FETCH_BOOKMARK','%SQL_FETCH_BY_BOOKMARK','%SQL_FETCH_DIRECTION','%SQL_FETCH_FIRST','%SQL_FETCH_FIRST_SYSTEM','%SQL_FETCH_FIRST_USER','%SQL_FETCH_LAST',
+ '%SQL_FETCH_NEXT','%SQL_FETCH_PREV','%SQL_FETCH_PRIOR','%SQL_FETCH_RELATIVE','%SQL_FILE_CATALOG','%SQL_FILE_NOT_SUPPORTED','%SQL_FILE_QUALIFIER','%SQL_FILE_TABLE',
+ '%SQL_FILE_USAGE','%SQL_FLOAT','%SQL_FN_CVT_CAST','%SQL_FN_CVT_CONVERT','%SQL_FN_NUM_ABS','%SQL_FN_NUM_ACOS','%SQL_FN_NUM_ASIN','%SQL_FN_NUM_ATAN',
+ '%SQL_FN_NUM_ATAN2','%SQL_FN_NUM_CEILING','%SQL_FN_NUM_COS','%SQL_FN_NUM_COT','%SQL_FN_NUM_DEGREES','%SQL_FN_NUM_EXP','%SQL_FN_NUM_FLOOR','%SQL_FN_NUM_LOG',
+ '%SQL_FN_NUM_LOG10','%SQL_FN_NUM_MOD','%SQL_FN_NUM_PI','%SQL_FN_NUM_POWER','%SQL_FN_NUM_RADIANS','%SQL_FN_NUM_RAND','%SQL_FN_NUM_ROUND','%SQL_FN_NUM_SIGN',
+ '%SQL_FN_NUM_SIN','%SQL_FN_NUM_SQRT','%SQL_FN_NUM_TAN','%SQL_FN_NUM_TRUNCATE','%SQL_FN_STR_ASCII','%SQL_FN_STR_BIT_LENGTH','%SQL_FN_STR_CHAR','%SQL_FN_STR_CHARACTER_LENGTH',
+ '%SQL_FN_STR_CHAR_LENGTH','%SQL_FN_STR_CONCAT','%SQL_FN_STR_DIFFERENCE','%SQL_FN_STR_INSERT','%SQL_FN_STR_LCASE','%SQL_FN_STR_LEFT','%SQL_FN_STR_LENGTH','%SQL_FN_STR_LOCATE',
+ '%SQL_FN_STR_LOCATE_2','%SQL_FN_STR_LTRIM','%SQL_FN_STR_OCTET_LENGTH','%SQL_FN_STR_POSITION','%SQL_FN_STR_REPEAT','%SQL_FN_STR_REPLACE','%SQL_FN_STR_RIGHT','%SQL_FN_STR_RTRIM',
+ '%SQL_FN_STR_SOUNDEX','%SQL_FN_STR_SPACE','%SQL_FN_STR_SUBSTRING','%SQL_FN_STR_UCASE','%SQL_FN_SYS_DBNAME','%SQL_FN_SYS_IFNULL','%SQL_FN_SYS_USERNAME','%SQL_FN_TD_CURDATE',
+ '%SQL_FN_TD_CURRENT_DATE','%SQL_FN_TD_CURRENT_TIME','%SQL_FN_TD_CURRENT_TIMESTAMP','%SQL_FN_TD_CURTIME','%SQL_FN_TD_DAYNAME','%SQL_FN_TD_DAYOFMONTH','%SQL_FN_TD_DAYOFWEEK','%SQL_FN_TD_DAYOFYEAR',
+ '%SQL_FN_TD_EXTRACT','%SQL_FN_TD_HOUR','%SQL_FN_TD_MINUTE','%SQL_FN_TD_MONTH','%SQL_FN_TD_MONTHNAME','%SQL_FN_TD_NOW','%SQL_FN_TD_QUARTER','%SQL_FN_TD_SECOND',
+ '%SQL_FN_TD_TIMESTAMPADD','%SQL_FN_TD_TIMESTAMPDIFF','%SQL_FN_TD_WEEK','%SQL_FN_TD_YEAR','%SQL_FN_TSI_DAY','%SQL_FN_TSI_FRAC_SECOND','%SQL_FN_TSI_HOUR','%SQL_FN_TSI_MINUTE',
+ '%SQL_FN_TSI_MONTH','%SQL_FN_TSI_QUARTER','%SQL_FN_TSI_SECOND','%SQL_FN_TSI_WEEK','%SQL_FN_TSI_YEAR','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2','%SQL_GB_COLLATE',
+ '%SQL_GB_GROUP_BY_CONTAINS_SELECT','%SQL_GB_GROUP_BY_EQUALS_SELECT','%SQL_GB_NOT_SUPPORTED','%SQL_GB_NO_RELATION','%SQL_GD_ANY_COLUMN','%SQL_GD_ANY_ORDER','%SQL_GD_BLOCK','%SQL_GD_BOUND',
+ '%SQL_GETDATA_EXTENSIONS','%SQL_GET_BOOKMARK','%SQL_GROUP_BY','%SQL_GUID','%SQL_HANDLE_DBC','%SQL_HANDLE_DESC','%SQL_HANDLE_ENV','%SQL_HANDLE_SENV',
+ '%SQL_HANDLE_STMT','%SQL_HOUR','%SQL_HOUR_TO_MINUTE','%SQL_HOUR_TO_SECOND','%SQL_IC_LOWER','%SQL_IC_MIXED','%SQL_IC_SENSITIVE','%SQL_IC_UPPER',
+ '%SQL_IDENTIFIER_CASE','%SQL_IDENTIFIER_QUOTE_CHAR','%SQL_IGNORE','%SQL_IK_ALL','%SQL_IK_ASC','%SQL_IK_DESC','%SQL_IK_NONE','%SQL_INDEX_ALL',
+ '%SQL_INDEX_CLUSTERED','%SQL_INDEX_HASHED','%SQL_INDEX_KEYWORDS','%SQL_INDEX_OTHER','%SQL_INDEX_UNIQUE','%SQL_INFO_FIRST','%SQL_INFO_SCHEMA_VIEWS','%SQL_INITIALLY_DEFERRED',
+ '%SQL_INITIALLY_IMMEDIATE','%SQL_INSENSITIVE','%SQL_INSERT_STATEMENT','%SQL_INTEGER','%SQL_INTEGRITY','%SQL_INTERVAL','%SQL_INTERVAL_DAY','%SQL_INTERVAL_DAY_TO_HOUR',
+ '%SQL_INTERVAL_DAY_TO_MINUTE','%SQL_INTERVAL_DAY_TO_SECOND','%SQL_INTERVAL_HOUR','%SQL_INTERVAL_HOUR_TO_MINUTE','%SQL_INTERVAL_HOUR_TO_SECOND','%SQL_INTERVAL_MINUTE','%SQL_INTERVAL_MINUTE_TO_SECOND','%SQL_INTERVAL_MONTH',
+ '%SQL_INTERVAL_SECOND','%SQL_INTERVAL_YEAR','%SQL_INTERVAL_YEAR_TO_MONTH','%SQL_INVALID_HANDLE','%SQL_ISV_ASSERTIONS','%SQL_ISV_CHARACTER_SETS','%SQL_ISV_CHECK_CONSTRAINTS','%SQL_ISV_COLLATIONS',
+ '%SQL_ISV_COLUMNS','%SQL_ISV_COLUMN_DOMAIN_USAGE','%SQL_ISV_COLUMN_PRIVILEGES','%SQL_ISV_CONSTRAINT_COLUMN_USAGE','%SQL_ISV_CONSTRAINT_TABLE_USAGE','%SQL_ISV_DOMAINS','%SQL_ISV_DOMAIN_CONSTRAINTS','%SQL_ISV_KEY_COLUMN_USAGE',
+ '%SQL_ISV_REFERENTIAL_CONSTRAINTS','%SQL_ISV_SCHEMATA','%SQL_ISV_SQL_LANGUAGES','%SQL_ISV_TABLES','%SQL_ISV_TABLE_CONSTRAINTS','%SQL_ISV_TABLE_PRIVILEGES','%SQL_ISV_TRANSLATIONS','%SQL_ISV_USAGE_PRIVILEGES',
+ '%SQL_ISV_VIEWS','%SQL_ISV_VIEW_COLUMN_USAGE','%SQL_ISV_VIEW_TABLE_USAGE','%SQL_IS_DAY','%SQL_IS_DAY_TO_HOUR','%SQL_IS_DAY_TO_MINUTE','%SQL_IS_DAY_TO_SECOND','%SQL_IS_HOUR',
+ '%SQL_IS_HOUR_TO_MINUTE','%SQL_IS_HOUR_TO_SECOND','%SQL_IS_INSERT_LITERALS','%SQL_IS_INSERT_SEARCHED','%SQL_IS_INTEGER','%SQL_IS_MINUTE','%SQL_IS_MINUTE_TO_SECOND','%SQL_IS_MONTH',
+ '%SQL_IS_POINTER','%SQL_IS_SECOND','%SQL_IS_SELECT_INTO','%SQL_IS_SMALLINT','%SQL_IS_UINTEGER','%SQL_IS_USMALLINT','%SQL_IS_YEAR','%SQL_IS_YEAR_TO_MONTH',
+ '%SQL_KEYSET_CURSOR_ATTRIBUTES1','%SQL_KEYSET_CURSOR_ATTRIBUTES2','%SQL_KEYSET_SIZE','%SQL_KEYSET_SIZE_DEFAULT','%SQL_KEYWORDS','%SQL_LCK_EXCLUSIVE','%SQL_LCK_NO_CHANGE','%SQL_LCK_UNLOCK',
+ '%SQL_LEN_BINARY_ATTR_OFFSET','%SQL_LEN_DATA_AT_EXEC_OFFSET','%SQL_LIKE_ESCAPE_CLAUSE','%SQL_LIKE_ONLY','%SQL_LOCK_EXCLUSIVE','%SQL_LOCK_NO_CHANGE','%SQL_LOCK_TYPES','%SQL_LOCK_UNLOCK',
+ '%SQL_LOGIN_TIMEOUT','%SQL_LOGIN_TIMEOUT_DEFAULT','%SQL_LONGVARBINARY','%SQL_LONGVARCHAR','%SQL_MAXIMUM_CATALOG_NAME_LENGTH','%SQL_MAXIMUM_COLUMNS_IN_GROUP_BY','%SQL_MAXIMUM_COLUMNS_IN_INDEX','%SQL_MAXIMUM_COLUMNS_IN_ORDER_BY',
+ '%SQL_MAXIMUM_COLUMNS_IN_SELECT','%SQL_MAXIMUM_COLUMN_NAME_LENGTH','%SQL_MAXIMUM_CONCURRENT_ACTIVITIES','%SQL_MAXIMUM_CURSOR_NAME_LENGTH','%SQL_MAXIMUM_DRIVER_CONNECTIONS','%SQL_MAXIMUM_IDENTIFIER_LENGTH','%SQL_MAXIMUM_INDEX_SIZE','%SQL_MAXIMUM_ROW_SIZE',
+ '%SQL_MAXIMUM_SCHEMA_NAME_LENGTH','%SQL_MAXIMUM_STATEMENT_LENGTH','%SQL_MAXIMUM_TABLES_IN_SELECT','%SQL_MAXIMUM_USER_NAME_LENGTH','%SQL_MAX_ASYNC_CONCURRENT_STATEMENTS','%SQL_MAX_BINARY_LITERAL_LEN','%SQL_MAX_CATALOG_NAME_LEN','%SQL_MAX_CHAR_LITERAL_LEN',
+ '%SQL_MAX_COLUMNS_IN_GROUP_BY','%SQL_MAX_COLUMNS_IN_INDEX','%SQL_MAX_COLUMNS_IN_ORDER_BY','%SQL_MAX_COLUMNS_IN_SELECT','%SQL_MAX_COLUMNS_IN_TABLE','%SQL_MAX_COLUMN_NAME_LEN','%SQL_MAX_CONCURRENT_ACTIVITIES','%SQL_MAX_CURSOR_NAME_LEN',
+ '%SQL_MAX_DRIVER_CONNECTIONS','%SQL_MAX_DSN_LENGTH','%SQL_MAX_IDENTIFIER_LEN','%SQL_MAX_INDEX_SIZE','%SQL_MAX_LENGTH','%SQL_MAX_LENGTH_DEFAULT','%SQL_MAX_MESSAGE_LENGTH','%SQL_MAX_NUMERIC_LEN',
+ '%SQL_MAX_OPTION_STRING_LENGTH','%SQL_MAX_OWNER_NAME_LEN','%SQL_MAX_PROCEDURE_NAME_LEN','%SQL_MAX_QUALIFIER_NAME_LEN','%SQL_MAX_ROWS','%SQL_MAX_ROWS_DEFAULT','%SQL_MAX_ROW_SIZE','%SQL_MAX_ROW_SIZE_INCLUDES_LONG',
+ '%SQL_MAX_SCHEMA_NAME_LEN','%SQL_MAX_STATEMENT_LEN','%SQL_MAX_TABLES_IN_SELECT','%SQL_MAX_TABLE_NAME_LEN','%SQL_MAX_USER_NAME_LEN','%SQL_MINUTE','%SQL_MINUTE_TO_SECOND','%SQL_MODE_DEFAULT',
+ '%SQL_MODE_READ_ONLY','%SQL_MODE_READ_WRITE','%SQL_MONTH','%SQL_MULTIPLE_ACTIVE_TXN','%SQL_MULT_RESULT_SETS','%SQL_NAMED','%SQL_NC_END','%SQL_NC_HIGH',
+ '%SQL_NC_LOW','%SQL_NC_START','%SQL_NEED_DATA','%SQL_NEED_LONG_DATA_LEN','%SQL_NNC_NON_NULL','%SQL_NNC_NULL','%SQL_NONSCROLLABLE','%SQL_NON_NULLABLE_COLUMNS',
+ '%SQL_NOSCAN','%SQL_NOSCAN_DEFAULT','%SQL_NOSCAN_OFF','%SQL_NOSCAN_ON','%SQL_NOT_DEFERRABLE','%SQL_NO_ACTION','%SQL_NO_COLUMN_NUMBER','%SQL_NO_DATA',
+ '%SQL_NO_DATA_FOUND','%SQL_NO_NULLS','%SQL_NO_ROW_NUMBER','%SQL_NO_TOTAL','%SQL_NTS','%SQL_NTSL','%SQL_NULLABLE','%SQL_NULLABLE_UNKNOWN',
+ '%SQL_NULL_COLLATION','%SQL_NULL_DATA','%SQL_NULL_HANDLE','%SQL_NULL_HDBC','%SQL_NULL_HDESC','%SQL_NULL_HENV','%SQL_NULL_HSTMT','%SQL_NUMERIC',
+ '%SQL_NUMERIC_FUNCTIONS','%SQL_OAC_LEVEL1','%SQL_OAC_LEVEL2','%SQL_OAC_NONE','%SQL_ODBC_API_CONFORMANCE','%SQL_ODBC_CURSORS','%SQL_ODBC_INTERFACE_CONFORMANCE','%SQL_ODBC_SAG_CLI_CONFORMANCE',
+ '%SQL_ODBC_SQL_CONFORMANCE','%SQL_ODBC_SQL_OPT_IEF','%SQL_ODBC_VER','%SQL_OIC_CORE','%SQL_OIC_LEVEL1','%SQL_OIC_LEVEL2','%SQL_OJ_ALL_COMPARISON_OPS','%SQL_OJ_CAPABILITIES',
+ '%SQL_OJ_FULL','%SQL_OJ_INNER','%SQL_OJ_LEFT','%SQL_OJ_NESTED','%SQL_OJ_NOT_ORDERED','%SQL_OJ_RIGHT','%SQL_OPT_TRACE','%SQL_OPT_TRACEFILE',
+ '%SQL_OPT_TRACE_DEFAULT','%SQL_OPT_TRACE_OFF','%SQL_OPT_TRACE_ON','%SQL_ORDER_BY_COLUMNS_IN_SELECT','%SQL_OSCC_COMPLIANT','%SQL_OSCC_NOT_COMPLIANT','%SQL_OSC_CORE','%SQL_OSC_EXTENDED',
+ '%SQL_OSC_MINIMUM','%SQL_OUTER_JOINS','%SQL_OUTER_JOIN_CAPABILITIES','%SQL_OU_DML_STATEMENTS','%SQL_OU_INDEX_DEFINITION','%SQL_OU_PRIVILEGE_DEFINITION','%SQL_OU_PROCEDURE_INVOCATION','%SQL_OU_TABLE_DEFINITION',
+ '%SQL_OV_ODBC2','%SQL_OV_ODBC3','%SQL_OWNER_TERM','%SQL_OWNER_USAGE','%SQL_PACKET_SIZE','%SQL_PARAM_ARRAY_ROW_COUNTS','%SQL_PARAM_ARRAY_SELECTS','%SQL_PARAM_BIND_BY_COLUMN',
+ '%SQL_PARAM_BIND_TYPE_DEFAULT','%SQL_PARAM_DIAG_UNAVAILABLE','%SQL_PARAM_ERROR','%SQL_PARAM_IGNORE','%SQL_PARAM_INPUT','%SQL_PARAM_INPUT_OUTPUT','%SQL_PARAM_OUTPUT','%SQL_PARAM_PROCEED',
+ '%SQL_PARAM_SUCCESS','%SQL_PARAM_SUCCESS_WITH_INFO','%SQL_PARAM_TYPE_DEFAULT','%SQL_PARAM_TYPE_UNKNOWN','%SQL_PARAM_UNUSED','%SQL_PARC_BATCH','%SQL_PARC_NO_BATCH','%SQL_PAS_BATCH',
+ '%SQL_PAS_NO_BATCH','%SQL_PAS_NO_SELECT','%SQL_PC_NON_PSEUDO','%SQL_PC_NOT_PSEUDO','%SQL_PC_PSEUDO','%SQL_PC_UNKNOWN','%SQL_POSITION','%SQL_POSITIONED_STATEMENTS',
+ '%SQL_POS_ADD','%SQL_POS_DELETE','%SQL_POS_OPERATIONS','%SQL_POS_POSITION','%SQL_POS_REFRESH','%SQL_POS_UPDATE','%SQL_PRED_BASIC','%SQL_PRED_CHAR',
+ '%SQL_PRED_NONE','%SQL_PRED_SEARCHABLE','%SQL_PROCEDURES','%SQL_PROCEDURE_TERM','%SQL_PS_POSITIONED_DELETE','%SQL_PS_POSITIONED_UPDATE','%SQL_PS_SELECT_FOR_UPDATE','%SQL_PT_FUNCTION',
+ '%SQL_PT_PROCEDURE','%SQL_PT_UNKNOWN','%SQL_QL_END','%SQL_QL_START','%SQL_QUALIFIER_LOCATION','%SQL_QUALIFIER_NAME_SEPARATOR','%SQL_QUALIFIER_TERM','%SQL_QUALIFIER_USAGE',
+ '%SQL_QUERY_TIMEOUT','%SQL_QUERY_TIMEOUT_DEFAULT','%SQL_QUICK','%SQL_QUIET_MODE','%SQL_QUOTED_IDENTIFIER_CASE','%SQL_QU_DML_STATEMENTS','%SQL_QU_INDEX_DEFINITION','%SQL_QU_PRIVILEGE_DEFINITION',
+ '%SQL_QU_PROCEDURE_INVOCATION','%SQL_QU_TABLE_DEFINITION','%SQL_RD_DEFAULT','%SQL_RD_OFF','%SQL_RD_ON','%SQL_REAL','%SQL_REFRESH','%SQL_RESET_PARAMS',
+ '%SQL_RESTRICT','%SQL_RESULT_COL','%SQL_RETRIEVE_DATA','%SQL_RETURN_VALUE','%SQL_ROLLBACK','%SQL_ROWSET_SIZE','%SQL_ROWSET_SIZE_DEFAULT','%SQL_ROWVER',
+ '%SQL_ROW_ADDED','%SQL_ROW_DELETED','%SQL_ROW_ERROR','%SQL_ROW_IDENTIFIER','%SQL_ROW_IGNORE','%SQL_ROW_NOROW','%SQL_ROW_NUMBER','%SQL_ROW_NUMBER_UNKNOWN',
+ '%SQL_ROW_PROCEED','%SQL_ROW_SUCCESS','%SQL_ROW_SUCCESS_WITH_INFO','%SQL_ROW_UPDATED','%SQL_ROW_UPDATES','%SQL_SCCO_LOCK','%SQL_SCCO_OPT_ROWVER','%SQL_SCCO_OPT_TIMESTAMP',
+ '%SQL_SCCO_OPT_VALUES','%SQL_SCCO_READ_ONLY','%SQL_SCC_ISO92_CLI','%SQL_SCC_XOPEN_CLI_VERSION1','%SQL_SCHEMA_TERM','%SQL_SCHEMA_USAGE','%SQL_SCOPE_CURROW','%SQL_SCOPE_SESSION',
+ '%SQL_SCOPE_TRANSACTION','%SQL_SCROLLABLE','%SQL_SCROLL_CONCURRENCY','%SQL_SCROLL_DYNAMIC','%SQL_SCROLL_FORWARD_ONLY','%SQL_SCROLL_KEYSET_DRIVEN','%SQL_SCROLL_OPTIONS','%SQL_SCROLL_STATIC',
+ '%SQL_SC_FIPS127_2_TRANSITIONAL','%SQL_SC_NON_UNIQUE','%SQL_SC_SQL92_ENTRY','%SQL_SC_SQL92_FULL','%SQL_SC_SQL92_INTERMEDIATE','%SQL_SC_TRY_UNIQUE','%SQL_SC_UNIQUE','%SQL_SDF_CURRENT_DATE',
+ '%SQL_SDF_CURRENT_TIME','%SQL_SDF_CURRENT_TIMESTAMP','%SQL_SEARCHABLE','%SQL_SEARCH_PATTERN_ESCAPE','%SQL_SECOND','%SQL_SENSITIVE','%SQL_SERVER_NAME','%SQL_SETPARAM_VALUE_MAX',
+ '%SQL_SETPOS_MAX_LOCK_VALUE','%SQL_SETPOS_MAX_OPTION_VALUE','%SQL_SET_DEFAULT','%SQL_SET_NULL','%SQL_SFKD_CASCADE','%SQL_SFKD_NO_ACTION','%SQL_SFKD_SET_DEFAULT','%SQL_SFKD_SET_NULL',
+ '%SQL_SFKU_CASCADE','%SQL_SFKU_NO_ACTION','%SQL_SFKU_SET_DEFAULT','%SQL_SFKU_SET_NULL','%SQL_SG_DELETE_TABLE','%SQL_SG_INSERT_COLUMN','%SQL_SG_INSERT_TABLE','%SQL_SG_REFERENCES_COLUMN',
+ '%SQL_SG_REFERENCES_TABLE','%SQL_SG_SELECT_TABLE','%SQL_SG_UPDATE_COLUMN','%SQL_SG_UPDATE_TABLE','%SQL_SG_USAGE_ON_CHARACTER_SET','%SQL_SG_USAGE_ON_COLLATION','%SQL_SG_USAGE_ON_DOMAIN','%SQL_SG_USAGE_ON_TRANSLATION',
+ '%SQL_SG_WITH_GRANT_OPTION','%SQL_SIGNED_OFFSET','%SQL_SIMULATE_CURSOR','%SQL_SMALLINT','%SQL_SNVF_BIT_LENGTH','%SQL_SNVF_CHARACTER_LENGTH','%SQL_SNVF_CHAR_LENGTH','%SQL_SNVF_EXTRACT',
+ '%SQL_SNVF_OCTET_LENGTH','%SQL_SNVF_POSITION','%SQL_SO_DYNAMIC','%SQL_SO_FORWARD_ONLY','%SQL_SO_KEYSET_DRIVEN','%SQL_SO_MIXED','%SQL_SO_STATIC','%SQL_SPECIAL_CHARACTERS',
+ '%SQL_SPEC_MAJOR','%SQL_SPEC_MINOR','%SQL_SP_BETWEEN','%SQL_SP_COMPARISON','%SQL_SP_EXISTS','%SQL_SP_IN','%SQL_SP_ISNOTNULL','%SQL_SP_ISNULL',
+ '%SQL_SP_LIKE','%SQL_SP_MATCH_FULL','%SQL_SP_MATCH_PARTIAL','%SQL_SP_MATCH_UNIQUE_FULL','%SQL_SP_MATCH_UNIQUE_PARTIAL','%SQL_SP_OVERLAPS','%SQL_SP_QUANTIFIED_COMPARISON','%SQL_SP_UNIQUE',
+ '%SQL_SQL92_DATETIME_FUNCTIONS','%SQL_SQL92_FOREIGN_KEY_DELETE_RULE','%SQL_SQL92_FOREIGN_KEY_UPDATE_RULE','%SQL_SQL92_GRANT','%SQL_SQL92_NUMERIC_VALUE_FUNCTIONS','%SQL_SQL92_PREDICATES','%SQL_SQL92_RELATIONAL_JOIN_OPERATORS','%SQL_SQL92_REVOKE',
+ '%SQL_SQL92_ROW_VALUE_CONSTRUCTOR','%SQL_SQL92_STRING_FUNCTIONS','%SQL_SQL92_VALUE_EXPRESSIONS','%SQL_SQLSTATE_SIZE','%SQL_SQL_CONFORMANCE','%SQL_SQ_COMPARISON','%SQL_SQ_CORRELATED_SUBQUERIES','%SQL_SQ_EXISTS',
+ '%SQL_SQ_IN','%SQL_SQ_QUANTIFIED','%SQL_SRJO_CORRESPONDING_CLAUSE','%SQL_SRJO_CROSS_JOIN','%SQL_SRJO_EXCEPT_JOIN','%SQL_SRJO_FULL_OUTER_JOIN','%SQL_SRJO_INNER_JOIN','%SQL_SRJO_INTERSECT_JOIN',
+ '%SQL_SRJO_LEFT_OUTER_JOIN','%SQL_SRJO_NATURAL_JOIN','%SQL_SRJO_RIGHT_OUTER_JOIN','%SQL_SRJO_UNION_JOIN','%SQL_SRVC_DEFAULT','%SQL_SRVC_NULL','%SQL_SRVC_ROW_SUBQUERY','%SQL_SRVC_VALUE_EXPRESSION',
+ '%SQL_SR_CASCADE','%SQL_SR_DELETE_TABLE','%SQL_SR_GRANT_OPTION_FOR','%SQL_SR_INSERT_COLUMN','%SQL_SR_INSERT_TABLE','%SQL_SR_REFERENCES_COLUMN','%SQL_SR_REFERENCES_TABLE','%SQL_SR_RESTRICT',
+ '%SQL_SR_SELECT_TABLE','%SQL_SR_UPDATE_COLUMN','%SQL_SR_UPDATE_TABLE','%SQL_SR_USAGE_ON_CHARACTER_SET','%SQL_SR_USAGE_ON_COLLATION','%SQL_SR_USAGE_ON_DOMAIN','%SQL_SR_USAGE_ON_TRANSLATION','%SQL_SSF_CONVERT',
+ '%SQL_SSF_LOWER','%SQL_SSF_SUBSTRING','%SQL_SSF_TRANSLATE','%SQL_SSF_TRIM_BOTH','%SQL_SSF_TRIM_LEADING','%SQL_SSF_TRIM_TRAILING','%SQL_SSF_UPPER','%SQL_SS_ADDITIONS',
+ '%SQL_SS_DELETIONS','%SQL_SS_UPDATES','%SQL_STANDARD_CLI_CONFORMANCE','%SQL_STATIC_CURSOR_ATTRIBUTES1','%SQL_STATIC_CURSOR_ATTRIBUTES2','%SQL_STATIC_SENSITIVITY','%SQL_STILL_EXECUTING','%SQL_STRING_FUNCTIONS',
+ '%SQL_SUBQUERIES','%SQL_SUCCESS','%SQL_SUCCESS_WITH_INFO','%SQL_SU_DML_STATEMENTS','%SQL_SU_INDEX_DEFINITION','%SQL_SU_PRIVILEGE_DEFINITION','%SQL_SU_PROCEDURE_INVOCATION','%SQL_SU_TABLE_DEFINITION',
+ '%SQL_SVE_CASE','%SQL_SVE_CAST','%SQL_SVE_COALESCE','%SQL_SVE_NULLIF','%SQL_SYSTEM_FUNCTIONS','%SQL_TABLE_STAT','%SQL_TABLE_TERM','%SQL_TC_ALL',
+ '%SQL_TC_DDL_COMMIT','%SQL_TC_DDL_IGNORE','%SQL_TC_DML','%SQL_TC_NONE','%SQL_TIME','%SQL_TIMEDATE_ADD_INTERVALS','%SQL_TIMEDATE_DIFF_INTERVALS','%SQL_TIMEDATE_FUNCTIONS',
+ '%SQL_TIMESTAMP','%SQL_TIMESTAMP_LEN','%SQL_TIME_LEN','%SQL_TINYINT','%SQL_TRANSACTION_CAPABLE','%SQL_TRANSACTION_ISOLATION_OPTION','%SQL_TRANSACTION_READ_COMMITTED','%SQL_TRANSACTION_READ_UNCOMMITTED',
+ '%SQL_TRANSACTION_REPEATABLE_READ','%SQL_TRANSACTION_SERIALIZABLE','%SQL_TRANSLATE_DLL','%SQL_TRANSLATE_OPTION','%SQL_TRUE','%SQL_TXN_CAPABLE','%SQL_TXN_ISOLATION','%SQL_TXN_ISOLATION_OPTION',
+ '%SQL_TXN_READ_COMMITTED','%SQL_TXN_READ_UNCOMMITTED','%SQL_TXN_REPEATABLE_READ','%SQL_TXN_SERIALIZABLE','%SQL_TYPE_DATE','%SQL_TYPE_NULL','%SQL_TYPE_TIME','%SQL_TYPE_TIMESTAMP',
+ '%SQL_UB_DEFAULT','%SQL_UB_FIXED','%SQL_UB_OFF','%SQL_UB_ON','%SQL_UB_VARIABLE','%SQL_UNBIND','%SQL_UNICODE','%SQL_UNICODE_CHAR',
+ '%SQL_UNICODE_LONGVARCHAR','%SQL_UNICODE_VARCHAR','%SQL_UNION','%SQL_UNION_STATEMENT','%SQL_UNKNOWN_TYPE','%SQL_UNNAMED','%SQL_UNSEARCHABLE','%SQL_UNSIGNED_OFFSET',
+ '%SQL_UNSPECIFIED','%SQL_UPDATE','%SQL_UPDATE_BY_BOOKMARK','%SQL_USER_NAME','%SQL_USE_BOOKMARKS','%SQL_US_UNION','%SQL_US_UNION_ALL','%SQL_U_UNION',
+ '%SQL_U_UNION_ALL','%SQL_VARBINARY','%SQL_VARCHAR','%SQL_XOPEN_CLI_YEAR','%SQL_YEAR','%SQL_YEAR_TO_MONTH','%SRCCOPY','%SS_BITMAP',
+ '%SS_BLACKFRAME','%SS_BLACKRECT','%SS_CENTER','%SS_CENTERIMAGE','%SS_ENDELLIPSIS','%SS_ETCHEDFRAME','%SS_ETCHEDHORZ','%SS_ETCHEDVERT',
+ '%SS_GRAYFRAME','%SS_GRAYRECT','%SS_LEFT','%SS_NOPREFIX','%SS_NOTIFY','%SS_NOWORDWRAP','%SS_PATHELLIPSIS','%SS_RIGHT',
+ '%SS_RIGHTJUST','%SS_SIMPLE','%SS_SUNKEN','%SS_WHITEFRAME','%SS_WHITERECT','%SS_WORDELLIPSIS','%STAT_FILL_FROM_MEMORY','%STAT_FILL_NATURAL',
+ '%STAT_FILL_NATURAL_ERASTONE','%STAT_FILL_NATURAL_EVEN','%STAT_FILL_NATURAL_FIBONACCI','%STAT_FILL_NATURAL_ODD','%STAT_FILL_WITH_NUMBER','%STAT_MINMAX_INDEX','%STAT_MINMAX_VALUE','%STAT_TYPE_BYTE',
+ '%STAT_TYPE_CURRENCY','%STAT_TYPE_DOUBLE','%STAT_TYPE_DWORD','%STAT_TYPE_EXT','%STAT_TYPE_INTEGER','%STAT_TYPE_LONG','%STAT_TYPE_QUAD','%STAT_TYPE_SINGLE',
+ '%STAT_TYPE_WORD','%SWP_ASYNCWINDOWPOS','%SWP_DEFERERASE','%SWP_DRAWFRAME','%SWP_FRAMECHANGED','%SWP_HIDEWINDOW','%SWP_NOACTIVATE','%SWP_NOCOPYBITS',
+ '%SWP_NOMOVE','%SWP_NOOWNERZORDER','%SWP_NOREDRAW','%SWP_NOREPOSITION','%SWP_NOSENDCHANGING','%SWP_NOSIZE','%SWP_NOZORDER','%SWP_SHOWWINDOW',
+ '%SW_FORCEMINIMIZE','%SW_HIDE','%SW_MAXIMIZE','%SW_MINIMIZE','%SW_NORMAL','%SW_RESTORE','%SW_SHOW','%SW_SHOWDEFAULT',
+ '%SW_SHOWMAXIMIZED','%SW_SHOWMINIMIZED','%SW_SHOWMINNOACTIVE','%SW_SHOWNA','%SW_SHOWNOACTIVATE','%SW_SHOWNORMAL','%TBASS_3DALG_DEFAULT','%TBASS_3DALG_FULL',
+ '%TBASS_3DALG_LIGHT','%TBASS_3DALG_OFF','%TBASS_3DMODE_NORMAL','%TBASS_3DMODE_OFF','%TBASS_3DMODE_RELATIVE','%TBASS_ACTIVE_PAUSED','%TBASS_ACTIVE_PLAYING','%TBASS_ACTIVE_STALLED',
+ '%TBASS_ACTIVE_STOPPED','%TBASS_CONFIG_3DALGORITHM','%TBASS_CONFIG_BUFFER','%TBASS_CONFIG_CURVE_PAN','%TBASS_CONFIG_CURVE_VOL','%TBASS_CONFIG_FLOATDSP','%TBASS_CONFIG_GVOL_MUSIC','%TBASS_CONFIG_GVOL_SAMPLE',
+ '%TBASS_CONFIG_GVOL_STREAM','%TBASS_CONFIG_MAXVOL','%TBASS_CONFIG_MP3_CODEC','%TBASS_CONFIG_NET_AGENT','%TBASS_CONFIG_NET_BUFFER','%TBASS_CONFIG_NET_PASSIVE','%TBASS_CONFIG_NET_PREBUF','%TBASS_CONFIG_NET_PROXY',
+ '%TBASS_CONFIG_NET_TIMEOUT','%TBASS_CONFIG_PAUSE_NOPLAY','%TBASS_CONFIG_UPDATEPERIOD','%TBASS_CTYPE_MUSIC_IT','%TBASS_CTYPE_MUSIC_MO3','%TBASS_CTYPE_MUSIC_MOD','%TBASS_CTYPE_MUSIC_MTM','%TBASS_CTYPE_MUSIC_S3M',
+ '%TBASS_CTYPE_MUSIC_XM','%TBASS_CTYPE_RECORD','%TBASS_CTYPE_SAMPLE','%TBASS_CTYPE_STREAM','%TBASS_CTYPE_STREAM_AIFF','%TBASS_CTYPE_STREAM_MP1','%TBASS_CTYPE_STREAM_MP2','%TBASS_CTYPE_STREAM_MP3',
+ '%TBASS_CTYPE_STREAM_OGG','%TBASS_CTYPE_STREAM_WAV','%TBASS_CTYPE_STREAM_WAV_FLOAT','%TBASS_CTYPE_STREAM_WAV_PCM','%TBASS_DATA_AVAILABLE','%TBASS_DATA_FFT1024','%TBASS_DATA_FFT2048','%TBASS_DATA_FFT4096',
+ '%TBASS_DATA_FFT512','%TBASS_DATA_FFT_INDIVIDUAL','%TBASS_DATA_FFT_NOWINDOW','%TBASS_DATA_FLOAT','%TBASS_DEVICE_3D','%TBASS_DEVICE_8BITS','%TBASS_DEVICE_LATENCY','%TBASS_DEVICE_MONO',
+ '%TBASS_DEVICE_NOSPEAKER','%TBASS_DEVICE_SPEAKERS','%TBASS_EAX_ENVIRONMENT_ALLEY','%TBASS_EAX_ENVIRONMENT_ARENA','%TBASS_EAX_ENVIRONMENT_AUDITORIUM','%TBASS_EAX_ENVIRONMENT_BATHROOM','%TBASS_EAX_ENVIRONMENT_CARPETEDHALLWAY','%TBASS_EAX_ENVIRONMENT_CAVE',
+ '%TBASS_EAX_ENVIRONMENT_CITY','%TBASS_EAX_ENVIRONMENT_CONCERTHALL','%TBASS_EAX_ENVIRONMENT_COUNT','%TBASS_EAX_ENVIRONMENT_DIZZY','%TBASS_EAX_ENVIRONMENT_DRUGGED','%TBASS_EAX_ENVIRONMENT_FOREST','%TBASS_EAX_ENVIRONMENT_GENERIC','%TBASS_EAX_ENVIRONMENT_HALLWAY',
+ '%TBASS_EAX_ENVIRONMENT_HANGAR','%TBASS_EAX_ENVIRONMENT_LIVINGROOM','%TBASS_EAX_ENVIRONMENT_MOUNTAINS','%TBASS_EAX_ENVIRONMENT_PADDEDCELL','%TBASS_EAX_ENVIRONMENT_PARKINGLOT','%TBASS_EAX_ENVIRONMENT_PLAIN','%TBASS_EAX_ENVIRONMENT_PSYCHOTIC','%TBASS_EAX_ENVIRONMENT_QUARRY',
+ '%TBASS_EAX_ENVIRONMENT_ROOM','%TBASS_EAX_ENVIRONMENT_SEWERPIPE','%TBASS_EAX_ENVIRONMENT_STONECORRIDOR','%TBASS_EAX_ENVIRONMENT_STONEROOM','%TBASS_EAX_ENVIRONMENT_UNDERWATER','%TBASS_ERROR_ALREADY','%TBASS_ERROR_BUFLOST','%TBASS_ERROR_CODEC',
+ '%TBASS_ERROR_CREATE','%TBASS_ERROR_DECODE','%TBASS_ERROR_DEVICE','%TBASS_ERROR_DRIVER','%TBASS_ERROR_DX','%TBASS_ERROR_EMPTY','%TBASS_ERROR_FILEFORM','%TBASS_ERROR_FILEOPEN',
+ '%TBASS_ERROR_FORMAT','%TBASS_ERROR_FREQ','%TBASS_ERROR_HANDLE','%TBASS_ERROR_ILLPARAM','%TBASS_ERROR_ILLTYPE','%TBASS_ERROR_INIT','%TBASS_ERROR_MEM','%TBASS_ERROR_NO3D',
+ '%TBASS_ERROR_NOCHAN','%TBASS_ERROR_NOEAX','%TBASS_ERROR_NOFX','%TBASS_ERROR_NOHW','%TBASS_ERROR_NONET','%TBASS_ERROR_NOPAUSE','%TBASS_ERROR_NOPLAY','%TBASS_ERROR_NOTAVAIL',
+ '%TBASS_ERROR_NOTFILE','%TBASS_ERROR_PLAYING','%TBASS_ERROR_POSITION','%TBASS_ERROR_SPEAKER','%TBASS_ERROR_START','%TBASS_ERROR_TIMEOUT','%TBASS_ERROR_UNKNOWN','%TBASS_ERROR_VERSION',
+ '%TBASS_FALSE','%TBASS_FILEPOS_CURRENT','%TBASS_FILEPOS_DECODE','%TBASS_FILEPOS_DOWNLOAD','%TBASS_FILEPOS_END','%TBASS_FILEPOS_START','%TBASS_FILE_CLOSE','%TBASS_FILE_LEN',
+ '%TBASS_FILE_READ','%TBASS_FILE_SEEK','%TBASS_FX_CHORUS','%TBASS_FX_COMPRESSOR','%TBASS_FX_DISTORTION','%TBASS_FX_ECHO','%TBASS_FX_FLANGER','%TBASS_FX_GARGLE',
+ '%TBASS_FX_I3DL2REVERB','%TBASS_FX_PARAMEQ','%TBASS_FX_PHASE_180','%TBASS_FX_PHASE_90','%TBASS_FX_PHASE_NEG_180','%TBASS_FX_PHASE_NEG_90','%TBASS_FX_PHASE_ZERO','%TBASS_FX_REVERB',
+ '%TBASS_INPUT_LEVEL','%TBASS_INPUT_OFF','%TBASS_INPUT_ON','%TBASS_INPUT_TYPE_ANALOG','%TBASS_INPUT_TYPE_AUX','%TBASS_INPUT_TYPE_CD','%TBASS_INPUT_TYPE_DIGITAL','%TBASS_INPUT_TYPE_LINE',
+ '%TBASS_INPUT_TYPE_MASK','%TBASS_INPUT_TYPE_MIC','%TBASS_INPUT_TYPE_PHONE','%TBASS_INPUT_TYPE_SPEAKER','%TBASS_INPUT_TYPE_SYNTH','%TBASS_INPUT_TYPE_UNDEF','%TBASS_INPUT_TYPE_WAVE','%TBASS_MP3_SETPOS',
+ '%TBASS_MUSIC_3D','%TBASS_MUSIC_ATTRIB_AMPLIFY','%TBASS_MUSIC_ATTRIB_BPM','%TBASS_MUSIC_ATTRIB_PANSEP','%TBASS_MUSIC_ATTRIB_PSCALER','%TBASS_MUSIC_ATTRIB_SPEED','%TBASS_MUSIC_ATTRIB_VOL_CHAN','%TBASS_MUSIC_ATTRIB_VOL_GLOBAL',
+ '%TBASS_MUSIC_ATTRIB_VOL_INST','%TBASS_MUSIC_AUTOFREE','%TBASS_MUSIC_CALCLEN','%TBASS_MUSIC_DECODE','%TBASS_MUSIC_FLOAT','%TBASS_MUSIC_FT2MOD','%TBASS_MUSIC_FX','%TBASS_MUSIC_LOOP',
+ '%TBASS_MUSIC_MONO','%TBASS_MUSIC_NONINTER','%TBASS_MUSIC_NOSAMPLE','%TBASS_MUSIC_POSRESET','%TBASS_MUSIC_POSRESETEX','%TBASS_MUSIC_PRESCAN','%TBASS_MUSIC_PT1MOD','%TBASS_MUSIC_RAMP',
+ '%TBASS_MUSIC_RAMPS','%TBASS_MUSIC_STOPBACK','%TBASS_MUSIC_SURROUND','%TBASS_MUSIC_SURROUND2','%TBASS_OBJECT_DS','%TBASS_OBJECT_DS3DL','%TBASS_OK','%TBASS_RECORD_PAUSE',
+ '%TBASS_SAMPLE_3D','%TBASS_SAMPLE_8BITS','%TBASS_SAMPLE_FLOAT','%TBASS_SAMPLE_FX','%TBASS_SAMPLE_LOOP','%TBASS_SAMPLE_MONO','%TBASS_SAMPLE_MUTEMAX','%TBASS_SAMPLE_OVER_DIST',
+ '%TBASS_SAMPLE_OVER_POS','%TBASS_SAMPLE_OVER_VOL','%TBASS_SAMPLE_SOFTWARE','%TBASS_SAMPLE_VAM','%TBASS_SLIDE_FREQ','%TBASS_SLIDE_PAN','%TBASS_SLIDE_VOL','%TBASS_SPEAKER_CENLFE',
+ '%TBASS_SPEAKER_CENTER','%TBASS_SPEAKER_FRONT','%TBASS_SPEAKER_FRONTLEFT','%TBASS_SPEAKER_FRONTRIGHT','%TBASS_SPEAKER_LEFT','%TBASS_SPEAKER_LFE','%TBASS_SPEAKER_REAR','%TBASS_SPEAKER_REAR2',
+ '%TBASS_SPEAKER_REAR2LEFT','%TBASS_SPEAKER_REAR2RIGHT','%TBASS_SPEAKER_REARLEFT','%TBASS_SPEAKER_REARRIGHT','%TBASS_SPEAKER_RIGHT','%TBASS_STREAMPROC_END','%TBASS_STREAM_AUTOFREE','%TBASS_STREAM_BLOCK',
+ '%TBASS_STREAM_DECODE','%TBASS_STREAM_PRESCAN','%TBASS_STREAM_RESTRATE','%TBASS_STREAM_STATUS','%TBASS_SYNC_DOWNLOAD','%TBASS_SYNC_END','%TBASS_SYNC_FREE','%TBASS_SYNC_MESSAGE',
+ '%TBASS_SYNC_META','%TBASS_SYNC_MIXTIME','%TBASS_SYNC_MUSICFX','%TBASS_SYNC_MUSICINST','%TBASS_SYNC_MUSICPOS','%TBASS_SYNC_ONETIME','%TBASS_SYNC_POS','%TBASS_SYNC_SLIDE',
+ '%TBASS_SYNC_STALL','%TBASS_TAG_HTTP','%TBASS_TAG_ICY','%TBASS_TAG_ID3','%TBASS_TAG_ID3V2','%TBASS_TAG_META','%TBASS_TAG_MUSIC_INST','%TBASS_TAG_MUSIC_MESSAGE',
+ '%TBASS_TAG_MUSIC_NAME','%TBASS_TAG_MUSIC_SAMPLE','%TBASS_TAG_OGG','%TBASS_TAG_RIFF_INFO','%TBASS_TAG_VENDOR','%TBASS_TRUE','%TBASS_UNICODE','%TBASS_VAM_HARDWARE',
+ '%TBASS_VAM_SOFTWARE','%TBASS_VAM_TERM_DIST','%TBASS_VAM_TERM_PRIO','%TBASS_VAM_TERM_TIME','%TBASS_VERSION','%TBCD_CHANNEL','%TBCD_THUMB','%TBCD_TICS',
+ '%TBGL_ALIGN_CENTER','%TBGL_ALIGN_CENTER_CENTER','%TBGL_ALIGN_CENTER_DOWN','%TBGL_ALIGN_CENTER_UP','%TBGL_ALIGN_LEFT','%TBGL_ALIGN_LEFT_CENTER','%TBGL_ALIGN_LEFT_DOWN','%TBGL_ALIGN_LEFT_UP',
+ '%TBGL_ALIGN_RIGHT','%TBGL_ALIGN_RIGHT_CENTER','%TBGL_ALIGN_RIGHT_DOWN','%TBGL_ALIGN_RIGHT_UP','%TBGL_ALWAYS','%TBGL_EQUAL','%TBGL_ERROR_FILE','%TBGL_ERROR_MSGBOX',
+ '%TBGL_ERROR_NONE','%TBGL_GEQUAL','%TBGL_GREATER','%TBGL_LEQUAL','%TBGL_LESS','%TBGL_LIGHT_AMBIENT','%TBGL_LIGHT_CONSTANT_ATTENUATION','%TBGL_LIGHT_DIFFUSE',
+ '%TBGL_LIGHT_LINEAR_ATTENUATION','%TBGL_LIGHT_POSITION','%TBGL_LIGHT_QUADRATIC_ATTENUATION','%TBGL_LIGHT_SPECULAR','%TBGL_LIGHT_SPOT_CUTOFF','%TBGL_LIGHT_SPOT_DIRECTION','%TBGL_LIGHT_SPOT_EXPONENT','%TBGL_M15B',
+ '%TBGL_M15G','%TBGL_M15LAYER','%TBGL_M15PSTOP','%TBGL_M15R','%TBGL_M15TEXN','%TBGL_M15TEXX','%TBGL_M15TEXY','%TBGL_M15X',
+ '%TBGL_M15Y','%TBGL_M15Z','%TBGL_NEVER','%TBGL_NORMAL_NONE','%TBGL_NORMAL_PRECISE','%TBGL_NORMAL_SMOOTH','%TBGL_NOTEQUAL','%TBGL_OBJ_CUBE',
+ '%TBGL_OBJ_CUBE3','%TBGL_OBJ_CYLINDER','%TBGL_OBJ_SPHERE','%TBGL_PINFO_RGB','%TBGL_PINFO_XYZ','%TBGL_TEX_LINEAR','%TBGL_TEX_MIPMAP','%TBGL_TEX_NEAREST',
+ '%TBM_CLEARSEL','%TBM_CLEARTICS','%TBM_GETBUDDY','%TBM_GETCHANNELRECT','%TBM_GETLINESIZE','%TBM_GETNUMTICS','%TBM_GETPAGESIZE','%TBM_GETPOS',
+ '%TBM_GETPTICS','%TBM_GETRANGEMAX','%TBM_GETRANGEMIN','%TBM_GETSELEND','%TBM_GETSELSTART','%TBM_GETTHUMBLENGTH','%TBM_GETTHUMBRECT','%TBM_GETTIC',
+ '%TBM_GETTICPOS','%TBM_GETTOOLTIPS','%TBM_GETUNICODEFORMAT','%TBM_SETBUDDY','%TBM_SETLINESIZE','%TBM_SETPAGESIZE','%TBM_SETPOS','%TBM_SETRANGE',
+ '%TBM_SETRANGEMAX','%TBM_SETRANGEMIN','%TBM_SETSEL','%TBM_SETSELEND','%TBM_SETSELSTART','%TBM_SETTHUMBLENGTH','%TBM_SETTIC','%TBM_SETTICFREQ',
+ '%TBM_SETTIPSIDE','%TBM_SETTOOLTIPS','%TBM_SETUNICODEFORMAT','%TBS_AUTOTICKS','%TBS_BOTH','%TBS_BOTTOM','%TBS_DOWNISLEFT','%TBS_ENABLESELRANGE',
+ '%TBS_FIXEDLENGTH','%TBS_HORZ','%TBS_LEFT','%TBS_NOTHUMB','%TBS_NOTICKS','%TBS_REVERSED','%TBS_RIGHT','%TBS_TOOLTIPS',
+ '%TBS_TOP','%TBS_VERT','%TBTS_BOTTOM','%TBTS_LEFT','%TBTS_RIGHT','%TBTS_TOP','%TB_%VT_BSTR','%TB_%VT_CY',
+ '%TB_%VT_DATE','%TB_%VT_EMPTY','%TB_%VT_I2','%TB_%VT_I4','%TB_%VT_NULL','%TB_%VT_R4','%TB_%VT_R8','%TB_BOTTOM',
+ '%TB_CLASS_E_NOAGGREGATION','%TB_CO_E_CLASSSTRING','%TB_DISPATCH_METHOD','%TB_DISPATCH_PROPERTYGET','%TB_DISPATCH_PROPERTYPUT','%TB_DISPATCH_PROPERTYPUTREF','%TB_ENDTRACK','%TB_E_INVALIDARG',
+ '%TB_E_NOINTERFACE','%TB_E_OUTOFMEMORY','%TB_IMGCTX_ACTUALSIZE','%TB_IMGCTX_AUTOSIZE','%TB_IMGCTX_FITTOHEIGHT','%TB_IMGCTX_FITTOWIDTH','%TB_IMGCTX_STRETCH','%TB_LINEDOWN',
+ '%TB_LINEUP','%TB_MK_E_CONNECTMANUALLY','%TB_MK_E_EXCEEDEDDEADLINE','%TB_MK_E_INTERMEDIATEINTERFACENOTSUPPORTED','%TB_MK_E_NOOBJECT','%TB_MK_E_SYNTAX','%TB_PAGEDOWN','%TB_PAGEUP',
+ '%TB_REGDB_E_CLASSNOTREG','%TB_REGDB_E_WRITEREGDB','%TB_SIZEOF_TBVARIANT','%TB_S_FALSE','%TB_S_OK','%TB_THUMBPOSITION','%TB_THUMBTRACK','%TB_TOP',
+ '%TCM_FIRST','%TCM_GETCURSEL','%TCN_FOCUSCHANGE','%TCN_GETOBJECT','%TCN_SELCHANGE','%TCN_SELCHANGING','%TCS_BOTTOM','%TCS_BUTTONS',
+ '%TCS_EX_FLATSEPARATORS','%TCS_EX_REGISTERDROP','%TCS_FIXEDWIDTH','%TCS_FLATBUTTONS','%TCS_FOCUSNEVER','%TCS_FOCUSONBUTTONDOWN','%TCS_FORCEICONLEFT','%TCS_FORCELABELLEFT',
+ '%TCS_HOTTRACK','%TCS_MULTILINE','%TCS_MULTISELECT','%TCS_OWNERDRAWFIXED','%TCS_RAGGEDRIGHT','%TCS_RIGHT','%TCS_RIGHTJUSTIFY','%TCS_SCROLLOPPOSITE',
+ '%TCS_SINGLELINE','%TCS_TABS','%TCS_TOOLTIPS','%TCS_VERTICAL','%TM_PLAINTEXT','%TM_RICHTEXT','%TOKENIZER_DEFAULT_ALPHA','%TOKENIZER_DEFAULT_DELIM',
+ '%TOKENIZER_DEFAULT_DQUOTE','%TOKENIZER_DEFAULT_NEWLINE','%TOKENIZER_DEFAULT_NUMERIC','%TOKENIZER_DEFAULT_SPACE','%TOKENIZER_DELIMITER','%TOKENIZER_EOL','%TOKENIZER_ERROR','%TOKENIZER_FINISHED',
+ '%TOKENIZER_NUMBER','%TOKENIZER_QUOTE','%TOKENIZER_STRING','%TOKENIZER_UNDEFTOK','%TRUE','%TV_FIRST','%UDM_GETACCEL','%UDM_GETBASE',
+ '%UDM_GETBUDDY','%UDM_GETPOS','%UDM_GETPOS32','%UDM_GETRANGE','%UDM_GETRANGE32','%UDM_GETUNICODEFORMAT','%UDM_SETACCEL','%UDM_SETBASE',
+ '%UDM_SETBUDDY','%UDM_SETPOS','%UDM_SETPOS32','%UDM_SETRANGE','%UDM_SETRANGE32','%UDM_SETUNICODEFORMAT','%UDS_ALIGNLEFT','%UDS_ALIGNRIGHT',
+ '%UDS_ARROWKEYS','%UDS_AUTOBUDDY','%UDS_HORZ','%UDS_HOTTRACK','%UDS_NOTHOUSANDS','%UDS_SETBUDDYINT','%UDS_WRAP','%UD_MAXVAL',
+ '%UD_MINVAL','%VK_0','%VK_1','%VK_2','%VK_3','%VK_4','%VK_5','%VK_6',
+ '%VK_7','%VK_8','%VK_9','%VK_A','%VK_ACCEPT','%VK_ADD','%VK_APPS','%VK_B',
+ '%VK_BACK','%VK_C','%VK_CANCEL','%VK_CAPITAL','%VK_CLEAR','%VK_CONTROL','%VK_CONVERT','%VK_D',
+ '%VK_DECIMAL','%VK_DELETE','%VK_DIVIDE','%VK_DOWN','%VK_E','%VK_END','%VK_ESCAPE','%VK_EXECUTE',
+ '%VK_F','%VK_F1','%VK_F10','%VK_F11','%VK_F12','%VK_F13','%VK_F14','%VK_F15',
+ '%VK_F16','%VK_F17','%VK_F18','%VK_F19','%VK_F2','%VK_F20','%VK_F21','%VK_F22',
+ '%VK_F23','%VK_F24','%VK_F3','%VK_F4','%VK_F5','%VK_F6','%VK_F7','%VK_F8',
+ '%VK_F9','%VK_FINAL','%VK_G','%VK_H','%VK_HANGEUL','%VK_HANGUL','%VK_HANJA','%VK_HELP',
+ '%VK_HOME','%VK_I','%VK_INSERT','%VK_J','%VK_JUNJA','%VK_K','%VK_KANA','%VK_KANJI',
+ '%VK_L','%VK_LBUTTON','%VK_LEFT','%VK_LINEFEED','%VK_LWIN','%VK_M','%VK_MBUTTON','%VK_MENU',
+ '%VK_MODECHANGE','%VK_MULTIPLY','%VK_N','%VK_NEXT','%VK_NONCONVERT','%VK_NUMLOCK','%VK_NUMPAD0','%VK_NUMPAD1',
+ '%VK_NUMPAD2','%VK_NUMPAD3','%VK_NUMPAD4','%VK_NUMPAD5','%VK_NUMPAD6','%VK_NUMPAD7','%VK_NUMPAD8','%VK_NUMPAD9',
+ '%VK_O','%VK_P','%VK_PAUSE','%VK_PGDN','%VK_PGUP','%VK_PRINT','%VK_PRIOR','%VK_Q',
+ '%VK_R','%VK_RBUTTON','%VK_RETURN','%VK_RIGHT','%VK_RWIN','%VK_S','%VK_SCROLL','%VK_SELECT',
+ '%VK_SEPARATOR','%VK_SHIFT','%VK_SLEEP','%VK_SNAPSHOT','%VK_SPACE','%VK_SUBTRACT','%VK_T','%VK_TAB',
+ '%VK_U','%VK_UP','%VK_V','%VK_W','%VK_X','%VK_XBUTTON1','%VK_XBUTTON2','%VK_Y',
+ '%VK_Z','%VT_ARRAY','%VT_BLOB','%VT_BLOB_OBJECT','%VT_BOOL','%VT_BSTR','%VT_BYREF','%VT_CARRAY',
+ '%VT_CF','%VT_CLSID','%VT_CY','%VT_DATE','%VT_DISPATCH','%VT_EMPTY','%VT_ERROR','%VT_FILETIME',
+ '%VT_HRESULT','%VT_I1','%VT_I2','%VT_I4','%VT_I8','%VT_INT','%VT_LPSTR','%VT_LPWSTR',
+ '%VT_NULL','%VT_PTR','%VT_R4','%VT_R8','%VT_RECORD','%VT_RESERVED','%VT_SAFEARRAY','%VT_STORAGE',
+ '%VT_STORED_OBJECT','%VT_STREAM','%VT_STREAMED_OBJECT','%VT_UI1','%VT_UI2','%VT_UI4','%VT_UI8','%VT_UINT',
+ '%VT_UNKNOWN','%VT_USERDEFINED','%VT_VARIANT','%VT_VECTOR','%VT_VOID','%WAVE_FORMAT_1M08','%WAVE_FORMAT_1M16','%WAVE_FORMAT_1S08',
+ '%WAVE_FORMAT_1S16','%WAVE_FORMAT_2M08','%WAVE_FORMAT_2M16','%WAVE_FORMAT_2S08','%WAVE_FORMAT_2S16','%WAVE_FORMAT_4M08','%WAVE_FORMAT_4M16','%WAVE_FORMAT_4S08',
+ '%WAVE_FORMAT_4S16','%WBF_CUSTOM','%WBF_LEVEL1','%WBF_LEVEL2','%WBF_OVERFLOW','%WBF_WORDBREAK','%WBF_WORDWRAP','%WHITE',
+ '%WIN_FINDTITLECONTAIN','%WIN_FINDTITLEEND','%WIN_FINDTITLEEQUAL','%WIN_FINDTITLESTART','%WM_ACTIVATE','%WM_ACTIVATEAPP','%WM_CAPTURECHANGED','%WM_CHAR',
+ '%WM_CLOSE','%WM_COMMAND','%WM_DESTROY','%WM_DROPFILES','%WM_ERASEBKGND','%WM_GETTEXTLENGTH','%WM_HOTKEY','%WM_HSCROLL',
+ '%WM_IDLE','%WM_INITDIALOG','%WM_KEYDOWN','%WM_KEYUP','%WM_KILLFOCUS','%WM_LBUTTONDBLCLK','%WM_LBUTTONDOWN','%WM_LBUTTONUP',
+ '%WM_MBUTTONDBLCLK','%WM_MBUTTONDOWN','%WM_MBUTTONUP','%WM_MOUSEFIRST','%WM_MOUSEMOVE','%WM_MOUSEWHEEL','%WM_MOVE','%WM_MOVING',
+ '%WM_NCLBUTTONDOWN','%WM_NCRBUTTONDOWN','%WM_NEXTDLGCTL','%WM_NOTIFY','%WM_PAINT','%WM_QUIT','%WM_RBUTTONDBLCLK','%WM_RBUTTONDOWN',
+ '%WM_RBUTTONUP','%WM_SETFOCUS','%WM_SETFONT','%WM_SETTEXT','%WM_SIZE','%WM_SIZING','%WM_SYSCOMMAND','%WM_TIMER',
+ '%WM_USER','%WM_VSCROLL','%WS_BORDER','%WS_CAPTION','%WS_CHILD','%WS_CLIPCHILDREN','%WS_CLIPSIBLINGS','%WS_DISABLED',
+ '%WS_DLGFRAME','%WS_EX_ACCEPTFILES','%WS_EX_APPWINDOW','%WS_EX_CLIENTEDGE','%WS_EX_CONTEXTHELP','%WS_EX_CONTROLPARENT','%WS_EX_LAYERED','%WS_EX_LEFT',
+ '%WS_EX_LEFTSCROLLBAR','%WS_EX_LTRREADING','%WS_EX_MDICHILD','%WS_EX_NOPARENTNOTIFY','%WS_EX_OVERLAPPEDWINDOW','%WS_EX_PALETTEWINDOW','%WS_EX_RIGHT','%WS_EX_RIGHTSCROLLBAR',
+ '%WS_EX_RTLREADING','%WS_EX_STATICEDGE','%WS_EX_TOOLWINDOW','%WS_EX_TOPMOST','%WS_EX_TRANSPARENT','%WS_EX_WINDOWEDGE','%WS_GROUP','%WS_HSCROLL',
+ '%WS_ICONIC','%WS_MAXIMIZE','%WS_MAXIMIZEBOX','%WS_MINIMIZE','%WS_MINIMIZEBOX','%WS_OVERLAPPEDWINDOW','%WS_POPUP','%WS_POPUPWINDOW',
+ '%WS_SYSMENU','%WS_TABSTOP','%WS_THICKFRAME','%WS_VISIBLE','%WS_VSCROLL','%YELLOW','%ZERO','CRLF',
+ 'FALSE','M_E','M_PI','NULL','TAB','TRUE'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF; font-weight: bold;',
+ 2 => 'color: #993333; font-style: italic; font-weight: bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #333333;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #800080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #CC0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #66cc66;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #333333;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '_'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php
new file mode 100644
index 000000000..fca874954
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php
@@ -0,0 +1,375 @@
+<?php
+/*************************************************************************************
+ * tsql.php
+ * --------
+ * Author: Duncan Lock (dunc@dflock.co.uk)
+ * Copyright: (c) 2006 Duncan Lock (http://dflock.co.uk/), Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/11/22
+ *
+ * T-SQL language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/01/23 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2006/01/23)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'T-SQL',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ // Datatypes
+ 'bigint', 'int', 'smallint', 'tinyint', 'bit', 'decimal', 'numeric', 'money',
+ 'smallmoney', 'float', 'real', 'datetime', 'smalldatetime', 'char', 'varchar',
+ 'text', 'nchar', 'nvarchar', 'ntext', 'binary', 'varbinary', 'image', 'cursor',
+ 'sql_variant', 'table', 'timestamp', 'uniqueidentifier',
+
+ // Keywords
+ 'ABSOLUTE', 'ACTION', 'ADD', 'ADMIN', 'AFTER', 'AGGREGATE', 'ALIAS', 'ALLOCATE', 'ALTER', 'ARE', 'ARRAY', 'AS',
+ 'ASC', 'ASSERTION', 'AT', 'AUTHORIZATION', 'BACKUP', 'BEFORE', 'BEGIN', 'BINARY', 'BIT', 'BLOB', 'BOOLEAN', 'BOTH', 'BREADTH',
+ 'BREAK', 'BROWSE', 'BULK', 'BY', 'CALL', 'CASCADE', 'CASCADED', 'CASE', 'CAST', 'CATALOG', 'CHAR', 'CHARACTER', 'CHECK', 'CHECKPOINT',
+ 'CLASS', 'CLOB', 'CLOSE', 'CLUSTERED', 'COALESCE', 'COLLATE', 'COLLATION', 'COLUMN', 'COMMIT', 'COMPLETION', 'COMPUTE', 'CONNECT',
+ 'CONNECTION', 'CONSTRAINT', 'CONSTRAINTS', 'CONSTRUCTOR', 'CONTAINS', 'CONTAINSTABLE', 'CONTINUE', 'CONVERT', 'CORRESPONDING', 'CREATE',
+ 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER',
+ 'CURSOR', 'CYCLE', 'DATA', 'DATABASE', 'DATE', 'DAY', 'DBCC', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DEFERRABLE',
+ 'DEFERRED', 'DELETE', 'DENY', 'DEPTH', 'DEREF', 'DESC', 'DESCRIBE', 'DESCRIPTOR', 'DESTROY', 'DESTRUCTOR', 'DETERMINISTIC',
+ 'DIAGNOSTICS', 'DICTIONARY', 'DISCONNECT', 'DISK', 'DISTINCT', 'DISTRIBUTED', 'DOMAIN', 'DOUBLE', 'DROP', 'DUMMY', 'DUMP', 'DYNAMIC',
+ 'EACH', 'ELSE', 'END', 'END-EXEC', 'EQUALS', 'ERRLVL', 'ESCAPE', 'EVERY', 'EXCEPT', 'EXCEPTION', 'EXEC', 'EXECUTE', 'EXIT',
+ 'EXTERNAL', 'FALSE', 'FETCH', 'FILE', 'FILLFACTOR', 'FIRST', 'FLOAT', 'FOR', 'FOREIGN', 'FOUND', 'FREE', 'FREETEXT', 'FREETEXTTABLE',
+ 'FROM', 'FULL', 'FUNCTION', 'GENERAL', 'GET', 'GLOBAL', 'GOTO', 'GRANT', 'GROUP', 'GROUPING', 'HAVING', 'HOLDLOCK', 'HOST', 'HOUR',
+ 'IDENTITY', 'IDENTITY_INSERT', 'IDENTITYCOL', 'IF', 'IGNORE', 'IMMEDIATE', 'INDEX', 'INDICATOR', 'INITIALIZE', 'INITIALLY',
+ 'INNER', 'INOUT', 'INPUT', 'INSERT', 'INT', 'INTEGER', 'INTERSECT', 'INTERVAL', 'INTO', 'IS', 'ISOLATION', 'ITERATE', 'KEY',
+ 'KILL', 'LANGUAGE', 'LARGE', 'LAST', 'LATERAL', 'LEADING', 'LEFT', 'LESS', 'LEVEL', 'LIMIT', 'LINENO', 'LOAD', 'LOCAL',
+ 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATOR', 'MAP', 'MATCH', 'MINUTE', 'MODIFIES', 'MODIFY', 'MODULE', 'MONTH', 'NAMES', 'NATIONAL',
+ 'NATURAL', 'NCHAR', 'NCLOB', 'NEW', 'NEXT', 'NO', 'NOCHECK', 'NONCLUSTERED', 'NONE', 'NULLIF', 'NUMERIC', 'OBJECT', 'OF',
+ 'OFF', 'OFFSETS', 'OLD', 'ON', 'ONLY', 'OPEN', 'OPENDATASOURCE', 'OPENQUERY', 'OPENROWSET', 'OPENXML', 'OPERATION', 'OPTION',
+ 'ORDER', 'ORDINALITY', 'OUT', 'OUTPUT', 'OVER', 'PAD', 'PARAMETER', 'PARAMETERS', 'PARTIAL', 'PATH', 'PERCENT', 'PLAN',
+ 'POSTFIX', 'PRECISION', 'PREFIX', 'PREORDER', 'PREPARE', 'PRESERVE', 'PRIMARY', 'PRINT', 'PRIOR', 'PRIVILEGES', 'PROC', 'PROCEDURE',
+ 'PUBLIC', 'RAISERROR', 'READ', 'READS', 'READTEXT', 'REAL', 'RECONFIGURE', 'RECURSIVE', 'REF', 'REFERENCES', 'REFERENCING', 'RELATIVE',
+ 'REPLICATION', 'RESTORE', 'RESTRICT', 'RESULT', 'RETURN', 'RETURNS', 'REVOKE', 'RIGHT', 'ROLE', 'ROLLBACK', 'ROLLUP', 'ROUTINE', 'ROW',
+ 'ROWGUIDCOL', 'ROWS', 'RULE', 'SAVE', 'SAVEPOINT', 'SCHEMA', 'SCOPE', 'SCROLL', 'SEARCH', 'SECOND', 'SECTION', 'SELECT',
+ 'SEQUENCE', 'SESSION', 'SESSION_USER', 'SET', 'SETS', 'SETUSER', 'SHUTDOWN', 'SIZE', 'SMALLINT', 'SPACE', 'SPECIFIC',
+ 'SPECIFICTYPE', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'START', 'STATE', 'STATEMENT', 'STATIC', 'STATISTICS', 'STRUCTURE',
+ 'SYSTEM_USER', 'TABLE', 'TEMPORARY', 'TERMINATE', 'TEXTSIZE', 'THAN', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE',
+ 'TO', 'TOP', 'TRAILING', 'TRAN', 'TRANSACTION', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRUE', 'TRUNCATE', 'TSEQUAL', 'UNDER', 'UNION',
+ 'UNIQUE', 'UNKNOWN', 'UNNEST', 'UPDATE', 'UPDATETEXT', 'USAGE', 'USE', 'USER', 'USING', 'VALUE', 'VALUES', 'VARCHAR', 'VARIABLE',
+ 'VARYING', 'VIEW', 'WAITFOR', 'WHEN', 'WHENEVER', 'WHERE', 'WHILE', 'WITH', 'WITHOUT', 'WORK', 'WRITE', 'WRITETEXT', 'YEAR', 'ZONE',
+ 'UNCOMMITTED', 'NOCOUNT',
+ ),
+ 2 => array(
+ /*
+ Built-in functions
+ Highlighted in pink.
+ */
+
+ //Configuration Functions
+ '@@DATEFIRST','@@OPTIONS','@@DBTS','@@REMSERVER','@@LANGID','@@SERVERNAME',
+ '@@LANGUAGE','@@SERVICENAME','@@LOCK_TIMEOUT','@@SPID','@@MAX_CONNECTIONS',
+ '@@TEXTSIZE','@@MAX_PRECISION','@@VERSION','@@NESTLEVEL',
+
+ //Cursor Functions
+ '@@CURSOR_ROWS','@@FETCH_STATUS',
+
+ //Date and Time Functions
+ 'DATEADD','DATEDIFF','DATENAME','DATEPART','GETDATE','GETUTCDATE',
+
+ //Mathematical Functions
+ 'ABS','DEGREES','RAND','ACOS','EXP','ROUND','ASIN','FLOOR','SIGN',
+ 'ATAN','LOG','SIN','ATN2','LOG10','SQUARE','CEILING','PI','SQRT','COS',
+ 'POWER','TAN','COT','RADIANS',
+
+ //Meta Data Functions
+ 'COL_LENGTH','COL_NAME','FULLTEXTCATALOGPROPERTY',
+ 'COLUMNPROPERTY','FULLTEXTSERVICEPROPERTY','DATABASEPROPERTY','INDEX_COL',
+ 'DATABASEPROPERTYEX','INDEXKEY_PROPERTY','DB_ID','INDEXPROPERTY','DB_NAME',
+ 'OBJECT_ID','FILE_ID','OBJECT_NAME','FILE_NAME','OBJECTPROPERTY','FILEGROUP_ID',
+ '@@PROCID','FILEGROUP_NAME','SQL_VARIANT_PROPERTY','FILEGROUPPROPERTY',
+ 'TYPEPROPERTY','FILEPROPERTY',
+
+ //Security Functions
+ 'IS_SRVROLEMEMBER','SUSER_SID','SUSER_SNAME','USER_ID',
+ 'HAS_DBACCESS','IS_MEMBER',
+
+ //String Functions
+ 'ASCII','SOUNDEX','PATINDEX','CHARINDEX','REPLACE','STR',
+ 'DIFFERENCE','QUOTENAME','STUFF','REPLICATE','SUBSTRING','LEN',
+ 'REVERSE','UNICODE','LOWER','UPPER','LTRIM','RTRIM',
+
+ //System Functions
+ 'APP_NAME','COLLATIONPROPERTY','@@ERROR','FORMATMESSAGE',
+ 'GETANSINULL','HOST_ID','HOST_NAME','IDENT_CURRENT','IDENT_INCR',
+ 'IDENT_SEED','@@IDENTITY','ISDATE','ISNUMERIC','PARSENAME','PERMISSIONS',
+ '@@ROWCOUNT','ROWCOUNT_BIG','SCOPE_IDENTITY','SERVERPROPERTY','SESSIONPROPERTY',
+ 'STATS_DATE','@@TRANCOUNT','USER_NAME',
+
+ //System Statistical Functions
+ '@@CONNECTIONS','@@PACK_RECEIVED','@@CPU_BUSY','@@PACK_SENT',
+ '@@TIMETICKS','@@IDLE','@@TOTAL_ERRORS','@@IO_BUSY',
+ '@@TOTAL_READ','@@PACKET_ERRORS','@@TOTAL_WRITE',
+
+ //Text and Image Functions
+ 'TEXTPTR','TEXTVALID',
+
+ //Aggregate functions
+ 'AVG', 'MAX', 'BINARY_CHECKSUM', 'MIN', 'CHECKSUM', 'SUM', 'CHECKSUM_AGG',
+ 'STDEV', 'COUNT', 'STDEVP', 'COUNT_BIG', 'VAR', 'VARP'
+ ),
+ 3 => array(
+ /*
+ System stored procedures
+ Higlighted dark brown
+ */
+
+ //Active Directory Procedures
+ 'sp_ActiveDirectory_Obj', 'sp_ActiveDirectory_SCP',
+
+ //Catalog Procedures
+ 'sp_column_privileges', 'sp_special_columns', 'sp_columns', 'sp_sproc_columns',
+ 'sp_databases', 'sp_statistics', 'sp_fkeys', 'sp_stored_procedures', 'sp_pkeys',
+ 'sp_table_privileges', 'sp_server_info', 'sp_tables',
+
+ //Cursor Procedures
+ 'sp_cursor_list', 'sp_describe_cursor_columns', 'sp_describe_cursor', 'sp_describe_cursor_tables',
+
+ //Database Maintenance Plan Procedures
+ 'sp_add_maintenance_plan', 'sp_delete_maintenance_plan_db', 'sp_add_maintenance_plan_db',
+ 'sp_delete_maintenance_plan_job', 'sp_add_maintenance_plan_job', 'sp_help_maintenance_plan',
+ 'sp_delete_maintenance_plan',
+
+ //Distributed Queries Procedures
+ 'sp_addlinkedserver', 'sp_indexes', 'sp_addlinkedsrvlogin', 'sp_linkedservers', 'sp_catalogs',
+ 'sp_primarykeys', 'sp_column_privileges_ex', 'sp_columns_ex',
+ 'sp_table_privileges_ex', 'sp_tables_ex', 'sp_foreignkeys',
+
+ //Full-Text Search Procedures
+ 'sp_fulltext_catalog', 'sp_help_fulltext_catalogs_cursor', 'sp_fulltext_column',
+ 'sp_help_fulltext_columns', 'sp_fulltext_database', 'sp_help_fulltext_columns_cursor',
+ 'sp_fulltext_service', 'sp_help_fulltext_tables', 'sp_fulltext_table',
+ 'sp_help_fulltext_tables_cursor', 'sp_help_fulltext_catalogs',
+
+ //Log Shipping Procedures
+ 'sp_add_log_shipping_database', 'sp_delete_log_shipping_database', 'sp_add_log_shipping_plan',
+ 'sp_delete_log_shipping_plan', 'sp_add_log_shipping_plan_database',
+ 'sp_delete_log_shipping_plan_database', 'sp_add_log_shipping_primary',
+ 'sp_delete_log_shipping_primary', 'sp_add_log_shipping_secondary',
+ 'sp_delete_log_shipping_secondary', 'sp_can_tlog_be_applied', 'sp_get_log_shipping_monitor_info',
+ 'sp_change_monitor_role', 'sp_remove_log_shipping_monitor', 'sp_change_primary_role',
+ 'sp_resolve_logins', 'sp_change_secondary_role', 'sp_update_log_shipping_monitor_info',
+ 'sp_create_log_shipping_monitor_account', 'sp_update_log_shipping_plan',
+ 'sp_define_log_shipping_monitor', 'sp_update_log_shipping_plan_database',
+
+ //OLE Automation Extended Stored Procedures
+ 'sp_OACreate', 'sp_OAMethod', 'sp_OADestroy', 'sp_OASetProperty', 'sp_OAGetErrorInfo',
+ 'sp_OAStop', 'sp_OAGetProperty',
+
+ //Replication Procedures
+ 'sp_add_agent_parameter', 'sp_enableagentoffload', 'sp_add_agent_profile',
+ 'sp_enumcustomresolvers', 'sp_addarticle', 'sp_enumdsn', 'sp_adddistpublisher',
+ 'sp_enumfullsubscribers', 'sp_adddistributiondb', 'sp_expired_subscription_cleanup',
+ 'sp_adddistributor', 'sp_generatefilters', 'sp_addmergealternatepublisher',
+ 'sp_getagentoffloadinfo', 'sp_addmergearticle', 'sp_getmergedeletetype', 'sp_addmergefilter',
+ 'sp_get_distributor', 'sp_addmergepublication', 'sp_getqueuedrows', 'sp_addmergepullsubscription',
+ 'sp_getsubscriptiondtspackagename', 'sp_addmergepullsubscription_agent', 'sp_grant_publication_access',
+ 'sp_addmergesubscription', 'sp_help_agent_default', 'sp_addpublication', 'sp_help_agent_parameter',
+ 'sp_addpublication_snapshot', 'sp_help_agent_profile', 'sp_addpublisher70', 'sp_helparticle',
+ 'sp_addpullsubscription', 'sp_helparticlecolumns', 'sp_addpullsubscription_agent', 'sp_helparticledts',
+ 'sp_addscriptexec', 'sp_helpdistpublisher', 'sp_addsubscriber', 'sp_helpdistributiondb',
+ 'sp_addsubscriber_schedule', 'sp_helpdistributor', 'sp_addsubscription', 'sp_helpmergealternatepublisher',
+ 'sp_addsynctriggers', 'sp_helpmergearticle', 'sp_addtabletocontents', 'sp_helpmergearticlecolumn',
+ 'sp_adjustpublisheridentityrange', 'sp_helpmergearticleconflicts', 'sp_article_validation',
+ 'sp_helpmergeconflictrows', 'sp_articlecolumn', 'sp_helpmergedeleteconflictrows', 'sp_articlefilter',
+ 'sp_helpmergefilter', 'sp_articlesynctranprocs', 'sp_helpmergepublication', 'sp_articleview',
+ 'sp_helpmergepullsubscription', 'sp_attachsubscription', 'sp_helpmergesubscription', 'sp_browsesnapshotfolder',
+ 'sp_helppublication', 'sp_browsemergesnapshotfolder', 'sp_help_publication_access', 'sp_browsereplcmds',
+ 'sp_helppullsubscription', 'sp_change_agent_parameter', 'sp_helpreplfailovermode', 'sp_change_agent_profile',
+ 'sp_helpreplicationdboption', 'sp_changearticle', 'sp_helpreplicationoption', 'sp_changedistpublisher',
+ 'sp_helpsubscriberinfo', 'sp_changedistributiondb', 'sp_helpsubscription', 'sp_changedistributor_password',
+ 'sp_ivindexhasnullcols', 'sp_changedistributor_property', 'sp_helpsubscription_properties', 'sp_changemergearticle',
+ 'sp_link_publication', 'sp_changemergefilter', 'sp_marksubscriptionvalidation', 'sp_changemergepublication',
+ 'sp_mergearticlecolumn', 'sp_changemergepullsubscription', 'sp_mergecleanupmetadata', 'sp_changemergesubscription',
+ 'sp_mergedummyupdate', 'sp_changepublication', 'sp_mergesubscription_cleanup', 'sp_changesubscriber',
+ 'sp_publication_validation', 'sp_changesubscriber_schedule', 'sp_refreshsubscriptions', 'sp_changesubscriptiondtsinfo',
+ 'sp_reinitmergepullsubscription', 'sp_changesubstatus', 'sp_reinitmergesubscription', 'sp_change_subscription_properties',
+ 'sp_reinitpullsubscription', 'sp_check_for_sync_trigger', 'sp_reinitsubscription', 'sp_copymergesnapshot',
+ 'sp_removedbreplication', 'sp_copysnapshot', 'sp_repladdcolumn', 'sp_copysubscription', 'sp_replcmds',
+ 'sp_deletemergeconflictrow', 'sp_replcounters', 'sp_disableagentoffload', 'sp_repldone', 'sp_drop_agent_parameter',
+ 'sp_repldropcolumn', 'sp_drop_agent_profile', 'sp_replflush', 'sp_droparticle', 'sp_replicationdboption',
+ 'sp_dropanonymouseagent', 'sp_replication_agent_checkup', 'sp_dropdistpublisher', 'sp_replqueuemonitor',
+ 'sp_dropdistributiondb', 'sp_replsetoriginator', 'sp_dropmergealternatepublisher', 'sp_replshowcmds',
+ 'sp_dropdistributor', 'sp_repltrans', 'sp_dropmergearticle', 'sp_restoredbreplication', 'sp_dropmergefilter',
+ 'sp_revoke_publication_access', 'sp_scriptsubconflicttable', 'sp_dropmergepublication', 'sp_script_synctran_commands',
+ 'sp_dropmergepullsubscription', 'sp_setreplfailovermode', 'sp_showrowreplicainfo', 'sp_dropmergesubscription',
+ 'sp_subscription_cleanup', 'sp_droppublication', 'sp_table_validation', 'sp_droppullsubscription',
+ 'sp_update_agent_profile', 'sp_dropsubscriber', 'sp_validatemergepublication', 'sp_dropsubscription',
+ 'sp_validatemergesubscription', 'sp_dsninfo', 'sp_vupgrade_replication', 'sp_dumpparamcmd',
+
+ //Security Procedures
+ 'sp_addalias', 'sp_droprolemember', 'sp_addapprole', 'sp_dropserver', 'sp_addgroup', 'sp_dropsrvrolemember',
+ 'sp_dropuser', 'sp_addlogin', 'sp_grantdbaccess', 'sp_addremotelogin',
+ 'sp_grantlogin', 'sp_addrole', 'sp_helpdbfixedrole', 'sp_addrolemember', 'sp_helpgroup',
+ 'sp_addserver', 'sp_helplinkedsrvlogin', 'sp_addsrvrolemember', 'sp_helplogins', 'sp_adduser',
+ 'sp_helpntgroup', 'sp_approlepassword', 'sp_helpremotelogin', 'sp_changedbowner', 'sp_helprole',
+ 'sp_changegroup', 'sp_helprolemember', 'sp_changeobjectowner', 'sp_helprotect', 'sp_change_users_login',
+ 'sp_helpsrvrole', 'sp_dbfixedrolepermission', 'sp_helpsrvrolemember', 'sp_defaultdb', 'sp_helpuser',
+ 'sp_defaultlanguage', 'sp_MShasdbaccess', 'sp_denylogin', 'sp_password', 'sp_dropalias', 'sp_remoteoption',
+ 'sp_dropapprole', 'sp_revokedbaccess', 'sp_dropgroup', 'sp_revokelogin', 'sp_droplinkedsrvlogin',
+ 'sp_setapprole', 'sp_droplogin', 'sp_srvrolepermission', 'sp_dropremotelogin', 'sp_validatelogins', 'sp_droprole',
+
+ //SQL Mail Procedures
+ 'sp_processmail', 'xp_sendmail', 'xp_deletemail', 'xp_startmail', 'xp_findnextmsg', 'xp_stopmail', 'xp_readmail',
+
+ //SQL Profiler Procedures
+ 'sp_trace_create', 'sp_trace_setfilter', 'sp_trace_generateevent', 'sp_trace_setstatus', 'sp_trace_setevent',
+
+ //SQL Server Agent Procedures
+ 'sp_add_alert', 'sp_help_jobhistory', 'sp_add_category', 'sp_help_jobschedule', 'sp_add_job',
+ 'sp_help_jobserver', 'sp_add_jobschedule', 'sp_help_jobstep', 'sp_add_jobserver', 'sp_help_notification',
+ 'sp_add_jobstep', 'sp_help_operator', 'sp_add_notification', 'sp_help_targetserver',
+ 'sp_add_operator', 'sp_help_targetservergroup', 'sp_add_targetservergroup', 'sp_helptask',
+ 'sp_add_targetsvrgrp_member', 'sp_manage_jobs_by_login', 'sp_addtask', 'sp_msx_defect',
+ 'sp_apply_job_to_targets', 'sp_msx_enlist', 'sp_delete_alert', 'sp_post_msx_operation',
+ 'sp_delete_category', 'sp_purgehistory', 'sp_delete_job', 'sp_purge_jobhistory', 'sp_delete_jobschedule',
+ 'sp_reassigntask', 'sp_delete_jobserver', 'sp_remove_job_from_targets', 'sp_delete_jobstep',
+ 'sp_resync_targetserver', 'sp_delete_notification', 'sp_start_job', 'sp_delete_operator',
+ 'sp_stop_job', 'sp_delete_targetserver', 'sp_update_alert', 'sp_delete_targetservergroup',
+ 'sp_update_category', 'sp_delete_targetsvrgrp_member', 'sp_update_job', 'sp_droptask',
+ 'sp_update_jobschedule', 'sp_help_alert', 'sp_update_jobstep', 'sp_help_category',
+ 'sp_update_notification', 'sp_help_downloadlist', 'sp_update_operator', 'sp_helphistory',
+ 'sp_update_targetservergroup', 'sp_help_job', 'sp_updatetask', 'xp_sqlagent_proxy_account',
+
+ //System Procedures
+ 'sp_add_data_file_recover_suspect_db', 'sp_helpconstraint', 'sp_addextendedproc',
+ 'sp_helpdb', 'sp_addextendedproperty', 'sp_helpdevice', 'sp_add_log_file_recover_suspect_db',
+ 'sp_helpextendedproc', 'sp_addmessage', 'sp_helpfile', 'sp_addtype', 'sp_helpfilegroup',
+ 'sp_addumpdevice', 'sp_helpindex', 'sp_altermessage', 'sp_helplanguage', 'sp_autostats',
+ 'sp_helpserver', 'sp_attach_db', 'sp_helpsort', 'sp_attach_single_file_db', 'sp_helpstats',
+ 'sp_bindefault', 'sp_helptext', 'sp_bindrule', 'sp_helptrigger', 'sp_bindsession',
+ 'sp_indexoption', 'sp_certify_removable', 'sp_invalidate_textptr', 'sp_configure',
+ 'sp_lock', 'sp_create_removable', 'sp_monitor', 'sp_createstats', 'sp_procoption',
+ 'sp_cycle_errorlog', 'sp_recompile', 'sp_datatype_info', 'sp_refreshview', 'sp_dbcmptlevel',
+ 'sp_releaseapplock', 'sp_dboption', 'sp_rename', 'sp_dbremove', 'sp_renamedb',
+ 'sp_delete_backuphistory', 'sp_resetstatus', 'sp_depends', 'sp_serveroption', 'sp_detach_db',
+ 'sp_setnetname', 'sp_dropdevice', 'sp_settriggerorder', 'sp_dropextendedproc', 'sp_spaceused',
+ 'sp_dropextendedproperty', 'sp_tableoption', 'sp_dropmessage', 'sp_unbindefault', 'sp_droptype',
+ 'sp_unbindrule', 'sp_executesql', 'sp_updateextendedproperty', 'sp_getapplock', 'sp_updatestats',
+ 'sp_getbindtoken', 'sp_validname', 'sp_help', 'sp_who',
+
+ //Web Assistant Procedures
+ 'sp_dropwebtask', 'sp_makewebtask', 'sp_enumcodepages', 'sp_runwebtask',
+
+ //XML Procedures
+ 'sp_xml_preparedocument', 'sp_xml_removedocument',
+
+ //General Extended Procedures
+ 'xp_cmdshellxp_logininfo', 'xp_enumgroups', 'xp_msver', 'xp_findnextmsgxp_revokelogin',
+ 'xp_grantlogin', 'xp_sprintf', 'xp_logevent', 'xp_sqlmaint', 'xp_loginconfig', 'xp_sscanf',
+
+ //API System Stored Procedures
+ 'sp_cursor', 'sp_cursorclose', 'sp_cursorexecute', 'sp_cursorfetch', 'sp_cursoropen',
+ 'sp_cursoroption', 'sp_cursorprepare', 'sp_cursorunprepare', 'sp_execute', 'sp_prepare', 'sp_unprepare',
+
+ //Misc
+ 'sp_createorphan', 'sp_droporphans', 'sp_reset_connection', 'sp_sdidebug'
+ ),
+ 4 => array(
+ //Function/sp's higlighted brown.
+ 'fn_helpcollations', 'fn_listextendedproperty ', 'fn_servershareddrives',
+ 'fn_trace_geteventinfo', 'fn_trace_getfilterinfo', 'fn_trace_getinfo',
+ 'fn_trace_gettable', 'fn_virtualfilestats','fn_listextendedproperty',
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '!', '!=', '%', '&', '&&', '(', ')', '*', '+', '-', '/', '<', '<<', '<=',
+ '<=>', '<>', '=', '>', '>=', '>>', '^', 'ALL', 'AND', 'ANY', 'BETWEEN', 'CROSS',
+ 'EXISTS', 'IN', 'JOIN', 'LIKE', 'NOT', 'NULL', 'OR', 'OUTER', 'SOME', '|', '||', '~'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000FF;',
+ 2 => 'color: #FF00FF;',
+ 3 => 'color: #AF0000;',
+ 4 => 'color: #AF0000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080;',
+ 'MULTI' => 'color: #008080;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;',
+ 2 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php
new file mode 100644
index 000000000..1e8243c2e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php
@@ -0,0 +1,300 @@
+<?php
+/*************************************************************************************
+ * typoscript.php
+ * --------
+ * Author: Jan-Philipp Halle (typo3@jphalle.de)
+ * Copyright: (c) 2005 Jan-Philipp Halle (http://www.jphalle.de/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/07/29
+ *
+ * TypoScript language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/07/11 (1.0.8)
+ * - Michiel Roos <geshi@typofree.org> Complete rewrite
+ * 2005/07/29 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * <things-to-do>
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'TypoScript',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(2 => '/(?<!(#|\'|"))(?:#(?!(?:[a-fA-F0-9]{6}|[a-fA-F0-9]{3}))[^\n#]+|#{2}[^\n#]+|#{7,999}[^\n]+)/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ // Conditions: http://documentation.typo3.org/documentation/tsref/conditions/
+ 1 => array(
+ 'browser', 'compatVersion', 'dayofmonth', 'dayofweek', 'device',
+ 'globalString', 'globalVars', 'hostname', 'hour',
+ 'ip', 'language', 'loginUser', 'loginuser', 'minute',
+ 'month', 'PIDinRootline', 'PIDupinRootline',
+ 'system', 'treelevel', 'useragent', 'userFunc',
+ 'usergroup', 'version'
+ ),
+
+ // Functions: http://documentation.typo3.org/documentation/tsref/functions/
+ 2 => array(
+ 'addParams', 'encapsLines', 'filelink', 'HTMLparser',
+ 'HTMLparser_tags', 'if', 'imageLinkWrap',
+ 'imgResource', 'makelinks', 'numRows', 'parseFunc',
+ 'select', 'split', 'stdWrap', 'tableStyle', 'tags',
+ 'textStyle', 'typolink'
+ ),
+
+ // Toplevel objects: http://documentation.typo3.org/documentation/tsref/tlo-objects/
+ 3 => array(
+ 'CARRAY', 'CONFIG', 'CONSTANTS', 'FE_DATA', 'FE_TABLE', 'FRAME',
+ 'FRAMESET', 'META', 'PAGE', 'plugin'
+ ),
+
+ // Content Objects (cObject) : http://documentation.typo3.org/documentation/tsref/cobjects/
+ 4 => array(
+ 'CASE', 'CLEARGIF', 'COA', 'COA_INT', 'COBJ_ARRAY', 'COLUMNS',
+ 'CONTENT', 'CTABLE', 'EDITPANEL', 'FILE', 'FORM',
+ 'HMENU', 'HRULER', 'HTML', 'IMAGE', 'IMGTEXT',
+ 'IMG_RESOURCE', 'LOAD_REGISTER', 'MULTIMEDIA',
+ 'OTABLE', 'PHP_SCRIPT', 'PHP_SCRIPT_EXT',
+ 'PHP_SCRIPT_INT', 'RECORDS', 'RESTORE_REGISTER',
+ 'SEARCHRESULT', 'TEMPLATE', 'TEXT', 'USER',
+ 'USER_INT'
+ ),
+
+ // GIFBUILDER toplevel link: http://documentation.typo3.org/documentation/tsref/gifbuilder/
+ 5 => array(
+ 'GIFBUILDER',
+ ),
+
+ // GIFBUILDER: http://documentation.typo3.org/documentation/tsref/gifbuilder/
+ // skipped fields: IMAGE, TEXT
+ // NOTE! the IMAGE and TEXT field already are linked in group 4, they
+ // cannot be linked twice . . . . unfortunately
+ 6 => array(
+ 'ADJUST', 'BOX', 'CROP', 'EFFECT', 'EMBOSS',
+ 'IMGMAP', 'OUTLINE', 'SCALE', 'SHADOW',
+ 'WORKAREA'
+ ),
+
+ // MENU Objects: http://documentation.typo3.org/documentation/tsref/menu/
+ 7 => array(
+ 'GMENU', 'GMENU_FOLDOUT', 'GMENU_LAYERS', 'IMGMENU',
+ 'IMGMENUITEM', 'JSMENU', 'JSMENUITEM', 'TMENU',
+ 'TMENUITEM', 'TMENU_LAYERS'
+ ),
+
+ // MENU common properties: http://documentation.typo3.org/documentation/tsref/menu/common-properties/
+ 8 => array(
+ 'alternativeSortingField', 'begin', 'debugItemConf',
+ 'imgNameNotRandom', 'imgNamePrefix',
+ 'itemArrayProcFunc', 'JSWindow', 'maxItems',
+ 'minItems', 'overrideId', 'sectionIndex',
+ 'showAccessRestrictedPages', 'submenuObjSuffixes'
+ ),
+
+ // MENU item states: http://documentation.typo3.org/documentation/tsref/menu/item-states/
+ 9 => array(
+ 'ACT', 'ACTIFSUB', 'ACTIFSUBRO', 'ACTRO', 'CUR', 'CURIFSUB',
+ 'CURIFSUBRO', 'CURRO', 'IFSUB', 'IFSUBRO', 'NO',
+ 'SPC', 'USERDEF1', 'USERDEF1RO', 'USERDEF2',
+ 'USERDEF2RO', 'USR', 'USRRO'
+ ),
+ ),
+
+ // Does not include '-' because of stuff like htmlTag_langKey = en-GB and
+ // lib.nav-sub
+ 'SYMBOLS' => array(
+ 0 => array(
+ '|',
+ '+', '*', '/', '%',
+ '!', '&&', '^',
+ '<', '>', '=',
+ '?', ':',
+ '.'
+ ),
+ 1 => array(
+ '(', ')', '{', '}', '[', ']'
+ )
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true,
+ 4 => true,
+ 5 => true,
+ 6 => true,
+ 7 => true,
+ 8 => true,
+ 9 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #ed7d14;',
+ 2 => 'font-weight: bold;',
+ 3 => 'color: #990000; font-weight: bold;',
+ 4 => 'color: #990000; font-weight: bold;',
+ 5 => 'color: #990000; font-weight: bold;',
+ 6 => 'color: #990000; font-weight: bold;',
+ 7 => 'color: #990000; font-weight: bold;',
+ 8 => 'font-weight: bold;',
+ 9 => 'color: #990000; font-weight: bold;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #aaa; font-style: italic;',
+ 2 => 'color: #aaa; font-style: italic;',
+ 'MULTI' => 'color: #aaa; font-style: italic;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ac14aa;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000e0; font-weight: bold;',
+ 2 => 'color: #0000e0; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #009900;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933; font-weight: bold;',
+ // Set this to the same value as brackets above
+ 1 => 'color: #009900; font-weight: bold;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #009900;',
+ 1 => 'color: #009900; font-weight: bold;',
+ 2 => 'color: #3366CC;',
+ 3 => 'color: #000066; font-weight: bold;',
+ 4 => 'color: #ed7d14;',
+ 5 => 'color: #000066; font-weight: bold;',
+ 6 => 'color: #009900;',
+ 7 => 'color: #3366CC;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => 'http://documentation.typo3.org/documentation/tsref/conditions/{FNAME}/',
+ 2 => 'http://documentation.typo3.org/documentation/tsref/functions/{FNAME}/',
+ 3 => 'http://documentation.typo3.org/documentation/tsref/tlo-objects/{FNAME}/',
+ 4 => 'http://documentation.typo3.org/documentation/tsref/cobjects/{FNAME}/',
+ 5 => 'http://documentation.typo3.org/documentation/tsref/gifbuilder/',
+ 6 => 'http://documentation.typo3.org/documentation/tsref/gifbuilder/{FNAME}/',
+ 7 => 'http://documentation.typo3.org/documentation/tsref/menu/{FNAME}/',
+ 8 => 'http://documentation.typo3.org/documentation/tsref/menu/common-properties/',
+ 9 => 'http://documentation.typo3.org/documentation/tsref/menu/item-states/'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // Constant
+ 0 => array(
+ GESHI_SEARCH => '(\{)(\$[a-zA-Z_\.]+[a-zA-Z0-9_\.]*)(\})',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3'
+ ),
+
+ // Constant dollar sign
+ 1 => array(
+ GESHI_SEARCH => '(\$)([a-zA-Z_\.]+[a-zA-Z0-9_\.]*)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '\\2'
+ ),
+
+ // xhtml tag
+ 2 => array(
+ GESHI_SEARCH => '(&lt;[a-zA-Z\!\/].*?&gt;)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 's',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+
+ // extension keys / tables: (static|user|ttx|tx|tt|fe)_something[_something]
+ 3 => array(
+ GESHI_SEARCH => '(plugin\.|[^\.]\b)((?:static|user|ttx|tx|tt|fe)(?:_[0-9A-Za-z_]+?)\b)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+
+ // conditions and controls
+ 4 => array(
+ GESHI_SEARCH => '(\[)(globalVar|global|end)\b',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+
+ // lowlevel setup and constant objects
+ 5 => array(
+ GESHI_SEARCH => '([^\.\$-\{]\b)(cObj|field|config|content|file|frameset|includeLibs|lib|page|plugin|register|resources|sitemap|sitetitle|styles|temp|tt_content|tt_news|types|xmlnews)\b',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+
+ // markers
+ 6 => array(
+ GESHI_SEARCH => '(###[^#]+###)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+
+ // hex color codes
+ 7 => array(
+ GESHI_SEARCH => '(#[a-fA-F0-9]{6}\b|#[a-fA-F0-9]{3}\b)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ )
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php
new file mode 100644
index 000000000..bc43ca4a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php
@@ -0,0 +1,133 @@
+<?php
+/*************************************************************************************
+ * vb.php
+ * ------
+ * Author: Roberto Rossi (rsoftware@altervista.org)
+ * Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org),
+ * Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/08/30
+ *
+ * Visual Basic language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/08/27 (1.0.8.1)
+ * - changed keyword list for better Visual Studio compliance
+ * 2008/08/26 (1.0.8.1)
+ * - Fixed multiline comments
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/08/30 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Visual Basic',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ // Comments (either single or multiline with _
+ 1 => '/\'.*(?<! _)\n/sU',
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'AddressOf', 'Alias', 'And', 'Append', 'As', 'BF', 'Binary',
+ 'Boolean', 'ByRef', 'Byte', 'ByVal', 'Call', 'Case', 'CBool',
+ 'CByte', 'CCur', 'CDate', 'CDbl', 'CDec', 'CInt', 'CLng',
+ 'Close', 'Collection', 'Const', 'Control', 'CSng', 'CStr',
+ 'Currency', 'CVar', 'Date', 'Declare', 'Dim', 'Do', 'Double',
+ 'Each', 'Else', 'ElseIf', 'End', 'Enum', 'Erase', 'Error',
+ 'Event', 'Exit', 'Explicit', 'False', 'For', 'Friend',
+ 'Function', 'Get', 'GoSub', 'Goto', 'If', 'Implements', 'In',
+ 'Input', 'Integer', 'Is', 'LBound', 'Let', 'Lib', 'Like',
+ 'Line', 'Long', 'Loop', 'Mod', 'New', 'Next', 'Not',
+ 'Nothing', 'Object', 'On', 'Open', 'Option', 'Optional',
+ 'Or', 'Output', 'ParamArray', 'Preserve', 'Print', 'Private',
+ 'Property', 'Public', 'RaiseEvent', 'Random', 'ReDim',
+ 'Resume', 'Select', 'Set', 'Single', 'Static', 'Step',
+ 'Stop', 'String', 'Sub', 'Then', 'To', 'True', 'Type',
+ 'TypeOf', 'UBound', 'Until', 'Variant', 'While', 'With',
+ 'WithEvents', 'Xor'
+ )
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000;'
+ ),
+ 'BRACKETS' => array(
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #800000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #800000; font-weight: bold;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'BRACKETS' => GESHI_NEVER,
+ 'SYMBOLS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php
new file mode 100644
index 000000000..e9f7c3e43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php
@@ -0,0 +1,201 @@
+<?php
+/*************************************************************************************
+ * vbnet.php
+ * ---------
+ * Author: Alan Juden (alan@judenware.org)
+ * Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/06/04
+ *
+ * VB.NET language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2004/11/27 (1.0.0)
+ * - Initial release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'vb.net',
+ 'COMMENT_SINGLE' => array(1 => "'"),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ '3DDKSHADOW', '3DHIGHLIGHT', '3DLIGHT', 'ABORT', 'ABORTRETRYIGNORE', 'ACTIVEBORDER',
+ 'ACTIVETITLEBAR', 'ALIAS', 'APPLICATIONMODAL', 'APPLICATIONWORKSPACE', 'ARCHIVE',
+ 'BACK', 'BINARYCOMPARE', 'BLACK', 'BLUE', 'BUTTONFACE', 'BUTTONSHADOW', 'BUTTONTEXT',
+ 'CANCEL', 'CDROM', 'CR', 'CRITICAL', 'CRLF', 'CYAN', 'DEFAULT', 'DEFAULTBUTTON1',
+ 'DEFAULTBUTTON2', 'DEFAULTBUTTON3', 'DESKTOP', 'DIRECTORY', 'EXCLAMATION', 'FALSE',
+ 'FIXED', 'FORAPPENDING', 'FORMFEED', 'FORREADING', 'FORWRITING', 'FROMUNICODE',
+ 'GRAYTEXT', 'GREEN', 'HIDDEN', 'HIDE', 'HIGHLIGHT', 'HIGHLIGHTTEXT', 'HIRAGANA',
+ 'IGNORE', 'INACTIVEBORDER', 'INACTIVECAPTIONTEXT', 'INACTIVETITLEBAR', 'INFOBACKGROUND',
+ 'INFORMATION', 'INFOTEXT', 'KATAKANALF', 'LOWERCASE', 'MAGENTA', 'MAXIMIZEDFOCUS',
+ 'MENUBAR', 'MENUTEXT', 'METHOD', 'MINIMIZEDFOCUS', 'MINIMIZEDNOFOCUS', 'MSGBOXRIGHT',
+ 'MSGBOXRTLREADING', 'MSGBOXSETFOREGROUND', 'NARROW', 'NEWLINE', 'NO', 'NORMAL',
+ 'NORMALFOCUS', 'NORMALNOFOCUS', 'NULLSTRING', 'OBJECTERROR', 'OK', 'OKCANCEL', 'OKONLY',
+ 'PROPERCASE', 'QUESTION', 'RAMDISK', 'READONLY', 'RED', 'REMOTE', 'REMOVABLE', 'RETRY',
+ 'RETRYCANCEL', 'SCROLLBARS', 'SYSTEMFOLDER', 'SYSTEMMODAL', 'TEMPORARYFOLDER',
+ 'TEXTCOMPARE', 'TITLEBARTEXT', 'TRUE', 'UNICODE', 'UNKNOWN', 'UPPERCASE', 'VERTICALTAB',
+ 'VOLUME', 'WHITE', 'WIDE', 'WIN16', 'WIN32', 'WINDOWBACKGROUND', 'WINDOWFRAME',
+ 'WINDOWSFOLDER', 'WINDOWTEXT', 'YELLOW', 'YES', 'YESNO', 'YESNOCANCEL'
+ ),
+ 2 => array(
+ 'AndAlso', 'As', 'ADDHANDLER', 'ASSEMBLY', 'AUTO', 'Binary', 'ByRef', 'ByVal', 'BEGINEPILOGUE',
+ 'Else', 'ElseIf', 'Empty', 'Error', 'ENDPROLOGUE', 'EXTERNALSOURCE', 'ENVIRON', 'For',
+ 'Friend', 'GET', 'HANDLES', 'Input', 'Is', 'IsNot', 'Len', 'Lock', 'Me', 'Mid', 'MUSTINHERIT', 'MustOverride',
+ 'MYBASE', 'MYCLASS', 'New', 'Next', 'Nothing', 'Null', 'NOTINHERITABLE',
+ 'NOTOVERRIDABLE', 'OFF', 'On', 'Option', 'Optional', 'Overloads', 'OVERRIDABLE', 'Overrides', 'ParamArray',
+ 'Print', 'Private', 'Property', 'Public', 'Resume', 'Return', 'Seek', 'Static', 'Step',
+ 'String', 'SHELL', 'SENDKEYS', 'SET', 'Shared', 'Then', 'Time', 'To', 'THROW', 'WithEvents'
+ ),
+ 3 => array(
+ 'COLLECTION', 'DEBUG', 'DICTIONARY', 'DRIVE', 'DRIVES', 'ERR', 'FILE', 'FILES',
+ 'FILESYSTEMOBJECT', 'FOLDER', 'FOLDERS', 'TEXTSTREAM'
+ ),
+ 4 => array(
+ 'BOOLEAN', 'BYTE', 'DATE', 'DECIMIAL', 'DOUBLE', 'INTEGER', 'LONG', 'OBJECT',
+ 'SINGLE STRING'
+ ),
+ 5 => array(
+ 'ADDRESSOF', 'AND', 'BITAND', 'BITNOT', 'BITOR', 'BITXOR',
+ 'GETTYPE', 'LIKE', 'MOD', 'NOT', 'ORXOR'
+ ),
+ 6 => array(
+ 'APPACTIVATE', 'BEEP', 'CALL', 'CHDIR', 'CHDRIVE', 'CLASS', 'CASE', 'CATCH', 'CONST',
+ 'DECLARE', 'DELEGATE', 'DELETESETTING', 'DIM', 'DO', 'DOEVENTS', 'END', 'ENUM',
+ 'EVENT', 'EXIT', 'EACH', 'FUNCTION', 'FINALLY', 'IF', 'IMPORTS', 'INHERITS',
+ 'INTERFACE', 'IMPLEMENTS', 'KILL', 'LOOP', 'NAMESPACE', 'OPEN', 'PUT',
+ 'RAISEEVENT', 'RANDOMIZE', 'REDIM', 'REM', 'RESET', 'SAVESETTING', 'SELECT',
+ 'SETATTR', 'STOP', 'SUB', 'SYNCLOCK', 'STRUCTURE', 'SHADOWS', 'SWITCH',
+ 'TRY', 'WIDTH', 'WITH', 'WRITE', 'WHILE'
+ ),
+ 7 => array(
+ 'ABS', 'ARRAY', 'ASC', 'ASCB', 'ASCW', 'CALLBYNAME', 'CBOOL', 'CBYTE', 'CCHAR',
+ 'CCHR', 'CDATE', 'CDBL', 'CDEC', 'CHOOSE', 'CHR', 'CHR$', 'CHRB', 'CHRB$', 'CHRW',
+ 'CINT', 'CLNG', 'CLNG8', 'CLOSE', 'COBJ', 'COMMAND', 'COMMAND$', 'CONVERSION',
+ 'COS', 'CREATEOBJECT', 'CSHORT', 'CSTR', 'CURDIR', 'CTYPE', 'CVDATE', 'DATEADD',
+ 'DATEDIFF', 'DATEPART', 'DATESERIAL', 'DATEVALUE', 'DAY', 'DDB', 'DIR', 'DIR$',
+ 'EOF', 'ERROR$', 'EXP', 'FILEATTR', 'FILECOPY', 'FILEDATATIME', 'FILELEN', 'FILTER',
+ 'FIX', 'FORMAT', 'FORMAT$', 'FORMATCURRENCY', 'FORMATDATETIME', 'FORMATNUMBER',
+ 'FORMATPERCENT', 'FREEFILE', 'FV', 'GETALLSETTINGS', 'GETATTRGETOBJECT', 'GETSETTING',
+ 'HEX', 'HEX$', 'HOUR', 'IIF', 'IMESTATUS', 'INPUT$', 'INPUTB', 'INPUTB$', 'INPUTBOX',
+ 'INSTR', 'INSTRB', 'INSTRREV', 'INT', 'IPMT', 'IRR', 'ISARRAY', 'ISDATE', 'ISEMPTY',
+ 'ISERROR', 'ISNULL', 'ISNUMERIC', 'ISOBJECT', 'JOIN', 'LBOUND', 'LCASE', 'LCASE$',
+ 'LEFT', 'LEFT$', 'LEFTB', 'LEFTB$', 'LENB', 'LINEINPUT', 'LOC', 'LOF', 'LOG', 'LTRIM',
+ 'LTRIM$', 'MID$', 'MIDB', 'MIDB$', 'MINUTE', 'MIRR', 'MKDIR', 'MONTH', 'MONTHNAME',
+ 'MSGBOX', 'NOW', 'NPER', 'NPV', 'OCT', 'OCT$', 'PARTITION', 'PMT', 'PPMT', 'PV',
+ 'RATE', 'REPLACE', 'RIGHT', 'RIGHT$', 'RIGHTB', 'RIGHTB$', 'RMDIR', 'RND', 'RTRIM',
+ 'RTRIM$', 'SECOND', 'SIN', 'SLN', 'SPACE', 'SPACE$', 'SPC', 'SPLIT', 'SQRT', 'STR', 'STR$',
+ 'STRCOMP', 'STRCONV', 'STRING$', 'STRREVERSE', 'SYD', 'TAB', 'TAN', 'TIMEOFDAY',
+ 'TIMER', 'TIMESERIAL', 'TIMEVALUE', 'TODAY', 'TRIM', 'TRIM$', 'TYPENAME', 'UBOUND',
+ 'UCASE', 'UCASE$', 'VAL', 'WEEKDAY', 'WEEKDAYNAME', 'YEAR'
+ ),
+ 8 => array(
+ 'ANY', 'ATN', 'CALENDAR', 'CIRCLE', 'CURRENCY', 'DEFBOOL', 'DEFBYTE', 'DEFCUR',
+ 'DEFDATE', 'DEFDBL', 'DEFDEC', 'DEFINT', 'DEFLNG', 'DEFOBJ', 'DEFSNG', 'DEFSTR',
+ 'DEFVAR', 'EQV', 'GOSUB', 'IMP', 'INITIALIZE', 'ISMISSING', 'LET', 'LINE', 'LSET',
+ 'RSET', 'SGN', 'SQR', 'TERMINATE', 'VARIANT', 'VARTYPE', 'WEND'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '&', '&=', '*', '*=', '+', '+=', '-', '-=', '//', '/', '/=', '=', '\\', '\\=',
+ '^', '^='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false,
+ 6 => false,
+ 7 => false,
+ 8 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0600FF;', //Constants
+ 2 => 'color: #FF8000;', //Keywords
+ 3 => 'color: #008000;', //Data Types
+ 4 => 'color: #FF0000;', //Objects
+ 5 => 'color: #804040;', //Operators
+ 6 => 'color: #0600FF;', //Statements
+ 7 => 'color: #0600FF;', //Functions
+ 8 => 'color: #0600FF;' //Deprecated
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008080; font-style: italic;',
+ 'MULTI' => 'color: #008080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #808080;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #FF0000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #0000FF;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => 'http://www.google.com/search?q={FNAMEU}+site:msdn.microsoft.com',
+ 4 => '',
+ 5 => '',
+ 6 => '',
+ 7 => '',
+ 8 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 =>'.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php
new file mode 100644
index 000000000..ba1766c2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php
@@ -0,0 +1,173 @@
+<?php
+/**
+ * verilog.php
+ * -----------
+ * Author: G�nter Dannoritzer <dannoritzer@web.de>
+ * Copyright: (C) 2008 Guenter Dannoritzer
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/05/28
+ *
+ * Verilog language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/29
+ * - added regular expression to find numbers of the form 4'b001xz
+ * - added regular expression to find values for `timescale command
+ * - extended macro keywords
+ *
+ * TODO (updated 2008/05/29)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Verilog',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'COMMENT_REGEXP' => array(1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ // keywords
+ 1 => array('always', 'and', 'assign', 'begin', 'buf', 'bufif0', 'bufif1', 'case',
+ 'casex', 'casez', 'cmos', 'deassign', 'default', 'defparam',
+ 'disable', 'edge', 'else', 'end', 'endcase', 'endfunction',
+ 'endmodule', 'endprimitive', 'endspecify', 'endtable', 'endtask',
+ 'event', 'for', 'force', 'forever', 'function', 'highz0',
+ 'highz1', 'if', 'ifnone', 'initial', 'inout', 'input', 'integer',
+ 'join', 'large', 'macromodule', 'medium', 'module', 'nand',
+ 'negedge', 'nmos', 'nor', 'not', 'notif0', 'notif1', 'or',
+ 'output', 'parameter', 'pmos', 'posedge', 'primitive', 'pull0',
+ 'pull1', 'pulldown', 'pullup', 'rcmos', 'real', 'realtime', 'reg',
+ 'release', 'repeat', 'rnmos', 'rpmos', 'rtran', 'rtranif0',
+ 'rtranif1', 'scalared', 'small', 'specify', 'specparam',
+ 'strong0', 'strong1', 'supply0', 'supply1', 'table', 'task',
+ 'time', 'tran', 'tranif0', 'tranif1', 'tri', 'tri0', 'tri1',
+ 'triand', 'trior', 'trireg', 'vectored', 'wait', 'wand', 'weak0',
+ 'weak1', 'while', 'wire', 'wor', 'xnor', 'xor'
+ ),
+ // system tasks
+ 2 => array(
+ '$display', '$monitor',
+ '$dumpall', '$dumpfile', '$dumpflush', '$dumplimit', '$dumpoff',
+ '$dumpon', '$dumpvars',
+ '$fclose', '$fdisplay', '$fopen',
+ '$finish', '$fmonitor', '$fstrobe', '$fwrite',
+ '$fgetc', '$ungetc', '$fgets', '$fscanf', '$fread', '$ftell',
+ '$fseek', '$frewind', '$ferror', '$fflush', '$feof',
+ '$random',
+ '$readmemb', '$readmemh', '$readmemx',
+ '$signed', '$stime', '$stop',
+ '$strobe', '$time', '$unsigned', '$write'
+ ),
+ // macros
+ 3 => array(
+ '`default-net', '`define',
+ '`celldefine', '`default_nettype', '`else', '`elsif', '`endcelldefine',
+ '`endif', '`ifdef', '`ifndef', '`include', '`line', '`nounconnected_drive',
+ '`resetall', '`timescale', '`unconnected_drive', '`undef'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%',
+ '^', '&', '|', '~',
+ '?', ':',
+ '#', '<<', '<<<',
+ '>', '<', '>=', '<=',
+ '@', ';', ','
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #A52A2A; font-weight: bold;',
+ 2 => 'color: #9932CC;',
+ 3 => 'color: #008800;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #00008B; font-style: italic;',
+ 'MULTI' => 'color: #00008B; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #9F79EE'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #9F79EE;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #FF00FF;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff0055;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #202020;',
+ 2 => 'color: #202020;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #5D478B;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #ff0055;',
+ 1 => 'color: #ff0055;',
+ ),
+ 'SCRIPT' => array(
+ 0 => '',
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => ''
+ ),
+ 'REGEXPS' => array(
+ // numbers
+ 0 => "\d'[bdh][0-9_a-fA-FxXzZ]+",
+ // time -> 1, 10, or 100; s, ms, us, ns, ps, of fs
+ 1 => "1[0]{0,2}[munpf]?s"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ 1 => ''
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ 0 => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php
new file mode 100644
index 000000000..14072c9d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php
@@ -0,0 +1,144 @@
+<?php
+/*************************************************************************************
+ * vhdl.php
+ * --------
+ * Author: Alexander 'E-Razor' Krause (admin@erazor-zone.de)
+ * Copyright: (c) 2005 Alexander Krause
+ * Release Version: 1.0.8.4
+ * Date Started: 2005/06/15
+ *
+ * VHDL (VHSICADL, very high speed integrated circuit HDL) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * - Optimized regexp group 0 somewhat
+ * 2006/06/15 (1.0.0)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'VHDL',
+ 'COMMENT_SINGLE' => array(1 => '--'),
+ 'COMMENT_MULTI' => array('%' => '%'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /*keywords*/
+ 1 => array(
+ 'access','after','alias','all','assert','attribute','architecture','begin',
+ 'block','body','buffer','bus','case','component','configuration','constant',
+ 'disconnect','downto','else','elsif','end','entity','exit','file','for',
+ 'function','generate','generic','group','guarded','if','impure','in',
+ 'inertial','inout','is','label','library','linkage','literal','loop',
+ 'map','new','next','null','of','on','open','others','out','package',
+ 'port','postponed','procedure','process','pure','range','record','register',
+ 'reject','report','return','select','severity','signal','shared','subtype',
+ 'then','to','transport','type','unaffected','units','until','use','variable',
+ 'wait','when','while','with','note','warning','error','failure','and',
+ 'or','xor','not','nor','used','memory','segments','dff','dffe','help_id',
+ 'mod','info','latch','rising_edge','falling_edge'
+ ),
+ /*types*/
+ 2 => array(
+ 'bit','bit_vector','character','boolean','integer','real','time','string',
+ 'severity_level','positive','natural','signed','unsigned','line','text',
+ 'std_logic','std_logic_vector','std_ulogic','std_ulogic_vector','qsim_state',
+ 'qsim_state_vector','qsim_12state','qsim_12state_vector','qsim_strength',
+ 'mux_bit','mux_vector','reg_bit','reg_vector','wor_bit','wor_vector',
+ 'work','ieee','std_logic_signed','std_logic_1164','std_logic_arith',
+ 'numeric_std'
+
+ ),
+ /*operators*/
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '(', ')',
+ ';',':',
+ '<','>','=','<=',':=','=>','=='
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #000080; font-weight: bold;',
+ 2 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000; font-style: italic;',
+ 'MULTI' => 'color: #008000; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000066;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #ff0000;',
+ 1 => 'color: #ff0000;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers and scientific notation for numbers
+ 0 => '(\b0x[0-9a-fA-F]+|\b\d[0-9a-fA-F]+[hH])|'.
+ '(\b\d+?(\.\d+?)?E[+\-]?\d+)|(\bns)|'.
+ "('[0-9a-zA-Z]+(?!'))",
+ //Number characters?
+ 1 => "\b(''\d'')"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php
new file mode 100644
index 000000000..3946c4f96
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php
@@ -0,0 +1,185 @@
+<?php
+
+/*************************************************************************************
+ * vim.php
+ * ----------------
+ * Author: Swaroop C H (swaroop@swaroopch.com)
+ * Copyright: (c) 2008 Swaroop C H (http://www.swaroopch.com)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/10/19
+ *
+ * Vim scripting language file for GeSHi.
+ *
+ * Reference: http://qbnz.com/highlighter/geshi-doc.html#language-files
+ * All keywords scraped from `:help expression-commands`.
+ * All method names scraped from `:help function-list`.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/19 (1.0.8.2)
+ * - Started.
+ *
+ * TODO (updated 2008/10/19)
+ * -------------------------
+ * - Fill out list of zillion commands
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array(
+ 'LANG_NAME' => 'Vim Script',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_REGEXP' => array(
+ 1 => "/^\".*$/m"
+ ),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'brea', 'break', 'call', 'cat', 'catc',
+ 'catch', 'con', 'cont', 'conti',
+ 'contin', 'continu', 'continue', 'ec', 'echo',
+ 'echoe', 'echoer', 'echoerr', 'echoh',
+ 'echohl', 'echom', 'echoms', 'echomsg', 'echon',
+ 'el', 'els', 'else', 'elsei', 'elseif',
+ 'en', 'end', 'endi', 'endif', 'endfo',
+ 'endfor', 'endt', 'endtr', 'endtry', 'endw',
+ 'endwh', 'endwhi', 'endwhil', 'endwhile', 'exe', 'exec', 'execu',
+ 'execut', 'execute', 'fina', 'final', 'finall', 'finally', 'for',
+ 'fun', 'func', 'funct', 'functi', 'functio', 'function', 'if', 'in',
+ 'let', 'lockv', 'lockva', 'lockvar', 'retu', 'retur', 'return', 'th',
+ 'thr', 'thro', 'throw', 'try', 'unl', 'unle', 'unlet', 'unlo', 'unloc',
+ 'unlock', 'unlockv', 'unlockva', 'unlockvar', 'wh', 'whi', 'whil',
+ 'while'
+ ),
+ 2 => array(
+ 'autocmd', 'com', 'comm', 'comma', 'comman', 'command', 'comc',
+ 'comcl', 'comcle', 'comclea', 'comclear', 'delc', 'delco',
+ 'delcom', 'delcomm', 'delcomma', 'delcomman', 'delcommand',
+ '-nargs' # TODO There are zillions of commands to be added here from http://vimdoc.sourceforge.net/htmldoc/usr_toc.html
+ ),
+ 3 => array(
+ 'abs', 'add', 'append', 'argc', 'argidx', 'argv', 'atan',
+ 'browse', 'browsedir', 'bufexists', 'buflisted', 'bufloaded',
+ 'bufname', 'bufnr', 'bufwinnr', 'byte2line', 'byteidx',
+ 'ceil', 'changenr', 'char2nr', 'cindent', 'clearmatches',
+ 'col', 'complete', 'complete_add', 'complete_check', 'confirm',
+ 'copy', 'cos', 'count', 'cscope_connection', 'cursor',
+ 'deepcopy', 'delete', 'did_filetype', 'diff_filler',
+ 'diff_hlID', 'empty', 'escape', 'eval', 'eventhandler',
+ 'executable', 'exists', 'extend', 'expand', 'feedkeys',
+ 'filereadable', 'filewritable', 'filter', 'finddir',
+ 'findfile', 'float2nr', 'floor', 'fnameescape', 'fnamemodify',
+ 'foldclosed', 'foldclosedend', 'foldlevel', 'foldtext',
+ 'foldtextresult', 'foreground', 'garbagecollect',
+ 'get', 'getbufline', 'getbufvar', 'getchar', 'getcharmod',
+ 'getcmdline', 'getcmdpos', 'getcmdtype', 'getcwd', 'getfperm',
+ 'getfsize', 'getfontname', 'getftime', 'getftype', 'getline',
+ 'getloclist', 'getmatches', 'getpid', 'getpos', 'getqflist',
+ 'getreg', 'getregtype', 'gettabwinvar', 'getwinposx',
+ 'getwinposy', 'getwinvar', 'glob', 'globpath', 'has',
+ 'has_key', 'haslocaldir', 'hasmapto', 'histadd', 'histdel',
+ 'histget', 'histnr', 'hlexists', 'hlID', 'hostname', 'iconv',
+ 'indent', 'index', 'input', 'inputdialog', 'inputlist',
+ 'inputrestore', 'inputsave', 'inputsecret', 'insert',
+ 'isdirectory', 'islocked', 'items', 'join', 'keys', 'len',
+ 'libcall', 'libcallnr', 'line', 'line2byte', 'lispindent',
+ 'localtime', 'log10', 'map', 'maparg', 'mapcheck', 'match',
+ 'matchadd', 'matcharg', 'matchdelete', 'matchend', 'matchlist',
+ 'matchstr', 'max', 'min', 'mkdir', 'mode', 'nextnonblank',
+ 'nr2char', 'pathshorten', 'pow', 'prevnonblank', 'printf',
+ 'pumvisible', 'range', 'readfile', 'reltime', 'reltimestr',
+ 'remote_expr', 'remote_foreground', 'remote_peek',
+ 'remote_read', 'remote_send', 'remove', 'rename', 'repeat',
+ 'resolve', 'reverse', 'round', 'search', 'searchdecl',
+ 'searchpair', 'searchpairpos', 'searchpos', 'server2client',
+ 'serverlist', 'setbufvar', 'setcmdpos', 'setline',
+ 'setloclist', 'setmatches', 'setpos', 'setqflist', 'setreg',
+ 'settabwinvar', 'setwinvar', 'shellescape', 'simplify', 'sin',
+ 'sort', 'soundfold', 'spellbadword', 'spellsuggest', 'split',
+ 'sqrt', 'str2float', 'str2nr', 'strftime', 'stridx', 'string',
+ 'strlen', 'strpart', 'strridx', 'strtrans', 'submatch',
+ 'substitute', 'synID', 'synIDattr', 'synIDtrans', 'synstack',
+ 'system', 'tabpagebuflist', 'tabpagenr', 'tabpagewinnr',
+ 'taglist', 'tagfiles', 'tempname', 'tolower', 'toupper', 'tr',
+ 'trunc', 'type', 'values', 'virtcol', 'visualmode', 'winbufnr',
+ 'wincol', 'winheight', 'winline', 'winnr', 'winrestcmd',
+ 'winrestview', 'winsaveview', 'winwidth', 'writefile'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '%', '&', '*', '|', '/', '<', '>',
+ '^', '-', '+', '~', '?', ':', '$', '@', '.'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'STYLES' => array(
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'KEYWORDS' => array(
+ 1 => 'color: #804040;',
+ 2 => 'color: #668080;',
+ 3 => 'color: #25BB4D;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #000000;',
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000; font-weight:bold;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #C5A22D;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false, //Save some time as OO identifiers aren't used
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array()
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php
new file mode 100644
index 000000000..0cb73c2a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php
@@ -0,0 +1,456 @@
+<?php
+/*************************************************************************************
+ * visualfoxpro.php
+ * ----------------
+ * Author: Roberto Armellin (r.armellin@tin.it)
+ * Copyright: (c) 2004 Roberto Armellin, Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/09/17
+ *
+ * Visual FoxPro language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Removed tab as a symbol char
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/10/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Visual Fox Pro',
+ 'COMMENT_SINGLE' => array(1 => "//", 2 => "\n*"),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'Case', 'Else', '#Else', 'Then',
+ 'Endcase', 'Enddefine', 'Enddo', 'Endfor', 'Endfunc', 'Endif', 'Endprintjob',
+ 'Endproc', 'Endscan', 'Endtext', 'Endwith', '#Endif',
+ '#Elif','#Define','#If','#Include',
+ '#Itsexpression','#Readclauses','#Region','#Section','#Undef','#Wname',
+ 'Define','Do',
+ 'For','Function','Hidden',
+ 'If','Local','Lparameter','Lparameters','Next','Otherwise',
+ 'Parameters','Printjob','Procedure','Protected','Public','Scan',
+ 'Text','While','With','Abs','Accept','Access','Aclass','Acopy',
+ 'Acos','Adatabases','Adbobjects','Addbs','Addrelationtoenv','Addtabletoenv',
+ 'Adel','Adir','Aelement','Aerror','Afields','Afont',
+ 'Agetclass','Agetfileversion','Ains','Ainstance','Alen','Align',
+ 'Alines','Alltrim','Alter','Amembers','Amouseobj','Anetresources',
+ 'Ansitooem','Append','Aprinters','Ascan','Aselobj','Asin',
+ 'Asort','Assert','Asserts','Assist','Asubscript','Asynchronous',
+ 'At_c','Atan','Atc','Atcc','Atcline','Atline',
+ 'Atn2','Aused','Autoform','Autoreport','Avcxclasses','Average',
+ 'BarCount','BarPrompt','BatchMode','BatchUpdateCount','Begin','BellSound',
+ 'BinToC','Bintoc','Bitand','Bitclear','Bitlshift','Bitnot',
+ 'Bitor','Bitrshift','Bitset','Bittest','Bitxor','Bof',
+ 'Browse','BrowseRefresh','Buffering','BuilderLock','COMArray','COMReturnError',
+ 'CToBin','Calculate','Call','Capslock','Cd','Cdow',
+ 'Ceiling','Central','Change','Char','Chdir','Chr',
+ 'Chrsaw','Chrtran','Chrtranc','Close','Cmonth','Cntbar',
+ 'Cntpad','Col','Comclassinfo','CommandTargetQuery','Compile','Completed',
+ 'Compobj','Compute','Concat','ConnectBusy','ConnectHandle','ConnectName',
+ 'ConnectString','ConnectTimeOut','ContainerReleaseType','Continue','Copy','Cos',
+ 'Cot','Count','Coverage','Cpconvert','Cpcurrent','Cpdbf',
+ 'Cpnotrans','Create','CreateBinary','Createobject','Createobjectex','Createoffline',
+ 'CrsBuffering','CrsFetchMemo','CrsFetchSize','CrsMaxRows','CrsMethodUsed','CrsNumBatch',
+ 'CrsShareConnection','CrsUseMemoSize','CrsWhereClause','Ctobin','Ctod','Ctot',
+ 'Curdate','Curdir','CurrLeft','CurrSymbol','CursorGetProp','CursorSetProp',
+ 'Curtime','Curval','DBGetProp','DBSetProp','DB_BufLockRow','DB_BufLockTable',
+ 'DB_BufOff','DB_BufOptRow','DB_BufOptTable','DB_Complette','DB_DeleteInsert','DB_KeyAndModified',
+ 'DB_KeyAndTimestamp','DB_KeyAndUpdatable','DB_LocalSQL','DB_NoPrompt','DB_Prompt','DB_RemoteSQL',
+ 'DB_TransAuto','DB_TransManual','DB_TransNone','DB_Update','Datetime','Day',
+ 'Dayname','Dayofmonth','Dayofweek','Dayofyear','Dbalias','Dbused',
+ 'Ddeaborttrans','Ddeadvise','Ddeenabled','Ddeexecute','Ddeinitiate','Ddelasterror',
+ 'Ddepoke','Dderequest','Ddesetoption','Ddesetservice','Ddesettopic','Ddeterminate',
+ 'Debugout','Declare','DefOLELCid','DefaultValue','Defaultext','Degrees',
+ 'DeleteTrigger','Desc','Description','Difference','Dimension','Dir',
+ 'Directory','Diskspace','DispLogin','DispWarnings','Display','Dll',
+ 'Dmy','DoDefault','DoEvents','Doc','Doevents','Dow',
+ 'Drivetype','Drop','Dropoffline','Dtoc','Dtor','Dtos',
+ 'Dtot','DynamicInputMask','Each','Edit','Eject','Elif',
+ 'End','Eof','Erase','Evaluate','Event','Eventtracking',
+ 'Exclude','Exclusive','Exit','Exp','Export','External',
+ 'FDate','FTime','Fchsize','Fclose','Fcount','Fcreate',
+ 'Feof','Ferror','FetchMemo','FetchSize','Fflush','Fgets',
+ 'Filer','Filetostr','Find','Fklabel','Fkmax','Fldlist',
+ 'Flock','Floor','Flush','Fontmetric','Fopen','Forceext',
+ 'Forcepath','FormSetClass','FormSetLib','FormsClass','FormsLib','Found',
+ 'FoxPro','Foxcode','Foxdoc','Foxgen','Foxgraph','Foxview',
+ 'Fputs','Fread','French','Fseek','Fsize','Fv',
+ 'Fwrite','Gather','German','GetPem','Getbar','Getcolor',
+ 'Getcp','Getdir','Getenv','Getexpr','Getfile','Getfldstate',
+ 'Getfont','Gethost','Getnextmodified','Getobject','Getpad','Getpict',
+ 'Getprinter','Go','Gomonth','Goto','Graph','GridHorz',
+ 'GridShow','GridShowPos','GridSnap','GridVert','Help','HelpOn',
+ 'HelpTo','HighLightRow','Home','Hour','IMEStatus','IdleTimeOut',
+ 'Idxcollate','Ifdef','Ifndef','Iif','Import','Include',
+ 'Indbc','Index','Indexseek','Inkey','Inlist','Input',
+ 'Insert','InsertTrigger','Insmode','IsBlank','IsFLocked','IsLeadByte',
+ 'IsMouse','IsNull','IsRLocked','Isalpha','Iscolor','Isdigit',
+ 'Isexclusive','Isflocked','Ishosted','Islower','Isreadonly','Isrlocked',
+ 'Isupper','Italian','Japan','Join','Justdrive','Justext',
+ 'Justfname','Justpath','Juststem','KeyField','KeyFieldList','Keyboard'
+ ),
+ 2 => array('Keymatch','LastProject','Lastkey','Lcase','Leftc','Len',
+ 'Lenc','Length','Likec','Lineno','LoadPicture','Loadpicture',
+ 'Locate','Locfile','Log','Log10','Logout','Lookup',
+ 'Loop','Lower','Ltrim','Lupdate','Mail','MaxRecords',
+ 'Mcol','Md','Mdown','Mdx','Mdy','Memlines',
+ 'Menu','Messagebox','Minute','Mkdir','Mline','Modify',
+ 'Month','Monthname','Mouse','Mrkbar','Mrkpad','Mrow',
+ 'Mtdll','Mton','Mwindow','Native','Ndx','Network',
+ 'NoFilter','Nodefault','Normalize','Note','Now','Ntom',
+ 'NullString','Numlock','Nvl','ODBChdbc','ODBChstmt','OLEDropTextInsertion',
+ 'OLELCid','Objnum','Objref','Objtoclient','Objvar','Occurs',
+ 'Oemtoansi','Oldval','OlePublic','Olereturnerror','On','Open',
+ 'Oracle','Order','Os','Outer','PCount','Pack',
+ 'PacketSize','Padc','Padl','Padr','Payment','Pcol',
+ 'PemStatus','Pi','Pivot','Play','Pop','Popup',
+ 'Power','PrimaryKey','Printstatus','Private','Prmbar','Prmpad',
+ 'ProjectClick','Proper','Prow','Prtinfo','Push','Putfile',
+ 'Pv','Qpr','Quater','QueryTimeOut','Quit','Radians',
+ 'Rand','Rat','Ratc','Ratline','Rd','Rdlevel',
+ 'Read','Readkey','Recall','Reccount','RecentlyUsedFiles','Recno',
+ 'Recsize','Regional','Reindex','RelatedChild','RelatedTable','RelatedTag',
+ 'Remove','Rename','Repeat','Replace','Replicate','Report',
+ 'ResHeight','ResWidth','ResourceOn','ResourceTo','Resources','Restore',
+ 'Resume','Retry','Return','Revertoffline','Rgbscheme','Rightc',
+ 'Rlock','Rmdir','Rollback','Round','Rtod','Rtrim',
+ 'RuleExpression','RuleText','Run','Runscript','Rview','SQLAsynchronous',
+ 'SQLBatchMode','SQLCancel','SQLColumns','SQLConnect','SQLConnectTimeOut','SQLDisconnect',
+ 'SQLDispLogin','SQLDispWarnings','SQLExec','SQLGetProp','SQLIdleTimeOut','SQLMoreResults',
+ 'SQLPrepare','SQLQueryTimeOut','SQLSetProp','SQLTables','SQLTransactions','SQLWaitTime',
+ 'Save','SavePicture','Savepicture','ScaleUnits','Scatter','Scols',
+ 'Scroll','Sec','Second','Seek','Select','SendUpdates',
+ 'Set','SetDefault','Setfldstate','Setup','ShareConnection','ShowOLEControls',
+ 'ShowOLEInsertable','ShowVCXs','Sign','Sin','Size','SizeBox',
+ 'Skpbar','Skppad','Sort','Soundex','SourceName','Sqlcommit',
+ 'Sqll','Sqlrollback','Sqlstringconnect','Sqrt','Srows','StatusBar',
+ 'Store','Str','Strconv','Strtofile','Strtran','Stuff',
+ 'Stuffc','Substr','Substrc','Substring','Sum','Suspend',
+ 'Sys','Sysmetric','TabOrdering','Table','TableRefresh','Tablerevert',
+ 'Tableupdate','TagCount','TagNo','Tan','Target','This',
+ 'Thisform','Thisformset','Timestamp','Timestampdiff','Total','Transactions',
+ 'Transform','Trim','Truncate','Ttoc','Ttod','Txnlevel',
+ 'Txtwidth','Type','Ucase','Undefine','Unlock','Unpack',
+ 'Updatable','UpdatableFieldList','Update','UpdateName','UpdateNameList','UpdateTrigger',
+ 'UpdateType','Updated','Upper','Upsizing','Usa','Use',
+ 'UseMemoSize','Used','Val','Validate','Varread','Vartype',
+ 'Version','VersionLanguage','Wait','WaitTime','Wborder','Wchild',
+ 'Wcols','Week','Wexist','Wfont','WhereType','Windcmd',
+ 'Windhelp','Windmemo','Windmenu','Windmodify','Windquery','Windscreen',
+ 'Windsnip','Windstproc','WizardPrompt','Wlast','Wlcol','Wlrow',
+ 'Wmaximum','Wminimum','Wontop','Woutput','Wparent','Wread',
+ 'Wrows','Wtitle','Wvisible','Year','Zap','_Alignment',
+ '_Asciicols','_Asciirows','_Assist','_Beautify','_Box','_Browser',
+ '_Builder','_Calcmem','_Calcvalue','_Cliptext','_Converter','_Coverage',
+ '_Curobj','_Dblclick','_Diarydate','_Dos','_Foxdoc','_Foxgraph',
+ '_Gallery','_Gengraph','_Genhtml','_Genmenu','_Genpd','_Genscrn',
+ '_Genxtab','_Getexpr','_Include','_Indent','_Lmargin','_Mac',
+ '_Mbr_appnd','_Mbr_cpart','_Mbr_delet','_Mbr_font','_Mbr_goto','_Mbr_grid',
+ '_Mbr_link','_Mbr_mode','_Mbr_mvfld','_Mbr_mvprt','_Mbr_seek','_Mbr_sp100',
+ '_Mbr_sp200','_Mbr_szfld','_Mbrowse','_Mda_appnd','_Mda_avg','_Mda_brow',
+ '_Mda_calc','_Mda_copy','_Mda_count','_Mda_label','_Mda_pack','_Mda_reprt',
+ '_Mda_rindx','_Mda_setup','_Mda_sort','_Mda_sp100','_Mda_sp200','_Mda_sp300',
+ '_Mda_sum','_Mda_total','_Mdata','_Mdiary','_Med_clear','_Med_copy',
+ '_Med_cut','_Med_cvtst','_Med_find','_Med_finda','_Med_goto','_Med_insob',
+ '_Med_link','_Med_obj','_Med_paste','_Med_pref','_Med_pstlk','_Med_redo',
+ '_Med_repl','_Med_repla','_Med_slcta','_Med_sp100','_Med_sp200','_Med_sp300',
+ '_Med_sp400','_Med_sp500','_Med_undo','_Medit','_Mfi_clall','_Mfi_close',
+ '_Mfi_export','_Mfi_import','_Mfi_new','_Mfi_open','_Mfi_pgset','_Mfi_prevu',
+ '_Mfi_print','_Mfi_quit','_Mfi_revrt','_Mfi_savas','_Mfi_save','_Mfi_send',
+ '_Mfi_setup','_Mfi_sp100','_Mfi_sp200','_Mfi_sp300','_Mfi_sp400','_Mfile',
+ '_Mfiler','_Mfirst','_Mlabel','_Mlast','_Mline','_Mmacro',
+ '_Mmbldr','_Mpr_beaut','_Mpr_cancl','_Mpr_compl','_Mpr_do','_Mpr_docum',
+ '_Mpr_formwz','_Mpr_gener','_Mpr_graph','_Mpr_resum','_Mpr_sp100','_Mpr_sp200',
+ '_Mpr_sp300','_Mpr_suspend','_Mprog','_Mproj','_Mrc_appnd','_Mrc_chnge',
+ '_Mrc_cont','_Mrc_delet','_Mrc_goto','_Mrc_locat','_Mrc_recal','_Mrc_repl',
+ '_Mrc_seek','_Mrc_sp100','_Mrc_sp200','_Mrecord','_Mreport','_Mrqbe',
+ '_Mscreen','_Msm_data','_Msm_edit','_Msm_file','_Msm_format','_Msm_prog',
+ '_Msm_recrd','_Msm_systm','_Msm_text','_Msm_tools','_Msm_view','_Msm_windo',
+ '_Mst_about','_Mst_ascii','_Mst_calcu','_Mst_captr','_Mst_dbase','_Mst_diary',
+ '_Mst_filer','_Mst_help','_Mst_hphow','_Mst_hpsch','_Mst_macro','_Mst_office',
+ '_Mst_puzzl','_Mst_sp100','_Mst_sp200','_Mst_sp300','_Mst_specl','_Msysmenu',
+ '_Msystem','_Mtable','_Mtb_appnd','_Mtb_cpart','_Mtb_delet','_Mtb_delrc',
+ '_Mtb_goto','_Mtb_link','_Mtb_mvfld','_Mtb_mvprt','_Mtb_props','_Mtb_recal',
+ '_Mtb_sp100','_Mtb_sp200','_Mtb_sp300','_Mtb_sp400','_Mtb_szfld','_Mwi_arran',
+ '_Mwi_clear','_Mwi_cmd','_Mwi_color','_Mwi_debug','_Mwi_hide','_Mwi_hidea',
+ '_Mwi_min','_Mwi_move','_Mwi_rotat','_Mwi_showa','_Mwi_size','_Mwi_sp100',
+ '_Mwi_sp200','_Mwi_toolb','_Mwi_trace','_Mwi_view','_Mwi_zoom','_Mwindow',
+ '_Mwizards','_Mwz_all','_Mwz_form','_Mwz_foxdoc','_Mwz_import','_Mwz_label',
+ '_Mwz_mail','_Mwz_pivot','_Mwz_query','_Mwz_reprt','_Mwz_setup','_Mwz_table',
+ '_Mwz_upsizing','_Netware','_Oracle','_Padvance','_Pageno','_Pbpage',
+ '_Pcolno','_Pcopies','_Pdparms','_Pdriver','_Pdsetup','_Pecode',
+ '_Peject','_Pepage','_Pform','_Plength','_Plineno','_Ploffset',
+ '_Ppitch','_Pquality','_Pretext','_Pscode','_Pspacing','_Pwait',
+ '_Rmargin','_Runactivedoc','_Samples','_Screen','_Shell','_Spellchk',
+ '_Sqlserver','_Startup','_Tabs','_Tally','_Text','_Throttle',
+ '_Transport','_Triggerlevel','_Unix','_WebDevOnly','_WebMenu','_WebMsftHomePage',
+ '_WebVFPHomePage','_WebVfpOnlineSupport','_Windows','_Wizard','_Wrap','_scctext',
+ '_vfp','Additive','After','Again','Aindent','Alignright',
+ 'All','Alt','Alternate','And','Ansi','Any',
+ 'Aplabout','App','Array','As','Asc','Ascending',
+ 'Ascii','At','Attributes','Automatic','Autosave','Avg',
+ 'Bar','Before','Bell','Between','Bitmap','Blank',
+ 'Blink','Blocksize','Border','Bottom','Brstatus','Bucket',
+ 'Buffers','By','Candidate','Carry','Cascade','Catalog',
+ 'Cdx','Center','Century','Cga','Character','Check',
+ 'Classlib','Clock','Cnt','Codepage','Collate','Color',
+ 'Com1','Com2','Command','Compact','Compatible','Compress',
+ 'Confirm','Connection','Connections','Connstring','Console','Copies',
+ 'Cpcompile','Cpdialog','Csv','Currency','Cycle','Databases',
+ 'Datasource','Date','Db4','Dbc','Dbf','Dbmemo3',
+ 'Debug','Decimals','Defaultsource','Deletetables','Delimited','Delimiters',
+ 'Descending','Design','Development','Device','Dif','Disabled',
+ 'Distinct','Dlls','Dohistory','Dos','Dosmem','Double',
+ 'Driver','Duplex','Echo','Editwork','Ega25','Ega43',
+ 'Ems','Ems64','Encrypt','Encryption','Environment','Escape',
+ 'Events','Exact','Except','Exe','Exists','Expression',
+ 'Extended','F','Fdow','Fetch','Field','Fields',
+ 'File','Files','Fill','Fixed','Float','Foldconst',
+ 'Font','Footer','Force','Foreign','Fox2x','Foxplus',
+ 'Free','Freeze','From','Fullpath','Fw2','Fweek',
+ 'Get','Gets','Global','Group','Grow','Halfheight',
+ 'Having','Heading','Headings','Helpfilter','History','Hmemory',
+ 'Hours','Id','In','Indexes','Information','Instruct',
+ 'Int','Integer','Intensity','Intersect','Into','Is',
+ 'Isometric','Key','Keycolumns','Keycomp','Keyset','Last',
+ 'Ledit','Level','Library','Like','Linked','Lock',
+ 'Logerrors','Long','Lpartition','Mac','Macdesktop','Machelp',
+ 'Mackey','Macros','Mark','Master','Max','Maxmem',
+ 'Mdi','Memlimit','Memory','Memos','Memowidth','Memvar',
+ 'Menus','Messages','Middle','Min','Minimize','Minus',
+ 'Mod','Modal','Module','Mono43','Movers','Multilocks',
+ 'Mvarsiz','Mvcount','N','Near','Negotiate','Noalias',
+ 'Noappend','Noclear','Noclose','Noconsole','Nocptrans','Nodata',
+ 'Nodebug','Nodelete','Nodup','Noedit','Noeject','Noenvironment',
+ 'Nofloat','Nofollow','Nogrow','Noinit','Nolgrid','Nolink',
+ 'Nolock','Nomargin','Nomdi','Nomenu','Nominimize','Nomodify'
+ ),
+ 3 => array('Nomouse','None','Nooptimize','Nooverwrite','Noprojecthook','Noprompt',
+ 'Noread','Norefresh','Norequery','Norgrid','Norm','Normal',
+ 'Nosave','Noshadow','Noshow','Nospace','Not','Notab',
+ 'Notify','Noupdate','Novalidate','Noverify','Nowait','Nowindow',
+ 'Nowrap','Nozoom','Npv','Null','Number','Objects',
+ 'Odometer','Of','Off','Oleobjects','Only','Optimize',
+ 'Or','Orientation','Output','Outshow','Overlay','Overwrite',
+ 'Pad','Palette','Paperlength','Papersize','Paperwidth','Password',
+ 'Path','Pattern','Pause','Pdox','Pdsetup','Pen',
+ 'Pfs','Pixels','Plain','Popups','Precision','Preference',
+ 'Preview','Primary','Printer','Printquality','Procedures','Production',
+ 'Program','Progwork','Project','Prompt','Query','Random',
+ 'Range','Readborder','Readerror','Record','Recover','Redit',
+ 'Reference','References','Relative','Remote','Reprocess','Resource',
+ 'Rest','Restrict','Rgb','Right','Row','Rowset',
+ 'Rpd','Runtime','Safety','Same','Sample','Say',
+ 'Scale','Scheme','Scoreboard','Screen','Sdf','Seconds',
+ 'Selection','Shadows','Shared','Sheet','Shell','Shift',
+ 'Shutdown','Single','Some','Sortwork','Space','Sql',
+ 'Standalone','Status','Std','Step','Sticky','String',
+ 'Structure','Subclass','Summary','Sylk','Sysformats','Sysmenus',
+ 'System','T','Tab','Tables','Talk','Tedit',
+ 'Textmerge','Time','Timeout','Titles','Tmpfiles','To',
+ 'Topic','Transaction','Trap','Trbetween','Trigger','Ttoption',
+ 'Typeahead','Udfparms','Union','Unique','Userid','Users',
+ 'Values','Var','Verb','Vga25','Vga50','Views',
+ 'Volume','Where','Windows','Wk1','Wk3','Wks',
+ 'Workarea','Wp','Wr1','Wrap','Wrk','Xcmdfile',
+ 'Xl5','Xl8','Xls','Y','Yresolution','Zoom',
+ 'Activate','ActivateCell','Add','AddColumn','AddItem','AddListItem',
+ 'AddObject','AddProperty','AddToSCC','AfterBuild','AfterCloseTables','AfterDock',
+ 'AfterRowColChange','BeforeBuild','BeforeDock','BeforeOpenTables','BeforeRowColChange','Box',
+ 'Build','CheckIn','CheckOut','Circle','Clear','ClearData',
+ 'Cleanup','Click','CloneObject','CloseEditor','CloseTables','Cls',
+ 'CommandTargetExec','CommandTargetQueryStas','ContainerRelease','DataToClip','DblClick','Deactivate',
+ 'Delete','DeleteColumn','Deleted','Destroy','DoCmd','Dock',
+ 'DoScroll','DoVerb','DownClick','Drag','DragDrop','DragOver',
+ 'DropDown','Draw','EnterFocus','Error','ErrorMessage','Eval',
+ 'ExitFocus','FormatChange','GetData','GetFormat','GetLatestVersion','GoBack',
+ 'GotFocus','GoForward','GridHitTest','Hide','HideDoc','IndexToItemId',
+ 'Init','InteractiveChange','Item','ItemIdToIndex','KeyPress','Line',
+ 'Load','LostFocus','Message','MiddleClick','MouseDown','MouseMove',
+ 'MouseUp','MouseWheel','Move','Moved','NavigateTo','Newobject',
+ 'OLECompleteDrag','OLEDrag','OLEDragDrop','OLEDragOver','OLEGiveFeedback','OLESetData',
+ 'OLEStartDrag','OpenEditor','OpenTables','Paint','Point','Print',
+ 'ProgrammaticChange','PSet','QueryAddFile','QueryModifyFile','QueryRemoveFile','QueryRunFile',
+ 'QueryUnload','RangeHigh','RangeLow','ReadActivate','ReadExpression','ReadDeactivate',
+ 'ReadMethod','ReadShow','ReadValid','ReadWhen','Refresh','Release',
+ 'RemoveFromSCC','RemoveItem','RemoveListItem','RemoveObject','Requery','RequestData',
+ 'Reset','ResetToDefault','Resize','RightClick','SaveAs','SaveAsClass',
+ 'Scrolled','SetAll','SetData','SetFocus','SetFormat','SetMain',
+ 'SetVar','SetViewPort','ShowDoc','ShowWhatsThis','TextHeight','TextWidth',
+ 'Timer','UIEnable','UnDock','UndoCheckOut','Unload','UpClick',
+ 'Valid','WhatsThisMode','When','WriteExpression','WriteMethod','ZOrder',
+ 'ATGetColors','ATListColors','Accelerate','ActiveColumn','ActiveControl','ActiveForm',
+ 'ActiveObjectId','ActivePage','ActiveProject','ActiveRow','AddLineFeeds','Alias',
+ 'Alignment','AllowAddNew','AllowHeaderSizing','AllowResize','AllowRowSizing','AllowTabs',
+ 'AlwaysOnTop','Application','AutoActivate','AutoCenter','AutoCloseTables','AutoIncrement',
+ 'AutoOpenTables','AutoRelease','AutoSize','AutoVerbMenu','AutoYield','AvailNum',
+ 'BackColor','BackStyle','BaseClass','BorderColor','BorderStyle','BorderWidth',
+ 'Bound','BoundColumn','BoundTo','BrowseAlignment','BrowseCellMarg','BrowseDestWidth',
+ 'BufferMode','BufferModeOverride','BuildDateTime','ButtonCount','ButtonIndex','Buttons',
+ 'CLSID','CanAccelerate','CanGetFocus','CanLoseFocus','Cancel','Caption',
+ 'ChildAlias','ChildOrder','Class','ClassLibrary','ClipControls','ClipRect',
+ 'Closable','ColorScheme','ColorSource','ColumnCount','ColumnHeaders','ColumnLines',
+ 'ColumnOrder','ColumnWidths','Columns','Comment','ContinuousScroll','ControlBox',
+ 'ControlCount','ControlIndex','ControlSource','Controls','CurrentControl','CurrentX',
+ 'CurrentY','CursorSource','Curvature','DataSession','DataSessionId','DataSourceObj',
+ 'DataType','Database','DateFormat','DateMark','DefButton','DefButtonOrig',
+ 'DefHeight','DefLeft','DefTop','DefWidth','Default','DefaultFilePath',
+ 'DefineWindows','DeleteMark','Desktop','Dirty','DisabledBackColor','DisabledByEOF',
+ 'DisabledForeColor','DisabledItemBackColor','DisabledItemForeColor','DisabledPicture','DispPageHeight','DispPageWidth',
+ 'DisplayCount','DisplayValue','DoCreate','DockPosition','Docked','DocumentFile',
+ 'DownPicture','DragIcon','DragMode','DragState','DrawMode','DrawStyle',
+ 'DrawWidth','DynamicAlignment','DynamicBackColor','DynamicCurrentControl','DynamicFontBold','DynamicFontItalic',
+ 'DynamicFontName','DynamicFontOutline','DynamicFontShadow','DynamicFontSize','DynamicFontStrikethru','DynamicFontUnderline',
+ 'DynamicForeColor','EditFlags','Enabled','EnabledByReadLock','Encrypted','EnvLevel',
+ 'ErasePage','FileClass','FileClassLibrary','FillColor','FillStyle','Filter',
+ 'FirstElement','FontBold','FontItalic','FontName','FontOutline','FontShadow',
+ 'FontSize','FontStrikethru','FontUnderline','ForceFocus','ForeColor','FormCount',
+ 'FormIndex','FormPageCount','FormPageIndex','Format','Forms','FoxFont',
+ 'FullName','GoFirst','GoLast','GridLineColor','GridLineWidth','GridLines'
+ ),
+ 4 => array('HPROJ','HWnd','HalfHeightCaption','HasClip','HeaderGap','HeaderHeight',
+ 'Height','HelpContextID','HideSelection','Highlight','HomeDir','HostName',
+ 'HotKey','HscrollSmallChange','IMEMode','Icon','IgnoreInsert','InResize',
+ 'Increment','IncrementalSearch','InitialSelectedAlias','InputMask','Instancing','IntegralHeight',
+ 'Interval','ItemBackColor','ItemData','ItemForeColor','ItemIDData','ItemTips',
+ 'JustReadLocked','KeyPreview','KeyboardHighValue','KeyboardLowValue','LastModified','Left',
+ 'LeftColumn','LineSlant','LinkMaster','List','ListCount','ListIndex',
+ 'ListItem','ListItemId','LockDataSource','LockScreen','MDIForm','MainClass',
+ 'MainFile','Margin','MaxButton','MaxHeight','MaxLeft','MaxLength',
+ 'MaxTop','MaxWidth','MemoWindow','MinButton','MinHeight','MinWidth',
+ 'MouseIcon','MousePointer','Movable','MoverBars','MultiSelect','Name',
+ 'NapTime','NewIndex','NewItemId','NoDataOnLoad','NoDefine','NotifyContainer',
+ 'NullDisplay','NumberOfElements','OLEDragMode','OLEDragPicture','OLEDropEffects','OLEDropHasData',
+ 'OLEDropMode','OLERequestPendingTimeOut','OLEServerBusyRaiseError','OLEServerBusyTimeOut','OLETypeAllowed','OleClass',
+ 'OleClassId','OleControlContainer','OleIDispInValue','OleIDispOutValue','OleIDispatchIncoming','OleIDispatchOutgoing',
+ 'OnResize','OneToMany','OpenViews','OpenWindow','PageCount','PageHeight',
+ 'PageOrder','PageWidth','Pages','Panel','PanelLink','Parent',
+ 'ParentAlias','ParentClass','Partition','PasswordChar','Picture','ProcessID',
+ 'ProgID','ProjectHookClass','ProjectHookLibrary','Projects','ReadColors','ReadCycle',
+ 'ReadFiller','ReadLock','ReadMouse','ReadOnly','ReadSave','ReadSize',
+ 'ReadTimeout','RecordMark','RecordSource','RecordSourceType','Rect','RelationalExpr',
+ 'RelativeColumn','RelativeRow','ReleaseErase','ReleaseType','ReleaseWindows','Resizable',
+ 'RightToLeft','RowHeight','RowSource','RowSourceType','SCCProvider','SCCStatus',
+ 'SDIForm','ScaleMode','ScrollBars','SelLength','SelStart','SelText',
+ 'SelectOnEntry','Selected','SelectedBackColor','SelectedForeColor','SelectedID','SelectedItemBackColor',
+ 'SelectedItemForeColor','SelfEdit','ServerClass','ServerClassLibrary','ServerHelpFile','ServerName',
+ 'ServerProject','ShowTips','ShowWindow','Sizable','Size<height>','Size<maxlength>',
+ 'Size<width>','Skip','SkipForm','Sorted','SourceType','Sparse',
+ 'SpecialEffect','SpinnerHighValue','SpinnerLowValue','SplitBar','StartMode','StatusBarText',
+ 'Stretch','StrictDateEntry','Style','SystemRefCount','TabIndex','TabStop',
+ 'TabStretch','TabStyle','Tabhit','Tabs','Tag','TerminateRead',
+ 'ThreadID','TitleBar','ToolTipText','Top','TopIndex','TopItemId',
+ 'TypeLibCLSID','TypeLibDesc','TypeLibName','UnlockDataSource','Value','ValueDirty',
+ 'VersionComments','VersionCompany','VersionCopyright','VersionDescription','VersionNumber','VersionProduct',
+ 'VersionTrademarks','View','ViewPortHeight','ViewPortLeft','ViewPortTop','ViewPortWidth',
+ 'Visible','VscrollSmallChange','WasActive','WasOpen','WhatsThisButton','WhatsThisHelp',
+ 'WhatsThisHelpID','Width','WindowList','WindowNTIList','WindowState','WindowType',
+ 'WordWrap','ZOrderSet','ActiveDoc','Checkbox','Column','ComboBox',
+ 'CommandButton','CommandGroup','Container','Control','Cursor','Custom',
+ 'DataEnvironment','EditBox','Empty','FontClass','Form','Formset',
+ 'General','Grid','Header','HyperLink','Image','Label',
+ 'ListBox','Memo','OleBaseControl','OleBoundControl','OleClassIDispOut','OleControl',
+ 'OptionButton','OptionGroup','Page','PageFrame','ProjectHook','RectClass',
+ 'Relation','Session','Shape','Spinner','TextBox' ,'Toolbar'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ "!", "@", "$", "%",
+ "(", ")", "{", "}", "[", "]",
+ "-", "+", "*", "/",
+ "=", "<", ">",
+ ":", ";", ",", ".", "&",
+ "?", "??", "???"
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: blue;',
+ 2 => 'color: blue;',
+ 3 => 'color: blue;',
+ 4 => 'color: blue;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: green; font-style: italic;',
+ 2 => 'color: green; font-style: italic;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: blue;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: blue;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php
new file mode 100644
index 000000000..19eab2de6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php
@@ -0,0 +1,129 @@
+<?php
+/*************************************************************************************
+ * visualprolog.php
+ * ----------
+ * Author: Thomas Linder Puls (puls@pdc.dk)
+ * Copyright: (c) 2008 Thomas Linder Puls (puls@pdc.dk)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/11/20
+ *
+ * Visual Prolog language file for GeSHi.
+ *
+ * CHANGES
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Visual Prolog',
+ 'COMMENT_SINGLE' => array(1 => '%'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'HARDQUOTE' => array('@"', '"'),
+ 'HARDESCAPE' => array('""'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'clauses','constants','constructors','delegate','domains','facts',
+ 'goal','guards','inherits','monitor','namespace','open',
+ 'predicates','properties','resolve','supports'
+ ),
+ 2 => array(
+ 'align','and','anyflow','as','bitsize','catch','determ','digits',
+ 'div','do','else','elseif','erroneous','externally','failure',
+ 'finally','from','language','mod','multi','nondeterm','or',
+ 'procedure','quot','rem','single','then','to'
+ ),
+ 3 => array(
+ '#bininclude','#else','#elseif','#endif','#error','#export',
+ '#externally','#if','#import','#include','#message','#options',
+ '#orrequires','#requires','#then','#warning'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '+', '-', '*', '?', '=', '/', '>', '<', '^', '!', ':', '(', ')', '{', '}', '[', ']'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => true,
+ 1 => true,
+ 2 => true,
+ 3 => true
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #808000;',
+ 2 => 'color: #333399;',
+ 3 => 'color: #800080;',
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #AA77BD',
+ 'MULTI' => 'color: #AA77BD'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #008080;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #00B7B7;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #0000FF;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #008000;',
+ 1 => 'color: #808000;',
+ 2 => 'color: #333399;',
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => ':',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ 0 => "(?<![a-zA-Z0-9_])(?!(?:PIPE|SEMI)>)[A-Z_]\w*(?!\w)",
+ 1 => "\\b(end\\s+)?(implement|class|interface)\\b",
+ 2 => "\\b(end\\s+)?(foreach|if|try)\\b",
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php
new file mode 100644
index 000000000..59bbdb8e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php
@@ -0,0 +1,121 @@
+<?php
+/*************************************************************************************
+ * whitespace.php
+ * ----------
+ * Author: Benny Baumann (BenBE@geshi.org)
+ * Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2009/10/31
+ *
+ * Whitespace language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/10/31 (1.0.8.1)
+ * - First Release
+ *
+ * TODO
+ * ----
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+$language_data = array (
+ 'LANG_NAME' => 'Whitespace',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ 3 => "/[^\n\x20\x09]+/s"
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_UPPER,
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ 3 => 'color: #666666; font-style: italic;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'SCRIPT' => array(
+ ),
+ 'REGEXPS' => array(
+ 2 => 'background-color: #FF9999;',
+ 3 => 'background-color: #9999FF;'
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 2 => array(
+ GESHI_SEARCH => "(?<!\\A)\x20",
+ GESHI_REPLACE => "&#32;",
+ GESHI_MODIFIERS => 's',
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ 3 => array(
+ GESHI_SEARCH => "\x09",
+ GESHI_REPLACE => "&#9;",
+ GESHI_MODIFIERS => 's',
+ GESHI_BEFORE => "",
+ GESHI_AFTER => ""
+ ),
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4,
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'KEYWORDS' => GESHI_NEVER,
+ 'SYMBOLS' => GESHI_NEVER,
+ 'STRINGS' => GESHI_NEVER,
+// 'REGEXPS' => GESHI_NEVER,
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php
new file mode 100644
index 000000000..e86b03636
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php
@@ -0,0 +1,369 @@
+<?php
+/*************************************************************************************
+ * winbatch.php
+ * ------------
+ * Author: Craig Storey (storey.craig@gmail.com)
+ * Copyright: (c) 2004 Craig Storey (craig.xcottawa.ca)
+ * Release Version: 1.0.8.4
+ * Date Started: 2006/05/19
+ *
+ * WinBatch language file for GeSHi.
+ *
+ * WinBatch is a Windows scripting language - www.winbatch.com.
+ * The keywords were pulled from the winbatch/system/WIL.clr file for v2005G.
+ * Not all extender functions are added, but a very large set of the most common.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2006/05/05 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/07/14)
+ * -------------------------
+ * - Right now any ':Subroutine' is treated as a comment. This highlights the
+ * Subroutine's name, but it's not a perfect fix. I should use a RegEx in
+ * GeSHI_Search&Replace features..
+ * - Update the list of extender functions.
+ * - Use a regular expression to comment UDFs that start with 'udf_'.
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Winbatch',
+ 'COMMENT_SINGLE' => array(1 => ';', 2 => ':'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"', '`'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 1 => array(
+ 'While', 'To', 'Then', 'Switch', 'Select', 'Return', 'Next', 'IntControl', 'Include', 'In', 'If',
+ 'Goto', 'GoSub', 'ForEach', 'For', 'Exit', 'Execute', 'ErrorMode', 'EndWhile', 'EndSwitch', '#EndSubRoutine',
+ 'EndSelect', 'EndIf', '#EEndFunction', 'EndFor', 'End', 'Else', 'DropWild', 'Drop', '#DefineSubRoutine',
+ '#DefineFunction', 'Debug', 'Continue', 'Case', 'CallExt', 'Call', 'By', 'BreakPoint', 'Break'
+ ),
+ 2 => array(
+ 'ZOOMED', 'YES', 'WORD4', 'WORD2', 'WORD1', 'WHOLESECTION', 'WAIT', 'UNSORTED', 'UNCHECK', 'TRUE', 'TILE',
+ 'TAB', 'STRING', 'STACK', 'SPC2NET', 'SORTED', 'SOK', 'SNET2PC', 'SINGLE', 'SHIFT', 'SERVER', 'SERRWINSOCK',
+ 'SERRVOICE', 'SERRSOCKET', 'SERRSERVICE', 'SERRSELECT', 'SERRPARAM', 'SERROUTOFMEM', 'SERRNOTFOUND', 'SERRNOCONN',
+ 'SERRNOANSWER', 'SERRMUSTWAIT', 'SERRIPADDR', 'SERRHOSTNAME', 'SERRFAILURE', 'SERRBUSY', 'SCROLLLOCK', 'SCANCEL',
+ 'SAVE', 'SALREADY', 'ROWS', 'REGUSERS', 'REGROOT', 'REGMACHINE', 'REGCURRENT', 'REGCLASSES', 'RDBLCLICK', 'RCLICK',
+ 'RBUTTON', 'RAD2DEG', 'QSUCCESSINFO', 'QSUCCESS', 'QSTILLEX', 'QROLLBACK', 'QNULL', 'QNODATA', 'QNEXT', 'QNEEDDATA',
+ 'QFIRST', 'QCOMMIT', 'QBADHANDLE', 'PRINTER', 'PLANCKJOULES', 'PLANCKERGS', 'PI', 'PARSEONLY', 'PARSEC', 'P3ERRREPLY',
+ 'OPEN', 'ON', 'OFF', 'NUMLOCK', 'NOWAIT', 'NOTIFY', 'NORMAL', 'NORESIZE', 'NONE', 'NO', 'NCSAFORMAT', 'MULTIPLE',
+ 'MSFORMAT', 'MPLAYRDBLCK', 'MPLAYRCLK', 'MPLAYRBUTTON', 'MPLAYMDBLCK', 'MPLAYMCLK', 'MPLAYMBUTTON', 'MPLAYLDBLCK',
+ 'MPLAYLCLK', 'MPLAYLBUTTON', 'MINOR', 'MDBLCLICK', 'MCLICK', 'MBYESNO', 'MBUTTON', 'MBOKCANCEL', 'MAJOR', 'MAGFIELD',
+ 'LOCALGROUP', 'LIGHTMTPS', 'LIGHTMPS', 'LF', 'LDBLCLICK', 'LCLICK', 'LBUTTON', 'LAFFDBERROR', 'ICON', 'HTTPS', 'HTTP',
+ 'HNOHEADER', 'HMETHODPOST', 'HMETHODGET', 'HIDDEN', 'HHEADERONLY', 'HHEADER', 'GRAVITATION', 'GOPHER', 'GOLDENRATIO',
+ 'GMTSEC', 'GLOBALGROUP', 'GFTSEC', 'GETPROCID', 'GETEXITCODE', 'FWDSCAN', 'FTPPASSIVE', 'FTP', 'FLOAT8', 'FARADAY',
+ 'FALSE', 'EXTENDED', 'EULERS', 'ENABLE', 'ELECTRIC', 'DRIVE', 'DISABLE', 'DESCENDING', 'DEG2RAD', 'DEFAULT', 'CTRL',
+ 'CRLF', 'CR', 'COMMONFORMAT', 'COLUMNS', 'CHECK', 'CAPSLOCK', 'CANCEL', 'BOLTZMANN', 'BACKSCAN', 'AVOGADRO', 'ATTR_X',
+ 'ATTR_T', 'ATTR_SY', 'ATTR_SH', 'ATTR_RO', 'ATTR_RI', 'ATTR_P', 'ATTR_IC', 'ATTR_H', 'ATTR_DM', 'ATTR_DI', 'ATTR_DC',
+ 'ATTR_CI', 'ATTR_A', 'ASCENDING', 'ARRANGE', 'AMC', 'ACC_WRITE', 'ACC_READ_NT', 'ACC_READ_95', 'ACC_READ', 'ACC_PRINT_NT',
+ 'ACC_PMANG_NT', 'ACC_PFULL_NT', 'ACC_LIST', 'ACC_FULL_NT', 'ACC_FULL_95', 'ACC_DELETE', 'ACC_CREATE', 'ACC_CONTROL',
+ 'ACC_CHNG_NT', 'ACC_ATTRIB', 'ABOVEICONS'
+ ),
+ 3 => array(
+ 'Yields', 'Yield', 'WinZoom', 'WinWaitExist', 'WinWaitClose', 'WinWaitChild', 'WinVersion', 'WinTitle', 'WinSysInfo',
+ 'WinState', 'WinShow', 'WinResources', 'WinPositionChild', 'WinPosition', 'WinPlaceSet', 'WinPlaceGet', 'WinPlaceChild',
+ 'WinPlace', 'WinParmSet', 'WinParmGet', 'WinName', 'WinMetrics', 'WinItemProcId', 'WinItemNameId', 'WinItemizeEx',
+ 'WinItemize', 'WinItemChild', 'WinIsDos', 'WinIdGet', 'WinIconize', 'WinHide', 'WinHelp', 'WinGetactive', 'WinExistchild',
+ 'WinExist', 'WinExename', 'WinConfig', 'WinClosenot', 'WinClose', 'WinArrange', 'WinActivechild', 'WinActivchild',
+ 'WinActivate', 'WebVerifyCard', 'WebSetTimeout', 'WebParamSize', 'WebParamNames', 'WebParamFile', 'WebParamData',
+ 'WebParamBuf', 'WebOutFile', 'WebOutBinary', 'WebOut', 'WebDumpError', 'WebDatData', 'WebCounter', 'WebConSize', 'WebConData',
+ 'WebConBuf', 'WebCmdData', 'WebBaseConv', 'Wallpaper', 'WaitForKeyEX', 'WaitForKey', 'VersionDLL', 'Version', 'VarType',
+ 'TimeYmdHms', 'TimeWait', 'TimeSubtract', 'TimeJulToYmd', 'TimeJulianDay', 'TimeDiffSecs', 'TimeDiffDays', 'TimeDiff', 'TimeDelay',
+ 'TimeDate', 'TimeAdd', 'TextSelect', 'TextBoxSort', 'TextBox', 'Terminate', 'Tanh', 'Tan', 'SysParamInfo', 'SvcWaitForCmd',
+ 'SvcSetState', 'SvcSetAccept', 'StrUpper', 'StrTrim', 'StrSubWild', 'StrSub', 'StrScan', 'StrReplace', 'StrLower', 'StrLenWild',
+ 'StrLen', 'StrIndexWild', 'StrIndexNC', 'StrIndex', 'StriCmp', 'StrFixLeft', 'StrFixCharsL', 'StrFixChars', 'StrFix', 'StrFill',
+ 'StrCnt', 'StrCmp', 'StrClean', 'StrCharCount', 'StrCat', 'StrByteCount', 'Sqrt', 'SoundVolume', 'Sounds', 'Snapshot', 'Sinh', 'Sin',
+ 'ShortCutMake', 'ShortCutInfo', 'ShortCutExtra', 'ShortCutEdit', 'ShortCutDir', 'ShellExecute', 'SendMenusToEx', 'SendMenusTo',
+ 'SendKeysTo', 'SendKeysChild', 'SendKey', 'RunZoomWait', 'RunZoom', 'RunWithLogon', 'RunWait', 'RunShell', 'RunIconWait',
+ 'RunIcon', 'RunHideWait', 'RunHide', 'RunExit', 'RunEnviron', 'Run', 'RtStatus', 'Reload', 'RegUnloadHive', 'RegSetValue',
+ 'RegSetQword', 'RegSetMulSz', 'RegSetExpSz', 'RegSetEx', 'RegSetDword', 'RegSetBin', 'RegQueryValue', 'RegQueryStr',
+ 'RegQueryQword', 'RegQueryMulSz', 'RegQueryKeys', 'RegQueryKeyLastWriteTime', 'RegQueryKey', 'RegQueryItem', 'RegQueryExpSz',
+ 'RegQueryEx', 'RegQueryDword', 'RegQueryBin', 'RegOpenKeyEx', 'RegOpenKey', 'RegOpenFlags', 'RegLoadHive', 'RegExistValue',
+ 'RegExistKey', 'RegEntryType', 'RegDelValue', 'RegDeleteKey', 'RegCreateKey', 'RegConnect', 'RegCloseKey', 'RegApp', 'Random',
+ 'PtrPersistent', 'PtrGlobalDefine', 'PtrGlobal', 'Print', 'PlayWaveform', 'PlayMidi', 'PlayMedia', 'PipeServerWrite', 'PipeServerRead',
+ 'PipeServerCreate', 'PipeServerClose', 'PipeInfo', 'PipeClientSendRecvData', 'PipeClientOpen', 'PipeClientClose', 'Pause',
+ 'ParseData', 'ObjectTypeGet', 'ObjectType', 'ObjectOpen', 'ObjectGet', 'ObjectEventRemove', 'objecteventremove', 'ObjectEventAdd',
+ 'objecteventadd', 'ObjectCreate', 'ObjectConstToArray', 'ObjectConstantsGet', 'ObjectCollectionOpen', 'ObjectCollectionNext',
+ 'ObjectCollectionClose', 'ObjectClose', 'ObjectAccess', 'Num2Char', 'NetInfo', 'MsgTextGet', 'MousePlay', 'MouseMove', 'MouseInfo',
+ 'MouseDrag', 'MouseCoords', 'MouseClickBtn', 'MouseClick', 'mod', 'Min', 'Message', 'Max', 'Loge', 'LogDisk', 'Log10', 'LastError',
+ 'KeyToggleSet', 'KeyToggleGet', 'ItemSortNc', 'ItemSort', 'ItemSelect', 'ItemReplace', 'ItemRemove', 'ItemLocate', 'ItemInsert',
+ 'ItemExtractCSV', 'ItemExtract', 'ItemCountCSV', 'ItemCount', 'IsNumber', 'IsLicensed', 'IsKeyDown', 'IsInt', 'IsFloat', 'IsDefined',
+ 'Int', 'InstallFile', 'IniWritePvt', 'IniWrite', 'IniReadPvt', 'IniRead', 'IniItemizePvt', 'IniItemize', 'IniDeletePvt', 'IniDelete',
+ 'IgnoreInput', 'IconReplace', 'IconInfo', 'IconExtract', 'IconArrange', 'GetTickCount', 'GetObject', 'GetExactTime', 'Floor',
+ 'FindWindow', 'FileYmdHms', 'FileWrite', 'FileVerInfo', 'FileTimeTouch', 'FileTimeSetEx', 'FileTimeSet', 'FileTimeGetEx',
+ 'FileTimeGet', 'FileTimeCode', 'FileSizeEx', 'FileSize', 'FileRoot', 'FileRename', 'FileRead', 'FilePutW', 'FilePut', 'FilePath',
+ 'FileOpen', 'FileNameShort', 'FileNameLong', 'FileNameEval2', 'FileNameEval1', 'FileMoveAttr', 'FileMove', 'FileMapName',
+ 'FileLocate', 'FileItemPath', 'FileItemize', 'FileInfoToArray', 'FileGetW', 'FileGet', 'FileFullname', 'FileExtension', 'FileExist',
+ 'FileDelete', 'FileCreateTemp', 'FileCopyAttr', 'FileCopy', 'FileCompare', 'FileClose', 'FileBaseName', 'FileAttrSetEx',
+ 'FileAttrSet', 'FileAttrGetEx', 'FileAttrGet', 'FileAppend', 'Fabs', 'ExtractAttachedFile', 'Exp', 'ExeTypeInfo', 'Exclusive',
+ 'EnvItemize', 'EnvironSet', 'Environment', 'EndSession', 'DosVersion', 'DllLoad', 'DllLastError', 'DllHwnd', 'DllHinst',
+ 'DllFree', 'DllCallCDecl', 'DllCall', 'Display', 'DiskVolinfo', 'DiskSize', 'DiskScan', 'DiskInfo', 'DiskFree', 'DiskExist',
+ 'DirWindows', 'DirSize', 'DirScript', 'DirRename', 'DirRemove', 'DirMake', 'DirItemize', 'DirInfoToArray', 'DirHome', 'DirGet',
+ 'DirExist', 'DirChange', 'DirAttrSetEx', 'DirAttrSet', 'DirAttrGetEx', 'DirAttrGet', 'DialogProcOptions', 'DialogObject',
+ 'DialogControlState', 'DialogControlSet', 'DialogControlGet', 'DialogBox', 'Dialog', 'Delay', 'Decimals', 'DebugTrace',
+ 'DebugData', 'DDETimeout', 'DDETerminate', 'DDERequest', 'DDEPoke', 'DDEInitiate', 'DDEExecute', 'DateTime', 'CurrFilepath',
+ 'CurrentPath', 'CurrentFile', 'CreateObject', 'Cosh', 'Cos', 'ClipPut', 'ClipHasFormat', 'ClipGetEx', 'ClipGet', 'ClipAppend',
+ 'ChrUnicodeToString', 'ChrUnicodeToHex', 'ChrStringToUnicode', 'ChrSetCodepage', 'ChrHexToUnicode', 'ChrGetCodepage',
+ 'Char2Num', 'Ceiling', 'ButtonNames', 'BoxUpdates', 'BoxTitle', 'BoxTextFont', 'BoxTextColor', 'BoxText', 'BoxShut', 'BoxPen',
+ 'BoxOpen', 'BoxNew', 'BoxMapmode', 'BoxesUp', 'BoxDrawText', 'BoxDrawRect', 'BoxDrawLine', 'BoxDrawCircle', 'BoxDestroy',
+ 'BoxDataTag', 'BoxDataClear', 'BoxColor', 'BoxCaption', 'BoxButtonWait', 'BoxButtonStat', 'BoxButtonKill', 'BoxButtonDraw',
+ 'BoxBitMap', 'BinaryXor', 'BinaryXlate', 'BinaryWriteEx', 'BinaryWrite', 'BinaryTagRepl', 'BinaryTagLen', 'BinaryTagInit',
+ 'BinaryTagIndex', 'BinaryTagFind', 'BinaryTagExtr', 'BinaryStrCnt', 'BinarySort', 'BinaryReplace', 'BinaryReadEx',
+ 'BinaryRead', 'BinaryPokeStrW', 'BinaryPokeStr', 'BinaryPokeHex', 'BinaryPokeFlt', 'BinaryPoke4', 'BinaryPoke2', 'BinaryPoke',
+ 'BinaryPeekStrW', 'BinaryPeekStr', 'BinaryPeekHex', 'BinaryPeekFlt', 'BinaryPeek4', 'BinaryPeek2', 'BinaryPeek', 'BinaryOr',
+ 'BinaryOleType', 'BinaryIndexNc', 'BinaryIndexEx', 'BinaryIndexBin', 'BinaryIndex', 'BinaryIncrFlt', 'BinaryIncr4',
+ 'BinaryIncr2', 'BinaryIncr', 'BinaryHashRec', 'BinaryFree', 'BinaryEodSet', 'BinaryEodGet', 'BinaryCopy', 'BinaryConvert',
+ 'BinaryCompare', 'BinaryClipPut', 'BinaryClipGet', 'BinaryChecksum', 'BinaryBufInfo', 'BinaryAnd', 'BinaryAllocArray',
+ 'BinaryAlloc', 'Beep', 'Average', 'Atan', 'AskYesNo', 'AskTextbox', 'AskPassword', 'AskLine', 'AskItemlist', 'AskFont',
+ 'AskFiletext', 'AskFilename', 'AskDirectory', 'AskColor', 'Asin', 'ArrInitialize', 'ArrInfo', 'ArrDimension',
+ 'Arrayize', 'ArrayFilePutCSV', 'ArrayFilePut', 'ArrayFileGetCSV', 'ArrayFileGet', 'AppWaitClose', 'AppExist', 'AddExtender',
+ 'Acos', 'Abs', 'About'
+ ),
+ 4 => array(
+ 'zZipFiles', 'zVersionInfo', 'zVersion', 'zUnZipFiles', 'zSetPortBit', 'zRPortShift', 'zPortOut', 'zPortIn', 'zNotPortBit',
+ 'zLPortShift', 'zGetPortBit', 'zClrPortBit', 'xVerifyCCard', 'xSendMessage', 'xMessageBox', 'xMemCompact', 'xHex', 'xGetElapsed',
+ 'xGetChildHwnd', 'xExtenderInfo', 'xEnumStreams', 'xEjectMedia', 'xDriveReady', 'xDiskLabelGet', 'xCursorSet', 'xBaseConvert',
+ 'wxPing', 'wxParmSet', 'wxParmGet', 'wxMsgSetHdr', 'wxMsgGetHdr', 'wxMsgGetBody', 'wxHost2Addr', 'wxGetLastErr', 'wxGetInfo',
+ 'wxGetErrDesc', 'wxAddr2Host', 'wtsWaitSystemEvent', 'wtsVersion', 'wtsTerminateProcess', 'wtsShutdownSystem', 'wtsSendMessage',
+ 'wtsQuerySessionInfo', 'wtsProcIdToSessId', 'wtsLogoffSession', 'wtsLastErrMsg', 'wtsIsTSEnabled', 'wtsIsCitrixEnabled',
+ 'wtsGetActiveConsoleSessId', 'wtsEnumSessions', 'wtsEnumProcesses', 'wtsDisconnectSession', 'wnWrkGroups', 'wnVersion', 'wntWtsUserSet',
+ 'wntWtsUserGet', 'wntVersion', 'wntUserSidChk', 'wntUserSetDat', 'wntUserRename', 'wntUserProps', 'wntUserList', 'wntUserInfo',
+ 'wntUserGetDat', 'wntUserFiles', 'wntUserExist', 'wntUserDel', 'wntUserAddDat', 'wntUserAdd', 'wntSvcStatus', 'wntSvcStart',
+ 'wntSvcList', 'wntSvcDelete', 'wntSvcCreate', 'wntSvcControl', 'wntSvcCfgSet', 'wntSvcCfgGet', 'wntShutdown', 'wntShareUsers',
+ 'wntShareSet', 'wntShareList', 'wntShareInfo', 'wntShareDel', 'wntShareAdd', 'wntServiceInf', 'wntServiceAt', 'wntServerType',
+ 'wntServerList', 'wntServerInfo', 'wntSecurityGet', 'wntRunAsUser', 'wntResources2', 'wntResources', 'wntRemoteTime', 'wntRasUserSet',
+ 'wntRasUserGet', 'wntProfileInfo', 'wntProfileDel', 'wntPrivUsers', 'wntPrivList', 'wntPrivGet', 'wntPrivDel', 'wntPrivAdd',
+ 'wntOwnerSet', 'wntOwnerGet', 'wntMemberSet', 'wntMemberLst2', 'wntMemberList', 'wntMemberGrps', 'wntMemberGet', 'wntMemberDel',
+ 'wntLsaPolSet', 'wntLsaPolGet', 'wntListGroups', 'wntLastErrMsg', 'wntGroupRen', 'wntGroupInfo', 'wntGroupEdit', 'wntGroupDel',
+ 'wntGroupAdd', 'wntGetUser', 'wntGetDrive', 'wntGetDc', 'wntGetCon', 'wntFileUsers', 'wntFilesOpen', 'wntFileClose', 'wntEventWrite',
+ 'wntEventLog', 'wntDomainSync', 'wntDirDialog', 'wntDfsList', 'wntDfsGetInfo', 'wntCurrUsers', 'wntChgPswd', 'wntCancelCon',
+ 'wntAuditMod', 'wntAuditList', 'wntAuditGet', 'wntAuditDel', 'wntAuditAdd2', 'wntAuditAdd', 'wntAddPrinter', 'wntAddDrive',
+ 'wntAcctPolSet', 'wntAcctPolGet', 'wntAcctList', 'wntAcctInfo', 'wntAccessMod', 'wntAccessList', 'wntAccessGet', 'wntAccessDel',
+ 'wntaccessadd2', 'wntAccessAdd', 'wnShares', 'wnSharePath', 'wnShareName', 'wnShareCnt', 'wnServers', 'wnRestore', 'wnNetNames',
+ 'wnGetUser', 'wnGetCon', 'wnGetCaps', 'wnDlgShare', 'wnDlgNoShare', 'wnDlgDiscon', 'wnDlgCon4', 'wnDlgCon3', 'wnDlgCon2', 'wnDlgCon',
+ 'wnDlgBrowse', 'wnDialog', 'wnCmptrInfo', 'wnCancelCon', 'wnAddCon', 'WaitSRQ', 'w9xVersion', 'w9xUserSetDat', 'w9xUserRename',
+ 'w9xUserprops', 'w9xUserList', 'w9xUserinfo', 'w9xUserGetDat', 'w9xUserExist', 'w9xUserDel', 'w9xUserAddDat', 'w9xUserAdd', 'w9xShareSet',
+ 'w9xShareInfo', 'w9xShareDel', 'w9xShareAdd', 'w9xServiceAt', 'w9xServerList', 'w9xRemoteTime', 'w9xOwnerGet', 'w9xMemberSet',
+ 'w9xMemberList', 'w9xMemberGrps', 'w9xMemberGet', 'w9xMemberDel', 'w9xListGroups', 'w9xGroupInfo', 'w9xGroupDel', 'w9xGroupAdd',
+ 'w9xGetDC', 'w9xFileUsers', 'w9xAccessList', 'w9xAccessGet', 'w9xAccessDel', 'w9xAccessAdd', 'w95Version', 'w95ShareUsers',
+ 'w95ShareSet', 'w95ShareList', 'w95ShareInfo', 'w95ShareDel', 'w95ShareAdd', 'w95ServiceInf', 'w95ServiceAt', 'w95ServerType',
+ 'w95ServerInfo', 'w95Resources', 'w95GetUser', 'w95GetDrive', 'w95GetCon', 'w95FileUsers', 'w95FileClose', 'w95DirDialog',
+ 'w95CancelCon', 'w95AddPrinter', 'w95AddDrive', 'w95AccessDel', 'w95AccessAdd', 'w3Version', 'w3PrtBrowse', 'w3NetGetUser',
+ 'w3NetDialog', 'w3GetCon', 'w3GetCaps', 'w3DirBrowse', 'w3CancelCon', 'w3AddCon', 'urlGetScheme', 'urlEncode', 'urlDecode',
+ 'tVersion', 'tSetPriority', 'TriggerList', 'Trigger', 'tRemoteConn', 'tOpenProc', 'tListProc', 'tListMod', 'tKillProc', 'tGetProcInfo',
+ 'tGetPriority', 'tGetModInfo', 'tGetLastError', 'tGetData', 'TestSys', 'TestSRQ', 'tCountProc', 'tCompatible', 'tCloseProc',
+ 'tBrowseCntrs', 'sSendString', 'sSendNum', 'sSendLine', 'sSendBinary', 'sRecvNum', 'sRecvLine', 'sRecvBinary', 'SrchVersion',
+ 'SrchNext', 'SrchInit', 'SrchFree', 'sOpen', 'sOK2Send', 'sOK2Recv', 'smtpSendText', 'smtpSendFile', 'sListen', 'SetRWLS',
+ 'SendSetup', 'SendLLO', 'SendList', 'SendIFC', 'SendDataBytes', 'SendCmds', 'Send', 'sConnect', 'sClose', 'SByteOrder32',
+ 'sByteOrder16', 'sAccept', 'rRegVersion', 'rRegSearch', 'ResetSys', 'ReceiveSetup', 'Receive', 'ReadStsByte', 'RcvRespMsg',
+ 'RasVersion', 'RasTypeSize', 'RasRename', 'RasNumCons', 'RasNameValid', 'RasListActCon', 'RasItemize', 'RasHangUp', 'RasGetLastErr',
+ 'RasGetConStat', 'RasEntrySet', 'RasEntryInfo', 'RasEntryExist', 'RasEntryDel', 'RasEntryAdd', 'RasDialInfo', 'RasDial',
+ 'RasCopy', 'RasConStatus', 'qVersionInfo', 'qTransact', 'qTables', 'qSpecial', 'qSetConnOpt', 'qNumRsltCol', 'qNativeSql', 'qLastCode',
+ 'qGetData', 'qFreeStmt', 'qFreeEnv', 'qFreeConnect', 'qFetch', 'qExecDirect', 'qError', 'qDriverList', 'qDriverCon', 'qDisconnect',
+ 'qDataSources', 'qConnect', 'qConfigError', 'qConfigData', 'qColumns', 'qBindCol', 'qAllocStmt', 'qAllocEnv', 'qAllocConnect',
+ 'pWaitFor', 'pVersionInfo', 'pTimeout', 'pSetPublish', 'pSetPrtInfo', 'pSetPrtAttrib', 'pSetDefPrtEx', 'pSetDefPrt', 'pSendFile',
+ 'pRecvFile', 'pPutString', 'pPutLine', 'pPutChar', 'pPutByte', 'pPutBinary', 'PPollUnconfig', 'PPollConfig', 'PPoll', 'pPeekChar',
+ 'pPeekByte', 'pPaperSizes', 'pPaperBins', 'pModemSReg', 'pModemParams', 'pModemInit', 'pModemHangUp', 'pModemDial', 'pModemControl',
+ 'pModemConnect', 'pModemCommand', 'pModemAnsRing', 'pModemAnsCall', 'pMediaTypes', 'pGetString', 'pGetPublish', 'pGetPrtList',
+ 'pGetPrtInfo', 'pGetPrtAttrib', 'pGetLine', 'pGetLastError', 'pGetErrorMsg', 'pGetErrorCode', 'pGetDefPrtInf', 'pGetChar',
+ 'pGetByte', 'pGetBinary', 'pDelPrtConn', 'pDelPrinter', 'pComOpen', 'pComModify', 'pComInfo', 'pComControl', 'pComClose',
+ 'pCheckSum', 'pCheckBinary', 'pCaptureOn', 'pCaptureOff', 'pCaptureLog', 'PassControl', 'pAddPrtConn', 'pAddPrinter', 'p3RecvText',
+ 'p3RecvFile', 'p3Peek', 'p3Open', 'p3GetReply', 'p3Delete', 'p3Count', 'p3Close', 'nwWhoAmI', 'nwVfyPassword', 'nwVersion',
+ 'nwSrvShutdown', 'nwSrvNLMMgr', 'nwSrvGenGUID', 'nwSrvExecNCF', 'nwSetVolLimit', 'nwSetSrvParam', 'nwSetSrvInfo', 'nwSetPrimServ',
+ 'nwSetPassword', 'nwSetOptions', 'nwSetFileInfo', 'nwSetDirLimit', 'nwSetDirInfo', 'nwSetContext', 'nwSetBcastMode', 'nwServerList',
+ 'nwSendBcastMsg', 'nwSearchObjects', 'nwSearchFilter', 'nwRenameObject', 'nwRemoveObject', 'nwReceiveBcastMsg', 'nwNameConvert',
+ 'nwMutateObject', 'nwMoveObject', 'nwModifyObject', 'nwMapDelete', 'nwMap', 'nwLogout', 'nwLogin', 'nwListUserGroups',
+ 'nwListObjects', 'nwListGroupMembers', 'nwLastErrMsg', 'nwIsUserInGroup', 'nwGetVolLimit', 'nwGetSrvStats', 'nwGetSrvParam',
+ 'nwGetSrvInfo', 'nwGetSrvCfg', 'nwGetOptions', 'nwGetObjValue', 'nwGetObjInfo', 'nwGetNLMInfo', 'nwGetMapped', 'nwGetFileInfo',
+ 'nwGetDirLimit', 'nwGetDirInfo', 'nwGetContext', 'nwGetConnInfo', 'nwGetCapture', 'nwGetBcastMode', 'nwGetAttrInfo',
+ 'nwDriveStatus', 'nwDrivePath', 'nwDetachFromServer', 'nwDelUserFromGroup', 'nwDelConnNum', 'nwCompareObject', 'nwClientInfo',
+ 'nwChgPassword', 'nwAttachToServer', 'nwAddUserToGroup', 'nwAddObject', 'netVersion', 'netResources', 'netGetUser', 'netGetCon',
+ 'netDirDialog', 'netCancelCon', 'netAddPrinter', 'netAddDrive', 'n4Version', 'n4UserGroups', 'n4UserGroupEx', 'n4SetPrimServ',
+ 'n4SetOptions', 'n4SetContextG', 'n4SetContext', 'n4ServerList', 'n4ServerInfo', 'n4ObjSearch', 'n4ObjRename', 'n4ObjOptions',
+ 'n4ObjMove', 'n4ObjGetVal', 'n4ObjectProps', 'n4ObjectList', 'n4ObjectInfo', 'n4ObjDelete', 'n4NameConvert', 'n4MsgsEndAll',
+ 'n4MsgsEnd', 'n4MemberSet', 'n4MemberGet', 'n4MemberDel', 'n4MapRoot', 'n4MapDir', 'n4MapDelete', 'n4Map', 'n4LogoutTree',
+ 'n4Logout', 'n4Login', 'n4GetUserName', 'n4GetUserId', 'n4GetUser', 'n4GetNetAddr', 'n4GetMapped', 'n4GetContext',
+ 'n4GetConnNum', 'n4FileUsers', 'n4FileTimeGet', 'n4FileAttrSet', 'n4FileAttrGet', 'n4DriveStatus', 'n4DrivePath', 'n4DirTimeGet',
+ 'n4DirAttrSet', 'n4DirAttrGet', 'n4Detach', 'n4ChgPassword', 'n4CapturePrt', 'n4CaptureGet', 'n4CaptureEnd', 'n4Attach',
+ 'n3Version', 'n3UserGroups', 'n3ServerList', 'n3ServerInfo', 'n3MsgsEndAll', 'n3MsgsEnd', 'n3MemberSet', 'n3MemberGet',
+ 'n3MemberDel', 'n3Maproot', 'n3Mapdir', 'n3Mapdelete', 'n3Map', 'n3Logout', 'n3GetUserId', 'n3GetUser', 'n3GetNetAddr',
+ 'n3GetMapped', 'n3GetConnNum', 'n3FileTimeGet', 'n3FileAttrSet', 'n3FileAttrGet', 'n3DriveStatus', 'n3DrivePath',
+ 'n3DirTimeGet', 'n3DirAttrSet', 'n3DirAttrGet', 'n3Detach', 'n3ChgPassword', 'n3CapturePrt', 'n3CaptureGet',
+ 'n3CaptureEnd', 'n3Attach', 'mVersion', 'mSyncMail', 'mSendMailEx', 'mSendMail', 'mrecvmail', 'mReadNextMsg', 'mLogOn',
+ 'mLogOff', 'mFindNext', 'mError', 'mCompatible', 'kVerInfo', 'kStatusInfo', 'kSendText', 'kSendFile', 'kManageImap4',
+ 'kInit', 'kGetMail', 'kExtra', 'kDest', 'kDeletePop3', 'iWriteDataBuf', 'iWriteData', 'iVersion', 'IUrlOpen', 'iUrlEncode',
+ 'iUrlDecode', 'iReadDataBuf', 'iReadData', 'ipVersion', 'ipPing', 'iPing', 'ipHost2Addr', 'ipGetLastErr', 'ipGetAddress',
+ 'iParseURL', 'ipAddr2Host', 'iOptionSet', 'iOptionGet', 'ImgWave', 'ImgVersion', 'ImgUnsharpMask', 'ImgThreshold', 'ImgSwirl',
+ 'ImgSpread', 'ImgSolarize', 'ImgShear', 'ImgSharpen', 'ImgShade', 'ImgScale', 'ImgSample', 'ImgRotate', 'ImgResize',
+ 'ImgReduceNoise', 'ImgRaise', 'ImgOilPaint', 'ImgNormalize', 'ImgNegate', 'ImgMotionBlur', 'ImgModulate', 'ImgMinify',
+ 'ImgMedianFilter', 'ImgMagnify', 'ImgLevel', 'ImgIsValid', 'ImgIsPalette', 'ImgIsMono', 'ImgIsGray', 'ImgInfo', 'ImgImplode',
+ 'ImgGetImageType', 'ImgGetColorCount', 'ImgGaussianBlur', 'ImgGamma', 'ImgFrame', 'ImgFlop', 'ImgFlip', 'ImgEqualize',
+ 'ImgEnhance', 'ImgEmboss', 'ImgCrop', 'ImgConvert', 'ImgContrast', 'ImgCompare', 'ImgColorize', 'ImgChop', 'ImgCharcoal',
+ 'ImgBorder', 'ImgBlur', 'ImgAddNoise', 'iLocFindNext', 'iLocFindInit', 'iHttpOpen', 'iHttpInit', 'iHttpHeaders', 'iHttpAccept',
+ 'iHostConnect', 'iHost2Addr', 'iGetResponse', 'iGetLastError', 'iGetIEVer', 'iGetConStatEx', 'iGetConState', 'iFtpRename',
+ 'iFtpPut', 'iFtpOpen', 'iFtpGet', 'iFtpFindNext', 'iFtpFindInit', 'iFtpDirRemove', 'iFtpDirMake', 'iFtpDirGet', 'iFtpDirChange',
+ 'iFtpDialog', 'iFtpDelete', 'iFtpCmd', 'iErrorDialog', 'iDialItemize', 'iDialHangUp', 'iDial', 'iCookieSet', 'iCookieGet',
+ 'iContentURL', 'iContentFile', 'iContentData', 'iClose', 'ibWrtf', 'ibWrt', 'ibWait', 'ibVersion', 'ibUnlock', 'ibTrg',
+ 'ibTmo', 'ibStop', 'ibStatus', 'ibSta', 'ibSre', 'ibSic', 'ibSad', 'ibRsv', 'ibRsp', 'ibRsc', 'ibRpp', 'ibRdf', 'ibRd',
+ 'ibPpc', 'ibPoke', 'ibPct', 'ibPad', 'ibOnl', 'ibMakeAddr', 'ibLock', 'ibLoc', 'ibLn', 'ibLines', 'ibIst', 'ibInit',
+ 'ibGts', 'ibGetSad', 'ibGetPad', 'ibFind', 'ibEvent', 'ibErr', 'ibEot', 'ibEos', 'iBegin', 'ibDma', 'ibDev', 'ibConfig',
+ 'ibCntl', 'ibCnt', 'ibCmda', 'ibCmd', 'ibClr', 'ibCac', 'ibBna', 'ibAsk', 'iAddr2Host', 'huge_Thousands', 'huge_Subtract',
+ 'huge_SetOptions', 'huge_Multiply', 'huge_GetLastError', 'huge_ExtenderInfo', 'huge_Divide', 'huge_Decimal', 'huge_Add',
+ 'httpStripHTML', 'httpRecvTextF', 'httpRecvText', 'httpRecvQuery', 'httpRecvQryF', 'httpRecvFile', 'httpGetServer',
+ 'httpGetQuery', 'httpGetPath', 'httpGetFile', 'httpGetDir', 'httpGetAnchor', 'httpFullPath', 'httpFirewall', 'httpAuth',
+ 'ftpRename', 'ftpQuote', 'ftpPut', 'ftpOpen', 'ftpList', 'ftpGet', 'ftpFirewall', 'ftpDelete', 'ftpClose', 'ftpChDir',
+ 'FindRQS', 'FindLstn', 'EnvSetVar', 'EnvPathDel', 'EnvPathChk', 'EnvPathAdd', 'EnvListVars', 'EnvGetVar', 'EnvGetInfo',
+ 'EnableRemote', 'EnableLocal', 'ehllapiWait', 'ehllapiVersion', 'ehllapiUninit', 'ehllapiStopKeyIntercept', 'ehllapiStopHostNotify',
+ 'ehllapiStopCloseIntercept', 'ehllapiStartKeyIntercept', 'ehllapiStartHostNotify', 'ehllapiStartCloseIntercept',
+ 'ehllapiSetWindowStatus', 'ehllapiSetSessionParams', 'ehllapiSetPSWindowName', 'ehllapiSetCursorLoc', 'ehllapiSendKey',
+ 'ehllapiSendFile', 'ehllapiSearchPS', 'ehllapiSearchField', 'ehllapiRunProfile', 'ehllapiResetSystem', 'ehllapiReserve',
+ 'ehllapiRelease', 'ehllapiReceiveFile', 'ehllapiQuerySystem', 'ehllapiQueryPSStatus', 'ehllapiQueryHostNotify',
+ 'ehllapiQueryFieldAttr', 'ehllapiQueryCursorLoc', 'ehllapiQueryCloseIntercept', 'ehllapiPostInterceptStatus',
+ 'ehllapiPause', 'ehllapiLastErrMsg', 'ehllapiInit', 'ehllapiGetWindowStatus', 'ehllapiGetPSHWND', 'ehllapiGetKey',
+ 'ehllapiFindFieldPos', 'ehllapiFindFieldLen', 'ehllapiDisconnectPS', 'ehllapiCvtRCToPos', 'ehllapiCvtPosToRC',
+ 'ehllapiCopyTextToPS', 'ehllapiCopyTextToField', 'ehllapiCopyTextFromPS', 'ehllapiCopyTextFromField', 'ehllapiCopyOIA',
+ 'ehllapiConnectPS', 'dunItemize', 'dunDisconnect', 'dunConnectEx', 'dunConnect', 'dsTestParam', 'dsSIDtoHexStr', 'dsSetSecProp',
+ 'dsSetProperty', 'dsSetPassword', 'dsSetObj', 'dsSetCredentX', 'dsSetCredent', 'dsRemFromGrp', 'dsRelSecObj', 'dsMoveObj',
+ 'dsIsObject', 'dsIsMemberGrp', 'dsIsContainer', 'dsGetUsersGrps', 'dsGetSecProp', 'dsGetPropName', 'dsGetProperty',
+ 'dsGetPrntPath', 'dsGetPrimGrp', 'dsGetMemGrp', 'dsGetInfo', 'dsGetClass', 'dsGetChldPath', 'dsFindPath', 'dsDeleteObj',
+ 'dsCreatSecObj', 'dsCreateObj', 'dsCopySecObj', 'dsAddToGrp', 'dsAclRemAce', 'dsAclOrderAce', 'dsAclGetAces', 'dsAclAddAce',
+ 'DevClearList', 'DevClear', 'dbTest', 'dbSwapColumns', 'dbSort', 'dbSetRecordField', 'dbSetOptions', 'dbSetErrorReporting',
+ 'dbSetEntireRecord', 'dbSetDelimiter', 'dbSave', 'dbOpen', 'dbNameColumn', 'dbMakeNewItem', 'dbInsertColumn', 'dbGetVersion',
+ 'dbGetSaveStatus', 'dbGetRecordField', 'dbGetRecordCount', 'dbGetNextItem', 'dbGetLastError', 'dbGetEntireRecord',
+ 'dbGetColumnType', 'dbGetColumnNumber', 'dbGetColumnName', 'dbGetColumnCount', 'dbFindRecord', 'dbExist', 'dbEasterEgg',
+ 'dbDeleteRecord', 'dbDeleteColumn', 'dbDebug', 'dbCookDatabases', 'dbClose', 'dbCloneRecord', 'dbBindCol', 'cWndState',
+ 'cWndinfo', 'cWndGetWndSpecName', 'cWndGetWndSpec', 'cWndexist', 'cWndByWndSpecName', 'cWndByWndSpec', 'cWndbyseq',
+ 'cWndbyname', 'cWndbyid', 'cWndbyclass', 'cWinIDConvert', 'cVersionInfo', 'cVendorId', 'cSetWndText', 'cSetUpDownPos',
+ 'cSetTvItem', 'cSetTrackPos', 'cSetTabItem', 'cSetLvItem', 'cSetLbItemEx', 'cSetLbItem', 'cSetIpAddr', 'cSetFocus',
+ 'cSetEditText', 'cSetDtpDate', 'cSetCbItem', 'cSetCalDate', 'cSendMessage', 'cRadioButton', 'cPostMessage', 'cPostButton',
+ 'cMemStat', 'cGetWndCursor', 'cGetUpDownPos', 'cGetUpDownMin', 'cGetUpDownMax', 'cGetTVItem', 'cGetTrackPos', 'cGetTrackMin',
+ 'cGetTrackMax', 'cGetTbText', 'cGetSbText', 'cGetLvText', 'cGetLvSelText', 'cGetLvFocText', 'cGetLvDdtText', 'cGetLvColText',
+ 'cGetLbText', 'cGetLbSelText', 'cGetLbCount', 'cGetIpAddr', 'cGetInfo', 'cGetHrText', 'cGetFocus', 'cGetEditText', 'cGetDtpDate',
+ 'cGetControlImageCRC', 'cGetCBText', 'cGetCbCount', 'cGetCalDate', 'cFindByName', 'cFindByClass', 'cEnablestate', 'cDblClickItem',
+ 'cCpuSupt', 'cCpuSpeed', 'cCpuIdExt', 'cCpuId', 'cCpuFeat', 'cCpuBenchmark', 'cCloneCheck', 'cClickToolbar', 'cClickButton',
+ 'cClearTvItem', 'cClearLvItem', 'cClearLbAll', 'cCheckbox', 'aVersion', 'aStatusbar', 'aShellFolder', 'aMsgTimeout', 'AllSPoll',
+ 'aGetLastError', 'aFileRename', 'aFileMove', 'aFileDelete', 'aFileCopy'
+ ),
+ 5 => array(
+ 'wWordRight', 'wWordLeft', 'wWinTile', 'wWinRestore', 'wWinNext', 'wWinMinimize', 'wWinMaximize', 'wWinCloseAll', 'wWinClose',
+ 'wWinCascade', 'wWinArricons', 'wViewOutput', 'wViewOptions', 'wViewHtml', 'wUpperCase', 'wUpline', 'wUndo', 'wTopOfFile', 'wToggleIns',
+ 'wTab', 'wStatusMsg', 'wStartSel', 'wSpellcheck', 'wSetProject', 'wSetPrefs', 'wSetColblk', 'wSetBookmark', 'wSelWordRight',
+ 'wSelWordLeft', 'wSelUp', 'wSelTop', 'wSelRight', 'wSelPgUp', 'wSelPgDn', 'wSelLeft', 'wSelInfo', 'wSelHome', 'wSelEnd', 'wSelectAll',
+ 'wSelDown', 'wSelBottom', 'wRunRebuild', 'wRunMake', 'wRunExecute', 'wRunDebug', 'wRunConfig', 'wRunCompile', 'wRunCommand', 'wRight',
+ 'wRepeat', 'wRedo', 'wRecord', 'wProperties', 'wPrintDirect', 'wPrinSetup', 'wPrevError', 'wPaste', 'wPageUp', 'wPageDown', 'wNextError',
+ 'wNewLine', 'wLowerCase', 'wLineCount', 'wLeft', 'wInvertCase', 'wInsString', 'wInsLine', 'wHome', 'wHelpKeyword', 'wHelpKeybrd',
+ 'wHelpIndex', 'wHelpHelp', 'wHelpCmds', 'wHelpAbout', 'wGotoLine', 'wGotoCol', 'wGetWrap', 'wGetWord', 'wGetUndo', 'wGetSelstate',
+ 'wGetRedo', 'wGetOutput', 'wGetModified', 'wGetLineNo', 'wGetIns', 'wGetFilename', 'wGetColNo', 'wGetChar', 'wFtpOpen', 'wFindNext',
+ 'wFindInFiles', 'wFind', 'wFileSaveAs', 'wFileSave', 'wFileRevert', 'wFilePrint', 'wFilePgSetup', 'wFileOpen', 'wFileNew', 'wFileMerge',
+ 'wFileList', 'wFileExit', 'wEndSel', 'wEndOfFile', 'wEnd', 'wEdWrap', 'wEdWordRight', 'wEdWordLeft', 'wEdUpLine', 'wEdUndo', 'wEdTopOfFile',
+ 'wEdToggleIns', 'wEdTab', 'wEdStartSel', 'wEdSetColBlk', 'wEdSelectAll', 'wEdRight', 'wEdRedo', 'wEdPaste', 'wEdPageUp', 'wEdPageDown',
+ 'wEdNewLine', 'wEdLeft', 'wEdInsString', 'wEdHome', 'wEdGoToLine', 'wEdGoToCol', 'wEdGetWord', 'wEdEndSel', 'wEdEndOfFile', 'wEdEnd',
+ 'wEdDownLine', 'wEdDelete', 'wEdCutLine', 'wEdCut', 'wEdCopyLine', 'wEdCopy', 'wEdClearSel', 'wEdBackTab', 'wEdBackspace', 'wDownLine',
+ 'wDelete', 'wDelButton', 'wCutMarked', 'wCutLine', 'wCutAppend', 'wCut', 'wCopyMarked', 'wCopyLine', 'wCopyAppend', 'wCopy', 'wCompile',
+ 'wClearSel', 'wChange', 'wCallMacro', 'wBackTab', 'wBackspace', 'wAutoIndent', 'wAddButton', 'edWindowTile', 'edWindowRestore',
+ 'edWindowNext', 'edWindowMinimize', 'edWindowMaximize', 'edWindowCloseall', 'edWindowClose', 'edWindowCascade', 'edWindowArrangeIcons',
+ 'edStatusMsg', 'edSearchViewOutput', 'edSearchRepeat', 'edSearchPrevError', 'edSearchNextError', 'edSearchFind', 'edSearchChange',
+ 'edRunRebuild', 'edRunMake', 'edRunExecute', 'edRunDebug', 'edRunConfigure', 'edRunCompile', 'edRunCommand', 'edRecord', 'edHelpProcedures',
+ 'edHelpKeyword', 'edHelpKeyboard', 'edHelpIndex', 'edHelpHelp', 'edHelpCommands', 'edHelpAbout', 'edGetWordWrapState', 'edGetWindowName',
+ 'edGetUndoState', 'edGetSelectionState', 'edGetRedoState', 'edGetModifiedStatus', 'edGetLineNumber', 'edGetInsertState', 'edGetColumnNumber',
+ 'edGetChar', 'edFileSetPreferences', 'edFileSaveAs', 'edFileSave', 'edFilePrinterSetup', 'edFilePrint', 'edFilePageSetup', 'edFileOpen',
+ 'edFileNew', 'edFileMerge', 'edFileList', 'edFileExit', 'edEditWrap', 'edEditWordRight', 'edEditWordLeft', 'edEditUpLine', 'edEditUndo',
+ 'edEditToggleIns', 'edEditTab', 'edEditStartSelection', 'edEditSetColumnBlock', 'edEditSetBookmark', 'edEditSelectAll', 'edEditRight',
+ 'edEditRedo', 'edEditPaste', 'edEditPageUp', 'edEditPageDown', 'edEditLeft', 'edEditInsertString', 'edEditGoToLine', 'edEditGoToColumn',
+ 'edEditGoToBookmark', 'edEditGetCurrentWord', 'edEditEndSelection', 'edEditEndOfLine', 'edEditEndOfFile', 'edEditDownline', 'edEditDelete',
+ 'edEditCutline', 'edEditCut', 'edEditCopyline', 'edEditCopy', 'edEditClearSelection', 'edEditBeginningOfLine', 'edEditBeginningOfFile',
+ 'edEditBackTab', 'edEditBackspace', 'edDeleteButton', 'edAddButton'
+ )
+ ),
+ 'SYMBOLS' => array(
+ '(', ')', '[', ']', '{', '}', '!', '+', '-', '~', '$', '^', '?', '@', '%', '#', '&', '*', '|', '/', '<', '>'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false,
+ 5 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #800080;',
+ 2 => 'color: #0080FF; font-weight: bold;',
+ 3 => 'color: #0000FF;',
+ 4 => 'color: #FF00FF;',
+ 5 => 'color: #008000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #008000; font-style: italic;',
+ 2 => 'color: #FF1010; font-weight: bold;',
+ 'MULTI' => 'color: #808080; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ 0 => 'color: #006600;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => '',
+ 5 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'REGEXPS' => array(//Variable names
+ 0 => "[\\$]{1,2}[a-zA-Z_][a-zA-Z0-9_]*"
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_MAYBE,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php
new file mode 100644
index 000000000..1222e9fb9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php
@@ -0,0 +1,157 @@
+<?php
+/*************************************************************************************
+ * xml.php
+ * -------
+ * Author: Nigel McNie (nigel@geshi.org)
+ * Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2004/09/01
+ *
+ * XML language file for GeSHi. Based on the idea/file by Christian Weiske
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2005/12/28 (1.0.2)
+ * - Removed escape character for strings
+ * 2004/11/27 (1.0.1)
+ * - Added support for multiple object splitters
+ * 2004/10/27 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2004/11/27)
+ * -------------------------
+ * * Check regexps work and correctly highlight XML stuff and nothing else
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'XML',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #66cc66;'
+ ),
+ 'SCRIPT' => array(
+ -1 => 'color: #808080; font-style: italic;', // comments
+ 0 => 'color: #00bbdd;',
+ 1 => 'color: #ddbb00;',
+ 2 => 'color: #339933;',
+ 3 => 'color: #009900;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #000066;',
+ 1 => 'color: #000000; font-weight: bold;',
+ 2 => 'color: #000000; font-weight: bold;'
+ )
+ ),
+ 'URLS' => array(
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ 0 => array(//attribute names
+ GESHI_SEARCH => '([a-z_:][\w\-\.:]*)(=)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '\\2'
+ ),
+ 1 => array(//Initial header line
+ GESHI_SEARCH => '(&lt;[\/?|(\?xml)]?[a-z_:][\w\-\.:]*(\??&gt;)?)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ 2 => array(//Tag end markers
+ GESHI_SEARCH => '(([\/|\?])?&gt;)',
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'i',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => ''
+ ),
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
+ 'SCRIPT_DELIMITERS' => array(
+ -1 => array(
+ '<!--' => '-->'
+ ),
+ 0 => array(
+ '<!DOCTYPE' => '>'
+ ),
+ 1 => array(
+ '&' => ';'
+ ),
+ 2 => array(
+ '<![CDATA[' => ']]>'
+ ),
+ 3 => array(
+ '<' => '>'
+ )
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ -1 => false,
+ 0 => false,
+ 1 => false,
+ 2 => false,
+ 3 => true
+ ),
+ 'TAB_WIDTH' => 2,
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php
new file mode 100644
index 000000000..c32c460b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php
@@ -0,0 +1,124 @@
+<?php
+/*************************************************************************************
+ * xorg_conf.php
+ * ----------
+ * Author: Milian Wolff (mail@milianw.de)
+ * Copyright: (c) 2008 Milian Wolff (http://milianw.de)
+ * Release Version: 1.0.8.4
+ * Date Started: 2008/06/18
+ *
+ * xorg.conf language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2008/06/18 (1.0.8)
+ * - Initial import
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Xorg configuration',
+ 'COMMENT_SINGLE' => array(1 => '#'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ // sections
+ 1 => array(
+ 'Section', 'EndSection', 'SubSection', 'EndSubSection'
+ ),
+ 2 => array(
+ // see http://www.x.org/archive/X11R6.9.0/doc/html/xorg.conf.5.html
+ 'BiosBase', 'Black', 'Boardname', 'BusID', 'ChipID', 'ChipRev',
+ 'Chipset', 'ClockChip', 'Clocks', 'DacSpeed',
+ 'DefaultDepth', 'DefaultFbBpp', 'Depth', 'Device',
+ 'DisplaySize', 'Driver', 'FbBpp', 'Gamma',
+ 'HorizSync', 'IOBase', 'Identifier', 'InputDevice',
+ 'Load', 'MemBase', 'Mode', 'Modeline', 'Modelname',
+ 'Modes', 'Monitor', 'Option', 'Ramdac', 'RgbPath',
+ 'Screen', 'TextClockFreq', 'UseModes', 'VendorName',
+ 'VertRefresh', 'VideoAdaptor', 'VideoRam',
+ 'ViewPort', 'Virtual', 'Visual', 'Weight', 'White'
+ ),
+ 3 => array(
+ // some sub-keywords
+ // screen position
+ 'Above', 'Absolute', 'Below', 'LeftOf', 'Relative', 'RightOf',
+ // modes
+ 'DotClock', 'Flags', 'HSkew', 'HTimings', 'VScan', 'VTimings'
+ ),
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #b1b100;',
+ 2 => 'color: #990000;',
+ 3 => 'color: #550000;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #0000ff;',
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #cc66cc;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 4
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php
new file mode 100644
index 000000000..db0019dd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php
@@ -0,0 +1,436 @@
+<?php
+/*************************************************************************************
+ * xpp.php
+ * -------
+ * Author: Simon Butcher (simon@butcher.name)
+ * Copyright: (c) 2007 Simon Butcher (http://simon.butcher.name/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/02/27
+ *
+ * Axapta/Dynamics Ax X++ language file for GeSHi.
+ * For details, see <http://msdn.microsoft.com/en-us/library/aa867122.aspx>
+ *
+ * CHANGES
+ * -------
+ * 2007/02/28 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2007/02/27)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'X++',
+ 'COMMENT_SINGLE' => array(1 => '//'),
+ 'COMMENT_MULTI' => array('/*' => '*/'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ 1 => array( // Primitive types
+ 'void',
+ 'str',
+ 'real',
+ 'int64',
+ 'int',
+ 'date',
+ 'container',
+ 'boolean',
+ 'anytype'
+ ),
+ 2 => array( // Keywords
+ 'window',
+ 'while',
+ 'try',
+ 'true',
+ 'throw',
+ 'switch',
+ 'super',
+ 'static',
+ 'server',
+ 'right',
+ 'return',
+ 'retry',
+ 'public',
+ 'protected',
+ 'private',
+ 'print',
+ 'pause',
+ 'null',
+ 'new',
+ 'mod',
+ 'left',
+ 'interface',
+ 'implements',
+ 'if',
+ 'for',
+ 'final',
+ 'false',
+ 'extends',
+ 'else',
+ 'edit',
+ 'do',
+ 'div',
+ 'display',
+ 'default',
+ 'continue',
+ 'client',
+ 'class',
+ 'changeCompany',
+ 'case',
+ 'breakpoint',
+ 'break',
+ 'at',
+ 'abstract'
+ ),
+ 3 => array( // Functions within the Axapta kernel
+ 'year',
+ 'wkofyr',
+ 'webwebpartstr',
+ 'webstaticfilestr',
+ 'websitetempstr',
+ 'websitedefstr',
+ 'webreportstr',
+ 'webpagedefstr',
+ 'weboutputcontentitemstr',
+ 'webmenustr',
+ 'webletitemstr',
+ 'webformstr',
+ 'webdisplaycontentitemstr',
+ 'webactionitemstr',
+ 'varstr',
+ 'utilmoyr',
+ 'uint2str',
+ 'typeof',
+ 'typeid',
+ 'trunc',
+ 'today',
+ 'timenow',
+ 'time2str',
+ 'term',
+ 'tanh',
+ 'tan',
+ 'tablestr',
+ 'tablestaticmethodstr',
+ 'tablepname',
+ 'tablenum',
+ 'tablename2id',
+ 'tablemethodstr',
+ 'tableid2pname',
+ 'tableid2name',
+ 'tablefieldgroupstr',
+ 'tablecollectionstr',
+ 'systemdateset',
+ 'systemdateget',
+ 'syd',
+ 'substr',
+ 'strupr',
+ 'strscan',
+ 'strrtrim',
+ 'strrep',
+ 'strrem',
+ 'strprompt',
+ 'strpoke',
+ 'strnfind',
+ 'strlwr',
+ 'strltrim',
+ 'strline',
+ 'strlen',
+ 'strkeep',
+ 'strins',
+ 'strfmt',
+ 'strfind',
+ 'strdel',
+ 'strcolseq',
+ 'strcmp',
+ 'stralpha',
+ 'str2time',
+ 'str2num',
+ 'str2int64',
+ 'str2int',
+ 'str2guid',
+ 'str2enum',
+ 'str2date',
+ 'staticmethodstr',
+ 'sln',
+ 'sleep',
+ 'sinh',
+ 'sin',
+ 'setprefix',
+ 'sessionid',
+ 'securitykeystr',
+ 'securitykeynum',
+ 'runbuf',
+ 'runas',
+ 'round',
+ 'resourcestr',
+ 'reportstr',
+ 'refprintall',
+ 'rate',
+ 'querystr',
+ 'pv',
+ 'pt',
+ 'prmisdefault',
+ 'primoyr',
+ 'prevyr',
+ 'prevqtr',
+ 'prevmth',
+ 'power',
+ 'pmt',
+ 'num2str',
+ 'num2date',
+ 'num2char',
+ 'nextyr',
+ 'nextqtr',
+ 'nextmth',
+ 'newguid',
+ 'mthofyr',
+ 'mthname',
+ 'mkdate',
+ 'minint',
+ 'min',
+ 'methodstr',
+ 'menustr',
+ 'menuitemoutputstr',
+ 'menuitemdisplaystr',
+ 'menuitemactionstr',
+ 'maxint',
+ 'maxdate',
+ 'max',
+ 'match',
+ 'logn',
+ 'log10',
+ 'literalstr',
+ 'licensecodestr',
+ 'licensecodenum',
+ 'intvnorm',
+ 'intvno',
+ 'intvname',
+ 'intvmax',
+ 'int64str',
+ 'indexstr',
+ 'indexnum',
+ 'indexname2id',
+ 'indexid2name',
+ 'idg',
+ 'identifierstr',
+ 'helpfilestr',
+ 'helpdevstr',
+ 'helpapplstr',
+ 'guid2str',
+ 'getprefix',
+ 'getCurrentUTCTime',
+ 'fv',
+ 'funcname',
+ 'frac',
+ 'formstr',
+ 'fieldstr',
+ 'fieldpname',
+ 'fieldnum',
+ 'fieldname2id',
+ 'fieldid2pname',
+ 'fieldid2name',
+ 'extendedTypeStr',
+ 'extendedTypeNum',
+ 'exp10',
+ 'exp',
+ 'evalbuf',
+ 'enumstr',
+ 'enumnum',
+ 'enumcnt',
+ 'enum2str',
+ 'endmth',
+ 'dimof',
+ 'dg',
+ 'decround',
+ 'ddb',
+ 'dayofyr',
+ 'dayofwk',
+ 'dayofmth',
+ 'dayname',
+ 'date2str',
+ 'date2num',
+ 'curuserid',
+ 'curext',
+ 'cterm',
+ 'cosh',
+ 'cos',
+ 'corrflagset',
+ 'corrflagget',
+ 'convertUTCTimeToLocalTime',
+ 'convertUTCDateToLocalDate',
+ 'conpoke',
+ 'conpeek',
+ 'connull',
+ 'conlen',
+ 'conins',
+ 'confind',
+ 'configurationkeystr',
+ 'configurationkeynum',
+ 'condel',
+ 'classstr',
+ 'classnum',
+ 'classidget',
+ 'char2num',
+ 'beep',
+ 'atan',
+ 'asin',
+ 'ascii2ansi',
+ 'any2str',
+ 'any2real',
+ 'any2int64',
+ 'any2int',
+ 'any2guid',
+ 'any2enum',
+ 'any2date',
+ 'ansi2ascii',
+ 'acos',
+ 'abs'
+ ),
+ 4 => array( // X++ SQL stuff
+ 'where',
+ 'update_recordset',
+ 'ttsCommit',
+ 'ttsBegin',
+ 'ttsAbort',
+ 'sum',
+ 'setting',
+ 'select',
+ 'reverse',
+ 'pessimisticLock',
+ 'outer',
+ 'order by',
+ 'optimisticLock',
+ 'notExists',
+ 'noFetch',
+ 'next',
+ 'minof',
+ 'maxof',
+ 'like',
+ 'join',
+ 'insert_recordset',
+ 'index hint',
+ 'index',
+ 'group by',
+ 'from',
+ 'forUpdate',
+ 'forceSelectOrder',
+ 'forcePlaceholders',
+ 'forceNestedLoop',
+ 'forceLiterals',
+ 'flush',
+ 'firstOnly',
+ 'firstFast',
+ 'exists',
+ 'desc',
+ 'delete_from',
+ 'count',
+ 'avg',
+ 'asc'
+ )
+ ),
+ 'SYMBOLS' => array( // X++ symbols
+ '!',
+ '&',
+ '(',
+ ')',
+ '*',
+ '^',
+ '|',
+ '~',
+ '+',
+ ',',
+ '-',
+ '/',
+ ':',
+ '<',
+ '=',
+ '>',
+ '?',
+ '[',
+ ']',
+ '{',
+ '}'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ 4 => false
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #0000ff;',
+ 4 => 'color: #0000ff;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #007f00;',
+ 'MULTI' => 'color: #007f00; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #ff0000;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #000000;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #000000;',
+ 2 => 'color: #000000;'
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #00007f;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => '',
+ 4 => ''
+ ),
+ 'OOLANG' => true,
+ 'OBJECT_SPLITTERS' => array(
+ 1 => '.',
+ 2 => '::'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php
new file mode 100644
index 000000000..2a9b14886
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php
@@ -0,0 +1,144 @@
+<?php
+/*************************************************************************************
+ * z80.php
+ * -------
+ * Author: Benny Baumann (BenBE@omorphia.de)
+ * Copyright: (c) 2007-2008 Benny Baumann (http://www.omorphia.de/)
+ * Release Version: 1.0.8.4
+ * Date Started: 2007/02/06
+ *
+ * ZiLOG Z80 Assembler language file for GeSHi.
+ * Syntax definition as commonly used with table assembler TASM32
+ * This file will contain some undocumented opcodes.
+ *
+ * CHANGES
+ * -------
+ * 2008/05/23 (1.0.7.22)
+ * - Added description of extra language features (SF#1970248)
+ * 2007/06/03 (1.0.1)
+ * - Fixed two typos in the language file
+ * 2007/02/06 (1.0.0)
+ * - First Release
+ *
+ * TODO (updated 2007/02/06)
+ * -------------------------
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'ZiLOG Z80 Assembler',
+ 'COMMENT_SINGLE' => array(1 => ';'),
+ 'COMMENT_MULTI' => array(),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array("'", '"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ /*CPU*/
+ 1 => array(
+ 'adc','add','and','bit','call','ccf','cp','cpd','cpdr','cpir','cpi',
+ 'cpl','daa','dec','di','djnz','ei','ex','exx','halt','im','in',
+ 'in0','inc','ind','indr','inir','ini','jp','jr','ld','ldd','lddr',
+ 'ldir','ldi','mlt','neg','nop','or','otdm','otdmr','otdr','otim',
+ 'otimr','otir','out','out0','outd','outi','pop','push','res','ret',
+ 'reti','retn','rl','rla','rlc','rlca','rld','rr','rra','rrc','rrca',
+ 'rrd','rst','sbc','scf','set','sla','sl1','sll','slp','sra','srl',
+ 'sub','tst','tstio','xor'
+ ),
+ /*registers*/
+ 2 => array(
+ 'a','b','c','d','e','h','l',
+ 'af','bc','de','hl','ix','iy','sp',
+ 'af\'','ixh','ixl','iyh','iyl'
+ ),
+ /*Directive*/
+ 3 => array(
+ '#define','#endif','#else','#ifdef','#ifndef','#include','#undef',
+ '.db','.dd','.df','.dq','.dt','.dw','.end','.org','equ'
+ ),
+ ),
+ 'SYMBOLS' => array(
+ '[', ']', '(', ')', '?', '+', '-', '*', '/', '%', '$'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => false,
+ 2 => false,
+ 3 => false,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'color: #0000ff; font-weight:bold;',
+ 2 => 'color: #0000ff;',
+ 3 => 'color: #46aa03; font-weight:bold;'
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #adadad; font-style: italic;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'color: #000099; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: #0000ff;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #7f007f;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: #dd22dd;'
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #008000;'
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #22bbff;',
+ 1 => 'color: #22bbff;',
+ 2 => 'color: #993333;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ 1 => '',
+ 2 => '',
+ 3 => ''
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ //Hex numbers
+ 0 => '0[0-9a-fA-F]{1,32}[hH]',
+ //Binary numbers
+ 1 => '\%[01]{1,64}|[01]{1,64}[bB]?',
+ //Labels
+ 2 => '^[_a-zA-Z][_a-zA-Z0-9]?\:'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ ),
+ 'TAB_WIDTH' => 8
+);
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/html.php b/mod/dokuwiki/vendors/dokuwiki/inc/html.php
new file mode 100644
index 000000000..0a23370ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/html.php
@@ -0,0 +1,1608 @@
+<?php
+/**
+ * HTML output functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+if(!defined('NL')) define('NL',"\n");
+require_once(DOKU_INC.'inc/parserutils.php');
+require_once(DOKU_INC.'inc/form.php');
+
+/**
+ * Convenience function to quickly build a wikilink
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_wikilink($id,$name=null,$search=''){
+ static $xhtml_renderer = null;
+ if(is_null($xhtml_renderer)){
+ $xhtml_renderer = p_get_renderer('xhtml');
+ }
+
+ return $xhtml_renderer->internallink($id,$name,$search,true,'navigation');
+}
+
+/**
+ * Helps building long attribute lists
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_attbuild($attributes){
+ $ret = '';
+ foreach ( $attributes as $key => $value ) {
+ $ret .= $key.'="'.formText($value).'" ';
+ }
+ return trim($ret);
+}
+
+/**
+ * The loginform
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_login(){
+ global $lang;
+ global $conf;
+ global $ID;
+ global $auth;
+
+ print p_locale_xhtml('login');
+ print '<div class="centeralign">'.NL;
+ $form = new Doku_Form(array('id' => 'dw__login'));
+ $form->startFieldset($lang['btn_login']);
+ $form->addHidden('id', $ID);
+ $form->addHidden('do', 'login');
+ $form->addElement(form_makeTextField('u', ((!$_REQUEST['http_credentials']) ? $_REQUEST['u'] : ''), $lang['user'], 'focus__this', 'block'));
+ $form->addElement(form_makePasswordField('p', $lang['pass'], '', 'block'));
+ if($conf['rememberme']) {
+ $form->addElement(form_makeCheckboxField('r', '1', $lang['remember'], 'remember__me', 'simple'));
+ }
+ $form->addElement(form_makeButton('submit', '', $lang['btn_login']));
+ $form->endFieldset();
+
+ if($auth && $auth->canDo('addUser') && actionOK('register')){
+ $form->addElement('<p>'
+ . $lang['reghere']
+ . ': <a href="'.wl($ID,'do=register').'" rel="nofollow" class="wikilink1">'.$lang['register'].'</a>'
+ . '</p>');
+ }
+
+ if ($auth && $auth->canDo('modPass') && actionOK('resendpwd')) {
+ $form->addElement('<p>'
+ . $lang['pwdforget']
+ . ': <a href="'.wl($ID,'do=resendpwd').'" rel="nofollow" class="wikilink1">'.$lang['btn_resendpwd'].'</a>'
+ . '</p>');
+ }
+
+ html_form('login', $form);
+ print '</div>'.NL;
+}
+
+/**
+ * prints a section editing button
+ * used as a callback in html_secedit
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_secedit_button($matches){
+ global $ID;
+ global $INFO;
+
+ $section = $matches[2];
+ $name = $matches[1];
+
+ $secedit = '';
+ $secedit .= '<div class="secedit">';
+ $secedit .= html_btn('secedit',$ID,'',
+ array('do' => 'edit',
+ 'lines' => "$section",
+ 'rev' => $INFO['lastmod']),
+ 'post', $name);
+ $secedit .= '</div>';
+ return $secedit;
+}
+
+/**
+ * inserts section edit buttons if wanted or removes the markers
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_secedit($text,$show=true){
+ global $INFO;
+
+ if($INFO['writable'] && $show && !$INFO['rev']){
+ $text = preg_replace_callback('#<!-- SECTION "(.*?)" \[(\d+-\d*)\] -->#',
+ 'html_secedit_button', $text);
+ }else{
+ $text = preg_replace('#<!-- SECTION "(.*?)" \[(\d+-\d*)\] -->#','',$text);
+ }
+
+ return $text;
+}
+
+/**
+ * Just the back to top button (in its own form)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_topbtn(){
+ global $lang;
+
+ $ret = '';
+ $ret = '<a class="nolink" href="#dokuwiki__top"><input type="button" class="button" value="'.$lang['btn_top'].'" onclick="window.scrollTo(0, 0)" title="'.$lang['btn_top'].'" /></a>';
+
+ return $ret;
+}
+
+/**
+ * Displays a button (using its own form)
+ * If tooltip exists, the access key tooltip is replaced.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_btn($name,$id,$akey,$params,$method='get',$tooltip=''){
+ global $conf;
+ global $lang;
+
+ $label = $lang['btn_'.$name];
+
+ $ret = '';
+ $tip = '';
+
+ //filter id (without urlencoding)
+ $id = idfilter($id,false);
+
+ //make nice URLs even for buttons
+ if($conf['userewrite'] == 2){
+ $script = DOKU_BASE.DOKU_SCRIPT.'/'.$id;
+ }elseif($conf['userewrite']){
+ $script = DOKU_BASE.$id;
+ }else{
+ $script = DOKU_BASE.DOKU_SCRIPT;
+ $params['id'] = $id;
+ }
+
+ $ret .= '<form class="button btn_'.$name.'" method="'.$method.'" action="'.$script.'"><div class="no">';
+
+ if(is_array($params)){
+ reset($params);
+ while (list($key, $val) = each($params)) {
+ $ret .= '<input type="hidden" name="'.$key.'" ';
+ $ret .= 'value="'.htmlspecialchars($val).'" />';
+ }
+ }
+
+ if ($tooltip!='') {
+ $tip = htmlspecialchars($tooltip);
+ }else{
+ $tip = htmlspecialchars($label);
+ }
+
+ $ret .= '<input type="submit" value="'.htmlspecialchars($label).'" class="button" ';
+ if($akey){
+ $tip .= ' ['.strtoupper($akey).']';
+ $ret .= 'accesskey="'.$akey.'" ';
+ }
+ $ret .= 'title="'.$tip.'" ';
+ $ret .= '/>';
+ $ret .= '</div></form>';
+
+ return $ret;
+}
+
+/**
+ * show a wiki page
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_show($txt=''){
+ global $ID;
+ global $REV;
+ global $HIGH;
+ global $INFO;
+ //disable section editing for old revisions or in preview
+ if($txt || $REV){
+ $secedit = false;
+ }else{
+ $secedit = true;
+ }
+
+ if ($txt){
+ //PreviewHeader
+ echo '<br id="scroll__here" />';
+ echo p_locale_xhtml('preview');
+ echo '<div class="preview">';
+ $html = html_secedit(p_render('xhtml',p_get_instructions($txt),$info),$secedit);
+ if($INFO['prependTOC']) $html = tpl_toc(true).$html;
+ echo $html;
+ echo '<div class="clearer"></div>';
+ echo '</div>';
+
+ }else{
+ if ($REV) print p_locale_xhtml('showrev');
+ $html = p_wiki_xhtml($ID,$REV,true);
+ $html = html_secedit($html,$secedit);
+ if($INFO['prependTOC']) $html = tpl_toc(true).$html;
+ $html = html_hilight($html,$HIGH);
+ echo $html;
+ }
+}
+
+/**
+ * ask the user about how to handle an exisiting draft
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_draft(){
+ global $INFO;
+ global $ID;
+ global $lang;
+ global $conf;
+ $draft = unserialize(io_readFile($INFO['draft'],false));
+ $text = cleanText(con($draft['prefix'],$draft['text'],$draft['suffix'],true));
+
+ print p_locale_xhtml('draft');
+ $form = new Doku_Form(array('id' => 'dw__editform'));
+ $form->addHidden('id', $ID);
+ $form->addHidden('date', $draft['date']);
+ $form->addElement(form_makeWikiText($text, array('readonly'=>'readonly')));
+ $form->addElement(form_makeOpenTag('div', array('id'=>'draft__status')));
+ $form->addElement($lang['draftdate'].' '. dformat(filemtime($INFO['draft'])));
+ $form->addElement(form_makeCloseTag('div'));
+ $form->addElement(form_makeButton('submit', 'recover', $lang['btn_recover'], array('tabindex'=>'1')));
+ $form->addElement(form_makeButton('submit', 'draftdel', $lang['btn_draftdel'], array('tabindex'=>'2')));
+ $form->addElement(form_makeButton('submit', 'show', $lang['btn_cancel'], array('tabindex'=>'3')));
+ html_form('draft', $form);
+}
+
+/**
+ * Highlights searchqueries in HTML code
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function html_hilight($html,$phrases){
+ $phrases = array_filter((array) $phrases);
+ $regex = join('|',array_map('preg_quote_cb',$phrases));
+
+ if ($regex === '') return $html;
+ $html = preg_replace_callback("/((<[^>]*)|$regex)/ui",'html_hilight_callback',$html);
+ return $html;
+}
+
+/**
+ * Callback used by html_hilight()
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function html_hilight_callback($m) {
+ $hlight = unslash($m[0]);
+ if ( !isset($m[2])) {
+ $hlight = '<span class="search_hit">'.$hlight.'</span>';
+ }
+ return $hlight;
+}
+
+/**
+ * Run a search and display the result
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_search(){
+ require_once(DOKU_INC.'inc/search.php');
+ require_once(DOKU_INC.'inc/fulltext.php');
+ global $conf;
+ global $QUERY;
+ global $ID;
+ global $lang;
+
+ print p_locale_xhtml('searchpage');
+ flush();
+
+ //check if search is restricted to namespace
+ if(preg_match('/@([^@]*)/',$QUERY,$match)) {
+ $id = cleanID($match[1]);
+ } else {
+ $id = cleanID($QUERY);
+ }
+
+ //show progressbar
+ print '<div class="centeralign" id="dw__loading">'.NL;
+ print '<script type="text/javascript" charset="utf-8"><!--//--><![CDATA[//><!--'.NL;
+ print 'showLoadBar();'.NL;
+ print '//--><!]]></script>'.NL;
+ print '<br /></div>'.NL;
+ flush();
+
+ //do quick pagesearch
+ $data = array();
+
+ if($id) $data = ft_pageLookup($id);
+ if(count($data)){
+ print '<div class="search_quickresult">';
+ print '<h3>'.$lang['quickhits'].':</h3>';
+ print '<ul class="search_quickhits">';
+ foreach($data as $id){
+ print '<li> ';
+ $ns = getNS($id);
+ if($ns){
+ $name = shorten(noNS($id), ' ('.$ns.')',30);
+ }else{
+ $name = $id;
+ }
+ print html_wikilink(':'.$id,$name);
+ print '</li> ';
+ }
+ print '</ul> ';
+ //clear float (see http://www.complexspiral.com/publications/containing-floats/)
+ print '<div class="clearer">&nbsp;</div>';
+ print '</div>';
+ }
+ flush();
+
+ //do fulltext search
+ $data = ft_pageSearch($QUERY,$regex);
+ if(count($data)){
+ $num = 1;
+ foreach($data as $id => $cnt){
+ print '<div class="search_result">';
+ print html_wikilink(':'.$id,useHeading('navigation')?null:$id,$regex);
+ if($cnt !== 0){
+ print ': <span class="search_cnt">'.$cnt.' '.$lang['hits'].'</span><br />';
+ if($num < 15){ // create snippets for the first number of matches only #FIXME add to conf ?
+ print '<div class="search_snippet">'.ft_snippet($id,$regex).'</div>';
+ }
+ $num++;
+ }
+ print '</div>';
+ flush();
+ }
+ }else{
+ print '<div class="nothing">'.$lang['nothingfound'].'</div>';
+ }
+
+ //hide progressbar
+ print '<script type="text/javascript" charset="utf-8"><!--//--><![CDATA[//><!--'.NL;
+ print 'hideLoadBar("dw__loading");'.NL;
+ print '//--><!]]></script>'.NL;
+ flush();
+}
+
+/**
+ * Display error on locked pages
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_locked(){
+ global $ID;
+ global $conf;
+ global $lang;
+ global $INFO;
+
+ $locktime = filemtime(wikiLockFN($ID));
+ $expire = dformat($locktime + $conf['locktime']);
+ $min = round(($conf['locktime'] - (time() - $locktime) )/60);
+
+ print p_locale_xhtml('locked');
+ print '<ul>';
+ print '<li><div class="li"><strong>'.$lang['lockedby'].':</strong> '.editorinfo($INFO['locked']).'</div></li>';
+ print '<li><div class="li"><strong>'.$lang['lockexpire'].':</strong> '.$expire.' ('.$min.' min)</div></li>';
+ print '</ul>';
+}
+
+/**
+ * list old revisions
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function html_revisions($first=0){
+ global $ID;
+ global $INFO;
+ global $conf;
+ global $lang;
+ /* we need to get one additionally log entry to be able to
+ * decide if this is the last page or is there another one.
+ * see html_recent()
+ */
+ $revisions = getRevisions($ID, $first, $conf['recent']+1);
+ if(count($revisions)==0 && $first!=0){
+ $first=0;
+ $revisions = getRevisions($ID, $first, $conf['recent']+1);;
+ }
+ $hasNext = false;
+ if (count($revisions)>$conf['recent']) {
+ $hasNext = true;
+ array_pop($revisions); // remove extra log entry
+ }
+
+ $date = dformat($INFO['lastmod']);
+
+ print p_locale_xhtml('revisions');
+
+ $form = new Doku_Form(array('id' => 'page__revisions'));
+ $form->addElement(form_makeOpenTag('ul'));
+ if($INFO['exists'] && $first==0){
+ if (isset($INFO['meta']) && isset($INFO['meta']['last_change']) && $INFO['meta']['last_change']['type']===DOKU_CHANGE_TYPE_MINOR_EDIT)
+ $form->addElement(form_makeOpenTag('li', array('class' => 'minor')));
+ else
+ $form->addElement(form_makeOpenTag('li'));
+ $form->addElement(form_makeOpenTag('div', array('class' => 'li')));
+ $form->addElement(form_makeTag('input', array(
+ 'type' => 'checkbox',
+ 'name' => 'rev2[]',
+ 'value' => 'current')));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'date')));
+ $form->addElement($date);
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/blank.gif',
+ 'width' => '15',
+ 'height' => '11',
+ 'alt' => '')));
+
+ $form->addElement(form_makeOpenTag('a', array(
+ 'class' => 'wikilink1',
+ 'href' => wl($ID))));
+ $form->addElement($ID);
+ $form->addElement(form_makeCloseTag('a'));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
+ $form->addElement(' &ndash; ');
+ $form->addElement(htmlspecialchars($INFO['sum']));
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'user')));
+ $form->addElement((empty($INFO['editor']))?('('.$lang['external_edit'].')'):editorinfo($INFO['editor']));
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement('('.$lang['current'].')');
+ $form->addElement(form_makeCloseTag('div'));
+ $form->addElement(form_makeCloseTag('li'));
+ }
+
+ foreach($revisions as $rev){
+ $date = dformat($rev);
+ $info = getRevisionInfo($ID,$rev,true);
+ $exists = page_exists($ID,$rev);
+
+ if ($info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT)
+ $form->addElement(form_makeOpenTag('li', array('class' => 'minor')));
+ else
+ $form->addElement(form_makeOpenTag('li'));
+ $form->addElement(form_makeOpenTag('div', array('class' => 'li')));
+ if($exists){
+ $form->addElement(form_makeTag('input', array(
+ 'type' => 'checkbox',
+ 'name' => 'rev2[]',
+ 'value' => $rev)));
+ }else{
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/blank.gif',
+ 'width' => 14,
+ 'height' => 11,
+ 'alt' => '')));
+ }
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'date')));
+ $form->addElement($date);
+ $form->addElement(form_makeCloseTag('span'));
+
+ if($exists){
+ $form->addElement(form_makeOpenTag('a', array('href' => wl($ID,"rev=$rev,do=diff", false, '&'), 'class' => 'diff_link')));
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/diff.png',
+ 'width' => 15,
+ 'height' => 11,
+ 'title' => $lang['diff'],
+ 'alt' => $lang['diff'])));
+ $form->addElement(form_makeCloseTag('a'));
+
+ $form->addElement(form_makeOpenTag('a', array('href' => wl($ID,"rev=$rev",false,'&'), 'class' => 'wikilink1')));
+ $form->addElement($ID);
+ $form->addElement(form_makeCloseTag('a'));
+ }else{
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/blank.gif',
+ 'width' => '15',
+ 'height' => '11',
+ 'alt' => '')));
+ $form->addElement($ID);
+ }
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
+ $form->addElement(' &ndash; ');
+ $form->addElement(htmlspecialchars($info['sum']));
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'user')));
+ if($info['user']){
+ $form->addElement(editorinfo($info['user']));
+ if(auth_ismanager()){
+ $form->addElement(' ('.$info['ip'].')');
+ }
+ }else{
+ $form->addElement($info['ip']);
+ }
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeCloseTag('div'));
+ $form->addElement(form_makeCloseTag('li'));
+ }
+ $form->addElement(form_makeCloseTag('ul'));
+ $form->addElement(form_makeButton('submit', 'diff', $lang['diff2']));
+ html_form('revisions', $form);
+
+ print '<div class="pagenav">';
+ $last = $first + $conf['recent'];
+ if ($first > 0) {
+ $first -= $conf['recent'];
+ if ($first < 0) $first = 0;
+ print '<div class="pagenav-prev">';
+ print html_btn('newer',$ID,"p",array('do' => 'revisions', 'first' => $first));
+ print '</div>';
+ }
+ if ($hasNext) {
+ print '<div class="pagenav-next">';
+ print html_btn('older',$ID,"n",array('do' => 'revisions', 'first' => $last));
+ print '</div>';
+ }
+ print '</div>';
+
+}
+
+/**
+ * display recent changes
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function html_recent($first=0){
+ global $conf;
+ global $lang;
+ global $ID;
+ /* we need to get one additionally log entry to be able to
+ * decide if this is the last page or is there another one.
+ * This is the cheapest solution to get this information.
+ */
+ $recents = getRecents($first,$conf['recent'] + 1,getNS($ID));
+ if(count($recents) == 0 && $first != 0){
+ $first=0;
+ $recents = getRecents($first,$conf['recent'] + 1,getNS($ID));
+ }
+ $hasNext = false;
+ if (count($recents)>$conf['recent']) {
+ $hasNext = true;
+ array_pop($recents); // remove extra log entry
+ }
+
+ print p_locale_xhtml('recent');
+
+ if (getNS($ID) != '')
+ print '<div class="level1"><p>' . sprintf($lang['recent_global'], getNS($ID), wl('', 'do=recent')) . '</p></div>';
+
+ $form = new Doku_Form(array('id' => 'dw__recent', 'method' => 'GET'));
+ $form->addHidden('sectok', null);
+ $form->addHidden('do', 'recent');
+ $form->addHidden('id', $ID);
+ $form->addElement(form_makeOpenTag('ul'));
+
+ foreach($recents as $recent){
+ $date = dformat($recent['date']);
+ if ($recent['type']===DOKU_CHANGE_TYPE_MINOR_EDIT)
+ $form->addElement(form_makeOpenTag('li', array('class' => 'minor')));
+ else
+ $form->addElement(form_makeOpenTag('li'));
+
+ $form->addElement(form_makeOpenTag('div', array('class' => 'li')));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'date')));
+ $form->addElement($date);
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeOpenTag('a', array('class' => 'diff_link', 'href' => wl($recent['id'],"do=diff", false, '&'))));
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/diff.png',
+ 'width' => 15,
+ 'height'=> 11,
+ 'title' => $lang['diff'],
+ 'alt' => $lang['diff']
+ )));
+ $form->addElement(form_makeCloseTag('a'));
+
+ $form->addElement(form_makeOpenTag('a', array('class' => 'revisions_link', 'href' => wl($recent['id'],"do=revisions",false,'&'))));
+ $form->addElement(form_makeTag('img', array(
+ 'src' => DOKU_MEDIA.'lib/images/history.png',
+ 'width' => 12,
+ 'height'=> 14,
+ 'title' => $lang['btn_revs'],
+ 'alt' => $lang['btn_revs']
+ )));
+ $form->addElement(form_makeCloseTag('a'));
+
+ $form->addElement(html_wikilink(':'.$recent['id'],useHeading('navigation')?null:$recent['id']));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
+ $form->addElement(' &ndash; '.htmlspecialchars($recent['sum']));
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeOpenTag('span', array('class' => 'user')));
+ if($recent['user']){
+ $form->addElement(editorinfo($recent['user']));
+ if(auth_ismanager()){
+ $form->addElement(' ('.$recent['ip'].')');
+ }
+ }else{
+ $form->addElement($recent['ip']);
+ }
+ $form->addElement(form_makeCloseTag('span'));
+
+ $form->addElement(form_makeCloseTag('div'));
+ $form->addElement(form_makeCloseTag('li'));
+ }
+ $form->addElement(form_makeCloseTag('ul'));
+
+ $form->addElement(form_makeOpenTag('div', array('class' => 'pagenav')));
+ $last = $first + $conf['recent'];
+ if ($first > 0) {
+ $first -= $conf['recent'];
+ if ($first < 0) $first = 0;
+ $form->addElement(form_makeOpenTag('div', array('class' => 'pagenav-prev')));
+ $form->addElement(form_makeTag('input', array(
+ 'type' => 'submit',
+ 'name' => 'first['.$first.']',
+ 'value' => $lang['btn_newer'],
+ 'accesskey' => 'n',
+ 'title' => $lang['btn_newer'].' [N]',
+ 'class' => 'button'
+ )));
+ $form->addElement(form_makeCloseTag('div'));
+ }
+ if ($hasNext) {
+ $form->addElement(form_makeOpenTag('div', array('class' => 'pagenav-next')));
+ $form->addElement(form_makeTag('input', array(
+ 'type' => 'submit',
+ 'name' => 'first['.$last.']',
+ 'value' => $lang['btn_older'],
+ 'accesskey' => 'p',
+ 'title' => $lang['btn_older'].' [P]',
+ 'class' => 'button'
+ )));
+ $form->addElement(form_makeCloseTag('div'));
+ }
+ $form->addElement(form_makeCloseTag('div'));
+ html_form('recent', $form);
+}
+
+/**
+ * Display page index
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_index($ns){
+ require_once(DOKU_INC.'inc/search.php');
+ global $conf;
+ global $ID;
+ $dir = $conf['datadir'];
+ $ns = cleanID($ns);
+ #fixme use appropriate function
+ if(empty($ns)){
+ $ns = dirname(str_replace(':','/',$ID));
+ if($ns == '.') $ns ='';
+ }
+ $ns = utf8_encodeFN(str_replace(':','/',$ns));
+
+ echo p_locale_xhtml('index');
+ echo '<div id="index__tree">';
+
+ $data = array();
+ search($data,$conf['datadir'],'search_index',array('ns' => $ns));
+ echo html_buildlist($data,'idx','html_list_index','html_li_index');
+
+ echo '</div>';
+}
+
+/**
+ * Index item formatter
+ *
+ * User function for html_buildlist()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_list_index($item){
+ global $ID;
+ $ret = '';
+ $base = ':'.$item['id'];
+ $base = substr($base,strrpos($base,':')+1);
+ if($item['type']=='d'){
+ $ret .= '<a href="'.wl($ID,'idx='.rawurlencode($item['id'])).'" class="idx_dir"><strong>';
+ $ret .= $base;
+ $ret .= '</strong></a>';
+ }else{
+ $ret .= html_wikilink(':'.$item['id']);
+ }
+ return $ret;
+}
+
+/**
+ * Index List item
+ *
+ * This user function is used in html_build_lidt to build the
+ * <li> tags for namespaces when displaying the page index
+ * it gives different classes to opened or closed "folders"
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_li_index($item){
+ if($item['type'] == "f"){
+ return '<li class="level'.$item['level'].'">';
+ }elseif($item['open']){
+ return '<li class="open">';
+ }else{
+ return '<li class="closed">';
+ }
+}
+
+/**
+ * Default List item
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_li_default($item){
+ return '<li class="level'.$item['level'].'">';
+}
+
+/**
+ * Build an unordered list
+ *
+ * Build an unordered list from the given $data array
+ * Each item in the array has to have a 'level' property
+ * the item itself gets printed by the given $func user
+ * function. The second and optional function is used to
+ * print the <li> tag. Both user function need to accept
+ * a single item.
+ *
+ * Both user functions can be given as array to point to
+ * a member of an object.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_buildlist($data,$class,$func,$lifunc='html_li_default'){
+ $level = 0;
+ $opens = 0;
+ $ret = '';
+
+ foreach ($data as $item){
+
+ if( $item['level'] > $level ){
+ //open new list
+ for($i=0; $i<($item['level'] - $level); $i++){
+ if ($i) $ret .= "<li class=\"clear\">\n";
+ $ret .= "\n<ul class=\"$class\">\n";
+ }
+ }elseif( $item['level'] < $level ){
+ //close last item
+ $ret .= "</li>\n";
+ for ($i=0; $i<($level - $item['level']); $i++){
+ //close higher lists
+ $ret .= "</ul>\n</li>\n";
+ }
+ }else{
+ //close last item
+ $ret .= "</li>\n";
+ }
+
+ //remember current level
+ $level = $item['level'];
+
+ //print item
+ $ret .= call_user_func($lifunc,$item);
+ $ret .= '<div class="li">';
+
+ $ret .= call_user_func($func,$item);
+ $ret .= '</div>';
+ }
+
+ //close remaining items and lists
+ for ($i=0; $i < $level; $i++){
+ $ret .= "</li></ul>\n";
+ }
+
+ return $ret;
+}
+
+/**
+ * display backlinks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function html_backlinks(){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ global $ID;
+ global $conf;
+ global $lang;
+
+ print p_locale_xhtml('backlinks');
+
+ $data = ft_backlinks($ID);
+
+ if(!empty($data)) {
+ print '<ul class="idx">';
+ foreach($data as $blink){
+ print '<li><div class="li">';
+ print html_wikilink(':'.$blink,useHeading('navigation')?null:$blink);
+ print '</div></li>';
+ }
+ print '</ul>';
+ } else {
+ print '<div class="level1"><p>' . $lang['nothingfound'] . '</p></div>';
+ }
+}
+
+/**
+ * show diff
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_diff($text='',$intro=true){
+ require_once(DOKU_INC.'inc/DifferenceEngine.php');
+ global $ID;
+ global $REV;
+ global $lang;
+ global $conf;
+
+ // we're trying to be clever here, revisions to compare can be either
+ // given as rev and rev2 parameters, with rev2 being optional. Or in an
+ // array in rev2.
+ $rev1 = $REV;
+
+ if(is_array($_REQUEST['rev2'])){
+ $rev1 = (int) $_REQUEST['rev2'][0];
+ $rev2 = (int) $_REQUEST['rev2'][1];
+
+ if(!$rev1){
+ $rev1 = $rev2;
+ unset($rev2);
+ }
+ }else{
+ $rev2 = (int) $_REQUEST['rev2'];
+ }
+
+ if($text){ // compare text to the most current revision
+ $l_rev = '';
+ $l_text = rawWiki($ID,'');
+ $l_head = '<a class="wikilink1" href="'.wl($ID).'">'.
+ $ID.' '.dformat((int) @filemtime(wikiFN($ID))).'</a> '.
+ $lang['current'];
+
+ $r_rev = '';
+ $r_text = cleanText($text);
+ $r_head = $lang['yours'];
+ }else{
+ if($rev1 && $rev2){ // two specific revisions wanted
+ // make sure order is correct (older on the left)
+ if($rev1 < $rev2){
+ $l_rev = $rev1;
+ $r_rev = $rev2;
+ }else{
+ $l_rev = $rev2;
+ $r_rev = $rev1;
+ }
+ }elseif($rev1){ // single revision given, compare to current
+ $r_rev = '';
+ $l_rev = $rev1;
+ }else{ // no revision was given, compare previous to current
+ $r_rev = '';
+ $revs = getRevisions($ID, 0, 1);
+ $l_rev = $revs[0];
+ $REV = $l_rev; // store revision back in $REV
+ }
+
+ // when both revisions are empty then the page was created just now
+ if(!$l_rev && !$r_rev){
+ $l_text = '';
+ }else{
+ $l_text = rawWiki($ID,$l_rev);
+ }
+ $r_text = rawWiki($ID,$r_rev);
+
+ if(!$l_rev){
+ $l_head = '&mdash;';
+ }else{
+ $l_info = getRevisionInfo($ID,$l_rev,true);
+ if($l_info['user']){
+ $l_user = editorinfo($l_info['user']);
+ if(auth_ismanager()) $l_user .= ' ('.$l_info['ip'].')';
+ } else {
+ $l_user = $l_info['ip'];
+ }
+ $l_user = '<span class="user">'.$l_user.'</span>';
+ $l_sum = ($l_info['sum']) ? '<span class="sum">'.hsc($l_info['sum']).'</span>' : '';
+ if ($l_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $l_minor = 'class="minor"';
+
+ $l_head = '<a class="wikilink1" href="'.wl($ID,"rev=$l_rev").'">'.
+ $ID.' ['.dformat($l_rev).']</a>'.
+ '<br />'.$l_user.' '.$l_sum;
+ }
+
+ if($r_rev){
+ $r_info = getRevisionInfo($ID,$r_rev,true);
+ if($r_info['user']){
+ $r_user = editorinfo($r_info['user']);
+ if(auth_ismanager()) $r_user .= ' ('.$r_info['ip'].')';
+ } else {
+ $r_user = $r_info['ip'];
+ }
+ $r_user = '<span class="user">'.$r_user.'</span>';
+ $r_sum = ($r_info['sum']) ? '<span class="sum">'.hsc($r_info['sum']).'</span>' : '';
+ if ($r_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"';
+
+ $r_head = '<a class="wikilink1" href="'.wl($ID,"rev=$r_rev").'">'.
+ $ID.' ['.dformat($r_rev).']</a>'.
+ '<br />'.$r_user.' '.$r_sum;
+ }elseif($_rev = @filemtime(wikiFN($ID))){
+ $_info = getRevisionInfo($ID,$_rev,true);
+ if($_info['user']){
+ $_user = editorinfo($_info['user']);
+ if(auth_ismanager()) $_user .= ' ('.$_info['ip'].')';
+ } else {
+ $_user = $_info['ip'];
+ }
+ $_user = '<span class="user">'.$_user.'</span>';
+ $_sum = ($_info['sum']) ? '<span class="sum">'.hsc($_info['sum']).'</span>' : '';
+ if ($_info['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"';
+
+ $r_head = '<a class="wikilink1" href="'.wl($ID).'">'.
+ $ID.' ['.dformat($_rev).']</a> '.
+ '('.$lang['current'].')'.
+ '<br />'.$_user.' '.$_sum;
+ }else{
+ $r_head = '&mdash; ('.$lang['current'].')';
+ }
+ }
+
+ $df = new Diff(explode("\n",htmlspecialchars($l_text)),
+ explode("\n",htmlspecialchars($r_text)));
+
+ $tdf = new TableDiffFormatter();
+ if($intro) print p_locale_xhtml('diff');
+ ?>
+ <table class="diff">
+ <tr>
+ <th colspan="2" <?php echo $l_minor?>>
+ <?php echo $l_head?>
+ </th>
+ <th colspan="2" <?php echo $r_minor?>>
+ <?php echo $r_head?>
+ </th>
+ </tr>
+ <?php echo $tdf->format($df)?>
+ </table>
+ <?php
+}
+
+/**
+ * show warning on conflict detection
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_conflict($text,$summary){
+ global $ID;
+ global $lang;
+
+ print p_locale_xhtml('conflict');
+ $form = new Doku_Form(array('id' => 'dw__editform'));
+ $form->addHidden('id', $ID);
+ $form->addHidden('wikitext', $text);
+ $form->addHidden('summary', $summary);
+ $form->addElement(form_makeButton('submit', 'save', $lang['btn_save'], array('accesskey'=>'s')));
+ $form->addElement(form_makeButton('submit', 'cancel', $lang['btn_cancel']));
+ html_form('conflict', $form);
+ print '<br /><br /><br /><br />'.NL;
+}
+
+/**
+ * Prints the global message array
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_msgarea(){
+ global $MSG;
+ if(!isset($MSG)) return;
+
+ $shown = array();
+ foreach($MSG as $msg){
+ $hash = md5($msg['msg']);
+ if(isset($shown[$hash])) continue; // skip double messages
+ print '<div class="'.$msg['lvl'].'">';
+ print $msg['msg'];
+ print '</div>';
+ $shown[$hash] = 1;
+ }
+}
+
+/**
+ * Prints the registration form
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_register(){
+ global $lang;
+ global $conf;
+ global $ID;
+
+ print p_locale_xhtml('register');
+ print '<div class="centeralign">'.NL;
+ $form = new Doku_Form(array('id' => 'dw__register'));
+ $form->startFieldset($lang['register']);
+ $form->addHidden('do', 'register');
+ $form->addHidden('save', '1');
+ $form->addElement(form_makeTextField('login', $_POST['login'], $lang['user'], null, 'block', array('size'=>'50')));
+ if (!$conf['autopasswd']) {
+ $form->addElement(form_makePasswordField('pass', $lang['pass'], '', 'block', array('size'=>'50')));
+ $form->addElement(form_makePasswordField('passchk', $lang['passchk'], '', 'block', array('size'=>'50')));
+ }
+ $form->addElement(form_makeTextField('fullname', $_POST['fullname'], $lang['fullname'], '', 'block', array('size'=>'50')));
+ $form->addElement(form_makeTextField('email', $_POST['email'], $lang['email'], '', 'block', array('size'=>'50')));
+ $form->addElement(form_makeButton('submit', '', $lang['register']));
+ $form->endFieldset();
+ html_form('register', $form);
+
+ print '</div>'.NL;
+}
+
+/**
+ * Print the update profile form
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_updateprofile(){
+ global $lang;
+ global $conf;
+ global $ID;
+ global $INFO;
+ global $auth;
+
+ print p_locale_xhtml('updateprofile');
+
+ if (empty($_POST['fullname'])) $_POST['fullname'] = $INFO['userinfo']['name'];
+ if (empty($_POST['email'])) $_POST['email'] = $INFO['userinfo']['mail'];
+ print '<div class="centeralign">'.NL;
+ $form = new Doku_Form(array('id' => 'dw__register'));
+ $form->startFieldset($lang['profile']);
+ $form->addHidden('do', 'profile');
+ $form->addHidden('save', '1');
+ $form->addElement(form_makeTextField('fullname', $_SERVER['REMOTE_USER'], $lang['user'], '', 'block', array('size'=>'50', 'disabled'=>'disabled')));
+ $attr = array('size'=>'50');
+ if (!$auth->canDo('modName')) $attr['disabled'] = 'disabled';
+ $form->addElement(form_makeTextField('fullname', $_POST['fullname'], $lang['fullname'], '', 'block', $attr));
+ $attr = array('size'=>'50');
+ if (!$auth->canDo('modMail')) $attr['disabled'] = 'disabled';
+ $form->addElement(form_makeTextField('email', $_POST['email'], $lang['email'], '', 'block', $attr));
+ $form->addElement(form_makeTag('br'));
+ if ($auth->canDo('modPass')) {
+ $form->addElement(form_makePasswordField('newpass', $lang['newpass'], '', 'block', array('size'=>'50')));
+ $form->addElement(form_makePasswordField('passchk', $lang['passchk'], '', 'block', array('size'=>'50')));
+ }
+ if ($conf['profileconfirm']) {
+ $form->addElement(form_makeTag('br'));
+ $form->addElement(form_makePasswordField('oldpass', $lang['oldpass'], '', 'block', array('size'=>'50')));
+ }
+ $form->addElement(form_makeButton('submit', '', $lang['btn_save']));
+ $form->addElement(form_makeButton('reset', '', $lang['btn_reset']));
+ $form->endFieldset();
+ html_form('updateprofile', $form);
+ print '</div>'.NL;
+}
+
+/**
+ * This displays the edit form (lots of logic included)
+ *
+ * @fixme this is a huge lump of code and should be modularized
+ * @triggers HTML_PAGE_FROMTEMPLATE
+ * @triggers HTML_EDITFORM_INJECTION
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_edit($text=null,$include='edit'){ //FIXME: include needed?
+ global $ID;
+ global $REV;
+ global $DATE;
+ global $RANGE;
+ global $PRE;
+ global $SUF;
+ global $INFO;
+ global $SUM;
+ global $lang;
+ global $conf;
+ global $license;
+
+ //set summary default
+ if(!$SUM){
+ if($REV){
+ $SUM = $lang['restored'];
+ }elseif(!$INFO['exists']){
+ $SUM = $lang['created'];
+ }
+ }
+
+ //no text? Load it!
+ if(!isset($text)){
+ $pr = false; //no preview mode
+ if($INFO['exists']){
+ if($RANGE){
+ list($PRE,$text,$SUF) = rawWikiSlices($RANGE,$ID,$REV);
+ }else{
+ $text = rawWiki($ID,$REV);
+ }
+ $check = md5($text);
+ $mod = false;
+ }else{
+ //try to load a pagetemplate
+ $data = array($ID);
+ $text = trigger_event('HTML_PAGE_FROMTEMPLATE',$data,'pageTemplate',true);
+ $check = md5('');
+ $mod = $text!=='';
+ }
+ }else{
+ $pr = true; //preview mode
+ if (isset($_REQUEST['changecheck'])) {
+ $check = $_REQUEST['changecheck'];
+ $mod = md5($text)!==$check;
+ } else {
+ // Why? Assume default text is unmodified.
+ $check = md5($text);
+ $mod = false;
+ }
+ }
+
+ $wr = $INFO['writable'] && !$INFO['locked'];
+ if($wr){
+ if ($REV) print p_locale_xhtml('editrev');
+ print p_locale_xhtml($include);
+ }else{
+ // check pseudo action 'source'
+ if(!actionOK('source')){
+ msg('Command disabled: source',-1);
+ return;
+ }
+ print p_locale_xhtml('read');
+ }
+ if(!$DATE) $DATE = $INFO['lastmod'];
+ ?>
+ <div style="width:99%;">
+
+ <div class="toolbar">
+ <div id="draft__status"><?php if(!empty($INFO['draft'])) echo $lang['draftdate'].' '.dformat();?></div>
+ <div id="tool__bar"><?php if($wr){?><a href="<?php echo DOKU_BASE?>lib/exe/mediamanager.php?ns=<?php echo $INFO['namespace']?>"
+ target="_blank"><?php echo $lang['mediaselect'] ?></a><?php }?></div>
+
+ <?php if($wr){?>
+ <script type="text/javascript" charset="utf-8"><!--//--><![CDATA[//><!--
+ <?php /* sets changed to true when previewed */?>
+ textChanged = <?php ($mod) ? print 'true' : print 'false' ?>;
+ //--><!]]></script>
+ <?php } ?>
+ </div>
+ <?php
+ $form = new Doku_Form(array('id' => 'dw__editform'));
+ $form->addHidden('id', $ID);
+ $form->addHidden('rev', $REV);
+ $form->addHidden('date', $DATE);
+ $form->addHidden('prefix', $PRE);
+ $form->addHidden('suffix', $SUF);
+ $form->addHidden('changecheck', $check);
+ $attr = array('tabindex'=>'1');
+ if (!$wr) $attr['readonly'] = 'readonly';
+ $form->addElement(form_makeWikiText($text, $attr));
+ $form->addElement(form_makeOpenTag('div', array('id'=>'wiki__editbar')));
+ $form->addElement(form_makeOpenTag('div', array('id'=>'size__ctl')));
+ $form->addElement(form_makeCloseTag('div'));
+ if ($wr) {
+ $form->addElement(form_makeOpenTag('div', array('class'=>'editButtons')));
+ $form->addElement(form_makeButton('submit', 'save', $lang['btn_save'], array('id'=>'edbtn__save', 'accesskey'=>'s', 'tabindex'=>'4')));
+ $form->addElement(form_makeButton('submit', 'preview', $lang['btn_preview'], array('id'=>'edbtn__preview', 'accesskey'=>'p', 'tabindex'=>'5')));
+ $form->addElement(form_makeButton('submit', 'draftdel', $lang['btn_cancel'], array('tabindex'=>'6')));
+ $form->addElement(form_makeCloseTag('div'));
+ $form->addElement(form_makeOpenTag('div', array('class'=>'summary')));
+ $form->addElement(form_makeTextField('summary', $SUM, $lang['summary'], 'edit__summary', 'nowrap', array('size'=>'50', 'tabindex'=>'2')));
+ $elem = html_minoredit();
+ if ($elem) $form->addElement($elem);
+ $form->addElement(form_makeCloseTag('div'));
+ }
+ $form->addElement(form_makeCloseTag('div'));
+ if($wr && $conf['license']){
+ $form->addElement(form_makeOpenTag('div', array('class'=>'license')));
+ $out = $lang['licenseok'];
+ $out .= '<a href="'.$license[$conf['license']]['url'].'" rel="license" class="urlextern"';
+ if(isset($conf['target']['external'])) $out .= ' target="'.$conf['target']['external'].'"';
+ $out .= '> '.$license[$conf['license']]['name'].'</a>';
+ $form->addElement($out);
+ $form->addElement(form_makeCloseTag('div'));
+ }
+ html_form('edit', $form);
+ print '</div>'.NL;
+}
+
+/**
+ * Adds a checkbox for minor edits for logged in users
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_minoredit(){
+ global $conf;
+ global $lang;
+ // minor edits are for logged in users only
+ if(!$conf['useacl'] || !$_SERVER['REMOTE_USER']){
+ return false;
+ }
+
+ $p = array();
+ $p['tabindex'] = 3;
+ if(!empty($_REQUEST['minor'])) $p['checked']='checked';
+ return form_makeCheckboxField('minor', '1', $lang['minoredit'], 'minoredit', 'nowrap', $p);
+}
+
+/**
+ * prints some debug info
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_debug(){
+ global $conf;
+ global $lang;
+ global $auth;
+ global $INFO;
+
+ //remove sensitive data
+ $cnf = $conf;
+ debug_guard($cnf);
+ $nfo = $INFO;
+ debug_guard($nfo);
+ $ses = $_SESSION;
+ debug_guard($ses);
+
+ print '<html><body>';
+
+ print '<p>When reporting bugs please send all the following ';
+ print 'output as a mail to andi@splitbrain.org ';
+ print 'The best way to do this is to save this page in your browser</p>';
+
+ print '<b>$INFO:</b><pre>';
+ print_r($nfo);
+ print '</pre>';
+
+ print '<b>$_SERVER:</b><pre>';
+ print_r($_SERVER);
+ print '</pre>';
+
+ print '<b>$conf:</b><pre>';
+ print_r($cnf);
+ print '</pre>';
+
+ print '<b>DOKU_BASE:</b><pre>';
+ print DOKU_BASE;
+ print '</pre>';
+
+ print '<b>abs DOKU_BASE:</b><pre>';
+ print DOKU_URL;
+ print '</pre>';
+
+ print '<b>rel DOKU_BASE:</b><pre>';
+ print dirname($_SERVER['PHP_SELF']).'/';
+ print '</pre>';
+
+ print '<b>PHP Version:</b><pre>';
+ print phpversion();
+ print '</pre>';
+
+ print '<b>locale:</b><pre>';
+ print setlocale(LC_ALL,0);
+ print '</pre>';
+
+ print '<b>encoding:</b><pre>';
+ print $lang['encoding'];
+ print '</pre>';
+
+ if($auth){
+ print '<b>Auth backend capabilities:</b><pre>';
+ print_r($auth->cando);
+ print '</pre>';
+ }
+
+ print '<b>$_SESSION:</b><pre>';
+ print_r($ses);
+ print '</pre>';
+
+ print '<b>Environment:</b><pre>';
+ print_r($_ENV);
+ print '</pre>';
+
+ print '<b>PHP settings:</b><pre>';
+ $inis = ini_get_all();
+ print_r($inis);
+ print '</pre>';
+
+ print '</body></html>';
+}
+
+/**
+ * List available Administration Tasks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+function html_admin(){
+ global $ID;
+ global $INFO;
+ global $lang;
+ global $conf;
+ global $auth;
+
+ // build menu of admin functions from the plugins that handle them
+ $pluginlist = plugin_list('admin');
+ $menu = array();
+ foreach ($pluginlist as $p) {
+ if($obj =& plugin_load('admin',$p) === null) continue;
+
+ // check permissions
+ if($obj->forAdminOnly() && !$INFO['isadmin']) continue;
+
+ $menu[$p] = array('plugin' => $p,
+ 'prompt' => $obj->getMenuText($conf['lang']),
+ 'sort' => $obj->getMenuSort()
+ );
+ }
+
+ print p_locale_xhtml('admin');
+
+ // Admin Tasks
+ if($INFO['isadmin']){
+ ptln('<ul class="admin_tasks">');
+
+ if($menu['usermanager'] && $auth && $auth->canDo('getUsers')){
+ ptln(' <li class="admin_usermanager"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'usermanager')).'">'.
+ $menu['usermanager']['prompt'].'</a></div></li>');
+ }
+ unset($menu['usermanager']);
+
+ if($menu['acl']){
+ ptln(' <li class="admin_acl"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'acl')).'">'.
+ $menu['acl']['prompt'].'</a></div></li>');
+ }
+ unset($menu['acl']);
+
+ if($menu['plugin']){
+ ptln(' <li class="admin_plugin"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'plugin')).'">'.
+ $menu['plugin']['prompt'].'</a></div></li>');
+ }
+ unset($menu['plugin']);
+
+ if($menu['config']){
+ ptln(' <li class="admin_config"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'config')).'">'.
+ $menu['config']['prompt'].'</a></div></li>');
+ }
+ unset($menu['config']);
+ }
+ ptln('</ul>');
+
+ // Manager Tasks
+ ptln('<ul class="admin_tasks">');
+
+ if($menu['revert']){
+ ptln(' <li class="admin_revert"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'revert')).'">'.
+ $menu['revert']['prompt'].'</a></div></li>');
+ }
+ unset($menu['revert']);
+
+ if($menu['popularity']){
+ ptln(' <li class="admin_popularity"><div class="li">'.
+ '<a href="'.wl($ID, array('do' => 'admin','dokupage' => 'popularity')).'">'.
+ $menu['popularity']['prompt'].'</a></div></li>');
+ }
+ unset($menu['popularity']);
+
+ ptln('</ul>');
+
+ // print the rest as sorted list
+ if(count($menu)){
+ usort($menu, 'p_sort_modes');
+ // output the menu
+ ptln('<div class="clearer"></div>');
+ print p_locale_xhtml('adminplugins');
+ ptln('<ul>');
+ foreach ($menu as $item) {
+ if (!$item['prompt']) continue;
+ ptln(' <li><div class="li"><a href="'.wl($ID, 'do=admin&amp;dokupage='.$item['plugin']).'">'.$item['prompt'].'</a></div></li>');
+ }
+ ptln('</ul>');
+ }
+}
+
+/**
+ * Form to request a new password for an existing account
+ *
+ * @author Benoit Chesneau <benoit@bchesneau.info>
+ */
+function html_resendpwd() {
+ global $lang;
+ global $conf;
+ global $ID;
+
+ print p_locale_xhtml('resendpwd');
+ print '<div class="centeralign">'.NL;
+ $form = new Doku_Form(array('id' => 'dw__resendpwd'));
+ $form->startFieldset($lang['resendpwd']);
+ $form->addHidden('do', 'resendpwd');
+ $form->addHidden('save', '1');
+ $form->addElement(form_makeTag('br'));
+ $form->addElement(form_makeTextField('login', $_POST['login'], $lang['user'], '', 'block'));
+ $form->addElement(form_makeTag('br'));
+ $form->addElement(form_makeTag('br'));
+ $form->addElement(form_makeButton('submit', '', $lang['btn_resendpwd']));
+ $form->endFieldset();
+ html_form('resendpwd', $form);
+ print '</div>'.NL;
+}
+
+/**
+ * Return the TOC rendered to XHTML
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function html_TOC($toc){
+ if(!count($toc)) return '';
+ global $lang;
+ $out = '<!-- TOC START -->'.DOKU_LF;
+ $out .= '<div class="toc">'.DOKU_LF;
+ $out .= '<div class="tocheader toctoggle" id="toc__header">';
+ $out .= $lang['toc'];
+ $out .= '</div>'.DOKU_LF;
+ $out .= '<div id="toc__inside">'.DOKU_LF;
+ $out .= html_buildlist($toc,'toc','html_list_toc');
+ $out .= '</div>'.DOKU_LF.'</div>'.DOKU_LF;
+ $out .= '<!-- TOC END -->'.DOKU_LF;
+ return $out;
+}
+
+/**
+ * Callback for html_buildlist
+ */
+function html_list_toc($item){
+ if(isset($item['hid'])){
+ $link = '#'.$item['hid'];
+ }else{
+ $link = $item['link'];
+ }
+
+ return '<span class="li"><a href="'.$link.'" class="toc">'.
+ hsc($item['title']).'</a></span>';
+}
+
+/**
+ * Helper function to build TOC items
+ *
+ * Returns an array ready to be added to a TOC array
+ *
+ * @param string $link - where to link (if $hash set to '#' it's a local anchor)
+ * @param string $text - what to display in the TOC
+ * @param int $level - nesting level
+ * @param string $hash - is prepended to the given $link, set blank if you want full links
+ */
+function html_mktocitem($link, $text, $level, $hash='#'){
+ global $conf;
+ return array( 'link' => $hash.$link,
+ 'title' => $text,
+ 'type' => 'ul',
+ 'level' => $level);
+}
+
+/**
+ * Output a Doku_Form object.
+ * Triggers an event with the form name: HTML_{$name}FORM_OUTPUT
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function html_form($name, &$form) {
+ // Safety check in case the caller forgets.
+ $form->endFieldset();
+ trigger_event('HTML_'.strtoupper($name).'FORM_OUTPUT', $form, 'html_form_output', false);
+}
+
+/**
+ * Form print function.
+ * Just calls printForm() on the data object.
+ */
+function html_form_output($data) {
+ $data->printForm();
+}
+
+/**
+ * Embed a flash object in HTML
+ *
+ * This will create the needed HTML to embed a flash movie in a cross browser
+ * compatble way using valid XHTML
+ *
+ * The parameters $params, $flashvars and $atts need to be associative arrays.
+ * No escaping needs to be done for them. The alternative content *has* to be
+ * escaped because it is used as is. If no alternative content is given
+ * $lang['noflash'] is used.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://latrine.dgx.cz/how-to-correctly-insert-a-flash-into-xhtml
+ *
+ * @param string $swf - the SWF movie to embed
+ * @param int $width - width of the flash movie in pixels
+ * @param int $height - height of the flash movie in pixels
+ * @param array $params - additional parameters (<param>)
+ * @param array $flashvars - parameters to be passed in the flashvar parameter
+ * @param array $atts - additional attributes for the <object> tag
+ * @param string $alt - alternative content (is NOT automatically escaped!)
+ * @returns string - the XHTML markup
+ */
+function html_flashobject($swf,$width,$height,$params=null,$flashvars=null,$atts=null,$alt=''){
+ global $lang;
+
+ $out = '';
+
+ // prepare the object attributes
+ if(is_null($atts)) $atts = array();
+ $atts['width'] = (int) $width;
+ $atts['height'] = (int) $height;
+ if(!$atts['width']) $atts['width'] = 425;
+ if(!$atts['height']) $atts['height'] = 350;
+
+ // add object attributes for standard compliant browsers
+ $std = $atts;
+ $std['type'] = 'application/x-shockwave-flash';
+ $std['data'] = $swf;
+
+ // add object attributes for IE
+ $ie = $atts;
+ $ie['classid'] = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
+
+ // open object (with conditional comments)
+ $out .= '<!--[if !IE]> -->'.NL;
+ $out .= '<object '.buildAttributes($std).'>'.NL;
+ $out .= '<!-- <![endif]-->'.NL;
+ $out .= '<!--[if IE]>'.NL;
+ $out .= '<object '.buildAttributes($ie).'>'.NL;
+ $out .= ' <param name="movie" value="'.hsc($swf).'" />'.NL;
+ $out .= '<!--><!-- -->'.NL;
+
+ // print params
+ if(is_array($params)) foreach($params as $key => $val){
+ $out .= ' <param name="'.hsc($key).'" value="'.hsc($val).'" />'.NL;
+ }
+
+ // add flashvars
+ if(is_array($flashvars)){
+ $out .= ' <param name="FlashVars" value="'.buildURLparams($flashvars).'" />'.NL;
+ }
+
+ // alternative content
+ if($alt){
+ $out .= $alt.NL;
+ }else{
+ $out .= $lang['noflash'].NL;
+ }
+
+ // finish
+ $out .= '</object>'.NL;
+ $out .= '<!-- <![endif]-->'.NL;
+
+ return $out;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/httputils.php b/mod/dokuwiki/vendors/dokuwiki/inc/httputils.php
new file mode 100644
index 000000000..324a730b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/httputils.php
@@ -0,0 +1,199 @@
+<?php
+/**
+ * Utilities for handling HTTP related tasks
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+define('HTTP_MULTIPART_BOUNDARY','D0KuW1K1B0uNDARY');
+define('HTTP_HEADER_LF',"\r\n");
+define('HTTP_CHUNK_SIZE',16*1024);
+
+/**
+ * Checks and sets HTTP headers for conditional HTTP requests
+ *
+ * @author Simon Willison <swillison@gmail.com>
+ * @link http://simon.incutio.com/archive/2003/04/23/conditionalGet
+ * @param timestamp $timestamp lastmodified time of the cache file
+ * @returns void or exits with previously header() commands executed
+ */
+function http_conditionalRequest($timestamp){
+ // A PHP implementation of conditional get, see
+ // http://fishbowl.pastiche.org/archives/001132.html
+ $last_modified = substr(gmdate('r', $timestamp), 0, -5).'GMT';
+ $etag = '"'.md5($last_modified).'"';
+ // Send the headers
+ header("Last-Modified: $last_modified");
+ header("ETag: $etag");
+ // See if the client has provided the required headers
+ if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
+ $if_modified_since = stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']);
+ }else{
+ $if_modified_since = false;
+ }
+
+ if (isset($_SERVER['HTTP_IF_NONE_MATCH'])){
+ $if_none_match = stripslashes($_SERVER['HTTP_IF_NONE_MATCH']);
+ }else{
+ $if_none_match = false;
+ }
+
+ if (!$if_modified_since && !$if_none_match){
+ return;
+ }
+
+ // At least one of the headers is there - check them
+ if ($if_none_match && $if_none_match != $etag) {
+ return; // etag is there but doesn't match
+ }
+
+ if ($if_modified_since && $if_modified_since != $last_modified) {
+ return; // if-modified-since is there but doesn't match
+ }
+
+ // Nothing has changed since their last request - serve a 304 and exit
+ header('HTTP/1.0 304 Not Modified');
+
+ // don't produce output, even if compression is on
+ @ob_end_clean();
+ exit;
+}
+
+/**
+ * Let the webserver send the given file vi x-sendfile method
+ *
+ * @author Chris Smith <chris.eureka@jalakai.co.uk>
+ * @returns void or exits with previously header() commands executed
+ */
+function http_sendfile($file) {
+ global $conf;
+
+ //use x-sendfile header to pass the delivery to compatible webservers
+ if($conf['xsendfile'] == 1){
+ header("X-LIGHTTPD-send-file: $file");
+ ob_end_clean();
+ exit;
+ }elseif($conf['xsendfile'] == 2){
+ header("X-Sendfile: $file");
+ ob_end_clean();
+ exit;
+ }elseif($conf['xsendfile'] == 3){
+ header("X-Accel-Redirect: $file");
+ ob_end_clean();
+ exit;
+ }
+
+ return false;
+}
+
+/**
+ * Send file contents supporting rangeRequests
+ *
+ * This function exits the running script
+ *
+ * @param ressource $fh - file handle for an already open file
+ * @param int $size - size of the whole file
+ * @param int $mime - MIME type of the file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function http_rangeRequest($fh,$size,$mime){
+ $ranges = array();
+ $isrange = false;
+
+ header('Accept-Ranges: bytes');
+
+ if(!isset($_SERVER['HTTP_RANGE'])){
+ // no range requested - send the whole file
+ $ranges[] = array(0,$size,$size);
+ }else{
+ $t = explode('=', $_SERVER['HTTP_RANGE']);
+ if (!$t[0]=='bytes') {
+ // we only understand byte ranges - send the whole file
+ $ranges[] = array(0,$size,$size);
+ }else{
+ $isrange = true;
+ // handle multiple ranges
+ $r = explode(',',$t[1]);
+ foreach($r as $x){
+ $p = explode('-', $x);
+ $start = (int)$p[0];
+ $end = (int)$p[1];
+ if (!$end) $end = $size - 1;
+ if ($start > $end || $start > $size || $end > $size){
+ header('HTTP/1.1 416 Requested Range Not Satisfiable');
+ print 'Bad Range Request!';
+ exit;
+ }
+ $len = $end - $start + 1;
+ $ranges[] = array($start,$end,$len);
+ }
+ }
+ }
+ $parts = count($ranges);
+
+ // now send the type and length headers
+ if(!$isrange){
+ header("Content-Type: $mime",true);
+ }else{
+ header('HTTP/1.1 206 Partial Content');
+ if($parts == 1){
+ header("Content-Type: $mime",true);
+ }else{
+ header('Content-Type: multipart/byteranges; boundary='.HTTP_MULTIPART_BOUNDARY,true);
+ }
+ }
+
+ // send all ranges
+ for($i=0; $i<$parts; $i++){
+ list($start,$end,$len) = $ranges[$i];
+
+ // multipart or normal headers
+ if($parts > 1){
+ echo HTTP_HEADER_LF.'--'.HTTP_MULTIPART_BOUNDARY.HTTP_HEADER_LF;
+ echo "Content-Type: $mime".HTTP_HEADER_LF;
+ echo "Content-Range: bytes $start-$end/$size".HTTP_HEADER_LF;
+ echo HTTP_HEADER_LF;
+ }else{
+ header("Content-Length: $len");
+ if($isrange){
+ header("Content-Range: bytes $start-$end/$size");
+ }
+ }
+
+ // send file content
+ fseek($fh,$start); //seek to start of range
+ $chunk = ($len > HTTP_CHUNK_SIZE) ? HTTP_CHUNK_SIZE : $len;
+ while (!feof($fh) && $chunk > 0) {
+ @set_time_limit(30); // large files can take a lot of time
+ print fread($fh, $chunk);
+ flush();
+ $len -= $chunk;
+ $chunk = ($len > HTTP_CHUNK_SIZE) ? HTTP_CHUNK_SIZE : $len;
+ }
+ }
+ if($parts > 1){
+ echo HTTP_HEADER_LF.'--'.HTTP_MULTIPART_BOUNDARY.'--'.HTTP_HEADER_LF;
+ }
+
+ // everything should be done here, exit
+ exit;
+}
+
+/**
+ * Check for a gzipped version and create if necessary
+ *
+ * return true if there exists a gzip version of the uncompressed file
+ * (samepath/samefilename.sameext.gz) created after the uncompressed file
+ *
+ * @author Chris Smith <chris.eureka@jalakai.co.uk>
+ */
+function http_gzip_valid($uncompressed_file) {
+ $gzip = $uncompressed_file.'.gz';
+ if (filemtime($gzip) < filemtime($uncompressed_file)) { // filemtime returns false (0) if file doesn't exist
+ return copy($uncompressed_file, 'compress.zlib://'.$gzip);
+ }
+
+ return true;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/indexer.php b/mod/dokuwiki/vendors/dokuwiki/inc/indexer.php
new file mode 100644
index 000000000..14af579bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/indexer.php
@@ -0,0 +1,705 @@
+<?php
+/**
+ * Common DokuWiki functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/utf8.php');
+require_once(DOKU_INC.'inc/parserutils.php');
+
+// set the minimum token length to use in the index (note, this doesn't apply to numeric tokens)
+if (!defined('IDX_MINWORDLENGTH')) define('IDX_MINWORDLENGTH',2);
+
+// Asian characters are handled as words. The following regexp defines the
+// Unicode-Ranges for Asian characters
+// Ranges taken from http://en.wikipedia.org/wiki/Unicode_block
+// I'm no language expert. If you think some ranges are wrongly chosen or
+// a range is missing, please contact me
+define('IDX_ASIAN1','[\x{0E00}-\x{0E7F}]'); // Thai
+define('IDX_ASIAN2','['.
+ '\x{2E80}-\x{3040}'. // CJK -> Hangul
+ '\x{309D}-\x{30A0}'.
+ '\x{30FD}-\x{31EF}\x{3200}-\x{D7AF}'.
+ '\x{F900}-\x{FAFF}'. // CJK Compatibility Ideographs
+ '\x{FE30}-\x{FE4F}'. // CJK Compatibility Forms
+ ']');
+define('IDX_ASIAN3','['. // Hiragana/Katakana (can be two characters)
+ '\x{3042}\x{3044}\x{3046}\x{3048}'.
+ '\x{304A}-\x{3062}\x{3064}-\x{3082}'.
+ '\x{3084}\x{3086}\x{3088}-\x{308D}'.
+ '\x{308F}-\x{3094}'.
+ '\x{30A2}\x{30A4}\x{30A6}\x{30A8}'.
+ '\x{30AA}-\x{30C2}\x{30C4}-\x{30E2}'.
+ '\x{30E4}\x{30E6}\x{30E8}-\x{30ED}'.
+ '\x{30EF}-\x{30F4}\x{30F7}-\x{30FA}'.
+ ']['.
+ '\x{3041}\x{3043}\x{3045}\x{3047}\x{3049}'.
+ '\x{3063}\x{3083}\x{3085}\x{3087}\x{308E}\x{3095}-\x{309C}'.
+ '\x{30A1}\x{30A3}\x{30A5}\x{30A7}\x{30A9}'.
+ '\x{30C3}\x{30E3}\x{30E5}\x{30E7}\x{30EE}\x{30F5}\x{30F6}\x{30FB}\x{30FC}'.
+ '\x{31F0}-\x{31FF}'.
+ ']?');
+define('IDX_ASIAN', '(?:'.IDX_ASIAN1.'|'.IDX_ASIAN2.'|'.IDX_ASIAN3.')');
+
+/**
+ * Measure the length of a string.
+ * Differs from strlen in handling of asian characters.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function wordlen($w){
+ $l = strlen($w);
+ // If left alone, all chinese "words" will get put into w3.idx
+ // So the "length" of a "word" is faked
+ if(preg_match('/'.IDX_ASIAN2.'/u',$w))
+ $l += ord($w) - 0xE1; // Lead bytes from 0xE2-0xEF
+ return $l;
+}
+
+/**
+ * Write a list of strings to an index file.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_saveIndex($pre, $wlen, &$idx){
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$pre.$wlen;
+ $fh = @fopen($fn.'.tmp','w');
+ if(!$fh) return false;
+ foreach ($idx as $line) {
+ fwrite($fh,$line);
+ }
+ fclose($fh);
+ if(isset($conf['fperm'])) chmod($fn.'.tmp', $conf['fperm']);
+ io_rename($fn.'.tmp', $fn.'.idx');
+ return true;
+}
+
+/**
+ * Append a given line to an index file.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_appendIndex($pre, $wlen, $line){
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$pre.$wlen;
+ $fh = @fopen($fn.'.idx','a');
+ if(!$fh) return false;
+ fwrite($fh,$line);
+ fclose($fh);
+ return true;
+}
+
+/**
+ * Read the list of words in an index (if it exists).
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_getIndex($pre, $wlen){
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$pre.$wlen.'.idx';
+ if(!@file_exists($fn)) return array();
+ return file($fn);
+}
+
+/**
+ * Create an empty index file if it doesn't exist yet.
+ *
+ * FIXME: This function isn't currently used. It will probably be removed soon.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_touchIndex($pre, $wlen){
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$pre.$wlen.'.idx';
+ if(!@file_exists($fn)){
+ touch($fn);
+ if($conf['fperm']) chmod($fn, $conf['fperm']);
+ }
+}
+
+/**
+ * Read a line ending with \n.
+ * Returns false on EOF.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function _freadline($fh) {
+ if (feof($fh)) return false;
+ $ln = '';
+ while (($buf = fgets($fh,4096)) !== false) {
+ $ln .= $buf;
+ if (substr($buf,-1) == "\n") break;
+ }
+ if ($ln === '') return false;
+ if (substr($ln,-1) != "\n") $ln .= "\n";
+ return $ln;
+}
+
+/**
+ * Write a line to an index file.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_saveIndexLine($pre, $wlen, $idx, $line){
+ global $conf;
+ if(substr($line,-1) != "\n") $line .= "\n";
+ $fn = $conf['indexdir'].'/'.$pre.$wlen;
+ $fh = @fopen($fn.'.tmp','w');
+ if(!$fh) return false;
+ $ih = @fopen($fn.'.idx','r');
+ if ($ih) {
+ $ln = -1;
+ while (($curline = _freadline($ih)) !== false) {
+ if (++$ln == $idx) {
+ fwrite($fh, $line);
+ } else {
+ fwrite($fh, $curline);
+ }
+ }
+ if ($idx > $ln) {
+ fwrite($fh,$line);
+ }
+ fclose($ih);
+ } else {
+ fwrite($fh,$line);
+ }
+ fclose($fh);
+ if($conf['fperm']) chmod($fn.'.tmp', $conf['fperm']);
+ io_rename($fn.'.tmp', $fn.'.idx');
+ return true;
+}
+
+/**
+ * Read a single line from an index (if it exists).
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_getIndexLine($pre, $wlen, $idx){
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$pre.$wlen.'.idx';
+ if(!@file_exists($fn)) return '';
+ $fh = @fopen($fn,'r');
+ if(!$fh) return '';
+ $ln = -1;
+ while (($line = _freadline($fh)) !== false) {
+ if (++$ln == $idx) break;
+ }
+ fclose($fh);
+ return "$line";
+}
+
+/**
+ * Split a page into words
+ *
+ * Returns an array of word counts, false if an error occurred.
+ * Array is keyed on the word length, then the word index.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+function idx_getPageWords($page){
+ global $conf;
+ $swfile = DOKU_INC.'inc/lang/'.$conf['lang'].'/stopwords.txt';
+ if(@file_exists($swfile)){
+ $stopwords = file($swfile);
+ }else{
+ $stopwords = array();
+ }
+
+ $body = '';
+ $data = array($page, $body);
+ $evt = new Doku_Event('INDEXER_PAGE_ADD', $data);
+ if ($evt->advise_before()) $data[1] .= rawWiki($page);
+ $evt->advise_after();
+ unset($evt);
+
+ list($page,$body) = $data;
+
+ $body = strtr($body, "\r\n\t", ' ');
+ $tokens = explode(' ', $body);
+ $tokens = array_count_values($tokens); // count the frequency of each token
+
+ // ensure the deaccented or romanised page names of internal links are added to the token array
+ // (this is necessary for the backlink function -- there maybe a better way!)
+ if ($conf['deaccent']) {
+ $links = p_get_metadata($page,'relation references');
+
+ if (!empty($links)) {
+ $tmp = join(' ',array_keys($links)); // make a single string
+ $tmp = strtr($tmp, ':', ' '); // replace namespace separator with a space
+ $link_tokens = array_unique(explode(' ', $tmp)); // break into tokens
+
+ foreach ($link_tokens as $link_token) {
+ if (isset($tokens[$link_token])) continue;
+ $tokens[$link_token] = 1;
+ }
+ }
+ }
+
+ $words = array();
+ foreach ($tokens as $word => $count) {
+ $arr = idx_tokenizer($word,$stopwords);
+ $arr = array_count_values($arr);
+ foreach ($arr as $w => $c) {
+ $l = wordlen($w);
+ if(isset($words[$l])){
+ $words[$l][$w] = $c * $count + (isset($words[$l][$w]) ? $words[$l][$w] : 0);
+ }else{
+ $words[$l] = array($w => $c * $count);
+ }
+ }
+ }
+
+ // arrive here with $words = array(wordlen => array(word => frequency))
+
+ $index = array(); //resulting index
+ foreach (array_keys($words) as $wlen){
+ $word_idx = idx_getIndex('w',$wlen);
+ foreach ($words[$wlen] as $word => $freq) {
+ $wid = array_search("$word\n",$word_idx);
+ if(!is_int($wid)){
+ $wid = count($word_idx);
+ $word_idx[] = "$word\n";
+ }
+ if(!isset($index[$wlen]))
+ $index[$wlen] = array();
+ $index[$wlen][$wid] = $freq;
+ }
+
+ // save back word index
+ if(!idx_saveIndex('w',$wlen,$word_idx)){
+ trigger_error("Failed to write word index", E_USER_ERROR);
+ return false;
+ }
+ }
+
+ return $index;
+}
+
+/**
+ * Adds/updates the search for the given page
+ *
+ * This is the core function of the indexer which does most
+ * of the work. This function needs to be called with proper
+ * locking!
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_addPage($page){
+ global $conf;
+
+ // load known documents
+ $page_idx = idx_getIndex('page','');
+
+ // get page id (this is the linenumber in page.idx)
+ $pid = array_search("$page\n",$page_idx);
+ if(!is_int($pid)){
+ $pid = count($page_idx);
+ // page was new - write back
+ if (!idx_appendIndex('page','',"$page\n")){
+ trigger_error("Failed to write page index", E_USER_ERROR);
+ return false;
+ }
+ }
+ unset($page_idx); // free memory
+
+ $pagewords = array();
+ // get word usage in page
+ $words = idx_getPageWords($page);
+ if($words === false) return false;
+
+ if(!empty($words)) {
+ foreach(array_keys($words) as $wlen){
+ $index = idx_getIndex('i',$wlen);
+ foreach($words[$wlen] as $wid => $freq){
+ if($wid<count($index)){
+ $index[$wid] = idx_updateIndexLine($index[$wid],$pid,$freq);
+ }else{
+ // New words **should** have been added in increasing order
+ // starting with the first unassigned index.
+ // If someone can show how this isn't true, then I'll need to sort
+ // or do something special.
+ $index[$wid] = idx_updateIndexLine('',$pid,$freq);
+ }
+ $pagewords[] = "$wlen*$wid";
+ }
+ // save back word index
+ if(!idx_saveIndex('i',$wlen,$index)){
+ trigger_error("Failed to write index", E_USER_ERROR);
+ return false;
+ }
+ }
+ }
+
+ // Remove obsolete index entries
+ $pageword_idx = trim(idx_getIndexLine('pageword','',$pid));
+ if ($pageword_idx !== '') {
+ $oldwords = explode(':',$pageword_idx);
+ $delwords = array_diff($oldwords, $pagewords);
+ $upwords = array();
+ foreach ($delwords as $word) {
+ if($word=='') continue;
+ list($wlen,$wid) = explode('*',$word);
+ $wid = (int)$wid;
+ $upwords[$wlen][] = $wid;
+ }
+ foreach ($upwords as $wlen => $widx) {
+ $index = idx_getIndex('i',$wlen);
+ foreach ($widx as $wid) {
+ $index[$wid] = idx_updateIndexLine($index[$wid],$pid,0);
+ }
+ idx_saveIndex('i',$wlen,$index);
+ }
+ }
+ // Save the reverse index
+ $pageword_idx = join(':',$pagewords)."\n";
+ if(!idx_saveIndexLine('pageword','',$pid,$pageword_idx)){
+ trigger_error("Failed to write word index", E_USER_ERROR);
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Write a new index line to the filehandle
+ *
+ * This function writes an line for the index file to the
+ * given filehandle. It removes the given document from
+ * the given line and readds it when $count is >0.
+ *
+ * @deprecated - see idx_updateIndexLine
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_writeIndexLine($fh,$line,$pid,$count){
+ fwrite($fh,idx_updateIndexLine($line,$pid,$count));
+}
+
+/**
+ * Modify an index line with new information
+ *
+ * This returns a line of the index. It removes the
+ * given document from the line and readds it if
+ * $count is >0.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_updateIndexLine($line,$pid,$count){
+ $line = trim($line);
+ $updated = array();
+ if($line != ''){
+ $parts = explode(':',$line);
+ // remove doc from given line
+ foreach($parts as $part){
+ if($part == '') continue;
+ list($doc,$cnt) = explode('*',$part);
+ if($doc != $pid){
+ $updated[] = $part;
+ }
+ }
+ }
+
+ // add doc
+ if ($count){
+ $updated[] = "$pid*$count";
+ }
+
+ return join(':',$updated)."\n";
+}
+
+/**
+ * Get the word lengths that have been indexed.
+ *
+ * Reads the index directory and returns an array of lengths
+ * that there are indices for.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_indexLengths(&$filter){
+ global $conf;
+ $dir = @opendir($conf['indexdir']);
+ if($dir===false)
+ return array();
+ $idx = array();
+ if(is_array($filter)){
+ while (($f = readdir($dir)) !== false) {
+ if (substr($f,0,1) == 'i' && substr($f,-4) == '.idx'){
+ $i = substr($f,1,-4);
+ if (is_numeric($i) && isset($filter[(int)$i]))
+ $idx[] = (int)$i;
+ }
+ }
+ }else{
+ // Exact match first.
+ if(@file_exists($conf['indexdir']."/i$filter.idx"))
+ $idx[] = $filter;
+ while (($f = readdir($dir)) !== false) {
+ if (substr($f,0,1) == 'i' && substr($f,-4) == '.idx'){
+ $i = substr($f,1,-4);
+ if (is_numeric($i) && $i > $filter)
+ $idx[] = (int)$i;
+ }
+ }
+ }
+ closedir($dir);
+ return $idx;
+}
+
+/**
+ * Find the the index number of each search term.
+ *
+ * This will group together words that appear in the same index.
+ * So it should perform better, because it only opens each index once.
+ * Actually, it's not that great. (in my experience) Probably because of the disk cache.
+ * And the sorted function does more work, making it slightly slower in some cases.
+ *
+ * @param array $words The query terms. Words should only contain valid characters,
+ * with a '*' at either the beginning or end of the word (or both)
+ * @param arrayref $result Set to word => array("length*id" ...), use this to merge the
+ * index locations with the appropriate query term.
+ * @return array Set to length => array(id ...)
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_getIndexWordsSorted($words,&$result){
+ // parse and sort tokens
+ $tokens = array();
+ $tokenlength = array();
+ $tokenwild = array();
+ foreach($words as $word){
+ $result[$word] = array();
+ $wild = 0;
+ $xword = $word;
+ $wlen = wordlen($word);
+
+ // check for wildcards
+ if(substr($xword,0,1) == '*'){
+ $xword = substr($xword,1);
+ $wild |= 1;
+ $wlen -= 1;
+ }
+ if(substr($xword,-1,1) == '*'){
+ $xword = substr($xword,0,-1);
+ $wild |= 2;
+ $wlen -= 1;
+ }
+ if ($wlen < IDX_MINWORDLENGTH && $wild == 0 && !is_numeric($xword)) continue;
+ if(!isset($tokens[$xword])){
+ $tokenlength[$wlen][] = $xword;
+ }
+ if($wild){
+ $ptn = preg_quote($xword,'/');
+ if(($wild&1) == 0) $ptn = '^'.$ptn;
+ if(($wild&2) == 0) $ptn = $ptn.'$';
+ $tokens[$xword][] = array($word, '/'.$ptn.'/');
+ if(!isset($tokenwild[$xword])) $tokenwild[$xword] = $wlen;
+ }else
+ $tokens[$xword][] = array($word, null);
+ }
+ asort($tokenwild);
+ // $tokens = array( base word => array( [ query word , grep pattern ] ... ) ... )
+ // $tokenlength = array( base word length => base word ... )
+ // $tokenwild = array( base word => base word length ... )
+
+ $length_filter = empty($tokenwild) ? $tokenlength : min(array_keys($tokenlength));
+ $indexes_known = idx_indexLengths($length_filter);
+ if(!empty($tokenwild)) sort($indexes_known);
+ // get word IDs
+ $wids = array();
+ foreach($indexes_known as $ixlen){
+ $word_idx = idx_getIndex('w',$ixlen);
+ // handle exact search
+ if(isset($tokenlength[$ixlen])){
+ foreach($tokenlength[$ixlen] as $xword){
+ $wid = array_search("$xword\n",$word_idx);
+ if(is_int($wid)){
+ $wids[$ixlen][] = $wid;
+ foreach($tokens[$xword] as $w)
+ $result[$w[0]][] = "$ixlen*$wid";
+ }
+ }
+ }
+ // handle wildcard search
+ foreach($tokenwild as $xword => $wlen){
+ if($wlen >= $ixlen) break;
+ foreach($tokens[$xword] as $w){
+ if(is_null($w[1])) continue;
+ foreach(array_keys(preg_grep($w[1],$word_idx)) as $wid){
+ $wids[$ixlen][] = $wid;
+ $result[$w[0]][] = "$ixlen*$wid";
+ }
+ }
+ }
+ }
+ return $wids;
+}
+
+/**
+ * Lookup words in index
+ *
+ * Takes an array of word and will return a list of matching
+ * documents for each one.
+ *
+ * Important: No ACL checking is done here! All results are
+ * returned, regardless of permissions
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_lookup($words){
+ global $conf;
+
+ $result = array();
+
+ $wids = idx_getIndexWordsSorted($words, $result);
+ if(empty($wids)) return array();
+
+ // load known words and documents
+ $page_idx = idx_getIndex('page','');
+
+ $docs = array(); // hold docs found
+ foreach(array_keys($wids) as $wlen){
+ $wids[$wlen] = array_unique($wids[$wlen]);
+ $index = idx_getIndex('i',$wlen);
+ foreach($wids[$wlen] as $ixid){
+ if($ixid < count($index))
+ $docs["$wlen*$ixid"] = idx_parseIndexLine($page_idx,$index[$ixid]);
+ }
+ }
+
+ // merge found pages into final result array
+ $final = array();
+ foreach($result as $word => $res){
+ $final[$word] = array();
+ foreach($res as $wid){
+ $hits = &$docs[$wid];
+ foreach ($hits as $hitkey => $hitcnt) {
+ if (!isset($final[$word][$hitkey])) {
+ $final[$word][$hitkey] = $hitcnt;
+ } else {
+ $final[$word][$hitkey] += $hitcnt;
+ }
+ }
+ }
+ }
+ return $final;
+}
+
+/**
+ * Returns a list of documents and counts from a index line
+ *
+ * It omits docs with a count of 0 and pages that no longer
+ * exist.
+ *
+ * @param array $page_idx The list of known pages
+ * @param string $line A line from the main index
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function idx_parseIndexLine(&$page_idx,$line){
+ $result = array();
+
+ $line = trim($line);
+ if($line == '') return $result;
+
+ $parts = explode(':',$line);
+ foreach($parts as $part){
+ if($part == '') continue;
+ list($doc,$cnt) = explode('*',$part);
+ if(!$cnt) continue;
+ $doc = trim($page_idx[$doc]);
+ if(!$doc) continue;
+ // make sure the document still exists
+ if(!page_exists($doc,'',false)) continue;
+
+ $result[$doc] = $cnt;
+ }
+ return $result;
+}
+
+/**
+ * Tokenizes a string into an array of search words
+ *
+ * Uses the same algorithm as idx_getPageWords()
+ *
+ * @param string $string the query as given by the user
+ * @param arrayref $stopwords array of stopwords
+ * @param boolean $wc are wildcards allowed?
+ */
+function idx_tokenizer($string,&$stopwords,$wc=false){
+ $words = array();
+ $wc = ($wc) ? '' : $wc = '\*';
+
+ if(preg_match('/[^0-9A-Za-z]/u', $string)){
+ // handle asian chars as single words (may fail on older PHP version)
+ $asia = @preg_replace('/('.IDX_ASIAN.')/u',' \1 ',$string);
+ if(!is_null($asia)) $string = $asia; //recover from regexp failure
+
+ $arr = explode(' ', utf8_stripspecials($string,' ','\._\-:'.$wc));
+ foreach ($arr as $w) {
+ if (!is_numeric($w) && strlen($w) < IDX_MINWORDLENGTH) continue;
+ $w = utf8_strtolower($w);
+ if($stopwords && is_int(array_search("$w\n",$stopwords))) continue;
+ $words[] = $w;
+ }
+ }else{
+ $w = $string;
+ if (!is_numeric($w) && strlen($w) < IDX_MINWORDLENGTH) return $words;
+ $w = strtolower($w);
+ if(is_int(array_search("$w\n",$stopwords))) return $words;
+ $words[] = $w;
+ }
+
+ return $words;
+}
+
+/**
+ * Create a pagewords index from the existing index.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+function idx_upgradePageWords(){
+ global $conf;
+ $page_idx = idx_getIndex('page','');
+ if (empty($page_idx)) return;
+ $pagewords = array();
+ $len = count($page_idx);
+ for ($n=0;$n<$len;$n++){
+ $pagewords[] = array();
+ }
+ unset($page_idx);
+
+ $n=0;
+ foreach (idx_indexLengths($n) as $wlen) {
+ $lines = idx_getIndex('i',$wlen);
+ $len = count($lines);
+ for ($wid=0;$wid<$len;$wid++) {
+ $wkey = "$wlen*$wid";
+ foreach (explode(':',trim($lines[$wid])) as $part) {
+ if($part == '') continue;
+ list($doc,$cnt) = explode('*',$part);
+ $pagewords[(int)$doc][] = $wkey;
+ }
+ }
+ }
+
+ $fn = $conf['indexdir'].'/pageword';
+ $fh = @fopen($fn.'.tmp','w');
+ if (!$fh){
+ trigger_error("Failed to write word index", E_USER_ERROR);
+ return false;
+ }
+ foreach ($pagewords as $line){
+ fwrite($fh, join(':',$line)."\n");
+ }
+ fclose($fh);
+ if($conf['fperm']) chmod($fn.'.tmp', $conf['fperm']);
+ io_rename($fn.'.tmp', $fn.'.idx');
+ return true;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php
new file mode 100644
index 000000000..b43dd40be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php
@@ -0,0 +1,385 @@
+<?php
+/**
+ * Information and debugging functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+if(!defined('DOKU_INC')) die('meh.');
+if(!defined('DOKU_MESSAGEURL')) define('DOKU_MESSAGEURL','http://update.dokuwiki.org/check/');
+require_once(DOKU_INC.'inc/HTTPClient.php');
+
+/**
+ * Check for new messages from upstream
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function checkUpdateMessages(){
+ global $conf;
+ global $INFO;
+ if(!$conf['updatecheck']) return;
+ if($conf['useacl'] && !$INFO['ismanager']) return;
+
+ $cf = $conf['cachedir'].'/messages.txt';
+ $lm = @filemtime($cf);
+
+ // check if new messages needs to be fetched
+ if($lm < time()-(60*60*24) || $lm < @filemtime(DOKU_CONF.'msg')){
+ $num = @file(DOKU_CONF.'msg');
+ $num = is_array($num) ? (int) $num[0] : 0;
+ $http = new DokuHTTPClient();
+ $http->timeout = 8;
+ $data = $http->get(DOKU_MESSAGEURL.$num);
+ io_saveFile($cf,$data);
+ }else{
+ $data = io_readFile($cf);
+ }
+
+ // show messages through the usual message mechanism
+ $msgs = explode("\n%\n",$data);
+ foreach($msgs as $msg){
+ if($msg) msg($msg,2);
+ }
+}
+
+
+/**
+ * Return DokuWiki's version (split up in date and type)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function getVersionData(){
+ $version = array();
+ //import version string
+ if(@file_exists(DOKU_INC.'VERSION')){
+ //official release
+ $version['date'] = trim(io_readfile(DOKU_INC.'VERSION'));
+ $version['type'] = 'Release';
+ return $version;
+ }elseif(is_dir(DOKU_INC.'_darcs')){
+ if(is_file(DOKU_INC.'_darcs/inventory')){
+ $inventory = DOKU_INC.'_darcs/inventory';
+ }elseif(is_file(DOKU_INC.'_darcs/hashed_inventory')){
+ $inventory = DOKU_INC.'_darcs/hashed_inventory';
+ }else{
+ $version['date'] = 'unknown';
+ $version['type'] = 'Darcs';
+ return $version;
+ }
+
+ //darcs checkout - read last 2000 bytes of inventory
+ $sz = filesize($inventory);
+ $seek = max(0,$sz-2000);
+ $fh = fopen($inventory,'rb');
+ fseek($fh,$seek);
+ $chunk = fread($fh,2000);
+ fclose($fh);
+
+ preg_match_all('#\*\*(\d{4})(\d{2})(\d{2})\d{6}(?:\]|$)#m', $chunk, $matches,
+ PREG_SET_ORDER);
+ $version['date'] = implode('-', array_slice(array_pop($matches), 1));
+ $version['type'] = 'Darcs';
+ return $version;
+ }else{
+ $version['date'] = 'unknown';
+ $version['type'] = 'snapshot?';
+ return $version;
+ }
+}
+
+/**
+ * Return DokuWiki's version (as a string)
+ *
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+function getVersion(){
+ $version = getVersionData();
+ return $version['type'].' '.$version['date'];
+}
+
+/**
+ * Run a few sanity checks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function check(){
+ global $conf;
+ global $INFO;
+
+ msg('DokuWiki version: '.getVersion(),1);
+
+ if(version_compare(phpversion(),'5.1.2','<')){
+ msg('Your PHP version is too old ('.phpversion().' vs. 5.1.2+ needed)',-1);
+ }else{
+ msg('PHP version '.phpversion(),1);
+ }
+
+ $mem = (int) php_to_byte(ini_get('memory_limit'));
+ if($mem){
+ if($mem < 16777216){
+ msg('PHP is limited to less than 16MB RAM ('.$mem.' bytes). Increase memory_limit in php.ini',-1);
+ }elseif($mem < 20971520){
+ msg('PHP is limited to less than 20MB RAM ('.$mem.' bytes), you might encounter problems with bigger pages. Increase memory_limit in php.ini',-1);
+ }elseif($mem < 33554432){
+ msg('PHP is limited to less than 32MB RAM ('.$mem.' bytes), but that should be enough in most cases. If not, increase memory_limit in php.ini',0);
+ }else{
+ msg('More than 32MB RAM ('.$mem.' bytes) available.',1);
+ }
+ }
+
+ if(is_writable($conf['changelog'])){
+ msg('Changelog is writable',1);
+ }else{
+ if (@file_exists($conf['changelog'])) {
+ msg('Changelog is not writable',-1);
+ }
+ }
+
+ if (isset($conf['changelog_old']) && @file_exists($conf['changelog_old'])) {
+ msg('Old changelog exists', 0);
+ }
+
+ if (@file_exists($conf['changelog'].'_failed')) {
+ msg('Importing old changelog failed', -1);
+ } else if (@file_exists($conf['changelog'].'_importing')) {
+ msg('Importing old changelog now.', 0);
+ } else if (@file_exists($conf['changelog'].'_import_ok')) {
+ msg('Old changelog imported', 1);
+ if (!plugin_isdisabled('importoldchangelog')) {
+ msg('Importoldchangelog plugin not disabled after import', -1);
+ }
+ }
+
+ if(is_writable($conf['datadir'])){
+ msg('Datadir is writable',1);
+ }else{
+ msg('Datadir is not writable',-1);
+ }
+
+ if(is_writable($conf['olddir'])){
+ msg('Attic is writable',1);
+ }else{
+ msg('Attic is not writable',-1);
+ }
+
+ if(is_writable($conf['mediadir'])){
+ msg('Mediadir is writable',1);
+ }else{
+ msg('Mediadir is not writable',-1);
+ }
+
+ if(is_writable($conf['cachedir'])){
+ msg('Cachedir is writable',1);
+ }else{
+ msg('Cachedir is not writable',-1);
+ }
+
+ if(is_writable($conf['lockdir'])){
+ msg('Lockdir is writable',1);
+ }else{
+ msg('Lockdir is not writable',-1);
+ }
+
+ if($conf['authtype'] == 'plain'){
+ if(is_writable(DOKU_CONF.'users.auth.php')){
+ msg('conf/users.auth.php is writable',1);
+ }else{
+ msg('conf/users.auth.php is not writable',0);
+ }
+ }
+
+ if(function_exists('mb_strpos')){
+ if(defined('UTF8_NOMBSTRING')){
+ msg('mb_string extension is available but will not be used',0);
+ }else{
+ msg('mb_string extension is available and will be used',1);
+ if(ini_get('mbstring.func_overload') != 0){
+ msg('mb_string function overloading is enabled, this will cause problems and should be disabled',-1);
+ }
+ }
+ }else{
+ msg('mb_string extension not available - PHP only replacements will be used',0);
+ }
+
+ if($conf['allowdebug']){
+ msg('Debugging support is enabled. If you don\'t need it you should set $conf[\'allowdebug\'] = 0',-1);
+ }else{
+ msg('Debugging support is disabled',1);
+ }
+
+ if($INFO['userinfo']['name']){
+ msg('You are currently logged in as '.$_SERVER['REMOTE_USER'].' ('.$INFO['userinfo']['name'].')',0);
+ msg('You are part of the groups '.join($INFO['userinfo']['grps'],', '),0);
+ }else{
+ msg('You are currently not logged in',0);
+ }
+
+ msg('Your current permission for this page is '.$INFO['perm'],0);
+
+ if(is_writable($INFO['filepath'])){
+ msg('The current page is writable by the webserver',0);
+ }else{
+ msg('The current page is not writable by the webserver',0);
+ }
+
+ if($INFO['writable']){
+ msg('The current page is writable by you',0);
+ }else{
+ msg('The current page is not writable by you',0);
+ }
+
+ require_once(DOKU_INC.'inc/HTTPClient.php');
+ $check = wl('','',true).'data/_dummy';
+ $http = new DokuHTTPClient();
+ $http->timeout = 6;
+ $res = $http->get($check);
+ if(strpos($res,'data directory') !== false){
+ msg('It seems like the data directory is accessible from the web.
+ Make sure this directory is properly protected
+ (See <a href="http://www.dokuwiki.org/security">security</a>)',-1);
+ }elseif($http->status == 404 || $http->status == 403){
+ msg('The data directory seems to be properly protected',1);
+ }else{
+ msg('Failed to check if the data directory is accessible from the web.
+ Make sure this directory is properly protected
+ (See <a href="http://www.dokuwiki.org/security">security</a>)',-1);
+ }
+}
+
+/**
+ * print a message
+ *
+ * If HTTP headers were not sent yet the message is added
+ * to the global message array else it's printed directly
+ * using html_msgarea()
+ *
+ *
+ * Levels can be:
+ *
+ * -1 error
+ * 0 info
+ * 1 success
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see html_msgarea
+ */
+function msg($message,$lvl=0,$line='',$file=''){
+ global $MSG;
+ $errors[-1] = 'error';
+ $errors[0] = 'info';
+ $errors[1] = 'success';
+ $errors[2] = 'notify';
+
+ if($line || $file) $message.=' ['.basename($file).':'.$line.']';
+
+ if(!headers_sent()){
+ if(!isset($MSG)) $MSG = array();
+ $MSG[]=array('lvl' => $errors[$lvl], 'msg' => $message);
+ }else{
+ $MSG = array();
+ $MSG[]=array('lvl' => $errors[$lvl], 'msg' => $message);
+ if(function_exists('html_msgarea')){
+ html_msgarea();
+ }else{
+ print "ERROR($lvl) $message";
+ }
+ }
+}
+
+/**
+ * print debug messages
+ *
+ * little function to print the content of a var
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function dbg($msg,$hidden=false){
+ (!$hidden) ? print '<pre class="dbg">' : print "<!--\n";
+ print_r($msg);
+ (!$hidden) ? print '</pre>' : print "\n-->";
+}
+
+/**
+ * Print info to a log file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function dbglog($msg,$header=''){
+ global $conf;
+ if(is_object($msg) || is_array($msg)){
+ $msg = print_r($msg,true);
+ }
+
+ if($header) $msg = "$header\n$msg";
+
+ $file = $conf['cachedir'].'/debug.log';
+ $fh = fopen($file,'a');
+ if($fh){
+ fwrite($fh,date('H:i:s ').$_SERVER['REMOTE_ADDR'].': '.$msg."\n");
+ fclose($fh);
+ }
+}
+
+/**
+ * Print a reversed, prettyprinted backtrace
+ *
+ * @author Gary Owen <gary_owen@bigfoot.com>
+ */
+function dbg_backtrace(){
+ // Get backtrace
+ $backtrace = debug_backtrace();
+
+ // Unset call to debug_print_backtrace
+ array_shift($backtrace);
+
+ // Iterate backtrace
+ $calls = array();
+ $depth = count($backtrace) - 1;
+ foreach ($backtrace as $i => $call) {
+ $location = $call['file'] . ':' . $call['line'];
+ $function = (isset($call['class'])) ?
+ $call['class'] . $call['type'] . $call['function'] : $call['function'];
+
+ $params = array();
+ if (isset($call['args'])){
+ foreach($call['args'] as $arg){
+ if(is_object($arg)){
+ $params[] = '[Object '.get_class($arg).']';
+ }elseif(is_array($arg)){
+ $params[] = '[Array]';
+ }elseif(is_null($arg)){
+ $param[] = '[NULL]';
+ }else{
+ $params[] = (string) '"'.$arg.'"';
+ }
+ }
+ }
+ $params = implode(', ',$params);
+
+ $calls[$depth - $i] = sprintf('%s(%s) called at %s',
+ $function,
+ str_replace("\n", '\n', $params),
+ $location);
+ }
+ ksort($calls);
+
+ return implode("\n", $calls);
+}
+
+/**
+ * Remove all data from an array where the key seems to point to sensitive data
+ *
+ * This is used to remove passwords, mail addresses and similar data from the
+ * debug output
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function debug_guard(&$data){
+ foreach($data as $key => $value){
+ if(preg_match('/(notify|pass|auth|secret|ftp|userinfo|token|buid|mail|proxy)/i',$key)){
+ $data[$key] = '***';
+ continue;
+ }
+ if(is_array($value)) debug_guard($data[$key]);
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/init.php b/mod/dokuwiki/vendors/dokuwiki/inc/init.php
new file mode 100644
index 000000000..eca97f5f7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/init.php
@@ -0,0 +1,598 @@
+<?php
+/**
+ * Initialize some defaults needed for DokuWiki
+ */
+
+// start timing Dokuwiki execution
+function delta_time($start=0) {
+ list($usec, $sec) = explode(" ", microtime());
+ return ((float)$usec+(float)$sec)-((float)$start);
+}
+define('DOKU_START_TIME', delta_time());
+
+global $config_cascade;
+$config_cascade = '';
+
+// if available load a preload config file
+$preload = fullpath(dirname(__FILE__)).'/preload.php';
+if (@file_exists($preload)) include($preload);
+
+// define the include path
+if(!defined('DOKU_INC')) define('DOKU_INC',fullpath(dirname(__FILE__).'/../').'/');
+
+
+// define config path (packagers may want to change this to /etc/dokuwiki/)
+if(!defined('DOKU_CONF')) define('DOKU_CONF',DOKU_INC.'conf/');
+
+// check for error reporting override or set error reporting to sane values
+if (!defined('DOKU_E_LEVEL') && @file_exists(DOKU_CONF.'report_e_all')) {
+ define('DOKU_E_LEVEL', E_ALL);
+}
+if (!defined('DOKU_E_LEVEL')) {
+ if(defined('E_DEPRECATED')){ // since php 5.3
+ error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
+ }else{
+ error_reporting(E_ALL ^ E_NOTICE);
+ }
+} else {
+ error_reporting(DOKU_E_LEVEL);
+}
+
+// init memory caches
+global $cache_revinfo;
+ $cache_revinfo = array();
+global $cache_wikifn;
+ $cache_wikifn = array();
+global $cache_cleanid;
+ $cache_cleanid = array();
+global $cache_authname;
+ $cache_authname = array();
+global $cache_metadata;
+ $cache_metadata = array();
+
+//set the configuration cascade - but only if its not already been set in preload.php
+if (empty($config_cascade)) {
+ $config_cascade = array(
+ 'main' => array(
+ 'default' => array(DOKU_CONF.'dokuwiki.php'),
+ 'local' => array(DOKU_CONF.'local.php'),
+ 'protected' => array(DOKU_CONF.'local.protected.php'),
+ ),
+ 'acronyms' => array(
+ 'default' => array(DOKU_CONF.'acronyms.conf'),
+ 'local' => array(DOKU_CONF.'acronyms.local.conf'),
+ ),
+ 'entities' => array(
+ 'default' => array(DOKU_CONF.'entities.conf'),
+ 'local' => array(DOKU_CONF.'entities.local.conf'),
+ ),
+ 'interwiki' => array(
+ 'default' => array(DOKU_CONF.'interwiki.conf'),
+ 'local' => array(DOKU_CONF.'interwiki.local.conf'),
+ ),
+ 'license' => array(
+ 'default' => array(DOKU_CONF.'license.php'),
+ 'local' => array(DOKU_CONF.'license.local.php'),
+ ),
+ 'mediameta' => array(
+ 'default' => array(DOKU_CONF.'mediameta.php'),
+ 'local' => array(DOKU_CONF.'mediameta.local.php'),
+ ),
+ 'mime' => array(
+ 'default' => array(DOKU_CONF.'mime.conf'),
+ 'local' => array(DOKU_CONF.'mime.local.conf'),
+ ),
+ 'scheme' => array(
+ 'default' => array(DOKU_CONF.'scheme.conf'),
+ 'local' => array(DOKU_CONF.'scheme.local.conf'),
+ ),
+ 'smileys' => array(
+ 'default' => array(DOKU_CONF.'smileys.conf'),
+ 'local' => array(DOKU_CONF.'smileys.local.conf'),
+ ),
+ 'wordblock' => array(
+ 'default' => array(DOKU_CONF.'wordblock.conf'),
+ 'local' => array(DOKU_CONF.'wordblock.local.conf'),
+ ),
+ );
+}
+
+//prepare config array()
+global $conf;
+$conf = array();
+
+// load the global config file(s)
+foreach (array('default','local','protected') as $config_group) {
+ if (empty($config_cascade['main'][$config_group])) continue;
+ foreach ($config_cascade['main'][$config_group] as $config_file) {
+ if (@file_exists($config_file)) {
+ include($config_file);
+ }
+ }
+}
+
+//prepare language array
+global $lang;
+$lang = array();
+
+//load the language files
+require_once(DOKU_INC.'inc/lang/en/lang.php');
+if ( $conf['lang'] && $conf['lang'] != 'en' ) {
+ require_once(DOKU_INC.'inc/lang/'.$conf['lang'].'/lang.php');
+}
+
+//prepare license array()
+global $license;
+$license = array();
+
+// load the license file(s)
+foreach (array('default','local') as $config_group) {
+ if (empty($config_cascade['license'][$config_group])) continue;
+ foreach ($config_cascade['license'][$config_group] as $config_file) {
+ if(@file_exists($config_file)){
+ include($config_file);
+ }
+ }
+}
+
+// set timezone (as in pre 5.3.0 days)
+date_default_timezone_set(@date_default_timezone_get());
+
+// define baseURL
+if(!defined('DOKU_REL')) define('DOKU_REL',getBaseURL(false));
+if(!defined('DOKU_URL')) define('DOKU_URL',getBaseURL(true));
+if(!defined('DOKU_BASE')){
+ if($conf['canonical']){
+ define('DOKU_BASE',DOKU_URL);
+ }else{
+ define('DOKU_BASE',DOKU_REL);
+ }
+}
+//error_log("DOKU_INC:".DOKU_INC);
+//error_log("DOKU_REL:".DOKU_REL);
+//error_log("DOKU_URL:".DOKU_URL);
+//error_log("DOKU_BASE:".DOKU_BASE);
+
+// define whitespace
+if(!defined('DOKU_LF')) define ('DOKU_LF',"\n");
+if(!defined('DOKU_TAB')) define ('DOKU_TAB',"\t");
+
+// define cookie and session id, append server port when securecookie is configured FS#1664
+if (!defined('DOKU_COOKIE')) define('DOKU_COOKIE', 'DW'.md5(DOKU_REL.(($conf['securecookie'])?$_SERVER['SERVER_PORT']:'')));
+
+// define Plugin dir
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+
+// define main script
+if(!defined('DOKU_SCRIPT')) define('DOKU_SCRIPT','doku.php');
+
+// define Template baseURL
+if(!defined('DOKU_TPL')) define('DOKU_TPL',
+ DOKU_BASE.'lib/tpl/'.$conf['template'].'/');
+
+// define real Template directory
+if(!defined('DOKU_TPLINC')) define('DOKU_TPLINC',
+ DOKU_INC.'lib/tpl/'.$conf['template'].'/');
+
+// make session rewrites XHTML compliant
+@ini_set('arg_separator.output', '&amp;');
+
+// make sure global zlib does not interfere FS#1132
+@ini_set('zlib.output_compression', 'off');
+
+// increase PCRE backtrack limit
+@ini_set('pcre.backtrack_limit', '20971520');
+
+// enable gzip compression if supported
+$conf['gzip_output'] &= (strpos($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip') !== false);
+if ($conf['gzip_output'] &&
+ !defined('DOKU_DISABLE_GZIP_OUTPUT') &&
+ function_exists('ob_gzhandler')) {
+ ob_start('ob_gzhandler');
+}
+
+// init session
+if (!headers_sent() && !defined('NOSESSION')){
+ session_name("DokuWiki");
+ if (version_compare(PHP_VERSION, '5.2.0', '>')) {
+ session_set_cookie_params(0,DOKU_REL,'',($conf['securecookie'] && is_ssl()),true);
+ }else{
+ session_set_cookie_params(0,DOKU_REL,'',($conf['securecookie'] && is_ssl()));
+ }
+ session_start();
+
+ // load left over messages
+ if(isset($_SESSION[DOKU_COOKIE]['msg'])){
+ $MSG = $_SESSION[DOKU_COOKIE]['msg'];
+ unset($_SESSION[DOKU_COOKIE]['msg']);
+ }
+}
+
+// kill magic quotes
+if (get_magic_quotes_gpc() && !defined('MAGIC_QUOTES_STRIPPED')) {
+ if (!empty($_GET)) remove_magic_quotes($_GET);
+ if (!empty($_POST)) remove_magic_quotes($_POST);
+ if (!empty($_COOKIE)) remove_magic_quotes($_COOKIE);
+ if (!empty($_REQUEST)) remove_magic_quotes($_REQUEST);
+ @ini_set('magic_quotes_gpc', 0);
+ define('MAGIC_QUOTES_STRIPPED',1);
+}
+@set_magic_quotes_runtime(0);
+@ini_set('magic_quotes_sybase',0);
+
+// don't let cookies ever interfere with request vars
+$_REQUEST = array_merge($_GET,$_POST);
+
+// we don't want a purge URL to be digged
+if(isset($_REQUEST['purge']) && $_SERVER['HTTP_REFERER']) unset($_REQUEST['purge']);
+
+// disable gzip if not available
+if($conf['compression'] == 'bz2' && !function_exists('bzopen')){
+ $conf['compression'] = 'gz';
+}
+if($conf['compression'] == 'gz' && !function_exists('gzopen')){
+ $conf['compression'] = 0;
+}
+
+// fix dateformat for upgraders
+if(strpos($conf['dformat'],'%') === false){
+ $conf['dformat'] = '%Y/%m/%d %H:%M';
+}
+
+// precalculate file creation modes
+init_creationmodes();
+
+// make real paths and check them
+init_paths();
+init_files();
+
+// automatic upgrade to script versions of certain files
+scriptify(DOKU_CONF.'users.auth');
+scriptify(DOKU_CONF.'acl.auth');
+
+
+/**
+ * Checks paths from config file
+ */
+function init_paths(){
+ global $conf;
+
+ $paths = array('datadir' => 'pages',
+ 'olddir' => 'attic',
+ 'mediadir' => 'media',
+ 'metadir' => 'meta',
+ 'cachedir' => 'cache',
+ 'indexdir' => 'index',
+ 'lockdir' => 'locks',
+ 'tmpdir' => 'tmp');
+
+ foreach($paths as $c => $p){
+ if(empty($conf[$c])) $conf[$c] = $conf['savedir'].'/'.$p;
+ $conf[$c] = init_path($conf[$c]);
+ if(empty($conf[$c])) nice_die("The $c ('$p') does not exist, isn't accessible or writable.
+ You should check your config and permission settings.
+ Or maybe you want to <a href=\"install.php\">run the
+ installer</a>?");
+ }
+
+ // path to old changelog only needed for upgrading
+ $conf['changelog_old'] = init_path((isset($conf['changelog']))?($conf['changelog']):($conf['savedir'].'/changes.log'));
+ if ($conf['changelog_old']=='') { unset($conf['changelog_old']); }
+ // hardcoded changelog because it is now a cache that lives in meta
+ $conf['changelog'] = $conf['metadir'].'/_dokuwiki.changes';
+ $conf['media_changelog'] = $conf['metadir'].'/_media.changes';
+}
+
+/**
+ * Checks the existance of certain files and creates them if missing.
+ */
+function init_files(){
+ global $conf;
+
+ $files = array( $conf['indexdir'].'/page.idx');
+
+ foreach($files as $file){
+ if(!@file_exists($file)){
+ $fh = @fopen($file,'a');
+ if($fh){
+ fclose($fh);
+ if($conf['fperm']) chmod($file, $conf['fperm']);
+ }else{
+ nice_die("$file is not writable. Check your permissions settings!");
+ }
+ }
+ }
+}
+
+/**
+ * Returns absolute path
+ *
+ * This tries the given path first, then checks in DOKU_INC.
+ * Check for accessability on directories as well.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function init_path($path){
+ // check existance
+ //error_log("init_path:".$path);
+ $p = fullpath($path);
+ if(!@file_exists($p)){
+ $p = fullpath(DOKU_INC.$path);
+ if(!@file_exists($p)){
+ return '';
+ }
+ }
+
+ // check writability
+ if(!@is_writable($p)){
+ return '';
+ }
+
+ // check accessability (execute bit) for directories
+ if(@is_dir($p) && !@file_exists("$p/.")){
+ return '';
+ }
+
+ return $p;
+}
+
+/**
+ * Sets the internal config values fperm and dperm which, when set,
+ * will be used to change the permission of a newly created dir or
+ * file with chmod. Considers the influence of the system's umask
+ * setting the values only if needed.
+ */
+function init_creationmodes(){
+ global $conf;
+
+ // Legacy support for old umask/dmask scheme
+ unset($conf['dmask']);
+ unset($conf['fmask']);
+ unset($conf['umask']);
+ unset($conf['fperm']);
+ unset($conf['dperm']);
+
+ // get system umask, fallback to 0 if none available
+ $umask = @umask();
+ if(!$umask) $umask = 0000;
+
+ // check what is set automatically by the system on file creation
+ // and set the fperm param if it's not what we want
+ $auto_fmode = 0666 & ~$umask;
+ if($auto_fmode != $conf['fmode']) $conf['fperm'] = $conf['fmode'];
+
+ // check what is set automatically by the system on file creation
+ // and set the dperm param if it's not what we want
+ $auto_dmode = $conf['dmode'] & ~$umask;
+ if($auto_dmode != $conf['dmode']) $conf['dperm'] = $conf['dmode'];
+}
+
+/**
+ * remove magic quotes recursivly
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function remove_magic_quotes(&$array) {
+ foreach (array_keys($array) as $key) {
+ // handle magic quotes in keynames (breaks order)
+ $sk = stripslashes($key);
+ if($sk != $key){
+ $array[$sk] = $array[$key];
+ unset($array[$key]);
+ $key = $sk;
+ }
+
+ // do recursion if needed
+ if (is_array($array[$key])) {
+ remove_magic_quotes($array[$key]);
+ }else {
+ $array[$key] = stripslashes($array[$key]);
+ }
+ }
+}
+
+/**
+ * Returns the full absolute URL to the directory where
+ * DokuWiki is installed in (includes a trailing slash)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function getBaseURL($abs=null){
+ global $conf;
+ //if canonical url enabled always return absolute
+ if(is_null($abs)) $abs = $conf['canonical'];
+
+ if($conf['basedir']){
+ $dir = $conf['basedir'];
+ }elseif(substr($_SERVER['SCRIPT_NAME'],-4) == '.php'){
+ $dir = dirname($_SERVER['SCRIPT_NAME']);
+ }elseif(substr($_SERVER['PHP_SELF'],-4) == '.php'){
+ $dir = dirname($_SERVER['PHP_SELF']);
+ }elseif($_SERVER['DOCUMENT_ROOT'] && $_SERVER['SCRIPT_FILENAME']){
+ $dir = preg_replace ('/^'.preg_quote($_SERVER['DOCUMENT_ROOT'],'/').'/','',
+ $_SERVER['SCRIPT_FILENAME']);
+ $dir = dirname('/'.$dir);
+ }else{
+ $dir = '.'; //probably wrong
+ }
+
+ $dir = str_replace('\\','/',$dir); // bugfix for weird WIN behaviour
+ $dir = preg_replace('#//+#','/',"/$dir/"); // ensure leading and trailing slashes
+
+ //handle script in lib/exe dir
+ $dir = preg_replace('!lib/exe/$!','',$dir);
+
+ //handle script in lib/plugins dir
+ $dir = preg_replace('!lib/plugins/.*$!','',$dir);
+
+ //finish here for relative URLs
+ if(!$abs) return $dir;
+
+ //use config option if available, trim any slash from end of baseurl to avoid multiple consecutive slashes in the path
+ if($conf['baseurl']) return rtrim($conf['baseurl'],'/').$dir;
+
+ //split hostheader into host and port
+ $addr = explode(':',$_SERVER['HTTP_HOST']);
+ $host = $addr[0];
+ $port = '';
+ if (isset($addr[1])) {
+ $port = $addr[1];
+ } elseif (isset($_SERVER['SERVER_PORT'])) {
+ $port = $_SERVER['SERVER_PORT'];
+ }
+ if(!is_ssl()){
+ $proto = 'http://';
+ if ($port == '80') {
+ $port = '';
+ }
+ }else{
+ $proto = 'https://';
+ if ($port == '443') {
+ $port = '';
+ }
+ }
+
+ if($port !== '') $port = ':'.$port;
+
+ return $proto.$host.$port.$dir;
+}
+
+/**
+ * Check if accessed via HTTPS
+ *
+ * Apache leaves ,$_SERVER['HTTPS'] empty when not available, IIS sets it to 'off'.
+ * 'false' and 'disabled' are just guessing
+ *
+ * @returns bool true when SSL is active
+ */
+function is_ssl(){
+ if (!isset($_SERVER['HTTPS']) ||
+ preg_match('/^(|off|false|disabled)$/i',$_SERVER['HTTPS'])){
+ return false;
+ }else{
+ return true;
+ }
+}
+
+/**
+ * Append a PHP extension to a given file and adds an exit call
+ *
+ * This is used to migrate some old configfiles. An added PHP extension
+ * ensures the contents are not shown to webusers even if .htaccess files
+ * do not work
+ *
+ * @author Jan Decaluwe <jan@jandecaluwe.com>
+ */
+function scriptify($file) {
+ // checks
+ if (!is_readable($file)) {
+ return;
+ }
+ $fn = $file.'.php';
+ if (@file_exists($fn)) {
+ return;
+ }
+ $fh = fopen($fn, 'w');
+ if (!$fh) {
+ nice_die($fn.' is not writable. Check your permission settings!');
+ }
+ // write php exit hack first
+ fwrite($fh, "# $fn\n");
+ fwrite($fh, '# <?php exit()?>'."\n");
+ fwrite($fh, "# Don't modify the lines above\n");
+ fwrite($fh, "#\n");
+ // copy existing lines
+ $lines = file($file);
+ foreach ($lines as $line){
+ fwrite($fh, $line);
+ }
+ fclose($fh);
+ //try to rename the old file
+ io_rename($file,"$file.old");
+}
+
+/**
+ * print a nice message even if no styles are loaded yet.
+ */
+function nice_die($msg){
+ echo<<<EOT
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head><title>DokuWiki Setup Error</title></head>
+<body style="font-family: Arial, sans-serif">
+ <div style="width:60%; margin: auto; background-color: #fcc;
+ border: 1px solid #faa; padding: 0.5em 1em;">
+ <h1 style="font-size: 120%">DokuWiki Setup Error</h1>
+ <p>$msg</p>
+ </div>
+</body>
+</html>
+EOT;
+ exit;
+}
+
+
+/**
+ * A realpath() replacement
+ *
+ * This function behaves similar to PHP's realpath() but does not resolve
+ * symlinks or accesses upper directories
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author <richpageau at yahoo dot co dot uk>
+ * @link http://de3.php.net/manual/en/function.realpath.php#75992
+ */
+function fullpath($path,$exists=false){
+ static $run = 0;
+ $root = '';
+ $iswin = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' || @$GLOBALS['DOKU_UNITTEST_ASSUME_WINDOWS']);
+
+ // find the (indestructable) root of the path - keeps windows stuff intact
+ if($path{0} == '/'){
+ $root = '/';
+ }elseif($iswin){
+ // match drive letter and UNC paths
+ if(preg_match('!^([a-zA-z]:)(.*)!',$path,$match)){
+ $root = $match[1].'/';
+ $path = $match[2];
+ }else if(preg_match('!^(\\\\\\\\[^\\\\/]+\\\\[^\\\\/]+[\\\\/])(.*)!',$path,$match)){
+ $root = $match[1];
+ $path = $match[2];
+ }
+ }
+ $path = str_replace('\\','/',$path);
+
+ // if the given path wasn't absolute already, prepend the script path and retry
+ if(!$root){
+ $base = dirname($_SERVER['SCRIPT_FILENAME']);
+ $path = $base.'/'.$path;
+ if($run == 0){ // avoid endless recursion when base isn't absolute for some reason
+ $run++;
+ return fullpath($path,$exists);
+ }
+ }
+ $run = 0;
+
+ // canonicalize
+ $path=explode('/', $path);
+ $newpath=array();
+ foreach($path as $p) {
+ if ($p === '' || $p === '.') continue;
+ if ($p==='..') {
+ array_pop($newpath);
+ continue;
+ }
+ array_push($newpath, $p);
+ }
+ $finalpath = $root.implode('/', $newpath);
+
+ // check for existance when needed (except when unit testing)
+ if($exists && !defined('DOKU_UNITTEST') && !@file_exists($finalpath)) {
+ return false;
+ }
+ return $finalpath;
+}
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/io.php b/mod/dokuwiki/vendors/dokuwiki/inc/io.php
new file mode 100644
index 000000000..32a6f7b8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/io.php
@@ -0,0 +1,593 @@
+<?php
+/**
+ * File IO functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/HTTPClient.php');
+require_once(DOKU_INC.'inc/events.php');
+require_once(DOKU_INC.'inc/utf8.php');
+
+/**
+ * Removes empty directories
+ *
+ * Sends IO_NAMESPACE_DELETED events for 'pages' and 'media' namespaces.
+ * Event data:
+ * $data[0] ns: The colon separated namespace path minus the trailing page name.
+ * $data[1] ns_type: 'pages' or 'media' namespace tree.
+ *
+ * @todo use safemode hack
+ * @param string $id - a pageid, the namespace of that id will be tried to deleted
+ * @param string $basadir - the config name of the type to delete (datadir or mediadir usally)
+ * @returns bool - true if at least one namespace was deleted
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function io_sweepNS($id,$basedir='datadir'){
+ global $conf;
+ $types = array ('datadir'=>'pages', 'mediadir'=>'media');
+ $ns_type = (isset($types[$basedir])?$types[$basedir]:false);
+
+ $delone = false;
+
+ //scan all namespaces
+ while(($id = getNS($id)) !== false){
+ $dir = $conf[$basedir].'/'.utf8_encodeFN(str_replace(':','/',$id));
+
+ //try to delete dir else return
+ if(@rmdir($dir)) {
+ if ($ns_type!==false) {
+ $data = array($id, $ns_type);
+ $delone = true; // we deleted at least one dir
+ trigger_event('IO_NAMESPACE_DELETED', $data);
+ }
+ } else { return $delone; }
+ }
+ return $delone;
+}
+
+/**
+ * Used to read in a DokuWiki page from file, and send IO_WIKIPAGE_READ events.
+ *
+ * Generates the action event which delegates to io_readFile().
+ * Action plugins are allowed to modify the page content in transit.
+ * The file path should not be changed.
+ *
+ * Event data:
+ * $data[0] The raw arguments for io_readFile as an array.
+ * $data[1] ns: The colon separated namespace path minus the trailing page name. (false if root ns)
+ * $data[2] page_name: The wiki page name.
+ * $data[3] rev: The page revision, false for current wiki pages.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function io_readWikiPage($file, $id, $rev=false) {
+ if (empty($rev)) { $rev = false; }
+ $data = array(array($file, false), getNS($id), noNS($id), $rev);
+ return trigger_event('IO_WIKIPAGE_READ', $data, '_io_readWikiPage_action', false);
+}
+
+/**
+ * Callback adapter for io_readFile().
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function _io_readWikiPage_action($data) {
+ if (is_array($data) && is_array($data[0]) && count($data[0])===2) {
+ return call_user_func_array('io_readFile', $data[0]);
+ } else {
+ return ''; //callback error
+ }
+}
+
+/**
+ * Returns content of $file as cleaned string.
+ *
+ * Uses gzip if extension is .gz
+ *
+ * If you want to use the returned value in unserialize
+ * be sure to set $clean to false!
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function io_readFile($file,$clean=true){
+ $ret = '';
+ if(@file_exists($file)){
+ if(substr($file,-3) == '.gz'){
+ $ret = join('',gzfile($file));
+ }else if(substr($file,-4) == '.bz2'){
+ $ret = bzfile($file);
+ }else{
+ $ret = file_get_contents($file);
+ }
+ }
+ if($clean){
+ return cleanText($ret);
+ }else{
+ return $ret;
+ }
+}
+/**
+ * Returns the content of a .bz2 compressed file as string
+ * @author marcel senf <marcel@rucksackreinigung.de>
+ */
+
+function bzfile($file){
+ $bz = bzopen($file,"r");
+ while (!feof($bz)){
+ //8192 seems to be the maximum buffersize?
+ $str = $str . bzread($bz,8192);
+ }
+ bzclose($bz);
+ return $str;
+}
+
+
+/**
+ * Used to write out a DokuWiki page to file, and send IO_WIKIPAGE_WRITE events.
+ *
+ * This generates an action event and delegates to io_saveFile().
+ * Action plugins are allowed to modify the page content in transit.
+ * The file path should not be changed.
+ * (The append parameter is set to false.)
+ *
+ * Event data:
+ * $data[0] The raw arguments for io_saveFile as an array.
+ * $data[1] ns: The colon separated namespace path minus the trailing page name. (false if root ns)
+ * $data[2] page_name: The wiki page name.
+ * $data[3] rev: The page revision, false for current wiki pages.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function io_writeWikiPage($file, $content, $id, $rev=false) {
+ if (empty($rev)) { $rev = false; }
+ if ($rev===false) { io_createNamespace($id); } // create namespaces as needed
+ $data = array(array($file, $content, false), getNS($id), noNS($id), $rev);
+ return trigger_event('IO_WIKIPAGE_WRITE', $data, '_io_writeWikiPage_action', false);
+}
+
+/**
+ * Callback adapter for io_saveFile().
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function _io_writeWikiPage_action($data) {
+ if (is_array($data) && is_array($data[0]) && count($data[0])===3) {
+ return call_user_func_array('io_saveFile', $data[0]);
+ } else {
+ return false; //callback error
+ }
+}
+
+/**
+ * Saves $content to $file.
+ *
+ * If the third parameter is set to true the given content
+ * will be appended.
+ *
+ * Uses gzip if extension is .gz
+ * and bz2 if extension is .bz2
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return bool true on success
+ */
+function io_saveFile($file,$content,$append=false){
+ global $conf;
+ $mode = ($append) ? 'ab' : 'wb';
+
+ $fileexists = @file_exists($file);
+ io_makeFileDir($file);
+ io_lock($file);
+ if(substr($file,-3) == '.gz'){
+ $fh = @gzopen($file,$mode.'9');
+ if(!$fh){
+ msg("Writing $file failed",-1);
+ io_unlock($file);
+ return false;
+ }
+ gzwrite($fh, $content);
+ gzclose($fh);
+ }else if(substr($file,-4) == '.bz2'){
+ $fh = @bzopen($file,$mode{0});
+ if(!$fh){
+ msg("Writing $file failed", -1);
+ io_unlock($file);
+ return false;
+ }
+ bzwrite($fh, $content);
+ bzclose($fh);
+ }else{
+ $fh = @fopen($file,$mode);
+ if(!$fh){
+ msg("Writing $file failed",-1);
+ io_unlock($file);
+ return false;
+ }
+ fwrite($fh, $content);
+ fclose($fh);
+ }
+
+ if(!$fileexists and !empty($conf['fperm'])) chmod($file, $conf['fperm']);
+ io_unlock($file);
+ return true;
+}
+
+/**
+ * Delete exact linematch for $badline from $file.
+ *
+ * Be sure to include the trailing newline in $badline
+ *
+ * Uses gzip if extension is .gz
+ *
+ * 2005-10-14 : added regex option -- Christopher Smith <chris@jalakai.co.uk>
+ *
+ * @author Steven Danz <steven-danz@kc.rr.com>
+ * @return bool true on success
+ */
+function io_deleteFromFile($file,$badline,$regex=false){
+ if (!@file_exists($file)) return true;
+
+ io_lock($file);
+
+ // load into array
+ if(substr($file,-3) == '.gz'){
+ $lines = gzfile($file);
+ }else{
+ $lines = file($file);
+ }
+
+ // remove all matching lines
+ if ($regex) {
+ $lines = preg_grep($badline,$lines,PREG_GREP_INVERT);
+ } else {
+ $pos = array_search($badline,$lines); //return null or false if not found
+ while(is_int($pos)){
+ unset($lines[$pos]);
+ $pos = array_search($badline,$lines);
+ }
+ }
+
+ if(count($lines)){
+ $content = join('',$lines);
+ if(substr($file,-3) == '.gz'){
+ $fh = @gzopen($file,'wb9');
+ if(!$fh){
+ msg("Removing content from $file failed",-1);
+ io_unlock($file);
+ return false;
+ }
+ gzwrite($fh, $content);
+ gzclose($fh);
+ }else{
+ $fh = @fopen($file,'wb');
+ if(!$fh){
+ msg("Removing content from $file failed",-1);
+ io_unlock($file);
+ return false;
+ }
+ fwrite($fh, $content);
+ fclose($fh);
+ }
+ }else{
+ @unlink($file);
+ }
+
+ io_unlock($file);
+ return true;
+}
+
+/**
+ * Tries to lock a file
+ *
+ * Locking is only done for io_savefile and uses directories
+ * inside $conf['lockdir']
+ *
+ * It waits maximal 3 seconds for the lock, after this time
+ * the lock is assumed to be stale and the function goes on
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function io_lock($file){
+ global $conf;
+ // no locking if safemode hack
+ if($conf['safemodehack']) return;
+
+ $lockDir = $conf['lockdir'].'/'.md5($file);
+ @ignore_user_abort(1);
+
+ $timeStart = time();
+ do {
+ //waited longer than 3 seconds? -> stale lock
+ if ((time() - $timeStart) > 3) break;
+ $locked = @mkdir($lockDir, $conf['dmode']);
+ if($locked){
+ if(!empty($conf['dperm'])) chmod($lockDir, $conf['dperm']);
+ break;
+ }
+ usleep(50);
+ } while ($locked === false);
+}
+
+/**
+ * Unlocks a file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function io_unlock($file){
+ global $conf;
+ // no locking if safemode hack
+ if($conf['safemodehack']) return;
+
+ $lockDir = $conf['lockdir'].'/'.md5($file);
+ @rmdir($lockDir);
+ @ignore_user_abort(0);
+}
+
+/**
+ * Create missing namespace directories and send the IO_NAMESPACE_CREATED events
+ * in the order of directory creation. (Parent directories first.)
+ *
+ * Event data:
+ * $data[0] ns: The colon separated namespace path minus the trailing page name.
+ * $data[1] ns_type: 'pages' or 'media' namespace tree.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function io_createNamespace($id, $ns_type='pages') {
+ // verify ns_type
+ $types = array('pages'=>'wikiFN', 'media'=>'mediaFN');
+ if (!isset($types[$ns_type])) {
+ trigger_error('Bad $ns_type parameter for io_createNamespace().');
+ return;
+ }
+ // make event list
+ $missing = array();
+ $ns_stack = explode(':', $id);
+ $ns = $id;
+ $tmp = dirname( $file = call_user_func($types[$ns_type], $ns) );
+ while (!@is_dir($tmp) && !(@file_exists($tmp) && !is_dir($tmp))) {
+ array_pop($ns_stack);
+ $ns = implode(':', $ns_stack);
+ if (strlen($ns)==0) { break; }
+ $missing[] = $ns;
+ $tmp = dirname(call_user_func($types[$ns_type], $ns));
+ }
+ // make directories
+ io_makeFileDir($file);
+ // send the events
+ $missing = array_reverse($missing); // inside out
+ foreach ($missing as $ns) {
+ $data = array($ns, $ns_type);
+ trigger_event('IO_NAMESPACE_CREATED', $data);
+ }
+}
+
+/**
+ * Create the directory needed for the given file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function io_makeFileDir($file){
+ global $conf;
+
+ $dir = dirname($file);
+ if(!@is_dir($dir)){
+ io_mkdir_p($dir) || msg("Creating directory $dir failed",-1);
+ }
+}
+
+/**
+ * Creates a directory hierachy.
+ *
+ * @link http://www.php.net/manual/en/function.mkdir.php
+ * @author <saint@corenova.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function io_mkdir_p($target){
+ global $conf;
+ if (@is_dir($target)||empty($target)) return 1; // best case check first
+ if (@file_exists($target) && !is_dir($target)) return 0;
+ //recursion
+ if (io_mkdir_p(substr($target,0,strrpos($target,'/')))){
+ if($conf['safemodehack']){
+ $dir = preg_replace('/^'.preg_quote(fullpath($conf['ftp']['root']),'/').'/','', $target);
+ return io_mkdir_ftp($dir);
+ }else{
+ $ret = @mkdir($target,$conf['dmode']); // crawl back up & create dir tree
+ if($ret && $conf['dperm']) chmod($target, $conf['dperm']);
+ return $ret;
+ }
+ }
+ return 0;
+}
+
+/**
+ * Creates a directory using FTP
+ *
+ * This is used when the safemode workaround is enabled
+ *
+ * @author <andi@splitbrain.org>
+ */
+function io_mkdir_ftp($dir){
+ global $conf;
+
+ if(!function_exists('ftp_connect')){
+ msg("FTP support not found - safemode workaround not usable",-1);
+ return false;
+ }
+
+ $conn = @ftp_connect($conf['ftp']['host'],$conf['ftp']['port'],10);
+ if(!$conn){
+ msg("FTP connection failed",-1);
+ return false;
+ }
+
+ if(!@ftp_login($conn, $conf['ftp']['user'], conf_decodeString($conf['ftp']['pass']))){
+ msg("FTP login failed",-1);
+ return false;
+ }
+
+ //create directory
+ $ok = @ftp_mkdir($conn, $dir);
+ //set permissions
+ @ftp_site($conn,sprintf("CHMOD %04o %s",$conf['dmode'],$dir));
+
+ @ftp_close($conn);
+ return $ok;
+}
+
+/**
+ * Creates a unique temporary directory and returns
+ * its path.
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function io_mktmpdir() {
+ global $conf;
+
+ $base = $conf['tmpdir'];
+ $dir = md5(uniqid(mt_rand(), true));
+ $tmpdir = $base.'/'.$dir;
+
+ if(io_mkdir_p($tmpdir)) {
+ return($tmpdir);
+ } else {
+ return false;
+ }
+}
+
+/**
+ * downloads a file from the net and saves it
+ *
+ * if $useAttachment is false,
+ * - $file is the full filename to save the file, incl. path
+ * - if successful will return true, false otherwise
+ *
+ * if $useAttachment is true,
+ * - $file is the directory where the file should be saved
+ * - if successful will return the name used for the saved file, false otherwise
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function io_download($url,$file,$useAttachment=false,$defaultName='',$maxSize=2097152){
+ global $conf;
+ $http = new DokuHTTPClient();
+ $http->max_bodysize = $maxSize;
+ $http->timeout = 25; //max. 25 sec
+
+ $data = $http->get($url);
+ if(!$data) return false;
+
+ if ($useAttachment) {
+ $name = '';
+ if (isset($http->resp_headers['content-disposition'])) {
+ $content_disposition = $http->resp_headers['content-disposition'];
+ $match=array();
+ if (is_string($content_disposition) &&
+ preg_match('/attachment;\s*filename\s*=\s*"([^"]*)"/i', $content_disposition, $match)) {
+
+ $name = basename($match[1]);
+ }
+
+ }
+
+ if (!$name) {
+ if (!$defaultName) return false;
+ $name = $defaultName;
+ }
+
+ $file = $file.$name;
+ }
+
+ $fileexists = @file_exists($file);
+ $fp = @fopen($file,"w");
+ if(!$fp) return false;
+ fwrite($fp,$data);
+ fclose($fp);
+ if(!$fileexists and $conf['fperm']) chmod($file, $conf['fperm']);
+ if ($useAttachment) return $name;
+ return true;
+}
+
+/**
+ * Windows compatible rename
+ *
+ * rename() can not overwrite existing files on Windows
+ * this function will use copy/unlink instead
+ */
+function io_rename($from,$to){
+ global $conf;
+ if(!@rename($from,$to)){
+ if(@copy($from,$to)){
+ if($conf['fperm']) chmod($to, $conf['fperm']);
+ @unlink($from);
+ return true;
+ }
+ return false;
+ }
+ return true;
+}
+
+
+/**
+ * Runs an external command and returns it's output as string
+ *
+ * @author Harry Brueckner <harry_b@eml.cc>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @deprecated
+ */
+function io_runcmd($cmd){
+ $fh = popen($cmd, "r");
+ if(!$fh) return false;
+ $ret = '';
+ while (!feof($fh)) {
+ $ret .= fread($fh, 8192);
+ }
+ pclose($fh);
+ return $ret;
+}
+
+/**
+ * Search a file for matching lines
+ *
+ * This is probably not faster than file()+preg_grep() but less
+ * memory intensive because not the whole file needs to be loaded
+ * at once.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $file The file to search
+ * @param string $pattern PCRE pattern
+ * @param int $max How many lines to return (0 for all)
+ * @param bool $baxkref When true returns array with backreferences instead of lines
+ * @return matching lines or backref, false on error
+ */
+function io_grep($file,$pattern,$max=0,$backref=false){
+ $fh = @fopen($file,'r');
+ if(!$fh) return false;
+ $matches = array();
+
+ $cnt = 0;
+ $line = '';
+ while (!feof($fh)) {
+ $line .= fgets($fh, 4096); // read full line
+ if(substr($line,-1) != "\n") continue;
+
+ // check if line matches
+ if(preg_match($pattern,$line,$match)){
+ if($backref){
+ $matches[] = $match;
+ }else{
+ $matches[] = $line;
+ }
+ $cnt++;
+ }
+ if($max && $max == $cnt) break;
+ $line = '';
+ }
+ fclose($fh);
+ return $matches;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php
new file mode 100644
index 000000000..fce59d13e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * af language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesAf.php?view=co
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['btn_edit'] = 'Wysig hierdie bladsy';
+$lang['btn_source'] = 'Bekyk bronteks';
+$lang['btn_search'] = 'Soek';
+$lang['btn_preview'] = 'Voorskou';
+$lang['btn_revs'] = 'geskiedenis';
+$lang['btn_recent'] = 'Onlangse wysigings';
+$lang['btn_cancel'] = 'Kanselleer';
+$lang['btn_secedit'] = 'Wysig';
+$lang['btn_login'] = 'Teken in';
+$lang['btn_logout'] = 'Teken uit';
+$lang['btn_back'] = 'Terug';
+$lang['btn_backlink'] = 'Wat skakel hierheen';
+$lang['btn_subscribe'] = 'Hou bladsy dop';
+$lang['btn_unsubscribe'] = 'Verwyder van bladsy dophoulys';
+$lang['btn_resendpwd'] = 'E-pos nuwe wagwoord';
+$lang['loggedinas'] = 'Ingeteken as';
+$lang['user'] = 'Gebruikernaam';
+$lang['pass'] = 'Wagwoord';
+$lang['newpass'] = 'Nuive wagwoord';
+$lang['oldpass'] = 'Ou wagwoord';
+$lang['passchk'] = 'Herhaal wagwoord';
+$lang['remember'] = 'Onthou my wagwoord oor sessies';
+$lang['fullname'] = 'Regte naam';
+$lang['email'] = 'E-pos';
+$lang['register'] = 'Skep gerus \'n rekening';
+$lang['badlogin'] = 'Intekenfout';
+$lang['minoredit'] = 'Klein wysiging';
+$lang['reguexists'] = 'Die gebruikersnaam wat jy gebruik het, is alreeds gebruik. Kies asseblief \'n ander gebruikersnaam.';
+$lang['regsuccess2'] = 'Rekening geskep';
+$lang['regbadpass'] = 'Die ingetikte wagwoorde is nie dieselfde nie.';
+$lang['regpwmail'] = 'Jo DokuWiki wagwoord';
+$lang['profnoempty'] = 'Jy moet \'n name en a e-posadres in sit';
+$lang['resendpwd'] = 'Stuir vir a niwe wagwoord';
+$lang['resendpwdmissing'] = 'Jammer, jy moet ales in fil';
+$lang['resendpwdconfirm'] = '\'n Bevestigingpos is gestuur na die gekose e-posadres.';
+$lang['resendpwdsuccess'] = 'Jou nuive wagwoord was deur e-pos gesteur';
+$lang['fileupload'] = 'Laai lêer';
+$lang['uploadsucc'] = 'Laai suksesvol';
+$lang['uploadfail'] = 'Laai fout';
+$lang['js']['hidedetails'] = 'Steek weg';
+$lang['mediaroot'] = 'root';
+$lang['toc'] = 'Inhoud';
+$lang['current'] = 'huidige';
+$lang['line'] = 'Streak';
+$lang['youarehere'] = 'Jy is hier';
+$lang['by'] = 'by';
+$lang['restored'] = 'Het terug gegaan na vroeëre weergawe';
+$lang['summary'] = 'Voorskou';
+$lang['qb_bold'] = 'Vetdruk';
+$lang['qb_italic'] = 'Skuinsdruk';
+$lang['qb_link'] = 'Interne skakel';
+$lang['qb_extlink'] = 'Eksterne skakel';
+$lang['qb_hr'] = 'Horisontale streep';
+$lang['qb_sig'] = 'Handtekening met datum';
+$lang['admin_register'] = 'Skep gerus \'n rekening';
+$lang['img_backto'] = 'Terug na';
+$lang['img_date'] = 'Datem';
+$lang['img_camera'] = 'Camera';
+$lang['i_wikiname'] = 'Wiki Naam';
+$lang['i_funcna'] = 'PHP funksie <code>%s</code> is nie beskibaar nie. Miskien is dit af gehaal.';
+$lang['mu_toobig'] = 'te groet';
+$lang['mu_done'] = 'klaar';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt
new file mode 100644
index 000000000..7edee8a2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt
@@ -0,0 +1,3 @@
+====== الأدارة ======
+
+قائمة بالمهام الإدارية المتاحة ÙÙ‰ دوكي ويكي. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt
new file mode 100644
index 000000000..f6d24f413
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt
@@ -0,0 +1,3 @@
+====== إرتباطات ======
+
+هذه قائمة بالصÙحات المرتبطة بالصÙحة الحالية. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt
new file mode 100644
index 000000000..4d7c4e8e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt
@@ -0,0 +1,5 @@
+====== يوجد نسخة أحدث ======
+
+يوجد نسخة أحدث من هذه الصÙحة. يحدث هذا عندما يحرر مشترك آخر الصÙحة أثناء تعديلك لها.
+
+اÙحص الاختلاÙات جيداً، ثم حدد أية نسخة تحÙظ. بالضغط على "Ø­Ùظ" ستحÙظ نسختك. أما بالضغط على "إلغاء" ÙستحاÙظ على النسخة الحالية. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt
new file mode 100644
index 000000000..0703697b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt
@@ -0,0 +1,3 @@
+====== ممنوع ======
+
+عذرا، ليس مصرح لك الاستمرار، لعلك نسيت تسجيل الدخول \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt
new file mode 100644
index 000000000..ed1937c2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt
@@ -0,0 +1,3 @@
+====== اختلاÙات ======
+
+عرض الاختلاÙات بين النسخة المختارة Ùˆ النسخة الحالية من الصÙحة. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt
new file mode 100644
index 000000000..a6221b0df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt
@@ -0,0 +1,5 @@
+====== وجدت مسوّدة ======
+
+إن تعديلك لهذه الصÙحة ÙÙŠ المرة الماضية لم يتم بشكل صحيح، Ø­Ùظت دوكي ويكي آلياً مسوّدة من عملك الأخير الذي يمكنك استخدامه الآن لمتابعة التعديل. Ùيما يلي البيانات التي Ø­Ùظت من المرة الماضية.
+
+يرجى أن تقرر إن كنت تريد //استعادة// عملك السابق أو //حذÙ// المسوّدة أو //إلغاء// عملية التحرير.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt
new file mode 100644
index 000000000..d4e1eb43b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt
@@ -0,0 +1 @@
+حرر هذه الصÙحة ثم اضغط على "Ø­Ùظ". انظر [[wiki:syntax|دليل الصياغة]] لمعرÙØ© صيغة الويكي. يرجى تعديل الصÙحة Ùقط إذا كنت ستحسنها. إذا رغبت ÙÙ‰ اختبار شيء ما، تعلم الخطوات الأولى ÙÙ‰ [[playground:playground|الملعب]]. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt
new file mode 100644
index 000000000..a51fe9436
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt
@@ -0,0 +1,2 @@
+**لقد حملت نسخة قديمة من الصÙحة!** إذا Ø­Ùظتها، سيتم إنشاء نسخة جديدة بهذه المعلومات.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt
new file mode 100644
index 000000000..43840ec26
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt
@@ -0,0 +1,3 @@
+====== Ùهرس ======
+
+هذا Ùهرس لجميع الصÙحات مرتبة حسب [[doku>namespaces|namespaces]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php
new file mode 100644
index 000000000..2ba1f7e9f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php
@@ -0,0 +1,223 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Mostafa Hussein <mostafa@gmail.com>
+ * @author Yaman Hokan <always.smile.yh@hotmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'rtl';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = 'Ø›';
+$lang['btn_edit'] = 'تحرير هذه الصÙحة';
+$lang['btn_source'] = 'عرض مصدر الصÙحة';
+$lang['btn_show'] = 'عرض الصÙحة';
+$lang['btn_create'] = 'إنشاء هذه الصÙحة';
+$lang['btn_search'] = 'بحث';
+$lang['btn_save'] = 'Ø­Ùظ';
+$lang['btn_preview'] = 'استعراض';
+$lang['btn_top'] = 'لأعلى';
+$lang['btn_newer'] = '<< أحدث';
+$lang['btn_older'] = 'أقدم >>';
+$lang['btn_revs'] = 'نسخ قديمة';
+$lang['btn_recent'] = 'أحدث التعديلات';
+$lang['btn_upload'] = 'تحميل';
+$lang['btn_cancel'] = 'إلغاء';
+$lang['btn_index'] = 'Ùهرس';
+$lang['btn_secedit'] = 'تحرير';
+$lang['btn_login'] = 'دخول';
+$lang['btn_logout'] = 'خروج';
+$lang['btn_admin'] = 'المدير';
+$lang['btn_update'] = 'تحديث';
+$lang['btn_delete'] = 'حذÙ';
+$lang['btn_back'] = 'رجوع';
+$lang['btn_backlink'] = 'ارتباطات';
+$lang['btn_backtomedia'] = 'رجوع إلى اختيار مل٠الوسائط';
+$lang['btn_subscribe'] = 'اشترك ÙÙŠ التعديلات';
+$lang['btn_unsubscribe'] = 'إلغاء الاشتراك ÙÙŠ التعديلات';
+$lang['btn_profile'] = 'تحديث المل٠الشخصي';
+$lang['btn_reset'] = 'تÙريغ';
+$lang['btn_resendpwd'] = 'إرسال كلمة مرور جديدة';
+$lang['btn_draft'] = 'تحرير المسوّدة';
+$lang['btn_recover'] = 'استعادة المسوّدة';
+$lang['btn_draftdel'] = 'حذ٠المسوّدة';
+$lang['btn_revert'] = 'إعادة';
+$lang['loggedinas'] = 'دخول باسم';
+$lang['user'] = 'اسم المشترك';
+$lang['pass'] = 'كلمة المرور';
+$lang['newpass'] = 'كلمة مرور جديدة';
+$lang['oldpass'] = 'تأكيد كلمة المرور الحالية';
+$lang['passchk'] = 'مرة أخرى';
+$lang['remember'] = 'تذكرني';
+$lang['fullname'] = 'الاسم الكامل';
+$lang['email'] = 'البريد الإلكتروني';
+$lang['register'] = 'تسجيل';
+$lang['profile'] = 'المل٠الشخصي';
+$lang['badlogin'] = 'عذرا، اسم المشترك أو كلمة المرور غير صحيحة';
+$lang['minoredit'] = 'تعديلات Ø·ÙÙŠÙØ©';
+$lang['draftdate'] = 'تشغيل Ø­Ùظ المسوّدة آلياً';
+$lang['regmissing'] = 'عذرا، يجب ملء جميع الخانات';
+$lang['reguexists'] = 'عذرا، يوجد مشترك بنÙس الاسم';
+$lang['regsuccess'] = 'تم تسجيل المشترك و أرسلت كلمة المرور عبر البريد الإلكتروني';
+$lang['regsuccess2'] = 'تم إنشاء المشترك';
+$lang['regmailfail'] = 'حدث خطأ ÙÙ‰ إرسال رسالة كلمة المرور. يرجى مراسلة المدير';
+$lang['regbadmail'] = 'البريد الإلكتروني المعطى غير صحيح، إن كنت تظن الخطأ من الموقع راسل المدير';
+$lang['regbadpass'] = 'كلمتى المرور غير متطابقتين، حاول مرة أخرى';
+$lang['regpwmail'] = 'كلمة مرورك إلى دوكي ويكي';
+$lang['reghere'] = 'لست مشتركاً؟ تÙضل اشترك';
+$lang['profna'] = 'هذه الويكي لا تدعم تعديل المل٠الشخصي';
+$lang['profnochange'] = 'لا تغييرات، لا شيء مطلوب عمله';
+$lang['profnoempty'] = 'ليس مسموحاً ترك الاسم أو البريد الإلكتروني Ùارغاً';
+$lang['profchanged'] = 'تم تحديث المل٠الشخصي بنجاح';
+$lang['pwdforget'] = 'نسيت كلمة المرور؟ احصل على واحدة جديدة';
+$lang['resendna'] = 'هذه الويكي لا تدعم إعادة إرسال كلمة المرور';
+$lang['resendpwd'] = 'إرسال كلمة المرور إلى';
+$lang['resendpwdmissing'] = 'عذراّ، يجب أن تملأ جميع الخانات';
+$lang['resendpwdnouser'] = 'عذراً، لدينا هذا المشترك ÙÙŠ قاعدة بياناتنا';
+$lang['resendpwdbadauth'] = 'عذراً، رمز التÙعيل هذا غير صحيح. نأكد أنك استخدمت كامل وصلة التأكيد';
+$lang['resendpwdconfirm'] = 'تم إرسال وصلة تأكيد إلى بريدك الإلكتروني';
+$lang['resendpwdsuccess'] = 'كلمة مرورك الجديدة تم إرسالها عبر البريد الإلكتروني';
+$lang['searchmedia'] = 'البحث عن اسم المل٠: ';
+$lang['txt_upload'] = 'اختر ملÙاً للتحميل';
+$lang['txt_filename'] = 'تحميل باسم - اختياري';
+$lang['txt_overwrt'] = 'الكتابة على مل٠موجود بنÙس الاسم مسموحة';
+$lang['lockedby'] = 'حالياً مقÙول بواسطة';
+$lang['lockexpire'] = 'سينتهي القÙÙ„ ÙÙŠ';
+$lang['willexpire'] = 'سينتهي Ù‚ÙÙ„ تحرير هذه الصÙحه خلال دقيقة. لتجنب التعارض استخدم زر استعراض لبدأ القÙÙ„ من جديد';
+$lang['notsavedyet'] = 'التعديلات التي لم تحÙظ ستÙقد. أمواÙÙ‚ ØŸ';
+$lang['rssfailed'] = 'خطأ ما حدث أثناء جلب مل٠التغذية:';
+$lang['nothingfound'] = 'لا يوجد شيء';
+$lang['mediaselect'] = 'ملÙات الوسائط المتعددة';
+$lang['fileupload'] = 'تحميل مل٠وسائط متعددة';
+$lang['uploadsucc'] = 'تم التحميل بنجاح';
+$lang['uploadfail'] = 'Ùشل التحميل، قد يكون الخطأ ÙÙ‰ التراخيص؟';
+$lang['uploadwrong'] = 'التحميل ممنوع، نوع المل٠مرÙوض!';
+$lang['uploadexist'] = 'المل٠موجود أصلاً. لم يحدث شيء';
+$lang['uploadbadcontent'] = 'المحتوى المحمّل لم يتطابق مع نوع المل٠%s';
+$lang['uploadspam'] = 'التحميل محجوب بواسطة القائمة السوداء لبرنامج تقÙÙŠ التطÙÙ„';
+$lang['uploadxss'] = 'التحميل محجوب لمنع المحتويات الخبيثة';
+$lang['uploadsize'] = 'المل٠الذي تم رÙعه كبير جدا . ( الحد الأقصى %s )';
+$lang['deletesucc'] = 'تم حذ٠المل٠"%s"';
+$lang['deletefail'] = 'لا يمكن حذ٠"%s"، تأكد من تراخيصك';
+$lang['mediainuse'] = 'لم يحذ٠المل٠"%s"، مازال موجوداً';
+$lang['namespaces'] = 'Ùضاء التسمية';
+$lang['mediafiles'] = 'ملÙات موجودة ÙÙŠ';
+$lang['js']['searchmedia'] = 'البحث عن الملÙات';
+$lang['js']['keepopen'] = 'أبقي الناÙذة Ù…Ùتوحة أثناء الاختيار';
+$lang['js']['hidedetails'] = 'إخÙاء التÙاصيل';
+$lang['js']['nosmblinks'] = 'الروابط لمجلدات ويندوز المشاركة تعمل Ùقط مع متصÙØ­ مايكروسÙت Internet Explorer. ما زال بإمكانك قص Ùˆ لصق الرابط.';
+$lang['js']['linkto'] = 'الرابط إلى :';
+$lang['js']['del_confirm'] = 'هل حقاً تريد حذ٠البنود المختارة؟';
+$lang['js']['mu_btn'] = 'رÙع عدة ملÙات ÙÙŠ وقت واحد';
+$lang['mediausage'] = 'استخدم هذه الصياغة للدلالة على هذا الملÙ:';
+$lang['mediaview'] = 'عرض المل٠الأصلي';
+$lang['mediaroot'] = 'الجذر';
+$lang['mediaupload'] = 'تحميل مل٠إلى Ùضاء التسمية هنا. لإنشاء Ùضاءات تسمية Ùرعية، أضÙها إلى بداية خانة تحميل باسم واÙصل بينها باستخدام الÙواصل';
+$lang['mediaextchange'] = 'تم تغيير نوع المل٠من .%s إلى .%s!';
+$lang['reference'] = 'مراجع لـ';
+$lang['ref_inuse'] = 'لا يمكن حذ٠الملÙØŒ لأنه مستخدم من قبل الصÙحات التالية:';
+$lang['ref_hidden'] = 'بعض المراجع لصÙاحات لا تملك ترخيص برؤيتها';
+$lang['hits'] = 'زوار';
+$lang['quickhits'] = 'صÙحات بهذا الاسم';
+$lang['toc'] = 'جدول المحتويات';
+$lang['current'] = 'حالي';
+$lang['yours'] = 'نسختك';
+$lang['diff'] = 'مقارنة بالنسخة الحالية';
+$lang['diff2'] = 'مقارنة بين النسخ المختارة';
+$lang['line'] = 'سطر';
+$lang['breadcrumb'] = 'أثر';
+$lang['youarehere'] = 'أنت هنا';
+$lang['lastmod'] = 'آخر تعديل';
+$lang['by'] = 'بواسطة';
+$lang['deleted'] = 'تم حذÙ';
+$lang['created'] = 'تم إنشاء';
+$lang['restored'] = 'عودة لنسخة قديمة';
+$lang['external_edit'] = 'تحرير خارجي';
+$lang['summary'] = 'ملخص التحرير';
+$lang['mail_newpage'] = 'إضاÙØ© صÙحة:';
+$lang['mail_changed'] = 'تعديل صÙحة:';
+$lang['mail_new_user'] = 'مشترك جديد';
+$lang['mail_upload'] = 'تحميل ملÙ:';
+$lang['qb_bold'] = 'نص عريض';
+$lang['qb_italic'] = 'نص مائل';
+$lang['qb_underl'] = 'نص مسطر';
+$lang['qb_code'] = 'نص برمجي';
+$lang['qb_strike'] = 'نص مشطوب';
+$lang['qb_h1'] = 'عنوان مستوى أول';
+$lang['qb_h2'] = 'عنوان مستوى ثاني';
+$lang['qb_h3'] = 'عنوان مستوى ثالث';
+$lang['qb_h4'] = 'عنوان مستوى رابع';
+$lang['qb_h5'] = 'عنوان مستوى خامس';
+$lang['qb_link'] = 'رابط داخلي';
+$lang['qb_extlink'] = 'رابط خارجي';
+$lang['qb_hr'] = 'سطر Ø£Ùقي';
+$lang['qb_ol'] = 'بند ÙÙ‰ قائمة مرتبة';
+$lang['qb_ul'] = 'بند ÙÙ‰ قائمة غير مرتبة';
+$lang['qb_media'] = 'إضاÙØ© صور Ùˆ ملÙات أخرى';
+$lang['qb_sig'] = 'أض٠توقيعك';
+$lang['qb_smileys'] = 'الابتسامات';
+$lang['qb_chars'] = 'محار٠خاصة';
+$lang['admin_register'] = 'إضاÙØ© مشترك جديد';
+$lang['metaedit'] = 'تحرير البيانات الشمولية ';
+$lang['metasaveerr'] = 'Ùشلت عملية كتابة البيانات الشمولية';
+$lang['metasaveok'] = 'تم Ø­Ùظ البيانت الشمولية';
+$lang['img_backto'] = 'العودة إلى';
+$lang['img_title'] = 'العنوان';
+$lang['img_caption'] = 'تنويه الصورة';
+$lang['img_date'] = 'التاريخ';
+$lang['img_fname'] = 'اسم الملÙ';
+$lang['img_fsize'] = 'الحجم';
+$lang['img_artist'] = 'المصور';
+$lang['img_copyr'] = 'حقوق النسخ';
+$lang['img_format'] = 'صيغ رسومية';
+$lang['img_camera'] = 'آلة التصوير';
+$lang['img_keywords'] = 'كلمات Ù…Ùتاحية';
+$lang['subscribe_success'] = 'تم إضاÙØ© %s لقائمة الاشتراكات %s';
+$lang['subscribe_error'] = 'حدث خطأ ÙÙ‰ إضاÙØ© %s لقائمة الاشتراكات %s';
+$lang['subscribe_noaddress'] = 'لا يوجد عنوان مرÙÙ‚ مع بيانات تسجيلك، لا يمكن إضاÙتك إلى قائمة الاشتراكات';
+$lang['unsubscribe_success'] = 'تم حذÙ%s من قائمة الاشتراكات %s';
+$lang['unsubscribe_error'] = 'حدث خطأ ÙÙ‰ حذ٠%s من قائمة الاشتراكات %s';
+$lang['authmodfailed'] = 'إعدادات تصريح Ùاسدة، يرجى مراسلة المدير.';
+$lang['authtempfail'] = 'تصريح المشترك غير متوÙر مؤقتاً، إن استمرت هذه الحالة يرجى مراسلة المدير';
+$lang['i_chooselang'] = 'اختر لغتك';
+$lang['i_installer'] = 'برنامج تنصيب دوكي ويكي';
+$lang['i_wikiname'] = 'اسم الويكي';
+$lang['i_enableacl'] = 'تÙعيل ACL - Ù…Ùضل';
+$lang['i_superuser'] = 'مشرÙ';
+$lang['i_problems'] = 'وجد برنامج التنصيب المشاكل التالية، لا يمكنك المتابعة قبل حلها.';
+$lang['i_modified'] = 'لأسباب أمنية هذا البرنامج سيعمل Ùقط مع تنصيب دوكي ويكي جديد Ùˆ غير معدّل.
+يجب أن تعيد ÙÙƒ ضغط الملÙات مرة أخرى من المكتبة المضغوطة، أو راجع <a href="http://dokuwiki.org/install"> تعليمات تنصيب دوكي ويكي </a> ';
+$lang['i_funcna'] = 'دالة PHP التالية غير متوÙرة.
+<code>%s</code>
+قد يكون مزود خدمة الاستÙادة قد حجبها لسبب ما.';
+$lang['i_phpver'] = 'نسخة PHP التي لديك هي
+<code>%s</code>
+وهي أقل من النسخة المطلوبة
+<code>%s</code>
+عليك تحديث نسخة PHP';
+$lang['i_permfail'] = 'إن <code>%s</code> غير قابل للكتابة بواسطة دوكي ويكي، عليك تعديل إعدادات الصلاحيات لهذا المجلد!';
+$lang['i_confexists'] = 'إن <code>%s</code> موجود أصلاً';
+$lang['i_writeerr'] = 'لا يمكن إنشاء <code>%s</code>، عليك التأكد من صلاحيات المل٠أو المجلد وإنشاء المل٠يدوياً.';
+$lang['i_badhash'] = 'المل٠dokuwiki.php غير مصن٠أو قد تم تعديله
+(hash=<code>%s</code>)';
+$lang['i_badval'] = 'القيمة <code>%s</code> غير شرعية أو Ùارغة';
+$lang['i_success'] = 'الإعدادات تمت بنجاح، يرجى حذ٠المل٠install.php الآن.
+ثم تابع إلى <a href="doku.php"> دوكي ويكي الجديدة</a>';
+$lang['i_failure'] = 'بعض الأخطاء حدثت أثنا كتابة ملÙات الإعدادات، عليك تعديلها يدوياً قبل أن تستطيع استخدام <a href="doku.php"> دوكي ويكي الجديدة</a>';
+$lang['i_policy'] = 'تصريح ACL مبدئي';
+$lang['i_pol0'] = 'ويكي Ù…Ùتوحة؛ أي القراءة والكتابة والتحميل مسموحة للجميع';
+$lang['i_pol1'] = 'ويكي عامة؛ أي القراءة للجميع ولكن الكتابة والتحميل للمشتركين المسجلين Ùقط';
+$lang['i_pol2'] = 'ويكي مغلقة؛ أي القراءة والكتابة والتحميل للمشتركين المسجلين Ùقط';
+$lang['i_retry'] = 'إعادة المحاولة';
+$lang['mu_gridname'] = 'اسم الملÙ';
+$lang['mu_gridsize'] = 'الحجم';
+$lang['mu_gridstat'] = 'الحالة';
+$lang['mu_toobig'] = 'كبير جدا';
+$lang['mu_ready'] = 'جاهز للرÙع';
+$lang['mu_done'] = 'اكتمل';
+$lang['mu_fail'] = 'Ùشل';
+$lang['mu_info'] = 'تم رÙع الملÙات';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt
new file mode 100644
index 000000000..72e9be535
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt
@@ -0,0 +1,3 @@
+====== الصÙحة مقÙلة ======
+
+هذه الصÙحة مقÙلة للتحرير بواسطة مستخدم أخر. عليك أن تنتظر حتى ينتهى من تعديلاتة أو تتنتهى مدة القÙÙ„. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt
new file mode 100644
index 000000000..00ffccdd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt
@@ -0,0 +1,3 @@
+====== دخول ======
+
+أنت لست مسجل دخولك. أدخل بيانات تسجيلك للدخول. يجب أن يكون مسموح للمتصÙØ­ بأستخدام الكوكي.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt
new file mode 100644
index 000000000..541d28da2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt
@@ -0,0 +1,17 @@
+تم تغيير أو أضاÙØ© صÙحة ÙÙ‰ دوكيويكي. اليك التÙاصيل:
+
+التاريخ : @DATE@
+المتصÙØ­ : @BROWSER@
+عنوان الـIP : @IPADDRESS@
+أسم الجهاز : @HOSTNAME@
+النسخة القديمة: @OLDPAGE@
+النسخة الجديدة: @NEWPAGE@
+ملخص التحرير: @SUMMARY@
+مستخدم : @USER@
+
+@DIFF@
+
+
+--
+تم أرسال هذه الرسالة من الدوكيويكي المتوجدة ÙÙ‰
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt
new file mode 100644
index 000000000..ecaa7fa38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt
@@ -0,0 +1,3 @@
+====== لا يوجد هذا الموضوع بعد ======
+
+لقد تابعت رابط لموضوع غير متواجد بعد. يمكنك إنشائة بالضعط على زر "انشيء هذه الصÙحة".
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt
new file mode 100644
index 000000000..2aa2330e1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt
@@ -0,0 +1,3 @@
+====== لا توجد تلك النسخة ======
+
+النسخة المختارة ليست موجودة. أسبخدم زر "نسخ قديمة" لعرض قائمة بالنسخ القديمة من هذه الصÙحة.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt
new file mode 100644
index 000000000..c537e6b26
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt
@@ -0,0 +1,3 @@
+====== عرض التعديلات ======
+
+هذا عرض لما سيصبح علية نص الصÙحة. تذكر أن التعديلات **لم تحÙظ** بعد!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt
new file mode 100644
index 000000000..6b735e291
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt
@@ -0,0 +1,8 @@
+مرحبا @ الاسم الكامل @
+
+شخص ما طلب كلمة سر جديدة لـحسابك @ المعر٠@ ÙÙŠ @ DOKUWIURL @
+إذا لم تكن قد طلبت كلمة سر جديدة رجاء قم بتجاهل هذه الرسالة .
+لتأكيد أنك أنت قمت بطلب كلمة السر الجديدة . نرجو منك الضغط على الرابط ÙÙŠ الأسÙÙ„ .
+@ التأكيد @
+ --
+لقد تم عمل هذه الرسالة من قبل DokuWiki .. ÙÙŠ @ DOKUWIKIURL @ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt
new file mode 100644
index 000000000..3e6c504ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt
@@ -0,0 +1 @@
+هذه الصÙحة للقراءة Ùقط. يمكنك تصÙØ­ مصدرها، ولكن لا يمكنك تعديلها. إن كنت تتعتÙد أن هناك خطأ ما خاطب المدير. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt
new file mode 100644
index 000000000..94d68401e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt
@@ -0,0 +1,3 @@
+====== احدث التغييرات ======
+
+تم تعديل الصÙحات التالية حديثا. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt
new file mode 100644
index 000000000..57406ddd4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt
@@ -0,0 +1,3 @@
+====== سجل كمستخدم جديد ======
+
+أملئ البيانات التالية لتسجيل حساب جديد على الويكي. تأكد من كتابة **بريد إلكترونى صحيح** - سترسل اليك كلمة سر جديدة. أسم الدخول يجب أن يكون [[doku>pagename|أسم صÙحة]] صحيح.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt
new file mode 100644
index 000000000..e9f6690ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt
@@ -0,0 +1,3 @@
+==== إرسال رقم سري جديد ====
+
+رجاء اكتب اسم المستخدم ÙÙŠ الاستمارة الموجودة ÙÙŠ الأسÙÙ„ ليتم طلب رقم سري جديد لحسابك ÙÙŠ هذا الويكي . سيتم إرسال رابط لتأكيد طلبك إلى بريدك الإلكتروني المسجل . \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt
new file mode 100644
index 000000000..930a4ef5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt
@@ -0,0 +1,2 @@
+====== النسخ القديمة ======
+النسخ القديمة للصÙحة الحالية. لإستعادة نسخة قديمة: أخترها من المعروض، ثم إضغط على زر "عدل هذه الصÙحة" Ùˆ أحÙظها. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt
new file mode 100644
index 000000000..62c05f5e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt
@@ -0,0 +1,5 @@
+====== بحث ======
+
+نتائج البحث . إن لم تجد ما تبحث عنه، يمكنك إنشاء صÙحة جديدة بعنوان ما تبحث عنة بالضغط على زر "حرر هذه الصÙحة".
+
+===== نتائج البحث ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt
new file mode 100644
index 000000000..30129071c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt
@@ -0,0 +1,2 @@
+**هذه نسخة قديمة من الصÙحة!**
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt
new file mode 100644
index 000000000..bc6eb48ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt
@@ -0,0 +1,29 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt
new file mode 100644
index 000000000..c9894570e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt
@@ -0,0 +1,17 @@
+أهلاً!
+
+الصÙحة @PAGE@ ÙÙ‰ @TITLE@ ويكي تم تعديلها.
+ها هى التعديلات:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+لإلغاء إشتراكك ÙÙ‰ تلك الصÙحة أدخل على الويكي على العنوان
+@DOKUWIKIURL@ ثم أذهب الى
+@NEWPAGE@
+و أختار 'إلغاء أشتراكك'.
+
+--
+تم ارسال هذه الرسالة من دوكيويكي
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt
new file mode 100644
index 000000000..04a5a09d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt
@@ -0,0 +1,3 @@
+==== تحديث بيانات حسابك ====
+
+عليك Ùقط أن تكمل كتابة الحقول التي تريد أن تغيرها . لا تستطيع تغيير اسم المستخدم . \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt
new file mode 100644
index 000000000..8d16f68aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt
@@ -0,0 +1,3 @@
+====== ÐдминиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ ======
+
+Долу може да намерите ÑпиÑък Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑтраторÑки задачи в DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt
new file mode 100644
index 000000000..2b0268ed4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt
@@ -0,0 +1 @@
+===== Допълнителни Plugins ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt
new file mode 100644
index 000000000..28801a8ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt
@@ -0,0 +1,3 @@
+====== Задни връзки ======
+
+Това е ÑпиÑък на Ñтраници, които изглежда препращат обратно към текущата Ñтраница.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt
new file mode 100644
index 000000000..51ec4b706
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt
@@ -0,0 +1,6 @@
+====== По-нова верÑÐ¸Ñ ÑъшеÑтвува ======
+
+По-нова верÑÐ¸Ñ Ð½Ð° документа който Ñте редактирали ÑъщеÑтвува. Това Ñе Ñлучва когато друг потребител е променил документа докато Ñте го редактирали.
+
+Разгледайте внимателно разгледайте разликите показани долу, Ñлед това решете ÐºÐ¾Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð´Ð° запазите. Ðко изберете ''ЗапиÑ'', верÑÐ¸Ñ Ð’Ð¸ ще бъде запазена. Изберете ''Отказ'', за да запазите текущата верÑиÑ.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt
new file mode 100644
index 000000000..7b1d5788e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt
@@ -0,0 +1,4 @@
+====== Отказан доÑтъп ======
+
+ÐÑмате доÑтатъчно права да продължите. Може би Ñте забравили да влезете?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt
new file mode 100644
index 000000000..2bd8262c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt
@@ -0,0 +1,4 @@
+====== Разлики ======
+
+Тук Ñа показани разликите между избраната верÑÐ¸Ñ Ð½Ð° Ñтраницата и текущата.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt
new file mode 100644
index 000000000..1938e7d9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt
@@ -0,0 +1,6 @@
+====== Ðамерена чернова ======
+
+ПоÑледната редакционна ÑеÑÐ¸Ñ Ð½Ð° тази Ñтраница не е завършена правилно. Dokuwiki автоматично запазва чернова по време на работа, коÑто може Ñега да използвате, за да продължите редактирането Ñи. Долу може да видите данните, които бÑха запазени от поÑледната ÑеÑиÑ.
+
+ÐœÐ¾Ð»Ñ Ñ€ÐµÑˆÐµÑ‚Ðµ, дали иÑкате да //recover// поÑледната Ñи редакционна ÑеÑиÑ, да //delete// автоматично запазената чернова или да //cancel// редакциÑта.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt
new file mode 100644
index 000000000..90d376dbc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt
@@ -0,0 +1,2 @@
+Редактирайте Ñтраницата и натиÑнете ''ЗапиÑ''. Погледнете [[wiki:syntax]] за Wiki ÑинтакÑиÑ. ÐœÐ¾Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð°Ð¹Ñ‚Ðµ Ñтраницата, Ñамо ако може да Ñ **подобрите**. Ðко иÑкате да пробвате разни неща, научете Ñе да правите първите Ñи Ñтъпки в [[playground:playground|пÑÑъчника]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt
new file mode 100644
index 000000000..87e7b26a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt
@@ -0,0 +1,2 @@
+**Заредили Ñте Ñтара верÑÐ¸Ñ Ð½Ð° документа!** Ðко Ñ Ð·Ð°Ð¿Ð°Ð·Ð¸Ñ‚Ðµ, ще Ñъздадете нова Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ñ Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ‚Ðµ данни.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt
new file mode 100644
index 000000000..2ebf5128a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt
@@ -0,0 +1,4 @@
+====== Ð˜Ð½Ð´ÐµÐºÑ ======
+
+Това е ÑпиÑък на вÑички доÑтъпни Ñтраници подредени по [[doku>namespaces|именни проÑтранÑтва]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html
new file mode 100644
index 000000000..0d7fd5232
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html
@@ -0,0 +1,25 @@
+<p>Тази Ñтраница помага при първоначална инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð¸ наÑтройка на
+<a href="http://dokuwiki.org">Dokuwiki</a>. Повече информациÑ
+за този инÑталатор е доÑтъпна в неговата ÑобÑтвена
+<a href="http://dokuwiki.org/installer">документациÑ</a>.</p>
+
+<p>Dokuwiki използва обикновени файлове за хранилище на уики Ñтраниците и друга
+Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ñвързана Ñ Ñ‚ÐµÐ·Ð¸ Ñтраници(примерно картинки, Ñ‚ÑŠÑ€Ñене, Ñтари верÑии, Ñ‚.н.).
+За да използвате уÑпешно DokuWiki
+<strong>Ñ‚Ñ€Ñбва</strong> да имате доÑтъп за пиÑане в директориите които Ñъдържат тези
+файлове. Този инÑталатор нÑма възможноÑти да наÑтройва правата на директориите.
+Това обикновено Ñ‚Ñ€Ñбва да бъде направено директно от командниÑÑ‚ ред или ако
+използвате хоÑтинг - през FTP или контрол панела на хоÑта(примерно cPanel).</p>
+
+<p>Този инÑталатор ще наÑтрои вашата DokuWiki ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð·Ð°
+<acronym title="access control list">ACL</acronym>, което на
+Ñвой ред ще позволи на админиÑтратора да влезе и да има доÑтъп
+до админиÑтраторÑкото меню в DokuWiki за инÑталиране на плъгини, контрол
+на потребители, управление да доÑтъп до уики Ñтраници и промÑна на наÑтройките
+Това не е необходимо на DokuWiki да работи, но ще направи DokuWiki по-леÑно за
+админиÑтриране.</p>
+
+<p>Опитните потребители или потребителите ÑÑŠÑ Ñпециални изиÑкваниÑ
+към наÑтройките може да използват тези връзки за детайли Ñвързани Ñ
+<a href="http://dokuwiki.org/install">инÑтрукции за инÑталациÑ</a>
+и <a href="http://dokuwiki.org/config">наÑтройка</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php
new file mode 100644
index 000000000..2c306095d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * Bulgarian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
+ * @author Viktor Usunov <usun0v@mail.bg>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Редактиране';
+$lang['btn_source'] = 'Показване на кода на Ñтраницата';
+$lang['btn_show'] = 'Показване на Ñтраница';
+$lang['btn_create'] = 'Създаване на Ñтраница';
+$lang['btn_search'] = 'ТърÑене';
+$lang['btn_save'] = 'ЗапиÑ';
+$lang['btn_preview'] = 'Преглед';
+$lang['btn_top'] = 'Към началото';
+$lang['btn_newer'] = '<< по-нови';
+$lang['btn_older'] = 'по-Ñтари >>';
+$lang['btn_revs'] = 'ИÑториÑ';
+$lang['btn_recent'] = 'ПоÑледни промени';
+$lang['btn_upload'] = 'Качване';
+$lang['btn_cancel'] = 'Отказ';
+$lang['btn_index'] = 'ИндекÑ';
+$lang['btn_secedit'] = 'Редактиране';
+$lang['btn_login'] = 'Вход';
+$lang['btn_logout'] = 'Изход';
+$lang['btn_admin'] = 'ÐаÑтройки';
+$lang['btn_update'] = 'ОбновÑване';
+$lang['btn_delete'] = 'Изтриване';
+$lang['btn_back'] = 'Ðазад';
+$lang['btn_backlink'] = 'Обратни връзки';
+$lang['btn_backtomedia'] = 'Ðазад към избор на медиен файл';
+$lang['btn_subscribe'] = 'Ðбониране за Промени';
+$lang['btn_unsubscribe'] = 'ОтпиÑване от Промени';
+$lang['btn_subscribens'] = 'Ðбониране за Промени на именно проÑтранÑтво';
+$lang['btn_unsubscribens'] = 'ОтпиÑване от Промени на именно проÑтранÑтво';
+$lang['btn_profile'] = 'Ðктуализирай Профила';
+$lang['btn_reset'] = 'ИзчиÑтване';
+$lang['btn_resendpwd'] = 'Пращане на нова парола';
+$lang['btn_draft'] = 'Редактиране на чернова';
+$lang['btn_recover'] = 'ВъзÑтановÑване на чернова';
+$lang['btn_draftdel'] = 'Изтриване на чернова';
+$lang['btn_revert'] = 'ВъзÑтановÑване';
+$lang['loggedinas'] = 'Влезли Ñте като';
+$lang['user'] = 'Потребител';
+$lang['pass'] = 'Парола';
+$lang['newpass'] = 'Ðова парола';
+$lang['oldpass'] = 'Потвърждение на текуща парола';
+$lang['passchk'] = 'oтново';
+$lang['remember'] = 'Запомни ме';
+$lang['fullname'] = 'Пълно име';
+$lang['email'] = 'Електронна поща';
+$lang['register'] = 'РегиÑтрациÑ';
+$lang['profile'] = 'ПотребителÑки профил';
+$lang['badlogin'] = 'ПотребителÑкото име или паролата Ñа грешни';
+$lang['minoredit'] = 'Ðезначителни промени';
+$lang['draftdate'] = 'Черновата бе автоматично запиÑана на';
+$lang['nosecedit'] = 'Страницата бе междувременно променена, презареждане на Ñтраницата поради неактуална информациÑ.';
+$lang['regmissing'] = 'МолÑ, попълнете вÑички полета.';
+$lang['reguexists'] = 'Потребител Ñ Ñ‚Ð°ÐºÐ¾Ð²Ð° име вече ÑъщеÑтвува.';
+$lang['regsuccess'] = 'ПотребителÑÑ‚ бе Ñъздаден и паролата бе пратена на електронната поща.';
+$lang['regsuccess2'] = 'ПотребителÑÑ‚ бе Ñъздаден.';
+$lang['regmailfail'] = 'Изглежда, че има проблем Ñ Ð¿Ñ€Ð°Ñ‰Ð°Ð½ÐµÑ‚Ð¾ на пиÑмото Ñ Ð¿Ð°Ñ€Ð¾Ð»Ð°Ñ‚Ð°. МолÑ, Ñвържете Ñе Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора.';
+$lang['regbadmail'] = 'ВъведениÑÑ‚ Ð°Ð´Ñ€ÐµÑ Ð¸Ð·Ð³Ð»ÐµÐ¶Ð´Ð° невалиден - ако миÑлите, че това е грешка, Ñвържете Ñе Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора.';
+$lang['regbadpass'] = 'Двете въведени пароли не Ñъвпадат, Ð¼Ð¾Ð»Ñ Ð¾Ð¿Ð¸Ñ‚Ð°Ð¹Ñ‚Ðµ отново';
+$lang['regpwmail'] = 'Парола за DokuWiki';
+$lang['reghere'] = 'ÐÑмате профил вÑе още? Ðаправете Ñи!';
+$lang['profna'] = 'Това Wiki не поддържа промÑна на профила';
+$lang['profnochange'] = 'ÐÑма промени.';
+$lang['profnoempty'] = 'Ðевъведено име или електронна поща не Ñа позволени.';
+$lang['profchanged'] = 'ПотребителÑкиÑÑ‚ профил бе уÑпешно обновен.';
+$lang['pwdforget'] = 'Забравили Ñте Ñи паролата? Въведете нова.';
+$lang['resendna'] = 'Това Wiki не поддържа повторно пращане на парола';
+$lang['resendpwd'] = 'Изпращане на нова парола за';
+$lang['resendpwdmissing'] = 'МолÑ, попълнете вÑички полета.';
+$lang['resendpwdnouser'] = 'ПотребителÑÑ‚ не бе намерен в базата данни.';
+$lang['resendpwdbadauth'] = 'Този код за потвърждение е невалиден. Проверете дали Ñте използвали целиÑÑ‚ линк за потвърждение.';
+$lang['resendpwdconfirm'] = 'ÐдреÑÑŠÑ‚ за потвърждение бе пратен по електронната поща.';
+$lang['resendpwdsuccess'] = 'Паролата ви бе изпратена на електронната поща.';
+$lang['license'] = 'ОÑвен ако не е поÑочено друго, Ñъдържанието на това Wiki е лицензирано под ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·:';
+$lang['licenseok'] = 'Имайте предвид, че чрез редактирането на тази Ñтраница, Вие Ñе ÑъглаÑÑвате Ñъдържанието й да бъде лицензирано под ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð»Ð¸Ñ†ÐµÐ½Ð·:';
+$lang['searchmedia'] = 'ТърÑене на файл: ';
+$lang['searchmedia_in'] = 'ТърÑене в %s';
+$lang['txt_upload'] = 'Изберете файл за качване ';
+$lang['txt_filename'] = 'Качване като (по избор)';
+$lang['txt_overwrt'] = 'Ð—Ð°Ð¿Ð¸Ñ Ð²ÑŠÑ€Ñ…Ñƒ ÑъщеÑтвуващ файл';
+$lang['lockedby'] = 'В момента е заключено от';
+$lang['lockexpire'] = 'ЗатварÑнето изтича в';
+$lang['willexpire'] = 'ЗатварÑнето на Ñтраницата за редактиране изтича Ñлед минута.\nЗа да избегнете противоречиÑ, използвайте бутона, за да реÑтартирате броÑчът за затварÑне.';
+$lang['notsavedyet'] = 'Ðезапазените промени ще бъдат загубени.\nИÑкате ли да продължите?';
+$lang['rssfailed'] = 'Възникна грешка при вземането на този feed: ';
+$lang['nothingfound'] = 'Ðищо не бе намерено.';
+$lang['mediaselect'] = 'Медийни файлове';
+$lang['fileupload'] = 'Качване на медийни файлове';
+$lang['uploadsucc'] = 'Качването бе уÑпешно';
+$lang['uploadfail'] = 'Качването бе неуÑпешно. Може би поради грешни права?';
+$lang['uploadwrong'] = 'Качването бе отказано. Това файлово разширение е забранено!';
+$lang['uploadexist'] = 'Файлът вече ÑъщеÑтвува. Ðищо не бе направено.';
+$lang['uploadbadcontent'] = 'Каченото Ñъдържание на ÑъответÑтва на файлово разширение %s .';
+$lang['uploadspam'] = 'Качването бе блокирано от Ñпам ÑпиÑъка.';
+$lang['uploadxss'] = 'Качването бе блокирано, заради възможно обидно Ñъдържание.';
+$lang['uploadsize'] = 'Файльт за качване бе прекалено голÑм. (макÑ. %s)';
+$lang['deletesucc'] = 'Файлът "%s" бе изтрит.';
+$lang['deletefail'] = '"%s" не бе изтрит, проверете правата';
+$lang['mediainuse'] = 'Файлът "%s" не бе изтрит - вÑе още Ñе ползва.';
+$lang['namespaces'] = 'Именни проÑтранÑтва';
+$lang['mediafiles'] = 'ДоÑтъпни файлове в';
+$lang['js']['searchmedia'] = 'ТърÑи файлове';
+$lang['js']['keepopen'] = 'Задържане на прозореца отворен при избор';
+$lang['js']['hidedetails'] = 'Скрий детайлите';
+$lang['js']['nosmblinks'] = 'Връзките към Windows shares работÑÑ‚ Ñамо под Internet Explorer.
+Можете да копирате и поÑтавите връзката.';
+$lang['js']['linkwiz'] = 'Линк Ñъветник';
+$lang['js']['linkto'] = 'Линк към: ';
+$lang['js']['del_confirm'] = 'Да бъдат ли изтрити избраните елементи?';
+$lang['js']['mu_btn'] = 'Качване на нÑколко файла наведнъж';
+$lang['mediausage'] = 'Използвайте ÑледниÑÑ‚ ÑинтакÑ, за да упоменете файла:';
+$lang['mediaview'] = 'Преглед на Ð¾Ñ€Ð¸Ð³Ð¸Ð½Ð°Ð»Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Качете файл в текущото именнопроÑтранÑтво тук. За да Ñъздадете подименни проÑтранÑтва, добавете ги в началото на "Качи като" име на файл, разделени Ñ Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ðµ.';
+$lang['mediaextchange'] = 'Разширението на файла бе Ñменено от .%s на .%s!';
+$lang['reference'] = 'Референции за';
+$lang['ref_inuse'] = 'Файлът не може да бъде изтрит, защото вÑе още Ñе ползва от Ñледните Ñтраници:';
+$lang['ref_hidden'] = 'ÐÑкои препратки Ñа към Ñтраници, които нÑмате права да четете';
+$lang['hits'] = 'СъвпадениÑ';
+$lang['quickhits'] = 'Съвпадащи имена на Ñтраници';
+$lang['toc'] = 'Съдържание';
+$lang['current'] = 'текущо';
+$lang['yours'] = 'Вашата верÑиÑ';
+$lang['diff'] = 'Преглед на разликите Ñ Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ‚Ð° верÑиÑ';
+$lang['diff2'] = 'Показване на разликите между избрани преработки';
+$lang['line'] = 'Ред';
+$lang['breadcrumb'] = 'Следа';
+$lang['youarehere'] = 'Ðамирате Ñе в';
+$lang['lastmod'] = 'ПоÑледна промÑна';
+$lang['by'] = 'от';
+$lang['deleted'] = 'изтриване';
+$lang['created'] = 'Ñъздаване';
+$lang['restored'] = 'възÑтановена предишна верÑиÑ';
+$lang['external_edit'] = 'външна редакциÑ';
+$lang['summary'] = 'Обобщение';
+$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> е необходим за показване на Ñъдържанието.';
+$lang['download'] = 'ИзтеглÑне на фрагмент';
+$lang['mail_newpage'] = 'добавена Ñтраница:';
+$lang['mail_changed'] = 'променена Ñтраница:';
+$lang['mail_new_user'] = 'нов потребител:';
+$lang['mail_upload'] = 'качен файл: ';
+$lang['qb_bold'] = 'Удебелен текÑÑ‚';
+$lang['qb_italic'] = 'КурÑив текÑÑ‚';
+$lang['qb_underl'] = 'Подчертан текÑÑ‚';
+$lang['qb_code'] = 'Код';
+$lang['qb_strike'] = 'Зачеркнат текÑÑ‚';
+$lang['qb_h1'] = 'Заглавие ниво 1';
+$lang['qb_h2'] = 'Заглавие ниво 2';
+$lang['qb_h3'] = 'Заглавие ниво 3';
+$lang['qb_h4'] = 'Заглавие ниво 4';
+$lang['qb_h5'] = 'Заглавие ниво 5';
+$lang['qb_h'] = 'Заглавие';
+$lang['qb_hs'] = 'Избери заглавие';
+$lang['qb_hplus'] = 'ОÑновно заглавие';
+$lang['qb_hminus'] = 'Подзаглавие';
+$lang['qb_hequal'] = 'Заглавие на Ñъщото ниво';
+$lang['qb_link'] = 'Вътрешна препратка';
+$lang['qb_extlink'] = 'Външна препратка';
+$lang['qb_hr'] = 'Хоризонтална линиÑ';
+$lang['qb_ol'] = 'Подреден ÑпиÑък';
+$lang['qb_ul'] = 'Ðеподреден ÑпиÑък';
+$lang['qb_media'] = 'ДобавÑне на Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸ други файлове';
+$lang['qb_sig'] = 'Вмъкване на подпиÑ';
+$lang['qb_smileys'] = 'УÑмивчици';
+$lang['qb_chars'] = 'Специални знаци';
+$lang['upperns'] = 'Към Ñвьрзано именно проÑтранÑтво';
+$lang['admin_register'] = 'ДобабÑне на нов потребител';
+$lang['metaedit'] = 'Редактиране на метаданни';
+$lang['metasaveerr'] = 'Запазването на метаданните бе неуÑпешно';
+$lang['metasaveok'] = 'Метаданните бÑха запазени';
+$lang['img_backto'] = 'Ðазад към';
+$lang['img_title'] = 'Заглавие';
+$lang['img_caption'] = 'ÐадпиÑ';
+$lang['img_date'] = 'Дата';
+$lang['img_fname'] = 'Име на файл';
+$lang['img_fsize'] = 'Размер';
+$lang['img_artist'] = 'ЗаÑнет от';
+$lang['img_copyr'] = 'ÐвторÑко право';
+$lang['img_format'] = 'Формат';
+$lang['img_camera'] = 'Фотоапарат';
+$lang['img_keywords'] = 'Ключови думи';
+$lang['subscribe_success'] = '%s бе добавен към абонамента за %s';
+$lang['subscribe_error'] = 'Имаше грешка при добавÑнето на абонамента на %s за %s';
+$lang['subscribe_noaddress'] = 'ÐÑма Ð°Ð´Ñ€ÐµÑ Ñвързан Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ, не може да Ñе абонирате';
+$lang['unsubscribe_success'] = 'Ðбонаментът %s бе премахнат от ÑпиÑъка за %s';
+$lang['unsubscribe_error'] = 'Имаше грешка при премахването на абонамента на %s от ÑпиÑъка %s';
+$lang['authmodfailed'] = 'Лоша наÑтройка за удоÑтоверÑване на потребителÑ. МолÑ, уведомете админиÑтратора.';
+$lang['authtempfail'] = 'УдоÑтоверÑването на потребителите е временно недоÑтъпно. Ðко това продължи дълго, Ð¼Ð¾Ð»Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼ÐµÑ‚Ðµ админиÑтратора.';
+$lang['i_chooselang'] = 'Избор на език';
+$lang['i_installer'] = 'ИнÑталатор на DokuWiki';
+$lang['i_wikiname'] = 'Име на Wiki';
+$lang['i_enableacl'] = 'Включване на ÑпиÑъци за доÑтъп ACL (препоръчително)';
+$lang['i_superuser'] = 'Супер потребител';
+$lang['i_problems'] = 'ИнÑталатора намери проблеми указани по-долу. Ðе може да продължите, докато не ги отÑтраните.';
+$lang['i_modified'] = 'Поради мерки за ÑигурноÑÑ‚ този Ñкрипт ще работи Ñамо Ñ Ð½Ð¾Ð²Ð° и непроменена Dokuwiki инÑталациÑ. ТрÑбва да разархивирате отново файловете от Ð´Ñ€ÑŠÐ¿Ð½Ð°Ñ‚Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚ или да Ñе поÑъветвате Ñ Ð¿ÑŠÐ»Ð½Ð¸Ñ‚Ðµ <a href="http://dokuwiki.org/install">ИнÑтрукции за инÑÑ‚Ð°Ð»Ð°Ñ†Ð¸Ñ Ð½Ð° Dokuwiki</a>.';
+$lang['i_funcna'] = 'PHP функциÑта <code>%s</code> не е доÑтъпна. Може би е забранена от доÑтавчика на хоÑтинг.';
+$lang['i_phpver'] = 'Вашата PHP верÑÐ¸Ñ <code>%s</code> е по-Ñтара от необходимата <code>%s</code>. Обновете PHP инÑталациÑта Ñи.';
+$lang['i_permfail'] = '<code>%s</code> не е доÑтъпна за пиÑане от DokuWiki. ТрÑбва да промените наÑтройките за доÑтъп до директориÑта!';
+$lang['i_confexists'] = '<code>%s</code> вече ÑъщеÑтвува';
+$lang['i_writeerr'] = '<code>%s</code> не можа да бъде Ñъздаден. ТрÑбва да проверите правата на директориÑта/файла за доÑтъп и да Ñъздадете файл ръчно.';
+$lang['i_badhash'] = 'неразпознат или променен dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - непозволена или празна ÑтойноÑÑ‚';
+$lang['i_success'] = 'ÐаÑтройката приключи уÑпешно. Може да Ñъздадете файлът install.php Ñега. Продължете към
+ <a href="doku.php">Ðово Ви DokuWiki</a>.';
+$lang['i_failure'] = 'Имаше грешки при запиÑа на файловете Ñ Ð½Ð°Ñтройки. Може да Ñ‚Ñ€Ñбва да ги редактирате ръчно. Ползвайте <a href="doku.php">Ðово Ви DokuWiki</a>.';
+$lang['i_policy'] = 'Първоначална политика за доÑтъп ACL';
+$lang['i_pol0'] = 'Отворено Wiki (четене, пиÑане, качване от вÑички)';
+$lang['i_pol1'] = 'Публично Wiki (четене от вÑички, пиÑане и качване от региÑтрирани потребители)';
+$lang['i_pol2'] = 'Затворено Wiki (четене, пиÑане, качване Ñамо от региÑтрирани потребители)';
+$lang['i_retry'] = 'Повторен опит';
+$lang['mu_intro'] = 'Тук можете да качите нÑколко файла наведнъж. Добавете ги към Ñъответните полета и натиÑнете бутона за качване.
+';
+$lang['mu_gridname'] = 'Име на файл';
+$lang['mu_gridsize'] = 'Големина';
+$lang['mu_gridstat'] = 'СъÑтоÑние';
+$lang['mu_namespace'] = 'Именно проÑтранÑтво';
+$lang['mu_browse'] = 'Избери';
+$lang['mu_toobig'] = 'прекалено голÑм';
+$lang['mu_ready'] = 'готов за качване';
+$lang['mu_done'] = 'приключен';
+$lang['mu_fail'] = 'неуÑпешен';
+$lang['mu_authfail'] = 'ÑеÑиÑта изтече';
+$lang['mu_progress'] = '@PCT@% качен';
+$lang['mu_filetypes'] = 'Позволени файлови разширениÑ';
+$lang['mu_info'] = 'качени файлове';
+$lang['mu_lasterr'] = 'ПоÑледна грешка:';
+$lang['recent_global'] = 'Ð’ момента преглеждате промените в <b>%s</b> именно проÑтранÑтво. Може да прегледате и <a href="%s">промените на цÑлото Wiki</a>.';
+$lang['years'] = 'преди %d години';
+$lang['months'] = 'преди %d меÑеци';
+$lang['weeks'] = 'преди %d Ñедмици';
+$lang['days'] = 'преди %d дни';
+$lang['hours'] = 'преди %d чаÑа';
+$lang['minutes'] = 'преди %d минути';
+$lang['seconds'] = 'преди %d Ñекунди';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt
new file mode 100644
index 000000000..0eecc6729
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt
@@ -0,0 +1,3 @@
+====== Страницата е затворена ======
+
+Ð’ момента Ñтраницата е затворена за Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð¾Ñ‚ друг потребител. ТрÑбва да изчаката докато този потребител приключи или затварÑнето изтече.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt
new file mode 100644
index 000000000..b525f08cf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt
@@ -0,0 +1,3 @@
+====== Вход ======
+
+Ð’ момента не Ñте влезли! Въведете данните Ñи долу, за да го направите. БиÑквитките (cookies) Ñ‚Ñ€Ñбва да Ñа включени.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt
new file mode 100644
index 000000000..8c18767e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt
@@ -0,0 +1,16 @@
+Страница във DokuWiki бе добавена или променена. Ето детайлите:
+
+Дата : @DATE@
+Браузър : @BROWSER@
+IP-Ð°Ð´Ñ€ÐµÑ : @IPADDRESS@
+Име на хоÑÑ‚ : @HOSTNAME@
+Стара верÑиÑ: @OLDPAGE@
+Ðова верÑÐ¸Ñ : @NEWPAGE@
+Обобщение : @SUMMARY@
+Потребител : @USER@
+
+@DIFF@
+
+
+--
+Това пиÑмо е генерирано от DokuWiki на Ð°Ð´Ñ€ÐµÑ @DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt
new file mode 100644
index 000000000..fcc1c6257
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt
@@ -0,0 +1,4 @@
+====== ÐеÑъщеÑтвуваща тема ======
+
+ПоÑледвали Ñте връзка към тема, коÑто вÑе още не ÑъщеÑтвува. Ðко правата Ви позволÑват, може да Ñ Ñъздадете като използвате бутона ''Създаване на Ñтраницата''
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt
new file mode 100644
index 000000000..0262aef60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt
@@ -0,0 +1,4 @@
+====== ÐÑма такава верÑÐ¸Ñ ======
+
+Избраната верÑÐ¸Ñ Ð½Ðµ ÑъщеÑтвува. Използвайте бутона ''Редакции'' за ÑпиÑък на Ñтари верÑии на документа.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt
new file mode 100644
index 000000000..442f16de2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt
@@ -0,0 +1,3 @@
+====== Преглед ======
+
+Ето как ще изглежда текÑта. Той обаче вÑе още **не е запазен** !
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt
new file mode 100644
index 000000000..1cd64b151
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt
@@ -0,0 +1,14 @@
+Здравейте @FULLNAME@!
+
+ÐÑкой е поиÑкал нова парола за Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ @TITLE@
+на @DOKUWIKIURL@
+
+Ðко не Ñте поиÑкали нова парола, товава проÑто игнорирайте това пиÑмо.
+
+За да потвърдите, че иÑкането е наиÑтина пратено от ваÑ, Ð¼Ð¾Ð»Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð¹Ñ‚Ðµ
+ÑÐ»ÐµÐ´Ð½Ð¸Ñ Ð°Ð´Ñ€ÐµÑ.
+
+@CONFIRM@
+
+--
+Това пиÑмо е генерирано от DokuWiki на Ð°Ð´Ñ€ÐµÑ @DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt
new file mode 100644
index 000000000..89e9a9d70
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt
@@ -0,0 +1,2 @@
+Тази Ñтраница е позволена Ñамо за четене. Може да разгледате кода, но не и да го променÑта. Обърнете Ñе Ñъм админиÑтратора Ñи, ако миÑлите, че това е грешно.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt
new file mode 100644
index 000000000..262979e34
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt
@@ -0,0 +1,4 @@
+====== ПоÑледни промени ======
+
+Следните Ñтраници Ñа били променени наÑкоро.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt
new file mode 100644
index 000000000..74a07cd90
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt
@@ -0,0 +1,4 @@
+====== РегиÑтрирайте Ñе като нов потребител ======
+
+МолÑ, попълнете вÑичката Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð´Ð¾Ð»Ñƒ, за да Ñъздадете нов профил в това уики. Бъдете Ñигурни, че подавате **валиден Ð°Ð´Ñ€ÐµÑ Ð½Ð° електронна поща** - ако не Ñе пита за парола тук, нова ще бъде пратена на този адреÑ. ПотребителÑкото име Ñ‚Ñ€Ñбва да бъде валидно [[doku>pagename|име на Ñраница]]
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt
new file mode 100644
index 000000000..7839b0910
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt
@@ -0,0 +1,13 @@
+Ðов потребител беше региÑтриран. Ето детайлите:
+
+Потребител : @NEWUSER@
+Пълно име : @NEWNAME@
+E-поща : @NEWEMAIL@
+
+Дата : @DATE@
+Браузър : @BROWSER@
+IP-Ð°Ð´Ñ€ÐµÑ : @IPADDRESS@
+Име на хоÑта: @HOSTNAME@
+
+--
+Това пиÑмо е генерирано от DokuWiki на Ð°Ð´Ñ€ÐµÑ @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt
new file mode 100644
index 000000000..7b9b9a027
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Пращане на нова парола ======
+
+МолÑ, въведете потребителÑкото Ñи име във формулÑра долу, за да поиÑкате нова парола за вашиÑÑ‚ профил в това Wiki. Връзка за потвърждение ще ви бъде пратена на региÑтрираниÑÑ‚ в това Wiki Ð°Ð´Ñ€ÐµÑ Ð½Ð° електронна поща.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt
new file mode 100644
index 000000000..295f5f6cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt
@@ -0,0 +1,4 @@
+====== Стари редакции ======
+
+Това Ñа Ñтари редакции на този документ. За да възÑтановите Ñтара верÑиÑ, изберете Ñ Ð´Ð¾Ð»Ñƒ, натиÑнете ''Редактиране'' и Ñ Ð·Ð°Ð¿Ð°Ð·ÐµÑ‚Ðµ.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt
new file mode 100644
index 000000000..03e019985
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt
@@ -0,0 +1,5 @@
+====== ТърÑене ======
+
+Може да намерите резултатите на Ñ‚ÑŠÑ€Ñенето долу. Ðко не Ñте намерили каквото Ñте Ñ‚ÑŠÑ€Ñили, може да Ñъздадете или редактирате Ñтраница кръÑтена по вашета заÑвка за Ñ‚ÑŠÑ€Ñене ÑÑŠÑ ÑъответниÑÑ‚ бутон
+
+===== Резултати =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt
new file mode 100644
index 000000000..c0b1709fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt
@@ -0,0 +1,2 @@
+**Това е Ñтара Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° документа**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt
new file mode 100644
index 000000000..369f4d789
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt
@@ -0,0 +1,29 @@
+# Това е ÑпиÑък на думи за игнориране, Ñ ÐµÐ´Ð½Ð° дума на ред
+# Когато редактирате този файл, не забравÑйте да използвате UNIX Ñимвол за нов ред
+# Ðе е нужно да включвате думи по-кратки от 3 Ñимвола - те Ñа игнорирани така или иначе
+# Този ÑпиÑък Ñе оÑновава на думи намерени на http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt
new file mode 100644
index 000000000..51d4f005a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt
@@ -0,0 +1,16 @@
+Привет!
+
+Страницата @PAGE@ в @TITLE@ уиките бе променена.
+Ето промените:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+За да Ñе отпишете от тази Ñтраница, влезте в уикито на
+@DOKUWIKIURL@ тогава отидете на
+@NEWPAGE@
+и изберете 'ОтпиÑване от промените'.
+
+--
+Това пиÑмо е генерирано от DokuWiki на Ð°Ð´Ñ€ÐµÑ @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt
new file mode 100644
index 000000000..0a6f15297
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Обновете профила Ñи ======
+
+ТрÑбва Ñамо да допълните полетата, които иÑкате да промените. Ðе може да ÑменÑте потребителÑкото Ñи име.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt
new file mode 100644
index 000000000..74f0cdc3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt
@@ -0,0 +1,13 @@
+Бе качен файл на вашето DokuWiki. Ето детайлите
+
+Файл : @MEDIA@
+Дата : @DATE@
+Браузeр : @BROWSER@
+IP-ÐÐ´Ñ€ÐµÑ : @IPADDRESS@
+Име на хоÑÑ‚ : @HOSTNAME@
+Размер : @SIZE@
+MIME Тип : @MIME@
+Потребител : @USER@
+
+--
+Tова пиÑмо е генерирано от DokuWiki на Ð°Ð´Ñ€ÐµÑ @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt
new file mode 100644
index 000000000..1afbae21d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt
@@ -0,0 +1,3 @@
+====== Блокиран СПÐÐœ ======
+
+Промените ви **не** бÑха запазени, защото Ñъдържат една или повече забранени думи. Ðко Ñте Ñе опитали да пуÑнете Ñпам в уикито и таз хубава! Ðко ÑмÑтате, че това е грешка, Ñвържете Ñе Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора на това Wiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt
new file mode 100644
index 000000000..628948e86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt
@@ -0,0 +1,4 @@
+====== Administració ======
+
+Avall pot trobar una llista de tasques administratives disponibles en DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt
new file mode 100644
index 000000000..6c5c4f90d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt
@@ -0,0 +1 @@
+===== Plúgins adicionals ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt
new file mode 100644
index 000000000..06a1106f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt
@@ -0,0 +1,3 @@
+====== Vínculs remitents ======
+
+Una llista de pàgines que pareixen vincular a la pàgina actual. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt
new file mode 100644
index 000000000..67319612d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt
@@ -0,0 +1,6 @@
+====== Ya existix una versió més nova ======
+
+Existix una versió més nova del document que ha editat. Açò ha passat perque un atre usuari ha modificat el document mentres vosté estava editant-lo.
+
+Estudie be les diferències mostrades avall i decidixca quina versió vol guardar. Si pulsa ''Guardar'' es guardarà la versió que està editant. Pulse ''Cancelar'' per a conservar la versió modificada per l'atre usuari..
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt
new file mode 100644
index 000000000..39c45d946
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt
@@ -0,0 +1,4 @@
+====== Permís denegat ======
+
+Disculpe, pero no té permís per a continuar. ¿Haurà oblidat iniciar sessió?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt
new file mode 100644
index 000000000..2b5c60e1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt
@@ -0,0 +1,4 @@
+====== Diferències ======
+
+Ací es mostren les diferències entre dos versions de la pàgina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt
new file mode 100644
index 000000000..e7e814a69
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt
@@ -0,0 +1,6 @@
+====== Borrador trobat ======
+
+L'última edició d'esta pàgina no es completà correctament. DokuWiki guarda automàticament un borrador que ara pot recuperar per a continuar editant. Avall pot vore la data en que es guardà l'últim borrador.
+
+Per favor, decidixca si vol //recuperar// la sessió que pergué, //borrar// el borrador o //cancelar// esta edició.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt
new file mode 100644
index 000000000..e1ca6bf23
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt
@@ -0,0 +1,2 @@
+Edite la pàgina i pulse 'Guardar". Consulte la [[wiki:syntax|Sintaxis]] del Wiki. Per favor, edite la pàgina només **si pot millorar-la**. Si vol fer proves, deprenga a utilisar el Wiki en el [[playground:playground|espai de proves]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt
new file mode 100644
index 000000000..99188a0e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt
@@ -0,0 +1,2 @@
+**¡Ha carregat una versió antiga del document!** Si la guarda crearà una nova versió en el contingut d'esta.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt
new file mode 100644
index 000000000..5e57c1680
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt
@@ -0,0 +1,4 @@
+====== Ãndex ======
+
+Un índex de totes les pàgines disponibles ordenades per [[doku>namespaces|espais de noms]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html
new file mode 100644
index 000000000..eb77cd648
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html
@@ -0,0 +1,11 @@
+<p>Esta pàgina l'ajudarà en la primera instalació i configuració de <a href="http://dokuwiki.org">Dokuwiki</a>. N'hi ha més informació de l'instalador disponible en la
+<a href="http://dokuwiki.org/installer">pàgina de documentació</a>.</p>
+
+<p>DokuWiki utilisa archius corrents per a l'almagasenament de les pàgines del wiki i atra informació associada ad estes pàgines (p. e. imàgens, índexs de busca, versions antigues, etc.). Per a que DokuWiki funcione correctament
+<strong>deu</strong> tindre accés d'escritura als directoris que contenen estos archius. Est instalador no pot ajustar els permissos del directori. Normalment haurà de fer-ho directament en una consola de del sistema o, si utilisa un hostage, per FTP o en el panel de control (p. e. cPanel).</p>
+
+<p>Est instalador configurarà <acronym title="access control list">ACL</acronym> en el seu DokuWiki, que al mateix temps permet l'accés de l'administrador i l'accés al menú d'administració de DokuWiki per a instalar plúgins, gestionar usuaris, gestionar els accessos a les pàgines del wiki i la modificació dels ajusts de configuració. No és necessari per a que DokuWiki funcione, pero farà més fàcil la seua administració.</p>
+
+<p>Els usuaris experimentats o en necessitats especials de configuració deuen utilisar estos vínculs per a informació referent a
+<a href="http://dokuwiki.org/install">instruccions d'instalació</a>
+i <a href="http://dokuwiki.org/config">ajusts de configuració</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php
new file mode 100644
index 000000000..d85cc1c06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php
@@ -0,0 +1,250 @@
+<?php
+/**
+ * valencian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Bernat Arlandis i Mañó <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Editar esta pàgina';
+$lang['btn_source'] = 'Mostrar font';
+$lang['btn_show'] = 'Mostrar pàgina';
+$lang['btn_create'] = 'Crear esta pàgina';
+$lang['btn_search'] = 'Buscar';
+$lang['btn_save'] = 'Guardar';
+$lang['btn_preview'] = 'Vista prèvia';
+$lang['btn_top'] = 'Tornar dalt';
+$lang['btn_newer'] = '<< més recents';
+$lang['btn_older'] = 'manco recents >>';
+$lang['btn_revs'] = 'Versions antigues';
+$lang['btn_recent'] = 'Canvis recents';
+$lang['btn_upload'] = 'Pujar';
+$lang['btn_cancel'] = 'Cancelar';
+$lang['btn_index'] = 'Ãndex';
+$lang['btn_secedit'] = 'Editar';
+$lang['btn_login'] = 'Iniciar sessió';
+$lang['btn_logout'] = 'Tancar sessió';
+$lang['btn_admin'] = 'Administrar';
+$lang['btn_update'] = 'Actualisar';
+$lang['btn_delete'] = 'Borrar';
+$lang['btn_back'] = 'Arrere';
+$lang['btn_backlink'] = 'Vínculs remitents';
+$lang['btn_backtomedia'] = 'Tornar a la selecció d\'archius de mijos';
+$lang['btn_subscribe'] = 'Subscriure\'s a la pàgina';
+$lang['btn_unsubscribe'] = 'Desubscriure\'s de la pàgina';
+$lang['btn_subscribens'] = 'Subscriure\'s a l\'espai de noms';
+$lang['btn_unsubscribens'] = 'Desubscriure\'s de l\'espai de noms';
+$lang['btn_profile'] = 'Actualisar perfil';
+$lang['btn_reset'] = 'Reiniciar';
+$lang['btn_resendpwd'] = 'Enviar contrasenya nova';
+$lang['btn_draft'] = 'Editar borrador';
+$lang['btn_recover'] = 'Recuperar borrador';
+$lang['btn_draftdel'] = 'Borrar borrador';
+$lang['btn_revert'] = 'Recuperar';
+$lang['loggedinas'] = 'Sessió de';
+$lang['user'] = 'Nom d\'usuari';
+$lang['pass'] = 'Contrasenya';
+$lang['newpass'] = 'Contrasenya nova';
+$lang['oldpass'] = 'Confirmar la contrasenya actual';
+$lang['passchk'] = 'una atra volta';
+$lang['remember'] = 'Recorda\'m';
+$lang['fullname'] = 'Nom complet';
+$lang['email'] = 'Correu electrònic';
+$lang['register'] = 'Registrar-se';
+$lang['profile'] = 'Perfil d\'usuari';
+$lang['badlogin'] = 'Disculpe, pero el nom d\'usuari o la contrasenya són incorrectes.';
+$lang['minoredit'] = 'Canvis menors';
+$lang['draftdate'] = 'Borrador gravat el';
+$lang['nosecedit'] = 'La pàgina ha canviat mentres tant, l\'informació de la secció no estava al dia, s\'ha carregat la pàgina sancera.';
+$lang['regmissing'] = 'Disculpe, pero deu omplir tots els camps.';
+$lang['reguexists'] = 'Disculpe, pero ya existix un usuari en este nom.';
+$lang['regsuccess'] = 'S\'ha creat l\'usuari i se li ha enviat la contrasenya per correu electrònic.';
+$lang['regsuccess2'] = 'S\'ha creat l\'usuari.';
+$lang['regmailfail'] = 'Pareix que ha hagut un erro enviant el correu en la contrasenya. ¡Per favor, contacte en l\'administrador!';
+$lang['regbadmail'] = 'La direcció de correu no pareix vàlida - contacte en l\'administrador si pensa que és deu a un erro nostre';
+$lang['regbadpass'] = 'Les dos contrasenyes que ha donat no són idèntiques, per favor, torne a intentar-ho.';
+$lang['regpwmail'] = 'La seua contrasenya de DokuWiki';
+$lang['reghere'] = '¿Encara no té un conte? Cree-se\'n un';
+$lang['profna'] = 'Este wiki no li permet modificar el perfil';
+$lang['profnochange'] = 'Sense canvis, no hi ha res que fer.';
+$lang['profnoempty'] = 'No es permet deixar el nom o la direcció de correu buits.';
+$lang['profchanged'] = 'Perfil de l\'usuari actualisat.';
+$lang['pwdforget'] = '¿Ha oblidat la contrasenya? Demane\'n una nova';
+$lang['resendna'] = 'Este wiki no permet reenviar la contrasenya.';
+$lang['resendpwd'] = 'Enviar contrasenya nova per a';
+$lang['resendpwdmissing'] = 'Disculpe, pero deu omplir tots els camps.';
+$lang['resendpwdnouser'] = 'Disculpe, pero no trobem ad est usuari en la base de senyes.';
+$lang['resendpwdbadauth'] = 'Disculpe, pero este còdic d\'autenticació no es vàlit. Verifique que haja utilisat el víncul de confirmació sancer.';
+$lang['resendpwdconfirm'] = 'Li hem enviat un víncul de confirmació al correu.';
+$lang['resendpwdsuccess'] = 'Se li ha enviat una nova contrasenya per correu electrònic.';
+$lang['license'] = 'Excepte quan s\'indique una atra cosa, el contingut d\'este wiki està llicenciat baix la següent llicència:';
+$lang['licenseok'] = 'Nota: a l\'editar esta pàgina accepta llicenciar el seu contingut baix la següent llicència:';
+$lang['searchmedia'] = 'Buscar nom d\'archiu:';
+$lang['searchmedia_in'] = 'Buscar en %s';
+$lang['txt_upload'] = 'Seleccione l\'archiu que vol pujar';
+$lang['txt_filename'] = 'Enviar com (opcional)';
+$lang['txt_overwrt'] = 'Sobreescriure archius existents';
+$lang['lockedby'] = 'Actualment bloquejat per';
+$lang['lockexpire'] = 'El bloqueig venç a les';
+$lang['willexpire'] = 'El seu bloqueig per a editar esta pàgina vencerà en un minut.\nPer a evitar conflictes utilise el botó de vista prèvia i reiniciarà el contador.';
+$lang['notsavedyet'] = 'Els canvis no guardats es perdran.\n¿Segur que vol continuar?';
+$lang['rssfailed'] = 'Ha ocorregut un erro al solicitar este canal: ';
+$lang['nothingfound'] = 'No s\'ha trobat res.';
+$lang['mediaselect'] = 'Archius de mijos';
+$lang['fileupload'] = 'Enviar archius de mijos';
+$lang['uploadsucc'] = 'Enviament correcte';
+$lang['uploadfail'] = 'Enviament fallit. ¿Potser no tinga els permissos necessaris?';
+$lang['uploadwrong'] = 'Enviament denegat. ¡Esta extensió d\'archiu està prohibida!';
+$lang['uploadexist'] = 'L\'archiu ya existix. No s\'ha fet res.';
+$lang['uploadbadcontent'] = 'El contingut enviat no coincidix en l\'extensió de l\'archiu %s';
+$lang['uploadspam'] = 'L\'enviament ha segut bloquejat per la llista anti-spam.';
+$lang['uploadxss'] = 'L\'enviament ha segut bloquejat per ser possiblement perillós.';
+$lang['uploadsize'] = 'L\'archiu enviat és massa gran. (màx. %s)';
+$lang['deletesucc'] = 'S\'ha borrat l\'archiu "%s".';
+$lang['deletefail'] = 'No s\'ha pogut borrar "%s" - comprove els permissos.';
+$lang['mediainuse'] = 'L\'archiu "%s" no s\'ha borrat - encara s\'està utilisant.';
+$lang['namespaces'] = 'Espais de noms';
+$lang['mediafiles'] = 'Archius disponibles en';
+$lang['js']['searchmedia'] = 'Buscar archius';
+$lang['js']['keepopen'] = 'Mantindre la finestra oberta al seleccionar';
+$lang['js']['hidedetails'] = 'Ocultar detalls';
+$lang['js']['nosmblinks'] = 'Els vínculs a recursos compartits de Windows només funcionen en Microsoft Internet Explorer. No obstant, es poden copiar i apegar.';
+$lang['js']['linkwiz'] = 'Assistent de vínculs';
+$lang['js']['linkto'] = 'Vincular a:';
+$lang['js']['del_confirm'] = '¿Realment vol borrar el(s) ítem(s) seleccionat(s)?';
+$lang['js']['mu_btn'] = 'Enviar diversos archius d\'una';
+$lang['mediausage'] = 'Utilise la següent sintaxis per a referenciar est archiu:';
+$lang['mediaview'] = 'Vore l\'archiu original';
+$lang['mediaroot'] = 'base';
+$lang['mediaupload'] = 'Enviar un archiu a l\'espai de noms actual. Per a crear sub-espais, afigga\'ls separats per dos punts davant del nom de l\'archiu que pose en "Enviar com".';
+$lang['mediaextchange'] = '¡Extensió de l\'archiu canviada de .%s a .%s!';
+$lang['reference'] = 'Referències per a';
+$lang['ref_inuse'] = 'No es pot borrar l\'archiu perque encara s\'utilisa en les següents pàgines:';
+$lang['ref_hidden'] = 'Algunes referències estan en pàgines que no té permissos per a vore';
+$lang['hits'] = 'Encerts';
+$lang['quickhits'] = 'Noms de pàgines coincidents';
+$lang['toc'] = 'Taula de continguts';
+$lang['current'] = 'Actual';
+$lang['yours'] = 'La seua versió';
+$lang['diff'] = 'Mostrar diferències en la versió actual';
+$lang['diff2'] = 'Mostrar diferències entre versions';
+$lang['line'] = 'Llínea';
+$lang['breadcrumb'] = 'Traça';
+$lang['youarehere'] = 'Vosté està ací';
+$lang['lastmod'] = 'Última modificació el';
+$lang['by'] = 'per';
+$lang['deleted'] = 'borrat';
+$lang['created'] = 'creat';
+$lang['restored'] = 'restaurada l\'última versió';
+$lang['external_edit'] = 'edició externa';
+$lang['summary'] = 'Editar sumari';
+$lang['noflash'] = 'Necessita el <a href="http://www.adobe.com/products/flashplayer/">plúgin d\'Adobe Flash</a> per a vore este contingut.';
+$lang['download'] = 'Descarregar un tros';
+$lang['mail_newpage'] = 'pàgina afegida:';
+$lang['mail_changed'] = 'pàgina canviada:';
+$lang['mail_new_user'] = 'Usuari nou:';
+$lang['mail_upload'] = 'archiu enviat:';
+$lang['qb_bold'] = 'Negreta';
+$lang['qb_italic'] = 'Itàlica';
+$lang['qb_underl'] = 'Subrallat';
+$lang['qb_code'] = 'Còdic';
+$lang['qb_strike'] = 'Tachat';
+$lang['qb_h1'] = 'Titular de nivell 1';
+$lang['qb_h2'] = 'Titular de nivell 2';
+$lang['qb_h3'] = 'Titular de nivell 3';
+$lang['qb_h4'] = 'Titular de nivell 4';
+$lang['qb_h5'] = 'Titular de nivell 5';
+$lang['qb_h'] = 'Titular';
+$lang['qb_hs'] = 'Triar titular';
+$lang['qb_hplus'] = 'Titular superior';
+$lang['qb_hminus'] = 'Titular inferior';
+$lang['qb_hequal'] = 'Titular al mateix nivell';
+$lang['qb_link'] = 'Víncul intern';
+$lang['qb_extlink'] = 'Víncul extern';
+$lang['qb_hr'] = 'Llínea horisontal';
+$lang['qb_ol'] = 'Llista numerada';
+$lang['qb_ul'] = 'Llista ';
+$lang['qb_media'] = 'Afegir imàgens i atres archius';
+$lang['qb_sig'] = 'Afegir firma';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Caràcters especials';
+$lang['upperns'] = 'anar a l\'espai de noms superior';
+$lang['admin_register'] = 'Afegir nou usuari';
+$lang['metaedit'] = 'Editar meta-senyes';
+$lang['metasaveerr'] = 'Erro escrivint meta-senyes';
+$lang['metasaveok'] = 'Meta-senyes guardades';
+$lang['img_backto'] = 'Tornar a';
+$lang['img_title'] = 'Títul';
+$lang['img_caption'] = 'Subtítul';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nom de l\'archiu';
+$lang['img_fsize'] = 'Tamany';
+$lang['img_artist'] = 'Fotógraf';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Càmara';
+$lang['img_keywords'] = 'Paraules clau';
+$lang['subscribe_success'] = '%s afegit a la llista de subscripció per a %s';
+$lang['subscribe_error'] = 'Erro afegint a %s a la llista de subscripció per a %s';
+$lang['subscribe_noaddress'] = 'No hi ha cap direcció associada a la sessió, no es pot subscriure';
+$lang['unsubscribe_success'] = '%s borrat de la llista de subscripció per a %s';
+$lang['unsubscribe_error'] = 'Erro borrant a %s de la llista de subscripció per a %s';
+$lang['authmodfailed'] = 'Mala configuració de l\'autenticació d\'usuari. Per favor, informe a l\'administrador del Wiki.';
+$lang['authtempfail'] = 'L\'autenticació d\'usuaris està desactivada temporalment. Si la situació persistix, per favor, informe a l\'administrador del Wiki.';
+$lang['i_chooselang'] = 'Trie l\'idioma';
+$lang['i_installer'] = 'Instalador de DokuWiki';
+$lang['i_wikiname'] = 'Nom del Wiki';
+$lang['i_enableacl'] = 'Activar ACL (recomanat)';
+$lang['i_superuser'] = 'Super-usuari';
+$lang['i_problems'] = 'L\'instalador ha trobat els problemes mostrats més avall. No pot continuar fins que no els arregle.';
+$lang['i_modified'] = 'Per raons de seguritat, este procés només funcionarà en una instalació nova i verge de DokuWiki.
+Deuria tornar a extraure els archius del paquet que ha descarregat o consultar les
+<a href="http://dokuwiki.org/install">instruccions d\'instalació de Dokuwiki</a> completes';
+$lang['i_funcna'] = 'La funció de PHP <code>%s</code> no està disponible. ¿Pot ser que el seu proveïdor d\'hostage l\'haja desactivada per algun motiu?';
+$lang['i_phpver'] = 'La versió de PHP <code>%s</code> és menor que
+la <code>%s</code> que es necessita. Necessita actualisar PHP.';
+$lang['i_permfail'] = 'DokuWiki no pot escriure en <code>%s</code>. ¡Necessita arreglar els permissos d\'este directori!';
+$lang['i_confexists'] = '<code>%s</code> ya existix';
+$lang['i_writeerr'] = 'No es pot crear <code>%s</code>. Haurà de comprovar els permissos del directori/archiu i crear manualment l\'archiu.';
+$lang['i_badhash'] = 'dokuwiki.php substituït o modificat (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valor illegal o buit';
+$lang['i_success'] = 'La configuració ha finalisat correctament. Ya pot borrar l\'archiu install.php. Passe al
+<a href="doku.php">nou DokuWiki</a>.';
+$lang['i_failure'] = 'Han aparegut alguns erros escrivint els archius de configuració. Deurà arreglar-los manualment abans de que
+puga utilisar el <a href="doku.php">nou DokuWiki</a>.';
+$lang['i_policy'] = 'Política inicial ACL';
+$lang['i_pol0'] = 'Wiki obert (llegir, escriure i enviar tots)';
+$lang['i_pol1'] = 'Wiki públic (llegir tots, escriure i enviar només usuaris registrats)';
+$lang['i_pol2'] = 'Wiki tancat (llegir, escriure i enviar només usuaris registrats)';
+$lang['i_retry'] = 'Reintentar';
+$lang['mu_intro'] = 'Des d\'ací pot enviar diversos archius d\'una volta. Pulse el botó d\'examinar per a afegir-los a la coa. Pulse enviar quan ho tinga.';
+$lang['mu_gridname'] = 'Nom d\'archiu';
+$lang['mu_gridsize'] = 'Tamany';
+$lang['mu_gridstat'] = 'Estat';
+$lang['mu_namespace'] = 'Espai de noms';
+$lang['mu_browse'] = 'Examinar';
+$lang['mu_toobig'] = 'massa gran';
+$lang['mu_ready'] = 'preparat per a enviar';
+$lang['mu_done'] = 'complet';
+$lang['mu_fail'] = 'fallit';
+$lang['mu_authfail'] = 'la sessió ha vençut';
+$lang['mu_progress'] = '@PCT@% enviat';
+$lang['mu_filetypes'] = 'Classes d\'archiu permeses';
+$lang['mu_info'] = 'archius enviats.';
+$lang['mu_lasterr'] = 'Últim erro:';
+$lang['recent_global'] = 'Està veent els canvis dins de l\'espai de noms <b>%s</b>. També pot <a href="%s">vore els canvis recents en el wiki sancer</a>.';
+$lang['years'] = 'fa %d anys';
+$lang['months'] = 'fa %d mesos';
+$lang['weeks'] = 'fa %s semanes';
+$lang['days'] = 'fa %d dies';
+$lang['hours'] = 'fa %d hores';
+$lang['minutes'] = 'fa %d minuts';
+$lang['seconds'] = 'fa %d segons';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt
new file mode 100644
index 000000000..bdb2bdf0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt
@@ -0,0 +1,3 @@
+====== Pàgina bloquejada ======
+
+Esta pàgina està actualment bloquejada mentres l'edita un atre usuari. Ha d'esperar fins que l'usuari acabe d'editar la pàgina o vença el bloqueig.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt
new file mode 100644
index 000000000..b550c6440
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt
@@ -0,0 +1,4 @@
+====== Inici de sessió ======
+
+¡Encara no ha iniciat sessió! Introduïxca les seues credencials d'autenticació per a iniciar-la. Necessita tindre les galletes del navegador activades.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt
new file mode 100644
index 000000000..e8da6f8de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt
@@ -0,0 +1,17 @@
+S'ha afegit o modificat una pàgina en el seu DokuWiki. Les senyes són:
+
+Data: @DATE@
+Navegador: @BROWSER@
+Direcció IP: @IPADDRESS@
+Nom de la màquina: @HOSTNAME@
+Revisió anterior: @OLDPAGE@
+Nova revisió: @NEWPAGE@
+Resum: @SUMMARY@
+Usuari: @USER@
+
+@DIFF@
+
+
+--
+Este correu l'ha generat DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt
new file mode 100644
index 000000000..93b154425
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt
@@ -0,0 +1,3 @@
+====== Este tema encara no existix ======
+
+Ha seguit un víncul a una pàgina que encara no existix. Si té els permissos necessaris pot crear-la utilisant el botó ''Crear esta pàgina''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt
new file mode 100644
index 000000000..434e62dfa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt
@@ -0,0 +1,3 @@
+====== No existix la versió ======
+
+La versió especificada no existix. Utilise el botó ''Versions antigues'' per a vore una llista de versions antigues d'este document. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt
new file mode 100644
index 000000000..0997f5953
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt
@@ -0,0 +1,4 @@
+====== Previsualisació ======
+
+Açò es una previsualisació per a vore cóm quedarà la pàgina. ¡Recorde que encara no està guardada!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt
new file mode 100644
index 000000000..919c3d89d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt
@@ -0,0 +1,15 @@
+¡Hola @FULLNAME@!
+
+Algú ha solicitat una nova contrasenya per a entrar com a
+@TITLE en @DOKUWIKIURL@
+
+Si no ha segut vosté qui ha solicitat la nova contrasenya ignore este correu.
+
+Per a confirmar que la petició ha segut feta realment per vosté
+utilise el següent víncul.
+
+@CONFIRM@
+
+--
+Este correu l'ha generat DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt
new file mode 100644
index 000000000..80d96cd45
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt
@@ -0,0 +1,2 @@
+Esta pàgina és només de llectura. Pot vore el còdic font, pero no pot canviar-lo. Pregunte a l'administrador si creu que és un erro.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt
new file mode 100644
index 000000000..ca1f5c5ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt
@@ -0,0 +1,5 @@
+====== Canvis recents ======
+
+Les següents pàgines han canviat recentment.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt
new file mode 100644
index 000000000..7515be6a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt
@@ -0,0 +1,5 @@
+====== Registrar-se com a usuari nou ======
+
+Escriga tota la informació que se li demana avall per a crear un nou conte en este wiki. Assegure's de donar una **direcció de correu electrònic vàlida** - si no se li demana una contrasenya ací se li enviarà a eixa direcció. El nom d'usuari deuria ser un
+[[doku>pagename|nom de pàgina]] vàlit.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt
new file mode 100644
index 000000000..47b9318bd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt
@@ -0,0 +1,14 @@
+S'ha registrat un usuari nou. Estes són les senyes:
+
+Nom d'usuari : @NEWUSER@
+Nom complet : @NEWNAME@
+Correu electrònic : @NEWEMAIL@
+
+Data : @DATE@
+Navegador : @BROWSER@
+Direcció IP : @IPADDRESS@
+Nom de la màquina : @HOSTNAME@
+
+--
+Este correu l'ha generat DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt
new file mode 100644
index 000000000..2feac0966
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Enviar contrasenya nova ======
+
+Per favor, introduïxca el nom d'usuari en el formulari per a demanar una nova contrasenya per al seu conte en este wiki. Se li enviarà un víncul de confirmació a la direcció de correu en que estiga registrat.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt
new file mode 100644
index 000000000..08e7e043c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt
@@ -0,0 +1,4 @@
+====== Versions antigues ======
+
+Versions antigues del document actual. Per a recuperar una versió anterior de la pàgina, trie-la ací avall, pulse ''Editar esta pàgina'' i guarde-la.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt
new file mode 100644
index 000000000..80f7e9119
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt
@@ -0,0 +1,5 @@
+====== Buscar ======
+
+Pot vore els resultats de la busca ací avall. Si no ha trobat lo que buscava pot crear o editar una pàgina en el mateix nom que el text que ha buscat utilisant el botó corresponent.
+
+===== Resultats =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt
new file mode 100644
index 000000000..86f282292
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt
@@ -0,0 +1,2 @@
+**¡Açò és una versió antiga del document!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt
new file mode 100644
index 000000000..1b4decbe5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt
@@ -0,0 +1,76 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+ell
+ella
+nosatres
+nosatros
+mosatros
+vosatres
+vosatros
+ells
+els
+los
+dels
+les
+una
+uns
+unes
+seu
+seua
+seus
+seues
+meu
+meua
+meus
+meues
+teu
+teua
+teus
+teues
+nostre
+nostres
+vostre
+vostres
+nos
+vos
+#eix
+eixe
+eixa
+aquell
+aquella
+aquells
+aquelles
+#est
+este
+esta
+estos
+estes
+està
+això
+açò
+allò
+des
+soc
+eres
+som
+sou
+són
+fon
+per
+com
+cóm
+qui
+que
+qué
+quan
+quant
+quants
+quanta
+quantes
+mentres
+pero
+atre
+atra
+atres
+també
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt
new file mode 100644
index 000000000..43299b598
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt
@@ -0,0 +1,23 @@
+¡Hola!
+
+La pàgina @PAGE@ del wiki @TITLE@ ha canviat.
+Estos són els canvis:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Data: @DATE@
+Usuari: @USER@
+Resum: @SUMMARY@
+Revisió anterior: @OLDPAGE@
+Nova revisió: @NEWPAGE@
+
+Per a cancelar les notificacions de pàgina, inicie sessió en el wiki en
+@DOKUWIKIURL@, visite
+@NEWPAGE@
+i desubscriga's dels canvis de la pàgina o de l'espai de noms.
+
+--
+Este correu l'ha generat DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt
new file mode 100644
index 000000000..9116fedf0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Actualise el seu perfil ======
+
+Només deu completar els camps que vol canviar. No es pot canviar el nom d'usuari.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt
new file mode 100644
index 000000000..c5a330274
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt
@@ -0,0 +1,14 @@
+S'ha enviat un archiu al seu DokuWiki. Les senyes:
+
+Archiu: @MEDIA@
+Data: @DATE@
+Navegador: @BROWSER@
+Direcció IP: @IPADDRESS@
+Nom de la màquina: @HOSTNAME@
+Tamany: @SIZE@
+Tipo MIME: @MIME@
+Usuari: @USER@
+
+--
+Este correu ha segut generat per DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt
new file mode 100644
index 000000000..718bfe883
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt
@@ -0,0 +1,4 @@
+====== Bloqueig de SPAM ======
+
+Els seus canvis *no* s'han guardat perque contenen una o més paraules prohibides. Si ha intentat posar spam en el wiki.. ¡malament! Si pensa que açò és un erro, contacte en l'administrador d'este wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt
new file mode 100644
index 000000000..5c0a6d00a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt
@@ -0,0 +1,4 @@
+====== Administració ======
+
+Heus ací una llista de les tasques administratives disponibles en DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt
new file mode 100644
index 000000000..9ea165c1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt
@@ -0,0 +1 @@
+===== Connectors addicionals ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt
new file mode 100644
index 000000000..e2ecaf4f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt
@@ -0,0 +1,4 @@
+====== Enllaços ======
+
+Heus ací una llista de pàgines enllaçades amb la pàgina actual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt
new file mode 100644
index 000000000..53183f0b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt
@@ -0,0 +1,6 @@
+====== Hi ha una versió més recent ======
+
+Existeix una versió més recent del document que heu editat. Això passa quan un altre usuari canvia el document mentre l'estàveu editant.
+
+Examineu detingudament les diferències que es mostren més avall i després decidiu quina versió voleu mantenir. Si trieu ''desa'', es desarà la vostra versió. Si trieu ''cancel·la'' es mantindrà la versió actual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt
new file mode 100644
index 000000000..e6125e83b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt
@@ -0,0 +1,4 @@
+====== Permís denegat ======
+
+No teniu prou drets per continuar. Potser us heu descuidat d'entrar?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt
new file mode 100644
index 000000000..83ca86782
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt
@@ -0,0 +1,4 @@
+====== Diferències ======
+
+Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt
new file mode 100644
index 000000000..68593c2fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt
@@ -0,0 +1,5 @@
+====== S'ha trobat un esborrany ======
+
+La darrera sessió vostra d'edició d'aquesta pàgina no es va completar correctament. DokuWiki en va desar automàticament un esborrany mentre treballàveu, el qual podeu utilitzar ara per continuar l'edició. Més avall podeu veure la data i hora en què es va desar durant la vostra darrera sessió.
+
+Decidiu si voleu //recuperar// la vostra darrera sessió d'edició, //suprimir// l'esborrany que es va desar automàticament o //cancel·lar// el procés d'edició. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt
new file mode 100644
index 000000000..743b0ff55
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt
@@ -0,0 +1,2 @@
+Editeu la pàgina i premeu ''Desa''. Per a més informació sobre la sintaxi Wiki vegeu [[wiki:syntax|sintaxi]]. Si us plau, editeu la pàgina només si podeu **millorar-la**. Si voleu fer proves, aprengueu a donar les primeres passes al [[playground:playground|pati]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt
new file mode 100644
index 000000000..b2f304cbb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt
@@ -0,0 +1,2 @@
+**Heu penjat una revisió anterior del document.** Si la deseu, creareu una nova versió amb aquestes dades.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt
new file mode 100644
index 000000000..6ba71fd8f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt
@@ -0,0 +1,4 @@
+====== Ãndex ======
+
+Heus ací un índex de totes les pàgines disponibles, ordenades per [[doku>namespaces|espais]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html
new file mode 100644
index 000000000..e7c8f0b57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html
@@ -0,0 +1,8 @@
+<p>Aquesta pàgina us ajuda a fer la primera instal·lació i la configuració de <a href="http://dokuwiki.org">Dokuwiki</a>. Hi ha més informació sobre aquest instal·lador en la seva <a href="http://dokuwiki.org/installer">pàgina de documentació</a>.</p>
+
+<p>DokuWiki utilitza fitxers normals per a emmagatzemar les pàgines wiki i la informació associada a aquestes pàgines (p. ex. imatges, índexs de cerca, revisions anteriors, etc.). Per tal de funcionar correctament DokuWiki <strong>necessita</strong> tenir accés d'escriptura als directoris que contenen aquests fitxers. Aquest instal·lador no pot configurar els permisos del directori. Normalment això cal fer-ho directament en la línia d'ordres o, si esteu utilitzant un hostatge, mitjançant FTP o el tauler de control del vostre hostatge (p. ex. cPanel).</p>
+
+<p>Aquest instal·lador configurarà el vostre DokuWiki per a <acronym title="access control list">ACL</acronym>, cosa que, al seu torn, permet l'accés de l'administrador al menú d'administració, on pot instal·lar connectors, gestionar usuaris, gestionar l'accés a les pàgines wiki i modificar els paràmetres de configuració. No és un requisit per al funcionament de DokuWiki, però el fa més fàcil d'administrar.</p>
+
+<p>Els usuaris experts o els que tinguin requeriments específics poden utilitzar els enllaços següents per a obtenir més detalls sobre <a href="http://dokuwiki.org/install">instruccions d'instal·lació</a>
+i <a href="http://dokuwiki.org/config">paràmetres de configuració</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php
new file mode 100644
index 000000000..778123445
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * catalan language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Carles Bellver <carles.bellver@cent.uji.es>
+ * @author Carles Bellver <carles.bellver@gmail.com>
+ * @author carles.bellver@gmail.com
+ * @author carles.bellver@cent.uji.es
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Edita aquesta pàgina';
+$lang['btn_source'] = 'Mostra codi font';
+$lang['btn_show'] = 'Mostra pàgina';
+$lang['btn_create'] = 'Crea aquesta pàgina';
+$lang['btn_search'] = 'Cerca';
+$lang['btn_save'] = 'Desa';
+$lang['btn_preview'] = 'Previsualitza';
+$lang['btn_top'] = 'Torna dalt';
+$lang['btn_newer'] = '<< més recent';
+$lang['btn_older'] = 'menys recent >>';
+$lang['btn_revs'] = 'Revisions anteriors';
+$lang['btn_recent'] = 'Canvis recents';
+$lang['btn_upload'] = 'Penja';
+$lang['btn_cancel'] = 'Cancel·la';
+$lang['btn_index'] = 'Ãndex';
+$lang['btn_secedit'] = 'Edita';
+$lang['btn_login'] = 'Entra';
+$lang['btn_logout'] = 'Surt';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Actualitza';
+$lang['btn_delete'] = 'Suprimeix';
+$lang['btn_back'] = 'Enrere';
+$lang['btn_backlink'] = 'Què hi enllaça';
+$lang['btn_backtomedia'] = 'Torna a la selecció de fitxers';
+$lang['btn_subscribe'] = 'Subscripció a canvis d\'aquesta pàgina';
+$lang['btn_unsubscribe'] = 'Cancel·la subscripció a pàgina';
+$lang['btn_subscribens'] = 'Subscripció a canvis d\'aquest espai';
+$lang['btn_unsubscribens'] = 'Cancel·la subscripció a espai';
+$lang['btn_profile'] = 'Actualització del perfil';
+$lang['btn_reset'] = 'Reinicia';
+$lang['btn_resendpwd'] = 'Envia nova contrasenya';
+$lang['btn_draft'] = 'Edita esborrany';
+$lang['btn_recover'] = 'Recupera esborrany';
+$lang['btn_draftdel'] = 'Suprimeix esborrany';
+$lang['btn_revert'] = 'Restaura';
+$lang['loggedinas'] = 'Heu entrat com';
+$lang['user'] = 'Nom d\'usuari';
+$lang['pass'] = 'Contrasenya';
+$lang['newpass'] = 'Nova contrasenya';
+$lang['oldpass'] = 'Confirmeu la contrasenya actual';
+$lang['passchk'] = 'una altra vegada';
+$lang['remember'] = 'Recorda\'m';
+$lang['fullname'] = 'Nom complet';
+$lang['email'] = 'Correu electrònic';
+$lang['register'] = 'Registra\'m';
+$lang['profile'] = 'Perfil d\'usuari';
+$lang['badlogin'] = 'Nom d\'usuari o contrasenya incorrectes.';
+$lang['minoredit'] = 'Canvis menors';
+$lang['draftdate'] = 'L\'esborrany s\'ha desat automàticament';
+$lang['nosecedit'] = 'Mentrestant la pàgina ha estat modificada. La informació de seccions estava obsoleta i ha calgut carregar la pàgina sencera.';
+$lang['regmissing'] = 'Heu d\'omplir tots els camps.';
+$lang['reguexists'] = 'Ja existeix un altre usuari amb aquest nom.';
+$lang['regsuccess'] = 'S\'ha creat l\'usuari. La contrasenya s\'ha enviat per correu.';
+$lang['regsuccess2'] = 'S\'ha creat l\'usuari.';
+$lang['regmailfail'] = 'Sembla que un error ha impedit enviar la contrasenya per correu. Contacteu amb l\'administrador.';
+$lang['regbadmail'] = 'L\'adreça de correu que heu donat no sembla vàlida. Si creieu que això és un error, contacu amb l\'administrador.';
+$lang['regbadpass'] = 'Les dues contrasenyes no són iguals. Torneu a intentar-ho.';
+$lang['regpwmail'] = 'La vostra contrasenya per al Wiki';
+$lang['reghere'] = 'Si no teniu un compte, aquí en podeu obtenir un';
+$lang['profna'] = 'Aquest wiki no permet modificar el perfil';
+$lang['profnochange'] = 'No heu introduït cap canvi.';
+$lang['profnoempty'] = 'No es pot deixar en blanc el nom o l\'adreça de correu.';
+$lang['profchanged'] = 'El perfil d\'usuari s\'ha actualitzat correctament.';
+$lang['pwdforget'] = 'Heu oblidat la contrasenya? Podeu obtenir-ne una de nova.';
+$lang['resendna'] = 'Aquest wiki no permet tornar a enviar la contrasenya.';
+$lang['resendpwd'] = 'Enviament d\'una nova contrasenya per a';
+$lang['resendpwdmissing'] = 'Heu d\'emplenar tots els camps.';
+$lang['resendpwdnouser'] = 'No s\'ha pogut trobar aquest usuari a la base de dades.';
+$lang['resendpwdbadauth'] = 'Aquest codi d\'autenticació no és vàlid. Assegureu-vos d\'utilitzar l\'enllaç de confirmació complet.';
+$lang['resendpwdconfirm'] = 'Se us ha enviat per correu electrònic un enllaç de confirmació.';
+$lang['resendpwdsuccess'] = 'Se us ha enviat la nova contrasenya per correu electrònic.';
+$lang['license'] = 'Excepte on es digui una altra cosa, el contingut d\'aquest wiki està subjecte a la llicència següent:';
+$lang['licenseok'] = 'Nota. En editar aquesta pàgina esteu acceptant que el vostre contingut estigui subjecte a la llicència següent:';
+$lang['searchmedia'] = 'Cerca pel nom de fitxer';
+$lang['searchmedia_in'] = 'Cerca en: %s';
+$lang['txt_upload'] = 'Trieu el fitxer que voleu penjar';
+$lang['txt_filename'] = 'Introduïu el nom wiki (opcional)';
+$lang['txt_overwrt'] = 'Sobreescriu el fitxer actual';
+$lang['lockedby'] = 'Actualment blocat per:';
+$lang['lockexpire'] = 'Venciment del blocatge:';
+$lang['willexpire'] = 'El blocatge per a editar aquesta pàgina venç d\'aquí a un minut.\nUtilitzeu la visualització prèvia per reiniciar el rellotge i evitar conflictes.';
+$lang['notsavedyet'] = 'Heu fet canvis que es perdran si no els deseu.\nVoleu continuar?';
+$lang['rssfailed'] = 'S\'ha produït un error en recollir aquesta alimentació: ';
+$lang['nothingfound'] = 'No s\'ha trobat res.';
+$lang['mediaselect'] = 'Selecció de fitxers';
+$lang['fileupload'] = 'Càrrega de fitxers';
+$lang['uploadsucc'] = 'S\'ha penjat el fitxer';
+$lang['uploadfail'] = 'No es pot penjar el fitxer. Potser no teniu prou permisos?';
+$lang['uploadwrong'] = 'No es pot penjar el fitxer. Aquesta extensió està prohibida.';
+$lang['uploadexist'] = 'El fitxer ja existeix. No s\'ha penjat.';
+$lang['uploadbadcontent'] = 'El contingut que heu penjat coincideix amb l\'extensió de fitxer %s.';
+$lang['uploadspam'] = 'La càrrega ha estat blocada per la llista negra de brossa.';
+$lang['uploadxss'] = 'La càrrega ha estat blocada perquè podria ser un contingut maligne.';
+$lang['uploadsize'] = 'El fitxer que voleu penjar és massa gran (màxim %s)';
+$lang['deletesucc'] = 'S\'ha suprimit el fitxer "%s".';
+$lang['deletefail'] = 'No s\'ha pogut suprimir el fitxer "%s". Comproveu els permisos.';
+$lang['mediainuse'] = 'No s\'ha pogut suprimir el fitxer "%s". Encara s\'està utilitzant.';
+$lang['namespaces'] = 'Espais';
+$lang['mediafiles'] = 'Fitxers disponibles en';
+$lang['js']['searchmedia'] = 'Cerca fitxers';
+$lang['js']['keepopen'] = 'Manté la finestra oberta';
+$lang['js']['hidedetails'] = 'Oculta detalls';
+$lang['js']['nosmblinks'] = 'Els enllaços amb recursos compartits de Windows només funcionen amb el Microsoft Internet Explorer.
+Si voleu podeu copiar i enganxar l\'enllaç.';
+$lang['js']['linkwiz'] = 'Auxiliar d\'enllaços';
+$lang['js']['linkto'] = 'Enllaça a:';
+$lang['js']['del_confirm'] = 'Suprimiu aquesta entrada?';
+$lang['js']['mu_btn'] = 'Penja múltiples fitxers';
+$lang['mediausage'] = 'Utilitzeu la sintaxi següent per referir-vos a aquest enllaç:';
+$lang['mediaview'] = 'Mostra el fitxer original';
+$lang['mediaroot'] = 'arrel';
+$lang['mediaupload'] = 'Pengeu aquí un fitxer dins de l\'espai actual. Per a crear un nou subespai, poseu-ne el nom davant del nom de fitxer i separeu-los amb el signe de dos punts.';
+$lang['mediaextchange'] = 'S\'ha canviat l\'extensió del fitxer de .%s a .%s';
+$lang['reference'] = 'Referències per a';
+$lang['ref_inuse'] = 'El fitxer no es pot suprimir perquè l\'estan utilitzant les pàgines següents:';
+$lang['ref_hidden'] = 'Algunes referències apareixen en pàgines per a les quals no teniu permís de lectura';
+$lang['hits'] = 'Resultats';
+$lang['quickhits'] = 'Noms de pàgina coincidents';
+$lang['toc'] = 'Taula de continguts';
+$lang['current'] = 'actual';
+$lang['yours'] = 'La vostra versió';
+$lang['diff'] = 'Mostra diferències amb la versió actual';
+$lang['diff2'] = 'Mostra diferències entre les revisions seleccionades';
+$lang['line'] = 'Línia';
+$lang['breadcrumb'] = 'Camí';
+$lang['youarehere'] = 'Sou aquí';
+$lang['lastmod'] = 'Darrera modificació';
+$lang['by'] = 'per';
+$lang['deleted'] = 'suprimit';
+$lang['created'] = 'creat';
+$lang['restored'] = 's\'ha restaurat una versió anterior';
+$lang['external_edit'] = 'edició externa';
+$lang['summary'] = 'Resum d\'edició';
+$lang['noflash'] = 'Per a visualitzar aquest contingut necessiteu el <a href="http://www.adobe.com/products/flashplayer/">connector d\'Adobe Flash</a>.';
+$lang['download'] = 'Baixa el fragment';
+$lang['mail_newpage'] = 'pàgina afegida:';
+$lang['mail_changed'] = 'pàgina modificada:';
+$lang['mail_new_user'] = 'nou usuari:';
+$lang['mail_upload'] = 'fitxer penjat:';
+$lang['qb_bold'] = 'Negreta';
+$lang['qb_italic'] = 'Cursiva';
+$lang['qb_underl'] = 'Subratllat';
+$lang['qb_code'] = 'Codi';
+$lang['qb_strike'] = 'Text barrat';
+$lang['qb_h1'] = 'Encapçalament nivell 1';
+$lang['qb_h2'] = 'Encapçalament nivell 2';
+$lang['qb_h3'] = 'Encapçalament nivell 3';
+$lang['qb_h4'] = 'Encapçalament nivell 4';
+$lang['qb_h5'] = 'Encapçalament nivell 5';
+$lang['qb_h'] = 'Encapçalament';
+$lang['qb_hs'] = 'Selcciona l\'encapçalament';
+$lang['qb_hplus'] = 'Encapçalament més alt';
+$lang['qb_hminus'] = 'Encapçalament més baix';
+$lang['qb_hequal'] = 'Encapçalament del mateix nivell';
+$lang['qb_link'] = 'Enllaç intern';
+$lang['qb_extlink'] = 'Enllaç extern';
+$lang['qb_hr'] = 'Ratlla horitzontal';
+$lang['qb_ol'] = 'Element de llista numerada';
+$lang['qb_ul'] = 'Element de llista de pics';
+$lang['qb_media'] = 'Afegeix imatges o altres fitxers';
+$lang['qb_sig'] = 'Insereix signatura';
+$lang['qb_smileys'] = 'Emoticones';
+$lang['qb_chars'] = 'Caràcters especials';
+$lang['upperns'] = 'Salta a l\'espai superior';
+$lang['admin_register'] = 'Afegeix nou usuari';
+$lang['metaedit'] = 'Edita metadades';
+$lang['metasaveerr'] = 'No s\'han pogut escriure les metadades';
+$lang['metasaveok'] = 'S\'han desat les metadades';
+$lang['img_backto'] = 'Torna a';
+$lang['img_title'] = 'Títol';
+$lang['img_caption'] = 'Peu d\'imatge';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nom de fitxer';
+$lang['img_fsize'] = 'Mida';
+$lang['img_artist'] = 'Fotògraf';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Càmera';
+$lang['img_keywords'] = 'Paraules clau';
+$lang['subscribe_success'] = 'S\'ha afegit %s a la llista de subscripcions de %s';
+$lang['subscribe_error'] = 'S\'ha produït un error en afegir %s a la llista de subscripcions de %s';
+$lang['subscribe_noaddress'] = 'No hi ha cap adreça de correu associada al vostre nom d\'usuari. No se us ha pogut afegir a la llista de subscripcions.';
+$lang['unsubscribe_success'] = '%s ha estat suprimit de la llista de subscripcions de %s';
+$lang['unsubscribe_error'] = 'S\'ha produït un error en suprimir %s de la llista de subscripcions de %s';
+$lang['authmodfailed'] = 'La configuració de l\'autenticació d\'usuaris és errònia. Informeu els administradors del wiki.';
+$lang['authtempfail'] = 'L\'autenticació d\'usuaris no està disponible temporalment. Si aquesta situació persisteix, si us plau informeu els administradors del wiki.';
+$lang['i_chooselang'] = 'Trieu l\'idioma';
+$lang['i_installer'] = 'Instal·lador de DokuWiki';
+$lang['i_wikiname'] = 'Nom del wiki';
+$lang['i_enableacl'] = 'Habilita ACL (recomanat)';
+$lang['i_superuser'] = 'Superusuari';
+$lang['i_problems'] = 'L\'instal·lador ha trobat alguns problemes, que s\'indiquen més avall. No podeu continuar fins que no els hàgiu solucionat.';
+$lang['i_modified'] = 'Per raons de seguretat aquesta seqüència només funciona amb una instal·lació nova i no modificada de Dokuwiki. Hauríeu de tornar a baixar el paquet i/o descomprimir-lo o consultar les <a href="http://dokuwiki.org/install">instruccions d\'instal·lació de Dokuwiki</a> completes';
+$lang['i_funcna'] = 'La funció PHP <code>%s</code> no està disponible. Potser el vostre proveïdor de serveis l\'ha inhabilitada per alguna raó';
+$lang['i_phpver'] = 'La vostra versió de PHP <code>%s</code> és inferior a la requerida <code>%s</code>. Necessiteu actualitzar la vostra instal·lació de PHP.';
+$lang['i_permfail'] = 'DokuWiki no pot escriure <code>%s</code>. Heu d\'arreglar els permisos d\'aquest directori';
+$lang['i_confexists'] = '<code>%s</code> ja existeix';
+$lang['i_writeerr'] = 'No es pot crear <code>%s</code>. Comproveu els permisos del directori i/o del fitxer i creeu el fitxer manualment.';
+$lang['i_badhash'] = 'dokuwiki.php no reconegut o modificat (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valor il·legal o buit';
+$lang['i_success'] = 'La configuració s\'ha acabat amb èxit. Ara podeu suprimir el fitxer install.php. Aneu al vostre nou <a href="doku.php">DokuWiki</a>.';
+$lang['i_failure'] = 'S\'han produït alguns errors en escriure els fitxers de configuració. Potser caldrà que els arregleu manualment abans d\'utilitzar el vostre nou <a href="doku.php">DokuWiki</a>.';
+$lang['i_policy'] = 'Política ACL inicial';
+$lang['i_pol0'] = 'Wiki obert (tothom pot llegir, escriure i penjar fitxers)';
+$lang['i_pol1'] = 'Wiki públic (tothom pot llegir, els usuaris registrats poden escriure i penjar fitxers)';
+$lang['i_pol2'] = 'Wiki tancat (només els usuaris registrats poden llegir, escriure i penjar fitxers)';
+$lang['i_retry'] = 'Reintenta';
+$lang['mu_intro'] = 'Aquí podeu penjar múltiples fitxers d\'una vegada. Feu clic en el botó Explora per afegir els fitxers a la cua. Després, premeu Penja.';
+$lang['mu_gridname'] = 'Nom del fitxer';
+$lang['mu_gridsize'] = 'Mida';
+$lang['mu_gridstat'] = 'Estat';
+$lang['mu_namespace'] = 'Espai';
+$lang['mu_browse'] = 'Explora';
+$lang['mu_toobig'] = 'massa gran';
+$lang['mu_ready'] = 'llest per a penjar';
+$lang['mu_done'] = 'complet';
+$lang['mu_fail'] = 'error';
+$lang['mu_authfail'] = 'la sessió ha vençut';
+$lang['mu_progress'] = 'càrrega @PCT@%';
+$lang['mu_filetypes'] = 'Tipus de fitxer permesos';
+$lang['mu_info'] = 'fitxers penjats.';
+$lang['mu_lasterr'] = 'Darrer error:';
+$lang['recent_global'] = 'Esteu veient els canvis recents de l\'espai <strong>%s</strong>. També podeu veure els <a href="%s">canvis recents de tot el wiki</a>.';
+$lang['years'] = 'fa %d anys';
+$lang['months'] = 'fa %d mesos';
+$lang['weeks'] = 'fa %d setmanes';
+$lang['days'] = 'fa %d dies';
+$lang['hours'] = 'fa %d hores';
+$lang['minutes'] = 'fa %d minuts';
+$lang['seconds'] = 'fa %d segons';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt
new file mode 100644
index 000000000..93487c268
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt
@@ -0,0 +1,3 @@
+====== Pàgina blocada ======
+
+Aquesta pàgina actualment està blocada per a edició per un altre usuari. Haureu d'esperar fins que aquest usuari acabe d'editar-la o fins que venci el blocatge.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt
new file mode 100644
index 000000000..37ca4d582
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt
@@ -0,0 +1,4 @@
+====== Entrada ======
+
+No heu entrat. Introduïu les vostres credencials d'autenticació en aquest formulari. A partir d'aquest moment heu de tenir les galetes habilitades en el vostre navegador.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt
new file mode 100644
index 000000000..eda330954
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt
@@ -0,0 +1,16 @@
+S'ha afegit o modificat una pàgina en el vostre wiki. Ací teniu més detalls:
+
+Data : @DATE@
+Navegador : @BROWSER@
+IP : @IPADDRESS@
+Rev. anterior : @OLDPAGE@
+Rev. actual : @NEWPAGE@
+Resum d'edició : @SUMMARY@
+Usuari : @USER@
+
+@DIFF@
+
+
+--
+Missatge generat per DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt
new file mode 100644
index 000000000..d0a2db92a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt
@@ -0,0 +1,3 @@
+====== Aquest tema encara no existeix ======
+
+Heu seguit un enllaç a un tema que encara no existeix. Podeu crear-lo per mitjà del botó ''Crea aquesta pàgina''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt
new file mode 100644
index 000000000..b5089c5eb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt
@@ -0,0 +1,5 @@
+====== No existeix aquesta revisió ======
+
+
+La revisió especificada no existeix. Utilitzeu el botó ''Revisions anteriors'' per obtenir una llista de revisions d'aquest document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt
new file mode 100644
index 000000000..fa2f98ca5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt
@@ -0,0 +1,4 @@
+====== Previsualització ======
+
+Heus ací una previsualització del vostre text. Recordeu que encara **no l'heu desat!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt
new file mode 100644
index 000000000..119c4292d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt
@@ -0,0 +1,15 @@
+@FULLNAME@,
+
+Algú ha sol·licitat una nova contrasenya per al vostre compte d'usuari en @TITLE@
+@DOKUWIKIURL@
+
+Si no heu fet aquesta sol·licitud, simplement no feu cas de la resta del missatge.
+
+Per confirmar que realment heu sol·licitat una nova contrasenya, utilitzeu
+l'enllaç següent:
+
+@CONFIRM@
+
+--
+Missatge generat per DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt
new file mode 100644
index 000000000..e173ad2dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt
@@ -0,0 +1,2 @@
+Aquesta pàgina és només de lectura. Podeu veure'n el codi font, però no podeu canviar-la. Consulteu el vostre administrador si penseu que això és degut a algun error.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt
new file mode 100644
index 000000000..cea2f5cff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt
@@ -0,0 +1,5 @@
+====== Canvis recents ======
+
+Les pàgines següents s'han modificat recentment.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt
new file mode 100644
index 000000000..a91e6df31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt
@@ -0,0 +1,4 @@
+====== Registre d'un usuari nou ======
+
+Empleneu tota la informació que se us demana per crear un compte nou en aquest wiki. Assegureu-vos que doneu una **adreça de correu vàlida**, on se us enviarà la vostra contrasenya. El nom d'usuari o usuària ha de ser vàlid com a [[doku>pagename|nom de pàgina]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt
new file mode 100644
index 000000000..84bf5f1a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt
@@ -0,0 +1,14 @@
+S'ha registrat un nou usuari. Heus ací els detalls:
+
+Nom d'usuari: @NEWUSER@
+Nom complet: @NEWNAME@
+E-mail: @NEWEMAIL@
+
+Data: @DATE@
+Navegador: @BROWSER@
+Adreça IP: @IPADDRESS@
+Ordinador: @HOSTNAME@
+
+--
+Missatge generat per DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt
new file mode 100644
index 000000000..cd59f899d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Nova contrasenya ======
+
+Per sol·licitar una nova contrasenya, introduïu el vostre nom d'usuari en el formulari següent. Se us enviarà un enllaç de confirmació a l'adreça de correu amb què us vau registrar. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt
new file mode 100644
index 000000000..5c044d8e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt
@@ -0,0 +1,4 @@
+====== Revisions anteriors ======
+
+Heus ací les revisions anteriors del document actual. Per restaurar una revisió anterior, seleccioneu-la de la llista, feu clic en ''Edita aquesta pàgina'' i deseu-la.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt
new file mode 100644
index 000000000..bf69aef15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt
@@ -0,0 +1,5 @@
+====== Cerca ======
+
+Heus ací els resultats de la cerca. Si no trobeu allò que buscàveu, podeu crear una pàgina nova per mitjà del botó ''Edita aquesta pàgina''.
+
+===== Resultats ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt
new file mode 100644
index 000000000..b1411824f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt
@@ -0,0 +1,2 @@
+**Aquesta és una revisió antiga del document**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt
new file mode 100644
index 000000000..03be425ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt
@@ -0,0 +1,106 @@
+# Això és una llista de paraules que seran omeses per l'indexador, una paraula per línia
+# Utilitzeu finals de línia UNIX
+# No cal incloure paraules de menys de 3 caràcters: s'ometran igualment
+# Llista basada en http://www.ranks.nl/stopwords/
+abans
+algun
+alguna
+alguns
+algunes
+altre
+altra
+altres
+amb
+ambdós
+anar
+ans
+aquell
+aquella
+aquelles
+aquells
+aquí
+bastant
+cada
+com
+dalt
+des
+dins
+ell
+ella
+elles
+ells
+els
+ens
+entre
+era
+erem
+eren
+eres
+estan
+estat
+estava
+estem
+esteu
+estic
+està
+ets
+faig
+fan
+fas
+fem
+fer
+feu
+haver
+inclòs
+llarg
+llavors
+mentre
+meu
+mode
+molt
+molts
+nosaltres
+per
+per que
+perquè
+però
+podem
+poden
+poder
+podeu
+potser
+primer
+puc
+quan
+quant
+qui
+sabem
+saben
+saber
+sabeu
+sap
+saps
+sense
+ser
+seu
+seus
+sóc
+solament
+sols
+som
+sota
+també
+tene
+tenim
+tenir
+teniu
+teu
+tinc
+tot
+una
+uns
+unes
+uns
+vaig
+van
+vosaltres
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt
new file mode 100644
index 000000000..5558d2ff5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt
@@ -0,0 +1,15 @@
+La pàgina @PAGE@ del wiki @TITLE@ ha estat modificada.
+Heus ací els canvis:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Per cancel·lar la subscripció a aquesta pàgina, entre al wiki en
+@DOKUWIKIURL@, aneu a
+@NEWPAGE@
+i trieu 'Cancel·la subscripció'.
+
+--
+Missatge generat per DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt
new file mode 100644
index 000000000..0ba022600
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Actualització del perfil d'usuari ======
+
+Només cal que completeu els camps que vulgueu canviar. El nom d'usuari no es pot canviar. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt
new file mode 100644
index 000000000..c282f1f37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt
@@ -0,0 +1,14 @@
+S'ha penjat un fitxer al vostre DokuWiki. Heus ací els detalls:
+
+Fitxer: @MEDIA@
+Data: @DATE@
+Navegador: @BROWSER@
+Adreça IP: @IPADDRESS@
+Ordinador: @HOSTNAME@
+Mida: @SIZE@
+Tipus MIME: @MIME@
+Usuari: @USER@
+
+--
+Missatge generat per DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt
new file mode 100644
index 000000000..1b5f5fb36
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt
@@ -0,0 +1,4 @@
+====== Brossa blocada ======
+
+Els canvis **no** s'han desat perquè contenen una o més paraules blocades. Volíeu inundar el wiki amb brossa? Molt mal fet! Si penseu que això és un error, contacteu amb l'administrador d'aquest Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt
new file mode 100644
index 000000000..ccfbc4455
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt
@@ -0,0 +1,3 @@
+====== Správa ======
+
+Níže je možno spravovat vaši DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt
new file mode 100644
index 000000000..005f8f2df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt
@@ -0,0 +1 @@
+===== Další pluginy ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt
new file mode 100644
index 000000000..59430eeae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt
@@ -0,0 +1,3 @@
+====== Zpětné odkazy ======
+
+Zde je seznam stránek, které pravděpodobně odkazují na aktuální stránku.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt
new file mode 100644
index 000000000..941118db3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt
@@ -0,0 +1,5 @@
+====== Existuje novější verze ======
+
+Existuje novější verze právě upravovaného dokumentu. To se stává, pokud někdo jiný změnil dokument, který právě upravujete.
+
+ProhlédnÄ›te si níže uvedené rozdíly, případnÄ› rozdíly z obou verzí ruÄnÄ› spojte dohromady a rozhodnÄ›te se, kterou verzi uchovat. Pokud zvolíte ''Uložit'', bude uložena vaÅ¡e verze. Jinak stisknÄ›te ''Storno'' pro uchování původní verze.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt
new file mode 100644
index 000000000..00a8811de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt
@@ -0,0 +1,3 @@
+====== Nepovolená akce ======
+
+Promiňte, ale nemáte dostateÄná oprávnÄ›ní k této Äinnosti. Možná jste se zapomnÄ›li pÅ™ihlásit?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt
new file mode 100644
index 000000000..d49e56993
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt
@@ -0,0 +1,4 @@
+====== Rozdíly ======
+
+Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt
new file mode 100644
index 000000000..ebdfb8d9d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt
@@ -0,0 +1,5 @@
+====== Nalezen koncept ======
+
+VaÅ¡e minulá editace této stránky nebyla korektnÄ› dokonÄena. DokuWiki bÄ›hem editace automaticky uložila koncept, který nyní můžete použít a pokraÄovat v editaci. Níže je vidÄ›t text uložený bÄ›hem minulé editace.
+
+Prosím rozhodnÄ›te se, jestli chcete automaticky uložený koncept //obnovit// a pokraÄovat v editaci, nebo jej chcete //vymazat//, nebo úplnÄ› //zruÅ¡it// celý proces editace.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt
new file mode 100644
index 000000000..1a135aee3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt
@@ -0,0 +1 @@
+Upravte stránku a stiskněte ''Uložit''. Na stránce [[wiki:syntax]] se můžete dozvědět více o wiki syntaxi. Prosím upravujte stránky pouze, pokud je můžete **vylepšit**. V případě, že si chcete něco pouze vyzkoušet, použijte raději [[playground:playground|pískoviště]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt
new file mode 100644
index 000000000..44f0bc67d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt
@@ -0,0 +1,2 @@
+**Máte naÄtenou starší verzi dokumentu!** Pokud ji uložíte, vytvoříte tím novou aktuální verzi.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt
new file mode 100644
index 000000000..d19626f6f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt
@@ -0,0 +1,3 @@
+====== Index ======
+
+Zde je k dispozici index všech dostupných stránek seřazený podle [[doku>namespaces|jmenných prostorů]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html
new file mode 100644
index 000000000..726d7c31f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html
@@ -0,0 +1,23 @@
+<p>Tato stránka vám pomůže při první instalaci a konfiguraci
+<a href="http://dokuwiki.org">Dokuwiki</a>. Více
+informací o tomto instalátoru naleznete v jeho vlastní <a
+href="http://dokuwiki.org/installer">dokumentaci</a>.</p>
+
+<p>DokuWiki používá obyÄejné soubory pro uložení wiki stránek a dalších informací
+spojených s nimi (např. obrázků, vyhledávacích indexů, starších verzí). Aby DokuWiki
+správně fungovala <strong>musí</strong> mít přístup k adresářům, kde jsou uloženy
+tyto soubory. Tento instalátor není schopen sám nastavit přístupová práva k souborům
+a adresářům. To se obyÄejnÄ› dÄ›lá přímo v shellu nebo, používáte-li hosting, pÅ™es
+FTP nebo ovládací panel vašeho hostingu (např. cPanel).</p>
+
+<p>Tento instalátor nastaví <acronym title="access control list">ACL</acronym>
+(přístupová práva uživatelů) pro vaši DokuWiki, což umožní správci přihlásit
+se do administraÄní Äásti DokuWiki a tam instalovat pluginy, spravovat uživatele,
+nastavovat přístup k wiki stránkám a měnit další nastavení wiki. Není to
+nutné, ale zpříjemní to správu DokuWiki.</p>
+
+<p>Zkušení uživatelé nebo uživatelé se speciálními požadavky by se
+měli podívat na následující stránky pro další informace ohledně
+<a href="http://dokuwiki.org/install">instalace</a> a
+<a href="http://dokuwiki.org/config">nastavení</a> DokuWiki.</p>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php
new file mode 100644
index 000000000..ffc2a05d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Bohumir Zamecnik <bohumir@zamecnik.org>
+ * @author Tomas Valenta <t.valenta@sh.cvut.cz>
+ * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
+ * @author tomas@valenta.cz
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Upravit stránku';
+$lang['btn_source'] = 'Zdrojový kód stránky';
+$lang['btn_show'] = 'Zobrazit stránku';
+$lang['btn_create'] = 'Vytvořit stránku';
+$lang['btn_search'] = 'Hledat';
+$lang['btn_save'] = 'Uložit';
+$lang['btn_preview'] = 'Náhled';
+$lang['btn_top'] = 'Nahoru';
+$lang['btn_newer'] = '<< novější';
+$lang['btn_older'] = 'starší >>';
+$lang['btn_revs'] = 'Starší verze';
+$lang['btn_recent'] = 'Poslední úpravy';
+$lang['btn_upload'] = 'NaÄíst';
+$lang['btn_cancel'] = 'Storno';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Upravit';
+$lang['btn_login'] = 'Přihlásit se';
+$lang['btn_logout'] = 'Odhlásit se';
+$lang['btn_admin'] = 'Správa';
+$lang['btn_update'] = 'Aktualizovat';
+$lang['btn_delete'] = 'Vymazat';
+$lang['btn_back'] = 'Zpět';
+$lang['btn_backlink'] = 'Zpětné odkazy';
+$lang['btn_backtomedia'] = 'Zpět do Výběru dokumentu';
+$lang['btn_subscribe'] = 'Odebírat mailem změny stránky';
+$lang['btn_unsubscribe'] = 'Neodebírat mailem změny stránky';
+$lang['btn_subscribens'] = 'Odebírat mailem změny ve jmenném prostoru';
+$lang['btn_unsubscribens'] = 'Neodebírat mailem změny ve jmenném prostoru';
+$lang['btn_profile'] = 'Upravit profil';
+$lang['btn_reset'] = 'Reset';
+$lang['btn_resendpwd'] = 'Zaslat nové heslo';
+$lang['btn_draft'] = 'Upravit koncept';
+$lang['btn_recover'] = 'Obnovit koncept';
+$lang['btn_draftdel'] = 'Vymazat koncept';
+$lang['btn_revert'] = 'Vrátit zpět';
+$lang['loggedinas'] = 'Přihlášen(a) jako';
+$lang['user'] = 'Uživatelské jméno';
+$lang['pass'] = 'Heslo';
+$lang['newpass'] = 'Nové heslo';
+$lang['oldpass'] = 'SouÄasné heslo';
+$lang['passchk'] = 'ještě jednou';
+$lang['remember'] = 'Přihlásit se nastálo';
+$lang['fullname'] = 'Celé jméno';
+$lang['email'] = 'E-mail';
+$lang['register'] = 'Registrovat';
+$lang['profile'] = 'Uživatelský profil';
+$lang['badlogin'] = 'Zadané uživatelské jméno a heslo není správně.';
+$lang['minoredit'] = 'Drobné změny';
+$lang['draftdate'] = 'Koncept automaticky uložen v';
+$lang['nosecedit'] = 'Stránka byla v meziÄase zmÄ›nÄ›na. Informace o sekci již nebylo platné, byla naÄtena celá stránka.';
+$lang['regmissing'] = 'Musíte vyplnit všechny údaje.';
+$lang['reguexists'] = 'Uživatel se stejným jménem už je zaregistrován.';
+$lang['regsuccess'] = 'Uživatelský úÄet byl vytvoÅ™en a heslo zasláno mailem.';
+$lang['regsuccess2'] = 'Uživatelský úÄet byl vytvoÅ™en.';
+$lang['regmailfail'] = 'Zdá se, že nastala chyba při posílání mailu s heslem. Zkuste kontaktovat správce.';
+$lang['regbadmail'] = 'Zadaná mailová adresa není platná. Pokud si myslíte, že to je špatně, zkuste kontaktovat správce.';
+$lang['regbadpass'] = 'Heslo nebylo zadáno dvakrát stejně, zkuste to prosím znovu.';
+$lang['regpwmail'] = 'Vaše heslo do systému DokuWiki';
+$lang['reghere'] = 'Nemáte uživatelský úÄet? ZÅ™iÄte si ho';
+$lang['profna'] = 'Tato wiki neumožňuje změnu profilu';
+$lang['profnochange'] = 'Žádné změny nebyly provedeny.';
+$lang['profnoempty'] = 'Nelze zadat prázdné jméno nebo mailová adresa.';
+$lang['profchanged'] = 'Uživatelský profil změněn.';
+$lang['pwdforget'] = 'Zapomněli jste heslo? Nechte si zaslat nové';
+$lang['resendna'] = 'Tato wiki neumožňuje zasílání nových hesel.';
+$lang['resendpwd'] = 'Odeslat nové heslo pro uživatele';
+$lang['resendpwdmissing'] = 'Musíte vyplnit všechny položky.';
+$lang['resendpwdnouser'] = 'Bohužel takový uživatel v systému není.';
+$lang['resendpwdbadauth'] = 'AutorizaÄní kód není platný. Zadali jste opravdu celý odkaz na potvrzovací stránku?';
+$lang['resendpwdconfirm'] = 'Odkaz na potvrzovací stránku byl odeslán mailem.';
+$lang['resendpwdsuccess'] = 'Vaše nové heslo bylo odesláno emailem.';
+$lang['license'] = 'Kromě míst, kde je explicitně uvedeno jinak, je obsah této wiki licencován pod následující licencí:';
+$lang['licenseok'] = 'Poznámka: Tím, že editujete tuto stránku, souhlasíte, aby váš obsah byl licencován pod následující licencí:';
+$lang['searchmedia'] = 'Hledat jméno souboru:';
+$lang['searchmedia_in'] = 'Hledat v %s';
+$lang['txt_upload'] = 'Vyberte soubor jako přílohu';
+$lang['txt_filename'] = 'Wiki jméno (volitelné)';
+$lang['txt_overwrt'] = 'Přepsat existující soubor';
+$lang['lockedby'] = 'Právě zamknuto:';
+$lang['lockexpire'] = 'Zámek vyprší:';
+$lang['willexpire'] = 'Váš zámek pro editaci za chvíli vyprší.\nAbyste pÅ™edeÅ¡li konfliktům, stisknÄ›te tlaÄítko Náhled a zámek se prodlouží.';
+$lang['notsavedyet'] = 'Jsou tu neuložené zmÄ›ny, které budou ztraceny.\nChcete opravdu pokraÄovat?';
+$lang['rssfailed'] = 'Nastala chyba při vytváření tohoto RSS: ';
+$lang['nothingfound'] = 'Nic nenalezeno.';
+$lang['mediaselect'] = 'Výběr dokumentu';
+$lang['fileupload'] = 'NaÄtení dokumentu';
+$lang['uploadsucc'] = 'Přenos proběhl v pořádku';
+$lang['uploadfail'] = 'Chyba pÅ™i naÄítání. Možná kvůli Å¡patnÄ› nastaveným právům?';
+$lang['uploadwrong'] = 'NaÄtení souboru s takovouto příponou není dovoleno.';
+$lang['uploadexist'] = 'Soubor už existuje, necháme ho být.';
+$lang['uploadbadcontent'] = 'Obsah naÄteného dokumentu %s neodpovídá jeho příponÄ›.';
+$lang['uploadspam'] = 'NaÄtený dokument byl odmítnut, je na spamovém blacklistu.';
+$lang['uploadxss'] = 'NaÄtený dokument byl odmítnut. Zdá se, že obsahuje Å¡kodlivé vÄ›ci.';
+$lang['uploadsize'] = 'Nahraný soubor byl příliš velký (max. %s)';
+$lang['deletesucc'] = 'Soubor "%s" byl vymazán.';
+$lang['deletefail'] = 'Soubor "%s" nelze vymazat - zkontrolujte oprávnění.';
+$lang['mediainuse'] = 'Soubor "%s" nebyl vymazán - stále se používá.';
+$lang['namespaces'] = 'Jmenné prostory';
+$lang['mediafiles'] = 'Dostupné soubory';
+$lang['js']['searchmedia'] = 'Hledat soubory';
+$lang['js']['keepopen'] = 'Po vybrání souboru nechat okno otevřené';
+$lang['js']['hidedetails'] = 'Skrýt detaily';
+$lang['js']['nosmblinks'] = 'Odkazování na sdílené prostředky Windows funguje jen v Internet Exploreru.
+Přesto tento odkaz můžete zkopírovat a vložit jinde.';
+$lang['js']['linkwiz'] = 'Průvodce odkazy';
+$lang['js']['linkto'] = 'Odkaz na:';
+$lang['js']['del_confirm'] = 'Vymazat tuto položku?';
+$lang['js']['mu_btn'] = 'NaÄíst více souborů najednou';
+$lang['mediausage'] = 'K odkázání se na tento soubor použijte následující syntax:';
+$lang['mediaview'] = 'Zobrazit původní soubor';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'NaÄíst soubor do aktuálního jmenného prostoru. K vytvoÅ™ení nových jmenných prostorů, pÅ™idejte jejich názvy na zaÄátek wiki jména (oddÄ›lte dvojteÄkou).';
+$lang['mediaextchange'] = 'Přípona souboru byla změněna z .%s na .%s!';
+$lang['reference'] = 'Odkazy na';
+$lang['ref_inuse'] = 'Soubor nelze vymazat, jelikož ho využívají následující stránky:';
+$lang['ref_hidden'] = 'Některé odkazy jsou na stránkách, kam nemáte právo přístupu';
+$lang['hits'] = '- poÄet výskytů';
+$lang['quickhits'] = 'Odpovídající stránky';
+$lang['toc'] = 'Obsah';
+$lang['current'] = 'aktuální';
+$lang['yours'] = 'Vaše verze';
+$lang['diff'] = 'zobrazit rozdíly vůÄi aktuální verzi';
+$lang['diff2'] = 'zobrazit rozdíly mezi vybranými verzemi';
+$lang['line'] = 'Řádek';
+$lang['breadcrumb'] = 'Historie';
+$lang['youarehere'] = 'Umístění';
+$lang['lastmod'] = 'Poslední úprava';
+$lang['by'] = 'autor:';
+$lang['deleted'] = 'odstraněno';
+$lang['created'] = 'vytvořeno';
+$lang['restored'] = 'stará verze byla obnovena';
+$lang['external_edit'] = 'upraveno mimo DokuWiki';
+$lang['summary'] = 'Komentář k úpravám';
+$lang['noflash'] = 'Pro přehrání obsahu potřebujete <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['download'] = 'Stáhnout snippet';
+$lang['mail_newpage'] = 'nová stránka:';
+$lang['mail_changed'] = 'změna stránky:';
+$lang['mail_new_user'] = 'nový uživatel:';
+$lang['mail_upload'] = 'naÄtený dokument:';
+$lang['qb_bold'] = 'TuÄnÄ›';
+$lang['qb_italic'] = 'Kurzíva';
+$lang['qb_underl'] = 'Podtržení';
+$lang['qb_code'] = 'Neformátovat (zdrojový kód)';
+$lang['qb_strike'] = 'Přeškrtnutý text';
+$lang['qb_h1'] = 'Nadpis 1. úrovně';
+$lang['qb_h2'] = 'Nadpis 2. úrovně';
+$lang['qb_h3'] = 'Nadpis 3. úrovně';
+$lang['qb_h4'] = 'Nadpis 4. úrovně';
+$lang['qb_h5'] = 'Nadpis 5. úrovně';
+$lang['qb_h'] = 'Nadpis';
+$lang['qb_hs'] = 'Vybrat nadpis';
+$lang['qb_hplus'] = 'Nadpis vyšší úrovně';
+$lang['qb_hminus'] = 'Nadpis nižší úrovně';
+$lang['qb_hequal'] = 'Nadpis stejné úrovně';
+$lang['qb_link'] = 'Interní odkaz';
+$lang['qb_extlink'] = 'Externí odkaz';
+$lang['qb_hr'] = 'Vodorovná Äára';
+$lang['qb_ol'] = 'Číslovaný seznam';
+$lang['qb_ul'] = 'NeÄíslovaný seznam';
+$lang['qb_media'] = 'Vložit obrázky nebo jiné soubory';
+$lang['qb_sig'] = 'Vložit podpis';
+$lang['qb_smileys'] = 'Emotikony';
+$lang['qb_chars'] = 'Speciální znaky';
+$lang['upperns'] = 'skoÄit do nadÅ™azeného jmenného prostoru';
+$lang['admin_register'] = 'Přidat nového uživatele';
+$lang['metaedit'] = 'Upravit Metadata';
+$lang['metasaveerr'] = 'Chyba při zápisu metadat';
+$lang['metasaveok'] = 'Metadata uložena';
+$lang['img_backto'] = 'Zpět na';
+$lang['img_title'] = 'Titulek';
+$lang['img_caption'] = 'Popis';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Jméno souboru';
+$lang['img_fsize'] = 'Velikost';
+$lang['img_artist'] = 'Autor fotografie';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formát';
+$lang['img_camera'] = 'Typ fotoaparátu';
+$lang['img_keywords'] = 'KlíÄová slova';
+$lang['subscribe_success'] = 'Uživatel %s je nyní přihlášen k odběru změn ve stránce %s';
+$lang['subscribe_error'] = 'Chyba při zařazování uživatele %s do seznamu pro odběr změn ve stránce %s';
+$lang['subscribe_noaddress'] = 'K vašemu uživatelskému profilu chybí mailová adresa, takže vás nelze zařadit do seznamu pro odběr změn';
+$lang['unsubscribe_success'] = 'Uživatel %s byl odebrán ze seznamu pro odběr změn ve stránce %s';
+$lang['unsubscribe_error'] = 'Chyba při odstraňování uživatele %s ze seznamu pro odběru změn ve stránce %s';
+$lang['authmodfailed'] = 'Autentizace uživatelů je špatně nastavena. Informujte prosím správce této wiki.';
+$lang['authtempfail'] = 'Autentizace uživatelů je doÄasnÄ› nedostupná. Pokud tento problém pÅ™etrvává, informujte prosím správce této wiki.';
+$lang['i_chooselang'] = 'Vyberte si jazyk';
+$lang['i_installer'] = 'Instalace DokuWiki';
+$lang['i_wikiname'] = 'Název wiki';
+$lang['i_enableacl'] = 'Zapnout ACL (doporuÄeno)';
+$lang['i_superuser'] = 'Správce';
+$lang['i_problems'] = 'Instalátor narazil na níže popsané problémy. Nelze pokraÄovat v instalaci, dokud je neopravíte.';
+$lang['i_modified'] = 'Instalátor bude z bezpeÄnostních důvodů pracovat pouze s Äistou a jeÅ¡tÄ› neupravenou instalací DokuWiki. BuÄ znovu rozbalte souboru z instalaÄního balíÄku nebo se zkuste poradit s <a href="http://dokuwiki.org/install">instrukcemi pro instalci DokuWiki</a>.';
+$lang['i_funcna'] = 'PHP funkce <code>%s</code> není dostupná. Váš webhosting ji možná z nějakého důvodu vypnul.';
+$lang['i_phpver'] = 'Verze vaší instalace PHP <code>%s</code> je nižší než požadovaná <code>%s</code>. Budete muset aktualizovat svou instalaci PHP.';
+$lang['i_permfail'] = 'DokuWiki nemůže zapisovat do <code>%s</code>. Budete muset opravit práva k tomuto adresáři.';
+$lang['i_confexists'] = '<code>%s</code> již existuje';
+$lang['i_writeerr'] = 'Nelze vytvoÅ™it <code>%s</code>. Budete muset zkontrolovat práva k souborům Äi adresářům a vytvoÅ™it tento soubor ruÄnÄ›.';
+$lang['i_badhash'] = 'soubor dokuwiki.php (hash=<code>%s</code>) nebyl rozpoznán nebo byl upraven';
+$lang['i_badval'] = '<code>%s</code> - neplatná nebo prázdná hodnota';
+$lang['i_success'] = 'Konfigurace byla úspěšnÄ› dokonÄena. Nyní můžete smazat soubor install.php. PokraÄujte do <a href="doku.php">své nové DokuWiki</a>.';
+$lang['i_failure'] = 'Vyskytly se nÄ›jaké chyby pÅ™i zápisu do konfiguraÄních souborů. Budete je nejspíš muset upravit ruÄnÄ› pÅ™ed použitím <a href="doku.php">své nové DokuWiki</a>.';
+$lang['i_policy'] = 'Úvodní politika ACL';
+$lang['i_pol0'] = 'OtevÅ™ená wiki (Ätení, zápis a upload pro vÅ¡echny)';
+$lang['i_pol1'] = 'VeÅ™ejná wiki (Ätení pro vÅ¡echny, zápis a upload pro registrované uživatele)';
+$lang['i_pol2'] = 'UzavÅ™ená wiki (Ätení, zápis a upload pouze pro registrované uživatele)';
+$lang['i_retry'] = 'Zkusit znovu';
+$lang['mu_intro'] = 'Zde můžete naÄíst více souborů najednou. Pro pÅ™idání souborů do fronty stisknÄ›te tlaÄítko "Procházet". Až budete hotovi, stisknÄ›te "NaÄíst".';
+$lang['mu_gridname'] = 'Název souboru';
+$lang['mu_gridsize'] = 'Velikost';
+$lang['mu_gridstat'] = 'Stav';
+$lang['mu_namespace'] = 'Jmenný prostor';
+$lang['mu_browse'] = 'Procházet';
+$lang['mu_toobig'] = 'příliš velké';
+$lang['mu_ready'] = 'pÅ™ipraveno k naÄtení';
+$lang['mu_done'] = 'hotovo';
+$lang['mu_fail'] = 'selhalo';
+$lang['mu_authfail'] = 'vypršla session';
+$lang['mu_progress'] = '@PCT@% naÄten';
+$lang['mu_filetypes'] = 'Povolené typy souborů';
+$lang['mu_info'] = 'soubory naÄteny.';
+$lang['mu_lasterr'] = 'Poslední chyba:';
+$lang['recent_global'] = 'Právě si prohlížíte změny ve jmenném prostoru <b>%s</b>. Také si můžete <a href="%s">zobrazit změny v celé wiki</a>.';
+$lang['years'] = 'před % roky';
+$lang['months'] = 'před % měsíci';
+$lang['weeks'] = 'před % týdny';
+$lang['days'] = 'před % dny';
+$lang['hours'] = 'před % hodinami';
+$lang['minutes'] = 'před % minutami';
+$lang['seconds'] = 'před % sekundami';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt
new file mode 100644
index 000000000..23fd943a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt
@@ -0,0 +1,3 @@
+====== Stránka je zamknutá ======
+
+Tato stránka je právÄ› zamknutá pro úpravy jiným uživatelem. Musíte poÄkat, než onen uživatel dokonÄí své úpravy nebo než tento zámek vyprší.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt
new file mode 100644
index 000000000..a44ae599a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt
@@ -0,0 +1,3 @@
+====== Přihlášení ======
+
+MomentálnÄ› nejste pÅ™ihlášen(a)! Prosím vložte své identifikaÄní údaje níže. Pro pÅ™ihlášení musíte mít zapnuté cookies.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt
new file mode 100644
index 000000000..9fc68cdce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt
@@ -0,0 +1,17 @@
+Stránka ve vaší DokuWiki byla změněna. Zde jsou podrobnosti:
+
+Datum : @DATE@
+ProhlížeÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Hostitel : @HOSTNAME@
+Stará verze : @OLDPAGE@
+Nová verze : @NEWPAGE@
+Komentář : @SUMMARY@
+Uživatel : @USER@
+
+@DIFF@
+
+
+--
+Tato zpráva byla vygenerována systémem DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt
new file mode 100644
index 000000000..091250af7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt
@@ -0,0 +1,3 @@
+====== Stránka s tímto názvem ještě neexistuje ======
+
+Odkaz vás zavedl na stránku, která jeÅ¡tÄ› neexistuje. Můžete ji vytvoÅ™it stisknutím tlaÄítka ''VytvoÅ™it stránku''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt
new file mode 100644
index 000000000..f601f5899
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt
@@ -0,0 +1,3 @@
+====== Taková verze neexistuje ======
+
+Zadaná verze neexistuje. StisknÄ›te tlaÄítko ''Starší verze'' pro seznam starších verzí tohoto dokumentu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt
new file mode 100644
index 000000000..079eda4e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt
@@ -0,0 +1,3 @@
+====== Náhled ======
+
+Zde je náhled, jak bude dokument vypadat. Pozor: Soubor zatím **není uložen**!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt
new file mode 100644
index 000000000..1199150e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt
@@ -0,0 +1,13 @@
+Dobrý den,
+
+NÄ›kdo požádal o nové heslo k vaÅ¡emu uživatelskému úÄtu na wiki @TITLE@ (@DOKUWIKIURL@)
+
+Pokud jste o nové heslo nežádali, ignorujte prosím tento mail.
+
+Pro potvrzení, že jste tento požadavek poslali opravdu vy, prosím otevřete následující odkaz.
+
+@CONFIRM@
+
+--
+Tento mail byl automaticky vygenerován systémem DokuWiki
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt
new file mode 100644
index 000000000..d5b2d73cb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt
@@ -0,0 +1 @@
+Tato stránka je pouze pro Ätení. Můžete si pouze prohlédnout zdrojový kód, ale ne ho mÄ›nit. Zeptejte se správce, pokud si myslíte, že nÄ›co není v pořádku.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt
new file mode 100644
index 000000000..e4ca5e9bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt
@@ -0,0 +1,3 @@
+====== Poslední úpravy ======
+
+Následující stránky byly nedávno změněny.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt
new file mode 100644
index 000000000..b0d6bb1ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt
@@ -0,0 +1,3 @@
+====== Zaregistrujte se jako nový uživatel ======
+
+Abyste získali uživatelský úÄet, vyplňte prosím vÅ¡echny informace v následujícím formuláři. Zadejte **platnou** mailovou adresu, na níž bude zasláno heslo. Uživatelské jméno musí být v platném [[doku>pagename|formátu]] (který je stejný jako formát názvu stránky).
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt
new file mode 100644
index 000000000..e51ee6bb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt
@@ -0,0 +1,14 @@
+Zaregistroval se nový uživatel. Zde jsou detaily:
+
+Uživatelské jméno : @NEWUSER@
+Celé jméno : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Datum : @DATE@
+ProhlížeÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Hostitel : @HOSTNAME
+
+--
+Tato zpráva byla vygenerována systémem DokuWiki
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt
new file mode 100644
index 000000000..1d2aa0d97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Zaslat nové heslo ======
+
+Abyste získali nové heslo k vaÅ¡emu uÄtu v této wiki, vyplňte vÅ¡echny níže uvedené informace . VaÅ¡e nové heslo bude zasláno na emailovou adresu, kterou jste zadali pÅ™i registraci. Uživatelské jméno by mÄ›lo být stejné jako vaÅ¡e uživatelské jméno, s nímž se pÅ™ihlaÅ¡ujete do této wiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt
new file mode 100644
index 000000000..e3744b76f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt
@@ -0,0 +1,3 @@
+====== Starší verze ======
+
+Zde jsou starší verze daného dokumentu. Pro návrat ke starší verzi si ji zvolte ze seznamu níže, stisknÄ›te tlaÄítko ''Upravit stránku'' a uložte ji.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt
new file mode 100644
index 000000000..ac045e100
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt
@@ -0,0 +1,5 @@
+====== Vyhledávání ======
+
+Výsledky hledání můžete vidÄ›t níže. Pokud jste nenaÅ¡li, co hledáte, zkuste požadovanou stránku sami vytvoÅ™it stisknutím tlaÄítka ''VytvoÅ™it stránku''.
+
+===== Výsledky =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt
new file mode 100644
index 000000000..48be467b2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt
@@ -0,0 +1,3 @@
+**Toto je starší verze dokumentu!**
+----
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt
new file mode 100644
index 000000000..26d874143
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt
@@ -0,0 +1,944 @@
+# Stopwords for Czech - generated from ispell-cs (license: GNU GPL)
+aby
+ako
+akorát
+ale
+and
+ani
+ano
+apod
+asi
+atd
+během
+bez
+beze
+blízko
+bohudík
+bohužel
+bokem
+buÄ
+bude
+budem
+budeme
+budeš
+budete
+budiž
+budou
+budu
+bůhvíco
+bůhvíÄí
+bůhvíjak
+bůhvíjaký
+bůhvíkam
+bůhvíkde
+bůhvíkdo
+bůhvíkdy
+bůhvíkolik
+bůhvíkterý
+bůhvínaÄ
+bůhvíproÄ
+bych
+bychom
+byl
+byla
+byli
+bylo
+byly
+bysme
+být
+cca
+cokoli
+cokoliv
+copak
+cosi
+což
+cože
+ÄastÄ›ji
+Äasto
+Äeho
+Äehokoli
+Äehokoliv
+Äehosi
+Äehož
+Äem
+Äemkoli
+Äemkoliv
+Äemsi
+Äemu
+Äemukoli
+Äemukoliv
+Äemusi
+Äemuž
+Äemž
+Äertvíco
+ÄertvíÄí
+Äertvíjak
+Äertvíjaký
+Äertvíkam
+Äertvíkde
+Äertvíkdo
+Äertvíkdy
+Äertvíkolik
+Äertvíkterý
+ÄertvínaÄ
+ÄertvíproÄ
+Äíhokoli
+Äíhosi
+Äíchkoli
+Äíchsi
+Äíkoli
+Äím
+Äímakoli
+Äímasi
+Äímikoli
+Äímisi
+Äímkoli
+Äímkoliv
+Äímpak
+Äímsi
+Äímukoli
+Äímusi
+Äímž
+Äísi
+dál
+dále
+daleko
+další
+dám
+dle
+dnem
+dnes
+dneska
+dobrá
+dobré
+dobrý
+dobře
+docela
+dokonce
+doposavad
+doposud
+doprostřed
+dosavad
+dospod
+dospodu
+dost
+dosti
+dosud
+dovnitÅ™
+eště
+formou
+ho
+hodinou
+hodnÄ›
+horší
+hůř
+hůře
+chceš
+chci
+chtěl
+jacíkoli
+jacíkoliv
+jacípak
+jacísi
+jak
+jakákoli
+jakákoliv
+jakápak
+jakási
+jaké
+jakéhokoli
+jakéhokoliv
+jakéhopak
+jakéhosi
+jakékoli
+jakékoliv
+jakémkoli
+jakémkoliv
+jakémpak
+jakémsi
+jakémukoli
+jakémukoliv
+jakémupak
+jakémusi
+jaképak
+jakési
+jakmile
+jako
+jakou
+jakoukoli
+jakoukoliv
+jakoupak
+jakousi
+jakož
+jakpak
+jaký
+jakýchkoli
+jakýchkoliv
+jakýchpak
+jakýchsi
+jakýkoli
+jakýkoliv
+jakýmakoli
+jakýmakoliv
+jakýmapak
+jakýmasi
+jakýmikoli
+jakýmikoliv
+jakýmipak
+jakýmisi
+jakýmkoli
+jakýmkoliv
+jakýmpak
+jakýmsi
+jakýpak
+jakýsi
+jakže
+jasné
+jasnÄ›
+jde
+je
+jediná
+jediné
+jediný
+jeho
+jehož
+jej
+její
+jejíhož
+jejich
+jejichž
+jejíchž
+jejímaž
+jejímiž
+jejímuž
+jejímž
+jejíž
+jejž
+jelikož
+jemu
+jemuž
+jen
+jenom
+jenž
+jenže
+jestli
+ještě
+jež
+ježto
+ji
+jí
+jich
+jichž
+jim
+jím
+jimi
+jimiž
+jimž
+jímž
+jiná
+jinak
+jiné
+jinou
+jiný
+jiných
+jiným
+jisté
+jistÄ›
+již
+jíž
+jménem
+jsem
+jseš
+jsi
+jsme
+jsou
+jste
+kam
+každý
+kde
+kdeco
+kdeÄí
+kdejaký
+kdekdo
+kdekterý
+kdepak
+kdesi
+kdo
+kdokoli
+kdokoliv
+kdopak
+kdosi
+kdovíjak
+kdovíkde
+kdovíkdo
+kdož
+kdy
+kdysi
+když
+kohokoli
+kohokoliv
+kohopak
+kohosi
+kohož
+kol
+kolem
+kolik
+kolikže
+kolkolem
+komkoli
+komkoliv
+kompak
+komsi
+komu
+komukoli
+komukoliv
+komupak
+komusi
+komuž
+komž
+koncem
+konÄe
+konÄí
+konÄíc
+konec
+kontra
+kromÄ›
+která
+kterákoli
+kterákoliv
+kterási
+kterážto
+které
+kteréhokoli
+kteréhokoliv
+kteréhosi
+kteréhož
+kterékoli
+kterékoliv
+kterém
+kterémkoli
+kterémkoliv
+kterémsi
+kterémukoli
+kterémukoliv
+kterémusi
+kterémuž
+kterémžto
+kterési
+kteréžto
+kterou
+kteroukoli
+kteroukoliv
+kterousi
+kteroužto
+který
+kterýchkoli
+kterýchkoliv
+kterýchsi
+kterýchžto
+kterýkoli
+kterýkoliv
+kterým
+kterýmakoli
+kterýmakoliv
+kterýmasi
+kterýmikoli
+kterýmikoliv
+kterýmisi
+kterýmiž
+kterýmkoli
+kterýmkoliv
+kterýmsi
+kterýmžto
+kterýsi
+kterýžto
+kteří
+kteřísi
+kteřížto
+ktříkoli
+ktříkoliv
+kupodivu
+kupříkladu
+kvůli
+kýmkoli
+kýmkoliv
+kýmpak
+kýmsi
+kýmž
+lecco
+leccos
+lecÄems
+lecjak
+lecjaký
+leckam
+leckams
+leckde
+leckdo
+leckdy
+leckterý
+ledaco
+ledacos
+ledaÄí
+ledajak
+ledajaký
+ledakdo
+ledakterý
+ledaskam
+ledaskde
+ledaskdo
+ledaskdy
+lépe
+lepší
+líp
+má
+mají
+málo
+máloco
+málokdo
+málokterý
+mám
+máme
+máš
+máte
+max
+mé
+mÄ›
+mého
+měl
+měla
+mělo
+mém
+mému
+mezi
+mi
+mí
+mimo
+min
+míň
+místo
+mít
+mne
+mnÄ›
+mnoho
+mnou
+moc
+mohl
+mohla
+mohou
+mohu
+moje
+moji
+mojí
+mou
+možná
+mu
+můj
+musel
+muset
+musí
+musím
+musíš
+musíte
+může
+můžeš
+můžete
+můžu
+my
+mých
+mým
+mými
+naÄ
+naÄež
+naÄpak
+nad
+nade
+nám
+námi
+namísto
+naň
+naprosto
+naproti
+napÅ™
+napříÄ
+nás
+náš
+naši
+navíc
+navrch
+navrchu
+navzdory
+nÄ›
+nebo
+nebude
+nebyl
+nebyli
+nebyly
+něco
+nÄ›Äí
+nedaleko
+nehledíc
+něho
+něhož
+nechceš
+nechci
+nechť
+nechtěl
+něj
+nějak
+nějaká
+nějaké
+nějakého
+nějakou
+nějaký
+nejasné
+nejasný
+nejÄastÄ›ji
+nejde
+nejen
+nejhůř
+nejhůře
+nejlépe
+nejnižší
+nejsem
+nejsou
+nejvyšší
+nějž
+někam
+někde
+někdo
+někdy
+několik
+nekonÄí
+některý
+nelze
+něm
+nemá
+nemají
+nemálo
+nemám
+nemáme
+nemáš
+nemáte
+nemít
+nemohl
+nemohla
+nemohou
+nemohu
+němu
+nemusel
+nemuset
+nemusí
+nemusím
+nemusíš
+němuž
+nemůže
+nemůžeš
+nemůžete
+nemůžu
+němž
+není
+nepřesná
+nepřesné
+nepřesně
+nepřesný
+nepřímo
+netřeba
+netuším
+netýká
+neví
+nevím
+nevíš
+nevlastní
+nevyjímaje
+nevyjímajíc
+než
+něž
+ni
+ní
+nic
+niÄeho
+niÄem
+niÄemu
+niÄí
+niÄím
+nie
+nieje
+nich
+nichž
+nijaký
+nikdo
+nikto
+nim
+ním
+nimi
+nimiž
+nimž
+nímž
+nízká
+niž
+níž
+nižádný
+níže
+nižší
+nový
+nutnÄ›
+oba
+obÄ›
+oběma
+obou
+oÄ
+oÄpak
+ode
+odspoda
+odspodu
+ohlednÄ›
+okamžikem
+okolo
+on
+oň
+ona
+onen
+oni
+ono
+ony
+opravdu
+oproti
+ostatní
+osum
+pak
+poblíž
+poÄátkem
+poÄínaje
+poÄínajíc
+pod
+pode
+podél
+podle
+podobnÄ›
+pokud
+poměrně
+pomocí
+ponad
+pořád
+poslední
+posléze
+posud
+potom
+pražádný
+pro
+proÄ
+proÄpak
+proň
+prostÄ›
+proti
+proto
+protože
+před
+přede
+předem
+přes
+přese
+přesná
+přesné
+přesně
+přesný
+při
+pÅ™iÄemž
+přímo
+případná
+případné
+případně
+případný
+přitom
+půlí
+raději
+rokem
+sám
+sama
+samá
+samé
+samého
+samém
+samému
+sami
+samo
+samou
+samozřejmě
+samozřejmý
+samu
+samy
+samý
+samých
+samým
+samými
+se
+sebe
+sebou
+sem
+ses
+si
+sice
+sis
+skoro
+skrz
+skrze
+snad
+sobÄ›
+som
+sotva
+sotvaco
+sotvakdo
+spíš
+spíše
+spodem
+spolu
+staÄí
+stejnÄ›
+stranou
+středem
+svá
+své
+svého
+svém
+svému
+sví
+svoje
+svoji
+svojí
+svou
+svrchu
+svůj
+svých
+svým
+svými
+špatná
+špatné
+Å¡patnÄ›
+špatný
+tací
+tady
+tahle
+tak
+taká
+také
+takhle
+takováto
+takové
+takovéhoto
+takovémto
+takovémuto
+takovéto
+takovíto
+takovouto
+takový
+takovýchto
+takovýma
+takovýmato
+takovýmito
+takovýmto
+takovýto
+takto
+taky
+taký
+takže
+tam
+tamten
+tatáž
+tato
+táž
+tÄ›
+tebe
+tebou
+teÄ
+teda
+tedy
+téhle
+téhož
+těchhle
+těchto
+těchže
+těm
+téma
+těmahle
+těmhle
+těmihle
+těmito
+těmto
+těmu
+témuž
+témž
+témže
+ten
+tenhle
+tenhleten
+tento
+tentýž
+této
+téže
+ti
+tihle
+tím
+tímhle
+tímtéž
+tímto
+titíž
+tito
+tíž
+tobÄ›
+tohle
+toho
+tohohle
+tohoto
+tom
+tomhle
+tomtéž
+tomto
+tomu
+tomuhle
+tomuto
+totéž
+toto
+touhle
+toutéž
+touto
+touž
+touže
+trochu
+trošku
+třeba
+tuhle
+tutéž
+tuto
+tvá
+tvé
+tvého
+tvém
+tvému
+tví
+tvoje
+tvoji
+tvojí
+tvou
+tvůj
+tvých
+tvým
+tvými
+ty
+tyhle
+týchž
+týká
+týmiž
+týmž
+tys
+tytéž
+tyto
+týž
+úderem
+uplná
+uplné
+úplně
+úplný
+uprostřed
+urÄitÄ›
+uvnitÅ™
+úvodem
+vám
+vámi
+vás
+váš
+vaše
+vaši
+vÄetnÄ›
+vedle
+velmi
+veprostřed
+versus
+vespod
+vespodu
+veškerý
+vevnitÅ™
+víc
+více
+vím
+vinou
+víš
+viz
+vlastnÄ›
+vlivem
+vnÄ›
+vnitřka
+vnitřkem
+vnitřku
+von
+vrchem
+však
+vše
+všecek
+všecka
+všecko
+všecky
+všeho
+všech
+všechen
+všechna
+všechno
+všechnu
+všechny
+všelico
+všelicos
+vÅ¡eliÄehos
+vÅ¡eliÄems
+vÅ¡eliÄemus
+vÅ¡eliÄí
+vÅ¡eliÄíms
+všelijaký
+všelikdo
+všeliký
+všeliskdo
+všem
+všemi
+všemu
+vši
+vší
+všicci
+všichni
+vším
+vůbec
+vůÄi
+vy
+vyjma
+vysoká
+výše
+vyšší
+vzdor
+vzhledem
+vždy
+za
+zaÄ
+zaÄátkem
+zaÄpak
+zaň
+zásluhou
+zatím
+závěrem
+zboku
+zcela
+zÄásti
+zda
+zdaleka
+zde
+zespoda
+zespodu
+zevnitÅ™
+zeza
+znovu
+zpět
+zpod
+zponad
+zpoza
+zprostřed
+zřídkaco
+zřídkakdo
+zvnitřka
+zvnitřku
+žádný
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt
new file mode 100644
index 000000000..6ef6411d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt
@@ -0,0 +1,23 @@
+Dobrý den,
+
+Stránka @PAGE@ ve wiki @TITLE@ se změnila.
+Tady jsou detaily:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Datum: @DATE@
+Uživatel: @USER@
+Souhrn úpravy: @SUMMARY@
+Původní revize: @OLDPAGE@
+Nová revize: @NEWPAGE@
+
+
+Pro odhlášení z odběru změn pro tuto stránku se přihlašte do wiki
+@DOKUWIKIURL@ a vstupte na stránku
+@NEWPAGE@, kde stisknete tlaÄítko "Neodebírat zmÄ›ny mailem".
+
+--
+Tato zpráva byla vygenerována systémem DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt
new file mode 100644
index 000000000..d5eadc66c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Upravit profil vaÅ¡eho uÄtu ======
+
+Vyplňte pouze pole, která chcete změnit. Nemůžete ale změnit své uživatelské jméno.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt
new file mode 100644
index 000000000..98f860138
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt
@@ -0,0 +1,14 @@
+Do vaší DokuWiki byl nahrán nový dokument. Tady jsou detaily:
+
+Soubor : @MEDIA@
+Datum : @DATE@
+ProhlážeÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Hostitel : @HOSTNAME@
+Velikost : @SIZE@
+MIME typ : @MIME@
+Uživatel : @USER@
+
+--
+Tato zpráva byla vygenerována systémem DokuWiki
+@DOKUWIKIUR \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt
new file mode 100644
index 000000000..75fe58e0c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM nebyl povolen ======
+
+Vaše změny **nebyly uloženy**, protože obsahují jedno nebo více nepovolených slov. Wiki si nepotrpí na spam! Pokud se domníváte, že jde o omyl, kontaktujte správce.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt
new file mode 100644
index 000000000..3ac4a70df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Nedenfor kan du finde en række administrative værktøjer.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt
new file mode 100644
index 000000000..2a3d687f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt
@@ -0,0 +1 @@
+===== Yderligere udvidelser ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt
new file mode 100644
index 000000000..6dfa3cc43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt
@@ -0,0 +1,4 @@
+====== Henvisninger bagud ======
+
+Dette er en liste over alle de dokumenter der henviser tilbage til det nuværende dokument.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt
new file mode 100644
index 000000000..fc38cee63
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt
@@ -0,0 +1,5 @@
+====== Der eksisterer en nyere udgave af dokumentet ======
+
+Der eksisterer en nyere udgave af dette dokument. Det sker når flere brugere ændrer i dokumentet på samme tid.
+
+Gennemgå de viste forskelle grundigt, og beslut hvilken udgave der skal bevares. Hvis du vælger ''Gem'', bliver din udgave af dokumentet gemt. Vælger du ''Fortryd'' beholder du den nuværende udgave.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt
new file mode 100644
index 000000000..a4fa8b88f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt
@@ -0,0 +1,3 @@
+====== Adgang nægtet! ======
+
+Du har ikke rettigheder til at fortsætte. Måske er du ikke logget ind.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt
new file mode 100644
index 000000000..f77224f2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt
@@ -0,0 +1,4 @@
+====== Forskelle ======
+
+Dette viser forskellene mellem den valgte og den nuværende udgave af dokumentet. Gul er linjer der findes i den gamle udgave, og grøn er linjer der findes i den nuværende.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt
new file mode 100644
index 000000000..69c780140
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt
@@ -0,0 +1,6 @@
+====== Kladdefil fundet ======
+
+Din sidste redigeringssession på denne side blev ikke afsluttet korrekt. DokuWiki har automatisk gemt en kladde mens du arbejdede, som du kan benytte til at fortsætte redigeringen. Forneden kan du se de data der blev gemt fra din sidste session.
+
+Vælg venligst, om du vil //gendanne// din tabte redigering, //slette// den gemte kladde eller //afbryde// redigeringen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt
new file mode 100644
index 000000000..0a9ea39dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt
@@ -0,0 +1,2 @@
+Rediger dette dokument og tryk på knappen **''[Gem]''**. Se [[wiki:syntax|Formaterings tips]] for Wiki syntaks. Ret venligst kun dette dokument hvis du kan **forbedre** det. Brug venligst [[playground:playground|sandkassen]] til at teste før du retter i et rigtigt dokument. Husk også at bruge **''[Forhåndsvisning]''** før du gemmer dokumentet.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt
new file mode 100644
index 000000000..438363e5d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt
@@ -0,0 +1,2 @@
+**Du har hentet en gammel udgave af dette dokument!** Hvis du gemmer dokumentet vil du overskrive den nuværende med den gamle udgave.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt
new file mode 100644
index 000000000..74afb9831
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt
@@ -0,0 +1,3 @@
+====== Indeks ======
+
+Dette er en oversigt over alle tilgængelige dokumenter, sorteret efter [[doku>namespaces|navnerum]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html
new file mode 100644
index 000000000..5c53c5546
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html
@@ -0,0 +1,24 @@
+<p>Denne side hjælper til første-gangs installation og konfiguration af
+<a href="http://dokuwiki.org">Dokuwiki</a>. Mere information om denne
+installer er tilgængelig på dens egen
+<a href="http://dokuwiki.org/installer">dokumentations side</a>.</p>
+
+<p>DokuWiki bruger almindelige filer til at gemme wiki sider og anden
+information relaterende til disse sider (f.eks. billeder, søge indeks, gamle
+udgaver, osv). For at fungerer optimalt <strong>skal</strong> DokuWiki have
+skrive adgang til mapperne der holder disse filer. Denne installer er ikke
+istand til at opsætte mappe tilladelser. Det skal normalt udføres direkte i en
+kommando shell eller hvis du bruger hosting, gennem FTP eller dit hostings
+kontrol panel (f.eks. cPanel).</p>
+
+<p>Denne installer vil opsætte din DokuWiki konfiguration for
+<acronym title="access control list">ACL</acronym>, hvilket tillader
+administrator login og adgang til DokuWiki's adminstrative menu til
+installation af udvidelser, håndtering af brugere, håndtering af adgang til wiki
+sider og ændring af konfigurations indstillinger. Det er ikke et krav for at
+DokuWiki kan fungere, men det vil gøre DokuWiki lettere at administre.</p>
+
+<p>Erfarne brugere og brugere med specielle opsætningskrav burde bruge disse
+henvisninger for detaljer vedrørende
+<a href="http://dokuwiki.org/install">installations instruktioner</a>
+og <a href="http://dokuwiki.org/config">konfigurations indstillinger</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php
new file mode 100644
index 000000000..56239718b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php
@@ -0,0 +1,253 @@
+<?php
+/**
+ * danish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author koeppe <koeppe@kazur.dk>
+ * @author Jon Bendtsen <bendtsen@diku.dk>
+ * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk>
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esben Laursen <hyber@hyber.dk>
+ * @author Harith <haj@berlingske.dk>
+ * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Rediger dette dokument';
+$lang['btn_source'] = 'Vis kildekode';
+$lang['btn_show'] = 'Vis dokument';
+$lang['btn_create'] = 'Opret dette dokument';
+$lang['btn_search'] = 'Søg';
+$lang['btn_save'] = 'Gem';
+$lang['btn_preview'] = 'Forhåndsvisning';
+$lang['btn_top'] = 'Tilbage til toppen';
+$lang['btn_newer'] = '<< forrige side';
+$lang['btn_older'] = 'næste side >>';
+$lang['btn_revs'] = 'Gamle udgaver';
+$lang['btn_recent'] = 'Nye ændringer';
+$lang['btn_upload'] = 'Overføre';
+$lang['btn_cancel'] = 'Fortryd';
+$lang['btn_index'] = 'Indeks';
+$lang['btn_secedit'] = 'Rediger';
+$lang['btn_login'] = 'Log ind';
+$lang['btn_logout'] = 'Log ud';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Opdater';
+$lang['btn_delete'] = 'Slet';
+$lang['btn_back'] = 'Tilbage';
+$lang['btn_backlink'] = 'Henvisninger bagud';
+$lang['btn_backtomedia'] = 'Tilbage til valg af mediefil';
+$lang['btn_subscribe'] = 'Abonner på ændringer';
+$lang['btn_unsubscribe'] = 'Fjern abonnement på ændringer';
+$lang['btn_subscribens'] = 'Abonner på namespace ændringer';
+$lang['btn_unsubscribens'] = 'Fjern abonnement på namespace ændringer';
+$lang['btn_profile'] = 'Opdater profil';
+$lang['btn_reset'] = 'Nulstil';
+$lang['btn_resendpwd'] = 'Send nyt adgangskode';
+$lang['btn_draft'] = 'Rediger kladde';
+$lang['btn_recover'] = 'Gendan kladde';
+$lang['btn_draftdel'] = 'Slet kladde';
+$lang['btn_revert'] = 'Reetablere';
+$lang['loggedinas'] = 'Logget på som';
+$lang['user'] = 'Brugernavn';
+$lang['pass'] = 'Adgangskode';
+$lang['newpass'] = 'Nyt adgangskode';
+$lang['oldpass'] = 'Bekræft gammelt adgangskode';
+$lang['passchk'] = 'Gentag nyt adgangskode';
+$lang['remember'] = 'Log automatisk på';
+$lang['fullname'] = 'Navn';
+$lang['email'] = 'E-mail';
+$lang['register'] = 'Tilmeld';
+$lang['profile'] = 'Brugerprofil';
+$lang['badlogin'] = 'Brugernavn eller adgangskode var forkert.';
+$lang['minoredit'] = 'Mindre ændringer';
+$lang['draftdate'] = 'Kladde automatisk gemt d.';
+$lang['nosecedit'] = 'Siden blev ændret i mellemtiden, sektions information var for gammel, hentede hele siden i stedet.';
+$lang['regmissing'] = 'Du skal udfylde alle felter.';
+$lang['reguexists'] = 'Dette brugernavn er allerede i brug.';
+$lang['regsuccess'] = 'Du er nu oprettet som bruger. Dit adgangskode bliver sendt til dig i en e-mail.';
+$lang['regsuccess2'] = 'Du er nu oprettet som bruger.';
+$lang['regmailfail'] = 'Dit adgangskode blev ikke sendt. Kontakt venligst administratoren.';
+$lang['regbadmail'] = 'E-mail-adressen er ugyldig. Kontakt venligst administratoren, hvis du mener dette er en fejl.';
+$lang['regbadpass'] = 'De to adgangskoder er ikke ens, vær venlig at prøve igen.';
+$lang['regpwmail'] = 'Dit DokuWiki password';
+$lang['reghere'] = 'Opret en DokuWiki-konto her';
+$lang['profna'] = 'Denne wiki understøtter ikke ændring af profiler';
+$lang['profnochange'] = 'Ingen ændringer, intet modificeret.';
+$lang['profnoempty'] = 'Tomt navn eller e-mail adresse er ikke tilladt.';
+$lang['profchanged'] = 'Brugerprofil opdateret korrekt.';
+$lang['pwdforget'] = 'Har du glemt dit adgangskode? FÃ¥ et nyt';
+$lang['resendna'] = 'Denne wiki understøtter ikke udsendelse af nyt adgangskode.';
+$lang['resendpwd'] = 'Send nyt adgangskode for';
+$lang['resendpwdmissing'] = 'Du skal udfylde alle felter.';
+$lang['resendpwdnouser'] = 'Vi kan ikke finde denne bruger i vores database.';
+$lang['resendpwdbadauth'] = 'Beklager, denne autoriseringskode er ikke gyldig. Kontroller venligst at du benyttede det fulde link til bekræftelse.';
+$lang['resendpwdconfirm'] = 'Et henvisning med bekræftelse er blevet sendt med email.';
+$lang['resendpwdsuccess'] = 'Dit nye adgangskode er blevet sendt med e-mail.';
+$lang['license'] = 'Med mindre andet angivet, vil indhold på denne wiki blive frigjort under følgende licens:';
+$lang['licenseok'] = 'Note: ved at ændre denne side, acceptere du at dit indhold bliver frigivet under følgende licens:';
+$lang['searchmedia'] = 'Søg filnavn';
+$lang['searchmedia_in'] = 'Søg i %s';
+$lang['txt_upload'] = 'Vælg den fil der skal overføres';
+$lang['txt_filename'] = 'Indtast wikinavn (valgfrit)';
+$lang['txt_overwrt'] = 'Overskriv eksisterende fil';
+$lang['lockedby'] = 'Midlertidig låst af';
+$lang['lockexpire'] = 'Lås udløber kl.';
+$lang['willexpire'] = 'Din lås på dette dokument udløber om et minut.\nTryk på Forhåndsvisning-knappen for at undgå konflikter.';
+$lang['notsavedyet'] = 'Der er lavet ændringer i dokumentet. Hvis du fortsætter vil ændringerne gå tabt.\nØnsker du at fortsætte?';
+$lang['rssfailed'] = 'Der opstod en fejl ved indhentning af: ';
+$lang['nothingfound'] = 'Søgningen gav intet resultat.';
+$lang['mediaselect'] = 'Vælg mediefil';
+$lang['fileupload'] = 'Overføre mediefil';
+$lang['uploadsucc'] = 'Overførelse var en succes';
+$lang['uploadfail'] = 'Overførelse fejlede. Der er muligvis problemer med rettighederne.';
+$lang['uploadwrong'] = 'Overførelse afvist. Filtypen er ikke tilladt.';
+$lang['uploadexist'] = 'Filen eksisterer allerede.';
+$lang['uploadbadcontent'] = 'Overføret indhold tilsvaret ikke til %s fil-endelsen.';
+$lang['uploadspam'] = 'Overførelsen blev blokeret af spam sortlisten.';
+$lang['uploadxss'] = 'Overførelsen blev blokeret på grund af mulig skadeligt indhold.';
+$lang['uploadsize'] = 'Den overføret fil var for stor (max. %s)';
+$lang['deletesucc'] = 'Filen "%s" er blevet slettet.';
+$lang['deletefail'] = '"%s" kunne ikke slettes - check rettighederne.';
+$lang['mediainuse'] = 'Filen "%s" er ikke slettet - den er stadig i brug.';
+$lang['namespaces'] = 'Navnerum';
+$lang['mediafiles'] = 'Tilgængelige filer i';
+$lang['js']['searchmedia'] = 'Søg for filer';
+$lang['js']['keepopen'] = 'Hold vindue åbent ved valg';
+$lang['js']['hidedetails'] = 'Skjul detaljer';
+$lang['js']['nosmblinks'] = 'Henvisninger til Windows shares virker kun i Microsoft Internet Explorer.
+Du kan stadig kopiere og indsætte linket.';
+$lang['js']['linkwiz'] = 'guiden til henvisninger';
+$lang['js']['linkto'] = 'Henvise til:';
+$lang['js']['del_confirm'] = 'Slet valgte post(er)?';
+$lang['js']['mu_btn'] = 'Overføre flere filer på en gang';
+$lang['mediausage'] = 'Brug den følgende syntaks til at henvise til denne fil:';
+$lang['mediaview'] = 'Vis oprindelig fil';
+$lang['mediaroot'] = 'rod';
+$lang['mediaupload'] = 'Overføre en fil til det nuværende navnerum her. For at oprette under-navnerum, tilføj dem til "Overføre som" filnavnet, adskilt af kolontegn.';
+$lang['mediaextchange'] = 'Filudvidelse ændret fra .%s til .%s!';
+$lang['reference'] = 'Henvisning til';
+$lang['ref_inuse'] = 'Filen kan ikke slettes, da den stadig er i brug på følgende sider:';
+$lang['ref_hidden'] = 'Nogle henvisninger er i dokumenter du ikke har læserettigheder til';
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Tilsvarende dokumentnavne';
+$lang['toc'] = 'Indholdsfortegnelse';
+$lang['current'] = 'nuværende';
+$lang['yours'] = 'Din version';
+$lang['diff'] = 'Vis forskelle i forhold til den nuværende udgave';
+$lang['diff2'] = 'Vis forskelle i forhold til de valgte revisioner';
+$lang['line'] = 'Linje';
+$lang['breadcrumb'] = 'Sti';
+$lang['youarehere'] = 'Du er her';
+$lang['lastmod'] = 'Sidst ændret';
+$lang['by'] = 'af';
+$lang['deleted'] = 'slettet';
+$lang['created'] = 'oprettet';
+$lang['restored'] = 'gammel udgave reetableret';
+$lang['external_edit'] = 'ekstern redigering';
+$lang['summary'] = 'Redigerings resumé';
+$lang['noflash'] = 'Den <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> er nødvendig til at vise denne indehold.';
+$lang['download'] = 'Hente kodestykke';
+$lang['mail_newpage'] = 'dokument tilføjet:';
+$lang['mail_changed'] = 'dokument ændret:';
+$lang['mail_new_user'] = 'Ny bruger';
+$lang['mail_upload'] = 'fil overføret:';
+$lang['qb_bold'] = 'Fed';
+$lang['qb_italic'] = 'Kursiv';
+$lang['qb_underl'] = 'Understregning';
+$lang['qb_code'] = 'Skrivemaskine tekst';
+$lang['qb_strike'] = 'Gennemstregning';
+$lang['qb_h1'] = 'Niveau 1 overskrift';
+$lang['qb_h2'] = 'Niveau 2 overskrift';
+$lang['qb_h3'] = 'Niveau 3 overskrift';
+$lang['qb_h4'] = 'Niveau 4 overskrift';
+$lang['qb_h5'] = 'Niveau 5 overskrift';
+$lang['qb_h'] = 'Overskrift';
+$lang['qb_hs'] = 'Vælg overskriften';
+$lang['qb_hplus'] = 'Højere overskriftsniveau';
+$lang['qb_hminus'] = 'Lavere overskriftsniveau';
+$lang['qb_hequal'] = 'Samme overskriftsniveau';
+$lang['qb_link'] = 'Intern henvisning';
+$lang['qb_extlink'] = 'Ekstern henvisning';
+$lang['qb_hr'] = 'Vandret linje';
+$lang['qb_ol'] = 'Nummereret liste';
+$lang['qb_ul'] = 'Unummereret liste';
+$lang['qb_media'] = 'Tilføj billeder og andre filer';
+$lang['qb_sig'] = 'Indsæt signatur';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Specialtegn';
+$lang['upperns'] = 'GÃ¥ til overordnet navnerum';
+$lang['admin_register'] = 'Tilføj ny bruger';
+$lang['metaedit'] = 'Rediger metadata';
+$lang['metasaveerr'] = 'Skrivning af metadata fejlede';
+$lang['metasaveok'] = 'Metadata gemt';
+$lang['img_backto'] = 'Tilbage til';
+$lang['img_title'] = 'Titel';
+$lang['img_caption'] = 'Billedtekst';
+$lang['img_date'] = 'Dato';
+$lang['img_fname'] = 'Filnavn';
+$lang['img_fsize'] = 'Størrelse';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Ophavsret';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Emneord';
+$lang['subscribe_success'] = 'Tilføjet %s til abonnentliste for %s';
+$lang['subscribe_error'] = 'Fejl ved tilføjelse af %s til abonnentliste for %s';
+$lang['subscribe_noaddress'] = 'Ingen adresse knyttet til dit login, du kan ikke tilføjes til abonnentlisten';
+$lang['unsubscribe_success'] = 'Fjernet %s fra abonnentliste for %s';
+$lang['unsubscribe_error'] = 'Fejl ved fjernelse af %s fra abonnentliste for %s';
+$lang['authmodfailed'] = 'Fejl i brugervalideringens konfiguration. Kontakt venligst wikiens administrator.';
+$lang['authtempfail'] = 'Brugervalidering er midlertidigt ude af drift. Hvis dette er vedvarende, kontakt venligst wikiens administrator.';
+$lang['i_chooselang'] = 'Vælg dit sprog';
+$lang['i_installer'] = 'DokuWiki Installer';
+$lang['i_wikiname'] = 'Wiki Navn';
+$lang['i_enableacl'] = 'Brug ACL (foreslået)';
+$lang['i_superuser'] = 'Superbruger';
+$lang['i_problems'] = 'Installeren fandt nogle problemer, vist nedenunder. Du kan ikke fortsætte før du har rettet dem.';
+$lang['i_modified'] = 'Af sikkerheds hensyn vil dette script kun virke på en ny og umodificeret Dokuwiki installation.
+Du burde enten gen-udpakke filerne fra den hentede pakke eller tjekke den fuldstændige
+<a href="http://dokuwiki.org/install">DokuWiki installations instruktioner</a>';
+$lang['i_funcna'] = 'PHP funtionen <code>%s</code> er ikke tilgængelig. Måske har din udbyder slået det fra af en eller anden grund?';
+$lang['i_phpver'] = 'Din PHP version <code>%s</code> er mindre en den nødvendige <code>%s</code>. Du er nød til at opgradere din PHP installation.';
+$lang['i_permfail'] = 'DokuWiki kan ikke skrive til <code>%s</code>. Du er nød til at rette tilladelses indstillingerne for denne mappe!';
+$lang['i_confexists'] = '<code>%s</code> eksisterer allerede';
+$lang['i_writeerr'] = 'Kunne ikke oprette <code>%s</code>. Du bliver nød til at tjekke mappe/fil- tilladelserne og oprette filen manuelt.';
+$lang['i_badhash'] = 'uigenkendelig eller modificeret dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - ulovlig eller tom værdi';
+$lang['i_success'] = 'Konfigurationen fulførtedes med success. Du kan nu slette install.php filen. Fortsætte til <a href="doku.php">din nye DokuWiki</a>.';
+$lang['i_failure'] = 'Nogle fejl forekom mens konfigurations filerne skulle skrives. Du er mulighvis nød til at fixe dem manuelt før du kan bruge <a href="doku.php">din nye DokuWiki</a>.';
+$lang['i_policy'] = 'Begyndende ACL politik';
+$lang['i_pol0'] = 'Åben Wiki (alle kan læse, skrive og uploade)';
+$lang['i_pol1'] = 'Offentlig Wiki (alle kan læse, kun registrerede brugere kan skrive og overføre)';
+$lang['i_pol2'] = 'Lukket Wiki (kun for registerede brugere kan læse, skrive og overføre)';
+$lang['i_retry'] = 'Forsøg igen';
+$lang['mu_intro'] = 'Her kan du overføre flere filer af gangen. Klik på gennemse for at tilføje dem til køen. Tryk på overføre knappen når du er klar.';
+$lang['mu_gridname'] = 'Filnavn';
+$lang['mu_gridsize'] = 'Størrelse';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Navnerum';
+$lang['mu_browse'] = 'gennemse';
+$lang['mu_toobig'] = 'for stor';
+$lang['mu_ready'] = 'klar til overføre';
+$lang['mu_done'] = 'færdig';
+$lang['mu_fail'] = 'fejlede';
+$lang['mu_authfail'] = 'session udløb';
+$lang['mu_progress'] = '@PCT@% upload';
+$lang['mu_filetypes'] = 'Tilladte filtyper';
+$lang['mu_info'] = 'filer var overføret.';
+$lang['mu_lasterr'] = 'Sidste fejl:';
+$lang['recent_global'] = 'Du ser lige nu ændringerne i <b>%s</b> navnerummet. Du kan også <a href="%s">se de sidste ændringer for hele wiki siden </a>';
+$lang['years'] = '%d år siden';
+$lang['months'] = '%d måned siden';
+$lang['weeks'] = '%d uge siden';
+$lang['days'] = '%d dage siden';
+$lang['hours'] = '%d timer siden';
+$lang['minutes'] = '%d minutter siden';
+$lang['seconds'] = '%d sekunder siden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt
new file mode 100644
index 000000000..74b677d51
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt
@@ -0,0 +1,3 @@
+====== LÃ¥st Dokument ======
+
+Dette dokument er midlertidigt låst af en anden bruger. Vent venligst til brugeren er færdig med at redigere dokumentet, eller låsen udløber.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt
new file mode 100644
index 000000000..039bb0a7a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt
@@ -0,0 +1,3 @@
+====== Login ======
+
+Du er ikke logget ind! Indtast brugernavn og adgangskode. Din browser skal have tilladt cookies for at du kan logge ind.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt
new file mode 100644
index 000000000..948a265fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt
@@ -0,0 +1,17 @@
+Et dokument i din DokuWiki blev ændret eller tilføjet. Her er detajlerne:
+
+Dato : @DATE@
+Browser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Hostnavn : @HOSTNAME@
+Gammel udgave : @OLDPAGE@
+Ny udgave : @NEWPAGE@
+Redigerings resumé : @SUMMARY@
+Bruger : @USER@
+
+@DIFF@
+
+
+--
+Denne e-mail blev genereret af DokuWiki på:
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt
new file mode 100644
index 000000000..1d602c02c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt
@@ -0,0 +1,3 @@
+====== Dette dokument eksisterer ikke (endnu) ======
+
+Du har fulgt en henvisning til et dokument der ikke eksisterer (endnu). Du kan oprette dokumentet ved at trykke på knappen **''[Opret dette dokument]''**.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt
new file mode 100644
index 000000000..aa6896237
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt
@@ -0,0 +1,4 @@
+====== Den valgte udgave findes ikke ======
+
+Den valgte udgave af dokumentet findes ikke! Tryk på knappen **''[Gamle udgaver]''** for at se en liste af gamle udgaver af dette dokument.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt
new file mode 100644
index 000000000..23e65e89d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt
@@ -0,0 +1,4 @@
+====== Forhåndsvisning ======
+
+Dette er en forhåndsvisning af hvordan dokumentet vil se ud. Husk: Det er //**IKKE**// gemt endnu! Hvis det ser godt ud, så tryk på knappen **''[Gem]''**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt
new file mode 100644
index 000000000..3df556e68
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt
@@ -0,0 +1,14 @@
+Hej @FULLNAME@!
+
+Nogen har bedt om et nyt password til dit @TITLE@
+login på @DOKUWIKIURL@
+
+Hvis du ikke bad om dette, så ignorer venligst denne email.
+
+For at bekræfte at det var dig der bad om dette, benyt venligst det følgende henvisning.
+
+@CONFIRM@
+
+--
+Denne e-mail blev genereret af DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt
new file mode 100644
index 000000000..49f65831b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt
@@ -0,0 +1,2 @@
+Dette dokument kan kun læses. Du kan se kildekoden, men ikke gemme ændringer i det. Hvis du mener at dette er en fejl, så skriv det venligst på [[wiki:fejl-oversigt]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt
new file mode 100644
index 000000000..c44fa368e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt
@@ -0,0 +1,5 @@
+====== Nye ændringer ======
+
+Følgende dokumenter er blevet ændret for nylig.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt
new file mode 100644
index 000000000..4ff2ed1eb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt
@@ -0,0 +1,4 @@
+====== Opret en wiki-konto ======
+
+Udfyld nedenstånde skema for at oprette en konto i denne wiki. Sørg for at bruge en **gyldig e-mail-adresse** - dit adgangskode bliver sendt til dig. Dit brugernavn skal være et gyldigt [[doku>pagename|dokumentnavn]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt
new file mode 100644
index 000000000..d431f7591
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt
@@ -0,0 +1,14 @@
+En ny bruger har registreret. Her er detaljerne:
+
+Brugernavn : @NEWUSER@
+Navn : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Dato : @DATE@
+Browser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Værtsnavn : @HOSTNAME@
+
+--
+Denne mail blev genereret af DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt
new file mode 100644
index 000000000..e96861ed2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Send nyt password ======
+
+Udfyld alle nedenstående felter for at få tilsendt et nyt password til denne wiki. Dit nye password vil blive sendt til den opgivne e-mail-adresse. Brugernavnet bør være dit wiki brugernavn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt
new file mode 100644
index 000000000..08f6f2073
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt
@@ -0,0 +1,3 @@
+====== Gamle udgaver ======
+
+Her er de gamle udgaver af dette dokument. Du kan vende tilbage til en tidligere udgave af dokumentet ved at vælge det nedenfor, trykke på knappen **''[Rediger dette dokument]''**, og til sidst gemme dokumentet.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt
new file mode 100644
index 000000000..eca1b589c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt
@@ -0,0 +1,5 @@
+====== Søgning ======
+
+Du kan se resultaterne af din søgning nedenunder. Hvis resultaterne ikke indeholder det du søgte efter kan du oprette et nyt dokument med samme navn som søgningen ved at trykke på knappen **''[Opret dette dokument]''**.
+
+===== Søgeresultater =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt
new file mode 100644
index 000000000..3d4890397
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt
@@ -0,0 +1,2 @@
+**Dette er en gammel udgave af dokumentet!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt
new file mode 100644
index 000000000..0fb926720
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt
@@ -0,0 +1,87 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+alle
+andet
+andre
+begge
+den
+denne
+der
+deres
+det
+dette
+dig
+din
+dog
+eller
+end
+ene
+eneste
+enhver
+fem
+fire
+flere
+fleste
+for
+fordi
+forrige
+fra
+før
+god
+han
+hans
+har
+hendes
+her
+hun
+hvad
+hvem
+hver
+hvilken
+hvis
+hvor
+hvordan
+hvorfor
+hvornår
+ikke
+ind
+ingen
+intet
+jeg
+jeres
+kan
+kom
+kommer
+lav
+lidt
+lille
+man
+mand
+mange
+med
+meget
+men
+mens
+mere
+mig
+ned
+nogen
+noget
+nyt
+nær
+næste
+næsten
+otte
+over
+seks
+ses
+som
+stor
+store
+syv
+til
+tre
+var
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt
new file mode 100644
index 000000000..e89dd3c46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt
@@ -0,0 +1,17 @@
+Hej!
+
+Siden @PAGE@ i @TITLE@ wikien er blevet ændret.
+Her er detaljerne:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+For at afmelde abonnement på denne side log ind på wikien på
+@DOKUWIKIURL@ , besøg
+@NEWPAGE@
+og vælg 'Fjern abonnement på ændringer'.
+
+--
+Denne e-mail blev genereret af DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt
new file mode 100644
index 000000000..2c6ce3f16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Opdater din kontos profil ======
+
+Du behøver kun at udfylde de felter du ønsker at ændre. Du kan ikke ændre dit brugernavn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt
new file mode 100644
index 000000000..316463fee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt
@@ -0,0 +1,14 @@
+En fil blev overføret til din DokuWiki. Her er detaljerne:
+
+Fil : @MEDIA@
+Dato : @DATE@
+Browser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Værtsnavn : @HOSTNAME@
+Størrelse : @SIZE@
+MIME Type : @MIME@
+Bruger : @USER@
+
+--
+Denne e-mail blev genereret af DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt
new file mode 100644
index 000000000..5a1c0d754
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM blokeret ======
+
+Dine ændringer blev **ikke** gemt da de indeholder et eller flere uønskede ord. Kontakt venligst admin, hvis du mener dette er en fejl.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt
new file mode 100644
index 000000000..c52f343ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Folgende administrative Aufgaben stehen in DokuWiki zur Verfügung.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt
new file mode 100644
index 000000000..a0ae21faf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt
@@ -0,0 +1 @@
+===== Zusätzliche Plugins ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt
new file mode 100644
index 000000000..aae4c5582
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt
@@ -0,0 +1,5 @@
+====== Backlinks ======
+
+Dies ist eine Liste der Seiten, die zurück zur momentanen Seite linken.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt
new file mode 100644
index 000000000..a5ae425be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt
@@ -0,0 +1,6 @@
+====== Eine neuere Version existiert ======
+
+Eine neuere Version des aktuell in Bearbeitung befindlichen Dokuments existiert. Das heißt, jemand hat parallel an der selben Seite gearbeitet und zuerst gespeichert.
+
+Die unten aufgeführten Unterschiede können bei der Entscheidung helfen, welchem Dokument Vorrang gewährt wird. Wähle **''[Speichern]''** zum Sichern deiner Version oder **''[Abbrechen]''**, um deine Version zu verwerfen und die zuerst gespeicherte Seite zu behalten.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt
new file mode 100644
index 000000000..ff3bdf9a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt
@@ -0,0 +1,4 @@
+====== Zugang verweigert ======
+
+Du hast nicht die erforderlichen Rechte, um diese Aktion durchzuführen. Eventuell bist du nicht beim Wiki angemeldet?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt
new file mode 100644
index 000000000..82fbbc252
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt
@@ -0,0 +1,5 @@
+====== Unterschiede ======
+
+Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt
new file mode 100644
index 000000000..704c6d1da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt
@@ -0,0 +1,6 @@
+====== Entwurf gefunden ======
+
+Deine letzte Bearbeitungssitzung wurde nicht ordnungsgemäß abgeschlossen. DokuWiki hat während deiner Arbeit automatisch einen Zwischenentwurf gespeichert, den du jetzt nutzen kannst, um deine Arbeit fortzusetzen. Unten siehst du die Daten, die bei deiner letzten Sitzung gespeichert wurden.
+
+Bitte entscheide dich, ob du den Entwurf //wieder herstellen// oder //löschen// willst oder ob du die Bearbeitung abbrechen möchtest.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt
new file mode 100644
index 000000000..15e02c61a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt
@@ -0,0 +1,4 @@
+Bitte nur editieren, falls das Dokument **verbessert** werden kann.
+
+Nach dem Bearbeiten den **''[Speichern]''**-Knopf drücken. Siehe [[wiki:syntax]] zur Wiki-Syntax. Zum Testen bitte erst im [[playground:playground|Spielplatz]] üben.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt
new file mode 100644
index 000000000..6c1f642cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt
@@ -0,0 +1,2 @@
+**Eine ältere Version des Dokuments wurde geladen!** Beim Speichern wird eine neue Version des Dokuments mit diesem Inhalt erstellt.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt
new file mode 100644
index 000000000..fa8dc4663
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt
@@ -0,0 +1,4 @@
+====== Ãœbersicht ======
+
+Dies ist eine Übersicht über alle vorhandenen Seiten und [[doku>namespaces|Namensräume]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html
new file mode 100644
index 000000000..b8baa5f97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html
@@ -0,0 +1,27 @@
+<p>Diese Seite hilft dir bei der Erst-Installation und Konfiguration von
+<a href="http://dokuwiki.org">Dokuwiki</a>. Zusätzliche Informationen zu
+diesem Installationsskript findest du auf der entsprechenden
+<a href="http://dokuwiki.org/installer">Hilfe-Seite</a> (en).</p>
+
+<p>DokuWiki verwendet normale Dateien für das Speichern von Wikiseiten und
+anderen Informationen (Bilder, Suchindizes, alte Versionen, usw.).
+Um DokuWiki betreiben zu können, <strong>muss</strong> Schreibzugriff auf die
+Verzeichnisse bestehen, in denen DokuWiki diese Dateien ablegt. Dieses
+Installationsprogramm kann diese Rechte nicht für dich setzen. Du musst dies
+manuell auf einer Kommando-Shell oder, falls du DokuWiki bei einem Fremdanbieter
+hostest, über FTP oder ein entsprechendes Werkzeug (z.B. cPanel) durchführen.</p>
+
+<p>Dieses Skript hilft dir beim ersten Einrichten des Zugangsschutzes
+(<acronym title="access control list">ACL</acronym>) von DokuWiki, welcher eine
+Administratoranmeldung und damit Zugang zum Administrationsmenu ermöglicht.
+Dort kannst du dann weitere Tätigkeiten wie das Installieren von Plugins, das
+Verwalten von Nutzern und das Ändern von Konfigurationseinstellungen durchführen.
+Das Nutzen der Zugangskontrolle ist nicht zwingend erforderlich, es erleichtert aber
+die Administration von DokuWiki.</p>
+
+<p>Erfahrene Anwender oder Nutzer mit speziellen Konfigurationsbedürfnissen sollten
+die folgenden Links nutzen, um sich über
+<a href="http://dokuwiki.org/install">Installation</a>
+und <a href="http://dokuwiki.org/config">Konfiguration</a> zu
+informieren.</p>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php
new file mode 100644
index 000000000..1747e3288
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php
@@ -0,0 +1,249 @@
+<?php
+/**
+ * german language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Christof <gagi@fin.de>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Alexander Fischer <tbanus@os-forge.net>
+ * @author Juergen Schwarzer <jschwarzer@freenet.de>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Diese Seite bearbeiten';
+$lang['btn_source'] = 'Zeige Quelltext';
+$lang['btn_show'] = 'Seite anzeigen';
+$lang['btn_create'] = 'Seite anlegen';
+$lang['btn_search'] = 'Suche';
+$lang['btn_save'] = 'Speichern';
+$lang['btn_preview'] = 'Vorschau';
+$lang['btn_top'] = 'Nach oben';
+$lang['btn_newer'] = '<< jüngere Änderungen';
+$lang['btn_older'] = 'ältere Änderungen >>';
+$lang['btn_revs'] = 'Ältere Versionen';
+$lang['btn_recent'] = 'Letzte Änderungen';
+$lang['btn_upload'] = 'Hochladen';
+$lang['btn_cancel'] = 'Abbrechen';
+$lang['btn_index'] = 'Ãœbersicht';
+$lang['btn_secedit'] = 'Bearbeiten';
+$lang['btn_login'] = 'Anmelden';
+$lang['btn_logout'] = 'Abmelden';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Updaten';
+$lang['btn_delete'] = 'Löschen';
+$lang['btn_back'] = 'Zurück';
+$lang['btn_backlink'] = 'Links hierher';
+$lang['btn_backtomedia'] = 'Zurück zur Dateiauswahl';
+$lang['btn_subscribe'] = 'Änderungen abonnieren';
+$lang['btn_unsubscribe'] = 'Änderungen abbestellen';
+$lang['btn_subscribens'] = 'Namensraumänderungen abonnieren';
+$lang['btn_unsubscribens'] = 'Namensraumänderungen abbestellen';
+$lang['btn_profile'] = 'Benutzerprofil';
+$lang['btn_reset'] = 'Zurücksetzen';
+$lang['btn_resendpwd'] = 'Sende neues Passwort';
+$lang['btn_draft'] = 'Entwurf bearbeiten';
+$lang['btn_recover'] = 'Entwurf wieder herstellen';
+$lang['btn_draftdel'] = 'Entwurf löschen';
+$lang['btn_revert'] = 'Wiederherstellen';
+$lang['loggedinas'] = 'Angemeldet als';
+$lang['user'] = 'Benutzername';
+$lang['pass'] = 'Passwort';
+$lang['newpass'] = 'Neues Passwort';
+$lang['oldpass'] = 'Bestätigen (Altes Passwort)';
+$lang['passchk'] = 'und nochmal';
+$lang['remember'] = 'Angemeldet bleiben';
+$lang['fullname'] = 'Voller Name';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Registrieren';
+$lang['profile'] = 'Benutzerprofil';
+$lang['badlogin'] = 'Nutzername oder Passwort sind falsch.';
+$lang['minoredit'] = 'kleine Änderung';
+$lang['draftdate'] = 'Entwurf gespeichert am';
+$lang['nosecedit'] = 'Diese Seite wurde in der Zwischenzeit geändert, Sektionsinfo ist veraltet, lade stattdessen volle Seite.';
+$lang['regmissing'] = 'Alle Felder müssen ausgefüllt werden';
+$lang['reguexists'] = 'Der Nutzername existiert leider schon.';
+$lang['regsuccess'] = 'Der neue Nutzer wurde angelegt und das Passwort per Email versandt.';
+$lang['regsuccess2'] = 'Der neue Nutzer wurde angelegt.';
+$lang['regmailfail'] = 'Offenbar ist ein Fehler beim Versenden der Passwortmail aufgetreten. Bitte wende dich an den Wiki-Admin.';
+$lang['regbadmail'] = 'Die angegebene Mail-Adresse scheint ungültig zu sein. Falls dies ein Fehler ist, wende dich bitte an den Wiki-Admin.';
+$lang['regbadpass'] = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuche es noch einmal.';
+$lang['regpwmail'] = 'Ihr DokuWiki Passwort';
+$lang['reghere'] = 'Du hast noch keinen Zugang? Hier anmelden';
+$lang['profna'] = 'Änderung des Benutzerprofils in diesem Wiki nicht möglich.';
+$lang['profnochange'] = 'Keine Änderungen, nichts zu tun.';
+$lang['profnoempty'] = 'Es muss ein Name oder eine E-Mail Adresse angegeben werden.';
+$lang['profchanged'] = 'Benuzerprofil erfolgreich geändert.';
+$lang['pwdforget'] = 'Passwort vergessen? Fordere ein neues an';
+$lang['resendna'] = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
+$lang['resendpwd'] = 'Neues Passwort schicken für';
+$lang['resendpwdmissing'] = 'Es tut mir Leid, aber du musst alle Felder ausfüllen.';
+$lang['resendpwdnouser'] = 'Es tut mir Leid, aber der Benutzer existiert nicht in unserer Datenbank.';
+$lang['resendpwdbadauth'] = 'Es tut mir Leid, aber dieser Authentifizierungscode ist ungültig. Stelle sicher, dass du den kompletten Bestätigungslink verwendet haben.';
+$lang['resendpwdconfirm'] = 'Ein Bestätigungslink wurde per E-Mail versandt.';
+$lang['resendpwdsuccess'] = 'Dein neues Passwort wurde per E-Mail versandt.';
+$lang['license'] = 'Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:';
+$lang['licenseok'] = 'Hinweis: Durch das Bearbeiten dieser Seite gibst du dein Einverständnis, dass dein Inhalt unter der folgenden Lizenz veröffentlicht wird:';
+$lang['searchmedia'] = 'Suche Dateiname:';
+$lang['searchmedia_in'] = 'Suche in %s';
+$lang['txt_upload'] = 'Datei zum Hochladen auswählen';
+$lang['txt_filename'] = 'Hochladen als (optional)';
+$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
+$lang['lockedby'] = 'Momentan gesperrt von';
+$lang['lockexpire'] = 'Sperre läuft ab am';
+$lang['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, solltest du sie durch einen Klick auf den Vorschau-Knopf verlängern.';
+$lang['notsavedyet'] = 'Nicht gespeicherte Änderungen gehen verloren!\nWeitermachen?';
+$lang['rssfailed'] = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
+$lang['nothingfound'] = 'Nichts gefunden.';
+$lang['mediaselect'] = 'Dateiauswahl';
+$lang['fileupload'] = 'Datei hochladen';
+$lang['uploadsucc'] = 'Datei wurde erfolgreich hochgeladen';
+$lang['uploadfail'] = 'Hochladen fehlgeschlagen. Keine Berechtigung?';
+$lang['uploadwrong'] = 'Hochladen verweigert. Diese Dateiendung ist nicht erlaubt.';
+$lang['uploadexist'] = 'Datei existiert bereits. Keine Änderungen vorgenommen.';
+$lang['uploadbadcontent'] = 'Die hochgeladenen Daten stimmen nicht mit der Dateiendung % überein.';
+$lang['uploadspam'] = 'Hochladen verweigert: Treffer auf der Spamliste.';
+$lang['uploadxss'] = 'Hochladen verweigert: Daten scheinen Schadcode zu enthalten.';
+$lang['uploadsize'] = 'Die hochgeladene Datei war zu groß. (max. %s)';
+$lang['deletesucc'] = 'Die Datei "%s" wurde gelöscht.';
+$lang['deletefail'] = '"%s" konnte nicht gelöscht werden - prüfe die Berechtigungen.';
+$lang['mediainuse'] = 'Die Datei "%s" wurde nicht gelöscht - sie wird noch verwendet.';
+$lang['namespaces'] = 'Namensräume';
+$lang['mediafiles'] = 'Vorhandene Dateien in';
+$lang['js']['searchmedia'] = 'Suche nach Dateien';
+$lang['js']['keepopen'] = 'Fenster nach Auswahl nicht schließen';
+$lang['js']['hidedetails'] = 'Details ausblenden';
+$lang['js']['nosmblinks'] = 'Das Verlinken von Windows Freigaben funktioniert nur im Microsoft Internet Explorer.
+Der Link kann jedoch durch Kopieren und Einfügen verwendet werden.';
+$lang['js']['linkwiz'] = 'Link-Assistent';
+$lang['js']['linkto'] = 'Link zu:';
+$lang['js']['del_confirm'] = 'Die ausgewählten Dateien wirklich löschen?';
+$lang['js']['mu_btn'] = 'Mehrere Dateien gleichzeitig hochladen';
+$lang['mediausage'] = 'Syntax zum Verwenden dieser Datei:';
+$lang['mediaview'] = 'Originaldatei öffnen';
+$lang['mediaroot'] = 'Wurzel';
+$lang['mediaupload'] = 'Lade hier eine Datei in den momentanen Namensraum hoch. Um Unterordner zu erstellen, stelle diese dem Dateinamen im Feld "Hochladen als" durch Doppelpunkt getrennt voran.';
+$lang['mediaextchange'] = 'Dateiendung vom .%s nach .%s geändert!';
+$lang['reference'] = 'Verwendung von';
+$lang['ref_inuse'] = 'Diese Datei kann nicht gelöscht werden, da sie noch von folgenden Seiten benutzt wird:';
+$lang['ref_hidden'] = 'Einige Verweise sind auf Seiten, für die du keine Leseberechtigung hast.';
+$lang['hits'] = 'Treffer';
+$lang['quickhits'] = 'Passende Seitennamen';
+$lang['toc'] = 'Inhaltsverzeichnis';
+$lang['current'] = 'aktuell';
+$lang['yours'] = 'Deine Version';
+$lang['diff'] = 'Zeige Unterschiede zu aktueller Version';
+$lang['diff2'] = 'Zeige Unterschiede der ausgewählten Versionen';
+$lang['line'] = 'Zeile';
+$lang['breadcrumb'] = 'Zuletzt angesehen';
+$lang['youarehere'] = 'Du befindest dich hier';
+$lang['lastmod'] = 'Zuletzt geändert';
+$lang['by'] = 'von';
+$lang['deleted'] = 'gelöscht';
+$lang['created'] = 'angelegt';
+$lang['restored'] = 'alte Version wieder hergestellt';
+$lang['external_edit'] = 'Externe Bearbeitung';
+$lang['summary'] = 'Zusammenfassung';
+$lang['noflash'] = 'Das <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> wird benötigt, um diesen Ihnalt anzuzeigen.';
+$lang['download'] = 'Download-Teil';
+$lang['mail_newpage'] = 'Neue Seite:';
+$lang['mail_changed'] = 'Seite geaendert:';
+$lang['mail_new_user'] = 'Neuer Benutzer:';
+$lang['mail_upload'] = 'Datei hochgeladen:';
+$lang['qb_bold'] = 'Fetter Text';
+$lang['qb_italic'] = 'Kursiver Text';
+$lang['qb_underl'] = 'Unterstrichener Text';
+$lang['qb_code'] = 'Code Text';
+$lang['qb_strike'] = 'Durchgestrichener Text';
+$lang['qb_h1'] = 'Level 1 Ãœberschrift';
+$lang['qb_h2'] = 'Level 2 Ãœberschrift';
+$lang['qb_h3'] = 'Level 3 Ãœberschrift';
+$lang['qb_h4'] = 'Level 4 Ãœberschrift';
+$lang['qb_h5'] = 'Level 5 Ãœberschrift';
+$lang['qb_h'] = 'Ãœberschrift';
+$lang['qb_hs'] = 'Wähle eine Überschrift';
+$lang['qb_hplus'] = 'Überschrift eine Ebene höher';
+$lang['qb_hminus'] = 'Ãœberschrift eine Ebene runter';
+$lang['qb_hequal'] = 'Ãœberschrift auf selber Ebene';
+$lang['qb_link'] = 'Interner Link';
+$lang['qb_extlink'] = 'Externer Link';
+$lang['qb_hr'] = 'Horizontale Linie';
+$lang['qb_ol'] = 'Nummerierter Listenpunkt';
+$lang['qb_ul'] = 'Listenpunkt';
+$lang['qb_media'] = 'Bilder und andere Dateien hinzufügen';
+$lang['qb_sig'] = 'Unterschrift einfügen';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Sonderzeichen';
+$lang['upperns'] = 'Gehe zum Ausgangsfeld';
+$lang['admin_register'] = 'Neuen Benutzer anmelden';
+$lang['metaedit'] = 'Metadaten bearbeiten';
+$lang['metasaveerr'] = 'Die Metadaten konnten nicht gesichert werden';
+$lang['metasaveok'] = 'Metadaten gesichert';
+$lang['img_backto'] = 'Zurück zu';
+$lang['img_title'] = 'Titel';
+$lang['img_caption'] = 'Bildunterschrift';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Dateiname';
+$lang['img_fsize'] = 'Grösse';
+$lang['img_artist'] = 'FotografIn';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Schlagwörter';
+$lang['subscribe_success'] = '%s hat nun Änderungen der Seite %s abonniert';
+$lang['subscribe_error'] = '%s kann die Änderungen der Seite %s nicht abonnieren';
+$lang['subscribe_noaddress'] = 'Weil deine E-Mail-Adresse fehlt, kannst du das Thema nicht abonnieren';
+$lang['unsubscribe_success'] = 'Das Abonnement von %s für die Seite %s wurde aufgelöst';
+$lang['unsubscribe_error'] = 'Das Abonnement von %s für die Seite %s konnte nicht aufgelöst werden';
+$lang['authmodfailed'] = 'Benutzerüberprüfung nicht möglich. Bitte wende dich an den Systembetreuer.';
+$lang['authtempfail'] = 'Benutzerüberprüfung momentan nicht möglich. Falls das Problem andauert, wende dich an den Systembetreuer.';
+$lang['i_chooselang'] = 'Wähle deine Sprache';
+$lang['i_installer'] = 'DokuWiki Installation';
+$lang['i_wikiname'] = 'Wiki-Name';
+$lang['i_enableacl'] = 'Zugangskontrolle (ACL) aktivieren (empfohlen)';
+$lang['i_superuser'] = 'Administrator Benutzername';
+$lang['i_problems'] = 'Das Installationsprogramm hat unten aufgeführte Probleme festgestellt, die zunächst behoben werden müssen, bevor du mit der Installation fortfahren kannst.';
+$lang['i_modified'] = 'Aus Sicherheitsgründen arbeitet dieses Script nur mit einer neuen, unmodifizierten DokuWiki-Installation. Du solltest entweder alle Dateien noch einmal frisch installieren oder die <a href="http://dokuwiki.org/install">Dokuwiki-Installationsanleitung</a> konsultieren.';
+$lang['i_funcna'] = 'Die PHP Funktion <code>%s</code> ist nicht verfügbar. Unter Umständen wurde sie von deinem Hoster deaktiviert?';
+$lang['i_phpver'] = 'Deine PHP-Version <code>%s</code> ist niedriger als die benötigte Version <code>%s</code>. Bitte aktualisiere deine PHP-Installation.';
+$lang['i_permfail'] = '<code>%s</code> ist nicht durch DokuWiki beschreibbar. Du musst die Berechtigungen dieses Ordners ändern!';
+$lang['i_confexists'] = '<code>%s</code> existiert bereits';
+$lang['i_writeerr'] = '<code>%s</code> konnte nicht erzeugt werden. Du solltest die Verzeichnis-/Datei-Rechte überprüfen und die Datei manuell anlegen.';
+$lang['i_badhash'] = 'Unbekannte oder modifizierte dokuwiki.php (Hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - unerlaubter oder leerer Wert';
+$lang['i_success'] = 'Die Konfiguration wurde erfolgreich abgeschlossen. Du kannst jetzt die install.php löschen. Dein
+ <a href="doku.php">neues DokuWiki</a> ist jetzt für dich bereit.';
+$lang['i_failure'] = 'Es sind Fehler beim Schreiben der Konfigurationsdateien aufgetreten. Du musst diese vermutlich von Hand beheben, bevor du dein <a href="doku.php">neues DokuWiki</a> nutzen kannst.';
+$lang['i_policy'] = 'Anfangseinstellung für Zugangskontrolle (ACL)';
+$lang['i_pol0'] = 'Offenes Wiki (lesen, schreiben, hochladen für alle)';
+$lang['i_pol1'] = 'Öffentliches Wiki (lesen für alle, schreiben und hochladen für registrierte Nutzer)';
+$lang['i_pol2'] = 'Geschlossenes Wiki (lesen, schreiben, hochladen nur für registrierte Nutzer)';
+$lang['i_retry'] = 'Wiederholen';
+$lang['mu_intro'] = 'In diesem Bereich kannst du mehrere Dateien gleichzeitig hochladen. Benutze die Schaltfläche "Durchsuchen", um sie der Warteschlange zuzufügen. Betätige die Schaltfläche "Hochladen", um die Übertragung zu starten.';
+$lang['mu_gridname'] = 'Dateiname';
+$lang['mu_gridsize'] = 'Größe';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namensraum';
+$lang['mu_browse'] = 'Durchsuchen';
+$lang['mu_toobig'] = 'zu groß';
+$lang['mu_ready'] = 'bereit zum hochladen';
+$lang['mu_done'] = 'fertig';
+$lang['mu_fail'] = 'gescheitert';
+$lang['mu_authfail'] = 'Sitzung abgelaufen';
+$lang['mu_progress'] = '@PCT@% hochgeladen';
+$lang['mu_filetypes'] = 'Erlaubte Dateitypen';
+$lang['mu_info'] = 'Dateien hochgeladen.';
+$lang['mu_lasterr'] = 'Letzter Fehler:';
+$lang['recent_global'] = 'Im Moment siehst du die Änderungen im Namensraum <b>%s</b>. Du kannst auch <a href="%s">die Änderungen im gesamten Wiki sehen</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt
new file mode 100644
index 000000000..4430fc6dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt
@@ -0,0 +1,4 @@
+====== Seite gesperrt ======
+
+Diese Seite ist momentan von einem anderen Nutzer gesperrt. Warte, bis dieser mit dem Bearbeiten fertig ist oder die Sperre abläuft.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt
new file mode 100644
index 000000000..5c99c48f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt
@@ -0,0 +1,4 @@
+====== Anmelden ======
+
+Gib deinen Benutzernamen und dein Passwort in das Formular unten ein, um dich anzumelden. Bitte beachte, dass dafür "Cookies" in den Sicherheitseinstellungen deines Browsers erlaubt sein müssen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt
new file mode 100644
index 000000000..4fd41ad19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt
@@ -0,0 +1,17 @@
+Eine Seite in deinem Wiki wurde geändert oder neu angelegt. Hier sind die Details:
+
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adresse : @IPADDRESS@
+Hostname : @HOSTNAME@
+Alte Version : @OLDPAGE@
+Neue Version : @NEWPAGE@
+Zusammenfassung: @SUMMARY@
+Benutzer : @USER@
+
+@DIFF@
+
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt
new file mode 100644
index 000000000..5e261cc89
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt
@@ -0,0 +1,5 @@
+====== Dieses Thema existiert noch nicht ======
+
+Du bist einem Link zu einer Seite gefolgt, die noch nicht existiert. Du kannst die Seite mit dem Knopf **''[Seite anlegen]''** selbst anlegen und mit Inhalt füllen.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt
new file mode 100644
index 000000000..c6243313d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt
@@ -0,0 +1,4 @@
+====== Version existiert nicht ======
+
+Die angegebene Version des Dokuments wurde nicht gefunden. Benutze den **''[Ältere Versionen]''** Knopf, um eine Liste aller verfügbaren Versionen dieses Dokuments zu erhalten.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt
new file mode 100644
index 000000000..d3a578f69
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt
@@ -0,0 +1,5 @@
+====== Vorschau ======
+
+So wird dein Text später aussehen. Achtung: Der Text wurde noch **nicht gespeichert**!
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt
new file mode 100644
index 000000000..538597cfa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt
@@ -0,0 +1,16 @@
+Hallo @FULLNAME@!
+
+Jemand hat ein neues Passwort für deinen @TITLE@
+login auf @DOKUWIKIURL@ angefordert.
+
+Wenn du diese Änderung nicht angefordert hast, ignoriere diese
+E-Mail einfach.
+
+Um die Anforderung zu bestätigen, folge bitte dem unten angegebenen
+Bestätigungslink.
+
+@CONFIRM@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt
new file mode 100644
index 000000000..1c5422a29
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt
@@ -0,0 +1,2 @@
+Diese Seite ist nicht editierbar. Du kannst den Quelltext sehen, jedoch nicht verändern. Kontaktiere den Administrator, wenn du glaubst, dass hier ein Fehler vorliegt.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt
new file mode 100644
index 000000000..c05bbae12
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt
@@ -0,0 +1,5 @@
+====== Letzte Änderungen ======
+
+Die folgenden Seiten wurden zuletzt geändert.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt
new file mode 100644
index 000000000..8fe4718dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt
@@ -0,0 +1,4 @@
+====== Als neuer Nutzer registrieren ======
+
+Bitte fülle alle Felder aus, um einen neuen Nutzer-Account in diesem Wiki anzulegen. Stelle sicher, dass eine **gültige E-Mail-Adresse** angegeben wird - das Passwort wird an diese Adresse gesendet. Der Nutzername sollte aus einem Wort ohne Umlaute, Leer- oder Sonderzeichen bestehen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt
new file mode 100644
index 000000000..ed37a9505
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt
@@ -0,0 +1,14 @@
+Ein neuer Benutzer hat sich registriert. Hier sind die Details:
+
+Benutzername : @NEWUSER@
+Voller Name : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt
new file mode 100644
index 000000000..4dcd4bb4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Neues Passwort anfordern ======
+
+Fülle alle Felder unten aus, um ein neues Passwort für deinen Zugang zu erhalten. Das neue Passwort wird an deine gespeicherte E-Mail-Adresse geschickt. Der Benutzername sollte dein Wiki-Benutzername sein.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt
new file mode 100644
index 000000000..e4a7be8f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt
@@ -0,0 +1,4 @@
+====== Ältere Versionen ======
+
+Dies sind ältere Versionen des gewählten Dokuments. Um zu einer älteren Version zurückzukehren, wähle die entsprechende Version aus, klicke auf **''[Diese Seite bearbeiten]''** und speichere sie erneut ab.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt
new file mode 100644
index 000000000..72c57b765
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt
@@ -0,0 +1,7 @@
+====== Suche ======
+
+Unten sind die Ergebnisse deiner Suche gelistet. Falls der gesuchte Begriff nicht gefunden wurde, kannst du direkt eine neue Seite für den Suchbegriff anlegen, indem du auf den Knopf **''[Seite anlegen]''** drückst.
+
+===== Ergebnisse =====
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt
new file mode 100644
index 000000000..65f53c9c1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt
@@ -0,0 +1,2 @@
+**Dies ist eine alte Version des Dokuments!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt
new file mode 100644
index 000000000..443b17723
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt
@@ -0,0 +1,125 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+aber
+als
+auch
+auf
+aus
+bei
+bin
+bis
+bist
+dadurch
+daher
+darum
+das
+daß
+dass
+dein
+deine
+dem
+den
+der
+des
+dessen
+deshalb
+die
+dies
+dieser
+dieses
+doch
+dort
+durch
+ein
+eine
+einem
+einen
+einer
+eines
+euer
+eure
+für
+hatte
+hatten
+hattest
+hattet
+hier
+hinter
+ich
+ihr
+ihre
+in
+im
+ist
+jede
+jedem
+jeden
+jeder
+jedes
+jener
+jenes
+jetzt
+kann
+kannst
+können
+könnt
+machen
+mein
+meine
+mit
+muß
+mußt
+musst
+müssen
+müßt
+nach
+nachdem
+nein
+nicht
+nun
+oder
+seid
+sein
+seine
+sich
+sie
+sind
+soll
+sollen
+sollst
+sollt
+sonst
+soweit
+sowie
+und
+unser
+unsere
+unter
+vom
+von
+vor
+um
+wann
+warum
+was
+weiter
+weitere
+wenn
+wer
+werde
+werden
+werdet
+weshalb
+wie
+wieder
+wieso
+wir
+wird
+wirst
+woher
+wohin
+zum
+zur
+über
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt
new file mode 100644
index 000000000..952ac911e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt
@@ -0,0 +1,23 @@
+Hallo!
+
+Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
+Das sind die Änderungen:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Datum : @DATE@
+Benutzer : @USER@
+Ãœbersicht: @SUMMARY@
+Alte Revision: @OLDPAGE@
+Neue Revision: @NEWPAGE@
+
+Um das Abonnement für diese Seite aufzulösen, melde dich im Wiki an
+@DOKUWIKIURL@, besuche dann
+@NEWPAGE@
+und klicke auf die Taste 'Änderungen abbestellen'.
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt
new file mode 100644
index 000000000..66c2e8293
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Benutzerprofil ändern ======
+
+Nur die Felder, die du änderst, werden aktualisiert. Alle anderen bleiben, wie sie sind. Deinen Benutzernamen kannst du jedoch nicht ändern.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt
new file mode 100644
index 000000000..72e4a2a6e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt
@@ -0,0 +1,14 @@
+Eine Datei wurde in deinem Wiki hochgeladen. Hier sind die Details:
+
+Datei : @MEDIA@
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adresse : @IPADDRESS@
+Hostname : @HOSTNAME@
+Größe : @SIZE@
+MIME-Typ : @MIME@
+Benutzer : @USER@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt
new file mode 100644
index 000000000..cb3e4c06a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blockiert ======
+
+Deine Änderungen wurden nicht gespeichert, da sie ein oder mehrere nicht erlaubte Wörter enthielten. Falls du versucht haben solltest, das Wiki zu Spammen -- Schande über ich! Wenn du glaubst, dass der Eintrag zu Unrecht blockiert wurde, kontaktiere bitte den Administrator des Wikis.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt
new file mode 100644
index 000000000..c52f343ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Folgende administrative Aufgaben stehen in DokuWiki zur Verfügung.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt
new file mode 100644
index 000000000..d3bfd0910
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt
@@ -0,0 +1 @@
+===== Weitere Plugins ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt
new file mode 100644
index 000000000..aae4c5582
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt
@@ -0,0 +1,5 @@
+====== Backlinks ======
+
+Dies ist eine Liste der Seiten, die zurück zur momentanen Seite linken.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt
new file mode 100644
index 000000000..d24e5b198
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt
@@ -0,0 +1,6 @@
+====== Eine neuere Version existiert ======
+
+Eine neuere Version des aktuell in Bearbeitung befindlichen Dokuments existiert. Das heißt, jemand hat parallel an der selben Seite gearbeitet und zuerst gespeichert.
+
+Die unten aufgeführten Unterschiede können bei der Entscheidung helfen, welchem Dokument Vorrang gewährt wird. Wählen Sie **''[Speichern]''** zum Sichern Ihrer Version oder **''[Abbrechen]''**, um Ihre Version zu verwerfen und die zuerst gespeicherte Seite zu behalten.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt
new file mode 100644
index 000000000..b87965067
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt
@@ -0,0 +1,4 @@
+====== Zugang verweigert ======
+
+Sie haben nicht die erforderlichen Rechte, um diese Aktion durchzuführen. Eventuell sind Sie nicht beim Wiki angemeldet?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt
new file mode 100644
index 000000000..82fbbc252
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt
@@ -0,0 +1,5 @@
+====== Unterschiede ======
+
+Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt
new file mode 100644
index 000000000..14a5e8495
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt
@@ -0,0 +1,6 @@
+====== Entwurf gefunden ======
+
+Ihre letzte Bearbeitungssitzung wurde nicht ordnungsgemäß abgeschlossen. DokuWiki hat während Ihrer Arbeit automatisch einen Zwischenentwurf gespeichert, den Sie jetzt nutzen können, um Ihre Arbeit fortzusetzen. Unten sehen Sie die Daten, die bei Ihrer letzten Sitzung gespeichert wurden.
+
+Bitte entscheiden Sie, ob Sie den Entwurf //wieder herstellen// oder //löschen// wollen oder ob Sie die Bearbeitung abbrechen möchten.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt
new file mode 100644
index 000000000..15e02c61a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt
@@ -0,0 +1,4 @@
+Bitte nur editieren, falls das Dokument **verbessert** werden kann.
+
+Nach dem Bearbeiten den **''[Speichern]''**-Knopf drücken. Siehe [[wiki:syntax]] zur Wiki-Syntax. Zum Testen bitte erst im [[playground:playground|Spielplatz]] üben.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt
new file mode 100644
index 000000000..6c1f642cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt
@@ -0,0 +1,2 @@
+**Eine ältere Version des Dokuments wurde geladen!** Beim Speichern wird eine neue Version des Dokuments mit diesem Inhalt erstellt.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt
new file mode 100644
index 000000000..fa8dc4663
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt
@@ -0,0 +1,4 @@
+====== Ãœbersicht ======
+
+Dies ist eine Übersicht über alle vorhandenen Seiten und [[doku>namespaces|Namensräume]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html
new file mode 100644
index 000000000..15fd1c36b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html
@@ -0,0 +1,27 @@
+<p>Diese Seite hilft Ihnen bei der Erst-Installation und Konfiguration von
+<a href="http://dokuwiki.org">Dokuwiki</a>. Zusätzliche Informationen zu
+diesem Installationsskript finden Sie auf der entsprechenden
+<a href="http://dokuwiki.org/installer">Hilfe Seite</a> (en).</p>
+
+<p>DokuWiki verwendet normale Dateien für das Speichern von Wikiseiten und
+anderen Informationen (Bilder, Suchindizes, alte Versionen, usw.).
+Um DokuWiki betreiben zu können, <strong>muss</strong> Schreibzugriff auf die
+Verzeichnisse bestehen, in denen DokuWiki diese Dateien ablegt. Dieses
+Installationsprogramm kann diese Rechte nicht für Sie setzen. Sie müssen dies
+manuell auf einer Kommando-Shell oder, falls Sie DokuWiki bei einem Fremdanbieter
+hosten, über FTP oder ein entsprechendes Werkzeug (z.B. cPanel) durchführen.</p>
+
+<p>Dieses Skript hilft Ihnen beim ersten Einrichten des Zugangsschutzes
+(<acronym title="access control list">ACL</acronym>) von DokuWiki, welcher eine
+Administratoranmeldung und damit Zugang zum Administrationsmenu ermöglicht.
+Dort können Sie dann weitere Tätigkeiten wie das Installieren von Plugins, das
+Verwalten von Nutzern und das Ändern von Konfigurationseinstellungen durchführen.
+Das Nutzen der Zugangskontrolle ist nicht zwingend erforderlich, es erleichtert aber
+die Administration von DokuWiki.</p>
+
+<p>Erfahrene Anwender oder Nutzer mit speziellen Konfigurationsbedürfnissen sollten
+die folgenden Links nutzen, um sich über
+<a href="http://dokuwiki.org/install">Installation</a>
+und <a href="http://dokuwiki.org/config">Konfiguration</a> zu
+informieren.</p>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php
new file mode 100644
index 000000000..d0c1f8b70
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php
@@ -0,0 +1,257 @@
+<?php
+/**
+ * german language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Christof <gagi@fin.de>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Dirk Einecke <dirk@dirkeinecke.de>
+ * @author Blitzi94@gmx.de
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Diese Seite bearbeiten';
+$lang['btn_source'] = 'Zeige Quelltext';
+$lang['btn_show'] = 'Seite anzeigen';
+$lang['btn_create'] = 'Seite anlegen';
+$lang['btn_search'] = 'Suche';
+$lang['btn_save'] = 'Speichern';
+$lang['btn_preview'] = 'Vorschau';
+$lang['btn_top'] = 'Nach oben';
+$lang['btn_newer'] = '<< jüngere Änderungen';
+$lang['btn_older'] = 'ältere Änderungen >>';
+$lang['btn_revs'] = 'Ältere Versionen';
+$lang['btn_recent'] = 'Letzte Änderungen';
+$lang['btn_upload'] = 'Hochladen';
+$lang['btn_cancel'] = 'Abbrechen';
+$lang['btn_index'] = 'Ãœbersicht';
+$lang['btn_secedit'] = 'Bearbeiten';
+$lang['btn_login'] = 'Anmelden';
+$lang['btn_logout'] = 'Abmelden';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Updaten';
+$lang['btn_delete'] = 'Löschen';
+$lang['btn_back'] = 'Zurück';
+$lang['btn_backlink'] = 'Links hierher';
+$lang['btn_backtomedia'] = 'Zurück zur Dateiauswahl';
+$lang['btn_subscribe'] = 'Änderungen abonnieren';
+$lang['btn_unsubscribe'] = 'Änderungen abbestellen';
+$lang['btn_subscribens'] = 'Namensraumänderungen abonnieren';
+$lang['btn_unsubscribens'] = 'Namensraumänderungen abbestellen';
+$lang['btn_profile'] = 'Benutzerprofil';
+$lang['btn_reset'] = 'Zurücksetzen';
+$lang['btn_resendpwd'] = 'Sende neues Passwort';
+$lang['btn_draft'] = 'Entwurf bearbeiten';
+$lang['btn_recover'] = 'Entwurf wieder herstellen';
+$lang['btn_draftdel'] = 'Entwurf löschen';
+$lang['btn_revert'] = 'Wiederherstellen';
+$lang['loggedinas'] = 'Angemeldet als';
+$lang['user'] = 'Benutzername';
+$lang['pass'] = 'Passwort';
+$lang['newpass'] = 'Neues Passwort';
+$lang['oldpass'] = 'Bestätigen (Altes Passwort)';
+$lang['passchk'] = 'und nochmal';
+$lang['remember'] = 'Angemeldet bleiben';
+$lang['fullname'] = 'Voller Name';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Registrieren';
+$lang['profile'] = 'Benutzerprofil';
+$lang['badlogin'] = 'Nutzername oder Passwort sind falsch.';
+$lang['minoredit'] = 'kleine Änderung';
+$lang['draftdate'] = 'Entwurf gespeichert am';
+$lang['nosecedit'] = 'Diese Seite wurde in der Zwischenzeit geändert, Sektionsinfo ist veraltet, lade stattdessen volle Seite.';
+$lang['regmissing'] = 'Alle Felder müssen ausgefüllt werden.';
+$lang['reguexists'] = 'Der Nutzername existiert leider schon.';
+$lang['regsuccess'] = 'Der neue Nutzer wurde angelegt und das Passwort per E-Mail versandt.';
+$lang['regsuccess2'] = 'Der neue Nutzer wurde angelegt.';
+$lang['regmailfail'] = 'Offenbar ist ein Fehler beim Versenden der Passwort-E-Mail aufgetreten. Bitte wenden Sie sich an den Wiki-Admin.';
+$lang['regbadmail'] = 'Die angegebene E-Mail-Adresse scheint ungültig zu sein. Falls dies ein Fehler ist, wenden Sie sich bitte an den Wiki-Admin.';
+$lang['regbadpass'] = 'Die beiden eingegeben Passwörter stimmen nicht überein. Bitte versuchen Sie es noch einmal.';
+$lang['regpwmail'] = 'Ihr DokuWiki Passwort';
+$lang['reghere'] = 'Sie haben noch keinen Zugang? Hier anmelden';
+$lang['profna'] = 'Änderung des Benutzerprofils in diesem Wiki nicht möglich.';
+$lang['profnochange'] = 'Keine Änderungen, nichts zu tun.';
+$lang['profnoempty'] = 'Es muß ein Name und eine E-Mail-Adresse angegeben werden.';
+$lang['profchanged'] = 'Benuzerprofil erfolgreich geändert.';
+$lang['pwdforget'] = 'Passwort vergessen? Fordere ein neues an';
+$lang['resendna'] = 'Passwörter versenden ist in diesem Wiki nicht möglich.';
+$lang['resendpwd'] = 'Neues Passwort schicken für';
+$lang['resendpwdmissing'] = 'Es tut mir Leid, aber Sie müssen alle Felder ausfüllen.';
+$lang['resendpwdnouser'] = 'Es tut mir Leid, aber der Benutzer existiert nicht in unserer Datenbank.';
+$lang['resendpwdbadauth'] = 'Es tut mir Leid, aber dieser Authentifizierungscode ist ungültig. Stellen Sie sicher, dass Sie den kompletten Bestätigungslink verwendet haben.';
+$lang['resendpwdconfirm'] = 'Ein Bestätigungslink wurde per E-Mail versandt.';
+$lang['resendpwdsuccess'] = 'Ihr neues Passwort wurde per E-Mail versandt.';
+$lang['license'] = 'Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:';
+$lang['licenseok'] = 'Hinweis: Durch das Bearbeiten dieser Seite geben Sie Ihr Einverständnis, dass Ihr Inhalt unter der folgenden Lizenz veröffentlicht wird:';
+$lang['searchmedia'] = 'Suche Dateinamen:';
+$lang['searchmedia_in'] = 'Suche in %s';
+$lang['txt_upload'] = 'Datei zum Hochladen auswählen';
+$lang['txt_filename'] = 'Hochladen als (optional)';
+$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
+$lang['lockedby'] = 'Momentan gesperrt von';
+$lang['lockexpire'] = 'Sperre läuft ab am';
+$lang['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, sollten Sie sie durch einen Klick auf den Vorschau-Knopf verlängern.';
+$lang['notsavedyet'] = 'Nicht gespeicherte Änderungen gehen verloren!\nWeitermachen?';
+$lang['rssfailed'] = 'Es ist ein Fehler beim Laden des Feeds aufgetreten: ';
+$lang['nothingfound'] = 'Nichts gefunden.';
+$lang['mediaselect'] = 'Dateiauswahl';
+$lang['fileupload'] = 'Datei hochladen';
+$lang['uploadsucc'] = 'Datei wurde erfolgreich hochgeladen';
+$lang['uploadfail'] = 'Hochladen fehlgeschlagen. Keine Berechtigung?';
+$lang['uploadwrong'] = 'Hochladen verweigert. Diese Dateiendung ist nicht erlaubt.';
+$lang['uploadexist'] = 'Datei existiert bereits. Keine Änderungen vorgenommen.';
+$lang['uploadbadcontent'] = 'Die hochgeladenen Daten stimmen nicht mit der Dateiendung %s überein.';
+$lang['uploadspam'] = 'Hochladen verweigert: Treffer auf der Spamliste.';
+$lang['uploadxss'] = 'Hochladen verweigert: Daten scheinen Schadcode zu enthalten.';
+$lang['uploadsize'] = 'Die hochgeladene Datei war zu groß. (max. %s)';
+$lang['deletesucc'] = 'Die Datei "%s" wurde gelöscht.';
+$lang['deletefail'] = '"%s" konnte nicht gelöscht werden - prüfen Sie die Berechtigungen.';
+$lang['mediainuse'] = 'Die Datei "%s" wurde nicht gelöscht - sie wird noch verwendet.';
+$lang['namespaces'] = 'Namensräume';
+$lang['mediafiles'] = 'Vorhandene Dateien in';
+$lang['js']['searchmedia'] = 'Suche Dateien';
+$lang['js']['keepopen'] = 'Fenster nach Auswahl nicht schließen';
+$lang['js']['hidedetails'] = 'Details ausblenden';
+$lang['js']['nosmblinks'] = 'Das Verlinken von Windows-Freigaben funktioniert nur im Microsoft Internet Explorer.
+Der Link kann jedoch durch Kopieren und Einfügen verwendet werden.';
+$lang['js']['linkwiz'] = 'Link-Assistent';
+$lang['js']['linkto'] = 'Link nach:';
+$lang['js']['del_confirm'] = 'Eintrag wirklich löschen?';
+$lang['js']['mu_btn'] = 'Mehrere Dateien gleichzeitig hochladen';
+$lang['mediausage'] = 'Syntax zum Verwenden dieser Datei:';
+$lang['mediaview'] = 'Originaldatei öffnen';
+$lang['mediaroot'] = 'Wurzel';
+$lang['mediaupload'] = 'Laden Sie hier eine Datei in den momentanen Namensraum hoch. Um Unterordner zu erstellen, stellen Sie diese dem Dateinamen im Feld "Hochladen als" durch Doppelpunkt getrennt voran.';
+$lang['mediaextchange'] = 'Dateiendung vom .%s nach .%s geändert!';
+$lang['reference'] = 'Verwendung von';
+$lang['ref_inuse'] = 'Diese Datei kann nicht gelöscht werden, da sie noch von folgenden Seiten benutzt wird:';
+$lang['ref_hidden'] = 'Einige Verweise sind auf Seiten, für die Sie keine Leseberechtigung haben.';
+$lang['hits'] = 'Treffer';
+$lang['quickhits'] = 'Passende Seitennamen';
+$lang['toc'] = 'Inhaltsverzeichnis';
+$lang['current'] = 'aktuell';
+$lang['yours'] = 'Ihre Version';
+$lang['diff'] = 'Zeige Unterschiede zu aktueller Version';
+$lang['diff2'] = 'Zeige Unterschiede der ausgewählten Versionen';
+$lang['line'] = 'Zeile';
+$lang['breadcrumb'] = 'Zuletzt angesehen';
+$lang['youarehere'] = 'Sie befinden sich hier';
+$lang['lastmod'] = 'Zuletzt geändert';
+$lang['by'] = 'von';
+$lang['deleted'] = 'gelöscht';
+$lang['created'] = 'angelegt';
+$lang['restored'] = 'alte Version wieder hergestellt';
+$lang['external_edit'] = 'Externe Bearbeitung';
+$lang['summary'] = 'Zusammenfassung';
+$lang['noflash'] = 'Das <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> wird benötigt, um diesen Ihnalt anzuzeigen.';
+$lang['download'] = 'Schnipsel herunterladen';
+$lang['mail_newpage'] = 'Neue Seite:';
+$lang['mail_changed'] = 'Seite geaendert:';
+$lang['mail_new_user'] = 'Neuer Benutzer:';
+$lang['mail_upload'] = 'Datei hochgeladen:';
+$lang['qb_bold'] = 'Fetter Text';
+$lang['qb_italic'] = 'Kursiver Text';
+$lang['qb_underl'] = 'Unterstrichener Text';
+$lang['qb_code'] = 'Code Text';
+$lang['qb_strike'] = 'Durchgestrichener Text';
+$lang['qb_h1'] = 'Level 1 Ãœberschrift';
+$lang['qb_h2'] = 'Level 2 Ãœberschrift';
+$lang['qb_h3'] = 'Level 3 Ãœberschrift';
+$lang['qb_h4'] = 'Level 4 Ãœberschrift';
+$lang['qb_h5'] = 'Level 5 Ãœberschrift';
+$lang['qb_h'] = 'Ãœberschrift';
+$lang['qb_hs'] = 'Wähle die Überschrift';
+$lang['qb_hplus'] = 'Obere Ãœberschrift';
+$lang['qb_hminus'] = 'Untere Ãœberschrift';
+$lang['qb_hequal'] = 'Gleichzeilige Ãœberschrift';
+$lang['qb_link'] = 'Interner Link';
+$lang['qb_extlink'] = 'Externer Link';
+$lang['qb_hr'] = 'Horizontale Linie';
+$lang['qb_ol'] = 'Nummerierter Listenpunkt';
+$lang['qb_ul'] = 'Listenpunkt';
+$lang['qb_media'] = 'Bilder und andere Dateien hinzufügen';
+$lang['qb_sig'] = 'Unterschrift einfügen';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Sonderzeichen';
+$lang['upperns'] = 'zum übergeordneten Namensraum springen';
+$lang['admin_register'] = 'Neuen Benutzer anmelden';
+$lang['metaedit'] = 'Metadaten bearbeiten';
+$lang['metasaveerr'] = 'Die Metadaten konnten nicht gesichert werden';
+$lang['metasaveok'] = 'Metadaten gesichert';
+$lang['img_backto'] = 'Zurück zu';
+$lang['img_title'] = 'Titel';
+$lang['img_caption'] = 'Bildunterschrift';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Dateiname';
+$lang['img_fsize'] = 'Grösse';
+$lang['img_artist'] = 'FotografIn';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Schlagwörter';
+$lang['subscribe_success'] = '%s hat nun Änderungen der Seite %s abonniert';
+$lang['subscribe_error'] = '%s kann die Änderungen der Seite %s nicht abonnieren';
+$lang['subscribe_noaddress'] = 'Weil Ihre E-Mail-Adresse fehlt, können Sie das Thema nicht abonnieren';
+$lang['unsubscribe_success'] = 'Das Abonnement von %s für die Seite %s wurde aufgelöst';
+$lang['unsubscribe_error'] = 'Das Abonnement von %s für die Seite %s konnte nicht aufgelöst werden';
+$lang['authmodfailed'] = 'Benutzerüberprüfung nicht möglich. Bitte wenden Sie sich an den Systembetreuer.';
+$lang['authtempfail'] = 'Benutzerüberprüfung momentan nicht möglich. Falls das Problem andauert, wenden Sie sich an den Systembetreuer.';
+$lang['i_chooselang'] = 'Wählen Sie Ihre Sprache';
+$lang['i_installer'] = 'DokuWiki Installation';
+$lang['i_wikiname'] = 'Wiki-Name';
+$lang['i_enableacl'] = 'Zugangskontrolle (ACL) aktivieren (empfohlen)';
+$lang['i_superuser'] = 'Administrator Benutzername';
+$lang['i_problems'] = 'Das Installationsprogramm hat unten aufgeführte Probleme festgestellt, die zunächst behoben werden müssen bevor Sie mit der Installation fortfahren können.';
+$lang['i_modified'] = 'Aus Sicherheitsgründen arbeitet dieses Script nur mit einer neuen, unmodifizierten DokuWiki Installation. Sie sollten entweder alle Dateien noch einmal frisch installieren oder die <a href="http://dokuwiki.org/install">Dokuwiki-Installationsanleitung</a> konsultieren.';
+$lang['i_funcna'] = 'Die PHP Funktion <code>%s</code> ist nicht verfügbar. Unter Umständen wurde sie von Ihrem Hoster deaktiviert?';
+$lang['i_phpver'] = 'Ihre PHP-Version <code>%s</code> ist niedriger als die benötigte Version <code>%s</code>. Bitte aktualisieren Sie Ihre PHP-Installation.';
+$lang['i_permfail'] = '<code>%s</code> ist nicht durch DokuWiki beschreibbar. Sie müssen die Berechtigungen dieses Ordners ändern!';
+$lang['i_confexists'] = '<code>%s</code> existiert bereits';
+$lang['i_writeerr'] = '<code>%s</code> konnte nicht erzeugt werden. Sie sollten die Verzeichnis-/Datei-Rechte überprüfen und die Datei manuell anlegen.';
+$lang['i_badhash'] = 'Unbekannte oder modifizierte dokuwiki.php (Hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - unerlaubter oder leerer Wert';
+$lang['i_success'] = 'Die Konfiguration wurde erfolgreich abgeschlossen. Sie können jetzt die install.php löschen. Ihr <a href="doku.php">neues DokuWiki</a> ist jetzt für Sie bereit.';
+$lang['i_failure'] = 'Es sind Fehler beim Schreiben der Konfigurationsdateien aufgetreten. Sie müssen diese vermutlich von Hand beheben, bevor Sie Ihr <a href="doku.php">neues DokuWiki</a> nutzen können.';
+$lang['i_policy'] = 'Anfangseinstellung für Zugangskontrolle (ACL)';
+$lang['i_pol0'] = 'Offenes Wiki (lesen, schreiben, hochladen für alle)';
+$lang['i_pol1'] = 'Öffentliches Wiki (lesen für alle, schreiben und hochladen für registrierte Nutzer)';
+$lang['i_pol2'] = 'Geschlossenes Wiki (lesen, schreiben, hochladen nur für registrierte Nutzer)';
+$lang['i_retry'] = 'Wiederholen';
+$lang['mu_intro'] = 'In diesem Bereich können Sie mehrere Dateien gleichzeitig hochladen. Benutzen Sie die Schaltfläche "Durchsuchen" um sie der Warteschlange zuzufügen. Betätigen Sie die Schaltfläche "Hochladen" um die Übertragung zu starten.';
+$lang['mu_gridname'] = 'Dateiname';
+$lang['mu_gridsize'] = 'Größe';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namensraum';
+$lang['mu_browse'] = 'Durchsuchen';
+$lang['mu_toobig'] = 'zu groß';
+$lang['mu_ready'] = 'bereit zum hochladen';
+$lang['mu_done'] = 'fertig';
+$lang['mu_fail'] = 'gescheitert';
+$lang['mu_authfail'] = 'Sitzung abgelaufen';
+$lang['mu_progress'] = '@PCT@% hochgeladen';
+$lang['mu_filetypes'] = 'Erlaubte Dateitypen';
+$lang['mu_info'] = 'Dateien hochgeladen!';
+$lang['mu_lasterr'] = 'Letzter Fehler:';
+$lang['recent_global'] = 'Im Moment sehen Sie die Änderungen im Namensraum <b>%s</b>. Sie können auch <a href="%s">die Änderungen im gesamten Wiki sehen</a>.';
+
+$lang['years'] = 'vor %d Jahren';
+$lang['months'] = 'vor %d Monaten';
+$lang['weeks'] = 'vor %d Wochen';
+$lang['days'] = 'vor %d Tagen';
+$lang['hours'] = 'vor %d Stunden';
+$lang['minutes'] = 'vor %d Minuten';
+$lang['seconds'] = 'vor %d Sekunden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt
new file mode 100644
index 000000000..6656beece
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt
@@ -0,0 +1,4 @@
+====== Seite gesperrt ======
+
+Diese Seite ist momentan von einem anderen Nutzer gesperrt. Warten Sie, bis dieser mit dem Bearbeiten fertig ist oder die Sperre abläuft.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt
new file mode 100644
index 000000000..6698da614
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt
@@ -0,0 +1,4 @@
+====== Anmelden ======
+
+Geben Sie Ihren Benutzernamen und Ihr Passwort in das Formular unten ein, um sich anzumelden. Bitte beachten Sie, dass dafür "Cookies" in den Sicherheitseinstellungen Ihres Browsers erlaubt sein müssen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt
new file mode 100644
index 000000000..fee88d4d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt
@@ -0,0 +1,17 @@
+Eine Seite in Ihrem Wiki wurde geändert oder neu angelegt. Hier sind die Details:
+
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adresse : @IPADDRESS@
+Hostname : @HOSTNAME@
+Alte Version : @OLDPAGE@
+Neue Version : @NEWPAGE@
+Zusammenfassung: @SUMMARY@
+Benutzer : @USER@
+
+@DIFF@
+
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt
new file mode 100644
index 000000000..7871c67de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt
@@ -0,0 +1,5 @@
+====== Dieses Thema existiert noch nicht ======
+
+Sie sind einem Link zu einer Seite gefolgt, die noch nicht existiert. Sie können die Seite mit dem Knopf **"[Seite anlegen]"** selbst anlegen und mit Inhalt füllen.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt
new file mode 100644
index 000000000..8a9c6927b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt
@@ -0,0 +1,4 @@
+====== Version existiert nicht ======
+
+Die angegebene Version des Dokuments wurde nicht gefunden. Benutzen Sie den **''[Ältere Versionen]''** Knopf, um eine Liste aller verfügbaren Versionen dieses Dokuments zu erhalten.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt
new file mode 100644
index 000000000..b07ae5091
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt
@@ -0,0 +1,5 @@
+====== Vorschau ======
+
+So wird Ihr Text später aussehen. Achtung: Der Text wurde noch **nicht gespeichert**!
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt
new file mode 100644
index 000000000..3aa81bf77
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt
@@ -0,0 +1,16 @@
+Hallo @FULLNAME@!
+
+Jemand hat ein neues Passwort für Ihren @TITLE@
+login auf @DOKUWIKIURL@ angefordert.
+
+Wenn Sie diese Änderung nicht angefordert haben, ignorieren Sie diese
+E-Mail einfach.
+
+Um die Anforderung zu bestätigen, folgen Sie bitte dem unten angegebenen
+Bestätigungslink.
+
+@CONFIRM@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt
new file mode 100644
index 000000000..bc011d0ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt
@@ -0,0 +1,2 @@
+Diese Seite ist nicht editierbar. Sie können den Quelltext sehen, jedoch nicht verändern. Kontaktieren Sie den Administrator, wenn Sie glauben, dass hier ein Fehler vorliegt.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt
new file mode 100644
index 000000000..c05bbae12
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt
@@ -0,0 +1,5 @@
+====== Letzte Änderungen ======
+
+Die folgenden Seiten wurden zuletzt geändert.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt
new file mode 100644
index 000000000..83684f500
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt
@@ -0,0 +1,4 @@
+====== Als neuer Nutzer registrieren ======
+
+Bitte füllen Sie alle Felder aus, um einen neuen Nutzer-Account in diesem Wiki anzulegen. Stellen Sie sicher, dass eine **gültige E-Mail-Adresse** angegeben wird - das Passwort wird an diese Adresse gesendet. Der Nutzername sollte aus einem Wort ohne Umlaute, Leer- oder Sonderzeichen bestehen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt
new file mode 100644
index 000000000..ed37a9505
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt
@@ -0,0 +1,14 @@
+Ein neuer Benutzer hat sich registriert. Hier sind die Details:
+
+Benutzername : @NEWUSER@
+Voller Name : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt
new file mode 100644
index 000000000..2ff639369
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Neues Passwort anfordern ======
+
+Füllen Sie alle Felder unten aus, um ein neues Passwort für Ihren Zugang zu erhalten. Das neue Passwort wird an Ihre gespeicherte E-Mail-Adresse geschickt. Der Benutzername sollte Ihr Wiki-Benutzername sein.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt
new file mode 100644
index 000000000..e1bafdd2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt
@@ -0,0 +1,4 @@
+====== Ältere Versionen ======
+
+Dies sind ältere Versionen des gewählten Dokuments. Um zu einer älteren Version zurückzukehren, wählen Sie die entsprechende Version aus, klicken auf **''[Diese Seite bearbeiten]''** und speichern Sie sie erneut ab.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt
new file mode 100644
index 000000000..56104551b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt
@@ -0,0 +1,7 @@
+====== Suche ======
+
+Unten sind die Ergebnisse Ihrer Suche gelistet. Falls der gesuchte Begriff nicht gefunden wurde, können Sie direkt eine neue Seite für den Suchbegriff anlegen, indem Sie auf den **''[Seite anlegen]''** Knopf drücken.
+
+===== Ergebnisse =====
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt
new file mode 100644
index 000000000..65f53c9c1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt
@@ -0,0 +1,2 @@
+**Dies ist eine alte Version des Dokuments!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt
new file mode 100644
index 000000000..0487a940a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt
@@ -0,0 +1,125 @@
+# Die Wörter dieser Liste werden bei der Indexierung ignoriert. Jedes Wort steht in einer neuen Zeile.
+# Beachten Sie beim Bearbeiten der Datei darauf, dass Sie UNIX-Zeilenumbrüche verwenden (einfacher Zeilenumbruch).
+# Wörter, die kürzer als 3 Buchstaben sind, brauchen Sie nicht in die Liste mit aufnehmen. Diese werden automatisch ignoriert.
+# Diese Liste basiert auf der folgenden: http://www.ranks.nl/stopwords/
+aber
+als
+auch
+auf
+aus
+bei
+bin
+bis
+bist
+dadurch
+daher
+darum
+das
+daß
+dass
+dein
+deine
+dem
+den
+der
+des
+dessen
+deshalb
+die
+dies
+dieser
+dieses
+doch
+dort
+durch
+ein
+eine
+einem
+einen
+einer
+eines
+euer
+eure
+für
+hatte
+hatten
+hattest
+hattet
+hier
+hinter
+ich
+ihr
+ihre
+in
+im
+ist
+jede
+jedem
+jeden
+jeder
+jedes
+jener
+jenes
+jetzt
+kann
+kannst
+können
+könnt
+machen
+mein
+meine
+mit
+muß
+mußt
+musst
+müssen
+müßt
+nach
+nachdem
+nein
+nicht
+nun
+oder
+seid
+sein
+seine
+sich
+sie
+sind
+soll
+sollen
+sollst
+sollt
+sonst
+soweit
+sowie
+und
+unser
+unsere
+unter
+vom
+von
+vor
+um
+wann
+warum
+was
+weiter
+weitere
+wenn
+wer
+werde
+werden
+werdet
+weshalb
+wie
+wieder
+wieso
+wir
+wird
+wirst
+woher
+wohin
+zum
+zur
+über
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt
new file mode 100644
index 000000000..0d90967a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt
@@ -0,0 +1,23 @@
+Hallo!
+
+Die Seite @PAGE@ im @TITLE@ Wiki wurde bearbeitet.
+Das sind die Änderungen:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Datum : @DATE@
+Benutzer : @USER@
+Ãœbersicht: @SUMMARY@
+Alte Revision: @OLDPAGE@
+Neue Revision: @NEWPAGE@
+
+Um das Abonnement für diese Seite aufzulösen, melde Sie sich im Wiki an
+@DOKUWIKIURL@, besuchen dann
+@NEWPAGE@
+und klicken auf die Taste 'Änderungen abbestellen'.
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt
new file mode 100644
index 000000000..f19dd13f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Benutzerprofil ändern ======
+
+Nur die Felder, die Sie ändern, werden aktualisiert. Alle anderen bleiben, wie sie sind. Ihren Benutzernamen können Sie jedoch nicht ändern.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt
new file mode 100644
index 000000000..757729804
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt
@@ -0,0 +1,14 @@
+Eine Datei wurde in Ihrem Wiki hochgeladen. Hier sind die Details:
+
+Datei : @MEDIA@
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adresse : @IPADDRESS@
+Hostname : @HOSTNAME@
+Größe : @SIZE@
+MIME-Typ : @MIME@
+Benutzer : @USER@
+
+--
+Diese Mail kommt vom DokuWiki auf
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt
new file mode 100644
index 000000000..14622ebc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blockiert ======
+
+Ihre Änderungen wurden nicht gespeichert, da sie ein oder mehrere nicht erlaubte Wörter enthielten. Falls Sie versucht haben sollten, das Wiki zu Spammen -- Schande über Sie! Wenn Sie glauben, dass der Eintrag zu Unrecht blockiert wurde, kontaktieren Sie bitte den Administrator des Wikis.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt
new file mode 100644
index 000000000..49e6c657b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt
@@ -0,0 +1,3 @@
+====== ΔιαχείÏιση ======
+
+ΠαÏακάτω μποÏείτε να βÏείτε μια λίστα με τις δυνατότητες διαχείÏισης στο DokuWiki
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt
new file mode 100644
index 000000000..ea00b959e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt
@@ -0,0 +1 @@
+===== ΠÏόσθετες συνδεόμενες υπομονάδες ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt
new file mode 100644
index 000000000..572f85791
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt
@@ -0,0 +1,3 @@
+====== ΣÏνδεσμοι Ï€Ïος την Ï„Ïέχουσα σελίδα ======
+
+Οι παÏακάτω σελίδες πεÏιέχουν συνδέσμους Ï€Ïος την Ï„Ïέχουσα σελίδα. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt
new file mode 100644
index 000000000..27b80b397
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt
@@ -0,0 +1,5 @@
+====== ΥπάÏχει μία νεώτεÏη έκδοση αυτής της σελίδας ======
+
+ΥπάÏχει μία νεώτεÏη έκδοση της σελίδας που Ï„Ïoποποιήσατε. Αυτό συμβαίνει εάν κάποιος άλλος χÏήστης Ï„Ïοποποίησε την ίδια σελίδα ενώ την Ï„ÏοποποιοÏσατε και εσείς.
+
+Ελέγξτε Ï€Ïοσεκτικά τις διαφοÏές που παÏουσιάζονται παÏακάτω και έπειτα αποφασίστε ποια έκδοση θα κÏατήσετε. Εάν επιλέξετε ''Αποθήκευση'', η δική σας έκδοση θα αποθηκευτεί. Εάν επιλέξετε ''ΑκÏÏωση'', η νεώτεÏη έκδοση θα διατηÏηθεί ως Ï„Ïέχουσα.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt
new file mode 100644
index 000000000..71e9a04b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt
@@ -0,0 +1,5 @@
+====== Μη επιτÏεπτή ενέÏγεια ======
+
+Συγγνώμη, αλλά δεν έχετε επαÏκή δικαιώματα για την συγκεκÏιμένη ενέÏγεια.
+
+Μήπως παÏαλείψατε να συνδεθείτε?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt
new file mode 100644
index 000000000..dde065b43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt
@@ -0,0 +1,3 @@
+====== ΣÏγκÏιση εκδόσεων ======
+
+Εδώ βλέπετε τις διαφοÏές Î¼ÎµÏ„Î±Î¾Ï Ï„Î·Ï‚ επιλεγμένης έκδοσης και της Ï„Ïέχουσας έκδοσης της σελίδας.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt
new file mode 100644
index 000000000..3bb15037f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt
@@ -0,0 +1,7 @@
+====== Î’Ïέθηκε μία αυτόματα αποθηκευμένη σελίδα ======
+
+Η τελευταία Ï„Ïοποποίηση αυτής της σελίδας δεν ολοκληÏώθηκε επιτυχώς. Η εφαÏμογή αποθήκευσε αυτόματα μία εκδοχή της σελίδας την ÏŽÏα που την Ï„ÏοποποιοÏσατε και μποÏείτε να την χÏησιμοποιήσετε για να συνεχίσετε την εÏγασία σας. ΠαÏακάτω φαίνεται αυτή η πιο Ï€Ïόσφατη αυτόματα αποθηκευμένη σελίδα.
+
+ΜποÏείτε να //επαναφέÏετε// αυτή την αυτόματα αποθηκευμένη σελίδα ως Ï„Ïέχουσα, να την //διαγÏάψετε// ή να //ακυÏώσετε// τη διαδικασία Ï„Ïοποποίησης της Ï„Ïέχουσας σελίδας.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt
new file mode 100644
index 000000000..26b52f97a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt
@@ -0,0 +1 @@
+ΤÏοποποιήστε την σελίδα **μόνο** εάν μποÏείτε να την **βελτιώσετε**. Για να κάνετε δοκιμές με ασφάλεια ή να εξοικειωθείτε με το πεÏιβάλλον χÏησιμοποιήστε το [[:playground:playground|playground]]. Î‘Ï†Î¿Ï Ï„Ïοποποιήστε την σελίδα επιλέξτε ''Αποθήκευση''. Δείτε τις [[:wiki:syntax|οδηγίες]] για την σωστή σÏνταξη.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt
new file mode 100644
index 000000000..ac6bc5a3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt
@@ -0,0 +1,2 @@
+**ΦοÏτώσατε μια παλαιότεÏη έκδοση της σελίδας!** Εάν την αποθηκεÏσετε, θα αντικαταστήσει την Ï„Ïέχουσα έκδοση.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt
new file mode 100644
index 000000000..51f1fc600
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt
@@ -0,0 +1,3 @@
+====== Κατάλογος ======
+
+Αυτός είναι ένας κατάλογος όλων των διαθέσιμων σελίδων ταξινομημένων κατά [[doku>namespaces|φακέλους]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html
new file mode 100644
index 000000000..89429d55b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html
@@ -0,0 +1,25 @@
+<p>Αυτή η σελίδα πεÏιέχει πληÏοφοÏίες που βοηθοÏν στην αÏχική εγκατάσταση και
+ÏÏθμιση της εφαÏμογής <a href="http://dokuwiki.org">Dokuwiki</a>. ΠεÏισσότεÏες
+πληÏοφοÏίες υπάÏχουν στη <a href="http://dokuwiki.org/installer">σελίδα τεκμηÏίωσης</a>
+του Î¿Î´Î·Î³Î¿Ï ÎµÎ³ÎºÎ±Ï„Î¬ÏƒÏ„Î±ÏƒÎ·Ï‚.</p>
+
+<p>Η εφαÏμογή DokuWiki χÏησιμοποιεί απλά αÏχεία για να αποθηκεÏει τις σελίδες wiki
+καθώς και πληÏοφοÏίες που σχετίζονται με αυτές (Ï€.χ. εικόνες, καταλόγους αναζήτησης,
+παλαιότεÏες εκδόσεις σελίδων, κλπ). Για να λειτουÏγεί σωστά η εφαÏμογή DokuWiki
+<strong>Ï€Ïέπει</strong> να έχει δικαιώματα εγγÏαφής στους φακέλους που φιλοξενοÏν
+αυτά τα αÏχεία. Ο οδηγός εγκατάστασης δεν έχει την δυνατότητα να παÏαχωÏήσει αυτά τα
+δικαιώματα εγγÏαφής στους σχετικοÏÏ‚ φακέλους. Ο κανονικός Ï„Ïόπος για να γίνει αυτό είναι
+είτε απευθείας σε πεÏιβάλλον γÏαμμής εντολών ή, εάν δεν έχετε τέτοια Ï€Ïόσβαση, μέσω FTP ή
+του πίνακα ελέγχου του πεÏιβάλλοντος φιλοξενίας (Ï€.χ. cPanel).</p>
+
+<p>Ο οδηγός εγκατάστασης θα Ïυθμίσει την εφαÏμογή DokuWiki ώστε να χÏησιμοποιεί
+<acronym title="access control list">ACL</acronym>, με Ï„Ïόπο ώστε ο διαχειÏιστής να
+έχει δυνατότητα εισόδου και Ï€Ïόσβαση στο Î¼ÎµÎ½Î¿Ï Î´Î¹Î±Ï‡ÎµÎ¯Ïισης της εφαÏμογής για εγκατάσταση
+επεκτάσεων, διαχείÏιση χÏηστών, διαχείÏιση δικαιωμάτων Ï€Ïόσβασης στις διάφοÏες σελίδες και
+αλλαγή των Ïυθμίσεων. Αυτό δεν είναι απαÏαίτητο για να λειτουÏγήσει η εφαÏμογή, αλλά
+κάνει την διαχείÏισή της ευκολότεÏη.</p>
+
+<p>Οι έμπειÏοι χÏήστες και οι χÏήστες με ειδικές απαιτήσεις μποÏοÏν να επισκεφθοÏν
+τις σελίδες που πεÏιέχουν λεπτομεÏείς
+<a href="http://dokuwiki.org/install">οδηγίες εγκατάστασης</a>
+και <a href="http://dokuwiki.org/config">πληÏοφοÏίες για τις Ïυθμίσεις</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php
new file mode 100644
index 000000000..7aee3161d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php
@@ -0,0 +1,243 @@
+<?php
+/**
+ * Greek language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Thanos Massias <tm@thriasio.gr>
+ * @author Αθανάσιος Îταής <homunculus@wana.gr>
+ * @author Konstantinos Koryllos <koryllos@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'ΤÏοποποίηση σελίδας';
+$lang['btn_source'] = 'ΠÏοβολή κώδικα σελίδας';
+$lang['btn_show'] = 'ΠÏοβολή σελίδας';
+$lang['btn_create'] = 'ΔημιουÏγία σελίδας';
+$lang['btn_search'] = 'Αναζήτηση';
+$lang['btn_save'] = 'Αποθήκευση';
+$lang['btn_preview'] = 'ΠÏοεπισκόπηση';
+$lang['btn_top'] = 'ΕπιστÏοφή στην κοÏυφή της σελίδας';
+$lang['btn_newer'] = '<< πλέον Ï€Ïόσφατες';
+$lang['btn_older'] = 'λιγότεÏο Ï€Ïόσφατες >>';
+$lang['btn_revs'] = 'ΠαλαιότεÏες εκδόσεις σελίδας';
+$lang['btn_recent'] = 'ΠÏόσφατες αλλαγές σελίδων';
+$lang['btn_upload'] = 'ΦόÏτωση';
+$lang['btn_cancel'] = 'ΑκÏÏωση';
+$lang['btn_index'] = 'Κατάλογος';
+$lang['btn_secedit'] = 'ΤÏοποποίηση';
+$lang['btn_login'] = 'Είσοδος χÏήστη';
+$lang['btn_logout'] = 'Έξοδος χÏήστη';
+$lang['btn_admin'] = 'ΔιαχείÏιση';
+$lang['btn_update'] = 'ΕνημέÏωση';
+$lang['btn_delete'] = 'Σβήσιμο';
+$lang['btn_back'] = 'Πίσω';
+$lang['btn_backlink'] = 'ΣÏνδεσμοι Ï€Ïος την Ï„Ïέχουσα σελίδα';
+$lang['btn_backtomedia'] = 'ΕπιστÏοφή στην επιλογή αÏχείων';
+$lang['btn_subscribe'] = 'ΕγγÏαφή σε λήψη ενημεÏώσεων σελίδας';
+$lang['btn_unsubscribe'] = 'ΔιαγÏαφή από λήψη ενημεÏώσεων σελίδας';
+$lang['btn_subscribens'] = 'ΕγγÏαφή σε λήψη ενημεÏώσεων φακέλου';
+$lang['btn_unsubscribens'] = 'ΔιαγÏαφή από λήψη ενημεÏώσεων φακέλου';
+$lang['btn_profile'] = 'ΤÏοποποίηση Ï€Ïοφίλ';
+$lang['btn_reset'] = 'ΑκÏÏωση';
+$lang['btn_resendpwd'] = 'Αποστολή νέου κωδικοÏ';
+$lang['btn_draft'] = 'ΤÏοποποίηση αυτόματα αποθηκευμένης σελίδας';
+$lang['btn_recover'] = 'ΕπαναφοÏά αυτόματα αποθηκευμένης σελίδας';
+$lang['btn_draftdel'] = 'ΔιαγÏαφή αυτόματα αποθηκευμένης σελίδας';
+$lang['btn_revert'] = 'Αποκατάσταση';
+$lang['loggedinas'] = 'Συνδεδεμένος ως';
+$lang['user'] = 'Όνομα χÏήστη';
+$lang['pass'] = 'Κωδικός';
+$lang['newpass'] = 'Îέος κωδικός';
+$lang['oldpass'] = 'Επιβεβαίωση Ï„Ïέχοντος κωδικοÏ';
+$lang['passchk'] = 'ακόμη μια φοÏά';
+$lang['remember'] = 'Απομνημόνευση στοιχείων λογαÏιασμοÏ';
+$lang['fullname'] = 'Ονοματεπώνυμο';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'ΕγγÏαφή';
+$lang['profile'] = 'ΠÏοφίλ χÏήστη';
+$lang['badlogin'] = 'Συγνώμη, το όνομα χÏήστη ή ο κωδικός ήταν λανθασμένο.';
+$lang['minoredit'] = 'Ασήμαντες αλλαγές';
+$lang['draftdate'] = 'Αυτόματη αποθήκευση Ï€ÏόχειÏης σελίδας στις';
+$lang['nosecedit'] = 'Η σελίδα Ï„Ïοποποιήθηκε στο Î¼ÎµÏ„Î±Î¾Ï ÎºÎ±Î¹ τα στοιχεία της ενότητας δεν ήταν συγχÏονισμένα, οπότε φοÏτώθηκε η πλήÏης σελίδα. ';
+$lang['regmissing'] = 'ΠÏέπει να συμπληÏώσετε όλα τα πεδία.';
+$lang['reguexists'] = 'Αυτός ο λογαÏιασμός υπάÏχει ήδη.';
+$lang['regsuccess'] = 'Ο λογαÏιασμός δημιουÏγήθηκε και ο κωδικός εστάλει με e-mail.';
+$lang['regsuccess2'] = 'Ο λογαÏιασμός δημιουÏγήθηκε.';
+$lang['regmailfail'] = 'Φαίνεται να υπάÏχει Ï€Ïόβλημα με την αποστολή του ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î¼Î­ÏƒÏ‰ e-mail. ΠαÏακαλοÏμε επικοινωνήστε μαζί μας!';
+$lang['regbadmail'] = 'Η διεÏθυνση e-mail δεν δείχνει έγκυÏη - εάν πιστεÏετε ότι αυτό είναι λάθος, επικοινωνήστε μαζί μας';
+$lang['regbadpass'] = 'Οι δÏο κωδικοί δεν είναι ίδιοι, Ï€Ïοσπαθήστε ξανά.';
+$lang['regpwmail'] = 'Ο κωδικός σας';
+$lang['reghere'] = 'Δεν έχετε λογαÏιασμό ακόμη? ΔημιουÏγήστε έναν';
+$lang['profna'] = 'Αυτό το wiki δεν υποστηÏίζει την Ï„Ïοποποίηση Ï€Ïοφίλ.';
+$lang['profnochange'] = 'Καμία αλλαγή.';
+$lang['profnoempty'] = 'Δεν επιτÏέπεται κενό όνομα χÏήστη η κενή διεÏθυνση email.';
+$lang['profchanged'] = 'Το Ï€Ïοφίλ χÏήστη Ï„Ïοποποιήθηκε επιτυχώς.';
+$lang['pwdforget'] = 'Ξεχάσατε το κωδικό σας? Αποκτήστε νέο.';
+$lang['resendna'] = 'Αυτό το wiki δεν υποστηÏίζει την εκ\' νέου αποστολή κωδικών.';
+$lang['resendpwd'] = 'Αποστολή νέων κωδικών για τον χÏήστη';
+$lang['resendpwdmissing'] = 'ΠÏέπει να συμπληÏώσετε όλα τα πεδία.';
+$lang['resendpwdnouser'] = 'Αυτός ο χÏήστης δεν υπάÏχει στα αÏχεία μας.';
+$lang['resendpwdbadauth'] = 'Αυτός ο κωδικός ενεÏγοποίησης δεν είναι έγκυÏος.';
+$lang['resendpwdconfirm'] = 'Ο σÏνδεσμος Ï€Ïος την σελίδα ενεÏγοποίησης εστάλει με e-mail.';
+$lang['resendpwdsuccess'] = 'Ο νέος σας κωδικός εστάλη με e-mail.';
+$lang['license'] = 'Εκτός εάν αναφέÏεται διαφοÏετικά, το υλικό Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… wiki διατίθεται κάτω από την ακόλουθη άδεια:';
+$lang['licenseok'] = 'Σημείωση: ΤÏοποποιώντας αυτή την σελίδα αποδέχεστε την διάθεση του Ï…Î»Î¹ÎºÎ¿Ï ÏƒÎ±Ï‚ σÏμφωνα με την ακόλουθη άδεια:';
+$lang['searchmedia'] = 'Αναζήτηση αÏχείου:';
+$lang['searchmedia_in'] = 'Αναζήτηση σε %s';
+$lang['txt_upload'] = 'Επιλέξτε αÏχείο για φόÏτωση';
+$lang['txt_filename'] = 'Επιλέξτε νέο όνομα αÏχείου (Ï€ÏοαιÏετικό)';
+$lang['txt_overwrt'] = 'Αντικατάσταση υπάÏχοντος αÏχείου';
+$lang['lockedby'] = 'ΠÏοσωÏινά κλειδωμένο από';
+$lang['lockexpire'] = 'Το κλείδωμα λήγει στις';
+$lang['willexpire'] = 'Το κλείδωμά σας για την επεξεÏγασία αυτής της σελίδας θα λήξει σε ένα λεπτό.\n Για να το ανανεώσετε χÏησιμοποιήστε την επιλογή ΠÏοεπισκόπηση.';
+$lang['notsavedyet'] = 'Οι μη αποθηκευμένες αλλαγές θα χαθοÏν.\nΘέλετε να συνεχίσετε?';
+$lang['rssfailed'] = 'Εμφανίστηκε κάποιο σφάλμα κατά την ανάγνωση Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… feed: ';
+$lang['nothingfound'] = 'Δεν βÏέθηκαν σχετικά αποτελέσματα.';
+$lang['mediaselect'] = 'Επιλογή ΑÏχείων';
+$lang['fileupload'] = 'ΦόÏτωση αÏχείου';
+$lang['uploadsucc'] = 'Επιτυχής φόÏτωση';
+$lang['uploadfail'] = 'Η μεταφόÏτωση απέτυχε. Πιθανόν αυτό να οφείλεται στις Ïυθμίσεις Ï€Ïόσβασης του αÏχείου.';
+$lang['uploadwrong'] = 'Η μεταφόÏτωση δεν έγινε δεκτή. Δεν επιτÏέπονται αÏχεία Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… Ï„Ïπου!';
+$lang['uploadexist'] = 'Το αÏχείο ήδη υπάÏχει. Δεν έγινε καμία αλλαγή.';
+$lang['uploadbadcontent'] = 'Το πεÏιεχόμενο του αÏχείου δεν ταιÏιάζει με την επέκτασή του.';
+$lang['uploadspam'] = 'Η μεταφόÏτωση ακυÏώθηκε από το φίλτÏο spam.';
+$lang['uploadxss'] = 'Η μεταφόÏτωση ακυÏώθηκε λόγω Ï€Î¹Î¸Î±Î½Î¿Ï ÎµÏ€Î¹ÎºÎ¯Î½Î´Ï…Î½Î¿Ï… πεÏιεχομένου.';
+$lang['uploadsize'] = 'Το αÏχείο ήταν Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿. (μέγιστο %s)';
+$lang['deletesucc'] = 'Το αÏχείο "%s" διαγÏάφηκε.';
+$lang['deletefail'] = 'Το αÏχείο "%s" δεν διαγÏάφηκε. Πιθανόν αυτό να οφείλεται στις Ïυθμίσεις Ï€Ïόσβασης του αÏχείου.';
+$lang['mediainuse'] = 'Το αÏχείο "%s" δεν διαγÏάφηκε - είναι ακόμα σε χÏήση.';
+$lang['namespaces'] = 'Φάκελοι';
+$lang['mediafiles'] = 'Διαθέσιμα αÏχεία σε';
+$lang['js']['searchmedia'] = 'Αναζήτηση για αÏχεία';
+$lang['js']['keepopen'] = 'Το παÏάθυÏο να μην κλείνει';
+$lang['js']['hidedetails'] = 'ΑπόκÏυψη λεπτομεÏειών';
+$lang['js']['nosmblinks'] = 'Οι σÏνδεσμοι Ï€Ïος Windows shares δουλεÏουν μόνο στον Microsoft Internet Explorer.
+ΜποÏείτε πάντα να κάνετε αντιγÏαφή και επικόλληση του συνδέσμου.';
+$lang['js']['linkwiz'] = 'Αυτόματος Οδηγός Συνδέσμων';
+$lang['js']['linkto'] = 'ΣÏνδεση σε:';
+$lang['js']['del_confirm'] = 'Îα διαγÏαφεί?';
+$lang['js']['mu_btn'] = 'ΤαυτόχÏονη φόÏτωση πολλαπλών φακέλων';
+$lang['mediausage'] = 'ΧÏησιμοποιήστε την ακόλουθη σÏνταξη για να παÏαθέσετε αυτό το αÏχείο:';
+$lang['mediaview'] = 'Κανονική Ï€Ïοβολή αÏχείου';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'ΦοÏτώστε ένα αÏχείο στον Ï„Ïέχοντα φάκελο. Για δημιουÏγία υπο-φακέλων, Ï€Ïοσθέστε τους Ï€Ïιν από το όνομα του αÏχείου, στο πεδίο "Αποθήκευση ως", χÏησιμοποιώντας άνω-κάτω τελείες ως διαχωÏιστικά.';
+$lang['mediaextchange'] = 'Η επέκταση του αÏχείου Ï„Ïοποποιήθηκε από .%s σε .%s!';
+$lang['reference'] = 'ΑναφοÏές Ï€Ïος';
+$lang['ref_inuse'] = 'Το αÏχείο δεν μποÏεί να διαγÏαφεί, επειδή είναι ακόμη σε χÏήση από τις ακόλουθες σελίδες:';
+$lang['ref_hidden'] = 'ΜεÏικές αναφοÏές βÏίσκονται σε σελίδες που δεν έχετε δικαίωμα να διαβάσετε';
+$lang['hits'] = 'ΑναφοÏές';
+$lang['quickhits'] = 'Σχετικές σελίδες';
+$lang['toc'] = 'Πίνακας ΠεÏιεχομένων';
+$lang['current'] = 'Ï„Ïέχουσα';
+$lang['yours'] = 'Η έκδοσή σας';
+$lang['diff'] = 'Ï€Ïοβολή διαφοÏών με την Ï„Ïέχουσα έκδοση';
+$lang['diff2'] = 'ΠÏοβολή διαφοÏών Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ επιλεγμένων εκδόσεων';
+$lang['line'] = 'ΓÏαμμή';
+$lang['breadcrumb'] = 'ΙστοÏικό';
+$lang['youarehere'] = 'Είστε εδώ';
+$lang['lastmod'] = 'Τελευταία Ï„Ïοποποίηση';
+$lang['by'] = 'από';
+$lang['deleted'] = 'διαγÏάφηκε';
+$lang['created'] = 'δημιουÏγήθηκε';
+$lang['restored'] = 'παλαιότεÏη έκδοση επαναφέÏθηκε';
+$lang['external_edit'] = 'εξωτεÏική Ï„Ïοποποίηση';
+$lang['summary'] = 'ΕπεξεÏγασία σÏνοψης';
+$lang['noflash'] = 'Το <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> απαιτείται για την Ï€Ïοβολή Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… στοιχείου.';
+$lang['download'] = 'Λήψη Κώδικα';
+$lang['mail_newpage'] = 'σελίδα Ï€Ïοστέθηκε:';
+$lang['mail_changed'] = 'σελίδα Ï„Ïοποποιήθηκε:';
+$lang['mail_new_user'] = 'νέος χÏήστης:';
+$lang['mail_upload'] = 'αÏχείο φοÏτώθηκε:';
+$lang['qb_bold'] = 'Έντονο Κείμενο';
+$lang['qb_italic'] = 'Πλάγιο Κείμενο';
+$lang['qb_underl'] = 'ΥπογÏαμμισμένο Κείμενο';
+$lang['qb_code'] = 'Κείμενο κώδικα';
+$lang['qb_strike'] = 'ΔιαγÏαμμισμένο Κείμενο';
+$lang['qb_h1'] = 'Κεφαλίδα 1ου Επιπέδου';
+$lang['qb_h2'] = 'Κεφαλίδα 2ου Επιπέδου';
+$lang['qb_h3'] = 'Κεφαλίδα 3ου Επιπέδου';
+$lang['qb_h4'] = 'Κεφαλίδα 4ου Επιπέδου';
+$lang['qb_h5'] = 'Κεφαλίδα 5ου Επιπέδου';
+$lang['qb_h'] = 'Κεφαλίδα';
+$lang['qb_hs'] = 'Επιλογή Κεφαλίδας';
+$lang['qb_link'] = 'ΕσωτεÏικός ΣÏνδεσμος';
+$lang['qb_extlink'] = 'ΕξωτεÏικός ΣÏνδεσμος';
+$lang['qb_hr'] = 'ΔιαχωÏιστική ΓÏαμμή';
+$lang['qb_ol'] = 'ΑÏιθμημένη Λίστα';
+$lang['qb_ul'] = 'Λίστα';
+$lang['qb_media'] = 'ΠÏοσθήκη ΑÏχείων';
+$lang['qb_sig'] = 'ΠÏοσθήκη ΥπογÏαφής';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Ειδικοί ΧαÏακτήÏες';
+$lang['admin_register'] = 'ΠÏοσθήκη νέου χÏήστη';
+$lang['metaedit'] = 'ΤÏοποποίηση metadata';
+$lang['metasaveerr'] = 'Η αποθήκευση των metadata απέτυχε';
+$lang['metasaveok'] = 'Επιτυχής αποθήκευση metadata';
+$lang['img_backto'] = 'ΕπιστÏοφή σε';
+$lang['img_title'] = 'Τίτλος';
+$lang['img_caption'] = 'Λεζάντα';
+$lang['img_date'] = 'ΗμεÏομηνία';
+$lang['img_fname'] = 'Όνομα αÏχείου';
+$lang['img_fsize'] = 'Μέγεθος';
+$lang['img_artist'] = 'Καλλιτέχνης';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords'] = 'Λέξεις-κλειδιά';
+$lang['subscribe_success'] = 'ΠÏοσθήκη %s στην λίστα συνδÏομητών %s';
+$lang['subscribe_error'] = 'Αποτυχία Ï€Ïοσθήκης %s στην λίστα συνδÏομητών %s';
+$lang['subscribe_noaddress'] = 'Δεν έχετε δηλώσει e-mail διεÏθυνση - δεν μποÏείτε να γÏαφτείτε στην λίστα συνδÏομητών.';
+$lang['unsubscribe_success'] = 'ΔιαγÏαφή %s από την λίστα συνδÏομητών %s';
+$lang['unsubscribe_error'] = 'Αποτυχία διαγÏαφής %s από την λίστα συνδÏομητών %s';
+$lang['authmodfailed'] = 'Κακή ÏÏθμιση λίστας χÏηστών. ΠαÏακαλοÏμε ενημεÏώστε τον διαχειÏιστή του wiki.';
+$lang['authtempfail'] = 'Η είσοδος χÏηστών δεν λειτουÏγεί αυτή την στιγμή. Εάν αυτό διαÏκεί για Ï€Î¿Î»Ï Ï‡Ïόνο, παÏακαλοÏμε ενημεÏώστε τον διαχειÏιστή του wiki.';
+$lang['i_chooselang'] = 'Επιλογή γλώσσας';
+$lang['i_installer'] = 'Οδηγός εγκατάστασης DokuWiki';
+$lang['i_wikiname'] = 'Ονομασία wiki';
+$lang['i_enableacl'] = 'ΕνεÏγοποίηση Λίστας Δικαιωμάτων ΠÏόσβασης - ACL (συνιστάται)';
+$lang['i_superuser'] = 'ΔιαχειÏιστής';
+$lang['i_problems'] = 'Ο οδηγός εγκατάστασης συνάντησε τα Ï€Ïοβλήματα που αναφέÏονται παÏακάτω. Η εγκατάσταση δεν θα ολοκληÏωθεί επιτυχώς μέχÏι να επιλυθοÏν αυτά τα Ï€Ïοβλήματα.';
+$lang['i_modified'] = 'Για λόγους ασφαλείας, ο οδηγός εγκατάστασης λειτουÏγεί μόνο με νέες και μη Ï„Ïοποποιημένες εγκαταστάσεις Dokuwiki.
+ΠÏέπει είτε να κάνετε νέα εγκατάσταση, χÏησιμοποιώντας το αÏχικό πακέτο εγκατάστασης, ή να συμβουλευτείτε τις <a href="http://dokuwiki.org/install">οδηγίες εγκατάστασης της εφαÏμογής</a>.';
+$lang['i_funcna'] = 'Η λειτουÏγία <code>%s</code> της PHP δεν είναι διαθέσιμη. Πιθανόν να είναι απενεÏγοποιημένη στις Ïυθμίσεις έναÏξης της PHP';
+$lang['i_phpver'] = 'Η έκδοση <code>%s</code> της PHP που έχετε είναι παλαιότεÏη της απαιτοÏμενης <code>%s</code>. ΠÏέπει να αναβαθμίσετε την PHP.';
+$lang['i_permfail'] = 'Ο φάκελος <code>%s</code> δεν είναι εγγÏάψιμος από την εφαÏμογή DokuWiki. ΠÏέπει να διοÏθώσετε τα δικαιώματα Ï€Ïόσβασης Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… φακέλου!';
+$lang['i_confexists'] = '<code>%s</code> υπάÏχει ήδη';
+$lang['i_writeerr'] = 'Δεν είναι δυνατή η δημιουÏγία του <code>%s</code>. ΠÏέπει να διοÏθώσετε τα δικαιώματα Ï€Ïόσβασης Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… φακέλου/αÏχείου και να δημιουÏγήσετε το αÏχείο χειÏοκίνητα!';
+$lang['i_badhash'] = 'Μη αναγνωÏίσιμο ή Ï„Ïοποποιημένο αÏχείο dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - λάθος ή ανÏπαÏκτη τιμή';
+$lang['i_success'] = 'Η εγκατάσταση ολοκληÏώθηκε επιτυχώς. ΜποÏείτε πλέον να διαγÏάψετε το αÏχείο install.php. Συνεχίστε στο <a href="doku.php">νέο σας DokuWiki</a>.';
+$lang['i_failure'] = 'Εμφανίστηκαν κάποια Ï€Ïοβλήματα στη διαδικασία ανανέωσης των αÏχείων Ïυθμίσεων. Πιθανόν να χÏειάζεται να τα Ï„Ïοποποιήσετε χειÏοκίνητα ώστε να μποÏείτε να χÏησιμοποιήσετε το <a href="doku.php">νέο σας DokuWiki</a>.';
+$lang['i_policy'] = 'ΑÏχική πολιτική Λίστας Δικαιωμάτων ΠÏόσβασης - ACL';
+$lang['i_pol0'] = 'Ανοιχτό Wiki (όλοι μποÏοÏν να διαβάσουν ή να δημιουÏγήσουν/Ï„Ïοποποιήσουν σελίδες και να μεταφοÏτώσουν αÏχεία)';
+$lang['i_pol1'] = 'Δημόσιο Wiki (όλοι μποÏοÏν να διαβάσουν σελίδες αλλά μόνο οι εγγεγÏαμμένοι χÏήστες μποÏοÏν να δημιουÏγήσουν/Ï„Ïοποποιήσουν σελίδες και να μεταφοÏτώσουν αÏχεία)';
+$lang['i_pol2'] = 'Κλειστό Wiki (μόνο οι εγγεγÏαμμένοι χÏήστες μποÏοÏν να διαβάσουν ή να δημιουÏγήσουν/Ï„Ïοποποιήσουν σελίδες και να μεταφοÏτώσουν αÏχεία)';
+$lang['i_retry'] = 'Îέα Ï€Ïοσπάθεια';
+$lang['mu_intro'] = 'Εδώ μποÏείτε να φοÏτώσετε ταυτόχÏονα πολλαπλά αÏχεία. Πατήστε στο κουμπί Ï€Ïοεπισκόπησης για να τα Ï€Ïοσθέσετε στη λίστα. Πατήστε στο κουμπί μεταφόÏτωσης όταν έχετε τελειώσει.';
+$lang['mu_gridname'] = 'Όνομα αÏχείου';
+$lang['mu_gridsize'] = 'Μέγεθος';
+$lang['mu_gridstat'] = 'Κατάσταση';
+$lang['mu_namespace'] = 'Φάκελος';
+$lang['mu_browse'] = 'Επισκόπηση';
+$lang['mu_toobig'] = 'υπεÏβολικά μεγάλο';
+$lang['mu_ready'] = 'έτοιμο για φόÏτωση';
+$lang['mu_done'] = 'ολοκληÏώθηκε';
+$lang['mu_fail'] = 'απέτυχε';
+$lang['mu_authfail'] = 'η συνεδÏία έληξε';
+$lang['mu_progress'] = '@PCT@% φοÏτώθηκε';
+$lang['mu_filetypes'] = 'ΕπιτÏεπτοί Ï„Ïποι αÏχείων';
+$lang['mu_info'] = 'τα αÏχεία ανέβηκαν.';
+$lang['mu_lasterr'] = 'Τελευταίο σφάλμα:';
+$lang['recent_global'] = 'Βλέπετε τις αλλαγές εντός του φακέλου <b>%s</b>. ΜποÏείτε επίσης να <a href="%s">δείτε τις Ï€Ïόσφατες αλλαγές σε όλο το wiki</a>.';
+$lang['years'] = 'Ï€Ïιν από %d χÏόνια';
+$lang['months'] = 'Ï€Ïιν από %d μήνες';
+$lang['weeks'] = 'Ï€Ïιν από %d εβδομάδες';
+$lang['days'] = 'Ï€Ïιν από %d ημέÏες';
+$lang['hours'] = 'Ï€Ïιν από %d ÏŽÏες';
+$lang['minutes'] = 'Ï€Ïιν από %d λεπτά';
+$lang['seconds'] = 'Ï€Ïιν από %d δευτεÏόλεπτα';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt
new file mode 100644
index 000000000..d2f542c19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt
@@ -0,0 +1,4 @@
+====== Κλειδωμένη σελίδα ======
+
+Αυτή η σελίδα είναι Ï€Ïος το παÏόν δεσμευμένη για Ï„Ïοποποίηση από άλλον χÏήστη. Θα Ï€Ïέπει να πεÏιμένετε μέχÏι ο συγκεκÏιμένος χÏήστης να τελειώσει την Ï„Ïοποποίηση ή να εκπνεÏσει το χÏονικό ÏŒÏιο για το σχετικό κλείδωμα.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt
new file mode 100644
index 000000000..3839b7279
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt
@@ -0,0 +1,3 @@
+====== Είσοδος χÏήστη ======
+
+Αυτή την στιγμή δεν έχετε συνδεθεί ως χÏήστης! Για να συνδεθείτε, εισάγετε τα στοιχεία σας στην παÏακάτω φόÏμα. ΠÏέπει να έχετε ενεÏγοποιήσει τα cookies στον φυλλομετÏητή σας.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt
new file mode 100644
index 000000000..a5059ca4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt
@@ -0,0 +1,17 @@
+Μία σελίδα Ï€Ïοστέθηκε ή Ï„Ïοποποιήθηκε στο DokuWiki σας.
+Αυτά είναι τα αντίστοιχα στοιχεία:
+
+ΗμεÏομηνία : @DATE@
+ΦυλλομετÏητής : @BROWSER@
+IP-ΔιεÏθυνση : @IPADDRESS@
+Όνομα υπολογιστή: @HOSTNAME@
+Παλιά έκδοση : @OLDPAGE@
+Îέα έκδοση : @NEWPAGE@
+ΣÏνοψη : @SUMMARY@
+ΧÏήστης : @USER@
+
+@DIFF@
+
+--
+Αυτό το e-mail δημιουÏγήθηκε αυτόματα από την εφαÏμογή DokuWiki στην διεÏθυνση
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt
new file mode 100644
index 000000000..e8d65d6e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt
@@ -0,0 +1,3 @@
+====== Αυτή η σελίδα δεν υπάÏχει ακόμη ======
+
+Η σελίδα που ζητάτε δεν υπάÏχει ακόμη. Εάν όμως έχετε επαÏκή δικαιώματα, μποÏείτε να την δημιουÏγήσετε επιλέγοντας ''ΔημιουÏγία σελίδας''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt
new file mode 100644
index 000000000..9ce347948
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt
@@ -0,0 +1,4 @@
+====== Δεν υπάÏχει τέτοια έκδοση ======
+
+Η έκδοση που αναζητήσατε δεν υπάÏχει. Επιλέξτε ''ΠαλαιότεÏες εκδόσεις σελίδας'' για να δείτε την λίστα με τις παλαιότεÏες εκδόσεις της Ï„Ïέχουσας σελίδας.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt
new file mode 100644
index 000000000..f6709a441
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt
@@ -0,0 +1,4 @@
+====== ΠÏοεπισκόπηση ======
+
+Αυτή είναι μια Ï€Ïοεπισκόπηση του πως θα δείχνει η σελίδα. Θυμηθείτε: Οι αλλαγές σας **δεν έχουν αποθηκευθεί** ακόμη!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt
new file mode 100644
index 000000000..03f408819
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt
@@ -0,0 +1,14 @@
+Γεια σας @FULLNAME@!
+
+Κάποιος ζήτησε τη δημιουÏγία νέου ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î³Î¹Î± τον λογαÏιασμό @TITLE@
+που διατηÏείτε στο @DOKUWIKIURL@
+
+Εάν δεν ζητήσατε εσείς την δημιουÏγία νέου ÎºÏ‰Î´Î¹ÎºÎ¿Ï Î±Ï€Î»Î¬ αγνοήστε αυτό το e-mail.
+
+Εάν όντως εσείς ζητήσατε την δημιουÏγία νέου κωδικοÏ, ακολουθήστε τον παÏακάτω σÏνδεσμο για να το επιβεβαιώσετε.
+
+@CONFIRM@
+
+--
+Αυτό το e-mail δημιουÏγήθηκε αυτόματα από την εφαÏμογή DokuWiki στην διεÏθυνση
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt
new file mode 100644
index 000000000..2d43c28fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt
@@ -0,0 +1 @@
+ΜποÏείτε μόνο να διαβάσετε αυτή την σελίδα και όχι να την Ï„Ïοποποιήσετε. Εάν πιστεÏετε ότι αυτό δεν είναι σωστό, απευθυνθείτε στον διαχειÏιστή της εφαÏμογής.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt
new file mode 100644
index 000000000..cc8051581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt
@@ -0,0 +1,3 @@
+====== ΠÏόσφατες αλλαγές σελίδων ======
+
+Οι παÏακάτω σελίδες Ï„Ïοποποιήθηκαν Ï€Ïόσφατα:
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt
new file mode 100644
index 000000000..15d64cba3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt
@@ -0,0 +1,3 @@
+====== ΕγγÏαφή νέου χÏήστη ======
+
+ΣυμπληÏώστε όλα τα παÏακάτω πεδία για να δημιουÏγήσετε ένα νέο λογαÏιασμό σε αυτό το wiki. ΠÏέπει να δώσετε μια **υπαÏκτή e-mail διεÏθυνση** - ο κωδικός σας θα σας αποσταλεί σε αυτήν. Το όνομα χÏήστη θα Ï€Ïέπει να πληÏεί τις ίδιες απαιτήσεις ονόματος που ισχÏουν και για τους [[doku>pagename|φακέλους]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt
new file mode 100644
index 000000000..5d516ee31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt
@@ -0,0 +1,14 @@
+Ένας νέος χÏήστης εγγÏάφηκε. Αυτές είναι οι λεπτομέÏειες:
+
+ΧÏήστης : @NEWUSER@
+Όνομα : @NEWNAME@
+e-mail : @NEWEMAIL@
+
+ΗμεÏομηνία : @DATE@
+ΦυλλομετÏητής : @BROWSER@
+IP-ΔιεÏθυνση : @IPADDRESS@
+Όνομα υπολογιστή: @HOSTNAME@
+
+--
+Αυτό το e-mail δημιουÏγήθηκε αυτόματα από την εφαÏμογή DokuWiki στην διεÏθυνση
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt
new file mode 100644
index 000000000..2b91ed017
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Αποστολή νέου ÎºÏ‰Î´Î¹ÎºÎ¿Ï ======
+
+ΣυμπληÏώστε όλα τα παÏακάτω πεδία για να λάβετε ένα νέο κωδικό για τον λογαÏιασμό σας σε αυτό το wiki. Ο νέος κωδικός σας θα σταλεί στην e-mail διεÏθυνση που έχετε ήδη δηλώσει. Το όνομα Ï€Ïέπει να είναι αυτό που ισχÏει για τον λογαÏιασμό σας σε αυτό το wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt
new file mode 100644
index 000000000..7689c3b2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt
@@ -0,0 +1,3 @@
+====== ΠαλαιότεÏες εκδόσεις σελίδας ======
+
+Οι παÏακάτω είναι παλαιότεÏες εκδόσεις της Ï„Ïέχουσας σελίδας. Εάν θέλετε να αντικαταστήσετε την Ï„Ïέχουσα σελίδα με κάποια από τις παλαιότεÏες εκδόσεις της, επιλέξτε την σχετική έκδοση, επιλέξτε ''ΤÏοποποίηση σελίδας'', κάνετε τυχόν αλλαγές και αποθηκεÏστε την.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt
new file mode 100644
index 000000000..87f396292
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt
@@ -0,0 +1,5 @@
+====== Αναζήτηση ======
+
+Τα αποτελέσματα της αναζήτησής σας ακολουθοÏν.
+
+===== Αποτελέσματα ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt
new file mode 100644
index 000000000..212245420
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt
@@ -0,0 +1,2 @@
+**Αυτή είναι μια παλαιότεÏη έκδοση της σελίδας!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt
new file mode 100644
index 000000000..bc6eb48ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt
@@ -0,0 +1,29 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt
new file mode 100644
index 000000000..2963ef348
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt
@@ -0,0 +1,24 @@
+Γειa σας!
+
+Η σελίδα @PAGE@ στο wiki @TITLE@ Ï„Ïοποποιήθηκε.
+Αυτές είναι οι διαφοÏές σε σχέση με την Ï€ÏοηγοÏμενη έκδοση:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+ΗμεÏομηνία: @DATE@
+ΧÏήστης: @USER@
+ΠεÏίληψη Ï„Ïοποποίησης: @SUMMARY@
+Παλιά έκδοση: @OLDPAGE@
+Îέα έκδοση: @NEWPAGE@
+
+Για να πάψετε να λαμβάνετε τέτοια ενημεÏωτικά e-mails,
+επισκεφτείτε το wiki στο
+@DOKUWIKIURL@ δείτε την σελίδα
+@NEWPAGE@
+και επιλέξτε 'ΔιαγÏαφή από λήψη ενημεÏώσεων'.
+
+--
+Αυτό το e-mail δημιουÏγήθηκε αυτόματα από την εφαÏμογή DokuWiki στην διεÏθυνση
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt
new file mode 100644
index 000000000..ccb9596b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt
@@ -0,0 +1,3 @@
+====== ΤÏοποποίηση Ï€Ïοφίλ ======
+
+ΤÏοποποιήστε **μόνο** τα πεδία που θέλετε να αλλάξετε. Δεν μποÏείτε να αλλάξετε το πεδίο ''Όνομα''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt
new file mode 100644
index 000000000..52d2f1f53
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt
@@ -0,0 +1,15 @@
+Ένα αÏχείο φοÏτώθηκε στο DokuWiki σας.
+Αυτά είναι τα αντίστοιχα στοιχεία:
+
+ΑÏχείο : @MEDIA@
+ΗμεÏομηνία : @DATE@
+ΦυλλομετÏητής : @BROWSER@
+IP-ΔιεÏθυνση : @IPADDRESS@
+Όνομα υπολογιστή: @HOSTNAME@
+Μέγεθος : @SIZE@
+MIME Type : @MIME@
+ΧÏήστης : @USER@
+
+--
+Αυτό το e-mail δημιουÏγήθηκε αυτόματα από την εφαÏμογή DokuWiki στην διεÏθυνση
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt
new file mode 100644
index 000000000..b54e8ef77
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt
@@ -0,0 +1,4 @@
+====== Εντοπίστηκε SPAM ======
+
+Οι αλλαγές σας **δεν** αποθηκεÏτηκαν επειδή βÏέθηκε τουλάχιστον μία μη αποδεκτή λέξη. Εάν Ï€Ïοσπαθήσατε να Ï€Ïοσθέσετε spam σε αυτό το wiki -- κακώς! Εάν πιστεÏετε ότι αυτό δεν είναι σωστό, απευθυνθείτε στον διαχειÏιστή της εφαÏμογής.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt
new file mode 100644
index 000000000..cfd21b217
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Below you can find a list of administrative tasks available in DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt
new file mode 100644
index 000000000..3ec46cf4e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt
@@ -0,0 +1,2 @@
+===== Additional Plugins =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt
new file mode 100644
index 000000000..5b40b84ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt
@@ -0,0 +1,4 @@
+====== Backlinks ======
+
+This is a list of pages that seem to link back to the current page.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt
new file mode 100644
index 000000000..624f17b21
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt
@@ -0,0 +1,6 @@
+====== A newer version exists ======
+
+A newer version of the document you edited exists. This happens when another user changed the document while you were editing it.
+
+Examine the differences shown below thoroughly, then decide which version to keep. If you choose ''save'', your version will be saved. Hit ''cancel'' to keep the current version.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt
new file mode 100644
index 000000000..3ac72820c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt
@@ -0,0 +1,4 @@
+====== Permission Denied ======
+
+Sorry, you don't have enough rights to continue. Perhaps you forgot to login?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt
new file mode 100644
index 000000000..934534d42
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt
@@ -0,0 +1,4 @@
+====== Differences ======
+
+This shows you the differences between two versions of the page.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt
new file mode 100644
index 000000000..e84d34a5b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt
@@ -0,0 +1,6 @@
+====== Draft file found ======
+
+Your last edit session on this page was not completed correctly. DokuWiki automatically saved a draft during your work which you may now use to continue your editing. Below you can see the data that was saved from your last session.
+
+Please decide if you want to //recover// your lost edit session, //delete// the autosaved draft or //cancel// the editing process.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt
new file mode 100644
index 000000000..48c9c296d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt
@@ -0,0 +1,2 @@
+Edit the page and hit ''Save''. See [[wiki:syntax]] for Wiki syntax. Please edit the page only if you can **improve** it. If you want to test some things, learn to make your first steps on the [[playground:playground|playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt
new file mode 100644
index 000000000..638216b07
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt
@@ -0,0 +1,2 @@
+**You've loaded an old revision of the document!** If you save it, you will create a new version with this data.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt
new file mode 100644
index 000000000..5adbfd898
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+This is an index over all available pages ordered by [[doku>namespaces|namespaces]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html
new file mode 100644
index 000000000..0f94839a6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html
@@ -0,0 +1,24 @@
+<p>This page assists in the first time installation and configuration of
+<a href="http://dokuwiki.org">Dokuwiki</a>. More info on this
+installer is available on it's own
+<a href="http://dokuwiki.org/installer">documentation page</a>.</p>
+
+<p>DokuWiki uses ordinary files for the storage of wiki pages and other
+information associated with those pages (e.g. images, search indexes, old
+revisions, etc). In order to operate successfully DokuWiki
+<strong>must</strong> have write access to the directories that hold those
+files. This installer is not capable of setting up directory permissions. That
+normally needs to be done directly on a command shell or if you are using hosting,
+through FTP or your hosting control panel (e.g. cPanel).</p>
+
+<p>This installer will setup your DokuWiki configuration for
+<acronym title="access control list">ACL</acronym>, which in turn allows administrator
+login and access to DokuWiki's admin menu for installing plugins, managing
+users, managing access to wiki pages and alteration of configuration settings.
+It isn't required for DokuWiki to operate, however it will make Dokuwiki easier
+to administer.</p>
+
+<p>Experienced users or users with special setup requirements should use these links
+for details concerning
+<a href="http://dokuwiki.org/install">installation instructions</a>
+and <a href="http://dokuwiki.org/config">configuration settings</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php
new file mode 100644
index 000000000..cf5173d05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php
@@ -0,0 +1,280 @@
+<?php
+/**
+ * english language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';//&ldquo;
+$lang['doublequoteclosing'] = 'â€';//&rdquo;
+$lang['singlequoteopening'] = '‘';//&lsquo;
+$lang['singlequoteclosing'] = '’';//&rsquo;
+$lang['apostrophe'] = '’';//&rsquo;
+
+$lang['btn_edit'] = 'Edit this page';
+$lang['btn_source'] = 'Show pagesource';
+$lang['btn_show'] = 'Show page';
+$lang['btn_create'] = 'Create this page';
+$lang['btn_search'] = 'Search';
+$lang['btn_save'] = 'Save';
+$lang['btn_preview']= 'Preview';
+$lang['btn_top'] = 'Back to top';
+$lang['btn_newer'] = '<< more recent';
+$lang['btn_older'] = 'less recent >>';
+$lang['btn_revs'] = 'Old revisions';
+$lang['btn_recent'] = 'Recent changes';
+$lang['btn_upload'] = 'Upload';
+$lang['btn_cancel'] = 'Cancel';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit']= 'Edit';
+$lang['btn_login'] = 'Login';
+$lang['btn_logout'] = 'Logout';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Update';
+$lang['btn_delete'] = 'Delete';
+$lang['btn_back'] = 'Back';
+$lang['btn_backlink'] = "Backlinks";
+$lang['btn_backtomedia'] = 'Back to Mediafile Selection';
+$lang['btn_subscribe'] = 'Subscribe Page Changes';
+$lang['btn_unsubscribe'] = 'Unsubscribe Page Changes';
+$lang['btn_subscribens'] = 'Subscribe Namespace Changes';
+$lang['btn_unsubscribens'] = 'Unsubscribe Namespace Changes';
+$lang['btn_profile'] = 'Update Profile';
+$lang['btn_reset'] = 'Reset';
+$lang['btn_resendpwd'] = 'Send new password';
+$lang['btn_draft'] = 'Edit draft';
+$lang['btn_recover'] = 'Recover draft';
+$lang['btn_draftdel'] = 'Delete draft';
+$lang['btn_revert'] = 'Restore';
+
+$lang['loggedinas'] = 'Logged in as';
+$lang['user'] = 'Username';
+$lang['pass'] = 'Password';
+$lang['newpass'] = 'New password';
+$lang['oldpass'] = 'Confirm current password';
+$lang['passchk'] = 'once again';
+$lang['remember'] = 'Remember me';
+$lang['fullname'] = 'Real name';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Register';
+$lang['profile'] = 'User Profile';
+$lang['badlogin'] = 'Sorry, username or password was wrong.';
+$lang['minoredit'] = 'Minor Changes';
+$lang['draftdate'] = 'Draft autosaved on'; // full dformat date will be added
+$lang['nosecedit'] = 'The page was changed in the meantime, section info was out of date loaded full page instead.';
+
+$lang['regmissing'] = 'Sorry, you must fill in all fields.';
+$lang['reguexists'] = 'Sorry, a user with this login already exists.';
+$lang['regsuccess'] = 'The user has been created and the password was sent by email.';
+$lang['regsuccess2']= 'The user has been created.';
+$lang['regmailfail']= 'Looks like there was an error on sending the password mail. Please contact the admin!';
+$lang['regbadmail'] = 'The given email address looks invalid - if you think this is an error, contact the admin';
+$lang['regbadpass'] = 'The two given passwords are not identical, please try again.';
+$lang['regpwmail'] = 'Your DokuWiki password';
+$lang['reghere'] = 'You don\'t have an account yet? Just get one';
+
+$lang['profna'] = 'This wiki does not support profile modification';
+$lang['profnochange'] = 'No changes, nothing to do.';
+$lang['profnoempty'] = 'An empty name or email address is not allowed.';
+$lang['profchanged'] = 'User profile successfully updated.';
+
+$lang['pwdforget'] = 'Forgotten your password? Get a new one';
+$lang['resendna'] = 'This wiki does not support password resending.';
+$lang['resendpwd'] = 'Send new password for';
+$lang['resendpwdmissing'] = 'Sorry, you must fill in all fields.';
+$lang['resendpwdnouser'] = 'Sorry, we can\'t find this user in our database.';
+$lang['resendpwdbadauth'] = 'Sorry, this auth code is not valid. Make sure you used the complete confirmation link.';
+$lang['resendpwdconfirm'] = 'A confirmation link has been sent by email.';
+$lang['resendpwdsuccess'] = 'Your new password has been sent by email.';
+
+$lang['license'] = 'Except where otherwise noted, content on this wiki is licensed under the following license:';
+$lang['licenseok'] = 'Note: By editing this page you agree to license your content under the following license:';
+
+$lang['searchmedia'] = 'Search file name:';
+$lang['searchmedia_in'] = 'Search in %s';
+$lang['txt_upload'] = 'Select file to upload';
+$lang['txt_filename'] = 'Upload as (optional)';
+$lang['txt_overwrt'] = 'Overwrite existing file';
+$lang['lockedby'] = 'Currently locked by';
+$lang['lockexpire'] = 'Lock expires at';
+$lang['willexpire'] = 'Your lock for editing this page is about to expire in a minute.\nTo avoid conflicts use the preview button to reset the locktimer.';
+
+$lang['notsavedyet'] = 'Unsaved changes will be lost.\nReally continue?';
+$lang['rssfailed'] = 'An error occurred while fetching this feed: ';
+$lang['nothingfound']= 'Nothing was found.';
+
+$lang['mediaselect'] = 'Media Files';
+$lang['fileupload'] = 'Media File Upload';
+$lang['uploadsucc'] = 'Upload successful';
+$lang['uploadfail'] = 'Upload failed. Maybe wrong permissions?';
+$lang['uploadwrong'] = 'Upload denied. This file extension is forbidden!';
+$lang['uploadexist'] = 'File already exists. Nothing done.';
+$lang['uploadbadcontent'] = 'The uploaded content did not match the %s file extension.';
+$lang['uploadspam'] = 'The upload was blocked by the spam blacklist.';
+$lang['uploadxss'] = 'The upload was blocked for possibly malicious content.';
+$lang['uploadsize'] = 'The uploaded file was too big. (max. %s)';
+$lang['deletesucc'] = 'The file "%s" has been deleted.';
+$lang['deletefail'] = '"%s" couldn\'t be deleted - check permissions.';
+$lang['mediainuse'] = 'The file "%s" hasn\'t been deleted - it is still in use.';
+$lang['namespaces'] = 'Namespaces';
+$lang['mediafiles'] = 'Available files in';
+
+$lang['js']['searchmedia'] = 'Search for files';
+$lang['js']['keepopen'] = 'Keep window open on selection';
+$lang['js']['hidedetails'] = 'Hide Details';
+$lang['mediausage'] = 'Use the following syntax to reference this file:';
+$lang['mediaview'] = 'View original file';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Upload a file to the current namespace here. To create subnamespaces, prepend them to your "Upload as" filename separated by colons.';
+$lang['mediaextchange'] = 'Filextension changed from .%s to .%s!';
+
+$lang['reference'] = 'References for';
+$lang['ref_inuse'] = 'The file can\'t be deleted, because it\'s still used by the following pages:';
+$lang['ref_hidden'] = 'Some references are on pages you don\'t have permission to read';
+
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Matching pagenames';
+$lang['toc'] = 'Table of Contents';
+$lang['current'] = 'current';
+$lang['yours'] = 'Your Version';
+$lang['diff'] = 'Show differences to current revisions';
+$lang['diff2'] = 'Show differences between selected revisions';
+$lang['line'] = 'Line';
+$lang['breadcrumb'] = 'Trace';
+$lang['youarehere'] = 'You are here';
+$lang['lastmod'] = 'Last modified';
+$lang['by'] = 'by';
+$lang['deleted'] = 'removed';
+$lang['created'] = 'created';
+$lang['restored'] = 'old revision restored';
+$lang['external_edit'] = 'external edit';
+$lang['summary'] = 'Edit summary';
+$lang['noflash'] = 'The <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> is needed to display this content.';
+$lang['download'] = 'Download Snippet';
+
+$lang['mail_newpage'] = 'page added:';
+$lang['mail_changed'] = 'page changed:';
+$lang['mail_new_user'] = 'new user:';
+$lang['mail_upload'] = 'file uploaded:';
+
+$lang['js']['nosmblinks'] = "Linking to Windows shares only works in Microsoft Internet Explorer.\nYou still can copy and paste the link.";
+
+$lang['qb_bold'] = 'Bold Text';
+$lang['qb_italic'] = 'Italic Text';
+$lang['qb_underl'] = 'Underlined Text';
+$lang['qb_code'] = 'Code Text';
+$lang['qb_strike'] = 'Strike-through Text';
+$lang['qb_h1'] = 'Level 1 Headline';
+$lang['qb_h2'] = 'Level 2 Headline';
+$lang['qb_h3'] = 'Level 3 Headline';
+$lang['qb_h4'] = 'Level 4 Headline';
+$lang['qb_h5'] = 'Level 5 Headline';
+
+$lang['qb_h'] = 'Headline';
+$lang['qb_hs'] = 'Select Headline';
+$lang['qb_hplus'] = 'Higher Headline';
+$lang['qb_hminus'] = 'Lower Headline';
+$lang['qb_hequal'] = 'Same Level Headline';
+
+$lang['qb_link'] = 'Internal Link';
+$lang['qb_extlink'] = 'External Link';
+$lang['qb_hr'] = 'Horizontal Rule';
+$lang['qb_ol'] = 'Ordered List Item';
+$lang['qb_ul'] = 'Unordered List Item';
+$lang['qb_media'] = 'Add Images and other files';
+$lang['qb_sig'] = 'Insert Signature';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Special Chars';
+
+$lang['upperns'] = 'jump to parent namespace';
+$lang['js']['linkwiz'] = 'Link Wizard';
+$lang['js']['linkto'] = 'Link to:';
+
+$lang['js']['del_confirm']= 'Really delete selected item(s)?';
+$lang['admin_register']= 'Add new user';
+
+$lang['metaedit'] = 'Edit Metadata';
+$lang['metasaveerr'] = 'Writing metadata failed';
+$lang['metasaveok'] = 'Metadata saved';
+$lang['img_backto'] = 'Back to';
+$lang['img_title'] = 'Title';
+$lang['img_caption'] = 'Caption';
+$lang['img_date'] = 'Date';
+$lang['img_fname'] = 'Filename';
+$lang['img_fsize'] = 'Size';
+$lang['img_artist'] = 'Photographer';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords']= 'Keywords';
+
+$lang['subscribe_success'] = 'Added %s to subscription list for %s';
+$lang['subscribe_error'] = 'Error adding %s to subscription list for %s';
+$lang['subscribe_noaddress']= 'There is no address associated with your login, you cannot be added to the subscription list';
+$lang['unsubscribe_success']= 'Removed %s from subscription list for %s';
+$lang['unsubscribe_error'] = 'Error removing %s from subscription list for %s';
+
+/* auth.class language support */
+$lang['authmodfailed'] = 'Bad user authentication configuration. Please inform your Wiki Admin.';
+$lang['authtempfail'] = 'User authentication is temporarily unavailable. If this situation persists, please inform your Wiki Admin.';
+
+/* installer strings */
+$lang['i_chooselang'] = 'Choose your language';
+$lang['i_installer'] = 'DokuWiki Installer';
+$lang['i_wikiname'] = 'Wiki Name';
+$lang['i_enableacl'] = 'Enable ACL (recommended)';
+$lang['i_superuser'] = 'Superuser';
+$lang['i_problems'] = 'The installer found some problems, indicated below. You can not continue until you have fixed them.';
+$lang['i_modified'] = 'For security reasons this script will only work with a new and unmodified Dokuwiki installation.
+ You should either re-extract the files from the downloaded package or consult the complete
+ <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
+$lang['i_funcna'] = 'PHP function <code>%s</code> is not available. Maybe your hosting provider disabled it for some reason?';
+$lang['i_phpver'] = 'Your PHP version <code>%s</code> is lower than the needed <code>%s</code>. You need to upgrade your PHP install.';
+$lang['i_permfail'] = '<code>%s</code> is not writable by DokuWiki. You need to fix the permission settings of this directory!';
+$lang['i_confexists'] = '<code>%s</code> already exists';
+$lang['i_writeerr'] = 'Unable to create <code>%s</code>. You will need to check directory/file permissions and create the file manually.';
+$lang['i_badhash'] = 'unrecognised or modified dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - illegal or empty value';
+$lang['i_success'] = 'The configuration was finished successfully. You may delete the install.php file now. Continue to
+ <a href="doku.php">your new DokuWiki</a>.';
+$lang['i_failure'] = 'Some errors occurred while writing the configuration files. You may need to fix them manually before
+ you can use <a href="doku.php">your new DokuWiki</a>.';
+$lang['i_policy'] = 'Initial ACL policy';
+$lang['i_pol0'] = 'Open Wiki (read, write, upload for everyone)';
+$lang['i_pol1'] = 'Public Wiki (read for everyone, write and upload for registered users)';
+$lang['i_pol2'] = 'Closed Wiki (read, write, upload for registered users only)';
+
+$lang['i_retry'] = 'Retry';
+
+$lang['mu_intro'] = 'Here you can upload multiple files at once. Click the browse button to add them to the queue. Press upload when done.';
+$lang['js']['mu_btn'] = 'Upload multiple files at once';
+$lang['mu_gridname'] = 'Filename';
+$lang['mu_gridsize'] = 'Size';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namespace';
+$lang['mu_browse'] = 'Browse';
+$lang['mu_toobig'] = 'too big';
+$lang['mu_ready'] = 'ready for upload';
+$lang['mu_done'] = 'complete';
+$lang['mu_fail'] = 'failed';
+$lang['mu_authfail'] = 'session expired';
+$lang['mu_progress'] = '@PCT@% uploaded';
+$lang['mu_filetypes'] = 'Allowed Filetypes';
+$lang['mu_info'] = 'files uploaded.';
+$lang['mu_lasterr'] = 'Last error:';
+
+$lang['recent_global'] = 'You\'re currently watching the changes inside the <b>%s</b> namespace. You can also <a href="%s">view the recent changes of the whole wiki</a>.';
+
+$lang['years'] = '%d years ago';
+$lang['months'] = '%d months ago';
+$lang['weeks'] = '%d weeks ago';
+$lang['days'] = '%d days ago';
+$lang['hours'] = '%d hours ago';
+$lang['minutes'] = '%d minutes ago';
+$lang['seconds'] = '%d seconds ago';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt
new file mode 100644
index 000000000..af6347a96
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt
@@ -0,0 +1,3 @@
+====== Page locked ======
+
+This page is currently locked for editing by another user. You have to wait until this user finishes editing or the lock expires.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt
new file mode 100644
index 000000000..2004ea198
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+You are currently not logged in! Enter your authentication credentials below to log in. You need to have cookies enabled to log in.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt
new file mode 100644
index 000000000..44a3f6553
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt
@@ -0,0 +1,17 @@
+A page in your DokuWiki was added or changed. Here are the details:
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+Edit Summary: @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt
new file mode 100644
index 000000000..848d4df09
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt
@@ -0,0 +1,4 @@
+====== This topic does not exist yet ======
+
+You've followed a link to a topic that doesn't exist yet. If permissions allow, you may create it by using the ''Create this page'' button.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt
new file mode 100644
index 000000000..0b21bf3f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt
@@ -0,0 +1,4 @@
+====== No such revision ======
+
+The specified revision doesn't exist. Use the ''Old revisions'' button for a list of old revisions of this document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt
new file mode 100644
index 000000000..16c96c5d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt
@@ -0,0 +1,4 @@
+====== Preview ======
+
+This is a preview of how your text will look like. Remember: It is **not saved** yet!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt
new file mode 100644
index 000000000..a342ff95a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt
@@ -0,0 +1,15 @@
+Hi @FULLNAME@!
+
+Someone requested a new password for your @TITLE@
+login at @DOKUWIKIURL@
+
+If you did not request a new password then just ignore this email.
+
+To confirm that the request was really sent by you please use the
+following link.
+
+@CONFIRM@
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt
new file mode 100644
index 000000000..9f56d81ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt
@@ -0,0 +1,2 @@
+This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt
new file mode 100644
index 000000000..3f7b58c46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt
@@ -0,0 +1,5 @@
+====== Recent Changes ======
+
+The following pages were changed recently.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt
new file mode 100644
index 000000000..db68d4f2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt
@@ -0,0 +1,4 @@
+====== Register as new user ======
+
+Fill in all the information below to create a new account in this wiki. Make sure you supply a **valid e-mail address** - if you are not asked to enter a password here, a new one will be sent to that address. The login name should be a valid [[doku>pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt
new file mode 100644
index 000000000..f02015767
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt
@@ -0,0 +1,14 @@
+A new user has registered. Here are the details:
+
+User name : @NEWUSER@
+Full name : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt
new file mode 100644
index 000000000..98c8c756b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Send new password ======
+
+Please enter your user name in the form below to request a new password for your account in this wiki. A confirmation link will be sent to your registered email address.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt
new file mode 100644
index 000000000..dd5f35b8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt
@@ -0,0 +1,4 @@
+====== Old Revisions ======
+
+These are the older revisons of the current document. To revert to an old revision, select it from below, click ''Edit this page'' and save it.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt
new file mode 100644
index 000000000..e357d6cdd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt
@@ -0,0 +1,5 @@
+====== Search ======
+
+You can find the results of your search below. If you didn't find what you were looking for, you can create or edit the page named after your query with the appropriate button.
+
+===== Results =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt
new file mode 100644
index 000000000..3608de36b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt
@@ -0,0 +1,2 @@
+**This is an old revision of the document!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt
new file mode 100644
index 000000000..afc301659
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt
@@ -0,0 +1,39 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+as
+an
+and
+you
+your
+them
+their
+com
+for
+from
+into
+if
+in
+is
+it
+how
+of
+on
+or
+that
+the
+this
+to
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt
new file mode 100644
index 000000000..673c4c32a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt
@@ -0,0 +1,23 @@
+Hello!
+
+The page @PAGE@ in the @TITLE@ wiki changed.
+Here are the changes:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Date : @DATE@
+User : @USER@
+Edit Summary: @SUMMARY@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+
+To cancel the page notifications, log into the wiki at
+@DOKUWIKIURL@ then visit
+@NEWPAGE@
+and unsubscribe page and/or namespace changes.
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt
new file mode 100644
index 000000000..b929fee83
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Update your account profile ======
+
+You only need to complete those fields you wish to change. You may not change your user name.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt
new file mode 100644
index 000000000..6fa196730
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt
@@ -0,0 +1,14 @@
+A file was uploaded to your DokuWiki. Here are the details:
+
+File : @MEDIA@
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Size : @SIZE@
+MIME Type : @MIME@
+User : @USER@
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt
new file mode 100644
index 000000000..f0f7d759d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blocked ======
+
+Your changes were **not** saved because it contains one or more blocked words. If you tried to spam the Wiki -- Bad dog! If you think this is an error, contact the administrator of this Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt
new file mode 100644
index 000000000..2ede2763c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt
@@ -0,0 +1,3 @@
+====== Administro ======
+
+Sube vi povas trovi liston de administraj taskoj disponeblaj en DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt
new file mode 100644
index 000000000..ed2949b10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt
@@ -0,0 +1 @@
+===== Ekstra kromaĵojn ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt
new file mode 100644
index 000000000..cd0cca9c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt
@@ -0,0 +1,3 @@
+====== Retroligiloj ======
+
+Ĉi tiu listo montras paÄojn, kiuj referencas al la aktuala paÄo. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt
new file mode 100644
index 000000000..0d7ede0b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt
@@ -0,0 +1,5 @@
+====== Pli nova versio ekzistas ======
+
+Ekzistas pli nova versio de la dokumento. Tio okazas kiam iu alia uzanto ÅanÄigis enhavon de la dokumento dum vi redaktis Äin.
+
+Atente esploru distingojn kaj decidu kiun version vi tenigos. Se vi premos ''Konservi'', do via versio estos konservita. Presonte butonon ''Rezigni'' vi tenos la kurantan version.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt
new file mode 100644
index 000000000..b35fe0412
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt
@@ -0,0 +1,4 @@
+====== Aliro malpermesita ======
+
+Vi ne havas sufiĉe da rajtoj por rigardi ĉi tiujn paÄojn. Eble vi forgesis identiÄi.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt
new file mode 100644
index 000000000..ac5474ef1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt
@@ -0,0 +1,4 @@
+====== Diferencoj ======
+
+Ĉi tie vi povas ekvidi diferencojn inter la aktuala versio kaj la elektita revizio de la paÄo.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt
new file mode 100644
index 000000000..fa43ecb74
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt
@@ -0,0 +1,5 @@
+====== Skiza dosiero estis trovata ======
+
+Via lasta sekcio de redakto en tiu ĉi paÄo ne estis korekte kompletita. DokuWiki aÅ­tomate konservis skizon dum vi laboris, kiun vi nun povas uzi por daÅ­rigi vian redaktadon. Sube vi povas vidi la datenaron, kiu estis konservata el via lasta sekcio.
+
+Bonvolu decidi ĉu vi volas //restarigi// vian perditan redakton, //forigi// la aŭtomate konservitan skizon aŭ //rezigni// pri la redakta procezo.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt
new file mode 100644
index 000000000..c1ca31e1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt
@@ -0,0 +1 @@
+Redaktu paÄon kaj poste premu butonon titolitan ''Konservi''. Bonvolu tralegi la [[vikio:sintakso|vikian sintakson]] por kompreni kiel vi povas krei paÄojn. Bonvolu redakti nur se vi planas **plibonigi** la enhavon de la paÄo. Se vi volas nur testi ion, do bonvolu uzi specialan paÄon: [[vikio:ludejo|ludejo]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt
new file mode 100644
index 000000000..4bab50b93
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt
@@ -0,0 +1,2 @@
+**Vi laboras kun malnova revizio de la dokumento!** Se vi konservos Äin, tiel kreiÄos nova kuranta versio kun la sama enhavo.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt
new file mode 100644
index 000000000..08bf3c894
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt
@@ -0,0 +1,3 @@
+====== Enhavo ======
+
+Tio ĉi estas indekso pri ĉiuj disponeblaj paÄoj ordigitaj laÅ­ [[doku>namespaces|nomspacoj]]. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html
new file mode 100644
index 000000000..74bbe15e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html
@@ -0,0 +1,9 @@
+<p>Tiu ĉi paÄo helpas en la unua instalo kaj agordado de <a href="http://dokuwiki.org">DokuWiki</a>. Pli da informo pri tiu instalilo estas disponebla en Äia propra <a href="http://dokuwiki.org/installer">dokumentada paÄo</a>.</p>
+
+<p>DokuWiki uzas ordinarajn dosierojn por konservi vikiajn paÄojn kaj aliajn informojn asociitaj al tiuj paÄoj (ekz. bildoj, serĉindeksoj, malnovaj revizioj, ktp). Por bone funkcii, DokuWiki <strong>devas</strong> havi registran rajton sur la subdosierujoj, kiuj entenas tiujn dosierojn. Tiu ĉi instalilo ne kapablas difini permes-atributojn de dosierujoj. Ordinare, tio devas esti senpere farita de iu komando en konzolo aÅ­, se vi abonas retprovizanton, per FTP aÅ­ kontrola panelo de tiu retprovizanto (ekz. cPanel).</p>
+
+<p>Tiu ĉi instalilo difinos vian DokuWiki-an agordadon por <acronym title="alir-kontrola listo">ACL</acronym>, kiu ebligas al administranto identiÄi kaj aliri taÅ­gan interfacon por instali kromaĵojn, administri uzantojn kaj alireblon al vikipaÄoj, kaj difini agordojn Äeneralajn.
+Äœi ne estas nepra por ke DokuWiki funkciu, tamen Äi multe faciligos administradon.</p>
+
+<p>Spertuloj aÅ­ uzantoj kiuj bezonas specialajn agordrimedojn devus uzi tiujn ligilojn por havi pli detalojn pri <a href="http://dokuwiki.org/install">instaladaj instrukcioj</a>
+kaj <a href="http://dokuwiki.org/config">agordadaj difinoj</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php
new file mode 100644
index 000000000..e2c25ae43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php
@@ -0,0 +1,254 @@
+<?php
+/**
+ * Esperanta dosiero
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Antono Vasiljev <esperanto.minsk ĈE tut.by>
+ * @author Felipe Castro <fefcas CXE yahoo.com.br>
+ * @author Felipe Castro <fefcas@uol.com.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Felipe Castro <fefcas (cxe) gmail (punkto) com>
+ * @author Felipo Kastro <fefcas@gmail.com>
+ * @author Robert Bogenschneider <robog@gmx.de>
+ * @author Erik Pedersen <erik pedersen@shaw.ca>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Redakti la paÄon';
+$lang['btn_source'] = 'Montri fontan tekston';
+$lang['btn_show'] = 'Montri paÄon';
+$lang['btn_create'] = 'Krei paÄon';
+$lang['btn_search'] = 'Serĉi';
+$lang['btn_save'] = 'Konservi';
+$lang['btn_preview'] = 'AntaÅ­rigardi';
+$lang['btn_top'] = 'Supren';
+$lang['btn_newer'] = '<< pli freÅe';
+$lang['btn_older'] = 'malpli freÅe >>';
+$lang['btn_revs'] = 'Malnovaj revizioj';
+$lang['btn_recent'] = 'FreÅaj ÅanÄoj';
+$lang['btn_upload'] = 'AlÅuti';
+$lang['btn_cancel'] = 'Rezigni';
+$lang['btn_index'] = 'Indekso';
+$lang['btn_secedit'] = 'Redakti';
+$lang['btn_login'] = 'Ensaluti';
+$lang['btn_logout'] = 'Elsaluti';
+$lang['btn_admin'] = 'Administri';
+$lang['btn_update'] = 'Äœisdatigi';
+$lang['btn_delete'] = 'Forigi';
+$lang['btn_back'] = 'Retroiri';
+$lang['btn_backlink'] = 'Retroligoj';
+$lang['btn_backtomedia'] = 'Retroiri al elekto de dosiero';
+$lang['btn_subscribe'] = 'AliÄi al paÄaj modifoj';
+$lang['btn_unsubscribe'] = 'MalaliÄi al paÄaj modifoj';
+$lang['btn_subscribens'] = 'AliÄi al nomspacaj modifoj';
+$lang['btn_unsubscribens'] = 'MalaliÄi al nomspacaj modifoj';
+$lang['btn_profile'] = 'Äœisdatigi profilon';
+$lang['btn_reset'] = 'Rekomenci';
+$lang['btn_resendpwd'] = 'Sendi novan pasvorton';
+$lang['btn_draft'] = 'Redakti skizon';
+$lang['btn_recover'] = 'Restarigi skizon';
+$lang['btn_draftdel'] = 'Forigi skizon';
+$lang['btn_revert'] = 'Restarigi';
+$lang['loggedinas'] = 'Ensalutita kiel';
+$lang['user'] = 'Uzant-nomo';
+$lang['pass'] = 'Pasvorto';
+$lang['newpass'] = 'Nova pasvorto';
+$lang['oldpass'] = 'Konfirmu la nunan pasvorton';
+$lang['passchk'] = 'plian fojon';
+$lang['remember'] = 'Rememoru min';
+$lang['fullname'] = 'Kompleta nomo';
+$lang['email'] = 'RetpoÅto';
+$lang['register'] = 'Registro';
+$lang['profile'] = 'Uzanto-profilo';
+$lang['badlogin'] = 'Pardonu, uzant-nomo aÅ­ pasvorto estis erara.';
+$lang['minoredit'] = 'Etaj modifoj';
+$lang['draftdate'] = 'Lasta konservo de la skizo:';
+$lang['nosecedit'] = 'La paÄo ÅanÄiÄis intertempe, sekcio-informo estis malÄisdata, ni Åargas la tutan paÄon anstataÅ­e.';
+$lang['regmissing'] = 'Pardonu, vi devas plenigi ĉiujn kampojn.';
+$lang['reguexists'] = 'Pardonu, ĉi tiu uzanto-nomo jam estas okupita.';
+$lang['regsuccess'] = 'La uzanto estas kreita kaj la pasvorto estis elsendita per retpoÅto.';
+$lang['regsuccess2'] = 'La uzanto estas kreita.';
+$lang['regmailfail'] = 'Åœajne okazis eraro dum elsendo de la pasvorto. Bonvolu informi administranton pri tio!';
+$lang['regbadmail'] = 'Entajpita retpoÅta adreso ne Åajnas valida. Se vi pensas, ke tio estas eraro, kontaktu la administranton.';
+$lang['regbadpass'] = 'La du pasvortoj ne samas, bonvolu provi refoje.';
+$lang['regpwmail'] = 'Via DokuWiki-pasvorto';
+$lang['reghere'] = 'Se vi ne havas konton, do vi povos akiri Äin';
+$lang['profna'] = 'Tiu ĉi vikio ne ebligas modifon en la profiloj.';
+$lang['profnochange'] = 'Neniu ÅanÄo, nenio farinda.';
+$lang['profnoempty'] = 'Malplena nomo aÅ­ retadreso ne estas permesataj.';
+$lang['profchanged'] = 'La profilo de la uzanto estas sukcese Äisdatigita.';
+$lang['pwdforget'] = 'Ĉu vi forgesis vian pasvorton? Prenu novan';
+$lang['resendna'] = 'Tiu ĉi vikio ne ebligas resendon de la pasvortoj.';
+$lang['resendpwd'] = 'Sendi novan pasvorton al';
+$lang['resendpwdmissing'] = 'Pardonu, vi devas plenigi ĉiujn kampojn.';
+$lang['resendpwdnouser'] = 'Pardonu, ni ne trovas tiun uzanton en nia datenbazo.';
+$lang['resendpwdbadauth'] = 'Pardonu, tiu aÅ­tentiga kodo ne validas. CertiÄu, ke vi uzis la kompletan konfirmigan ligilon.';
+$lang['resendpwdconfirm'] = 'Konfirmiga ligilo estas sendita per retpoÅto.';
+$lang['resendpwdsuccess'] = 'Via nova pasvorto estas sendita per retpoÅto.';
+$lang['license'] = 'Krom kie rekte indikite, enhavo de tiu ĉi vikio estas publikigita laŭ la jena permesilo:';
+$lang['licenseok'] = 'Rimarku: redaktante tiun ĉi paÄon vi konsentas publikigi vian enhavon laÅ­ la jena permesilo:';
+$lang['searchmedia'] = 'Serĉi dosiernomon:';
+$lang['searchmedia_in'] = 'Serĉi en %s';
+$lang['txt_upload'] = 'Elektu dosieron por alÅuto';
+$lang['txt_filename'] = 'AlÅuti kiel (laÅ­vole)';
+$lang['txt_overwrt'] = 'AnstataÅ­igi ekzistantan dosieron';
+$lang['lockedby'] = 'Nune Ålosita de';
+$lang['lockexpire'] = 'Ŝlosado ĉesos en';
+$lang['willexpire'] = 'Vi povos redakti ĉi tiun paÄon post unu minuto.\nSe vi volas nuligi tempkontrolon de la Ålosado, do premu butonon "AntaÅ­rigardi".';
+$lang['notsavedyet'] = 'Ne konservitaj modifoj perdiÄos.\nĈu vi certe volas daÅ­rigi la procezon?';
+$lang['rssfailed'] = 'Okazis eraro dum ricevado de la novaĵ-fluo: ';
+$lang['nothingfound'] = 'AnkoraÅ­ nenio troviÄas tie ĉi.';
+$lang['mediaselect'] = 'Elekto de aŭdvidaĵa dosiero';
+$lang['fileupload'] = 'AlÅuto de aÅ­dvidaĵa dosiero';
+$lang['uploadsucc'] = 'AlÅuto estis sukcesa';
+$lang['uploadfail'] = 'AlÅuto estis malsukcesa. Eble ĉu estas problemoj pro permes-atributoj?';
+$lang['uploadwrong'] = 'Rifuzita alÅuto. Tiu ĉi dosiersufikso estas malpermesata!';
+$lang['uploadexist'] = 'La dosiero jam ekzistas. Nenio estas farita.';
+$lang['uploadbadcontent'] = 'La alÅutita enhavo ne kongruas al la sufikso %s.';
+$lang['uploadspam'] = 'La alÅutaĵo estis blokita de kontraÅ­spama vortlisto.';
+$lang['uploadxss'] = 'La alÅutajo estis blokita pro ebla malica enhavo.';
+$lang['uploadsize'] = 'La alÅutita dosiero estis tro granda. (maks. %s)';
+$lang['deletesucc'] = 'La dosiero "%s" estas forigita.';
+$lang['deletefail'] = '"%s" ne povis esti forigita - kontrolu permes-atributojn.';
+$lang['mediainuse'] = 'La dosiero "%s" ne estis forigita - Äi ankoraÅ­ estas uzata.';
+$lang['namespaces'] = 'Nomspacoj';
+$lang['mediafiles'] = 'Disponeblaj dosieroj';
+$lang['js']['searchmedia'] = 'Serĉi dosierojn';
+$lang['js']['keepopen'] = 'Tenu la fenestron malfermata dum elekto';
+$lang['js']['hidedetails'] = 'KaÅi detalojn';
+$lang['js']['nosmblinks'] = 'Tio ĉi nur funkcias en la Vindozaĉa "Microsoft Internet Explorer".
+Vi ankoraÅ­ povas kopii kaj almeti la ligilon.';
+$lang['js']['linkwiz'] = 'Ligil-Asistanto';
+$lang['js']['linkto'] = 'Ligilo al:';
+$lang['js']['del_confirm'] = 'Ĉu vere forigi elektitajn ero(j)n?';
+$lang['js']['mu_btn'] = 'AlÅuti plurajn dosierojn multope.';
+$lang['mediausage'] = 'Uzu la jenan sintakson por referenci tiun ĉi dosieron:';
+$lang['mediaview'] = 'Rigardi originalan dosieron';
+$lang['mediaroot'] = 'ĉefo (root)';
+$lang['mediaupload'] = 'AlÅutu dosieron al la kuranta nomspaco tien ĉi. Por krei subnomspacojn, antaÅ­metu ilin al via "AlÅuti kiel" dosiernomo, apartigante per dupunktoj (:).';
+$lang['mediaextchange'] = 'La dosiersufikso ÅanÄis de .%s al .%s!';
+$lang['reference'] = 'Referencoj por';
+$lang['ref_inuse'] = 'La dosiero ne povas esti forigita, ĉar Äi ankoraÅ­ estas uzata de la jenaj paÄoj:';
+$lang['ref_hidden'] = 'Kelkaj referencoj estas en paÄoj, kiujn vi ne rajtas legi';
+$lang['hits'] = 'Kongruoj';
+$lang['quickhits'] = 'Kongruoj trovitaj en paÄnomoj';
+$lang['toc'] = 'Enhavtabelo';
+$lang['current'] = 'aktuala';
+$lang['yours'] = 'Via Versio';
+$lang['diff'] = 'Montri diferencojn el la aktuala versio';
+$lang['diff2'] = 'Montri diferencojn inter la elektitaj revizioj';
+$lang['line'] = 'Linio';
+$lang['breadcrumb'] = 'PaÅoj';
+$lang['youarehere'] = 'Vi estas ĉi tie';
+$lang['lastmod'] = 'Lastaj ÅanÄoj';
+$lang['by'] = 'de';
+$lang['deleted'] = 'forigita';
+$lang['created'] = 'kreita';
+$lang['restored'] = 'malnova revizio restarigita';
+$lang['external_edit'] = 'ekstera redakto';
+$lang['summary'] = 'Bulteno de ÅanÄoj';
+$lang['noflash'] = 'La <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> estas bezonata por montrigi tiun ĉi enhavon.';
+$lang['download'] = 'ElÅuti eltiraĵon';
+$lang['mail_newpage'] = 'paÄo aldonita:';
+$lang['mail_changed'] = 'paÄo modifita:';
+$lang['mail_new_user'] = 'Nova uzanto:';
+$lang['mail_upload'] = 'dosiero alÅutita:';
+$lang['qb_bold'] = 'Dika teksto';
+$lang['qb_italic'] = 'Dekliva teksto';
+$lang['qb_underl'] = 'Substrekita teksto';
+$lang['qb_code'] = 'Koduma teksto';
+$lang['qb_strike'] = 'Trastrekita teksto';
+$lang['qb_h1'] = 'Titolo de 1-a nivelo';
+$lang['qb_h2'] = 'Titolo de 2-a nivelo';
+$lang['qb_h3'] = 'Titolo de 3-a nivelo';
+$lang['qb_h4'] = 'Titolo de 4-a nivelo';
+$lang['qb_h5'] = 'Titolo de 5-a nivelo';
+$lang['qb_h'] = 'Ĉeftitolo';
+$lang['qb_hs'] = 'Elektu ĉeftitolon';
+$lang['qb_hplus'] = 'Altnivela titolo';
+$lang['qb_hminus'] = 'Subnivela titolo';
+$lang['qb_hequal'] = 'Samnivela titolo';
+$lang['qb_link'] = 'Interna ligilo';
+$lang['qb_extlink'] = 'Ekstera ligilo';
+$lang['qb_hr'] = 'Horizontala streko';
+$lang['qb_ol'] = 'Elemento de numerita listo';
+$lang['qb_ul'] = 'Elemento de ne numerita listo';
+$lang['qb_media'] = 'Aldoni bildojn kaj aliajn dosierojn';
+$lang['qb_sig'] = 'Inkluzivi subskribon';
+$lang['qb_smileys'] = 'Ridetuloj';
+$lang['qb_chars'] = 'Specialaj signaĵoj';
+$lang['upperns'] = 'saltu al la parenca nomspaco';
+$lang['admin_register'] = 'Aldoni novan uzanton';
+$lang['metaedit'] = 'Redakti metadatenaron';
+$lang['metasaveerr'] = 'La konservo de metadatenaro malsukcesis';
+$lang['metasaveok'] = 'La metadatenaro estis konservita';
+$lang['img_backto'] = 'Retroiri al';
+$lang['img_title'] = 'Titolo';
+$lang['img_caption'] = 'Priskribo';
+$lang['img_date'] = 'Dato';
+$lang['img_fname'] = 'Dosiernomo';
+$lang['img_fsize'] = 'Grandeco';
+$lang['img_artist'] = 'Fotisto';
+$lang['img_copyr'] = 'Kopirajtoj';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Kamerao';
+$lang['img_keywords'] = 'Åœlosilvortoj';
+$lang['subscribe_success'] = '%s estis aldonita al dissendolisto por %s';
+$lang['subscribe_error'] = 'Estas eraro je aldono de %s al dissendolisto por %s';
+$lang['subscribe_noaddress'] = 'Estas neniu retadreso asociita al via identiÄ-nomo, do vi ne povas esti aldonata al la dissendolisto.';
+$lang['unsubscribe_success'] = '%s estas forigita de la dissendolisto por %s';
+$lang['unsubscribe_error'] = 'Estas eraro je forigo de %s el dissendolisto por %s';
+$lang['authmodfailed'] = 'Malbona agordo por identigi la uzanton. Bonvolu informi la administranton de la vikio.';
+$lang['authtempfail'] = 'La identigo de via uzantonomo estas intertempe maldisponebla. Se tiu ĉi situacio daŭros, bonvolu informi la adminstranton de la vikio.';
+$lang['i_chooselang'] = 'Elektu vian lingvon';
+$lang['i_installer'] = 'Instalilo de DokuWiki';
+$lang['i_wikiname'] = 'Nomo de la vikio';
+$lang['i_enableacl'] = 'Ebligi "ACL" (alirkontrolo, rekomendinde)';
+$lang['i_superuser'] = 'Superuzanto';
+$lang['i_problems'] = 'La instalilo trovis kelkajn problemojn, indikitaj sube. Vi ne povas pluiri Äis ili estos iel korektitaj.';
+$lang['i_modified'] = 'Pro sekureco tiu ĉi instalilo nur funkcias por nova kaj nemodifita Dokuwiki-pakaĵo.
+Vi devas aÅ­ redemeti la dosierojn el la elÅutita pakaĵo aÅ­ plibone informiÄi pri la instalada procezo.';
+$lang['i_funcna'] = 'La PHP-a funkcio <code>%s</code> ne estas uzebla. Eble via retprovizanto ial malpermesis tion?';
+$lang['i_phpver'] = 'La versio de la PHP <code>%s</code> estas pli malnova ol la bezonata <code>%s</code>. Vi bezonas Äisdatigi la PHP-an instalon.';
+$lang['i_permfail'] = '<code>%s</code> ne estas skribebla por DokuWiki. Vi devas redifini la permes-atributojn de tiu ĉi dosierujo!';
+$lang['i_confexists'] = '<code>%s</code> jam ekzistas';
+$lang['i_writeerr'] = 'Ne eblas krei "<code>%s</code>"-on. Vi bezonas kontroli la permesojn de la dosier(uj)oj kaj mem krej la dosieron.';
+$lang['i_badhash'] = 'dokuwiki.php ne estas rekonebla aÅ­ Äi estas modifita (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - malvalida aÅ­ malplena valoro';
+$lang['i_success'] = 'La agordado estas sukcese kompletita. Vi povas forigi la dosieron nun. Pluiru al <a href="doku.php">via nova DokuWiki</a>.';
+$lang['i_failure'] = 'Kelkaj eraroj okazis dum la konservo de la agordaj dosieroj. Vi devas senpere korekti ilin antaÅ­ ol vi povos uzi <a href="doku.php">vian novan DokuWiki-on</a>. ';
+$lang['i_policy'] = 'Apriora ACL-a agordo';
+$lang['i_pol0'] = 'Malferma Vikio (legi, skribi, alÅuti povas ĉiuj)';
+$lang['i_pol1'] = 'Publika Vikio (legi povas ĉiuj, skribi kaj alÅuti povas registritaj uzantoj)';
+$lang['i_pol2'] = 'Ferma Vikio (legi, skribi, alÅuti nur povas registritaj uzantoj)';
+$lang['i_retry'] = 'Reprovi';
+$lang['mu_intro'] = 'Ĉi tie vi povas alÅuti plurajn dosierojn multope. Klaku la esplor-butonon por aldoni ilin al la vico. Premu alÅuti kiam prete.';
+$lang['mu_gridname'] = 'Dosiernomo';
+$lang['mu_gridsize'] = 'Grandeco';
+$lang['mu_gridstat'] = 'Stato';
+$lang['mu_namespace'] = 'Nomspaco';
+$lang['mu_browse'] = 'Esplori';
+$lang['mu_toobig'] = 'tro granda';
+$lang['mu_ready'] = 'preta por alÅuti';
+$lang['mu_done'] = 'plenumite';
+$lang['mu_fail'] = 'malsukcesinte';
+$lang['mu_authfail'] = 'sekcio tro longdaÅ­ris';
+$lang['mu_progress'] = '@PCT@% alÅutite';
+$lang['mu_filetypes'] = 'Permesitaj dosiertipoj';
+$lang['mu_info'] = 'alÅutitaj dosieroj.';
+$lang['mu_lasterr'] = 'Lasta eraro:';
+$lang['recent_global'] = 'Vi nun rigardas la ÅanÄojn ene de la nomspaco <b>%s</b>. Vi povas ankaÅ­ <a href="%s">vidi la freÅajn ÅanÄojn de la tuta vikio</a>.';
+$lang['years'] = 'antaÅ­ %d jaroj';
+$lang['months'] = 'antaÅ­ %d monatoj';
+$lang['weeks'] = 'antaÅ­ %d semajnoj';
+$lang['days'] = 'antaÅ­ %d tagoj';
+$lang['hours'] = 'antaÅ­ %d horoj';
+$lang['minutes'] = 'antaÅ­ %d minutoj';
+$lang['seconds'] = 'antaÅ­ %d sekundoj';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt
new file mode 100644
index 000000000..68963da75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt
@@ -0,0 +1,3 @@
+====== La paÄo estas Ålosita ======
+
+Tiu ĉi paÄo nun estas blokita pro redaktado de iu alia uzanto. Bonvole atendu ke Åi/li finu redakti aÅ­ ke la Ålosada tempolimo finiÄu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt
new file mode 100644
index 000000000..2b9b34340
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt
@@ -0,0 +1,3 @@
+====== Enirejo ======
+
+Vi ankoraÅ­ ne identiÄis! Entajpu necesajn informojn sube por identiÄi. Kuketoj (cookies) devas esti Åaltitaj. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt
new file mode 100644
index 000000000..5e83b324b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt
@@ -0,0 +1,16 @@
+PaÄo en via DokuVikio estis ÅanÄita aÅ­ aldonita. Jen detaloj:
+
+Dato: @DATE@
+Foliumilo: @BROWSER@
+IP-adreso: @IPADDRESS@
+RetNodo: @HOSTNAME@
+AntaÅ­a revizio: @OLDPAGE@
+Nova revizio: @NEWPAGE@
+Bulteno de ÅanÄoj: @SUMMARY@
+Uzulo: @USER@
+
+@DIFF@
+
+--
+Tiu ĉi mesaÄo estis kreata de DokuWiki, kiu lokiÄas tie:
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt
new file mode 100644
index 000000000..4ddcd33be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt
@@ -0,0 +1,4 @@
+====== Ĉi tiu paÄo ankoraÅ­ ne ekzistas ======
+
+Vi sekvis ligilon, kiu kondukas al artikolo ankoraÅ­ ne ekzistanta. Se vi rajtas, tiel vi povas krei tiun ĉi paÄon ekpremante la butonon ''Krei paÄon''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt
new file mode 100644
index 000000000..6dffbaa1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt
@@ -0,0 +1,3 @@
+====== Tia revizio ne ekzistas ======
+
+La elektita revizio ne ekzistas. Premu butonon ''Malnovaj revizioj'', por vidi liston de malnovaj revizioj de la dokumento. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt
new file mode 100644
index 000000000..784f693e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt
@@ -0,0 +1,3 @@
+====== AntaÅ­rigardo ======
+
+Tiu ĉi estas antaÅ­rigardo pri kia estos via teksto. Memoru: Äi ankoraÅ­ **ne estas konservita**! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt
new file mode 100644
index 000000000..f227752b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt
@@ -0,0 +1,14 @@
+Saluton @FULLNAME@!
+
+Iu petis novan pasvorton por via @TITLE@
+ensalutnomo ĉe @DOKUWIKIURL@
+
+Se ne estas vi, kiu petis tion, do preterlasu tiun ĉi mesaÄon.
+
+Por konfirmi, ke la peto estis vere via, bonvolu musklaki la jenan ligilon.
+
+@CONFIRM@
+
+--
+Tiu ĉi mesaÄo estis kreita de DokuWiki ĉe
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt
new file mode 100644
index 000000000..734eb1654
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt
@@ -0,0 +1,2 @@
+Tiu ĉi paÄo estas disponigata nur por legado (vi ne povas redakti Äin). Sciigu administranton, se vi opinias ke tio estas ne Äusta malpermeso.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt
new file mode 100644
index 000000000..e03144668
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt
@@ -0,0 +1,3 @@
+====== FreÅaj ÅœanÄoj ======
+
+La jenaj paÄoj estis ÅanÄitaj antaÅ­ malmulta tempo. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt
new file mode 100644
index 000000000..57d5ca1f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt
@@ -0,0 +1,4 @@
+====== RegistriÄi ======
+
+Entajpu necesajn informojn por enregistriÄi. CertiÄu ke via retpoÅta adreso estas vera ĉar ni sendos al Äi vian pasvorton.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt
new file mode 100644
index 000000000..c832eca42
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt
@@ -0,0 +1,14 @@
+Nova uzulo estis registrata. Jen la detaloj:
+
+Uzantonomo: @NEWUSER@
+Kompleta nomo: @NEWNAME@
+Retadreso: @NEWEMAIL@
+
+Dato: @DATE@
+Foliumilo: @BROWSER@
+IP-Adreso: @IPADDRESS@
+Provizanto: @HOSTNAME@
+
+--
+Tiu ĉi mesaÄo estis kreata de DokuWiki ĉe
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt
new file mode 100644
index 000000000..57b4b0408
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Sendi novan pasvorton ======
+
+Bonvolu meti vian uzantonomon en la suban formularon petante novan pasvorton por via aliÄo en tiu ĉi vikio. Konfirma ligilo estos sendata al via registrita retadreso.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt
new file mode 100644
index 000000000..4f37bb125
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt
@@ -0,0 +1,3 @@
+====== Malnovaj revizioj ======
+
+Sube estas listo de malnovaj revizioj de la dokumento. Elektu revizion se vi volas rigardi Äin aÅ­ anstataÅ­igi kurantan paÄon per Äi. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt
new file mode 100644
index 000000000..a940c503d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt
@@ -0,0 +1,5 @@
+====== Serĉo ======
+
+Sube estas rezultoj de serĉo en la retejo.\\ Se vi ne trovis tion, kion vi serĉis, vi povas krei novan paÄon kun necesa nomo per la koresponda butono.
+
+===== Rezultoj =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt
new file mode 100644
index 000000000..e3a8a1747
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt
@@ -0,0 +1,2 @@
+**Tiu estas malnova revizio de la dokumento**. Klaku sur titolo por ricevi kurantan version.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt
new file mode 100644
index 000000000..2c18cb319
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt
@@ -0,0 +1,23 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+la
+pri
+estas
+kaj
+mi
+mia
+vi
+via
+ili
+ilia
+kun
+por
+kiel
+tiu
+estis
+kio
+kiam
+kie
+kiu
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt
new file mode 100644
index 000000000..074a99351
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt
@@ -0,0 +1,23 @@
+Saluton!
+
+La retpaÄo @PAGE@ en la vikio @TITLE@ ÅanÄiÄis.
+Jen la ÅanÄoj:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Dato : @DATE@
+Uzanto : @USER@
+Modifa rezumo: @SUMMARY@
+Malnova revizio: @OLDPAGE@
+Nova revizio: @NEWPAGE@
+
+Por nuligi la avizojn pri paÄoÅanÄoj, ensalutu en la vikio ĉe
+@DOKUWIKIURL@ kaj aliru
+@NEWPAGE@
+kaj malaliÄu al avizoj pri paÄaj kaj/aÅ­ nomspacaj ÅanÄoj.
+
+--
+Tiu ĉi mesaÄo estis kreita de DokuWiki ĉe
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt
new file mode 100644
index 000000000..a3de0c840
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Äœisdatigi vian profilon ======
+
+Vi nur bezonas kompletigi tiujn kampojn, kiujn vi deziras ÅanÄi. Vi ne povas ÅanÄi vian uzantonomon. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt
new file mode 100644
index 000000000..e7c327a60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt
@@ -0,0 +1,14 @@
+Dosiero estis alÅutita al via DokuVikio. Jen detaloj:
+
+Dosiero: @MEDIA@
+Dato: @DATE@
+Foliumilo: @BROWSER@
+IP-Adreso: @IPADDRESS@
+Ret-nodo: @HOSTNAME@
+Grandeco: @SIZE@
+Dosier-tipo: @MIME@
+Uzanto: @USER@
+
+--
+Tiu ĉi mesaÄo estis kreita de DokuWiki ĉe
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt
new file mode 100644
index 000000000..64bb19e5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAMO estis blokita ======
+
+Viaj redaktoj ne estas konservitaj, ĉar en la teksto estis trovitaj unu aÅ­ kelkaj malpermesindaj vortoj, Åajnante spamo. Se vi pensas, ke tio estas eraro, bonvolu kontakti la administranton de la vikio. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt
new file mode 100644
index 000000000..320b1c5be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt
@@ -0,0 +1,3 @@
+====== Administración ======
+
+Abajo puedes encontrar una lista de las tareas de administración disponibles en Dokuwiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt
new file mode 100644
index 000000000..8e1b0f813
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugins Adicionales ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt
new file mode 100644
index 000000000..4de93ef34
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt
@@ -0,0 +1,4 @@
+====== Referencias ======
+
+Esta es una lista de páginas que parecen hacer referencia a la página actual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt
new file mode 100644
index 000000000..265ac1ee6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt
@@ -0,0 +1,5 @@
+====== Existe una versión más reciente ======
+
+Existe una versión más reciente del documento que has editado. Esto sucede cuando otro usuario ha modificado el documento mientras lo estabas editando.
+
+Examina las diferencias mostradas abajo a fondo, y decide entonces cual conservar. Si eliges ''Guardar'', tu versión será guardada. Si eliges ''Cancelar'' se guardará la actual versión. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt
new file mode 100644
index 000000000..d7b37404b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt
@@ -0,0 +1,3 @@
+====== Permiso Denegado ======
+
+Lo siento, no tienes suficientes permisos para continuar. ¿Quizás has olvidado identificarte? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt
new file mode 100644
index 000000000..e0e9e08ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt
@@ -0,0 +1,4 @@
+====== Diferencias ======
+
+Muestra las diferencias entre dos versiones de la página.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt
new file mode 100644
index 000000000..054d618b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt
@@ -0,0 +1,6 @@
+====== Fichero borrador encontrado ======
+
+Su última sesión de edición en esta página no se completó correctamente. DokuWiki guardó automáticamente un borrador mientras usted trabajaba; puede utilizar el borrador para continuar editándolo. Abajo se ven los datos que fueron guardados en su última sesión.
+
+Por favor decida si desea //recuperar// su sesión perdida, //eliminar// el borrador guardado automáticamente o //cancelar// el proceso de edición.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt
new file mode 100644
index 000000000..55c3c1dc5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt
@@ -0,0 +1,2 @@
+Edita la página y pulsa ''Guardar''. Mira [[wiki:syntax]] para sintaxis Wiki. Por favor edita la página solo si puedes **mejorarla**. Si quieres testear algunas cosas aprende a dar tus primeros pasos en el [[playground:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt
new file mode 100644
index 000000000..4b587b7ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt
@@ -0,0 +1,2 @@
+**Has cargado una revisión vieja del documento!** Si la guardas crearás una versión nueva con estos datos.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt
new file mode 100644
index 000000000..148e5f406
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt
@@ -0,0 +1,4 @@
+====== Ãndice ======
+
+Este es un índice de todas las páginas disponibles ordenado por [[doku>namespaces|espacios de nombres]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html
new file mode 100644
index 000000000..c16d4c47c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html
@@ -0,0 +1,14 @@
+<p>Esta página lo asiste en la primera vez que instala y configura
+<a href="http://dokuwiki.org">Dokuwiki</a>.
+Más información sobre este instalador está disponible en la
+<a href="http://dokuwiki.org/installer">página de documentación</a>.
+</p>
+
+<p>DokuWiki usa ficheros comunes para el almacenamiento de las páginas del wiki y otra información asociada a esas páginas (por ejemplo, imágenes, índices de archivos, revisiones viejas, etc). Para funcionar correctamente DokuWiki <strong>debe</strong> tener permisos de escritura en los directorios que contienen esos ficheros. Este instalador no es capaz de establecer permisos en directorios. Normalmente eso debe ser hecho a través de una consola de comandos o si usted usa servicios de hosting a través de FTP o el panel de control brindado por su hosting (e.g. cPanel).</p>
+
+<p>Este instalador configurará una <acronym title="lista de control de acceso">ACL</acronym>, que a su vez permite el acceso al administrador y acceso a los menúes de administración para instalación
+de plugins, administración de usuarios, administración de permisos para las páginas wiki y modificación de la configuración. A pesar que no es necesario para que DokuWiki funcione, hará que sea más fácil la administración.</p>
+
+<p>Usuarios experimentados o usuarios con requerimientos especiales deben usar estos enlaces para detalles concernientes a
+<a href="http://dokuwiki.org/install">instrucciones de instalación</a>
+y <a href="http://dokuwiki.org/config">configuración</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php
new file mode 100644
index 000000000..9d4995c52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php
@@ -0,0 +1,262 @@
+<?php
+/**
+ * spanish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Zigor Astarbe <zigor@astarbe.com>
+ * @author Adrián Ariza <adrian_ariza.ciudad.com.ar>
+ * @author Gabiel Molina <gabriel191@gmail.com>
+ * @author Paco Avila <monkiki@gmail.com>
+ * @author Bernardo Arlandis Mañó <bernardo@tsolucio.com>
+ * @author Miguel Pagano <miguel.pagano@gmail.com>
+ * @author Oscar M. Lage <r0sk10@gmail.com>
+ * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
+ * @author oliver@samera.com.py
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Manuel Meco <manuel.meco@gmail.com>
+ * @author VictorCastelan <victorcastelan@gmail.com>
+ * @author Jordan Mero hack.jord@gmail.com
+ * @author Felipe Martinez <metalmartinez@gmail.com>
+ * @author Javier Aranda <internet@javierav.com>
+ * @author Zerial <fernando@zerial.org>
+ * @author Marvin Ortega <maty1206@maryanlinux.com>
+ * @author Daniel Castro Alvarado <dancas2@gmail.com>
+ * @author Fernando J. Gómez <fjgomez@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Editar esta página';
+$lang['btn_source'] = 'Ver fuente';
+$lang['btn_show'] = 'Ver página';
+$lang['btn_create'] = 'Crear esta página';
+$lang['btn_search'] = 'Buscar';
+$lang['btn_save'] = 'Guardar';
+$lang['btn_preview'] = 'Previsualización';
+$lang['btn_top'] = 'Ir hasta arriba';
+$lang['btn_newer'] = '<< más reciente';
+$lang['btn_older'] = 'menos reciente >>';
+$lang['btn_revs'] = 'Revisiones antiguas';
+$lang['btn_recent'] = 'Cambios recientes';
+$lang['btn_upload'] = 'Cargar';
+$lang['btn_cancel'] = 'Cancelar';
+$lang['btn_index'] = 'Ãndice';
+$lang['btn_secedit'] = 'Editar';
+$lang['btn_login'] = 'Conectarse';
+$lang['btn_logout'] = 'Desconectarse';
+$lang['btn_admin'] = 'Administrar';
+$lang['btn_update'] = 'Actualizar';
+$lang['btn_delete'] = 'Borrar';
+$lang['btn_back'] = 'Atrás';
+$lang['btn_backlink'] = 'Enlaces anteriores';
+$lang['btn_backtomedia'] = 'Volver a la selección de archivos multimedia';
+$lang['btn_subscribe'] = 'Suscribirse a cambios de la página';
+$lang['btn_unsubscribe'] = 'Cancelar suscripción a cambios de la página';
+$lang['btn_subscribens'] = 'Suscribirse a cambios del espacio de nombres';
+$lang['btn_unsubscribens'] = 'Cancelar suscripción a cambios del espacio de nombres';
+$lang['btn_profile'] = 'Actualizar perfil';
+$lang['btn_reset'] = 'Restablecer';
+$lang['btn_resendpwd'] = 'Enviar nueva contraseña';
+$lang['btn_draft'] = 'Editar borrador';
+$lang['btn_recover'] = 'Recuperar borrador';
+$lang['btn_draftdel'] = 'Eliminar borrador';
+$lang['btn_revert'] = 'Restaurar';
+$lang['loggedinas'] = 'Conectado como ';
+$lang['user'] = 'Usuario';
+$lang['pass'] = 'Contraseña';
+$lang['newpass'] = 'Nueva contraseña';
+$lang['oldpass'] = 'Confirma tu contraseña actual';
+$lang['passchk'] = 'otra vez';
+$lang['remember'] = 'Recordarme';
+$lang['fullname'] = 'Nombre real';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Registrarse';
+$lang['profile'] = 'Perfil del usuario';
+$lang['badlogin'] = 'Lo siento, el usuario o la contraseña es incorrecto.';
+$lang['minoredit'] = 'Cambios menores';
+$lang['draftdate'] = 'Borrador guardado automáticamente:';
+$lang['nosecedit'] = 'La página ha cambiado en el lapso, la información de sección estaba anticuada, en su lugar se cargó la página completa.';
+$lang['regmissing'] = 'Lo siento, tienes que completar todos los campos.';
+$lang['reguexists'] = 'Lo siento, ya existe un usuario con este nombre.';
+$lang['regsuccess'] = 'El usuario ha sido creado y la contraseña se ha enviado por correo.';
+$lang['regsuccess2'] = 'El usuario ha sido creado.';
+$lang['regmailfail'] = 'Parece que ha habido un error al enviar el correo con la contraseña. ¡Por favor, contacta al administrador!';
+$lang['regbadmail'] = 'La dirección de correo no parece válida. Si piensas que esto es un error, contacta al administrador';
+$lang['regbadpass'] = 'Las dos contraseñas no son iguales, por favor inténtalo de nuevo.';
+$lang['regpwmail'] = 'Tu contraseña de DokuWiki';
+$lang['reghere'] = '¿No tienes una cuenta todavía? Consigue una';
+$lang['profna'] = 'Este wiki no permite la modificación del perfil';
+$lang['profnochange'] = 'Sin cambios, nada que hacer.';
+$lang['profnoempty'] = 'No se permite que el nombre o la dirección de correo electrónico estén vacíos.';
+$lang['profchanged'] = 'Se actualizó correctamente el perfil del usuario.';
+$lang['pwdforget'] = '¿Has olvidado tu contraseña? Consigue una nueva';
+$lang['resendna'] = 'Este wiki no brinda la posibilidad de reenvío de contraseña.';
+$lang['resendpwd'] = 'Enviar una nueva contraseña para';
+$lang['resendpwdmissing'] = 'Lo siento, debes completar todos los campos.';
+$lang['resendpwdnouser'] = 'Lo siento, no se encuentra este usuario en nuestra base de datos.';
+$lang['resendpwdbadauth'] = 'Lo siento, este código de autenticación no es válido. Asegúrate de haber usado el enlace de confirmación entero.';
+$lang['resendpwdconfirm'] = 'Un enlace para confirmación ha sido enviado por correo electrónico.';
+$lang['resendpwdsuccess'] = 'Tu nueva contraseña ha sido enviada por correo electrónico.';
+$lang['license'] = 'Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia:';
+$lang['licenseok'] = 'Nota: Al editar esta página, estás de acuerdo en autorizar su contenido bajo la siguiente licencia:';
+$lang['searchmedia'] = 'Buscar archivo:';
+$lang['searchmedia_in'] = 'Buscar en %s';
+$lang['txt_upload'] = 'Selecciona el archivo a subir';
+$lang['txt_filename'] = 'Subir como (opcional)';
+$lang['txt_overwrt'] = 'Sobreescribir archivo existente';
+$lang['lockedby'] = 'Actualmente bloqueado por';
+$lang['lockexpire'] = 'El bloqueo expira en';
+$lang['willexpire'] = 'Tu bloqueo para editar esta página expira en un minuto.\nPara evitar conflictos usa el botón previsualizar para reiniciar el contador de tiempo.';
+$lang['notsavedyet'] = 'Los cambios que no se han guardado se perderán.\n¿Realmente quieres continuar?';
+$lang['rssfailed'] = 'Se ha producido un error mientras se leían los datos de este feed: ';
+$lang['nothingfound'] = 'No se ha encontrado nada.';
+$lang['mediaselect'] = 'Archivos Multimedia';
+$lang['fileupload'] = 'Subida de archivos multimedia';
+$lang['uploadsucc'] = 'El archivo se ha subido satisfactoriamente';
+$lang['uploadfail'] = 'La subida del fichero ha fallado. ¿Permisos equivocados?';
+$lang['uploadwrong'] = 'Subida de fichero denegada. ¡Los ficheros con esta extensión están prohibidos!';
+$lang['uploadexist'] = 'El fichero ya existe. No se ha hecho nada.';
+$lang['uploadbadcontent'] = 'El contenido de la subida no coincide con la extensión de fichero %s';
+$lang['uploadspam'] = 'La subida ha sido bloqueada por una lista negra de spam';
+$lang['uploadxss'] = 'La subida ha sido bloqueada por contenido posiblemente malicioso';
+$lang['uploadsize'] = 'El fichero subido es demasiado grande. (max. %s)';
+$lang['deletesucc'] = 'El fichero "%s" ha sido borrado.';
+$lang['deletefail'] = '"%s" no pudo ser borrado; verifique los permisos.';
+$lang['mediainuse'] = 'El fichero "%s" no ha sido borrado, aún está en uso.';
+$lang['namespaces'] = 'Espacios de nombres';
+$lang['mediafiles'] = 'Ficheros disponibles en';
+$lang['js']['searchmedia'] = 'Buscar archivos';
+$lang['js']['keepopen'] = 'Mantener la ventana abierta luego de seleccionar';
+$lang['js']['hidedetails'] = 'Ocultar detalles';
+$lang['js']['nosmblinks'] = 'El enlace a recursos compartidos de Windows sólo funciona en Microsoft Internet Explorer.
+Lo que sí puedes hacer es copiar y pegar el enlace.';
+$lang['js']['linkwiz'] = 'Asistente de enlaces';
+$lang['js']['linkto'] = 'Enlazar a:';
+$lang['js']['del_confirm'] = '¿Quieres realmente borrar lo seleccionado?';
+$lang['js']['mu_btn'] = 'Subir varios archivos a la vez';
+$lang['mediausage'] = 'Use la siguiente sintaxis para hacer referencia a este fichero:';
+$lang['mediaview'] = 'Ver el fichero original';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Subir aquí un fichero al espacio de nombres actual. Para crear sub-espacios de nombres, antepóngalos al nombre de fichero separándolos por dos puntos (:) en "Subir como".';
+$lang['mediaextchange'] = 'Extensión del fichero cambiada de .%s a .%s!';
+$lang['reference'] = 'Referencias para';
+$lang['ref_inuse'] = 'El fichero no puede ser borrado, porque todavía se está usando en las siguientes páginas:';
+$lang['ref_hidden'] = 'Algunas referencias están en páginas sobre las que no tienes permiso de lectura';
+$lang['hits'] = 'Entradas';
+$lang['quickhits'] = 'Páginas que coinciden';
+$lang['toc'] = 'Tabla de Contenidos';
+$lang['current'] = 'actual';
+$lang['yours'] = 'Tu versión';
+$lang['diff'] = 'Muestra diferencias a la versión actual';
+$lang['diff2'] = 'Muestra las diferencias entre las revisiones seleccionadas';
+$lang['line'] = 'Línea';
+$lang['breadcrumb'] = 'Traza';
+$lang['youarehere'] = 'Estás aquí';
+$lang['lastmod'] = 'Última modificación';
+$lang['by'] = 'por';
+$lang['deleted'] = 'borrado';
+$lang['created'] = 'creado';
+$lang['restored'] = 'se ha restaurado la vieja versión';
+$lang['external_edit'] = 'editor externo';
+$lang['summary'] = 'Resumen de la edición';
+$lang['noflash'] = 'Para mostrar este contenido es necesario el <a href="http://www.adobe.com/products/flashplayer/">Plugin Adobe Flash</a>.';
+$lang['download'] = 'Descargar trozo de código fuente';
+$lang['mail_newpage'] = 'página añadida:';
+$lang['mail_changed'] = 'página cambiada:';
+$lang['mail_new_user'] = 'nuevo usuario:';
+$lang['mail_upload'] = 'archivo subido:';
+$lang['qb_bold'] = 'Negrita';
+$lang['qb_italic'] = 'Itálica';
+$lang['qb_underl'] = 'Subrayado';
+$lang['qb_code'] = 'Código';
+$lang['qb_strike'] = 'Tachado';
+$lang['qb_h1'] = 'Título 1';
+$lang['qb_h2'] = 'Título 2';
+$lang['qb_h3'] = 'Título 3';
+$lang['qb_h4'] = 'Título 4';
+$lang['qb_h5'] = 'Título 5';
+$lang['qb_h'] = 'Título';
+$lang['qb_hs'] = 'Selecciona el título';
+$lang['qb_hplus'] = 'Título alto';
+$lang['qb_hminus'] = 'Título bajo';
+$lang['qb_hequal'] = 'Título del mismo nivel';
+$lang['qb_link'] = 'Enlace interno';
+$lang['qb_extlink'] = 'Enlace externo';
+$lang['qb_hr'] = 'Línea horizontal';
+$lang['qb_ol'] = 'Ãtem de lista ordenada';
+$lang['qb_ul'] = 'Ãtem de lista desordenada';
+$lang['qb_media'] = 'Añadir Imágenes u otros ficheros';
+$lang['qb_sig'] = 'Insertar firma';
+$lang['qb_smileys'] = 'Sonrisas';
+$lang['qb_chars'] = 'Caracteres especiales';
+$lang['upperns'] = 'Saltar al espacio de nombres superior';
+$lang['admin_register'] = 'Añadir nuevo usuario';
+$lang['metaedit'] = 'Editar metadatos';
+$lang['metasaveerr'] = 'La escritura de los metadatos ha fallado';
+$lang['metasaveok'] = 'Los metadatos han sido guardados';
+$lang['img_backto'] = 'Volver a';
+$lang['img_title'] = 'Título';
+$lang['img_caption'] = 'Epígrafe';
+$lang['img_date'] = 'Fecha';
+$lang['img_fname'] = 'Nombre de fichero';
+$lang['img_fsize'] = 'Tamaño';
+$lang['img_artist'] = 'Fotógrafo';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Cámara';
+$lang['img_keywords'] = 'Palabras claves';
+$lang['subscribe_success'] = '%s ha sido añadido a la lista de notificación de cambios de %s';
+$lang['subscribe_error'] = 'Ha habido un error al agregar %s a la lista de notificación de cambios de %s';
+$lang['subscribe_noaddress'] = 'No hay ninguna dirección de correo electrónico asociada con tu nombre de usuario, no puedes ser añadido a la lista de notificación de cambios';
+$lang['unsubscribe_success'] = '%s ha sido eliminado de la lista de notificación de cambios de %s';
+$lang['unsubscribe_error'] = 'Ha habido un error al eliminar %s de la lista de notificación de cambios de %s';
+$lang['authmodfailed'] = 'Está mal configurada la autenticación de usuarios. Por favor, avisa al administrador del wiki.';
+$lang['authtempfail'] = 'La autenticación de usuarios no está disponible temporalmente. Si esta situación persiste, por favor avisa al administrador del wiki.';
+$lang['i_chooselang'] = 'Elija su idioma';
+$lang['i_installer'] = 'Instalador de DokuWiki';
+$lang['i_wikiname'] = 'Nombre del wiki';
+$lang['i_enableacl'] = 'Habilitar ACL (recomendado) (ACL: lista de control de acceso)';
+$lang['i_superuser'] = 'Super-usuario';
+$lang['i_problems'] = 'El instalador encontró algunos problemas, se muestran abajo. No se puede continuar la instalación hasta que usted no los corrija.';
+$lang['i_modified'] = 'Por razones de seguridad este script sólo funcionará con una instalación nueva y no modificada de Dokuwiki. Usted debe extraer nuevamente los ficheros del paquete bajado, o bien consultar las <a href="http://dokuwiki.org/install">instrucciones de instalación de Dokuwiki</a> completas.';
+$lang['i_funcna'] = 'La función de PHP <code>%s</code> no está disponible. Tal vez su proveedor de hosting la ha deshabilitado por alguna razón?';
+$lang['i_phpver'] = 'Su versión de PHP <code>%s</code> es menor que la necesaria <code>%s</code>. Es necesario que actualice su instalación de PHP.';
+$lang['i_permfail'] = 'DokuWili no puede escribir <code>%s</code>. Es necesario establecer correctamente los permisos de este directorio!';
+$lang['i_confexists'] = '<code>%s</code> ya existe';
+$lang['i_writeerr'] = 'Imposible crear <code>%s</code>. Se necesita que usted controle los permisos del fichero/directorio y que cree el fichero manualmente.';
+$lang['i_badhash'] = 'dokuwiki.php no reconocido o modificado (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valor ilegal o vacío';
+$lang['i_success'] = 'La configuración ha concluido correctamente. Ahora puede eliminar el archivo install.php. Visite <a href="doku.php">su nuevo DokuWiki</a>.';
+$lang['i_failure'] = 'Han ocurrido algunos errores durante la escritura de los ficheros de configuración. Puede ser que necesite corregirlos manualmente antes de poder usar <a href="doku.php">su nuevo DokuWiki</a>.';
+$lang['i_policy'] = 'Política de ACL inicial';
+$lang['i_pol0'] = 'Wiki abierto (leer, escribir y subir archivos para todos)';
+$lang['i_pol1'] = 'Wiki público (leer para todos, escribir y subir archivos para usuarios registrados únicamente)';
+$lang['i_pol2'] = 'Wiki cerrado (leer, escribir y subir archivos para usuarios registrados únicamente)';
+$lang['i_retry'] = 'Reintentar';
+$lang['mu_intro'] = 'Puedes subir varios archivos a la vez desde aquí. Pulsa el botón del navegador para agregarlos a la cola. Pulsa "subir archivo" para proceder.';
+$lang['mu_gridname'] = 'Nombre de archivo';
+$lang['mu_gridsize'] = 'Tamaño';
+$lang['mu_gridstat'] = 'Estado';
+$lang['mu_namespace'] = 'Espacio de nombres';
+$lang['mu_browse'] = 'Buscar';
+$lang['mu_toobig'] = 'demasiado grande';
+$lang['mu_ready'] = 'listo para subir';
+$lang['mu_done'] = 'completado';
+$lang['mu_fail'] = 'falló';
+$lang['mu_authfail'] = 'la sesión caducó';
+$lang['mu_progress'] = '@PCT@% transferido';
+$lang['mu_filetypes'] = 'Tipos de archivos permitidos';
+$lang['mu_info'] = 'Archivos subidos:';
+$lang['mu_lasterr'] = 'Último error:';
+$lang['recent_global'] = 'Actualmente estás viendo los cambios dentro del namespace <b>%s</b>. También puedes <a href="%s">ver los cambios recientes en el wiki completo</a>.';
+$lang['years'] = '%d años atrás';
+$lang['months'] = '%d meses atrás';
+$lang['weeks'] = '%d semanas atrás';
+$lang['days'] = '%d días atrás';
+$lang['hours'] = '%d horas atrás';
+$lang['minutes'] = '%d minutos atrás';
+$lang['seconds'] = '%d segundos atrás';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt
new file mode 100644
index 000000000..e151bf7e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt
@@ -0,0 +1,3 @@
+====== Página bloqueada ======
+
+Esta página está actualmente bloqueada porque la está editando otro usuario. Tienes que esperar a que termine de editarla o el bloqueo expire. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt
new file mode 100644
index 000000000..a8d9be7a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt
@@ -0,0 +1,3 @@
+====== Login ======
+
+¡Actualmente no estás identificado! Introduce abajo tus datos de identificación para abrir una sesión. Necesitas tener las cookies activadas para identificarte.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt
new file mode 100644
index 000000000..893ec1cb9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt
@@ -0,0 +1,17 @@
+Se ha cambiado o añadido una página en tu DokuWiki. Aquí están los detalles:
+
+Fecha : @DATE@
+Navegador : @BROWSER@
+Dirección-IP : @IPADDRESS@
+Nombre de Host : @HOSTNAME@
+Revisión Vieja: @OLDPAGE@
+Revisión Nueva : @NEWPAGE@
+Resumen de la edición: @SUMMARY@
+Usuario : @USER@
+
+@DIFF@
+
+
+--
+Este correo ha sido generado por DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt
new file mode 100644
index 000000000..d119ca29d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt
@@ -0,0 +1,3 @@
+====== Este tema no existe todavía ======
+
+Has seguido un enlace a un tema que no existe todavía. Puedes crearlo usando el botón ''Crea esta página''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt
new file mode 100644
index 000000000..42ee6b5c2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt
@@ -0,0 +1,4 @@
+====== No existe esta revision ======
+
+La revisión especificada no existe. Usa el botón ''Revisiones antiguas'' para una lista de revisiones antiguas de este documento.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt
new file mode 100644
index 000000000..b4d5a2ed1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt
@@ -0,0 +1,4 @@
+====== Previsualización ======
+
+Esto es una previsualización de cómo aparecerá tu texto. Recuerda: **no está guardado** todavía!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt
new file mode 100644
index 000000000..c3dad116e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt
@@ -0,0 +1,16 @@
+Hola @FULLNAME@!
+
+Alguien solicitó una nueva contraseña para su nombre de
+usuario @TITLE@ en @DOKUWIKIURL@
+
+Si usted no solicitó una nueva contraseña, simplemente ignore este email.
+
+Para confirmar que la solicitud fue realizada realmente por usted,
+por favor use el siguiente enlace.
+
+@CONFIRM@
+
+
+--
+Este mail ha sido generado por DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt
new file mode 100644
index 000000000..461b745fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt
@@ -0,0 +1 @@
+Esta página es de solo lectura. Puedes ver la fuente pero no puedes cambiarla. Pregunta a tu administrador si crees que esto es incorrecto.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt
new file mode 100644
index 000000000..432def26f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt
@@ -0,0 +1,5 @@
+====== Cambios Recientes ======
+
+Las siguientes páginas han sido modificadas recientemente.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt
new file mode 100644
index 000000000..98248269d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt
@@ -0,0 +1,3 @@
+====== Registro como nuevo usuario ======
+
+Completa toda la información del formulario para crear un nuevo usuario en este wiki. Asegúrate que escribes una **dirección de e-mail válida** puesto que allí se enviará tu contraseña. El nombre de usuario ha de ser un nombre válido según [[doku>pagename|pagename]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt
new file mode 100644
index 000000000..e773e3200
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt
@@ -0,0 +1,14 @@
+Un nuevo usuario ha sido registrado. Aquí están los detalles:
+
+Usuario : @NEWUSER@
+Nombre completo : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Fecha : @DATE@
+Navegador : @BROWSER@
+Dirección-IP : @IPADDRESS@
+Nombre del host : @HOSTNAME@
+
+--
+Este mail ha sido generado por DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt
new file mode 100644
index 000000000..1d74e79bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Enviar nueva contraseña ======
+
+Completa la información requerida abajo para obtener una nueva contraseña para tu cuenta de usuario en este wiki. La nueva contraseña te será enviada a la dirección de mail que está registrada.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt
new file mode 100644
index 000000000..b093e857f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt
@@ -0,0 +1,4 @@
+====== Revisiones Antiguas ======
+
+Estas son revisiones más antiguas del documento actual. Para volver a una revisión antigua selecciónala de abajo, pulsa ''Edita esta página'' y guárdala.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt
new file mode 100644
index 000000000..47a1a90dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt
@@ -0,0 +1,5 @@
+====== Búsqueda ======
+
+Puedes encontrar los resultados de tu búsqueda abajo. Si no has encontrado lo que buscabas, puedes crear una nueva página con tu consulta utilizando el botón ''Crea esta página''.
+
+===== Resultados ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt
new file mode 100644
index 000000000..c84bbc01d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt
@@ -0,0 +1,2 @@
+**¡Esta es una revisión vieja del documento!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt
new file mode 100644
index 000000000..256908925
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt
@@ -0,0 +1,171 @@
+# Esta es una lista de palabras que estan ignoradas por el indexador, una palabra por línea
+# Cuando se edita este archivo, asegúrese de usar la línea de terminaciones UNIX (una sola nueva línea)
+# No necesita incluir palabras cortas con 3 caracteres - estas son ignoradas de todos modos
+#Esta lista esta basada en las que encontramos en la siguiente url http://www.ranks.nl/stopwords/
+una
+unas
+unos
+uno
+sobre
+todo
+también
+tras
+otro
+algún
+alguno
+alguna
+algunos
+algunas
+ser
+soy
+eres
+somos
+sois
+estoy
+esta
+estamos
+estais
+estan
+como
+para
+atras
+porque
+por
+qué
+estado
+estaba
+ante
+antes
+siendo
+ambos
+pero
+poder
+puede
+puedo
+podemos
+podeis
+pueden
+fui
+fue
+fuimos
+fueron
+hacer
+hago
+hace
+hacemos
+haceis
+hacen
+cada
+fin
+incluso
+primero
+desde
+conseguir
+consigo
+consigue
+consigues
+conseguimos
+consiguen
+voy
+va
+vamos
+vais
+van
+vaya
+gueno
+tener
+tengo
+tiene
+tenemos
+teneis
+tienen
+las
+los
+aqui
+mio
+tuyo
+ellos
+ellas
+nos
+nosotros
+vosotros
+vosotras
+dentro
+solo
+solamente
+saber
+sabes
+sabe
+sabemos
+sabeis
+saben
+ultimo
+largo
+bastante
+haces
+muchos
+aquellos
+aquellas
+sus
+entonces
+tiempo
+verdad
+verdadero
+verdadera
+cierto
+ciertos
+cierta
+ciertas
+intentar
+intento
+intenta
+intentas
+intentamos
+intentais
+intentan
+dos
+bajo
+arriba
+encima
+usar
+uso
+usas
+usa
+usamos
+usais
+usan
+emplear
+empleo
+empleas
+emplean
+ampleamos
+empleais
+valor
+muy
+era
+eras
+eramos
+eran
+modo
+bien
+cual
+cuando
+donde
+mientras
+quien
+con
+entre
+sin
+trabajo
+trabajar
+trabajas
+trabaja
+trabajamos
+trabajais
+trabajan
+podria
+podrias
+podriamos
+podrian
+podriais
+aquel
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt
new file mode 100644
index 000000000..05be8557a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt
@@ -0,0 +1,23 @@
+¡Hola!
+
+La página @PAGE@ en el wiki @TITLE@ ha cambiado.
+Los cambios son los siguientes:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Fecha : @DATE@
+Usuario : @USER@
+Resumen de la edición: @SUMMARY@
+Revisión vieja: @OLDPAGE@
+Revisión nueva: @NEWPAGE@
+
+Para cacelar las notificaciones, ingresa al wiki
+en @DOKUWIKIURL@ y luego visita la página
+@NEWPAGE@
+y elige 'Cancelar suscripción'.
+
+--
+Este mail fue generado por DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt
new file mode 100644
index 000000000..822e558f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Actualiza el perfil de tu cuenta de usuario ======
+
+Sólo necesitas completar aquellos campos que quieres cambiar. No puedes cambiar tu nombre de usuario.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt
new file mode 100644
index 000000000..9d2f980d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt
@@ -0,0 +1,14 @@
+Se ha subido un fichero a tu DokuWuki. Estos son los detalles:
+
+Archivo : @MEDIA@
+Fecha : @DATE@
+Navegador : @BROWSER@
+Dirección IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Tamaño : @SIZE@
+MIME Type : @MIME@
+Usuario : @USER@
+
+--
+Este correo fue generado por DokuWiki en
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt
new file mode 100644
index 000000000..739a1b76b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM bloqueado ======
+
+Tus cambios **no** se han guardado porque contienen una o más palabras prohibidas. Si has intentado spamear el Wiki: ¡Perro malo! Si crees que es un error contacta con el administrador de este Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt
new file mode 100644
index 000000000..1934f482b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt
@@ -0,0 +1,4 @@
+====== Administreerimine ======
+
+Alljärgnevalt leiate nimekirja administratiivsetest tegevustest, mida DokuWiki võimaldab.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt
new file mode 100644
index 000000000..4b405cdfd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt
@@ -0,0 +1,4 @@
+====== Siia lehele lingiga haagitud lehed ======
+
+Nimekiri nendest lehtedest, kuskohalt Sa lingi abil siia lehele saad.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt
new file mode 100644
index 000000000..cf9f571ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt
@@ -0,0 +1,6 @@
+====== Uus versioon täitsa olemas ======
+
+Sellest dokumendist, mis Sa toimetasid on tegelikult juba olemas ka uuem versioon. Selline asi juhtub siis kui sel ajal kui Sina vaikselt oma dokumendi kallal nokitsesid tegi keegi juba kähku omad Muutused sealsamas dokumendis ära.
+
+Vaata hoolikalt allpool näidatud erinevusi ja siis otsusta millise versiooni alles jätad. Kui Sa peaks valima ''salvesta'', siis juhtubki selline lugu, et Sinu versioon salvestatakse. kui Sa aga peaks klõpsama ''katkesta'' säilib hetkel kehtiv versioon.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt
new file mode 100644
index 000000000..bb564ac57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt
@@ -0,0 +1,3 @@
+====== Sul pole ligipääsuluba ======
+
+Kahju küll, aga sinu tublidusest ei piisa, et edasi liikuda, selleks on vastavaid õigusi vaja.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt
new file mode 100644
index 000000000..d10a93b84
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt
@@ -0,0 +1,4 @@
+====== Erinevused ======
+
+Siin näed erinevusi valitud versiooni ja hetkel kehtiva lehekülje vahel.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt
new file mode 100644
index 000000000..6669f3be5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt
@@ -0,0 +1,6 @@
+====== Leidsin katkenud toimetamise ======
+
+Sinu viimane toimetamissessioon ei lõppenud eelmine kord korrapäraselt. DokuWiki automaatselt salvestas Sinu pooliku töö, mida võid nüüd kasutada töö jätkamiseks. Allpool näed teksti, mis suudeti päästa.
+
+Kas tahad //taastada// kaotused, //kustutada// poolik töö või //üldse mitte midagi teha//?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt
new file mode 100644
index 000000000..6167c8552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt
@@ -0,0 +1,2 @@
+Toimeta seda lehte ja klõpsa ''Salvesta'' peal. Wikis teksti kujundamise vahenditega tutvumiseks, st. kuidas teha rasvast ja kaldkirja jne., vaata [[wiki:syntax|süntaksitutvustus lehelt]]. Kui Sa tahad midagi testida, saad seda teha [[playground:playground|mängualal]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt
new file mode 100644
index 000000000..3ab6d7161
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt
@@ -0,0 +1,3 @@
+**Sa oled omale tõmmanud selle dokumendi vana versiooni!** Kui Sa selle salvestad sünnib nende andmetega uus versioon.
+----
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt
new file mode 100644
index 000000000..8d2e25a68
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt
@@ -0,0 +1,3 @@
+====== Sisukord ======
+
+See siin on nimekiri kõigist saadaval olevatest lehtedest järjestatud [[doku>namespaces|alajaotuste]] järgi.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php
new file mode 100644
index 000000000..4d3f10bdc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php
@@ -0,0 +1,214 @@
+<?php
+/**
+ * Estonian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oliver S6ro <seem.iges@mail.ee>
+ * @author Aari Juhanson <aari@vmg.vil.ee>
+ * @author Kaiko Kaur <kaiko@kultuur.edu.ee>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';//&bdquo;
+$lang['doublequoteclosing'] = '“';//&ldquo;
+$lang['singlequoteopening'] = '‚';//&sbquo;
+$lang['singlequoteclosing'] = '‘';//&lsquo;
+
+$lang['btn_edit'] = 'Toimeta seda lehte';
+$lang['btn_source'] = 'Näita lehepõhja';
+$lang['btn_show'] = 'Näita lehte';
+$lang['btn_create'] = 'Tekita selle lingi alla leht';
+$lang['btn_search'] = 'Otsi';
+$lang['btn_save'] = 'Salvesta';
+$lang['btn_preview']= 'Eelvaade';
+$lang['btn_top'] = 'Tagasi lehe algusesse';
+$lang['btn_revs'] = 'Eelmised versioonid';
+$lang['btn_recent'] = 'Viimased muudatused';
+$lang['btn_upload'] = 'Lae üles';
+$lang['btn_cancel'] = 'Katkesta';
+$lang['btn_index'] = 'Sisukord';
+$lang['btn_secedit']= 'Toimeta';
+$lang['btn_login'] = 'Logi sisse';
+$lang['btn_logout'] = 'Logi välja';
+$lang['btn_admin'] = 'Administreeri';
+$lang['btn_update'] = 'Uuenda';
+$lang['btn_delete'] = 'Kustuta';
+$lang['btn_newer'] = '<< varajasemad';
+$lang['btn_older'] = '>> hilisemad';
+$lang['btn_back'] = 'Tagasi';
+$lang['btn_backtomedia'] = 'Tagasi faili valikusse';
+$lang['btn_profile'] = 'Minu info';
+$lang['btn_reset'] = 'Taasta';
+$lang['btn_resendpwd'] = 'Saada uus parool';
+$lang['btn_draft'] = 'Toimeta mustandit';
+$lang['btn_recover'] = 'Taata mustand';
+$lang['btn_draftdel'] = 'Kustuta mustand';
+$lang['newpass'] = 'Uus parool';
+$lang['oldpass'] = 'Vana parool';
+$lang['passchk'] = 'Korda uut parooli';
+$lang['profile'] = 'Kasutaja info';
+$lang['minoredit'] = 'Ebaolulised muudatused';
+$lang['draftdate'] = 'Mustand automaatselt salvestatud';
+$lang['regsuccess2'] = 'Kasutaja sai tehtud.';
+$lang['regbadpass'] = 'Uus parool on kirjutatud erinevalt. Proovi uuesti.';
+$lang['uploadexist'] = 'Fail on juba olemas. Midagi ei muudetud.';
+$lang['deletesucc'] = 'Fail nimega "%s" sai kustutatud.';
+$lang['deletefail'] = 'Faili nimega "%s" ei kustutatud (kontrolli õigusi).';
+$lang['mediainuse'] = 'Faili nimega "%s" ei kustutatud, sest see on kasutuses.';
+$lang['js']['keepopen'] = 'Jäta aken peale valiku sooritamist avatuks';
+$lang['js']['hidedetails'] = 'Peida detailid';
+$lang['mediausage'] = 'Kasuta järgmist kirjapilti sellele failile viitamaks:';
+$lang['mediaview'] = 'Vaata faili algsel kujul.';
+$lang['mediaroot'] = 'juur';
+$lang['mediaupload'] = 'Lae fail sellesse nimeruumi (kataloogi). Et tekitada veel alam nimeruum kasuta koolonit Wiki nimes.';
+$lang['mediaextchange'] = 'Faili laiend .%s-st %s-ks!';
+$lang['ref_inuse'] = 'Seda faili ei saa kustutada, sest teda kasutavad järgmised lehed:';
+$lang['ref_hidden'] = 'Mõned viidad failile on lehtedel, millele sul ei ole ligipääsu';
+$lang['youarehere'] = 'Sa oled siin';
+$lang['mail_new_user'] = 'Uus kasutaja:';
+$lang['qb_strike'] = 'Läbijoonitud tekst';
+$lang['qb_smileys'] = 'Emotikonid';
+$lang['qb_chars'] = 'Erisümbolid';
+$lang['admin_register'] = 'Lisa kasutaja';
+
+
+#$lang['reference'] = '';
+#$lang['btn_backlink'] = '';
+#$lang['profna'] = '';
+$lang['btn_subscribe'] = 'Jälgi seda lehte (teated meilile)';
+$lang['btn_unsubscribe'] = 'Lõpeta lehe jälgimine';
+$lang['profnochange'] = 'Muutused puuduvad.';
+$lang['profnoempty'] = 'Tühi nimi ega meiliaadress pole lubatud.';
+$lang['profchanged'] = 'Kasutaja info edukalt muudetud';
+$lang['pwdforget'] = 'Unustasid parooli? Tee uus';
+$lang['resendna'] = 'See wiki ei toeta parooli taassaatmist.';
+$lang['resendpwd'] = 'Saada uus parool';
+$lang['resendpwdmissing'] = 'Khmm... Sa pead täitma kõik väljad.';
+$lang['resendpwdnouser'] = 'Aga sellist kasutajat ei ole.';
+$lang['resendpwdbadauth'] = 'See autentimiskood ei ole õige. Kontrolli, et kopeerisid terve lingi.';
+$lang['resendpwdconfirm'] = 'Kinnituslink saadeti meilile.';
+$lang['resendpwdsuccess'] = 'Uus parool saadeti Sinu meilile.';
+$lang['txt_overwrt'] = 'Kirjutan olemasoleva faili üle';
+$lang['metaedit'] = 'Muuda lisainfot';
+$lang['metasaveerr'] = 'Lisainfo salvestamine läks untsu.';
+$lang['metasaveok'] = 'Lisainfo salvestatud';
+$lang['img_backto'] = 'Tagasi';
+$lang['img_title'] = 'Tiitel';
+$lang['img_caption'] = 'Kirjeldus';
+$lang['img_date'] = 'Kuupäev';
+$lang['img_fname'] = 'Faili nimi';
+$lang['img_fsize'] = 'Suurus';
+$lang['img_artist'] = 'Autor';
+#$lang['img_copyr'] = '';
+$lang['img_format'] = 'Formaat';
+$lang['img_camera'] = 'Kaamera';
+$lang['img_keywords'] = 'Võtmesõnad';
+
+$lang['i_chooselang'] = 'Vali keel';
+$lang['i_installer'] = 'DokuWiki paigaldaja';
+$lang['i_wikiname'] = 'Wiki nimi';
+$lang['i_enableacl'] = 'Kas lubada kasutajate haldus (soovitatav)';
+$lang['i_superuser'] = 'Superkasutaja';
+$lang['i_problems'] = 'Paigaldaja leidis mõned vead, mis on allpool välja toodud. Enne vigade eemaldamist ei saa jätkata.';
+$lang['i_modified'] = 'Õnnetuste vältimiseks läheb see skript käima ainult värskelt paigaldatud ja muutmata Dokuwiki peal.
+ Sa peaksid ilmselt kogu koodi uuesti lahti pakkima. Vaata ka <a href="http://dokuwiki.org/install">Dokuwiki installeerimis juhendit</a>';
+$lang['i_funcna'] = 'PHP funktsiooni <code>%s</code> ei ole olemas.võibolla sinu serveri hooldaja on selle mingil põhjusel keelanud?';
+$lang['i_permfail'] = 'Dokuwiki ei saa kirjutada faili <code>%s</code>. Kontrolli serveris failide õigused üle.';
+$lang['i_confexists'] = '<code>%s</code> on juba olemas';
+$lang['i_writeerr'] = 'Faili <code>%s</code> ei lubata tekitada. Kontrolli kataloogi ja faili õigusi.';
+#$lang['i_badhash'] = '';
+$lang['i_badval'] = '<code>%s</code> - lubamatu või tühi väärtus';
+$lang['i_success'] = 'Seadistamine on õnnelikult lõpule viidud. Sa võid nüüd kustutada faili install.php. Alusta oma <a href="doku.php">uue DokuWiki</a> täitmist.';
+$lang['i_failure'] = 'Konfiguratsiooni faili kirjutamisel esines vigu. Võimalik, et pead need käsitsi parandama enne <a href="doku.php">uue DokuWiki</a> täitma asumist.';
+$lang['i_policy'] = 'Wiki õiguste algne poliitika';
+$lang['i_pol0'] = 'Avatud (lugemine, kirjutamine ja üleslaadimine kõigile lubatud)';
+$lang['i_pol1'] = 'Avalikuks lugemiseks (lugeda saavad kõik, kirjutada ja üles laadida vaid registreeritud kasutajad)';
+$lang['i_pol2'] = 'Suletud (kõik õigused, kaasaarvatud lugemine on lubatud vaid registreeritud kasutajatele)';
+
+$lang['loggedinas'] = 'Logis sisse kui';
+$lang['user'] = 'Kasutaja';
+$lang['pass'] = 'Parool';
+$lang['remember'] = 'Pea mind meeles';
+$lang['fullname'] = 'Täielik nimi';
+$lang['email'] = 'E-post';
+$lang['register'] = 'Registreeri uus kasutaja';
+$lang['badlogin'] = 'Oops, Sinu kasutajanimi või parool oli vale.';
+
+$lang['regmissing'] = 'Kõik väljad tuleb ära täita.';
+$lang['reguexists'] = 'Tegelikult on sellise nimega kasutaja juba olemas.';
+$lang['regsuccess'] = 'Kasutaja sai tehtud. Parool saadeti Sulle e-posti aadressil.';
+$lang['regmailfail']= 'Ilmselt tekkis e-posti teel parooli saatmisel mingi tõrge. Palun suhtle sel teemal
+oma serveri administraatoriga!';
+$lang['regbadmail'] = 'Tundub, et Sinu antud e-posti aadress ei toimi - kui Sa arvad, et tegemist on
+ekstitusega, suhtle oma serveri administraatoriga';
+$lang['regpwmail'] = 'Sinu DokuWiki parool';
+$lang['reghere'] = 'Sul ei olegi veel kasutajakontot? No aga tekita see siis endale!';
+
+$lang['txt_upload'] = 'Vali fail, mida üles laadida';
+$lang['txt_filename'] = 'Siseta oma Wikinimi (soovituslik)';
+$lang['lockedby'] = 'Praegu on selle lukustanud';
+$lang['lockexpire'] = 'Lukustus aegub';
+$lang['willexpire'] = 'Teie lukustus selle lehe toimetamisele aegub umbes minuti pärast.\nIgasugu probleemide vältimiseks kasuta eelvaate nuppu, et lukustusarvesti taas tööle panna.';
+
+$lang['notsavedyet'] = 'Sul on seal salvestamata muudatusi, mis kohe kõige kaduva teed lähevad.\nKas Sa ikka tahad edasi liikuda?';
+$lang['rssfailed'] = 'Sinu soovitud info ammutamisel tekkis viga: ';
+$lang['nothingfound']= 'Oops, aga mitte muhvigi ei leitud.';
+
+$lang['mediaselect'] = 'Hunnik faile';
+$lang['fileupload'] = 'Faili üleslaadimine';
+$lang['uploadsucc'] = 'Üleslaadimine läks ootuspäraselt hästi';
+$lang['uploadfail'] = 'Üleslaadimine läks nässu. Äkki pole Sa selleks lihtsalt piisavalt võimukas tegija?';
+$lang['uploadwrong'] = 'Ei saa Sa midagi üles laadida. Oops, aga seda tüüpi faili sul lihtsalt ei lubata üles laadida';
+$lang['namespaces'] = 'Alajaotus';
+$lang['mediafiles'] = 'Failid on Sulle kättesaadavad';
+
+$lang['hits'] = 'Päringu tabamused';
+$lang['quickhits'] = 'Päringule vastavad lehed';
+$lang['toc'] = 'Sisujuht';
+$lang['current'] = 'Hetkel kehtiv';
+$lang['yours'] = 'Sinu versioon';
+$lang['diff'] = 'Näita erinevusi hetkel kehtiva versiooniga';
+$lang['line'] = 'Rida';
+$lang['breadcrumb'] = 'Käidud rada';
+$lang['lastmod'] = 'Viimati muutnud';
+$lang['by'] = 'persoon';
+$lang['deleted'] = 'eemaldatud';
+$lang['created'] = 'tekitatud';
+$lang['restored'] = 'vana versioon taastatud';
+$lang['summary'] = 'kokkuvõte muudatustest';
+
+$lang['mail_newpage'] = 'leht lisatud:';
+$lang['mail_changed'] = 'leht muudetud';
+
+$lang['nosmblinks'] = 'Windowsis võrguarvutiga ühendamine toimib ainult Internet Exploreris ja
+sisevõrgus.\nAga Sa saad õnneks omale lingi kopeerida ja hiljem kuhugi kleepida.';
+
+$lang['qb_bold'] = 'Rasvane kiri';
+$lang['qb_italic'] = 'Kaldkiri';
+$lang['qb_underl'] = 'Alajoonega kiri';
+$lang['qb_code'] = 'Koodi tekst';
+$lang['qb_h1'] = '1. astme pealkiri';
+$lang['qb_h2'] = '2. astme pealkiri';
+$lang['qb_h3'] = '3. astme pealkiri';
+$lang['qb_h4'] = '4. astme pealkiri';
+$lang['qb_h5'] = '5. astme pealkiri';
+$lang['qb_link'] = 'Siselink';
+$lang['qb_extlink'] = 'Välislink';
+$lang['qb_hr'] = 'Horisontaalne vahejoon';
+$lang['qb_ol'] = 'Nummerdatud nimikiri';
+$lang['qb_ul'] = 'Mummuga nimekiri';
+$lang['qb_media'] = 'Lisa pilte ja muid faile';
+$lang['qb_sig'] = 'Lisa allkiri!';
+
+$lang['authmodfailed'] = 'Vigane kasutajate autentimise konfiguratsioon. Palun teavita sellest serveri haldajat.';
+$lang['authtempfail'] = 'Kasutajate autentimine on ajutiselt rivist väljas. Kui see olukord mõne aja jooksul ei parane, siis teavita sellest serveri haldajat.';
+
+$lang['js']['del_confirm']= 'Kas kustutame selle kirje?';
+
+#$lang['subscribe_success'] = '';
+#$lang['subscribe_error'] = '';
+#$lang['subscribe_noaddress'] = '';
+#$lang['unsubscribe_success'] = '';
+#$lang['unsubscribe_error'] = '';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt
new file mode 100644
index 000000000..0fd2743ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt
@@ -0,0 +1,3 @@
+====== Leht lukustatud ======
+
+Hetkel on see leht lukustatud kuna teine kasutaja toimetab tema kallal. Sa pead ootama kuni ta kas lõpetab või lukustus aegub.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt
new file mode 100644
index 000000000..3e746cd8d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt
@@ -0,0 +1,3 @@
+====== Logi sisse ======
+
+Hetkel pole Sa sisse logitud! Allpool saad sisestada kõik vajaliku, et sisse logida. Kui Sa oled oma arvuti taga ainukasutaja oleks hea kui Su arvutil oleks lubatud 'cookies', st. järgmine kord kui siia lehele tuled oled automaatselt sisse logitud.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt
new file mode 100644
index 000000000..3214584f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt
@@ -0,0 +1,16 @@
+Sinu lehte DokuWiki-s on muudetud. Alljärgnevalt detailid:
+
+Kuupäev : @DATE@
+Brauser : @BROWSER@
+IP-Aadress : @IPADDRESS@
+Arvuti nimi : @HOSTNAME@
+Eelnev versioon : @OLDPAGE@
+Uus versioon : @NEWPAGE@
+Toimeta kokkuvõtet: @SUMMARY@
+Kasutaja : @USER@
+
+@DIFF@
+
+
+--
+Selle e-posti tekitas Sulle DokuWiki @DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt
new file mode 100644
index 000000000..fb78e6434
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt
@@ -0,0 +1,3 @@
+====== Seda teemat veel ei ole ======
+
+Sa klikkisid lingile, mille all teemat veel pole. Selle saad Sa tekitada kasutades ''Tekita see leht nuppu''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt
new file mode 100644
index 000000000..42d204f2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt
@@ -0,0 +1,4 @@
+====== Sellist versiooni pole ======
+
+Sellist versiooni ei ole olemas. Selle dokumendi eelmiste versioonide nägemiseks klõpsa ''Eelmised versioonid'' nupul.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt
new file mode 100644
index 000000000..df45c65ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt
@@ -0,0 +1,3 @@
+====== Eelvaade ======
+
+Siin saad eelnevalt vaadata, milline su tekst välja näeks. Pea aga meeles, et see **ei ole veel salvestatud** !
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt
new file mode 100644
index 000000000..4f17140e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt
@@ -0,0 +1,12 @@
+Tere @FULLNAME@!
+
+Keegi on Sinu parooli uuendust soovinud kasutajale @TITLE@ (@DOKUWIKIURL@).
+
+Kui see ei olnud Sina, siis võid seda meili lihtsalt ignoreerida.
+Kinnitamaks uue parooli saamise soovi mine aadressile:
+
+@CONFIRM@
+
+--
+See meil on saadetud DokuWiki poolt
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt
new file mode 100644
index 000000000..64696f079
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt
@@ -0,0 +1,2 @@
+Seda lehte saad ainult lugeda. Saad küll vaadata lehe põhja aga muuta midagi ei saa. Suhtle oma serveri administraatoriga kui Sa millegagi rahul pole.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt
new file mode 100644
index 000000000..cf7a85420
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt
@@ -0,0 +1,5 @@
+====== Viimased muutused ======
+
+Viimati muudeti alljärgnevaid lehti.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt
new file mode 100644
index 000000000..9cd0b911d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt
@@ -0,0 +1,4 @@
+====== Registreeri uus kasutaja ======
+
+Täida alljärgnevad lüngad et me saaks Sulle Wikis kasutajakonto tekitada. Ole nii kena ja kindlasti pane kirja oma **kehtiv e-posti aadress** - Sinu uus parool saadetakse sellele aadressile. Sisselogimise nimi peaks olema kehtiv [[doku>pagename|lehenimi]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt
new file mode 100644
index 000000000..47d2ef14c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt
@@ -0,0 +1,14 @@
+Uus kasutaja on registreeritud. Tema info:
+
+Kasutaja : @NEWUSER@
+Täielik nimi : @NEWNAME@
+E-post : @NEWEMAIL@
+
+Kuupäev : @DATE@
+Lehitseja : @BROWSER@
+IP-Aaddress : @IPADDRESS@
+Hosti nimi : @HOSTNAME@
+
+--
+See meil on saadetud DokuWiki poolt
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt
new file mode 100644
index 000000000..cd0ef8d10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Saada uus parool ======
+
+Palun sisesta oma kasutaja nimi, et saada uut parooli. Soovi kinnitamiseks saadame Sinu meilile lingi.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt
new file mode 100644
index 000000000..c546a1f14
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt
@@ -0,0 +1,4 @@
+====== eelnevad versioonid ======
+
+Need on käesoleva dokumendi eelnevad versioonid. Vana versiooni juurde tagasi pöördumiseks vali sobiv, klõpsa ''Toimeta seda lehte'' peal ja salvesta see.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt
new file mode 100644
index 000000000..bbc86b637
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt
@@ -0,0 +1,5 @@
+====== Otsi ======
+
+Leiad vasted oma otsingule. Kui Sa otsitavat ei leidnud võid tekitada oma otsingu nimelise uue lehe kasutades ''Toimeta seda lehte'' nuppu.
+
+===== Vasted =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt
new file mode 100644
index 000000000..ef73d74a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt
@@ -0,0 +1,2 @@
+**See on dokumendi vana versioon!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt
new file mode 100644
index 000000000..5dda5f797
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt
@@ -0,0 +1,15 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+ning
+ega
+see
+mina
+sina
+tema
+meie
+teie
+nemad
+com
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt
new file mode 100644
index 000000000..76ce2845f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt
@@ -0,0 +1,17 @@
+Tere!
+
+Lehekülg @PAGE@ on muutunud (@TITLE@).
+Siin on muudatused:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Selle lehe jälgimisest loobumiseks logi wikisse sisse
+@DOKUWIKIURL@ ja siis külasta
+@NEWPAGE@
+ning vali sealt 'Lõpeta jälgimine'.
+
+--
+See meil on saadetud DokuWiki poolt
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt
new file mode 100644
index 000000000..35da12801
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Uuenda oma kasutaja infot ======
+
+Täida ainult need väljad, mida tahad uuendada. Uuendada ei saa kasutajanime.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt
new file mode 100644
index 000000000..65d0d6ac3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPÄMM blokeeritud ======
+
+Sinu muutusi kahjuks **ei** salvestatud kuna tekst sisaldab ühte või rohkem blokeeritud sõna. Kas Sa üritad Wikile spämmi saata -- oh sa põrsas! Kui aga arvad, et tegemist on eksitusega, siis suhtle Wiki administraatoriga.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt
new file mode 100644
index 000000000..13673263c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt
@@ -0,0 +1,3 @@
+====== Kudeaketa ======
+
+Jarraian wikia kudeatzeko erabilgarri dauden tresnak aurki ditzakezu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt
new file mode 100644
index 000000000..8cbb7b6d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt
@@ -0,0 +1,3 @@
+====== Itzulera Estekak ======
+
+Orri honetara bueltan estekatzen dutela diruditen orrien lista bat da honakoa. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt
new file mode 100644
index 000000000..d7d0d337e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt
@@ -0,0 +1,5 @@
+====== Bertsio berriago bat existitzen da ======
+
+Editatu duzun dokumentua baino bertsio berriago existitzen da. Editatzen ari zarela beste erabiltzaile batek dokumentua aldatzen duenean gertatzen da hau.
+
+Aztertu arretaz behean erakutsitako desberdintasunak eta erabaki zein bertsio mantendu. Zure aukera "Gorde" bada, zure bertsioa gordeko da. Uneko bertsioa mantentzeko "ezeztatu" sakatu. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt
new file mode 100644
index 000000000..257076a3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt
@@ -0,0 +1,3 @@
+====== Ez duzu baimenik ======
+
+Barkatu, ez duzu baimenik orri hau ikusteko. Agian sesioa hastea ahaztu zaizu? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt
new file mode 100644
index 000000000..8d335ea2e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt
@@ -0,0 +1,4 @@
+====== Aldaketak ======
+
+Aukeratutako bertsioaren eta egungo bertsioaren arteko aldaketak aurkezten ditu.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt
new file mode 100644
index 000000000..5d64b0b36
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt
@@ -0,0 +1,5 @@
+====== Zirriborro fitxategia aurkitu da ======
+
+Zure azken edizio saioa orri honetan ez zen zuzen burutu. DokuWiki-k automatikoki zirriborro bat gorde zuen lanean ari zinen bitartean eta orain zure edizioa jarraitzeko erabili dezakezu. Behean ikusi dezakezu zure asken saioan gorde ziren datuak.
+
+Erabaki mesedez zure edizio saio galdua //berreskuratu// nahi duzun, automatikoki gordetako zirriborroa //ezabatu// nahi duzun edo edizio prozesua //ezeztatu// nahi duzun. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt
new file mode 100644
index 000000000..c117731ef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt
@@ -0,0 +1 @@
+Egin aldaketak eta ''Gorde'' pultsatu. Begiratu [[wiki:syntax]] Wiki-aren sintaxiarentzat. Mesedez aldaketak orrialdea **hobetzeko** bakarrik egin itzazu. Probak egin nahi badituzu, ikas ezazu [[playground:playground]] erabiltzen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt
new file mode 100644
index 000000000..920cd89ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt
@@ -0,0 +1,2 @@
+**Dokumentuaren bertsio zahar bat ireki duzu!** Gordetzen baduzu bertsio berri bat sortuko duzu datu hauekin.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt
new file mode 100644
index 000000000..30f88498a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt
@@ -0,0 +1,4 @@
+====== Aurkibidea ======
+
+[[doku>namespaces|namespaces]] bitartez ordenatutako aurkibidea da hau.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html
new file mode 100644
index 000000000..81f1efd95
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html
@@ -0,0 +1,9 @@
+<p>Orri honek <a href="http://dokuwiki.org">Dokuwiki-ren</a> lehenengo instalazioan eta konfigurazioan gidatzen du. Instalatzaile honen informazio gehiago eskuragarri dago bere <a href="http://dokuwiki.org/installer">dokumentazio orrian</a>.</p>
+
+<p>DokuWikik fitxategi arruntak erabiltzen ditu wiki orriak eta orri horiekin erlazionatutako informazioa (adb. irudiak, bilaketa indizeak, azken berrikuspenak, etab.) gordetzeko. Modu egokian funtziona dezan, DokuWikik idazketa baimena <strong>behar</strong> du fitxategi horiek gordetzen dituzten direktorioetan. Instalatzaile hau ez da gai direktorio baimenak ezartzeko. Hori normalean komando bidez egin beharra dago, edo hosting bat erabiliz gero, FTP bidez edo hosting-aren kontrol panel bidez (adb. cPanel).</p>
+
+<p>Instalatzaile honek zure DokiWikiren konfigurazioa ezarriko du
+<acronym title="atzipen kontrol lista">AKL</acronym>rentzat, zeinak administratzaileei ahalbidetzen dien saioa hasi eta DokuWikiren administrazio menua atzitzea plugin-ak instalatu, erabiltzaileak kudeatu, wiki orrietara atzipenak kudeatu eta konfigurazio aukerak aldatzeko. Hau ez da beharrezkoa DokuWikirentzat funtziona ahal dezan, baina DokuWiki administratzeko errazagoa egingo du.</p>
+
+<p>Esperientziadun erabiltzaileek edo ezarpen behar bereziak dituzten erabiltzaileek honako estekak erabili beharko lituzkete xehetasun gehiago lortzeko
+<a href="http://dokuwiki.org/install">instalazio azalpenen</a> inguruan eta <a href="http://dokuwiki.org/config">konfigurazio ezarpenen</a> inguruan.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php
new file mode 100644
index 000000000..8324e2587
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php
@@ -0,0 +1,223 @@
+<?php
+/**
+ * Basque language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Xabi Ezpeleta <xezpeleta@mendikute.com>
+ * @author Inko Illarramendi <inko.i.a@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Aldatu orri hau';
+$lang['btn_source'] = 'Kodea ikusi';
+$lang['btn_show'] = 'Orria ikusi';
+$lang['btn_create'] = 'Sortu orri hau';
+$lang['btn_search'] = 'Bilatu';
+$lang['btn_save'] = 'Gorde';
+$lang['btn_preview'] = 'Aurrebista';
+$lang['btn_top'] = 'Itzuli gora';
+$lang['btn_newer'] = '<< berriagoa';
+$lang['btn_older'] = 'zaharragoa >>';
+$lang['btn_revs'] = 'Berrikuspen zaharrak';
+$lang['btn_recent'] = 'Azken aldaketak';
+$lang['btn_upload'] = 'Ireki';
+$lang['btn_cancel'] = 'Ezeztatu';
+$lang['btn_index'] = 'Aurkibidea';
+$lang['btn_secedit'] = 'Aldatu';
+$lang['btn_login'] = 'Sartu';
+$lang['btn_logout'] = 'Irten';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Eguneratu';
+$lang['btn_delete'] = 'Ezabatu';
+$lang['btn_back'] = 'Atzera';
+$lang['btn_backlink'] = 'Itzulera estekak';
+$lang['btn_backtomedia'] = 'Atzera Multimedia Fitxategiaren Aukeraketara';
+$lang['btn_subscribe'] = 'Harpidetu Orri Aldaketetara';
+$lang['btn_unsubscribe'] = 'Utzi Harpidetza Orri Aldaketetara';
+$lang['btn_subscribens'] = 'Harpidetu Izen-espazio Aldaketetara';
+$lang['btn_unsubscribens'] = 'Utzi Harpidetza Izen-espazio Aldaketetara';
+$lang['btn_profile'] = 'Eguneratu Profila ';
+$lang['btn_reset'] = 'Aldaketak Desegin';
+$lang['btn_resendpwd'] = 'Pasahitz berria bidali';
+$lang['btn_draft'] = 'Editatu zirriborroa';
+$lang['btn_recover'] = 'Berreskuratu zirriborroa';
+$lang['btn_draftdel'] = 'Ezabatu zirriborroa';
+$lang['loggedinas'] = 'Erabiltzailea';
+$lang['user'] = 'Erabiltzailea';
+$lang['pass'] = 'Pasahitza';
+$lang['newpass'] = 'Pasahitz berria';
+$lang['oldpass'] = 'Baieztatu oraingo pasahitza';
+$lang['passchk'] = 'berriz';
+$lang['remember'] = 'Gogoratu';
+$lang['fullname'] = 'Izen Deiturak';
+$lang['email'] = 'E-Maila';
+$lang['register'] = 'Erregistratu';
+$lang['profile'] = 'Erabiltzaile Profila';
+$lang['badlogin'] = 'Barkatu, prozesuak huts egin du; saiatu berriz';
+$lang['minoredit'] = 'Aldaketa Txikiak';
+$lang['draftdate'] = 'Zirriborroa automatikoki gorde da hemen:';
+$lang['nosecedit'] = 'Orria aldatua izan da bitartean, info atala zaharkituta geratu da, orri osoa kargatu da horren ordez.';
+$lang['regmissing'] = 'Barkatu, hutsune guztiak bete behar dituzu.';
+$lang['reguexists'] = 'Barkatu, izen bereko erabiltzailea existitzen da.';
+$lang['regsuccess'] = 'Erabiltzailea sortu da. Pasahitza mailez bidaliko zaizu.';
+$lang['regsuccess2'] = 'Erabiltzailea sortua izan da.';
+$lang['regmailfail'] = 'Badirudi arazoren bat egon dela pasahitza mailez bidaltzeko orduan. Administratzailearekin harremanetan jarri!';
+$lang['regbadmail'] = 'Emandako helbidea ez da zuzena - jarri harremanetan administratzailearekin hau akats bat dela uste baduzu';
+$lang['regbadpass'] = 'Idatzitako bi pasahitzak ez dira berdinak, berriz saiatu.';
+$lang['regpwmail'] = 'Zure DokuWiki pasahitza';
+$lang['reghere'] = 'Oraindik ez duzu konturik? Eginzazu bat!';
+$lang['profna'] = 'Wiki honek ez du profilaren aldaketa ahalbidetzen';
+$lang['profnochange'] = 'Aldaketarik ez, ez dago egiteko ezer.';
+$lang['profnoempty'] = 'Izen edota e-posta hutsa ez dago onartua.';
+$lang['profchanged'] = 'Erabiltzaile profila arrakastaz eguneratua.';
+$lang['pwdforget'] = 'Pasahitza ahaztu duzu? Eskuratu berri bat';
+$lang['resendna'] = 'Wiki honek ez du pasahitz berbidalketa onartzen.';
+$lang['resendpwd'] = 'Bidali pasahitz berria honentzat:';
+$lang['resendpwdmissing'] = 'Barkatu, eremu guztiak bete behar dituzu.';
+$lang['resendpwdnouser'] = 'Barkatu, ez dugu erabiltzaile hori datu-basean aurkitzen';
+$lang['resendpwdbadauth'] = 'Barkatu, kautotze kodea ez da baliozkoa. Ziurtatu baieztapen esteka osoa erabili duzula.';
+$lang['resendpwdconfirm'] = 'Baieztapen esteka bat e-postaz bidali da.';
+$lang['resendpwdsuccess'] = 'Zure pasahitz berria e-postaz bidali da.';
+$lang['license'] = 'Besterik esan ezean, wiki hontako edukia ondorengo lizentziapean argitaratzen da:';
+$lang['licenseok'] = 'Oharra: Orri hau editatzean, zure edukia ondorengo lizentziapean argitaratzea onartzen duzu: ';
+$lang['txt_upload'] = 'Ireki nahi den fitxategia aukeratu';
+$lang['txt_filename'] = 'Idatzi wikiname-a (aukerazkoa)';
+$lang['txt_overwrt'] = 'Oraingo fitxategiaren gainean idatzi';
+$lang['lockedby'] = 'Momentu honetan blokeatzen:';
+$lang['lockexpire'] = 'Blokeaketa iraungitzen da:';
+$lang['willexpire'] = 'Zure blokeaketa orri hau aldatzeko minutu batean iraungitzen da.\nGatazkak saihesteko, aurreikusi botoia erabili blokeaketa denboragailua berrabiarazteko.';
+$lang['notsavedyet'] = 'Gorde gabeko aldaketak galdu egingo dira.\nBenetan jarraitu nahi duzu?';
+$lang['rssfailed'] = 'Errorea gertatu da feed hau irakurtzean:';
+$lang['nothingfound'] = 'Ez da ezer aurkitu.';
+$lang['mediaselect'] = 'Aukeratu Multimedia fitxategia';
+$lang['fileupload'] = 'Igo Multimedia Fitxategia';
+$lang['uploadsucc'] = 'Igoera arrakastatsua';
+$lang['uploadfail'] = 'Igoerak huts egin du. Baimen arazoengatik agian?';
+$lang['uploadwrong'] = 'Fitxategi igoera ukatua. Fitxategi-luzapen hau debekatua dago!';
+$lang['uploadexist'] = 'Fitxategia lehenagotik existitzen da. Ez da ezer egin.';
+$lang['uploadbadcontent'] = 'Igotako edukia ez dator bat %s fitxategi-luzapenarekin.';
+$lang['uploadspam'] = 'Igoera spam zerrenda beltzak blokeatu du.';
+$lang['uploadxss'] = 'Igoera blokeatua izan da eduki maltzurra edukitzeko susmoagatik.';
+$lang['uploadsize'] = 'Igotako fitxategia handiegia zen. (max. %s)';
+$lang['deletesucc'] = 'Ezabatua izan da "%s" fitxategia.';
+$lang['deletefail'] = 'Ezin izan da "%s" ezabatu - egiaztatu baimenak.';
+$lang['mediainuse'] = 'Ez da "%s" fitxategia ezabatu - oraindik erabilia izaten ari da.';
+$lang['namespaces'] = 'Izen-espazioak';
+$lang['mediafiles'] = 'Fitxategiak eskuragarri hemen:';
+$lang['js']['keepopen'] = 'Mantendu leihoa irekita aukeraketan';
+$lang['js']['hidedetails'] = 'Xehetasunak Ezkutatu';
+$lang['js']['nosmblinks'] = 'Window baliabide konpartituetara estekek Microsoft Internet Explorer-en bakarrik balio dute.
+Esteka kopiatu eta itsatsi dezakezu dena den.';
+$lang['js']['mu_btn'] = 'Igo hainbat fitxategi aldi berean';
+$lang['mediausage'] = 'Erabili ondoko sintaxia fitxategi honi erreferentzia egiteko:';
+$lang['mediaview'] = 'Ikusi jatorrizko fitxategia';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Igo fitxategi bat uneko izen-espaziora. Azpi-izen-espazioak sortzeko, zure "Honela igo" fitxategi izenaren aurretik ezarri, bi puntuz (:) bananduta.';
+$lang['mediaextchange'] = 'Fitxategi-luzapena aldatua .%s -tik .%s! -ra';
+$lang['reference'] = 'Erreferentziak honentzat:';
+$lang['ref_inuse'] = 'Fitxategia ezin da ezabatu, honako orri hauek erabiltzen dutelako:';
+$lang['ref_hidden'] = 'Erreferentzi batzuk irakurtzeko baimenik ez duzun orrietan daude';
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Matching pagenames';
+$lang['toc'] = 'Eduki Taula';
+$lang['current'] = 'egungoa';
+$lang['yours'] = 'Zure Bertsioa';
+$lang['diff'] = 'egungo bertsioarekin dituen aldaketak aurkezten ditu';
+$lang['diff2'] = 'Erakutsi desberdintasunak aukeratutako bertsioen artean';
+$lang['line'] = 'Marra';
+$lang['breadcrumb'] = 'Traza';
+$lang['youarehere'] = 'Hemen zaude';
+$lang['lastmod'] = 'Azken aldaketa';
+$lang['by'] = 'egilea:';
+$lang['deleted'] = 'ezabatua';
+$lang['created'] = 'sortua';
+$lang['restored'] = 'bertsio zaharra berrezarria';
+$lang['external_edit'] = 'kanpoko aldaketa';
+$lang['summary'] = 'Aldatu laburpena';
+$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> beharrezkoa da eduki hau bistaratzeko.';
+$lang['mail_newpage'] = '[DokuWiki] gehitutako orria:';
+$lang['mail_changed'] = '[DokuWiki] aldatutako orria:';
+$lang['mail_new_user'] = 'erabiltzaile berria:';
+$lang['mail_upload'] = 'fitxategia igota:';
+$lang['qb_bold'] = 'Letra beltzez';
+$lang['qb_italic'] = 'Letra italiarrez';
+$lang['qb_underl'] = 'Azpimarratua';
+$lang['qb_code'] = 'Kodea';
+$lang['qb_strike'] = 'Marratu Testua';
+$lang['qb_h1'] = 'Izenburua 1';
+$lang['qb_h2'] = 'Izenburua 2';
+$lang['qb_h3'] = 'Izenburua 3';
+$lang['qb_h4'] = 'Izenburua 4';
+$lang['qb_h5'] = 'Izenburua 5';
+$lang['qb_link'] = 'Barruko Lotura';
+$lang['qb_extlink'] = 'Kanpoko Lotura';
+$lang['qb_hr'] = 'Horizontal Marra';
+$lang['qb_ol'] = 'Zerrenda ordenatuko gaia';
+$lang['qb_ul'] = 'Zerrenda desordenatuko gaia';
+$lang['qb_media'] = 'Irudiak eta beste fitxategiak gehitu';
+$lang['qb_sig'] = 'Gehitu sinadura';
+$lang['qb_smileys'] = 'Irrifartxoak';
+$lang['qb_chars'] = 'Karaktere Bereziak';
+$lang['js']['del_confirm'] = 'Benetan ezabatu aukeratutako fitxategia(k)?';
+$lang['admin_register'] = 'Erabiltzaile berria gehitu';
+$lang['metaedit'] = 'Metadatua Aldatu';
+$lang['metasaveerr'] = 'Metadatuaren idazketak huts egin du';
+$lang['metasaveok'] = 'Metadatua gordea';
+$lang['img_backto'] = 'Atzera hona';
+$lang['img_title'] = 'Izenburua';
+$lang['img_caption'] = 'Epigrafea';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Fitxategi izena';
+$lang['img_fsize'] = 'Tamaina';
+$lang['img_artist'] = 'Artista';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formatua';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Hitz-gakoak';
+$lang['subscribe_success'] = 'Gehitua %s %s harpidetza zerrendara';
+$lang['subscribe_error'] = 'Errorea %s gehitzen %s harpidetza zerrendara';
+$lang['subscribe_noaddress'] = 'Ez dago posta elektroniko helbiderik zure erabiltzaile izenarekin erlazionatuta, ezin zara harpidetza zerrendara gehitua izan';
+$lang['unsubscribe_success'] = 'Ezabatua %s %s harpidetza zerrendatik';
+$lang['unsubscribe_error'] = 'Errorea %s ezabatzen %s harpidetza zerrendatik';
+$lang['authmodfailed'] = 'Erabiltzaile kautotzearen konfigurazioa okerra da. Mesedez, eman honen berri Wiki administratzaileari';
+$lang['authtempfail'] = 'Erabiltzaile kautotzea denboraldi batez ez dago erabilgarri. Egoerak hala jarraitzen badu, mesedez, eman honen berri Wiki administratzaileari';
+$lang['i_chooselang'] = 'Hautatu zure hizkuntza';
+$lang['i_installer'] = 'DokuWiki instalatzailea';
+$lang['i_wikiname'] = 'Wiki Izena';
+$lang['i_enableacl'] = 'Gaitu ACL (gomendatua) (ACL: Atzipen Kontrol Lista)';
+$lang['i_superuser'] = 'Supererabiltzailea';
+$lang['i_problems'] = 'Instalatzaileak arazo batzuk aurkitu ditu, behean azalduak. Ezin duzu horiek konpondu arte jarraitu.';
+$lang['i_modified'] = 'Segurtasun arrazoiengatik, script hau DokuWikiren instalazio berri eta aldatu gabeko batekin bakarrik dabil. Deskargatutako paketetik fitxategiak berriz atera edo <a href="http://dokuwiki.org/install">DokuWikiren instalazio azalpenak</a> osorik irakurri beharko zenituzke.';
+$lang['i_funcna'] = 'PHP <code>%s</code> funtzioa ez dago erabilgarri. Agian zure hosting hornitzaileak arrazoiren batengatik ezgaituko zuen?';
+$lang['i_phpver'] = 'Zure PHP <code>%s</code> bertsioa behar den <code>%s</code> bertsioa baino zaharragoa da. PHP instalazioa eguneratu beharra daukazu.';
+$lang['i_permfail'] = 'DokuWiki ez da <code>%s</code> idazteko gai. Direktorio honen baimenen konfigurazioa konpondu behar duzu!';
+$lang['i_confexists'] = '<code>%s</code> lehendik existitzen da';
+$lang['i_writeerr'] = 'Ezin da <code>%s</code> sortu. Direktorioaren/fitxategiaren baimenak egiaztatu eta sortu fitxategia eskuz.';
+$lang['i_badhash'] = 'aldatutakoa edo ezezaguna den dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - balioa arauen aurka edo hutsa';
+$lang['i_success'] = 'Konfigurazioa arrakastaz amaitu da. Orain, install.php fitxategia ezabatu dezakezu. Jarraitu ezazu <a href="doku.php">zure DokuWiki berrian</a>.';
+$lang['i_failure'] = 'Akats batzuk gertatu dira konfigurazio fitxategiak idazterakoan. Hauek eskuz konpondu beharra izan dezakezu <a href="doku.php">zure DokuWiki berria</a> erabili ahal izan aurretik.';
+$lang['i_policy'] = 'Hasierako ACL politika';
+$lang['i_pol0'] = 'Wiki Irekia (irakurri, idatzi, fitxategiak igo edonorentzat)';
+$lang['i_pol1'] = 'Wiki Publikoa (irakurri edonorentzat, idatzi eta fitxategiak igo erregistratutako erabiltzaileentzat)';
+$lang['i_pol2'] = 'Wiki Itxia (irakurri, idatzi, fitxategiak igo erregistratutako erabiltzaileentzat soilik)';
+$lang['i_retry'] = 'Berriz saiatu';
+$lang['mu_intro'] = 'Hemen hainbat fitxategi aldi berean igo ditzakezu. Egin klik nabigazio botoian hauek ilarara gehitzeko. Sakatu igo botoia prest egotean.';
+$lang['mu_gridname'] = 'Fitxategi izena';
+$lang['mu_gridsize'] = 'Tamaina';
+$lang['mu_gridstat'] = 'Egoera';
+$lang['mu_namespace'] = 'Izen-espazioa';
+$lang['mu_browse'] = 'Nabigatu';
+$lang['mu_toobig'] = 'handiegia';
+$lang['mu_ready'] = 'igotzeko prest';
+$lang['mu_done'] = 'amaitua';
+$lang['mu_fail'] = 'hutsegitea';
+$lang['mu_authfail'] = 'saioa iraungita';
+$lang['mu_progress'] = '@PCT@% igota';
+$lang['mu_filetypes'] = 'Onartutako Fitxategi Motak';
+$lang['recent_global'] = 'Une honetan <b>%s</b> izen-espazioaren barneko aldaketak ikusten ari zara.<a href="%s"> Wiki osoaren azken aldaketak</a> ere ikusi ditzakezu.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt
new file mode 100644
index 000000000..dc29e51a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt
@@ -0,0 +1,3 @@
+====== Orria blokeatua ======
+
+Orrialde hau blokeatua dago beste erabiltzaile batengatik. Berak aldaketak bukatu arte itxaron beharko duzu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt
new file mode 100644
index 000000000..ebb1607d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+Ez duzu sesiorik hasi! Sar ezazu zure erabiltzaile izena eta pasahitza. Gogoratu coockie-ak baimenduta izan behar dituzula.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt
new file mode 100644
index 000000000..86ab1a3a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt
@@ -0,0 +1,17 @@
+DokuWiki-Eskuliburuetan orriren bat aldatu edo gehitu da. Hemen dituzu xehetasunak
+
+Data : @DATE@
+Nabigatzailea : @BROWSER@
+IP-Helbidea : @IPADDRESS@
+Host izena : @HOSTNAME@
+Bertsio zaharra : @OLDPAGE@
+Bertsio berria : @NEWPAGE@
+Aldatu laburpena : @SUMMARY@
+Erabiltzailea : @USER@
+
+@DIFF@
+
+
+--
+Email hau DokuWiki erabiliz sortu da;
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt
new file mode 100644
index 000000000..cac872ce1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt
@@ -0,0 +1,3 @@
+====== Gai hau ez da existitzen oraindik ======
+
+Existitzen ez den gai batera doan lotura bat jarraitu duzu. Zuk zeuk sortu dezakezu ''Sortu orri hau'' erabiliz.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt
new file mode 100644
index 000000000..7d9cc60d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt
@@ -0,0 +1,3 @@
+====== Berrikuspen hau ez da existitzen ======
+
+Zehaztutako bertsioa ez da existitzen. Erabili ''Bertsio zaharrak'' dokumentu honen aurreko bertsioen zerrenda bat ikusi ahal izateko.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt
new file mode 100644
index 000000000..1f0d14f5e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt
@@ -0,0 +1,3 @@
+====== Aurreikuspena ======
+
+Hau zure testuaren aurrebista bat besterik ez da. Gogoratu: **ez da gorde** oraindik!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt
new file mode 100644
index 000000000..0f0fd5e8f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt
@@ -0,0 +1,12 @@
+Kaixo @FULLNAME@!
+
+Norbaitek zure @TITLE@ erabiltzailearentzat pasahitz berria eskatu du @DOKUWIKIURL@ gunean.
+
+Ez baduzu zuk eskatu pasahitz berria, ez kasurik egin posta honi.
+
+Eskakizuna zuk bidalia dela egiaztatzeko, mesedez, ondorengo esteka erabili.
+
+@CONFIRM@
+
+--
+Posta hau @DOKUWIKIURL@ gunean DokuWikik sortua izan da. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt
new file mode 100644
index 000000000..f7ed7b071
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt
@@ -0,0 +1 @@
+Orri hau irakurtzeko bakarrik da. Jatorria ikusi dezakezu baina ezin duzu aldatu. Administratzailearekin kontaktuan jarri gaizki dagoela uste baduzu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt
new file mode 100644
index 000000000..4ab5482ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt
@@ -0,0 +1,3 @@
+====== Azken Aldaketak ======
+
+Ondorengo orriak aldatu berriak izan dira:
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt
new file mode 100644
index 000000000..4a8a49bd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt
@@ -0,0 +1,3 @@
+====== Erregistratu erabiltzaile berri bezala ======
+
+Bete beheko informazio guztia wiki honetan kontu berri bat sortzeko. Ziurtatu **baliozko posta-e helbide** bat ematen duzula - ez bazaizu hemen eskatzen pasahitzik sartzeko, berri bat bidaliko zaizu helbide horretara. Saioa hasteko izenak baliozko [[doku>pagename|orri izena]] izan behar du. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt
new file mode 100644
index 000000000..a0154444e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt
@@ -0,0 +1,13 @@
+Erabiltzaile berri bat erregistratu da. Hona hemen xehetasunak:
+
+Erabiltzaile izena : @NEWUSER@
+Izen osoa : @NEWNAME@
+Posta-e : @NEWEMAIL@
+
+Data : @DATE@
+Nabigatzailea : @BROWSER@
+IP-Helbidea : @IPADDRESS@
+Hostalari izena : @HOSTNAME@
+
+--
+Posta hau @DOKUWIKIURL@ gunean DokuWikik sortua izan da. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt
new file mode 100644
index 000000000..98f261cd8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Bidali pasahitz berria ======
+
+Mesedez, sartu zure erabiltzaile izena beheko formularioan zure wiki honetako kontuarentzat pasahitz berria eskatzeko. Baieztapen esteka bat bidaliko zaizu erregistratutako zure posta-e helbidera. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt
new file mode 100644
index 000000000..203cb7e43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt
@@ -0,0 +1,3 @@
+====== Bertsio zaharrak ======
+
+Hauek egungo dokumentua baino zaharragoak diren bertsioak dira. Hauetako bertsio batetara itzultzeko aukera ezazu behetik, pultsatu ''Sortu orri hau'' eta gorde.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt
new file mode 100644
index 000000000..2a487a3bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt
@@ -0,0 +1,5 @@
+====== Bilaketa ======
+
+Emaitzak ondorengo aurkiketan bilatu ditzakezu. Bilatzen zabiltzana aurkitu ez baduzu, zuk zeuk sortu dezakezu orri berri bat bilaketa ostean ''Sortu orri hau'' erabiliz.
+
+===== Bilaketa emaitzak: =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt
new file mode 100644
index 000000000..ad1b36057
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt
@@ -0,0 +1,2 @@
+**Hau dokumentuaren bertsio zahar bat da!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt
new file mode 100644
index 000000000..1aeb868bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt
@@ -0,0 +1,26 @@
+# Lista hau, indexatzaileak alde batera uzten dituen hitzen zerrenda da, hitz bat lerroko
+# Fitxategi hau editatzean, ziurtatu UNIX lerro bukaerak (lerro berri bakarra) erabiltzen duzula
+# Ez dago 3 letra baino motzagoak diren hitzik sartu beharrik - bestela ere baztertuak dira
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+# FITXATEGI HONEK BEGIRATU BAT BEHAR DU!
+buruz
+dira
+da
+eta
+zure
+haiek
+haien
+com
+nondik
+nora
+nola
+zer
+hau
+zen
+noiz
+non
+nor
+nork
+und
+the
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt
new file mode 100644
index 000000000..9e5503a8b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt
@@ -0,0 +1,13 @@
+Kaixo!
+
+@PAGE@ orria @TITLE@ wikian aldatua izan da.
+Hona hemen aldaketak:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Orri jakinarazpenak ezeztatzeko, hasi saioa @DOKUWIKIURL@ wikian, bisitatu @NEWPAGE@ eta orriaren eta/edo izen-espazioaren harpidetza utzi.
+
+--
+Posta hau @DOKUWIKIURL@ gunean DokuWikik sortua izan da. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt
new file mode 100644
index 000000000..233bfecf1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Eguneratu zure kontuaren profila ======
+
+Aldatu nahi dituzun atalak bakarrik bete behar dituzu. Ezin duzu zure erabiltzaile izena aldatu. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt
new file mode 100644
index 000000000..639f3d95a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt
@@ -0,0 +1,13 @@
+Fitxategi bat igo da zure DokuWikira. Hona hemen xehetasunak:
+
+Fitxategia : @MEDIA@
+Data : @DATE@
+Nabigatzailea : @BROWSER@
+IP-Helbide : @IPADDRESS@
+Hostalari izena : @HOSTNAME@
+Tamaina : @SIZE@
+MIME Mota : @MIME@
+Erabiltzailea : @USER@
+
+--
+Posta hau @DOKUWIKIURL@ gunean DokuWikik sortua izan da. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt
new file mode 100644
index 000000000..0af3fb26c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAMaren aurkako babesa ======
+
+Zure aldaketak **ez** dira gorde aurrez debekatutako hitzak erabili dituzulako. Wiki-a spammeatzen saitu bazara... -- Aiss osobuko! (VS). Hau akats bat dela uste baduzu jarri arremanetan Wiki-aren administratzailearekin.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt
new file mode 100644
index 000000000..ce7550977
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt
@@ -0,0 +1,3 @@
+====== مدیریت ======
+
+در اینجا لیستی از وظیÙه‌های مدیریتی را مشاهده می‌کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt
new file mode 100644
index 000000000..3d2bb4a5b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt
@@ -0,0 +1 @@
+===== برنامه های جانبی دیگر ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt
new file mode 100644
index 000000000..6864e22d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt
@@ -0,0 +1,3 @@
+====== پیوندهای بازگشتی ======
+
+در این‌جا لیستی از صÙحاتی Ú©Ù‡ به این صÙحه پیوند داده‌اند را مشاهده می‌کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt
new file mode 100644
index 000000000..9de037024
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt
@@ -0,0 +1,5 @@
+====== یک نگارش جدید وجود دارد ======
+
+این نگارش جدید از مطلبی Ú©Ù‡ ویرایش کرده‌اید وجود دارد. این اتÙاق زمانی رخ می‌دهد Ú©Ù‡ یک کاربر دیگر زمانی Ú©Ù‡ شما ویرایش می‌کرده‌اید، ان را تغییر داده است.
+
+تÙاوت‌های زیر را بررسی کنید، Ùˆ تصمیم بگیرید Ú©Ù‡ کدام نگارش Ø­Ùظ شود. اگر دکمه‌ی «ذخیره» را بÙشارید، نسخه‌ی شما ذخیره می‌شود Ùˆ اگر دکمه‌ی «لغو» را بÙشارید، نسخه‌ی کنونی Ø­Ùظ خواهد شد. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt
new file mode 100644
index 000000000..827f73e2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt
@@ -0,0 +1,3 @@
+====== دسترسی ممکن نیست ======
+
+شرمنده، شما اجازه‌ی دسترسی ب این صÙحه را ندارید. ممکن است Ùراموش کرده باشید Ú©Ù‡ وارد سایت شوید! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt
new file mode 100644
index 000000000..d5354f727
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt
@@ -0,0 +1,3 @@
+====== تÙاوت‌ها ======
+
+تÙاوت دو نسخه‌ی متÙاوت از صÙحه را مشاهده می‌کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt
new file mode 100644
index 000000000..164b217b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt
@@ -0,0 +1,5 @@
+====== Ùایل چرک‌نویس یاÙت شد ======
+
+آخرین سشن ویرایش شما با موÙقیت به پایان نرسیده. Dokuwiki به طور خودکار چرک‌نویسی از صÙحه‌ی شما ذخیره می‌کند Ú©Ù‡ شما می‌توانید آن را کامل کنید. در زیر مقادیر موجود در چرک‌نویس را مشاهده می‌کنید.
+
+خواهشمندیم تصمیم بگیرید Ú©Ù‡ می‌خواهید چرک‌نویس را //بازیابی//ØŒ یا آن را //حذÙ// کنید Ùˆ یا ویرایش را //لغو// نمایید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt
new file mode 100644
index 000000000..7c3873af4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt
@@ -0,0 +1 @@
+این صÙحه را ویرایش کنید Ùˆ کلید «ذخیره» را Ùشار دهید. صÙحه [[wiki:syntax|قوانین نگارشی]] را برای روش نگارش ویکی مشاهده کنید. خواهشمندیم Ùقط در صورتی این صÙحه را ویرایش کنید Ú©Ù‡ توانایی **بهبود بخشیدن** به آن را دارید. اگر تصمیم دارید چیزی را تست کنید یا اولین قدم‌های‌تان را در نگارش ویکی بردارید، به [[playground:playground|زمین بازی]] بروید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt
new file mode 100644
index 000000000..ca896feeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt
@@ -0,0 +1 @@
+**شما یک نگارش قدیمی را مشاهده می‌کنید!** اگر این نگارش را ذخیره کنید، شما یک نگارش جدید ایجاد کرده‌اید! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt
new file mode 100644
index 000000000..89ed74b7d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt
@@ -0,0 +1,3 @@
+====== Ùهرست ======
+
+این صÙحه Ùهرست تمامی صÙحات بر اساس [[doku>namespaces|Ùضای‌نام‌ها]] است. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html
new file mode 100644
index 000000000..b76e9443f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html
@@ -0,0 +1,12 @@
+<p>این صÙحه به شما در نصب Ùˆ تنظیم
+<a href="http://dokuwiki.org">Dokuwiki</a> کمک می‌کند. اطلاعات بیشتری در این مورد را می‌توانید در <a href="http://dokuwiki.org/installer">بخش راهنما</a> مشاهده کنید.</p>
+
+<p>DokuWiki از Ùایل‌های معمولی برای ذخیره‌ی صÙحات ویکی Ùˆ اطلاعات مربوط به آن‌ها استÙاده می‌کند (مثل تصاویر، Ùهرست‌های جستجو، نگارش‌های پیشین Ùˆ غیره). برای نصب موÙقیت آمیز DokuWiki
+<strong>باید</strong> دسترسی نوشتن برای شاخه‌های این Ùایل‌ها داشته باشید. این کار باید توسط دستورات خط Ùرمان Ùˆ یا دسترسی FTP Ùˆ یا از طریق کنترل پنل خدمات میزبانی‌تون انجام شود. </p>
+
+<p>این برنامه <acronym title="access control list">دسترسی‌ها</acronym>ی DokuWiki را برای شما تنظیم خواهد کرد،
+به این معنی Ú©Ù‡ مدیر سیستم می‌تواند به صÙحه‌ی مدیران وارد شود، اÙزونه نصب کنید، کاربران را مدیریت کند، دسترسی به صÙحات ویکی را مدیریت کند Ùˆ یا تنظیمات را تغییر دهد.</p>
+
+<p>برای اطلاعات بیشتر در مورد نصب می‌توانید از این پیوند‌ها استÙاده کنید
+<a href="http://dokuwiki.org/install">روش نصب</a>
+و <a href="http://dokuwiki.org/config">تنظیمات پیکربندی</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php
new file mode 100644
index 000000000..1123efe13
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php
@@ -0,0 +1,253 @@
+<?php
+/**
+ * fa language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesFa.php?view=co
+ * @author behrad eslamifar <behrad_es@yahoo.com)
+ * @author Mohsen Firoozmandan <info@mambolearn.com>
+ * @author omidmr@gmail.com
+ * @author Omid Mottaghi <omidmr@gmail.com>
+ * @author Mohammad Reza Shoaei <shoaei@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'rtl';
+$lang['doublequoteopening'] = '«';
+$lang['doublequoteclosing'] = '»';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'ویرایش این صÙحه';
+$lang['btn_source'] = 'نمایش مبدا';
+$lang['btn_show'] = 'نمایش صÙحه';
+$lang['btn_create'] = 'ساخت این صÙحه';
+$lang['btn_search'] = 'جستجو';
+$lang['btn_save'] = 'ذخیره';
+$lang['btn_preview'] = 'پیش‌نمایش';
+$lang['btn_top'] = 'برگشت به بالا';
+$lang['btn_newer'] = 'نتایج بیشتر »';
+$lang['btn_older'] = '« نتایج کمتر';
+$lang['btn_revs'] = 'نگارش‌های پیشین';
+$lang['btn_recent'] = 'تغییرات اخیر';
+$lang['btn_upload'] = 'ارسال';
+$lang['btn_cancel'] = 'لغو';
+$lang['btn_index'] = 'Ùهرست';
+$lang['btn_secedit'] = 'ویرایش';
+$lang['btn_login'] = 'ورود به سیستم';
+$lang['btn_logout'] = 'خروج از سیستم';
+$lang['btn_admin'] = 'مدیر';
+$lang['btn_update'] = 'به روز رسانی';
+$lang['btn_delete'] = 'حذÙ';
+$lang['btn_back'] = 'عقب';
+$lang['btn_backlink'] = 'پیوندهای به این صÙحه';
+$lang['btn_backtomedia'] = 'بازگشت به انتخاب Ùایل';
+$lang['btn_subscribe'] = 'عضویت در تغییرات صÙحه';
+$lang['btn_unsubscribe'] = 'لغو عضویت در تغییرات صÙحه';
+$lang['btn_subscribens'] = 'عضویت در تغییرات Ùضای‌نام';
+$lang['btn_unsubscribens'] = 'عضویت در تغییرات Ùضای‌نام';
+$lang['btn_profile'] = 'به روز رسانی پروÙایل';
+$lang['btn_reset'] = 'بازنشاندن';
+$lang['btn_resendpwd'] = 'یک گذرواژه‌ی جدید برای شما Ùرستاده شود';
+$lang['btn_draft'] = 'ویرایش پیش‌نویس';
+$lang['btn_recover'] = 'بازیابی پیش‌نویس';
+$lang['btn_draftdel'] = 'حذ٠پیش‌نویس';
+$lang['btn_revert'] = 'بازیابی';
+$lang['loggedinas'] = 'به عنوان کاربر روبرو وارد شده‌اید:';
+$lang['user'] = 'نام کاربری:';
+$lang['pass'] = 'گذرواژه‌ی شما';
+$lang['newpass'] = 'گذروازه‌ی جدید';
+$lang['oldpass'] = 'گذرواژه‌ی پیشین';
+$lang['passchk'] = 'گذرواژه را دوباره وارد کنید';
+$lang['remember'] = 'گذرواژه را به یاد بسپار.';
+$lang['fullname'] = '*نام واقعی شما';
+$lang['email'] = 'ایمیل شما*';
+$lang['register'] = 'یک حساب جدید بسازید';
+$lang['profile'] = 'پروÙایل کاربر';
+$lang['badlogin'] = 'خطا در ورود به سیستم';
+$lang['minoredit'] = 'این ویرایش Ø®Ùرد است';
+$lang['draftdate'] = 'ذخیره خودکار پیش‌نویس';
+$lang['nosecedit'] = 'این صÙحه در این میان تغییر کرده است، اطلاعات بخش قدیمی شده است، در عوض محتوای Ú©Ù„ نمایش داده می‌شود.';
+$lang['regmissing'] = 'متاسÙÙ…ØŒ شما باید همه قسمت‌ها را پر کنید.';
+$lang['reguexists'] = 'نام کاربری‌ای Ú©Ù‡ وارد کردید قبلن استÙاده شده است. خواهشمندیم یک نام دیگر انتخاب کنید.';
+$lang['regsuccess'] = 'کاربر ساخته شد و گذرواژه به صورت ایمیل ارسال گردید.';
+$lang['regsuccess2'] = 'حساب ایجاد شد.';
+$lang['regmailfail'] = 'مشکلی در ارسال ایمیل پیش آمده است، با مدیر تماس بگیرید!';
+$lang['regbadmail'] = 'نشانی واردشده‌ی ایمیل قابل‌قبول نیست، چرا که دارای ساختار نامعتبری است. خواهشمندیم نشانی‌ای با ساختار صحیح وارد کنید و یا بخش مربوط را خالی بگذارید.';
+$lang['regbadpass'] = 'گذرواژه‌هایی که وارد کردید یکسان نیستند.';
+$lang['regpwmail'] = 'گذرواژه‌ی DokuWiki شما';
+$lang['reghere'] = 'شما هنوز حسابی در اینجا ندارید؟ یکی ایجاد کنید';
+$lang['profna'] = 'این ویکی اجازه ویرایش پروÙایل را نمی‌دهد';
+$lang['profnochange'] = 'تغییری صورت نگرÙت';
+$lang['profnoempty'] = 'نام و آدرس ایمیل باید پر شود';
+$lang['profchanged'] = 'پروÙایل کاربر با موÙقیت به روز شد';
+$lang['pwdforget'] = 'گذرواژه‌ی خود را Ùراموش کرده‌اید؟ جدید دریاÙت کنید';
+$lang['resendna'] = 'این ویکی ارسال مجدد گذرواژه را پشتیبانی نمی‌کند';
+$lang['resendpwd'] = 'گذرواژه‌ی جدید ارسال شد';
+$lang['resendpwdmissing'] = 'متاسÙÙ…ØŒ شما باید تمام قسمت‌ها را پر کنید';
+$lang['resendpwdnouser'] = 'متاسÙÙ…ØŒ ما نتوانستیم این نام کاربری را در بانک خود پیدا کنیم';
+$lang['resendpwdbadauth'] = 'متاسÙÙ…ØŒ کد شناسایی معتبر نیست. از صحت لینک تاییدیه اطمینان حاصل کنید.';
+$lang['resendpwdconfirm'] = 'یک ایمیل تاییدیه‌ی آدرس به آدرس مورنظر ارسال شد. قبل از اینکه نامه‌ی دیگری قابل ارسال به این آدرس باشد، باید دستوراتی که در آن نامه آمده است را جهت تایید این مساله که این آدرس متعلق به شماست، اجرا کنید.';
+$lang['resendpwdsuccess'] = 'گذرواژه‌ی جدید شما توسط ایمیل ارسال شد';
+$lang['license'] = 'به جز مواردی که ذکر می‌شود، مابقی محتویات ویکی تحت مجوز زیر می‌باشند:';
+$lang['licenseok'] = 'توجه: با ویرایش این صÙحه، شما مجوز زیر را تایید می‌کنید:';
+$lang['searchmedia'] = 'نام Ùایل برای جستجو:';
+$lang['searchmedia_in'] = 'جستجو در %s';
+$lang['txt_upload'] = 'Ùایل را برای ارسال انتخاب کنید';
+$lang['txt_filename'] = 'ارسال به صورت (اختیاری)';
+$lang['txt_overwrt'] = 'بر روی Ùایل موجود بنویس';
+$lang['lockedby'] = 'در حال حاضر Ù‚ÙÙ„ شده است';
+$lang['lockexpire'] = 'Ù‚ÙÙ„ منقضی شده است';
+$lang['willexpire'] = 'حالت Ù‚ÙÙ„ شما مدتی است منقضی شده است \n برای جلوگیری از تداخل دکمه‌ی پیش‌نمایش را برای صÙر شدن ساعت Ù‚ÙÙ„ بزنید.';
+$lang['notsavedyet'] = 'تغییرات ذخیره شده از بین خواهد رÙت. \n می‌خواهید ادامه دهید؟';
+$lang['rssfailed'] = 'بروز خطا در هنگام واکشی';
+$lang['nothingfound'] = 'چیزی پیدا نشد';
+$lang['mediaselect'] = 'Ùایل‌ها';
+$lang['fileupload'] = 'ارسال پرونده';
+$lang['uploadsucc'] = 'ارسال با موÙقیت انجام شد';
+$lang['uploadfail'] = 'خطا در ارسال';
+$lang['uploadwrong'] = 'ارسال متوق٠شد. این توسعه‌ی Ùایل ممنوع می‌باشد.';
+$lang['uploadexist'] = 'این Ùابل وجود دارد. عملی انجام نشد.';
+$lang['uploadbadcontent'] = 'محتوای Ùایل ارسال شده با توسعه‌ی %s متناقض است.';
+$lang['uploadspam'] = 'Ùایل ارسال شده توسط لیست سیاه اسپم‌ها مسدود شده است.';
+$lang['uploadxss'] = 'این صÙحه حاوی اسکریپت یا کد اچ‌تی‌ام‌ال است Ú©Ù‡ ممکن است به نادرست توسط مرورگر وب تÙسیر شود.';
+$lang['uploadsize'] = 'Ùایل ارسال شده سنگین است. (بیشینه، %s)';
+$lang['deletesucc'] = 'Ùایل «%s» حذ٠شد.';
+$lang['deletefail'] = '«%s» حذ٠نمی‌شود، دسترسی‌ها را بررسی کنید.';
+$lang['mediainuse'] = 'Ùایل «%s» حذ٠نمی‌شود، چون هنوز در حال استÙاده است.';
+$lang['namespaces'] = 'Ùضای‌نام';
+$lang['mediafiles'] = 'Ùایل‌های موجود در';
+$lang['js']['searchmedia'] = 'جستجو برای Ùایل';
+$lang['js']['keepopen'] = 'پنجره را ر زمان انتخاب باز نگه‌دار';
+$lang['js']['hidedetails'] = 'پتهان کردن جزییات';
+$lang['js']['nosmblinks'] = 'پیوند به Windows share Ùقط در اینترنت‌اکسپلورر قابل استÙاده است.
+شما می‌توانید پیوند‌ها رو کپی کنید.';
+$lang['js']['linkwiz'] = 'ویزارد پیوند';
+$lang['js']['linkto'] = 'پیوند به:';
+$lang['js']['del_confirm'] = 'واقعن تصمیم به حذ٠این موارد دارید؟';
+$lang['js']['mu_btn'] = 'ارسال هم‌زمان چندین Ùایل ';
+$lang['mediausage'] = 'برای ارجاع دادن به Ùایل از نگارش زیر استÙاده کنید.';
+$lang['mediaview'] = 'مشاهده‌ی Ùایل اصلی';
+$lang['mediaroot'] = 'ریشه';
+$lang['mediaupload'] = 'ارسال Ùایل به Ùضای‌نام کنونی. برای ایجاد زیرÙضای‌نام‌ها، نام‌های آن‌ها را به عنوان پیشوندهایی Ú©Ù‡ با دونقطه «:» جدا شده‌اند به نام Ùایل، در قسمت «ارسال به صورت» اضاÙÙ‡ کنید.';
+$lang['mediaextchange'] = 'توسعه‌ی Ùایل از %s به %s تغییر داده شد.';
+$lang['reference'] = 'ارجاع‌های';
+$lang['ref_inuse'] = 'این Ùایل نمی‌تواند حذ٠شود، زیرا هم‌چنان در این صÙحه استÙاده شده است:';
+$lang['ref_hidden'] = 'تعدادی مرجع در صÙحاتی Ú©Ù‡ شما دسترسی خواندن ندارید وجود دارد.';
+$lang['hits'] = 'بازدید';
+$lang['quickhits'] = 'جور کردن نام صÙحات';
+$lang['toc'] = 'Ùهرست مندرجات';
+$lang['current'] = 'Ùعلی';
+$lang['yours'] = 'نسخه‌ی شما';
+$lang['diff'] = 'تÙاوت‌ها را با نگارش کنونی نمایش بده.';
+$lang['diff2'] = 'تÙاوت‌ها را با نگارش انتخابی نمایش بده.';
+$lang['line'] = 'خط';
+$lang['breadcrumb'] = 'ردپا';
+$lang['youarehere'] = 'محل شما';
+$lang['lastmod'] = 'آخرین ویرایش';
+$lang['by'] = 'توسط';
+$lang['deleted'] = 'حذ٠شد';
+$lang['created'] = 'ایجاد شد';
+$lang['restored'] = 'یک نگارش پیشین واگردانی شد.';
+$lang['external_edit'] = 'ویرایش خارجی';
+$lang['summary'] = 'پیش‌نمایش';
+$lang['noflash'] = 'برای نمایش محتویات <a href="http://www.adobe.com/products/flashplayer/">اÙزونه‌ی Ùلش</a> مورد نیاز است.';
+$lang['download'] = 'دیاÙت Ùایل منقطع گردید';
+$lang['mail_newpage'] = 'صÙحه اضاÙÙ‡ شد:';
+$lang['mail_changed'] = 'صÙحه تغییر داده شد:';
+$lang['mail_new_user'] = 'کاربر جدید:';
+$lang['mail_upload'] = 'Ùایل ارسال شده:';
+$lang['qb_bold'] = 'متن Ù¾Ùررنگ';
+$lang['qb_italic'] = 'متن ایتالیک';
+$lang['qb_underl'] = 'متن زیرخط‌دار';
+$lang['qb_code'] = 'کد';
+$lang['qb_strike'] = 'متن وسط‌خط‌دار';
+$lang['qb_h1'] = 'عنوان سطح ۱';
+$lang['qb_h2'] = 'عنوان سطح ۲';
+$lang['qb_h3'] = 'عنوان سطح ۳';
+$lang['qb_h4'] = 'عنوان سطح ۴';
+$lang['qb_h5'] = 'عنوان سطح ۵';
+$lang['qb_h'] = 'تیتر';
+$lang['qb_hs'] = 'تیتر مورد نظر را انتخاب نمایید';
+$lang['qb_hplus'] = 'تیتر بالاتر';
+$lang['qb_hminus'] = 'تیتر پایین تر';
+$lang['qb_hequal'] = 'تیتر در یک سطح';
+$lang['qb_link'] = 'پیوند داخلی';
+$lang['qb_extlink'] = 'پیوند به بیرون (پیشوند http:// را Ùراموش نکنید)';
+$lang['qb_hr'] = 'خط اÙÙ‚ÛŒ';
+$lang['qb_ol'] = 'لیست‌های مرتب';
+$lang['qb_ul'] = 'لیست‌های بدون ترتیب';
+$lang['qb_media'] = 'اÙزودن تصویر Ùˆ Ùایل';
+$lang['qb_sig'] = 'اÙزودن امضا';
+$lang['qb_smileys'] = 'Ø´Ú©Ù„Ú©';
+$lang['qb_chars'] = 'حرو٠ویژه';
+$lang['upperns'] = 'پرش به Ùضای‌نام بالا';
+$lang['admin_register'] = 'یک حساب جدید بسازید';
+$lang['metaedit'] = 'ویرایش داده‌های متا';
+$lang['metasaveerr'] = 'نوشتن داده‌نما با مشکل مواجه شد';
+$lang['metasaveok'] = 'داده‌نما ذخیره شد';
+$lang['img_backto'] = 'بازگشت به ';
+$lang['img_title'] = 'عنوان تصویر';
+$lang['img_caption'] = 'عنوان';
+$lang['img_date'] = 'تاریخ';
+$lang['img_fname'] = 'نام Ùایل';
+$lang['img_fsize'] = 'اندازه';
+$lang['img_artist'] = 'عکاس/هنرمند';
+$lang['img_copyr'] = 'دارنده‌ی حق تکثیر';
+$lang['img_format'] = 'Ùرمت';
+$lang['img_camera'] = 'دوربین';
+$lang['img_keywords'] = 'واژه‌های کلیدی';
+$lang['subscribe_success'] = '%s با موÙقیت به عضویت %s درآمد';
+$lang['subscribe_error'] = 'عضویت %s در %s با مشکل مواجه شد';
+$lang['subscribe_noaddress'] = 'هیچ آدرس ایمیلی ثبت نکرده‌اید و نمی‌توانید عضو شوید';
+$lang['unsubscribe_success'] = '%s با موÙقیت از عضویت %s خارج شد';
+$lang['unsubscribe_error'] = 'خارج کردن %s از عضویت %s با مشکل مواجه شد.';
+$lang['authmodfailed'] = 'اشکال در نوع معتبرسازی کاربران، مدیر ویکی را باخبر سازید.';
+$lang['authtempfail'] = 'معتبرسازی کابران موقتن مسدود می‌باشد. اگر این حالت پایدار بود، مدیر ویکی را باخبر سازید.';
+$lang['i_chooselang'] = 'انتخاب زبان';
+$lang['i_installer'] = 'نصب کننده‌ی Dokuwiki';
+$lang['i_wikiname'] = 'نام ویکی';
+$lang['i_enableacl'] = 'Ùعال بودن کنترل دسترسی‌ها (توصیه شده)';
+$lang['i_superuser'] = 'کاربر اصلی';
+$lang['i_problems'] = 'نصب کننده با مشکلات زیر مواجه شد. در صورت رÙع این مشکلات، امکان ادامه نصب خواهد بود.';
+$lang['i_modified'] = 'به دلایل امنیتی، این اسکریپت Ùقط با نصب تازه Ùˆ بدون تغییر DokuWiki کار خواهد کرد.شما باید دوباره Ùایل Ùشرده را باز کنید <a href="http://dokuwiki.org/install">راهنمای نصب DokuWiki</a> را بررسی کنید.';
+$lang['i_funcna'] = 'تابع <code>%s</code> در PHP موجود نیست. ممکن است شرکت خدمات وب شما آن را مسدود کرده باشد.';
+$lang['i_phpver'] = 'نگارش پی‌اچ‌پی <code>%s</code> پایین‌تر از نگارش مورد نیاز، یعنی <code>%s</code> می‌باشد. خواهشمندیم به روز رسانی کنید.';
+$lang['i_permfail'] = 'شاخه‌ی <code>%s</code> قابلیت نوشتن ندارد. شما باید دسترسی‌های این شاخه را تنظیم کنید!';
+$lang['i_confexists'] = '<code>%s</code> پیش‌تر موجود است';
+$lang['i_writeerr'] = 'توانایی ایجاد <code>%s</code> نیست. شما باید دسترسی‌های شاخه یا Ùایل را بررسی کنید Ùˆ Ùایل را به طور دستی ایجاد کنید.';
+$lang['i_badhash'] = 'Ùایل dokuwiki.php غیرقابل تشخیص بوده یا تغییر کرده است (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - غیرقانونی و یا مقادیر تهی';
+$lang['i_success'] = 'تنظیمات با موÙقیت به پایان رسید. بهتر است Ùایل install.php رو حذ٠کنید. برای ادامه <a href="doku.php">این‌جا</a> کلیک کنید.';
+$lang['i_failure'] = 'مشکلاتی در زمان نوشتن Ùایل تنظیمات پیش آمده است. شما باید این مشکلات را پیش از استÙاده از <a href="doku.php">DokuWiki</a> برطر٠کنید.';
+$lang['i_policy'] = 'کنترل دسترسی‌های اولیه';
+$lang['i_pol0'] = 'ویکی باز (همه می‌توانند بخوانند، بنویسند Ùˆ Ùایل ارسال کنند)';
+$lang['i_pol1'] = 'ویکی عمومی (همه می‌توانند بخوانند، کاربران ثبت شده می‌توانند بنویسند Ùˆ Ùایل ارسال کنند)';
+$lang['i_pol2'] = 'ویکی بسته (Ùقط کاربران ثبت شده می‌توانند بخوانند، بنویسند Ùˆ Ùایل ارسال کنند)';
+$lang['i_retry'] = 'تلاش مجدد';
+$lang['mu_intro'] = 'شما می‌توانید چندین Ùایل را با یک حرکت ارسال کنید. روی دکمه‌ی «بچر» کلیک کنید Ùˆ Ùایل‌ها را به ص٠ارسال اضاÙÙ‡ نمایید. سپس دکمه‌ی «ارسال» را Ùشار دهید. ';
+$lang['mu_gridname'] = 'نام Ùایل';
+$lang['mu_gridsize'] = 'اندازه';
+$lang['mu_gridstat'] = 'وضعیت';
+$lang['mu_namespace'] = 'Ùضای‌نام';
+$lang['mu_browse'] = 'بچر';
+$lang['mu_toobig'] = 'خیلی بزرگ';
+$lang['mu_ready'] = 'آماده‌ی ارسال';
+$lang['mu_done'] = 'کامل';
+$lang['mu_fail'] = 'شکست خورد';
+$lang['mu_authfail'] = 'سشن به پایان رسید';
+$lang['mu_progress'] = '@PCT@% ارسال شد';
+$lang['mu_filetypes'] = 'توسعه‌های مجاز';
+$lang['mu_info'] = 'Ùایل ارسال گردید';
+$lang['mu_lasterr'] = 'آخرین خطا:';
+$lang['recent_global'] = 'شما هم‌اکنون تغییرات Ùضای‌نام <b>%s</b> را مشاهده می‌کنید. شما هم‌چنین می‌توانید <a href="%s">تغییرات اخیر در Ú©Ù„ ویکی را مشاهده نمایید</a>.';
+$lang['years'] = '%d سال پیش';
+$lang['months'] = '%d ماه پیش';
+$lang['weeks'] = '%d Ù‡Ùته‌ی پیش';
+$lang['days'] = '%d روز پیش';
+$lang['hours'] = '%d ساعت پیش';
+$lang['minutes'] = '%d دقیقه‌ی پیش';
+$lang['seconds'] = '%d ثانیه‌ی پیش';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt
new file mode 100644
index 000000000..1400e22da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt
@@ -0,0 +1,3 @@
+====== Ù‚ÙÙ„ شده است ======
+
+این صÙحه توسط یک کاربر دیگر، برای ویرایش، Ù‚ÙÙ„ شده است. شما باید تا پایان ویرایش این کاربر یا پایان زمان ویرایش، صبر کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt
new file mode 100644
index 000000000..0b1b3f9fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt
@@ -0,0 +1,3 @@
+====== ورود ======
+
+شما وارد سایت نشده‌اید! موارد زیر را تایپ کنید تا وارد شوید. برای ورود، نیاز دارید Ú©Ù‡ کوکی‌های مرورگر Ùعال باشد. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt
new file mode 100644
index 000000000..44e98db06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt
@@ -0,0 +1,17 @@
+یک صÙحه در ویکی اÙزوده شده یا تغییر کرده، اطلاعات آن را می‌توانید در زیر بینید:
+
+تاریخ: @DATE@
+مرورگر: @BROWSER@
+آدرس IP: @IPADDRESS@
+نام هوست: @HOSTNAME@
+نگارش پیشین: @OLDPAGE@
+نگارش نو: @NEWPAGE@
+خلاصه ویرایش: @SUMMARY@
+کاربر: @USER@
+
+@DIFF@
+
+
+--
+این ایمیل توسط DokuWiki تولید شده است
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt
new file mode 100644
index 000000000..06377a94a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt
@@ -0,0 +1,3 @@
+====== این صÙحه وجود ندارد ======
+
+شما به این صÙحه Ú©Ù‡ وجود ندارد رسیده‌اید. اگر دسترسی‌ها به شما اجازه می‌دهند، می‌توانید این صÙحه را با کلیلک کردن روی دکمه‌ی «ساخت این صÙحه» ایجاد کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt
new file mode 100644
index 000000000..78a3d94be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt
@@ -0,0 +1,3 @@
+====== نگارشی یاÙت نشد ======
+
+نگارش موردنظر یاÙت نشد. از دکمه‌ی «نگارش‌های پیشین» برای مشاهده‌ی نگارش‌های پیشین این صÙحه استÙاده کنید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt
new file mode 100644
index 000000000..3a67326df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt
@@ -0,0 +1,3 @@
+====== پیش‌نمایش ======
+
+این پیش‌نمایش متن شماست. به یاد داشته باشید که این متن **هنوز ذخیره نشده‌است** \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt
new file mode 100644
index 000000000..fd76b7ddd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt
@@ -0,0 +1,13 @@
+سلام @FULLNAME@!
+
+یک Ù†Ùر برای ورود به @DOKUWIKIURL@ با عنوان @TITLE@ درخواست گذرواژه‌ای جدید کرده است:
+
+اگر شما چنین درخواستی نداده‌اید، این ایمیل را پاک کنید.
+
+اگر این درخواست توسط شما داده شده است، باید آن را تایید کنید، پس روی پیوند زیر کلیک کنید.
+
+@CONFIRM@
+
+--
+این ایمیل توسط DokuWiki تولید شده است
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt
new file mode 100644
index 000000000..1acfdb466
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt
@@ -0,0 +1 @@
+این صÙحه Ùقط خواندنی است. شما می‌توانید متن صÙحه را مشاهده کنید، اما نمی‌توانید آن را تغییر دهید. اگر Ùکر می‌کنید Ú©Ù‡ مشکلی رخ داده است، مدیر ویکی را در جریان بگذارید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt
new file mode 100644
index 000000000..5d5b5b795
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt
@@ -0,0 +1,3 @@
+====== تغییرات اخیر ======
+
+این صÙحه‌ها اخیرن تغییر کرده‌اند. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt
new file mode 100644
index 000000000..c6e1f0d4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt
@@ -0,0 +1,3 @@
+====== ثبت نام ======
+
+تمامی Ùیلدها را پر کنید Ùˆ اطمینان پیدا کنید Ú©Ù‡ ایمیل معتبر وارد کرده‌اید - اگر شما گذرواژه‌ای وارد نکردید، یک مقدار جدید برای‌تان ارسال خواهد شد. نام کاربری شما باید یک [[doku>pagename|صÙحه‌ی]] معتبر باشد. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt
new file mode 100644
index 000000000..e22c2d0ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt
@@ -0,0 +1,14 @@
+یک کاربر تازه با مشخصات زیر عضو ویکی شده است:
+
+نام کاربری: @NEWUSER@
+اسم کامل: @NEWNAME@
+ایمیل: @NEWEMAIL@
+
+تاریخ: @DATE@
+مرورگر: @BROWSER@
+آدرس IP: @IPADDRESS@
+نام هوست: @HOSTNAME@
+
+--
+این ایمیل توسط DokuWiki تولید شده است
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt
new file mode 100644
index 000000000..8b7b0d387
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt
@@ -0,0 +1,3 @@
+====== ارسال گذرواژه‌ی جدید ======
+
+خواهشمندیم نام کاربری خود را در Ùرم زیر بنویسید تا گذرواژه‌ی جدید برای تان ارسال شود. یک پیوند تاییدیه برای ایمیل ثبت شده ارسال می‌شود. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt
new file mode 100644
index 000000000..7714ae674
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt
@@ -0,0 +1,3 @@
+====== نگارش‌های پیشین ======
+
+در اینجا نگارش‌های پیشین این صÙحه را مشاهده می‌کنید. برای بازگشتن به آن‌ها، آن را انتخاب کنید Ùˆ کلید «ویرایش این صÙحه» را انتخاب کنید Ùˆ سپس ذخیره نمایید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt
new file mode 100644
index 000000000..3f0378ed3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt
@@ -0,0 +1,5 @@
+====== جستجو ======
+
+نتایج جستجو در زیر آمده است. اگر به نتیجه‌ی مطلوبی نرسیده‌اید، می‌توانید صÙحه‌ی مورد نظر را ایجاد کنید.
+
+===== نتایج ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt
new file mode 100644
index 000000000..9d0500860
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt
@@ -0,0 +1 @@
+**این یک نگارش قدیمی از این مطلب است!** \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt
new file mode 100644
index 000000000..58d3ca0f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt
@@ -0,0 +1,445 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+as
+an
+and
+you
+your
+them
+their
+com
+for
+from
+into
+if
+in
+is
+it
+how
+of
+on
+or
+that
+the
+this
+to
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
+من
+تو
+او
+ما
+شما
+آنها
+ایشان
+ایشون
+از
+Ùˆ
+را
+ای
+یا
+باید
+شاید
+چرا
+چون
+چگونه
+Ú†Ù‡
+اگر
+الان
+سلام
+ممنون
+موÙÙ‚
+باشید
+باش
+باشند
+باشی
+باشم
+باشد
+است
+نیست
+شد
+شدن
+شدند
+شدیم
+شدید
+درباره
+یک
+دو
+سه
+چهار
+پنج
+شش
+Ù‡Ùت
+هشت
+ده
+در
+هست
+هستم
+هستی
+هستیم
+هستید
+هستند
+برای
+این
+آن
+اون
+روی
+رو
+بود
+بودم
+بودی
+بودیم
+بودید
+بودند
+کجا
+کی
+با
+کس
+کسی
+پیرامون
+نزدیک
+بالا
+پایین
+بالای
+بالاتر
+مواÙÙ‚
+مطابق
+طبق
+برطبق
+همان
+سر
+درمیان
+عرض
+طرÙ
+عملا
+واقعا
+بعد
+قبل
+جستجو
+سپس
+دوباره
+رÙتم
+رÙتی
+رÙت
+رÙتیم
+رÙتید
+رÙتند
+بای
+اوه
+آه
+اه
+برابر
+بااینکه
+همواره
+همیشه
+پیوسته
+وقت
+هزار
+دیگر
+جدا
+شخص
+کدام
+هیچگونه
+بهرحال
+هرچیز
+هیچکار
+درهرصورت
+پدیدار
+درک
+باشه
+جنوب
+ضبط
+حوالی
+نزدیکی
+چنانچه
+بطوریکه
+هنگامیکه
+مثال
+مانند
+پرسیدن
+جویا
+خواهش
+خواستن
+انجمن
+کنار
+پیک
+بیرون
+خارج
+مرتبا
+آغاز
+پایان
+آمد
+امد
+به
+زیرا
+چونکه
+آمدن
+بودن
+درخور
+بوده
+پیش
+پس
+قبلا
+راحت
+مقدم
+کار
+برو
+بیا
+باور
+گمان
+بمیر
+Ú†Ù¾
+راست
+شمال
+غرب
+شرق
+دور
+گذشته
+آینده
+بهتر
+بهترین
+بدترین
+عظیم
+Ú©ÙˆÚ†Ú©
+نیک
+بدتر
+خوب
+بد
+زشت
+میان
+هردو
+هم
+یکی
+کوتاه
+بلند
+مختصر
+Ø­Ú©Ù…
+اما
+ولی
+لیکن
+حز
+مگر
+Ùقط
+بدون
+محض
+بخش
+بدست
+وسیله
+درجه
+اول
+دوم
+سوم
+چهارم
+پنجم
+ششم
+Ù‡Ùتم
+هشتم
+نهم
+دهم
+امکان
+داشتن
+داشتیم
+داشتی
+داشتند
+داشتید
+سبب
+علت
+موجب
+هدÙ
+صÙر
+محتوی
+دارا
+شامل
+نیا
+چیز
+نرو
+مسیر
+روش
+جهت
+دقیقا
+درطی
+درضمن
+بسرعت
+رایج
+جاری
+طورقطعی
+شرح
+کرد
+انجام
+عدد
+غیر
+بریم
+کاملا
+قلم
+آب
+سایه
+مساوی
+صاÙ
+هموار
+حتی
+جÙت
+هرگز
+درست
+کامل
+چنین
+دومین
+سومین
+چهارمین
+پنجمین
+ششمین
+هشتمین
+نهمین
+دهمین
+برید
+رÙتن
+راه
+درود
+خداحاÙظ
+حاجی
+واقع
+سخت
+آسان
+مشکل
+اینجا
+آنجا
+خودش
+هنوز
+بلاÙاصله
+نگاه
+Ù†Ú¯Ù‡
+آخر
+اخر
+عمرا
+کمترین
+کوچکترین
+اقل
+مثل
+Ø´Ú©Ù„
+نظر
+چندین
+زیاد
+احتمالا
+متوسط
+یعنی
+اساسا
+عالی
+وای
+خودم
+خودت
+خودمان
+خودمون
+اسم
+نام
+آره
+حال
+حالا
+اینک
+خیلی
+بارها
+بسیار
+Ú©Ù†
+وسط
+ممکن
+راستی
+Ùعلا
+صحیح
+واقعی
+Ú¯Ùت
+Ú¯Ùتم
+Ú¯Ùتیم
+امثال
+آنکه
+مهم
+جدی
+چنان
+چندان
+زیادی
+بعضی
+گاهگاهی
+زود
+بزودی
+بگیر
+ببر
+بردن
+گیرنده
+تا
+تشکر
+سپاس
+ان
+آنان
+بکلی
+تماما
+بنا
+همدیگر
+جلو
+معمولا
+مقدار
+موقع
+اونجا
+آیا
+Ú©Ù‡
+بچه
+حاضر
+میخواستم
+بلی
+خیر
+Ùوروم
+خواهم
+داره
+نداره
+داری
+همون
+میبینم
+اینجوریه
+بهش
+هستن
+امضام
+اولی
+دومی
+سومی
+چهارمی
+بگذار
+بکنه
+امروز
+صدمین
+همش
+همگی
+هوا
+اعلام
+اخرین
+خودشون
+حد
+شده
+اینکه
+خب
+یه
+اینجوری
+گاه
+گهگاه
+گاهی
+گهگدار
+گهگداری
+ها
+میشه
+کمی
+راجبه
+توضیح
+بدی
+راجع
+می
+شه
+روز
+کنی
+اصلا \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt
new file mode 100644
index 000000000..140f2e3e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt
@@ -0,0 +1,21 @@
+درود!
+
+صÙحه‌ی @PAGE@ با عنوان @TITLE@ تغییر کرد.
+تغییرات عبارتند از:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+تاریخ: @DATE@
+کاربر: @USER@
+خلاصه‌ی ویرایش: @SUMMARY@
+نگارش پیشین: @OLDPAGE@
+نگارش تازه: @NEWPAGE@
+
+برای لغو دریاÙت پیام‌های آگاهی دهنده، وارد ویکی به آدرس
+@DOKUWIKIURL@ شده Ùˆ سپس به صÙحه‌ی @NEWPAGE@ بروید
+Ùˆ از عضویت صÙحه یا Ùضای‌نام خارج شوید.
+
+--
+این ایمیل توسط DokuWiki به آدرس @DOKUWIKIURL@ ایجاد شده است. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt
new file mode 100644
index 000000000..d79083306
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt
@@ -0,0 +1,3 @@
+====== به روز رسانی پروÙایل ======
+
+شما می‌توانید مقادیر زیر را تغییر دهید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt
new file mode 100644
index 000000000..625df73dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt
@@ -0,0 +1,14 @@
+یک Ùایل به ویکی ارسال شد:
+
+Ùایل: @MEDIA@
+تاریخ: @DATE@
+مرورگر: @BROWSER@
+آدرس IP: @IPADDRESS@
+نام هوست: @HOSTNAME@
+اندازه: @SIZE@
+MIME: @MIME@
+کاربر: @USER@
+
+--
+این ایمیل توسط DokuWiki تولید شده است
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt
new file mode 100644
index 000000000..a78c86f06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt
@@ -0,0 +1,3 @@
+====== اسپم مسدود شد ======
+
+این تغییرات ذخیره **نمی‌شود**ØŒ چون چند کلمه از کلمه‌های مسدود شده در آن یاÙت شده است. اگر Ùکر می‌کنید Ú©Ù‡ نباید این اتÙاق می‌اÙتاد با مدیر سیستم تماس بگیرید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt
new file mode 100644
index 000000000..b57b6080c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt
@@ -0,0 +1,3 @@
+====== Ylläpito ======
+
+Alla on lista DokuWiki:ssä käytössä olevista ylläpitotoiminnoista.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt
new file mode 100644
index 000000000..fa3571e46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt
@@ -0,0 +1 @@
+===== Muita liitännäisiä ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt
new file mode 100644
index 000000000..457720241
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt
@@ -0,0 +1,4 @@
+====== Linkitykset ======
+
+Tässä lista tälle sivuille linkittävistä sivuista.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt
new file mode 100644
index 000000000..be788a116
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt
@@ -0,0 +1,5 @@
+====== On olemassa uudempi versio ======
+
+Muokkaamastasi dokumentista on olemassa uudempi versio. Näin käy, kun toinen käyttäjä muuttaa dokumenttia sillä aikaa, kun sinä olit muokkaamassa sitä.
+
+Tutki alla näkyvät eroavaisuudet kunnolla ja päätä mikä versio säilytetään. Jos valitset "tallenna", sinun versiosi tallennetaan. Valitse ''peru'' pitääksesi tämänhetkisen, toisen käyttäjän muuttaman version.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt
new file mode 100644
index 000000000..cd31da06b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt
@@ -0,0 +1,3 @@
+====== Lupa evätty ======
+
+Sinulla ei ole tarpeeksi valtuuksia jatkaa. Ehkä unohdit kirjautua sisään?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt
new file mode 100644
index 000000000..fbf62b78c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt
@@ -0,0 +1,3 @@
+====== Erot ======
+
+Tämä näyttää erot valitun ja nykyisen version kesken tästä sivusta.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt
new file mode 100644
index 000000000..859f4d9f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt
@@ -0,0 +1,5 @@
+====== Vedos löydetty ======
+
+Edellinen muokkauksesi tälle sivulle ei ole päivittynyt oikein. DokuWiki on automaattisesti tallentanut vedoksen muokkauksen aikana. Voit nyt jatkaa muokkausta. Alla näet tallennetun version edellisestä istunnostasi.
+
+Valitse jos haluat //palauttaa// edellisen muutoksesi, //poistaa// automaattisesti tallennetun vedoksen, vai //peruuttaa// muutokset. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt
new file mode 100644
index 000000000..81b7714d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt
@@ -0,0 +1 @@
+Muokkaa sivua ja paina ''Tallenna''. Katso [[wiki:syntax]] nähdäksesi Wikisyntaksi. Muuta sivua vain jos voit **parantaa** sitä. Jos haluat kokeilla Wikiä hyvä paikka siihen on [[playground:playground]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt
new file mode 100644
index 000000000..fd4d9a3de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt
@@ -0,0 +1,2 @@
+**Olet ladannut vanhan version dokumentista** Jos tallennat tämän, tästä tulee uusin versio dokumentista.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt
new file mode 100644
index 000000000..9086e220e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt
@@ -0,0 +1,3 @@
+====== hakemisto ======
+
+Tämä on hakemisto kaikista saatavilla olevista sivuista järjestettynä [[doku>namespace|nimiavaruuksittain]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html
new file mode 100644
index 000000000..8d20e045c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html
@@ -0,0 +1,21 @@
+<p>Tämä sivu avustaa <a href="http://dokuwiki.org">Dokuwikin</a> ensiasennuksessa ja
+ asetuksissa. Lisätietoa asennusohjelmasta löytyy ohjelman
+ <a href="http://dokuwiki.org/installer">dokumentaatiosta</a>.</p>
+
+<p>DokuWiki käyttää tavallisia tiedostoja wiki-sivujen, sekä muiden niihin liittyvien
+ tietojen kuten kuvien, hakuindeksien, versionhallinnan jne. tallentamiseen. Toimiakseen
+ oikein DokuWikillä <strong>täytyy</strong> olla kirjoitusoikeus niihin hakemistoihin joissa nämä
+ tiedostot sijaitsevat. Asennusohjelma ei pysty asettamaan näitä oikeuksia. Tämä täytyy
+ useimmiten tehdä suoraan komentoriviltä tai muulla, esimerkiksi
+ internet-palveluntarjoajan määrittämällä tavalla, kuten FTP -ohjelmalla tai erillisen
+ asetusvalikon kautta. (cPanel).</p>
+
+<p>Asennusohjelma määrittelee DokuWikin <acronym title="käyttöoikeudet">käyttöoikeudet (ACL)</acronym>,
+ jotka mahdollistavat ylläpitäjän sisäänkirjautumisen ja pääsyn DokuWikin ylläpito -valikkoon,
+ josta voidaan asentaa plugineja, hallita käyttäjätietoja, wiki-sivujen luku- ja
+ kirjoitusoikeuksia sekä muita asetuksia. Käyttöoikeuksien käyttäminen ei ole pakollista,
+ mutta se helpottaa DokuWikin ylläpitämistä.</p>
+
+<p>Kokeneille käyttäjille tai käyttäjille joilla on erityisvaatimuksia asennukselle
+ löytyy lisätietoa <a href="http://dokuwiki.org/install">asennuksesta</a> sekä
+ <a href="http://dokuwiki.org/config">asetuksista</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php
new file mode 100644
index 000000000..6ef19ee8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php
@@ -0,0 +1,248 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Petteri <petteri@gmail.com>
+ * @author Matti Pöllä <mpo@iki.fi>
+ * @author otto@valjakko.net
+ * @author Otto Vainio <otto@valjakko.net>
+ * @author Teemu Mattila <ghcsystems@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = 'â€';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '’';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Muokkaa tätä sivua';
+$lang['btn_source'] = 'Näytä sivun lähdekoodi';
+$lang['btn_show'] = 'Näytä sivu';
+$lang['btn_create'] = 'Luo tämä sivu';
+$lang['btn_search'] = 'Etsi';
+$lang['btn_save'] = 'Tallenna';
+$lang['btn_preview'] = 'Esikatselu';
+$lang['btn_top'] = 'Takaisin ylös';
+$lang['btn_newer'] = '<< uudemmat';
+$lang['btn_older'] = 'vanhemmat >>';
+$lang['btn_revs'] = 'Vanhat versiot';
+$lang['btn_recent'] = 'Viimeiset muutokset';
+$lang['btn_upload'] = 'Lähetä tiedosto';
+$lang['btn_cancel'] = 'Peru';
+$lang['btn_index'] = 'Hakemisto';
+$lang['btn_secedit'] = 'Muokkaa';
+$lang['btn_login'] = 'Kirjaudu sisään';
+$lang['btn_logout'] = 'Kirjaudu ulos';
+$lang['btn_admin'] = 'Ylläpito';
+$lang['btn_update'] = 'Päivitä';
+$lang['btn_delete'] = 'Poista';
+$lang['btn_back'] = 'Takaisin';
+$lang['btn_backlink'] = 'Paluulinkit';
+$lang['btn_backtomedia'] = 'Takaisin mediatiedostojen valintaan';
+$lang['btn_subscribe'] = 'Tilaa muutokset';
+$lang['btn_unsubscribe'] = 'Lopeta muutosten tilaus';
+$lang['btn_subscribens'] = 'Tilaa nimiavaruuden muutokset';
+$lang['btn_unsubscribens'] = 'Lopeta nimiavaruuden muutosten tilaus';
+$lang['btn_profile'] = 'Päivitä profiili';
+$lang['btn_reset'] = 'Tyhjennä';
+$lang['btn_resendpwd'] = 'Lähetä uusi salasana';
+$lang['btn_draft'] = 'Muokkaa luonnosta';
+$lang['btn_recover'] = 'Palauta luonnos';
+$lang['btn_draftdel'] = 'Poista luonnos';
+$lang['btn_revert'] = 'palauta';
+$lang['loggedinas'] = 'Kirjautunut nimellä';
+$lang['user'] = 'Käyttäjänimi';
+$lang['pass'] = 'Salasana';
+$lang['newpass'] = 'Uusi salasana';
+$lang['oldpass'] = 'Vahvista nykyinen salasana';
+$lang['passchk'] = 'uudelleen';
+$lang['remember'] = 'Muista minut';
+$lang['fullname'] = 'Koko nimi';
+$lang['email'] = 'Sähköposti';
+$lang['register'] = 'Rekisteröidy';
+$lang['profile'] = 'Käyttäjän profiili';
+$lang['badlogin'] = 'Käyttäjänimi tai salasana oli väärä.';
+$lang['minoredit'] = 'Pieni muutos';
+$lang['draftdate'] = 'Luonnos tallennettu automaattisesti';
+$lang['nosecedit'] = 'Sivu on muuttunut välillä ja kappaleen tiedot olivat vanhentuneet. Koko sivu ladattu.';
+$lang['regmissing'] = 'Kaikki kentät tulee täyttää.';
+$lang['reguexists'] = 'Käyttäjä tällä käyttäjänimellä on jo olemassa.';
+$lang['regsuccess'] = 'Käyttäjä luotiin ja salasana lähetettiin sähköpostilla.';
+$lang['regsuccess2'] = 'Käyttäjänimi on luotu.';
+$lang['regmailfail'] = 'Näyttää siltä, että salasanan lähettämisessä tapahtui virhe. Ota yhteys ylläpitäjään!';
+$lang['regbadmail'] = 'Antamasi sähköpostiosoite näyttää epäkelvolta. Jos pidät tätä virheenä ota yhteys ylläpitäjään.';
+$lang['regbadpass'] = 'Annetut kaksi salasanaa eivät täsmää. Yritä uudelleen.';
+$lang['regpwmail'] = 'DokuWiki salasanasi';
+$lang['reghere'] = 'Puuttuuko sinulta käyttäjätili? Hanki sellainen';
+$lang['profna'] = 'Tässä wikissä profiilien muokkaaminen ei ole mahdollista';
+$lang['profnochange'] = 'Ei muutoksia.';
+$lang['profnoempty'] = 'Tyhjä nimi tai sähköpostiosoite ei ole sallittu.';
+$lang['profchanged'] = 'Käyttäjän profiilin päivitys onnistui.';
+$lang['pwdforget'] = 'Unohtuiko salasana? Hanki uusi';
+$lang['resendna'] = 'Tämä wiki ei tue salasanan uudelleenlähettämistä.';
+$lang['resendpwd'] = 'Lähetä uusi salasana käyttäjälle';
+$lang['resendpwdmissing'] = 'Kaikki kentät on täytettävä.';
+$lang['resendpwdnouser'] = 'Käyttäjää ei löydy tietokannastamme.';
+$lang['resendpwdbadauth'] = 'Tunnistuskoodi on virheellinen. Varmista, että käytit koko varmistuslinkkiä.';
+$lang['resendpwdconfirm'] = 'Varmistuslinkki on lähetetty sähköpostilla';
+$lang['resendpwdsuccess'] = 'Uusi salasanasi on lähetetty sähköpostilla.';
+$lang['license'] = 'Jollei muuta ole mainittu, niin sisältö tässä wikissä on lisensoitu seuraavalla lisenssillä:';
+$lang['licenseok'] = 'Huom: Muokkaamalla tätä sivua suostut lisensoimaan sisällön seuraavan lisenssin mukaisesti:';
+$lang['searchmedia'] = 'Etsi tiedostoa nimeltä:';
+$lang['searchmedia_in'] = 'Etsi kohteesta %s';
+$lang['txt_upload'] = 'Valitse tiedosto lähetettäväksi';
+$lang['txt_filename'] = 'Lähetä nimellä (valinnainen)';
+$lang['txt_overwrt'] = 'Ylikirjoita olemassa oleva';
+$lang['lockedby'] = 'Tällä hetkellä tiedoston on lukinnut';
+$lang['lockexpire'] = 'Lukitus päättyy';
+$lang['willexpire'] = 'Lukituksesi tämän sivun muokkaukseen päättyy minuutin kuluttua.\nRistiriitojen välttämiseksi paina esikatselu-nappia nollataksesi lukitusajan.';
+$lang['notsavedyet'] = 'Dokumentissa on tallentamattomia muutoksia, jotka häviävät.\n Haluatko varmasti jatkaa?';
+$lang['rssfailed'] = 'Virhe tapahtui noudettaessa tätä syötettä: ';
+$lang['nothingfound'] = 'Mitään ei löytynyt.';
+$lang['mediaselect'] = 'Mediatiedoston valinta';
+$lang['fileupload'] = 'Mediatiedoston lähetys';
+$lang['uploadsucc'] = 'Tiedoston lähetys onnistui';
+$lang['uploadfail'] = 'Tiedoston lähetys epäonnistui. Syynä ehkä väärät oikeudet?';
+$lang['uploadwrong'] = 'Tiedoston lähetys evätty. Tämä tiedostopääte on kielletty';
+$lang['uploadexist'] = 'Tiedosto on jo olemassa. Mitään ei tehty.';
+$lang['uploadbadcontent'] = 'Tiedoston sisältö ei vastannut päätettä %s';
+$lang['uploadspam'] = 'Roskapostin estolista esti tiedoston lähetyksen.';
+$lang['uploadxss'] = 'Tiedoston lähetys estettiin mahdollisen haitallisen sisällön vuoksi.';
+$lang['uploadsize'] = 'Lähetetty tiedosto oli liian iso. (max %s)';
+$lang['deletesucc'] = 'Tiedosto "%s" on poistettu.';
+$lang['deletefail'] = 'Kohdetta "%s" poistaminen ei onnistunut - tarkista oikeudet.';
+$lang['mediainuse'] = 'Tiedostoa "%s" ei ole poistettu - se on vielä käytössä.';
+$lang['namespaces'] = 'Nimiavaruudet';
+$lang['mediafiles'] = 'Tarjolla olevat tiedostot';
+$lang['js']['searchmedia'] = 'Etsi tiedostoja';
+$lang['js']['keepopen'] = 'Pidä valinnan ikkuna avoinna.';
+$lang['js']['hidedetails'] = 'Piilota yksityiskohdat';
+$lang['js']['nosmblinks'] = 'Linkit Windows-jakoihin toimivat vain Microsoft Internet Explorerilla.
+Voit silti kopioida ja liittää linkin.';
+$lang['js']['linkwiz'] = 'Linkkivelho';
+$lang['js']['linkto'] = 'Linkki kohteeseen:';
+$lang['js']['del_confirm'] = 'Haluatko todella poistaa valitut kohteet?';
+$lang['js']['mu_btn'] = 'Lähetä useampia tiedostoja kerralla';
+$lang['mediausage'] = 'Käytä seuraavaa merkintätapaa viittausta tehtäessä:';
+$lang['mediaview'] = 'Katsele alkuperäistä tiedostoa';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Siirrä tiedosto nykyiseen nimiavaruuteen täällä. Voit luoda uusia alinimiavaruuksia laittamalla lisäämällä sen nimen ja kaksoispisteen "Lähetä nimellä" eteen.';
+$lang['mediaextchange'] = 'Tiedoston pääte muutettu: .%s on nyt .%s!';
+$lang['reference'] = 'Viitteet';
+$lang['ref_inuse'] = 'Tiedostoa ei voi poistaa, koska seuraavat sivut käyttävät sitä:';
+$lang['ref_hidden'] = 'Osa viitteistä on sivuilla, joihin sinulla ei ole lukuoikeutta';
+$lang['hits'] = 'Osumia';
+$lang['quickhits'] = 'Sopivat sivunimet';
+$lang['toc'] = 'Sisällysluettelo';
+$lang['current'] = 'nykyinen';
+$lang['yours'] = 'Sinun versiosi';
+$lang['diff'] = 'Näytä eroavaisuudet nykyiseen versioon';
+$lang['diff2'] = 'Näytä eroavaisuudet valittuun versioon';
+$lang['line'] = 'Rivi';
+$lang['breadcrumb'] = 'Jäljet';
+$lang['youarehere'] = 'Olet täällä';
+$lang['lastmod'] = 'Viimeksi muutettu';
+$lang['by'] = '/';
+$lang['deleted'] = 'poistettu';
+$lang['created'] = 'luotu';
+$lang['restored'] = 'vanha versio palautettu';
+$lang['external_edit'] = 'ulkoinen muokkaus';
+$lang['summary'] = 'Yhteenveto muokkauksesta';
+$lang['noflash'] = 'Tarvitset <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash-liitännäisen</a> nähdäksesi tämän sisällön.';
+$lang['download'] = 'Lataa palanen';
+$lang['mail_newpage'] = 'sivu lisätty:';
+$lang['mail_changed'] = 'sivu muutettu:';
+$lang['mail_new_user'] = 'uusi käyttäjä:';
+$lang['mail_upload'] = 'tiedosto lähetetty:';
+$lang['qb_bold'] = 'Lihavoitu teksti';
+$lang['qb_italic'] = 'Kursivoitu teksti';
+$lang['qb_underl'] = 'Alleviivattu teksti';
+$lang['qb_code'] = 'Kooditeksti';
+$lang['qb_strike'] = 'Yliviivattu teksti';
+$lang['qb_h1'] = 'Taso 1 otsikko';
+$lang['qb_h2'] = 'Taso 2 otsikko';
+$lang['qb_h3'] = 'Taso 3 otsikko';
+$lang['qb_h4'] = 'Taso 4 otsikko';
+$lang['qb_h5'] = 'Taso 5 otsikko';
+$lang['qb_h'] = 'Otsikko';
+$lang['qb_hs'] = 'Valitse otsikko';
+$lang['qb_hplus'] = 'Ylempi otsikko';
+$lang['qb_hminus'] = 'Alempi otsikko';
+$lang['qb_hequal'] = 'Saman tason otsikko';
+$lang['qb_link'] = 'Sisäinen linkki';
+$lang['qb_extlink'] = 'Ulkoinen linkki';
+$lang['qb_hr'] = 'Vaakaerotin';
+$lang['qb_ol'] = 'Järjestetyn listan osa ';
+$lang['qb_ul'] = 'Epäjärjestetyn listan osa';
+$lang['qb_media'] = 'Lisää kuvia ja muita tiedostoja';
+$lang['qb_sig'] = 'Lisää allekirjoitus';
+$lang['qb_smileys'] = 'Hymiöt';
+$lang['qb_chars'] = 'Erikoismerkit';
+$lang['upperns'] = 'Hyppää edelliseen nimiavaruuteen';
+$lang['admin_register'] = 'Lisää uusi käyttäjä';
+$lang['metaedit'] = 'Muokkaa metadataa';
+$lang['metasaveerr'] = 'Metadatan kirjoittaminen epäonnistui';
+$lang['metasaveok'] = 'Metadata tallennettu';
+$lang['img_backto'] = 'Takaisin';
+$lang['img_title'] = 'Otsikko';
+$lang['img_caption'] = 'Kuvateksti';
+$lang['img_date'] = 'Päivämäärä';
+$lang['img_fname'] = 'Tiedoston nimi';
+$lang['img_fsize'] = 'Koko';
+$lang['img_artist'] = 'Kuvaaja';
+$lang['img_copyr'] = 'Tekijänoikeus';
+$lang['img_format'] = 'Formaatti';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Avainsanat';
+$lang['subscribe_success'] = '%s lisättiin käyttäjän %s seurattavien listaan';
+$lang['subscribe_error'] = 'Lisättäessä %s käyttäjän %s seurattavien listaan tapahtui virhe';
+$lang['subscribe_noaddress'] = 'Käyttäjänimelle ei löydy osoitetta. Seurattavien listaan lisääminen ei onnistu.';
+$lang['unsubscribe_success'] = '%s poistettiin käyttäjän %s seurattavien listasta';
+$lang['unsubscribe_error'] = 'Poistettaessa %s käyttäjän %s seurattavien listasta tapahtui virhe';
+$lang['authmodfailed'] = 'Käyttäjien autentikoinnin asetukset ovat virheelliset. Ilmoita asiasta wikin ylläpitäjälle.';
+$lang['authtempfail'] = 'Käyttäjien autentikointi ei tällä hetkellä onnistu. Jos ongelma jatkuu, ota yhteyttä wikin ylläpitäjään.';
+$lang['i_chooselang'] = 'Valitse kieli';
+$lang['i_installer'] = 'DokuWikin asentaja';
+$lang['i_wikiname'] = 'Wikin nimi';
+$lang['i_enableacl'] = 'Käytä käyttöoikeuksien hallintaa (ACL) (Suositeltu)';
+$lang['i_superuser'] = 'Pääkäyttäjä';
+$lang['i_problems'] = 'Asennusohjelma löysi alla listattuja ongelmia ongelmia. Et voi jatkaa ennen kuin ne on korjattu.';
+$lang['i_modified'] = 'Turvallisuussyistä tämä ohjelma toimii vain uusien ja muokkaamattomien Dokuwiki-asennusten kanssa. Pura tiedostot uudestaan asennuspaketista, tai lue <a href="http://dokuwiki.org/install">Dokuwikin asennusohje (englanniksi)</a>';
+$lang['i_funcna'] = 'PHP:n funktio <code>%s</code> ei ole käytettävissä. Palveluntarjoajasi on saattanut poistaa sen jostain syystä.';
+$lang['i_phpver'] = 'Käyttämäsi PHP-ohjelmiston versio <code>%s</code> on pienempi, kuin tarvitaan <code>%s</code>. PHP-asennuksesi pitää päivittää.';
+$lang['i_permfail'] = '<code>%s</code> ei ole DokuWikin kirjoitettavissa. Muokkaa hakemiston oikeuksia!';
+$lang['i_confexists'] = '<code>%s</code> on jo olemassa';
+$lang['i_writeerr'] = '<code>%s</code>n luonti epäonnistui. Tarkista hakemiston/tiedoston oikeudet ja luo tiedosto käsin.';
+$lang['i_badhash'] = 'tunnistamaton tai muokattu dokuwiki.php (tarkistussumma=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - väärä tai tyhjä arvo';
+$lang['i_success'] = 'Kokoonpano tehty onnistuneesti. Voit poistaa install.php tiedoston. Jatka <a href="doku.php">uuteen DokuWikiisi</a>.';
+$lang['i_failure'] = 'Joitain virheitä tapahtui kirjoitettaessa vaadittavia tiedostoja. Sinun pitää korjata ne käsin ennen kuin voit käyttää <a href="doku.php">uutta DokuWikiäsi</a>.';
+$lang['i_policy'] = 'Käyttöoikeuksien oletusmenettelytapa';
+$lang['i_pol0'] = 'Avoin Wiki (luku, kirjoitus, tiedostojen lähetys on sallittu kaikille)';
+$lang['i_pol1'] = 'Julkinen Wiki (luku kaikilla, kirjoitus ja tiedostojen lähetys rekisteröidyillä käyttäjillä)';
+$lang['i_pol2'] = 'Suljettu Wiki (luku, kirjoitus ja tiedostojen lähetys vain rekisteröityneillä käyttäjillä)';
+$lang['i_retry'] = 'Yritä uudelleen';
+$lang['mu_intro'] = 'Täällä voit lähettää useampia tiedostoja kerralla. Klikkaa Selaa-nappia lisätäksesi ne jonoon. Paina lähetä, kun olet valmis.';
+$lang['mu_gridname'] = 'Tiedoston nimi';
+$lang['mu_gridsize'] = 'Koko';
+$lang['mu_gridstat'] = 'Tilanne';
+$lang['mu_namespace'] = 'Nimiavaruus';
+$lang['mu_browse'] = 'Selaa';
+$lang['mu_toobig'] = 'liian iso';
+$lang['mu_ready'] = 'valmis lähetettäväksi';
+$lang['mu_done'] = 'valmis';
+$lang['mu_fail'] = 'epäonnistui';
+$lang['mu_authfail'] = 'istunto on vanhentunut';
+$lang['mu_progress'] = '@PCT@% lähetetty';
+$lang['mu_filetypes'] = 'Sallitut tyypit';
+$lang['mu_info'] = 'tiedstoa ladattu.';
+$lang['mu_lasterr'] = 'Edellinen virhe:';
+$lang['recent_global'] = 'Seuraat tällä hetkellä muutoksia nimiavaruuden <b>%s</b> sisällä. Voit myös <a href="%s">katsoa muutoksia koko wikissä</a>';
+$lang['years'] = '%d vuotta sitten';
+$lang['months'] = '%d kuukautta sitten';
+$lang['weeks'] = '%d viikkoa sitten';
+$lang['days'] = '%d päivää sitten';
+$lang['hours'] = '%d tuntia sitten';
+$lang['minutes'] = '%d minuuttia sitten';
+$lang['seconds'] = '% sekuntia sitten';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt
new file mode 100644
index 000000000..3a48ff8ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt
@@ -0,0 +1,3 @@
+====== Sivu lukittu ======
+
+Tämä sivu on tällä hetkellä lukittuna, koska se on toisen käyttäjän muokkauksessa. Joudut odottamaan, kunnes hän lopettaa muokkauksen, tai kunnes lukko aukeaa.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt
new file mode 100644
index 000000000..efba26286
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt
@@ -0,0 +1,3 @@
+====== Sisäänkirjautuminen ======
+
+Et ole tällä hetkellä kirjautunut sisään! Anna käyttäjätunnus ja salasana alle kirjautuaksesi. Muista, että evästeiden käyttö tulee olla päällä, jotta sisäänkirjautuminen onnistuu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt
new file mode 100644
index 000000000..0a953cb87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt
@@ -0,0 +1,17 @@
+DokuWikiisi lisättiin tai siellä muutettiin sivua. Tässä yksityiskohdat
+
+Päivämäärä : @DATE@
+Selain: @BROWSER@
+IP-Osoite: @IPADDRESS@
+Isäntänimi: @HOSTNAME@
+Vanha versio: @OLDPAGE@
+Uusi versio: @NEWPAGE@
+Yhteenveto: @SUMMARY@
+Käyttäjä : @USER@
+
+@DIFF@
+
+
+--
+Tämän postin generoi DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt
new file mode 100644
index 000000000..fc6379be7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt
@@ -0,0 +1,3 @@
+====== Tätä otsikkoa ei vielä ole ======
+
+Olet seurannut linkkiä otsikkoon jota ei vielä ole. Voit luoda tämän käyttämällä ''Luo tämä sivu'' -nappia.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt
new file mode 100644
index 000000000..a5138cfc3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt
@@ -0,0 +1,3 @@
+====== Ei tällaista versiota ======
+
+Kyseistä versiota ei ole. Käytä ''Vanha versio''-nappia nähdäksesi listan tämän dokumentin vanhoista versioista
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt
new file mode 100644
index 000000000..848780701
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt
@@ -0,0 +1,3 @@
+====== Esikatselu ======
+
+Tämä on esikatselu siitä, miltä tekstisi tulee näyttämään. Muista, että tätä **ei ole tallennettu** vielä!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt
new file mode 100644
index 000000000..d134943f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt
@@ -0,0 +1,13 @@
+Hei @FULLNAME@!
+
+Joku pyysi uutta salasanaa login nimellesi @TITLE@ sivustolla @DOKUWIKIURL@
+
+Jos sinä ei pyytänyt uutta salasanaa, niin voit unohtaa tämän postin.
+
+Käytä alla olevaa linkkiä vahvistaaksesi, että pyynnön lähettäjä todella olet sinä.
+
+@CONFIRM@
+
+--
+Tämän postin generoi DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt
new file mode 100644
index 000000000..eb4380229
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt
@@ -0,0 +1 @@
+Tämä sivu on vain luettavissa. Voit katsoa sen lähdekoodia, mutta et muuttaa sitä. Kysy ylläpitäjältä jos pidät tätä estoa virheellisenä.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt
new file mode 100644
index 000000000..ffb08107e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt
@@ -0,0 +1,4 @@
+====== Viimeiset muutokset ======
+
+Seuraavat sivut ovat muuttuneet viime aikoina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt
new file mode 100644
index 000000000..cf7a62557
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt
@@ -0,0 +1,3 @@
+====== Rekisteröi uusi käyttäjä ======
+
+Täytä alla olevat tiedot luodaksesi uuden käyttäjätilin tähän wikiin. Muista antaa **toimiva sähköpostiosoite**. Jos sinulta ei kysytä uutta salasanaa, niin uusi salasanasi lähetetään sähköpostiisi. Käyttäjänimi pitää olla myös käypä [[doku>pagename|sivunimi]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt
new file mode 100644
index 000000000..78d73f63d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt
@@ -0,0 +1,14 @@
+Uusi käyttäjä on rekisteröitynyt. Tässä tiedot:
+
+Käyttäjänimi : @NEWUSER@
+Kokonimi : @NEWNAME@
+Sähköposti : @NEWEMAIL@
+
+Päivämäärä : @DATE@
+Selain : @BROWSER@
+IP-osoite : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Tämän postin generoi DokuWiki osoitteessa
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt
new file mode 100644
index 000000000..5a567b022
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Lähetä uusi salasana ======
+
+Täytä käyttäjätunnuksesi kaavakkeeseen pyytääksesi uutta salasanaa wikin käyttäjätilillesi. Vahvistuslinkki lähetetään kirjautumisen yhteydessä antamaan sähköpostiosoitteeseen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt
new file mode 100644
index 000000000..a48cd3366
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt
@@ -0,0 +1,3 @@
+====== Vanha versio ======
+
+Nämä ovat vanhoja versioita nykyisestä dokumentista. Jos haluat palauttaa vanhan version valitse se alhaalta, paina ''Muokkaa tätä sivua'' ja tallenna se.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt
new file mode 100644
index 000000000..aa9fbf52f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt
@@ -0,0 +1,5 @@
+====== Etsi ======
+
+Löydät etsinnän tulokset alta. Jos et löytänyt etsimääsi voit luoda uuden sivun tiedustelusi pohjalta käyttämällä ''Muokkaa tätä sivua'' -napilla.
+
+===== Tulokset =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt
new file mode 100644
index 000000000..243f8d01e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt
@@ -0,0 +1,2 @@
+**Tämä on vanha versio dokumentista!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt
new file mode 100644
index 000000000..f92fe70cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt
@@ -0,0 +1,11 @@
+# Tämä on lista sanoista, jotka indeksoija ohittaa. Yksi sana riviä kohti
+# Kun muokkaat sivua, varmista että käytät UNIX rivinvaihtoa (yksi newline)
+# Ei tarvitse lisätä alle kolmen merkin sanoja. NE ohitetaan automaattisesti.
+# Jos wikissäsin muita kieliä, lisää sanoja listaan esim sivulta http://www.ranks.nl/stopwords/
+www
+eli
+tai
+sinä
+sinun
+com
+oli
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt
new file mode 100644
index 000000000..d1c5d9138
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt
@@ -0,0 +1,23 @@
+Hei!
+
+Sivua @PAGE@ wiki-sivustolla @TITLE@ on muokattu.
+Tässä muutokset:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Päivä : @DATE@
+Käyttäjä : @USER@
+Yhteenveto: @SUMMARY@
+Vanha revisio: @OLDPAGE@
+Uusi revisio: @NEWPAGE@
+
+Poistaaksesi sivun seurannan, kirjaudu wikiin osoitteessa
+@DOKUWIKIURL@ ja siirry sivulle
+@NEWPAGE@
+ja valitse 'Lopeta sivun ja/tai nimiavaruuden tarkkailu'.
+
+--
+Tämän viestin generoi DokuWiki osoitteessa
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt
new file mode 100644
index 000000000..71407954a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Päivitä käyttäjätilisi profiilia ======
+
+Täytä vain ne kentät, joita haluat muuttaa. Et voi muuttaa käyttäjätunnustasi. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt
new file mode 100644
index 000000000..7a5ea49ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt
@@ -0,0 +1,14 @@
+Tiedosto ladattiin DokuWikillesi. Tässä yksityiskohtaiset tiedot:
+
+Tiedosto : @MEDIA@
+PVM : @DATE@
+Selain : @BROWSER@
+IP-Osoite : @IPADDRESS@
+Hostname : @HOSTNAME@
+Koko : @SIZE@
+MIME Type : @MIME@
+Käyttäjä : @USER@
+
+--
+Tämän postin generoi DokuWiki osoitteessa
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt
new file mode 100644
index 000000000..4e416c68c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt
@@ -0,0 +1,3 @@
+====== Roskaposti torjuttu ======
+
+Muutoksiasi **ei** talletettu, koska ne pitivät sisällään yhden tai useampia epäkelpoja sanoja. Jos yritit spämmätä Wikiä, häpeä! Jos pidät tätä virheenä ota yhteyttä wikin ylläpitäjään.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt
new file mode 100644
index 000000000..27743223d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt
@@ -0,0 +1,4 @@
+====== Fyrisiting ======
+
+Niðanfyri kanst tú finna eina røð av amboðum til fyrisiting.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt
new file mode 100644
index 000000000..422377f62
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt
@@ -0,0 +1,4 @@
+====== Ãvísing afturúr ======
+
+Hetta er ein listi yvur øll tey skjøl sum vísa aftur á tað núverandi skjali.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt
new file mode 100644
index 000000000..df3fe52be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt
@@ -0,0 +1,5 @@
+====== Ein níggjari útgáva av skjalinum er til ======
+
+Ein nýggjari útgáva av hesum skjalinum er til. Hetta hendur tá fleiri brúkarir rætta í skjalinum samstundis.
+
+Eftirkanna tær vístu broytingar nágreiniliga, og avgerð hvat fyri útgávu sum skal goymast. Um tú velur ''Goym'', verður tín útgáva av skalinum goymd. Velur tú ''Angra'' varðveittur tú tí núverandi útgávuna.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt
new file mode 100644
index 000000000..505b249b4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt
@@ -0,0 +1,3 @@
+====== Atgongd nokta! ======
+
+Tú hevur ikki rættindi til at halda áfram. Møguliga hevur tú ikki rita inn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt
new file mode 100644
index 000000000..343818b40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt
@@ -0,0 +1,4 @@
+====== Munir ======
+
+Hetta vísur munir millum tí valdu og núverandu útgávu av skjalinum. Gular eru linjur sum er at finna í gomlu útgávuni, og grønar eru linjur sum eru at finna í núvarandi útgávuni.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt
new file mode 100644
index 000000000..2ba92a2d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt
@@ -0,0 +1,2 @@
+Rætta hetta skjal og trýst so á **''[Goym]''** knappin. Sí [[wiki:syntax|snið ábending]] fyri Wiki setningsbygnað. Rætta vinarliga bert hetta skjali um tú kanst **fyrireika** tað. Nýt vinarliga [[playground:playground|sandkassan]] til at testa áðrenn tú rættar í einum røttum skjali. Minst eisini til at brúkar **''[Forskoðan]''** áðrenn tú goymur skjalið.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt
new file mode 100644
index 000000000..274d423af
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt
@@ -0,0 +1,2 @@
+**Tú hevur heinta eina gamla útgávu av hesum skjalinum!** Um tú goymur skjali vilt tú skriva útyvir núverandi við gomlu útgávuni.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt
new file mode 100644
index 000000000..640edfbc3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt
@@ -0,0 +1,3 @@
+====== Evnisyvirlit ======
+
+Hetta er eitt yvirlit yvur øll atkomandi skjøl, flokka eftir [[doku>namespaces|navnarúm]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php
new file mode 100644
index 000000000..a8c241fc1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php
@@ -0,0 +1,173 @@
+<?php
+/**
+ * faroese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Poul J. Clementsen <poul@diku.dk>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+$lang['btn_edit'] = 'Rætta hetta skjal';
+$lang['btn_source'] = 'Vís keldu';
+$lang['btn_show'] = 'Vís skjal';
+$lang['btn_create'] = 'Býrja uppá hetta skjal';
+$lang['btn_search'] = 'Leita';
+$lang['btn_save'] = 'Goym';
+$lang['btn_preview']= 'Forskoðan';
+$lang['btn_top'] = 'Aftur til toppin';
+$lang['btn_newer'] = '<< undan síða';
+$lang['btn_older'] = 'næsta síðe >>';
+$lang['btn_revs'] = 'Gamlar útgávur';
+$lang['btn_recent'] = 'Nýggj broyting';
+$lang['btn_upload'] = 'Legg fílu upp';
+$lang['btn_cancel'] = 'Angra';
+$lang['btn_index'] = 'Evnisyvirlit';
+$lang['btn_secedit']= 'Rætta';
+$lang['btn_login'] = 'Rita inn';
+$lang['btn_logout'] = 'Rita út';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Dagfør';
+$lang['btn_delete'] = 'Strika';
+$lang['btn_back'] = 'Aftur';
+$lang['btn_backlink'] = "Ãvísingar afturúr";
+$lang['btn_backtomedia'] = 'Aftur til val av miðlafílu';
+$lang['btn_subscribe'] = 'Tilmelda broytingar';
+$lang['btn_unsubscribe'] = 'Strika tilmelding av broytingum';
+$lang['btn_profile'] = 'Dagføra vangamynd';
+$lang['btn_reset'] = 'Nullstilla';
+$lang['btn_resendpwd'] = 'Send nýtt loyniorð';
+
+$lang['loggedinas'] = 'Ritavur inn sum';
+$lang['user'] = 'Brúkaranavn';
+$lang['pass'] = 'Loyniorð';
+$lang['newpass'] = 'Nýtt loyniorð';
+$lang['oldpass'] = 'Vátta gamalt loyniorð';
+$lang['passchk'] = 'Endurtak nýtt loyniorð';
+$lang['remember'] = 'Minst til loyniorðið hjá mær';
+$lang['fullname'] = 'Navn';
+$lang['email'] = 'T-postur';
+$lang['register'] = 'Melda til';
+$lang['profile'] = 'Brúkara vangamynd';
+$lang['badlogin'] = 'Skeivt brúkaranavn ella loyniorð.';
+$lang['minoredit'] = 'Smærri broytingar';
+
+$lang['regmissing'] = 'Tú skalt fylla út øll øki.';
+$lang['reguexists'] = 'Hetta brúkaranavn er upptiki.';
+$lang['regsuccess'] = 'Tú ert nú stovnavur sum brúkari. Títt loyniorð verður sent til tín í einum T-posti.';
+$lang['regsuccess2']= 'Tú ert nú stovnavur sum brúkari.';
+$lang['regmailfail']= 'Títt loyniorð bleiv ikki sent. Fá vinarliga samband við administratorin.';
+$lang['regbadmail'] = 'T-post adressan er ógildig. Fá vinarliga samband við administratorin, um tú heldur at hetta er eitt brek.';
+$lang['regbadpass'] = 'Bæði loyniorðini eru ikki eins, royn vinarliga umaftur.';
+$lang['regpwmail'] = 'Títt DokuWiki loyniorð';
+$lang['reghere'] = 'Upprætta eina DokuWiki-konto her';
+
+$lang['profna'] = 'Tað er ikki møguligt at broyta tína vangamynd í hesu wiki';
+$lang['profnochange'] = 'Ongar broytingar, onki tillaga.';
+$lang['profnoempty'] = 'Tómt navn ella t-post adressa er ikki loyvt.';
+$lang['profchanged'] = 'Brúkara vangamynd dagført rætt.';
+
+$lang['pwdforget'] = 'Gloymt títt loyniorð? Fá eitt nýtt';
+$lang['resendna'] = 'Tað er ikki møguligt at fá sent nýtt loyniorð við hesu wiki.';
+$lang['resendpwd'] = 'Send nýtt loyniorð til';
+$lang['resendpwdmissing'] = 'Tú skal filla út øll økir.';
+$lang['resendpwdnouser'] = 'Vit kunna ikki finna hendan brúkara í okkara dátagrunni.';
+$lang['resendpwdsuccess'] = 'Títt nýggja loyniorð er sent við t-posti.';
+
+$lang['txt_upload'] = 'Vel tí fílu sum skal leggjast upp';
+$lang['txt_filename'] = 'Sláa inn wikinavn (valfrítt)';
+$lang['txt_overwrt'] = 'Yvurskriva verandi fílu';
+$lang['lockedby'] = 'Fyribils læst av';
+$lang['lockexpire'] = 'Lásið ferð úr gildi kl.';
+$lang['willexpire'] = 'Títt lás á hetta skjalið ferð úr gildi um ein minnutt.\nTrýst á '.$lang['btn_preview'].'-knappin fyri at sleppa undan trupulleikum.';
+
+$lang['notsavedyet'] = 'Tað eru gjørdar broytingar í skjalinum, um tú haldur fram vilja broytingar fara fyri skeytið.\nYnskir tú at halda fram?';
+$lang['rssfailed'] = 'Eitt brek koma fyri tá roynt var at fáa: ';
+$lang['nothingfound']= 'Leiting gav onki úrslit.';
+
+$lang['mediaselect'] = 'Vel miðlafílu';
+$lang['fileupload'] = 'Legg miðla fílu upp';
+$lang['uploadsucc'] = 'Upp legg av fílu var væl eydna';
+$lang['uploadfail'] = 'Brek við upp legg av fílu. Tað er møguliga trupuleikar við rættindunum';
+$lang['uploadwrong'] = 'Upp legg av fílu víst burtur. Fíluslag er ikki loyvt';
+$lang['uploadexist'] = 'Fílan er longu til.';
+$lang['deletesucc'] = 'Fílan "%s" er nú strika.';
+$lang['deletefail'] = '"%s" kundi ikki strikast - kanna rættindini.';
+$lang['mediainuse'] = 'Fíla "%s" er ikki strika - hen verður enn nýtt.';
+$lang['namespaces'] = 'Navnarúm';
+$lang['mediafiles'] = 'Atkomandi fílur í';
+
+$lang['reference'] = 'Ãvísing til';
+$lang['ref_inuse'] = 'Fílan kan ikki strikast, síðan hon enn verður nýtt á fylgjandi síðum:';
+$lang['ref_hidden'] = 'Nakrar ávísingar eru í skjølum sum tú ikki hevur lesi rættindi til';
+
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Samsvarandi skjøl';
+$lang['toc'] = 'Innihaldsyvirlit';
+$lang['current'] = 'núverandi';
+$lang['yours'] = 'Tín útgáva';
+$lang['diff'] = 'vís broytingar í mun til núverandi útgávu';
+$lang['line'] = 'Linja';
+$lang['breadcrumb'] = 'Leið';
+$lang['youarehere'] = 'Tú ert her';
+$lang['lastmod'] = 'Seinast broytt';
+$lang['by'] = 'av';
+$lang['deleted'] = 'strika';
+$lang['created'] = 'stovna';
+$lang['restored'] = 'gomul útgáva endurstovna';
+$lang['summary'] = 'Samandráttur';
+
+$lang['mail_newpage'] = 'skjal skoyta uppí:';
+$lang['mail_changed'] = 'skjal broytt:';
+
+$lang['js']['nosmblinks'] = "Ãvísingar til Windows shares virka bert í Microsoft Internet Explorer.\nTú kanst enn avrita og sata inn slóðina.";
+
+$lang['qb_bold'] = 'Feit';
+$lang['qb_italic'] = 'Skák';
+$lang['qb_underl'] = 'Undurstrika';
+$lang['qb_code'] = 'Skrivimaskinu tekstur';
+$lang['qb_strike'] = 'Gjøgnumstrika';
+$lang['qb_h1'] = 'Stig 1 yvirskrift';
+$lang['qb_h2'] = 'Stig 2 yvirskrift';
+$lang['qb_h3'] = 'Stig 3 yvirskrift';
+$lang['qb_h4'] = 'Stig 4 yvirskrift';
+$lang['qb_h5'] = 'Stig 5 yvirskrift';
+$lang['qb_link'] = 'Innanhýsis slóð';
+$lang['qb_extlink'] = 'Útvortis slóð';
+$lang['qb_hr'] = 'Vatnrætt linja';
+$lang['qb_ol'] = 'Talmerktur listi';
+$lang['qb_ul'] = 'Ótalmerktur listi';
+$lang['qb_media'] = 'Leggja myndir og aðrar fílur afturat';
+$lang['qb_sig'] = 'Set inn undirskrift';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Sertekn';
+
+$lang['js']['del_confirm']= 'Strika post(ar)?';
+$lang['admin_register']= 'Upprætta nýggjan brúkara';
+
+$lang['metaedit'] = 'Rætta metadáta';
+$lang['metasaveerr'] = 'Brek við skriving av metadáta';
+$lang['metasaveok'] = 'Metadáta goymt';
+$lang['img_backto'] = 'Aftur til';
+$lang['img_title'] = 'Heitið';
+$lang['img_caption'] = 'Myndatekstur';
+$lang['img_date'] = 'Dato';
+$lang['img_fname'] = 'Fílunavn';
+$lang['img_fsize'] = 'Stødd';
+$lang['img_artist'] = 'Myndafólk';
+$lang['img_copyr'] = 'Upphavsrættur';
+$lang['img_format'] = 'Snið';
+$lang['img_camera'] = 'Fototól';
+$lang['img_keywords']= 'Evnisorð';
+
+$lang['subscribe_success'] = 'Skoyt %s uppí tilmeldulistan fyri %s';
+$lang['subscribe_error'] = 'Brek við uppí skoyting av %s til tilmeldulistan fyri %s';
+$lang['subscribe_noaddress']= 'Ongin adressa er knýtt at tíni inn ritan, tú kanst ikki skoytast uppí tilmeldulistan';
+$lang['unsubscribe_success']= 'Strika %s frá tilmeldulistan fyri %s';
+$lang['unsubscribe_error'] = 'Brek við burturtøku av %s frá tilmeldulista fyri %s';
+
+/* auth.class language support */
+$lang['authmodfailed'] = 'Brek við validering av brúkarasamansetingv. Fá samband við umboðsstjóran á hesi wiki.';
+$lang['authtempfail'] = 'Validering av brúkara virkar fyribils ikki. Um hetta er varandi, fá so samband við umboðsstjóran á hesi wiki.';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt
new file mode 100644
index 000000000..2e65a064c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt
@@ -0,0 +1,3 @@
+====== Læst skjal ======
+
+Hetta skjal er fyribils læst av einum øðrum brúkara. Bíða vinarliga til brúkarin er liðugur við at rætta skjali, ella at lásið er fara úr gildi.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt
new file mode 100644
index 000000000..31a4c544f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt
@@ -0,0 +1,3 @@
+====== Rita inn ======
+
+Tú hevur ikki rita inn! Slá inn brúkaranavn og loyniorð. Tín kagi skal loyva at cookies verða goymdar fyri at tú kanst rita inn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt
new file mode 100644
index 000000000..358a23be0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt
@@ -0,0 +1,17 @@
+Eitt skjal í tíni DokuWiki bleiv broytt ella skoytt uppí. Her er ein lýsing:
+
+Dato : @DATE@
+Browser : @BROWSER@
+IP-adressa : @IPADDRESS@
+Hostnavn : @HOSTNAME@
+Gomul útgáva : @OLDPAGE@
+Nýggj útgáva : @NEWPAGE@
+Rætti samandráttur : @SUMMARY@
+Brúkari : @USER@
+
+@DIFF@
+
+
+--
+Hesin t-postur var skaptur av DokuWiki á:
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt
new file mode 100644
index 000000000..6eeb1ef31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt
@@ -0,0 +1,3 @@
+====== Hetta skjal er ikki til (enn) ======
+
+Tú fylgdi ein ávísing til eitt skjal sum ikki er til (enn). Tú kanst stovna skjali við at trýsta á **''[Stovna hetta skjal]''** knappin.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt
new file mode 100644
index 000000000..d0b463a40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt
@@ -0,0 +1,4 @@
+====== Valda útgávan er ikki til ======
+
+Valda útgávan av skjalinum er ikki til! Trýst á knappin **''[Gamlar útgávur]''** fyri at síggja ein lista yvur gamlar útgávur av hesum skjali.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt
new file mode 100644
index 000000000..e3e65d805
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt
@@ -0,0 +1,4 @@
+====== Forskoðan ======
+
+Hetta er ein forskoðan skjalinum, sum vísur hvussi tað fer at síggja út. Minst til: Tað er //**IKKI**// goymt enn! Um tað sær rætt út, trýst so á **''[Goym]''** knappin
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt
new file mode 100644
index 000000000..bacf79026
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt
@@ -0,0 +1,2 @@
+Hetta skjal kan bert læsast. Tú kanst síggja kelduna, men ikki goyma broytingar í tí. Um tú heldur at hetta er eitt brek, skriva so vinarliga í [[wiki:brek-yvirlit]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt
new file mode 100644
index 000000000..4704f3781
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt
@@ -0,0 +1,5 @@
+====== Nýggjar broytingar ======
+
+Fylgjandi skjøl er broytt nýliga.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt
new file mode 100644
index 000000000..24438afe8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt
@@ -0,0 +1,4 @@
+====== Upprætta eina wiki-konti ======
+
+Fylla út niðanfyrista skema fyri at upprætta eina konti í hesu wiki. Minst til at nýta eina **galdandi t-post-adressu** - títt loyniorð verður sent til tín. Títt brúkaranavn skal verða galdandi [[doku>pagename|skjalanavn]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt
new file mode 100644
index 000000000..450202c12
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Send nýtt loyniorð ======
+
+Fyll út øll niðanfyristandandi øki fyri at fáa sent eitt nýtt loyniorð til hesa wiki. Títt nýggja loyniorð verður sent til tí uppgivnu t-postadressu. Brúkaranavn eigur at verða títt wiki brúkaranavn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt
new file mode 100644
index 000000000..dcd845c10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt
@@ -0,0 +1,3 @@
+====== Gamlar útgávur ======
+
+Her eru tær gomlu útgávurnar av hesum skalinum. Tú kanst venda aftur til eina eldri útgávu av skjalinum við at velja tað niðanfyri, trýst á **''[Rætta hetta skjal]''** knappin, og til síðst goyma skjali.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt
new file mode 100644
index 000000000..6304a8901
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt
@@ -0,0 +1,5 @@
+====== Leiting ======
+
+Tú kanst síggja úrslitini av tíni leiting niðanfyri. Um úrslitini ikki innihalda tað sum tú leitaði eftir kanst tú upprætta eitt nýtt skjal við sama navni sum leitingin við at trýsta á **''[Upprætta hetta skjal]''** knappin.
+
+===== Leitiúrslit =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt
new file mode 100644
index 000000000..515f80aad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt
@@ -0,0 +1,2 @@
+**Hetta er ein gomul útgáva av skjalinum!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt
new file mode 100644
index 000000000..210e85902
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt
@@ -0,0 +1,87 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+annar
+báðir
+eg
+eingin
+einhvør
+eini
+eitt
+ella
+enn
+fim
+fleiri
+flestir
+frá
+fyri
+fyrr
+fýra
+góður
+hann
+hansara
+har
+hendan
+hennara
+her
+hetta
+hevur
+hon
+hvar
+hvat
+hvussi
+hví
+hvør
+ikki
+inn
+kan
+koma
+lítil
+man
+maður
+meira
+men
+miðan
+niður
+nær
+næstan
+næsti
+nógv
+nýtt
+okkurt
+ongin
+onki
+onkur
+seks
+sindur
+sjey
+smáur
+stórur
+større
+størst
+sum
+síggjast
+tann
+tað
+teir
+tey
+til
+tríggir
+trý
+tvey
+tykkara
+tær
+tí
+tín
+tó
+tú
+um
+undan
+var
+vera
+við
+yvur
+átta
+áðrenn
+øll
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt
new file mode 100644
index 000000000..4dca0cda5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt
@@ -0,0 +1,17 @@
+Hey!
+
+Síðan @PAGE@ á @TITLE@ wikiuni er blivin broytt.
+Her eru ein lýsing:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Fyri at avmelda broytinga upplýsingar fyri hesa síðu rita inn á wikiuna á
+@DOKUWIKIURL@ , vitja
+@NEWPAGE@
+og vel 'Strika til melda broytingar'.
+
+--
+Hesin t-postur var skaptur av DokuWiki á:
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt
new file mode 100644
index 000000000..10ee40d30
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Dagføra vangamynd fyri tína konti ======
+
+Tú nýtist bert at fylla út tey øki sum tú ynskjur at broyta. Tú kanst ikki broyta títt brúkaranavn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt
new file mode 100644
index 000000000..f3a9b9dcd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM banning ======
+
+Tínar broytingar vóru **ikki** goymdar av tí at tær innihalda eitt ella fleiri óynskt orð. Fá vinarliga samband við admin, um tú heldur at hetta er eitt brek.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt
new file mode 100644
index 000000000..4477a512b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Ci-dessous, vous trouverez une liste des tâches administratives disponibles dans DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt
new file mode 100644
index 000000000..42a3538ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt
@@ -0,0 +1 @@
+===== Modules supplémentaires ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt
new file mode 100644
index 000000000..6902b43e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt
@@ -0,0 +1,4 @@
+====== Pages pointant sur la page en cours ======
+
+Ceci est la liste des pages qui pointent sur la page en cours.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt
new file mode 100644
index 000000000..0cb0a67fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt
@@ -0,0 +1,6 @@
+====== Une version plus récente existe déjà ======
+
+Une version plus récente du document que vous avez édité existe déjà. Cela se produit lorsqu'un autre utilisateur enregistre le document pendant que vous l'éditez.
+
+Examinez attentivement les différences ci-dessous, et décidez quelle version conserver. Si vous choisissez ''Enregistrer'', votre version sera enregistrée. Cliquez sur ''Annuler'' pour conserver la version actuelle.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt
new file mode 100644
index 000000000..20d4d6755
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt
@@ -0,0 +1,3 @@
+====== Autorisation refusée ======
+
+Désolé, vous n'avez pas les droits pour continuer. Peut-être avez-vous oublié de vous identifier ?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt
new file mode 100644
index 000000000..773695d6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt
@@ -0,0 +1,4 @@
+====== Différences ======
+
+Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt
new file mode 100644
index 000000000..fbc1609a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt
@@ -0,0 +1,6 @@
+====== Un fichier brouillon a été trouvé ======
+
+La dernière édition de cette page ne s'est pas terminée proprement. Dokuwiki a enregistré automatiquement un brouillon de votre travail que vous pouvez utiliser pour votre édition. Ci-dessous figurent les données enregistrées lors de votre dernière session.
+
+À vous de décider si vous souhaitez //récupérer// votre session d'édition passée, //supprimer// le brouillon enregistré automatiquement ou //annuler// le processus d'édition.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt
new file mode 100644
index 000000000..71b0a7c1b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt
@@ -0,0 +1,2 @@
+Modifiez cette page et cliquez sur ''Enregistrer''. Voyez le [[wiki:syntax|Guide de la mise en page]] pour une aide à propos du format. Veuillez ne modifier cette page que si vous pouvez l'**améliorer**. Si vous souhaitez faire des tests, faites vos premiers pas dans le [[playground:playground|bac à sable]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt
new file mode 100644
index 000000000..1a7e0f434
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt
@@ -0,0 +1,2 @@
+**Vous affichez une ancienne révision du document !** Si vous l'enregistrez vous créerez une nouvelle version avec ce contenu.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt
new file mode 100644
index 000000000..14446681e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+Voici un index de toutes les pages disponibles, triées par [[doku>namespaces|catégorie]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html
new file mode 100644
index 000000000..a2c29d022
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html
@@ -0,0 +1,19 @@
+<p>Cette page vous assiste dans la premi&egrave;re installation et la
+configuration de <a href="http://dokuwiki.org">DokuWiki</a>.
+Pour plus d'information sur cet installeur reportez vous &agrave; sa
+<a href="http://dokuwiki.org/installer">page de
+documentation</a>.</p>
+
+<p>DokuWiki utilise des fichiers ordinaires pour stocker les pages du
+wiki et les autres informations associ&eacute;es &agrave; ces pages
+(tel que images, index de recherche, anciennes r&eacute;visions, etc). Pour fonctionner correctement DokuWiki <strong>doit</strong> avoir acc&egrave;s en &eacute;criture aux diff&eacute;rents r&eacute;pertoires qui contiennent ces fichiers. L'installeur n'est pas capable de modifier les permissions sur les r&eacute;pertoires. Ceci doit &ecirc;tre effectu&eacute; directement sur la ligne de commande de votre shell, ou, si vous &ecirc;tes h&eacute;berg&eacute;, via FTP ou votre panneau de contr&ocirc;le (tel que cPanel).</p>
+
+<p>Cet installeur va param&eacute;trer votre configuration de DokuWiki pour des <acronym title="access control list">ACL</acronym>, qui permettront l'acc&egrave;s &agrave; un login administrateur et l'acc&egrave;s au menu d'administration de DokuWiki pour l'ajout de modules externes, la gestion d'utilisateurs, la gestion de l'acc&egrave;s aux pages du wiki et les changements de param&egrave;tres de configuration. Il n'est pas n&eacute;cessaire au fonctionnement de DokuWiki, n&eacute;anmoins il facilite l'administration de DokuWiki.</p>
+
+<p>Les utilisateurs exp&eacute;riment&eacute;s ou ceux
+n&eacute;cessitant des param&eacute;trages particuliers devraient se
+reporter aux liens suivants pour les d&eacute;tails concernant les <a
+href="http://dokuwiki.org/install">instructions
+d'installation</a> et les <a
+href="http://dokuwiki.org/config">param&egrave;tres de
+configuration</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php
new file mode 100644
index 000000000..6a0f408b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php
@@ -0,0 +1,258 @@
+<?php
+/**
+ * french language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Sébastien Bauer <sebastien.bauer@advalvas.be>
+ * @author Antoine Fixary <antoine.fixary@freesbee.fr>
+ * @author cumulus <pta-n56@myamail.com>
+ * @author Gwenn Gueguen <contact@demisel.net>
+ * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author Fabien Chabreuil <fabien@integralpersonality.com>
+ * @author Stéphane Chamberland <stephane.chamberland@ec.gc.ca>
+ * @author Delassaux Julien <julien@delassaux.fr>
+ * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
+ * @author gb@isis.u-strasbg.fr
+ * @author stephane.gully@gmail.com
+ * @author Guillaume Turri <guillaume.turri@gmail.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author olivier duperray <duperray.olivier@laposte.net>
+ * @author Vincent Feltz <psycho@feltzv.fr>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Éditer cette page';
+$lang['btn_source'] = 'Afficher le texte source';
+$lang['btn_show'] = 'Afficher la page';
+$lang['btn_create'] = 'Créer cette page';
+$lang['btn_search'] = 'Rechercher';
+$lang['btn_save'] = 'Enregistrer';
+$lang['btn_preview'] = 'Aperçu';
+$lang['btn_top'] = 'Haut de page';
+$lang['btn_newer'] = '<< plus récent';
+$lang['btn_older'] = 'moins récent >>';
+$lang['btn_revs'] = 'Anciennes révisions';
+$lang['btn_recent'] = 'Derniers changements';
+$lang['btn_upload'] = 'Envoyer';
+$lang['btn_cancel'] = 'Annuler';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Éditer';
+$lang['btn_login'] = 'Connexion';
+$lang['btn_logout'] = 'Déconnexion';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Rafraîchir';
+$lang['btn_delete'] = 'Effacer';
+$lang['btn_back'] = 'Retour';
+$lang['btn_backlink'] = 'Liens vers cette page';
+$lang['btn_backtomedia'] = 'Retour à la sélection du fichier média';
+$lang['btn_subscribe'] = 'S\'abonner à la page';
+$lang['btn_unsubscribe'] = 'Se désabonner de la page';
+$lang['btn_subscribens'] = 'S\'abonner à la catégorie';
+$lang['btn_unsubscribens'] = 'Se désabonner de la catégorie';
+$lang['btn_profile'] = 'Mettre à jour le profil';
+$lang['btn_reset'] = 'Réinitialiser';
+$lang['btn_resendpwd'] = 'Envoyer le mot de passe';
+$lang['btn_draft'] = 'Éditer brouillon';
+$lang['btn_recover'] = 'Récupérer brouillon';
+$lang['btn_draftdel'] = 'Effacer brouillon';
+$lang['btn_revert'] = 'Restaurer';
+$lang['loggedinas'] = 'Connecté en tant que ';
+$lang['user'] = 'Utilisateur';
+$lang['pass'] = 'Mot de passe';
+$lang['newpass'] = 'Nouveau mot de passe';
+$lang['oldpass'] = 'Mot de passe actuel';
+$lang['passchk'] = 'Répéter nouveau mot de passe';
+$lang['remember'] = 'Mémoriser';
+$lang['fullname'] = 'Nom';
+$lang['email'] = 'Adresse de courriel';
+$lang['register'] = 'S\'enregistrer';
+$lang['profile'] = 'Profil utilisateur';
+$lang['badlogin'] = 'L\'utilisateur ou le mot de passe est incorrect.';
+$lang['minoredit'] = 'Mineur';
+$lang['draftdate'] = 'Brouillon auto-enregistré le';
+$lang['nosecedit'] = 'La page a changé entre temps, les informations de la section sont obsolètes ; la page complète a été chargée à la place.';
+$lang['regmissing'] = 'Désolé, vous devez remplir tous les champs.';
+$lang['reguexists'] = 'Désolé, ce nom d\'utilisateur est déjà pris';
+$lang['regsuccess'] = 'L\'utilisateur a été créé. Le mot de passe a été expédié par courriel.';
+$lang['regsuccess2'] = 'L\'utilisateur a été créé.';
+$lang['regmailfail'] = 'Il semble y avoir un problème à l\'envoi du courriel. Contactez l\'administrateur.';
+$lang['regbadmail'] = 'L\'adresse de courriel semble incorrecte - si vous pensez que c\'est une erreur, contactez l\'administrateur.';
+$lang['regbadpass'] = 'Les deux mots de passe fournis sont différents, recommencez SVP.';
+$lang['regpwmail'] = 'Votre mot de passe DokuWiki';
+$lang['reghere'] = 'Vous n\'avez pas encore de compte ? Enregistrez-vous ici ';
+$lang['profna'] = 'Ce wiki ne permet pas de modifier les profils';
+$lang['profnochange'] = 'Pas de changement, rien à faire.';
+$lang['profnoempty'] = 'Un nom ou une adresse de courriel vide n\'est pas permis.';
+$lang['profchanged'] = 'Mise à jour du profil réussie.';
+$lang['pwdforget'] = 'Mot de passe oublié ? Faites-vous envoyer votre mot de passe ';
+$lang['resendna'] = 'Ce wiki ne permet pas le renvoi de mot de passe.';
+$lang['resendpwd'] = 'Renvoyer le mot de passe de';
+$lang['resendpwdmissing'] = 'Désolé, vous devez remplir tous les champs.';
+$lang['resendpwdnouser'] = 'Désolé, cet utilisateur est introuvable dans notre base.';
+$lang['resendpwdbadauth'] = 'Désolé, ce code d\'authentification est invalide. Assurez vous d\'avoir utilisé le lien de confirmation.';
+$lang['resendpwdconfirm'] = 'Un lien de confirmation vous a été envoyé par courriel.';
+$lang['resendpwdsuccess'] = 'Votre nouveau mot de passe vous a été expédié par courriel.';
+$lang['license'] = 'Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante:';
+$lang['licenseok'] = 'Note : En éditant cette page vous acceptez que le contenu soit placé sous les termes de la licence suivante :';
+$lang['searchmedia'] = 'Chercher le nom de fichier :';
+$lang['searchmedia_in'] = 'Chercher dans %s';
+$lang['txt_upload'] = 'Sélectionnez un fichier à envoyer ';
+$lang['txt_filename'] = 'Donnez un "wikiname" (optionnel) ';
+$lang['txt_overwrt'] = 'Écraser le fichier cible';
+$lang['lockedby'] = 'Actuellement bloqué par';
+$lang['lockexpire'] = 'Le blocage expire à';
+$lang['willexpire'] = 'Votre blocage pour modifier cette page expire dans une minute.\nPour éviter les conflits, utiliser le bouton Aperçu pour réinitialiser le minuteur.';
+$lang['notsavedyet'] = 'Les changements non enregistrés seront perdus.\nVoulez-vous vraiment continuer ?';
+$lang['rssfailed'] = 'Une erreur s\'est produite en récupérant ce flux : ';
+$lang['nothingfound'] = 'Pas de réponse.';
+$lang['mediaselect'] = 'Sélection de fichier';
+$lang['fileupload'] = 'Envoi de fichier';
+$lang['uploadsucc'] = 'Envoi réussi';
+$lang['uploadfail'] = 'L\'envoi n\'a pas réussi. Les permissions sont-elles correctes ?';
+$lang['uploadwrong'] = 'Envoi refusé. Cette extension de fichier est interdite !';
+$lang['uploadexist'] = 'Le fichier existe. Envoi avorté.';
+$lang['uploadbadcontent'] = 'Le contenu envoyé ne correspond pas à l\'extension du fichier %s.';
+$lang['uploadspam'] = 'L\'envoi a été bloqué par la liste noire antispam.';
+$lang['uploadxss'] = 'L\'envoi a été bloqué car son contenu est peut-être malveillant.';
+$lang['uploadsize'] = 'Le fichier envoyé était trop gros. (max. %s)';
+$lang['deletesucc'] = 'Le fichier "%s" a été effacé.';
+$lang['deletefail'] = 'Le fichier "%s" n\'a pu être effacé - vérifier les permissions.';
+$lang['mediainuse'] = 'Le fichier "%s" n\'a pas été effacé - il est en cours d\'utilisation.';
+$lang['namespaces'] = 'Catégories';
+$lang['mediafiles'] = 'Fichiers disponibles dans';
+$lang['js']['searchmedia'] = 'Chercher des fichiers';
+$lang['js']['keepopen'] = 'Gardez la fenêtre ouverte pendant la sélection';
+$lang['js']['hidedetails'] = 'Masquer détails';
+$lang['js']['nosmblinks'] = 'Les liens vers les partages Windows ne fonctionnent qu\'avec Microsoft Internet Explorer.
+Vous pouvez toujours faire un copier/coller du lien.';
+$lang['js']['linkwiz'] = 'Assistant Lien';
+$lang['js']['linkto'] = 'Lien vers:';
+$lang['js']['del_confirm'] = 'Effacer cette entrée ?';
+$lang['js']['mu_btn'] = 'Envoyer plusieurs fichiers en même temps';
+$lang['mediausage'] = 'Utilisez la syntaxe suivante pour faire référence à ce fichier :';
+$lang['mediaview'] = 'Voir fichier original';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Envoyer un fichier dans la catégorie courante ici. Pour créer des sous-catégories, préfixez le nom du fichier par le nom de la sous-catégorie séparée par un double point.';
+$lang['mediaextchange'] = 'Extension du fichier changée de .%s en .%s !';
+$lang['reference'] = 'Références pour';
+$lang['ref_inuse'] = 'Le fichier ne peut être effacé car il est utilisé par les pages suivantes :';
+$lang['ref_hidden'] = 'Des références existent dans des pages que vous n\'avez pas la permission de lire';
+$lang['hits'] = 'occurrences trouvées';
+$lang['quickhits'] = 'Pages trouvées ';
+$lang['toc'] = 'Table des matières';
+$lang['current'] = 'version actuelle';
+$lang['yours'] = 'Votre version';
+$lang['diff'] = 'Différences avec la version actuelle';
+$lang['diff2'] = 'Différences entre les versions sélectionnées';
+$lang['line'] = 'Ligne';
+$lang['breadcrumb'] = 'Piste';
+$lang['youarehere'] = 'Vous êtes ici';
+$lang['lastmod'] = 'Dernière modification';
+$lang['by'] = 'par';
+$lang['deleted'] = 'effacée';
+$lang['created'] = 'créée';
+$lang['restored'] = 'ancienne révision restaurée';
+$lang['external_edit'] = 'édition externe';
+$lang['summary'] = 'Résumé';
+$lang['noflash'] = 'L"extension <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> est nécessaire pour afficher ce contenu.';
+$lang['download'] = 'Télécharger un extrait';
+$lang['mail_newpage'] = 'page ajoutée :';
+$lang['mail_changed'] = 'page changée :';
+$lang['mail_new_user'] = 'nouvel utilisateur :';
+$lang['mail_upload'] = 'fichier envoyé :';
+$lang['qb_bold'] = 'Gras';
+$lang['qb_italic'] = 'Italique';
+$lang['qb_underl'] = 'Souligné';
+$lang['qb_code'] = 'Code';
+$lang['qb_strike'] = 'Texte barré';
+$lang['qb_h1'] = 'En-tête 1';
+$lang['qb_h2'] = 'En-tête 2';
+$lang['qb_h3'] = 'En-tête 3';
+$lang['qb_h4'] = 'En-tête 4';
+$lang['qb_h5'] = 'En-tête 5';
+$lang['qb_h'] = 'Titre';
+$lang['qb_hs'] = 'Sélectionner la ligne de titre';
+$lang['qb_hplus'] = 'Titre supérieur';
+$lang['qb_hminus'] = 'Titre inférieur';
+$lang['qb_hequal'] = 'Titre de même niveau';
+$lang['qb_link'] = 'Lien interne';
+$lang['qb_extlink'] = 'Lien externe';
+$lang['qb_hr'] = 'Ligne horizontale';
+$lang['qb_ol'] = 'Liste numérotée';
+$lang['qb_ul'] = 'Liste à puce';
+$lang['qb_media'] = 'Ajouter des images et autres fichiers';
+$lang['qb_sig'] = 'Insérer une signature';
+$lang['qb_smileys'] = 'Émoticons';
+$lang['qb_chars'] = 'Caractères spéciaux';
+$lang['upperns'] = 'Aller à la catégorie parente';
+$lang['admin_register'] = 'Ajouter un nouvel utilisateur';
+$lang['metaedit'] = 'Éditer les métadonnées';
+$lang['metasaveerr'] = 'Erreur à l\'écriture des métadonnées';
+$lang['metasaveok'] = 'Métadonnées enregistrées';
+$lang['img_backto'] = 'Retour à';
+$lang['img_title'] = 'Titre';
+$lang['img_caption'] = 'Légende';
+$lang['img_date'] = 'Date';
+$lang['img_fname'] = 'Nom de fichier';
+$lang['img_fsize'] = 'Taille';
+$lang['img_artist'] = 'Auteur';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Appareil photo';
+$lang['img_keywords'] = 'Mots clef';
+$lang['subscribe_success'] = 'Ajout de %s à la liste d\'abonnés de %s';
+$lang['subscribe_error'] = 'Erreur à l\'ajout de %s à la liste d\'abonnés de %s';
+$lang['subscribe_noaddress'] = 'Aucune adresse associée à votre nom d\'utilisateur, impossible de vous ajouter à la liste d\'abonnés';
+$lang['unsubscribe_success'] = 'Suppression de %s de la liste d\'abonnés de %s';
+$lang['unsubscribe_error'] = 'Erreur à la suppression de %s de la liste d\'abonnés de %s';
+$lang['authmodfailed'] = 'Mauvais paramétrage de l\'authentification. Merci d\'informer l\'administrateur du Wiki.';
+$lang['authtempfail'] = 'L\'authentification est temporairement indisponible. Si cela perdure, merci d\'informer l\'administrateur du Wiki.';
+$lang['i_chooselang'] = 'Choisissez votre langue';
+$lang['i_installer'] = 'Installeur DokuWiki';
+$lang['i_wikiname'] = 'Nom du Wiki';
+$lang['i_enableacl'] = 'Activer les ACL (recommandé)';
+$lang['i_superuser'] = 'Super-utilisateur';
+$lang['i_problems'] = 'L\'installeur a détecté les problèmes indiqués ci-dessous. Vous ne pouvez poursuivre tant qu\'ils n\'auront pas été corrigés.';
+$lang['i_modified'] = 'Pour des raisons de sécurité ce script ne fonctionne qu\'avec une installation neuve et non modifiée de DokuWiki. Vous devriez ré-extraire les fichiers depuis le paquet téléchargé ou consulter les <a href="http://dokuwiki.org/install">instructions d\'installation de DokuWiki</a>';
+$lang['i_funcna'] = 'La fonction PHP <code>%s</code> n\'est pas disponible. Peut-être que votre hébergeur l\'a désactivée ?';
+$lang['i_phpver'] = 'Votre version de PHP (<code>%s</code>) est antérieure à la version requise (<code>%s</code>. Vous devez mettre à jour votre installation de PHP.';
+$lang['i_permfail'] = '<code>%s</code> n\'est pas accessible en écriture pour DokuWiki. Vous devez corriger les permissions de ce répertoire !';
+$lang['i_confexists'] = '<code>%s</code> existe déjà';
+$lang['i_writeerr'] = 'Impossible de créer <code>%s</code>. Vous devez vérifier les permissions des répertoires/fichiers et créer le fichier manuellement.';
+$lang['i_badhash'] = 'dokuwiki.php non reconnu ou modifié (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valeur illégale ou vide';
+$lang['i_success'] = 'L\'installation s\'est terminée avec succès. Vous pouvez maintenant supprimer le fichier install.php. Continuer avec <a href="doku.php">votre nouveau DokuWiki</a>.';
+$lang['i_failure'] = 'Des erreurs sont survenues lors de l\'écriture des fichiers de configuration. Il vous faudra les corriger manuellement avant de pouvoir utiliser <a href="doku.php">votre nouveau DokuWiki</a>.';
+$lang['i_policy'] = 'Politique d\'ACL initiale';
+$lang['i_pol0'] = 'Wiki ouvert (lecture, écriture, envoi de fichiers pour tout le monde)';
+$lang['i_pol1'] = 'Wiki public (lecture pour tout le monde, écriture et envoi de fichiers pour les utilisateurs enregistrés)';
+$lang['i_pol2'] = 'Wiki fermé (lecture, écriture, envoi de fichiers pour les utilisateurs enregistrés uniquement)';
+$lang['i_retry'] = 'Réessayer';
+$lang['mu_intro'] = 'Ici vous pouvez envoyer plusieurs fichiers en même temps. Cliquez sur le bouton parcourir pour les ajouter. Cliquez sur envoyer lorsque c\'est prêt. ';
+$lang['mu_gridname'] = 'Nom du fichier';
+$lang['mu_gridsize'] = 'Taille';
+$lang['mu_gridstat'] = 'État';
+$lang['mu_namespace'] = 'Catégorie';
+$lang['mu_browse'] = 'Parcourir';
+$lang['mu_toobig'] = 'Trop gros';
+$lang['mu_ready'] = 'Prêt à envoyer';
+$lang['mu_done'] = 'Terminé';
+$lang['mu_fail'] = 'Échoué';
+$lang['mu_authfail'] = 'Session expirée';
+$lang['mu_progress'] = '@PCT@% envoyé';
+$lang['mu_filetypes'] = 'Types de fichiers acceptés';
+$lang['mu_info'] = 'fichiers envoyés.';
+$lang['mu_lasterr'] = 'Dernière erreur : ';
+$lang['recent_global'] = 'Vous êtes actuellement en train de regarder les modifications au sein du namespace <b>%s</b>. Vous pouvez aussi <a href="%s">voir les récentes modifications sur tout le wiki</a>.';
+$lang['years'] = 'il y a %d ans';
+$lang['months'] = 'il y a %d mois';
+$lang['weeks'] = 'il y a %d semaines';
+$lang['days'] = 'il y a %d jours';
+$lang['hours'] = 'il y a %d heures';
+$lang['minutes'] = 'il y a %d minutes';
+$lang['seconds'] = 'il y a %d secondes';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt
new file mode 100644
index 000000000..ac8eb4c4b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt
@@ -0,0 +1,3 @@
+====== Page bloquée ======
+
+Cette page est actuellement bloquée pour édition par un autre utilisateur. Vous devez attendre que l'autre utilisateur ait terminé ou que le blocage de la page expire.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt
new file mode 100644
index 000000000..c8d40c86d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt
@@ -0,0 +1,3 @@
+====== Connexion ======
+
+Vous n'êtes pas connecté ! Entrez vos identifiants ci-dessous pour vous connecter. Votre navigateur doit accepter les cookies pour pouvoir vous connecter.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt
new file mode 100644
index 000000000..0b87616b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt
@@ -0,0 +1,18 @@
+Une page dans votre Wiki a été ajoutée ou modifiée. Voici les
+détails :
+
+Date : @DATE@
+Navigateur : @BROWSER@
+Adresse IP : @IPADDRESS@
+Nom d'hôte : @HOSTNAME@
+Ancienne révision : @OLDPAGE@
+Nouvelle révision : @NEWPAGE@
+Résumé : @SUMMARY@
+Utilisateur : @USER@
+
+@DIFF@
+
+
+--
+Ce message a été généré par DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt
new file mode 100644
index 000000000..3d834ffd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt
@@ -0,0 +1,4 @@
+====== Cette page n'existe pas encore ======
+
+Vous avez suivi un lien vers une page qui n'existe pas encore. Si vos droits sont suffisants, vous pouvez utiliser le bouton ''Créer cette page''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt
new file mode 100644
index 000000000..65984ef9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt
@@ -0,0 +1,4 @@
+====== Révision non trouvée ======
+
+La révision demandée n'existe pas. Utilisez le bouton 'Anciennes révisions' pour une liste des révisions de ce document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt
new file mode 100644
index 000000000..26fbcd9c2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt
@@ -0,0 +1,4 @@
+====== Aperçu ======
+
+Ceci est un aperçu de votre document. Attention ! Il n'est **pas encore enregistré** !
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt
new file mode 100644
index 000000000..432b5f102
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt
@@ -0,0 +1,15 @@
+Bonjour @FULLNAME@ !
+
+Quelqu'un a demandé un nouveau mot de passe pour votre login
+@TITLE@ sur @DOKUWIKIURL@
+
+Si vous n'êtes pas à l'origine de cette requête d'un nouveau mot de
+passe, ignorez ce message.
+
+Pour confirmer que cette requête émane bien de vous, merci de suivre le lien ci-dessous.
+
+@CONFIRM@
+
+--
+Ce message a été généré par DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt
new file mode 100644
index 000000000..faa756e8b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt
@@ -0,0 +1,2 @@
+Cette page est en lecture seule. Vous pouvez afficher le texte source, mais pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt
new file mode 100644
index 000000000..b41972fc1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt
@@ -0,0 +1,5 @@
+====== Derniers changements ======
+
+Les pages suivantes ont été modifiées récemment.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt
new file mode 100644
index 000000000..e2d02f55c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt
@@ -0,0 +1,3 @@
+====== S'enregistrer comme nouvel utilisateur ======
+
+Remplissez toutes les informations ci-dessous pour vous créer un compte sur ce Wiki. Assurez-vous de fournir une **adresse de courriel valide** car votre mot de passe sera envoyé à cette adresse. Le nom d'utilisateur doit être un [[doku>pagename|nom de page]] valide.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt
new file mode 100644
index 000000000..960aedf2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt
@@ -0,0 +1,14 @@
+Un nouvel utilisateur s'est enregistré. Voici les détails :
+
+Utilisateur : @NEWUSER@
+Nom : @NEWNAME@
+Adresse de courriel : @NEWEMAIL@
+
+Date : @DATE@
+Navigateur : @BROWSER@
+Adresse IP : @IPADDRESS@
+Nom d'hôte : @HOSTNAME@
+
+--
+Ce message a été généré par DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt
new file mode 100644
index 000000000..2cfbed617
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Envoyer un nouveau mot de passe ======
+
+Veuillez compléter les champs ci dessous pour obtenir un nouveau mot de passe pour votre compte dans ce wiki. Un lien de confirmation vous sera envoyé à l'adresse de courriel utilisée lors de votre enregistrement.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt
new file mode 100644
index 000000000..c9149ef9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt
@@ -0,0 +1,4 @@
+====== Anciennes révisions ======
+
+Voici les anciennes révisions de la page en cours. Pour revenir à une ancienne révision, sélectionnez-la ci-dessous, cliquez sur le bouton ''Éditer cette page'' et enregistrez-la.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt
new file mode 100644
index 000000000..8355a2f9d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt
@@ -0,0 +1,5 @@
+====== Recherche ======
+
+Voici les résultats de votre recherche. Si vous n'avez pas trouvé ce que vous cherchiez, vous pouvez créer ou éditer la page correspondante à votre requête en cliquant sur le bouton approprié.
+
+===== Résultats =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt
new file mode 100644
index 000000000..2e36199b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt
@@ -0,0 +1,2 @@
+**Ceci est une ancienne révision du document !**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt
new file mode 100644
index 000000000..981bae26b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt
@@ -0,0 +1,112 @@
+# Cette liste regroupe des mots ignorés par l'indexeur
+# Chaque ligne comporte un mot
+# Les fins de ligne de ce fichier doivent être de type UNIX
+# Les mots de moins de 3 lettres sont ignorés par défaut.
+# Cette liste est basée sur http://www.ranks.nl/stopwords/
+alors
+aucuns
+aussi
+autre
+avant
+avec
+avoir
+bon
+car
+cela
+ces
+ceux
+chaque
+comme
+comment
+dans
+des
+dedans
+dehors
+depuis
+deux
+devrait
+doit
+donc
+dos
+droite
+début
+elle
+elles
+encore
+essai
+est
+fait
+faites
+fois
+font
+force
+haut
+hors
+ici
+ils
+juste
+les
+leur
+là
+maintenant
+mais
+mes
+mine
+moins
+mon
+mot
+même
+nommés
+notre
+nous
+nouveaux
+où
+par
+parce
+parole
+pas
+personnes
+peut
+peu
+pièce
+plupart
+pour
+pourquoi
+quand
+que
+quel
+quelle
+quelles
+quels
+qui
+sans
+ses
+seulement
+sien
+son
+sont
+sous
+soyez
+sujet
+sur
+tandis
+tellement
+tels
+tes
+ton
+tous
+tout
+trop
+très
+valeur
+voie
+voient
+vont
+votre
+vous
+ça
+étaient
+état
+étions
+été
+être
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt
new file mode 100644
index 000000000..514f9cf5d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt
@@ -0,0 +1,17 @@
+Bonjour !
+
+La page @PAGE@ dans le wiki @TITLE@ a changé.
+Voici les modifications :
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Pour vous désabonner de cette page, connectez vous via
+@DOKUWIKIURL@ et visualisez la page
+@NEWPAGE@
+puis choisissez 'Ne pas notifier les modifications'.
+
+--
+Ce message a été généré par Dokuwiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt
new file mode 100644
index 000000000..623d75e88
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Mise à jour de votre profil ======
+
+Ne complétez que les champs que vous souhaitez modifier. Vous ne pouvez pas modifier votre nom d'utilisateur.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt
new file mode 100644
index 000000000..3a186b554
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt
@@ -0,0 +1,14 @@
+Un fichier a été envoyé dans votre DokuWiki. En voici les détails :
+
+Fichier : @MEDIA@
+Date : @DATE@
+Navigateur : @BROWSER@
+Adresse IP : @IPADDRESS@
+Nom d'hôte : @HOSTNAME@
+Taille : @SIZE@
+Type MIME : @MIME@
+Utilisateur : @USER@
+
+--
+Ce message a été généré par DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt
new file mode 100644
index 000000000..ae5962a80
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt
@@ -0,0 +1,4 @@
+====== Changement bloqué ======
+
+Vos changements n'ont **pas été enregistrés** car ils contiennent un ou plusieurs mots bloqués. Si vous avez essayé de spammer le Wiki -- mauvaise idée ! Si vous pensez que c'est une erreur, contactez l'administrateur de ce Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt
new file mode 100644
index 000000000..a5bb1753d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt
@@ -0,0 +1,4 @@
+====== Administración ======
+
+A continuación pode encontrar unha lista de tarefas administrativas dispoñíbeis no DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt
new file mode 100644
index 000000000..e791265e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugins adicionais ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt
new file mode 100644
index 000000000..90066d032
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt
@@ -0,0 +1,4 @@
+====== Ligazóns entrantes ======
+
+Isto é unha listaxe de páxinas que parecen estar vinculadas á páxina actual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt
new file mode 100644
index 000000000..e63e5b216
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt
@@ -0,0 +1,6 @@
+====== Hai unha versión máis nova ======
+
+Hai unha versión máis nova do documento que editou. Isto sucede cando outra persoa usuaria alterou o documento mentres vostede o estaba a editar.
+
+Examine as diferenzas que se mostran abaixo detalladamente e despois decida a versión que quere manter. Se selecciona ''Gardar'', gardarase a súa versión. Prema en ''Cancelar'' para manter a versión actual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt
new file mode 100644
index 000000000..8d388a8bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt
@@ -0,0 +1,4 @@
+====== Permiso denegado ======
+
+Sentímolo, mais non ten os permisos suficientes para continuar. É posíbel que esquecese iniciar unha sesión.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt
new file mode 100644
index 000000000..5660e4025
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt
@@ -0,0 +1,4 @@
+====== Diferenzas ======
+
+Isto mostra as diferenzas entre a revisión seleccionada e a versión actual da páxina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt
new file mode 100644
index 000000000..8e2aa19f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt
@@ -0,0 +1,6 @@
+====== Encontrouse un ficheiro de borrador ======
+
+A súa última sesión de edición desta páxina non terminou de modo correcto. O DokuWiki gardou automaticamente un borrador durante o seu traballo que agora pode usar para continuar coa edición. A continuación pode ver os datos que foron gardados durante a súa última sesión.
+
+Por favor, escolla entre se se quere //Recuperar// a súa sesión de edición perdida, //Eliminar// o borrador gardado automaticamente ou //Cancelar// o proceso de edición.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt
new file mode 100644
index 000000000..9e2061b51
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt
@@ -0,0 +1,2 @@
+Edite a páxina e prema en ''Gardar''. Vexa a páxina [[wiki:syntax|sintaxe]] para aprender a sintaxe da Wiki. Edite a páxina só se pode **mellorala**. Se quere facer probas, aprenda como efectuar os seus primeiros pasos no [[playground:playground|campo de xogo]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt
new file mode 100644
index 000000000..c582fc3d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt
@@ -0,0 +1,2 @@
+**Cargou unha revisión antiga do documento!** Se o garda, creará unha versión nova con eses datos.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt
new file mode 100644
index 000000000..b0b100bda
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt
@@ -0,0 +1,4 @@
+====== Ãndice ======
+
+Isto é un índice de todas as páxinas dispoñíbeis, ordenadas por [[doku>namespaces|nomes de espazo]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html
new file mode 100644
index 000000000..017abad8f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html
@@ -0,0 +1,25 @@
+<p>Esta páxina é unha axuda para a primeira instalación e configuración do
+<a href="http://dokuwiki.org">Dokuwiki</a>. Se quere máis información
+sobre este instalador, está dispoñíbel na súa propia
+<a href="http://dokuwiki.org/installer">páxina de documentación</a>.</p>
+
+<p>O DokuWiki usa ficheiros normais para o almacenamento das páxinas do wiki
+e outra información asociada ás mesmas (por ex. imaxes, índices de procura,
+revisións antigas etc.). Por iso, para poder operar correctamente, o DokuWiki
+<strong>precisa</strong> ter acceso de escritura nos directorios que conteñen
+eses ficheiros. Este instalador non é quen de configurar os permisos dos directorios.
+Isto debe facerse normalmente de xeito directo na liña de comandos ou, se está a
+usar unha hospedaxe, a través do FTP ou do panel de control da súa hospedaxe (por ex.
+o cPanel).</p>
+
+<p>Este instalador configurará o seu DokuWiki para o uso da
+<acronym title="access control list">ACL</acronym>, o cal lle permitirá á persoa administradora
+iniciar unha sesión e acceder ao menú de administración do DokuWiki para instalar plugins,
+xestionar as persoas usuarias e os accesos ás páxinas do wiki; ademais de modificar a configuración.
+Non é imprescindíbel para o funcionamento do DokuWiki, mais fai moito máis doada a
+administración do mesmo.</p>
+
+<p>As persoas usuarias expertas ou con requisitos especiais de configuración poden visitar
+as seguintes ligazóns para obter os pormenores relativos ás
+<a href="http://dokuwiki.org/install">instruccións de instalación</a>
+e á <a href="http://dokuwiki.org/config">configuración</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php
new file mode 100644
index 000000000..2f34a02a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php
@@ -0,0 +1,243 @@
+<?php
+/**
+ * galician language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author CiberIrmandade da Fala <infoxeral@ciberirmandade.org>
+ * @author Tagen Ata <localizacion@tagenata>
+ * @author Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Editar esta páxina';
+$lang['btn_source'] = 'Mostrar o código da páxina';
+$lang['btn_show'] = 'Mostrar a páxina';
+$lang['btn_create'] = 'Crear esta páxina';
+$lang['btn_search'] = 'Procurar';
+$lang['btn_save'] = 'Gardar';
+$lang['btn_preview'] = 'Previsualizar';
+$lang['btn_top'] = 'Comezo da páxina';
+$lang['btn_newer'] = '<< máis recente';
+$lang['btn_older'] = 'menos recente >>';
+$lang['btn_revs'] = 'Revisións antigas';
+$lang['btn_recent'] = 'Cambios recentes';
+$lang['btn_upload'] = 'Subir';
+$lang['btn_cancel'] = 'Cancelar';
+$lang['btn_index'] = 'Ãndice';
+$lang['btn_secedit'] = 'Editar';
+$lang['btn_login'] = 'Iniciar unha sesión';
+$lang['btn_logout'] = 'Terminar a sesión';
+$lang['btn_admin'] = 'Administración';
+$lang['btn_update'] = 'Actualizar';
+$lang['btn_delete'] = 'Borrar';
+$lang['btn_back'] = 'Atrás';
+$lang['btn_backlink'] = 'Ligazón entrante';
+$lang['btn_backtomedia'] = 'Volver á Selección de Ficheiros multimedia';
+$lang['btn_subscribe'] = 'Avisar dos cambios na páxina';
+$lang['btn_unsubscribe'] = 'Non avisar dos cambios na páxina';
+$lang['btn_subscribens'] = 'Avísar dos cambios nos Nomes de espazo';
+$lang['btn_unsubscribens'] = 'Non avisar dos cambios nos Nomes de espazo';
+$lang['btn_profile'] = 'Actualizar o perfil';
+$lang['btn_reset'] = 'Reiniciar';
+$lang['btn_resendpwd'] = 'Enviar un contrasinal novo';
+$lang['btn_draft'] = 'Editar o borrador';
+$lang['btn_recover'] = 'Recuperar o borrador';
+$lang['btn_draftdel'] = 'Eliminar o borrador';
+$lang['btn_revert'] = 'Restaurar';
+$lang['loggedinas'] = 'Iniciou unha sesión como';
+$lang['user'] = 'Nome de persoa usuaria';
+$lang['pass'] = 'Contrasinal';
+$lang['newpass'] = 'Contrasinal novo';
+$lang['oldpass'] = 'Confirmar o contrasinal actual';
+$lang['passchk'] = 'de novo';
+$lang['remember'] = 'Lémbrame';
+$lang['fullname'] = 'Nome completo';
+$lang['email'] = 'Correo';
+$lang['register'] = 'Rexístrate';
+$lang['profile'] = 'Perfil de persoa usuaria';
+$lang['badlogin'] = 'Sentímolo, mais o nome de persoa usuaria ou o contrasinal non son correctos.';
+$lang['minoredit'] = 'Cambios menores';
+$lang['draftdate'] = 'O borrador gardouse automaticamente en';
+$lang['nosecedit'] = 'A páxina cambiou, no entanto, a información da sección estaba desactualizada, polo que se cargou a páxina completa en seu lugar.';
+$lang['regmissing'] = 'Sentímolo, mais ten que encher todos os campos.';
+$lang['reguexists'] = 'Sentímolo, mais xa existe unha persoa usuaria con ese nome.';
+$lang['regsuccess'] = 'A persoa usuaria foi creada e o contrasinal enviado por correo electrónico.';
+$lang['regsuccess2'] = 'A persoa usuaria foi creada.';
+$lang['regmailfail'] = 'Semella que houbo un erro ao tentar enviar o correo co contrasinal. Contacte coa persoa administradora!';
+$lang['regbadmail'] = 'O enderezo de correo proporcionado semella incorrecto - se considera que isto é un erro, contacte coa persoa administradora';
+$lang['regbadpass'] = 'Os dous contrasinais introducidos non coinciden: Ténteo de novo.';
+$lang['regpwmail'] = 'O seu contrasinal do DokuWiki';
+$lang['reghere'] = 'Aínda non ten unha conta? Cree unha';
+$lang['profna'] = 'Esta wiki non permite modificacións dos perfís';
+$lang['profnochange'] = 'Non hai cambios, non hai nada para facer.';
+$lang['profnoempty'] = 'Non se permite un nome ou un enderezo de correo baleiros.';
+$lang['profchanged'] = 'O perfil de persoa usuaria foi actualizado correctamente.';
+$lang['pwdforget'] = 'Esqueceu o seu contrasinal? Obteña un novo';
+$lang['resendna'] = 'Esta wiki non permite o reenvío de contrasinais.';
+$lang['resendpwd'] = 'Enviar un contrasinal novo a';
+$lang['resendpwdmissing'] = 'Sentímolo, ten que encher todos os campos.';
+$lang['resendpwdnouser'] = 'Sentímolo, non encontramos esta persoa usuaria na nosa base de datos.';
+$lang['resendpwdbadauth'] = 'Sentímolo, mais este código de autorización non é válido. Asegúrese de que usou a ligazón completa de confirmación.';
+$lang['resendpwdconfirm'] = 'Enviouse unha ligazón de confirmación por correo.';
+$lang['resendpwdsuccess'] = 'O seu novo contrasinal foi enviado por correo.';
+$lang['license'] = 'O contido deste wiki, agás onde se indique o contrario, ofrécese baixo a seguinte licenza:';
+$lang['licenseok'] = 'Nota: Ao editar esta páxina estás a aceptar o licenciamento do contido baixo a seguinte licenza:';
+$lang['searchmedia'] = 'Buscar nome de ficheiro:';
+$lang['searchmedia_in'] = 'Buscar en %s';
+$lang['txt_upload'] = 'Selecciona o arquivo para subir';
+$lang['txt_filename'] = 'Subir como (opcional)';
+$lang['txt_overwrt'] = 'Sobrescribir o arquivo existente';
+$lang['lockedby'] = 'Bloqueado actualmente por';
+$lang['lockexpire'] = 'O bloqueo termina o';
+$lang['willexpire'] = 'O seu bloqueo para editar esta páxina vai caducar nun minuto.\nPara de evitar conflitos, use o botón de previsualización para reiniciar o contador do tempo de bloqueo.';
+$lang['notsavedyet'] = 'Perderanse os cambios non gardados.\nEstá segura/o de que quere continuar?';
+$lang['rssfailed'] = 'Houbo un erro ao tentar obter este fío RSS: ';
+$lang['nothingfound'] = 'Non se encontrou nada.';
+$lang['mediaselect'] = 'Ficheiros multimedia';
+$lang['fileupload'] = 'Subir ficheiros multimedia';
+$lang['uploadsucc'] = 'Subiuse correctamente';
+$lang['uploadfail'] = 'Fallou ao subir. É posíbel que sexa un problema de permisos?';
+$lang['uploadwrong'] = 'Subida denegada. Esta extensión de ficheiro non está permitida!';
+$lang['uploadexist'] = 'Xa existe o ficheiro. Non se fixo nada.';
+$lang['uploadbadcontent'] = 'O contido subido non concorda coa extensión de ficheiro %s.';
+$lang['uploadspam'] = 'A subida foi bloqueada pola lista negra de correo lixo.';
+$lang['uploadxss'] = 'A subida foi bloqueada por un posíbel contido malicioso.';
+$lang['uploadsize'] = 'O ficheiro subido é grande de máis. (máx. %s)';
+$lang['deletesucc'] = 'O ficheiro "%s" foi eliminado.';
+$lang['deletefail'] = '"%s" non puido ser eliminado - comprobe os permisos.';
+$lang['mediainuse'] = 'O ficheiro "%s" non foi eliminado - aínda está en uso.';
+$lang['namespaces'] = 'Nomes de espazos';
+$lang['mediafiles'] = 'Ficheiro dispoñíbeis en';
+$lang['js']['searchmedia'] = 'Buscar ficheiros';
+$lang['js']['keepopen'] = 'Manter a xanela aberta na selección';
+$lang['js']['hidedetails'] = 'Ocultar os detalles';
+$lang['js']['nosmblinks'] = 'A ligazón aos compartidos do Windows só funciona co Microsoft Internet Explorer.
+Sempre podes copiar e colar a ligazón.';
+$lang['js']['linkwiz'] = 'Asistente de ligazóns';
+$lang['js']['linkto'] = 'Ligazón a:';
+$lang['js']['del_confirm'] = 'Quere eliminar os elementos seleccionados?';
+$lang['js']['mu_btn'] = 'Subir varios ficheiros dunha vez';
+$lang['mediausage'] = 'Utilice a seguinte sintaxe para referenciar este ficheiro:';
+$lang['mediaview'] = 'Ver o ficheiro orixinal';
+$lang['mediaroot'] = 'raíz';
+$lang['mediaupload'] = 'Suba aquí un ficheiro ao nome de espazo actual. Para crear subnomes de espazos deberá engadilos ao principio do seu nome de ficheiro en "Subir como", separados por dous puntos.';
+$lang['mediaextchange'] = 'A extensión de ficheiro foi alterada de .%s a .%s!';
+$lang['reference'] = 'Referencias para';
+$lang['ref_inuse'] = 'O ficheiro non pode ser eliminado, xa que aínda está a ser usado polas seguintes páxinas:';
+$lang['ref_hidden'] = 'Algunhas referencias están en páxinas para as cales non ten permisos de lectura';
+$lang['hits'] = 'Visualizacións';
+$lang['quickhits'] = 'Nomes de páxinas coincidentes';
+$lang['toc'] = 'Táboa de contidos';
+$lang['current'] = 'actual';
+$lang['yours'] = 'A súa versión';
+$lang['diff'] = 'Mostrar as diferenzas coa versión actual';
+$lang['diff2'] = 'Mostrar as diferenzas entre as revisións seleccionadas';
+$lang['line'] = 'Liña';
+$lang['breadcrumb'] = 'Trazado';
+$lang['youarehere'] = 'Vostede está aquí';
+$lang['lastmod'] = 'Última modificación';
+$lang['by'] = 'por';
+$lang['deleted'] = 'eliminado';
+$lang['created'] = 'creado';
+$lang['restored'] = 'a revisión antiga foi restaurada';
+$lang['external_edit'] = 'edición externa';
+$lang['summary'] = 'Resumo da edición';
+$lang['noflash'] = 'Precísase o <a href="http://www.adobe.com/products/flashplayer/">Plugin Adobe Flash</a> para mostrar este contido.';
+$lang['mail_newpage'] = 'páxina engadida:';
+$lang['mail_changed'] = 'páxina alterada:';
+$lang['mail_new_user'] = 'Persoa usuaria nova:';
+$lang['mail_upload'] = 'ficheiro subido:';
+$lang['qb_bold'] = 'Texto en negra';
+$lang['qb_italic'] = 'Texto en cursiva';
+$lang['qb_underl'] = 'Texto subliñado';
+$lang['qb_code'] = 'Texto de código';
+$lang['qb_strike'] = 'Texto riscado';
+$lang['qb_h1'] = 'Título de nivel 1';
+$lang['qb_h2'] = 'Título de nivel 2';
+$lang['qb_h3'] = 'Título de nivel 3';
+$lang['qb_h4'] = 'Título de nivel 4';
+$lang['qb_h5'] = 'Título de nivel 5';
+$lang['qb_link'] = 'Ligazón interna';
+$lang['qb_extlink'] = 'Ligazón externa';
+$lang['qb_hr'] = 'Liña horizontal';
+$lang['qb_ol'] = 'Elemento de lista ordenada';
+$lang['qb_ul'] = 'Elemento de lista desordenada';
+$lang['qb_media'] = 'Engadir imaxes e outros ficheiros';
+$lang['qb_sig'] = 'Inserir unha sinatura';
+$lang['qb_smileys'] = 'Emoticonas';
+$lang['qb_chars'] = 'Caracteres especiais';
+$lang['admin_register'] = 'Engadir unha persoa usuaria nova';
+$lang['metaedit'] = 'Editar os metadatos';
+$lang['metasaveerr'] = 'Non se puideron escribir os metadatos';
+$lang['metasaveok'] = 'Os metadatos foron gardados';
+$lang['img_backto'] = 'Volver a';
+$lang['img_title'] = 'Título';
+$lang['img_caption'] = 'Lenda';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nome do ficheiro';
+$lang['img_fsize'] = 'Tamaño';
+$lang['img_artist'] = 'Fotógrafa/o';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Cámara';
+$lang['img_keywords'] = 'Palabras chave';
+$lang['subscribe_success'] = '%s foi engadido á lista de subscrición de cambios de %s';
+$lang['subscribe_error'] = 'Erro ao tentar engadir %s á lista de subscrición de cambios de %s';
+$lang['subscribe_noaddress'] = 'Non hai ningún enderezo asociado ao seu nome de persoa usuaria: non pode ser engadida/o á lista de subscrición';
+$lang['unsubscribe_success'] = 'Eliminouse %s da lista de subscrición de cambios de %s';
+$lang['unsubscribe_error'] = 'Erro ao tentar eliminar %s da lista de subscrición de cambios de %s';
+$lang['authmodfailed'] = 'A configuración de autenticación de persoa usuaria é incorrecta. Informe á persoa administradora do seu Wiki.';
+$lang['authtempfail'] = 'A autenticación de persoa usuaria non está dispoñíbel de modo temporal. Se esta situación persiste informe á persoa administradora do seu Wiki.';
+$lang['i_chooselang'] = 'Seleccione o seu idioma';
+$lang['i_installer'] = 'Instalador do DokuWiki';
+$lang['i_wikiname'] = 'Nome do Wiki';
+$lang['i_enableacl'] = 'Activar o lista de control de acceso (ACL) (recomendado)';
+$lang['i_superuser'] = 'Superusuaria/o';
+$lang['i_problems'] = 'O instalador encontrou algúns problemas que se mostran a continuación. Non poderá continuar até que os solucione.';
+$lang['i_modified'] = 'Por razóns de seguridade este script só funcionará cunha instalación nova e sen modificar do Dokuwiki.
+ Pode ou ben extraer de novo os ficheiros desde o paquete descargado ou consultar as
+ <a href="http://dokuwiki.org/install">instruccións completas de instalación do Dokuwiki</a>';
+$lang['i_funcna'] = 'A función <code>%s</code> de PHP non está dispoñíbel. Pode que o seu provedor de hospedaxe a desactivase por algún motivo.';
+$lang['i_phpver'] = 'A súa versión <code>%s</code> de PHP é inferior á <code>%s</code> precisa. Debe actualizar a súa instalación de PHP.';
+$lang['i_permfail'] = '<code>%s</code> non é escribíbel polo DokuWiki. Debe corrixir a configuración de permisos deste directorio!';
+$lang['i_confexists'] = '<code>%s</code> xa existe';
+$lang['i_writeerr'] = 'Non se puido crear <code>%s</code>. Terá que comprobar os permisos do directorio/ficheiro e crear o ficheiro de modo manual.';
+$lang['i_badhash'] = 'dokuwiki.php é irrecoñecíbel ou foi modificado (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - ilegal ou valor baleiro';
+$lang['i_success'] = 'A configuración terminou correctamente. Agora pode borrar o ficheiro install.php. Continúe até o
+ <a href="doku.php">seu novo DokuWiki</a>.';
+$lang['i_failure'] = 'Houbo algúns erros ao tentar escribir os ficheiros de configuración. Pode que precise solucionalos de mod manual antes
+ de que poder usar <a href="doku.php">o seu novo DokuWiki</a>.';
+$lang['i_policy'] = 'Regras iniciais da ACL';
+$lang['i_pol0'] = 'Wiki aberto (lectura, escritura, subida de arquivos para todas as persoas)';
+$lang['i_pol1'] = 'Wiki público (lectura para todas as persoas, escritura e subida de ficheiros para as persoas usuarias rexistradas)';
+$lang['i_pol2'] = 'Wiki pechado (lectura, escritura, subida de arquivos só para as persoas usuarias rexistradas)';
+$lang['i_retry'] = 'Tentar de novo';
+$lang['mu_intro'] = 'Aquí podes subir varios ficheiros dunha vez. Preme o botón Examinar para engadilos á fila. Preme en Subir cando remates.';
+$lang['mu_gridname'] = 'Nome do ficheiro';
+$lang['mu_gridsize'] = 'Tamaño';
+$lang['mu_gridstat'] = 'Estado';
+$lang['mu_namespace'] = 'Nome de espazo';
+$lang['mu_browse'] = 'Examinar';
+$lang['mu_toobig'] = 'demasiado grande';
+$lang['mu_ready'] = 'listo para subir';
+$lang['mu_done'] = 'feito';
+$lang['mu_fail'] = 'fallou';
+$lang['mu_authfail'] = 'a sesión caducou';
+$lang['mu_progress'] = '@PCT@% subido';
+$lang['mu_filetypes'] = 'Tipos de ficheiro permitidos';
+$lang['mu_info'] = 'ficheiros subidos.';
+$lang['mu_lasterr'] = 'Último erro:';
+$lang['recent_global'] = 'Agora mesmo está a ver os cambios no nome de espazo <b>%s</b>. Tamén pode <a href="%s">ver os cambios recentes en todo o Wiki</a>.';
+$lang['years'] = 'hai %d anos';
+$lang['months'] = 'hai %d meses';
+$lang['weeks'] = 'hai %d semanas';
+$lang['days'] = 'hai %d días';
+$lang['hours'] = 'hai %d horas';
+$lang['minutes'] = 'hai %d minutos';
+$lang['seconds'] = 'hai %d segundos';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt
new file mode 100644
index 000000000..14240335e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt
@@ -0,0 +1,3 @@
+====== Páxina bloqueada ======
+
+Esta páxina está actualmente bloqueada para a edición por outra persoa usuaria. Terá que agardar até que esa persoa usuaria termine de editar a páxina ou a que expire o bloqueo.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt
new file mode 100644
index 000000000..11719de50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt
@@ -0,0 +1,4 @@
+====== Inicio de sesión ======
+
+Actualmente non ten unha sesión iniciada! Insira as súas credenciais de autenticación para iniciar a sesión. Debe ter as cookies activadas para poder iniciar unha sesión.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt
new file mode 100644
index 000000000..f7c06bc83
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt
@@ -0,0 +1,17 @@
+Engadiuse ou modificouse unha páxina do seu DokuWiki. Aquí van os detalles:
+
+Data : @DATE@
+Navegador : @BROWSER@
+Enderezo IP : @IPADDRESS@
+Nome do host : @HOSTNAME@
+Revisión antiga : @OLDPAGE@
+Revision nova : @NEWPAGE@
+Resumo da edición : @SUMMARY@
+Usuaria/o : @USER@
+
+@DIFF@
+
+
+--
+Este correo foi xerado polo DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt
new file mode 100644
index 000000000..c79ef6a41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt
@@ -0,0 +1,4 @@
+====== Este tema aínda non existe ======
+
+Seguiu unha ligazón até un tema que aínda non existe. Se ten os permisos adecuados, pode creala vostede premendo no botón ''Crear esta páxina''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt
new file mode 100644
index 000000000..dd6027165
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt
@@ -0,0 +1,4 @@
+====== Non existe esa revisión ======
+
+A revisión especificada non existe. Utilice o botón ''Revisións antigas'' para obter un listado das revisións antigas deste documento.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt
new file mode 100644
index 000000000..01cc41dcc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt
@@ -0,0 +1,4 @@
+====== Previsualización ======
+
+Isto é unha previsualización de como aparecerá o seu texto. Lembre: **Aínda non está gardado!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt
new file mode 100644
index 000000000..e020790d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt
@@ -0,0 +1,15 @@
+Ola @FULLNAME@!
+
+Alguén solicitou un contrasinal novo para o seu inicio de sesión no
+@TITLE@ en @DOKUWIKIURL@
+
+Se non foi vostede quen o solicitou pode ignorar este correo.
+
+Para confirmar que esta solicitude foi realmente enviada por vostede
+por favor, visite a seguinte ligazón.
+
+@CONFIRM@
+
+--
+Este correo foi xerador polo DokuWiki de
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt
new file mode 100644
index 000000000..912864c31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt
@@ -0,0 +1,2 @@
+Esta páxina é só de lectura. Podes ver o código fonte, mais non pode alterala. Coméntello á persoa administradora se considera que é un erro.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt
new file mode 100644
index 000000000..93f8632dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt
@@ -0,0 +1,5 @@
+====== Cambios recentes ======
+
+As seguintes páxinas foron cambiadas recentemente.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt
new file mode 100644
index 000000000..17d9e0ff4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt
@@ -0,0 +1,4 @@
+====== Rexistro como persoa usuaria nova ======
+
+Encha toda a información requirida a continuación para crear unha conta nova neste wiki. Asegúrese de proporcionar un **enderezo de correo electrónico válido** - se non se lle solicita aquí que insira un contrasinal, recibirá un contrasinal novo nese enderezo. O nome de persoa usuaria deberá ser un [[doku>pagename|nome de páxina]] válido.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt
new file mode 100644
index 000000000..e02fe1a1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt
@@ -0,0 +1,14 @@
+Rexistrouse unha persoa usuaria nova. Estes son os detalles:
+
+Nome de usuaria/o : @NEWUSER@
+Nome completo : @NEWNAME@
+Correo : @NEWEMAIL@
+
+Data : @DATE@
+Navegador : @BROWSER@
+Enderezo IP : @IPADDRESS@
+Nome do host : @HOSTNAME@
+
+--
+Este correo foi xerado polo DokuWiki de
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt
new file mode 100644
index 000000000..eb8cf4835
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Enviar un contrasinal novo ======
+
+Insira o seu nome de persoa usuaria no seguinte formulario para obter un contrasinal novo para a súa conta neste wiki. Enviarase unha ligazón de confirmación ao seu enderezo de correo rexistrado.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt
new file mode 100644
index 000000000..a08b54685
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt
@@ -0,0 +1,4 @@
+====== Revisións antigas ======
+
+Estas son as revisións antigas do documento actual. Para retomar unha revisión antiga: selecciónea na seguinte lista, prema en ''Editar esta páxina'' e gárdea.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt
new file mode 100644
index 000000000..7157cdcbf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt
@@ -0,0 +1,5 @@
+====== Procurar ======
+
+Podes encontrar os resultados da súa procura a continuación. Se non encontrou o que estaba a procurar, pode crear ou editar a páxina co nome relacionado coa súa procura co botón axeitado.
+
+===== Resultados =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt
new file mode 100644
index 000000000..88fb0c39d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt
@@ -0,0 +1,2 @@
+**Esta é unha revisión antiga do documento!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt
new file mode 100644
index 000000000..c262147f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt
@@ -0,0 +1,246 @@
+# Isto é unha listaxe das palabras que o indexador ignora (stopwords); unha por liña
+# Cando edite este ficheiro asegúrese de usar os fins de liña UNIX (nova liña única)
+# Non precisa incluír palabras de menos de 3 caracteres - estas son ignoradas de todas as formas
+# Esta listaxe está baseada nas encontradas en http://www.ranks.nl/stopwords/ (aínda en proceso)
+# Actualizouse a listaxe a partir as stopwords dispoñibilizadas por Paulo Malvar en:
+# http://d108.dinaserver.com/hosting/paulomalvar.com/Paulo_Malvar_personal_webpage/Resources_files/Galician_single_and_multiword_stopwords_Verbal_Periphrases_and_Abbreviations.tgz
+# e tamén as listaxes de palabras gramaticais na Galipedia: http://gl.wikipedia.org/wiki/Categoría_gramatical
+abaixo
+acerca
+ademais
+agás
+aínda
+alén
+algún
+algunha
+algunhas
+algúns
+amais
+ante
+antes
+após
+aquel
+aquela
+aquelas
+aqueles
+aquén
+aquilo
+arredor
+bardante
+beira
+canda
+cando
+canto
+carón
+causa
+cerca
+como
+conforme
+consonte
+contra
+deica
+dela
+delas
+deles
+dende
+derredor
+derriba
+desde
+despois
+durante
+elas
+eles
+entre
+erades
+eramos
+eran
+eras
+esas
+eses
+esta
+está
+estaba
+estabades
+estabamos
+estaban
+estades
+estamos
+están
+estas
+este
+estea
+esteades
+esteamos
+estean
+esteas
+estes
+estivemos
+estiven
+estiver
+estivera
+estiveramos
+estiveran
+estiverdes
+estiveren
+estivermos
+estivese
+estivesemos
+estivesen
+estivo
+estou
+excepto
+fomos
+fora
+foramos
+foran
+fordes
+foren
+formos
+fose
+fosedes
+fosemos
+fosen
+habemos
+haberá
+haberán
+haberedes
+haberei
+haberemos
+habería
+haberíades
+haberíamos
+haxa
+haxades
+haxamos
+haxan
+haxas
+houbemos
+houben
+houber
+houbera
+houberades
+houberamos
+houberan
+houberemos
+houberen
+houberían
+houbermos
+houbese
+houbesedes
+houbesemos
+houbesen
+houbo
+isto
+lles
+logo
+mais
+máis
+malia
+mediante
+menos
+mesmo
+meus
+miña
+miñas
+moito
+nosa
+nosas
+noso
+nosos
+nunha
+onda
+outra
+outro
+para
+perante
+pero
+pois
+pola
+polas
+polo
+polos
+por
+porén
+porque
+prol
+quen
+redor
+rente
+respecto
+sacado
+sacando
+salvante
+salvo
+senón
+será
+serán
+serás
+seredes
+serei
+seremos
+sería
+seríamos
+serían
+seus
+sexa
+sexades
+sexamos
+sexan
+sexas
+sobre
+sodes
+somos
+súas
+tamén
+tedes
+temos
+teña
+teñades
+teñamos
+teñan
+teñas
+teño
+terá
+terán
+terás
+teredes
+terei
+teremos
+tería
+teriades
+teriamos
+terían
+terías
+teus
+tiña
+tiñades
+tiñamos
+tiñan
+tiñas
+tiveches
+tivemos
+tiven
+tiver
+tivera
+tiverades
+tiveramos
+tiveran
+tiveras
+tiverdes
+tiveren
+tivermos
+tivese
+tivesedes
+tivesemos
+tivesen
+tiveses
+tivestes
+tivo
+todo
+tras
+través
+túas
+unha
+unhas
+vostede
+vostedes
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt
new file mode 100644
index 000000000..0b1c3a662
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt
@@ -0,0 +1,19 @@
+Ola!
+
+A páxina @PAGE@ na wiki @TITLE@ foi mudada.
+Aquí van as modificacións:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Para desubscribirte deste rexistro de cambios de páxina
+na wiki en
+@DOKUWIKIURL@
+fai unha visita a
+@NEWPAGE@
+e selecciona 'Non avisar dos cambios'.
+
+--
+Este correo foi xerado polo DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt
new file mode 100644
index 000000000..bfd598117
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Actualizar o perfil da súa conta ======
+
+Só precisa cubrir os campos que desexe cambiar. Non pode cambiar o seu nome de persoa usuaria.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt
new file mode 100644
index 000000000..914c3644c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt
@@ -0,0 +1,14 @@
+Subiuse un ficheiro ao seu DokuWiki. Aquí van os detalles:
+
+Ficheiro : @MEDIA@
+Data : @DATE@
+Navegador : @BROWSER@
+Enderezo IP : @IPADDRESS@
+Nome do host : @HOSTNAME@
+Tamaño : @SIZE@
+Tipo MIME : @MIME@
+Usuaria/o : @USER@
+
+--
+Este correo foi xerado polo DokuWiki en
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt
new file mode 100644
index 000000000..f219f8436
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt
@@ -0,0 +1,4 @@
+====== Bloqueo por SPAM ======
+
+Os seus cambios **non** foron gardados porque conteñen unha ou varias palabras bloqueadas. Se tentou introducir spam no wiki -- Nen@ mal@! Se considera que é un erro, contacte coa persoa administradora deste Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt
new file mode 100644
index 000000000..ada73e5d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt
@@ -0,0 +1,4 @@
+====== ניהול ======
+
+ניתן ×œ×ž×¦×•× ×ž×˜×” רשימה של משימות ניהול זמינות ב-DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt
new file mode 100644
index 000000000..dfcdd22dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt
@@ -0,0 +1,3 @@
+====== ×§×™×©×•×¨×™× ×œ×חור ======
+
+זוהי רשימת ×“×¤×™× ×שר נר××” ×›×™ ×”× ×ž×§×©×¨×™× ×œ×“×£ ממנו הגעת.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt
new file mode 100644
index 000000000..d27a78559
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt
@@ -0,0 +1,6 @@
+====== גירסה עדכנית יותר של הקובץ קיימת ======
+
+גירסה עדכנית יותר של המסמך קיימת. דבר ×–×” קורה ×›×שר משתמש ×חר שינה ×ת המסמך בזמן שערכת ×ותו.
+
+מומלץ לעיין ×‘×”×‘×“×œ×™× ×ª×—×ª הודעה ול×חר מכן להחליט ×יזו גירסה כד××™ לשמור. לחיצה על הכפתור "שמור" תשמור ×ת הגרסה שערכת. לחיצה על הכפתור "בטל" תשמור ×ת הגרסה הקיימת.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt
new file mode 100644
index 000000000..34c8417b4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt
@@ -0,0 +1,3 @@
+====== הרש××” נדחתה ======
+
+×נו ×ž×¦×˜×¢×¨×™× ×ך ×ין לך הרש×ות מת×ימות כדי להמשיך. ×ולי שכחת להכנס למערכת? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt
new file mode 100644
index 000000000..f1216bb4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt
@@ -0,0 +1,4 @@
+====== ×”×‘×“×œ×™× ======
+
+×›×ן ×ž×•×¦×’×™× ×”×”×‘×“×œ×™× ×‘×™×Ÿ הגרסה שנבחרה והגרסה הנוכחית של הדף.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt
new file mode 100644
index 000000000..22fc88d9f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt
@@ -0,0 +1,5 @@
+====== × ×ž×¦× ×§×•×‘×¥ ×˜×™×•×˜× ======
+
+העריכה ×”×חרונה שבוצעה לדף ×–×” ×œ× ×”×¡×ª×™×ž×” כהלכה. DokuWiki שמר ב×ופן ×וטומטי טיוטה של העבודה וב×פשרותך להשתמש בה כדי להמשיך ×ת העריכה. ניתן לר×ות מטה ×ת המידע שנשמר ×ž×”×¤×¢× ×”×§×•×“×ž×ª.
+
+ב×פשרותך לבחור ב//שחזור הטיוטה// של ×ותה עריכה //מחיקת הטיוטה// ×ו //ביטול// העריכה כליל. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt
new file mode 100644
index 000000000..4d8151e9d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt
@@ -0,0 +1 @@
+עריכת הדף ולחיצה על הכפתור "שמור" תעדכן ×ת תוכנו. מומלץ לעיין בדף ×”[[wiki:syntax|תחביר]] כדי להכיר ×ת כללי תחביר הויקי. × × ×œ×¢×¨×•×š ×ת הדף רק ×× ×”×“×‘×¨ נעשה כדי **לשפר** ×ותו. ×× ×”×¢×¨×™×›×” ×”×™× ×œ×¦×•×¨×š התנסות מומלץ לבקר ב[[playground:playground|×רגז החול]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt
new file mode 100644
index 000000000..a6c755cba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt
@@ -0,0 +1,2 @@
+**הדף שנפתח ×”×•× ×’×¨×¡×” ישנה של המסמך!** לחיצה על הכפתור "שמור" תשחזר ×ת המסמך לגרסה המוצגת כעת.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt
new file mode 100644
index 000000000..12b7a960e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt
@@ -0,0 +1,4 @@
+====== ×ינדקס ======
+
+זהו קובץ ×ינדקס ×”× ×ž×¦× ×ž×¢×œ לכל ×”×“×¤×™× ×”×ž××•×¨×’× ×™× ×‘[[ויקי:דוקיוויקי]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html
new file mode 100644
index 000000000..7831623c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html
@@ -0,0 +1,13 @@
+<p>דף ×–×” מסייע להתקנה וההגדרה הר×שוניות של
+<a href="http://dokuwiki.org">Dokuwiki</a>. מידע נוסף על מתקין זה זמין בדף
+<a href="http://dokuwiki.org/installer">התיעוד שלו</a>.</p>
+
+<p>DokuWiki עושה שימוש ×‘×§×‘×¦×™× ×¨×’×™×œ×™× ×œ×©×ž×™×¨×ª דפי ויקי ומידע נוסף הקשור ×œ×“×¤×™× ×לו (לדוגמה תמונות, רשימות חיפוש, גרס×ות קודמות וכו').
+לתפקוד תקין DokuWiki <strong>חייב</strong> גישה לכתיבה לתיקיות המכילות ×§×‘×¦×™× ×לו. מתקין ×–×” ×ינו יכול לקבוע הרש×ות לתיקיות.
+פעולה זו צריכה בד"×› להתבצע ישירות משורת הפקודה ×ו במקרה שנעשה שימוש בשרת מ×רח דרך FTP ×ו מנשק הניהול של המ×רח (cPanell לדוגמה).</p>
+
+<p>מתקין ×–×” יגדיר ×ת תצורת ×”-<acronym title="access control list">ACL</acronym> ב-DokuWiki שלך
+, ×–×” בתורו מ×פשר גישת מנהל לתפריט הניהול של DokuWiki כדי להתקין הרחבות, לנהל משתמשי×, לנהל גישות לדפי ויקי ×•×©×™× ×•×™×™× ×‘×”×’×“×¨×•×ª התצורה.
+×ין ×”×•× ×”×›×¨×—×™ לתפקוד DokuWiki ×ך ×”×•× ×™×”×¤×•×š ×ת Dokuwiki קל יותר לניהול.</p>
+
+<p>על ×ž×©×ª×ž×©×™× ×ž× ×•×¡×™× ×ו ×›×לו ×¢× ×“×¨×™×©×•×ª מיוחדות להתקנה להשתמש ×‘×§×™×©×•×¨×™× ×לו ×œ×¤×¨×˜×™× ×‘× ×•×’×¢ ל<a href="http://dokuwiki.org/install">הור×ות התקנה</a> ו<a href="http://dokuwiki.org/config">הגדרות תצורה</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php
new file mode 100644
index 000000000..8545d1542
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php
@@ -0,0 +1,224 @@
+<?php
+/**
+ * Hebrew language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @link http://sourceforge.net/projects/hebdokuwiki/
+ * @author ×’×™× ×©×¤×¨ <guysoft@ort.org.il>
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author DoK <kamberd@yahoo.com>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ * @author Moshe Kaplan <mokplan@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'rtl';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'עריכה';
+$lang['btn_source'] = 'הצג ×ת מקור הדף';
+$lang['btn_show'] = 'הצג דף';
+$lang['btn_create'] = 'יצירת דף';
+$lang['btn_search'] = 'חפש';
+$lang['btn_save'] = 'שמור';
+$lang['btn_preview'] = 'תצוגה מקדימה';
+$lang['btn_top'] = 'חזור למעלה';
+$lang['btn_newer'] = '<< יותר חדש';
+$lang['btn_older'] = 'פחות חדש >>';
+$lang['btn_revs'] = 'גרס×ות קודמות';
+$lang['btn_recent'] = '×©×™× ×•×™×™× ×חרוני×';
+$lang['btn_upload'] = 'העלה';
+$lang['btn_cancel'] = 'בטל';
+$lang['btn_index'] = '×ינדקס';
+$lang['btn_secedit'] = 'עריכה';
+$lang['btn_login'] = 'כניסה';
+$lang['btn_logout'] = 'יצי××”';
+$lang['btn_admin'] = 'מנהל';
+$lang['btn_update'] = 'עדכן';
+$lang['btn_delete'] = 'מחק';
+$lang['btn_back'] = 'חזור';
+$lang['btn_backlink'] = '×§×™×©×•×¨×™× ×œ×›×ן';
+$lang['btn_backtomedia'] = 'לחזור לבחירת קובץ מדיה';
+$lang['btn_subscribe'] = 'עקוב ×חרי שינוי×';
+$lang['btn_unsubscribe'] = 'הפסק לעקוב';
+$lang['btn_subscribens'] = 'הרשמה ×œ×©×™× ×•×™×™× ×‘×ž×¨×—×‘ הש×';
+$lang['btn_unsubscribens'] = 'הסרת הרשמה ×œ×©×™× ×•×™×™× ×‘×ž×—×‘ הש×';
+$lang['btn_profile'] = 'עדכן פרופיל';
+$lang['btn_reset'] = '×יפוס';
+$lang['btn_resendpwd'] = 'שלח סיסמה חדשה';
+$lang['btn_draft'] = 'עריכת טיוטה';
+$lang['btn_recover'] = 'שחזור טיוטה';
+$lang['btn_draftdel'] = 'מחיקת טיוטה';
+$lang['loggedinas'] = '×¨×©×•× ×›-';
+$lang['user'] = '×©× ×ž×©×ª×ž×©';
+$lang['pass'] = 'סיסמה';
+$lang['newpass'] = 'סיסמה חדשה';
+$lang['oldpass'] = '×שר ×ת הסיסמה הנוכחית';
+$lang['passchk'] = 'שוב';
+$lang['remember'] = 'זכור ×ותי';
+$lang['fullname'] = '×©× ×ž×œ×';
+$lang['email'] = 'דו×"ל';
+$lang['register'] = 'הרשמה';
+$lang['profile'] = 'פרופיל';
+$lang['badlogin'] = 'סליחה, ×©× ×”×ž×©×ª×ž×© ×ו הסיסמה שגויי×';
+$lang['minoredit'] = '×©×™× ×•×™× ×ž×™× ×•×¨×™×™×';
+$lang['draftdate'] = 'טיוטה נשמרה ב-';
+$lang['regmissing'] = 'סליחה, עליך ×œ×ž×œ× ×ת כל השדות';
+$lang['reguexists'] = 'סליחה, משתמש ×‘×©× ×–×” כבר נרש×';
+$lang['regsuccess'] = 'הרשמה הצליחה, המשתמש × ×¨×©× ×•×”×•×“×¢×” נשלחה בדו×ר';
+$lang['regsuccess2'] = 'הרשמה הצליחה, המשתמש נרש×.';
+$lang['regmailfail'] = 'שליחת הודעת הדו×ר כשלה, × × ×œ×™×¦×•×¨ קשר ×¢× ×ž× ×”×œ ×”×תר';
+$lang['regbadmail'] = 'כתובת דו×ר כנר××” ×œ× ×ª×§×¤×”, ×× ×œ× ×›×š ×”×™× ×™×© ליצור קשר ×¢× ×ž× ×”×œ ×”×תר';
+$lang['regbadpass'] = 'שתי הסיסמות הן ×œ× ×–×”×•×ª, × × ×œ× ×¡×•×ª שוב';
+$lang['regpwmail'] = 'סיסמת הדוקוויקי שלך';
+$lang['reghere'] = 'עדיין ×œ×œ× ×©×-משתמש? ההרשמה ×›×ן';
+$lang['profna'] = 'בוויקי ×”×–×” ×œ× × ×™×ª×Ÿ לשנות פרופיל';
+$lang['profnochange'] = '×ין שינוי×, פרופיל ×œ× ×¢×•×“×›×Ÿ';
+$lang['profnoempty'] = '×©× ×•×›×ª×•×‘×ª דו×"ל ×œ× ×™×›×•×œ×™× ×œ×”×™×•×ª ריקי×';
+$lang['profchanged'] = 'פרופיל עודכן בהצלחה';
+$lang['pwdforget'] = 'שכחת סיסמה? קבל חדשה';
+$lang['resendna'] = 'הוויקי ×”×–×” ×œ× ×ª×•×ž×š בחידוש סיסמה';
+$lang['resendpwd'] = 'שלח סיסמה חדשה עבור';
+$lang['resendpwdmissing'] = 'סליחה, עליך ×œ×ž×œ× ×ת כל השדות';
+$lang['resendpwdnouser'] = 'סליחה, משתמש ×‘×©× ×–×” ×œ× × ×ž×¦×';
+$lang['resendpwdbadauth'] = 'סליחה, קוד ×ימות ×–×” ×ינו תקף. יש ×œ×•×“× ×›×™ נעשה שימוש ×‘×ž×œ×•× ×§×™×©×•×¨ ×”×ימות.';
+$lang['resendpwdconfirm'] = 'קישור ×ימות נשלח בדו×"ל.';
+$lang['resendpwdsuccess'] = 'סיסמה חדשה נשלחה בדו×ר';
+$lang['txt_upload'] = 'בחר קובץ להעלות';
+$lang['txt_filename'] = 'הכנס ×©× ×œ×•×•×™×§×™ (בחירה)';
+$lang['txt_overwrt'] = 'לכתוב ×‘×ž×§×•× ×§×•×‘×¥ קיי×';
+$lang['lockedby'] = 'נעול על ידי';
+$lang['lockexpire'] = 'נעילה פגה';
+$lang['willexpire'] = 'נעילה תחלוף עוד זמן קצר. \nלמניעת התנגשויות יש להשתמש בכפתור הרענון מטה כדי ל×תחל ×ת הנעילה שנית';
+$lang['notsavedyet'] = '×§×™×™×ž×™× ×©×™× ×•×™×™× ×©×˜×¨× × ×©×ž×¨×• ו×שר ×™×בדו \n ×”×× ×œ×”×ž×©×™×š?';
+$lang['rssfailed'] = 'כשל ב-RSS';
+$lang['nothingfound'] = '×œ× × ×ž×¦×ו תוצ×ות';
+$lang['mediaselect'] = 'בחירת קובץ מדיה';
+$lang['fileupload'] = 'העל×ת קובץ מדיה';
+$lang['uploadsucc'] = 'העל×ת הקובץ בוצעה בהצלחה';
+$lang['uploadfail'] = 'קרתה שגי××” בעת העל×ת הקובץ. תיתכן ובעייה זו נוצרה עקב הרש×ות שגיות.';
+$lang['uploadwrong'] = 'העל××” ×œ× ×ושרה. ×§×‘×¦×™× ×‘×¡×™×•×ž×ª זו ×סורי×';
+$lang['uploadexist'] = 'הקובץ כבר קיי×. פעולה בוטלה';
+$lang['uploadbadcontent'] = 'התוכן שהועלה ×œ× ×ª×× ×ת הסיומת %s של הקובץ.';
+$lang['uploadspam'] = 'ההעל××” נחסמה על ידי הרשימה השחורה של הספ××.';
+$lang['uploadxss'] = 'ההעל××” נחסמה בשל חשד לתוכן זדוני.';
+$lang['deletesucc'] = 'קובץ %s נמחק';
+$lang['deletefail'] = '×œ× ×™×›×•×œ×ª×™ למחוק "%s" -- בדקו הרש×ות';
+$lang['mediainuse'] = 'קובץ "%s" ×œ× × ×ž×—×§ - ×”×•× ×¢×“×™×™×Ÿ בשימוש';
+$lang['namespaces'] = 'שמות מתח×';
+$lang['mediafiles'] = '×§×‘×¦×™× ×–×ž×™× ×™× ×‘-';
+$lang['js']['searchmedia'] = 'חיפוש קבצי×';
+$lang['js']['keepopen'] = 'הש×ר חלון פתוח בבחירה';
+$lang['js']['hidedetails'] = 'הסתר פרטי×';
+$lang['js']['nosmblinks'] = ':( קישור למערכת ×§×‘×¦×™× ×©×œ חלונות פועל רק בדפדפן ×ינטרנט ×קספלורר.
+ ×–×” בסדר, ×ין צורך לעבור. ×פשר להעתיק ולהדביק ×ת הקישור';
+$lang['js']['del_confirm'] = 'ב×מת למחוק?';
+$lang['js']['mu_btn'] = 'העל×ת ×§×‘×¦×™× ×ž×¨×•×‘×™×';
+$lang['mediausage'] = 'השתמש בתחביר ×”×‘× ×œ×”×ª×™×—×¡×•×ª ×ל קובץ ×–×”:';
+$lang['mediaview'] = 'הצג ×ת הקובץ המקורי';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = '×›×ן ניתן להעלות קובץ למרחב השמות הנוכחי. ליצירת תתי-מרחבי שמות ×¦×¨×¤× ×‘-"העלה" לתחילת ×©× ×”×§×•×‘×¥ ×ž×•×¤×¨×“×™× ×‘×¤×¡×™×§×™×';
+$lang['mediaextchange'] = 'סיומת הקובץ השתנתה מ-.%s ל-.%s!';
+$lang['reference'] = '×§×™×©×•×¨×™× ×œ';
+$lang['ref_inuse'] = '×œ× ×™×›×•×œ×ª×™ למחוק קובץ, ×”×“×¤×™× ×”×‘××™× ×¢×“×™×™×Ÿ ×ž×©×ª×ž×©×™× ×‘×•:';
+$lang['ref_hidden'] = 'יש ×§×™×©×•×¨×™× ×œ×“×¤×™× ×œ×œ× ×”×¨×©×ת קרי××”';
+$lang['hits'] = 'פגיעות';
+$lang['quickhits'] = '×“×¤×™× ×©× ×ž×¦×ו';
+$lang['toc'] = 'תוכן ×¢× ×™×™× ×™×';
+$lang['current'] = 'גירסה נוכחית';
+$lang['yours'] = 'הגרסה שלך';
+$lang['diff'] = 'הצג ×©×™× ×•×™× ×ž×’×¨×¡×” זו ועד הנוכחית';
+$lang['diff2'] = 'הצגת ×”×‘×“×œ×™× ×‘×™×Ÿ הגרס×ות שנבחרו';
+$lang['line'] = 'שורה';
+$lang['breadcrumb'] = '×‘×™×§×•×¨×™× ×חרוני×';
+$lang['youarehere'] = '×תה נמצה ×›×ן';
+$lang['lastmod'] = 'שונה ל×חרונה ב';
+$lang['by'] = 'על ידי';
+$lang['deleted'] = 'נמחק';
+$lang['created'] = 'נוצר';
+$lang['restored'] = 'שוחזר';
+$lang['external_edit'] = 'עריכה חיצונית';
+$lang['summary'] = 'תקציר העריכה';
+$lang['mail_newpage'] = 'דף נוסף:';
+$lang['mail_changed'] = 'דף שונה:';
+$lang['mail_new_user'] = 'משתמש חדש:';
+$lang['mail_upload'] = 'קובץ הועלה:';
+$lang['qb_bold'] = 'טקסט מודגש';
+$lang['qb_italic'] = 'טקסט נטוי';
+$lang['qb_underl'] = 'טקסט ×¢× ×§×• תחתון';
+$lang['qb_code'] = 'קוד';
+$lang['qb_strike'] = 'טקסט מחוק';
+$lang['qb_h1'] = 'כותרת רמה 1';
+$lang['qb_h2'] = 'כותרת רמה 2';
+$lang['qb_h3'] = 'כותרת רמה 3';
+$lang['qb_h4'] = 'כותרת רמה 4';
+$lang['qb_h5'] = 'כותרת רמה 5';
+$lang['qb_h'] = 'כותרת';
+$lang['qb_hs'] = 'בחירת כותרת';
+$lang['qb_link'] = 'קישור פנימי';
+$lang['qb_extlink'] = 'קישור חיצוני';
+$lang['qb_hr'] = 'קו ×ופקי';
+$lang['qb_ol'] = '×יבר ברשימה ממוספרת';
+$lang['qb_ul'] = '×בר ברשימה ×œ× ×ž×ž×•×¡×¤×¨×ª';
+$lang['qb_media'] = 'תמונות ×ו קובץ ×חר';
+$lang['qb_sig'] = 'הזנת חתימה';
+$lang['qb_smileys'] = 'פרצופוני×';
+$lang['qb_chars'] = '×¡×™×ž× ×™× ×ž×™×•×—×“×™×';
+$lang['admin_register'] = 'להוסיף משתמש חדש';
+$lang['metaedit'] = 'ערוך נתוני×';
+$lang['metasaveerr'] = 'כשל בשמירת נתוני×';
+$lang['metasaveok'] = '× ×ª×•× ×™× × ×©×ž×¨×•';
+$lang['img_backto'] = 'הזור ל';
+$lang['img_title'] = 'כותרת';
+$lang['img_caption'] = 'תי×ור';
+$lang['img_date'] = 'ת×ריך';
+$lang['img_fname'] = '×©× ×”×§×•×‘×¥';
+$lang['img_fsize'] = 'גודל';
+$lang['img_artist'] = 'צל×';
+$lang['img_copyr'] = 'זכויות';
+$lang['img_format'] = 'פורמט';
+$lang['img_camera'] = 'מצלמה';
+$lang['img_keywords'] = 'מילות מפתח';
+$lang['subscribe_success'] = '%s נוסף לרשימת ×”×ž×›×•×ª×‘×™× ×¢×‘×•×¨ %s';
+$lang['subscribe_error'] = 'שגי××” בהוספת %s לרשימת ×”×ž×›×•×ª×‘×™× ×¢×‘×•×¨ %s';
+$lang['subscribe_noaddress'] = '×ין כתובת המשויכת ×œ×¨×™×©×•× ×©×œ×š ולכן ×ין ב×פשרותך להצטרף לרשימת המכותבי×';
+$lang['unsubscribe_success'] = '%s הוסר מרשימת ×”×ž×›×•×ª×‘×™× ×¢×‘×•×¨ %s';
+$lang['unsubscribe_error'] = 'שגי××” בהסרת %s מרשימת ×”×ž×›×•×ª×‘×™× ×¢×‘×•×¨ %s';
+$lang['authmodfailed'] = 'תצורת ×ימות ×ž×©×ª×ž×©×™× ×’×¨×•×¢×”. × × ×œ×“×•×•×— למנהל הויקי.';
+$lang['authtempfail'] = '×ימות ×ž×©×ª×ž×©×™× ×ינו זמין כרגע. ×× ×ž×¦×‘ ×–×” נמשך × × ×œ×”×•×“×™×¢ למנהל הויקי.';
+$lang['i_chooselang'] = '× × ×œ×‘×—×•×¨ שפה';
+$lang['i_installer'] = 'DokuWiki Installer';
+$lang['i_wikiname'] = '×©× ×”×•×™×§×™';
+$lang['i_enableacl'] = '×פשר ACL (מומלץ)';
+$lang['i_superuser'] = 'משתמש-על';
+$lang['i_problems'] = 'המתקין ×–×™×”×” מספר בעיות המצוינות מטה. ×ין ב×פשרותך להמשיך לפני תיקונן.';
+$lang['i_modified'] = 'משיקולי ×בטחה תסריט ×–×” יעבוד ×ך ורק ×¢× ×”×ª×§× ×ª DokuWiki חדשה ×©×œ× ×¢×‘×¨×” כל שינוי.
+ עליך לחלץ שנית ×ת ×”×§×‘×¦×™× ×ž×”×—×‘×™×œ×” שהורדה ×ו להעזר בדף
+ <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
+$lang['i_funcna'] = 'פונקצית ×”-PHP <code>%s</code> ××™× ×” זמינה. יתכן ×›×™ מ×רח ×”×תר ×—×¡× ×ותה מסיבה כלשהי?';
+$lang['i_phpver'] = 'גרסת ×”-PHP שלך <code>%s</code> נמוכה מהדרוש. עליך לשדרג ×ת התקנת ×”-PHP';
+$lang['i_permfail'] = '<code>%s</code> ××™× ×” ברת כתיבה על ידי DokuWiki. עליך לשנות הרש×ות ספריה זו!';
+$lang['i_confexists'] = '<code>%s</code> כבר קיי×';
+$lang['i_writeerr'] = '×ין ×פשרות ליצור ×ת <code>%s</code>. × × ×œ×‘×“×•×§ ×ת הרש×ות הקובץ/ספריה וליצור ×ת הקובץ ידנית.';
+$lang['i_badhash'] = 'קובץ Dokuwiki.php ×œ× ×ž×–×•×”×” ×ו שעבר ×©×™× ×•×™×™× (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - ערך ×œ× ×—×•×§×™ ×ו ריק';
+$lang['i_success'] = 'ההגדרה הסתימה בהצלחה. ב×פשרותך למחוק עתה ×ת הקובץ install.php ולהמשיך ×ל <a href="doku.php">DokuWiki החדש שלך</a>.';
+$lang['i_failure'] = 'מספר שגי×ות ×רעו בעת כתיבת קבצי התצורה. ייתכן ×›×™ ×™×”×™×” צורך ×œ×ª×§× × ×™×“× ×™×ª לפני שניתן ×™×”×™×” להשתמש ב<a href="doku.php">DokuWiki החדש שלך</a>.';
+$lang['i_policy'] = 'מדיניות ACL תחילית';
+$lang['i_pol0'] = 'ויקי פתוח (קרי××”, כתיבה והעל××” לכול×)';
+$lang['i_pol1'] = ' ויקי ציבורי (קרי××” לכול×, כתיבה והעל××” ×œ×ž×©×ª×ž×©×™× ×¨×©×•×ž×™×)';
+$lang['i_pol2'] = 'ויקי סגור (קרי××”, כתיבה והעל××” ×œ×ž×©×ª×ž×©×™× ×¨×©×•×ž×™× ×‘×œ×‘×“)';
+$lang['i_retry'] = 'נסיון נוסף';
+$lang['mu_intro'] = '×›×ן תוכל להעלות ×§×‘×¦×™× ×ž×¨×•×‘×™×. לחץ על כפתור החיפוש להוסיף ××•×ª× ×œ×ž×—×¡× ×™×ª. לחץ על העל××” לסיו×.';
+$lang['mu_gridname'] = '×©× ×§×•×‘×¥';
+$lang['mu_gridsize'] = 'גודל';
+$lang['mu_gridstat'] = 'סט×טןס';
+$lang['mu_browse'] = 'חיפוש';
+$lang['mu_toobig'] = 'גדול מדי';
+$lang['mu_ready'] = 'מוכן להעל××”';
+$lang['mu_done'] = 'סיי×';
+$lang['mu_fail'] = 'נכשל';
+$lang['mu_info'] = '×”×§×‘×¦×™× ×”×•×¢×œ×•';
+$lang['mu_lasterr'] = 'שגי××” ×חרונה:';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt
new file mode 100644
index 000000000..307874a73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt
@@ -0,0 +1,3 @@
+====== דף נעול ======
+
+דף ×–×” נעול כרגע לעריכה על ידי משתמש ×חר. עליך להמתין עד שהמשתמש ×™×¡×™×™× ×ת העריכה ×ו עד שהנעילה תפוג.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt
new file mode 100644
index 000000000..5a575f1f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt
@@ -0,0 +1,3 @@
+====== כניסה ======
+
+×ינך ברשומות המערכת כרגע! יש להזין ×ת נתוני ההזדהות מטה לכניסה. יש ל×פשר עוגיות (cookies) כדי להכנס.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt
new file mode 100644
index 000000000..d7990b2b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt
@@ -0,0 +1,17 @@
+דף בDokuWiki נוסף ×ו שונה. ×”× ×” הפרטי×:
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+Edit Summary: @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+--
+
+דף זה נוצר ע"י DokuWiki ב-
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt
new file mode 100644
index 000000000..ac6fb7386
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt
@@ -0,0 +1,3 @@
+====== דף ×–×” עדיין ×œ× ×§×™×™× ======
+
+הדף ×ליו הגעת עדיין ×œ× ×§×™×™×. לחיצה על הכפתור "יצירת דף" תצור ×ותו. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt
new file mode 100644
index 000000000..3d08e16db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt
@@ -0,0 +1,4 @@
+====== גרסה ×œ× ×§×™×™×ž×ª ======
+
+הגרסה שהוזנה ××™× ×” קיימת. × × ×œ×”×©×ª×ž×© בכפתור ''גרס×ות קודמות'' להצגת רשימת הגרס×ות של מסמך ×–×”.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt
new file mode 100644
index 000000000..1331c23ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt
@@ -0,0 +1,4 @@
+====== תצוגה מקדימה ======
+
+זו תצוגה מקדימה של הדף לעתיד. להזכירך: **הדף עדיין ×œ× × ×©×ž×¨!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt
new file mode 100644
index 000000000..255195c7f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt
@@ -0,0 +1,13 @@
+×©×œ×•× @FULLNAME@!
+
+מישהו ביקש סיסמה חדשה עבור הכניסה שלך ל-@TITLE@ ב-@DOKUWIKIURL@
+
+×× ×œ× ×‘×™×§×©×ª סיסמה חדשה פשוט ×”×ª×¢×œ× ×ž×“×•×"ל ×–×”.
+
+כדי ל×שר שהבקשה ב×מת נשלחה על ידך × × ×”×©×ª×ž×© בקישור הב×.
+
+@CONFIRM@
+
+--
+דו×ר ×–×” נוצר על ידי DokuWiki ב-
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt
new file mode 100644
index 000000000..8e4c177ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt
@@ -0,0 +1,2 @@
+דף ×–×” ×”×•× ×“×£ לקרי××” בלבד. ניתן לצפות בקוד המקור שלו, ×בל ×œ× × ×™×ª×Ÿ לערוך ×ותו. ניתן לפנות ×ל מנהל הויקי ×× ×œ×“×¢×ª×š נפלה טעות.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt
new file mode 100644
index 000000000..0febd96e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt
@@ -0,0 +1,5 @@
+====== ×©×™× ×•×™×™× ××—×¨×•× ×™× ======
+
+×”×“×¤×™× ×”×‘××™× ×¢×‘×¨×• ×©×™× ×•×™×™× ×œ×חרונה.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt
new file mode 100644
index 000000000..7225b02fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt
@@ -0,0 +1,3 @@
+====== הרשמה כמשתמש חדש ======
+
+יש ×œ×ž×œ× ×ת כל המידע מטה כדי ליצור חשבון חדש בויקי ×–×”. יש ×œ×•×“× ×›×™ מוזנת **כתובת דו×"ל תקפה**- סיסמתך החדשה תשלח לכתובת זו\\ על ×©× ×”×ž×©×ª×ž×© להיות [[hdoku>ויקי:×©× ×“×£|×©× ×“×£]] תקף.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt
new file mode 100644
index 000000000..bb64a8158
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt
@@ -0,0 +1,14 @@
+משתמש חדש נרש×. ×”× ×” הפרטי×:
+
+×©× ×ž×©×ª×ž×© : @NEWUSER@
+×©× ×ž×œ× : @NEWNAME@
+דו×"ל : @NEWEMAIL@
+
+ת×ריך : @DATE@
+דפדפן : @BROWSER@
+כתובת רשת : @IPADDRESS@
+×©× ×”×ž×—×©×‘ : @HOSTNAME@
+
+--
+דו×"ל ×–×” נוצר על ידי DokuWiki ב-
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt
new file mode 100644
index 000000000..47e7749c2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt
@@ -0,0 +1,4 @@
+====== שליחת סיסמה חדשה ======
+
+יש להזין ×ת ×©× ×”×ž×©×ª×ž×© בטופס מטה ולבקש סיסמה חדשה לחשבון שלך בויקי ×–×”. קישור ל×ימות ישלח לכתובת הדו"ל ×יתה נרשמת.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt
new file mode 100644
index 000000000..6b23402f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt
@@ -0,0 +1,4 @@
+====== גרס×ות ישנות ======
+
+×לה גרס×ות מוקדמות יותר של המסמך הנוכחי. כדי לשחזר גרסה מוקדמת יותר יש ללחוץ על הכפתור ''עריכה'' ולשמור ×ת הדף.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt
new file mode 100644
index 000000000..aed23be24
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt
@@ -0,0 +1,5 @@
+====== חיפוש ======
+
+ניתן לר×ות ×ת תוצ×ות החיפוש למטה. ×× ×œ× × ×ž×¦×ו ×“×¤×™× ×‘×—×™×¤×•×©, לחיצה על הכפתור "עריכה" תיצור דף חדש על ×©× ×ž×™×œ×ª החיפוש שהוזנה.
+
+===== תוצ×ות ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt
new file mode 100644
index 000000000..22ca0c3ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt
@@ -0,0 +1,2 @@
+**זו גרסה ישנה של המסמך!** לחיצה על כותרת המסמך תציג ×ת גרסתו הנוכחית.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt
new file mode 100644
index 000000000..ca85eb2e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt
@@ -0,0 +1,29 @@
+# זוהי רשימת ×ž×™×œ×™× ×ž×ž× ×” ×ž×ª×¢×œ× ×¡×•×¨×§ התוכן, ×חת בכל שורה
+# בעורכך קובץ ×–×” עליך ×œ×•×“× ×›×™ נעשה שימוש בסימני סוף שורה של UNIX (שורה חדשה ×œ×œ× ×”×—×–×¨×ª הסמן)
+# ×ין צורך לכלול ×ž×™×œ×™× ×‘× ×•×ª פחות משלוש ×ותיות - ×לו נפסחות בכל מקרה
+# רשימה זו מבוססת על ×לו הנמצ×ות ב- http://www.ranks.nl/stopwords
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt
new file mode 100644
index 000000000..7b05c4f47
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt
@@ -0,0 +1,17 @@
+שלו×!
+
+הדף @PAGE@ בויקי @TITLE@ השתנה.
+×”× ×” השינויי×:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+כדי להפסיק ×ת ההרשמה לדף ×–×” יש להכנס לויקי ב-
+@DOKUWIKIURL@ לבקר בדף
+@NEWPAGE@
+ולבחור 'הפסק לעקוב'.
+
+--
+דו×"ל ×–×” נוצר על ידי DokuWiki ב-
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt
new file mode 100644
index 000000000..494d8389d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt
@@ -0,0 +1,5 @@
+====== עידכון פרטי חשבונך ======
+
+×ין צורך ×œ×ž×œ× ×ž×¢×‘×¨ ×œ×¤×¨×˜×™× ×”×ž×™×•×¢×“×™× ×œ×©×™× ×•×™. ×œ× × ×™×ª×Ÿ לשנות ×ת ×©× ×”×ž×©×ª×ž×©.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt
new file mode 100644
index 000000000..fd670796c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt
@@ -0,0 +1,14 @@
+קובץ הועלה ×ל הדוקוויקי שלך. ×”× ×” פרטיו:
+
+קובץ : @MEDIA@
+ת×ריך : @DATE@
+דפדפן : @BROWSER@
+כתובת IP : @IPADDRESS@
+מ×רח : @HOSTNAME@
+גודל : @SIZE@
+סיווג : @MIME@
+משתמש : @USER@
+
+--
+דו×ר ×–×” נוצר על ידי דוקוויקי בתובת
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt
new file mode 100644
index 000000000..b7c3f0a7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt
@@ -0,0 +1,4 @@
+====== הצפה נחסמה ======
+
+×”×©× ×•×™×™× ×©×œ×š **ל×** נשמרו מפני ×©×”× ×ž×›×™×œ×™× ×ž×™×œ×” חסומה ×ו יותר. ×× ×‘×מת ניסית להציף ×ת הויקי -- כלב רע! ×× × ×¨××” לך ×›×™ זו טעות,ניתן ליצור קשר ×¢× ×ž× ×”×œ הויקי (מפני ש×נחנו ×œ× ×¨×•×¦×™× ×œ×§×¨×•× ×œ×× ×©×™× ×›×œ×‘×™× ×œ×—×™× ×, ×–×” פוגע בכלבי×).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php
new file mode 100644
index 000000000..044d7d5a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * hi language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesHi.php?view=co
+ * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'यह पृषà¥à¤  संपादित करें';
+$lang['btn_source'] = 'पृषà¥à¤  का शà¥à¤°à¥‹à¤¤ दिखाà¤à¤';
+$lang['btn_show'] = 'पृषà¥à¤  दिखाà¤à¤';
+$lang['btn_create'] = 'इस पृषà¥à¤  को बनायें';
+$lang['btn_search'] = 'खोजें';
+$lang['btn_save'] = 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करें';
+$lang['btn_preview'] = 'पूरà¥à¤µà¤¾à¤µà¤²à¥‹à¤•à¤¨';
+$lang['btn_top'] = 'वापस शीरà¥à¤· पर';
+$lang['btn_newer'] = '<< अधिक विगत';
+$lang['btn_older'] = 'अमूल विगत >>';
+$lang['btn_revs'] = 'पà¥à¤°à¤¾à¤¨à¥‡ संशोधन';
+$lang['btn_recent'] = 'विगत परिवरà¥à¤¤à¤¨';
+$lang['btn_upload'] = 'अपलोड करें';
+$lang['btn_cancel'] = 'रदà¥à¤¦ करें';
+$lang['btn_index'] = 'सूचकांक';
+$lang['btn_secedit'] = 'संपादित करें';
+$lang['btn_login'] = 'लॉग इन';
+$lang['btn_logout'] = 'लॉगआउट';
+$lang['btn_admin'] = 'वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['btn_update'] = 'अदà¥à¤¯à¤¤à¤¨ करना';
+$lang['btn_delete'] = 'मिटाना';
+$lang['btn_back'] = 'पीछे';
+$lang['btn_backlink'] = 'पिछली कड़ियाà¤';
+$lang['btn_backtomedia'] = 'मीडिया फाइल चयन पर पीछे जायें';
+$lang['user'] = 'उपयोगकरà¥à¤¤à¤¾ का नाम';
+$lang['pass'] = 'गà¥à¤ªà¥à¤¤ शबà¥à¤¦';
+$lang['newpass'] = 'नव गà¥à¤ªà¥à¤¤ शबà¥à¤¦';
+$lang['passchk'] = 'पासवरà¥à¤¡ दà¥à¤¬à¤¾à¤°à¤¾ लिखें';
+$lang['remember'] = 'मà¥à¤à¥‡ सà¥à¤®à¥ƒà¤¤ रखना';
+$lang['fullname'] = 'सही नाम';
+$lang['email'] = 'ईमेल';
+$lang['badlogin'] = 'छमा करें, उपयोगकरà¥à¤¤à¤¾ का नाम व गà¥à¤ªà¥à¤¤ शबà¥à¤¦ ग़लत था |';
+$lang['minoredit'] = 'अमूल चूल परिवरà¥à¤¤à¤¨';
+$lang['regmissing'] = 'छमा करें, आपको सारे रिकà¥à¤¤ सà¥à¤¥à¤¾à¤¨ भरने पड़ेंगे |';
+$lang['regbadpass'] = 'दोनो दिठगये गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ समान नहीं हैं | दोबारा पà¥à¤°à¤¯à¤¾à¤¸ करें |';
+$lang['regpwmail'] = 'आपकी डोकà¥à¤µà¤¿à¤•à¥€ का गà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦';
+$lang['reghere'] = 'आपके पास अभी तक कोई खाता नहीं है? बस à¤à¤• लें |';
+$lang['profna'] = 'यह विकी पà¥à¤°à¥‹à¤«à¤¼à¤¾à¤‡à¤² संशोधन का समरà¥à¤¥à¤¨ नहीं करता |';
+$lang['profnochange'] = 'कोई परिवरà¥à¤¤à¤¨ नहीं, कà¥à¤› नहीं करना |';
+$lang['resendpwd'] = 'नवगà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ भेजें';
+$lang['resendpwdmissing'] = 'छमा करें, आपको सारे रिकà¥à¤¤ सà¥à¤¥à¤¾à¤¨ भरने पड़ेंगे |';
+$lang['resendpwdsuccess'] = 'आपका नवगà¥à¤ªà¥à¤¤à¤¶à¤¬à¥à¤¦ ईमेल दà¥à¤µà¤¾à¤°à¤¾ समà¥à¤ªà¥à¤°à¥‡à¤·à¤¿à¤¤ कर दिया गया है |';
+$lang['txt_upload'] = 'अपलोड करने के लिठफ़ाइल चà¥à¤¨à¥‡à¤‚';
+$lang['txt_filename'] = 'के रूप में अपलोड करें (वैकलà¥à¤ªà¤¿à¤•)';
+$lang['txt_overwrt'] = 'अधिलेखित उपसà¥à¤¥à¤¿à¤¤ फ़ाइल';
+$lang['lockedby'] = 'इस समय तक बंद';
+$lang['lockexpire'] = 'बंद समापà¥à¤¤ होगा';
+$lang['nothingfound'] = 'कà¥à¤šà¥à¤› नहीं मिला |';
+$lang['uploadexist'] = 'फ़ाइल पहले से उपसà¥à¤¥à¤¿à¤¤ है. कà¥à¤› भी नहीं किया |';
+$lang['mediafiles'] = 'उपलबà¥à¤§ फाइलों में';
+$lang['js']['hidedetails'] = 'विवरण छिपाà¤à¤';
+$lang['mediaview'] = 'मूल फ़ाइल देखें';
+$lang['reference'] = 'संदरà¥à¤­ के लिà¤';
+$lang['ref_hidden'] = 'कà¥à¤šà¥à¤› संदरà¥à¤­ उन पनà¥à¤¨à¥‹ पर हैं जिनको पड़ने की आपको अनà¥à¤®à¤¤à¤¿ नहीं है|';
+$lang['toc'] = 'विषय सूची';
+$lang['current'] = 'वरà¥à¤¤à¤®à¤¾à¤¨';
+$lang['yours'] = 'आपका संसà¥à¤•à¤°à¤£à¤ƒ';
+$lang['diff'] = 'वरà¥à¤¤à¤®à¤¾à¤¨ संशोधन में मतभेद दिखाइये |';
+$lang['diff2'] = 'चयनित संशोधन के बीच में मतभेद दिखाइये |';
+$lang['line'] = 'रेखा
+';
+$lang['youarehere'] = 'आप यहाठहैं |
+
+';
+$lang['lastmod'] = 'अंतिम बार संशोधित';
+$lang['by'] = 'के दà¥à¤µà¤¾à¤°à¤¾';
+$lang['deleted'] = 'हटाया';
+$lang['created'] = 'निरà¥à¤®à¤¿à¤¤';
+$lang['restored'] = 'पà¥à¤°à¤¾à¤¨à¥‡ संशोधन बहाल';
+$lang['external_edit'] = 'बाहà¥à¤¯ समà¥à¤ªà¤¾à¤¦à¤¿à¤¤';
+$lang['summary'] = 'सारांश संपादित करें';
+$lang['mail_newpage'] = 'पृषà¥à¤  जोड़ा:';
+$lang['mail_changed'] = 'पृषà¥à¤  बदला:';
+$lang['mail_new_user'] = 'नये उपयोगकरà¥à¤¤à¤¾:';
+$lang['mail_upload'] = 'अपलोड की गई फ़ाइल:';
+$lang['qb_bold'] = 'बोलà¥à¤¡ पाठà¥à¤¯';
+$lang['qb_h1'] = 'सà¥à¤¤à¤° 1 शीरà¥à¤·à¤ªà¤‚कà¥à¤¤à¤¿';
+$lang['qb_h2'] = 'सà¥à¤¤à¤° 2 शीरà¥à¤·à¤ªà¤‚कà¥à¤¤à¤¿';
+$lang['qb_h3'] = 'सà¥à¤¤à¤° 3 शीरà¥à¤·à¤ªà¤‚कà¥à¤¤à¤¿';
+$lang['qb_h4'] = 'सà¥à¤¤à¤° 4 शीरà¥à¤·à¤ªà¤‚कà¥à¤¤à¤¿';
+$lang['qb_h5'] = 'सà¥à¤¤à¤° 5 शीरà¥à¤·à¤ªà¤‚कà¥à¤¤à¤¿';
+$lang['qb_link'] = 'आंतरिक कड़ी';
+$lang['qb_extlink'] = 'बाहà¥à¤¯ कड़ी';
+$lang['qb_hr'] = 'खड़ी रेखा';
+$lang['qb_sig'] = 'हसà¥à¤¤à¤¾à¤•à¥à¤·à¤° डालें';
+$lang['admin_register'] = 'नया उपयोगकरà¥à¤¤à¤¾ जोड़ें';
+$lang['img_backto'] = 'वापस जाना';
+$lang['img_title'] = 'शीरà¥à¤·à¤•';
+$lang['img_caption'] = 'सहशीरà¥à¤·à¤•';
+$lang['img_date'] = 'तिथि';
+$lang['img_fsize'] = 'आकार';
+$lang['img_artist'] = 'फोटोगà¥à¤°à¤¾à¤«à¤°';
+$lang['img_format'] = 'पà¥à¤°à¤¾à¤°à¥‚प';
+$lang['img_camera'] = 'कैमरा';
+$lang['i_chooselang'] = 'अपनी भाषा चà¥à¤¨à¥‡à¤‚';
+$lang['i_installer'] = 'डोकà¥à¤µà¤¿à¤•à¥€ इंसà¥à¤Ÿà¥‰à¤²à¤°';
+$lang['i_wikiname'] = 'विकी का नाम';
+$lang['i_superuser'] = 'महाउपयोगकरà¥à¤¤à¤¾';
+$lang['i_retry'] = 'पà¥à¤¨à¤ƒà¤ªà¥à¤°à¤¯à¤¾à¤¸';
+$lang['mu_gridsize'] = 'आकार';
+$lang['mu_gridstat'] = 'सà¥à¤¥à¤¿à¤¤à¤¿';
+$lang['mu_browse'] = 'बà¥à¤°à¤¾à¤‰à¤œà¤¼
+';
+$lang['mu_toobig'] = 'बहà¥à¤¤ बड़ा';
+$lang['mu_ready'] = 'अपलोड करने के लिठतैयार';
+$lang['mu_done'] = 'पूरà¥à¤£';
+$lang['mu_fail'] = 'असफल';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt
new file mode 100644
index 000000000..15a2a2b13
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt
@@ -0,0 +1,3 @@
+====== Administracija ======
+
+Slijedi spisak svih administracijskih poslova koji su trenutno dostupni.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt
new file mode 100644
index 000000000..e7115a6b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt
@@ -0,0 +1,3 @@
+====== Linkovi na stranicu ======
+
+Slijedi spisak svih dokumenata koji imaju link na trenutni.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt
new file mode 100644
index 000000000..e33d7020a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt
@@ -0,0 +1,5 @@
+====== Postoji novija verzija ======
+
+Već postoji novija verzija dokumenta kojeg ste mijenjali. To se dešava jer je neki drugi korisnik snimio dokument za vrijeme dok ste ga Vi mijenjali.
+
+ProuÄite promjene koje slijede i odaberite koje želite preuzeti. Odaberite ''Snimi'' da biste snimili VaÅ¡u verziju ili ''PoniÅ¡ti'' da ostavite saÄuvanu trenutnu verziju dokumenta.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt
new file mode 100644
index 000000000..216eea582
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt
@@ -0,0 +1,5 @@
+====== Niste autorizirani ======
+
+Nemate autorizaciju.
+
+Niste li se možda zaboravili prijaviti u aplikaciju?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt
new file mode 100644
index 000000000..ce6c8c4cb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt
@@ -0,0 +1,3 @@
+====== Razlike ======
+
+Slijede sve razlike između odabrane i trenutne verzije dokumenta
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt
new file mode 100644
index 000000000..8cd57d524
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt
@@ -0,0 +1 @@
+Nakon Å¡to ste napravili sve potrebne promjene - odaberite ''Snimi'' za snimanje dokumenta.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt
new file mode 100644
index 000000000..911855f47
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt
@@ -0,0 +1,2 @@
+**UÄitali ste stariju verziju dokumenta!** Ukoliko je snimite - biti će kreirana nova verzija dokumenta.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt
new file mode 100644
index 000000000..9c30a805c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt
@@ -0,0 +1 @@
+====== Indeks ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php
new file mode 100644
index 000000000..05a20c25e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php
@@ -0,0 +1,200 @@
+<?php
+/**
+ * croatian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Tomo Krajina <aaa@puzz.info>
+ * @author Branko Rihtman <theney@gmail.com>
+ * @author Dražen Odobašić <dodobasic@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Izmijeni dokument';
+$lang['btn_source'] = 'Prikaži kod dokumenta';
+$lang['btn_show'] = 'Prikaži dokument';
+$lang['btn_create'] = 'Novi dokument';
+$lang['btn_search'] = 'Pretraži';
+$lang['btn_save'] = 'Snimi';
+$lang['btn_preview'] = 'Prikaži';
+$lang['btn_top'] = 'Na vrh';
+$lang['btn_newer'] = '<< noviji';
+$lang['btn_older'] = 'stariji >>';
+$lang['btn_revs'] = 'Stare inaÄice';
+$lang['btn_recent'] = 'Nedavne izmjene';
+$lang['btn_upload'] = 'Postavi';
+$lang['btn_cancel'] = 'Odustani';
+$lang['btn_index'] = 'Indeks';
+$lang['btn_secedit'] = 'Izmjeni';
+$lang['btn_login'] = 'Prijavi se';
+$lang['btn_logout'] = 'Odjavi se';
+$lang['btn_admin'] = 'Administriranje';
+$lang['btn_update'] = 'Ažuriraj';
+$lang['btn_delete'] = 'Obriši';
+$lang['btn_back'] = 'Povratak';
+$lang['btn_backlink'] = 'Povratni linkovi';
+$lang['btn_backtomedia'] = 'Povratak na Mediafile izbornik';
+$lang['btn_subscribe'] = 'Pretplati se na promjene dokumenta';
+$lang['btn_unsubscribe'] = 'Odjavi pretplatu o promjenama dokumenta';
+$lang['btn_subscribens'] = 'Pretplati se na promjene imenskog prostora';
+$lang['btn_unsubscribens'] = 'Odjavi pretplatu o promjenama imenskog prostora';
+$lang['btn_profile'] = 'Ažuriraj profil';
+$lang['btn_reset'] = 'Poništi promjene';
+$lang['btn_resendpwd'] = 'Pošalji novu lozinku';
+$lang['btn_draft'] = 'Uredi nacrt dokumenta';
+$lang['btn_recover'] = 'Vrati prijašnji nacrt dokumenta';
+$lang['btn_draftdel'] = 'Obriši nacrt dokumenta';
+$lang['loggedinas'] = 'Prijavljen kao';
+$lang['user'] = 'KorisniÄko ime';
+$lang['pass'] = 'Lozinka';
+$lang['newpass'] = 'Nova lozinka';
+$lang['oldpass'] = 'Potvrdi trenutnu lozinku';
+$lang['passchk'] = 'Ponoviti';
+$lang['remember'] = 'Zapamti me';
+$lang['fullname'] = 'Ime i prezime';
+$lang['email'] = 'Email';
+$lang['register'] = 'Registracija';
+$lang['profile'] = 'KorisniÄki profil';
+$lang['badlogin'] = 'Ne ispravno korisniÄko ime ili lozinka.';
+$lang['minoredit'] = 'Manje izmjene';
+$lang['draftdate'] = 'Nacrt dokumenta je automatski spremljen u ';
+$lang['nosecedit'] = 'Stranica se u meÄ‘uvremenu promijenila. Informacija o odjeljku je ostarila pa je uÄitana kompletna stranica.';
+$lang['regmissing'] = 'Morate popuniti sva polja.';
+$lang['reguexists'] = 'Korisnik s tim korisniÄkim imenom već postoji.';
+$lang['regsuccess'] = 'Korisnik je uspješno stvoren i poslana je lozinka emailom.';
+$lang['regsuccess2'] = 'Korisnik je uspješno stvoren.';
+$lang['regmailfail'] = 'Pojavila se greška prilikom slanja lozinke emailom. Kontaktirajte administratora!';
+$lang['regbadmail'] = 'Email adresa nije ispravna, ukoliko ovo smatrate greškom, kontaktirajte administratora.';
+$lang['regbadpass'] = 'Unesene lozinke nisu jednake, pokušajte ponovno.';
+$lang['regpwmail'] = 'Vaša DokuWiki lozinka';
+$lang['reghere'] = 'JoÅ¡ uvijek nemate korisniÄki raÄun? Registrirajte se.';
+$lang['profna'] = 'Ovaj wiki ne dopuÅ¡ta izmjene korisniÄkog profila.';
+$lang['profnochange'] = 'Nema izmjena.';
+$lang['profnoempty'] = 'Prazno korisniÄko ime ili email nisu dopuÅ¡teni.';
+$lang['profchanged'] = 'KorisniÄki profil je uspjeÅ¡no izmijenjen.';
+$lang['pwdforget'] = 'Izgubili ste lozinku? Zatražite novu';
+$lang['resendna'] = 'Ovaj wiki ne podržava ponovno slanje lozinke emailom.';
+$lang['resendpwd'] = 'Poslati novu lozinku za';
+$lang['resendpwdmissing'] = 'Ispunite sva polja.';
+$lang['resendpwdnouser'] = 'Nije moguće pronaći korisnika.';
+$lang['resendpwdbadauth'] = 'Neispravan autorizacijski kod. Provjerite da li ste koristili potpun potvrdni link.';
+$lang['resendpwdconfirm'] = 'Potvrdni link je poslan emailom.';
+$lang['resendpwdsuccess'] = 'Nova lozinka je poslana emailom.';
+$lang['license'] = 'Osim na mjestima gdje je naznaÄeno drugaÄije, sadržaj ovog wikija je licenciran sljedećom licencom:';
+$lang['licenseok'] = 'Pažnja: promjenom ovog dokumenta pristajete licencirati sadržaj sljedećom licencom: ';
+$lang['txt_upload'] = 'Odaberite datoteku za postavljanje';
+$lang['txt_filename'] = 'Postaviti kao (nije obavezno)';
+$lang['txt_overwrt'] = 'Prepiši postojeću datoteku';
+$lang['lockedby'] = 'ZakljuÄao';
+$lang['lockexpire'] = 'ZakljuÄano do';
+$lang['willexpire'] = 'Dokument kojeg mijenjate će biti zakljuÄan joÅ¡ 1 minutu.\n Ukoliko želite i dalje raditi izmjene na dokumentu - kliknite na "Pregled".';
+$lang['notsavedyet'] = 'Vaše izmjene će se izgubiti.\nŽelite li nastaviti?';
+$lang['rssfailed'] = 'Došlo je do greške prilikom preuzimanja feed-a: ';
+$lang['nothingfound'] = 'Traženi dokumetni nisu pronađeni.';
+$lang['mediaselect'] = 'Mediafile datoteke';
+$lang['fileupload'] = 'Mediafile postavljanje';
+$lang['uploadsucc'] = 'Postavljanje uspješno';
+$lang['uploadfail'] = 'Neuspješno postavljanje. Možda dozvole na poslužitelju nisu ispravne?';
+$lang['uploadwrong'] = 'Postavljanje nije dopušteno. Nastavak datoteke je zabranjen!';
+$lang['uploadexist'] = 'Datoteka već postoji.';
+$lang['uploadbadcontent'] = 'Postavljeni sadržaj ne odgovara ekstenziji %s datoteke.';
+$lang['uploadspam'] = 'Postavljanje je blokirano spam crnom listom.';
+$lang['uploadxss'] = 'Postavljanje je blokirano zbog mogućeg zlonamjernog sadržaja.';
+$lang['uploadsize'] = 'Postavljena datoteka je prevelika (max. %s)';
+$lang['deletesucc'] = 'Datoteka "%s" je obrisana.';
+$lang['deletefail'] = '"%s" se ne može obrisati - provjerite dozvole na poslužitelju.';
+$lang['mediainuse'] = 'Datoteka "%s" nije obrisana - još uvijek se koristi.';
+$lang['namespaces'] = 'Imenski prostori';
+$lang['mediafiles'] = 'Datoteke u';
+$lang['js']['keepopen'] = 'Ostavi prozor otvoren nakon izbora';
+$lang['js']['hidedetails'] = 'Sakrij detalje';
+$lang['js']['nosmblinks'] = 'Linkovi na dijeljene Windows mape rade samo s Internet Explorerom. Link je još uvijek moguće kopirati i zalijepiti.';
+$lang['js']['mu_btn'] = 'Postavi više datoteka odjednom';
+$lang['mediausage'] = 'Koristi sljedeću sintaksu za referenciranje ove datoteke:';
+$lang['mediaview'] = 'Pregledaj originalnu datoteku';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Postavi datoteku u odabrani imenski prostor. Podimenski prostori se stvaraju dodavanjem istih kao prefiks naziva datoteke u "Postavi kao" polju, tako da se odvoje dvotoÄkama.';
+$lang['mediaextchange'] = 'Ekstenzija datoteke promijenjena iz .%s u .%s!';
+$lang['reference'] = 'Reference za';
+$lang['ref_inuse'] = 'Datoteka se ne može obrisati jer se još uvijek koristi u sljedećim dokumentima:';
+$lang['ref_hidden'] = 'Neke reference se nalaze na dokumentima koje nemate dozvolu Äitati';
+$lang['hits'] = 'Pronađeno';
+$lang['quickhits'] = 'Pronađeno po nazivima dokumenata';
+$lang['toc'] = 'Sadržaj';
+$lang['current'] = 'trenutno';
+$lang['yours'] = 'VaÅ¡a inaÄica';
+$lang['diff'] = 'Prikaži razlike u odnosu na trenutnu inaÄicu';
+$lang['diff2'] = 'Pokaži razlike izmeÄ‘u odabranih inaÄica';
+$lang['line'] = 'Redak';
+$lang['breadcrumb'] = 'Putanja';
+$lang['youarehere'] = 'Vi ste ovdje';
+$lang['lastmod'] = 'Zadnja izmjena';
+$lang['by'] = 'od';
+$lang['deleted'] = 'obrisano';
+$lang['created'] = 'stvoreno';
+$lang['restored'] = 'vraćena prijaÅ¡nja inaÄica';
+$lang['external_edit'] = 'vanjsko uređivanje';
+$lang['summary'] = 'Sažetak izmjena';
+$lang['noflash'] = 'Za prikazivanje ovog sadržaja potreban je <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
+$lang['mail_newpage'] = 'stranica dodana:';
+$lang['mail_changed'] = 'stranica izmjenjena:';
+$lang['mail_new_user'] = 'novi korisnik:';
+$lang['mail_upload'] = 'datoteka postavljena:';
+$lang['qb_bold'] = 'Podebljani tekst';
+$lang['qb_italic'] = 'Ukošeni tekst';
+$lang['qb_underl'] = 'Podcrtani tekst';
+$lang['qb_code'] = 'Kod';
+$lang['qb_strike'] = 'Precrtani tekst';
+$lang['qb_h1'] = 'Naslov - razina 1';
+$lang['qb_h2'] = 'Naslov - razina 2';
+$lang['qb_h3'] = 'Naslov - razina 3';
+$lang['qb_h4'] = 'Naslov - razina 4';
+$lang['qb_h5'] = 'Naslov - razina 5';
+$lang['qb_h'] = 'Naslov';
+$lang['qb_hs'] = 'Odaberite naslov';
+$lang['qb_hplus'] = 'Naslov više razine';
+$lang['qb_hminus'] = 'Naslov niže razine';
+$lang['qb_hequal'] = 'Naslov iste razine';
+$lang['qb_link'] = 'Interni link';
+$lang['qb_extlink'] = 'Vanjski link';
+$lang['qb_hr'] = 'Vodoravna crta';
+$lang['qb_ol'] = 'Pobrojana lista';
+$lang['qb_ul'] = 'Lista';
+$lang['qb_media'] = 'Dodaj slike i ostale datoteke';
+$lang['qb_sig'] = 'Potpis';
+$lang['qb_smileys'] = 'Smiješkići';
+$lang['qb_chars'] = 'Posebni znakovi';
+$lang['js']['del_confirm'] = 'Zbilja želite obrisati odabrane stavke?';
+$lang['admin_register'] = 'Dodaj novog korisnika';
+$lang['metaedit'] = 'Uredi metapodatake';
+$lang['metasaveerr'] = 'Neuspješno zapisivanje metapodataka';
+$lang['metasaveok'] = 'Spremljeni metapdaci';
+$lang['img_backto'] = 'Povratak na';
+$lang['img_title'] = 'Naziv';
+$lang['img_caption'] = 'Naslov';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Ime datoteke';
+$lang['img_fsize'] = 'VeliÄina';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Autorsko pravo';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'KljuÄne rijeÄi';
+$lang['subscribe_success'] = 'Dodan %s na listu preplata za %s';
+$lang['subscribe_error'] = 'Greška prilikom dodavanju %s na listu pretplata za %s';
+$lang['subscribe_noaddress'] = 'Nije postavljena email adresa za vaÅ¡ korisniÄki profil, nije Vas moguće dodati na listu pretplata';
+$lang['unsubscribe_success'] = 'Izbrisan %s s liste pretplata za %s';
+$lang['unsubscribe_error'] = 'Greška prilikom brisanja %s s liste pretplatnika za %s';
+$lang['authmodfailed'] = 'GreÅ¡ka u konfiguraciji korisniÄke autentifikacije. Molimo Vas da kontaktirate administratora.';
+$lang['authtempfail'] = 'Autentifikacija korisnika je privremeno nedostupna. Molimo Vas da kontaktirate administratora.';
+$lang['i_chooselang'] = 'Izaberite vaš jezik';
+$lang['i_installer'] = 'DokuWiki instalacija';
+$lang['i_wikiname'] = 'Naziv Wikija';
+$lang['i_enableacl'] = 'Omogući ACL (preporuÄeno)';
+$lang['i_superuser'] = 'Superkorisnik';
+$lang['i_problems'] = 'Instalacija je pronaÅ¡la probleme koji su naznaÄeni ispod. Nije moguće nastaviti dok se ti problemi ne rijeÅ¡e.';
+$lang['i_modified'] = 'Zbog sigurnosnih razlog, ova skripta ce raditi samo sa novim i nepromijenjenim instalacijama dokuWikija. Preporucujemo da ili re-ekstraktirate fajlove iz downloadovanog paketa ili konsultujete pune a href="http://dokuwiki.org/install">Instrukcije za instalaciju Dokuwikija</a>';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt
new file mode 100644
index 000000000..ff081aad8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt
@@ -0,0 +1,3 @@
+====== Dokument zakljuÄan ======
+
+Mijenjanje ovog dokumenta je trenutno onemogućeno jer je otvoren od strane nekog drugog korisnika. Morate priÄekati da on zavrÅ¡i sa svojim izmjenama.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt
new file mode 100644
index 000000000..216af130d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt
@@ -0,0 +1,3 @@
+====== Prijava ======
+
+UpiÅ¡ite korisniÄko ime i lozinku da biste se prijavili.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt
new file mode 100644
index 000000000..911f8eade
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt
@@ -0,0 +1,16 @@
+Dokument na Vašem wiki-ju je promijenjen ili dodan:
+
+Datum : @DATE@
+Preglednik : @BROWSER@
+IP-Adresa : @IPADDRESS@
+Host : @HOSTNAME@
+Prijašnja verzija : @OLDPAGE@
+Nova verzija : @NEWPAGE@
+Opis izmjene : @SUMMARY@
+Korisnik : @USER@
+
+@DIFF@
+
+
+--
+Ovaj email je poslan na: @DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt
new file mode 100644
index 000000000..39346580f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt
@@ -0,0 +1,3 @@
+====== Dokument ne postoji ======
+
+Traženi dokument (još) ne postoji. Ukoliko ga želite otvoriti kliknite na ''Novi dokument''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt
new file mode 100644
index 000000000..231fb5edf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt
@@ -0,0 +1,3 @@
+====== Nepostojeća verzija ======
+
+Tražena verzija dokumenta ne postoji.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt
new file mode 100644
index 000000000..89ae86a71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt
@@ -0,0 +1,3 @@
+====== Pregled ======
+
+Ovo je pregled kako će izgledati Vaš dokument nakon što se snimi.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt
new file mode 100644
index 000000000..d036c0a7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt
@@ -0,0 +1 @@
+Nije dopušteno mijenjati sadržaj ove stranice.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt
new file mode 100644
index 000000000..4145ca1c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt
@@ -0,0 +1,3 @@
+====== Nedavne izmjene ======
+
+Stranice koje su nedavno promijenjene.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt
new file mode 100644
index 000000000..32a5489fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt
@@ -0,0 +1,3 @@
+====== Prijava novog korisnika ======
+
+Ispunite potrebne podatke da biste dobili korisniÄki raÄun na wikiju. Posebno obratite pažnju da ste unijeli valjani email.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt
new file mode 100644
index 000000000..fe2c72bf3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Slanje nove lozinke ======
+
+Ispunite potrebne podatke da biste dobili novu lozinku za VaÅ¡ korisniÄki raÄun.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt
new file mode 100644
index 000000000..d224a56f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt
@@ -0,0 +1,3 @@
+====== Stare verzije ======
+
+Slijedi spisak starih verzija za traženi dokument.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt
new file mode 100644
index 000000000..91d9f9c0a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt
@@ -0,0 +1 @@
+====== Rezultati pretraživanja ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt
new file mode 100644
index 000000000..aba2c0db0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt
@@ -0,0 +1,2 @@
+**Ovo je stara verzija dokumenta!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt
new file mode 100644
index 000000000..bc6eb48ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt
@@ -0,0 +1,29 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt
new file mode 100644
index 000000000..c55b4a288
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt
@@ -0,0 +1,16 @@
+Pozdrav!
+
+Stranica @PAGE@ na @TITLE@ je promijenjena.
+Slijede promjene:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Ukoliko se želite odjaviti s ove pretplate - prijavite se na:
+@DOKUWIKIURL@ zatim odite na
+@NEWPAGE@
+i odaberite 'Odjava'.
+
+--
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt
new file mode 100644
index 000000000..8eab906d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Izmjena korisniÄkog profila ======
+
+Ispunite samo polja koja želite mijenjati. Ne može se mijenjati korisniÄko ime.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt
new file mode 100644
index 000000000..7faf03c19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM blokiranje ======
+
+VaÅ¡e izmjene **nisu** snimljene jer sadrže jednu ili viÅ¡e blokiranih/zabranjenih rijeÄi. Ukoliko mislite da je to greÅ¡ka - molimo Vas da kontaktirate administratora.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt
new file mode 100644
index 000000000..03d29243c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt
@@ -0,0 +1,3 @@
+===== Adminisztrálás =====
+
+Itt találod a DokuWiki adminisztrálási lehetőségeit.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt
new file mode 100644
index 000000000..89fe3738a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt
@@ -0,0 +1 @@
+===== További modulok ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt
new file mode 100644
index 000000000..d457ab769
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt
@@ -0,0 +1,5 @@
+====== Hivatkozások ======
+
+Ez azoknak az oldalaknak a listája, amelyek erre az oldalra "visszamutatnak" (hivatkoznak).
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt
new file mode 100644
index 000000000..b823465b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt
@@ -0,0 +1,7 @@
+====== Újabb változat létezik ======
+
+Az általad szerkesztett dokumentumnak egy újabb változata létezik. Ez akkor történik, ha egy másik felhasználó megváltoztatta a dokumentumot, amíg szerkesztetted.
+
+Nézd át gondosan a lenti eltéréseket, aztán dönts arról, melyik változatot tartod meg. Ha ''Mentés'' gombot választod, akkor a Te változatod kerül mentésre. Nyomj ''Mégsem'' gombot a jelenlegi változat megtartásához.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt
new file mode 100644
index 000000000..0b06724df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt
@@ -0,0 +1,4 @@
+====== Hozzáférés megtagadva ======
+
+Sajnáljuk, nincs jogod a folytatáshoz. Esetleg elfelejtettél bejelentkezni?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt
new file mode 100644
index 000000000..6a09cdea2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt
@@ -0,0 +1,4 @@
+====== Különbségek ======
+
+A kiválasztott változat és az aktuális verzió közötti különbséget mutatjuk.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt
new file mode 100644
index 000000000..4d12e2e0c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt
@@ -0,0 +1,5 @@
+===== Piszkozatot találtunk =====
+
+Az oldal utolsó szerkesztését nem fejezted be rendesen. A DokuWiki elmentette piszkozatként, így most folytathatod a szerkesztést. Lent látható, amit az utolsó szerkesztésből elmentettünk.
+
+Válassz a //helyreállítás// vagy a //törlés// opciók közül a piszkozat sorsát illetően. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt
new file mode 100644
index 000000000..898387cf2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt
@@ -0,0 +1 @@
+Szerkeszd az oldalt majd üsd le a ''Mentés'' gombot. Lásd a [[wiki:syntax|nyelvtan]] oldalt a formázási lehetőségekért. Kérünk, hogy csak akkor szerkeszd az oldalt ha **jobbítani** tudod. Ha ki akarsz próbálni dolgokat akkor az első lépéseid a [[playground:playground|játszótéren]] (playground) tedd.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt
new file mode 100644
index 000000000..e17662e60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt
@@ -0,0 +1,2 @@
+**Egy korábbi változatot töltöttél be!** Ha elmented, akkor egy újabb aktuális verzió jön létre ezzel a tartalommal.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt
new file mode 100644
index 000000000..ebf15148d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt
@@ -0,0 +1,4 @@
+====== ÃttekintÅ‘ (index) ======
+
+Az összes elérhető oldal áttekintése [[doku>namespaces|névterek]] szerint rendezve.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html
new file mode 100644
index 000000000..1676e9364
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html
@@ -0,0 +1,26 @@
+<p>Ez az oldal segít a <a href="http://dokuwiki.org">DokuWiki</a> kezdeti
+beállításában és a konfigurálásban. További információ
+<a href="http://dokuwiki.org/installer">ezen az oldalon</a>
+található.</p>
+
+<p>A DokuWiki hagyományos fájlokat használ a wiki oldalak és a hozzájuk
+kapcsolódó információk (pl. képek, keresési indexek, korábbi változatok stb.)
+tárolásához. Emiatt a sikeres működés érdekében a DokuWikinek írási joggal
+<strong>kell</strong> rendelkeznie azokon a könyvtárakon, ahová ezek a
+fájlok kerülnek. Ez a Beállító Varázsló nem képes beállítani a könyvtárakhoz
+a szükséges jogosultságokat, azokat közvetlenül parancssorból kell megtenni,
+illetve tárhelyszolgáltatás igénybevétele esetén FTP kliens segítségével,
+vagy a tárhelyszolgáltató által rendelkezésre bocsátott beállítóeszköz
+(pl. cPanel) segítségével.</p>
+
+<p>A Beállító Varázsló felkészíti ezt a DokuWikit a hozzáférési listák
+(<acronym title="access control list">ACL</acronym>-ek) használatára. Ãgy
+a Wiki-gazda felhasználóval hozzáférünk az admin menühöz, mellyel
+bővítményeket telepíthetünk, felhasználókat és hozzáférési jogokat
+kezelhetünk, valamint változtathatunk a konfigurációs beállításokon.
+Ez tulajdonképpen nem szükséges a DokuWiki működéséhez, de megkönnyíti
+az adminisztrációt.</p>
+
+<p>Szakértők illetve speciális beállítást igénylő felhasználók további információkat
+találnak a következő oldalakon <a href="http://dokuwiki.org/install">telepítéssel</a>
+és <a href="http://dokuwiki.org/config">konfigurálási lehetőségekkel</a> kapcsolatban.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php
new file mode 100644
index 000000000..b9218f897
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php
@@ -0,0 +1,249 @@
+<?php
+/**
+ * Hungarian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Ziegler Gábor <gziegler@freemail.hu>
+ * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
+ * @author Siaynoq Siaynoq <siaynoqmage@gmail.com>
+ * @author Siaynoq Mage <siaynoqmage@gmail.com>
+ * @author schilling.janos@gmail.com
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Oldal szerkesztése';
+$lang['btn_source'] = 'Oldalforrás megtekintése';
+$lang['btn_show'] = 'Oldal megtekintése';
+$lang['btn_create'] = 'Oldal létrehozása';
+$lang['btn_search'] = 'Keresés';
+$lang['btn_save'] = 'Mentés';
+$lang['btn_preview'] = 'Előnézet';
+$lang['btn_top'] = 'Vissza a tetejére';
+$lang['btn_newer'] = '<< Újabb változat';
+$lang['btn_older'] = 'Régebbi változat >>';
+$lang['btn_revs'] = 'Korábbi változatok';
+$lang['btn_recent'] = 'Legfrissebb változások';
+$lang['btn_upload'] = 'Feltöltés';
+$lang['btn_cancel'] = 'Mégsem';
+$lang['btn_index'] = 'ÃttekintÅ‘';
+$lang['btn_secedit'] = 'Szerkesztés';
+$lang['btn_login'] = 'Bejelentkezés';
+$lang['btn_logout'] = 'Kijelentkezés';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Frissítés';
+$lang['btn_delete'] = 'Törlés';
+$lang['btn_back'] = 'Vissza';
+$lang['btn_backlink'] = 'Hivatkozások';
+$lang['btn_backtomedia'] = 'Vissza a médiafájlok kezeléséhez';
+$lang['btn_subscribe'] = 'Oldalváltozások-hírlevél feliratkozás';
+$lang['btn_unsubscribe'] = 'Oldalváltozások-hírlevél leiratkozás';
+$lang['btn_subscribens'] = 'Névtér-változás hírlevél feliratkozás';
+$lang['btn_unsubscribens'] = 'Névtér-változás hírlevél leiratkozás';
+$lang['btn_profile'] = 'Személyes beállítások';
+$lang['btn_reset'] = 'Alaphelyzet';
+$lang['btn_resendpwd'] = 'Új jelszó küldése';
+$lang['btn_draft'] = 'Piszkozat szerkesztése';
+$lang['btn_recover'] = 'Piszkozat folytatása';
+$lang['btn_draftdel'] = 'Piszkozat törlése';
+$lang['btn_revert'] = 'Helyreállítás';
+$lang['loggedinas'] = 'Belépett felhasználó: ';
+$lang['user'] = 'Azonosító';
+$lang['pass'] = 'Jelszó';
+$lang['newpass'] = 'Új jelszó';
+$lang['oldpass'] = 'Régi jelszó';
+$lang['passchk'] = 'még egyszer';
+$lang['remember'] = 'Emlékezz rám';
+$lang['fullname'] = 'Teljes név';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Regisztráció';
+$lang['profile'] = 'Személyes beállítások';
+$lang['badlogin'] = 'Sajnáljuk, az azonosító, vagy a jelszó nem jó.';
+$lang['minoredit'] = 'Apróbb változások';
+$lang['draftdate'] = 'Piszkozat elmentve:';
+$lang['nosecedit'] = 'Időközben megváltozott az oldal, emiatt a szakasz nem friss. Töltse újra az egész oldalt!';
+$lang['regmissing'] = 'Sajnáljuk, az összes mezőt ki kell töltened.';
+$lang['reguexists'] = 'Sajnáljuk, ilyen azonosítójú felhasználónk már van.';
+$lang['regsuccess'] = 'A felhasználói azonosítót létrehoztuk. A jelszót postáztuk.';
+$lang['regsuccess2'] = 'A felhasználói azonosítót létrehoztuk.';
+$lang['regmailfail'] = 'Úgy tűnik hiba történt a jelszó postázása során. Kérjük lépj kapcsolatba a Wiki-gazdával!!';
+$lang['regbadmail'] = 'A megadott e-mail cím érvénytelennek tűnik. Ha úgy gondolod ez hiba, lépj kapcsolatba Wiki-gazdával!';
+$lang['regbadpass'] = 'A két megadott jelszó nem egyezik, próbáld újra!';
+$lang['regpwmail'] = 'A DokuWiki jelszavad';
+$lang['reghere'] = 'Még nincs azonosítód? Itt kérhetsz';
+$lang['profna'] = 'Ez a wiki nem támogatja a személyes beállítások módosítását.';
+$lang['profnochange'] = 'Nem történt változás.';
+$lang['profnoempty'] = 'A név és e-mail mező nem maradhat üresen!';
+$lang['profchanged'] = 'A személyes beállítások változtatása megtörtént.';
+$lang['pwdforget'] = 'Elfelejtetted a jelszavad? Itt kérhetsz újat';
+$lang['resendna'] = 'Ez a wiki nem támogatja a jelszó újraküldést.';
+$lang['resendpwd'] = 'Új jelszó kiküldése ennek a felhasználónak';
+$lang['resendpwdmissing'] = 'Sajnáljuk, az összes mezőt ki kell töltened.';
+$lang['resendpwdnouser'] = 'Sajnáljuk, ilyen azonosítójú felhasználónk nem létezik.';
+$lang['resendpwdbadauth'] = 'Sajnáljuk, ez a megerősítő kód nem helyes. Biztos, hogy a teljes megerősítés linket beírtad pontosan?';
+$lang['resendpwdconfirm'] = 'A megerősítés linket e-mailben elküldtük.';
+$lang['resendpwdsuccess'] = 'Az új jelszavadat elküldtük e-mailben.';
+$lang['license'] = 'Hacsak máshol nincs egyéb rendelkezés, ezen wiki tartalma a következő licenc alatt érhető el:';
+$lang['licenseok'] = 'Megjegyzés: az oldal szerkesztésével elfogadja, hogy a tartalom a következő licenc alatt lesz elérhető:';
+$lang['searchmedia'] = 'Keresett fájl neve:';
+$lang['searchmedia_in'] = 'Keresés a következőben: %s';
+$lang['txt_upload'] = 'Válaszd ki a feltöltendő fájlt';
+$lang['txt_filename'] = 'feltöltési név (elhagyható)';
+$lang['txt_overwrt'] = 'Létező fájl felülírása';
+$lang['lockedby'] = 'Jelenleg zárolta:';
+$lang['lockexpire'] = 'A zárolás lejár:';
+$lang['willexpire'] = 'Az oldalszerkesztési zárolásod körülbelül egy percen belül lejár.\nAz ütközések elkerülése végett használd az előnézet gombot a zárolási időzítés frissítéséhez.';
+$lang['notsavedyet'] = 'Elmentetlen változások vannak, amelyek el fognak veszni.\nTényleg ezt akarod?';
+$lang['rssfailed'] = 'Hiba történt ennek a betöltésekor: ';
+$lang['nothingfound'] = 'Semmit sem találtam.';
+$lang['mediaselect'] = 'Médiafájl kiválasztása';
+$lang['fileupload'] = 'Médiafájl feltöltése';
+$lang['uploadsucc'] = 'A feltöltés sikerült';
+$lang['uploadfail'] = 'A feltöltés nem sikerült. Talán rosszak a jogosultságok?';
+$lang['uploadwrong'] = 'A feltöltés megtagadva. Ez a fájl kiterjesztés tiltott.';
+$lang['uploadexist'] = 'A fájl már létezik, nem történt semmi.';
+$lang['uploadbadcontent'] = 'A feltöltött tartalom nem egyezik a %s fájl kiterjesztéssel.';
+$lang['uploadspam'] = 'A feltöltést visszautasítottuk spam-gyanú miatt.';
+$lang['uploadxss'] = 'A feltöltést visszautasítottuk, mert lehetséges, hogy kártékony kódot tartalmaz.';
+$lang['uploadsize'] = 'A feltöltött fájl túl nagy. (max. %s)';
+$lang['deletesucc'] = 'A "%s" fájlt töröltük.';
+$lang['deletefail'] = 'A "%s" fájl nem törölhető. - Ellenőrizd a jogosultságokat!';
+$lang['mediainuse'] = 'A "%s" fájl nem törlődött - még használat alatt van.';
+$lang['namespaces'] = 'Névtér';
+$lang['mediafiles'] = 'Elérhető fájlok itt:';
+$lang['js']['searchmedia'] = 'Fájlok keresése';
+$lang['js']['keepopen'] = 'Tartsd nyitva ezt az ablakot a kijelöléshez!';
+$lang['js']['hidedetails'] = 'Részletek elrejtése';
+$lang['js']['nosmblinks'] = 'A Windows megosztott könyvtárak kereszthivatkozása csak Microsoft Internet Explorerben működik közvetlenül.
+A hivatkozást másolni és beszúrni ettől fügetlenül mndig tudod.';
+$lang['js']['linkwiz'] = 'Hivatkozás varázsló';
+$lang['js']['linkto'] = 'Hivatkozás erre:';
+$lang['js']['del_confirm'] = 'Valóban törölni akarod a kiválasztott elem(ek)et?';
+$lang['js']['mu_btn'] = 'Több fájl feltöltése egyszerre';
+$lang['mediausage'] = 'A következő formában hivatkozhatsz erre az állományra:';
+$lang['mediaview'] = 'Eredeti állomány megtekintése';
+$lang['mediaroot'] = 'kiindulási hely';
+$lang['mediaupload'] = 'Itt tölthetsz fel állományt az aktuális névtérbe. Al-névtér létrehozásához a "Feltöltési név" mezőben kell kettősponttal elválasztva megadnod azt.';
+$lang['mediaextchange'] = 'Az állomány kiterjesztése erről: .%s erre: .%s változott!';
+$lang['reference'] = 'Hivatkozások';
+$lang['ref_inuse'] = 'A fájl nem törölhető, mert a következő oldalakon használják:';
+$lang['ref_hidden'] = 'Van néhány hivatkozás az oldalakon, amelyekhez nincs olvasási jogosultságod';
+$lang['hits'] = 'Találatok';
+$lang['quickhits'] = 'Illeszkedő oldalnevek';
+$lang['toc'] = 'Tartalomjegyzék';
+$lang['current'] = 'aktuális';
+$lang['yours'] = 'A te változatod';
+$lang['diff'] = 'a különbségeket mutatja az aktuális változathoz képest';
+$lang['diff2'] = 'a különbségeket mutatja a kiválasztott változatok között';
+$lang['line'] = 'sorszám';
+$lang['breadcrumb'] = 'Nyomvonal';
+$lang['youarehere'] = 'Itt vagy';
+$lang['lastmod'] = 'Utolsó módosítás';
+$lang['by'] = 'szerkesztette:';
+$lang['deleted'] = 'eltávolítva';
+$lang['created'] = 'létrehozva';
+$lang['restored'] = 'az előző változat helyreállítva';
+$lang['external_edit'] = 'külső szerkesztés';
+$lang['summary'] = 'A változások összefoglalása';
+$lang['noflash'] = 'Ennek a tartalomnak a megtekintéséhez <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> szükséges.';
+$lang['download'] = 'Kódrészlet letöltése';
+$lang['mail_newpage'] = 'új oldal jött létre:';
+$lang['mail_changed'] = 'oldal megváltozott:';
+$lang['mail_new_user'] = 'Új felhasználó:';
+$lang['mail_upload'] = 'állományt töltöttek fel:';
+$lang['qb_bold'] = 'Félkövér szöveg';
+$lang['qb_italic'] = 'Dőlt szöveg';
+$lang['qb_underl'] = 'Aláhúzott szöveg';
+$lang['qb_code'] = 'Forráskód szöveg';
+$lang['qb_strike'] = 'Ãthúzott szöveg';
+$lang['qb_h1'] = '1. szintű címsor';
+$lang['qb_h2'] = '2. szintű címsor';
+$lang['qb_h3'] = '3. szintű címsor';
+$lang['qb_h4'] = '4. szintű címsor';
+$lang['qb_h5'] = '5. szintű címsor';
+$lang['qb_h'] = 'Címsor';
+$lang['qb_hs'] = 'Címsor kiválasztása';
+$lang['qb_hplus'] = 'Nagyobb címsor';
+$lang['qb_hminus'] = 'Kisebb címsor';
+$lang['qb_hequal'] = 'Azonos szintű címsor';
+$lang['qb_link'] = 'Belső hivatkozás';
+$lang['qb_extlink'] = 'Külső hivatkozás';
+$lang['qb_hr'] = 'Vízszintes elválasztó vonal';
+$lang['qb_ol'] = 'Sorszámozott lista elem';
+$lang['qb_ul'] = 'Felsorolás lista elem';
+$lang['qb_media'] = 'Képek és más fájlok hozzáadása';
+$lang['qb_sig'] = 'Aláírás beszúrása';
+$lang['qb_smileys'] = 'Szmájlik';
+$lang['qb_chars'] = 'Speciális karakterek';
+$lang['upperns'] = 'Ugrás a szülő névtérhez';
+$lang['admin_register'] = 'Új felhasználó';
+$lang['metaedit'] = 'Meta-adatok szerkesztése';
+$lang['metasaveerr'] = 'A meta-adatok írása meghiúsult ';
+$lang['metasaveok'] = 'Meta-adatok elmentve';
+$lang['img_backto'] = 'Vissza';
+$lang['img_title'] = 'Cím';
+$lang['img_caption'] = 'Képaláírás';
+$lang['img_date'] = 'Dátum';
+$lang['img_fname'] = 'Fájlnév';
+$lang['img_fsize'] = 'Méret';
+$lang['img_artist'] = 'Készítette';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formátum';
+$lang['img_camera'] = 'Fényképező típusa';
+$lang['img_keywords'] = 'Kulcsszavak';
+$lang['subscribe_success'] = '%s feliratkozott a(z) %s oldal változás-követő hírlevelére';
+$lang['subscribe_error'] = 'Hiba történt, miközben %s feliratkozni próbált a(z) %s oldal változás-követő hírlevelére';
+$lang['subscribe_noaddress'] = 'Nincs beállítva az e-mail címed, így nem tudsz feliratkozni az oldal változás-követő hírlevelére';
+$lang['unsubscribe_success'] = '%s leiratkozott az oldal változás-követő hírleveléről';
+$lang['unsubscribe_error'] = 'Hiba történt, miközben %s leiratkozni próbált az oldal változás-követő hírleveléről';
+$lang['authmodfailed'] = 'Hibás felhasználó-aznosítási módszer van beállítva. Légy szíves értesítsd a Wiki-gazdát!';
+$lang['authtempfail'] = 'A felhasználó azonosítás átmenetileg nem működik. Ha sokáig így lenne, légy szíves értesítsd a Wiki-gazdát!';
+$lang['i_chooselang'] = 'Válassz nyelvet';
+$lang['i_installer'] = 'DokuWiki Beállító Varázsló';
+$lang['i_wikiname'] = 'A Wiki neve';
+$lang['i_enableacl'] = 'Hozzáférési listák engedélyezése (ajánlott)';
+$lang['i_superuser'] = 'Wiki-gazda';
+$lang['i_problems'] = 'A Beállító Varázsló a következő problémák miatt megakadt. Nem tudjuk folytatni, amíg ezek nincsenek elhárítva!';
+$lang['i_modified'] = 'Biztonsági okokból ez a Varázsló csak új és módosítatlan DokuWiki változaton működik.
+Csomagold ki újra a fájlokat a letöltött csomagból, vagy nézd meg a teljes <a href="http://dokuwiki.org/install">Dokuwiki telepítési útmutatót</a>.';
+$lang['i_funcna'] = 'A <code>%s</code> PHP funkció nem elérhető. Esetleg a tárhelyszolgáltató letiltotta biztonsági okok miatt?';
+$lang['i_phpver'] = 'A PHP <code>%s</code> verziója alacsonyabb, mint ami szükséges lenne: <code>%s</code>. Frissítsd a PHP-det újabb verzióra!';
+$lang['i_permfail'] = 'A DokiWiki nem tudja írni a <code>%s</code> könyvtárat. Be kell állítanod ehhez a könyvtárhoz a megfelelő jogosultságokat!';
+$lang['i_confexists'] = '<code>%s</code> már létezik.';
+$lang['i_writeerr'] = 'Nem tudom ezt létrehozni: <code>%s</code>. Ellenőrizd a könyvtár/fájl jogosultságokat, és hozd létre az állományt kézzel.';
+$lang['i_badhash'] = 'A dokuwiki.php nem felismerhető vagy módosított (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - nem helyes vagy üres érték';
+$lang['i_success'] = 'A beállítás sikeresen befejeződött. Most már letörölhető az install.php fájl. Látogasd meg az <a href="doku.php">új DokuWikidet</a>!';
+$lang['i_failure'] = 'Hiba lépett fel a konfigurációs állományok írásakor. Ki kell javítanod kézzel, mielőtt használni kezded az <a href="doku.php">új DokuWikidet</a>.';
+$lang['i_policy'] = 'Kezdeti hozzáférési politika';
+$lang['i_pol0'] = 'Nyitott Wiki (mindenki olvashatja, írhatja, és fájlokat tölthet fel)';
+$lang['i_pol1'] = 'Publikus Wiki (mindenki olvashatja, de csak regisztrált felhasználók írhatják, és tölthetnek fel fájlokat)';
+$lang['i_pol2'] = 'Zárt Wiki (csak regisztrált felhasználók olvashatják, írhatják és tölthetnek fel fájlokat)';
+$lang['i_retry'] = 'Újra';
+$lang['mu_intro'] = 'Itt több fájlt is fel tudsz tölteni egyszerre. Kattints a "Kiválaszt" gombra és add hozzá a listához. Nyomd meg a Feltöltés gombot, amikor elkészültél.';
+$lang['mu_gridname'] = 'Fájlnév';
+$lang['mu_gridsize'] = 'Méret';
+$lang['mu_gridstat'] = 'Ãllapot';
+$lang['mu_namespace'] = 'Névtér';
+$lang['mu_browse'] = 'Kiválaszt';
+$lang['mu_toobig'] = 'túl nagy';
+$lang['mu_ready'] = 'feltöltésre kész';
+$lang['mu_done'] = 'kész';
+$lang['mu_fail'] = 'hibás';
+$lang['mu_authfail'] = 'session lejárt';
+$lang['mu_progress'] = '@PCT@% feltöltve';
+$lang['mu_filetypes'] = 'Megengedett fájltípusok';
+$lang['mu_info'] = 'Fájlok feltöltve.';
+$lang['mu_lasterr'] = 'Utolsó hiba:';
+$lang['recent_global'] = 'Jelenleg csak a <b>%s</b> névtér friss változásai látszanak. Megtekinthetők <a href="%s">a teljes wiki friss változásai</a> is.';
+$lang['years'] = '%d évvel ezelőtt';
+$lang['months'] = '%d hónappal ezelőtt';
+$lang['weeks'] = '%d héttel ezelőtt';
+$lang['days'] = '%d nappal ezelőtt';
+$lang['hours'] = '%d órával ezelőtt';
+$lang['minutes'] = '%d perccel ezelőtt';
+$lang['seconds'] = '%d másodperccel ezelőtt';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt
new file mode 100644
index 000000000..229141674
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt
@@ -0,0 +1,4 @@
+====== Az oldal zárolva ======
+
+Ezt az oldalt épp szerkeszti egy másik felhasználó. Várnod kell, amíg a másik felhasználó befejezi, vagy amíg a zárolási időzítő le nem jár.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt
new file mode 100644
index 000000000..3f7e62e72
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt
@@ -0,0 +1,5 @@
+====== Belépés ======
+
+Nem vagy bejelentkezve! Add meg az azonosítási adataid a belépéshez lentebb! A böngésződben engedélyezned kell a sütik (cookies) fogadását a belépéshez.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt
new file mode 100644
index 000000000..9b0c2921e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt
@@ -0,0 +1,16 @@
+A DokuWikidben egy oldalt létrejött, vagy megváltozott. A részletek:
+
+Dátum: @DATE@
+Böngésző: @BROWSER@
+IP-cím: @IPADDRESS@
+Gép neve: @HOSTNAME@
+Előző változat: @OLDPAGE@
+Új változat: @NEWPAGE@
+Összefoglaló: @SUMMARY@
+Felhasználó: @USER@
+
+@DIFF@
+
+
+--
+Ezt a levelet a @DOKUWIKIURL@ DokuWiki generálta.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt
new file mode 100644
index 000000000..de5a34d8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt
@@ -0,0 +1,3 @@
+====== Ilyen oldal még nem létezik ======
+
+Egy nem létező oldalra tévedtél. Létrehozhatod az ''Oldal létrehozása'' gombra kattintva. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt
new file mode 100644
index 000000000..4dd408459
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt
@@ -0,0 +1,5 @@
+====== Nincs ilyen változat ======
+
+A megadott változat nem létezik. Használd az ''Előző változatok'' nyomógombot az előzmények listájának megtekintéséhez.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt
new file mode 100644
index 000000000..ad7f7d4b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt
@@ -0,0 +1,4 @@
+====== Előnézet ======
+
+Ez a szöveged előnézete, így fog kinézni. Figyelj jól: ez **még nincs elmentve**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt
new file mode 100644
index 000000000..617419ee8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt
@@ -0,0 +1,14 @@
+Szia @FULLNAME@!
+
+Te vagy más valaki kért egy új jelszót a @DOKUWIKIURL@
+címen lévő @TITLE@ wiki felhasználódhoz.
+
+Ha nem kértél ilyet, hagyd figyelmen kívül ezt a levelet.
+
+Ha Te voltál, az új jelszó kérelmed megerősítéséhez a
+következő linkre kattints, vagy másold a böngésződbe:
+
+@CONFIRM@
+
+--
+Ezt a levelet a @DOKUWIKIURL@ címen lévő DokuWiki generálta.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt
new file mode 100644
index 000000000..89ac96338
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt
@@ -0,0 +1,2 @@
+Ez az oldal csak olvasható. Megtekintheted a forrását, de nem változtathatod meg. Ha úgy gondolod, hogy ez helytelen, kérdezd a Wiki-gazdát.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt
new file mode 100644
index 000000000..4e0c1ec06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt
@@ -0,0 +1,5 @@
+====== Legutóbbi változások ======
+
+Az alábbi oldalak változtak legutoljára.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt
new file mode 100644
index 000000000..2745c4d77
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt
@@ -0,0 +1,4 @@
+====== Új felhasználó regisztrálása ======
+
+Töltsd ki az összes alábbi adatot az új Wiki felhasználói azonosítód létrehozásához. Győződj meg róla, hogy **érvényes e-mail címet** adtál meg -- az új jelszavad erre a címre küldjük el. Az azonosítód érvényes [[doku>pagename|oldalnév]] kell legyen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt
new file mode 100644
index 000000000..d45ef0d38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt
@@ -0,0 +1,13 @@
+Egy új felhasználó regisztrált a következő adatokkal:
+
+Felhasználói név: @NEWUSER@
+Teljes név: @NEWNAME@
+E-mail: @NEWEMAIL@
+
+Dátum: @DATE@
+Böngésző: @BROWSER@
+IP-cím : @IPADDRESS@
+Gép neve: @HOSTNAME@
+
+--
+Ezt a levelet @DOKUWIKIURL@ DokuWiki generálta. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt
new file mode 100644
index 000000000..24931a7ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt
@@ -0,0 +1,3 @@
+===== Új jelszó kérése =====
+
+Kérlek add meg a felhasználó neved az új jelszó elküldéséhez. A jelszó cseréjéhez szükséges megerősítő linket a regisztrált e-mail címedre küldjük. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt
new file mode 100644
index 000000000..3537fd653
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt
@@ -0,0 +1,3 @@
+====== Előző változatok ======
+
+Ezek az előző változatai az aktuális dokumentumnak. Egy előző változathoz való visszatéréshez nyomd meg az ''Oldal szerkesztése'' gombot, majd mentsd el.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt
new file mode 100644
index 000000000..b1defed84
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt
@@ -0,0 +1,5 @@
+====== Keresés ======
+
+A keresés eredményét lentebb láthatod. Ha nem találtad meg amit kerestél, akkor létrehozhatsz egy új oldalt a keresésed alapján ''Az oldal szerkesztése'' gombbal.
+
+===== Eredmény(ek) ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt
new file mode 100644
index 000000000..2131b4dc0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt
@@ -0,0 +1,2 @@
+**Ez a dokumentum egy előző változata!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt
new file mode 100644
index 000000000..a8bd35c7d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt
@@ -0,0 +1,39 @@
+# Ez egy szó-lista (soronként egy szóval), amelyeket az index készítésekor nem veszünk figyelembe.
+# Ha szerkeszted ezt a fájlt, győződj meg arról, hogy UNIX sorvég-jeleket használj! (csak NL karakter)
+# Nincs szükség 3 karakternél rövidebb szavak felsorolására, ezeket egyébként sem vesszük figyelembe.
+# Ez a lista a http://www.ranks.nl/stopwords/ oldalon szereplő alapján készült
+a
+az
+egy
+be
+ki
+le
+fel
+meg
+el
+át
+rá
+ide
+oda
+szét
+össze
+vissza
+de
+hát
+és
+vagy
+hogy
+van
+lesz
+volt
+csak
+nem
+igen
+mint
+én
+te
+Å‘
+mi
+ti
+Å‘k
+ön
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt
new file mode 100644
index 000000000..a5e8c96d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt
@@ -0,0 +1,18 @@
+Szia!
+
+A(z) @PAGE@ oldal a(z) @TITLE@ wikiben megváltozott.
+Itt vannak a változások:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Ha le szeretnél iratkozni ennek az oldalnak a változás-követéséről,
+lépj be a wikibe ezen a címen:
+@DOKUWIKIURL@, majd keresd meg a(z)
+@NEWPAGE@ oldalt
+és válaszd a 'Oldalváltozások-hírlevél leiratkozás' gombot.
+
+--
+Ezt a levelet a @DOKUWIKIURL@ címen lévő DokuWiki alkalmazás generálta.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt
new file mode 100644
index 000000000..50df15384
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt
@@ -0,0 +1,3 @@
+===== Felhasználói adatok megváltoztatása =====
+
+Csak azt a mezőt kell kitöltened, amit változtatni szeretnél. A felhasználói nevet nem lehet megváltoztatni.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt
new file mode 100644
index 000000000..c772ab220
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt
@@ -0,0 +1,13 @@
+Fájlfeltöltés történt a DokuWikidben. Részletek:
+
+Ãllomány: @MEDIA@
+Dátum: @DATE@
+Böngésző: @BROWSER@
+IP-cím: @IPADDRESS@
+Gépnév: @HOSTNAME@
+Méret: @SIZE@
+MIME-típus: @MIME@
+Felhasználó: @USER@
+
+--
+Ezt a levelet @DOKUWIKIURL@ DokuWiki generálta. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt
new file mode 100644
index 000000000..2fe2efa9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt
@@ -0,0 +1,6 @@
+====== SPAM szűrés ======
+
+A változtatásaid **nem** mentettük, mert egy vagy több tiltott szót tartalmaz. Ha kéretlen reklám anyagot ("SPAM") próbáltál erre a Wikire rakni, akkor szégyelld magad.
+
+Ha azt gondolod, hogy valami hibáról, vagy félreértésről van szó, akkor lépj kapcsolatba a Wiki-gazdával.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php
new file mode 100644
index 000000000..2fc631373
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * idni language file
+ *
+ * @author Harefa <fidelis@harefa.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Haogö nga\'örö da\'a';
+$lang['btn_source'] = 'Oroma\'ö nga\'örö sindruhu';
+$lang['btn_show'] = 'Foroma\'ö nga\'örö';
+$lang['btn_create'] = 'Fazökhi nga\'öro';
+$lang['btn_search'] = 'Alui';
+$lang['btn_save'] = 'Irö\'ö';
+$lang['btn_preview'] = 'Foroma\'ö zikhala';
+$lang['btn_top'] = 'Angawuli ba mböröta';
+$lang['btn_newer'] = '<< sibohou';
+$lang['btn_older'] = 'si no ara >>';
+$lang['btn_revs'] = 'nifawu\'a si\'oföna';
+$lang['btn_recent'] = 'Lahe nibohouni';
+$lang['btn_upload'] = 'Fa\'oeh\'ö';
+$lang['btn_cancel'] = 'Lö alua';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Ehaogö';
+$lang['btn_login'] = 'Felalö bakha';
+$lang['btn_logout'] = 'Möi baero';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Bohouni';
+$lang['btn_delete'] = 'Heta';
+$lang['btn_back'] = 'Fulifuri';
+$lang['btn_backlink'] = 'Link fangawuli';
+$lang['btn_backtomedia'] = 'Angawuli ba filianö Mediafile';
+$lang['btn_profile'] = 'Famohouni pörofile';
+$lang['btn_reset'] = 'Fawu\'a';
+$lang['btn_resendpwd'] = 'Fa\'ohe\'ö kode sibohou';
+$lang['btn_draft'] = 'Fawu\'a wanura';
+$lang['btn_draftdel'] = 'Heta zura';
+$lang['loggedinas'] = 'Möi bakha zotöi';
+$lang['user'] = 'Töi';
+$lang['pass'] = 'Kode';
+$lang['newpass'] = 'Kode sibohou';
+$lang['oldpass'] = 'Faduhu\'ö kode';
+$lang['passchk'] = 'Sura sakalitö';
+$lang['remember'] = 'Töngöni ndra\'o';
+$lang['fullname'] = 'Töi safönu';
+$lang['email'] = 'Imele';
+$lang['register'] = 'Fasura\'ö';
+$lang['profile'] = 'Töi pörofile';
+$lang['badlogin'] = 'Bologö dödöu, fasala döi faoma kode.';
+$lang['minoredit'] = 'Famawu\'a ma\'ifu';
+$lang['regmissing'] = 'Bologö dödöu, si lö tola lö\'ö öfo\'ösi fefu nahia si tohöna.';
+$lang['reguexists'] = 'Bologö dödöu, no so zangoguna\'ö töi da\'a.';
+$lang['regsuccess'] = 'No tefazökhi akunö ba tefa\'ohe\'ö kode ba imele.';
+$lang['regsuccess2'] = 'No tefazökhi akunö';
+$lang['regmailfail'] = 'Oroma wa so ma\'ifu zifawuka ba wama\'ohe\'ö imele kode. Fuli sofu khö admin!';
+$lang['regbadmail'] = 'Imele nibe\'emö lö atulö - na ö\'ila wa fasala da\'a, sofu khö admin';
+$lang['regbadpass'] = 'Dombuadombua kode nibe\'emö lö fagölö, fuli sura.';
+$lang['regpwmail'] = 'Kode DokuWiki';
+$lang['reghere'] = 'Hadia no so akunömö? Na lö\'ö, fazökhi sambua.';
+$lang['profna'] = 'Lö tetehegö ba wiki da\'a ba wamawu\'a pörofile';
+$lang['profnochange'] = 'Lö hadöi nifawu\'ö, lö hadöi ni\'ohalöwögöi';
+$lang['profnoempty'] = 'Lö tetehegö na lö hadöi töi ma imele.';
+$lang['profchanged'] = 'Pörofile zangoguna\'ö no tebohouni.';
+$lang['pwdforget'] = 'Hadia olifu\'ö kode? Fuli halö kode';
+$lang['resendna'] = 'Lö tetehegi ba wiki da\'a wama\'ohe\'ö kode dua kali.';
+$lang['resendpwd'] = 'Tefa\'ohe\'ö kode sibahou khö';
+$lang['resendpwdmissing'] = 'Bologö dödöu, si lö tola lö\'ö öfo\'ösi fefu nahia si tohöna.';
+$lang['resendpwdnouser'] = 'Bologö dödöu, lö masöndra zangoguna da\'a ba database.';
+$lang['resendpwdconfirm'] = 'No tefaohe\'ö link famaduhu\'ö ba imele.';
+$lang['resendpwdsuccess'] = 'No tefa\'ohe\'ö kode sibohou ba imele.';
+$lang['txt_upload'] = 'Fili file ni fa\'ohe\'ö';
+$lang['notsavedyet'] = 'Famawu\'a si lö mu\'irö\'ö taya. \nSinduhu ötohugö?';
+$lang['mediaselect'] = 'Media file';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt
new file mode 100644
index 000000000..8cb25edb6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt
@@ -0,0 +1,4 @@
+====== Administrasi ======
+
+Berikut ini adalah daftar pekerjaan administratif yang dapat Anda temukan di DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt
new file mode 100644
index 000000000..79c70f30b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt
@@ -0,0 +1,3 @@
+====== Backlinks ======
+
+Daftar dibawah ini adalah halaman-halaman (lain) yang terhubung ke halaman ini.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt
new file mode 100644
index 000000000..236e8b6e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt
@@ -0,0 +1,6 @@
+====== Versi terbaru telah Ada ======
+
+Versi terbaru dari dokumen yang baru saja Anda Edit telah ada. Ini terjadi ketika user lain telah selesai mengubah halaman, saat Anda sedang meng-edit.
+
+Pertimbangkan perbedaan yang ditampilkan dibawah ini, kemudian putuskan versi mana yang harus disimpan. Jika Anda memilih "Simpan", versi (tulisan terbaru) Andalah yang akan disimpan. Tekan "Batal" to menggunakan versi tulisan yang telah ada.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt
new file mode 100644
index 000000000..bad8f24a6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt
@@ -0,0 +1,4 @@
+====== Akses Ditolak ======
+
+Maaf, Anda tidak mempunyai hak akses untuk melanjutkan. Apakah Anda belum login?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt
new file mode 100644
index 000000000..eee1e5a58
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt
@@ -0,0 +1,4 @@
+====== Perbedaan ======
+
+Ini menunjukkan perbedaan antara versi yang terpilih dengan versi yang sedang aktif.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt
new file mode 100644
index 000000000..d7de1458b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt
@@ -0,0 +1,5 @@
+====== File Draft ditemukan ======
+
+Proses pengeditan Anda sebelumnya tidak selesai dengan sempurna. DokuWiki secara otomatis meyimpan draft yang dapat Anda pakai untuk melanjutkan pengeditan. Dibawah ini Anda dapat melihat data yang disimpan pada sesi sebelumnya.
+
+Silahkan pilih jika Anda ingin //recover// sesi pengeditan terakhir atau //hapus// draft, atau //batalkan// proses pengeditan.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt
new file mode 100644
index 000000000..a32803c44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt
@@ -0,0 +1,2 @@
+Ubah isi halaman kemudian tekan "Simpan". Lihat [[wiki:syntax]] untuk sintaks-sintaks Wiki. Mohon edit/ubah halaman sesuai dengan judul halamannya. Bila Anda masih ragu untuk menulis di halaman ini, silahkan bermain-main di [[playground:playground|tamanbermain]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt
new file mode 100644
index 000000000..e6d247c7a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt
@@ -0,0 +1,2 @@
+**Anda telah membuka dokumen versi lama!** Jika menyimpannya, berarti Anda akan membuat versi baru dari data ini.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt
new file mode 100644
index 000000000..88bbb12e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+Berikut ini adalah index dari keseluruhan halaman yang ada, diurutkan berdasar [[doku>namespaces|namespaces]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html
new file mode 100644
index 000000000..9a9a8f1e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html
@@ -0,0 +1,25 @@
+<p>Halaman ini membatu Anda dalam proses instalasi dan konfigurasi pertama kali
+untuk <a href="http://dokuwiki.org">Dokuwiki</a>. Informasi lebih lanjut
+tentang alat instalasi ini tersedia dalam
+<a href="http://dokuwiki.org/installer">halaman dokumentasi</a> sendiri.</p>
+
+<p>DokuWIki menggunakan berkas biasa sebagai media penyimpanan halaman wiki
+dan informasi lainnya yang berhubungan dengan halaman tersebut (contoh: gambar,
+indeks pencarian, revisi lama, dll). Agar bisa menggunakannya DokuWiki
+<strong>harus</strong> memiliki hak akses tulis pada direktori yang menyimpan
+berkas-berkas tersebut. Alat instalasi ini tidak dapat melakukan perubahan
+konfigurasi hak akses pada direktori. Biasanya harus menggunakan command shell
+atau jika Anda pengguna layanan hosting, melalui FTP atau control panel layanan
+hosting Anda (misalnya: cPanel). </p>
+
+<p>Alat instalasi ini akan mengatur konfigurasi DokuWiki Anda untuk
+<acronym title="access control list">ACL</acronym>, yang selanjutnya akan
+memperbolehkan administrator untuk login dan mengakses menu Admin DokuWiki
+untuk menginstal plugin, mengatur pengguna (user), mengatur hak akses ke
+halaman wiki dan perubahan konfigurasi. Ini tidak diawajibkan dalam pengoperasian
+DokuWiki, tetapi dapat membuat DokuWiki lebih mudah untuk dipelihara.</p>
+
+<p>Pengguna berpengalaman atau pengguna dengan kebutuhan instalasi khusus silahkan
+melihat link <a href="http://dokuwiki.org/install">Panduan Instalasi</a>
+and <a href="http://dokuwiki.org/config">Konfigurasi WIki</a>.
+untuk hal-hal yang berhubungan dengan instalasi dan konfigurasi.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php
new file mode 100644
index 000000000..447abaf1a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php
@@ -0,0 +1,210 @@
+<?php
+/**
+ * Indonesian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author mubaidillah <mubaidillah@gmail.com>
+ * @author Irwan Butar Butar <irwansah.putra@gmail.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '"';
+$lang['doublequoteclosing'] = '"';
+$lang['singlequoteopening'] = '\'';
+$lang['singlequoteclosing'] = '\'';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Edit halaman ini';
+$lang['btn_source'] = 'Lihat sumber halaman';
+$lang['btn_show'] = 'Tampilkan halaman';
+$lang['btn_create'] = 'Buat halaman baru';
+$lang['btn_search'] = 'Cari';
+$lang['btn_save'] = 'Simpan';
+$lang['btn_preview'] = 'Preview';
+$lang['btn_top'] = 'kembali ke atas';
+$lang['btn_newer'] = '<< lebih lanjut';
+$lang['btn_older'] = 'sebelumnya >>';
+$lang['btn_revs'] = 'Revisi-revisi lama';
+$lang['btn_recent'] = 'Perubahan terbaru';
+$lang['btn_upload'] = 'Upload';
+$lang['btn_cancel'] = 'Batal';
+$lang['btn_index'] = 'Indeks';
+$lang['btn_secedit'] = 'Edit';
+$lang['btn_login'] = 'Login';
+$lang['btn_logout'] = 'Keluar';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Ubah';
+$lang['btn_delete'] = 'Hapus';
+$lang['btn_back'] = 'Kembali';
+$lang['btn_backlink'] = 'Backlinks';
+$lang['btn_backtomedia'] = 'Kembali ke Pilihan Mediafile';
+$lang['btn_subscribe'] = 'Ikuti Perubahan';
+$lang['btn_unsubscribe'] = 'Berhenti Ikuti Perubahan';
+$lang['btn_profile'] = 'Ubah Profil';
+$lang['btn_reset'] = 'Reset';
+$lang['btn_resendpwd'] = 'Kirim password baru';
+$lang['btn_draft'] = 'Edit draft';
+$lang['btn_draftdel'] = 'Hapus draft';
+$lang['loggedinas'] = 'Login sebagai ';
+$lang['user'] = 'Username';
+$lang['pass'] = 'Password';
+$lang['newpass'] = 'Password baru';
+$lang['oldpass'] = 'Konfirmasi password';
+$lang['passchk'] = 'sekali lagi';
+$lang['remember'] = 'Ingat saya';
+$lang['fullname'] = 'Nama lengkap';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Daftar';
+$lang['profile'] = 'Profil User';
+$lang['badlogin'] = 'Maaf, username atau password salah.';
+$lang['minoredit'] = 'Perubahan Minor';
+$lang['draftdate'] = 'Simpan draft secara otomatis';
+$lang['regmissing'] = 'Maaf, Anda harus mengisi semua field.';
+$lang['reguexists'] = 'Maaf, user dengan user login ini telah ada.';
+$lang['regsuccess'] = 'User telah didaftarkan dan password telah dikirim ke email Anda.';
+$lang['regsuccess2'] = 'User telah dibuatkan.';
+$lang['regmailfail'] = 'Kami menemukan kesalahan saat mengirimkan password ke alamat email Anda. Mohon hubungi administrator.';
+$lang['regbadmail'] = 'Alamat email yang Anda masukkan tidak valid - jika menurut Anda hal ini adalah kesalahan sistem, mohon hubungi admin.';
+$lang['regbadpass'] = 'Passwod yang dimasukkan tidak sama. Silahkan ulangi lagi.';
+$lang['regpwmail'] = 'Password DokuWiki Anda';
+$lang['reghere'] = 'Anda belum mempunyai account? silahkan ';
+$lang['profna'] = 'Wiki ini tidak mengijinkan perubahan profil.';
+$lang['profnochange'] = 'Tidak ada perubahan.';
+$lang['profnoempty'] = 'Mohon mengisikan nama atau alamat email.';
+$lang['profchanged'] = 'Profil User berhasil diubah.';
+$lang['pwdforget'] = 'Lupa Password? Dapatkan yang baru';
+$lang['resendna'] = 'Wiki ini tidak mendukung pengiriman ulang password.';
+$lang['resendpwd'] = 'Kirim password baru untuk';
+$lang['resendpwdmissing'] = 'Maaf, Anda harus mengisikan semua field.';
+$lang['resendpwdnouser'] = 'Maaf, user ini tidak ditemukan.';
+$lang['resendpwdbadauth'] = 'Maaf, kode autentikasi tidak valid. Pastikan Anda menggunakan keseluruhan link konfirmasi.';
+$lang['resendpwdconfirm'] = 'Link konfirmasi telah dikirim melalui email.';
+$lang['resendpwdsuccess'] = 'Password baru Anda telah dikirim melalui email.';
+$lang['txt_upload'] = 'File yang akan diupload';
+$lang['txt_filename'] = 'Masukkan nama wiki (opsional)';
+$lang['txt_overwrt'] = 'File yang telah ada akan ditindih';
+$lang['lockedby'] = 'Sedang dikunci oleh';
+$lang['lockexpire'] = 'Penguncian artikel sampai dengan';
+$lang['willexpire'] = 'Halaman yang sedang Anda kunci akan berakhir dalam waktu kurang lebih satu menit.\nUntuk menghindari konflik, gunakan tombol Preview untuk me-reset timer pengunci.';
+$lang['notsavedyet'] = 'Perubahan yang belum disimpan akan hilang.\nYakin akan dilanjutkan?';
+$lang['rssfailed'] = 'Error terjadi saat mengambil feed: ';
+$lang['nothingfound'] = 'Tidak menemukan samasekali.';
+$lang['mediaselect'] = 'Pilihan Mediafile';
+$lang['fileupload'] = 'Mediafile Upload';
+$lang['uploadsucc'] = 'Upload sukses';
+$lang['uploadfail'] = 'Upload gagal. Apakah hak ijinnya salah?';
+$lang['uploadwrong'] = 'Upload ditolak. Ekstensi file ini tidak diperbolehkan!';
+$lang['uploadexist'] = 'File telah ada. Tidak mengerjakan apa-apa.';
+$lang['uploadbadcontent'] = 'Isi file yang diupload tidak cocok dengan ekstensi file %s.';
+$lang['uploadspam'] = 'File yang diupload diblok oleh spam blacklist.';
+$lang['uploadxss'] = 'File yang diupload diblok karena kemungkinan isi yang berbahaya.';
+$lang['deletesucc'] = 'File "%s" telah dihapus.';
+$lang['deletefail'] = '"%s" tidak dapat dihapus - cek hak aksesnya.';
+$lang['mediainuse'] = 'File "%s" belum dihapus - file ini sedang digunakan.';
+$lang['namespaces'] = 'Namespaces';
+$lang['mediafiles'] = 'File tersedia didalam';
+$lang['js']['keepopen'] = 'Biarkan window terbuka dalam pemilihan';
+$lang['js']['hidedetails'] = 'Sembunyikan detil';
+$lang['mediausage'] = 'Gunakan sintaks berikut untuk me-refer ke file ini';
+$lang['mediaview'] = 'Tampilkan file asli';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Upload file ke namespace ini. Untuk menbuat namespace baru, tambahkan namanya didepanpada nama file "Upload as" dipisahkan dengan titik dua (:).';
+$lang['mediaextchange'] = 'Ektensi file berubah dari .%s ke .%s';
+$lang['reference'] = 'Referensi untuk';
+$lang['ref_inuse'] = 'File tidak dapat dihapus karena sedang digunakan oleh halaman:';
+$lang['ref_hidden'] = 'Beberapa referensi ada didalam halaman yang tidak diijinkan untuk Anda baca.';
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Matching pagenames';
+$lang['toc'] = 'Daftar isi';
+$lang['current'] = 'sekarang';
+$lang['yours'] = 'Versi Anda';
+$lang['diff'] = 'Tampilkan perbedaan dengan versi sekarang';
+$lang['diff2'] = 'Tampilkan perbedaan diantara revisi terpilih';
+$lang['line'] = 'Baris';
+$lang['breadcrumb'] = 'Jejak';
+$lang['youarehere'] = 'Anda disini';
+$lang['lastmod'] = 'Terakhir diubah';
+$lang['by'] = 'oleh';
+$lang['deleted'] = 'terhapus';
+$lang['created'] = 'dibuat';
+$lang['restored'] = 'revisi lama ditampilkan kembali';
+$lang['external_edit'] = 'Perubahan eksternal';
+$lang['summary'] = 'Edit summary';
+$lang['mail_newpage'] = 'Halaman ditambahkan:';
+$lang['mail_changed'] = 'Halaman diubah:';
+$lang['mail_new_user'] = 'User baru:';
+$lang['mail_upload'] = 'Berkas di-upload:';
+$lang['js']['nosmblinks'] = "Link ke share Windows hanya bekerja di Microsoft Internet Explorer.\nAnda masih dapat mengcopy and paste linknya.";
+$lang['qb_bold'] = 'Tebal';
+$lang['qb_italic'] = 'Miring';
+$lang['qb_underl'] = 'Garis Bawah';
+$lang['qb_code'] = 'Kode';
+$lang['qb_strike'] = 'Text Tercoret';
+$lang['qb_h1'] = 'Level 1 Headline';
+$lang['qb_h2'] = 'Level 2 Headline';
+$lang['qb_h3'] = 'Level 3 Headline';
+$lang['qb_h4'] = 'Level 4 Headline';
+$lang['qb_h5'] = 'Level 5 Headline';
+$lang['qb_link'] = 'Link Internal';
+$lang['qb_extlink'] = 'Link External';
+$lang['qb_hr'] = 'Garis Horisontal';
+$lang['qb_ol'] = 'Item Berurutan';
+$lang['qb_ul'] = 'Item Tidak Berurutan';
+$lang['qb_media'] = 'Tambahkan gambar atau file lain';
+$lang['qb_sig'] = 'Sisipkan tanda tangan';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Karakter Khusus';
+$lang['js']['del_confirm'] = 'Hapus tulisan ini?';
+$lang['admin_register'] = 'Tambah user baru';
+$lang['metaedit'] = 'Edit Metadata';
+$lang['metasaveerr'] = 'Gagal menulis metadata';
+$lang['metasaveok'] = 'Metadata tersimpan';
+$lang['img_backto'] = 'Kembali ke';
+$lang['img_title'] = 'Judul';
+$lang['img_caption'] = 'Label';
+$lang['img_date'] = 'Tanggal';
+$lang['img_fname'] = 'Nama file';
+$lang['img_fsize'] = 'Ukuran';
+$lang['img_artist'] = 'Tukang foto';
+$lang['img_copyr'] = 'Hakcipta';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Katakunci';
+$lang['subscribe_success'] = 'Penambahan %s ke data subsripsi untuk %s';
+$lang['subscribe_error'] = 'Gagal menambahkan %s ke data subsripsi untuk %s';
+$lang['subscribe_noaddress'] = 'Tidak ditemukan alamat yang berhubungan dengan login Anda, Anda tidak dapat menambahkan daftar subscription';
+$lang['unsubscribe_success'] = 'Menghapus %s dari daftar subscription untuk %s';
+$lang['unsubscribe_error'] = 'Gagal menghapus %s dari daftar subscription untuk %s';
+$lang['authmodfailed'] = 'Konfigurasi autentikasi user tidak valid. Harap informasikan admin Wiki Anda.';
+$lang['authtempfail'] = 'Autentikasi user saat ini sedang tidak dapat digunakan. Jika kejadian ini berlanjut, Harap informasikan admin Wiki Anda.';
+$lang['i_chooselang'] = 'Pilih bahasa';
+$lang['i_installer'] = 'Instalasi DokuWiki';
+$lang['i_wikiname'] = 'Nama Wiki';
+$lang['i_enableacl'] = 'Aktifkan ACL (disarankan)';
+$lang['i_problems'] = 'Terdapat beberapa kesalahan seperti berikut. Anda tidak dapat melanjutkan sampai kesalahan tersebut diperbaiki.';
+$lang['i_modified'] = 'Untuk alasan keamanan, skrip ini hanya dapat dijalankan pada instalasi DikuWiki baru dan belum di modifikasi. Silahkan meng-ekstrak kembali berkasi dari halaman dowload, atau lihat <a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a> ';
+$lang['i_funcna'] = 'Fungsi PHP <code>%s</code> tidak tersedia. Mungkin dinonaktifkan oleh layanan hosting Anda?';
+$lang['i_phpver'] = 'Versi PHP Anda <code>%s</code> lebih rendah dari yang dibutuhkan <code>%s</code>. Mohon melakukan upgrade.';
+$lang['i_permfail'] = '<code>%s</code> tidak dapat ditulis oleh DokuWiki. Anda harus memperbaiki konfigurasi hak akses untuk direktori tersebut.';
+$lang['i_confexists'] = '<code>%s</code> sudah ada';
+$lang['i_writeerr'] = 'Tidak dapat membuat <code>%s</code>. Anda harus memeriksa konfigurasi hak akses direktori/berkas dan membuatnya secara manual.';
+$lang['i_badhash'] = 'dokuwiki.php tidak dikenal atau sudah diubah (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - tidak valid atau belum diisi';
+$lang['i_success'] = 'Konfigurasi telah berhasil. Anda boleh menghapus berkas install.php sekarang. Lanjutkan ke <a href="doku.php">DokuWiki baru Anda</a>.';
+$lang['i_failure'] = 'Terdapat beberapa kesalahan dalam menulis berkas konfigurasi. Anda harus memperbaikinnya sendiri sebelum dapat menggunakan <a href="doku.php">DokuWiki baru Anda</a>.';
+$lang['i_policy'] = 'Policy ACL awal';
+$lang['i_pol0'] = 'Wiki Terbuka (baca, tulis, upload untuk semua orang)';
+$lang['i_pol1'] = 'Wiki Publik (baca untuk semua orang, tulis dan upload untuk pengguna terdaftar)';
+$lang['i_pol2'] = 'Wiki Privat (baca, tulis dan upload hanya untuk pengguna terdaftar)';
+$lang['i_retry'] = 'Coba Lagi';
+$lang['mu_gridname'] = 'Nama file';
+$lang['mu_gridsize'] = 'Ukuran';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namaspace';
+$lang['mu_browse'] = 'Jelajah';
+$lang['mu_ready'] = 'Siap untuk uplod';
+$lang['mu_done'] = 'Selesai';
+$lang['mu_fail'] = 'Gagal';
+$lang['mu_authfail'] = 'sesi habis';
+$lang['mu_progress'] = '@PCT@% uploaded';
+$lang['mu_filetypes'] = 'Izinkan tipe file';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt
new file mode 100644
index 000000000..8147717fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt
@@ -0,0 +1,3 @@
+====== Halaman Terkunci ======
+
+Halaman ini tertutup (terkunci) untuk diedit oleh user lain. Anda harus menunggu sampai user ini menyelesaikan pengeditan, atau masa berlaku penguncian telah berakhir.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt
new file mode 100644
index 000000000..f736e882b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+Anda belum login! Masukkan data autentifikasi dibawah ini untuk masuk log (login). Cookies harus diaktifkan agar bisa login.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt
new file mode 100644
index 000000000..7eede9b3c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt
@@ -0,0 +1,17 @@
+Halaman di DokuWiki Anda telah bertamah atau berubah, dengan detil sebagai berikut:
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+Edit Summary: @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+Email ini digenerate oleh DokuWiki di
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt
new file mode 100644
index 000000000..8d3f99d72
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt
@@ -0,0 +1,3 @@
+====== Topik ini belum tersedia ======
+
+Belum ada artikel di halaman ini. Anda dapat membuat tulisan-tulisan baru di halaman ini dengan menekan tombol "Buat Halaman Baru" (lihat dibagian bawah...!)
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt
new file mode 100644
index 000000000..5244f8303
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt
@@ -0,0 +1,4 @@
+====== Revisi tidak tersedia ======
+
+Revisi yang diinginkan tidak ada. Gunakan tombol ''Revisi Lama'' untuk menampilkan daftar revisi lama dari dokumen ini.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt
new file mode 100644
index 000000000..1621946b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt
@@ -0,0 +1,4 @@
+====== Preview ======
+
+Ini adalah preview tentang bagimana tulisan Anda akan ditampilkan. Ingat: tulisan ini **belum disimpan**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt
new file mode 100644
index 000000000..19131ee47
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt
@@ -0,0 +1,13 @@
+Hai @FULLNAME@!
+
+Seseorang telah meminta password baru untuk @TITLE@ Anda login ke @DOKUWIKIURL@
+
+Jika Anda tidak meminta password baru, mohon mengacuhkan email ini.
+
+Untuk mengkonfirmasi bahwa permintaan tersebut adalah benar dari Anda, silahkan gunakan link dibawah.
+
+@CONFIRM@
+
+--
+Email ini dibuat otomatis oleh DokuWiki
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt
new file mode 100644
index 000000000..f78c0eb9d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt
@@ -0,0 +1,2 @@
+Halaman ini hanya bisa dibaca. Anda bisa melihat sumbernya, tetapi tidak diperkenankan untuk mengubah. Hubungi administrator jika menemukan kesalahan pada halaman ini.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt
new file mode 100644
index 000000000..f7cf24443
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt
@@ -0,0 +1,5 @@
+====== Perubahan ======
+
+Berikut ini adalah halaman-halaman yang baru saja diubah.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt
new file mode 100644
index 000000000..dd8c578f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt
@@ -0,0 +1,4 @@
+====== Mendaftar sebagai anggota baru ======
+
+Isikan semua informasi dibawah ini untuk membuat account baru di wiki ini. Pastikan Anda telah mengisikan **alamat email yang valid**, karena password akan dikirim melalui email ini. Nama login harus sesuai dengan aturan [[doku>pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt
new file mode 100644
index 000000000..ed8c97ca3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt
@@ -0,0 +1,14 @@
+User baru telah mendaftar. Berikut detailnya:
+
+User name : @NEWUSER@
+Full name : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Email ini dibuat otomatis oleh DokuWIki
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt
new file mode 100644
index 000000000..276b2928f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Kirim Password Baru ======
+
+Masukkan nama user Anda pada form dibawah untuk permintaan perubahan password account Anda di Wiki ini. Link konfirmasi akan dikirimkan melalui alamat email Anda sewaktu registrasi.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt
new file mode 100644
index 000000000..d82b2735f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt
@@ -0,0 +1,4 @@
+====== Revisi Lama ======
+
+Ini adalah revisi-revisi lama dari dokumen ini. Untuk mengaktifkan kembali revisi lama, pilih dokumen revisi, kemudikan tekan "Edit halaman ini" lalu Simpan.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt
new file mode 100644
index 000000000..c47bed7dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt
@@ -0,0 +1,5 @@
+====== Pencarian ======
+
+Anda dapat menemukan hasil pencarian dibawah ini. Jika Anda tidak menemukan apa yang diinginkan, Anda dapat membuat halaman baru, dengan nama sesuai "text pencarian" Anda. Gunakan tombol "Edit halaman ini".
+
+===== Hasil Pencarian ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt
new file mode 100644
index 000000000..27f0c6421
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt
@@ -0,0 +1,2 @@
+**Ini adalah dokumen versi lama!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt
new file mode 100644
index 000000000..73713c838
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt
@@ -0,0 +1,37 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
+yang
+dan
+adalah
+untuk
+lalu
+maka
+kemudian
+jika
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt
new file mode 100644
index 000000000..dc04df29a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt
@@ -0,0 +1,17 @@
+Halo Dunia!
+
+Halaman @PAGE@ di @TITLE@ wiki telah berubah.
+Perubahannya adalah sebagai berikut:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Untuk unsubscribe dari halaman ini, silahkan login ke wiki di
+@DOKUWIKIURL@ lalu buka
+@NEWPAGE@
+dan pilih 'Unsubscribe Changes'.
+
+--
+Email ini telah digenerate oleh DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt
new file mode 100644
index 000000000..b7f71a198
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Ubah Profil Account Anda ======
+
+Anda hanya perlu mengisikan field yang ingin Anda ubah. Anda tidak dapat mengubah username Anda.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt
new file mode 100644
index 000000000..dc628fc11
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt
@@ -0,0 +1,14 @@
+Sebuah file telah diupload di DokuWiki Anda. Berikut detailnya:
+
+File : @MEDIA@
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Size : @SIZE@
+MIME Type : @MIME@
+User : @USER@
+
+--
+Email ini dibuat otomatis oleh DokuWiki
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt
new file mode 100644
index 000000000..1e40ce381
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blocked ======
+
+Maaf, tulisan Anda **tidak disimpan** karena terdapat satu atau lebih kata-kata yang **tabu**. Jika Anda mencoba melakukan SPAM wiki ini -- Bangsat lu! Tetapi, jika Anda pikir ini adalah kesalahan sistem, harap hubungi administrator wiki ini.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt
new file mode 100644
index 000000000..ce7b9d390
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt
@@ -0,0 +1 @@
+===== Aðrar viðbætur ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt
new file mode 100644
index 000000000..a6d246ad7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt
@@ -0,0 +1,3 @@
+===== Breytingar =====
+
+Hér sést hvað hefur breyst á milli útgáfna. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php
new file mode 100644
index 000000000..ba1ab2c04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php
@@ -0,0 +1,196 @@
+<?php
+/**
+ * is language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesIs.php?view=co
+ * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
+ * @author Ólafur Gunnlaugsson <oli@audiotools.com>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Breyta þessari síðu';
+$lang['btn_source'] = 'Skoða wikikóða';
+$lang['btn_show'] = 'Sýna síðu';
+$lang['btn_create'] = 'Búa til þessa síðu';
+$lang['btn_search'] = 'Leit';
+$lang['btn_save'] = 'Vista';
+$lang['btn_preview'] = 'Forskoða';
+$lang['btn_top'] = 'Efst á síðu';
+$lang['btn_newer'] = '<< nýrra';
+$lang['btn_older'] = 'eldra >>';
+$lang['btn_revs'] = 'breytingaskrá';
+$lang['btn_recent'] = 'Nýlegar breytingar';
+$lang['btn_upload'] = 'Hlaða upp';
+$lang['btn_cancel'] = 'Hætta við';
+$lang['btn_index'] = 'Atriðaskrá';
+$lang['btn_secedit'] = 'Breyta';
+$lang['btn_login'] = 'Innskrá';
+$lang['btn_logout'] = 'Útskrá';
+$lang['btn_admin'] = 'Stjórnandi';
+$lang['btn_update'] = 'Uppfæra';
+$lang['btn_delete'] = 'Eyða';
+$lang['btn_back'] = 'Til baka';
+$lang['btn_backlink'] = 'Hvað tengist hingað';
+$lang['btn_backtomedia'] = 'Aftur til miðlaskrá';
+$lang['btn_subscribe'] = 'Vakta';
+$lang['btn_unsubscribe'] = 'Afvakta';
+$lang['btn_subscribens'] = 'Vakta breytingar á nafnrými';
+$lang['btn_unsubscribens'] = 'Afvakta breytingar á nafnrými';
+$lang['btn_profile'] = 'Uppfæra notanda';
+$lang['btn_reset'] = 'Endurstilla';
+$lang['btn_resendpwd'] = 'Senda nýtt aðgangsorð með tölvupósti';
+$lang['btn_draft'] = 'Breyta uppkasti';
+$lang['btn_recover'] = 'Endurheimta uppkast';
+$lang['btn_draftdel'] = 'Eyða uppkasti';
+$lang['btn_revert'] = 'Endurheimta';
+$lang['loggedinas'] = 'Innskráning sem';
+$lang['user'] = 'Notendanafn';
+$lang['pass'] = 'Aðgangsorð';
+$lang['newpass'] = 'Nýtt aðgangsorð';
+$lang['oldpass'] = 'Staðfesta núverandi (gamla) aðgangsorðið';
+$lang['passchk'] = 'Aðgangsorð (aftur)';
+$lang['remember'] = 'Muna.';
+$lang['fullname'] = 'Fullt nafn þitt*';
+$lang['email'] = 'Tölvupóstfangið þitt*';
+$lang['register'] = 'Skráning';
+$lang['profile'] = 'Notendastillingar';
+$lang['badlogin'] = 'Því miður, notandanafn eða aðgangsorð var rangur.';
+$lang['minoredit'] = 'Minniháttar breyting';
+$lang['draftdate'] = 'Uppkast vistað sjálfkrafa';
+$lang['nosecedit'] = 'Síðunni var breytt á meðan, upplýsingar um svæðið voru úreltar og öll síðan því endurhlaðin.';
+$lang['regmissing'] = 'Afsakið, en þú verður að fylla út í allar eyður.';
+$lang['reguexists'] = 'Afsakið, notandi með þessu nafni er þegar skráður inn.';
+$lang['regsuccess'] = 'Notandi hefur verið búinn til og aðgangsorð sent í tölvupósti.';
+$lang['regsuccess2'] = 'Notandi hefur verið búinn til.';
+$lang['regmailfail'] = 'Það lítur út fyrir villu við sendingu aðgangsorðs. Vinsamlegast hafðu samband við stjórnanda.';
+$lang['regbadmail'] = 'Uppgefinn tölvupóstur virðist ógildur - teljir þú þetta vera villu, hafðu þá samband við stjórnanda.';
+$lang['regbadpass'] = 'Aðgangsorðin tvö eru ekki eins, vinsamlegast reyndu aftur.';
+$lang['regpwmail'] = 'DokuWiki aðgangsorðið þitt';
+$lang['reghere'] = 'Ertu ekki með reikning? Skráðu þig';
+$lang['profna'] = 'Þessi wiki leyfir ekki breytingar á notendaupplýsingum';
+$lang['profnochange'] = 'Enga breytingar vistaðar';
+$lang['profnoempty'] = 'Það er ekki leyfilegt að skilja nafn og póstfang eftir óútfyllt';
+$lang['profchanged'] = 'Notendaupplýsingum breytt';
+$lang['pwdforget'] = 'Gleymt aðgangsorð? Fáðu nýtt';
+$lang['resendna'] = 'Þessi wiki styður ekki endursendingar aðgangsorðs';
+$lang['resendpwd'] = 'Senda nýtt aðgangsorð fyrir';
+$lang['resendpwdmissing'] = 'Afsakið, þú verður að út eyðublaðið allt';
+$lang['resendpwdnouser'] = 'Afsakið, notandi finnst ekki.';
+$lang['resendpwdbadauth'] = 'Afsakið, þessi sannvottunorð er ekki gild. Gakktu úr skugga um að þú notaðir að ljúka staðfesting hlekkur.';
+$lang['resendpwdconfirm'] = 'Staðfesting hlekkur hefur verið send með tölvupósti.';
+$lang['resendpwdsuccess'] = 'Nýja aðgangsorðið hefur verið sent með tölvupósti.';
+$lang['license'] = 'Nema annað sé tekið fram, efni á þessari wiki er leyfð undir eftirfarandi leyfi:';
+$lang['licenseok'] = 'Athugið: Með því að breyta þessari síðu samþykkir þú að leyfisveitandi efni undir eftirfarandi leyfi:';
+$lang['searchmedia'] = 'Leit skrárheiti:';
+$lang['searchmedia_in'] = 'Leit í %s';
+$lang['txt_upload'] = 'Veldu skrá til innhleðslu';
+$lang['txt_filename'] = 'Innhlaða sem (valfrjálst)';
+$lang['txt_overwrt'] = 'Skrifa yfir skrá sem þegar er til';
+$lang['lockedby'] = 'Læstur af';
+$lang['lockexpire'] = 'Læsing rennur út eftir';
+$lang['nothingfound'] = 'Ekkert fannst';
+$lang['mediaselect'] = 'Miðlaskrá';
+$lang['fileupload'] = 'Hlaða inn miðlaskrá';
+$lang['uploadsucc'] = 'Innhlaðning tókst';
+$lang['uploadfail'] = 'Villa í innhlaðningu';
+$lang['uploadwrong'] = 'Innhleðslu neitað. Skrár með þessari endingu eru ekki leyfðar.';
+$lang['uploadexist'] = 'Skrá var þegar til staðar.';
+$lang['uploadbadcontent'] = 'Innhlaðið efni var ekki við að %s skrárendingu.';
+$lang['uploadspam'] = 'Þessi innhlaðning er útilokuð vegna ruslpósts svarturlisti.';
+$lang['uploadxss'] = 'Þessi innhlaðning er útilokuð vegna hugsanlega skaðlegum efni.';
+$lang['uploadsize'] = 'Innhlaðið skrá var of stór. (Hámark eru %s)';
+$lang['deletesucc'] = 'Skrá %s hefur verið eytt.';
+$lang['namespaces'] = 'Nafnrýmar';
+$lang['mediafiles'] = 'Tiltækar skrár í';
+$lang['js']['searchmedia'] = 'Leita að skrám';
+$lang['js']['hidedetails'] = 'Fela upplýsingar';
+$lang['js']['linkwiz'] = 'Tengill-leiðsagnarforrit';
+$lang['js']['linkto'] = 'Tengja';
+$lang['js']['del_confirm'] = 'à örugglega að eyða valdar skrár?';
+$lang['mediaview'] = 'Sjá upprunalega skrá';
+$lang['mediaroot'] = 'rót';
+$lang['mediaextchange'] = 'Skrárending var breytt úr .%s til .%s!';
+$lang['reference'] = 'Tilvísanir til';
+$lang['ref_inuse'] = 'Ekki hægt að eyða skráin, því það er enn notað af eftirfarandi síðum:';
+$lang['ref_hidden'] = 'Sumar tilvísanir eru að síður sem þú hefur ekki leyfi til að lesa';
+$lang['hits'] = 'Samsvör';
+$lang['quickhits'] = 'Samsvörun síðunöfn';
+$lang['toc'] = 'Efnisyfirlit';
+$lang['current'] = 'nú';
+$lang['yours'] = 'Þín útgáfa';
+$lang['diff'] = 'Sýna ágreiningur til núverandi endurskoðun';
+$lang['diff2'] = 'Sýna ágreiningur meðal valið endurskoðun';
+$lang['line'] = 'Lína';
+$lang['breadcrumb'] = 'Snefill';
+$lang['youarehere'] = 'Þú ert hér';
+$lang['lastmod'] = 'Síðast breytt';
+$lang['by'] = 'af';
+$lang['deleted'] = 'eytt';
+$lang['created'] = 'myndað';
+$lang['restored'] = 'Breytt aftur til fyrri útgáfu';
+$lang['external_edit'] = 'utanaðkomandi breyta';
+$lang['summary'] = 'Forskoða';
+$lang['noflash'] = 'Það þarf <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash viðbót</a> til að sýna sumt efnið á þessari síðu';
+$lang['download'] = 'Hlaða niður til kóðabút';
+$lang['mail_newpage'] = 'síðu bætt við:';
+$lang['mail_changed'] = 'síðu breytt:';
+$lang['mail_new_user'] = 'nýr notandi:';
+$lang['mail_upload'] = 'Innhlaðið skrá:';
+$lang['qb_bold'] = 'Feitletraður texti';
+$lang['qb_italic'] = 'Skáletraður texti';
+$lang['qb_underl'] = 'Undirstrikaður texti';
+$lang['qb_code'] = 'Kóðatraður texti';
+$lang['qb_strike'] = 'Yfirstrikaður texti';
+$lang['qb_h1'] = 'Fyrsta stigs fyrirsögn';
+$lang['qb_h2'] = 'Annars stigs fyrirsögn';
+$lang['qb_h3'] = 'Þriðja stigs fyrirsögn';
+$lang['qb_h4'] = 'Fjórða stigs fyrirsögn';
+$lang['qb_h5'] = 'Fimmta stigs fyrirsögn';
+$lang['qb_h'] = 'Fyrirsögn';
+$lang['qb_hs'] = 'Veldu fyrirsögn';
+$lang['qb_hplus'] = 'Hærra stigs fyrirsögn';
+$lang['qb_hminus'] = 'Lægri stigs fyrirsögn';
+$lang['qb_hequal'] = 'Sama stigs fyrirsögn';
+$lang['qb_link'] = 'Innri tengill';
+$lang['qb_extlink'] = 'Ytri tengill (muna að setja http:// á undan)';
+$lang['qb_hr'] = 'Lárétt lína (notist sparlega)';
+$lang['qb_ol'] = 'Númeraðaðan listatriði';
+$lang['qb_ul'] = 'Ónúmeraðaðan listatriði';
+$lang['qb_media'] = 'Bæta inn myndum og öðrum skrám';
+$lang['qb_sig'] = 'Undirskrift þín auk tímasetningu';
+$lang['qb_smileys'] = 'Broskallar';
+$lang['qb_chars'] = 'Sértækir stafir';
+$lang['admin_register'] = 'Setja nýjan notenda inn';
+$lang['metaedit'] = 'Breyta lýsigögnum';
+$lang['metasaveerr'] = 'Vistun lýsigagna mistókst';
+$lang['metasaveok'] = 'Lýsigögn vistuð';
+$lang['img_backto'] = 'Aftur til';
+$lang['img_title'] = 'Heiti';
+$lang['img_caption'] = 'Skýringartexti';
+$lang['img_date'] = 'Dagsetning';
+$lang['img_fname'] = 'Skrárheiti';
+$lang['img_fsize'] = 'Stærð';
+$lang['img_artist'] = 'Myndsmiður';
+$lang['img_copyr'] = 'Útgáfuréttur';
+$lang['img_format'] = 'Forsnið';
+$lang['img_camera'] = 'Myndavél';
+$lang['img_keywords'] = 'Lykilorðir';
+$lang['i_retry'] = 'Reyna aftur';
+$lang['mu_gridsize'] = 'Stærð';
+$lang['mu_toobig'] = 'of stór';
+$lang['mu_ready'] = 'tilbúin til upphleðslu';
+$lang['mu_done'] = 'lokið';
+$lang['mu_fail'] = 'mistókst';
+$lang['mu_info'] = 'Skrár innhlaðnar.';
+$lang['mu_lasterr'] = 'Síðasta villa:';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt
new file mode 100644
index 000000000..81e7e5e32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt
@@ -0,0 +1,3 @@
+===== Innskráning =====
+
+Þú ert ekki skráður inn! Skráuðu þig inn hér að neðan. Athugaðu að vafrinn sem að þú notar verður að styðja móttöku smákaka. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt
new file mode 100644
index 000000000..7d3cf5720
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt
@@ -0,0 +1,3 @@
+===== Nýlegar Breytingar =====
+
+Eftirfarandi síðum hefur nýlega verið breytt. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt
new file mode 100644
index 000000000..b847b1d4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Senda nýtt aðgangsorð ======
+
+Vinsamlegast sláðu inn notendanafn þitt í formið hér fyrir neðan til að biðja um nýtt aðgangsorð fyrir reikninginn þinn í þessu wiki. A staðfesting hlekkur verður sendast á skráð netfang. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt
new file mode 100644
index 000000000..57e5faf86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt
@@ -0,0 +1,23 @@
+Hæ
+
+@PAGE@ síðan í @TITLE@ hefur breyst.
+Hér eru breytingarnar:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Dagsetning : @DATE@
+Notandi : @USER@
+Samantekt : @SUMMARY@
+Eldri útgáfa: @OLDPAGE@
+Ný útgáfa: @NEWPAGE@
+
+Ef þú vilt ekki lengur fá tilkynningar um breytingar á síðum, skráðu þig þá inn á
+@DOKUWIKIURL@, heimsóttu síðan
+@NEWPAGE@
+og afskráðu þig af tilkynningum fyrir síður og/ eða rými fyrir heiti.
+
+--
+Pósturinn var myndaður af DokuWiki að
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt
new file mode 100644
index 000000000..95a611edc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt
@@ -0,0 +1,4 @@
+====== Amministrazione ======
+
+Qui sotto puoi trovare una lista delle possibili azioni amministrative attualmente disponibili in Dokuwiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt
new file mode 100644
index 000000000..6a5a30573
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugin addizionali ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt
new file mode 100644
index 000000000..452019db5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt
@@ -0,0 +1,4 @@
+====== Puntano qui ======
+
+Questa è una lista delle pagine che sembrano avere un collegamento alla pagina corrente.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt
new file mode 100644
index 000000000..44789a365
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt
@@ -0,0 +1,6 @@
+====== Esiste una versione più recente ======
+
+Esiste una versione più recente del documento che hai modificato. Questo può accadere quando un altro utente ha già modificato il documento durante le tue modifiche.
+
+Esamina le differenze mostrate di seguito, quindi decidi quale versione mantenere. Se scegli ''salva'', la tua versione verrà salvata. Clicca su ''annulla'' per mantenere la versione corrente.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt
new file mode 100644
index 000000000..e87eeeada
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt
@@ -0,0 +1,5 @@
+====== Accesso negato ======
+
+Non hai i diritti per continuare. Hai forse dimenticato di effettuare il login?
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt
new file mode 100644
index 000000000..6b48ed44e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt
@@ -0,0 +1,4 @@
+====== Differenze ======
+
+Queste sono le differenze tra la revisione selezionata e la versione corrente della pagina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt
new file mode 100644
index 000000000..9932786ba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt
@@ -0,0 +1,6 @@
+====== Trovata Bozza ======
+
+La tua ultima sessione di modifica su questa pagina non è stata completata correttamente. DokuWiki ha salvato in automatico una bozza durante il tuo lavoro, che puoi ora utilizzare per continuare le tue modifiche. Di seguito puoi trovare i dati che sono stati salvati dalla tua ultima sessione.
+
+Decidi se vuoi //recuperare// la sessione di modifica, //cancellare// la bozza salavata in automatico oppure //annullare// le modifiche.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt
new file mode 100644
index 000000000..fdfaf463e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt
@@ -0,0 +1,2 @@
+Modifica la pagina e clicca su ''Salva''. Vedi [[wiki:syntax]] per la sintassi riconosciuta da Wiki. Modifica questa pagina solo se puoi **apportare dei miglioramenti**. Se vuoi solo fare degli esperimenti ed imparare come fare i primi passi usa [[playground:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt
new file mode 100644
index 000000000..0a309fa24
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt
@@ -0,0 +1,2 @@
+**Hai caricato una precedente revisione del documento!** Se salvi questa pagina creerai una nuova versione con questi dati.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt
new file mode 100644
index 000000000..8d5f00409
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt
@@ -0,0 +1,4 @@
+====== Indice ======
+
+Questo è un indice di tutte le pagine disponibili ordinate per [[doku>namespaces|categoria]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html
new file mode 100644
index 000000000..5bc4b0dc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html
@@ -0,0 +1,24 @@
+<p>Questa pagina ti assisterà durante la prima installazione e configurazione di
+<a href="http://dokuwiki.org">Dokuwiki</a>. Ulteriori informazioni sulla
+procedura di installazione sono reperibili nella
+<a href="http://dokuwiki.org/installer">pagina di documentazione</a>.</p>
+
+<p>DokuWiki utilizza normali file per la memorizzazione di pagine wiki ed altre
+informazioni associate a tali pagine (es. immagini, indici per la ricerca, vecchie
+revisioni, ecc.). Per poter operare correttamente DokuWiki
+<strong>deve</strong> accedere in scrittura alle directory che contengono tali
+file. La procedura di installazione non è in grado di impostare i permessi sulle directory. Questo
+deve normalmente essere fatto direttamente da linea di comando oppure, se stai usando un servizio di hosting,
+attraverso FTP o dal pannello di controllo del servizio di hosting (es. cPanel).</p>
+
+<p>Questa procedura di installazione imposterà la configurazione di DokuWiki per l'uso di
+<acronym title="lista controllo accessi">ACL</acronym>, che consente all'amministratore di
+collegarsi e accedere al menu di amministrazione di DokuWiki per installare plugin, gestire
+utenti, gestire gli accessi alle pagine wiki e modificare le impostazioni del wiki.
+Non è necessario per il funzionamento di DokuWiki, ma renderà Dokuwiki più facile
+da amministrare.</p>
+
+<p>Gli utenti esperti o con particolari esigenze di installazione dovrebbero far riferimento ai
+seguenti link per i dettagli riguardanti
+<a href="http://dokuwiki.org/install">istruzioni per l'installazione</a>
+and <a href="http://dokuwiki.org/config">parametri di configurazione</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php
new file mode 100644
index 000000000..827967d0f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php
@@ -0,0 +1,240 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Giorgio Vecchiocattivi <giorgio@vecchio.it>
+ * @author Roberto Bolli <http://www.rbnet.it/>
+ * @author Silvia Sargentoni <polinnia@tin.it>
+ * @author Diego Pierotto <ita.translations@tiscali.it>
+ * @author Diego Pierotto ita.translations@tiscali.it
+ * @author ita.translations@tiscali.it
+ * @author Lorenzo Breda <lbreda@gmail.com>
+ * @author snarchio@alice.it
+ * @author robocap <robocap1@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Modifica questa pagina';
+$lang['btn_source'] = 'Mostra sorgente';
+$lang['btn_show'] = 'Mostra pagina';
+$lang['btn_create'] = 'Crea questa pagina';
+$lang['btn_search'] = 'Cerca';
+$lang['btn_save'] = 'Salva';
+$lang['btn_preview'] = 'Anteprima';
+$lang['btn_top'] = 'Torna su';
+$lang['btn_newer'] = '<< più recenti';
+$lang['btn_older'] = 'meno recenti >>';
+$lang['btn_revs'] = 'Revisioni precedenti';
+$lang['btn_recent'] = 'Ultime modifiche';
+$lang['btn_upload'] = 'Invia file';
+$lang['btn_cancel'] = 'Annulla';
+$lang['btn_index'] = 'Indice';
+$lang['btn_secedit'] = 'Modifica';
+$lang['btn_login'] = 'Entra';
+$lang['btn_logout'] = 'Esci';
+$lang['btn_admin'] = 'Amministrazione';
+$lang['btn_update'] = 'Aggiorna';
+$lang['btn_delete'] = 'Cancella';
+$lang['btn_back'] = 'Indietro';
+$lang['btn_backlink'] = 'Backlinks';
+$lang['btn_backtomedia'] = 'Torna alla selezione file';
+$lang['btn_subscribe'] = 'Sottoscrivi modifiche';
+$lang['btn_unsubscribe'] = 'Cancella sottoscrizione';
+$lang['btn_subscribens'] = 'Sottoscrivi modifiche della categoria';
+$lang['btn_unsubscribens'] = 'Cancella sottoscrizione modifiche della categoria';
+$lang['btn_profile'] = 'Aggiorna profilo';
+$lang['btn_reset'] = 'Annulla';
+$lang['btn_resendpwd'] = 'Invia nuova password';
+$lang['btn_draft'] = 'Modifica bozza';
+$lang['btn_recover'] = 'Ripristina bozza';
+$lang['btn_draftdel'] = 'Cancella bozza';
+$lang['loggedinas'] = 'Collegato come';
+$lang['user'] = 'Nome utente';
+$lang['pass'] = 'Password';
+$lang['newpass'] = 'Nuova password';
+$lang['oldpass'] = 'Conferma password corrente';
+$lang['passchk'] = 'Ripeti password';
+$lang['remember'] = 'Ricorda automaticamente';
+$lang['fullname'] = 'Nome completo';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Registrazione';
+$lang['profile'] = 'Profilo utente';
+$lang['badlogin'] = 'Il nome utente o la password non sono validi.';
+$lang['minoredit'] = 'Modifiche minori';
+$lang['draftdate'] = 'Bozza salvata in automatico il';
+$lang['nosecedit'] = 'La pagina nel frattempo è cambiata, la sezione info è scaduta, caricata invece la pagina intera.';
+$lang['regmissing'] = 'Devi riempire tutti i campi.';
+$lang['reguexists'] = 'Il nome utente inserito esiste già .';
+$lang['regsuccess'] = 'L\'utente è stato creato. La password è stata spedita via e-mail.';
+$lang['regsuccess2'] = 'L\'utente è stato creato.';
+$lang['regmailfail'] = 'Sembra che ci sia stato un errore nell\'invio della e-mail. Per favore contatta il tuo amministratore!';
+$lang['regbadmail'] = 'L\'indirizzo e-mail fornito sembra essere non valido - se pensi che ci sia un errore contatta il tuo amministratore';
+$lang['regbadpass'] = 'Le due password inserite non coincidono, prova di nuovo.';
+$lang['regpwmail'] = 'La tua password DokuWiki';
+$lang['reghere'] = 'Non hai ancora un accesso? Registrati qui.';
+$lang['profna'] = 'Questo wiki non supporta modifiche al profilo';
+$lang['profnochange'] = 'Nessuna modifica, niente da aggiornare.';
+$lang['profnoempty'] = 'Nome o indirizzo email vuoti non sono consentiti.';
+$lang['profchanged'] = 'Aggiornamento del profilo utente riuscito.';
+$lang['pwdforget'] = 'Hai dimenticato la password? Richiedine una nuova';
+$lang['resendna'] = 'Questo wiki non supporta l\'invio di nuove password.';
+$lang['resendpwd'] = 'Invia nuova password per';
+$lang['resendpwdmissing'] = 'Devi riempire tutti i campi.';
+$lang['resendpwdnouser'] = 'Impossibile trovare questo utente nel database.';
+$lang['resendpwdbadauth'] = 'Spiacente, questo codice di autorizzazione non è valido. Assicurati di aver usato il link completo di conferma.';
+$lang['resendpwdconfirm'] = 'Un link di conferma è stato spedito via email.';
+$lang['resendpwdsuccess'] = 'La nuova password è stata spedita via email.';
+$lang['license'] = 'Ad eccezione da dove è diversamente indicato, il contenuto di questo wiki è sotto la seguente licenza:';
+$lang['licenseok'] = 'Nota: modificando questa pagina accetti di rilasciare il contenuto sotto la seguente licenza:';
+$lang['txt_upload'] = 'Seleziona un file da caricare';
+$lang['txt_filename'] = 'Inserisci un "wikiname" (opzionale)';
+$lang['txt_overwrt'] = 'Sovrascrivi file esistente';
+$lang['lockedby'] = 'Attualmente bloccato da';
+$lang['lockexpire'] = 'Il blocco scade alle';
+$lang['willexpire'] = 'Il tuo blocco su questa pagina scadrà tra circa un minuto.\nPer evitare incongruenze usa il pulsante di anteprima per prolungare il periodo di blocco.';
+$lang['notsavedyet'] = 'Le modifiche non salvate andranno perse.\nContinuare?';
+$lang['rssfailed'] = 'Si è verificato un errore cercando questo feed: ';
+$lang['nothingfound'] = 'Nessun risultato trovato.';
+$lang['mediaselect'] = 'Selezione dei file';
+$lang['fileupload'] = 'File caricato';
+$lang['uploadsucc'] = 'Invio riuscito';
+$lang['uploadfail'] = 'Invio fallito. Contatta l\'amministratore.';
+$lang['uploadwrong'] = 'Invio rifiutato. Questa estensione di file non è ammessa';
+$lang['uploadexist'] = 'Il file esiste già . Invio annullato.';
+$lang['uploadbadcontent'] = 'Il contenuto caricato non corrisponde all\'estensione del file %s.';
+$lang['uploadspam'] = 'Il caricamento è stato bloccato dalla lista nera di spam.';
+$lang['uploadxss'] = 'Il caricamento è stato bloccato perchè il contenuto potrebbe essere malizioso.';
+$lang['uploadsize'] = 'Il file caricato è troppo grande. (massimo %s)';
+$lang['deletesucc'] = 'Il file "%s" è stato cancellato.';
+$lang['deletefail'] = '"%s" non può essere cancellato - verifica i permessi.';
+$lang['mediainuse'] = 'Il file "%s" non è stato cancellato - è ancora in uso.';
+$lang['namespaces'] = 'Categorie';
+$lang['mediafiles'] = 'File disponibili in';
+$lang['js']['keepopen'] = 'Tieni la finestra aperta durante la selezione';
+$lang['js']['hidedetails'] = 'Nascondi Dettagli';
+$lang['js']['nosmblinks'] = 'I collegamenti con le risorse condivise di Windows funzionano solo con Microsoft Internet Explorer.
+Puoi fare un copia/incolla di questo collegamento.';
+$lang['js']['mu_btn'] = 'Carica più di un file alla volta';
+$lang['mediausage'] = 'Usa la seguente sintassi per riferirti a questo file:';
+$lang['mediaview'] = 'Mostra file originale';
+$lang['mediaroot'] = 'directory principale';
+$lang['mediaupload'] = 'Carica un file nella categoria corrente. Per creare sottocategorie, falle precedere al nome del file nella casella "Carica come", separandole da due punti (:).';
+$lang['mediaextchange'] = 'Estensione del file modificata da .%s a .%s!';
+$lang['reference'] = 'Riferimenti a';
+$lang['ref_inuse'] = 'Il file non può essere cancellato in quanto è ancora utilizzato dalle seguenti pagine:';
+$lang['ref_hidden'] = 'Sono presenti alcuni riferimenti a pagine per le quali non hai i permessi di lettura';
+$lang['hits'] = 'Occorrenze trovate';
+$lang['quickhits'] = 'Pagine trovate';
+$lang['toc'] = 'Indice';
+$lang['current'] = 'versione corrente';
+$lang['yours'] = 'la tua versione';
+$lang['diff'] = 'differenze con la versione attuale';
+$lang['diff2'] = 'differenze tra le versioni selezionate';
+$lang['line'] = 'Linea';
+$lang['breadcrumb'] = 'Traccia';
+$lang['youarehere'] = 'Ti trovi qui';
+$lang['lastmod'] = 'Ultima modifica';
+$lang['by'] = 'da';
+$lang['deleted'] = 'cancellata';
+$lang['created'] = 'creata';
+$lang['restored'] = 'versione precedente ripristinata';
+$lang['external_edit'] = 'modifica esterna';
+$lang['summary'] = 'Oggetto della modifica';
+$lang['noflash'] = 'E\' necessario <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> per visualizzare questo contenuto.';
+$lang['download'] = 'Scarica lo "snippet"';
+$lang['mail_newpage'] = 'pagina aggiunta:';
+$lang['mail_changed'] = 'pagina modificata:';
+$lang['mail_new_user'] = 'Nuovo utente:';
+$lang['mail_upload'] = 'file caricato:';
+$lang['qb_bold'] = 'Grassetto';
+$lang['qb_italic'] = 'Corsivo';
+$lang['qb_underl'] = 'Sottolineato';
+$lang['qb_code'] = 'Codice';
+$lang['qb_strike'] = 'Barrato';
+$lang['qb_h1'] = 'Intestazione di livello 1';
+$lang['qb_h2'] = 'Intestazione di livello 2';
+$lang['qb_h3'] = 'Intestazione di livello 3';
+$lang['qb_h4'] = 'Intestazione di livello 4';
+$lang['qb_h5'] = 'Intestazione di livello 5';
+$lang['qb_h'] = 'Titolo';
+$lang['qb_hs'] = 'Seleziona il titolo';
+$lang['qb_hplus'] = 'Titolo superiore';
+$lang['qb_hminus'] = 'Titolo inferiore';
+$lang['qb_hequal'] = 'Titolo dello stesso livello';
+$lang['qb_link'] = 'Collegamento interno';
+$lang['qb_extlink'] = 'Collegamento esterno';
+$lang['qb_hr'] = 'Riga orizzontale';
+$lang['qb_ol'] = 'Elenco numerato';
+$lang['qb_ul'] = 'Elenco puntato';
+$lang['qb_media'] = 'Inserisci immagini o altri file';
+$lang['qb_sig'] = 'Inserisci la firma';
+$lang['qb_smileys'] = 'Smiley';
+$lang['qb_chars'] = 'Caratteri speciali';
+$lang['js']['del_confirm'] = 'Cancellare questa voce?';
+$lang['admin_register'] = 'Aggiungi un nuovo utente';
+$lang['metaedit'] = 'Modifica metadati';
+$lang['metasaveerr'] = 'Scrittura metadati fallita';
+$lang['metasaveok'] = 'Metadati salvati';
+$lang['img_backto'] = 'Torna a';
+$lang['img_title'] = 'Titolo';
+$lang['img_caption'] = 'Descrizione';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nome File';
+$lang['img_fsize'] = 'Dimensione';
+$lang['img_artist'] = 'Autore';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords'] = 'Parole chiave';
+$lang['subscribe_success'] = '%s è stato aggiunto alla lista di sottoscrizione per la pagina %s';
+$lang['subscribe_error'] = 'Si è verificato un errore durante l\'aggiunta di %s alla lista di sottoscrizione per la pagina %s';
+$lang['subscribe_noaddress'] = 'Non c\'è alcun indirizzo associato con il tuo profilo, non puoi sottoscriverti ad alcuna lista';
+$lang['unsubscribe_success'] = '%s è stato rimosso dalla lista di sottoscrizione per la pagina %s';
+$lang['unsubscribe_error'] = 'Si è verificato un errore durante la rimozione di %s dalla lista di sottoscrizione per la pagina %s';
+$lang['authmodfailed'] = 'La configurazione dell\'autenticazione non è corretta. Per favore informa l\'amministratore di questo Wiki.';
+$lang['authtempfail'] = 'L\'autenticazione è temporaneamente non disponibile. Se questa situazione persiste, per favore informa l\'amministratore di questo Wiki.';
+$lang['i_chooselang'] = 'Scegli la lingua';
+$lang['i_installer'] = 'Installazione DokuWiki';
+$lang['i_wikiname'] = 'Nome Wiki';
+$lang['i_enableacl'] = 'Abilita ACL (consigliato)';
+$lang['i_superuser'] = 'Amministratore';
+$lang['i_problems'] = 'Si sono verificati problemi durante l\'installazione, indicati di seguito. Non è possibile continuare finché non saranno risolti.';
+$lang['i_modified'] = 'Per motivi di sicurezza questa procedura funziona solamente con un\'installazione Dokuwiki nuova e non modificata.
+ Dovresti ri-estrarre i file dal pacchetto scaricato oppure consultare tutte le
+ <a href="http://dokuwiki.org/install">istruzioni per l\'installazione di Dokuwiki</a>';
+$lang['i_funcna'] = 'La funzione PHP <code>%s</code> non è disponibile. Forse il tuo provider l\'ha disabilitata per qualche motivo?';
+$lang['i_phpver'] = 'La versione di PHP <code>%s</code> è inferiore a quella richiesta <code>%s</code>. Devi aggiornare l\'installazione di PHP.';
+$lang['i_permfail'] = 'DokuWiki non può scrivere <code>%s</code>. E\' necessario correggere i permessi per questa directory!';
+$lang['i_confexists'] = '<code>%s</code> esiste già';
+$lang['i_writeerr'] = 'Impossibile creare <code>%s</code>. E\' necessario verificare i permessi della directory/file e creare il file manualmente.';
+$lang['i_badhash'] = 'dokuwiki.php (hash=<code>%s</code>) non riconosciuto o modificato';
+$lang['i_badval'] = '<code>%s</code> - valore vuoto o non valido';
+$lang['i_success'] = 'La configurazione è stata completata correttamente. E\' ora possibile cancellare il file install.php. Continuare con
+ <a href="doku.php">il nuovo DokuWiki</a>.';
+$lang['i_failure'] = 'Si sono verificati errori durante la scrittura dei file di configurazione. Potrebbe essere necessario correggerli manualmente prima di poter utilizzare <a href="doku.php">il nuovo DokuWiki</a>.';
+$lang['i_policy'] = 'Policy di accesso iniziali';
+$lang['i_pol0'] = 'Wiki Aperto (lettura, scrittura, caricamento file per tutti)';
+$lang['i_pol1'] = 'Wiki Pubblico (lettura per tutti, scrittura e caricamento file per gli utenti registrati)';
+$lang['i_pol2'] = 'Wiki Chiuso (lettura, scrittura, caricamento file solamente per gli utenti registrati)';
+$lang['i_retry'] = 'Riprova';
+$lang['mu_intro'] = 'Qui si possono caricare più di un file alla volta. Cliccare su "Sfoglia..." per aggiungere i file in coda. Cliccare "Carica" quando si è pronti.';
+$lang['mu_gridname'] = 'Nome del file';
+$lang['mu_gridsize'] = 'Dimensione';
+$lang['mu_gridstat'] = 'Stato';
+$lang['mu_namespace'] = 'Namespace';
+$lang['mu_browse'] = 'Sfoglia...';
+$lang['mu_toobig'] = 'troppo grande';
+$lang['mu_ready'] = 'pronto per l\'upload';
+$lang['mu_done'] = 'completo';
+$lang['mu_fail'] = 'fallito';
+$lang['mu_authfail'] = 'sessione scaduta';
+$lang['mu_progress'] = '@PCT@% caricato';
+$lang['mu_filetypes'] = 'Tipi di file permessi';
+$lang['mu_info'] = 'file caricati.';
+$lang['recent_global'] = 'Stai attualmente vedendo le modifiche dentro l\'area <b>%s</b>. Puoi anche <a href="%s">vedere le modifiche recenti dell\'intero wiki</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt
new file mode 100644
index 000000000..a655ffcd3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt
@@ -0,0 +1,3 @@
+====== Pagina bloccata ======
+
+Questa pagina è attualmente bloccata poiché un altro utente sta effettuando delle modifiche. Devi attendere che l'utente concluda le modifiche o che il blocco scada.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt
new file mode 100644
index 000000000..6487c8537
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+Non sei ancora collegato! Inserisci il tuo nome utente e la tua password per autenticarti. E' necessario che il tuo browser abbia i cookie abilitati.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt
new file mode 100644
index 000000000..ee6e958b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt
@@ -0,0 +1,16 @@
+Una pagina su DokuWiki è stata aggiunta o modificata. Questi sono i dettagli:
+
+Data : @DATE@
+Browser : @BROWSER@
+Indirizzo IP : @IPADDRESS@
+Nome host : @HOSTNAME@
+Vecchia revisione : @OLDPAGE@
+Nuova revisione : @NEWPAGE@
+Oggetto della modifica : @SUMMARY@
+
+@DIFF@
+
+
+--
+Questa e-mail è stata generata da DokuWiki su
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt
new file mode 100644
index 000000000..d41601cfb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt
@@ -0,0 +1,3 @@
+====== Questo argomento non esiste ancora ======
+
+Hai seguito un collegamento ad un argomento che non è ancora stato creato. Se vuoi puoi crearlo tu stesso usando il pulsante ''Crea questa pagina''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt
new file mode 100644
index 000000000..91ef751f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt
@@ -0,0 +1,3 @@
+====== Revisione inesistente ======
+
+La revisione richiesta non esiste. Usa il pulsante ''Revisioni precedenti'' per ottenere una lista di revisioni precedenti di questo documento.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt
new file mode 100644
index 000000000..c3cf35246
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt
@@ -0,0 +1,5 @@
+====== Anteprima ======
+
+Questa è un'anteprima di come apparirà il tuo testo. Attenzione: **la pagina non è ancora stata salvata**!.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt
new file mode 100644
index 000000000..5437d077c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt
@@ -0,0 +1,15 @@
+Ciao @FULLNAME@!
+
+Qualcuno ha richiesto una nuova password per il tuo @TITLE@
+login su @DOKUWIKIURL@
+
+Se non hai richiesto tu la nuova password ignora questa email.
+
+Per confermare che la richiesta è stata realmente inviata da te per favore usa il
+seguente link.
+
+@CONFIRM@
+
+--
+Questa mail è stata generata da DokuWiki su
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt
new file mode 100644
index 000000000..0a7245404
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt
@@ -0,0 +1 @@
+Questa pagina è in sola lettura. Puoi visualizzare il sorgente, ma non puoi modificarlo. Contatta l'amministratore se pensi che ci sia un errore.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt
new file mode 100644
index 000000000..4c29a9d52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt
@@ -0,0 +1,4 @@
+====== Ultime modifiche ======
+
+Queste sono le ultime pagine modificate.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt
new file mode 100644
index 000000000..973aead78
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt
@@ -0,0 +1,4 @@
+====== Registrazione nuovo utente ======
+
+Riempi tutte le informazioni seguenti per creare un nuovo account in questo wiki. Assicurati di inserire un **indirizzo e-mail valido** - la tua nuova password ti sarà inviata con un messaggio di posta elettronica. La login dovrebbe essere un [[doku>pagename|nome di pagina]] valido.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt
new file mode 100644
index 000000000..5a9f89344
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt
@@ -0,0 +1,14 @@
+Un nuovo utente è stato registrato. Ecco i dettagli:
+
+Nome utente : @NEWUSER@
+Nome completo : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Data : @DATE@
+Browser : @BROWSER@
+Indirizzo IP : @IPADDRESS@
+Nome macchina : @HOSTNAME@
+
+--
+Questa mail è stata generata da DokuWiki su
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt
new file mode 100644
index 000000000..fc3f09414
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Invia nuova password ======
+
+Riempi tutte le informazioni seguenti per ottenere una nuova password per il tuo account su questo wiki. La nuova password sarà inviata al tuo indirizzo di posta elettronica registrato. Il nome utente deve essere il tuo nome utente di questo wiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt
new file mode 100644
index 000000000..984b4a068
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt
@@ -0,0 +1,3 @@
+====== Versione precedente ======
+
+Queste sono le precedenti versioni del documento corrente. Per ripristinare una versione precedente, seleziona la versione, modificala usando il pulsante ''Modifica questa pagina'' e salvala.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt
new file mode 100644
index 000000000..60a019c3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt
@@ -0,0 +1,5 @@
+====== Cerca ======
+
+Questi sono i risultati della ricerca. Se non hai trovato quello che cercavi, puoi creare una nuova pagina con questo titolo usando il pulsante ''Crea questa pagina''.
+
+===== Risultati =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt
new file mode 100644
index 000000000..7c184f206
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt
@@ -0,0 +1,2 @@
+**Questa è una vecchia versione del documento!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt
new file mode 100644
index 000000000..a6aa1cfc6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt
@@ -0,0 +1,119 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+adesso
+alla
+allo
+allora
+altre
+altri
+altro
+anche
+ancora
+avere
+aveva
+avevano
+ben
+buono
+che
+chi
+cinque
+comprare
+con
+consecutivi
+consecutivo
+cosa
+cui
+del
+della
+dello
+dentro
+deve
+devo
+doppio
+due
+ecco
+fare
+fine
+fino
+fra
+gente
+giu
+hai
+hanno
+indietro
+invece
+lavoro
+lei
+loro
+lui
+lungo
+meglio
+molta
+molti
+molto
+nei
+nella
+noi
+nome
+nostro
+nove
+nuovi
+nuovo
+oltre
+ora
+otto
+peggio
+pero
+persone
+piu
+poco
+primo
+promesso
+qua
+quarto
+quasi
+quattro
+quello
+questo
+qui
+quindi
+quinto
+rispetto
+sara
+secondo
+sei
+sembra
+sembrava
+senza
+sette
+sia
+siamo
+siete
+solo
+sono
+sopra
+soprattutto
+sotto
+stati
+stato
+stesso
+su
+subito
+sul
+sulla
+tanto
+tempo
+terzo
+tra
+tre
+triplo
+ultimo
+una
+uno
+va
+vai
+voi
+volte
+vostro
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt
new file mode 100644
index 000000000..a211ef2e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt
@@ -0,0 +1,18 @@
+Ciao!
+
+La pagina @PAGE@ di @TITLE@ wiki è stata aggiornata.
+Qui sotto sono elencate le modifiche apportate:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Per cancellare la tua sottoscrizione alla lista di controllo
+per questa pagina collegati al wiki
+@DOKUWIKIURL@ poi spostati su
+@NEWPAGE@
+e seleziona 'Cancella sottoscrizione'.
+
+--
+Questa email è stata generata da DokuWiki su
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt
new file mode 100644
index 000000000..71157a2ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Aggiorna il profilo del tuo account ======
+
+E' necessario compilare solo i campi che desideri modificare. Non puoi cambiare il tuo nome utente.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt
new file mode 100644
index 000000000..56cebc6b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt
@@ -0,0 +1,14 @@
+Un file è stato caricato sul tuo DokuWiki. Seguono i dettagli:
+
+File : @MEDIA@
+Data : @DATE@
+Browser : @BROWSER@
+Indirizzo IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Dimensione : @SIZE@
+MIME Type : @MIME@
+Utente : @USER@
+
+--
+Questa email è stata generata dal DokuWiki di
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt
new file mode 100644
index 000000000..510d6521d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt
@@ -0,0 +1,4 @@
+====== Modifica bloccata ======
+
+Le tue modifiche **non sono state salvate** perché contengono una o più parole vietate. Se hai cercato di spammare il Wiki -- bambino cattivo! Se pensi che sia un errore contatta l'amministratore di questo Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt
new file mode 100644
index 000000000..b0c6d34ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt
@@ -0,0 +1,4 @@
+====== 管ç†è€…メニュー ======
+
+DokuWikiã§ç®¡ç†ã§ãるタスクã®ä¸€è¦§ã§ã™
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt
new file mode 100644
index 000000000..1708bbb3c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt
@@ -0,0 +1 @@
+===== 追加プラグイン ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt
new file mode 100644
index 000000000..69644b79d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt
@@ -0,0 +1,4 @@
+====== ãƒãƒƒã‚¯ãƒªãƒ³ã‚¯ ======
+
+å…ˆã»ã©ã®æ–‡æ›¸ã«ãƒªãƒ³ã‚¯ã—ã¦ã„る文書ã®ãƒªã‚¹ãƒˆã§ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt
new file mode 100644
index 000000000..099b5989a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt
@@ -0,0 +1,6 @@
+====== æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒå­˜åœ¨ã—ã¾ã™ ======
+
+編集中ã«ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã“ã®æ–‡æ›¸ã‚’æ›´æ–°ã—ãŸãŸã‚ã€æ–°ã—ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®æ–‡æ›¸ãŒå­˜åœ¨ã—ã¾ã™ã€‚
+
+以下ã«æ–‡æ›¸é–“ã®å·®åˆ†ã‚’表示ã™ã‚‹ã®ã§ã€ã©ã¡ã‚‰ã‹ã®æ–‡æ›¸ã‚’é¸æŠžã—ã¦ãã ã•ã„。''ä¿å­˜'' ã‚’é¸æŠžã™ã‚‹ã¨ç¾åœ¨ç·¨é›†ä¸­ã®æ–‡æ›¸ãŒä¿å­˜ã•ã‚Œã¾ã™ã€‚''キャンセル'' ã¯ç·¨é›†ä¸­ã®æ–‡æ›¸ãŒç ´æ£„ã•ã‚Œã¾ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt
new file mode 100644
index 000000000..d170aebe4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt
@@ -0,0 +1,4 @@
+====== アクセスãŒæ‹’å¦ã•ã‚Œã¾ã—㟠======
+
+実行ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。ログインã•ã‚Œã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt
new file mode 100644
index 000000000..fe5f6b165
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt
@@ -0,0 +1,4 @@
+====== 差分 ======
+
+ã“ã®æ–‡æ›¸ã®ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã¨é¸æŠžã—ãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®å·®åˆ†ã‚’表示ã—ã¾ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt
new file mode 100644
index 000000000..af3160b8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt
@@ -0,0 +1,6 @@
+====== ドラフトファイルãŒå­˜åœ¨ã—ã¾ã™ ======
+
+ã“ã®ãƒšãƒ¼ã‚¸ã«å¯¾ã™ã‚‹æœ€å¾Œã®ç·¨é›†ã¯æ­£ã—ã終了ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚ ãã®ç·¨é›†ä½œæ¥­ã‚’引ã続ãè¡Œãˆã‚‹ã‚ˆã†ã€ä»¥ä¸‹ã«ç¤ºã™å†…容ãŒè‡ªå‹•çš„ã«ä¿å­˜ã•ã‚Œã¦ã„ã¾ã™ã€‚
+
+ã“ã®è‡ªå‹•çš„ã«ä¿å­˜ã•ã‚ŒãŸç·¨é›†å†…容ã«å¯¾ã—ã¦ã€//復元ã™ã‚‹//ã€//削除ã™ã‚‹//〠もã—ãã¯ã“ã®ãƒšãƒ¼ã‚¸ã®ç·¨é›†ã‚’//キャンセル//ã—ã¦ä¸‹ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt
new file mode 100644
index 000000000..e7a8f9720
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt
@@ -0,0 +1,4 @@
+編集ã—ã¦''ä¿å­˜''をクリックã—ã¦ãã ã•ã„。Wikiã®æ§‹æ–‡ã«ã¤ã„ã¦ã¯ [[wiki:syntax]] ã‚’å‚考ã«ã—ã¦ãã ã•ã„
+
+当然ã®ã“ã¨ã§ã™ãŒã€ã“ã®æ–‡æ›¸ã®è³ªã‚’ **å‘上** ã•ã›ã‚‹å ´åˆã®ã¿ç·¨é›†ã—ã¦ãã ã•ã„。もã—編集方法や構文を練習ã—ãŸã„ã®ã§ã‚れ㰠[[playground:playground]] を利用ã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt
new file mode 100644
index 000000000..7c984131c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt
@@ -0,0 +1,2 @@
+**å¤ã„リビジョンã®æ–‡æ›¸ã‚’é–‹ã„ã¦ã„ã¾ã™** ã‚‚ã—ã“ã®ã¾ã¾ä¿å­˜ã™ã‚‹ã¨ã€ã“ã®æ–‡æ›¸ãŒæœ€æ–°ã¨ãªã‚Šã¾ã™ã€‚
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt
new file mode 100644
index 000000000..b5fbac97d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt
@@ -0,0 +1,4 @@
+====== 索引 ======
+
+[[doku>namespaces|åå‰ç©ºé–“]] ã«åŸºã¥ãã€å…¨ã¦ã®æ–‡æ›¸ã®ç´¢å¼•ã§ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html
new file mode 100644
index 000000000..7439d27e1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html
@@ -0,0 +1,14 @@
+<p>ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€<a href="http://dokuwiki.org">Dokuwiki</a>ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã¨åˆæœŸè¨­å®šã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ã€‚
+ã“ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã«é–¢ã™ã‚‹è©³ç´°ã¯ <a href="http://dokuwiki.org/installer">documentation page</a> ã‚’å‚考ã«ã—ã¦ãã ã•ã„。</p>
+
+<p>DokuWikiã¯ã€é€šå¸¸ã®ãƒ•ã‚¡ã‚¤ãƒ«ã«Wikiページã®å†…容ã¨é–¢é€£ã™ã‚‹æƒ…報(例ãˆã°ã€ç”»åƒã€æ¤œç´¢ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã€å¤ã„リビジョンãªã©ï¼‰ã‚’ä¿å­˜ã—ã¾ã™ã€‚
+ãã®ãŸã‚ã€DokuWikiを使用ã™ã‚‹ãŸã‚ã«ã¯ã€ãれらã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã«æ›¸ãè¾¼ã¿ã®æ¨©é™ãŒ<strong>å¿…ãš</strong>å¿…è¦ã¨ãªã‚Šã¾ã™ã€‚
+ã“ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã§ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®æ¨©é™ã®å¤‰æ›´ã¯è¡Œãˆãªã„ãŸã‚ã€ã‚³ãƒžãƒ³ãƒ‰ã‚·ã‚§ãƒ«ã§æ¨©é™ã®å¤‰æ›´ã‚’直接行ã†ã‹ã€
+ホスティングサービスを利用ã—ã¦ã„ã‚‹å ´åˆã¯ãã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ãƒ‘ãƒãƒ«ã‚‚ã—ãã¯FTPを通ã—ã¦ã€æ¨©é™ã®å¤‰æ›´ã‚’è¡Œã£ã¦ãã ã•ã„。</p>
+
+<p>DokuWikiã¯ã€ãƒ—ラグインã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã€Wikiページã¸ã®ã‚¢ã‚¯ã‚»ã‚¹åˆ¶é™ã€è¨­å®šã®å¤‰æ›´ã‚’管ç†ã™ã‚‹æ©Ÿèƒ½ã‚’有ã—ã¦ãŠã‚Šã€
+ãã®æ©Ÿèƒ½ã‚’有効ã«ã™ã‚‹ãŸã‚ã«å¿…è¦ãª <acronym title="access control list">ACL</acronym> ã®è¨­å®šãŒã€ã“ã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ãƒ¼ã«ã‚ˆã£ã¦è¡Œã‚ã‚Œã¾ã™ã€‚
+ã“ã®ç®¡ç†æ©Ÿèƒ½ã¯ã€DokuWikiを使用ã™ã‚‹ä¸Šã§å¿…è¦ã§ã¯ã‚ã‚Šã¾ã›ã‚“ãŒã€DokuWikiã®ç®¡ç†ã‚’ç°¡å˜ã«ã—ã¦ãã‚Œã¾ã™ã€‚</p>
+
+<p>従æ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’使用ã—ã¦ã„るユーザーや特別ãªã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ãŒå¿…è¦ãªå ´åˆã¯ã€æ¬¡ã®ãƒªãƒ³ã‚¯å…ˆã‚’å‚考ã«ã—ã¦ä¸‹ã•ã„
+(<a href="http://dokuwiki.org/install">installation instructions</a>, <a href="http://dokuwiki.org/config">configuration settings</a>)。</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php
new file mode 100644
index 000000000..1f6681af1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php
@@ -0,0 +1,249 @@
+<?php
+/**
+ * japanese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Yuji Takenaka <webmaster@davilin.com>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
+ * @author Daniel Dupriest <kououken@gmail.com>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = '文書ã®ç·¨é›†';
+$lang['btn_source'] = 'ソースã®è¡¨ç¤º';
+$lang['btn_show'] = '文書ã®è¡¨ç¤º';
+$lang['btn_create'] = '文書ã®ä½œæˆ';
+$lang['btn_search'] = '検索';
+$lang['btn_save'] = 'ä¿å­˜';
+$lang['btn_preview'] = 'プレビュー';
+$lang['btn_top'] = '文書ã®å…ˆé ­ã¸';
+$lang['btn_newer'] = '<< より新ã—ã„';
+$lang['btn_older'] = 'よりå¤ã„ >>';
+$lang['btn_revs'] = '以å‰ã®ãƒªãƒ“ジョン';
+$lang['btn_recent'] = '最近ã®å¤‰æ›´';
+$lang['btn_upload'] = 'アップロード';
+$lang['btn_cancel'] = 'キャンセル';
+$lang['btn_index'] = '索引';
+$lang['btn_secedit'] = '編集';
+$lang['btn_login'] = 'ログイン';
+$lang['btn_logout'] = 'ログアウト';
+$lang['btn_admin'] = '管ç†';
+$lang['btn_update'] = 'æ›´æ–°';
+$lang['btn_delete'] = '削除';
+$lang['btn_back'] = '戻る';
+$lang['btn_backlink'] = 'ãƒãƒƒã‚¯ãƒªãƒ³ã‚¯';
+$lang['btn_backtomedia'] = 'メディアファイルé¸æŠžã«æˆ»ã‚‹';
+$lang['btn_subscribe'] = '変更履歴é…ä¿¡ã®ç™»éŒ²';
+$lang['btn_unsubscribe'] = '変更履歴é…ä¿¡ã®è§£é™¤';
+$lang['btn_subscribens'] = 'åå‰ç©ºé–“変更é…ä¿¡ã®ç™»éŒ²';
+$lang['btn_unsubscribens'] = 'åå‰ç©ºé–“変更é…ä¿¡ã®è§£é™¤';
+$lang['btn_profile'] = 'ユーザー情報ã®æ›´æ–°';
+$lang['btn_reset'] = 'リセット';
+$lang['btn_resendpwd'] = 'パスワードå†ç™ºè¡Œ';
+$lang['btn_draft'] = 'ドラフトを編集';
+$lang['btn_recover'] = 'ドラフトを復元';
+$lang['btn_draftdel'] = 'ドラフトを削除';
+$lang['btn_revert'] = 'å…ƒã«æˆ»ã™';
+$lang['loggedinas'] = 'よã†ã“ã';
+$lang['user'] = 'ユーザーå';
+$lang['pass'] = 'パスワード';
+$lang['newpass'] = 'æ–°ã—ã„パスワード';
+$lang['oldpass'] = 'ç¾åœ¨ã®ãƒ‘スワード';
+$lang['passchk'] = '確èª';
+$lang['remember'] = 'ユーザーåã¨ãƒ‘スワードを記憶ã™ã‚‹';
+$lang['fullname'] = 'フルãƒãƒ¼ãƒ ';
+$lang['email'] = 'メールアドレス';
+$lang['register'] = 'ユーザー登録';
+$lang['profile'] = 'ユーザー情報';
+$lang['badlogin'] = 'ユーザーåã‹ãƒ‘スワードãŒé•ã„ã¾ã™ã€‚';
+$lang['minoredit'] = 'å°å¤‰æ›´';
+$lang['draftdate'] = 'ドラフトä¿å­˜æ—¥æ™‚:';
+$lang['nosecedit'] = 'ページ内容ãŒå¤‰æ›´ã•ã‚Œã¦ã„ã¾ã™ãŒã‚»ã‚¯ã‚·ãƒ§ãƒ³æƒ…å ±ãŒå¤ã„ãŸã‚ã€ä»£ã‚ã‚Šã«ãƒšãƒ¼ã‚¸å…¨ä½“をロードã—ã¾ã—ãŸã€‚';
+$lang['regmissing'] = 'å…¨ã¦ã®é …目を入力ã—ã¦ãã ã•ã„。';
+$lang['reguexists'] = 'ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¯æ—¢ã«å­˜åœ¨ã—ã¦ã„ã¾ã™ã€‚';
+$lang['regsuccess'] = 'æ–°ã—ã„ユーザーãŒä½œæˆã•ã‚Œã¾ã—ãŸã€‚パスワードã¯ç™»éŒ²ã—ãŸãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹å®›ã¦ã«é€ä»˜ã•ã‚Œã¾ã™ã€‚';
+$lang['regsuccess2'] = 'æ–°ã—ã„ユーザーãŒä½œæˆã•ã‚Œã¾ã—ãŸã€‚';
+$lang['regmailfail'] = 'パスワードã®ãƒ¡ãƒ¼ãƒ«é€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ãŠæ‰‹æ•°ã§ã™ãŒç®¡ç†è€…ã¾ã§é€£çµ¡ã‚’ãŠé¡˜ã„ã—ã¾ã™ã€‚';
+$lang['regbadmail'] = 'メールアドレスãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。';
+$lang['regbadpass'] = '確èªç”¨ã®ãƒ‘スワードãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。';
+$lang['regpwmail'] = 'ã‚ãªãŸã® DokuWiki パスワード';
+$lang['reghere'] = 'ã”自分用ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’å–ã£ã¦ã¿ã¦ã¯å¦‚何ã§ã™ã‹ï¼Ÿ';
+$lang['profna'] = 'ユーザー情報ã®å¤‰æ›´ã¯å‡ºæ¥ã¾ã›ã‚“';
+$lang['profnochange'] = '変更点ã¯ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚';
+$lang['profnoempty'] = 'ユーザーåã¨ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ä¸‹ã•ã„。';
+$lang['profchanged'] = 'ユーザー情報ã¯æ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['pwdforget'] = 'パスワードをãŠå¿˜ã‚Œã§ã™ã‹ï¼Ÿãƒ‘スワードå†ç™ºè¡Œ';
+$lang['resendna'] = 'パスワードã®å†ç™ºè¡Œã¯å‡ºæ¥ã¾ã›ã‚“。';
+$lang['resendpwd'] = 'æ–°ã—ã„パスワードをé€ä¿¡ã—ã¾ã™ï¼š';
+$lang['resendpwdmissing'] = 'å…¨ã¦ã®é …目を入力ã—ã¦ä¸‹ã•ã„。';
+$lang['resendpwdnouser'] = '入力ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚';
+$lang['resendpwdbadauth'] = '申ã—訳ã‚ã‚Šã¾ã›ã‚“。ã“ã®ç¢ºèªã‚³ãƒ¼ãƒ‰ã¯æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。メール内ã«è¨˜è¼‰ã•ã‚ŒãŸãƒªãƒ³ã‚¯ã‚’確èªã—ã¦ãã ã•ã„。';
+$lang['resendpwdconfirm'] = '確èªç”¨ã®ãƒªãƒ³ã‚¯ã‚’å«ã‚“ã ãƒ¡ãƒ¼ãƒ«ã‚’é€ä¿¡ã—ã¾ã—ãŸã€‚';
+$lang['resendpwdsuccess'] = 'æ–°ã—ã„パスワードãŒãƒ¡ãƒ¼ãƒ«ã§é€ä¿¡ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['license'] = '特ã«æ˜Žç¤ºã•ã‚Œã¦ã„ãªã„é™ã‚Šã€æœ¬Wikiã®å†…容ã¯æ¬¡ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã«å¾“ã„ã¾ã™ï¼š';
+$lang['licenseok'] = '注æ„: 本ページを編集ã™ã‚‹ã“ã¨ã¯ã€ã‚ãªãŸã®ç·¨é›†ã—ãŸå†…容ãŒæ¬¡ã®ãƒ©ã‚¤ã‚»ãƒ³ã‚¹ã«å¾“ã†ã“ã¨ã«åŒæ„ã—ãŸã‚‚ã®ã¨ã¿ãªã—ã¾ã™ï¼š';
+$lang['searchmedia'] = '検索ファイルå:';
+$lang['searchmedia_in'] = '%s 内を検索';
+$lang['txt_upload'] = 'アップロードã™ã‚‹ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸ã‚“ã§ãã ã•ã„。';
+$lang['txt_filename'] = 'åå‰ã‚’変更ã—ã¦ã‚¢ãƒƒãƒ—ロード(オプション)';
+$lang['txt_overwrt'] = '既存ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’上書ã';
+$lang['lockedby'] = 'ã“ã®æ–‡æ›¸ã¯æ¬¡ã®ãƒ¦ãƒ¼ã‚¶ã«ã‚ˆã£ã¦ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™';
+$lang['lockexpire'] = 'ロック期é™ï¼š';
+$lang['willexpire'] = '編集中ã®æ–‡æ›¸ã¯ãƒ­ãƒƒã‚¯æœŸé™ã‚’éŽãŽã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã¾ã¾ãƒ­ãƒƒã‚¯ã™ã‚‹å ´åˆã¯ã€ä¸€åº¦æ–‡æ›¸ã®ç¢ºèªã‚’è¡Œã£ã¦æœŸé™ã‚’リセットã—ã¦ãã ã•ã„。';
+$lang['notsavedyet'] = '変更ã¯ä¿å­˜ã•ã‚Œã¾ã›ã‚“。ã“ã®ã¾ã¾å‡¦ç†ã‚’続ã‘ã¦ã‚ˆã‚ã—ã„ã§ã™ã‹ï¼Ÿ';
+$lang['rssfailed'] = 'RSSã®å–り出ã—ã«å¤±æ•—ã—ã¾ã—ãŸï¼š';
+$lang['nothingfound'] = '該当文書ã¯ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚';
+$lang['mediaselect'] = 'メディアファイルをé¸æŠž';
+$lang['fileupload'] = 'メディアファイルをアップロード';
+$lang['uploadsucc'] = 'アップロード完了';
+$lang['uploadfail'] = 'アップロードã«å¤±æ•—ã—ã¾ã—ãŸã€‚権é™ãŒã‚ã‚Šã¾ã›ã‚“。';
+$lang['uploadwrong'] = 'アップロードã¯æ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚ã“ã®æ‹¡å¼µå­ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。';
+$lang['uploadexist'] = 'åŒåã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒå­˜åœ¨ã™ã‚‹ãŸã‚ã€ã‚¢ãƒƒãƒ—ロードã§ãã¾ã›ã‚“。';
+$lang['uploadbadcontent'] = 'アップロードã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã®å†…容ã¯ã€æ‹¡å¼µå­ %s ã¨ä¸€è‡´ã—ã¾ã›ã‚“。';
+$lang['uploadspam'] = 'スパムブラックリストã«ã‚ˆã‚Šã‚¢ãƒƒãƒ—ロードãŒé®æ–­ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['uploadxss'] = '悪æ„ã®ã‚る内容ã§ã‚ã‚‹å¯èƒ½æ€§ã«ã‚ˆã‚Šã€ã‚¢ãƒƒãƒ—ロードãŒé®æ–­ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['uploadsize'] = 'アップロードã—よã†ã¨ã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯å¤§ãã™ãŽã¾ã™ï¼ˆæœ€å¤§ %s)。';
+$lang['deletesucc'] = 'ファイル "%s" ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['deletefail'] = 'ファイル "%s" ãŒå‰Šé™¤ã§ãã¾ã›ã‚“。権é™ã‚’確èªã—ã¦ä¸‹ã•ã„。';
+$lang['mediainuse'] = 'ファイル "%s" ã¯ä½¿ç”¨ä¸­ã®ãŸã‚ã€å‰Šé™¤ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚';
+$lang['namespaces'] = 'åå‰ç©ºé–“';
+$lang['mediafiles'] = '有効ãªãƒ•ã‚¡ã‚¤ãƒ«ï¼š';
+$lang['js']['searchmedia'] = 'ファイル検索';
+$lang['js']['keepopen'] = 'é¸æŠžä¸­ã¯ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ãªã„';
+$lang['js']['hidedetails'] = '詳細をéžè¡¨ç¤º';
+$lang['js']['nosmblinks'] = 'ウィンドウズã®å…±æœ‰ãƒ•ã‚©ãƒ«ãƒ€ã¸ãƒªãƒ³ã‚¯ã¯ Microsoft Internet Explorer ã§ã®ã¿å¯èƒ½ã¨ãªã‚Šã¾ã™ã€‚
+当然ã€ã‚«ãƒƒãƒˆã‚¢ãƒ³ãƒ‰ãƒšãƒ¼ã‚¹ãƒˆãŒä½¿ç”¨ã§ãã¾ã™ã€‚';
+$lang['js']['linkwiz'] = 'リンクウィザード';
+$lang['js']['linkto'] = 'リンク先:';
+$lang['js']['del_confirm'] = 'é¸æŠžã—ãŸé …目を本当ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ';
+$lang['js']['mu_btn'] = '複数ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’一度ã«ã‚¢ãƒƒãƒ—ロード';
+$lang['mediausage'] = 'ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’使用ã™ã‚‹ãŸã‚ã«ã¯æ¬¡ã®æ–‡æ³•ã‚’使用ã™ã‚‹ï¼š';
+$lang['mediaview'] = 'オリジナルファイルを閲覧';
+$lang['mediaroot'] = 'ルート';
+$lang['mediaupload'] = 'ファイルをç¾åœ¨ã®åå‰ç©ºé–“ã«ã‚¢ãƒƒãƒ—ロードã—ã¾ã™ã€‚副åå‰ç©ºé–“を使用ã™ã‚‹å ´åˆã«ã¯ã€ãƒ•ã‚¡ã‚¤ãƒ«åã®å‰ã«ã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã£ã¦è¿½åŠ ã—ã¦ãã ã•ã„。';
+$lang['mediaextchange'] = 'æ‹¡å¼µå­ãŒ .%s ã‹ã‚‰ .%s ã¸å¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚';
+$lang['reference'] = 'å‚照先';
+$lang['ref_inuse'] = 'ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€æ¬¡ã®ãƒšãƒ¼ã‚¸ã§ä½¿ç”¨ä¸­ã®ãŸã‚削除ã§ãã¾ã›ã‚“。';
+$lang['ref_hidden'] = 'ã“ã®ãƒšãƒ¼ã‚¸ã«å­˜åœ¨ã™ã‚‹ã„ãã¤ã‹ã®å‚照先ã¯ã€æ¨©é™ãŒç„¡ã„ãŸã‚読むã“ã¨ãŒã§ãã¾ã›ã‚“。';
+$lang['hits'] = 'ヒット';
+$lang['quickhits'] = 'マッãƒã—ãŸæ–‡æ›¸å';
+$lang['toc'] = '目次';
+$lang['current'] = 'ç¾åœ¨';
+$lang['yours'] = 'ã‚ãªãŸã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³';
+$lang['diff'] = 'ç¾åœ¨ã®ãƒªãƒ“ジョンã¨ã®å·®åˆ†ã‚’表示';
+$lang['diff2'] = 'é¸æŠžã—ãŸãƒªãƒ“ジョン間ã®å·®åˆ†ã‚’表示';
+$lang['line'] = 'ライン';
+$lang['breadcrumb'] = 'トレース';
+$lang['youarehere'] = 'ç¾åœ¨ä½ç½®';
+$lang['lastmod'] = '最終更新';
+$lang['by'] = 'by';
+$lang['deleted'] = '削除';
+$lang['created'] = '作æˆ';
+$lang['restored'] = '以å‰ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’復元';
+$lang['external_edit'] = '外部編集';
+$lang['summary'] = '編集ã®æ¦‚è¦';
+$lang['noflash'] = 'ã“ã®å†…容を表示ã™ã‚‹ãŸã‚ã«ã¯ <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> ãŒå¿…è¦ã§ã™ã€‚';
+$lang['download'] = 'ã“ã®éƒ¨åˆ†ã‚’ダウンロード';
+$lang['mail_newpage'] = '文書ã®è¿½åŠ ï¼š';
+$lang['mail_changed'] = '文書ã®å¤‰æ›´ï¼š';
+$lang['mail_new_user'] = 'æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ï¼š';
+$lang['mail_upload'] = 'ファイルã®ã‚¢ãƒƒãƒ—ロード:';
+$lang['qb_bold'] = '太字';
+$lang['qb_italic'] = '斜体';
+$lang['qb_underl'] = '下線';
+$lang['qb_code'] = 'コード';
+$lang['qb_strike'] = '打消線';
+$lang['qb_h1'] = '第一見出ã—';
+$lang['qb_h2'] = '第二見出ã—';
+$lang['qb_h3'] = '第三見出ã—';
+$lang['qb_h4'] = '第四見出ã—';
+$lang['qb_h5'] = '第五見出ã—';
+$lang['qb_h'] = '見出ã—';
+$lang['qb_hs'] = '見出ã—é¸æŠž';
+$lang['qb_hplus'] = '上ã®éšŽå±¤ã®è¦‹å‡ºã—';
+$lang['qb_hminus'] = '下ã®éšŽå±¤ã®è¦‹å‡ºã—';
+$lang['qb_hequal'] = 'åŒã˜éšŽå±¤ã®è¦‹å‡ºã—';
+$lang['qb_link'] = '内部リンク';
+$lang['qb_extlink'] = '外部リンク';
+$lang['qb_hr'] = '横罫線';
+$lang['qb_ol'] = '記å·ä»˜ãリスト';
+$lang['qb_ul'] = '記å·ãªã—リスト';
+$lang['qb_media'] = 'イメージやファイルã®è¿½åŠ ';
+$lang['qb_sig'] = 'ç½²åã®æŒ¿å…¥';
+$lang['qb_smileys'] = 'スマイリー';
+$lang['qb_chars'] = '特殊文字';
+$lang['upperns'] = '上ã®éšŽå±¤ã®åå‰ç©ºé–“ã¸';
+$lang['admin_register'] = 'æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ä½œæˆ';
+$lang['metaedit'] = 'メタデータ編集';
+$lang['metasaveerr'] = 'メタデータã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸ';
+$lang['metasaveok'] = 'メタデータã¯ä¿å­˜ã•ã‚Œã¾ã—ãŸ';
+$lang['img_backto'] = '戻る';
+$lang['img_title'] = 'タイトル';
+$lang['img_caption'] = '見出ã—';
+$lang['img_date'] = '日付';
+$lang['img_fname'] = 'ファイルå';
+$lang['img_fsize'] = 'サイズ';
+$lang['img_artist'] = '作æˆè€…';
+$lang['img_copyr'] = '著作権';
+$lang['img_format'] = 'フォーマット';
+$lang['img_camera'] = '使用カメラ';
+$lang['img_keywords'] = 'キーワード';
+$lang['subscribe_success'] = '変更履歴é…ä¿¡ã®ç™»éŒ²ãŒå®Œäº†ã—ã¾ã—ãŸã€‚';
+$lang['subscribe_error'] = '変更履歴é…ä¿¡ã®ç™»éŒ²ã«å¤±æ•—ã—ã¾ã—ãŸã€‚';
+$lang['subscribe_noaddress'] = 'ログインã—ã¦ã„ãªã„ãŸã‚ã€å¤‰æ›´å±¥æ­´é…ä¿¡ã«ç™»éŒ²ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。';
+$lang['unsubscribe_success'] = '変更履歴é…ä¿¡ã®è§£é™¤ãŒå®Œäº†ã—ã¾ã—ãŸã€‚';
+$lang['unsubscribe_error'] = '変更履歴é…ä¿¡ã®è§£é™¤ã«å¤±æ•—ã—ã¾ã—ãŸã€‚';
+$lang['authmodfailed'] = 'ユーザーèªè¨¼ã®è¨­å®šãŒæ­£ã—ãã‚ã‚Šã¾ã›ã‚“。Wikiã®ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ä¸‹ã•ã„。';
+$lang['authtempfail'] = 'ユーザーèªè¨¼ãŒä¸€æ™‚çš„ã«ä½¿ç”¨ã§ããªããªã£ã¦ã„ã¾ã™ã€‚ã“ã®çŠ¶æ…‹ãŒç¶šã„ã¦ã„るよã†ã§ã‚ã‚Œã°ã€Wikiã®ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ä¸‹ã•ã„。';
+$lang['i_chooselang'] = '使用言語をé¸æŠžã—ã¦ãã ã•ã„';
+$lang['i_installer'] = 'DokuWiki インストーラー';
+$lang['i_wikiname'] = 'Wikiå';
+$lang['i_enableacl'] = 'ACL(アクセス管ç†ï¼‰ã‚’使用ã™ã‚‹ï¼ˆæŽ¨å¥¨ï¼‰';
+$lang['i_superuser'] = 'スーパーユーザー';
+$lang['i_problems'] = 'å•é¡ŒãŒç™ºè¦‹ã•ã‚Œã¾ã—ãŸã€‚以下ã«ç¤ºã™å•é¡Œã‚’解決ã™ã‚‹ã¾ã§ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚’続行ã§ãã¾ã›ã‚“。';
+$lang['i_modified'] = 'セキュリティã®ç†ç”±ã‹ã‚‰ã€æ–°è¦ã‚‚ã—ãã¯ã‚«ã‚¹ã‚¿ãƒžã‚¤ã‚ºã—ã¦ã„ãªã„ DokuWiki ã«å¯¾ã—ã¦ã®ã¿ã€ã“ã®ã‚¹ã‚¯ãƒªãƒ—トã¯æœ‰åŠ¹ã§ã™ã€‚
+ ダウンロードã—ãŸãƒ‘ッケージをå†è§£å‡ã—ã¦ä½¿ç”¨ã™ã‚‹ã‹ã€
+ <a href="http://dokuwiki.org/install">Dokuwiki インストールガイド</a>ã‚’å‚考ã«ã—ã¦ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ãã ã•ã„。';
+$lang['i_funcna'] = 'PHPã®é–¢æ•° <code>%s</code> ãŒä½¿ç”¨ã§ãã¾ã›ã‚“。ホスティング会社ãŒä½•ã‚‰ã‹ã®ç†ç”±ã§ç„¡åŠ¹ã«ã—ã¦ã„ã‚‹æã‚ŒãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['i_phpver'] = 'PHPã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ <code>%s</code> ãŒå¿…è¦ãªãƒãƒ¼ã‚¸ãƒ§ãƒ³ <code>%s</code> より以å‰ã®ã‚‚ã®ã§ã™ã€‚PHPã®ã‚¢ãƒƒãƒ—グレードãŒå¿…è¦ã§ã™ã€‚';
+$lang['i_permfail'] = '<code>%s</code> ã«æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“。ã“ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®æ¨©é™ã‚’確èªã—ã¦ä¸‹ã•ã„。';
+$lang['i_confexists'] = '<code>%s</code> ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™';
+$lang['i_writeerr'] = '<code>%s</code> を作æˆã§ãã¾ã›ã‚“。ディレクトリã¨ãƒ•ã‚¡ã‚¤ãƒ«ã®æ¨©é™ã‚’確èªã—ã€ãれらを手動ã§ä½œæˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['i_badhash'] = 'dokuwiki.php ãŒèªè­˜ã§ããªã„ã‹ã€ç·¨é›†ã•ã‚Œã¦ã„ã¾ã™ï¼ˆhash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - æ­£ã—ããªã„ã€ã‚‚ã—ãã¯å€¤ãŒç©ºã§ã™';
+$lang['i_success'] = '設定ファイルã¯æ­£ã—ã作æˆã•ã‚Œã¾ã—ãŸã€‚<a href="doku.php">作æˆã—㟠DokuWiki</a>を使用ã™ã‚‹ã«ã¯ install.php を削除ã—ã¦ãã ã•ã„。';
+$lang['i_failure'] = '設定ファイルã®ä½œæˆä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚<a href="doku.php">作æˆã—㟠DokuWiki</a>を使用ã™ã‚‹å‰ã«ã€ãれらã®å•é¡Œã‚’手動ã§ä¿®æ­£ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['i_policy'] = 'ACLåˆæœŸè¨­å®š';
+$lang['i_pol0'] = 'オープン Wiki(全ã¦ã®äººã«ã€é–²è¦§ãƒ»æ›¸ãè¾¼ã¿ãƒ»ã‚¢ãƒƒãƒ—ロードを許å¯ï¼‰';
+$lang['i_pol1'] = 'パブリック Wiki(閲覧ã¯å…¨ã¦ã®äººãŒå¯èƒ½ã€æ›¸ãè¾¼ã¿ãƒ»ã‚¢ãƒƒãƒ—ロードã¯ç™»éŒ²ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿ï¼‰';
+$lang['i_pol2'] = 'クローズド Wiki (登録ユーザーã«ã®ã¿ä½¿ç”¨ã‚’許å¯)';
+$lang['i_retry'] = 'å†è©¦è¡Œ';
+$lang['mu_intro'] = '複数ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’一度ã«ã‚¢ãƒƒãƒ—ロードã§ãã¾ã™ã€‚ブラウズボタンをクリックã—ã¦ãƒ•ã‚¡ã‚¤ãƒ«ã‚’追加ã—ã¦ãã ã•ã„。追加ã—ãŸã‚‰ã€ã‚¢ãƒƒãƒ—ロードボタンをクリックã—ã¦ãã ã•ã„。';
+$lang['mu_gridname'] = 'ファイルå';
+$lang['mu_gridsize'] = 'サイズ';
+$lang['mu_gridstat'] = 'ステータス';
+$lang['mu_namespace'] = 'åå‰ç©ºé–“';
+$lang['mu_browse'] = 'ブラウズ';
+$lang['mu_toobig'] = '大ãã™ãŽã¾ã™';
+$lang['mu_ready'] = 'アップロードã§ãã¾ã™';
+$lang['mu_done'] = '完了';
+$lang['mu_fail'] = '失敗';
+$lang['mu_authfail'] = 'セッション期é™åˆ‡ã‚Œ';
+$lang['mu_progress'] = '@PCT@% アップロード完了';
+$lang['mu_filetypes'] = '使用ã§ãるファイル形å¼';
+$lang['mu_info'] = 'ファイルアップロード完了';
+$lang['mu_lasterr'] = 'ç›´è¿‘ã®ã‚¨ãƒ©ãƒ¼ï¼š';
+$lang['recent_global'] = 'ç¾åœ¨ã€<b>%s</b> åå‰ç©ºé–“内ã®å¤‰æ›´ç‚¹ã‚’閲覧中ã§ã™ã€‚<a href="%s">Wiki全体ã®æœ€è¿‘ã®å¤‰æ›´ç‚¹ã‚’確èªã™ã‚‹</a>ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚';
+$lang['years'] = '%då¹´å‰';
+$lang['months'] = '%dカ月å‰';
+$lang['weeks'] = '%d週間å‰';
+$lang['days'] = '%dæ—¥å‰';
+$lang['hours'] = '%d時間å‰';
+$lang['minutes'] = '%d分å‰';
+$lang['seconds'] = '%d秒å‰';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt
new file mode 100644
index 000000000..1c37c93d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt
@@ -0,0 +1,3 @@
+====== 文書ロック中 ======
+
+ã“ã®æ–‡æ›¸ã¯ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã£ã¦ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚編集ãŒå®Œäº†ã™ã‚‹ã‹ã€ãƒ­ãƒƒã‚¯ã®æœŸé™ãŒåˆ‡ã‚Œã‚‹ã®ã‚’å¾…ã£ã¦ä¸‹ã•ã„。
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt
new file mode 100644
index 000000000..ef18d378e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt
@@ -0,0 +1,4 @@
+====== ログイン ======
+
+ユーザーåã¨ãƒ‘スワードを入力ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„(クッキーを有効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ï¼‰ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt
new file mode 100644
index 000000000..09688cbb7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt
@@ -0,0 +1,17 @@
+DokuWiki 内ã®æ–‡æ›¸ãŒè¿½åŠ ã‚‚ã—ãã¯å¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚詳細ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
+
+日付 : @DATE@
+ブラウザ : @BROWSER@
+IPアドレス : @IPADDRESS@
+ホストå : @HOSTNAME@
+å‰ãƒªãƒ“ジョン: @OLDPAGE@
+新リビジョン: @NEWPAGE@
+編集ã®ã‚µãƒžãƒª: @SUMMARY@
+ユーザーå : @USER@
+
+@DIFF@
+
+
+--
+ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯æ¬¡ã®DokuWikiより自動的ã«é€ä¿¡ã•ã‚Œã¦ã„ã¾ã™ã€‚
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt
new file mode 100644
index 000000000..d03169f8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt
@@ -0,0 +1,4 @@
+====== ã“ã®ãƒˆãƒ”ックã«ã¯æ–‡æ›¸ãŒå­˜åœ¨ã—ã¾ã›ã‚“ ======
+
+ã“ã®ãƒˆãƒ”ックã«æ–‡æ›¸ãŒä½œæˆã•ã‚Œã¦ã„ã¾ã›ã‚“。 ã‚‚ã—ã€æ–‡æ›¸ä½œæˆã®æ¨©é™ãŒã‚ã‚‹å ´åˆã¯ã€''文書ã®ä½œæˆ''をクリックã—㦠最åˆã®æ–‡æ›¸ã‚’作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt
new file mode 100644
index 000000000..48ccde700
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt
@@ -0,0 +1,4 @@
+====== リビジョンãŒå­˜åœ¨ã—ã¾ã›ã‚“ ======
+
+指定ã•ã‚ŒãŸãƒªãƒ“ジョン存在ã—ã¾ã›ã‚“。''以å‰ã®ãƒªãƒ“ジョン''をクリックã—ã¦ç¢ºèªã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt
new file mode 100644
index 000000000..ee839cd06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt
@@ -0,0 +1,4 @@
+====== プレビュー ======
+
+編集中ã®æ–‡æ›¸ã®ãƒ—レビューã§ã™ã€‚確èªç”¨ãªã®ã§**ä¿å­˜ã•ã‚Œã¦ã„ãªã„**ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt
new file mode 100644
index 000000000..98ccfcdea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt
@@ -0,0 +1,13 @@
+ã“ã‚“ã«ã¡ã¯ @FULLNAME@ ã•ã‚“
+
+@TITLE@(@DOKUWIKIURL@)ã«æ–°è¦ãƒ‘スワード発行ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒã‚ã‚Šã¾ã—ãŸã€‚
+
+ã‚‚ã—ã“ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«è¦šãˆãŒç„¡ã‘ã‚Œã°ã€ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯ç„¡è¦–ã—ã¦ãã ã•ã„。
+
+ã“ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’è¡Œã£ãŸæœ¬äººã§ã‚ã‚Œã°ã€ä»¥ä¸‹ã®ãƒªãƒ³ã‚¯ã‹ã‚‰ä½œæ¥­ã‚’完了ã•ã›ã¦ãã ã•ã„。
+
+@CONFIRM@
+
+--
+ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯æ¬¡ã®DokuWikiより自動的ã«é€ä¿¡ã•ã‚Œã¦ã„ã¾ã™ã€‚
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt
new file mode 100644
index 000000000..14137cc14
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt
@@ -0,0 +1,2 @@
+ã“ã®æ–‡æ›¸ã¯èª­å–専用ã§ã™ã€‚文書ã®ã‚½ãƒ¼ã‚¹ã‚’閲覧ã™ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã™ãŒã€å¤‰æ›´ã¯ã§ãã¾ã›ã‚“。もã—変更ã—ãŸã„å ´åˆã¯ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt
new file mode 100644
index 000000000..d18fd1bc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt
@@ -0,0 +1,5 @@
+====== 最近ã®å¤‰æ›´ ======
+
+以下ã®æ–‡æ›¸ã¯æœ€è¿‘æ›´æ–°ã•ã‚ŒãŸã‚‚ã®ã§ã™ã€‚
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt
new file mode 100644
index 000000000..b242d1e88
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt
@@ -0,0 +1,4 @@
+====== æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ç™»éŒ² ======
+
+ã“ã®Wikiã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ç™»éŒ²ã‚’è¡Œã†ãŸã‚ã«ã¯ã€ä»¥ä¸‹ã®æƒ…報を全ã¦å…¥åŠ›ã—ã¦ä¸‹ã•ã„。 ã‚‚ã—以下ã®é …ç›®ã«ãƒ‘スワードãŒå­˜åœ¨ã—ãªã„å ´åˆã€ãƒ‘スワードã¯ãƒ¡ãƒ¼ãƒ«ã«ã¦é€ä¿¡ã•ã‚Œã¾ã™ã®ã§ã€ å¿…ãš**有効ãª**メールアドレスを入力ã—ã¦ãã ã•ã„。 ã¾ãŸã€ãƒ­ã‚°ã‚¤ãƒ³å㯠[[doku>pagename|pagename]] ã«æº–æ‹ ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt
new file mode 100644
index 000000000..2b272de40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt
@@ -0,0 +1,14 @@
+æ–°ã—ã„ユーザーãŒç™»éŒ²ã•ã‚Œã¾ã—ãŸã€‚ユーザー情報ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
+
+ユーザーå : @NEWUSER@
+フルãƒãƒ¼ãƒ  : @NEWNAME@
+メールアドレス : @NEWEMAIL@
+
+登録日 : @DATE@
+ブラウザ : @BROWSER@
+IPアドレス : @IPADDRESS@
+ホストå : @HOSTNAME@
+
+--
+ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯æ¬¡ã®DokuWikiより自動的ã«é€ä¿¡ã•ã‚Œã¦ã„ã¾ã™ã€‚
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt
new file mode 100644
index 000000000..23dd6ff1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt
@@ -0,0 +1,4 @@
+====== パスワードå†ç™ºè¡Œ ======
+
+ã“ã®Wikiã§ä½¿ç”¨ã™ã‚‹æ–°ã—ã„パスワードをリクエストã™ã‚‹ãŸã‚ã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åを入力ã—ã¦ä¸‹ã•ã„。 新パスワード発行リクエストã®ç¢ºèªãƒ¡ãƒ¼ãƒ«ãŒã€ç™»éŒ²ã•ã‚Œã¦ã„るメールアドレスã«é€ä¿¡ã•ã‚Œã¾ã™ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt
new file mode 100644
index 000000000..e43731ccd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt
@@ -0,0 +1,4 @@
+====== 以å‰ã®ãƒªãƒ“ジョン ======
+
+以下ã¯ã“ã®æ–‡æ›¸ã®ä»¥å‰ã®ãƒªãƒ“ジョンã§ã™ã€‚復元ã™ã‚‹ã«ã¯''文書ã®ç·¨é›†''をクリックã€ãã®å¾Œä¿å­˜ã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt
new file mode 100644
index 000000000..af312728b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt
@@ -0,0 +1,5 @@
+====== 検索 ======
+
+以下ã«æ¤œç´¢çµæžœã‚’表示ã—ã¾ã™ã€‚ã‚‚ã—ã€æŽ¢ã—ã¦ã„ã‚‹ã‚‚ã®ãŒè¦‹ã¤ã‹ã‚‰ãªã„å ´åˆã€ 検索キーワードã«ã¡ãªã‚“ã åå‰ã®æ–‡æ›¸ã‚’作æˆã‚‚ã—ãã¯ç·¨é›†ã‚’è¡Œã£ã¦ãã ã•ã„。
+
+===== çµæžœ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt
new file mode 100644
index 000000000..d8ce4784e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt
@@ -0,0 +1,2 @@
+**以å‰ã®ãƒªãƒ“ジョンã®æ–‡æ›¸ã§ã™**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt
new file mode 100644
index 000000000..628e46ebe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt
@@ -0,0 +1,29 @@
+# 以下ã¯ã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ä½œæˆæ™‚ã«ç„¡è¦–ã™ã‚‹èªžå¥ã®ãƒªã‚¹ãƒˆã§ã™ã€‚一行ã«ä¸€å˜èªžãšã¤è¨˜å…¥ã—ã¦ãã ã•ã„。
+# UNIXã§ç”¨ã„られる改行コード(LF)を使用ã—ã¦ãã ã•ã„
+# 3文字より短ã„語å¥ã¯è‡ªå‹•çš„ã«ç„¡è¦–ã•ã‚Œã‚‹ã®ã§ã€ãƒªã‚¹ãƒˆã«åŠ ãˆã‚‹å¿…è¦ã¯ã‚ã‚Šã¾ã›ã‚“。
+# ã“ã®ãƒªã‚¹ãƒˆã¯æ¬¡ã®ã‚µã‚¤ãƒˆã‚’ã‚‚ã¨ã«ä½œæˆã•ã‚Œã¦ã„ã¾ã™ï¼ˆhttp://www.ranks.nl/stopwords/)
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt
new file mode 100644
index 000000000..d18ffe36d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt
@@ -0,0 +1,16 @@
+ã“ã‚“ã«ã¡ã¯
+
+@TITLE@ 内ã®ãƒšãƒ¼ã‚¸ @PAGE@ ã¯å¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚
+変更内容ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+ページ変更履歴é…信サービスã®è§£é™¤ã¯ã€
+@DOKUWIKIURL@ ã® @NEWPAGE@
+ã«ã‚ã‚‹'変更履歴é…ä¿¡ã®è§£é™¤'ã§è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+--
+ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯æ¬¡ã®DokuWikiより自動的ã«é€ä¿¡ã•ã‚Œã¦ã„ã¾ã™ã€‚
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt
new file mode 100644
index 000000000..e83d92965
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt
@@ -0,0 +1,5 @@
+====== アカウント情報更新 ======
+
+変更ã—ãŸã„項目を入力ã—ã¦ä¸‹ã•ã„。ユーザーåã¯å¤‰æ›´ã§ãã¾ã›ã‚“。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt
new file mode 100644
index 000000000..53f30db61
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt
@@ -0,0 +1,14 @@
+ãŠä½¿ã„ã®DokuWikiã«ãƒ•ã‚¡ã‚¤ãƒ«ãŒã‚¢ãƒƒãƒ—ロードã•ã‚Œã¾ã—ãŸã€‚詳細ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
+
+ファイル : @MEDIA@
+日付 : @DATE@
+ブラウザ : @BROWSER@
+IPアドレス : @IPADDRESS@
+ホストå : @HOSTNAME@
+サイズ : @SIZE@
+MIMEタイプ : @MIME@
+ユーザーå : @USER@
+
+--
+ã“ã®ãƒ¡ãƒ¼ãƒ«ã¯æ¬¡ã®DokuWikiより自動的ã«é€ä¿¡ã•ã‚Œã¦ã„ã¾ã™ã€‚
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt
new file mode 100644
index 000000000..d7edd8765
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt
@@ -0,0 +1,4 @@
+====== スパム ブロック ======
+
+除外ã™ã‚‹å˜èªžãŒå«ã¾ã‚Œã¦ã„ã‚‹ãŸã‚ã€å¤‰æ›´ã¯**ä¿å­˜ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ**。 ã‚‚ã—æ„図ã—ãŸã‚¹ãƒ‘ム行為ã§ãªã„ã®ã§ã‚ã‚Œã°ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt
new file mode 100644
index 000000000..29338b2e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt
@@ -0,0 +1,3 @@
+====== អ្នកគ្រោង ======
+ážáž¶áž„ក្រោមជាប្រដបប្រដារបស់អ្នកគ្រោង ឌោគូវីគី។
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt
new file mode 100644
index 000000000..f28068a58
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt
@@ -0,0 +1,5 @@
+====== ážáŸ’សែដំណរក្រោយ ======
+áž“áŸáŸ‡áž‡áž¶áž‘ំពáŸážšážŠáŸ‚លមានដំណរបណ្ážáž–ីទំពáŸážšáž¥áž¡áž¼ážœáŸ”
+====== Backlinks ======
+This is a list of pages that seem to link back to the current page.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt
new file mode 100644
index 000000000..7b95fda65
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt
@@ -0,0 +1,3 @@
+====== មានបុនរាព្រឹážáŸ’ážáž·ážáŸ’មីៗ ======
+មានបុនរាព្រឹážáŸ’ážáž·ážáŸ’មី
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt
new file mode 100644
index 000000000..58b10ee86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt
@@ -0,0 +1,3 @@
+====== បដិសáŸáž’អនុញ្ញាហ======
+សូមទុស អ្នកគ្មានអនុញ្ញាážáž‘ៅបណ្ážáž‘áŸáŸ”
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt
new file mode 100644
index 000000000..516ea3779
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt
@@ -0,0 +1,3 @@
+កែážáž˜áŸ’រូវទំពáŸážšáž“áŸáŸ‡áž áž¾áž™ ចុច«រក្សាážáž»áž€Â»áŸ” មើល [[wiki:syntax|វាក្យ​សម្ពន្ធ]] ជាកម្នូវីគី។
+សំកែសម្រួលបើអ្នកអាច**ច្នៃចរើន**វា។ បើអ្នកចង់សាកពិសោážáž¢áŸ’វីមួយ សំរៀននៅក្នុង
+[[playground:playground|playground]]។
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt
new file mode 100644
index 000000000..097c1dae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt
@@ -0,0 +1,2 @@
+**អ្នក ឯក្សារចាស់!** បើអ្នករក្សាវា អ្នកគុង់ážáŸ‚បង្កើហážáŸ’មីជាមួយទិន្ននáŸáž™áž“áŸáŸ‡áŸ”
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt
new file mode 100644
index 000000000..350050837
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt
@@ -0,0 +1,2 @@
+====== លិបិក្រម ======
+áž“áŸáŸ‡áž‡áž¶áž›áž·áž”ិក្រមទំពáŸážšáž‘ាំងឡាយបញ្ជាដោយ [[doku>wiki:namespaces|នាមážáž¶áž“]]។
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php
new file mode 100644
index 000000000..a8257255f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php
@@ -0,0 +1,230 @@
+<?php
+/**
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <henke@cosmocode.de>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Ratana Lim <aerorat@yahoo.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '«';
+$lang['doublequoteclosing'] = '»';
+$lang['singlequoteopening'] = '‘';//&lsquo;
+$lang['singlequoteclosing'] = '’';//&rsquo;
+$lang['apostrophe'] = '’';//&rsquo;
+
+$lang['btn_edit'] = 'កែទំពáŸážšáž“áŸáŸ‡';
+$lang['btn_source'] = 'បង្ហាងប្រភពទំពáŸážš';
+$lang['btn_show'] = 'បង្ហាងទំពáŸážš';
+$lang['btn_create'] = 'បង្កើážáž‘ំពáŸážšáž“áŸáŸ‡';
+$lang['btn_search'] = 'ស្វែងរក';
+$lang['btn_save'] = 'រក្សាទុក';
+$lang['btn_preview']= 'បង្ហាញ';
+$lang['btn_top'] = 'ទៅលើ';
+$lang['btn_newer'] = '<<ទំពáŸážšáž‘ំនើប';
+$lang['btn_older'] = 'ទំពáŸážšážáŸ’មែសមáŸáž™>>';
+$lang['btn_revs'] = 'ទំពáŸážšáž…ាស់ៗ';
+$lang['btn_recent'] = 'ទំពáŸážšážáŸ’មីៗ';
+$lang['btn_upload'] = 'ដាកលើង';
+$lang['btn_cancel'] = 'បោះបង់';
+$lang['btn_index'] = 'លិបិក្រម';
+$lang['btn_secedit']= 'កែ';
+$lang['btn_login'] = 'កážáŸ‹áž…ូល';
+$lang['btn_logout'] = 'កážáŸ‹áž…áŸáž‰';
+$lang['btn_admin'] = 'អ្នកគ្រប់គ្រង';
+$lang['btn_update'] = 'កែឡើង';
+$lang['btn_delete'] = 'លុបចោល';
+$lang['btn_back'] = 'ážáŸ’រឡប់';
+$lang['btn_backlink'] = 'ážáŸ’សែចំណងក្រោយ';
+$lang['btn_backtomedia'] = 'ទៅប្រពáŸáž“ឯកសាវិញ';
+$lang['btn_subscribe'] = 'ដាក់ដំណឹងផ្លស់ប្ážáž¼ážš';
+$lang['btn_unsubscribe'] = 'ដកដំណឹងផ្លស់ប្ážáž¼ážš';
+$lang['btn_profile'] = 'កែប្រវážáŸ’ážáž·ážšáž¼áž”';
+$lang['btn_reset'] = 'កមណážáŸ‹áž¡áž¾áž„រិញ';
+$lang['btn_resendpwd'] = 'ផ្ញើពាក្សសម្ងាážáŸ‹';
+$lang['btn_draft'] = 'កែគំរោង';
+$lang['btn_recover'] = 'ស្រោះគំរោងឡើង';
+$lang['btn_draftdel'] = 'លុបគំរោង';
+
+$lang['loggedinas'] = 'អ្នកប្រើ';
+$lang['user'] = 'នាមបម្រើ';
+$lang['pass'] = 'ពាក្សសម្ងážáŸ‹';
+$lang['newpass'] = 'ពាក្សសម្ងាážáŸ‹ážáŸ’មី';
+$lang['oldpass'] = 'បន្ជាកពាក្សសម្ងាážáŸ‹';
+$lang['passchk'] = 'ម្ដងទាáž';
+$lang['remember'] = 'ចំណាំážáŸ’ញុំ';
+$lang['fullname'] = 'នាមážáŸ’រគោល';
+$lang['email'] = 'អ៊ីមែល';
+$lang['register'] = 'ចុះឈ្មោះ';//'Register';
+$lang['profile'] = 'ប្រវážáŸ’ážáž·ážšáž¼áž”';// 'User Profile';
+$lang['badlogin'] = 'សុំអាទោស​ នាមបំរើ ឬ ពាក្សសម្ងាážáž˜áž·áž“ážáŸ’រវទáŸáŸ”';
+$lang['minoredit'] = 'កែបបណ្ážáž·áž…បណ្ážáž½áž…';// 'Minor Changes';
+$lang['draftdate'] = 'គំរោង កážáŸ‹ážŸáŸ’ážœáŸáž™áž”្រវážáŸ’áž';
+
+$lang['regmissing'] = 'សុំអាទោស​ អ្នកážáŸ’រវបំពáŸáž‰áž€áŸ’របវាល។';
+$lang['reguexists'] = 'សុំអាទោស​ នាមប្រើនáŸáŸ‡áž˜áž¶áž“រួចហើ។';
+$lang['regsuccess'] = 'អ្នកប្រើបានបង្កើážáž áž¾áž™ និងពាក្សសម្ងាážáž€áŸáž”ានផ្ញើទៀážáŸ”';
+$lang['regsuccess2']= 'អ្នកប្រើបានបង្កើážáž áž¾áž™áŸ”';
+$lang['regmailfail']= 'មើលទៅដុចជាមានកំហុសក្នុង....សុំទាកទងអ្នកក្របក្រង';
+$lang['regbadmail'] = 'អ៊ីមáŸáž›áž¢áŸ’នកសាសáŸáž˜áž·áž“ážáŸ’រូវបញ្ជរ&mdash;បើអ្នកកិážážáž¶áž“áŸáŸ‡áž‡áž¶áž€áŸ†áž áž»ážŸáž”ដិបážáŸ’ážáž· សុំទាកទងអ្នកក្របគ្រោង។';
+$lang['regbadpass'] = 'គូពាក្សសម្ងាážáž˜áž·áž“ដូចគ្នាទ០សមសាកទៀážáŸ”';
+$lang['regpwmail'] = 'ពាក្សសម្ងាážáž¢áŸ’នក';
+$lang['reghere'] = 'អ្នកឥážáž˜áž¶áž“បញ្ជីនាមបម្រើទáŸ? សុំចល់ចុះឈ្មោះធ្វើគណនីសម្របប្រើប្រស';
+
+$lang['profna'] = 'មិនអាចកែ';
+$lang['profnochange'] = 'ឥážáž•áŸ’លាស់ប្ដូរ ក្មានអ្វីធ្វើទáŸáŸ”';
+$lang['profnoempty'] = 'នាមáŸáž¬áž¢áž¸áž˜áŸáž›áž‘áž‘áŸ';
+$lang['profchanged'] = 'ប្រវážáŸ’ážáž·ážšáž¼áž”អ្នកប្រើបាន ។';
+
+$lang['pwdforget'] = 'ភ្លិចពាក្សសម្ងាážáŸ‹ យកមួយទាážáŸ”';
+$lang['resendna'] = 'វីគីនáŸáŸ‡áž˜áž·áž“ឧបរំផ្ញើពាក្សសម្ងាážáž˜áŸ’ដងទៀážáž‘áŸáŸ”';
+$lang['resendpwd'] = 'ផ្ញើពាក្សសម្ងាážáž²áŸ’áž™';
+$lang['resendpwdmissing'] = 'សុំអាទោស​ អ្នកážáŸ’រវបំពáŸáž‰ážœáž¶áž›áŸ”';
+$lang['resendpwdnouser'] = 'សុំអាទោស​ យាងរកអ្នកប្រើមិនឃើងទáŸáŸ”';
+$lang['resendpwdbadauth'] = 'សុំអាទោស​ រហស្សលáŸážáž¢áž“ុញ្ញាážáž–ំអាចប្រើបានទáŸáŸ” ážáŸ’សែបន្áž';
+$lang['resendpwdconfirm'] ='ážáŸ’សែបន្áž';
+$lang['resendpwdsuccess'] = 'ពាក្សសម្ងាážáž¢áŸ’នកបានផ្ញើហើយ។';
+
+$lang['txt_upload'] = 'ជ្រើសឯកសារដែលរុញ​ឡើង';
+$lang['txt_filename'] = 'រុញឡើងជា (ស្រáŸáž…​ចិážáŸ’áž)';
+$lang['txt_overwrt'] = 'កážáŸ‹áž–ីលើ';//'Overwrite existing file';
+$lang['lockedby'] = 'ឥឡូវនáŸáŸ‡áž…កជាប់​';
+$lang['lockexpire'] = 'សោជាប់ផុážâ€‹áž€áŸ†ážŽážáŸ‹áž˜áŸ‰áŸ„áž„';
+$lang['willexpire'] = 'សោអ្នកចំពោះកែážáž˜áŸ’រូវទំពáŸážšáž“áŸáŸ‡ ហួសពែលក្នុងមួយនាទី។\nកុំឲ្យមានជម្លោះ ប្រើ «បង្ហាញ»​ ទៅកំណážáŸ‹â€‹áž¡áž¾áž„​វិញ។';
+
+$lang['notsavedyet'] = 'កម្រែមិនទានរុក្សាទកážáŸ’រូវបោះបង់។\nបន្ážáž‘ៅទាឬទáŸ?';
+$lang['rssfailed'] = 'មានកំហុសពáŸáž›áž‘ៅ​ប្រមូល​យកមážáž·â€‹áž–áŸážáŸŒáž˜áž¶áž“៖ ';
+$lang['nothingfound']= 'រកមិនឃើញអ្វីទáŸáŸ”';
+
+$lang['mediaselect'] = 'ឯកសារមីឌៀ';
+$lang['fileupload'] = 'រុញឯកសារមីឌៀឡើង';
+$lang['uploadsucc'] = 'រុញចូលមានជáŸáž™';
+$lang['uploadfail'] = 'រុញឡើងបរាជáŸáž™áŸ” ប្រហែលážáž»ážŸážŸáž·áž‘្ឋានុញ្ញាáž?';
+$lang['uploadwrong'] = 'រុញឡើងážáŸ’រូវ​បាន​បដិសáŸáž’។ ឯកសារ';
+$lang['uploadexist'] = 'ឯកសារមានហើយ។ ឥážáž˜áž¶áž“ធ្វើអ្វីទáŸáŸ”';
+$lang['uploadbadcontent'] = 'ធាážáž»áž…ំរុញឡើងមិនážáŸ’រូវកន្ទុយឯកសារ %s áž‘áŸáŸ”';
+$lang['uploadspam'] = 'ចំរុញឡើង បង្ážáž¶áŸ†áž„ ដៅយ ';
+$lang['uploadxss'] = 'ចំរុញឡើង បង្ážáž¶áŸ†áž„ ';
+$lang['deletesucc'] = 'ឯកសារ «%s» បានលុបហើយ។';
+$lang['deletefail'] = '«%s» មិនអាចលុបទáŸ&mdashមើល';
+$lang['mediainuse'] = 'ឯកសារ «%s» ឥážáž‘ានលុបទáŸ&mdashមានគáŸáž€áŸ†áž—áž„áž‘áŸáž‡áž¶áž”់ប្រើ។';
+$lang['namespaces'] = 'នាមដ្ឋាន';
+$lang['mediafiles'] = 'ឯកសារទំនáŸáž“ៅក្នុង';
+
+$lang['js']['keepopen'] = 'ទុកបង្អួចបើក áž–áŸáž›áž€áž¶ážšáž‡áž˜áŸ’រើស';
+$lang['js']['hidedetails'] = 'បាំង';
+$lang['mediausage'] = 'ប្រើ';
+$lang['mediaview'] = 'មើលឯកសារដើម';
+$lang['mediaroot'] = 'ឫស';
+$lang['mediaupload'] = 'រុញឯកសារឡើងទៅនាមដ្ឋាននáŸáŸ‡áŸ” នាមដ្ឋាន «រុញឡើង»';
+$lang['mediaextchange'] = 'កន្ទុយឯកសារផ្លាសពី «%s» ទៅ «%s»!';
+
+$lang['reference'] = 'អនុសាសនចំពោះ';
+$lang['ref_inuse'] = 'ឯកសារមិនអាចលុបពីព្រោះវានៅចាប់ប្រើដៅទំពáŸážšáŸ–';
+$lang['ref_hidden'] = 'អនុសាសនážáŸ’លះនៅលើទំពáŸážšáž¢áŸ’នកគ្មានសáŸáž’អនុញ្ញាáž';
+
+$lang['hits'] = 'ážáŸ’រូវ';
+$lang['quickhits'] = 'ឈ្មោះទំពáŸážšáž”្រៀបដូច';
+$lang['toc'] = 'មាážáž·áž€áž¶';
+$lang['current'] = 'ឥឡៅវ';
+$lang['yours'] = 'ážáŸ†ážŽáŸ‚អ្នាក';
+$lang['diff'] = 'បង្ហាងអសទិសភាពជាមួយážáŸ†ážŽáŸ‚ឥឡូវ ';
+$lang['line'] = 'ážáŸ’សែ';
+$lang['breadcrumb'] = 'ដាន';
+$lang['youarehere'] = 'ដាន';
+$lang['lastmod'] = 'áž–áŸáž›áž€áŸ‚ចុងក្រោយ';
+$lang['by'] = 'និពន្ឋដោយ';
+$lang['deleted'] = 'យកចáŸáž‰';
+$lang['created'] = 'បង្កើáž';
+$lang['restored'] = 'ស្ដារបុនរាព្រឹážáž…ាស់';
+$lang['external_edit'] = 'កំរáŸáž–ីក្រៅ';
+$lang['summary'] = 'កែážáž˜áŸ’រា';
+
+$lang['mail_newpage'] = 'ážáŸ‚មទំពáŸážš';
+$lang['mail_changed'] = 'ទំពáŸážšáž”្រែប្រួល';
+$lang['mail_new_user'] = 'អ្នកប្រើážáŸ’មី';
+$lang['mail_upload'] = 'រុញអក្សាលើង';
+
+$lang['nosmblinks'] = 'ážáŸ’សែបន្ážáž‘ៅ «Windows share» ប្រើបានក្នុង «Microsoft IE»។ អ្នកអាច កាážáŸ‹áž¬áž”áž·áž ážáŸ’សែនáŸáŸ‡áŸ”';
+
+$lang['qb_bold'] = 'ឃ្វាមក្រស';
+$lang['qb_italic'] = 'ឃ្វាមជ្រៀង';
+$lang['qb_underl'] = 'ឃ្វាម';
+$lang['qb_code'] = 'ឃ្វាមក្បួន';
+$lang['qb_strike'] = 'ឃ្វាម';
+$lang['qb_h1'] = 'áž“áž·ážœáŸáž‘áž“áŸáž‘ី១';
+$lang['qb_h2'] = 'áž“áž·ážœáŸáž‘áž“áŸáž‘ី២';
+$lang['qb_h3'] = 'áž“áž·ážœáŸáž‘áž“áŸáž‘ី៣';
+$lang['qb_h4'] = 'áž“áž·ážœáŸáž‘áž“áŸáž‘ី៤';
+$lang['qb_h5'] = 'áž“áž·ážœáŸáž‘áž“áŸáž‘ី៥';
+$lang['qb_link'] = 'ážáŸ’សែបន្ážáž€áŸ’នុង';
+$lang['qb_extlink'] = 'ážáŸ’សែបន្ážáž€áŸ’រៅ';
+$lang['qb_hr'] = 'បន្ទាផ្ដáŸáž€';
+$lang['qb_ol'] = 'ážáž¶ážšáž¶áž„ážáŸ’រៀប';
+$lang['qb_ul'] = 'ážáž¶ážšáž¶áž„អážáŸ’រៀប';
+$lang['qb_media'] = 'បន្ážáŸ‚មរូនឹងឯកសារឥទៀáž';
+$lang['qb_sig'] = 'ស៊កហážáŸ’ážáž›áŸážáž¶';
+$lang['qb_smileys'] = 'សញ្ញាអារម្មណáŸ';
+$lang['qb_chars'] = 'អក្ážážšáŸˆáž–ិសáŸážŸ';
+
+$lang['js']['del_confirm']= 'លុប';
+$lang['admin_register']= 'ážáŸ‚មអ្នកប្រើ';//'Add new user';
+
+$lang['spell_start'] = 'áž–áž·áž“áž·ážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធ';//'Check Spelling';
+$lang['spell_stop'] = 'បណ្ážáž€áŸ†ážšáŸ‚'; 'Resume Editing';
+$lang['spell_wait'] = 'សូមចាំ';//'Please wait...';
+$lang['spell_noerr'] = 'ឥážáž˜áž¶áž“ážáž»áŸ‡áž‘áŸ';
+$lang['spell_nosug'] = 'ឥážáž˜áž¶áž“យោបល់';
+$lang['spell_change']= 'ដូរជំនួស';//'Change';
+
+$lang['metaedit'] = 'កែទិន្ននáŸáž™áž¢ážšáž¼áž”';//'Edit Metadata';
+$lang['metasaveerr'] = 'ពំអាចកážáŸ‹ážšáž‘ិន្ននáŸáž™áž¢ážšáž¼áž”';//'Writing metadata failed';
+$lang['metasaveok'] = 'ទិន្ននáŸáž™áž¢ážšáž¼áž”';
+$lang['img_backto'] = 'ážáž™áž€áŸ’រោយ';
+$lang['img_title'] = 'អភិធáŸáž™áŸ’áž™';
+$lang['img_caption'] = 'ចំណងជើង';
+$lang['img_date'] = 'ážáŸ’ងៃážáŸ‚';//'Date';
+$lang['img_fname'] = 'ឈ្មោះឯកសារ';
+$lang['img_fsize'] = 'ទំហំ';//'Size';
+$lang['img_artist'] = 'អ្នកážážážšáž¼áž”';
+$lang['img_copyr'] = 'រក្សា​សិទ្ធិ';
+$lang['img_format'] = 'ធុនប្រភáŸáž‘';
+$lang['img_camera'] = 'គ្រឿងážáž';
+$lang['img_keywords']= 'មáŸáž–ាក្ស';//'Keywords';
+
+$lang['subscribe_success'] = ' ដកážáŸ‚ម %s ចូលបញ្ជីបរិវិសកមចំពោះ %s';
+$lang['subscribe_error'] = 'មានកំហុសពáŸáž›áž”ន្ážáŸ‚ម %s ចូលបញ្ជីបរិវិសកមចំពោះ %s';
+$lang['subscribe_noaddress']= 'ឥážáž˜áž¶áž“អាសយដ្ឋាន អ្នកមិនអាចកážáŸ‹áž…ុល';
+$lang['unsubscribe_success']= 'ដក %s áž…áŸáž‰áž–ីបញ្ជីបរិវិសកមចំពោះ %s';
+$lang['unsubscribe_error'] = 'មានកំហុសពáŸáž›ážŠáž€ %s​ áž…áŸáž‰áž–ីបញ្ជីបរិវិសកមចំពោះ %s';
+
+/* auth.class language support */
+$lang['authmodfailed'] = 'និនផ្ទៀងផ្ទាážáŸ‹â€‹áž—ាព​​ážáŸ’រឹមážáŸ’រូវបានទáŸáŸ” សុំទាកទងអ្នកក្របគ្រោង។';
+$lang['authtempfail'] = 'ការផ្ទៀងផ្ទាážáŸ‹â€‹áž—ាព​​ážáŸ’រឹមážáŸ’រូវឥážážŠáŸ†áž“áŸáŸ” ប្រើ ....';
+
+/* installer strings */
+$lang['i_chooselang'] = 'រើសពាស្សាអ្នក';
+$lang['i_installer'] = 'ដំឡើងឌោគូវីគី';
+$lang['i_wikiname'] = 'នាមវីគី';
+$lang['i_enableacl'] = 'បើកប្រើ (អនុសាស)';
+$lang['i_superuser'] = 'អ្នកកំពូល';
+$lang['i_problems'] = 'កម្មវិធី​ដំឡើងបានប៉ះឧបសគ្គ។ អ្នកមិនអាចបន្ážáž‘ៅទៀហដល់អ្នកជួសជុលវា។';
+$lang['i_modified'] = '';
+$lang['i_funcna'] = '<code>%s</code> ';
+$lang['i_phpver'] = 'PHP ប្រវážáŸ‹áž›áŸáž<code>%s</code> ជា';
+$lang['i_permfail'] = '<code>%s</code> មិនអាចសាស';
+$lang['i_confexists'] = '<code>%s</code> មានហាយ';
+$lang['i_writeerr'] = 'មិនអាចបណ្កើ<code>%s</code>។ អ្នកážáŸ’រវការពិនិážáŸ’យអធិក្រឹážáž·ážšáž”ស់ážážáž“ឹងឯកសារ។';
+$lang['i_badhash'] = '(hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code>&mdash;';
+$lang['i_success'] = '';
+$lang['i_failure'] = 'ពលសាសារ';
+$lang['i_policy'] = 'បញ្ជីអនុញ្ញážáž•áŸ’ដើម';
+$lang['i_pol0'] = 'វីគីបើកចំហ';
+$lang['i_pol1'] = 'វីគីសធារណៈ';
+$lang['i_pol2'] = 'វីគីបិទជិáž';
+
+$lang['i_retry'] = 'ម្ážáž„ទៀáž';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt
new file mode 100644
index 000000000..2149d9c32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt
@@ -0,0 +1,5 @@
+====== កážáŸ‹áž…ូល ======
+
+អ្នកមិនទាន់។
+អ្នកážáŸ’រូវការអនុញ្ញាឲ្យកážáŸ‹ážáž“ំបានចូល។
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt
new file mode 100644
index 000000000..4b2b4e2d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt
@@ -0,0 +1,4 @@
+====== ឥážáž‘ានមានទ០======
+អ្នកážáž¶áž˜ážáŸ’រសៃážáŸ’សែដែលគ្មានទំពáŸážšáŸ”
+បើ
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt
new file mode 100644
index 000000000..7ca11893e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt
@@ -0,0 +1,2 @@
+====== ឥážáž˜áž¶áž“បុនរាព្រឹážáŸ’ážáž·áž‘០======
+បុនរាព្រឹážáŸ’ážáž·áž–ុំមានទáŸáŸ” សុំប្រើ «ទំពáŸážšáž…ាស់ៗ» ទៅមើលបញ្ជីប្រវážáŸ’ážáž‘ំពáŸážšáž…ាស់រូបស់អážáŸ’ážáž”áž‘áž“áŸáŸ‡áŸ”
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt
new file mode 100644
index 000000000..7c6a3ac97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt
@@ -0,0 +1,13 @@
+សួស្ដី @FULLNAME@!
+
+មានគáŸážŸáž»áž˜ážŸáŸ’នើពាក្យ​សម្ងាážáŸ‹â€‹ážšáž»áž”សឲ្យ@TITLE@ នៅ @DOKUWIKIURL@។
+បើអ្នកមិនជាអ្នកសុមពាក្យ​សម្ងាážáŸ‹áž‘០សុំបស់ចល់អ៊ីមáŸáž›áž“áŸáŸ‡áŸ”
+
+
+សុំអះអាងដែលសំណើនáŸáŸ‡ážŠáŸ„យទៅážáž¶áž˜ážáŸ’សែ
+
+@CONFIRM@
+
+--
+អ៊ីមáŸáž›áž“áŸáŸ‡áž”ង្កើážáž–ីឌក្គូវីគីនៅ
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt
new file mode 100644
index 000000000..14449ea49
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt
@@ -0,0 +1,3 @@
+====== ប្រវážáŸ’ážáž·áž‘ំពáŸážšáž”ច្ចុប្បន្ន ======
+ទំពáŸážšáž‘ាំងនáŸáŸ‡áž‚ឺទំពáŸážšáž€áŸ‚ប្រែ
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt
new file mode 100644
index 000000000..b850c2ec3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt
@@ -0,0 +1,7 @@
+====== អ្នកប្រើážáŸ’មី ======
+
+Fill in all the information below to create a new account in this wiki.
+Make sure you supply a **valid e-mail address** - if you are not asked
+to enter a password here, a new one will be sent to that address.
+The login name should be a valid [[doku>wiki:pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt
new file mode 100644
index 000000000..a15186df8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt
@@ -0,0 +1,4 @@
+====== ប្រវážáŸ’ážáž·áž‘ំពáŸážšáž…ាស់ ======
+ទាំងនáŸáŸ‡áž‚ឺប្រវážáŸ’ážáž·áž‘ំពáŸážšáž…ាស់រុបសអážáŸ’ážáž”áž‘áž“áŸáŸ‡áŸ”
+ជ្រើសážáŸ’សែទំពáŸážšáž–ីážáž¶áž„ក្រោមហើយ ចុហ«កែទំពáŸážšáž“áŸáŸ‡Â» រួចហើយរក្សាវាទុក។
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt
new file mode 100644
index 000000000..7dd0f58b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt
@@ -0,0 +1,4 @@
+====== 관리 작업 ======
+
+DokuWikiì—ì„œ 사용가능한 관리 ìž‘ì—… 목ë¡ì„ 아래ì—ì„œ ì°¾ì„ ìˆ˜ 있습니다.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt
new file mode 100644
index 000000000..1711945e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt
@@ -0,0 +1,4 @@
+====== ë°±ë§í¬ ======
+
+현재 페ì´ì§€ë¡œ ë°±ë§í¬ë˜ëŠ” 페ì´ì§€ 목ë¡ìž…니다.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt
new file mode 100644
index 000000000..529296359
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt
@@ -0,0 +1,6 @@
+====== 새 버전 ìžˆìŒ ======
+
+편집하신 ë¬¸ì„œì˜ ìƒˆ ë²„ì „ì´ ìžˆìŠµë‹ˆë‹¤. ë‹¹ì‹ ì´ íŽ¸ì§‘í•˜ê³  있는 ë™ì•ˆ 다른 ì‚¬ëžŒì´ ë™ì¼í•œ 파ì¼ì„ íŽ¸ì§‘í•˜ì˜€ì„ ê²½ìš° ì´ëŸ° ì¼ì´ ìƒê¸¸ 수 있습니다.
+
+ì•„ëž˜ì˜ ì°¨ì´ì ì„ 면밀히 검토하시고, ì–´ë–¤ ë²„ì „ì„ ì €ìž¥í•˜ì‹¤ì§€ 결정하십시오. **저장**ì„ ì„ íƒí•˜ì‹œë©´, ë‹¹ì‹ ì˜ ë²„ì „ì´ ì €ìž¥ë©ë‹ˆë‹¤. **취소** 를 ì„ íƒí•˜ì‹œë©´ 현재 ë²„ì „ì´ ìœ ì§€ë©ë‹ˆë‹¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt
new file mode 100644
index 000000000..316a660c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt
@@ -0,0 +1,4 @@
+====== 권한 거절 ======
+
+계ì†í•  수 있는 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤. 로그ì¸í•˜ì‹­ì‹œì˜¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt
new file mode 100644
index 000000000..8cfb1da43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt
@@ -0,0 +1,5 @@
+====== ì°¨ì´ì  ======
+
+ì´ íŽ˜ì´ì§€ì˜ ì„ íƒí•œ ì´ì „ 버전과 현재 버전 사ì´ì˜ ì°¨ì´ì ì„ ë³´ì—¬ì¤ë‹ˆë‹¤.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt
new file mode 100644
index 000000000..3df8a5e86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt
@@ -0,0 +1,6 @@
+====== 문서 ì´ˆì•ˆì´ ìžˆìŠµë‹ˆë‹¤. ======
+
+ì´ íŽ˜ì´ì§€ì˜ 마지막 편집 ì„¸ì…˜ì€ ì •ìƒì ìœ¼ë¡œ ë나지 않았습니다. DokuWiki는 ìž‘ì—… ë„중 ìžë™ìœ¼ë¡œ ì €ìž¥ëœ ë¬¸ì„œ ì´ˆì•ˆì„ ì‚¬ìš©í•˜ì—¬ íŽ¸ì§‘ì„ ê³„ì† í•  수 있습니다. 마지막 세션ë™ì•ˆ ì €ìž¥ëœ ë¬¸ì„œ ì´ˆì•ˆì„ ì•„ëž˜ì—ì„œ ë³¼ 수 있습니다.
+
+확실하게 비정ìƒì ìœ¼ë¡œ ì¢…ë£Œëœ ì„¸ì…˜ì„ //복구//할지 여부를 결정하고, ìžë™ìœ¼ë¡œ 저장ë˜ì—ˆë˜ ì´ˆì•ˆì„ //ì‚­ì œ//하거나 편집 ê³¼ì •ì„ ì·¨ì†Œí•˜ê¸° ë°”ëžë‹ˆë‹¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt
new file mode 100644
index 000000000..d73f935fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt
@@ -0,0 +1,2 @@
+페ì´ì§€ë¥¼ 편집하고 **저장**ì„ ëˆ„ë¥´ì‹­ì‹œì˜¤. 위키 êµ¬ë¬¸ì€ [[wiki:syntax]] í˜¹ì€ [[syntax|(한글) 구문]]ì„ ì°¸ê³ í•˜ì‹­ì‹œì˜¤. ì´ íŽ˜ì´ì§€ë¥¼ **ë” ë‚«ê²Œ 만들 ìžì‹ ì´ 있ì„** ë•Œì—만 편집하십시오. ì‹¤í—˜ì„ í•˜ê³  ì‹¶ì„ ë•Œì—는, 먼저 [[playground:playground|연습장]] ì— ê°€ì„œ 연습해 보십시오.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt
new file mode 100644
index 000000000..2715448d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt
@@ -0,0 +1,2 @@
+**ë¬¸ì„œì˜ ì´ì „ ë²„ì „ì„ ì„ íƒí•˜ì˜€ìŠµë‹ˆë‹¤!** 저장할 경우 ì´ ìžë£Œì˜ 새 ë²„ì „ì„ ë§Œë“­ë‹ˆë‹¤.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt
new file mode 100644
index 000000000..7ca9488e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+ì´ íŽ˜ì´ì§€ëŠ” [[doku>namespaces|네임스페ì´ìŠ¤]] ì—ì„œ 정렬한 모든 페ì´ì§€ì˜ 목ë¡ìž…니다.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html
new file mode 100644
index 000000000..6b1bfaf75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html
@@ -0,0 +1,17 @@
+<p>ì´ íŽ˜ì´ì§€ëŠ” <a href="http://dokuwiki.org">Dokuwiki</a> 설치와 환경 ì„¤ì •ì„ ë„와ì¤ë‹ˆë‹¤.
+. 설치 ê³¼ì •ì— ëŒ€í•œ ë” ìžì„¸í•œ 정보는 <a href="http://dokuwiki.org/ko:install">한글 설치문서</a>와
+<a href="http://dokuwiki.org/install">ì˜ë¬¸ 설치문서</a>를 참고하기 ë°”ëžë‹ˆë‹¤.
+</p>
+
+<p>DokuWiki는 위키 페ì´ì§€ì™€ 페ì´ì§€ì™€ ê´€ë ¨ëœ ì •ë³´(그림,색ì¸, ì´ì „ 버전 문서 등등)를 저장하기 위해 ì¼ë°˜ì ì¸ í…스트 파ì¼ë“¤ì„ 사용합니다. ì •ìƒì ìœ¼ë¡œ DokuWiki를 사용하려면 ì´ íŒŒì¼ë“¤ì„ ë‹´ê³  있는 ë””ë ‰í† ë¦¬ë“¤ì— ëŒ€í•œ 쓰기 ê¶Œí•œì„ ê°€ì§€ê³  있어야 합니다.
+현재 설치 과정 중ì—는 디렉토리 권한 ì„¤ì •ì´ ë¶ˆê°€ëŠ¥í•©ë‹ˆë‹¤. 보통 ì§ì ‘ 쉘 명령어를 사용하거나, í˜¸ìŠ¤íŒ…ì„ ì‚¬ìš©í•œë‹¤ë©´ FTP나 호스팅 제어íŒ(예. CPanel)ì„ ì‚¬ìš©í•´ì„œ 설정해야 합니다.</p>
+
+<p>현재 설치 ê³¼ì •ì¤‘ì— ê´€ë¦¬ìžë¡œ ë¡œê·¸ì¸ í›„ DokuWikiì˜ ê´€ë¦¬ 메뉴(í”ŒëŸ¬ê·¸ì¸ ì„¤ì¹˜, ì‚¬ìš©ìž ê´€ë¦¬, 위키 페ì´ì§€ ì ‘ê·¼ 권한 관리, 옵션 설정)를 가능하게 <acronym title="ì ‘ê·¼ 제어 목ë¡">ACL</acronym>ì— ëŒ€í•œ 환경 ì„¤ì •ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤.
+ì´ ê²ƒì€ DokuWikiê°€ ë™ìž‘í•˜ëŠ”ë° í•„ìš”í•œ ì‚¬í•­ì€ ì•„ë‹ˆì§€ë§Œ, ì–´ì°Œë˜ì—ˆë“  ë” ì‰½ê²Œ 관리ìžê°€ 관리할 수 있ë„ë¡ í•´ì¤ë‹ˆë‹¤.</p>
+
+<p>ìˆ™ë ¨ëœ ì‚¬ìš©ìžë“¤ì´ë‚˜ 특별한 설치 ê³¼ì •ì´ í•„ìš”í•œ ê²½ìš°ì— ë‹¤ìŒ ë§í¬ë“¤ì„ 참조하기 ë°”ëžë‹ˆë‹¤:
+<a href="http://dokuwiki.org/ko:install">설치 과정(한글)</a>
+과 <a href="http://dokuwiki.org/ko:config">환경 설정(한글),</a>
+<a href="http://dokuwiki.org/install">설치 과정(ì˜ë¬¸)</a>
+ê³¼ <a href="http://dokuwiki.org/config">환경 설정(ì˜ë¬¸)</a>
+</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php
new file mode 100644
index 000000000..f11ec95fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php
@@ -0,0 +1,229 @@
+<?php
+/**
+ * korean language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Hyun Kim <lawfully@gmail.com>
+ * @author jk Lee
+ * @author dongnak@gmail.com
+ * @author Song Younghwan <purluno@gmail.com>
+ * @author SONG Younghwan <purluno@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = '페ì´ì§€ 편집';
+$lang['btn_source'] = '소스 보기';
+$lang['btn_show'] = '페ì´ì§€ 보기';
+$lang['btn_create'] = '페ì´ì§€ 만들기';
+$lang['btn_search'] = '찾기';
+$lang['btn_save'] = '저장';
+$lang['btn_preview'] = '미리보기';
+$lang['btn_top'] = '맨위로';
+$lang['btn_newer'] = '<< 최근';
+$lang['btn_older'] = 'ì´ì „ >>';
+$lang['btn_revs'] = 'ì´ì „ 버전들';
+$lang['btn_recent'] = '최근 변경 목ë¡';
+$lang['btn_upload'] = '업로드';
+$lang['btn_cancel'] = '취소';
+$lang['btn_index'] = '색ì¸';
+$lang['btn_secedit'] = '편집';
+$lang['btn_login'] = '로그ì¸';
+$lang['btn_logout'] = '로그아웃';
+$lang['btn_admin'] = '관리';
+$lang['btn_update'] = '변경';
+$lang['btn_delete'] = '삭제';
+$lang['btn_back'] = '뒤로';
+$lang['btn_backlink'] = 'ì´ì „ ë§í¬';
+$lang['btn_backtomedia'] = '미디어 íŒŒì¼ ì„ íƒìœ¼ë¡œ ëŒì•„가기';
+$lang['btn_subscribe'] = 'êµ¬ë… ì‹ ì²­';
+$lang['btn_unsubscribe'] = 'êµ¬ë… ì‹ ì²­ 해지';
+$lang['btn_subscribens'] = '네임스페ì´ìŠ¤ êµ¬ë… ì‹ ì²­';
+$lang['btn_unsubscribens'] = '네임스페ì´ìŠ¤ êµ¬ë… ì‹ ì²­ 해지';
+$lang['btn_profile'] = 'ê°œì¸ì •ë³´ 변경';
+$lang['btn_reset'] = '초기화';
+$lang['btn_resendpwd'] = '새 패스워드 보내기';
+$lang['btn_draft'] = '문서초안 편집';
+$lang['btn_recover'] = '문서초안 복구';
+$lang['btn_draftdel'] = '문서초안 삭제';
+$lang['loggedinas'] = 'ë‹¤ìŒ ì‚¬ìš©ìžë¡œ 로그ì¸';
+$lang['user'] = '사용ìž';
+$lang['pass'] = '패스워드';
+$lang['newpass'] = '새로운 패스워드';
+$lang['oldpass'] = '현재 패스워드 확ì¸';
+$lang['passchk'] = '패스워드 다시 확ì¸';
+$lang['remember'] = '기억하기';
+$lang['fullname'] = '실제 ì´ë¦„';
+$lang['email'] = 'ì´ë©”ì¼';
+$lang['register'] = '등ë¡';
+$lang['profile'] = 'ê°œì¸ ì •ë³´';
+$lang['badlogin'] = 'ìž˜ëª»ëœ ì‚¬ìš©ìž ì´ë¦„ì´ê±°ë‚˜ 패스워드입니다.';
+$lang['minoredit'] = 'ì¼ë¶€ ë‚´ìš© 변경';
+$lang['draftdate'] = '문서 초안 ìžë™ì €ìž¥ 시간';
+$lang['nosecedit'] = '페ì´ì§€ê°€ 수정ë˜ì–´ 섹션정보가 달ë¼ì ¸ 페ì´ì§€ 전부를 다시 ì½ìŠµë‹ˆë‹¤.';
+$lang['regmissing'] = '모든 í•­ëª©ì„ ìž…ë ¥í•´ì•¼ 합니다.';
+$lang['reguexists'] = 'ê°™ì€ ì´ë¦„ì„ ì‚¬ìš©í•˜ëŠ” 사용ìžê°€ 있습니다.';
+$lang['regsuccess'] = '사용ìžë¥¼ 만들었습니다. 패스워드는 ì´ë©”ì¼ë¡œ 보냈습니다.';
+$lang['regsuccess2'] = '사용ìžë¥¼ 만들었습니다.';
+$lang['regmailfail'] = '패스워드를 ì´ë©”ì¼ë¡œ 전송할 ë•Œ 오류가 ë°œìƒí–ˆìŠµë‹ˆë‹¤. 관리ìžì—게 문ì˜í•˜ê¸° ë°”ëžë‹ˆë‹¤!';
+$lang['regbadmail'] = 'ì´ë©”ì¼ ì£¼ì†Œê°€ 틀렸습니다. - 오류ë¼ê³  ìƒê°ë˜ë©´ 관리ìžì—게 문ì˜í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['regbadpass'] = '새로운 íŒ¨ìŠ¤ì›Œë“œë“¤ì´ ì¼ì¹˜í•˜ì§€ 않습니다. 다시 입력하기 ë°”ëžë‹ˆë‹¤.';
+$lang['regpwmail'] = 'DokuWiki 패스워드';
+$lang['reghere'] = 'ì•„ì§ ë“±ë¡í•˜ì§€ 않았다면 등ë¡í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['profna'] = 'ì´ ìœ„í‚¤ëŠ” ê°œì¸ ì •ë³´ ìˆ˜ì •ì„ í—ˆìš©í•˜ì§€ 않습니다.';
+$lang['profnochange'] = 'ë³€ê²½ì‚¬í•­ì´ ì—†ìŠµë‹ˆë‹¤.';
+$lang['profnoempty'] = 'ì´ë¦„ì´ë‚˜ ì´ë©”ì¼ ì£¼ì†Œê°€ 비었습니다.';
+$lang['profchanged'] = 'ê°œì¸ì •ë³´ ë³€ê²½ì´ ì„±ê³µí–ˆìŠµë‹ˆë‹¤.';
+$lang['pwdforget'] = '패스워드를 잊어버린 경우 새로 ë°œê¸‰ë°›ì„ ìˆ˜ 있습니다.';
+$lang['resendna'] = 'ì´ ìœ„í‚¤ëŠ” 패스워드 ìž¬ë°œê¸‰ì„ ì§€ì›í•˜ì§€ 않습니다.';
+$lang['resendpwd'] = '새로운 패스워드를 보냅니다.';
+$lang['resendpwdmissing'] = '새로운 패스워드를 입력해야햡니다.';
+$lang['resendpwdnouser'] = '등ë¡ëœ 사용ìžê°€ 아닙니다. 다시 í™•ì¸ ë°”ëžë‹ˆë‹¤.';
+$lang['resendpwdbadauth'] = 'ì¸ì¦ 코드가 틀립니다. ìž˜ëª»ëœ ë§í¬ì¸ì§€ í™•ì¸ ë°”ëžë‹ˆë‹¤.';
+$lang['resendpwdconfirm'] = 'í™•ì¸ ë§í¬ë¥¼ ì´ë©”ì¼ë¡œ 보냈습니다.';
+$lang['resendpwdsuccess'] = '새로운 패스워드는 ì´ë©”ì¼ë¡œ 보내드립니다.';
+$lang['license'] = 'ì´ ìœ„í‚¤ì˜ ë‚´ìš©ì€ ë‹¤ìŒì˜ ë¼ì´ì„¼ìŠ¤ì— 따릅니다 :';
+$lang['licenseok'] = 'ì£¼ì˜ : ì´ íŽ˜ì´ì§€ë¥¼ 수정한다는 다ìŒì˜ ë¼ì´ì„¼ìŠ¤ì— ë™ì˜í•¨ì„ ì˜ë¯¸í•©ë‹ˆë‹¤ :';
+$lang['txt_upload'] = '업로드 파ì¼ì„ ì„ íƒí•©ë‹ˆë‹¤.';
+$lang['txt_filename'] = '업로드 íŒŒì¼ ì´ë¦„ì„ ìž…ë ¥í•©ë‹ˆë‹¤.(ì„ íƒ ì‚¬í•­)';
+$lang['txt_overwrt'] = '새로운 파ì¼ë¡œ ì´ì „ 파ì¼ì„ êµì²´í•©ë‹ˆë‹¤.';
+$lang['lockedby'] = '현재 잠금 사용ìž';
+$lang['lockexpire'] = '잠금 해제 시간';
+$lang['willexpire'] = 'ìž ì‹œ 후 편집 ìž ê¸ˆì´ í•´ì œë©ë‹ˆë‹¤.\n편집 충ëŒì„ 피하려면 미리보기를 눌러 잠금 ì‹œê°„ì„ ë‹¤ì‹œ 설정하기 ë°”ëžë‹ˆë‹¤.';
+$lang['notsavedyet'] = '저장하지 ì•Šì€ ë³€ê²½ì€ ì§€ì›Œì§‘ë‹ˆë‹¤.\n계ì†í•˜ì‹œê² ìŠµë‹ˆê¹Œ?';
+$lang['rssfailed'] = 'feed 가져오기 실패: ';
+$lang['nothingfound'] = '아무 ê²ƒë„ ì—†ìŠµë‹ˆë‹¤.';
+$lang['mediaselect'] = '미디어 íŒŒì¼ ì„ íƒ';
+$lang['fileupload'] = '미디어 íŒŒì¼ ì—…ë¡œë“œ';
+$lang['uploadsucc'] = '업로드 성공';
+$lang['uploadfail'] = '업로드 실패. ìž˜ëª»ëœ ê¶Œí•œ 때문ì¼ì§€ë„ 모릅니다.';
+$lang['uploadwrong'] = '업로드 거부. ê¸ˆì§€ëœ í™•ìž¥ìžìž…니다!';
+$lang['uploadexist'] = 'ì´ë¯¸ 파ì¼ì´ 존재합니다.';
+$lang['uploadbadcontent'] = 'ì—…ë¡œë“œëœ íŒŒì¼ì´ íŒŒì¼ í™•ìž¥ìž %s와 ì¼ì¹˜í•˜ì§€ 않습니다.';
+$lang['uploadspam'] = '스팸 차단기가 업로드를 취소하였습니다.';
+$lang['uploadxss'] = '악성 ì½”ë“œì˜ ê°€ëŠ¥ì„±ì´ ìžˆì–´ 업로드를 취소하였습니다.';
+$lang['uploadsize'] = '업로드한 파ì¼ì´ 너무 í½ë‹ˆë‹¤. (최대 %s)';
+$lang['deletesucc'] = '"%s" 파ì¼ì´ ì‚­ì œë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['deletefail'] = '"%s" 파ì¼ì„ 삭제할 수 없습니다. - ì‚­ì œ ê¶Œí•œì´ ìžˆëŠ”ì§€ 확ì¸í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['mediainuse'] = '"%s" 파ì¼ì„ 삭제할 수 없습니다. - ì•„ì§ ì‚¬ìš© 중입니다.';
+$lang['namespaces'] = '네임스페ì´ìŠ¤';
+$lang['mediafiles'] = '사용 가능한 íŒŒì¼ ëª©ë¡';
+$lang['js']['keepopen'] = 'ì„ íƒí•  ë•Œ 윈ë„우를 열어놓으시기 ë°”ëžë‹ˆë‹¤.';
+$lang['js']['hidedetails'] = 'ìžì„¸í•œ ì •ë³´ ê°ì¶”기';
+$lang['js']['nosmblinks'] = '윈ë„ìš° 공유 파ì¼ê³¼ì˜ ì—°ê²°ì€ MS ì¸í„°ë„· ìµìŠ¤í”Œë¡œëŸ¬ì—서만 ë™ìž‘합니다.
+그러나 ë§í¬ë¥¼ 복사하거나 붙여넣기를 í•  수 있습니다.';
+$lang['js']['mu_btn'] = '여러 파ì¼ë“¤ì„ í•œë²ˆì— ì—…ë¡œë“œí•©ë‹ˆë‹¤.';
+$lang['mediausage'] = 'ì´ íŒŒì¼ì„ 참조하려면 ë‹¤ìŒ ë¬¸ë²•ì„ ì‚¬ìš©í•˜ê¸° ë°”ëžë‹ˆë‹¤:';
+$lang['mediaview'] = 'ì›ë³¸ íŒŒì¼ ë³´ê¸°';
+$lang['mediaroot'] = '루트(root)';
+$lang['mediaupload'] = '파ì¼ì„ 현재 네임스페ì´ìŠ¤ë¡œ 업로드합니다. 하위 네임스페ì´ìŠ¤ë¥¼ 만들려면 íŒŒì¼ ì´ë¦„ ì•žì— ì½œë¡ (:)으로 구분ë˜ëŠ” ì´ë¦„ì„ ë¶™ì´ë©´ ë©ë‹ˆë‹¤.';
+$lang['mediaextchange'] = 'íŒŒì¼ í™•ìž¥ìžê°€ .%sì—ì„œ .%s으로 변경ë습니다!';
+$lang['reference'] = '참조';
+$lang['ref_inuse'] = 'ë‹¤ìŒ íŽ˜ì´ì§€ë“¤ì—ì„œ ì•„ì§ ì‚¬ìš© 중ì´ë¯€ë¡œ 파ì¼ì„ 삭제할 수 없습니다:';
+$lang['ref_hidden'] = '페ì´ì§€ë“¤ì˜ 몇몇 참조는 ì½ì„ 수 있는 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤.';
+$lang['hits'] = '히트 수';
+$lang['quickhits'] = 'ì¼ì¹˜í•˜ëŠ” 페ì´ì§€ ì´ë¦„';
+$lang['toc'] = '목차';
+$lang['current'] = '현재';
+$lang['yours'] = '버전';
+$lang['diff'] = '현재 ë²„ì „ê³¼ì˜ ì°¨ì´ ë³´ê¸°';
+$lang['diff2'] = 'ì„ íƒëœ 버전들 ê°„ ì°¨ì´ ë³´ê¸°';
+$lang['line'] = '줄';
+$lang['breadcrumb'] = '추ì ';
+$lang['youarehere'] = '현재 위치';
+$lang['lastmod'] = '마지막 수정';
+$lang['by'] = '작성ìž';
+$lang['deleted'] = '삭제';
+$lang['created'] = '새로 만듦';
+$lang['restored'] = '옛 버전 복구';
+$lang['external_edit'] = '외부 편집기';
+$lang['summary'] = '편집 요약';
+$lang['noflash'] = 'ì´ ì»¨í…츠를 표시하기 위해서 <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>ì´ í•„ìš”í•©ë‹ˆë‹¤.';
+$lang['mail_newpage'] = '페ì´ì§€ 추가:';
+$lang['mail_changed'] = '페ì´ì§€ 변경:';
+$lang['mail_new_user'] = '새로운 사용ìž:';
+$lang['mail_upload'] = 'íŒŒì¼ ì²¨ë¶€:';
+$lang['qb_bold'] = 'êµµì€ ê¸€';
+$lang['qb_italic'] = 'ì´íƒ¤ë¦­ì²´ 글';
+$lang['qb_underl'] = '밑줄 그어진 글';
+$lang['qb_code'] = '코드로 í‘œì‹œëœ ê¸€';
+$lang['qb_strike'] = '취소 í‘œì‹œëœ ê¸€';
+$lang['qb_h1'] = '1단계 헤드ë¼ì¸';
+$lang['qb_h2'] = '2단계 헤드ë¼ì¸';
+$lang['qb_h3'] = '3단계 헤드ë¼ì¸';
+$lang['qb_h4'] = '4단계 헤드ë¼ì¸';
+$lang['qb_h5'] = '5단계 헤드ë¼ì¸';
+$lang['qb_link'] = '내부 ë§í¬';
+$lang['qb_extlink'] = '외부 ë§í¬';
+$lang['qb_hr'] = '수í‰ì„ ';
+$lang['qb_ol'] = 'ìˆ«ìž ëª©ë¡';
+$lang['qb_ul'] = '목ë¡';
+$lang['qb_media'] = 'ì´ë¯¸ì§€ì™€ 기타 íŒŒì¼ ì¶”ê°€';
+$lang['qb_sig'] = '서명 추가';
+$lang['qb_smileys'] = 'ì´ëª¨í‹°ì½˜';
+$lang['qb_chars'] = '특수문ìž';
+$lang['js']['del_confirm'] = 'ì •ë§ë¡œ ì„ íƒëœ 항목(들)ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ?';
+$lang['admin_register'] = '새로운 ì‚¬ìš©ìž ì¶”ê°€';
+$lang['metaedit'] = '메타 ë°ì´íƒ€ë¥¼ 편집합니다.';
+$lang['metasaveerr'] = '메타 ë°ì´íƒ€ 쓰기가 실패했습니다.';
+$lang['metasaveok'] = '메타 ë°ì´íƒ€ê°€ 저장ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['img_backto'] = '뒤로';
+$lang['img_title'] = 'ì´ë¦„';
+$lang['img_caption'] = '설명';
+$lang['img_date'] = '날짜';
+$lang['img_fname'] = 'íŒŒì¼ ì´ë¦„';
+$lang['img_fsize'] = 'í¬ê¸°';
+$lang['img_artist'] = '만든ì´';
+$lang['img_copyr'] = '저작권';
+$lang['img_format'] = 'í¬ë§·';
+$lang['img_camera'] = 'ì¹´ë©”ë¼';
+$lang['img_keywords'] = '키워드';
+$lang['subscribe_success'] = '%s를 추가했습니다. (%sì˜ êµ¬ë… ëª©ë¡)';
+$lang['subscribe_error'] = '%s를 ì¶”ê°€í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.(%sì˜ êµ¬ë… ëª©ë¡)';
+$lang['subscribe_noaddress'] = 'ë¡œê·¸ì¸ ì •ë³´ì— ì´ë©”ì¼ ì£¼ì†Œê°€ 없습니다, êµ¬ë… ëª©ë¡ì— 추가할 수 없습니다.';
+$lang['unsubscribe_success'] = '%s를 제외시켰습니다. (%sì˜ êµ¬ë… ëª©ë¡)';
+$lang['unsubscribe_error'] = '%s를 ì œì™¸ì‹œí‚¤ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.(%sì˜ êµ¬ë… ëª©ë¡)';
+$lang['authmodfailed'] = 'ìž˜ëª»ëœ ì‚¬ìš©ìž ì¸ì¦ 설정입니다. 관리ìžì—게 문ì˜í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['authtempfail'] = 'ì‚¬ìš©ìž ì¸ì¦ì´ ì¼ì‹œì ìœ¼ë¡œ 불가능합니다. ë§Œì¼ ê³„ì†í•´ì„œ 문제가 ë°œìƒí•˜ë©´ 관리ìžì—게 문ì˜í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['i_chooselang'] = '사용하는 언어를 ì„ íƒí•©ë‹ˆë‹¤.';
+$lang['i_installer'] = 'DokuWiki 설치';
+$lang['i_wikiname'] = '위키 ì´ë¦„';
+$lang['i_enableacl'] = 'ACL기능 사용(권장 사항)';
+$lang['i_superuser'] = 'ìŠˆí¼ ìœ ì €';
+$lang['i_problems'] = '설치 중 아래와 ê°™ì€ ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤. 문제를 í•´ê²°í•œ 후 설치를 계ì†í•˜ê¸° ë°”ëžë‹ˆë‹¤.';
+$lang['i_modified'] = '보안 ìƒì˜ ì´ìœ ë¡œ 아래 스í¬ë¦½íŠ¸ëŠ” 수정ë˜ì§€ ì•Šì€ ìƒˆ Dokuwiki설치ì—서만 ë™ìž‘ë©ë‹ˆë‹¤.
+ë‹¤ìš´ë¡œë“œëœ ì••ì¶• 패키지를 다시 설치하거나 <a href="http://dokuwiki.org/install"> DokuWiki 설치 과정</a>ì„ ì°¸ê³ í•´ì„œ 설치하기 ë°”ëžë‹ˆë‹¤.';
+$lang['i_funcna'] = 'PHP함수 <code>%s</code> ì‚¬ìš©ì´ ë¶ˆê°€ëŠ¥í•©ë‹ˆë‹¤. 호스트 제공ìžê°€ ì–´ë–¤ ì´ìœ ì—ì„œì¸ì§€ 막아 놓았ì„지 모릅니다.';
+$lang['i_phpver'] = 'PHP <code>%s</code>ë²„ì „ì€ í•„ìš”í•œ <code>%s</code>버전보다 오래ë˜ì—ˆìŠµë‹ˆë‹¤.PHP를 업그레ì´ë“œí•  필요가 있습니다.';
+$lang['i_permfail'] = 'DokuWiki는 <code>%s</code>ì— ì“°ê¸° 가능 ê¶Œí•œì´ ì—†ìŠµë‹ˆë‹¤. 먼저 ì´ ë””ë ‰í† ë¦¬ì— ì“°ê¸° ê¶Œí•œì´ ì„¤ì •ë˜ì–´ì•¼ 합니다!';
+$lang['i_confexists'] = '<code>%s</code>는 ì´ë¯¸ 존재합니다.';
+$lang['i_writeerr'] = '<code>%s</code>ì„ ë§Œë“¤ 수 없습니다. 먼저 디렉토리/íŒŒì¼ ê¶Œí•œì„ í™•ì¸í•˜ê³  파ì¼ì„ 수ë™ìœ¼ë¡œ 만들기 ë°”ëžë‹ˆë‹¤.';
+$lang['i_badhash'] = 'dokuwiki.php를 ì¸ì‹í•  수 없거나 ì›ë³¸ 파ì¼ì´ 아닙니다. (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - 유효하지 않거나 빈 값입니다.';
+$lang['i_success'] = '환경 ì„¤ì •ì´ ì„±ê³µì ìœ¼ë¡œ ë났습니다. install.php를 ì§€ì›Œë„ ìƒê´€ì—†ìŠµë‹ˆë‹¤.
+ <a href="doku.php">새로운 DokuWiki</a>.';
+$lang['i_failure'] = '환경 설정 파ì¼ì— 쓰는 ë„중 ì—러가 ë°œìƒí–ˆìŠµë‹ˆë‹¤.
+새로운 <a href="doku.php"> DokuWiki</a>를 사용하기 ì „ì— ìˆ˜ë™ìœ¼ë¡œ 문제를 í•´ê²°í•  필요가 있습니다.';
+$lang['i_policy'] = '초기 ACL 정책';
+$lang['i_pol0'] = '개방형 위키 (누구나 ì½ê¸°/쓰기/업로드가 가능합니다.)';
+$lang['i_pol1'] = '공개형 위키 (누구나 ì½ì„ 수 있지만, 등ë¡ëœ 사용ìžë§Œ 쓰기/업로드가 가능합니다.)';
+$lang['i_pol2'] = 'í쇄형 위키 (등ë¡ëœ 사용ìžë§Œ ì½ê¸°/쓰기/업로드가 가능합니다.)';
+$lang['i_retry'] = '다시 ì‹œë„';
+$lang['mu_intro'] = '여러 파ì¼ì„ í•œë²ˆì— ì—…ë¡œë“œí•  수 있습니다. íŒŒì¼ ëª©ë¡ì— 추가하려면 "찾기" ë²„íŠ¼ì„ í´ë¦­í•©ë‹ˆë‹¤. íŒŒì¼ ëª©ë¡ ì¶”ê°€ ìž‘ì—…ì´ ë나면 "업로드" ë²„íŠ¼ì„ í´ë¦­í•˜ê¸° ë°”ëžë‹ˆë‹¤. ';
+$lang['mu_gridname'] = '파ì¼ëª…';
+$lang['mu_gridsize'] = 'í¬ê¸°';
+$lang['mu_gridstat'] = 'ìƒíƒœ';
+$lang['mu_namespace'] = '네임스페ì´ìŠ¤';
+$lang['mu_browse'] = '찾기';
+$lang['mu_toobig'] = '업로드 가능 í¬ê¸°ë¥¼ 초과했습니다.';
+$lang['mu_ready'] = '업로드가 가능합니다.';
+$lang['mu_done'] = '업로드가 완료ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['mu_fail'] = '업로드가 실패했습니다.';
+$lang['mu_authfail'] = '세션 ê¸°ê°„ì´ ì¢…ë£Œë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['mu_progress'] = '@PCT@% 업로드ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['mu_filetypes'] = 'í—ˆìš©ëœ íŒŒì¼íƒ€ìž…';
+$lang['recent_global'] = '<b>%s</b> 네임스페ì´ìŠ¤ë¥¼ 구ë…중입니다. <a href="%s">전체위키 변경사항 </a>ë„ ë³´ì‹¤ìˆ˜ 있습니다.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt
new file mode 100644
index 000000000..24525fc46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt
@@ -0,0 +1,3 @@
+====== 페ì´ì§€ 잠금 ======
+
+다른 사용ìžê°€ ì´ íŽ˜ì´ì§€ íŽ¸ì§‘ì„ ìœ„í•´ ìž ê¸ˆì„ ì‹¤í–‰í•˜ì˜€ìŠµë‹ˆë‹¤. 해당 사용ìžê°€ íŽ¸ì§‘ì„ ë내거나 ìž ê¸ˆì´ í•´ì œë  ë•Œê¹Œì§€ 기다리십시오.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt
new file mode 100644
index 000000000..1aae449df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt
@@ -0,0 +1,4 @@
+====== ë¡œê·¸ì¸ ======
+
+로그ì¸í•˜ì§€ 않았습니다! 아래ì—ì„œ 로그ì¸í•˜ì‹­ì‹œì˜¤. 로그ì¸í•˜ë ¤ë©´ 쿠키를 ë°›ë„ë¡ ì„¤ì •í•˜ì—¬ì•¼ 합니다.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt
new file mode 100644
index 000000000..5c496435e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt
@@ -0,0 +1,17 @@
+DokuWiki 페ì´ì§€ê°€ 수정 í˜¹ì€ ì¶”ê°€ë˜ì—ˆìŠµë‹ˆë‹¤. ìƒì„¸í•œ 정보는 다ìŒê³¼ 같습니다.
+
+날짜 : @DATE@
+브ë¼ìš°ì € : @BROWSER@
+IP 주소 : @IPADDRESS@
+호스트명 : @HOSTNAME@
+옛날버전 : @OLDPAGE@
+새버전 : @NEWPAGE@
+편집 요약 : @SUMMARY@
+ì‚¬ìš©ìž : @USER@
+
+@DIFF@
+
+
+--
+ì´ ë©”ì¼ì€ @DOKUWIKIURL@ ì˜ DokuWiki ê°€ ìƒì„±í•œ
+ì´ë©”ì¼ìž…니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt
new file mode 100644
index 000000000..f8380bd84
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt
@@ -0,0 +1,3 @@
+====== ì´ í† í”½ì€ ì•„ì§ ì—†ìŠµë‹ˆë‹¤ ======
+
+ì•„ì§ ì—†ëŠ” 토픽 ë§í¬ë¥¼ ë”°ë¼ì˜¤ì…¨ìŠµë‹ˆë‹¤. **페ì´ì§€ 만들기** ë²„íŠ¼ì„ ì´ìš©í•˜ì—¬ 새로 만들 수 있습니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt
new file mode 100644
index 000000000..e1b4093b4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt
@@ -0,0 +1,3 @@
+====== 지정한 버전 ì—†ìŒ ======
+
+지정한 ë²„ì „ì´ ì—†ìŠµë‹ˆë‹¤. **과거 버전** ë²„íŠ¼ì„ ì‚¬ìš©í•˜ì—¬ ì´ ë¬¸ì„œì˜ ë²„ì „ 목ë¡ì„ 보십시오.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt
new file mode 100644
index 000000000..8bcc6a1eb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt
@@ -0,0 +1,4 @@
+====== 미리보기 ======
+
+ì´ê²ƒì€ 입력하신 ë‚´ìš©ì´ ì–´ë–»ê²Œ ë³´ì¼ì§€ 미리보기하는 곳입니다. ì•„ì§ì€ **저장ë˜ì§€ 않았다**는 ì ì„ 기억하십시오.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt
new file mode 100644
index 000000000..c022a52a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt
@@ -0,0 +1,11 @@
+안녕하세요. @FULLNAME@!
+
+@DOKUWIKIURL@ì— ìž‘ì„±í•˜ì‹  @TITLE@ì„ ë³´ë ¤ë©´ 새 패스워드가 필요하다는 ìš”ì²­ì„ ëˆ„êµ°ê°€ 받았다고 합니다.
+
+새로운 패스워드를 요청한 ì ì´ 없다면 ì´ ì´ë©”ì¼ì„ 무시해버리세요.
+
+@CONFIRM@ì—ì„œ ì •ë§ë¡œ 본ì¸ì´ 그런 ìš”ì²­ì„ í–ˆì—ˆëŠ”ì§€ 확ì¸í•´ 보기 ë°”ëžë‹ˆë‹¤.
+
+--
+
+@DOKUWIKIURL@ì˜ DokuWikiê°€ ìžë™ìœ¼ë¡œ 만들어낸 ë©”ì¼ìž…니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt
new file mode 100644
index 000000000..6b5d7b3db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt
@@ -0,0 +1,2 @@
+ì´ íŽ˜ì´ì§€ëŠ” ì½ê¸° 전용입니다. 소스를 ë³¼ 수는 있지만, 수정할 수는 없습니다. ì—°ìŠµì€ [[public:playground|연습장]]ì—ì„œ 하십시오. 문제가 있다고 ìƒê°í•˜ì‹œë©´ 관리ìžì—게 문ì˜í•˜ì‹­ì‹œì˜¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt
new file mode 100644
index 000000000..f693c4bf1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt
@@ -0,0 +1,5 @@
+====== 최근 변경 ======
+
+ì•„ëž˜ì˜ íŽ˜ì´ì§€ëŠ” ìµœê·¼ì— ë³€ê²½ëœ ê²ƒìž…ë‹ˆë‹¤.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt
new file mode 100644
index 000000000..999073a1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt
@@ -0,0 +1,4 @@
+====== 새 ì‚¬ìš©ìž ë“±ë¡ ======
+
+ì´ ìœ„í‚¤ì— ìƒˆ ê³„ì •ì„ ë§Œë“¤ë ¤ë©´ ì•„ëž˜ì˜ ëª¨ë“  ë‚´ìš©ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤. **제대로 ëœ ì´ë©”ì¼ ì£¼ì†Œ**를 사용하십시오. 그러나, 아래 ë‚´ìš©ì„ ìž…ë ¥í–ˆë‹¤ê³  í•´ì„œ ê³„ì •ì„ ë§Œë“¤ 수 있으리ë¼ê³ ëŠ” 믿지 마십시오. ì´ê³³ì€ ë‚´ê°€ ê°œì¸ì ìœ¼ë¡œ 사용하는 ê³³ì´ë©°, ê³„ì •ì„ ë§Œë“¤ì–´ 주고 안주고는 ë‚´ 마ìŒìž…니다. ì°¨ë¼ë¦¬, 내게 ì´ë©”ì¼ì„ ë³´ë‚´ì„œ 신청하는 íŽ¸ì´ ë” ë‚˜ì„ ê²ƒìž…ë‹ˆë‹¤. 패스워드는 ì´ ì´ë©”ì¼ë¡œ 보내집니다. 사용ìžëª…ì€ ì˜¬ë°”ë¥¸ [[doku>pagename|pagename]] ì´ì–´ì•¼ 합니다.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt
new file mode 100644
index 000000000..4b1aa20a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt
@@ -0,0 +1,14 @@
+새로운 사용ìžê°€ 등ë¡ë˜ì—ˆìŠµë‹ˆë‹¤:
+
+ì‚¬ìš©ìž ì´ë¦„ : @NEWUSER@
+ì‚¬ìš©ìž ì‹¤ì œ ì´ë¦„ : @NEWNAME@
+ì´ë©”ì¼ : @NEWEMAIL@
+
+날짜 : @DATE@
+브ë¼ìš°ì € : @BROWSER@
+IP주소 : @IPADDRESS@
+호스트 ì´ë¦„ : @HOSTNAME@
+
+--
+
+@DOKUWIKIURL@ì˜ DokuWikiê°€ ìžë™ìœ¼ë¡œ 만들어낸 ë©”ì¼ìž…니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt
new file mode 100644
index 000000000..b06163e92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt
@@ -0,0 +1,4 @@
+====== 새로운 패스워드 전송 ======
+
+ì´ ìœ„í‚¤ ê³„ì •ì— ëŒ€í•œ 새 패스워드를 요구하기 위해 아래 í¼ì—ì„œ ì‚¬ìš©ìž ì´ë¦„ì„ ìž…ë ¥í•˜ì„¸ìš”. í™•ì¸ ë§í¬ëŠ” 새로 등ë¡ëœ ì´ë©”ì¼ ì£¼ì†Œë¡œ 발송ë©ë‹ˆë‹¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt
new file mode 100644
index 000000000..12d11894d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt
@@ -0,0 +1,4 @@
+====== ì´ì „ 버전 ======
+
+ì´ ë¬¸ì„œì˜ ì˜›ë‚  ë²„ì „ì€ ë‹¤ìŒê³¼ 같습니다. ì´ì „ 버전으로 ëŒì•„가려면, 아래ì—ì„œ ì„ íƒí•œ 다ìŒ, **페ì´ì§€ 편집**ì„ í´ë¦­í•œ 아후 저장하십시오.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt
new file mode 100644
index 000000000..198d9a428
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt
@@ -0,0 +1,5 @@
+====== 찾기 ======
+
+찾기 결과를 아래ì—ì„œ ë³¼ 수 있습니다. ë§Œì¼ ì›í•˜ëŠ” ê²ƒì„ ì°¾ì§€ 못하였다면, **페ì´ì§€ 편집** ë²„íŠ¼ì„ ì´ìš©í•˜ì—¬ ì§ˆì˜ ë‚´ìš©ê³¼ ê°™ì€ ì´ë¦„ì˜ íŽ˜ì´ì§€ë¥¼ 만들 수 있습니다.
+
+===== ê²°ê³¼ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt
new file mode 100644
index 000000000..084d82737
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt
@@ -0,0 +1,2 @@
+**ì´ê²ƒì€ ë¬¸ì„œì˜ ì´ì „ 버전입니다!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt
new file mode 100644
index 000000000..bdb41deba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt
@@ -0,0 +1,29 @@
+# 색ì¸ì´ 만들어 지지 않는 단어 목ë¡ìž…니다.(í•œì¤„ì— í•œë‹¨ì–´)
+# ì´ íŒŒì¼ì„ 편집한다면 UNIX줄 종료문ìžë¥¼ 사용해야합니다.(ë‹¨ì¼ ê°œí–‰ë¬¸ìž)
+# 3문ìžì´í•˜ 단어는 ìžë™ìœ¼ë¡œ 무시ë˜ë¯€ë¡œ 3문ìžë³´ë‹¤ ì§§ì€ ë‹¨ì–´ëŠ” í¬í•¨ì‹œí‚¬ 필요가 없습니다.
+# http://www.ranks.nl/stopwords/ì„ ê¸°ì¤€ìœ¼ë¡œ 만들어진 목ë¡ìž…니다.
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt
new file mode 100644
index 000000000..9bd0d9011
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt
@@ -0,0 +1,15 @@
+안녕하세요!
+
+@TITLE@ ìœ„í‚¤ì˜ @PAGE@ 페ì´ì§€ê°€ 변경ë¬ìŠµë‹ˆë‹¤.
+
+변경 ë‚´ìš©ì€ ì•„ëž˜ì™€ 같습니다.
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+@DOKUWIKIURL@ì˜ ì´ íŽ˜ì´ì§€ 구ë…ì‹ ì²­ì„ í•´ì§€í•˜ë ¤ë©´ @NEWPAGE@를 방문하여
+'구ë…ì‹ ì²­ 해지'를 ì„ íƒí•˜ì„¸ìš”.
+
+--
+
+@DOKUWIKIURL@ì˜ DokuWikiê°€ ìžë™ìœ¼ë¡œ 만들어낸 ë©”ì¼ìž…니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt
new file mode 100644
index 000000000..5ea331c05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt
@@ -0,0 +1,5 @@
+====== ê°œì¸ ì •ë³´ 수정 ======
+
+변경하고 ì‹¶ì€ í•­ëª©ì„ ìž…ë ¥í•˜ê¸° ë°”ëžë‹ˆë‹¤. ì‚¬ìš©ìž ì´ë¦„ì€ ë°”ê¾¸ê³  싶지 않겠지요?
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt
new file mode 100644
index 000000000..46c66a66b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt
@@ -0,0 +1,15 @@
+DokuWikiê°€ 파ì¼ì„ 업로드하였습니다.
+
+ìžì„¸í•œ ì •ë³´:
+
+íŒŒì¼ : @MEDIA@
+날짜 : @DATE@
+웹 브ë¼ìš°ì € : @BROWSER@
+IP 주소 : @IPADDRESS@
+호스트명 : @HOSTNAME@
+í¬ê¸° : @SIZE@
+íŒŒì¼ ì¢…ë¥˜ : @MIME@
+ì‚¬ìš©ìž : @USER@
+
+--
+ì´ ë©”ì¼ì€ @DOKUWIKIURL@ì˜ DokuWikiê°€ ìƒì„±í•œ ë©”ì¼ìž…니다. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt
new file mode 100644
index 000000000..35e251187
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt
@@ -0,0 +1,4 @@
+====== 스팸 차단 ======
+
+하나 í˜¹ì€ ê·¸ ì´ìƒì˜ ì°¨ë‹¨ëœ ë‹¨ì–´ê°€ í¬í•¨ë˜ì–´ 있으므로 변경 ë‚´ìš©ì´ ì €ìž¥ë˜ì§€ **않았습니다.** ë‚˜ìœ ë¡œë´‡ 같으니! 스팸ì´ë‚˜ 추가하려 하고! ë§Œì¼ ë¡œë´‡ì´ ì•„ë‹ˆë¼ ì‚¬ëžŒì´ê³ , 오류ë¼ê³  ìƒê°í•˜ì‹ ë‹¤ë©´, 관리ìžì—게 문ì˜í•˜ì‹­ì‹œì˜¤.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt
new file mode 100644
index 000000000..cfd21b217
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Below you can find a list of administrative tasks available in DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt
new file mode 100644
index 000000000..5fa2ddfda
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt
@@ -0,0 +1,4 @@
+====== Girêdanên paş ======
+
+Di rûpelên di vê lîsteyê de girêdanên ji vê rûpelê re hene.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt
new file mode 100644
index 000000000..e139dce26
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt
@@ -0,0 +1,6 @@
+====== Guhertoyeke nûtir heye ======
+
+Guhertoyeke nûtir a belgeya ku tu biguherînî heye. Sedema wê, bikarhênerkê/î din di hema demê de belge diguherîne.
+
+Examine the differences shown below thoroughly, then decide which version to keep. If you choose ''save'', your version will be saved. Hit ''cancel'' to keep the current version.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt
new file mode 100644
index 000000000..3ac72820c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt
@@ -0,0 +1,4 @@
+====== Permission Denied ======
+
+Sorry, you don't have enough rights to continue. Perhaps you forgot to login?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt
new file mode 100644
index 000000000..934ffb67e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt
@@ -0,0 +1,4 @@
+====== Cuyawazî ======
+
+Li vê derê cuyawaziyên nav revîziyona hilbijartî û verziyona aniha tên nîşan dan.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt
new file mode 100644
index 000000000..3a259dcf7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt
@@ -0,0 +1,2 @@
+Rûpelê biguherîne û ''Tomar bike'' bitikîne. Ji bo sîntaksa wîkiyê binihêre [[wiki:syntax]]. Ji kerema xwe rûpelê bi tenê biguherîne, heke tû dikarî **baştir** bikî. Heke tu dixwazî çend tiştan biceribînî, biçe [[wiki:playground]]. Li vê derê tu dikarî her tiştî biceribînî.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt
new file mode 100644
index 000000000..e6995713b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt
@@ -0,0 +1,2 @@
+**You've loaded an old revision of the document!** If you save it, you will create a new version with this data.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt
new file mode 100644
index 000000000..401404484
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt
@@ -0,0 +1,3 @@
+====== ÃŽndeks ======
+
+Ev îndeksa hemû rûpelên heyî ye. Rûpel li gora [[doku>namespaces|namespace]] hatin birêzkirin. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php
new file mode 100644
index 000000000..946954b98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php
@@ -0,0 +1,163 @@
+<?php
+/**
+ * kurdish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @translator Erdal Ronahî <erdal.ronahi@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+$lang['btn_edit'] = 'Vê rûpelê biguherîne';
+$lang['btn_source'] = 'Çavkaniya rûpelê nîşan bide';
+$lang['btn_show'] = 'Rûpelê nîşan bide';
+$lang['btn_create'] = 'Vê rûpelê biafirîne';
+$lang['btn_search'] = 'Lêbigere';
+$lang['btn_save'] = 'Tomar bike';
+$lang['btn_preview']= 'Pêşdîtin';
+$lang['btn_top'] = 'Biçe ser';
+$lang['btn_newer'] = '<< nûtir';
+$lang['btn_older'] = 'kevntir >>';
+$lang['btn_revs'] = 'Revîziyonên kevn';
+$lang['btn_recent'] = 'Guherandinên dawî';
+$lang['btn_upload'] = 'Bar bike';
+$lang['btn_cancel'] = 'Betal';
+$lang['btn_index'] = 'ÃŽndeks';
+$lang['btn_secedit']= 'Biguherîne';
+$lang['btn_login'] = 'Têkeve';
+$lang['btn_logout'] = 'Derkeve';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Rojanekirin';
+$lang['btn_delete'] = 'Jê bibe';
+$lang['btn_back'] = 'PaÅŸ';
+$lang['btn_backlink'] = "Girêdanên paş";
+$lang['btn_backtomedia'] = 'Back to Mediafile Selection';
+$lang['btn_subscribe'] = 'Subscribe Changes';
+$lang['btn_unsubscribe'] = 'Unsubscribe Changes';
+
+$lang['loggedinas'] = 'Logged in as';
+$lang['user'] = 'Username';
+$lang['pass'] = 'Password';
+$lang['passchk'] = 'once again';
+$lang['remember'] = 'Remember me';
+$lang['fullname'] = 'Full name';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Register';
+$lang['badlogin'] = 'Sorry, username or password was wrong.';
+
+$lang['regmissing'] = 'Sorry, you must fill in all fields.';
+$lang['reguexists'] = 'Sorry, a user with this login already exists.';
+$lang['regsuccess'] = 'The user has been created and the password was sent by email.';
+$lang['regsuccess2']= 'The user has been created.';
+$lang['regmailfail']= 'Looks like there was an error on sending the password mail. Please contact the admin!';
+$lang['regbadmail'] = 'The given email address looks invalid - if you think this is an error, contact the admin';
+$lang['regbadpass'] = 'The two given passwords are not identically, please try again.';
+$lang['regpwmail'] = 'Your DokuWiki password';
+$lang['reghere'] = 'You don\'t have an account yet? Just get one';
+
+$lang['txt_upload'] = 'Select file to upload';
+$lang['txt_filename'] = 'Enter wikiname (optional)';
+$lang['txt_overwrt'] = 'Overwrite existing file';
+$lang['lockedby'] = 'Currently locked by';
+$lang['lockexpire'] = 'Lock expires at';
+$lang['willexpire'] = 'Your lock for editing this page is about to expire in a minute.\nTo avoid conflicts use the preview button to reset the locktimer.';
+
+$lang['notsavedyet'] = 'Unsaved changes will be lost.\nReally continue?';
+
+$lang['rssfailed'] = 'An error occured while fetching this feed: ';
+$lang['nothingfound']= 'Tiştek nehat dîtin.';
+
+$lang['mediaselect'] = 'Mediafile Selection';
+$lang['fileupload'] = 'Mediafile Upload';
+$lang['uploadsucc'] = 'Upload successful';
+$lang['uploadfail'] = 'Upload failed. Maybe wrong permissions?';
+$lang['uploadwrong'] = 'Upload denied. This file extension is forbidden!';
+$lang['uploadexist'] = 'File already exists. Nothing done.';
+$lang['deletesucc'] = 'The file "%s" has been deleted.';
+$lang['deletefail'] = '"%s" couldn\'t be deleted - check permissions.';
+$lang['mediainuse'] = 'The file "%s" hasn\'t been deleted - it is still in use.';
+$lang['namespaces'] = 'Namespace';
+$lang['mediafiles'] = 'Available files in';
+
+$lang['reference'] = 'Referansa';
+$lang['ref_inuse'] = 'The file can\'t be deleted, because it\'s still used by the following pages:';
+$lang['ref_hidden'] = 'Some references are on pages you don\'t have permission to read';
+
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Matching pagenames';
+$lang['toc'] = 'Tabloya Navêrokê';
+$lang['current'] = 'current';
+$lang['yours'] = 'Your Version';
+$lang['diff'] = 'show differences to current version';
+$lang['line'] = 'Rêz';
+$lang['breadcrumb'] = 'Åžop';
+$lang['lastmod'] = 'Guherandina dawî';
+$lang['by'] = 'by';
+$lang['deleted'] = 'hat jê birin';
+$lang['created'] = 'hat afirandin';
+$lang['restored'] = 'old revision restored';
+$lang['summary'] = 'Kurteya guhartinê';
+
+$lang['mail_newpage'] = 'page added:';
+$lang['mail_changed'] = 'page changed:';
+
+$lang['js']['nosmblinks'] = "Linking to Windows shares only works in Microsoft Internet Explorer.\nYou still can copy and paste the link.";
+
+$lang['qb_bold'] = 'Bold Text';
+$lang['qb_italic'] = 'Italic Text';
+$lang['qb_underl'] = 'Underlined Text';
+$lang['qb_code'] = 'Code Text';
+$lang['qb_strike'] = 'Strike-through Text';
+$lang['qb_h1'] = 'Level 1 Headline';
+$lang['qb_h2'] = 'Level 2 Headline';
+$lang['qb_h3'] = 'Level 3 Headline';
+$lang['qb_h4'] = 'Level 4 Headline';
+$lang['qb_h5'] = 'Level 5 Headline';
+$lang['qb_link'] = 'Internal Link';
+$lang['qb_extlink'] = 'External Link';
+$lang['qb_hr'] = 'Horizontal Rule';
+$lang['qb_ol'] = 'Ordered List Item';
+$lang['qb_ul'] = 'Unordered List Item';
+$lang['qb_media'] = 'Add Images and other files';
+$lang['qb_sig'] = 'Insert Signature';
+
+$lang['js']['del_confirm']= 'Delete this entry?';
+
+$lang['admin_acl'] = 'Access Control List Management...';
+$lang['admin_register']= 'Add new user...';
+
+$lang['acl_group'] = 'Group';
+$lang['acl_user'] = 'User';
+$lang['acl_perms'] = 'Permissions for';
+$lang['page'] = 'Rûpel';
+$lang['namespace'] = 'Namespace';
+
+$lang['acl_perm1'] = 'Bixwîne';
+$lang['acl_perm2'] = 'Biguherîne';
+$lang['acl_perm4'] = 'Biafirîne';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Jê bibe';
+$lang['acl_new'] = 'Add new Entry';
+
+$lang['metaedit'] = 'Edit Metadata';
+$lang['metasaveerr'] = 'Writing metadata failed';
+$lang['metasaveok'] = 'Metadata saved';
+$lang['img_backto'] = 'Back to';
+$lang['img_title'] = 'Title';
+$lang['img_caption'] = 'Caption';
+$lang['img_date'] = 'Date';
+$lang['img_fname'] = 'Filename';
+$lang['img_fsize'] = 'Size';
+$lang['img_artist'] = 'Photographer';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords']= 'Keywords';
+
+$lang['subscribe_success'] = 'Added %s to subscription list for %s';
+$lang['subscribe_error'] = 'Error adding %s to subscription list for %s';
+$lang['subscribe_noaddress']= 'There is no address associated with your login, you cannot be added to the subscription list';
+$lang['unsubscribe_success']= 'Removed %s from subscription list for %s';
+$lang['unsubscribe_error'] = 'Error removing %s from subscription list for %s';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt
new file mode 100644
index 000000000..af6347a96
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt
@@ -0,0 +1,3 @@
+====== Page locked ======
+
+This page is currently locked for editing by another user. You have to wait until this user finishes editing or the lock expires.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt
new file mode 100644
index 000000000..2004ea198
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+You are currently not logged in! Enter your authentication credentials below to log in. You need to have cookies enabled to log in.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt
new file mode 100644
index 000000000..44a3f6553
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt
@@ -0,0 +1,17 @@
+A page in your DokuWiki was added or changed. Here are the details:
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+Edit Summary: @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt
new file mode 100644
index 000000000..6d256f06e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt
@@ -0,0 +1,3 @@
+====== Ev rûpel hîn nehat nivîsandin ======
+
+Rûpela tu hatî hîn nehat nivîsandin. Tu dikarî niha dest bi nivîsandina vê rûpelê bikî. Ji bo vê, ''Dest pê bike'' bitikîne.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt
new file mode 100644
index 000000000..0b21bf3f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt
@@ -0,0 +1,4 @@
+====== No such revision ======
+
+The specified revision doesn't exist. Use the ''Old revisions'' button for a list of old revisions of this document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt
new file mode 100644
index 000000000..da8f4cb44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt
@@ -0,0 +1,3 @@
+====== Pêşdîtin ======
+
+Li vê derê tu dikarî bibîni ku nivîsa te dê çawa xuya bibe. Ji bîr neke: Hîn **nehat tomar kirin**! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt
new file mode 100644
index 000000000..9f56d81ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt
@@ -0,0 +1,2 @@
+This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt
new file mode 100644
index 000000000..268c89ab2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt
@@ -0,0 +1,3 @@
+====== Guherandinên dawî ======
+
+Ev rûpel di dema nêzîk de hatin guherandin.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt
new file mode 100644
index 000000000..b65683bc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt
@@ -0,0 +1,4 @@
+====== Register as new user ======
+
+Fill in all the information below to create a new account in this wiki. Make sure you supply a **valid e-mail address** - your new password will be sent to it. The login name should be a valid [[doku>pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt
new file mode 100644
index 000000000..dd5f35b8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt
@@ -0,0 +1,4 @@
+====== Old Revisions ======
+
+These are the older revisons of the current document. To revert to an old revision, select it from below, click ''Edit this page'' and save it.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt
new file mode 100644
index 000000000..6646228d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt
@@ -0,0 +1,5 @@
+====== Lêbigere ======
+
+Jêr encamên lêgerandina te tên nîşan dan. Heke tiştek nehatibe dîtin, tu dikarî dest bi nivîsandina rûpelekê nû bikî. Ji bo vê, ''Vê rûpelê biguherîne'' bitikîne.
+
+===== Encam ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt
new file mode 100644
index 000000000..3608de36b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt
@@ -0,0 +1,2 @@
+**This is an old revision of the document!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt
new file mode 100644
index 000000000..bc6eb48ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt
@@ -0,0 +1,29 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt
new file mode 100644
index 000000000..0c8c2637f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt
@@ -0,0 +1,17 @@
+Hello!
+
+The page @PAGE@ in the @TITLE@ wiki changed.
+Here are the changes:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+To unsubscribe from this page log into the wiki at
+@DOKUWIKIURL@ then visit
+@NEWPAGE@
+and choose 'Unsubscribe Changes'.
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt
new file mode 100644
index 000000000..f0f7d759d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blocked ======
+
+Your changes were **not** saved because it contains one or more blocked words. If you tried to spam the Wiki -- Bad dog! If you think this is an error, contact the administrator of this Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt
new file mode 100644
index 000000000..fd9ae9a87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt
@@ -0,0 +1,4 @@
+====== Administracija ======
+
+Žemiau matote veiksmų, kuriuos gali atlikti administratorius, sąrašą.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt
new file mode 100644
index 000000000..ad0d5b83a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt
@@ -0,0 +1,4 @@
+====== AtgalinÄ—s nuorodos ======
+
+Čia matote sąrašą puslapių, kuriuose yra nuorodos į esamą puslapį.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt
new file mode 100644
index 000000000..be0c5ff4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt
@@ -0,0 +1,6 @@
+====== Egzistuoja naujesnÄ— versija ======
+
+Rasta naujesnė dokumento, kurį redagavote, versija. Tai atsitinka tada, kai kitas vartotojas modifikuoja dokumentą tuo metu, kai jūs jį redaguojate.
+
+Atidžiai peržvelkite žemiau esanÄius skirtumus ir nusprÄ™skite, kuriÄ… versijÄ… iÅ¡saugoti. Paspausdami ''IÅ¡saugoti'' iÅ¡saugosite saviÅ¡kÄ™ versijÄ…. Paspausdami ''AtÅ¡aukti'' iÅ¡saugosite esamÄ… versijÄ….
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt
new file mode 100644
index 000000000..c25fb5f0c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt
@@ -0,0 +1,4 @@
+====== Priėjimas uždraustas ======
+
+Jūs neturite reikiamų teisių, kad galėtumėte tęsti. Turbūt pamiršote prisijungti :-).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt
new file mode 100644
index 000000000..dc5e59f89
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt
@@ -0,0 +1,4 @@
+====== Skirtumai ======
+
+ÄŒia matote skirtumus tarp pasirinktos versijos ir esamo dokumento.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt
new file mode 100644
index 000000000..8fadf97ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt
@@ -0,0 +1,2 @@
+Modifikuokite šį puslapį ir paspauskite ''IÅ¡saugoti''. Apie wiki sintaksÄ™ galite paskaityti [[wiki:syntax|Äia]]. PraÅ¡ome redaguoti šį puslapį tik tada, kai galite jį **patobulinti**. Jei tik norite iÅ¡bandyti wiki galimybes, praÅ¡ytume tai daryti [[playground:playground|Äia]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt
new file mode 100644
index 000000000..9e5eaeece
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt
@@ -0,0 +1,2 @@
+**Jūs naudojate seną šio dokumento versiją!** jei ją išsaugosite, su šiais duomenimis sukursite naują versiją.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt
new file mode 100644
index 000000000..d13683c47
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt
@@ -0,0 +1,4 @@
+====== Indeksas ======
+
+ÄŒia matote visų Å¡iuo metu egzistuojanÄių puslapių sÄ…raÅ¡Ä…. Jie iÅ¡rÅ«Å¡iuoti pagal [[doku>namespaces|pavadinimÄ…]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php
new file mode 100644
index 000000000..151964e03
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php
@@ -0,0 +1,207 @@
+<?php
+/**
+ * lithuanian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Linas Valiukas <shirshegsm@gmail.com>
+ * @author Edmondas Girkantas <eg@zemaitija.net>
+ * @author Arūnas Vaitekūnas <aras@fan.lt>
+ * @author audrius.klevas@gmail.com
+ * @author Arunas Vaitekunas <aras@fan.lt>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Redaguoti šį puslapį';
+$lang['btn_source'] = 'Parodyti puslapio kodÄ…';
+$lang['btn_show'] = 'Parodyti puslapį';
+$lang['btn_create'] = 'Sukurti šį puslapį';
+$lang['btn_search'] = 'Paieška';
+$lang['btn_save'] = 'IÅ¡saugoti';
+$lang['btn_preview'] = 'Peržiūra';
+$lang['btn_top'] = 'Į viršų';
+$lang['btn_newer'] = '<< naujesnÄ—';
+$lang['btn_older'] = 'senesnÄ— >>';
+$lang['btn_revs'] = 'Senos versijos';
+$lang['btn_recent'] = 'Naujausi keitimai';
+$lang['btn_upload'] = 'Atsiųsti bylą';
+$lang['btn_cancel'] = 'Atšaukti';
+$lang['btn_index'] = 'Indeksas';
+$lang['btn_secedit'] = 'Redaguoti';
+$lang['btn_login'] = 'Prisijungti';
+$lang['btn_logout'] = 'Atsijungti';
+$lang['btn_admin'] = 'Administracija';
+$lang['btn_update'] = 'Atnaujinti';
+$lang['btn_delete'] = 'IÅ¡trinti';
+$lang['btn_back'] = 'Atgal';
+$lang['btn_backlink'] = 'AtgalinÄ—s nuorodos';
+$lang['btn_backtomedia'] = 'Atgal į Mediabylos išsirinkimą';
+$lang['btn_subscribe'] = 'Užsisakyti keitimų prenumeratą';
+$lang['btn_unsubscribe'] = 'Atsisakyti keitimų prenumeratos';
+$lang['btn_subscribens'] = 'Užsakyti vardų srities prenumeratą';
+$lang['btn_unsubscribens'] = 'Atsisakyti vardų srities prenumeratos';
+$lang['btn_profile'] = 'Atnaujinti profilį';
+$lang['btn_reset'] = 'Atstata';
+$lang['btn_resendpwd'] = 'Išsiųsti naują slaptažodį';
+$lang['btn_draft'] = 'Redaguoti juodraštį';
+$lang['btn_recover'] = 'Atkurti juodraštį';
+$lang['btn_draftdel'] = 'Šalinti juodraštį';
+$lang['loggedinas'] = 'Prisijungęs kaip';
+$lang['user'] = 'Vartotojo vardas';
+$lang['pass'] = 'Slaptažodis';
+$lang['newpass'] = 'Naujas slaptažodis';
+$lang['oldpass'] = 'Patvirtinti esamą slaptažodį';
+$lang['passchk'] = 'dar kartÄ…';
+$lang['remember'] = 'Prisiminti mane';
+$lang['fullname'] = 'Visas vardas';
+$lang['email'] = 'El. pašto adresas';
+$lang['register'] = 'Registruotis';
+$lang['profile'] = 'Vartotojo profilis';
+$lang['badlogin'] = 'Nurodėte blogą vartotojo vardą arba slaptažodį.';
+$lang['minoredit'] = 'Nedidelis pataisymas';
+$lang['draftdate'] = 'Juodraštis automatiškai išsaugotas';
+$lang['nosecedit'] = 'Puslapis buvo kažkieno pataisytas, teksto dalies informacija tapo pasenusi, todėl pakrautas visas puslapis.';
+$lang['regmissing'] = 'Turite užpildyti visus laukus.';
+$lang['reguexists'] = 'Vartotojas su pasirinktu prisijungimo vardu jau egzistuoja.';
+$lang['regsuccess'] = 'Vartotojas sukurtas, slaptažodis išsiųstas el. paštu.';
+$lang['regsuccess2'] = 'Vartotojas sukurtas.';
+$lang['regmailfail'] = 'SiunÄiant slaptažodį el. paÅ¡tu įvyko klaida - susisiekite su administracija!';
+$lang['regbadmail'] = 'Nurodytas el. pašto adresas yra neteisingas - jei manote, kad tai klaida, susisiekite su administracija';
+$lang['regbadpass'] = 'Įvesti slaptažodžiai nesutampa, bandykite dar kartą.';
+$lang['regpwmail'] = 'Jūsų DokuWiki slaptažodis';
+$lang['reghere'] = 'Dar neužsiregistravote? Padarykite tai dabar';
+$lang['profna'] = 'Ši vikisvetainė neleidžia pakeisti profilio';
+$lang['profnochange'] = 'Nėra pakeitimų, todėl nėra ką atlikti.';
+$lang['profnoempty'] = 'TuÅ¡Äias vardo arba el. paÅ¡to adreso laukas nÄ—ra leidžiamas.';
+$lang['profchanged'] = 'Vartotojo profilis sÄ—kmingai atnaujintas.';
+$lang['pwdforget'] = 'Pamiršote slaptažodį? Gaukite naują';
+$lang['resendna'] = 'Ši vikisvetainė neleidžia persiųsti slaptažodžių.';
+$lang['resendpwd'] = 'Atsiųsti naują slaptažodį';
+$lang['resendpwdmissing'] = 'Jūs turite užpildyti visus laukus.';
+$lang['resendpwdnouser'] = 'Tokio vartotojo nėra duomenų bazėje.';
+$lang['resendpwdbadauth'] = 'Atsiprašome, bet šis tapatybės nustatymo kodas netinkamas. Įsitikinkite, kad panaudojote pilną patvirtinimo nuorodą.';
+$lang['resendpwdconfirm'] = 'Patvirtinimo nuoroda išsiųsta el. paštu.';
+$lang['resendpwdsuccess'] = 'Jūsų naujas slaptažodis buvo išsiųstas el. paštu.';
+$lang['license'] = 'Jei nenurodyta kitaip, Å¡io wiki turinys ginamas tokia licencija:';
+$lang['licenseok'] = 'Pastaba: Redaguodami šį puslapį jūs sutinkate jog jūsų turinys atitinka licencijavima pagal šią licenciją';
+$lang['txt_upload'] = 'IÅ¡sirinkite atsiunÄiamÄ… bylÄ…';
+$lang['txt_filename'] = 'Įveskite wikivardą (nebūtina)';
+$lang['txt_overwrt'] = 'PerraÅ¡yti egzistuojanÄiÄ… bylÄ…';
+$lang['lockedby'] = 'Užrakintas vartotojo';
+$lang['lockexpire'] = 'Užraktas bus nuimtas';
+$lang['willexpire'] = 'Šio puslapio redagavimo užrakto galiojimo laikas baigsis po minutės.\nNorėdami išvengti nesklandumų naudokite peržiūros mygtuką ir užraktas atsinaujins.';
+$lang['notsavedyet'] = 'Pakeitimai nebus išsaugoti.\nTikrai tęsti?';
+$lang['rssfailed'] = 'SiunÄiant šį feed\'Ä… įvyko klaida: ';
+$lang['nothingfound'] = 'Paieškos rezultatų nėra.';
+$lang['mediaselect'] = 'Mediabylos išsirinkimas';
+$lang['fileupload'] = 'Mediabylos atsiuntimas';
+$lang['uploadsucc'] = 'Atsiuntimas pavyko';
+$lang['uploadfail'] = 'Atsiuntimas nepavyko. Blogi priÄ—jimo leidimai??';
+$lang['uploadwrong'] = 'Atsiuntimas atmestas. Bylos tipas neleistinas';
+$lang['uploadexist'] = 'Tokia byla jau egzistuoja. Veiksmai atšaukti.';
+$lang['uploadbadcontent'] = 'Įkeltas turinys neatitinka %s failo išplėtimo.';
+$lang['uploadspam'] = 'Įkėlimas blokuotas pagal šiukšlintojų juodajį šąrašą.';
+$lang['uploadxss'] = 'Ä®kÄ—limas blokuotas greiÄiausiai dÄ—l netinkamo teksto.';
+$lang['uploadsize'] = 'Įkeltas failas per didelis (maks. %s)';
+$lang['deletesucc'] = 'Byla "%s" ištrinta.';
+$lang['deletefail'] = 'Byla "%s" negali būti ištrinta - patikrinkite leidimus.';
+$lang['mediainuse'] = 'Byla "%s" nebuvo ištrinta - ji vis dar naudojama.';
+$lang['namespaces'] = 'Pavadinimai';
+$lang['mediafiles'] = 'Prieinamos bylos';
+$lang['js']['keepopen'] = 'Pažymėjus palikti langą atvertą';
+$lang['js']['hidedetails'] = 'PaslÄ—pti Detales';
+$lang['js']['nosmblinks'] = 'Nurodos į "Windows shares" veikia tik su Microsoft Internet Explorer naršykle.
+Vis dėlto, jūs galite nukopijuoti šią nuorodą.';
+$lang['js']['mu_btn'] = 'Pateikite kelis failus vienu ypu';
+$lang['mediausage'] = 'Failo nuorodai užrašyti naudokite tokią sintaksę:';
+$lang['mediaview'] = 'Žiūrėti pirminį failą';
+$lang['mediaroot'] = 'pradžia (root)';
+$lang['mediaextchange'] = 'Failo galūnė pasikeitė iš .%s į .%s!';
+$lang['reference'] = 'PaminÄ—jimai';
+$lang['ref_inuse'] = 'Byla negali būti ištrinta, nes ji vis dar yra naudojama šiuose puslapiuose:';
+$lang['ref_hidden'] = 'Kai kurie paminėjimai yra puslapiuose, kurių jums neleista skaityti.';
+$lang['hits'] = 'Atidarymai';
+$lang['quickhits'] = 'Sutampantys pavadinimai';
+$lang['toc'] = 'Turinys';
+$lang['current'] = 'esamas';
+$lang['yours'] = 'Jūsų versija';
+$lang['diff'] = 'rodyti skirtumus tarp Å¡ios ir esamos versijos';
+$lang['diff2'] = 'Parodyti skirtumus tarp pasirinktų versijų';
+$lang['line'] = 'Linija';
+$lang['breadcrumb'] = 'Kelias';
+$lang['youarehere'] = 'JÅ«s esate Äia';
+$lang['lastmod'] = 'Keista';
+$lang['by'] = 'vartotojo';
+$lang['deleted'] = 'ištrintas';
+$lang['created'] = 'sukurtas';
+$lang['restored'] = 'atstatyta sena versija';
+$lang['external_edit'] = 'redaguoti papildomomis priemonÄ—mis';
+$lang['summary'] = 'Redaguoti santraukÄ…';
+$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> reikalingas šios medžiagos peržiūrai.';
+$lang['mail_newpage'] = '[DokuWiki] puslapis pridÄ—tas:';
+$lang['mail_changed'] = '[DokuWiki] puslapis pakeistas:';
+$lang['mail_new_user'] = 'naujas vartotojas:';
+$lang['mail_upload'] = 'failas įkeltas:';
+$lang['qb_bold'] = 'Pusjuodis';
+$lang['qb_italic'] = 'Kursyvas';
+$lang['qb_underl'] = 'Pabrauktas';
+$lang['qb_code'] = 'Kodas';
+$lang['qb_strike'] = 'Perbraukta';
+$lang['qb_h1'] = 'Pirmo lygio antraštė';
+$lang['qb_h2'] = 'Antro lygio antraštė';
+$lang['qb_h3'] = 'TreÄio lygio antraÅ¡tÄ—';
+$lang['qb_h4'] = 'Ketvirto lygio antraštė';
+$lang['qb_h5'] = 'Penkto lygio antraštė';
+$lang['qb_link'] = 'VidinÄ— nuoroda';
+$lang['qb_extlink'] = 'IÅ¡orinÄ— nuoroda';
+$lang['qb_hr'] = 'Horizontali linija';
+$lang['qb_ol'] = 'Numeruotas sąrašas';
+$lang['qb_ul'] = 'Nenumetuotas sąrašas';
+$lang['qb_media'] = 'PaveikslÄ—liai ir kitos bylos';
+$lang['qb_sig'] = 'Įterpti parašą';
+$lang['qb_smileys'] = 'Å ypsenÄ—lÄ—s';
+$lang['qb_chars'] = 'Specialūs simboliai';
+$lang['js']['del_confirm'] = 'Ar tikrai ištrinti pažymėtą(us) įrašą(us)?';
+$lang['admin_register'] = 'Sukurti naujÄ… vartotojÄ…';
+$lang['metaedit'] = 'Redaguoti metaduomenis';
+$lang['metasaveerr'] = 'Nepavyko išsaugoti metaduomenų';
+$lang['metasaveok'] = 'Metaduomenys išsaugoti';
+$lang['img_backto'] = 'Atgal į';
+$lang['img_title'] = 'Pavadinimas';
+$lang['img_caption'] = 'Antraštė';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Bylos pavadinimas';
+$lang['img_fsize'] = 'Dydis';
+$lang['img_artist'] = 'Fotografas';
+$lang['img_copyr'] = 'AutorinÄ—s teisÄ—s';
+$lang['img_format'] = 'Formatas';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Raktiniai žodžiai';
+$lang['subscribe_success'] = '%s užsakyta "%s" prenumerata';
+$lang['subscribe_error'] = '%s užsakant "%s" prenumeratą įvyko klaida';
+$lang['subscribe_noaddress'] = 'Jūs nesatė nurodęs el. pašto adreso, todėl negalima Jums užsakyti prenumeratos';
+$lang['unsubscribe_success'] = '%s ištrintas iš "%s" prenumeratos';
+$lang['unsubscribe_error'] = '%s trinant iš "%s" prenumeratos įvyko klaida';
+$lang['authmodfailed'] = 'Bloga vartotojo tapatumo nustatymo konfigūracija. Praneškite apie tai savo administratoriui.';
+$lang['authtempfail'] = 'Vartotojo tapatumo nustatymas laikinai nepasiekiamas. Jei ši situacija kartojasi, tai praneškite savo administratoriui.';
+$lang['i_chooselang'] = 'Pasirinkite kalbÄ…';
+$lang['i_installer'] = 'DokuWiki Instaliatorius';
+$lang['i_wikiname'] = 'Wiki vardas';
+$lang['i_enableacl'] = 'Įjungti ACL (rekomenduojama)';
+$lang['i_superuser'] = 'Supervartotojas';
+$lang['i_problems'] = 'Instaliavimo metu buvo klaidų, kurios pateiktos žemiau. Tęsti negalima, kol nebus pašalintos priežastys.';
+$lang['mu_gridname'] = 'Failo vardas';
+$lang['mu_gridsize'] = 'Dydis';
+$lang['mu_gridstat'] = 'Statusas';
+$lang['mu_namespace'] = 'Vardų sritis';
+$lang['mu_browse'] = 'Browse';
+$lang['mu_toobig'] = 'perdidelis';
+$lang['mu_ready'] = 'paruošta įkrovimui';
+$lang['mu_done'] = 'užbaigta';
+$lang['mu_fail'] = 'nepavyko';
+$lang['mu_authfail'] = 'sesija nutraukta';
+$lang['mu_filetypes'] = 'Leidžiami failų tipai';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt
new file mode 100644
index 000000000..3f6d000f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt
@@ -0,0 +1,3 @@
+====== Puslapis užrakintas ======
+
+Šis puslapis yra apsaugotas (užrakintas) nuo kitų vartotojų pakeitimų. Norėdami redaguoti puslapį, turėsite palaukti, kol kitas vartotojas baigs tai daryti arba „užrakto“ galiojimo laikas pasibaigs.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt
new file mode 100644
index 000000000..2a6e21db2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt
@@ -0,0 +1,5 @@
+====== Prisijungimas ======
+
+Šiuo metu jūs nesate prisijungęs. Įveskite savo prisijungimo duomenis žemiau. „Cookies“ palaikymas jūsų naršyklėje turi būti įjungtas.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt
new file mode 100644
index 000000000..63b2f591e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt
@@ -0,0 +1,18 @@
+Jūsų DokuWiki buvo sukurtas arba pakeistas puslapis. Detalės:
+
+Data : @DATE@
+Naršyklė : @BROWSER@
+IP adresas : @IPADDRESS@
+Host'as : @HOSTNAME@
+Sena versija: @OLDPAGE@
+Nauja versija: @NEWPAGE@
+Redagavimo aprašas: @SUMMARY@
+Vartotojas : @USER@
+
+Pakeitimo diff'as:
+
+@DIFF@
+
+
+--
+Šis laiškas buvo sugeneruotas DokuWiki (@DOKUWIKIURL@).
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt
new file mode 100644
index 000000000..c28e30bd4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt
@@ -0,0 +1,4 @@
+====== Å is puslapis dar neegzistuoja ======
+
+Nuoroda, kurią jūs paspaudėte, atvedė į dar neegzistuojantį puslapį. Jūs galite jį sukurti paspausdami ''Sukurti šį puslapį'' mygtuką.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt
new file mode 100644
index 000000000..028ebe7f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt
@@ -0,0 +1,5 @@
+====== Tokios versijos nÄ—ra ======
+
+Nurodyta versija neegzistuoja. NorÄ—dami pamatyti visas dokumento versijas, paspauskite ''Senos versijos'' mygtukÄ…
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt
new file mode 100644
index 000000000..2d24e2164
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt
@@ -0,0 +1,5 @@
+====== Peržiūra ======
+
+Čia matote, kaip atrodo jūsų pakeitimai. **Pakeitimai dar nėra išsaugoti!**
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt
new file mode 100644
index 000000000..91ea7e656
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt
@@ -0,0 +1,3 @@
+Šį puslapį galima tik skaityti. Jūs galite peržvelgti jo kodą (source), bet negalite jo keisti. Jei manote, kad tai klaida - susisiekite su administratoriumi.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt
new file mode 100644
index 000000000..506538629
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt
@@ -0,0 +1,5 @@
+====== Naujausi keitimai ======
+
+Å ie puslapiai buvo neseniai pakeisti.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt
new file mode 100644
index 000000000..f595826f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt
@@ -0,0 +1,4 @@
+====== Naujo vartotojo registracija ======
+
+NorÄ—dami tapti nauju registruotu Å¡io tinklalapio vartotoju, užpildykite žemiau esanÄiÄ… formÄ…. BÅ«tinai turite nurodyti **veikiantį el. paÅ¡to adresÄ…**, nes jÅ«sų slaptažodis bus iÅ¡siųstas pastaruoju adresu. Prisijungimo vardas turÄ—tų bÅ«ti sukurtas pagal [[doku>pagename|puslapio pavadinimo]] taisykles.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt
new file mode 100644
index 000000000..753827108
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Siųsti naują slaptažodį ======
+
+Naujo slaptažodžio gavimui, užpildykite visus žemiau esanÄius laukus. Naujas slaptažodis bus atsiųstas į jÅ«sų užregistruotÄ… el. paÅ¡to adresÄ…. Vartotojo vardas turi bÅ«ti toks pat kaip ir wiki sistemoje.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt
new file mode 100644
index 000000000..9999767bd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt
@@ -0,0 +1,4 @@
+====== Senos versijos ======
+
+Čia matote senas šio dokumento versijas. Jei norite atstatyti dokumentą į jo senesniąją versiją, paspauskite "Redaguoti šį puslapį" prie norimos versijos ir išsaugokite ją.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt
new file mode 100644
index 000000000..a83a6a58a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt
@@ -0,0 +1,5 @@
+====== Paieška ======
+
+Žemiau matote Jūsų atliktos paieškos rezultatus. Jeigu neradote to, ko ieškojote, galite sukurti naują puslapį šiuo pavadinimu paspausdami "Redaguoti šį puslapį".
+
+===== Rezultatai ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt
new file mode 100644
index 000000000..ed774244a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt
@@ -0,0 +1,2 @@
+**ÄŒia yra sena dokumento versija!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt
new file mode 100644
index 000000000..8f101bcd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt
@@ -0,0 +1,17 @@
+Sveiki!
+
+Pranešame, kad Wiki tinklalapyje @TITLE@ pakeistas puslapis @PAGE@.
+Å tai pakeitimai:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+NorÄ—dami nutraukti Å¡iÄ… prenumeratÄ…, apsilankykite
+@DOKUWIKIURL@, tada atverkite
+@NEWPAGE@
+ir išsirinkite 'Atsisakyti keitimų prenumeratos'.
+
+--
+Šis laiškas sugeneruotas DokuWiki (@DOKUWIKIURL@).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt
new file mode 100644
index 000000000..7ede1a00a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt
@@ -0,0 +1,4 @@
+====== Redaguoti savo profilį ======
+
+Užpildykite tik tuos laukus, kuriuos norite pakeisti. Vartotojo vardo keisti nebūtina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt
new file mode 100644
index 000000000..43ac79bbf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt
@@ -0,0 +1,4 @@
+====== NESPAM'INK! ======
+
+JÅ«sų pakeitimai **nebuvo iÅ¡saugoti**, nes juose rasta vienas ar daugiau užblokuotų žodžių. Jeigu manote, kad tai klaida, susisiekite su administracija. Jeigu sugalvojote Äia spam'inti - pyzdink nachui iÅ¡ Äia, byby bled!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt
new file mode 100644
index 000000000..3b37fa389
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt
@@ -0,0 +1,6 @@
+====== Administrēšana ======
+
+DokuWiki pieejamas Å¡Ädas administrÄ“Å¡anas iespÄ“jas:
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt
new file mode 100644
index 000000000..e8d208d24
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt
@@ -0,0 +1 @@
+===== Papildu moduļi ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt
new file mode 100644
index 000000000..19bebf7b2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt
@@ -0,0 +1,5 @@
+====== SaistÄ«tÄs lapas ======
+
+NorÄde uz Å¡o lapu ir atrodama dokumentos:
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt
new file mode 100644
index 000000000..5aa6442c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt
@@ -0,0 +1,8 @@
+====== Ir jaunÄka versija ======
+
+Tevis labotajam dokumentam jau ir jaunÄka versija. TÄ gadÄs, ja cits lietotÄjs tavas laboÅ¡anas laikÄ ir paguvis veikt savus labojumus.
+
+RÅ«pÄ«gi pÄrlÅ«ko Å¡eit parÄdÄ«tÄs atÅ¡Ä·irÄ«bas un tad izlem, kuru variantu paturÄ“t. Ja nospiedÄ«si ''SaglabÄt'', saglabÄsies tavs teksts. Ja nospiedÄ«si ''Atlikt'' paliks paÅ¡reizÄ“jais variants.
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt
new file mode 100644
index 000000000..c7df462c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt
@@ -0,0 +1,6 @@
+====== Piekļuve aizliegta ======
+
+Atvaino, tev nav tiesÄ«bu turpinÄt. VarbÅ«t aizmirsi ielogoties?
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt
new file mode 100644
index 000000000..40e1b5405
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt
@@ -0,0 +1,7 @@
+====== Atšķirības ======
+
+NorÄdÄ«tais vecais variants no patreizÄ“jÄs lapas atÅ¡Ä·iras ar:
+
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt
new file mode 100644
index 000000000..525f7cbb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt
@@ -0,0 +1,5 @@
+====== Atrasts melnraksta fails ======
+
+IepriekÅ¡Ä“jÄ Å¡Ä«s lapas laboÅ¡ana nav pabeigta. DokuWiki darba laikÄ automÄtiski saglabÄja melnrakstu, kuru tagad var labot tÄlÄk. ZemÄk redzami iepriekÅ¡Ä“jÄs laboÅ¡anas dati.
+
+Nolem, vai vajag //atjaunot// zuduÅ¡os labojumus, //dzÄ“st// saglabÄto melnrakstu vai //atlikt// laboÅ¡anu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt
new file mode 100644
index 000000000..9da6f2d23
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt
@@ -0,0 +1,2 @@
+Labo lapu un uzklikÅ¡Ä·ini uz ''SaglabÄt''. Par lietojamo sintaksi skaties rakstu [[wiki:syntax]]. LÅ«dzu labo tika tad, ja vari lapu **uzlabot**. Ja gribi tikai kaut ko izmÄ“Ä£inÄt, izmanto [[wiki:playground|smilÅ¡ukasti]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt
new file mode 100644
index 000000000..6fa7a4c05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt
@@ -0,0 +1 @@
+---- **Tu skaties vecu dokumenta versiju!** Ja to saglabÄsi, tad izveidosies jauns dokuments ar Å¡o veco saturu. ----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt
new file mode 100644
index 000000000..6baa2a3e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt
@@ -0,0 +1,4 @@
+====== RÄdÄ«tÄjs ======
+
+Visu pieejamo lapu rÄdÄ«tÄjs. SakÄrtots pÄ“c [[doku>namespaces|sadaļÄm]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html
new file mode 100644
index 000000000..9967d2edd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html
@@ -0,0 +1,12 @@
+<p>Å Ä« lapa palÄ«dz <a href="http://dokuwiki.org">Dokuwiki</a>pirmajÄ instalÄcijÄ un konfigurÄ“Å¡anÄ.
+VairÄk par instalatoru var lasÄ«t tÄ
+<a href="http://dokuwiki.org/installer">documentÄcijas lapÄ</a>.</p>
+
+<p>DokuWiki lapu un ar to saistÄ«to datu (piem.: attÄ“lu, meklÄ“Å¡anas indeksu, veco versiju utt.) glabÄÅ¡anai lieto parastus failus. Lai Dokuwiki veiksmÄ«gi darbotos <strong>vajag</strong> rakstÄ«Å¡anas tiesÄ«bas direktorijÄs, kur Å¡ie faili glabÄjas. Instalators tiesÄ«bas nomainÄ«t nespÄ“j. Tas parasti jums jÄizdara komandrindÄ vai ar FTP vadÄ«bas paneli (piem. cPanel).</p>
+
+<p>Instalators konfigurÄ“s DokuWiki <acronym title="access control list">ACL</acronym> lietoÅ¡anai, kas ļauj administratoram ielogoties un piekļūt DokuWiki administrÄ“Å¡anas izvÄ“lnei, lai instalÄ“tu moduļus, pÄrvaldÄ«tu lietotÄjus, notiektu piekļuves tiesÄ«bas Wiki lapÄm un mainÄ«tu DokuWiki konfigurÄciju.
+Tas nav vajadzÄ«gs, lai DokuWiki darbotos, bet ar to var vieglÄk administrÄ“t.</p>
+
+<p>PieredzÄ“juÅ¡iem lietotÄjiem ar Ä«paÅ¡Äm prasÄ«bÄm jÄmeklÄ“ sÄ«kÄkas ziņas
+<a href="http://dokuwiki.org/install">uzstÄdÄ«Å¡anas instrukcijÄ</a>
+un <a href="http://dokuwiki.org/config">konfigurēšanas padomos</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php
new file mode 100644
index 000000000..5de7a0cc6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php
@@ -0,0 +1,244 @@
+<?php
+/**
+ * latvian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Labot lapu';
+$lang['btn_source'] = 'ParÄdÄ«t lapas kodu';
+$lang['btn_show'] = 'ParÄdÄ«t lapu';
+$lang['btn_create'] = 'Izveidot lapu';
+$lang['btn_search'] = 'Meklēt';
+$lang['btn_save'] = 'SaglabÄt';
+$lang['btn_preview'] = 'Priekšskats';
+$lang['btn_top'] = 'Atpakaļ uz sÄkumu';
+$lang['btn_newer'] = '<< jaunÄki';
+$lang['btn_older'] = 'vecÄki >>';
+$lang['btn_revs'] = 'VecÄs versijas';
+$lang['btn_recent'] = 'JaunÄkie grozÄ«jumi';
+$lang['btn_upload'] = 'AugÅ¡upielÄdÄ“t';
+$lang['btn_cancel'] = 'Atlikt';
+$lang['btn_index'] = 'RÄdÄ«tÄjs';
+$lang['btn_secedit'] = 'Labot';
+$lang['btn_login'] = 'Ieiet';
+$lang['btn_logout'] = 'Iziet';
+$lang['btn_admin'] = 'Administrēt';
+$lang['btn_update'] = 'Atjaunot';
+$lang['btn_delete'] = 'Dzēst';
+$lang['btn_back'] = 'Atpakaļ';
+$lang['btn_backlink'] = 'NorÄdes uz lapu';
+$lang['btn_backtomedia'] = 'Atpakaļ uz mēdiju failu izvēli';
+$lang['btn_subscribe'] = 'Abonēt izmaiņu paziņojumus';
+$lang['btn_unsubscribe'] = 'Atteikties no izmaiņu paziņojumiem';
+$lang['btn_subscribens'] = 'Abonēt nodaļas izmaiņu paziņojumus';
+$lang['btn_unsubscribens'] = 'Atteikties no nodaļas izmaiņu paziņojumiem';
+$lang['btn_profile'] = 'Labot savu profilu';
+$lang['btn_reset'] = 'Atsaukt izmaiņas';
+$lang['btn_resendpwd'] = 'Nosūtīt jaunu paroli';
+$lang['btn_draft'] = 'Labot melnrakstu';
+$lang['btn_recover'] = 'Atjaunot melnrakstu';
+$lang['btn_draftdel'] = 'Dzēst melnrakstu';
+$lang['btn_revert'] = 'Atjaunot';
+$lang['loggedinas'] = 'Pieteicies kÄ';
+$lang['user'] = 'LietotÄjvÄrds';
+$lang['pass'] = 'Parole';
+$lang['newpass'] = 'JaunÄ parole';
+$lang['oldpass'] = 'AtkÄrto patreizÄ“jo paroli';
+$lang['passchk'] = 'vēlreiz';
+$lang['remember'] = 'Atceries mani';
+$lang['fullname'] = 'Pilns vÄrds';
+$lang['email'] = 'E-pasts';
+$lang['register'] = 'Reģistrēties';
+$lang['profile'] = 'LietotÄja vÄrds';
+$lang['badlogin'] = 'Atvaino, lietotÄjvÄrds vai parole aplama.';
+$lang['minoredit'] = 'SÄ«ki labojumi';
+$lang['draftdate'] = 'Melnraksts automÄtiski saglabÄts';
+$lang['nosecedit'] = 'Lapa pa Å¡o laiku ir mainÄ«jusies, sekcijas informÄcija novecojusi. IelÄdÄ“ta lapas pilnÄs versija.';
+$lang['regmissing'] = 'Atvaino, jÄaizpilda visas ailes.';
+$lang['reguexists'] = 'Atvaino, tÄds lietotÄjs jau ir.';
+$lang['regsuccess'] = 'LietotÄjs izveidots. Parole nosÅ«tÄ«ta pa pastu.';
+$lang['regsuccess2'] = 'LietotÄjs izveidots.';
+$lang['regmailfail'] = 'Šķiet, ka ir problēmas nosūtīt pastu. Lūdzu sazinies ar administratoru!';
+$lang['regbadmail'] = 'UzdotÄ epasta adrese izskatÄs aplama. Ja tas nav tiesa, sazinies ar administratoru.';
+$lang['regbadpass'] = 'Abas ierakstÄ«tÄs paroles nav vienÄdas, lÅ«dzu atkÄrto.';
+$lang['regpwmail'] = 'Tava DokuWiki parole';
+$lang['reghere'] = 'Tev vēl nav sava konta? Izveido!';
+$lang['profna'] = 'Labot profilu nav iespējams';
+$lang['profnochange'] = 'Izmaiņu nav. Nav, ko darīt.';
+$lang['profnoempty'] = 'Bez vÄrda vai e-pasta adreses nevar.';
+$lang['profchanged'] = 'Profils veiksmīgi izlabots.';
+$lang['pwdforget'] = 'Aizmirsi paroli? Saņem jaunu';
+$lang['resendna'] = 'Paroļu izsÅ«tÄ«Å¡anu nepiedÄvÄju.';
+$lang['resendpwd'] = 'NosÅ«tÄ«t jaunu paroli lietotÄjam';
+$lang['resendpwdmissing'] = 'Atvaino, jÄizpilda visas ailes.';
+$lang['resendpwdnouser'] = 'Atvaino, tÄda lietotÄja nav.';
+$lang['resendpwdbadauth'] = 'Atvaino, Å¡is autorizÄcijas kods nav derÄ«gs. PÄrliecinies, ka lietoji pilnu apstiprinÄÅ¡anas adresi.';
+$lang['resendpwdconfirm'] = 'ApstiprinÄÅ¡anas adrese nosÅ«tÄ«ta pa epastu.';
+$lang['resendpwdsuccess'] = 'JaunÄ parole nosÅ«tÄ«ta pa e-pastu.';
+$lang['license'] = 'Ja nav norÄdÄ«ts citÄdi, viki saturs pieejams ar Å¡Ädas licenzes noteikumiem:';
+$lang['licenseok'] = 'IevÄ“ro: Labojot lapu, tu piekrÄ«ti Å¡Ädiem licenzes noteikumiem.';
+$lang['searchmedia'] = 'MeklÄ“tais faila vÄrds: ';
+$lang['searchmedia_in'] = 'Meklēt iekš %s';
+$lang['txt_upload'] = 'NorÄdi augÅ¡upielÄdÄ“jamo failu';
+$lang['txt_filename'] = 'Ievadi vikivÄrdu (nav obligÄts)';
+$lang['txt_overwrt'] = 'AizstÄt esoÅ¡o failu';
+$lang['lockedby'] = 'Patlaban bloÄ·Ä“jis ';
+$lang['lockexpire'] = 'BloÄ·Ä“jums beigsies ';
+$lang['willexpire'] = 'Tavs bloÄ·Ä“jums uz Å¡o lapu pÄ“c minÅ«tes beigsies.\nLai izvairÄ«tos no konflikta, nospied IepriekÅ¡apskata pogu\n un bloÄ·Ä“juma laiku sÄks skaitÄ«t no jauna.';
+$lang['notsavedyet'] = 'Veiktas bet nav saglabÄtas izmaiņas.\nVai tieÅ¡Äm tÄs nevajag?';
+$lang['rssfailed'] = 'Kļūda saņemot saturu no ';
+$lang['nothingfound'] = 'Nekas nav atrasts.';
+$lang['mediaselect'] = 'Mēdiju faila izvēle';
+$lang['fileupload'] = 'MÄ“diju faila augÅ¡upielÄde';
+$lang['uploadsucc'] = 'VeiksmÄ«gi ielÄdÄ“ts';
+$lang['uploadfail'] = 'IelÄdes kļūme. VarbÅ«t aplamas tiesÄ«bas?';
+$lang['uploadwrong'] = 'IelÄde aizliegta. Neatļauts faila paplaÅ¡inÄjums';
+$lang['uploadexist'] = 'Neko nedarīju, jo fails jau ir.';
+$lang['uploadbadcontent'] = 'AugÅ¡upielÄdÄ“tÄ saturs neatbilst faila paplaÅ¡inÄjumam %s.';
+$lang['uploadspam'] = 'AugÅ¡upielÄde bloÄ·Ä“ta ar melno sarakstu.';
+$lang['uploadxss'] = 'AugÅ¡upielÄde bloÄ·Ä“ta iespÄ“jama slikta satura dēļ.';
+$lang['uploadsize'] = 'AugÅ¡up lÄdÄ“tais fails pÄrÄk liels. Maksimums ir %s.';
+$lang['deletesucc'] = 'Fails "%s" dzēsts.';
+$lang['deletefail'] = 'Nevar dzÄ“st "%s". PÄrbaudi tiesÄ«bas.';
+$lang['mediainuse'] = 'Fails "%s" nav izdzēsts, to lieto.';
+$lang['namespaces'] = 'Nodaļas';
+$lang['mediafiles'] = 'Pieejamie faili';
+$lang['js']['searchmedia'] = 'Meklēt failus';
+$lang['js']['keepopen'] = 'Pēc faila izvēles logu paturēt atvērtu';
+$lang['js']['hidedetails'] = 'Slēpt detaļas';
+$lang['js']['nosmblinks'] = 'Saites uz Windows resursiem darbojas tikai Microsoft Internet Explorer.
+Protams, ka vari saiti kopÄ“t un iespraust citÄ programmÄ.';
+$lang['js']['linkwiz'] = 'Saišu vednis';
+$lang['js']['linkto'] = 'Saite uz: ';
+$lang['js']['del_confirm'] = 'Dzēst šo šķirkli?';
+$lang['js']['mu_btn'] = 'AugÅ¡uplÄdÄ“t uzreiz vairÄkus failus.';
+$lang['mediausage'] = 'Atsaucei uz failu lietot Å¡Ädu sintaksi:';
+$lang['mediaview'] = 'SkatÄ«t oriÄ£inÄlo failu';
+$lang['mediaroot'] = 'sakne';
+$lang['mediaupload'] = 'AugÅ¡upielÄdÄ“t failu patreizÄ“jÄ nodaļÄ. Lai izveidotu apakÅ¡nodaļu, pieraksti to, atdalot ar kolu, pirms augÅ¡upielÄdÄ“jamÄ faila vÄrda.';
+$lang['mediaextchange'] = 'Faila paplaÅ¡inÄjums mainÄ«ts no .%s uz .%s!';
+$lang['reference'] = 'NorÄdes uz failu';
+$lang['ref_inuse'] = 'Failu nevar dzÄ“st, jo izmanto Å¡Ädas lapas:';
+$lang['ref_hidden'] = 'Dažas norÄdes ir lapÄs, ko nav tiesÄ«bu skatÄ«t';
+$lang['hits'] = 'Apmeklējumi';
+$lang['quickhits'] = 'AtbilstoÅ¡Äs lapas';
+$lang['toc'] = 'Satura rÄdÄ«tÄjs';
+$lang['current'] = 'patlaban';
+$lang['yours'] = 'Tava versija';
+$lang['diff'] = 'atšķirības no patreizējas versijas';
+$lang['diff2'] = 'norÄdÄ«to versiju atÅ¡Ä·irÄ«bas';
+$lang['line'] = 'Rinda';
+$lang['breadcrumb'] = 'Ceļš';
+$lang['youarehere'] = 'Tu atrodies Å¡eit';
+$lang['lastmod'] = 'Labota';
+$lang['by'] = ', labojis';
+$lang['deleted'] = 'dzēsts';
+$lang['created'] = 'izveidots';
+$lang['restored'] = 'vecÄ versija atjaunota';
+$lang['external_edit'] = 'ÄrpussistÄ“mas labojums';
+$lang['summary'] = 'AnotÄcija';
+$lang['noflash'] = 'Lai attēlotu lapas saturu, vajag <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['mail_newpage'] = 'lapa pievienota:';
+$lang['mail_changed'] = 'lapa mainīta:';
+$lang['mail_new_user'] = 'Jauns lietotÄjs:';
+$lang['mail_upload'] = 'augÅ¡upielÄdÄ“tais fails:';
+$lang['qb_bold'] = 'TrekninÄjums';
+$lang['qb_italic'] = 'Kursīvs';
+$lang['qb_underl'] = 'Pasvītrojums';
+$lang['qb_code'] = 'Vienplatuma burti';
+$lang['qb_strike'] = 'PÄrsvÄ«trots teksts';
+$lang['qb_h1'] = '1. līmeņa virsraksts';
+$lang['qb_h2'] = '2. līmeņa virsraksts';
+$lang['qb_h3'] = '3. līmeņa virsraksts';
+$lang['qb_h4'] = '4. līmeņa virsraksts';
+$lang['qb_h5'] = '5. līmeņa virsraksts';
+$lang['qb_h'] = 'Virsraksts';
+$lang['qb_hs'] = 'Izraudzīties virsrakstu';
+$lang['qb_hplus'] = 'LielÄks virsraksts';
+$lang['qb_hminus'] = 'MazÄks virsraksts';
+$lang['qb_hequal'] = 'TÄds pats virsraksts';
+$lang['qb_link'] = 'Iekšēja saite';
+$lang['qb_extlink'] = 'Ārēja saite';
+$lang['qb_hr'] = 'HorizontÄla lÄ«nija';
+$lang['qb_ol'] = 'Numurēts saraksts';
+$lang['qb_ul'] = 'Nenumurēts saraksts';
+$lang['qb_media'] = 'Pielikt attēlus un citus failus.';
+$lang['qb_sig'] = 'Ievietot parakstu';
+$lang['qb_smileys'] = 'Emotikoni';
+$lang['qb_chars'] = 'ĪpaÅ¡Äs zÄ«mes';
+$lang['upperns'] = 'vienu nodaļu lÄ«meni augstÄk';
+$lang['admin_register'] = 'Pievienot jaunu lietotÄju';
+$lang['metaedit'] = 'Labot metadatus';
+$lang['metasaveerr'] = 'Metadati nav saglabÄti';
+$lang['metasaveok'] = 'Metadati saglabÄti';
+$lang['img_backto'] = 'Atpakaļ uz';
+$lang['img_title'] = 'Virsraksts';
+$lang['img_caption'] = 'Apraksts';
+$lang['img_date'] = 'Datums';
+$lang['img_fname'] = 'Faila vÄrds';
+$lang['img_fsize'] = 'Izmērs';
+$lang['img_artist'] = 'FotogrÄfs';
+$lang['img_copyr'] = 'Autortiesības';
+$lang['img_format'] = 'FormÄts';
+$lang['img_camera'] = 'FotoaparÄts';
+$lang['img_keywords'] = 'AtslÄ“gvÄrdi';
+$lang['subscribe_success'] = '%s pievienots %s abonentu sarakstam';
+$lang['subscribe_error'] = 'Kļūme pievienojot %s %s abonentu sarakstam';
+$lang['subscribe_noaddress'] = 'Nav zinÄma adrese, ko pievienot abonentu sarakstam';
+$lang['unsubscribe_success'] = ' %s svītrots no %s abonentu saraksta';
+$lang['unsubscribe_error'] = 'Kļūme svītrojot %s no %s abonentu saraksta';
+$lang['authmodfailed'] = 'Aplami konfigurÄ“ta lietotÄju autentifikÄcija. LÅ«dzo ziņo Wiki administratoram.';
+$lang['authtempfail'] = 'LietotÄju autentifikÄcija paÅ¡laik nedarbojas. Ja tas turpinÄs ilgstoÅ¡i, lÅ«duz ziņo Wiki administratoram.';
+$lang['i_chooselang'] = 'Izvēlies valodu';
+$lang['i_installer'] = 'DokuWiki instalÄ“tÄjs';
+$lang['i_wikiname'] = 'Wiki vÄrds';
+$lang['i_enableacl'] = 'Lietot ACL (ieteikts)';
+$lang['i_superuser'] = 'Superuser';
+$lang['i_problems'] = 'InstalÄ“tÄjs atrada zemÄk minÄ“tÄs problÄ“mas. KamÄ“r tÄs nenovÄ“rÅ¡, nav iespÄ“jam turpinÄt.';
+$lang['i_modified'] = 'DroÅ¡Ä«bas nolÅ«kos Å¡is skripts darbosies tika ar jaunu nemodificÄ“tu Dokuwiki instalÄciju.
+Vai nu no jauna jÄatarhivÄ“ faili no lejupielÄdÄ“tÄs pakas vai jÄraugÄs pÄ“c padoma pilnÄ Dokuwiki instalÄcijas instrukcijÄ <a href="http://dokuwiki.org/install"></a>';
+$lang['i_funcna'] = 'PHP funkcija <code>%s</code> nav pieejama. VarbÅ«t jÅ«su servera Ä«paÅ¡nieks to kÄda iemesla dēļ atslÄ“dzis?';
+$lang['i_phpver'] = 'JÅ«su PHP versija <code>%s</code> ir par vecu. Vajag versiju <code>%s</code>. Atjaunojiet savu PHP instalÄciju.';
+$lang['i_permfail'] = 'Dokuwiki nevar ierakstÄ«t <code>%s</code>. JÄlabo direktorijas tiesÄ«bas!';
+$lang['i_confexists'] = '<code>%s</code> jau ir';
+$lang['i_writeerr'] = 'Nevar izveidot <code>%s</code>. JÄpÄrbauda direktorijas/faila tiesÄ«bas un fails jÄizveido paÅ¡am.';
+$lang['i_badhash'] = 'nepazīstams vai izmainīts dokuwiki.php fails (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - neatļauta vai tukša vērtība';
+$lang['i_success'] = 'KonfigurÄ“Å¡ana veiksmÄ«gi pabeigta. Tagad vari nodzÄ“st failu install.php. TÄlÄk turpini <a href="doku.php">savÄ jaunajÄ DokuWiki</a>.';
+$lang['i_failure'] = 'Rakstot konfigurÄcijas failu, gadÄ«jÄs dažas kļūmes. Pirms lieto <a href="doku.php">savu jauno DokuWiki</a>, tÄs varbÅ«t jÄizlabo.';
+$lang['i_policy'] = 'SÄkotnÄ“jÄ ACL politika';
+$lang['i_pol0'] = 'AtvÄ“rts Wiki (raksta, lasa un augÅ¡upielÄdÄ“ ikviens)';
+$lang['i_pol1'] = 'Publisks Wiki (lasa ikviens, raksta un augÅ¡upielÄdÄ“ reÄ£istrÄ“ti lietotÄji)';
+$lang['i_pol2'] = 'SlÄ“gts Wiki (raksta, lasa un augÅ¡upielÄdÄ“ tikai reÄ£istrÄ“ti lietotÄji)';
+$lang['i_retry'] = 'AtkÄrtot';
+$lang['mu_intro'] = 'Å eit var augÅ¡upielÄdÄ“t uzreiz vairÄku failus. UzklikÅ¡Ä·ini PÄrlÅ«kot pogai, lai tos ieliktu rindÄ. Nospied AugÅ¡upielÄdÄ“t, kad rinda sastÄdÄ«ta.';
+$lang['mu_gridname'] = 'Faila vÄrds';
+$lang['mu_gridsize'] = 'Izmērs';
+$lang['mu_gridstat'] = 'Statuss';
+$lang['mu_namespace'] = 'Nodaļa';
+$lang['mu_browse'] = 'PÄrlÅ«kot';
+$lang['mu_toobig'] = 'par lielu';
+$lang['mu_ready'] = 'gatavs augÅ¡upielÄdei';
+$lang['mu_done'] = 'pabeigts';
+$lang['mu_fail'] = 'neizdevÄs';
+$lang['mu_authfail'] = 'sesijas laiks iztecējis';
+$lang['mu_progress'] = '@PCT@% augÅ¡upielÄdÄ“ts';
+$lang['mu_filetypes'] = 'Atļautie failu tipi';
+$lang['mu_info'] = 'faili ir augÅ¡upielÄdÄ“ti.';
+$lang['mu_lasterr'] = 'PÄ“dÄ“jÄ Ä·Ä¼Å«da.';
+$lang['recent_global'] = 'Tu skati izmaiņas nodaÄ¼Ä <b>%s</b>. Ir iespÄ“jams <a href="%s">skatÄ«t jaunÄkos grozÄ«jums visÄ viki</a>. ';
+$lang['years'] = 'pirms %d gadiem';
+$lang['months'] = 'pirms %d mēnešiem';
+$lang['weeks'] = 'pirms % nedēļÄm';
+$lang['days'] = 'pirms %d dienÄm';
+$lang['hours'] = 'pirms %d stundÄm';
+$lang['minutes'] = 'pirms %d minūtēm';
+$lang['seconds'] = 'pirms %d sekundēm';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt
new file mode 100644
index 000000000..7d57ce98b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt
@@ -0,0 +1,5 @@
+====== Lapa aizņemta ======
+
+Lapa aizņemta, to patlaban labo cits lietotÄjs. Tev ir jÄgaida, kamÄ“r to pabeigs labot vai arÄ« iztecÄ“s labotÄjam atvÄ“lÄ“tais laiks.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt
new file mode 100644
index 000000000..a98d21d1a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt
@@ -0,0 +1,3 @@
+====== Login ======
+Tu neesi ielogojies! Ievadi savu lietotÄjvÄrdu un paroli. PÄrlÅ«kprogrammai jÄpieņem //cookies//.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt
new file mode 100644
index 000000000..cd4a5d6d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt
@@ -0,0 +1,18 @@
+TavÄ DokuWiki pievienota vai labota lapa. Å eit ir sÄ«kÄkas ziņas:
+
+Datums : @DATE@
+PÄrlÅ«ks : @BROWSER@
+IP adrese : @IPADDRESS@
+Dators : @HOSTNAME@
+VecÄ versija : @OLDPAGE@
+JaunÄ versija: @NEWPAGE@
+AnotÄcija : @SUMMARY@
+LietotÄjs : @USER@
+
+@DIFF@
+
+
+--
+Vēstuli nosūtījusi DokuWiki programma no
+@DOKUWIKIURL@ datora
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt
new file mode 100644
index 000000000..a4a05fdc5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt
@@ -0,0 +1,5 @@
+====== Šķirklis vēl nav izveidots ======
+
+Tu izvēlējies saiti uz vēl neizveidotu šķirkli. Ja tiesības ļauj, vari to izveidot, uzklikšķinot uz pogas ''Izveidot lapu''.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt
new file mode 100644
index 000000000..b7c46245f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt
@@ -0,0 +1,5 @@
+====== Nav Å¡Ädas versijas ======
+
+NorÄdÄ«tÄs lapas versijas nav. Lieto pogu ''VecÄs versijas'', lai redzÄ“tu dokumenta veco versiju sarakstu.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt
new file mode 100644
index 000000000..c3d618a12
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt
@@ -0,0 +1,5 @@
+====== Priekšskats ======
+
+Tavs teksts izskatÄ«sies Å¡Ädi. IevÄ“ro, tas vÄ“l **nav saglabÄts** !
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt
new file mode 100644
index 000000000..308ca29a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt
@@ -0,0 +1,14 @@
+Sveiki, @FULLNAME@!
+
+KÄds pieprasÄ«jis jaunu paroli tavam @TITLE@ kontam
+@DOKUWIKIURL@ sistÄ“mÄ.
+
+Ja paroli neesi prasījis, ignorē šo vēstuli.
+
+Lai apstiprinÄtu, ka esi paroli pieprasÄ«jis lieto norÄdÄ«to saiti.
+
+@CONFIRM@
+
+--
+Šo vēstuli ģenerējusi DokuWiki no
+@DOKUWIKIURL \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt
new file mode 100644
index 000000000..876e53cb8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt
@@ -0,0 +1,4 @@
+Å Ä« lapa ir tikai lasÄma. Vari apskatÄ«t izejas kodu, bet nevari to mainÄ«t. Ja domÄ, ka tas nav pareizi, vaicÄ administratoram.
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt
new file mode 100644
index 000000000..70cf1aa1e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt
@@ -0,0 +1,8 @@
+====== JaunÄkie grozÄ«jumi ======
+
+JaunÄkie labojumi ir:
+
+
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt
new file mode 100644
index 000000000..5e6477d37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt
@@ -0,0 +1,4 @@
+====== Jauna lietotÄja reÄ£istrÄcija ======
+
+Lai izveidotu jaunu kontu, aizpildi visas prasÄ«tÄs ailes. PÄrliecinies, ka uzdod **derÄ«gu pasta adresi**, jo jauno paroli tev nosÅ«tÄ«s pa pastu. LietotÄjvÄrdam jÄatbilst [[doku>pagename|wiki vÄrdu nosacÄ«jumiem]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt
new file mode 100644
index 000000000..50fd8a92b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt
@@ -0,0 +1,14 @@
+ReÄ£istrÄ“ts jauns lietotÄjs. TÄ dati:
+
+LietotÄjvÄrds : @NEWUSER@
+Pilns vÄrds : @NEWNAME@
+E-pasts : @NEWEMAIL@
+
+Datums : @DATE@
+PÄrlÅ«ks : @BROWSER@
+IP aderese : @IPADDRESS@
+Datora vÄrds: @HOSTNAME@
+
+--
+Šo vēstuli ģenerējis DokuWiki no
+@DOKUWIKIURL \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt
new file mode 100644
index 000000000..3f4597ac0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Nosūtīt jaunu paroli ======
+
+Azipildi zemÄk prasÄ«to, lai saņemtu savam kontam jaunu paroli. Jauno paroli nosÅ«tÄ«s uz reÄ£istrÄ“to e-pasta adresi. LietotÄja vÄrdam jÄbÅ«t tavam //wiki sistÄ“mas// lietotÄjavÄrdam.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt
new file mode 100644
index 000000000..51ad8495d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt
@@ -0,0 +1,5 @@
+====== VecÄs versijas ======
+
+Dokumentam ir Å¡Ädas vecÄs versijas. Lai atgrieztos pie vecÄ varianta, izvÄ“lies to no saraksta, uzklikÅ¡Ä·ini uz "Labot Å¡o lapu" un saglabÄ to.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt
new file mode 100644
index 000000000..22eb55f04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt
@@ -0,0 +1,4 @@
+====== Meklēšana ======
+
+Te vari redzÄ“t meklÄ“Å¡anas rezultÄtus. Ja neatradi meklÄ“to, nospiežot pogu "Labot lapu", vari izveidot jaunu lapu ar tevis meklÄ“tajiem atslÄ“gvÄrdiem nosaukumÄ.
+===== Atrasts =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt
new file mode 100644
index 000000000..7d5c0fa07
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt
@@ -0,0 +1,2 @@
+**Å Ä« ir veca dokumenta versija!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt
new file mode 100644
index 000000000..846c86946
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt
@@ -0,0 +1,48 @@
+# Å is ir to vÄrdu sarakstus, kurus indeksÄ“tÄjs neņem vÄ“rÄ. Katru vÄrdu savÄ rindÄ!
+# Labojot failu ievÄ“ro, ja jÄlieto UNIX rindu aplauzumi (single newline)
+# Nevajag likt sarakstÄ par 3 burtiem Ä«sÄkus vÄrdus, tos tÄ pat neņem vÄ“rÄ
+# Angļu valodai saraksts ņemts no http://www.ranks.nl/stopwords/
+gar
+par
+pÄr
+pret
+starp
+caur
+uz
+aiz
+apakš
+bez
+iz
+kopš
+no
+pēc
+pie
+pirms
+priekš
+uz
+virs
+zem
+apakšpus
+Ärpus
+augšpus
+iekšpus
+lejpus
+otrpus
+Å¡aipus
+viņpus
+virspus
+dēļ
+labad
+pēc
+līdz
+pa
+vai
+jÄ
+nē
+kaut
+nav
+itin
+jo
+taÄu
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt
new file mode 100644
index 000000000..1395009f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt
@@ -0,0 +1,23 @@
+Sveiki!
+
+@TITLE@ wiki ir mainījusies lapa @PAGE@ .
+
+Atšķirības ir:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Datums : @DATE@
+LietotÄjs : @USER@
+Izmaiņu anotÄcija: @SUMMARY@
+VecÄ versijan: @OLDPAGE@
+JaunÄ versija: @NEWPAGE@
+
+Lai atteiktos no Å¡Ä«m vÄ“stulÄ“m, ielogojies wiki sistÄ“mÄ
+@DOKUWIKIURL@, tad apmeklē @NEWPAGE@
+uz izvēlies 'Atteikties no izmaiņu paziņojumiem'.
+
+--
+Vestuli izveidoja
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt
new file mode 100644
index 000000000..12fbd8de4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt
@@ -0,0 +1,8 @@
+====== Atjaunot sava konta datus ======
+
+JÄaizpilda tikai tie lauki, kuru saturu vÄ“lies mainÄ«t. Nav iespÄ“jams mainÄ«t savu lietotÄjvÄrdu.
+
+
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt
new file mode 100644
index 000000000..5975d5bd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt
@@ -0,0 +1,14 @@
+Fails augÅ¡upielÄdÄ“ts DokuWiki. SÄ«kÄkas ziņas:
+
+Fails : @MEDIA@
+Datums : @DATE@
+PÄrlÅ«ks : @BROWSER@
+IP adrese : @IPADDRESS@
+Datora vÄrds : @HOSTNAME@
+Izmērs : @SIZE@
+MIME tips : @MIME@
+LietotÄjs : @USER@
+
+--
+Vēstuli nosūtījusi DokuWiki programma no
+@DOKUWIKIURL@ datora. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt
new file mode 100644
index 000000000..aa7051c8d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAMs bloÄ·Ä“ts ======
+
+Tavas izmaiņas **nav** saglabÄtas, jo satur vienu vai vairÄkus aizliegtos vÄrdus. Ja uzskati, ka tÄ ir kļūda, sazinies ar administratoru.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt
new file mode 100644
index 000000000..2c4fc3f6c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Hitanao eo ambany lisitry ny asa fanaovana admin misy amin'ny DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt
new file mode 100644
index 000000000..c625e6504
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt
@@ -0,0 +1,5 @@
+====== Verindrohy ======
+
+Lisitr'ireo pejy misy rohy manondro amin'ity pejy ity.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt
new file mode 100644
index 000000000..96b369e39
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt
@@ -0,0 +1,6 @@
+====== A newer version exists ======
+
+Efa misy kinova vaovao ny tahirin-kevitra novainao. Rehefa misy olona hafa nanova koa nandritra anao nanova no mitranga ny toy izao.
+
+Jereo ny tsy fitoviany miseho etsy ambany ireo, avy eo safidio izay kinova tianao hotazonina. Raha misafidy ny bokotra ''Raketo'' ianao, dia ny nataonao no horaketina. Ny bokotra ''Aoka ihany'' tsindriana raha hitazonana izay kinova misy ao.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt
new file mode 100644
index 000000000..edf20f1a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt
@@ -0,0 +1,4 @@
+====== Tsy tafiditra ======
+
+Miala tsiny fa tsy manana alalana hanohizana mankany ianao. Angamba hadinonao ny niditra.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt
new file mode 100644
index 000000000..8d7d69b45
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt
@@ -0,0 +1,4 @@
+====== Tsy fitoviana ======
+
+Ireto ny maha-samihafa ny kinova nosafidiana sy ny kinovan'ny pejy amin'izao.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt
new file mode 100644
index 000000000..2cde9deb1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt
@@ -0,0 +1,2 @@
+Rehefa avy manova ny pejy dia tsindrio ny bokotra ''Raketo''. Jereo ny [[wiki:syntax]] misy ny fomba fanoratana. Raha misy zavatra tianao handramana dia ianaro ao amin'ny [[wiki:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt
new file mode 100644
index 000000000..a6ff5ba32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt
@@ -0,0 +1,2 @@
+**Kinovan'ny pejy taloha no nosokafanao!** Raha raketinao io, dia hanamboatra kinova vaovao miaraka amin'io ianao.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt
new file mode 100644
index 000000000..614fd6434
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+Ity misy index mahasarona ireo pejy misy milahatra arakaraka ny [[doku>namespaces|namespaces]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php
new file mode 100644
index 000000000..bae292363
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * mg language file
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+$lang['btn_edit'] = 'Hanova ny pejy';
+$lang['btn_source'] = 'Asehoy ny source';
+$lang['btn_show'] = 'Asehoy ny pejy';
+$lang['btn_create'] = 'Amboary ity pejy';
+$lang['btn_search'] = 'Hikaroka';
+$lang['btn_save'] = 'Raketo';
+$lang['btn_preview']= 'Topi-maso';
+$lang['btn_top'] = 'Ho ery ambony';
+$lang['btn_newer'] = '<< taloha kokoa';
+$lang['btn_older'] = 'taoriana kokoa >>';
+$lang['btn_revs'] = 'Kinova taloha';
+$lang['btn_recent'] = 'Fiovana farany';
+$lang['btn_upload'] = 'Alefaso';
+$lang['btn_cancel'] = 'Aoka ihany';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit']= 'Edit';
+$lang['btn_login'] = 'Hiditra';
+$lang['btn_logout'] = 'Hivoaka';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Update';
+$lang['btn_delete'] = 'Fafao';
+$lang['btn_back'] = 'Miverina';
+$lang['btn_backtomedia'] = 'Fitsongana fichier Media';
+
+$lang['loggedinas'] = 'Anaranao:';
+$lang['user'] = 'Anarana';
+$lang['pass'] = 'Alahidy';
+$lang['passchk'] = 'Ataovy indray';
+$lang['remember'] = 'Tsarovy';
+$lang['fullname'] = 'Anarana feno';
+$lang['email'] = 'Imailaka';
+$lang['register'] = 'Hisoratra';
+$lang['badlogin'] = 'Miala tsiny fa misy diso ny anarana na ny alahidy.';
+
+$lang['regmissing'] = 'Tsy maintsy fenoina ny saha rehetra.';
+$lang['reguexists'] = 'Indrisy fa efa nisy namandrika io anarana io.';
+$lang['regsuccess'] = 'Voaforona ny kaontinao, halefa any imailaka ny alahidy.';
+$lang['regsuccess2']= 'Voaforona ilay kaonty.';
+$lang['regmailfail']= 'Ohatra ny nisy olana ny nandefasana imailaka. Miangavy anao hilaza ny Admin!';
+$lang['regbadmail'] = 'Toa tsy mandeha ny imailaka nomenao - Raha heverinao fa erreur io dia ilazao ny admin';
+$lang['regbadpass'] = 'Tsy mitovy ny alahidy roa nomenao, avereno indray.';
+$lang['regpwmail'] = 'Ny alahidy Wiki-nao';
+$lang['reghere'] = 'Mbola tsy manana kaonty ianao? Manaova vaovao';
+
+$lang['txt_upload'] = 'Misafidiana rakitra halefa';
+$lang['txt_filename'] = 'Ampidiro ny anaran\'ny wiki (tsy voatery)';
+$lang['txt_overwrt'] = 'Fafana izay rakitra efa misy?';
+$lang['lockedby'] = 'Mbola voahidin\'i';
+$lang['lockexpire'] = 'Afaka ny hidy amin\'ny';
+$lang['willexpire'] = 'Efa ho lany fotoana afaka iray minitra ny hidy ahafahanao manova ny pejy.\nMba hialana amin\'ny conflit dia ampiasao ny bokotra topi-maso hamerenana ny timer-n\'ny hidy.';
+
+$lang['notsavedyet'] = 'Misy fiovana tsy voarakitra, ho very izany ireo.\nAzo antoka fa hotohizana?';
+$lang['rssfailed'] = 'An error occured while fetching this feed: ';
+$lang['nothingfound']= 'Tsy nahitana n\'inon\'inona.';
+
+$lang['mediaselect'] = 'Safidy rakitra Media';
+$lang['fileupload'] = 'Fandefasana rakitra Media';
+$lang['uploadsucc'] = 'Voalefa soa aman-tsara';
+$lang['uploadfail'] = 'Tsy lasa ilay izy. Mety tsy fananana alalana?';
+$lang['uploadwrong'] = 'Nolavina ny lefa. Voarara io extension-na rakitra io!';
+$lang['uploadexist'] = 'Efa misy ilay rakitra. Tsy nisy inona natao.';
+$lang['deletesucc'] = 'Voafafa ny rakitra "%s" .';
+$lang['deletefail'] = 'Tsy afaka nofafana ny "%s" - Hamarino ny alalana.';
+$lang['mediainuse'] = 'Tsy voafafa ny rakitra "%s" - mbola misy mampiasa io.';
+$lang['namespaces'] = 'Namespaces';
+$lang['mediafiles'] = 'Rakitra misy amin\'ny';
+
+$lang['reference'] = 'References for';
+$lang['ref_inuse'] = 'Tsy afaka fafana io rakitra io, satria mbola ampiasain\'ireto pejy ireto:';
+$lang['ref_hidden'] = 'Misy references vitsivitsy amina pejy tsy anananao alalana hamaky';
+
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Anaram-pejy mifanaraka';
+$lang['toc'] = 'Fizahan-takila';
+$lang['current'] = 'current';
+$lang['yours'] = 'Kinova-nao';
+$lang['diff'] = 'Asehoy ny tsy fitoviana amin\'ny kinova amin\'izao';
+$lang['line'] = 'Andalana';
+$lang['breadcrumb'] = 'Taiza ianao';
+$lang['lastmod'] = 'Novaina farany:';
+$lang['by'] = '/';
+$lang['deleted'] = 'voafafa';
+$lang['created'] = 'Voamboatra';
+$lang['restored'] = 'Naverina tamin\'ny kinova taloha';
+$lang['summary'] = 'Fanovana teo';
+
+$lang['mail_newpage'] = 'pejy niampy:';
+$lang['mail_changed'] = 'pejy niova:';
+
+$lang['js']['nosmblinks'] = "rohy mankamin\'ny fizarana Windows dia amin\'ny Microsoft Internet Explorer ihany no miasa.\nAzo atao ihany anefa ny manao dika-petaka ny rohy.";
+
+$lang['qb_bold'] = 'Matavy';
+$lang['qb_italic'] = 'Mandry';
+$lang['qb_underl'] = 'Voatsipika';
+$lang['qb_code'] = 'Code programa';
+$lang['qb_strike'] = 'Disoina';
+$lang['qb_h1'] = 'Lohateny laharana 1';
+$lang['qb_h2'] = 'Lohateny laharana 2';
+$lang['qb_h3'] = 'Lohateny laharana 3';
+$lang['qb_h4'] = 'Lohateny laharana 4';
+$lang['qb_h5'] = 'Lohateny laharana 5';
+$lang['qb_link'] = 'Rohy ato anatiny';
+$lang['qb_extlink'] = 'Rohy mivoaka';
+$lang['qb_hr'] = 'Tsipika marindrano';
+$lang['qb_ol'] = 'Tanisa milahatra';
+$lang['qb_ul'] = 'Tanisa tsy milahatra';
+$lang['qb_media'] = 'Hanampy sary na rakitra hafa';
+$lang['qb_sig'] = 'Manisy sonia';
+
+$lang['js']['del_confirm']= 'Hofafana ilay andalana?';
+
+$lang['admin_acl'] = 'Fitantanana ACL (Access Control List)...';
+$lang['admin_register']= 'Ampio mpampiasa vaovao...';
+
+$lang['acl_group'] = 'Vondrona';
+$lang['acl_user'] = 'Mpampiasa';
+$lang['acl_perms'] = 'Alalana @';
+$lang['page'] = 'Pejy';
+$lang['namespace'] = 'Namespace';
+
+$lang['acl_perm1'] = 'Mamaky';
+$lang['acl_perm2'] = 'Manova';
+$lang['acl_perm4'] = 'Manamboatra';
+$lang['acl_perm8'] = 'Mandefa rakitra';
+$lang['acl_perm16'] = 'Mamafa';
+$lang['acl_new'] = 'Ampio andalana vaovao';
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt
new file mode 100644
index 000000000..5705659a3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt
@@ -0,0 +1,4 @@
+====== Pejy voahidy ======
+
+Mbola ovain'olona hafa ity pejy ity ka voahidy aloha. Andraso kely ho vitany ny azy, na ho lany fotoana ilay hidy.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt
new file mode 100644
index 000000000..1ea3facb0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+Mbola tsy niditra ianao izao! Ampidiro eto ambany ny anarana sy ny alahidy. Ilaina manaiky cookies ny navigateur-nao raha hiditra.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt
new file mode 100644
index 000000000..ca919345a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt
@@ -0,0 +1,17 @@
+Nisy pejy niova tao amin'ny wiky. Ireto ny antsipiriany:
+
+Date : @DATE@
+Browser : @BROWSER@
+Adiresy IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Taloha : @OLDPAGE@
+Vaovao : @NEWPAGE@
+Fiovana : @SUMMARY@
+Novain'i : @USER@
+
+@DIFF@
+
+
+--
+Ity imailaka ity dia navoakan'ny wiki tao amin'ny
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt
new file mode 100644
index 000000000..a998caf28
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt
@@ -0,0 +1,3 @@
+====== Mbola tsy misy an'io pejy io ======
+
+Nanindry rohy manondro pejy mbola tsy misy ianao. Afaka amboarinao io pejy io, tsindrio ny bokotra ''Amboary ity pejy''
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt
new file mode 100644
index 000000000..71ecb9ba4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt
@@ -0,0 +1,4 @@
+====== Tsy misy io kinova io ======
+
+Tsy misy ny kinova voalaza. Ampiasao ny bokotra ''Kinova taloha'' hampisehoana ireo karazana fanovana natao tamin'ity pejy ity.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt
new file mode 100644
index 000000000..52019cd73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt
@@ -0,0 +1,5 @@
+====== Topi-maso ======
+
+Topi-maso ahafahanao mijery ny fivoakan'ny soratra nataonao ity. Tandremo: Mbola **tsy voarakitra** io!
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt
new file mode 100644
index 000000000..0fe51f4a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt
@@ -0,0 +1,3 @@
+Vakiana fotsiny ity pejy ity. Afaka jerenao ny source, saingy tsy afaka ovainao. Anontanio ny admin raha heverinao fa tsy mety izany.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt
new file mode 100644
index 000000000..4bc8245a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt
@@ -0,0 +1,5 @@
+====== Fiovana farany ======
+
+Ireto pejy ireto no niova vao haingana.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt
new file mode 100644
index 000000000..618c1f97e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt
@@ -0,0 +1,5 @@
+====== Hanokatra kaonty vaovao ======
+
+Fenoy ny saha rehetra eto ambany raha hanokatra kaonty amin'ity wiki ity. Hamarino fa adiresy imailaka mandeha no omenao - halefa any mantsy ny alahidy. Ny anarana dia tsy maintsy manaraka ny fepetran'ny [[doku>pagename|pagename]].
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt
new file mode 100644
index 000000000..72704587a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt
@@ -0,0 +1,5 @@
+====== Kinova taloha ======
+
+Ireto ny kinovan'ny pejy taloha. Raha te hamerina kinova taloha ianao, tsongay eo ambany izy hisokatra, avy eo tsindrio ny bokotra ''Hanova ny pejy'' ary ''Soraty''.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt
new file mode 100644
index 000000000..68c6271df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt
@@ -0,0 +1,7 @@
+====== Karoka ======
+
+Ireto ambany ireto ny valin'ny fikarohanao.
+
+Raha tsy nahita izay notadiavinao ianao, dia afaka mamorona pejy vaovao avy amin'ny teny nanaovanao fikarohana; Ampiasao ny bokotra ''Hanova ny pejy''.
+
+===== Vokatry ny fikarohana ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt
new file mode 100644
index 000000000..92690f4dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt
@@ -0,0 +1,2 @@
+**Ity dia kinovan'ny pejy taloha!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt
new file mode 100644
index 000000000..581d67d16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt
@@ -0,0 +1,5 @@
+====== SPAM Voasakana ======
+
+Tsy voarakitra ny fanovana nataonao satria misy teny voarara ao. Raha nanandrana nandefa spam ny wiki ianao dia -- Alika maty! Raha heverinao fa error dia ilazao ny Admin.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt
new file mode 100644
index 000000000..6f54384f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt
@@ -0,0 +1,3 @@
+====== वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ ======
+
+खाली तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ मधे उपलबà¥à¤§ असलेलà¥à¤¯à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨à¤¾à¤šà¥à¤¯à¤¾ कà¥à¤°à¤¿à¤¯à¤¾à¤‚ची सूची दिली आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt
new file mode 100644
index 000000000..997fa68e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt
@@ -0,0 +1,3 @@
+====== पà¥à¤°à¤¤à¤¿à¤²à¤¿à¤‚क ======
+
+ही तà¥à¤¯à¤¾ सरà¥à¤µ पà¥à¤°à¥ƒà¤·à¥à¤ à¤¾à¤‚ची सूची आहे जी या पृषà¥à¤ à¤¾à¤²à¤¾ परत लिंक करतात. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt
new file mode 100644
index 000000000..2b1bb6423
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt
@@ -0,0 +1,5 @@
+====== नवीन आवृतà¥à¤¤à¥€ उपलबà¥à¤§ आहे ======
+
+तà¥à¤®à¥à¤¹à¥€ संपादित केलेलà¥à¤¯à¤¾ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¾à¤šà¥€ नवीन आवृतà¥à¤¤à¥€ उपलबà¥à¤§ आहे. तà¥à¤®à¥à¤¹à¥€ संपादित करत असलेलà¥à¤¯à¤¾ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¾à¤®à¤§à¥‡ तà¥à¤¯à¤¾à¤š वेळी इतर यूजरने बदल केलà¥à¤¯à¤¾à¤¸ असे घडते.
+
+खाली दरà¥à¤¶à¤¾à¤µà¤¿à¤²à¥‡à¤²à¥‡ फरक नीट तपासा आणि तà¥à¤¯à¤¾à¤ªà¥ˆà¤•à¥€ कà¥à¤ à¤²à¥‡ ठेवायचे ते ठरवा. जर तà¥à¤®à¥à¤¹à¥€ 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤' केलं तर तà¥à¤®à¤šà¥‡ बदल सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ होतील. सधà¥à¤¯à¤¾à¤šà¥€ आवृतà¥à¤¤à¤¿ ठेवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ 'कॅनà¥à¤¸à¤²' वर कà¥à¤²à¤¿à¤• करा. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt
new file mode 100644
index 000000000..1b499f51d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt
@@ -0,0 +1,3 @@
+====== परवानगी नाकारली ======
+
+कà¥à¤·à¤®à¤¾ करा, पण तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ यापà¥à¤¢à¥‡ जाणà¥à¤¯à¤¾à¤šà¥‡ हकà¥à¤• नाहीत. कदाचित तà¥à¤®à¥à¤¹à¥€ लॉगिन करायला विसरला आहात ? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt
new file mode 100644
index 000000000..f0a845056
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt
@@ -0,0 +1,3 @@
+====== फरक ======
+
+या पानावर तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ निवडलेली आवृतà¥à¤¤à¥€ व सधà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ आवृतà¥à¤¤à¥€ मधले फरक दाखवले आहेत. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt
new file mode 100644
index 000000000..aa74475d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt
@@ -0,0 +1,5 @@
+====== मसà¥à¤¦à¥à¤¯à¤¾à¤šà¥€ फाइल मिळाली ======
+
+तà¥à¤®à¤šà¤¾ मागचा संपादानाचा सेशन नीट पूरà¥à¤£ à¤à¤¾à¤²à¤¾ नवà¥à¤¹à¤¤à¤¾. डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¨à¥‡ तà¥à¤®à¤šà¥à¤¯à¤¾ कामाचा मसà¥à¤¦à¤¾ आपोआप सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केला होता , जो वापरून तà¥à¤®à¤šà¥€ संपादन परत चालू करू शकता. खाली तà¥à¤®à¤šà¥à¤¯à¤¾ मागचà¥à¤¯à¤¾ सेशन मधला सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केलेला डेटा दाखवला आहे.
+
+कृपया आता हे ठरवा की तà¥à¤®à¤šà¥à¤¯à¤¾ संपादन सेशनचे //पà¥à¤¨à¤°à¥à¤¸à¥à¤¥à¤¾à¤ªà¤¨// करायचे, सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केलेला मसà¥à¤¦à¤¾ //रदà¥à¤¦// करायचा का संपादनच //कॅनà¥à¤¸à¤²// करायचं. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt
new file mode 100644
index 000000000..6c6347e70
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt
@@ -0,0 +1 @@
+पान संपादित करा आणि 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤' वर कà¥à¤²à¤¿à¤• करा. विकी सिनà¥à¤Ÿà¥…कà¥à¤¸ साठी [[wiki:syntax]] पहा.कृपया तà¥à¤®à¥à¤¹à¥€ जर à¤à¤–ादे पान **सà¥à¤§à¤¾à¤°à¤¿à¤¤** करू शकत असाल तरच ते संपादित करा. अनà¥à¤¯à¤¥à¤¾ जर तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ फ़कà¥à¤¤ काही गोषà¥à¤Ÿà¥€ टà¥à¤°à¤¾à¤¯ करून बघायचà¥à¤¯à¤¾ असतील तर [[playground:playground|पà¥à¤²à¥‡à¤—à¥à¤°à¤¾à¤Šà¤£à¥à¤¡]] मधे आपले धडे गिरवा! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt
new file mode 100644
index 000000000..d58c8abd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt
@@ -0,0 +1,2 @@
+**तà¥à¤®à¤šà¥€ या पानाची जà¥à¤¨à¥€ आवृतà¥à¤¤à¥€ लोड केलि आहे!** जर तà¥à¤®à¤šà¥€ ती सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केली तर तà¥à¤®à¤šà¥€ तà¥à¤¯à¤¾à¤šà¥€ à¤à¤• नवीन आवृतà¥à¤¤à¥€ तयार कराल.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt
new file mode 100644
index 000000000..489b20435
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt
@@ -0,0 +1,3 @@
+====== सूची ======
+
+ही सरà¥à¤µ उपलबà¥à¤§ पानांची [[doku>namespaces|नेमसà¥à¤ªà¥‡à¤¸]] अनà¥à¤¸à¤¾à¤° तयार केलेली सूची आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html
new file mode 100644
index 000000000..ddbf8245b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html
@@ -0,0 +1,10 @@
+<p>हे पान <a href="http://dokuwiki.org">डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿</a> चà¥à¤¯à¤¾ पहिलà¥à¤¯à¤¾ इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨ आणि कॉनà¥à¤«à¤¿à¤—रेशन साठी मदत करतं. या इंसà¥à¤Ÿà¥‰à¤²à¤° विषयी जासà¥à¤¤à¥€ माहिती तà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾
+<a href="http://dokuwiki.org/installer">माहितीसंगà¥à¤°à¤¹ पानावर</a> उपलबà¥à¤§ आहे.</p>
+
+<p> डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ विकी पाने व समà¥à¤¬à¤‚धित माहिती ( उदा. फोटो , शोध सूची, जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥€ ई.) साठवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ सामानà¥à¤¯ फाइलचा उपयोग करतं. डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¨à¥‡ नीट काम करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤²à¤¾ या फाइल जिथे साठवलà¥à¤¯à¤¾ आहेत तà¥à¤¯à¤¾ डिरेकà¥à¤Ÿà¤°à¥€à¤®à¤§à¥‡ लेखनाचे हकà¥à¤• ( write access ) असणे <strong>अतà¥à¤¯à¤¾à¤µà¤¶à¥à¤¯à¤•</strong> आहे. या इंसà¥à¤Ÿà¥‰à¤²à¤°à¤²à¤¾ डिरेकà¥à¤Ÿà¤°à¥€à¤šà¥‡ हकà¥à¤• सेट करता येत नाहीत. ते थेट तà¥à¤®à¤šà¥à¤¯à¤¾ शेल मधून सेट करावे लागतात, किंवा तà¥à¤®à¥à¤¹à¥€ वà¥à¤¯à¤¾à¤µà¤¸à¤¾à¤¯à¤¿à¤• होसà¥à¤Ÿà¤¿à¤‚ग वापरत असाल तर FTP वापरून अथवा तà¥à¤®à¤šà¥à¤¯à¤¾ होसà¥à¤Ÿà¤¿à¤‚ग कंटà¥à¤°à¥‹à¤² पॅनल ( उदा. cPanel वगैरे ) मधून सेट करावे लागतात.</p>
+
+<p>हा इंसà¥à¤Ÿà¥‰à¤²à¤° तà¥à¤®à¤šà¥à¤¯à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤šà¥‡ <acronym title="access control list">ACL</acronym> कॉनà¥à¤«à¤¿à¤—रेशन ठरवेल, जà¥à¤¯à¤¾à¤¦à¥à¤µà¤¾à¤°à¥‡ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¥€à¤¯ लॉगिन, डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤šà¥à¤¯à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ मेनू मधे पà¥à¤²à¤—िनचे इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨, सदसà¥à¤¯à¤¾à¤‚ची वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾, विकी पानांवरील हकà¥à¤•, कॉनà¥à¤«à¤¿à¤—रेशन बदलणे ई. साठी पà¥à¤°à¤µà¥‡à¤¶à¤¾à¤šà¥‡ हकà¥à¤• वगैरे बदल करता येतील. ही वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ वापरणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ आवशà¥à¤¯à¤• नाही पण वापरलà¥à¤¯à¤¾à¤¸ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤šà¥‡ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ अधिक सà¥à¤°à¤³à¤¿à¤¤ होइल.</p>
+
+<p>अनà¥à¤­à¤µà¥€ सदसà¥à¤¯ किंवा जà¥à¤¯à¤¾à¤¨à¤¾ काही ख़ास गरजा असतील तà¥à¤¯à¤¾à¤¨à¥€ खालील लिंकà¥à¤¸ वापरावà¥à¤¯à¤¾à¤¤ :
+<a href="http://dokuwiki.org/install">इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨à¤µà¤¿à¤·à¤¯à¥€ सूचना</a>
+and <a href="http://dokuwiki.org/config">कॉनà¥à¤«à¤¿à¤—रेशनची सेटिंग</a></p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php
new file mode 100644
index 000000000..715d51119
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php
@@ -0,0 +1,229 @@
+<?php
+/**
+ * mr language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesMr.php?view=co
+ * @author ghatothkach@hotmail.com
+ * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
+ * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
+ * @author shantanoo@gmail.com
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '`';
+$lang['singlequoteclosing'] = '\'';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'हे पृषà¥à¤  संपादित करा';
+$lang['btn_source'] = 'पानाचा सà¥à¤¤à¥à¤°à¥‹à¤¤ दाखवा ';
+$lang['btn_show'] = 'पान दाखवा';
+$lang['btn_create'] = 'हे पृषà¥à¤  लीहा';
+$lang['btn_search'] = 'शोधा';
+$lang['btn_save'] = 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤';
+$lang['btn_preview'] = 'à¤à¤²à¤•';
+$lang['btn_top'] = 'परत वर';
+$lang['btn_newer'] = 'जासà¥à¤¤ अलीकडचे';
+$lang['btn_older'] = 'कमी अलीकडचे';
+$lang['btn_revs'] = 'जूनà¥à¤¯à¤¾ आवà¥à¤°à¥à¤¤à¥à¤¤à¥€';
+$lang['btn_recent'] = 'अलीकडील बदल';
+$lang['btn_upload'] = 'अपलोड';
+$lang['btn_cancel'] = 'रदà¥à¤¦ करा';
+$lang['btn_index'] = 'सूचि';
+$lang['btn_secedit'] = 'संपादन';
+$lang['btn_login'] = 'पà¥à¤°à¤µà¥‡à¤¶ करा';
+$lang['btn_logout'] = 'बाहेर पडा';
+$lang['btn_admin'] = 'अधिकारी';
+$lang['btn_update'] = 'अदà¥à¤¯à¤¯à¤¾à¤µà¤¤';
+$lang['btn_delete'] = 'नषà¥à¤Ÿ';
+$lang['btn_back'] = 'मागॆ';
+$lang['btn_backlink'] = 'येथे काय जोडले आहे';
+$lang['btn_backtomedia'] = 'परत माधà¥à¤¯à¤® फाइल निवडीकड़े';
+$lang['btn_subscribe'] = 'पृषà¥à¤ à¤¾à¤šà¥à¤¯à¤¾ बदलांची पà¥à¤°à¤µà¤£à¥€ (फीड) लावा ';
+$lang['btn_unsubscribe'] = 'पृषà¥à¤ à¤¾à¤šà¥à¤¯à¤¾ बदलांची पà¥à¤°à¤µà¤£à¥€ (फीड) बंद करा';
+$lang['btn_subscribens'] = 'नामसमà¥à¤¹à¤¾à¤šà¥à¤¯à¤¾ (नेमसà¥à¤ªà¥‡à¤¸) बदलांची पà¥à¤°à¤µà¤£à¥€ (फीड) लावा';
+$lang['btn_unsubscribens'] = 'नामसमà¥à¤¹à¤¾à¤šà¥à¤¯à¤¾ (नेमसà¥à¤ªà¥‡à¤¸) बदलांची पà¥à¤°à¤µà¤£à¥€ (फीड) बंद करा';
+$lang['btn_profile'] = 'पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² अदà¥à¤¯à¤¯à¤¾à¤µà¤¤ करा';
+$lang['btn_reset'] = 'रिसेट';
+$lang['btn_resendpwd'] = 'कृपया परवलीचा नवीन शबà¥à¤¦ माà¤à¥à¤¯à¤¾ इमेल पतà¥à¤¤à¥à¤¯à¤¾à¤µà¤° पाठविणे.';
+$lang['btn_draft'] = 'पà¥à¤°à¤¤ संपादन';
+$lang['btn_recover'] = 'पà¥à¤°à¤¤ परत मिळवा';
+$lang['btn_draftdel'] = 'पà¥à¤°à¤¤ रदà¥à¤¦';
+$lang['loggedinas'] = 'लॉगिन नाव';
+$lang['user'] = 'वापरकरà¥à¤¤à¤¾';
+$lang['pass'] = 'परवलीचा शबà¥à¤¦';
+$lang['newpass'] = 'नवीन परवलीचा शबà¥à¤¦';
+$lang['oldpass'] = 'सधà¥à¤¯à¤¾à¤šà¤¾ परवलीचा शबà¥à¤¦ नकà¥à¤•à¥€ करा';
+$lang['passchk'] = 'परत à¤à¤•à¤¦à¤¾';
+$lang['remember'] = 'लकà¥à¤·à¤¾à¤¤ ठेवा';
+$lang['fullname'] = 'पूरà¥à¤£ नावं';
+$lang['email'] = 'इमेल';
+$lang['register'] = 'नोंदणी';
+$lang['profile'] = 'वापरकरà¥à¤¤à¥à¤¯à¤¾à¤šà¥€ माहिती';
+$lang['badlogin'] = 'माफ़ करा, वापरकरà¥à¤¤à¤¾ नावात किंवा परवलीचà¥à¤¯à¤¾ शबà¥à¤¦à¤¾à¤¤ चूक à¤à¤¾à¤²à¥€ आहे.';
+$lang['minoredit'] = 'छोटे बदल';
+$lang['draftdate'] = 'पà¥à¤°à¤¤ आपोआप सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केलà¥à¤¯à¤¾à¤šà¥€ तारीख';
+$lang['nosecedit'] = 'मधà¥à¤¯à¤‚तरीचà¥à¤¯à¤¾ काळात हे पृषà¥à¤  बदलले आहे.विभागाची माहिती जà¥à¤¨à¥€ à¤à¤¾à¤²à¥€ होती. तà¥à¤¯à¤¾à¤à¤µà¤œà¥€ सबंध पृषà¥à¤  परत लोड केले आहे.';
+$lang['regmissing'] = 'कृपया सरà¥à¤µ रकाने भरा.';
+$lang['reguexists'] = 'या नावाने सदसà¥à¤¯à¤¾à¤šà¥€ नोंदणी à¤à¤¾à¤²à¥‡à¤²à¥€ आहे, कृपया दà¥à¤¸à¤°à¥‡ सदसà¥à¤¯ नाव निवडा.';
+$lang['regsuccess'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ नोंदणी à¤à¤¾à¤²à¥€ आहे आणि परवलीचा शबà¥à¤¦ इमेल केला आहे.';
+$lang['regsuccess2'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ नोंदणी à¤à¤¾à¤²à¥€.';
+$lang['regmailfail'] = 'परवलीचा शबà¥à¤¦à¤¾à¤šà¥€ इमेल पाठवणà¥à¤¯à¤¾à¤¤ चूक à¤à¤¾à¤²à¥€ आहे, कà¥à¤°à¥à¤ªà¤¯à¤¾ संचालकांशी संपरà¥à¤• साधा.';
+$lang['regbadmail'] = 'तà¥à¤®à¥à¤¹à¥€ दिलेला ईमेल बरोबर नाही असे दिसते - तà¥à¤®à¤šà¥à¤¯à¤¾ मते ही चूक असलà¥à¤¯à¤¾à¤¸ साईटचà¥à¤¯à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¾à¤¶à¥€ संपरà¥à¤• साधा.';
+$lang['regbadpass'] = 'आपला परवलीचा शबà¥à¤¦ चà¥à¤•à¥€à¤šà¤¾ आहे.';
+$lang['regpwmail'] = 'तà¥à¤®à¤šà¤¾ डोकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ परवली.';
+$lang['reghere'] = 'अजà¥à¤¨ तà¥à¤®à¤šà¥‡ खाते नाही ? à¤à¤• उघडून टाका.';
+$lang['profna'] = 'हà¥à¤¯à¤¾ विकी मधे पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² बदलणà¥à¤¯à¤¾à¤šà¥€ सà¥à¤µà¤¿à¤§à¤¾ नाही.';
+$lang['profnochange'] = 'काही बदल नाहित. करणà¥à¤¯à¤¾à¤¸à¤¾à¤°à¤–े काही नाही.';
+$lang['profnoempty'] = 'रिकामे नाव किंवा ईमेल चालत नाही.';
+$lang['profchanged'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² अदà¥à¤¯à¤¯à¤¾à¤µà¤¤ à¤à¤¾à¤²à¥€ आहे.';
+$lang['pwdforget'] = 'परवलीचा शबà¥à¤¦ विसरला आहे का? नविन मागवा.';
+$lang['resendna'] = 'हà¥à¤¯à¤¾ विकी मधे परवलीचा शबà¥à¤¦ परत पाथावà¥à¤¨à¥à¤¯à¤¾à¤šà¥€ सà¥à¤µà¤¿à¤§à¤¾ नाही.';
+$lang['resendpwd'] = 'नविन परवली इचà¥à¤›à¥à¤•';
+$lang['resendpwdmissing'] = 'कृपया सरà¥à¤µ रकाने भरा.';
+$lang['resendpwdnouser'] = 'माफ़ करा, हा सदसà¥à¤¯ आमचà¥à¤¯à¤¾ माहितिसंगà¥à¤°à¤¹à¤¾à¤¤ सापडला नाही.';
+$lang['resendpwdbadauth'] = 'माफ़ करा, हा अधिकार कोड बरोबर नाही. कृपया आपण पूरà¥à¤£ शिकामोरà¥à¤¤à¤¬à¤¾à¤šà¥€ लिंक वापरलà¥à¤¯à¤¾à¤šà¥€ खातà¥à¤°à¥€ करा.';
+$lang['resendpwdconfirm'] = 'शिकà¥à¤•à¤¾à¤®à¥‹à¤°à¥à¤¤à¤¬à¤¾à¤šà¥€ लिंक ईमेल दà¥à¤µà¤¾à¤°à¤¾ पाठवली आहे.';
+$lang['resendpwdsuccess'] = 'शिकà¥à¤•à¤¾à¤®à¥‹à¤°à¥à¤¤à¤¬à¤¾à¤šà¥€ लिंक ईमेल दà¥à¤µà¤¾à¤°à¤¾ पाठवली आहे.';
+$lang['license'] = 'विशिषà¥à¤  नोंद केलि नसलà¥à¤¯à¤¾à¤¸ हà¥à¤¯à¤¾ विकी वरील सरà¥à¤µ मजकूर खालील लायसनà¥à¤¸ मधे मोडतो : ';
+$lang['licenseok'] = 'नोंद : हे पृषà¥à¤  संपादित केलà¥à¤¯à¤¾à¤¸ तà¥à¤®à¥à¤¹à¥€ तà¥à¤®à¤šà¥‡ योगदान खालील लायसनà¥à¤¸ अंतरà¥à¤—त येइल : ';
+$lang['txt_upload'] = 'अपलोड करणà¥à¤¯à¤¾à¤šà¥€ फाइल निवडा';
+$lang['txt_filename'] = 'अपलोड उरà¥à¥ž ( वैकलà¥à¤ªà¤¿à¤• )';
+$lang['txt_overwrt'] = 'असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ असलेलà¥à¤¯à¤¾ फाइलवरच सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करा.';
+$lang['lockedby'] = 'सधà¥à¤¯à¤¾ लॉक करणारा :';
+$lang['lockexpire'] = 'सधà¥à¤¯à¤¾ लॉक करणारा :';
+$lang['willexpire'] = 'हे पृषà¥à¤  संपादित करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ मिळालेले लॉक à¤à¤–ादà¥à¤¯à¤¾ मिनिटात संपणार आहे.\n चà¥à¤•à¤¾ होऊ नयेत मà¥à¤¹à¤£à¥à¤¨ कृपया पà¥à¤°à¥€à¤µà¥à¤¯à¥‚ बटन दाबà¥à¤¨ लॉक ची वेळ पà¥à¤¨à¥à¤¹à¤¾ चालू करा.';
+$lang['notsavedyet'] = 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ न केलेले बदल नषà¥à¤Ÿ होतील. नकà¥à¤•à¥€ करू का ?';
+$lang['rssfailed'] = 'ही पà¥à¤°à¤µà¤£à¥€ आणणà¥à¤¯à¤¾à¤¤ काही चूक à¤à¤¾à¤²à¥€:';
+$lang['nothingfound'] = 'काही सापडला नाही.';
+$lang['mediaselect'] = 'दृकशà¥à¤°à¤¾à¤µà¥à¤¯ फाइल';
+$lang['fileupload'] = 'दृकशà¥à¤°à¤¾à¤µà¥à¤¯ फाइल अपलोड';
+$lang['uploadsucc'] = 'अपलोड यशसà¥à¤µà¥€';
+$lang['uploadfail'] = 'अपलोड अयशसà¥à¤µà¥€.कदाचित चà¥à¤•à¥€à¤šà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ असतील ?';
+$lang['uploadwrong'] = 'अपलोड नाकारणà¥à¤¯à¤¾à¤¤ आला. हे फाइल à¤à¤•à¥à¤¸à¤Ÿà¥‡à¤‚शन अवैध आहे!';
+$lang['uploadexist'] = 'फाइल आधीच असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ आहे. काही केले नाही.';
+$lang['uploadbadcontent'] = 'अपलोड केलेली माहिती %s फाइल à¤à¤•à¥à¤¸à¤Ÿà¥‡à¤‚शनशी मिळतिजà¥à¤³à¤¤à¤¿ नाही.';
+$lang['uploadspam'] = 'अपलोड सà¥à¤ªà¥…म बà¥à¤²à¥…कलिसà¥à¤Ÿà¤®à¥à¤³à¥‡ थोपवला आहे.';
+$lang['uploadxss'] = 'अपलोड संशयित हानिकारक मजकूर असलà¥à¤¯à¤¾à¤¨à¥‡ थोपवला आहे.';
+$lang['uploadsize'] = 'अपलोड केलेली फाइल जासà¥à¤¤à¥€à¤š मोठी होती. (जासà¥à¤¤à¥€à¤¤ जासà¥à¤¤ %s)';
+$lang['deletesucc'] = '%s ही फाइल नषà¥à¤Ÿ करणà¥à¤¯à¤¾à¤¤ आलेली आहे.';
+$lang['deletefail'] = '%s ही फाइल नषà¥à¤Ÿ करू शकलो नाही - कृपया परवानगà¥à¤¯à¤¾ तपासा.';
+$lang['mediainuse'] = '%s ही फाइल नषà¥à¤Ÿ केली नाही - ती अजà¥à¤¨ वापरात आहे.';
+$lang['namespaces'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['mediafiles'] = 'मधà¥à¤¯à¥‡ उपलबà¥à¤§ असलेलà¥à¤¯à¤¾ फाइल';
+$lang['js']['keepopen'] = 'निवड केलà¥à¤¯à¤¾à¤µà¤° विणà¥à¤¡à¥‹ उघडी ठेवा';
+$lang['js']['hidedetails'] = 'सविसà¥à¤¤à¤° मजकूर लपवा';
+$lang['js']['nosmblinks'] = 'विनà¥à¤¡à¥‹à¤œà¤¼ शेअर ला लिंक केलà¥à¤¯à¤¾à¤¸ ते फकà¥à¤¤ मायकà¥à¤°à¥‹à¤¸à¥‰à¥žà¥à¤Ÿ इनà¥à¤Ÿà¤°à¤¨à¥‡à¤Ÿ à¤à¤•à¥à¤¸à¥à¤ªà¥à¤²à¥‹à¤°à¤° वरच चालते. तरी तà¥à¤®à¥à¤¹à¥€ लिंक कॉपी करू शकता.';
+$lang['js']['mu_btn'] = 'à¤à¤• वेळेस अनेक फाइल वापरा';
+$lang['mediausage'] = 'हà¥à¤¯à¤¾ फाइलचा संदरà¥à¤­ देणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ खालील सिनà¥à¤Ÿà¥…कà¥à¤¸ वापरा :';
+$lang['mediaview'] = 'मूळ फाइल बघू ';
+$lang['mediaroot'] = 'रूट';
+$lang['mediaupload'] = 'सधà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ नेमसà¥à¤ªà¥‡à¤¸à¤®à¤§à¥‡ इथेच फाइल अपलोड करा. उप-नेमसà¥à¤ªà¥‡à¤¸ बनवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¤¿ तà¥à¤¯à¤¾à¤šà¥‡ नाव तà¥à¤®à¤šà¥à¤¯à¤¾ "अपलोड उरà¥à¤«à¤¼" मधे दिलेलà¥à¤¯à¤¾ फाइल नावाचà¥à¤¯à¤¾ आधी विसरà¥à¤—चिनà¥à¤¹à¤¾à¤¨à¥‡ वेगळे करून ते वापरा.';
+$lang['mediaextchange'] = 'फाइलचे à¤à¤•à¥à¤¸à¤Ÿà¥‡à¤‚शन .%s चे बदलून .%s केले आहे.';
+$lang['reference'] = 'चà¥à¤¯à¤¾ साठी संदरà¥à¤­';
+$lang['ref_inuse'] = 'फाइल नषà¥à¤Ÿ केली जाऊ शकत नाही. ती अजà¥à¤¨ खालील पृषà¥à¤ à¥‡ वापरत आहेत :';
+$lang['ref_hidden'] = 'काही संदरà¥à¤­ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ वाचणà¥à¤¯à¤¾à¤šà¥€ परवानगी नसलेलà¥à¤¯à¤¾ पृषà¥à¤ à¤¾à¤µà¤° आहेत';
+$lang['hits'] = 'हिटà¥à¤¸';
+$lang['quickhits'] = 'जà¥à¤³à¤£à¤¾à¤°à¤¿ पाने';
+$lang['toc'] = 'अनà¥à¤•à¥à¤°à¤®à¤£à¤¿à¤•à¤¾';
+$lang['current'] = 'चालू';
+$lang['yours'] = 'तà¥à¤®à¤šà¥€ आवृतà¥à¤¤à¤¿';
+$lang['diff'] = 'सधà¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ आवृतà¥à¤¤à¤¿à¤‚शी फरक दाखवा';
+$lang['diff2'] = 'निवडलेलà¥à¤¯à¤¾ आवृतà¥à¤¤à¤¿à¤‚मधील फरक दाखवा';
+$lang['line'] = 'ओळ';
+$lang['breadcrumb'] = 'मागमूस';
+$lang['youarehere'] = 'तà¥à¤®à¥à¤¹à¥€ इथे आहात';
+$lang['lastmod'] = 'सरà¥à¤µà¤¾à¤¤ शेवटचा बदल';
+$lang['by'] = 'दà¥à¤µà¤¾à¤°à¤¾';
+$lang['deleted'] = 'काढून टाकले';
+$lang['created'] = 'निरà¥à¤®à¤¾à¤£ केले';
+$lang['restored'] = 'जà¥à¤¨à¥€ आवृतà¥à¤¤à¤¿ पà¥à¤¨à¤°à¥à¤¸à¥à¤¥à¤¾à¤ªà¤¿à¤¤ केली';
+$lang['external_edit'] = 'बाहेरून संपादित';
+$lang['summary'] = 'सारांश बदला';
+$lang['noflash'] = 'ही माहिती दाखवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ <a href="http://www.adobe.com/products/flashplayer/">अडोब फà¥à¤²à¥…श पà¥à¤²à¥‡à¤…र</a> ची गरज आहे.';
+$lang['mail_newpage'] = 'पृषà¥à¤  जोडले : ';
+$lang['mail_changed'] = 'पृषà¥à¤  बदलले : ';
+$lang['mail_new_user'] = 'नवीन सदसà¥à¤¯ : ';
+$lang['mail_upload'] = 'फाइल अपलोड केली : ';
+$lang['qb_bold'] = 'ठळक मजकूर';
+$lang['qb_italic'] = 'तिरका मजकूर';
+$lang['qb_underl'] = 'अधोरेखित मजकूर';
+$lang['qb_code'] = 'कोड मजकूर';
+$lang['qb_strike'] = 'रदà¥à¤¦ मजकूर';
+$lang['qb_h1'] = 'पहिलà¥à¤¯à¤¾ पातळीचे शीरà¥à¤·à¤•';
+$lang['qb_h2'] = 'दà¥à¤¸à¤°à¥à¤¯à¤¾ पातळीचे शीरà¥à¤·à¤•';
+$lang['qb_h3'] = 'तिसरà¥à¤¯à¤¾ पातळीचे शीरà¥à¤·à¤•';
+$lang['qb_h4'] = 'चवथà¥à¤¯à¤¾ पातळीचे शीरà¥à¤·à¤•';
+$lang['qb_h5'] = 'पाचवà¥à¤¯à¤¾ पातळीचे शीरà¥à¤·à¤•';
+$lang['qb_link'] = 'अंतरà¥à¤—त लिंक';
+$lang['qb_extlink'] = 'बाहà¥à¤¯ लिंक';
+$lang['qb_hr'] = 'आडवी पटà¥à¤Ÿà¥€';
+$lang['qb_ol'] = 'अनà¥à¤•à¥à¤°à¤®à¤¿à¤¤ यादीतील वसà¥à¤¤à¥';
+$lang['qb_ul'] = 'साधà¥à¤¯à¤¾ यादीतील वसà¥à¤¤à¥';
+$lang['qb_media'] = 'पà¥à¤°à¤¤à¤¿à¤®à¤¾ आणि इतर फाइल टाका';
+$lang['qb_sig'] = 'सà¥à¤µà¤¾à¤•à¥à¤·à¤°à¥€ टाका';
+$lang['qb_smileys'] = 'सà¥à¤®à¤¾à¤‡à¤²à¥€';
+$lang['qb_chars'] = 'ख़ास चिनà¥à¤¹';
+$lang['js']['del_confirm'] = 'निवडलेलà¥à¤¯à¤¾ गोषà¥à¤Ÿà¥€ नकà¥à¤•à¥€ नषà¥à¤Ÿ करू का ?';
+$lang['admin_register'] = 'नवीन सदसà¥à¤¯';
+$lang['metaedit'] = 'मेटाडेटा बदला';
+$lang['metasaveerr'] = 'मेटाडेटा सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ à¤à¤¾à¤²à¤¾ नाही';
+$lang['metasaveok'] = 'मेटाडेटा सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ à¤à¤¾à¤²à¤¾';
+$lang['img_backto'] = 'परत जा';
+$lang['img_title'] = 'नाव';
+$lang['img_caption'] = 'टीप';
+$lang['img_date'] = 'तारीख';
+$lang['img_fname'] = 'फाइल नाव';
+$lang['img_fsize'] = 'साइà¤';
+$lang['img_artist'] = 'फोटोगà¥à¤°à¤¾à¤«à¤°';
+$lang['img_copyr'] = 'कॉपीराइट';
+$lang['img_format'] = 'पà¥à¤°à¤•à¤¾à¤°';
+$lang['img_camera'] = 'कॅमेरा';
+$lang['img_keywords'] = 'मà¥à¤–à¥à¤¯ शबà¥à¤¦';
+$lang['subscribe_success'] = '%s ला %s चà¥à¤¯à¤¾ पà¥à¤°à¤µà¤£à¤¿à¤¸à¤¾à¤ à¤¿ नोंदवले';
+$lang['subscribe_error'] = '%s ला %s चà¥à¤¯à¤¾ पà¥à¤°à¤µà¤£à¤¿à¤¸à¤¾à¤ à¤¿ नोंदवताना चूक à¤à¤¾à¤²à¥€';
+$lang['subscribe_noaddress'] = 'तà¥à¤®à¤šà¥à¤¯à¤¾ लॉगिनशी समà¥à¤¬à¤‚धित कà¥à¤ à¤²à¤¾à¤¹à¥€ पतà¥à¤¤à¤¾ नाही , तà¥à¤¯à¤¾à¤®à¥à¤³à¥‡ पà¥à¤°à¤µà¤£à¤¿à¤¸à¤¾à¤ à¤¿ नोंद केली जाऊ शकत नाही';
+$lang['unsubscribe_success'] = '%s ला %s चà¥à¤¯à¤¾ पà¥à¤°à¤µà¤£à¥€ यादी मधून काढून टाकले';
+$lang['unsubscribe_error'] = '%s ला %s चà¥à¤¯à¤¾ पà¥à¤°à¤µà¤£à¥€ यादी मधून काढून टाकणà¥à¤¯à¤¾à¤¤ चूक à¤à¤¾à¤²à¥€';
+$lang['authmodfailed'] = 'सदसà¥à¤¯ अधिकृत करणà¥à¤¯à¤¾à¤šà¥€ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ चà¥à¤•à¥€à¤šà¥€ आहे. कृपया तà¥à¤®à¤šà¥à¤¯à¤¾ विकीचà¥à¤¯à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¾à¤¶à¥€ समà¥à¤ªà¤°à¥à¤• साधा.';
+$lang['authtempfail'] = 'सदसà¥à¤¯ अधिकृत करणà¥à¤¯à¤¾à¤šà¥€ सà¥à¤µà¤¿à¤§à¤¾ सधà¥à¤¯à¤¾ चालू नाही. सतत हा मजकूर दिसलà¥à¤¯à¤¾à¤¸ कृपया तà¥à¤®à¤šà¥à¤¯à¤¾ विकीचà¥à¤¯à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¾à¤¶à¥€ समà¥à¤ªà¤°à¥à¤• साधा.';
+$lang['i_chooselang'] = 'तà¥à¤®à¤šà¥€ भाषा निवडा';
+$lang['i_installer'] = 'डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ इनसà¥à¤Ÿà¥‰à¤²à¤°';
+$lang['i_wikiname'] = 'विकी नाम';
+$lang['i_enableacl'] = 'ACL चालू करा ( अधिक चांगले )';
+$lang['i_superuser'] = 'सà¥à¤ªà¤°-सदसà¥à¤¯';
+$lang['i_problems'] = 'इनसà¥à¤Ÿà¥‰à¤²à¤°à¤²à¤¾ काही अडचणि आलà¥à¤¯à¤¾ आहेत. तà¥à¤¯à¤¾ ठीक केलà¥à¤¯à¤¾à¤¶à¤¿à¤µà¤¾à¤¯ तà¥à¤®à¥à¤¹à¥€ पà¥à¤¢à¥‡ जाऊ शकत नाही.';
+$lang['i_modified'] = 'सà¥à¤°à¤•à¥à¤·à¤¿à¤¤à¤¤à¥‡à¤šà¥à¤¯à¤¾ कारणासठि ही सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ फ़कà¥à¤¤ नवीन आणि बदललेलà¥à¤¯à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨ मधेच चालेल. तà¥à¤®à¥à¤¹à¥€ à¤à¤•à¤¤à¤° डाउनलोड केलेले पॅकेज मधील फाइल परत पà¥à¤°à¤¸à¤¾à¤°à¤¿à¤¤ करा किंवा <a href="http://dokuwiki.org/install">डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨ विषयी सूचना</a> वाचा.';
+$lang['i_funcna'] = 'PHP मधलं <code>%s</code> हे फंकà¥à¤¶à¤¨ उपलबà¥à¤§ नाही. बहà¥à¤§à¤¾ तà¥à¤®à¤šà¥à¤¯à¤¾ होसà¥à¤Ÿà¤¿à¤‚ग पà¥à¤°à¤µà¤£à¤¾à¤°à¤¾à¤¨à¥‡ ते काही कारणाने अनà¥à¤ªà¤²à¤¬à¥à¤§ केलं असावं.';
+$lang['i_phpver'] = 'तà¥à¤®à¤šà¥€ PHP आवृतà¥à¤¤à¤¿ <code>%s</code> ही आवशà¥à¤¯à¤• असलेलà¥à¤¯à¤¾ <code>%s</code> हà¥à¤¯à¤¾ आवृतà¥à¤¤à¤¿à¤ªà¥‡à¤•à¥à¤·à¤¾ कमी आहे. कृपया तà¥à¤®à¤šà¥‡ PHP इनà¥à¤¸à¥à¤Ÿà¥‰à¤²à¥‡à¤¶à¤¨ अदà¥à¤¯à¤¯à¤¾à¤µà¤¤ करा.';
+$lang['i_permfail'] = '<code>%s</code> या डिरेकà¥à¤Ÿà¤°à¥€ मधà¥à¤¯à¥‡ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ बदल करू शकत नाही. कृपया या डिरेकà¥à¤Ÿà¤°à¥€à¤šà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ ठीक करा.';
+$lang['i_confexists'] = '<code>%s</code> आधीच असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ आहे.';
+$lang['i_writeerr'] = '<code>%s</code> निरà¥à¤®à¤¾à¤£ करू शकलो नाही. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ डिरेकà¥à¤Ÿà¤°à¥€ / फाइल चà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ तपासून सà¥à¤µà¤¤à¤ƒà¤š ही फाइल बनवावी लागेल.';
+$lang['i_badhash'] = 'अनाकलनीय किंवा बदललेले dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = 'code>%s</code> - अवैध किंवा रिकामा मजकूर.';
+$lang['i_success'] = 'वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ लावणà¥à¤¯à¤¾à¤šà¥‡ काम यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ पार पडले. आता तà¥à¤®à¥à¤¹à¥€ install.php डिलीट करू शकता. <a href="doku.php">तà¥à¤®à¤šà¥à¤¯à¤¾ नविन डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ </a> वर जा.';
+$lang['i_failure'] = 'कॉनà¥à¤«à¤¿à¤—à¥à¤°à¥‡à¤¶à¤¨à¤šà¥à¤¯à¤¾ फाइल सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करताना काही अडचणी आलà¥à¤¯à¤¾ आहेत. <a href="doku.php">तà¥à¤®à¤šà¥€ नवीन डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿ </a> वापरणà¥à¤¯à¤¾à¤†à¤§à¥€ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ हà¥à¤¯à¤¾ फाइल सà¥à¤µà¤¤à¤ƒ ठीक करावà¥à¤¯à¤¾ लागतील.';
+$lang['i_policy'] = 'आरंभीची ACL पॉलिसी';
+$lang['i_pol0'] = 'मà¥à¤•à¥à¤¤ विकी ( सरà¥à¤µà¤¾à¤‚ना वाचन, लेखन व अपलोड करणà¥à¤¯à¤¾à¤šà¥€ परवानगी )';
+$lang['i_pol1'] = 'सारà¥à¤µà¤œà¤¨à¤¿à¤• विकी ( सरà¥à¤µà¤¾à¤‚ना वाचणà¥à¤¯à¤¾à¤šà¥€ मà¥à¤­à¤¾ , लेखन व अपलोडची परवानगी फकà¥à¤¤ नोंदणीकृत सदसà¥à¤¯à¤¾à¤‚ना )';
+$lang['i_pol2'] = 'बंदिसà¥à¤¤ विकी ( वाचन , लेखन व अपलोडची परवानगी फकà¥à¤¤ नोंदणीकृत सदसà¥à¤¯à¤¾à¤‚ना ) ';
+$lang['i_retry'] = 'पà¥à¤¨à¥à¤¹à¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨';
+$lang['mu_intro'] = 'इथे तà¥à¤®à¥à¤¹à¥€ à¤à¤•à¤¾à¤ªà¥‡à¤•à¥à¤·à¤¾ अधिक फाइल अपलोड करू शकता. बà¥à¤°à¤¾à¤‰à¤ चà¥à¤¯à¤¾ बटणावर कà¥à¤²à¤¿à¤• करून तà¥à¤¯à¤¾à¤¨à¤¾ लिसà¥à¤Ÿ मधे टाका. सगळà¥à¤¯à¤¾ टाकà¥à¤¨ à¤à¤¾à¤²à¥à¤¯à¤¾à¤µà¤° अपलोड चà¥à¤¯à¤¾ बटणावर कà¥à¤²à¤¿à¤• करा.';
+$lang['mu_gridname'] = 'फाइल नाम';
+$lang['mu_gridsize'] = 'साइज';
+$lang['mu_gridstat'] = 'सà¥à¤¥à¤¿à¤¤à¤¿';
+$lang['mu_namespace'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['mu_browse'] = 'बà¥à¤°à¤¾à¤‰à¤';
+$lang['mu_toobig'] = 'अति मोठे';
+$lang['mu_ready'] = 'अपलोडसाठी तयार';
+$lang['mu_done'] = 'पूरà¥à¤£';
+$lang['mu_fail'] = 'अयशसà¥à¤µà¥€';
+$lang['mu_authfail'] = 'सेशन संपला';
+$lang['mu_progress'] = '@PCT@% अपलोड à¤à¤¾à¤²à¥‡';
+$lang['mu_filetypes'] = 'मानà¥à¤¯ फाइल टाइप';
+$lang['recent_global'] = 'तà¥à¤®à¥à¤¹à¥€ सधà¥à¤¯à¤¾ <b>%s</b> या नेमसà¥à¤ªà¥‡à¤¸ मधील बदल पाहात आहात.तà¥à¤®à¥à¤¹à¥€ <a href="%s">पूरà¥à¤£ विकी मधले बदल </a> सà¥à¤¦à¥à¤§à¤¾ पाहू शकता.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt
new file mode 100644
index 000000000..dae909c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt
@@ -0,0 +1,3 @@
+====== पान लॉक आहे ======
+
+हे पान सधà¥à¤¯à¤¾ दà¥à¤¸à¤°à¥à¤¯à¤¾ सदसà¥à¤¯à¤¾à¤¨à¥‡ संपादनासाठी लॉक केले आहे. तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ तà¥à¤¯à¤¾à¤šà¥‡ संपादन करून होईपरà¥à¤¯à¤‚त किंवा लॉक संपेपरà¥à¤¯à¤‚त थांबावे लागेल. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt
new file mode 100644
index 000000000..f2fef4c45
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt
@@ -0,0 +1,3 @@
+====== लॉगिन ======
+
+तà¥à¤®à¥à¤¹à¥€ सधà¥à¤¯à¤¾ लॉगिन केलेले नाही! तà¥à¤®à¤šà¥‡ नाव-पासवरà¥à¤¡ देऊन खाली लॉगिन करा. लॉगिन करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ तà¥à¤®à¤šà¥à¤¯à¤¾ बà¥à¤°à¤¾à¤‰à¤œà¤°à¤®à¤§à¥‡ कà¥à¤•à¥€à¤œ चालू असलà¥à¤¯à¤¾ पाहिजेत. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt
new file mode 100644
index 000000000..18fa23846
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt
@@ -0,0 +1,15 @@
+तà¥à¤®à¤šà¥à¤¯à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤®à¤§à¥€à¤² à¤à¤• पान बदलले किंवा नवीन टाकले गेले आहे. तà¥à¤¯à¤¾à¤šà¥€ माहिती पà¥à¤¢à¥€à¤² पà¥à¤°à¤®à¤¾à¤£à¥‡ :
+
+दिनांक : @DATE@
+बà¥à¤°à¤¾à¤‰à¤œà¤° : @BROWSER@
+IP-पतà¥à¤¤à¤¾ : @IPADDRESS@
+मशिनचे नाव ( Host name ) : @HOSTNAME@
+जà¥à¤¨à¥€ आवृतà¥à¤¤à¥€ : @OLDPAGE@
+नवी आवृतà¥à¤¤à¥€ : @NEWPAGE@
+संपादन सारांश : @SUMMARY@
+सदसà¥à¤¯ : @USER@
+
+@DIFF@
+
+--
+हा ईमेल @DOKUWIKIURL@ येथील डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¦à¥à¤µà¤¾à¤°à¤¾ आपोआप तयार केला गेला आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt
new file mode 100644
index 000000000..00a1c6b60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt
@@ -0,0 +1,3 @@
+====== हा मà¥à¤¦à¥à¤¦à¤¾ अजून असà¥à¤¤à¤¿à¤¤à¥à¤¤à¥à¤µà¤¾à¤¤ नाही ======
+
+तà¥à¤®à¤šà¥€ अशा à¤à¤–ादà¥à¤¯à¤¾ मà¥à¤¦à¥à¤¦à¥à¤¯à¤¾à¤šà¥à¤¯à¤¾ लिंक वरून इथे आला आहात जो अजून असà¥à¤¤à¤¿à¤¤à¥à¤¤à¥à¤µà¤¾à¤¤ नाही. जर तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ परवानगी असेल तर तà¥à¤®à¤šà¥€ तà¥à¤¯à¤¾ मà¥à¤¦à¥à¤¦à¥à¤¯à¤¾à¤µà¤° "हे पान नवीन तयार करा" हे बटण कà¥à¤²à¤¿à¤• करून सà¥à¤µà¤¤à¤ƒ à¤à¤• पान तयार करू शकता. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt
new file mode 100644
index 000000000..180b031fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt
@@ -0,0 +1,3 @@
+====== अशी कà¥à¤ à¤²à¥€ आवृतà¥à¤¤à¥€ नाही ======
+
+ही आवृतà¥à¤¤à¥€ असà¥à¤¤à¤¿à¤¤à¥à¤¤à¥à¤µà¤¾à¤¤ नाही. "जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥à¤¯à¤¾" बटण वापरून या दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¾à¤šà¥à¤¯à¤¾ सरà¥à¤µ जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥à¤¯à¤¾ तà¥à¤®à¤šà¥€ पाहू शकता. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt
new file mode 100644
index 000000000..8277398dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt
@@ -0,0 +1,3 @@
+====== à¤à¤²à¤• ======
+
+ही तà¥à¤®à¤šà¤¾ मजकूर कसा दिसेल तà¥à¤¯à¤¾à¤šà¥€ à¤à¤• à¤à¤²à¤• आहे. लकà¥à¤·à¤¾à¤¤ ठेवा : हा मजकूर अजà¥à¤¨ **सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केलेला नाही** ! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt
new file mode 100644
index 000000000..ec0b707a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt
@@ -0,0 +1,11 @@
+नमसà¥à¤•à¤¾à¤° @FULLNAME@!
+
+कोणीतरी तà¥à¤®à¤šà¥à¤¯à¤¾ @TITLE@ या @DOKUWIKIURL@ येथील लॉगिनसाठी नवीन पासवरà¥à¤¡ मागवला आहे.
+जर तà¥à¤®à¥à¤¹à¥€ हा पासवरà¥à¤¡ मागवला नसेल तर कृपया हà¥à¤¯à¤¾ ईमेलकड़े दà¥à¤°à¥à¤²à¤•à¥à¤· करा.
+
+जर नकà¥à¤•à¥€ तà¥à¤®à¥à¤¹à¥€à¤š हा पासवरà¥à¤¡ मागवला असेल तर खालील लिंकवर कà¥à¤²à¤¿à¤• करून ते नकà¥à¤•à¥€ करा.
+
+@CONFIRM@
+
+--
+हा ईमेल @DOKUWIKIURL@ येथील डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¦à¥à¤µà¤¾à¤°à¤¾ आपोआप तयार केला गेला आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt
new file mode 100644
index 000000000..b834dd750
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt
@@ -0,0 +1 @@
+हे पान फकà¥à¤¤ वाचता येऊ शकतं. तà¥à¤®à¥à¤¹à¥€ तà¥à¤¯à¤¾à¤šà¤¾ मूळ विकी मजकूर पाहू शकता पण तो बदलू शकत नाही. जर हे चà¥à¤•à¥€à¤šà¤‚ असेल तर तà¥à¤®à¤šà¥à¤¯à¤¾ विकी वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¾à¤¶à¥€ संपरà¥à¤• साधा. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt
new file mode 100644
index 000000000..9a6d6f151
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt
@@ -0,0 +1,3 @@
+====== अलीकडील बदल ======
+
+खालील पाने हलà¥à¤²à¥€à¤š बदलली आहेत \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt
new file mode 100644
index 000000000..3aca31278
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt
@@ -0,0 +1,3 @@
+====== नवीन सदसà¥à¤¯ मà¥à¤¹à¤£à¥à¤¨ नोंदणी करा ======
+
+खाली तà¥à¤®à¤šà¥€ माहिती भरून या विकी वर नवीन खातं उघडा. कृपया आपण देत असलेला ईमेल चालू असलà¥à¤¯à¤¾à¤šà¥€ खातà¥à¤°à¥€ करा - जर तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ इथे पासवरà¥à¤¡ टाकायला सांगितला नाही तयार à¤à¤• नवीन पासवरà¥à¤¡ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ तà¥à¤¯à¤¾ ईमेल वर पाठवला जाइल. तà¥à¤®à¤šà¤‚ लॉगिन नाम à¤à¤• वैध [[doku>pagename|पेजनेम]] असले पाहिजे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt
new file mode 100644
index 000000000..a6fea4d06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt
@@ -0,0 +1,13 @@
+à¤à¤• नवीन सदसà¥à¤¯à¤¾à¤šà¥€ नोंदणी à¤à¤¾à¤²à¥€ आहे. तà¥à¤¯à¤¾à¤šà¥€ माहीत पà¥à¤¢à¥€à¤²à¤ªà¥à¤°à¤®à¤¾à¤£à¥‡ :
+
+सदसà¥à¤¯ नाम : @NEWUSER@
+पूरà¥à¤£ नाव : @NEWNAME@
+ईमेल : @NEWEMAIL@
+
+दिनांक : @DATE@
+बà¥à¤°à¤¾à¤‰à¤œà¤° : @BROWSER@
+IP-पतà¥à¤¤à¤¾ : @IPADDRESS@
+होसà¥à¤Ÿ नाम : @HOSTNAME@
+
+--
+हा ईमेल @DOKUWIKIURL@ येथील डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¦à¥à¤µà¤¾à¤°à¤¾ आपोआप तयार केला गेला आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt
new file mode 100644
index 000000000..64b95a45f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt
@@ -0,0 +1,3 @@
+====== नवीन पासवरà¥à¤¡ पाठव ======
+
+या विकिवरील तà¥à¤®à¤šà¥à¤¯à¤¾ अकाउंटसाठी नवीन पासवरà¥à¤¡ मिळवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ कृपया तà¥à¤®à¤šà¥‡ सदसà¥à¤¯ नाम खालचà¥à¤¯à¤¾ फॉरà¥à¤® मधे टाका. ही पासवरà¥à¤¡à¤šà¥€ मागणी नकà¥à¤•à¥€ करणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ तà¥à¤®à¥à¤¹à¥€ नोंदणी करताना दिलेलà¥à¤¯à¤¾ ईमेल पतà¥à¤¤à¥à¤¯à¤¾à¤µà¤° à¤à¤• लिंक पाठवली जाइल. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt
new file mode 100644
index 000000000..fb842c763
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt
@@ -0,0 +1,3 @@
+====== जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥à¤¯à¤¾ ======
+
+हà¥à¤¯à¤¾ सदà¥à¤¯ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤šà¥à¤¯à¤¾ जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥à¤¯à¤¾ आहेत. à¤à¤–ादà¥à¤¯à¤¾ जà¥à¤¨à¥à¤¯à¤¾ आवृतà¥à¤¤à¥€à¤µà¤° परत जाणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ टी खालून निवडा, "हे पान संपादित करा" वर कà¥à¤²à¤¿à¤• करा आणि ते सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करा. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt
new file mode 100644
index 000000000..23e10b1d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt
@@ -0,0 +1,5 @@
+====== शोध ======
+
+तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ खाली तà¥à¤®à¤šà¥à¤¯à¤¾ शोधाचे फलित दिसतील. जर तà¥à¤®à¤šà¥€ शोधत असलेली गोषà¥à¤Ÿ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ सापडली नाही, तर योगà¥à¤¯ बटण वापरून तà¥à¤®à¥à¤¹à¥€ शोधत असलेलà¥à¤¯à¤¾ गोषà¥à¤Ÿà¥€à¤µà¤¿à¤·à¤¯à¥€ तà¥à¤®à¥à¤¹à¥€ à¤à¤–ादे पान निरà¥à¤®à¤¾à¤£ किंवा संपादित करू शकता.
+
+====== फलित ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt
new file mode 100644
index 000000000..aeaeee500
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt
@@ -0,0 +1,2 @@
+** ही हà¥à¤¯à¤¾ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤šà¥€ जà¥à¤¨à¥€ आवृतà¥à¤¤à¥€ आहे. **
+-- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt
new file mode 100644
index 000000000..2b413a928
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt
@@ -0,0 +1,39 @@
+# ही अशा शबà¥à¤¦à¤¾à¤‚ची यादी आहे जी अनà¥à¤•à¥à¤°à¤®à¤• (इंडेकà¥à¤¸à¤°) दà¥à¤°à¥à¤²à¤•à¥à¤·à¤¿à¤¤ करतो, जर à¤à¤• ओळित à¤à¤• शबà¥à¤¦ आला तरच.
+# ही यादी बदललà¥à¤¯à¤¾à¤¸ केवळ यूनिकà¥à¤¸ पदà¥à¤§à¤¤à¥€à¤šà¥€ लाइन à¤à¤‚डिंग वापरा. तीन अकà¥à¤·à¤°à¤¾à¤ªà¥‡à¤•à¥à¤·à¤¾ लहान शबà¥à¤¦ टाकणà¥à¤¯à¤¾à¤šà¥€
+# गरज नाही - ते आपोआपच दà¥à¤°à¥à¤²à¤•à¥à¤·à¤¿à¤¤ केले जातात. ही यादी http://www.ranks.nl/stopwords/ येथील यादीवर
+# आधारित आहे.
+about
+are
+as
+an
+and
+you
+your
+them
+their
+com
+for
+from
+into
+if
+in
+is
+it
+how
+of
+on
+or
+that
+the
+this
+to
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt
new file mode 100644
index 000000000..8cbb3164e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt
@@ -0,0 +1,21 @@
+नमसà¥à¤•à¤¾à¤° !
+
+@TITLE@ विकी मधलं @PAGE@ हे पान बदललं आहे.
+खाली तà¥à¤¯à¤¾à¤¤à¥€à¤² बदल दाखवले आहेत:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+दिनांक : @DATE@
+सदसà¥à¤¯ : @USER@
+संपादन सारांश : @SUMMARY@
+जà¥à¤¨à¥€ आवृतà¥à¤¤à¥€ : @OLDPAGE@
+नवीन आवृतà¥à¤¤à¥€ : @NEWPAGE@
+
+पानाचà¥à¤¯à¤¾ बदलाविषयिचà¥à¤¯à¤¾ सूचना तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ नको असतील तर
+@DOKUWIKIURL@ या विकी वर लॉगिन करा आणि
+@NEWPAGE@ पानावर जा व तà¥à¤¯à¤¾ पान/नेमसà¥à¤ªà¥‡à¤¸ विषयीचà¥à¤¯à¤¾ सूचना बंद ( unsubscribe ) करा.
+
+--
+हा ईमेल @DOKUWIKIURL@ येथील डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¦à¥à¤µà¤¾à¤°à¤¾ आपोआप तयार केला गेला आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt
new file mode 100644
index 000000000..c08810f3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt
@@ -0,0 +1,3 @@
+====== तà¥à¤®à¤šà¥€ सदसà¥à¤¯ माहिती अदà¥à¤¯à¤¯à¤¾à¤µà¤¤ करा ======
+
+फ़कà¥à¤¤ तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ बदल करायचा असेल तेच रकाने परत भरा. तà¥à¤®à¤šà¥€ तà¥à¤®à¤šà¥‡ सदसà¥à¤¯ नाम बदलू शकत नाही. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt
new file mode 100644
index 000000000..66e736598
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt
@@ -0,0 +1,13 @@
+à¤à¤• फाइल तà¥à¤®à¤šà¥à¤¯à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤µà¤° अपलोड केली गेली आहे. तà¥à¤¯à¤¾à¤šà¥€ माहिती यापà¥à¤°à¤®à¤¾à¤£à¥‡ :
+
+फाइल : @MEDIA@
+दिनांक : @DATE@
+बà¥à¤°à¤¾à¤‰à¤œà¤° : @BROWSER@
+IP-पतà¥à¤¤à¤¾ : @IPADDRESS@
+होसà¥à¤Ÿà¤¨à¤¾à¤® : @HOSTNAME@
+साइज़ : @SIZE@
+MIME टाइप : @MIME@
+सदसà¥à¤¯ : @USER@
+
+--
+हा ईमेल @DOKUWIKIURL@ येथील डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤¦à¥à¤µà¤¾à¤°à¤¾ आपोआप तयार केला गेला आहे. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt
new file mode 100644
index 000000000..e885cbed9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt
@@ -0,0 +1,3 @@
+====== भंकस रोखली ======
+
+तà¥à¤®à¤šà¥‡ बदल सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ केलेले ** नाहीत ** कारण तà¥à¤¯à¤¾à¤®à¤§à¥‡ à¤à¤• किंवा अधिक निषिदà¥à¤§ शबà¥à¤¦ आहेत. जर तà¥à¤®à¥à¤¹à¥€ मà¥à¤¦à¥à¤¦à¤¾à¤®à¤š विकिवर भंकस करणà¥à¤¯à¤¾à¤šà¤¾ पà¥à¤°à¤¯à¤¤à¥à¤¨ केला असेल तर असले चाळे बंद करा ! आणि समजा तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ असा वाटत असेल की हा मजकूर निषिदà¥à¤§ समजणà¥à¤¯à¤¾à¤šà¥‡ काही कारण नाही तर तà¥à¤®à¤šà¥à¤¯à¤¾ विकी वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¾à¤¶à¥€ संपरà¥à¤• साधा. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt
new file mode 100644
index 000000000..7a829dbe5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt
@@ -0,0 +1,2 @@
+====== वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ ======
+तल तपाईले DokuWikiमा उपलवà¥à¤§ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•à¤¿à¤¯ कारà¥à¤¯à¤¹à¤°à¥à¤•à¥‹ सà¥à¤šà¥€ पाउन सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt
new file mode 100644
index 000000000..51b95731d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt
@@ -0,0 +1,2 @@
+====== पछाडि लिङà¥à¤• ======
+यो पृषà¥à¤ à¤¹à¤°à¥à¤•à¥‹ सà¥à¤šà¥€à¤¹à¤°à¥à¤²à¥‡ पछाडि लिङà¥à¤• सà¥à¤µà¤¯à¤‚लाई नै गरेको छ। \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt
new file mode 100644
index 000000000..457e108ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt
@@ -0,0 +1,5 @@
+====== नयाठसंसà¥à¤•à¤°à¤£ उपलबà¥à¤§ छ ======
+
+तपाईले समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤­à¤à¤•à¥‹ पाठको नयाठससà¥à¤•à¤°à¤£ उपलबà¥à¤§ छ। तपाईले समà¥à¤ªà¤¾à¤¦à¤¨ गरिरहनॠभà¤à¤•à¥‹ समयमा अरà¥à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¥‡ यो पाठ परिवरà¥à¤¤à¤¨ गरेकोले यसà¥à¤¤à¥‹ भà¤à¤•à¥‹ हो ।
+
+दà¥à¤¬à¥ˆà¤•à¤¾ फरक दाजà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ र दà¥à¤ˆà¤®à¤¾ कà¥à¤¨ राखà¥à¤¨à¥‡à¤¹à¥‹ निशà¥à¤šà¤¿à¤¤ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।तपाईले "वचत गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ " छानà¥à¤¨à¥ भयो भने तपाईको संसà¥à¤•à¤°à¤£ वचत हà¥à¤¨à¥‡à¤›à¥¤ "रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥" छानà¥à¤¨à¥ भयो भने अहिलेको संसà¥à¤•à¤°à¤£ वचत हà¥à¤¨à¥‡à¤› । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt
new file mode 100644
index 000000000..ab4bcf290
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt
@@ -0,0 +1,3 @@
+====== अनà¥à¤®à¤¤à¤¿ अमानà¥à¤¯ ======
+
+माफ गरà¥à¤¨à¥à¤¹à¥‹à¤²à¤¾ तपाईलाई अगाडि बढà¥à¤¨ अनà¥à¤®à¤¤à¤¿ छैन। समà¥à¤­à¤µà¤¤: तपाईले पà¥à¤°à¤µà¥‡à¤¶ गरà¥à¤¨ भà¥à¤²à¥à¤¨à¥ भयो। \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt
new file mode 100644
index 000000000..76d75fbfb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt
@@ -0,0 +1,3 @@
+====== भिनà¥à¤¨à¤¤à¤¾à¤¹à¤°à¥ ======
+
+यसले यो पृषà¥à¤ à¤•à¥‹ छानिà¤à¤•à¥‹ संसà¥à¤•à¤°à¤£ र हालको संकरण बीच भिनà¥à¤¨à¤¤à¤¾à¤¹à¤°à¥ देखाउà¤à¤› । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt
new file mode 100644
index 000000000..88630c992
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt
@@ -0,0 +1,5 @@
+====== डà¥à¤°à¤¾à¤«à¥à¤Ÿ फाइल भेटियो ======
+
+तपाईको यो पृषà¥à¤ à¤•à¥‹ गत समà¥à¤ªà¤¾à¤¦à¤¨ सफलतापूरà¥à¤µà¤• समà¥à¤ªà¤¨à¥à¤¨ भà¤à¤•à¥‹ थिà¤à¤¨ ।DokuWiki ले सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤à¤°à¥à¤ªà¤®à¤¾ डà¥à¤°à¤¾à¤«à¥à¤Ÿ वचतगरेको छ तà¥à¤¯à¤¸ देखि तपाईले आफà¥à¤¨à¥‹ समà¥à¤ªà¤¾à¤¦à¤¨ कारà¥à¤¯à¤®à¤¾ निरनà¥à¤¤à¤°à¤¤à¤¾ दिन सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›à¥¤ तल तपाईले गत सतà¥à¤°à¤®à¤¾ बचत गरिà¤à¤•à¥‹ सामगà¥à¤°à¥€ देखà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ।
+
+कृपया निरà¥à¤£à¤¯ दिनà¥à¤¹à¥‹à¤¸à¥ कि तपाई गत सतà¥à¤°à¤®à¤¾ बचत गरिà¤à¤•à¥‹ सतà¥à¤°à¤•à¥‹ समà¥à¤ªà¤¾à¤¦à¤¨à¤•à¤¾à¤°à¥à¤¯ //recover// , //delete// वा //cancel// के गरà¥à¤¨ चाहनà¥à¤¹à¥à¤¨à¥à¤› भनेर।
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt
new file mode 100644
index 000000000..be498a61b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt
@@ -0,0 +1 @@
+पृषà¥à¤  समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸ र "बचत" मा थिचà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । सिनà¥à¤Ÿà¥‡à¤•à¥à¤¸à¤•à¥‹ लागि [[wiki:syntax]] हेरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । यो पृषà¥à¤ à¤²à¤¾à¤ˆ **सà¥à¤§à¤¾à¤°à¥à¤¨** सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› भने मातà¥à¤° समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।यदि कà¥à¤¨à¥ˆ पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨ या , जानà¥à¤¨ चाहनà¥à¤¹à¥à¤¨à¥à¤› भने [[playground:playground|playground]] को पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt
new file mode 100644
index 000000000..0db67c2bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt
@@ -0,0 +1,2 @@
+** तपाईले यस कागजातको पà¥à¤°à¤¾à¤¨à¥‹ संसà¥à¤•à¤°à¤£ खोलà¥à¤¨à¥ भà¤à¤•à¥‹ छ ।** यदि यसलाई वचत गरà¥à¤¨à¥à¤­à¤¯à¥‹ भने यसैसामगà¥à¤°à¥€à¤¬à¤¾à¤Ÿ नयाठसंसà¥à¤•à¤°à¤£à¤•à¥‹ निरà¥à¤®à¤¾à¤£ हà¥à¤¨à¥‡à¤› ।
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt
new file mode 100644
index 000000000..cb06f0307
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt
@@ -0,0 +1,3 @@
+====== सà¥à¤šà¥€ ======
+
+यो सबै उपलाबà¥à¤§ पृषà¥à¤ à¤¹à¤°à¥à¤•à¥‹ [[doku>namespaces|namespaces]] का आधारमा मिलाइà¤à¤•à¥‹ सà¥à¤šà¥€ हो । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php
new file mode 100644
index 000000000..ce9310ee5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php
@@ -0,0 +1,220 @@
+<?php
+/**
+ * Nepali language file
+ *
+ * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
+ * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'यो पृषà¥à¤  समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_source'] = 'यो पृषà¥à¤ à¤•à¥‹ सà¥à¤°à¥‹à¤¤ देखाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_show'] = 'पृषà¥à¤  देखाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_create'] = 'यो पृषà¥à¤  निरà¥à¤®à¤¾à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_search'] = 'खोजà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_save'] = 'वचत गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_preview'] = 'पूरà¥à¤µà¤°à¥à¤ª ';
+$lang['btn_top'] = 'माथि फरà¥à¤•à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_newer'] = '<< यो भनà¥à¤¦à¤¾ पछिको';
+$lang['btn_older'] = 'यो भनà¥à¤¦à¤¾ पहिलेको >>';
+$lang['btn_revs'] = 'पà¥à¤°à¤¾à¤¨à¥‹ संकरण';
+$lang['btn_recent'] = 'हालैका परिवरà¥à¤¤à¤¨à¤¹à¤°à¥ ';
+$lang['btn_upload'] = 'अपलोड ';
+$lang['btn_cancel'] = 'रदà¥à¤¦ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_index'] = 'सà¥à¤šà¥€';
+$lang['btn_secedit'] = 'समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_login'] = 'पà¥à¤°à¤µà¥‡à¤¶ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_logout'] = 'बाहिर जानà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_admin'] = 'à¤à¤¡à¥à¤®à¤¿à¤¨(वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•)';
+$lang['btn_update'] = 'अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_delete'] = 'मेटाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_back'] = 'पछाडि';
+$lang['btn_backlink'] = 'पछाडिका लिङà¥à¤•à¤¹à¤°à¥ ';
+$lang['btn_backtomedia'] = 'मिडिया छनौटमा फरà¥à¤•à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_subscribe'] = 'पृषà¥à¤  परिवरà¥à¤¤à¤¨ गà¥à¤°à¤¾à¤¹à¥à¤¯ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_unsubscribe'] = 'पृषà¥à¤  परिवरà¥à¤¤à¤¨ अगà¥à¤°à¤¾à¤¹à¥à¤¯ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['btn_subscribens'] = 'नेमसà¥à¤ªà¥‡à¤¸ परिवरà¥à¤¤à¤¨ गà¥à¤°à¤¾à¤¹à¥à¤¯ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_unsubscribens'] = 'नेमसà¥à¤ªà¥‡à¤¸ परिवरà¥à¤¤à¤¨ अगà¥à¤°à¤¾à¤¹à¥à¤¯ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_profile'] = 'पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_reset'] = 'पूरà¥à¤µà¤°à¥à¤ªà¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸';
+$lang['btn_resendpwd'] = 'नयाठपà¥à¤°à¤µà¥‡à¤¶ शवà¥à¤¦(पासवरà¥à¤¡) पठाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_draft'] = ' डà¥à¤°à¤¾à¤«à¥à¤Ÿ समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['btn_recover'] = 'पहिलेको डà¥à¤°à¤¾à¤«à¥à¤Ÿ हासिल गरà¥à¤¨à¥à¤¹à¥‹à¤¸ ';
+$lang['btn_draftdel'] = ' डà¥à¤°à¤¾à¤«à¥à¤Ÿ मेटाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['loggedinas'] = 'पà¥à¤°à¤µà¥‡à¤¶ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['user'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ ';
+$lang['pass'] = 'पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦';
+$lang['newpass'] = 'नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦';
+$lang['oldpass'] = 'नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ निशà¥à¤šà¤¿à¤¤ गरà¥à¤¨à¥à¤¹à¥‹à¤¸ ';
+$lang['passchk'] = 'à¤à¤•à¤ªà¤Ÿà¤• पà¥à¤¨:';
+$lang['remember'] = 'मलाई समà¥à¤à¤¨à¥';
+$lang['fullname'] = 'पूरा नाम';
+$lang['email'] = 'इमेल';
+$lang['register'] = 'दरà¥à¤¤à¤¾ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['profile'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•à¥‹ पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤²';
+$lang['badlogin'] = 'माफ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ , पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤¨à¤¾à¤® वा पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ गलत भयो ';
+$lang['minoredit'] = 'सामानà¥à¤¯ परिवरà¥à¤¤à¤¨';
+$lang['draftdate'] = 'डà¥à¤°à¤¾à¤«à¥à¤Ÿ सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤ रà¥à¤ªà¤®à¤¾ वचत भà¤à¤•à¥‹';
+$lang['nosecedit'] = 'यो पृषà¥à¤  यसै बखतमा परिवरà¥à¤¤à¤¨ भयो, खणà¥à¤¡ जानकारी अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• हà¥à¤¨ सकेन र पूरै पृषà¥à¤  लोड भयो । ';
+$lang['regmissing'] = 'माफ गरà¥à¤¨à¥à¤¹à¥‹à¤²à¤¾ , सबै ठाउमा भरà¥à¤¨à¥à¤ªà¤°à¥à¤¨à¥‡à¤› ।';
+$lang['reguexists'] = 'यो नामको पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ पहिले देखि रहेको छ।';
+$lang['regsuccess'] = 'यो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ बनाइà¤à¤•à¥‹ छ र पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ इमेलमा पठइà¤à¤•à¥‹ छ।';
+$lang['regsuccess2'] = 'यो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ बनाइà¤à¤•à¥‹ छ ।';
+$lang['regmailfail'] = 'इमेलबाट पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦ पठउन गलà¥à¤¤à¤¿ भयो । कृपया à¤à¤¡à¥à¤®à¤¿à¤¨(वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•)लाई समà¥à¤ªà¤°à¥à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ !';
+$lang['regbadmail'] = 'दिà¤à¤•à¥‹ इमेल ठेगाना गलत भठजसà¥à¤¤à¥‹ देखिनà¥à¤› - यदि यो सहि हो भने à¤à¤¡à¥à¤®à¤¿à¤¨(वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•)लाई समà¥à¤ªà¤°à¥à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ !';
+$lang['regbadpass'] = 'दिइà¤à¤•à¤¾ पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦à¤¹à¤°à¥ मिलà¥à¤¦à¥ˆà¤¨à¤¨à¥ , पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['regpwmail'] = 'तपाईको DokuWiki पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦ ';
+$lang['reghere'] = 'तपाईको आफà¥à¤¨à¥ˆ खाता छैन ? अहिलà¥à¤¯à¥ˆ à¤à¤‰à¤Ÿà¤¾ बनाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['profna'] = 'यो विकिले यो पà¥à¤°à¥‹à¤«à¤¾à¤‡à¤² परिवरà¥à¤¤à¤¨ समरà¥à¤¥à¤¨ गरà¥à¤¦à¥ˆà¤¨ ।';
+$lang['profnochange'] = 'केहि परिवरà¥à¤¤à¤¨ छैन , केहि गरà¥à¤¨à¥ छैन ।';
+$lang['profnoempty'] = 'खाली नाम वा इमेल ठेगानालाई अनà¥à¤®à¤¤à¤¿ छैन ।';
+$lang['profchanged'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•à¥‹ पà¥à¤°à¤«à¤¾à¤‡à¤² सफलरà¥à¤ªà¤®à¤¾ परिवरà¥à¤¤à¤¨ भयो ।';
+$lang['pwdforget'] = 'आफà¥à¤¨à¥‹ पासवरà¥à¤¡ भà¥à¤²à¥à¤¨à¥ भयो ? नयाठहासिल गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['resendna'] = 'यो विकिबाट पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ पठाउन समरà¥à¤¥à¤¿à¤¤ छैन ।';
+$lang['resendpwd'] = 'नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ पठाउनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['resendpwdmissing'] = 'माफ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ , तपाईले सबै ठाउ भरà¥à¤¨à¥à¤ªà¤°à¥à¤›à¥¤ ';
+$lang['resendpwdnouser'] = 'माफ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥, हामà¥à¤°à¥‹ डेटावेसमा यो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ भेटिà¤à¤¨ ।';
+$lang['resendpwdbadauth'] = 'माफ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ , यो अनà¥à¤®à¤¤à¤¿ चिनà¥à¤¹ गलत छ। तपाईले पूरै जानकारी लिङà¥à¤• पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥ परà¥à¤¨à¥‡à¤›à¥¤ ';
+$lang['resendpwdconfirm'] = 'तपाईको इमेलमा कनà¥à¤«à¤°à¤®à¥‡à¤¶à¤¨ लिङà¥à¤• पठाइà¤à¤•à¥‹ छ। ';
+$lang['resendpwdsuccess'] = 'तपाईको पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ इमेलबाट पठाइà¤à¤•à¥‹ छ। ';
+$lang['license'] = 'खà¥à¤²à¤¾à¤‡à¤à¤•à¥‹ बाहेक, यस विकिका विषयवसà¥à¤¤à¥à¤¹à¤°à¥ निमà¥à¤¤ पà¥à¤°à¤®à¤¾à¤£ दà¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤®à¤¾à¤£à¤¿à¤• गरिà¤à¤•à¥‹ छ।';
+$lang['licenseok'] = 'नोट: यस पृषà¥à¤  समà¥à¤ªà¤¾à¤¦à¤¨ गरी तपाईले आफà¥à¤¨à¥‹ विषयवसà¥à¤¤à¥ तलको पà¥à¤°à¤®à¤¾à¤£ पतà¥à¤° अनà¥à¤¤à¤°à¥à¤—त पà¥à¤°à¤®à¤¾à¤£à¤¿à¤• गरà¥à¤¨ राजी हà¥à¤¨à¥ हà¥à¤¨à¥‡à¤› ।';
+$lang['txt_upload'] = 'अपलोड गरà¥à¤¨à¤²à¤¾à¤ˆ फाइल छाà¥à¤¨à¥à¤¨à¥à¤¹à¥‹à¥à¤¸à¥';
+$lang['txt_filename'] = 'अरà¥à¤•à¥‹ रà¥à¤ªà¤®à¤¾ अपलोड गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ (à¤à¤šà¥à¤›à¤¿à¤•)';
+$lang['txt_overwrt'] = 'रहेको उहि नामको फाइललाई मेटाउने';
+$lang['lockedby'] = 'अहिले तालà¥à¤šà¤¾ लगाइà¤à¤•à¥‹';
+$lang['lockexpire'] = 'तालà¥à¤šà¤¾ अवधि सकिने :';
+$lang['willexpire'] = 'तपाईलले यो पृषà¥à¤  समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨ लगाउनॠभà¤à¤•à¥‹ तालà¥à¤šà¤¾à¤•à¥‹ अवधि à¤à¤• मिनेट भितà¥à¤° सकिदै छ। \n दà¥à¤µà¤¨à¥à¤¦ हà¥à¤¨ नदिन पूरà¥à¤µà¤°à¥à¤ª वा तालà¥à¤šà¤¾ समय परिवरà¥à¤¤à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['notsavedyet'] = 'तपाईले वचन गरà¥à¤¨à¥ नभà¤à¤•à¥‹ परिवरà¥à¤°à¤¨ हराउने छ। \n साचà¥à¤šà¥ˆ जारी गरà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ।';
+$lang['rssfailed'] = 'यो फिड लिइ आउदा गलà¥à¤¤à¤¿ भयो ।';
+$lang['nothingfound'] = 'केहि पनि भेटिà¤à¤¨ ।';
+$lang['mediaselect'] = 'मिडिया फाइलहरू ';
+$lang['fileupload'] = 'मिडिया फाइल अपलोड ';
+$lang['uploadsucc'] = 'अपलोड सफल ';
+$lang['uploadfail'] = 'अपलोड असफल । सायद गलत अनà¥à¤®à¤¤à¤¿ । ';
+$lang['uploadwrong'] = 'अपलोड असमरà¥à¤¥à¤¿à¤¤ । फाइल à¤à¤•à¥à¤¸à¤Ÿà¥‡à¤¨à¥à¤¸à¤¨ अमानà¥à¤¯à¥¤ ';
+$lang['uploadexist'] = 'फाइल पहिलेदेखि छ। केहि गरिà¤à¤¨ ।';
+$lang['uploadbadcontent'] = 'अपलोड गरिà¤à¤•à¥‹ वसà¥à¤¤à¥ %s फाइल à¤à¤•à¥à¤Ÿà¥‡à¤¨à¥à¤¸à¤¨ अनà¥à¤¸à¤¾à¤° मिलेन ।';
+$lang['uploadspam'] = 'अपलोड सà¥à¤ªà¥à¤¯à¤¾à¤® कालो सà¥à¤šà¥€à¤²à¥‡ रोकिà¤à¤•à¥‹ छ। ';
+$lang['uploadxss'] = 'अपलोड समà¥à¤­à¤µà¤¤: हानिकारक वसà¥à¤¤à¥à¤•à¥‹ कारणले रोकिà¤à¤•à¥‹à¥¤ ';
+$lang['deletesucc'] = 'फाइल "%s" मेटिà¤à¤•à¥‹ छ। ';
+$lang['deletefail'] = '"%s" मेटà¥à¤¨ सकिà¤à¤¨ - अनà¥à¤®à¤¤à¤¿ हेरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['mediainuse'] = 'फाइल "%s" मेटिà¤à¤•à¥‹ छैन - पà¥à¤°à¤¯à¥‹à¤—मा छ।';
+$lang['namespaces'] = 'नेमसà¥à¤ªà¥‡à¤¸à¤¹à¤°à¥ ';
+$lang['mediafiles'] = ' उपलबà¥à¤§ फाइलहरॠ';
+$lang['js']['keepopen'] = 'छनौटमा विनà¥à¤¡à¥‹ खà¥à¤²à¤¾ राखà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['js']['hidedetails'] = 'जानकारी लà¥à¤•à¤¾à¤‰à¤¨à¥ होसॠ';
+$lang['js']['nosmblinks'] = 'विनà¥à¤¡à¥‹à¤¹à¤°à¥ लिङà¥à¤• गरà¥à¤¦à¤¾ माइकà¥à¤°à¥‹ सफà¥à¤Ÿ à¤à¤•à¥à¤¸à¤ªà¥à¤²à¥‹à¤°à¤°à¤®à¤¾à¤®à¤¾à¤¤à¥à¤° काम साà¤à¤¾ हà¥à¤¨à¥à¤› । तर कपि गरà¥à¤¨ र टासà¥à¤¨ मिलà¥à¤›à¥¤ ';
+$lang['js']['mu_btn'] = 'धेरै वटा फाइलहरॠà¤à¤•à¥ˆà¤ªà¤Ÿà¤• अपलोड गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['mediausage'] = 'फाइललाई रेफरेनà¥à¤¸ गरà¥à¤¨ निमà¥à¤¨ सà¥à¤¤à¥à¤° पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ :';
+$lang['mediaview'] = 'सकà¥à¤•à¤²à¥€ फाइल हेरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['mediaroot'] = 'रà¥à¤Ÿ(मूखà¥à¤¯ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾)';
+$lang['mediaupload'] = 'अहिलेको नेमसà¥à¤ªà¥‡à¤¸à¤®à¤¾ यहा अपलोड गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । सबनेमसà¥à¤ªà¥‡à¤¸à¤¹à¤°à¥ बनाउन "रà¥à¤ªà¤®à¤¾ आपलोड" छानी फाइलहरà¥à¤²à¤¾à¤ˆ कोलोन(:) ले छà¥à¤Ÿà¥à¤Ÿà¤¯à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['mediaextchange'] = 'फाइल à¤à¤•à¤¸à¥à¤Ÿà¥‡à¤¨à¥à¤¸à¤¨ .%s देखि .%s मा परिवरतित भयो ';
+$lang['reference'] = 'रेफररेनà¥à¤¸ ';
+$lang['ref_inuse'] = 'फाइल मेटà¥à¤¨ मिलेन , किनभने यो निमà¥à¤¨ पृषà¥à¤ à¤¹à¤°à¥à¤¦à¥à¤µà¤¾à¤°à¤¾ पà¥à¤°à¤¯à¥‹à¤—मा छ। ';
+$lang['ref_hidden'] = 'केहि रेफरेनà¥à¤¸ यसà¥à¤¤à¤¾ पृषà¥à¤ à¤¹à¤°à¥à¤®à¤¾ छनॠजà¥à¤¨ हेरà¥à¤¨ तपाईलाई अनà¥à¤®à¤¤à¤¿ छैन ।';
+$lang['hits'] = 'मिलेको';
+$lang['quickhits'] = 'मिलेका पृषà¥à¤ à¤¨à¤¾à¤®à¤¹à¤°à¥ ';
+$lang['toc'] = 'वसà¥à¤¤à¥à¤¹à¤°à¥à¤•à¥‹ सà¥à¤šà¥€';
+$lang['current'] = 'हालको';
+$lang['yours'] = 'तपाईको संसà¥à¤•à¤°à¤£';
+$lang['diff'] = 'हालको संसà¥à¤•à¤°à¤£ सà¤à¤—को भिनà¥à¤¨à¤¤à¤¾';
+$lang['diff2'] = 'रोजिà¤à¤•à¤¾ संसà¥à¤•à¤°à¤£ वीचका भिनà¥à¤¨à¤¤à¤¾à¤¹à¤°à¥ ';
+$lang['line'] = 'हरफ';
+$lang['breadcrumb'] = 'छà¥à¤Ÿà¥à¤Ÿà¥à¤¯à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['youarehere'] = 'तपाई यहा हà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›';
+$lang['lastmod'] = 'अनà¥à¤¤à¤¿à¤® पटक सचà¥à¤¯à¤¾à¤‡à¤à¤•à¥‹';
+$lang['by'] = 'दà¥à¤µà¤¾à¤°à¤¾ ';
+$lang['deleted'] = 'हटाइà¤à¤•à¥‹';
+$lang['created'] = 'निरà¥à¤®à¤¾à¤£ गरिà¤à¤•à¥‹';
+$lang['restored'] = 'पà¥à¤°à¤¾à¤¨à¥‹ संसà¥à¤•à¤°à¤£ पà¥à¤¨à¤°à¥â€Œà¤ªà¥à¤°à¤¯à¥‹à¤— गरिà¤à¤•à¥‹';
+$lang['external_edit'] = 'बाहà¥à¤¯ समà¥à¤ªà¤¾à¤¦à¤¨';
+$lang['summary'] = 'समà¥à¤ªà¤¾à¤¦à¤¨à¤•à¥‹ बारेमा';
+$lang['mail_newpage'] = 'थपिà¤à¤•à¥‹ पृषà¥à¤ ';
+$lang['mail_changed'] = 'परिवरà¥à¤¤à¤¿à¤¤ पृषà¥à¤ ';
+$lang['mail_new_user'] = 'नयाठपà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ ';
+$lang['mail_upload'] = 'अपलोड गरिà¤à¤•à¥‹ फाइल';
+$lang['qb_bold'] = 'मोटो पाठ(बोलà¥à¤¡)';
+$lang['qb_italic'] = 'इटालिक पाठ';
+$lang['qb_underl'] = 'निमà¥à¤¨ रेखांकित(अनà¥à¤¡à¤°à¤²à¤¾à¤‡à¤¨) पाठ';
+$lang['qb_code'] = 'चिनà¥à¤¹(कोड) पाठ';
+$lang['qb_strike'] = 'सà¥à¤Ÿà¥à¤°à¤¾à¤‡à¤•à¤¥à¥à¤°à¥ पाठ';
+$lang['qb_h1'] = 'पहिलो सà¥à¤¤à¤°à¤•à¥‹ शिरà¥à¤·à¤•(लेभल १ हेडलाइन)';
+$lang['qb_h2'] = 'दोसà¥à¤°à¥‹ सà¥à¤¤à¤°à¤•à¥‹ शिरà¥à¤·à¤•(लेभल २ हेडलाइन)';
+$lang['qb_h3'] = 'तेसà¥à¤°à¥‹ सà¥à¤¤à¤°à¤•à¥‹ शिरà¥à¤·à¤•(लेभल ३ हेडलाइन)';
+$lang['qb_h4'] = 'चौथो सà¥à¤¤à¤°à¤•à¥‹ शिरà¥à¤·à¤•(लेभल ४ हेडलाइन)';
+$lang['qb_h5'] = 'पाचौठसà¥à¤¤à¤°à¤•à¥‹ शिरà¥à¤·à¤•(लेभल ५ हेडलाइन)';
+$lang['qb_link'] = 'आनà¥à¤¤à¤°à¤¿à¤• लिङà¥à¤• ';
+$lang['qb_extlink'] = 'वाहà¥à¤¯ लिङà¥à¤•';
+$lang['qb_hr'] = 'कà¥à¤·à¤¿à¤¤à¤¿à¤œ (होरिजोनà¥à¤Ÿà¤²) रà¥à¤²';
+$lang['qb_ol'] = 'मिलाइà¤à¤•à¥‹ सà¥à¤šà¥€';
+$lang['qb_ul'] = 'नमिलाइà¤à¤•à¥‹ सà¥à¤šà¥€';
+$lang['qb_media'] = 'तसà¥à¤µà¤¿à¤° र अरॠफाइलहरॠथपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['qb_sig'] = 'हसà¥à¤¤à¤¾à¤•à¥à¤·à¤° थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['qb_smileys'] = 'सà¥à¤®à¤¾à¤‡à¤²à¥€à¤¹à¤°à¥ ';
+$lang['qb_chars'] = 'विशेष वरà¥à¤£à¤¹à¤°à¥ ';
+$lang['js']['del_confirm'] = 'साचà¥à¤šà¥ˆ छानिà¤à¤•à¤¾ वसà¥à¤¤à¥à¤¹à¤°à¥ मेटà¥à¤¨à¥‡ हो ?';
+$lang['admin_register'] = 'नयाठपà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['metaedit'] = 'मेटाडेटा समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['metasaveerr'] = 'मेटाडाटा लेखन असफल';
+$lang['metasaveok'] = 'मेटाडाटा वचत भयो ';
+$lang['img_backto'] = 'फिरà¥à¤¤à¤¾';
+$lang['img_title'] = 'शिरà¥à¤·à¤•';
+$lang['img_caption'] = 'निमà¥à¤¨ लेख';
+$lang['img_date'] = 'मिति';
+$lang['img_fname'] = 'फाइलनाम';
+$lang['img_fsize'] = 'आकार';
+$lang['img_artist'] = 'चितà¥à¤°à¤•à¤¾à¤°';
+$lang['img_copyr'] = 'सरà¥à¤µà¤¾à¤§à¤¿à¤•à¤¾à¤°';
+$lang['img_format'] = 'ढाचा';
+$lang['img_camera'] = 'कà¥à¤¯à¤¾à¤®à¥‡à¤°à¤¾';
+$lang['img_keywords'] = 'खोज शबà¥à¤¦';
+$lang['subscribe_success'] = '%s ,%s को गà¥à¤°à¤¾à¤¹à¥à¤¯à¤¤à¤¾à¤•à¥‹ लागि थपियो ';
+$lang['subscribe_error'] = '%s ,%s को गà¥à¤°à¤¾à¤¹à¥à¤¯à¤¤à¤¾à¤•à¥‹ लागि थपिदा तà¥à¤°à¥à¤Ÿà¤¿';
+$lang['subscribe_noaddress'] = 'तपाईको खातासà¤à¤— कà¥à¤¨à¥ˆ पनि ठेगाना संबनà¥à¤§à¤¿à¤¤ छैन , तपाईलाई गà¥à¤°à¤¹à¤¾à¤• सà¥à¤šà¥€à¤®à¤¾ राखन मिलेन।';
+$lang['unsubscribe_success'] = '%s लाई %s को गà¥à¤°à¤¹à¤¾à¤• सà¥à¤šà¥€à¤¬à¤¾à¤Ÿ हटाइयो';
+$lang['unsubscribe_error'] = '%s लाई %s को गà¥à¤°à¤¾à¤¹à¤• सà¥à¤šà¥€à¤¬à¤¾à¤Ÿ हटाउदा तà¥à¤°à¥à¤Ÿà¤¿';
+$lang['authmodfailed'] = 'खराब पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ पà¥à¤°à¤¾à¤®à¤¾à¤£à¤¿à¤•à¤°à¤£ विधि ।तपाईको विकी à¤à¤¡à¥à¤®à¤¿à¤¨à¤²à¤¾à¤ˆ खवर गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['authtempfail'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ पà¥à¤°à¤¾à¤®à¤¾à¤£à¤¿à¤•à¤°à¤£ असà¥à¤¥à¤¾à¤‡à¤°à¥à¤ªà¤®à¤¾ अनà¥à¤ªà¤²à¤¬à¥à¤§ छ। यदि यो समसà¥à¤¯à¤¾ रहि रहेमा तपाईको विकि à¤à¤¡à¥à¤®à¤¿à¤¨à¤²à¤¾à¤ˆ खवर गरà¥à¤¨à¥à¤¹à¥‹à¤²à¤¾ ।';
+$lang['i_chooselang'] = 'भाषा छानà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['i_installer'] = 'DokuWiki सà¥à¤¥à¤¾à¤ªà¤•';
+$lang['i_wikiname'] = 'विकी नाम';
+$lang['i_enableacl'] = 'ACL लागॠगरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥( सिफारिस गरिà¤à¤•à¥‹)';
+$lang['i_superuser'] = 'मूखà¥à¤¯ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾';
+$lang['i_problems'] = 'सà¥à¤¥à¤¾à¤ªà¤•à¤²à¥‡ तल देखाइà¤à¤•à¥‹ तà¥à¤°à¥à¤Ÿà¤¿ फेला पारà¥â€Œà¤¯à¥‹ ।तपाईले यो तà¥à¤°à¥à¤Ÿà¤¿ नसचà¥à¤¯à¤¾à¤ समà¥à¤® अगि बढà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥‡ छैन।';
+$lang['i_modified'] = 'सà¥à¤°à¤•à¥à¤·à¤¾à¤•à¥‹ कारणले यो सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ नया तथा नसचà¥à¤¯à¤¾à¤‡à¤à¤•à¥‹ Dokuwiki सà¥à¤¥à¤¾à¤ªà¤¨à¤¾à¤®à¤¾ मातà¥à¤° काम गरà¥à¤›à¥¤ तपाईले कि डाउनलोड गरà¥à¤¨à¥à¤­à¤à¤•à¥‹ पà¥à¤¯à¤¾à¤•à¥‡à¤œ पà¥à¤¨: खोलà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ कि <a href="http://dokuwiki.org/install">Dokuwiki सà¥à¤¥à¤¾à¤ªà¤¨à¤¾ विधि</a>';
+$lang['i_funcna'] = 'PHP function <code>%s</code> उपलवà¥à¤§ छैन । हà¥à¤¨à¤¸à¤•à¥à¤› तपाईको होसà¥à¤Ÿà¤¿à¤™à¥à¤— पà¥à¤°à¤¦à¤¾à¤¯à¤•à¤²à¥‡ कà¥à¤¨à¥ˆ कारण वश यसलाई वनà¥à¤¦ गरिदिà¤à¤•à¤¾ हà¥à¤¨à¤¸à¤•à¥à¤›à¤¨à¥ । ';
+$lang['i_phpver'] = 'तपाईको PHP संसà¥à¤•à¤°à¤£ <code>%s</code> चाहिà¤à¤•à¥‹ <code>%s</code> भनà¥à¤¦à¤¾ कम छ। तपाईले आफà¥à¤¨à¥‹ PHP सà¥à¤¥à¤¾à¤ªà¤¨à¤¾ अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• गरà¥à¤¨à¥à¤ªà¤°à¥à¤› ।';
+$lang['i_permfail'] = '<code>%s</code> DokuWiki दà¥à¤µà¤¾à¤°à¤¾ लेखà¥à¤¯ छैन । तपाईले डाइरेकà¥à¤Ÿà¤°à¥€à¤•à¥‹ अनà¥à¤®à¤¤à¤¿ परिवरà¥à¤¤à¤¨ गरà¥à¤¨à¥à¤ªà¤°à¥à¤› !';
+$lang['i_confexists'] = '<code>%s</code> पहिले देखि नै रहेको छ।';
+$lang['i_writeerr'] = '<code>%s</code> बनाउन असमरà¥à¤¥ । तपाईले डाइरेकà¥à¤Ÿà¤°à¥€ / फाइल अनà¥à¤®à¤¤à¤¿ जाचà¥à¤¨à¥ परà¥à¤› र फाइल आफैले बनाउनॠपरà¥à¤› ।';
+$lang['i_badhash'] = 'पहिचान हà¥à¤¨ नसकेको वा परिवरà¥à¤¤à¤¿à¤¤ okuwiki.php (hash=code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - अवैध वा रितà¥à¤¤à¥‹ मान ';
+$lang['i_success'] = 'सà¥à¤¥à¤¾à¤ªà¤¨à¤¾ सफलरà¥à¤ªà¤®à¤¾ समापà¥à¤¤ भयो ।तपाई install.php मेटà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¥à¤¨à¥à¤› । <a href="doku.php">तपाईको नयाठDokuWiki</a> निरनà¥à¤¤à¤° गरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ।';
+$lang['i_failure'] = 'सà¥à¤¥à¤¾à¤ªà¤¨à¤¾ समयमा केहि तà¥à¤°à¥à¤Ÿà¤¿ फेला परà¥à¤¯à¥‹ ।तपाईले आफैले यसलाई <a href="doku.php">तपाईको नयाठDokuWiki</a> पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥ अगि सचà¥à¤¯à¤¾à¤‰à¤¨à¥à¤ªà¤°à¥à¤¨à¥‡ हà¥à¤¨à¥à¤› ।';
+$lang['i_policy'] = 'सà¥à¤°à¥à¤•à¥‹ ACL निति';
+$lang['i_pol0'] = 'खà¥à¤²à¥à¤²à¤¾ विकि (पठन, लेखन , अपलोड ) सबैका लागि';
+$lang['i_pol1'] = 'Public विकि (पठन सवैका लागि,लेखन र अपलोड दरà¥à¤¤à¤¾ गरिà¤à¤•à¤¾ पà¥à¤°à¤¯à¤ªà¤—करà¥à¤¤à¤¾à¤•à¤¾ लागि ) ';
+$lang['i_pol2'] = 'बनà¥à¤¦ विकि (पठन , लेखन, अपलोड ) दरà¥à¤¤à¤¾ भà¤à¤•à¤¾ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•à¤¾ लागि मातà¥à¤° ।';
+$lang['i_retry'] = 'पà¥à¤¨: पà¥à¤°à¤¯à¤¾à¤¸ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['mu_intro'] = 'तपाईले धेरै वटा फाइलहरॠà¤à¤•à¥ˆ पटक अपलोड गरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› । browse थिचà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ अनि सà¥à¤šà¥€à¤®à¤¾ थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । सकिà¤à¤ªà¤›à¤¿ अपलोड थिछà¥à¤šà¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['mu_gridname'] = 'फाइलनाम ';
+$lang['mu_gridsize'] = 'आकार';
+$lang['mu_gridstat'] = 'सà¥à¤¥à¤¿à¤¤à¤¿';
+$lang['mu_namespace'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['mu_browse'] = 'Browse';
+$lang['mu_toobig'] = 'धेरै ठूलो';
+$lang['mu_ready'] = 'अपलोडको लागि तयार';
+$lang['mu_done'] = 'पूरा';
+$lang['mu_fail'] = 'असफल';
+$lang['mu_authfail'] = 'सतà¥à¤° सकियो ';
+$lang['mu_progress'] = '@PCT@% अपलोड भयो ';
+$lang['mu_filetypes'] = 'समरà¥à¤¥à¤¿à¤¤ फाइल पà¥à¤°à¤•à¤¾à¤°';
+$lang['recent_global'] = 'तपाई अहिले <b>%s</b> नेमसà¥à¤ªà¥‡à¤¸ भितà¥à¤° भà¤à¤•à¤¾ परिवरà¥à¤¤à¤¨ हेरà¥à¤¦à¥ˆà¤¹à¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›à¥¤ तपाई <a href="%s">पà¥à¤°à¥ˆ विकिमा भà¤à¤•à¥‹ परिवरà¥à¤¤à¤¨ हेरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt
new file mode 100644
index 000000000..85f5390a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt
@@ -0,0 +1,3 @@
+====== पृषà¥à¤ à¤®à¤¾ ताला लगाà¤à¤•à¥‹ छ ======
+
+यो पृषà¥à¤  अरà¥à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤¦à¥à¤µà¤¾à¤°à¤¾ समà¥à¤ªà¤¾à¤¦à¤¨à¤•à¤¾ लागि ताला लगाइà¤à¤•à¥‹ छ । तपाईले समà¥à¤ªà¤¾à¤¦à¤¨ समापà¥à¤¤ नहà¥à¤¨à¥à¤œà¥‡à¤² या तालाको समय समापà¥à¤¤ नहà¥à¤¨à¥à¤œà¥‡à¤² समà¥à¤® पà¥à¤°à¤¤à¤¿à¤•à¥à¤·à¤¾à¤—रà¥à¤¨à¥ परà¥à¤› । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt
new file mode 100644
index 000000000..28c4efb66
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt
@@ -0,0 +1,2 @@
+====== कà¥à¤¨à¥ˆ तà¥à¤¯à¤¸à¥à¤¤à¥‹ पà¥à¤¨:संसà¥à¤•à¤°à¤£ भेटिà¤à¤¨ ======
+खà¥à¤²à¤¾à¤‡à¤à¤•à¥‹ पà¥à¤¨:संसà¥à¤•à¤°à¤£ असà¥à¤¤à¤¿à¤¤à¥à¤µà¤®à¤¾ छैन ।यस कागजातको समà¥à¤ªà¥‚रà¥à¤£ संसà¥à¤•à¤°à¤£à¤•à¥‹ सà¥à¤šà¥€à¤•à¥‹ लागि "पà¥à¤°à¤¾à¤¨à¥‹ पà¥à¤¨:संसà¥à¤•à¤°à¤£" बटन पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt
new file mode 100644
index 000000000..1d8cd9fd6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt
@@ -0,0 +1,12 @@
+नमसà¥à¤•à¤¾à¤° @FULLNAME@!
+
+कसैदà¥à¤µà¤¾à¤°à¤¾ तपाईको @TITLE@ को लागि नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦ माग भà¤à¤•à¥‹ छ ।@DOKUWIKIURL@मा पà¥à¤°à¤µà¥‡à¤¶ ।
+
+यदि तपाईले नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦à¤•à¥‹ माग गरà¥à¤¨à¥à¤­à¤à¤•à¥‹ हैन भने यस इमेललाई वेवासà¥à¤¤à¤¾ गरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ।
+
+कृपया तपाईको माग साचà¥à¤šà¥ˆ पठाइà¤à¤•à¥‹ थियो भनà¥à¤¨à¥‡ यकिन गराउनाको लागि तलाको लिङà¥à¤•à¤®à¤¾ पà¥à¤°à¤¯à¥‹à¤— गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ।
+
+@CONFIRM@
+
+--
+यो पतà¥à¤° DokuWiki ले @DOKUWIKIURL@ मा तयार पारेको हो ।
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt
new file mode 100644
index 000000000..e004cd39b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt
@@ -0,0 +1 @@
+यो पृषà¥à¤  पढà¥à¤¨à¤•à¥‹ लागि मातà¥à¤° हो । तपाई सà¥à¤°à¥‹à¤¤à¤¹à¥‡à¤°à¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ,तर समà¥à¤ªà¤¾à¤¦à¤¨ भने गरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤¨ । तपाईको वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•(administrator) सà¤à¤— के समसà¥à¤¯à¤¾ छ भनेर सोधà¥à¤¨à¥ होला । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt
new file mode 100644
index 000000000..239903fd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt
@@ -0,0 +1,2 @@
+====== हालैको परिवरà¥à¤¤à¤¨ ======
+निमà¥à¤¨ पृषà¥à¤ à¤¹à¤°à¥ हालै परिवरà¥à¤¤à¤¨ गरिà¤à¤•à¤¾ छनॠ। \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt
new file mode 100644
index 000000000..aec9dfb95
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt
@@ -0,0 +1,3 @@
+====== नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦ पठाउनà¥à¤¹à¥‹à¤¸à¥ ======
+
+कृपया तपाईको यस विकीमा रहेको खाताको लाहि नयाठपà¥à¤°à¤µà¥‡à¤¶à¤¶à¤µà¥à¤¦ अनà¥à¤°à¥‹à¤§ गरà¥à¤¨ तपाईà¤à¤•à¥‹ नाम निमà¥à¤¨ फरà¥à¤®à¤®à¤¾ पà¥à¤°à¤µà¤¿à¤·à¥à¤Ÿ गरà¥à¤¨à¥à¤¹à¥‹à¤¸ । à¤à¤‰à¤Ÿà¤¾ किटानी लिङà¥à¤• तपाईले दरà¥à¤¤à¤¾ गरà¥à¤¨à¥ भà¤à¤•à¥‹ इमेल ठेगानामा पठाइने छ । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt
new file mode 100644
index 000000000..a8139f0ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt
@@ -0,0 +1,3 @@
+====== खोज ======
+तपाईले आफà¥à¤¨à¥‹ खोजको निमà¥à¤¨ नतिजा पाउन सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤›à¥¤ यदि तपाईले आफà¥à¤²à¥‡ खोजेको पाउनà¥à¤­à¤à¤¨ भने, तपाईलेको उपयà¥à¤•à¥à¤¤ बटन पà¥à¤°à¤¯à¥‹à¤— गरी खोज सà¤à¤— समà¥à¤¬à¤¨à¥à¤§à¤¿à¤¤ शिरà¥à¤·à¤•à¤¹à¤°à¥ भà¤à¤•à¤¾ पृषà¥à¤  सृजना या समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨ सकà¥à¤¨à¥à¤¹à¥à¤¨à¥à¤› ।
+===== नतिजा ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt
new file mode 100644
index 000000000..5b22e9737
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt
@@ -0,0 +1,2 @@
+** यो कागजातको पà¥à¤°à¤¾à¤¨à¥‹ पà¥à¤¨:संसà¥à¤•à¤°à¤£ हो !**
+--- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt
new file mode 100644
index 000000000..413c79c67
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt
@@ -0,0 +1,19 @@
+नमसà¥à¤•à¤¾à¤° !
+@TITLE@ शिरà¥à¤·à¤• रहेको यो पृषà¥à¤  @PAGE@ परिवरà¥à¤¤à¤¨ भà¤à¤•à¥‹ छ ।
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+मिति : @DATE@
+पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ : @USER@
+समà¥à¤ªà¤¾à¤¦à¤¨ सारांस: @SUMMARY@
+पà¥à¤°à¤¾à¤¨à¥‹ संसà¥à¤•à¤°à¤£ : @OLDPAGE@
+नविन संसà¥à¤•à¤°à¤£: @NEWPAGE@
+
+यसà¥à¤¤à¤¾ जानकारीहरॠरदà¥à¤¦ गरà¥à¤¨à¤•à¥‹ लागि
+@DOKUWIKIURL@ मा पà¥à¤°à¤µà¥‡à¤¶ गरी
+@NEWPAGE@ अवलोकन पशà¥à¤šà¤¾à¤¤
+पृषà¥à¤  या नेमसà¥à¤ªà¥‡à¤¸ परिवरà¥à¤¤à¤¨ जानकारी गà¥à¤°à¤¾à¤¹à¥à¤¯à¤¤à¤¾ बदर गरà¥à¤¨à¥à¤¹à¥‹
+
+--
+यो पतà¥à¤° DokuWiki ले
+@DOKUWIKIURL@ मा सà¥à¤µà¤¤: बनाà¤à¤•à¥‹ हो । \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt
new file mode 100644
index 000000000..e3027e429
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt
@@ -0,0 +1,3 @@
+‌‌â€â€â€======तपाईà¤à¤•à¥‹ खाताको जानकारी अदà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥======
+
+तपाईà¤à¤²à¥‡ आफूले परिवरà¥à¤¤à¤¨ गरà¥à¤¨ चाहेको फिलà¥à¤¡ मातà¥à¤° परिवरà¥à¤¤à¤¨ गरे पà¥à¤—à¥à¤› । तपाईà¤à¤²à¥‡ आफà¥à¤¨à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ नाम परिवरà¥à¤¤à¤¨ गरà¥à¤¨ पाउनà¥à¤¹à¥à¤¨à¥‡ छैन ।
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt
new file mode 100644
index 000000000..74ea46407
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt
@@ -0,0 +1,13 @@
+à¤à¤‰à¤Ÿà¤¾ फाइल तपाईको DokuWiki मा भरण गरिà¤à¤•à¥‹ छ। थप जानकारी निमà¥à¤¨ रहेका छनॠ:
+फाइल : @MEDIA@
+मिति : @DATE@
+बà¥à¤°à¤¾à¤‰à¤œà¤° : @BROWSER@
+आइपि ठगाना : @IPADDRESS@
+होसà¥à¤Ÿà¤¨à¤¾à¤® : @HOSTNAME@
+आकार : @SIZE@
+MIME पà¥à¤°à¤•à¤¾à¤° : @MIME@
+पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ : @USER@
+
+--
+यो पतà¥à¤° DokuWiki ले
+@DOKUWIKIURL@मा सà¥à¤µà¤¤: तयार पारेको हो। \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt
new file mode 100644
index 000000000..7138456f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt
@@ -0,0 +1,3 @@
+====== Beheer ======
+
+Hieronder zie je een lijst van beheertaken beschikbaar in DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt
new file mode 100644
index 000000000..916a9ca9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt
@@ -0,0 +1 @@
+===== Additionele plugins ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt
new file mode 100644
index 000000000..6edbf4021
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt
@@ -0,0 +1,4 @@
+====== Backlinks ======
+
+Dit is een lijst van pagina's die terug lijken te wijzen naar de huidige pagina.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt
new file mode 100644
index 000000000..926214517
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt
@@ -0,0 +1,5 @@
+====== Er bestaat een nieuwere versie ======
+
+Er bestaat een nieuwere versie van het document dat aangepast wordt. Dit komt voor als een andere gebruiker dit document tegelijk met jou wijzigt.
+
+Bekijk de verschillen die beneden weergegeven worden uitvoerig, beslis dan welke versie de beste is en dus bewaard moet worden. Klik op ''opslaan'' om de eigen versie te bewaren. Klik op ''annuleren'' om de huidige versie te bewaren.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt
new file mode 100644
index 000000000..6a8bf773f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt
@@ -0,0 +1,3 @@
+====== Toegang geweigerd ======
+
+Sorry: je hebt niet voldoende rechten om verder te gaan. Misschien ben je vergeten in te loggen?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt
new file mode 100644
index 000000000..ef5a1b189
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt
@@ -0,0 +1,3 @@
+====== Verschillen ======
+
+Dit geeft de verschillen weer tussen de geselecteerde revisie en de huidige revisie van de pagina.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt
new file mode 100644
index 000000000..a6bf5275d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt
@@ -0,0 +1,5 @@
+===== Conceptbestand gevonden =====
+
+Je laatste bewerking op deze pagina is niet volledig afgerond. DokuWiki heeft automatisch een concept van je werk opgeslagen waarmee je nu verder kunt gaan. Hieronder tref je het concept aan.
+
+Beslis of je het concept wilt //herstellen//, //verwijderen// of het bewerken wilt //annuleren//.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt
new file mode 100644
index 000000000..e539050bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt
@@ -0,0 +1 @@
+Pas de pagina aan en klik op ''Opslaan''. Zie [[wiki:syntax]] voor de Wiki syntax. Pas de pagina allen aan als hij **verbeterd** kan worden. Als je iets wilt uitproberen kun je spelen in de [[playground:playground|zandbak]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt
new file mode 100644
index 000000000..1b2d130c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt
@@ -0,0 +1,2 @@
+**Er is een oude revisie van het document geladen!** Als je nu opslaat bewaar je een nieuwe versie met deze inhoud.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt
new file mode 100644
index 000000000..288957ed4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+Dit is een index van alle beschikbare pagina's gesorteerd op [[doku>wiki:namespaces|namespaces]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html
new file mode 100644
index 000000000..8ddec7aab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html
@@ -0,0 +1,14 @@
+<p>Deze pagina helpt u bij de eerste installatie en configuratie van <a href="http://wiki.splitbrain.org">Dokuwiki</a>.
+Meer informatie over deze installer is beschikbaar op zijn eigen <a href="http://wiki.splitbrain.org/wiki:installer">documentatiepagina</a>.</p>
+
+<p>DokuWiki gebruikt platte tekstbestanden voor het opslaan van wikipagina's en andere informatie die bij deze pagina's horen (bijvoorbeeld plaatjes, zoek-indexen, oude revisies enz.). Om goed te kunnen functioneren, <strong>moet</strong>
+DokuWiki schrijftoegang hebben tot de directories die deze bestanden bevatten.
+De installer kan zelf deze toegangspermissies niet regelen. Dit moet normaal gesproken direct in de command shell worden ingevoerd, of in het geval van hosting via FTP of via uw hosting control panel (bijvoorbeeld cPanel).</p>
+
+<p>Deze installer zal uw DokuWiki configureren voor <acronym title="access control list">ACL</acronym>,
+wat de beheerder in staat stelt in te loggen en toegang te verkrijgen tot het beheersdeel van de DokuWiki voor het installeren van plugins, beheren van gebruikers, toegangsrechten tot wiki pagina's en veranderen van configuratie-instellingen.
+Het is niet noodzakelijk voor DokuWiki om te functioneren maar het maakt het een stuk makkelijker om Dokuwiki te beheren.</p>
+
+<p>Ervaren gebruikers of gebruikers die een aangepaste configuratie nodig hebben kunnen voor details terecht op de volgende pagina's:
+<a href="http://wiki.splitbrain.org/wiki:install">installatie-instructies</a>
+en <a href="http://wiki.splitbrain.org/wiki:config">configuratie-instellingen</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php
new file mode 100644
index 000000000..782a76758
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php
@@ -0,0 +1,253 @@
+<?php
+/**
+ * dutch language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author François Kooman <fkooman.tuxed.net>
+ * @author Jack van Klaren <dokuwiki@afentoe.xs4all.nl>
+ * @author Riny Heijdendael <riny@heijdendael.nl>
+ * @author Koen Huybrechts <huybkoen@gmail.com>
+ * @author Wouter Schoot <wouter@schoot.org>
+ * @author John de Graaff <john@de-graaff.net>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
+ * @author Marijn Hofstra hofstra.m@gmail.com
+ * @author Matthias Carchon webmaster@c-mattic.be
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Pagina aanpassen';
+$lang['btn_source'] = 'Toon broncode';
+$lang['btn_show'] = 'Toon pagina';
+$lang['btn_create'] = 'Maak deze pagina aan';
+$lang['btn_search'] = 'Zoeken';
+$lang['btn_save'] = 'Opslaan';
+$lang['btn_preview'] = 'Voorbeeld';
+$lang['btn_top'] = 'Terug naar boven';
+$lang['btn_newer'] = '<< recenter';
+$lang['btn_older'] = 'ouder >>';
+$lang['btn_revs'] = 'Oude revisies';
+$lang['btn_recent'] = 'Recente aanpassingen';
+$lang['btn_upload'] = 'Upload';
+$lang['btn_cancel'] = 'Annuleren';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Aanpassen';
+$lang['btn_login'] = 'Inloggen';
+$lang['btn_logout'] = 'Uitloggen';
+$lang['btn_admin'] = 'Beheer';
+$lang['btn_update'] = 'Bijwerken';
+$lang['btn_delete'] = 'Verwijder';
+$lang['btn_back'] = 'Terug';
+$lang['btn_backlink'] = 'Referenties';
+$lang['btn_backtomedia'] = 'Terug naar Bestandsselectie';
+$lang['btn_subscribe'] = 'Inschrijven wijzigingen';
+$lang['btn_unsubscribe'] = 'Opzeggen wijzigingen';
+$lang['btn_subscribens'] = 'Inschrijven namespace-wijzigingen';
+$lang['btn_unsubscribens'] = 'Opzeggen namespace-wijzigingen';
+$lang['btn_profile'] = 'Profiel aanpassen';
+$lang['btn_reset'] = 'Wissen';
+$lang['btn_resendpwd'] = 'Stuur een nieuw wachtwoord';
+$lang['btn_draft'] = 'Bewerk concept';
+$lang['btn_recover'] = 'Herstel concept';
+$lang['btn_draftdel'] = 'Verwijder concept';
+$lang['btn_revert'] = 'Herstellen';
+$lang['loggedinas'] = 'Ingelogd als';
+$lang['user'] = 'Gebruikersnaam';
+$lang['pass'] = 'Wachtwoord';
+$lang['newpass'] = 'Nieuw wachtwoord';
+$lang['oldpass'] = 'Bevestig huidig wachtwoord';
+$lang['passchk'] = 'nogmaals';
+$lang['remember'] = 'Bewaar';
+$lang['fullname'] = 'Volledige naam';
+$lang['email'] = 'E-mail';
+$lang['register'] = 'Registreren';
+$lang['profile'] = 'Gebruikersprofiel';
+$lang['badlogin'] = 'Sorry, gebruikersnaam of wachtwoord onjuist';
+$lang['minoredit'] = 'Kleine wijziging';
+$lang['draftdate'] = 'Concept automatisch opgeslagen op';
+$lang['nosecedit'] = 'De pagina is tussentijds veranderd, sectie-informatie was verouderd, volledige pagina geladen.';
+$lang['regmissing'] = 'Vul alle velden in';
+$lang['reguexists'] = 'Er bestaat al een gebruiker met deze loginnaam.';
+$lang['regsuccess'] = 'De gebruiker is aangemaakt. Het wachtwoord is per e-mail verzonden.';
+$lang['regsuccess2'] = 'De gebruiker is aangemaakt.';
+$lang['regmailfail'] = 'Het lijkt erop dat het sturen van de wachtwoordmail mislukt is. Neem contact op met de beheerder!';
+$lang['regbadmail'] = 'Het opgegeven e-mailadres lijkt ongeldig - als je denkt dat dit niet klopt neem dan contact op met de beheerder.';
+$lang['regbadpass'] = 'De twee ingevoerde wachtwoorden zijn niet identiek. Probeer het nog eens.';
+$lang['regpwmail'] = 'Je DokuWiki wachtwoord';
+$lang['reghere'] = 'Je hebt nog geen account? Vraag er eentje aan';
+$lang['profna'] = 'Deze wiki ondersteunt geen profielwijzigingen';
+$lang['profnochange'] = 'Geen wijzigingen, niets gedaan';
+$lang['profnoempty'] = 'Een lege gebruikersnaam of e-mailadres is niet toegestaan';
+$lang['profchanged'] = 'Gebruikersprofiel succesvol aangepast';
+$lang['pwdforget'] = 'Je wachtwoord vergeten? Vraag een nieuw wachtwoord aan';
+$lang['resendna'] = 'Deze wiki ondersteunt het verzenden van wachtwoorden niet';
+$lang['resendpwd'] = 'Stuur een nieuw wachtwoord voor';
+$lang['resendpwdmissing'] = 'Sorry, je moet alle velden invullen.';
+$lang['resendpwdnouser'] = 'Sorry, we kunnen deze gebruikersnaam niet vinden in onze database.';
+$lang['resendpwdbadauth'] = 'Sorry, deze authentiecatiecode is niet geldig. Controleer of je de volledige bevestigings-link hebt gebruikt.';
+$lang['resendpwdconfirm'] = 'Een bevestigingslink is per e-mail verzonden.';
+$lang['resendpwdsuccess'] = 'Je nieuwe wachtwoord is per e-mail verzonden.';
+$lang['license'] = 'Tenzij anders vermeld valt de inhoud van deze wiki onder de volgende licentie:';
+$lang['licenseok'] = 'Let op: Door deze pagina aan te passen geef je de inhoud vrij onder de volgende licentie:';
+$lang['searchmedia'] = 'Bestandsnaam zoeken:';
+$lang['searchmedia_in'] = 'Zoek in %s';
+$lang['txt_upload'] = 'Selecteer een bestand om te uploaden';
+$lang['txt_filename'] = 'Vul nieuwe naam in (optioneel)';
+$lang['txt_overwrt'] = 'Overschrijf bestaand bestand';
+$lang['lockedby'] = 'Momenteel in gebruik door';
+$lang['lockexpire'] = 'Exclusief gebruiksrecht vervalt op';
+$lang['willexpire'] = 'Je exclusieve gebruiksrecht voor het aanpassen van deze pagina verloopt over een minuut.\nKlik op de Voorbeeld-knop om het exclusieve gebruiksrecht te verlengen.';
+$lang['notsavedyet'] = 'Nog niet bewaarde wijzigingen zullen verloren gaan.\nWeet je zeker dat je wilt doorgaan?';
+$lang['rssfailed'] = 'Er is een fout opgetreden bij het ophalen van de feed: ';
+$lang['nothingfound'] = 'Er werd niets gevonden.';
+$lang['mediaselect'] = 'Bestandsselectie';
+$lang['fileupload'] = 'Bestandsupload';
+$lang['uploadsucc'] = 'Upload geslaagd';
+$lang['uploadfail'] = 'Upload mislukt. Misschien verkeerde permissies?';
+$lang['uploadwrong'] = 'Upload mislukt. Deze bestandsextensie is verboden!';
+$lang['uploadexist'] = 'Bestand bestaat reeds. Er is niets gewijzigd.';
+$lang['uploadbadcontent'] = 'Het geüploade bestand heeft niet de bestandsextensie %s.';
+$lang['uploadspam'] = 'De upload is geblokkeerd door de spam blacklist.';
+$lang['uploadxss'] = 'De upload is geblokkeerd wegens mogelijk onveilige inhoud.';
+$lang['uploadsize'] = 'Het geüploade bestand is te groot. (max. %s)';
+$lang['deletesucc'] = 'Het bestand "%s" is verwijderd.';
+$lang['deletefail'] = '"%s" kan niet worden verwijderd - controleer permissies.';
+$lang['mediainuse'] = 'Het bestand "%s" is niet verwijderd - het is nog in gebruik.';
+$lang['namespaces'] = 'Namespaces';
+$lang['mediafiles'] = 'Beschikbare bestanden in';
+$lang['js']['searchmedia'] = 'Zoek naar bestanden';
+$lang['js']['keepopen'] = 'Houd scherm open bij selectie';
+$lang['js']['hidedetails'] = 'Verberg details';
+$lang['js']['nosmblinks'] = 'Linken naar Windows shares werkt alleen in Microsoft Internet Explorer.
+Je kan de link wel kopiëren en plakken.';
+$lang['js']['linkwiz'] = 'Linkwizard';
+$lang['js']['linkto'] = 'Link naar:';
+$lang['js']['del_confirm'] = 'Item(s) verwijderen?';
+$lang['js']['mu_btn'] = 'Meerdere files tegelijk uploaden';
+$lang['mediausage'] = 'Gebruik de volgende syntax om aan het bestand te refereren:';
+$lang['mediaview'] = 'Bekijk het orginele bestand';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Upload een bestand naar de huidige namespace. Om een subnamespace aan te maken, laat je die voorafgaan aan de bestandsnaam bij "Upload als", gescheiden door een dubbele punt.';
+$lang['mediaextchange'] = 'Bestandsextensie veranderd van .%s naar .%s!';
+$lang['reference'] = 'Referenties voor';
+$lang['ref_inuse'] = 'Het bestand kan niet worden verwijderd omdat het nog in gebruik is op de volgende pagina\'s:';
+$lang['ref_hidden'] = 'Enkele referenties staan op pagina\'s waarvoor je geen leesrechten hebt';
+$lang['hits'] = 'Hits';
+$lang['quickhits'] = 'Overeenkomende paginanamen';
+$lang['toc'] = 'Inhoud';
+$lang['current'] = 'huidige';
+$lang['yours'] = 'Jouw versie';
+$lang['diff'] = 'Toon verschillen met huidige revisie';
+$lang['diff2'] = 'Toon verschillen tussen geselecteerde revisies';
+$lang['line'] = 'Regel';
+$lang['breadcrumb'] = 'Spoor';
+$lang['youarehere'] = 'Je bent hier';
+$lang['lastmod'] = 'Laatst gewijzigd';
+$lang['by'] = 'door';
+$lang['deleted'] = 'verwijderd';
+$lang['created'] = 'aangemaakt';
+$lang['restored'] = 'oude revisie hersteld';
+$lang['external_edit'] = 'Externe bewerking';
+$lang['summary'] = 'Samenvatting wijziging';
+$lang['noflash'] = 'De <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> is vereist om de pagina te kunnen weergeven.';
+$lang['download'] = 'Download fragment';
+$lang['mail_newpage'] = 'pagina toegevoegd:';
+$lang['mail_changed'] = 'pagina aangepast:';
+$lang['mail_new_user'] = 'nieuwe gebruiker:';
+$lang['mail_upload'] = 'bestand geüpload:';
+$lang['qb_bold'] = 'Vette tekst';
+$lang['qb_italic'] = 'Cursieve tekst';
+$lang['qb_underl'] = 'Onderstreepte tekst';
+$lang['qb_code'] = 'Code tekst';
+$lang['qb_strike'] = 'Doorgestreepte tekst';
+$lang['qb_h1'] = 'Niveau 1 kop';
+$lang['qb_h2'] = 'Niveau 2 kop';
+$lang['qb_h3'] = 'Niveau 3 kop';
+$lang['qb_h4'] = 'Niveau 4 kop';
+$lang['qb_h5'] = 'Niveau 5 kop';
+$lang['qb_h'] = 'Koptekst';
+$lang['qb_hs'] = 'Kies koptekst';
+$lang['qb_hplus'] = 'Hogere koptekst';
+$lang['qb_hminus'] = 'Lagere koptekst';
+$lang['qb_hequal'] = 'Koptekst op zelfde niveau';
+$lang['qb_link'] = 'Interne link';
+$lang['qb_extlink'] = 'Externe link';
+$lang['qb_hr'] = 'Horizontale lijn';
+$lang['qb_ol'] = 'Geordende lijst';
+$lang['qb_ul'] = 'Ongeordende lijst';
+$lang['qb_media'] = 'Voeg plaatjes en andere bestanden toe';
+$lang['qb_sig'] = 'Handtekening invoegen';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Speciale tekens';
+$lang['upperns'] = 'Spring naar bovenliggende namespace';
+$lang['admin_register'] = 'Nieuwe gebruiker toevoegen';
+$lang['metaedit'] = 'Metadata wijzigen';
+$lang['metasaveerr'] = 'Schrijven van metadata mislukt';
+$lang['metasaveok'] = 'Metadata bewaard';
+$lang['img_backto'] = 'Terug naar';
+$lang['img_title'] = 'Titel';
+$lang['img_caption'] = 'Bijschrift';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Bestandsnaam';
+$lang['img_fsize'] = 'Grootte';
+$lang['img_artist'] = 'Fotograaf';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formaat';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords'] = 'Trefwoorden';
+$lang['subscribe_success'] = '%s toegevoegd aan de lijst voor %s';
+$lang['subscribe_error'] = 'Fout bij toevoegen van %s aan de lijst voor %s';
+$lang['subscribe_noaddress'] = 'Er is geen adres dat overeenkomt met je login, je kan niet toegevoegd worden aan de lijst';
+$lang['unsubscribe_success'] = '%s verwijderd van de lijst voor %s';
+$lang['unsubscribe_error'] = 'Fout bij verwijderen van %s van de lijst voor %s';
+$lang['authmodfailed'] = 'Ongeldige gebruikersauthenticatie-configuratie. Informeer de wikibeheerder.';
+$lang['authtempfail'] = 'Gebruikersauthenticatie is tijdelijk niet beschikbaar. Als deze situatie zich blijft voordoen, informeer dan de wikibeheerder.';
+$lang['i_chooselang'] = 'Kies je taal';
+$lang['i_installer'] = 'DokuWiki Installer';
+$lang['i_wikiname'] = 'Wikinaam';
+$lang['i_enableacl'] = 'ACLs inschakelen (aanbevolen)';
+$lang['i_superuser'] = 'Superuser';
+$lang['i_problems'] = 'De installer vond problemen, hieronder aangegeven. Verhelp deze voor je doorgaat.';
+$lang['i_modified'] = 'Uit veiligheidsoverwegingen werkt dit script alleen met nieuwe en onveranderde DokuWiki-installaties. Pak de bestanden opnieuw uit of raadpleeg de <a href="http://wiki.splitbrain.org/wiki:install">Dokuwiki installatie-instructies</a>';
+$lang['i_funcna'] = 'PHP functie <code>%s</code> is niet beschikbaar. Wellicht heeft je hosting provider deze uitgeschakeld?';
+$lang['i_phpver'] = 'PHP-versie <code>%s</code> is lager dan de vereiste <code>%s</code>. Upgrade PHP.';
+$lang['i_permfail'] = '<code>%s</code> is niet schrijfbaar voor DokuWiki. Pas de permissie-instellingen van deze directory aan.';
+$lang['i_confexists'] = '<code>%s</code> bestaat reeds';
+$lang['i_writeerr'] = 'Niet mogelijk om <code>%s</code> aan te maken. Controleer de directory/bestandspermissies en maak het bestand handmatig aan.';
+$lang['i_badhash'] = 'Onbekende of aangepaste dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - onjuiste of lege waarde';
+$lang['i_success'] = 'De configuratie is succesvol afgerond. Je kunt nu het bestand install.php verwijderen. Ga naar <a href="doku.php">je nieuwe DokuWiki</a>.';
+$lang['i_failure'] = 'Fouten deden zich voor tijdens het schrijven naar de configuratiebestanden. Pas deze aan voor je gebruik kunt maken van <a href="doku.php">je nieuwe DokuWiki</a>.';
+$lang['i_policy'] = 'Initieel ACL-beleid';
+$lang['i_pol0'] = 'Open wiki (lezen, schrijven, uploaden voor iedereen)';
+$lang['i_pol1'] = 'Publieke wiki (lezen voor iedereen, schrijven en uploaden voor geregistreerde gebruikers)';
+$lang['i_pol2'] = 'Besloten wiki (lezen, schrijven en uploaden alleen voor geregistreerde gebruikers)';
+$lang['i_retry'] = 'Opnieuw';
+$lang['mu_intro'] = 'Hiier kun je meerdere bestanden tegelijk uploaden. Klik de blader-knop om ze aan de lijst toe te voegen. Klik Upload als je klaar bent.';
+$lang['mu_gridname'] = 'Bestandsnaam';
+$lang['mu_gridsize'] = 'Grootte';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namespace';
+$lang['mu_browse'] = 'Blader';
+$lang['mu_toobig'] = 'te groot';
+$lang['mu_ready'] = 'Klaar om te uploaden';
+$lang['mu_done'] = 'klaar';
+$lang['mu_fail'] = 'mislukt';
+$lang['mu_authfail'] = 'sessie beëindigd';
+$lang['mu_progress'] = '@PCT@% geüpload';
+$lang['mu_filetypes'] = 'Toegestane bestandstypes';
+$lang['mu_info'] = 'bestanden geüpload.';
+$lang['mu_lasterr'] = 'Laatste foutmelding:';
+$lang['recent_global'] = 'Je bekijkt momenteel de wijzigingen binnen de <b>%s</b> namespace. Je kunt ook de <a href="%s">recente wijzigingen van de hele wiki</a> bekijken.';
+$lang['years'] = '%d jaar geleden';
+$lang['months'] = '%d maand geleden';
+$lang['weeks'] = '%d weken geleden';
+$lang['days'] = '%d dagen geleden';
+$lang['hours'] = '%d uren geleden';
+$lang['minutes'] = '%d minuten geleden';
+$lang['seconds'] = '%d seconden geleden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt
new file mode 100644
index 000000000..878fb375c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt
@@ -0,0 +1,3 @@
+====== Pagina in exclusief gebruik ======
+
+Deze pagina wordt momenteel aangepast door een andere gebruiker. Wacht tot deze gebruiker klaar is met aanpassen of totdat het gebruiksrecht vervalt.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt
new file mode 100644
index 000000000..699cbf8fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt
@@ -0,0 +1,3 @@
+====== Login ======
+
+Je bent op dit moment niet ingelogd! Voer je login-gegevens hieronder in om in te loggen. Je browser moet cookies accepteren om in te kunnen loggen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt
new file mode 100644
index 000000000..dbe35c519
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt
@@ -0,0 +1,17 @@
+Er is een pagina in je DokuWiki toegevoegd of gewijzigd. Hier zijn de details
+
+Datum : @DATE@
+Browser : @BROWSER@
+IP-Adres : @IPADDRESS@
+Hostname : @HOSTNAME@
+Oude revisie : @OLDPAGE@
+Nieuwe revisie: @NEWPAGE@
+Samenvatting : @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+Deze mail werd gegenereerd door DokuWiki op
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt
new file mode 100644
index 000000000..0e4b95ec0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt
@@ -0,0 +1,3 @@
+====== Dit onderwerp bestaat nog niet ======
+
+De pagina over dit onderwerp bestaat nog niet. Aanmaken kan door op de ''Maak deze pagina aan'' te klikken.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt
new file mode 100644
index 000000000..849fc5138
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt
@@ -0,0 +1,4 @@
+====== Revisie bestaat niet ======
+
+De opgegeven revisie bestaat niet. Klik op ''Oude revisies'' voor een lijst van oude revisies van dit document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt
new file mode 100644
index 000000000..4d2927aff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt
@@ -0,0 +1,4 @@
+====== Preview ======
+
+Dit is een preview van de tekst zoals hij er uit komt te zien. Let op: het is nog **niet opgeslagen!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt
new file mode 100644
index 000000000..ab72ae7c4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt
@@ -0,0 +1,13 @@
+Beste @FULLNAME@!
+
+Iemand heeft een nieuw wachtwoord aangevraagd voor je @TITLE@ login op @DOKUWIKIURL@
+
+Als je geen nieuw wachtwoord hebt aangevraagd kun je deze e-mail negeren.
+
+Volg de volgende link om te bevestigen dat je inderdaad een nieuw wachtwoord wilt:
+
+@CONFIRM@
+
+--
+Deze mail werd gegenereerd door DokuWiki op
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt
new file mode 100644
index 000000000..fcb791811
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt
@@ -0,0 +1,2 @@
+Deze pagina is niet beschrijfbaar. Je kan de broncode bekijken maar niks veranderen. Neem contact op met de beheerder als je denkt dat dit niet klopt.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt
new file mode 100644
index 000000000..4b507f2ca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt
@@ -0,0 +1,3 @@
+====== Recente wijzigingen ======
+
+De volgende pagina's zijn recent aangepast.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt
new file mode 100644
index 000000000..338edcca3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt
@@ -0,0 +1,4 @@
+====== Registreer als nieuwe gebruiker ======
+
+Vul alle informatie hieronder in om een nieuw account voor deze wiki aan te maken. Zorg dat je een **geldig e-mailadres** opgeeft - als je je wachtwoord hier niet in kunt vullen wordt het naar dit adres verzonden. De gebruikersnaam moet een geldige [[doku>wiki:pagename|pagename]] zijn.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt
new file mode 100644
index 000000000..5efb25144
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt
@@ -0,0 +1,14 @@
+Een nieuwe gebruiker heeft zich geregistreerd. Dit zijn de details:
+
+Gebruikersnaam: @NEWUSER@
+Volledige naam: @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Datum : @DATE@
+Browser : @BROWSER@
+IP-adres : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Dit bericht is gegenereerd door DokuWiki op
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt
new file mode 100644
index 000000000..ed4617748
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt
@@ -0,0 +1,3 @@
+==== Verstuur een nieuw wachtwoord ====
+
+Voer uw gebruikersnaam in het formulier hieronder in om een nieuw wachtwoord aan te vragen voor deze wiki. Een bevestigingslink zal worden verzonden naar het geregistreerde e-mailadres.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt
new file mode 100644
index 000000000..7a78917fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt
@@ -0,0 +1,4 @@
+====== Oude revisies ======
+
+Dit zijn de oude revisies van het document. Om terug te keren naar een oude revisie selecteer je hem hieronder en klik je op de ''Pagina aanpassen'' en vervolgens op ''Opslaan''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt
new file mode 100644
index 000000000..3ace704c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt
@@ -0,0 +1,5 @@
+====== Zoeken ======
+
+Hieronder zijn de resultaten van de zoekopdracht. Niks gevonden? Maak een nieuwe pagina met als naam je zoekopdracht. Klik hiervoor op ''Pagina aanpassen''.
+
+===== Resultaten =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt
new file mode 100644
index 000000000..c1bfa4e2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt
@@ -0,0 +1,2 @@
+**Dit is een oude revisie van het document!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt
new file mode 100644
index 000000000..3056c4a70
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt
@@ -0,0 +1,37 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+aan
+als
+bij
+dan
+dat
+die
+dit
+een
+had
+heb
+hem
+het
+hij
+hoe
+hun
+kan
+men
+met
+mij
+nog
+ons
+ook
+tot
+uit
+van
+was
+wat
+wel
+wij
+zal
+zei
+zij
+zou
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt
new file mode 100644
index 000000000..5b092a9a6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt
@@ -0,0 +1,16 @@
+Hallo!
+
+De pagina @PAGE@ op de @TITLE@ wiki is gewijzigd.
+Hier zijn de aanpassingen:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Om deze berichten niet meer te ontvangen van @DOKUWIKIURL@ , ga naar
+@NEWPAGE@
+en kies 'Opzeggen wijzigingen'.
+
+--
+Dit bericht is gegenereerd door DokuWiki op
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt
new file mode 100644
index 000000000..2368a09fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt
@@ -0,0 +1,3 @@
+===== Wijzig uw gebruikersprofiel =====
+
+Je hoeft alleen de velden aan te passen die je wilt wijzigen. Je gebruikersnaam is niet aan te passen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt
new file mode 100644
index 000000000..1816400d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt
@@ -0,0 +1,14 @@
+Er is een bestand geüpload naar uw DokuWiki. Hier zijn de details;
+
+Bestand : @MEDIA@
+Datum : @DATE@
+Browser : @BROWSER@
+IP-adres : @IPADDRESS@
+Hostname : @HOSTNAME@
+Grootte : @SIZE@
+MIME type: @MIME@
+Gebruiker: @USER@
+
+--
+Dit bericht is gegenereerd door DokuWiki op
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt
new file mode 100644
index 000000000..d887d7318
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM geblokkeerd ======
+
+Je wijzigingen zijn **niet** opgeslagen omdat ze een of meer geblokkeerde woorden bevatten. Als je probeerde de Wiki te spammen -- Foei stouterd! Als je denkt dat dit een fout is neem dan contact op met de beheerder van deze Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt
new file mode 100644
index 000000000..99289a18b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt
@@ -0,0 +1,3 @@
+====== Administrasjon ======
+
+Nedenfor finner du en liste over administrative oppgaver tilgjengelig i DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt
new file mode 100644
index 000000000..32499a2e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt
@@ -0,0 +1 @@
+====== Ekstra tilleggene ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt
new file mode 100644
index 000000000..9fe72066e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt
@@ -0,0 +1,3 @@
+====== Tilbakelinker ======
+
+Dette er en liste over sider som ser ut til å linke tilbake til den aktuelle siden. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt
new file mode 100644
index 000000000..89479af4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt
@@ -0,0 +1,6 @@
+====== Det fins en nyere versjon ======
+
+Det fins en nyere versjon av dokumentet du har redigert. Dette kan skje når en annen bruker redigerer dokumentet samtidig med deg.
+
+Legg nøye merke til forskjellene som vises under, og velg deretter hvilken versjon du vil beholde. Om du velger ''**Lagre**'', så kommer din versjon til å lagres. Velg ''**Avbryt**'' for å beholde den nyeste versjonen (ikke din).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt
new file mode 100644
index 000000000..4f8c9a188
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt
@@ -0,0 +1,3 @@
+====== Adgang forbudt ======
+
+Adgang forbudt. Kanskje du har glemt å logge deg inn?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt
new file mode 100644
index 000000000..e4c2eb080
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt
@@ -0,0 +1,4 @@
+====== Forskjeller ======
+
+Her vises forskjeller mellom den valgte versjonen og den nåværende versjonen av dokumentet.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt
new file mode 100644
index 000000000..8bcea65aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt
@@ -0,0 +1,6 @@
+====== Kladdfil funnet ======
+
+Din siste endring av denne siden ble ikke avsluttet riktig. DokuWiki lagret automatisk en kladd under ditt arbeid som du nå kan bruke for å fortsette redigeringen. Nedenfor kan du se de lagrede data.
+
+Vennligst avgjør om du vil //gjennopprette// din tapte sesjon, //slette// kladden eller //avbryte// redigeringen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt
new file mode 100644
index 000000000..bdb3bc854
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt
@@ -0,0 +1,2 @@
+Rediger siden og klikk på ''**Lagre**''. Se [[wiki:syntax]] for Wikisyntaks. Rediger siden bare hvis du kan **forbedre** sidens innhold. Hvis du vil teste ut hvordan saker og ting fungerer, kan du gjøre det på [[playground:playground|lekeplassen]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt
new file mode 100644
index 000000000..652a84c38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt
@@ -0,0 +1,2 @@
+**Du har hentet en tidligere versjon av dokumentet!** Hvis du lagrer den tidligere versjonen så kommer du til å lage en ny og aktiv versjon med dette innholdet.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt
new file mode 100644
index 000000000..e2ea95933
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt
@@ -0,0 +1,4 @@
+====== Indeks ======
+
+Dette er en fortegnelse over alle tilgjengelige sider, sortert etter [[doku>namespaces|navnerom]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html
new file mode 100644
index 000000000..541445494
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html
@@ -0,0 +1,24 @@
+<p>Denne siden assisterer under førstegangs installasjon og konfigurasjon av
+<a href="http://dokuwiki.org">Dokuwiki</a>. Mer informasjon for denne
+installasjonen er tilgjengelig på
+<a href="http://dokuwiki.org/installer">dokumentasjonssiden</a>.</p>
+
+<p>DokuWiki bruker vanlige filer for lagring av wikisider og annen
+informasjon assosiert med disse sidene (f.eks. bilder, søkeindekser, eldre
+revisjoner osv.). For å kunne virke <strong>må</strong> DokuWiki
+ha skrivetilgang til de mapper som lagrer disse filene.
+Denne installasjonen kan ikke sette opp mapperettigheter. Det må normalt
+gjøres direkte fra et kommandoskall, eller om du bruker en leverandør,
+via FTP eller ditt kontrollpanel på tjener (f.eks. cPanel).</p>
+
+<p>Denne installasjonen vil sette opp din DokuWiki-konfigurasjon for
+<acronym title="access control list">ACL</acronym>, som igjen tillater administrator
+innlogging og tilgang til DokuWikiens administratormeny for installasjon av tillegg,
+brukerbehandling, adgangskontrollbehandling til wikisider og endring av konfigurasjon.
+Det er ikke påkrevd for at DokuWiki skal virke, men det vil gjøre Dokuwiki enklere å
+administrere.</p>
+
+<p>Erfarne brukere eller brukere med spessielle oppsettingskrav bør se på disse lenkene
+for detaljer rundt
+<a href="http://dokuwiki.org/install">installasjonsinstrukser</a>
+og <a href="http://dokuwiki.org/config">konfigurasjonsinnstillinger</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php
new file mode 100644
index 000000000..2dc2c8339
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php
@@ -0,0 +1,260 @@
+<?php
+/**
+ * Norwegian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Reidar Mosvold <Reidar.Mosvold@hit.no>
+ * @author Jorge Barrera Grandon <jorge@digitalwolves.org>
+ * @author Rune Rasmussen http://www.syntaxerror.no/
+ * @author Thomas Nygreen <nygreen@gmail.com>
+ * @author Arild Burud <arildb@met.no>
+ * @author Torkill Bruland <torkar-b@online.no>
+ * @author Rune M. Andersen <rune.andersen@gmail.com>
+ * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
+ * @author Knut Staring <knutst@gmail.com>
+ * @author Lisa Ditlefsen <lisa@vervesearch.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Rediger denne siden';
+$lang['btn_source'] = 'Vis kildetekst';
+$lang['btn_show'] = 'Vis siden';
+$lang['btn_create'] = 'Lag denne siden';
+$lang['btn_search'] = 'Søk';
+$lang['btn_save'] = 'Lagre';
+$lang['btn_preview'] = 'Forhåndsvis';
+$lang['btn_top'] = 'Til toppen av siden';
+$lang['btn_newer'] = '<< nyere';
+$lang['btn_older'] = 'eldre >>';
+$lang['btn_revs'] = 'Historikk';
+$lang['btn_recent'] = 'Siste endringer';
+$lang['btn_upload'] = 'Last opp';
+$lang['btn_cancel'] = 'Avbryt';
+$lang['btn_index'] = 'Indeks';
+$lang['btn_secedit'] = 'Rediger';
+$lang['btn_login'] = 'Logg inn';
+$lang['btn_logout'] = 'Logg ut';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Oppdater';
+$lang['btn_delete'] = 'Slett';
+$lang['btn_back'] = 'Tilbake';
+$lang['btn_backlink'] = 'Tilbakelenker';
+$lang['btn_backtomedia'] = 'Tilbake til valg av mediafil';
+$lang['btn_subscribe'] = 'Abonner på endringer';
+$lang['btn_unsubscribe'] = 'Ikke abonner på endringer';
+$lang['btn_subscribens'] = 'Abonner på endringer i navnerom';
+$lang['btn_unsubscribens'] = 'Stopp abonnement på endringer i navnerom';
+$lang['btn_profile'] = 'Oppdater profil';
+$lang['btn_reset'] = 'Tilbakestill';
+$lang['btn_resendpwd'] = 'Send nytt passord';
+$lang['btn_draft'] = 'Rediger kladd';
+$lang['btn_recover'] = 'Gjennvinn kladd';
+$lang['btn_draftdel'] = 'Slett kladd';
+$lang['btn_revert'] = 'Gjenopprette';
+$lang['loggedinas'] = 'Innlogget som';
+$lang['user'] = 'Brukernavn';
+$lang['pass'] = 'Passord';
+$lang['newpass'] = 'Nytt passord';
+$lang['oldpass'] = 'Bekreft gjeldende passord';
+$lang['passchk'] = 'Bekreft passord';
+$lang['remember'] = 'Husk meg';
+$lang['fullname'] = 'Fullt navn';
+$lang['email'] = 'E-post';
+$lang['register'] = 'Registrer deg';
+$lang['profile'] = 'Brukerprofil';
+$lang['badlogin'] = 'Ugyldig brukernavn og/eller passord.';
+$lang['minoredit'] = 'Mindre endringer';
+$lang['draftdate'] = 'Kladd autolagret';
+$lang['nosecedit'] = 'Siden ble endret i mellomtiden, seksjonsinfo har blitt foreldet - lastet full side istedet.';
+$lang['regmissing'] = 'Vennligst fyll ut alle felt.';
+$lang['reguexists'] = 'Det finnes allerede en konto med dette brukernavnet.';
+$lang['regsuccess'] = 'Brukerkonto har blitt laget og passord har blitt sendt via e-post.';
+$lang['regsuccess2'] = 'Brukeren har blitt laget.';
+$lang['regmailfail'] = 'En feil oppstod da passordet ditt skulle sendes via e-post. Vennligst kontakt administratoren!';
+$lang['regbadmail'] = 'Den angitte e-post adressen ser ut til å være ugyldig. Vennligst kontakt administratoren om du anser dette som feilaktig.';
+$lang['regbadpass'] = 'De to angitte passordene er ikke like, vennligst forsøk igjen.';
+$lang['regpwmail'] = 'Ditt DokuWiki passord';
+$lang['reghere'] = 'Har du ikke en konto ennå? Lag deg en';
+$lang['profna'] = 'Denne wikien støtter ikke profilendringer';
+$lang['profnochange'] = 'Ingen endringer, ingenting å gjøre.';
+$lang['profnoempty'] = 'Tomt navn- eller e-postfelt er ikke tillatt.';
+$lang['profchanged'] = 'Brukerprofil ble vellykket oppdatert.';
+$lang['pwdforget'] = 'Glemt ditt passord? FÃ¥ deg et nytt';
+$lang['resendna'] = 'Denne wikien støtter ikke nyutsending.';
+$lang['resendpwd'] = 'Send nytt passord for';
+$lang['resendpwdmissing'] = 'Beklager, du må fylle inn alle felt.';
+$lang['resendpwdnouser'] = 'Beklager, vi kan ikke finne denne brukeren i vår database.';
+$lang['resendpwdbadauth'] = 'Beklager, denne autorisasjonskoden er ikke gyldig. Sjekk at du brukte hele bekreftelseslenken.';
+$lang['resendpwdconfirm'] = 'En bekreftelseslenke er blitt sendt på e-post.';
+$lang['resendpwdsuccess'] = 'Ditt nye passord er blitt sendt på e-post.';
+$lang['license'] = 'Der annet ikke er særskilt beskrevet, er innholdet på denne wiki regulert av følgende lisens:';
+$lang['licenseok'] = 'Merk: Ved å endre på denne siden godtar du at ditt innhold blir regulert av følgende lisens:';
+$lang['searchmedia'] = 'Søk filnavn';
+$lang['searchmedia_in'] = 'Søk i %s';
+$lang['txt_upload'] = 'Velg fil som skal lastes opp';
+$lang['txt_filename'] = 'Skriv inn wikinavn (alternativt)';
+$lang['txt_overwrt'] = 'Overskriv eksisterende fil';
+$lang['lockedby'] = 'Stengt av';
+$lang['lockexpire'] = 'Avstengningen opphører';
+$lang['willexpire'] = 'Din redigeringslås for dette dokumentet kommer snart til å opphøre.\nFor å unngå versjonskonflikter bør du forhåndsvise dokumentet ditt for å forlenge redigeringslåsen.';
+$lang['notsavedyet'] = 'Ulagrede endringer vil gå tapt.\nVil du fortsette?';
+$lang['rssfailed'] = 'En feil oppstod da denne kilden skulle hentes:';
+$lang['nothingfound'] = 'Ingen data funnet.';
+$lang['mediaselect'] = 'Valg av mediafil';
+$lang['fileupload'] = 'Mediafil Opplasting';
+$lang['uploadsucc'] = 'Opplastingen var vellykket';
+$lang['uploadfail'] = 'Opplastingen var mislykket. Kanskje feil rettigheter?';
+$lang['uploadwrong'] = 'Opplastingen ble nektet. Denne filendelsen er ikke tillatt!';
+$lang['uploadexist'] = 'Filen eksisterer. Ingenting har blitt gjort.';
+$lang['uploadbadcontent'] = 'Det opplastede innholdet passer ikke til filendelsen %s.';
+$lang['uploadspam'] = 'Opplastingen ble blokkert av svartelisten for spam.';
+$lang['uploadxss'] = 'Opplastingen ble blokkert på grunn av mulig skadelig innhold.';
+$lang['uploadsize'] = 'Den opplastede filen var for stor. (max. %s)';
+$lang['deletesucc'] = 'Filen "%s" har blitt slettet.';
+$lang['deletefail'] = '"%s" kunne ikke slettes - sjekk rettighetene.';
+$lang['mediainuse'] = 'Filen "%s" har ikke biltt slettet - den er fortsatt i bruk.';
+$lang['namespaces'] = 'Navnerom';
+$lang['mediafiles'] = 'Tilgjengelige filer i';
+$lang['js']['searchmedia'] = 'Søk for filer';
+$lang['js']['keepopen'] = 'Hold vindu åpent ved valg';
+$lang['js']['hidedetails'] = 'Skjul detaljer';
+$lang['js']['nosmblinks'] = 'Lenker til Windows-ressurser fungerer bare i Microsoft sin Internet Explorer.
+Du kan fortsatt kopiere og lime inn lenken.';
+$lang['js']['linkwiz'] = 'guide til lenker';
+$lang['js']['linkto'] = 'Lenke til:';
+$lang['js']['del_confirm'] = 'Slett denne oppføringen?';
+$lang['js']['mu_btn'] = 'Last opp flere filer samtidig';
+$lang['mediausage'] = 'Bruk følgende syntaks til å refferer til denne filen:';
+$lang['mediaview'] = 'Vis original fil';
+$lang['mediaroot'] = 'rot';
+$lang['mediaupload'] = 'Last opp en fil til gjeldende navnerom her. For å opprette undernavnerom, før dem opp før filnavn i "Last opp som" adskilt med kolon.';
+$lang['mediaextchange'] = 'Filendelse endret fra .%s til .%s!';
+$lang['reference'] = 'Referanser for';
+$lang['ref_inuse'] = 'Denne filen kan ikke slettes fordi den er fortsatt i bruk av følgende sider:';
+$lang['ref_hidden'] = 'Noen referanser er på sider du ikke har tilgang til å lese';
+$lang['hits'] = 'Treff';
+$lang['quickhits'] = 'Matchende wikinavn';
+$lang['toc'] = 'Innholdsfortegnelse';
+$lang['current'] = 'nåværende versjon';
+$lang['yours'] = 'Din versjon';
+$lang['diff'] = 'Vis forskjeller mot nåværende versjon';
+$lang['diff2'] = 'Vis forskjeller mellom valgte versjoner';
+$lang['line'] = 'Linje';
+$lang['breadcrumb'] = 'Spor';
+$lang['youarehere'] = 'Du er her';
+$lang['lastmod'] = 'Sist modifisert';
+$lang['by'] = 'av';
+$lang['deleted'] = 'fjernet';
+$lang['created'] = 'opprettet';
+$lang['restored'] = 'gjenopprettet til en tidligere versjon';
+$lang['external_edit'] = 'ekstern redigering';
+$lang['summary'] = 'Redigeringskommentar';
+$lang['noflash'] = 'For at dette innholdet skal vises må du ha <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['download'] = 'Last ned utdraget';
+$lang['mail_newpage'] = 'side lagt til:';
+$lang['mail_changed'] = 'side endret:';
+$lang['mail_new_user'] = 'ny bruker:';
+$lang['mail_upload'] = 'fil opplastet:';
+$lang['qb_bold'] = 'Fet tekst';
+$lang['qb_italic'] = 'Kursiv tekst';
+$lang['qb_underl'] = 'Understreket tekst';
+$lang['qb_code'] = 'Kodetekst';
+$lang['qb_strike'] = 'Gjennomstreket tekst';
+$lang['qb_h1'] = 'Overskrift nivå 1';
+$lang['qb_h2'] = 'Overskrift nivå 2';
+$lang['qb_h3'] = 'Overskrift nivå 3';
+$lang['qb_h4'] = 'Overskrift nivå 4';
+$lang['qb_h5'] = 'Overskrift nivå 5';
+$lang['qb_h'] = 'Overskrift';
+$lang['qb_hs'] = 'Velg overskrift';
+$lang['qb_hplus'] = 'Høyere overskrift';
+$lang['qb_hminus'] = 'Lavere overskrift';
+$lang['qb_hequal'] = 'Overskrift på samme nivå';
+$lang['qb_link'] = 'Intern lenke';
+$lang['qb_extlink'] = 'Ekstern lenke';
+$lang['qb_hr'] = 'Horisontal linje';
+$lang['qb_ol'] = 'Sortert listepunkt';
+$lang['qb_ul'] = 'Usortert listepunkt';
+$lang['qb_media'] = 'Legg til bilder og andre filer';
+$lang['qb_sig'] = 'Føy til signatur';
+$lang['qb_smileys'] = 'Smilefjes';
+$lang['qb_chars'] = 'Spesialtegn';
+$lang['upperns'] = 'gå til overordnet navnerom';
+$lang['admin_register'] = 'Legg til ny bruker';
+$lang['metaedit'] = 'Rediger metadata';
+$lang['metasaveerr'] = 'Skriving av metadata feilet';
+$lang['metasaveok'] = 'Metadata lagret';
+$lang['img_backto'] = 'Tilbake til';
+$lang['img_title'] = 'Tittel';
+$lang['img_caption'] = 'Bildetekst';
+$lang['img_date'] = 'Dato';
+$lang['img_fname'] = 'Filnavn';
+$lang['img_fsize'] = 'Størrelse';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Opphavsrett';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Nøkkelord';
+$lang['subscribe_success'] = 'Lagt til %s som abonnent av listen for %s';
+$lang['subscribe_error'] = 'En feil oppstod når %s skulle legges til som abonnent av listen for %s';
+$lang['subscribe_noaddress'] = 'Det er ingen adresse assosiert med din login. Du kan dermed ikke bli lagt til som abonnent av listen.';
+$lang['unsubscribe_success'] = 'Fjernet %s som abonnent for listen %s';
+$lang['unsubscribe_error'] = 'En feil oppstod når %s skulle fjernes som abonnent fra listen for %s';
+$lang['authmodfailed'] = 'Feilkonfigurert brukerautorisasjon. Vennligst innformer Wiki-admin.';
+$lang['authtempfail'] = 'Brukerautorisasjon er midlertidig utilgjengelig. Om dette vedvarer, vennligst informer Wiki-admin.';
+$lang['i_chooselang'] = 'Velg ditt språk';
+$lang['i_installer'] = 'DokuWiki-installasjon';
+$lang['i_wikiname'] = 'Wikinavn';
+$lang['i_enableacl'] = 'Aktiver ACL (anbefalt)';
+$lang['i_superuser'] = 'Superbruker';
+$lang['i_problems'] = 'Installasjonen oppdaget noen problemer, disse listes nedenfor. Du kan ikke fortsett før du har løst disse.';
+$lang['i_modified'] = 'For sikkerhets skyld vil dette skriptet bare virke med en ny og uendret Dokuwiki-installsjon.
+ Du bør enten pakke ut filene på nytt fra den nedlastede pakken, eller konsultere den komplette
+ <a href="http://dokuwiki.org/install">Dokuwiki-installasjonsinstruksen</a>';
+$lang['i_funcna'] = 'PHP-funksjonen <code>%s</code> er ikke tilgjengelig. Kanskje din leverandør har deaktivert den av noen grunn?';
+$lang['i_phpver'] = 'Your PHP version <code>%s</code> is lower than the needed <code>%s</code>. You need to upgrade your PHP install.';
+$lang['i_permfail'] = '<code>%s</code> er ikke skrivbar for DokuWiki. Du må fikse rettighetene for denne mappen!';
+$lang['i_confexists'] = '<code>%s</code> eksisterer allerede';
+$lang['i_writeerr'] = 'Kunne ikke opprette <code>%s</code>. Du må sjekke mappe-/filrettigheter og opprette filen manuelt.';
+$lang['i_badhash'] = 'ikke gjenkjent eller modifisert dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - ugyldig eller tom verdi';
+$lang['i_success'] = 'Konfigurasjonen ble vellykket fullført. Du kan slette install.php filen nå. Fortsett til
+ <a href="doku.php">din nye DokuWiki</a>.';
+$lang['i_failure'] = 'En eller flere feil oppstod ved skriving til konfigurasjonsfilene. Du må kanskje fikse dem manuelt før
+ du kan bruke <a href="doku.php">din nye DokuWiki</a>.';
+$lang['i_policy'] = 'Innledende ACL-politikk';
+$lang['i_pol0'] = 'Ã…pen Wiki (les, skriv og opplasting for alle)';
+$lang['i_pol1'] = 'Offentlig Wiki (les for alle, skriving og opplasting bare for registrerte brukere)';
+$lang['i_pol2'] = 'Lukket Wiki (les, skriv og opplasting bare for registrerte brukere)';
+$lang['i_retry'] = 'Prøv igjen';
+$lang['mu_intro'] = 'Her kan du laste opp flere filer samtidig. Klikk på utforsk-knappen for å legge dem til i køen. Klikk på "last opp" når du er ferdig med å velge filene. ';
+$lang['mu_gridname'] = 'Filnavn';
+$lang['mu_gridsize'] = 'Størrelse';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Navnerom (Namespace)';
+$lang['mu_browse'] = 'Utforsk';
+$lang['mu_toobig'] = 'for stor';
+$lang['mu_ready'] = 'klar for opplasting';
+$lang['mu_done'] = 'komplett';
+$lang['mu_fail'] = 'feilet';
+$lang['mu_authfail'] = 'sesjonen har utløpt';
+$lang['mu_progress'] = '@PCT@% lastet opp';
+$lang['mu_filetypes'] = 'Tillatte filtyper';
+$lang['mu_info'] = 'filer lastet opp.';
+$lang['mu_lasterr'] = 'Siste feilen:';
+$lang['recent_global'] = 'Du ser nå på endringene i navnerommet <b>%s</b>. Du kan også<a href="%s">se på nylig foretatte endringer for hele wikien</a>.';
+$lang['years'] = '%d år siden';
+$lang['months'] = '%d måneder siden';
+$lang['weeks'] = '%d uker siden';
+$lang['days'] = '%d dager siden';
+$lang['hours'] = '%d timer siden';
+$lang['minutes'] = '%d minutter siden';
+$lang['seconds'] = '%d sekunder siden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt
new file mode 100644
index 000000000..cb14c892e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt
@@ -0,0 +1,3 @@
+====== Dokumentet er låst ======
+
+Dette dokumentet er for tiden låst for redigering av en annen bruker. Du må vente til denne brukeren er ferdig med sin redigering, eller til dokumentlåsen opphører å gjelde.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt
new file mode 100644
index 000000000..149cf0031
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt
@@ -0,0 +1,4 @@
+====== Logg inn ======
+
+Du er ikke innlogget! Angi ditt brukernavn og passord nedenfor for å logge inn. Støtte for såkalte "cookies" må være aktivert i din nettleser for at du skal kunne logge inn.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt
new file mode 100644
index 000000000..9c0714c2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt
@@ -0,0 +1,17 @@
+En side i din DokuWiki har blitt lagt til eller blitt endret. Informasjon om endringen:
+
+Dato : @DATE@
+Nettleser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Vertsnavn : @HOSTNAME@
+Tidligere versjon : @OLDPAGE@
+Aktuell versjon : @NEWPAGE@
+Redigeringskommentar : @SUMMARY@
+Bruker : @USER@
+
+@DIFF@
+
+
+--
+Denne meldingen ble laget av DokuWiki
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt
new file mode 100644
index 000000000..8f4b8da79
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt
@@ -0,0 +1,3 @@
+====== Det fins ikke noe innhold ======
+
+Du har klikket på en lenke til et emne som ikke finnes ennå. Du kan skape det gjennom å klikke på ''**Lag denne siden**''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt
new file mode 100644
index 000000000..dfd71db0f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt
@@ -0,0 +1,4 @@
+====== Det fins ingen slik versjon ======
+
+Den angitte versjonen fins ikke. Bruk ''**Historikk**'' for en oversikt over de versjoner som fins av dette dokumentet.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt
new file mode 100644
index 000000000..2bed20e86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt
@@ -0,0 +1,4 @@
+====== Forhåndsvisning ======
+
+Dette er en forhåndsvisning av hvordan din tekst kommer til å se ut når den blir vist. Husk at den er **ikke lagret** ennå!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt
new file mode 100644
index 000000000..9b8a0ab3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt
@@ -0,0 +1,15 @@
+Hei @FULLNAME@!
+
+Noen har bedt om nytt passord for din @TITLE@ innlogging
+på @DOKUWIKIURL@
+
+Om du ikke bad om nytt passord kan du bare overse denne e-posten.
+
+For å bekrefte at forespørselen virkelig kom fra deg kan du bruke
+følgende lenke:
+
+@CONFIRM@
+
+--
+Denne e-posten ble generert av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt
new file mode 100644
index 000000000..27fcb5118
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt
@@ -0,0 +1,2 @@
+Denne siden er skrivebeskyttet. Du kan se på den, men ikke endre den. Kontakt administratoren hvis du mener at du bør kunne endre siden.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt
new file mode 100644
index 000000000..d9357b1a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt
@@ -0,0 +1,5 @@
+====== Siste nytt ======
+
+Følgende sider/dokumenter har nylig blitt oppdatert.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt
new file mode 100644
index 000000000..1ce95c44d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt
@@ -0,0 +1,4 @@
+====== Registrer deg som bruker ======
+
+Angi all informasjon som det blir spurt om nedenfor for å skape en ny brukerkonto for denne wiki. Vær spesielt nøye med å angi en **gyldig e-postadresse** - ditt passord vil bli sendt til den e-postadressen du angir. Brukernavnet må være et gyldig [[doku>pagename|sidenavn]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt
new file mode 100644
index 000000000..e1fae2b90
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt
@@ -0,0 +1,14 @@
+En ny bruker har registret seg, her er detaljene:
+
+Brukernavn : @NEWUSER@
+Fult navn : @NEWNAME@
+E-post : @NEWEMAIL@
+
+Dato : @DATE@
+Nettleser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Tjener : @HOSTNAME@
+
+--
+Denne e-posten ble generert av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt
new file mode 100644
index 000000000..21625d3f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Send nytt passord ======
+
+Fyll inn ditt brukernavn i skjema nedenfor for å be om nytt passord for din konto i denne wiki. En bekreftelseslenke vil bli sent til din e-postadresse.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt
new file mode 100644
index 000000000..023fd8dce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt
@@ -0,0 +1,4 @@
+====== Historikk ======
+
+Her vises tidligere versjoner av dokumentet. For å sette dette dokumentet tilbake til en tidligere versjon kan du velge den ønskede versjonen nedenfor, klikke på **''Rediger denne siden''** og lagre dokumentet.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt
new file mode 100644
index 000000000..e94e7895b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt
@@ -0,0 +1,5 @@
+====== Søk ======
+
+Du ser resultatet av dette søket nedenfor. Hvis du ikke finner det du leter etter, så kan du skape en ny side med samme navn som ditt søk ved å klikke på ''**Lag denne siden**''-knappen.
+
+===== Resultat =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt
new file mode 100644
index 000000000..556896437
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt
@@ -0,0 +1,2 @@
+**Dette er en gammel revisjon av dokumentet!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt
new file mode 100644
index 000000000..2b2ab11e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt
@@ -0,0 +1,130 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+alle
+andre
+arbeid
+begge
+bort
+bra
+bruke
+denne
+der
+deres
+det
+din
+disse
+eller
+ene
+eneste
+enhver
+enn
+folk
+for
+fordi
+forsÛke
+fra
+fÃ…
+fÛr
+fÛrst
+gjorde
+gjÛre
+god
+gÃ…
+hadde
+han
+hans
+hennes
+her
+hva
+hvem
+hver
+hvilken
+hvis
+hvor
+hvordan
+hvorfor
+ikke
+inn
+innen
+kan
+kunne
+lage
+lang
+lik
+like
+makt
+mange
+med
+meg
+meget
+men
+mens
+mer
+mest
+min
+mye
+mÃ…
+mÃ…te
+navn
+nei
+nÃ…
+nÃ…r
+ogsÃ…
+opp
+oss
+over
+part
+punkt
+pÃ…
+rett
+riktig
+samme
+sant
+siden
+sist
+skulle
+slik
+slutt
+som
+start
+stille
+sÃ…
+tid
+til
+tilbake
+tilstand
+under
+uten
+var
+ved
+verdi
+vil
+ville
+vite
+vÃ…r
+vÖre
+vÖrt
+om
+er
+og
+du
+dine
+de
+deres
+com
+for
+fra
+inni
+hvordan
+det
+dette
+var
+hva
+når
+hvor
+hvem
+vil
+med
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt
new file mode 100644
index 000000000..999f75787
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt
@@ -0,0 +1,16 @@
+Hei!
+
+Siden @PAGE@ i @TITLE@-wikien har blitt endret.
+Her er endringene:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+For å avslutte abonnering på denne siden logg inn
+på wikien på @DOKUWIKIURL@, besøk deretter @NEWPAGE@
+og velg 'Ikke abonner på endringer'.
+
+--
+Denne mailen ble generert av DokuWiki på
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt
new file mode 100644
index 000000000..5565e528f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Oppdater din brukerprofil ======
+
+Du behøver bare fylle ut de felter du ønsker å endre. Du kan ikke endre ditt brukernavn.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt
new file mode 100644
index 000000000..b01905009
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt
@@ -0,0 +1,14 @@
+En fil ble lastet opp på din DokuWiki. Her er detaljene:
+
+Fil : @MEDIA@
+Dato : @DATE@
+Nettleser : @BROWSER@
+IP-adresse : @IPADDRESS@
+Vertnavn : @HOSTNAME@
+Størrelse : @SIZE@
+MIME-type : @MIME@
+Bruker : @USER@
+
+--
+Denne e-posten ble generert av DokuWiki på
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt
new file mode 100644
index 000000000..30c4c31ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt
@@ -0,0 +1,4 @@
+====== Ordsperre ======
+
+Dine endringer har **ikke** blitt lagret på grunn av at de inneholder ett eller flere ord som er sperret. Hvis du har forsøkt å lagre søppel, eller såkalt ''spam'' -- Fy deg! Hvis du anser denne beskjeden som feilaktig kan du kontakte administratoren til denne wikien.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt
new file mode 100644
index 000000000..cea45f9d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt
@@ -0,0 +1,4 @@
+====== Administracja ======
+
+Czynności administracyjne DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt
new file mode 100644
index 000000000..0fb03993e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt
@@ -0,0 +1 @@
+===== Dodatkowe Wtyczki ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt
new file mode 100644
index 000000000..4edccb09b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt
@@ -0,0 +1,4 @@
+====== Odnośnik z innych stron ======
+
+Strony zawierające odnośniki do aktualnej strony.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt
new file mode 100644
index 000000000..da6f95260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt
@@ -0,0 +1,6 @@
+====== Istnieje nowsza wersja strony ======
+
+Istnieje nowsza wersja edytowanej strony. Prawdopodobnie ktoś zmienił tę stronę w trakcie Twojej pracy.
+
+Przeglądnij dokładnie poniższe różnice i zdecyduj, którą wersję zatrzymać. Jeśli naciśniesz ''zapisz'' to Twoja wersja zostanie zapisana. Jeśli naciśniesz ''anuluj'' to zostanie wybrana aktualna wersja strony.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt
new file mode 100644
index 000000000..d402463ef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt
@@ -0,0 +1,4 @@
+====== Brak dostępu ======
+
+Nie masz wystarczających uprawnień. Zaloguj się!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt
new file mode 100644
index 000000000..2c896ddb3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt
@@ -0,0 +1,4 @@
+====== Różnice ======
+
+Różnice między wybraną wersją a wersją aktualną.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt
new file mode 100644
index 000000000..4036c3079
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt
@@ -0,0 +1,6 @@
+====== Znaleziono szkic strony ======
+
+Twoja ostatnia sesja edycji nie została poprawnie zakończona. DokuWiki automatycznie zachowało szkic strony podczas Twojej pracy abyś mógł (mogła) ją dokończyć. Poniżej możesz zobaczyć co zostało zapisane w czasie ostatnie sesji.
+
+Zdecyduj czy chcesz //przywrócić// ostatnią sesję, //usunąć// ją lub //anulować//.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt
new file mode 100644
index 000000000..abb20ae1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt
@@ -0,0 +1,4 @@
+Zredaguj tę stronę i naciśnij ''zapisz''.
+
+Na stronie ze [[wiki:syntax|składnią]] znajdziesz opis znaczników wiki. Jeśli chcesz poćwiczyć zajrzyj do [[playground:playground|piaskownicy]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt
new file mode 100644
index 000000000..1528cac7e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt
@@ -0,0 +1,2 @@
+**Edytujesz nieaktualną wersję strony!** Jeśli ją zapiszesz to stanie się ona wersją aktualną.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt
new file mode 100644
index 000000000..1d3fd27f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt
@@ -0,0 +1,4 @@
+====== Indeks ======
+
+Indeks wszystkich dostępnych stron pogrupowany według [[doku>namespaces|katalogów]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html
new file mode 100644
index 000000000..f1d48c1ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html
@@ -0,0 +1,23 @@
+<p>Ta strona ma na celu pomóc Ci w instalacji i konfiguracji
+<a href="http://dokuwiki.org">Dokuwiki</a>.
+Więcej informacji o instalatorze znajdziesz w
+<a href="http://dokuwiki.org/installer">dokumentacji instalatora</a>.</p>
+
+<p>DokuWiki używa zwykłych plików do przechowywania zawartości stron oraz wszelkich
+innych informacji takich jak obrazki, poprzednie wersje strony, itp.
+Żeby DokuWiki mogło poprawnie działać <strong>musisz</strong>
+nadać prawo zapisu do katalogu zawierającego te pliki. Instalator nie może wykonać
+tych czynności. Musisz zrobić to za pomocą polecenia powłoki, klienta FTP
+lub panelu kontrolnego Twojego dostawcy usług serwerowych.</p>
+
+<p>Instalator pomoże Ci w konfiguracji uprawnień
+<acronym title="access control list">ACL</acronym>,
+które z kolei umożliwią Ci założenie konta administratora oraz umożliwią dostęp
+do czynności administracyjnych takich jak instalowanie wtyczek, zarządzanie kontami,
+zarządzania uprawnieniami do stron oraz konfiguracji wiki. Użycie tego instalatora
+nie jest konieczne, jego celem jest tylko ułatwienie administracji DokuWiki.</p>
+
+<p>Zaawansowani użytkownicy lub użytkownicy mający specjalne wymagania powinni
+zapoznać się z
+<a href="http://dokuwiki.org/install">instrukcjÄ… instalacji</a>
+oraz <a href="http://dokuwiki.org/config">instrukcjÄ… konfiguracji</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php
new file mode 100644
index 000000000..882806577
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php
@@ -0,0 +1,248 @@
+<?php
+/**
+ * polish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Grzegorz Żur <grzegorz.zur@gmail.com>
+ * @author Mariusz Kujawski <marinespl@gmail.com>
+ * @author Maciej Kurczewski <pipijajko@gmail.com>
+ * @author SÅ‚awomir Boczek <slawkens@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Edytuj stronÄ™';
+$lang['btn_source'] = 'Pokaż źródło strony';
+$lang['btn_show'] = 'Pokaż stronę';
+$lang['btn_create'] = 'Utwórz stronę';
+$lang['btn_search'] = 'Szukaj';
+$lang['btn_save'] = 'Zapisz';
+$lang['btn_preview'] = 'PodglÄ…d';
+$lang['btn_top'] = 'Do góry';
+$lang['btn_newer'] = '<< nowsze';
+$lang['btn_older'] = 'starsze >>';
+$lang['btn_revs'] = 'Poprzednie wersje';
+$lang['btn_recent'] = 'Ostatnie zmiany';
+$lang['btn_upload'] = 'Wyślij';
+$lang['btn_cancel'] = 'Anuluj';
+$lang['btn_index'] = 'Indeks';
+$lang['btn_secedit'] = 'Edytuj';
+$lang['btn_login'] = 'Zaloguj';
+$lang['btn_logout'] = 'Wyloguj';
+$lang['btn_admin'] = 'Administracja';
+$lang['btn_update'] = 'Aktualizuj';
+$lang['btn_delete'] = 'Usuń';
+$lang['btn_back'] = 'Wstecz';
+$lang['btn_backlink'] = 'Odnośniki';
+$lang['btn_backtomedia'] = 'Powrót do wyboru pliku';
+$lang['btn_subscribe'] = 'Subskrybuj zmiany';
+$lang['btn_unsubscribe'] = 'Zaprzestań subskrypcji zmian';
+$lang['btn_subscribens'] = 'Subskrybuj zmiany w katalogu';
+$lang['btn_unsubscribens'] = 'Zaprzestań subskrypcji zmian w katalogu';
+$lang['btn_profile'] = 'Aktualizuj profil';
+$lang['btn_reset'] = 'Resetuj';
+$lang['btn_resendpwd'] = 'Prześlij nowe hasło';
+$lang['btn_draft'] = 'Edytuj szkic';
+$lang['btn_recover'] = 'Przywróć szkic';
+$lang['btn_draftdel'] = 'Usuń szkic';
+$lang['btn_revert'] = 'Przywróć';
+$lang['loggedinas'] = 'Zalogowany jako';
+$lang['user'] = 'Użytkownik';
+$lang['pass'] = 'Hasło';
+$lang['newpass'] = 'Nowe hasło';
+$lang['oldpass'] = 'Potwierdź aktualne hasło';
+$lang['passchk'] = 'Powtórz hasło';
+$lang['remember'] = 'Zapamiętaj';
+$lang['fullname'] = 'ImiÄ™ i nazwisko';
+$lang['email'] = 'E-mail';
+$lang['register'] = 'Zarejestruj siÄ™!';
+$lang['profile'] = 'Profil użytkownika';
+$lang['badlogin'] = 'Nazwa użytkownika lub hasło są nieprawidłowe.';
+$lang['minoredit'] = 'Mniejsze zmiany';
+$lang['draftdate'] = 'Czas zachowania szkicu';
+$lang['nosecedit'] = 'Strona została zmodyfikowana, sekcje zostały zmienione. Załadowano całą stronę.';
+$lang['regmissing'] = 'Wypełnij wszystkie pola.';
+$lang['reguexists'] = 'Użytkownik o tej nazwie już istnieje.';
+$lang['regsuccess'] = 'Utworzono użytkownika. Hasło zostało przesłane pocztą.';
+$lang['regsuccess2'] = 'Utworzono użytkownika.';
+$lang['regmailfail'] = 'Wystąpił błąd przy wysyłaniu hasła pocztą!';
+$lang['regbadmail'] = 'Adres e-mail jest nieprawidłowy!';
+$lang['regbadpass'] = 'Hasła nie są identyczne, spróbuj ponownie.';
+$lang['regpwmail'] = 'Twoje hasło do DokuWiki';
+$lang['reghere'] = 'Nie masz jeszcze konta? Zdobądź je';
+$lang['profna'] = 'To wiki nie pozwala na zmianÄ™ profilu.';
+$lang['profnochange'] = 'Żadnych zmian, nic do zrobienia.';
+$lang['profnoempty'] = 'Pusta nazwa lub adres e-mail nie dozwolone.';
+$lang['profchanged'] = 'Zaktualizowano profil użytkownika.';
+$lang['pwdforget'] = 'Nie pamiętasz hasła? Zdobądź nowe!';
+$lang['resendna'] = 'To wiki nie pozwala na powtórne przesyłanie hasła.';
+$lang['resendpwd'] = 'Prześlij nowe hasło dla';
+$lang['resendpwdmissing'] = 'Wypełnij wszystkie pola.';
+$lang['resendpwdnouser'] = 'Nie można znaleźć tego użytkownika w bazie danych.';
+$lang['resendpwdbadauth'] = 'Błędny kod autoryzacji! Upewnij się, że użyłeś(aś) właściwego odnośnika.';
+$lang['resendpwdconfirm'] = 'Prośba o potwierdzenie została przesłana pocztą.';
+$lang['resendpwdsuccess'] = 'Nowe hasło zostało wysłane pocztą.';
+$lang['license'] = 'Wszystkie treści w tym wiki, którym nie przyporządkowano licencji, podlegają licencji:';
+$lang['licenseok'] = 'Uwaga: edytując tę stronę zgadzasz się na publikowanie jej treści pod licencją:';
+$lang['searchmedia'] = 'Szukaj pliku o nazwie:';
+$lang['searchmedia_in'] = 'Szukaj w %s';
+$lang['txt_upload'] = 'Wybierz plik do wysłania';
+$lang['txt_filename'] = 'Nazwa pliku (opcjonalnie)';
+$lang['txt_overwrt'] = 'Nadpisać istniejący plik?';
+$lang['lockedby'] = 'Aktualnie zablokowane przez';
+$lang['lockexpire'] = 'Blokada wygasa';
+$lang['willexpire'] = 'Za minutę Twoja blokada tej strony wygaśnie.\nW celu uniknięcia konfliktów wyświetl podgląd aby odnowić blokadę.';
+$lang['notsavedyet'] = 'Nie zapisane zmiany zostaną utracone.\nCzy na pewno kontynuować?';
+$lang['rssfailed'] = 'Wystąpił błąd przy pobieraniu tych danych: ';
+$lang['nothingfound'] = 'Nic nie znaleziono.';
+$lang['mediaselect'] = 'Wysyłanie pliku';
+$lang['fileupload'] = 'Wysyłanie pliku';
+$lang['uploadsucc'] = 'Wysyłanie powiodło się!';
+$lang['uploadfail'] = 'Błąd wysyłania pliku. Czy prawa do katalogów są poprawne?';
+$lang['uploadwrong'] = 'Wysyłanie zabronione. Nie można wysłać plików z takim rozszerzeniem';
+$lang['uploadexist'] = 'Plik już istnieje, nie wykonano operacji.';
+$lang['uploadbadcontent'] = 'Typ pliku "%s" nie odpowiadał jego rozszerzeniu.';
+$lang['uploadspam'] = 'Plik zablokowany przez filtr antyspamowy.';
+$lang['uploadxss'] = 'Plik zablokowany ze względu na podejrzaną zawartość.';
+$lang['uploadsize'] = 'Plik jest za duży (maksymalny rozmiar %s)';
+$lang['deletesucc'] = 'Plik "%s" został usunięty.';
+$lang['deletefail'] = 'Plik "%s" nie został usunięty, sprawdź uprawnienia.';
+$lang['mediainuse'] = 'Plik "%s" nie został usunięty, ponieważ jest używany.';
+$lang['namespaces'] = 'Katalogi';
+$lang['mediafiles'] = 'Dostępne pliki';
+$lang['js']['searchmedia'] = 'Szukaj plików';
+$lang['js']['keepopen'] = 'Nie zamykaj okna po wyborze';
+$lang['js']['hidedetails'] = 'Ukryj szczegóły';
+$lang['js']['nosmblinks'] = 'Odnośniki do zasobów sieci Windows działają tylko w przeglądarce Internet Explorer.
+Możesz skopiować odnośnik.';
+$lang['js']['linkwiz'] = 'Tworzenie odnośników';
+$lang['js']['linkto'] = 'Link do';
+$lang['js']['del_confirm'] = 'Czy na pewno usunąć?';
+$lang['js']['mu_btn'] = 'Wyślij wiele plików na raz';
+$lang['mediausage'] = 'Użyj następującej składni w odnośniku do tego pliku:';
+$lang['mediaview'] = 'Pokaż oryginalny plik';
+$lang['mediaroot'] = 'główny';
+$lang['mediaupload'] = 'Umieść plik w aktualnym katalogu. Aby utworzyć podkatalogi, poprzedź nazwę pliku nazwami katalogów oddzielonymi dwukropkami.';
+$lang['mediaextchange'] = 'Rozszerzenie pliku zmieniono z .%s na .%s!';
+$lang['reference'] = 'Odnośniki do';
+$lang['ref_inuse'] = 'Ten plik nie może być usunięty, ponieważ jest używany na następujących stronach:';
+$lang['ref_hidden'] = 'Odnośniki mogą znajdować się na stronach, do których nie masz uprawnień.';
+$lang['hits'] = 'trafień';
+$lang['quickhits'] = 'Pasujące hasła';
+$lang['toc'] = 'Spis treści';
+$lang['current'] = 'aktualna';
+$lang['yours'] = 'Twoja wersja';
+$lang['diff'] = 'Pokaż różnice między wersjami';
+$lang['diff2'] = 'Pokaż różnice między zaznaczonymi wersjami';
+$lang['line'] = 'Linia';
+$lang['breadcrumb'] = 'Åšlad';
+$lang['youarehere'] = 'JesteÅ› tutaj';
+$lang['lastmod'] = 'ostatnio zmienione';
+$lang['by'] = 'przez';
+$lang['deleted'] = 'usunięto';
+$lang['created'] = 'utworzono';
+$lang['restored'] = 'przywrócono poprzednią wersję';
+$lang['external_edit'] = 'edycja zewnętrzna';
+$lang['summary'] = 'Opis zmian';
+$lang['noflash'] = 'Plugin <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> jest niezbędny do obejrzenia tej zawartości.';
+$lang['download'] = 'Pobierz zrzut';
+$lang['mail_newpage'] = 'Strona dodana:';
+$lang['mail_changed'] = 'Strona zmieniona:';
+$lang['mail_new_user'] = 'Nowy użytkownik:';
+$lang['mail_upload'] = 'Umieszczono plik:';
+$lang['qb_bold'] = 'Pogrubienie';
+$lang['qb_italic'] = 'Pochylenie';
+$lang['qb_underl'] = 'Podkreślenie';
+$lang['qb_code'] = 'Kod źródłowy';
+$lang['qb_strike'] = 'Przekreślenie';
+$lang['qb_h1'] = 'Nagłówek 1 stopnia';
+$lang['qb_h2'] = 'Nagłówek 2 stopnia';
+$lang['qb_h3'] = 'Nagłówek 3 stopnia';
+$lang['qb_h4'] = 'Nagłówek 4 stopnia';
+$lang['qb_h5'] = 'Nagłówek 5 stopnia';
+$lang['qb_h'] = 'Nagłówek';
+$lang['qb_hs'] = 'Wybierz nagłówek';
+$lang['qb_hplus'] = 'Nagłówek wyższego stopnia';
+$lang['qb_hminus'] = 'Nagłówek niższego stopnia';
+$lang['qb_hequal'] = 'Nagłówek tego samego stopnia';
+$lang['qb_link'] = 'Odnośnik wewnętrzny';
+$lang['qb_extlink'] = 'Odnośnik zewnętrzny';
+$lang['qb_hr'] = 'Linia pozioma';
+$lang['qb_ol'] = 'Numeracja';
+$lang['qb_ul'] = 'Wypunktowanie';
+$lang['qb_media'] = 'Dodaj obrazek lub inny plik';
+$lang['qb_sig'] = 'Wstaw podpis';
+$lang['qb_smileys'] = 'Emotikony';
+$lang['qb_chars'] = 'Znaki specjalne';
+$lang['upperns'] = 'Skok piętro wyżej';
+$lang['admin_register'] = 'Dodawanie użytkownika';
+$lang['metaedit'] = 'Edytuj metadane';
+$lang['metasaveerr'] = 'Zapis metadanych nie powiódł się';
+$lang['metasaveok'] = 'Metadane zapisano';
+$lang['img_backto'] = 'Wróć do';
+$lang['img_title'] = 'Tytuł';
+$lang['img_caption'] = 'Nagłówek';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nazwa pliku';
+$lang['img_fsize'] = 'Rozmiar';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Prawa autorskie';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Aparat';
+$lang['img_keywords'] = 'SÅ‚owa kluczowe';
+$lang['subscribe_success'] = 'Dodano %s do listy subskrypcji strony %s';
+$lang['subscribe_error'] = 'BÅ‚Ä…d przy dodawaniu %s do listy subskrypcji strony %s';
+$lang['subscribe_noaddress'] = 'Nie podałeś adresu e-mail przy rejestracji, nie możesz zostać dodany do listy subskrypcji.';
+$lang['unsubscribe_success'] = 'Usunięto %s z listy subskrypcji strony %s';
+$lang['unsubscribe_error'] = 'BÅ‚Ä…d przy usuwaniu %s z listy subskrypcji strony %s';
+$lang['authmodfailed'] = 'BÅ‚Ä…d uwierzytelnienia. Powiadom administratora tego wiki.';
+$lang['authtempfail'] = 'Uwierzytelnienie użytkownika jest w tej chwili niemożliwe. Jeśli ta sytuacja się powtórzy, powiadom administratora tego wiki.';
+$lang['i_chooselang'] = 'Wybierz język';
+$lang['i_installer'] = 'Instalator DokuWiki';
+$lang['i_wikiname'] = 'Nazwa Wiki';
+$lang['i_enableacl'] = 'Włącz mechanizm uprawnień ACL (zalecane)';
+$lang['i_superuser'] = 'Administrator';
+$lang['i_problems'] = 'Instalator napotkał poniższe problemy. Nie można kontynuować póki nie zostaną usunięte.';
+$lang['i_modified'] = 'Ze względów bezpieczeństwa, ten skrypt działa tylko z nową i niezmodyfikowaną instalacją DokuWiki.
+Aby uruchomić instalator ponownie, rozpakuj archiwum DokuWiki lub zapoznaj się z <a href="http://dokuwiki.org/install">instrukcją instalacji Dokuwiki</a>';
+$lang['i_funcna'] = 'Funkcja PHP <code>%s</code> jest niedostępna.';
+$lang['i_phpver'] = 'Wersja PHP <code>%s</code> jest niższa od wymaganej <code>%s</code>. Zaktualizuj instalację PHP.';
+$lang['i_permfail'] = 'DokuWiki nie ma prawa zapisu w katalogu <code>%s</code>. Zmień uprawnienia zapisu dla tego katalogu!';
+$lang['i_confexists'] = '<code>%s</code> już istnieje';
+$lang['i_writeerr'] = 'Nie można utworzyć <code>%s</code>. Sprawdź uprawnienia do katalogu lub pliku i stwórz plik ręcznie.';
+$lang['i_badhash'] = 'nierozpoznany lub zmodyfikowany plik dokuwiki.php (skrót=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - nieprawidłowa wartość lub jej brak';
+$lang['i_success'] = 'Konfiguracja pomyślnie zakończona. Możesz teraz usunąć plik install.php. Przejdź do <a href="doku.php">Twojego nowego DokuWiki</a>.';
+$lang['i_failure'] = 'Podczas zapisu plików konfiguracyjnych wystąpiły błędy. Musisz usunąć wszystkie problemy, zanim zaczniesz korzystać z <a href="doku.php">Twojego nowego DokuWiki</a>.';
+$lang['i_policy'] = 'Wstępna polityka uprawnień ACL';
+$lang['i_pol0'] = 'Otwarte Wiki (odczyt, zapis i dodawanie plików dla wszystkich)';
+$lang['i_pol1'] = 'Publiczne Wiki (odczyt dla wszystkich, zapis i dodawanie plików tylko dla zarejestrowanych użytkowników)';
+$lang['i_pol2'] = 'Zamknięte Wiki (odczyt, zapis i dodawanie plików tylko dla zarejestrowanych użytkowników)';
+$lang['i_retry'] = 'Spróbuj ponownie';
+$lang['mu_intro'] = 'Możesz tutaj wysłać wiele plików na raz. Kliknij przycisk "Przeglądaj" aby dodać je do kolejki. Kliknij "Wyślij" gdy skończysz.';
+$lang['mu_gridname'] = 'Nazwa pliku';
+$lang['mu_gridsize'] = 'Rozmiar';
+$lang['mu_gridstat'] = 'Stan';
+$lang['mu_namespace'] = 'Katalog';
+$lang['mu_browse'] = 'PrzeglÄ…daj';
+$lang['mu_toobig'] = 'za duży';
+$lang['mu_ready'] = 'gotowy do wysłania';
+$lang['mu_done'] = 'zakończono';
+$lang['mu_fail'] = 'nie powiodło się';
+$lang['mu_authfail'] = 'sesja wygasła';
+$lang['mu_progress'] = '@PCT@% wysłano';
+$lang['mu_filetypes'] = 'Dozwolone typy plików';
+$lang['mu_info'] = 'wysłanych plików.';
+$lang['mu_lasterr'] = 'Ostatni błąd:';
+$lang['recent_global'] = 'W tej chwili przeglądasz zmiany w katalogu <b>%s</b>. Możesz przejrzeć także <a href="%s">zmiany w całym wiki</a>.';
+$lang['years'] = '%d lat temu';
+$lang['months'] = '%d miesięcy temu';
+$lang['weeks'] = '%d tygodni temu';
+$lang['days'] = '%d dni temu';
+$lang['hours'] = '%d godzin temu';
+$lang['minutes'] = '%d minut temu';
+$lang['seconds'] = '%d sekund temu';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt
new file mode 100644
index 000000000..e3e05fefc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt
@@ -0,0 +1,3 @@
+====== Strona zablokowana ======
+
+Ta strona jest zablokowana do edycji przez innego użytkownika. Musisz zaczekać aż użytkownik zakończy redagowanie lub jego blokada wygaśnie.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt
new file mode 100644
index 000000000..b60427f4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt
@@ -0,0 +1,4 @@
+====== Logowanie ======
+
+Wprowadź nazwę użytkownika i hasło aby się zalogować. Twoja przeglądarka musi mieć włączoną obsługę ciasteczek (cookies).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt
new file mode 100644
index 000000000..1180966bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt
@@ -0,0 +1,18 @@
+Strona w Twoim DokuWiki została dodana lub zmieniona.
+Szczegółowe informacje:
+
+Data : @DATE@
+PrzeglÄ…darka : @BROWSER@
+Adres IP : @IPADDRESS@
+Nazwa DNS : @HOSTNAME@
+Stara wersja : @OLDPAGE@
+Nowa wersja : @NEWPAGE@
+Opis zmian : @SUMMARY@
+Użytkownik : @USER@
+
+@DIFF@
+
+
+--
+List został wygenerowany przez DokuWiki pod adresem
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt
new file mode 100644
index 000000000..532d3f4ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt
@@ -0,0 +1,4 @@
+====== Ta strona jeszcze nie istnieje ======
+
+Jesteś na stronie, która jeszcze nie istnieje. Jeśli masz wystarczające uprawnienia, możesz utworzyć tę stronę klikając ''utwórz stronę''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt
new file mode 100644
index 000000000..858e4a881
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt
@@ -0,0 +1,4 @@
+====== Nie ma takiej wersji ======
+
+Nie ma takiej wersji. Kliknij przycisk ''poprzednie wersje'', aby wyświetlić listę wszystkich wersji tej strony.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt
new file mode 100644
index 000000000..41a123cf3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt
@@ -0,0 +1,4 @@
+====== PodglÄ…d ======
+
+To jest podgląd edytowanej strony. Pamiętaj, że ta strona **nie** jest jeszcze zapisana!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt
new file mode 100644
index 000000000..f6ccca47e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt
@@ -0,0 +1,13 @@
+Witaj @FULLNAME@!
+
+Potwierdzenie prośby o nowe hasło dla konta @TITLE@ w wiki @DOKUWIKIURL@
+
+Jeśli to nie Ty prosiłeś(aś) o nowe hasło, zignoruj ten list.
+
+Aby potwierdzić prośbę o hasło, przejdź na następującą stronę.
+
+@CONFIRM@
+
+--
+List został wygenerowany przez DokuWiki pod adresem
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt
new file mode 100644
index 000000000..5f89fd93d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt
@@ -0,0 +1,2 @@
+Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt
new file mode 100644
index 000000000..65a776c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt
@@ -0,0 +1,5 @@
+====== Ostatnie zmiany ======
+
+Ostatnio zmienione strony.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt
new file mode 100644
index 000000000..91b761d15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt
@@ -0,0 +1,4 @@
+====== Rejestracja nowego użytkownika ======
+
+Wypełnij wszystkie pola formularza aby utworzyć nowe konto w tym wiki. Pamiętaj, żeby podać **poprawny adres e-mail**, ponieważ nowe hasło może zostać do Ciebie przesłane pocztą. Nazwa użytkownika powinna być zgodna z formatem [[doku>pagename|nazw stron]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt
new file mode 100644
index 000000000..18437fa0a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt
@@ -0,0 +1,15 @@
+Zarejestrował się nowy użytkownik.
+Szczegółowe informacje:
+
+Użytkownik : @NEWUSER@
+ImiÄ™ i nazwisko : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Data : @DATE@
+PrzeglÄ…darka : @BROWSER@
+Adres IP : @IPADDRESS@
+Nazwa DNS : @HOSTNAME@
+
+--
+List został wygenerowany przez DokuWiki pod adresem
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt
new file mode 100644
index 000000000..a7cac7442
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Przesyłanie nowego hasła ======
+
+Aby otrzymać nowe hasło, podaj nazwę Twojego konta w tym wiki. Prośba o potwierdzenie w postaci odnośnika zostanie Ci przesłana pocztą elektroniczną.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt
new file mode 100644
index 000000000..afe2b6478
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt
@@ -0,0 +1,4 @@
+====== Poprzednie wersje ======
+
+Poprzednie wersje tej strony. Aby przywrócić poprzednią wersję wybierz ją, rozpocznij edycję a potem zapisz.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt
new file mode 100644
index 000000000..61b9ffbf9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt
@@ -0,0 +1,5 @@
+====== Wyszukiwanie ======
+
+Wyniki wyszukiwania. Jeśli nie znaleziono szukanego hasła, możesz utworzyć nową stronę, której tytułem będzie poszukiwane hasło.
+
+===== Wyniki =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt
new file mode 100644
index 000000000..43e826ed5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt
@@ -0,0 +1,2 @@
+**To jest stara wersja strony!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt
new file mode 100644
index 000000000..f1d244a26
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt
@@ -0,0 +1,89 @@
+# Lista słów ignorowanych przy indeksowaniu treści.
+# W jednej linii powinno znajdować się tylko jedno słowo.
+# Przy edycji tego pliku pamiętaj o używaniu uniksowego końca linii (LF).
+# Nie ma potrzeby wpisywania słów krótszych niż 3 znaki, ponieważ one są zawsze ignorowane.
+# Lista oparta na danych ze strony http://www.ranks.nl/stopwords/
+aby
+ale
+bardziej
+bardzo
+bez
+bowiem
+był
+była
+było
+były
+będzie
+czy
+czyli
+dla
+dlatego
+gdy
+gdzie
+ich
+innych
+jak
+jako
+jednak
+jego
+jej
+jest
+jeszcze
+jeśli
+już
+kiedy
+kilka
+która
+które
+którego
+której
+który
+których
+którym
+którzy
+lub
+między
+mnie
+mogÄ…
+może
+można
+nad
+nam
+nas
+naszego
+naszych
+nawet
+nich
+nie
+nim
+niż
+oraz
+pod
+poza
+przed
+przede
+przez
+przy
+również
+siÄ™
+sobie
+swoje
+tak
+takie
+także
+tam
+tego
+tej
+ten
+też
+tych
+tylko
+tym
+wiele
+wielu
+więc
+wszystkich
+wszystkim
+wszystko
+właśnie
+zawsze
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt
new file mode 100644
index 000000000..76300177e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt
@@ -0,0 +1,17 @@
+Witaj!
+
+Strona @PAGE@ w wiki @TITLE@ została zmieniona.
+Szczegóły:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Aby zaprzestać subskrypcji zmian tej strony zaloguj się na
+@DOKUWIKIURL@ a następnie przejdź do strony
+@NEWPAGE@
+i wybierz 'zaprzestań subskrypcji zmian'.
+
+--
+List został wygenerowany przez DokuWiki pod adresem
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt
new file mode 100644
index 000000000..aa80f4cdf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Aktualizacja profilu użytkownika ======
+
+Wystarczy, że wypełnisz tylko te pola, które chcesz zmienić. Nie możesz zmienić nazwy użytkownika.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt
new file mode 100644
index 000000000..e76ec80e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt
@@ -0,0 +1,16 @@
+Umieszczono nowy plik.
+
+Szczegóły:
+
+Plik : @MEDIA@
+Data : @DATE@
+PrzeglÄ…darka : @BROWSER@
+Adres IP : @IPADDRESS@
+Nazwa DNS : @HOSTNAME@
+Rozmiar : @SIZE@
+Typ MIME : @MIME@
+Użytkownik : @USER@
+
+--
+List został wygenerowany przez DokuWiki pod adresem
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt
new file mode 100644
index 000000000..09edb25dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt
@@ -0,0 +1,4 @@
+====== Blokowanie niedozwolonych treści i spamu ======
+
+Twoje zmiany **nie** zostały zapisane, ponieważ zawierają niedozwolone słowa. Jeśli próbowałeś(aś) umieścić niedozwolone treści to wstydź się!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt
new file mode 100644
index 000000000..f8be56e60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt
@@ -0,0 +1,4 @@
+====== Administração ======
+
+Abaixo você encontra uma lista das tarefas administrativas disponíveis no DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt
new file mode 100644
index 000000000..3eac7af53
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugins Adicionais ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt
new file mode 100644
index 000000000..fce9dba54
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt
@@ -0,0 +1,4 @@
+====== Links reversos ======
+
+Esta é uma lista de todas as páginas que apresentam links para a página atual.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt
new file mode 100644
index 000000000..53d9afac7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt
@@ -0,0 +1,5 @@
+====== Existe uma nova versão ======
+
+Existe uma versão mais nova do documento que você editou. Isso acontece quando outro usuário modifica o documento enquanto você o está editando.
+
+Examine as diferenças mostradas abaixo atentamente e então decida qual versão deve permanecer. Se você selecionar ''Salvar'', sua versão será salva. Pressione ''Cancelar'' para manter a versão atual.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt
new file mode 100644
index 000000000..d7e423f42
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt
@@ -0,0 +1,3 @@
+====== Permissão Negada ======
+
+Desculpe, você não tem permissões suficientes para continuar. Por acaso esqueceu de autenticar-se?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt
new file mode 100644
index 000000000..517d9f275
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt
@@ -0,0 +1,3 @@
+====== Diferenças ======
+
+Aqui você vê as diferenças entre duas revisões dessa página.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt
new file mode 100644
index 000000000..b3d345cca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt
@@ -0,0 +1,5 @@
+====== Rascunho encontrado ======
+
+A sua última sessão de edição não foi concluída corretamente. O DokuWiki automaticamente salvou um rascunho durante o seu trabalho, que você pode usar agora para continuar a sua edição. Abaixo você pode ver os dados que foram salvos na sua última sessão.
+
+Por favor, escolha se você quer //recuperar// sua sessão de edição perdida, //excluir// o rascunho salvo automaticamente ou //cancelar// o processo de edição. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt
new file mode 100644
index 000000000..113fb8ede
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt
@@ -0,0 +1,2 @@
+Edite a página e clique em ''Salvar''. Veja [[wiki:syntax|aqui]] a sintaxe do Wiki. Por favor, edite a página apenas se você puder **aprimorá-la**. Se você deseja testar alguma coisa, faça-o no [[playground:playground|playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt
new file mode 100644
index 000000000..c7aa47878
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt
@@ -0,0 +1,4 @@
+**Você carregou uma revisão antiga desse documento!** Se você salvá-la, irá criar uma nova versão em esses dados.
+----
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt
new file mode 100644
index 000000000..a7d17a2bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt
@@ -0,0 +1,3 @@
+====== Ãndice ======
+
+Esse é um índice de todas as páginas disponíveis, ordenadas por [[doku>namespaces|espaços de nomes]]. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html
new file mode 100644
index 000000000..b915f0701
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html
@@ -0,0 +1,7 @@
+<p>Essa página irá auxiliá-lo na instalação e configuração do <a href="http://dokuwiki.org">DokuWiki</a>. Você encontra mais informações sobre esse instalador na sua <a href="http://dokuwiki.org/installer">página de documentação</a>.</p>
+
+<p>O DokuWiki utiliza arquivos em texto simples para o armazenamento das páginas wiki e de outras informações associadas a essas páginas (ex.: imagens, índices de pesquisa, revisões antigas, etc.). Para que o DokuWiki funcione corretamente, ele <strong>precisa</strong> ter permissão de escrita aos diretórios onde esses arquivos ficarão armazenados. Esse instalador não tem capacidade de configurar as permissões de diretório. Isso normalmente é feito usando-se a linha de comando ou através do FTP ou do painel de controle da sua hospedagem (ex.: cPanel).</p>
+
+<p>O instalador irá definir as configurações da <acronym title="access control list (lista de controle de acessos)">ACL</acronym> do seu DokuWiki, o que permitirá a autenticação do administrador e o acesso ao menu de administração do sistema. Esse menu é utilizado para instalar plug-ins, alterar as configurações do ambiente e gerenciar usuários e acessos às páginas do wiki. Isso não é necessário para o funcionamento do DokuWiki, mas irá torna sua administração mais simples.</p>
+
+<p>Usuários experientes ou que necessitem efetuar configurações especiais devem utilizar os seguintes links, com instruções detalhadas da <a href="http://dokuwiki.org/install">instalação</a> e da <a href="http://dokuwiki.org/config">configuração</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php
new file mode 100644
index 000000000..ed7224c14
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php
@@ -0,0 +1,247 @@
+<?php
+/**
+ * Brazilian Portuguese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Luis Fernando Enciso <lfenciso@certto.com.br>
+ * @author Alauton/Loug
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Lucien Raven <lucienraven@yahoo.com.br>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Flávio Veras <flaviove@gmail.com>
+ * @author Jeferson Propheta <jeferson.propheta@gmail.com>
+ * @author jair.henrique@gmail.com
+ * @author Luis Dantas <luis@dantas.com>
+ * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Luis Dantas <luisdantas@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Editar esta página';
+$lang['btn_source'] = 'Mostrar código fonte';
+$lang['btn_show'] = 'Mostrar página';
+$lang['btn_create'] = 'Criar esta página';
+$lang['btn_search'] = 'Pesquisar';
+$lang['btn_save'] = 'Salvar';
+$lang['btn_preview'] = 'Visualizar';
+$lang['btn_top'] = 'Voltar ao topo';
+$lang['btn_newer'] = '<< mais recente';
+$lang['btn_older'] = 'menos recente >>';
+$lang['btn_revs'] = 'Revisões anteriores';
+$lang['btn_recent'] = 'Alterações recentes';
+$lang['btn_upload'] = 'Enviar';
+$lang['btn_cancel'] = 'Cancelar';
+$lang['btn_index'] = 'Ãndice';
+$lang['btn_secedit'] = 'Editar';
+$lang['btn_login'] = 'Autenticar-se';
+$lang['btn_logout'] = 'Sair';
+$lang['btn_admin'] = 'Administrar';
+$lang['btn_update'] = 'Atualizar';
+$lang['btn_delete'] = 'Excluir';
+$lang['btn_back'] = 'Voltar';
+$lang['btn_backlink'] = 'Links reversos';
+$lang['btn_backtomedia'] = 'Voltar à seleção do arquivo de mídia';
+$lang['btn_subscribe'] = 'Monitorar alterações na página';
+$lang['btn_unsubscribe'] = 'Cancelar monitoramento da página';
+$lang['btn_subscribens'] = 'Monitorar alterações no espaço de nomes';
+$lang['btn_unsubscribens'] = 'Cancelar monitoramento do espaço de nomes';
+$lang['btn_profile'] = 'Atualizar o perfil';
+$lang['btn_reset'] = 'Limpar';
+$lang['btn_resendpwd'] = 'Enviar uma nova senha';
+$lang['btn_draft'] = 'Editar o rascunho';
+$lang['btn_recover'] = 'Recuperar o rascunho';
+$lang['btn_draftdel'] = 'Excluir o rascunho';
+$lang['btn_revert'] = 'Restaure';
+$lang['loggedinas'] = 'Autenticado(a) como';
+$lang['user'] = 'Nome de usuário';
+$lang['pass'] = 'Senha';
+$lang['newpass'] = 'Nova senha';
+$lang['oldpass'] = 'Confirme a senha atual';
+$lang['passchk'] = 'mais uma vez';
+$lang['remember'] = 'Lembre-se de mim';
+$lang['fullname'] = 'Nome completo';
+$lang['email'] = 'E-mail';
+$lang['register'] = 'Registrar';
+$lang['profile'] = 'Perfil do usuário';
+$lang['badlogin'] = 'Desculpe, mas o nome de usuário ou a senha estão incorretos.';
+$lang['minoredit'] = 'Alterações mínimas';
+$lang['draftdate'] = 'O rascunho foi salvo automaticamente em';
+$lang['nosecedit'] = 'A página foi modificada nesse intervalo de tempo. Como a informação da seção estava desatualizada, foi carregada a página inteira.';
+$lang['regmissing'] = 'Desculpe, mas você precisa preencher todos os campos.';
+$lang['reguexists'] = 'Desculpe, mas já existe um usuário com esse nome.';
+$lang['regsuccess'] = 'O usuário foi criado e a senha enviada para seu e-mail.';
+$lang['regsuccess2'] = 'O usuário foi criado.';
+$lang['regmailfail'] = 'Aparentemente ocorreu um erro no envio da senha. Por favor, entre em contato com o administrador!';
+$lang['regbadmail'] = 'O endereço de e-mail fornecido é, aparentemente, inválido - se você acha que isso é um erro, entre em contato com o administrador';
+$lang['regbadpass'] = 'As senhas digitadas não são idênticas. Por favor, tente novamente.';
+$lang['regpwmail'] = 'A sua senha do DokuWiki';
+$lang['reghere'] = 'Ainda não tem uma conta? Cadastre-se para obter uma.';
+$lang['profna'] = 'Esse wiki não suporta modificações do perfil.';
+$lang['profnochange'] = 'Sem alterações, nada para fazer.';
+$lang['profnoempty'] = 'Não são permitidos nomes ou endereços de e-mail em branco.';
+$lang['profchanged'] = 'O perfil do usuário foi atualizado com sucesso.';
+$lang['pwdforget'] = 'Esqueceu sua senha? Obtenha uma nova.';
+$lang['resendna'] = 'Esse wiki não tem suporte para o reenvio de senhas.';
+$lang['resendpwd'] = 'Enviar a nova senha para';
+$lang['resendpwdmissing'] = 'Desculpe, você deve preencher todos os campos.';
+$lang['resendpwdnouser'] = 'Desculpe, não foi possível encontrar esse usuário no nosso banco de dados.';
+$lang['resendpwdbadauth'] = 'Desculpe, esse código de autorização é inválido. Certifique-se de que você usou o link de confirmação inteiro.';
+$lang['resendpwdconfirm'] = 'Um link de confirmação foi enviado por e-mail.';
+$lang['resendpwdsuccess'] = 'Sua nova senha foi enviada por e-mail.';
+$lang['license'] = 'Exceto onde for informado ao contrário, o conteúdo neste wiki está sob a seguinte licença:';
+$lang['licenseok'] = 'Observe: editando esta página você aceita disponibilizar o seu conteúdo sob a seguinte licença:';
+$lang['txt_upload'] = 'Selecione o arquivo a ser enviado';
+$lang['txt_filename'] = 'Enviar como (opcional)';
+$lang['txt_overwrt'] = 'Substituir o arquivo existente';
+$lang['lockedby'] = 'Atualmente bloqueada por';
+$lang['lockexpire'] = 'O bloqueio expira em';
+$lang['willexpire'] = 'O seu bloqueio de edição deste página irá expirar em um minuto.\nPara evitar conflitos de edição, clique no botão de visualização para reiniciar o temporizador de bloqueio.';
+$lang['notsavedyet'] = 'As alterações não salvas serão perdidas.\nDeseja realmente continuar?';
+$lang['rssfailed'] = 'Ocorreu um erro durante a atualização dessa fonte: ';
+$lang['nothingfound'] = 'Não foi encontrado nada.';
+$lang['mediaselect'] = 'Arquivos de mídia';
+$lang['fileupload'] = 'Envio de arquivo de mídia';
+$lang['uploadsucc'] = 'O envio foi efetuado com sucesso';
+$lang['uploadfail'] = 'Não foi possível enviar o arquivo. Será algum problema com as permissões?';
+$lang['uploadwrong'] = 'O envio foi bloqueado. Essa extensão de arquivo é proibida!';
+$lang['uploadexist'] = 'O arquivo já existe. Não foi feito nada.';
+$lang['uploadbadcontent'] = 'O conteúdo enviado não corresponde à extensão do arquivo %s.';
+$lang['uploadspam'] = 'O envio foi bloqueado pela lista negra de spams.';
+$lang['uploadxss'] = 'O envio foi bloqueado devido à possibilidade do seu conteúdo ser malicioso.';
+$lang['uploadsize'] = 'O arquivo transmitido era grande demais. (max. %s)';
+$lang['deletesucc'] = 'O arquivo "%s" foi excluído.';
+$lang['deletefail'] = 'Não foi possível excluir "%s" - verifique as permissões.';
+$lang['mediainuse'] = 'O arquivo "%s" não foi excluído - ele ainda está em uso.';
+$lang['namespaces'] = 'Espaços de nome';
+$lang['mediafiles'] = 'Arquivos disponíveis em';
+$lang['js']['keepopen'] = 'Manter a janela aberta na seleção';
+$lang['js']['hidedetails'] = 'Esconder detalhes';
+$lang['js']['nosmblinks'] = 'Atalhos para pastas compartilhadas do Windows funcionam apenas no Microsoft Internet Explorer.
+Entretanto, você ainda pode copiar e colar o atalho.';
+$lang['js']['linkto'] = 'Link para:';
+$lang['js']['del_confirm'] = 'Deseja realmente excluir o(s) item(ns) selecionado(s)?';
+$lang['js']['mu_btn'] = 'Enviar vários arquivos de uma vez';
+$lang['mediausage'] = 'Use a seguinte sintaxe para referenciar esse arquivo:';
+$lang['mediaview'] = 'Ver o arquivo original';
+$lang['mediaroot'] = 'raiz';
+$lang['mediaupload'] = 'Envie um arquivo para o espaço de nomes atual aqui. Para criar subespaços de nomes, preponha-os ao nome do arquivo no parâmetro "Enviar como", separados por vírgulas.';
+$lang['mediaextchange'] = 'A extensão do arquivo mudou de .%s para .%s!';
+$lang['reference'] = 'Referências para';
+$lang['ref_inuse'] = 'O arquivo não pode ser excluído, porque ele ainda está sendo utilizado nas seguintes páginas:';
+$lang['ref_hidden'] = 'Algumas referências estão em páginas que você não tem permissão para ler';
+$lang['hits'] = 'Resultados';
+$lang['quickhits'] = 'Nomes de páginas coincidentes';
+$lang['toc'] = 'Tabela de conteúdos';
+$lang['current'] = 'atual';
+$lang['yours'] = 'Sua versão';
+$lang['diff'] = 'Mostrar diferenças com a revisão atual';
+$lang['diff2'] = 'Mostrar diferenças entre as revisões selecionadas';
+$lang['line'] = 'Linha';
+$lang['breadcrumb'] = 'Visitou';
+$lang['youarehere'] = 'Você está aqui';
+$lang['lastmod'] = 'Última modificação';
+$lang['by'] = 'por';
+$lang['deleted'] = 'removida';
+$lang['created'] = 'criada';
+$lang['restored'] = 'revisão anterior restaurada';
+$lang['external_edit'] = 'edição externa';
+$lang['summary'] = 'Resumo da edição';
+$lang['noflash'] = 'O <a href="http://www.adobe.com/products/flashplayer/">plug-in Adobe Flash</a> é necessário para exibir este conteúdo.';
+$lang['mail_newpage'] = 'página adicionada:';
+$lang['mail_changed'] = 'página modificada:';
+$lang['mail_new_user'] = 'novo usuário:';
+$lang['mail_upload'] = 'arquivo enviado:';
+$lang['qb_bold'] = 'Texto em negrito';
+$lang['qb_italic'] = 'Texto em itálico';
+$lang['qb_underl'] = 'Texto sublinhado';
+$lang['qb_code'] = 'Texto de código';
+$lang['qb_strike'] = 'Texto riscado';
+$lang['qb_h1'] = 'Cabeçalho de nível 1';
+$lang['qb_h2'] = 'Cabeçalho de nível 2';
+$lang['qb_h3'] = 'Cabeçalho de nível 3';
+$lang['qb_h4'] = 'Cabeçalho de nível 4';
+$lang['qb_h5'] = 'Cabeçalho de nível 5';
+$lang['qb_h'] = 'Cabeçalho';
+$lang['qb_link'] = 'Link interno';
+$lang['qb_extlink'] = 'Link externo';
+$lang['qb_hr'] = 'Linha horizontal';
+$lang['qb_ol'] = 'Item de lista ordenada';
+$lang['qb_ul'] = 'Item de lista não ordenada';
+$lang['qb_media'] = 'Adicionar imagens e/ou outros arquivos';
+$lang['qb_sig'] = 'Inserir assinatura';
+$lang['qb_smileys'] = 'Carinhas';
+$lang['qb_chars'] = 'Caracteres especiais';
+$lang['admin_register'] = 'Adicionar novo usuário';
+$lang['metaedit'] = 'Editar metadados';
+$lang['metasaveerr'] = 'Não foi possível escrever os metadados';
+$lang['metasaveok'] = 'Os metadados foram salvos';
+$lang['img_backto'] = 'Voltar para';
+$lang['img_title'] = 'Título';
+$lang['img_caption'] = 'Descrição';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nome do arquivo';
+$lang['img_fsize'] = 'Tamanho';
+$lang['img_artist'] = 'Fotógrafo';
+$lang['img_copyr'] = 'Direitos autorais';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Câmera';
+$lang['img_keywords'] = 'Palavras-chave';
+$lang['subscribe_success'] = '%s foi adicionado à lista de monitoramento de %s';
+$lang['subscribe_error'] = 'Ocorreu um erro ao tentar adicionar %s à lista de monitoramento de %s';
+$lang['subscribe_noaddress'] = 'Não existe nenhum endereço de e-mail associado ao seu usuário, você não pode ser adicionado à lista de monitoramento.';
+$lang['unsubscribe_success'] = '%s foi removido da lista de monitoramento de %s';
+$lang['unsubscribe_error'] = 'Ocorreu um erro ao tentar remover %s da lista de monitoramento de %s';
+$lang['authmodfailed'] = 'A configuração da autenticação de usuário está com problemas. Por favor, informe ao administrador do wiki.';
+$lang['authtempfail'] = 'A autenticação de usuários está temporariamente desabilitada. Se essa situação persistir, por favor, informe ao administrador do Wiki.';
+$lang['i_chooselang'] = 'Selecione o seu idioma';
+$lang['i_installer'] = 'Instalador do DokuWiki';
+$lang['i_wikiname'] = 'Nome do Wiki';
+$lang['i_enableacl'] = 'Habilitar Lista de Controle de Acessos (recomendado)';
+$lang['i_superuser'] = 'Superusuário';
+$lang['i_problems'] = 'O instalador encontrou alguns problemas, indicados abaixo. Você não pode continuar até corrigi-los.';
+$lang['i_modified'] = 'Por questões de segurança, esse script funcionará apenas em uma instalação nova e não modificada do DokuWiki.
+Você pode extrair novamente os arquivos do pacote original ou consultar as <a href="http://dokuwiki.org/install">instruções de instalação do DokuWiki</a>.';
+$lang['i_funcna'] = 'A função PHP <code>%s</code> não está disponível. O seu host a mantém desabilitada por algum motivo?';
+$lang['i_phpver'] = 'A sua versão do PHP (<code>%s</code>) é inferior à necessária (<code>%s</code>). Você precisa atualizar a sua instalação do PHP.';
+$lang['i_permfail'] = 'O DokuWiki não tem permissão de escrita em <code>%s</code>. Você precisa corrigir as configurações de permissão nesse diretório!';
+$lang['i_confexists'] = '<code>%s</code> já existe';
+$lang['i_writeerr'] = 'Não foi possível criar <code>%s</code>. É necessário checar as permissões de arquivos/diretórios e criar o arquivo manualmente.';
+$lang['i_badhash'] = 'dokuwiki.php não reconhecido ou modificado (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valor ilegal ou em branco';
+$lang['i_success'] = 'A configuração terminou com sucesso. Agora você deve excluir o arquivo install.php. Conheça o seu <a href="doku.php">novo DokuWiki</a>!';
+$lang['i_failure'] = 'Ocorreram alguns erros durante a escrita dos arquivos de configuração. É necessário corrigi-los manualmente antes de usar seu <a href="doku.php">novo DokuWiki</a>';
+$lang['i_policy'] = 'Política inicial de permissões';
+$lang['i_pol0'] = 'Wiki aberto (leitura, escrita e envio de arquivos por todos)';
+$lang['i_pol1'] = 'Wiki público (leitura por todos, escrita e envio de arquivos por usuários registrados)';
+$lang['i_pol2'] = 'Wiki fechado (leitura, escrita e envio de arquivos somente por usuários registrados)';
+$lang['i_retry'] = 'Tentar novamente';
+$lang['mu_intro'] = 'Aqui você pode enviar vários arquivos de uma só vez. Clique no botão de navegação e adicione-os à fila. Pressione Enviar quando estiver pronto.';
+$lang['mu_gridname'] = 'Nome do arquivo';
+$lang['mu_gridsize'] = 'Tamanho';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Espaço de nomes';
+$lang['mu_browse'] = 'Navegar';
+$lang['mu_toobig'] = 'muito grande';
+$lang['mu_ready'] = 'pronto para enviar';
+$lang['mu_done'] = 'completo';
+$lang['mu_fail'] = 'falhou';
+$lang['mu_authfail'] = 'a sessão expirou';
+$lang['mu_progress'] = '@PCT@% enviado';
+$lang['mu_filetypes'] = 'Tipos de arquivo permitidos';
+$lang['mu_info'] = 'arquivos enviados.';
+$lang['mu_lasterr'] = 'Erro mais recente:';
+$lang['recent_global'] = 'Você está observando as alterações dentro do espaço de nomes <b>%s</b>. Também é possível ver as <a href="%s">modificações recentes no wiki inteiro</a>.';
+$lang['years'] = '%d anos atrás';
+$lang['months'] = '%d meses atrás';
+$lang['weeks'] = '%d semanas atrás';
+$lang['days'] = '%d dias atrás';
+$lang['hours'] = '%d horas atrás';
+$lang['minutes'] = '%d minutos atrás';
+$lang['seconds'] = '%d segundos atrás';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt
new file mode 100644
index 000000000..70658cba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt
@@ -0,0 +1,3 @@
+====== Página bloqueada ======
+
+Essa página está bloqueada para edição por outro usuário. Você tem que esperar até que esse usuário termine a edição ou que o bloqueio expire.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt
new file mode 100644
index 000000000..23215e16c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt
@@ -0,0 +1,3 @@
+====== Autenticação ======
+
+Você não está autenticado. Digite as seus dados de usuário abaixo para entrar no sistema. É necessário habilitar os //cookies// no seu navegador para que isso funcione.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt
new file mode 100644
index 000000000..e52535bf0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt
@@ -0,0 +1,17 @@
+Uma página em seu DokuWiki foi adicionada ou alterada. Aqui estão os detalhes:
+
+Data: @DATE@
+Navegador: @BROWSER@
+Endereço IP: @IPADDRESS@
+Nome do host: @HOSTNAME@
+Revisão antiga: @OLDPAGE@
+Nova revisão: @NEWPAGE@
+Resumo da edição: @SUMMARY@
+Usuário: @USER@
+
+@DIFF@
+
+
+--
+Essa mensagem foi gerada pelo DokuWiki em
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt
new file mode 100644
index 000000000..77ba49fa5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt
@@ -0,0 +1,3 @@
+====== Esse tópico ainda não existe ======
+
+Você clicou em um link para um tópico que ainda não existe. Se for permitido, você poderá criá-lo usando o botão ''Criar essa página''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt
new file mode 100644
index 000000000..19024dcf7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt
@@ -0,0 +1,3 @@
+====== Essa revisão não existe ======
+
+A revisão especificada não existe. Utilize o botão ''Revisões anteriores'' para uma listagem das revisões anteriores deste documento.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt
new file mode 100644
index 000000000..efdc8f7f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt
@@ -0,0 +1,3 @@
+====== Visualização ======
+
+Essa é uma visualização de como será a aparência do seu texto. Lembre-se: ele ainda **não foi gravado**!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt
new file mode 100644
index 000000000..2a7c88531
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt
@@ -0,0 +1,13 @@
+Olá @FULLNAME@!
+
+Alguém requisitou um nova senha para o seu usuário @TITLE@ em @DOKUWIKIURL@.
+
+Se não foi você quem fez essa requisição, simplesmente ignore essa mensagem.
+
+Se você realmente deseja receber uma nova senha, por favor, utilize o link abaixo, para confirmar sua requisição.
+
+@CONFIRM@
+
+--
+Essa mensagem foi gerada pelo DokuWiki em
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt
new file mode 100644
index 000000000..897155eed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt
@@ -0,0 +1 @@
+Essa página está em modo somente de leitura. Você pode visualizar a fonte, mas não alterá-la. Informe-se com o administrador do Wiki, caso você ache que isso está incorreto.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt
new file mode 100644
index 000000000..988f235b4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt
@@ -0,0 +1,4 @@
+====== Alterações Recentes ======
+
+As seguintes páginas foram alteradas recentemente.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt
new file mode 100644
index 000000000..431feca98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt
@@ -0,0 +1,4 @@
+====== Registre-se como um novo usuário ======
+
+Preencha todas as informações abaixo para criar uma nova conta nesse Wiki. Certifique-se de que você forneceu um **endereço de e-mail válido** - se não for pedido que você entre com uma senha aqui, ela será enviada para esse endereço. O nome de usuário deve ser um [[doku>pagename|nome de página]] válido.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt
new file mode 100644
index 000000000..9bb6a00ba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt
@@ -0,0 +1,14 @@
+Foi registrado um novo usuário. Seus detalhes são:
+
+Nome de usuário: @NEWUSER@
+Nome completo: @NEWNAME@
+E-mail: @NEWEMAIL@
+
+Data: @DATE@
+Navegador: @BROWSER@
+Endereço IP: @IPADDRESS@
+Nome do host: @HOSTNAME@
+
+--
+Essa mensagem foi gerada pelo DokuWiki em
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt
new file mode 100644
index 000000000..b74713f0f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Enviar nova senha ======
+
+Por favor, digite o seu nome de usuário no formulário abaixo para requisitar uma nova senha para a sua conta nesse wiki. O link de confirmação será enviado para o endereço de e-mail que você forneceu. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt
new file mode 100644
index 000000000..1c174dcb0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt
@@ -0,0 +1,4 @@
+====== Revisões anteriores ======
+
+Essas são as revisões anteriores desse documento. Para reverter a uma revisão antiga, selecione-a abaixo, clique em ''Editar esta página'' e salve-a.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt
new file mode 100644
index 000000000..2fba3afe9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt
@@ -0,0 +1,5 @@
+====== Pesquisa ======
+
+Você pode encontrar os resultados da sua pesquisa abaixo. Se você não encontrou o que está procurando, pode criar ou editar a página com o nome que você especificou, usando o botão apropriado.
+
+===== Resultados =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt
new file mode 100644
index 000000000..89d9cad5a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt
@@ -0,0 +1,2 @@
+**Essa é uma revisão anterior do documento!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt
new file mode 100644
index 000000000..c781ffbf2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt
@@ -0,0 +1,55 @@
+# Essa é uma lista de palavras que o indexador ignora, uma palavra por linha
+# Ao editar esse arquivo, certifique-se de usar terminações de linha UNIX (newline simples)
+# Não há necessidade de incluir palavras menores que 3 caracteres - elas já são ignoradas por padrão
+# Essa lista é baseada na encontrada em http://www.ranks.nl/stopwords/portugese.html
+acerca
+algum
+alguma
+algumas
+alguns
+ambos
+antes
+após
+aquela
+aquelas
+aquele
+aqueles
+até
+bem
+bom
+cada
+com
+como
+das
+desde
+dos
+enquanto
+então
+esta
+este
+estas
+estes
+essa
+essas
+esse
+esses
+isso
+isto
+mas
+mesmo
+onde
+para
+pelo
+por
+qual
+quando
+que
+quem
+sem
+somente
+tal
+também
+uma
+umas
+uns
+www \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt
new file mode 100644
index 000000000..157196c15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt
@@ -0,0 +1,24 @@
+Olá!
+
+A página @PAGE@, no wiki @TITLE@ foi modificada.
+Aqui estão as mudanças:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Data : @DATE@
+Usuário : @USER@
+Resumo da edição: @SUMMARY@
+Revisão antiga: @OLDPAGE@
+Revisão nova: @NEWPAGE@
+
+Para cancelar as notificações dessa página, identifique-se em
+@DOKUWIKIURL@, vá até
+@NEWPAGE@
+e cancele o monitoramento das alterações da página e/ou do
+espaço de nomes.
+
+--
+Essa mensagem foi gerada pelo DokuWiki em
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt
new file mode 100644
index 000000000..b3f62f396
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Atualize o perfil da sua conta ======
+
+Você precisa preencher somente os campos que você deseja alterar. Você não pode alterar o seu nome de usuário.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt
new file mode 100644
index 000000000..a3ac9bac7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt
@@ -0,0 +1,14 @@
+Um arquivo foi enviado para o seu DokuWiki. Os detalhes são:
+
+Arquivo: @MEDIA@
+Data: @DATE@
+Navegador: @BROWSER@
+Endereço IP: @IPADDRESS@
+Nome do host: @HOSTNAME@
+Tamanho: @SIZE@
+Tipo MIME: @MIME@
+Usuário: @USER@
+
+--
+Essa mensagem foi gerada pelo DokuWiki em
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt
new file mode 100644
index 000000000..c2c9cbdb0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt
@@ -0,0 +1,4 @@
+====== Bloqueio de SPAM ======
+
+Suas modificações **não** foram salvas porque elas contém uma ou mais palavras bloqueadas. Se você tentou enviar //spam// para o //wiki//, isso é feio, muito feio! Agora, se você acha que esse bloqueio foi indevido, por favor entre em contato com o administrador desse wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt
new file mode 100644
index 000000000..fccd9ca33
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt
@@ -0,0 +1,5 @@
+====== Administração ======
+
+Esta é a lista de tarefas de Administração permitidas pelo DokuWiki.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt
new file mode 100644
index 000000000..3eac7af53
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugins Adicionais ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt
new file mode 100644
index 000000000..e78ddf874
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt
@@ -0,0 +1,4 @@
+====== Backlinks ======
+
+Esta é uma lista de todos os documentos que apresentam ligações ao documento corrente.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt
new file mode 100644
index 000000000..d2af1fe11
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt
@@ -0,0 +1,9 @@
+====== Conflito de Edição ======
+
+**Atenção**: Existe uma versão mais recente do que a versão usada no começo da sua edição. Isto acontece quando outra pessoa editou este documento entretanto e já gravou as alterações efectuadas.
+
+Por favor, examine todas as diferenças mostradas abaixo com atenção, e decida qual a versão que deverá ser tornada a mais actual: * Se escolher <Gravar> a sua versão será sobreposta à versão editada pela outra pessoa, que será perdida. * Se escolher <Cancelar> a versão editada pela outra pessoa será a versão final, e a sua será perdida.
+
+**Nota**: Sem que efectue a consolidação das alterações de ambas as revisões ao documento irá sempre perder uma das versões.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt
new file mode 100644
index 000000000..71355b01f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt
@@ -0,0 +1,5 @@
+====== Permissão Negada ======
+
+Não possui direitos e permissões suficientes para continuar. Talvez se tenha esquecido de entrar em sessão?
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt
new file mode 100644
index 000000000..e27640aa8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt
@@ -0,0 +1,5 @@
+====== Diferenças ======
+
+Esta página mostra as diferenças entre a revisão do documento que escolheu e a versão actual.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt
new file mode 100644
index 000000000..1baf95c1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt
@@ -0,0 +1,7 @@
+====== Rascunho encontrado ======
+
+A sessão referente à última edição desta página não terminou correctamente. Foi guardado automaticamente um rascunho durante a edição que pode ou não usar para continuar a edição. Abaixo pode ver os dados guardados da última sessão.
+
+Por favor, decida se quer **recuperar** os dados guardados, **remover** o rascunho** ou **cancelar** o processo de edição corrente.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt
new file mode 100644
index 000000000..2fa596e29
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt
@@ -0,0 +1,4 @@
+Edite o documento e clique no botão <Gravar>. Reveja a [[wiki:syntax|sintaxe]] das regras de formatação do texto.
+
+Por favor, altere o conteúdo deste documento apenas quando puder **melhorá-lo**.\\ Se pretende testar os seus conhecimentos no uso deste motor Wiki, realize os seus testes no [[playground:playground | Recreio]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt
new file mode 100644
index 000000000..9845a6915
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt
@@ -0,0 +1,5 @@
+**Atenção**: Carregou uma revisão antiga do documento!
+
+Se gravar esta revisão irá criar uma nova versão actual do documento com este conteúdo, que substituirá a versão actual.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt
new file mode 100644
index 000000000..f490b7a5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt
@@ -0,0 +1,6 @@
+====== Ãndice ======
+
+Este índice mostra todos os documentos disponíveis neste site Wiki, [[doku>namespaces | agrupados]] por assunto.
+
+----
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html
new file mode 100644
index 000000000..a2fd5c7c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html
@@ -0,0 +1,8 @@
+<p>Esta página serve de "assistente" para a primeira instalação e configuração do <a href="http://dokuwiki.org">Dokuwiki</a>. Está disponível mais informação sobre este "assistente" na sua <a href="http://dokuwiki.org/installer">página de documentação</a>.</p>
+
+<p>O DokuWiki usa ficheiros normais para armazenar as páginas Wiki e outras informações associadas a essas páginas (i.e. imagens, índices de pesquisa, revisões antigas, etc.). O DokuWiki para poder funcionar correctamente <strong>requer</strong> permissões de escrita às pastas que contêm esses ficheiros. Este "assistente" não é capaz de configurar essas permissões. Isso tem que ser feito via linha de comandos, FTP ou Painel de Controlo do serviço de alojamento (i.e. cPanel).</p>
+
+<p>Este "assistente" vai configurar o DokuWiki com
+<acronym title="access control list">ACL</acronym>, que por sua vez permite ao administrador entrar em sessão e aceder ao menu de Administração do DokuWiki para poder instalar plugins, gerir utilizadores e seus perfis, gerir acesso às páginas e à própria configuração do DokuWiki. Não é necessário para que o DokuWiki funcione, mas facilita a sua administração.</p>
+
+<p>Utilizadores experiente ou com requisitos especiais devem seguir estes links, que detalham mais em pormenor a<a href="http://dokuwiki.org/install">instalação</a> e <a href="http://dokuwiki.org/config">configuração</a> do DokuWiki.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php
new file mode 100644
index 000000000..ef4c70785
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php
@@ -0,0 +1,237 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author José Carlos Monteiro <jose.c.monteiro@netcabo.pt>
+ * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Fil <fil@meteopt.com>
+ * @author André Neves <drakferion@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '´';
+$lang['btn_edit'] = 'Editar página';
+$lang['btn_source'] = 'Ver fonte';
+$lang['btn_show'] = 'Ver página';
+$lang['btn_create'] = 'Criar página';
+$lang['btn_search'] = 'Pesquisar';
+$lang['btn_save'] = 'Gravar';
+$lang['btn_preview'] = 'Prever';
+$lang['btn_top'] = 'Voltar ao topo';
+$lang['btn_newer'] = '<< mais recente';
+$lang['btn_older'] = 'menos recente >>';
+$lang['btn_revs'] = 'Revisões';
+$lang['btn_recent'] = 'Alt. Recentes';
+$lang['btn_upload'] = 'Carregar';
+$lang['btn_cancel'] = 'Cancelar';
+$lang['btn_index'] = 'Ãndice';
+$lang['btn_secedit'] = 'Editar';
+$lang['btn_login'] = 'Entrar';
+$lang['btn_logout'] = 'Sair';
+$lang['btn_admin'] = 'Administrar';
+$lang['btn_update'] = 'Actualizar';
+$lang['btn_delete'] = 'Apagar';
+$lang['btn_back'] = 'Voltar';
+$lang['btn_backlink'] = 'Backlinks';
+$lang['btn_backtomedia'] = 'Voltar à Selecção de Media';
+$lang['btn_subscribe'] = 'Subscrever Alterações';
+$lang['btn_unsubscribe'] = 'Não Subscrever Alterações';
+$lang['btn_subscribens'] = 'Subscrever Mudanças de Espaço de Nome';
+$lang['btn_unsubscribens'] = 'Cancelar Subscrição de Mudanças de Espaço de Nome';
+$lang['btn_profile'] = 'Actualizar Perfil';
+$lang['btn_reset'] = 'Limpar';
+$lang['btn_resendpwd'] = 'Enviar nova senha';
+$lang['btn_draft'] = 'Editar rascunho';
+$lang['btn_recover'] = 'Recuperar rascunho';
+$lang['btn_draftdel'] = 'Apagar rascunho';
+$lang['loggedinas'] = 'Está em sessão como';
+$lang['user'] = 'Utilizador';
+$lang['pass'] = 'Senha';
+$lang['newpass'] = 'Nova senha';
+$lang['oldpass'] = 'Confirme senha actual';
+$lang['passchk'] = 'Confirmar novamente';
+$lang['remember'] = 'Memorizar?';
+$lang['fullname'] = 'Nome completo';
+$lang['email'] = 'Email';
+$lang['register'] = 'Registar';
+$lang['profile'] = 'Perfil do Utilizador';
+$lang['badlogin'] = 'O utilizador inválido ou senha inválida.';
+$lang['minoredit'] = 'Alterações Menores';
+$lang['draftdate'] = 'Rascunho automaticamente gravado em';
+$lang['nosecedit'] = 'A página foi modificada entretanto. Como a informação da secção estava desactualizada, foi carregada a página inteira.';
+$lang['regmissing'] = 'Por favor, preencha todos os campos.';
+$lang['reguexists'] = 'Este utilizador já está inscrito. Por favor escolha outro nome de utilizador.';
+$lang['regsuccess'] = 'O utilizador foi criado e a senha foi enviada para o endereço de correio electrónico usado na inscrição.';
+$lang['regsuccess2'] = 'O utilizador foi criado.';
+$lang['regmailfail'] = 'Houve um erro no envio da senha por e-mail. Por favor, contacte o administrador!';
+$lang['regbadmail'] = 'O endereço de correio electrónico é inválido. Se o endereço está correcto, e isto é um erro, por favor, contacte o administrador!';
+$lang['regbadpass'] = 'As duas senhas não são idênticas, por favor tente de novo.';
+$lang['regpwmail'] = 'A sua senha DokuWiki';
+$lang['reghere'] = 'Para se registar, clique em';
+$lang['profna'] = 'Este Wiki não suporta modificações aos perfis.';
+$lang['profnochange'] = 'Nada alteração, nada a fazer.';
+$lang['profnoempty'] = 'Não são permitidos nomes ou endereços em branco.';
+$lang['profchanged'] = 'Perfil do utilizador actualizado com sucesso.';
+$lang['pwdforget'] = 'Esqueceu a sua senha? Pedir nova senha';
+$lang['resendna'] = 'Este wiki não suporta reenvio de senhas.';
+$lang['resendpwd'] = 'Enviar nova senha para';
+$lang['resendpwdmissing'] = 'É preciso preencher todos os campos.';
+$lang['resendpwdnouser'] = 'Não foi possível encontrar este utilizador.';
+$lang['resendpwdbadauth'] = 'O código de autenticação não é válido. Por favor, assegure-se de que o link de confirmação está completo.';
+$lang['resendpwdconfirm'] = 'O link de confirmação foi enviado por e-mail.';
+$lang['resendpwdsuccess'] = 'A nova senha foi enviada por e-mail.';
+$lang['license'] = 'Excepto menção em contrário, o conteúdo neste wiki está sob a seguinte licença:';
+$lang['licenseok'] = 'Nota: Ao editar esta página você aceita disponibilizar o seu conteúdo sob a seguinte licença:';
+$lang['txt_upload'] = 'Escolha ficheiro para carregar';
+$lang['txt_filename'] = 'Carregar como (opcional)';
+$lang['txt_overwrt'] = 'Escrever por cima do ficheiro já existente';
+$lang['lockedby'] = 'Bloqueado por';
+$lang['lockexpire'] = 'Expira em';
+$lang['willexpire'] = 'O bloqueio de edição para este documento irá expirar num minuto.\nPara evitar conflitos de edição, clique no botão <Prever> para re-iniciar o temporizador de bloqueio.';
+$lang['notsavedyet'] = 'Existem alterações não gravadas, que serão perdidas se continuar.\nDeseja realmente continuar?';
+$lang['rssfailed'] = 'Ocorreu um erro neste canal RSS: ';
+$lang['nothingfound'] = 'Nada foi encontrado.';
+$lang['mediaselect'] = 'Selecção de ficheiros';
+$lang['fileupload'] = 'Carregamento de ficheiros';
+$lang['uploadsucc'] = 'Carregamento com sucesso';
+$lang['uploadfail'] = 'Falhou o carregamento. Talvez por não ter permissões?';
+$lang['uploadwrong'] = 'Carregamento negado. Esta extensão está proibida.';
+$lang['uploadexist'] = 'O ficheiro já existe. Não pode ser carregado.';
+$lang['uploadbadcontent'] = 'O conteúdo carregado não corresponde à extensão %s.';
+$lang['uploadspam'] = 'O carregamento foi bloqueado pela lista negra de SPAM.';
+$lang['uploadxss'] = 'O carregamento foi bloqueado porque possivelmente contem conteúdo malicioso.';
+$lang['uploadsize'] = 'O ficheiro carregado é demasiado grande. (máx. %s)';
+$lang['deletesucc'] = 'O ficheiro "%s" foi removido.';
+$lang['deletefail'] = 'O ficheiro "%s" não pode ser removido, por favor verifique as permissões.';
+$lang['mediainuse'] = 'O ficheiro "%s" não foi removido porque está ainda a ser usado.';
+$lang['namespaces'] = 'Grupos';
+$lang['mediafiles'] = 'Ficheiros disponíveis em';
+$lang['js']['keepopen'] = 'Mantenha a janela aberta durante a selecção';
+$lang['js']['hidedetails'] = 'Esconder Detalhes';
+$lang['js']['nosmblinks'] = 'Ligação a pastas Windows partilhadas apenas funciona com o Microsoft Internet Explorer.
+Pode no entanto copiar e colar o link.';
+$lang['js']['linkwiz'] = 'Assistente de Criação de Ligação';
+$lang['js']['linkto'] = 'Ligação para:';
+$lang['js']['del_confirm'] = 'Remover esta entrada?';
+$lang['js']['mu_btn'] = 'Enviar múltiplos ficheiros de uma vez';
+$lang['mediausage'] = 'Use a seguinte sintaxe para referenciar este ficheiro:';
+$lang['mediaview'] = 'Ver ficheiro original';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Carregar ficheiros para o grupo actual aqui. Para criar sub-grupos: escrever o nome do sub-grupo seguido de : antes do nome do ficheiro no campo "Carregar como".';
+$lang['mediaextchange'] = 'Extensão alterada de .%s para .%s!';
+$lang['reference'] = 'Referências para';
+$lang['ref_inuse'] = 'O ficheiro "%s" não pode ser removido, porque está ainda a ser usado nestes documentos:';
+$lang['ref_hidden'] = 'Algumas referências estão em documentos para os quais não tem permissão para ler';
+$lang['hits'] = 'Resultados';
+$lang['quickhits'] = 'Documentos encontrados';
+$lang['toc'] = 'Tabela de Conteúdos';
+$lang['current'] = 'Actual';
+$lang['yours'] = 'A sua versão';
+$lang['diff'] = 'mostrar diferenças com a versão actual';
+$lang['diff2'] = 'mostrar diferenças entre versões escolhidas';
+$lang['line'] = 'Linha';
+$lang['breadcrumb'] = 'Está em';
+$lang['youarehere'] = 'Está aqui';
+$lang['lastmod'] = 'Esta página foi modificada pela última vez em';
+$lang['by'] = 'por';
+$lang['deleted'] = 'Documento automaticamente removido.';
+$lang['created'] = 'Criação deste novo documento.';
+$lang['restored'] = 'Versão anterior restaurada.';
+$lang['external_edit'] = 'Edição externa';
+$lang['summary'] = 'Sumário da Edição';
+$lang['noflash'] = 'O <a href="http://www.adobe.com/products/flashplayer/">Plugin Adobe Flash</a> é necessário para exibir este conteúdo.';
+$lang['download'] = 'Descarregar Snippet';
+$lang['mail_newpage'] = 'documento adicionado:';
+$lang['mail_changed'] = 'documento modificado:';
+$lang['mail_new_user'] = 'Novo utilizador:';
+$lang['mail_upload'] = 'Ficheiro carregado:';
+$lang['qb_bold'] = 'Texto com Ênfase';
+$lang['qb_italic'] = 'Texto Itálico';
+$lang['qb_underl'] = 'Texto Sublinhado';
+$lang['qb_code'] = 'Texto Código';
+$lang['qb_strike'] = 'Texto Riscado';
+$lang['qb_h1'] = 'Cabeçalho Nível 1';
+$lang['qb_h2'] = 'Cabeçalho Nível 2';
+$lang['qb_h3'] = 'Cabeçalho Nível 3';
+$lang['qb_h4'] = 'Cabeçalho Nível 4';
+$lang['qb_h5'] = 'Cabeçalho Nível 5';
+$lang['qb_h'] = 'Cabeçalho';
+$lang['qb_hs'] = 'Seleccionar Cabeçalho';
+$lang['qb_hplus'] = 'Cabeçalho Maior';
+$lang['qb_hminus'] = 'Cabeçalho Menor';
+$lang['qb_hequal'] = 'Cabeçalho de Nível Semelhante';
+$lang['qb_link'] = 'Ligação Interna';
+$lang['qb_extlink'] = 'Ligação Externa';
+$lang['qb_hr'] = 'Barra Horizontal';
+$lang['qb_ol'] = 'Item numa Lista Ordenada';
+$lang['qb_ul'] = 'Item numa Lista Não Ordenada';
+$lang['qb_media'] = 'Incluir imagens e outros ficheiros';
+$lang['qb_sig'] = 'Inserir Assinatura';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Caracteres Especiais';
+$lang['upperns'] = 'Ir para o espaço de nomes parente';
+$lang['admin_register'] = 'Registar Novo Utilizador';
+$lang['metaedit'] = 'Editar Metadata';
+$lang['metasaveerr'] = 'Falhou a escrita de Metadata';
+$lang['metasaveok'] = 'Metadata gravada';
+$lang['img_backto'] = 'De volta a';
+$lang['img_title'] = 'Título';
+$lang['img_caption'] = 'Legenda';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Ficheiro';
+$lang['img_fsize'] = 'Tamanho';
+$lang['img_artist'] = 'Fotógrafo';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Formato';
+$lang['img_camera'] = 'Câmara';
+$lang['img_keywords'] = 'Palavras-Chave';
+$lang['subscribe_success'] = '%s adicionado à lista de subscritores de %s';
+$lang['subscribe_error'] = 'Erro ao adicionar %s à lista de subscritores de %s';
+$lang['subscribe_noaddress'] = 'Não existe nenhum endereço associado ao seu perfil, por isso não pode ser adicionado à lista de subscritores.';
+$lang['unsubscribe_success'] = '%s removido da lista de subscritores de %s';
+$lang['unsubscribe_error'] = 'Erro ao remover %s da lista de subscritores de %s';
+$lang['authmodfailed'] = 'Configuração de autenticação errada. Por favor, informe o Wiki Admin.';
+$lang['authtempfail'] = 'Autenticação temporariamente indisponível. Se a situação persistir, por favor informe o Wiki Admin.';
+$lang['i_chooselang'] = 'Escolha a linguagem';
+$lang['i_installer'] = 'Instalador do DokuWiki';
+$lang['i_wikiname'] = 'Nome Wiki';
+$lang['i_enableacl'] = 'Activar ACL (recomendado)';
+$lang['i_superuser'] = 'Super-utilizador';
+$lang['i_problems'] = 'O instalador encontrou alguns problemas, indicados mais abaixo. Não pode continuar até que sejam corrigidos.';
+$lang['i_modified'] = 'Por razões de segurança, este script só funciona em novas e não-modificadas instalações do Dokuwiki. Deve por isso re-extrair os ficheiros do pacote que descarregou ou então deve consultar as completas <a href="http://dokuwiki.org/install">instruções de instalação do Dokuwiki installation instructions</a>';
+$lang['i_funcna'] = 'A função PHP <code>%s</code> não está disponível. Terá o serviço de alojamento desactivado-a por alguma razão?';
+$lang['i_phpver'] = 'A versão de PHP actual <code>%s</code> é inferior à versão mínima <code>%s</code>. É preciso actualizar a instalação PHP.';
+$lang['i_permfail'] = '<code>%s</code> não permite que o DokuWiki escreva nela. É preciso corrigir as permissões desta pasta!';
+$lang['i_confexists'] = '<code>%s</code> já existe';
+$lang['i_writeerr'] = 'Não foi possível criar <code>%s</code>. É preciso verificar as permissões e criar o ficheiro manualmente.';
+$lang['i_badhash'] = 'dokuwiki.php não é o original ou não é reconhecido (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valor ilegal ou vazio';
+$lang['i_success'] = 'A instalação e configuração inicial foram bem sucedidas. Pode remover o install.php. Aceda ao seu novo <a href="doku.php">Wiki</a> a correr o DokuWiki.';
+$lang['i_failure'] = 'Ocorreram alguns erros durante a escrita nos ficheiros de configuração. Poderá ser preciso corrigi-los manualmente antes de poder aceder ao seu novo <a href="doku.php">Wiki</a> a correr o DokuWiki.';
+$lang['i_policy'] = 'Politica ACL inicial';
+$lang['i_pol0'] = 'Wiki Aberto (ler, escrever e carregar para todos)';
+$lang['i_pol1'] = 'Wiki Público (ler para todos, escrever e carregar para utilizadores inscritos)';
+$lang['i_pol2'] = 'Wiki Fechado (ler, escrever e carregar somente para utilizadores inscritos)';
+$lang['i_retry'] = 'Repetir';
+$lang['mu_intro'] = 'Aqui podes enviar múltiplos ficheiros de uma vez. Clique no botão de navegação para adicioná-los na fila. Premir upload quando pronto.';
+$lang['mu_gridname'] = 'Nome do ficheiro';
+$lang['mu_gridsize'] = 'Tamanho';
+$lang['mu_gridstat'] = 'Estado';
+$lang['mu_namespace'] = 'Espaço de Nomes';
+$lang['mu_browse'] = 'Navegar';
+$lang['mu_toobig'] = 'demasiado grande';
+$lang['mu_ready'] = 'pronto para upload';
+$lang['mu_done'] = 'completo';
+$lang['mu_fail'] = 'falhou';
+$lang['mu_authfail'] = 'sessão expirada';
+$lang['mu_progress'] = '@PCT@% transferido';
+$lang['mu_filetypes'] = 'Tipos de Ficheiros Permitidos';
+$lang['mu_info'] = 'Ficheiros carregados.';
+$lang['mu_lasterr'] = 'Último erro:';
+$lang['recent_global'] = 'Você está a observar as alterações dentro do espaço de nomes <b>%s</b>. Também é possível ver as <a href="%s">modificações recentes no wiki inteiro</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt
new file mode 100644
index 000000000..b9df29cb5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt
@@ -0,0 +1,5 @@
+====== Página em Edição ======
+
+Esta página está bloqueada por outro utilizador, que se encontra a editá-la neste momento.\\ Terá que aguardar que o utilizador termine a edição e grava as alterações ou então que temporizador de bloqueio expire.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt
new file mode 100644
index 000000000..e8000bbab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt
@@ -0,0 +1,7 @@
+====== Entrar ======
+
+Não está actualmente em sessão!\\ Introduza os seus dados de utilizador para entrar em sessão.
+
+**Nota**: Precisa de ter //cookies// activos no seu navegador.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt
new file mode 100644
index 000000000..915a147ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt
@@ -0,0 +1,20 @@
+Um documento no site Wiki @DOKUWIKIURL@ foi criado ou modificado.
+
+Aqui estão os detalhes:
+
+Data : @DATE@
+Browser : @BROWSER@
+Endereço IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Documento Ant.: @OLDPAGE@
+Documento Novo: @NEWPAGE@
+Edit Summary : @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+
+----
+
+Esta mensagem foi gerada automaticamente pelo motor DokuWiki em @DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt
new file mode 100644
index 000000000..4db706be1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt
@@ -0,0 +1,7 @@
+====== Documento Inexistente ======
+
+Acaba de tentar aceder a um documento que ainda não existe.
+
+Pode criar o conteúdo deste novo documento após clicar no botão <Criar página>.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt
new file mode 100644
index 000000000..6dd8dfb6c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt
@@ -0,0 +1,7 @@
+====== Revisão Inexistente ======
+
+A revisão especificada não existe.
+
+Clique no botão <Revisões> para aceder à lista de revisões deste documento.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt
new file mode 100644
index 000000000..077665881
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt
@@ -0,0 +1,7 @@
+====== Previsão ======
+
+Esta é a previsão de como irá ficar o conteúdo do documento se clicar no botão <Gravar>.
+
+**Atenção**: O documento ainda não se encontra gravado.\\ É necessário clicar no botão <Gravar> para efectivar as modificações que tenha realizado.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt
new file mode 100644
index 000000000..2848a116c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt
@@ -0,0 +1,13 @@
+Olá @FULLNAME@!
+
+Alguém efectuou um pedido para uma nova senha para o seu perfil @TITLE@ em @DOKUWIKIURL@
+
+Se não foi você que efectuou o pedido então por favor ignore esta mensagem.
+
+Senão, para confirmar o pedido, por favor siga este link:
+
+@CONFIRM@
+
+--
+
+Esta mensagem foi gerada automaticamente pelo motor DokuWiki em @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt
new file mode 100644
index 000000000..92be189f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt
@@ -0,0 +1,3 @@
+**Atenção**: Este documento é apenas de leitura.\\ Pode ver o documento em bruto mas não pode gravar qualquer alteração.\\ \\ Informe-se com o administrador deste Wiki se achar que isto não está correcto.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt
new file mode 100644
index 000000000..339041468
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt
@@ -0,0 +1,5 @@
+====== Alterações Recentes ======
+
+Os seguintes documentos foram alterados recentemente.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt
new file mode 100644
index 000000000..c647a4615
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt
@@ -0,0 +1,7 @@
+====== Inscrição ======
+
+Por favor, preencha todos os campos com a informação correspondente, para poder criar uma nova conta neste SiteWiki.
+
+**Nota**: O nome de utilizador deve cumprir as mesmas regras de nomeação de documentos Wiki válidos.\\ **Atenção**: Verifique que o endereço de correio electrónico que preencheu é válido, pois a sua senha será enviada por e-mail.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt
new file mode 100644
index 000000000..b9c1f164b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt
@@ -0,0 +1,14 @@
+Inscrição de um novo utilizador. Aqui estão os detalhes:
+
+Username : @NEWUSER@
+Nome Completo : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Data : @DATE@
+Browser : @BROWSER@
+Endereço IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+----
+
+Esta mensagem foi gerada pelo DokuWiki em @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt
new file mode 100644
index 000000000..9a54ace07
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Enviar nova senha ======
+
+Por favor, insira o seu nome de utilizador neste formulário para requerer uma nova senha para esta conta/perfil. Um link de confirmação será enviado para o endereço de e-mail associado. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt
new file mode 100644
index 000000000..213022f91
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt
@@ -0,0 +1,5 @@
+====== Revisões ======
+
+Estas são as revisões ao documento corrente.\\ Para reverter o documento para uma destas revisões: * Escolha a revisão do documento da lista abaixo; * Clique depois no botão <Editar página>; * Faça as alterações que veja necessárias - opcional; * Grava a revisão antiga como sendo a revisão actual do documento. Após a gravação, o documento da versão actual será substituído pelo documento da revisão escolhida.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt
new file mode 100644
index 000000000..49a0b16ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt
@@ -0,0 +1,7 @@
+====== Pesquisa ======
+
+Os resultados da sua pesquisa encontram-se mais abaixo.
+
+Se não encontrou o que procurava, pode criar uma nova página com o nome da sua pesquisa, usando o botão <Editar página>.
+
+===== Resultados =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt
new file mode 100644
index 000000000..e8ad7f47a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt
@@ -0,0 +1,3 @@
+**Atenção**: Esta é uma versão antiga do documento!
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt
new file mode 100644
index 000000000..373e6ee5a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt
@@ -0,0 +1,141 @@
+# Esta é uma lista de plavaras que o indexador ignora, uma palavra por linha
+# Quando você edita esta lista certifique-se que usa fim de linha usado em sistemas UNIX
+# Não é necessário incluir palavras menores que 3 letras - estas são sempre ignoradas
+# Esta lista é baseada nas encontradas em http://www.ranks.nl/stopwords/
+último
+acerca
+agora
+algmas
+alguns
+ali
+ambos
+antes
+apontar
+aquela
+aquelas
+aquele
+aqueles
+aqui
+atrás
+bem
+bom
+cada
+caminho
+cima
+com
+como
+comprido
+conhecido
+corrente
+das
+debaixo
+dentro
+desde
+desligado
+deve
+devem
+deverá
+direita
+diz
+dizer
+dois
+dos
+ela
+ele
+eles
+enquanto
+então
+está
+estão
+estado
+estar
+estará
+este
+estes
+esteve
+estive
+estivemos
+estiveram
+fará
+faz
+fazer
+fazia
+fez
+fim
+foi
+fora
+horas
+iniciar
+inicio
+irá
+ista
+iste
+isto
+ligado
+maioria
+maiorias
+mais
+mas
+mesmo
+meu
+muito
+muitos
+nós
+não
+nome
+nosso
+novo
+onde
+outro
+para
+parte
+pegar
+pelo
+pessoas
+pode
+poderá
+podia
+por
+porque
+povo
+promeiro
+quê
+qual
+qualquer
+quando
+quem
+quieto
+são
+saber
+sem
+ser
+seu
+somente
+têm
+tal
+também
+tem
+tempo
+tenho
+tentar
+tentaram
+tente
+tentei
+teu
+teve
+tipo
+tive
+todos
+trabalhar
+trabalho
+uma
+umas
+uns
+usa
+usar
+valor
+veja
+ver
+verdade
+verdadeiro
+você
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt
new file mode 100644
index 000000000..3a9e40d20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt
@@ -0,0 +1,15 @@
+Olá,
+
+A página @PAGE@ em @TITLE@ foi alterda.
+Aqui estão as diferenças:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Para receber mais notificações desta página alterada, por favor, entre no Wiki em @DOKUWIKIURL@ e aceda a @NEWPAGE@ para depois poder clicar no botão [ Não Subscrever ].
+
+
+----
+
+Esta mensagem foi gerada pelo DokuWiki em @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt
new file mode 100644
index 000000000..efacfe4a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Actualize o seu perfil ======
+
+Apenas precisa de completar os campos que pretende alterar. Não é possível alterar o seu nome de utilizador. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt
new file mode 100644
index 000000000..249d66234
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt
@@ -0,0 +1,14 @@
+Um ficheiro foi carregado. Aqui estão os detalhes:
+
+Ficheiro : @MEDIA@
+Data : @DATE@
+Browser : @BROWSER@
+Endereço IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Tamanho : @SIZE@
+MIME Type : @MIME@
+Utilizador : @USER@
+
+----
+
+Esta mensagem foi gerada pelo DokuWiki em @DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt
new file mode 100644
index 000000000..a88063c9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt
@@ -0,0 +1,7 @@
+====== Bloquear SPAM ======
+
+As suas alterações foram **bloqueadas**, porque contêm uma ou mais palavras consideradas abusivas (SPAM).
+
+Se pensa que isto não está correcto, por favor contacte o administrador deste site Wiki.
+
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt
new file mode 100644
index 000000000..4b1a9062a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt
@@ -0,0 +1,3 @@
+====== Administrare ======
+
+Puteţi vedea mai jos o listă cu activităţile administrative disponibile în DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt
new file mode 100644
index 000000000..f076c3651
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt
@@ -0,0 +1 @@
+===== Plugin-uri Adiţionale ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt
new file mode 100644
index 000000000..3fd5e3415
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt
@@ -0,0 +1,4 @@
+====== Legături înapoi ======
+
+Aceasta e o listă de pagini care au legături către pagina curentă.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt
new file mode 100644
index 000000000..d7218ca5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt
@@ -0,0 +1,6 @@
+====== Există o nouă versiune ======
+
+Există o versiune nouă a documentului editat. Aceasta se întîmplă cînd un alt utilizator a schimbat documentul în timp ce îl editezi.
+
+Examinează diferenţele arătate mai jos, apoi ia decizia care versiune o reţii. Dacă alegi ''Salvează'', versiunea documentului va fi salvată. Apăsaţi ''Renunţare'' pentru a menţine versiunea curentă.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt
new file mode 100644
index 000000000..8178995e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt
@@ -0,0 +1,4 @@
+====== Acces Interzis ======
+
+Din păcate nu aveţi destule drepturi pentru a continua. Poate aţi uitat să vă logaţi?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt
new file mode 100644
index 000000000..f33be8afd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt
@@ -0,0 +1,4 @@
+====== Diferenţe ======
+
+Aceasta arată diferenţele dintre revziile selectate şi versiunea curentă a paginii.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt
new file mode 100644
index 000000000..e13671e3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt
@@ -0,0 +1,5 @@
+====== Fişierul schiţă nu a fost găsit ======
+
+Ultima dvs. sesiune de editare nu s-a finalizat corect. În timpul lucrului, DocuWiki a salvat automat o schiţă, pe care o puteţi utiliza acum pentru a continua editarea. Mai jos puteţi vedea informaţiile care s-au salvat de la ultima dvs. sesiune.
+
+Decideţi dacă vreţi să //recuperaţi// sesiunea de editare pierdută, //ştergeţi// schiţa salvată automat sau să //anulaţi// procesul de editare. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt
new file mode 100644
index 000000000..1e79dc4fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt
@@ -0,0 +1,2 @@
+Editează pagina şi apasă ''Salvează''. Vezi [[wiki:syntax]] pentru sintaxă. Te rog editează pagina doar pentru a o **îmbunătaţi**. Dacă vrei să testezi cîteva lucruri, învaţă sa faci primii paşi în [[playground:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt
new file mode 100644
index 000000000..290dca496
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt
@@ -0,0 +1,2 @@
+**Ai încărcat o versuine veche a documentului!** Dacă ai salvat-o, vei crea o versiune nouă cu această dată.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt
new file mode 100644
index 000000000..5b88cc03b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt
@@ -0,0 +1,4 @@
+====== Index ======
+
+Acesta e un index al tuturor paginilor ordonat după [[doku>namespaces|namespaces]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html
new file mode 100644
index 000000000..56cf3873b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html
@@ -0,0 +1,10 @@
+<p>Această pagină oferă asistenţă la instalarea pentru prima dată a <a href="http://dokuwiki.org">Dokuwiki</a>. Mai multe informaţii privind această instalare găsiţi pe <a href="http://dokuwiki.org/installer">pagina de documentaţie</a>.</p>
+
+<p>DokuWiki foloseşte fişiere obişnuite pentru stocarea paginilor wiki şi a informaţilor asociate acestor pagini (de ex. imagini, indecşi de căutare, versiuni vechi, etc). Pentru a lucra cu succes, DokuWiki <strong>trebuie</strong> să aibă drepturi de scriere în directoarele ce conţin aceste fişiere.
+Acest script de instalare nu poate seta drepturile directoarelor. De regulă, aceasta se face direct, în linie de comandă, sau în cazul găzduirii, prin FTP sau prin panoul de control al gazdei (de ex. cPanel).</p>
+
+<p>Acest script de instalare va configura DokuWiki pentru <acronym title="access control list">ACL</acronym>, care permite logarea administratorului şi accesul la meniul de administrare pentru instalarea plugin-urilor, gestiunea utilizatorilor, a accesului la paginile wiki şi modificarea setărilor de configurare.
+Nu este necesar pentru ca DokuWiki să funcţioneze, însă face mai uşoară administrarea DokuWiki.</p>
+
+<p>Utilizatorii experimentaţi sau utilizatorii ce au nevoie de setări speciale ar putea folosi această legătură privind<a href="http://dokuwiki.org/install">instrucţiunile de instalare</a> şi <a href="http://dokuwiki.org/config">setările de configurare</a>.</p>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php
new file mode 100644
index 000000000..87ee6ae0f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php
@@ -0,0 +1,251 @@
+<?php
+/**
+ * romanian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Tiberiu Micu <tibimicu@gmx.net>
+ * @author Sergiu Baltariu <s_baltariu@yahoo.com>
+ * @author s_baltariu@yahoo.com
+ * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Editează această pagină';
+$lang['btn_source'] = 'Arată sursa paginii';
+$lang['btn_show'] = 'Arată pagina';
+$lang['btn_create'] = 'Crează această pagină';
+$lang['btn_search'] = 'Caută';
+$lang['btn_save'] = 'Salvează';
+$lang['btn_preview'] = 'Previzualizează';
+$lang['btn_top'] = 'La început';
+$lang['btn_newer'] = '<< mai recent';
+$lang['btn_older'] = 'mai vechi>>';
+$lang['btn_revs'] = 'Versiuni vechi';
+$lang['btn_recent'] = 'Modificări recente';
+$lang['btn_upload'] = 'Upload';
+$lang['btn_cancel'] = 'Renunţare';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Editează';
+$lang['btn_login'] = 'Login';
+$lang['btn_logout'] = 'Logout';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Actualizează';
+$lang['btn_delete'] = 'Åžterge';
+$lang['btn_back'] = 'ÃŽnapoi';
+$lang['btn_backlink'] = 'Legătură anterioară';
+$lang['btn_backtomedia'] = 'Înapoi la Selecţia Mediafile';
+$lang['btn_subscribe'] = 'Subscrie Modificarea Paginii';
+$lang['btn_unsubscribe'] = 'Anulează Subscrierea Modificării Paginii';
+$lang['btn_subscribens'] = 'Subscrie Modificarea Spaţiului de Nume';
+$lang['btn_unsubscribens'] = 'Anulează Subscrierea Modificării Spaţiului de Nume';
+$lang['btn_profile'] = 'Actualizează Profil';
+$lang['btn_reset'] = 'Resetează';
+$lang['btn_resendpwd'] = 'Trimite parola nouă';
+$lang['btn_draft'] = 'Editează schiţă';
+$lang['btn_recover'] = 'Recuperează schiţă';
+$lang['btn_draftdel'] = 'Şterge schiţă';
+$lang['btn_revert'] = 'Revenire';
+$lang['loggedinas'] = 'Logat ca ÅŸi';
+$lang['user'] = 'Utilizator';
+$lang['pass'] = 'Parola';
+$lang['newpass'] = 'Parola nouă';
+$lang['oldpass'] = 'Confirmă parola curentă';
+$lang['passchk'] = 'încă o dată';
+$lang['remember'] = 'Ţine-mă minte';
+$lang['fullname'] = 'Nume complet';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Înregistrează';
+$lang['profile'] = 'Profil Utilizator';
+$lang['badlogin'] = 'Imi pare rău, utilizatorul şi/sau parola au fost greşite.';
+$lang['minoredit'] = 'Modificare Minoră';
+$lang['draftdate'] = 'Schiţă salvată automat la';
+$lang['nosecedit'] = 'Pagina s-a modificat între timp, secţiunea info a expirat, s-a încărcat pagina întreagă în loc.';
+$lang['regmissing'] = 'Ne pare rău, trebuie să completezi toate cîmpurile.';
+$lang['reguexists'] = 'Ne pare rău, un utilizator cu acest nume există deja logat.';
+$lang['regsuccess'] = 'Utilizatorul a fost creat. Parola a fost trimisă prin email.';
+$lang['regsuccess2'] = 'Utilizatorul a fost creat.';
+$lang['regmailfail'] = 'Se pare că a fost o eroare la trimiterea parolei prin email. Contactaţi administratorul!';
+$lang['regbadmail'] = 'Adresa de email este invalidă - dacă credeţi că este o eroare contactaţi administratorul.';
+$lang['regbadpass'] = 'Cele două parole furnizate nu sunt identice; încercaţi din nou.';
+$lang['regpwmail'] = 'Parola ta DokuWiki';
+$lang['reghere'] = 'Înca nu ai un cont? Fă-ţi unul';
+$lang['profna'] = 'Această wiki nu suportă modificarea profilului';
+$lang['profnochange'] = 'Nici o modificare; nimic de făcut.';
+$lang['profnoempty'] = 'Nu sunt admise numele sau adresa de email necompletate.';
+$lang['profchanged'] = 'Profilul de utilizator a fost actualizat succes.';
+$lang['pwdforget'] = 'Parola uitată? Luaţi una nouă';
+$lang['resendna'] = 'Această wiki nu suportă retrimiterea parolei.';
+$lang['resendpwd'] = 'Trimite parola nouă pentru';
+$lang['resendpwdmissing'] = 'Ne pare rău, trebuie completate toate câmpurile.';
+$lang['resendpwdnouser'] = 'Ne pare rău, acest utilizator nu poate fi găsit în baza de date.';
+$lang['resendpwdbadauth'] = 'Ne pare rău, acest cod de autorizare nu este corect. Verificaţi dacă aţi folosit tot link-ul de confirmare.';
+$lang['resendpwdconfirm'] = 'Un link de confirmare a fost trimis prin email.';
+$lang['resendpwdsuccess'] = 'Parola nouă';
+$lang['license'] = 'Exceptând locurile unde este altfel specificat, conţinutul acestui wiki este licenţiat sub următoarea licenţă:';
+$lang['licenseok'] = 'Notă: Prin editarea acestei pagini sunteţi de acord să vă licenţiaţi conţintul sub următoarea licenţă:';
+$lang['searchmedia'] = 'Caută numele fişierului:';
+$lang['searchmedia_in'] = 'Caută în %s';
+$lang['txt_upload'] = 'Selectează fisierul de încărcat';
+$lang['txt_filename'] = 'Încarcă fişierul ca (opţional)';
+$lang['txt_overwrt'] = 'Suprascrie fiÅŸierul existent';
+$lang['lockedby'] = 'Momentan blocat de';
+$lang['lockexpire'] = 'Blocarea expiră la';
+$lang['willexpire'] = 'Blocarea pentru editarea paginii expiră intr-un minut.\nPentru a preveni conflictele foloseşte butonul de previzualizare pentru resetarea blocării.';
+$lang['notsavedyet'] = 'Există modificări nesalvate, care se vor pierde.\nDoreşti să continui?';
+$lang['rssfailed'] = 'A apărut o eroare in timpul descărcării acestui cîmp: ';
+$lang['nothingfound'] = 'Nu am găsit nimic.';
+$lang['mediaselect'] = 'Selectare fiÅŸiere media';
+$lang['fileupload'] = 'Încarcă fişier media';
+$lang['uploadsucc'] = 'Încărcare reuşită';
+$lang['uploadfail'] = 'Încărcare eşuată. Poate din cauza permisiunilor?';
+$lang['uploadwrong'] = 'Încărcare nepermisă. Extensia fişierului e nepermisă';
+$lang['uploadexist'] = 'Fişierul există deja. Nimic nu a fost făcut.';
+$lang['uploadbadcontent'] = 'Conţinutul încărcat nu corespunde extensiei fişierului %s.';
+$lang['uploadspam'] = 'Încărcarea a fost blocată datorită listei negre de spam.';
+$lang['uploadxss'] = 'Încărcarea a fost blocată datorită unui posibil conţinut dăunător.';
+$lang['uploadsize'] = 'FiÅŸierul uploadat a fost prea mare. (max %s)';
+$lang['deletesucc'] = 'FiÅŸierul "%s" a fost ÅŸters.';
+$lang['deletefail'] = '"%s" nu a putut fi şters - verificaţi drepturile.';
+$lang['mediainuse'] = 'Fişierul "%s" nu a fost şters - este încă în uz.';
+$lang['namespaces'] = 'Spaţii de nume';
+$lang['mediafiles'] = 'Fişiere disponibile în';
+$lang['js']['searchmedia'] = 'Caută fişiere';
+$lang['js']['keepopen'] = 'Menţine fereastra deschisă la selecţie';
+$lang['js']['hidedetails'] = 'Ascunde Detalii';
+$lang['js']['nosmblinks'] = 'Legăturile către sharing-uri Windows funcţioneaza numai in Microsoft Internet Explorer.
+Puteţi însă copia şi insera legătura.';
+$lang['js']['linkwiz'] = 'Asistent legătură';
+$lang['js']['linkto'] = 'Legătură la:';
+$lang['js']['del_confirm'] = 'Doriţi într-adevăr ştergerea elementelor selectate?';
+$lang['js']['mu_btn'] = 'Încarcă mai multe fişiere simultan';
+$lang['mediausage'] = 'Folosiţi următoarea sintaxă pentru a face referinţă la acest fişier:';
+$lang['mediaview'] = 'Vizualizează fişierul original';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'Încarcă un fişier in acest spaţiu de nume. Pentru a crea sub-spaţii de nume, adaugă-le la fişierul de încărcat, separate de doua puncte (:).';
+$lang['mediaextchange'] = 'Extensia fişierului a fost modificată din .%s în .%s!';
+$lang['reference'] = 'Referinţă pentru';
+$lang['ref_inuse'] = 'Fişierul nu a putut fi şters întrucât este folosit încă de următoarele pagini:';
+$lang['ref_hidden'] = 'Nu aveţi permisiunea să citiţi o parte din referinţele din pagină.';
+$lang['hits'] = 'Hituri';
+$lang['quickhits'] = 'Nume de pagini potrivite';
+$lang['toc'] = 'Cuprins';
+$lang['current'] = 'curent';
+$lang['yours'] = 'Versiunea ta';
+$lang['diff'] = 'arată diferenţele faţă de versiunea curentă';
+$lang['diff2'] = 'Arată diferenţele dintre versiunile selectate';
+$lang['line'] = 'Linia';
+$lang['breadcrumb'] = 'Traseu';
+$lang['youarehere'] = 'Sunteţi aici';
+$lang['lastmod'] = 'Ultima modificare';
+$lang['by'] = 'de către';
+$lang['deleted'] = 'ÅŸters';
+$lang['created'] = 'creat';
+$lang['restored'] = 'versiune veche restaurată';
+$lang['external_edit'] = 'editare externă';
+$lang['summary'] = 'Editează sumarul';
+$lang['noflash'] = 'Plugin-ul <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> este necesar pentru afişarea corectă a conţinutului.';
+$lang['download'] = 'Bloc descărcări';
+$lang['mail_newpage'] = 'pagina adăugată:';
+$lang['mail_changed'] = 'page schimbată:';
+$lang['mail_new_user'] = 'utilizator nou';
+$lang['mail_upload'] = 'fişier încărcat:';
+$lang['qb_bold'] = 'Text ÃŽngroÅŸat';
+$lang['qb_italic'] = 'Text Italic';
+$lang['qb_underl'] = 'Text Subliniat';
+$lang['qb_code'] = 'Text Cod';
+$lang['qb_strike'] = 'Text Tăiat';
+$lang['qb_h1'] = 'Titlu de Nivel 1';
+$lang['qb_h2'] = 'Titlu de Nivel 2';
+$lang['qb_h3'] = 'Titlu de Nivel 3';
+$lang['qb_h4'] = 'Titlu de Nivel 4';
+$lang['qb_h5'] = 'Titlu de Nivel 5';
+$lang['qb_h'] = 'Titlu';
+$lang['qb_hs'] = 'Selectaţi Titlul';
+$lang['qb_hplus'] = 'Titlu mai mare';
+$lang['qb_hminus'] = 'Titlu mai mic';
+$lang['qb_hequal'] = 'Titlu de acelaÅŸi nivel';
+$lang['qb_link'] = 'Legătură internă';
+$lang['qb_extlink'] = 'Legătura externă';
+$lang['qb_hr'] = 'Linie Orizontal';
+$lang['qb_ol'] = 'Listă Ordonată';
+$lang['qb_ul'] = 'Listă Neordoată';
+$lang['qb_media'] = 'Adaugă imagini şi alte fişiere';
+$lang['qb_sig'] = 'Inserează semnătură';
+$lang['qb_smileys'] = 'Smiley-uri';
+$lang['qb_chars'] = 'Caractere speciale';
+$lang['upperns'] = 'sari la numele de spaţiu părinte';
+$lang['admin_register'] = 'Adaugă utilizator nou';
+$lang['metaedit'] = 'Editează Metadata';
+$lang['metasaveerr'] = 'Scrierea metadatelor a eÅŸuat';
+$lang['metasaveok'] = 'Metadatele au fost salvate';
+$lang['img_backto'] = 'ÃŽnapoi la';
+$lang['img_title'] = 'Titlu';
+$lang['img_caption'] = 'Legendă';
+$lang['img_date'] = 'Data';
+$lang['img_fname'] = 'Nume fiÅŸier';
+$lang['img_fsize'] = 'Dimensiune';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Camera';
+$lang['img_keywords'] = 'Cuvinte cheie';
+$lang['subscribe_success'] = 'A fost adăugat %s la lista de subscriere pentru %s';
+$lang['subscribe_error'] = 'Eroare la adăugarea %s la lista de subscriere pentru %s';
+$lang['subscribe_noaddress'] = 'Nu este nici o adresă de mail asociată cu utilizatorul dvs. Nu puteţi fi adăugat la lista de subscriere';
+$lang['unsubscribe_success'] = '%s a fost eliminat din lista de subscriere pentru %s';
+$lang['unsubscribe_error'] = 'Eroare la eliminarea %s din lista de subscriere pentru %s';
+$lang['authmodfailed'] = 'Configuraţia autentificării utilizatorului este eronată. Anunţaţi Wiki Admin-ul.';
+$lang['authtempfail'] = 'Autentificarea utilizatorului este temporar indisponibilă. Anunţaţi Wiki Admin-ul.';
+$lang['i_chooselang'] = 'Alegeţi limba';
+$lang['i_installer'] = 'DokuWiki Installer';
+$lang['i_wikiname'] = 'Numele Wiki';
+$lang['i_enableacl'] = 'Activează ACL (recomandat)';
+$lang['i_superuser'] = 'Superutilizator';
+$lang['i_problems'] = 'Programul de instalare a găsit câteva probleme, indicate mai jos. Nu puteţi continua până nu le rezolvaţi.';
+$lang['i_modified'] = 'Din motive de securitate, acest script va funcţiona doar cu o instalare nouă şi nemodificată a Docuwiki.
+Puteţi fie să extrageţi din nou fişierele din arhiva descărcată fie să consultaţi instrucţiunile de instalare Dokuwiki la <a href="http://dokuwiki.org/install">';
+$lang['i_funcna'] = 'Funcţia PHP <code>%s</code> nu este disponibilă. Probabil provider-ul dvs. a inactivat-o pentru un motiv oarecare.';
+$lang['i_phpver'] = 'Versiunea dvs. de PHP <code>%s</code> este mai veche decât cea necesară (<code>%s</code>). Trebuie să vă actualizaţi instalarea PHP.';
+$lang['i_permfail'] = '<code>%s</code> nu poate fi scris de către DokuWiki. Trebuie să modificaţi drepturile acestui director!';
+$lang['i_confexists'] = '<code>%s</code> există deja';
+$lang['i_writeerr'] = 'Nu s-a putut crea <code>%s</code>. Trebuie să verificaţi drepturile directorului/fişierului şi să creaţi fişierul manual.';
+$lang['i_badhash'] = 'dokuwiki.php nu a fost recunoscut sau a fost modificat (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - valoare nepemisă sau neintrodusă';
+$lang['i_success'] = 'Configurarea a fost finalizată cu succes. Acum puteţi sterge fişierul install.php. Continuaţi cu <a href="doku.php">your new DokuWiki</a>.';
+$lang['i_failure'] = 'Au apărut erori la scrierea fişierelor de configurare. Va trebui să le corectaţi manual înainte de a putea folosi <a href="doku.php">your new DokuWiki</a>.';
+$lang['i_policy'] = 'Politica ACL iniţială';
+$lang['i_pol0'] = 'Wiki Deschisă (citeşte, scrie şi încarcă oricine)';
+$lang['i_pol1'] = 'Wiki Deschisă (citeste oricine, scrie şi încarcă doar utilizatorul înregistrat)';
+$lang['i_pol2'] = 'Wiki Închisă (citeşte, scrie şi încarcă doar utilizatorul înregistrat)';
+$lang['i_retry'] = 'Încearcă din nou';
+$lang['mu_intro'] = 'Aici poţi încărca mai multe fişiere simultan. Apasă butonul Răsfoieşte pentru a le adăuga. Apasă Încarcă când ai terminat.';
+$lang['mu_gridname'] = 'Numele fiÅŸierului';
+$lang['mu_gridsize'] = 'Mărime';
+$lang['mu_gridstat'] = 'Stare';
+$lang['mu_namespace'] = 'Spaţiu de nume';
+$lang['mu_browse'] = 'Răsfoieşte';
+$lang['mu_toobig'] = 'prea mare';
+$lang['mu_ready'] = 'pregătit pentru încărcare';
+$lang['mu_done'] = 'complet';
+$lang['mu_fail'] = 'eÅŸuat';
+$lang['mu_authfail'] = 'sesiunea a expirat';
+$lang['mu_progress'] = '@PCT@% incărcat';
+$lang['mu_filetypes'] = 'Tipuri de fiÅŸiere permise';
+$lang['mu_info'] = 'fişiere încărcate';
+$lang['mu_lasterr'] = 'Ultima eroare:';
+$lang['recent_global'] = 'Acum vizualizaţi modificările în interiorul numelui de spaţiu <b>%s</b>. De asemenea puteţi <a href="%s">vizualiza modificările recente ale întregului wiki</a>.';
+$lang['years'] = 'acum %d ani';
+$lang['months'] = 'acum %d luni';
+$lang['weeks'] = 'acum %d săptămâni';
+$lang['days'] = 'acum %d zile';
+$lang['hours'] = 'acum %d ore';
+$lang['minutes'] = 'acum %d minute';
+$lang['seconds'] = 'acum %d secunde';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt
new file mode 100644
index 000000000..94d6eb2ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt
@@ -0,0 +1,3 @@
+====== Pagină blocată ======
+
+Pagina este momentan blocată de alt utilizator. Trebuie să aştepţi pînă cînd acest utilizator termină editarea ori expiră blocarea.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt
new file mode 100644
index 000000000..2f1fda9ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt
@@ -0,0 +1,4 @@
+====== Login ======
+
+Nu sînteţi logat! Introduceţi datele de autentificare pentru logare. Trebuie să permiteţi cookie-uri pentru logare.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt
new file mode 100644
index 000000000..77aca8c4b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt
@@ -0,0 +1,16 @@
+A fost adăugată sau schimbată o pagină. Aici sînt detaliile:
+
+Data : @DATE@
+Navigator : @BROWSER@
+Adresa-IP : @IPADDRESS@
+Nume gazdă : @HOSTNAME@
+Versiune veche : @OLDPAGE@
+Versiune nouă : @NEWPAGE@
+Rezumat editare: @SUMMARY@
+
+@DIFF@
+
+
+--
+Mailul a fost generat de DokuWiki la
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt
new file mode 100644
index 000000000..7fb9d55a6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt
@@ -0,0 +1,3 @@
+====== Subiectul nu există încă ======
+
+Aţi urmat o legătură către un subiect care nu există. O puteţi crea prin apăsarea butonului ''Editează această pagină''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt
new file mode 100644
index 000000000..926f9144e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt
@@ -0,0 +1,4 @@
+====== Nu există versiunea ======
+
+Versiunea specificată nu există. Foloseşte butonul ''Versiuni vechi'' pentru o listă a versiunilor acestui document.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt
new file mode 100644
index 000000000..1964d7476
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt
@@ -0,0 +1,4 @@
+====== Previzualizare ======
+
+Acesta este modul în care va arăta textul. Nu uita: **Nu** e încă **salvat**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt
new file mode 100644
index 000000000..043e08868
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt
@@ -0,0 +1,13 @@
+Salut @FULLNAME@!
+
+Cineva a cerut o parolă nouă pentru @TITLE@ pentru conectarea la @DOKUWIKIURL@
+
+Dacă nu aţi solicitat o parolă nouă, ignoraţi acest email.
+
+Pentru a confirma că cererea a fost într-adevăr trimisă de dumneavoastră, folosiţi link-ul de mai jos.
+
+@CONFIRM@
+
+--
+Acest mail a fost generat de DocuWiki la
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt
new file mode 100644
index 000000000..2c0aa6d90
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt
@@ -0,0 +1,2 @@
+Această pagină poate fi doar citită. Poţi vedea sursa, dar n-o poţi modifica. Consultă administratorul dacă crezi că e ceva în neregulă.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt
new file mode 100644
index 000000000..8d4aa043a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt
@@ -0,0 +1,5 @@
+====== Schimbări recente ======
+
+Următoarele pagini au fost schimbate recent.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt
new file mode 100644
index 000000000..9fc6eec65
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt
@@ -0,0 +1,3 @@
+====== Înregistrează-te ca utilizator nou ======
+Pentru a crea un wiki nou completează mai jos toate informaţiile. Asigură-te că ai introdus o adresă de **e-mail validă** unde va fi trimisă noua parolă. Numele de utilizator trebuie de asemenea să fie valid [[doku>pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt
new file mode 100644
index 000000000..fb754af67
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt
@@ -0,0 +1,14 @@
+Un nou utilizator s-a înregsitrat. Iată detaliile:
+
+Nume utilizator : @NEWUSER@
+Nume complet : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Data : @DATE@
+Browser : @BROWSER@
+Adresă IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+Acest mail a fost generat automat de către DokuWiki la
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt
new file mode 100644
index 000000000..b7de241e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Trimite parolă nouă ======
+
+Introduceţi numele de utilizator în formularul de mai jos pentru a solicita o nouă parolă pentru această wiki. Un link de confirmare va fi trimis la adresa de email înregistrată. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt
new file mode 100644
index 000000000..b2ff46f77
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt
@@ -0,0 +1,4 @@
+====== Versiune veche ======
+
+Acestea sînt versiunile vechi ale documentului curent. Pentru revenirea la o versiune mai veche, selecteaz-o de mai jos, clic pe ''Editează această pagină'' şi salveaz-o.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt
new file mode 100644
index 000000000..c1169b88d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt
@@ -0,0 +1,5 @@
+====== Căutare ======
+
+Rezultatele căutării sînt afisate mai jos. Dacă n-aţi găsit ce-aţi căutat, puteţi creea o pagină nouă după căutare prin folosirea butonului ''Editează această pagină''.
+
+===== Rezultate =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt
new file mode 100644
index 000000000..c1d5e545d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt
@@ -0,0 +1,2 @@
+**Aceasta e o versiune veche a documentului!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt
new file mode 100644
index 000000000..29e7452d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt
@@ -0,0 +1,29 @@
+# Aceasta este o listă de cuvinte ignorate la indexare, câte un cuvânt pe linie
+# Când editaţi acest fişier, asiguraţi-vă că folosiţi sfârşituri de linie UNIX (o singură linie nouă)
+# Nu e nevoie să includeţi cuvinte mai scurte de 3 caractere - acestea sunt, oricum, ignorate
+# Această listă se bazează pe cele ce pot fi găsite la http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt
new file mode 100644
index 000000000..23374dc6f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt
@@ -0,0 +1,17 @@
+Bună!
+
+Pagina @PAGE@ din @TITLE@ wiki a fost modificată.
+Iată modificările:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Pentru a vă dezabona, logaţi-vă la wiki la
+@DOKUWIKIURL@, apoi vizitaţi
+@NEWPAGE@
+şi alegeţi 'Anulează modificările'.
+
+--
+Acest mail a fost generat automat de către DokuWiki la
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt
new file mode 100644
index 000000000..e5988ec51
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Actualizare profil utilizator ======
+
+Trebuie să completaţi doar câmpurile pe care doriţi să le modificaţi. Nu puteţi modifica numele de utilizator. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt
new file mode 100644
index 000000000..39faed370
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt
@@ -0,0 +1,14 @@
+Un fişier a fost încărcat în DocuWiki. Iată detaliile:
+
+FiÅŸier : @MEDIA@
+Data : @DATE@
+Browser : @BROWSER@
+Adresă IP : @IPADDRESS@
+Hostname : @HOSTNAME@
+Dimensiune : @SIZE@
+MIME Type : @MIME@
+Utilizator : @USER@
+
+--
+Acest mail a fost generat automat de către DokuWiki la
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt
new file mode 100644
index 000000000..1fa7bd6cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM blocat ======
+
+Modificările **nu** au fost salvate deoarece conţin unul sau mai multe cuvinte nepermise. Daca ai încercat să spamezi Wiki-ul -- Eşti un om rău! Dacă crezi că asta e o eroare, contactează administratorul acestui Wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt
new file mode 100644
index 000000000..cb03be52e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt
@@ -0,0 +1,4 @@
+====== Управление ======
+
+Ðиже вы Ñможете найти ÑпиÑок админиÑтративных операций, доÑтупных в DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt
new file mode 100644
index 000000000..6e3fc26f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt
@@ -0,0 +1 @@
+===== Дополнительные плагины ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt
new file mode 100644
index 000000000..a3b638d19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt
@@ -0,0 +1,4 @@
+====== Обратные ÑÑылки ======
+
+Это ÑпиÑок Ñтраниц, которые ÑÑылаютÑÑ Ð½Ð° текущую Ñтраницу.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt
new file mode 100644
index 000000000..f1ac60bd4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt
@@ -0,0 +1,5 @@
+====== СущеÑтвует более Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ ======
+
+СущеÑтвует более Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°, который вы редактировали. Такое ÑлучаетÑÑ, когда другой пользователь изменил документ, пока вы делали то же Ñамое.
+
+Внимательно изучите различиÑ, приведенные ниже и решите, какую верÑию оÑтавить. ЕÑли вы выберете ''Сохранить'', то ваша верÑÐ¸Ñ Ð±ÑƒÐ´ÐµÑ‚ Ñохранена. Ðажав ''Отменить',' вы оÑтавите текущую верÑию.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt
new file mode 100644
index 000000000..eee59efe6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt
@@ -0,0 +1,3 @@
+====== ДоÑтуп запрещен ======
+
+Извините, у Ð²Ð°Ñ Ð½Ðµ хватает прав Ð´Ð»Ñ Ñтого дейÑтвиÑ. Может быть, Ð’Ñ‹ забыли войти в вики под Ñвоим именем?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt
new file mode 100644
index 000000000..4d1d4d031
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt
@@ -0,0 +1,4 @@
+====== Ð Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ ======
+
+ЗдеÑÑŒ показаны Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ выбранной ревизией и текущей верÑией данной Ñтраницы.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt
new file mode 100644
index 000000000..bbd2e5913
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt
@@ -0,0 +1,6 @@
+====== Ðайден черновик ======
+
+ПоÑледний раз редактирование Ñтой Ñтраницы не было корректно завершено. Во Ð²Ñ€ÐµÐ¼Ñ Ð²Ð°ÑˆÐµÐ¹ работы был автоматичеÑки Ñохранён черновик, который вы теперь можете воÑÑтановить и продолжить прерванную правку. Ðиже вы видите автоматичеÑки Ñохраненную верÑию.
+
+ПожалуйÑта, решите, хотите ли вы //воÑÑтановить// потерÑнную верÑию, //удалить// черновик, или //отменить// редактирование.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt
new file mode 100644
index 000000000..2237f082e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt
@@ -0,0 +1,2 @@
+Отредактируйте Ñтраницу и нажмите ''Сохранить''. Прочтите [[wiki:syntax]] Ð´Ð»Ñ Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ ÑинтакÑиÑом вики. ПожалуйÑта, редактируйте только в том Ñлучае, еÑли планируете **улучшить** Ñодержимое. ЕÑли Ð’Ñ‹ проÑто хотите потеÑтировать что-либо, воÑпользуйтеÑÑŒ Ñпециальной Ñтраницей: [[playground:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt
new file mode 100644
index 000000000..db843ec1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt
@@ -0,0 +1,2 @@
+**Ð’Ñ‹ загрузили Ñтарую ревизию документа!** Сохранив её, вы Ñоздадите новую текущую верÑию Ñ Ñтим Ñодержимым.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt
new file mode 100644
index 000000000..376d58947
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt
@@ -0,0 +1,4 @@
+====== Содержание ======
+
+Перед Вами ÑпиÑок доÑтупных Ñтраниц, упорÑдоченный по проÑтранÑтвам имён ([[doku>namespaces|namespaces]]).
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html
new file mode 100644
index 000000000..d7022dd46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html
@@ -0,0 +1,7 @@
+<p>Эта Ñтраница предназначена помочь в первоначальной уÑтановке и конфигурации <a href="http://dokuwiki.org">DokuWiki</a>. Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ программе уÑтановки доÑтупна на её <a href="http://dokuwiki.org/installer">Ñтранице документации</a>.</p>
+
+<p>DokuWiki иÑпользует обычные файлы Ð´Ð»Ñ Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñтраниц и дополнительной информации (например, изображений, поиÑкового индекÑа, предыдущих верÑий Ñтраницы, и Ñ‚.д.). Ð”Ð»Ñ ÑƒÑпешной работы DokuWiki <strong>необходим</strong> доÑтуп на запиÑÑŒ к директориÑм Ñ Ñтими файлами. Ð”Ð°Ð½Ð½Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° уÑтановки не может ÑамоÑтоÑтельно изменÑÑ‚ÑŒ ÑиÑтемные права доÑтупа к директориÑм. Обычно Ñто делаетÑÑ Ð½Ð°Ð¿Ñ€Ñмую из командной Ñтроки (shell), или, еÑли Ð’Ñ‹ иÑпользуете удалённый хоÑтинг, через FTP или панель ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ хоÑтинга (например, cPanel).</p>
+
+<p>Программа уÑтановки включит иÑпользование ÑпиÑков ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð¾Ñтупа (<acronym title="access control list">ACL</acronym>) в Вашей DokuWiki. Это позволит админиÑтратору, поÑле авторизации в DokuWiki, иÑпользовать Ñпециальное меню Ð´Ð»Ñ ÑƒÑтановки плагинов, ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñми и доÑтупом к Ñтраницам вики, а также Ð´Ð»Ñ Ð½Ð°Ñтройки конфигурационных параметров. СпиÑки ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð¾Ñтупа не обÑзательны Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ DokuWiki, однако они позволÑÑŽÑ‚ упроÑтить управление вашей DokuWiki.</p>
+
+<p>Опытным пользователÑм и пользователÑм Ñо Ñпециальными требованиÑми к уÑтановке рекомендуетÑÑ Ð¾Ð±Ñ€Ð°Ñ‚Ð¸Ñ‚ÑŒÑÑ Ð¿Ð¾ Ñледующим ÑÑылкам Ð´Ð»Ñ ÑƒÑ‚Ð¾Ñ‡Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей <a href="http://dokuwiki.org/install">процеÑÑа уÑтановки</a> и <a href="http://dokuwiki.org/config">параметров конфигурации</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php
new file mode 100644
index 000000000..f6cec8170
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php
@@ -0,0 +1,258 @@
+<?php
+/**
+ * Russian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Yuri Pimenov <up@ftpsearch.lv>
+ * @author Igor Tarasov <tigr@mail15.com>
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author Kaens Bard <kaens@mail.ru>
+ * @author Andrew Pleshakov <beotiger@mail.ru>
+ * @author Змей ЭтерийÑкий evil_snake@eternion.ru
+ * @author Hikaru Nakajima <jisatsu@mail.ru>
+ * @author Alexei Tereschenko <alexeitlex@yahoo.com>
+ * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Alexander Sorkin <kibizoid@gmail.com>
+ * @author Kirill Krasnov <krasnovforum@gmail.com>
+ * @author Vlad Tsybenko <vlad.development@gmail.com>
+ */
+$lang['encoding'] = ' utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '«';
+$lang['doublequoteclosing'] = '»';
+$lang['singlequoteopening'] = '„';
+$lang['singlequoteclosing'] = '“';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Править Ñтраницу';
+$lang['btn_source'] = 'Показать иÑходный текÑÑ‚';
+$lang['btn_show'] = 'Показать Ñтраницу';
+$lang['btn_create'] = 'Создать Ñтраницу';
+$lang['btn_search'] = 'ПоиÑк';
+$lang['btn_save'] = 'Сохранить';
+$lang['btn_preview'] = 'ПроÑмотр';
+$lang['btn_top'] = 'Ðаверх';
+$lang['btn_newer'] = '<< более новые';
+$lang['btn_older'] = 'более Ñтарые >>';
+$lang['btn_revs'] = 'ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ñтраницы';
+$lang['btn_recent'] = 'Ðедавние изменениÑ';
+$lang['btn_upload'] = 'Закачать';
+$lang['btn_cancel'] = 'Отменить';
+$lang['btn_index'] = 'Ð’Ñе Ñтраницы';
+$lang['btn_secedit'] = 'Править';
+$lang['btn_login'] = 'Войти';
+$lang['btn_logout'] = 'Выйти';
+$lang['btn_admin'] = 'Управление';
+$lang['btn_update'] = 'Обновить';
+$lang['btn_delete'] = 'Удалить';
+$lang['btn_back'] = 'Ðазад';
+$lang['btn_backlink'] = 'СÑылки Ñюда';
+$lang['btn_backtomedia'] = 'ВернутьÑÑ Ðº выбору медиа-файла';
+$lang['btn_subscribe'] = 'ПодпиÑатьÑÑ (вÑе правки)';
+$lang['btn_unsubscribe'] = 'ОтпиÑатьÑÑ (вÑе правки)';
+$lang['btn_subscribens'] = 'ПодпиÑатьÑÑ (правки Ñтого раздела)';
+$lang['btn_unsubscribens'] = 'ОтпиÑатьÑÑ (правки Ñтого раздела)';
+$lang['btn_profile'] = 'Профиль';
+$lang['btn_reset'] = 'СброÑ';
+$lang['btn_resendpwd'] = 'ПоÑлать новый пароль';
+$lang['btn_draft'] = 'Править черновик';
+$lang['btn_recover'] = 'ВоÑÑтановить черновик';
+$lang['btn_draftdel'] = 'Удалить черновик';
+$lang['btn_revert'] = 'ВоÑÑтановить';
+$lang['loggedinas'] = 'Зашли как';
+$lang['user'] = 'Логин';
+$lang['pass'] = 'Пароль';
+$lang['newpass'] = 'Ðовый пароль';
+$lang['oldpass'] = 'Введите текущий пароль';
+$lang['passchk'] = 'повторите';
+$lang['remember'] = 'Запомнить менÑ';
+$lang['fullname'] = 'Полное имÑ';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'ЗарегиÑтрироватьÑÑ';
+$lang['profile'] = 'Профиль пользователÑ';
+$lang['badlogin'] = 'Извините, неверное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль.';
+$lang['minoredit'] = 'Ðебольшие изменениÑ';
+$lang['draftdate'] = 'Черновик Ñохранён';
+$lang['nosecedit'] = 'За Ñто Ð²Ñ€ÐµÐ¼Ñ Ñтраница была изменена, и Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Ñекции уÑтарела. Загружена Ð¿Ð¾Ð»Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñтраницы.';
+$lang['regmissing'] = 'Извините, вам Ñледует заполнить вÑе полÑ.';
+$lang['reguexists'] = 'Извините, пользователь Ñ Ñ‚Ð°ÐºÐ¸Ð¼ логином уже ÑущеÑтвует.';
+$lang['regsuccess'] = 'Пользователь Ñоздан, пароль выÑлан на e-mail.';
+$lang['regsuccess2'] = 'Пользователь Ñоздан.';
+$lang['regmailfail'] = 'Похоже, проблема Ñ Ð¿Ð¾Ñылкой Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¿Ð¾ почте. ПожалуйÑта, Ñообщите админиÑтратору!';
+$lang['regbadmail'] = 'Данный Вами Ð°Ð´Ñ€ÐµÑ e-mail выглÑдит неправильным. ЕÑли вы Ñчитаете Ñто ошибкой, Ñообщите админу.';
+$lang['regbadpass'] = 'Два введённых Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ идентичны. ПожалуйÑта, попробуйте ещё раз.';
+$lang['regpwmail'] = 'Ваш пароль Ð´Ð»Ñ ÑиÑтемы DokuWiki';
+$lang['reghere'] = 'У Ð²Ð°Ñ ÐµÑ‰Ñ‘ нет аккаунта? Извольте получить';
+$lang['profna'] = 'Ð”Ð°Ð½Ð½Ð°Ñ Ð²Ð¸ÐºÐ¸ не поддерживает изменение профилÑ';
+$lang['profnochange'] = 'Изменений не было внеÑено, профиль не обновлён.';
+$lang['profnoempty'] = 'Логин и Ð°Ð´Ñ€ÐµÑ e-mail не могут быть пуÑтыми.';
+$lang['profchanged'] = 'Профиль Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑƒÑпешно обновлён.';
+$lang['pwdforget'] = 'Забыли пароль? Получите новый';
+$lang['resendna'] = 'Ð”Ð°Ð½Ð½Ð°Ñ Ð²Ð¸ÐºÐ¸ не поддерживает повторную отправку паролÑ.';
+$lang['resendpwd'] = 'Ð’Ñ‹Ñлать пароль длÑ';
+$lang['resendpwdmissing'] = 'Ð’Ñ‹ должны заполнить вÑе Ð¿Ð¾Ð»Ñ Ñ„Ð¾Ñ€Ð¼Ñ‹.';
+$lang['resendpwdnouser'] = 'Пользователь Ñ Ñ‚Ð°ÐºÐ¸Ð¼ логином не обнаружен в нашей базе данных.';
+$lang['resendpwdbadauth'] = 'Извините, неверный код авторизации. УбедитеÑÑŒ, что Ð’Ñ‹ полноÑтью Ñкопировали ÑÑылку. ';
+$lang['resendpwdconfirm'] = 'СÑылка Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð±Ñ‹Ð»Ð° выÑлана по e-mail. ';
+$lang['resendpwdsuccess'] = 'Ваш новый пароль был выÑлан по e-mail.';
+$lang['license'] = 'За иÑключением Ñлучаев, когда указано иное, Ñодержимое Ñтой вики предоÑтавлÑетÑÑ Ð½Ð° уÑловиÑÑ… Ñледующей лицензии:';
+$lang['licenseok'] = 'Примечание: Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€ÑƒÑ Ñту Ñтраницу, Ð’Ñ‹ ÑоглашаетеÑÑŒ на иÑпользование вашего вклада на уÑловиÑÑ… Ñледующей лицензии:';
+$lang['searchmedia'] = 'ПоиÑк по имени файла:';
+$lang['searchmedia_in'] = 'ПоиÑк в %s';
+$lang['txt_upload'] = 'Выберите файл Ð´Ð»Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÐ¸';
+$lang['txt_filename'] = 'Введите Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° в вики (необÑзательно)';
+$lang['txt_overwrt'] = 'ПерезапиÑать ÑущеÑтвующий файл';
+$lang['lockedby'] = 'В данный момент заблокирован';
+$lang['lockexpire'] = 'Блокировка иÑтекает в';
+$lang['willexpire'] = 'Ваша блокировка Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ñтой Ñтраницы иÑтекает в течение минуты.\nЧтобы избежать конфликтов и ÑброÑить таймер блокировки, нажмите кнопку проÑмотра.';
+$lang['notsavedyet'] = 'ÐеÑохранённые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ потерÑны.\nÐ’Ñ‹ дейÑтвительно хотите продолжить?';
+$lang['rssfailed'] = 'Произошла ошибка при получении Ñледующей новоÑтной ленты: ';
+$lang['nothingfound'] = 'Ðичего не найдено.';
+$lang['mediaselect'] = 'Выбор медиа-файла';
+$lang['fileupload'] = 'Закачка медиа-файла';
+$lang['uploadsucc'] = 'Закачка произведена уÑпешно';
+$lang['uploadfail'] = 'Закачка не удалаÑÑŒ. Возможно, проблемы Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ доÑтупа?';
+$lang['uploadwrong'] = 'Ð’ закачке отказано. Файлы Ñ Ñ‚Ð°ÐºÐ¸Ð¼ раÑширением запрещены. ';
+$lang['uploadexist'] = 'Файл Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем ÑущеÑтвует. Загрузка не произведена.';
+$lang['uploadbadcontent'] = 'Содержание файла не ÑоответÑтвует раÑширению %s.';
+$lang['uploadspam'] = 'Закачка заблокирована Ñпам-фильтром.';
+$lang['uploadxss'] = 'Закачка заблокирована по ÑоображениÑм безопаÑноÑти.';
+$lang['uploadsize'] = 'Загруженный файл был Ñлишком большой. (макÑ. %s)';
+$lang['deletesucc'] = 'Файл "%s" был удалён.';
+$lang['deletefail'] = 'Ðевозможно удалить файл "%s". Проверьте права доÑтупа к файлу.';
+$lang['mediainuse'] = 'Файл "%s" не был удалён - файл вÑÑ‘ ещё иÑпользуетÑÑ.';
+$lang['namespaces'] = 'ПроÑтранÑтва имён';
+$lang['mediafiles'] = 'ДоÑтупные файлы';
+$lang['js']['searchmedia'] = 'ПоиÑк файлов';
+$lang['js']['keepopen'] = 'Ðе закрывать окно поÑле выбора';
+$lang['js']['hidedetails'] = 'Скрыть детали';
+$lang['js']['nosmblinks'] = 'СÑылка на Ñетевые каталоги Windows работает только из Интернет ЭкÑплорера
+Ðо Ð’Ñ‹ можете Ñкопировать ÑÑылку.';
+$lang['js']['linkwiz'] = 'МаÑтер ÑÑылок';
+$lang['js']['linkto'] = 'СÑылка на:';
+$lang['js']['del_confirm'] = 'Ð’Ñ‹ на Ñамом деле желаете удалить выбранное?';
+$lang['js']['mu_btn'] = 'Загрузить неÑколько файлов одновременно';
+$lang['mediausage'] = 'Ð”Ð»Ñ ÑÑылки на Ñтот файл иÑпользуйте Ñледующий ÑинтакÑиÑ:';
+$lang['mediaview'] = 'ПоÑмотреть иÑходный файл';
+$lang['mediaroot'] = 'корень';
+$lang['mediaupload'] = 'ЗдеÑÑŒ можно загрузить файл в текущий каталог ("проÑтранÑтво имен"). Чтобы Ñоздать подкаталоги, добавьте их к началу имени файла ("Загрузить как"). Имена подкаталогов разделÑÑŽÑ‚ÑÑ Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ñми. ';
+$lang['mediaextchange'] = 'РаÑширение изменилоÑÑŒ: Ñ .%s на .%s!';
+$lang['reference'] = 'СÑылки длÑ';
+$lang['ref_inuse'] = 'Этот файл не может быть удалён, так как он иÑпользуетÑÑ Ñледующими Ñтраницами:';
+$lang['ref_hidden'] = 'Ðекоторые ÑÑылки находÑÑ‚ÑÑ Ð½Ð° Ñтраницах, на чтение которых у Ð’Ð°Ñ Ð½ÐµÑ‚ прав';
+$lang['hits'] = 'ÑоответÑтвий';
+$lang['quickhits'] = 'СоответÑÑ‚Ð²Ð¸Ñ Ð² названиÑÑ… Ñтраниц';
+$lang['toc'] = 'Содержание';
+$lang['current'] = 'текущий';
+$lang['yours'] = 'Ваша верÑиÑ';
+$lang['diff'] = 'показать Ð¾Ñ‚Ð»Ð¸Ñ‡Ð¸Ñ Ð¾Ñ‚ текущей верÑии';
+$lang['diff2'] = 'Показать Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ ревизиÑми ';
+$lang['line'] = 'Строка';
+$lang['breadcrumb'] = 'Ð’Ñ‹ поÑетили';
+$lang['youarehere'] = 'Ð’Ñ‹ находитеÑÑŒ здеÑÑŒ';
+$lang['lastmod'] = 'ПоÑледние изменениÑ';
+$lang['by'] = ' От';
+$lang['deleted'] = 'удалено';
+$lang['created'] = 'Ñоздано';
+$lang['restored'] = 'ÑÑ‚Ð°Ñ€Ð°Ñ Ñ€ÐµÐ²Ð¸Ð·Ð¸Ñ Ð²Ð¾ÑÑтановлена';
+$lang['external_edit'] = 'внешнее изменение';
+$lang['summary'] = 'Сводка изменений';
+$lang['noflash'] = 'Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñтого Ñодержимого требуетÑÑ <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['download'] = 'Скачать код';
+$lang['mail_newpage'] = 'Ñтраница добавлена:';
+$lang['mail_changed'] = 'Ñтраница изменена:';
+$lang['mail_new_user'] = 'новый пользователь:';
+$lang['mail_upload'] = 'файл закачан:';
+$lang['qb_bold'] = 'Полужирный шрифт';
+$lang['qb_italic'] = 'КурÑивный шрифт';
+$lang['qb_underl'] = 'Подчеркивание';
+$lang['qb_code'] = 'ТекÑÑ‚ кода';
+$lang['qb_strike'] = 'Зачёркнутый шрифт';
+$lang['qb_h1'] = 'Заголовок ÑƒÑ€Ð¾Ð²Ð½Ñ 1';
+$lang['qb_h2'] = 'Заголовок ÑƒÑ€Ð¾Ð²Ð½Ñ 2';
+$lang['qb_h3'] = 'Заголовок ÑƒÑ€Ð¾Ð²Ð½Ñ 3';
+$lang['qb_h4'] = 'Заголовок ÑƒÑ€Ð¾Ð²Ð½Ñ 4';
+$lang['qb_h5'] = 'Заголовок ÑƒÑ€Ð¾Ð²Ð½Ñ 5';
+$lang['qb_h'] = 'Заголовок';
+$lang['qb_hs'] = 'Выбор заголовка';
+$lang['qb_hplus'] = 'Заголовок более выÑокого уровнÑ';
+$lang['qb_hminus'] = 'Заголовок более низкого ÑƒÑ€Ð¾Ð²Ð½Ñ (подзаголовок)';
+$lang['qb_hequal'] = 'Заголовок текущего уровнÑ';
+$lang['qb_link'] = 'ВнутреннÑÑ ÑÑылка';
+$lang['qb_extlink'] = 'ВнешнÑÑ ÑÑылка';
+$lang['qb_hr'] = 'Разделитель';
+$lang['qb_ol'] = 'Элемент нумерованного ÑпиÑка';
+$lang['qb_ul'] = 'Элемент ненумерованного ÑпиÑка';
+$lang['qb_media'] = 'Добавить картинки и другие файлы';
+$lang['qb_sig'] = 'Ð’Ñтавить подпиÑÑŒ';
+$lang['qb_smileys'] = 'Смайлики';
+$lang['qb_chars'] = 'Специальные Ñимволы';
+$lang['upperns'] = 'Перейти в родительÑкое проÑтранÑтво имен';
+$lang['admin_register'] = 'Добавить пользователÑ';
+$lang['metaedit'] = 'Править метаданные';
+$lang['metasaveerr'] = 'Ошибка запиÑи метаданных';
+$lang['metasaveok'] = 'Метаданные Ñохранены';
+$lang['img_backto'] = 'ВернутьÑÑ Ðº';
+$lang['img_title'] = 'Ðазвание';
+$lang['img_caption'] = 'ПодпиÑÑŒ';
+$lang['img_date'] = 'Дата';
+$lang['img_fname'] = 'Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°';
+$lang['img_fsize'] = 'Размер';
+$lang['img_artist'] = 'Фотограф';
+$lang['img_copyr'] = 'ÐвторÑкие права';
+$lang['img_format'] = 'Формат';
+$lang['img_camera'] = 'Модель';
+$lang['img_keywords'] = 'Ключевые Ñлова';
+$lang['subscribe_success'] = '%s добавлен(а) в ÑпиÑок раÑÑылки Ð´Ð»Ñ Ñтраницы %s';
+$lang['subscribe_error'] = 'Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %s в ÑпиÑок раÑÑылки Ð´Ð»Ñ Ñтраницы %s';
+$lang['subscribe_noaddress'] = 'Ð’ вашем профиле не указан Ð°Ð´Ñ€ÐµÑ Ñлектронной почты. Ввиду Ñтого вы не можете подпиÑыватьÑÑ Ð½Ð° раÑÑылки.';
+$lang['unsubscribe_success'] = '%s удален(а) из ÑпиÑка раÑÑылки Ð´Ð»Ñ Ñтраницы %s';
+$lang['unsubscribe_error'] = 'Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ %s из ÑпиÑка раÑÑылки Ð´Ð»Ñ Ñтраницы %s';
+$lang['authmodfailed'] = 'ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ пользователÑ. ПожалуйÑта, Ñообщите об Ñтом вашему админиÑтратору вики.';
+$lang['authtempfail'] = 'ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ временно недоÑтупна. ЕÑли проблема продолжаетÑÑ ÐºÐ°ÐºÐ¾Ðµ-то времÑ, пожалуйÑта, Ñообщите об Ñтом вашему админиÑтратору вики.';
+$lang['i_chooselang'] = 'Выберите Ваш Ñзык/Language';
+$lang['i_installer'] = 'УÑтановка DokuWiki';
+$lang['i_wikiname'] = 'Ðазвание вики';
+$lang['i_enableacl'] = 'Разрешить ограничение прав доÑтупа (рекомендуетÑÑ)';
+$lang['i_superuser'] = 'Суперюзер';
+$lang['i_problems'] = 'Программа уÑтановки ÑтолкнулаÑÑŒ Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°Ð¼Ð¸, перечиÑленными ниже. Чтобы продолжить, вам необходимо их уÑтранить. ';
+$lang['i_modified'] = 'Из Ñоображений безопаÑноÑти Ñта программа запуÑкаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на новой, неизменённой уÑтановке DokuWiki.
+ Вам нужно либо заново раÑпаковать Ñкачанный пакет уÑтановки, либо обратитьÑÑ Ðº полной
+ <a href="http://dokuwiki.org/install">инÑтрукции по уÑтановке DokuWiki</a>';
+$lang['i_funcna'] = 'Ð¤ÑƒÐ½ÐºÑ†Ð¸Ñ PHP <code>%s</code> недоÑтупна. Может быть, она по какой-то причине заблокирована Вашим хоÑтингом?';
+$lang['i_phpver'] = 'Ваша верÑÐ¸Ñ PHP (<code>%s</code>) ниже требуемой (<code>%s</code>). Вам необходимо обновить уÑтановленную верÑию PHP.';
+$lang['i_permfail'] = '<code>%s</code> недоÑтупна Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи DokuWiki. Вам необходимо иÑправить ÑиÑтемные права доÑтупа Ð´Ð»Ñ Ñтой директории!';
+$lang['i_confexists'] = '<code>%s</code> уже ÑущеÑтвует';
+$lang['i_writeerr'] = 'Ðе удалоÑÑŒ Ñоздать <code>%s</code>. Вам необходимо проверить ÑиÑтемные права доÑтупа к файлу/директориÑм и Ñоздать файл вручную. ';
+$lang['i_badhash'] = 'dokuwiki.php не раÑпознана или изменена (Ñ…Ñш=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - недопуÑтимое или пуÑтое значение';
+$lang['i_success'] = 'ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾ÑˆÐ»Ð° уÑпешно. Теперь вы можете удалить файл install.php. Переходите к
+ <a href="doku.php">вашей новой DokuWiki</a>.';
+$lang['i_failure'] = 'При запиÑи в файлы конфигурации были обнаружены ошибки. Возможно, вам придетÑÑ Ð¸Ñправить их вручную, прежде чем вы Ñможете иÑпользовать <a href="doku.php">Вашу новую DokuWiki</a>.';
+$lang['i_policy'] = 'ИÑÑ…Ð¾Ð´Ð½Ð°Ñ Ð¿Ð¾Ð»Ð¸Ñ‚Ð¸ÐºÐ° прав доÑтупа';
+$lang['i_pol0'] = 'ÐžÑ‚ÐºÑ€Ñ‹Ñ‚Ð°Ñ Ð²Ð¸ÐºÐ¸ (чтение, запиÑÑŒ, закачка файлов Ð´Ð»Ñ Ð²Ñех)';
+$lang['i_pol1'] = 'ОбщедоÑÑ‚ÑƒÐ¿Ð½Ð°Ñ Ð²Ð¸ÐºÐ¸ (чтение Ð´Ð»Ñ Ð²Ñех, запиÑÑŒ и загрузка файлов Ð´Ð»Ñ Ð·Ð°Ñ€ÐµÐ³Ð¸Ñтрированных пользователей)';
+$lang['i_pol2'] = 'Ð—Ð°ÐºÑ€Ñ‹Ñ‚Ð°Ñ Ð²Ð¸ÐºÐ¸ (чтение, запиÑÑŒ и загрузка файлов только Ð´Ð»Ñ Ð·Ð°Ñ€ÐµÐ³Ð¸Ñтрированных пользователей)';
+$lang['i_retry'] = 'Повторить попытку';
+$lang['mu_intro'] = 'ЗдеÑÑŒ Ð’Ñ‹ можете загрузить неÑколько файлов Ñразу. Кликните на "обзор", чтобы добавить их в ÑпиÑок. Ðажмите "загрузить" когда будете готовы.';
+$lang['mu_gridname'] = 'Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°';
+$lang['mu_gridsize'] = 'Размер';
+$lang['mu_gridstat'] = 'СтатуÑ';
+$lang['mu_namespace'] = 'ПроÑтранÑтво имён';
+$lang['mu_browse'] = 'Обзор';
+$lang['mu_toobig'] = 'Ñлишком большой';
+$lang['mu_ready'] = 'готово к загрузке';
+$lang['mu_done'] = 'завершено';
+$lang['mu_fail'] = 'провалено';
+$lang['mu_authfail'] = 'иÑтекло Ð²Ñ€ÐµÐ¼Ñ ÑеÑÑии';
+$lang['mu_progress'] = '@PCT@% загружено';
+$lang['mu_filetypes'] = 'ДопуÑтимые типы файлов';
+$lang['mu_info'] = 'файлов загружено.';
+$lang['mu_lasterr'] = 'ПоÑледнÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°:';
+$lang['recent_global'] = 'Ð’Ñ‹ проÑматриваете Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² проÑтранÑтве имён <b>%s</b>. Ð’Ñ‹ можете также <a href="%s">проÑмотреть недавние Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° вÑей вики</a>.';
+$lang['years'] = '%d лет назад';
+$lang['months'] = '%d меÑÑц(ев) назад';
+$lang['weeks'] = '%d недель назад';
+$lang['days'] = '%d дней назад';
+$lang['hours'] = '%d чаÑ(ов) назад';
+$lang['minutes'] = '%d минут назад';
+$lang['seconds'] = '%d Ñекунд назад';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt
new file mode 100644
index 000000000..3e868ba9a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt
@@ -0,0 +1,3 @@
+====== Страница заблокирована ======
+
+Эта Ñтраница в данный момент заблокирована Ð´Ð»Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ пользователем. Вам придётÑÑ Ð¿Ð¾Ð´Ð¾Ð¶Ð´Ð°Ñ‚ÑŒ, пока Ñтот пользователь закончит редактирование или иÑтечёт Ð²Ñ€ÐµÐ¼Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ¸.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt
new file mode 100644
index 000000000..967131874
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt
@@ -0,0 +1,4 @@
+====== ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ ======
+
+Ð’ данный момент Ð’Ñ‹ не в ÑиÑтеме. ÐвторизируйтеÑÑŒ при помощи Ñледующей формы. //Замечание:// Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ у Ð²Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть включены cookies.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt
new file mode 100644
index 000000000..596fd8275
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt
@@ -0,0 +1,17 @@
+Ð’ вашей DokuWiki была добавлена или изменена Ñтраница. ПодробноÑти:
+
+Дата : @DATE@
+Браузер : @BROWSER@
+IP-Ð°Ð´Ñ€ÐµÑ : @IPADDRESS@
+ХоÑÑ‚ : @HOSTNAME@
+Ð¡Ñ‚Ð°Ñ€Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ : @OLDPAGE@
+ÐÐ¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ : @NEWPAGE@
+Сводка изменений : @SUMMARY@
+Пользователь : @USER@
+
+@DIFF@
+
+
+--
+Это пиÑьмо было Ñгенерировано DokuWiki по адреÑу
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt
new file mode 100644
index 000000000..042941310
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt
@@ -0,0 +1,3 @@
+====== Эта Ñтраница ещё не ÑущеÑтвует ======
+
+Ð’Ñ‹ перешли по ÑÑылке на тему, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð¹ ещё не Ñоздана Ñтраница. ЕÑли позволÑÑŽÑ‚ Ваши права доÑтупа, Ð’Ñ‹ можете Ñоздать её, нажав на кнопку "Создать Ñтраницу".
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt
new file mode 100644
index 000000000..db36a0ddd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt
@@ -0,0 +1,4 @@
+====== Такой верÑии не ÑущеÑтвует ======
+
+Ð£ÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñтраницы не ÑущеÑтвует. Ðажмите на кнопку ''ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ñтраницы'', чтобы получить ÑпиÑок доÑтупных предыдущих верÑий Ñтого документа.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt
new file mode 100644
index 000000000..a3f37843d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt
@@ -0,0 +1,4 @@
+====== ПроÑмотр ======
+
+ЗдеÑÑŒ показано, как Ваш текÑÑ‚ будет выглÑдеть. Внимание: текÑÑ‚ ещё **не Ñохранён!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt
new file mode 100644
index 000000000..89c84791e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt
@@ -0,0 +1,13 @@
+ЗдравÑтвуйте, @FULLNAME@!
+
+Кто-то запроÑил новый пароль Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° в @TITLE@ по адреÑу @DOKUWIKIURL@
+
+ЕÑли Ð’Ñ‹ не запрашивали новый пароль, проÑто проигнорируйте Ñтот e-mail.
+
+Ð”Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ, что Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð±Ñ‹Ð» дейÑтвительно Ñделан Вами, пожалуйÑта, перейдите по Ñледующей ÑÑылке.
+
+@CONFIRM@
+
+--
+Это Ñообщение было Ñгенерировано DokuWiki по адреÑу
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt
new file mode 100644
index 000000000..ed2754ac7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt
@@ -0,0 +1,2 @@
+Эта Ñтраница — только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. Ð’Ñ‹ можете поÑмотреть иÑходный текÑÑ‚, но не можете его изменить. Сообщите админиÑтратору, еÑли Ñчитаете, что Ñто неправильно.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt
new file mode 100644
index 000000000..aa088c734
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt
@@ -0,0 +1,5 @@
+====== Ðедавние Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ======
+
+Эти Ñтраницы были изменены недавно.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt
new file mode 100644
index 000000000..23ed33656
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt
@@ -0,0 +1,3 @@
+====== РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ======
+
+Ð”Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации в вики заполните вÑе Ð¿Ð¾Ð»Ñ Ð½Ð¸Ð¶Ðµ. Обратите внимание на **правильноÑÑ‚ÑŒ адреÑа е-мÑйл** - туда будет выÑлан пароль в том Ñлучае, еÑли Ð’Ð°Ñ Ð½Ðµ проÑÑÑ‚ ÑамоÑтоÑтельно ввеÑти его здеÑÑŒ. Логин должен удовлетворÑÑ‚ÑŒ ограничениÑм Ð´Ð»Ñ [[doku>pagename|идентификатора Ñтраницы]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt
new file mode 100644
index 000000000..615cff543
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt
@@ -0,0 +1,14 @@
+Был зарегиÑтрирован новый пользователь. ПодробноÑти:
+
+Логин : @NEWUSER@
+Полное Ð¸Ð¼Ñ : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+Дата : @DATE@
+Браузер : @BROWSER@
+ÐÐ´Ñ€ÐµÑ IP : @IPADDRESS@
+ХоÑÑ‚ : @HOSTNAME@
+
+--
+Это Ñообщение было Ñгенерировано DokuWiki по адреÑу
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt
new file mode 100644
index 000000000..9bcd98dea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt
@@ -0,0 +1,3 @@
+====== ПоÑлать новый пароль ======
+
+Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð²Ð²ÐµÐ´Ð¸Ñ‚Ðµ требуемые данные ниже. Ваш новый пароль будет поÑлан по адреÑу е-мÑйл, зарегиÑтрированному на Ваше имÑ. Указанное ниже Ð¸Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ быть Вашим логином в Ñтой вики.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt
new file mode 100644
index 000000000..4341969a3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt
@@ -0,0 +1,3 @@
+====== ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ñтраницы ======
+
+Перед Вами — иÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¾Ðº текущего документа. Чтобы вернутьÑÑ Ðº одной из предыдущих верÑий, выберите нужную, нажмите ''Править Ñтраницу'' и Ñохраните.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt
new file mode 100644
index 000000000..33cac358a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt
@@ -0,0 +1,5 @@
+====== ПоиÑк ======
+
+Перед Вами — результаты поиÑка. ЕÑли Ð’Ñ‹ не нашли то, что иÑкали, Ð’Ñ‹ можете Ñоздать новую Ñтраницу Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼, Ñовпадающим Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñом. Чтобы Ñделать Ñто, проÑто нажмите на кнопку ''Создать Ñтраницу''.
+
+===== Результаты ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt
new file mode 100644
index 000000000..acb814e17
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt
@@ -0,0 +1,2 @@
+**Это — ÑÑ‚Ð°Ñ€Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt
new file mode 100644
index 000000000..a6df13902
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt
@@ -0,0 +1,93 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+более
+больше
+будет
+будто
+была
+было
+быть
+вдруг
+ведь
+впрочем
+вÑегда
+вÑех
+вÑего
+говорил
+говорила
+даже
+другой
+другаÑ
+еÑли
+еÑÑ‚ÑŒ
+жизнь
+жизнÑ
+зачем
+здеÑÑŒ
+иногда
+кажетÑÑ
+какаÑ
+какой
+какое
+когда
+конечно
+лучше
+между
+менее
+меньше
+менÑ
+много
+может
+можно
+надо
+наконец
+него
+нельзÑ
+нибудь
+никогда
+ничего
+нужно
+один
+одна
+опÑÑ‚ÑŒ
+перед
+поÑле
+потом
+потому
+почти
+разве
+Ñвое
+Ñвоё
+Ñвой
+Ñвою
+ÑвоÑ
+Ñебе
+ÑебÑ
+ÑегоднÑ
+ÑейчаÑ
+Ñказал
+Ñказала
+Ñказать
+ÑовÑем
+такаÑ
+такое
+такой
+тебÑ
+теперь
+тогда
+того
+тоже
+только
+тому
+хорошо
+хоть
+чего
+через
+чтоб
+чтобы
+чуть
+Ñтого
+Ñтой
+Ñтим
+Ñтот
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt
new file mode 100644
index 000000000..1a846ac32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt
@@ -0,0 +1,17 @@
+ЗдравÑтвуйте!
+
+Страница @PAGE@ в вики @TITLE@ была изменена.
+Ðиже предÑтавлены изменениÑ:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Чтобы отпиÑатьÑÑ Ð¾Ñ‚ изменений Ñтой Ñтраницы,
+войдите под Ñвоим именем в Вики по адреÑу
+@DOKUWIKIURL@, перейдите на Ñтраницу
+@NEWPAGE@ и нажмите 'ОтпиÑатьÑÑ'.
+
+--
+Это Ñообщение было Ñгенерировано DokuWiki по адреÑу
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt
new file mode 100644
index 000000000..136184467
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Обновить профиль ======
+
+Ðеобходимо заполнить только те полÑ, которые Ð’Ñ‹ хотите изменить. Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ может быть изменено.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt
new file mode 100644
index 000000000..07dbf186d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt
@@ -0,0 +1,14 @@
+Ð’ вашу DokuWiki был закачан файл. ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ:
+
+Файл : @MEDIA@
+Дата : @DATE@
+Браузер : @BROWSER@
+ÐÐ´Ñ€ÐµÑ IP : @IPADDRESS@
+ХоÑÑ‚ : @HOSTNAME@
+Размер : @SIZE@
+Тип MIME : @MIME@
+Пользователь: @USER@
+
+--
+Это пиÑьмо было Ñгенерировано DokuWiki по адреÑу
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt
new file mode 100644
index 000000000..09c663fb3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt
@@ -0,0 +1,3 @@
+====== СПÐÐœ заблокирован ======
+
+Ваши Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ **не были** Ñохранены, так как они Ñодержат одно или более запрещенных Ñлов. ЕÑли Ð’Ñ‹ пыталиÑÑŒ добавить Ñпам в Вики -- ай-Ñй-Ñй! ЕÑли Ð’Ñ‹ Ñчитаете, что Ñто какаÑ-то ошибка, обратитеÑÑŒ к админиÑтратору вики.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt
new file mode 100644
index 000000000..039da2ae2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt
@@ -0,0 +1,5 @@
+====== Administrácia ======
+
+Nižšie môžte nájsť zoznam administratívnych úloch, ktoré môžte vykonávať v DokuWiki.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt
new file mode 100644
index 000000000..b3217d545
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt
@@ -0,0 +1,3 @@
+====== Spätné odkazy ======
+
+Tu je zoznam stránok, ktoré pravdepodobne odkazujú na aktuálnu stránku.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt
new file mode 100644
index 000000000..d3cd0f590
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt
@@ -0,0 +1,5 @@
+====== Existuje novšia verzia ======
+
+Existuje novÅ¡ia verzia práve upravovaného dokumentu. To se stáva, keÄ niekto iný zmenil dokument, ktorý práve upravujete.
+
+Prehliadnite si nižšie uvedené rozdiely, prípadne rozdiely z obidvoch verzií ruÄne spojte dohromady a rozhodnite sa, ktorú verziu uchovaÅ¥. Ak zvolíte ''UložiÅ¥', bude uložená vaÅ¡a verzia. V opaÄnom prípade stlaÄte ''Storno'' pre uchovanie pôvodnej verzie.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt
new file mode 100644
index 000000000..6f673c7d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt
@@ -0,0 +1,3 @@
+====== Nepovolená akcia ======
+
+PrepáÄte, ale nemáte dostatoÄné oprávnenie k tejto Äinnosti. Možno ste se zabudli prihlásiÅ¥?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt
new file mode 100644
index 000000000..0e29e7f7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt
@@ -0,0 +1,4 @@
+====== Rozdiely ======
+
+Tu môžete vidieť rozdiely medzi vybranou verziou a aktuálnou verzou danej stránky.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt
new file mode 100644
index 000000000..7e6776deb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt
@@ -0,0 +1,6 @@
+====== Nájdený súbor konceptu ======
+
+VaÅ¡a posledná editácia tejto stránky nebola ukonÄená korektne. Dokuwiki automaticky uložila poÄas vaÅ¡ej práce koncept a ten môžete teraz použiÅ¥ pre pokraÄovanie editácie. Nižšie môžete vidieÅ¥ dáta, ktoré boli uložené.
+
+Prosím, rozhodnite sa, Äi chcete //obnoviÅ¥// vaÅ¡u poslednú editáciu, //zmazaÅ¥// automaticky uložený koncept, alebo //stornovaÅ¥// proces editácie.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt
new file mode 100644
index 000000000..1adf4e16f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt
@@ -0,0 +1 @@
+Upravte stránku a stlaÄte ''UložiÅ¥''. Na stránke [[wiki:syntax]] sa môžete dozvedieÅ¥ viac o Wiki syntaxi. Prosím upravujte stránky len pokiaľ ich môžete **vylepÅ¡it**. Pokiaľ si chcete nieÄo len vyskúšaÅ¥, použite [[playground:playground| pieskovisko]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt
new file mode 100644
index 000000000..6a837c244
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt
@@ -0,0 +1 @@
+**Máte naÄítanú starÅ¡iu verziu dokumentu!** Pokiaľ ju uložíte, vytvoríte tým novú aktuálnú verziu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt
new file mode 100644
index 000000000..7b26d42ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt
@@ -0,0 +1,3 @@
+====== Index ======
+
+Tu je k dispozícii index všetkých dostupných stránok Zoradených podľa [[doku>namespaces|menných priestorov]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html
new file mode 100644
index 000000000..c45b82005
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html
@@ -0,0 +1,23 @@
+<p>Táto stránka sprevádza prvou inštaláciou a konfiguráciou
+<a href="http://dokuwiki.org">Dokuwiki</a>. Viac informácií o tomto Inštalátore je dostupných na jeho
+<a href="http://dokuwiki.org/installer">dokumentaÄnej stránke</a>.</p>
+
+<p>DokuWiki používa bežné súbory pre ukladanie wiki stránok a iných informácií
+priradených k týmto stránkam (napr. obrázkov, vyhľadávacích indexov, starých
+revízií). Ak chcete úspešne narábať s DokuWiki, <strong>musí</strong>
+mať práva pre zápis do adresárov, kde sa ukladajú tieto súbory. Tento Inštalátor
+nie je schopný nastaviť prístupové práva pre adresáre. Je potrebné to urobiť
+priamo cez príkazový riadok, alebo ak využívate webhosting, cez FTP, alebo vaše
+webhostingové administraÄné rozhranie.</p>
+
+<p>Tento Inštalátor nastaví <acronym title="access control list - zoznam prístupových práv">ACL</acronym>
+konfiguráciu vašej Dokuwiki. Umožňuje vytvoriť administrátorské konto
+s prístupom do administraÄného menu s možnosÅ¥ou inÅ¡talácie pluginov, správy
+užívateľov, správy prístupových práv k wiki stránkam a zmeny konfiguraÄných
+nastavení. Nie je nevyhnutné pre používanie Dokuwiki, ale umožňuje to ľahšie
+spravovať Dokuwiki.</p>
+
+<p>Skúsení užívatelia, alebo užívatelia so špeciálnymi požiadavkami môžu použiť
+tieto odkazy pre bližšie informácie týkajúce sa
+<a href="http://dokuwiki.org/install">inÅ¡talaÄných pokynov</a>
+a <a href="http://dokuwiki.org/config">konfiguraÄných nastavení</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php
new file mode 100644
index 000000000..2d9c8efea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php
@@ -0,0 +1,227 @@
+<?php
+/**
+ * Slovak language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Ondrej Vegh <ov@vsieti.sk> with help of the scholars from Zdruzena stredna skola polygraficka in Bratislava
+ * @author Michal Mesko <michal.mesko@gmail.com>
+ * @author exusik@gmail.com
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Upraviť stránku';
+$lang['btn_source'] = 'Zobraziť zdroj stránky';
+$lang['btn_show'] = 'Zobraziť stránku';
+$lang['btn_create'] = 'Vytvoriť stránku';
+$lang['btn_search'] = 'Hľadať';
+$lang['btn_save'] = 'Uložiť';
+$lang['btn_preview'] = 'Náhľad';
+$lang['btn_top'] = 'Hore';
+$lang['btn_newer'] = '<< novšie';
+$lang['btn_older'] = 'staršie >>';
+$lang['btn_revs'] = 'Staršia verzia';
+$lang['btn_recent'] = 'Posledné úpravy';
+$lang['btn_upload'] = 'Nahrať';
+$lang['btn_cancel'] = 'Storno';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Upraviť';
+$lang['btn_login'] = 'Prihlásiť sa';
+$lang['btn_logout'] = 'Odhlásiť sa';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Aktualizovať';
+$lang['btn_delete'] = 'Zmazať';
+$lang['btn_back'] = 'Späť';
+$lang['btn_backlink'] = 'Spätné linky';
+$lang['btn_backtomedia'] = 'Späť na výber média';
+$lang['btn_subscribe'] = 'Posielať zmeny';
+$lang['btn_unsubscribe'] = 'Neposielať zmeny';
+$lang['btn_subscribens'] = 'Posielať zmeny menných priestorov';
+$lang['btn_unsubscribens'] = 'Neposielať zmeny menných priestorov';
+$lang['btn_profile'] = 'Aktualizovať profil';
+$lang['btn_reset'] = 'Zrušiť';
+$lang['btn_resendpwd'] = 'Poslať nové heslo';
+$lang['btn_draft'] = 'Upraviť koncept';
+$lang['btn_recover'] = 'Obnoviť koncept';
+$lang['btn_draftdel'] = 'Zmazať koncept';
+$lang['loggedinas'] = 'Prihlásený(á) ako';
+$lang['user'] = 'Užívateľské meno';
+$lang['pass'] = 'Heslo';
+$lang['newpass'] = 'Nové heslo';
+$lang['oldpass'] = 'PotvrÄ aktuálne heslo';
+$lang['passchk'] = 'EÅ¡te raz znovu';
+$lang['remember'] = 'Zapamätaj si ma';
+$lang['fullname'] = 'Celé meno';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Registrovať';
+$lang['profile'] = 'Užívateľský profil';
+$lang['badlogin'] = 'Zadané užívateľské meno a heslo nie je správne.';
+$lang['minoredit'] = 'Menšie zmeny';
+$lang['draftdate'] = 'Koncept automaticky uložený';
+$lang['nosecedit'] = 'Skránka bola medziÄasom zmenená, informácie o sekcii sú zastaralé a z tohto dôvodu bola nahraná celá stránka.';
+$lang['regmissing'] = 'Musíte vyplniť všetky údaje.';
+$lang['reguexists'] = 'Užívateľ s rovnakým menom je už zaregistrovaný.';
+$lang['regsuccess'] = 'Užívateľský úÄet bol vytvorený a heslo zaslané mailom.';
+$lang['regsuccess2'] = 'Užívateľský úÄet bol vytvorený.';
+$lang['regmailfail'] = 'Zdá sa, že nastala chyba pri posielaní mailu s heslom. Skúste kontaktovať správcu.';
+$lang['regbadmail'] = 'Zadaná mailová adresa nie je platná. Pokiaľ si myslíte, že to je zle, skúste kontaktovať správcu.';
+$lang['regbadpass'] = 'Dve zadané heslá nie sú rovnaké, skúste prosím znovu.';
+$lang['regpwmail'] = 'Vaše heslo do systému DokuWiki';
+$lang['reghere'] = 'Nemáte uživateľský úÄet? Vytvorte si ho';
+$lang['profna'] = 'Toto wiki nepodporuje zmenu profilu';
+$lang['profnochange'] = 'Žiadne zmeny, nie je Äo robiÅ¥.';
+$lang['profnoempty'] = 'Prázdne meno, alebo e-mailová adresa nie sú povolené.';
+$lang['profchanged'] = 'Užívateľský úÄet úspeÅ¡ne zmenený.';
+$lang['pwdforget'] = 'Zabudli ste heslo? Získajte nové!';
+$lang['resendna'] = 'Toto wiki nepodporuje znovuposielanie hesla.';
+$lang['resendpwd'] = 'Pošli nové heslo pre';
+$lang['resendpwdmissing'] = 'PrepáÄte, musíte vyplniÅ¥ vÅ¡etky polia.';
+$lang['resendpwdnouser'] = 'PrepáÄte, nemôžeme nájsÅ¥ zadaného užívateľa v databáze.';
+$lang['resendpwdbadauth'] = 'PrepáÄte, tento autorizaÄný kód nie je platný. Uistite sa, Äi ste použili celý autorizaÄný odkaz.';
+$lang['resendpwdconfirm'] = 'AutorizaÄný odkaz bol zaslaný na e-mail.';
+$lang['resendpwdsuccess'] = 'Vaše nové heslo bolo zaslané na e-mail.';
+$lang['license'] = 'Ak nie je uvedené inak, obsah tejto wiki je uverejnený pod nasledujúcou licenciou:';
+$lang['licenseok'] = 'Poznámka: Zmenou tejto stránky súhlasíte s uverejnením obsahu pod nasledujúcou licenciou:';
+$lang['txt_upload'] = 'Vyberte súbor ako prílohu';
+$lang['txt_filename'] = 'Wiki meno (volitelné)';
+$lang['txt_overwrt'] = 'Prepísať existujúci súbor';
+$lang['lockedby'] = 'Práve zamknuté:';
+$lang['lockexpire'] = 'Zámok vyprší:';
+$lang['willexpire'] = 'Váš zámok pre editáciu za chvílu vyprší.\nAby ste prediÅ¡li konfliktom, stlaÄte tlaÄítko Náhľad a zámok sa predĺži.';
+$lang['notsavedyet'] = 'Neuložené zmeny budú stratené.\nChcete naozaj pokraÄovaÅ¥?';
+$lang['rssfailed'] = 'Nastala chyba pri vytváraní tohto RSS: ';
+$lang['nothingfound'] = 'NiÄ nenájdené.';
+$lang['mediaselect'] = 'Výber dokumentu';
+$lang['fileupload'] = 'Nahrávanie dokumentu';
+$lang['uploadsucc'] = 'Prenos prebehol v poriadku';
+$lang['uploadfail'] = 'Chyba pri nahrávaní. Možno kvôli zle nastaveným právam?';
+$lang['uploadwrong'] = 'Prenos súboru s takouto príponou nie je dovolený.';
+$lang['uploadexist'] = 'Súbor skutoÄne existuje. Nie je Äo robiÅ¥.';
+$lang['uploadbadcontent'] = 'Nahraný obsah sa nezhoduje s príponou súboru %s.';
+$lang['uploadspam'] = 'Nahrávanie bolo zablokované spamovým blacklistom.';
+$lang['uploadxss'] = 'Nahrávanie bolo zablokované kvôli potenciálnemu škodlivému obsahu.';
+$lang['uploadsize'] = 'Nahraný súbor bol príliš veľký. (max %s)';
+$lang['deletesucc'] = 'Súbor "%s" bol zmazaný.';
+$lang['deletefail'] = '"%s" nie je možné zmazať - skontrolujte oprávnenia.';
+$lang['mediainuse'] = 'Súbor "%s" nebol zmazaný - je stále používaný.';
+$lang['namespaces'] = 'Menné priestory';
+$lang['mediafiles'] = 'Dostupné súbory';
+$lang['js']['keepopen'] = 'Po vybraní súboru ponechať okno otvorené';
+$lang['js']['hidedetails'] = 'Skryť detaily';
+$lang['js']['nosmblinks'] = 'Odkazovanie na zdielané prostriedky Windows funguje len v Internet Explorer.
+Aj napriek tomu tento odkaz môžete skopírovat a vložit inde.';
+$lang['js']['mu_btn'] = 'Nahrať viac súborov naraz';
+$lang['mediausage'] = 'Pre odkázanie na súbor použite nasledujúcu syntax:';
+$lang['mediaview'] = 'Zobraziť pôvodný súbor';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = 'NahraÅ¥ súbor do aktuálneho menného priestoru. Pre vytvorenie menného podpriestoru, pridajte jeho názov na zaÄiatok wiki mena (oddelený dvojbodkou)';
+$lang['mediaextchange'] = 'Prípona súboru bola zmenená z .%s na .%s!';
+$lang['reference'] = 'Referencie pre';
+$lang['ref_inuse'] = 'Súbor nemôže byť zmazaný, pretože je stále používaný nasledujúcimi stránkami:';
+$lang['ref_hidden'] = 'Niektoré referencie sú na stránky pre ktoré nemáte právo na Äítanie';
+$lang['hits'] = '- poÄet výskytov';
+$lang['quickhits'] = 'Zodpovedajúce stránky';
+$lang['toc'] = 'Obsah';
+$lang['current'] = 'aktuálne';
+$lang['yours'] = 'Vaša verzia';
+$lang['diff'] = 'zobrazit rozdiely voÄi aktuálnej verzii';
+$lang['diff2'] = 'Ukázať rozdiely medzi vybranými verziami';
+$lang['line'] = 'Riadok';
+$lang['breadcrumb'] = 'História';
+$lang['youarehere'] = 'Nachádzate sa';
+$lang['lastmod'] = 'Posledná úprava';
+$lang['by'] = 'od';
+$lang['deleted'] = 'odstranené';
+$lang['created'] = 'vytvorené';
+$lang['restored'] = 'stará verzia bola obnovena';
+$lang['external_edit'] = 'externá úprava';
+$lang['summary'] = 'Komentár k úpravám';
+$lang['noflash'] = 'Pre zobrazenie tohto obsahu potrebujete <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['mail_newpage'] = 'stránka pridaná:';
+$lang['mail_changed'] = 'stránka zmenená:';
+$lang['mail_new_user'] = 'Nový užívateľ:';
+$lang['mail_upload'] = 'nahraný súbor:';
+$lang['qb_bold'] = 'TuÄné';
+$lang['qb_italic'] = 'Kurzíva';
+$lang['qb_underl'] = 'PodÄiarknutie';
+$lang['qb_code'] = 'Neformátovať (zdrojový kód)';
+$lang['qb_strike'] = 'PreÄiarknutie';
+$lang['qb_h1'] = 'Nadpis 1. úrovne';
+$lang['qb_h2'] = 'Nadpis 2. úrovne';
+$lang['qb_h3'] = 'Nadpis 3. úrovne';
+$lang['qb_h4'] = 'Nadpis 4. úrovne';
+$lang['qb_h5'] = 'Nadpis 5. úrovne';
+$lang['qb_link'] = 'Interný odkaz';
+$lang['qb_extlink'] = 'Externý odkaz';
+$lang['qb_hr'] = 'Horizontálna linka';
+$lang['qb_ol'] = 'Číslovaný zoznam';
+$lang['qb_ul'] = 'NeÄíslovaný zoznam';
+$lang['qb_media'] = 'Vložiť obrázky alebo iné súbory';
+$lang['qb_sig'] = 'Vložiť podpis';
+$lang['qb_smileys'] = 'Smajlíky';
+$lang['qb_chars'] = 'Špeciálne znaky';
+$lang['js']['del_confirm'] = 'Zmazať túto položku?';
+$lang['admin_register'] = 'Pridaj nového užívateľa';
+$lang['metaedit'] = 'Upraviť metainformácie';
+$lang['metasaveerr'] = 'Zápis metainformácií zlyhal';
+$lang['metasaveok'] = 'Metainformácie uložené';
+$lang['img_backto'] = 'Späť na';
+$lang['img_title'] = 'Titul';
+$lang['img_caption'] = 'Popis';
+$lang['img_date'] = 'Dátum';
+$lang['img_fname'] = 'Názov súboru';
+$lang['img_fsize'] = 'Veľkosť';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Kopírovacie práva';
+$lang['img_format'] = 'Formát';
+$lang['img_camera'] = 'Fotoaparát';
+$lang['img_keywords'] = 'KlúÄové slová';
+$lang['subscribe_success'] = 'Pridané %s do zoznamu objednávok pre %s';
+$lang['subscribe_error'] = 'Chyba pri pridaní %s do zoznamu objednávok pre %s';
+$lang['subscribe_noaddress'] = 'Nie je žiadna e-mailová adresa priradená k vašemu menu,nemôžte byť pridaný do zoznamu objednávok';
+$lang['unsubscribe_success'] = 'Odobrané %s zo zoznamu objednávok pre %s';
+$lang['unsubscribe_error'] = 'Chaba pri odobraní %s zo zoznamu objednávok pre %s';
+$lang['authmodfailed'] = 'Užívateľská autentifikácia nie je možná. Prosím informujte správcu tohto systému.';
+$lang['authtempfail'] = 'Užívateľská autentifikácia je doÄasne nedostupná. Ak táto situácia pretrvá, prosím informujte správcu tohto systému.';
+$lang['i_chooselang'] = 'Zvoľte váš jazyk';
+$lang['i_installer'] = 'DokuWiki inštalátor';
+$lang['i_wikiname'] = 'Názov Wiki';
+$lang['i_enableacl'] = 'AktivovaÅ¥ ACL (doporuÄené)';
+$lang['i_superuser'] = 'Správca';
+$lang['i_problems'] = 'InÅ¡talátor narazil na nižšie uvedené problémy. Nemôžete pokraÄovaÅ¥, pokiaľ ich neodstránite.';
+$lang['i_modified'] = 'Z bezpeÄnostných dôvodov bude tento skript fungovaÅ¥ iba s novou, neupravenou inÅ¡taláciou Dokuwiki. Môžete buÄ znovu rozbaliÅ¥ stiahnutý inÅ¡talaÄný balíÄek, alebo preÅ¡tudovaÅ¥ <a href="http://dokuwiki.org/install"> inÅ¡talaÄné inÅ¡trukcie Dokuwiki</a>';
+$lang['i_funcna'] = 'PHP funkcia <code>%s</code> nie je dostupná. Je možné, že ju z urÄitých dôvodov zablokoval váš poskytovateľ webhostingu?';
+$lang['i_phpver'] = 'Vaša verzia PHP <code>%s</code> je nižšia ako požadovaná <code>%s</code>. Potrebujete aktualizovať Vašu instaláciu PHP.';
+$lang['i_permfail'] = '<code>%s</code> nie je zapisovateľný pre DokuWiki. Musíte zmeniť prístupové práva pre tento adresár!';
+$lang['i_confexists'] = '<code>%s</code> už existuje';
+$lang['i_writeerr'] = 'Nie je možné vytvoriť <code>%s</code>. Potrebujete skontrolovať prístupové práva pre adresár/súbor a vytvoriť ho manuálne.';
+$lang['i_badhash'] = 'nerozpoznaný, alebo zmenený súbor dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - bola zadaná nesprávna, alebo žiadna hodnota';
+$lang['i_success'] = 'Konfigurácia bola úspeÅ¡ne ukonÄená. Teraz môžte zmazaÅ¥ súbor install.php. PokraÄujte vo
+ <a href="doku.php">vašej novej DokuWiki</a>.';
+$lang['i_failure'] = 'Pri zápise konfiguraÄného súboru nastali nejaké chyby. Potrebujete ich opraviÅ¥ manuálne pred tým ako budete môcÅ¥ používaÅ¥
+ <a href="doku.php">vašu novú DokuWiki</a>.';
+$lang['i_policy'] = 'PoÄiatoÄná ACL politika';
+$lang['i_pol0'] = 'Otvorená Wiki (Äítanie, zápis a nahrávanie pre každého)';
+$lang['i_pol1'] = 'Verejná Wiki (Äítanie pre každého, zápis a nahrávanie pre registrovaných užívateľov)';
+$lang['i_pol2'] = 'Uzatvorená Wiki (Äítanie, zápis a nahrávanie len pre registrovaných užívateľov)';
+$lang['i_retry'] = 'Skúsiť znovu';
+$lang['mu_intro'] = 'Na tomto mieste môžete nahrávaÅ¥ viac súborov naraz. TlaÄidlom PrehľadávaÅ¥ pridáte súbory do zoznamu. TlaÄidlom NahraÅ¥ vykonáte prenos súborov.';
+$lang['mu_gridname'] = 'Názov súboru';
+$lang['mu_gridsize'] = 'Veľkosť';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Oblasť mien';
+$lang['mu_browse'] = 'Prehľadávať';
+$lang['mu_toobig'] = 'príliš veľký';
+$lang['mu_ready'] = 'pripravený na nahratie';
+$lang['mu_done'] = 'dokonÄený';
+$lang['mu_fail'] = 'neúspešný';
+$lang['mu_authfail'] = 'spojenie vypršalo';
+$lang['mu_progress'] = '@PCT@% nahraných';
+$lang['mu_filetypes'] = 'Povolené typy súborov';
+$lang['recent_global'] = 'Práve prehliadate zmeny v mennom priestore <b>%s</b>. Môžete si tiež pozrieť <a href="%s">aktuálne zmeny celej wiki</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt
new file mode 100644
index 000000000..0e7d9645e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt
@@ -0,0 +1,3 @@
+====== Stránka je uzamknutá ======
+
+Tato stránka je práve uzamknutá pre úpravy iným užívateľom. Musíte poÄkaÅ¥ pokým daný užívateľ dokonÄí svoje úpravy, alebo pokým tento zámok vyprší.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt
new file mode 100644
index 000000000..3bfc91037
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt
@@ -0,0 +1,3 @@
+====== Prihlásenie ======
+
+Momentálne nie ste prihlásený(á)! Prosím vložte svoje identifikaÄné údaje. Pre prihlásenie musíte maÅ¥ zapnuté cookies.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt
new file mode 100644
index 000000000..78757799e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt
@@ -0,0 +1,17 @@
+Stránka vo vašom DokuWiki bola zmenená. Tu sú podrobnosti:
+
+Dátum : @DATE@
+PrehliadaÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Hostitel : @HOSTNAME@
+Stará verzia : @OLDPAGE@
+Nová verzia : @NEWPAGE@
+Komentár : @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+Táto správa bola vygenerovaná systémom DokuWiki:
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt
new file mode 100644
index 000000000..180d80ee1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt
@@ -0,0 +1,3 @@
+====== Stránka s týmto názvom ešte neexistuje ======
+
+Odkaz vás zaviedol na stránku, ktorá eÅ¡te neexistuje. Môžete ju vytvoriÅ¥ stlaÄením tlaÄítka ''VytvoriÅ¥ stránku''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt
new file mode 100644
index 000000000..8d35f7f20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt
@@ -0,0 +1,3 @@
+====== Takáto verzia neexistuje ======
+
+Zadaná verzia neexistuje. StlaÄte tlaÄítko ''StarÅ¡ia verzia'' pre zoznam starších verzií tohoto dokumentu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt
new file mode 100644
index 000000000..871bca371
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt
@@ -0,0 +1,3 @@
+====== Náhľad ======
+
+Tu je náhľad, ako bude dokument vyzerať. Pozor: Súbor zatiaľ **nie je uložený**!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt
new file mode 100644
index 000000000..19903203d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt
@@ -0,0 +1,15 @@
+Ahoj @FULLNAME@!
+
+Niekto žiadal o nové heslo pre vaše @TITLE@
+konto na @DOKUWIKIURL@
+
+Ak ste nežiadali o nové heslo, potom iba ignorujte tento mail.
+
+Pre potvrdenie, že požiadavka bola skutoÄne odoslaná vami,
+použite prosím nasledujúci odkaz.
+
+@CONFIRM@
+
+--
+Tento mail bol generovaný Dokuwiki na adrese
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt
new file mode 100644
index 000000000..a50b2afb6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt
@@ -0,0 +1,2 @@
+Táto stránka je iba na Äítanie. Môžete si iba prehliadnuÅ¥ zdrojový kód, ale nie meniÅ¥ ho. Opýtajte sa správcu, ak si myslíťe že nieÄo nie je v poriadku.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt
new file mode 100644
index 000000000..408d1075b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt
@@ -0,0 +1,3 @@
+====== Posledné úpravy ======
+
+Následujúce stránky boli nedávno zmenené.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt
new file mode 100644
index 000000000..8dfe6be4e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt
@@ -0,0 +1,3 @@
+====== Zaregistrujte sa ako nový užívateľ ======
+
+Aby ste získali uživateľský úÄet, vyplňťe prosím vÅ¡etky informácie v následujúcom formulári. Zadajte **platnú** mailovú adresu, na ktorú bude zaslané heslo. Uživateľské meno musí byÅ¥ v platnom [[doku>pagename|formáte]] (ktorý je rovnaký ako formát názvu stránky).
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt
new file mode 100644
index 000000000..3fdc63f74
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt
@@ -0,0 +1,14 @@
+Nový užívateľ bol registrovaný. Tu sú detaily:
+
+Užívateľské meno : @NEWUSER@
+Celé meno : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Dátum : @DATE@
+PrehliadaÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Meno servera : @HOSTNAME@
+
+--
+Tento mail bol generovaný Dokuwiki na adrese
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt
new file mode 100644
index 000000000..b51706c96
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Poslať nové heslo ======
+
+Vyplnte niežšie požadované informácie pre získanie nového hesla pre váš úÄet v tomto wiki. VaÅ¡e nové heslo bude zaslané na vaÅ¡u registrovanú e-mailovú adresu. Užívateľské meno má byÅ¥ vaÅ¡e prihlasovaciemeno do wiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt
new file mode 100644
index 000000000..887386eab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt
@@ -0,0 +1,3 @@
+====== Staršia verzia ======
+
+Tu sú starÅ¡ie verzie daného dokumentu. Pre návrat ku starÅ¡ej verzii si ju zvoľte zo zoznamu nižšie, stlaÄte tlaÄidlo ''UpraviÅ¥ stránku'' a uložte ju.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt
new file mode 100644
index 000000000..3fdf074b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt
@@ -0,0 +1,5 @@
+====== Vyhľadávanie ======
+
+Výsledky hľadania môžete vidieÅ¥ nižšie. Pokiaľ ste nenaÅ¡li, Äo hľadáte, skúste požadovanú stránku sami vytvoriÅ¥ stlaÄením tlaÄidla ''VytvoriÅ¥ stránku''.
+
+===== Výsledky =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt
new file mode 100644
index 000000000..036769694
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt
@@ -0,0 +1,3 @@
+**Toto je staršia verzia dokumentu!**
+----
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt
new file mode 100644
index 000000000..86eb84046
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt
@@ -0,0 +1,28 @@
+#Toto je zoznam slov ignorovaných indexérom, jedno slovo na riadok
+# KeÄ editujete tento súbor, uistite sa, Äi používate UNIXové konce riadkov (jednoduchý nový riadok)
+# Nie je potrebné vkladať slová kraťšie ako 3 znaky - tie sú ignorované vždy.
+# Tento zoznam je založený na inom nájdenom na http://www.ranks.nl/stopwords/
+okolo
+tvoj
+ale
+ako
+aký
+aká
+aké
+kde
+kým
+kom
+komu
+ich
+jeho
+jej
+tvoj
+môj
+moja
+moje
+moji
+náš
+váš
+www
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt
new file mode 100644
index 000000000..47505bc1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt
@@ -0,0 +1,18 @@
+Zdravím!
+
+Stránka @PAGE@ v @TITLE@ wiki bola zmenená.
+Tu sú zmeny:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Pre odhlásenie sa z tejto stránky choÄte na
+@DOKUWIKIURL@, potom navštívte
+@NEWPAGE@
+a zvoľte 'Neposielať zmeny'.
+
+--
+Tento mail bol vygenerovaný DokuWiki na
+@DOKUWIKIURL@
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt
new file mode 100644
index 000000000..67b823dc5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt
@@ -0,0 +1,6 @@
+====== Zmena vášho užívateľského profilu ======
+
+Potrebujete vyplniť len tie polia, ktoré chcete zmeniť. Nemôžete zmeniť prihlasovacie meno.
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt
new file mode 100644
index 000000000..871fcaeb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt
@@ -0,0 +1,14 @@
+Súbor bol nahraný do DokuWiki. Tu sú podrobnosti:
+
+Súbor : @MEDIA@
+Dátum : @DATE@
+PrehliadaÄ : @BROWSER@
+IP adresa : @IPADDRESS@
+Názov hostiteľa : @HOSTNAME@
+Veľkosť : @SIZE@
+MIME Typ : @MIME@
+Užívateľ : @USER@
+
+--
+Tento mail vygenerovalo DokuWiki na
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt
new file mode 100644
index 000000000..4901b2aab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM nebol povolený ======
+
+Vaše zmeny **neboli uložené**, pretože obsahujú jedno alebo viacej nepovolených slov. Wiki si nepotrpí na spam! Pokiaľ sa domnievate, že ide o omyl, kontaktujte správcu.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt
new file mode 100644
index 000000000..e637199c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt
@@ -0,0 +1,4 @@
+====== Kaj je povezano sem ======
+
+To je seznam strani, ki so povezane na trenutno stran. Opomba: CamelCase povezave niso zaznane kot take povezave.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt
new file mode 100644
index 000000000..7ada08b5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt
@@ -0,0 +1,6 @@
+====== Obstaja novejÅ¡a razliÄica ======
+
+Obstaja novejÅ¡a razliÄica dokumenta, ki ga urejate. Do tega pride, ko kak drugi uporabnik spremeni dokument med vaÅ¡im urejanjem.
+
+Temeljito preglejte spodaj prikazane razlike in se potem odloÄite, katero verzijo želite obdržati. ÄŒe izberete ''shrani'', bo shranjena vaÅ¡a razliÄica. Pritisnite ''prekliÄi'', Äe želite ohraniti trenutno razliÄico.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt
new file mode 100644
index 000000000..96c03a569
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt
@@ -0,0 +1,4 @@
+====== Nimate dovoljenja ======
+
+Oprostite, za nadaljevanje nimati dovolj dovoljenj. MogoÄe ste se pozabili prijaviti?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt
new file mode 100644
index 000000000..f98f7e5ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt
@@ -0,0 +1,4 @@
+====== Primerjaj izbrane razliÄice ======
+
+Prikazana je razlika med izbrano in trenutno razliÄico te strani.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt
new file mode 100644
index 000000000..180a97ade
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt
@@ -0,0 +1,2 @@
+Uredite stran in pritisnite ''Shrani''. Glej [[wiki:syntax]] za navodila za urejanje. Prosimo vas, da stran spremenite le, Äe jo nameravate **izboljÅ¡ati**. ÄŒe hoÄete preizkusiti kakÅ¡no zadevo, se poigrajte v [[playground:playground|peskovniku]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt
new file mode 100644
index 000000000..cf2b4ec7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt
@@ -0,0 +1,2 @@
+**Naložili ste staro razliÄico dokumenta!** ÄŒe jo shranite, boste ustvarili novo razliÄico s to vsebino.
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt
new file mode 100644
index 000000000..89dd05fbe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt
@@ -0,0 +1,4 @@
+====== Kazalo ======
+
+To je kazalo vseh strani, ki so na voljo, urejenimi po [[doku>namespaces|imenskih prostorih]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php
new file mode 100644
index 000000000..bbffcfbb1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php
@@ -0,0 +1,162 @@
+<?php
+/**
+ * slovenian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Jaka Kranjc <lynxlupodian@hotmail.com>
+ * @author BoÅ¡tjan SeniÄar <senicar@gmail.com>
+ * @author Dejan Levec <webphp@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Uredi to stran';
+$lang['btn_source'] = 'Prikaži izvorno kodo strani';
+$lang['btn_show'] = 'Prikaži stran';
+$lang['btn_create'] = 'Ustvari to stran';
+$lang['btn_search'] = 'IÅ¡Äi';
+$lang['btn_save'] = 'Shrani';
+$lang['btn_preview'] = 'Predogled';
+$lang['btn_top'] = 'Nazaj na vrh';
+$lang['btn_newer'] = '<< novejši';
+$lang['btn_older'] = 'starejši >>';
+$lang['btn_revs'] = 'Stare razliÄice';
+$lang['btn_recent'] = 'Novosti';
+$lang['btn_upload'] = 'Pošlji';
+$lang['btn_cancel'] = 'PrekliÄi';
+$lang['btn_index'] = 'Kazalo';
+$lang['btn_secedit'] = 'Uredi';
+$lang['btn_login'] = 'Prijava';
+$lang['btn_logout'] = 'Odjava';
+$lang['btn_admin'] = 'Administrator';
+$lang['btn_update'] = 'Posodobi';
+$lang['btn_delete'] = 'Izbriši';
+$lang['btn_back'] = 'Nazaj';
+$lang['btn_profile'] = 'Posodobi profil';
+$lang['btn_reset'] = 'Ponastavi';
+$lang['btn_resendpwd'] = 'Pošlji novo geslo';
+$lang['btn_draft'] = 'Uredi osnutek';
+$lang['btn_recover'] = 'Obnovi osnutek';
+$lang['btn_draftdel'] = 'Izbriši osnutek';
+$lang['loggedinas'] = 'Prijavljen kot';
+$lang['user'] = 'Uporabniško ime';
+$lang['pass'] = 'Geslo';
+$lang['newpass'] = 'Novo geslo';
+$lang['oldpass'] = 'Potrdi trenutno geslo';
+$lang['passchk'] = 'ponovno';
+$lang['remember'] = 'Zapomni si me';
+$lang['fullname'] = 'Pravo ime';
+$lang['email'] = 'Elektronska pošta';
+$lang['register'] = 'Odpri nov raÄun';
+$lang['profile'] = 'Profil uporabnika';
+$lang['badlogin'] = 'Oprostite, uporabniško ime ali geslo ni pravo.';
+$lang['minoredit'] = 'Manjše spremembe';
+$lang['draftdate'] = 'Samodejno shranjevanje osnutka vkljuÄeno';
+$lang['regmissing'] = 'Oprostite, zapolniti morate vsa polja.';
+$lang['reguexists'] = 'Oprostite, uporabnik s tem imenom že obstaja.';
+$lang['regsuccess'] = 'Uporabnik je bil ustvarjen. Geslo je bilo poslano na vaš elektronski naslov.';
+$lang['regsuccess2'] = 'Uporabnik je bil ustvarjen.';
+$lang['regmailfail'] = 'Zgleda, da je prišlo do napake pri pošiljanju gesla. Prosimo da stopite v stik z administratorjem!';
+$lang['regbadmail'] = 'Podan elektronski naslov izgleda neveljaven - Äe mislite da je to napaka, stopite v stik z administratorjem.';
+$lang['regbadpass'] = 'Gesli nista enaki.';
+$lang['regpwmail'] = 'Vaše geslo za DokuWiki';
+$lang['reghere'] = 'Nimate Å¡e raÄuna? Priskrbite si ga';
+$lang['profnochange'] = 'Brez sprememb, niÄesar za storiti.';
+$lang['profchanged'] = 'Uporabniški profil uspešno posodobljen';
+$lang['pwdforget'] = 'Pozabili geslo? Pridobite novega';
+$lang['resendpwd'] = 'Pošlji novo geslo za';
+$lang['resendpwdmissing'] = 'Se opraviÄujemo, vendar morate izpolniti vsa polja.';
+$lang['resendpwdnouser'] = 'Se opraviÄujemo, vendar tega uporabniÅ¡kega imena ni v bazi.';
+$lang['resendpwdconfirm'] = 'Potrditvena povezava je bila poslana na vaš elektronski naslov';
+$lang['resendpwdsuccess'] = 'Vaše novo geslo je bilo poslano na vaš elektronski naslov';
+$lang['txt_upload'] = 'Izberite datoteko za pošiljanje';
+$lang['txt_filename'] = 'Vnesite wikiname (neobvezno)';
+$lang['txt_overwrt'] = 'PrepiÅ¡i obstojeÄo datoteko';
+$lang['lockedby'] = 'Trenutno zaklenjeno od';
+$lang['lockexpire'] = 'Zaklep preteÄe';
+$lang['willexpire'] = 'VaÅ¡ zaklep za urejevanje bo pretekel Äez eno minuto.\nDa se izognete konfliktom, uporabite predogled, da se merilnik Äasa za zaklep ponastavi.';
+$lang['notsavedyet'] = 'Obstajajo neshranjene spremembe, ki bodo izgubljene.\nRes želite nadaljevati?';
+$lang['rssfailed'] = 'Prišlo je do napake pri prenašanju tega dovoda: ';
+$lang['nothingfound'] = 'NiÄ ni bilo najdeno.';
+$lang['mediaselect'] = 'Mediafile Izbira';
+$lang['fileupload'] = 'Mediafile Pošiljanje';
+$lang['uploadsucc'] = 'Pošiljanje uspelo';
+$lang['uploadfail'] = 'PoÅ¡iljanje je spodletelo. MogoÄe nimate dovoljenj?';
+$lang['uploadwrong'] = 'PoÅ¡iljanje zavrnjeno. Ta datoteÄna konÄnica je prepovedana';
+$lang['uploadexist'] = 'Dokument že obstaja. Brez sprememb.';
+$lang['uploadxss'] = 'Prenos je bil zaustavljen zaradi možne zlonamerne vsebine.';
+$lang['uploadsize'] = 'Prenesen dokument je prevelik. (max. %s)';
+$lang['deletesucc'] = 'Datoteka "%s" je bila izbrisana.';
+$lang['mediainuse'] = 'Dokument "%s" ni bil izbrisan - je Å¡e vedno v uporabi.';
+$lang['namespaces'] = 'Imenski prostori';
+$lang['mediafiles'] = 'Datoteke ki so na voljo v';
+$lang['js']['hidedetails'] = 'Skrij podrobnosti';
+$lang['js']['nosmblinks'] = 'Povezovanje do Windows deljenih datotek deluje samo v Microsoft Internet Explorer-ju.
+Å e vedno pa lahko roÄno kopirate povezavo.';
+$lang['js']['mu_btn'] = 'Prenesite veÄ dokumentov naenkrat.';
+$lang['mediaview'] = 'Poglej originalno datoteko';
+$lang['hits'] = 'Zadetkov';
+$lang['quickhits'] = 'Ujemanja v imenih strani';
+$lang['toc'] = 'Kazalo';
+$lang['current'] = 'trenutna';
+$lang['yours'] = 'VaÅ¡a razliÄica';
+$lang['diff'] = 'prikaži razlike s trenutno razliÄico';
+$lang['line'] = 'Vrstica';
+$lang['breadcrumb'] = 'Sled';
+$lang['youarehere'] = 'Tukaj ste';
+$lang['lastmod'] = 'ZadnjiÄ spremenil/a';
+$lang['by'] = 'od';
+$lang['deleted'] = 'odstranjena';
+$lang['created'] = 'ustvarjena';
+$lang['restored'] = 'stara razliÄica povrnjena';
+$lang['summary'] = 'Povzetek urejanja';
+$lang['noflash'] = 'Za prikaz vsebine potrebujete <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
+$lang['mail_newpage'] = '[DokuWiki] stran dodana:';
+$lang['mail_changed'] = '[DokuWiki] stran spremenjena:';
+$lang['mail_new_user'] = 'nov uporabnik.';
+$lang['mail_upload'] = 'naložena datoteka:';
+$lang['qb_bold'] = 'Krepki tisk';
+$lang['qb_italic'] = 'LežeÄi tisk';
+$lang['qb_underl'] = 'PodÄrtano besedilo';
+$lang['qb_code'] = 'Koda';
+$lang['qb_strike'] = 'PreÄrtano besedilo';
+$lang['qb_h1'] = 'Naslov prve stopnje';
+$lang['qb_h2'] = 'Naslov drugee stopnje';
+$lang['qb_h3'] = 'Naslov tretje stopnje';
+$lang['qb_h4'] = 'Naslov Äetrte stopnje';
+$lang['qb_h5'] = 'Naslov pete stopnje';
+$lang['qb_link'] = 'Notranja povezava';
+$lang['qb_extlink'] = 'Zunanja povezava';
+$lang['qb_hr'] = 'Vodoravna Ärta';
+$lang['qb_ol'] = 'Element urejenega seznama';
+$lang['qb_ul'] = 'Element neurejenega seznama';
+$lang['qb_media'] = 'Dodaj slike in druge datoteke';
+$lang['qb_sig'] = 'Vstavi podpis';
+$lang['qb_smileys'] = 'Smeški';
+$lang['qb_chars'] = 'Posebni znaki';
+$lang['admin_register'] = 'Dodaj novega uporabnika';
+$lang['metaedit'] = 'Popravi metapodatke';
+$lang['metasaveerr'] = 'Zapisovanje metapodatkov ni uspelo';
+$lang['metasaveok'] = 'Meta podatki shranjeni';
+$lang['img_backto'] = 'Nazaj na';
+$lang['img_title'] = 'Naslov';
+$lang['img_caption'] = 'Opis';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Ime datoteke';
+$lang['img_fsize'] = 'Velikost';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_format'] = 'Velikost';
+$lang['img_camera'] = 'Fotoaparat';
+$lang['img_keywords'] = 'KljuÄne besede';
+$lang['i_chooselang'] = 'Izberite jezik';
+$lang['i_installer'] = 'DokuWiki namestitev';
+$lang['i_wikiname'] = 'Wiki ime';
+$lang['i_enableacl'] = 'OmogoÄi ACL (priporoÄeno)';
+$lang['i_superuser'] = 'Naduporabnik';
+$lang['i_confexists'] = '<code>%s</code> že obstaja';
+$lang['mu_gridsize'] = 'Velikost';
+$lang['mu_done'] = 'konÄano';
+$lang['mu_filetypes'] = 'Dovoljeni tipi datotek';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt
new file mode 100644
index 000000000..dbdcf48a1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt
@@ -0,0 +1,3 @@
+====== Stran je zaklenjena ======
+
+To stran je nekdo zaklenjenil za urejanje. PoÄakati morate, da jo ta uporabnik neha urejati ali pa da poteÄe zaklep.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt
new file mode 100644
index 000000000..f385d0099
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt
@@ -0,0 +1,4 @@
+====== Prijava ======
+
+Niste prijavljeni! Spodaj vnesite svoje podatke in se prijavite. Da se lahko prijavite, morate imeti omogoÄene piÅ¡kotke.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt
new file mode 100644
index 000000000..a46c672d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt
@@ -0,0 +1,17 @@
+Stran na vašem DokuWiki je bila dodana ali spremenjena. Podrobnosti:
+
+Datum : @DATE@
+Brskalnik : @BROWSER@
+IP-naslov : @IPADDRESS@
+Gostitelj : @HOSTNAME@
+Stara razliÄica : @OLDPAGE@
+Nova RazliÄica : @NEWPAGE@
+Povzetek urejanja: @SUMMARY@
+Uporabnik : @USER@
+
+@DIFF@
+
+
+--
+To sporoÄilo je ustvaril DokuWiki na
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt
new file mode 100644
index 000000000..c58ab17ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt
@@ -0,0 +1,3 @@
+====== Ta stran Å¡e ne obstaja ======
+
+Sledili ste povezavi na stran, ki Å¡e ne obstaja. Ustvarite jo lahko, tako da pritisnete na ''Ustvari to stran''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt
new file mode 100644
index 000000000..28b9f8ac5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt
@@ -0,0 +1,4 @@
+====== Ta razliÄica ne obstaja ======
+
+Podana razliÄica ne obstaja. Uporabite gumb ''Stare razliÄice'' za seznam starih razliÄic tega dokumenta.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt
new file mode 100644
index 000000000..4ebf183ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt
@@ -0,0 +1,4 @@
+====== Predogled ======
+
+To je predogled strani. Lahko si ogledate kako bo izgledal dokument. Ne pozabite pa, da Å¡e ni shranjen!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt
new file mode 100644
index 000000000..96c3a64d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt
@@ -0,0 +1,13 @@
+Pozdravljen @FULLNAME@!
+
+Nekdo je v vašem imenu zahteval novo geslo za uporabniško ime @TITLE@ na @DOKUWIKIURL@.
+
+ÄŒe novega gesla niste zahtevali, prezrite to sporoÄilo.
+
+Za potrditev novega gesla, kliknite spodnjo povezavo.
+
+@CONFIRM@
+
+--
+To sporoÄilo je ustvaril DokuWiki na
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt
new file mode 100644
index 000000000..1423a4f16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt
@@ -0,0 +1,2 @@
+Ta stran je samo za branje. Lahko si ogledate njeno izvorno kodo, spreminjati pa je ne morete. VpraÅ¡ajte administratorja, Äe se vam to zdi narobe.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt
new file mode 100644
index 000000000..534063384
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt
@@ -0,0 +1,5 @@
+====== Trenutne spremembe ======
+
+SledeÄe strani so bile nedavno spremenjene.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt
new file mode 100644
index 000000000..d1f7ab49e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt
@@ -0,0 +1,4 @@
+====== Odpri nov raÄun ======
+
+Vnesite vse potrebne podatke in si ustvarite raÄun za ta wiki. Preverite da ste vnesli **veljaven e-mail naslov** - tja bo poslano geslo. UporabniÅ¡ko ime mora biti veljavno [[doku>pagename|ime strani]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt
new file mode 100644
index 000000000..d9622325e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt
@@ -0,0 +1,14 @@
+Nov uporabnik registriran. Podatki:
+
+Uporabniško ime: @NEWUSER@
+Polno ime: @NEWNAME@
+E-mail: @NEWEMAIL@
+
+Datum: @DATE@
+Brskalnik: @BROWSER@
+IP naslov: @IPADDRESS@
+Hostname: @HOSTNAME@
+
+--
+To sporoÄilo je ustvaril DokuWiki na
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt
new file mode 100644
index 000000000..9f46a7a59
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Pošlji novo geslo ======
+
+Za pridobitev novega gesla, vnesite vaÅ¡e uporabniÅ¡ko ime v obrazec spodaj. Na vaÅ¡ email naslov bo poslano sporoÄilo s povezavo za potrditev avtentiÄnosti. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt
new file mode 100644
index 000000000..19bf39a87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt
@@ -0,0 +1,4 @@
+====== Stare razliÄice ======
+
+To so stare razliÄice tega dokumenta. Da ga povrnete na starejÅ¡o razliÄico, to prvo izberite, pritisnite na ''Uredi to stran'' in jo Å¡e shranite.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt
new file mode 100644
index 000000000..b41c6dd44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt
@@ -0,0 +1,5 @@
+====== IÅ¡Äi ======
+
+Spodaj so prikazani rezultati vašega iskanja. Če niste našli kar ste iskali, lahko ustvarite novo stran z imenom vaše poizvedbe, tako da uporabite gumb ''Uredi to stran''.
+
+===== Rezultati ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt
new file mode 100644
index 000000000..00111ffc5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt
@@ -0,0 +1,2 @@
+**To je stara razliÄica tega dokumenta!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt
new file mode 100644
index 000000000..c9d9c1ca0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt
@@ -0,0 +1,4 @@
+====== Blokiran SPAM ======
+
+VaÅ¡e spremembe **niso** bile shranjene, ker so vsebovale eno ali veÄ prepovedanih besed. ÄŒe ste poskusili nasmetiti Wiki -- Fuj Fido! ÄŒe mislite da je to napaka, stopite v stik z administratorjem.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt
new file mode 100644
index 000000000..1e42970d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt
@@ -0,0 +1,4 @@
+====== ÐдминиÑтрација ======
+
+Изпод Ñе налази лиÑта доÑтупних админиÑтраторÑких опција у DokuWiki-ју.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt
new file mode 100644
index 000000000..dae8d5ab2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt
@@ -0,0 +1,4 @@
+====== Повратне везе ======
+
+Ово је лиÑта Ñтраница које имају везе ка тренутној Ñтраници.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt
new file mode 100644
index 000000000..2a1427ec4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt
@@ -0,0 +1,6 @@
+====== ПоÑтоји новија верзија ======
+
+ПоÑтоји новија верзија документа који Ñте изменили. Ово Ñе дешава када неки други кориÑник измени документ док га Ви још увек мењате.
+
+Проучите разлике које Ñу доле детаљно приказане, па након тога одлучите коју верзију желите да задржите. Ðко изаберете ''Ñачувај'', Ваша верзија ће да буде Ñачувана. Ðко изаберите ''поништи'', тренутна верзија ће да буде Ñачувана.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt
new file mode 100644
index 000000000..b74f2b1f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt
@@ -0,0 +1,4 @@
+====== Забрањен приÑтуп ======
+
+Извините, али немате довољно права да наÑтавите. Можда Ñте заборавили да Ñе пријавите?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt
new file mode 100644
index 000000000..39b7427ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt
@@ -0,0 +1,4 @@
+====== Разлике ======
+
+Овде Ñу приказане разлике између изабране ревизије и тренутне верзије Ñтранице.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt
new file mode 100644
index 000000000..046c709cf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt
@@ -0,0 +1 @@
+====== Пронађена је Ñкица датотеке ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt
new file mode 100644
index 000000000..2d6fa7b8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt
@@ -0,0 +1,2 @@
+Измените ову Ñтраницу и притиÑните ''Сачувај''. Погледајте [[wiki:syntax]] за ÑинтакÑу Викија. Молим ВаÑ, измените ову Ñтраницу Ñамо ако имате намеру да је **побољшате**. Ðко желите да теÑтирате могућноÑти, научите да направите Ñвоје кораке на [[playground:playground]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt
new file mode 100644
index 000000000..327902943
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt
@@ -0,0 +1,2 @@
+**Учитали Ñте Ñтару ревизију документа!** Ðко је Ñачувате, направићете нову верзију Ñа овим подацима.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt
new file mode 100644
index 000000000..fe6467a1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt
@@ -0,0 +1,4 @@
+====== Ð˜Ð½Ð´ÐµÐºÑ ======
+
+Овде је Ð¸Ð½Ð´ÐµÐºÑ Ñвих доÑтупних Ñтраница поређаних по [[doku>namespaces|именÑким проÑторима]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html
new file mode 100644
index 000000000..b9ab35c71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html
@@ -0,0 +1,12 @@
+<p>Ова Ñтраница ће вам помоћи у инÑталацији и подешавању <a href="http://dokuwiki.org">Dokuwiki-ја</a>. Више информација о инÑталацији можете пронаћи у
+<a href="http://dokuwiki.org/installer">документацији</a>.</p>
+
+<p>DokuWiki кориÑти обичне датотеке за Ñкладиштење вики Ñтраница и оÑталих информација везаних за Ñтранице (Ñлике, Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ñ€ÐµÑ‚Ñ€Ð°Ð³Ðµ, Ñтаре преправке, итд.).
+Да би радио како треба DokuWiki као апликација <strong>мора</strong> имати могућноÑÑ‚ пиÑања под фаÑциклама у којима Ñе налазе ове датотеке. Овај програм за инÑталацију нема могућноÑÑ‚ поÑтављања дозвола за фаÑцикле. То Ñе обично ради директно из командне линије или ако кориÑтите изнајмњени Ñервер, помоћу ФТПа или кроз Контролни панел (нпр. cPanel).</p>
+
+<p>Овај програм за инÑталацију DokuWiki-а ће поÑтавити подешавања за
+<acronym title="access control list">Права приÑтупа</acronym>, које ће омогућити пријјављивање као админиÑтратор и приÑтуп менију за инÑталацију додатака, управљање кориÑницима, управљање приÑтупом ка Ñтраницама и алтернатвна подешавања. Ðије неопходно да би DokuWiki радио, али ће вам олакшати админиÑтрацију.</p>
+
+<p>ИÑкуÑнији кориÑници и кориÑници Ñа поÑебним захтевима би требало да погледају Ñледеће линкове Ñа детаљним упутÑтвима о
+<a href="http://dokuwiki.org/install">инÑтрукцијама за инÑталацију</a>
+и <a href="http://dokuwiki.org/config">подешавањима</a>.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php
new file mode 100644
index 000000000..94829d314
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php
@@ -0,0 +1,224 @@
+<?php
+/**
+ * serbian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Filip Brcic <brcha@users.sourceforge.net>
+ * @author Иван Петровић petrovicivan@ubuntusrbija.org
+ * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '„';
+$lang['doublequoteclosing'] = '“';
+$lang['singlequoteopening'] = '‚';
+$lang['singlequoteclosing'] = '‘';
+$lang['apostrophe'] = '\'';
+$lang['btn_edit'] = 'Измени ову Ñтраницу';
+$lang['btn_source'] = 'Прикажи изворни код';
+$lang['btn_show'] = 'Прикажи Ñтраницу';
+$lang['btn_create'] = 'Ðаправи ову Ñтраницу';
+$lang['btn_search'] = 'Тражи';
+$lang['btn_save'] = 'Сачувај';
+$lang['btn_preview'] = 'Прегледај';
+$lang['btn_top'] = 'Врати Ñе на врх';
+$lang['btn_newer'] = '<< новије';
+$lang['btn_older'] = 'Ñтарије >>';
+$lang['btn_revs'] = 'Старе верзије';
+$lang['btn_recent'] = 'Скорије измене';
+$lang['btn_upload'] = 'Пошаљи';
+$lang['btn_cancel'] = 'Поништи';
+$lang['btn_index'] = 'ИндекÑ';
+$lang['btn_secedit'] = 'Измени';
+$lang['btn_login'] = 'Пријави Ñе';
+$lang['btn_logout'] = 'Одјави Ñе';
+$lang['btn_admin'] = 'ÐдминиÑтрација';
+$lang['btn_update'] = 'Ðжурирај';
+$lang['btn_delete'] = 'Избриши';
+$lang['btn_back'] = 'Ðатраг';
+$lang['btn_backlink'] = 'Повратне везе';
+$lang['btn_backtomedia'] = 'Врати Ñе на избор медијÑке датотеке';
+$lang['btn_subscribe'] = 'Пријави Ñе на измене';
+$lang['btn_unsubscribe'] = 'Одјави Ñе Ñа измена';
+$lang['btn_subscribens'] = 'Претплати Ñе на промене у именÑком проÑтору';
+$lang['btn_unsubscribens'] = 'Откажи претплату на промене у именÑком проÑтору';
+$lang['btn_profile'] = 'Ðжурирај профил';
+$lang['btn_reset'] = 'Поништи';
+$lang['btn_resendpwd'] = 'Пошаљи нову лозинку';
+$lang['btn_draft'] = 'Измени нацрт';
+$lang['btn_recover'] = 'Опорави нацрт';
+$lang['btn_draftdel'] = 'Обриши нацрт';
+$lang['loggedinas'] = 'Пријављен као';
+$lang['user'] = 'КориÑничко име';
+$lang['pass'] = 'Лозинка';
+$lang['newpass'] = 'Ðова лозинка';
+$lang['oldpass'] = 'Потврди нову лозинку';
+$lang['passchk'] = 'поново';
+$lang['remember'] = 'Запамти ме';
+$lang['fullname'] = 'Име и презиме';
+$lang['email'] = 'Е-адреÑа';
+$lang['register'] = 'РегиÑтруј Ñе';
+$lang['profile'] = 'КориÑнички профил';
+$lang['badlogin'] = 'Извините, није добро кориÑничко име или шифра.';
+$lang['minoredit'] = 'Мала измена';
+$lang['draftdate'] = 'Ðацрт је аутоматÑки Ñачуван';
+$lang['nosecedit'] = 'Страна је у међувремену промењена, поглавље је заÑтарело и поново Ñе учитава цела Ñтрана.';
+$lang['regmissing'] = 'Извините, морате да попуните Ñва поља.';
+$lang['reguexists'] = 'Извините, кориÑник Ñа иÑтим именом већ поÑтоји.';
+$lang['regsuccess'] = 'КориÑник је направљен и лозинка је поÑлата путем е-поште.';
+$lang['regsuccess2'] = 'КориÑник је направљен.';
+$lang['regmailfail'] = 'Изгледа да је дошло до грешке приликом Ñлања лозинке е-поштом. Молим ВаÑ, контактирајте админиÑтратора!';
+$lang['regbadmail'] = 'Дата е-адреÑа није у реду - ако миÑлите да је ово грешка, контактирајте админиÑтратора';
+$lang['regbadpass'] = 'Две задате лозинке ниÑу иÑте. Молим ВаÑ, пробајте поново.';
+$lang['regpwmail'] = 'Ваша DokuWiki лозинка';
+$lang['reghere'] = 'Још увек немате налог? Само направите један';
+$lang['profna'] = 'Овај вики не дозвољава измену профила';
+$lang['profnochange'] = 'Ðема промена.';
+$lang['profnoempty'] = 'Ðије дозвољено оÑтавити празно поље имена или е-адреÑе.';
+$lang['profchanged'] = 'КориÑнички профил је ажуриран.';
+$lang['pwdforget'] = 'Заборавили Ñте лозинку? Ðаправите нову';
+$lang['resendna'] = 'Овај вики не дозвољава Ñлање лозинки.';
+$lang['resendpwd'] = 'Пошаљи нову лозинку за';
+$lang['resendpwdmissing'] = 'Жао ми је, Ñва поља морају бити попуњена.';
+$lang['resendpwdnouser'] = 'Жао ми је, овај кориÑник не поÑтоји у нашој бази.';
+$lang['resendpwdbadauth'] = 'Жао ми је, потврдни код није иÑправан. Проверите да ли Ñте кориÑтили комплетан потврдни линк.';
+$lang['resendpwdconfirm'] = 'Потврдни линк је поÑтат као е-порука.';
+$lang['resendpwdsuccess'] = 'Ваша нова лозинка је поÑлата као е-порука.';
+$lang['license'] = 'ОÑим где је другачије назначено, материјал на овом викију је под Ñледећом лиценцом:';
+$lang['licenseok'] = 'Ðапомена: Изменом ове Ñтране Ñлажете Ñе да ће ваше измене бити под Ñледећом лиценцом:';
+$lang['txt_upload'] = 'Изаберите датотеку за Ñлање';
+$lang['txt_filename'] = 'УнеÑите вики-име (опционо)';
+$lang['txt_overwrt'] = 'Препишите тренутни фајл';
+$lang['lockedby'] = 'Тренутно закључано од Ñтране';
+$lang['lockexpire'] = 'Закључавање иÑтиче';
+$lang['willexpire'] = 'Ваше закључавање за измену ове Ñтранице ће да иÑтекне за један минут.\nДа би Ñте избегли конфликте, иÑкориÑтите дугме за преглед како би Ñте реÑетовали тајмер закључавања.';
+$lang['notsavedyet'] = 'ÐеÑачуване измене ће бити изгубљене.\nДа ли Ñтварно желите да наÑтавите?';
+$lang['rssfailed'] = 'Дошло је до грешке приликом преузимања овог довода: ';
+$lang['nothingfound'] = 'Ðишта није нађено.';
+$lang['mediaselect'] = 'Избор медијÑке датотеке';
+$lang['fileupload'] = 'Слање медијÑке датотеке';
+$lang['uploadsucc'] = 'УÑпешно Ñлање';
+$lang['uploadfail'] = 'ÐеуÑпешно Ñлање. Можда немате дозволу?';
+$lang['uploadwrong'] = 'Слање је забрањено. Овај наÑтавак датотеке је забрањен!';
+$lang['uploadexist'] = 'Датотека већ поÑтоји. Ðишта није учињено.';
+$lang['uploadbadcontent'] = 'Материјал који шаљете не одговара %s ';
+$lang['uploadspam'] = 'Слање је блокирано јер Ñе налазите на црној лиÑти пошиљаоца.';
+$lang['uploadxss'] = 'Слање је блокирано јер је потенцијално малициозног Ñадржаја.';
+$lang['uploadsize'] = 'ПоÑлата датотека је превелика. (макÑимум је %s)';
+$lang['deletesucc'] = 'Фајл "%s" је избриÑан.';
+$lang['deletefail'] = '"%s" није могао да буде избриÑан - проверите дозволе.';
+$lang['mediainuse'] = 'Фајл "%s" није избриÑан - још је у употреби.';
+$lang['namespaces'] = 'ИменÑки проÑтори';
+$lang['mediafiles'] = 'ДоÑтупни фајлови у';
+$lang['js']['keepopen'] = 'Задржи отворен прозор након одабира';
+$lang['js']['hidedetails'] = 'Сакриј детаље';
+$lang['js']['nosmblinks'] = 'Повезивање Ñа Windows дељеним фолдерима ради Ñамо у МајкроÑофтовом Интернет Претраживачу.
+Ипак, можете да иÑкопирате и залепите везу.';
+$lang['js']['mu_btn'] = 'Слање више датотека одједном';
+$lang['mediausage'] = 'КориÑтите Ñледећу ÑинтакÑу за референцу ка овој датотеци:';
+$lang['mediaview'] = 'Прикажи оригиналну датотеку';
+$lang['mediaroot'] = 'почетак';
+$lang['mediaupload'] = 'Пошаљи датотеку у тренутни именÑки проÑтор. Да биÑте направили подпроÑторе, предвидите их у поље „Пошаљи као“ раздвојено двотачкама.';
+$lang['mediaextchange'] = 'ÐаÑтавак датотеке је промењен из .%s у .%s!';
+$lang['reference'] = 'Референце за';
+$lang['ref_inuse'] = 'Фајл не може да буде избриÑан јер га још увек кориÑте Ñледеће Ñтранице:';
+$lang['ref_hidden'] = 'Ðеке референце Ñу на Ñтраницама за које немате дозволе за читање';
+$lang['hits'] = 'Поготци';
+$lang['quickhits'] = 'Имена Ñтраница које Ñе поклапају';
+$lang['toc'] = 'Садржај';
+$lang['current'] = 'тренутно';
+$lang['yours'] = 'Ваша верзија';
+$lang['diff'] = 'прикажи разлике до тренутне верзије';
+$lang['diff2'] = 'Прикажи разлике између одабраних ревизија';
+$lang['line'] = 'Линија';
+$lang['breadcrumb'] = 'Траг';
+$lang['youarehere'] = 'Сада Ñте овде';
+$lang['lastmod'] = 'ПоÑледњи пут мењано';
+$lang['by'] = 'од';
+$lang['deleted'] = 'избриÑано';
+$lang['created'] = 'направљено';
+$lang['restored'] = 'Ñтара верзија повраћена';
+$lang['external_edit'] = 'Ñпољна измена';
+$lang['summary'] = 'Сажетак измене';
+$lang['noflash'] = 'За приказивање ове врÑте материјала потребан вам је <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['mail_newpage'] = 'Ñтраница додата:';
+$lang['mail_changed'] = 'Ñтраница измењена:';
+$lang['mail_new_user'] = 'нови кориÑник:';
+$lang['mail_upload'] = 'поÑлата датотека:';
+$lang['qb_bold'] = 'МаÑтан текÑÑ‚';
+$lang['qb_italic'] = 'Курзивни текÑÑ‚';
+$lang['qb_underl'] = 'Подвучени текÑÑ‚';
+$lang['qb_code'] = 'Изворни код';
+$lang['qb_strike'] = 'Прецртани текÑÑ‚';
+$lang['qb_h1'] = 'ÐаÑлов 1. нивоа';
+$lang['qb_h2'] = 'ÐаÑлов 2. нивоа';
+$lang['qb_h3'] = 'ÐаÑлов 3. нивоа';
+$lang['qb_h4'] = 'ÐаÑлов 4. нивоа';
+$lang['qb_h5'] = 'ÐаÑлов 5. нивоа';
+$lang['qb_link'] = 'Унутрашња веза';
+$lang['qb_extlink'] = 'Спољашња веза';
+$lang['qb_hr'] = 'Хоризонтална линија';
+$lang['qb_ol'] = 'Елемент уређене лиÑте';
+$lang['qb_ul'] = 'Елемент неуређене лиÑте';
+$lang['qb_media'] = 'Додај Ñлике и друге фајлове';
+$lang['qb_sig'] = 'Убаци потпиÑ';
+$lang['qb_smileys'] = 'Смешко';
+$lang['qb_chars'] = 'ПоÑебни карактери';
+$lang['js']['del_confirm'] = 'Обриши овај уноÑ?';
+$lang['admin_register'] = 'Додај новог кориÑника';
+$lang['metaedit'] = 'Измени мета-податке';
+$lang['metasaveerr'] = 'ЗапиÑивање мета-података није било уÑпешно';
+$lang['metasaveok'] = 'Мета-подаци Ñу Ñачувани';
+$lang['img_backto'] = 'Ðатраг на';
+$lang['img_title'] = 'ÐаÑлов';
+$lang['img_caption'] = 'Ðазив';
+$lang['img_date'] = 'Датум';
+$lang['img_fname'] = 'Име фајла';
+$lang['img_fsize'] = 'Величина';
+$lang['img_artist'] = 'Фотограф';
+$lang['img_copyr'] = 'Права копирања';
+$lang['img_format'] = 'Формат';
+$lang['img_camera'] = 'Камера';
+$lang['img_keywords'] = 'Кључне речи';
+$lang['subscribe_success'] = 'Додао Ñам %s на лиÑту претплатника за %s';
+$lang['subscribe_error'] = 'Дошло је до грешке при додавању %s на лиÑту претплатника за %s';
+$lang['subscribe_noaddress'] = 'Ðе поÑтоји е-адреÑа аÑоцирана Ñа Вашим налогом. Ðе можете да будете додати на лиÑту претплатника';
+$lang['unsubscribe_success'] = 'ИзбриÑао Ñам %s Ñа лиÑте претплатника за %s';
+$lang['unsubscribe_error'] = 'Дошло је до грешке приликом бриÑања %s Ñа лиÑте претплатника за %s';
+$lang['authmodfailed'] = 'Лоше подешена провера кориÑника. Молим Ð’Ð°Ñ Ð´Ð° обавеÑтите админиÑтратора викија.';
+$lang['authtempfail'] = 'Провера кориÑника је тренутно недоÑтупна. Ðко Ñе Ñитуација наÑтави, молимо Ð’Ð°Ñ Ð´Ð° обавеÑтите админиÑтратора викија.';
+$lang['i_chooselang'] = 'Одаберите језик';
+$lang['i_installer'] = 'Докувики инÑталација';
+$lang['i_wikiname'] = 'Ðазив викија';
+$lang['i_enableacl'] = 'Укључи ';
+$lang['i_superuser'] = 'СуперкориÑник';
+$lang['i_problems'] = 'ИнÑталација је наишла на проблеме који Ñу навадени у текÑту иÑпод. Ðе можете наÑтавити даље док их не иÑправите.';
+$lang['i_modified'] = 'Из ÑигурноÑних разлога ова Ñкрипта ради Ñамо Ñа новом Dokuwiki инÑталацијом. Требало би или да опет раÑпакујете архиву преузету Ñа Ñајта или да погледате <a href="http://dokuwiki.org/install">Dokuwiki инÑтрукције за инÑталацију</a>';
+$lang['i_funcna'] = 'ПХП функција <code>%s</code> није доÑтупна. Можда је Ваш хоÑтинг провајдер забранио из неког разлога?';
+$lang['i_phpver'] = '<code>%s</code> Верзија Вашег ПХПа је нижа од неопходне <code>%s</code>. Требало би да надоградите ПХП инÑталацију.';
+$lang['i_permfail'] = 'DokuWiki нема дозволу пиÑања у <code>%s</code>. Потребно је да поправите дозволе за ову фаÑциклу!';
+$lang['i_confexists'] = '<code>%s</code> већ поÑтоји';
+$lang['i_writeerr'] = 'Ðе могу да направим <code>%s</code>. Проверите дозволе а затим ручно направите ову датотеку.';
+$lang['i_badhash'] = 'dokuwiki.php није препознат или је измењен (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - недозвољена или празна вредноÑÑ‚';
+$lang['i_success'] = 'Подешавања Ñу завршена. Сада можете обриÑати датотеку install.php. ÐаÑтавите у <a href="doku.php">Ваш нови DokuWiki</a>.';
+$lang['i_failure'] = 'Појавили Ñу Ñе проблеми при пиÑању датотеке Ñа подешавањима. Требало би да их ручно иÑправите пре него што ћете моћи да кориÑтите <a href="doku.php">Ваш нови DokuWiki</a>.';
+$lang['i_policy'] = 'Иницијалне кориÑничке дозволе';
+$lang['i_pol0'] = 'Отворени вики (читање, пиÑање, Ñлање датотека за Ñве)';
+$lang['i_pol1'] = 'Јавни вики (читање за Ñве, пиÑање и Ñлање датотека Ñамо за региÑтроване кориÑнике)';
+$lang['i_pol2'] = 'Затворени вики (читање, пиÑање и Ñлање датотека Ñамо за региÑтроване кориÑнике)';
+$lang['i_retry'] = 'Понови';
+$lang['mu_intro'] = 'Одавде можете поÑлати више датотека одједном. Кликните на дугме Тражи да биÑте додали датотеке на лиÑту. Када завршите Ñа одабирањем кликните на Пошаљи.';
+$lang['mu_gridname'] = 'Ðазив датотеке';
+$lang['mu_gridsize'] = 'Величина';
+$lang['mu_gridstat'] = 'СтатуÑ';
+$lang['mu_namespace'] = 'ИменÑки проÑтор';
+$lang['mu_browse'] = 'Тражи';
+$lang['mu_toobig'] = 'превелико';
+$lang['mu_ready'] = 'Ñпремно за Ñлање';
+$lang['mu_done'] = 'завршено';
+$lang['mu_fail'] = 'није уÑпело';
+$lang['mu_authfail'] = 'ÑеÑија је иÑтекла';
+$lang['mu_progress'] = '@PCT@% поÑлато';
+$lang['mu_filetypes'] = 'Дозвољени типови датотека';
+$lang['recent_global'] = 'Тренутно пратите промене у именÑком проÑтору <b>%s</b>. Такође, можете пратити <a href="%s">прмене на целом викију</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt
new file mode 100644
index 000000000..4bcc0ac5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt
@@ -0,0 +1,3 @@
+====== Страница је закључана ======
+
+Ову Ñтраница је други кориÑник у овом тренутку закључао за измене. Мораћете да Ñачекате док он не заврши Ñа изменама или не иÑтекне закључавање.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt
new file mode 100644
index 000000000..c2f5a6fb6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt
@@ -0,0 +1,4 @@
+====== Пријављивање ======
+
+Тренутно ниÑте пријављени! УнеÑите Ваше информације иÑпод да биÑте Ñе пријавили. За то је неопходно да колачићи буду омогућен.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt
new file mode 100644
index 000000000..2ed99bf34
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt
@@ -0,0 +1,17 @@
+Страница на Вашем DokuWiki-ју је додата или измењена. Ево детаља
+
+Датум : @DATE@
+Веб читач : @BROWSER@
+ИП адреÑа : @IPADDRESS@
+Име домаћина : @HOSTNAME@
+Стара ревизија : @OLDPAGE@
+Ðова ревизија : @NEWPAGE@
+Сажетак измена : @SUMMARY@
+КориÑник : @USER@
+
+@DIFF@
+
+
+--
+Ову поруку је генериÑао DokuWiki Ñа
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt
new file mode 100644
index 000000000..40a36e6f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt
@@ -0,0 +1,3 @@
+====== Ова тема још увек не поÑтоји ======
+
+Пратили Ñте везу до теме која још увек не поÑтоји. Можете да је направите кориÑтећи дугме ''Ðаправи ову Ñтраницу''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt
new file mode 100644
index 000000000..73f8d0b48
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt
@@ -0,0 +1,4 @@
+====== Ðе поÑтоји таква ревизија ======
+
+Задата ревизија не поÑтоји. ИÑкориÑтите дугме ''Старе ревизије'' да излиÑтате Ñтаре ревизије овог документа.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt
new file mode 100644
index 000000000..be928884f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt
@@ -0,0 +1,4 @@
+====== Преглед ======
+
+Ово је преглед тога како би Ваш текÑÑ‚ изгледао. Ðе заборавите: он још **није Ñачуван**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt
new file mode 100644
index 000000000..35e23b75d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt
@@ -0,0 +1,13 @@
+Здраво @FULLNAME@!
+
+Ðеко је затражио нову лозинку за Ваш налог @TITLE@ на @DOKUWIKIURL@
+
+Ðко то ниÑте Ви, Ñамо игноришите ову поруку.
+
+У Ñупротном, да биÑте потврдили захтев кликните на Ñледећи линк:
+
+@CONFIRM@
+
+--
+Ову поруку је генериÑао DokuWiki sa
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt
new file mode 100644
index 000000000..c2d9ffff7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt
@@ -0,0 +1,2 @@
+Ова Ñтраница је Ñамо за читање. Можете да погледате изворни код, али не можете да је мењате. Обратите Ñе админиÑтратору ако миÑлите да то није уреду.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt
new file mode 100644
index 000000000..54c0c26f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt
@@ -0,0 +1,5 @@
+====== Скорије измене ======
+
+Следеће Ñтранице Ñу биле измењене у Ñкорије време.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt
new file mode 100644
index 000000000..a553b7a1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt
@@ -0,0 +1,4 @@
+====== РегиÑтрујте Ñе као нови кориÑник ======
+
+Попуните Ñве информације иÑпод како би Ñте направили нови налог на овом викију. Обавезно упишите **тачну е-адреÑу** - Ваша нова лозинка ће тамо бити поÑлата. КориÑничко име би требало да буде иÑправно [[doku>pagename|име Ñтранице]]
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt
new file mode 100644
index 000000000..efdcbb5c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt
@@ -0,0 +1,15 @@
+РегиÑтрован је нови кориÑник. Ово Ñу детаљи:
+
+КориÑничко име: @NEWUSER@
+Име и презиме: @NEWNAME@
+Е-адреÑа: @NEWEMAIL@
+
+Датум: @DATE@
+Веб читач: @BROWSER@
+ИП адреÑа: @IPADDRESS@
+Домаћин: @HOSTNAME@
+
+
+--
+Ову поруку је генериÑао DokuWiki sa
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt
new file mode 100644
index 000000000..7f6623dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Пошаљи нову лозинку ======
+
+Молим Ð’Ð°Ñ ÑƒÐ½ÐµÑите кориÑничко име у форму да биÑте затражили нову лозинку за Ваш налог на овом викију. Потврдни линк ће бити поÑлат на е-адреÑу коју Ñте кориÑтили на региÑтрацији. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt
new file mode 100644
index 000000000..1ca995a11
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt
@@ -0,0 +1,4 @@
+====== Старе ревизије ======
+
+Ово Ñу Ñтарије ревизије тренутног документа. Да би Ñте повратили Ñтару ревизију, изаберите је одоздо, кликните на ''Измени Ñтраницу'' и Ñачувајте је.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt
new file mode 100644
index 000000000..010966a7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt
@@ -0,0 +1,5 @@
+====== Претрага ======
+
+ИÑпод можете да нађете резултате Ваше претраге. Ðко ниÑте нашли то што Ñте тражили, можете да направите нову Ñтраницу названу по Вашем упиту кориÑтећи дугме ''Измени ову Ñтраницу''.
+
+===== Резултати =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt
new file mode 100644
index 000000000..f2aabb2cb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt
@@ -0,0 +1,2 @@
+**Ово је Ñтара верзија документа!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt
new file mode 100644
index 000000000..78093e29a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt
@@ -0,0 +1,12 @@
+# Ово је лиÑта речи које Ñе неће индекÑирати, по једна реч у реду
+# Када мењате ову датотеку проверите да ли је нови ред запиÑан по UNIX ÑиÑтему
+# Ðема потребе уноÑити речи краће од 3 Ñлова - оне Ñе преÑкачу иначе
+ваш
+они
+њихов
+како
+ово
+шта
+кад
+где
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt
new file mode 100644
index 000000000..fd3de7d38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt
@@ -0,0 +1,17 @@
+Здраво!
+
+Измењена је Ñтраница @PAGE@ на @TITLE@ викију.
+Ево измена:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Да Ñе одјавите Ñа ове Ñтранице, пријавите Ñе на вики на
+@DOKUWIKIURL@ и онда поÑетите
+@NEWPAGE@
+и изаберите 'Одјави Ñе Ñа измена'.
+
+--
+Ову поруку је генериÑао DokuWiki на
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt
new file mode 100644
index 000000000..15b9955e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Ðжурирање Вашег профила ======
+
+Потребно је попунити Ñамо она поља која желите да промените. Поље КориÑничко име не можете да променити. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt
new file mode 100644
index 000000000..36b3bb31d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt
@@ -0,0 +1,14 @@
+Ðова датотека је поÑлата на Ваш DokuWiki. Ово Ñу њени детањи:
+
+Датотека: @MEDIA@
+Датум: @DATE@
+Веб читач: @BROWSER@
+ИП адреÑа: @IPADDRESS@
+Домаћин: @HOSTNAME@
+Величина: @SIZE@
+MIME тип: @MIME@
+КориÑник: @USER@
+
+--
+Ову поруку је генериÑао DokuWiki sa
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt
new file mode 100644
index 000000000..56ecde3fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt
@@ -0,0 +1,4 @@
+====== СПÐÐœ је блокиран ======
+
+Ваше измене **ниÑу** Ñачуване јер Ñадрже једну или више блокираних речи. Ðко Ñте покушали да Ñпамујете вики -- надрљаћете! Ðко миÑлите да је ово грешка, контактирајте админиÑтратора овог викија.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt
new file mode 100644
index 000000000..10887da7d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt
@@ -0,0 +1,4 @@
+====== Administration ======
+
+Nedan hittar du en lista över de tillgängliga administrativa uppgifterna i DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt
new file mode 100644
index 000000000..0af37c769
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt
@@ -0,0 +1,2 @@
+
+===== Ytterligare Tillägg ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt
new file mode 100644
index 000000000..c907c8ecf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt
@@ -0,0 +1,3 @@
+====== Tillbakalänkar ======
+
+Detta är en lista över sidor som verkar länka tillbaka till den aktuella sidan.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt
new file mode 100644
index 000000000..42168d1b4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt
@@ -0,0 +1,6 @@
+====== Det finns en senare version ======
+
+Det finns en senare version av dokumentet du har redigerat. Detta kan hända när en annan användare redigerar dokumentet samtidigt som du.
+
+Granska skillnaderna som visas nedan noga, och välj sedan vilken version du vill behålla. Om du väljer ''spara'', så kommer din version att sparas. Välj ''avbryt'' för att behålla den nuvarande versionen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt
new file mode 100644
index 000000000..64d129227
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt
@@ -0,0 +1,4 @@
+====== Ã…tkomst nekad ======
+
+Tyvärr, du har inte behörighet att fortsätta. Kanske har du glömt att logga in?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt
new file mode 100644
index 000000000..9fb8c20f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt
@@ -0,0 +1,4 @@
+====== Skillnader ======
+
+Här visas skillnader mellan den valda versionen och den nuvarande versionen av sidan.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt
new file mode 100644
index 000000000..3749ad035
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt
@@ -0,0 +1,6 @@
+====== Utkast hittat ======
+
+Din senaste redigering av sidan avslutades inte på ett korrekt sätt. DokuWiki sparade automatiskt ett utkast under tiden du arbetade, och nu kan du använda det för att fortsätta redigeringen. Nedan kan du se det innehåll som sparats från din förra session.
+
+Bestäm om du vill //återskapa// din förlorade redigeringssession, //radera// det automatiskt sparade utkastet eller //avbryta// redigeringen.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt
new file mode 100644
index 000000000..187b11fca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt
@@ -0,0 +1,2 @@
+Redigera sidan och klicka ''Spara''. Se [[wiki:syntax]] för Wikisyntax. Redigera bara sidan om du kan **förbättra** den. Om du vill testa hur saker och ting fungerar, gör det på [[playground:playground|lekplatsen]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt
new file mode 100644
index 000000000..8bd1adb0a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt
@@ -0,0 +1,2 @@
+**Du har hämtat en tidigare version av dokumentet!** Om du sparar den så kommer du att skapa en ny version med detta innehåll.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt
new file mode 100644
index 000000000..24d715b74
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt
@@ -0,0 +1,4 @@
+====== Innehållsförteckning ======
+
+Detta är en innehållsförteckning över alla tillgängliga sidor, sorterad efter [[doku>namespaces|namnrymder]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html
new file mode 100644
index 000000000..11e2eea49
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html
@@ -0,0 +1,25 @@
+<p>Denna sida hjälper dig med nyinstallation och inställningar för
+<a href="http://dokuwiki.org">Dokuwiki</a>. Mer information om
+installationsprogrammet finns på dess egen
+<a href="http://dokuwiki.org/installer">dokumentationssida</a>.</p>
+
+<p>DokuWiki använder vanliga filer för att lagra wikisidor och annan
+information som här till sidorna (till exempel bilder, sökindex, gamla
+versioner, etc). För att kunna fungera
+<strong>måste</strong> DokuWiki ha skrivrättigheter i de kataloger där
+filerna ligger. Detta installationsprogram kan inte ändra rättigheter
+på kataloger. Det måste normalt göras direkt på en kommandorad, eller
+om du använder ett webbhotell, via FTP eller din leverantörs kontrollpanel
+(till exempel cPanel).</p>
+
+<p>Detta installationsprogram anpassar inställningarna i din DokuWiki för
+<acronym title="access control list">ACL</acronym> (behörighetslista), vilket i sin tur gör att
+administratören kan logga in och komma åt DokuWikis administrationsmenu för
+att installera insticksmoduler, hantera användare, hantera behörighet till
+wikisidor och ändra inställningar. ACL är inget krav för att DokuWiki ska
+fungera, men det förenklar administrationen.</p>
+
+<p>Erfarna användare, eller användare med särskilda behov, kan använda dessa
+länkar för att hitta mer detaljer om
+<a href="http://dokuwiki.org/install">installation</a>
+och <a href="http://dokuwiki.org/config">inställningar</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php
new file mode 100644
index 000000000..062e83a31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php
@@ -0,0 +1,261 @@
+<?php
+/**
+ * Swedish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Joaquim Homrighausen <joho@webbplatsen.se>
+ * @author Per Foreby <per@foreby.se>
+ * @author Nicklas Henriksson <nicklas[at]nihe.se>
+ * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author Dennis Karlsson
+ * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author emil@sys.nu
+ * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
+ * @author Tormod Johansson tormod.otter.johansson@gmail.com
+ * @author Emil Lind <emil@sys.nu>
+ * @author Bogge Bogge <bogge@bogge.com>
+ * @author Peter Åström <eaustreum@gmail.com>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = 'â€';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '’';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Redigera sidan';
+$lang['btn_source'] = 'Visa källkod';
+$lang['btn_show'] = 'Visa sidan';
+$lang['btn_create'] = 'Skapa sidan';
+$lang['btn_search'] = 'Sök';
+$lang['btn_save'] = 'Spara';
+$lang['btn_preview'] = 'Granska';
+$lang['btn_top'] = 'Till början av sidan';
+$lang['btn_newer'] = '<< nyare';
+$lang['btn_older'] = 'äldre >>';
+$lang['btn_revs'] = 'Historik';
+$lang['btn_recent'] = 'Nyligen ändrat';
+$lang['btn_upload'] = 'Ladda upp';
+$lang['btn_cancel'] = 'Avbryt';
+$lang['btn_index'] = 'Index';
+$lang['btn_secedit'] = 'Redigera';
+$lang['btn_login'] = 'Logga in';
+$lang['btn_logout'] = 'Logga ut';
+$lang['btn_admin'] = 'Admin';
+$lang['btn_update'] = 'Uppdatera';
+$lang['btn_delete'] = 'Radera';
+$lang['btn_back'] = 'Tillbaka';
+$lang['btn_backlink'] = 'Tillbakalänkar';
+$lang['btn_backtomedia'] = 'Tillbaka till val av Mediafil';
+$lang['btn_subscribe'] = 'Prenumerera på ändringar';
+$lang['btn_unsubscribe'] = 'Säg upp prenumeration på ändringar';
+$lang['btn_subscribens'] = 'Prenumerera på namnrymdsändringar';
+$lang['btn_unsubscribens'] = 'Sluta prenumerera på namnrymdsändringar
+';
+$lang['btn_profile'] = 'Uppdatera profil';
+$lang['btn_reset'] = 'Återställ';
+$lang['btn_resendpwd'] = 'Skicka nytt lösenord';
+$lang['btn_draft'] = 'Redigera utkast';
+$lang['btn_recover'] = 'Ã…terskapa utkast';
+$lang['btn_draftdel'] = 'Radera utkast';
+$lang['btn_revert'] = 'Återställ';
+$lang['loggedinas'] = 'Inloggad som';
+$lang['user'] = 'Användarnamn';
+$lang['pass'] = 'Lösenord';
+$lang['newpass'] = 'Nytt lösenord';
+$lang['oldpass'] = 'Bekräfta nuvarande lösenord';
+$lang['passchk'] = 'en gång till';
+$lang['remember'] = 'Kom ihåg mig';
+$lang['fullname'] = 'Namn';
+$lang['email'] = 'E-post';
+$lang['register'] = 'Registrera';
+$lang['profile'] = 'Användarprofil';
+$lang['badlogin'] = 'Felaktigt användarnamn eller lösenord.';
+$lang['minoredit'] = 'Små ändringar';
+$lang['draftdate'] = 'Utkast automatiskt sparat';
+$lang['nosecedit'] = 'Sidan ändrades medan du skrev, sektionsinformationen var inte uppdaterad. Laddar hela sidan istället.';
+$lang['regmissing'] = 'Du måste fylla i alla fälten.';
+$lang['reguexists'] = 'Det finns redan en användare med det användarnamnet.';
+$lang['regsuccess'] = 'Användarkontot skapat, lösenordet har skickats via e-post.';
+$lang['regsuccess2'] = 'Användarkontot skapat.';
+$lang['regmailfail'] = 'Ett fel uppstod när ditt lösenord skulle skickas via e-post. Var god kontakta administratören!';
+$lang['regbadmail'] = 'Den angivna e-postadressen verkar vara ogiltig - om du anser detta felaktigt, var god kontakta administratören';
+$lang['regbadpass'] = 'De två angivna lösenorden är inte identiska. Försök igen.';
+$lang['regpwmail'] = 'Ditt DokuWikilösenord';
+$lang['reghere'] = 'Har du inte ett konto än? Skaffa ett';
+$lang['profna'] = 'Denna wiki stödjer inte ändringar av profiler';
+$lang['profnochange'] = 'Ingenting ändrades, inget att göra.';
+$lang['profnoempty'] = 'Namn och e-postadress måste fyllas i.';
+$lang['profchanged'] = 'Användarprofilen uppdaterad.';
+$lang['pwdforget'] = 'Glömt ditt lösenord? Ordna ett nytt';
+$lang['resendna'] = 'Den här wikin stödjer inte utskick av lösenord.';
+$lang['resendpwd'] = 'Skicka nytt lösenord för';
+$lang['resendpwdmissing'] = 'Du måste fylla i alla fält.';
+$lang['resendpwdnouser'] = 'Den här användaren hittas inte i databasen.';
+$lang['resendpwdbadauth'] = 'Den här verifieringskoden är inte giltig. Kontrollera att du använde hela verifieringslänken.';
+$lang['resendpwdconfirm'] = 'En verifieringslänk har skickats med e-post.';
+$lang['resendpwdsuccess'] = 'Ditt nya lösenord har skickats med e-post.';
+$lang['license'] = 'Om inte annat angivet, innehållet i denna wiki är licensierat under följande licenser:';
+$lang['licenseok'] = 'Notera: Genom att ändra i denna sidan så accepterar du att licensiera ditt bidrag under följande licenser:';
+$lang['searchmedia'] = 'Sök efter filnamn:';
+$lang['searchmedia_in'] = 'Sök i %s';
+$lang['txt_upload'] = 'Välj fil att ladda upp';
+$lang['txt_filename'] = 'Ladda upp som (ej obligatoriskt)';
+$lang['txt_overwrt'] = 'Skriv över befintlig fil';
+$lang['lockedby'] = 'LÃ¥st av';
+$lang['lockexpire'] = 'Lås upphör att gälla';
+$lang['willexpire'] = 'Ditt redigeringslås för detta dokument kommer snart att upphöra.\nFör att undvika versionskonflikter bör du förhandsgranska ditt dokument för att förlänga redigeringslåset.';
+$lang['notsavedyet'] = 'Det finns ändringar som inte är sparade.\nÄr du säker på att du vill fortsätta?';
+$lang['rssfailed'] = 'Ett fel uppstod när detta RSS-flöde skulle hämtas: ';
+$lang['nothingfound'] = 'Inga filer hittades.';
+$lang['mediaselect'] = 'Mediafiler';
+$lang['fileupload'] = 'Ladda upp mediafiler';
+$lang['uploadsucc'] = 'Uppladdningen lyckades';
+$lang['uploadfail'] = 'Uppladdningen misslyckades, fel filskydd?';
+$lang['uploadwrong'] = 'Uppladdning nekad. Filändelsen är inte tillåten!';
+$lang['uploadexist'] = 'Filen finns redan. Ingenting gjordes.';
+$lang['uploadbadcontent'] = 'Det uppladdade innehållet stämde inte överens med filändelsen %s.';
+$lang['uploadspam'] = 'Uppladdningen stoppades av spärrlistan för spam.';
+$lang['uploadxss'] = 'Uppladdningen stoppades på grund av eventuellt skadligt innehåll.';
+$lang['uploadsize'] = 'Den uppladdade filen är för stor. (max. %s)';
+$lang['deletesucc'] = 'Filen "%s" har raderats.';
+$lang['deletefail'] = 'Kunde inte radera "%s" - kontrollera filskydd.';
+$lang['mediainuse'] = 'Filen "%s" har inte raderats - den används fortfarande.';
+$lang['namespaces'] = 'Namnrymder';
+$lang['mediafiles'] = 'Tillgängliga filer i';
+$lang['js']['searchmedia'] = 'Sök efter filer';
+$lang['js']['keepopen'] = 'Lämna fönstret öppet efter val av fil';
+$lang['js']['hidedetails'] = 'Dölj detaljer';
+$lang['js']['nosmblinks'] = 'Länkning till Windowsresurser fungerar bara med Microsofts Internet Explorer.
+Du kan fortfarande klippa och klistra in länken om du använder en annan webbläsare än MSIE.';
+$lang['js']['linkwiz'] = 'Snabbguide Länkar';
+$lang['js']['linkto'] = 'Länk till:';
+$lang['js']['del_confirm'] = 'Vill du verkligen radera?';
+$lang['js']['mu_btn'] = 'Ladda upp flera filer samtidigt';
+$lang['mediausage'] = 'Använd följande syntax för att referera till denna fil:';
+$lang['mediaview'] = 'Visa originalfilen';
+$lang['mediaroot'] = 'rot';
+$lang['mediaupload'] = 'Här kan du ladda upp en fil till den nuvarande namnrymden. För att skapa undernamnrymder, skriv dem före filnamnet under "Ladda upp som". Separera namnrymd och filnamn med kolon.';
+$lang['mediaextchange'] = 'Filändelsen ändrad från .%s till .%s!';
+$lang['reference'] = 'Referenser till';
+$lang['ref_inuse'] = 'Filen kan inte raderas eftersom den fortfarande används av följande sidor:';
+$lang['ref_hidden'] = 'Vissa referenser är på sidor som du inte har rätt att läsa';
+$lang['hits'] = 'Träffar';
+$lang['quickhits'] = 'Matchande sidnamn';
+$lang['toc'] = 'Innehållsförteckning';
+$lang['current'] = 'aktuell';
+$lang['yours'] = 'Din version';
+$lang['diff'] = 'visa skillnader mot aktuell version';
+$lang['diff2'] = 'Visa skillnader mellan valda versioner';
+$lang['line'] = 'Rad';
+$lang['breadcrumb'] = 'Spår';
+$lang['youarehere'] = 'Här är du';
+$lang['lastmod'] = 'Senast uppdaterad';
+$lang['by'] = 'av';
+$lang['deleted'] = 'raderad';
+$lang['created'] = 'skapad';
+$lang['restored'] = 'tidigare version återställd';
+$lang['external_edit'] = 'extern redigering';
+$lang['summary'] = 'Redigeringskommentar';
+$lang['noflash'] = '<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> behövs för att visa detta innehåll.';
+$lang['download'] = 'Ladda ner kodfragmentet';
+$lang['mail_newpage'] = 'sida tillagd:';
+$lang['mail_changed'] = 'sida ändrad:';
+$lang['mail_new_user'] = 'Ny användare:';
+$lang['mail_upload'] = 'fil uppladdad:';
+$lang['qb_bold'] = 'Fet text';
+$lang['qb_italic'] = 'Kursiv text';
+$lang['qb_underl'] = 'Understruken text';
+$lang['qb_code'] = 'Kodtext';
+$lang['qb_strike'] = 'Överstruken text';
+$lang['qb_h1'] = 'Rubrik nivå 1';
+$lang['qb_h2'] = 'Rubrik nivå 2';
+$lang['qb_h3'] = 'Rubrik nivå 3';
+$lang['qb_h4'] = 'Rubrik nivå 4';
+$lang['qb_h5'] = 'Rubrik nivå 5';
+$lang['qb_h'] = 'Rubrik';
+$lang['qb_hs'] = 'Välj Rubrik';
+$lang['qb_hplus'] = 'Större Rubrik';
+$lang['qb_hminus'] = 'Mindre Rubrik';
+$lang['qb_hequal'] = 'Rubrik samma nivå.';
+$lang['qb_link'] = 'Intern Länk';
+$lang['qb_extlink'] = 'Extern Länk';
+$lang['qb_hr'] = 'Horisontell linje';
+$lang['qb_ol'] = 'Punkt i sorterad lista';
+$lang['qb_ul'] = 'Punkt i osorterad lista';
+$lang['qb_media'] = 'Lägg till bilder och andra filer';
+$lang['qb_sig'] = 'Infoga signatur';
+$lang['qb_smileys'] = 'Smileys';
+$lang['qb_chars'] = 'Specialtecken';
+$lang['upperns'] = 'hoppa till föräldernamnrymd';
+$lang['admin_register'] = 'Lägg till ny användare';
+$lang['metaedit'] = 'Redigera metadata';
+$lang['metasaveerr'] = 'Skrivning av metadata misslyckades';
+$lang['metasaveok'] = 'Metadata sparad';
+$lang['img_backto'] = 'Tillbaka till';
+$lang['img_title'] = 'Rubrik';
+$lang['img_caption'] = 'Bildtext';
+$lang['img_date'] = 'Datum';
+$lang['img_fname'] = 'Filnamn';
+$lang['img_fsize'] = 'Storlek';
+$lang['img_artist'] = 'Fotograf';
+$lang['img_copyr'] = 'Copyright';
+$lang['img_format'] = 'Format';
+$lang['img_camera'] = 'Kamera';
+$lang['img_keywords'] = 'Nyckelord';
+$lang['subscribe_success'] = 'Lade till %s i prenumerationslistan för %s';
+$lang['subscribe_error'] = 'Fel vid tillägg av %s i prenumerationslistan för %s';
+$lang['subscribe_noaddress'] = 'Det finns ingen adress knuten till ditt konto, det går inte att lägga till dig i prenumerationslistan';
+$lang['unsubscribe_success'] = 'Tog bort %s från prenumerationslistan för %s';
+$lang['unsubscribe_error'] = 'Fel vid borttagning %s från prenumerationslistan list för %s';
+$lang['authmodfailed'] = 'Felaktiga inställningar för användarautentisering. Var vänlig meddela wikiadministratören.';
+$lang['authtempfail'] = 'Tillfälligt fel på användarautentisering. Om felet kvarstår, var vänlig meddela wikiadministratören.';
+$lang['i_chooselang'] = 'Välj språk';
+$lang['i_installer'] = 'Installation av DokuWiki';
+$lang['i_wikiname'] = 'Wikins namn';
+$lang['i_enableacl'] = 'Aktivera behörighetslistan (ACL) (rekommenderas)';
+$lang['i_superuser'] = 'Användarnamn för administratören';
+$lang['i_problems'] = 'Installationsprogrammet hittade några problem som visas nedan. Du kan inte fortsätta innan du har fixat dem.';
+$lang['i_modified'] = 'Av säkerhetsskäl fungerar det här skriptet bara med en ny och omodifierad installation av Dokuwiki.
+ Du får antingen packa upp det nedladdade paketet på nytt, eller konsultera de kompletta
+ <a href="http://dokuwiki.org/install">instruktionerna för installation av Dokuwiki</a>';
+$lang['i_funcna'] = 'PHP-funktionen <code>%s</code> är inte tillgänglig. Kanske ditt webbhotell har avaktiverat den av någon anledning?';
+$lang['i_phpver'] = 'Din PHP-version <code>%s</code> är lägre än vad som krävs <code>%s</code>. Du behöver uppgradera din PHP-installation.';
+$lang['i_permfail'] = '<code>%s</code> är inte skrivbar av DokuWiki. Du behöver ändra filskyddet på den här katalogen!';
+$lang['i_confexists'] = '<code>%s</code> finns redan';
+$lang['i_writeerr'] = 'Kan inte skapa <code>%s</code>. Kontrollera filskyddet på kataloger/filer och skapa filen manuellt.';
+$lang['i_badhash'] = 'okänd eller ändrad dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - felaktig eller blank';
+$lang['i_success'] = 'Konfigurationen avslutades utan fel. Du kan radera filen install.php nu. Fortsätt till
+ <a href="doku.php">din nya DokuWiki</a>.';
+$lang['i_failure'] = 'Fel uppstod vid skrivning av konfigurationsfilerna. Du kan behöva ordna till dem manuellt innan
+ du kan använda <a href="doku.php">din nya DokuWiki</a>.';
+$lang['i_policy'] = 'Initial ACL-policy';
+$lang['i_pol0'] = 'Öppen wiki (alla får läsa, skriva och ladda upp filer)';
+$lang['i_pol1'] = 'Publik wiki (alla får läsa, registrerade användare för skriva och ladda upp filer)';
+$lang['i_pol2'] = 'Sluten wiki (endast registrerade användare får läsa, skriva och ladda upp filer)';
+$lang['i_retry'] = 'Försök igen';
+$lang['mu_intro'] = 'Här kan du ladda upp flera filer på en gång. Klicka på bläddra-knappen för att lägga till dem i kön. Tryck på ladda upp när du är klar.';
+$lang['mu_gridname'] = 'Filnamn';
+$lang['mu_gridsize'] = 'Storlek';
+$lang['mu_gridstat'] = 'Status';
+$lang['mu_namespace'] = 'Namnrymd';
+$lang['mu_browse'] = 'Bläddra';
+$lang['mu_toobig'] = 'för stor';
+$lang['mu_ready'] = 'redo att ladda upp';
+$lang['mu_done'] = 'komplett';
+$lang['mu_fail'] = 'misslyckades';
+$lang['mu_authfail'] = 'sessionen över tid';
+$lang['mu_progress'] = '@PCT@% uppladdade';
+$lang['mu_filetypes'] = 'Tillåtna filtyper';
+$lang['mu_info'] = 'filerna uppladdade.';
+$lang['mu_lasterr'] = 'Senaste fel:';
+$lang['recent_global'] = 'Du bevakar ändringar i namnrymden <b>%s</b>. Du kan också titta på <a href="%s">senaste ändringar för hela wikin</a>.';
+$lang['years'] = '%d år sedan';
+$lang['months'] = '%d månader sedan';
+$lang['weeks'] = '%d veckor sedan';
+$lang['days'] = '%d dagar sedan';
+$lang['hours'] = '%d timmar sedan';
+$lang['minutes'] = '%d minuter sedan';
+$lang['seconds'] = '%d sekunder sedan';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt
new file mode 100644
index 000000000..cb64eaf02
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt
@@ -0,0 +1,3 @@
+====== Sidan låst ======
+
+Den här sidan är för närvarande låst för redigering av en annan användare. Du måste vänta tills den användaren är klar med sin redigering, eller tills dess att dokumentlåset upphör att gälla.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt
new file mode 100644
index 000000000..5f0e3b262
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt
@@ -0,0 +1,4 @@
+====== Logga in ======
+
+Du är inte inloggad! Ange ditt användarnamn och lösenord i formuläret nedan för att logga in. Stöd för cookies måste vara aktiverat i din webbläsare för att du skall kunna logga in.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt
new file mode 100644
index 000000000..616bb4eee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt
@@ -0,0 +1,17 @@
+En sida i din DokuWiki har lagts till eller ändrats. Här är detaljerna:
+
+Datum : @DATE@
+Webbläsare : @BROWSER@
+IP-adress : @IPADDRESS@
+Datornamn : @HOSTNAME@
+Tidigare version : @OLDPAGE@
+Aktuell version : @NEWPAGE@
+Redigeringskommentar : @SUMMARY@
+Användare : @USER@
+
+@DIFF@
+
+
+--
+Detta meddelande har skapats av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt
new file mode 100644
index 000000000..3e0951056
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt
@@ -0,0 +1,3 @@
+====== Det här ämnet finns inte ännu ======
+
+Du har följt en länk till ett ämne som inte finns ännu. Du kan skapa det genom att klicka på ''Skapa den här sidan''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt
new file mode 100644
index 000000000..46df86235
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt
@@ -0,0 +1,4 @@
+====== Det finns ingen sådan version ======
+
+Den angivna versionen finns inte. Använd ''Historik'' för en förteckning över de versioner som finns av detta dokument.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt
new file mode 100644
index 000000000..5c3a65341
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt
@@ -0,0 +1,4 @@
+====== Förhandsgranskning ======
+
+Detta är en förhandstitt på hur din text kommer att se ut när den visas. Kom ihåg: Den är **inte sparad** ännu!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt
new file mode 100644
index 000000000..541437716
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt
@@ -0,0 +1,16 @@
+Hej @FULLNAME@!
+
+Någon har bett om ett nytt lösenord för ditt konto på @TITLE@
+(@DOKUWIKIURL@)
+
+Om det inte var du som bad om ett nytt lösenord kan du helt
+enkelt ignorera det här brevet.
+
+För att bekräfta att förfrågan verkligen kom från dig, var vänlig
+och använd följande länk.
+
+@CONFIRM@
+
+--
+Detta meddelande har skapats av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt
new file mode 100644
index 000000000..5391b3ddf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt
@@ -0,0 +1,2 @@
+Denna sida är skrivskyddad. Du kan titta på källkoden, men inte ändra den. Kontakta administratören om du anser att du bör kunna ändra sidan.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt
new file mode 100644
index 000000000..d8c39dfa5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt
@@ -0,0 +1,5 @@
+====== Senaste ändringarna ======
+
+Följande sidor/dokument har nyligen uppdaterats.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt
new file mode 100644
index 000000000..e75d2a672
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt
@@ -0,0 +1,4 @@
+====== Registrera dig som användare ======
+
+Fyll i all information som efterfrågas i formuläret nedan för att skapa ett nytt konto i denna wiki. Var särskilt noga med att ange en **giltig e-postadress** - om du inte blir ombedd att ange ett lösenord här kommer ett nytt lösenord att skickas till den adressen. Användarnamnet skall vara ett giltigt [[doku>pagename|sidnamn]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt
new file mode 100644
index 000000000..c0edc3728
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt
@@ -0,0 +1,14 @@
+En ny användare har registrerat sig. Här är detaljerna:
+
+Användarnamn : @NEWUSER@
+Namn : @NEWNAME@
+E-post : @NEWEMAIL@
+
+Datum : @DATE@
+Webbläsare : @BROWSER@
+IP-adress : @IPADDRESS@
+Datornamn : @HOSTNAME@
+
+--
+Detta meddelande har skapats av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt
new file mode 100644
index 000000000..0757ee9dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt
@@ -0,0 +1,4 @@
+====== Skicka nytt lösenord ======
+
+Fyll i ditt användarnamn i formuläret nedan för att få ett nytt lösenord till ditt konto i denna wiki. En länk för verifiering kommer att skickas till din registrerade e-postadress.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt
new file mode 100644
index 000000000..b9dfc5600
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt
@@ -0,0 +1,4 @@
+====== Historik ======
+
+Här visas tidigare versioner av detta dokument. För att återställa dokumentet till en tidigare version, välj den önskade versionen nedan, klicka på ''Redigera sida'' och spara sedan dokumentet.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt
new file mode 100644
index 000000000..bcc88cd95
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt
@@ -0,0 +1,5 @@
+====== Sök ======
+
+Nedan ser du resultatet av sökningen. Om du inte hittar det du letar efter, så kan du skapa eller redigera sidan med någon av knapparna.
+
+===== Resultat =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt
new file mode 100644
index 000000000..a79b30b11
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt
@@ -0,0 +1,2 @@
+**Detta är en gammal version av dokumentet!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt
new file mode 100644
index 000000000..357659673
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt
@@ -0,0 +1,129 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
+
+# Följande svenska stoppord kommer från
+# http://snowball.tartarus.org/algorithms/swedish/stop.txt. Ord kortare än tre
+# bokstäver har tagits bort (se kommentaren ovan) Se även
+# http://www.cling.gu.se/theses/2004/cl0sknub_cl0tsven.pdf. Vi behåller de
+# engelska orden eftersom det är rätt vanligt med engelska texter.
+och
+det
+att
+jag
+hon
+som
+han
+den
+med
+var
+sig
+för
+till
+men
+ett
+hade
+icke
+mig
+henne
+sin
+har
+inte
+hans
+honom
+skulle
+hennes
+där
+min
+man
+vid
+kunde
+något
+från
+när
+efter
+upp
+dem
+vara
+vad
+över
+dig
+kan
+sina
+här
+mot
+alla
+under
+någon
+eller
+allt
+mycket
+sedan
+denna
+själv
+detta
+utan
+varit
+hur
+ingen
+mitt
+bli
+blev
+oss
+din
+dessa
+några
+deras
+blir
+mina
+samma
+vilken
+sådan
+vår
+blivit
+dess
+inom
+mellan
+sådant
+varför
+varje
+vilka
+ditt
+vem
+vilket
+sitta
+sådana
+vart
+dina
+vars
+vårt
+våra
+ert
+era
+vilkas
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt
new file mode 100644
index 000000000..147585caf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt
@@ -0,0 +1,24 @@
+Hej!
+
+Sidan @PAGE@ i wikin @TITLE@ har ändrats.
+Här är ändringarna:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Datum : @DATE@
+Användare : @USER@
+Kommentar : @SUMMARY@
+Gammal sida : @OLDPAGE@
+Ny sida : @NEWPAGE@
+
+För att säga upp prenumerationen på den här sidan,
+logga in i wikin på
+@DOKUWIKIURL@ och gå till
+@NEWPAGE@
+där du väljer 'Säg upp prenumeration på ändringar'.
+
+--
+Detta meddelande har skapats av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt
new file mode 100644
index 000000000..98ed6e33f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Uppdatera din användarprofil ======
+
+Du behöver bara fylla i de fält som du vill ändra. Du kan inte ändra ditt användarnamn.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt
new file mode 100644
index 000000000..5963adcbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt
@@ -0,0 +1,14 @@
+En fil har laddats upp till din DokuWiki. Här är detaljerna:
+
+Fil : @MEDIA@
+Datum : @DATE@
+Webbläsare : @BROWSER@
+IP-adress : @IPADDRESS@
+Datornamn : @HOSTNAME@
+Storlek : @SIZE@
+MIME-typ : @MIME@
+Användare : @USER@
+
+--
+Detta meddelande har skapats av DokuWiki på
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt
new file mode 100644
index 000000000..e1b632ce4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt
@@ -0,0 +1,4 @@
+====== Stoppade SPAM ======
+
+Dina ändringar har **inte** sparats på grund av att de innehåller ett eller flera ord som spärrats. Om du har försökt att spara skräp, s k ''spam'' -- Fyyy på dig! Om du anser att det här beror på ett fel, kontakta wikins administratör.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt
new file mode 100644
index 000000000..677e779b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt
@@ -0,0 +1,3 @@
+====== งานธุรà¸à¸²à¸£à¸„วบคุมระบบ ======
+
+ด้านล่างนี้คุณสามารถพบรายà¸à¸²à¸£à¸‡à¸²à¸™à¸„วบคุมระบบทั้งหมดในโดà¸à¸¸à¸§à¸´à¸à¸´ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt
new file mode 100644
index 000000000..85a6b17bd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt
@@ -0,0 +1 @@
+====== ปลั๊à¸à¸­à¸´à¸™à¹€à¸ªà¸£à¸´à¸¡ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt
new file mode 100644
index 000000000..fff6898d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt
@@ -0,0 +1,3 @@
+====== ลิงค์à¸à¸¥à¸±à¸š(Backlinks) ======
+
+นี่คือรายชื่อเพจที่ชี้ลิงค์à¸à¸¥à¸±à¸šà¸¡à¸²à¸¢à¸±à¸‡à¹€à¸žà¸ˆà¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt
new file mode 100644
index 000000000..5e786a6b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt
@@ -0,0 +1,5 @@
+====== มีเนื้อหารุ่นใหม่à¸à¸§à¹ˆà¸²à¹€à¸à¸´à¸”ขึ้น ======
+
+มีเอà¸à¸ªà¸²à¸£à¸£à¸¸à¹ˆà¸™à¹ƒà¸«à¸¡à¹ˆà¸à¸§à¹ˆà¸²à¸—ี่คุณได้à¹à¸à¹‰à¹„ขไว้ มันเà¸à¸´à¸”ขึ้นเมื่อผู้ใช้รายอื่นได้ทำà¸à¸²à¸£à¹à¸à¹‰à¹„ขเอà¸à¸ªà¸²à¸£à¹ƒà¸™à¸‚ณะที่ขณะเดียวà¸à¸±à¸™à¸à¸±à¸šà¸—ี่คุณà¸à¸³à¸¥à¸±à¸‡à¹à¸à¹‰à¹„ขมัน
+
+ให้ตรวจสอบความà¹à¸•à¸à¸•à¹ˆà¸²à¸‡à¸—ี่à¹à¸ªà¸”งไว้ด้านล่างนี้ให้ทั่วถึง, à¹à¸¥à¹‰à¸§à¸•à¸±à¸”สินใจว่าจะเà¸à¹‡à¸šà¸‰à¸šà¸±à¸šà¹„หนไว้ ถ้าคุณเลือภ"บันทึà¸", ฉบับของคุณจะถูà¸à¸šà¸±à¸™à¸—ึà¸à¹„ว้ หรือà¸à¸” "ยà¸à¹€à¸¥à¸´à¸" เพื่อเà¸à¹‡à¸šà¸‰à¸šà¸±à¸šà¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt
new file mode 100644
index 000000000..88b012a67
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt
@@ -0,0 +1,3 @@
+====== ปà¸à¸´à¹€à¸ªà¸˜à¸ªà¸´à¸—ธิ์ ======
+
+ขออภัย คุณไม่มีสิทธิ์เพียงพอที่จะดำเนินà¸à¸²à¸£à¸•à¹ˆà¸­ บางทีคุณอาจจะลืมล็อà¸à¸­à¸´à¸™? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt
new file mode 100644
index 000000000..e21759e03
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt
@@ -0,0 +1,3 @@
+====== ความà¹à¸•à¸à¸•à¹ˆà¸²à¸‡ ======
+
+นี่เป็นà¸à¸²à¸£à¹à¸ªà¸”งความà¹à¸•à¸à¸•à¹ˆà¸²à¸‡à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¹€à¸žà¸ˆà¸ªà¸­à¸‡à¸£à¸¸à¹ˆà¸™ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt
new file mode 100644
index 000000000..37b1841a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt
@@ -0,0 +1,5 @@
+====== พบไฟล์ฉบับร่าง ======
+
+เซสชั่นที่คุณà¹à¸à¹‰à¹„ขฉบับล่าสุดในเพจนี้ไม่ถูà¸à¸ˆà¸±à¸”เà¸à¹‡à¸šà¹ƒà¸«à¹‰à¸ªà¸¡à¸šà¸¹à¸£à¸“์ โดà¸à¸¸à¸§à¸´à¸à¸´à¹„ด้ทำà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸‰à¸šà¸±à¸šà¸£à¹ˆà¸²à¸‡à¹ƒà¸«à¹‰à¹‚ดยอัตโนมัติในระหว่างที่คุณà¸à¸³à¸¥à¸±à¸‡à¸—ำงาน อันซึ่งขณะนี้คุณอาจต้องà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸¡à¸±à¸™à¹€à¸žà¸·à¹ˆà¸­à¹à¸à¹‰à¹„ขต่อ ด้านล่างนี้คุณจะเห็นข้อมูลที่ถูà¸à¸šà¸±à¸™à¸—ึà¸à¹„ว้จาà¸à¸à¸²à¸£à¸—ำงานครั้งล่าสุด
+
+à¸à¸£à¸¸à¸“าตัดสินใจว่าคุณต้องà¸à¸²à¸£à¸—ี่จะ //à¸à¸¹à¹‰à¸„ืน//งานฉบับที่à¹à¸à¹‰à¹„ขล่าสุด, //ลบทิ้ง/// ตัวฉบับร่างที่ได้บันทึà¸à¸­à¸±à¸•à¹‚นมัติไว้, //ยà¸à¹€à¸¥à¸´à¸// à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£à¹à¸à¹‰à¹„ขนี้ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt
new file mode 100644
index 000000000..81dc0000b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt
@@ -0,0 +1 @@
+à¹à¸à¹‰à¹„ขหน้านี้à¹à¸¥à¹‰à¸§à¸à¸” "บันทึà¸" ให้อ่าน[[wiki:syntax|ไวยà¸à¸£à¸“์วิà¸à¸´]] สำหรับค้นหาไวยà¸à¸£à¸“์ที่ใช้ในวิà¸à¸´ à¹à¸¥à¸°à¸à¸£à¸¸à¸“าà¹à¸à¹‰à¹„ขเฉพาะเพจที่คุณสามารถ**ปรับปรุง**ให้มันดีขึ้นได้, ถ้าหาà¸à¸„ุณต้องà¸à¸²à¸£à¸—ี่จะทดสอบอะไรบางอย่าง ให้ไปลองเล่นครั้งà¹à¸£à¸à¹„ด้ใน[[playground:playground|สนามเด็à¸à¹€à¸¥à¹ˆà¸™]] \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt
new file mode 100644
index 000000000..28e6760d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt
@@ -0,0 +1,2 @@
+**คุณได้โหลดเอาเอà¸à¸ªà¸²à¸£à¸‰à¸šà¸±à¸šà¹€à¸à¹ˆà¸²à¸‚ึ้นมา!** ถ้าคุณบันทึà¸à¸¡à¸±à¸™ คุณจะสร้างเอà¸à¸ªà¸²à¸£à¸£à¸¸à¹ˆà¸™à¹ƒà¸«à¸¡à¹ˆà¸”้วยข้อมูลเหล่านี้
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt
new file mode 100644
index 000000000..eb32a64c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt
@@ -0,0 +1,2 @@
+====== ดัชนี ======
+นี่คือดัชนีรวมทุà¸à¹€à¸žà¸ˆ เรียงตาม[[doku>namespaces|เนมสเปซ]] \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php
new file mode 100644
index 000000000..e7937ecbc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php
@@ -0,0 +1,249 @@
+<?php
+/**
+ * th language file
+ *
+ * This file was initially built by fetching translations from other
+ * Wiki projects. See the @url lines below. Additional translations
+ * and fixes where done for DokuWiki by the people mentioned in the
+ * lines starting with @author
+ *
+ * @url http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/languages/messages/MessagesTh.php?view=co
+ * @author Komgrit Niyomrath <n.komgrit@gmail.com>
+ * @author Kittithat Arnontavilas mrtomyum@gmail.com
+ * @author Arthit Suriyawongkul <arthit@gmail.com>
+ * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
+ * @author Thanasak Sompaisansin <jombthep@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“ ';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'à¹à¸à¹‰à¹„ขหน้านี้';
+$lang['btn_source'] = 'ดูโค้ด';
+$lang['btn_show'] = 'à¹à¸ªà¸”งเพจ';
+$lang['btn_create'] = 'สร้างเพจนี้';
+$lang['btn_search'] = 'ค้นหา';
+$lang['btn_save'] = 'บันทึà¸';
+$lang['btn_preview'] = 'à¹à¸ªà¸”งตัวอย่าง';
+$lang['btn_top'] = 'à¸à¸¥à¸±à¸šà¸ªà¸¹à¹ˆà¸”้านบน';
+$lang['btn_newer'] = '<< ใหม่à¸à¸§à¹ˆà¸²';
+$lang['btn_older'] = 'เà¸à¹ˆà¸²à¸à¸§à¹ˆà¸² >>';
+$lang['btn_revs'] = 'ฉบับเà¸à¹ˆà¸²à¹†';
+$lang['btn_recent'] = 'ปรับปรุงล่าสุด';
+$lang['btn_upload'] = 'ส่งข้อมูลเข้าสู่ระบบ';
+$lang['btn_cancel'] = 'ยà¸à¹€à¸¥à¸´à¸';
+$lang['btn_index'] = 'ดัชนี';
+$lang['btn_secedit'] = 'à¹à¸à¹‰à¹„ข';
+$lang['btn_login'] = 'ล็อà¸à¸­à¸´à¸™';
+$lang['btn_logout'] = 'ล็อà¸à¹€à¸­à¸²à¸•à¹Œ';
+$lang['btn_admin'] = 'ผู้ควบคุมระบบ';
+$lang['btn_update'] = 'ปรับปรุง';
+$lang['btn_delete'] = 'ลบ';
+$lang['btn_back'] = 'ย้อนà¸à¸¥à¸±à¸š';
+$lang['btn_backlink'] = 'หน้าที่ลิงà¸à¹Œà¸¡à¸²';
+$lang['btn_backtomedia'] = 'à¸à¸¥à¸±à¸šà¹„ปยังหน้าเลือà¸à¹„ฟล์สื่อ';
+$lang['btn_subscribe'] = 'เà¸à¹‰à¸²à¸”ู';
+$lang['btn_unsubscribe'] = 'เลิà¸à¹€à¸à¹‰à¸²à¸”ู';
+$lang['btn_subscribens'] = 'สมัครเพื่อตามà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹€à¸™à¸¡à¸ªà¹€à¸›à¸‹';
+$lang['btn_unsubscribens'] = 'ยà¸à¹€à¸¥à¸´à¸à¸ªà¸¡à¸±à¸„รเพื่อตามà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹€à¸™à¸¡à¸ªà¹€à¸›à¸‹';
+$lang['btn_profile'] = 'à¹à¸à¹‰à¸‚้อมูลผู้ใช้';
+$lang['btn_reset'] = 'เริ่มใหม่';
+$lang['btn_resendpwd'] = 'ลืมรหัส ส่งให้ใหม่ทางอีเมล';
+$lang['btn_draft'] = 'à¹à¸à¹‰à¹„ขเอà¸à¸ªà¸²à¸£à¸‰à¸šà¸±à¸šà¸£à¹ˆà¸²à¸‡';
+$lang['btn_recover'] = 'à¸à¸¹à¹‰à¸„ืนเอà¸à¸ªà¸²à¸£à¸‰à¸šà¸±à¸šà¸£à¹ˆà¸²à¸‡';
+$lang['btn_draftdel'] = 'ลบเอà¸à¸ªà¸²à¸£à¸‰à¸šà¸±à¸šà¸£à¹ˆà¸²à¸‡';
+$lang['btn_revert'] = 'à¸à¸¹à¹‰à¸„ืน';
+$lang['loggedinas'] = 'ลงชื่อเข้าใช้เป็น';
+$lang['user'] = 'ชื่อผู้ใช้:';
+$lang['pass'] = 'รหัสผ่าน';
+$lang['newpass'] = 'รหัสผ่านใหม่';
+$lang['oldpass'] = 'รหัสผ่านเดิม:';
+$lang['passchk'] = 'พิมพ์รหัสผ่านอีà¸à¸„รั้ง:';
+$lang['remember'] = 'จำชื่อà¹à¸¥à¸°à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™';
+$lang['fullname'] = 'ชื่อจริง:';
+$lang['email'] = 'อีเมล:';
+$lang['register'] = 'สร้างบัà¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰';
+$lang['profile'] = 'ข้อมูลส่วนตัวผู้ใช้';
+$lang['badlogin'] = 'ขัดข้อง:';
+$lang['minoredit'] = 'เป็นà¸à¸²à¸£à¹à¸à¹‰à¹„ขเล็à¸à¸™à¹‰à¸­à¸¢';
+$lang['draftdate'] = 'บันทึà¸à¸‰à¸šà¸±à¸šà¸£à¹ˆà¸²à¸‡à¹€à¸¡à¸·à¹ˆà¸­';
+$lang['nosecedit'] = 'ในช่วงเวลาที่ผ่านมานี้เพจถูà¸à¹à¸à¹‰à¹„ขไปà¹à¸¥à¹‰à¸§, เนื้อหาในเซคชั่นนี้ไม่ทันสมัย à¸à¸£à¸¸à¸“าโหลดเพจใหม่ทั้งหน้าà¹à¸—น';
+$lang['regmissing'] = 'ขออภัย คุณต้องà¸à¸£à¸­à¸à¹ƒà¸«à¹‰à¸„รบทุà¸à¸Šà¹ˆà¸­à¸‡';
+$lang['reguexists'] = 'ชื่อบัà¸à¸Šà¸µà¸—ี่ใส่นั้นมีผู้อื่นได้ใช้à¹à¸¥à¹‰à¸§ à¸à¸£à¸¸à¸“าเลือà¸à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸­à¸·à¹ˆà¸™';
+$lang['regsuccess'] = 'ผู้ใช้ถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¹à¸¥à¹‰à¸§ à¹à¸¥à¸°à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹„ด้ถูà¸à¸ªà¹ˆà¸‡à¹„ปทางอีเมลà¹à¸¥à¹‰à¸§';
+$lang['regsuccess2'] = 'ชื่อบัà¸à¸Šà¸µà¹„ด้ถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้น';
+$lang['regmailfail'] = 'ดูเหมือนจะมีข้อผิดพลาดในà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸—างเมล์ à¸à¸£à¸¸à¸“าติดต่อผู้ดูà¹à¸¥à¸£à¸°à¸šà¸š';
+$lang['regbadmail'] = 'รูปà¹à¸šà¸šà¸­à¸µà¹€à¸¡à¸¥à¹„ม่ถูà¸à¸•à¹‰à¸­à¸‡ ให้ใส่อีเมลให้ถูà¸à¸•à¹‰à¸­à¸‡à¸•à¸²à¸¡à¸£à¸¹à¸›à¹à¸šà¸šà¸­à¸µà¹€à¸¡à¸¥ หรือให้ทำช่องอีเมลให้ว่างà¹à¸—น';
+$lang['regbadpass'] = 'รหัสผ่านที่ใส่ไม่ถูà¸à¸•à¹‰à¸­à¸‡';
+$lang['regpwmail'] = 'รหัสผ่านเข้าโดà¸à¸¸à¸§à¸´à¸à¸´à¸‚องคุณ';
+$lang['reghere'] = 'คุณยังไม่มีบัà¸à¸Šà¸µà¸«à¸£à¸·à¸­ à¸à¹‡à¹à¸„่สร้างขึ้นมาสัà¸à¸­à¸±à¸™à¸«à¸™à¸¶à¹ˆà¸‡';
+$lang['profna'] = 'วิà¸à¸´à¸™à¸µà¹‰à¹„ม่รองรับà¸à¸²à¸£à¹à¸à¹‰à¹„ขข้อมูลส่วนตัว';
+$lang['profnochange'] = 'ไม่มีà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸‚้อมูลส่วนตัว';
+$lang['profnoempty'] = 'ไม่อนุà¸à¸²à¸•à¸´à¹ƒà¸«à¹‰à¹€à¸§à¹‰à¸™à¸§à¹ˆà¸²à¸‡à¸Šà¸·à¹ˆà¸­ หรืออีเมล';
+$lang['profchanged'] = 'ปรับปรุงข้อมูลส่วนตัวผู้ใช้สำเร็จ';
+$lang['pwdforget'] = 'ลืมรหัสผ่านหรือ? เอาอันใหม่สิ';
+$lang['resendna'] = 'วิà¸à¸´à¸™à¸µà¹‰à¹„ม่รองรับà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸‹à¹‰à¸³';
+$lang['resendpwd'] = 'ส่งรหัสผ่านใหม่ให้à¸à¸±à¸š';
+$lang['resendpwdmissing'] = 'ขออภัย, คุณต้องà¸à¸£à¸­à¸à¸—ุà¸à¸Šà¹ˆà¸­à¸‡';
+$lang['resendpwdnouser'] = 'ขออภัย, เราไม่พบผู้ใช้คนนี้ในà¸à¸²à¸™à¸‚้อมูลของเรา';
+$lang['resendpwdbadauth'] = 'ขออภัย, รหัสนี้ยังใช้ไม่ได้ à¸à¸£à¸¸à¸“าตรวจสอบว่าคุณà¸à¸”ลิ้งค์ยืนยันà¹à¸¥à¹‰à¸§';
+$lang['resendpwdconfirm'] = 'อีเมลยืนยันได้ถูà¸à¸ªà¹ˆà¸‡à¹„ปที่อีเมลที่ได้ถูà¸à¹€à¸ªà¸™à¸­ à¸à¹ˆà¸­à¸™à¸—ี่อีเมลจะถูà¸à¸ªà¹ˆà¸‡à¹„ปที่ชื่อบัà¸à¸Šà¸µà¸™à¸±à¹‰à¸™ คุณต้องปà¸à¸´à¸šà¸±à¸•à¸´à¸•à¸²à¸¡à¸„ำà¹à¸™à¸°à¸™à¸³à¹ƒà¸™à¸­à¸µà¹€à¸¡à¸¥à¹€à¸žà¸·à¹ˆà¸­à¸¢à¸·à¸™à¸¢à¸±à¸™à¸§à¹ˆà¸²à¸«à¸¡à¸²à¸¢à¹€à¸¥à¸¢à¸šà¸±à¸à¸Šà¸µà¸™à¸±à¹‰à¸™à¹€à¸›à¹‡à¸™à¸‚องคุณ';
+$lang['resendpwdsuccess'] = 'รหัสผ่านใหม่ของคุณได้ถูà¸à¸ªà¹ˆà¸‡à¹ƒà¸«à¹‰à¹à¸¥à¹‰à¸§à¸—างอีเมล';
+$lang['license'] = 'เว้นà¹à¸•à¹ˆà¸ˆà¸°à¹„ด้à¹à¸ˆà¹‰à¸‡à¹„ว้เป็นอื่นใด เนื้อหาบนวิà¸à¸´à¸™à¸µà¹‰à¸–ูà¸à¸à¸³à¸«à¸™à¸”สิทธิ์ไว้ภายใต้สัà¸à¸à¸²à¸­à¸™à¸¸à¸à¸²à¸•à¸´à¸•à¹ˆà¸­à¹„ปนี้:';
+$lang['licenseok'] = 'โปรดทราบ: เมื่อเริ่มà¹à¸à¹‰à¹„ขหน้านี้ ถือว่าคุณตà¸à¸¥à¸‡à¹ƒà¸«à¹‰à¸ªà¸´à¸—ธิ์à¸à¸±à¸šà¹€à¸™à¸·à¹‰à¸­à¸«à¸²à¸‚องคุณอยู่ภายใต้สัà¸à¸à¸²à¸­à¸™à¸¸à¸à¸²à¸•à¸´à¸™à¸µà¹‰';
+$lang['searchmedia'] = 'สืบค้นไฟล์ชื่อ:';
+$lang['searchmedia_in'] = 'สืบค้นใน %s';
+$lang['txt_upload'] = 'เลือà¸à¹„ฟล์ที่จะอัพโหลด';
+$lang['txt_filename'] = 'อัพโหลดเป็น(ตัวเลือà¸)';
+$lang['txt_overwrt'] = 'เขียนทับไฟล์ที่มีอยู่à¹à¸¥à¹‰à¸§';
+$lang['lockedby'] = 'ตอนนี้ถูà¸à¸¥à¹Šà¸­à¸„โดย';
+$lang['lockexpire'] = 'à¸à¸²à¸£à¸¥à¹Šà¸­à¸„จะหมดอายุเมื่อ';
+$lang['willexpire'] = 'à¸à¸²à¸£à¸¥à¹Šà¸­à¸„เพื่อà¹à¸à¹‰à¹„ขหน้านี้à¸à¸³à¸¥à¸±à¸‡à¸ˆà¸°à¸«à¸¡à¸”เวลาในอีภ\n นาที เพื่อที่จะหลีà¸à¹€à¸¥à¸µà¹ˆà¸¢à¸‡à¸‚้อขัดà¹à¸¢à¹‰à¸‡à¹ƒà¸«à¹‰à¹ƒà¸Šà¹‰à¸›à¸¸à¹ˆà¸¡ "Preview" เพื่อรีเซ็ทเวลาใหม่';
+$lang['notsavedyet'] = 'à¸à¸²à¸£à¹à¸à¹‰à¹„ขที่ไม่ได้บันทึà¸à¸ˆà¸°à¸ªà¸¹à¸à¸«à¸²à¸¢ \n ต้องà¸à¸²à¸£à¸—ำต่อจริงๆหรือ?';
+$lang['rssfailed'] = 'มีข้อผิดพลาดขณะดูดฟีดนี้';
+$lang['nothingfound'] = 'ไม่พบสิ่งใด';
+$lang['mediaselect'] = 'ไฟล์สื่อ';
+$lang['fileupload'] = 'อัปโหลด';
+$lang['uploadsucc'] = 'อัปโหลดสำเร็จ';
+$lang['uploadfail'] = 'เà¸à¸´à¸”ความขัดข้องในà¸à¸²à¸£à¸­à¸±à¸›à¹‚หลด';
+$lang['uploadwrong'] = 'à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸›à¸à¸´à¹€à¸ªà¸˜ ส่วนขยายไฟล์นี้ต้องห้าม!';
+$lang['uploadexist'] = 'ไฟล์นี้มีอยู่à¹à¸¥à¹‰à¸§ ไม่มีà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¹ƒà¸”ๆเà¸à¸´à¸”ขึ้น';
+$lang['uploadbadcontent'] = 'เนื้อหาที่อัพโหลดไม่ตรงà¸à¸±à¸šà¸ªà¹ˆà¸§à¸™à¸‚ยายไฟล์ %s ';
+$lang['uploadspam'] = 'à¸à¸²à¸£à¸­à¸±à¸žà¹‚หลดถูà¸à¸à¸µà¸”à¸à¸±à¸™à¸ˆà¸²à¸à¸šà¸±à¸à¸Šà¸µà¸”ำสà¹à¸›à¸¡';
+$lang['uploadxss'] = 'ไฟล์นี้มีส่วนประà¸à¸­à¸šà¸‚องโค้ดเอชทีเอ็มà¹à¸­à¸¥à¸«à¸£à¸·à¸­à¸ªà¸„ริปต์ ซึ่งอาจà¸à¹ˆà¸­à¹ƒà¸«à¹‰à¹€à¸à¸´à¸”ความผิดพลาดในà¸à¸²à¸£à¹à¸ªà¸”งผลของเว็บเบราว์เซอร์';
+$lang['uploadsize'] = 'ไฟล์ที่อัพโหลดใหà¸à¹ˆà¹€à¸à¸´à¸™à¹„ป (สูงสุด %s)';
+$lang['deletesucc'] = 'ไฟล์ "%s" ถูà¸à¸¥à¸š';
+$lang['deletefail'] = '"%s" ไม่สามารถลบได้ - ให้ตรวจสอบสิทธิ์à¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‚องคุณ';
+$lang['mediainuse'] = 'ไฟล์ "%s" ไม่ได้ถูà¸à¸¥à¸š - มันถูà¸à¹ƒà¸Šà¹‰à¸­à¸¢à¸¹à¹ˆ';
+$lang['namespaces'] = 'เนมสเปซ';
+$lang['mediafiles'] = 'มีไฟล์พร้อมใช้อยู่ใน';
+$lang['js']['searchmedia'] = 'ค้นหาไฟล์';
+$lang['js']['keepopen'] = 'เปิดหน้าต่างไว้ระหว่างที่เลือà¸';
+$lang['js']['hidedetails'] = 'ซ่อนรายละเอียด';
+$lang['js']['nosmblinks'] = 'เชื่อมไปยังหน้าต่างà¹à¸šà¹ˆà¸‡à¸›à¸±à¸™ ทำงานได้à¸à¸±à¸šà¹€à¸‰à¸žà¸²à¸°à¹„มโครซอฟท์อินเตอร์เน็ตเอ็à¸à¸‹à¹‚ปรเรอร์(IE) คุณยังคงสามารถคัดลอà¸à¹à¸¥à¸°à¹à¸›à¸°à¸¥à¸´à¹‰à¸‡à¸„์ได้';
+$lang['js']['linkwiz'] = 'ลิงค์วิเศษ';
+$lang['js']['linkto'] = 'ลิงค์ไป:';
+$lang['js']['del_confirm'] = 'ต้องà¸à¸²à¸£à¸¥à¸šà¸£à¸²à¸¢à¸à¸²à¸£à¸—ี่เลือà¸à¸ˆà¸£à¸´à¸‡à¹†à¸«à¸£à¸·à¸­?';
+$lang['js']['mu_btn'] = 'อัพโหลดหลายๆไฟล์ในครั้งเดียว';
+$lang['mediausage'] = 'ให้ใช้ไวยà¸à¸£à¸“์ต่อไปนี้เพื่ออ้างอิงไฟล์นี้';
+$lang['mediaview'] = 'ดูไฟล์ต้นฉบับ';
+$lang['mediaroot'] = 'ราà¸(รูท)';
+$lang['mediaupload'] = 'อัพโหลดไฟล์ไปยังเนมสเปซปัจจุบันจาà¸à¸—ี่นี่ หาà¸à¸ˆà¸°à¸ªà¸£à¹‰à¸²à¸‡à¹€à¸™à¸¡à¸ªà¹€à¸›à¸‹à¸¢à¹ˆà¸­à¸¢ ให้พิมพ์ต่อข้อความของคุณหลังชื่อไฟล์ในช่อง "อัพโหลดเป็น" โดยให้คั่นด้วยโคล่อน(:)';
+$lang['mediaextchange'] = 'ส่วนขยายไฟล์ถูà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸ˆà¸²à¸ .%s ไปเป็น .%s!';
+$lang['reference'] = 'อ้างอิงสำหรับ';
+$lang['ref_inuse'] = 'ไม่สามารถลบไฟล์ได้ เพราะมันยังคงถูà¸à¹ƒà¸Šà¹‰à¹‚ดยเพจดังต่อไปนี้:';
+$lang['ref_hidden'] = 'มีà¸à¸²à¸£à¸­à¹‰à¸²à¸‡à¸­à¸´à¸‡à¸šà¸²à¸‡à¸£à¸²à¸¢à¸à¸²à¸£à¹ƒà¸™à¹€à¸žà¸ˆ คุณไม่มีสิทธิ์ในà¸à¸²à¸£à¸­à¹ˆà¸²à¸™';
+$lang['hits'] = 'คำที่ตรงà¸à¸±à¸™';
+$lang['quickhits'] = 'ชื่อเพจที่ตรงà¸à¸±à¸™';
+$lang['toc'] = 'สารบัà¸';
+$lang['current'] = 'ฉบับปัจจุบัน';
+$lang['yours'] = 'ฉบับของคุณ';
+$lang['diff'] = 'à¹à¸ªà¸”งจุดà¹à¸•à¸à¸•à¹ˆà¸²à¸‡à¸à¸±à¸šà¸‰à¸šà¸±à¸šà¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™';
+$lang['diff2'] = 'à¹à¸ªà¸”งจุดà¹à¸•à¸à¸•à¹ˆà¸²à¸‡à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸‰à¸šà¸±à¸šà¸—ี่เลือà¸à¹„ว้';
+$lang['line'] = 'บรรทัด';
+$lang['breadcrumb'] = 'ตามรอย';
+$lang['youarehere'] = 'คุณอยู่ที่นี่';
+$lang['lastmod'] = 'à¹à¸à¹‰à¹„ขครั้งล่าสุด';
+$lang['by'] = 'โดย';
+$lang['deleted'] = 'ถูà¸à¸–อดออà¸';
+$lang['created'] = 'ถูà¸à¸ªà¸£à¹‰à¸²à¸‡';
+$lang['restored'] = 'ย้อนไปรุ่นà¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²';
+$lang['external_edit'] = 'à¹à¸à¹‰à¹„ขภายนอà¸';
+$lang['summary'] = 'สรุป(หมายเหตุ)à¸à¸²à¸£à¹à¸à¹‰à¹„ขนี้';
+$lang['noflash'] = 'ต้องà¸à¸²à¸£à¸•à¸±à¸§à¹€à¸¥à¹ˆà¸™à¹à¸Ÿà¸¥à¸Š <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> เพื่อà¹à¸ªà¸”งผลเนื้อหานี้';
+$lang['download'] = 'ดาวน์โหลดสนิปเป็ด(Snippet)';
+$lang['mail_newpage'] = 'เพิ่มเพจà¹à¸¥à¹‰à¸§:';
+$lang['mail_changed'] = 'à¹à¸à¹‰à¹„ขเพจà¹à¸¥à¹‰à¸§:';
+$lang['mail_new_user'] = 'ผู้ใช้คนใหม่:';
+$lang['mail_upload'] = 'ไฟล์อัพโหลดà¹à¸¥à¹‰à¸§:';
+$lang['qb_bold'] = 'ทำตัวหนา';
+$lang['qb_italic'] = 'ทำตัวเอียง';
+$lang['qb_underl'] = 'ขีดเส้นใต้ข้อความ';
+$lang['qb_code'] = 'ข้อความเป็นโค้ดโปรà¹à¸à¸£à¸¡';
+$lang['qb_strike'] = 'ขีดฆ่าข้อความ';
+$lang['qb_h1'] = 'หัวเรื่องระดับที่ 1';
+$lang['qb_h2'] = 'หัวเรื่องระดับที่ 2';
+$lang['qb_h3'] = 'หัวเรื่องระดับที่ 3';
+$lang['qb_h4'] = 'หัวเรื่องระดับที่ 4';
+$lang['qb_h5'] = 'หัวเรื่องระดับที่ 5';
+$lang['qb_h'] = 'หัวเรื่อง';
+$lang['qb_hs'] = 'เลือà¸à¸«à¸±à¸§à¹€à¸£à¸·à¹ˆà¸­à¸‡';
+$lang['qb_hplus'] = 'หัวเรื่องที่สูงà¸à¸§à¹ˆà¸²';
+$lang['qb_hminus'] = 'หัวเรื่องที่ต่ำà¸à¸§à¹ˆà¸²';
+$lang['qb_hequal'] = 'หัวเรื่องระดับเดียวà¸à¸±à¸™';
+$lang['qb_link'] = 'ลิงà¸à¹Œà¸ à¸²à¸¢à¹ƒà¸™à¹€à¸§à¹‡à¸š';
+$lang['qb_extlink'] = 'ลิงà¸à¹Œà¹„ปที่อื่น (อย่าลืม http:// นำหน้าเสมอ)';
+$lang['qb_hr'] = 'เส้นนอน';
+$lang['qb_ol'] = 'รายà¸à¸²à¸£à¸—ี่เรียงลำดับà¹à¸¥à¹‰à¸§';
+$lang['qb_ul'] = 'รายà¸à¸²à¸£à¸—ี่ยังไม่ได้เรียงลำดับ';
+$lang['qb_media'] = 'เพิ่มภาพà¹à¸¥à¸°à¹„ฟล์อื่นๆ';
+$lang['qb_sig'] = 'ลายเซ็นพร้อมลงเวลา';
+$lang['qb_smileys'] = 'ภาพà¹à¸ªà¸”งอารมณ์';
+$lang['qb_chars'] = 'อัà¸à¸‚ระพิเศษ';
+$lang['upperns'] = 'à¸à¸£à¸°à¹‚ดดขึ้นไปยังเนมสเปซà¹à¸¡à¹ˆ';
+$lang['admin_register'] = 'สร้างบัà¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰';
+$lang['metaedit'] = 'à¹à¸à¹‰à¹„ขข้อมูลเมต้า';
+$lang['metasaveerr'] = 'มีข้อผิดพลาดในà¸à¸²à¸£à¹€à¸‚ียนข้อมูลเมต้า';
+$lang['metasaveok'] = 'บันทึà¸à¹€à¸¡à¸•à¹‰à¸²à¸”าต้าà¹à¸¥à¹‰à¸§';
+$lang['img_backto'] = 'à¸à¸¥à¸±à¸šà¹„ปยัง';
+$lang['img_title'] = 'ชื่อภาพ';
+$lang['img_caption'] = 'คำบรรยายภาพ';
+$lang['img_date'] = 'วันที่';
+$lang['img_fname'] = 'ชื่อไฟล์';
+$lang['img_fsize'] = 'ขนาดภาพ';
+$lang['img_artist'] = 'ผู้สร้างสรรค์';
+$lang['img_copyr'] = 'ผู้ถือลิขสิทธิ์';
+$lang['img_format'] = 'รูปà¹à¸šà¸š';
+$lang['img_camera'] = 'à¸à¸¥à¹‰à¸­à¸‡';
+$lang['img_keywords'] = 'คำหลัà¸';
+$lang['subscribe_success'] = 'เพิ่ม %s เข้าไปในรายชื่อสมาชิà¸à¸¥à¸‡à¸—ะเบียนสำหรับ %s';
+$lang['subscribe_error'] = 'มีข้อผิดพลาดในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡ %s ในรายชื่อสมัครสมาชิà¸à¸ªà¸³à¸«à¸£à¸±à¸š %s';
+$lang['subscribe_noaddress'] = 'ไม่มีที่อยู่ที่ตรงà¸à¸±à¸šà¸Šà¸·à¹ˆà¸­à¸¥à¹‡à¸­à¸à¸­à¸´à¸™à¸‚องคุณ ชื่อคุณไม่สามารถถูà¸à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸‚้าไปในรายชื่อสมัครสมาชิà¸';
+$lang['unsubscribe_success'] = 'ถอด % ออà¸à¸ˆà¸²à¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¸ªà¸¡à¸±à¸„รสมาชิà¸à¸‚อง %s';
+$lang['unsubscribe_error'] = 'มีข้อผิดพลาดในà¸à¸²à¸£à¸–อด %s ออà¸à¸ˆà¸²à¸à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¸ªà¸¡à¸²à¸Šà¸´à¸à¸‚อง %s';
+$lang['authmodfailed'] = 'มีà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าสิทธิ์ผู้ใช้ไว้ไม่ดี à¸à¸£à¸¸à¸“าà¹à¸ˆà¹‰à¸‡à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸šà¸§à¸´à¸à¸´à¸‚องคุณ';
+$lang['authtempfail'] = 'ระบบตรวจสอบสิทธิ์ผู้ใช้ไม่พร้อมใช้งานชั่วคราว หาà¸à¸ªà¸–านà¸à¸²à¸£à¸“์ยังไม่เปลี่ยนà¹à¸›à¸¥à¸‡ à¸à¸£à¸¸à¸“าà¹à¸ˆà¹‰à¸‡à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¸£à¸°à¸šà¸§à¸´à¸à¸´à¸‚องคุณ';
+$lang['i_chooselang'] = 'เลือà¸à¸ à¸²à¸©à¸²à¸‚องคุณ';
+$lang['i_installer'] = 'ตัวติดตั้งโดà¸à¸¸à¸§à¸´à¸à¸´';
+$lang['i_wikiname'] = 'ชื่อวิà¸à¸´';
+$lang['i_enableacl'] = 'เปิดระบบ ACL(à¹à¸™à¸°à¸™à¸³)';
+$lang['i_superuser'] = 'ซุปเปอร์ยูสเซอร์';
+$lang['i_problems'] = 'ตัวติดตั้งพบปัà¸à¸«à¸²à¸šà¸²à¸‡à¸›à¸£à¸°à¸à¸²à¸£ ตามที่ระบุด้านล่าง คุณไม่สามารถทำต่อได้จนà¸à¸§à¹ˆà¸²à¸ˆà¸°à¹„ด้à¹à¸à¹‰à¹„ขสิ่งเหล่านั้น';
+$lang['i_modified'] = 'ด้วยเหตุผลด้านความปลอดภัย สคริปต์นี้จะทำงานà¸à¸±à¸šà¹€à¸‰à¸žà¸²à¸°à¹‚ดà¸à¸¸à¸§à¸´à¸à¸´à¸—ี่ติดตั้งใหม่หรือยังไม่ได้ดัดà¹à¸›à¸¥à¸‡à¹à¸à¹‰à¹„ข
+คุณควรเลือà¸à¸£à¸°à¸«à¸§à¹ˆà¸²à¸‡à¸„ลี่ไฟล์จาà¸à¹à¸žà¸„เà¸à¸ˆà¸—ี่ได้ดาวน์โหลดมาอีà¸à¸„รั้ง หรือศึà¸à¸©à¸²à¸ˆà¸²à¸à¸„ู่มือ
+<a href="http://dokuwiki.org/install">Dokuwiki installation instructions</a>';
+$lang['i_funcna'] = 'PHP function <code>%s</code> ไม่สามารถใช้งานได้ อาจเป็นเพราะผู้ให้บริà¸à¸²à¸£à¹‚ฮสไม่เปิดให้ใช้งาน';
+$lang['i_phpver'] = 'PHP รุ่นที่คุณà¸à¸³à¸¥à¸±à¸‡à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸­à¸¢à¸¹à¹ˆà¸„ือ <code>%s</code> คุณจำเป็นต้องอัพเà¸à¸£à¸” PHP ให้เป็นรุ่น <code>%s</code> หรือสูงà¸à¸§à¹ˆà¸²';
+$lang['i_permfail'] = '<code>%s</code> DokuWiki ไม่สามารถเขียนข้อมูลได้ ต้องตั้งค่าสิทธิ์à¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸•à¸‚องไดเรคทอรีนี้เสียà¸à¹ˆà¸­à¸™!';
+$lang['i_confexists'] = '<code>%s</code> ถูà¸à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹„ปà¹à¸¥à¹‰à¸§';
+$lang['i_writeerr'] = 'ไม่สามารถสร้าง <code>%s</code>. ตรวจสอบสิทธิ์à¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸•à¸‚องไดเรคทอรีหรือไฟล์ à¹à¸¥à¹‰à¸§à¸ªà¸£à¹‰à¸²à¸‡à¹„ฟล์ด้วยตนเอง';
+$lang['i_policy'] = 'นโยบายสิทธิ์เข้าถึง(ACL)ตั้งต้น';
+$lang['i_pol0'] = 'วิà¸à¸´à¹€à¸›à¸´à¸”à¸à¸§à¹‰à¸²à¸‡ (ใครà¸à¹‡ อ่าน, เขียน, อัพโหลดได้)';
+$lang['i_pol1'] = 'วิà¸à¸´à¸ªà¸²à¸˜à¸²à¸£à¸“ะ (ทุà¸à¸„นอ่านได้, เขียน à¹à¸¥à¸° อัพโหลดเฉพาะผู้ใช้ที่ลงทะเบียนà¹à¸¥à¹‰à¸§)';
+$lang['i_pol2'] = 'วิà¸à¸´à¸ à¸²à¸¢à¹ƒà¸™ (อ่าน, เขียน, อัพโหลด สำหรับผู้ใช้ที่ลงทะเบียนà¹à¸¥à¹‰à¸§à¹€à¸—่านั้น)';
+$lang['i_retry'] = 'ลองใหม่';
+$lang['mu_intro'] = 'ที่นี่คุณสามารถอัพโหลดหลายๆไฟล์ได้พร้อมๆà¸à¸±à¸™ คลิ๊à¸à¸›à¸¸à¹ˆà¸¡à¸šà¸£à¸²à¸§à¸‹à¹Œà¹€à¸žà¸·à¹ˆà¸­à¹€à¸žà¸´à¹ˆà¸¡à¸¡à¸±à¸™à¹€à¸‚้าไปในคิว à¸à¸”ปุ่มอัพโหลดเมื่อเสร็จà¹à¸¥à¹‰à¸§';
+$lang['mu_gridname'] = 'ชื่อไฟล์';
+$lang['mu_gridsize'] = 'ขนาด';
+$lang['mu_gridstat'] = 'สถานะ';
+$lang['mu_namespace'] = 'เนมสเปซ';
+$lang['mu_browse'] = 'เรียà¸à¸”ู';
+$lang['mu_toobig'] = 'ใหà¸à¹ˆà¹„ป';
+$lang['mu_ready'] = 'พร้อมอัปโหลด';
+$lang['mu_done'] = 'เสร็จสิ้น';
+$lang['mu_fail'] = 'ล้มเหลว';
+$lang['mu_authfail'] = 'วาระหมดอายุ';
+$lang['mu_progress'] = '@PCT@% อัปโหลดà¹à¸¥à¹‰à¸§';
+$lang['mu_filetypes'] = 'ชนิดà¹à¸Ÿà¹‰à¸¡à¸—ี่อนุà¸à¸²à¸•';
+$lang['mu_info'] = 'à¹à¸Ÿà¹‰à¸¡à¸­à¸±à¸›à¹‚หลดà¹à¸¥à¹‰à¸§';
+$lang['mu_lasterr'] = 'ผิดพลาดล่าสุด:';
+$lang['years'] = '%d ปีà¸à¹ˆà¸­à¸™';
+$lang['months'] = '%d เดือนà¸à¹ˆà¸­à¸™';
+$lang['weeks'] = '%d สัปดาห์à¸à¹ˆà¸­à¸™';
+$lang['days'] = '%d วันà¸à¹ˆà¸­à¸™';
+$lang['hours'] = '%d ชั่วโมงà¸à¹ˆà¸­à¸™';
+$lang['minutes'] = '%d นาทีà¸à¹ˆà¸­à¸™';
+$lang['seconds'] = '%d วินาทีà¸à¹ˆà¸­à¸™';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt
new file mode 100644
index 000000000..a198ad717
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt
@@ -0,0 +1,3 @@
+====== เพจถูà¸à¸¥à¹Šà¸­à¸„ ======
+
+เพจนี้à¸à¸³à¸¥à¸±à¸‡à¸–ูà¸à¸¥à¹Šà¸­à¸„จาà¸à¸à¸²à¸£à¹à¸à¹‰à¹„ขโดยผู้ใช้ท่านอื่น คุณต้องรอจนà¸à¸§à¹ˆà¸²à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸„นนี้จะà¹à¸à¹‰à¹„ขเสร็จ หรือà¸à¸²à¸£à¸¥à¹Šà¸­à¸„นั้นหมดเวลา \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt
new file mode 100644
index 000000000..d384c2d27
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt
@@ -0,0 +1,4 @@
+====== ล็อà¸à¸­à¸´à¸™ ======
+
+คุณยังไม่ได้เข้าสู่ระบบ(ล็อà¸à¸­à¸´à¸™)ในขณะนี้! à¸à¸£à¸­à¸à¸£à¸²à¸¢à¸¥à¸°à¹€à¸­à¸µà¸¢à¸”เพื่อพิสูจน์สิทธิ์ข้างล่างนี้เพื่อล็อà¸à¸­à¸´à¸™ คุณต้องเปิดคุ๊à¸à¸à¸µà¹‰à¹ƒà¸«à¹‰à¸—ำงานà¸à¹ˆà¸­à¸™à¸—ี่จะล็อà¸à¸­à¸´à¸™
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt
new file mode 100644
index 000000000..a4af8a0f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt
@@ -0,0 +1,17 @@
+เพจในโดà¸à¸¸à¸§à¸´à¸à¸´à¸‚องคุณได้ถูà¸à¹€à¸žà¸´à¹ˆà¸¡ หรือà¹à¸à¹‰à¹„ข นี่คือรายละเอียด:
+
+วันที่: @DATE@
+บราวเซอร์: @BROWSER@
+ที่อยู่ไอพี: @IPADDRESS@
+ชื่อโฮสต์: @HOSTNAME@
+ฉบับเà¸à¹ˆà¸²: @OLDPAGE@
+ฉบับใหม่: @NEWPAGE@
+สรุปà¸à¸²à¸£à¹à¸à¹‰à¹„ข: @SUMMARY@
+ผู้ใช้: @USER@
+
+@DIFF@
+
+
+--
+จดหมายนี้สร้างขึ้นโดยโดà¸à¸¸à¸§à¸´à¸à¸´à¸—ี่
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt
new file mode 100644
index 000000000..cab906d4c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt
@@ -0,0 +1,3 @@
+====== ยังไม่มีหัวข้อนี้ ======
+
+คุณได้à¸à¸”ลิ้งค์เข้ามายังหัวข้อที่ยังไม่ได้สร้าง ถ้าคุณได้รับอนุà¸à¸²à¸•à¸´ คุณอาจจะสร้างมันได้ด้วยà¸à¸²à¸£à¸à¸”ปุ่ม "สร้างเพจนี้" \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt
new file mode 100644
index 000000000..9127a20c3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt
@@ -0,0 +1,3 @@
+====== ไม่มีฉบับที่ระบุ ======
+
+ฉบับที่ระบุไม่มีอยู่จริง à¸à¸£à¸¸à¸“าใช้ปุ่ม "ฉบับเà¸à¹ˆà¸²à¹†" เพื่อà¹à¸ªà¸”งรายà¸à¸²à¸£à¸£à¸¸à¹ˆà¸™à¹€à¸à¹ˆà¸²à¹†à¸‚องเอà¸à¸ªà¸²à¸£à¸™à¸µà¹‰à¸´ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt
new file mode 100644
index 000000000..caaf8ad2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt
@@ -0,0 +1,3 @@
+====== ดูตัวอย่าง ======
+
+นี่คือหน้าตัวอย่างของข้อความที่คุณà¸à¸£à¸­à¸ จำไว้ว่า: มันยัง **ไม่ได้บันทึà¸** เà¸à¹‡à¸šà¹„ว้! \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt
new file mode 100644
index 000000000..e6ab876cf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt
@@ -0,0 +1,14 @@
+เฮ้ @FULLNAME@!
+
+มีบางคนร้องขอรหัสผ่านใหม่สำหรับ @TITLE@ ของคุณ
+เพื่อล็อà¸à¸­à¸´à¸™à¸—ี่ @DOKUWIKIURL@
+
+ถ้าคุรไม่ได้ร้องขอรหัสผ่านใหม่ à¸à¹‡à¹„ม่ต้องสนใจอีเมลนี้
+
+หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸§à¹ˆà¸²à¸™à¸µà¹ˆà¸à¸²à¸£à¸£à¹‰à¸­à¸‡à¸‚อนี้ถูà¸à¸ªà¹ˆà¸‡à¹‚ดยคุณจริงๆ à¸à¸£à¸¸à¸“าใช้ลิงค์ดังต่อไปนี้
+
+@CONFIRM@
+
+--
+จดหมายนี้ถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้นโดยโดà¸à¸¸à¸§à¸´à¸à¸´à¸—ี่
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt
new file mode 100644
index 000000000..ac4f31290
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt
@@ -0,0 +1 @@
+หน้านี้มีไว้อ่านอย่างเดียว คุณสามารถอ่านข้อความต้นฉบับ ไม่สามารถà¹à¸à¹‰à¹„ขได้ ให้สอบถามผู้ดูà¹à¸¥à¸£à¸°à¸šà¸šà¸–้าคุณคิดว่านี่คือข้อผิดพลาด \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt
new file mode 100644
index 000000000..1655ae82b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt
@@ -0,0 +1,3 @@
+====== à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹€à¸¡à¸·à¹ˆà¸­à¹€à¸£à¹‡à¸§à¹†à¸™à¸µà¹‰ ======
+
+เพจเหล่านี้ถูà¸à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹€à¸¡à¸·à¹ˆà¸­à¹€à¸£à¹‡à¸§à¹†à¸™à¸µà¹‰ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt
new file mode 100644
index 000000000..ed4a40876
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt
@@ -0,0 +1,3 @@
+====== ลงทะเบียนเป็นผู้ใช้หน้าใหม่ ======
+
+à¸à¸£à¸­à¸à¸‚้อมูลทั้งหมดด้านล่างเพื่อสร้างบัà¸à¸Šà¸µà¹ƒà¸«à¸¡à¹ˆà¹ƒà¸™à¸§à¸´à¸à¸´à¸™à¸µà¹‰ ให้à¹à¸™à¹ˆà¹ƒà¸ˆà¸§à¹ˆà¸²à¸„ุณให้ **ที่อยู่อีเมลที่ใช้ได้จริง** ถ้าคุณไม่ถูà¸à¸–ามให้à¸à¸£à¸­à¸à¸£à¸«à¸±à¸ªà¸œà¸²à¹ˆà¸™à¸—ี่นี่, รหัสผ่านใหม่จะถูà¸à¸ªà¹ˆà¸‡à¹„ปยังที่อยู่ดังà¸à¸¥à¹ˆà¸²à¸§ ชื่อล็อà¸à¸­à¸´à¸™à¸„วรจะใช้ได้ถูà¸à¸•à¹‰à¸­à¸‡à¸•à¸²à¸¡[[doku>pagename|pagename]]. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt
new file mode 100644
index 000000000..a96026d31
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt
@@ -0,0 +1,14 @@
+มีผู้ใช้คนใหม่ได้ลงทะเบียน นี่คือรายละเอียด:
+
+ชื่อผู้ใช้ : @NEWUSER@
+ชื่อเต็ม : @NEWNAME@
+อีเมล : @NEWEMAIL@
+
+วันที่ : @DATE@
+บราวเซอร์ : @BROWSER@
+ที่อยู่ไอพี : @IPADDRESS@
+ชื่อโฮสต์ : @HOSTNAME@
+
+--
+จดหมายนี้ถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้นโดยโดà¸à¸¸à¸§à¸´à¸à¸´à¸—ี่
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt
new file mode 100644
index 000000000..1935abedd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt
@@ -0,0 +1,3 @@
+====== ส่งรหัสผ่านใหม่ ======
+
+à¸à¸£à¸¸à¸“าà¸à¸£à¸­à¸à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹ƒà¸™à¸Šà¹ˆà¸­à¸‡à¸”้านล่างเพื่อร้องขอรหัสผ่านใหม่จาà¸à¸šà¸±à¸à¸Šà¸µà¸‚องคุณในวิà¸à¸´à¸™à¸µà¹‰ ลิงค์ยืนยันจะถูà¸à¸ªà¹ˆà¸‡à¹„ปยังที่อยู่อีเมลที่คุณลงทะเบียนไว้ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt
new file mode 100644
index 000000000..98a49d724
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt
@@ -0,0 +1,3 @@
+====== ฉบับเà¸à¹ˆà¸² ======
+
+เหล่านี้เป็นรายà¸à¸²à¸£à¸‰à¸šà¸±à¸šà¹€à¸à¹ˆà¸²à¸‚องเอà¸à¸ªà¸²à¸£à¸›à¸±à¸ˆà¸ˆà¸¸à¸šà¸±à¸™ หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸„ืนสภาพฉบับเà¸à¹ˆà¸² ให้เลือà¸à¸¡à¸±à¸™à¸ˆà¸²à¸à¸”้านล่าง, คลิ๊ภ"à¹à¸à¹‰à¹„ขเพจนี้" à¹à¸¥à¹‰à¸§à¸ˆà¸¶à¸‡à¸„่อยบันทึà¸à¸¡à¸±à¸™ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt
new file mode 100644
index 000000000..d6399a9e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt
@@ -0,0 +1,4 @@
+====== สืบค้น ======
+คุณสามารถพบผลลัพธ์à¸à¸²à¸£à¸ªà¸·à¸šà¸„้นของคุณด้านล่าง ถ้าคุณไม่พบสิ่งที่คนมองหา คุณสามารถเลือà¸à¸—ี่จะสร้าง หรือà¹à¸à¹‰à¹„ขชื่อเพจหลังจาà¸à¸”ูผลสืบค้นà¹à¸¥à¹‰à¸§à¸”้วยปุ่มที่เหมาะสม
+
+====== ผลลัพธ์ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt
new file mode 100644
index 000000000..f93869f38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt
@@ -0,0 +1,2 @@
+**นี่คือเอà¸à¸ªà¸²à¸£à¸£à¸¸à¹ˆà¸™/ฉบับเà¸à¹ˆà¸²**
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt
new file mode 100644
index 000000000..8f65b1061
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt
@@ -0,0 +1,22 @@
+สวัสดี!
+
+เพจ @PAGE@ ในวิà¸à¸´ @TITLE@ ถูà¸à¹à¸à¹‰à¹„ข à¹à¸¥à¸°à¸™à¸µà¹ˆà¸„ือรายà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+วันที่ : @DATE@
+ผู้ใช้: @USER@
+สรุปà¸à¸²à¸£à¹à¸à¹‰à¹„ข: @SUMMARY@
+ฉบับเà¸à¹ˆà¸²: @OLDPAGE@
+ฉบับใหม่: @NEWPAGE@
+
+เพื่อยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¹ƒà¸™à¹€à¸žà¸ˆà¸™à¸µà¹‰, ให้ล็อà¸à¸­à¸´à¸™à¹€à¸‚้าไปยังวิà¸à¸´à¸—ี่
+@DOKUWIKIURL@ à¹à¸¥à¹‰à¸§à¹€à¸‚้าไปที่ยัง
+@NEWPAGE@
+à¹à¸¥à¸°à¸¢à¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¸¥à¸‡à¸—ะเบียนเà¸à¹‰à¸²à¸”ูà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸‚องเพจ หรือ เนมสเปซ นั้นๆ
+
+--
+จดหมายนี้ถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้นโดย โดà¸à¸¸à¸§à¸´à¸à¸´à¸—ี่
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt
new file mode 100644
index 000000000..3e0a8dffd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt
@@ -0,0 +1,3 @@
+====== ปรับปรุงข้อมูลส่วนตัวของบัà¸à¸Šà¸µà¸„ุณ ======
+
+คุณเพียงต้องà¸à¸²à¸£à¸à¸£à¸­à¸à¸Šà¹ˆà¸­à¸‡à¸—ี่ต้องà¸à¸²à¸£à¹à¸à¹‰à¹„ขเหล่านี้ให้ครบ à¹à¸•à¹ˆà¹„ม่สามารถเปลี่ยนชื่อผู้ใช้ได้ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt
new file mode 100644
index 000000000..026965753
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt
@@ -0,0 +1,14 @@
+มีไฟล์ได้ถูà¸à¸­à¸±à¸žà¹‚หลดเข้าไปยังโดà¸à¸¸à¸§à¸´à¸à¸´à¸‚องคุณ นี่คือรายละเอียด:
+
+ไฟล์: @MEDIA@
+วันที่: @DATE@
+เบราเซอร์: @BROWSER@
+ที่อยู่ไอพี: @IPADDRESS@
+ชื่อโฮสต์: @HOSTNAME@
+ขนาด: @SIZE@
+MIME Type : @MIME@
+ผู้ใช้: @USER@
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt
new file mode 100644
index 000000000..653e341e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt
@@ -0,0 +1,3 @@
+====== สà¹à¸›à¸¡à¸–ูà¸à¸à¸µà¸”à¸à¸±à¸™ ======
+
+à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¸‚องคุณ **ไม่**ได้รับà¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¹€à¸žà¸£à¸²à¸°à¸¡à¸±à¸™à¸¡à¸µà¸«à¸™à¸¶à¹ˆà¸‡à¸‚้อความต้องห้ามหรือมาà¸à¸à¸§à¹ˆà¸² ถ้าคุณพยายามสà¹à¸›à¸¡à¸§à¸´à¸à¸´à¸™à¸µà¹‰ --คุณไม่น่ารัà¸à¹€à¸¥à¸¢à¸™à¸° เด็à¸à¹‚ง่! à¹à¸•à¹ˆà¸–้าคุณคิดว่านี่เป็นข้อผิดพลาดà¹à¸¥à¹‰à¸§à¸¥à¸°à¸à¹‡ ช่วยติดต่อผู้ดูà¹à¸¥à¸§à¸´à¸à¸´à¸™à¸µà¹‰à¹ƒà¸«à¹‰à¸”้วย \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt
new file mode 100644
index 000000000..2292b6eeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt
@@ -0,0 +1,3 @@
+====== Yönetim ======
+
+Aşağıda DokuWiki için yapılabilecek yönetim işleri vardır.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt
new file mode 100644
index 000000000..e219a60c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt
@@ -0,0 +1,4 @@
+====== Geri linkler ======
+
+Bu sayfaya bağlantı veren sayfaların listesi aşağıdadır.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt
new file mode 100644
index 000000000..504947998
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt
@@ -0,0 +1,6 @@
+====== Yeni versiyon mevcut ======
+
+Değiştirdiğiniz dökümanın daha yeni bir versiyonu mevcut. Bu durum, siz dökümanı değiştirirken başka bir kullanıcının da aynı dökümanı değiştirmesi halinde olur.
+
+Aşağıda gösterilen farkları dikkatlice inceleyin, daha sonra hangi versiyonun korunacağına karar verin. Eğer ''Kaydet''i seçerseniz, sizin sürümünüz kaydedilir. Mevcut sürümü korumak için ''İptal''e tıklayın.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt
new file mode 100644
index 000000000..04e9b8bfb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt
@@ -0,0 +1,4 @@
+====== Yetki Reddedildi ======
+
+Üzgünüz, devam etmek için yetkiniz yok. Giriş yapmayı unutmuş olabilir misiniz?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt
new file mode 100644
index 000000000..72baa676b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt
@@ -0,0 +1,4 @@
+====== Farklar ======
+
+Bu sayfanın seçili sürümü ile mevcut sürümü arasındaki farkları gösterir.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt
new file mode 100644
index 000000000..b1a8881b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt
@@ -0,0 +1,5 @@
+====== Taslak Dosyası Bulundu ======
+
+Bu sayfadaki en son oturumunuz düzgün olarak tamamlanmamış. DokuWiki otomatik olarak bir taslak kaydetmiş olduğu için çalışmanıza devam edebilirsiniz. Aşağıda en son oturumunuzda kaydedilmiş olan taslağı görebilirsiniz.
+
+Bu taslağı //geri getirebilir//, //silebilir// veya düzenleme sürecinden //vazgeçebilirsiniz//. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt
new file mode 100644
index 000000000..4f84c4e53
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt
@@ -0,0 +1,2 @@
+Sayfayı değiştirin ve ''Kaydete'' basın. Wiki sözdizimi için [[wiki:syntax]]'a bakınız. Lütfen sayfayı sadece eğer **geliştirebiliyorsanız** değiştirin. Eğer testler yapmak istiyorsanız, [[playground:playground|playground]] adresini kullanın.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt
new file mode 100644
index 000000000..9c70fbed3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt
@@ -0,0 +1,2 @@
+**Sayfanın eski bir sürümünü yüklediniz!** Eğer kaydederseniz, bu veriyle yeni bir sürüm oluşturacaksınız.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt
new file mode 100644
index 000000000..e361e8784
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt
@@ -0,0 +1,4 @@
+====== Ä°ndeks ======
+
+Bu mevcut tüm sayfaların [[doku>namespaces|isim alanlarına]] göre sıralı bir indeksidir.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html
new file mode 100644
index 000000000..59e7f57a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html
@@ -0,0 +1,8 @@
+<p>Bu sayfa <a href="http://dokuwiki.org">Dokuwiki</a> kurmanıza yardımcı olmaktadır. Kurulum hakkında bilgi sahibi olmak için <a href="http://dokuwiki.org/installer">bu sayfayı</a> ziyaret edebilirsiniz.</p>
+
+<p>DokuWiki wiki sayfalarını ve wiki sayfalarına ilişkin verileri (resimler, arama indeksi, geçmiş sürümler) dosyalarda tutar. DokuWikiyi sorunsuz olarak kullanmak için bu dosyaların bulunduğu dizinlere <b>mutlaka</b> yazma izniniz olması gereklidir. Bu kurulum betiği yazma izinlerini ayarlayamamaktadır. İzinleri shell, FTP veya kontrol paneliniz (CPanel, Plesk vs.) aracılığı ile düzenleyebilirsiniz.</p>
+
+<p>Kurulum betiği <acronym title="access control list">ACL</acronym>'yi otomatik olarak ayarlamaktadır. Böylece yönetici izinleri belirlenip, DokuWiki kullanımı kolaylaştırılmaktadır.</p>
+
+<p>Deneyimli kullanıcılar <a href="http://dokuwiki.org/install">bu sayfayı </a>
+ edebilir ve <a href="http://dokuwiki.org/config">bu sayfa yardımıyla</a> yapılandırma hakkında ekstra bilgi sahibi olabilir.</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php
new file mode 100644
index 000000000..dd045a6c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php
@@ -0,0 +1,226 @@
+<?php
+/**
+ * turkish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Selim FarsakoÄŸlu <farsakogluselim@yahoo.de>
+ * @author Aydın Coşkuner aydinweb@gmail.com
+ * @author Aydın Coşkuner <aydinweb@gmail.com>
+ * @author yavuzselim@gmail.com
+ * @author Cihan Kahveci kahvecicihan@gmail.com
+ * @author Yavuz Selim <yavuzselim@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Sayfayı düzenle';
+$lang['btn_source'] = 'Kaynağı göster';
+$lang['btn_show'] = 'Sayfayı göster';
+$lang['btn_create'] = 'Bu sayfayı oluştur';
+$lang['btn_search'] = 'Ara';
+$lang['btn_save'] = 'Kaydet';
+$lang['btn_preview'] = 'Önizleme';
+$lang['btn_top'] = 'Başa dön';
+$lang['btn_newer'] = '<< daha yeniler';
+$lang['btn_older'] = 'daha eskiler >>';
+$lang['btn_revs'] = 'Eski sürümler';
+$lang['btn_recent'] = 'En son deÄŸiÅŸiklikler';
+$lang['btn_upload'] = 'Yükle';
+$lang['btn_cancel'] = 'Ä°ptal';
+$lang['btn_index'] = 'Ä°ndeks';
+$lang['btn_secedit'] = 'Düzenle';
+$lang['btn_login'] = 'GiriÅŸ yap';
+$lang['btn_logout'] = 'Çıkış yap';
+$lang['btn_admin'] = 'Yönetici';
+$lang['btn_update'] = 'Güncelle';
+$lang['btn_delete'] = 'Sil';
+$lang['btn_back'] = 'Geri';
+$lang['btn_backlink'] = 'Geri linkler';
+$lang['btn_backtomedia'] = 'Çokluortam dosyası seçimine dön';
+$lang['btn_subscribe'] = 'Sayfa DeÄŸiÅŸikliklerini Bildir';
+$lang['btn_unsubscribe'] = 'Sayfa DeÄŸiÅŸikliklerini Bildirme';
+$lang['btn_subscribens'] = 'Namespace DeÄŸiÅŸikliklerini Bildir';
+$lang['btn_unsubscribens'] = 'Namespace DeÄŸiÅŸikliklerini Bildirme';
+$lang['btn_profile'] = 'Kullanıcı Bilgilerini Güncelle';
+$lang['btn_reset'] = 'Sıfırla';
+$lang['btn_resendpwd'] = 'Yeni parola gönder';
+$lang['btn_draft'] = 'Taslağı düzenle';
+$lang['btn_recover'] = 'Taslağı geri yükle';
+$lang['btn_draftdel'] = 'Taslağı sil';
+$lang['loggedinas'] = 'GiriÅŸ ismi';
+$lang['user'] = 'Kullanıcı ismi';
+$lang['pass'] = 'Parola';
+$lang['newpass'] = 'Yeni Parola';
+$lang['oldpass'] = 'Kullanılan parolayı doğrula';
+$lang['passchk'] = 'Bir kez daha girin';
+$lang['remember'] = 'Beni hatırla';
+$lang['fullname'] = 'Tam isim';
+$lang['email'] = 'E-posta';
+$lang['register'] = 'Kayıt ol';
+$lang['profile'] = 'Kullanıcı Bilgileri';
+$lang['badlogin'] = 'Üzgünüz, Kullanıcı adı veya şifre yanlış oldu.';
+$lang['minoredit'] = 'Küçük Değişiklikler';
+$lang['draftdate'] = 'Taslak ÅŸu saatte otomatik kaydedildi:';
+$lang['nosecedit'] = 'Sayfa yakın zamanda değiştirilmiştir, bölüm bilgisi eski kalmıştır. Bunun için bölüm yerine tüm sayfa yüklenmiştir.';
+$lang['regmissing'] = 'Üzgünüz, tüm alanları doldurmalısınız.';
+$lang['reguexists'] = 'Üzgünüz, bu isime sahip bir kullanıcı zaten mevcut.';
+$lang['regsuccess'] = 'Kullanıcı oluşturuldu ve şifre e-posta adresine gönderildi.';
+$lang['regsuccess2'] = 'Kullanıcı oluşturuldu.';
+$lang['regmailfail'] = 'Şifrenizi e-posta ile gönderirken bir hata oluşmuş gibi görünüyor. Lütfen yönetici ile temasa geçiniz!';
+$lang['regbadmail'] = 'Verilen e-posta adresi geçersiz gibi görünüyor - bunun bir hata olduğunu düşünüyorsanız yönetici ile temasa geçiniz.';
+$lang['regbadpass'] = 'Girilen parolalar aynı değil. Lütfen tekrar deneyiniz.';
+$lang['regpwmail'] = 'DokuWiki parolanız';
+$lang['reghere'] = 'Daha hesabınız yok mu? Hemen bir tane açtırın!';
+$lang['profna'] = 'Bu wiki kullanıcı bilgilerini değiştirmeyi desteklememektedir';
+$lang['profnochange'] = 'Değişiklik yok, birşey yapılmadı.';
+$lang['profnoempty'] = 'BoÅŸ isim veya e-posta adresine izin verilmiyor.';
+$lang['profchanged'] = 'Kullanıcı bilgileri başarıyla değiştirildi.';
+$lang['pwdforget'] = 'Parolanızı mı unuttunuz? Yeni bir parola alın';
+$lang['resendna'] = 'Bu wiki parolayı tekrar göndermeyi desteklememektedir.';
+$lang['resendpwd'] = 'Yeni parolayı gönder:';
+$lang['resendpwdmissing'] = 'Üzgünüz, tüm alanları doldurmalısınız.';
+$lang['resendpwdnouser'] = 'Üzgünüz, veritabanımızda bu kullanıcıyı bulamadık.';
+$lang['resendpwdbadauth'] = 'Üzgünüz, bu doğrulama kodu doğru değil. Doğrulama linkini tam olarak kullandığınıza emin olun.';
+$lang['resendpwdconfirm'] = 'Doğrulama linki e-posta adresinize gönderildi.';
+$lang['resendpwdsuccess'] = 'Yeni parolanız e-posta adresinize gönderildi.';
+$lang['license'] = 'Aksi belirtilmediği halde, bu wikinin içeriğinin telif hakları şu lisans ile korunmaktadır:';
+$lang['licenseok'] = 'Not: Bu sayfayı değiştirerek yazınızın şu lisans ile yayınlanmasını kabul etmiş olacaksınız:';
+$lang['txt_upload'] = 'Yüklenecek dosyayı seç';
+$lang['txt_filename'] = 'Dosya adı (zorunlu değil)';
+$lang['txt_overwrt'] = 'Mevcut dosyanın üstüne yaz';
+$lang['lockedby'] = 'Şu an şunun tarafından kilitli:';
+$lang['lockexpire'] = 'Kilitin açılma tarihi:';
+$lang['willexpire'] = 'Bu sayfayı değiştirme kilidinin süresi yaklaşık bir dakika içinde geçecek.\nÇakışmaları önlemek için önizleme tuşunu kullanarak kilit sayacını sıfırla.';
+$lang['notsavedyet'] = 'KaydedilmemiÅŸ deÄŸiÅŸiklikler kaybolacak.\nDevam etmek istiyor musunuz?';
+$lang['rssfailed'] = 'Bu beslemeyi çekerken hata oluştu: ';
+$lang['nothingfound'] = 'Hiçbir şey yok.';
+$lang['mediaselect'] = 'Çokluortam dosyası seçimi';
+$lang['fileupload'] = 'Çokluortam dosyası yükleme';
+$lang['uploadsucc'] = 'Yükleme tamam';
+$lang['uploadfail'] = 'Yükleme başarısız. Yetki hatası olabilir!';
+$lang['uploadwrong'] = 'Yükleme engellendi. Bu dosya uzantısına izin verilmiyor!';
+$lang['uploadexist'] = 'Dosya zaten var. Hiçbir şey yapılmadı.';
+$lang['uploadbadcontent'] = 'Yüklenen içerik %s uzantısı ile uyuşmuyor.';
+$lang['uploadspam'] = 'Yükleme işlemi spam karalistesi tarafından engellendi.';
+$lang['uploadxss'] = 'Yükleme işlemi muhtemel kötü içerik sebebiyle engellendi.';
+$lang['uploadsize'] = 'Yüklenmek istenen dosya boyutu çok büyük (en fazla %s)';
+$lang['deletesucc'] = '"%s" dosyası silindi.';
+$lang['deletefail'] = '"%s" silinemedi - yetkileri kontrol et.';
+$lang['mediainuse'] = '"%s" dosyası silinmedi, hala kullanımda.';
+$lang['namespaces'] = 'Namespaces';
+$lang['mediafiles'] = 'Şuradaki kullanıma hazır dosyalar:';
+$lang['js']['keepopen'] = 'Seçim yapıldığında bu pencereyi açık tut';
+$lang['js']['hidedetails'] = 'Ayrıntıları gizle';
+$lang['js']['nosmblinks'] = 'Windows paylaşımı sadece Microsoft Internet Explorer ile çalışmaktadır. Yine de hala bağlantıyı kopyalayıp yapıştırarak kullanabilirsiniz. ';
+$lang['js']['mu_btn'] = 'Birden fazla dosyayı bir seferde gönder';
+$lang['mediausage'] = 'Åžu ';
+$lang['mediaview'] = 'Özgün dosyayı göster';
+$lang['mediaroot'] = 'Kök dizini';
+$lang['mediaupload'] = 'Dosya bu namespace\'e yüklenir. Alt namespace oluşturmak için "Dosya adı" kısmınının başına alt namespace adını ekleyip ardından iki nokta koyun.';
+$lang['mediaextchange'] = 'Dosya uzantısı .%s\'den .%s\'e çevrildi!';
+$lang['reference'] = 'Şunun için referanslar:';
+$lang['ref_inuse'] = 'Dosya silinemiyor, çünkü şu sayfalar tarafından hala kullanılmakta:';
+$lang['ref_hidden'] = 'Bazı referanslar okuma yetkiniz olmayan sayfalarda';
+$lang['hits'] = 'tane bulundu';
+$lang['quickhits'] = 'Uyan sayfalar';
+$lang['toc'] = 'İçindekiler';
+$lang['current'] = 'mevcut';
+$lang['yours'] = 'Senin Sürümün';
+$lang['diff'] = 'Kullanılan sürüm ile farkları göster';
+$lang['diff2'] = 'Seçili sürümler arasındaki farkı göster';
+$lang['line'] = 'Satır';
+$lang['breadcrumb'] = 'Ä°z';
+$lang['youarehere'] = 'Buradasınız';
+$lang['lastmod'] = 'Son deÄŸiÅŸtirilme';
+$lang['by'] = 'DeÄŸiÅŸtiren:';
+$lang['deleted'] = 'silindi';
+$lang['created'] = 'oluÅŸturuldu';
+$lang['restored'] = 'eski sürüme dönüldü';
+$lang['external_edit'] = 'Dışarıdan düzenle';
+$lang['summary'] = 'Özeti düzenle';
+$lang['noflash'] = 'Bu içeriği göstermek için <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Eklentisi</a> gerekmektedir.';
+$lang['mail_newpage'] = 'sayfa eklenme:';
+$lang['mail_changed'] = 'sayfa deÄŸiÅŸtirilme:';
+$lang['mail_new_user'] = 'yeni kullanıcı';
+$lang['mail_upload'] = 'dosya yüklendi:';
+$lang['qb_bold'] = 'Kalın Yazı';
+$lang['qb_italic'] = 'Eğik Yazı';
+$lang['qb_underl'] = 'Altı Çizgili Yazı';
+$lang['qb_code'] = 'Kod Haline Getir';
+$lang['qb_strike'] = 'Ortası Çizilmiş Yazı';
+$lang['qb_h1'] = '1. Seviye Başlık';
+$lang['qb_h2'] = '2. Seviye Başlık';
+$lang['qb_h3'] = '3. Seviye Başlık';
+$lang['qb_h4'] = '4. Seviye Başlık';
+$lang['qb_h5'] = '5. Seviye Başlık';
+$lang['qb_link'] = 'İç Bağlantı';
+$lang['qb_extlink'] = 'Dış Bağlantı';
+$lang['qb_hr'] = 'Yatay Çizgi';
+$lang['qb_ol'] = 'Sıralı liste';
+$lang['qb_ul'] = 'Sırasız liste';
+$lang['qb_media'] = 'Resim ve baÅŸka dosyalar ekle';
+$lang['qb_sig'] = 'Ä°mza Ekle';
+$lang['qb_smileys'] = 'Gülen Yüzler';
+$lang['qb_chars'] = 'Özel Karakterler';
+$lang['js']['del_confirm'] = 'Bu giriÅŸi sil?';
+$lang['admin_register'] = 'Yeni kullanıcı ekle...';
+$lang['metaedit'] = 'Metaverileri DeÄŸiÅŸtir';
+$lang['metasaveerr'] = 'Metaveri yazma başarısız ';
+$lang['metasaveok'] = 'Metaveri kaydedildi';
+$lang['img_backto'] = 'Şuna dön:';
+$lang['img_title'] = 'Başlık';
+$lang['img_caption'] = 'Serlevha';
+$lang['img_date'] = 'Tarih';
+$lang['img_fname'] = 'Dosya Adı';
+$lang['img_fsize'] = 'Boyut';
+$lang['img_artist'] = 'Fotoğrafçı';
+$lang['img_copyr'] = 'Telif Hakkı';
+$lang['img_format'] = 'Biçim';
+$lang['img_camera'] = 'Fotoğraf Makinası';
+$lang['img_keywords'] = 'Anahtar Sözcükler';
+$lang['subscribe_success'] = '%s, %s\'in abonelik listesine eklendi';
+$lang['subscribe_error'] = '%s; %s\'in abonelik listesine eklenirken hata oluÅŸtu';
+$lang['subscribe_noaddress'] = 'GiriÅŸ bilgilerinizle iliÅŸkili bir adres yok, abonelik listesine eklenemezsiniz';
+$lang['unsubscribe_success'] = '%s, %s\'in abonelik listesinden çıkartıldı';
+$lang['unsubscribe_error'] = '%s, %s\'in listesinden çıkartılırken hata oluştu';
+$lang['authmodfailed'] = 'Yanlış kullanıcı onaylama ayarı. Lütfen Wiki yöneticisine bildiriniz.';
+$lang['authtempfail'] = 'Kullanıcı doğrulama geçici olarak yapılamıyor. Eğer bu durum devam ederse lütfen Wiki yöneticine haber veriniz.';
+$lang['i_chooselang'] = 'Dili seçiniz';
+$lang['i_installer'] = 'Dokuwiki Kurulum Sihirbazı';
+$lang['i_wikiname'] = 'Wiki Adı';
+$lang['i_enableacl'] = 'ACL\'yi etkinleÅŸtir (tavsiye edilir)';
+$lang['i_superuser'] = 'Ana Kullanıcı';
+$lang['i_problems'] = 'Kurulum sihirbazı aşağıda gösterilen sorunları buldu. Bunları düzeltmeden devam etmeniz mümkün değil.';
+$lang['i_modified'] = 'Güzenlik sebebiyle bu script sadece yeni ve değiştirilmemiş bir Dokuwiki kurulumunda çalışır. Ya indirdiğiniz paketi yeniden açmalı ya da <a href="http://dokuwiki.org/install"> adresindeki Dokuwiki kurulum kılavuzu</a>na bakmalısınız.';
+$lang['i_funcna'] = '<code>%s</code> PHP fonksiyonu bulunmamaktadır. Barındırma(Hosting) hizmetinde bu özellik kapatılmış olabilir.';
+$lang['i_phpver'] = '<code>%s</code> PHP sürümü, gereken <code>%s</code> sürümünden daha düşük. PHP kurulumunu yükseltmeniz gerekmektedir.';
+$lang['i_permfail'] = '<code>%s</code> Dokuwiki tarafından yazılabilir değil. İzin ayarlarını bu klasör için düzeltmeniz gerekmektedir!';
+$lang['i_confexists'] = '<code>%s</code> zaten var';
+$lang['i_writeerr'] = '<code>%s</code> oluşturulamadı. Dosya/Klasör izin ayarlarını gözden geçirip dosyayı elle oluşturmalısınız.';
+$lang['i_badhash'] = 'dokuwiki.php tanınamadı ya da değiştirilmiş (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - Yanlış veya boş değer';
+$lang['i_success'] = 'Kurulum başarıyla tamamlandı. Şimdi install.php dosyasını silebilirsiniz. <a href="doku.php">Yeni DokuWikiniz</a>i kullanabilirsiniz.';
+$lang['i_failure'] = 'Ayar dosyalarını yazarken bazı hatalar oluştu. <a href="doku.php">Yeni DokuWikiniz</a>i kullanmadan önce bu hatalarınızı elle düzeltmeniz gerekebilir.';
+$lang['i_policy'] = 'İlk ACL ayarı';
+$lang['i_pol0'] = 'Tamamen Açık Wiki (herkes okuyabilir, yazabilir ve dosya yükleyebilir)';
+$lang['i_pol1'] = 'Açık Wiki (herkes okuyabilir, ancak sadece üye olanlar yazabilir ve dosya yükleyebilir)';
+$lang['i_pol2'] = 'Kapalı Wiki (sadece üye olanlar okuyabilir, yazabilir ve dosya yükleyebilir)';
+$lang['i_retry'] = 'Tekrar Dene';
+$lang['mu_intro'] = 'Burada birden fazla dosyayı bir seferde yükleyebilirsiniz. Sıraya eklemek için Gözat butonuna tıklayın. Bitince yükleye tıklayın';
+$lang['mu_gridname'] = 'Dosya Adı';
+$lang['mu_gridsize'] = 'Boyutu';
+$lang['mu_gridstat'] = 'Durumu';
+$lang['mu_namespace'] = 'Namespace';
+$lang['mu_browse'] = 'Gözat';
+$lang['mu_toobig'] = 'çok büyük';
+$lang['mu_ready'] = 'yüklenmeye hazır';
+$lang['mu_done'] = 'tamamlandı';
+$lang['mu_fail'] = 'başarısız';
+$lang['mu_authfail'] = 'oturum zaman aşımına uğradı';
+$lang['mu_progress'] = '@PCT@% yüklendi';
+$lang['mu_filetypes'] = 'İzin verilen Dosya Türleri';
+$lang['recent_global'] = '<b>%s</b> namespace\'i içerisinde yapılan değişiklikleri görüntülemektesiniz. Wiki\'deki tüm değişiklikleri de <a href="%s">bu adresten</a> görebilirsiniz. ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt
new file mode 100644
index 000000000..14385426e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt
@@ -0,0 +1,4 @@
+====== Sayfa kilitli ======
+
+Bu sayfa şu anda başka bir kullanıcının değiştirmesi için kilitli. Kilitin süresi geçene veya bu kullanıcı değiştirmeyi bitirene kadar beklemelisiniz.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt
new file mode 100644
index 000000000..2ce378d00
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt
@@ -0,0 +1,4 @@
+====== GiriÅŸ ======
+
+Şu an giriş yapmış değilsiniz! Giriş yapmak için giriş bilgilerinizi aşağıya yazın. Giriş yapmak için çerezleri açmalısınız.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt
new file mode 100644
index 000000000..7e8fc8d81
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt
@@ -0,0 +1,16 @@
+DokuWikinizde bir sayfa eklendi veya deÄŸiÅŸti. Detaylar ÅŸunlar:
+
+Tarih : @DATE@
+Tarayıcı : @BROWSER@
+IP-Adresi : @IPADDRESS@
+Sunucu adı : @HOSTNAME@
+Eski Sürüm : @OLDPAGE@
+Yeni Sürüm : @NEWPAGE@
+Değiştirme Özeti : @SUMMARY@
+Kullanıcı : @USER@
+
+@DIFF@
+
+
+--
+Bu e-posta @DOKUWIKIURL@ adresindeki DokuWiki tarafından hazırlandı.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt
new file mode 100644
index 000000000..8a47e6bf3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt
@@ -0,0 +1,4 @@
+====== Bu başlık henüz mevcut değil ======
+
+Henüz mevcut olmayan bir başlığın linkiyle geldiniz. ''bu sayfayı oluştur'' tuşuna tıklayarak sayfayı oluşturabilirsiniz.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt
new file mode 100644
index 000000000..e6f97bef2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt
@@ -0,0 +1,4 @@
+====== Böyle bir sürüm yok ======
+
+Belirtilen sürüm mevcut değil. Bu dökümanın eski sürümlerinin bir listesine ulaşmak için ''Eski sürümler'' tuşunu kullanın.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt
new file mode 100644
index 000000000..71a8a42f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt
@@ -0,0 +1,4 @@
+====== Önizleme ======
+
+Bu yazınızın nasıl çıkacağının bir önizlemesi. Unutma: Yazı henüz **kaydedilmedi!**
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt
new file mode 100644
index 000000000..22348bb75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt
@@ -0,0 +1,13 @@
+Merhaba @FULLNAME@!
+
+@DOKUWIKIURL@ adresinde kullanılan @TITLE@ hesabı için parola talebinde bulunuldu.
+
+Eğer böyle bir talebiniz olmadıysa, bu e-postayı görmezden gelebilirsiniz.
+
+Onaylamak istiyorsanız aşağıdaki linke tıklayınız.
+
+@CONFIRM@
+
+--
+Bu e-posta aşağıdaki DokuWiki tarafından otomatik olarak oluşturulmuştur.
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt
new file mode 100644
index 000000000..59314f152
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt
@@ -0,0 +1,2 @@
+Bu sayfa salt okunur. Kaynağı görebilirsiniz ama değiştiremezsiniz. Bunun yanlış olduğunu düşünüyorsanız yöneticiye danışın.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt
new file mode 100644
index 000000000..99efc8fb1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt
@@ -0,0 +1,5 @@
+====== Son deÄŸiÅŸiklikler ======
+
+Aşağıdaki sayfalar yakın zamanda değiştirildi.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt
new file mode 100644
index 000000000..b67e4b5c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt
@@ -0,0 +1,4 @@
+====== Yeni kullanıcı olarak kaydolun ======
+
+Bu wikide yeni bir hesap açmak için aşağıdaki tüm bilgileri doldurunuz. **Doğru e-posta adresi verdiğinizden** emin olun, yeni parolanız e-postanıza gönderilecek. Giriş adınız geçerli bir [[doku>pagename|sayfa adı]] olmalıdır.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt
new file mode 100644
index 000000000..7754a5671
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt
@@ -0,0 +1,13 @@
+Yeni bir kullanıcı kayıt oldu. Ayrıntıları aşağıda listelenmiştir:
+
+Kullanıcı adı : @NEWUSER@
+Ä°sim : @NEWNAME@
+E-posta : @NEWEMAIL@
+
+Tarih : @DATE@
+Tarayıcı : @BROWSER@
+IP Numarası : @IPADDRESS@
+Host : @HOSTNAME@
+
+--
+Bu e-posta @DOKUWIKIURL@ adresindeki DokuWiki tarafından hazırlandı. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt
new file mode 100644
index 000000000..1a34396ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt
@@ -0,0 +1,3 @@
+====== Yeni Parola Gönderimi ======
+
+Lütfen bu wikide kullanmış olduğunuz kullanıcı adını aşağıdaki forma yazınız. Onay linki, kayıtlı e-posta adresinize gönderilecektir.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt
new file mode 100644
index 000000000..841fba2b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt
@@ -0,0 +1,4 @@
+====== Eski sürümler ======
+
+Bunlar mevcut dökümanın daha eski sürümleridir. Eski bir sürüme çevirmek için, sürümü aşağıdan seçin, ''Sayfayı değiştir''e tıklayın ve kaydedin.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt
new file mode 100644
index 000000000..ae6d50c77
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt
@@ -0,0 +1,5 @@
+====== Arama ======
+
+Aşağıda aramanın sonuçları listelenmiştir. Aradığınız şeyi bulamadıysanız, ''Sayfayı değiştir'' tuşuna tıklayarak girdiğiniz sorgu adıyla yeni bir sayfa oluşturabilirsiniz .
+
+===== Sonuçlar =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt
new file mode 100644
index 000000000..4cf3d2638
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt
@@ -0,0 +1,2 @@
+**Bu, dökümanın eski bir sürümüdür!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt
new file mode 100644
index 000000000..293067a1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt
@@ -0,0 +1,29 @@
+# Bu indeksleyicinin yok saydığı kelimelerin bir listesidir, satır başına bir kelime yazılır
+# Bu dosyayı değiştirirken UNIX satır sonları (tek satır sonu) kullandığınız emin olun
+# 3 karakterden kısa kelimeleri eklenmesine gerek yoktur, bunlar zaten indekslenmez
+# Bu liste http://www.ranks.nl/stopwords/ altındakilerden derlenmiştir
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt
new file mode 100644
index 000000000..a37a8cf41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt
@@ -0,0 +1,18 @@
+Merhaba!
+
+
+
+@TITLE@ wikisindeki @PAGE@ sayfası değiştirildi.
+Değişiklikler aşağıdadır:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Bu sayfaya abonelikten çıkmak için
+@DOKUWIKIURL@ adresindeki wikiye gir, ardından
+@NEWPAGE@
+sayfasına git ve 'Sayfa Değişikliklerini Bildirme' butonuna tıkla.
+
+--
+Bu e-posta @DOKUWIKIURL@ adresindeki DokuWiki tarafından hazırlandı.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt
new file mode 100644
index 000000000..20b07f949
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt
@@ -0,0 +1,3 @@
+====== Kullanıcı Bilgilerini Güncelleme ======
+
+İstediğiniz kullanıcı bilgilerini değiştirebilirsiniz. Ancak kullanıcı adınızı değiştirmeniz mümkün değildir.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt
new file mode 100644
index 000000000..2d75345ba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt
@@ -0,0 +1,13 @@
+Yeni dosya yüklendi. Ayrıntıları aşağıda listelenmiştir:
+
+Dosya : @MEDIA@
+Tarih : @DATE@
+Tarayıcı : @BROWSER@
+IP Adresi : @IPADDRESS@
+Host : @HOSTNAME@
+Boyut : @SIZE@
+MIME Type : @MIME@
+Kullanıcı : @USER@
+
+--
+Bu e-posta @DOKUWIKIURL@ adresindeki DokuWiki tarafından hazırlandı. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt
new file mode 100644
index 000000000..506cbc793
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt
@@ -0,0 +1,4 @@
+====== SPAM bloke edildi ======
+
+Değişiklikleriniz **kaydedilmedi**, çünkü değişikliklerinizde bir veya daha fazla engellenen kelime var. Eğer Wikiyi spamlamaya çalışıyorsan -- Oh olsun! Eğer bunun bir hata olduğunu düşünüyorsanız, bu Wiki yöneticisiyle iletişime geçin.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt
new file mode 100644
index 000000000..f698d937e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt
@@ -0,0 +1,4 @@
+====== ÐдмініÑÑ‚Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ ======
+
+Ðижче ви можете знайти перелік адмініÑтративних задач, що наÑвні в ДокуВікі.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt
new file mode 100644
index 000000000..3689ccd00
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt
@@ -0,0 +1 @@
+===== Додаткові плагіни ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt
new file mode 100644
index 000000000..5f293e56f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt
@@ -0,0 +1,3 @@
+====== Зворотні зв'Ñзки ======
+
+Це перелік Ñторінок, Ñкі, здаєтьÑÑ, поÑилаютьÑÑ Ð½Ð° поточну Ñторінку.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt
new file mode 100644
index 000000000..5a8930721
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt
@@ -0,0 +1,8 @@
+====== ІÑнує більш нова верÑÑ–Ñ ======
+
+ІÑнує новіша верÑÑ–Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ñƒ, що ви редагували. Це може ÑтатиÑÑ, коли інший кориÑтувач змінив документ під Ñ‡Ð°Ñ Ð²Ð°ÑˆÐ¾Ð³Ð¾ редагуваннÑ.
+
+Уважно переглÑньте розбіжноÑÑ‚Ñ– та вирішіть, Ñку верÑÑ–ÑŽ залишити. Якщо ви натиÑнете
+''зберегти'', буде збережена ваша верÑÑ–Ñ. Якщо натиÑнете ''ÑкаÑувати'' --- то залишитьÑÑ
+поточна верÑÑ–Ñ.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt
new file mode 100644
index 000000000..5db12e1bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt
@@ -0,0 +1,4 @@
+====== ДоÑтуп заборонено ======
+
+Вибачте, але у Ð²Ð°Ñ Ð½Ðµ виÑтачає прав Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ. Можливо ви забули увійти в ÑиÑтему?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt
new file mode 100644
index 000000000..cfdf9a887
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt
@@ -0,0 +1,4 @@
+====== РозбіжноÑÑ‚Ñ– ======
+
+Тут показані розбіжноÑÑ‚Ñ– між вибраною ревізією та поточною верÑією Ñторінки.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt
new file mode 100644
index 000000000..f6acca8ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt
@@ -0,0 +1,6 @@
+====== Знайдено чернетку ======
+
+ОÑтаннє Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— Ñторінки не було завершено коректно. ДокуВікі автоматично зберегла чернетку під Ñ‡Ð°Ñ Ð²Ð°ÑˆÐ¾Ñ— роботи. Ви можете викориÑтати чернетку Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ. Ðижче ви можете побачити дані, збережені з попереднього ÑеанÑу.
+
+Будь лаÑка вирішить, чи ви бажаєте //відновити// оÑтанній ÑÐµÐ°Ð½Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ, //знищити// збережену чернетку або //ÑкаÑувати// редагуваннÑ.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt
new file mode 100644
index 000000000..82dbc1a50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt
@@ -0,0 +1 @@
+Відредагуйте Ñторінку та натиÑніть ''Зберегти''. ВикориÑтовуйте [[wiki:syntax|поÑібник]] з ÑинтакÑиÑу Ð´Ð»Ñ Ð´Ð¾Ð²Ñ–Ð´ÐºÐ¸. Будь лаÑка, змінюйте Ñторінку лише у тому випадку, коли ви можете **покращити** Ñ—Ñ—. Якщо ви бажаєте щоÑÑŒ Ñпробувати, викориÑтовуйте Ñпеціальну Ñторінку [[playground:playground]]
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt
new file mode 100644
index 000000000..aae86fa50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt
@@ -0,0 +1,2 @@
+**Ви завантажили Ñтару верÑÑ–ÑŽ документу!** Якщо ви збережете Ñ—Ñ—, ви Ñтворите нову верÑÑ–ÑŽ з ціми даними.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt
new file mode 100644
index 000000000..0ba0d185b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt
@@ -0,0 +1,4 @@
+====== ЗміÑÑ‚ ======
+
+Це перелік уÑÑ–Ñ… доÑтупних Ñторінок, упорÑджених за [[doku>namespaces|проÑторами імен]]
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html
new file mode 100644
index 000000000..084da8662
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html
@@ -0,0 +1,21 @@
+<p>Ð¦Ñ Ñторінка допомагає при першій уÑтановці та наÑтройці <a href="http://dokuwiki.org">ДокуВікі</a>.
+Більше інформації про програму уÑтановки можна знайти на <a href="http://dokuwiki.org/installer">Ñторінці документації</a>.</p>
+
+<p>ДокуВікі викориÑтовую звичайні файли Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ñторінок вікі та іншої інформації,
+щодо цих Ñторінок (наприклад, зображень, індекÑів пошуку, Ñтарих ревізій та ін.). ДлÑ
+уÑпішного Ñ„ÑƒÐ½ÐºÑ†Ñ–Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ Ð”Ð¾ÐºÑƒÐ’Ñ–ÐºÑ– <strong>має</strong> мати права на Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ Ð¿Ð°Ð¿Ð¾Ðº, що
+міÑÑ‚ÑÑ‚ÑŒ ці файли. Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° уÑтановки не може змінювати права доÑтупу. Звичайно це
+робитьÑÑ Ð·Ð° допомогою інтерпретатора shell, або, Ñкщо ви викориÑтовуєте хоÑтинг,
+за допомогою FTP або панелі ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñ–Ð½Ð½Ñ Ñ…Ð¾Ñтингом (наприклад cPanel).</p>
+
+<p>Ð¦Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð° уÑтановки налаштує вашу ДокуВікі Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑтаннÑ
+<acronym title="ÑпиÑок контролю доÑтупу">ACL</acronym>, що, в Ñвою чергу,
+дозволить адмініÑтратору входити до адмініÑтративного меню Ð´Ð»Ñ ÑƒÑтановки доданків,
+ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами, ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ доÑтупу до Ñторінок Вікі та змін параметрів
+конфігурації. Це не Ñ” обов'Ñзковим Ð´Ð»Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸ ДокуВікі, але зробить Ð¶Ð¸Ñ‚Ñ‚Ñ Ð°Ð´Ð¼Ñ–Ð½Ñ–Ñтратора
+значно легшим.</p>
+
+<p>ДоÑвідчені кориÑтувачі, або кориÑтувачі, що мають оÑобливі вимоги до налагодженнÑ, мають
+викориÑтовувати ці поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð´ÐµÑ‚Ð°Ð»ÑŒÐ½Ð¾Ñ— інформації, щодо
+<a href="http://dokuwiki.org/install">інÑтрукцій з уÑтановки</a>
+та <a href="http://dokuwiki.org/config">параметрів конфігурації</a>.</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php
new file mode 100644
index 000000000..5f94d9b47
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php
@@ -0,0 +1,244 @@
+<?php
+/**
+ * ukrainian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oleksiy Voronin <ovoronin@gmail.com>
+ * @author serg_stetsuk@ukr.net
+ * @author okunia@gmail.com
+ * @author Oleksandr Kunytsia <okunia@gmail.com>
+ * @author Uko uko@uar.net
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = 'Редагувати';
+$lang['btn_source'] = 'Показати вихідний текÑÑ‚';
+$lang['btn_show'] = 'Показати Ñторінку';
+$lang['btn_create'] = 'Створити Ñторінку';
+$lang['btn_search'] = 'Пошук';
+$lang['btn_save'] = 'Зберегти';
+$lang['btn_preview'] = 'ПереглÑд';
+$lang['btn_top'] = 'ПовернутиÑÑ Ð½Ð°Ð²ÐµÑ€Ñ…';
+$lang['btn_newer'] = '<< більш нові';
+$lang['btn_older'] = 'більш Ñтарі >>';
+$lang['btn_revs'] = 'Старі ревізії';
+$lang['btn_recent'] = 'Ðедавні зміни';
+$lang['btn_upload'] = 'Завантажити';
+$lang['btn_cancel'] = 'СкаÑувати';
+$lang['btn_index'] = 'ЗміÑÑ‚';
+$lang['btn_secedit'] = 'Редагувати';
+$lang['btn_login'] = 'Увійти';
+$lang['btn_logout'] = 'Вийти';
+$lang['btn_admin'] = 'КеруваннÑ';
+$lang['btn_update'] = 'Оновити';
+$lang['btn_delete'] = 'Знищити';
+$lang['btn_back'] = 'Ðазад';
+$lang['btn_backlink'] = 'ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñюди';
+$lang['btn_backtomedia'] = 'Ðазад до вибору медіа-файлу';
+$lang['btn_subscribe'] = 'ПідпиÑатиÑÑ';
+$lang['btn_unsubscribe'] = 'ВідпиÑатиÑÑ';
+$lang['btn_subscribens'] = 'ПідпиÑатиÑÑ Ð½Ð° зміни в проÑторі імен';
+$lang['btn_unsubscribens'] = 'ВідпиÑатиÑÑ Ð²Ñ–Ð´ змін проÑтору імен';
+$lang['btn_profile'] = 'Оновити профіль';
+$lang['btn_reset'] = 'ОчиÑти';
+$lang['btn_resendpwd'] = 'ÐадіÑлати новий пароль';
+$lang['btn_draft'] = 'Редагувати чернетку';
+$lang['btn_recover'] = 'Відновити чернетку';
+$lang['btn_draftdel'] = 'Знищити чернетку';
+$lang['btn_revert'] = 'Відновити';
+$lang['loggedinas'] = 'Ви';
+$lang['user'] = 'КориÑтувач';
+$lang['pass'] = 'Пароль';
+$lang['newpass'] = 'Ðовий пароль';
+$lang['oldpass'] = 'Поточний пароль';
+$lang['passchk'] = 'ще раз';
+$lang['remember'] = 'Запам\'Ñтати мене';
+$lang['fullname'] = 'Повне ім\'Ñ';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'РеєÑтраціÑ';
+$lang['profile'] = 'Профіль кориÑтувача';
+$lang['badlogin'] = 'Вибачте, невірне ім\'Ñ Ñ‡Ð¸ пароль.';
+$lang['minoredit'] = 'Ðезначні зміни';
+$lang['draftdate'] = 'Чернетка збережена';
+$lang['nosecedit'] = 'Сторінку змінено, дані розділу заÑтарілі. Завантажено Ñторінку повніÑÑ‚ÑŽ.';
+$lang['regmissing'] = 'Ðеобхідно заповнити вÑÑ– полÑ.';
+$lang['reguexists'] = 'КориÑтувач з таким іменем вже Ñ–Ñнує.';
+$lang['regsuccess'] = 'КориÑтувача Ñтворено. Пароль відправлено на e-mail.';
+$lang['regsuccess2'] = 'КориÑтувача Ñтворено.';
+$lang['regmailfail'] = 'При відправленні Ð¿Ð°Ñ€Ð¾Ð»Ñ ÑталаÑÑŒ помилка. Зв’ÑжітьÑÑ Ð· адмініÑтратором!';
+$lang['regbadmail'] = 'Схоже, що адреÑа e-mail невірна - Ñкщо ви вважаєте, що це помилка, зв’ÑжітьÑÑ Ð· адмініÑтратором';
+$lang['regbadpass'] = 'Ðадані паролі не Ñпівпадають, Ñпробуйте ще раз.';
+$lang['regpwmail'] = 'Пароль ДокуВікі';
+$lang['reghere'] = 'Ще не маєте облікового запиÑу? Отримайте його негайно';
+$lang['profna'] = 'Ð¦Ñ Ð’Ñ–ÐºÑ– не підтримує зміни профілю';
+$lang['profnochange'] = 'Ðемає змін, немає що робити.';
+$lang['profnoempty'] = 'Ð†Ð¼â€™Ñ Ð°Ð±Ð¾ e-mail не можуть бути пуÑтими.';
+$lang['profchanged'] = 'Профіль уÑпішно змінено.';
+$lang['pwdforget'] = 'Забули пароль? Отримайте новий';
+$lang['resendna'] = 'Ð¦Ñ Ð’Ñ–ÐºÑ– не підтримує повторне Ð²Ñ–Ð´Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ.';
+$lang['resendpwd'] = 'ÐадіÑлати пароль длÑ';
+$lang['resendpwdmissing'] = 'Ðеобхідно заповнити уÑÑ– полÑ.';
+$lang['resendpwdnouser'] = 'Такий кориÑтувач не Ñ–Ñнує.';
+$lang['resendpwdbadauth'] = 'Код автентифікації невірний. Перевірте, чи ви викориÑтали повне поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ.';
+$lang['resendpwdconfirm'] = 'ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ñ–Ñлано на e-mail.';
+$lang['resendpwdsuccess'] = 'Ðовий пароль відіÑлано на e-mail.';
+$lang['license'] = 'Якщо не вказано інше, вміÑÑ‚ цієї Вікі підпадає під дію такої ліцензії:';
+$lang['licenseok'] = 'Примітка. Редагуючи ці Ñторінку, ви погоджуєтеÑÑŒ на розповÑÑŽÐ´Ð¶ÐµÐ½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— за такою ліцензією:';
+$lang['searchmedia'] = 'Пошук файлу:';
+$lang['searchmedia_in'] = 'Шукати у %s';
+$lang['txt_upload'] = 'Виберіть файл Ð´Ð»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ';
+$lang['txt_filename'] = 'Завантажити Ñк (не обов\'Ñзкове)';
+$lang['txt_overwrt'] = 'ПерезапиÑати Ñ–Ñнуючий файл';
+$lang['lockedby'] = 'Заблоковано';
+$lang['lockexpire'] = 'Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÑƒÑ”Ñ‚ÑŒÑÑ Ð²';
+$lang['willexpire'] = 'Ð‘Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†Ñ–Ñ”Ñ— Ñторінки закінчуєтьÑÑ Ñ‡ÐµÑ€ÐµÐ· хвилину.\n Щоб уникнути конфліктів викориÑтовуйте кнопку переглÑду Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ.';
+$lang['notsavedyet'] = 'Ðезбережені зміни будуть втрачені.\n ДійÑно продовжити?';
+$lang['rssfailed'] = 'Виникла помилка під Ñ‡Ð°Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ RSS-Ñтрічки: ';
+$lang['nothingfound'] = 'Ðічого не знайдено.';
+$lang['mediaselect'] = 'Вибір медіа-файлу';
+$lang['fileupload'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¼ÐµÐ´Ñ–Ð°-файлу';
+$lang['uploadsucc'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ð¹ÑˆÐ»Ð¾ уÑпішно';
+$lang['uploadfail'] = 'Помилка при завантаженні. Можливо неправильні права?';
+$lang['uploadwrong'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾. Таке Ñ€Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ не дозволÑєтьÑÑ!';
+$lang['uploadexist'] = 'Файл вже Ñ–Ñнує. Ðічого не зроблено.';
+$lang['uploadbadcontent'] = 'Завантажений вміÑÑ‚ не відповідає розширенню %s.';
+$lang['uploadspam'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¾ Ñпам-фільтром.';
+$lang['uploadxss'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¾Ð²Ð°Ð½Ð¾ через можливіÑÑ‚ÑŒ злонаміреного вміÑту.';
+$lang['uploadsize'] = 'Завантажений файл надто великий (макÑимум %s).';
+$lang['deletesucc'] = 'Файл "%s" знищено.';
+$lang['deletefail'] = 'Ðеможливо знищити "%s" - перевірте права доÑтупу.';
+$lang['mediainuse'] = '"%s" не знищено - файл викориÑтовуєтьÑÑ.';
+$lang['namespaces'] = 'ПроÑтори імен';
+$lang['mediafiles'] = 'ДоÑтупні файли';
+$lang['js']['searchmedia'] = 'Шукати файли';
+$lang['js']['keepopen'] = 'Тримати вікно відкритим під Ñ‡Ð°Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ';
+$lang['js']['hidedetails'] = 'Сховати деталі';
+$lang['js']['nosmblinks'] = 'ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° мережеві папки працює лише в Internet Explorer.
+Ви можете Ñкопіювати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ– відкрити його за допомогою Internet Explorer.';
+$lang['js']['linkwiz'] = 'Чарівник поÑилань';
+$lang['js']['linkto'] = 'ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð°:';
+$lang['js']['del_confirm'] = 'ДійÑно знищити обрані елементи?';
+$lang['js']['mu_btn'] = 'Завантажити одночаÑно кілька файлів';
+$lang['mediausage'] = 'Ð”Ð»Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° цей файл викориÑтовуйте такий ÑинтакÑиÑ:';
+$lang['mediaview'] = 'ПереглÑнути початковий файл';
+$lang['mediaroot'] = 'корінь';
+$lang['mediaupload'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ у поточний проÑÑ‚Ñ–Ñ€ імен. Щоб Ñтворити проÑтори імен, додайте Ñ—Ñ… в початок імені файлу та розділіть двокрапками.';
+$lang['mediaextchange'] = 'Ð Ð¾Ð·ÑˆÐ¸Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ змінено з .%s на .%s!';
+$lang['reference'] = 'ПоÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ';
+$lang['ref_inuse'] = 'Цей файл не може бути знищено, оÑкільки він викориÑтовуєтьÑÑ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ Ñторінками:';
+$lang['ref_hidden'] = 'ДеÑкі поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ–Ñнують на Ñторінках, Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñких у Ð²Ð°Ñ Ð½ÐµÐ¼Ð°Ñ” прав.';
+$lang['hits'] = 'Збіги';
+$lang['quickhits'] = 'Збіги у назвах Ñторінок';
+$lang['toc'] = 'ЗміÑÑ‚';
+$lang['current'] = 'поточний';
+$lang['yours'] = 'Ваша верÑÑ–Ñ';
+$lang['diff'] = 'показати відмінноÑÑ‚Ñ– від поточної верÑÑ–Ñ—';
+$lang['diff2'] = 'Показати відмінноÑÑ‚Ñ– між вибраними верÑÑ–Ñми';
+$lang['line'] = 'РÑдок';
+$lang['breadcrumb'] = 'Відвідано';
+$lang['youarehere'] = 'Ви тут';
+$lang['lastmod'] = 'Ð’ оÑтаннє змінено';
+$lang['by'] = ' ';
+$lang['deleted'] = 'знищено';
+$lang['created'] = 'Ñтворено';
+$lang['restored'] = 'відновлено Ñтару ревізію';
+$lang['external_edit'] = 'зовнішнє редагуваннÑ';
+$lang['summary'] = 'ПідÑумок змін';
+$lang['noflash'] = 'Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду цієї Ñторінки необхідно вÑтановити <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>.';
+$lang['download'] = 'Завантажити фрагмент';
+$lang['mail_newpage'] = 'Ñторінку додано:';
+$lang['mail_changed'] = 'Ñторінку змінено:';
+$lang['mail_new_user'] = 'новий кориÑтувач:';
+$lang['mail_upload'] = 'завантажено файл:';
+$lang['qb_bold'] = 'Ðапівжирний текÑÑ‚';
+$lang['qb_italic'] = 'КурÑив';
+$lang['qb_underl'] = 'ПідкреÑлений текÑÑ‚';
+$lang['qb_code'] = 'ТекÑÑ‚ коду';
+$lang['qb_strike'] = 'ЗакреÑлений текÑÑ‚';
+$lang['qb_h1'] = 'Заголовок 1-го рівнÑ';
+$lang['qb_h2'] = 'Заголовок 2-го рівнÑ';
+$lang['qb_h3'] = 'Заголовок 3-го рівнÑ';
+$lang['qb_h4'] = 'Заголовок 4-го рівнÑ';
+$lang['qb_h5'] = 'Заголовок 5-го рівнÑ';
+$lang['qb_h'] = 'Заголовок';
+$lang['qb_hs'] = 'Вибрати заголовок';
+$lang['qb_hplus'] = 'Заголовок вищого рівнÑ';
+$lang['qb_hminus'] = 'Заголовок нищого рівнÑ';
+$lang['qb_hequal'] = 'Заголовок того ж рівнÑ';
+$lang['qb_link'] = 'Внутрішнє поÑиланнÑ';
+$lang['qb_extlink'] = 'Зовнішнє поÑиланнÑ';
+$lang['qb_hr'] = 'Роздільник';
+$lang['qb_ol'] = 'Елемент нумерованого ÑпиÑку';
+$lang['qb_ul'] = 'Елемент ненумерованого ÑпиÑку';
+$lang['qb_media'] = 'Додати зображень та інші файли';
+$lang['qb_sig'] = 'Додати підпиÑ';
+$lang['qb_smileys'] = 'ПоÑмішки';
+$lang['qb_chars'] = 'Спеціальні Ñимволи';
+$lang['upperns'] = 'Перейти до батьківÑького проÑтору імен';
+$lang['admin_register'] = 'Додати нового кориÑтувача';
+$lang['metaedit'] = 'Редагувати метадані';
+$lang['metasaveerr'] = 'Помилка запиÑу метаданих';
+$lang['metasaveok'] = 'Метадані збережено';
+$lang['img_backto'] = 'ПовернутиÑÑ Ð´Ð¾';
+$lang['img_title'] = 'Ðазва';
+$lang['img_caption'] = 'ПідпиÑ';
+$lang['img_date'] = 'Дата';
+$lang['img_fname'] = 'Ð†Ð¼â€™Ñ Ñ„Ð°Ð¹Ð»Ñƒ';
+$lang['img_fsize'] = 'Розмір';
+$lang['img_artist'] = 'Фотограф';
+$lang['img_copyr'] = 'ÐвторÑькі права';
+$lang['img_format'] = 'Формат';
+$lang['img_camera'] = 'Камера';
+$lang['img_keywords'] = 'Ключові Ñлова';
+$lang['subscribe_success'] = '%s доданий(на) до ÑпиÑку розÑилки Ð´Ð»Ñ Ñторінки %s';
+$lang['subscribe_error'] = 'Помилка при доданні %s до ÑпиÑку розÑилки Ð´Ð»Ñ Ñторінки %s';
+$lang['subscribe_noaddress'] = 'У вашому профілі немає адреÑи e-mail, ви не можете кориÑтуватиÑÑ ÑпиÑками розÑилки';
+$lang['unsubscribe_success'] = '%s вилучено зі ÑпиÑку розÑилки Ð´Ð»Ñ Ñторінки %s';
+$lang['unsubscribe_error'] = 'Помилка при вилученні %s зі ÑпиÑку розÑилки Ð´Ð»Ñ %s';
+$lang['authmodfailed'] = 'Ðеправильна наÑтройка автентифікації кориÑтувача. Будь лаÑка, повідомте про це адмініÑтратора.';
+$lang['authtempfail'] = 'ÐÐ²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ ÐºÐ¾Ñ€Ð¸Ñтувача тимчаÑово не доÑтупна. Якщо це буде продовжуватиÑÑŒ, будь лаÑка, повідомте адмініÑтратора.';
+$lang['i_chooselang'] = 'Виберіть мову';
+$lang['i_installer'] = 'Програма уÑтановки ДокуВікі';
+$lang['i_wikiname'] = 'Ðазва Вікі';
+$lang['i_enableacl'] = 'Дозволити викориÑÑ‚Ð°Ð½Ð½Ñ ACL (рекомендовано)';
+$lang['i_superuser'] = 'СуперкориÑтувач';
+$lang['i_problems'] = 'Програма уÑтановки знайшла декілька проблем, що вказані нижче. Ви не можете продовжити, поки не виправите Ñ—Ñ…';
+$lang['i_modified'] = 'З причин безпеки цей Ñкрипт буде працювати тільки з новою та немодифікованою уÑтановкою ДокуВікі.
+Вам Ñлід або ще раз розпакувати файли із завантаженого пакету, або звернутиÑÑ Ð´Ð¾ повної <a href="http://dokuwiki.org/install">інÑтрукції з уÑтановки ДокуВікі</a>';
+$lang['i_funcna'] = 'Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ PHP <code>%s</code> не доÑтупна. Можливо, хоÑтинг-провайдер відключив Ñ—Ñ— з ÑкихоÑÑŒ причин?';
+$lang['i_phpver'] = 'ВерÑÑ–Ñ PHP <code>%s</code> менша, ніж необхідно - <code>%s</code>. Ðеобхідно оновити PHP.';
+$lang['i_permfail'] = 'ДокуВікі не має прав на Ð·Ð°Ð¿Ð¸Ñ <code>%s</code>. Ðеобхідно змінити права доÑтупа Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— папки!';
+$lang['i_confexists'] = '<code>%s</code> вже Ñ–Ñнує';
+$lang['i_writeerr'] = 'Ðеможливо Ñтворити <code>%s</code>. Ðеобхідно перевірити права доÑтупа Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ/папки та Ñтворити файл вручну.';
+$lang['i_badhash'] = 'Ðевпізнаний або модифікований dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - невірне або пуÑте значеннÑ.';
+$lang['i_success'] = 'ÐаÑтройку завершено. Ми можете знищити файл install.php.
+Перейдіть до <a href="doku.php">вашої нової ДокуВікі</a>';
+$lang['i_failure'] = 'При збереженні файлу конфігурації виникли помилки. Можливо вам доведетьÑÑ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð¸Ñ‚Ð¸ Ñ—Ñ… ÑамоÑтійно
+до початку викориÑÑ‚Ð°Ð½Ð½Ñ <a href="doku.php">вашої нової ДокуВікі</a>.';
+$lang['i_policy'] = 'Початкова політика ACL';
+$lang['i_pol0'] = 'Відкрита Вікі (читаннÑ, Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² Ð´Ð»Ñ Ð²ÑÑ–Ñ…)';
+$lang['i_pol1'] = 'Публічна Вікі (Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²ÑÑ–Ñ…, Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð·Ð°Ñ€ÐµÑ”Ñтрованих кориÑтувачів)';
+$lang['i_pol2'] = 'Закрита Вікі (читаннÑ, Ð·Ð°Ð¿Ð¸Ñ Ñ‚Ð° Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ Ð´Ð»Ñ Ð·Ð°Ñ€ÐµÑ”Ñтрованих кориÑтувачів)';
+$lang['i_retry'] = 'Повторити';
+$lang['mu_intro'] = 'Тут ви можете завантажити одночаÑно кілька файлів. ÐатиÑніть кнопку "Вибрати", щоб додати файли в чергу. ПіÑÐ»Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð½Ñ Ð½Ð°Ñ‚Ð¸Ñніть кнопку "Завантажити"';
+$lang['mu_gridname'] = 'Ð†Ð¼â€™Ñ Ñ„Ð°Ð¹Ð»Ñƒ';
+$lang['mu_gridsize'] = 'Розмір';
+$lang['mu_gridstat'] = 'СтатуÑ';
+$lang['mu_namespace'] = 'ПроÑÑ‚Ñ–Ñ€ імен';
+$lang['mu_browse'] = 'Вибрати';
+$lang['mu_toobig'] = 'надто великий';
+$lang['mu_ready'] = 'готовий до завантаженнÑ';
+$lang['mu_done'] = 'закінчено';
+$lang['mu_fail'] = 'невдале';
+$lang['mu_authfail'] = 'закінчено термін дії ÑеÑÑ–Ñ—';
+$lang['mu_progress'] = 'Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ @PCT@%';
+$lang['mu_filetypes'] = 'Дозволені типи файлів';
+$lang['mu_info'] = 'Файли завантажено';
+$lang['mu_lasterr'] = 'ОÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°:';
+$lang['recent_global'] = 'Ви переглÑдаєте зміни в межах проÑтору імен <b>%s</b>. Також можна <a href="%s">переглÑнути зміни в межах уÑієї Вікі</a>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt
new file mode 100644
index 000000000..367c286bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt
@@ -0,0 +1,3 @@
+====== Сторінку заблоковано ======
+
+Цю Ñторінку заблоковано іншим кориÑтувачем Ð´Ð»Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ. Зачекайте, поки цей кориÑтувач завершить Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð±Ð¾ закінчитьÑÑ Ñ‡Ð°Ñ Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt
new file mode 100644
index 000000000..f45f81024
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt
@@ -0,0 +1,4 @@
+====== Вхід до вікі ======
+
+Ви не ввійшли до ÑиÑтеми. Введіть ваші реєÑтраційні дані Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб увійти. У вашому браузері повинні бути увімкнені файли cookies.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt
new file mode 100644
index 000000000..5bd25c3c3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt
@@ -0,0 +1,17 @@
+Сторінка в вашому ДокуВікі була змінена. Деталі нижче:
+
+Дата : @DATE@
+ОглÑдач : @BROWSER@
+ÐдреÑа IP : @IPADDRESS@
+Ім'Ñ Ð²ÑƒÐ·Ð»Ð° : @HOSTNAME@
+Стара ревізіÑ: @OLDPAGE@
+Ðова Ñ€ÐµÐ²Ñ–Ð·Ñ–Ñ : @NEWPAGE@
+ПідÑумок змін : @SUMMARY@
+КориÑтувач : @USER@
+
+@DIFF@
+
+
+--
+Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ»Ð¾ Ñтворене ДокуВікі з
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt
new file mode 100644
index 000000000..39cdecc35
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt
@@ -0,0 +1,4 @@
+====== Сторінка ще не Ñ–Ñнує ======
+
+Ви прийшли за поÑиланнÑм на Ñторінку, що ще не Ñ–Ñнує. Якщо ваші права дозволÑÑŽÑ‚ÑŒ, ви можете Ñтворити цю Ñторінку натиÑнувши кнопку ''Створити Ñторінку''.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt
new file mode 100644
index 000000000..3c9295fce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt
@@ -0,0 +1,4 @@
+====== Ðемає такої ревізії ======
+
+Вказана Ñ€ÐµÐ²Ñ–Ð·Ñ–Ñ Ð½Ðµ Ñ–Ñнує. ВикориÑтовуйте кнопку ''Старі ревізії'', щоб отримати перелік ревізій цього документу.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt
new file mode 100644
index 000000000..b4174c7a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt
@@ -0,0 +1,4 @@
+====== Попередній переглÑд ======
+
+Це попередній переглÑд того, Ñк буде виглÑдати ваш текÑÑ‚. Ðе забувайте, текÑÑ‚ ще **не збережено**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt
new file mode 100644
index 000000000..7a46f536a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt
@@ -0,0 +1,14 @@
+Доброго днÑ, @FULLNAME@!
+
+ХтоÑÑŒ запитав новий пароль Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувача @TITLE@ на @DOKUWIKIURL@
+
+Якщо це були не ви, ігноруйте це повідомленнÑ.
+
+Ð”Ð»Ñ Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ, що це дійÑно ви запитали новий пароль, будь лаÑка
+перейдіть за наÑтупним поÑиланнÑм.
+
+@CONFIRM@
+
+--
+Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñтворене ДокуВікі з
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt
new file mode 100644
index 000000000..59ea6a1b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt
@@ -0,0 +1,2 @@
+Ð¦Ñ Ñторінка доÑтупна тільки Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ³Ð»Ñду. Ви можете продивитиÑÑ Ð²Ð¸Ñ…Ñ–Ð´Ð½Ð¸Ð¹ текÑÑ‚, але не можете змінювати його. Якщо ви вважаєте, що це не вірно, звернітьÑÑ Ð´Ð¾ адмініÑтратора.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt
new file mode 100644
index 000000000..645e3d869
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt
@@ -0,0 +1,4 @@
+====== ОÑтанні зміни ======
+
+Вказані нижче Ñторінки було змінено нещодавно.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt
new file mode 100644
index 000000000..8fffc002e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt
@@ -0,0 +1,4 @@
+====== РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ кориÑтувача ======
+
+Введіть необхідну інформацію Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб Ñтворити нового кориÑтувача у цій Вікі. ПереконайтеÑÑ. що ви ввели **правильну адреÑу e-mail** - Ñкщо ви не ввели пароль, то новий пароль буде відіÑлано на цю адреÑу. Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача повинно бути дозволеною [[doku>pagename|назвою Ñторінки]] вікі.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt
new file mode 100644
index 000000000..9b55d85bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt
@@ -0,0 +1,14 @@
+ЗареєÑтровано нового кориÑтувача. ПереглÑньте деталі:
+
+КориÑтувач : @NEWUSER@
+Повне ім'Ñ : @NEWNAME@
+E-Mail : @NEWEMAIL@
+
+Дата : @DATE@
+Браузер : @BROWSER@
+ÐдреÑа IP : @IPADDRESS@
+Ðазва хоÑту : @HOSTNAME@
+
+--
+Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñтворене ДокуВікі з
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt
new file mode 100644
index 000000000..208efad55
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt
@@ -0,0 +1,3 @@
+====== ÐадіÑлати новий пароль ======
+
+Заповніть відомоÑÑ‚Ñ– Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб отримати новий пароль у цій Вікі. Ðовий пароль буде надіÑлано на e-mail, що вказано у реєÑтраційних даних. Ім'Ñ ÐºÐ¾Ñ€Ð¸Ñтувача повинно бути дозволеним іменем кориÑтувача Вікі.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt
new file mode 100644
index 000000000..646de2a2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt
@@ -0,0 +1,4 @@
+====== Старі ревізії ======
+
+Це Ñтарі верÑÑ–Ñ— поточного документа. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, щоб повернутиÑÑ Ð´Ð¾ Ñтарої верÑÑ–Ñ—, виберіть Ñ—Ñ—, натиÑніть ''Редагувати'', та збережіть Ñторінку.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt
new file mode 100644
index 000000000..971c24814
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt
@@ -0,0 +1,5 @@
+====== Пошук ======
+
+ДивітьÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚Ð¸ пошуку нижче. Якщо ви не знайшли те, що ви шукали, ви можете Ñтворити або редагувати Ñторінку, що має таке ж ім’Ñ, що Ñ– пошуковий запит за допомогою відповідної кнопки.
+
+===== Результати =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt
new file mode 100644
index 000000000..2706b35d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt
@@ -0,0 +1,2 @@
+**Це Ñтара верÑÑ–Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ñƒ!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt
new file mode 100644
index 000000000..288ab8e9f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt
@@ -0,0 +1,3 @@
+# Це ÑпиÑок ігнорованих індекÑатором Ñлів, одне Ñлово в Ñ€Ñдку
+# При редагуванні цього файлу переконайтеÑÑ, що викориÑтовуєте Ñимволи Ð¿ÐµÑ€ÐµÐ²ÐµÐ´ÐµÐ½Ð½Ñ Ñ€Ñдку, Ñк в UNIX (одиночні)
+# Слова, коротші за 3 Ñимволи включати не треба. Вони ігноруютьÑÑ Ð² будь-Ñкому випадку
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt
new file mode 100644
index 000000000..8d4dfebb4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt
@@ -0,0 +1,22 @@
+Доброго днÑ!
+
+Сторінка @PAGE@ в вікі @TITLE@ змінилаÑÑ.
+ПереглÑньте зміни:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+Дата: @DATE@
+КориÑтувач : @USER@
+ПідÑумок змін: @SUMMARY@
+Стара ревізіÑ: @OLDPAGE@
+Ðова ревізцÑ: @NEWPAGE@
+
+Щоб відпиÑатиÑÑ Ð²Ñ–Ð´ цих повідомлень, увійдіть в вікі за адреÑою
+@DOKUWIKIURL@, відвідайте @NEWPAGE@
+та оберіть 'ВідпиÑатиÑÑ'
+
+--
+Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñтворене ДокуВікі з
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt
new file mode 100644
index 000000000..d043f99a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt
@@ -0,0 +1,5 @@
+====== Оновити ваш профіль ======
+
+Ðеобхідно заповнити тільки Ñ‚Ñ– полÑ, Ñкі ви бажаєте змінити. Ви не можете змінити Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача.
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt
new file mode 100644
index 000000000..6eb8c93c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt
@@ -0,0 +1,14 @@
+Ðа вашу ДокуВікі завантажено файл. Деталі:
+
+Файл : @MEDIA@
+Дата : @DATE@
+Браузер : @BROWSER@
+IP-ÐдреÑа : @IPADDRESS@
+Ðазва вузла : @HOSTNAME@
+Розмір : @SIZE@
+Тип MIME : @MIME@
+КориÑтувач : @USER@
+
+--
+Цей лиÑÑ‚ автоматично Ñтворено ДокуВікі на Ñайті:
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt
new file mode 100644
index 000000000..869f93a87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt
@@ -0,0 +1,4 @@
+====== Заблокований СПÐÐœ ======
+
+Ваші зміни **не були** збережені тому що вони міÑÑ‚ÑÑ‚ÑŒ одне чи декілька заблокованих Ñлів. Якщо ви намагалиÑÑŒ додати Ñпам до вікі, то нехай вам буде Ñоромно. Якщо ви вважаєте, що це помилка, звернітьÑÑ Ð´Ð¾ адмініÑтратора цієї Вікі.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt
new file mode 100644
index 000000000..d8ac73e8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt
@@ -0,0 +1,3 @@
+====== Quản lý ======
+
+Sau đây là các mục quản lý trong DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt
new file mode 100644
index 000000000..231ab5d8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt
@@ -0,0 +1,3 @@
+====== Nối vỠtrước ======
+
+Äây là danh sách các trang hình nhÆ° đã nối vào trang này.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt
new file mode 100644
index 000000000..0df1ddbe4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt
@@ -0,0 +1,5 @@
+====== Có phiên bản mới hơn ======
+
+Trang bạn đang biên soạn có một phiên bản mới hơn. Việc này xảy ra khi một bạn đổi trang ấy khi bạn đang biên soạn trang này.
+
+Xem kỹ những thay đổi dÆ°á»›i đây, rồi quyết định giữ phiên bản nào. Nếu chá»n ''bảo lÆ°u'', phiên bản của bạn được giữ lại. Bấm ''huá»·'' để giữ phiên bản kia.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt
new file mode 100644
index 000000000..e70ed5d5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt
@@ -0,0 +1,3 @@
+====== Không được phép vào ======
+
+Rất tiếc là bạn không được phép để tiếp tục. Bạn quen đăng nhập hay sao?
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt
new file mode 100644
index 000000000..10bfd0f30
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt
@@ -0,0 +1,4 @@
+====== Khác biệt ======
+
+Äây là những khác biệt giữa phiên bạn được chá»n và phiên bản hiện tại của trang này.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt
new file mode 100644
index 000000000..b00316a7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt
@@ -0,0 +1 @@
+Biên soạn trang này và bấm ''Bảo lưu''. Xem [[wiki:syntax]] vỠcú pháp của Wiki. Xin bạn biên soạn trang này nếu bạn có thể **cải tiến** nó. Nếu bạn muốn thí nghiệm, bạn có thể tập những bước đầu ở [[playground:playground]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt
new file mode 100644
index 000000000..076466c06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt
@@ -0,0 +1,2 @@
+**Bạn đã nạp một phiên bản cũ của văn kiện!** Nếu bảo lưu, bạn sẽ tạo phiên bản với dữ kiện này.
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt
new file mode 100644
index 000000000..708d2030d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt
@@ -0,0 +1,3 @@
+====== Mục lục ======
+
+Äây là mục lục của tất cả các trang, xếp theo thứ tá»± [[doku>namespaces|namespaces]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php
new file mode 100644
index 000000000..23f42d69a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * vietnamese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author James Do <jdo@myrealbox.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+$lang['btn_edit'] = 'Biên soạn trang này';
+$lang['btn_source'] = 'Xem mã nguồn';
+$lang['btn_show'] = 'Xem trang';
+$lang['btn_create'] = 'Tạo trang này';
+$lang['btn_search'] = 'Tìm';
+$lang['btn_save'] = 'LÆ°u';
+$lang['btn_preview']= 'Duyệt trước';
+$lang['btn_top'] = 'Trở lên trên';
+$lang['btn_revs'] = 'Các phiên bản cũ';
+$lang['btn_recent'] = 'Thay đổi gần đây';
+$lang['btn_upload'] = 'Tải lên';
+$lang['btn_cancel'] = 'Huá»· bá»';
+$lang['btn_index'] = 'Mục lục';
+$lang['btn_secedit']= 'Biên soạn';
+$lang['btn_login'] = 'Äăng nhập';
+$lang['btn_logout'] = 'Thoát';
+$lang['btn_admin'] = 'Quản lý';
+$lang['btn_update'] = 'Cập nhật';
+$lang['btn_delete'] = 'Xoá';
+
+$lang['loggedinas'] = 'Username đang dùng';
+$lang['user'] = 'Username';
+$lang['pass'] = 'Password';
+$lang['remember'] = 'Lưu username/password lại';
+$lang['fullname'] = 'HỠvà tên';
+$lang['email'] = 'E-Mail';
+$lang['register'] = 'Äăng ký';
+$lang['badlogin'] = 'Username hoặc password không đúng.';
+
+$lang['regmissing'] = 'Bạn cần Ä‘iá»n vào tất cả các trÆ°á»ng';
+$lang['reguexists'] = 'Bạn khác đã dùng username này rồi.';
+$lang['regsuccess'] = 'Äã tạo username, và đã gởi password.';
+$lang['regmailfail']= 'Không gởi password được. Xin bạn liên hệ vá»›i ngÆ°á»i quản lý.';
+$lang['regbadmail'] = 'Email hình nhÆ° không đúng. Xin bạn liên hệ vá»›i ngÆ°á»i quản lý.';
+$lang['regpwmail'] = 'Password DokuWiki của bạn là';
+$lang['reghere'] = 'Xin bạn đăng ký username nếu chưa có.';
+
+$lang['txt_upload'] = 'Chá»n tệp để tải lên';
+$lang['txt_filename'] = 'Äiá»n wikiname (tuỳ ý)';
+$lang['lockedby'] = 'Äang khoá bởi';
+$lang['lockexpire'] = 'Khoá sẽ hết hạn vào lúc';
+$lang['willexpire'] = 'Khoá của bạn để biên soạn trang này sẽ hết hạn trong vòng 1 phút.\nÄể tránh xung Ä‘á»™t, bạn nên bấm nút xem trÆ°á»›c để lập lại thá»i gian khoá';
+
+$lang['notsavedyet'] = 'Hiện có những thay đổi chưa được bảo lưu, và sẽ mất.\nBạn thật sự muốn tiếp tục?';
+$lang['rssfailed'] = 'Rút nguồn này gặp phải lỗi';
+$lang['nothingfound']= 'Không tìm được gì';
+
+$lang['mediaselect'] = 'Chá»n tệp media';
+$lang['fileupload'] = 'Tải lên tệp media';
+$lang['uploadsucc'] = 'Tải lên thành công';
+$lang['uploadfail'] = 'Tải lên thất bại. Có thể vì không đủ phép?';
+$lang['uploadwrong'] = 'Tải lên bị từ chối. Cấm tải loại tệp này';
+$lang['namespaces'] = 'Äá» tài';
+$lang['mediafiles'] = 'Tệp có sẵn ở';
+
+$lang['hits'] = 'Trùng';
+$lang['quickhits'] = 'Trang trùng hợp';
+$lang['toc'] = 'Ná»™i dung';
+$lang['current'] = 'hiện tại';
+$lang['yours'] = 'Phiên bản hiện tại';
+$lang['diff'] = 'cho xem khác biệt với phiên bản hiện tại';
+$lang['line'] = 'Dòng';
+$lang['breadcrumb'] = 'Trang đã xem';
+$lang['lastmod'] = 'Thá»i Ä‘iểm thay đổi';
+$lang['by'] = 'do';
+$lang['deleted'] = 'bị xoá';
+$lang['created'] = 'được tạo ra';
+$lang['restored'] = 'phiên bản cũ đã được khôi phục';
+$lang['summary'] = 'Tóm tắt biên soạn';
+
+$lang['mail_newpage'] = 'Trang được thêm:';
+$lang['mail_changed'] = 'Trang thay đổi:';
+
+$lang['js']['nosmblinks'] = "Nối với các Windows shares chỉ có hiệu lực với Microsoft Internet Explorer.\nBạn vẫn có thể sao và chép các mốc nối.";
+
+$lang['qb_bold'] = 'Chữ đậm';
+$lang['qb_italic'] = 'Chữ nghiêng';
+$lang['qb_underl'] = 'Chữ gạch dưới';
+$lang['qb_code'] = 'Chữ mã nguồn';
+$lang['qb_h1'] = 'Äầu Ä‘á» cấp 1';
+$lang['qb_h2'] = 'Äầu Ä‘á» cấp 2';
+$lang['qb_h3'] = 'Äầu Ä‘á» cấp 3';
+$lang['qb_h4'] = 'Äầu Ä‘á» cấp 4';
+$lang['qb_h5'] = 'Äầu Ä‘á» cấp 5';
+$lang['qb_link'] = 'Mốc nối nội tại';
+$lang['qb_extlink'] = 'Mốc nối ra ngoài';
+$lang['qb_hr'] = 'Gạch ngang';
+$lang['qb_ol'] = 'Äiểm trong danh sách có thứ tá»±';
+$lang['qb_ul'] = 'Äiểm trong danh sách không đánh số';
+$lang['qb_media'] = 'Thêm ảnh và tệp khác';
+$lang['qb_sig'] = 'Äặt chữ ký';
+
+$lang['js']['del_confirm']= 'Xoá mục này?';
+
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt
new file mode 100644
index 000000000..acb0981c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt
@@ -0,0 +1,3 @@
+====== Trang bị khoá ======
+
+Trang này đang bị khoá để một bạn khác biên soạn. Bạn cần đợi cho đến khi nào bạn kia đã biên soạn xong, hoặc khoá hết hạn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt
new file mode 100644
index 000000000..4265a79df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt
@@ -0,0 +1,3 @@
+====== Äăng nhập ======
+
+Hiện bạn chÆ°a đăng nhập! Äiá»n vào những chi tiết chứng minh ở phía dÆ°á»›i. Máy của bạn cần đặt chế Ä‘á»™ nhận cookies để đăng nhập.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt
new file mode 100644
index 000000000..3fcdf5595
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt
@@ -0,0 +1,16 @@
+Một trang trên DokuWiki của bạn vừa được bổ sung hoặc thay đổi. Sau đây là chi tiết:
+
+Date : @DATE@
+Browser : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Old Revision: @OLDPAGE@
+New Revision: @NEWPAGE@
+Edit Summary: @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+--
+This mail was generated by DokuWiki at
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt
new file mode 100644
index 000000000..b03bb5224
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt
@@ -0,0 +1,3 @@
+====== Chưa có đỠtài này ======
+
+Bạn vừa nối vào một đỠtài chưa có. Bạn có tạo đỠtài này bằng cách bấm vào nút ''Tạo trang này''.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt
new file mode 100644
index 000000000..0fa27d898
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt
@@ -0,0 +1,3 @@
+====== Phiên bản chưa có ======
+
+Chưa có phiên bản được chỉ định. Xin bấm nút ''Phiên bản cũ'' để xem danh sách các phiên bản của văn kiện này.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt
new file mode 100644
index 000000000..81069a2c4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt
@@ -0,0 +1,3 @@
+====== Xem trÆ°á»›c ======
+
+Văn kiện của bạn sẽ thể hiện như sau. Nên nhớ: Văn kiện này **chưa được bảo lưu**!
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt
new file mode 100644
index 000000000..ffeffc7bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt
@@ -0,0 +1 @@
+Trang này chỉ được Ä‘á»c thôi. Bạn có thể xem mã nguồn, nhÆ°ng không được thay đổi. Xin bạn há»i ngÆ°á»i quản lý nếu không đúng.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt
new file mode 100644
index 000000000..fe6628f6e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt
@@ -0,0 +1,3 @@
+====== Thay đổi gần đây ======
+
+Những trang sau được thay đổi gần đây.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt
new file mode 100644
index 000000000..f7d35c84b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt
@@ -0,0 +1,3 @@
+====== Äăng ký má»›i ======
+
+Xin Ä‘iá»n vào má»i thông tin sau đây để tạo má»™t username má»›i cho wiki này. Bạn cần cung cấp **e-mail chính xác** - để gởi password má»›i của bạn đến đấy. Username cần là má»™t [[doku>pagename|pagename]] hợp lệ.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt
new file mode 100644
index 000000000..943e3fff1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt
@@ -0,0 +1,3 @@
+====== Phiên bản cũ ======
+
+Sau đây là các phiên bản cÅ© của văn kiện này. Äể quây vá» má»™t phiên bản cÅ©, chá»n ở phía dÆ°á»›i, bấm vào ''Biên soạn trang này'' để bảo lÆ°u.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt
new file mode 100644
index 000000000..821ca9f7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt
@@ -0,0 +1,5 @@
+====== Tìm ======
+
+Sau đây là kết quả của câu há»i của bạn. Nếu bạn không thấy được những gì bạn Ä‘ang tìm, bạn có thể má»™t trang má»›i, cùng tên câu há»i của bạn, bằng cách bấm vào nút ''Biên soạn trang này''.
+
+===== Kết quả =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt
new file mode 100644
index 000000000..a146f4ef3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt
@@ -0,0 +1,2 @@
+**Äây là má»™t phiên bản cÅ© cùa văn kiện!**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt
new file mode 100644
index 000000000..b219ca141
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt
@@ -0,0 +1,3 @@
+====== SPAM bị chận ======
+
+Các thay đổi **không** được bảo lÆ°u vì có má»™t hoặc nhiá»u từ bị ngăn chận. Nếu muốn spam Wiki này -- ngÆ°ng liá»n! Nếu đây là má»™t sai lầm, liên lạc vá»›i ngÆ°á»i quản lý của Wiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt
new file mode 100644
index 000000000..3cc10335d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt
@@ -0,0 +1,4 @@
+====== 管ç†é¸å–® ======
+
+以下為 DokuWiki 的管ç†è¨­å®š
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt
new file mode 100644
index 000000000..fb1999269
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt
@@ -0,0 +1 @@
+===== 外加æ’件 ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt
new file mode 100644
index 000000000..381a76812
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt
@@ -0,0 +1,5 @@
+====== 被引用的連çµ(Backlinks) ======
+
+這裡是有引用ã€é€£çµåˆ°åŽŸå…ˆé é¢çš„清單。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt
new file mode 100644
index 000000000..e52613dc8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt
@@ -0,0 +1,4 @@
+====== 有一個更新的版本已存在 ======
+
+有一個您所編輯的更新版本已經存在了。\\ 這狀æ³ä¹‹æ‰€ä»¥æœƒç™¼ç”Ÿï¼šä¹ƒæ˜¯å› ç‚ºç•¶æ‚¨æ­£åœ¨ç·¨ä¿®å®ƒçš„時候,而其他使用者已變更這份文件。\\ 請檢驗以下的差異,然後決定è¦ç”¨å“ªä¸€ä»½ã€‚\\ 若您é¸æ“‡ã€Œ''儲存''ã€ï¼Œé‚£æ‚¨çš„版本就會被存下來了。而「å–消ã€å‰‡æœƒä¿ç•™ç‚ºç¾åœ¨é€™ç‰ˆæœ¬ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt
new file mode 100644
index 000000000..20c512abc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt
@@ -0,0 +1,4 @@
+====== 拒絕尚未授權 ======
+
+很抱歉您權é™ä¸å¤ ä»¥è‡´ç„¡æ³•ç¹¼çºŒã€‚或許您忘了先登入您的帳號嗎?
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt
new file mode 100644
index 000000000..a064f81ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt
@@ -0,0 +1,4 @@
+====== 差異處 ======
+
+這裡會顯示出所é¸çš„版次與目å‰ç‰ˆæ¬¡çš„差異處。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt
new file mode 100644
index 000000000..81a092be0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt
@@ -0,0 +1,5 @@
+====== 發ç¾è‰ç¨¿æª”案 ======
+
+您上次編輯此é é¢ä¸¦æœªæ­£ç¢ºçš„完æˆã€‚DokuWiki在您編輯的時候自動儲存一份è‰ç¨¿ä½¿å¾—您å¯ä»¥ç¹¼çºŒç·¨è¼¯ã€‚以下您å¯ä»¥è§€çœ‹ä¸Šæ¬¡ç·¨è¼¯çš„資料。
+
+請決定你è¦//復原//您éºå¤±çš„編輯文件,//刪除//這份è‰ç¨¿ï¼Œæˆ–者//å–消//ç›®å‰çš„編輯程åºã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt
new file mode 100644
index 000000000..5be7fbb4e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt
@@ -0,0 +1 @@
+æ示:編修本é ä¸¦æŒ‰ã€Œ''儲存''ã€å³å¯ã€‚ ä¸æ‡‚ Wiki 語法?沒關係點一下 [[wiki:syntax|中文語法]] 。若您覺得å¯è®“本文å“質「**更好**ã€çš„è©±ï¼Œé‚£å°±è«‹ç¹¼çºŒå§ :) \\    但若åªæƒ³ç·´ç¿’或測試æ±è¥¿çš„話,那麼請先多利用 [[playground:playground|新手試煉場]] 來試煉您的身手å§ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt
new file mode 100644
index 000000000..b344e0772
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt
@@ -0,0 +1,2 @@
+**您目å‰è¼‰å…¥çš„是本份文件的舊版ï¼ï¼** 若存檔的話,那這些資料就會被存æˆå¦ä¸€ä»½äº†å–”。
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt
new file mode 100644
index 000000000..961095bff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt
@@ -0,0 +1,3 @@
+====== ç´¢å¼•é  ======
+
+ç›®å‰æ‚¨æ‰€çœ‹åˆ°çš„是用 [[doku>namespaces|namespaces]] 來排åºç›®å‰æ‰€æœ‰å¯ç”¨çš„é é¢æ¸…單。\\ 請直接按您想è¦çš„é é¢æˆ–者用「顯示é é¢ã€ä¾†æª¢è¦–ç›®å‰æ‰€åœ¨é é¢
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html
new file mode 100644
index 000000000..879c152b5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html
@@ -0,0 +1,8 @@
+<p>本页é¢æ—¨åœ¨å¸®åŠ©æ‚¨å®Œæˆç¬¬ä¸€æ¬¡å®‰è£…å’Œé…ç½® <a href="http://dokuwiki.org">Dokuwiki</a>。关于安装工具的更多信æ¯è¯·å‚阅其 <a href="http://dokuwiki.org/installer">官方文档页é¢</a>。</p>
+
+<p>DokuWiki 使用普通的文件ä¿å­˜ç»´åŸºé¡µé¢å’Œå…¶ä»–与这些页é¢æŒ‚é’©çš„ä¿¡æ¯ï¼ˆä¾‹å¦‚:图åƒï¼Œæœç´¢ç´¢å¼•ï¼Œä¿®è®¢è®°å½•ç­‰ï¼‰ã€‚为了能正常è¿è¡Œï¼ŒDokuWiki <strong>å¿…é¡»</strong> 拥有针对那些路径和文件的写æƒé™ã€‚本安装工具ä¸èƒ½ç”¨äºŽè®¾ç½®è¿™äº›æƒé™ã€‚对æƒé™çš„æ“作通常通过命令行或使用您的网络æœåŠ¡æ供商的 FTP 或控制é¢æ¿ï¼ˆä¾‹å¦‚ cPanel)进行æ“作。</p>
+
+<p>本安装工具将设置您的 DokuWiki é…ç½® <acronym title="访问控制列表">ACL</acronym>,它能让管ç†å‘˜ç™»å½•å¹¶ä½¿ç”¨â€œç®¡ç†â€åŠŸèƒ½æ¥å®‰è£…æ’件,管ç†ç”¨æˆ·ï¼Œç®¡ç†è®¿é—®æƒé™å’Œå…¶ä»–é…置设置。它并ä¸æ˜¯ DokuWiki 正常è¿è¡Œæ‰€å¿…须的,但安装之åŽå®ƒå°†æ›´æ–¹ä¾¿æ‚¨çš„管ç†ã€‚</p>
+
+<p>有ç»éªŒçš„用户或有特殊需求的用户请å‚阅更详细的 <a href="http://dokuwiki.org/install">安装指å—</a>
+å’Œ <a href="http://dokuwiki.org/config">é…置设置</a>。</p> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php
new file mode 100644
index 000000000..f936123f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php
@@ -0,0 +1,252 @@
+<?php
+/**
+ * Chinese(Traditional) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author chinsan <chinsan@mail2000.com.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-simptrad.html
+ * @author Wayne San <waynesan@zerozone.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
+ * @author Cheng-Wei Chien <e.cwchien@gmail.com>
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = '編修本é ';
+$lang['btn_source'] = '顯示é é¢ä¾†æº';
+$lang['btn_show'] = '顯示é é¢';
+$lang['btn_create'] = '建立此é ';
+$lang['btn_search'] = 'æœå°‹';
+$lang['btn_save'] = '儲存';
+$lang['btn_preview'] = 'é è¦½';
+$lang['btn_top'] = '回到é é ‚';
+$lang['btn_newer'] = '<< 較新';
+$lang['btn_older'] = '較舊 >>';
+$lang['btn_revs'] = '舊版';
+$lang['btn_recent'] = '最近更新';
+$lang['btn_upload'] = '上傳';
+$lang['btn_cancel'] = 'å–消';
+$lang['btn_index'] = '索引é ';
+$lang['btn_secedit'] = '改這段';
+$lang['btn_login'] = '登入';
+$lang['btn_logout'] = '登出';
+$lang['btn_admin'] = '管ç†é¸å–®';
+$lang['btn_update'] = '更新設定';
+$lang['btn_delete'] = '刪除';
+$lang['btn_back'] = '回上一步';
+$lang['btn_backlink'] = 'åå‘連çµ';
+$lang['btn_backtomedia'] = 'é‡æ–°é¸æ“‡åœ–檔';
+$lang['btn_subscribe'] = '訂閱更動通知';
+$lang['btn_unsubscribe'] = '退訂更動通知';
+$lang['btn_subscribens'] = '訂閱命å空間更改';
+$lang['btn_unsubscribens'] = '退訂命å空間更改';
+$lang['btn_profile'] = '更新個人資料';
+$lang['btn_reset'] = '資料é‡è¨­';
+$lang['btn_resendpwd'] = '寄新密碼';
+$lang['btn_draft'] = '編輯è‰ç¨¿';
+$lang['btn_recover'] = '復原è‰ç¨¿';
+$lang['btn_draftdel'] = 'æ¨æ£„è‰ç¨¿';
+$lang['btn_revert'] = '復原';
+$lang['loggedinas'] = '登入為';
+$lang['user'] = '帳號';
+$lang['pass'] = '密碼';
+$lang['newpass'] = '新的密碼';
+$lang['oldpass'] = 'ç›®å‰çš„密碼';
+$lang['passchk'] = 'å†æ¬¡æ‰“新的密碼';
+$lang['remember'] = '記ä½å¸³è™Ÿå¯†ç¢¼';
+$lang['fullname'] = '暱稱';
+$lang['email'] = 'E-Mail';
+$lang['register'] = '註冊';
+$lang['profile'] = '使用者個人資料';
+$lang['badlogin'] = '很抱歉,您的使用者å稱或密碼å¯èƒ½æœ‰éŒ¯èª¤';
+$lang['minoredit'] = '次è¦æ€§çš„修改';
+$lang['draftdate'] = 'è‰ç¨¿è‡ªå‹•å­˜æª”æ–¼';
+$lang['nosecedit'] = 'æ­¤é é¢å·²ç¶“åŒæ™‚被修改,部份éŽæ™‚的資料å–代了全é ã€‚';
+$lang['regmissing'] = '很抱歉,所有的欄ä½éƒ½è¦å¡«å“¦';
+$lang['reguexists'] = '很抱歉,已有人註冊該帳號了喔';
+$lang['regsuccess'] = '使用者已建立,密碼已經用 email 寄到您信箱了唷。';
+$lang['regsuccess2'] = '使用者已建立';
+$lang['regmailfail'] = '寄出密碼信似乎發生錯誤,請跟管ç†è€…è¯çµ¡ï¼';
+$lang['regbadmail'] = '您輸入的 email 似乎ä¸å°ï¼Œå¦‚果您èªç‚ºæ˜¯æ­£ç¢ºçš„,請與管ç†è€…è¯çµ¡ã€‚';
+$lang['regbadpass'] = '兩次打的密碼ä¸ä¸€è‡´ï¼Œè«‹å†é‡è©¦ï¼Œè¬è¬ã€‚';
+$lang['regpwmail'] = '您的 DokuWiki 帳號密碼';
+$lang['reghere'] = '您還沒有帳號å°å§ï¼Ÿä¾†è¨»å†Šä¸€å€‹å§ã€‚';
+$lang['profna'] = '本 wiki ä¸é–‹æ”¾ä¿®æ”¹å€‹äººè³‡æ–™';
+$lang['profnochange'] = '未åšä»»ä½•è®Šæ›´';
+$lang['profnoempty'] = '帳號或 email 地å€ä¸å¯ä»¥æ²’有寫喔ï¼';
+$lang['profchanged'] = '個人資料已æˆåŠŸæ›´æ–°å›‰ã€‚';
+$lang['pwdforget'] = '忘記密碼嗎?寄新密碼ï¼';
+$lang['resendna'] = '本 wiki ä¸é–‹æ”¾é‡å¯„新密碼';
+$lang['resendpwd'] = '寄新密碼給';
+$lang['resendpwdmissing'] = '很抱歉,您必須全填這些資料æ‰å¯ä»¥';
+$lang['resendpwdnouser'] = '很抱歉,資料庫內查無此人';
+$lang['resendpwdbadauth'] = 'å°ä¸èµ·ï¼Œè©²èªè¨¼ç¢¼éŒ¯èª¤ã€‚請使用完整的確èªéˆæŽ¥ã€‚';
+$lang['resendpwdconfirm'] = '確èªéˆæŽ¥å·²ç¶“通éŽéƒµä»¶ç™¼é€çµ¦æ‚¨äº†ã€‚';
+$lang['resendpwdsuccess'] = '新密碼函已經以 email 寄出了。';
+$lang['license'] = '如未特別註明,此 wiki 上得內容都是根據以下的授權方å¼ï¼š';
+$lang['licenseok'] = '注æ„:編輯此é é¢è¡¨ç¤ºä½ å·²åŒæ„以下的授權方å¼ï¼š';
+$lang['searchmedia'] = 'æœå°‹æª”å:';
+$lang['searchmedia_in'] = '在 %s 裡æœå°‹';
+$lang['txt_upload'] = 'è«‹é¸æ“‡è¦ä¸Šå‚³çš„檔案';
+$lang['txt_filename'] = '請輸入è¦å­˜åœ¨ wiki 內的檔案å稱 (éžå¿…è¦)';
+$lang['txt_overwrt'] = '是å¦è¦è¦†è“‹åŽŸæœ‰æª”案';
+$lang['lockedby'] = 'ç›®å‰å·²è¢«ä¸‹åˆ—人員鎖定';
+$lang['lockexpire'] = 'é è¨ˆè§£é™¤éŽ–定於';
+$lang['willexpire'] = '您目å‰ç·¨è¼¯é€™é çš„鎖定將會在一分é˜å…§è§£é™¤ã€‚\è‹¥è¦é¿å…發生æ„外,請按「é è¦½ã€éµä¾†é‡æ–°è¨­å®šéŽ–定狀態';
+$lang['notsavedyet'] = '有尚未儲存的變更將會éºå¤±ã€‚\n真的è¦ç¹¼çºŒå—Žï¼Ÿ';
+$lang['rssfailed'] = '當抓å–餵é€éŽä¾†çš„ RSS 資料時發生錯誤: ';
+$lang['nothingfound'] = '沒找到任何çµæžœã€‚';
+$lang['mediaselect'] = 'é¸æ“‡åœ–檔';
+$lang['fileupload'] = '上傳圖檔';
+$lang['uploadsucc'] = '上傳æˆåŠŸ';
+$lang['uploadfail'] = '上傳失敗。或許權é™è¨­å®šéŒ¯èª¤äº†å—Žï¼Ÿ';
+$lang['uploadwrong'] = '拒絕上傳。該檔案類型ä¸è¢«æ”¯æ´ã€‚';
+$lang['uploadexist'] = '該檔案已有存在了喔,故å–消上傳動作。';
+$lang['uploadbadcontent'] = '上傳檔案的內容ä¸ç¬¦åˆ %s 檔的副檔å';
+$lang['uploadspam'] = '被SPAM黑åå–®é™åˆ¶ä¸Šå‚³';
+$lang['uploadxss'] = '因為å¯èƒ½æƒ¡æ„的內容被é™åˆ¶ä¸Šå‚³';
+$lang['uploadsize'] = '上傳的檔案尺寸éŽå¤§(最大:%s)';
+$lang['deletesucc'] = '"%s" 檔已刪除完畢。';
+$lang['deletefail'] = '"%s" 檔無法刪除,請先檢查權é™è¨­å®šã€‚';
+$lang['mediainuse'] = '"%s" 檔因還在使用中,故目å‰å°šç„¡æ³•åˆªé™¤ã€‚';
+$lang['namespaces'] = '命å空間';
+$lang['mediafiles'] = 'å¯ç”¨çš„檔案有';
+$lang['js']['searchmedia'] = 'æœå°‹æª”案';
+$lang['js']['keepopen'] = 'æ–¼é¸æ“‡æ™‚ä¿æŒè¦–窗開啟';
+$lang['js']['hidedetails'] = 'éš±è—詳細內容';
+$lang['js']['nosmblinks'] = 'åªæœ‰åœ¨ Microsoft IE 下æ‰èƒ½åŸ·è¡Œã€Œé€£çµåˆ° Windows sharesã€ã€‚
+ä¸éŽæ‚¨ä»å¯æ‹·è²ã€è¤‡è£½é€™é€£çµ';
+$lang['js']['linkwiz'] = '建立連çµç²¾éˆ';
+$lang['js']['linkto'] = '連至:';
+$lang['js']['del_confirm'] = '確定è¦åˆªé™¤è©²ç®¡ç†è¦å‰‡?';
+$lang['js']['mu_btn'] = '上傳多個檔案';
+$lang['mediausage'] = '使用以下的語法來連çµæ­¤æª”案:';
+$lang['mediaview'] = '檢視原始檔案';
+$lang['mediaroot'] = 'root';
+$lang['mediaupload'] = '上傳文件至當å‰çš„命å空間。è¦å‰µå»ºæ¬¡ç´šå‘½å空間,將其å稱加在“上傳並é‡å‘½å為â€æ–‡ä»¶åçš„å‰é¢ï¼Œä¸¦ç”¨è‹±æ–‡å†’號隔開';
+$lang['mediaextchange'] = '檔案類型已由 .%s 變更為 .%s 囉!';
+$lang['reference'] = '引用到本é çš„,åˆè¨ˆæœ‰';
+$lang['ref_inuse'] = '這檔還ä¸èƒ½åˆªé™¤ï¼Œå› ç‚ºé‚„有以下的é é¢åœ¨ä½¿ç”¨å®ƒï¼š';
+$lang['ref_hidden'] = '有些引用到這個的é é¢ï¼Œæ‚¨ç›®å‰é‚„沒有權é™å¯è®€å–喔。';
+$lang['hits'] = '個符åˆ';
+$lang['quickhits'] = '符åˆçš„é é¢å稱';
+$lang['toc'] = '本é ç›®éŒ„';
+$lang['current'] = 'ç›®å‰ç‰ˆæœ¬';
+$lang['yours'] = '您的版本';
+$lang['diff'] = '顯示跟目å‰ç‰ˆæœ¬çš„差異';
+$lang['diff2'] = '顯示與é¸æ“‡ç‰ˆæœ¬çš„差異';
+$lang['line'] = '行';
+$lang['breadcrumb'] = 'ç›®å‰çš„足跡';
+$lang['youarehere'] = '(ç›®å‰æ‰€åœ¨ä½ç½®)';
+$lang['lastmod'] = '上一次變更';
+$lang['by'] = '來自';
+$lang['deleted'] = '移除';
+$lang['created'] = '建立';
+$lang['restored'] = 'å·²æ¢å¾©ç‚ºèˆŠç‰ˆ';
+$lang['external_edit'] = '外部編輯';
+$lang['summary'] = '編輯摘è¦';
+$lang['noflash'] = '顯示此內容需è¦<a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a>';
+$lang['download'] = '下載程å¼ç¢¼ç‰‡æ®µ';
+$lang['mail_newpage'] = '增加的é é¢:';
+$lang['mail_changed'] = '變更的é é¢:';
+$lang['mail_new_user'] = '新使用者:';
+$lang['mail_upload'] = '已上傳檔案:';
+$lang['qb_bold'] = 'ç²—é«”';
+$lang['qb_italic'] = '斜體';
+$lang['qb_underl'] = '底線';
+$lang['qb_code'] = '程å¼ç¢¼';
+$lang['qb_strike'] = '刪除線';
+$lang['qb_h1'] = 'H1 標題';
+$lang['qb_h2'] = 'H2 標題';
+$lang['qb_h3'] = 'H3 標題';
+$lang['qb_h4'] = 'H4 標題';
+$lang['qb_h5'] = 'H5 標題';
+$lang['qb_h'] = '標題';
+$lang['qb_hs'] = 'é¸æ“‡æ¨™é¡Œ';
+$lang['qb_hplus'] = '較大標題';
+$lang['qb_hminus'] = '較å°æ¨™é¡Œ';
+$lang['qb_hequal'] = 'åŒç­‰æ¨™é¡Œ';
+$lang['qb_link'] = 'WIKI內部連çµ';
+$lang['qb_extlink'] = '連çµå¤–部URL';
+$lang['qb_hr'] = '水平線';
+$lang['qb_ol'] = '項目表(數字)';
+$lang['qb_ul'] = '項目表(符號)';
+$lang['qb_media'] = '加入圖片或檔案';
+$lang['qb_sig'] = 'æ’入簽å';
+$lang['qb_smileys'] = '表情符號';
+$lang['qb_chars'] = '特殊字元';
+$lang['upperns'] = 'å‰å¾€çˆ¶å‘½å空間';
+$lang['admin_register'] = '新增使用者中';
+$lang['metaedit'] = '更改相片資料(EXIF)';
+$lang['metasaveerr'] = '相片資料(EXIF)儲存失敗喔';
+$lang['metasaveok'] = '相片資料已æˆåŠŸå„²å­˜';
+$lang['img_backto'] = '回上一é ';
+$lang['img_title'] = '標題';
+$lang['img_caption'] = '照片說明';
+$lang['img_date'] = '日期';
+$lang['img_fname'] = '檔å';
+$lang['img_fsize'] = '大å°';
+$lang['img_artist'] = 'æ”影者';
+$lang['img_copyr'] = '版權';
+$lang['img_format'] = 'æ ¼å¼';
+$lang['img_camera'] = '相機';
+$lang['img_keywords'] = 'é—œéµå­—';
+$lang['subscribe_success'] = '已將『%sã€åŠ å…¥ %s 訂閱清單內';
+$lang['subscribe_error'] = 'è¦æŠŠã€Ž%sã€åŠ å…¥ %s 訂閱清單時,發生錯誤';
+$lang['subscribe_noaddress'] = '您的帳號內並無 Email 資料,因此還無法使用訂閱功能唷。';
+$lang['unsubscribe_success'] = '已將『%sã€å¾ž %s 訂閱清單中移除';
+$lang['unsubscribe_error'] = 'è¦æŠŠã€Ž%sã€å¾ž %s 訂閱清單中移除時,發生錯誤';
+$lang['authmodfailed'] = '帳號èªè­‰çš„設定ä¸æ­£ç¢ºï¼Œè«‹é€šçŸ¥è©² Wiki 管ç†å“¡ã€‚';
+$lang['authtempfail'] = '帳號èªè­‰ç›®å‰æš«ä¸æ供,若本狀æ³æŒçºŒç™¼ç”Ÿçš„話,請通知該 Wiki 管ç†å“¡ã€‚';
+$lang['i_chooselang'] = 'é¸æ“‡æ‚¨çš„語系';
+$lang['i_installer'] = 'DokuWiki 安è£å·¥å…·';
+$lang['i_wikiname'] = 'Wikiå稱';
+$lang['i_enableacl'] = '使用ACL(建議)';
+$lang['i_superuser'] = '超級用戶';
+$lang['i_problems'] = 'Installer發ç¾ä¸€äº›å•é¡Œï¼Œé¡¯ç¤ºå¦‚下。您將無法繼續直到您修正它們。';
+$lang['i_modified'] = '由於安全上的考慮,該腳本隻能用於全新且åšä»»ä½•æ”¹å‹•çš„ Dokuwiki 安è£åŒ…。
+ 您å¯ä»¥é‡æ–°è§£å£“下載的程åºåŒ…,或查閱完整的
+ <a href=\"http://dokuwiki.org/install\">Dokuwiki 安è£æŒ‡å—</a>';
+$lang['i_funcna'] = 'PHP function <code>%s</code> 無法使用. 也許你的主機供應者åœç”¨å®ƒæˆ–是其他原因?';
+$lang['i_phpver'] = '您的 PHP 版本 <code>%s</code> 比所需è¦çš„版本 <code>%s</code> 還低. 您需è¦æ›´æ–°æ‚¨çš„PHP.';
+$lang['i_permfail'] = '<code>%s</code> 無法被 DokuWiki 所寫入. 您需è¦ä¿®æ­£è©²ç›®éŒ„的權é™!';
+$lang['i_confexists'] = '<code>%s</code>已經存在';
+$lang['i_writeerr'] = '無法建立 <code>%s</code>. 您必須檢查目錄/檔案的權é™ä¸¦æ‰‹å‹•å»ºç«‹è©²æª”案.';
+$lang['i_badhash'] = '無法辨識或被變更的dokuwiki.php (hash=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - éžæ³•æˆ–是空的值';
+$lang['i_success'] = '設定已經æˆåŠŸåœ°å®Œæˆ. 您ç¾åœ¨å¯ä»¥åˆªé™¤ install.php 這個檔案. 繼續到
+<a href="doku.php">您的新 DokuWiki</a>.';
+$lang['i_failure'] = '在寫入設定檔時發生了一些錯誤.您必須在使用<a href="doku.php">ä½ çš„æ–° Dokuwiki</a> 之å‰æ‰‹å‹•ä¿®æ­£å®ƒå€‘';
+$lang['i_policy'] = 'åˆæ­¥çš„ACL政策';
+$lang['i_pol0'] = '開放的 Wiki (å¯è¢«ä»»ä½•äººè®€, 寫, 上傳)';
+$lang['i_pol1'] = '公開的 Wiki (å¯è¢«ä»»ä½•äººè®€, 但是åªèƒ½è¢«è¨»å†Šçš„使用者寫與上傳)';
+$lang['i_pol2'] = 'å°é–‰çš„ Wiki (åªèƒ½è¢«è¨»å†Šçš„使用者讀, 寫, 上傳)';
+$lang['i_retry'] = 'é‡è©¦';
+$lang['mu_intro'] = '您å¯ä»¥åœ¨é€™è£¡ä¸€æ¬¡ä¸Šå‚³å¤šå€‹æª”案。按下ç€è¦½æŒ‰éˆ•åŠ å…¥æª”案,然後按上傳按鈕開始上傳。';
+$lang['mu_gridname'] = '檔案å稱';
+$lang['mu_gridsize'] = '檔案大å°';
+$lang['mu_gridstat'] = '狀態';
+$lang['mu_namespace'] = '命å空間';
+$lang['mu_browse'] = 'ç€è¦½';
+$lang['mu_toobig'] = '太大';
+$lang['mu_ready'] = '準備上傳';
+$lang['mu_done'] = '完æˆ';
+$lang['mu_fail'] = '失敗';
+$lang['mu_authfail'] = '作業階段逾時';
+$lang['mu_progress'] = '@PCT@% 已上傳';
+$lang['mu_filetypes'] = '接å—的檔案類型';
+$lang['mu_info'] = '檔案已上傳。';
+$lang['mu_lasterr'] = '最新一筆錯誤紀錄:';
+$lang['recent_global'] = '您正在閱讀命å空間: <b>%s</b> 中的變更。您亦å¯è§€çœ‹æ•´å€‹ wiki çš„<a href="%s">最近更新</a>。';
+$lang['years'] = '%d å¹´å‰';
+$lang['months'] = '%d 個月å‰';
+$lang['weeks'] = '%d 週å‰';
+$lang['days'] = '%d 天å‰';
+$lang['hours'] = '%d 個å°æ™‚å‰';
+$lang['minutes'] = '%d 分é˜å‰';
+$lang['seconds'] = '%s 秒é˜å‰';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt
new file mode 100644
index 000000000..16a06e802
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt
@@ -0,0 +1,3 @@
+====== é é¢ç›®å‰æ˜¯éŽ–定狀態中 ======
+
+本é ç›®å‰æ­£ç”±å…¶ä»–使用者編修中,您必須先等到他完æˆæˆ–者鎖定狀態自動解除。
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt
new file mode 100644
index 000000000..fda49a199
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt
@@ -0,0 +1,5 @@
+====== 登入 ======
+
+您尚未登入,請輸入您的使用者å稱跟密碼。 å¦å¤–,ç€è¦½å™¨éœ€è¦æ‰“é–‹ cookies 設定以進行登入。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt
new file mode 100644
index 000000000..f6bb0480e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt
@@ -0,0 +1,16 @@
+在您的 DokuWiki 有新增ã€è®Šå‹•éŽä¸€é äº†ã€‚以下是細節資料:
+
+日期 : @DATE@
+ç€è¦½å™¨ : @BROWSER@
+IP-Address : @IPADDRESS@
+機器å稱 : @HOSTNAME@
+舊版次 : @OLDPAGE@
+新版次 : @NEWPAGE@
+ç·¨è¼¯æ‘˜è¦ : @SUMMARY@
+User : @USER@
+
+@DIFF@
+
+
+--
+這å°ä¿¡æ˜¯ç”± @DOKUWIKIURL@ çš„ DokuWiki 自動產生
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt
new file mode 100644
index 000000000..bd38f5586
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt
@@ -0,0 +1,3 @@
+====== ç›®å‰å°šæœªæœ‰è©²ä¸»é¡Œå–” ======
+
+您目å‰åˆ°çš„這主題尚未建立é é¢ã€‚但也å¯ä»¥ç”¨ 「''建立此é ''ã€ä¾†å»ºç«‹ã€‚ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt
new file mode 100644
index 000000000..e2b6a175b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt
@@ -0,0 +1,4 @@
+====== 很抱歉,並無該版次的 ======
+
+該版次的文件並ä¸å­˜åœ¨ã€‚請用 「''舊版''〠éµä¾†æª¢è¦–ç›®å‰è©²æ–‡ä»¶çš„所有舊版次。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt
new file mode 100644
index 000000000..c68f94819
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt
@@ -0,0 +1,4 @@
+====== é è¦½ ======
+
+以下是é è¦½è©²æ–‡ä»¶çš„狀態。請記ä½ï¼š**它還沒被儲存喔**!
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt
new file mode 100644
index 000000000..b8ad7e1ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt
@@ -0,0 +1,13 @@
+@FULLNAME@ 您好ï¼
+
+有人請求為您在 @DOKUWIKIURL@ 注冊的用戶å @TITLE@ 發é€æ–°å¯†ç¢¼
+
+如果您沒有請求發é€æ–°å¯†ç¢¼ï¼Œè«‹å¿½ç•¥é€™å°éƒµä»¶ã€‚
+
+為了確èªç™¼é€æ–°å¯†ç¢¼è«‹æ±‚的確來自您,請使用下é¢çš„éˆæŽ¥ã€‚
+
+@CONFIRM@
+
+--
+本郵件由 DokuWiki 自動創建
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt
new file mode 100644
index 000000000..364f4adea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt
@@ -0,0 +1,3 @@
+本é æ˜¯å”¯è®€çš„,å¯ä»¥çœ‹æ˜¯æ€Žéº¼å¯«çš„,但ä¸èƒ½æ›´å‹•å®ƒã€‚如這是誤判,請å‘管ç†å“¡è©¢å•ã€‚
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt
new file mode 100644
index 000000000..28314294b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt
@@ -0,0 +1,5 @@
+====== 最近更新 ======
+
+以下的é é¢æ˜¯æœ€è¿‘æ‰æ›´æ–°çš„:
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt
new file mode 100644
index 000000000..1a5ec67e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt
@@ -0,0 +1,4 @@
+====== 註冊新使用者 ======
+
+請填以下欄ä½çš„資料來註冊 wiki 帳號,\\ 還有請確定您有æ供一個 **åˆæ³•çš„ e-mail 地å€** - 也就是您的新密碼會被寄到那。\\ 而登錄的使用者å稱應該是åˆæ³•çš„。 [[doku>pagename|pagename]].
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt
new file mode 100644
index 000000000..434f4f877
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt
@@ -0,0 +1,13 @@
+一個新使用者已經註冊. 以下是詳細內容:
+
+帳號 : @NEWUSER@
+å…¨å : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+日期 : @DATE@
+ç€è¦½å™¨ : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+
+--
+這å°ä¿¡æ˜¯ç”± @DOKUWIKIURL@ çš„ DokuWiki 所產生的 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt
new file mode 100644
index 000000000..9250bf4e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt
@@ -0,0 +1,3 @@
+====== 寄é€æ–°å¯†ç¢¼ ======
+
+請在下é¢çš„欄ä½å¡«ä¸Šè³‡æ–™ï¼Œä»¥ä¾¿é‡æ–°å¯„發新的 wiki 密碼到您註冊時所填的 email 地å€ã€‚ 帳號(user name)就是你的 wiki 帳號。
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt
new file mode 100644
index 000000000..479705b95
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt
@@ -0,0 +1,3 @@
+====== 舊版 ======
+
+以下是該文件的舊版本。如è¦æ¢å¾©æˆæŸå€‹èˆŠç‰ˆæ¬¡ï¼Œå°±é»žä¸‹å®ƒï¼Œç„¶å¾ŒæŒ‰ã€Œç·¨ä¿®æœ¬é ã€ï¼Œä¸¦å­˜æª”起來就å¯ä»¥äº†ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt
new file mode 100644
index 000000000..9f3d8ee94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt
@@ -0,0 +1,5 @@
+====== æœå°‹ç²¾éˆ ======
+
+æ示:您å¯ä»¥åœ¨ä¸‹åˆ—找到您的æœå°‹çµæžœã€‚若沒找到妳想找的æ±è¥¿ï¼Œé‚£éº¼å¯ä»¥åœ¨å¦³æŸ¥è©¢ä¹‹å¾Œç”¨ã€Œå»ºç«‹æ­¤é ã€ä¾†å»ºç«‹æ–°çš„é é¢å“¦ã€‚
+
+===== æœå°‹çµæžœ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt
new file mode 100644
index 000000000..35b6aa59f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt
@@ -0,0 +1,2 @@
+**這是本文件的舊版了喔ï¼**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt
new file mode 100644
index 000000000..55b67ed16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt
@@ -0,0 +1,31 @@
+# 這檔是製作索引檔(index)時ä¸è¦åˆ—入的關éµå­—,格å¼ç‚ºæ¯å­—(è©ž)就使用一行。
+# 在修改時,請注æ„è¦ç”¨ UNIX æ ¼å¼çš„æ›è¡Œç¬¦è™Ÿ(newline)處ç†ï¼Œè€Œéž DOS çš„ CR-LR å–”
+# (如果在 MS Windows 環境使用的話,å¯ä½¿ç”¨ vim win32版 或 UltraEdit或其他類似編輯器修改)
+#
+# 還有,ä¸å¿…把å°æ–¼ 3 個字元(英數字元)都包括進來。
+# ç›®å‰æœ¬æ¸…單的內容是以 http://www.ranks.nl/stopwords/ 為基礎而發展的。
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt
new file mode 100644
index 000000000..3ccb80091
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt
@@ -0,0 +1,16 @@
+哈囉,您好!
+
+在 @TITLE@ çš„ @PAGE@ é é¢å·²ç¶“有了變更囉,以下是變動幅度紀錄:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+è‹¥è¦å–消本é çš„變動訂閱通知,請先登入
+@DOKUWIKIURL@ ,然後進入
+@NEWPAGE@
+並é¸æ“‡ 『退訂更動通知ã€ï¼Œè¬è¬ ^_^
+
+--
+本信是由 DokuWiki 系統自動產生
+@DOKUWIKIURL@
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt
new file mode 100644
index 000000000..f92c215ea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt
@@ -0,0 +1,5 @@
+====== 更新個人資料 ======
+
+請注æ„:åªéœ€è®Šæ›´æƒ³æ›´æ–°çš„資料欄ä½å°±å¥½ï¼Œè€Œå¸³è™Ÿå稱是ä¸å¯ä»¥è®Šæ›´çš„。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt
new file mode 100644
index 000000000..e7222959b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt
@@ -0,0 +1,13 @@
+一個檔案已經被上傳到您的 DokuWiki. 以下是詳細內容:
+
+檔å : @MEDIA@
+日期 : @DATE@
+ç€è¦½å™¨ : @BROWSER@
+IP-Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+尺寸 : @SIZE@
+MIME Type : @MIME@
+帳號 : @USER@
+
+--
+這å°ä¿¡æ˜¯ç”± @DOKUWIKIURL@ çš„ DokuWiki 所產生的 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt
new file mode 100644
index 000000000..671e88b87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt
@@ -0,0 +1,4 @@
+====== 拒絕垃圾資料(SPAM blocked) ======
+
+您的變更並**ä¸æœƒ**被存起來,因為它包å«äº†ä¸€äº›è¢«é™åˆ¶çš„字眼。若您還試著è¦ä¸Ÿåžƒåœ¾è³‡æ–™åˆ° Wiki 的話, -- Bad dog! ä¸éŽï¼Œè‹¥æ‚¨èªç‚ºé€™æ˜¯èª¤åˆ¤ï¼Œé‚£éº¼è«‹èˆ‡é€™å€‹ Wiki 的管ç†å“¡(Admin)談。
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt
new file mode 100644
index 000000000..bf6476e9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt
@@ -0,0 +1,3 @@
+====== ç®¡ç† ======
+
+在下é¢æ‚¨èƒ½æ‰¾åˆ° DokuWiki 中å¯ç”¨ç®¡ç†ä»»åŠ¡çš„列表。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt
new file mode 100644
index 000000000..19e3feea6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt
@@ -0,0 +1,3 @@
+====== åå‘链接 ======
+
+这里是能够åå‘链接到当å‰é¡µé¢çš„其他页é¢åˆ—表。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt
new file mode 100644
index 000000000..92eedf45b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt
@@ -0,0 +1,5 @@
+====== 存在一个更新的版本 ======
+
+您编辑的文档存在一个更新的版本。这ç§æƒ…况的å‘生是因为在您编辑时有å¦ä¸€ä¸ªç”¨æˆ·æ›´æ”¹äº†è¯¥æ–‡æ¡£ã€‚
+
+请仔细检查下é¢åˆ—出的差别,并决定ä¿ç•™å“ªä¸ªç‰ˆæœ¬ã€‚如果您选择“ä¿å­˜â€ï¼Œæ‚¨çš„版本将被ä¿ç•™ã€‚点击“å–消â€å°†ä¿ç•™å½“å‰ç‰ˆæœ¬ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt
new file mode 100644
index 000000000..276741c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt
@@ -0,0 +1,3 @@
+====== æ‹’ç»æŽˆæƒ ======
+
+对ä¸èµ·ï¼Œæ‚¨æ²¡æœ‰è¶³å¤Ÿæƒé™ï¼Œæ— æ³•ç»§ç»­ã€‚也许您忘了登录? \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt
new file mode 100644
index 000000000..19e8ef752
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt
@@ -0,0 +1,3 @@
+====== 差别 ======
+
+这里会显示出您选择的修订版和当å‰ç‰ˆæœ¬ä¹‹é—´çš„差别。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt
new file mode 100644
index 000000000..615cb07bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt
@@ -0,0 +1,7 @@
+====== å‘现è‰ç¨¿ ======
+
+您在本页最åŽçš„编辑过程没有正常结æŸã€‚DokuWiki 在您的编辑过程中自动ä¿å­˜äº†ä¸€ä»½è‰ç¨¿ï¼Œæ‚¨çŽ°åœ¨å¯ä»¥ä½¿ç”¨å®ƒç»§ç»­ç¼–辑。 下é¢æ˜¯æœ€åŽç¼–辑时的数æ®ã€‚
+
+请决定您希望 //æ¢å¤// 您丢失的编辑数æ®ï¼Œ//删除// 自动ä¿å­˜çš„è‰ç¨¿ï¼Œæˆ–者 //å–消// 本编辑过程。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt
new file mode 100644
index 000000000..846e89817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt
@@ -0,0 +1 @@
+编辑本页åŽè¯·ç‚¹å‡»â€œä¿å­˜â€ã€‚请å‚阅 [[wiki:syntax]] 了解维基语法。åªæœ‰åœ¨æ‚¨èƒ½ **改进** 该页é¢çš„å‰æ下æ‰ç¼–辑它。如果您想å°è¯•ä¸€äº›ä¸œè¥¿ï¼Œè¯·å…ˆåˆ° [[playground:playground|playground]] 热身。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt
new file mode 100644
index 000000000..82013cbbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt
@@ -0,0 +1,2 @@
+**您载入了该文档旧的修订版ï¼** 如果您ä¿å­˜äº†å®ƒï¼Œæ‚¨å°±ä¼šç”¨è¿™äº›æ•°æ®åˆ›å»ºä¸€ä»½æ–°çš„修订版。
+---- \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt
new file mode 100644
index 000000000..efb07b9e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt
@@ -0,0 +1,3 @@
+====== 索引 ======
+
+è¿™æ˜¯æ ¹æ® [[doku>namespaces|命å空间]] 排列的所有å¯è®¿é—®é¡µé¢çš„索引。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html
new file mode 100644
index 000000000..8c7a93c19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html
@@ -0,0 +1,8 @@
+<p>本页é¢æ—¨åœ¨å¸®åŠ©æ‚¨å®Œæˆç¬¬ä¸€æ¬¡å®‰è£…å’Œé…ç½® <a href="http://dokuwiki.org">Dokuwiki</a>。关于安装工具的更多信æ¯è¯·å‚阅其 <a href="http://dokuwiki.org/installer">官方文档页é¢</a>。</p>
+
+<p>DokuWiki 使用普通的文件ä¿å­˜ç»´åŸºé¡µé¢å’Œå…¶ä»–与这些页é¢æŒ‚é’©çš„ä¿¡æ¯ï¼ˆä¾‹å¦‚:图åƒï¼Œæœç´¢ç´¢å¼•ï¼Œä¿®è®¢è®°å½•ç­‰ï¼‰ã€‚为了能正常è¿è¡Œï¼ŒDokuWiki <strong>å¿…é¡»</strong> 拥有针对那些路径和文件的写æƒé™ã€‚本安装工具ä¸èƒ½ç”¨äºŽè®¾ç½®è¿™äº›æƒé™ã€‚对æƒé™çš„æ“作通常通过命令行或使用您的网络æœåŠ¡æ供商的 FTP 或控制é¢æ¿ï¼ˆä¾‹å¦‚ cPanel)进行æ“作。</p>
+
+<p>本安装工具将设置您的 DokuWiki é…ç½® <acronym title="访问控制列表">ACL</acronym>,它能让管ç†å‘˜ç™»å½•å¹¶ä½¿ç”¨â€œç®¡ç†â€åŠŸèƒ½æ¥å®‰è£…æ’件,管ç†ç”¨æˆ·ï¼Œç®¡ç†è®¿é—®æƒé™å’Œå…¶ä»–é…置设置。它并ä¸æ˜¯ DokuWiki 正常è¿è¡Œæ‰€å¿…须的,但安装之åŽå®ƒå°†æ›´æ–¹ä¾¿æ‚¨çš„管ç†ã€‚</p>
+
+<p>有ç»éªŒçš„用户或有特殊需求的用户请å‚阅更详细的 <a href="http://dokuwiki.org/install">安装指å—</a>
+å’Œ <a href="http://dokuwiki.org/config">é…置设置</a>。</p>
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php
new file mode 100644
index 000000000..ffb759fde
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php
@@ -0,0 +1,230 @@
+<?php
+/**
+ * Chinese(Simplified) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author ZDYX <zhangduyixiong@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
+ * @author George Sheraton guxd@163.com
+ * @author Simon zhan <simonzhan@21cn.com>
+ * @author mr.jinyi@gmail.com
+ */
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+$lang['doublequoteopening'] = '“';
+$lang['doublequoteclosing'] = 'â€';
+$lang['singlequoteopening'] = '‘';
+$lang['singlequoteclosing'] = '’';
+$lang['apostrophe'] = '’';
+$lang['btn_edit'] = '编辑本页';
+$lang['btn_source'] = '显示æºæ–‡ä»¶';
+$lang['btn_show'] = '显示页é¢';
+$lang['btn_create'] = '创建该页é¢';
+$lang['btn_search'] = 'æœç´¢';
+$lang['btn_save'] = 'ä¿å­˜';
+$lang['btn_preview'] = '预览';
+$lang['btn_top'] = '到顶部';
+$lang['btn_newer'] = '<< 较新的';
+$lang['btn_older'] = '较旧的 >>';
+$lang['btn_revs'] = '修订记录';
+$lang['btn_recent'] = '最近更改';
+$lang['btn_upload'] = '上传';
+$lang['btn_cancel'] = 'å–消';
+$lang['btn_index'] = '索引';
+$lang['btn_secedit'] = '编辑';
+$lang['btn_login'] = '登录';
+$lang['btn_logout'] = '退出';
+$lang['btn_admin'] = '管ç†';
+$lang['btn_update'] = 'æ›´æ–°';
+$lang['btn_delete'] = '删除';
+$lang['btn_back'] = '返回';
+$lang['btn_backlink'] = 'åå‘链接';
+$lang['btn_backtomedia'] = '返回到媒体文件选择工具';
+$lang['btn_subscribe'] = '订阅本页更改';
+$lang['btn_unsubscribe'] = '退订本页更改';
+$lang['btn_subscribens'] = '订阅命å空间更改';
+$lang['btn_unsubscribens'] = '退订命å空间更改';
+$lang['btn_profile'] = '更新个人信æ¯';
+$lang['btn_reset'] = 'é‡è®¾';
+$lang['btn_resendpwd'] = 'å‘é€æ–°å¯†ç ';
+$lang['btn_draft'] = '编辑è‰ç¨¿';
+$lang['btn_recover'] = 'æ¢å¤è‰ç¨¿';
+$lang['btn_draftdel'] = '删除è‰ç¨¿';
+$lang['loggedinas'] = '登录为';
+$lang['user'] = '用户å';
+$lang['pass'] = '密ç ';
+$lang['newpass'] = '请输入新密ç ';
+$lang['oldpass'] = '请输入当å‰å¯†ç ';
+$lang['passchk'] = '请å†è¾“一次';
+$lang['remember'] = 'è®°ä½æˆ‘';
+$lang['fullname'] = 'å…¨å';
+$lang['email'] = 'E-Mail';
+$lang['register'] = '注册';
+$lang['profile'] = '用户信æ¯';
+$lang['badlogin'] = '对ä¸èµ·ï¼Œç”¨æˆ·å或密ç é”™è¯¯ã€‚';
+$lang['minoredit'] = '轻微修改';
+$lang['draftdate'] = 'è‰ç¨¿è‡ªåŠ¨ä¿å­˜äºŽ';
+$lang['nosecedit'] = '在您编辑期间本页刚被他人修改过,局部信æ¯å·²è¿‡æœŸï¼Œæ•…载入全页。';
+$lang['regmissing'] = '对ä¸èµ·ï¼Œæ‚¨å¿…须填写所有的区域。';
+$lang['reguexists'] = '对ä¸èµ·ï¼Œè¯¥ç”¨æˆ·åå·²ç»å­˜åœ¨ã€‚';
+$lang['regsuccess'] = '新用户已建立,密ç å°†é€šè¿‡ç”µå­é‚®ä»¶å‘é€ç»™æ‚¨ã€‚';
+$lang['regsuccess2'] = '新用户已建立';
+$lang['regmailfail'] = 'å‘é€å¯†ç é‚®ä»¶æ—¶äº§ç”Ÿé”™è¯¯ã€‚请è”系管ç†å‘˜ï¼';
+$lang['regbadmail'] = '您输入的邮件地å€æœ‰é—®é¢˜â€”—如果您认为这是系统错误,请è”系管ç†å‘˜ã€‚';
+$lang['regbadpass'] = '您输入的密ç ä¸Žç³»ç»Ÿäº§ç”Ÿçš„ä¸ç¬¦ï¼Œè¯·é‡è¯•ã€‚';
+$lang['regpwmail'] = '您的 DokuWiki 密ç ';
+$lang['reghere'] = '还没有账å·ï¼Ÿç«‹å³æ³¨å†Œ';
+$lang['profna'] = '本维基ä¸æ”¯æŒä¿®æ”¹ä¸ªäººä¿¡æ¯';
+$lang['profnochange'] = '没有改动,ä¸è¿›è¡Œæ“作。';
+$lang['profnoempty'] = 'ä¸å…许使用空的用户å或邮件地å€ã€‚';
+$lang['profchanged'] = '用户信æ¯æ›´æ–°æˆåŠŸã€‚';
+$lang['pwdforget'] = '忘记密ç ï¼Ÿç«‹å³èŽ·å–新密ç ';
+$lang['resendna'] = '本维基ä¸æ”¯æŒäºŒæ¬¡å‘é€å¯†ç ã€‚';
+$lang['resendpwd'] = 'å‘é€æ–°å¯†ç ç»™';
+$lang['resendpwdmissing'] = '对ä¸èµ·ï¼Œæ‚¨å¿…须填写所有的区域。';
+$lang['resendpwdnouser'] = '对ä¸èµ·ï¼Œåœ¨æˆ‘们的用户数æ®ä¸­æ‰¾ä¸åˆ°è¯¥ç”¨æˆ·ã€‚';
+$lang['resendpwdbadauth'] = '对ä¸èµ·ï¼Œè¯¥è®¤è¯ç é”™è¯¯ã€‚请使用完整的确认链接。';
+$lang['resendpwdconfirm'] = '确认链接已ç»é€šè¿‡é‚®ä»¶å‘é€ç»™æ‚¨äº†ã€‚';
+$lang['resendpwdsuccess'] = '您的新密ç å·²ç»é€šè¿‡é‚®ä»¶å‘é€ç»™æ‚¨äº†ã€‚';
+$lang['license'] = '除é¢å¤–注明的地方外,本维基上的内容按下列许å¯åè®®å‘布:';
+$lang['licenseok'] = '当您选择开始编辑本页,å³å¯“示你åŒæ„将你贡献的内容按下列许å¯åè®®å‘布:';
+$lang['txt_upload'] = '选择è¦ä¸Šä¼ çš„文件';
+$lang['txt_filename'] = '上传并é‡å‘½å为(å¯é€‰ï¼‰';
+$lang['txt_overwrt'] = '覆盖已存在的åŒå文件';
+$lang['lockedby'] = 'ç›®å‰å·²è¢«ä¸‹åˆ—人员é”定';
+$lang['lockexpire'] = '预计é”定解除于';
+$lang['willexpire'] = '您对本页的独有编辑æƒå°†äºŽä¸€åˆ†é’Ÿä¹‹åŽè§£é™¤ã€‚\n为了防止与其他人的编辑冲çªï¼Œè¯·ä½¿ç”¨é¢„览按钮é‡è®¾è®¡æ—¶å™¨ã€‚';
+$lang['notsavedyet'] = '未ä¿å­˜çš„更改将丢失。\n真的è¦ç»§ç»­ï¼Ÿ';
+$lang['rssfailed'] = '获å–该 RSS ä¿¡æ¯æ—¶äº§ç”Ÿé”™è¯¯ï¼š';
+$lang['nothingfound'] = '什么都没有找到。';
+$lang['mediaselect'] = '媒体文件';
+$lang['fileupload'] = '上传媒体文件';
+$lang['uploadsucc'] = '上传æˆåŠŸ';
+$lang['uploadfail'] = '上传失败。也许是上传æƒé™é”™è¯¯ã€‚';
+$lang['uploadwrong'] = '上传失败。该扩展å被ç¦æ­¢ã€‚';
+$lang['uploadexist'] = '文件已存在。ä¸è¿›è¡Œæ“作。';
+$lang['uploadbadcontent'] = '上传的文件与扩展å %s ä¸ç¬¦ã€‚';
+$lang['uploadspam'] = '上传æ“作被垃圾信æ¯é»‘åå•é˜»æ­¢ã€‚';
+$lang['uploadxss'] = '上传æ“作因å¯èƒ½å­˜åœ¨æ¶æ„内容而被阻止。';
+$lang['uploadsize'] = '上传的文件过大。(最大 %s)';
+$lang['deletesucc'] = '文件“%sâ€å·²ç»è¢«åˆ é™¤ã€‚';
+$lang['deletefail'] = '无法删除“%sâ€- 请检查æƒé™ã€‚';
+$lang['mediainuse'] = '文件“%sâ€æ— æ³•åˆ é™¤ - 它正被使用中。';
+$lang['namespaces'] = '命å空间';
+$lang['mediafiles'] = 'å¯ç”¨çš„文件';
+$lang['js']['keepopen'] = '选中åŽä¸è‡ªåŠ¨å…³é—­çª—å£';
+$lang['js']['hidedetails'] = 'éšè—详细信æ¯';
+$lang['js']['nosmblinks'] = '连接到 Windows 共享功能åªæœ‰åœ¨ IE æµè§ˆå™¨ä¸­æ‰èƒ½æ­£å¸¸ä½¿ç”¨ã€‚
+但您ä»èƒ½å¤åˆ¶å¹¶ç²˜è´´è¯¥é“¾æŽ¥ã€‚';
+$lang['js']['mu_btn'] = '一次上传了多个文件';
+$lang['mediausage'] = '使用下列字符链接到该文件:';
+$lang['mediaview'] = '查看该文件';
+$lang['mediaroot'] = '根目录';
+$lang['mediaupload'] = '上传文件至当å‰çš„命å空间。è¦åˆ›å»ºæ¬¡çº§å‘½å空间,将其å称加在“上传并é‡å‘½å为â€æ–‡ä»¶åçš„å‰é¢ï¼Œå¹¶ç”¨è‹±æ–‡å†’å·éš”å¼€';
+$lang['mediaextchange'] = '文件的扩展åç”± .%s 改为了 .%sï¼';
+$lang['reference'] = '相关的';
+$lang['ref_inuse'] = '该文件无法删除,因为它正被下列页é¢ä½¿ç”¨ï¼š';
+$lang['ref_hidden'] = '一些相关的页é¢æ‚¨å¹¶æ²¡æœ‰æƒé™é˜…读';
+$lang['hits'] = '符åˆ';
+$lang['quickhits'] = '匹é…的页é¢å称';
+$lang['toc'] = '目录';
+$lang['current'] = '当å‰ç‰ˆæœ¬';
+$lang['yours'] = '您的版本';
+$lang['diff'] = '显示与当å‰ç‰ˆæœ¬çš„差别';
+$lang['diff2'] = '显示跟目å‰ç‰ˆæœ¬çš„差异';
+$lang['line'] = '行';
+$lang['breadcrumb'] = '您的足迹';
+$lang['youarehere'] = '您在这里';
+$lang['lastmod'] = '最åŽæ›´æ”¹';
+$lang['by'] = 'ç”±';
+$lang['deleted'] = '移除';
+$lang['created'] = '创建';
+$lang['restored'] = 'å·²æ¢å¤ä¸ºæ—§ç‰ˆ';
+$lang['external_edit'] = '外部编辑';
+$lang['summary'] = '编辑摘è¦';
+$lang['noflash'] = 'éœ€è¦ <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash æ’件</a> æ¥æ’­æ”¾æœ¬å†…容。 ';
+$lang['mail_newpage'] = '添加页é¢ï¼š';
+$lang['mail_changed'] = '更改页é¢ï¼š';
+$lang['mail_new_user'] = '新用户:';
+$lang['mail_upload'] = '已上传的文件:';
+$lang['qb_bold'] = '粗体';
+$lang['qb_italic'] = '斜体';
+$lang['qb_underl'] = '下划线';
+$lang['qb_code'] = '代ç ';
+$lang['qb_strike'] = '删除线';
+$lang['qb_h1'] = '标题 H1';
+$lang['qb_h2'] = '标题 H2 ';
+$lang['qb_h3'] = '标题 H3';
+$lang['qb_h4'] = '标题 H4';
+$lang['qb_h5'] = '标题 H5';
+$lang['qb_link'] = '内部链接';
+$lang['qb_extlink'] = '外部链接';
+$lang['qb_hr'] = '水平线';
+$lang['qb_ol'] = '数字列表项目';
+$lang['qb_ul'] = '普通列表项目';
+$lang['qb_media'] = 'æ’入图åƒæˆ–其他文件';
+$lang['qb_sig'] = 'æ’入签å';
+$lang['qb_smileys'] = '表情符å·';
+$lang['qb_chars'] = '特殊字符';
+$lang['js']['del_confirm'] = '真的è¦åˆ é™¤é€‰ä¸­çš„项目å—?';
+$lang['admin_register'] = '添加新用户';
+$lang['metaedit'] = '编辑元数æ®';
+$lang['metasaveerr'] = '写入元数æ®å¤±è´¥';
+$lang['metasaveok'] = '元数æ®å·²ä¿å­˜';
+$lang['img_backto'] = '返回到';
+$lang['img_title'] = '标题';
+$lang['img_caption'] = '说明';
+$lang['img_date'] = '日期';
+$lang['img_fname'] = 'å称';
+$lang['img_fsize'] = '大å°';
+$lang['img_artist'] = '摄影师';
+$lang['img_copyr'] = '版æƒ';
+$lang['img_format'] = 'æ ¼å¼';
+$lang['img_camera'] = '相机';
+$lang['img_keywords'] = '关键字';
+$lang['subscribe_success'] = '已将 %s æˆåŠŸæ·»åŠ åˆ° %s 的订阅列表';
+$lang['subscribe_error'] = '无法将 %s 添加到 %s 的订阅列表';
+$lang['subscribe_noaddress'] = '您的登录信æ¯ä¸­ä¸åŒ…å«ç”µå­é‚®ä»¶åœ°å€ï¼Œæ‚¨æ— æ³•åŠ å…¥è®¢é˜…列表';
+$lang['unsubscribe_success'] = '已将 %s 从 %s 的订阅列表中æˆåŠŸåˆ é™¤';
+$lang['unsubscribe_error'] = '无法将 %s 从 %s 的订阅列表中删除';
+$lang['authmodfailed'] = '错误的用户认è¯è®¾ç½®ã€‚请通知维基管ç†å‘˜ã€‚';
+$lang['authtempfail'] = '用户认è¯æš‚时无法使用。如果该状æ€ä¸€ç›´å­˜åœ¨ï¼Œè¯·é€šçŸ¥ç»´åŸºç®¡ç†å‘˜ã€‚';
+$lang['i_chooselang'] = '选择您的语言';
+$lang['i_installer'] = 'DokuWiki 安装工具';
+$lang['i_wikiname'] = '维基å称';
+$lang['i_enableacl'] = 'å¯ç”¨ ACL(推è)';
+$lang['i_superuser'] = '超级用户';
+$lang['i_problems'] = '安装工具å‘现一些问题,已在下é¢åˆ—出。您必须先修å¤è¿™äº›é—®é¢˜ï¼Œæ‰èƒ½ç»§ç»­å®‰è£…。';
+$lang['i_modified'] = '由于安全上的考虑,该脚本åªèƒ½ç”¨äºŽå…¨æ–°ä¸”åšä»»ä½•æ”¹åŠ¨çš„ Dokuwiki 安装包。
+ 您å¯ä»¥é‡æ–°è§£åŽ‹ä¸‹è½½çš„程åºåŒ…,或查阅完整的
+ <a href="http://dokuwiki.org/install">Dokuwiki 安装指å—</a>';
+$lang['i_funcna'] = 'PHP 功能 <code>%s</code> 无法使用。也许您的æœåŠ¡å™¨æ供商因为æŸäº›åŽŸå› ç¦ç”¨äº†å®ƒã€‚';
+$lang['i_phpver'] = '您的 PHP 版本 <code>%s</code> 低于最低è¦æ±‚çš„ <code>%s</code>。您需è¦å‡çº§æ‚¨çš„ PHP 版本。';
+$lang['i_permfail'] = 'DokuWiki 无法写入 <code>%s</code>。您需è¦ä¿®æ”¹è¯¥è·¯å¾„çš„æƒé™è®¾å®šï¼';
+$lang['i_confexists'] = '<code>%s</code> å·²ç»å­˜åœ¨';
+$lang['i_writeerr'] = '无法创建 <code>%s</code>。您需è¦æ£€æŸ¥è¯¥è·¯å¾„/文件的æƒé™è®¾å®šå¹¶æ‰‹åŠ¨åˆ›å»ºè¯¥æ–‡ä»¶ã€‚';
+$lang['i_badhash'] = '无法识别的或被修改的 dokuwiki.php(值=<code>%s</code>)';
+$lang['i_badval'] = '<code>%s</code> - éžæ³•æˆ–空值';
+$lang['i_success'] = 'é…ç½®æˆåŠŸå®Œæˆã€‚您现在å¯ä»¥åˆ é™¤ install.php 了。继续进入
+ <a href="doku.php">您全新的 DokuWiki</a>。';
+$lang['i_failure'] = '写入é…置文件的时候产生一些错误。在使用 <a href="doku.php">您全新安装的 DokuWiki</a> å‰
+ 您需è¦æ‰‹åŠ¨ä¿®å¤å®ƒä»¬ã€‚';
+$lang['i_policy'] = 'åˆå§‹çš„ ACL 政策';
+$lang['i_pol0'] = '开放的维基(任何人都有读ã€å†™ã€ä¸Šä¼ çš„æƒé™ï¼‰';
+$lang['i_pol1'] = '公共的维基(任何人都有读的æƒé™ï¼Œåªæœ‰æ³¨å†Œç”¨æˆ·æ‰æœ‰å†™å’Œä¸Šä¼ çš„æƒé™ï¼‰';
+$lang['i_pol2'] = '关闭的维基(åªæœ‰æ³¨å†Œç”¨æˆ·æ‰æœ‰è¯»ã€å†™ã€ä¸Šä¼ çš„æƒé™ï¼‰';
+$lang['i_retry'] = 'é‡è¯•';
+$lang['mu_intro'] = '您å¯ä»¥åœ¨æ­¤ä¸€æ¬¡ä¸Šä¼ å¤šä¸ªæ–‡ä»¶ã€‚点按æµè§ˆæŒ‰é’®æ·»åŠ æ–‡ä»¶åˆ°ä¸Šä¼ é˜Ÿåˆ—中,先好åŽæŒ‰ä¸Šä¼ é’®ã€‚';
+$lang['mu_gridname'] = '文件å';
+$lang['mu_gridsize'] = '大å°';
+$lang['mu_gridstat'] = '状æ€';
+$lang['mu_namespace'] = 'å称空间';
+$lang['mu_browse'] = 'æµè§ˆ';
+$lang['mu_toobig'] = '过大';
+$lang['mu_ready'] = '准备好上传';
+$lang['mu_done'] = '完æˆ';
+$lang['mu_fail'] = '失败';
+$lang['mu_authfail'] = '会è¯è¿‡æœŸ';
+$lang['mu_progress'] = '@PCT@% 上传完æˆ';
+$lang['mu_filetypes'] = 'å…许的文件类型';
+$lang['recent_global'] = '您当å‰çœ‹åˆ°çš„是<b>%s</b> å称空间的å˜åŠ¨ã€‚你还å¯ä»¥åœ¨<a href="%s">查看整个维基的近期å˜åŠ¨</a>。';
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt
new file mode 100644
index 000000000..321e4a047
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt
@@ -0,0 +1,3 @@
+====== 页é¢å·²é”定 ======
+
+本页é¢ç›®å‰æ­£è¢«å…¶ä»–用户编辑。您è¦ç­‰åˆ°è¯¥ç”¨æˆ·å®Œæˆç¼–辑或é”定因过期而自动解除åŽæ‰èƒ½ç¼–辑。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt
new file mode 100644
index 000000000..8ff8b3846
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt
@@ -0,0 +1,3 @@
+====== 登录 ======
+
+您尚未登录ï¼è¯·åœ¨ä¸‹æ–¹è¾“入您的用户å和密ç è¿›è¡Œç™»å½•ã€‚ 您的æµè§ˆå™¨éœ€è¦æ”¯æŒ Cookies æ‰èƒ½æ­£å¸¸ç™»å½•ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt
new file mode 100644
index 000000000..311acf1b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt
@@ -0,0 +1,17 @@
+您的 DokuWiki 中有一个页é¢è¢«æ·»åŠ æˆ–更改了。以下是详细资料:
+
+日期 : @DATE@
+æµè§ˆå™¨ : @BROWSER@
+IP åœ°å€ : @IPADDRESS@
+机器å称 : @HOSTNAME@
+修订记录 : @OLDPAGE@
+最新修订 : @NEWPAGE@
+ç¼–è¾‘æ‘˜è¦ : @SUMMARY@
+用户 : @USER@
+
+@DIFF@
+
+
+--
+本邮件由 DokuWiki 自动创建
+@DOKUWIKIURL@ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt
new file mode 100644
index 000000000..6f96b568d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt
@@ -0,0 +1,3 @@
+====== 该主题尚ä¸å­˜åœ¨ ======
+
+您访问的页é¢å¹¶ä¸å­˜åœ¨ã€‚如果å…许,您å¯ä»¥ä½¿ç”¨â€œåˆ›å»ºè¯¥é¡µé¢â€æŒ‰é’®æ¥åˆ›å»ºå®ƒã€‚ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt
new file mode 100644
index 000000000..3fe5aabd8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt
@@ -0,0 +1,3 @@
+====== 没有该修订版 ======
+
+您指定的修订版并ä¸å­˜åœ¨ã€‚请使用“修订记录â€æŒ‰é’®æŸ¥çœ‹æœ¬é¡µé¢çš„修订记录列表。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt
new file mode 100644
index 000000000..dbb3de675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt
@@ -0,0 +1,3 @@
+====== 预览 ======
+
+这是该文件的效果预览。请记ä½ï¼šå®ƒ**并没有被ä¿å­˜**ï¼
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt
new file mode 100644
index 000000000..7e48751a6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt
@@ -0,0 +1,15 @@
+@FULLNAME@ 您好ï¼
+
+有人请求为您在 @DOKUWIKIURL@ 注册的用户å @TITLE@ å‘é€æ–°å¯†ç 
+
+如果您没有请求å‘é€æ–°å¯†ç ï¼Œè¯·å¿½ç•¥è¿™å°é‚®ä»¶ã€‚
+
+为了确认å‘é€æ–°å¯†ç è¯·æ±‚çš„ç¡®æ¥è‡ªæ‚¨ï¼Œè¯·ä½¿ç”¨ä¸‹é¢çš„链接。
+
+@CONFIRM@
+
+--
+本邮件由 DokuWiki 自动创建
+@DOKUWIKIURL@
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt
new file mode 100644
index 000000000..eb47765a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt
@@ -0,0 +1,2 @@
+本页é¢åªè¯»ã€‚您å¯ä»¥æŸ¥çœ‹æºæ–‡ä»¶ï¼Œä½†ä¸èƒ½æ›´æ”¹å®ƒã€‚如果您觉得这是系统错误,请è”系管ç†å‘˜ã€‚
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt
new file mode 100644
index 000000000..95634d037
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt
@@ -0,0 +1,5 @@
+====== 最近更新 ======
+
+以下的页é¢æ˜¯æœ€è¿‘æ‰æ›´æ–°çš„:
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt
new file mode 100644
index 000000000..7410ff1c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt
@@ -0,0 +1,3 @@
+====== 注册新用户 ======
+
+填写以下资料æ¥åˆ›å»ºä¸€ä¸ªæ–°å¸æˆ·ã€‚请确定您æ供的是 **正确的 E-mail 地å€** - 如果您没有被è¦æ±‚在这里输入密ç ï¼Œé‚£ä¹ˆæ–°å¯†ç å°†é€šè¿‡æ‚¨çš„邮件地å€å‘é€ç»™æ‚¨ã€‚ 用于登录的用户åå¿…é¡»åˆæ³•ï¼Œè¯·å‚阅 [[doku>pagename|pagename]]。
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt
new file mode 100644
index 000000000..9647b5fad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt
@@ -0,0 +1,16 @@
+新用户已创建。下é¢æ˜¯è¯¦ç»†ä¿¡æ¯ï¼š
+
+用户å : @NEWUSER@
+å…¨å : @NEWNAME@
+E-mail : @NEWEMAIL@
+
+日期 : @DATE@
+æµè§ˆå™¨ : @BROWSER@
+IP åœ°å€ : @IPADDRESS@
+机器å称 : @HOSTNAME@
+
+--
+本邮件由 DokuWiki 自动创建
+@DOKUWIKIURL@
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt
new file mode 100644
index 000000000..f98e469e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt
@@ -0,0 +1,5 @@
+====== å‘é€æ–°å¯†ç  ======
+
+请在下列区域中输入您的用户åæ¥èŽ·å–新密ç ã€‚ 一å°åŒ…å«ç¡®è®¤é“¾æŽ¥çš„邮件将å‘é€ç»™æ‚¨æ³¨å†Œçš„邮件地å€ã€‚
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt
new file mode 100644
index 000000000..89d2a7857
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt
@@ -0,0 +1,3 @@
+====== 修订记录 ======
+
+以下是当å‰æ–‡æ¡£çš„修订记录。如果è¦å›žå¤åˆ°æŸä¸ªæ—§çš„修订版,请在下é¢é€‰æ‹©å®ƒï¼Œå¹¶ç‚¹å‡»â€œç¼–辑本页â€ï¼Œä¹‹åŽä¿å­˜å³å¯ã€‚ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt
new file mode 100644
index 000000000..8222e242c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt
@@ -0,0 +1,5 @@
+====== æœç´¢ ======
+
+下é¢å°†æ˜¾ç¤ºæ‚¨çš„æœç´¢ç»“果。如果没有找到您想è¦çš„东西,您å¯ä»¥ä½¿ç”¨ç›¸åº”的按钮æ¥åˆ›å»ºæˆ–编辑该页é¢ã€‚
+
+===== æœç´¢ç»“æžœ ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt
new file mode 100644
index 000000000..770fecc98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt
@@ -0,0 +1,2 @@
+**这是本文档旧的修订版ï¼**
+----
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt
new file mode 100644
index 000000000..bc6eb48ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt
@@ -0,0 +1,29 @@
+# This is a list of words the indexer ignores, one word per line
+# When you edit this file be sure to use UNIX line endings (single newline)
+# No need to include words shorter than 3 chars - these are ignored anyway
+# This list is based upon the ones found at http://www.ranks.nl/stopwords/
+about
+are
+and
+you
+your
+them
+their
+com
+for
+from
+into
+how
+that
+the
+this
+was
+what
+when
+where
+who
+will
+with
+und
+the
+www
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt
new file mode 100644
index 000000000..1a0a0aa16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt
@@ -0,0 +1,19 @@
+您好ï¼
+
+@TITLE@ 中的 @PAGE@ 页é¢å·²æ›´æ”¹ã€‚
+下é¢æ˜¯æ›´æ”¹çš„详细情况:
+
+--------------------------------------------------------
+@DIFF@
+--------------------------------------------------------
+
+è¦é€€è®¢æœ¬é¡µï¼Œè¯·ç™»å½•ç»´åŸº
+@DOKUWIKIURL@ 然åŽè®¿é—®
+@NEWPAGE@
+并选择'退订更改'。
+
+--
+本邮件由 DokuWiki 自动创建
+@DOKUWIKIURL@
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt
new file mode 100644
index 000000000..007578801
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt
@@ -0,0 +1,5 @@
+====== 更新您å¸æˆ·çš„ä¿¡æ¯ ======
+
+您åªéœ€è¦å¡«å†™å¸Œæœ›æ›´æ”¹çš„区域å³å¯ã€‚您ä¸èƒ½æ›´æ”¹ç”¨æˆ·å。
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt
new file mode 100644
index 000000000..b820cee2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt
@@ -0,0 +1,20 @@
+您好ï¼
+
+一个文件被上传到您的 DokuWiki 站点。下é¢æ˜¯è¯¦ç»†ä¿¡æ¯ï¼š
+
+文件å : @MEDIA@
+日期 : @DATE@
+æµè§ˆå™¨ : @BROWSER@
+IP åœ°å€ : @IPADDRESS@
+主机å : @HOSTNAME@
+å¤§å° : @SIZE@
+MIME 类型 : @MIME@
+用户 : @USER@
+
+--
+本邮件由 DokuWiki 自动创建
+@DOKUWIKIURL@
+
+
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt
new file mode 100644
index 000000000..72c473a59
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt
@@ -0,0 +1,3 @@
+====== æ‹’ç»åžƒåœ¾èµ„æ–™ ======
+
+您的更改 **并没有** ä¿å­˜ï¼Œå› ä¸ºå®ƒåŒ…å«äº†ä¸€ä¸ªæˆ–多个被é™åˆ¶çš„字眼。如果您å°è¯•ä¸ºæœ¬ç»´åŸºæ·»åŠ åžƒåœ¾ä¿¡æ¯ -- 你是一个大å蛋ï¼å¦‚果您认为这是一个系统错误,请è”系本维基的管ç†å‘˜ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/mail.php b/mod/dokuwiki/vendors/dokuwiki/inc/mail.php
new file mode 100644
index 000000000..3b0592b8b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/mail.php
@@ -0,0 +1,266 @@
+<?php
+/**
+ * Mail functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/utf8.php');
+require_once(DOKU_INC.'inc/EmailAddressValidator.php');
+
+// end of line for mail lines - RFC822 says CRLF but postfix (and other MTAs?)
+// think different
+if(!defined('MAILHEADER_EOL')) define('MAILHEADER_EOL',"\n");
+#define('MAILHEADER_ASCIIONLY',1);
+
+/**
+ * Patterns for use in email detection and validation
+ *
+ * NOTE: there is an unquoted '/' in RFC2822_ATEXT, it must remain unquoted to be used in the parser
+ * the pattern uses non-capturing groups as captured groups aren't allowed in the parser
+ * select pattern delimiters with care!
+ *
+ * May not be completly RFC conform!
+ * @link http://www.faqs.org/rfcs/rfc2822.html (paras 3.4.1 & 3.2.4)
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * Check if a given mail address is valid
+ */
+if (!defined('RFC2822_ATEXT')) define('RFC2822_ATEXT',"0-9a-zA-Z!#$%&'*+/=?^_`{|}~-");
+if (!defined('PREG_PATTERN_VALID_EMAIL')) define('PREG_PATTERN_VALID_EMAIL', '['.RFC2822_ATEXT.']+(?:\.['.RFC2822_ATEXT.']+)*@(?i:[0-9a-z][0-9a-z-]*\.)+(?i:[a-z]{2,4}|museum|travel)');
+
+
+
+/**
+ * UTF-8 autoencoding replacement for PHPs mail function
+ *
+ * Email address fields (To, From, Cc, Bcc can contain a textpart and an address
+ * like this: 'Andreas Gohr <andi@splitbrain.org>' - the text part is encoded
+ * automatically. You can seperate receivers by commas.
+ *
+ * @param string $to Receiver of the mail (multiple seperated by commas)
+ * @param string $subject Mailsubject
+ * @param string $body Messagebody
+ * @param string $from Sender address
+ * @param string $cc CarbonCopy receiver (multiple seperated by commas)
+ * @param string $bcc BlindCarbonCopy receiver (multiple seperated by commas)
+ * @param string $headers Additional Headers (seperated by MAILHEADER_EOL
+ * @param string $params Additonal Sendmail params (passed to mail())
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see mail()
+ */
+function mail_send($to, $subject, $body, $from='', $cc='', $bcc='', $headers=null, $params=null){
+
+ $message = compact('to','subject','body','from','cc','bcc','headers','params');
+ return trigger_event('MAIL_MESSAGE_SEND',$message,'_mail_send_action');
+}
+
+function _mail_send_action($data) {
+
+ // retrieve parameters from event data, $to, $subject, $body, $from, $cc, $bcc, $headers, $params
+ $to = $data['to'];
+ $subject = $data['subject'];
+ $body = $data['body'];
+
+ // add robustness in case plugin removes any of these optional values
+ $from = isset($data['from']) ? $data['from'] : '';
+ $cc = isset($data['cc']) ? $data['cc'] : '';
+ $bcc = isset($data['bcc']) ? $data['bcc'] : '';
+ $headers = isset($data['headers']) ? $data['headers'] : null;
+ $params = isset($data['params']) ? $data['params'] : null;
+
+ // end additional code to support event ... original mail_send() code from here
+
+ if(defined('MAILHEADER_ASCIIONLY')){
+ $subject = utf8_deaccent($subject);
+ $subject = utf8_strip($subject);
+ }
+
+ if(!utf8_isASCII($subject)) {
+ $subject = '=?UTF-8?Q?'.mail_quotedprintable_encode($subject,0).'?=';
+ // Spaces must be encoded according to rfc2047. Use the "_" shorthand
+ $subject = preg_replace('/ /', '_', $subject);
+ }
+
+ $header = '';
+
+ // No named recipients for To: in Windows (see FS#652)
+ $usenames = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? false : true;
+
+ $to = mail_encode_address($to,'',$usenames);
+ $header .= mail_encode_address($from,'From');
+ $header .= mail_encode_address($cc,'Cc');
+ $header .= mail_encode_address($bcc,'Bcc');
+ $header .= 'MIME-Version: 1.0'.MAILHEADER_EOL;
+ $header .= 'Content-Type: text/plain; charset=UTF-8'.MAILHEADER_EOL;
+ $header .= 'Content-Transfer-Encoding: quoted-printable'.MAILHEADER_EOL;
+ $header .= $headers;
+ $header = trim($header);
+
+ $body = mail_quotedprintable_encode($body);
+
+ if($params == null){
+ return @mail($to,$subject,$body,$header);
+ }else{
+ return @mail($to,$subject,$body,$header,$params);
+ }
+}
+
+/**
+ * Encodes an email address header
+ *
+ * Unicode characters will be deaccented and encoded
+ * quoted_printable for headers.
+ * Addresses may not contain Non-ASCII data!
+ *
+ * Example:
+ * mail_encode_address("föö <foo@bar.com>, me@somewhere.com","TBcc");
+ *
+ * @param string $string Multiple adresses separated by commas
+ * @param string $header Name of the header (To,Bcc,Cc,...)
+ * @param boolean $names Allow named Recipients?
+ */
+function mail_encode_address($string,$header='',$names=true){
+ $headers = '';
+ $parts = explode(',',$string);
+ foreach ($parts as $part){
+ $part = trim($part);
+
+ // parse address
+ if(preg_match('#(.*?)<(.*?)>#',$part,$matches)){
+ $text = trim($matches[1]);
+ $addr = $matches[2];
+ }else{
+ $addr = $part;
+ }
+
+ // skip empty ones
+ if(empty($addr)){
+ continue;
+ }
+
+ // FIXME: is there a way to encode the localpart of a emailaddress?
+ if(!utf8_isASCII($addr)){
+ msg(htmlspecialchars("E-Mail address <$addr> is not ASCII"),-1);
+ continue;
+ }
+
+ if(!mail_isvalid($addr)){
+ msg(htmlspecialchars("E-Mail address <$addr> is not valid"),-1);
+ continue;
+ }
+
+ // text was given
+ if(!empty($text) && $names){
+ // add address quotes
+ $addr = "<$addr>";
+
+ if(defined('MAILHEADER_ASCIIONLY')){
+ $text = utf8_deaccent($text);
+ $text = utf8_strip($text);
+ }
+
+ if(!utf8_isASCII($text)){
+ $text = '=?UTF-8?Q?'.mail_quotedprintable_encode($text,0).'?=';
+ }
+ }else{
+ $text = '';
+ }
+
+ // add to header comma seperated
+ if($headers != ''){
+ $headers .= ',';
+ if($header) $headers .= MAILHEADER_EOL.' '; // avoid overlong mail headers
+ }
+ $headers .= $text.' '.$addr;
+ }
+
+ if(empty($headers)) return null;
+
+ //if headername was given add it and close correctly
+ if($header) $headers = $header.': '.$headers.MAILHEADER_EOL;
+
+ return $headers;
+}
+
+/**
+ * Check if a given mail address is valid
+ *
+ * @param string $email the address to check
+ * @return bool true if address is valid
+ */
+function mail_isvalid($email){
+ $validator = new EmailAddressValidator;
+ return $validator->check_email_address($email);
+}
+
+/**
+ * Quoted printable encoding
+ *
+ * @author umu <umuAThrz.tu-chemnitz.de>
+ * @link http://www.php.net/manual/en/function.imap-8bit.php#61216
+ */
+function mail_quotedprintable_encode($sText,$maxlen=74,$bEmulate_imap_8bit=true) {
+ // split text into lines
+ $aLines= preg_split("/(?:\r\n|\r|\n)/", $sText);
+ $cnt = count($aLines);
+
+ for ($i=0;$i<$cnt;$i++) {
+ $sLine =& $aLines[$i];
+ if (strlen($sLine)===0) continue; // do nothing, if empty
+
+ $sRegExp = '/[^\x09\x20\x21-\x3C\x3E-\x7E]/e';
+
+ // imap_8bit encodes x09 everywhere, not only at lineends,
+ // for EBCDIC safeness encode !"#$@[\]^`{|}~,
+ // for complete safeness encode every character :)
+ if ($bEmulate_imap_8bit)
+ $sRegExp = '/[^\x20\x21-\x3C\x3E-\x7E]/e';
+
+ $sReplmt = 'sprintf( "=%02X", ord ( "$0" ) ) ;';
+ $sLine = preg_replace( $sRegExp, $sReplmt, $sLine );
+
+ // encode x09,x20 at lineends
+ {
+ $iLength = strlen($sLine);
+ $iLastChar = ord($sLine{$iLength-1});
+
+ // !!!!!!!!
+ // imap_8_bit does not encode x20 at the very end of a text,
+ // here is, where I don't agree with imap_8_bit,
+ // please correct me, if I'm wrong,
+ // or comment next line for RFC2045 conformance, if you like
+ if (!($bEmulate_imap_8bit && ($i==count($aLines)-1))){
+ if (($iLastChar==0x09)||($iLastChar==0x20)) {
+ $sLine{$iLength-1}='=';
+ $sLine .= ($iLastChar==0x09)?'09':'20';
+ }
+ }
+ } // imap_8bit encodes x20 before chr(13), too
+ // although IMHO not requested by RFC2045, why not do it safer :)
+ // and why not encode any x20 around chr(10) or chr(13)
+ if ($bEmulate_imap_8bit) {
+ $sLine=str_replace(' =0D','=20=0D',$sLine);
+ //$sLine=str_replace(' =0A','=20=0A',$sLine);
+ //$sLine=str_replace('=0D ','=0D=20',$sLine);
+ //$sLine=str_replace('=0A ','=0A=20',$sLine);
+ }
+
+ // finally split into softlines no longer than $maxlen chars,
+ // for even more safeness one could encode x09,x20
+ // at the very first character of the line
+ // and after soft linebreaks, as well,
+ // but this wouldn't be caught by such an easy RegExp
+ if($maxlen){
+ preg_match_all( '/.{1,'.($maxlen - 2).'}([^=]{0,2})?/', $sLine, $aMatch );
+ $sLine = implode( '=' . MAILHEADER_EOL, $aMatch[0] ); // add soft crlf's
+ }
+ }
+
+ // join lines into text
+ return implode(MAILHEADER_EOL,$aLines);
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/media.php b/mod/dokuwiki/vendors/dokuwiki/inc/media.php
new file mode 100644
index 000000000..9090dbd22
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/media.php
@@ -0,0 +1,1102 @@
+<?php
+/**
+ * All output and handler function needed for the media management popup
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+if(!defined('NL')) define('NL',"\n");
+require_once(DOKU_INC.'inc/html.php');
+require_once(DOKU_INC.'inc/search.php');
+require_once(DOKU_INC.'inc/JpegMeta.php');
+
+/**
+ * Lists pages which currently use a media file selected for deletion
+ *
+ * References uses the same visual as search results and share
+ * their CSS tags except pagenames won't be links.
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+function media_filesinuse($data,$id){
+ global $lang;
+ echo '<h1>'.$lang['reference'].' <code>'.hsc(noNS($id)).'</code></h1>';
+ echo '<p>'.hsc($lang['ref_inuse']).'</p>';
+
+ $hidden=0; //count of hits without read permission
+ foreach($data as $row){
+ if(auth_quickaclcheck($row) >= AUTH_READ && isVisiblePage($row)){
+ echo '<div class="search_result">';
+ echo '<span class="mediaref_ref">'.hsc($row).'</span>';
+ echo '</div>';
+ }else
+ $hidden++;
+ }
+ if ($hidden){
+ print '<div class="mediaref_hidden">'.$lang['ref_hidden'].'</div>';
+ }
+}
+
+/**
+ * Handles the saving of image meta data
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_metasave($id,$auth,$data){
+ if($auth < AUTH_UPLOAD) return false;
+ if(!checkSecurityToken()) return false;
+ global $lang;
+ global $conf;
+ $src = mediaFN($id);
+
+ $meta = new JpegMeta($src);
+ $meta->_parseAll();
+
+ foreach($data as $key => $val){
+ $val=trim($val);
+ if(empty($val)){
+ $meta->deleteField($key);
+ }else{
+ $meta->setField($key,$val);
+ }
+ }
+
+ if($meta->save()){
+ if($conf['fperm']) chmod($src, $conf['fperm']);
+ msg($lang['metasaveok'],1);
+ return $id;
+ }else{
+ msg($lang['metasaveerr'],-1);
+ return false;
+ }
+}
+
+/**
+ * Display the form to edit image meta data
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_metaform($id,$auth){
+ if($auth < AUTH_UPLOAD) return false;
+ global $lang, $config_cascade;
+
+ // load the field descriptions
+ static $fields = null;
+ if(is_null($fields)){
+
+ foreach (array('default','local') as $config_group) {
+ if (empty($config_cascade['mediameta'][$config_group])) continue;
+ foreach ($config_cascade['mediameta'][$config_group] as $config_file) {
+ if(@file_exists($config_file)){
+ include($config_file);
+ }
+ }
+ }
+ }
+
+ $src = mediaFN($id);
+
+ // output
+ echo '<h1>'.hsc(noNS($id)).'</h1>'.NL;
+ echo '<form action="'.DOKU_BASE.'lib/exe/mediamanager.php" accept-charset="utf-8" method="post" class="meta">'.NL;
+ formSecurityToken();
+ foreach($fields as $key => $field){
+ // get current value
+ $tags = array($field[0]);
+ if(is_array($field[3])) $tags = array_merge($tags,$field[3]);
+ $value = tpl_img_getTag($tags,'',$src);
+ $value = cleanText($value);
+
+ // prepare attributes
+ $p = array();
+ $p['class'] = 'edit';
+ $p['id'] = 'meta__'.$key;
+ $p['name'] = 'meta['.$field[0].']';
+
+ // put label
+ echo '<div class="metafield">';
+ echo '<label for="meta__'.$key.'">';
+ echo ($lang[$field[1]]) ? $lang[$field[1]] : $field[1];
+ echo ':</label>';
+
+ // put input field
+ if($field[2] == 'text'){
+ $p['value'] = $value;
+ $p['type'] = 'text';
+ $att = buildAttributes($p);
+ echo "<input $att/>".NL;
+ }else{
+ $att = buildAttributes($p);
+ echo "<textarea $att rows=\"6\" cols=\"50\">".formText($value).'</textarea>'.NL;
+ }
+ echo '</div>'.NL;
+ }
+ echo '<div class="buttons">'.NL;
+ echo '<input type="hidden" name="img" value="'.hsc($id).'" />'.NL;
+ echo '<input name="do[save]" type="submit" value="'.$lang['btn_save'].
+ '" title="'.$lang['btn_save'].' [S]" accesskey="s" class="button" />'.NL;
+ echo '<input name="do[cancel]" type="submit" value="'.$lang['btn_cancel'].
+ '" title="'.$lang['btn_cancel'].' [C]" accesskey="c" class="button" />'.NL;
+ echo '</div>'.NL;
+ echo '</form>'.NL;
+}
+
+/**
+ * Conveinience function to check if a media file is still in use
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function media_inuse($id) {
+ global $conf;
+ $mediareferences = array();
+ if($conf['refcheck']){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ $mediareferences = ft_mediause($id,$conf['refshow']);
+ if(!count($mediareferences)) {
+ return false;
+ } else {
+ return $mediareferences;
+ }
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Handles media file deletions
+ *
+ * If configured, checks for media references before deletion
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @return mixed false on error, true on delete or array with refs
+ */
+function media_delete($id,$auth){
+ if($auth < AUTH_DELETE) return false;
+ if(!checkSecurityToken()) return false;
+ global $conf;
+ global $lang;
+
+ $file = mediaFN($id);
+
+ // trigger an event - MEDIA_DELETE_FILE
+ $data['id'] = $id;
+ $data['name'] = basename($file);
+ $data['path'] = $file;
+ $data['size'] = (@file_exists($file)) ? filesize($file) : 0;
+
+ $data['unl'] = false;
+ $data['del'] = false;
+ $evt = new Doku_Event('MEDIA_DELETE_FILE',$data);
+ if ($evt->advise_before()) {
+ $data['unl'] = @unlink($file);
+ if($data['unl']){
+ addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_DELETE);
+ $data['del'] = io_sweepNS($id,'mediadir');
+ }
+ }
+ $evt->advise_after();
+ unset($evt);
+
+ if($data['unl'] && $data['del']){
+ // current namespace was removed. redirecting to root ns passing msg along
+ send_redirect(DOKU_URL.'lib/exe/mediamanager.php?msg1='.
+ rawurlencode(sprintf(noNS($id),$lang['deletesucc'])));
+ }
+
+ return $data['unl'];
+}
+
+/**
+ * Handles media file uploads
+ *
+ * This generates an action event and delegates to _media_upload_action().
+ * Action plugins are allowed to pre/postprocess the uploaded file.
+ * (The triggered event is preventable.)
+ *
+ * Event data:
+ * $data[0] fn_tmp: the temporary file name (read from $_FILES)
+ * $data[1] fn: the file name of the uploaded file
+ * $data[2] id: the future directory id of the uploaded file
+ * $data[3] imime: the mimetype of the uploaded file
+ * $data[4] overwrite: if an existing file is going to be overwritten
+ *
+ * @triggers MEDIA_UPLOAD_FINISH
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ * @return mixed false on error, id of the new file on success
+ */
+function media_upload($ns,$auth){
+ if($auth < AUTH_UPLOAD) return false;
+ if(!checkSecurityToken()) return false;
+ require_once(DOKU_INC.'inc/confutils.php');
+ global $lang;
+ global $conf;
+
+ // get file and id
+ $id = $_POST['id'];
+ $file = $_FILES['upload'];
+ if(empty($id)) $id = $file['name'];
+
+ // check for errors (messages are done in lib/exe/mediamanager.php)
+ if($file['error']) return false;
+
+ // check extensions
+ list($fext,$fmime,$dl) = mimetype($file['name']);
+ list($iext,$imime,$dl) = mimetype($id);
+ if($fext && !$iext){
+ // no extension specified in id - read original one
+ $id .= '.'.$fext;
+ $imime = $fmime;
+ }elseif($fext && $fext != $iext){
+ // extension was changed, print warning
+ msg(sprintf($lang['mediaextchange'],$fext,$iext));
+ }
+
+ // get filename
+ $id = cleanID($ns.':'.$id,false,true);
+ $fn = mediaFN($id);
+
+ // get filetype regexp
+ $types = array_keys(getMimeTypes());
+ $types = array_map(create_function('$q','return preg_quote($q,"/");'),$types);
+ $regex = join('|',$types);
+
+ // because a temp file was created already
+ if(preg_match('/\.('.$regex.')$/i',$fn)){
+ //check for overwrite
+ $overwrite = @file_exists($fn);
+ if($overwrite && (!$_REQUEST['ow'] || $auth < AUTH_DELETE)){
+ msg($lang['uploadexist'],0);
+ return false;
+ }
+ // check for valid content
+ $ok = media_contentcheck($file['tmp_name'],$imime);
+ if($ok == -1){
+ msg(sprintf($lang['uploadbadcontent'],".$iext"),-1);
+ return false;
+ }elseif($ok == -2){
+ msg($lang['uploadspam'],-1);
+ return false;
+ }elseif($ok == -3){
+ msg($lang['uploadxss'],-1);
+ return false;
+ }
+
+ // prepare event data
+ $data[0] = $file['tmp_name'];
+ $data[1] = $fn;
+ $data[2] = $id;
+ $data[3] = $imime;
+ $data[4] = $overwrite;
+
+ // trigger event
+ return trigger_event('MEDIA_UPLOAD_FINISH', $data, '_media_upload_action', true);
+
+ }else{
+ msg($lang['uploadwrong'],-1);
+ }
+ return false;
+}
+
+/**
+ * Callback adapter for media_upload_finish()
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function _media_upload_action($data) {
+ // fixme do further sanity tests of given data?
+ if(is_array($data) && count($data)===5) {
+ return media_upload_finish($data[0], $data[1], $data[2], $data[3], $data[4]);
+ } else {
+ return false; //callback error
+ }
+}
+
+/**
+ * Saves an uploaded media file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite) {
+ global $conf;
+ global $lang;
+
+ // prepare directory
+ io_createNamespace($id, 'media');
+
+ if(move_uploaded_file($fn_tmp, $fn)) {
+ // Set the correct permission here.
+ // Always chmod media because they may be saved with different permissions than expected from the php umask.
+ // (Should normally chmod to $conf['fperm'] only if $conf['fperm'] is set.)
+ chmod($fn, $conf['fmode']);
+ msg($lang['uploadsucc'],1);
+ media_notify($id,$fn,$imime);
+ // add a log entry to the media changelog
+ if ($overwrite) {
+ addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_EDIT);
+ } else {
+ addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_CREATE);
+ }
+ return $id;
+ }else{
+ msg($lang['uploadfail'],-1);
+ }
+}
+
+/**
+ * This function checks if the uploaded content is really what the
+ * mimetype says it is. We also do spam checking for text types here.
+ *
+ * We need to do this stuff because we can not rely on the browser
+ * to do this check correctly. Yes, IE is broken as usual.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://www.splitbrain.org/blog/2007-02/12-internet_explorer_facilitates_cross_site_scripting
+ * @fixme check all 26 magic IE filetypes here?
+ */
+function media_contentcheck($file,$mime){
+ global $conf;
+ if($conf['iexssprotect']){
+ $fh = @fopen($file, 'rb');
+ if($fh){
+ $bytes = fread($fh, 256);
+ fclose($fh);
+ if(preg_match('/<(script|a|img|html|body|iframe)[\s>]/i',$bytes)){
+ return -3;
+ }
+ }
+ }
+ if(substr($mime,0,6) == 'image/'){
+ $info = @getimagesize($file);
+ if($mime == 'image/gif' && $info[2] != 1){
+ return -1;
+ }elseif($mime == 'image/jpeg' && $info[2] != 2){
+ return -1;
+ }elseif($mime == 'image/png' && $info[2] != 3){
+ return -1;
+ }
+ # fixme maybe check other images types as well
+ }elseif(substr($mime,0,5) == 'text/'){
+ global $TEXT;
+ $TEXT = io_readFile($file);
+ if(checkwordblock()){
+ return -2;
+ }
+ }
+ return 0;
+}
+
+/**
+ * Send a notify mail on uploads
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_notify($id,$file,$mime){
+ global $lang;
+ global $conf;
+ if(empty($conf['notify'])) return; //notify enabled?
+
+ $ip = clientIP();
+
+ $text = rawLocale('uploadmail');
+ $text = str_replace('@DATE@',dformat(),$text);
+ $text = str_replace('@BROWSER@',$_SERVER['HTTP_USER_AGENT'],$text);
+ $text = str_replace('@IPADDRESS@',$ip,$text);
+ $text = str_replace('@HOSTNAME@',gethostsbyaddrs($ip),$text);
+ $text = str_replace('@DOKUWIKIURL@',DOKU_URL,$text);
+ $text = str_replace('@USER@',$_SERVER['REMOTE_USER'],$text);
+ $text = str_replace('@MIME@',$mime,$text);
+ $text = str_replace('@MEDIA@',ml($id,'',true,'&',true),$text);
+ $text = str_replace('@SIZE@',filesize_h(filesize($file)),$text);
+
+ $from = $conf['mailfrom'];
+ $from = str_replace('@USER@',$_SERVER['REMOTE_USER'],$from);
+ $from = str_replace('@NAME@',$INFO['userinfo']['name'],$from);
+ $from = str_replace('@MAIL@',$INFO['userinfo']['mail'],$from);
+
+ $subject = '['.$conf['title'].'] '.$lang['mail_upload'].' '.$id;
+
+ mail_send($conf['notify'],$subject,$text,$from);
+}
+
+/**
+ * List all files in a given Media namespace
+ */
+function media_filelist($ns,$auth=null,$jump=''){
+ global $conf;
+ global $lang;
+ $ns = cleanID($ns);
+
+ // check auth our self if not given (needed for ajax calls)
+ if(is_null($auth)) $auth = auth_quickaclcheck("$ns:*");
+
+ echo '<h1 id="media__ns">:'.hsc($ns).'</h1>'.NL;
+
+ if($auth < AUTH_READ){
+ // FIXME: print permission warning here instead?
+ echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
+ }else{
+ media_uploadform($ns, $auth);
+
+ $dir = utf8_encodeFN(str_replace(':','/',$ns));
+ $data = array();
+ search($data,$conf['mediadir'],'search_media',
+ array('showmsg'=>true,'depth'=>1),$dir);
+
+ if(!count($data)){
+ echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
+ }else foreach($data as $item){
+ media_printfile($item,$auth,$jump);
+ }
+ }
+ media_searchform($ns);
+}
+
+/**
+ * List all files found by the search request
+ *
+ * @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ * @triggers MEDIA_SEARCH
+ */
+function media_searchlist($query,$ns,$auth=null){
+ global $conf;
+ global $lang;
+ $ns = cleanID($ns);
+
+ if ($query) {
+ $evdata = array(
+ 'ns' => $ns,
+ 'data' => array(),
+ 'query' => $query
+ );
+ $evt = new Doku_Event('MEDIA_SEARCH', $evdata);
+ if ($evt->advise_before()) {
+ $dir = utf8_encodeFN(str_replace(':','/',$evdata['ns']));
+ $pattern = '/'.preg_quote($evdata['query'],'/').'/i';
+ search($evdata['data'],
+ $conf['mediadir'],
+ 'search_media',
+ array('showmsg'=>false,'pattern'=>$pattern),
+ $dir);
+ }
+ $evt->advise_after();
+ unset($evt);
+ }
+
+ echo '<h1 id="media__ns">'.sprintf($lang['searchmedia_in'],hsc($ns).':*').'</h1>'.NL;
+ media_searchform($ns,$query);
+
+ if(!count($evdata['data'])){
+ echo '<div class="nothing">'.$lang['nothingfound'].'</div>'.NL;
+ }else foreach($evdata['data'] as $item){
+ media_printfile($item,$item['perm'],'',true);
+ }
+}
+
+/**
+ * Print action links for a file depending on filetype
+ * and available permissions
+ */
+function media_fileactions($item,$auth){
+ global $lang;
+
+ // view button
+ $link = ml($item['id'],'',true);
+ echo ' <a href="'.$link.'" target="_blank"><img src="'.DOKU_MEDIA.'lib/images/magnifier.png" '.
+ 'alt="'.$lang['mediaview'].'" title="'.$lang['mediaview'].'" class="btn" /></a>';
+
+ // no further actions if not writable
+ if(!$item['writable']) return;
+
+ // delete button
+ if($auth >= AUTH_DELETE){
+ echo ' <a href="'.DOKU_BASE.'lib/exe/mediamanager.php?delete='.rawurlencode($item['id']).
+ '&amp;sectok='.getSecurityToken().'" class="btn_media_delete" title="'.$item['id'].'">'.
+ '<img src="'.DOKU_MEDIA.'lib/images/trash.png" alt="'.$lang['btn_delete'].'" '.
+ 'title="'.$lang['btn_delete'].'" class="btn" /></a>';
+ }
+
+ // edit button
+ if($auth >= AUTH_UPLOAD && $item['isimg'] && $item['meta']->getField('File.Mime') == 'image/jpeg'){
+ echo ' <a href="'.DOKU_BASE.'lib/exe/mediamanager.php?edit='.rawurlencode($item['id']).'">'.
+ '<img src="'.DOKU_MEDIA.'lib/images/pencil.png" alt="'.$lang['metaedit'].'" '.
+ 'title="'.$lang['metaedit'].'" class="btn" /></a>';
+ }
+
+}
+
+/**
+ * Formats and prints one file in the list
+ */
+function media_printfile($item,$auth,$jump,$display_namespace=false){
+ global $lang;
+ global $conf;
+
+ // Prepare zebra coloring
+ // I always wanted to use this variable name :-D
+ static $twibble = 1;
+ $twibble *= -1;
+ $zebra = ($twibble == -1) ? 'odd' : 'even';
+
+ // Automatically jump to recent action
+ if($jump == $item['id']) {
+ $jump = ' id="scroll__here" ';
+ }else{
+ $jump = '';
+ }
+
+ // Prepare fileicons
+ list($ext,$mime,$dl) = mimetype($item['file'],false);
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
+ $class = 'select mediafile mf_'.$class;
+
+ // Prepare filename
+ $file = utf8_decodeFN($item['file']);
+
+ // Prepare info
+ $info = '';
+ if($item['isimg']){
+ $info .= (int) $item['meta']->getField('File.Width');
+ $info .= '&#215;';
+ $info .= (int) $item['meta']->getField('File.Height');
+ $info .= ' ';
+ }
+ $info .= '<i>'.dformat($item['mtime']).'</i>';
+ $info .= ' ';
+ $info .= filesize_h($item['size']);
+
+ // output
+ echo '<div class="'.$zebra.'"'.$jump.'>'.NL;
+ if (!$display_namespace) {
+ echo '<a name="h_:'.$item['id'].'" class="'.$class.'">'.hsc($file).'</a> ';
+ } else {
+ echo '<a name="h_:'.$item['id'].'" class="'.$class.'">'.hsc($item['id']).'</a><br/>';
+ }
+ echo '<span class="info">('.$info.')</span>'.NL;
+ media_fileactions($item,$auth);
+ echo '<div class="example" id="ex_'.str_replace(':','_',$item['id']).'">';
+ echo $lang['mediausage'].' <code>{{:'.$item['id'].'}}</code>';
+ echo '</div>';
+ if($item['isimg']) media_printimgdetail($item);
+ echo '<div class="clearer"></div>'.NL;
+ echo '</div>'.NL;
+}
+
+/**
+ * Prints a thumbnail and metainfos
+ */
+function media_printimgdetail($item){
+ // prepare thumbnail
+ $w = (int) $item['meta']->getField('File.Width');
+ $h = (int) $item['meta']->getField('File.Height');
+ if($w>120 || $h>120){
+ $ratio = $item['meta']->getResizeRatio(120);
+ $w = floor($w * $ratio);
+ $h = floor($h * $ratio);
+ }
+ $src = ml($item['id'],array('w'=>$w,'h'=>$h));
+ $p = array();
+ $p['width'] = $w;
+ $p['height'] = $h;
+ $p['alt'] = $item['id'];
+ $p['class'] = 'thumb';
+ $att = buildAttributes($p);
+
+ // output
+ echo '<div class="detail">';
+ echo '<div class="thumb">';
+ echo '<a name="d_:'.$item['id'].'" class="select">';
+ echo '<img src="'.$src.'" '.$att.' />';
+ echo '</a>';
+ echo '</div>';
+
+ // read EXIF/IPTC data
+ $t = $item['meta']->getField(array('IPTC.Headline','xmp.dc:title'));
+ $d = $item['meta']->getField(array('IPTC.Caption','EXIF.UserComment',
+ 'EXIF.TIFFImageDescription',
+ 'EXIF.TIFFUserComment'));
+ if(utf8_strlen($d) > 250) $d = utf8_substr($d,0,250).'...';
+ $k = $item['meta']->getField(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject'));
+
+ // print EXIF/IPTC data
+ if($t || $d || $k ){
+ echo '<p>';
+ if($t) echo '<strong>'.htmlspecialchars($t).'</strong><br />';
+ if($d) echo htmlspecialchars($d).'<br />';
+ if($t) echo '<em>'.htmlspecialchars($k).'</em>';
+ echo '</p>';
+ }
+ echo '</div>';
+}
+
+/**
+ * Print the media upload form if permissions are correct
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_uploadform($ns, $auth){
+ global $lang;
+
+ if($auth < AUTH_UPLOAD) return; //fixme print info on missing permissions?
+
+ // The default HTML upload form
+ $form = new Doku_Form(array('id' => 'dw__upload',
+ 'action' => DOKU_BASE.'lib/exe/mediamanager.php',
+ 'enctype' => 'multipart/form-data'));
+ $form->addElement('<div class="upload">' . $lang['mediaupload'] . '</div>');
+ $form->addElement(formSecurityToken());
+ $form->addHidden('ns', hsc($ns));
+ $form->addElement(form_makeOpenTag('p'));
+ $form->addElement(form_makeFileField('upload', $lang['txt_upload'].':', 'upload__file'));
+ $form->addElement(form_makeCloseTag('p'));
+ $form->addElement(form_makeOpenTag('p'));
+ $form->addElement(form_makeTextField('id', '', $lang['txt_filename'].':', 'upload__name'));
+ $form->addElement(form_makeButton('submit', '', $lang['btn_upload']));
+ $form->addElement(form_makeCloseTag('p'));
+
+ if($auth >= AUTH_DELETE){
+ $form->addElement(form_makeOpenTag('p'));
+ $form->addElement(form_makeCheckboxField('ow', 1, $lang['txt_overwrt'], 'dw__ow', 'check'));
+ $form->addElement(form_makeCloseTag('p'));
+ }
+ html_form('upload', $form);
+
+ // prepare flashvars for multiupload
+ $opt = array(
+ 'L_gridname' => $lang['mu_gridname'] ,
+ 'L_gridsize' => $lang['mu_gridsize'] ,
+ 'L_gridstat' => $lang['mu_gridstat'] ,
+ 'L_namespace' => $lang['mu_namespace'] ,
+ 'L_overwrite' => $lang['txt_overwrt'],
+ 'L_browse' => $lang['mu_browse'],
+ 'L_upload' => $lang['btn_upload'],
+ 'L_toobig' => $lang['mu_toobig'],
+ 'L_ready' => $lang['mu_ready'],
+ 'L_done' => $lang['mu_done'],
+ 'L_fail' => $lang['mu_fail'],
+ 'L_authfail' => $lang['mu_authfail'],
+ 'L_progress' => $lang['mu_progress'],
+ 'L_filetypes' => $lang['mu_filetypes'],
+ 'L_info' => $lang['mu_info'],
+ 'L_lasterr' => $lang['mu_lasterr'],
+
+ 'O_ns' => ":$ns",
+ 'O_backend' => 'mediamanager.php?'.session_name().'='.session_id(),
+ 'O_maxsize' => php_to_byte(ini_get('upload_max_filesize')),
+ 'O_extensions'=> join('|',array_keys(getMimeTypes())),
+ 'O_overwrite' => ($auth >= AUTH_DELETE),
+ 'O_sectok' => getSecurityToken(),
+ 'O_authtok' => auth_createToken(),
+ );
+ $var = buildURLparams($opt);
+ // output the flash uploader
+ ?>
+ <div id="dw__flashupload" style="display:none">
+ <div class="upload"><?php echo $lang['mu_intro']?></div>
+ <?php echo html_flashobject('multipleUpload.swf','500','190',null,$opt); ?>
+ </div>
+ <?php
+}
+
+/**
+ * Print the search field form
+ *
+ * @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ */
+function media_searchform($ns,$query=''){
+ global $lang;
+
+ // The default HTML search form
+ $form = new Doku_Form(array('id' => 'dw__mediasearch', 'action' => DOKU_BASE.'lib/exe/mediamanager.php'));
+ $form->addElement('<div class="upload">' . $lang['mediasearch'] . '</div>');
+ $form->addElement(formSecurityToken());
+ $form->addHidden('ns', $ns);
+ $form->addHidden('do', 'searchlist');
+ $form->addElement(form_makeOpenTag('p'));
+ $form->addElement(form_makeTextField('q', $query,$lang['searchmedia'],'','',array('title'=>sprintf($lang['searchmedia_in'],hsc($ns).':*'))));
+ $form->addElement(form_makeButton('submit', '', $lang['btn_search']));
+ $form->addElement(form_makeCloseTag('p'));
+ html_form('searchmedia', $form);
+}
+
+/**
+ * Build a tree outline of available media namespaces
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_nstree($ns){
+ global $conf;
+ global $lang;
+
+ // currently selected namespace
+ $ns = cleanID($ns);
+ if(empty($ns)){
+ $ns = dirname(str_replace(':','/',$ID));
+ if($ns == '.') $ns ='';
+ }
+ $ns = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $data = array();
+ search($data,$conf['mediadir'],'search_index',array('ns' => $ns, 'nofiles' => true));
+
+ // wrap a list with the root level around the other namespaces
+ $item = array( 'level' => 0, 'id' => '',
+ 'open' =>'true', 'label' => '['.$lang['mediaroot'].']');
+
+ echo '<ul class="idx">';
+ echo media_nstree_li($item);
+ echo media_nstree_item($item);
+ echo html_buildlist($data,'idx','media_nstree_item','media_nstree_li');
+ echo '</li>';
+ echo '</ul>';
+}
+
+/**
+ * Userfunction for html_buildlist
+ *
+ * Prints a media namespace tree item
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_nstree_item($item){
+ $pos = strrpos($item['id'], ':');
+ $label = substr($item['id'], $pos > 0 ? $pos + 1 : 0);
+ if(!$item['label']) $item['label'] = $label;
+
+ $ret = '';
+ $ret .= '<a href="'.DOKU_BASE.'lib/exe/mediamanager.php?ns='.idfilter($item['id']).'" class="idx_dir">';
+ $ret .= $item['label'];
+ $ret .= '</a>';
+ return $ret;
+}
+
+/**
+ * Userfunction for html_buildlist
+ *
+ * Prints a media namespace tree item opener
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_nstree_li($item){
+ $class='media level'.$item['level'];
+ if($item['open']){
+ $class .= ' open';
+ $img = DOKU_BASE.'lib/images/minus.gif';
+ $alt = '&minus;';
+ }else{
+ $class .= ' closed';
+ $img = DOKU_BASE.'lib/images/plus.gif';
+ $alt = '+';
+ }
+ return '<li class="'.$class.'">'.
+ '<img src="'.$img.'" alt="'.$alt.'" />';
+}
+
+/**
+ * Resizes the given image to the given size
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_resize_image($file, $ext, $w, $h=0){
+ global $conf;
+
+ $info = @getimagesize($file); //get original size
+ if($info == false) return $file; // that's no image - it's a spaceship!
+
+ if(!$h) $h = round(($w * $info[1]) / $info[0]);
+
+ // we wont scale up to infinity
+ if($w > 2000 || $h > 2000) return $file;
+
+ //cache
+ $local = getCacheName($file,'.media.'.$w.'x'.$h.'.'.$ext);
+ $mtime = @filemtime($local); // 0 if not exists
+
+ if( $mtime > filemtime($file) ||
+ media_resize_imageIM($ext,$file,$info[0],$info[1],$local,$w,$h) ||
+ media_resize_imageGD($ext,$file,$info[0],$info[1],$local,$w,$h) ){
+ if($conf['fperm']) chmod($local, $conf['fperm']);
+ return $local;
+ }
+ //still here? resizing failed
+ return $file;
+}
+
+/**
+ * Crops the given image to the wanted ratio, then calls media_resize_image to scale it
+ * to the wanted size
+ *
+ * Crops are centered horizontally but prefer the upper third of an vertical
+ * image because most pics are more interesting in that area (rule of thirds)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_crop_image($file, $ext, $w, $h=0){
+ global $conf;
+
+ if(!$h) $h = $w;
+ $info = @getimagesize($file); //get original size
+ if($info == false) return $file; // that's no image - it's a spaceship!
+
+ // calculate crop size
+ $fr = $info[0]/$info[1];
+ $tr = $w/$h;
+ if($tr >= 1){
+ if($tr > $fr){
+ $cw = $info[0];
+ $ch = (int) $info[0]/$tr;
+ }else{
+ $cw = (int) $info[1]*$tr;
+ $ch = $info[1];
+ }
+ }else{
+ if($tr < $fr){
+ $cw = (int) $info[1]*$tr;
+ $ch = $info[1];
+ }else{
+ $cw = $info[0];
+ $ch = (int) $info[0]/$tr;
+ }
+ }
+ // calculate crop offset
+ $cx = (int) ($info[0]-$cw)/2;
+ $cy = (int) ($info[1]-$ch)/3;
+
+ //cache
+ $local = getCacheName($file,'.media.'.$cw.'x'.$ch.'.crop.'.$ext);
+ $mtime = @filemtime($local); // 0 if not exists
+
+ if( $mtime > filemtime($file) ||
+ media_crop_imageIM($ext,$file,$info[0],$info[1],$local,$cw,$ch,$cx,$cy) ||
+ media_resize_imageGD($ext,$file,$cw,$ch,$local,$cw,$ch,$cx,$cy) ){
+ if($conf['fperm']) chmod($local, $conf['fperm']);
+ return media_resize_image($local,$ext, $w, $h);
+ }
+
+ //still here? cropping failed
+ return media_resize_image($file,$ext, $w, $h);
+}
+
+/**
+ * Download a remote file and return local filename
+ *
+ * returns false if download fails. Uses cached file if available and
+ * wanted
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Pavel Vitis <Pavel.Vitis@seznam.cz>
+ */
+function media_get_from_URL($url,$ext,$cache){
+ global $conf;
+
+ // if no cache or fetchsize just redirect
+ if ($cache==0) return false;
+ if (!$conf['fetchsize']) return false;
+
+ $local = getCacheName(strtolower($url),".media.$ext");
+ $mtime = @filemtime($local); // 0 if not exists
+
+ //decide if download needed:
+ if( ($mtime == 0) || // cache does not exist
+ ($cache != -1 && $mtime < time()-$cache) // 'recache' and cache has expired
+ ){
+ if(media_image_download($url,$local)){
+ return $local;
+ }else{
+ return false;
+ }
+ }
+
+ //if cache exists use it else
+ if($mtime) return $local;
+
+ //else return false
+ return false;
+}
+
+/**
+ * Download image files
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_image_download($url,$file){
+ global $conf;
+ $http = new DokuHTTPClient();
+ $http->max_bodysize = $conf['fetchsize'];
+ $http->timeout = 25; //max. 25 sec
+ $http->header_regexp = '!\r\nContent-Type: image/(jpe?g|gif|png)!i';
+
+ $data = $http->get($url);
+ if(!$data) return false;
+
+ $fileexists = @file_exists($file);
+ $fp = @fopen($file,"w");
+ if(!$fp) return false;
+ fwrite($fp,$data);
+ fclose($fp);
+ if(!$fileexists and $conf['fperm']) chmod($file, $conf['fperm']);
+
+ // check if it is really an image
+ $info = @getimagesize($file);
+ if(!$info){
+ @unlink($file);
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * resize images using external ImageMagick convert program
+ *
+ * @author Pavel Vitis <Pavel.Vitis@seznam.cz>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_resize_imageIM($ext,$from,$from_w,$from_h,$to,$to_w,$to_h){
+ global $conf;
+
+ // check if convert is configured
+ if(!$conf['im_convert']) return false;
+
+ // prepare command
+ $cmd = $conf['im_convert'];
+ $cmd .= ' -resize '.$to_w.'x'.$to_h.'!';
+ if ($ext == 'jpg' || $ext == 'jpeg') {
+ $cmd .= ' -quality '.$conf['jpg_quality'];
+ }
+ $cmd .= " $from $to";
+
+ @exec($cmd,$out,$retval);
+ if ($retval == 0) return true;
+ return false;
+}
+
+/**
+ * crop images using external ImageMagick convert program
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function media_crop_imageIM($ext,$from,$from_w,$from_h,$to,$to_w,$to_h,$ofs_x,$ofs_y){
+ global $conf;
+
+ // check if convert is configured
+ if(!$conf['im_convert']) return false;
+
+ // prepare command
+ $cmd = $conf['im_convert'];
+ $cmd .= ' -crop '.$to_w.'x'.$to_h.'+'.$ofs_x.'+'.$ofs_y;
+ if ($ext == 'jpg' || $ext == 'jpeg') {
+ $cmd .= ' -quality '.$conf['jpg_quality'];
+ }
+ $cmd .= " $from $to";
+
+ @exec($cmd,$out,$retval);
+ if ($retval == 0) return true;
+ return false;
+}
+
+/**
+ * resize or crop images using PHP's libGD support
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Sebastian Wienecke <s_wienecke@web.de>
+ */
+function media_resize_imageGD($ext,$from,$from_w,$from_h,$to,$to_w,$to_h,$ofs_x=0,$ofs_y=0){
+ global $conf;
+
+ if($conf['gdlib'] < 1) return false; //no GDlib available or wanted
+
+ // check available memory
+ if(!is_mem_available(($from_w * $from_h * 4) + ($to_w * $to_h * 4))){
+ return false;
+ }
+
+ // create an image of the given filetype
+ if ($ext == 'jpg' || $ext == 'jpeg'){
+ if(!function_exists("imagecreatefromjpeg")) return false;
+ $image = @imagecreatefromjpeg($from);
+ }elseif($ext == 'png') {
+ if(!function_exists("imagecreatefrompng")) return false;
+ $image = @imagecreatefrompng($from);
+
+ }elseif($ext == 'gif') {
+ if(!function_exists("imagecreatefromgif")) return false;
+ $image = @imagecreatefromgif($from);
+ }
+ if(!$image) return false;
+
+ if(($conf['gdlib']>1) && function_exists("imagecreatetruecolor") && $ext != 'gif'){
+ $newimg = @imagecreatetruecolor ($to_w, $to_h);
+ }
+ if(!$newimg) $newimg = @imagecreate($to_w, $to_h);
+ if(!$newimg){
+ imagedestroy($image);
+ return false;
+ }
+
+ //keep png alpha channel if possible
+ if($ext == 'png' && $conf['gdlib']>1 && function_exists('imagesavealpha')){
+ imagealphablending($newimg, false);
+ imagesavealpha($newimg,true);
+ }
+
+ //keep gif transparent color if possible
+ if($ext == 'gif' && function_exists('imagefill') && function_exists('imagecolorallocate')) {
+ if(function_exists('imagecolorsforindex') && function_exists('imagecolortransparent')) {
+ $transcolorindex = @imagecolortransparent($image);
+ if($transcolorindex >= 0 ) { //transparent color exists
+ $transcolor = @imagecolorsforindex($image, $transcolorindex);
+ $transcolorindex = @imagecolorallocate($newimg, $transcolor['red'], $transcolor['green'], $transcolor['blue']);
+ @imagefill($newimg, 0, 0, $transcolorindex);
+ @imagecolortransparent($newimg, $transcolorindex);
+ }else{ //filling with white
+ $whitecolorindex = @imagecolorallocate($newimg, 255, 255, 255);
+ @imagefill($newimg, 0, 0, $whitecolorindex);
+ }
+ }else{ //filling with white
+ $whitecolorindex = @imagecolorallocate($newimg, 255, 255, 255);
+ @imagefill($newimg, 0, 0, $whitecolorindex);
+ }
+ }
+
+ //try resampling first
+ if(function_exists("imagecopyresampled")){
+ if(!@imagecopyresampled($newimg, $image, 0, 0, $ofs_x, $ofs_y, $to_w, $to_h, $from_w, $from_h)) {
+ imagecopyresized($newimg, $image, 0, 0, $ofs_x, $ofs_y, $to_w, $to_h, $from_w, $from_h);
+ }
+ }else{
+ imagecopyresized($newimg, $image, 0, 0, $ofs_x, $ofs_y, $to_w, $to_h, $from_w, $from_h);
+ }
+
+ $okay = false;
+ if ($ext == 'jpg' || $ext == 'jpeg'){
+ if(!function_exists('imagejpeg')){
+ $okay = false;
+ }else{
+ $okay = imagejpeg($newimg, $to, $conf['jpg_quality']);
+ }
+ }elseif($ext == 'png') {
+ if(!function_exists('imagepng')){
+ $okay = false;
+ }else{
+ $okay = imagepng($newimg, $to);
+ }
+ }elseif($ext == 'gif') {
+ if(!function_exists('imagegif')){
+ $okay = false;
+ }else{
+ $okay = imagegif($newimg, $to);
+ }
+ }
+
+ // destroy GD image ressources
+ if($image) imagedestroy($image);
+ if($newimg) imagedestroy($newimg);
+
+ return $okay;
+}
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php
new file mode 100644
index 000000000..9c192e5e6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php
@@ -0,0 +1,537 @@
+<?php
+/**
+ * Utilities for handling pagenames
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @todo Combine similar functions like {wiki,media,meta}FN()
+ */
+
+/**
+ * Fetch the an ID from request
+ *
+ * Uses either standard $_REQUEST variable or extracts it from
+ * the full request URI when userewrite is set to 2
+ *
+ * For $param='id' $conf['start'] is returned if no id was found.
+ * If the second parameter is true (default) the ID is cleaned.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function getID($param='id',$clean=true){
+ global $conf;
+
+ $id = isset($_REQUEST[$param]) ? $_REQUEST[$param] : null;
+
+ $request = $_SERVER['REQUEST_URI'];
+
+ //construct page id from request URI
+ if(empty($id) && $conf['userewrite'] == 2){
+ //get the script URL
+ if($conf['basedir']){
+ $relpath = '';
+ if($param != 'id') {
+ $relpath = 'lib/exe/';
+ }
+ $script = $conf['basedir'].$relpath.basename($_SERVER['SCRIPT_FILENAME']);
+
+ }elseif($_SERVER['DOCUMENT_ROOT'] && $_SERVER['PATH_TRANSLATED']){
+ $request = preg_replace ('/^'.preg_quote($_SERVER['DOCUMENT_ROOT'],'/').'/','',
+ $_SERVER['PATH_TRANSLATED']);
+ }elseif($_SERVER['DOCUMENT_ROOT'] && $_SERVER['SCRIPT_FILENAME']){
+ $script = preg_replace ('/^'.preg_quote($_SERVER['DOCUMENT_ROOT'],'/').'/','',
+ $_SERVER['SCRIPT_FILENAME']);
+ $script = '/'.$script;
+ }else{
+ $script = $_SERVER['SCRIPT_NAME'];
+ }
+
+ //clean script and request (fixes a windows problem)
+ $script = preg_replace('/\/\/+/','/',$script);
+ $request = preg_replace('/\/\/+/','/',$request);
+
+ //remove script URL and Querystring to gain the id
+ if(preg_match('/^'.preg_quote($script,'/').'(.*)/',$request, $match)){
+ $id = preg_replace ('/\?.*/','',$match[1]);
+ }
+ $id = urldecode($id);
+ //strip leading slashes
+ $id = preg_replace('!^/+!','',$id);
+ }
+
+ // Namespace autolinking from URL
+ if(substr($id,-1) == ':' || ($conf['useslash'] && substr($id,-1) == '/')){
+ if(page_exists($id.$conf['start'])){
+ // start page inside namespace
+ $id = $id.$conf['start'];
+ }elseif(page_exists($id.noNS(cleanID($id)))){
+ // page named like the NS inside the NS
+ $id = $id.noNS(cleanID($id));
+ }elseif(page_exists($id)){
+ // page like namespace exists
+ $id = substr($id,0,-1);
+ }else{
+ // fall back to default
+ $id = $id.$conf['start'];
+ }
+ send_redirect(wl($id,'',true));
+ }
+
+ if($clean) $id = cleanID($id);
+ if(empty($id) && $param=='id') $id = $conf['start'];
+
+ return $id;
+}
+
+/**
+ * Remove unwanted chars from ID
+ *
+ * Cleans a given ID to only use allowed characters. Accented characters are
+ * converted to unaccented ones
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $raw_id The pageid to clean
+ * @param boolean $ascii Force ASCII
+ * @param boolean $media Allow leading or trailing _ for media files
+ */
+function cleanID($raw_id,$ascii=false,$media=false){
+ global $conf;
+ global $lang;
+ static $sepcharpat = null;
+
+ global $cache_cleanid;
+ $cache = & $cache_cleanid;
+
+ // check if it's already in the memory cache
+ if (isset($cache[(string)$raw_id])) {
+ return $cache[(string)$raw_id];
+ }
+
+ $sepchar = $conf['sepchar'];
+ if($sepcharpat == null) // build string only once to save clock cycles
+ $sepcharpat = '#\\'.$sepchar.'+#';
+
+ $id = trim((string)$raw_id);
+ $id = utf8_strtolower($id);
+
+ //alternative namespace seperator
+ $id = strtr($id,';',':');
+ if($conf['useslash']){
+ $id = strtr($id,'/',':');
+ }else{
+ $id = strtr($id,'/',$sepchar);
+ }
+
+ if($conf['deaccent'] == 2 || $ascii) $id = utf8_romanize($id);
+ if($conf['deaccent'] || $ascii) $id = utf8_deaccent($id,-1);
+
+ //remove specials
+ $id = utf8_stripspecials($id,$sepchar,'\*');
+
+ if($ascii) $id = utf8_strip($id);
+
+ //clean up
+ $id = preg_replace($sepcharpat,$sepchar,$id);
+ $id = preg_replace('#:+#',':',$id);
+ $id = ($media ? trim($id,':.-') : trim($id,':._-'));
+ $id = preg_replace('#:[:\._\-]+#',':',$id);
+
+ $cache[(string)$raw_id] = $id;
+ return($id);
+}
+
+/**
+ * Return namespacepart of a wiki ID
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function getNS($id){
+ $pos = strrpos((string)$id,':');
+ if($pos!==false){
+ return substr((string)$id,0,$pos);
+ }
+ return false;
+}
+
+/**
+ * Returns the ID without the namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function noNS($id) {
+ $pos = strrpos($id, ':');
+ if ($pos!==false) {
+ return substr($id, $pos+1);
+ } else {
+ return $id;
+ }
+}
+
+/**
+ * Returns the current namespace
+ *
+ * @author Nathan Fritz <fritzn@crown.edu>
+ */
+function curNS($id) {
+ return noNS(getNS($id));
+}
+
+/**
+ * Returns the ID without the namespace or current namespace for 'start' pages
+ *
+ * @author Nathan Fritz <fritzn@crown.edu>
+ */
+function noNSorNS($id) {
+ global $conf;
+
+ $p = noNS($id);
+ if ($p == $conf['start']) {
+ $p = curNS($id);
+ if ($p == false) {
+ return noNS($id);
+ }
+ }
+ return $p;
+}
+
+/**
+ * Creates a XHTML valid linkid from a given headline title
+ *
+ * @param string $title The headline title
+ * @param array $check List of existing IDs
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function sectionID($title,&$check) {
+ $title = str_replace(array(':','.'),'',cleanID($title));
+ $new = ltrim($title,'0123456789_-');
+ if(empty($new)){
+ $title = 'section'.preg_replace('/[^0-9]+/','',$title); //keep numbers from headline
+ }else{
+ $title = $new;
+ }
+
+ if(is_array($check)){
+ // make sure tiles are unique
+ $num = '';
+ while(in_array($title.$num,$check)){
+ ($num) ? $num++ : $num = 1;
+ }
+ $title = $title.$num;
+ $check[] = $title;
+ }
+
+ return $title;
+}
+
+
+/**
+ * Wiki page existence check
+ *
+ * parameters as for wikiFN
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function page_exists($id,$rev='',$clean=true) {
+ return @file_exists(wikiFN($id,$rev,$clean));
+}
+
+/**
+ * returns the full path to the datafile specified by ID and optional revision
+ *
+ * The filename is URL encoded to protect Unicode chars
+ *
+ * @param $raw_id string id of wikipage
+ * @param $rev string page revision, empty string for current
+ * @param $clean bool flag indicating that $raw_id should be cleaned. Only set to false
+ * when $id is guaranteed to have been cleaned already.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function wikiFN($raw_id,$rev='',$clean=true){
+ global $conf;
+
+ global $cache_wikifn;
+ $cache = & $cache_wikifn;
+
+ if (isset($cache[$raw_id]) && isset($cache[$raw_id][$rev])) {
+ return $cache[$raw_id][$rev];
+ }
+
+ $id = $raw_id;
+
+ if ($clean) $id = cleanID($id);
+ $id = str_replace(':','/',$id);
+ if(empty($rev)){
+ $fn = $conf['datadir'].'/'.utf8_encodeFN($id).'.txt';
+ }else{
+ $fn = $conf['olddir'].'/'.utf8_encodeFN($id).'.'.$rev.'.txt';
+ if($conf['compression']){
+ //test for extensions here, we want to read both compressions
+ if (@file_exists($fn . '.gz')){
+ $fn .= '.gz';
+ }else if(@file_exists($fn . '.bz2')){
+ $fn .= '.bz2';
+ }else{
+ //file doesnt exist yet, so we take the configured extension
+ $fn .= '.' . $conf['compression'];
+ }
+ }
+ }
+
+ if (!isset($cache[$raw_id])) { $cache[$raw_id] = array(); }
+ $cache[$raw_id][$rev] = $fn;
+ return $fn;
+}
+
+/**
+ * Returns the full path to the file for locking the page while editing.
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function wikiLockFN($id) {
+ global $conf;
+ return $conf['lockdir'].'/'.md5(cleanID($id)).'.lock';
+}
+
+
+/**
+ * returns the full path to the meta file specified by ID and extension
+ *
+ * The filename is URL encoded to protect Unicode chars
+ *
+ * @author Steven Danz <steven-danz@kc.rr.com>
+ */
+function metaFN($id,$ext){
+ global $conf;
+ $id = cleanID($id);
+ $id = str_replace(':','/',$id);
+ $fn = $conf['metadir'].'/'.utf8_encodeFN($id).$ext;
+ return $fn;
+}
+
+/**
+ * returns an array of full paths to all metafiles of a given ID
+ *
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ */
+function metaFiles($id){
+ $name = noNS($id);
+ $ns = getNS($id);
+ $dir = ($ns) ? metaFN($ns,'').'/' : metaFN($ns,'');
+ $files = array();
+
+ $dh = @opendir($dir);
+ if(!$dh) return $files;
+ while(($file = readdir($dh)) !== false){
+ if(strpos($file,$name.'.') === 0 && !is_dir($dir.$file))
+ $files[] = $dir.$file;
+ }
+ closedir($dh);
+
+ return $files;
+}
+
+/**
+ * returns the full path to the mediafile specified by ID
+ *
+ * The filename is URL encoded to protect Unicode chars
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function mediaFN($id){
+ global $conf;
+ $id = cleanID($id);
+ $id = str_replace(':','/',$id);
+ $fn = $conf['mediadir'].'/'.utf8_encodeFN($id);
+ return $fn;
+}
+
+/**
+ * Returns the full filepath to a localized textfile if local
+ * version isn't found the english one is returned
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function localeFN($id){
+ global $conf;
+ $file = DOKU_INC.'inc/lang/'.$conf['lang'].'/'.$id.'.txt';
+ if(!@file_exists($file)){
+ //fall back to english
+ $file = DOKU_INC.'inc/lang/en/'.$id.'.txt';
+ }
+ return $file;
+}
+
+/**
+ * Resolve relative paths in IDs
+ *
+ * Do not call directly use resolve_mediaid or resolve_pageid
+ * instead
+ *
+ * Partyly based on a cleanPath function found at
+ * http://www.php.net/manual/en/function.realpath.php#57016
+ *
+ * @author <bart at mediawave dot nl>
+ */
+function resolve_id($ns,$id,$clean=true){
+ global $conf;
+
+ // some pre cleaning for useslash:
+ if($conf['useslash']) $id = str_replace('/',':',$id);
+
+ // if the id starts with a dot we need to handle the
+ // relative stuff
+ if($id{0} == '.'){
+ // normalize initial dots without a colon
+ $id = preg_replace('/^(\.+)(?=[^:\.])/','\1:',$id);
+ // prepend the current namespace
+ $id = $ns.':'.$id;
+
+ // cleanup relatives
+ $result = array();
+ $pathA = explode(':', $id);
+ if (!$pathA[0]) $result[] = '';
+ foreach ($pathA AS $key => $dir) {
+ if ($dir == '..') {
+ if (end($result) == '..') {
+ $result[] = '..';
+ } elseif (!array_pop($result)) {
+ $result[] = '..';
+ }
+ } elseif ($dir && $dir != '.') {
+ $result[] = $dir;
+ }
+ }
+ if (!end($pathA)) $result[] = '';
+ $id = implode(':', $result);
+ }elseif($ns !== false && strpos($id,':') === false){
+ //if link contains no namespace. add current namespace (if any)
+ $id = $ns.':'.$id;
+ }
+
+ if($clean) $id = cleanID($id);
+ return $id;
+}
+
+/**
+ * Returns a full media id
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function resolve_mediaid($ns,&$page,&$exists){
+ $page = resolve_id($ns,$page);
+ $file = mediaFN($page);
+ $exists = @file_exists($file);
+}
+
+/**
+ * Returns a full page id
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function resolve_pageid($ns,&$page,&$exists){
+ global $conf;
+ $exists = false;
+
+ //keep hashlink if exists then clean both parts
+ if (strpos($page,'#')) {
+ list($page,$hash) = explode('#',$page,2);
+ } else {
+ $hash = '';
+ }
+ $hash = cleanID($hash);
+ $page = resolve_id($ns,$page,false); // resolve but don't clean, yet
+
+ // get filename (calls clean itself)
+ $file = wikiFN($page);
+
+ // if ends with colon or slash we have a namespace link
+ if(substr($page,-1) == ':' || ($conf['useslash'] && substr($page,-1) == '/')){
+ if(page_exists($page.$conf['start'])){
+ // start page inside namespace
+ $page = $page.$conf['start'];
+ $exists = true;
+ }elseif(page_exists($page.noNS(cleanID($page)))){
+ // page named like the NS inside the NS
+ $page = $page.noNS(cleanID($page));
+ $exists = true;
+ }elseif(page_exists($page)){
+ // page like namespace exists
+ $page = $page;
+ $exists = true;
+ }else{
+ // fall back to default
+ $page = $page.$conf['start'];
+ }
+ }else{
+ //check alternative plural/nonplural form
+ if(!@file_exists($file)){
+ if( $conf['autoplural'] ){
+ if(substr($page,-1) == 's'){
+ $try = substr($page,0,-1);
+ }else{
+ $try = $page.'s';
+ }
+ if(page_exists($try)){
+ $page = $try;
+ $exists = true;
+ }
+ }
+ }else{
+ $exists = true;
+ }
+ }
+
+ // now make sure we have a clean page
+ $page = cleanID($page);
+
+ //add hash if any
+ if(!empty($hash)) $page .= '#'.$hash;
+}
+
+/**
+ * Returns the name of a cachefile from given data
+ *
+ * The needed directory is created by this function!
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param string $data This data is used to create a unique md5 name
+ * @param string $ext This is appended to the filename if given
+ * @return string The filename of the cachefile
+ */
+function getCacheName($data,$ext=''){
+ global $conf;
+ $md5 = md5($data);
+ $file = $conf['cachedir'].'/'.$md5{0}.'/'.$md5.$ext;
+ io_makeFileDir($file);
+ return $file;
+}
+
+/**
+ * Checks a pageid against $conf['hidepages']
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function isHiddenPage($id){
+ global $conf;
+ global $ACT;
+ if(empty($conf['hidepages'])) return false;
+ if($ACT == 'admin') return false;
+
+ if(preg_match('/'.$conf['hidepages'].'/ui',':'.$id)){
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Reverse of isHiddenPage
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function isVisiblePage($id){
+ return !isHiddenPage($id);
+}
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php
new file mode 100644
index 000000000..4d94dcf4e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * A simple renderer that allows downloading of code and file snippets
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+if(!defined('DOKU_INC')) die('meh.');
+require_once DOKU_INC . 'inc/parser/renderer.php';
+
+class Doku_Renderer_code extends Doku_Renderer {
+ var $_codeblock=0;
+
+ /**
+ * Send the wanted code block to the browser
+ *
+ * When the correct block was found it exits the script.
+ */
+ function code($text, $language = NULL, $filename='' ) {
+ if(!$language) $language = 'txt';
+ if(!$filename) $filename = 'snippet.'.$language;
+ $filename = basename($filename);
+
+ if($this->_codeblock == $_REQUEST['codeblock']){
+ header("Content-Type: text/plain; charset=utf-8");
+ header("Content-Disposition: attachment; filename=$filename");
+ header("X-Robots-Tag: noindex");
+ echo trim($text,"\r\n");
+ exit;
+ }
+
+ $this->_codeblock++;
+ }
+
+ /**
+ * Wraps around code()
+ */
+ function file($text, $language = NULL, $filename='') {
+ $this->code($text, $language, $filename);
+ }
+
+ /**
+ * This should never be reached, if it is send a 404
+ */
+ function document_end() {
+ header("HTTP/1.0 404 Not Found");
+ echo '404 - Not found';
+ exit;
+ }
+
+ /**
+ * Return the format of the renderer
+ *
+ * @returns string 'code'
+ */
+ function getFormat(){
+ return 'code';
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php
new file mode 100644
index 000000000..9fe5866ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php
@@ -0,0 +1,1697 @@
+<?php
+if(!defined('DOKU_INC')) die('meh.');
+if (!defined('DOKU_PARSER_EOL')) define('DOKU_PARSER_EOL',"\n"); // add this to make handling test cases simpler
+
+class Doku_Handler {
+
+ var $Renderer = NULL;
+
+ var $CallWriter = NULL;
+
+ var $calls = array();
+
+ var $status = array(
+ 'section' => false,
+ 'section_edit_start' => -1,
+ 'section_edit_level' => 1,
+ 'section_edit_title' => ''
+ );
+
+ var $rewriteBlocks = true;
+
+ function Doku_Handler() {
+ $this->CallWriter = & new Doku_Handler_CallWriter($this);
+ }
+
+ function _addCall($handler, $args, $pos) {
+ $call = array($handler,$args, $pos);
+ $this->CallWriter->writeCall($call);
+ }
+
+ function addPluginCall($plugin, $args, $state, $pos, $match) {
+ $call = array('plugin',array($plugin, $args, $state, $match), $pos);
+ $this->CallWriter->writeCall($call);
+ }
+
+ function _finalize(){
+
+ $this->CallWriter->finalise();
+
+ if ( $this->status['section'] ) {
+ $last_call = end($this->calls);
+ array_push($this->calls,array('section_close',array(), $last_call[2]));
+ if ($this->status['section_edit_start']>1) {
+ // ignore last edit section if there is only one header
+ array_push($this->calls,array('section_edit',array($this->status['section_edit_start'], 0, $this->status['section_edit_level'], $this->status['section_edit_title']), $last_call[2]));
+ }
+ }
+
+ if ( $this->rewriteBlocks ) {
+ $B = & new Doku_Handler_Block();
+ $this->calls = $B->process($this->calls);
+ }
+
+ trigger_event('PARSER_HANDLER_DONE',$this);
+
+ array_unshift($this->calls,array('document_start',array(),0));
+ $last_call = end($this->calls);
+ array_push($this->calls,array('document_end',array(),$last_call[2]));
+ }
+
+ function fetch() {
+ $call = each($this->calls);
+ if ( $call ) {
+ return $call['value'];
+ }
+ return false;
+ }
+
+
+ /**
+ * Special plugin handler
+ *
+ * This handler is called for all modes starting with 'plugin_'.
+ * An additional parameter with the plugin name is passed
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function plugin($match, $state, $pos, $pluginname){
+ $data = array($match);
+ $plugin =& plugin_load('syntax',$pluginname);
+ if($plugin != null){
+ $data = $plugin->handle($match, $state, $pos, $this);
+ }
+ if ($data !== false) {
+ $this->addPluginCall($pluginname,$data,$state,$pos,$match);
+ }
+ return true;
+ }
+
+ function base($match, $state, $pos) {
+ switch ( $state ) {
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('cdata',array($match), $pos);
+ return true;
+ break;
+ }
+ }
+
+ function header($match, $state, $pos) {
+ global $conf;
+
+ // get level and title
+ $title = trim($match);
+ $level = 7 - strspn($title,'=');
+ if($level < 1) $level = 1;
+ $title = trim($title,'=');
+ $title = trim($title);
+
+ if ($this->status['section']) $this->_addCall('section_close',array(),$pos);
+
+ if ($level<=$conf['maxseclevel']) {
+ $this->_addCall('section_edit',array($this->status['section_edit_start'], $pos-1, $this->status['section_edit_level'], $this->status['section_edit_title']), $pos);
+ $this->status['section_edit_start'] = $pos;
+ $this->status['section_edit_level'] = $level;
+ $this->status['section_edit_title'] = $title;
+ }
+
+ $this->_addCall('header',array($title,$level,$pos), $pos);
+
+ $this->_addCall('section_open',array($level),$pos);
+ $this->status['section'] = true;
+ return true;
+ }
+
+ function notoc($match, $state, $pos) {
+ $this->_addCall('notoc',array(),$pos);
+ return true;
+ }
+
+ function nocache($match, $state, $pos) {
+ $this->_addCall('nocache',array(),$pos);
+ return true;
+ }
+
+ function linebreak($match, $state, $pos) {
+ $this->_addCall('linebreak',array(),$pos);
+ return true;
+ }
+
+ function eol($match, $state, $pos) {
+ $this->_addCall('eol',array(),$pos);
+ return true;
+ }
+
+ function hr($match, $state, $pos) {
+ $this->_addCall('hr',array(),$pos);
+ return true;
+ }
+
+ function _nestingTag($match, $state, $pos, $name) {
+ switch ( $state ) {
+ case DOKU_LEXER_ENTER:
+ $this->_addCall($name.'_open', array(), $pos);
+ break;
+ case DOKU_LEXER_EXIT:
+ $this->_addCall($name.'_close', array(), $pos);
+ break;
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('cdata',array($match), $pos);
+ break;
+ }
+ }
+
+ function strong($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'strong');
+ return true;
+ }
+
+ function emphasis($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'emphasis');
+ return true;
+ }
+
+ function underline($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'underline');
+ return true;
+ }
+
+ function monospace($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'monospace');
+ return true;
+ }
+
+ function subscript($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'subscript');
+ return true;
+ }
+
+ function superscript($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'superscript');
+ return true;
+ }
+
+ function deleted($match, $state, $pos) {
+ $this->_nestingTag($match, $state, $pos, 'deleted');
+ return true;
+ }
+
+
+ function footnote($match, $state, $pos) {
+// $this->_nestingTag($match, $state, $pos, 'footnote');
+ if (!isset($this->_footnote)) $this->_footnote = false;
+
+ switch ( $state ) {
+ case DOKU_LEXER_ENTER:
+ // footnotes can not be nested - however due to limitations in lexer it can't be prevented
+ // we will still enter a new footnote mode, we just do nothing
+ if ($this->_footnote) {
+ $this->_addCall('cdata',array($match), $pos);
+ break;
+ }
+
+ $this->_footnote = true;
+
+ $ReWriter = & new Doku_Handler_Nest($this->CallWriter,'footnote_close');
+ $this->CallWriter = & $ReWriter;
+ $this->_addCall('footnote_open', array(), $pos);
+ break;
+ case DOKU_LEXER_EXIT:
+ // check whether we have already exitted the footnote mode, can happen if the modes were nested
+ if (!$this->_footnote) {
+ $this->_addCall('cdata',array($match), $pos);
+ break;
+ }
+
+ $this->_footnote = false;
+
+ $this->_addCall('footnote_close', array(), $pos);
+ $this->CallWriter->process();
+ $ReWriter = & $this->CallWriter;
+ $this->CallWriter = & $ReWriter->CallWriter;
+ break;
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('cdata', array($match), $pos);
+ break;
+ }
+ return true;
+ }
+
+ function listblock($match, $state, $pos) {
+ switch ( $state ) {
+ case DOKU_LEXER_ENTER:
+ $ReWriter = & new Doku_Handler_List($this->CallWriter);
+ $this->CallWriter = & $ReWriter;
+ $this->_addCall('list_open', array($match), $pos);
+ break;
+ case DOKU_LEXER_EXIT:
+ $this->_addCall('list_close', array(), $pos);
+ $this->CallWriter->process();
+ $ReWriter = & $this->CallWriter;
+ $this->CallWriter = & $ReWriter->CallWriter;
+ break;
+ case DOKU_LEXER_MATCHED:
+ $this->_addCall('list_item', array($match), $pos);
+ break;
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('cdata', array($match), $pos);
+ break;
+ }
+ return true;
+ }
+
+ function unformatted($match, $state, $pos) {
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $this->_addCall('unformatted',array($match), $pos);
+ }
+ return true;
+ }
+
+ function php($match, $state, $pos) {
+ global $conf;
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $this->_addCall('php',array($match), $pos);
+ }
+ return true;
+ }
+
+ function phpblock($match, $state, $pos) {
+ global $conf;
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $this->_addCall('phpblock',array($match), $pos);
+ }
+ return true;
+ }
+
+ function html($match, $state, $pos) {
+ global $conf;
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $this->_addCall('html',array($match), $pos);
+ }
+ return true;
+ }
+
+ function htmlblock($match, $state, $pos) {
+ global $conf;
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $this->_addCall('htmlblock',array($match), $pos);
+ }
+ return true;
+ }
+
+ function preformatted($match, $state, $pos) {
+ switch ( $state ) {
+ case DOKU_LEXER_ENTER:
+ $ReWriter = & new Doku_Handler_Preformatted($this->CallWriter);
+ $this->CallWriter = & $ReWriter;
+ $this->_addCall('preformatted_start',array(), $pos);
+ break;
+ case DOKU_LEXER_EXIT:
+ $this->_addCall('preformatted_end',array(), $pos);
+ $this->CallWriter->process();
+ $ReWriter = & $this->CallWriter;
+ $this->CallWriter = & $ReWriter->CallWriter;
+ break;
+ case DOKU_LEXER_MATCHED:
+ $this->_addCall('preformatted_newline',array(), $pos);
+ break;
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('preformatted_content',array($match), $pos);
+ break;
+ }
+
+ return true;
+ }
+
+ function quote($match, $state, $pos) {
+
+ switch ( $state ) {
+
+ case DOKU_LEXER_ENTER:
+ $ReWriter = & new Doku_Handler_Quote($this->CallWriter);
+ $this->CallWriter = & $ReWriter;
+ $this->_addCall('quote_start',array($match), $pos);
+ break;
+
+ case DOKU_LEXER_EXIT:
+ $this->_addCall('quote_end',array(), $pos);
+ $this->CallWriter->process();
+ $ReWriter = & $this->CallWriter;
+ $this->CallWriter = & $ReWriter->CallWriter;
+ break;
+
+ case DOKU_LEXER_MATCHED:
+ $this->_addCall('quote_newline',array($match), $pos);
+ break;
+
+ case DOKU_LEXER_UNMATCHED:
+ $this->_addCall('cdata',array($match), $pos);
+ break;
+
+ }
+
+ return true;
+ }
+
+ function file($match, $state, $pos) {
+ return $this->code($match, $state, $pos, 'file');
+ }
+
+ function code($match, $state, $pos, $type='code') {
+ if ( $state == DOKU_LEXER_UNMATCHED ) {
+ $matches = explode('>',$match,2);
+ $matches[0] = trim($matches[0]);
+
+ list($language,$filename) = explode(' ',$matches[0],2);
+ $language = trim($language);
+ $filename = trim($filename);
+ if ( $language == '' ) $language = null;
+ if ( $language == '-' ) $language = null;
+ if ( $filename == '' ) $filename = null;
+ # We shortcut html here.
+ if($language == 'html') $language = 'html4strict';
+ $this->_addCall(
+ $type,
+ array($matches[1],$language,$filename),
+ $pos
+ );
+ }
+ return true;
+ }
+
+ function acronym($match, $state, $pos) {
+ $this->_addCall('acronym',array($match), $pos);
+ return true;
+ }
+
+ function smiley($match, $state, $pos) {
+ $this->_addCall('smiley',array($match), $pos);
+ return true;
+ }
+
+ function wordblock($match, $state, $pos) {
+ $this->_addCall('wordblock',array($match), $pos);
+ return true;
+ }
+
+ function entity($match, $state, $pos) {
+ $this->_addCall('entity',array($match), $pos);
+ return true;
+ }
+
+ function multiplyentity($match, $state, $pos) {
+ preg_match_all('/\d+/',$match,$matches);
+ $this->_addCall('multiplyentity',array($matches[0][0],$matches[0][1]), $pos);
+ return true;
+ }
+
+ function singlequoteopening($match, $state, $pos) {
+ $this->_addCall('singlequoteopening',array(), $pos);
+ return true;
+ }
+
+ function singlequoteclosing($match, $state, $pos) {
+ $this->_addCall('singlequoteclosing',array(), $pos);
+ return true;
+ }
+
+ function apostrophe($match, $state, $pos) {
+ $this->_addCall('apostrophe',array(), $pos);
+ return true;
+ }
+
+ function doublequoteopening($match, $state, $pos) {
+ $this->_addCall('doublequoteopening',array(), $pos);
+ return true;
+ }
+
+ function doublequoteclosing($match, $state, $pos) {
+ $this->_addCall('doublequoteclosing',array(), $pos);
+ return true;
+ }
+
+ function camelcaselink($match, $state, $pos) {
+ $this->_addCall('camelcaselink',array($match), $pos);
+ return true;
+ }
+
+ /*
+ */
+ function internallink($match, $state, $pos) {
+ // Strip the opening and closing markup
+ $link = preg_replace(array('/^\[\[/','/\]\]$/u'),'',$match);
+
+ // Split title from URL
+ $link = explode('|',$link,2);
+ if ( !isset($link[1]) ) {
+ $link[1] = NULL;
+ } else if ( preg_match('/^\{\{[^\}]+\}\}$/',$link[1]) ) {
+ // If the title is an image, convert it to an array containing the image details
+ $link[1] = Doku_Handler_Parse_Media($link[1]);
+ }
+ $link[0] = trim($link[0]);
+
+ //decide which kind of link it is
+
+ if ( preg_match('/^[a-zA-Z0-9\.]+>{1}.*$/u',$link[0]) ) {
+ // Interwiki
+ $interwiki = explode('>',$link[0],2);
+ $this->_addCall(
+ 'interwikilink',
+ array($link[0],$link[1],strtolower($interwiki[0]),$interwiki[1]),
+ $pos
+ );
+ }elseif ( preg_match('/^\\\\\\\\[\w.:?\-;,]+?\\\\/u',$link[0]) ) {
+ // Windows Share
+ $this->_addCall(
+ 'windowssharelink',
+ array($link[0],$link[1]),
+ $pos
+ );
+ }elseif ( preg_match('#^([a-z0-9\-\.+]+?)://#i',$link[0]) ) {
+ // external link (accepts all protocols)
+ $this->_addCall(
+ 'externallink',
+ array($link[0],$link[1]),
+ $pos
+ );
+ }elseif ( preg_match('<'.PREG_PATTERN_VALID_EMAIL.'>',$link[0]) ) {
+ // E-Mail (pattern above is defined in inc/mail.php)
+ $this->_addCall(
+ 'emaillink',
+ array($link[0],$link[1]),
+ $pos
+ );
+ }elseif ( preg_match('!^#.+!',$link[0]) ){
+ // local link
+ $this->_addCall(
+ 'locallink',
+ array(substr($link[0],1),$link[1]),
+ $pos
+ );
+ }else{
+ // internal link
+ $this->_addCall(
+ 'internallink',
+ array($link[0],$link[1]),
+ $pos
+ );
+ }
+
+ return true;
+ }
+
+ function filelink($match, $state, $pos) {
+ $this->_addCall('filelink',array($match, NULL), $pos);
+ return true;
+ }
+
+ function windowssharelink($match, $state, $pos) {
+ $this->_addCall('windowssharelink',array($match, NULL), $pos);
+ return true;
+ }
+
+ function media($match, $state, $pos) {
+ $p = Doku_Handler_Parse_Media($match);
+
+ $this->_addCall(
+ $p['type'],
+ array($p['src'], $p['title'], $p['align'], $p['width'],
+ $p['height'], $p['cache'], $p['linking']),
+ $pos
+ );
+ return true;
+ }
+
+ function rss($match, $state, $pos) {
+ $link = preg_replace(array('/^\{\{rss>/','/\}\}$/'),'',$match);
+
+ // get params
+ list($link,$params) = explode(' ',$link,2);
+
+ $p = array();
+ if(preg_match('/\b(\d+)\b/',$params,$match)){
+ $p['max'] = $match[1];
+ }else{
+ $p['max'] = 8;
+ }
+ $p['reverse'] = (preg_match('/rev/',$params));
+ $p['author'] = (preg_match('/\b(by|author)/',$params));
+ $p['date'] = (preg_match('/\b(date)/',$params));
+ $p['details'] = (preg_match('/\b(desc|detail)/',$params));
+
+ if (preg_match('/\b(\d+)([dhm])\b/',$params,$match)) {
+ $period = array('d' => 86400, 'h' => 3600, 'm' => 60);
+ $p['refresh'] = max(600,$match[1]*$period[$match[2]]); // n * period in seconds, minimum 10 minutes
+ } else {
+ $p['refresh'] = 14400; // default to 4 hours
+ }
+
+ $this->_addCall('rss',array($link,$p),$pos);
+ return true;
+ }
+
+ function externallink($match, $state, $pos) {
+ $url = $match;
+ $title = null;
+
+ // add protocol on simple short URLs
+ if(substr($url,0,3) == 'ftp' && (substr($url,0,6) != 'ftp://')){
+ $title = $url;
+ $url = 'ftp://'.$url;
+ }
+ if(substr($url,0,3) == 'www' && (substr($url,0,7) != 'http://')){
+ $title = $url;
+ $url = 'http://'.$url;
+ }
+
+ $this->_addCall('externallink',array($url, $title), $pos);
+ return true;
+ }
+
+ function emaillink($match, $state, $pos) {
+ $email = preg_replace(array('/^</','/>$/'),'',$match);
+ $this->_addCall('emaillink',array($email, NULL), $pos);
+ return true;
+ }
+
+ function table($match, $state, $pos) {
+ switch ( $state ) {
+
+ case DOKU_LEXER_ENTER:
+
+ $ReWriter = & new Doku_Handler_Table($this->CallWriter);
+ $this->CallWriter = & $ReWriter;
+
+ $this->_addCall('table_start', array(), $pos);
+ if ( trim($match) == '^' ) {
+ $this->_addCall('tableheader', array(), $pos);
+ } else {
+ $this->_addCall('tablecell', array(), $pos);
+ }
+ break;
+
+ case DOKU_LEXER_EXIT:
+ $this->_addCall('table_end', array(), $pos);
+ $this->CallWriter->process();
+ $ReWriter = & $this->CallWriter;
+ $this->CallWriter = & $ReWriter->CallWriter;
+ break;
+
+ case DOKU_LEXER_UNMATCHED:
+ if ( trim($match) != '' ) {
+ $this->_addCall('cdata',array($match), $pos);
+ }
+ break;
+
+ case DOKU_LEXER_MATCHED:
+ if ( $match == ' ' ){
+ $this->_addCall('cdata', array($match), $pos);
+ } else if ( preg_match('/:::/',$match) ) {
+ $this->_addCall('rowspan', array($match), $pos);
+ } else if ( preg_match('/\t+/',$match) ) {
+ $this->_addCall('table_align', array($match), $pos);
+ } else if ( preg_match('/ {2,}/',$match) ) {
+ $this->_addCall('table_align', array($match), $pos);
+ } else if ( $match == "\n|" ) {
+ $this->_addCall('table_row', array(), $pos);
+ $this->_addCall('tablecell', array(), $pos);
+ } else if ( $match == "\n^" ) {
+ $this->_addCall('table_row', array(), $pos);
+ $this->_addCall('tableheader', array(), $pos);
+ } else if ( $match == '|' ) {
+ $this->_addCall('tablecell', array(), $pos);
+ } else if ( $match == '^' ) {
+ $this->_addCall('tableheader', array(), $pos);
+ }
+ break;
+ }
+ return true;
+ }
+}
+
+//------------------------------------------------------------------------
+function Doku_Handler_Parse_Media($match) {
+
+ // Strip the opening and closing markup
+ $link = preg_replace(array('/^\{\{/','/\}\}$/u'),'',$match);
+
+ // Split title from URL
+ $link = explode('|',$link,2);
+
+
+ // Check alignment
+ $ralign = (bool)preg_match('/^ /',$link[0]);
+ $lalign = (bool)preg_match('/ $/',$link[0]);
+
+ // Logic = what's that ;)...
+ if ( $lalign & $ralign ) {
+ $align = 'center';
+ } else if ( $ralign ) {
+ $align = 'right';
+ } else if ( $lalign ) {
+ $align = 'left';
+ } else {
+ $align = NULL;
+ }
+
+ // The title...
+ if ( !isset($link[1]) ) {
+ $link[1] = NULL;
+ }
+
+ //remove aligning spaces
+ $link[0] = trim($link[0]);
+
+ //split into src and parameters (using the very last questionmark)
+ $pos = strrpos($link[0], '?');
+ if($pos !== false){
+ $src = substr($link[0],0,$pos);
+ $param = substr($link[0],$pos+1);
+ }else{
+ $src = $link[0];
+ $param = '';
+ }
+
+ //parse width and height
+ if(preg_match('#(\d+)(x(\d+))?#i',$param,$size)){
+ ($size[1]) ? $w = $size[1] : $w = NULL;
+ ($size[3]) ? $h = $size[3] : $h = NULL;
+ } else {
+ $w = NULL;
+ $h = NULL;
+ }
+
+ //get linking command
+ if(preg_match('/nolink/i',$param)){
+ $linking = 'nolink';
+ }else if(preg_match('/direct/i',$param)){
+ $linking = 'direct';
+ }else if(preg_match('/linkonly/i',$param)){
+ $linking = 'linkonly';
+ }else{
+ $linking = 'details';
+ }
+
+ //get caching command
+ if (preg_match('/(nocache|recache)/i',$param,$cachemode)){
+ $cache = $cachemode[1];
+ }else{
+ $cache = 'cache';
+ }
+
+ // Check whether this is a local or remote image
+ if ( preg_match('#^(https?|ftp)#i',$src) ) {
+ $call = 'externalmedia';
+ } else {
+ $call = 'internalmedia';
+ }
+
+ $params = array(
+ 'type'=>$call,
+ 'src'=>$src,
+ 'title'=>$link[1],
+ 'align'=>$align,
+ 'width'=>$w,
+ 'height'=>$h,
+ 'cache'=>$cache,
+ 'linking'=>$linking,
+ );
+
+ return $params;
+}
+
+//------------------------------------------------------------------------
+class Doku_Handler_CallWriter {
+
+ var $Handler;
+
+ function Doku_Handler_CallWriter(& $Handler) {
+ $this->Handler = & $Handler;
+ }
+
+ function writeCall($call) {
+ $this->Handler->calls[] = $call;
+ }
+
+ function writeCalls($calls) {
+ $this->Handler->calls = array_merge($this->Handler->calls, $calls);
+ }
+
+ // function is required, but since this call writer is first/highest in
+ // the chain it is not required to do anything
+ function finalise() {
+ }
+}
+
+//------------------------------------------------------------------------
+/**
+ * Generic call writer class to handle nesting of rendering instructions
+ * within a render instruction. Also see nest() method of renderer base class
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+class Doku_Handler_Nest {
+
+ var $CallWriter;
+ var $calls = array();
+
+ var $closingInstruction;
+
+ /**
+ * constructor
+ *
+ * @param object $CallWriter the renderers current call writer
+ * @param string $close closing instruction name, this is required to properly terminate the
+ * syntax mode if the document ends without a closing pattern
+ */
+ function Doku_Handler_Nest(& $CallWriter, $close="nest_close") {
+ $this->CallWriter = & $CallWriter;
+
+ $this->closingInstruction = $close;
+ }
+
+ function writeCall($call) {
+ $this->calls[] = $call;
+ }
+
+ function writeCalls($calls) {
+ $this->calls = array_merge($this->calls, $calls);
+ }
+
+ function finalise() {
+ $last_call = end($this->calls);
+ $this->writeCall(array($this->closingInstruction,array(), $last_call[2]));
+
+ $this->process();
+ $this->CallWriter->finalise();
+ }
+
+ function process() {
+ // merge consecutive cdata
+ $unmerged_calls = $this->calls;
+ $this->calls = array();
+
+ foreach ($unmerged_calls as $call) $this->addCall($call);
+
+ $first_call = reset($this->calls);
+ $this->CallWriter->writeCall(array("nest", array($this->calls), $first_call[2]));
+ }
+
+ function addCall($call) {
+ $key = count($this->calls);
+ if ($key and ($call[0] == 'cdata') and ($this->calls[$key-1][0] == 'cdata')) {
+ $this->calls[$key-1][1][0] .= $call[1][0];
+ } else if ($call[0] == 'eol') {
+ // do nothing (eol shouldn't be allowed, to counter preformatted fix in #1652 & #1699)
+ } else {
+ $this->calls[] = $call;
+ }
+ }
+}
+
+class Doku_Handler_List {
+
+ var $CallWriter;
+
+ var $calls = array();
+ var $listCalls = array();
+ var $listStack = array();
+
+ function Doku_Handler_List(& $CallWriter) {
+ $this->CallWriter = & $CallWriter;
+ }
+
+ function writeCall($call) {
+ $this->calls[] = $call;
+ }
+
+ // Probably not needed but just in case...
+ function writeCalls($calls) {
+ $this->calls = array_merge($this->calls, $calls);
+# $this->CallWriter->writeCalls($this->calls);
+ }
+
+ function finalise() {
+ $last_call = end($this->calls);
+ $this->writeCall(array('list_close',array(), $last_call[2]));
+
+ $this->process();
+ $this->CallWriter->finalise();
+ }
+
+ //------------------------------------------------------------------------
+ function process() {
+
+ foreach ( $this->calls as $call ) {
+ switch ($call[0]) {
+ case 'list_item':
+ $this->listOpen($call);
+ break;
+ case 'list_open':
+ $this->listStart($call);
+ break;
+ case 'list_close':
+ $this->listEnd($call);
+ break;
+ default:
+ $this->listContent($call);
+ break;
+ }
+ }
+
+ $this->CallWriter->writeCalls($this->listCalls);
+ }
+
+ //------------------------------------------------------------------------
+ function listStart($call) {
+ $depth = $this->interpretSyntax($call[1][0], $listType);
+
+ $this->initialDepth = $depth;
+ $this->listStack[] = array($listType, $depth);
+
+ $this->listCalls[] = array('list'.$listType.'_open',array(),$call[2]);
+ $this->listCalls[] = array('listitem_open',array(1),$call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+ }
+
+ //------------------------------------------------------------------------
+ function listEnd($call) {
+ $closeContent = true;
+
+ while ( $list = array_pop($this->listStack) ) {
+ if ( $closeContent ) {
+ $this->listCalls[] = array('listcontent_close',array(),$call[2]);
+ $closeContent = false;
+ }
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+ $this->listCalls[] = array('list'.$list[0].'_close', array(), $call[2]);
+ }
+ }
+
+ //------------------------------------------------------------------------
+ function listOpen($call) {
+ $depth = $this->interpretSyntax($call[1][0], $listType);
+ $end = end($this->listStack);
+
+ // Not allowed to be shallower than initialDepth
+ if ( $depth < $this->initialDepth ) {
+ $depth = $this->initialDepth;
+ }
+
+ //------------------------------------------------------------------------
+ if ( $depth == $end[1] ) {
+
+ // Just another item in the list...
+ if ( $listType == $end[0] ) {
+ $this->listCalls[] = array('listcontent_close',array(),$call[2]);
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+ $this->listCalls[] = array('listitem_open',array($depth-1),$call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+
+ // Switched list type...
+ } else {
+
+ $this->listCalls[] = array('listcontent_close',array(),$call[2]);
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+ $this->listCalls[] = array('list'.$end[0].'_close', array(), $call[2]);
+ $this->listCalls[] = array('list'.$listType.'_open', array(), $call[2]);
+ $this->listCalls[] = array('listitem_open', array($depth-1), $call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+
+ array_pop($this->listStack);
+ $this->listStack[] = array($listType, $depth);
+ }
+
+ //------------------------------------------------------------------------
+ // Getting deeper...
+ } else if ( $depth > $end[1] ) {
+
+ $this->listCalls[] = array('listcontent_close',array(),$call[2]);
+ $this->listCalls[] = array('list'.$listType.'_open', array(), $call[2]);
+ $this->listCalls[] = array('listitem_open', array($depth-1), $call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+
+ $this->listStack[] = array($listType, $depth);
+
+ //------------------------------------------------------------------------
+ // Getting shallower ( $depth < $end[1] )
+ } else {
+ $this->listCalls[] = array('listcontent_close',array(),$call[2]);
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+ $this->listCalls[] = array('list'.$end[0].'_close',array(),$call[2]);
+
+ // Throw away the end - done
+ array_pop($this->listStack);
+
+ while (1) {
+ $end = end($this->listStack);
+
+ if ( $end[1] <= $depth ) {
+
+ // Normalize depths
+ $depth = $end[1];
+
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+
+ if ( $end[0] == $listType ) {
+ $this->listCalls[] = array('listitem_open',array($depth-1),$call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+
+ } else {
+ // Switching list type...
+ $this->listCalls[] = array('list'.$end[0].'_close', array(), $call[2]);
+ $this->listCalls[] = array('list'.$listType.'_open', array(), $call[2]);
+ $this->listCalls[] = array('listitem_open', array($depth-1), $call[2]);
+ $this->listCalls[] = array('listcontent_open',array(),$call[2]);
+
+ array_pop($this->listStack);
+ $this->listStack[] = array($listType, $depth);
+ }
+
+ break;
+
+ // Haven't dropped down far enough yet.... ( $end[1] > $depth )
+ } else {
+
+ $this->listCalls[] = array('listitem_close',array(),$call[2]);
+ $this->listCalls[] = array('list'.$end[0].'_close',array(),$call[2]);
+
+ array_pop($this->listStack);
+
+ }
+
+ }
+
+ }
+ }
+
+ //------------------------------------------------------------------------
+ function listContent($call) {
+ $this->listCalls[] = $call;
+ }
+
+ //------------------------------------------------------------------------
+ function interpretSyntax($match, & $type) {
+ if ( substr($match,-1) == '*' ) {
+ $type = 'u';
+ } else {
+ $type = 'o';
+ }
+ // Is the +1 needed? It used to be count(explode(...))
+ // but I don't think the number is seen outside this handler
+ return substr_count(str_replace("\t",' ',$match), ' ') + 1;
+ }
+}
+
+//------------------------------------------------------------------------
+class Doku_Handler_Preformatted {
+
+ var $CallWriter;
+
+ var $calls = array();
+ var $pos;
+ var $text ='';
+
+
+
+ function Doku_Handler_Preformatted(& $CallWriter) {
+ $this->CallWriter = & $CallWriter;
+ }
+
+ function writeCall($call) {
+ $this->calls[] = $call;
+ }
+
+ // Probably not needed but just in case...
+ function writeCalls($calls) {
+ $this->calls = array_merge($this->calls, $calls);
+# $this->CallWriter->writeCalls($this->calls);
+ }
+
+ function finalise() {
+ $last_call = end($this->calls);
+ $this->writeCall(array('preformatted_end',array(), $last_call[2]));
+
+ $this->process();
+ $this->CallWriter->finalise();
+ }
+
+ function process() {
+ foreach ( $this->calls as $call ) {
+ switch ($call[0]) {
+ case 'preformatted_start':
+ $this->pos = $call[2];
+ break;
+ case 'preformatted_newline':
+ $this->text .= "\n";
+ break;
+ case 'preformatted_content':
+ $this->text .= $call[1][0];
+ break;
+ case 'preformatted_end':
+ if (trim($this->text)) {
+ $this->CallWriter->writeCall(array('preformatted',array($this->text),$this->pos));
+ }
+ // see FS#1699 & FS#1652, add 'eol' instructions to ensure proper triggering of following p_open
+ $this->CallWriter->writeCall(array('eol',array(),$this->pos));
+ $this->CallWriter->writeCall(array('eol',array(),$this->pos));
+ break;
+ }
+ }
+ }
+
+}
+
+//------------------------------------------------------------------------
+class Doku_Handler_Quote {
+
+ var $CallWriter;
+
+ var $calls = array();
+
+ var $quoteCalls = array();
+
+ function Doku_Handler_Quote(& $CallWriter) {
+ $this->CallWriter = & $CallWriter;
+ }
+
+ function writeCall($call) {
+ $this->calls[] = $call;
+ }
+
+ // Probably not needed but just in case...
+ function writeCalls($calls) {
+ $this->calls = array_merge($this->calls, $calls);
+ }
+
+ function finalise() {
+ $last_call = end($this->calls);
+ $this->writeCall(array('quote_end',array(), $last_call[2]));
+
+ $this->process();
+ $this->CallWriter->finalise();
+ }
+
+ function process() {
+
+ $quoteDepth = 1;
+
+ foreach ( $this->calls as $call ) {
+ switch ($call[0]) {
+
+ case 'quote_start':
+
+ $this->quoteCalls[] = array('quote_open',array(),$call[2]);
+
+ case 'quote_newline':
+
+ $quoteLength = $this->getDepth($call[1][0]);
+
+ if ( $quoteLength > $quoteDepth ) {
+ $quoteDiff = $quoteLength - $quoteDepth;
+ for ( $i = 1; $i <= $quoteDiff; $i++ ) {
+ $this->quoteCalls[] = array('quote_open',array(),$call[2]);
+ }
+ } else if ( $quoteLength < $quoteDepth ) {
+ $quoteDiff = $quoteDepth - $quoteLength;
+ for ( $i = 1; $i <= $quoteDiff; $i++ ) {
+ $this->quoteCalls[] = array('quote_close',array(),$call[2]);
+ }
+ } else {
+ if ($call[0] != 'quote_start') $this->quoteCalls[] = array('linebreak',array(),$call[2]);
+ }
+
+ $quoteDepth = $quoteLength;
+
+ break;
+
+ case 'quote_end':
+
+ if ( $quoteDepth > 1 ) {
+ $quoteDiff = $quoteDepth - 1;
+ for ( $i = 1; $i <= $quoteDiff; $i++ ) {
+ $this->quoteCalls[] = array('quote_close',array(),$call[2]);
+ }
+ }
+
+ $this->quoteCalls[] = array('quote_close',array(),$call[2]);
+
+ $this->CallWriter->writeCalls($this->quoteCalls);
+ break;
+
+ default:
+ $this->quoteCalls[] = $call;
+ break;
+ }
+ }
+ }
+
+ function getDepth($marker) {
+ preg_match('/>{1,}/', $marker, $matches);
+ $quoteLength = strlen($matches[0]);
+ return $quoteLength;
+ }
+}
+
+//------------------------------------------------------------------------
+class Doku_Handler_Table {
+
+ var $CallWriter;
+
+ var $calls = array();
+ var $tableCalls = array();
+ var $maxCols = 0;
+ var $maxRows = 1;
+ var $currentCols = 0;
+ var $firstCell = false;
+ var $lastCellType = 'tablecell';
+
+ function Doku_Handler_Table(& $CallWriter) {
+ $this->CallWriter = & $CallWriter;
+ }
+
+ function writeCall($call) {
+ $this->calls[] = $call;
+ }
+
+ // Probably not needed but just in case...
+ function writeCalls($calls) {
+ $this->calls = array_merge($this->calls, $calls);
+ }
+
+ function finalise() {
+ $last_call = end($this->calls);
+ $this->writeCall(array('table_end',array(), $last_call[2]));
+
+ $this->process();
+ $this->CallWriter->finalise();
+ }
+
+ //------------------------------------------------------------------------
+ function process() {
+ foreach ( $this->calls as $call ) {
+ switch ( $call[0] ) {
+ case 'table_start':
+ $this->tableStart($call);
+ break;
+ case 'table_row':
+ $this->tableRowClose(array('tablerow_close',$call[1],$call[2]));
+ $this->tableRowOpen(array('tablerow_open',$call[1],$call[2]));
+ break;
+ case 'tableheader':
+ case 'tablecell':
+ $this->tableCell($call);
+ break;
+ case 'table_end':
+ $this->tableRowClose(array('tablerow_close',$call[1],$call[2]));
+ $this->tableEnd($call);
+ break;
+ default:
+ $this->tableDefault($call);
+ break;
+ }
+ }
+ $this->CallWriter->writeCalls($this->tableCalls);
+ }
+
+ function tableStart($call) {
+ $this->tableCalls[] = array('table_open',array(),$call[2]);
+ $this->tableCalls[] = array('tablerow_open',array(),$call[2]);
+ $this->firstCell = true;
+ }
+
+ function tableEnd($call) {
+ $this->tableCalls[] = array('table_close',array(),$call[2]);
+ $this->finalizeTable();
+ }
+
+ function tableRowOpen($call) {
+ $this->tableCalls[] = $call;
+ $this->currentCols = 0;
+ $this->firstCell = true;
+ $this->lastCellType = 'tablecell';
+ $this->maxRows++;
+ }
+
+ function tableRowClose($call) {
+ // Strip off final cell opening and anything after it
+ while ( $discard = array_pop($this->tableCalls ) ) {
+
+ if ( $discard[0] == 'tablecell_open' || $discard[0] == 'tableheader_open') {
+ break;
+ }
+ }
+ $this->tableCalls[] = $call;
+
+ if ( $this->currentCols > $this->maxCols ) {
+ $this->maxCols = $this->currentCols;
+ }
+ }
+
+ function tableCell($call) {
+ if ( !$this->firstCell ) {
+
+ // Increase the span
+ $lastCall = end($this->tableCalls);
+
+ // A cell call which follows an open cell means an empty cell so span
+ if ( $lastCall[0] == 'tablecell_open' || $lastCall[0] == 'tableheader_open' ) {
+ $this->tableCalls[] = array('colspan',array(),$call[2]);
+
+ }
+
+ $this->tableCalls[] = array($this->lastCellType.'_close',array(),$call[2]);
+ $this->tableCalls[] = array($call[0].'_open',array(1,NULL,1),$call[2]);
+ $this->lastCellType = $call[0];
+
+ } else {
+
+ $this->tableCalls[] = array($call[0].'_open',array(1,NULL,1),$call[2]);
+ $this->lastCellType = $call[0];
+ $this->firstCell = false;
+
+ }
+
+ $this->currentCols++;
+ }
+
+ function tableDefault($call) {
+ $this->tableCalls[] = $call;
+ }
+
+ function finalizeTable() {
+
+ // Add the max cols and rows to the table opening
+ if ( $this->tableCalls[0][0] == 'table_open' ) {
+ // Adjust to num cols not num col delimeters
+ $this->tableCalls[0][1][] = $this->maxCols - 1;
+ $this->tableCalls[0][1][] = $this->maxRows;
+ } else {
+ trigger_error('First element in table call list is not table_open');
+ }
+
+ $lastRow = 0;
+ $lastCell = 0;
+ $cellKey = array();
+ $toDelete = array();
+
+ // Look for the colspan elements and increment the colspan on the
+ // previous non-empty opening cell. Once done, delete all the cells
+ // that contain colspans
+ foreach ( $this->tableCalls as $key => $call ) {
+
+ if ( $call[0] == 'tablerow_open' ) {
+
+ $lastRow++;
+ $lastCell = 0;
+
+ } else if ( $call[0] == 'tablecell_open' || $call[0] == 'tableheader_open' ) {
+
+ $lastCell++;
+ $cellKey[$lastRow][$lastCell] = $key;
+
+ } else if ( $call[0] == 'table_align' ) {
+
+ $prev = in_array($this->tableCalls[$key-1][0], array('tablecell_open', 'tableheader_open'));
+ $next = in_array($this->tableCalls[$key+1][0], array('tablecell_close', 'tableheader_close'));
+ // If the cell is empty, align left
+ if ($prev && $next) {
+ $this->tableCalls[$key-1][1][1] = 'left';
+
+ // If the previous element was a cell open, align right
+ } elseif ($prev) {
+ $this->tableCalls[$key-1][1][1] = 'right';
+
+ // If the next element is the close of an element, align either center or left
+ } elseif ( $next) {
+ if ( $this->tableCalls[$cellKey[$lastRow][$lastCell]][1][1] == 'right' ) {
+ $this->tableCalls[$cellKey[$lastRow][$lastCell]][1][1] = 'center';
+ } else {
+ $this->tableCalls[$cellKey[$lastRow][$lastCell]][1][1] = 'left';
+ }
+
+ }
+
+ // Now convert the whitespace back to cdata
+ $this->tableCalls[$key][0] = 'cdata';
+
+ } else if ( $call[0] == 'colspan' ) {
+
+ $this->tableCalls[$key-1][1][0] = false;
+
+ for($i = $key-2; $i >= $cellKey[$lastRow][1]; $i--) {
+
+ if ( $this->tableCalls[$i][0] == 'tablecell_open' || $this->tableCalls[$i][0] == 'tableheader_open' ) {
+
+ if ( false !== $this->tableCalls[$i][1][0] ) {
+ $this->tableCalls[$i][1][0]++;
+ break;
+ }
+
+
+ }
+ }
+
+ $toDelete[] = $key-1;
+ $toDelete[] = $key;
+ $toDelete[] = $key+1;
+
+ } else if ( $call[0] == 'rowspan' ) {
+
+ if ( $this->tableCalls[$key-1][0] == 'cdata' ) {
+ // ignore rowspan if previous call was cdata (text mixed with :::) we don't have to check next call as that wont match regex
+ $this->tableCalls[$key][0] = 'cdata';
+
+ } else {
+
+ $this->tableCalls[$key-1][1][2] = false;
+
+ for($i = $lastRow-1; $i > 0; $i--) {
+
+ if ( $this->tableCalls[$cellKey[$i][$lastCell]][0] == 'tablecell_open' || $this->tableCalls[$cellKey[$i][$lastCell]][0] == 'tableheader_open' ) {
+
+ if ( false !== $this->tableCalls[$cellKey[$i][$lastCell]][1][2] ) {
+ $this->tableCalls[$cellKey[$i][$lastCell]][1][2]++;
+ break;
+ }
+
+
+ }
+ }
+
+ $toDelete[] = $key-1;
+ $toDelete[] = $key;
+ $toDelete[] = $key+1;
+ }
+ }
+ }
+
+
+ // condense cdata
+ $cnt = count($this->tableCalls);
+ for( $key = 0; $key < $cnt; $key++){
+ if($this->tableCalls[$key][0] == 'cdata'){
+ $ckey = $key;
+ $key++;
+ while($this->tableCalls[$key][0] == 'cdata'){
+ $this->tableCalls[$ckey][1][0] .= $this->tableCalls[$key][1][0];
+ $toDelete[] = $key;
+ $key++;
+ }
+ continue;
+ }
+ }
+
+ foreach ( $toDelete as $delete ) {
+ unset($this->tableCalls[$delete]);
+ }
+ $this->tableCalls = array_values($this->tableCalls);
+ }
+}
+
+
+/**
+ * Handler for paragraphs
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+class Doku_Handler_Block {
+
+ var $calls = array();
+
+ var $blockStack = array();
+
+ var $inParagraph = false;
+ var $atStart = true;
+ var $skipEolKey = -1;
+
+ // Blocks these should not be inside paragraphs
+ var $blockOpen = array(
+ 'header',
+ 'listu_open','listo_open','listitem_open','listcontent_open',
+ 'table_open','tablerow_open','tablecell_open','tableheader_open',
+ 'quote_open',
+ 'section_open', // Needed to prevent p_open between header and section_open
+ 'code','file','hr','preformatted','rss',
+ 'htmlblock','phpblock',
+ );
+
+ var $blockClose = array(
+ 'header',
+ 'listu_close','listo_close','listitem_close','listcontent_close',
+ 'table_close','tablerow_close','tablecell_close','tableheader_close',
+ 'quote_close',
+ 'section_close', // Needed to prevent p_close after section_close
+ 'code','file','hr','preformatted','rss',
+ 'htmlblock','phpblock',
+ );
+
+ // Stacks can contain paragraphs
+ var $stackOpen = array(
+ 'footnote_open','section_open',
+ );
+
+ var $stackClose = array(
+ 'footnote_close','section_close',
+ );
+
+
+ /**
+ * Constructor. Adds loaded syntax plugins to the block and stack
+ * arrays
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function Doku_Handler_Block(){
+ global $DOKU_PLUGINS;
+ //check if syntax plugins were loaded
+ if(empty($DOKU_PLUGINS['syntax'])) return;
+ foreach($DOKU_PLUGINS['syntax'] as $n => $p){
+ $ptype = $p->getPType();
+ if($ptype == 'block'){
+ $this->blockOpen[] = 'plugin_'.$n;
+ $this->blockClose[] = 'plugin_'.$n;
+ }elseif($ptype == 'stack'){
+ $this->stackOpen[] = 'plugin_'.$n;
+ $this->stackClose[] = 'plugin_'.$n;
+ }
+ }
+ }
+
+ /**
+ * Close a paragraph if needed
+ *
+ * This function makes sure there are no empty paragraphs on the stack
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function closeParagraph($pos){
+ // look back if there was any content - we don't want empty paragraphs
+ $content = '';
+ for($i=count($this->calls)-1; $i>=0; $i--){
+ if($this->calls[$i][0] == 'p_open'){
+ break;
+ }elseif($this->calls[$i][0] == 'cdata'){
+ $content .= $this->calls[$i][1][0];
+ }else{
+ $content = 'found markup';
+ break;
+ }
+ }
+
+ if(trim($content)==''){
+ //remove the whole paragraph
+ array_splice($this->calls,$i);
+ }else{
+ if ($this->calls[count($this->calls)-1][0] == 'section_edit') {
+ $tmp = array_pop($this->calls);
+ $this->calls[] = array('p_close',array(), $pos);
+ $this->calls[] = $tmp;
+ } else {
+ $this->calls[] = array('p_close',array(), $pos);
+ }
+ }
+
+ $this->inParagraph = false;
+ }
+
+ /**
+ * Processes the whole instruction stack to open and close paragraphs
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @todo This thing is really messy and should be rewritten
+ */
+ function process($calls) {
+ foreach ( $calls as $key => $call ) {
+ $cname = $call[0];
+ if($cname == 'plugin') {
+ $cname='plugin_'.$call[1][0];
+
+ $plugin = true;
+ $plugin_open = (($call[1][2] == DOKU_LEXER_ENTER) || ($call[1][2] == DOKU_LEXER_SPECIAL));
+ $plugin_close = (($call[1][2] == DOKU_LEXER_EXIT) || ($call[1][2] == DOKU_LEXER_SPECIAL));
+ } else {
+ $plugin = false;
+ }
+
+ // Process blocks which are stack like... (contain linefeeds)
+ if ( in_array($cname,$this->stackOpen ) && (!$plugin || $plugin_open) ) {
+
+ $this->calls[] = $call;
+
+ // Hack - footnotes shouldn't immediately contain a p_open
+ if ( $cname != 'footnote_open' ) {
+ $this->addToStack();
+ } else {
+ $this->addToStack(false);
+ }
+ continue;
+ }
+
+ if ( in_array($cname,$this->stackClose ) && (!$plugin || $plugin_close)) {
+
+ if ( $this->inParagraph ) {
+ $this->closeParagraph($call[2]);
+ }
+ $this->calls[] = $call;
+ $this->removeFromStack();
+ continue;
+ }
+
+ if ( !$this->atStart ) {
+
+ if ( $cname == 'eol' ) {
+
+ // Check this isn't an eol instruction to skip...
+ if ( $this->skipEolKey != $key ) {
+ // Look to see if the next instruction is an EOL
+ if ( isset($calls[$key+1]) && $calls[$key+1][0] == 'eol' ) {
+
+ if ( $this->inParagraph ) {
+ //$this->calls[] = array('p_close',array(), $call[2]);
+ $this->closeParagraph($call[2]);
+ }
+
+ $this->calls[] = array('p_open',array(), $call[2]);
+ $this->inParagraph = true;
+
+
+ // Mark the next instruction for skipping
+ $this->skipEolKey = $key+1;
+
+ }else{
+ //if this is just a single eol make a space from it
+ $this->addCall(array('cdata',array(DOKU_PARSER_EOL), $call[2]));
+ }
+ }
+
+
+ } else {
+
+ $storeCall = true;
+ if ( $this->inParagraph && (in_array($cname, $this->blockOpen) && (!$plugin || $plugin_open))) {
+ $this->closeParagraph($call[2]);
+ $this->calls[] = $call;
+ $storeCall = false;
+ }
+
+ if ( in_array($cname, $this->blockClose) && (!$plugin || $plugin_close)) {
+ if ( $this->inParagraph ) {
+ $this->closeParagraph($call[2]);
+ }
+ if ( $storeCall ) {
+ $this->calls[] = $call;
+ $storeCall = false;
+ }
+
+ // This really sucks and suggests this whole class sucks but...
+ if ( isset($calls[$key+1])) {
+ $cname_plusone = $calls[$key+1][0];
+ if ($cname_plusone == 'plugin') {
+ $cname_plusone = 'plugin'.$calls[$key+1][1][0];
+
+ // plugin test, true if plugin has a state which precludes it requiring blockOpen or blockClose
+ $plugin_plusone = true;
+ $plugin_test = ($call[$key+1][1][2] == DOKU_LEXER_MATCHED) || ($call[$key+1][1][2] == DOKU_LEXER_MATCHED);
+ } else {
+ $plugin_plusone = false;
+ }
+ if ((!in_array($cname_plusone, $this->blockOpen) && !in_array($cname_plusone, $this->blockClose)) ||
+ ($plugin_plusone && $plugin_test)
+ ) {
+
+ $this->calls[] = array('p_open',array(), $call[2]);
+ $this->inParagraph = true;
+ }
+ }
+ }
+
+ if ( $storeCall ) {
+ $this->addCall($call);
+ }
+
+ }
+
+
+ } else {
+
+ // Unless there's already a block at the start, start a paragraph
+ if ( !in_array($cname,$this->blockOpen) ) {
+ $this->calls[] = array('p_open',array(), $call[2]);
+ if ( $call[0] != 'eol' ) {
+ $this->calls[] = $call;
+ }
+ $this->atStart = false;
+ $this->inParagraph = true;
+ } else {
+ $this->addCall($call);
+ $this->atStart = false;
+ }
+
+ }
+
+ }
+
+ if ( $this->inParagraph ) {
+ if ( $cname == 'p_open' ) {
+ // Ditch the last call
+ array_pop($this->calls);
+ } else if ( !in_array($cname, $this->blockClose) ) {
+ //$this->calls[] = array('p_close',array(), $call[2]);
+ $this->closeParagraph($call[2]);
+ } else {
+ $last_call = array_pop($this->calls);
+ //$this->calls[] = array('p_close',array(), $call[2]);
+ $this->closeParagraph($call[2]);
+ $this->calls[] = $last_call;
+ }
+ }
+
+ return $this->calls;
+ }
+
+ function addToStack($newStart = true) {
+ $this->blockStack[] = array($this->atStart, $this->inParagraph);
+ $this->atStart = $newStart;
+ $this->inParagraph = false;
+ }
+
+ function removeFromStack() {
+ $state = array_pop($this->blockStack);
+ $this->atStart = $state[0];
+ $this->inParagraph = $state[1];
+ }
+
+ function addCall($call) {
+ $key = count($this->calls);
+ if ($key and ($call[0] == 'cdata') and ($this->calls[$key-1][0] == 'cdata')) {
+ $this->calls[$key-1][1][0] .= $call[1][0];
+ } else {
+ $this->calls[] = $call;
+ }
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php
new file mode 100644
index 000000000..afd260a05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php
@@ -0,0 +1,600 @@
+<?php
+/**
+* Author Markus Baker: http://www.lastcraft.com
+* Version adapted from Simple Test: http://sourceforge.net/projects/simpletest/
+* For an intro to the Lexer see:
+* http://www.phppatterns.com/index.php/article/articleview/106/1/2/
+* @author Marcus Baker
+* @package Doku
+* @subpackage Lexer
+* @version $Id: lexer.php,v 1.1 2005/03/23 23:14:09 harryf Exp $
+*/
+
+/**
+* Init path constant
+*/
+if(!defined('DOKU_INC')) die('meh.');
+
+/**#@+
+ * lexer mode constant
+ */
+define("DOKU_LEXER_ENTER", 1);
+define("DOKU_LEXER_MATCHED", 2);
+define("DOKU_LEXER_UNMATCHED", 3);
+define("DOKU_LEXER_EXIT", 4);
+define("DOKU_LEXER_SPECIAL", 5);
+/**#@-*/
+
+/**
+ * Compounded regular expression. Any of
+ * the contained patterns could match and
+ * when one does it's label is returned.
+ * @package Doku
+ * @subpackage Lexer
+ */
+class Doku_LexerParallelRegex {
+ 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 Doku_LexerParallelRegex($case) {
+ $this->_case = $case;
+ $this->_patterns = array();
+ $this->_labels = array();
+ $this->_regex = null;
+ }
+
+ /**
+ * Adds a pattern with an optional label.
+ * @param mixed $pattern Perl style regex. Must be UTF-8
+ * encoded. If its a string, the (, )
+ * lose their meaning unless they
+ * form part of a lookahead or
+ * lookbehind assertation.
+ * @param string $label Label of regex to be returned
+ * on a match. Label must be ASCII
+ * @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];
+ $size = count($matches);
+ for ($i = 1; $i < $size; $i++) {
+ if ($matches[$i] && isset($this->_labels[$i - 1])) {
+ return $this->_labels[$i - 1];
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Attempts to split the string against all patterns at once
+ *
+ * @param string $subject String to match against.
+ * @param array $split The split result: array containing, pre-match, match & post-match strings
+ * @return boolean True on success.
+ * @access public
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+ function split($subject, &$split) {
+ if (count($this->_patterns) == 0) {
+ return false;
+ }
+
+ if (! preg_match($this->_getCompoundedRegex(), $subject, $matches)) {
+ if(function_exists('preg_last_error')){
+ $err = preg_last_error();
+ switch($err){
+ case PREG_BACKTRACK_LIMIT_ERROR:
+ msg('A PCRE backtrack error occured. Try to increase the pcre.backtrack_limit in php.ini',-1);
+ break;
+ case PREG_RECURSION_LIMIT_ERROR:
+ msg('A PCRE recursion error occured. Try to increase the pcre.recursion_limit in php.ini',-1);
+ break;
+ case PREG_BAD_UTF8_ERROR:
+ msg('A PCRE UTF-8 error occured. This might be caused by a faulty plugin',-1);
+ break;
+ case PREG_INTERNAL_ERROR:
+ msg('A PCRE internal error occured. This might be caused by a faulty plugin',-1);
+ break;
+ }
+ }
+
+ $split = array($subject, "", "");
+ return false;
+ }
+
+ $idx = count($matches)-2;
+ list($pre, $post) = preg_split($this->_patterns[$idx].$this->_getPerlMatchingFlags(), $subject, 2);
+ $split = array($pre, $matches[0], $post);
+
+ return isset($this->_labels[$idx]) ? $this->_labels[$idx] : 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) {
+ $cnt = count($this->_patterns);
+ for ($i = 0; $i < $cnt; $i++) {
+
+ /*
+ * decompose the input pattern into "(", "(?", ")",
+ * "[...]", "[]..]", "[^]..]", "[...[:...:]..]", "\x"...
+ * elements.
+ */
+ preg_match_all('/\\\\.|' .
+ '\(\?|' .
+ '[()]|' .
+ '\[\^?\]?(?:\\\\.|\[:[^]]*:\]|[^]\\\\])*\]|' .
+ '[^[()\\\\]+/', $this->_patterns[$i], $elts);
+
+ $pattern = "";
+ $level = 0;
+
+ foreach ($elts[0] as $elt) {
+ /*
+ * for "(", ")" remember the nesting level, add "\"
+ * only to the non-"(?" ones.
+ */
+
+ switch($elt) {
+ case '(':
+ $pattern .= '\(';
+ break;
+ case ')':
+ if ($level > 0)
+ $level--; /* closing (? */
+ else
+ $pattern .= '\\';
+ $pattern .= ')';
+ break;
+ case '(?':
+ $level++;
+ $pattern .= '(?';
+ break;
+ default:
+ if (substr($elt, 0, 1) == '\\')
+ $pattern .= $elt;
+ else
+ $pattern .= str_replace('/', '\/', $elt);
+ }
+ }
+ $this->_patterns[$i] = "($pattern)";
+ }
+ $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 Lexer
+ * @subpackage Lexer
+ */
+class Doku_LexerStateStack {
+ var $_stack;
+
+ /**
+ * Constructor. Starts in named state.
+ * @param string $start Starting state name.
+ * @access public
+ */
+ function Doku_LexerStateStack($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 Doku
+ * @subpackage Lexer
+ */
+class Doku_Lexer {
+ var $_regexes;
+ var $_parser;
+ var $_mode;
+ var $_mode_handlers;
+ var $_case;
+
+ /**
+ * Sets up the lexer in case insensitive matching
+ * by default.
+ * @param Doku_Parser $parser Handling strategy by
+ * reference.
+ * @param string $start Starting handler.
+ * @param boolean $case True for case sensitive.
+ * @access public
+ */
+ function Doku_Lexer(&$parser, $start = "accept", $case = false) {
+ $this->_case = $case;
+ $this->_regexes = array();
+ $this->_parser = &$parser;
+ $this->_mode = &new Doku_LexerStateStack($start);
+ $this->_mode_handlers = array();
+ }
+
+ /**
+ * 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 Doku_LexerParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern);
+ }
+
+ /**
+ * 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 Doku_LexerParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern, $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 Doku_LexerParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern, "__exit");
+ }
+
+ /**
+ * 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 Doku_LexerParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern, "_$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;
+ }
+ $initialLength = strlen($raw);
+ $length = $initialLength;
+ $pos = 0;
+ while (is_array($parsed = $this->_reduce($raw))) {
+ list($unmatched, $matched, $mode) = $parsed;
+ $currentLength = strlen($raw);
+ $matchPos = $initialLength - $currentLength - strlen($matched);
+ if (! $this->_dispatchTokens($unmatched, $matched, $mode, $pos, $matchPos)) {
+ return false;
+ }
+ if ($currentLength == $length) {
+ return false;
+ }
+ $length = $currentLength;
+ $pos = $initialLength - $currentLength;
+ }
+ if (!$parsed) {
+ return false;
+ }
+ return $this->_invokeParser($raw, DOKU_LEXER_UNMATCHED, $pos);
+ }
+
+ /**
+ * 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.
+ * @param int $pos Current byte index location in raw doc
+ * thats being parsed
+ * @return boolean False if there was any error
+ * from the parser.
+ * @access private
+ */
+ function _dispatchTokens($unmatched, $matched, $mode = false, $initialPos, $matchPos) {
+ if (! $this->_invokeParser($unmatched, DOKU_LEXER_UNMATCHED, $initialPos) ){
+ return false;
+ }
+ if ($this->_isModeEnd($mode)) {
+ if (! $this->_invokeParser($matched, DOKU_LEXER_EXIT, $matchPos)) {
+ return false;
+ }
+ return $this->_mode->leave();
+ }
+ if ($this->_isSpecialMode($mode)) {
+ $this->_mode->enter($this->_decodeSpecial($mode));
+ if (! $this->_invokeParser($matched, DOKU_LEXER_SPECIAL, $matchPos)) {
+ return false;
+ }
+ return $this->_mode->leave();
+ }
+ if (is_string($mode)) {
+ $this->_mode->enter($mode);
+ return $this->_invokeParser($matched, DOKU_LEXER_ENTER, $matchPos);
+ }
+ return $this->_invokeParser($matched, DOKU_LEXER_MATCHED, $matchPos);
+ }
+
+ /**
+ * 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.
+ * @param int $pos Current byte index location in raw doc
+ * thats being parsed
+ * @access private
+ */
+ function _invokeParser($content, $is_match, $pos) {
+ if (($content === "") || ($content === false)) {
+ return true;
+ }
+ $handler = $this->_mode->getCurrent();
+ if (isset($this->_mode_handlers[$handler])) {
+ $handler = $this->_mode_handlers[$handler];
+ }
+
+ // modes starting with plugin_ are all handled by the same
+ // handler but with an additional parameter
+ if(substr($handler,0,7)=='plugin_'){
+ list($handler,$plugin) = explode('_',$handler,2);
+ return $this->_parser->$handler($content, $is_match, $pos, $plugin);
+ }
+
+ return $this->_parser->$handler($content, $is_match, $pos);
+ }
+
+ /**
+ * 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 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 (! isset($this->_regexes[$this->_mode->getCurrent()])) {
+ return false;
+ }
+ if ($raw === "") {
+ return true;
+ }
+ if ($action = $this->_regexes[$this->_mode->getCurrent()]->split($raw, $split)) {
+ list($unparsed, $match, $raw) = $split;
+ return array($unparsed, $match, $action);
+ }
+ return true;
+ }
+}
+
+/**
+* Escapes regex characters other than (, ) and /
+* @TODO
+*/
+function Doku_Lexer_Escape($str) {
+ //$str = addslashes($str);
+ $chars = array(
+ '/\\\\/',
+ '/\./',
+ '/\+/',
+ '/\*/',
+ '/\?/',
+ '/\[/',
+ '/\^/',
+ '/\]/',
+ '/\$/',
+ '/\{/',
+ '/\}/',
+ '/\=/',
+ '/\!/',
+ '/\</',
+ '/\>/',
+ '/\|/',
+ '/\:/'
+ );
+
+ $escaped = array(
+ '\\\\\\\\',
+ '\.',
+ '\+',
+ '\*',
+ '\?',
+ '\[',
+ '\^',
+ '\]',
+ '\$',
+ '\{',
+ '\}',
+ '\=',
+ '\!',
+ '\<',
+ '\>',
+ '\|',
+ '\:'
+ );
+ return preg_replace($chars, $escaped, $str);
+}
+
+//Setup VIM: ex: et ts=4 sw=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php
new file mode 100644
index 000000000..fc60e5774
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php
@@ -0,0 +1,483 @@
+<?php
+/**
+ * Renderer for metadata
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+if(!defined('DOKU_INC')) die('meh.');
+
+if ( !defined('DOKU_LF') ) {
+ // Some whitespace to help View > Source
+ define ('DOKU_LF',"\n");
+}
+
+if ( !defined('DOKU_TAB') ) {
+ // Some whitespace to help View > Source
+ define ('DOKU_TAB',"\t");
+}
+
+require_once DOKU_INC . 'inc/parser/renderer.php';
+
+/**
+ * The Renderer
+ */
+class Doku_Renderer_metadata extends Doku_Renderer {
+
+ var $doc = '';
+ var $meta = array();
+ var $persistent = array();
+
+ var $headers = array();
+ var $capture = true;
+ var $store = '';
+ var $firstimage = '';
+
+ function getFormat(){
+ return 'metadata';
+ }
+
+ function document_start(){
+ global $ID;
+
+ $this->headers = array();
+
+ // external pages are missing create date
+ if(!$this->persistent['date']['created']){
+ $this->persistent['date']['created'] = filectime(wikiFN($ID));
+ }
+ if(!isset($this->persistent['creator'])){
+ $this->persistent['creator'] = '';
+ }
+ // reset metadata to persistent values
+ $this->meta = $this->persistent;
+ }
+
+ function document_end(){
+ global $ID;
+
+ // store internal info in metadata (notoc,nocache)
+ $this->meta['internal'] = $this->info;
+
+ if (!isset($this->meta['description']['abstract'])){
+ // cut off too long abstracts
+ $this->doc = trim($this->doc);
+ if (strlen($this->doc) > 500)
+ $this->doc = utf8_substr($this->doc, 0, 500).'…';
+ $this->meta['description']['abstract'] = $this->doc;
+ }
+
+ $this->meta['relation']['firstimage'] = $this->firstimage;
+
+ if(!isset($this->meta['date']['modified'])){
+ $this->meta['date']['modified'] = filemtime(wikiFN($ID));
+ }
+
+ }
+
+ function toc_additem($id, $text, $level) {
+ global $conf;
+
+ //only add items within configured levels
+ if($level >= $conf['toptoclevel'] && $level <= $conf['maxtoclevel']){
+ // the TOC is one of our standard ul list arrays ;-)
+ $this->meta['description']['tableofcontents'][] = array(
+ 'hid' => $id,
+ 'title' => $text,
+ 'type' => 'ul',
+ 'level' => $level-$conf['toptoclevel']+1
+ );
+ }
+
+ }
+
+ function header($text, $level, $pos) {
+ if (!isset($this->meta['title'])) $this->meta['title'] = $text;
+
+ // add the header to the TOC
+ $hid = $this->_headerToLink($text,'true');
+ $this->toc_additem($hid, $text, $level);
+
+ // add to summary
+ if ($this->capture && ($level > 1)) $this->doc .= DOKU_LF.$text.DOKU_LF;
+ }
+
+ function section_open($level){}
+ function section_close(){}
+
+ function cdata($text){
+ if ($this->capture) $this->doc .= $text;
+ }
+
+ function p_open(){
+ if ($this->capture) $this->doc .= DOKU_LF;
+ }
+
+ function p_close(){
+ if ($this->capture){
+ if (strlen($this->doc) > 250) $this->capture = false;
+ else $this->doc .= DOKU_LF;
+ }
+ }
+
+ function linebreak(){
+ if ($this->capture) $this->doc .= DOKU_LF;
+ }
+
+ function hr(){
+ if ($this->capture){
+ if (strlen($this->doc) > 250) $this->capture = false;
+ else $this->doc .= DOKU_LF.'----------'.DOKU_LF;
+ }
+ }
+
+ function strong_open(){}
+ function strong_close(){}
+
+ function emphasis_open(){}
+ function emphasis_close(){}
+
+ function underline_open(){}
+ function underline_close(){}
+
+ function monospace_open(){}
+ function monospace_close(){}
+
+ function subscript_open(){}
+ function subscript_close(){}
+
+ function superscript_open(){}
+ function superscript_close(){}
+
+ function deleted_open(){}
+ function deleted_close(){}
+
+ /**
+ * Callback for footnote start syntax
+ *
+ * All following content will go to the footnote instead of
+ * the document. To achieve this the previous rendered content
+ * is moved to $store and $doc is cleared
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function footnote_open() {
+ if ($this->capture){
+ // move current content to store and record footnote
+ $this->store = $this->doc;
+ $this->doc = '';
+ }
+ }
+
+ /**
+ * Callback for footnote end syntax
+ *
+ * All rendered content is moved to the $footnotes array and the old
+ * content is restored from $store again
+ *
+ * @author Andreas Gohr
+ */
+ function footnote_close() {
+ if ($this->capture){
+ // restore old content
+ $this->doc = $this->store;
+ $this->store = '';
+ }
+ }
+
+ function listu_open(){
+ if ($this->capture) $this->doc .= DOKU_LF;
+ }
+
+ function listu_close(){
+ if ($this->capture && (strlen($this->doc) > 250)) $this->capture = false;
+ }
+
+ function listo_open(){
+ if ($this->capture) $this->doc .= DOKU_LF;
+ }
+
+ function listo_close(){
+ if ($this->capture && (strlen($this->doc) > 250)) $this->capture = false;
+ }
+
+ function listitem_open($level){
+ if ($this->capture) $this->doc .= str_repeat(DOKU_TAB, $level).'* ';
+ }
+
+ function listitem_close(){
+ if ($this->capture) $this->doc .= DOKU_LF;
+ }
+
+ function listcontent_open(){}
+ function listcontent_close(){}
+
+ function unformatted($text){
+ if ($this->capture) $this->doc .= $text;
+ }
+
+ function php($text){}
+
+ function phpblock($text){}
+
+ function html($text){}
+
+ function htmlblock($text){}
+
+ function preformatted($text){
+ if ($this->capture) $this->doc .= $text;
+ }
+
+ function file($text, $lang = null, $file = null){
+ if ($this->capture){
+ $this->doc .= DOKU_LF.$text;
+ if (strlen($this->doc) > 250) $this->capture = false;
+ else $this->doc .= DOKU_LF;
+ }
+ }
+
+ function quote_open(){
+ if ($this->capture) $this->doc .= DOKU_LF.DOKU_TAB.'"';
+ }
+
+ function quote_close(){
+ if ($this->capture){
+ $this->doc .= '"';
+ if (strlen($this->doc) > 250) $this->capture = false;
+ else $this->doc .= DOKU_LF;
+ }
+ }
+
+ function code($text, $language = NULL, $file = null){
+ if ($this->capture){
+ $this->doc .= DOKU_LF.$text;
+ if (strlen($this->doc) > 250) $this->capture = false;
+ else $this->doc .= DOKU_LF;
+ }
+ }
+
+ function acronym($acronym){
+ if ($this->capture) $this->doc .= $acronym;
+ }
+
+ function smiley($smiley){
+ if ($this->capture) $this->doc .= $smiley;
+ }
+
+ function entity($entity){
+ if ($this->capture) $this->doc .= $entity;
+ }
+
+ function multiplyentity($x, $y){
+ if ($this->capture) $this->doc .= $x.'×'.$y;
+ }
+
+ function singlequoteopening(){
+ global $lang;
+ if ($this->capture) $this->doc .= $lang['singlequoteopening'];
+ }
+
+ function singlequoteclosing(){
+ global $lang;
+ if ($this->capture) $this->doc .= $lang['singlequoteclosing'];
+ }
+
+ function apostrophe() {
+ global $lang;
+ if ($this->capture) $this->doc .= $lang['apostrophe'];
+ }
+
+ function doublequoteopening(){
+ global $lang;
+ if ($this->capture) $this->doc .= $lang['doublequoteopening'];
+ }
+
+ function doublequoteclosing(){
+ global $lang;
+ if ($this->capture) $this->doc .= $lang['doublequoteclosing'];
+ }
+
+ function camelcaselink($link) {
+ $this->internallink($link, $link);
+ }
+
+ function locallink($hash, $name = NULL){}
+
+ /**
+ * keep track of internal links in $this->meta['relation']['references']
+ */
+ function internallink($id, $name = NULL){
+ global $ID;
+
+ if(is_array($name))
+ $this->_firstimage($name['src']);
+
+ $default = $this->_simpleTitle($id);
+
+ // first resolve and clean up the $id
+ resolve_pageid(getNS($ID), $id, $exists);
+ list($page, $hash) = explode('#', $id, 2);
+
+ // set metadata
+ $this->meta['relation']['references'][$page] = $exists;
+ // $data = array('relation' => array('isreferencedby' => array($ID => true)));
+ // p_set_metadata($id, $data);
+
+ // add link title to summary
+ if ($this->capture){
+ $name = $this->_getLinkTitle($name, $default, $id);
+ $this->doc .= $name;
+ }
+ }
+
+ function externallink($url, $name = NULL){
+ if(is_array($name))
+ $this->_firstimage($name['src']);
+
+ if ($this->capture){
+ if ($name) $this->doc .= $name;
+ else $this->doc .= '<'.$url.'>';
+ }
+ }
+
+ function interwikilink($match, $name = NULL, $wikiName, $wikiUri){
+ if(is_array($name))
+ $this->_firstimage($name['src']);
+
+ if ($this->capture){
+ list($wikiUri, $hash) = explode('#', $wikiUri, 2);
+ $name = $this->_getLinkTitle($name, $wikiName.'>'.$wikiUri);
+ $this->doc .= $name;
+ }
+ }
+
+ function windowssharelink($url, $name = NULL){
+ if(is_array($name))
+ $this->_firstimage($name['src']);
+
+ if ($this->capture){
+ if ($name) $this->doc .= $name;
+ else $this->doc .= '<'.$url.'>';
+ }
+ }
+
+ function emaillink($address, $name = NULL){
+ if(is_array($name))
+ $this->_firstimage($name['src']);
+
+ if ($this->capture){
+ if ($name) $this->doc .= $name;
+ else $this->doc .= '<'.$address.'>';
+ }
+ }
+
+ function internalmedia($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL){
+ if ($this->capture && $title) $this->doc .= '['.$title.']';
+ $this->_firstimage($src);
+ }
+
+ function externalmedia($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL){
+ if ($this->capture && $title) $this->doc .= '['.$title.']';
+ $this->_firstimage($src);
+ }
+
+ function rss($url,$params) {
+ $this->meta['relation']['haspart'][$url] = true;
+
+ $this->meta['date']['valid']['age'] =
+ isset($this->meta['date']['valid']['age']) ?
+ min($this->meta['date']['valid']['age'],$params['refresh']) :
+ $params['refresh'];
+ }
+
+ function table_open($maxcols = NULL, $numrows = NULL){}
+ function table_close(){}
+
+ function tablerow_open(){}
+ function tablerow_close(){}
+
+ function tableheader_open($colspan = 1, $align = NULL, $rowspan = 1){}
+ function tableheader_close(){}
+
+ function tablecell_open($colspan = 1, $align = NULL, $rowspan = 1){}
+ function tablecell_close(){}
+
+ //----------------------------------------------------------
+ // Utils
+
+ /**
+ * Removes any Namespace from the given name but keeps
+ * casing and special chars
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _simpleTitle($name){
+ global $conf;
+
+ if(is_array($name)) return '';
+
+ if($conf['useslash']){
+ $nssep = '[:;/]';
+ }else{
+ $nssep = '[:;]';
+ }
+ $name = preg_replace('!.*'.$nssep.'!','',$name);
+ //if there is a hash we use the anchor name only
+ $name = preg_replace('!.*#!','',$name);
+ return $name;
+ }
+
+ /**
+ * Creates a linkid from a headline
+ *
+ * @param string $title The headline title
+ * @param boolean $create Create a new unique ID?
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _headerToLink($title, $create=false) {
+ if($create){
+ return sectionID($title,$this->headers);
+ }else{
+ $check = false;
+ return sectionID($title,$check);
+ }
+ }
+
+ /**
+ * Construct a title and handle images in titles
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+ function _getLinkTitle($title, $default, $id=NULL) {
+ global $conf;
+
+ $isImage = false;
+ if (is_null($title)){
+ if (useHeading('content') && $id){
+ $heading = p_get_first_heading($id,false);
+ if ($heading) return $heading;
+ }
+ return $default;
+ } else if (is_string($title)){
+ return $title;
+ } else if (is_array($title)){
+ return '['.$title['title'].']';
+ }
+ }
+
+ function _firstimage($src){
+ if($this->firstimage) return;
+ global $ID;
+
+ list($src,$hash) = explode('#',$src,2);
+ if(!preg_match('/^https?:\/\//i',$src)){
+ resolve_mediaid(getNS($ID),$src, $exists);
+ }
+ if(preg_match('/.(jpe?g|gif|png)$/i',$src)){
+ $this->firstimage = $src;
+ }
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php
new file mode 100644
index 000000000..a78b08a29
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php
@@ -0,0 +1,956 @@
+<?php
+if(!defined('DOKU_INC')) die('meh.');
+require_once DOKU_INC . 'inc/parser/lexer.php';
+require_once DOKU_INC . 'inc/parser/handler.php';
+
+
+/**
+ * Define various types of modes used by the parser - they are used to
+ * populate the list of modes another mode accepts
+ */
+global $PARSER_MODES;
+$PARSER_MODES = array(
+ // containers are complex modes that can contain many other modes
+ // hr breaks the principle but they shouldn't be used in tables / lists
+ // so they are put here
+ 'container' => array('listblock','table','quote','hr'),
+
+ // some mode are allowed inside the base mode only
+ 'baseonly' => array('header'),
+
+ // modes for styling text -- footnote behaves similar to styling
+ 'formatting' => array('strong', 'emphasis', 'underline', 'monospace',
+ 'subscript', 'superscript', 'deleted', 'footnote'),
+
+ // modes where the token is simply replaced - they can not contain any
+ // other modes
+ 'substition' => array('acronym','smiley','wordblock','entity',
+ 'camelcaselink', 'internallink','media',
+ 'externallink','linebreak','emaillink',
+ 'windowssharelink','filelink','notoc',
+ 'nocache','multiplyentity','quotes','rss'),
+
+ // modes which have a start and end token but inside which
+ // no other modes should be applied
+ 'protected' => array('preformatted','code','file','php','html','htmlblock','phpblock'),
+
+ // inside this mode no wiki markup should be applied but lineendings
+ // and whitespace isn't preserved
+ 'disabled' => array('unformatted'),
+
+ // used to mark paragraph boundaries
+ 'paragraphs' => array('eol')
+);
+
+//-------------------------------------------------------------------
+
+/**
+* Sets up the Lexer with modes and points it to the Handler
+* For an intro to the Lexer see: wiki:parser
+*/
+class Doku_Parser {
+
+ var $Handler;
+
+ var $Lexer;
+
+ var $modes = array();
+
+ var $connected = false;
+
+ function addBaseMode(& $BaseMode) {
+ $this->modes['base'] = & $BaseMode;
+ if ( !$this->Lexer ) {
+ $this->Lexer = & new Doku_Lexer($this->Handler,'base', true);
+ }
+ $this->modes['base']->Lexer = & $this->Lexer;
+ }
+
+ /**
+ * PHP preserves order of associative elements
+ * Mode sequence is important
+ */
+ function addMode($name, & $Mode) {
+ if ( !isset($this->modes['base']) ) {
+ $this->addBaseMode(new Doku_Parser_Mode_base());
+ }
+ $Mode->Lexer = & $this->Lexer;
+ $this->modes[$name] = & $Mode;
+ }
+
+ function connectModes() {
+
+ if ( $this->connected ) {
+ return;
+ }
+
+ foreach ( array_keys($this->modes) as $mode ) {
+
+ // Base isn't connected to anything
+ if ( $mode == 'base' ) {
+ continue;
+ }
+
+ $this->modes[$mode]->preConnect();
+
+ foreach ( array_keys($this->modes) as $cm ) {
+
+ if ( $this->modes[$cm]->accepts($mode) ) {
+ $this->modes[$mode]->connectTo($cm);
+ }
+
+ }
+
+ $this->modes[$mode]->postConnect();
+ }
+
+ $this->connected = true;
+ }
+
+ function parse($doc) {
+ if ( $this->Lexer ) {
+ $this->connectModes();
+ // Normalize CRs and pad doc
+ $doc = "\n".str_replace("\r\n","\n",$doc)."\n";
+ $this->Lexer->parse($doc);
+ $this->Handler->_finalize();
+ return $this->Handler->calls;
+ } else {
+ return false;
+ }
+ }
+
+}
+
+//-------------------------------------------------------------------
+/**
+ * This class and all the subclasses below are
+ * used to reduce the effort required to register
+ * modes with the Lexer. For performance these
+ * could all be eliminated later perhaps, or
+ * the Parser could be serialized to a file once
+ * all modes are registered
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+*/
+class Doku_Parser_Mode {
+
+ var $Lexer;
+
+ var $allowedModes = array();
+
+ // returns a number used to determine in which order modes are added
+ function getSort() {
+ trigger_error('getSort() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ // Called before any calls to connectTo
+ function preConnect() {}
+
+ // Connects the mode
+ function connectTo($mode) {}
+
+ // Called after all calls to connectTo
+ function postConnect() {}
+
+ function accepts($mode) {
+ return in_array($mode, (array) $this->allowedModes );
+ }
+
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_base extends Doku_Parser_Mode {
+
+ function Doku_Parser_Mode_base() {
+ global $PARSER_MODES;
+
+ $this->allowedModes = array_merge (
+ $PARSER_MODES['container'],
+ $PARSER_MODES['baseonly'],
+ $PARSER_MODES['paragraphs'],
+ $PARSER_MODES['formatting'],
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['protected'],
+ $PARSER_MODES['disabled']
+ );
+ }
+
+ function getSort() {
+ return 0;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_footnote extends Doku_Parser_Mode {
+
+ function Doku_Parser_Mode_footnote() {
+ global $PARSER_MODES;
+
+ $this->allowedModes = array_merge (
+ $PARSER_MODES['container'],
+ $PARSER_MODES['formatting'],
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['protected'],
+ $PARSER_MODES['disabled']
+ );
+
+ unset($this->allowedModes[array_search('footnote', $this->allowedModes)]);
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern(
+ '\x28\x28(?=.*\x29\x29)',$mode,'footnote'
+ );
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern(
+ '\x29\x29','footnote'
+ );
+ }
+
+ function getSort() {
+ return 150;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_header extends Doku_Parser_Mode {
+
+ function preConnect() {
+ //we're not picky about the closing ones, two are enough
+ $this->Lexer->addSpecialPattern(
+ '[ \t]*={2,}[^\n]+={2,}[ \t]*(?=\n)',
+ 'base',
+ 'header'
+ );
+ }
+
+ function getSort() {
+ return 50;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_notoc extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~NOTOC~~',$mode,'notoc');
+ }
+
+ function getSort() {
+ return 30;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_nocache extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~NOCACHE~~',$mode,'nocache');
+ }
+
+ function getSort() {
+ return 40;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_linebreak extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('\x5C{2}(?:[ \t]|(?=\n))',$mode,'linebreak');
+ }
+
+ function getSort() {
+ return 140;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_eol extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $badModes = array('listblock','table');
+ if ( in_array($mode, $badModes) ) {
+ return;
+ }
+ // see FS#1652, pattern extended to swallow preceding whitespace to avoid issues with lines that only contain whitespace
+ $this->Lexer->addSpecialPattern('(?:^[ \t]*)?\n',$mode,'eol');
+ }
+
+ function getSort() {
+ return 370;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_hr extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('\n[ \t]*-{4,}[ \t]*(?=\n)',$mode,'hr');
+ }
+
+ function getSort() {
+ return 160;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_formatting extends Doku_Parser_Mode {
+ var $type;
+
+ var $formatting = array (
+ 'strong' => array (
+ 'entry'=>'\*\*(?=.*\*\*)',
+ 'exit'=>'\*\*',
+ 'sort'=>70
+ ),
+
+ 'emphasis'=> array (
+ 'entry'=>'//(?=[^\x00]*[^:])', //hack for bugs #384 #763 #1468
+ 'exit'=>'//',
+ 'sort'=>80
+ ),
+
+ 'underline'=> array (
+ 'entry'=>'__(?=.*__)',
+ 'exit'=>'__',
+ 'sort'=>90
+ ),
+
+ 'monospace'=> array (
+ 'entry'=>'\x27\x27(?=.*\x27\x27)',
+ 'exit'=>'\x27\x27',
+ 'sort'=>100
+ ),
+
+ 'subscript'=> array (
+ 'entry'=>'<sub>(?=.*</sub>)',
+ 'exit'=>'</sub>',
+ 'sort'=>110
+ ),
+
+ 'superscript'=> array (
+ 'entry'=>'<sup>(?=.*</sup>)',
+ 'exit'=>'</sup>',
+ 'sort'=>120
+ ),
+
+ 'deleted'=> array (
+ 'entry'=>'<del>(?=.*</del>)',
+ 'exit'=>'</del>',
+ 'sort'=>130
+ ),
+ );
+
+ function Doku_Parser_Mode_formatting($type) {
+ global $PARSER_MODES;
+
+ if ( !array_key_exists($type, $this->formatting) ) {
+ trigger_error('Invalid formatting type '.$type, E_USER_WARNING);
+ }
+
+ $this->type = $type;
+
+ // formatting may contain other formatting but not it self
+ $modes = $PARSER_MODES['formatting'];
+ $key = array_search($type, $modes);
+ if ( is_int($key) ) {
+ unset($modes[$key]);
+ }
+
+ $this->allowedModes = array_merge (
+ $modes,
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['disabled']
+ );
+ }
+
+ function connectTo($mode) {
+
+ // Can't nest formatting in itself
+ if ( $mode == $this->type ) {
+ return;
+ }
+
+ $this->Lexer->addEntryPattern(
+ $this->formatting[$this->type]['entry'],
+ $mode,
+ $this->type
+ );
+ }
+
+ function postConnect() {
+
+ $this->Lexer->addExitPattern(
+ $this->formatting[$this->type]['exit'],
+ $this->type
+ );
+
+ }
+
+ function getSort() {
+ return $this->formatting[$this->type]['sort'];
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_listblock extends Doku_Parser_Mode {
+
+ function Doku_Parser_Mode_listblock() {
+ global $PARSER_MODES;
+
+ $this->allowedModes = array_merge (
+ $PARSER_MODES['formatting'],
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['disabled'],
+ $PARSER_MODES['protected'] #XXX new
+ );
+
+ // $this->allowedModes[] = 'footnote';
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('\n {2,}[\-\*]',$mode,'listblock');
+ $this->Lexer->addEntryPattern('\n\t{1,}[\-\*]',$mode,'listblock');
+
+ $this->Lexer->addPattern('\n {2,}[\-\*]','listblock');
+ $this->Lexer->addPattern('\n\t{1,}[\-\*]','listblock');
+
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('\n','listblock');
+ }
+
+ function getSort() {
+ return 10;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_table extends Doku_Parser_Mode {
+
+ function Doku_Parser_Mode_table() {
+ global $PARSER_MODES;
+
+ $this->allowedModes = array_merge (
+ $PARSER_MODES['formatting'],
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['disabled'],
+ $PARSER_MODES['protected']
+ );
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('\n\^',$mode,'table');
+ $this->Lexer->addEntryPattern('\n\|',$mode,'table');
+ }
+
+ function postConnect() {
+ $this->Lexer->addPattern('\n\^','table');
+ $this->Lexer->addPattern('\n\|','table');
+ $this->Lexer->addPattern('[\t ]*:::[\t ]*(?=[\|\^])','table');
+ $this->Lexer->addPattern('[\t ]+','table');
+ $this->Lexer->addPattern('\^','table');
+ $this->Lexer->addPattern('\|','table');
+ $this->Lexer->addExitPattern('\n','table');
+ }
+
+ function getSort() {
+ return 60;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_unformatted extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<nowiki>(?=.*</nowiki>)',$mode,'unformatted');
+ $this->Lexer->addEntryPattern('%%(?=.*%%)',$mode,'unformattedalt');
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('</nowiki>','unformatted');
+ $this->Lexer->addExitPattern('%%','unformattedalt');
+ $this->Lexer->mapHandler('unformattedalt','unformatted');
+ }
+
+ function getSort() {
+ return 170;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_php extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<php>(?=.*</php>)',$mode,'php');
+ $this->Lexer->addEntryPattern('<PHP>(?=.*</PHP>)',$mode,'phpblock');
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('</php>','php');
+ $this->Lexer->addExitPattern('</PHP>','phpblock');
+ }
+
+ function getSort() {
+ return 180;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_html extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<html>(?=.*</html>)',$mode,'html');
+ $this->Lexer->addEntryPattern('<HTML>(?=.*</HTML>)',$mode,'htmlblock');
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('</html>','html');
+ $this->Lexer->addExitPattern('</HTML>','htmlblock');
+ }
+
+ function getSort() {
+ return 190;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_preformatted extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ // Has hard coded awareness of lists...
+ $this->Lexer->addEntryPattern('\n (?![\*\-])',$mode,'preformatted');
+ $this->Lexer->addEntryPattern('\n\t(?![\*\-])',$mode,'preformatted');
+
+ // How to effect a sub pattern with the Lexer!
+ $this->Lexer->addPattern('\n ','preformatted');
+ $this->Lexer->addPattern('\n\t','preformatted');
+
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('\n','preformatted');
+ }
+
+ function getSort() {
+ return 20;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_code extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<code(?=.*</code>)',$mode,'code');
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('</code>','code');
+ }
+
+ function getSort() {
+ return 200;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_file extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<file(?=.*</file>)',$mode,'file');
+ }
+
+ function postConnect() {
+ $this->Lexer->addExitPattern('</file>','file');
+ }
+
+ function getSort() {
+ return 210;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_quote extends Doku_Parser_Mode {
+
+ function Doku_Parser_Mode_quote() {
+ global $PARSER_MODES;
+
+ $this->allowedModes = array_merge (
+ $PARSER_MODES['formatting'],
+ $PARSER_MODES['substition'],
+ $PARSER_MODES['disabled'],
+ $PARSER_MODES['protected'] #XXX new
+ );
+ #$this->allowedModes[] = 'footnote';
+ #$this->allowedModes[] = 'preformatted';
+ #$this->allowedModes[] = 'unformatted';
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('\n>{1,}',$mode,'quote');
+ }
+
+ function postConnect() {
+ $this->Lexer->addPattern('\n>{1,}','quote');
+ $this->Lexer->addExitPattern('\n','quote');
+ }
+
+ function getSort() {
+ return 220;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_acronym extends Doku_Parser_Mode {
+ // A list
+ var $acronyms = array();
+ var $pattern = '';
+
+ function Doku_Parser_Mode_acronym($acronyms) {
+ usort($acronyms,array($this,'_compare'));
+ $this->acronyms = $acronyms;
+ }
+
+ function preConnect() {
+ if(!count($this->acronyms)) return;
+
+ $bound = '[\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]';
+ $acronyms = array_map('Doku_Lexer_Escape',$this->acronyms);
+ $this->pattern = '(?<=^|'.$bound.')(?:'.join('|',$acronyms).')(?='.$bound.')';
+ }
+
+ function connectTo($mode) {
+ if(!count($this->acronyms)) return;
+
+ if ( strlen($this->pattern) > 0 ) {
+ $this->Lexer->addSpecialPattern($this->pattern,$mode,'acronym');
+ }
+ }
+
+ function getSort() {
+ return 240;
+ }
+
+ /**
+ * sort callback to order by string length descending
+ */
+ function _compare($a,$b) {
+ $a_len = strlen($a);
+ $b_len = strlen($b);
+ if ($a_len > $b_len) {
+ return -1;
+ } else if ($a_len < $b_len) {
+ return 1;
+ }
+
+ return 0;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_smiley extends Doku_Parser_Mode {
+ // A list
+ var $smileys = array();
+ var $pattern = '';
+
+ function Doku_Parser_Mode_smiley($smileys) {
+ $this->smileys = $smileys;
+ }
+
+ function preConnect() {
+ if(!count($this->smileys) || $this->pattern != '') return;
+
+ $sep = '';
+ foreach ( $this->smileys as $smiley ) {
+ $this->pattern .= $sep.'(?<=\W|^)'.Doku_Lexer_Escape($smiley).'(?=\W|$)';
+ $sep = '|';
+ }
+ }
+
+ function connectTo($mode) {
+ if(!count($this->smileys)) return;
+
+ if ( strlen($this->pattern) > 0 ) {
+ $this->Lexer->addSpecialPattern($this->pattern,$mode,'smiley');
+ }
+ }
+
+ function getSort() {
+ return 230;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_wordblock extends Doku_Parser_Mode {
+ // A list
+ var $badwords = array();
+ var $pattern = '';
+
+ function Doku_Parser_Mode_wordblock($badwords) {
+ $this->badwords = $badwords;
+ }
+
+ function preConnect() {
+
+ if ( count($this->badwords) == 0 || $this->pattern != '') {
+ return;
+ }
+
+ $sep = '';
+ foreach ( $this->badwords as $badword ) {
+ $this->pattern .= $sep.'(?<=\b)(?i)'.Doku_Lexer_Escape($badword).'(?-i)(?=\b)';
+ $sep = '|';
+ }
+
+ }
+
+ function connectTo($mode) {
+ if ( strlen($this->pattern) > 0 ) {
+ $this->Lexer->addSpecialPattern($this->pattern,$mode,'wordblock');
+ }
+ }
+
+ function getSort() {
+ return 250;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_entity extends Doku_Parser_Mode {
+ // A list
+ var $entities = array();
+ var $pattern = '';
+
+ function Doku_Parser_Mode_entity($entities) {
+ $this->entities = $entities;
+ }
+
+ function preConnect() {
+ if(!count($this->entities) || $this->pattern != '') return;
+
+ $sep = '';
+ foreach ( $this->entities as $entity ) {
+ $this->pattern .= $sep.Doku_Lexer_Escape($entity);
+ $sep = '|';
+ }
+ }
+
+ function connectTo($mode) {
+ if(!count($this->entities)) return;
+
+ if ( strlen($this->pattern) > 0 ) {
+ $this->Lexer->addSpecialPattern($this->pattern,$mode,'entity');
+ }
+ }
+
+ function getSort() {
+ return 260;
+ }
+}
+
+//-------------------------------------------------------------------
+// Implements the 640x480 replacement
+class Doku_Parser_Mode_multiplyentity extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+
+ $this->Lexer->addSpecialPattern(
+ '(?<=\b)(?:[1-9]|\d{2,})[xX]\d+(?=\b)',$mode,'multiplyentity'
+ );
+
+ }
+
+ function getSort() {
+ return 270;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_quotes extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ global $conf;
+
+ $ws = '\s/\#~:+=&%@\-\x28\x29\]\[{}><"\''; // whitespace
+ $punc = ';,\.?!';
+
+ if($conf['typography'] == 2){
+ $this->Lexer->addSpecialPattern(
+ "(?<=^|[$ws])'(?=[^$ws$punc])",$mode,'singlequoteopening'
+ );
+ $this->Lexer->addSpecialPattern(
+ "(?<=^|[^$ws]|[$punc])'(?=$|[$ws$punc])",$mode,'singlequoteclosing'
+ );
+ $this->Lexer->addSpecialPattern(
+ "(?<=^|[^$ws$punc])'(?=$|[^$ws$punc])",$mode,'apostrophe'
+ );
+ }
+
+ $this->Lexer->addSpecialPattern(
+ "(?<=^|[$ws])\"(?=[^$ws$punc])",$mode,'doublequoteopening'
+ );
+ $this->Lexer->addSpecialPattern(
+ "\"",$mode,'doublequoteclosing'
+ );
+
+
+ }
+
+ function getSort() {
+ return 280;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_camelcaselink extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern(
+ '\b[A-Z]+[a-z]+[A-Z][A-Za-z]*\b',$mode,'camelcaselink'
+ );
+ }
+
+ function getSort() {
+ return 290;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_internallink extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ // Word boundaries?
+ $this->Lexer->addSpecialPattern("\[\[.+?\]\]",$mode,'internallink');
+ }
+
+ function getSort() {
+ return 300;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_media extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ // Word boundaries?
+ $this->Lexer->addSpecialPattern("\{\{[^\}]+\}\}",$mode,'media');
+ }
+
+ function getSort() {
+ return 320;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_rss extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern("\{\{rss>[^\}]+\}\}",$mode,'rss');
+ }
+
+ function getSort() {
+ return 310;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_externallink extends Doku_Parser_Mode {
+ var $schemes = array();
+ var $patterns = array();
+
+ function preConnect() {
+ if(count($this->patterns)) return;
+
+ $ltrs = '\w';
+ $gunk = '/\#~:.?+=&%@!\-';
+ $punc = '.:?\-;,';
+ $host = $ltrs.$punc;
+ $any = $ltrs.$gunk.$punc;
+
+ $this->schemes = getSchemes();
+ foreach ( $this->schemes as $scheme ) {
+ $this->patterns[] = '\b(?i)'.$scheme.'(?-i)://['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
+ }
+
+ $this->patterns[] = '\b(?i)www?(?-i)\.['.$host.']+?\.['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
+ $this->patterns[] = '\b(?i)ftp?(?-i)\.['.$host.']+?\.['.$host.']+?['.$any.']+?(?=['.$punc.']*[^'.$any.'])';
+ }
+
+ function connectTo($mode) {
+
+ foreach ( $this->patterns as $pattern ) {
+ $this->Lexer->addSpecialPattern($pattern,$mode,'externallink');
+ }
+ }
+
+ function getSort() {
+ return 330;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_filelink extends Doku_Parser_Mode {
+
+ var $pattern;
+
+ function preConnect() {
+
+ $ltrs = '\w';
+ $gunk = '/\#~:.?+=&%@!\-';
+ $punc = '.:?\-;,';
+ $host = $ltrs.$punc;
+ $any = $ltrs.$gunk.$punc;
+
+ $this->pattern = '\b(?i)file(?-i)://['.$any.']+?['.
+ $punc.']*[^'.$any.']';
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern(
+ $this->pattern,$mode,'filelink');
+ }
+
+ function getSort() {
+ return 360;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_windowssharelink extends Doku_Parser_Mode {
+
+ var $pattern;
+
+ function preConnect() {
+ $this->pattern = "\\\\\\\\\w+?(?:\\\\[\w$]+)+";
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern(
+ $this->pattern,$mode,'windowssharelink');
+ }
+
+ function getSort() {
+ return 350;
+ }
+}
+
+//-------------------------------------------------------------------
+class Doku_Parser_Mode_emaillink extends Doku_Parser_Mode {
+
+ function connectTo($mode) {
+ // pattern below is defined in inc/mail.php
+ $this->Lexer->addSpecialPattern('<'.PREG_PATTERN_VALID_EMAIL.'>',$mode,'emaillink');
+ }
+
+ function getSort() {
+ return 340;
+ }
+}
+
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php
new file mode 100644
index 000000000..6082e935d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php
@@ -0,0 +1,322 @@
+<?php
+/**
+ * Renderer output base class
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+if(!defined('DOKU_INC')) die('meh.');
+require_once DOKU_INC . 'inc/parser/renderer.php';
+require_once DOKU_INC . 'inc/plugin.php';
+require_once DOKU_INC . 'inc/pluginutils.php';
+
+/**
+ * An empty renderer, produces no output
+ *
+ * Inherits from DokuWiki_Plugin for giving additional functions to render plugins
+ */
+class Doku_Renderer extends DokuWiki_Plugin {
+ var $info = array(
+ 'cache' => true, // may the rendered result cached?
+ 'toc' => true, // render the TOC?
+ );
+
+ // keep some config options
+ var $acronyms = array();
+ var $smileys = array();
+ var $badwords = array();
+ var $entities = array();
+ var $interwiki = array();
+
+ // allows renderer to be used again, clean out any per-use values
+ function reset() {
+ }
+
+ function nocache() {
+ $this->info['cache'] = false;
+ }
+
+ function notoc() {
+ $this->info['toc'] = false;
+ }
+
+ /**
+ * Returns the format produced by this renderer.
+ *
+ * Has to be overidden by decendend classes
+ */
+ function getFormat(){
+ trigger_error('getFormat() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+
+ //handle plugin rendering
+ function plugin($name,$data){
+ $plugin =& plugin_load('syntax',$name);
+ if($plugin != null){
+ $plugin->render($this->getFormat(),$this,$data);
+ }
+ }
+
+ /**
+ * handle nested render instructions
+ * this method (and nest_close method) should not be overloaded in actual renderer output classes
+ */
+ function nest($instructions) {
+
+ foreach ( $instructions as $instruction ) {
+ // execute the callback against ourself
+ call_user_func_array(array(&$this, $instruction[0]),$instruction[1]);
+ }
+ }
+
+ // dummy closing instruction issued by Doku_Handler_Nest, normally the syntax mode should
+ // override this instruction when instantiating Doku_Handler_Nest - however plugins will not
+ // be able to - as their instructions require data.
+ function nest_close() {}
+
+ function document_start() {}
+
+ function document_end() {}
+
+ function render_TOC() { return ''; }
+
+ function toc_additem($id, $text, $level) {}
+
+ function header($text, $level, $pos) {}
+
+ function section_edit($start, $end, $level, $name) {}
+
+ function section_open($level) {}
+
+ function section_close() {}
+
+ function cdata($text) {}
+
+ function p_open() {}
+
+ function p_close() {}
+
+ function linebreak() {}
+
+ function hr() {}
+
+ function strong_open() {}
+
+ function strong_close() {}
+
+ function emphasis_open() {}
+
+ function emphasis_close() {}
+
+ function underline_open() {}
+
+ function underline_close() {}
+
+ function monospace_open() {}
+
+ function monospace_close() {}
+
+ function subscript_open() {}
+
+ function subscript_close() {}
+
+ function superscript_open() {}
+
+ function superscript_close() {}
+
+ function deleted_open() {}
+
+ function deleted_close() {}
+
+ function footnote_open() {}
+
+ function footnote_close() {}
+
+ function listu_open() {}
+
+ function listu_close() {}
+
+ function listo_open() {}
+
+ function listo_close() {}
+
+ function listitem_open($level) {}
+
+ function listitem_close() {}
+
+ function listcontent_open() {}
+
+ function listcontent_close() {}
+
+ function unformatted($text) {}
+
+ function php($text) {}
+
+ function phpblock($text) {}
+
+ function html($text) {}
+
+ function htmlblock($text) {}
+
+ function preformatted($text) {}
+
+ function quote_open() {}
+
+ function quote_close() {}
+
+ function file($text, $lang = null, $file = null ) {}
+
+ function code($text, $lang = null, $file = null ) {}
+
+ function acronym($acronym) {}
+
+ function smiley($smiley) {}
+
+ function wordblock($word) {}
+
+ function entity($entity) {}
+
+ // 640x480 ($x=640, $y=480)
+ function multiplyentity($x, $y) {}
+
+ function singlequoteopening() {}
+
+ function singlequoteclosing() {}
+
+ function apostrophe() {}
+
+ function doublequoteopening() {}
+
+ function doublequoteclosing() {}
+
+ // $link like 'SomePage'
+ function camelcaselink($link) {}
+
+ function locallink($hash, $name = NULL) {}
+
+ // $link like 'wiki:syntax', $title could be an array (media)
+ function internallink($link, $title = NULL) {}
+
+ // $link is full URL with scheme, $title could be an array (media)
+ function externallink($link, $title = NULL) {}
+
+ function rss ($url,$params) {}
+
+ // $link is the original link - probably not much use
+ // $wikiName is an indentifier for the wiki
+ // $wikiUri is the URL fragment to append to some known URL
+ function interwikilink($link, $title = NULL, $wikiName, $wikiUri) {}
+
+ // Link to file on users OS, $title could be an array (media)
+ function filelink($link, $title = NULL) {}
+
+ // Link to a Windows share, , $title could be an array (media)
+ function windowssharelink($link, $title = NULL) {}
+
+// function email($address, $title = NULL) {}
+ function emaillink($address, $name = NULL) {}
+
+ function internalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {}
+
+ function externalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {}
+
+ function internalmedialink (
+ $src,$title=NULL,$align=NULL,$width=NULL,$height=NULL,$cache=NULL
+ ) {}
+
+ function externalmedialink(
+ $src,$title=NULL,$align=NULL,$width=NULL,$height=NULL,$cache=NULL
+ ) {}
+
+ function table_open($maxcols = NULL, $numrows = NULL){}
+
+ function table_close(){}
+
+ function tablerow_open(){}
+
+ function tablerow_close(){}
+
+ function tableheader_open($colspan = 1, $align = NULL, $rowspan = 1){}
+
+ function tableheader_close(){}
+
+ function tablecell_open($colspan = 1, $align = NULL, $rowspan = 1){}
+
+ function tablecell_close(){}
+
+
+ // util functions follow, you probably won't need to reimplement them
+
+
+ /**
+ * Removes any Namespace from the given name but keeps
+ * casing and special chars
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _simpleTitle($name){
+ global $conf;
+
+ //if there is a hash we use the ancor name only
+ list($name,$hash) = explode('#',$name,2);
+ if($hash) return $hash;
+
+ //trim colons or slash of a namespace link
+ $name = rtrim($name,':');
+ if($conf['useslash'])
+ $name = rtrim($name,'/');
+
+ if($conf['useslash']){
+ $nssep = '[:;/]';
+ }else{
+ $nssep = '[:;]';
+ }
+ $name = preg_replace('!.*'.$nssep.'!','',$name);
+
+ if(!$name) return $this->_simpleTitle($conf['start']);
+ return $name;
+ }
+
+ /**
+ * Resolve an interwikilink
+ */
+ function _resolveInterWiki(&$shortcut,$reference){
+ //get interwiki URL
+ if ( isset($this->interwiki[$shortcut]) ) {
+ $url = $this->interwiki[$shortcut];
+ } else {
+ // Default to Google I'm feeling lucky
+ $url = 'http://www.google.com/search?q={URL}&amp;btnI=lucky';
+ $shortcut = 'go';
+ }
+
+ //split into hash and url part
+ list($reference,$hash) = explode('#',$reference,2);
+
+ //replace placeholder
+ if(preg_match('#\{(URL|NAME|SCHEME|HOST|PORT|PATH|QUERY)\}#',$url)){
+ //use placeholders
+ $url = str_replace('{URL}',rawurlencode($reference),$url);
+ $url = str_replace('{NAME}',$reference,$url);
+ $parsed = parse_url($reference);
+ if(!$parsed['port']) $parsed['port'] = 80;
+ $url = str_replace('{SCHEME}',$parsed['scheme'],$url);
+ $url = str_replace('{HOST}',$parsed['host'],$url);
+ $url = str_replace('{PORT}',$parsed['port'],$url);
+ $url = str_replace('{PATH}',$parsed['path'],$url);
+ $url = str_replace('{QUERY}',$parsed['query'],$url);
+ }else{
+ //default
+ $url = $url.rawurlencode($reference);
+ }
+ if($hash) $url .= '#'.rawurlencode($hash);
+
+ return $url;
+ }
+}
+
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php
new file mode 100644
index 000000000..4d5333f7a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php
@@ -0,0 +1,1142 @@
+<?php
+/**
+ * Renderer for XHTML output
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+if(!defined('DOKU_INC')) die('meh.');
+
+if ( !defined('DOKU_LF') ) {
+ // Some whitespace to help View > Source
+ define ('DOKU_LF',"\n");
+}
+
+if ( !defined('DOKU_TAB') ) {
+ // Some whitespace to help View > Source
+ define ('DOKU_TAB',"\t");
+}
+
+require_once DOKU_INC . 'inc/parser/renderer.php';
+require_once DOKU_INC . 'inc/html.php';
+
+/**
+ * The Renderer
+ */
+class Doku_Renderer_xhtml extends Doku_Renderer {
+
+ // @access public
+ var $doc = ''; // will contain the whole document
+ var $toc = array(); // will contain the Table of Contents
+
+
+ var $headers = array();
+ var $footnotes = array();
+ var $lastlevel = 0;
+ var $node = array(0,0,0,0,0);
+ var $store = '';
+
+ var $_counter = array(); // used as global counter, introduced for table classes
+ var $_codeblock = 0; // counts the code and file blocks, used to provide download links
+
+ function getFormat(){
+ return 'xhtml';
+ }
+
+
+ function document_start() {
+ //reset some internals
+ $this->toc = array();
+ $this->headers = array();
+ }
+
+ function document_end() {
+ if ( count ($this->footnotes) > 0 ) {
+ $this->doc .= '<div class="footnotes">'.DOKU_LF;
+
+ $id = 0;
+ foreach ( $this->footnotes as $footnote ) {
+ $id++; // the number of the current footnote
+
+ // check its not a placeholder that indicates actual footnote text is elsewhere
+ if (substr($footnote, 0, 5) != "@@FNT") {
+
+ // open the footnote and set the anchor and backlink
+ $this->doc .= '<div class="fn">';
+ $this->doc .= '<sup><a href="#fnt__'.$id.'" id="fn__'.$id.'" name="fn__'.$id.'" class="fn_bot">';
+ $this->doc .= $id.')</a></sup> '.DOKU_LF;
+
+ // get any other footnotes that use the same markup
+ $alt = array_keys($this->footnotes, "@@FNT$id");
+
+ if (count($alt)) {
+ foreach ($alt as $ref) {
+ // set anchor and backlink for the other footnotes
+ $this->doc .= ', <sup><a href="#fnt__'.($ref+1).'" id="fn__'.($ref+1).'" name="fn__'.($ref+1).'" class="fn_bot">';
+ $this->doc .= ($ref+1).')</a></sup> '.DOKU_LF;
+ }
+ }
+
+ // add footnote markup and close this footnote
+ $this->doc .= $footnote;
+ $this->doc .= '</div>' . DOKU_LF;
+ }
+ }
+ $this->doc .= '</div>'.DOKU_LF;
+ }
+
+ // Prepare the TOC
+ global $conf;
+ if($this->info['toc'] && is_array($this->toc) && $conf['tocminheads'] && count($this->toc) >= $conf['tocminheads']){
+ global $TOC;
+ $TOC = $this->toc;
+ }
+
+ // make sure there are no empty paragraphs
+ $this->doc = preg_replace('#<p>\s*</p>#','',$this->doc);
+ }
+
+ function toc_additem($id, $text, $level) {
+ global $conf;
+
+ //handle TOC
+ if($level >= $conf['toptoclevel'] && $level <= $conf['maxtoclevel']){
+ $this->toc[] = html_mktocitem($id, $text, $level-$conf['toptoclevel']+1);
+ }
+ }
+
+ function header($text, $level, $pos) {
+ if(!$text) return; //skip empty headlines
+
+ $hid = $this->_headerToLink($text,true);
+
+ //only add items within configured levels
+ $this->toc_additem($hid, $text, $level);
+
+ // adjust $node to reflect hierarchy of levels
+ $this->node[$level-1]++;
+ if ($level < $this->lastlevel) {
+ for ($i = 0; $i < $this->lastlevel-$level; $i++) {
+ $this->node[$this->lastlevel-$i-1] = 0;
+ }
+ }
+ $this->lastlevel = $level;
+
+ // write the header
+ $this->doc .= DOKU_LF.'<h'.$level.'><a name="'.$hid.'" id="'.$hid.'">';
+ $this->doc .= $this->_xmlEntities($text);
+ $this->doc .= "</a></h$level>".DOKU_LF;
+ }
+
+ /**
+ * Section edit marker is replaced by an edit button when
+ * the page is editable. Replacement done in 'inc/html.php#html_secedit'
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+ function section_edit($start, $end, $level, $name) {
+ global $conf;
+
+ if ($start!=-1 && $level<=$conf['maxseclevel']) {
+ $name = str_replace('"', '', $name);
+ $this->doc .= '<!-- SECTION "'.$name.'" ['.$start.'-'.(($end===0)?'':$end).'] -->';
+ }
+ }
+
+ function section_open($level) {
+ $this->doc .= "<div class=\"level$level\">".DOKU_LF;
+ }
+
+ function section_close() {
+ $this->doc .= DOKU_LF.'</div>'.DOKU_LF;
+ }
+
+ function cdata($text) {
+ $this->doc .= $this->_xmlEntities($text);
+ }
+
+ function p_open() {
+ $this->doc .= DOKU_LF.'<p>'.DOKU_LF;
+ }
+
+ function p_close() {
+ $this->doc .= DOKU_LF.'</p>'.DOKU_LF;
+ }
+
+ function linebreak() {
+ $this->doc .= '<br/>'.DOKU_LF;
+ }
+
+ function hr() {
+ $this->doc .= '<hr />'.DOKU_LF;
+ }
+
+ function strong_open() {
+ $this->doc .= '<strong>';
+ }
+
+ function strong_close() {
+ $this->doc .= '</strong>';
+ }
+
+ function emphasis_open() {
+ $this->doc .= '<em>';
+ }
+
+ function emphasis_close() {
+ $this->doc .= '</em>';
+ }
+
+ function underline_open() {
+ $this->doc .= '<em class="u">';
+ }
+
+ function underline_close() {
+ $this->doc .= '</em>';
+ }
+
+ function monospace_open() {
+ $this->doc .= '<code>';
+ }
+
+ function monospace_close() {
+ $this->doc .= '</code>';
+ }
+
+ function subscript_open() {
+ $this->doc .= '<sub>';
+ }
+
+ function subscript_close() {
+ $this->doc .= '</sub>';
+ }
+
+ function superscript_open() {
+ $this->doc .= '<sup>';
+ }
+
+ function superscript_close() {
+ $this->doc .= '</sup>';
+ }
+
+ function deleted_open() {
+ $this->doc .= '<del>';
+ }
+
+ function deleted_close() {
+ $this->doc .= '</del>';
+ }
+
+ /**
+ * Callback for footnote start syntax
+ *
+ * All following content will go to the footnote instead of
+ * the document. To achieve this the previous rendered content
+ * is moved to $store and $doc is cleared
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function footnote_open() {
+
+ // move current content to store and record footnote
+ $this->store = $this->doc;
+ $this->doc = '';
+ }
+
+ /**
+ * Callback for footnote end syntax
+ *
+ * All rendered content is moved to the $footnotes array and the old
+ * content is restored from $store again
+ *
+ * @author Andreas Gohr
+ */
+ function footnote_close() {
+
+ // recover footnote into the stack and restore old content
+ $footnote = $this->doc;
+ $this->doc = $this->store;
+ $this->store = '';
+
+ // check to see if this footnote has been seen before
+ $i = array_search($footnote, $this->footnotes);
+
+ if ($i === false) {
+ // its a new footnote, add it to the $footnotes array
+ $id = count($this->footnotes)+1;
+ $this->footnotes[count($this->footnotes)] = $footnote;
+ } else {
+ // seen this one before, translate the index to an id and save a placeholder
+ $i++;
+ $id = count($this->footnotes)+1;
+ $this->footnotes[count($this->footnotes)] = "@@FNT".($i);
+ }
+
+ // output the footnote reference and link
+ $this->doc .= '<sup><a href="#fn__'.$id.'" name="fnt__'.$id.'" id="fnt__'.$id.'" class="fn_top">'.$id.')</a></sup>';
+ }
+
+ function listu_open() {
+ $this->doc .= '<ul>'.DOKU_LF;
+ }
+
+ function listu_close() {
+ $this->doc .= '</ul>'.DOKU_LF;
+ }
+
+ function listo_open() {
+ $this->doc .= '<ol>'.DOKU_LF;
+ }
+
+ function listo_close() {
+ $this->doc .= '</ol>'.DOKU_LF;
+ }
+
+ function listitem_open($level) {
+ $this->doc .= '<li class="level'.$level.'">';
+ }
+
+ function listitem_close() {
+ $this->doc .= '</li>'.DOKU_LF;
+ }
+
+ function listcontent_open() {
+ $this->doc .= '<div class="li">';
+ }
+
+ function listcontent_close() {
+ $this->doc .= '</div>'.DOKU_LF;
+ }
+
+ function unformatted($text) {
+ $this->doc .= $this->_xmlEntities($text);
+ }
+
+ /**
+ * Execute PHP code if allowed
+ *
+ * @param string $wrapper html element to wrap result if $conf['phpok'] is okff
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function php($text, $wrapper='code') {
+ global $conf;
+
+ if($conf['phpok']){
+ ob_start();
+ eval($text);
+ $this->doc .= ob_get_contents();
+ ob_end_clean();
+ } else {
+ $this->doc .= p_xhtml_cached_geshi($text, 'php', $wrapper);
+ }
+ }
+
+ function phpblock($text) {
+ $this->php($text, 'pre');
+ }
+
+ /**
+ * Insert HTML if allowed
+ *
+ * @param string $wrapper html element to wrap result if $conf['htmlok'] is okff
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function html($text, $wrapper='code') {
+ global $conf;
+
+ if($conf['htmlok']){
+ $this->doc .= $text;
+ } else {
+ $this->doc .= p_xhtml_cached_geshi($text, 'html4strict', $wrapper);
+ }
+ }
+
+ function htmlblock($text) {
+ $this->html($text, 'pre');
+ }
+
+ function quote_open() {
+ $this->doc .= '<blockquote><div class="no">'.DOKU_LF;
+ }
+
+ function quote_close() {
+ $this->doc .= '</div></blockquote>'.DOKU_LF;
+ }
+
+ function preformatted($text) {
+ $this->doc .= '<pre class="code">' . trim($this->_xmlEntities($text),"\n\r") . '</pre>'. DOKU_LF;
+ }
+
+ function file($text, $language=null, $filename=null) {
+ $this->_highlight('file',$text,$language,$filename);
+ }
+
+ function code($text, $language=null, $filename=null) {
+ $this->_highlight('code',$text,$language,$filename);
+ }
+
+ /**
+ * Use GeSHi to highlight language syntax in code and file blocks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _highlight($type, $text, $language=null, $filename=null) {
+ global $conf;
+ global $ID;
+ global $lang;
+
+ if($filename){
+ // add icon
+ list($ext) = mimetype($filename,false);
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
+ $class = 'mediafile mf_'.$class;
+
+ $this->doc .= '<dl class="'.$type.'">'.DOKU_LF;
+ $this->doc .= '<dt><a href="'.exportlink($ID,'code',array('codeblock'=>$this->_codeblock)).'" title="'.$lang['download'].'" class="'.$class.'">';
+ $this->doc .= hsc($filename);
+ $this->doc .= '</a></dt>'.DOKU_LF.'<dd>';
+ }
+
+ if ( is_null($language) ) {
+ $this->doc .= '<pre class="'.$type.'">'.$this->_xmlEntities($text).'</pre>'.DOKU_LF;
+ } else {
+ $class = 'code'; //we always need the code class to make the syntax highlighting apply
+ if($type != 'code') $class .= ' '.$type;
+
+ $this->doc .= "<pre class=\"$class $language\">".p_xhtml_cached_geshi($text, $language, '').'</pre>'.DOKU_LF;
+ }
+
+ if($filename){
+ $this->doc .= '</dd></dl>'.DOKU_LF;
+ }
+
+ $this->_codeblock++;
+ }
+
+ function acronym($acronym) {
+
+ if ( array_key_exists($acronym, $this->acronyms) ) {
+
+ $title = $this->_xmlEntities($this->acronyms[$acronym]);
+
+ $this->doc .= '<acronym title="'.$title
+ .'">'.$this->_xmlEntities($acronym).'</acronym>';
+
+ } else {
+ $this->doc .= $this->_xmlEntities($acronym);
+ }
+ }
+
+ function smiley($smiley) {
+ if ( array_key_exists($smiley, $this->smileys) ) {
+ $title = $this->_xmlEntities($this->smileys[$smiley]);
+ $this->doc .= '<img src="'.DOKU_BASE.'lib/images/smileys/'.$this->smileys[$smiley].
+ '" class="middle" alt="'.
+ $this->_xmlEntities($smiley).'" />';
+ } else {
+ $this->doc .= $this->_xmlEntities($smiley);
+ }
+ }
+
+ /*
+ * not used
+ function wordblock($word) {
+ if ( array_key_exists($word, $this->badwords) ) {
+ $this->doc .= '** BLEEP **';
+ } else {
+ $this->doc .= $this->_xmlEntities($word);
+ }
+ }
+ */
+
+ function entity($entity) {
+ if ( array_key_exists($entity, $this->entities) ) {
+ $this->doc .= $this->entities[$entity];
+ } else {
+ $this->doc .= $this->_xmlEntities($entity);
+ }
+ }
+
+ function multiplyentity($x, $y) {
+ $this->doc .= "$x&times;$y";
+ }
+
+ function singlequoteopening() {
+ global $lang;
+ $this->doc .= $lang['singlequoteopening'];
+ }
+
+ function singlequoteclosing() {
+ global $lang;
+ $this->doc .= $lang['singlequoteclosing'];
+ }
+
+ function apostrophe() {
+ global $lang;
+ $this->doc .= $lang['apostrophe'];
+ }
+
+ function doublequoteopening() {
+ global $lang;
+ $this->doc .= $lang['doublequoteopening'];
+ }
+
+ function doublequoteclosing() {
+ global $lang;
+ $this->doc .= $lang['doublequoteclosing'];
+ }
+
+ /**
+ */
+ function camelcaselink($link) {
+ $this->internallink($link,$link);
+ }
+
+
+ function locallink($hash, $name = NULL){
+ global $ID;
+ $name = $this->_getLinkTitle($name, $hash, $isImage);
+ $hash = $this->_headerToLink($hash);
+ $title = $ID.' &crarr;';
+ $this->doc .= '<a href="#'.$hash.'" title="'.$title.'" class="wikilink1">';
+ $this->doc .= $name;
+ $this->doc .= '</a>';
+ }
+
+ /**
+ * Render an internal Wiki Link
+ *
+ * $search,$returnonly & $linktype are not for the renderer but are used
+ * elsewhere - no need to implement them in other renderers
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function internallink($id, $name = NULL, $search=NULL,$returnonly=false,$linktype='content') {
+ global $conf;
+ global $ID;
+ // default name is based on $id as given
+ $default = $this->_simpleTitle($id);
+
+ // now first resolve and clean up the $id
+ resolve_pageid(getNS($ID),$id,$exists);
+ $name = $this->_getLinkTitle($name, $default, $isImage, $id, $linktype);
+ if ( !$isImage ) {
+ if ( $exists ) {
+ $class='wikilink1';
+ } else {
+ $class='wikilink2';
+ $link['rel']='nofollow';
+ }
+ } else {
+ $class='media';
+ }
+
+ //keep hash anchor
+ list($id,$hash) = explode('#',$id,2);
+ if(!empty($hash)) $hash = $this->_headerToLink($hash);
+
+ //prepare for formating
+ $link['target'] = $conf['target']['wiki'];
+ $link['style'] = '';
+ $link['pre'] = '';
+ $link['suf'] = '';
+ // highlight link to current page
+ if ($id == $ID) {
+ $link['pre'] = '<span class="curid">';
+ $link['suf'] = '</span>';
+ }
+ $link['more'] = '';
+ $link['class'] = $class;
+ $link['url'] = wl($id);
+ $link['name'] = $name;
+ $link['title'] = $id;
+ //add search string
+ if($search){
+ ($conf['userewrite']) ? $link['url'].='?' : $link['url'].='&amp;';
+ if(is_array($search)){
+ $search = array_map('rawurlencode',$search);
+ $link['url'] .= 's[]='.join('&amp;s[]=',$search);
+ }else{
+ $link['url'] .= 's='.rawurlencode($search);
+ }
+ }
+
+ //keep hash
+ if($hash) $link['url'].='#'.$hash;
+
+ //output formatted
+ if($returnonly){
+ return $this->_formatLink($link);
+ }else{
+ $this->doc .= $this->_formatLink($link);
+ }
+ }
+
+ function externallink($url, $name = NULL) {
+ global $conf;
+
+ $name = $this->_getLinkTitle($name, $url, $isImage);
+
+ if ( !$isImage ) {
+ $class='urlextern';
+ } else {
+ $class='media';
+ }
+
+ //prepare for formating
+ $link['target'] = $conf['target']['extern'];
+ $link['style'] = '';
+ $link['pre'] = '';
+ $link['suf'] = '';
+ $link['more'] = '';
+ $link['class'] = $class;
+ $link['url'] = $url;
+
+ $link['name'] = $name;
+ $link['title'] = $this->_xmlEntities($url);
+ if($conf['relnofollow']) $link['more'] .= ' rel="nofollow"';
+
+ //output formatted
+ $this->doc .= $this->_formatLink($link);
+ }
+
+ /**
+ */
+ function interwikilink($match, $name = NULL, $wikiName, $wikiUri) {
+ global $conf;
+
+ $link = array();
+ $link['target'] = $conf['target']['interwiki'];
+ $link['pre'] = '';
+ $link['suf'] = '';
+ $link['more'] = '';
+ $link['name'] = $this->_getLinkTitle($name, $wikiUri, $isImage);
+
+ //get interwiki URL
+ $url = $this->_resolveInterWiki($wikiName,$wikiUri);
+
+ if ( !$isImage ) {
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$wikiName);
+ $link['class'] = "interwiki iw_$class";
+ } else {
+ $link['class'] = 'media';
+ }
+
+ //do we stay at the same server? Use local target
+ if( strpos($url,DOKU_URL) === 0 ){
+ $link['target'] = $conf['target']['wiki'];
+ }
+
+ $link['url'] = $url;
+ $link['title'] = htmlspecialchars($link['url']);
+
+ //output formatted
+ $this->doc .= $this->_formatLink($link);
+ }
+
+ /**
+ */
+ function windowssharelink($url, $name = NULL) {
+ global $conf;
+ global $lang;
+ //simple setup
+ $link['target'] = $conf['target']['windows'];
+ $link['pre'] = '';
+ $link['suf'] = '';
+ $link['style'] = '';
+
+ $link['name'] = $this->_getLinkTitle($name, $url, $isImage);
+ if ( !$isImage ) {
+ $link['class'] = 'windows';
+ } else {
+ $link['class'] = 'media';
+ }
+
+
+ $link['title'] = $this->_xmlEntities($url);
+ $url = str_replace('\\','/',$url);
+ $url = 'file:///'.$url;
+ $link['url'] = $url;
+
+ //output formatted
+ $this->doc .= $this->_formatLink($link);
+ }
+
+ function emaillink($address, $name = NULL) {
+ global $conf;
+ //simple setup
+ $link = array();
+ $link['target'] = '';
+ $link['pre'] = '';
+ $link['suf'] = '';
+ $link['style'] = '';
+ $link['more'] = '';
+
+ $name = $this->_getLinkTitle($name, '', $isImage);
+ if ( !$isImage ) {
+ $link['class']='mail JSnocheck';
+ } else {
+ $link['class']='media JSnocheck';
+ }
+
+ $address = $this->_xmlEntities($address);
+ $address = obfuscate($address);
+ $title = $address;
+
+ if(empty($name)){
+ $name = $address;
+ }
+
+ if($conf['mailguard'] == 'visible') $address = rawurlencode($address);
+
+ $link['url'] = 'mailto:'.$address;
+ $link['name'] = $name;
+ $link['title'] = $title;
+
+ //output formatted
+ $this->doc .= $this->_formatLink($link);
+ }
+
+ function internalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {
+ global $ID;
+ list($src,$hash) = explode('#',$src,2);
+ resolve_mediaid(getNS($ID),$src, $exists);
+
+ $noLink = false;
+ $render = ($linking == 'linkonly') ? false : true;
+ $link = $this->_getMediaLinkConf($src, $title, $align, $width, $height, $cache, $render);
+
+ list($ext,$mime,$dl) = mimetype($src,false);
+ if(substr($mime,0,5) == 'image' && $render){
+ $link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),($linking=='direct'));
+ }elseif($mime == 'application/x-shockwave-flash' && $render){
+ // don't link flash movies
+ $noLink = true;
+ }else{
+ // add file icons
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
+ $link['class'] .= ' mediafile mf_'.$class;
+ $link['url'] = ml($src,array('id'=>$ID,'cache'=>$cache),true);
+ }
+
+ if($hash) $link['url'] .= '#'.$hash;
+
+ //markup non existing files
+ if (!$exists)
+ $link['class'] .= ' wikilink2';
+
+ //output formatted
+ if ($linking == 'nolink' || $noLink) $this->doc .= $link['name'];
+ else $this->doc .= $this->_formatLink($link);
+ }
+
+ function externalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {
+ list($src,$hash) = explode('#',$src,2);
+ $noLink = false;
+ $render = ($linking == 'linkonly') ? false : true;
+ $link = $this->_getMediaLinkConf($src, $title, $align, $width, $height, $cache, $render);
+
+ $link['url'] = ml($src,array('cache'=>$cache));
+
+ list($ext,$mime,$dl) = mimetype($src,false);
+ if(substr($mime,0,5) == 'image' && $render){
+ // link only jpeg images
+ // if ($ext != 'jpg' && $ext != 'jpeg') $noLink = true;
+ }elseif($mime == 'application/x-shockwave-flash' && $render){
+ // don't link flash movies
+ $noLink = true;
+ }else{
+ // add file icons
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$ext);
+ $link['class'] .= ' mediafile mf_'.$class;
+ }
+
+ if($hash) $link['url'] .= '#'.$hash;
+
+ //output formatted
+ if ($linking == 'nolink' || $noLink) $this->doc .= $link['name'];
+ else $this->doc .= $this->_formatLink($link);
+ }
+
+ /**
+ * Renders an RSS feed
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function rss ($url,$params){
+ global $lang;
+ global $conf;
+
+ require_once(DOKU_INC.'inc/FeedParser.php');
+ $feed = new FeedParser();
+ $feed->set_feed_url($url);
+
+ //disable warning while fetching
+ if (!defined('DOKU_E_LEVEL')) { $elvl = error_reporting(E_ERROR); }
+ $rc = $feed->init();
+ if (!defined('DOKU_E_LEVEL')) { error_reporting($elvl); }
+
+ //decide on start and end
+ if($params['reverse']){
+ $mod = -1;
+ $start = $feed->get_item_quantity()-1;
+ $end = $start - ($params['max']);
+ $end = ($end < -1) ? -1 : $end;
+ }else{
+ $mod = 1;
+ $start = 0;
+ $end = $feed->get_item_quantity();
+ $end = ($end > $params['max']) ? $params['max'] : $end;;
+ }
+
+ $this->doc .= '<ul class="rss">';
+ if($rc){
+ for ($x = $start; $x != $end; $x += $mod) {
+ $item = $feed->get_item($x);
+ $this->doc .= '<li><div class="li">';
+ // support feeds without links
+ $lnkurl = $item->get_permalink();
+ if($lnkurl){
+ // title is escaped by SimplePie, we unescape here because it
+ // is escaped again in externallink() FS#1705
+ $this->externallink($item->get_permalink(),
+ htmlspecialchars_decode($item->get_title()));
+ }else{
+ $this->doc .= ' '.$item->get_title();
+ }
+ if($params['author']){
+ $author = $item->get_author(0);
+ if($author){
+ $name = $author->get_name();
+ if(!$name) $name = $author->get_email();
+ if($name) $this->doc .= ' '.$lang['by'].' '.$name;
+ }
+ }
+ if($params['date']){
+ $this->doc .= ' ('.$item->get_local_date($conf['dformat']).')';
+ }
+ if($params['details']){
+ $this->doc .= '<div class="detail">';
+ if($conf['htmlok']){
+ $this->doc .= $item->get_description();
+ }else{
+ $this->doc .= strip_tags($item->get_description());
+ }
+ $this->doc .= '</div>';
+ }
+
+ $this->doc .= '</div></li>';
+ }
+ }else{
+ $this->doc .= '<li><div class="li">';
+ $this->doc .= '<em>'.$lang['rssfailed'].'</em>';
+ $this->externallink($url);
+ if($conf['allowdebug']){
+ $this->doc .= '<!--'.hsc($feed->error).'-->';
+ }
+ $this->doc .= '</div></li>';
+ }
+ $this->doc .= '</ul>';
+ }
+
+ // $numrows not yet implemented
+ function table_open($maxcols = NULL, $numrows = NULL){
+ // initialize the row counter used for classes
+ $this->_counter['row_counter'] = 0;
+ $this->doc .= '<table class="inline">'.DOKU_LF;
+ }
+
+ function table_close(){
+ $this->doc .= '</table>'.DOKU_LF;
+ }
+
+ function tablerow_open(){
+ // initialize the cell counter used for classes
+ $this->_counter['cell_counter'] = 0;
+ $class = 'row' . $this->_counter['row_counter']++;
+ $this->doc .= DOKU_TAB . '<tr class="'.$class.'">' . DOKU_LF . DOKU_TAB . DOKU_TAB;
+ }
+
+ function tablerow_close(){
+ $this->doc .= DOKU_LF . DOKU_TAB . '</tr>' . DOKU_LF;
+ }
+
+ function tableheader_open($colspan = 1, $align = NULL, $rowspan = 1){
+ $class = 'class="col' . $this->_counter['cell_counter']++;
+ if ( !is_null($align) ) {
+ $class .= ' '.$align.'align';
+ }
+ $class .= '"';
+ $this->doc .= '<th ' . $class;
+ if ( $colspan > 1 ) {
+ $this->_counter['cell_counter'] += $colspan-1;
+ $this->doc .= ' colspan="'.$colspan.'"';
+ }
+ if ( $rowspan > 1 ) {
+ $this->doc .= ' rowspan="'.$rowspan.'"';
+ }
+ $this->doc .= '>';
+ }
+
+ function tableheader_close(){
+ $this->doc .= '</th>';
+ }
+
+ function tablecell_open($colspan = 1, $align = NULL, $rowspan = 1){
+ $class = 'class="col' . $this->_counter['cell_counter']++;
+ if ( !is_null($align) ) {
+ $class .= ' '.$align.'align';
+ }
+ $class .= '"';
+ $this->doc .= '<td '.$class;
+ if ( $colspan > 1 ) {
+ $this->_counter['cell_counter'] += $colspan-1;
+ $this->doc .= ' colspan="'.$colspan.'"';
+ }
+ if ( $rowspan > 1 ) {
+ $this->doc .= ' rowspan="'.$rowspan.'"';
+ }
+ $this->doc .= '>';
+ }
+
+ function tablecell_close(){
+ $this->doc .= '</td>';
+ }
+
+ //----------------------------------------------------------
+ // Utils
+
+ /**
+ * Build a link
+ *
+ * Assembles all parts defined in $link returns HTML for the link
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _formatLink($link){
+ //make sure the url is XHTML compliant (skip mailto)
+ if(substr($link['url'],0,7) != 'mailto:'){
+ $link['url'] = str_replace('&','&amp;',$link['url']);
+ $link['url'] = str_replace('&amp;amp;','&amp;',$link['url']);
+ }
+ //remove double encodings in titles
+ $link['title'] = str_replace('&amp;amp;','&amp;',$link['title']);
+
+ // be sure there are no bad chars in url or title
+ // (we can't do this for name because it can contain an img tag)
+ $link['url'] = strtr($link['url'],array('>'=>'%3E','<'=>'%3C','"'=>'%22'));
+ $link['title'] = strtr($link['title'],array('>'=>'&gt;','<'=>'&lt;','"'=>'&quot;'));
+
+ $ret = '';
+ $ret .= $link['pre'];
+ $ret .= '<a href="'.$link['url'].'"';
+ if(!empty($link['class'])) $ret .= ' class="'.$link['class'].'"';
+ if(!empty($link['target'])) $ret .= ' target="'.$link['target'].'"';
+ if(!empty($link['title'])) $ret .= ' title="'.$link['title'].'"';
+ if(!empty($link['style'])) $ret .= ' style="'.$link['style'].'"';
+ if(!empty($link['rel'])) $ret .= ' rel="'.$link['rel'].'"';
+ if(!empty($link['more'])) $ret .= ' '.$link['more'];
+ $ret .= '>';
+ $ret .= $link['name'];
+ $ret .= '</a>';
+ $ret .= $link['suf'];
+ return $ret;
+ }
+
+ /**
+ * Renders internal and external media
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _media ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $render = true) {
+
+ $ret = '';
+
+ list($ext,$mime,$dl) = mimetype($src);
+ if(substr($mime,0,5) == 'image'){
+ // first get the $title
+ if (!is_null($title)) {
+ $title = $this->_xmlEntities($title);
+ }elseif($ext == 'jpg' || $ext == 'jpeg'){
+ //try to use the caption from IPTC/EXIF
+ require_once(DOKU_INC.'inc/JpegMeta.php');
+ $jpeg =& new JpegMeta(mediaFN($src));
+ if($jpeg !== false) $cap = $jpeg->getTitle();
+ if($cap){
+ $title = $this->_xmlEntities($cap);
+ }
+ }
+ if (!$render) {
+ // if the picture is not supposed to be rendered
+ // return the title of the picture
+ if (!$title) {
+ // just show the sourcename
+ $title = $this->_xmlEntities(basename(noNS($src)));
+ }
+ return $title;
+ }
+ //add image tag
+ $ret .= '<img src="'.ml($src,array('w'=>$width,'h'=>$height,'cache'=>$cache)).'"';
+ $ret .= ' class="media'.$align.'"';
+
+ // make left/right alignment for no-CSS view work (feeds)
+ if($align == 'right') $ret .= ' align="right"';
+ if($align == 'left') $ret .= ' align="left"';
+
+ if ($title) {
+ $ret .= ' title="' . $title . '"';
+ $ret .= ' alt="' . $title .'"';
+ }else{
+ $ret .= ' alt=""';
+ }
+
+ if ( !is_null($width) )
+ $ret .= ' width="'.$this->_xmlEntities($width).'"';
+
+ if ( !is_null($height) )
+ $ret .= ' height="'.$this->_xmlEntities($height).'"';
+
+ $ret .= ' />';
+
+ }elseif($mime == 'application/x-shockwave-flash'){
+ if (!$render) {
+ // if the flash is not supposed to be rendered
+ // return the title of the flash
+ if (!$title) {
+ // just show the sourcename
+ $title = basename(noNS($src));
+ }
+ return $this->_xmlEntities($title);
+ }
+
+ $att = array();
+ $att['class'] = "media$align";
+ if($align == 'right') $att['align'] = 'right';
+ if($align == 'left') $att['align'] = 'left';
+ $ret .= html_flashobject(ml($src,array('cache'=>$cache)),$width,$height,
+ array('quality' => 'high'),
+ null,
+ $att,
+ $this->_xmlEntities($title));
+ }elseif($title){
+ // well at least we have a title to display
+ $ret .= $this->_xmlEntities($title);
+ }else{
+ // just show the sourcename
+ $ret .= $this->_xmlEntities(basename(noNS($src)));
+ }
+
+ return $ret;
+ }
+
+ function _xmlEntities($string) {
+ return htmlspecialchars($string,ENT_QUOTES,'UTF-8');
+ }
+
+ /**
+ * Creates a linkid from a headline
+ *
+ * @param string $title The headline title
+ * @param boolean $create Create a new unique ID?
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _headerToLink($title,$create=false) {
+ if($create){
+ return sectionID($title,$this->headers);
+ }else{
+ $check = false;
+ return sectionID($title,$check);
+ }
+ }
+
+ /**
+ * Construct a title and handle images in titles
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+ function _getLinkTitle($title, $default, & $isImage, $id=NULL, $linktype='content') {
+ global $conf;
+
+ $isImage = false;
+ if ( is_array($title) ) {
+ $isImage = true;
+ return $this->_imageTitle($title);
+ } elseif ( is_null($title) || trim($title)=='') {
+ if (useHeading($linktype) && $id) {
+ $heading = p_get_first_heading($id,true);
+ if ($heading) {
+ return $this->_xmlEntities($heading);
+ }
+ }
+ return $this->_xmlEntities($default);
+ } else {
+ return $this->_xmlEntities($title);
+ }
+ }
+
+ /**
+ * Returns an HTML code for images used in link titles
+ *
+ * @todo Resolve namespace on internal images
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _imageTitle($img) {
+ global $ID;
+
+ // some fixes on $img['src']
+ // see internalmedia() and externalmedia()
+ list($img['src'],$hash) = explode('#',$img['src'],2);
+ if ($img['type'] == 'internalmedia') {
+ resolve_mediaid(getNS($ID),$img['src'],$exists);
+ }
+
+ return $this->_media($img['src'],
+ $img['title'],
+ $img['align'],
+ $img['width'],
+ $img['height'],
+ $img['cache']);
+ }
+
+ /**
+ * _getMediaLinkConf is a helperfunction to internalmedia() and externalmedia()
+ * which returns a basic link to a media.
+ *
+ * @author Pierre Spring <pierre.spring@liip.ch>
+ * @param string $src
+ * @param string $title
+ * @param string $align
+ * @param string $width
+ * @param string $height
+ * @param string $cache
+ * @param string $render
+ * @access protected
+ * @return array
+ */
+ function _getMediaLinkConf($src, $title, $align, $width, $height, $cache, $render)
+ {
+ global $conf;
+
+ $link = array();
+ $link['class'] = 'media';
+ $link['style'] = '';
+ $link['pre'] = '';
+ $link['suf'] = '';
+ $link['more'] = '';
+ $link['target'] = $conf['target']['media'];
+ $link['title'] = $this->_xmlEntities($src);
+ $link['name'] = $this->_media($src, $title, $align, $width, $height, $cache, $render);
+
+ return $link;
+ }
+
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php
new file mode 100644
index 000000000..b187fef01
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php
@@ -0,0 +1,90 @@
+<?php
+if(!defined('DOKU_INC')) die('meh.');
+require_once DOKU_INC . 'inc/parser/xhtml.php';
+
+/**
+ * The summary XHTML form selects either up to the first two paragraphs
+ * it find in a page or the first section (whichever comes first)
+ * It strips out the table of contents if one exists
+ * Section divs are not used - everything should be nested in a single
+ * div with CSS class "page"
+ * Headings have their a name link removed and section editing links
+ * removed
+ * It also attempts to capture the first heading in a page for
+ * use as the title of the page.
+ *
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @todo Is this currently used anywhere? Should it?
+ */
+class Doku_Renderer_xhtmlsummary extends Doku_Renderer_xhtml {
+
+ // Namespace these variables to
+ // avoid clashes with parent classes
+ var $sum_paragraphs = 0;
+ var $sum_capture = true;
+ var $sum_inSection = false;
+ var $sum_summary = '';
+ var $sum_pageTitle = false;
+
+ function document_start() {
+ $this->doc .= DOKU_LF.'<div>'.DOKU_LF;
+ }
+
+ function document_end() {
+ $this->doc = $this->sum_summary;
+ $this->doc .= DOKU_LF.'</div>'.DOKU_LF;
+ }
+
+ // FIXME not supported anymore
+ function toc_open() {
+ $this->sum_summary .= $this->doc;
+ }
+
+ // FIXME not supported anymore
+ function toc_close() {
+ $this->doc = '';
+ }
+
+ function header($text, $level, $pos) {
+ if ( !$this->sum_pageTitle ) {
+ $this->info['sum_pagetitle'] = $text;
+ $this->sum_pageTitle = true;
+ }
+ $this->doc .= DOKU_LF.'<h'.$level.'>';
+ $this->doc .= $this->_xmlEntities($text);
+ $this->doc .= "</h$level>".DOKU_LF;
+ }
+
+ function section_open($level) {
+ if ( $this->sum_capture ) {
+ $this->sum_inSection = true;
+ }
+ }
+
+ function section_close() {
+ if ( $this->sum_capture && $this->sum_inSection ) {
+ $this->sum_summary .= $this->doc;
+ $this->sum_capture = false;
+ }
+ }
+
+ function p_open() {
+ if ( $this->sum_capture && $this->sum_paragraphs < 2 ) {
+ $this->sum_paragraphs++;
+ }
+ parent :: p_open();
+ }
+
+ function p_close() {
+ parent :: p_close();
+ if ( $this->sum_capture && $this->sum_paragraphs >= 2 ) {
+ $this->sum_summary .= $this->doc;
+ $this->sum_capture = false;
+ }
+ }
+
+}
+
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php
new file mode 100644
index 000000000..e2dd85979
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php
@@ -0,0 +1,672 @@
+<?php
+/**
+ * Utilities for accessing the parser
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/confutils.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/pluginutils.php');
+require_once(DOKU_INC.'inc/cache.php');
+
+/**
+ * Returns the parsed Wikitext in XHTML for the given id and revision.
+ *
+ * If $excuse is true an explanation is returned if the file
+ * wasn't found
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_wiki_xhtml($id, $rev='', $excuse=true){
+ $file = wikiFN($id,$rev);
+ $ret = '';
+
+ //ensure $id is in global $ID (needed for parsing)
+ global $ID;
+ $keep = $ID;
+ $ID = $id;
+
+ if($rev){
+ if(@file_exists($file)){
+ $ret = p_render('xhtml',p_get_instructions(io_readWikiPage($file,$id,$rev)),$info); //no caching on old revisions
+ }elseif($excuse){
+ $ret = p_locale_xhtml('norev');
+ }
+ }else{
+ if(@file_exists($file)){
+ $ret = p_cached_output($file,'xhtml',$id);
+ }elseif($excuse){
+ $ret = p_locale_xhtml('newpage');
+ }
+ }
+
+ //restore ID (just in case)
+ $ID = $keep;
+
+ return $ret;
+}
+
+/**
+ * Returns starting summary for a page (e.g. the first few
+ * paragraphs), marked up in XHTML.
+ *
+ * If $excuse is true an explanation is returned if the file
+ * wasn't found
+ *
+ * @param string wiki page id
+ * @param reference populated with page title from heading or page id
+ * @deprecated
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+function p_wiki_xhtml_summary($id, &$title, $rev='', $excuse=true){
+ $file = wikiFN($id,$rev);
+ $ret = '';
+
+ //ensure $id is in global $ID (needed for parsing)
+ global $ID;
+ $keep = $ID;
+ $ID = $id;
+
+ if($rev){
+ if(@file_exists($file)){
+ //no caching on old revisions
+ $ins = p_get_instructions(io_readWikiPage($file,$id,$rev));
+ }elseif($excuse){
+ $ret = p_locale_xhtml('norev');
+ //restore ID (just in case)
+ $ID = $keep;
+ return $ret;
+ }
+
+ }else{
+
+ if(@file_exists($file)){
+ // The XHTML for a summary is not cached so use the instruction cache
+ $ins = p_cached_instructions($file);
+ }elseif($excuse){
+ $ret = p_locale_xhtml('newpage');
+ //restore ID (just in case)
+ $ID = $keep;
+ return $ret;
+ }
+ }
+
+ $ret = p_render('xhtmlsummary',$ins,$info);
+
+ if ( $info['sum_pagetitle'] ) {
+ $title = $info['sum_pagetitle'];
+ } else {
+ $title = $id;
+ }
+
+ $ID = $keep;
+ return $ret;
+}
+
+/**
+ * Returns the specified local text in parsed format
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_locale_xhtml($id){
+ //fetch parsed locale
+ $html = p_cached_output(localeFN($id));
+ return $html;
+}
+
+/**
+ * *** DEPRECATED ***
+ *
+ * use p_cached_output()
+ *
+ * Returns the given file parsed to XHTML
+ *
+ * Uses and creates a cachefile
+ *
+ * @deprecated
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @todo rewrite to use mode instead of hardcoded XHTML
+ */
+function p_cached_xhtml($file){
+ return p_cached_output($file);
+}
+
+/**
+ * Returns the given file parsed into the requested output format
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function p_cached_output($file, $format='xhtml', $id='') {
+ global $conf;
+
+ $cache = new cache_renderer($id, $file, $format);
+ if ($cache->useCache()) {
+ $parsed = $cache->retrieveCache(false);
+ if($conf['allowdebug'] && $format=='xhtml') $parsed .= "\n<!-- cachefile {$cache->cache} used -->\n";
+ } else {
+ $parsed = p_render($format, p_cached_instructions($file,false,$id), $info);
+
+ if ($info['cache']) {
+ $cache->storeCache($parsed); //save cachefile
+ if($conf['allowdebug'] && $format=='xhtml') $parsed .= "\n<!-- no cachefile used, but created {$cache->cache} -->\n";
+ }else{
+ $cache->removeCache(); //try to delete cachefile
+ if($conf['allowdebug'] && $format=='xhtml') $parsed .= "\n<!-- no cachefile used, caching forbidden -->\n";
+ }
+ }
+
+ return $parsed;
+}
+
+/**
+ * Returns the render instructions for a file
+ *
+ * Uses and creates a serialized cache file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_cached_instructions($file,$cacheonly=false,$id='') {
+ global $conf;
+ static $run = null;
+ if(is_null($run)) $run = array();
+
+ $cache = new cache_instructions($id, $file);
+
+ if ($cacheonly || $cache->useCache() || isset($run[$file])) {
+ return $cache->retrieveCache();
+ } else if (@file_exists($file)) {
+ // no cache - do some work
+ $ins = p_get_instructions(io_readWikiPage($file,$id));
+ if ($cache->storeCache($ins)) {
+ $run[$file] = true; // we won't rebuild these instructions in the same run again
+ } else {
+ msg('Unable to save cache file. Hint: disk full; file permissions; safe_mode setting.',-1);
+ }
+ return $ins;
+ }
+
+ return null;
+}
+
+/**
+ * turns a page into a list of instructions
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_get_instructions($text){
+
+ $modes = p_get_parsermodes();
+
+ // Create the parser
+ $Parser = & new Doku_Parser();
+
+ // Add the Handler
+ $Parser->Handler = & new Doku_Handler();
+
+ //add modes to parser
+ foreach($modes as $mode){
+ $Parser->addMode($mode['mode'],$mode['obj']);
+ }
+
+ // Do the parsing
+ trigger_event('PARSER_WIKITEXT_PREPROCESS', $text);
+ $p = $Parser->parse($text);
+ // dbg($p);
+ return $p;
+}
+
+/**
+ * returns the metadata of a page
+ *
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ */
+function p_get_metadata($id, $key=false, $render=false){
+ global $ID, $INFO, $cache_metadata;
+
+ // cache the current page
+ // Benchmarking shows the current page's metadata is generally the only page metadata
+ // accessed several times. This may catch a few other pages, but that shouldn't be an issue.
+ $cache = ($ID == $id);
+ $meta = p_read_metadata($id, $cache);
+
+ // metadata has never been rendered before - do it! (but not for non-existent pages)
+ if ($render && !isset($meta['current']['description']['abstract']) && page_exists($id)){
+ $meta = p_render_metadata($id, $meta);
+ io_saveFile(metaFN($id, '.meta'), serialize($meta));
+
+ // sync cached copies, including $INFO metadata
+ if (!empty($cache_metadata[$id])) $cache_metadata[$id] = $meta;
+ if (!empty($INFO) && ($id == $INFO['id'])) { $INFO['meta'] = $meta['current']; }
+ }
+
+ // filter by $key
+ if ($key){
+ list($key, $subkey) = explode(' ', $key, 2);
+ $subkey = trim($subkey);
+
+ if ($subkey) {
+ return isset($meta['current'][$key][$subkey]) ? $meta['current'][$key][$subkey] : null;
+ }
+
+ return isset($meta['current'][$key]) ? $meta['current'][$key] : null;
+ }
+
+ return $meta['current'];
+}
+
+/**
+ * sets metadata elements of a page
+ *
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ */
+function p_set_metadata($id, $data, $render=false, $persistent=true){
+ if (!is_array($data)) return false;
+
+ global $ID;
+
+ // cache the current page
+ $cache = ($ID == $id);
+ $orig = p_read_metadata($id, $cache);
+
+ // render metadata first?
+ $meta = $render ? p_render_metadata($id, $orig) : $orig;
+
+ // now add the passed metadata
+ $protected = array('description', 'date', 'contributor');
+ foreach ($data as $key => $value){
+
+ // be careful with sub-arrays of $meta['relation']
+ if ($key == 'relation'){
+
+ foreach ($value as $subkey => $subvalue){
+ $meta['current'][$key][$subkey] = !empty($meta['current'][$key][$subkey]) ? array_merge($meta['current'][$key][$subkey], $subvalue) : $subvalue;
+ if ($persistent)
+ $meta['persistent'][$key][$subkey] = !empty($meta['persistent'][$key][$subkey]) ? array_merge($meta['persistent'][$key][$subkey], $subvalue) : $subvalue;
+ }
+
+ // be careful with some senisitive arrays of $meta
+ } elseif (in_array($key, $protected)){
+
+ // these keys, must have subkeys - a legitimate value must be an array
+ if (is_array($value)) {
+ $meta['current'][$key] = !empty($meta['current'][$key]) ? array_merge($meta['current'][$key],$value) : $value;
+
+ if ($persistent) {
+ $meta['persistent'][$key] = !empty($meta['persistent'][$key]) ? array_merge($meta['persistent'][$key],$value) : $value;
+ }
+ }
+
+ // no special treatment for the rest
+ } else {
+ $meta['current'][$key] = $value;
+ if ($persistent) $meta['persistent'][$key] = $value;
+ }
+ }
+
+ // save only if metadata changed
+ if ($meta == $orig) return true;
+
+ // sync cached copies, including $INFO metadata
+ global $cache_metadata, $INFO;
+
+ if (!empty($cache_metadata[$id])) $cache_metadata[$id] = $meta;
+ if (!empty($INFO) && ($id == $INFO['id'])) { $INFO['meta'] = $meta['current']; }
+
+ return io_saveFile(metaFN($id, '.meta'), serialize($meta));
+}
+
+/**
+ * Purges the non-persistant part of the meta data
+ * used on page deletion
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function p_purge_metadata($id) {
+ $metafn = metaFN('id', '.meta');
+ $meta = p_read_metadata($id);
+ foreach($meta['current'] as $key => $value) {
+ if(is_array($meta[$key])) {
+ $meta['current'][$key] = array();
+ } else {
+ $meta['current'][$key] = '';
+ }
+ }
+ return io_saveFile(metaFN($id, '.meta'), serialize($meta));
+}
+
+/**
+ * read the metadata from source/cache for $id
+ * (internal use only - called by p_get_metadata & p_set_metadata)
+ *
+ * this function also converts the metadata from the original format to
+ * the current format ('current' & 'persistent' arrays)
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ *
+ * @param string $id absolute wiki page id
+ * @param bool $cache whether or not to cache metadata in memory
+ * (only use for metadata likely to be accessed several times)
+ *
+ * @return array metadata
+ */
+function p_read_metadata($id,$cache=false) {
+ global $cache_metadata;
+
+ if (isset($cache_metadata[(string)$id])) return $cache_metadata[(string)$id];
+
+ $file = metaFN($id, '.meta');
+ $meta = @file_exists($file) ? unserialize(io_readFile($file, false)) : array('current'=>array(),'persistent'=>array());
+
+ // convert $meta from old format to new (current+persistent) format
+ if (!isset($meta['current'])) {
+ $meta = array('current'=>$meta,'persistent'=>$meta);
+
+ // remove non-persistent keys
+ unset($meta['persistent']['title']);
+ unset($meta['persistent']['description']['abstract']);
+ unset($meta['persistent']['description']['tableofcontents']);
+ unset($meta['persistent']['relation']['haspart']);
+ unset($meta['persistent']['relation']['references']);
+ unset($meta['persistent']['date']['valid']);
+
+ if (empty($meta['persistent']['description'])) unset($meta['persistent']['description']);
+ if (empty($meta['persistent']['relation'])) unset($meta['persistent']['relation']);
+ if (empty($meta['persistent']['date'])) unset($meta['persistent']['date']);
+
+ // save converted metadata
+ io_saveFile($file, serialize($meta));
+ }
+
+ if ($cache) {
+ $cache_metadata[(string)$id] = $meta;
+ }
+
+ return $meta;
+}
+
+/**
+ * renders the metadata of a page
+ *
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ */
+function p_render_metadata($id, $orig){
+ // make sure the correct ID is in global ID
+ global $ID;
+ $keep = $ID;
+ $ID = $id;
+
+ // add an extra key for the event - to tell event handlers the page whose metadata this is
+ $orig['page'] = $id;
+ $evt = new Doku_Event('PARSER_METADATA_RENDER', $orig);
+ if ($evt->advise_before()) {
+
+ require_once DOKU_INC."inc/parser/metadata.php";
+
+ // get instructions
+ $instructions = p_cached_instructions(wikiFN($id),false,$id);
+ if(is_null($instructions)){
+ $ID = $keep;
+ return null; // something went wrong with the instructions
+ }
+
+ // set up the renderer
+ $renderer = & new Doku_Renderer_metadata();
+ $renderer->meta = $orig['current'];
+ $renderer->persistent = $orig['persistent'];
+
+ // loop through the instructions
+ foreach ($instructions as $instruction){
+ // execute the callback against the renderer
+ call_user_func_array(array(&$renderer, $instruction[0]), $instruction[1]);
+ }
+
+ $evt->result = array('current'=>$renderer->meta,'persistent'=>$renderer->persistent);
+ }
+ $evt->advise_after();
+
+ $ID = $keep;
+ return $evt->result;
+}
+
+/**
+ * returns all available parser syntax modes in correct order
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_get_parsermodes(){
+ global $conf;
+
+ //reuse old data
+ static $modes = null;
+ if($modes != null){
+ return $modes;
+ }
+
+ //import parser classes and mode definitions
+ require_once DOKU_INC . 'inc/parser/parser.php';
+
+ // we now collect all syntax modes and their objects, then they will
+ // be sorted and added to the parser in correct order
+ $modes = array();
+
+ // add syntax plugins
+ $pluginlist = plugin_list('syntax');
+ if(count($pluginlist)){
+ global $PARSER_MODES;
+ $obj = null;
+ foreach($pluginlist as $p){
+ if(!$obj =& plugin_load('syntax',$p)) continue; //attempt to load plugin into $obj
+ $PARSER_MODES[$obj->getType()][] = "plugin_$p"; //register mode type
+ //add to modes
+ $modes[] = array(
+ 'sort' => $obj->getSort(),
+ 'mode' => "plugin_$p",
+ 'obj' => $obj,
+ );
+ unset($obj); //remove the reference
+ }
+ }
+
+ // add default modes
+ $std_modes = array('listblock','preformatted','notoc','nocache',
+ 'header','table','linebreak','footnote','hr',
+ 'unformatted','php','html','code','file','quote',
+ 'internallink','rss','media','externallink',
+ 'emaillink','windowssharelink','eol');
+ if($conf['typography']){
+ $std_modes[] = 'quotes';
+ $std_modes[] = 'multiplyentity';
+ }
+ foreach($std_modes as $m){
+ $class = "Doku_Parser_Mode_$m";
+ $obj = new $class();
+ $modes[] = array(
+ 'sort' => $obj->getSort(),
+ 'mode' => $m,
+ 'obj' => $obj
+ );
+ }
+
+ // add formatting modes
+ $fmt_modes = array('strong','emphasis','underline','monospace',
+ 'subscript','superscript','deleted');
+ foreach($fmt_modes as $m){
+ $obj = new Doku_Parser_Mode_formatting($m);
+ $modes[] = array(
+ 'sort' => $obj->getSort(),
+ 'mode' => $m,
+ 'obj' => $obj
+ );
+ }
+
+ // add modes which need files
+ $obj = new Doku_Parser_Mode_smiley(array_keys(getSmileys()));
+ $modes[] = array('sort' => $obj->getSort(), 'mode' => 'smiley','obj' => $obj );
+ $obj = new Doku_Parser_Mode_acronym(array_keys(getAcronyms()));
+ $modes[] = array('sort' => $obj->getSort(), 'mode' => 'acronym','obj' => $obj );
+ $obj = new Doku_Parser_Mode_entity(array_keys(getEntities()));
+ $modes[] = array('sort' => $obj->getSort(), 'mode' => 'entity','obj' => $obj );
+
+ // add optional camelcase mode
+ if($conf['camelcase']){
+ $obj = new Doku_Parser_Mode_camelcaselink();
+ $modes[] = array('sort' => $obj->getSort(), 'mode' => 'camelcaselink','obj' => $obj );
+ }
+
+ //sort modes
+ usort($modes,'p_sort_modes');
+
+ return $modes;
+}
+
+/**
+ * Callback function for usort
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_sort_modes($a, $b){
+ if($a['sort'] == $b['sort']) return 0;
+ return ($a['sort'] < $b['sort']) ? -1 : 1;
+}
+
+/**
+ * Renders a list of instruction to the specified output mode
+ *
+ * In the $info array are informations from the renderer returned
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_render($mode,$instructions,&$info){
+ if(is_null($instructions)) return '';
+
+ $Renderer =& p_get_renderer($mode);
+ if (is_null($Renderer)) return null;
+
+ $Renderer->reset();
+
+ $Renderer->smileys = getSmileys();
+ $Renderer->entities = getEntities();
+ $Renderer->acronyms = getAcronyms();
+ $Renderer->interwiki = getInterwiki();
+
+ // Loop through the instructions
+ foreach ( $instructions as $instruction ) {
+ // Execute the callback against the Renderer
+ call_user_func_array(array(&$Renderer, $instruction[0]),$instruction[1]);
+ }
+
+ //set info array
+ $info = $Renderer->info;
+
+ // Post process and return the output
+ $data = array($mode,& $Renderer->doc);
+ trigger_event('RENDERER_CONTENT_POSTPROCESS',$data);
+ return $Renderer->doc;
+}
+
+function & p_get_renderer($mode) {
+ global $conf, $plugin_controller;
+
+ $rname = !empty($conf['renderer_'.$mode]) ? $conf['renderer_'.$mode] : $mode;
+
+ // try default renderer first:
+ $file = DOKU_INC."inc/parser/$rname.php";
+ if(@file_exists($file)){
+ require_once $file;
+ $rclass = "Doku_Renderer_$rname";
+
+ if ( !class_exists($rclass) ) {
+ trigger_error("Unable to resolve render class $rclass",E_USER_WARNING);
+ msg("Renderer '$rname' for $mode not valid",-1);
+ return null;
+ }
+ $Renderer = & new $rclass();
+ }else{
+ // Maybe a plugin/component is available?
+ list($plugin, $component) = $plugin_controller->_splitName($rname);
+ if (!$plugin_controller->isdisabled($plugin)){
+ $Renderer =& $plugin_controller->load('renderer',$rname, true);
+ }
+
+ if(is_null($Renderer)){
+ msg("No renderer '$rname' found for mode '$mode'",-1);
+ return null;
+ }
+ }
+
+ return $Renderer;
+}
+
+/**
+ * Gets the first heading from a file
+ *
+ * @param string $id dokuwiki page id
+ * @param bool $render rerender if first heading not known
+ * default: true -- must be set to false for calls from the metadata renderer to
+ * protects against loops and excessive resource usage when pages
+ * for which only a first heading is required will attempt to
+ * render metadata for all the pages for which they require first
+ * headings ... and so on.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_get_first_heading($id, $render=true){
+ return p_get_metadata($id,'title',$render);
+}
+
+/**
+ * Wrapper for GeSHi Code Highlighter, provides caching of its output
+ *
+ * @param string $code source code to be highlighted
+ * @param string $language language to provide highlighting
+ * @param string $wrapper html element to wrap the returned highlighted text
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function p_xhtml_cached_geshi($code, $language, $wrapper='pre') {
+ global $conf, $config_cascade;
+ $language = strtolower($language);
+
+ // remove any leading or trailing blank lines
+ $code = preg_replace('/^\s*?\n|\s*?\n$/','',$code);
+
+ $cache = getCacheName($language.$code,".code");
+ $ctime = @filemtime($cache);
+ if($ctime && !$_REQUEST['purge'] &&
+ $ctime > filemtime(DOKU_INC.'inc/geshi.php') && // geshi changed
+ $ctime > @filemtime(DOKU_INC.'inc/geshi/'.$language.'.php') && // language syntax definition changed
+ $ctime > filemtime(reset($config_cascade['main']['default']))){ // dokuwiki changed
+ $highlighted_code = io_readFile($cache, false);
+
+ } else {
+
+ require_once(DOKU_INC . 'inc/geshi.php');
+
+ $geshi = new GeSHi($code, $language, DOKU_INC . 'inc/geshi');
+ $geshi->set_encoding('utf-8');
+ $geshi->enable_classes();
+ $geshi->set_header_type(GESHI_HEADER_PRE);
+ $geshi->set_link_target($conf['target']['extern']);
+
+ // remove GeSHi's wrapper element (we'll replace it with our own later)
+ // we need to use a GeSHi wrapper to avoid <BR> throughout the highlighted text
+ $highlighted_code = trim(preg_replace('!^<pre[^>]*>|</pre>$!','',$geshi->parse_code()),"\n\r");
+ io_saveFile($cache,$highlighted_code);
+ }
+
+ // add a wrapper element if required
+ if ($wrapper) {
+ return "<$wrapper class=\"code $language\">$highlighted_code</$wrapper>";
+ } else {
+ return $highlighted_code;
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/plugin.php b/mod/dokuwiki/vendors/dokuwiki/inc/plugin.php
new file mode 100644
index 000000000..364534739
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/plugin.php
@@ -0,0 +1,248 @@
+<?php
+/**
+ * DokuWiki Plugin base class
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+/**
+ * Do not inherit directly from this class, instead inherit from the specialized
+ * ones in lib/plugin
+ */
+class DokuWiki_Plugin {
+
+ var $localised = false; // set to true by setupLocale() after loading language dependent strings
+ var $lang = array(); // array to hold language dependent strings, best accessed via ->getLang()
+ var $configloaded = false; // set to true by loadConfig() after loading plugin configuration variables
+ var $conf = array(); // array to hold plugin settings, best accessed via ->getConf()
+
+ /**
+ * General Info
+ *
+ * Needs to return a associative array with the following values:
+ *
+ * author - Author of the plugin
+ * email - Email address to contact the author
+ * date - Last modified date of the plugin in YYYY-MM-DD format
+ * name - Name of the plugin
+ * desc - Short description of the plugin (Text only)
+ * url - Website with more information on the plugin (eg. syntax description)
+ */
+ function getInfo(){
+ $parts = explode('_',get_class($this));
+ $info = DOKU_PLUGIN.'/'.$parts[2].'/plugin.info.txt';
+ if(@file_exists($info)) return confToHash($info);
+ trigger_error('getInfo() not implemented in '.get_class($this).' and '.$info.' not found', E_USER_WARNING);
+ }
+
+ // plugin introspection methods
+ // extract from class name, format = <plugin type>_plugin_<name>[_<component name>]
+ function getPluginType() {
+ list($t) = explode('_', get_class($this), 2);
+ return $t;
+ }
+ function getPluginName() {
+ list($t, $p, $n) = explode('_', get_class($this), 4);
+ return $n;
+ }
+ function getPluginComponent() {
+ list($t, $p, $n, $c) = explode('_', get_class($this), 4);
+ return (isset($c)?$c:'');
+ }
+
+ // localisation methods
+ /**
+ * getLang($id)
+ * use this function to access plugin language strings
+ * to try to minimise unnecessary loading of the strings when the plugin doesn't require them
+ * e.g. when info plugin is querying plugins for information about themselves.
+ *
+ * @param $id id of the string to be retrieved
+ * @return string string in appropriate language or english if not available
+ */
+ function getLang($id) {
+ if (!$this->localised) $this->setupLocale();
+
+ return (isset($this->lang[$id]) ? $this->lang[$id] : '');
+ }
+
+ /**
+ * locale_xhtml($id)
+ *
+ * retrieve a language dependent file and pass to xhtml renderer for display
+ * plugin equivalent of p_locale_xhtml()
+ *
+ * @param $id id of language dependent wiki page
+ * @return string parsed contents of the wiki page in xhtml format
+ */
+ function locale_xhtml($id) {
+ return p_cached_output($this->localFN($id));
+ }
+
+ /**
+ * localFN($id)
+ * prepends appropriate path for a language dependent filename
+ * plugin equivalent of localFN()
+ */
+ function localFN($id) {
+ global $conf;
+ $plugin = $this->getPluginName();
+ $file = DOKU_PLUGIN.$plugin.'/lang/'.$conf['lang'].'/'.$id.'.txt';
+ if(!@file_exists($file)){
+ //fall back to english
+ $file = DOKU_PLUGIN.$plugin.'/lang/en/'.$id.'.txt';
+ }
+ return $file;
+ }
+
+ /**
+ * setupLocale()
+ * reads all the plugins language dependent strings into $this->lang
+ * this function is automatically called by getLang()
+ */
+ function setupLocale() {
+ if ($this->localised) return;
+
+ global $conf; // definitely don't invoke "global $lang"
+ $path = DOKU_PLUGIN.$this->getPluginName().'/lang/';
+
+ $lang = array();
+
+ // don't include once, in case several plugin components require the same language file
+ @include($path.'en/lang.php');
+ if ($conf['lang'] != 'en') @include($path.$conf['lang'].'/lang.php');
+
+ $this->lang = $lang;
+ $this->localised = true;
+ }
+
+ // configuration methods
+ /**
+ * getConf($setting)
+ *
+ * use this function to access plugin configuration variables
+ */
+ function getConf($setting){
+
+ if (!$this->configloaded){ $this->loadConfig(); }
+
+ return $this->conf[$setting];
+ }
+
+ /**
+ * loadConfig()
+ * merges the plugin's default settings with any local settings
+ * this function is automatically called through getConf()
+ */
+ function loadConfig(){
+ global $conf;
+
+ $defaults = $this->readDefaultSettings();
+ $plugin = $this->getPluginName();
+
+ foreach ($defaults as $key => $value) {
+ if (isset($conf['plugin'][$plugin][$key])) continue;
+ $conf['plugin'][$plugin][$key] = $value;
+ }
+
+ $this->configloaded = true;
+ $this->conf =& $conf['plugin'][$plugin];
+ }
+
+ /**
+ * read the plugin's default configuration settings from conf/default.php
+ * this function is automatically called through getConf()
+ *
+ * @return array setting => value
+ */
+ function readDefaultSettings() {
+
+ $path = DOKU_PLUGIN.$this->getPluginName().'/conf/';
+ $conf = array();
+
+ if (@file_exists($path.'default.php')) {
+ include($path.'default.php');
+ }
+
+ return $conf;
+ }
+
+ /**
+ * Loads a given helper plugin (if enabled)
+ *
+ * @author Esther Brunner <wikidesign@gmail.com>
+ *
+ * @param $name name of plugin to load
+ * @param $msg message to display in case the plugin is not available
+ *
+ * @return object helper plugin object
+ */
+ function loadHelper($name, $msg){
+ if (!plugin_isdisabled($name)){
+ $obj =& plugin_load('helper',$name);
+ }else{
+ $obj = null;
+ }
+ if (is_null($obj) && $msg) msg("Helper plugin $name is not available or invalid.",-1);
+ return $obj;
+ }
+
+ // standard functions for outputing email addresses and links
+ // use these to avoid having to duplicate code to produce links in line with the installation configuration
+
+ /**
+ * email
+ * standardised function to generate an email link according to obfuscation settings
+ */
+ function email($email, $name='', $class='', $more='') {
+ if (!$email) return $name;
+ $email = obfuscate($email);
+ if (!$name) $name = $email;
+ $class = "class='".($class ? $class : 'mail')."'";
+ return "<a href='mailto:$email' $class title='$email' $more>$name</a>";
+ }
+
+ /**
+ * external_link
+ * standardised function to generate an external link according to conf settings
+ */
+ function external_link($link, $title='', $class='', $target='', $more='') {
+ global $conf;
+
+ $link = htmlentities($link);
+ if (!$title) $title = $link;
+ if (!$target) $target = $conf['target']['extern'];
+ if ($conf['relnofollow']) $more .= ' rel="nofollow"';
+
+ if ($class) $class = " class='$class'";
+ if ($target) $target = " target='$target'";
+ if ($more) $more = " ".trim($more);
+
+ return "<a href='$link'$class$target$more>$title</a>";
+ }
+
+ /**
+ * output text string through the parser, allows dokuwiki markup to be used
+ * very ineffecient for small pieces of data - try not to use
+ */
+ function render($text, $format='xhtml') {
+ return p_render($format, p_get_instructions($text),$info);
+ }
+
+ /**
+ * Allow the plugin to prevent DokuWiki creating a second instance of itself
+ *
+ * @return bool true if the plugin can not be instantiated more than once
+ */
+ function isSingleton() {
+ return false;
+ }
+
+ // deprecated functions
+ function plugin_localFN($id) { return $this->localFN($id); }
+ function plugin_locale_xhtml($id) { return $this->locale_xhtml($id); }
+ function plugin_email($e, $n='', $c='', $m='') { return $this->email($e, $n, $c, $m); }
+ function plugin_link($l, $t='', $c='', $to='', $m='') { return $this->external_link($l, $t, $c, $to, $m); }
+ function plugin_render($t, $f='xhtml') { return $this->render($t, $f); }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php
new file mode 100644
index 000000000..4400a4187
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php
@@ -0,0 +1,172 @@
+<?php
+/**
+ * Class to encapsulate access to dokuwiki plugins
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+// plugin related constants
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+
+class Doku_Plugin_Controller {
+
+ var $list_enabled = array();
+ var $list_disabled = array();
+ var $list_bytype = array();
+
+ function Doku_Plugin_Controller() {
+ $this->_populateMasterList();
+ }
+
+ /**
+ * Returns a list of available plugins of given type
+ *
+ * @param $type string, plugin_type name;
+ * the type of plugin to return,
+ * use empty string for all types
+ * @param $all bool;
+ * false to only return enabled plugins,
+ * true to return both enabled and disabled plugins
+ *
+ * @return array of plugin names
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function getList($type='',$all=false){
+
+ // request the complete list
+ if (!$type) {
+ return $all ? array_merge($this->list_enabled,$this->list_disabled) : $this->list_enabled;
+ }
+
+ if (!isset($this->list_bytype[$type]['enabled'])) {
+ $this->list_bytype[$type]['enabled'] = $this->_getListByType($type,true);
+ }
+ if ($all && !isset($this->list_bytype[$type]['disabled'])) {
+ $this->list_bytype[$type]['disabled'] = $this->_getListByType($type,false);
+ }
+
+ return $all ? array_merge($this->list_bytype[$type]['enabled'],$this->list_bytype[$type]['disabled']) : $this->list_bytype[$type]['enabled'];
+ }
+
+ /**
+ * Loads the given plugin and creates an object of it
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param $type string type of plugin to load
+ * @param $name string name of the plugin to load
+ * @param $new bool true to return a new instance of the plugin, false to use an already loaded instance
+ * @return objectreference the plugin object or null on failure
+ */
+ function &load($type,$name,$new=false){
+ //we keep all loaded plugins available in global scope for reuse
+ global $DOKU_PLUGINS;
+
+ //plugin already loaded?
+ if(!empty($DOKU_PLUGINS[$type][$name])){
+ if ($new && !$DOKU_PLUGINS[$type][$name]->isSingleton()) {
+ $class = $type.'_plugin_'.$name;
+ return class_exists($class) ? new $class : null;
+ } else {
+ return $DOKU_PLUGINS[$type][$name];
+ }
+ }
+
+ //try to load the wanted plugin file
+ list($plugin,$component) = $this->_splitName($name);
+ $dir = $this->get_directory($plugin);
+ $file = $component ? "$type/$component.php" : "$type.php";
+
+ if(!is_file(DOKU_PLUGIN."$dir/$file")){
+ return null;
+ }
+
+ if (!include_once(DOKU_PLUGIN."$dir/$file")) {
+ return null;
+ }
+
+ //construct class and instantiate
+ $class = $type.'_plugin_'.$name;
+ if (!class_exists($class)) return null;
+
+ $DOKU_PLUGINS[$type][$name] = new $class;
+ return $DOKU_PLUGINS[$type][$name];
+ }
+
+ function isdisabled($plugin) {
+ return (array_search($plugin, $this->list_enabled) === false);
+ }
+
+ function enable($plugin) {
+ if (array_search($plugin, $this->list_disabled) !== false) {
+ return @unlink(DOKU_PLUGIN.$plugin.'/disabled');
+ }
+ return false;
+ }
+
+ function disable($plugin) {
+ if (array_search($plugin, $this->list_enabled) !== false) {
+ return @touch(DOKU_PLUGIN.$plugin.'/disabled');
+ }
+ return false;
+ }
+
+ function get_directory($plugin) {
+ return $plugin;
+ }
+
+ function _populateMasterList() {
+ if ($dh = opendir(DOKU_PLUGIN)) {
+ while (false !== ($plugin = readdir($dh))) {
+ if ($plugin == '.' || $plugin == '..' || $plugin == 'tmp') continue;
+ if (is_file(DOKU_PLUGIN.$plugin)) continue;
+
+ if (substr($plugin,-9) == '.disabled') {
+ // the plugin was disabled by rc2009-01-26
+ // disabling mechanism was changed back very soon again
+ // to keep everything simple we just skip the plugin completely
+ }elseif(@file_exists(DOKU_PLUGIN.$plugin.'/disabled')){
+ $this->list_disabled[] = $plugin;
+ } else {
+ $this->list_enabled[] = $plugin;
+ }
+ }
+ }
+ }
+
+ function _getListByType($type, $enabled) {
+ $master_list = $enabled ? $this->list_enabled : $this->list_disabled;
+
+ $plugins = array();
+ foreach ($master_list as $plugin) {
+ $dir = $this->get_directory($plugin);
+
+ if (@file_exists(DOKU_PLUGIN."$dir/$type.php")){
+ $plugins[] = $plugin;
+ } else {
+ if ($dp = @opendir(DOKU_PLUGIN."$dir/$type/")) {
+ while (false !== ($component = readdir($dp))) {
+ if (substr($component,0,1) == '.' || strtolower(substr($component, -4)) != ".php") continue;
+ if (is_file(DOKU_PLUGIN."$dir/$type/$component")) {
+ $plugins[] = $plugin.'_'.substr($component, 0, -4);
+ }
+ }
+ closedir($dp);
+ }
+ }
+ }
+
+ return $plugins;
+ }
+
+ function _splitName($name) {
+ if (array_search($name, $this->list_enabled + $this->list_disabled) === false) {
+ return explode('_',$name,2);
+ }
+
+ return array($name,'');
+ }
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php
new file mode 100644
index 000000000..8294d1ec8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Utilities for handling plugins
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// plugin related constants
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/plugincontroller.class.php');
+
+$plugin_types = array('admin','syntax','action','renderer', 'helper');
+
+global $plugin_controller_class, $plugin_controller;
+if (empty($plugin_controller_class)) $plugin_controller_class = 'Doku_Plugin_Controller';
+
+$plugin_controller = new $plugin_controller_class();
+
+/**
+ * Original plugin functions, remain for backwards compatibility
+ */
+function plugin_list($type='',$all=false) {
+ global $plugin_controller;
+ return $plugin_controller->getList($type,$all);
+}
+function &plugin_load($type,$name,$new=false) {
+ global $plugin_controller;
+ return $plugin_controller->load($type,$name,$new);
+}
+function plugin_isdisabled($plugin) {
+ global $plugin_controller;
+ return $plugin_controller->isdisabled($plugin);
+}
+function plugin_enable($plugin) {
+ global $plugin_controller;
+ return $plugin_controller->enable($plugin);
+}
+function plugin_disable($plugin) {
+ global $plugin_controller;
+ return $plugin_controller->disable($plugin);
+}
+function plugin_directory($plugin) {
+ global $plugin_controller;
+ return $plugin_controller->get_directory($plugin);
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/search.php b/mod/dokuwiki/vendors/dokuwiki/inc/search.php
new file mode 100644
index 000000000..2b9a51fb3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/search.php
@@ -0,0 +1,630 @@
+<?php
+/**
+ * DokuWiki search functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/common.php');
+
+/**
+ * recurse direcory
+ *
+ * This function recurses into a given base directory
+ * and calls the supplied function for each file and directory
+ *
+ * @param array ref $data The results of the search are stored here
+ * @param string $base Where to start the search
+ * @param callback $func Callback (function name or arayy with object,method)
+ * @param string $dir Current directory beyond $base
+ * @param int $lvl Recursion Level
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search(&$data,$base,$func,$opts,$dir='',$lvl=1){
+ $dirs = array();
+ $files = array();
+
+ //read in directories and files
+ $dh = @opendir($base.'/'.$dir);
+ if(!$dh) return;
+ while(($file = readdir($dh)) !== false){
+ if(preg_match('/^[\._]/',$file)) continue; //skip hidden files and upper dirs
+ if(is_dir($base.'/'.$dir.'/'.$file)){
+ $dirs[] = $dir.'/'.$file;
+ continue;
+ }
+ $files[] = $dir.'/'.$file;
+ }
+ closedir($dh);
+ sort($files);
+ sort($dirs);
+
+ //give directories to userfunction then recurse
+ foreach($dirs as $dir){
+ if (call_user_func_array($func, array(&$data,$base,$dir,'d',$lvl,$opts))){
+ search($data,$base,$func,$opts,$dir,$lvl+1);
+ }
+ }
+ //now handle the files
+ foreach($files as $file){
+ call_user_func_array($func, array(&$data,$base,$file,'f',$lvl,$opts));
+ }
+}
+
+/**
+ * Wrapper around call_user_func_array.
+ *
+ * @deprecated
+ */
+function search_callback($func,&$data,$base,$file,$type,$lvl,$opts){
+ return call_user_func_array($func, array(&$data,$base,$file,$type,$lvl,$opts));
+}
+
+/**
+ * The following functions are userfunctions to use with the search
+ * function above. This function is called for every found file or
+ * directory. When a directory is given to the function it has to
+ * decide if this directory should be traversed (true) or not (false)
+ * The function has to accept the following parameters:
+ *
+ * &$data - Reference to the result data structure
+ * $base - Base usually $conf['datadir']
+ * $file - current file or directory relative to $base
+ * $type - Type either 'd' for directory or 'f' for file
+ * $lvl - Current recursion depht
+ * $opts - option array as given to search()
+ *
+ * return values for files are ignored
+ *
+ * All functions should check the ACL for document READ rights
+ * namespaces (directories) are NOT checked as this would break
+ * the recursion (You can have an nonreadable dir over a readable
+ * one deeper nested) also make sure to check the file type (for example
+ * in case of lockfiles).
+ */
+
+/**
+ * Searches for pages beginning with the given query
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_qsearch(&$data,$base,$file,$type,$lvl,$opts){
+ $opts = array(
+ 'idmatch' => '(^|:)'.preg_quote($opts['query'],'/').'/',
+ 'listfiles' => true,
+ 'pagesonly' => true,
+ );
+ return search_universal($data,$base,$file,$type,$lvl,$opts);
+}
+
+/**
+ * Build the browsable index of pages
+ *
+ * $opts['ns'] is the current namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_index(&$data,$base,$file,$type,$lvl,$opts){
+ global $conf;
+ $return = true;
+
+ $item = array();
+
+ if($type == 'd' && !preg_match('#^'.$file.'(/|$)#','/'.$opts['ns'])){
+ //add but don't recurse
+ $return = false;
+ }elseif($type == 'f' && ($opts['nofiles'] || substr($file,-4) != '.txt')){
+ //don't add
+ return false;
+ }
+
+ $id = pathID($file);
+
+ if($type=='d' && $conf['sneaky_index'] && auth_quickaclcheck($id.':') < AUTH_READ){
+ return false;
+ }
+
+ //check hidden
+ if(isHiddenPage($id)){
+ return false;
+ }
+
+ //check ACL
+ if($type=='f' && auth_quickaclcheck($id) < AUTH_READ){
+ return false;
+ }
+
+ $data[]=array( 'id' => $id,
+ 'type' => $type,
+ 'level' => $lvl,
+ 'open' => $return );
+ return $return;
+}
+
+/**
+ * List all namespaces
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_namespaces(&$data,$base,$file,$type,$lvl,$opts){
+ $opts = array(
+ 'listdirs' => true,
+ );
+ return search_universal($data,$base,$file,$type,$lvl,$opts);
+}
+
+/**
+ * List all mediafiles in a namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_media(&$data,$base,$file,$type,$lvl,$opts){
+
+ //we do nothing with directories
+ if($type == 'd') {
+ if(!$opts['depth']) return true; // recurse forever
+ $depth = substr_count($file,'/');
+ if($depth >= $opts['depth']) return false; // depth reached
+ return true;
+ }
+
+ $info = array();
+ $info['id'] = pathID($file,true);
+ if($info['id'] != cleanID($info['id'])){
+ if($opts['showmsg'])
+ msg(hsc($info['id']).' is not a valid file name for DokuWiki - skipped',-1);
+ return false; // skip non-valid files
+ }
+
+ //check ACL for namespace (we have no ACL for mediafiles)
+ $info['perm'] = auth_quickaclcheck(getNS($info['id']).':*');
+ if(!$opts['skipacl'] && $info['perm'] < AUTH_READ){
+ return false;
+ }
+
+ //check pattern filter
+ if($opts['pattern'] && !@preg_match($opts['pattern'], $info['id'])){
+ return false;
+ }
+
+ $info['file'] = basename($file);
+ $info['size'] = filesize($base.'/'.$file);
+ $info['mtime'] = filemtime($base.'/'.$file);
+ $info['writable'] = is_writable($base.'/'.$file);
+ if(preg_match("/\.(jpe?g|gif|png)$/",$file)){
+ $info['isimg'] = true;
+ require_once(DOKU_INC.'inc/JpegMeta.php');
+ $info['meta'] = new JpegMeta($base.'/'.$file);
+ }else{
+ $info['isimg'] = false;
+ }
+ if($opts['hash']){
+ $info['hash'] = md5(io_readFile(wikiFN($info['id']),false));
+ }
+
+ $data[] = $info;
+
+ return false;
+}
+
+/**
+ * This function just lists documents (for RSS namespace export)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_list(&$data,$base,$file,$type,$lvl,$opts){
+ //we do nothing with directories
+ if($type == 'd') return false;
+ //only search txt files
+ if(substr($file,-4) == '.txt'){
+ //check ACL
+ $id = pathID($file);
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return false;
+ }
+ $data[]['id'] = $id;
+ }
+ return false;
+}
+
+/**
+ * Quicksearch for searching matching pagenames
+ *
+ * $opts['query'] is the search query
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_pagename(&$data,$base,$file,$type,$lvl,$opts){
+ //we do nothing with directories
+ if($type == 'd') return true;
+ //only search txt files
+ if(substr($file,-4) != '.txt') return true;
+
+ //simple stringmatching
+ if (!empty($opts['query'])){
+ if(strpos($file,$opts['query']) !== false){
+ //check ACL
+ $id = pathID($file);
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return false;
+ }
+ $data[]['id'] = $id;
+ }
+ }
+ return true;
+}
+
+/**
+ * Just lists all documents
+ *
+ * $opts['depth'] recursion level, 0 for all
+ * $opts['hash'] do md5 sum of content?
+ * $opts['skipacl'] list everything regardless of ACL
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function search_allpages(&$data,$base,$file,$type,$lvl,$opts){
+ //we do nothing with directories
+ if($type == 'd'){
+ if(!$opts['depth']) return true; // recurse forever
+ $parts = explode('/',ltrim($file,'/'));
+ if(count($parts) == $opts['depth']) return false; // depth reached
+ return true;
+ }
+
+ //only search txt files
+ if(substr($file,-4) != '.txt') return true;
+
+ $item['id'] = pathID($file);
+ if(!$opts['skipacl'] && auth_quickaclcheck($item['id']) < AUTH_READ){
+ return false;
+ }
+
+ $item['rev'] = filemtime($base.'/'.$file);
+ $item['mtime'] = $item['rev'];
+ $item['size'] = filesize($base.'/'.$file);
+ if($opts['hash']){
+ $item['hash'] = md5(trim(rawWiki($item['id'])));
+ }
+
+ $data[] = $item;
+ return true;
+}
+
+/**
+ * Search for backlinks to a given page
+ *
+ * $opts['ns'] namespace of the page
+ * $opts['name'] name of the page without namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @deprecated Replaced by ft_backlinks()
+ */
+function search_backlinks(&$data,$base,$file,$type,$lvl,$opts){
+ //we do nothing with directories
+ if($type == 'd') return true;
+ //only search txt files
+ if(substr($file,-4) != '.txt') return true;
+
+ //absolute search id
+ $sid = cleanID($opts['ns'].':'.$opts['name']);
+
+ //current id and namespace
+ $cid = pathID($file);
+ $cns = getNS($cid);
+
+ //check ACL
+ if(auth_quickaclcheck($cid) < AUTH_READ){
+ return false;
+ }
+
+ //fetch instructions
+ require_once(DOKU_INC.'inc/parserutils.php');
+ $instructions = p_cached_instructions($base.$file,true);
+ if(is_null($instructions)) return false;
+
+ //check all links for match
+ foreach($instructions as $ins){
+ if($ins[0] == 'internallink' || ($conf['camelcase'] && $ins[0] == 'camelcaselink') ){
+ $mid = $ins[1][0];
+ resolve_pageid($cns,$mid,$exists); //exists is not used
+ if($mid == $sid){
+ //we have a match - finish
+ $data[]['id'] = $cid;
+ break;
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Fulltextsearch
+ *
+ * $opts['query'] is the search query
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @deprecated - fulltext indexer is used instead
+ */
+function search_fulltext(&$data,$base,$file,$type,$lvl,$opts){
+ //we do nothing with directories
+ if($type == 'd') return true;
+ //only search txt files
+ if(substr($file,-4) != '.txt') return true;
+
+ //check ACL
+ $id = pathID($file);
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return false;
+ }
+
+ //create regexp from queries
+ $poswords = array();
+ $negwords = array();
+ $qpreg = preg_split('/\s+/',$opts['query']);
+
+ foreach($qpreg as $word){
+ switch(substr($word,0,1)){
+ case '-':
+ if(strlen($word) > 1){ // catch single '-'
+ array_push($negwords,preg_quote(substr($word,1),'#'));
+ }
+ break;
+ case '+':
+ if(strlen($word) > 1){ // catch single '+'
+ array_push($poswords,preg_quote(substr($word,1),'#'));
+ }
+ break;
+ default:
+ array_push($poswords,preg_quote($word,'#'));
+ break;
+ }
+ }
+
+ // a search without any posword is useless
+ if (!count($poswords)) return true;
+
+ $reg = '^(?=.*?'.join(')(?=.*?',$poswords).')';
+ $reg .= count($negwords) ? '((?!'.join('|',$negwords).').)*$' : '.*$';
+ search_regex($data,$base,$file,$reg,$poswords);
+ return true;
+ }
+
+ /**
+ * Reference search
+ * This fuction searches for existing references to a given media file
+ * and returns an array with the found pages. It doesn't pay any
+ * attention to ACL permissions to find every reference. The caller
+ * must check if the user has the appropriate rights to see the found
+ * page and eventually have to prevent the result from displaying.
+ *
+ * @param array $data Reference to the result data structure
+ * @param string $base Base usually $conf['datadir']
+ * @param string $file current file or directory relative to $base
+ * @param char $type Type either 'd' for directory or 'f' for file
+ * @param int $lvl Current recursion depht
+ * @param mixed $opts option array as given to search()
+ *
+ * $opts['query'] is the demanded media file name
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+function search_reference(&$data,$base,$file,$type,$lvl,$opts){
+ global $conf;
+
+ //we do nothing with directories
+ if($type == 'd') return true;
+
+ //only search txt files
+ if(substr($file,-4) != '.txt') return true;
+
+ //we finish after 'cnt' references found. The return value
+ //'false' will skip subdirectories to speed search up.
+ $cnt = $conf['refshow'] > 0 ? $conf['refshow'] : 1;
+ if(count($data) >= $cnt) return false;
+
+ $reg = '\{\{ *\:?'.$opts['query'].' *(\|.*)?\}\}';
+ search_regex($data,$base,$file,$reg,array($opts['query']));
+ return true;
+}
+
+/* ------------- helper functions below -------------- */
+
+/**
+ * fulltext search helper
+ * searches a text file with a given regular expression
+ * no ACL checks are performed. This have to be done by
+ * the caller if necessary.
+ *
+ * @param array $data reference to array for results
+ * @param string $base base directory
+ * @param string $file file name to search in
+ * @param string $reg regular expression to search for
+ * @param array $words words that should be marked in the results
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ *
+ * @deprecated - fulltext indexer is used instead
+ */
+function search_regex(&$data,$base,$file,$reg,$words){
+
+ //get text
+ $text = io_readfile($base.'/'.$file);
+ //lowercase text (u modifier does not help with case)
+ $lctext = utf8_strtolower($text);
+
+ //do the fulltext search
+ $matches = array();
+ if($cnt = preg_match_all('#'.$reg.'#usi',$lctext,$matches)){
+ //this is not the best way for snippet generation but the fastest I could find
+ $q = $words[0]; //use first word for snippet creation
+ $p = utf8_strpos($lctext,$q);
+ $f = $p - 100;
+ $l = utf8_strlen($q) + 200;
+ if($f < 0) $f = 0;
+ $snippet = '<span class="search_sep"> ... </span>'.
+ htmlspecialchars(utf8_substr($text,$f,$l)).
+ '<span class="search_sep"> ... </span>';
+ $mark = '('.join('|', $words).')';
+ $snippet = preg_replace('#'.$mark.'#si','<strong class="search_hit">\\1</strong>',$snippet);
+
+ $data[] = array(
+ 'id' => pathID($file),
+ 'count' => preg_match_all('#'.$mark.'#usi',$lctext,$matches),
+ 'poswords' => join(' ',$words),
+ 'snippet' => $snippet,
+ );
+ }
+
+ return true;
+}
+
+
+/**
+ * fulltext sort
+ *
+ * Callback sort function for use with usort to sort the data
+ * structure created by search_fulltext. Sorts descending by count
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function sort_search_fulltext($a,$b){
+ if($a['count'] > $b['count']){
+ return -1;
+ }elseif($a['count'] < $b['count']){
+ return 1;
+ }else{
+ return strcmp($a['id'],$b['id']);
+ }
+}
+
+/**
+ * translates a document path to an ID
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @todo move to pageutils
+ */
+function pathID($path,$keeptxt=false){
+ $id = utf8_decodeFN($path);
+ $id = str_replace('/',':',$id);
+ if(!$keeptxt) $id = preg_replace('#\.txt$#','',$id);
+ $id = preg_replace('#^:+#','',$id);
+ $id = preg_replace('#:+$#','',$id);
+ return $id;
+}
+
+
+/**
+ * This is a very universal callback for the search() function, replacing
+ * many of the former individual functions at the cost of a more complex
+ * setup.
+ *
+ * How the function behaves, depends on the options passed in the $opts
+ * array, where the following settings can be used.
+ *
+ * depth int recursion depth. 0 for unlimited
+ * keeptxt bool keep .txt extension for IDs
+ * listfiles bool include files in listing
+ * listdirs bool include namespaces in listing
+ * pagesonly bool restrict files to pages
+ * skipacl bool do not check for READ permission
+ * sneakyacl bool don't recurse into nonreadable dirs
+ * hash bool create MD5 hash for files
+ * meta bool return file metadata
+ * filematch string match files against this regexp
+ * idmatch string match full ID against this regexp
+ * dirmatch string match directory against this regexp when adding
+ * nsmatch string match namespace against this regexp when adding
+ * recmatch string match directory against this regexp when recursing
+ * showmsg bool warn about non-ID files
+ * showhidden bool show hidden files too
+ * firsthead bool return first heading for pages
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function search_universal(&$data,$base,$file,$type,$lvl,$opts){
+ $item = array();
+ $return = true;
+
+ // get ID and check if it is a valid one
+ $item['id'] = pathID($file);
+ if($item['id'] != cleanID($item['id'])){
+ if($opts['showmsg'])
+ msg(hsc($item['id']).' is not a valid file name for DokuWiki - skipped',-1);
+ return false; // skip non-valid files
+ }
+ $item['ns'] = getNS($item['id']);
+
+ if($type == 'd') {
+ // decide if to recursion into this directory is wanted
+ if(!$opts['depth']){
+ $return = true; // recurse forever
+ }else{
+ $depth = substr_count($file,'/');
+ if($depth >= $opts['depth']){
+ $return = false; // depth reached
+ }else{
+ $return = true;
+ }
+ }
+ if($return && !preg_match('/'.$opts['recmatch'].'/',$file)){
+ $return = false; // doesn't match
+ }
+ }
+
+ // check ACL
+ if(!$opts['skipacl']){
+ if($type == 'd'){
+ $item['perm'] = auth_quickaclcheck($item['id'].':*');
+ }else{
+ $item['perm'] = auth_quickaclcheck($item['id']); //FIXME check namespace for media files
+ }
+ }else{
+ $item['perm'] = AUTH_DELETE;
+ }
+
+ // are we done here maybe?
+ if($type == 'd'){
+ if(!$opts['listdirs']) return $return;
+ if(!$opts['skipacl'] && $opts['sneakyacl'] && $item['perm'] < AUTH_READ) return false; //neither list nor recurse
+ if($opts['dirmatch'] && !preg_match('/'.$opts['dirmatch'].'/',$file)) return $return;
+ if($opts['nsmatch'] && !preg_match('/'.$opts['nsmatch'].'/',$item['ns'])) return $return;
+ }else{
+ if(!$opts['listfiles']) return $return;
+ if(!$opts['skipacl'] && $item['perm'] < AUTH_READ) return $return;
+ if($opts['pagesonly'] && (substr($file,-4) != '.txt')) return $return;
+ if(!$conf['showhidden'] && isHiddenPage($id)) return $return;
+ if($opts['filematch'] && !preg_match('/'.$opts['filematch'].'/',$file)) return $return;
+ if($opts['idmatch'] && !preg_match('/'.$opts['idmatch'].'/',$item['id'])) return $return;
+ }
+
+ // still here? prepare the item
+ $item['type'] = $type;
+ $item['level'] = $lvl;
+ $item['open'] = $return;
+
+ if($opts['meta']){
+ $item['file'] = basename($file);
+ $item['size'] = filesize($base.'/'.$file);
+ $item['mtime'] = filemtime($base.'/'.$file);
+ $item['rev'] = $item['mtime'];
+ $item['writable'] = is_writable($base.'/'.$file);
+ $item['executable'] = is_executable($base.'/'.$file);
+ }
+
+ if($type == 'f'){
+ if($opts['hash']) $item['hash'] = md5(io_readFile($base.'/'.$file,false));
+ if($opts['firsthead']) $item['title'] = p_get_first_heading($item['id'],false);
+ }
+
+ // finally add the item
+ $data[] = $item;
+ return $return;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/template.php b/mod/dokuwiki/vendors/dokuwiki/inc/template.php
new file mode 100644
index 000000000..b7790060c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/template.php
@@ -0,0 +1,1413 @@
+<?php
+/**
+ * DokuWiki template functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+
+/**
+ * Returns the path to the given template, uses
+ * default one if the custom version doesn't exist.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function template($tpl){
+ global $conf;
+
+ if(@is_readable(DOKU_INC.'lib/tpl/'.$conf['template'].'/'.$tpl))
+ return DOKU_INC.'lib/tpl/'.$conf['template'].'/'.$tpl;
+
+ return DOKU_INC.'lib/tpl/default/'.$tpl;
+}
+
+/**
+ * Print the content
+ *
+ * This function is used for printing all the usual content
+ * (defined by the global $ACT var) by calling the appropriate
+ * outputfunction(s) from html.php
+ *
+ * Everything that doesn't use the main template file isn't
+ * handled by this function. ACL stuff is not done here either.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+function tpl_content($prependTOC=true) {
+ global $ACT;
+ global $INFO;
+ $INFO['prependTOC'] = $prependTOC;
+
+ ob_start();
+ trigger_event('TPL_ACT_RENDER',$ACT,'tpl_content_core');
+ $html_output = ob_get_clean();
+ trigger_event('TPL_CONTENT_DISPLAY',$html_output,'ptln');
+
+ return !empty($html_output);
+}
+
+function tpl_content_core(){
+ global $ACT;
+ global $TEXT;
+ global $PRE;
+ global $SUF;
+ global $SUM;
+ global $IDX;
+
+ switch($ACT){
+ case 'show':
+ html_show();
+ break;
+ case 'preview':
+ html_edit($TEXT);
+ html_show($TEXT);
+ break;
+ case 'recover':
+ html_edit($TEXT);
+ break;
+ case 'edit':
+ html_edit();
+ break;
+ case 'draft':
+ html_draft();
+ break;
+ case 'wordblock':
+ html_edit($TEXT,'wordblock');
+ break;
+ case 'search':
+ html_search();
+ break;
+ case 'revisions':
+ $first = isset($_REQUEST['first']) ? intval($_REQUEST['first']) : 0;
+ html_revisions($first);
+ break;
+ case 'diff':
+ html_diff();
+ break;
+ case 'recent':
+ if (is_array($_REQUEST['first'])) {
+ $_REQUEST['first'] = array_keys($_REQUEST['first']);
+ $_REQUEST['first'] = $_REQUEST['first'][0];
+ }
+ $first = is_numeric($_REQUEST['first']) ? intval($_REQUEST['first']) : 0;
+ html_recent($first);
+ break;
+ case 'index':
+ html_index($IDX); #FIXME can this be pulled from globals? is it sanitized correctly?
+ break;
+ case 'backlink':
+ html_backlinks();
+ break;
+ case 'conflict':
+ html_conflict(con($PRE,$TEXT,$SUF),$SUM);
+ html_diff(con($PRE,$TEXT,$SUF),false);
+ break;
+ case 'locked':
+ html_locked();
+ html_edit();
+ break;
+ case 'login':
+ html_login();
+ break;
+ case 'register':
+ html_register();
+ break;
+ case 'resendpwd':
+ html_resendpwd();
+ break;
+ case 'denied':
+ print p_locale_xhtml('denied');
+ break;
+ case 'profile' :
+ html_updateprofile();
+ break;
+ case 'admin':
+ tpl_admin();
+ break;
+ default:
+ $evt = new Doku_Event('TPL_ACT_UNKNOWN',$ACT);
+ if ($evt->advise_before())
+ msg("Failed to handle command: ".hsc($ACT),-1);
+ $evt->advise_after();
+ unset($evt);
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Places the TOC where the function is called
+ *
+ * If you use this you most probably want to call tpl_content with
+ * a false argument
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_toc($return=false){
+ global $TOC;
+ global $ACT;
+ global $ID;
+ global $REV;
+ global $INFO;
+ global $conf;
+ $toc = array();
+
+ if(is_array($TOC)){
+ // if a TOC was prepared in global scope, always use it
+ $toc = $TOC;
+ }elseif(($ACT == 'show' || substr($ACT,0,6) == 'export') && !$REV && $INFO['exists']){
+ // get TOC from metadata, render if neccessary
+ $meta = p_get_metadata($ID, false, true);
+ if(isset($meta['internal']['toc'])){
+ $tocok = $meta['internal']['toc'];
+ }else{
+ $tocok = true;
+ }
+ $toc = $meta['description']['tableofcontents'];
+ if(!$tocok || !is_array($toc) || !$conf['tocminheads'] || count($toc) < $conf['tocminheads']){
+ $toc = array();
+ }
+ }elseif($ACT == 'admin'){
+ // try to load admin plugin TOC FIXME: duplicates code from tpl_admin
+ $plugin = null;
+ $page = get_input('dokupage');
+ if (!empty($page)) {
+ $pluginlist = plugin_list('admin');
+ if (in_array($page, $pluginlist)) {
+ // attempt to load the plugin
+ $plugin =& plugin_load('admin',$page);
+ }
+ }
+ if ( ($plugin !== null) &&
+ (!$plugin->forAdminOnly() || $INFO['isadmin']) ){
+ $toc = $plugin->getTOC();
+ $TOC = $toc; // avoid later rebuild
+ }
+ }
+
+ trigger_event('TPL_TOC_RENDER', $toc, NULL, false);
+ $html = html_TOC($toc);
+ if($return) return $html;
+ echo $html;
+}
+
+/**
+ * Handle the admin page contents
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_admin(){
+ global $INFO;
+ global $TOC;
+
+ $plugin = null;
+ $page = get_input('dokupage');
+ if (!empty($page)) {
+ $pluginlist = plugin_list('admin');
+
+ if (in_array($page, $pluginlist)) {
+
+ // attempt to load the plugin
+ $plugin =& plugin_load('admin',$page);
+ }
+ }
+
+ if ($plugin !== null){
+ if($plugin->forAdminOnly() && !$INFO['isadmin']){
+ msg('For admins only',-1);
+ html_admin();
+ }else{
+ if(!is_array($TOC)) $TOC = $plugin->getTOC(); //if TOC wasn't requested yet
+ if($INFO['prependTOC']) tpl_toc();
+ $plugin->html();
+ }
+ }else{
+ html_admin();
+ }
+ return true;
+}
+
+/**
+ * Print the correct HTML meta headers
+ *
+ * This has to go into the head section of your template.
+ *
+ * @triggers TPL_METAHEADER_OUTPUT
+ * @param boolean $alt Should feeds and alternative format links be added?
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_metaheaders($alt=true){
+ global $ID;
+ global $REV;
+ global $INFO;
+ global $JSINFO;
+ global $ACT;
+ global $QUERY;
+ global $lang;
+ global $conf;
+ $it=2;
+
+ // prepare the head array
+ $head = array();
+
+ // prepare seed for js and css
+ $tseed = 0;
+ $depends = getConfigFiles('main');
+ foreach($depends as $f) {
+ $time = @filemtime($f);
+ if($time > $tseed) $tseed = $time;
+ }
+
+ // the usual stuff
+ $head['meta'][] = array( 'name'=>'generator', 'content'=>'DokuWiki '.getVersion() );
+ $head['link'][] = array( 'rel'=>'search', 'type'=>'application/opensearchdescription+xml',
+ 'href'=>DOKU_BASE.'lib/exe/opensearch.php', 'title'=>$conf['title'] );
+ $head['link'][] = array( 'rel'=>'start', 'href'=>DOKU_BASE );
+ if(actionOK('index')){
+ $head['link'][] = array( 'rel'=>'contents', 'href'=> wl($ID,'do=index',false,'&'),
+ 'title'=>$lang['btn_index'] );
+ }
+
+ if($alt){
+ $head['link'][] = array( 'rel'=>'alternate', 'type'=>'application/rss+xml',
+ 'title'=>'Recent Changes', 'href'=>DOKU_BASE.'feed.php');
+ $head['link'][] = array( 'rel'=>'alternate', 'type'=>'application/rss+xml',
+ 'title'=>'Current Namespace',
+ 'href'=>DOKU_BASE.'feed.php?mode=list&ns='.$INFO['namespace']);
+ if(($ACT == 'show' || $ACT == 'search') && $INFO['writable']){
+ $head['link'][] = array( 'rel'=>'edit',
+ 'title'=>$lang['btn_edit'],
+ 'href'=> wl($ID,'do=edit',false,'&'));
+ }
+
+ if($ACT == 'search'){
+ $head['link'][] = array( 'rel'=>'alternate', 'type'=>'application/rss+xml',
+ 'title'=>'Search Result',
+ 'href'=>DOKU_BASE.'feed.php?mode=search&q='.$QUERY);
+ }
+
+ if(actionOK('export_xhtml')){
+ $head['link'][] = array( 'rel'=>'alternate', 'type'=>'text/html', 'title'=>'Plain HTML',
+ 'href'=>exportlink($ID, 'xhtml', '', false, '&'));
+ }
+
+ if(actionOK('export_raw')){
+ $head['link'][] = array( 'rel'=>'alternate', 'type'=>'text/plain', 'title'=>'Wiki Markup',
+ 'href'=>exportlink($ID, 'raw', '', false, '&'));
+ }
+ }
+
+ // setup robot tags apropriate for different modes
+ if( ($ACT=='show' || $ACT=='export_xhtml') && !$REV){
+ if($INFO['exists']){
+ //delay indexing:
+ if((time() - $INFO['lastmod']) >= $conf['indexdelay']){
+ $head['meta'][] = array( 'name'=>'robots', 'content'=>'index,follow');
+ }else{
+ $head['meta'][] = array( 'name'=>'robots', 'content'=>'noindex,nofollow');
+ }
+ $head['link'][] = array( 'rel'=>'canonical', 'href'=>wl($ID,'',true,'&') );
+ }else{
+ $head['meta'][] = array( 'name'=>'robots', 'content'=>'noindex,follow');
+ }
+ }elseif(defined('DOKU_MEDIADETAIL')){
+ $head['meta'][] = array( 'name'=>'robots', 'content'=>'index,follow');
+ }else{
+ $head['meta'][] = array( 'name'=>'robots', 'content'=>'noindex,nofollow');
+ }
+
+ // set metadata
+ if($ACT == 'show' || $ACT=='export_xhtml'){
+ // date of modification
+ if($REV){
+ $head['meta'][] = array( 'name'=>'date', 'content'=>date('Y-m-d\TH:i:sO',$REV));
+ }else{
+ $head['meta'][] = array( 'name'=>'date', 'content'=>date('Y-m-d\TH:i:sO',$INFO['lastmod']));
+ }
+
+ // keywords (explicit or implicit)
+ if(!empty($INFO['meta']['subject'])){
+ $head['meta'][] = array( 'name'=>'keywords', 'content'=>join(',',$INFO['meta']['subject']));
+ }else{
+ $head['meta'][] = array( 'name'=>'keywords', 'content'=>str_replace(':',',',$ID));
+ }
+ }
+
+ // load stylesheets
+ $head['link'][] = array('rel'=>'stylesheet', 'media'=>'all', 'type'=>'text/css',
+ 'href'=>DOKU_BASE.'lib/exe/css.php?s=all&t='.$conf['template'].'&tseed='.$tseed);
+ $head['link'][] = array('rel'=>'stylesheet', 'media'=>'screen', 'type'=>'text/css',
+ 'href'=>DOKU_BASE.'lib/exe/css.php?t='.$conf['template'].'&tseed='.$tseed);
+ $head['link'][] = array('rel'=>'stylesheet', 'media'=>'print', 'type'=>'text/css',
+ 'href'=>DOKU_BASE.'lib/exe/css.php?s=print&t='.$conf['template'].'&tseed='.$tseed);
+
+ // make $INFO and other vars available to JavaScripts
+ require_once(DOKU_INC.'inc/JSON.php');
+ $json = new JSON();
+ $script = "var NS='".$INFO['namespace']."';";
+ if($conf['useacl'] && $_SERVER['REMOTE_USER']){
+ require_once(DOKU_INC.'inc/toolbar.php');
+ $script .= "var SIG='".toolbar_signature()."';";
+ }
+ $script .= 'var JSINFO = '.$json->encode($JSINFO).';';
+ $head['script'][] = array( 'type'=>'text/javascript', 'charset'=>'utf-8',
+ '_data'=> $script);
+
+ // load external javascript
+ $head['script'][] = array( 'type'=>'text/javascript', 'charset'=>'utf-8', '_data'=>'',
+ 'src'=>DOKU_BASE.'lib/exe/js.php'.'?tseed='.$tseed);
+
+
+ // trigger event here
+ trigger_event('TPL_METAHEADER_OUTPUT',$head,'_tpl_metaheaders_action',true);
+ return true;
+}
+
+/**
+ * prints the array build by tpl_metaheaders
+ *
+ * $data is an array of different header tags. Each tag can have multiple
+ * instances. Attributes are given as key value pairs. Values will be HTML
+ * encoded automatically so they should be provided as is in the $data array.
+ *
+ * For tags having a body attribute specify the the body data in the special
+ * attribute '_data'. This field will NOT BE ESCAPED automatically.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function _tpl_metaheaders_action($data){
+ foreach($data as $tag => $inst){
+ foreach($inst as $attr){
+ echo '<',$tag,' ',buildAttributes($attr);
+ if(isset($attr['_data']) || $tag == 'script'){
+ if($tag == 'script' && $attr['_data'])
+ $attr['_data'] = "<!--//--><![CDATA[//><!--\n".
+ $attr['_data'].
+ "\n//--><!]]>";
+
+ echo '>',$attr['_data'],'</',$tag,'>';
+ }else{
+ echo '/>';
+ }
+ echo "\n";
+ }
+ }
+}
+
+/**
+ * Print a link
+ *
+ * Just builds a link.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_link($url,$name,$more='',$return=false){
+ $out = '<a href="'.$url.'" ';
+ if ($more) $out .= ' '.$more;
+ $out .= ">$name</a>";
+ if ($return) return $out;
+ print $out;
+ return true;
+}
+
+/**
+ * Prints a link to a WikiPage
+ *
+ * Wrapper around html_wikilink
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_pagelink($id,$name=NULL){
+ print html_wikilink($id,$name);
+ return true;
+}
+
+/**
+ * get the parent page
+ *
+ * Tries to find out which page is parent.
+ * returns false if none is available
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_getparent($id){
+ global $conf;
+ $parent = getNS($id).':';
+ resolve_pageid('',$parent,$exists);
+ if($parent == $id) {
+ $pos = strrpos (getNS($id),':');
+ $parent = substr($parent,0,$pos).':';
+ resolve_pageid('',$parent,$exists);
+ if($parent == $id) return false;
+ }
+ return $parent;
+}
+
+/**
+ * Print one of the buttons
+ *
+ * Available Buttons are
+ *
+ * edit - edit/create/show/draft button
+ * history - old revisions
+ * recent - recent changes
+ * login - login/logout button - if ACL enabled
+ * profile - user profile button (if logged in)
+ * index - The index
+ * admin - admin page - if enough rights
+ * top - a back to top button
+ * back - a back to parent button - if available
+ * backlink - links to the list of backlinks
+ * subscription- subscribe/unsubscribe button
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+function tpl_button($type,$return=false){
+ global $ACT;
+ global $ID;
+ global $REV;
+ global $NS;
+ global $INFO;
+ global $conf;
+ global $auth;
+
+ // check disabled actions and fix the badly named ones
+ $ctype = $type;
+ if($type == 'history') $ctype='revisions';
+ if(!actionOK($ctype)) return false;
+
+ $out = '';
+ switch($type){
+ case 'edit':
+ #most complicated type - we need to decide on current action
+ if($ACT == 'show' || $ACT == 'search'){
+ if($INFO['writable']){
+ if(!empty($INFO['draft'])){
+ $out .= html_btn('draft',$ID,'e',array('do' => 'draft'),'post');
+ }else{
+ if($INFO['exists']){
+ $out .= html_btn('edit',$ID,'e',array('do' => 'edit','rev' => $REV),'post');
+ }else{
+ $out .= html_btn('create',$ID,'e',array('do' => 'edit','rev' => $REV),'post');
+ }
+ }
+ }else{
+ if(!actionOK('source')) return false; //pseudo action
+ $out .= html_btn('source',$ID,'v',array('do' => 'edit','rev' => $REV),'post');
+ }
+ }else{
+ $out .= html_btn('show',$ID,'v',array('do' => 'show'));
+ }
+ break;
+ case 'history':
+ if(actionOK('revisions'))
+ $out .= html_btn('revs',$ID,'o',array('do' => 'revisions'));
+ break;
+ case 'recent':
+ if(actionOK('recent'))
+ $out .= html_btn('recent',$ID,'r',array('do' => 'recent'));
+ break;
+ case 'index':
+ if(actionOK('index'))
+ $out .= html_btn('index',$ID,'x',array('do' => 'index'));
+ break;
+ case 'back':
+ if ($parent = tpl_getparent($ID)) {
+ $out .= html_btn('back',$parent,'b',array('do' => 'show'));
+ }
+ break;
+ case 'top':
+ $out .= html_topbtn();
+ break;
+ case 'login':
+ if($conf['useacl'] && $auth){
+ if(isset($_SERVER['REMOTE_USER'])){
+ $out .= html_btn('logout',$ID,'',array('do' => 'logout', 'sectok' => getSecurityToken()));
+ }else{
+ $out .= html_btn('login',$ID,'',array('do' => 'login', 'sectok' => getSecurityToken()));
+ }
+ }
+ break;
+ case 'admin':
+ if($INFO['ismanager']){
+ $out .= html_btn('admin',$ID,'',array('do' => 'admin'));
+ }
+ break;
+ case 'revert':
+ if($INFO['ismanager'] && $REV && $INFO['writable'] && actionOK('revert')){
+ $out .= html_btn('revert',$ID,'',array('do' => 'revert', 'rev' => $REV, 'sectok' => getSecurityToken()));
+ }
+ break;
+ case 'subscribe':
+ case 'subscription':
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribed']){
+ if(actionOK('unsubscribe'))
+ $out .= html_btn('unsubscribe',$ID,'',array('do' => 'unsubscribe',));
+ } else {
+ if(actionOK('subscribe'))
+ $out .= html_btn('subscribe',$ID,'',array('do' => 'subscribe',));
+ }
+ }
+ }
+ if($type == 'subscribe') break;
+ // else: fall through for backward compatibility
+ case 'subscribens':
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribedns']){
+ if(actionOK('unsubscribens'))
+ $out .= html_btn('unsubscribens',$ID,'',array('do' => 'unsubscribens',));
+ } else {
+ if(actionOK('subscribens'))
+ $out .= html_btn('subscribens',$ID,'',array('do' => 'subscribens',));
+ }
+ }
+ }
+ break;
+ case 'backlink':
+ if(actionOK('backlink'))
+ $out .= html_btn('backlink',$ID,'',array('do' => 'backlink'));
+ break;
+ case 'profile':
+ if($conf['useacl'] && isset($_SERVER['REMOTE_USER']) && $auth &&
+ $auth->canDo('Profile') && ($ACT!='profile')){
+ $out .= html_btn('profile',$ID,'',array('do' => 'profile'));
+ }
+ break;
+ default:
+ $out .= '[unknown button type]';
+ break;
+ }
+ if ($return) return $out;
+ print $out;
+ return $out ? true : false;
+}
+
+/**
+ * Like the action buttons but links
+ *
+ * Available links are
+ *
+ * edit - edit/create/show link
+ * history - old revisions
+ * recent - recent changes
+ * login - login/logout link - if ACL enabled
+ * profile - user profile link (if logged in)
+ * index - The index
+ * admin - admin page - if enough rights
+ * top - a back to top link
+ * back - a back to parent link - if available
+ * backlink - links to the list of backlinks
+ * subscribe/subscription - subscribe/unsubscribe link
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @see tpl_button
+ */
+function tpl_actionlink($type,$pre='',$suf='',$inner='',$return=false){
+ global $ID;
+ global $INFO;
+ global $REV;
+ global $ACT;
+ global $conf;
+ global $lang;
+ global $auth;
+
+ // check disabled actions and fix the badly named ones
+ $ctype = $type;
+ if($type == 'history') $ctype='revisions';
+ if(!actionOK($ctype)) return false;
+
+ $out = '';
+ switch($type){
+ case 'edit':
+ #most complicated type - we need to decide on current action
+ if($ACT == 'show' || $ACT == 'search'){
+ if($INFO['writable']){
+ if(!empty($INFO['draft'])) {
+ $out .= tpl_link(wl($ID,'do=draft'),
+ $pre.(($inner)?$inner:$lang['btn_draft']).$suf,
+ 'class="action edit" accesskey="e" rel="nofollow"',1);
+ } else {
+ if($INFO['exists']){
+ $out .= tpl_link(wl($ID,'do=edit&amp;rev='.$REV),
+ $pre.(($inner)?$inner:$lang['btn_edit']).$suf,
+ 'class="action edit" accesskey="e" rel="nofollow"',1);
+ }else{
+ $out .= tpl_link(wl($ID,'do=edit&amp;rev='.$REV),
+ $pre.(($inner)?$inner:$lang['btn_create']).$suf,
+ 'class="action create" accesskey="e" rel="nofollow"',1);
+ }
+ }
+ }else{
+ if(actionOK('source')) //pseudo action
+ $out .= tpl_link(wl($ID,'do=edit&amp;rev='.$REV),
+ $pre.(($inner)?$inner:$lang['btn_source']).$suf,
+ 'class="action source" accesskey="v" rel="nofollow"',1);
+ }
+ }else{
+ $out .= tpl_link(wl($ID,'do=show'),
+ $pre.(($inner)?$inner:$lang['btn_show']).$suf,
+ 'class="action show" accesskey="v" rel="nofollow"',1);
+ }
+ break;
+ case 'history':
+ if(actionOK('revisions'))
+ $out .= tpl_link(wl($ID,'do=revisions'),
+ $pre.(($inner)?$inner:$lang['btn_revs']).$suf,
+ 'class="action revisions" accesskey="o" rel="nofollow"',1);
+ break;
+ case 'recent':
+ if(actionOK('recent'))
+ $out .= tpl_link(wl($ID,'do=recent'),
+ $pre.(($inner)?$inner:$lang['btn_recent']).$suf,
+ 'class="action recent" accesskey="r" rel="nofollow"',1);
+ break;
+ case 'index':
+ if(actionOK('index'))
+ $out .= tpl_link(wl($ID,'do=index'),
+ $pre.(($inner)?$inner:$lang['btn_index']).$suf,
+ 'class="action index" accesskey="x" rel="nofollow"',1);
+ break;
+ case 'top':
+ $out .= '<a href="#dokuwiki__top" class="action top" accesskey="x">'.
+ $pre.(($inner)?$inner:$lang['btn_top']).$suf.'</a>';
+ break;
+ case 'back':
+ if ($parent = tpl_getparent($ID)) {
+ $out .= tpl_link(wl($parent,'do=show'),
+ $pre.(($inner)?$inner:$lang['btn_back']).$suf,
+ 'class="action back" accesskey="b" rel="nofollow"',1);
+ }
+ break;
+ case 'login':
+ if($conf['useacl'] && $auth){
+ if($_SERVER['REMOTE_USER']){
+ $out .= tpl_link(wl($ID,'do=logout&amp;sectok='.getSecurityToken()),
+ $pre.(($inner)?$inner:$lang['btn_logout']).$suf,
+ 'class="action logout" rel="nofollow"',1);
+ }else{
+ $out .= tpl_link(wl($ID,'do=login&amp;sectok='.getSecurityToken()),
+ $pre.(($inner)?$inner:$lang['btn_login']).$suf,
+ 'class="action login" rel="nofollow"',1);
+ }
+ }
+ break;
+ case 'admin':
+ if($INFO['ismanager']){
+ $out .= tpl_link(wl($ID,'do=admin'),
+ $pre.(($inner)?$inner:$lang['btn_admin']).$suf,
+ 'class="action admin" rel="nofollow"',1);
+ }
+ break;
+ case 'revert':
+ if($INFO['ismanager'] && $REV && $INFO['writable'] && actionOK('revert')){
+ $out .= tpl_link(wl($ID,array('do' => 'revert', 'rev' => $REV, 'sectok' => getSecurityToken())),
+ $pre.(($inner)?$inner:$lang['btn_revert']).$suf,
+ 'class="action revert" rel="nofollow"',1);
+ }
+ break;
+ case 'subscribe':
+ case 'subscription':
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribed']) {
+ if(actionOK('unsubscribe'))
+ $out .= tpl_link(wl($ID,'do=unsubscribe'),
+ $pre.(($inner)?$inner:$lang['btn_unsubscribe']).$suf,
+ 'class="action unsubscribe" rel="nofollow"',1);
+ } else {
+ if(actionOK('subscribe'))
+ $out .= tpl_link(wl($ID,'do=subscribe'),
+ $pre.(($inner)?$inner:$lang['btn_subscribe']).$suf,
+ 'class="action subscribe" rel="nofollow"',1);
+ }
+ }
+ }
+ if($type == 'subscribe') break;
+ // else: fall through for backward compatibility
+ case 'subscribens':
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribedns']) {
+ if(actionOK('unsubscribens'))
+ $out .= tpl_link(wl($ID,'do=unsubscribens'),
+ $pre.(($inner)?$inner:$lang['btn_unsubscribens']).$suf,
+ 'class="action unsubscribens" rel="nofollow"',1);
+ } else {
+ if(actionOK('subscribens'))
+ $out .= tpl_link(wl($ID,'do=subscribens'),
+ $pre.(($inner)?$inner:$lang['btn_subscribens']).$suf,
+ 'class="action subscribens" rel="nofollow"',1);
+ }
+ }
+ }
+ break;
+ case 'backlink':
+ if(actionOK('backlink'))
+ $out .= tpl_link(wl($ID,'do=backlink'),
+ $pre.(($inner)?$inner:$lang['btn_backlink']).$suf,
+ 'class="action backlink" rel="nofollow"',1);
+ break;
+ case 'profile':
+ if($conf['useacl'] && $auth && $_SERVER['REMOTE_USER'] &&
+ $auth->canDo('Profile') && ($ACT!='profile')){
+ $out .= tpl_link(wl($ID,'do=profile'),
+ $pre.(($inner)?$inner:$lang['btn_profile']).$suf,
+ 'class="action profile" rel="nofollow"',1);
+ }
+ break;
+ default:
+ $out .= '[unknown link type]';
+ break;
+ }
+ if ($return) return $out;
+ print $out;
+ return $out ? true : false;
+}
+
+/**
+ * Wrapper around tpl_button() and tpl_actionlink()
+ *
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+function tpl_action($type,$link=0,$wrapper=false,$return=false,$pre='',$suf='',$inner='') {
+ $out = '';
+ if ($link) $out .= tpl_actionlink($type,$pre,$suf,$inner,1);
+ else $out .= tpl_button($type,1);
+ if ($out && $wrapper) $out = "<$wrapper>$out</$wrapper>";
+
+ if ($return) return $out;
+ print $out;
+ return $out ? true : false;
+}
+
+/**
+ * Print the search form
+ *
+ * If the first parameter is given a div with the ID 'qsearch_out' will
+ * be added which instructs the ajax pagequicksearch to kick in and place
+ * its output into this div. The second parameter controls the propritary
+ * attribute autocomplete. If set to false this attribute will be set with an
+ * value of "off" to instruct the browser to disable it's own built in
+ * autocompletion feature (MSIE and Firefox)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_searchform($ajax=true,$autocomplete=true){
+ global $lang;
+ global $ACT;
+ global $QUERY;
+
+ // don't print the search form if search action has been disabled
+ if (!actionOk('search')) return false;
+
+ print '<form action="'.wl().'" accept-charset="utf-8" class="search" id="dw__search"><div class="no">';
+ print '<input type="hidden" name="do" value="search" />';
+ print '<input type="text" ';
+ if($ACT == 'search') print 'value="'.htmlspecialchars($QUERY).'" ';
+ if(!$autocomplete) print 'autocomplete="off" ';
+ print 'id="qsearch__in" accesskey="f" name="id" class="edit" title="[F]" />';
+ print '<input type="submit" value="'.$lang['btn_search'].'" class="button" title="'.$lang['btn_search'].'" />';
+ if($ajax) print '<div id="qsearch__out" class="ajax_qsearch JSpopup"></div>';
+ print '</div></form>';
+ return true;
+}
+
+/**
+ * Print the breadcrumbs trace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_breadcrumbs($sep='&raquo;'){
+ global $lang;
+ global $conf;
+
+ //check if enabled
+ if(!$conf['breadcrumbs']) return false;
+
+ $crumbs = breadcrumbs(); //setup crumb trace
+
+ //reverse crumborder in right-to-left mode, add RLM character to fix heb/eng display mixups
+ if($lang['direction'] == 'rtl') {
+ $crumbs = array_reverse($crumbs,true);
+ $crumbs_sep = ' &#8207;<span class="bcsep">'.$sep.'</span>&#8207; ';
+ } else {
+ $crumbs_sep = ' <span class="bcsep">'.$sep.'</span> ';
+ }
+
+ //render crumbs, highlight the last one
+ print '<span class="bchead">'.$lang['breadcrumb'].':</span>';
+ $last = count($crumbs);
+ $i = 0;
+ foreach ($crumbs as $id => $name){
+ $i++;
+ echo $crumbs_sep;
+ if ($i == $last) print '<span class="curid">';
+ tpl_link(wl($id),hsc($name),'class="breadcrumbs" title="'.$id.'"');
+ if ($i == $last) print '</span>';
+ }
+ return true;
+}
+
+/**
+ * Hierarchical breadcrumbs
+ *
+ * This code was suggested as replacement for the usual breadcrumbs.
+ * It only makes sense with a deep site structure.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Nigel McNie <oracle.shinoda@gmail.com>
+ * @author Sean Coates <sean@caedmon.net>
+ * @author <fredrik@averpil.com>
+ * @todo May behave strangely in RTL languages
+ */
+function tpl_youarehere($sep=' &raquo; '){
+ global $conf;
+ global $ID;
+ global $lang;
+
+ // check if enabled
+ if(!$conf['youarehere']) return false;
+
+ $parts = explode(':', $ID);
+ $count = count($parts);
+
+ if($GLOBALS['ACT'] == 'search')
+ {
+ $parts = array($conf['start']);
+ $count = 1;
+ }
+
+ echo '<span class="bchead">'.$lang['youarehere'].': </span>';
+
+ // always print the startpage
+ $title = useHeading('navigation') ? p_get_first_heading($conf['start']) : $conf['start'];
+ if(!$title) $title = $conf['start'];
+ tpl_link(wl($conf['start']),hsc($title),'title="'.$conf['start'].'"');
+
+ // print intermediate namespace links
+ $part = '';
+ for($i=0; $i<$count - 1; $i++){
+ $part .= $parts[$i].':';
+ $page = $part;
+ resolve_pageid('',$page,$exists);
+ if ($page == $conf['start']) continue; // Skip startpage
+
+ // output
+ echo $sep;
+ if($exists){
+ $title = useHeading('navigation') ? p_get_first_heading($page) : $parts[$i];
+ tpl_link(wl($page),hsc($title),'title="'.$page.'"');
+ }else{
+ tpl_link(wl($page),$parts[$i],'title="'.$page.'" class="wikilink2" rel="nofollow"');
+ }
+ }
+
+ // print current page, skipping start page, skipping for namespace index
+ if(isset($page) && $page==$part.$parts[$i]) return;
+ $page = $part.$parts[$i];
+ if($page == $conf['start']) return;
+ echo $sep;
+ if(page_exists($page)){
+ $title = useHeading('navigation') ? p_get_first_heading($page) : $parts[$i];
+ tpl_link(wl($page),hsc($title),'title="'.$page.'"');
+ }else{
+ tpl_link(wl($page),$parts[$i],'title="'.$page.'" class="wikilink2" rel="nofollow"');
+ }
+ return true;
+}
+
+/**
+ * Print info if the user is logged in
+ * and show full name in that case
+ *
+ * Could be enhanced with a profile link in future?
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_userinfo(){
+ global $lang;
+ global $INFO;
+ if(isset($_SERVER['REMOTE_USER'])){
+ print $lang['loggedinas'].': '.$INFO['userinfo']['name'].' ('.$_SERVER['REMOTE_USER'].')';
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Print some info about the current page
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_pageinfo($ret=false){
+ global $conf;
+ global $lang;
+ global $INFO;
+ global $ID;
+
+ // return if we are not allowed to view the page
+ if (!auth_quickaclcheck($ID)) { return false; }
+
+ // prepare date and path
+ $fn = $INFO['filepath'];
+ if(!$conf['fullpath']){
+ if($INFO['rev']){
+ $fn = str_replace(fullpath($conf['olddir']).'/','',$fn);
+ }else{
+ $fn = str_replace(fullpath($conf['datadir']).'/','',$fn);
+ }
+ }
+ $fn = utf8_decodeFN($fn);
+ $date = dformat($INFO['lastmod']);
+
+ // print it
+ if($INFO['exists']){
+ $out = '';
+ $out .= $fn;
+ $out .= ' &middot; ';
+ $out .= $lang['lastmod'];
+ $out .= ': ';
+ $out .= $date;
+ if($INFO['editor']){
+ $out .= ' '.$lang['by'].' ';
+ $out .= editorinfo($INFO['editor']);
+ }else{
+ $out .= ' ('.$lang['external_edit'].')';
+ }
+ if($INFO['locked']){
+ $out .= ' &middot; ';
+ $out .= $lang['lockedby'];
+ $out .= ': ';
+ $out .= editorinfo($INFO['locked']);
+ }
+ if($ret){
+ return $out;
+ }else{
+ echo $out;
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Prints or returns the name of the given page (current one if none given).
+ *
+ * If useheading is enabled this will use the first headline else
+ * the given ID is used.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_pagetitle($id=null, $ret=false){
+ global $conf;
+ if(is_null($id)){
+ global $ID;
+ $id = $ID;
+ }
+
+ $name = $id;
+ if (useHeading('navigation')) {
+ $title = p_get_first_heading($id);
+ if ($title) $name = $title;
+ }
+
+ if ($ret) {
+ return hsc($name);
+ } else {
+ print hsc($name);
+ return true;
+ }
+}
+
+/**
+ * Returns the requested EXIF/IPTC tag from the current image
+ *
+ * If $tags is an array all given tags are tried until a
+ * value is found. If no value is found $alt is returned.
+ *
+ * Which texts are known is defined in the functions _exifTagNames
+ * and _iptcTagNames() in inc/jpeg.php (You need to prepend IPTC
+ * to the names of the latter one)
+ *
+ * Only allowed in: detail.php
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_img_getTag($tags,$alt='',$src=null){
+ // Init Exif Reader
+ global $SRC;
+
+ if(is_null($src)) $src = $SRC;
+
+ static $meta = null;
+ if(is_null($meta)) $meta = new JpegMeta($src);
+ if($meta === false) return $alt;
+ $info = $meta->getField($tags);
+ if($info == false) return $alt;
+ return $info;
+}
+
+/**
+ * Prints the image with a link to the full sized version
+ *
+ * Only allowed in: detail.php
+ */
+function tpl_img($maxwidth=0,$maxheight=0){
+ global $IMG;
+ $w = tpl_img_getTag('File.Width');
+ $h = tpl_img_getTag('File.Height');
+
+ //resize to given max values
+ $ratio = 1;
+ if($w >= $h){
+ if($maxwidth && $w >= $maxwidth){
+ $ratio = $maxwidth/$w;
+ }elseif($maxheight && $h > $maxheight){
+ $ratio = $maxheight/$h;
+ }
+ }else{
+ if($maxheight && $h >= $maxheight){
+ $ratio = $maxheight/$h;
+ }elseif($maxwidth && $w > $maxwidth){
+ $ratio = $maxwidth/$w;
+ }
+ }
+ if($ratio){
+ $w = floor($ratio*$w);
+ $h = floor($ratio*$h);
+ }
+
+ //prepare URLs
+ $url=ml($IMG,array('cache'=>$_REQUEST['cache']));
+ $src=ml($IMG,array('cache'=>$_REQUEST['cache'],'w'=>$w,'h'=>$h));
+
+ //prepare attributes
+ $alt=tpl_img_getTag('Simple.Title');
+ $p = array();
+ if($w) $p['width'] = $w;
+ if($h) $p['height'] = $h;
+ $p['class'] = 'img_detail';
+ if($alt){
+ $p['alt'] = $alt;
+ $p['title'] = $alt;
+ }else{
+ $p['alt'] = '';
+ }
+ $p = buildAttributes($p);
+
+ print '<a href="'.$url.'">';
+ print '<img src="'.$src.'" '.$p.'/>';
+ print '</a>';
+ return true;
+}
+
+/**
+ * This function inserts a 1x1 pixel gif which in reality
+ * is the indexer function.
+ *
+ * Should be called somewhere at the very end of the main.php
+ * template
+ */
+function tpl_indexerWebBug(){
+ global $ID;
+ global $INFO;
+ if(!$INFO['exists']) return false;
+
+ if(isHiddenPage($ID)) return false; //no need to index hidden pages
+
+ $p = array();
+ $p['src'] = DOKU_BASE.'lib/exe/indexer.php?id='.rawurlencode($ID).
+ '&'.time();
+ $p['width'] = 1;
+ $p['height'] = 1;
+ $p['alt'] = '';
+ $att = buildAttributes($p);
+ print "<img $att />";
+ return true;
+}
+
+// configuration methods
+/**
+ * tpl_getConf($id)
+ *
+ * use this function to access template configuration variables
+ */
+function tpl_getConf($id){
+ global $conf;
+ global $tpl_configloaded;
+
+ $tpl = $conf['template'];
+
+ if (!$tpl_configloaded){
+ $tconf = tpl_loadConfig();
+ if ($tconf !== false){
+ foreach ($tconf as $key => $value){
+ if (isset($conf['tpl'][$tpl][$key])) continue;
+ $conf['tpl'][$tpl][$key] = $value;
+ }
+ $tpl_configloaded = true;
+ }
+ }
+
+ return $conf['tpl'][$tpl][$id];
+}
+
+/**
+ * tpl_loadConfig()
+ * reads all template configuration variables
+ * this function is automatically called by tpl_getConf()
+ */
+function tpl_loadConfig(){
+
+ $file = DOKU_TPLINC.'/conf/default.php';
+ $conf = array();
+
+ if (!@file_exists($file)) return false;
+
+ // load default config file
+ include($file);
+
+ return $conf;
+}
+
+/**
+ * prints the "main content" in the mediamanger popup
+ *
+ * Depending on the user's actions this may be a list of
+ * files in a namespace, the meta editing dialog or
+ * a message of referencing pages
+ *
+ * Only allowed in mediamanager.php
+ *
+ * @triggers MEDIAMANAGER_CONTENT_OUTPUT
+ * @param bool $fromajax - set true when calling this function via ajax
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_mediaContent($fromajax=false){
+ global $IMG;
+ global $AUTH;
+ global $INUSE;
+ global $NS;
+ global $JUMPTO;
+
+ if(is_array($_REQUEST['do'])){
+ $do = array_shift(array_keys($_REQUEST['do']));
+ }else{
+ $do = $_REQUEST['do'];
+ }
+ if(in_array($do,array('save','cancel'))) $do = '';
+
+ if(!$do){
+ if($_REQUEST['edit']){
+ $do = 'metaform';
+ }elseif(is_array($INUSE)){
+ $do = 'filesinuse';
+ }else{
+ $do = 'filelist';
+ }
+ }
+
+ // output the content pane, wrapped in an event.
+ if(!$fromajax) ptln('<div id="media__content">');
+ $data = array( 'do' => $do);
+ $evt = new Doku_Event('MEDIAMANAGER_CONTENT_OUTPUT', $data);
+ if ($evt->advise_before()) {
+ $do = $data['do'];
+ if($do == 'metaform'){
+ media_metaform($IMG,$AUTH);
+ }elseif($do == 'filesinuse'){
+ media_filesinuse($INUSE,$IMG);
+ }elseif($do == 'filelist'){
+ media_filelist($NS,$AUTH,$JUMPTO);
+ }elseif($do == 'searchlist'){
+ media_searchlist($_REQUEST['q'],$NS,$AUTH);
+ }else{
+ msg('Unknown action '.hsc($do),-1);
+ }
+ }
+ $evt->advise_after();
+ unset($evt);
+ if(!$fromajax) ptln('</div>');
+
+}
+
+/**
+ * prints the namespace tree in the mediamanger popup
+ *
+ * Only allowed in mediamanager.php
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_mediaTree(){
+ global $NS;
+
+ ptln('<div id="media__tree">');
+ media_nstree($NS);
+ ptln('</div>');
+}
+
+
+/**
+ * Print a dropdown menu with all DokuWiki actions
+ *
+ * Note: this will not use any pretty URLs
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tpl_actiondropdown($empty='',$button='&gt;'){
+ global $ID;
+ global $INFO;
+ global $REV;
+ global $ACT;
+ global $conf;
+ global $lang;
+ global $auth;
+
+
+ echo '<form method="post" accept-charset="utf-8">'; #FIXME action
+ echo '<input type="hidden" name="id" value="'.$ID.'" />';
+ if($REV) echo '<input type="hidden" name="rev" value="'.$REV.'" />';
+ echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />';
+
+ echo '<select name="do" id="action__selector" class="edit">';
+ echo '<option value="">'.$empty.'</option>';
+
+ echo '<optgroup label=" &mdash; ">';
+ // 'edit' - most complicated type, we need to decide on current action
+ if($ACT == 'show' || $ACT == 'search'){
+ if($INFO['writable']){
+ if(!empty($INFO['draft'])) {
+ echo '<option value="edit">'.$lang['btn_draft'].'</option>';
+ } else {
+ if($INFO['exists']){
+ echo '<option value="edit">'.$lang['btn_edit'].'</option>';
+ }else{
+ echo '<option value="edit">'.$lang['btn_create'].'</option>';
+ }
+ }
+ }else if(actionOK('source')) { //pseudo action
+ echo '<option value="edit">'.$lang['btn_source'].'</option>';
+ }
+ }else{
+ echo '<option value="show">'.$lang['btn_show'].'</option>';
+ }
+
+ echo '<option value="revisions">'.$lang['btn_revs'].'</option>';
+ if($INFO['ismanager'] && $REV && $INFO['writable'] && actionOK('revert')){
+ echo '<option value="revert">'.$lang['btn_revert'].'</option>';
+ }
+ echo '<option value="backlink">'.$lang['btn_backlink'].'</option>';
+ echo '</optgroup>';
+
+ echo '<optgroup label=" &mdash; ">';
+ echo '<option value="recent">'.$lang['btn_recent'].'</option>';
+ echo '<option value="index">'.$lang['btn_index'].'</option>';
+ echo '</optgroup>';
+
+ echo '<optgroup label=" &mdash; ">';
+ if($conf['useacl'] && $auth){
+ if($_SERVER['REMOTE_USER']){
+ echo '<option value="logout">'.$lang['btn_logout'].'</option>';
+ }else{
+ echo '<option value="login">'.$lang['btn_login'].'</option>';
+ }
+ }
+
+ if($conf['useacl'] && $auth && $_SERVER['REMOTE_USER'] &&
+ $auth->canDo('Profile') && ($ACT!='profile')){
+ echo '<option value="profile">'.$lang['btn_profile'].'</option>';
+ }
+
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribed']) {
+ echo '<option value="unsubscribe">'.$lang['btn_unsubscribe'].'</option>';
+ } else {
+ echo '<option value="subscribe">'.$lang['btn_subscribe'].'</option>';
+ }
+ }
+ }
+
+ if($conf['useacl'] && $auth && $ACT == 'show' && $conf['subscribers'] == 1){
+ if($_SERVER['REMOTE_USER']){
+ if($INFO['subscribedns']) {
+ echo '<option value="unsubscribens">'.$lang['btn_unsubscribens'].'</option>';
+ } else {
+ echo '<option value="subscribens">'.$lang['btn_subscribens'].'</option>';
+ }
+ }
+ }
+
+ if($INFO['ismanager']){
+ echo '<option value="admin">'.$lang['btn_admin'].'</option>';
+ }
+ echo '</optgroup>';
+
+ echo '</select>';
+ echo '<input type="submit" value="'.$button.'" id="action__selectorbtn" />';
+ echo '</form>';
+}
+
+/**
+ * Print a informational line about the used license
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $img - print image? (|button|badge)
+ * @param bool $return - when true don't print, but return HTML
+ */
+function tpl_license($img='badge',$imgonly=false,$return=false){
+ global $license;
+ global $conf;
+ global $lang;
+ if(!$conf['license']) return '';
+ if(!is_array($license[$conf['license']])) return '';
+ $lic = $license[$conf['license']];
+
+ $out = '<div class="license">';
+ if($img){
+ $src = license_img($img);
+ if($src){
+ $out .= '<a href="'.$lic['url'].'" rel="license"';
+ if($conf['target']['external']) $out .= ' target="'.$conf['target']['external'].'"';
+ $out .= '><img src="'.DOKU_BASE.$src.'" class="medialeft lic'.$img.'" alt="'.$lic['name'].'" /></a> ';
+ }
+ }
+ if(!$imgonly) {
+ $out .= $lang['license'];
+ $out .= '<a href="'.$lic['url'].'" rel="license" class="urlextern"';
+ if(isset($conf['target']['external'])) $out .= ' target="'.$conf['target']['external'].'"';
+ $out .= '>'.$lic['name'].'</a>';
+ }
+ $out .= '</div>';
+
+ if($return) return $out;
+ echo $out;
+}
+
+
+/**
+ * Includes the rendered XHTML of a given page
+ *
+ * This function is useful to populate sidebars or similar features in a
+ * template
+ */
+function tpl_include_page($pageid,$print=true){
+ global $ID;
+ $oldid = $ID;
+ $html = p_wiki_xhtml($pageid,'',false);
+ $ID = $oldid;
+
+ if(!$print) return $html;
+ echo $html;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php b/mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php
new file mode 100644
index 000000000..9140970d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php
@@ -0,0 +1,241 @@
+<?php
+/**
+ * Editing toolbar functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) die('meh.');
+require_once(DOKU_INC.'inc/JSON.php');
+
+
+/**
+ * Prepares and prints an JavaScript array with all toolbar buttons
+ *
+ * @emits TOOLBAR_DEFINE
+ * @param string $varname Name of the JS variable to fill
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function toolbar_JSdefines($varname){
+ global $ID;
+ global $conf;
+ global $lang;
+
+ $menu = array();
+
+ $evt = new Doku_Event('TOOLBAR_DEFINE', $menu);
+ if ($evt->advise_before()){
+
+ // build button array
+ $menu = array_merge($menu, array(
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_bold'],
+ 'icon' => 'bold.png',
+ 'key' => 'b',
+ 'open' => '**',
+ 'close' => '**',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_italic'],
+ 'icon' => 'italic.png',
+ 'key' => 'i',
+ 'open' => '//',
+ 'close' => '//',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_underl'],
+ 'icon' => 'underline.png',
+ 'key' => 'u',
+ 'open' => '__',
+ 'close' => '__',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_code'],
+ 'icon' => 'mono.png',
+ 'key' => 'c',
+ 'open' => "''",
+ 'close' => "''",
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_strike'],
+ 'icon' => 'strike.png',
+ 'key' => 'd',
+ 'open' => '<del>',
+ 'close' => '</del>',
+ ),
+
+ array(
+ 'type' => 'autohead',
+ 'title' => $lang['qb_hequal'],
+ 'icon' => 'hequal.png',
+ 'key' => '8',
+ 'text' => $lang['qb_h'],
+ 'mod' => 0
+ ),
+ array(
+ 'type' => 'autohead',
+ 'title' => $lang['qb_hminus'],
+ 'icon' => 'hminus.png',
+ 'key' => '9',
+ 'text' => $lang['qb_h'],
+ 'mod' => 1
+ ),
+ array(
+ 'type' => 'autohead',
+ 'title' => $lang['qb_hplus'],
+ 'icon' => 'hplus.png',
+ 'key' => '0',
+ 'text' => $lang['qb_h'],
+ 'mod' => -1
+ ),
+
+ array(
+ 'type' => 'picker',
+ 'title' => $lang['qb_hs'],
+ 'icon' => 'h.png',
+ 'class' => 'pk_hl',
+ 'list' => array(
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_h1'],
+ 'icon' => 'h1.png',
+ 'key' => '1',
+ 'open' => '====== ',
+ 'close' => ' ======\n',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_h2'],
+ 'icon' => 'h2.png',
+ 'key' => '2',
+ 'open' => '===== ',
+ 'close' => ' =====\n',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_h3'],
+ 'icon' => 'h3.png',
+ 'key' => '3',
+ 'open' => '==== ',
+ 'close' => ' ====\n',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_h4'],
+ 'icon' => 'h4.png',
+ 'key' => '4',
+ 'open' => '=== ',
+ 'close' => ' ===\n',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_h5'],
+ 'icon' => 'h5.png',
+ 'key' => '5',
+ 'open' => '== ',
+ 'close' => ' ==\n',
+ ),
+ )
+ ),
+
+ array(
+ 'type' => 'linkwiz',
+ 'title' => $lang['qb_link'],
+ 'icon' => 'link.png',
+ 'key' => 'l',
+ 'open' => '[[',
+ 'close' => ']]',
+ ),
+ array(
+ 'type' => 'format',
+ 'title' => $lang['qb_extlink'],
+ 'icon' => 'linkextern.png',
+ 'open' => '[[',
+ 'close' => ']]',
+ 'sample' => 'http://example.com|'.$lang['qb_extlink'],
+ ),
+ array(
+ 'type' => 'formatln',
+ 'title' => $lang['qb_ol'],
+ 'icon' => 'ol.png',
+ 'open' => ' - ',
+ 'close' => '',
+ 'key' => '-',
+ ),
+ array(
+ 'type' => 'formatln',
+ 'title' => $lang['qb_ul'],
+ 'icon' => 'ul.png',
+ 'open' => ' * ',
+ 'close' => '',
+ 'key' => '.',
+ ),
+ array(
+ 'type' => 'insert',
+ 'title' => $lang['qb_hr'],
+ 'icon' => 'hr.png',
+ 'insert' => '\n----\n',
+ ),
+ array(
+ 'type' => 'mediapopup',
+ 'title' => $lang['qb_media'],
+ 'icon' => 'image.png',
+ 'url' => 'lib/exe/mediamanager.php?ns=',
+ 'name' => 'mediaselect',
+ 'options'=> 'width=750,height=500,left=20,top=20,scrollbars=yes,resizable=yes',
+ ),
+ array(
+ 'type' => 'picker',
+ 'title' => $lang['qb_smileys'],
+ 'icon' => 'smiley.png',
+ 'list' => getSmileys(),
+ 'icobase'=> 'smileys',
+ ),
+ array(
+ 'type' => 'picker',
+ 'title' => $lang['qb_chars'],
+ 'icon' => 'chars.png',
+ 'list' => explode(' ','À à à á  â à ã Ä ä Ç ÇŽ Ä‚ ă Ã… Ã¥ Ä€ Ä Ä„ Ä… Æ æ Ć ć Ç ç ÄŒ Ä Äˆ ĉ ÄŠ Ä‹ à đ ð ÄŽ Ä Ãˆ è É é Ê ê Ë ë Äš Ä› Ä’ Ä“ Ä– Ä— Ę Ä™ Ä¢ Ä£ Äœ Ä Äž ÄŸ Ä  Ä¡ Ĥ Ä¥ ÃŒ ì à í ÃŽ î à ï Ç Ç Äª Ä« Ä° ı Ä® į Ä´ ĵ Ķ Ä· Ĺ ĺ Ä» ļ Ľ ľ Å Å‚ Ä¿ Å€ Ń Å„ Ñ ñ Å… ņ Ň ň Ã’ ò Ó ó Ô ô Õ õ Ö ö Ç‘ Ç’ ÅŒ Å Å Å‘ Å’ Å“ Ø ø Å” Å• Å– Å— Ř Å™ Åš Å› Åž ÅŸ Å  Å¡ Åœ ŠŢ Å£ Ť Å¥ Ù ù Ú ú Û û Ãœ ü Ç“ Ç” Ŭ Å­ Ū Å« Å® ů Ç– ǘ Çš Çœ Ų ų Å° ű Å´ ŵ à ý Ÿ ÿ Ŷ Å· Ź ź Ž ž Å» ż Þ þ ß Ħ ħ ¿ ¡ ¢ £ ¤ Â¥ € ¦ § ª ¬ ¯ ° ± ÷ ‰ ¼ ½ ¾ ¹ ² ³ µ ¶ † ‡ · • º ∀ ∂ ∃ Æ É™ ∅ ∇ ∈ ∉ ∋ ∠∑ ‾ − ∗ √ ∠∞ ∠ ∧ ∨ ∩ ∪ ∫ ∴ ∼ ≅ ≈ ≠ ≡ ≤ ≥ ⊂ ⊃ ⊄ ⊆ ⊇ ⊕ ⊗ ⊥ â‹… â—Š ℘ â„‘ â„œ ℵ â™  ♣ ♥ ♦ α β Γ γ Δ δ ε ζ η Θ θ ι κ Λ λ μ Ξ ξ Π Ï€ Ï Î£ σ Τ Ï„ Ï… Φ φ χ Ψ ψ Ω ω ★ ☆ ☎ ☚ ☛ ☜ ☠☞ ☟ ☹ ☺ ✔ ✘ × „ “ †‚ ‘ ’ « » ‹ › — – … ↠↑ → ↓ ↔ ⇠⇑ ⇒ ⇓ ⇔ © â„¢ ® ′ ″ [ ] { } ~ ( ) % § $ # | @'),
+ ),
+ array(
+ 'type' => 'signature',
+ 'title' => $lang['qb_sig'],
+ 'icon' => 'sig.png',
+ 'key' => 'y',
+ ),
+ ));
+ } // end event TOOLBAR_DEFINE default action
+ $evt->advise_after();
+ unset($evt);
+
+ // use JSON to build the JavaScript array
+ $json = new JSON();
+ print "var $varname = ".$json->encode($menu).";\n";
+}
+
+/**
+ * prepares the signature string as configured in the config
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function toolbar_signature(){
+ global $conf;
+ global $INFO;
+
+ $sig = $conf['signature'];
+ $sig = strftime($sig);
+ $sig = str_replace('@USER@',$_SERVER['REMOTE_USER'],$sig);
+ $sig = str_replace('@NAME@',$INFO['userinfo']['name'],$sig);
+ $sig = str_replace('@MAIL@',$INFO['userinfo']['mail'],$sig);
+ $sig = str_replace('@DATE@',dformat(),$sig);
+ $sig = str_replace('\\\\n','\\n',addslashes($sig));
+ return $sig;
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/inc/utf8.php b/mod/dokuwiki/vendors/dokuwiki/inc/utf8.php
new file mode 100644
index 000000000..b078540d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/utf8.php
@@ -0,0 +1,1657 @@
+<?php
+/**
+ * UTF8 helper functions
+ *
+ * @license LGPL (http://www.gnu.org/copyleft/lesser.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+/**
+ * check for mb_string support
+ */
+if(!defined('UTF8_MBSTRING')){
+ if(function_exists('mb_substr') && !defined('UTF8_NOMBSTRING')){
+ define('UTF8_MBSTRING',1);
+ }else{
+ define('UTF8_MBSTRING',0);
+ }
+}
+
+if(UTF8_MBSTRING){ mb_internal_encoding('UTF-8'); }
+
+if(!function_exists('utf8_encodeFN')){
+ /**
+ * URL-Encode a filename to allow unicodecharacters
+ *
+ * Slashes are not encoded
+ *
+ * When the second parameter is true the string will
+ * be encoded only if non ASCII characters are detected -
+ * This makes it safe to run it multiple times on the
+ * same string (default is true)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see urlencode
+ */
+ function utf8_encodeFN($file,$safe=true){
+ if($safe && preg_match('#^[a-zA-Z0-9/_\-.%]+$#',$file)){
+ return $file;
+ }
+ $file = urlencode($file);
+ $file = str_replace('%2F','/',$file);
+ return $file;
+ }
+}
+
+if(!function_exists('utf8_decodeFN')){
+ /**
+ * URL-Decode a filename
+ *
+ * This is just a wrapper around urldecode
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see urldecode
+ */
+ function utf8_decodeFN($file){
+ $file = urldecode($file);
+ return $file;
+ }
+}
+
+if(!function_exists('utf8_isASCII')){
+ /**
+ * Checks if a string contains 7bit ASCII only
+ *
+ * @author Andreas Haerter <netzmeister@andreas-haerter.de>
+ */
+ function utf8_isASCII($str){
+ return (preg_match('/(?:[^\x00-\x7F])/', $str) !== 1);
+ }
+}
+
+if(!function_exists('utf8_strip')){
+ /**
+ * Strips all highbyte chars
+ *
+ * Returns a pure ASCII7 string
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function utf8_strip($str){
+ $ascii = '';
+ $len = strlen($str);
+ for($i=0; $i<$len; $i++){
+ if(ord($str{$i}) <128){
+ $ascii .= $str{$i};
+ }
+ }
+ return $ascii;
+ }
+}
+
+if(!function_exists('utf8_check')){
+ /**
+ * Tries to detect if a string is in Unicode encoding
+ *
+ * @author <bmorel@ssi.fr>
+ * @link http://www.php.net/manual/en/function.utf8-encode.php
+ */
+ function utf8_check($Str) {
+ $len = strlen($Str);
+ for ($i=0; $i<$len; $i++) {
+ $b = ord($Str[$i]);
+ if ($b < 0x80) continue; # 0bbbbbbb
+ elseif (($b & 0xE0) == 0xC0) $n=1; # 110bbbbb
+ elseif (($b & 0xF0) == 0xE0) $n=2; # 1110bbbb
+ elseif (($b & 0xF8) == 0xF0) $n=3; # 11110bbb
+ elseif (($b & 0xFC) == 0xF8) $n=4; # 111110bb
+ elseif (($b & 0xFE) == 0xFC) $n=5; # 1111110b
+ else return false; # Does not match any model
+
+ for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
+ if ((++$i == $len) || ((ord($Str[$i]) & 0xC0) != 0x80))
+ return false;
+ }
+ }
+ return true;
+ }
+}
+
+if(!function_exists('utf8_strlen')){
+ /**
+ * Unicode aware replacement for strlen()
+ *
+ * utf8_decode() converts characters that are not in ISO-8859-1
+ * to '?', which, for the purpose of counting, is alright - It's
+ * even faster than mb_strlen.
+ *
+ * @author <chernyshevsky at hotmail dot com>
+ * @see strlen()
+ * @see utf8_decode()
+ */
+ function utf8_strlen($string){
+ return strlen(utf8_decode($string));
+ }
+}
+
+if(!function_exists('utf8_substr')){
+ /**
+ * UTF-8 aware alternative to substr
+ *
+ * Return part of a string given character offset (and optionally length)
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @param string
+ * @param integer number of UTF-8 characters offset (from left)
+ * @param integer (optional) length in UTF-8 characters from offset
+ * @return mixed string or false if failure
+ */
+ function utf8_substr($str, $offset, $length = null) {
+ if(UTF8_MBSTRING){
+ if( $length === null ){
+ return mb_substr($str, $offset);
+ }else{
+ return mb_substr($str, $offset, $length);
+ }
+ }
+
+ /*
+ * Notes:
+ *
+ * no mb string support, so we'll use pcre regex's with 'u' flag
+ * pcre only supports repetitions of less than 65536, in order to accept up to MAXINT values for
+ * offset and length, we'll repeat a group of 65535 characters when needed (ok, up to MAXINT-65536)
+ *
+ * substr documentation states false can be returned in some cases (e.g. offset > string length)
+ * mb_substr never returns false, it will return an empty string instead.
+ *
+ * calculating the number of characters in the string is a relatively expensive operation, so
+ * we only carry it out when necessary. It isn't necessary for +ve offsets and no specified length
+ */
+
+ // cast parameters to appropriate types to avoid multiple notices/warnings
+ $str = (string)$str; // generates E_NOTICE for PHP4 objects, but not PHP5 objects
+ $offset = (int)$offset;
+ if (!is_null($length)) $length = (int)$length;
+
+ // handle trivial cases
+ if ($length === 0) return '';
+ if ($offset < 0 && $length < 0 && $length < $offset) return '';
+
+ $offset_pattern = '';
+ $length_pattern = '';
+
+ // normalise -ve offsets (we could use a tail anchored pattern, but they are horribly slow!)
+ if ($offset < 0) {
+ $strlen = strlen(utf8_decode($str)); // see notes
+ $offset = $strlen + $offset;
+ if ($offset < 0) $offset = 0;
+ }
+
+ // establish a pattern for offset, a non-captured group equal in length to offset
+ if ($offset > 0) {
+ $Ox = (int)($offset/65535);
+ $Oy = $offset%65535;
+
+ if ($Ox) $offset_pattern = '(?:.{65535}){'.$Ox.'}';
+ $offset_pattern = '^(?:'.$offset_pattern.'.{'.$Oy.'})';
+ } else {
+ $offset_pattern = '^'; // offset == 0; just anchor the pattern
+ }
+
+ // establish a pattern for length
+ if (is_null($length)) {
+ $length_pattern = '(.*)$'; // the rest of the string
+ } else {
+
+ if (!isset($strlen)) $strlen = strlen(utf8_decode($str)); // see notes
+ if ($offset > $strlen) return ''; // another trivial case
+
+ if ($length > 0) {
+
+ $length = min($strlen-$offset, $length); // reduce any length that would go passed the end of the string
+
+ $Lx = (int)($length/65535);
+ $Ly = $length%65535;
+
+ // +ve length requires ... a captured group of length characters
+ if ($Lx) $length_pattern = '(?:.{65535}){'.$Lx.'}';
+ $length_pattern = '('.$length_pattern.'.{'.$Ly.'})';
+
+ } else if ($length < 0) {
+
+ if ($length < ($offset - $strlen)) return '';
+
+ $Lx = (int)((-$length)/65535);
+ $Ly = (-$length)%65535;
+
+ // -ve length requires ... capture everything except a group of -length characters
+ // anchored at the tail-end of the string
+ if ($Lx) $length_pattern = '(?:.{65535}){'.$Lx.'}';
+ $length_pattern = '(.*)(?:'.$length_pattern.'.{'.$Ly.'})$';
+ }
+ }
+
+ if (!preg_match('#'.$offset_pattern.$length_pattern.'#us',$str,$match)) return '';
+ return $match[1];
+ }
+}
+
+if(!function_exists('utf8_substr_replace')){
+ /**
+ * Unicode aware replacement for substr_replace()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see substr_replace()
+ */
+ function utf8_substr_replace($string, $replacement, $start , $length=0 ){
+ $ret = '';
+ if($start>0) $ret .= utf8_substr($string, 0, $start);
+ $ret .= $replacement;
+ $ret .= utf8_substr($string, $start+$length);
+ return $ret;
+ }
+}
+
+if(!function_exists('utf8_ltrim')){
+ /**
+ * Unicode aware replacement for ltrim()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see ltrim()
+ * @return string
+ */
+ function utf8_ltrim($str,$charlist=''){
+ if($charlist == '') return ltrim($str);
+
+ //quote charlist for use in a characterclass
+ $charlist = preg_replace('!([\\\\\\-\\]\\[/])!','\\\${1}',$charlist);
+
+ return preg_replace('/^['.$charlist.']+/u','',$str);
+ }
+}
+
+if(!function_exists('utf8_rtrim')){
+ /**
+ * Unicode aware replacement for rtrim()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see rtrim()
+ * @return string
+ */
+ function utf8_rtrim($str,$charlist=''){
+ if($charlist == '') return rtrim($str);
+
+ //quote charlist for use in a characterclass
+ $charlist = preg_replace('!([\\\\\\-\\]\\[/])!','\\\${1}',$charlist);
+
+ return preg_replace('/['.$charlist.']+$/u','',$str);
+ }
+}
+
+if(!function_exists('utf8_trim')){
+ /**
+ * Unicode aware replacement for trim()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see trim()
+ * @return string
+ */
+ function utf8_trim($str,$charlist='') {
+ if($charlist == '') return trim($str);
+
+ return utf8_ltrim(utf8_rtrim($str,$charlist),$charlist);
+ }
+}
+
+if(!function_exists('utf8_strtolower')){
+ /**
+ * This is a unicode aware replacement for strtolower()
+ *
+ * Uses mb_string extension if available
+ *
+ * @author Leo Feyer <leo@typolight.org>
+ * @see strtolower()
+ * @see utf8_strtoupper()
+ */
+ function utf8_strtolower($string){
+ if(UTF8_MBSTRING) return mb_strtolower($string,'utf-8');
+
+ global $UTF8_UPPER_TO_LOWER;
+ return strtr($string,$UTF8_UPPER_TO_LOWER);
+ }
+}
+
+if(!function_exists('utf8_strtoupper')){
+ /**
+ * This is a unicode aware replacement for strtoupper()
+ *
+ * Uses mb_string extension if available
+ *
+ * @author Leo Feyer <leo@typolight.org>
+ * @see strtoupper()
+ * @see utf8_strtoupper()
+ */
+ function utf8_strtoupper($string){
+ if(UTF8_MBSTRING) return mb_strtoupper($string,'utf-8');
+
+ global $UTF8_LOWER_TO_UPPER;
+ return strtr($string,$UTF8_LOWER_TO_UPPER);
+ }
+}
+
+if(!function_exists('utf8_ucfirst')){
+ /**
+ * UTF-8 aware alternative to ucfirst
+ * Make a string's first character uppercase
+ *
+ * @author Harry Fuecks
+ * @param string
+ * @return string with first character as upper case (if applicable)
+ */
+ function utf8_ucfirst($str){
+ switch ( utf8_strlen($str) ) {
+ case 0:
+ return '';
+ case 1:
+ return utf8_strtoupper($str);
+ default:
+ preg_match('/^(.{1})(.*)$/us', $str, $matches);
+ return utf8_strtoupper($matches[1]).$matches[2];
+ }
+ }
+}
+
+if(!function_exists('utf8_ucwords')){
+ /**
+ * UTF-8 aware alternative to ucwords
+ * Uppercase the first character of each word in a string
+ *
+ * @author Harry Fuecks
+ * @param string
+ * @return string with first char of each word uppercase
+ * @see http://www.php.net/ucwords
+ */
+ function utf8_ucwords($str) {
+ // Note: [\x0c\x09\x0b\x0a\x0d\x20] matches;
+ // form feeds, horizontal tabs, vertical tabs, linefeeds and carriage returns
+ // This corresponds to the definition of a "word" defined at http://www.php.net/ucwords
+ $pattern = '/(^|([\x0c\x09\x0b\x0a\x0d\x20]+))([^\x0c\x09\x0b\x0a\x0d\x20]{1})[^\x0c\x09\x0b\x0a\x0d\x20]*/u';
+
+ return preg_replace_callback($pattern, 'utf8_ucwords_callback',$str);
+ }
+
+ /**
+ * Callback function for preg_replace_callback call in utf8_ucwords
+ * You don't need to call this yourself
+ *
+ * @author Harry Fuecks
+ * @param array of matches corresponding to a single word
+ * @return string with first char of the word in uppercase
+ * @see utf8_ucwords
+ * @see utf8_strtoupper
+ */
+ function utf8_ucwords_callback($matches) {
+ $leadingws = $matches[2];
+ $ucfirst = utf8_strtoupper($matches[3]);
+ $ucword = utf8_substr_replace(ltrim($matches[0]),$ucfirst,0,1);
+ return $leadingws . $ucword;
+ }
+}
+
+if(!function_exists('utf8_deaccent')){
+ /**
+ * Replace accented UTF-8 characters by unaccented ASCII-7 equivalents
+ *
+ * Use the optional parameter to just deaccent lower ($case = -1) or upper ($case = 1)
+ * letters. Default is to deaccent both cases ($case = 0)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function utf8_deaccent($string,$case=0){
+ if($case <= 0){
+ global $UTF8_LOWER_ACCENTS;
+ $string = strtr($string,$UTF8_LOWER_ACCENTS);
+ }
+ if($case >= 0){
+ global $UTF8_UPPER_ACCENTS;
+ $string = strtr($string,$UTF8_UPPER_ACCENTS);
+ }
+ return $string;
+ }
+}
+
+if(!function_exists('utf8_romanize')){
+ /**
+ * Romanize a non-latin string
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function utf8_romanize($string){
+ if(utf8_isASCII($string)) return $string; //nothing to do
+
+ global $UTF8_ROMANIZATION;
+ return strtr($string,$UTF8_ROMANIZATION);
+ }
+}
+
+if(!function_exists('utf8_stripspecials')){
+ /**
+ * Removes special characters (nonalphanumeric) from a UTF-8 string
+ *
+ * This function adds the controlchars 0x00 to 0x19 to the array of
+ * stripped chars (they are not included in $UTF8_SPECIAL_CHARS)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string $string The UTF8 string to strip of special chars
+ * @param string $repl Replace special with this string
+ * @param string $additional Additional chars to strip (used in regexp char class)
+ */
+ function utf8_stripspecials($string,$repl='',$additional=''){
+ global $UTF8_SPECIAL_CHARS;
+ global $UTF8_SPECIAL_CHARS2;
+
+ static $specials = null;
+ if(is_null($specials)){
+ #$specials = preg_quote(unicode_to_utf8($UTF8_SPECIAL_CHARS), '/');
+ $specials = preg_quote($UTF8_SPECIAL_CHARS2, '/');
+ }
+
+ return preg_replace('/['.$additional.'\x00-\x19'.$specials.']/u',$repl,$string);
+ }
+}
+
+if(!function_exists('utf8_strpos')){
+ /**
+ * This is an Unicode aware replacement for strpos
+ *
+ * @author Leo Feyer <leo@typolight.org>
+ * @see strpos()
+ * @param string
+ * @param string
+ * @param integer
+ * @return integer
+ */
+ function utf8_strpos($haystack, $needle, $offset=0){
+ $comp = 0;
+ $length = null;
+
+ while (is_null($length) || $length < $offset) {
+ $pos = strpos($haystack, $needle, $offset + $comp);
+
+ if ($pos === false)
+ return false;
+
+ $length = utf8_strlen(substr($haystack, 0, $pos));
+
+ if ($length < $offset)
+ $comp = $pos - $length;
+ }
+
+ return $length;
+ }
+}
+
+if(!function_exists('utf8_tohtml')){
+ /**
+ * Encodes UTF-8 characters to HTML entities
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @author <vpribish at shopping dot com>
+ * @link http://www.php.net/manual/en/function.utf8-decode.php
+ */
+ function utf8_tohtml ($str) {
+ $ret = '';
+ foreach (utf8_to_unicode($str) as $cp) {
+ if ($cp < 0x80)
+ $ret .= chr($cp);
+ elseif ($cp < 0x100)
+ $ret .= "&#$cp;";
+ else
+ $ret .= '&#x'.dechex($cp).';';
+ }
+ return $ret;
+ }
+}
+
+if(!function_exists('utf8_unhtml')){
+ /**
+ * Decodes HTML entities to UTF-8 characters
+ *
+ * Convert any &#..; entity to a codepoint,
+ * The entities flag defaults to only decoding numeric entities.
+ * Pass HTML_ENTITIES and named entities, including &amp; &lt; etc.
+ * are handled as well. Avoids the problem that would occur if you
+ * had to decode "&amp;#38;&#38;amp;#38;"
+ *
+ * unhtmlspecialchars(utf8_unhtml($s)) -> "&#38;&#38;"
+ * utf8_unhtml(unhtmlspecialchars($s)) -> "&&amp#38;"
+ * what it should be -> "&#38;&amp#38;"
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @param string $str UTF-8 encoded string
+ * @param boolean $entities Flag controlling decoding of named entities.
+ * @return UTF-8 encoded string with numeric (and named) entities replaced.
+ */
+ function utf8_unhtml($str, $entities=null) {
+ static $decoder = null;
+ if (is_null($decoder))
+ $decoder = new utf8_entity_decoder();
+ if (is_null($entities))
+ return preg_replace_callback('/(&#([Xx])?([0-9A-Za-z]+);)/m',
+ 'utf8_decode_numeric', $str);
+ else
+ return preg_replace_callback('/&(#)?([Xx])?([0-9A-Za-z]+);/m',
+ array(&$decoder, 'decode'), $str);
+ }
+}
+
+if(!function_exists('utf8_decode_numeric')){
+ function utf8_decode_numeric($ent) {
+ switch ($ent[2]) {
+ case 'X':
+ case 'x':
+ $cp = hexdec($ent[3]);
+ break;
+ default:
+ $cp = intval($ent[3]);
+ break;
+ }
+ return unicode_to_utf8(array($cp));
+ }
+}
+
+if(!class_exists('utf8_entity_decoder')){
+ class utf8_entity_decoder {
+ var $table;
+ function utf8_entity_decoder() {
+ $table = get_html_translation_table(HTML_ENTITIES);
+ $table = array_flip($table);
+ $this->table = array_map(array(&$this,'makeutf8'), $table);
+ }
+ function makeutf8($c) {
+ return unicode_to_utf8(array(ord($c)));
+ }
+ function decode($ent) {
+ if ($ent[1] == '#') {
+ return utf8_decode_numeric($ent);
+ } elseif (array_key_exists($ent[0],$this->table)) {
+ return $this->table[$ent[0]];
+ } else {
+ return $ent[0];
+ }
+ }
+ }
+}
+
+if(!function_exists('utf8_to_unicode')){
+ /**
+ * Takes an UTF-8 string and returns an array of ints representing the
+ * Unicode characters. Astral planes are supported ie. the ints in the
+ * output can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates
+ * are not allowed.
+ *
+ * If $strict is set to true the function returns false if the input
+ * string isn't a valid UTF-8 octet sequence and raises a PHP error at
+ * level E_USER_WARNING
+ *
+ * Note: this function has been modified slightly in this library to
+ * trigger errors on encountering bad bytes
+ *
+ * @author <hsivonen@iki.fi>
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @param string UTF-8 encoded string
+ * @param boolean Check for invalid sequences?
+ * @return mixed array of unicode code points or false if UTF-8 invalid
+ * @see unicode_to_utf8
+ * @link http://hsivonen.iki.fi/php-utf8/
+ * @link http://sourceforge.net/projects/phputf8/
+ */
+ function utf8_to_unicode($str,$strict=false) {
+ $mState = 0; // cached expected number of octets after the current octet
+ // until the beginning of the next UTF8 character sequence
+ $mUcs4 = 0; // cached Unicode character
+ $mBytes = 1; // cached expected number of octets in the current sequence
+
+ $out = array();
+
+ $len = strlen($str);
+
+ for($i = 0; $i < $len; $i++) {
+
+ $in = ord($str{$i});
+
+ if ( $mState == 0) {
+
+ // When mState is zero we expect either a US-ASCII character or a
+ // multi-octet sequence.
+ if (0 == (0x80 & ($in))) {
+ // US-ASCII, pass straight through.
+ $out[] = $in;
+ $mBytes = 1;
+
+ } else if (0xC0 == (0xE0 & ($in))) {
+ // First octet of 2 octet sequence
+ $mUcs4 = ($in);
+ $mUcs4 = ($mUcs4 & 0x1F) << 6;
+ $mState = 1;
+ $mBytes = 2;
+
+ } else if (0xE0 == (0xF0 & ($in))) {
+ // First octet of 3 octet sequence
+ $mUcs4 = ($in);
+ $mUcs4 = ($mUcs4 & 0x0F) << 12;
+ $mState = 2;
+ $mBytes = 3;
+
+ } else if (0xF0 == (0xF8 & ($in))) {
+ // First octet of 4 octet sequence
+ $mUcs4 = ($in);
+ $mUcs4 = ($mUcs4 & 0x07) << 18;
+ $mState = 3;
+ $mBytes = 4;
+
+ } else if (0xF8 == (0xFC & ($in))) {
+ /* First octet of 5 octet sequence.
+ *
+ * This is illegal because the encoded codepoint must be either
+ * (a) not the shortest form or
+ * (b) outside the Unicode range of 0-0x10FFFF.
+ * Rather than trying to resynchronize, we will carry on until the end
+ * of the sequence and let the later error handling code catch it.
+ */
+ $mUcs4 = ($in);
+ $mUcs4 = ($mUcs4 & 0x03) << 24;
+ $mState = 4;
+ $mBytes = 5;
+
+ } else if (0xFC == (0xFE & ($in))) {
+ // First octet of 6 octet sequence, see comments for 5 octet sequence.
+ $mUcs4 = ($in);
+ $mUcs4 = ($mUcs4 & 1) << 30;
+ $mState = 5;
+ $mBytes = 6;
+
+ } elseif($strict) {
+ /* Current octet is neither in the US-ASCII range nor a legal first
+ * octet of a multi-octet sequence.
+ */
+ trigger_error(
+ 'utf8_to_unicode: Illegal sequence identifier '.
+ 'in UTF-8 at byte '.$i,
+ E_USER_WARNING
+ );
+ return false;
+
+ }
+
+ } else {
+
+ // When mState is non-zero, we expect a continuation of the multi-octet
+ // sequence
+ if (0x80 == (0xC0 & ($in))) {
+
+ // Legal continuation.
+ $shift = ($mState - 1) * 6;
+ $tmp = $in;
+ $tmp = ($tmp & 0x0000003F) << $shift;
+ $mUcs4 |= $tmp;
+
+ /**
+ * End of the multi-octet sequence. mUcs4 now contains the final
+ * Unicode codepoint to be output
+ */
+ if (0 == --$mState) {
+
+ /*
+ * Check for illegal sequences and codepoints.
+ */
+ // From Unicode 3.1, non-shortest form is illegal
+ if (((2 == $mBytes) && ($mUcs4 < 0x0080)) ||
+ ((3 == $mBytes) && ($mUcs4 < 0x0800)) ||
+ ((4 == $mBytes) && ($mUcs4 < 0x10000)) ||
+ (4 < $mBytes) ||
+ // From Unicode 3.2, surrogate characters are illegal
+ (($mUcs4 & 0xFFFFF800) == 0xD800) ||
+ // Codepoints outside the Unicode range are illegal
+ ($mUcs4 > 0x10FFFF)) {
+
+ if($strict){
+ trigger_error(
+ 'utf8_to_unicode: Illegal sequence or codepoint '.
+ 'in UTF-8 at byte '.$i,
+ E_USER_WARNING
+ );
+
+ return false;
+ }
+
+ }
+
+ if (0xFEFF != $mUcs4) {
+ // BOM is legal but we don't want to output it
+ $out[] = $mUcs4;
+ }
+
+ //initialize UTF8 cache
+ $mState = 0;
+ $mUcs4 = 0;
+ $mBytes = 1;
+ }
+
+ } elseif($strict) {
+ /**
+ *((0xC0 & (*in) != 0x80) && (mState != 0))
+ * Incomplete multi-octet sequence.
+ */
+ trigger_error(
+ 'utf8_to_unicode: Incomplete multi-octet '.
+ ' sequence in UTF-8 at byte '.$i,
+ E_USER_WARNING
+ );
+
+ return false;
+ }
+ }
+ }
+ return $out;
+ }
+}
+
+if(!function_exists('unicode_to_utf8')){
+ /**
+ * Takes an array of ints representing the Unicode characters and returns
+ * a UTF-8 string. Astral planes are supported ie. the ints in the
+ * input can be > 0xFFFF. Occurrances of the BOM are ignored. Surrogates
+ * are not allowed.
+ *
+ * If $strict is set to true the function returns false if the input
+ * array contains ints that represent surrogates or are outside the
+ * Unicode range and raises a PHP error at level E_USER_WARNING
+ *
+ * Note: this function has been modified slightly in this library to use
+ * output buffering to concatenate the UTF-8 string (faster) as well as
+ * reference the array by it's keys
+ *
+ * @param array of unicode code points representing a string
+ * @param boolean Check for invalid sequences?
+ * @return mixed UTF-8 string or false if array contains invalid code points
+ * @author <hsivonen@iki.fi>
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @see utf8_to_unicode
+ * @link http://hsivonen.iki.fi/php-utf8/
+ * @link http://sourceforge.net/projects/phputf8/
+ */
+ function unicode_to_utf8($arr,$strict=false) {
+ if (!is_array($arr)) return '';
+ ob_start();
+
+ foreach (array_keys($arr) as $k) {
+
+ if ( ($arr[$k] >= 0) && ($arr[$k] <= 0x007f) ) {
+ # ASCII range (including control chars)
+
+ echo chr($arr[$k]);
+
+ } else if ($arr[$k] <= 0x07ff) {
+ # 2 byte sequence
+
+ echo chr(0xc0 | ($arr[$k] >> 6));
+ echo chr(0x80 | ($arr[$k] & 0x003f));
+
+ } else if($arr[$k] == 0xFEFF) {
+ # Byte order mark (skip)
+
+ // nop -- zap the BOM
+
+ } else if ($arr[$k] >= 0xD800 && $arr[$k] <= 0xDFFF) {
+ # Test for illegal surrogates
+
+ // found a surrogate
+ if($strict){
+ trigger_error(
+ 'unicode_to_utf8: Illegal surrogate '.
+ 'at index: '.$k.', value: '.$arr[$k],
+ E_USER_WARNING
+ );
+ return false;
+ }
+
+ } else if ($arr[$k] <= 0xffff) {
+ # 3 byte sequence
+
+ echo chr(0xe0 | ($arr[$k] >> 12));
+ echo chr(0x80 | (($arr[$k] >> 6) & 0x003f));
+ echo chr(0x80 | ($arr[$k] & 0x003f));
+
+ } else if ($arr[$k] <= 0x10ffff) {
+ # 4 byte sequence
+
+ echo chr(0xf0 | ($arr[$k] >> 18));
+ echo chr(0x80 | (($arr[$k] >> 12) & 0x3f));
+ echo chr(0x80 | (($arr[$k] >> 6) & 0x3f));
+ echo chr(0x80 | ($arr[$k] & 0x3f));
+
+ } elseif($strict) {
+
+ trigger_error(
+ 'unicode_to_utf8: Codepoint out of Unicode range '.
+ 'at index: '.$k.', value: '.$arr[$k],
+ E_USER_WARNING
+ );
+
+ // out of range
+ return false;
+ }
+ }
+
+ $result = ob_get_contents();
+ ob_end_clean();
+ return $result;
+ }
+}
+
+if(!function_exists('utf8_to_utf16be')){
+ /**
+ * UTF-8 to UTF-16BE conversion.
+ *
+ * Maybe really UCS-2 without mb_string due to utf8_to_unicode limits
+ */
+ function utf8_to_utf16be(&$str, $bom = false) {
+ $out = $bom ? "\xFE\xFF" : '';
+ if(UTF8_MBSTRING) return $out.mb_convert_encoding($str,'UTF-16BE','UTF-8');
+
+ $uni = utf8_to_unicode($str);
+ foreach($uni as $cp){
+ $out .= pack('n',$cp);
+ }
+ return $out;
+ }
+}
+
+if(!function_exists('utf16be_to_utf8')){
+ /**
+ * UTF-8 to UTF-16BE conversion.
+ *
+ * Maybe really UCS-2 without mb_string due to utf8_to_unicode limits
+ */
+ function utf16be_to_utf8(&$str) {
+ $uni = unpack('n*',$str);
+ return unicode_to_utf8($uni);
+ }
+}
+
+if(!function_exists('utf8_bad_replace')){
+ /**
+ * Replace bad bytes with an alternative character
+ *
+ * ASCII character is recommended for replacement char
+ *
+ * PCRE Pattern to locate bad bytes in a UTF-8 string
+ * Comes from W3 FAQ: Multilingual Forms
+ * Note: modified to include full ASCII range including control chars
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @see http://www.w3.org/International/questions/qa-forms-utf-8
+ * @param string to search
+ * @param string to replace bad bytes with (defaults to '?') - use ASCII
+ * @return string
+ */
+ function utf8_bad_replace($str, $replace = '') {
+ $UTF8_BAD =
+ '([\x00-\x7F]'. # ASCII (including control chars)
+ '|[\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
+ '|(.{1}))'; # invalid byte
+ ob_start();
+ while (preg_match('/'.$UTF8_BAD.'/S', $str, $matches)) {
+ if ( !isset($matches[2])) {
+ echo $matches[0];
+ } else {
+ echo $replace;
+ }
+ $str = substr($str,strlen($matches[0]));
+ }
+ $result = ob_get_contents();
+ ob_end_clean();
+ return $result;
+ }
+}
+
+if(!function_exists('utf8_correctIdx')){
+ /**
+ * adjust a byte index into a utf8 string to a utf8 character boundary
+ *
+ * @param $str string utf8 character string
+ * @param $i int byte index into $str
+ * @param $next bool direction to search for boundary,
+ * false = up (current character)
+ * true = down (next character)
+ *
+ * @return int byte index into $str now pointing to a utf8 character boundary
+ *
+ * @author chris smith <chris@jalakai.co.uk>
+ */
+ function utf8_correctIdx(&$str,$i,$next=false) {
+
+ if ($i <= 0) return 0;
+
+ $limit = strlen($str);
+ if ($i>=$limit) return $limit;
+
+ if ($next) {
+ while (($i<$limit) && ((ord($str[$i]) & 0xC0) == 0x80)) $i++;
+ } else {
+ while ($i && ((ord($str[$i]) & 0xC0) == 0x80)) $i--;
+ }
+
+ return $i;
+ }
+}
+
+// only needed if no mb_string available
+if(!UTF8_MBSTRING){
+ /**
+ * UTF-8 Case lookup table
+ *
+ * This lookuptable defines the upper case letters to their correspponding
+ * lower case letter in UTF-8
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ global $UTF8_LOWER_TO_UPPER;
+ if(empty($UTF8_LOWER_TO_UPPER)) $UTF8_LOWER_TO_UPPER = array(
+ "z"=>"Z","y"=>"Y","x"=>"X","w"=>"W","v"=>"V","u"=>"U","t"=>"T","s"=>"S","r"=>"R","q"=>"Q",
+ "ï½"=>"ï¼°","ï½"=>"O","n"=>"ï¼®","ï½"=>"ï¼­","l"=>"L","k"=>"K","j"=>"J","i"=>"I","h"=>"H","g"=>"G",
+ "f"=>"F","ï½…"=>"ï¼¥","d"=>"D","c"=>"ï¼£","b"=>"ï¼¢","ï½"=>"A","ῳ"=>"ῼ","á¿¥"=>"Ῥ","á¿¡"=>"á¿©","á¿‘"=>"á¿™",
+ "á¿"=>"Ῐ","ῃ"=>"á¿Œ","á¾¾"=>"Ι","á¾³"=>"á¾¼","á¾±"=>"á¾¹","á¾°"=>"Ᾰ","ᾧ"=>"ᾯ","ᾦ"=>"á¾®","á¾¥"=>"á¾­","ᾤ"=>"ᾬ",
+ "á¾£"=>"ᾫ","á¾¢"=>"ᾪ","ᾡ"=>"ᾩ","á¾—"=>"ᾟ","á¾–"=>"ᾞ","ᾕ"=>"á¾","á¾”"=>"ᾜ","ᾓ"=>"á¾›","á¾’"=>"ᾚ","ᾑ"=>"á¾™",
+ "á¾"=>"ᾘ","ᾇ"=>"á¾","ᾆ"=>"ᾎ","á¾…"=>"á¾","ᾄ"=>"ᾌ","ᾃ"=>"ᾋ","ᾂ"=>"ᾊ","á¾"=>"ᾉ","á¾€"=>"ᾈ","á½½"=>"á¿»",
+ "ὼ"=>"Ὼ","ύ"=>"Ύ","ὺ"=>"Ὺ","ό"=>"Ό","ὸ"=>"Ὸ","ί"=>"Ί","ὶ"=>"Ὶ","ή"=>"Ή","ὴ"=>"Ὴ","έ"=>"Έ",
+ "ὲ"=>"Ὲ","ά"=>"Ά","ὰ"=>"Ὰ","ὧ"=>"Ὧ","ὦ"=>"Ὦ","ὥ"=>"Ὥ","ὤ"=>"Ὤ","ὣ"=>"Ὣ","ὢ"=>"Ὢ","ὡ"=>"Ὡ",
+ "á½—"=>"Ὗ","ὕ"=>"á½","ὓ"=>"á½›","ὑ"=>"á½™","á½…"=>"á½","ὄ"=>"Ὄ","ὃ"=>"Ὃ","ὂ"=>"Ὂ","á½"=>"Ὁ","á½€"=>"Ὀ",
+ "ἷ"=>"Ἷ","ἶ"=>"Ἶ","ἵ"=>"Ἵ","ἴ"=>"Ἴ","ἳ"=>"Ἳ","ἲ"=>"Ἲ","ἱ"=>"Ἱ","ἰ"=>"Ἰ","ἧ"=>"Ἧ","ἦ"=>"Ἦ",
+ "á¼¥"=>"á¼­","ἤ"=>"Ἤ","á¼£"=>"Ἣ","á¼¢"=>"Ἢ","ἡ"=>"Ἡ","ἕ"=>"á¼","á¼”"=>"Ἔ","ἓ"=>"á¼›","á¼’"=>"Ἒ","ἑ"=>"á¼™",
+ "á¼"=>"Ἐ","ἇ"=>"á¼","ἆ"=>"Ἆ","á¼…"=>"á¼","ἄ"=>"Ἄ","ἃ"=>"Ἃ","ἂ"=>"Ἂ","á¼"=>"Ἁ","á¼€"=>"Ἀ","ỹ"=>"Ỹ",
+ "ỷ"=>"Ỷ","ỵ"=>"Ỵ","ỳ"=>"Ỳ","ự"=>"Ự","ữ"=>"Ữ","ử"=>"Ử","ừ"=>"Ừ","ứ"=>"Ứ","ủ"=>"Ủ","ụ"=>"Ụ",
+ "ợ"=>"Ợ","ỡ"=>"á» ","ở"=>"Ở","á»"=>"Ờ","á»›"=>"Ớ","á»™"=>"Ộ","á»—"=>"á»–","ổ"=>"á»”","ồ"=>"á»’","ố"=>"á»",
+ "á»"=>"Ỏ","á»"=>"Ọ","ị"=>"Ị","ỉ"=>"Ỉ","ệ"=>"Ệ","á»…"=>"Ễ","ể"=>"Ể","á»"=>"Ề","ế"=>"Ế","ẽ"=>"Ẽ",
+ "ẻ"=>"Ẻ","ẹ"=>"Ẹ","ặ"=>"Ặ","ẵ"=>"Ẵ","ẳ"=>"Ẳ","ằ"=>"Ằ","ắ"=>"Ắ","ậ"=>"Ậ","ẫ"=>"Ẫ","ẩ"=>"Ẩ",
+ "ầ"=>"Ầ","ấ"=>"Ấ","ả"=>"Ả","ạ"=>"Ạ","ẛ"=>"á¹ ","ẕ"=>"Ẕ","ẓ"=>"Ẓ","ẑ"=>"áº","áº"=>"Ẏ","áº"=>"Ẍ",
+ "ẋ"=>"Ẋ","ẉ"=>"Ẉ","ẇ"=>"Ẇ","ẅ"=>"Ẅ","ẃ"=>"Ẃ","áº"=>"Ẁ","ṿ"=>"á¹¾","á¹½"=>"á¹¼","á¹»"=>"Ṻ","á¹¹"=>"Ṹ",
+ "ṷ"=>"Ṷ","ṵ"=>"Ṵ","ṳ"=>"Ṳ","ṱ"=>"Ṱ","ṯ"=>"Ṯ","ṭ"=>"Ṭ","ṫ"=>"Ṫ","ṩ"=>"Ṩ","ṧ"=>"Ṧ","ṥ"=>"Ṥ",
+ "á¹£"=>"á¹¢","ṡ"=>"á¹ ","ṟ"=>"Ṟ","á¹"=>"Ṝ","á¹›"=>"Ṛ","á¹™"=>"Ṙ","á¹—"=>"á¹–","ṕ"=>"á¹”","ṓ"=>"á¹’","ṑ"=>"á¹",
+ "á¹"=>"Ṏ","á¹"=>"Ṍ","ṋ"=>"Ṋ","ṉ"=>"Ṉ","ṇ"=>"Ṇ","á¹…"=>"Ṅ","ṃ"=>"Ṃ","á¹"=>"á¹€","ḿ"=>"Ḿ","ḽ"=>"Ḽ",
+ "ḻ"=>"Ḻ","ḹ"=>"Ḹ","ḷ"=>"Ḷ","ḵ"=>"Ḵ","ḳ"=>"Ḳ","ḱ"=>"Ḱ","ḯ"=>"Ḯ","ḭ"=>"Ḭ","ḫ"=>"Ḫ","ḩ"=>"Ḩ",
+ "ḧ"=>"Ḧ","ḥ"=>"Ḥ","ḣ"=>"Ḣ","ḡ"=>"Ḡ","ḟ"=>"Ḟ","á¸"=>"Ḝ","ḛ"=>"Ḛ","ḙ"=>"Ḙ","ḗ"=>"Ḗ","ḕ"=>"Ḕ",
+ "ḓ"=>"Ḓ","ḑ"=>"á¸","á¸"=>"Ḏ","á¸"=>"Ḍ","ḋ"=>"Ḋ","ḉ"=>"Ḉ","ḇ"=>"Ḇ","ḅ"=>"Ḅ","ḃ"=>"Ḃ","á¸"=>"Ḁ",
+ "Ö†"=>"Õ–","Ö…"=>"Õ•","Ö„"=>"Õ”","Öƒ"=>"Õ“","Ö‚"=>"Õ’","Ö"=>"Õ‘","Ö€"=>"Õ","Õ¿"=>"Õ","Õ¾"=>"ÕŽ","Õ½"=>"Õ",
+ "ռ"=>"Ռ","ջ"=>"Ջ","պ"=>"Պ","չ"=>"Չ","ո"=>"Ո","շ"=>"Շ","ն"=>"Ն","յ"=>"Յ","մ"=>"Մ","ճ"=>"Ճ",
+ "Õ²"=>"Õ‚","Õ±"=>"Õ","Õ°"=>"Õ€","Õ¯"=>"Ô¿","Õ®"=>"Ô¾","Õ­"=>"Ô½","Õ¬"=>"Ô¼","Õ«"=>"Ô»","Õª"=>"Ôº","Õ©"=>"Ô¹",
+ "Õ¨"=>"Ô¸","Õ§"=>"Ô·","Õ¦"=>"Ô¶","Õ¥"=>"Ôµ","Õ¤"=>"Ô´","Õ£"=>"Ô³","Õ¢"=>"Ô²","Õ¡"=>"Ô±","Ô"=>"ÔŽ","Ô"=>"ÔŒ",
+ "Ô‹"=>"ÔŠ","Ô‰"=>"Ôˆ","Ô‡"=>"Ô†","Ô…"=>"Ô„","Ôƒ"=>"Ô‚","Ô"=>"Ô€","Ó¹"=>"Ó¸","Óµ"=>"Ó´","Ó³"=>"Ó²","Ó±"=>"Ó°",
+ "Ó¯"=>"Ó®","Ó­"=>"Ó¬","Ó«"=>"Óª","Ó©"=>"Ó¨","Ó§"=>"Ó¦","Ó¥"=>"Ó¤","Ó£"=>"Ó¢","Ó¡"=>"Ó ","ÓŸ"=>"Óž","Ó"=>"Óœ",
+ "Ó›"=>"Óš","Ó™"=>"Ó˜","Ó—"=>"Ó–","Ó•"=>"Ó”","Ó“"=>"Ó’","Ó‘"=>"Ó","ÓŽ"=>"Ó","ÓŒ"=>"Ó‹","ÓŠ"=>"Ó‰","Óˆ"=>"Ó‡",
+ "Ó†"=>"Ó…","Ó„"=>"Óƒ","Ó‚"=>"Ó","Ò¿"=>"Ò¾","Ò½"=>"Ò¼","Ò»"=>"Òº","Ò¹"=>"Ò¸","Ò·"=>"Ò¶","Òµ"=>"Ò´","Ò³"=>"Ò²",
+ "Ò±"=>"Ò°","Ò¯"=>"Ò®","Ò­"=>"Ò¬","Ò«"=>"Òª","Ò©"=>"Ò¨","Ò§"=>"Ò¦","Ò¥"=>"Ò¤","Ò£"=>"Ò¢","Ò¡"=>"Ò ","ÒŸ"=>"Òž",
+ "Ò"=>"Òœ","Ò›"=>"Òš","Ò™"=>"Ò˜","Ò—"=>"Ò–","Ò•"=>"Ò”","Ò“"=>"Ò’","Ò‘"=>"Ò","Ò"=>"ÒŽ","Ò"=>"ÒŒ","Ò‹"=>"ÒŠ",
+ "Ò"=>"Ò€","Ñ¿"=>"Ѿ","ѽ"=>"Ѽ","Ñ»"=>"Ѻ","ѹ"=>"Ѹ","Ñ·"=>"Ѷ","ѵ"=>"Ñ´","ѳ"=>"Ѳ","ѱ"=>"Ñ°","ѯ"=>"Ñ®",
+ "Ñ­"=>"Ѭ","Ñ«"=>"Ѫ","Ñ©"=>"Ѩ","ѧ"=>"Ѧ","Ñ¥"=>"Ѥ","Ñ£"=>"Ñ¢","Ñ¡"=>"Ñ ","ÑŸ"=>"Ð","Ñž"=>"ÐŽ","Ñ"=>"Ð",
+ "ќ"=>"Ќ","ћ"=>"Ћ","њ"=>"Њ","љ"=>"Љ","ј"=>"Ј","ї"=>"Ї","і"=>"І","ѕ"=>"Ѕ","є"=>"Є","ѓ"=>"Ѓ",
+ "Ñ’"=>"Ђ","Ñ‘"=>"Ð","Ñ"=>"Ѐ","Ñ"=>"Я","ÑŽ"=>"Ю","Ñ"=>"Э","ÑŒ"=>"Ь","Ñ‹"=>"Ы","ÑŠ"=>"Ъ","щ"=>"Щ",
+ "ш"=>"Ш","ч"=>"Ч","ц"=>"Ц","Ñ…"=>"Ð¥","Ñ„"=>"Ф","у"=>"У","Ñ‚"=>"Т","Ñ"=>"С","Ñ€"=>"Р","п"=>"П",
+ "о"=>"О","н"=>"Ð","м"=>"Ðœ","л"=>"Л","к"=>"К","й"=>"Й","и"=>"И","з"=>"З","ж"=>"Ж","е"=>"Е",
+ "д"=>"Д","г"=>"Г","в"=>"Ð’","б"=>"Б","а"=>"Ð","ϵ"=>"Ε","ϲ"=>"Σ","ϱ"=>"Ρ","Ï°"=>"Κ","ϯ"=>"Ï®",
+ "Ï­"=>"Ϭ","Ï«"=>"Ϫ","Ï©"=>"Ϩ","ϧ"=>"Ϧ","Ï¥"=>"Ϥ","Ï£"=>"Ï¢","Ï¡"=>"Ï ","ÏŸ"=>"Ïž","Ï"=>"Ïœ","Ï›"=>"Ïš",
+ "Ï™"=>"Ϙ","Ï–"=>"Π","Ï•"=>"Φ","Ï‘"=>"Θ","Ï"=>"Î’","ÏŽ"=>"Î","Ï"=>"ÎŽ","ÏŒ"=>"ÎŒ","Ï‹"=>"Ϋ","ÏŠ"=>"Ϊ",
+ "ω"=>"Ω","ψ"=>"Ψ","χ"=>"Χ","φ"=>"Φ","Ï…"=>"Î¥","Ï„"=>"Τ","σ"=>"Σ","Ï‚"=>"Σ","Ï"=>"Ρ","Ï€"=>"Π",
+ "ο"=>"Ο","ξ"=>"Ξ","ν"=>"Î","μ"=>"Îœ","λ"=>"Λ","κ"=>"Κ","ι"=>"Ι","θ"=>"Θ","η"=>"Η","ζ"=>"Ζ",
+ "ε"=>"Ε","δ"=>"Δ","γ"=>"Γ","β"=>"Β","α"=>"Α","ί"=>"Ί","ή"=>"Ή","έ"=>"Έ","ά"=>"Ά","ʒ"=>"Ʒ",
+ "Ê‹"=>"Ʋ","ÊŠ"=>"Ʊ","ʈ"=>"Æ®","ʃ"=>"Æ©","Ê€"=>"Ʀ","ɵ"=>"ÆŸ","ɲ"=>"Æ","ɯ"=>"Æœ","É©"=>"Æ–","ɨ"=>"Æ—",
+ "É£"=>"Æ”","É›"=>"Æ","É™"=>"Æ","É—"=>"ÆŠ","É–"=>"Ɖ","É”"=>"Ɔ","É“"=>"Æ","ȳ"=>"Ȳ","ȱ"=>"È°","ȯ"=>"È®",
+ "È­"=>"Ȭ","È«"=>"Ȫ","È©"=>"Ȩ","ȧ"=>"Ȧ","È¥"=>"Ȥ","È£"=>"È¢","ÈŸ"=>"Èž","È"=>"Èœ","È›"=>"Èš","È™"=>"Ș",
+ "È—"=>"È–","È•"=>"È”","È“"=>"È’","È‘"=>"È","È"=>"ÈŽ","È"=>"ÈŒ","È‹"=>"ÈŠ","ȉ"=>"Ȉ","ȇ"=>"Ȇ","È…"=>"È„",
+ "ȃ"=>"È‚","È"=>"È€","Ç¿"=>"Ǿ","ǽ"=>"Ǽ","Ç»"=>"Ǻ","ǹ"=>"Ǹ","ǵ"=>"Ç´","dz"=>"Dz","ǯ"=>"Ç®","Ç­"=>"Ǭ",
+ "Ç«"=>"Ǫ","Ç©"=>"Ǩ","ǧ"=>"Ǧ","Ç¥"=>"Ǥ","Ç£"=>"Ç¢","Ç¡"=>"Ç ","ÇŸ"=>"Çž","Ç"=>"ÆŽ","Çœ"=>"Ç›","Çš"=>"Ç™",
+ "ǘ"=>"Ç—","Ç–"=>"Ç•","Ç”"=>"Ç“","Ç’"=>"Ç‘","Ç"=>"Ç","ÇŽ"=>"Ç","ÇŒ"=>"Ç‹","lj"=>"Lj","dž"=>"Ç…","Æ¿"=>"Ç·",
+ "ƽ"=>"Ƽ","ƹ"=>"Ƹ","ƶ"=>"Ƶ","ƴ"=>"Ƴ","ư"=>"Ư","ƭ"=>"Ƭ","ƨ"=>"Ƨ","ƥ"=>"Ƥ","ƣ"=>"Ƣ","ơ"=>"Ơ",
+ "ƞ"=>"Ƞ","ƙ"=>"Ƙ","ƕ"=>"Ƕ","ƒ"=>"Ƒ","ƌ"=>"Ƌ","ƈ"=>"Ƈ","ƅ"=>"Ƅ","ƃ"=>"Ƃ","ſ"=>"S","ž"=>"Ž",
+ "ż"=>"Ż","ź"=>"Ź","ŷ"=>"Ŷ","ŵ"=>"Ŵ","ų"=>"Ų","ű"=>"Ű","ů"=>"Ů","ŭ"=>"Ŭ","ū"=>"Ū","ũ"=>"Ũ",
+ "ŧ"=>"Ŧ","Å¥"=>"Ť","Å£"=>"Å¢","Å¡"=>"Å ","ÅŸ"=>"Åž","Å"=>"Åœ","Å›"=>"Åš","Å™"=>"Ř","Å—"=>"Å–","Å•"=>"Å”",
+ "Å“"=>"Å’","Å‘"=>"Å","Å"=>"ÅŽ","Å"=>"ÅŒ","Å‹"=>"ÅŠ","ň"=>"Ň","ņ"=>"Å…","Å„"=>"Ń","Å‚"=>"Å","Å€"=>"Ä¿",
+ "ľ"=>"Ľ","ļ"=>"Ļ","ĺ"=>"Ĺ","ķ"=>"Ķ","ĵ"=>"Ĵ","ij"=>"IJ","ı"=>"I","į"=>"Į","ĭ"=>"Ĭ","ī"=>"Ī",
+ "Ä©"=>"Ĩ","ħ"=>"Ħ","Ä¥"=>"Ĥ","Ä£"=>"Ä¢","Ä¡"=>"Ä ","ÄŸ"=>"Äž","Ä"=>"Äœ","Ä›"=>"Äš","Ä™"=>"Ę","Ä—"=>"Ä–",
+ "Ä•"=>"Ä”","Ä“"=>"Ä’","Ä‘"=>"Ä","Ä"=>"ÄŽ","Ä"=>"ÄŒ","Ä‹"=>"ÄŠ","ĉ"=>"Ĉ","ć"=>"Ć","Ä…"=>"Ä„","ă"=>"Ä‚",
+ "Ä"=>"Ä€","ÿ"=>"Ÿ","þ"=>"Þ","ý"=>"Ã","ü"=>"Ãœ","û"=>"Û","ú"=>"Ú","ù"=>"Ù","ø"=>"Ø","ö"=>"Ö",
+ "õ"=>"Õ","ô"=>"Ô","ó"=>"Ó","ò"=>"Ã’","ñ"=>"Ñ","ð"=>"Ã","ï"=>"Ã","î"=>"ÃŽ","í"=>"Ã","ì"=>"ÃŒ",
+ "ë"=>"Ë","ê"=>"Ê","é"=>"É","è"=>"È","ç"=>"Ç","æ"=>"Æ","å"=>"Å","ä"=>"Ä","ã"=>"Ã","â"=>"Â",
+ "á"=>"Ã","à"=>"À","µ"=>"Îœ","z"=>"Z","y"=>"Y","x"=>"X","w"=>"W","v"=>"V","u"=>"U","t"=>"T",
+ "s"=>"S","r"=>"R","q"=>"Q","p"=>"P","o"=>"O","n"=>"N","m"=>"M","l"=>"L","k"=>"K","j"=>"J",
+ "i"=>"I","h"=>"H","g"=>"G","f"=>"F","e"=>"E","d"=>"D","c"=>"C","b"=>"B","a"=>"A"
+ );
+
+ /**
+ * UTF-8 Case lookup table
+ *
+ * This lookuptable defines the lower case letters to their correspponding
+ * upper case letter in UTF-8
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ global $UTF8_UPPER_TO_LOWER;
+ if(empty($UTF8_UPPER_TO_LOWER)) $UTF8_UPPER_TO_LOWER = array (
+ "Z"=>"z","Y"=>"y","X"=>"x","W"=>"w","V"=>"v","U"=>"u","T"=>"t","S"=>"s","R"=>"r","Q"=>"q",
+ "ï¼°"=>"ï½","O"=>"ï½","ï¼®"=>"n","ï¼­"=>"ï½","L"=>"l","K"=>"k","J"=>"j","I"=>"i","H"=>"h","G"=>"g",
+ "F"=>"f","ï¼¥"=>"ï½…","D"=>"d","ï¼£"=>"c","ï¼¢"=>"b","A"=>"ï½","ῼ"=>"ῳ","Ῥ"=>"á¿¥","á¿©"=>"á¿¡","á¿™"=>"á¿‘",
+ "Ῐ"=>"á¿","á¿Œ"=>"ῃ","Ι"=>"á¾¾","á¾¼"=>"á¾³","á¾¹"=>"á¾±","Ᾰ"=>"á¾°","ᾯ"=>"ᾧ","á¾®"=>"ᾦ","á¾­"=>"á¾¥","ᾬ"=>"ᾤ",
+ "ᾫ"=>"á¾£","ᾪ"=>"á¾¢","ᾩ"=>"ᾡ","ᾟ"=>"á¾—","ᾞ"=>"á¾–","á¾"=>"ᾕ","ᾜ"=>"á¾”","á¾›"=>"ᾓ","ᾚ"=>"á¾’","á¾™"=>"ᾑ",
+ "ᾘ"=>"á¾","á¾"=>"ᾇ","ᾎ"=>"ᾆ","á¾"=>"á¾…","ᾌ"=>"ᾄ","ᾋ"=>"ᾃ","ᾊ"=>"ᾂ","ᾉ"=>"á¾","ᾈ"=>"á¾€","á¿»"=>"á½½",
+ "Ὼ"=>"ὼ","Ύ"=>"ύ","Ὺ"=>"ὺ","Ό"=>"ό","Ὸ"=>"ὸ","Ί"=>"ί","Ὶ"=>"ὶ","Ή"=>"ή","Ὴ"=>"ὴ","Έ"=>"έ",
+ "Ὲ"=>"ὲ","Ά"=>"ά","Ὰ"=>"ὰ","Ὧ"=>"ὧ","Ὦ"=>"ὦ","Ὥ"=>"ὥ","Ὤ"=>"ὤ","Ὣ"=>"ὣ","Ὢ"=>"ὢ","Ὡ"=>"ὡ",
+ "Ὗ"=>"á½—","á½"=>"ὕ","á½›"=>"ὓ","á½™"=>"ὑ","á½"=>"á½…","Ὄ"=>"ὄ","Ὃ"=>"ὃ","Ὂ"=>"ὂ","Ὁ"=>"á½","Ὀ"=>"á½€",
+ "Ἷ"=>"ἷ","Ἶ"=>"ἶ","Ἵ"=>"ἵ","Ἴ"=>"ἴ","Ἳ"=>"ἳ","Ἲ"=>"ἲ","Ἱ"=>"ἱ","Ἰ"=>"ἰ","Ἧ"=>"ἧ","Ἦ"=>"ἦ",
+ "á¼­"=>"á¼¥","Ἤ"=>"ἤ","Ἣ"=>"á¼£","Ἢ"=>"á¼¢","Ἡ"=>"ἡ","á¼"=>"ἕ","Ἔ"=>"á¼”","á¼›"=>"ἓ","Ἒ"=>"á¼’","á¼™"=>"ἑ",
+ "Ἐ"=>"á¼","á¼"=>"ἇ","Ἆ"=>"ἆ","á¼"=>"á¼…","Ἄ"=>"ἄ","Ἃ"=>"ἃ","Ἂ"=>"ἂ","Ἁ"=>"á¼","Ἀ"=>"á¼€","Ỹ"=>"ỹ",
+ "Ỷ"=>"ỷ","Ỵ"=>"ỵ","Ỳ"=>"ỳ","Ự"=>"ự","Ữ"=>"ữ","Ử"=>"ử","Ừ"=>"ừ","Ứ"=>"ứ","Ủ"=>"ủ","Ụ"=>"ụ",
+ "Ợ"=>"ợ","á» "=>"ỡ","Ở"=>"ở","Ờ"=>"á»","Ớ"=>"á»›","Ộ"=>"á»™","á»–"=>"á»—","á»”"=>"ổ","á»’"=>"ồ","á»"=>"ố",
+ "Ỏ"=>"á»","Ọ"=>"á»","Ị"=>"ị","Ỉ"=>"ỉ","Ệ"=>"ệ","Ễ"=>"á»…","Ể"=>"ể","Ề"=>"á»","Ế"=>"ế","Ẽ"=>"ẽ",
+ "Ẻ"=>"ẻ","Ẹ"=>"ẹ","Ặ"=>"ặ","Ẵ"=>"ẵ","Ẳ"=>"ẳ","Ằ"=>"ằ","Ắ"=>"ắ","Ậ"=>"ậ","Ẫ"=>"ẫ","Ẩ"=>"ẩ",
+ "Ầ"=>"ầ","Ấ"=>"ấ","Ả"=>"ả","Ạ"=>"ạ","á¹ "=>"ẛ","Ẕ"=>"ẕ","Ẓ"=>"ẓ","áº"=>"ẑ","Ẏ"=>"áº","Ẍ"=>"áº",
+ "Ẋ"=>"ẋ","Ẉ"=>"ẉ","Ẇ"=>"ẇ","Ẅ"=>"ẅ","Ẃ"=>"ẃ","Ẁ"=>"áº","á¹¾"=>"ṿ","á¹¼"=>"á¹½","Ṻ"=>"á¹»","Ṹ"=>"á¹¹",
+ "Ṷ"=>"ṷ","Ṵ"=>"ṵ","Ṳ"=>"ṳ","Ṱ"=>"ṱ","Ṯ"=>"ṯ","Ṭ"=>"ṭ","Ṫ"=>"ṫ","Ṩ"=>"ṩ","Ṧ"=>"ṧ","Ṥ"=>"ṥ",
+ "á¹¢"=>"á¹£","á¹ "=>"ṡ","Ṟ"=>"ṟ","Ṝ"=>"á¹","Ṛ"=>"á¹›","Ṙ"=>"á¹™","á¹–"=>"á¹—","á¹”"=>"ṕ","á¹’"=>"ṓ","á¹"=>"ṑ",
+ "Ṏ"=>"á¹","Ṍ"=>"á¹","Ṋ"=>"ṋ","Ṉ"=>"ṉ","Ṇ"=>"ṇ","Ṅ"=>"á¹…","Ṃ"=>"ṃ","á¹€"=>"á¹","Ḿ"=>"ḿ","Ḽ"=>"ḽ",
+ "Ḻ"=>"ḻ","Ḹ"=>"ḹ","Ḷ"=>"ḷ","Ḵ"=>"ḵ","Ḳ"=>"ḳ","Ḱ"=>"ḱ","Ḯ"=>"ḯ","Ḭ"=>"ḭ","Ḫ"=>"ḫ","Ḩ"=>"ḩ",
+ "Ḧ"=>"ḧ","Ḥ"=>"ḥ","Ḣ"=>"ḣ","Ḡ"=>"ḡ","Ḟ"=>"ḟ","Ḝ"=>"á¸","Ḛ"=>"ḛ","Ḙ"=>"ḙ","Ḗ"=>"ḗ","Ḕ"=>"ḕ",
+ "Ḓ"=>"ḓ","á¸"=>"ḑ","Ḏ"=>"á¸","Ḍ"=>"á¸","Ḋ"=>"ḋ","Ḉ"=>"ḉ","Ḇ"=>"ḇ","Ḅ"=>"ḅ","Ḃ"=>"ḃ","Ḁ"=>"á¸",
+ "Õ–"=>"Ö†","Õ•"=>"Ö…","Õ”"=>"Ö„","Õ“"=>"Öƒ","Õ’"=>"Ö‚","Õ‘"=>"Ö","Õ"=>"Ö€","Õ"=>"Õ¿","ÕŽ"=>"Õ¾","Õ"=>"Õ½",
+ "Ռ"=>"ռ","Ջ"=>"ջ","Պ"=>"պ","Չ"=>"չ","Ո"=>"ո","Շ"=>"շ","Ն"=>"ն","Յ"=>"յ","Մ"=>"մ","Ճ"=>"ճ",
+ "Õ‚"=>"Õ²","Õ"=>"Õ±","Õ€"=>"Õ°","Ô¿"=>"Õ¯","Ô¾"=>"Õ®","Ô½"=>"Õ­","Ô¼"=>"Õ¬","Ô»"=>"Õ«","Ôº"=>"Õª","Ô¹"=>"Õ©",
+ "Ô¸"=>"Õ¨","Ô·"=>"Õ§","Ô¶"=>"Õ¦","Ôµ"=>"Õ¥","Ô´"=>"Õ¤","Ô³"=>"Õ£","Ô²"=>"Õ¢","Ô±"=>"Õ¡","ÔŽ"=>"Ô","ÔŒ"=>"Ô",
+ "ÔŠ"=>"Ô‹","Ôˆ"=>"Ô‰","Ô†"=>"Ô‡","Ô„"=>"Ô…","Ô‚"=>"Ôƒ","Ô€"=>"Ô","Ó¸"=>"Ó¹","Ó´"=>"Óµ","Ó²"=>"Ó³","Ó°"=>"Ó±",
+ "Ó®"=>"Ó¯","Ó¬"=>"Ó­","Óª"=>"Ó«","Ó¨"=>"Ó©","Ó¦"=>"Ó§","Ó¤"=>"Ó¥","Ó¢"=>"Ó£","Ó "=>"Ó¡","Óž"=>"ÓŸ","Óœ"=>"Ó",
+ "Óš"=>"Ó›","Ó˜"=>"Ó™","Ó–"=>"Ó—","Ó”"=>"Ó•","Ó’"=>"Ó“","Ó"=>"Ó‘","Ó"=>"ÓŽ","Ó‹"=>"ÓŒ","Ó‰"=>"ÓŠ","Ó‡"=>"Óˆ",
+ "Ó…"=>"Ó†","Óƒ"=>"Ó„","Ó"=>"Ó‚","Ò¾"=>"Ò¿","Ò¼"=>"Ò½","Òº"=>"Ò»","Ò¸"=>"Ò¹","Ò¶"=>"Ò·","Ò´"=>"Òµ","Ò²"=>"Ò³",
+ "Ò°"=>"Ò±","Ò®"=>"Ò¯","Ò¬"=>"Ò­","Òª"=>"Ò«","Ò¨"=>"Ò©","Ò¦"=>"Ò§","Ò¤"=>"Ò¥","Ò¢"=>"Ò£","Ò "=>"Ò¡","Òž"=>"ÒŸ",
+ "Òœ"=>"Ò","Òš"=>"Ò›","Ò˜"=>"Ò™","Ò–"=>"Ò—","Ò”"=>"Ò•","Ò’"=>"Ò“","Ò"=>"Ò‘","ÒŽ"=>"Ò","ÒŒ"=>"Ò","ÒŠ"=>"Ò‹",
+ "Ò€"=>"Ò","Ѿ"=>"Ñ¿","Ѽ"=>"ѽ","Ѻ"=>"Ñ»","Ѹ"=>"ѹ","Ѷ"=>"Ñ·","Ñ´"=>"ѵ","Ѳ"=>"ѳ","Ñ°"=>"ѱ","Ñ®"=>"ѯ",
+ "Ѭ"=>"Ñ­","Ѫ"=>"Ñ«","Ѩ"=>"Ñ©","Ѧ"=>"ѧ","Ѥ"=>"Ñ¥","Ñ¢"=>"Ñ£","Ñ "=>"Ñ¡","Ð"=>"ÑŸ","ÐŽ"=>"Ñž","Ð"=>"Ñ",
+ "Ќ"=>"ќ","Ћ"=>"ћ","Њ"=>"њ","Љ"=>"љ","Ј"=>"ј","Ї"=>"ї","І"=>"і","Ѕ"=>"ѕ","Є"=>"є","Ѓ"=>"ѓ",
+ "Ђ"=>"Ñ’","Ð"=>"Ñ‘","Ѐ"=>"Ñ","Я"=>"Ñ","Ю"=>"ÑŽ","Э"=>"Ñ","Ь"=>"ÑŒ","Ы"=>"Ñ‹","Ъ"=>"ÑŠ","Щ"=>"щ",
+ "Ш"=>"ш","Ч"=>"ч","Ц"=>"ц","Ð¥"=>"Ñ…","Ф"=>"Ñ„","У"=>"у","Т"=>"Ñ‚","С"=>"Ñ","Р"=>"Ñ€","П"=>"п",
+ "О"=>"о","Ð"=>"н","Ðœ"=>"м","Л"=>"л","К"=>"к","Й"=>"й","И"=>"и","З"=>"з","Ж"=>"ж","Е"=>"е",
+ "Д"=>"д","Г"=>"г","Ð’"=>"в","Б"=>"б","Ð"=>"а","Ε"=>"ϵ","Σ"=>"ϲ","Ρ"=>"ϱ","Κ"=>"Ï°","Ï®"=>"ϯ",
+ "Ϭ"=>"Ï­","Ϫ"=>"Ï«","Ϩ"=>"Ï©","Ϧ"=>"ϧ","Ϥ"=>"Ï¥","Ï¢"=>"Ï£","Ï "=>"Ï¡","Ïž"=>"ÏŸ","Ïœ"=>"Ï","Ïš"=>"Ï›",
+ "Ϙ"=>"Ï™","Π"=>"Ï–","Φ"=>"Ï•","Θ"=>"Ï‘","Î’"=>"Ï","Î"=>"ÏŽ","ÎŽ"=>"Ï","ÎŒ"=>"ÏŒ","Ϋ"=>"Ï‹","Ϊ"=>"ÏŠ",
+ "Ω"=>"ω","Ψ"=>"ψ","Χ"=>"χ","Φ"=>"φ","Î¥"=>"Ï…","Τ"=>"Ï„","Σ"=>"σ","Σ"=>"Ï‚","Ρ"=>"Ï","Π"=>"Ï€",
+ "Ο"=>"ο","Ξ"=>"ξ","Î"=>"ν","Îœ"=>"μ","Λ"=>"λ","Κ"=>"κ","Ι"=>"ι","Θ"=>"θ","Η"=>"η","Ζ"=>"ζ",
+ "Ε"=>"ε","Δ"=>"δ","Γ"=>"γ","Β"=>"β","Α"=>"α","Ί"=>"ί","Ή"=>"ή","Έ"=>"έ","Ά"=>"ά","Ʒ"=>"ʒ",
+ "Ʋ"=>"Ê‹","Ʊ"=>"ÊŠ","Æ®"=>"ʈ","Æ©"=>"ʃ","Ʀ"=>"Ê€","ÆŸ"=>"ɵ","Æ"=>"ɲ","Æœ"=>"ɯ","Æ–"=>"É©","Æ—"=>"ɨ",
+ "Æ”"=>"É£","Æ"=>"É›","Æ"=>"É™","ÆŠ"=>"É—","Ɖ"=>"É–","Ɔ"=>"É”","Æ"=>"É“","Ȳ"=>"ȳ","È°"=>"ȱ","È®"=>"ȯ",
+ "Ȭ"=>"È­","Ȫ"=>"È«","Ȩ"=>"È©","Ȧ"=>"ȧ","Ȥ"=>"È¥","È¢"=>"È£","Èž"=>"ÈŸ","Èœ"=>"È","Èš"=>"È›","Ș"=>"È™",
+ "È–"=>"È—","È”"=>"È•","È’"=>"È“","È"=>"È‘","ÈŽ"=>"È","ÈŒ"=>"È","ÈŠ"=>"È‹","Ȉ"=>"ȉ","Ȇ"=>"ȇ","È„"=>"È…",
+ "È‚"=>"ȃ","È€"=>"È","Ǿ"=>"Ç¿","Ǽ"=>"ǽ","Ǻ"=>"Ç»","Ǹ"=>"ǹ","Ç´"=>"ǵ","Dz"=>"dz","Ç®"=>"ǯ","Ǭ"=>"Ç­",
+ "Ǫ"=>"Ç«","Ǩ"=>"Ç©","Ǧ"=>"ǧ","Ǥ"=>"Ç¥","Ç¢"=>"Ç£","Ç "=>"Ç¡","Çž"=>"ÇŸ","ÆŽ"=>"Ç","Ç›"=>"Çœ","Ç™"=>"Çš",
+ "Ç—"=>"ǘ","Ç•"=>"Ç–","Ç“"=>"Ç”","Ç‘"=>"Ç’","Ç"=>"Ç","Ç"=>"ÇŽ","Ç‹"=>"ÇŒ","Lj"=>"lj","Ç…"=>"dž","Ç·"=>"Æ¿",
+ "Ƽ"=>"ƽ","Ƹ"=>"ƹ","Ƶ"=>"ƶ","Ƴ"=>"ƴ","Ư"=>"ư","Ƭ"=>"ƭ","Ƨ"=>"ƨ","Ƥ"=>"ƥ","Ƣ"=>"ƣ","Ơ"=>"ơ",
+ "Ƞ"=>"ƞ","Ƙ"=>"ƙ","Ƕ"=>"ƕ","Ƒ"=>"ƒ","Ƌ"=>"ƌ","Ƈ"=>"ƈ","Ƅ"=>"ƅ","Ƃ"=>"ƃ","S"=>"ſ","Ž"=>"ž",
+ "Ż"=>"ż","Ź"=>"ź","Ŷ"=>"ŷ","Ŵ"=>"ŵ","Ų"=>"ų","Ű"=>"ű","Ů"=>"ů","Ŭ"=>"ŭ","Ū"=>"ū","Ũ"=>"ũ",
+ "Ŧ"=>"ŧ","Ť"=>"Å¥","Å¢"=>"Å£","Å "=>"Å¡","Åž"=>"ÅŸ","Åœ"=>"Å","Åš"=>"Å›","Ř"=>"Å™","Å–"=>"Å—","Å”"=>"Å•",
+ "Å’"=>"Å“","Å"=>"Å‘","ÅŽ"=>"Å","ÅŒ"=>"Å","ÅŠ"=>"Å‹","Ň"=>"ň","Å…"=>"ņ","Ń"=>"Å„","Å"=>"Å‚","Ä¿"=>"Å€",
+ "Ľ"=>"ľ","Ļ"=>"ļ","Ĺ"=>"ĺ","Ķ"=>"ķ","Ĵ"=>"ĵ","IJ"=>"ij","I"=>"ı","Į"=>"į","Ĭ"=>"ĭ","Ī"=>"ī",
+ "Ĩ"=>"Ä©","Ħ"=>"ħ","Ĥ"=>"Ä¥","Ä¢"=>"Ä£","Ä "=>"Ä¡","Äž"=>"ÄŸ","Äœ"=>"Ä","Äš"=>"Ä›","Ę"=>"Ä™","Ä–"=>"Ä—",
+ "Ä”"=>"Ä•","Ä’"=>"Ä“","Ä"=>"Ä‘","ÄŽ"=>"Ä","ÄŒ"=>"Ä","ÄŠ"=>"Ä‹","Ĉ"=>"ĉ","Ć"=>"ć","Ä„"=>"Ä…","Ä‚"=>"ă",
+ "Ä€"=>"Ä","Ÿ"=>"ÿ","Þ"=>"þ","Ã"=>"ý","Ãœ"=>"ü","Û"=>"û","Ú"=>"ú","Ù"=>"ù","Ø"=>"ø","Ö"=>"ö",
+ "Õ"=>"õ","Ô"=>"ô","Ó"=>"ó","Ã’"=>"ò","Ñ"=>"ñ","Ã"=>"ð","Ã"=>"ï","ÃŽ"=>"î","Ã"=>"í","ÃŒ"=>"ì",
+ "Ë"=>"ë","Ê"=>"ê","É"=>"é","È"=>"è","Ç"=>"ç","Æ"=>"æ","Å"=>"å","Ä"=>"ä","Ã"=>"ã","Â"=>"â",
+ "Ã"=>"á","À"=>"à","Îœ"=>"µ","Z"=>"z","Y"=>"y","X"=>"x","W"=>"w","V"=>"v","U"=>"u","T"=>"t",
+ "S"=>"s","R"=>"r","Q"=>"q","P"=>"p","O"=>"o","N"=>"n","M"=>"m","L"=>"l","K"=>"k","J"=>"j",
+ "I"=>"i","H"=>"h","G"=>"g","F"=>"f","E"=>"e","D"=>"d","C"=>"c","B"=>"b","A"=>"a"
+ );
+}; // end of case lookup tables
+
+/**
+ * UTF-8 lookup table for lower case accented letters
+ *
+ * This lookuptable defines replacements for accented characters from the ASCII-7
+ * range. This are lower case letters only.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see utf8_deaccent()
+ */
+global $UTF8_LOWER_ACCENTS;
+if(empty($UTF8_LOWER_ACCENTS)) $UTF8_LOWER_ACCENTS = array(
+ 'à' => 'a', 'ô' => 'o', 'Ä' => 'd', 'ḟ' => 'f', 'ë' => 'e', 'Å¡' => 's', 'Æ¡' => 'o',
+ 'ß' => 'ss', 'ă' => 'a', 'Å™' => 'r', 'È›' => 't', 'ň' => 'n', 'Ä' => 'a', 'Ä·' => 'k',
+ 'Å' => 's', 'ỳ' => 'y', 'ņ' => 'n', 'ĺ' => 'l', 'ħ' => 'h', 'á¹—' => 'p', 'ó' => 'o',
+ 'ú' => 'u', 'Ä›' => 'e', 'é' => 'e', 'ç' => 'c', 'áº' => 'w', 'Ä‹' => 'c', 'õ' => 'o',
+ 'ṡ' => 's', 'ø' => 'o', 'ģ' => 'g', 'ŧ' => 't', 'ș' => 's', 'ė' => 'e', 'ĉ' => 'c',
+ 'ś' => 's', 'î' => 'i', 'ű' => 'u', 'ć' => 'c', 'ę' => 'e', 'ŵ' => 'w', 'ṫ' => 't',
+ 'Å«' => 'u', 'Ä' => 'c', 'ö' => 'oe', 'è' => 'e', 'Å·' => 'y', 'Ä…' => 'a', 'Å‚' => 'l',
+ 'ų' => 'u', 'ů' => 'u', 'ş' => 's', 'ğ' => 'g', 'ļ' => 'l', 'ƒ' => 'f', 'ž' => 'z',
+ 'ẃ' => 'w', 'ḃ' => 'b', 'å' => 'a', 'ì' => 'i', 'ï' => 'i', 'ḋ' => 'd', 'ť' => 't',
+ 'ŗ' => 'r', 'ä' => 'ae', 'í' => 'i', 'ŕ' => 'r', 'ê' => 'e', 'ü' => 'ue', 'ò' => 'o',
+ 'Ä“' => 'e', 'ñ' => 'n', 'Å„' => 'n', 'Ä¥' => 'h', 'Ä' => 'g', 'Ä‘' => 'd', 'ĵ' => 'j',
+ 'ÿ' => 'y', 'ũ' => 'u', 'ŭ' => 'u', 'ư' => 'u', 'ţ' => 't', 'ý' => 'y', 'ő' => 'o',
+ 'â' => 'a', 'ľ' => 'l', 'ẅ' => 'w', 'ż' => 'z', 'ī' => 'i', 'ã' => 'a', 'ġ' => 'g',
+ 'á¹' => 'm', 'Å' => 'o', 'Ä©' => 'i', 'ù' => 'u', 'į' => 'i', 'ź' => 'z', 'á' => 'a',
+ 'û' => 'u', 'þ' => 'th', 'ð' => 'dh', 'æ' => 'ae', 'µ' => 'u', 'ĕ' => 'e',
+);
+
+/**
+ * UTF-8 lookup table for upper case accented letters
+ *
+ * This lookuptable defines replacements for accented characters from the ASCII-7
+ * range. This are upper case letters only.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see utf8_deaccent()
+ */
+global $UTF8_UPPER_ACCENTS;
+if(empty($UTF8_UPPER_ACCENTS)) $UTF8_UPPER_ACCENTS = array(
+ 'À' => 'A', 'Ô' => 'O', 'Ď' => 'D', 'Ḟ' => 'F', 'Ë' => 'E', 'Š' => 'S', 'Ơ' => 'O',
+ 'Ă' => 'A', 'Ř' => 'R', 'Ț' => 'T', 'Ň' => 'N', 'Ā' => 'A', 'Ķ' => 'K',
+ 'Ŝ' => 'S', 'Ỳ' => 'Y', 'Ņ' => 'N', 'Ĺ' => 'L', 'Ħ' => 'H', 'Ṗ' => 'P', 'Ó' => 'O',
+ 'Ú' => 'U', 'Ě' => 'E', 'É' => 'E', 'Ç' => 'C', 'Ẁ' => 'W', 'Ċ' => 'C', 'Õ' => 'O',
+ 'Ṡ' => 'S', 'Ø' => 'O', 'Ģ' => 'G', 'Ŧ' => 'T', 'Ș' => 'S', 'Ė' => 'E', 'Ĉ' => 'C',
+ 'Ś' => 'S', 'Î' => 'I', 'Ű' => 'U', 'Ć' => 'C', 'Ę' => 'E', 'Ŵ' => 'W', 'Ṫ' => 'T',
+ 'Ū' => 'U', 'ÄŒ' => 'C', 'Ö' => 'Oe', 'È' => 'E', 'Ŷ' => 'Y', 'Ä„' => 'A', 'Å' => 'L',
+ 'Ų' => 'U', 'Ů' => 'U', 'Ş' => 'S', 'Ğ' => 'G', 'Ļ' => 'L', 'Ƒ' => 'F', 'Ž' => 'Z',
+ 'Ẃ' => 'W', 'Ḃ' => 'B', 'Ã…' => 'A', 'ÃŒ' => 'I', 'Ã' => 'I', 'Ḋ' => 'D', 'Ť' => 'T',
+ 'Å–' => 'R', 'Ä' => 'Ae', 'Ã' => 'I', 'Å”' => 'R', 'Ê' => 'E', 'Ãœ' => 'Ue', 'Ã’' => 'O',
+ 'Ä’' => 'E', 'Ñ' => 'N', 'Ń' => 'N', 'Ĥ' => 'H', 'Äœ' => 'G', 'Ä' => 'D', 'Ä´' => 'J',
+ 'Ÿ' => 'Y', 'Ũ' => 'U', 'Ŭ' => 'U', 'Ư' => 'U', 'Å¢' => 'T', 'Ã' => 'Y', 'Å' => 'O',
+ 'Â' => 'A', 'Ľ' => 'L', 'Ẅ' => 'W', 'Ż' => 'Z', 'Ī' => 'I', 'Ã' => 'A', 'Ġ' => 'G',
+ 'á¹€' => 'M', 'ÅŒ' => 'O', 'Ĩ' => 'I', 'Ù' => 'U', 'Ä®' => 'I', 'Ź' => 'Z', 'Ã' => 'A',
+ 'Û' => 'U', 'Þ' => 'Th', 'Ã' => 'Dh', 'Æ' => 'Ae', 'Ä”' => 'E',
+);
+
+/**
+ * UTF-8 array of common special characters
+ *
+ * This array should contain all special characters (not a letter or digit)
+ * defined in the various local charsets - it's not a complete list of non-alphanum
+ * characters in UTF-8. It's not perfect but should match most cases of special
+ * chars.
+ *
+ * The controlchars 0x00 to 0x19 are _not_ included in this array. The space 0x20 is!
+ * These chars are _not_ in the array either: _ (0x5f), : 0x3a, . 0x2e, - 0x2d, * 0x2a
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see utf8_stripspecials()
+ */
+global $UTF8_SPECIAL_CHARS;
+if(empty($UTF8_SPECIAL_CHARS)) $UTF8_SPECIAL_CHARS = array(
+ 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023,
+ 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002b, 0x002c,
+ 0x002f, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x005b,
+ 0x005c, 0x005d, 0x005e, 0x0060, 0x007b, 0x007c, 0x007d, 0x007e,
+ 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088,
+ 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, 0x0090, 0x0091, 0x0092,
+ 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c,
+ 0x009d, 0x009e, 0x009f, 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6,
+ 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, 0x00b0,
+ 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba,
+ 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00d7, 0x00f7, 0x02c7, 0x02d8, 0x02d9,
+ 0x02da, 0x02db, 0x02dc, 0x02dd, 0x0300, 0x0301, 0x0303, 0x0309, 0x0323, 0x0384,
+ 0x0385, 0x0387, 0x03c6, 0x03d1, 0x03d2, 0x03d5, 0x03d6, 0x05b0, 0x05b1,
+ 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, 0x05b8, 0x05b9, 0x05bb, 0x05bc,
+ 0x05bd, 0x05be, 0x05bf, 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05f3, 0x05f4, 0x060c,
+ 0x061b, 0x061f, 0x0640, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, 0x0650, 0x0651,
+ 0x0652, 0x066a, 0x0e3f, 0x200c, 0x200d, 0x200e, 0x200f, 0x2013, 0x2014, 0x2015,
+ 0x2017, 0x2018, 0x2019, 0x201a, 0x201c, 0x201d, 0x201e, 0x2020, 0x2021, 0x2022,
+ 0x2026, 0x2030, 0x2032, 0x2033, 0x2039, 0x203a, 0x2044, 0x20a7, 0x20aa, 0x20ab,
+ 0x20ac, 0x2116, 0x2118, 0x2122, 0x2126, 0x2135, 0x2190, 0x2191, 0x2192, 0x2193,
+ 0x2194, 0x2195, 0x21b5, 0x21d0, 0x21d1, 0x21d2, 0x21d3, 0x21d4, 0x2200, 0x2202,
+ 0x2203, 0x2205, 0x2206, 0x2207, 0x2208, 0x2209, 0x220b, 0x220f, 0x2211, 0x2212,
+ 0x2215, 0x2217, 0x2219, 0x221a, 0x221d, 0x221e, 0x2220, 0x2227, 0x2228, 0x2229,
+ 0x222a, 0x222b, 0x2234, 0x223c, 0x2245, 0x2248, 0x2260, 0x2261, 0x2264, 0x2265,
+ 0x2282, 0x2283, 0x2284, 0x2286, 0x2287, 0x2295, 0x2297, 0x22a5, 0x22c5, 0x2310,
+ 0x2320, 0x2321, 0x2329, 0x232a, 0x2469, 0x2500, 0x2502, 0x250c, 0x2510, 0x2514,
+ 0x2518, 0x251c, 0x2524, 0x252c, 0x2534, 0x253c, 0x2550, 0x2551, 0x2552, 0x2553,
+ 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255a, 0x255b, 0x255c, 0x255d,
+ 0x255e, 0x255f, 0x2560, 0x2561, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567,
+ 0x2568, 0x2569, 0x256a, 0x256b, 0x256c, 0x2580, 0x2584, 0x2588, 0x258c, 0x2590,
+ 0x2591, 0x2592, 0x2593, 0x25a0, 0x25b2, 0x25bc, 0x25c6, 0x25ca, 0x25cf, 0x25d7,
+ 0x2605, 0x260e, 0x261b, 0x261e, 0x2660, 0x2663, 0x2665, 0x2666, 0x2701, 0x2702,
+ 0x2703, 0x2704, 0x2706, 0x2707, 0x2708, 0x2709, 0x270c, 0x270d, 0x270e, 0x270f,
+ 0x2710, 0x2711, 0x2712, 0x2713, 0x2714, 0x2715, 0x2716, 0x2717, 0x2718, 0x2719,
+ 0x271a, 0x271b, 0x271c, 0x271d, 0x271e, 0x271f, 0x2720, 0x2721, 0x2722, 0x2723,
+ 0x2724, 0x2725, 0x2726, 0x2727, 0x2729, 0x272a, 0x272b, 0x272c, 0x272d, 0x272e,
+ 0x272f, 0x2730, 0x2731, 0x2732, 0x2733, 0x2734, 0x2735, 0x2736, 0x2737, 0x2738,
+ 0x2739, 0x273a, 0x273b, 0x273c, 0x273d, 0x273e, 0x273f, 0x2740, 0x2741, 0x2742,
+ 0x2743, 0x2744, 0x2745, 0x2746, 0x2747, 0x2748, 0x2749, 0x274a, 0x274b, 0x274d,
+ 0x274f, 0x2750, 0x2751, 0x2752, 0x2756, 0x2758, 0x2759, 0x275a, 0x275b, 0x275c,
+ 0x275d, 0x275e, 0x2761, 0x2762, 0x2763, 0x2764, 0x2765, 0x2766, 0x2767, 0x277f,
+ 0x2789, 0x2793, 0x2794, 0x2798, 0x2799, 0x279a, 0x279b, 0x279c, 0x279d, 0x279e,
+ 0x279f, 0x27a0, 0x27a1, 0x27a2, 0x27a3, 0x27a4, 0x27a5, 0x27a6, 0x27a7, 0x27a8,
+ 0x27a9, 0x27aa, 0x27ab, 0x27ac, 0x27ad, 0x27ae, 0x27af, 0x27b1, 0x27b2, 0x27b3,
+ 0x27b4, 0x27b5, 0x27b6, 0x27b7, 0x27b8, 0x27b9, 0x27ba, 0x27bb, 0x27bc, 0x27bd,
+ 0x27be, 0x3000, 0x3001, 0x3002, 0x3003, 0x3008, 0x3009, 0x300a, 0x300b, 0x300c,
+ 0x300d, 0x300e, 0x300f, 0x3010, 0x3011, 0x3012, 0x3014, 0x3015, 0x3016, 0x3017,
+ 0x3018, 0x3019, 0x301a, 0x301b, 0x3036,
+ 0xf6d9, 0xf6da, 0xf6db, 0xf8d7, 0xf8d8, 0xf8d9, 0xf8da, 0xf8db, 0xf8dc,
+ 0xf8dd, 0xf8de, 0xf8df, 0xf8e0, 0xf8e1, 0xf8e2, 0xf8e3, 0xf8e4, 0xf8e5, 0xf8e6,
+ 0xf8e7, 0xf8e8, 0xf8e9, 0xf8ea, 0xf8eb, 0xf8ec, 0xf8ed, 0xf8ee, 0xf8ef, 0xf8f0,
+ 0xf8f1, 0xf8f2, 0xf8f3, 0xf8f4, 0xf8f5, 0xf8f6, 0xf8f7, 0xf8f8, 0xf8f9, 0xf8fa,
+ 0xf8fb, 0xf8fc, 0xf8fd, 0xf8fe, 0xfe7c, 0xfe7d,
+ 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, 0xff08, 0xff09,
+ 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff1a, 0xff1b, 0xff1c,
+ 0xff1d, 0xff1e, 0xff1f, 0xff20, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff40, 0xff5b,
+ 0xff5c, 0xff5d, 0xff5e, 0xff5f, 0xff60, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65,
+ 0xffe0, 0xffe1, 0xffe2, 0xffe3, 0xffe4, 0xffe5, 0xffe6, 0xffe8, 0xffe9, 0xffea,
+ 0xffeb, 0xffec, 0xffed, 0xffee,
+ 0x01d6fc, 0x01d6fd, 0x01d6fe, 0x01d6ff, 0x01d700, 0x01d701, 0x01d702, 0x01d703,
+ 0x01d704, 0x01d705, 0x01d706, 0x01d707, 0x01d708, 0x01d709, 0x01d70a, 0x01d70b,
+ 0x01d70c, 0x01d70d, 0x01d70e, 0x01d70f, 0x01d710, 0x01d711, 0x01d712, 0x01d713,
+ 0x01d714, 0x01d715, 0x01d716, 0x01d717, 0x01d718, 0x01d719, 0x01d71a, 0x01d71b,
+ 0xc2a0, 0xe28087, 0xe280af, 0xe281a0, 0xefbbbf,
+);
+
+// utf8 version of above data
+global $UTF8_SPECIAL_CHARS2;
+if(empty($UTF8_SPECIAL_CHARS2)) $UTF8_SPECIAL_CHARS2 =
+ "\x1A".' !"#$%&\'()+,/;<=>?@[\]^`{|}~€Â‚ƒ„…†‡ˆ‰Š‹ŒÂŽ‘’“”•�'.
+ '�—˜™š›œÂžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½�'.
+ '�¿×÷ˇ˘˙˚˛˜ËÌ€Ị̀̃̉΄΅·ϖְֱֲֳִֵֶַָֹֻּֽ־ֿ�'.
+ '�×ׂ׃׳״،؛؟ـًٌÙÙŽÙÙّْ٪฿‌â€â€Žâ€â€“—―‗‘’‚“â€ï¿½'.
+ '��†‡•…‰′″‹›â„₧₪₫€№℘™Ωℵâ†â†‘→↓↔↕↵'.
+ 'â‡â‡‘⇒⇓⇔∀∂∃∅∆∇∈∉∋âˆâˆ‘−∕∗∙√âˆâˆžâˆ âˆ§âˆ¨ï¿½'.
+ '�∪∫∴∼≅≈≠≡≤≥⊂⊃⊄⊆⊇⊕⊗⊥⋅âŒâŒ âŒ¡âŒ©âŒªâ‘©â”€ï¿½'.
+ '��┌â”└┘├┤┬┴┼â•â•‘╒╓╔╕╖╗╘╙╚╛╜â•â•žâ•Ÿâ• '.
+ '╡╢╣╤╥╦╧╨╩╪╫╬▀▄█▌â–░▒▓■▲▼◆◊â—�'.
+ '�★☎☛☞♠♣♥♦âœâœ‚✃✄✆✇✈✉✌âœâœŽâœâœâœ‘✒✓✔✕�'.
+ '��✗✘✙✚✛✜âœâœžâœŸâœ âœ¡âœ¢âœ£âœ¤âœ¥âœ¦âœ§âœ©âœªâœ«âœ¬âœ­âœ®âœ¯âœ°âœ±'.
+ '✲✳✴✵✶✷✸✹✺✻✼✽✾✿â€ââ‚âƒâ„â…â†â‡âˆâ‰âŠâ‹ï¿½'.
+ '�âââ‘â’â–â˜â™âšâ›âœââžâ¡â¢â£â¤â¥â¦â§â¿âž‰âž“➔➘➙➚�'.
+ '��➜âžâžžâžŸâž âž¡âž¢âž£âž¤âž¥âž¦âž§âž¨âž©âžªâž«âž¬âž­âž®âž¯âž±âž²âž³âž´âžµâž¶'.
+ '➷➸➹➺➻➼➽➾'.
+ ' ã€ã€‚〃〈〉《》「ã€ã€Žã€ã€ã€‘〒〔〕〖〗〘〙〚〛〶'.
+ 'ï£ï£žï£Ÿï£ ï£¡ï£¢ï££ï£¤ï£¥ï¿½'.
+ '�ﹼﹽ'.
+ 'ï¼ï¼‚#$%&'()*+,ï¼ï¼Žï¼ï¼šï¼›ï¼œï¼ï¼žï¼Ÿï¼ ï¼»ï¼¼ï¼½ï¼¾ï½€ï½›ï½œï½ï½ž'.
+ '⦅⦆。「」、・¢£¬ ̄¦¥₩│←↑→↓■○'.
+ 'ð›¼ð›½ð›¾ð›¿ðœ€ðœðœ‚ðœƒðœ„ðœ…ðœ†ðœ‡ðœˆðœ‰ðœŠðœ‹ðœŒðœðœŽðœðœðœ‘ðœ’ðœ“ðœ”ðœ•ðœ–ðœ—ðœ˜ðœ™ðœšðœ›'.
+ '   â ï»¿';
+
+/**
+ * Romanization lookup table
+ *
+ * This lookup tables provides a way to transform strings written in a language
+ * different from the ones based upon latin letters into plain ASCII.
+ *
+ * Please note: this is not a scientific transliteration table. It only works
+ * oneway from nonlatin to ASCII and it works by simple character replacement
+ * only. Specialities of each language are not supported.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Vitaly Blokhin <vitinfo@vitn.com>
+ * @link http://www.uconv.com/translit.htm
+ * @author Bisqwit <bisqwit@iki.fi>
+ * @link http://kanjidict.stc.cx/hiragana.php?src=2
+ * @link http://www.translatum.gr/converter/greek-transliteration.htm
+ * @link http://en.wikipedia.org/wiki/Royal_Thai_General_System_of_Transcription
+ * @link http://www.btranslations.com/resources/romanization/korean.asp
+ * @author Arthit Suriyawongkul <arthit@gmail.com>
+ * @author Denis Scheither <amorphis@uni-bremen.de>
+ */
+global $UTF8_ROMANIZATION;
+if(empty($UTF8_ROMANIZATION)) $UTF8_ROMANIZATION = array(
+ // scandinavian - differs from what we do in deaccent
+ 'å'=>'a','Å'=>'A','ä'=>'a','Ä'=>'A','ö'=>'o','Ö'=>'O',
+
+ //russian cyrillic
+ 'а'=>'a','Ð'=>'A','б'=>'b','Б'=>'B','в'=>'v','Ð’'=>'V','г'=>'g','Г'=>'G',
+ 'д'=>'d','Д'=>'D','е'=>'e','Е'=>'E','Ñ‘'=>'jo','Ð'=>'Jo','ж'=>'zh','Ж'=>'Zh',
+ 'з'=>'z','З'=>'Z','и'=>'i','И'=>'I','й'=>'j','Й'=>'J','к'=>'k','К'=>'K',
+ 'л'=>'l','Л'=>'L','м'=>'m','Ðœ'=>'M','н'=>'n','Ð'=>'N','о'=>'o','О'=>'O',
+ 'п'=>'p','П'=>'P','Ñ€'=>'r','Р'=>'R','Ñ'=>'s','С'=>'S','Ñ‚'=>'t','Т'=>'T',
+ 'у'=>'u','У'=>'U','ф'=>'f','Ф'=>'F','х'=>'x','Х'=>'X','ц'=>'c','Ц'=>'C',
+ 'ч'=>'ch','Ч'=>'Ch','ш'=>'sh','Ш'=>'Sh','щ'=>'sch','Щ'=>'Sch','ъ'=>'',
+ 'Ъ'=>'','Ñ‹'=>'y','Ы'=>'Y','ÑŒ'=>'','Ь'=>'','Ñ'=>'eh','Э'=>'Eh','ÑŽ'=>'ju',
+ 'Ю'=>'Ju','Ñ'=>'ja','Я'=>'Ja',
+ // Ukrainian cyrillic
+ 'Ò'=>'Gh','Ò‘'=>'gh','Є'=>'Je','Ñ”'=>'je','І'=>'I','Ñ–'=>'i','Ї'=>'Ji','Ñ—'=>'ji',
+ // Georgian
+ 'áƒ'=>'a','ბ'=>'b','გ'=>'g','დ'=>'d','ე'=>'e','ვ'=>'v','ზ'=>'z','თ'=>'th',
+ 'ი'=>'i','კ'=>'p','ლ'=>'l','მ'=>'m','ნ'=>'n','áƒ'=>'o','პ'=>'p','ჟ'=>'zh',
+ 'რ'=>'r','ს'=>'s','ტ'=>'t','უ'=>'u','ფ'=>'ph','ქ'=>'kh','ღ'=>'gh','ყ'=>'q',
+ 'შ'=>'sh','ჩ'=>'ch','ც'=>'c','ძ'=>'dh','წ'=>'w','ჭ'=>'j','ხ'=>'x','ჯ'=>'jh',
+ 'ჰ'=>'xh',
+ //Sanskrit
+ 'अ'=>'a','आ'=>'ah','इ'=>'i','ई'=>'ih','उ'=>'u','ऊ'=>'uh','ऋ'=>'ry',
+ 'ॠ'=>'ryh','ऌ'=>'ly','ॡ'=>'lyh','à¤'=>'e','à¤'=>'ay','ओ'=>'o','औ'=>'aw',
+ 'अं'=>'amh','अः'=>'aq','क'=>'k','ख'=>'kh','ग'=>'g','घ'=>'gh','ङ'=>'nh',
+ 'च'=>'c','छ'=>'ch','ज'=>'j','à¤'=>'jh','ञ'=>'ny','ट'=>'tq','ठ'=>'tqh',
+ 'ड'=>'dq','ढ'=>'dqh','ण'=>'nq','त'=>'t','थ'=>'th','द'=>'d','ध'=>'dh',
+ 'न'=>'n','प'=>'p','फ'=>'ph','ब'=>'b','भ'=>'bh','म'=>'m','य'=>'z','र'=>'r',
+ 'ल'=>'l','व'=>'v','श'=>'sh','ष'=>'sqh','स'=>'s','ह'=>'x',
+ //Hebrew
+ '×'=>'a', 'ב'=>'b','×’'=>'g','ד'=>'d','×”'=>'h','ו'=>'v','×–'=>'z','×—'=>'kh','ט'=>'th',
+ '×™'=>'y','ך'=>'h','×›'=>'k','ל'=>'l','×'=>'m','מ'=>'m','ן'=>'n','× '=>'n',
+ 'ס'=>'s','ע'=>'ah','ף'=>'f','פ'=>'p','ץ'=>'c','צ'=>'c','ק'=>'q','ר'=>'r',
+ 'ש'=>'sh','ת'=>'t',
+ //Arabic
+ 'ا'=>'a','ب'=>'b','ت'=>'t','ث'=>'th','ج'=>'g','ح'=>'xh','خ'=>'x','د'=>'d',
+ 'ذ'=>'dh','ر'=>'r','ز'=>'z','س'=>'s','ش'=>'sh','ص'=>'s\'','ض'=>'d\'',
+ 'Ø·'=>'t\'','ظ'=>'z\'','ع'=>'y','غ'=>'gh','Ù'=>'f','Ù‚'=>'q','Ùƒ'=>'k',
+ 'Ù„'=>'l','Ù…'=>'m','Ù†'=>'n','Ù‡'=>'x\'','Ùˆ'=>'u','ÙŠ'=>'i',
+
+ // Japanese characters (last update: 2008-05-09)
+
+ // Japanese hiragana
+
+ // 3 character syllables, 㣠doubles the consonant after
+ 'ã£ã¡ã‚ƒ'=>'ccha','ã£ã¡ã‡'=>'cche','ã£ã¡ã‚‡'=>'ccho','ã£ã¡ã‚…'=>'cchu',
+ 'ã£ã³ã‚ƒ'=>'bbya','ã£ã³ã‡'=>'bbye','ã£ã³ãƒ'=>'bbyi','ã£ã³ã‚‡'=>'bbyo','ã£ã³ã‚…'=>'bbyu',
+ 'ã£ã´ã‚ƒ'=>'ppya','ã£ã´ã‡'=>'ppye','ã£ã´ãƒ'=>'ppyi','ã£ã´ã‚‡'=>'ppyo','ã£ã´ã‚…'=>'ppyu',
+ 'ã£ã¡ã‚ƒ'=>'ccha','ã£ã¡ã‡'=>'cche','ã£ã¡'=>'cchi','ã£ã¡ã‚‡'=>'ccho','ã£ã¡ã‚…'=>'cchu',
+ // 'ã£ã²ã‚ƒ'=>'hya','ã£ã²ã‡'=>'hye','ã£ã²ãƒ'=>'hyi','ã£ã²ã‚‡'=>'hyo','ã£ã²ã‚…'=>'hyu',
+ 'ã£ãゃ'=>'kkya','ã£ãã‡'=>'kkye','ã£ããƒ'=>'kkyi','ã£ãょ'=>'kkyo','ã£ãã‚…'=>'kkyu',
+ 'ã£ãŽã‚ƒ'=>'ggya','ã£ãŽã‡'=>'ggye','ã£ãŽãƒ'=>'ggyi','ã£ãŽã‚‡'=>'ggyo','ã£ãŽã‚…'=>'ggyu',
+ 'ã£ã¿ã‚ƒ'=>'mmya','ã£ã¿ã‡'=>'mmye','ã£ã¿ãƒ'=>'mmyi','ã£ã¿ã‚‡'=>'mmyo','ã£ã¿ã‚…'=>'mmyu',
+ 'ã£ã«ã‚ƒ'=>'nnya','ã£ã«ã‡'=>'nnye','ã£ã«ãƒ'=>'nnyi','ã£ã«ã‚‡'=>'nnyo','ã£ã«ã‚…'=>'nnyu',
+ 'ã£ã‚Šã‚ƒ'=>'rrya','ã£ã‚Šã‡'=>'rrye','ã£ã‚Šãƒ'=>'rryi','ã£ã‚Šã‚‡'=>'rryo','ã£ã‚Šã‚…'=>'rryu',
+ 'ã£ã—ゃ'=>'ssha','ã£ã—ã‡'=>'sshe','ã£ã—'=>'sshi','ã£ã—ょ'=>'ssho','ã£ã—ã‚…'=>'sshu',
+
+ // seperate hiragana 'n' ('n' + 'i' != 'ni', normally we would write "kon'nichi wa" but the apostrophe would be converted to _ anyway)
+ 'ã‚“ã‚'=>'n_a','ã‚“ãˆ'=>'n_e','ã‚“ã„'=>'n_i','ã‚“ãŠ'=>'n_o','ã‚“ã†'=>'n_u',
+ 'んや'=>'n_ya','んよ'=>'n_yo','んゆ'=>'n_yu',
+
+ // 2 character syllables - normal
+ 'ãµã'=>'fa','ãµã‡'=>'fe','ãµãƒ'=>'fi','ãµã‰'=>'fo',
+ 'ã¡ã‚ƒ'=>'cha','ã¡ã‡'=>'che','ã¡'=>'chi','ã¡ã‚‡'=>'cho','ã¡ã‚…'=>'chu',
+ 'ã²ã‚ƒ'=>'hya','ã²ã‡'=>'hye','ã²ãƒ'=>'hyi','ã²ã‚‡'=>'hyo','ã²ã‚…'=>'hyu',
+ 'ã³ã‚ƒ'=>'bya','ã³ã‡'=>'bye','ã³ãƒ'=>'byi','ã³ã‚‡'=>'byo','ã³ã‚…'=>'byu',
+ 'ã´ã‚ƒ'=>'pya','ã´ã‡'=>'pye','ã´ãƒ'=>'pyi','ã´ã‚‡'=>'pyo','ã´ã‚…'=>'pyu',
+ 'ãゃ'=>'kya','ãã‡'=>'kye','ããƒ'=>'kyi','ãょ'=>'kyo','ãã‚…'=>'kyu',
+ 'ãŽã‚ƒ'=>'gya','ãŽã‡'=>'gye','ãŽãƒ'=>'gyi','ãŽã‚‡'=>'gyo','ãŽã‚…'=>'gyu',
+ 'ã¿ã‚ƒ'=>'mya','ã¿ã‡'=>'mye','ã¿ãƒ'=>'myi','ã¿ã‚‡'=>'myo','ã¿ã‚…'=>'myu',
+ 'ã«ã‚ƒ'=>'nya','ã«ã‡'=>'nye','ã«ãƒ'=>'nyi','ã«ã‚‡'=>'nyo','ã«ã‚…'=>'nyu',
+ 'りゃ'=>'rya','ã‚Šã‡'=>'rye','ã‚Šãƒ'=>'ryi','りょ'=>'ryo','ã‚Šã‚…'=>'ryu',
+ 'ã—ゃ'=>'sha','ã—ã‡'=>'she','ã—'=>'shi','ã—ょ'=>'sho','ã—ã‚…'=>'shu',
+ 'ã˜ã‚ƒ'=>'ja','ã˜ã‡'=>'je','ã˜ã‚‡'=>'jo','ã˜ã‚…'=>'ju',
+ 'ã†ã‡'=>'we','ã†ãƒ'=>'wi',
+ 'ã„ã‡'=>'ye',
+
+ // 2 character syllables, 㣠doubles the consonant after
+ 'ã£ã°'=>'bba','ã£ã¹'=>'bbe','ã£ã³'=>'bbi','ã£ã¼'=>'bbo','ã£ã¶'=>'bbu',
+ 'ã£ã±'=>'ppa','ã£ãº'=>'ppe','ã£ã´'=>'ppi','ã£ã½'=>'ppo','ã£ã·'=>'ppu',
+ 'ã£ãŸ'=>'tta','ã£ã¦'=>'tte','ã£ã¡'=>'cchi','ã£ã¨'=>'tto','ã£ã¤'=>'ttsu',
+ 'ã£ã '=>'dda','ã£ã§'=>'dde','ã£ã¢'=>'ddi','ã£ã©'=>'ddo','ã£ã¥'=>'ddu',
+ 'ã£ãŒ'=>'gga','ã£ã’'=>'gge','ã£ãŽ'=>'ggi','ã£ã”'=>'ggo','ã£ã'=>'ggu',
+ 'ã£ã‹'=>'kka','ã£ã‘'=>'kke','ã£ã'=>'kki','ã£ã“'=>'kko','ã£ã'=>'kku',
+ 'ã£ã¾'=>'mma','ã£ã‚'=>'mme','ã£ã¿'=>'mmi','ã£ã‚‚'=>'mmo','ã£ã‚€'=>'mmu',
+ 'ã£ãª'=>'nna','ã£ã­'=>'nne','ã£ã«'=>'nni','ã£ã®'=>'nno','ã£ã¬'=>'nnu',
+ 'ã£ã‚‰'=>'rra','ã£ã‚Œ'=>'rre','ã£ã‚Š'=>'rri','ã£ã‚'=>'rro','ã£ã‚‹'=>'rru',
+ 'ã£ã•'=>'ssa','ã£ã›'=>'sse','ã£ã—'=>'sshi','ã£ã'=>'sso','ã£ã™'=>'ssu',
+ 'ã£ã–'=>'zza','ã£ãœ'=>'zze','ã£ã˜'=>'jji','ã£ãž'=>'zzo','ã£ãš'=>'zzu',
+
+ // 1 character syllabels
+ 'ã‚'=>'a','ãˆ'=>'e','ã„'=>'i','ãŠ'=>'o','ã†'=>'u','ã‚“'=>'n',
+ 'ã¯'=>'ha','ã¸'=>'he','ã²'=>'hi','ã»'=>'ho','ãµ'=>'fu',
+ 'ã°'=>'ba','ã¹'=>'be','ã³'=>'bi','ã¼'=>'bo','ã¶'=>'bu',
+ 'ã±'=>'pa','ãº'=>'pe','ã´'=>'pi','ã½'=>'po','ã·'=>'pu',
+ 'ãŸ'=>'ta','ã¦'=>'te','ã¡'=>'chi','ã¨'=>'to','ã¤'=>'tsu',
+ 'ã '=>'da','ã§'=>'de','ã¢'=>'di','ã©'=>'do','ã¥'=>'du',
+ 'ãŒ'=>'ga','ã’'=>'ge','ãŽ'=>'gi','ã”'=>'go','ã'=>'gu',
+ 'ã‹'=>'ka','ã‘'=>'ke','ã'=>'ki','ã“'=>'ko','ã'=>'ku',
+ 'ã¾'=>'ma','ã‚'=>'me','ã¿'=>'mi','ã‚‚'=>'mo','ã‚€'=>'mu',
+ 'ãª'=>'na','ã­'=>'ne','ã«'=>'ni','ã®'=>'no','ã¬'=>'nu',
+ 'ら'=>'ra','ã‚Œ'=>'re','ã‚Š'=>'ri','ã‚'=>'ro','ã‚‹'=>'ru',
+ 'ã•'=>'sa','ã›'=>'se','ã—'=>'shi','ã'=>'so','ã™'=>'su',
+ 'ã‚'=>'wa','ã‚’'=>'wo',
+ 'ã–'=>'za','ãœ'=>'ze','ã˜'=>'ji','ãž'=>'zo','ãš'=>'zu',
+ 'や'=>'ya','よ'=>'yo','ゆ'=>'yu',
+ // old characters
+ 'ã‚‘'=>'we','ã‚'=>'wi',
+
+ // convert what's left (probably only kicks in when something's missing above)
+ // 'ã'=>'a','ã‡'=>'e','ãƒ'=>'i','ã‰'=>'o','ã…'=>'u',
+ // 'ゃ'=>'ya','ょ'=>'yo','ゅ'=>'yu',
+
+ // never seen one of those (disabled for the moment)
+ // 'ヴã'=>'va','ヴã‡'=>'ve','ヴãƒ'=>'vi','ヴã‰'=>'vo','ヴ'=>'vu',
+ // 'ã§ã‚ƒ'=>'dha','ã§ã‡'=>'dhe','ã§ãƒ'=>'dhi','ã§ã‚‡'=>'dho','ã§ã‚…'=>'dhu',
+ // 'ã©ã'=>'dwa','ã©ã‡'=>'dwe','ã©ãƒ'=>'dwi','ã©ã‰'=>'dwo','ã©ã…'=>'dwu',
+ // 'ã¢ã‚ƒ'=>'dya','ã¢ã‡'=>'dye','ã¢ãƒ'=>'dyi','ã¢ã‚‡'=>'dyo','ã¢ã‚…'=>'dyu',
+ // 'ãµã'=>'fwa','ãµã‡'=>'fwe','ãµãƒ'=>'fwi','ãµã‰'=>'fwo','ãµã…'=>'fwu',
+ // 'ãµã‚ƒ'=>'fya','ãµã‡'=>'fye','ãµãƒ'=>'fyi','ãµã‚‡'=>'fyo','ãµã‚…'=>'fyu',
+ // 'ã™ã'=>'swa','ã™ã‡'=>'swe','ã™ãƒ'=>'swi','ã™ã‰'=>'swo','ã™ã…'=>'swu',
+ // 'ã¦ã‚ƒ'=>'tha','ã¦ã‡'=>'the','ã¦ãƒ'=>'thi','ã¦ã‚‡'=>'tho','ã¦ã‚…'=>'thu',
+ // 'ã¤ã‚ƒ'=>'tsa','ã¤ã‡'=>'tse','ã¤ãƒ'=>'tsi','ã¤ã‚‡'=>'tso','ã¤'=>'tsu',
+ // 'ã¨ã'=>'twa','ã¨ã‡'=>'twe','ã¨ãƒ'=>'twi','ã¨ã‰'=>'two','ã¨ã…'=>'twu',
+ // 'ヴゃ'=>'vya','ヴã‡'=>'vye','ヴãƒ'=>'vyi','ヴょ'=>'vyo','ヴゅ'=>'vyu',
+ // 'ã†ã'=>'wha','ã†ã‡'=>'whe','ã†ãƒ'=>'whi','ã†ã‰'=>'who','ã†ã…'=>'whu',
+ // 'ã˜ã‚ƒ'=>'zha','ã˜ã‡'=>'zhe','ã˜ãƒ'=>'zhi','ã˜ã‚‡'=>'zho','ã˜ã‚…'=>'zhu',
+ // 'ã˜ã‚ƒ'=>'zya','ã˜ã‡'=>'zye','ã˜ãƒ'=>'zyi','ã˜ã‚‡'=>'zyo','ã˜ã‚…'=>'zyu',
+
+ // 'spare' characters from other romanization systems
+ // 'ã '=>'da','ã§'=>'de','ã¢'=>'di','ã©'=>'do','ã¥'=>'du',
+ // 'ら'=>'la','ã‚Œ'=>'le','ã‚Š'=>'li','ã‚'=>'lo','ã‚‹'=>'lu',
+ // 'ã•'=>'sa','ã›'=>'se','ã—'=>'si','ã'=>'so','ã™'=>'su',
+ // 'ã¡ã‚ƒ'=>'cya','ã¡ã‡'=>'cye','ã¡ãƒ'=>'cyi','ã¡ã‚‡'=>'cyo','ã¡ã‚…'=>'cyu',
+ //'ã˜ã‚ƒ'=>'jya','ã˜ã‡'=>'jye','ã˜ãƒ'=>'jyi','ã˜ã‚‡'=>'jyo','ã˜ã‚…'=>'jyu',
+ //'りゃ'=>'lya','ã‚Šã‡'=>'lye','ã‚Šãƒ'=>'lyi','りょ'=>'lyo','ã‚Šã‚…'=>'lyu',
+ //'ã—ゃ'=>'sya','ã—ã‡'=>'sye','ã—ãƒ'=>'syi','ã—ょ'=>'syo','ã—ã‚…'=>'syu',
+ //'ã¡ã‚ƒ'=>'tya','ã¡ã‡'=>'tye','ã¡ãƒ'=>'tyi','ã¡ã‚‡'=>'tyo','ã¡ã‚…'=>'tyu',
+ //'ã—'=>'ci',,ã„'=>'yi','ã¢'=>'dzi',
+ //'ã£ã˜ã‚ƒ'=>'jja','ã£ã˜ã‡'=>'jje','ã£ã˜'=>'jji','ã£ã˜ã‚‡'=>'jjo','ã£ã˜ã‚…'=>'jju',
+
+
+ // Japanese katakana
+
+ // 4 character syllables: ッ doubles the consonant after, ー doubles the vowel before (usualy written with macron, but we don't want that in our URLs)
+ 'ッビャー'=>'bbyaa','ッビェー'=>'bbyee','ッビィー'=>'bbyii','ッビョー'=>'bbyoo','ッビュー'=>'bbyuu',
+ 'ッピャー'=>'ppyaa','ッピェー'=>'ppyee','ッピィー'=>'ppyii','ッピョー'=>'ppyoo','ッピュー'=>'ppyuu',
+ 'ッキャー'=>'kkyaa','ッキェー'=>'kkyee','ッキィー'=>'kkyii','ッキョー'=>'kkyoo','ッキュー'=>'kkyuu',
+ 'ッギャー'=>'ggyaa','ッギェー'=>'ggyee','ッギィー'=>'ggyii','ッギョー'=>'ggyoo','ッギュー'=>'ggyuu',
+ 'ッミャー'=>'mmyaa','ッミェー'=>'mmyee','ッミィー'=>'mmyii','ッミョー'=>'mmyoo','ッミュー'=>'mmyuu',
+ 'ッニャー'=>'nnyaa','ッニェー'=>'nnyee','ッニィー'=>'nnyii','ッニョー'=>'nnyoo','ッニュー'=>'nnyuu',
+ 'ッリャー'=>'rryaa','ッリェー'=>'rryee','ッリィー'=>'rryii','ッリョー'=>'rryoo','ッリュー'=>'rryuu',
+ 'ッシャー'=>'sshaa','ッシェー'=>'sshee','ッシー'=>'sshii','ッショー'=>'sshoo','ッシュー'=>'sshuu',
+ 'ッãƒãƒ£ãƒ¼'=>'cchaa','ッãƒã‚§ãƒ¼'=>'cchee','ッãƒãƒ¼'=>'cchii','ッãƒãƒ§ãƒ¼'=>'cchoo','ッãƒãƒ¥ãƒ¼'=>'cchuu',
+ 'ッティー'=>'ttii',
+ 'ッヂィー'=>'ddii',
+
+ // 3 character syllables - doubled vowels
+ 'ファー'=>'faa','フェー'=>'fee','フィー'=>'fii','フォー'=>'foo',
+ 'フャー'=>'fyaa','フェー'=>'fyee','フィー'=>'fyii','フョー'=>'fyoo','フュー'=>'fyuu',
+ 'ヒャー'=>'hyaa','ヒェー'=>'hyee','ヒィー'=>'hyii','ヒョー'=>'hyoo','ヒュー'=>'hyuu',
+ 'ビャー'=>'byaa','ビェー'=>'byee','ビィー'=>'byii','ビョー'=>'byoo','ビュー'=>'byuu',
+ 'ピャー'=>'pyaa','ピェー'=>'pyee','ピィー'=>'pyii','ピョー'=>'pyoo','ピュー'=>'pyuu',
+ 'キャー'=>'kyaa','キェー'=>'kyee','キィー'=>'kyii','キョー'=>'kyoo','キュー'=>'kyuu',
+ 'ギャー'=>'gyaa','ギェー'=>'gyee','ギィー'=>'gyii','ギョー'=>'gyoo','ギュー'=>'gyuu',
+ 'ミャー'=>'myaa','ミェー'=>'myee','ミィー'=>'myii','ミョー'=>'myoo','ミュー'=>'myuu',
+ 'ニャー'=>'nyaa','ニェー'=>'nyee','ニィー'=>'nyii','ニョー'=>'nyoo','ニュー'=>'nyuu',
+ 'リャー'=>'ryaa','リェー'=>'ryee','リィー'=>'ryii','リョー'=>'ryoo','リュー'=>'ryuu',
+ 'シャー'=>'shaa','シェー'=>'shee','シー'=>'shii','ショー'=>'shoo','シュー'=>'shuu',
+ 'ジャー'=>'jaa','ジェー'=>'jee','ジー'=>'jii','ジョー'=>'joo','ジュー'=>'juu',
+ 'スァー'=>'swaa','スェー'=>'swee','スィー'=>'swii','スォー'=>'swoo','スゥー'=>'swuu',
+ 'デァー'=>'daa','デェー'=>'dee','ディー'=>'dii','デォー'=>'doo','デゥー'=>'duu',
+ 'ãƒãƒ£ãƒ¼'=>'chaa','ãƒã‚§ãƒ¼'=>'chee','ãƒãƒ¼'=>'chii','ãƒãƒ§ãƒ¼'=>'choo','ãƒãƒ¥ãƒ¼'=>'chuu',
+ 'ヂャー'=>'dyaa','ヂェー'=>'dyee','ヂィー'=>'dyii','ヂョー'=>'dyoo','ヂュー'=>'dyuu',
+ 'ツャー'=>'tsaa','ツェー'=>'tsee','ツィー'=>'tsii','ツョー'=>'tsoo','ツー'=>'tsuu',
+ 'トァー'=>'twaa','トェー'=>'twee','トィー'=>'twii','トォー'=>'twoo','トゥー'=>'twuu',
+ 'ドァー'=>'dwaa','ドェー'=>'dwee','ドィー'=>'dwii','ドォー'=>'dwoo','ドゥー'=>'dwuu',
+ 'ウァー'=>'whaa','ウェー'=>'whee','ウィー'=>'whii','ウォー'=>'whoo','ウゥー'=>'whuu',
+ 'ヴャー'=>'vyaa','ヴェー'=>'vyee','ヴィー'=>'vyii','ヴョー'=>'vyoo','ヴュー'=>'vyuu',
+ 'ヴァー'=>'vaa','ヴェー'=>'vee','ヴィー'=>'vii','ヴォー'=>'voo','ヴー'=>'vuu',
+ 'ウェー'=>'wee','ウィー'=>'wii',
+ 'イェー'=>'yee',
+ 'ティー'=>'tii',
+ 'ヂィー'=>'dii',
+
+ // 3 character syllables - doubled consonants
+ 'ッビャ'=>'bbya','ッビェ'=>'bbye','ッビィ'=>'bbyi','ッビョ'=>'bbyo','ッビュ'=>'bbyu',
+ 'ッピャ'=>'ppya','ッピェ'=>'ppye','ッピィ'=>'ppyi','ッピョ'=>'ppyo','ッピュ'=>'ppyu',
+ 'ッキャ'=>'kkya','ッキェ'=>'kkye','ッキィ'=>'kkyi','ッキョ'=>'kkyo','ッキュ'=>'kkyu',
+ 'ッギャ'=>'ggya','ッギェ'=>'ggye','ッギィ'=>'ggyi','ッギョ'=>'ggyo','ッギュ'=>'ggyu',
+ 'ッミャ'=>'mmya','ッミェ'=>'mmye','ッミィ'=>'mmyi','ッミョ'=>'mmyo','ッミュ'=>'mmyu',
+ 'ッニャ'=>'nnya','ッニェ'=>'nnye','ッニィ'=>'nnyi','ッニョ'=>'nnyo','ッニュ'=>'nnyu',
+ 'ッリャ'=>'rrya','ッリェ'=>'rrye','ッリィ'=>'rryi','ッリョ'=>'rryo','ッリュ'=>'rryu',
+ 'ッシャ'=>'ssha','ッシェ'=>'sshe','ッシ'=>'sshi','ッショ'=>'ssho','ッシュ'=>'sshu',
+ 'ッãƒãƒ£'=>'ccha','ッãƒã‚§'=>'cche','ッãƒ'=>'cchi','ッãƒãƒ§'=>'ccho','ッãƒãƒ¥'=>'cchu',
+ 'ッティ'=>'tti',
+ 'ッヂィ'=>'ddi',
+
+ // 3 character syllables - doubled vowel and consonants
+ 'ッãƒãƒ¼'=>'bbaa','ッベー'=>'bbee','ッビー'=>'bbii','ッボー'=>'bboo','ッブー'=>'bbuu',
+ 'ッパー'=>'ppaa','ッペー'=>'ppee','ッピー'=>'ppii','ッãƒãƒ¼'=>'ppoo','ップー'=>'ppuu',
+ 'ッケー'=>'kkee','ッキー'=>'kkii','ッコー'=>'kkoo','ックー'=>'kkuu','ッカー'=>'kkaa',
+ 'ッガー'=>'ggaa','ッゲー'=>'ggee','ッギー'=>'ggii','ッゴー'=>'ggoo','ッグー'=>'gguu',
+ 'ッマー'=>'maa','ッメー'=>'mee','ッミー'=>'mii','ッモー'=>'moo','ッムー'=>'muu',
+ 'ッナー'=>'nnaa','ッãƒãƒ¼'=>'nnee','ッニー'=>'nnii','ッノー'=>'nnoo','ッヌー'=>'nnuu',
+ 'ッラー'=>'rraa','ッレー'=>'rree','ッリー'=>'rrii','ッロー'=>'rroo','ッルー'=>'rruu',
+ 'ッサー'=>'ssaa','ッセー'=>'ssee','ッシー'=>'sshii','ッソー'=>'ssoo','ッスー'=>'ssuu',
+ 'ッザー'=>'zzaa','ッゼー'=>'zzee','ッジー'=>'jjii','ッゾー'=>'zzoo','ッズー'=>'zzuu',
+ 'ッター'=>'ttaa','ッテー'=>'ttee','ッãƒãƒ¼'=>'chii','ットー'=>'ttoo','ッツー'=>'ttsuu',
+ 'ッダー'=>'ddaa','ッデー'=>'ddee','ッヂー'=>'ddii','ッドー'=>'ddoo','ッヅー'=>'dduu',
+
+ // 2 character syllables - normal
+ 'ファ'=>'fa','フェ'=>'fe','フィ'=>'fi','フォ'=>'fo','フゥ'=>'fu',
+ // 'フャ'=>'fya','フェ'=>'fye','フィ'=>'fyi','フョ'=>'fyo','フュ'=>'fyu',
+ 'フャ'=>'fa','フェ'=>'fe','フィ'=>'fi','フョ'=>'fo','フュ'=>'fu',
+ 'ヒャ'=>'hya','ヒェ'=>'hye','ヒィ'=>'hyi','ヒョ'=>'hyo','ヒュ'=>'hyu',
+ 'ビャ'=>'bya','ビェ'=>'bye','ビィ'=>'byi','ビョ'=>'byo','ビュ'=>'byu',
+ 'ピャ'=>'pya','ピェ'=>'pye','ピィ'=>'pyi','ピョ'=>'pyo','ピュ'=>'pyu',
+ 'キャ'=>'kya','キェ'=>'kye','キィ'=>'kyi','キョ'=>'kyo','キュ'=>'kyu',
+ 'ギャ'=>'gya','ギェ'=>'gye','ギィ'=>'gyi','ギョ'=>'gyo','ギュ'=>'gyu',
+ 'ミャ'=>'mya','ミェ'=>'mye','ミィ'=>'myi','ミョ'=>'myo','ミュ'=>'myu',
+ 'ニャ'=>'nya','ニェ'=>'nye','ニィ'=>'nyi','ニョ'=>'nyo','ニュ'=>'nyu',
+ 'リャ'=>'rya','リェ'=>'rye','リィ'=>'ryi','リョ'=>'ryo','リュ'=>'ryu',
+ 'シャ'=>'sha','シェ'=>'she','ショ'=>'sho','シュ'=>'shu',
+ 'ジャ'=>'ja','ジェ'=>'je','ジョ'=>'jo','ジュ'=>'ju',
+ 'スァ'=>'swa','スェ'=>'swe','スィ'=>'swi','スォ'=>'swo','スゥ'=>'swu',
+ 'デァ'=>'da','デェ'=>'de','ディ'=>'di','デォ'=>'do','デゥ'=>'du',
+ 'ãƒãƒ£'=>'cha','ãƒã‚§'=>'che','ãƒ'=>'chi','ãƒãƒ§'=>'cho','ãƒãƒ¥'=>'chu',
+ // 'ヂャ'=>'dya','ヂェ'=>'dye','ヂィ'=>'dyi','ヂョ'=>'dyo','ヂュ'=>'dyu',
+ 'ツャ'=>'tsa','ツェ'=>'tse','ツィ'=>'tsi','ツョ'=>'tso','ツ'=>'tsu',
+ 'トァ'=>'twa','トェ'=>'twe','トィ'=>'twi','トォ'=>'two','トゥ'=>'twu',
+ 'ドァ'=>'dwa','ドェ'=>'dwe','ドィ'=>'dwi','ドォ'=>'dwo','ドゥ'=>'dwu',
+ 'ウァ'=>'wha','ウェ'=>'whe','ウィ'=>'whi','ウォ'=>'who','ウゥ'=>'whu',
+ 'ヴャ'=>'vya','ヴェ'=>'vye','ヴィ'=>'vyi','ヴョ'=>'vyo','ヴュ'=>'vyu',
+ 'ヴァ'=>'va','ヴェ'=>'ve','ヴィ'=>'vi','ヴォ'=>'vo','ヴ'=>'vu',
+ 'ウェ'=>'we','ウィ'=>'wi',
+ 'イェ'=>'ye',
+ 'ティ'=>'ti',
+ 'ヂィ'=>'di',
+
+ // 2 character syllables - doubled vocal
+ 'アー'=>'aa','エー'=>'ee','イー'=>'ii','オー'=>'oo','ウー'=>'uu',
+ 'ダー'=>'daa','デー'=>'dee','ヂー'=>'dii','ドー'=>'doo','ヅー'=>'duu',
+ 'ãƒãƒ¼'=>'haa','ヘー'=>'hee','ヒー'=>'hii','ホー'=>'hoo','フー'=>'fuu',
+ 'ãƒãƒ¼'=>'baa','ベー'=>'bee','ビー'=>'bii','ボー'=>'boo','ブー'=>'buu',
+ 'パー'=>'paa','ペー'=>'pee','ピー'=>'pii','ãƒãƒ¼'=>'poo','プー'=>'puu',
+ 'ケー'=>'kee','キー'=>'kii','コー'=>'koo','クー'=>'kuu','カー'=>'kaa',
+ 'ガー'=>'gaa','ゲー'=>'gee','ギー'=>'gii','ゴー'=>'goo','グー'=>'guu',
+ 'マー'=>'maa','メー'=>'mee','ミー'=>'mii','モー'=>'moo','ムー'=>'muu',
+ 'ナー'=>'naa','ãƒãƒ¼'=>'nee','ニー'=>'nii','ノー'=>'noo','ヌー'=>'nuu',
+ 'ラー'=>'raa','レー'=>'ree','リー'=>'rii','ロー'=>'roo','ルー'=>'ruu',
+ 'サー'=>'saa','セー'=>'see','シー'=>'shii','ソー'=>'soo','スー'=>'suu',
+ 'ザー'=>'zaa','ゼー'=>'zee','ジー'=>'jii','ゾー'=>'zoo','ズー'=>'zuu',
+ 'ター'=>'taa','テー'=>'tee','ãƒãƒ¼'=>'chii','トー'=>'too','ツー'=>'tsuu',
+ 'ワー'=>'waa','ヲー'=>'woo',
+ 'ヤー'=>'yaa','ヨー'=>'yoo','ユー'=>'yuu',
+ 'ヵー'=>'kaa','ヶー'=>'kee',
+ // old characters
+ 'ヱー'=>'wee','ヰー'=>'wii',
+
+ // seperate katakana 'n'
+ 'ンア'=>'n_a','ンエ'=>'n_e','ンイ'=>'n_i','ンオ'=>'n_o','ンウ'=>'n_u',
+ 'ンヤ'=>'n_ya','ンヨ'=>'n_yo','ンユ'=>'n_yu',
+
+ // 2 character syllables - doubled consonants
+ 'ッãƒ'=>'bba','ッベ'=>'bbe','ッビ'=>'bbi','ッボ'=>'bbo','ッブ'=>'bbu',
+ 'ッパ'=>'ppa','ッペ'=>'ppe','ッピ'=>'ppi','ッãƒ'=>'ppo','ップ'=>'ppu',
+ 'ッケ'=>'kke','ッキ'=>'kki','ッコ'=>'kko','ック'=>'kku','ッカ'=>'kka',
+ 'ッガ'=>'gga','ッゲ'=>'gge','ッギ'=>'ggi','ッゴ'=>'ggo','ッグ'=>'ggu',
+ 'ッマ'=>'ma','ッメ'=>'me','ッミ'=>'mi','ッモ'=>'mo','ッム'=>'mu',
+ 'ッナ'=>'nna','ッãƒ'=>'nne','ッニ'=>'nni','ッノ'=>'nno','ッヌ'=>'nnu',
+ 'ッラ'=>'rra','ッレ'=>'rre','ッリ'=>'rri','ッロ'=>'rro','ッル'=>'rru',
+ 'ッサ'=>'ssa','ッセ'=>'sse','ッシ'=>'sshi','ッソ'=>'sso','ッス'=>'ssu',
+ 'ッザ'=>'zza','ッゼ'=>'zze','ッジ'=>'jji','ッゾ'=>'zzo','ッズ'=>'zzu',
+ 'ッタ'=>'tta','ッテ'=>'tte','ッãƒ'=>'cchi','ット'=>'tto','ッツ'=>'ttsu',
+ 'ッダ'=>'dda','ッデ'=>'dde','ッヂ'=>'ddi','ッド'=>'ddo','ッヅ'=>'ddu',
+
+ // 1 character syllables
+ 'ア'=>'a','エ'=>'e','イ'=>'i','オ'=>'o','ウ'=>'u','ン'=>'n',
+ 'ãƒ'=>'ha','ヘ'=>'he','ヒ'=>'hi','ホ'=>'ho','フ'=>'fu',
+ 'ãƒ'=>'ba','ベ'=>'be','ビ'=>'bi','ボ'=>'bo','ブ'=>'bu',
+ 'パ'=>'pa','ペ'=>'pe','ピ'=>'pi','ãƒ'=>'po','プ'=>'pu',
+ 'ケ'=>'ke','キ'=>'ki','コ'=>'ko','ク'=>'ku','カ'=>'ka',
+ 'ガ'=>'ga','ゲ'=>'ge','ギ'=>'gi','ゴ'=>'go','グ'=>'gu',
+ 'マ'=>'ma','メ'=>'me','ミ'=>'mi','モ'=>'mo','ム'=>'mu',
+ 'ナ'=>'na','ãƒ'=>'ne','ニ'=>'ni','ノ'=>'no','ヌ'=>'nu',
+ 'ラ'=>'ra','レ'=>'re','リ'=>'ri','ロ'=>'ro','ル'=>'ru',
+ 'サ'=>'sa','セ'=>'se','シ'=>'shi','ソ'=>'so','ス'=>'su',
+ 'ザ'=>'za','ゼ'=>'ze','ジ'=>'ji','ゾ'=>'zo','ズ'=>'zu',
+ 'ã‚¿'=>'ta','テ'=>'te','ãƒ'=>'chi','ト'=>'to','ツ'=>'tsu',
+ 'ダ'=>'da','デ'=>'de','ヂ'=>'di','ド'=>'do','ヅ'=>'du',
+ 'ワ'=>'wa','ヲ'=>'wo',
+ 'ヤ'=>'ya','ヨ'=>'yo','ユ'=>'yu',
+ 'ヵ'=>'ka','ヶ'=>'ke',
+ // old characters
+ 'ヱ'=>'we','ヰ'=>'wi',
+
+ // convert what's left (probably only kicks in when something's missing above)
+ 'ァ'=>'a','ェ'=>'e','ィ'=>'i','ォ'=>'o','ゥ'=>'u',
+ 'ャ'=>'ya','ョ'=>'yo','ュ'=>'yu',
+
+ // special characters
+ '・'=>'_','ã€'=>'_',
+ 'ー'=>'_', // when used with hiragana (seldom), this character would not be converted otherwise
+
+ // 'ラ'=>'la','レ'=>'le','リ'=>'li','ロ'=>'lo','ル'=>'lu',
+ // 'ãƒãƒ£'=>'cya','ãƒã‚§'=>'cye','ãƒã‚£'=>'cyi','ãƒãƒ§'=>'cyo','ãƒãƒ¥'=>'cyu',
+ //'デャ'=>'dha','デェ'=>'dhe','ディ'=>'dhi','デョ'=>'dho','デュ'=>'dhu',
+ // 'リャ'=>'lya','リェ'=>'lye','リィ'=>'lyi','リョ'=>'lyo','リュ'=>'lyu',
+ // 'テャ'=>'tha','テェ'=>'the','ティ'=>'thi','テョ'=>'tho','テュ'=>'thu',
+ //'ファ'=>'fwa','フェ'=>'fwe','フィ'=>'fwi','フォ'=>'fwo','フゥ'=>'fwu',
+ //'ãƒãƒ£'=>'tya','ãƒã‚§'=>'tye','ãƒã‚£'=>'tyi','ãƒãƒ§'=>'tyo','ãƒãƒ¥'=>'tyu',
+ // 'ジャ'=>'jya','ジェ'=>'jye','ジィ'=>'jyi','ジョ'=>'jyo','ジュ'=>'jyu',
+ // 'ジャ'=>'zha','ジェ'=>'zhe','ジィ'=>'zhi','ジョ'=>'zho','ジュ'=>'zhu',
+ //'ジャ'=>'zya','ジェ'=>'zye','ジィ'=>'zyi','ジョ'=>'zyo','ジュ'=>'zyu',
+ //'シャ'=>'sya','シェ'=>'sye','シィ'=>'syi','ショ'=>'syo','シュ'=>'syu',
+ //'ã‚·'=>'ci','フ'=>'hu',ã‚·'=>'si','ãƒ'=>'ti','ツ'=>'tu','イ'=>'yi','ヂ'=>'dzi',
+
+ // "Greeklish"
+ 'Γ'=>'G','Δ'=>'E','Θ'=>'Th','Λ'=>'L','Ξ'=>'X','Π'=>'P','Σ'=>'S','Φ'=>'F','Ψ'=>'Ps',
+ 'γ'=>'g','δ'=>'e','θ'=>'th','λ'=>'l','ξ'=>'x','π'=>'p','σ'=>'s','φ'=>'f','ψ'=>'ps',
+
+ // Thai
+ 'à¸'=>'k','ข'=>'kh','ฃ'=>'kh','ค'=>'kh','ฅ'=>'kh','ฆ'=>'kh','ง'=>'ng','จ'=>'ch',
+ 'ฉ'=>'ch','ช'=>'ch','ซ'=>'s','ฌ'=>'ch','à¸'=>'y','ฎ'=>'d','à¸'=>'t','à¸'=>'th',
+ 'ฑ'=>'d','ฒ'=>'th','ณ'=>'n','ด'=>'d','ต'=>'t','ถ'=>'th','ท'=>'th','ธ'=>'th',
+ 'น'=>'n','บ'=>'b','ป'=>'p','ผ'=>'ph','à¸'=>'f','พ'=>'ph','ฟ'=>'f','ภ'=>'ph',
+ 'ม'=>'m','ย'=>'y','ร'=>'r','ฤ'=>'rue','ฤๅ'=>'rue','ล'=>'l','ฦ'=>'lue',
+ 'ฦๅ'=>'lue','ว'=>'w','ศ'=>'s','ษ'=>'s','ส'=>'s','ห'=>'h','ฬ'=>'l','ฮ'=>'h',
+ 'ะ'=>'a','ั'=>'a','รร'=>'a','า'=>'a','ๅ'=>'a','ำ'=>'am','à¹à¸²'=>'am',
+ 'ิ'=>'i','ี'=>'i','ึ'=>'ue','ี'=>'ue','ุ'=>'u','ู'=>'u',
+ 'เ'=>'e','à¹'=>'ae','โ'=>'o','อ'=>'o',
+ 'ียะ'=>'ia','ีย'=>'ia','ือะ'=>'uea','ือ'=>'uea','ัวะ'=>'ua','ัว'=>'ua',
+ 'ใ'=>'ai','ไ'=>'ai','ัย'=>'ai','าย'=>'ai','าว'=>'ao',
+ 'ุย'=>'ui','อย'=>'oi','ือย'=>'ueai','วย'=>'uai',
+ 'ิว'=>'io','็ว'=>'eo','ียว'=>'iao',
+ '่'=>'','้'=>'','๊'=>'','๋'=>'','็'=>'',
+ '์'=>'','๎'=>'','à¹'=>'','ฺ'=>'',
+ 'ๆ'=>'2','à¹'=>'o','ฯ'=>'-','๚'=>'-','๛'=>'-',
+ 'à¹'=>'0','๑'=>'1','๒'=>'2','๓'=>'3','๔'=>'4',
+ '๕'=>'5','๖'=>'6','๗'=>'7','๘'=>'8','๙'=>'9',
+
+ // Korean
+ 'ㄱ'=>'k','ㅋ'=>'kh','ㄲ'=>'kk','ㄷ'=>'t','ㅌ'=>'th','ㄸ'=>'tt','ㅂ'=>'p',
+ 'ã…'=>'ph','ã…ƒ'=>'pp','ã…ˆ'=>'c','ã…Š'=>'ch','ã…‰'=>'cc','ã……'=>'s','ã…†'=>'ss',
+ 'ã…Ž'=>'h','ã…‡'=>'ng','ã„´'=>'n','ㄹ'=>'l','ã…'=>'m', 'ã…'=>'a','ã…“'=>'e','ã…—'=>'o',
+ 'ã…œ'=>'wu','ã…¡'=>'u','ã…£'=>'i','ã…'=>'ay','ã…”'=>'ey','ã…š'=>'oy','ã…˜'=>'wa','ã…'=>'we',
+ 'ã…Ÿ'=>'wi','ã…™'=>'way','ã…ž'=>'wey','ã…¢'=>'uy','ã…‘'=>'ya','ã…•'=>'ye','ã…›'=>'oy',
+ 'ã… '=>'yu','ã…’'=>'yay','ã…–'=>'yey',
+);
+
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/index.php b/mod/dokuwiki/vendors/dokuwiki/index.php
new file mode 100644
index 000000000..ad0807727
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/index.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Forwarder to doku.php
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+header("Location: doku.php");
diff --git a/mod/dokuwiki/vendors/dokuwiki/install.php b/mod/dokuwiki/vendors/dokuwiki/install.php
new file mode 100644
index 000000000..414d3e99e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/install.php
@@ -0,0 +1,516 @@
+<?php
+/**
+ * Dokuwiki installation assistance
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/');
+if(!defined('DOKU_CONF')) define('DOKU_CONF',DOKU_INC.'conf/');
+if(!defined('DOKU_LOCAL')) define('DOKU_LOCAL',DOKU_INC.'conf/');
+
+// check for error reporting override or set error reporting to sane values
+if (!defined('DOKU_E_LEVEL')) { error_reporting(E_ALL ^ E_NOTICE); }
+else { error_reporting(DOKU_E_LEVEL); }
+
+// kill magic quotes
+if (get_magic_quotes_gpc() && !defined('MAGIC_QUOTES_STRIPPED')) {
+ if (!empty($_GET)) remove_magic_quotes($_GET);
+ if (!empty($_POST)) remove_magic_quotes($_POST);
+ if (!empty($_COOKIE)) remove_magic_quotes($_COOKIE);
+ if (!empty($_REQUEST)) remove_magic_quotes($_REQUEST);
+ @ini_set('magic_quotes_gpc', 0);
+ define('MAGIC_QUOTES_STRIPPED',1);
+}
+@set_magic_quotes_runtime(0);
+@ini_set('magic_quotes_sybase',0);
+
+// language strings
+require_once(DOKU_INC.'inc/lang/en/lang.php');
+$LC = preg_replace('/[^a-z\-]+/','',$_REQUEST['l']);
+if(!$LC) $LC = 'en';
+if($LC && $LC != 'en' ) {
+ require_once(DOKU_INC.'inc/lang/'.$LC.'/lang.php');
+}
+
+// initialise variables ...
+$error = array();
+
+$dokuwiki_hash = array(
+ '2005-09-22' => 'e33223e957b0b0a130d0520db08f8fb7',
+ '2006-03-05' => '51295727f79ab9af309a2fd9e0b61acc',
+ '2006-03-09' => '51295727f79ab9af309a2fd9e0b61acc',
+ '2006-11-06' => 'b3a8af76845977c2000d85d6990dd72b',
+ '2007-05-24' => 'd80f2740c84c4a6a791fd3c7a353536f',
+ '2007-06-26' => 'b3ca19c7a654823144119980be73cd77',
+ '2008-05-04' => '1e5c42eac3219d9e21927c39e3240aad',
+ '2009-02-14' => 'ec8c04210732a14fdfce0f7f6eead865',
+ '2009-12-25' => '993c4b2b385643efe5abf8e7010e11f4',
+);
+
+
+
+// begin output
+header('Content-Type: text/html; charset=utf-8');
+?>
+<!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" xml:lang="<?php echo $LC?>"
+ lang="<?php echo $LC?>" dir="<?php echo $lang['direction']?>">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title><?php echo $lang['i_installer']?></title>
+ <style type="text/css">
+ body { width: 90%; margin: 0 auto; font: 84% Verdana, Helvetica, Arial, sans-serif; }
+ img { border: none }
+ br.cl { clear:both; }
+ code { font-size: 110%; color: #800000; }
+ fieldset { border: none }
+ label { display: block; margin-top: 0.5em; }
+ select.text, input.text { width: 30em; margin: 0 0.5em; }
+ </style>
+ <script type="text/javascript" language="javascript">
+ function acltoggle(){
+ var cb = document.getElementById('acl');
+ var fs = document.getElementById('acldep');
+ if(!cb || !fs) return;
+ if(cb.checked){
+ fs.style.display = '';
+ }else{
+ fs.style.display = 'none';
+ }
+ }
+ window.onload = function(){
+ acltoggle();
+ var cb = document.getElementById('acl');
+ if(cb) cb.onchange = acltoggle;
+ };
+ </script>
+</head>
+<body style="">
+ <h1 style="float:left">
+ <img src="lib/exe/fetch.php?media=wiki:dokuwiki-128.png&w=64"
+ style="vertical-align: middle;" alt="" />
+ <?php echo $lang['i_installer']?>
+ </h1>
+ <div style="float:right; margin: 1em;">
+ <?php langsel()?>
+ </div>
+ <br class="cl" />
+
+ <div style="float: right; width: 34%;">
+ <?php
+ if(@file_exists(DOKU_INC.'inc/lang/'.$LC.'/install.html')){
+ include(DOKU_INC.'inc/lang/'.$LC.'/install.html');
+ }else{
+ print "<div lang=\"en\" dir=\"ltr\">\n";
+ include(DOKU_INC.'inc/lang/en/install.html');
+ print "</div>\n";
+ }
+ ?>
+ </div>
+
+ <div style="float: left; width: 58%;">
+ <?php
+ if(! (check_functions() && check_permissions()) ){
+ echo '<p>'.$lang['i_problems'].'</p>';
+ print_errors();
+ print_retry();
+ }elseif(!check_configs()){
+ echo '<p>'.$lang['i_modified'].'</p>';
+ print_errors();
+ }elseif($_REQUEST['submit']){
+ if(!check_data($_REQUEST['d'])){
+ print_errors();
+ print_form($_REQUEST['d']);
+ }elseif(!store_data($_REQUEST['d'])){
+ echo '<p>'.$lang['i_failure'].'</p>';
+ print_errors();
+ }else{
+ echo '<p>'.$lang['i_success'].'</p>';
+ }
+ }else{
+ print_form($_REQUEST['d']);
+ }
+ ?>
+ </div>
+
+<div style="clear: both">
+ <a href="http://dokuwiki.org/"><img src="lib/tpl/default/images/button-dw.png" alt="driven by DokuWiki" /></a>
+ <a href="http://www.php.net"><img src="lib/tpl/default/images/button-php.gif" alt="powered by PHP" /></a>
+</div>
+</body>
+</html>
+<?php
+
+/**
+ * Print the input form
+ */
+function print_form($d){
+ global $lang;
+ global $LC;
+
+ if(!is_array($d)) $d = array();
+ $d = array_map('htmlspecialchars',$d);
+
+ if(!isset($d['acl'])) $d['acl']=1;
+
+ ?>
+ <form action="" method="post">
+ <input type="hidden" name="l" value="<?php echo $LC ?>" />
+ <fieldset>
+ <label for="title"><?php echo $lang['i_wikiname']?>
+ <input type="text" name="d[title]" id="title" value="<?php echo $d['title'] ?>" style="width: 20em;" />
+ </label>
+
+ <fieldset style="margin-top: 1em;">
+ <label for="acl">
+ <input type="checkbox" name="d[acl]" id="acl" <?php echo(($d['acl'] ? 'checked="checked"' : ''));?> />
+ <?php echo $lang['i_enableacl']?></label>
+
+ <fieldset id="acldep">
+ <label for="superuser"><?php echo $lang['i_superuser']?></label>
+ <input class="text" type="text" name="d[superuser]" id="superuser" value="<?php echo $d['superuser'] ?>" />
+
+ <label for="fullname"><?php echo $lang['fullname']?></label>
+ <input class="text" type="text" name="d[fullname]" id="fullname" value="<?php echo $d['fullname'] ?>" />
+
+ <label for="email"><?php echo $lang['email']?></label>
+ <input class="text" type="text" name="d[email]" id="email" value="<?php echo $d['email'] ?>" />
+
+ <label for="password"><?php echo $lang['pass']?></label>
+ <input class="text" type="password" name="d[password]" id="password" />
+
+ <label for="confirm"><?php echo $lang['passchk']?></label>
+ <input class="text" type="password" name="d[confirm]" id="confirm" />
+
+ <label for="policy"><?php echo $lang['i_policy']?></label>
+ <select class="text" name="d[policy]" id="policy">
+ <option value="0" <?php echo ($d['policy'] == 0)?'selected="selected"':'' ?>><?php echo $lang['i_pol0']?></option>
+ <option value="1" <?php echo ($d['policy'] == 1)?'selected="selected"':'' ?>><?php echo $lang['i_pol1']?></option>
+ <option value="2" <?php echo ($d['policy'] == 2)?'selected="selected"':'' ?>><?php echo $lang['i_pol2']?></option>
+ </select>
+ </fieldset>
+ </fieldset>
+
+ </fieldset>
+ <fieldset id="process">
+ <input class="button" type="submit" name="submit" value="<?php echo $lang['btn_save']?>" />
+ </fieldset>
+ </form>
+ <?php
+}
+
+function print_retry() {
+ global $lang;
+ global $LC;
+?>
+ <form action="" method="get">
+ <fieldset>
+ <input type="hidden" name="l" value="<?php echo $LC ?>" />
+ <input class="button" type="submit" value="<?php echo $lang['i_retry'];?>" />
+ </fieldset>
+ </form>
+<?php
+}
+
+/**
+ * Check validity of data
+ *
+ * @author Andreas Gohr
+ */
+function check_data(&$d){
+ global $lang;
+ global $error;
+
+ //autolowercase the username
+ $d['superuser'] = strtolower($d['superuser']);
+
+ $ok = true;
+
+ // check input
+ if(empty($d['title'])){
+ $error[] = sprintf($lang['i_badval'],$lang['i_wikiname']);
+ $ok = false;
+ }
+ if($d['acl']){
+ if(!preg_match('/^[a-z1-9_]+$/',$d['superuser'])){
+ $error[] = sprintf($lang['i_badval'],$lang['i_superuser']);
+ $ok = false;
+ }
+ if(empty($d['password'])){
+ $error[] = sprintf($lang['i_badval'],$lang['pass']);
+ $ok = false;
+ }
+ if($d['confirm'] != $d['password']){
+ $error[] = sprintf($lang['i_badval'],$lang['passchk']);
+ $ok = false;
+ }
+ if(empty($d['fullname']) || strstr($d['fullname'],':')){
+ $error[] = sprintf($lang['i_badval'],$lang['fullname']);
+ $ok = false;
+ }
+ if(empty($d['email']) || strstr($d['email'],':') || !strstr($d['email'],'@')){
+ $error[] = sprintf($lang['i_badval'],$lang['email']);
+ $ok = false;
+ }
+ }
+ return $ok;
+}
+
+/**
+ * Writes the data to the config files
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function store_data($d){
+ global $LC;
+ $ok = true;
+ $d['policy'] = (int) $d['policy'];
+
+ // create local.php
+ $now = date('r');
+ $output = <<<EOT
+<?php
+/**
+ * Dokuwiki's Main Configuration File - Local Settings
+ * Auto-generated by install script
+ * Date: $now
+ */
+
+EOT;
+ $output .= '$conf[\'title\'] = \''.addslashes($d['title'])."';\n";
+ $output .= '$conf[\'lang\'] = \''.addslashes($LC)."';\n";
+ if($d['acl']){
+ $output .= '$conf[\'useacl\'] = 1'.";\n";
+ $output .= "\$conf['superuser'] = '@admin';\n";
+ }
+ $ok = $ok && fileWrite(DOKU_LOCAL.'local.php',$output);
+
+ if ($d['acl']) {
+ // create users.auth.php
+ // --- user:MD5password:Real Name:email:groups,comma,seperated
+ $output = join(":",array($d['superuser'], md5($d['password']), $d['fullname'], $d['email'], 'admin,user'));
+ $output = @file_get_contents(DOKU_CONF.'users.auth.php.dist')."\n$output\n";
+ $ok = $ok && fileWrite(DOKU_LOCAL.'users.auth.php', $output);
+
+ // create acl.auth.php
+ $output = <<<EOT
+# acl.auth.php
+# <?php exit()?>
+# Don't modify the lines above
+#
+# Access Control Lists
+#
+# Auto-generated by install script
+# Date: $now
+
+EOT;
+ if($d['policy'] == 2){
+ $output .= "* @ALL 0\n";
+ $output .= "* @user 8\n";
+ }elseif($d['policy'] == 1){
+ $output .= "* @ALL 1\n";
+ $output .= "* @user 8\n";
+ }else{
+ $output .= "* @ALL 8\n";
+ }
+ $ok = $ok && fileWrite(DOKU_LOCAL.'acl.auth.php', $output);
+ }
+ return $ok;
+}
+
+/**
+ * Write the given content to a file
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function fileWrite($filename, $data) {
+ global $error;
+ global $lang;
+
+ if (($fp = @fopen($filename, 'wb')) === false) {
+ $filename = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}/', $filename);
+ $error[] = sprintf($lang['i_writeerr'],$filename);
+ return false;
+ }
+
+ if (!empty($data)) { fwrite($fp, $data); }
+ fclose($fp);
+ return true;
+}
+
+
+/**
+ * check installation dependent local config files and tests for a known
+ * unmodified main config file
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function check_configs(){
+ global $error;
+ global $lang;
+ global $dokuwiki_hash;
+
+ $ok = true;
+
+ $config_files = array(
+ 'local' => DOKU_LOCAL.'local.php',
+ 'users' => DOKU_LOCAL.'users.auth.php',
+ 'auth' => DOKU_LOCAL.'acl.auth.php'
+ );
+
+
+ // main dokuwiki config file (conf/dokuwiki.php) must not have been modified
+ $installation_hash = md5(preg_replace("/(\015\012)|(\015)/","\012",
+ @file_get_contents(DOKU_CONF.'dokuwiki.php')));
+ if (!in_array($installation_hash, $dokuwiki_hash)) {
+ $error[] = sprintf($lang['i_badhash'],$installation_hash);
+ $ok = false;
+ }
+
+ // configs shouldn't exist
+ foreach ($config_files as $file) {
+ if (@file_exists($file)) {
+ $file = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}/', $file);
+ $error[] = sprintf($lang['i_confexists'],$file);
+ $ok = false;
+ }
+ }
+ return $ok;
+}
+
+
+/**
+ * Check other installation dir/file permission requirements
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function check_permissions(){
+ global $error;
+ global $lang;
+
+ $dirs = array(
+ 'conf' => DOKU_LOCAL,
+ 'data' => DOKU_INC.'data',
+ 'pages' => DOKU_INC.'data/pages',
+ 'attic' => DOKU_INC.'data/attic',
+ 'media' => DOKU_INC.'data/media',
+ 'meta' => DOKU_INC.'data/meta',
+ 'cache' => DOKU_INC.'data/cache',
+ 'locks' => DOKU_INC.'data/locks',
+ 'index' => DOKU_INC.'data/index',
+ 'tmp' => DOKU_INC.'data/tmp'
+ );
+
+ $ok = true;
+ foreach($dirs as $dir){
+ if(!@file_exists("$dir/.") || !@is_writable($dir)){
+ $dir = str_replace($_SERVER['DOCUMENT_ROOT'],'{DOCUMENT_ROOT}', $dir);
+ $error[] = sprintf($lang['i_permfail'],$dir);
+ $ok = false;
+ }
+ }
+ return $ok;
+}
+
+/**
+ * Check the availability of functions used in DokuWiki and the PHP version
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function check_functions(){
+ global $error;
+ global $lang;
+ $ok = true;
+
+ if(version_compare(phpversion(),'5.1.2','<')){
+ $error[] = sprintf($lang['i_phpver'],phpversion(),'5.1.2');
+ $ok = false;
+ }
+
+ $funcs = explode(' ','addslashes basename call_user_func chmod copy fgets '.
+ 'file file_exists fseek flush filesize ftell fopen '.
+ 'glob header ignore_user_abort ini_get mail mkdir '.
+ 'ob_start opendir parse_ini_file readfile realpath '.
+ 'rename rmdir serialize session_start unlink usleep '.
+ 'preg_replace file_get_contents htmlspecialchars_decode');
+
+ if (!function_exists('mb_substr')) {
+ $funcs[] = 'utf8_encode';
+ $funcs[] = 'utf8_decode';
+ }
+
+ foreach($funcs as $func){
+ if(!function_exists($func)){
+ $error[] = sprintf($lang['i_funcna'],$func);
+ $ok = false;
+ }
+ }
+ return $ok;
+}
+
+/**
+ * Print language selection
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function langsel(){
+ global $lang;
+ global $LC;
+
+ $dir = DOKU_INC.'inc/lang';
+ $dh = opendir($dir);
+ if(!$dh) return;
+
+ $langs = array();
+ while (($file = readdir($dh)) !== false) {
+ if(preg_match('/^[\._]/',$file)) continue;
+ if(is_dir($dir.'/'.$file) && @file_exists($dir.'/'.$file.'/lang.php')){
+ $langs[] = $file;
+ }
+ }
+ closedir($dh);
+ sort($langs);
+
+ echo '<form action="">';
+ echo $lang['i_chooselang'];
+ echo ': <select name="l" onchange="submit()">';
+ foreach($langs as $l){
+ $sel = ($l == $LC) ? 'selected="selected"' : '';
+ echo '<option value="'.$l.'" '.$sel.'>'.$l.'</option>';
+ }
+ echo '</select> ';
+ echo '<input type="submit" value="'.$lang['btn_update'].'" />';
+ echo '</form>';
+}
+
+/**
+ * Print global error array
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function print_errors(){
+ global $error;
+ echo '<ul>';
+ foreach ($error as $err){
+ echo "<li>$err</li>";
+ }
+ echo '</ul>';
+}
+
+/**
+ * remove magic quotes recursivly
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function remove_magic_quotes(&$array) {
+ foreach (array_keys($array) as $key) {
+ if (is_array($array[$key])) {
+ remove_magic_quotes($array[$key]);
+ }else {
+ $array[$key] = stripslashes($array[$key]);
+ }
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as
new file mode 100644
index 000000000..c5e7799f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as
@@ -0,0 +1,329 @@
+/**
+ * Flash Multi Upload
+ *
+ * Based on a example from Alastair Dawson
+ *
+ * @link http://blog.vixiom.com/2006/09/08/multiple-file-upload-with-flash-and-ruby-on-rails/
+ * @author Alastair Dawson
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// delegate
+import mx.utils.Delegate;
+// ui components
+import mx.controls.DataGrid;
+import mx.controls.gridclasses.DataGridColumn
+import mx.controls.Button;
+import mx.controls.TextInput;
+import mx.controls.CheckBox;
+import mx.controls.Label;
+// file reference
+import flash.net.FileReferenceList;
+import flash.net.FileReference;
+
+class MultipleUpload {
+
+ private var fileRef:FileReferenceList;
+ private var fileRefListener:Object;
+ private var list:Array;
+ private var dp:Array;
+
+ private var files_dg:DataGrid;
+ private var browse_btn:Button;
+ private var upload_btn:Button;
+ private var ns_input:TextInput;
+ private var ns_label:Label;
+ private var overwrite_cb:CheckBox;
+
+ private var url:String;
+ private var upurl:String;
+ private var current:Number;
+ private var done:Number;
+ private var lasterror:String;
+
+ /**
+ * Constructor.
+ *
+ * Initializes the needed objects and stage objects
+ */
+ public function MultipleUpload(fdg:DataGrid, bb:Button, ub:Button, nsi:TextInput, nsl:Label, ob:CheckBox) {
+ // references for objects on the stage
+ files_dg = fdg;
+ browse_btn = bb;
+ upload_btn = ub;
+ ns_input = nsi;
+ ns_label = nsl;
+ overwrite_cb = ob;
+
+ // file list references & listener
+ fileRef = new FileReferenceList();
+ fileRefListener = new Object();
+ fileRef.addListener(fileRefListener);
+
+ // setup
+ iniUI();
+ inifileRefListener();
+ }
+
+ /**
+ * Initializes the User Interface
+ *
+ * Uses flashvars to access possibly localized names
+ */
+ private function iniUI() {
+ // register button handlers
+ browse_btn.onRelease = Delegate.create(this, this.browse);
+ upload_btn.onRelease = Delegate.create(this, this.upload);
+
+ // columns for dataGrid
+ var col:DataGridColumn;
+ col = new DataGridColumn('name');
+ col.headerText = ( _root.L_gridname ? _root.L_gridname : 'Filename' );
+ col.sortable = false;
+ files_dg.addColumn(col);
+ col = new DataGridColumn('size');
+ col.headerText = ( _root.L_gridsize ? _root.L_gridsize : 'Size' );
+ col.sortable = false;
+ files_dg.addColumn(col);
+ col = new DataGridColumn('status');
+ col.headerText = ( _root.L_gridstat ? _root.L_gridstat : 'Status' );
+ col.sortable = false;
+ files_dg.addColumn(col);
+
+ // label translations
+ if(_root.L_overwrite) overwrite_cb.label = _root.L_overwrite;
+ if(_root.L_browse) browse_btn.label = _root.L_browse;
+ if(_root.L_upload) upload_btn.label = _root.L_upload;
+ if(_root.L_namespace) ns_label.text = _root.L_namespace;
+
+ // prefill input field
+ if(_root.O_ns) ns_input.text = _root.O_ns;
+
+ // disable buttons
+ upload_btn.enabled = false;
+ if(!_root.O_overwrite) overwrite_cb.visible = false;
+
+ // initalize the data provider list
+ dp = new Array();
+ list = new Array();
+ files_dg.spaceColumnsEqually();
+ }
+
+ /**
+ * Open files selection dialog
+ *
+ * Adds the allowed file types
+ */
+ private function browse() {
+ if(_root.O_extensions){
+ var exts:Array = _root.O_extensions.split('|');
+ var filter:Object = new Object();
+ filter.description = (_root.L_filetypes ? _root.L_filetypes : 'Allowed filetypes');
+ filter.extension = '';
+ for(var i:Number = 0; i<exts.length; i++){
+ filter.extension += '*.'+exts[i]+';';
+ }
+ filter.extension = filter.extension.substr(0,filter.extension.length-1);
+ var apply:Array = new Array();
+ apply.push(filter);
+ fileRef.browse(apply);
+ }else{
+ fileRef.browse();
+ }
+ }
+
+ /**
+ * Initiates the upload process
+ */
+ private function upload() {
+ // prepare backend URL
+ this.url = _root.O_backend; // from flashvars
+ this.url += '&ns='+escape(ns_input.text);
+
+ // prepare upload url
+ this.upurl = this.url;
+ this.upurl += '&sectok='+escape(_root.O_sectok);
+ this.upurl += '&authtok='+escape(_root.O_authtok);
+ if(overwrite_cb.selected) this.upurl += '&ow=1';
+
+ // disable buttons
+ upload_btn.enabled = false;
+ browse_btn.enabled = false;
+ ns_input.enabled = false;
+ overwrite_cb.enabled = false;
+
+ // init states
+ this.current = -1;
+ this.done = 0;
+ this.lasterror = '';
+
+ // start process detached
+ _global.setTimeout(this,'uploadNext',100);
+ nextFrame();
+ }
+
+ /**
+ * Uploads the next file in the list
+ */
+ private function uploadNext(){
+ this.current++;
+ if(this.current >= this.list.length){
+ return this.uploadDone();
+ }
+
+ var file = this.list[this.current];
+
+ if(_root.O_maxsize && (file.size > _root.O_maxsize)){
+ this.lasterror = (_root.L_toobig ? _root.L_toobig : 'too big');
+ _global.setTimeout(this,'uploadNext',100);
+ nextFrame();
+ }else{
+ file.addListener(fileRefListener);
+ file.upload(upurl);
+ // continues in the handlers
+ }
+ }
+
+ /**
+ * Redirect to the namespace and set a success/error message
+ *
+ * Called when all files in the list where processed
+ */
+ private function uploadDone(){
+ var info = (_root.L_info ? _root.L_info : 'files uploaded');
+ if(this.done == this.list.length){
+ this.url += '&msg1='+escape(this.done+'/'+this.list.length+' '+info);
+ }else{
+ var lasterr = (_root.L_lasterr ? _root.L_lasterr : 'Last error:');
+ this.url += '&err='+escape(this.done+'/'+this.list.length+' '+info+' '+lasterr+' '+this.lasterror);
+ }
+
+ // when done redirect
+ getURL(this.url,'_self');
+ }
+
+ /**
+ * Set the status of a given file in the data grid
+ */
+ private function setStatus(file,msg){
+ for(var i:Number = 0; i < list.length; i++) {
+ if (list[i].name == file.name) {
+ files_dg.editField(i, 'status', msg);
+ nextFrame();
+ return;
+ }
+ }
+ }
+
+ /**
+ * Initialize the file reference listener
+ */
+ private function inifileRefListener() {
+ fileRefListener.onSelect = Delegate.create(this, this.onSelect);
+ fileRefListener.onCancel = Delegate.create(this, this.onCancel);
+ fileRefListener.onOpen = Delegate.create(this, this.onOpen);
+ fileRefListener.onProgress = Delegate.create(this, this.onProgress);
+ fileRefListener.onComplete = Delegate.create(this, this.onComplete);
+ fileRefListener.onHTTPError = Delegate.create(this, this.onHTTPError);
+ fileRefListener.onIOError = Delegate.create(this, this.onIOError);
+ fileRefListener.onSecurityError = Delegate.create(this, this.onSecurityError);
+ }
+
+ /**
+ * Handle file selection
+ *
+ * Files are added as in a list of references and beautified into the data grid dataprovider array
+ *
+ * Multiple browses will add to the list
+ */
+ private function onSelect(fileRefList:FileReferenceList) {
+ var sel = fileRefList.fileList;
+ for(var i:Number = 0; i < sel.length; i++) {
+ // check size
+ var stat:String;
+ if(_root.O_maxsize && sel[i].size > _root.O_maxsize){
+ stat = (_root.L_toobig ? _root.L_toobig : 'too big');
+ }else{
+ stat = (_root.L_ready ? _root.L_ready : 'ready for upload');
+ }
+ // add to grid
+ dp.push({name:sel[i].name, size:Math.round(sel[i].size / 1000) + " kb", status:stat});
+ // add to reference list
+ list.push(sel[i]);
+ }
+ // update dataGrid
+ files_dg.dataProvider = dp;
+ files_dg.spaceColumnsEqually();
+
+ if(list.length > 0) upload_btn.enabled = true;
+ }
+
+ /**
+ * Does nothing
+ */
+ private function onCancel() {
+ }
+
+ /**
+ * Does nothing
+ */
+ private function onOpen(file:FileReference) {
+ }
+
+ /**
+ * Set the upload progress
+ */
+ private function onProgress(file:FileReference, bytesLoaded:Number, bytesTotal:Number) {
+ var percentDone = Math.round((bytesLoaded / bytesTotal) * 100);
+ var msg:String = 'uploading @PCT@%';
+ if(_root.L_progress) msg = _root.L_progress;
+ msg = msg.split('@PCT@').join(percentDone);
+ this.setStatus(file,msg);
+ }
+
+ /**
+ * Handle upload completion
+ */
+ private function onComplete(file:FileReference) {
+ this.setStatus(file,(_root.L_done ? _root.L_done : 'complete'));
+ this.done++;
+ uploadNext();
+ }
+
+ /**
+ * Handle upload errors
+ */
+ private function onHTTPError(file:FileReference, httpError:Number) {
+ var error;
+ if(httpError == 400){
+ error = (_root.L_fail ? _root.L_fail : 'failed');
+ }else if(httpError == 401){
+ error = (_root.L_authfail ? _root.L_authfail : 'auth failed');
+ }else{
+ error = "HTTP Error " + httpError
+ }
+ this.setStatus(file,error);
+ this.lasterror = error;
+ uploadNext();
+ }
+
+ /**
+ * Handle IO errors
+ */
+ private function onIOError(file:FileReference) {
+ this.setStatus(file,"IO Error");
+ this.lasterror = "IO Error";
+ uploadNext();
+ }
+
+ /**
+ * Handle Security errors
+ */
+ private function onSecurityError(file:FileReference, errorString:String) {
+ this.setStatus(file,"SecurityError: " + errorString);
+ this.lasterror = "SecurityError: " + errorString;
+ uploadNext();
+ }
+
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/README b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/README
new file mode 100644
index 000000000..6ecc72ac1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/README
@@ -0,0 +1,4 @@
+This directory contains the sources for the Flash Multiuploader. Its based on
+a example from Alastair Dawson given at
+http://blog.vixiom.com/2006/09/08/multiple-file-upload-with-flash-and-ruby-on-rails/
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html
@@ -0,0 +1,12 @@
+<!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>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla
new file mode 100644
index 000000000..220616960
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php
new file mode 100644
index 000000000..4618abd71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php
@@ -0,0 +1,370 @@
+<?php
+/**
+ * DokuWiki AJAX call handler
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+//fix for Opera XMLHttpRequests
+if(!count($_POST) && $HTTP_RAW_POST_DATA){
+ parse_str($HTTP_RAW_POST_DATA, $_POST);
+}
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/auth.php');
+//close sesseion
+session_write_close();
+
+header('Content-Type: text/html; charset=utf-8');
+
+
+//call the requested function
+if(isset($_POST['call']))
+ $call = $_POST['call'];
+else if(isset($_GET['call']))
+ $call = $_GET['call'];
+else
+ exit;
+
+$callfn = 'ajax_'.$call;
+
+if(function_exists($callfn)){
+ $callfn();
+}else{
+ $evt = new Doku_Event('AJAX_CALL_UNKNOWN', $call);
+ if ($evt->advise_before()) {
+ print "AJAX call '".htmlspecialchars($call)."' unknown!\n";
+ exit;
+ }
+ $evt->advise_after();
+ unset($evt);
+}
+
+/**
+ * Searches for matching pagenames
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_qsearch(){
+ global $conf;
+ global $lang;
+
+ $query = cleanID($_POST['q']);
+ if(empty($query)) $query = cleanID($_GET['q']);
+ if(empty($query)) return;
+
+ require_once(DOKU_INC.'inc/html.php');
+ require_once(DOKU_INC.'inc/fulltext.php');
+
+ $data = array();
+ $data = ft_pageLookup($query);
+
+ if(!count($data)) return;
+
+ print '<strong>'.$lang['quickhits'].'</strong>';
+ print '<ul>';
+ foreach($data as $id){
+ print '<li>';
+ $ns = getNS($id);
+ if($ns){
+ $name = shorten(noNS($id), ' ('.$ns.')',30);
+ }else{
+ $name = $id;
+ }
+ print html_wikilink(':'.$id,$name);
+ print '</li>';
+ }
+ print '</ul>';
+}
+
+/**
+ * Support OpenSearch suggestions
+ *
+ * @link http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.0
+ * @author Mike Frysinger <vapier@gentoo.org>
+ */
+function ajax_suggestions() {
+ global $conf;
+ global $lang;
+
+ $query = cleanID($_POST['q']);
+ if(empty($query)) $query = cleanID($_GET['q']);
+ if(empty($query)) return;
+
+ require_once(DOKU_INC.'inc/html.php');
+ require_once(DOKU_INC.'inc/fulltext.php');
+ require_once(DOKU_INC.'inc/JSON.php');
+
+ $data = array();
+ $data = ft_pageLookup($query);
+ if(!count($data)) return;
+
+ // limit results to 15 hits
+ $data = array_slice($data, 0, 15);
+ $data = array_map('trim',$data);
+ $data = array_map('noNS',$data);
+ $data = array_unique($data);
+ sort($data);
+
+ /* now construct a json */
+ $suggestions = array(
+ $query, // the original query
+ $data, // some suggestions
+ array(), // no description
+ array() // no urls
+ );
+ $json = new JSON();
+
+ header('Content-Type: application/x-suggestions+json');
+ print $json->encode($suggestions);
+}
+
+/**
+ * Refresh a page lock and save draft
+ *
+ * Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_lock(){
+ global $conf;
+ global $lang;
+ $id = cleanID($_POST['id']);
+ if(empty($id)) return;
+
+ if(!checklock($id)){
+ lock($id);
+ echo 1;
+ }
+
+ if($conf['usedraft'] && $_POST['wikitext']){
+ $client = $_SERVER['REMOTE_USER'];
+ if(!$client) $client = clientIP(true);
+
+ $draft = array('id' => $id,
+ 'prefix' => $_POST['prefix'],
+ 'text' => $_POST['wikitext'],
+ 'suffix' => $_POST['suffix'],
+ 'date' => $_POST['date'],
+ 'client' => $client,
+ );
+ $cname = getCacheName($draft['client'].$id,'.draft');
+ if(io_saveFile($cname,serialize($draft))){
+ echo $lang['draftdate'].' '.dformat();
+ }
+ }
+
+}
+
+/**
+ * Delete a draft
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_draftdel(){
+ $id = cleanID($_POST['id']);
+ if(empty($id)) return;
+
+ $client = $_SERVER['REMOTE_USER'];
+ if(!$client) $client = clientIP(true);
+
+ $cname = getCacheName($client.$id,'.draft');
+ @unlink($cname);
+}
+
+/**
+ * Return subnamespaces for the Mediamanager
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_medians(){
+ global $conf;
+ require_once(DOKU_INC.'inc/search.php');
+ require_once(DOKU_INC.'inc/media.php');
+
+ // wanted namespace
+ $ns = cleanID($_POST['ns']);
+ $dir = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $lvl = count(explode(':',$ns));
+
+ $data = array();
+ search($data,$conf['mediadir'],'search_index',array('nofiles' => true),$dir);
+ foreach($data as $item){
+ $item['level'] = $lvl+1;
+ echo media_nstree_li($item);
+ echo media_nstree_item($item);
+ echo '</li>';
+ }
+}
+
+/**
+ * Return list of files for the Mediamanager
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_medialist(){
+ global $conf;
+ global $NS;
+ require_once(DOKU_INC.'inc/media.php');
+ require_once(DOKU_INC.'inc/template.php');
+
+ $NS = $_POST['ns'];
+ tpl_mediaContent(true);
+}
+
+/**
+ * Return list of search result for the Mediamanager
+ *
+ * @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ */
+function ajax_mediasearchlist(){
+ global $conf;
+ require_once(DOKU_INC.'inc/media.php');
+
+ media_searchlist($_POST['ns']);
+}
+
+/**
+ * Return sub index for index view
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function ajax_index(){
+ global $conf;
+ require_once(DOKU_INC.'inc/search.php');
+ require_once(DOKU_INC.'inc/html.php');
+
+ // wanted namespace
+ $ns = cleanID($_POST['idx']);
+ $dir = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $lvl = count(explode(':',$ns));
+
+ $data = array();
+ search($data,$conf['datadir'],'search_index',array('ns' => $ns),$dir);
+ foreach($data as $item){
+ $item['level'] = $lvl+1;
+ echo html_li_index($item);
+ echo '<div class="li">';
+ echo html_list_index($item);
+ echo '</div>';
+ echo '</li>';
+ }
+}
+
+/**
+ * List matching namespaces and pages for the link wizard
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function ajax_linkwiz(){
+ global $conf;
+ global $lang;
+ require_once(DOKU_INC.'inc/html.php');
+
+ $q = ltrim($_POST['q'],':');
+ $id = noNS($q);
+ $ns = getNS($q);
+
+ $ns = cleanID($ns);
+ $id = cleanID($id);
+
+ $nsd = utf8_encodeFN(str_replace(':','/',$ns));
+ $idd = utf8_encodeFN(str_replace(':','/',$id));
+
+ $data = array();
+ if($q && !$ns){
+
+ // use index to lookup matching pages
+ require_once(DOKU_INC.'inc/fulltext.php');
+ require_once(DOKU_INC.'inc/parserutils.php');
+ $pages = array();
+ $pages = ft_pageLookup($id,false);
+
+ // result contains matches in pages and namespaces
+ // we now extract the matching namespaces to show
+ // them seperately
+ $dirs = array();
+ $count = count($pages);
+ for($i=0; $i<$count; $i++){
+ if(strpos(noNS($pages[$i]),$id) === false){
+ // match was in the namespace
+ $dirs[getNS($pages[$i])] = 1; // assoc array avoids dupes
+ }else{
+ // it is a matching page, add it to the result
+ $data[] = array(
+ 'id' => $pages[$i],
+ 'title' => p_get_first_heading($pages[$i],false),
+ 'type' => 'f',
+ );
+ }
+ unset($pages[$i]);
+ }
+ foreach($dirs as $dir => $junk){
+ $data[] = array(
+ 'id' => $dir,
+ 'type' => 'd',
+ );
+ }
+
+ }else{
+
+ require_once(DOKU_INC.'inc/search.php');
+ $opts = array(
+ 'depth' => 1,
+ 'listfiles' => true,
+ 'listdirs' => true,
+ 'pagesonly' => true,
+ 'firsthead' => true,
+ );
+ if($id) $opts['filematch'] = '^.*\/'.$id;
+ if($id) $opts['dirmatch'] = '^.*\/'.$id;
+ search($data,$conf['datadir'],'search_universal',$opts,$nsd);
+
+ // add back to upper
+ if($ns){
+ array_unshift($data,array(
+ 'id' => getNS($ns),
+ 'type' => 'u',
+ ));
+ }
+ }
+
+ // fixme sort results in a useful way ?
+
+ if(!count($data)){
+ echo $lang['nothingfound'];
+ exit;
+ }
+
+ // output the found data
+ $even = 1;
+ foreach($data as $item){
+ $even *= -1; //zebra
+
+ if(($item['type'] == 'd' || $item['type'] == 'u') && $item['id']) $item['id'] .= ':';
+ $link = wl($item['id']);
+
+ echo '<div class="'.(($even > 0)?'even':'odd').' type_'.$item['type'].'">';
+
+
+ if($item['type'] == 'u'){
+ $name = $lang['upperns'];
+ }else{
+ $name = htmlspecialchars($item['id']);
+ }
+
+ echo '<a href="'.$link.'" title="'.htmlspecialchars($item['id']).'" class="wikilink1">'.$name.'</a>';
+
+ if($item['title']){
+ echo '<span>'.htmlspecialchars($item['title']).'</span>';
+ }
+ echo '</div>';
+ }
+
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php
new file mode 100644
index 000000000..2cb383de0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php
@@ -0,0 +1,330 @@
+<?php
+/**
+ * DokuWiki StyleSheet creator
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
+if(!defined('DOKU_DISABLE_GZIP_OUTPUT')) define('DOKU_DISABLE_GZIP_OUTPUT',1); // we gzip ourself here
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/httputils.php');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/confutils.php');
+
+// Main (don't run when UNIT test)
+if(!defined('SIMPLE_TEST')){
+ header('Content-Type: text/css; charset=utf-8');
+ css_out();
+}
+
+
+// ---------------------- functions ------------------------------
+
+/**
+ * Output all needed Styles
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_out(){
+ global $conf;
+ global $lang;
+ $style = '';
+ if (isset($_REQUEST['s']) &&
+ in_array($_REQUEST['s'], array('all', 'print', 'feed'))) {
+ $style = $_REQUEST['s'];
+ }
+
+ $tpl = trim(preg_replace('/[^\w-]+/','',$_REQUEST['t']));
+ if($tpl){
+ $tplinc = DOKU_INC.'lib/tpl/'.$tpl.'/';
+ $tpldir = DOKU_BASE.'lib/tpl/'.$tpl.'/';
+ }else{
+ $tplinc = DOKU_TPLINC;
+ $tpldir = DOKU_TPL;
+ }
+
+ // The generated script depends on some dynamic options
+ $cache = getCacheName('styles'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].DOKU_BASE.$tplinc.$style,'.css');
+
+ // load template styles
+ $tplstyles = array();
+ if(@file_exists($tplinc.'style.ini')){
+ $ini = parse_ini_file($tplinc.'style.ini',true);
+ foreach($ini['stylesheets'] as $file => $mode){
+ $tplstyles[$mode][$tplinc.$file] = $tpldir;
+ }
+ }
+
+ // Array of needed files and their web locations, the latter ones
+ // are needed to fix relative paths in the stylesheets
+ $files = array();
+ //if (isset($tplstyles['all'])) $files = array_merge($files, $tplstyles['all']);
+ if(!empty($style)){
+ $files[DOKU_INC.'lib/styles/'.$style.'.css'] = DOKU_MEDIA.'lib/styles/';
+ // load plugin, template, user styles
+ $files = array_merge($files, css_pluginstyles($style));
+ if (isset($tplstyles[$style])) $files = array_merge($files, $tplstyles[$style]);
+ $files[DOKU_CONF.'user'.$style.'.css'] = DOKU_MEDIA;
+ }else{
+ $files[DOKU_INC.'lib/styles/style.css'] = DOKU_MEDIA.'lib/styles/';
+ // load plugin, template, user styles
+ $files = array_merge($files, css_pluginstyles('screen'));
+ if (isset($tplstyles['screen'])) $files = array_merge($files, $tplstyles['screen']);
+ if($lang['direction'] == 'rtl'){
+ if (isset($tplstyles['rtl'])) $files = array_merge($files, $tplstyles['rtl']);
+ }
+ $files[DOKU_CONF.'userstyle.css'] = DOKU_BASE;
+ }
+
+ // check cache age & handle conditional request
+ header('Cache-Control: public, max-age=3600');
+ header('Pragma: public');
+ if(css_cacheok($cache,array_keys($files),$tplinc)){
+ http_conditionalRequest(filemtime($cache));
+ if($conf['allowdebug']) header("X-CacheUsed: $cache");
+
+ // finally send output
+ if ($conf['gzip_output'] && http_gzip_valid($cache)) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ readfile($cache.".gz");
+ } else {
+ if (!http_sendfile($cache)) readfile($cache);
+ }
+
+ return;
+ } else {
+ http_conditionalRequest(time());
+ }
+
+ // start output buffering and build the stylesheet
+ ob_start();
+
+ // print the default classes for interwiki links and file downloads
+ css_interwiki();
+ css_filetypes();
+
+ // load files
+ foreach($files as $file => $location){
+ print css_loadfile($file, $location);
+ }
+
+ // end output buffering and get contents
+ $css = ob_get_contents();
+ ob_end_clean();
+
+ // apply style replacements
+ $css = css_applystyle($css,$tplinc);
+
+ // compress whitespace and comments
+ if($conf['compress']){
+ $css = css_compress($css);
+ }
+
+ // save cache file
+ io_saveFile($cache,$css);
+ if(function_exists('gzopen')) io_saveFile("$cache.gz",$css);
+
+ // finally send output
+ if ($conf['gzip_output']) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ print gzencode($css,9,FORCE_GZIP);
+ } else {
+ print $css;
+ }
+}
+
+/**
+ * Checks if a CSS Cache file still is valid
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_cacheok($cache,$files,$tplinc){
+ global $config_cascade;
+
+ if(isset($_REQUEST['purge'])) return false; //support purge request
+
+ $ctime = @filemtime($cache);
+ if(!$ctime) return false; //There is no cache
+
+ // some additional files to check
+ $files = array_merge($files, getConfigFiles('main'));
+ $files[] = $tplinc.'style.ini';
+ $files[] = __FILE__;
+
+ // now walk the files
+ foreach($files as $file){
+ if(@filemtime($file) > $ctime){
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Does placeholder replacements in the style according to
+ * the ones defined in a templates style.ini file
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_applystyle($css,$tplinc){
+ if(@file_exists($tplinc.'style.ini')){
+ $ini = parse_ini_file($tplinc.'style.ini',true);
+ $css = strtr($css,$ini['replacements']);
+ }
+ return $css;
+}
+
+/**
+ * Prints classes for interwikilinks
+ *
+ * Interwiki links have two classes: 'interwiki' and 'iw_$name>' where
+ * $name is the identifier given in the config. All Interwiki links get
+ * an default style with a default icon. If a special icon is available
+ * for an interwiki URL it is set in it's own class. Both classes can be
+ * overwritten in the template or userstyles.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_interwiki(){
+
+ // default style
+ echo 'a.interwiki {';
+ echo ' background: transparent url('.DOKU_MEDIA.'lib/images/interwiki.png) 0px 1px no-repeat;';
+ echo ' padding-left: 16px;';
+ echo '}';
+
+ // additional styles when icon available
+ $iwlinks = getInterwiki();
+ foreach(array_keys($iwlinks) as $iw){
+ $class = preg_replace('/[^_\-a-z0-9]+/i','_',$iw);
+ if(@file_exists(DOKU_INC.'lib/images/interwiki/'.$iw.'.png')){
+ echo "a.iw_$class {";
+ echo ' background-image: url('.DOKU_MEDIA.'lib/images/interwiki/'.$iw.'.png)';
+ echo '}';
+ }elseif(@file_exists(DOKU_INC.'lib/images/interwiki/'.$iw.'.gif')){
+ echo "a.iw_$class {";
+ echo ' background-image: url('.DOKU_MEDIA.'lib/images/interwiki/'.$iw.'.gif)';
+ echo '}';
+ }
+ }
+}
+
+/**
+ * Prints classes for file download links
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_filetypes(){
+
+ // default style
+ echo 'a.mediafile {';
+ echo ' background: transparent url('.DOKU_MEDIA.'lib/images/fileicons/file.png) 0px 1px no-repeat;';
+ echo ' padding-left: 18px;';
+ echo ' padding-bottom: 1px;';
+ echo '}';
+
+ // additional styles when icon available
+ // scan directory for all icons
+ $exts = array();
+ if($dh = opendir(DOKU_INC.'lib/images/fileicons')){
+ while(false !== ($file = readdir($dh))){
+ if(preg_match('/([_\-a-z0-9]+(?:\.[_\-a-z0-9]+)*?)\.(png|gif)/i',$file,$match)){
+ $ext = strtolower($match[1]);
+ $type = '.'.strtolower($match[2]);
+ if($ext!='file' && (!isset($exts[$ext]) || $type=='.png')){
+ $exts[$ext] = $type;
+ }
+ }
+ }
+ closedir($dh);
+ }
+ foreach($exts as $ext=>$type){
+ $class = preg_replace('/[^_\-a-z0-9]+/','_',$ext);
+ echo "a.mf_$class {";
+ echo ' background-image: url('.DOKU_MEDIA.'lib/images/fileicons/'.$ext.$type.')';
+ echo '}';
+ }
+}
+
+/**
+ * Loads a given file and fixes relative URLs with the
+ * given location prefix
+ */
+function css_loadfile($file,$location=''){
+ if(!@file_exists($file)) return '';
+ $css = io_readFile($file);
+ if(!$location) return $css;
+
+ $css = preg_replace('#(url\([ \'"]*)((?!/|http://|https://| |\'|"))#','\\1'.$location.'\\3',$css);
+ return $css;
+}
+
+
+/**
+ * Returns a list of possible Plugin Styles (no existance check here)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_pluginstyles($mode='screen'){
+ global $lang;
+ $list = array();
+ $plugins = plugin_list();
+ foreach ($plugins as $p){
+ if($mode == 'all'){
+ $list[DOKU_PLUGIN."$p/all.css"] = DOKU_BASE."lib/plugins/$p/";
+ }elseif($mode == 'print'){
+ $list[DOKU_PLUGIN."$p/print.css"] = DOKU_BASE."lib/plugins/$p/";
+ }elseif($mode == 'feed'){
+ $list[DOKU_PLUGIN."$p/feed.css"] = DOKU_BASE."lib/plugins/$p/";
+ }else{
+ $list[DOKU_PLUGIN."$p/style.css"] = DOKU_BASE."lib/plugins/$p/";
+ $list[DOKU_PLUGIN."$p/screen.css"] = DOKU_BASE."lib/plugins/$p/";
+ }
+ if($lang['direction'] == 'rtl'){
+ $list[DOKU_PLUGIN."$p/rtl.css"] = DOKU_BASE."lib/plugins/$p/";
+ }
+ }
+ return $list;
+}
+
+/**
+ * Very simple CSS optimizer
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_compress($css){
+ //strip comments through a callback
+ $css = preg_replace_callback('#(/\*)(.*?)(\*/)#s','css_comment_cb',$css);
+
+ //strip (incorrect but common) one line comments
+ $css = preg_replace('/(?<!:)\/\/.*$/m','',$css);
+
+ // strip whitespaces
+ $css = preg_replace('![\r\n\t ]+!',' ',$css);
+ $css = preg_replace('/ ?([:;,{}\/]) ?/','\\1',$css);
+
+ // shorten colors
+ $css = preg_replace("/#([0-9a-fA-F]{1})\\1([0-9a-fA-F]{1})\\2([0-9a-fA-F]{1})\\3/", "#\\1\\2\\3",$css);
+
+ return $css;
+}
+
+/**
+ * Callback for css_compress()
+ *
+ * Keeps short comments (< 5 chars) to maintain typical browser hacks
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function css_comment_cb($matches){
+ if(strlen($matches[2]) > 4) return '';
+ return $matches[0];
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php
new file mode 100644
index 000000000..f30e039d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php
@@ -0,0 +1,58 @@
+<?php
+ if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+ define('DOKU_MEDIADETAIL',1);
+ require_once(DOKU_INC.'inc/init.php');
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/lang/en/lang.php');
+ require_once(DOKU_INC.'inc/lang/'.$conf['lang'].'/lang.php');
+ require_once(DOKU_INC.'inc/JpegMeta.php');
+ require_once(DOKU_INC.'inc/html.php');
+ require_once(DOKU_INC.'inc/template.php');
+ require_once(DOKU_INC.'inc/auth.php');
+ //close session
+ session_write_close();
+
+ $IMG = getID('media');
+ $ID = cleanID($_REQUEST['id']);
+
+ if($conf['allowdebug'] && $_REQUEST['debug']){
+ print '<pre>';
+ foreach(explode(' ','basedir userewrite baseurl useslash') as $x){
+ print '$'."conf['$x'] = '".$conf[$x]."';\n";
+ }
+ foreach(explode(' ','DOCUMENT_ROOT HTTP_HOST SCRIPT_FILENAME PHP_SELF '.
+ 'REQUEST_URI SCRIPT_NAME PATH_INFO PATH_TRANSLATED') as $x){
+ print '$'."_SERVER['$x'] = '".$_SERVER[$x]."';\n";
+ }
+ print "getID('media'): ".getID('media')."\n";
+ print "getID('media',false): ".getID('media',false)."\n";
+ print '</pre>';
+ }
+
+ $ERROR = false;
+ // check image permissions
+ $AUTH = auth_quickaclcheck($IMG);
+ if($AUTH >= AUTH_READ){
+ // check if image exists
+ $SRC = mediaFN($IMG);
+ if(!@file_exists($SRC)){
+ //doesn't exist!
+
+ }
+ }else{
+ // no auth
+ $ERROR = p_locale_xhtml('denied');
+ }
+
+ /*if(!$ERROR){
+ // load EXIF/IPTC/image details
+ $INFO = array();
+ $INFO['std']['']
+ imagesize
+ }*/
+
+
+ //start output and load template
+ header('Content-Type: text/html; charset=utf-8');
+ include(template('detail.php'));
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php
new file mode 100644
index 000000000..11877ef36
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php
@@ -0,0 +1,173 @@
+<?php
+/**
+ * DokuWiki media passthrough file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+ if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+ define('DOKU_DISABLE_GZIP_OUTPUT', 1);
+ require_once(DOKU_INC.'inc/init.php');
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/media.php');
+ require_once(DOKU_INC.'inc/pageutils.php');
+ require_once(DOKU_INC.'inc/httputils.php');
+ require_once(DOKU_INC.'inc/confutils.php');
+ require_once(DOKU_INC.'inc/auth.php');
+
+ //close sesseion
+ session_write_close();
+
+ $mimetypes = getMimeTypes();
+
+ //get input
+ $MEDIA = stripctl(getID('media',false)); // no cleaning except control chars - maybe external
+ $CACHE = calc_cache($_REQUEST['cache']);
+ $WIDTH = (int) $_REQUEST['w'];
+ $HEIGHT = (int) $_REQUEST['h'];
+ list($EXT,$MIME,$DL) = mimetype($MEDIA,false);
+ if($EXT === false){
+ $EXT = 'unknown';
+ $MIME = 'application/octet-stream';
+ $DL = true;
+ }
+
+ //media to local file
+ if(preg_match('#^(https?)://#i',$MEDIA)){
+ //check hash
+ if(substr(md5(auth_cookiesalt().$MEDIA),0,6) != $_REQUEST['hash']){
+ header("HTTP/1.0 412 Precondition Failed");
+ print 'Precondition Failed';
+ exit;
+ }
+ //handle external images
+ if(strncmp($MIME,'image/',6) == 0) $FILE = media_get_from_URL($MEDIA,$EXT,$CACHE);
+ if(!$FILE){
+ //download failed - redirect to original URL
+ header('Location: '.$MEDIA);
+ exit;
+ }
+ }else{
+ $MEDIA = cleanID($MEDIA);
+ if(empty($MEDIA)){
+ header("HTTP/1.0 400 Bad Request");
+ print 'Bad request';
+ exit;
+ }
+
+ //check permissions (namespace only)
+ if(auth_quickaclcheck(getNS($MEDIA).':X') < AUTH_READ){
+ header("HTTP/1.0 401 Unauthorized");
+ //fixme add some image for imagefiles
+ print 'Unauthorized';
+ exit;
+ }
+ $FILE = mediaFN($MEDIA);
+ }
+
+ //check file existance
+ if(!@file_exists($FILE)){
+ header("HTTP/1.0 404 Not Found");
+ //FIXME add some default broken image
+ print 'Not Found';
+ exit;
+ }
+
+ $ORIG = $FILE;
+
+ //handle image resizing/cropping
+ if((substr($MIME,0,5) == 'image') && $WIDTH){
+ if($HEIGHT){
+ $FILE = media_crop_image($FILE,$EXT,$WIDTH,$HEIGHT);
+ }else{
+ $FILE = media_resize_image($FILE,$EXT,$WIDTH,$HEIGHT);
+ }
+ }
+
+ // finally send the file to the client
+ $data = array('file' => $FILE,
+ 'mime' => $MIME,
+ 'download' => $DL,
+ 'cache' => $CACHE,
+ 'orig' => $ORIG,
+ 'ext' => $EXT,
+ 'width' => $WIDTH,
+ 'height' => $HEIGHT);
+
+ $evt = new Doku_Event('MEDIA_SENDFILE', $data);
+ if ($evt->advise_before()) {
+ sendFile($data['file'],$data['mime'],$data['download'],$data['cache']);
+ }
+
+/* ------------------------------------------------------------------------ */
+
+/**
+ * Set headers and send the file to the client
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function sendFile($file,$mime,$dl,$cache){
+ global $conf;
+ $fmtime = @filemtime($file);
+ // send headers
+ header("Content-Type: $mime");
+ // smart http caching headers
+ if ($cache==-1) {
+ // cache
+ // cachetime or one hour
+ header('Expires: '.gmdate("D, d M Y H:i:s", time()+max($conf['cachetime'], 3600)).' GMT');
+ header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($conf['cachetime'], 3600));
+ header('Pragma: public');
+ } else if ($cache>0) {
+ // recache
+ // remaining cachetime + 10 seconds so the newly recached media is used
+ header('Expires: '.gmdate("D, d M Y H:i:s", $fmtime+$conf['cachetime']+10).' GMT');
+ header('Cache-Control: public, proxy-revalidate, no-transform, max-age='.max($fmtime-time()+$conf['cachetime']+10, 0));
+ header('Pragma: public');
+ } else if ($cache==0) {
+ // nocache
+ header('Cache-Control: must-revalidate, no-transform, post-check=0, pre-check=0');
+ header('Pragma: public');
+ }
+ //send important headers first, script stops here if '304 Not Modified' response
+ http_conditionalRequest($fmtime);
+
+
+ //download or display?
+ if($dl){
+ header('Content-Disposition: attachment; filename="'.basename($file).'";');
+ }else{
+ header('Content-Disposition: inline; filename="'.basename($file).'";');
+ }
+
+ //use x-sendfile header to pass the delivery to compatible webservers
+ if (http_sendfile($file)) exit;
+
+ // send file contents
+ $fp = @fopen($file,"rb");
+ if($fp){
+ http_rangeRequest($fp,filesize($file),$mime);
+ }else{
+ header("HTTP/1.0 500 Internal Server Error");
+ print "Could not read $file - bad permissions?";
+ }
+}
+
+/**
+ * Returns the wanted cachetime in seconds
+ *
+ * Resolves named constants
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function calc_cache($cache){
+ global $conf;
+
+ if(strtolower($cache) == 'nocache') return 0; //never cache
+ if(strtolower($cache) == 'recache') return $conf['cachetime']; //use standard cache
+ return -1; //cache endless
+}
+
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html
@@ -0,0 +1,12 @@
+<!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>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php
new file mode 100644
index 000000000..872f6b5be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php
@@ -0,0 +1,375 @@
+<?php
+/**
+ * DokuWiki indexer
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+define('DOKU_DISABLE_GZIP_OUTPUT',1);
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/auth.php');
+require_once(DOKU_INC.'inc/events.php');
+session_write_close(); //close session
+if(!defined('NL')) define('NL',"\n");
+global $ID;
+// Version tag used to force rebuild on upgrade
+define('INDEXER_VERSION', 2);
+
+// keep running after browser closes connection
+@ignore_user_abort(true);
+
+// check if user abort worked, if yes send output early
+$defer = !@ignore_user_abort() || $conf['broken_iua'];
+if(!$defer){
+ sendGIF(); // send gif
+}
+
+$ID = cleanID($_REQUEST['id']);
+
+// Catch any possible output (e.g. errors)
+if(!isset($_REQUEST['debug'])) ob_start();
+
+// run one of the jobs
+$tmp = array(); // No event data
+$evt = new Doku_Event('INDEXER_TASKS_RUN', $tmp);
+if ($evt->advise_before()) {
+ runIndexer() or
+ metaUpdate() or
+ runSitemapper() or
+ runTrimRecentChanges() or
+ runTrimRecentChanges(true) or
+ $evt->advise_after();
+}
+if($defer) sendGIF();
+
+if(!isset($_REQUEST['debug'])) ob_end_clean();
+exit;
+
+// --------------------------------------------------------------------
+
+/**
+ * Trims the recent changes cache (or imports the old changelog) as needed.
+ *
+ * @param media_changes If the media changelog shall be trimmed instead of
+ * the page changelog
+ *
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+function runTrimRecentChanges($media_changes = false) {
+ global $conf;
+
+ $fn = ($media_changes ? $conf['media_changelog'] : $conf['changelog']);
+
+ // Trim the Recent Changes
+ // Trims the recent changes cache to the last $conf['changes_days'] recent
+ // changes or $conf['recent'] items, which ever is larger.
+ // The trimming is only done once a day.
+ if (@file_exists($fn) &&
+ (@filemtime($fn.'.trimmed')+86400)<time() &&
+ !@file_exists($fn.'_tmp')) {
+ @touch($fn.'.trimmed');
+ io_lock($fn);
+ $lines = file($fn);
+ if (count($lines)<=$conf['recent']) {
+ // nothing to trim
+ io_unlock($fn);
+ return false;
+ }
+
+ io_saveFile($fn.'_tmp', ''); // presave tmp as 2nd lock
+ $trim_time = time() - $conf['recent_days']*86400;
+ $out_lines = array();
+
+ for ($i=0; $i<count($lines); $i++) {
+ $log = parseChangelogLine($lines[$i]);
+ if ($log === false) continue; // discard junk
+ if ($log['date'] < $trim_time) {
+ $old_lines[$log['date'].".$i"] = $lines[$i]; // keep old lines for now (append .$i to prevent key collisions)
+ } else {
+ $out_lines[$log['date'].".$i"] = $lines[$i]; // definitely keep these lines
+ }
+ }
+
+ if (count($lines)==count($out_lines)) {
+ // nothing to trim
+ @unlink($fn.'_tmp');
+ io_unlock($fn);
+ return false;
+ }
+
+ // sort the final result, it shouldn't be necessary,
+ // however the extra robustness in making the changelog cache self-correcting is worth it
+ ksort($out_lines);
+ $extra = $conf['recent'] - count($out_lines); // do we need extra lines do bring us up to minimum
+ if ($extra > 0) {
+ ksort($old_lines);
+ $out_lines = array_merge(array_slice($old_lines,-$extra),$out_lines);
+ }
+
+ // save trimmed changelog
+ io_saveFile($fn.'_tmp', implode('', $out_lines));
+ @unlink($fn);
+ if (!rename($fn.'_tmp', $fn)) {
+ // rename failed so try another way...
+ io_unlock($fn);
+ io_saveFile($fn, implode('', $out_lines));
+ @unlink($fn.'_tmp');
+ } else {
+ io_unlock($fn);
+ }
+ return true;
+ }
+
+ // nothing done
+ return false;
+}
+
+/**
+ * Runs the indexer for the current page
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function runIndexer(){
+ global $ID;
+ global $conf;
+ print "runIndexer(): started".NL;
+
+ // Move index files (if needed)
+ // Uses the importoldindex plugin to upgrade the index automatically.
+ // FIXME: Remove this from runIndexer when it is no longer needed.
+ if (@file_exists($conf['cachedir'].'/page.idx') &&
+ (!@file_exists($conf['indexdir'].'/page.idx') ||
+ !filesize($conf['indexdir'].'/page.idx')) &&
+ !@file_exists($conf['indexdir'].'/index_importing')) {
+ echo "trigger TEMPORARY_INDEX_UPGRADE_EVENT\n";
+ $tmp = array(); // no event data
+ trigger_event('TEMPORARY_INDEX_UPGRADE_EVENT', $tmp);
+ }
+
+ if(!$ID) return false;
+
+ // check if indexing needed
+ $idxtag = metaFN($ID,'.indexed');
+ if(@file_exists($idxtag)){
+ if(io_readFile($idxtag) >= INDEXER_VERSION){
+ $last = @filemtime($idxtag);
+ if($last > @filemtime(wikiFN($ID))){
+ print "runIndexer(): index for $ID up to date".NL;
+ return false;
+ }
+ }
+ }
+
+ // try to aquire a lock
+ $lock = $conf['lockdir'].'/_indexer.lock';
+ while(!@mkdir($lock,$conf['dmode'])){
+ usleep(50);
+ if(time()-@filemtime($lock) > 60*5){
+ // looks like a stale lock - remove it
+ @rmdir($lock);
+ print "runIndexer(): stale lock removed".NL;
+ }else{
+ print "runIndexer(): indexer locked".NL;
+ return false;
+ }
+ }
+ if($conf['dperm']) chmod($lock, $conf['dperm']);
+
+ require_once(DOKU_INC.'inc/indexer.php');
+
+ // upgrade to version 2
+ if (!@file_exists($conf['indexdir'].'/pageword.idx'))
+ idx_upgradePageWords();
+
+ // do the work
+ idx_addPage($ID);
+
+ // we're finished - save and free lock
+ io_saveFile(metaFN($ID,'.indexed'),INDEXER_VERSION);
+ @rmdir($lock);
+ print "runIndexer(): finished".NL;
+ return true;
+}
+
+/**
+ * Will render the metadata for the page if not exists yet
+ *
+ * This makes sure pages which are created from outside DokuWiki will
+ * gain their data when viewed for the first time.
+ */
+function metaUpdate(){
+ global $ID;
+ print "metaUpdate(): started".NL;
+
+ if(!$ID) return false;
+ $file = metaFN($ID, '.meta');
+ echo "meta file: $file".NL;
+
+ // rendering needed?
+ if (@file_exists($file)) return false;
+ if (!@file_exists(wikiFN($ID))) return false;
+
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/parserutils.php');
+ global $conf;
+
+
+ // gather some additional info from changelog
+ $info = io_grep($conf['changelog'],
+ '/^(\d+)\t(\d+\.\d+\.\d+\.\d+)\t'.preg_quote($ID,'/').'\t([^\t]+)\t([^\t\n]+)/',
+ 0,true);
+
+ $meta = array();
+ if(!empty($info)){
+ $meta['date']['created'] = $info[0][1];
+ foreach($info as $item){
+ if($item[4] != '*'){
+ $meta['date']['modified'] = $item[1];
+ if($item[3]){
+ $meta['contributor'][$item[3]] = $item[3];
+ }
+ }
+ }
+ }
+
+ $meta = p_render_metadata($ID, $meta);
+ io_saveFile($file, serialize($meta));
+
+ echo "metaUpdate(): finished".NL;
+ return true;
+}
+
+/**
+ * Builds a Google Sitemap of all public pages known to the indexer
+ *
+ * The map is placed in the root directory named sitemap.xml.gz - This
+ * file needs to be writable!
+ *
+ * @author Andreas Gohr
+ * @link https://www.google.com/webmasters/sitemaps/docs/en/about.html
+ */
+function runSitemapper(){
+ global $conf;
+ print "runSitemapper(): started".NL;
+ if(!$conf['sitemap']) return false;
+
+ if($conf['compression'] == 'bz2' || $conf['compression'] == 'gz'){
+ $sitemap = 'sitemap.xml.gz';
+ }else{
+ $sitemap = 'sitemap.xml';
+ }
+ print "runSitemapper(): using $sitemap".NL;
+
+ if(@file_exists(DOKU_INC.$sitemap)){
+ if(!is_writable(DOKU_INC.$sitemap)) return false;
+ }else{
+ if(!is_writable(DOKU_INC)) return false;
+ }
+
+ if(@filesize(DOKU_INC.$sitemap) &&
+ @filemtime(DOKU_INC.$sitemap) > (time()-($conf['sitemap']*60*60*24))){
+ print 'runSitemapper(): Sitemap up to date'.NL;
+ return false;
+ }
+
+ $pages = file($conf['indexdir'].'/page.idx');
+ print 'runSitemapper(): creating sitemap using '.count($pages).' pages'.NL;
+
+ // build the sitemap
+ ob_start();
+ print '<?xml version="1.0" encoding="UTF-8"?>'.NL;
+ print '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'.NL;
+ foreach($pages as $id){
+ $id = trim($id);
+ $file = wikiFN($id);
+
+ //skip hidden, non existing and restricted files
+ if(isHiddenPage($id)) continue;
+ $date = @filemtime($file);
+ if(!$date) continue;
+ if(auth_aclcheck($id,'','') < AUTH_READ) continue;
+
+ print ' <url>'.NL;
+ print ' <loc>'.wl($id,'',true).'</loc>'.NL;
+ print ' <lastmod>'.date_iso8601($date).'</lastmod>'.NL;
+ print ' </url>'.NL;
+ }
+ print '</urlset>'.NL;
+ $data = ob_get_contents();
+ ob_end_clean();
+
+ //save the new sitemap
+ io_saveFile(DOKU_INC.$sitemap,$data);
+
+ //ping search engines...
+ $http = new DokuHTTPClient();
+ $http->timeout = 8;
+
+ //ping google
+ print 'runSitemapper(): pinging google'.NL;
+ $url = 'http://www.google.com/webmasters/sitemaps/ping?sitemap=';
+ $url .= urlencode(DOKU_URL.$sitemap);
+ $resp = $http->get($url);
+ if($http->error) print 'runSitemapper(): '.$http->error.NL;
+ print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
+
+ //ping yahoo
+ print 'runSitemapper(): pinging yahoo'.NL;
+ $url = 'http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=dokuwiki&url=';
+ $url .= urlencode(DOKU_URL.$sitemap);
+ $resp = $http->get($url);
+ if($http->error) print 'runSitemapper(): '.$http->error.NL;
+ print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
+
+ //ping microsoft
+ print 'runSitemapper(): pinging microsoft'.NL;
+ $url = 'http://www.bing.com/webmaster/ping.aspx?siteMap=';
+ $url .= urlencode(DOKU_URL.$sitemap);
+ $resp = $http->get($url);
+ if($http->error) print 'runSitemapper(): '.$http->error.NL;
+ print 'runSitemapper(): '.preg_replace('/[\n\r]/',' ',strip_tags($resp)).NL;
+
+ print 'runSitemapper(): finished'.NL;
+ return true;
+}
+
+/**
+ * Formats a timestamp as ISO 8601 date
+ *
+ * @author <ungu at terong dot com>
+ * @link http://www.php.net/manual/en/function.date.php#54072
+ */
+function date_iso8601($int_date) {
+ //$int_date: current date in UNIX timestamp
+ $date_mod = date('Y-m-d\TH:i:s', $int_date);
+ $pre_timezone = date('O', $int_date);
+ $time_zone = substr($pre_timezone, 0, 3).":".substr($pre_timezone, 3, 2);
+ $date_mod .= $time_zone;
+ return $date_mod;
+}
+
+/**
+ * Just send a 1x1 pixel blank gif to the browser
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Harry Fuecks <fuecks@gmail.com>
+ */
+function sendGIF(){
+ if(isset($_REQUEST['debug'])){
+ header('Content-Type: text/plain');
+ return;
+ }
+ $img = base64_decode('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7');
+ header('Content-Type: image/gif');
+ header('Content-Length: '.strlen($img));
+ header('Connection: Close');
+ print $img;
+ flush();
+ // Browser should drop connection after this
+ // Thinks it's got the whole image
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
+// No trailing PHP closing tag - no output please!
+// See Note at http://www.php.net/manual/en/language.basic-syntax.instruction-separation.php
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php
new file mode 100644
index 000000000..cb1016231
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php
@@ -0,0 +1,397 @@
+<?php
+/**
+ * DokuWiki JavaScript creator
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
+if(!defined('NL')) define('NL',"\n");
+if(!defined('DOKU_DISABLE_GZIP_OUTPUT')) define('DOKU_DISABLE_GZIP_OUTPUT',1); // we gzip ourself here
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/httputils.php');
+require_once(DOKU_INC.'inc/io.php');
+require_once(DOKU_INC.'inc/JSON.php');
+
+// Main (don't run when UNIT test)
+if(!defined('SIMPLE_TEST')){
+ header('Content-Type: text/javascript; charset=utf-8');
+ js_out();
+}
+
+
+// ---------------------- functions ------------------------------
+
+/**
+ * Output all needed JavaScript
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_out(){
+ global $conf;
+ global $lang;
+
+ // The generated script depends on some dynamic options
+ $cache = getCacheName('scripts'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.js');
+
+ // array of core files
+ $files = array(
+ DOKU_INC.'lib/scripts/helpers.js',
+ DOKU_INC.'lib/scripts/events.js',
+ DOKU_INC.'lib/scripts/cookie.js',
+ DOKU_INC.'lib/scripts/script.js',
+ DOKU_INC.'lib/scripts/tw-sack.js',
+ DOKU_INC.'lib/scripts/ajax.js',
+ DOKU_INC.'lib/scripts/index.js',
+ DOKU_INC.'lib/scripts/drag.js',
+ DOKU_INC.'lib/scripts/textselection.js',
+ DOKU_INC.'lib/scripts/toolbar.js',
+ DOKU_INC.'lib/scripts/edit.js',
+ DOKU_INC.'lib/scripts/linkwiz.js',
+ DOKU_INC.'lib/scripts/media.js',
+ DOKU_TPLINC.'script.js',
+ );
+
+ // add possible plugin scripts and userscript
+ $files = array_merge($files,js_pluginscripts());
+ $files[] = DOKU_CONF.'userscript.js';
+
+ // check cache age & handle conditional request
+ header('Cache-Control: public, max-age=3600');
+ header('Pragma: public');
+ if(js_cacheok($cache,$files)){
+ http_conditionalRequest(filemtime($cache));
+ if($conf['allowdebug']) header("X-CacheUsed: $cache");
+
+ // finally send output
+ if ($conf['gzip_output'] && http_gzip_valid($cache)) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ readfile($cache.".gz");
+ } else {
+ if (!http_sendfile($cache)) readfile($cache);
+ }
+ return;
+ } else {
+ http_conditionalRequest(time());
+ }
+
+ // start output buffering and build the script
+ ob_start();
+
+ // add some global variables
+ print "var DOKU_BASE = '".DOKU_BASE."';";
+ print "var DOKU_MEDIA = '".DOKU_MEDIA."';";
+ print "var DOKU_TPL = '".DOKU_TPL."';";
+ print "var DOKU_UHN = ".((int) useHeading('navigation')).";";
+ print "var DOKU_UHC = ".((int) useHeading('content')).";";
+
+ // load JS specific translations
+ $json = new JSON();
+ $lang['js']['plugins'] = js_pluginstrings();
+ echo 'LANG = '.$json->encode($lang['js']).";\n";
+
+ // load toolbar
+ require_once(DOKU_INC.'inc/toolbar.php');
+ toolbar_JSdefines('toolbar');
+
+ // load files
+ foreach($files as $file){
+ echo "\n\n/* XXXXXXXXXX begin of ".str_replace(DOKU_INC, '', $file) ." XXXXXXXXXX */\n\n";
+ js_load($file);
+ echo "\n\n/* XXXXXXXXXX end of " . str_replace(DOKU_INC, '', $file) . " XXXXXXXXXX */\n\n";
+ }
+
+
+ // init stuff
+ js_runonstart("ajax_qsearch.init('qsearch__in','qsearch__out')");
+ js_runonstart("addEvent(document,'click',closePopups)");
+ js_runonstart('addTocToggle()');
+ js_runonstart("initSizeCtl('size__ctl','wiki__text')");
+ js_runonstart("initToolbar('tool__bar','wiki__text',toolbar)");
+ js_runonstart("initChangeCheck('".js_escape($lang['notsavedyet'])."')");
+ js_runonstart("locktimer.init(".($conf['locktime'] - 60).",'".js_escape($lang['willexpire'])."',".$conf['usedraft'].")");
+ js_runonstart('scrollToMarker()');
+ js_runonstart('focusMarker()');
+
+ // end output buffering and get contents
+ $js = ob_get_contents();
+ ob_end_clean();
+
+ // compress whitespace and comments
+ if($conf['compress']){
+ $js = js_compress($js);
+ }
+
+ $js .= "\n"; // https://bugzilla.mozilla.org/show_bug.cgi?id=316033
+
+ // save cache file
+ io_saveFile($cache,$js);
+ if(function_exists('gzopen')) io_saveFile("$cache.gz",$js);
+
+ // finally send output
+ if ($conf['gzip_output']) {
+ header('Vary: Accept-Encoding');
+ header('Content-Encoding: gzip');
+ print gzencode($js,9,FORCE_GZIP);
+ } else {
+ print $js;
+ }
+}
+
+/**
+ * Load the given file, handle include calls and print it
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_load($file){
+ if(!@file_exists($file)) return;
+ static $loaded = array();
+
+ $data = io_readFile($file);
+ while(preg_match('#/\*\s*DOKUWIKI:include(_once)?\s+([\w\./]+)\s*\*/#',$data,$match)){
+ $ifile = $match[2];
+
+ // is it a include_once?
+ if($match[1]){
+ $base = basename($ifile);
+ if($loaded[$base]) continue;
+ $loaded[$base] = true;
+ }
+
+ if($ifile{0} != '/') $ifile = dirname($file).'/'.$ifile;
+
+ if(@file_exists($ifile)){
+ $idata = io_readFile($ifile);
+ }else{
+ $idata = '';
+ }
+ $data = str_replace($match[0],$idata,$data);
+ }
+ echo $data;
+}
+
+/**
+ * Checks if a JavaScript Cache file still is valid
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_cacheok($cache,$files){
+ if(isset($_REQUEST['purge'])) return false; //support purge request
+
+ $ctime = @filemtime($cache);
+ if(!$ctime) return false; //There is no cache
+
+ // some additional files to check
+ $files = array_merge($files, getConfigFiles('main'));
+ $files[] = DOKU_CONF.'userscript.js';
+ $files[] = __FILE__;
+
+ // now walk the files
+ foreach($files as $file){
+ if(@filemtime($file) > $ctime){
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Returns a list of possible Plugin Scripts (no existance check here)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_pluginscripts(){
+ $list = array();
+ $plugins = plugin_list();
+ foreach ($plugins as $p){
+ $list[] = DOKU_PLUGIN."$p/script.js";
+ }
+ return $list;
+}
+
+/**
+ * Return an two-dimensional array with strings from the language file of each plugin.
+ *
+ * - $lang['js'] must be an array.
+ * - Nothing is returned for plugins without an entry for $lang['js']
+ *
+ * @author Gabriel Birke <birke@d-scribe.de>
+ */
+function js_pluginstrings()
+{
+ global $conf;
+ $pluginstrings = array();
+ $plugins = plugin_list();
+ foreach ($plugins as $p){
+ if (isset($lang)) unset($lang);
+ if (@file_exists(DOKU_PLUGIN."$p/lang/en/lang.php")) {
+ include DOKU_PLUGIN."$p/lang/en/lang.php";
+ }
+ if (isset($conf['lang']) && $conf['lang']!='en' && @file_exists(DOKU_PLUGIN."$p/lang/".$conf['lang']."/lang.php")) {
+ include DOKU_PLUGIN."$p/lang/".$conf['lang']."/lang.php";
+ }
+ if (isset($lang['js'])) {
+ $pluginstrings[$p] = $lang['js'];
+ }
+ }
+ return $pluginstrings;
+}
+
+/**
+ * Escapes a String to be embedded in a JavaScript call, keeps \n
+ * as newline
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_escape($string){
+ return str_replace('\\\\n','\\n',addslashes($string));
+}
+
+/**
+ * Adds the given JavaScript code to the window.onload() event
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function js_runonstart($func){
+ echo "addInitEvent(function(){ $func; });".NL;
+}
+
+/**
+ * Strip comments and whitespaces from given JavaScript Code
+ *
+ * This is a port of Nick Galbreath's python tool jsstrip.py which is
+ * released under BSD license. See link for original code.
+ *
+ * @author Nick Galbreath <nickg@modp.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://code.google.com/p/jsstrip/
+ */
+function js_compress($s){
+ $s = ltrim($s); // strip all initial whitespace
+ $s .= "\n";
+ $i = 0; // char index for input string
+ $j = 0; // char forward index for input string
+ $line = 0; // line number of file (close to it anyways)
+ $slen = strlen($s); // size of input string
+ $lch = ''; // last char added
+ $result = ''; // we store the final result here
+
+ // items that don't need spaces next to them
+ $chars = "^&|!+\-*\/%=\?:;,{}()<>% \t\n\r'\"[]";
+
+ $regex_starters = array("(", "=", "[", "," , ":");
+
+ $whitespaces_chars = array(" ", "\t", "\n", "\r", "\0", "\x0B");
+
+ while($i < $slen){
+ // skip all "boring" characters. This is either
+ // reserved word (e.g. "for", "else", "if") or a
+ // variable/object/method (e.g. "foo.color")
+ while ($i < $slen && (strpos($chars,$s[$i]) === false) ){
+ $result .= $s{$i};
+ $i = $i + 1;
+ }
+
+ $ch = $s{$i};
+ // multiline comments (keeping IE conditionals)
+ if($ch == '/' && $s{$i+1} == '*' && $s{$i+2} != '@'){
+ $endC = strpos($s,'*/',$i+2);
+ if($endC === false) trigger_error('Found invalid /*..*/ comment', E_USER_ERROR);
+ $i = $endC + 2;
+ continue;
+ }
+
+ // singleline
+ if($ch == '/' && $s{$i+1} == '/'){
+ $endC = strpos($s,"\n",$i+2);
+ if($endC === false) trigger_error('Invalid comment', E_USER_ERROR);
+ $i = $endC;
+ continue;
+ }
+
+ // tricky. might be an RE
+ if($ch == '/'){
+ // rewind, skip white space
+ $j = 1;
+ while(in_array($s{$i-$j}, $whitespaces_chars)){
+ $j = $j + 1;
+ }
+ if( in_array($s{$i-$j}, $regex_starters) ){
+ // yes, this is an re
+ // now move forward and find the end of it
+ $j = 1;
+ while($s{$i+$j} != '/'){
+ while( ($s{$i+$j} != '\\') && ($s{$i+$j} != '/')){
+ $j = $j + 1;
+ }
+ if($s{$i+$j} == '\\') $j = $j + 2;
+ }
+ $result .= substr($s,$i,$j+1);
+ $i = $i + $j + 1;
+ continue;
+ }
+ }
+
+ // double quote strings
+ if($ch == '"'){
+ $j = 1;
+ while( $s{$i+$j} != '"' && ($i+$j < $slen)){
+ if( $s{$i+$j} == '\\' && ($s{$i+$j+1} == '"' || $s{$i+$j+1} == '\\') ){
+ $j += 2;
+ }else{
+ $j += 1;
+ }
+ }
+ $result .= substr($s,$i,$j+1);
+ $i = $i + $j + 1;
+ continue;
+ }
+
+ // single quote strings
+ if($ch == "'"){
+ $j = 1;
+ while( $s{$i+$j} != "'" && ($i+$j < $slen)){
+ if( $s{$i+$j} == '\\' && ($s{$i+$j+1} == "'" || $s{$i+$j+1} == '\\') ){
+ $j += 2;
+ }else{
+ $j += 1;
+ }
+ }
+ $result .= substr($s,$i,$j+1);
+ $i = $i + $j + 1;
+ continue;
+ }
+
+ // whitespaces
+ if( $ch == ' ' || $ch == "\r" || $ch == "\n" || $ch == "\t" ){
+ // leading spaces
+ if($i+1 < $slen && (strpos($chars,$s[$i+1]) !== false)){
+ $i = $i + 1;
+ continue;
+ }
+ // trailing spaces
+ // if this ch is space AND the last char processed
+ // is special, then skip the space
+ $lch = substr($result,-1);
+ if($lch && (strpos($chars,$lch) !== false)){
+ $i = $i + 1;
+ continue;
+ }
+ // else after all of this convert the "whitespace" to
+ // a single space. It will get appended below
+ $ch = ' ';
+ }
+
+ // other chars
+ $result .= $ch;
+ $i = $i + 1;
+ }
+
+ return trim($result);
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php
new file mode 100644
index 000000000..f6e91b858
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php
@@ -0,0 +1,105 @@
+<?php
+ if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+ define('DOKU_MEDIAMANAGER',1);
+
+ // for multi uploader:
+ @ini_set('session.use_only_cookies',0);
+
+ require_once(DOKU_INC.'inc/init.php');
+ require_once(DOKU_INC.'inc/lang/en/lang.php');
+ require_once(DOKU_INC.'inc/lang/'.$conf['lang'].'/lang.php');
+ require_once(DOKU_INC.'inc/media.php');
+ require_once(DOKU_INC.'inc/common.php');
+ require_once(DOKU_INC.'inc/search.php');
+ require_once(DOKU_INC.'inc/template.php');
+ require_once(DOKU_INC.'inc/auth.php');
+
+ trigger_event('MEDIAMANAGER_STARTED',$tmp=array());
+ session_write_close(); //close session
+
+ // handle passed message
+ if($_REQUEST['msg1']) msg(hsc($_REQUEST['msg1']),1);
+ if($_REQUEST['err']) msg(hsc($_REQUEST['err']),-1);
+
+
+ // get namespace to display (either direct or from deletion order)
+ if($_REQUEST['delete']){
+ $DEL = cleanID($_REQUEST['delete']);
+ $IMG = $DEL;
+ $NS = getNS($DEL);
+ }elseif($_REQUEST['edit']){
+ $IMG = cleanID($_REQUEST['edit']);
+ $NS = getNS($IMG);
+ }elseif($_REQUEST['img']){
+ $IMG = cleanID($_REQUEST['img']);
+ $NS = getNS($IMG);
+ }else{
+ $NS = $_REQUEST['ns'];
+ $NS = cleanID($NS);
+ }
+
+ // check auth
+ $AUTH = auth_quickaclcheck("$NS:*");
+
+ // create the given namespace (just for beautification)
+ if($AUTH >= AUTH_UPLOAD) { io_createNamespace("$NS:xxx", 'media'); }
+
+ // handle flash upload
+ if(isset($_FILES['Filedata'])){
+ $_FILES['upload'] =& $_FILES['Filedata'];
+ $JUMPTO = media_upload($NS,$AUTH);
+ if($JUMPTO == false){
+ header("HTTP/1.0 400 Bad Request");
+ echo 'Upload failed';
+ }
+ echo 'ok';
+ exit;
+ }
+
+ // give info on PHP catched upload errors
+ if($_FILES['upload']['error']){
+ switch($_FILES['upload']['error']){
+ case 1:
+ case 2:
+ msg(sprintf($lang['uploadsize'],
+ filesize_h(php_to_byte(ini_get('upload_max_filesize')))),-1);
+ break;
+ default:
+ msg($lang['uploadfail'].' ('.$_FILES['upload']['error'].')',-1);
+ }
+ unset($_FILES['upload']);
+ }
+
+ // handle upload
+ if($_FILES['upload']['tmp_name']){
+ $JUMPTO = media_upload($NS,$AUTH);
+ if($JUMPTO) $NS = getNS($JUMPTO);
+ }
+
+ // handle meta saving
+ if($IMG && $_REQUEST['do']['save']){
+ $JUMPTO = media_metasave($IMG,$AUTH,$_REQUEST['meta']);
+ }
+
+ // handle deletion
+ if($DEL) {
+ $INUSE = media_inuse($DEL);
+ if(!$INUSE) {
+ if(media_delete($DEL,$AUTH)) {
+ msg(sprintf($lang['deletesucc'],noNS($DEL)),1);
+ } else {
+ msg(sprintf($lang['deletefail'],noNS($DEL)),-1);
+ }
+ } else {
+ if(!$conf['refshow']) {
+ unset($INUSE);
+ msg(sprintf($lang['mediainuse'],noNS($DEL)),0);
+ }
+ }
+ }
+
+ // finished - start output
+ header('Content-Type: text/html; charset=utf-8');
+ include(template('mediamanager.php'));
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf b/mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf
new file mode 100644
index 000000000..888aab045
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php
new file mode 100644
index 000000000..f16b4f681
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * DokuWiki OpenSearch creator
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @link http://www.opensearch.org/
+ * @author Mike Frysinger <vapier@gentoo.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
+if(!defined('NL')) define('NL',"\n");
+require_once(DOKU_INC.'inc/init.php');
+
+// try to be clever about the favicon location
+if(file_exists(DOKU_INC.'favicon.ico')){
+ $ico = DOKU_URL.'favicon.ico';
+}elseif(file_exists(DOKU_TPLINC.'images/favicon.ico')){
+ $ico = DOKU_URL.'lib/tpl/'.$conf['template'].'/images/favicon.ico';
+}elseif(file_exists(DOKU_TPLINC.'favicon.ico')){
+ $ico = DOKU_URL.'lib/tpl/'.$conf['template'].'/favicon.ico';
+}else{
+ $ico = DOKU_URL.'lib/tpl/default/images/favicon.ico';
+}
+
+// output
+header('Content-Type: application/opensearchdescription+xml; charset=utf-8');
+echo '<?xml version="1.0"?>'.NL;
+echo '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">'.NL;
+echo ' <ShortName>'.htmlspecialchars($conf['title']).'</ShortName>'.NL;
+echo ' <Image width="16" height="16" type="image/x-icon">'.$ico.'</Image>'.NL;
+echo ' <Url type="text/html" template="'.DOKU_URL.DOKU_SCRIPT.'?do=search&amp;id={searchTerms}" />'.NL;
+echo ' <Url type="application/x-suggestions+json" template="'.
+ DOKU_URL.'lib/exe/ajax.php?call=suggestions&amp;q={searchTerms}" />'.NL;
+echo '</OpenSearchDescription>'.NL;
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php
new file mode 100644
index 000000000..d3913482f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php
@@ -0,0 +1,921 @@
+<?php
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+
+// fix when '<?xml' isn't on the very first line
+if(isset($HTTP_RAW_POST_DATA)) $HTTP_RAW_POST_DATA = trim($HTTP_RAW_POST_DATA);
+
+/**
+ * Increased whenever the API is changed
+ */
+define('DOKU_XMLRPC_API_VERSION',2);
+
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/auth.php');
+session_write_close(); //close session
+
+if(!$conf['xmlrpc']) die('XML-RPC server not enabled.');
+
+require_once(DOKU_INC.'inc/IXR_Library.php');
+
+
+/**
+ * Contains needed wrapper functions and registers all available
+ * XMLRPC functions.
+ */
+class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer {
+ var $methods = array();
+ var $public_methods = array();
+
+ /**
+ * Checks if the current user is allowed to execute non anonymous methods
+ */
+ function checkAuth(){
+ global $conf;
+ global $USERINFO;
+
+ if(!$conf['useacl']) return true; //no ACL - then no checks
+
+ $allowed = explode(',',$conf['xmlrpcuser']);
+ $allowed = array_map('trim', $allowed);
+ $allowed = array_unique($allowed);
+ $allowed = array_filter($allowed);
+
+ if(!count($allowed)) return true; //no restrictions
+
+ $user = $_SERVER['REMOTE_USER'];
+ $groups = (array) $USERINFO['grps'];
+
+ if(in_array($user,$allowed)) return true; //user explicitly mentioned
+
+ //check group memberships
+ foreach($groups as $group){
+ if(in_array('@'.$group,$allowed)) return true;
+ }
+
+ //still here? no access!
+ return false;
+ }
+
+ /**
+ * Adds a callback, extends parent method
+ *
+ * add another parameter to define if anonymous access to
+ * this method should be granted.
+ */
+ function addCallback($method, $callback, $args, $help, $public=false){
+ if($public) $this->public_methods[] = $method;
+ return parent::addCallback($method, $callback, $args, $help);
+ }
+
+ /**
+ * Execute a call, extends parent method
+ *
+ * Checks for authentication first
+ */
+ function call($methodname, $args){
+ if(!in_array($methodname,$this->public_methods) && !$this->checkAuth()){
+ return new IXR_Error(-32603, 'server error. not authorized to call method "'.$methodname.'".');
+ }
+ return parent::call($methodname, $args);
+ }
+
+ /**
+ * Constructor. Register methods and run Server
+ */
+ function dokuwiki_xmlrpc_server(){
+ $this->IXR_IntrospectionServer();
+
+ /* DokuWiki's own methods */
+ $this->addCallback(
+ 'dokuwiki.getXMLRPCAPIVersion',
+ 'this:getAPIVersion',
+ array('integer'),
+ 'Returns the XMLRPC API version.',
+ true
+ );
+
+ $this->addCallback(
+ 'dokuwiki.getVersion',
+ 'getVersion',
+ array('string'),
+ 'Returns the running DokuWiki version.',
+ true
+ );
+
+ $this->addCallback(
+ 'dokuwiki.login',
+ 'this:login',
+ array('integer','string','string'),
+ 'Tries to login with the given credentials and sets auth cookies.',
+ true
+ );
+
+ $this->addCallback(
+ 'dokuwiki.getPagelist',
+ 'this:readNamespace',
+ array('struct','string','struct'),
+ 'List all pages within the given namespace.'
+ );
+
+ $this->addCallback(
+ 'dokuwiki.getTime',
+ 'time',
+ array('int'),
+ 'Return the current time at the wiki server.'
+ );
+
+ $this->addCallback(
+ 'dokuwiki.setLocks',
+ 'this:setLocks',
+ array('struct','struct'),
+ 'Lock or unlock pages.'
+ );
+
+ /* Wiki API v2 http://www.jspwiki.org/wiki/WikiRPCInterface2 */
+ $this->addCallback(
+ 'wiki.getRPCVersionSupported',
+ 'this:wiki_RPCVersion',
+ array('int'),
+ 'Returns 2 with the supported RPC API version.',
+ true
+ );
+ $this->addCallback(
+ 'wiki.getPage',
+ 'this:rawPage',
+ array('string','string'),
+ 'Get the raw Wiki text of page, latest version.'
+ );
+ $this->addCallback(
+ 'wiki.getPageVersion',
+ 'this:rawPage',
+ array('string','string','int'),
+ 'Get the raw Wiki text of page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageHTML',
+ 'this:htmlPage',
+ array('string','string'),
+ 'Return page in rendered HTML, latest version.'
+ );
+ $this->addCallback(
+ 'wiki.getPageHTMLVersion',
+ 'this:htmlPage',
+ array('string','string','int'),
+ 'Return page in rendered HTML.'
+ );
+ $this->addCallback(
+ 'wiki.getAllPages',
+ 'this:listPages',
+ array('struct'),
+ 'Returns a list of all pages. The result is an array of utf8 pagenames.'
+ );
+ $this->addCallback(
+ 'wiki.getAttachments',
+ 'this:listAttachments',
+ array('struct', 'string', 'struct'),
+ 'Returns a list of all media files.'
+ );
+ $this->addCallback(
+ 'wiki.getBackLinks',
+ 'this:listBackLinks',
+ array('struct','string'),
+ 'Returns the pages that link to this page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageInfo',
+ 'this:pageInfo',
+ array('struct','string'),
+ 'Returns a struct with infos about the page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageInfoVersion',
+ 'this:pageInfo',
+ array('struct','string','int'),
+ 'Returns a struct with infos about the page.'
+ );
+ $this->addCallback(
+ 'wiki.getPageVersions',
+ 'this:pageVersions',
+ array('struct','string','int'),
+ 'Returns the available revisions of the page.'
+ );
+ $this->addCallback(
+ 'wiki.putPage',
+ 'this:putPage',
+ array('int', 'string', 'string', 'struct'),
+ 'Saves a wiki page.'
+ );
+ $this->addCallback(
+ 'wiki.listLinks',
+ 'this:listLinks',
+ array('struct','string'),
+ 'Lists all links contained in a wiki page.'
+ );
+ $this->addCallback(
+ 'wiki.getRecentChanges',
+ 'this:getRecentChanges',
+ array('struct','int'),
+ 'Returns a struct about all recent changes since given timestamp.'
+ );
+ $this->addCallback(
+ 'wiki.getRecentMediaChanges',
+ 'this:getRecentMediaChanges',
+ array('struct','int'),
+ 'Returns a struct about all recent media changes since given timestamp.'
+ );
+ $this->addCallback(
+ 'wiki.aclCheck',
+ 'this:aclCheck',
+ array('int', 'string'),
+ 'Returns the permissions of a given wiki page.'
+ );
+ $this->addCallback(
+ 'wiki.putAttachment',
+ 'this:putAttachment',
+ array('struct', 'string', 'base64', 'struct'),
+ 'Upload a file to the wiki.'
+ );
+ $this->addCallback(
+ 'wiki.deleteAttachment',
+ 'this:deleteAttachment',
+ array('int', 'string'),
+ 'Delete a file from the wiki.'
+ );
+ $this->addCallback(
+ 'wiki.getAttachment',
+ 'this:getAttachment',
+ array('base64', 'string'),
+ 'Download a file from the wiki.'
+ );
+ $this->addCallback(
+ 'wiki.getAttachmentInfo',
+ 'this:getAttachmentInfo',
+ array('struct', 'string'),
+ 'Returns a struct with infos about the attachment.'
+ );
+
+ /**
+ * Trigger XMLRPC_CALLBACK_REGISTER, action plugins can use this event
+ * to extend the XMLRPC interface and register their own callbacks.
+ *
+ * Event data:
+ * The XMLRPC server object:
+ *
+ * $event->data->addCallback() - register a callback, the second
+ * paramter has to be of the form "plugin:<pluginname>:<plugin
+ * method>"
+ *
+ * $event->data->callbacks - an array which holds all awaylable
+ * callbacks
+ */
+ trigger_event('XMLRPC_CALLBACK_REGISTER', $this);
+
+ $this->serve();
+ }
+
+ /**
+ * Return a raw wiki page
+ */
+ function rawPage($id,$rev=''){
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ $text = rawWiki($id,$rev);
+ if(!$text) {
+ $data = array($id);
+ return trigger_event('HTML_PAGE_FROMTEMPLATE',$data,'pageTemplate',true);
+ } else {
+ return $text;
+ }
+ }
+
+ /**
+ * Return a media file encoded in base64
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function getAttachment($id){
+ $id = cleanID($id);
+ if (auth_quickaclcheck(getNS($id).':*') < AUTH_READ)
+ return new IXR_Error(1, 'You are not allowed to read this file');
+
+ $file = mediaFN($id);
+ if (!@ file_exists($file))
+ return new IXR_Error(1, 'The requested file does not exist');
+
+ $data = io_readFile($file, false);
+ $base64 = base64_encode($data);
+ return $base64;
+ }
+
+ /**
+ * Return info about a media file
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function getAttachmentInfo($id){
+ $id = cleanID($id);
+ $info = array(
+ 'lastModified' => 0,
+ 'size' => 0,
+ );
+
+ $file = mediaFN($id);
+ if ((auth_quickaclcheck(getNS($id).':*') >= AUTH_READ) && file_exists($file)){
+ $info['lastModified'] = new IXR_Date(filemtime($file));
+ $info['size'] = filesize($file);
+ }
+
+ return $info;
+ }
+
+ /**
+ * Return a wiki page rendered to html
+ */
+ function htmlPage($id,$rev=''){
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ return p_wiki_xhtml($id,$rev,false);
+ }
+
+ /**
+ * List all pages - we use the indexer list here
+ */
+ function listPages(){
+ global $conf;
+
+ $list = array();
+ $pages = file($conf['indexdir'] . '/page.idx');
+ $pages = array_filter($pages, 'isVisiblePage');
+
+ foreach(array_keys($pages) as $idx) {
+ if(page_exists($pages[$idx])) {
+ $perm = auth_quickaclcheck($pages[$idx]);
+ if($perm >= AUTH_READ) {
+ $page = array();
+ $page['id'] = trim($pages[$idx]);
+ $page['perms'] = $perm;
+ $page['size'] = @filesize(wikiFN($pages[$idx]));
+ $page['lastModified'] = new IXR_Date(@filemtime(wikiFN($pages[$idx])));
+ $list[] = $page;
+ }
+ }
+ }
+
+ return $list;
+ }
+
+ /**
+ * List all pages in the given namespace (and below)
+ */
+ function readNamespace($ns,$opts){
+ global $conf;
+
+ if(!is_array($opts)) $opts=array();
+
+ $ns = cleanID($ns);
+ $dir = utf8_encodeFN(str_replace(':', '/', $ns));
+ $data = array();
+ require_once(DOKU_INC.'inc/search.php');
+ $opts['skipacl'] = 0; // no ACL skipping for XMLRPC
+ search($data, $conf['datadir'], 'search_allpages', $opts, $dir);
+ return $data;
+ }
+
+ /**
+ * List all media files.
+ *
+ * Available options are 'recursive' for also including the subnamespaces
+ * in the listing, and 'pattern' for filtering the returned files against
+ * a regular expression matching their name.
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function listAttachments($ns, $options = array()) {
+ global $conf;
+ global $lang;
+
+ $ns = cleanID($ns);
+
+ if (!is_array($options)) $options = array();
+ $options['skipacl'] = 0; // no ACL skipping for XMLRPC
+
+
+ if(auth_quickaclcheck($ns.':*') >= AUTH_READ) {
+ $dir = utf8_encodeFN(str_replace(':', '/', $ns));
+
+ $data = array();
+ require_once(DOKU_INC.'inc/search.php');
+ search($data, $conf['mediadir'], 'search_media', $options, $dir);
+ $len = count($data);
+ if(!$len) return array();
+
+ for($i=0; $i<$len; $i++) {
+ unset($data[$i]['meta']);
+ $data[$i]['lastModified'] = new IXR_Date($data[$i]['mtime']);
+ }
+ return $data;
+ } else {
+ return new IXR_Error(1, 'You are not allowed to list media files.');
+ }
+ }
+
+ /**
+ * Return a list of backlinks
+ */
+ function listBackLinks($id){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ return ft_backlinks($id);
+ }
+
+ /**
+ * Return some basic data about a page
+ */
+ function pageInfo($id,$rev=''){
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ $file = wikiFN($id,$rev);
+ $time = @filemtime($file);
+ if(!$time){
+ return new IXR_Error(10, 'The requested page does not exist');
+ }
+
+ $info = getRevisionInfo($id, $time, 1024);
+
+ $data = array(
+ 'name' => $id,
+ 'lastModified' => new IXR_Date($time),
+ 'author' => (($info['user']) ? $info['user'] : $info['ip']),
+ 'version' => $time
+ );
+
+ return ($data);
+ }
+
+ /**
+ * Save a wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function putPage($id, $text, $params) {
+ global $TEXT;
+ global $lang;
+ global $conf;
+
+ $id = cleanID($id);
+ $TEXT = cleanText($text);
+ $sum = $params['sum'];
+ $minor = $params['minor'];
+
+ if(empty($id))
+ return new IXR_Error(1, 'Empty page ID');
+
+ if(!page_exists($id) && trim($TEXT) == '' ) {
+ return new IXR_ERROR(1, 'Refusing to write an empty new wiki page');
+ }
+
+ if(auth_quickaclcheck($id) < AUTH_EDIT)
+ return new IXR_Error(1, 'You are not allowed to edit this page');
+
+ // Check, if page is locked
+ if(checklock($id))
+ return new IXR_Error(1, 'The page is currently locked');
+
+ // SPAM check
+ if(checkwordblock())
+ return new IXR_Error(1, 'Positive wordblock check');
+
+ // autoset summary on new pages
+ if(!page_exists($id) && empty($sum)) {
+ $sum = $lang['created'];
+ }
+
+ // autoset summary on deleted pages
+ if(page_exists($id) && empty($TEXT) && empty($sum)) {
+ $sum = $lang['deleted'];
+ }
+
+ lock($id);
+
+ saveWikiText($id,$TEXT,$sum,$minor);
+
+ unlock($id);
+
+ // run the indexer if page wasn't indexed yet
+ if(!@file_exists(metaFN($id, '.indexed'))) {
+ // try to aquire a lock
+ $lock = $conf['lockdir'].'/_indexer.lock';
+ while(!@mkdir($lock,$conf['dmode'])){
+ usleep(50);
+ if(time()-@filemtime($lock) > 60*5){
+ // looks like a stale lock - remove it
+ @rmdir($lock);
+ }else{
+ return false;
+ }
+ }
+ if($conf['dperm']) chmod($lock, $conf['dperm']);
+
+ require_once(DOKU_INC.'inc/indexer.php');
+
+ // do the work
+ idx_addPage($id);
+
+ // we're finished - save and free lock
+ io_saveFile(metaFN($id,'.indexed'),INDEXER_VERSION);
+ @rmdir($lock);
+ }
+
+ return 0;
+ }
+
+ /**
+ * Uploads a file to the wiki.
+ *
+ * Michael Klier <chi@chimeric.de>
+ */
+ function putAttachment($id, $file, $params) {
+ global $conf;
+ global $lang;
+
+ $auth = auth_quickaclcheck(getNS($id).':*');
+ if($auth >= AUTH_UPLOAD) {
+ if(!isset($id)) {
+ return new IXR_ERROR(1, 'Filename not given.');
+ }
+
+ $ftmp = $conf['tmpdir'] . '/' . $id;
+
+ // save temporary file
+ @unlink($ftmp);
+ $buff = base64_decode($file);
+ io_saveFile($ftmp, $buff);
+
+ // get filename
+ list($iext, $imime,$dl) = mimetype($id);
+ $id = cleanID($id);
+ $fn = mediaFN($id);
+
+ // get filetype regexp
+ $types = array_keys(getMimeTypes());
+ $types = array_map(create_function('$q','return preg_quote($q,"/");'),$types);
+ $regex = join('|',$types);
+
+ // because a temp file was created already
+ if(preg_match('/\.('.$regex.')$/i',$fn)) {
+ //check for overwrite
+ $overwrite = @file_exists($fn);
+ if($overwrite && (!$params['ow'] || $auth < AUTH_DELETE)) {
+ return new IXR_ERROR(1, $lang['uploadexist'].'1');
+ }
+ // check for valid content
+ @require_once(DOKU_INC.'inc/media.php');
+ $ok = media_contentcheck($ftmp, $imime);
+ if($ok == -1) {
+ return new IXR_ERROR(1, sprintf($lang['uploadexist'].'2', ".$iext"));
+ } elseif($ok == -2) {
+ return new IXR_ERROR(1, $lang['uploadspam']);
+ } elseif($ok == -3) {
+ return new IXR_ERROR(1, $lang['uploadxss']);
+ }
+
+ // prepare event data
+ $data[0] = $ftmp;
+ $data[1] = $fn;
+ $data[2] = $id;
+ $data[3] = $imime;
+ $data[4] = $overwrite;
+
+ // trigger event
+ require_once(DOKU_INC.'inc/events.php');
+ return trigger_event('MEDIA_UPLOAD_FINISH', $data, array($this, '_media_upload_action'), true);
+
+ } else {
+ return new IXR_ERROR(1, $lang['uploadwrong']);
+ }
+ } else {
+ return new IXR_ERROR(1, "You don't have permissions to upload files.");
+ }
+ }
+
+ /**
+ * Deletes a file from the wiki.
+ *
+ * @author Gina Haeussge <osd@foosel.net>
+ */
+ function deleteAttachment($id){
+ $auth = auth_quickaclcheck(getNS($id).':*');
+ if($auth < AUTH_DELETE) return new IXR_ERROR(1, "You don't have permissions to delete files.");
+ global $conf;
+ global $lang;
+
+ // check for references if needed
+ $mediareferences = array();
+ if($conf['refcheck']){
+ require_once(DOKU_INC.'inc/fulltext.php');
+ $mediareferences = ft_mediause($id,$conf['refshow']);
+ }
+
+ if(!count($mediareferences)){
+ $file = mediaFN($id);
+ if(@unlink($file)){
+ require_once(DOKU_INC.'inc/changelog.php');
+ addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_DELETE);
+ io_sweepNS($id,'mediadir');
+ return 0;
+ }
+ //something went wrong
+ return new IXR_ERROR(1, 'Could not delete file');
+ } else {
+ return new IXR_ERROR(1, 'File is still referenced');
+ }
+ }
+
+ /**
+ * Moves the temporary file to its final destination.
+ *
+ * Michael Klier <chi@chimeric.de>
+ */
+ function _media_upload_action($data) {
+ global $conf;
+
+ if(is_array($data) && count($data)===5) {
+ io_createNamespace($data[2], 'media');
+ if(rename($data[0], $data[1])) {
+ chmod($data[1], $conf['fmode']);
+ media_notify($data[2], $data[1], $data[3]);
+ // add a log entry to the media changelog
+ require_once(DOKU_INC.'inc/changelog.php');
+ if ($data[4]) {
+ addMediaLogEntry(time(), $data[2], DOKU_CHANGE_TYPE_EDIT);
+ } else {
+ addMediaLogEntry(time(), $data[2], DOKU_CHANGE_TYPE_CREATE);
+ }
+ return $data[2];
+ } else {
+ return new IXR_ERROR(1, 'Upload failed.');
+ }
+ } else {
+ return new IXR_ERROR(1, 'Upload failed.');
+ }
+ }
+
+ /**
+ * Returns the permissions of a given wiki page
+ */
+ function aclCheck($id) {
+ return auth_quickaclcheck($id);
+ }
+
+ /**
+ * Lists all links contained in a wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function listLinks($id) {
+ if(auth_quickaclcheck($id) < AUTH_READ){
+ return new IXR_Error(1, 'You are not allowed to read this page');
+ }
+ $links = array();
+
+ // resolve page instructions
+ $ins = p_cached_instructions(wikiFN(cleanID($id)));
+
+ // instantiate new Renderer - needed for interwiki links
+ include(DOKU_INC.'inc/parser/xhtml.php');
+ $Renderer = new Doku_Renderer_xhtml();
+ $Renderer->interwiki = getInterwiki();
+
+ // parse parse instructions
+ foreach($ins as $in) {
+ $link = array();
+ switch($in[0]) {
+ case 'internallink':
+ $link['type'] = 'local';
+ $link['page'] = $in[1][0];
+ $link['href'] = wl($in[1][0]);
+ array_push($links,$link);
+ break;
+ case 'externallink':
+ $link['type'] = 'extern';
+ $link['page'] = $in[1][0];
+ $link['href'] = $in[1][0];
+ array_push($links,$link);
+ break;
+ case 'interwikilink':
+ $url = $Renderer->_resolveInterWiki($in[1][2],$in[1][3]);
+ $link['type'] = 'extern';
+ $link['page'] = $url;
+ $link['href'] = $url;
+ array_push($links,$link);
+ break;
+ }
+ }
+
+ return ($links);
+ }
+
+ /**
+ * Returns a list of recent changes since give timestamp
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function getRecentChanges($timestamp) {
+ if(strlen($timestamp) != 10)
+ return new IXR_Error(20, 'The provided value is not a valid timestamp');
+
+ require_once(DOKU_INC.'inc/changelog.php');
+ require_once(DOKU_INC.'inc/pageutils.php');
+
+ $recents = getRecentsSince($timestamp);
+
+ $changes = array();
+
+ foreach ($recents as $recent) {
+ $change = array();
+ $change['name'] = $recent['id'];
+ $change['lastModified'] = new IXR_Date($recent['date']);
+ $change['author'] = $recent['user'];
+ $change['version'] = $recent['date'];
+ $change['perms'] = $recent['perms'];
+ $change['size'] = @filesize(wikiFN($recent['id']));
+ array_push($changes, $change);
+ }
+
+ if (!empty($changes)) {
+ return $changes;
+ } else {
+ // in case we still have nothing at this point
+ return new IXR_Error(30, 'There are no changes in the specified timeframe');
+ }
+ }
+
+ /**
+ * Returns a list of recent media changes since give timestamp
+ *
+ * @author Michael Hamann <michael@content-space.de>
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function getRecentMediaChanges($timestamp) {
+ if(strlen($timestamp) != 10)
+ return new IXR_Error(20, 'The provided value is not a valid timestamp');
+
+ require_once(DOKU_INC.'inc/changelog.php');
+ require_once(DOKU_INC.'inc/pageutils.php');
+
+ $recents = getRecentsSince($timestamp, null, '', RECENTS_MEDIA_CHANGES);
+
+ $changes = array();
+
+ foreach ($recents as $recent) {
+ $change = array();
+ $change['name'] = $recent['id'];
+ $change['lastModified'] = new IXR_Date($recent['date']);
+ $change['author'] = $recent['user'];
+ $change['version'] = $recent['date'];
+ $change['perms'] = $recent['perms'];
+ $change['size'] = @filesize(mediaFN($recent['id']));
+ array_push($changes, $change);
+ }
+
+ if (!empty($changes)) {
+ return $changes;
+ } else {
+ // in case we still have nothing at this point
+ return new IXR_Error(30, 'There are no changes in the specified timeframe');
+ }
+ }
+
+ /**
+ * Returns a list of available revisions of a given wiki page
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+ function pageVersions($id, $first) {
+ global $conf;
+
+ $versions = array();
+
+ if(empty($id))
+ return new IXR_Error(1, 'Empty page ID');
+
+ require_once(DOKU_INC.'inc/changelog.php');
+
+ $revisions = getRevisions($id, $first, $conf['recent']+1);
+
+ if(count($revisions)==0 && $first!=0) {
+ $first=0;
+ $revisions = getRevisions($id, $first, $conf['recent']+1);
+ }
+
+ if(count($revisions)>0 && $first==0) {
+ array_unshift($revisions, ''); // include current revision
+ array_pop($revisions); // remove extra log entry
+ }
+
+ $hasNext = false;
+ if(count($revisions)>$conf['recent']) {
+ $hasNext = true;
+ array_pop($revisions); // remove extra log entry
+ }
+
+ if(!empty($revisions)) {
+ foreach($revisions as $rev) {
+ $file = wikiFN($id,$rev);
+ $time = @filemtime($file);
+ // we check if the page actually exists, if this is not the
+ // case this can lead to less pages being returned than
+ // specified via $conf['recent']
+ if($time){
+ $info = getRevisionInfo($id, $time, 1024);
+ if(!empty($info)) {
+ $data['user'] = $info['user'];
+ $data['ip'] = $info['ip'];
+ $data['type'] = $info['type'];
+ $data['sum'] = $info['sum'];
+ $data['modified'] = new IXR_Date($info['date']);
+ $data['version'] = $info['date'];
+ array_push($versions, $data);
+ }
+ }
+ }
+ return $versions;
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * The version of Wiki RPC API supported
+ */
+ function wiki_RPCVersion(){
+ return 2;
+ }
+
+
+ /**
+ * Locks or unlocks a given batch of pages
+ *
+ * Give an associative array with two keys: lock and unlock. Both should contain a
+ * list of pages to lock or unlock
+ *
+ * Returns an associative array with the keys locked, lockfail, unlocked and
+ * unlockfail, each containing lists of pages.
+ */
+ function setLocks($set){
+ $locked = array();
+ $lockfail = array();
+ $unlocked = array();
+ $unlockfail = array();
+
+ foreach((array) $set['lock'] as $id){
+ if(checklock($id)){
+ $lockfail[] = $id;
+ }else{
+ lock($id);
+ $locked[] = $id;
+ }
+ }
+
+ foreach((array) $set['unlock'] as $id){
+ if(unlock($id)){
+ $unlocked[] = $id;
+ }else{
+ $unlockfail[] = $id;
+ }
+ }
+
+ return array(
+ 'locked' => $locked,
+ 'lockfail' => $lockfail,
+ 'unlocked' => $unlocked,
+ 'unlockfail' => $unlockfail,
+ );
+ }
+
+ function getAPIVersion(){
+ return DOKU_XMLRPC_API_VERSION;
+ }
+
+ function login($user,$pass){
+ global $conf;
+ global $auth;
+ if(!$conf['useacl']) return 0;
+ if(!$auth) return 0;
+ if($auth->canDo('external')){
+ return $auth->trustExternal($user,$pass,false);
+ }else{
+ return auth_login($user,$pass,false,true);
+ }
+ }
+
+
+}
+
+$server = new dokuwiki_xmlrpc_server();
+
+// vim:ts=4:sw=4:et:enc=utf-8:
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README
new file mode 100644
index 000000000..90bab9578
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README
@@ -0,0 +1,2 @@
+These icons were taken from the nuvoX KDE icon theme and are GPL licensed
+See http://www.kde-look.org/content/show.php/nuvoX?content=38467
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png
new file mode 100644
index 000000000..96fb4cd56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png
new file mode 100644
index 000000000..e4d376d85
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png
new file mode 100644
index 000000000..e2823bac7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png
new file mode 100644
index 000000000..4e22aaf0d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png
new file mode 100644
index 000000000..002d3a75b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png
new file mode 100644
index 000000000..c5c8dc6d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif
new file mode 100644
index 000000000..ff13b9585
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif
new file mode 100644
index 000000000..d491c18db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif
new file mode 100644
index 000000000..8bdf40d54
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif
new file mode 100644
index 000000000..9935f8210
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/close.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/close.png
new file mode 100644
index 000000000..e1b498c14
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/close.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/del.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/del.png
new file mode 100644
index 000000000..a3260d718
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/del.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png
new file mode 100644
index 000000000..0b98d79ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif
new file mode 100644
index 000000000..a2a23de7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/error.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/error.png
new file mode 100644
index 000000000..8a1ba4c66
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/error.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png
new file mode 100644
index 000000000..d48cae038
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png
new file mode 100644
index 000000000..9446afcb4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png
new file mode 100644
index 000000000..ddffe6fd1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png
new file mode 100644
index 000000000..2dc51b16d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png
new file mode 100644
index 000000000..d5db29ba5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png
new file mode 100644
index 000000000..89c1537fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png
new file mode 100644
index 000000000..9229d8783
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png
new file mode 100644
index 000000000..932567f8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png
new file mode 100644
index 000000000..817014fa7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png
new file mode 100644
index 000000000..b4c07a912
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png
new file mode 100644
index 000000000..2426bd169
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png
new file mode 100644
index 000000000..1a6812185
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png
new file mode 100644
index 000000000..672cbce42
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php
new file mode 100644
index 000000000..c1e64fe2a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php
@@ -0,0 +1,50 @@
+<!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" xml:lang="en"
+ lang="en" dir="ltr">
+<head>
+ <title>filetype icons</title>
+
+ <style type="text/css">
+ body {
+ background-color: #ccc;
+ font-family: Arial;
+ }
+
+ .box {
+ width: 200px;
+ float:left;
+ padding: 0.5em;
+ margin: 0;
+ }
+
+ .white {
+ background-color: #fff;
+ }
+
+ .black {
+ background-color: #000;
+ }
+ </style>
+
+</head>
+<body>
+
+<div class="white box">
+<?php
+foreach (glob('*.png') as $img) {
+ echo '<img src="'.$img.'" alt="'.$img.'" title="'.$img.'" /> ';
+}
+?>
+</div>
+
+<div class="black box">
+<?php
+foreach (glob('*.png') as $img) {
+ echo '<img src="'.$img.'" alt="'.$img.'" title="'.$img.'" /> ';
+}
+?>
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png
new file mode 100644
index 000000000..c5f2fd09f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png
new file mode 100644
index 000000000..aa4cc23a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png
new file mode 100644
index 000000000..1fb6cc1fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png
new file mode 100644
index 000000000..0c314eb56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png
new file mode 100644
index 000000000..7c07d023f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png
new file mode 100644
index 000000000..47f65c84d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png
new file mode 100644
index 000000000..a2fbc5195
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png
new file mode 100644
index 000000000..434f18262
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png
new file mode 100644
index 000000000..74f6303d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png
new file mode 100644
index 000000000..a5c77f845
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png
new file mode 100644
index 000000000..2ab1273f0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png
new file mode 100644
index 000000000..b0c21fc1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png
new file mode 100644
index 000000000..638066dea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png
new file mode 100644
index 000000000..e735f875b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png
new file mode 100644
index 000000000..6ac381cd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png
new file mode 100644
index 000000000..f0b5b00ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png
new file mode 100644
index 000000000..adaefc602
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png
new file mode 100644
index 000000000..c51c763ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png
new file mode 100644
index 000000000..a21b8da49
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png
new file mode 100644
index 000000000..a6af4d1ca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png
new file mode 100644
index 000000000..45f448978
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png
new file mode 100644
index 000000000..22212eafa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png
new file mode 100644
index 000000000..d8bada5fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png
new file mode 100644
index 000000000..0729ed020
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png
new file mode 100644
index 000000000..419c183c1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png
new file mode 100644
index 000000000..5801bb23a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png
new file mode 100644
index 000000000..2a94290d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png
new file mode 100644
index 000000000..6da97beb3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png
new file mode 100644
index 000000000..5a2f717fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png
new file mode 100644
index 000000000..141acf564
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png
new file mode 100644
index 000000000..da20009c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png
new file mode 100644
index 000000000..e8cd58dc0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png
new file mode 100644
index 000000000..eb4632397
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png
new file mode 100644
index 000000000..999ffbe80
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/history.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/history.png
new file mode 100644
index 000000000..ef9e311d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/history.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/images/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/index.html
@@ -0,0 +1,12 @@
+<!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>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/info.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/info.png
new file mode 100644
index 000000000..a237c1782
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/info.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png
new file mode 100644
index 000000000..73d6f8d39
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif
new file mode 100644
index 000000000..f52c1c581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif
new file mode 100644
index 000000000..f52c1c581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif
new file mode 100644
index 000000000..f52c1c581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif
new file mode 100644
index 000000000..0f9f67587
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif
new file mode 100644
index 000000000..7dc4248e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif
new file mode 100644
index 000000000..3432b8d57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif
new file mode 100644
index 000000000..fb39f6152
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif
new file mode 100644
index 000000000..7ac545436
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif
new file mode 100644
index 000000000..638d4c450
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif
new file mode 100644
index 000000000..e272a29b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif
new file mode 100644
index 000000000..e8dc5d274
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif
new file mode 100644
index 000000000..ca853b8c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif
new file mode 100644
index 000000000..e137c92fa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100644
index 000000000..49f272f82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100644
index 000000000..0f2a0f107
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png
new file mode 100644
index 000000000..5f9821470
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png
new file mode 100644
index 000000000..8f317035e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png
new file mode 100644
index 000000000..f0a944e0b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png
new file mode 100644
index 000000000..822491edb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png
new file mode 100644
index 000000000..a66f4d1a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png
new file mode 100644
index 000000000..1371aba88
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png
new file mode 100644
index 000000000..cedc39c62
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100644
index 000000000..b27ead2f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100644
index 000000000..1c54f994d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png
new file mode 100644
index 000000000..33c7b1fa4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png
new file mode 100644
index 000000000..52073c043
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png
new file mode 100644
index 000000000..0b1880f91
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png
new file mode 100644
index 000000000..99d8efd35
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png
new file mode 100644
index 000000000..adfa085bd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png
new file mode 100644
index 000000000..cb815ac13
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png
new file mode 100644
index 000000000..f78e73d02
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif
new file mode 100644
index 000000000..36902f159
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif
new file mode 100644
index 000000000..adc3fac8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif
new file mode 100644
index 000000000..240bd88c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png
new file mode 100644
index 000000000..cf3d97f75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif
new file mode 100644
index 000000000..499a2e2aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png
new file mode 100644
index 000000000..1e8efa063
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png
new file mode 100644
index 000000000..6e0015df4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png
new file mode 100644
index 000000000..da3c2a2d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/page.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/page.png
new file mode 100644
index 000000000..03ddd799f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/page.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png
new file mode 100644
index 000000000..0bfecd50e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif
new file mode 100644
index 000000000..9306686d8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif
new file mode 100644
index 000000000..66d3a51e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif
new file mode 100644
index 000000000..d668348b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif
new file mode 100644
index 000000000..b66ea99d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif
new file mode 100644
index 000000000..2880055cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif
new file mode 100644
index 000000000..d3527723c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif
new file mode 100644
index 000000000..0c49e0698
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif
new file mode 100644
index 000000000..cead0306c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif
new file mode 100644
index 000000000..7d54b1f99
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif
new file mode 100644
index 000000000..fd7903b19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif
new file mode 100644
index 000000000..eb4b70b66
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif
new file mode 100644
index 000000000..5d3978106
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif
new file mode 100644
index 000000000..ab1aa8e12
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif
new file mode 100644
index 000000000..6e50e2eec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif
new file mode 100644
index 000000000..d2ac78c04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif
new file mode 100644
index 000000000..a8bb8a303
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif
new file mode 100644
index 000000000..a40ae0d7e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif
new file mode 100644
index 000000000..1410f7f1e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif
new file mode 100644
index 000000000..374ba150f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif
new file mode 100644
index 000000000..b54cd0f94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif
new file mode 100644
index 000000000..4f311567e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif
new file mode 100644
index 000000000..9d072265b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif
new file mode 100644
index 000000000..29da2a2fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif
new file mode 100644
index 000000000..ad7628320
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif
new file mode 100644
index 000000000..d7f5f2f4b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif
new file mode 100644
index 000000000..d2ac78c04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif
new file mode 100644
index 000000000..448399b2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif
new file mode 100644
index 000000000..7b1f6d304
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif
new file mode 100644
index 000000000..769639d32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif
new file mode 100644
index 000000000..cb2142431
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif
new file mode 100644
index 000000000..502fe247e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif
new file mode 100644
index 000000000..d14828804
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/success.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/success.png
new file mode 100644
index 000000000..a5ae9f11b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/success.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif
new file mode 100644
index 000000000..d04bd3949
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png
new file mode 100644
index 000000000..7ebe99ee9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png
new file mode 100644
index 000000000..3f3396aeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png
new file mode 100644
index 000000000..aae052462
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png
new file mode 100644
index 000000000..93dae935f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png
new file mode 100644
index 000000000..f0eee3bd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png
new file mode 100644
index 000000000..8cfd4c077
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png
new file mode 100644
index 000000000..7b8f51a1b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png
new file mode 100644
index 000000000..44b00d9c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png
new file mode 100644
index 000000000..8fc6b0d75
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png
new file mode 100644
index 000000000..f9d67adcb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png
new file mode 100644
index 000000000..66f3d5e33
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png
new file mode 100644
index 000000000..f86a8ec94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png
new file mode 100644
index 000000000..1aab5d7de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png
new file mode 100644
index 000000000..324e7c036
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png
new file mode 100644
index 000000000..41e52c6ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png
new file mode 100644
index 000000000..75afd3dc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png
new file mode 100644
index 000000000..178cec9f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png
new file mode 100644
index 000000000..3162fa21d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png
new file mode 100644
index 000000000..ef997b7cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png
new file mode 100644
index 000000000..e92845cb4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png
new file mode 100644
index 000000000..203aacc2b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png
new file mode 100644
index 000000000..471171db4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png
new file mode 100644
index 000000000..bf9665a68
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png
new file mode 100644
index 000000000..ebad933c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/up.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/up.png
new file mode 100644
index 000000000..557d5e6a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/up.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif
new file mode 100644
index 000000000..f2253e4a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/index.html
new file mode 100644
index 000000000..8cb33512e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/index.html
@@ -0,0 +1,12 @@
+<!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>
+<meta http-equiv="refresh" content="0; URL=../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php
new file mode 100644
index 000000000..34149ea05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php
@@ -0,0 +1,809 @@
+<?php
+/**
+ * ACL administration functions
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org> (concepts)
+ * @author Frank Schubert <frank@schokilade.de> (old version)
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'admin.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class admin_plugin_acl extends DokuWiki_Admin_Plugin {
+ var $acl = null;
+ var $ns = null;
+ var $who = '';
+ var $usersgroups = array();
+ var $specials = array();
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Andreas Gohr',
+ 'email' => 'andi@splitbrain.org',
+ 'date' => '2010-01-17',
+ 'name' => 'ACL Manager',
+ 'desc' => 'Manage Page Access Control Lists',
+ 'url' => 'http://dokuwiki.org/plugin:acl',
+ );
+ }
+
+ /**
+ * return prompt for admin menu
+ */
+ function getMenuText($language) {
+ return $this->getLang('admin_acl');
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 1;
+ }
+
+ /**
+ * handle user request
+ *
+ * Initializes internal vars and handles modifications
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function handle() {
+ global $AUTH_ACL;
+ global $ID;
+ global $auth;
+ // fresh 1:1 copy without replacements
+ $AUTH_ACL = $this->load_acl_config(false);
+ // namespace given?
+ if($_REQUEST['ns'] == '*'){
+ $this->ns = '*';
+ }else{
+ $this->ns = cleanID($_REQUEST['ns']);
+ }
+
+ // user or group choosen?
+ $who = trim($_REQUEST['acl_w']);
+ if($_REQUEST['acl_t'] == '__g__' && $who){
+ $this->who = '@'.ltrim($auth->cleanGroup($who),'@');
+ }elseif($_REQUEST['acl_t'] == '__u__' && $who){
+ $this->who = ltrim($auth->cleanUser($who),'@');
+ }elseif($_REQUEST['acl_t'] &&
+ $_REQUEST['acl_t'] != '__u__' &&
+ $_REQUEST['acl_t'] != '__g__'){
+ $this->who = $_REQUEST['acl_t'];
+ }elseif($who){
+ $this->who = $who;
+ }
+
+ // handle modifications
+ if(isset($_REQUEST['cmd']) && checkSecurityToken()){
+
+ //error_log("dokuwiki:acl:cms!!!");
+ // scope for modifications
+ if($this->ns){
+ if($this->ns == '*'){
+ $scope = '*';
+ }else{
+ $scope = $this->ns.':*';
+ }
+ }else{
+ $scope = $ID;
+ }
+
+ if(isset($_REQUEST['cmd']['save']) && $scope && $this->who && isset($_REQUEST['acl'])){
+ //error_log("dokuwiki:acl:save!!!");
+ // handle additions or single modifications
+ $this->_acl_del($scope, $this->who);
+ $this->_acl_add($scope, $this->who, (int) $_REQUEST['acl']);
+ }elseif(isset($_REQUEST['cmd']['del']) && $scope && $this->who){
+ //error_log("dokuwiki:acl:delete!!!");
+ // handle single deletions
+ $this->_acl_del($scope, $this->who);
+ }elseif(isset($_REQUEST['cmd']['update'])){
+ //error_log("dokuwiki:acl:update!!!");
+ // handle update of the whole file
+ foreach((array) $_REQUEST['del'] as $where => $names){
+ // remove all rules marked for deletion
+ foreach($names as $who) {
+ unset($_REQUEST['acl'][$where][$who]);
+ //error_log("dokuwiki:acl:where_who:".$where.":".$who);
+ }
+ }
+ // prepare lines
+ $lines = array();
+ // keep header
+ foreach($AUTH_ACL as $line){
+ if($line{0} == '#'){
+ $lines[] = $line."\n";
+ }else{
+ $lines[] = $line."\n";
+ }
+ }
+ // re-add all rules
+ foreach((array) $_REQUEST['acl'] as $where => $opt){
+ foreach($opt as $who => $perm){
+ //error_log("dokuwiki:acl:where_acl:".$where.":".$who);
+ $who = auth_nameencode($who,true);
+ $lines[] = "$where\t$who\t$perm\n";
+ }
+ }
+ // save it
+ $AUTH_ACL = $this->save_acl_config(join('',$lines));
+
+ }
+
+ $AUTH_ACL = $this->load_acl_config(false);
+ }
+
+ // initialize ACL array
+ $this->_init_acl_config();
+ }
+
+ /**
+ * ACL Output function
+ *
+ * print a table with all significant permissions for the
+ * current id
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function html() {
+ global $ID;
+
+ echo '<div id="acl_manager">'.NL;
+ echo '<h1>'.$this->getLang('admin_acl').'</h1>'.NL;
+ echo '<div class="level1">'.NL;
+
+ echo '<div id="acl__tree">'.NL;
+ $this->_html_explorer($_REQUEST['ns']);
+ echo '</div>'.NL;
+
+ echo '<div id="acl__detail">'.NL;
+ $this->_html_detail();
+ echo '</div>'.NL;
+ echo '</div>'.NL;
+
+ echo '<div class="clearer"></div>';
+ echo '<h2>'.$this->getLang('current').'</h2>'.NL;
+ echo '<div class="level2">'.NL;
+ $this->_html_table();
+ echo '</div>'.NL;
+
+ echo '<div class="footnotes"><div class="fn">'.NL;
+ echo '<sup><a id="fn__1" class="fn_bot" name="fn__1" href="#fnt__1">1)</a></sup>'.NL;
+ echo $this->getLang('p_include');
+ echo '</div></div>';
+
+ echo '</div>'.NL;
+ }
+
+ /**
+ * returns array with set options for building links
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _get_opts($addopts=null){
+ global $ID;
+ $opts = array(
+ 'do'=>'admin',
+ 'dokupage'=>'acl',
+ );
+ if($this->ns) $opts['ns'] = $this->ns;
+ if($this->who) $opts['acl_w'] = $this->who;
+
+ if(is_null($addopts)) return $opts;
+ return array_merge($opts, $addopts);
+ }
+
+ /**
+ * Display a tree menu to select a page or namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_explorer(){
+ require_once(DOKU_INC.'inc/search.php');
+ global $conf;
+ global $ID;
+ global $lang;
+
+ $dir = $conf['datadir'];
+ $ns = $this->ns;
+ if(empty($ns)){
+ $ns = dirname(str_replace(':','/',$ID));
+ if($ns == '.') $ns ='';
+ }elseif($ns == '*'){
+ $ns ='';
+ }
+ $ns = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $data = $this->_get_tree($ns);
+
+ // wrap a list with the root level around the other namespaces
+ $item = array( 'level' => 0, 'id' => '*', 'type' => 'd',
+ 'open' =>'true', 'label' => '['.$lang['mediaroot'].']');
+
+ echo '<ul class="acltree">';
+ echo $this->_html_li_acl($item);
+ echo '<div class="li">';
+ echo $this->_html_list_acl($item);
+ echo '</div>';
+ echo html_buildlist($data,'acl',
+ array($this,'_html_list_acl'),
+ array($this,'_html_li_acl'));
+ echo '</li>';
+ echo '</ul>';
+
+ }
+
+ /**
+ * get a combined list of media and page files
+ *
+ * @param string $folder an already converted filesystem folder of the current namespace
+ * @param string $limit limit the search to this folder
+ */
+ function _get_tree($folder,$limit=''){
+ global $conf;
+
+ // read tree structure from pages and media
+ $data = array();
+ search($data,$conf['datadir'],'search_index',array('ns' => $folder),$limit);
+ $media = array();
+ search($media,$conf['mediadir'],'search_index',array('ns' => $folder, 'nofiles' => true),$limit);
+ $data = array_merge($data,$media);
+ unset($media);
+
+ // combine by sorting and removing duplicates
+ usort($data,array($this,'_tree_sort'));
+ $count = count($data);
+ if($count>0) for($i=1; $i<$count; $i++){
+ if($data[$i]['type'] == 'f') break; // namespaces come first, we're done
+ if($data[$i-1]['id'] == $data[$i]['id']) unset($data[$i]);
+ }
+ return $data;
+ }
+
+ /**
+ * usort callback
+ *
+ * Sorts the combined trees of media and page files
+ */
+ function _tree_sort($a,$b){
+ if($a['type'] == 'd' && $b['type'] == 'f'){
+ return -1;
+ }elseif($a['type'] == 'f' && $b['type'] == 'd'){
+ return 1;
+ }else{
+ return strcmp($a['id'],$b['id']);
+ }
+ }
+
+ /**
+ * Display the current ACL for selected where/who combination with
+ * selectors and modification form
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_detail(){
+ global $conf;
+ global $ID;
+
+ echo '<form action="'.wl().'" method="post" accept-charset="utf-8"><div class="no">'.NL;
+
+ echo '<div id="acl__user">';
+ echo $this->getLang('acl_perms').' ';
+ $inl = $this->_html_select();
+ echo '<input type="text" name="acl_w" class="edit" value="'.(($inl)?'':hsc(ltrim($this->who,'@'))).'" />'.NL;
+ echo '<input type="submit" value="'.$this->getLang('btn_select').'" class="button" />'.NL;
+ echo '</div>'.NL;
+
+ echo '<div id="acl__info">';
+ $this->_html_info();
+ echo '</div>';
+
+ echo '<input type="hidden" name="ns" value="'.hsc($this->ns).'" />'.NL;
+ echo '<input type="hidden" name="id" value="'.hsc($ID).'" />'.NL;
+ echo '<input type="hidden" name="do" value="admin" />'.NL;
+ echo '<input type="hidden" name="dokupage" value="acl" />'.NL;
+ echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />'.NL;
+ echo '</div></form>'.NL;
+ }
+
+ /**
+ * Print infos and editor
+ */
+ function _html_info(){
+ global $ID;
+
+ if($this->who){
+ $current = $this->_get_exact_perm();
+
+ // explain current permissions
+ $this->_html_explain($current);
+ // load editor
+ $this->_html_acleditor($current);
+ }else{
+ echo '<p>';
+ if($this->ns){
+ printf($this->getLang('p_choose_ns'),hsc($this->ns));
+ }else{
+ printf($this->getLang('p_choose_id'),hsc($ID));
+ }
+ echo '</p>';
+
+ echo $this->locale_xhtml('help');
+ }
+ }
+
+ /**
+ * Display the ACL editor
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_acleditor($current){
+ global $lang;
+
+ echo '<fieldset>';
+ if(is_null($current)){
+ echo '<legend>'.$this->getLang('acl_new').'</legend>';
+ }else{
+ echo '<legend>'.$this->getLang('acl_mod').'</legend>';
+ }
+
+
+ echo $this->_html_checkboxes($current,empty($this->ns),'acl');
+
+ if(is_null($current)){
+ echo '<input type="submit" name="cmd[save]" class="button" value="'.$lang['btn_save'].'" />'.NL;
+ }else{
+ echo '<input type="submit" name="cmd[save]" class="button" value="'.$lang['btn_update'].'" />'.NL;
+ echo '<input type="submit" name="cmd[del]" class="button" value="'.$lang['btn_delete'].'" />'.NL;
+ }
+
+ echo '</fieldset>';
+ }
+
+ /**
+ * Explain the currently set permissions in plain english/$lang
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_explain($current){
+ global $ID;
+ global $auth;
+
+ $who = $this->who;
+ $ns = $this->ns;
+
+ // prepare where to check
+ if($ns){
+ if($ns == '*'){
+ $check='*';
+ }else{
+ $check=$ns.':*';
+ }
+ }else{
+ $check = $ID;
+ }
+
+ // prepare who to check
+ if($who{0} == '@'){
+ $user = '';
+ $groups = array(ltrim($who,'@'));
+ }else{
+ $user = auth_nameencode($who);
+ $info = $auth->getUserData($user);
+ if($info === false){
+ $groups = array();
+ }else{
+ $groups = $info['grps'];
+ }
+ }
+
+ // check the permissions
+ $perm = auth_aclcheck($check,$user,$groups);
+
+ // build array of named permissions
+ $names = array();
+ if($perm){
+ if($ns){
+ if($perm >= AUTH_DELETE) $names[] = $this->getLang('acl_perm16');
+ if($perm >= AUTH_UPLOAD) $names[] = $this->getLang('acl_perm8');
+ if($perm >= AUTH_CREATE) $names[] = $this->getLang('acl_perm4');
+ }
+ if($perm >= AUTH_EDIT) $names[] = $this->getLang('acl_perm2');
+ if($perm >= AUTH_READ) $names[] = $this->getLang('acl_perm1');
+ $names = array_reverse($names);
+ }else{
+ $names[] = $this->getLang('acl_perm0');
+ }
+
+ // print permission explanation
+ echo '<p>';
+ if($user){
+ if($ns){
+ printf($this->getLang('p_user_ns'),hsc($who),hsc($ns),join(', ',$names));
+ }else{
+ printf($this->getLang('p_user_id'),hsc($who),hsc($ID),join(', ',$names));
+ }
+ }else{
+ if($ns){
+ printf($this->getLang('p_group_ns'),hsc(ltrim($who,'@')),hsc($ns),join(', ',$names));
+ }else{
+ printf($this->getLang('p_group_id'),hsc(ltrim($who,'@')),hsc($ID),join(', ',$names));
+ }
+ }
+ echo '</p>';
+
+ // add note if admin
+ if($perm == AUTH_ADMIN){
+ echo '<p>'.$this->getLang('p_isadmin').'</p>';
+ }elseif(is_null($current)){
+ echo '<p>'.$this->getLang('p_inherited').'</p>';
+ }
+ }
+
+
+ /**
+ * Item formatter for the tree view
+ *
+ * User function for html_buildlist()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_list_acl($item){
+ global $ID;
+ $ret = '';
+ // what to display
+ if($item['label']){
+ $base = $item['label'];
+ }else{
+ $base = ':'.$item['id'];
+ $base = substr($base,strrpos($base,':')+1);
+ }
+
+ // highlight?
+ if( ($item['type']=='d' && $item['id'] == $this->ns) ||
+ ($item['type']!='d' && $item['id'] == $ID)) $cl = ' cur';
+
+ // namespace or page?
+ if($item['type']=='d'){
+ if($item['open']){
+ $img = DOKU_BASE.'lib/images/minus.gif';
+ $alt = '&minus;';
+ }else{
+ $img = DOKU_BASE.'lib/images/plus.gif';
+ $alt = '+';
+ }
+ $ret .= '<img src="'.$img.'" alt="'.$alt.'" />';
+ $ret .= '<a href="'.wl('',$this->_get_opts(array('ns'=>$item['id'],'sectok'=>getSecurityToken()))).'" class="idx_dir'.$cl.'">';
+ $ret .= $base;
+ $ret .= '</a>';
+ }else{
+ $ret .= '<a href="'.wl('',$this->_get_opts(array('id'=>$item['id'],'ns'=>'','sectok'=>getSecurityToken()))).'" class="wikilink1'.$cl.'">';
+ $ret .= noNS($item['id']);
+ $ret .= '</a>';
+ }
+ return $ret;
+ }
+
+
+ function _html_li_acl($item){
+ return '<li class="level'.$item['level'].'">';
+ }
+
+
+ /**
+ * Get current ACL settings as multidim array
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _init_acl_config(){
+ global $AUTH_ACL;
+ global $conf;
+ $acl_config=array();
+ $usersgroups = array();
+
+ // get special users and groups
+ $this->specials[] = '@ALL';
+ $this->specials[] = '@'.$conf['defaultgroup'];
+ if($conf['manager'] != '!!not set!!'){
+ $this->specials = array_merge($this->specials,
+ array_map('trim',
+ explode(',',$conf['manager'])));
+ }
+ $this->specials = array_filter($this->specials);
+ $this->specials = array_unique($this->specials);
+ sort($this->specials);
+
+ foreach($AUTH_ACL as $line){
+ $line = trim(preg_replace('/#.*$/','',$line)); //ignore comments
+ if(!$line) continue;
+
+ $acl = preg_split('/\s+/',$line);
+ //0 is pagename, 1 is user, 2 is acl
+
+ $acl[1] = rawurldecode($acl[1]);
+ $acl_config[$acl[0]][$acl[1]] = $acl[2];
+
+ // store non-special users and groups for later selection dialog
+ $ug = $acl[1];
+ if(in_array($ug,$this->specials)) continue;
+ $usersgroups[] = $ug;
+ }
+
+ $usersgroups = array_unique($usersgroups);
+ sort($usersgroups);
+ ksort($acl_config);
+
+ $this->acl = $acl_config;
+ $this->usersgroups = $usersgroups;
+ }
+
+ /**
+ * Display all currently set permissions in a table
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_table(){
+ global $lang;
+ global $ID;
+
+ echo '<form action="'.wl().'" method="post" accept-charset="utf-8"><div class="no">'.NL;
+ if($this->ns){
+ echo '<input type="hidden" name="ns" value="'.hsc($this->ns).'" />'.NL;
+ }else{
+ echo '<input type="hidden" name="id" value="'.hsc($ID).'" />'.NL;
+ }
+ echo '<input type="hidden" name="acl_w" value="'.hsc($this->who).'" />'.NL;
+ echo '<input type="hidden" name="do" value="admin" />'.NL;
+ echo '<input type="hidden" name="dokupage" value="acl" />'.NL;
+ echo '<input type="hidden" name="sectok" value="'.getSecurityToken().'" />'.NL;
+ echo '<table class="inline">';
+ echo '<tr>';
+ echo '<th>'.$this->getLang('where').'</th>';
+ echo '<th>'.$this->getLang('who').'</th>';
+ echo '<th>'.$this->getLang('perm').'<sup><a id="fnt__1" class="fn_top" name="fnt__1" href="#fn__1">1)</a></sup></th>';
+ echo '<th>'.$lang['btn_delete'].'</th>';
+ echo '</tr>';
+ foreach($this->acl as $where => $set){
+ foreach($set as $who => $perm){
+ echo '<tr>';
+ echo '<td>';
+ if(substr($where,-1) == '*'){
+ echo '<span class="aclns">'.hsc($where).'</span>';
+ $ispage = false;
+ }else{
+ echo '<span class="aclpage">'.hsc($where).'</span>';
+ $ispage = true;
+ }
+ echo '</td>';
+
+ echo '<td>';
+ if($who{0} == '@'){
+ echo '<span class="aclgroup">'.hsc($who).'</span>';
+ }else{
+ echo '<span class="acluser">'.hsc($who).'</span>';
+ }
+ echo '</td>';
+
+ echo '<td>';
+ echo $this->_html_checkboxes($perm,$ispage,'acl['.$where.']['.$who.']');
+ echo '</td>';
+
+ echo '<td align="center">';
+ echo '<input type="checkbox" name="del['.hsc($where).'][]" value="'.hsc($who).'" />';
+ echo '</td>';
+ echo '</tr>';
+ }
+ }
+
+ echo '<tr>';
+ echo '<th align="right" colspan="4">';
+ echo '<input type="submit" value="'.$lang['btn_update'].'" name="cmd[update]" class="button" />';
+ echo '</th>';
+ echo '</tr>';
+ echo '</table>';
+ echo '</div></form>'.NL;
+ }
+
+
+ /**
+ * Returns the permission which were set for exactly the given user/group
+ * and page/namespace. Returns null if no exact match is available
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _get_exact_perm(){
+ global $ID;
+ if($this->ns){
+ if($this->ns == '*'){
+ $check = '*';
+ }else{
+ $check = $this->ns.':*';
+ }
+ }else{
+ $check = $ID;
+ }
+
+ if(isset($this->acl[$check][$this->who])){
+ return $this->acl[$check][$this->who];
+ }else{
+ return null;
+ }
+ }
+
+ function load_acl_config($full) {
+ global $auth;
+ if($auth->cando['getACL']) {
+ $acl = $auth->getACL();
+ } else {
+ $acl = file(DOKU_CONF.'acl.auth.php');
+ }
+ if ($full) return join("\n", $acl)."\n";
+ return $acl;
+ }
+ function save_acl_config($newconfig) {
+ global $auth;
+ if($auth->cando['getACL']) {
+ $auth->setACL($newconfig);
+ return true;
+ } else {
+ return io_saveFile(DOKU_CONF.'acl.auth.php', $newconfig);
+ }
+
+ }
+
+ /**
+ * adds new acl-entry to conf/acl.auth.php
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ */
+ function _acl_add($acl_scope, $acl_user, $acl_level){
+ $acl_config = $this->load_acl_config(true);
+ $acl_user = auth_nameencode($acl_user,true);
+
+ // max level for pagenames is edit
+ if(strpos($acl_scope,'*') === false) {
+ if($acl_level > AUTH_EDIT) $acl_level = AUTH_EDIT;
+ }
+
+
+ $new_acl = "$acl_scope\t$acl_user\t$acl_level\n";
+
+ $new_config = $acl_config.$new_acl;
+ return $this->save_acl_config($new_config);
+ }
+
+ /**
+ * remove acl-entry from conf/acl.auth.php
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ */
+ function _acl_del($acl_scope, $acl_user){
+ $acl_config = $this->load_acl_config(false);
+ $acl_user = auth_nameencode($acl_user,true);
+
+ $acl_pattern = '^'.preg_quote($acl_scope,'/').'\s+'.$acl_user.'\s+[0-8].*$';
+
+ // save all non!-matching
+ $new_config = preg_grep("/$acl_pattern/", $acl_config, PREG_GREP_INVERT);
+
+ return $this->save_acl_config(join("\n",$new_config)."\n");
+ }
+
+ /**
+ * print the permission radio boxes
+ *
+ * @author Frank Schubert <frank@schokilade.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_checkboxes($setperm,$ispage,$name){
+ global $lang;
+
+ static $label = 0; //number labels
+ $ret = '';
+
+ if($ispage && $setperm > AUTH_EDIT) $perm = AUTH_EDIT;
+
+ foreach(array(AUTH_NONE,AUTH_READ,AUTH_EDIT,AUTH_CREATE,AUTH_UPLOAD,AUTH_DELETE) as $perm){
+ $label += 1;
+
+ //general checkbox attributes
+ $atts = array( 'type' => 'radio',
+ 'id' => 'pbox'.$label,
+ 'name' => $name,
+ 'value' => $perm );
+ //dynamic attributes
+ if(!is_null($setperm) && $setperm == $perm) $atts['checked'] = 'checked';
+ if($ispage && $perm > AUTH_EDIT){
+ $atts['disabled'] = 'disabled';
+ $class = ' class="disabled"';
+ }else{
+ $class = '';
+ }
+
+ //build code
+ $ret .= '<label for="pbox'.$label.'" title="'.$this->getLang('acl_perm'.$perm).'"'.$class.'>';
+ $ret .= '<input '.html_attbuild($atts).' />&nbsp;';
+ $ret .= $this->getLang('acl_perm'.$perm);
+ $ret .= '</label>'.NL;
+ }
+ return $ret;
+ }
+
+ /**
+ * Print a user/group selector (reusing already used users and groups)
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _html_select(){
+ global $conf;
+ $inlist = false;
+
+ if($this->who &&
+ !in_array($this->who,$this->usersgroups) &&
+ !in_array($this->who,$this->specials)){
+
+ if($this->who{0} == '@'){
+ $gsel = ' selected="selected"';
+ }else{
+ $usel = ' selected="selected"';
+ }
+ }else{
+ $usel = '';
+ $gsel = '';
+ $inlist = true;
+ }
+
+
+ echo '<select name="acl_t" class="edit">'.NL;
+ echo ' <option value="__g__" class="aclgroup"'.$gsel.'>'.$this->getLang('acl_group').':</option>'.NL;
+ echo ' <option value="__u__" class="acluser"'.$usel.'>'.$this->getLang('acl_user').':</option>'.NL;
+ echo ' <optgroup label="&nbsp;">'.NL;
+ foreach($this->specials as $ug){
+ if($ug == $this->who){
+ $sel = ' selected="selected"';
+ $inlist = true;
+ }else{
+ $sel = '';
+ }
+
+ if($ug{0} == '@'){
+ echo ' <option value="'.hsc($ug).'" class="aclgroup"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }else{
+ echo ' <option value="'.hsc($ug).'" class="acluser"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }
+ }
+ echo ' </optgroup>'.NL;
+ echo ' <optgroup label="&nbsp;">'.NL;
+ foreach($this->usersgroups as $ug){
+ if($ug == $this->who){
+ $sel = ' selected="selected"';
+ $inlist = true;
+ }else{
+ $sel = '';
+ }
+
+ if($ug{0} == '@'){
+ echo ' <option value="'.hsc($ug).'" class="aclgroup"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }else{
+ echo ' <option value="'.hsc($ug).'" class="acluser"'.$sel.'>'.hsc($ug).'</option>'.NL;
+ }
+ }
+ echo ' </optgroup>'.NL;
+ echo '</select>'.NL;
+ return $inlist;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php
new file mode 100644
index 000000000..d3e88d932
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * AJAX call handler for ACL plugin
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+//fix for Opera XMLHttpRequests
+if(!count($_POST) && $HTTP_RAW_POST_DATA){
+ parse_str($HTTP_RAW_POST_DATA, $_POST);
+}
+
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../../');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/common.php');
+require_once(DOKU_INC.'inc/pageutils.php');
+require_once(DOKU_INC.'inc/auth.php');
+//close session
+session_write_close();
+
+if(!auth_isadmin()) die('for admins only');
+if(!checkSecurityToken()) die('CRSF Attack');
+
+$ID = getID();
+
+require_once(DOKU_INC.'inc/pluginutils.php');
+require_once(DOKU_INC.'inc/html.php');
+$acl = plugin_load('admin','acl');
+$acl->handle();
+
+$ajax = $_REQUEST['ajax'];
+header('Content-Type: text/html; charset=utf-8');
+
+if($ajax == 'info'){
+ $acl->_html_info();
+}elseif($ajax == 'tree'){
+ require_once(DOKU_INC.'inc/search.php');
+ global $conf;
+ global $ID;
+
+ $dir = $conf['datadir'];
+ $ns = $_REQUEST['ns'];
+ if($ns == '*'){
+ $ns ='';
+ }
+ $ns = cleanID($ns);
+ $lvl = count(explode(':',$ns));
+ $ns = utf8_encodeFN(str_replace(':','/',$ns));
+
+ $data = $acl->_get_tree($ns,$ns);
+
+ foreach($data as $item){
+ $item['level'] = $lvl+1;
+ echo $acl->_html_li_acl($item);
+ echo '<div class="li">';
+ echo $acl->_html_list_acl($item);
+ echo '</div>';
+ echo '</li>';
+ }
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php
new file mode 100644
index 000000000..04d9b0acf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Afrikaans language file
+ *
+ */
+$lang['page'] = 'Bladsy';
+$lang['acl_perm0'] = 'Niks';
+$lang['acl_perm1'] = 'Lees';
+$lang['acl_perm2'] = 'Verander';
+$lang['acl_perm4'] = 'Maak';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php
new file mode 100644
index 000000000..ced250243
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Mostafa Hussein <mostafa@gmail.com>
+ * @author Yaman Hokan <always.smile.yh@hotmail.com>
+ */
+$lang['admin_acl'] = 'إدارة قوائم التحكم بالدخول';
+$lang['acl_group'] = 'مجموعة';
+$lang['acl_user'] = 'مستخدم';
+$lang['acl_perms'] = 'ترخيص لـ';
+$lang['page'] = 'صÙحة';
+$lang['namespace'] = 'Ùضاء التسمية';
+$lang['btn_select'] = 'اختيار';
+$lang['who'] = 'اسم المستخدم / المجموعة';
+$lang['perm'] = 'التصاريح';
+$lang['acl_perm0'] = 'لا يوجد';
+$lang['acl_perm1'] = 'قراءة';
+$lang['acl_perm2'] = 'تحرير';
+$lang['acl_perm4'] = 'إنشاء';
+$lang['acl_perm8'] = 'تحميل';
+$lang['acl_perm16'] = 'مسح';
+$lang['acl_new'] = 'أض٠أضاÙØ© جديدة';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt
new file mode 100644
index 000000000..23028cb35
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt
@@ -0,0 +1,11 @@
+=== Помощ ===
+
+Ðа тази Ñтраница можете да добавÑте и премахвате Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð·Ð° определÑне на имена и Ñтраници във Вашето Wiki.
+
+ЛевиÑÑ‚ панел показва вÑички налични имена и Ñтраници.
+
+Формата по-горе ви позволÑва да видите и промените разрешениÑта на Ð¸Ð·Ð±Ñ€Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ» или група.
+
+Ð’ таблицата по-долу Ñа показани вÑички актуални правила за контрол на доÑтъпа. Можете да Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ‚Ðµ за бързо изтриване или промÑна на множеÑтво правила.
+
+Четене на [[doku>acl|ACL документациÑта]] може да ви помогне да разберете напълно как работи контрола на доÑтъпа в DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php
new file mode 100644
index 000000000..9facd4259
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * bulgarian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
+ * @author Viktor Usunov <usun0v@mail.bg>
+ */
+$lang['admin_acl'] = 'Управление на ÑпиÑъците за доÑтъп';
+$lang['acl_group'] = 'Група';
+$lang['acl_user'] = 'Потребител';
+$lang['acl_perms'] = 'Права за';
+$lang['page'] = 'Страница';
+$lang['namespace'] = 'Именно проÑтранÑтво';
+$lang['btn_select'] = 'Избери';
+$lang['p_user_id'] = 'ПотребителÑÑ‚ <b class="acluser">%s</b> има в момента Ñледните права за Ñтраницата <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'ПотребителÑÑ‚ <b class="acluser">%s</b> има в момента Ñледните права в именното проÑтранÑтво <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Членове на групата <b class="aclgroup">%s</b> имат в момента Ñледните права за Ñтраницата <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Членове на групата <b class="aclgroup">%s</b> имат в момента Ñледните права в именното проÑтранÑтво <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'ÐœÐ¾Ð»Ñ <b>въведете потребител или група</b> в полето горе, за да видите или промените правата за Ñтраницата <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'ÐœÐ¾Ð»Ñ <b>въведете потребител или група</b> в полето горе, за да видите или промените правата за именното проÑтранÑтво <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Забележка: Тези Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ðµ Ñа определени изрично, но Ñа били наÑледени от други групи или именни проÑтранÑтва.';
+$lang['p_isadmin'] = 'Забележка: Избраните група или потребител притежават пълни права, Ñпоред конфигурациÑта им.';
+$lang['p_include'] = 'ВиÑши Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡Ð²Ð°Ñ‚ по-ниÑши такива. Създаване или премахване на Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ñе прилага Ñамо за именни проÑтранÑтва, не за Ñтраници.';
+$lang['current'] = 'Текущи ACL права';
+$lang['where'] = 'Страница/Именно поÑтранÑтво';
+$lang['who'] = 'Потребител/Група';
+$lang['perm'] = 'Права';
+$lang['acl_perm0'] = 'Ðикакви';
+$lang['acl_perm1'] = 'Четене';
+$lang['acl_perm2'] = 'Редактиране';
+$lang['acl_perm4'] = 'Създаване';
+$lang['acl_perm8'] = 'Качване';
+$lang['acl_perm16'] = 'Изтриване';
+$lang['acl_new'] = 'ДобавÑне на ново';
+$lang['acl_mod'] = 'ПромÑна на впиÑване';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt
new file mode 100644
index 000000000..87450d2fa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt
@@ -0,0 +1,15 @@
+=== Ajuda ràpida: ===
+
+En esta pàgina pot afegir i llevar permissos per a espais de noms i
+pàgines del wiki.
+
+El panel esquerre mostra tots els espais de noms i pàgines disponibles.
+
+El formulari de dalt permet vore i modificar els permissos de l'usuari
+o grup seleccionat.
+
+En la taula de baix es mostren totes les regles d'accés actuals. Pot
+usar-la per a canviar o borrar ràpidament vàries regles.
+
+Llegint la [[doku>acl|documentació oficial sobre ACL]] podrà
+comprendre millor com funciona el control d'accés en DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php
new file mode 100644
index 000000000..ef0ae92eb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * valencian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Bernat Arlandis i Mañó <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
+ */
+$lang['admin_acl'] = 'Gestor de les llistes de control d\'accés';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Usuari';
+$lang['acl_perms'] = 'Permissos per a';
+$lang['page'] = 'Pàgina';
+$lang['namespace'] = 'Espai de noms';
+$lang['btn_select'] = 'Seleccionar';
+$lang['p_user_id'] = 'L\'usuari <b class="acluser">%s</b> té actualment els següents permissos en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'L\'usuari <b class="acluser">%s</b> té actualment els següents permissos en l\'espai de noms <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen actualment els següents permissos en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen actualment els següents permissos en l\'espai de noms <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Per favor, <b>introduïxca un usuari o grup</b> en el formulari de dalt per a vore o editar els per a la pàgina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Per favor, <b>introduïxca un usuari o grup</b> en el formulari de dalt per a vore o editar els permissos per a l\'espai de noms <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: estos permissos no s\'han indicat explícitament sino que s\'hereten d\'atres grups o d\'espais de noms antecessors.';
+$lang['p_isadmin'] = 'Nota: el grup o usuari seleccionat té sempre tots els permissos perque està configurat com a super-usuari.';
+$lang['p_include'] = 'Els permissos més alts inclouen als més baixos. Els permissos per a crear, enviar i borrar només valen per a espais de noms, pàgines no.';
+$lang['current'] = 'Regles ACL actuals';
+$lang['where'] = 'Pàgina/espai de noms';
+$lang['who'] = 'Usuari/grup';
+$lang['perm'] = 'Permissos';
+$lang['acl_perm0'] = 'Cap';
+$lang['acl_perm1'] = 'Llegir';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Crear';
+$lang['acl_perm8'] = 'Pujar';
+$lang['acl_perm16'] = 'Borrar';
+$lang['acl_new'] = 'Afegir entrada nova';
+$lang['acl_mod'] = 'Modificar entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt
new file mode 100644
index 000000000..d9bcc126d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt
@@ -0,0 +1,11 @@
+=== Ajuda ràpida ===
+
+En aquesta pàgina podeu afegir i treure permisos per a espais i pàgines del vostre wiki.
+
+La subfinestra de l'esquerra mostra tots els espais i pàgines disponibles.
+
+El formulari de dalt us permet veure i modificar els permisos de l'usuari o grup que seleccioneu.
+
+En la taula de baix es mostren totes les regles de control d'accés que hagin estat definides. Podeu utilitzar aquesta taula per suprimir o modificar ràpidament totes les regles que vulgueu.
+
+Llegir la [[doku>acl|documentació oficial sobre ACL]] us pot ajudar a entendre del tot com funciona el control d'accés en DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php
new file mode 100644
index 000000000..10f656062
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * catalan language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Carles Bellver <carles.bellver@cent.uji.es>
+ * @author Carles Bellver <carles.bellver@gmail.com>
+ * @author carles.bellver@gmail.com
+ * @author carles.bellver@cent.uji.es
+ */
+$lang['admin_acl'] = 'Gestió de la Llista de Control d\'Accés';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Usuari';
+$lang['acl_perms'] = 'Permisos per a';
+$lang['page'] = 'Pàgina';
+$lang['namespace'] = 'Espai';
+$lang['btn_select'] = 'Selecciona';
+$lang['p_user_id'] = 'L\'usuari <b class="acluser">%s</b> té a hores d\'ara els permisos següents en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'L\'usuari <b class="acluser">%s</b> té a hores d\'ara els permisos següents en l\'espai <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen a hores d\'ara els permisos següents en la pàgina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Els membres del grup <b class="aclgroup">%s</b> tenen a hores d\'ara els permisos següents en l\'espai <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Introduïu un usuari o grup</b> en el formulari de dalt per veure o editar els seus permisos en la pàgina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Introduïu un usuari o grup</b> en el formulari de dalt per veure o editar els seus permisos en l\'espai <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: aquests permisos no s\'han definit explícitament, sinó que són heretats d\'altres grups o d\'espais d\'ordre superior.';
+$lang['p_isadmin'] = 'Nota: l\'usuari o grup seleccionat té sempre tots els permisos perquè ha estat configurat com a superusuari.';
+$lang['p_include'] = 'Els permisos més alts inclouen tots els permisos inferiors. Els permisos per a crear, penjar i suprimir només s\'apliquen als espais, no a pàgines.';
+$lang['current'] = 'Regles ACL actuals';
+$lang['where'] = 'Pàgina/espai';
+$lang['who'] = 'Usuari/grup';
+$lang['perm'] = 'Permisos';
+$lang['acl_perm0'] = 'Cap';
+$lang['acl_perm1'] = 'Lectura';
+$lang['acl_perm2'] = 'Edició';
+$lang['acl_perm4'] = 'Creació';
+$lang['acl_perm8'] = 'Penjar fitxers';
+$lang['acl_perm16'] = 'Suprimir';
+$lang['acl_new'] = 'Afegeix nova entrada';
+$lang['acl_mod'] = 'Modifica entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt
new file mode 100644
index 000000000..1dbc88ad0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt
@@ -0,0 +1,11 @@
+=== Nápověda: ===
+
+Na této stránce můžete přidávat a odebírat oprávnění na jmenné prostory a stránky Vaší wiki.
+
+Levý panel zobrazuje všechny dostupné jmenné prostory a stránky.
+
+Formulář výše umožňuje vidět a modifikovat oprávnění vybraného uživatele nebo skupiny.
+
+V tabulce uvedené níže jsou zobrazeny všechny aktuální pravidla pro řízení přístupu (oprávnění). Zde můžete rychle odebírat a měnit více položek (oprávnění) najednou.
+
+Pro detailnÄ›jší nápovÄ›du si pÅ™eÄtÄ›te stránku [[doku>acl|oficiální dokumentaci ACL]], která Vám může pomoci plnÄ› pochopit princip, jak řízení přístupu na DokuWiki funguje.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php
new file mode 100644
index 000000000..899d30ced
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Bohumir Zamecnik <bohumir@zamecnik.org>
+ * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
+ * @author tomas@valenta.cz
+ */
+$lang['admin_acl'] = 'Správa přístupových práv';
+$lang['acl_group'] = 'Skupina';
+$lang['acl_user'] = 'Uživatel';
+$lang['acl_perms'] = 'Práva pro';
+$lang['page'] = 'Stránka';
+$lang['namespace'] = 'Jmenný prostor';
+$lang['btn_select'] = 'Vybrat';
+$lang['p_user_id'] = 'Uživatel <b class="acluser">%s</b> má nyní na stránku <b class="aclpage">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_user_ns'] = 'Uživatel <b class="acluser">%s</b> má nyní na jmenný prostor <b class="aclns">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_group_id'] = 'Členové skupiny <b class="aclgroup">%s</b> mají nyní na stránku <b class="aclpage">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_group_ns'] = 'Členové skupiny <b class="aclgroup">%s</b> mají nyní na jmenný prostor <b class="aclns">%s</b> následující oprávnění: <i>%s</i>.';
+$lang['p_choose_id'] = 'Prosím, <b>vložte uživatele nebo skupinu</b> ve formě uvedené výše, abyste mohli prohlížet a editovat množinu oprávnění pro stránku <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Prosím, <b>vložte uživatele nebo skupinu</b> ve formě uvedené výše, abyste mohli prohlížet a editovat množinu oprávnění pro jmenný prostor <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Poznámka: Tato oprávnění nebyla nastavena explicitně, ale jsou zděděna z jiné skupiny nebo z nadřazeného jmenného prostoru.';
+$lang['p_isadmin'] = 'Poznámka: Vybraná skupina nebo uživatel má vždy plná oprávnění, protože je nastaven jako správce (superuser).';
+$lang['p_include'] = 'Vyšší oprávnění zahrnují nižší oprávnění. Vytvořit, Nahrát a Smazat se vztahují jen k jmenným prostorů, nikoliv ke stránkám.';
+$lang['current'] = 'Aktuální ACL pravidla';
+$lang['where'] = 'Stránka/Jmenný prostor';
+$lang['who'] = 'Uživatel/Skupina';
+$lang['perm'] = 'Oprávnění';
+$lang['acl_perm0'] = 'Žádné';
+$lang['acl_perm1'] = 'Čtení';
+$lang['acl_perm2'] = 'Úpravy';
+$lang['acl_perm4'] = 'Vytvoření';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Mazání';
+$lang['acl_new'] = 'Přidat novou položku';
+$lang['acl_mod'] = 'Editovat položku';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt
new file mode 100644
index 000000000..c8eedfc48
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt
@@ -0,0 +1,11 @@
+=== Vejledning ===
+
+På denne side kan du tilføje og fjerne tilladelser for navnerum og sider i din wiki.
+
+Panelet i venstre side viser alle tilgængelige navnerum og sider.
+
+I kassen for oven giver dig mulighed for at se og ændre tilladelser for en bestemt bruger eller gruppe.
+
+Nedenstående skema viser dig alle de satte regler for adgangskontrol. Du kan bruge den til hurtigt at slette eller ændre nogle af dem.
+
+Ved at læse [[doku>acl|den officielle vejledning til ACL]] kan du opnå yderligere hjælp til at blive sat helt ind i, hvordan adgangskontrol virker i DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php
new file mode 100644
index 000000000..c95ff1582
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Danish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author koeppe <koeppe@kazur.dk>
+ * @author Jon Bendtsen <bendtsen@diku.dk>
+ * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk>
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esben Laursen <hyber@hyber.dk>
+ * @author Harith <haj@berlingske.dk>
+ * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['admin_acl'] = 'Rettighedsadministration';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Bruger';
+$lang['acl_perms'] = 'Rettigheder for';
+$lang['page'] = 'Dokument';
+$lang['namespace'] = 'Navnerum';
+$lang['btn_select'] = 'Vælg';
+$lang['p_user_id'] = 'Bruger <b class="acluser">%s</b> har følgende adgang på siden <b class="aclpage">%s</b>: <i>%s</i>';
+$lang['p_user_ns'] = 'Bruger <b class="acluser">%s</b> har foreløbig følgende tilladelse i navnerummet <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Medlemmerne af gruppen <b class="aclgroup">%s</b> har foreløbigt de følgende tilladelser på siden <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Medlemmerne af gruppen <b class="aclgroup">%s</b> har foreløbigt de følgende tilladelser i navnerummet <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Venligst <b>udfyld en bruger eller gruppe</b> i ovennævnte formular for at se eller redigere tilladelserne for denne side<b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Venligst <b>udfyld en bruger eller gruppe</b> i ovennævnte formular for at se eller redigere tilladelserne for navnerummet <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Bemærk: Disse tilladelser var ikke lagt entydigt ind, men var arvet fra andre grupper eller højere navnerum.';
+$lang['p_isadmin'] = 'Bemærk: Den valgte gruppe eller bruger har altid fuld adgang, fordi den er sat til at være en supergruppe eller -bruger';
+$lang['p_include'] = 'Højere tilladelse inkluderer også lavere. Tilladelser til at oprette, lægge filer op og slette gælder kun for navnerum, ikke sider.';
+$lang['current'] = 'Aktuelle ACL-regler';
+$lang['where'] = 'Side/navnerum';
+$lang['who'] = 'Bruger/gruppe';
+$lang['perm'] = 'Adgangsniveau';
+$lang['acl_perm0'] = 'Ingen';
+$lang['acl_perm1'] = 'Læs';
+$lang['acl_perm2'] = 'Skriv';
+$lang['acl_perm4'] = 'Opret';
+$lang['acl_perm8'] = 'Overføre';
+$lang['acl_perm16'] = 'Slet';
+$lang['acl_new'] = 'Tilføj ny post';
+$lang['acl_mod'] = 'Ændre post';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt
new file mode 100644
index 000000000..d7930f8df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt
@@ -0,0 +1,11 @@
+=== Schnellhilfe ===
+
+Auf dieser Seite kannst Du Rechte für Namensräume und Seiten in deinem Wiki hinzufügen oder entfernen.
+
+Der linke Bereich zeigt alle Namensräume und Seiten.
+
+Das obere Formular zeigt die die Rechte der ausgewählten Gruppe bzw. Benutzers.
+
+In der Tabelle unten werden alle momentan gesetzten Zugriffsregeln gezeigt. Hier kannst Du schnell mehrere Regeln löschen oder ändern.
+
+Das Lesen von [[doku>acl|official documentation on ACL]] kann Dir helfen zu verstehen, wie die Zugriffskontrole in DokuWiki funktioniert.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php
new file mode 100644
index 000000000..56dedfc61
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * German (informal) language file
+ *
+ * @author Alexander Fischer <tbanus@os-forge.net>
+ * @author Juergen Schwarzer <jschwarzer@freenet.de>
+ */
+$lang['admin_acl'] = 'Zugriffskontrollsystem Management';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Benutzer';
+$lang['acl_perms'] = 'Rechte für';
+$lang['page'] = 'Seite';
+$lang['namespace'] = 'Namensraum';
+$lang['btn_select'] = 'Auswählen';
+$lang['p_user_id'] = 'Benutzer <b class="acluser">%s</b> hat im Moment folgende Rechte auf der Seite <b class="aclpage">%s</b>: <i>%s</i>';
+$lang['p_user_ns'] = 'Benutzer <b class="acluser">%s</b> hat momentan die folgenden Rechte im Namensraum<b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Die Gruppenmitglieder <b class="aclgroup">%s</b> haben momentan die folgenden Rechte auf der Seite <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Die Mitglieder der Gruppe <b class="aclgroup">%s</b> haben gerade Zugriff in folgenden Namensräumen <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Bitte <b>gib einen Nutzer oder eine Gruppe</b> in das Formular ein, um die Berechtigungen der Seite<b class="aclpage">%s</b> anzusehen oder zu bearbeiten.';
+$lang['p_choose_ns'] = 'Bitte <b>gib einen Nutzer oder eine Gruppe</b> in das Formular ein, um die Berechtigungen des Namenraumes<b class="aclpage">%s</b> anzusehen oder zu bearbeiten.';
+$lang['p_inherited'] = 'Hinweis: Diese Rechte wuredn nicht explizit gesetzt sondern geerbt von anderen Grupen oder übergeordneten Namensräumen.';
+$lang['p_isadmin'] = 'Hinweis: Die gewählte Gruppe oder der Benutzer haben immer die vollen Rechte, weil sie als Superuser konfiguriert sind.';
+$lang['p_include'] = 'Höhere Rechte schließen kleinere mit ein. Hochlade- und Loeschrechte sind nur fuer Namensräume, nicht fuer Seiten.';
+$lang['current'] = 'Momentane Zugriffsregeln';
+$lang['where'] = 'Seite/Namensraum';
+$lang['who'] = 'Benutzer/Gruppe';
+$lang['perm'] = 'Rechte';
+$lang['acl_perm0'] = 'Keine';
+$lang['acl_perm1'] = 'Lesen';
+$lang['acl_perm2'] = 'Editieren';
+$lang['acl_perm4'] = 'Erstellen';
+$lang['acl_perm8'] = 'Hochladen';
+$lang['acl_perm16'] = 'Löschen';
+$lang['acl_new'] = 'Neuen Eintrag zufügen';
+$lang['acl_mod'] = 'Eintrag modifizieren';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt
new file mode 100644
index 000000000..783ae22e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt
@@ -0,0 +1,11 @@
+=== Kurzhilfe ===
+
+Auf dieser Seite können sie Zugriffsberechtigungen für Seiten und Namensräume festlegen und ändern.
+
+Die Liste links zeigt alle verfügbaren Namensräume und Seiten.
+
+Das Formular oben erlaubt Anzeige, Ändern und Hinzufügen von Zugriffsregeln für einen ausgewählten Nutzer oder eine Gruppe.
+
+In der Tabelle unten werden alle bestehenden Regeln aufgeführt und können dort modifiziert oder gelöscht werden.
+
+Für ein tiefergehendes Verständnis wie Zugriffsbeschränkungen in DokuWiki funktionieren, sollten Sie die [[doku>acl|offizielle Dokumentation]] lesen. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php
new file mode 100644
index 000000000..022ea6683
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * german language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Christof <gagi@fin.de>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Esther Brunner <esther@kaffeehaus.ch>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Dirk Einecke <dirk@dirkeinecke.de>
+ * @author Blitzi94@gmx.de
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['admin_acl'] = 'Zugangsverwaltung';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Benutzer';
+$lang['acl_perms'] = 'Berechtigungen für';
+$lang['page'] = 'Seite';
+$lang['namespace'] = 'Namensraum';
+$lang['btn_select'] = 'Auswählen';
+$lang['p_user_id'] = 'Nutzer <b class="acluser">%s</b> hat momentan folgende Berechtigungen für die Seite <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Nutzer <b class="acluser">%s</b> hat momentan folgende Berechtigungen im Namensraum <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Mitglieder der Gruppe <b class="aclgroup">%s</b> haben momentan folgende Berechtigungen für die Seite <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Mitglieder der Gruppe <b class="aclgroup">%s</b> haben momentan folgende Berechtigungen für den Namensraum <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Bitte geben Sie in obigem Formular eine <b>einen Nutzer oder eine Gruppe</b> an, um die Berechtigungen für die Seite <b class="aclpage">%s</b> zu sehen oder zu ändern.';
+$lang['p_choose_ns'] = 'Bitte geben Sie in obigem Formular eine <b>einen Nutzer oder eine Gruppe</b> an, um die Berechtigungen für den Namensraum <b class="aclns">%s</b> zu sehen oder zu ändern.';
+$lang['p_inherited'] = 'Hinweis: Diese Berechtigungen wurden nicht explizit gesetzt sondern von anderen Gruppen oder höher liegenden Namensräumen geerbt.';
+$lang['p_isadmin'] = 'Hinweis: Die ausgewählte Gruppe oder Nutzer haben immer alle Berechtigungen das sie als Superuser konfiguriert wurden.';
+$lang['p_include'] = 'Höhere Berechtigungen schließen niedrigere mit ein. Anlegen, Hochladen und Entfernen gilt nur für Namensräume, nicht für einzelne Seiten';
+$lang['current'] = 'Momentane Zugriffsregeln';
+$lang['where'] = 'Seite/Namensraum';
+$lang['who'] = 'Nutzer/Gruppe';
+$lang['perm'] = 'Berechtigungen';
+$lang['acl_perm0'] = 'Keine';
+$lang['acl_perm1'] = 'Lesen';
+$lang['acl_perm2'] = 'Bearbeiten';
+$lang['acl_perm4'] = 'Anlegen';
+$lang['acl_perm8'] = 'Hochladen';
+$lang['acl_perm16'] = 'Entfernen';
+$lang['acl_new'] = 'Eintrag hinzufügen';
+$lang['acl_mod'] = 'Eintrag bearbeiten';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt
new file mode 100644
index 000000000..ea2f816c0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt
@@ -0,0 +1,10 @@
+=== ΓÏήγοÏη Βοήθεια: ===
+
+Στη σελίδα αυτή μποÏείτε να Ï€Ïοσθέσετε και αφαιÏέσετε δικαιώματα Ï€Ïόσβασης για φακέλους και σελίδες στο wiki σας.
+
+Το αÏιστεÏÏŒ πλαίσιο δείχνει όλους τους διαθέσιμους φακέλους και αÏχεία.
+
+Η παÏαπάνω φόÏμα επιτÏέπει να δείτε και να Ï„Ïοποποιήσετε τα διακαιώματα μίας επιλεγμένης ομάδας χÏηστών ή ενός χÏήστη.
+
+Στον παÏακάτω πίνακα εμφανίζονται όλοι οι Ï„Ïέχοντες κανόνες παÏαχώÏησης δικαιωμάτων Ï€Ïόσβασης. ΜποÏείτε να τον χÏησιμοποιήσετε ώστε να σβήσετε ή να Ï„Ïοποποιήσετε γÏήγοÏα πολλαπλοÏÏ‚ κανόνες.
+Διαβάζοντας την [[doku>acl|επίσημη τεκμηÏίωση για τις Λίστες Δικαιωμάτων ΠÏόσβασης - ACL]] ίσως σας βοηθήσει να καταλάβετε πλήÏως το πως αυτές εφαÏμόζονται στην DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php
new file mode 100644
index 000000000..da8a72ab3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Greek language file
+ *
+ * Based on DokuWiki Version rc2007-05-24 english language file
+ * Original english language file contents included for reference
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Thanos Massias <tm@thriasio.gr>
+ * @author Αθανάσιος Îταής <homunculus@wana.gr>
+ * @author Konstantinos Koryllos <koryllos@gmail.com>
+ */
+$lang['admin_acl'] = 'ΔιαχείÏιση Δικαιωμάτων ΠÏόσβασης';
+$lang['acl_group'] = 'Ομάδα';
+$lang['acl_user'] = 'ΧÏήστης';
+$lang['acl_perms'] = 'Δικαιώματα για';
+$lang['page'] = 'Σελίδα';
+$lang['namespace'] = 'Φάκελος';
+$lang['btn_select'] = 'Επιλογή';
+$lang['p_user_id'] = 'Ο χÏήστης <b class="acluser">%s</b> έχει τα ακόλουθα δικαιώματα Ï€Ïόσβασης στην σελίδα <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Ο χÏήστης <b class="acluser">%s</b> έχει τα ακόλουθα δικαιώματα Ï€Ïόσβασης στον φάκελο <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Τα μέλη της ομάδας <b class="aclgroup">%s</b> έχουν τα ακόλουθα δικαιώματα Ï€Ïόσβασης στην σελίδα <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Τα μέλη της ομάδας <b class="aclgroup">%s</b> έχουν τα ακόλουθα δικαιώματα Ï€Ïόσβασης στον φάκελο <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'ΠαÏακαλώ <b>δώστε ένα όνομα χÏήστη ή ομάδας χÏηστών</b> στην παÏαπάνω μοÏφή για να δείτε τα αντίστοιχα δικαιώματα Ï€Ïόσβασης για την σελίδα <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'ΠαÏακαλώ <b>δώστε ένα όνομα χÏήστη ή ομάδας χÏηστών</b> στην παÏαπάνω μοÏφή για να δείτε τα αντίστοιχα δικαιώματα Ï€Ïόσβασης για τον φάκελο <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Σημείωση: Αυτά τα διακαιώματα χÏήσης δεν οÏίστηκαν άμεσα αλλά κληÏονομήθηκαν από άλλες ομάδες χÏηστών ή φακέλους σε υψηλότεÏο επίπεδο.';
+$lang['p_isadmin'] = 'Σημείωση: Η επιλεγμένη ομάδα χÏηστών ή χÏήστης έχει πάντα πλήÏη διακαιώματα Ï€Ïόσβασης διότι είναι δηλωμένος σαν υπεÏχÏήστης (superuser).';
+$lang['p_include'] = 'Τα υψηλότεÏα δικαιώματα Ï€Ïόσβασης πεÏιλαμβάνουν τα χαμηλότεÏα. Τα δικαιώματα για ΔημιουÏγία, ΦόÏτωση και ΔιαγÏαφή αφοÏοÏν μόνο φακέλους και όχι σελίδες. ';
+$lang['current'] = 'ΤÏέχοντες κανόνες Λίστας Δικαιωμάτων ΠÏόσβασης - ACL';
+$lang['where'] = 'Σελίδα/Φάκελος';
+$lang['who'] = 'ΧÏήστης/Ομάδα χÏηστών';
+$lang['perm'] = 'Δικαιώματα Ï€Ïόσβασης';
+$lang['acl_perm0'] = 'Κανένα';
+$lang['acl_perm1'] = 'Ανάγνωση';
+$lang['acl_perm2'] = 'ΤÏοποποίηση';
+$lang['acl_perm4'] = 'ΔημιουÏγία';
+$lang['acl_perm8'] = 'ΦόÏτωση';
+$lang['acl_perm16'] = 'ΔιαγÏαφή';
+$lang['acl_new'] = 'ΠÏοσθήκη νέας εγγÏαφής';
+$lang['acl_mod'] = 'ΤÏοποποίηση εγγÏαφής';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt
new file mode 100644
index 000000000..2b80cc4c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt
@@ -0,0 +1,12 @@
+=== Quick Help: ===
+
+On this page you can add and remove permissions for namespaces and pages in your wiki.
+
+The left pane displays all available namespaces and pages.
+
+The form above allows you to see and modify the permissions of a selected user or group.
+
+In the table below all currently set access control rules are shown. You can use it to quickly delete or change multiple rules.
+
+Reading the [[doku>acl|official documentation on ACL]] might help you to fully understand how access control works in DokuWiki.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php
new file mode 100644
index 000000000..38ff20c88
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * english language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ */
+
+$lang['admin_acl'] = 'Access Control List Management';
+$lang['acl_group'] = 'Group';
+$lang['acl_user'] = 'User';
+$lang['acl_perms'] = 'Permissions for';
+$lang['page'] = 'Page';
+$lang['namespace'] = 'Namespace';
+
+$lang['btn_select'] = 'Select';
+
+$lang['p_user_id'] = 'User <b class="acluser">%s</b> currently has the following permissions on page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'User <b class="acluser">%s</b> currently has the following permissions in namespace <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Members of group <b class="aclgroup">%s</b> currently have the following permissions on page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Members of group <b class="aclgroup">%s</b> currently have the following permissions in namespace <b class="aclns">%s</b>: <i>%s</i>.';
+
+$lang['p_choose_id'] = 'Please <b>enter a user or group</b> in the form above to view or edit the permissions set for the page <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Please <b>enter a user or group</b> in the form above to view or edit the permissions set for the namespace <b class="aclns">%s</b>.';
+
+
+$lang['p_inherited'] = 'Note: Those permissions were not set explicitly but were inherited from other groups or higher namespaces.';
+$lang['p_isadmin'] = 'Note: The selected group or user has always full permissions because it is configured as superuser.';
+$lang['p_include'] = 'Higher permissions include lower ones. Create, Upload and Delete permissions only apply to namespaces, not pages.';
+
+$lang['current'] = 'Current ACL Rules';
+$lang['where'] = 'Page/Namespace';
+$lang['who'] = 'User/Group';
+$lang['perm'] = 'Permissions';
+
+$lang['acl_perm0'] = 'None';
+$lang['acl_perm1'] = 'Read';
+$lang['acl_perm2'] = 'Edit';
+$lang['acl_perm4'] = 'Create';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Delete';
+$lang['acl_new'] = 'Add new Entry';
+$lang['acl_mod'] = 'Modify Entry';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt
new file mode 100644
index 000000000..0c03b8605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt
@@ -0,0 +1,11 @@
+=== Helpeto: ===
+
+En tiu ĉi paÄo vi povas aldoni kaj forigi rajtojn por nomspacoj kaj paÄoj en via vikio.
+
+La maldekstra panelo montras ĉiujn disponeblajn nomspacojn kaj paÄojn.
+
+La suba agordilo permesas al vi rigardi kaj modifi la rajtojn de elektita uzanto aÅ­ grupo.
+
+En la suba tabelo ĉiuj aktuale difinitaj alirkontrolaj reguloj estas montritaj. Vi povas uzi Äin por rapide forigi aÅ­ ÅanÄi multoblajn regulojn.
+
+Legado de la [[doku>acl|oficiala dokumentaro pri ACL]] povus helpi vin bone kompreni kiel alirkontrolo funkcias en DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php
new file mode 100644
index 000000000..97a07c3c9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Esperantolanguage file
+ *
+ * @author Felipe Castro <fefcas@uol.com.br>
+ * @author Felipo Kastro <fefcas@gmail.com>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Robert Bogenschneider <robog@gmx.de>
+ * @author Erik Pedersen <erik pedersen@shaw.ca>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['admin_acl'] = 'Administrado de Alirkontrola Listo (ACL)';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Uzanto';
+$lang['acl_perms'] = 'Rajtoj por';
+$lang['page'] = 'PaÄo';
+$lang['namespace'] = 'Nomspaco';
+$lang['btn_select'] = 'Elekti';
+$lang['p_user_id'] = 'Uzanto <b class="acluser">%s</b> aktuale havas la jenajn rajtojn en la paÄo <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Uzanto <b class="acluser">%s</b> aktuale havas la jenajn rajtojn en la nomspaco <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Anoj de la grupo <b class="aclgroup">%s</b> aktuale havas la jenajn rajtojn en la paÄo <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Anoj de la grupo <b class="aclgroup">%s</b> aktuale havas la jenajn rajtojn en la nomspaco <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Bonvole <b>enmeti uzanton aÅ­ grupon</b> en la suba agordilo por rigardi aÅ­ redakti la aron da rajtoj por la paÄo <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Bonvole <b>enmeti uzanton aÅ­ grupon</b> en la suba agordilo por rigardi aÅ­ redakti la aron da rajtoj por la nomspaco <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Rimarko: tiuj rajtoj ne estis rekte difinitaj, sed ili estis hereditaj el aliaj pli superaj grupoj aÅ­ nomspacoj.';
+$lang['p_isadmin'] = 'Rimarko: la elektita grupo aÅ­ uzanto ĉiam havas plenan rajtaron ĉar Äi estas difinita kiel superuzanto.';
+$lang['p_include'] = 'Plialtaj permesoj inkluzivas malpli altajn. La permesoj por Krei, AlÅuti kaj Forigi nur aplikeblas al nomspacoj, ne al paÄoj.';
+$lang['current'] = 'Aktuala regularo ACL';
+$lang['where'] = 'PaÄo/Nomspaco';
+$lang['who'] = 'Uzanto/Grupo';
+$lang['perm'] = 'Rajtoj';
+$lang['acl_perm0'] = 'Nenio';
+$lang['acl_perm1'] = 'Legi';
+$lang['acl_perm2'] = 'Redakti';
+$lang['acl_perm4'] = 'Krei';
+$lang['acl_perm8'] = 'AlÅuti';
+$lang['acl_perm16'] = 'Forigi';
+$lang['acl_new'] = 'Aldoni novan Enmetaĵon';
+$lang['acl_mod'] = 'Modifi Enmetaĵon';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt
new file mode 100644
index 000000000..c683477a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt
@@ -0,0 +1,11 @@
+=== Ayuda rápida: ===
+
+En esta página puede agregar o retirar permisos para los espacios de nombres y páginas en su wiki.
+
+El panel de la izquierda muiestra todos los espacios de nombres y páginas
+
+El formulario inferior permite ver y modificar los permisos del usuario o grupo elegido.
+
+En la tabla anterior se muestran todas las reglas de control de acceso vigentes Puede usarla para borrar o cambiar varias reglas rápidamente.
+
+Consultar el [[doku>acl|official documentation on ACL]] puede ayudarle a entender completamente como el control de acceso trabaja en DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php
new file mode 100644
index 000000000..3a23c71da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Miguel Pagano <miguel.pagano@gmail.com>
+ * @author Oscar M. Lage <r0sk10@gmail.com>
+ * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
+ * @author oliver@samera.com.py
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Manuel Meco <manuel.meco@gmail.com>
+ * @author VictorCastelan <victorcastelan@gmail.com>
+ * @author Jordan Mero hack.jord@gmail.com
+ * @author Felipe Martinez <metalmartinez@gmail.com>
+ * @author Javier Aranda <internet@javierav.com>
+ * @author Zerial <fernando@zerial.org>
+ * @author Marvin Ortega <maty1206@maryanlinux.com>
+ * @author Daniel Castro Alvarado <dancas2@gmail.com>
+ * @author Fernando J. Gómez <fjgomez@gmail.com>
+ */
+$lang['admin_acl'] = 'Administración de lista de control de acceso';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Usuario';
+$lang['acl_perms'] = 'Permiso para';
+$lang['page'] = 'Página';
+$lang['namespace'] = 'Espacio de nombres';
+$lang['btn_select'] = 'Seleccionar';
+$lang['p_user_id'] = 'El usuario <b class="acluser">%s</b> tiene los siguientes permisos sobre la página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'El usuario <b class="acluser">%s</b> tiene los siguientes permisos sobre el espacio de nombres <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Los miembros del grupo <b class="aclgroup">%s</b> tienen actualmente los siguientes permisos sobre la página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Los miembros del grupo <b class="aclgroup">%s</b> tienen actualmente los siguientes permisos sobre el espacio de nombres <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Por favor <b>proporcione un usuario o grupo</b>en el formulario arriba mostrado para ver o editar los permisos asignados sobre la página<b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Por favor <b>proporcione un usuario o grupo</b>en el formulario arriba mostrado para ver o editar los permisos asignados sobre el espacio de nombres <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: Esos permisos no fueron establecidos explícitamente sino que fueron heredados desde otros grupos o espacios de nombres superiores';
+$lang['p_isadmin'] = 'Nota: El grupo o usuario seleccionado simepre tiene permisos totales debido a que se encuentra configurado como superusuario.';
+$lang['p_include'] = 'Los permisos superiores incluyen a los inferiores. Los permisos Crear, Cargar y Eliminar sólo se aplican a los espacios de nombres, no a las páginas.';
+$lang['current'] = 'Reglas ACL vigentes';
+$lang['where'] = 'Página/Espacio de nombres';
+$lang['who'] = 'Usuario/Grupo';
+$lang['perm'] = 'Permisos';
+$lang['acl_perm0'] = 'ninguno';
+$lang['acl_perm1'] = 'Leer';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Crear';
+$lang['acl_perm8'] = 'Subir un fichero';
+$lang['acl_perm16'] = 'Borrar';
+$lang['acl_new'] = 'Agregar una nueva entrada';
+$lang['acl_mod'] = 'Modificar una entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php
new file mode 100644
index 000000000..e90d5eaa9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Estonian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oliver S6ro <seem.iges@mail.ee>
+ * @author Aari Juhanson <aari@vmg.vil.ee>
+ * @author Kaiko Kaur <kaiko@kultuur.edu.ee>
+ */
+
+$lang['admin_acl'] = 'Ligipääsukontrolli nimekirja haldamine';
+$lang['acl_group'] = 'Grupp';
+$lang['acl_user'] = 'Kasutaja';
+$lang['acl_perms'] = 'Lubatud';
+$lang['page'] = 'leht';
+$lang['namespace'] = 'alajaotus';
+
+$lang['acl_perm1'] = 'Lugemine';
+$lang['acl_perm2'] = 'Toimetamine';
+$lang['acl_perm4'] = 'Tekitamine';
+$lang['acl_perm8'] = 'Ãœles laadimine';
+$lang['acl_new'] = 'Uue kirje lisamine';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt
new file mode 100644
index 000000000..9e6070a10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt
@@ -0,0 +1,11 @@
+=== Laguntza Bizkorra: ===
+
+Orri honetan wiki-ko orri eta izen-espazioen baimenak gehitu eta kendu ahal ditzakezu.
+
+Ezkerreko panelak eskuragarri dauden orri eta izen-espazioak erakusten ditu.
+
+Goiko formularioak aukeratutako erabiltzaile edo taldearen baimenak ikusi eta aldatzea ahalbidetzen dizu.
+
+Beheko taulan une honetan ezarritako atzipen kontrol arauak daude. Hainbat arau bizkor ezabatu edo aldatzeko erabili dezakezu.
+
+[[doku>acl|Atzipen Kontrol Listen inguruko dokumentazio ofiziala]] irakurtzeak atzipen kontrolak DokuWiki-n nola funtzionatzen duen ulertzen lagundu zaitzaike.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php
new file mode 100644
index 000000000..99e70ad00
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Basque language file
+ *
+ * @author Inko Illarramendi <inko.i.a@gmail.com>
+ */
+$lang['admin_acl'] = 'Atzipen Kontrol Listaren Kudeaketa';
+$lang['acl_group'] = 'Taldea';
+$lang['acl_user'] = 'Erabiltzailea';
+$lang['acl_perms'] = 'Baimenak honetarako:';
+$lang['page'] = 'Orria';
+$lang['namespace'] = 'Izen-espazioa';
+$lang['btn_select'] = 'Aukeratu';
+$lang['p_user_id'] = '<b class="acluser">%s</b> erabiltzaileak une honetan honako baimenak ditu <b class="aclpage">%s</b> orrian: <i>%s</i>.';
+$lang['p_user_ns'] = '<b class="acluser">%s</b> erabiltzaileak une honetan honako baimenak ditu <b class="aclns">%s</b> izen-espazioan: <i>%s</i>.';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> taldeko kideek une honetan honako baimenak dituzte <b class="aclpage">%s</b> orrian: <i>%s</i>.';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> taldeko kideek une honetan honako baimenak dituzte <b class="aclns">%s</b> izen-espazioan: <i>%s</i>.';
+$lang['p_choose_id'] = 'Mesedez <b>sartu erabiltzaile edo taldea</b> goiko formularioan <b class="aclpage">%s</b> orrian ezarritako baimenak ikusi edo aldatzeko.';
+$lang['p_choose_ns'] = 'Mesedez <b>sartu erabiltzaile edo taldea</b> goiko formularioan <b class="aclns">%s</b> izen-espazioan ezarritako baimenak ikusi edo aldatzeko.';
+$lang['p_inherited'] = 'Oharra: Baimen horiek ez dira esplizituki jarriak, beste talde batzuetatik edo goragoko izen-espazioetatik heredatuak baizik.';
+$lang['p_isadmin'] = 'Oharra: Aukeratutako talde edo erabiltzaileak beti daika baimen osoa, supererabiltzaile gisa konfiguratuta baitago.';
+$lang['p_include'] = 'Baimen handiagoek baimen txikiagoak barneratzen dituzte. Sortu, Igo eta Ezabatu baimenak izen-espazioei soilik aplikatzen zaizkie, ez orriei.';
+$lang['current'] = 'Uneko AKL Arauak';
+$lang['where'] = 'Orria/Izen-espazioa';
+$lang['who'] = 'Erabiltzailea/Taldea';
+$lang['perm'] = 'Baimenak';
+$lang['acl_perm0'] = 'Inork';
+$lang['acl_perm1'] = 'Irakurri';
+$lang['acl_perm2'] = 'Editatu';
+$lang['acl_perm4'] = 'Sortu';
+$lang['acl_perm8'] = 'Igo';
+$lang['acl_perm16'] = 'Ezabatu';
+$lang['acl_new'] = 'Sarrera berri bat gehitu';
+$lang['acl_mod'] = 'Aldatu Sarrera';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt
new file mode 100644
index 000000000..1ec797faf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt
@@ -0,0 +1,11 @@
+=== راهنما: ===
+
+در این صÙحه شما می‌توانید دسترسی صÙحات Ùˆ Ùضای‌نام‌ها را مدیریت کنید.
+
+در قسمت سمت راست، لیست تمام صÙحات Ùˆ Ùضای‌نام‌ها را مشاهده می‌کنید.
+
+در Ùرم بالا می‌توانید دسترسی‌های کاربران Ùˆ گروه‌های مختل٠را مشاهده Ùˆ ویرایش کنید.
+
+در جدول زیر، تمامی قوانین مدیریتی را مشاهده می‌کنید. شما می‌توانید آن‌ها را حذ٠یا تعدادی از آن‌ها رو تغییر دهید.
+
+ممکن است خواندن [[doku>acl|مطلب رسمی در مورد مدیریت دسترسی‌ها]] شما را در درک بهتر این قسمت DokuWiki یاری کند. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php
new file mode 100644
index 000000000..ed576c271
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Persian language file
+ *
+ * @author behrad eslamifar <behrad_es@yahoo.com)
+ * @author Mohsen Firoozmandan <info@mambolearn.com>
+ * @author omidmr@gmail.com
+ * @author Omid Mottaghi <omidmr@gmail.com>
+ * @author Mohammad Reza Shoaei <shoaei@gmail.com>
+ */
+$lang['admin_acl'] = 'مدیریت کنترل دسترسی‌ها';
+$lang['acl_group'] = 'گروه';
+$lang['acl_user'] = 'کاربر';
+$lang['acl_perms'] = 'مجوز برای';
+$lang['page'] = 'صÙحه';
+$lang['namespace'] = 'Ùضای‌نام';
+$lang['btn_select'] = 'انتخاب';
+$lang['p_user_id'] = 'کاربر <b class="acluser">%s</b> دسترسی‌های زیر را برای صÙحه‌ی <b class="aclpage">%s</b> دارد: <i>%s</i>.';
+$lang['p_user_ns'] = 'کاربر <b class="acluser">%s</b> دسترسی‌های زیر را برای Ùضای‌نام <b class="aclpage">%s</b> دارد: <i>%s</i>.';
+$lang['p_group_id'] = 'اعضای گروه <b class="aclgroup">%s</b> دسترسی‌های زیر را برای صÙحه‌ی <b class="aclpage">%s</b> دارند: <i>%s</i>.';
+$lang['p_group_ns'] = 'اعضای گروه <b class="aclgroup">%s</b> دسترسی‌های زیر را برای Ùضای‌نام <b class="aclpage">%s</b> دارند: <i>%s</i>.';
+$lang['p_choose_id'] = 'خواهشمندیم <b>نام یک کاربر یا گروه</b> را در Ùرم بالا وارد کنید تا دسترسی‌های آن را برای صÙحه‌ی <b class="aclpage">%s</b> ببینید Ùˆ ویرایش کنید.';
+$lang['p_choose_ns'] = 'خواهشمندیم <b>نام یک کاربر یا گروه</b> را در Ùرم بالا وارد کنید تا دسترسی‌های آن را برای Ùضای‌نام <b class="aclpage">%s</b> ببینید Ùˆ ویرایش کنید.';
+$lang['p_inherited'] = 'توجه: دسترسی‌ها مستقیمن مقداردهی نشده است، بلکه از گروه‌های بالا یا Ùضای‌نام گرÙته شده است.';
+$lang['p_isadmin'] = 'توجه: کاربر یا گروه انتخاب شده همیشه با تمام دسترسی می‌باشد، زیرا به عنوان «superuser» انتخاب شده است.';
+$lang['p_include'] = 'دسترسی‌های بالا، دسترسی‌های پایین را شامل می‌شود. ایجاد، ارسال Ùˆ حذ٠Ùقط به Ùضای‌نام الحاق می‌شود.';
+$lang['current'] = 'قوانین دسترسی Ùعلی';
+$lang['where'] = 'صÙحه/Ùضای‌نام';
+$lang['who'] = 'کاربر/گروه';
+$lang['perm'] = 'دسترسی‌ها';
+$lang['acl_perm0'] = 'هیچ‌کدام';
+$lang['acl_perm1'] = 'خواندن';
+$lang['acl_perm2'] = 'ویزایش';
+$lang['acl_perm4'] = 'ایجاد';
+$lang['acl_perm8'] = 'ارسال';
+$lang['acl_perm16'] = 'حذÙ';
+$lang['acl_new'] = 'اضاÙÙ‡ کردن ورودی جدید';
+$lang['acl_mod'] = 'ویرایش ورودی';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt
new file mode 100644
index 000000000..d821f2d89
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt
@@ -0,0 +1,11 @@
+=== Pika-apu: ===
+
+Tällä sivulla voit lisätä tai poistaa oikeuksia wikisi nimiavaruuksiin tai sivuihin.
+
+Vasen osa näyttää kaikki tarjolla olevat nimiavaruudet ja sivut.
+
+Yllä olevan kaavakkeen avulla voit katsoa ja muokata oikeuksia valitulle käyttäjälle ja ryhmälle.
+
+Alla olevassa taulukossa on näkyvissä päällä olevat pääsyoikeudet. Voit käyttää sitä muokataksesi tai poistaaksesi useita oikeuksia.
+
+[[doku>acl|Virallisen käyttöoikeus (ACL) dokumentaation]] lukeminen voi helpottaa sinua täysin ymmärtämään mitän käyttöoikeudet toimivat DokuWikissä.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php
new file mode 100644
index 000000000..04074d8d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @author otto@valjakko.net
+ * @author Otto Vainio <otto@valjakko.net>
+ * @author Teemu Mattila <ghcsystems@gmail.com>
+ */
+$lang['admin_acl'] = 'Käyttöoikeudet (ACL)';
+$lang['acl_group'] = 'Ryhmä';
+$lang['acl_user'] = 'Käyttäjä';
+$lang['acl_perms'] = 'Oikeudet';
+$lang['page'] = 'Sivu';
+$lang['namespace'] = 'Nimiavaruus';
+$lang['btn_select'] = 'Valitse';
+$lang['p_user_id'] = 'Käyttäjällä <b class="acluser">%s</b> on tällä hetkellä seuraavat oikeudet sivulla <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Käyttäjällä <b class="acluser">%s</b> on tällä hetkellä seuraavat oikeudet nimiavaruudessa <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Ryhmän <b class="aclgroup">%s</b> jäsenillä on tällä hetkellä seuraavat oikeudet sivulla <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Ryhmän <b class="aclgroup">%s</b> jäsenillä on tällä hetkellä seuraavat oikeudet nimiavaruudessa <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Ole hyvä ja <b>syötä ryhmän nimi</b> yllä olevaan kaavakkeeseen katsoaksesi tai muokataksesi oikeuksia sivulle <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Ole hyvä ja <b>syötä ryhmän nimi</b> yllä olevaan kaavakkeeseen katsoaksesi tai muokataksesi oikeuksia nimiavaruuteen <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Huomaa: Oikeuksia ei ole erikseen asetettu, vaan ne on peritty toiselta ryhmältä tai ylemmältä nimiavaruudelta.';
+$lang['p_isadmin'] = 'Huomaa: Valitulla ryhmällä tai käyttäjällä on aina täydet oikeudet, koska se on määritelty pääkäyttäjäksi (Superuser)';
+$lang['p_include'] = 'Korkeammat oikeudet sisältävät matalammat. Luonti-, Lähetys- ja Poisto-oikeudet vaikuttavat vain nimiavaruuksiin, ei sivuihin.';
+$lang['current'] = 'Tämänhetkiset käyttöoikeudet (ACL)';
+$lang['where'] = 'Sivu/Nimiavaruus';
+$lang['who'] = 'Käyttäjä/Ryhmä';
+$lang['perm'] = 'Oikeudet';
+$lang['acl_perm0'] = 'Ei mitään';
+$lang['acl_perm1'] = 'Luku';
+$lang['acl_perm2'] = 'Muokkaus';
+$lang['acl_perm4'] = 'Luonti';
+$lang['acl_perm8'] = 'Lähetys';
+$lang['acl_perm16'] = 'Poisto';
+$lang['acl_new'] = 'Lisää uusi';
+$lang['acl_mod'] = 'Muokkaa';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt
new file mode 100644
index 000000000..69661bb9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt
@@ -0,0 +1,9 @@
+=== Aide rapide : ===
+
+Cette page vous permet d'ajouter ou de supprimer des permissions pour les catégories et les pages de votre wiki. Le panneau de gauche liste toutes les catégories et les pages disponibles.
+
+Le formulaire au dessus permet d'afficher et de modifier les permissions d'un utilisateur ou d'un groupe sélectionné.
+
+Dans la table ci-dessous toutes les listes de contrôle d'accès actuelles sont affichées. Vous pouvez l'utiliser pour supprimer ou modifier rapidement plusieurs ACLs.
+
+La lecture de [[doku>acl|la documentation officielle des ACLs]] pourra vous permettre de comprendre complètement le fonctionnement du contrôle d'accès dans DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php
new file mode 100644
index 000000000..efdc5f074
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * french language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Sébastien Bauer <sebastien.bauer@advalvas.be>
+ * @author Antoine Fixary <antoine.fixary@freesbee.fr>
+ * @author cumulus <pta-n56@myamail.com>
+ * @author Gwenn Gueguen <contact@demisel.net>
+ * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author Fabien Chabreuil <fabien@integralpersonality.com>
+ * @author Stéphane Chamberland <stephane.chamberland@ec.gc.ca>
+ * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
+ * @author gb@isis.u-strasbg.fr
+ * @author stephane.gully@gmail.com
+ * @author Guillaume Turri <guillaume.turri@gmail.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author olivier duperray <duperray.olivier@laposte.net>
+ * @author Vincent Feltz <psycho@feltzv.fr>
+ */
+$lang['admin_acl'] = 'Gestion de la liste des contrôles d\'accès (ACL)';
+$lang['acl_group'] = 'Groupe';
+$lang['acl_user'] = 'Utilisateur';
+$lang['acl_perms'] = 'Permission pour';
+$lang['page'] = 'Page';
+$lang['namespace'] = 'Catégorie';
+$lang['btn_select'] = 'Sélectionner';
+$lang['p_user_id'] = 'Permissions actuelles de l\'utilisateur <b class="acluser">%s</b> sur la page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Permissions actuelles de l\'utilisateur <b class="acluser">%s</b> sur la catégorie <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Permissions actuelles des membres du groupe <b class="aclgroup">%s</b> sur la page <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Permissions actuelles des membres du groupe <b class="aclgroup">%s</b> sur la catégorie <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Saisissez un nom <b>d\'utilisateur ou de groupe</b> dans le formulaire ci-dessus pour afficher ou éditer les permissions relatives à la page <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Saisissez un nom <b>d\'utilisateur ou de groupe</b> dans le formulaire ci-dessous pour afficher ou éditer les permissions relatives à la catégorie <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Note : Ces permissions n\'ont pas été explicitement fixées mais sont héritées d\'autres groupes ou catégories supérieures.';
+$lang['p_isadmin'] = 'Note : Le groupe ou l\'utilisateur sélectionné dispose de toutes les permissions car il est paramétré en tant que superutilisateur.';
+$lang['p_include'] = 'Les permissions les plus élevées induisent les plus faibles. Création, Télécharger, et Effacer, ne s\'appliquent qu\'aux catégories ; pas aux pages.';
+$lang['current'] = 'ACL actuelles';
+$lang['where'] = 'Page/Catégorie';
+$lang['who'] = 'Utilisateur/Groupe';
+$lang['perm'] = 'Permissions';
+$lang['acl_perm0'] = 'Aucune';
+$lang['acl_perm1'] = 'Lecture';
+$lang['acl_perm2'] = 'Écriture';
+$lang['acl_perm4'] = 'Création';
+$lang['acl_perm8'] = 'Télécharger';
+$lang['acl_perm16'] = 'Effacer';
+$lang['acl_new'] = 'Ajouter une nouvelle entrée';
+$lang['acl_mod'] = 'Modifier l\'entrée';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt
new file mode 100644
index 000000000..c427b182f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt
@@ -0,0 +1,11 @@
+=== Axuda rápida: ===
+
+Nesta páxina pode engadir e eliminar os permisos para os nomes de espazo e as páxinas do seu wiki.
+
+O panel da esquerda mostra todos os nomes de espazo e páxinas dispoñíbeis.
+
+O formulario de arriba permítelle ver e modificar os permisos da persoa usuaria ou grupo seleccionada.
+
+Na táboa de abaixo móstranse todas as regras de control de accesos estabelecidas. Pode empregala para cambiar ou eliminar varias regras dun xeito rápido.
+
+A lectura da [[doku>acl|documentación oficial da ACL]] pode servirlle de axuda para comprender como funciona o control de accesos no Dokuwiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php
new file mode 100644
index 000000000..184cf7e1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Galicianlanguage file
+ *
+ * @author CiberIrmandade da Fala <infoxeral@ciberirmandade.org>
+ * @author Tagen Ata <localizacion@tagenata.com>
+ * @author Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+$lang['admin_acl'] = 'Xestión da Lista de control de acceso (ACL)';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Usuaria/o';
+$lang['acl_perms'] = 'Permisos para';
+$lang['page'] = 'Páxina';
+$lang['namespace'] = 'Nome de espazo';
+$lang['btn_select'] = 'Selecciona';
+$lang['p_user_id'] = 'A persoa usuaria <b class="acluser">%s</b> dispón actualmente dos seguintes permisos na páxina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'A persoa usuaria <b class="acluser">%s</b> dispón actualmente dos seguintes permisos no nome de espazo <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'As e os integrantes do grupo <b class="aclgroup">%s</b> dispoñen actualmente dos seguintes permisos na páxina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'As e os integrantes do grupo <b class="aclgroup">%s</b> dispoñen actualmente dos seguintes permisos no nome de espazo <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Insira un nome de usuaria/o ou grupo</b> no formulario de arriba para ver ou editar os permisos estabelecidos para a páxina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Insira un nome de usuaria/o ou grupo</b> no formulario de arriba para ver ou editar os permisos estabelecidos no nome de espazo <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: Estes permisos non foron estabelecidos explicitamente senón que foron herdados doutros grupos ou nomes de espazo maiores.';
+$lang['p_isadmin'] = 'Nota: O grupo ou a persoa usuaria seleccionado terá sempre permisos completos por estar configurado como superusuaria/o.';
+$lang['p_include'] = 'Os permisos máis grandes inclúen os menores. Os permisos de Creación, Subida e Eliminación só se aplican aos nomes de espazo, non ás páxinas.';
+$lang['current'] = 'Regras ACL actuais';
+$lang['where'] = 'Páxina/Nome de espazo';
+$lang['who'] = 'Usuaria/o/Grupo';
+$lang['perm'] = 'Permisos';
+$lang['acl_perm0'] = 'Ningún';
+$lang['acl_perm1'] = 'Ler';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Crear';
+$lang['acl_perm8'] = 'Subir ficheiros';
+$lang['acl_perm16'] = 'Eliminar';
+$lang['acl_new'] = 'Engadir una entrada';
+$lang['acl_mod'] = 'Modificar unha entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt
new file mode 100644
index 000000000..33f2933b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt
@@ -0,0 +1,11 @@
+=== עזרה חפוזה: ===
+
+בדף ×–×” ניתן להוסיף ולהסיר הרש×ות למרחבי שמות ×•×œ×“×¤×™× ×‘×•×™×§×™ שלך.
+
+הצד השמ×לי מציג ×ת כל מרבי השמות ×•×”×“×¤×™× ×”×–×ž×™× ×™×.
+
+הטופס מעלה מ×פשר לך לר×ות ולשנות ×ת ההרש×ות של משתמש ×ו קבוצה נבחרי×.
+
+בטבלה מטה ×ž×•×¦×’×™× ×›×œ כללי בקרת הגישה הנוכחיי×. ניתן להשתמש בה כדי למחוק ×ו לשנות מספר ×›×œ×œ×™× ×‘×ž×”×™×¨×•×ª.
+
+קרי×ת [[doku>acl|התיעוד הרשמי ל-ACL ACL]] יכולה לעזור לך להבין ב×ופן ×ž×œ× ×›×™×¦×“ בקרת הגישה עובדת בדוקוויקי.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php
new file mode 100644
index 000000000..7d73c63dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * hebrew language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author DoK <kamberd@yahoo.com>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ * @author Moshe Kaplan <mokplan@gmail.com>
+ */
+$lang['admin_acl'] = 'ניהול רשימת בקרת גישות';
+$lang['acl_group'] = 'קבוצה';
+$lang['acl_user'] = 'משתמש';
+$lang['acl_perms'] = 'הרש×ות עבור';
+$lang['page'] = 'דף';
+$lang['namespace'] = 'מרחב שמות';
+$lang['p_user_id'] = 'למשתמש <b class="acluser">%s</b> יש כרגע ×ת ההרש×ות הב×ות בדף <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'למשתמש <b class="acluser">%s</b> יש כרגע ×ת ההרש×ות הב×ות במרחב ×”×©× <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'לחברי קבוצת <b class="aclgroup">%s</b> יש כרגע ×ת ההרש×ות הב×ות בדף <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'לחברי קבוצת <b class="aclgroup">%s</b> יש כרגע ×ת ההרש×ות הב×ות במרחב ×”×©× <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '× × <b>להזין משתמש ×ו קבוצה</b> בטופס מעלה כדי לצפות ×ו לערוך ×ת ההרש×ות המוגדרות עבור הדף <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '× × <b>להזין משתמש ×ו קבוצה</b> בטופס מעלה כדי לצפות ×ו לערוך ×ת ההרש×ות המוגדרות עבור מרחב ×”×©× <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'לתשומת לבך: הרש×ות ×לו ×œ× ×”×•×’×“×¨×• ב×ופן מפורש ××œ× × ×•×¨×©×• מקבוצות ×חרות ×ו ממרחב שמות גבוה יותר.';
+$lang['p_isadmin'] = 'לתשומת לבך: לקבוצה ×ו המשתמש שנבחרו יש תמיד הרש×ות מל×ות בגלל ×”×’×“×¨×ª× ×›×ž×©×ª×ž×©-על.';
+$lang['current'] = 'חוקי ×”-ACL הנוכחיי×';
+$lang['where'] = 'דף/מרחב ש×';
+$lang['who'] = 'משתמש/קבוצה';
+$lang['perm'] = 'הרש×ות';
+$lang['acl_perm0'] = 'לל×';
+$lang['acl_perm1'] = 'קרי××”';
+$lang['acl_perm2'] = 'עריכה';
+$lang['acl_perm4'] = 'יצירה';
+$lang['acl_perm8'] = 'העל××”';
+$lang['acl_perm16'] = 'מחיקה';
+$lang['acl_new'] = 'הוספת רשומה חדשה';
+$lang['acl_mod'] = 'שינויי מוב××”';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php
new file mode 100644
index 000000000..d8630a281
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Hindi language file
+ *
+ * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php
new file mode 100644
index 000000000..d2094b77b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Croatian language file
+ *
+ * @author Branko Rihtman <theney@gmail.com>
+ * @author Dražen Odobašić <dodobasic@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt
new file mode 100644
index 000000000..57f16a39c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt
@@ -0,0 +1,12 @@
+=== Hozzáférési lista (ACL) kezelő ===
+
+Ezen az oldalon jogokat oszthat és vehet el a wiki oldalakhoz és névterekhez.
+
+A bal oldalon látható az összes névtér és oldal.
+
+A felső form segít a kiválasztott felhasználó vagy csoport jogosultságainak megtekintésében vagy változtatásában.
+
+Az alsó táblázat mutatja az összes jelenleg érvényes hozzáférési szabályt. Ennek segítségével gyorsan törölhetők vagy megváltoztathatók a szabályok.
+
+A [[doku>acl|hivatalos ACL dokumentáció]] segíthet a DokuWiki hozzáférés-kezelés működésének megértésében.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php
new file mode 100644
index 000000000..4fb1720ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Hungarian language file
+ *
+ * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
+ * @author Siaynoq Mage <siaynoqmage@gmail.com>
+ * @author schilling.janos@gmail.com
+ */
+$lang['admin_acl'] = 'Hozzáférési lista (ACL) kezelő';
+$lang['acl_group'] = 'Csoport:';
+$lang['acl_user'] = 'Felhasználó:';
+$lang['acl_perms'] = 'Jogosultság ehhez:';
+$lang['page'] = 'oldal';
+$lang['namespace'] = 'névtér';
+$lang['btn_select'] = 'Kiválaszt';
+$lang['p_user_id'] = 'A(z) <b class="acluser">%s</b> felhasználónak jelenleg a következő jogosultsága van ezen az oldalon: <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'A(z) <b class="acluser">%s</b> felhasználónak jelenleg a következő jogosultsága van ebben a névtérben: <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'A(z) <b class="aclgroup">%s</b> csoport tagjainak jelenleg a következő jogosultsága van ezen az oldalon: <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'A(z) <b class="aclgroup">%s</b> csoport tagjainak jelenleg a következő jogosultsága van ebben a névtérben: <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'A felső formon <b>adjon meg egy felhasználót vagy csoportot</b>, akinek a(z) <b class="aclpage">%s</b> oldalhoz beállított jogosultságait megtekinteni vagy változtatni szeretné.';
+$lang['p_choose_ns'] = 'A felső formon <b>adjon meg egy felhasználót vagy csoportot</b>, akinek a(z) <b class="aclns">%s</b> névtérhez beállított jogosultságait megtekinteni vagy változtatni szeretné.';
+$lang['p_inherited'] = 'Megjegyzés: ezek a jogok nem itt lettek explicit beállítva, hanem öröklődtek egyéb csoportokból vagy felsőbb névterekből.';
+$lang['p_isadmin'] = 'Megjegyzés: a kiválasztott csoportnak vagy felhasználónak mindig teljes jogosultsága lesz, mert Wiki-gazdának van beállítva.';
+$lang['p_include'] = 'A magasabb jogok tartalmazzák az alacsonyabbakat. A Létrehozás, Feltöltés és Törlés jogosultságok csak névterekre alkalmazhatók, az egyes oldalakra nem.';
+$lang['current'] = 'Jelenlegi hozzáférési szabályok';
+$lang['where'] = 'Oldal/névtér';
+$lang['who'] = 'Felhasználó/Csoport';
+$lang['perm'] = 'Jogosultságok';
+$lang['acl_perm0'] = 'Semmi';
+$lang['acl_perm1'] = 'Olvasás';
+$lang['acl_perm2'] = 'Szerkesztés';
+$lang['acl_perm4'] = 'Létrehozás';
+$lang['acl_perm8'] = 'Feltöltés';
+$lang['acl_perm16'] = 'Törlés';
+$lang['acl_new'] = 'Új bejegyzés hozzáadása';
+$lang['acl_mod'] = 'Bejegyzés módosítása';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php
new file mode 100644
index 000000000..d367340b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * idni language file
+ *
+ * @author Harefa <fidelis@harefa.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php
new file mode 100644
index 000000000..650637635
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Indonesian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author mubaidillah <mubaidillah@gmail.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
+$lang['admin_acl'] = 'Manajemen Daftar Pengendali Akses';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'User';
+$lang['acl_perms'] = 'Ijin untuk';
+$lang['page'] = 'Halaman';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Pilih';
+$lang['acl_perm1'] = 'Baca';
+$lang['acl_perm2'] = 'Ubah';
+$lang['acl_perm4'] = 'Buat';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Hapus';
+$lang['acl_new'] = 'Tambah Entry baru';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php
new file mode 100644
index 000000000..b45faa80a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Icelandic language file
+ *
+ * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
+ * @author Ólafur Gunnlaugsson <oli@audiotools.com>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['acl_group'] = 'Hópur';
+$lang['acl_user'] = 'Notandi';
+$lang['page'] = 'Síða';
+$lang['namespace'] = 'Nafnrými';
+$lang['btn_select'] = 'Veldu';
+$lang['where'] = 'Síða/Nafnrými';
+$lang['acl_perm16'] = 'Eyða';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt
new file mode 100644
index 000000000..5e4b08dd6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt
@@ -0,0 +1,11 @@
+=== Breve Aiuto: ===
+
+In questa pagina puoi aggiungere e rimuovere permessi per categorie e pagine del tuo wiki.
+
+Il pannello di sinistra mostra tutte le categorie e le pagine disponibili.
+
+Il campo sopra ti permette di vedere e modificare i permessi di un utente o gruppo selezionato.
+
+Nella tabella sotto, sono riportate tutte le regole di controllo degli accessi attualmente impostate. Puoi utilizzarla per cancellare o cambiare al volo varie regole.
+
+Leggere la [[doku>acl|official documentation on ACL]] può aiutarti a capire pienamente come funziona il controllo degli accessi in DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php
new file mode 100644
index 000000000..344987e8b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Giorgio Vecchiocattivi <giorgio@vecchio.it>
+ * @author Roberto Bolli <http://www.rbnet.it/>
+ * @author Pietro Battiston toobaz@email.it
+ * @author Diego Pierotto ita.translations@tiscali.it
+ * @author ita.translations@tiscali.it
+ * @author Lorenzo Breda <lbreda@gmail.com>
+ * @author snarchio@alice.it
+ * @author robocap <robocap1@gmail.com>
+ */
+$lang['admin_acl'] = 'Gestione Lista Controllo Accessi (ACL)';
+$lang['acl_group'] = 'Gruppo';
+$lang['acl_user'] = 'Utente';
+$lang['acl_perms'] = 'Permessi per';
+$lang['page'] = 'Pagina';
+$lang['namespace'] = 'Categoria';
+$lang['btn_select'] = 'Seleziona';
+$lang['p_user_id'] = 'L\'utente <b class="acluser">%s</b> attualmente ha i seguenti permessi sulla pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'L\'utente <b class="acluser">%s</b> attualmente ha i seguenti permessi per la categoria <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'I membri del gruppo<b class="aclgroup">%s</b> attualmente hanno i seguenti permessi sulla pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'I membri del gruppo<b class="aclgroup">%s</b> attualmente hanno i seguenti permessi per la categoria <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Per favore <b>inserisci un utente o gruppo</b> nel campo sopra per modificare i permessi impostati per la pagina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Per favore <b>inserisci un utente o un gruppo</b> nel campo sopra per modificare i permessi impostati per la categoria <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Nota: Questi permessi non sono stati esplicitamente impostati, ma sono stati ereditati da altri gruppi o da categorie superiori.';
+$lang['p_isadmin'] = 'Nota: Il gruppo o utente selezionato ha sempre tutti i permessi perché è configurato come amministratore.';
+$lang['p_include'] = 'I permessi più elevati includono i permessi inferiori. I permessi di Creazione, Upload e Cancellazione si applicano soltanto alle categorie e non alle pagine.';
+$lang['current'] = 'Regole ACL attuali';
+$lang['where'] = 'Pagina/Categoria';
+$lang['who'] = 'Utente/Gruppo';
+$lang['perm'] = 'Permessi';
+$lang['acl_perm0'] = 'Nessuno';
+$lang['acl_perm1'] = 'Lettura';
+$lang['acl_perm2'] = 'Modifica';
+$lang['acl_perm4'] = 'Creazione';
+$lang['acl_perm8'] = 'Upload';
+$lang['acl_perm16'] = 'Cancellazione';
+$lang['acl_new'] = 'Aggiungi nuovo record';
+$lang['acl_mod'] = 'Modifica record';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt
new file mode 100644
index 000000000..f7867f8e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt
@@ -0,0 +1,11 @@
+=== クイックヘルプ: ===
+
+ã“ã®ãƒšãƒ¼ã‚¸ã§ã¯ã€Wiki内ã®åå‰ç©ºé–“ã¨ãƒšãƒ¼ã‚¸ã«å¯¾ã™ã‚‹æ¨©é™ã‚’追加・削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+å·¦å´ã®ãƒœãƒƒã‚¯ã‚¹ã«ã¯å­˜åœ¨ã™ã‚‹åå‰ç©ºé–“ã¨ãƒšãƒ¼ã‚¸ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚
+
+上記ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使ã£ã¦ã€é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚‚ã—ãã¯ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¨©é™ã‚’閲覧・変更ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
+
+以下ã®ãƒ†ãƒ¼ãƒ—ルã«ã¯ã€ç¾åœ¨è¨­å®šã•ã‚Œã¦ã„るアクセスコントロールã®ãƒ«ãƒ¼ãƒ«ãŒè¡¨ç¤ºã•ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ãƒ†ãƒ¼ãƒ–ルを使ã£ã¦ã€è¤‡æ•°ã®ãƒ«ãƒ¼ãƒ«ã‚’ç´ æ—©ã変更・削除ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚
+
+DokuWikiã®ã‚¢ã‚¯ã‚»ã‚¹ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ«ã«ã¤ã„ã¦ã¯ã€[[doku>acl|official documentation on ACL]] ã‚’ãŠèª­ã¿ä¸‹ã•ã„。 \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php
new file mode 100644
index 000000000..831fd2d5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * japanese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Davilin(Yuji Takenaka) <webmaster@davilin.com>
+ * @author Yuji Takenaka <webmaster@davilin.com>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
+ * @author Daniel Dupriest <kououken@gmail.com>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+$lang['admin_acl'] = 'アクセスコントロール管ç†';
+$lang['acl_group'] = 'グループ';
+$lang['acl_user'] = 'ユーザー';
+$lang['acl_perms'] = '権é™ã‚’追加';
+$lang['page'] = '文書';
+$lang['namespace'] = 'åå‰ç©ºé–“';
+$lang['btn_select'] = 'é¸æŠž';
+$lang['p_user_id'] = 'ユーザー <b class="acluser">%s</b> ã¯ã€ãƒšãƒ¼ã‚¸ <b class="aclpage">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_user_ns'] = 'ユーザー <b class="acluser">%s</b> ã¯ã€åå‰ç©ºé–“ <b class="aclns">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_group_id'] = 'グループ <b class="aclgroup">%s</b> ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€ãƒšãƒ¼ã‚¸ <b class="aclpage">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_group_ns'] = 'グループ <b class="aclgroup">%s</b> ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€åå‰ç©ºé–“ <b class="aclns">%s</b> ã«å¯¾ã—ã¦æ¬¡ã®æ¨©é™ã‚’æŒã£ã¦ã„ã¾ã™: <i>%s</i>';
+$lang['p_choose_id'] = 'ページ <b class="aclpage">%s</b> ã«ã‚»ãƒƒãƒˆã•ã‚ŒãŸæ¨©é™ã‚’閲覧・編集ã™ã‚‹ãŸã‚ã«ã¯ã€ä¸Šè¨˜ã®ãƒ•ã‚©ãƒ¼ãƒ ã«<b>ユーザーåã‚‚ã—ãã¯ã‚°ãƒ«ãƒ¼ãƒ—åを入力ã—ã¦ä¸‹ã•ã„</b>。';
+$lang['p_choose_ns'] = 'åå‰ç©ºé–“ <b class="aclns">%s</b> ã«ã‚»ãƒƒãƒˆã•ã‚ŒãŸæ¨©é™ã‚’閲覧・編集ã™ã‚‹ãŸã‚ã«ã¯ã€ä¸Šè¨˜ã®ãƒ•ã‚©ãƒ¼ãƒ ã«<b>ユーザーåã‚‚ã—ãã¯ã‚°ãƒ«ãƒ¼ãƒ—åを入力ã—ã¦ä¸‹ã•ã„</b>。';
+$lang['p_inherited'] = '注æ„:ã“れらã®æ¨©é™ã¯æ˜Žç¤ºã•ã‚Œã¦ã„ã¾ã›ã‚“ãŒã€ä»–ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚‚ã—ãã¯ä¸Šä½ã®åå‰ç©ºé–“ã®æ¨©é™ã‚’継承ã—ã¾ã™ã€‚';
+$lang['p_isadmin'] = '注æ„:é¸æŠžã—ãŸã‚°ãƒ«ãƒ¼ãƒ—ã‚‚ã—ãã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã‚¹ãƒ¼ãƒ‘ーユーザーã§ã‚ã‚‹ãŸã‚ã€å…¨ã¦ã®æ¨©é™ãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['p_include'] = '高次ã®æ¨©é™ã¯ã€ãれより低次ã®æ¨©é™ã‚’å«ã¿ã¾ã™ã€‚作æˆãƒ»ã‚¢ãƒƒãƒ—ロード・削除ã®æ¨©é™ã¯ã€ãƒšãƒ¼ã‚¸ã§ã¯ãªãåå‰ç©ºé–“ã®ã¿ã«é©ç”¨ã•ã‚Œã¾ã™ã€‚';
+$lang['current'] = 'ç¾åœ¨ã®ACLルール';
+$lang['where'] = 'ページ/åå‰ç©ºé–“';
+$lang['who'] = 'ユーザー/グループ';
+$lang['perm'] = '権é™';
+$lang['acl_perm0'] = 'ç„¡ã—';
+$lang['acl_perm1'] = '読å–';
+$lang['acl_perm2'] = '編集';
+$lang['acl_perm4'] = '作æˆ';
+$lang['acl_perm8'] = 'アップロード';
+$lang['acl_perm16'] = '削除';
+$lang['acl_new'] = 'æ–°è¦ã‚¨ãƒ³ãƒˆãƒª';
+$lang['acl_mod'] = 'エントリã®ç·¨é›†';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt
new file mode 100644
index 000000000..516198ee5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt
@@ -0,0 +1,11 @@
+=== ë„움ë§: ===
+
+현재 페ì´ì§€ì—ì„œ 위키 네임스페ì´ìŠ¤ì™€ 페ì´ì§€ì— 대한 ì ‘ê·¼ ê¶Œí•œì„ ì¶”ê°€í•˜ê±°ë‚˜ 삭제할 수 있습니다.
+
+왼쪽 ì˜ì—­ì„ ì„ íƒê°€ëŠ¥í•œ 네임스페ì´ìŠ¤ë“¤ê³¼ 페ì´ì§€ 목ë¡ì„ ë³´ì—¬ì¤ë‹ˆë‹¤.
+
+위쪽 ìž…ë ¥ ì–‘ì‹ì—ì„œ ì„ íƒëœ 사용ìžì™€ ê·¸ë£¹ì˜ ì ‘ê·¼ ê¶Œí•œì„ ë³´ê±°ë‚˜ 변경할 수 있습니다.
+
+아래 í…Œì´ë¸”ì—ì„œ 현재 ì„¤ì •ëœ ëª¨ë“  ì ‘ê·¼ 제어 ê·œì¹™ë“¤ì„ ë³¼ 수 있으며, 즉시 여러 ê·œì¹™ë“¤ì„ ì‚­ì œí•˜ê±°ë‚˜ 변경할 수 있습니다.
+
+DokuWikiì—ì„œ ì ‘ê·¼ 제어가 어떻게 ë™ìž‘ë˜ëŠ”지 알려면 [[doku>acl|official documentation on ACL]] ì½ê¸° ë°”ëžë‹ˆë‹¤. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php
new file mode 100644
index 000000000..43a5ceeeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * korean language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author jk Lee
+ * @author dongnak@gmail.com
+ * @author Song Younghwan <purluno@gmail.com>
+ * @author SONG Younghwan <purluno@gmail.com>
+ */
+$lang['admin_acl'] = 'ì ‘ê·¼ 제어 ëª©ë¡ ê´€ë¦¬';
+$lang['acl_group'] = '그룹';
+$lang['acl_user'] = '사용ìž';
+$lang['acl_perms'] = '권한';
+$lang['page'] = '페ì´ì§€';
+$lang['namespace'] = '네임스페ì´ìŠ¤';
+$lang['btn_select'] = 'ì„ íƒ';
+$lang['p_user_id'] = 'ì‚¬ìš©ìž <b class="acluser">%s</b>는 현재 <b class="aclpage">%s</b>: <i>%s</i> 페ì´ì§€ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_user_ns'] = 'ì‚¬ìš©ìž <b class="acluser">%s</b>는 현재 <b class="aclns">%s</b>: <i>%s</i> 네임스페ì´ìŠ¤ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_group_id'] = '그룹 <b class="aclgroup">%s</b> 사용ìžëŠ” 현재 <b class="aclpage">%s</b>: <i>%s</i> 페ì´ì§€ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_group_ns'] = '그룹 <b class="aclgroup">%s</b> 사용ìžëŠ” 현재 <b class="aclns">%s</b>: <i>%s</i> 네임스페ì´ìŠ¤ ì ‘ê·¼ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.';
+$lang['p_choose_id'] = '<b class="aclpage">%s</b> 페ì´ì§€ ì ‘ê·¼ ê¶Œí•œì„ ë³´ê±°ë‚˜ 변경하려면 <b>사용ìž</b>나 <b>그룹</b>ì„ ìœ„ ì–‘ì‹ì— 입력하기 ë°”ëžë‹ˆë‹¤.';
+$lang['p_choose_ns'] = '<b class="aclns">%s</b> 네임스페ì´ìŠ¤ ì ‘ê·¼ ê¶Œí•œì„ ë³´ê±°ë‚˜ 변경하려면 <b>사용ìž</b>나 <b>그룹</b>ì„ ìœ„ ì–‘ì‹ì— 입력하기 ë°”ëžë‹ˆë‹¤.';
+$lang['p_inherited'] = '주ì˜: ê¶Œí•œì´ ëª…ì‹œì ìœ¼ë¡œ 설정ë˜ì§€ 않았으므로 다른 그룹들ì´ë‚˜ ìƒìœ„ 네임스페ì´ìŠ¤ë¡œ 부터 가져왔습니다.';
+$lang['p_isadmin'] = '주ì˜: 슈í¼ìœ ì €ë¡œ 설정ë˜ì–´ 있으므로 ì„ íƒëœ 그룹ì´ë‚˜ 사용ìžëŠ” 언제나 모든 ì ‘ê·¼ ê¶Œí•œì„ ê°€ì§‘ë‹ˆë‹¤.';
+$lang['p_include'] = 'ë” ë†’ì€ ì ‘ê·¼ê¶Œí•œì€ í•˜ìœ„ë¥¼ í¬í•¨í•©ë‹ˆë‹¤. 페ì´ì§€ê°€ ì•„ë‹Œ 네임스페ì´ìŠ¤ì—는 ìƒì„±, 업로드, ì‚­ì œ 권한만 ì ìš©ë©ë‹ˆë‹¤.';
+$lang['current'] = '현 ACL 규칙';
+$lang['where'] = '페ì´ì§€/네임스페ì´ìŠ¤';
+$lang['who'] = '사용ìž/그룹';
+$lang['perm'] = '접근 권한';
+$lang['acl_perm0'] = 'ì—†ìŒ';
+$lang['acl_perm1'] = 'ì½ê¸°';
+$lang['acl_perm2'] = '수정';
+$lang['acl_perm4'] = 'ìƒì„±';
+$lang['acl_perm8'] = '업로드';
+$lang['acl_perm16'] = '삭제';
+$lang['acl_new'] = '새 항목 추가';
+$lang['acl_mod'] = 'ì„ íƒ í•­ëª© 변경';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php
new file mode 100644
index 000000000..f11944746
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * lithuanian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Linas Valiukas <shirshegsm@gmail.com>
+ * @author audrius.klevas@gmail.com
+ * @author Arunas Vaitekunas <aras@fan.lt>
+ */
+$lang['admin_acl'] = 'Priėjimo Kontrolės Sąrašų valdymas';
+$lang['acl_group'] = 'GrupÄ—';
+$lang['acl_user'] = 'Vartotojas';
+$lang['acl_perms'] = 'Leidimai';
+$lang['page'] = 'Puslapis';
+$lang['namespace'] = 'Pavadinimas';
+$lang['btn_select'] = 'Rinktis';
+$lang['acl_perm1'] = 'Skaityti';
+$lang['acl_perm2'] = 'Redaguoti';
+$lang['acl_perm4'] = 'Sukurti';
+$lang['acl_perm8'] = 'Atsiųsti';
+$lang['acl_perm16'] = 'IÅ¡trinti';
+$lang['acl_new'] = 'Pridėti naują įrašą';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt
new file mode 100644
index 000000000..f570d798c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt
@@ -0,0 +1,11 @@
+=== Īsa palīdzība ===
+
+Å ajÄ lapÄ var uzdot un noņemt tiesÄ«bas uz lapÄm un nodaļÄm.
+
+KreisajÄ pusÄ“ parÄdÄ«tas visas pieejamÄs nodaļas un lapas.
+
+FormÄ augÅ¡pusÄ“ var redzÄ“t un grozÄ«t norÄdÄ«tÄ lietotÄja vai grupas tiesÄ«bas .
+
+ApakÅ¡Ä tabulÄ parÄdÄ«ts visu tiesÄ«bu saraksts. To var lietot, lai Ätri mainÄ«tu vairÄkus pieejas tiesÄ«bu noteikumus.
+
+[[doku>acl|OfficiÄlajos piekļuves tiesÄ«bu noteikumu dokumentos]] var atrast izvÄ“rstu informÄciju, kÄ darbojas DokuWiki sistÄ“mas piekļuves tiesÄ«bu kontrole.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php
new file mode 100644
index 000000000..f478b32c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * latvian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['admin_acl'] = 'Piekļuves tiesību vadība';
+$lang['acl_group'] = 'Grupa';
+$lang['acl_user'] = 'LietotÄjs';
+$lang['acl_perms'] = 'Tiesības';
+$lang['page'] = 'Lapa';
+$lang['namespace'] = 'Nodaļa';
+$lang['btn_select'] = 'Izvēlēties';
+$lang['p_user_id'] = 'LietotÄjam <b class="acluser">%s</b> ir tiesÄ«bas <i>%s</i> lapu <b class="aclpage">%s</b> .';
+$lang['p_user_ns'] = 'LietotÄjam <b class="acluser">%s</b> nodaÄ¼Ä <b class="aclns">%s</b> ir tiesÄ«bas <i>%s</i>.';
+$lang['p_group_id'] = 'Grupas <b class="aclgroup">%s</b> biedriem ir tiesības <i>%s</i> lapu <b class="aclpage">%s</b>.';
+$lang['p_group_ns'] = 'Grupas <b class="aclgroup">%s</b> biedriem ir tiesības <i>%s</i> nodaļu <b class="aclns">%s</b>: .';
+$lang['p_choose_id'] = 'LÅ«dzu <b>ieraksti lietotÄju vai grupu</b> augstÄk norÄdÄ«tajÄ laukÄ, lai skatÄ«tu vai labotu tiesÄ«bas lapai <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'LÅ«dzu <b>ieraksti lietotÄju vai grupu</b> augstÄk norÄdÄ«tajÄ laukÄ, lai skatÄ«tu vai labotu tiesÄ«bas nodaļai <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'IevÄ“ro: Å Ä«s tiesÄ«bas nav tieÅ¡i uzdotas, bet mantotas no citÄm grupÄm vai augstÄkÄm nodaļÄm. ';
+$lang['p_isadmin'] = 'IevÄ“ro: NorÄdÄ«tajai grupai vai lietotÄjam vienmÄ“r ir visas tiesÄ«bas, jo tas konfigurÄ“ts kÄ <i>superuser</i>.';
+$lang['p_include'] = 'AugstÄka atļauja iekļauj arÄ« zemÄkÄs tiesÄ«bas. IzveidoÅ¡anas, augÅ¡upielÄdÄ“Å¡anas un dzÄ“Å¡anas tiesÄ«bas attiecas tikai uz nodaļÄm, nevis lapÄm.';
+$lang['current'] = 'Patreizējo tiesību saraksts (ACL)';
+$lang['where'] = 'Lapa/nodaļa';
+$lang['who'] = 'LietotÄjs/grupa';
+$lang['perm'] = 'Tiesības';
+$lang['acl_perm0'] = 'nekÄdas';
+$lang['acl_perm1'] = 'lasīt';
+$lang['acl_perm2'] = 'labot';
+$lang['acl_perm4'] = 'izveidot';
+$lang['acl_perm8'] = 'augÅ¡upielÄdÄ“t';
+$lang['acl_perm16'] = 'dzēst';
+$lang['acl_new'] = 'pievienot jaunu Å¡Ä·irkli';
+$lang['acl_mod'] = 'labot Å¡Ä·irkli';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt
new file mode 100644
index 000000000..e8aa13b52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt
@@ -0,0 +1,12 @@
+=== तà¥à¤µà¤°à¤¿à¤¤ मदत ===
+
+या पानावर तà¥à¤®à¤šà¥€ तà¥à¤®à¤šà¥à¤¯à¤¾ विकी मधील पाने किंवा नेमसà¥à¤ªà¥‡à¤¸ वरील परवानगà¥à¤¯à¤¾ बदलू शकता.
+
+डाविकडील मारà¥à¤œà¤¿à¤¨ मधे सरà¥à¤µ उपलबà¥à¤§ पाने आणि नेमसà¥à¤ªà¥‡à¤¸ दाखवले आहेत.
+
+वरील फॉरà¥à¤® वापरून तà¥à¤®à¤šà¥€ निवडलेलà¥à¤¯à¤¾ सदसà¥à¤¯ किंवा गटाचà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ बदलू शकता.
+
+खालील टेबल मधे सधà¥à¤¯à¤¾ सेट असलेले नियम दिलेले आहेत.
+हे टेबल वापरून तà¥à¤®à¥à¤¹à¥€ चटकन हे नियम बदलू शकता.
+
+[[doku>acl| ACL वरील अधिकृत माहितीसंगà¥à¤°à¤¹ ]] वाचून तà¥à¤®à¥à¤¹à¤¾à¤²à¤¾ डॉकà¥à¤¯à¥à¤µà¤¿à¤•à¤¿à¤®à¤§à¥‡ परवानगीची वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ कशी काम करते ते नीट समजेल. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php
new file mode 100644
index 000000000..978df758a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Marathi language file
+ *
+ * @author ghatothkach@hotmail.com
+ * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
+ * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
+ * @author shantanoo@gmail.com
+ */
+$lang['admin_acl'] = 'Access Control List वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨';
+$lang['acl_group'] = 'गट';
+$lang['acl_user'] = 'सदसà¥à¤¯';
+$lang['acl_perms'] = 'परवानगी \'चà¥à¤¯à¤¾ साठी';
+$lang['page'] = 'पान';
+$lang['namespace'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['btn_select'] = 'निवडा';
+$lang['p_user_id'] = '<b class="acluser">%s</b> हà¥à¤¯à¤¾ सदसà¥à¤¯à¤¾à¤²à¤¾ सधà¥à¤¯à¤¾ <b class="aclpage">%s</b> या पानावर पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_user_ns'] = '<b class="acluser">%s</b> या सदसà¥à¤¯à¤¾à¤²à¤¾ सधà¥à¤¯à¤¾ <b class="aclns">%s</b> या नेमसà¥à¤ªà¥‡à¤¸à¤µà¤° पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> या गटाचà¥à¤¯à¤¾ सदसà¥à¤¯à¤¾à¤¨à¤¾ सधà¥à¤¯à¤¾ <b class="aclpage">%s</b> या पानावर पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> या गटाचà¥à¤¯à¤¾ सदसà¥à¤¯à¤¾à¤¨à¤¾ सधà¥à¤¯à¤¾ <b class="aclns">%s</b> या नेमसà¥à¤ªà¥‡à¤¸à¤µà¤° पà¥à¤¢à¥€à¤² परवानगà¥à¤¯à¤¾ आहेत : <i>%s</i>.';
+$lang['p_choose_id'] = 'वरील फॉरà¥à¤® मधे à¤à¤–ादà¥à¤¯à¤¾ <b>सदसà¥à¤¯ किंवा गटाचे </b> नाव टाकà¥à¤¨ <b class="aclpage">%s</b> या पानासाठी तà¥à¤¯à¤¾à¤‚चà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ पाहू/बदलू शकता.';
+$lang['p_choose_ns'] = 'वरील फॉरà¥à¤® मधे à¤à¤–ादà¥à¤¯à¤¾ <b>सदसà¥à¤¯ किंवा गटाचे </b> नाव टाकà¥à¤¨ <b class="aclns">%s</b> या नेमसà¥à¤ªà¥‡à¤¸à¤¸à¤¾à¤ à¥€ तà¥à¤¯à¤¾à¤‚चà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ पाहू/बदलू शकता.';
+$lang['p_inherited'] = 'टीप : हà¥à¤¯à¤¾ परवानगà¥à¤¯à¤¾ पà¥à¤°à¤¤à¥à¤¯à¤•à¥à¤· सेट केलà¥à¤¯à¤¾ नसून तà¥à¤¯à¤¾ इतर गट किंवा अधिक उचà¥à¤š नेमसà¥à¤ªà¥‡à¤¸ कडून वारसाहकà¥à¤•à¤¾à¤¨à¥‡ :) आलà¥à¤¯à¤¾ आहेत.';
+$lang['p_isadmin'] = 'टीप : निवडलेलà¥à¤¯à¤¾ सदसà¥à¤¯ किंवा गटाला कायम सरà¥à¤µ परवानगà¥à¤¯à¤¾ असतात कारण तो सà¥à¤ªà¤° सदसà¥à¤¯ मà¥à¤¹à¤£à¥à¤¨ सेट केला आहे.';
+$lang['p_include'] = 'उचà¥à¤š परवानगà¥à¤¯à¤¾à¤‚मधे तà¥à¤¯à¤¾à¤–ालिल परवानगà¥à¤¯à¤¾ अधà¥à¤¯à¤¾à¤¹à¥ƒà¤¤ असतात. कà¥à¤°à¤¿à¤à¤Ÿ, अपलोड आणि डिलीट परवानगà¥à¤¯à¤¾ फ़कà¥à¤¤ नामसमà¥à¤¹à¤¾à¤µà¤° (नेमसà¥à¤ªà¥‡à¤¸) लागू असतात, पानांवर नाही.';
+$lang['current'] = 'सदà¥à¤¯ ACL नियम';
+$lang['where'] = 'पान/नेमसà¥à¤ªà¥‡à¤¸';
+$lang['who'] = 'सदसà¥à¤¯/गट';
+$lang['perm'] = 'परवानगà¥à¤¯à¤¾';
+$lang['acl_perm0'] = 'काही नाही.';
+$lang['acl_perm1'] = 'वाचन';
+$lang['acl_perm2'] = 'संपादन';
+$lang['acl_perm4'] = 'निरà¥à¤®à¤¾à¤£';
+$lang['acl_perm8'] = 'अपलोड';
+$lang['acl_perm16'] = 'डिलीट';
+$lang['acl_new'] = 'नवीन à¤à¤‚टà¥à¤°à¥€ करा';
+$lang['acl_mod'] = 'à¤à¤‚टà¥à¤°à¥€ बदला';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php
new file mode 100644
index 000000000..6a29a9fa8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Nepali language file
+ *
+ * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
+ * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ */
+$lang['admin_acl'] = 'à¤à¤•à¥à¤¸à¥‡à¤¸ कनà¥à¤Ÿà¥à¤°à¥‹à¤² लिसà¥à¤Ÿ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨';
+$lang['acl_group'] = 'समूह';
+$lang['acl_user'] = 'पà¥à¤°à¥‹à¤—करà¥à¤¤à¤¾';
+$lang['acl_perms'] = 'को लागि अनà¥à¤®à¤¤à¤¿';
+$lang['page'] = 'पृषà¥à¤ ';
+$lang['namespace'] = 'नेमसà¥à¤ªà¥‡à¤¸';
+$lang['btn_select'] = 'छानà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['current'] = 'हालैको ACL नियमहरॠ';
+$lang['where'] = 'पृषà¥à¤  / नेमसà¥à¤ªà¥‡à¤¸';
+$lang['who'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ / समूह ';
+$lang['perm'] = 'अनà¥à¤®à¤¤à¤¿';
+$lang['acl_perm0'] = 'कà¥à¤¨à¥ˆ पनि होइन';
+$lang['acl_perm1'] = 'पठन गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm2'] = 'समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm4'] = 'निरà¥à¤®à¤¾à¤£ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm8'] = 'अपलोड गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_perm16'] = 'मेटाउनà¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_new'] = 'नयाठपà¥à¤°à¤µà¤¿à¤·à¥à¤ à¤¿ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['acl_mod'] = 'पà¥à¤°à¤µà¤¿à¤·à¥à¤ à¤¿ सचà¥à¤¯à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt
new file mode 100644
index 000000000..255f21ba0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt
@@ -0,0 +1,11 @@
+=== Snelle hulp: ===
+
+Op deze pagina kun je bevoegdheden toevoegen en verwijderen voor namespaces en pagina's in je wiki.
+
+Het linkerpaneel geeft alle beschikbare namespaces en pagina's weer.
+
+In het formulier hierboven kun je bevoegdheden zien en aanpassen voor een selecteerde gebruiker of groep.
+
+In de tabel hieronder worden alle momenteel ingestelde toegangsregels weergegeven. Je kunt hier snel regels wijzigen of verwijderen.
+
+Lees de [[doku>acl|documentatie over ACLs]] om de mogelijkheden volledig te begrijpen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php
new file mode 100644
index 000000000..d45bb5907
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * dutch language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author François Kooman <fkooman.tuxed.net>
+ * @author Jack van Klaren <dokuwiki@afentoe.xs4all.nl>
+ * @author Riny Heijdendael <riny@heijdendael.nl>
+ * @author Koen Huybrechts <huybkoen@gmail.com>
+ * @author Wouter Schoot <wouter@schoot.org>
+ * @author John de Graaff <john@de-graaff.net>
+ * @author Niels Schoot <niels.schoot@quintiq.com>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
+ * @author Marijn Hofstra hofstra.m@gmail.com
+ * @author Matthias Carchon webmaster@c-mattic.be
+ */
+$lang['admin_acl'] = 'Toegangsrechten';
+$lang['acl_group'] = 'Groep';
+$lang['acl_user'] = 'Gebruiker';
+$lang['acl_perms'] = 'Permissies voor';
+$lang['page'] = 'Pagina';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Selecteer';
+$lang['p_user_id'] = 'Gebruiker <b class="acluser">%s</b> heeft momenteel de volgende bevoegdheden op pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Gebruiker <b class="acluser">%s</b> heeft momenteel de volgende bevoegdheden op namespace <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Leden van groep <b class="aclgroup">%s</b> hebben momenteel de volgende bevoegdheden op pagina <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Leden van groep <b class="aclgroup">%s</b>hebben momenteel de volgende bevoegdheden op namespace <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Vul een <b>gebruiker of groep</b> in in het bovenstaande formulier om de bevoegdheden te bekijken of te bewerken voor de pagina <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Vul een <b>gebruiker of groep</b> in in het bovenstaande formulier om de bevoegdheden te bekijken of te bewerken voor de namespace <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Let op: Deze permissies zijn niet expliciet ingesteld maar overerfd van andere groepen of hogere namespaces.';
+$lang['p_isadmin'] = 'Let op: De geselecteerde groep of gebruiker heeft altijd volledige toegangsrechten omdat hij als superuser geconfigureerd is.';
+$lang['p_include'] = 'Hogere permissies bevatten ook de lagere. Aanmaken, uploaden en verwijderen gelden alleen voor namespaces, niet voor pagina\'s.';
+$lang['current'] = 'Huidige ACL regels';
+$lang['where'] = 'Pagina/namespace';
+$lang['who'] = 'Gebruiker/Groep';
+$lang['perm'] = 'Bevoegdheden';
+$lang['acl_perm0'] = 'Geen';
+$lang['acl_perm1'] = 'Lezen';
+$lang['acl_perm2'] = 'Bewerken';
+$lang['acl_perm4'] = 'Aanmaken';
+$lang['acl_perm8'] = 'Uploaden';
+$lang['acl_perm16'] = 'Verwijderen';
+$lang['acl_new'] = 'Nieuwe regel toevoegen';
+$lang['acl_mod'] = 'Regel aanpassen';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt
new file mode 100644
index 000000000..f02b6bdbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt
@@ -0,0 +1,11 @@
+===Lynhjelp===
+
+PÃ¥ denne siden kan du legge til og fjerne tillatelser for navnerom og sider i din wiki.
+
+Venstre panel viser alle tilgjengelige navnerom og sider.
+
+Skjemaet over tillater deg å se og modifisere tillatelser for en valgt bruker eller gruppe.
+
+I tabellen nedenfor vises alle nærværende satte adgangskontroll-regler. Du kan bruke den til raskt å slette eller endre mange regler i slengen.
+
+Å lese [[doku>acl|den offisielle dokumentasjonen for ACL]] kan hjelpe deg å fullt ut forstå hvordan adgangskontroll fungerer i DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php
new file mode 100644
index 000000000..cd9e2edfb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Norwegian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Reidar Mosvold <Reidar.Mosvold@hit.no>
+ * @author Jorge Barrera Grandon <jorge@digitalwolves.org>
+ * @author Thomas Nygreen <nygreen@gmail.com>
+ * @author Arild Burud <arildb@met.no>
+ * @author Torkill Bruland <torkar-b@online.no>
+ * @author Rune M. Andersen <rune.andersen@gmail.com>
+ * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
+ * @author Knut Staring <knutst@gmail.com>
+ * @author Lisa Ditlefsen <lisa@vervesearch.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['admin_acl'] = 'Administrasjon av lister for adgangskontroll (ACL)';
+$lang['acl_group'] = 'Gruppe';
+$lang['acl_user'] = 'Bruker';
+$lang['acl_perms'] = 'Rettigheter for';
+$lang['page'] = 'Side';
+$lang['namespace'] = 'Navnerom';
+$lang['btn_select'] = 'Velg';
+$lang['p_user_id'] = 'Bruker <b class="acluser">%s</b> har for tiden følgende tillatelser i for siden <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Bruker <b class="acluser">%s</b> har for tiden følgende tillatelser i navnerom <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Medlemmer av gruppe <b class="aclgroup">%s</b> har for tiden følgende tillatelser i for siden <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Medlemmer av gruppe <b class="aclgroup">%s</b> har for tiden følgende tillatelser i navnerom <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Før inn en bruker eller gruppe</b> i skjemaet over for å vise eller redigere tillatelser satt for siden <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Før inn en bruker eller gruppe</b> i skjemaet over for å vise eller redigere tillatelser satt for navnerommet <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Merk: Disse tillatelser ble ikke eksplisitt satt, men ble arvet fra andre grupper eller høyere navnerom.';
+$lang['p_isadmin'] = 'Merk: Den valgte gruppen eller bruker har altid fulle tillatelser fordi vedkommende er konfigurert som superbruker.';
+$lang['p_include'] = 'Høyere tillgangsrettigheter inkluderer lavere. Rettigheter for å opprette, laste opp og slette gjelder bare for navnerom, ikke enkeltsider.';
+$lang['current'] = 'NÃ¥gjeldende ACL-regler';
+$lang['where'] = 'Side/Navnerom';
+$lang['who'] = 'Bruker/Gruppe';
+$lang['perm'] = 'Tillatelser';
+$lang['acl_perm0'] = 'Ingen';
+$lang['acl_perm1'] = 'Lese';
+$lang['acl_perm2'] = 'Redigere';
+$lang['acl_perm4'] = 'Lage';
+$lang['acl_perm8'] = 'Laste opp';
+$lang['acl_perm16'] = 'Slette';
+$lang['acl_new'] = 'Legg til ny oppføring';
+$lang['acl_mod'] = 'Modifiser oppføring';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt
new file mode 100644
index 000000000..331fd2a7a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt
@@ -0,0 +1,11 @@
+=== Pomoc ===
+
+Na tej stronie możesz zmienić uprawnienia do stron i katalogów w wiki.
+
+Lewy panel pokazuje wszystkie dostępne katalogi i strony.
+
+Formularz powyżej pozwala wyświetlać uprawnienia wybranego użytkownika oraz grupy.
+
+W tabeli poniżej znajdują się wszystkie aktywne reguły dotyczące uprawnień.
+
+Więcej informacji na temat uprawnień w DokuWiki możesz znaleźć w [[doku>acl|oficjalnej dokumentacji uprawnień]].
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php
new file mode 100644
index 000000000..63a870c50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * polish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Grzegorz Żur <grzegorz.zur@gmail.com>
+ * @author Mariusz Kujawski <marinespl@gmail.com>
+ * @author Maciej Kurczewski <pipijajko@gmail.com>
+ * @author SÅ‚awomir Boczek <slawkens@gmail.com>
+ */
+$lang['admin_acl'] = 'ZarzÄ…dzanie uprawnieniami';
+$lang['acl_group'] = 'Grupa';
+$lang['acl_user'] = 'Użytkownik';
+$lang['acl_perms'] = 'Uprawnienia użytkownika';
+$lang['page'] = 'Strona';
+$lang['namespace'] = 'Katalog';
+$lang['btn_select'] = 'Wybierz';
+$lang['p_user_id'] = 'Użytkownik <b class="acluser">%s</b> posiada następujące uprawnienia do strony <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Użytkownik <b class="acluser">%s</b> posiada następujące uprawnienia do katalogów <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Członkowie grupy <b class="aclgroup">%s</b> posiadają następujące uprawnienia do strony <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Członkowie grupy <b class="aclgroup">%s</b> posiadają następujące uprawnienia do strony <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Podaj <b>nazwę użytkownika lub grupy</b> w powyższym formularzu, by wyświetlić lub zmienić uprawnienia do strony <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Podaj <b>nazwę użytkownika lub grupy</b> w powyższym formularzu, by wyświetlić lub zmienić uprawnienia do katalogu <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Uwaga: Uprawnienia nie zostały nadane wprost ale są dziedziczone z grupy lub katalogu.';
+$lang['p_isadmin'] = 'Uwaga: Wybrana grupa lub użytkownika zawsze dysponuje pełnymi uprawnieniami ponieważ posiada uprawnienia administratora.';
+$lang['p_include'] = 'Szersze uprawnienia zawierają węższe. Tworzenie, przesyłanie plików oraz usuwanie mają znaczenie tylko dla katalogów, nie dla stron.';
+$lang['current'] = 'Aktywne reguły zarządzania uprawnieniami';
+$lang['where'] = 'Strona/Katalog';
+$lang['who'] = 'Użytkownik/Grupa';
+$lang['perm'] = 'Uprawnienie';
+$lang['acl_perm0'] = 'Żadne';
+$lang['acl_perm1'] = 'Czytanie';
+$lang['acl_perm2'] = 'Zmiana';
+$lang['acl_perm4'] = 'Tworzenie';
+$lang['acl_perm8'] = 'Przesyłanie plików';
+$lang['acl_perm16'] = 'Usuwanie';
+$lang['acl_new'] = 'Dodaj nowy wpis';
+$lang['acl_mod'] = 'Zmień wpis';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt
new file mode 100644
index 000000000..b2a49a90d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt
@@ -0,0 +1,11 @@
+=== Ajuda rápida: ===
+
+Nessa página você pode adicionar e remover permissões para espaços de nomes e páginas do seu wiki.
+
+O painel à esquerda mostra todos os espaços de nomes e páginas disponíveis.
+
+O formulário acima permite a visualização e modificação das permissões de um determinado usuário ou grupo.
+
+Na tabela abaixo são exibidas todas as regras de controle de acesso definidas. Você pode usá-la para excluir ou mudar rapidamente várias regras.
+
+A leitura da [[doku>acl|documentação oficial sobre ACL]] pode ajudar a compreender melhor como o controle de acessos funciona no DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php
new file mode 100644
index 000000000..82a19b290
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Brazilian Portuguese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Luis Fernando Enciso <lfenciso@certto.com.br>
+ * @author Alauton/Loug
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Lucien Raven <lucienraven@yahoo.com.br>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Flávio Veras <flaviove@gmail.com>
+ * @author Jeferson Propheta <jeferson.propheta@gmail.com>
+ * @author jair.henrique@gmail.com
+ * @author Luis Dantas <luis@dantas.com>
+ * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Luis Dantas <luisdantas@gmail.com>
+ */
+$lang['admin_acl'] = 'Administração da Lista de Controles de Acesso';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Usuário';
+$lang['acl_perms'] = 'Permissões para';
+$lang['page'] = 'Página';
+$lang['namespace'] = 'Espaço de nomes';
+$lang['btn_select'] = 'Selecionar';
+$lang['p_user_id'] = 'O usuário <b class="acluser">%s</b> possui as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'O usuário <b class="acluser">%s</b> possui as seguintes permissões no espaço de nomes <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Os membros do grupo <b class="aclgroup">%s</b> possuem as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Os membros do grupo <b class="aclgroup">%s</b> possuem as seguintes permissões no espaço de nomes <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Por favor <b>digite um usuário ou grupo</b> no formulário acima para ver ou editar as permissões para a página <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Por favor <b>digite um usuário ou grupo</b> no formulário acima para ver ou editar as permissões para o espaço de nomes <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Nota: Essas permissões não foram definidas explicitamente, mas sim herdadas de outros grupos ou espaço de nomes superiores.';
+$lang['p_isadmin'] = 'Nota: O grupo ou usuário selecionado sempre tem permissões completas, porque ele está configurado como superusuário.';
+$lang['p_include'] = 'As permissões superiores incluem as inferiores. Permissões para Criar, Enviar e Apagar aplicam-se apenas aos espaços de nomes e não às páginas.';
+$lang['current'] = 'Regras atuais da ACL';
+$lang['where'] = 'Página/Espaço de nomes';
+$lang['who'] = 'Usuário/Grupo';
+$lang['perm'] = 'Permissões';
+$lang['acl_perm0'] = 'Nenhuma';
+$lang['acl_perm1'] = 'Ler';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Criar';
+$lang['acl_perm8'] = 'Enviar';
+$lang['acl_perm16'] = 'Excluir';
+$lang['acl_new'] = 'Adicionar nova entrada';
+$lang['acl_mod'] = 'Modificar a entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt
new file mode 100644
index 000000000..cf4619deb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt
@@ -0,0 +1,9 @@
+=== Auxílio Rápido ===
+
+Nesta página podes adicionar e remover permissões para espaço de nomes e páginas no seu wiki.
+
+O painel esquerdo exibe todos os espaço de nomes e páginas. O formulario acima permite a visualização e modificar as permissões de um selecionado utilizador ou grupo.
+
+Na tabela inferior são exibidas todas as actuais regras de controle de acesso. Podes utilisá-la para excluir ou mudar rapidamente várias regras ao mesmo tempo.
+
+A leitura da [[doku>acl|documentação oficial acerca ACL]] pode ajudar a compreender melhor como o controle de acessos funciona no DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php
new file mode 100644
index 000000000..6e094fd74
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author José Carlos Monteiro <jose.c.monteiro@netcabo.pt>
+ * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Fil <fil@meteopt.com>
+ * @author André Neves <drakferion@gmail.com>
+ */
+$lang['admin_acl'] = 'Gestão de ACLs';
+$lang['acl_group'] = 'Grupo';
+$lang['acl_user'] = 'Utilizador';
+$lang['acl_perms'] = 'Permissão para';
+$lang['page'] = 'Documento';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Selecionar';
+$lang['p_user_id'] = 'O utilizador <b class="acluser">%s</b> tem as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'O utilizador <b class="acluser">%s</b> tem as seguintes permissões no espaço de nomes <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Os membros do grupo <b class="aclgroup">%s</b> têm as seguintes permissões na página <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Os membros do grupo <b class="aclgroup">%s</b> têm as seguintes permissões no espaço de nomes <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Por favor <b>digite um utilizador ou grupo</b> no formulário acima para ver ou editar as permissões para a página <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Por favor <b>digite um utilizador ou grupo</b> no formulário acima para ver ou editar as permissões para o espaço de nomes <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Nota: Essas permissões não foram definidas explicitamente, mas sim herdadas de outros grupos ou espaço de nomes superiores.';
+$lang['p_isadmin'] = 'Nota: O grupo ou utilizador seleccionado tem sempre permissões completas, porque ele está configurado como superutilizador.';
+$lang['p_include'] = 'As permissões superiores incluem as inferiores. Permissões para Criar, Enviar e Apagar aplicam-se apenas aos espaços de nomes e não às páginas.';
+$lang['current'] = 'Regras Actuais ACL';
+$lang['where'] = 'Página/Espaço de Nomes';
+$lang['who'] = 'Utilizador/Grupo';
+$lang['perm'] = 'Permissões';
+$lang['acl_perm0'] = 'Nenhum';
+$lang['acl_perm1'] = 'Ler';
+$lang['acl_perm2'] = 'Editar';
+$lang['acl_perm4'] = 'Criar';
+$lang['acl_perm8'] = 'Carregar';
+$lang['acl_perm16'] = 'Remover';
+$lang['acl_new'] = 'Adicionar nova entrada';
+$lang['acl_mod'] = 'Modificar Entrada';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt
new file mode 100644
index 000000000..3f762613c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt
@@ -0,0 +1,11 @@
+=== Quick Help: ===
+
+Pe această pagină puteţi adăuga şi elimina autorizaţiile pentru spaţiile de nume şi paginile din wiki.
+
+Panoul din stânga afişează toate spaţiile de nume şi paginile disponibile.
+
+Formularul de sus vă permite să vedeţi şi să modificaţi autorizaţiile unui anume utilizator sau grup.
+
+In tabelul de jos sunt arătate toate regulile de control a accesului setate. Îl puteţi folosi pentru a şterge sau modifica rapid mai multe reguli.
+
+Consultarea [[doku>acl|official documentation on ACL]] vă poate ajuta să înţelegeţi deplin cum funcţionează controlul accesului în DocuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php
new file mode 100644
index 000000000..296baa291
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Romanian language file
+ *
+ * @author Sergiu Baltariu <s_baltariu@yahoo.com>
+ * @author s_baltariu@yahoo.com
+ * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
+ */
+$lang['admin_acl'] = 'Managementul Listei de Control a Accesului';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Utilizator';
+$lang['acl_perms'] = 'Autorizare pentru';
+$lang['page'] = 'Pagina';
+$lang['namespace'] = 'Spaţiu de nume';
+$lang['btn_select'] = 'Selectează';
+$lang['p_user_id'] = 'Utilizatorul <b class="acluser">%s</b> are următoarele autorizaţii pe pagină <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Utilizatorul <b class="acluser">%s</b> are următoarele autorizaţii pe spaţiul de nume <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Membrii grupului <b class="aclgroup">%s</b> au următoarele autorizaţii pe pagină <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Membrii grupului <b class="aclgroup">%s</b> au următoarele autorizaţii pe spaţiul de nume <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = '<b>Introduceţi un utilizator sau un grup</b> în formularul de mai sus pentru a vizualiza sau edita autorizaţiile paginii <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = '<b>Introduceţi un utilizator sau un grup</b> în formularul de mai sus pentru a vizualiza sau edita autorizaţiile spaţiului de nume <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Notă: Aceste autorizaţii nu au fost setate explicit ci au fost moştenite de la alte grupuri sau spaţii de nume superioare ierarhic.';
+$lang['p_isadmin'] = 'Notă: Grupul sau utilizatorul selectat are intotdeauna toate autorizatiile întrucât este configurat ca superutilizator.';
+$lang['p_include'] = 'Permisiunile superioare le includ pe cele inferioare. Permisiunile de Creare, Upload şi Ştergere se aplică doar numelor de spaţiu, nu paginilor.';
+$lang['current'] = 'Reguli ACL actuale';
+$lang['where'] = 'Pagină/Spaţiu de nume';
+$lang['who'] = 'Utilizator/Grup';
+$lang['perm'] = 'Autorizaţii';
+$lang['acl_perm0'] = 'Nici una';
+$lang['acl_perm1'] = 'Citire';
+$lang['acl_perm2'] = 'Editare';
+$lang['acl_perm4'] = 'Creare';
+$lang['acl_perm8'] = 'Încărcare';
+$lang['acl_perm16'] = 'Åžtergere';
+$lang['acl_new'] = 'Adaugă intrare nouă';
+$lang['acl_mod'] = 'Modifică intrare';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt
new file mode 100644
index 000000000..f969151fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt
@@ -0,0 +1,11 @@
+=== ÐšÑ€Ð°Ñ‚ÐºÐ°Ñ Ð¡Ð¿Ñ€Ð°Ð²ÐºÐ°: ===
+
+Ðа Ñтой Ñтранице вы можете добавить или удалить права доÑтупа к проÑтранÑтвам имён и Ñтраницам вашей вики.
+
+Ðа панели Ñлева отображены доÑтупные проÑтранÑтва имён и Ñтраницы.
+
+Форма выше позволÑет вам проÑмотреть и изменить права доÑтупа Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ группы.
+
+Текущие права доÑтупа отображены в таблице ниже. Ð’Ñ‹ можете иÑпользовать её Ð´Ð»Ñ Ð±Ñ‹Ñтрого ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð».
+
+Прочтение [[doku>acl|официальной документации по ACL]] может помочь вам в полном понимании работы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ доÑтупа в DokuWiki.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php
new file mode 100644
index 000000000..496e67510
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Russian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author Змей ЭтерийÑкий evil_snake@eternion.ru
+ * @author Hikaru Nakajima <jisatsu@mail.ru>
+ * @author Alexei Tereschenko <alexeitlex@yahoo.com>
+ * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Alexander Sorkin <kibizoid@gmail.com>
+ * @author Kirill Krasnov <krasnovforum@gmail.com>
+ * @author Vlad Tsybenko <vlad.development@gmail.com>
+ */
+$lang['admin_acl'] = 'Управление ÑпиÑками ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð¾Ñтупа';
+$lang['acl_group'] = 'Группа';
+$lang['acl_user'] = 'Пользователь';
+$lang['acl_perms'] = 'Права доÑтупа длÑ';
+$lang['page'] = 'Страница';
+$lang['namespace'] = 'ПроÑтранÑтво имен';
+$lang['btn_select'] = 'Выбрать';
+$lang['p_user_id'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒ <b class="acluser">%s</b> имеет Ñледующие права на доÑтуп к Ñтранице <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒ <b class="acluser">%s</b> имеет Ñледующие права на доÑтуп к проÑтранÑтву имён <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ñ‡Ð»ÐµÐ½Ñ‹ группы <b class="aclgroup">%s</b> имеют Ñледующие права на доÑтуп к Ñтранице <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ñ‡Ð»ÐµÐ½Ñ‹ группы <b class="aclgroup">%s</b> cимеют Ñледующие права на доÑтуп к проÑтранÑтву имён <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'ПожалуйÑта, <b>введите Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ группу</b> в форме выше, чтобы проÑмотреть или отредактировать права на доÑтуп к Ñтранице <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'ПожалуйÑта, <b>введите Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ группу</b> в форме выше, чтобы проÑмотреть или отредактировать права на доÑтуп к проÑтранÑтву имён <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Замечание: Эти права доÑтупа не были заданы Ñвно, а были унаÑледованы от других групп или проÑтранÑтв имён более выÑокого порÑдка.';
+$lang['p_isadmin'] = 'Замечание: Выбранный пользователь вÑегда имеет полные права так, как он ÑвлÑетÑÑ Ñуперпользователем.';
+$lang['p_include'] = 'Более выÑокие права доÑтупа включают в ÑÐµÐ±Ñ Ð±Ð¾Ð»ÐµÐµ низкие. Права доÑтупа Создание, Загрузка и Удаление отноÑÑÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ к проÑтранÑтвам имён, а не к Ñтраницам.';
+$lang['current'] = 'Текущие права ACL';
+$lang['where'] = 'Страница/ПроÑтранÑтво имён';
+$lang['who'] = 'Пользователь/Группа';
+$lang['perm'] = 'Права доÑтупа';
+$lang['acl_perm0'] = 'Ðет доÑтупа';
+$lang['acl_perm1'] = 'Чтение';
+$lang['acl_perm2'] = 'Правка';
+$lang['acl_perm4'] = 'Создание';
+$lang['acl_perm8'] = 'Загрузка файлов';
+$lang['acl_perm16'] = 'Удаление';
+$lang['acl_new'] = 'Добавить новую запиÑÑŒ';
+$lang['acl_mod'] = 'Отредактировать запиÑÑŒ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt
new file mode 100644
index 000000000..1167bf5e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt
@@ -0,0 +1,11 @@
+=== Krátka nápoveda: ===
+
+Na tejto stránke môžete pridávať alebo rušiť oprávnenia pre menné priestory a stránky vo Vašej wiki.
+
+Ľavý panel zobrazuje všetky dostupné menné priestory a stránky.
+
+Formulár zobrazený vyššie Vam dovoľuje prehliadať a meniť oprávnenia pre vybraného používateľa alebo skupinu.
+
+V tabuľke nižšie sú zobrazené všetky aktuálne prístupové pravidlá. Môžete v nej rýchlo rušiť alebo meniť viacero pravidiel naraz.
+
+PreÄítanie [[doku>acl|oficiálnej dokumentácie ACL]] Vám môže pomôcÅ¥ plne pochopiÅ¥ spôsob ako fungujú prístupové pravidlá (oprávnenia) v DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php
new file mode 100644
index 000000000..398f8c63d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Slovak language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Ondrej Vegh <ov@vsieti.sk>
+ * @author Michal Mesko <michal.mesko@gmail.com>
+ * @author exusik@gmail.com
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['admin_acl'] = 'Správa zoznamu prístupových práv';
+$lang['acl_group'] = 'Skupina';
+$lang['acl_user'] = 'Užívateľ';
+$lang['acl_perms'] = 'Práva pre';
+$lang['page'] = 'Stránka';
+$lang['namespace'] = 'Menný priestor';
+$lang['btn_select'] = 'Vybrať';
+$lang['p_user_id'] = 'Používateľ <b class="acluser">%s</b> má aktuálne nasledujúce oprávnenia k stránke <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Používateľ <b class="acluser">%s</b> má aktuálne nasledujúce oprávnenia v mennom priestore <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Členovia skupiny <b class="aclgroup">%s</b> majú aktuálne nasledujúce oprávnenia k stránke <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Členovia skupiny <b class="aclgroup">%s</b> majú aktuálne nasledujúce oprávnenia v mennom priestore <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Prosím <b>zadajte používateľa alebo skupinu</b> do formulára zobrazeného vyššie, aby ste mohli prezerať alebo meniť oprávnenia k stránke <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Prosím <b>zadajte používateľa alebo skupinu</b> do formulára zobrazeného vyššie, aby ste mohli prezerať alebo meniť oprávnenia v mennom priestore <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Poznámka: Tieto oprávnenia neboli nastavené explicitne, ale boli odvodené z inej skupiny alebo nadradeného menného priestoru.';
+$lang['p_isadmin'] = 'Poznámka: Vybraná skupina alebo používateľ má vždy najvyššie oprávnenia, pretože je vedená/vedený ako správca.';
+$lang['p_include'] = 'Vyššie oprávnenia zahŕňajú nižšie. Oprávnenie Vytvoriť, Nahrať a Zmazať sa vzťahujú iba k menným priestorom, nie ku stránkam.';
+$lang['current'] = 'Aktuálne pravidlá prístupu (ACL)';
+$lang['where'] = 'Stránka/Menný priestor';
+$lang['who'] = 'Používateľ/Skupina';
+$lang['perm'] = 'Povolenia';
+$lang['acl_perm0'] = 'Žiadne';
+$lang['acl_perm1'] = 'Čítať';
+$lang['acl_perm2'] = 'Zmeniť';
+$lang['acl_perm4'] = 'Vytvoriť';
+$lang['acl_perm8'] = 'Nahrať súbor';
+$lang['acl_perm16'] = 'Zmazať';
+$lang['acl_new'] = 'Pridať nový záznam';
+$lang['acl_mod'] = 'Upraviť záznam';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php
new file mode 100644
index 000000000..32141fbce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Slovenian language file
+ *
+ * @author Dejan Levec <webphp@gmail.com>
+ * @author BoÅ¡tjan SeniÄar <senicar@gmail.com>
+ */
+$lang['acl_group'] = 'Skupina';
+$lang['acl_user'] = 'Uporabnik';
+$lang['acl_perms'] = 'Dovoljenja za';
+$lang['page'] = 'Stran';
+$lang['btn_select'] = 'Izberi';
+$lang['who'] = 'Uporabnik/Skupina';
+$lang['perm'] = 'Dovoljenja';
+$lang['acl_perm1'] = 'Preberi';
+$lang['acl_perm2'] = 'Uredi';
+$lang['acl_perm4'] = 'Ustvari';
+$lang['acl_perm8'] = 'Naloži';
+$lang['acl_perm16'] = 'Zbriši';
+$lang['acl_new'] = 'Dodaj nov zapis';
+$lang['acl_mod'] = 'Spremeni zapis';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt
new file mode 100644
index 000000000..0ec8921d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt
@@ -0,0 +1,11 @@
+=== Приручна помоћ: ===
+
+Ðа овој Ñтрани можете додати или уклонити дозволе за Ñтранице и именÑке проÑторе на Вашем викију.
+
+Леви панел приказује Ñве доÑтупне именÑке проÑторе и Ñтранице.
+
+Формулар изнад омогућава приказ и измену дозвола за одабране кориÑнике или групе.
+
+У табели иÑпод Ñу приказане Ñве тренутно поÑтављене дозволе. Можете је кориÑтити за брзо бриÑање или измену више правила.
+
+Читање [[doku>acl|званичне документације о ACL]] Вам може помоћи у потпуном разумевању рада дозвола приÑтупа у DokuWiki-ју.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php
new file mode 100644
index 000000000..6e1649992
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * serbian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Filip Brcic <brcha@users.sourceforge.net>
+ * @author Иван Петровић petrovicivan@ubuntusrbija.org
+ * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ */
+$lang['admin_acl'] = 'Управљање лиÑтом контроле приÑтупа';
+$lang['acl_group'] = 'Група';
+$lang['acl_user'] = 'КориÑник';
+$lang['acl_perms'] = 'Дозволе за';
+$lang['page'] = 'Страница';
+$lang['namespace'] = 'ИменÑки проÑтор';
+$lang['btn_select'] = 'Одабери';
+$lang['p_user_id'] = 'КориÑник <b class="acluser">%s</b> тренутно има Ñледеће дозволе за ову Ñтраницу <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'КориÑник <b class="acluser">%s</b> тренутно има Ñледеће дозволе за овај именÑки проÑтор <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Чланови групе <b class="acluser">%s</b> тренутно имају Ñледеће дозволе за ову Ñтраницу <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Чланови групе <b class="acluser">%s</b> тренутно имају Ñледеће дозволе за овај именÑки проÑтор <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Молим Ð’Ð°Ñ <b>унеÑите кориÑника или групу</b> у формулар изнад да биÑте приказали или изменили дозволе за Ñтраницу <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Молим Ð’Ð°Ñ <b>унеÑите кориÑника или групу</b> у формулар изнад да биÑте приказали или изменили дозволе за именÑки проÑтор <b class="aclpage">%s</b>.';
+$lang['p_inherited'] = 'Ðапомена: Ове дозволе Ñе не поÑтављају екÑплицитно већ Ñамо тамо где Ñе не Ñударају Ñа оÑталим групама или вишем иманÑком проÑтору.';
+$lang['p_isadmin'] = 'Ðапомена: Одабран кориÑник или група има увек пуне дозволе јер је поÑтављен за ÑуперкориÑника.';
+$lang['p_include'] = 'Више дозволе укључују ниже. Дозволе одавања, Ñлања и бриÑања ће бити примењене Ñамо на именÑке проÑторе, не и на Ñтране.';
+$lang['current'] = 'Тренутна правила проÑтупа';
+$lang['where'] = 'Страница/ИменÑки проÑтор';
+$lang['who'] = 'КориÑник/Група';
+$lang['perm'] = 'Дозволе';
+$lang['acl_perm0'] = 'Ðишта';
+$lang['acl_perm1'] = 'Читање';
+$lang['acl_perm2'] = 'Измена';
+$lang['acl_perm4'] = 'Прављење';
+$lang['acl_perm8'] = 'Слање';
+$lang['acl_perm16'] = 'БриÑање';
+$lang['acl_new'] = 'Додај нови уноÑ';
+$lang['acl_mod'] = 'Измени уноÑ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt
new file mode 100644
index 000000000..5ba770fa0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt
@@ -0,0 +1,8 @@
+=== Hjälp ===
+På den här sidan kan du lägga till och ta bort åtkomsträttigheter för namnrymder och enstaka sidor i din wiki.
+
+Till vänster visas alla tillgängliga namnrymder och sidor du kan välja. I formuläret ovanför kan du sedan välja användare eller grupp för vilken åtkomsträttigheterna ska visas eller ändras.
+
+Tabellen nedanför visar samtliga uppsatta regler för åtkomsträttigheter. Den kan du använda för att snabbt ta bort eller ändra flera regler på en gång.
+
+Läs gärna [[doku>acl|den officiella dokumentationen för ACL]] som kan hjälpa dig till fullo förstå hur åtkomsträttigheter fungerar i DokuWiki. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php
new file mode 100644
index 000000000..b5fd3b866
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * swedish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Per Foreby <per@foreby.se>
+ * @author Nicklas Henriksson <nicklas[at]nihe.se>
+ * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author Dennis Karlsson
+ * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author emil@sys.nu
+ * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
+ * @author Tormod Johansson tormod.otter.johansson@gmail.com
+ * @author Emil Lind <emil@sys.nu>
+ * @author Bogge Bogge <bogge@bogge.com>
+ * @author Peter Åström <eaustreum@gmail.com>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+$lang['admin_acl'] = 'Hantera behörighetslistan (ACL)';
+$lang['acl_group'] = 'Grupp';
+$lang['acl_user'] = 'Användare';
+$lang['acl_perms'] = 'Behörighet för';
+$lang['page'] = 'Sida';
+$lang['namespace'] = 'Namnrymd';
+$lang['btn_select'] = 'Välj';
+$lang['p_user_id'] = 'Användaren <b class="acluser">%s</b> har förnärvarande följande rättigheter på sidan <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'Användaren <b class="acluser">%s</b> har för närvarande följande rättigheter i namnrymden <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Medlemmar av gruppen <b class="aclgroup">%s</b> har för närvarande följande rättigheter på sidan <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Medlemmar av gruppen <b class="aclgroup">%s</b> har för närvarande följande rättigheter i namnrymden <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Vänligen <b>ange en användare eller grupp</b> i formuläret ovan för att visa eller ändra rättigheterna för sidan <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Vänligen <b>ange en användare eller grupp</b> i formuläret ovan för att visa eller ändra rättigheterna för namnrymden <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Notering: De här rättigheterna är inte explicit satta utan var ärvda från andra grupper eller högre namnrymder.';
+$lang['p_isadmin'] = 'Notering: Den valda gruppen eller användaren har alltid fulla rättigheter på grund av att den är konfigurerad som superanvändare.';
+$lang['p_include'] = 'Högre rättigheter inkluderar lägre. Rättigheter för Skapa, Ladda upp och Radera är endast applicerbara namnrymder, inte sidor.';
+$lang['current'] = 'Nuvarande ACL regler';
+$lang['where'] = 'Sida/Namnrymd';
+$lang['who'] = 'Användare/Grupp';
+$lang['perm'] = 'Rättigheter';
+$lang['acl_perm0'] = 'Inga';
+$lang['acl_perm1'] = 'Läsa';
+$lang['acl_perm2'] = 'Redigera';
+$lang['acl_perm4'] = 'Skapa';
+$lang['acl_perm8'] = 'Ladda upp';
+$lang['acl_perm16'] = 'Radera';
+$lang['acl_new'] = 'Lägg till ny behörighet';
+$lang['acl_mod'] = 'Ändra behörighet';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt
new file mode 100644
index 000000000..52edca93f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt
@@ -0,0 +1,11 @@
+=== ตัวช่วยอย่างเร็ว ===
+
+ในหน้านี้คุณสามารถเพิ่มà¹à¸¥à¸°à¸–อดสิทธิ์สำหรับเนมสเปซ à¹à¸¥à¸°à¹€à¸žà¸ˆà¹ƒà¸™à¸§à¸´à¸à¸´à¸‚องคุณ
+
+à¹à¸–บด้านซ้ายจะà¹à¸ªà¸”งรายชื่อเนมสเปซ à¹à¸¥à¸°à¹€à¸žà¸ˆà¸—ี่มีอยู่ทั้งหมด
+
+à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡à¸‚้างบนอนุà¸à¸²à¸•à¸´à¹ƒà¸«à¹‰à¸„ุณมองเห็น à¹à¸¥à¸°à¹à¸à¹‰à¹„ขสิทธิ์ของผู้ใช้หรือà¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่เลือà¸à¹„ว้ได้
+
+ในตารางด้านล่างได้à¹à¸ªà¸”งà¸à¸à¸„วบคุมà¸à¸²à¸£à¹€à¸‚้าถึงทั้งหมดไว้ คุณสามารถใช้มันลบ หรือเปลี่ยนà¸à¸à¸„รั้งละหลายๆตัวพร้อมà¸à¸±à¸™à¹„ด้อย่างรวดเร็ว
+
+à¸à¸²à¸£à¸­à¹ˆà¸²à¸™ [[doku>acl|official documentation on ACL]] น่าจะช่วยให้คุณเข้าใจวิธีควบคุมà¸à¸²à¸£à¹€à¸‚้าถึงของโดà¸à¸¸à¸§à¸´à¸à¸´à¹„ด้อย่างถ่องà¹à¸—้ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php
new file mode 100644
index 000000000..472c33cdc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Thai language file
+ *
+ * @author Komgrit Niyomrath <n.komgrit@gmail.com>
+ * @author Kittithat Arnontavilas mrtomyum@gmail.com
+ * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
+ * @author Thanasak Sompaisansin <jombthep@gmail.com>
+ */
+$lang['admin_acl'] = 'จัดà¸à¸²à¸£à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸­à¹€à¸žà¸·à¹ˆà¸­à¸„วบคุมà¸à¸²à¸£à¹€à¸‚้าถึง (Access Control List:ACL)';
+$lang['acl_group'] = 'à¸à¸¥à¸¸à¹ˆà¸¡';
+$lang['acl_user'] = 'ผู้ใช้';
+$lang['acl_perms'] = 'สิทธิสำหรับ';
+$lang['page'] = 'เพจ';
+$lang['namespace'] = 'เนมสเปซ';
+$lang['btn_select'] = 'เลือà¸';
+$lang['where'] = 'เพจ/เนมสเปซ';
+$lang['who'] = 'ผู้ใช้/à¸à¸¥à¸¸à¹ˆà¸¡';
+$lang['perm'] = 'สิทธิ์';
+$lang['acl_perm0'] = 'ไร้สิทธิ์';
+$lang['acl_perm1'] = 'อ่าน';
+$lang['acl_perm2'] = 'à¹à¸à¹‰à¹„ข';
+$lang['acl_perm4'] = 'สร้าง';
+$lang['acl_perm8'] = 'อัพโหลด';
+$lang['acl_perm16'] = 'ลบ';
+$lang['acl_new'] = 'เพิ่มเนื้อหาใหม่';
+$lang['acl_mod'] = 'ปรับà¹à¸à¹‰à¹€à¸™à¸·à¹‰à¸­à¸«à¸²';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt
new file mode 100644
index 000000000..b467c5019
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt
@@ -0,0 +1,11 @@
+=== Hızlı yardım: ===
+
+Bu sayfada Wiki'nizin namespace ve sayfaları için izinleri belirleyebilirsiniz.
+
+Soldaki kısım varolan namespace ve sayfaları listeler.
+
+Yukarıdaki kısım seçilen bir kullanıcı veya grup için izinleri görüp değiştirmenizi sağlar.
+
+Aşağıdaki tablo ise varolan erişim kontrol kurallarını gösterir. Bu tabloyu birden fazla kuralı hızlıca silip değiştirmek için kullanabilirsiniz.
+
+Resmi ACL dökümanını ([[doku>acl|official documentation on ACL]]) okuyarak erişim kontrolünün nasıl çalıştığını öğrenebilirsiniz.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php
new file mode 100644
index 000000000..45fbe7489
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * turkish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Selim FarsakoÄŸlu <farsakogluselim@yahoo.de>
+ * @author Aydın Coşkuner aydinweb@gmail.com
+ * @author Aydın Coşkuner <aydinweb@gmail.com>
+ * @author yavuzselim@gmail.com
+ * @author Cihan Kahveci kahvecicihan@gmail.com
+ * @author Yavuz Selim <yavuzselim@gmail.com>
+ */
+$lang['admin_acl'] = 'Erişim Kontrol Listesi (ACL) Yönetimi';
+$lang['acl_group'] = 'Grup';
+$lang['acl_user'] = 'Kullanıcı';
+$lang['acl_perms'] = 'Şunun için yetkiler:';
+$lang['page'] = 'Sayfa';
+$lang['namespace'] = 'Namespace';
+$lang['btn_select'] = 'Seç';
+$lang['p_user_id'] = '<b class="acluser">%s</b> kullanıcısının şu anda <b class="aclpage">%s</b> sayfası için yetkisi: <i>%s</i>.';
+$lang['p_user_ns'] = '<b class="acluser">%s</b> kullanıcısının şu anda <b class="aclns">%s</b> namesapace\'i için yetkisi: <i>%s</i>.';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> grubunun şu anda <b class="aclpage">%s</b> sayfası için yetkisi: <i>%s</i>.';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> grubunun şu anda <b class="aclns">%s</b> namesapace\'i için yetkisi: <i>%s</i>.';
+$lang['p_choose_id'] = 'Lütfen <b class="aclpage">%s</b> sayfasına izin verilen yetkilerini görmek veya değiştirmek için yukarıdaki forma <b>bir kullanıcı veya grup adı</b> girin.';
+$lang['p_choose_ns'] = 'Lütfen <b class="aclpage">%s</b> namespace\'ie izin verilen yetkileri görmek veya değiştirmek için yukarıdaki forma <b>bir kullanıcı veya grup adı</b> girin.';
+$lang['p_inherited'] = 'Not: Bu izinler doğrudan ayarlanmadan başka grup veya üst namespace\'lerden gelmektedir.';
+$lang['p_isadmin'] = 'Not: Seçili grup veya kullanıcı, "Ana kullanıcı" olarak atandığından tüm izinlere sahiptir.';
+$lang['p_include'] = 'Üst seviye izinler alt izinleri içermektedir. Oluşturma, Yükleme ve Silme yetkisi sadece namespace\'e uygulanmaktadır. Bu yetki sayfalara uygulanmaz.';
+$lang['current'] = 'Şimdiki ACL(İzin Kontrol listesi) kuralları';
+$lang['where'] = 'Sayfa/Namespace';
+$lang['who'] = 'Kullanıcı/Grup';
+$lang['perm'] = 'Ä°zinler';
+$lang['acl_perm0'] = 'Yok';
+$lang['acl_perm1'] = 'Okuma';
+$lang['acl_perm2'] = 'DeÄŸiÅŸtirme';
+$lang['acl_perm4'] = 'OluÅŸturma';
+$lang['acl_perm8'] = 'Yükleme';
+$lang['acl_perm16'] = 'Silme';
+$lang['acl_new'] = 'Yeni giriÅŸ ekle';
+$lang['acl_mod'] = 'Eski giriÅŸi deÄŸiÅŸtirme';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt
new file mode 100644
index 000000000..d16af0aa9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt
@@ -0,0 +1,11 @@
+=== Швидка довідка: ===
+
+Ðа цій Ñторінці ви можете додавати чи знищувати права доÑтупу Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñторів імен чи Ñторінок вашої вікі.
+
+Ліва панель показує вÑÑ– доÑтупні проÑтори імен Ñ– Ñторінки.
+
+Ð’ÐµÑ€Ñ…Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ð° дозволÑÑ” переглÑнути Ñ– редагувати права доÑтупу Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð½Ð¾Ð³Ð¾ кориÑтувача чи групи
+
+Ð’ таблиці знизу показані вÑÑ– оголошені правила доÑтупу. Можете Ñ—Ñ— викориÑтовувати Ð´Ð»Ñ ÑˆÐ²Ð¸Ð´ÐºÐ¾Ð³Ð¾ Ð·Ð½Ð¸Ñ‰ÐµÐ½Ð½Ñ Ñ‡Ð¸ модифікації кількох правил.
+
+Додаткова допомога в [[doku>acl|офіційній документації по ACL]] допоможе вам більше зрозуміти Ñк працює контроль доÑтупу у ДокуВікі. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php
new file mode 100644
index 000000000..dc3e6a963
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * ukrainian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oleksiy Voronin <ovoronin@gmail.com>
+ * @author serg_stetsuk@ukr.net
+ * @author okunia@gmail.com
+ * @author Oleksandr Kunytsia <okunia@gmail.com>
+ * @author Uko uko@uar.net
+ */
+$lang['admin_acl'] = 'ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÑпиÑками контролю доÑтупу';
+$lang['acl_group'] = 'Група';
+$lang['acl_user'] = 'КориÑтувач';
+$lang['acl_perms'] = 'Права доÑтупу длÑ';
+$lang['page'] = 'Сторінка';
+$lang['namespace'] = 'ПроÑÑ‚Ñ–Ñ€ імен';
+$lang['btn_select'] = 'Вибрати';
+$lang['p_user_id'] = 'КориÑтувач <b class="acluser">%s</b> зараз має такі права доÑтупу до Ñторінки <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_user_ns'] = 'КориÑтувач <b class="acluser">%s</b> зараз має такі права доÑтупу до проÑтору імен <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_group_id'] = 'Члени групи <b class="aclgroup">%s</b> зараз мають такі права Ð´Ð»Ñ Ñторінки <b class="aclpage">%s</b>: <i>%s</i>.';
+$lang['p_group_ns'] = 'Члени групи <b class="aclgroup">%s</b> зараз мають такі права доÑтупу до проÑтору імен <b class="aclns">%s</b>: <i>%s</i>.';
+$lang['p_choose_id'] = 'Будь-лаÑка <b>введіть кориÑтувача або групу<b> в поле зверху, щоб подивитиÑÑ Ñ‡Ð¸ змінити права доÑтупу до Ñторінки <b class="aclpage">%s</b>.';
+$lang['p_choose_ns'] = 'Будь-лаÑка <b>введіть кориÑтувача або групу<b> у вікно зверху, щоб подивитиÑÑ Ñ‡Ð¸ змінити права доÑтупу до Ñторінки <b class="aclns">%s</b>.';
+$lang['p_inherited'] = 'Зверніть увагу! Права доÑтупу, не вÑтановлені Ñвно, наÑлідуютьÑÑ Ð²Ñ–Ð´ інших груп чи вищих проÑторів імен.';
+$lang['p_isadmin'] = 'Зверніть увагу! Обрані група чи кориÑтувач завжди мають повні права доÑтупу, оÑкільки вони Ñ” ÑуперкориÑтувачами.';
+$lang['p_include'] = 'Старші права доÑтупу включають молодші. СтвореннÑ, Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð·Ð°ÑтоÑовні лише до проÑторів імен.';
+$lang['current'] = 'Поточні правила ACL';
+$lang['where'] = 'Сторінка/ПроÑÑ‚Ñ–Ñ€ імен';
+$lang['who'] = 'КориÑтувач/Група';
+$lang['perm'] = 'Права доÑтупу';
+$lang['acl_perm0'] = 'Жодних';
+$lang['acl_perm1'] = 'ЧитаннÑ';
+$lang['acl_perm2'] = 'РедагуваннÑ';
+$lang['acl_perm4'] = 'СтвореннÑ';
+$lang['acl_perm8'] = 'ЗавантаженнÑ';
+$lang['acl_perm16'] = 'ВилученнÑ';
+$lang['acl_new'] = 'Додати новий запиÑ';
+$lang['acl_mod'] = 'Змінити запиÑ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php
new file mode 100644
index 000000000..4458d806b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * vietnamese language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author James Do <jdo@myrealbox.com>
+ */
+
+$lang['admin_acl'] = 'Quản lý phép truy nhật {Access Control List}';
+$lang['acl_group'] = 'Nhóm';
+$lang['acl_user'] = 'NgÆ°á»i';
+$lang['acl_perms'] = 'Phép truy nhập cho';
+$lang['page'] = 'Trang';
+$lang['namespace'] = 'Không gian tên';
+
+$lang['acl_perm1'] = 'Äá»c';
+$lang['acl_perm2'] = 'Biên soạn';
+$lang['acl_perm4'] = 'Tạo';
+$lang['acl_perm8'] = 'Tải lên';
+$lang['acl_new'] = 'Thêm mục mới';
+//Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt
new file mode 100644
index 000000000..871c1f4f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt
@@ -0,0 +1,11 @@
+=== 快速指å—: ===
+
+在此é é¢ä½ å¯ä»¥ç‚ºä½ çš„wiki中的namespace以åŠé é¢å¢žåŠ æˆ–移除權é™
+
+左方的é¢æ¿é¡¯ç¤ºäº†æ‰€æœ‰çš„namespace以åŠé é¢
+
+上方的表格å…許你觀看以åŠä¿®æ”¹è¢«é¸æ“‡çš„使用者或群組的權é™
+
+下方的表格顯示了目å‰æ‰€æœ‰çš„å­˜å–控制è¦å‰‡(ACL) ä½ å¯ä»¥ä½¿ç”¨å®ƒå¿«é€Ÿçš„刪除或更改多項è¦å‰‡
+
+閱讀 [[doku>acl|official documentation on ACL]] 也許å¯ä»¥å¹«åŠ©ä½ åŽ»å®Œæ•´åœ°äº†è§£åœ¨DokuWiki中, å­˜å–控制是如何é‹ä½œçš„.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php
new file mode 100644
index 000000000..d64e85a92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Chinese(Traditional) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author chinsan <chinsan@mail2000.com.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-simptrad.html
+ * @author Wayne San <waynesan@zerozone.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
+ * @author Cheng-Wei Chien <e.cwchien@gmail.com>
+ */
+$lang['admin_acl'] = '設定 ACL å­˜å–åå–®';
+$lang['acl_group'] = '群組';
+$lang['acl_user'] = '帳號';
+$lang['acl_perms'] = '設定權é™æ–¼';
+$lang['page'] = 'é é¢';
+$lang['namespace'] = '命å空間';
+$lang['btn_select'] = 'é¸æ“‡';
+$lang['p_user_id'] = '使用者 <b class="acluser">%s</b> 在é é¢ <b class="aclpage">%s</b>ç›®å‰æ“有以下的權é™: <i>%s</i>.';
+$lang['p_user_ns'] = '用戶 <b class=\"acluser\">%s</b> 當å‰åœ¨å‘½å空間 <b class=\"aclns\">%s</b> æ“有以下權é™ï¼š<i>%s</i>。';
+$lang['p_group_id'] = '群組 <b class="aclgroup">%s</b> çš„æˆå“¡ç›®å‰å°æ–¼é é¢ <b class="aclpage">%s</b> æ“有以下的權é™: <i>%s</i>.';
+$lang['p_group_ns'] = '<b class=\"aclgroup\">%s</b> 組æˆå“¡ç•¶å‰åœ¨å‘½å空間 <b class=\"aclns\">%s</b> æ“有以下權é™ï¼š<i>%s</i>。';
+$lang['p_choose_id'] = '請在上方的表格中 <b>輸入一個帳號或群組</b> 來觀看或編輯é é¢ <b class="aclpage">%s</b> 的權é™.';
+$lang['p_choose_ns'] = '請在上表中<b>輸入用戶å或組å稱</b>,來查看或編輯命å空間 <b class=\"aclns\">%s</b> 的權é™è¨­ç½®ã€‚';
+$lang['p_inherited'] = '請注æ„:這些權é™ä¸¦æ²’有明確設定,而是從其他組或更高級的å稱空間繼承而來。';
+$lang['p_isadmin'] = '請注æ„:é¸å®šçš„組或用戶æ“有完全權é™ï¼Œå› ç‚ºå®ƒè¢«è¨­å®šç‚ºè¶…級用戶。';
+$lang['p_include'] = '較高的權é™äº¦åŒ…å«äº†è¼ƒä½Žçš„權é™ã€‚新增ã€ä¸Šå‚³èˆ‡åˆªé™¤æ¬Šé™åªèƒ½åœ¨å‘½å空間中使用,而éžé é¢ã€‚';
+$lang['current'] = 'ç›®å‰çš„ACLè¦å‰‡';
+$lang['where'] = 'é é¢/命å空間';
+$lang['who'] = '使用者/群組';
+$lang['perm'] = '權é™';
+$lang['acl_perm0'] = 'ç„¡';
+$lang['acl_perm1'] = '讀å–權é™';
+$lang['acl_perm2'] = '編輯é é¢';
+$lang['acl_perm4'] = '新增é é¢';
+$lang['acl_perm8'] = '上傳圖檔';
+$lang['acl_perm16'] = '刪除檔案';
+$lang['acl_new'] = '新增管ç†è¦å‰‡';
+$lang['acl_mod'] = '修改è¦å‰‡';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt
new file mode 100644
index 000000000..526dcee9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt
@@ -0,0 +1,11 @@
+=== 快速帮助 ===
+
+本页中您å¯ä»¥æ·»åŠ æˆ–移除命å空间或页é¢çš„æƒé™ã€‚
+
+左边的窗格显示的是全部å¯ç”¨çš„命å空间和页é¢ã€‚
+
+您å¯ä»¥åœ¨ä¸Šæ–¹çš„表格中查看并修改选定用户或组的æƒé™ã€‚
+
+下方的表格中显示的是当å‰è®¾ç½®çš„全部访问控制规则。 您å¯ä»¥é€šè¿‡å®ƒå¿«é€Ÿåˆ é™¤æˆ–更改多æ¡è§„则。
+
+å‚阅 [[doku>acl|official documentation on ACL]] 能帮助您完整地ç†è§£ DokuWiki 中的访问控制是如何工作的。
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php
new file mode 100644
index 000000000..6ae32b01c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Chinese(Simplified) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author ZDYX <zhangduyixiong@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
+ * @author George Sheraton guxd@163.com
+ * @author Simon zhan <simonzhan@21cn.com>
+ * @author mr.jinyi@gmail.com
+ */
+$lang['admin_acl'] = '访问控制列表(ACL)管ç†å™¨';
+$lang['acl_group'] = '组';
+$lang['acl_user'] = '用户';
+$lang['acl_perms'] = '许å¯ç»™';
+$lang['page'] = '页é¢';
+$lang['namespace'] = '命å空间';
+$lang['btn_select'] = 'é¸æ“‡';
+$lang['p_user_id'] = '用户 <b class="acluser">%s</b> 当å‰åœ¨é¡µé¢ <b class="aclpage">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_user_ns'] = '用户 <b class="acluser">%s</b> 当å‰åœ¨å‘½å空间 <b class="aclns">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_group_id'] = '<b class="aclgroup">%s</b> 组æˆå‘˜å½“å‰åœ¨é¡µé¢ <b class="aclpage">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_group_ns'] = '<b class="aclgroup">%s</b> 组æˆå‘˜å½“å‰åœ¨å‘½å空间 <b class="aclns">%s</b> 拥有以下æƒé™ï¼š<i>%s</i>。';
+$lang['p_choose_id'] = '请在上表中<b>输入用户å或组å称</b>,æ¥æŸ¥çœ‹æˆ–ç¼–è¾‘é¡µé¢ <b class="aclpage">%s</b> çš„æƒé™è®¾ç½®ã€‚';
+$lang['p_choose_ns'] = '请在上表中<b>输入用户å或组å称</b>,æ¥æŸ¥çœ‹æˆ–编辑命å空间 <b class="aclns">%s</b> çš„æƒé™è®¾ç½®ã€‚';
+$lang['p_inherited'] = '请注æ„:这些æƒé™å¹¶æ²¡æœ‰æ˜Žç¡®è®¾å®šï¼Œè€Œæ˜¯ä»Žå…¶ä»–组或更高级的å称空间继承而æ¥ã€‚';
+$lang['p_isadmin'] = '请注æ„:选定的组或用户拥有完全æƒé™ï¼Œå› ä¸ºå®ƒè¢«è®¾å®šä¸ºè¶…级用户。';
+$lang['p_include'] = '高æƒé™åŒ…å«ä½Žæƒé™ã€‚创建ã€ä¸Šä¼ å’Œåˆ é™¤æƒé™åªèƒ½åº”用于å称空间,而ä¸æ˜¯å•ä¸ªé¡µé¢ã€‚';
+$lang['current'] = 'å½“å‰ ACL 规则';
+$lang['where'] = '页é¢/命å空间';
+$lang['who'] = '用户/组';
+$lang['perm'] = 'æƒé™';
+$lang['acl_perm0'] = 'æ— ';
+$lang['acl_perm1'] = '读å–';
+$lang['acl_perm2'] = '编辑';
+$lang['acl_perm4'] = '创建';
+$lang['acl_perm8'] = '上传';
+$lang['acl_perm16'] = '删除';
+$lang['acl_new'] = '添加新æ¡ç›®';
+$lang['acl_mod'] = '编辑æ¡ç›®';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png
new file mode 100644
index 000000000..7fb4e1f1e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png
new file mode 100644
index 000000000..da3c2a2d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png
new file mode 100644
index 000000000..03ddd799f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png
new file mode 100644
index 000000000..8fd539e9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js
new file mode 100644
index 000000000..21f161a97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js
@@ -0,0 +1,163 @@
+acl = {
+ init: function(){
+ this.ctl = DOKUid('acl_manager');
+ if(!this.ctl) return;
+
+ var sel = DOKUid('acl__user').getElementsByTagName('select')[0];
+
+ addEvent(sel,'change',acl.userselhandler);
+ addEvent(DOKUid('acl__tree'),'click',acl.treehandler);
+ addEvent(DOKUid('acl__user').getElementsByTagName('input')[1],'click',acl.loadinfo);
+ },
+
+
+ /**
+ * Handle user dropdown
+ */
+ userselhandler: function(e){
+ // make entry field visible/invisible
+ if(this.value == '__g__' || this.value == '__u__'){
+ DOKUid('acl__user').getElementsByTagName('input')[0].style.display = ''; //acl_w
+ DOKUid('acl__user').getElementsByTagName('input')[1].style.display = ''; //submit
+ }else{
+ DOKUid('acl__user').getElementsByTagName('input')[0].style.display = 'none';
+ DOKUid('acl__user').getElementsByTagName('input')[1].style.display = 'none';
+ }
+
+ acl.loadinfo();
+ },
+
+ /**
+ * Load the current permission info and edit form
+ *
+ * @param frm - Form element with needed data
+ */
+ loadinfo: function(){
+ // get form
+ var frm = DOKUid('acl__detail').getElementsByTagName('form')[0];
+
+ // prepare an AJAX call
+ var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ // prepare data
+ var data = Array();
+ data[0] = ajax.encVar('ns',frm.elements['ns'].value);
+ data[1] = ajax.encVar('id',frm.elements['id'].value);
+ data[2] = ajax.encVar('acl_t',frm.elements['acl_t'].value);
+ data[3] = ajax.encVar('acl_w',frm.elements['acl_w'].value);
+ data[4] = ajax.encVar('sectok',frm.elements['sectok'].value);
+ data[5] = ajax.encVar('ajax','info');
+
+ ajax.elementObj = DOKUid('acl__info');
+
+ ajax.runAJAX(data.join('&'));
+ return false;
+ },
+
+ /**
+ * parse URL attributes into a associative array
+ *
+ * @todo put into global script lib?
+ */
+ parseatt: function(str){
+ if(str[0] == '?') str = str.substr(1);
+ var attributes = {};
+ var all = str.split('&');
+ for(var i=0; i<all.length; i++){
+ var att = all[i].split('=');
+ attributes[att[0]] = decodeURIComponent(att[1]);
+ }
+ return attributes;
+ },
+
+ /**
+ * htmlspecialchars equivalent
+ *
+ * @todo put in gloabl scripts lib?
+ */
+ hsc: function(str) {
+ str = str.replace(/&/g,"&amp;");
+ str = str.replace(/\"/g,"&quot;");
+ str = str.replace(/\'/g,"&#039;");
+ str = str.replace(/</g,"&lt;");
+ str = str.replace(/>/g,"&gt;");
+ return str;
+ },
+
+
+ /**
+ * Open or close a subtree using AJAX
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treetoggle: function(clicky){
+ var listitem = clicky.parentNode.parentNode;
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(sublists.length){
+ listitem.removeChild(sublists[0]);
+ clicky.src = DOKU_BASE+'lib/images/plus.gif';
+ clicky.alt = '+';
+ return false;
+ }
+
+ // get the enclosed link (is always the first one)
+ var link = listitem.getElementsByTagName('a')[0];
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/plugins/acl/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ listitem.appendChild(ul);
+ ajax.elementObj = ul;
+ ajax.runAJAX(link.search.substr(1)+'&ajax=tree');
+ clicky.src = DOKU_BASE+'lib/images/minus.gif';
+ return false;
+ },
+
+ /**
+ * Handles all clicks in the tree, dispatching the right action based on the
+ * clicked element
+ */
+ treehandler: function(e){
+ if(e.target.src){ // is it an image?
+ acl.treetoggle(e.target);
+ } else if(e.target.href){ // is it a link?
+ // remove highlighting
+ var obj = getElementsByClass('cur',DOKUid('acl__tree'),'a');
+ for(var i=0; i<obj.length; i++){
+ obj[i].className = obj[i].className.replace(/ cur/,'');
+ }
+
+ // add new highlighting
+ e.target.className += ' cur';
+
+ // set new page to detail form
+ var frm = DOKUid('acl__detail').getElementsByTagName('form')[0];
+ if(e.target.className.search(/wikilink1/) > -1){
+ frm.elements['ns'].value = '';
+ frm.elements['id'].value = acl.hsc(acl.parseatt(e.target.search)['id']);
+ }else if(e.target.className.search(/idx_dir/) > -1){
+ frm.elements['ns'].value = acl.hsc(acl.parseatt(e.target.search)['ns']);
+ frm.elements['id'].value = '';
+ }
+
+ acl.loadinfo();
+ }
+
+ e.stopPropagation();
+ e.preventDefault();
+ return false;
+ }
+
+};
+
+addInitEvent(acl.init);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css
new file mode 100644
index 000000000..0c5a9819b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css
@@ -0,0 +1,96 @@
+
+div#acl_manager div#acl__tree {
+ font-size: 90%;
+ width: 25%;
+ height: 300px;
+ float: left;
+ overflow: auto;
+ border: 1px solid __border__;
+ text-align: left;
+}
+
+div#acl_manager div#acl__tree a.cur {
+ background-color: __highlight__;
+ font-weight: bold;
+}
+
+div#acl_manager div#acl__tree ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+
+div#acl_manager div#acl__tree li {
+ padding-left: 1em;
+}
+
+div#acl_manager div#acl__tree ul img {
+ margin-right: 0.25em;
+ cursor: pointer;
+}
+
+div#acl_manager div#acl__detail {
+ width: 73%;
+ height: 300px;
+ float: right;
+ overflow: auto;
+}
+
+div#acl_manager div#acl__detail fieldset {
+ width: 90%;
+}
+
+div#acl_manager div#acl__detail div#acl__user {
+ border: 1px solid __border__;
+ padding: 0.5em;
+ margin-bottom: 0.6em;
+}
+
+div#acl_manager table.inline {
+ width: 100%;
+ margin: 0;
+}
+
+div#acl_manager .aclgroup {
+ background: transparent url(pix/group.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager .acluser {
+ background: transparent url(pix/user.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager .aclpage {
+ background: transparent url(pix/page.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager .aclns {
+ background: transparent url(pix/ns.png) 0px 1px no-repeat;
+ padding: 1px 0px 1px 18px;
+}
+
+div#acl_manager label.disabled {
+ color: __text_neu__!important;
+}
+
+#acl_manager label {
+ text-align: left;
+ font-weight: normal;
+ display: inline;
+}
+
+#acl_manager table {
+ margin-left: 10%;
+ width: 80%;
+}
+
+#acl_manager table tr {
+ background-color: inherit;
+}
+
+#acl_manager table tr:hover {
+ background-color: __background_alt__;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php
new file mode 100644
index 000000000..a26bc654a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Action Plugin Prototype
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/plugin.php');
+
+/**
+ * All DokuWiki plugins to interfere with the event system
+ * need to inherit from this class
+ */
+class DokuWiki_Action_Plugin extends DokuWiki_Plugin {
+
+ /**
+ * Registers a callback function for a given event
+ */
+ function register($controller) {
+ trigger_error('register() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php
new file mode 100644
index 000000000..2eeda3f7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Admin Plugin Prototype
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/plugin.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class DokuWiki_Admin_Plugin extends DokuWiki_Plugin {
+
+ function getMenuText($language) {
+ $menutext = $this->getLang('menu');
+ if (!$menutext) {
+ $info = $this->getInfo();
+ $menutext = $info['name'].' ...';
+ }
+ return $menutext;
+ }
+
+ function getMenuSort() {
+ return 1000;
+ }
+
+ function handle() {
+ trigger_error('handle() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ function html() {
+ trigger_error('html() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ function forAdminOnly() {
+ return true;
+ }
+
+ function getTOC(){
+ return array();
+ }
+}
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css
new file mode 100644
index 000000000..956b8a38b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css
@@ -0,0 +1,274 @@
+@CHARSET "UTF-8";
+
+/* plugin:box */
+div.box {
+ width: 50%;
+ margin: 1em auto;
+ border: 1px solid;
+ padding: 4px;
+ overflow: hidden;
+}
+
+/* rounded corners styles from Stu Nicholls snazzy borders, http://www.cssplay.co.uk/boxes/snazzy.html */
+.xtop, .xbottom {background:transparent; font-size:0; line-height: 1px;}
+.xb1, .xb2, .xb3, .xb4 {display:block; overflow:hidden; border-style: solid;}
+.xb2, .xb3 {height:1px;}
+.xb2, .xb3, .xb4 {border-width:0 1px;}
+.xb1 {height: 0; margin:0 5px; border-width:1px 0 0 0;}
+.xb2 {margin:0 3px; border-width:0 2px;}
+.xb3 {margin:0 2px;}
+.xb4 {height:2px; margin:0 1px;}
+
+div.box .xtop, div.box .xbottom {display: none;}
+div.box.round > .xtop, div.box.round > .xbottom {display: block;}
+
+div.box.round { border: none; padding: 0;}
+div.box.round > .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+div.box p.box_title, div.box p.box_caption {
+ font-size: 90%;
+ margin: 0;
+ padding: 2px 6px;
+ line-height: 1.2;
+}
+
+div.box p.box_title { margin-bottom: 4px;}
+div.box p.box_caption { margin-top: 4px;}
+
+div.box .box_content {
+ margin: 0;
+ padding: 0 6px;
+ border-width: 1px;
+ border-style: dashed;
+ line-height: 1.2;
+}
+
+/* floating alignment */
+
+div.box.left {
+ float: left;
+ margin-right: 1em;
+}
+
+div.box.right {
+ float: right;
+ margin-left: 1em;
+}
+
+/* colours */
+/* default */
+div.box, div.box .box_content, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ border-color: __dark__;
+}
+
+div.box, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ background: __light__;
+}
+
+div.box p.box_title, div.box p.box_caption { background: __medium__;}
+div.box .box_content { background: __lighter__;}
+
+/* blue */
+div.box.blue, div.box.blue > * > .box_content, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ border-color: #bbbbdd;
+}
+
+div.box.blue, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ background: #e4ecf8;
+}
+
+div.box.blue > * > p.box_title, div.box.blue > * > p.box_caption {background: #cad0ee;}
+div.box.blue > * > .box_content {background: #f4f8fd;}
+
+/* red */
+div.box.red, div.box.red > * > .box_content, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ border-color: #ddbbbb;
+}
+
+div.box.red, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ background: #f8ece4;
+}
+
+div.box.red > * > p.box_title, div.box.red > * > p.box_caption {background: #eed0ca;}
+div.box.red > * > .box_content {background: #fdf4ec;}
+
+/* green */
+div.box.green, div.box.green > * > .box_content, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ border-color: #bbddbb;
+}
+
+div.box.green, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ background: #e4f8f2;
+}
+
+div.box.green > * > p.box_title, div.box.green > * > p.box_caption {background: #c4e4d4;}
+div.box.green > * > .box_content {background: #ecfaf6;}
+
+/* orange */
+div.box.orange, div.box.orange > * > .box_content, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ border-color: #da3;
+}
+
+div.box.orange, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ background: #f4e8ca;
+}
+
+div.box.orange > * > p.box_title, div.box.orange > * > p.box_caption {background: #f0d499;}
+div.box.orange > * > .box_content {background: #f8f0da;}
+
+/* must come last to override coloured background when using rounded corners */
+
+div.box.round {
+ background: transparent !important;
+}
+
+/* IE fixes for unsupported child selector \*/
+
+* html div.box div.box, * html div.box div.box .box_content, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ border-color: __dark__;
+}
+
+* html div.box div.box, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ background: __light__;
+}
+
+* html div.box div.box p.box_title, * html div.box div.box p.box_caption { background: __medium__;}
+* html div.box div.box .box_content { background: __lighter__;}
+
+* html div.box.round .xtop, * html div.box.round .xbottom {display: block;}
+* html div.box.round .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+/* blue */
+* html div.box.blue .box_content, * html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box.blue p.box_title, * html div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box.blue .box_content {background: #f4f8fd;}
+
+/* nested blue */
+* html div.box div.box.blue .box_content, * html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box div.box.blue p.box_title,
+* html div.box div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box div.box.blue .box_content {background: #f4f8fd;}
+
+/* red */
+* html div.box.red .box_content, * html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box.red p.box_title, * html div.box.red p.box_caption {background: #eed0ca;}
+* html div.box.red .box_content {background: #fdf4ec;}
+
+/* nested red */
+* html div.box div.box.red .box_content, * html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box div.box.red p.box_title, * html div.box div.box.red p.box_caption {background: #eed0ca;}
+* html div.box div.box.red .box_content {background: #fdf4ec;}
+
+/* green */
+* html div.box.green .box_content, * html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box.green p.box_title, * html div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box.green .box_content {background: #ecfaf6;}
+
+/* nested green */
+* html div.box div.box.green .box_content, * html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box div.box.green p.box_title, * html div.box div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box div.box.green .box_content {background: #ecfaf6;}
+
+/* orange */
+* html div.box.orange .box_content, * html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box.orange p.box_title, * html div.box.orange p.box_caption {background: #f0d499;}
+* html div.box.orange .box_content {background: #f8f0da;}
+
+/* nestedorange */
+* html div.box div.box.orange .box_content, * html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box div.box.orange p.box_title, * html div.box div.box.orange p.box_caption {background: #f0d499;}
+* html div.box div.box.orange .box_content {background: #f8f0da;}
+
+/* end plugin:box */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css
new file mode 100644
index 000000000..f20d765bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css
@@ -0,0 +1,272 @@
+/* plugin:box */
+div.box {
+ width: 50%;
+ margin: 1em auto;
+ border: 1px solid;
+ padding: 4px;
+ overflow: hidden;
+}
+
+/* rounded corners styles from Stu Nicholls snazzy borders, http://www.cssplay.co.uk/boxes/snazzy.html */
+.xtop, .xbottom {background:transparent; font-size:0; line-height: 1px;}
+.xb1, .xb2, .xb3, .xb4 {display:block; overflow:hidden; border-style: solid;}
+.xb2, .xb3 {height:1px;}
+.xb2, .xb3, .xb4 {border-width:0 1px;}
+.xb1 {height: 0; margin:0 5px; border-width:1px 0 0 0;}
+.xb2 {margin:0 3px; border-width:0 2px;}
+.xb3 {margin:0 2px;}
+.xb4 {height:2px; margin:0 1px;}
+
+div.box .xtop, div.box .xbottom {display: none;}
+div.box.round > .xtop, div.box.round > .xbottom {display: block;}
+
+div.box.round { border: none; padding: 0;}
+div.box.round > .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+div.box p.box_title, div.box p.box_caption {
+ font-size: 90%;
+ margin: 0;
+ padding: 2px 6px;
+ line-height: 1.2;
+}
+
+div.box p.box_title { margin-bottom: 4px;}
+div.box p.box_caption { margin-top: 4px;}
+
+div.box .box_content {
+ margin: 0;
+ padding: 0 6px;
+ border-width: 1px;
+ border-style: dashed;
+ line-height: 1.2;
+}
+
+/* floating alignment */
+
+div.box.left {
+ float: left;
+ margin-right: 1em;
+}
+
+div.box.right {
+ float: right;
+ margin-left: 1em;
+}
+
+/* colours */
+/* default */
+div.box, div.box .box_content, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ border-color: __dark__;
+}
+
+div.box, div.box .xbox, div.box .xb1, div.box .xb2, div.box .xb3, div.box .xb4 {
+ background: __light__;
+}
+
+div.box p.box_title, div.box p.box_caption { background: __medium__;}
+div.box .box_content { background: __lighter__;}
+
+/* blue */
+div.box.blue, div.box.blue > * > .box_content, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ border-color: #bbbbdd;
+}
+
+div.box.blue, div.box.blue > .xbox,
+div.box.blue > * > .xb1, div.box.blue > * > .xb2, div.box.blue > * > .xb3, div.box.blue > * > .xb4 {
+ background: #e4ecf8;
+}
+
+div.box.blue > * > p.box_title, div.box.blue > * > p.box_caption {background: #cad0ee;}
+div.box.blue > * > .box_content {background: #f4f8fd;}
+
+/* red */
+div.box.red, div.box.red > * > .box_content, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ border-color: #ddbbbb;
+}
+
+div.box.red, div.box.red > .xbox,
+div.box.red > * > .xb1, div.box.red > * > .xb2, div.box.red > * > .xb3, div.box.red > * > .xb4 {
+ background: #f8ece4;
+}
+
+div.box.red > * > p.box_title, div.box.red > * > p.box_caption {background: #eed0ca;}
+div.box.red > * > .box_content {background: #fdf4ec;}
+
+/* green */
+div.box.green, div.box.green > * > .box_content, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ border-color: #bbddbb;
+}
+
+div.box.green, div.box.green > .xbox,
+div.box.green > * > .xb1, div.box.green > * > .xb2, div.box.green > * > .xb3, div.box.green > * > .xb4 {
+ background: #e4f8f2;
+}
+
+div.box.green > * > p.box_title, div.box.green > * > p.box_caption {background: #c4e4d4;}
+div.box.green > * > .box_content {background: #ecfaf6;}
+
+/* orange */
+div.box.orange, div.box.orange > * > .box_content, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ border-color: #da3;
+}
+
+div.box.orange, div.box.orange > .xbox,
+div.box.orange > * > .xb1, div.box.orange > * > .xb2, div.box.orange > * > .xb3, div.box.orange > * > .xb4 {
+ background: #f4e8ca;
+}
+
+div.box.orange > * > p.box_title, div.box.orange > * > p.box_caption {background: #f0d499;}
+div.box.orange > * > .box_content {background: #f8f0da;}
+
+/* must come last to override coloured background when using rounded corners */
+
+div.box.round {
+ background: transparent !important;
+}
+
+/* IE fixes for unsupported child selector \*/
+
+* html div.box div.box, * html div.box div.box .box_content, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ border-color: __dark__;
+}
+
+* html div.box div.box, * html div.box div.box .xbox,
+* html div.box div.box .xb1, * html div.box div.box .xb2,
+* html div.box div.box .xb3, * html div.box div.box .xb4 {
+ background: __light__;
+}
+
+* html div.box div.box p.box_title, * html div.box div.box p.box_caption { background: __medium__;}
+* html div.box div.box .box_content { background: __lighter__;}
+
+* html div.box.round .xtop, * html div.box.round .xbottom {display: block;}
+* html div.box.round .xbox {display:block; border-width:0 1px; border-style: solid; padding: 0 4px; }
+
+/* blue */
+* html div.box.blue .box_content, * html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box.blue .xbox,
+* html div.box.blue .xb1, * html div.box.blue .xb2, * html div.box.blue .xb3, * html div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box.blue p.box_title, * html div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box.blue .box_content {background: #f4f8fd;}
+
+/* nested blue */
+* html div.box div.box.blue .box_content, * html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ border-color: #bbbbdd;
+}
+
+* html div.box div.box.blue .xbox,
+* html div.box div.box.blue .xb1, * html div.box div.box.blue .xb2,
+* html div.box div.box.blue .xb3, * html div.box div.box.blue .xb4 {
+ background: #e4ecf8;
+}
+
+* html div.box div.box.blue p.box_title,
+* html div.box div.box.blue p.box_caption {background: #cad0ee;}
+* html div.box div.box.blue .box_content {background: #f4f8fd;}
+
+/* red */
+* html div.box.red .box_content, * html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box.red .xbox,
+* html div.box.red .xb1, * html div.box.red .xb2, * html div.box.red .xb3, * html div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box.red p.box_title, * html div.box.red p.box_caption {background: #eed0ca;}
+* html div.box.red .box_content {background: #fdf4ec;}
+
+/* nested red */
+* html div.box div.box.red .box_content, * html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ border-color: #ddbbbb;
+}
+
+* html div.box div.box.red .xbox,
+* html div.box div.box.red .xb1, * html div.box div.box.red .xb2,
+* html div.box div.box.red .xb3, * html div.box div.box.red .xb4 {
+ background: #f8ece4;
+}
+
+* html div.box div.box.red p.box_title, * html div.box div.box.red p.box_caption {background: #eed0ca;}
+* html div.box div.box.red .box_content {background: #fdf4ec;}
+
+/* green */
+* html div.box.green .box_content, * html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box.green .xbox,
+* html div.box.green .xb1, * html div.box.green .xb2, * html div.box.green .xb3, * html div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box.green p.box_title, * html div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box.green .box_content {background: #ecfaf6;}
+
+/* nested green */
+* html div.box div.box.green .box_content, * html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ border-color: #bbddbb;
+}
+
+* html div.box div.box.green .xbox,
+* html div.box div.box.green .xb1, * html div.box div.box.green .xb2,
+* html div.box div.box.green .xb3, * html div.box div.box.green .xb4 {
+ background: #e4f8f2;
+}
+
+* html div.box div.box.green p.box_title, * html div.box div.box.green p.box_caption {background: #c4e4d4;}
+* html div.box div.box.green .box_content {background: #ecfaf6;}
+
+/* orange */
+* html div.box.orange .box_content, * html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box.orange .xbox,
+* html div.box.orange .xb1, * html div.box.orange .xb2, * html div.box.orange .xb3, * html div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box.orange p.box_title, * html div.box.orange p.box_caption {background: #f0d499;}
+* html div.box.orange .box_content {background: #f8f0da;}
+
+/* nestedorange */
+* html div.box div.box.orange .box_content, * html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ border-color: #da3;
+}
+
+* html div.box div.box.orange .xbox,
+* html div.box div.box.orange .xb1, * html div.box div.box.orange .xb2,
+* html div.box div.box.orange .xb3, * html div.box div.box.orange .xb4 {
+ background: #f4e8ca;
+}
+
+* html div.box div.box.orange p.box_title, * html div.box div.box.orange p.box_caption {background: #f0d499;}
+* html div.box div.box.orange .box_content {background: #f8f0da;}
+
+/* end plugin:box */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php
new file mode 100644
index 000000000..35f96f85a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php
@@ -0,0 +1,287 @@
+<?php
+/**
+ * Box Plugin: Draw highlighting boxes around wiki markup
+ *
+ * Syntax: <box width% classes|title>
+ * width% width of the box, must use % unit
+ * classes one or more classes used to style the box, several predefined styles included in style.css
+ * title (optional) all text after '|' will be rendered above the main code text with a
+ * different style.
+ *
+ * Acknowledgements:
+ * Rounded corners based on snazzy borders by Stu Nicholls (http://www.cssplay.co.uk/boxes/snazzy)
+ * which is in turn based on nifty corners by Alessandro Fulciniti (http://pro.html.it/esempio/nifty/)
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_box extends DokuWiki_Syntax_Plugin {
+
+ var $title_mode = false;
+
+ // the following are used in rendering and are set by _xhtml_boxopen()
+ var $_xb_colours = '';
+ var $_content_colours = '';
+ var $_title_colours = '';
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Christopher Smith',
+ 'email' => 'chris@jalakai.co.uk',
+ 'date' => '2008-11-11',
+ 'name' => 'Box Plugin',
+ 'desc' => 'Boxes with titles, colour and rounded corners.
+ Syntax: <box width class colours|title> ... </box|caption>
+ width, class, colours title & caption are optional.
+ The title can include some wiki markup, the box
+ contents can include almost any wiki markup.',
+ 'url' => 'http://www.dokuwiki.org/plugin:boxes',
+ );
+ }
+
+ function getType(){ return 'protected';}
+ function getAllowedTypes() { return array('container','substition','protected','disabled','formatting','paragraphs'); }
+ function getPType(){ return 'block';}
+
+ // must return a number lower than returned by native 'code' mode (200)
+ function getSort(){ return 195; }
+
+ // override default accepts() method to allow nesting
+ // - ie, to get the plugin accepts its own entry syntax
+ function accepts($mode) {
+ if ($mode == substr(get_class($this), 7)) return true;
+
+ return parent::accepts($mode);
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<box>(?=.*?</box.*?>)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('<box\s[^\r\n\|]*?>(?=.*?</box.*?>)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('<box\|(?=[^\r\n]*?\>.*?</box.*?\>)',$mode,'plugin_box');
+ $this->Lexer->addEntryPattern('<box\s[^\r\n\|]*?\|(?=[^\r\n]*?>.*?</box.*?>)',$mode,'plugin_box');
+ }
+
+ function postConnect() {
+ $this->Lexer->addPattern('>', 'plugin_box');
+ $this->Lexer->addExitPattern('</box.*?>', 'plugin_box');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+
+ switch ($state) {
+ case DOKU_LEXER_ENTER:
+ $data = $this->_boxstyle(trim(substr($match, 4, -1)));
+ if (substr($match, -1) == '|') {
+ $this->title_mode = true;
+ return array('title_open',$data);
+ } else {
+ return array('box_open',$data);
+ }
+
+ case DOKU_LEXER_MATCHED:
+ if ($this->title_mode) {
+ $this->title_mode = false;
+ return array('box_open','');
+ } else {
+ return array('data', $match);
+ }
+
+ case DOKU_LEXER_UNMATCHED:
+ $handler->_addCall('cdata',array($match), $pos);
+ return false;
+
+ case DOKU_LEXER_EXIT:
+ $data = trim(substr($match, 5, -1));
+ $title = ($data && $data{0} == "|") ? substr($data,1) : '';
+
+ return array('box_close', $title);
+
+ }
+ return false;
+ }
+
+ /**
+ * Create output
+ */
+ function render($mode, &$renderer, $indata) {
+
+ if (empty($indata)) return false;
+ list($instr, $data) = $indata;
+
+ if($mode == 'xhtml'){
+ switch ($instr) {
+ case 'title_open' :
+ $this->title_mode = true;
+ $renderer->doc .= $this->_xhtml_boxopen($data)."<p class='box_title'{$this->_title_colours}>";
+ break;
+
+ case 'box_open' :
+ if ($this->title_mode) {
+ $this->title_mode = false;
+ $renderer->doc .= "</p>\n<div class='box_content'{$this->_content_colours}>";
+ } else {
+ $renderer->doc .= $this->_xhtml_boxopen($data)."<div class='box_content'{$this->_content_colours}>";
+ }
+ break;
+
+ case 'data' :
+ $renderer->doc .= $renderer->_xmlEntities($data);
+ break;
+
+ case 'box_close' :
+ $renderer->doc .= "</div>\n";
+
+ if ($data) {
+ $renderer->doc .= "<p class='box_caption'{$this->_title_colours}>".$renderer->_xmlEntities($data)."</p>\n";
+ }
+ $renderer->doc .= $this->_xhtml_boxclose();
+ break;
+ }
+
+ return true;
+ }
+ return false;
+ }
+
+ function _boxstyle($str) {
+ if (!strlen($str)) return array();
+
+ $styles = array();
+
+ $tokens = preg_split('/\s+/', $str, 9); // limit is defensive
+ foreach ($tokens as $token) {
+ if (preg_match('/^\d*\.?\d+(%|px|em|ex|pt|cm|mm|pi|in)$/', $token)) {
+ $styles['width'] = $token;
+ continue;
+ }
+
+ if (preg_match('/^(
+ (\#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}))| #colorvalue
+ (rgb\(([0-9]{1,3}%?,){2}[0-9]{1,3}%?\)) #rgb triplet
+ )$/x', $token)) {
+ $styles['colour'][] = $token;
+ continue;
+ }
+
+ // restrict token (class names) characters to prevent any malicious data
+ if (preg_match('/[^A-Za-z0-9_-]/',$token)) continue;
+ $styles['class'] = (isset($styles['class']) ? $styles['class'].' ' : '').$token;
+ }
+ if (!empty($styles['colour'])) {
+ $styles['colour'] = $this->_box_colours($styles['colour']);
+ }
+
+ return $styles;
+ }
+
+ function _box_colours($colours) {
+ $triplets = array();
+
+ // only need the first four colours
+ if (count($colours) > 4) $colours = array_slice($colours,0,4);
+ foreach ($colours as $colour) {
+ $triplet[] = $this->_colourToTriplet($colour);
+ }
+
+ // there must be one colour to get here - the primary background
+ // calculate title background colour if not present
+ if (empty($triplet[1])) {
+ $triplet[1] = $triplet[0];
+ }
+
+ // calculate outer background colour if not present
+ if (empty($triplet[2])) {
+ $triplet[2] = $triplet[0];
+ }
+
+ // calculate border colour if not present
+ if (empty($triplet[3])) {
+ $triplet[3] = $triplet[0];
+ }
+
+ // convert triplets back to style sheet colours
+ $style_colours['content_background'] = 'rgb('.join(',',$triplet[0]).')';
+ $style_colours['title_background'] = 'rgb('.join(',',$triplet[1]).')';
+ $style_colours['outer_background'] = 'rgb('.join(',',$triplet[2]).')';
+ $style_colours['borders'] = 'rgb('.join(',',$triplet[3]).')';
+
+ return $style_colours;
+ }
+
+ function _colourToTriplet($colour) {
+ if ($colour{0} == '#') {
+ if (strlen($colour) == 4) {
+ // format #FFF
+ return array(hexdec($colour{1}.$colour{1}),hexdec($colour{2}.$colour{2}),hexdec($colour{3}.$colour{3}));
+ } else {
+ // format #FFFFFF
+ return array(hexdec(substr($colour,1,2)),hexdec(substr($colour,3,2)), hexdec(substr($colour,5,2)));
+ }
+ } else {
+ // format rgb(x,y,z)
+ return explode(',',substr($colour,4,-1));
+ }
+ }
+
+ function _xhtml_boxopen($styles) {
+ $class = 'class="box' . (isset($styles['class']) ? ' '.$styles['class'] : '') . '"';
+ $style = isset($styles['width']) ? "width: {$styles['width']};" : '';
+
+ if (isset($styles['colour'])) {
+ $colours = 'background-color: '.$styles['colour']['outer_background'].'; ';
+ $colours .= 'border-color: '.$styles['colour']['borders'].';';
+
+ $this->_content_colours = 'style="background-color: '.$styles['colour']['content_background'].'; border-color: '.$styles['colour']['borders'].'"';
+ $this->_title_colours = 'style="background-color: '.$styles['colour']['title_background'].';"';
+
+ } else {
+ $colours = '';
+
+ $this->_content_colours = '';
+ $this->_title_colours = '';
+ }
+
+ if ($style || $colours) $style = ' style="'.$style.' '.$colours.'"';
+ if ($colours) $colours = ' style="'.$colours.'"';
+
+ $this->_xb_colours = $colours;
+
+ $html = "<div $class$style>\n";
+ $html .=" <b class='xtop'><b class='xb1'$colours></b><b class='xb2'$colours></b><b class='xb3'$colours></b><b class='xb4'$colours></b></b>\n";
+ $html .=" <div class='xbox'$colours>\n";
+
+ return $html;
+ }
+
+ function _xhtml_boxclose() {
+
+ $colours = $this->_xb_colours;
+
+ $html = " </div>\n";
+ $html .= " <b class='xbottom'><b class='xb4'$colours></b><b class='xb3'$colours></b><b class='xb2'$colours></b><b class='xb1'$colours></b></b>\n";
+ $html .= "</div>\n";
+
+ return $html;
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 : \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html
@@ -0,0 +1,12 @@
+<!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>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING
new file mode 100644
index 000000000..d60c31a97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 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 Library 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
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. 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 program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS
new file mode 100644
index 000000000..cb03c247d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS
@@ -0,0 +1,58 @@
+Thanks to:
+
+Geir Landro:
+ Dtree Javascript code.
+
+Roland Hellebart:
+ The Dtree idea.
+
+Chris Beetle:
+ The root namespace index.
+
+Gleb:
+ The nons e headpage option suggestion.
+
+Malyfred:
+ Resolved incorrect namespaces levels bug.
+
+Raymond Elferink:
+ Resolved incorrect ACLs bug.
+
+Ilya Lebedev:
+ Skip index option.
+
+Franck Baron:
+ Js id option.
+
+Jon B:
+ Skip file option.
+
+Neosky:
+ Javascript toolbar bug.
+
+Paul Grove:
+ Css dynamic properties and suggestion of js theme with differents image formats
+
+Anja Vag:
+ Great help in testing and finding bugs.
+
+Blaz:
+ Current page highliting suggestion.
+
+Adrien CLERC:
+ Start page bug.
+
+Ryan Jake and Fullindex plugin:
+ Sort by metada suggestion.
+
+Herman Huitema:
+ Context menu search function and great help in testing patches.
+
+Thomas Binder:
+ Fixed a bug with msort/nsort that did not manage empty arrays.
+
+Fabian Pfannes:
+ German language
+
+Urban:
+ Context menu patch and other suggestions
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt
new file mode 100644
index 000000000..db43bc514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt
@@ -0,0 +1 @@
+2009-08-29
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php
new file mode 100644
index 000000000..ee09a980d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php
@@ -0,0 +1,169 @@
+<?php
+/**
+ * Indexmenu Action Plugin: Indexmenu Component.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+if(!defined('DOKU_INC')) die();
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'action.php');
+
+class action_plugin_indexmenu extends DokuWiki_Action_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu (action plugin component)',
+ 'desc' => 'Indexmenu action functions.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu',
+ );
+ }
+
+ /*
+ * plugin should use this method to register its handlers with the dokuwiki's event controller
+ */
+ function register(&$controller) {
+ if ($this->getConf('only_admins')) $controller->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, '_checkperm');
+ if ($this->getConf('page_index') != '') $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, '_loadindex');
+ $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, '_hookjs');
+ $controller->register_hook('PARSER_CACHE_USE', 'BEFORE', $this, '_purgecache');
+ if ($this->getConf('show_sort')) $controller->register_hook('TPL_CONTENT_DISPLAY', 'BEFORE', $this, '_showsort');
+ }
+
+ /**
+ * Check if user has permission to insert indexmenu
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _checkperm(&$event, $param) {
+ if ($this->_notadmin()) {
+ $event->data[0][1]= preg_replace("/{{indexmenu(|_n)>.+?}}/","",$event->data[0][1]);
+ }
+ }
+
+ /**
+ * Hook js script into page headers.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _hookjs(&$event, $param) {
+ global $ID;
+ global $INFO;
+ $jsmenu=DOKU_BASE."lib/plugins/indexmenu/jsmenu/";
+
+ if ($INFO['userinfo']['grps']) {
+ $jsmenu .= ($this->_notadmin()) ? "usrmenu.js" : "admmenu.js";
+ } else {
+ $jsmenu .= "menu.js";
+ }
+
+ $event->data["script"][] = array ( "type" => "text/javascript",
+ "charset" => "utf-8",
+ "_data" => "",
+ "src" => $jsmenu
+ );
+
+ $event->data["script"][] = array ( "type" => "text/javascript",
+ "charset" => "utf-8",
+ "_data" => "",
+ "src" => DOKU_BASE."lib/plugins/indexmenu/indexmenu.js"
+ );
+
+ $event->data["script"][] = array ( "type" => "text/javascript",
+ "charset" => "utf-8",
+ "_data" => "var indexmenu_ID='".idfilter($ID)."'"
+ );
+ }
+
+ /**
+ * Check for pages changes and eventually purge cache.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _purgecache(&$event, $param) {
+ global $ID;
+ global $conf;
+ $cache = &$event->data;
+
+ if (!isset($cache->page)) return;
+ //purge only xhtml cache
+ if ($cache->mode != "xhtml") return;
+ //Check if it is an indexmenu page
+ if (!p_get_metadata($ID,'indexmenu')) return;
+ $aclcache=$this->getConf('aclcache');
+ if ($conf['useacl']) {
+ $newkey=false;
+ if ($aclcache == 'user') {
+ //Cache per user
+ if ($_SERVER['REMOTE_USER']) $newkey=$_SERVER['REMOTE_USER'];
+ } else if ($aclcache == 'groups') {
+ //Cache per groups
+ global $INFO;
+ if ($INFO['userinfo']['grps']) $newkey=implode('#',$INFO['userinfo']['grps']);
+ }
+ if ($newkey) {
+ $cache->key .= "#".$newkey;
+ $cache->cache = getCacheName($cache->key, $cache->ext);
+ }
+ }
+ //Check if a page is more recent than purgefile.
+ if (@filemtime($cache->cache) < @filemtime($conf['cachedir'].'/purgefile')) {
+ $event->preventDefault();
+ $event->stopPropagation();
+ $event->result = false;
+ }
+ }
+
+ /**
+ * Render a defined page as index.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _loadindex(&$event, $param) {
+ if ('index' != $event->data) return;
+ if (!file_exists(wikiFN($this->getConf('page_index')))) return;
+ global $lang;
+ print '<h1><a id="index" name="index">'.$lang['btn_index']."</a></h1>\n";
+ print p_wiki_xhtml($this->getConf('page_index'));
+ $event->preventDefault();
+ $event->stopPropagation();
+
+ }
+
+ /**
+ * Display the indexmenu sort number.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _showsort(&$event, $param) {
+ global $ID,$ACT;
+ if ($ACT != 'show' || $this->_notadmin()) return;
+ if ($n=p_get_metadata($ID,'indexmenu_n')) {
+ ptln('<div class="info">');
+ ptln($this->getLang('showsort').$n);
+ ptln('</div>');
+ }
+ }
+
+ /**
+ * Check if user is administrator..
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _notadmin() {
+ global $conf;
+ global $INFO;
+
+ if ($conf['useacl'] && $INFO['perm'] < AUTH_ADMIN) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php
new file mode 100644
index 000000000..99b6e12a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php
@@ -0,0 +1,453 @@
+<?php
+/**
+ * Indexmenu Admin Plugin: Indexmenu Component.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'admin.php');
+require_once (DOKU_INC.'inc/HTTPClient.php');
+require_once(DOKU_PLUGIN."indexmenu/inc/pclzip.lib.php");
+if(!defined('INDEXMENU_IMG_ABSDIR')) define('INDEXMENU_IMG_ABSDIR',DOKU_PLUGIN."indexmenu/images");
+define('INDEXMENU_ICOS','base,folder,folderopen,folderh,folderhopen,page,plus,minus,nolines_plus,nolines_minus,minusbottom,plusbottom,join,joinbottom,line,empty');
+
+class admin_plugin_indexmenu extends DokuWiki_Admin_Plugin {
+ var $req = 'fetch';
+ var $repos = array (
+ "url" => array(DOKU_URL),
+ "status" => array(""),
+ );
+
+ var $selected=-1;
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu (admin plugin component)',
+ 'desc' => 'Indexmenu admin functions.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu',
+ );
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 999;
+ }
+
+ /**
+ * handle user request
+ */
+ function handle() {
+ $url=$this->getConf('themes_url');
+ if (empty($url)) {
+ $this->repos['url'][]=$this->getLang('no_repos');
+ $this->repos['status'][]="disabled";
+ $this->repos['install'][]=-1;
+ } else {
+ $this->repos['url']= array_merge($this->repos['url'],explode(',',$url));
+ }
+
+ if (!isset($_REQUEST['req'])) return; // first time - nothing to do
+ $this->req=$_REQUEST['req'];
+
+ if (is_numeric($_REQUEST['repo'])) $this->selected=$_REQUEST['repo'];
+ }
+
+ /**
+ * output appropriate html
+ */
+ function html() {
+ global $conf;
+ ptln('<div id="config__manager">');
+ ptln(' <h1>'.$this->getLang('menu').'</h1>');
+ ptln($this->_donate());
+ ptln(' <fieldset>');
+ ptln(' <legend>'.$this->getLang('checkupdates').'</legend>');
+ $this->_form_open("checkupdates");
+ $this->_form_close('check');
+ if ($this->req=='checkupdates') {
+ $this->_checkupdates();
+ }
+ ptln(' </fieldset>');
+ ptln(' <fieldset>');
+ ptln(' <legend>Themes</legend>');
+ ptln(' <table class="inline">');
+ ptln(' <tr class="default"><td class="label" colspan="2">');
+ ptln(' <span class="outkey">'.$this->getLang('infos').'</span>');
+ ptln(' </td></tr>');
+ $n=0;
+ //cycles thru repositories urls
+ foreach ($this->repos['url'] as $url) {
+ ptln(' <tr class="search_hit"><td>');
+ $legend=($n == 0) ? $conf['title'] : $this->repos['url'][$n];
+ ptln(' <span><label><strong>'.$legend.'</strong></label></span>');
+ ptln(' </td>');
+ ptln(' <td class="value">');
+ $this->_form_open("fetch",$n);
+ $this->_form_close("fetch");
+ ptln(' </td></tr>');
+ //list requested theme
+ if ($n==$this->selected) {
+ ptln(' <tr class="default"><td colspan="2">');
+ if ($this->req=='install') $this->install($this->selected,$_REQUEST['name']);
+ if ($this->req=='upload' && $_REQUEST['name']) {
+ $info="";
+ if (isset($_REQUEST['author_info'])) {
+ $obfuscate = array('@' => ' [at] ', '.' => ' [dot] ', '-' => ' [dash] ');
+ $info .= "author=".strtr($_REQUEST['author_info'], $obfuscate)."\n";
+ }
+ if (isset($_REQUEST['url_info'])) $info .= "url=".$_REQUEST['url_info']."\n";
+ if (isset($_REQUEST['author_info'])) $info .= "description=".$_REQUEST['author_info'];
+ if (!$this->upload($_REQUEST['name'],$info)) msg($this->getLang('install_no'),-1);
+ }
+ if ($this->req=='delete' && $_REQUEST['name']) $this->_delete($_REQUEST['name']);
+ ptln(' </td></tr><tr><td colspan="2">');
+ $this->dolist($n);
+ ptln(' </td></tr>');
+ }
+ $n++;
+ }
+ ptln(' </table>');
+ ptln(' </fieldset>');
+ ptln('</div>');
+ }
+
+ /**
+ * Connect to theme repository and list themes
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function dolist($n) {
+ global $INFO;
+ if ($n === false) return;
+ //info.txt keys to parse
+ $keys=array('author','url','description');
+ $icos=explode(',',INDEXMENU_ICOS);
+ $turl="";
+ $info="";
+ //get list
+ $data=$this->_remotequery($this->repos['url'][$n]."/lib/plugins/indexmenu/ajax.php?req=local");
+ $data=explode(",",$data);
+ //print themes
+ for ($i=3;$i<count($data);$i++) {
+ $theme=$data[$i];
+ $turl=$data[1].$data[2]."/".$theme;
+ ptln(' <em>'.$theme.'</em>');
+ ptln(' <div class="indexmenu_list_themes">');
+ ptln(' <div>');
+ //print images
+ foreach (array_slice($icos,0,8) as $ico) {
+ $ext = explode(".", $theme);
+ $ext=array_pop($ext);
+ $ext=($ext == $theme) ? '.gif' : ".$ext";
+ ptln(' <img src="'.$turl."/".$ico.$ext.'" title="'.$ico.'" alt="'.$ico.'" />');
+ }
+ ptln(' </div>');
+ //get theme info.txt
+ if ($info=$this->_remotequery($turl."/info.txt",false)) {
+ foreach ($keys as $key) {
+ if (!preg_match('/'.$key.'=(.*)/',$info,$out)) continue;
+ ptln(" <div>");
+ ptln(" <strong>".hsc($key).": </strong>".hsc($out[1]));
+ ptln(" </div>");
+ }
+ }
+ if ($n == 0) {
+ $act="upload";
+ if ($theme != "default" ) {
+ $this->_form_open("delete",$n);
+ ptln(' <input type="hidden" name="name" value="'.$theme.'" />');
+ $this->_form_close("delete");
+ }
+ } else {
+ $act="install";
+ ptln(' <a href="'.$this->repos['url'][$n]."$repo/lib/plugins/indexmenu/ajax.php?req=send&amp;t=".$theme.'">Download</a>');
+ }
+ $this->_form_open($act,$n);
+ if ($n==0 && !is_file(INDEXMENU_IMG_ABSDIR."/".$theme."/info.txt")) {
+ ptln(' <div><strong>author:</strong><input type="text" name="author_info" value="'.$INFO["userinfo"]["name"].hsc(" <".$INFO["userinfo"]["mail"].">").'" size="50" maxlength="100" /><br />');
+ ptln(' <strong>url:</strong><input type="text" name="url_info" value="'.$this->repos['url'][$n].'" size="50" maxlength="200" /><br />');
+ ptln(' <strong>description:</strong><input type="text" name="description_info" value="" size="50" maxlength="200" /></div>');
+ }
+ ptln(' <input type="hidden" name="name" value="'.$theme.'" />');
+ $this->_form_close($act);
+ ptln(' <br /><br /></div>');
+ }
+ }
+
+ /**
+ * Download and install themes
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function install ($n,$name) {
+ $repo=$this->repos['url'][$n];
+ if (!isset($name)) return false;
+ $return=true;
+ if (!$absdir=$this->checktmpsubdir()) return;
+ $tmp=$absdir."/tmp";
+
+ //send theme list request
+ if (!$zipfile=io_download($repo."/lib/plugins/indexmenu/ajax.php?req=send&t=".$name,"$tmp/",true)) {
+ msg($this->getLang('down_err').": $name",-1);
+ $return=false;
+ } else {
+ //create zip
+ $zip=new PclZip("$tmp/$zipfile");
+ $regexp="/^".$name."\/(info.txt)|(style.css)|(".str_replace(",","|",INDEXMENU_ICOS).")\.(gif|png|jpg)$/i";
+ $status=$zip->extract(PCLZIP_OPT_PATH,$absdir."/",PCLZIP_OPT_BY_PREG,$regexp);
+ //error
+ if ($status == 0) {
+ msg($this->getLang('zip_err')." $tmp/$zipfile: ".$zip->errorName(true),-1);
+ $return=false;
+ } else {
+ msg("<strong>$name</strong> ".$this->getLang('install_ok'),1);
+ }
+ }
+ //clean tmp
+ $this->_rm_dir($tmp);
+ return $return;
+ }
+
+
+ /**
+ * Remove a directory
+ *
+ */
+ function _rm_dir($path) {
+ if (!is_string($path) || $path == "") return false;
+
+ if (is_dir($path)) {
+ if (!$dh = @opendir($path)) return false;
+
+ while ($f = readdir($dh)) {
+ if ($f == '..' || $f == '.') continue;
+ $this->_rm_dir("$path/$f");
+ }
+
+ closedir($dh);
+ return @rmdir($path);
+ } else {
+ return @unlink($path);
+ }
+
+ return false;
+ }
+
+ /**
+ * Retrive and create themes tmp directory
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function checktmpsubdir () {
+ $tmp=INDEXMENU_IMG_ABSDIR."/tmp";
+ if (!io_mkdir_p($tmp)) {
+ msg($this->getLang('dir_err').": $tmp",-1);
+ return false;
+ }
+ return INDEXMENU_IMG_ABSDIR;
+ }
+
+
+ /**
+ * Upload a theme into my site
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function upload($theme,$info) {
+ $return=true;
+ $host='samuele.netsons.org';
+ $path='/dokuwiki/lib/plugins/indexmenu/upload/index.php';
+ //TODO: merge zip creation with that in ajax.php (create a class?)
+ if (!$absdir=$this->checktmpsubdir()) return false;
+ $tmp=$absdir."/tmp";
+ $zipfile="$theme.zip";
+ $filelist="$absdir/$theme";
+ //create info
+ if (!empty($info)) {
+ io_savefile("$tmp/$theme/info.txt",$info);
+ $filelist .= ",$tmp/$theme";
+ }
+ //create zip
+ $zip=new PclZip("$tmp/$zipfile");
+ $status=$zip->create($filelist,PCLZIP_OPT_REMOVE_ALL_PATH);
+ if ($status == 0) {
+ //error
+ msg($this->getLang('zip_err').": ".$zip->errorName(true),-1);
+ $return=false;
+ } else {
+ //prepare POST headers.
+ $boundary = "---------------------------".uniqid("");
+ $data=join("", file("$tmp/$zipfile"));
+ $header="POST $path HTTP/1.0\r\n";
+ $header.= "Host: $host\r\n";
+ $header.= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1) Gecko/20061024 Iceweasel/2.0 (Debian-2.0+dfsg-1)\r\n";
+ $header.= "Content-type: multipart/form-data, boundary=$boundary\r\n";
+ $body="--".$boundary."\r\n";
+ $body.= "Content-Disposition: form-data; name=\"userfile\"; filename=\"$zipfile\"\r\n";
+ $body.= "Content-Type: application/x-zip-compressed\r\n\r\n";
+ $body.=$data."\r\n";
+ $body.= "--".$boundary."\r\n";
+ $body.= "Content-Disposition: form-data; name=\"upload\"\r\n\r\n";
+ $body.= "Upload\r\n";
+ $body.="--".$boundary."--\r\n";
+ $header.= "Content-Length: ".strlen($body)."\r\n\r\n";
+
+ //connect and send zip
+ if ($fp = fsockopen($host, 80)) {
+ fwrite($fp,$header.$body);
+ //reply
+ $buf="";
+ while (!feof($fp)) {
+ $buf .= fgets($fp,3200);
+ }
+ fclose($fp);
+ //parse resply
+ if (preg_match("/<!--indexmenu-->(.*)<!--\/indexmenu-->/s",$buf,$match)) {
+ $str=substr($match[1],4,7);
+ switch ($str) {
+ case "ERROR ":
+ $mesg_type=-1;
+ break;
+ case "SUCCESS":
+ $mesg_type=1;
+ break;
+ default:
+ $mesg_type=2;
+ }
+ msg($match[1],$mesg_type);
+ } else {
+ $return=false;
+ }
+ } else {
+ $return=false;
+ }
+ }
+
+ $this->_rm_dir($tmp);
+ return $return;
+ }
+
+ /**
+ * Check for new messages from upstream
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _checkupdates() {
+ require_once (DOKU_INC.'inc/HTTPClient.php');
+ global $conf;
+ global $INFO;
+ $w=-1;
+ $date=$this->getInfo('date');
+ $date=$date['date'];
+ $data=$this->_remotequery("http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/remote.php?check=$date");
+ if ($data==="") {
+ msg($this->getLang('noupdates'),1);
+ $data .= @preg_replace('/\n\n.*$/s','',@io_readFile(DOKU_PLUGIN.'indexmenu/changelog'))."\n%\n";
+ $w=1;
+ } else {
+ $data=preg_replace('/\<br(\s*)?\/?\>/i',"", $data);
+ $data=preg_replace('/\t/'," ", $data);
+ }
+ $data=preg_replace('/\[\[(?!(http|https))(.:)(.*?)\]\]/s',"[[plugin:$3]]", $data);
+ $data=preg_replace('/\[\[(?!(http|https))(.*?)\]\]/s',"[[http://www.dokuwiki.org/$2]]", $data);
+ $msgs = explode("\n%\n",$data);
+ foreach($msgs as $msg){
+ if($msg) {
+ $msg= p_render('xhtml',p_get_instructions($msg),$info);
+ msg($msg,$w);
+ }
+ }
+ }
+
+
+ /**
+ * Get url response and check it
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _remotequery($url,$tag=true) {
+ require_once (DOKU_INC.'inc/HTTPClient.php');
+ $http = new DokuHTTPClient();
+ $http->timeout = 8;
+ $data = $http->get($url);
+ if ($tag) {
+ if ($data===false) {
+ msg($this->getLang('conn_err'),-1);
+ } else {
+ (substr($data,0,9)==="indexmenu") ? $data=substr($data,9): $data="";
+ }
+ }
+ return $data;
+ }
+
+
+ /**
+ * Open an html form
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _form_open($act,$n=-1) {
+ ptln(' <form action="'.wl($ID).'" method="post">');
+ ptln(' <input type="hidden" name="do" value="admin" />');
+ ptln(' <input type="hidden" name="page" value="'.$this->getPluginName().'" />');
+ ptln(' <input type="hidden" name="req" value="'.$act.'" />');
+ ptln(' <input type="hidden" name="repo" value="'.$n.'" />');
+ }
+
+ /**
+ * Close the html form
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _form_close($act) {
+ ptln(' <input type="submit" name="btn" '.$this->repos['status'][$n].' value="'.$this->getLang($act).'" />');
+ ptln(' </form>');
+ }
+
+ /**
+ * Remove an installed theme
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _delete($theme) {
+ if ($theme=="default") return;
+ if ($this->_rm_dir(INDEXMENU_IMG_ABSDIR."/".utf8_encodeFN(basename($theme)))) {
+ msg($this->getLang('delete_ok').": $theme.",1);
+ } else {
+ msg($this->getLang('delete_no').": $theme.",-1);
+ }
+ }
+
+ /**
+ * Print the donate button.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _donate() {
+ $out = "<fieldset>\n";
+ $out .= '<p>'.$this->getLang('donation_text').'</p>';
+ $out .= '<form action="https://www.paypal.com/cgi-bin/webscr" method="post">'."\n";
+ $out .= '<input type="hidden" name="cmd" value="_s-xclick" />'."\n";
+ $out .= '<input type="hidden" name="hosted_button_id" value="102873" />'."\n";
+ $out .= '<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif" name="submit" alt="" />'."\n";
+ $out .= '<img alt="" src="https://www.paypal.com/it_IT/i/scr/pixel.gif" width="1" height="1" />'."\n";
+ $out .= "</form></fieldset>\n";
+ return $out;
+ }
+
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php
new file mode 100644
index 000000000..93b3d5f07
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php
@@ -0,0 +1,196 @@
+<?php
+/**
+ * AJAX Backend for indexmenu
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ */
+
+//fix for Opera XMLHttpRequests
+if(!count($_POST) && @$HTTP_RAW_POST_DATA){
+ parse_str($HTTP_RAW_POST_DATA, $_POST);
+}
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/init.php');
+require_once(DOKU_INC.'inc/auth.php');
+if(!defined('INDEXMENU_IMG_ABSDIR')) define('INDEXMENU_IMG_ABSDIR',DOKU_PLUGIN."indexmenu/images");
+//close session
+session_write_close();
+
+$ajax_indexmenu=new ajax_indexmenu_plugin;
+$ajax_indexmenu->render();
+
+class ajax_indexmenu_plugin {
+ /**
+ * Output
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+ function render () {
+ $req=$_REQUEST['req'];
+ $succ=false;
+ //send the zip
+ if ($req == 'send' and isset($_REQUEST['t'])) {
+ include(DOKU_PLUGIN.'indexmenu/inc/repo.class.php');
+ $repo=new repo_indexmenu_plugin;
+ $succ=$repo->send_theme($_REQUEST['t']);
+ }
+ if ($succ) return true;
+
+ header('Content-Type: text/html; charset=utf-8');
+ header('Cache-Control: public, max-age=3600');
+ header('Pragma: public');
+ switch ($req) {
+ case 'local':
+ //list themes
+ print $this->local_themes();
+ break;
+ case 'toc':
+ //print toc preview
+ if (isset($_REQUEST['id'])) print $this->print_toc($_REQUEST['id']);
+ break;
+ case 'index':
+ //print index
+ if (isset($_REQUEST['idx'])) print $this->print_index($_REQUEST['idx']);
+ break;
+ }
+ }
+
+ /**
+ * Print a list of local themes
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+ function local_themes() {
+ $list='indexmenu,'.DOKU_URL.",lib/plugins/indexmenu/images,";
+ $data=array();
+ $handle=@opendir(INDEXMENU_IMG_ABSDIR);
+ while (false !== ($file = readdir($handle))) {
+ if ( is_dir (INDEXMENU_IMG_ABSDIR.'/'.$file)
+ && $file != "."
+ && $file != ".."
+ && $file != "repository"
+ && $file != "tmp"
+ ) {
+ $data[]=$file;
+ }
+ }
+ closedir($handle);
+ sort($data);
+ $list .= implode(",",$data);
+ return $list;
+ }
+
+ /**
+ * Print a toc preview
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function print_toc($id) {
+ require_once(DOKU_INC.'inc/parser/xhtml.php');
+ $id=cleanID($id);
+ if (auth_quickaclcheck($id) < AUTH_READ) return;
+ $meta = p_get_metadata($id);
+ $toc = $meta['description']['tableofcontents'];
+ $out .= '<div class="tocheader toctoggle">'.DOKU_LF;
+ if (count($toc)>1) {
+ $out .= $this->render_toc($toc);
+ } else {
+ $out .= '<a href="'.wl($id).'">';
+ $out .= ($meta['title']) ? htmlspecialchars($meta['title']) : htmlspecialchars(noNS($id));
+ $out .= '</a>'.DOKU_LF;
+ if ($meta['description']['abstract']) {
+ $out .= '</div>'.DOKU_LF;
+ $out .= '<div class="indexmenu_toc_inside">'.DOKU_LF;
+ $out .= p_render('xhtml',p_get_instructions($meta['description']['abstract']),$info);
+ $out .= '</div>'.DOKU_LF;
+ }
+ }
+ $out .= '</div>'.DOKU_LF;
+ return $out;
+ }
+
+ /**
+ * Return the TOC rendered to XHTML
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function render_toc($toc){
+ global $lang;
+ $r = new Doku_Renderer_xhtml;
+ $r->toc = $toc;
+ $out .= $lang['toc'];
+ $out .= '</div>'.DOKU_LF;
+ $out .= '<div class="indexmenu_toc_inside">'.DOKU_LF;
+ $out .= html_buildlist($r->toc,'toc',array($this,'_tocitem'));
+ $out .= '</div>'.DOKU_LF;
+ return $out;
+ }
+
+ /**
+ * Callback for html_buildlist
+ */
+ function _tocitem($item){
+ $id=cleanID($_POST['id']);
+ return '<span class="li"><a href="'.wl($id,'#'.$item['hid'],false,'').'" class="toc">'.
+ htmlspecialchars($item['title']).'</a></span>';
+ }
+
+ /**
+ * Print index nodes
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function print_index($ns) {
+ require_once(DOKU_PLUGIN.'indexmenu/syntax/indexmenu.php');
+ global $conf;
+ $idxm=new syntax_plugin_indexmenu_indexmenu();
+ $ns=$idxm->_parse_ns($ns);
+ $level=-1;
+ $max=0;
+ $data = array();
+ if ($_REQUEST['max'] > 0) {
+ $max=$_REQUEST['max'];
+ $level=$max;
+ }
+ $nss= ($_REQUEST['nss']) ? cleanID($_REQUEST['nss']) : '';
+ $idxm->sort=$_REQUEST['sort'];
+ $idxm->msort=$_REQUEST['msort'];
+ $idxm->rsort=$_REQUEST['rsort'];
+ $idxm->nsort=$_REQUEST['nsort'];
+ $fsdir="/".utf8_encodeFN(str_replace(':','/',$ns));
+ $opts= array('level' => $level,
+ 'nons' => $_REQUEST['nons'],
+ 'nss' => array(array($nss,1)),
+ 'max' => $max,
+ 'js' => false,
+ 'nopg' => $_REQUEST['nopg'],
+ 'skip_index' => $idxm->getConf('skip_index'),
+ 'skip_file' => $idxm->getConf('skip_file'),
+ 'headpage' => $idxm->getConf('headpage'),
+ 'hide_headpage' => $idxm->getConf('hide_headpage')
+ );
+ if ($idxm->sort||$idxm->msort||$idxm->rsort) {
+ $idxm->_search($data,$conf['datadir'],array($idxm,'_search_index'),$opts,$fsdir);
+ } else {
+ search($data,$conf['datadir'],array($idxm,'_search_index'),$opts,$fsdir);
+ }
+ if ($_REQUEST['nojs']) {
+ require_once(DOKU_INC.'inc/html.php');
+ $out_tmp=html_buildlist($data,'idx',array($idxm,"_html_list_index"),"html_li_index");
+ $out.=preg_replace('/<ul class="idx">(.*)<\/ul>/s',"$1",$out_tmp);
+ } else {
+ $nodes=$idxm->_jsnodes($data,'',0);
+ $out="ajxnodes = [";
+ $out.=rtrim($nodes[0],",");
+ $out.="];";
+ }
+ return $out;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog
new file mode 100644
index 000000000..ec78c7c38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog
@@ -0,0 +1,207 @@
+ * **2009-08-29 Version 4.6**:
+ * //New Feature//: Namespace declaration complies with dokuwiki [[:namespaces#creating namespaces|namespaces]]. :!: **Important before upgrading from previuos versions**: according to the new dokuwiki syntax, a simple //main namespace// without relative declaration prefix (i.e: "playground") doesn't refer anymore to the subnamespace in the root namespace but in the **current** namespace. To refer to the root namespace, you need to prepend the ":" declaration to it. :!:
+ * //New Feature//: Added the //context// option. It resolves relative requested namespaces starting from the current user location instead of the page containing the indexmenu syntax.
+ * //New Feature//: Changed skip_file and skip_index syntax to use dokuwiki id instead of system paths. Thanks to Dmitry Katsubo.
+ * //New Feature//: Metatada titles are not rendered when recursively bulding the indexmenu tree. This will speed up the page loading when cache expires, but could not display the heading title for nodes without metadata infos.
+ * //New Feature//: Added the nojs button in the edit toolbar and toolbar CSS classes.
+ * //New Feature//: The right JS context menu is closed by any document click. Thanks to Urban.
+ * //Bug//: Fixed a bug which prevents page caching when it contains only indexmenu syntax.
+ * //Bug//: Disable JS indexmenu cookies in preview mode.
+ * //Bug//: Fixed an acl issue.
+ * //Bug//: Fixed UTF8 toc preview bug.
+
+ * **2009-01-04 Version 4.5**:
+ * //Bug//: Fixed a stupid bug with toolbar.
+
+ * **2008-12-02 Version 4.4**:
+ * //New Feature//: Added ajax for the nojs index view.
+ * //New Feature//: Added navbar support also in nojs mode, but unlike js mode, its page does not use cache.
+ * //New Feature//: Added nopg option. Thanks to Sebastian E.
+ * //New Feature//: Toc preview displays rendered instructions instead of raw text when toc is empty.
+ * //New Feature//: German translation by Fabian Pfannes.
+ * //Bug//: Fixed acl bugs that prevents js mode to work correctly.
+ * //Bug//: Fixed a bug with [[plugin:indexmenu#only_admins|Only Admins]] option.
+ * //Bug//: Fixed a bug that prevents to disable the context menu.
+ * //Bug & Features//: id for navbar trees is now random by default + Minor bug fixes and improvements.
+ * //Others//: [[http://samuele.netsons.org/dokuwiki/doku.php?id=dokuwiki:plugins:indexmenu#donation|Donation]] button added.
+
+ * **2008-04-12 Version 4.3**:
+ * New Feature: Different js [[plugin:indexmenu#the_context_menu|context menus]] for anonymous, authenticated and admin user.
+ * Bug: Dokuwiki RC2008-04-11 compatible.
+ * Bug: Context menu should now support all userewrite and useslash DW config options.
+ * Bug: Fixed msort to work with nsort when in non-js mode.
+
+ * **2008-03-10 Version 4.2**:
+ * Bug: Fixed loop with nsort option. Thanks to Thomas Binder.
+ * Bug: Do not display empty namespace icon for empty headpages.
+ * Bug: Fixed navbar not working with max option and a main namespace different from root.
+ * Bug: Context menu "New page here" item creates the right page for headpages.
+
+ * **2008-02-16 Version 4.1**:
+ * New Feature: Indexmenu tree behaviour depends on the [[wiki:config#sneaky_index]] option. More info in the [[.:indexmenu#about ACLs]] section. Please read carefully the note about dokuwiki versions that do not support it.
+ * New Feature: Fixed some issues with Acls and empty namespaces. More info in the section [[.:indexmenu#about empty namespaces]].
+ * New Feature: Added the "Search in this namespace" option in the contextmenu. Thanks to Herman Huitema.
+ * Bug: Fixed broken js tree with dokuwiki search engine when node contains an highlighted word.
+ * Bugs: Fixed broken toolbar element when the dokuwiki js compact option is on.
+ * Bug: Single quote in dokuwiki config [[wiki:config#title]] breaks js tree when [[.:indexmenu#Namespaces title and link|headpage]] option is not configured.
+ * Changes: Minor contextmenu styling changes.
+
+ * **2007-10-26 Version 4.0**:
+ * New Feature: Added a customizable context menu (right click) for pages/namespaces common actions.
+ * New Feature: Added nsort option in order to sorts namespaces according to tsort/dsort/msort options.
+ * Bugs: Fixed a xhtml compatibility bug with msort and max option.
+ * Changes: Automatically scroll navbar menu to fit the current page.
+
+ * **2007-08-30 Version 3.9**:
+ * New Feature: Added options to sort by title, date and by custom metadata. Infos in the [[.:indexmenu#syntax]] section. Metadata sorting idea was "stolen" from [[.:fullindex]] plugin so thanks to the its author.
+ * New Feature: Added the %%{{indexmenu_n>N}}%% syntax to set a custom number used by metadata sorting. Infos in the [[.:indexmenu#syntax]] section.
+ * New Feature: Support for custom css styles based on theme. Infos in the [[.:indexmenu#css style]] section. An example is in the thread theme on the indexmenu repository.
+ * Changes: Added more options to the indexmenu toolbar in edit mode.
+ * Changes: Changed the scrolling tree style and usability. It does not anymore scroll automatically when node gets focus.
+
+ * **2007-07-11 Version 3.8**:
+ * Bug: Solved bugs when using url rewriting.
+ * Bug: Solved a bug in the css width property of toc preview div.
+
+ * **2007-07-07 Version 3.7**:
+ * Bug: Navbar did not work in ie6/7 with max option on.
+ * Bug: The js tree was wrong with headpages off.
+
+ * **2007-07-05 Version 3.6**:
+ * New Feature: Added max option to load nodes from ajax. This will significantly speed up the index in sites with an high amount of pages.
+ * Changes: Old max option renamed to maxjs.
+
+ * **2007-06-10 Version 3.5**:
+ * Bug: tsort option did not sort namespaces.
+
+ * **2007-06-08 Version 3.4**:
+ * New Feature: Added option "tsort" to sort nodes by title.
+ * Security Fix: Fixed ajax security with toc preview.
+
+ * **2007-06-04 Version 3.3**:
+ * :!: You could need to purge browser cache after installing it.
+ * New Feature: Added a Toc preview for javascript tree. You can disable it with "notoc" option.
+ * New Feature: The tree is always automatically updated with every requested namespace. You don't need anymore any ~~NOCACHE~~ or &purge options.
+ * New Feature: Acls work correctly with every requested namespace. Be sure to set correctly the [[.:indexmenu#acl cache]] option.
+ * New Feature: Added a global option to replace the dokuwiki index with an indexmenu page.
+ * New Feature: Added the global "Acl cache" option in order to optimize the acl caching mechanism. Please, read info at [[.:indexmenu#acl cache]].
+ * Changes: The size of the scrolling arrow image adjusts itself dynamically.
+ * Changes: Added the uncompressed javascript file for development purpose.
+ * Bug: The "Deny indexmenu to no-admins" now works correctly.
+
+ * **2007-05-10 Version 3.2**:
+ * Bug: Solved acl bug. It works only for root requested namespace.
+ * Bug: Solved start page bug. Patch by Adrien CLERC, thanks.
+
+ * **2007-03-14 Version 3.1**:
+ * :!: You could need to purge browser cache after installing it.
+ * New Feature: Themes deleting option in admin panel.
+ * Bug-New Feature: No-tree message now works and it supports wiki instructions.
+ * Bug: Js tree does not scroll anymore when nodes are visibles.
+ * Bug: Solved a bug with utf8 that prevented hidepages to work with no ASCII characters.
+ * Changes: Removed the automatic checking for updates option, because it slows down a bit the pages loading. Now it's manual and it's in admin panel.
+
+ * **2007-01-25 Version 3.0**:
+ * New Feature: Quick initial tree render thanks to the max option.
+ * New Feature: Max option to set how many js tree levels initially render. By default is set to 1 to speed up initial page loading.
+ * New feature: Scrolling js tree when nodes length do not fit its container.
+ * New Feature: Js tree highligts the current page.
+ * New Feature: Added js tooltips.
+ * Change: Removed the theme images directory setting to avoid problems. A symlink do the same work and in a simplest way.
+ * Change: Nojs tree is displayed when javascript is disabled or fails.
+ * Bug: The heading titles option for pages now works only if the global useheading setting is on.
+ * Bug: Pages that does not contain anymore indexmenu instructions are nomore cache purged by indexmenu itself.
+ * Bug: Indexmenu is xhtml compatible.
+ * Others: Code improvements and cleaning. A big thanks to Anja Wagenbret for testing and helping.
+
+ * **2006-12-19 Version 2.9**:
+ * New feature: The tree is automatically updated when the specified namespaces is the site root (..).
+ You don't need anymore to use the NOCACHE istruction.
+ * New feature: Indexmenu theme management in admin panel. You can download and share js themes.
+ * New feature: "navbar" option: the tree opens automatically itself at the current page namespace.
+ Good as navigation sidebar.
+ * Changed: Disabled custom css style for nojs menu when headpage is off.
+ * Bug: Firefox sometimes corrupt cached dokuwiki javascript.
+ This is an attempt to solve this bug, i hope it works (any feedback is welcome).
+ * Bug: Displayed incorrect titles when headpages are disable.
+
+ * **2006-11-09 Version 2.8**:
+ * New Feature: Option to deny the indexmenu use to no-admins.
+ * New Feature: Option to check for indexmenu updates when in admin mode ((need web connection to my site)).
+ * New Feature: Css style for namespaces and headpages links in nojs status as suggested by Mathiasm.
+ * New Feature: Support for png and jpg images formats for the js theme.
+ * Bug: Solved the Call-time pass-by-reference php5 bug.
+ * Changed: Changed some static css property into dynamic.
+
+ * **2006-10-23 Version 2.7**:
+ * :!: The default release is Compatible with Dokuwiki RC and it's configurable throught [[plugin:config|Configuration Manager]]. 2006-09-03 Dokuwiki users should read the [[.:indexmenu#How to install]] infos.
+ * Changes: Optional namespaces now works as you expect.
+ * Bug Fixed: Indexmenu button toolbar not showed when page is readonly. Thanks to [[neospams@vodafone.de|Neosky]].
+ * Bug Fixed: Escape of html in titles.
+ * Changes: Better displaying of default theme icons on dark background. Thanks to Paul Grove.
+ * Cosmetic code changes.
+ * **2006-10-7 Version 2.6**:
+ * New feature: Optional namespaces option.
+ * New feature: ".:ns" now specifies the "ns" namespace inside current namespace.
+ * Changes: "Cookie" option substituted by "nocookie" option. Now cookies are enabled by default.
+ * New feature: Custom headpages icon and css style in js mode.
+ * New feature: Added a Dtree option that should speed up the tree rendering.
+ * New feature: If scripts are disabled by the browser, standard tree will be showed in place of js one.
+ * New feature: Skip files option. Coded by Jon B (thanks).
+ * New feature: Customizable js theme directory path.
+ * New feature: Indexmenu toolbar in "edit page" mode.
+
+ * **2006-09-10 Version 2.5**:
+ * New feature: More customizable headpage option ((old "true" value is automatically translated into the :inside: option)).
+ * New feature: Js cookie option.
+ * New feature: Js id option. Many thanks to [[frbaron@gmail.com|Franck Baron]].
+ * New feature: Skip index option. Many thanks to [[ilya@lebedev.net|Ilya Lebedev AKA WingedFox]].
+ * Fixed bug: Incorrect ACL namespace. Many thanks to [[raymond@raycom.com|Raymond Elferink]].
+
+ * **2006-07-10 Version 2.4**:
+ * Fixed bug: Strange behaviours when using [[wiki:config#userewrite]] and [[wiki:config#useslash]].
+ * Fixed bug: No namespace title when the "." namespace is requested.
+ * Fixed bug: When title of the page contains %%'%% symbol, indexmenu fails.
+
+ * **2006-06-25 Version 2.3**:
+ * Fixed bug: incorrect namespaces levels. Many thanks to [[http://fredfred.net/skriker|malyfred]].
+ * Fixed bug: empty namespace title if headpage has no title.
+ * Fixed bug: nons doesn't work with js option.
+ * Fixed bug: parameters check.
+ * Fixed bug: start page is not hidden with js option.
+ * Fixed bug: acl denied namespaces are displayed. info [[.:indexmenu#about_acl|here]].
+
+ * **2006-06-13 Version 2.2**:
+is for the [[http://www.destroydrop.com/javascripts/tree/|dTree]] menu. Thanks to the [[.:tree]] plugin for the idea.
+ * Custom themes and style for javascript menu.
+
+ * **2006-06-12 Version 2.1**:
+ * Changed the way ''headpage'' option works.
+ * Added ''hide_headpage'' option to hide headpages.
+
+ * **2006-06-12 Version 2.0**:
+ * Added the ''headpage'' global configuration option to customize namespaces title and link. Thanks to [[bru@inbox.ru|Gleb]] for this nice idea.
+ *Javascript level bug fixed.
+ *Changed the base icon in default js theme.
+
+ * **2006-04-05 Version 1.9**:
+ * Added the javascript tree method. Thanks to Geir Landr
+
+ * **2006-04-05 Version 1.4**:
+ * Replaced the ''closed'' argument with a more powerful level number option. I guess it is the last modification on this argument.
+ * Small code fix.
+
+ * **2006-04-04 Version 1.3**:
+ * New ''nons'' option for excluding namespace items from index as suggested by //[[bru@inbox.ru|Gleb]]//.
+ * Some cosmetic changes (changed the argument name for closed index).
+
+ * **2006-04-01 Version 1.2**:
+ * Root namespace index. Thanks to [[cbeetle@physics.fau.edu|Chris Beetle]].
+
+ * **2006-03-29 Version 1.1**:
+ * Recursive tree index of all pages and namespaces beneath the specified namespace.
+ * Lexical option for disabling the tree index and only showing the first level.
+
+ * **2006-03-24 Version 1.0**:
+ * Released.
+ * Fixed bug in namespaces title visualization.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php
new file mode 100644
index 000000000..7c0f46228
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Default configuration for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$conf['only_admins'] = 0;
+$conf['aclcache'] = 'groups';
+$conf['headpage'] = ':start:,:same:,:inside:';
+$conf['hide_headpage'] = 1;
+$conf['page_index'] = '';
+$conf['empty_msg'] = '';
+$conf['skip_index'] = '';
+$conf['skip_file'] = 'sidebar';
+$conf['show_sort'] = true;
+$conf['themes_url'] = 'http://samuele.netsons.org/dokuwiki';
+$conf['be_repo'] = false;
+$conf['sneaky_index'] = (isset($GLOBALS['conf']['sneaky_index'])) ? $GLOBALS['conf']['sneaky_index'] : true;
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php
new file mode 100644
index 000000000..cd45f163a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Configuration-manager metadata for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$meta['only_admins'] = array('onoff');
+$meta['aclcache'] = array('multichoice', '_choices' => array('none', 'user' ,'groups'));
+$meta['headpage'] = array('multicheckbox', '_choices' => array(':start:', ':same:' ,':inside:'));
+$meta['hide_headpage'] = array('onoff');
+$meta['page_index'] = array('string', '_pattern' => '#^[a-z:]*#');
+$meta['empty_msg'] = array('string');
+$meta['skip_index'] = array('string','_pattern' => '/^($|\/.*\/.*$)/');
+$meta['skip_file'] = array('string','_pattern' => '/^($|\/.*\/.*$)/');
+$meta['show_sort'] = array('onoff');
+//$meta['themes_url'] = array('string','_pattern' => '/^($|http:\/\/\S+$)/i');
+//$meta['be_repo'] = array('onoff');
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js
new file mode 100644
index 000000000..9ab87c8a8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js
@@ -0,0 +1,152 @@
+function indexmenu_toolbar_additions() {
+ var edbtn,cmenu,indx_btn,toolbar = DOKUid('tool__bar');
+ if(!toolbar) return;
+ edbtn = DOKUid('edbtn__save');
+ if(!edbtn) return;
+ var indx_list = indexmenu_createPicker('picker_plugin_indexmenu');
+ indx_btn = indexmenu_createToolbar();
+ toolbar.appendChild(indx_btn);
+ indx_btn.onclick = function(){indexmenu_ajaxmenu('req=local',indx_list,this,false,indexmenu_createThemes);return false;};
+ cmenu=window.indexmenu_contextmenu;
+ if(cmenu[1]) {
+ window.indexmenu_contextmenu[0]=cmenu[1].concat(cmenu[0]);
+ }
+}
+
+function indexmenu_createThemes(data,indx_list) {
+ if (data.substring(0,9) != 'indexmenu') {
+ indx_list.innerHTML="Retrieving error";
+ return;
+ }
+ var checkboxes=[['<p><strong><em>Navigation</em></strong></p>',0],
+ ['navbar','The tree opens at the current namespace'],
+ ['context','Display the tree of the current wiki namespace context'],
+ ['nocookie','Don\t remember open/closed nodes during user navigation'],
+ ['noscroll','Prevent to scrolling the tree when it does not fit its container width'],
+ ['notoc','Disable the toc preview feature'],
+ ['<p><strong><em>Sort</em></strong></p>',0],
+ ['nsort','Sort also namespaces'],
+ ['tsort','By title'],
+ ['dsort','By date'],
+ ['msort','By meta tag'],
+ ['<p><strong><em>Performance</em></strong></p>',0],
+ ['max#2','How many levels to render with ajax when a node is opened'],
+ ['maxjs#2','How many levels to render in the client browser when a node is opened'],
+ ['<p><strong><em>Filters</em></strong></p>',0],
+ ['nons','Show only pages'],
+ ['nopg','Show only namespaces']];
+
+ var btn,key,theme_url,adata,f,f2,l,fo;
+ adata=data.split(',');
+ theme_url = DOKU_MEDIA + 'lib/plugins/indexmenu/images/';
+ f=indexmenu_toolFrame(indx_list,'Indexmenu');
+ l = document.createElement('div');
+ l.className = 'no indexmenu_nojstoolbar';
+ f.appendChild(l);
+ btn = createToolButton(DOKU_MEDIA + 'lib/tpl/default/images/open.gif','nojs index');
+ btn.innerHTML += 'Nojs';
+ btn.className = 'pickerbutton';
+ eval('btn.onclick = function(){indexmenu_opts("");}');
+ l.appendChild(btn);
+
+ l = document.createElement('div');
+ l.className = 'no indexmenu_jstoolbar';
+ f.appendChild(l);
+ if (adata[0] != 'indexmenu') {
+ l.innerHTML += 'No themes';
+ adata=[];
+ } else {
+ adata.splice(0,3);
+ }
+ for (key in adata) {
+ btn = createToolButton(theme_url + adata[key]+'/base.'+indexmenu_findExt(adata[key]),adata[key]);
+ btn.className = 'pickerbutton';
+ eval('btn.onclick = function(){indexmenu_opts("js#'+adata[key]+'");}');
+ l.appendChild(btn);
+ }
+ f2=indexmenu_toolFrame(indx_list,'Options');
+ fo=document.createElement('form');
+ fo.id='indexmenu_optfrm';
+ fo.className='indexmenu_opts';
+ f2.appendChild(fo);
+ for (key in checkboxes) {
+ lc = document.createElement('label');
+ lc.innerHTML=checkboxes[key][0]+' ';
+ if (checkboxes[key][1]) {
+ lc.title= checkboxes[key][1];
+ btn=document.createElement('input');
+ btn.type = 'checkbox';
+ btn.name = 'check';
+ btn.title = checkboxes[key][1];
+ btn.value = checkboxes[key][0];
+ fo.appendChild(btn);
+ }
+ fo.appendChild(lc);
+ }
+
+ l = document.createElement('div');
+ l.className = 'indexmenu_extratoolbar';
+ l.innerHTML='<p><strong><em>Extra</em></strong></p>';
+ f.appendChild(l);
+ btn = createToolButton(theme_url+'/msort.gif','Insert the sort meta-number');
+ btn.className = 'pickerbutton';
+ btn.onclick = function(){insertTags(
+ 'wiki__text',
+ '{{indexmenu_n>',
+ '}}',
+ '1'
+ );
+ DOKUid('picker_plugin_indexmenu').style.display='none';
+ return false;
+ };
+ l.appendChild(btn);
+}
+
+function indexmenu_createToolbar (){
+ var indx_ico = document.createElement('img');
+ indx_ico.src = DOKU_MEDIA + 'lib/plugins/indexmenu/images/indexmenu_toolbar.png';
+ var indx_btn = document.createElement('button');
+ indx_btn.id = 'syntax_plugin_indexmenu';
+ indx_btn.className = 'toolbutton';
+ indx_btn.title = 'Insert the Indexmenu tree';
+ indx_btn.appendChild(indx_ico);
+ return indx_btn;
+}
+
+function indexmenu_opts(m) {
+ var i,v = '';
+ var f=DOKUid('indexmenu_optfrm');
+ for (i=0; i < f.length; i++) {
+ if (f[i].checked) {
+ v = v + ' ' + f[i].value;
+ }
+ }
+ insertTags(
+ 'wiki__text',
+ '{{indexmenu>',
+ ((m||v)?'|':'')+m.replace(/#default$/,'')+v+'}}',
+ '#1'
+ );
+ DOKUid('picker_plugin_indexmenu').style.display='none';
+ return false;
+}
+
+function indexmenu_insertTags(lnk,sep) {
+ var r,l=lnk;
+ if (sep) {
+ r=new RegExp (sep,"g");
+ l=lnk.replace(r,':');
+ }
+ insertTags('wiki__text','[[',']]',l);
+}
+
+function indexmenu_toolFrame(parent,txt) {
+ f=document.createElement('fieldset');
+ l=document.createElement('legend');
+ l.innerHTML='<strong>'+txt+'</strong>';
+ f.appendChild(l);
+ parent.appendChild(f);
+ return f;
+}
+
+indexmenu_toolbar_additions();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js
new file mode 100644
index 000000000..7deb5a596
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js
@@ -0,0 +1 @@
+function indexmenu_toolbar_additions(){var e,d,c,b=DOKUid("tool__bar");if(!b){return;}e=DOKUid("edbtn__save");if(!e){return;}var a=indexmenu_createPicker("picker_plugin_indexmenu");c=indexmenu_createToolbar();b.appendChild(c);c.onclick=(function(){indexmenu_ajaxmenu("req=local",a,this,false,indexmenu_createThemes);return false;});d=window.indexmenu_contextmenu;if(d[1]){window.indexmenu_contextmenu[0]=d[1].concat(d[0]);}}function indexmenu_createThemes(k,j){if(k.substring(0,9)!="indexmenu"){j.innerHTML="Retrieving error";return;}var i=[["<p><strong><em>Navigation</em></strong></p>",0],["navbar","The tree opens at the current namespace"],["context","Display the tree of the current wiki namespace context"],["nocookie","Don\t remember open/closed nodes during user navigation"],["noscroll","Prevent to scrolling the tree when it does not fit its container width"],["notoc","Disable the toc preview feature"],["<p><strong><em>Sort</em></strong></p>",0],["nsort","Sort also namespaces"],["tsort","By title"],["dsort","By date"],["msort","By meta tag"],["<p><strong><em>Performance</em></strong></p>",0],["max#2","How many levels to render with ajax when a node is opened"],["maxjs#2","How many levels to render in the client browser when a node is opened"],["<p><strong><em>Filters</em></strong></p>",0],["nons","Show only pages"],["nopg","Show only namespaces"]];var h,g,f,e,d,c,b,a;e=k.split(",");f=DOKU_MEDIA+"lib/plugins/indexmenu/images/";d=indexmenu_toolFrame(j,"Indexmenu");b=document.createElement("div");b.className="no indexmenu_nojstoolbar";d.appendChild(b);h=createToolButton(DOKU_MEDIA+"lib/tpl/default/images/open.gif","nojs index");h.innerHTML+="Nojs";h.className="pickerbutton";eval("b.onclick = function(){indexmenu_opts(\"\");}");b.appendChild(h);b=document.createElement("div");b.className="no indexmenu_jstoolbar";d.appendChild(b);if(e[0]!="indexmenu"){b.innerHTML+="No themes";e=[];}else{e.splice(0,3);}for(g in e){h=createToolButton(f+e[g]+"/base."+indexmenu_findExt(e[g]),e[g]);h.className="pickerbutton";eval("h.onclick = function(){indexmenu_opts(\"js#"+e[g]+"\");}");b.appendChild(h);}c=indexmenu_toolFrame(j,"Options");a=document.createElement("form");a.id="indexmenu_optfrm";a.className="indexmenu_opts";c.appendChild(a);for(g in i){lc=document.createElement("label");lc.innerHTML=i[g][0]+" ";if(i[g][1]){lc.title=i[g][1];h=document.createElement("input");h.type="checkbox";h.name="check";h.title=i[g][1];h.value=i[g][0];a.appendChild(h);}a.appendChild(lc);}b=document.createElement("div");b.className="indexmenu_extratoolbar";b.innerHTML="<p><strong><em>Extra</em></strong></p>";d.appendChild(b);h=createToolButton(f+"/msort.gif","Insert the sort meta-number");h.className="pickerbutton";h.onclick=(function(){insertTags("wiki__text","{{indexmenu_n>","}}","1");DOKUid("picker_plugin_indexmenu").style.display="none";return false;});b.appendChild(h);}function indexmenu_createToolbar(){var b=document.createElement("img");b.src=DOKU_MEDIA+"lib/plugins/indexmenu/images/indexmenu_toolbar.png";var a=document.createElement("button");a.id="syntax_plugin_indexmenu";a.className="toolbutton";a.title="Insert the Indexmenu tree";a.appendChild(b);return a;}function indexmenu_opts(d){var c,b="";var a=DOKUid("indexmenu_optfrm");for(c=0;c<a.length;c++){if(a[c].checked){b=b+" "+a[c].value;}}insertTags("wiki__text","{{indexmenu>",((d||b)?"|":"")+d.replace(/#default$/,"")+b+"}}","#1");DOKUid("picker_plugin_indexmenu").style.display="none";return false;}function indexmenu_insertTags(d,c){var b,a=d;if(c){b=new RegExp(c,"g");a=d.replace(b,":");}insertTags("wiki__text","[[","]]",a);}function indexmenu_toolFrame(b,a){f=document.createElement("fieldset");l=document.createElement("legend");l.innerHTML="<strong>"+a+"</strong>";f.appendChild(l);b.appendChild(f);return f;}indexmenu_toolbar_additions();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif
new file mode 100644
index 000000000..8c07da8ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif
new file mode 100644
index 000000000..ced7f0879
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif
new file mode 100644
index 000000000..b5cf52378
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif
new file mode 100644
index 000000000..0d7d6431b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif
new file mode 100644
index 000000000..c7c9f7ed6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif
new file mode 100644
index 000000000..20fe6ace1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif
new file mode 100644
index 000000000..a9c466a5b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt
new file mode 100644
index 000000000..1b1d8cde3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt
@@ -0,0 +1,2 @@
+author=Samuele Tognini
+url=http://samuele.netsons.org/dokuwiki
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif
new file mode 100644
index 000000000..34dd47610
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif
new file mode 100644
index 000000000..48b81c80a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif
new file mode 100644
index 000000000..1a259eea0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif
new file mode 100644
index 000000000..3d212a97a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif
new file mode 100644
index 000000000..dc3198be2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif
new file mode 100644
index 000000000..2592ac20f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif
new file mode 100644
index 000000000..f258ce211
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif
new file mode 100644
index 000000000..5d120fa99
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif
new file mode 100644
index 000000000..b2c997233
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif
new file mode 100644
index 000000000..b5671d891
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif
new file mode 100644
index 000000000..afbe6429d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png
new file mode 100644
index 000000000..460e0f981
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif
new file mode 100644
index 000000000..a0f09e9d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif
new file mode 100644
index 000000000..5dae8131d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif
new file mode 100644
index 000000000..58a4158f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif
new file mode 100644
index 000000000..a90924ce8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php
new file mode 100644
index 000000000..19f20b9da
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php
@@ -0,0 +1,5748 @@
+<?php
+// --------------------------------------------------------------------------------
+// PhpConcept Library - Zip Module 2.5
+// --------------------------------------------------------------------------------
+// License GNU/LGPL - Vincent Blavet - March 2006
+// http://www.phpconcept.net
+// --------------------------------------------------------------------------------
+//
+// Presentation :
+// PclZip is a PHP library that manage ZIP archives.
+// So far tests show that archives generated by PclZip are readable by
+// WinZip application and other tools.
+//
+// Description :
+// See readme.txt and http://www.phpconcept.net
+//
+// Warning :
+// This library and the associated files are non commercial, non professional
+// work.
+// It should not have unexpected results. However if any damage is caused by
+// this software the author can not be responsible.
+// The use of this software is at the risk of the user.
+//
+// --------------------------------------------------------------------------------
+// $Id: pclzip.lib.php,v 1.44 2006/03/08 21:23:59 vblavet Exp $
+// --------------------------------------------------------------------------------
+
+ // ----- Constants
+ define( 'PCLZIP_READ_BLOCK_SIZE', 2048 );
+
+ // ----- File list separator
+ // In version 1.x of PclZip, the separator for file list is a space
+ // (which is not a very smart choice, specifically for windows paths !).
+ // A better separator should be a comma (,). This constant gives you the
+ // abilty to change that.
+ // However notice that changing this value, may have impact on existing
+ // scripts, using space separated filenames.
+ // Recommanded values for compatibility with older versions :
+ //define( 'PCLZIP_SEPARATOR', ' ' );
+ // Recommanded values for smart separation of filenames.
+ define( 'PCLZIP_SEPARATOR', ',' );
+
+ // ----- Error configuration
+ // 0 : PclZip Class integrated error handling
+ // 1 : PclError external library error handling. By enabling this
+ // you must ensure that you have included PclError library.
+ // [2,...] : reserved for futur use
+ define( 'PCLZIP_ERROR_EXTERNAL', 0 );
+
+ // ----- Optional static temporary directory
+ // By default temporary files are generated in the script current
+ // path.
+ // If defined :
+ // - MUST BE terminated by a '/'.
+ // - MUST be a valid, already created directory
+ // Samples :
+ // define( 'PCLZIP_TEMPORARY_DIR', '/temp/' );
+ // define( 'PCLZIP_TEMPORARY_DIR', 'C:/Temp/' );
+ define( 'PCLZIP_TEMPORARY_DIR', '' );
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE NOTHING NEEDS TO BE MODIFIED *****
+// --------------------------------------------------------------------------------
+
+ // ----- Global variables
+ $g_pclzip_version = "2.5";
+
+ // ----- Error codes
+ // -1 : Unable to open file in binary write mode
+ // -2 : Unable to open file in binary read mode
+ // -3 : Invalid parameters
+ // -4 : File does not exist
+ // -5 : Filename is too long (max. 255)
+ // -6 : Not a valid zip file
+ // -7 : Invalid extracted file size
+ // -8 : Unable to create directory
+ // -9 : Invalid archive extension
+ // -10 : Invalid archive format
+ // -11 : Unable to delete file (unlink)
+ // -12 : Unable to rename file (rename)
+ // -13 : Invalid header checksum
+ // -14 : Invalid archive size
+ define( 'PCLZIP_ERR_USER_ABORTED', 2 );
+ define( 'PCLZIP_ERR_NO_ERROR', 0 );
+ define( 'PCLZIP_ERR_WRITE_OPEN_FAIL', -1 );
+ define( 'PCLZIP_ERR_READ_OPEN_FAIL', -2 );
+ define( 'PCLZIP_ERR_INVALID_PARAMETER', -3 );
+ define( 'PCLZIP_ERR_MISSING_FILE', -4 );
+ define( 'PCLZIP_ERR_FILENAME_TOO_LONG', -5 );
+ define( 'PCLZIP_ERR_INVALID_ZIP', -6 );
+ define( 'PCLZIP_ERR_BAD_EXTRACTED_FILE', -7 );
+ define( 'PCLZIP_ERR_DIR_CREATE_FAIL', -8 );
+ define( 'PCLZIP_ERR_BAD_EXTENSION', -9 );
+ define( 'PCLZIP_ERR_BAD_FORMAT', -10 );
+ define( 'PCLZIP_ERR_DELETE_FILE_FAIL', -11 );
+ define( 'PCLZIP_ERR_RENAME_FILE_FAIL', -12 );
+ define( 'PCLZIP_ERR_BAD_CHECKSUM', -13 );
+ define( 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP', -14 );
+ define( 'PCLZIP_ERR_MISSING_OPTION_VALUE', -15 );
+ define( 'PCLZIP_ERR_INVALID_OPTION_VALUE', -16 );
+ define( 'PCLZIP_ERR_ALREADY_A_DIRECTORY', -17 );
+ define( 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION', -18 );
+ define( 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION', -19 );
+ define( 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE', -20 );
+ define( 'PCLZIP_ERR_DIRECTORY_RESTRICTION', -21 );
+
+ // ----- Options values
+ define( 'PCLZIP_OPT_PATH', 77001 );
+ define( 'PCLZIP_OPT_ADD_PATH', 77002 );
+ define( 'PCLZIP_OPT_REMOVE_PATH', 77003 );
+ define( 'PCLZIP_OPT_REMOVE_ALL_PATH', 77004 );
+ define( 'PCLZIP_OPT_SET_CHMOD', 77005 );
+ define( 'PCLZIP_OPT_EXTRACT_AS_STRING', 77006 );
+ define( 'PCLZIP_OPT_NO_COMPRESSION', 77007 );
+ define( 'PCLZIP_OPT_BY_NAME', 77008 );
+ define( 'PCLZIP_OPT_BY_INDEX', 77009 );
+ define( 'PCLZIP_OPT_BY_EREG', 77010 );
+ define( 'PCLZIP_OPT_BY_PREG', 77011 );
+ define( 'PCLZIP_OPT_COMMENT', 77012 );
+ define( 'PCLZIP_OPT_ADD_COMMENT', 77013 );
+ define( 'PCLZIP_OPT_PREPEND_COMMENT', 77014 );
+ define( 'PCLZIP_OPT_EXTRACT_IN_OUTPUT', 77015 );
+ define( 'PCLZIP_OPT_REPLACE_NEWER', 77016 );
+ define( 'PCLZIP_OPT_STOP_ON_ERROR', 77017 );
+ // Having big trouble with crypt. Need to multiply 2 long int
+ // which is not correctly supported by PHP ...
+ //define( 'PCLZIP_OPT_CRYPT', 77018 );
+ define( 'PCLZIP_OPT_EXTRACT_DIR_RESTRICTION', 77019 );
+
+ // ----- File description attributes
+ define( 'PCLZIP_ATT_FILE_NAME', 79001 );
+ define( 'PCLZIP_ATT_FILE_NEW_SHORT_NAME', 79002 );
+ define( 'PCLZIP_ATT_FILE_NEW_FULL_NAME', 79003 );
+
+ // ----- Call backs values
+ define( 'PCLZIP_CB_PRE_EXTRACT', 78001 );
+ define( 'PCLZIP_CB_POST_EXTRACT', 78002 );
+ define( 'PCLZIP_CB_PRE_ADD', 78003 );
+ define( 'PCLZIP_CB_POST_ADD', 78004 );
+ /* For futur use
+ define( 'PCLZIP_CB_PRE_LIST', 78005 );
+ define( 'PCLZIP_CB_POST_LIST', 78006 );
+ define( 'PCLZIP_CB_PRE_DELETE', 78007 );
+ define( 'PCLZIP_CB_POST_DELETE', 78008 );
+ */
+
+ // --------------------------------------------------------------------------------
+ // Class : PclZip
+ // Description :
+ // PclZip is the class that represent a Zip archive.
+ // The public methods allow the manipulation of the archive.
+ // Attributes :
+ // Attributes must not be accessed directly.
+ // Methods :
+ // PclZip() : Object creator
+ // create() : Creates the Zip archive
+ // listContent() : List the content of the Zip archive
+ // extract() : Extract the content of the archive
+ // properties() : List the properties of the archive
+ // --------------------------------------------------------------------------------
+ class PclZip
+ {
+ // ----- Filename of the zip file
+ var $zipname = '';
+
+ // ----- File descriptor of the zip file
+ var $zip_fd = 0;
+
+ // ----- Internal error handling
+ var $error_code = 1;
+ var $error_string = '';
+
+ // ----- Current status of the magic_quotes_runtime
+ // This value store the php configuration for magic_quotes
+ // The class can then disable the magic_quotes and reset it after
+ var $magic_quotes_status;
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZip()
+ // Description :
+ // Creates a PclZip object and set the name of the associated Zip archive
+ // filename.
+ // Note that no real action is taken, if the archive does not exist it is not
+ // created. Use create() for that.
+ // --------------------------------------------------------------------------------
+ function PclZip($p_zipname)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::PclZip', "zipname=$p_zipname");
+
+ // ----- Tests the zlib
+ if (!function_exists('gzopen'))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 1, "zlib extension seems to be missing");
+ die('Abort '.basename(__FILE__).' : Missing zlib extensions');
+ }
+
+ // ----- Set the attributes
+ $this->zipname = $p_zipname;
+ $this->zip_fd = 0;
+ $this->magic_quotes_status = -1;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 1);
+ return;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // create($p_filelist, $p_add_dir="", $p_remove_dir="")
+ // create($p_filelist, $p_option, $p_option_value, ...)
+ // Description :
+ // This method supports two different synopsis. The first one is historical.
+ // This method creates a Zip Archive. The Zip file is created in the
+ // filesystem. The files and directories indicated in $p_filelist
+ // are added in the archive. See the parameters description for the
+ // supported format of $p_filelist.
+ // When a directory is in the list, the directory and its content is added
+ // in the archive.
+ // In this synopsis, the function takes an optional variable list of
+ // options. See bellow the supported options.
+ // Parameters :
+ // $p_filelist : An array containing file or directory names, or
+ // a string containing one filename or one directory name, or
+ // a string containing a list of filenames and/or directory
+ // names separated by spaces.
+ // $p_add_dir : A path to add before the real path of the archived file,
+ // in order to have it memorized in the archive.
+ // $p_remove_dir : A path to remove from the real path of the file to archive,
+ // in order to have a shorter path memorized in the archive.
+ // When $p_add_dir and $p_remove_dir are set, $p_remove_dir
+ // is removed first, before $p_add_dir is added.
+ // Options :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_COMMENT :
+ // PCLZIP_CB_PRE_ADD :
+ // PCLZIP_CB_POST_ADD :
+ // Return Values :
+ // 0 on failure,
+ // The list of the added files, with a status of the add action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function create($p_filelist)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::create', "filelist='$p_filelist', ...");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Set default values
+ $v_options = array();
+ $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove from the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options detected");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_ADD => 'optional',
+ PCLZIP_CB_POST_ADD => 'optional',
+ PCLZIP_OPT_NO_COMPRESSION => 'optional',
+ PCLZIP_OPT_COMMENT => 'optional'
+ //, PCLZIP_OPT_CRYPT => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_options[PCLZIP_OPT_ADD_PATH] = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Invalid number / type of arguments");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Init
+ $v_string_list = array();
+ $v_att_list = array();
+ $v_filedescr_list = array();
+ $p_result_list = array();
+
+ // ----- Look if the $p_filelist is really an array
+ if (is_array($p_filelist)) {
+
+ // ----- Look if the first element is also an array
+ // This will mean that this is a file description entry
+ if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
+ $v_att_list = $p_filelist;
+ }
+
+ // ----- The list is a list of string names
+ else {
+ $v_string_list = $p_filelist;
+ }
+ }
+
+ // ----- Look if the $p_filelist is a string
+ else if (is_string($p_filelist)) {
+ // ----- Create a list from the string
+ $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
+ }
+
+ // ----- Invalid variable type for $p_filelist
+ else {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_filelist");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Reformat the string list
+ if (sizeof($v_string_list) != 0) {
+ foreach ($v_string_list as $v_string) {
+ if ($v_string != '') {
+ $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Ignore an empty filename");
+ }
+ }
+ }
+
+ // ----- For each file in the list check the attributes
+ $v_supported_attributes
+ = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
+ ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
+ ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
+ );
+ foreach ($v_att_list as $v_entry) {
+ $v_result = $this->privFileDescrParseAtt($v_entry,
+ $v_filedescr_list[],
+ $v_options,
+ $v_supported_attributes);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Expand the filelist (expand directories)
+ $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Call the create fct
+ $v_result = $this->privCreate($v_filedescr_list, $p_result_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
+ return $p_result_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // add($p_filelist, $p_add_dir="", $p_remove_dir="")
+ // add($p_filelist, $p_option, $p_option_value, ...)
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This methods add the list of files in an existing archive.
+ // If a file with the same name already exists, it is added at the end of the
+ // archive, the first one is still present.
+ // If the archive does not exist, it is created.
+ // Parameters :
+ // $p_filelist : An array containing file or directory names, or
+ // a string containing one filename or one directory name, or
+ // a string containing a list of filenames and/or directory
+ // names separated by spaces.
+ // $p_add_dir : A path to add before the real path of the archived file,
+ // in order to have it memorized in the archive.
+ // $p_remove_dir : A path to remove from the real path of the file to archive,
+ // in order to have a shorter path memorized in the archive.
+ // When $p_add_dir and $p_remove_dir are set, $p_remove_dir
+ // is removed first, before $p_add_dir is added.
+ // Options :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_COMMENT :
+ // PCLZIP_OPT_ADD_COMMENT :
+ // PCLZIP_OPT_PREPEND_COMMENT :
+ // PCLZIP_CB_PRE_ADD :
+ // PCLZIP_CB_POST_ADD :
+ // Return Values :
+ // 0 on failure,
+ // The list of the added files, with a status of the add action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function add($p_filelist)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::add', "filelist='$p_filelist', ...");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Set default values
+ $v_options = array();
+ $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove form the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options detected");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_ADD => 'optional',
+ PCLZIP_CB_POST_ADD => 'optional',
+ PCLZIP_OPT_NO_COMPRESSION => 'optional',
+ PCLZIP_OPT_COMMENT => 'optional',
+ PCLZIP_OPT_ADD_COMMENT => 'optional',
+ PCLZIP_OPT_PREPEND_COMMENT => 'optional'
+ //, PCLZIP_OPT_CRYPT => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_options[PCLZIP_OPT_REMOVE_PATH] = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Init
+ $v_string_list = array();
+ $v_att_list = array();
+ $v_filedescr_list = array();
+ $p_result_list = array();
+
+ // ----- Look if the $p_filelist is really an array
+ if (is_array($p_filelist)) {
+
+ // ----- Look if the first element is also an array
+ // This will mean that this is a file description entry
+ if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
+ $v_att_list = $p_filelist;
+ }
+
+ // ----- The list is a list of string names
+ else {
+ $v_string_list = $p_filelist;
+ }
+ }
+
+ // ----- Look if the $p_filelist is a string
+ else if (is_string($p_filelist)) {
+ // ----- Create a list from the string
+ $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
+ }
+
+ // ----- Invalid variable type for $p_filelist
+ else {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '".gettype($p_filelist)."' for p_filelist");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Reformat the string list
+ if (sizeof($v_string_list) != 0) {
+ foreach ($v_string_list as $v_string) {
+ $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
+ }
+ }
+
+ // ----- For each file in the list check the attributes
+ $v_supported_attributes
+ = array ( PCLZIP_ATT_FILE_NAME => 'mandatory'
+ ,PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional'
+ ,PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional'
+ );
+ foreach ($v_att_list as $v_entry) {
+ $v_result = $this->privFileDescrParseAtt($v_entry,
+ $v_filedescr_list[],
+ $v_options,
+ $v_supported_attributes);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Expand the filelist (expand directories)
+ $v_result = $this->privFileDescrExpand($v_filedescr_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Call the create fct
+ $v_result = $this->privAdd($v_filedescr_list, $p_result_list, $v_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_result_list);
+ return $p_result_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : listContent()
+ // Description :
+ // This public method, gives the list of the files and directories, with their
+ // properties.
+ // The properties of each entries in the list are (used also in other functions) :
+ // filename : Name of the file. For a create or add action it is the filename
+ // given by the user. For an extract function it is the filename
+ // of the extracted file.
+ // stored_filename : Name of the file / directory stored in the archive.
+ // size : Size of the stored file.
+ // compressed_size : Size of the file's data compressed in the archive
+ // (without the headers overhead)
+ // mtime : Last known modification date of the file (UNIX timestamp)
+ // comment : Comment associated with the file
+ // folder : true | false
+ // index : index of the file in the archive
+ // status : status of the action (depending of the action) :
+ // Values are :
+ // ok : OK !
+ // filtered : the file / dir is not extracted (filtered by user)
+ // already_a_directory : the file can not be extracted because a
+ // directory with the same name already exists
+ // write_protected : the file can not be extracted because a file
+ // with the same name already exists and is
+ // write protected
+ // newer_exist : the file was not extracted because a newer file exists
+ // path_creation_fail : the file is not extracted because the folder
+ // does not exists and can not be created
+ // write_error : the file was not extracted because there was a
+ // error while writing the file
+ // read_error : the file was not extracted because there was a error
+ // while reading the file
+ // invalid_header : the file was not extracted because of an archive
+ // format error (bad file header)
+ // Note that each time a method can continue operating when there
+ // is an action error on a file, the error is only logged in the file status.
+ // Return Values :
+ // 0 on an unrecoverable failure,
+ // The list of the files in the archive.
+ // --------------------------------------------------------------------------------
+ function listContent()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::listContent', "");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Call the extracting fct
+ $p_list = array();
+ if (($v_result = $this->privList($p_list)) != 1)
+ {
+ unset($p_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // extract($p_path="./", $p_remove_path="")
+ // extract([$p_option, $p_option_value, ...])
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This method extract all the files / directories from the archive to the
+ // folder indicated in $p_path.
+ // If you want to ignore the 'root' part of path of the memorized files
+ // you can indicate this in the optional $p_remove_path parameter.
+ // By default, if a newer file with the same name already exists, the
+ // file is not extracted.
+ //
+ // If both PCLZIP_OPT_PATH and PCLZIP_OPT_ADD_PATH aoptions
+ // are used, the path indicated in PCLZIP_OPT_ADD_PATH is append
+ // at the end of the path value of PCLZIP_OPT_PATH.
+ // Parameters :
+ // $p_path : Path where the files and directories are to be extracted
+ // $p_remove_path : First part ('root' part) of the memorized path
+ // (if any similar) to remove while extracting.
+ // Options :
+ // PCLZIP_OPT_PATH :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_CB_PRE_EXTRACT :
+ // PCLZIP_CB_POST_EXTRACT :
+ // Return Values :
+ // 0 or a negative value on failure,
+ // The list of the extracted files, with a status of the action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function extract()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extract", "");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+// $v_path = "./";
+ $v_path = '';
+ $v_remove_path = "";
+ $v_remove_all_path = false;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Default values for option
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+
+ // ----- Look for arguments
+ if ($v_size > 0) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_EXTRACT => 'optional',
+ PCLZIP_CB_POST_EXTRACT => 'optional',
+ PCLZIP_OPT_SET_CHMOD => 'optional',
+ PCLZIP_OPT_BY_NAME => 'optional',
+ PCLZIP_OPT_BY_EREG => 'optional',
+ PCLZIP_OPT_BY_PREG => 'optional',
+ PCLZIP_OPT_BY_INDEX => 'optional',
+ PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
+ PCLZIP_OPT_EXTRACT_IN_OUTPUT => 'optional',
+ PCLZIP_OPT_REPLACE_NEWER => 'optional'
+ ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
+ ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Set the arguments
+ if (isset($v_options[PCLZIP_OPT_PATH])) {
+ $v_path = $v_options[PCLZIP_OPT_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
+ // ----- Check for '/' in last path char
+ if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
+ $v_path .= '/';
+ }
+ $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_remove_path = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'");
+
+ // ----- Call the extracting fct
+ $p_list = array();
+ $v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path,
+ $v_remove_all_path, $v_options);
+ if ($v_result < 1) {
+ unset($p_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // extractByIndex($p_index, $p_path="./", $p_remove_path="")
+ // extractByIndex($p_index, [$p_option, $p_option_value, ...])
+ // Description :
+ // This method supports two synopsis. The first one is historical.
+ // This method is doing a partial extract of the archive.
+ // The extracted files or folders are identified by their index in the
+ // archive (from 0 to n).
+ // Note that if the index identify a folder, only the folder entry is
+ // extracted, not all the files included in the archive.
+ // Parameters :
+ // $p_index : A single index (integer) or a string of indexes of files to
+ // extract. The form of the string is "0,4-6,8-12" with only numbers
+ // and '-' for range or ',' to separate ranges. No spaces or ';'
+ // are allowed.
+ // $p_path : Path where the files and directories are to be extracted
+ // $p_remove_path : First part ('root' part) of the memorized path
+ // (if any similar) to remove while extracting.
+ // Options :
+ // PCLZIP_OPT_PATH :
+ // PCLZIP_OPT_ADD_PATH :
+ // PCLZIP_OPT_REMOVE_PATH :
+ // PCLZIP_OPT_REMOVE_ALL_PATH :
+ // PCLZIP_OPT_EXTRACT_AS_STRING : The files are extracted as strings and
+ // not as files.
+ // The resulting content is in a new field 'content' in the file
+ // structure.
+ // This option must be used alone (any other options are ignored).
+ // PCLZIP_CB_PRE_EXTRACT :
+ // PCLZIP_CB_POST_EXTRACT :
+ // Return Values :
+ // 0 on failure,
+ // The list of the extracted files, with a status of the action.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ //function extractByIndex($p_index, options...)
+ function extractByIndex($p_index)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extractByIndex", "index='$p_index', ...");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+// $v_path = "./";
+ $v_path = '';
+ $v_remove_path = "";
+ $v_remove_all_path = false;
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Default values for option
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+
+ // ----- Look for arguments
+ if ($v_size > 1) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Remove form the options list the first argument
+ array_shift($v_arg_list);
+ $v_size--;
+
+ // ----- Look for first arg
+ if ((is_integer($v_arg_list[0])) && ($v_arg_list[0] > 77000)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options");
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_PATH => 'optional',
+ PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
+ PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
+ PCLZIP_OPT_ADD_PATH => 'optional',
+ PCLZIP_CB_PRE_EXTRACT => 'optional',
+ PCLZIP_CB_POST_EXTRACT => 'optional',
+ PCLZIP_OPT_SET_CHMOD => 'optional',
+ PCLZIP_OPT_REPLACE_NEWER => 'optional'
+ ,PCLZIP_OPT_STOP_ON_ERROR => 'optional'
+ ,PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional'
+ ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Set the arguments
+ if (isset($v_options[PCLZIP_OPT_PATH])) {
+ $v_path = $v_options[PCLZIP_OPT_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {
+ // ----- Check for '/' in last path char
+ if ((strlen($v_path) > 0) && (substr($v_path, -1) != '/')) {
+ $v_path .= '/';
+ }
+ $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
+ }
+ if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) {
+ $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING not set.");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING set.");
+ }
+ }
+
+ // ----- Look for 2 args
+ // Here we need to support the first historic synopsis of the
+ // method.
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");
+
+ // ----- Get the first argument
+ $v_path = $v_arg_list[0];
+
+ // ----- Look for the optional second argument
+ if ($v_size == 2) {
+ $v_remove_path = $v_arg_list[1];
+ }
+ else if ($v_size > 2) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return 0;
+ }
+ }
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "index='$p_index', path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'");
+
+ // ----- Trick
+ // Here I want to reuse extractByRule(), so I need to parse the $p_index
+ // with privParseOptions()
+ $v_arg_trick = array (PCLZIP_OPT_BY_INDEX, $p_index);
+ $v_options_trick = array();
+ $v_result = $this->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick,
+ array (PCLZIP_OPT_BY_INDEX => 'optional' ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX];
+
+ // ----- Call the extracting fct
+ if (($v_result = $this->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function :
+ // delete([$p_option, $p_option_value, ...])
+ // Description :
+ // This method removes files from the archive.
+ // If no parameters are given, then all the archive is emptied.
+ // Parameters :
+ // None or optional arguments.
+ // Options :
+ // PCLZIP_OPT_BY_INDEX :
+ // PCLZIP_OPT_BY_NAME :
+ // PCLZIP_OPT_BY_EREG :
+ // PCLZIP_OPT_BY_PREG :
+ // Return Values :
+ // 0 on failure,
+ // The list of the files which are still present in the archive.
+ // (see PclZip::listContent() for list entry format)
+ // --------------------------------------------------------------------------------
+ function delete()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::delete", "");
+ $v_result=1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Set default values
+ $v_options = array();
+
+ // ----- Look for variable options arguments
+ $v_size = func_num_args();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");
+
+ // ----- Look for arguments
+ if ($v_size > 0) {
+ // ----- Get the arguments
+ $v_arg_list = func_get_args();
+
+ // ----- Parse the options
+ $v_result = $this->privParseOptions($v_arg_list, $v_size, $v_options,
+ array (PCLZIP_OPT_BY_NAME => 'optional',
+ PCLZIP_OPT_BY_EREG => 'optional',
+ PCLZIP_OPT_BY_PREG => 'optional',
+ PCLZIP_OPT_BY_INDEX => 'optional' ));
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+ }
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Call the delete fct
+ $v_list = array();
+ if (($v_result = $this->privDeleteByRule($v_list, $v_options)) != 1) {
+ $this->privSwapBackMagicQuotes();
+ unset($v_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
+ return(0);
+ }
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_list);
+ return $v_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : deleteByIndex()
+ // Description :
+ // ***** Deprecated *****
+ // delete(PCLZIP_OPT_BY_INDEX, $p_index) should be prefered.
+ // --------------------------------------------------------------------------------
+ function deleteByIndex($p_index)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::deleteByIndex", "index='$p_index'");
+
+ $p_list = $this->delete(PCLZIP_OPT_BY_INDEX, $p_index);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $p_list);
+ return $p_list;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : properties()
+ // Description :
+ // This method gives the properties of the archive.
+ // The properties are :
+ // nb : Number of files in the archive
+ // comment : Comment associated with the archive file
+ // status : not_exist, ok
+ // Parameters :
+ // None
+ // Return Values :
+ // 0 on failure,
+ // An array with the archive properties.
+ // --------------------------------------------------------------------------------
+ function properties()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::properties", "");
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Default properties
+ $v_prop = array();
+ $v_prop['comment'] = '';
+ $v_prop['nb'] = 0;
+ $v_prop['status'] = 'not_exist';
+
+ // ----- Look if file exists
+ if (@is_file($this->zipname))
+ {
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
+ {
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), 0);
+ return 0;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return 0;
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Set the user attributes
+ $v_prop['comment'] = $v_central_dir['comment'];
+ $v_prop['nb'] = $v_central_dir['entries'];
+ $v_prop['status'] = 'ok';
+ }
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_prop);
+ return $v_prop;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : duplicate()
+ // Description :
+ // This method creates an archive by copying the content of an other one. If
+ // the archive already exist, it is replaced by the new one without any warning.
+ // Parameters :
+ // $p_archive : The filename of a valid archive, or
+ // a valid PclZip object.
+ // Return Values :
+ // 1 on success.
+ // 0 or a negative value on error (error code).
+ // --------------------------------------------------------------------------------
+ function duplicate($p_archive)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::duplicate", "");
+ $v_result = 1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Look if the $p_archive is a PclZip object
+ if ((is_object($p_archive)) && (get_class($p_archive) == 'pclzip'))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The parameter is valid PclZip object '".$p_archive->zipname."'");
+
+ // ----- Duplicate the archive
+ $v_result = $this->privDuplicate($p_archive->zipname);
+ }
+
+ // ----- Look if the $p_archive is a string (so a filename)
+ else if (is_string($p_archive))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The parameter is a filename '$p_archive'");
+
+ // ----- Check that $p_archive is a valid zip file
+ // TBC : Should also check the archive format
+ if (!is_file($p_archive)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "No file with filename '".$p_archive."'");
+ $v_result = PCLZIP_ERR_MISSING_FILE;
+ }
+ else {
+ // ----- Duplicate the archive
+ $v_result = $this->privDuplicate($p_archive);
+ }
+ }
+
+ // ----- Invalid variable
+ else
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
+ $v_result = PCLZIP_ERR_INVALID_PARAMETER;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : merge()
+ // Description :
+ // This method merge the $p_archive_to_add archive at the end of the current
+ // one ($this).
+ // If the archive ($this) does not exist, the merge becomes a duplicate.
+ // If the $p_archive_to_add archive does not exist, the merge is a success.
+ // Parameters :
+ // $p_archive_to_add : It can be directly the filename of a valid zip archive,
+ // or a PclZip object archive.
+ // Return Values :
+ // 1 on success,
+ // 0 or negative values on error (see below).
+ // --------------------------------------------------------------------------------
+ function merge($p_archive_to_add)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::merge", "");
+ $v_result = 1;
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Check archive
+ if (!$this->privCheckFormat()) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
+ return(0);
+ }
+
+ // ----- Look if the $p_archive_to_add is a PclZip object
+ if ((is_object($p_archive_to_add)) && (get_class($p_archive_to_add) == 'pclzip'))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The parameter is valid PclZip object");
+
+ // ----- Merge the archive
+ $v_result = $this->privMerge($p_archive_to_add);
+ }
+
+ // ----- Look if the $p_archive_to_add is a string (so a filename)
+ else if (is_string($p_archive_to_add))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The parameter is a filename");
+
+ // ----- Create a temporary archive
+ $v_object_archive = new PclZip($p_archive_to_add);
+
+ // ----- Merge the archive
+ $v_result = $this->privMerge($v_object_archive);
+ }
+
+ // ----- Invalid variable
+ else
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type p_archive_to_add");
+ $v_result = PCLZIP_ERR_INVALID_PARAMETER;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+
+
+ // --------------------------------------------------------------------------------
+ // Function : errorCode()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorCode()
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ return(PclErrorCode());
+ }
+ else {
+ return($this->error_code);
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : errorName()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorName($p_with_code=false)
+ {
+ $v_name = array ( PCLZIP_ERR_NO_ERROR => 'PCLZIP_ERR_NO_ERROR',
+ PCLZIP_ERR_WRITE_OPEN_FAIL => 'PCLZIP_ERR_WRITE_OPEN_FAIL',
+ PCLZIP_ERR_READ_OPEN_FAIL => 'PCLZIP_ERR_READ_OPEN_FAIL',
+ PCLZIP_ERR_INVALID_PARAMETER => 'PCLZIP_ERR_INVALID_PARAMETER',
+ PCLZIP_ERR_MISSING_FILE => 'PCLZIP_ERR_MISSING_FILE',
+ PCLZIP_ERR_FILENAME_TOO_LONG => 'PCLZIP_ERR_FILENAME_TOO_LONG',
+ PCLZIP_ERR_INVALID_ZIP => 'PCLZIP_ERR_INVALID_ZIP',
+ PCLZIP_ERR_BAD_EXTRACTED_FILE => 'PCLZIP_ERR_BAD_EXTRACTED_FILE',
+ PCLZIP_ERR_DIR_CREATE_FAIL => 'PCLZIP_ERR_DIR_CREATE_FAIL',
+ PCLZIP_ERR_BAD_EXTENSION => 'PCLZIP_ERR_BAD_EXTENSION',
+ PCLZIP_ERR_BAD_FORMAT => 'PCLZIP_ERR_BAD_FORMAT',
+ PCLZIP_ERR_DELETE_FILE_FAIL => 'PCLZIP_ERR_DELETE_FILE_FAIL',
+ PCLZIP_ERR_RENAME_FILE_FAIL => 'PCLZIP_ERR_RENAME_FILE_FAIL',
+ PCLZIP_ERR_BAD_CHECKSUM => 'PCLZIP_ERR_BAD_CHECKSUM',
+ PCLZIP_ERR_INVALID_ARCHIVE_ZIP => 'PCLZIP_ERR_INVALID_ARCHIVE_ZIP',
+ PCLZIP_ERR_MISSING_OPTION_VALUE => 'PCLZIP_ERR_MISSING_OPTION_VALUE',
+ PCLZIP_ERR_INVALID_OPTION_VALUE => 'PCLZIP_ERR_INVALID_OPTION_VALUE',
+ PCLZIP_ERR_UNSUPPORTED_COMPRESSION => 'PCLZIP_ERR_UNSUPPORTED_COMPRESSION',
+ PCLZIP_ERR_UNSUPPORTED_ENCRYPTION => 'PCLZIP_ERR_UNSUPPORTED_ENCRYPTION'
+ ,PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE => 'PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE'
+ ,PCLZIP_ERR_DIRECTORY_RESTRICTION => 'PCLZIP_ERR_DIRECTORY_RESTRICTION'
+ );
+
+ if (isset($v_name[$this->error_code])) {
+ $v_value = $v_name[$this->error_code];
+ }
+ else {
+ $v_value = 'NoName';
+ }
+
+ if ($p_with_code) {
+ return($v_value.' ('.$this->error_code.')');
+ }
+ else {
+ return($v_value);
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : errorInfo()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function errorInfo($p_full=false)
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ return(PclErrorString());
+ }
+ else {
+ if ($p_full) {
+ return($this->errorName(true)." : ".$this->error_string);
+ }
+ else {
+ return($this->error_string." [code ".$this->error_code."]");
+ }
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+
+// --------------------------------------------------------------------------------
+// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS *****
+// ***** *****
+// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY *****
+// --------------------------------------------------------------------------------
+
+
+
+ // --------------------------------------------------------------------------------
+ // Function : privCheckFormat()
+ // Description :
+ // This method check that the archive exists and is a valid zip archive.
+ // Several level of check exists. (futur)
+ // Parameters :
+ // $p_level : Level of check. Default 0.
+ // 0 : Check the first bytes (magic codes) (default value))
+ // 1 : 0 + Check the central directory (futur)
+ // 2 : 1 + Check each file header (futur)
+ // Return Values :
+ // true on success,
+ // false on error, the error code is set.
+ // --------------------------------------------------------------------------------
+ function privCheckFormat($p_level=0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCheckFormat", "");
+ $v_result = true;
+
+ // ----- Reset the file system cache
+ clearstatcache();
+
+ // ----- Reset the error handler
+ $this->privErrorReset();
+
+ // ----- Look if the file exits
+ if (!is_file($this->zipname)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "Missing archive file '".$this->zipname."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
+ return(false);
+ }
+
+ // ----- Check that the file is readeable
+ if (!is_readable($this->zipname)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to read archive '".$this->zipname."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, false, PclZip::errorInfo());
+ return(false);
+ }
+
+ // ----- Check the magic code
+ // TBC
+
+ // ----- Check the central header
+ // TBC
+
+ // ----- Check each file header
+ // TBC
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privParseOptions()
+ // Description :
+ // This internal methods reads the variable list of arguments ($p_options_list,
+ // $p_size) and generate an array with the options and values ($v_result_list).
+ // $v_requested_options contains the options that can be present and those that
+ // must be present.
+ // $v_requested_options is an array, with the option value as key, and 'optional',
+ // or 'mandatory' as value.
+ // Parameters :
+ // See above.
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options=false)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privParseOptions", "");
+ $v_result=1;
+
+ // ----- Read the options
+ $i=0;
+ while ($i<$p_size) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Looking for table index $i, option = '".PclZipUtilOptionText($p_options_list[$i])."(".$p_options_list[$i].")'");
+
+ // ----- Check if the option is supported
+ if (!isset($v_requested_options[$p_options_list[$i]])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '".$p_options_list[$i]."' for this method");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for next option
+ switch ($p_options_list[$i]) {
+ // ----- Look for options that request a path value
+ case PCLZIP_OPT_PATH :
+ case PCLZIP_OPT_REMOVE_PATH :
+ case PCLZIP_OPT_ADD_PATH :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if ( is_string($p_options_list[$i+1])
+ && ($p_options_list[$i+1] != '')) {
+ $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i+1], false);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." set with an empty value is ignored.");
+ }
+ break;
+
+ // ----- Look for options that request an array of string for value
+ case PCLZIP_OPT_BY_NAME :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i+1];
+ }
+ else if (is_array($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that request an EREG or PREG expression
+ case PCLZIP_OPT_BY_EREG :
+ case PCLZIP_OPT_BY_PREG :
+ //case PCLZIP_OPT_CRYPT :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that takes a string
+ case PCLZIP_OPT_COMMENT :
+ case PCLZIP_OPT_ADD_COMMENT :
+ case PCLZIP_OPT_PREPEND_COMMENT :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE,
+ "Missing parameter value for option '"
+ .PclZipUtilOptionText($p_options_list[$i])
+ ."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ if (is_string($p_options_list[$i+1])) {
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE,
+ "Wrong parameter value for option '"
+ .PclZipUtilOptionText($p_options_list[$i])
+ ."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that request an array of index
+ case PCLZIP_OPT_BY_INDEX :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_work_list = array();
+ if (is_string($p_options_list[$i+1])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is a string '".$p_options_list[$i+1]."'");
+
+ // ----- Remove spaces
+ $p_options_list[$i+1] = strtr($p_options_list[$i+1], ' ', '');
+
+ // ----- Parse items
+ $v_work_list = explode(",", $p_options_list[$i+1]);
+ }
+ else if (is_integer($p_options_list[$i+1])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an integer '".$p_options_list[$i+1]."'");
+ $v_work_list[0] = $p_options_list[$i+1].'-'.$p_options_list[$i+1];
+ }
+ else if (is_array($p_options_list[$i+1])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Index value is an array");
+ $v_work_list = $p_options_list[$i+1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Reduce the index list
+ // each index item in the list must be a couple with a start and
+ // an end value : [0,3], [5-5], [8-10], ...
+ // ----- Check the format of each item
+ $v_sort_flag=false;
+ $v_sort_value=0;
+ for ($j=0; $j<sizeof($v_work_list); $j++) {
+ // ----- Explode the item
+ $v_item_list = explode("-", $v_work_list[$j]);
+ $v_size_item_list = sizeof($v_item_list);
+
+ // ----- TBC : Here we might check that each item is a
+ // real integer ...
+
+ // ----- Look for single value
+ if ($v_size_item_list == 1) {
+ // ----- Set the option value
+ $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+ $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];
+ }
+ elseif ($v_size_item_list == 2) {
+ // ----- Set the option value
+ $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
+ $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];
+ }
+ else {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extracted index item = [".$v_result_list[$p_options_list[$i]][$j]['start'].",".$v_result_list[$p_options_list[$i]][$j]['end']."]");
+
+ // ----- Look for list sort
+ if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The list should be sorted ...");
+ $v_sort_flag=true;
+
+ // ----- TBC : An automatic sort should be writen ...
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
+ }
+
+ // ----- Sort the items
+ if ($v_sort_flag) {
+ // TBC : To Be Completed
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "List sorting is not yet write ...");
+ }
+
+ // ----- Next option
+ $i++;
+ break;
+
+ // ----- Look for options that request no value
+ case PCLZIP_OPT_REMOVE_ALL_PATH :
+ case PCLZIP_OPT_EXTRACT_AS_STRING :
+ case PCLZIP_OPT_NO_COMPRESSION :
+ case PCLZIP_OPT_EXTRACT_IN_OUTPUT :
+ case PCLZIP_OPT_REPLACE_NEWER :
+ case PCLZIP_OPT_STOP_ON_ERROR :
+ $v_result_list[$p_options_list[$i]] = true;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ break;
+
+ // ----- Look for options that request an octal value
+ case PCLZIP_OPT_SET_CHMOD :
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_result_list[$p_options_list[$i]] = $p_options_list[$i+1];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($p_options_list[$i])." = '".$v_result_list[$p_options_list[$i]]."'");
+ $i++;
+ break;
+
+ // ----- Look for options that request a call-back
+ case PCLZIP_CB_PRE_EXTRACT :
+ case PCLZIP_CB_POST_EXTRACT :
+ case PCLZIP_CB_PRE_ADD :
+ case PCLZIP_CB_POST_ADD :
+ /* for futur use
+ case PCLZIP_CB_PRE_DELETE :
+ case PCLZIP_CB_POST_DELETE :
+ case PCLZIP_CB_PRE_LIST :
+ case PCLZIP_CB_POST_LIST :
+ */
+ // ----- Check the number of parameters
+ if (($i+1) >= $p_size) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Get the value
+ $v_function_name = $p_options_list[$i+1];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "call-back ".PclZipUtilOptionText($p_options_list[$i])." = '".$v_function_name."'");
+
+ // ----- Check that the value is a valid existing function
+ if (!function_exists($v_function_name)) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '".$v_function_name."()' is not an existing function for option '".PclZipUtilOptionText($p_options_list[$i])."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Set the attribute
+ $v_result_list[$p_options_list[$i]] = $v_function_name;
+ $i++;
+ break;
+
+ default :
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Unknown parameter '"
+ .$p_options_list[$i]."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Next options
+ $i++;
+ }
+
+ // ----- Look for mandatory options
+ if ($v_requested_options !== false) {
+ for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
+ // ----- Look for mandatory option
+ if ($v_requested_options[$key] == 'mandatory') {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")");
+ // ----- Look if present
+ if (!isset($v_result_list[$key])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privFileDescrParseAtt()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privFileDescrParseAtt(&$p_file_list, &$p_filedescr, $v_options, $v_requested_options=false)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privFileDescrParseAtt", "");
+ $v_result=1;
+
+ // ----- For each file in the list check the attributes
+ foreach ($p_file_list as $v_key => $v_value) {
+
+ // ----- Check if the option is supported
+ if (!isset($v_requested_options[$v_key])) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file attribute '".$v_key."' for this file");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for attribute
+ switch ($v_key) {
+ case PCLZIP_ATT_FILE_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['filename'] = PclZipUtilPathReduction($v_value);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
+
+ if ($p_filedescr['filename'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ break;
+
+ case PCLZIP_ATT_FILE_NEW_SHORT_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['new_short_name'] = PclZipUtilPathReduction($v_value);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
+
+ if ($p_filedescr['new_short_name'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty short filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ break;
+
+ case PCLZIP_ATT_FILE_NEW_FULL_NAME :
+ if (!is_string($v_value)) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid type ".gettype($v_value).". String expected for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ $p_filedescr['new_full_name'] = PclZipUtilPathReduction($v_value);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "".PclZipUtilOptionText($v_key)." = '".$v_value."'");
+
+ if ($p_filedescr['new_full_name'] == '') {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ATTRIBUTE_VALUE, "Invalid empty full filename for attribute '".PclZipUtilOptionText($v_key)."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ break;
+
+ default :
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER,
+ "Unknown parameter '".$v_key."'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for mandatory options
+ if ($v_requested_options !== false) {
+ for ($key=reset($v_requested_options); $key=key($v_requested_options); $key=next($v_requested_options)) {
+ // ----- Look for mandatory option
+ if ($v_requested_options[$key] == 'mandatory') {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Detect a mandatory option : ".PclZipUtilOptionText($key)."(".$key.")");
+ // ----- Look if present
+ if (!isset($p_file_list[$key])) {
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter ".PclZipUtilOptionText($key)."(".$key.")");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ }
+ }
+
+ // end foreach
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privFileDescrExpand()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // 1 on success.
+ // 0 on failure.
+ // --------------------------------------------------------------------------------
+ function privFileDescrExpand(&$p_filedescr_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privFileDescrExpand", "");
+ $v_result=1;
+
+ // ----- Create a result list
+ $v_result_list = array();
+
+ // ----- Look each entry
+ for ($i=0; $i<sizeof($p_filedescr_list); $i++) {
+ // ----- Get filedescr
+ $v_descr = $p_filedescr_list[$i];
+
+ // ----- Reduce the filename
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr before reduction :'".$v_descr['filename']."'");
+ $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename']);
+ $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr after reduction :'".$v_descr['filename']."'");
+
+ // ----- Get type of descr
+ if (!file_exists($v_descr['filename'])) {
+ // ----- Error log
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_descr['filename']."' does not exists");
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$v_descr['filename']."' does not exists");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ if (@is_file($v_descr['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a file");
+ $v_descr['type'] = 'file';
+ }
+ else if (@is_dir($v_descr['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a folder");
+ $v_descr['type'] = 'folder';
+ }
+ else if (@is_link($v_descr['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : link");
+ // skip
+ continue;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : unknown type");
+ // skip
+ continue;
+ }
+
+ // ----- Calculate the stored filename
+ $this->privCalculateStoredFilename($v_descr, $p_options);
+
+ // ----- Add the descriptor in result list
+ $v_result_list[sizeof($v_result_list)] = $v_descr;
+
+ // ----- Look for folder
+ if ($v_descr['type'] == 'folder') {
+ // ----- List of items in folder
+ $v_dirlist_descr = array();
+ $v_dirlist_nb = 0;
+ if ($v_folder_handler = @opendir($v_descr['filename'])) {
+ while (($v_item_handler = @readdir($v_folder_handler)) !== false) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Looking for '".$v_item_handler."' in the directory");
+
+ // ----- Skip '.' and '..'
+ if (($v_item_handler == '.') || ($v_item_handler == '..')) {
+ continue;
+ }
+
+ // ----- Compose the full filename
+ $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'].'/'.$v_item_handler;
+
+ // ----- Look for different stored filename
+ // Because the name of the folder was changed, the name of the
+ // files/sub-folders also change
+ if ($v_descr['stored_filename'] != $v_descr['filename']) {
+ $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'].'/'.$v_item_handler;
+ }
+
+ $v_dirlist_nb++;
+ }
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to open dir '".$v_descr['filename']."' in read mode. Skipped.");
+ // TBC : unable to open folder in read mode
+ }
+
+ // ----- Expand each element of the list
+ if ($v_dirlist_nb != 0) {
+ // ----- Expand
+ if (($v_result = $this->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Concat the resulting list
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Merging result list (size '".sizeof($v_result_list)."') with dirlist (size '".sizeof($v_dirlist_descr)."')");
+ $v_result_list = array_merge($v_result_list, $v_dirlist_descr);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "merged result list is size '".sizeof($v_result_list)."'");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Nothing in this folder to expand.");
+ }
+
+ // ----- Free local array
+ unset($v_dirlist_descr);
+ }
+ }
+
+ // ----- Get the result list
+ $p_filedescr_list = $v_result_list;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCreate()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privCreate($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCreate", "list");
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the file in write mode
+ if (($v_result = $this->privOpenFd('wb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Add the list of files
+ $v_result = $this->privAddList($p_filedescr_list, $p_result_list, $p_options);
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAdd()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAdd($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAdd", "list");
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Look if the archive exists or is empty
+ if ((!is_file($this->zipname)) || (filesize($this->zipname) == 0))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive does not exist, or is empty, create it.");
+
+ // ----- Do a create
+ $v_result = $this->privCreate($p_filedescr_list, $p_result_list, $p_options);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Open the temporary file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
+ {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = $v_central_dir['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Swap the file descriptor
+ // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+ // the following methods on the temporary fil and not the real archive
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Add the files
+ $v_header_list = array();
+ if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
+ {
+ fclose($v_zip_temp_fd);
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "New offset of central dir : $v_offset");
+
+ // ----- Copy the block of file headers from the old archive
+ $v_size = $v_central_dir['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($v_zip_temp_fd, $v_read_size);
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Create the Central Dir files header
+ for ($i=0, $v_count=0; $i<sizeof($v_header_list); $i++)
+ {
+ // ----- Create the file header
+ if ($v_header_list[$i]['status'] == 'ok') {
+ if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ fclose($v_zip_temp_fd);
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ $v_count++;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+ // ----- Zip file comment
+ $v_comment = $v_central_dir['comment'];
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+ if (isset($p_options[PCLZIP_OPT_ADD_COMMENT])) {
+ $v_comment = $v_comment.$p_options[PCLZIP_OPT_ADD_COMMENT];
+ }
+ if (isset($p_options[PCLZIP_OPT_PREPEND_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_PREPEND_COMMENT].$v_comment;
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($this->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_count+$v_central_dir['entries'], $v_size, $v_offset, $v_comment)) != 1)
+ {
+ // ----- Reset the file list
+ unset($v_header_list);
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Swap back the file descriptor
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privOpenFd()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privOpenFd($p_mode)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privOpenFd", 'mode='.$p_mode);
+ $v_result=1;
+
+ // ----- Look if already open
+ if ($this->zip_fd != 0)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Zip file \''.$this->zipname.'\' already open');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Open file in '.$p_mode.' mode');
+ if (($this->zip_fd = @fopen($this->zipname, $p_mode)) == 0)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in '.$p_mode.' mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCloseFd()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privCloseFd()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCloseFd", "");
+ $v_result=1;
+
+ if ($this->zip_fd != 0)
+ @fclose($this->zip_fd);
+ $this->zip_fd = 0;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddList()
+ // Description :
+ // $p_add_dir and $p_remove_dir will give the ability to memorize a path which is
+ // different from the real path of the file. This is usefull if you want to have PclTar
+ // running in any directory, and memorize relative path from an other directory.
+ // Parameters :
+ // $p_list : An array containing the file or directory names to add in the tar
+ // $p_result_list : list of added files with their properties (specially the status field)
+ // $p_add_dir : Path to add in the filename path archived
+ // $p_remove_dir : Path to remove in the filename path archived
+ // Return Values :
+ // --------------------------------------------------------------------------------
+// function privAddList($p_list, &$p_result_list, $p_add_dir, $p_remove_dir, $p_remove_all_dir, &$p_options)
+ function privAddList($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddList", "list");
+ $v_result=1;
+
+ // ----- Add the files
+ $v_header_list = array();
+ if (($v_result = $this->privAddFileList($p_filedescr_list, $v_header_list, $p_options)) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($this->zip_fd);
+
+ // ----- Create the Central Dir files header
+ for ($i=0,$v_count=0; $i<sizeof($v_header_list); $i++)
+ {
+ // ----- Create the file header
+ if ($v_header_list[$i]['status'] == 'ok') {
+ if (($v_result = $this->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ $v_count++;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $this->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+ // ----- Zip file comment
+ $v_comment = '';
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($this->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_count, $v_size, $v_offset, $v_comment)) != 1)
+ {
+ // ----- Reset the file list
+ unset($v_header_list);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddFileList()
+ // Description :
+ // Parameters :
+ // $p_filedescr_list : An array containing the file description
+ // or directory names to add in the zip
+ // $p_result_list : list of added files with their properties (specially the status field)
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAddFileList($p_filedescr_list, &$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddFileList", "filedescr_list");
+ $v_result=1;
+ $v_header = array();
+
+ // ----- Recuperate the current number of elt in list
+ $v_nb = sizeof($p_result_list);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Before add, list have ".$v_nb." elements");
+
+ // ----- Loop on the files
+ for ($j=0; ($j<sizeof($p_filedescr_list)) && ($v_result==1); $j++) {
+ // ----- Format the filename
+ $p_filedescr_list[$j]['filename']
+ = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Looking for file '".$p_filedescr_list[$j]['filename']."'");
+
+ // ----- Skip empty file names
+ // TBC : Can this be possible ? not checked in DescrParseAtt ?
+ if ($p_filedescr_list[$j]['filename'] == "") {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Skip empty filename");
+ continue;
+ }
+
+ // ----- Check the filename
+ if (!file_exists($p_filedescr_list[$j]['filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$p_filedescr_list[$j]['filename']."' does not exists");
+ PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '".$p_filedescr_list[$j]['filename']."' does not exists");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look if it is a file or a dir with no all path remove option
+ if ( (is_file($p_filedescr_list[$j]['filename']))
+ || ( is_dir($p_filedescr_list[$j]['filename'])
+ && ( !isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])
+ || !$p_options[PCLZIP_OPT_REMOVE_ALL_PATH]))) {
+
+ // ----- Add the file
+ $v_result = $this->privAddFile($p_filedescr_list[$j], $v_header,
+ $p_options);
+ if ($v_result != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the file infos
+ $p_result_list[$v_nb++] = $v_header;
+ }
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "After add, list have ".$v_nb." elements");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privAddFile()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privAddFile($p_filedescr, &$p_header, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privAddFile", "filename='".$p_filedescr['filename']."'");
+ $v_result=1;
+
+ // ----- Working variable
+ $p_filename = $p_filedescr['filename'];
+
+ // TBC : Already done in the fileAtt check ... ?
+ if ($p_filename == "") {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid file list parameter (invalid or empty list)");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Look for a stored different filename
+ if (isset($p_filedescr['stored_filename'])) {
+ $v_stored_filename = $p_filedescr['stored_filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is NOT the same "'.$v_stored_filename.'"');
+ }
+ else {
+ $v_stored_filename = $p_filedescr['stored_filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'Stored filename is the same');
+ }
+
+ // ----- Set the file properties
+ clearstatcache();
+ $p_header['version'] = 20;
+ $p_header['version_extracted'] = 10;
+ $p_header['flag'] = 0;
+ $p_header['compression'] = 0;
+ $p_header['mtime'] = filemtime($p_filename);
+ $p_header['crc'] = 0;
+ $p_header['compressed_size'] = 0;
+ $p_header['size'] = filesize($p_filename);
+ $p_header['filename_len'] = strlen($p_filename);
+ $p_header['extra_len'] = 0;
+ $p_header['comment_len'] = 0;
+ $p_header['disk'] = 0;
+ $p_header['internal'] = 0;
+// $p_header['external'] = (is_file($p_filename)?0xFE49FFE0:0x41FF0010);
+ $p_header['external'] = (is_file($p_filename)?0x00000000:0x00000010);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header external extension '".sprintf("0x%X",$p_header['external'])."'");
+ $p_header['offset'] = 0;
+ $p_header['filename'] = $p_filename;
+ $p_header['stored_filename'] = $v_stored_filename;
+ $p_header['extra'] = '';
+ $p_header['comment'] = '';
+ $p_header['status'] = 'ok';
+ $p_header['index'] = -1;
+
+ // ----- Look for pre-add callback
+ if (isset($p_options[PCLZIP_CB_PRE_ADD])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_ADD]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_header, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_PRE_ADD].'(PCLZIP_CB_PRE_ADD, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_header['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ if ($p_header['stored_filename'] != $v_local_header['stored_filename']) {
+ $p_header['stored_filename'] = PclZipUtilPathReduction($v_local_header['stored_filename']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New stored filename is '".$p_header['stored_filename']."'");
+ }
+ }
+
+ // ----- Look for empty stored filename
+ if ($p_header['stored_filename'] == "") {
+ $p_header['status'] = "filtered";
+ }
+
+ // ----- Check the path length
+ if (strlen($p_header['stored_filename']) > 0xFF) {
+ $p_header['status'] = 'filename_too_long';
+ }
+
+ // ----- Look if no error, or file not skipped
+ if ($p_header['status'] == 'ok') {
+
+ // ----- Look for a file
+ if (is_file($p_filename))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "'".$p_filename."' is a file");
+ // ----- Open the source file
+ if (($v_file = @fopen($p_filename, "rb")) == 0) {
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, "Unable to open file '$p_filename' in binary read mode");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ if ($p_options[PCLZIP_OPT_NO_COMPRESSION]) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will not be compressed");
+ // ----- Read the file content
+ $v_content_compressed = @fread($v_file, $p_header['size']);
+
+ // ----- Calculate the CRC
+ $p_header['crc'] = @crc32($v_content_compressed);
+
+ // ----- Set header parameters
+ $p_header['compressed_size'] = $p_header['size'];
+ $p_header['compression'] = 0;
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will be compressed");
+ // ----- Read the file content
+ $v_content = @fread($v_file, $p_header['size']);
+
+ // ----- Calculate the CRC
+ $p_header['crc'] = @crc32($v_content);
+
+ // ----- Compress the file
+ $v_content_compressed = @gzdeflate($v_content);
+
+ // ----- Set header parameters
+ $p_header['compressed_size'] = strlen($v_content_compressed);
+ $p_header['compression'] = 8;
+ }
+
+ // ----- Look for encryption
+ /*
+ if ((isset($p_options[PCLZIP_OPT_CRYPT]))
+ && ($p_options[PCLZIP_OPT_CRYPT] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File need to be crypted ....");
+
+ // Should be a random header
+ $v_header = 'xxxxxxxxxxxx';
+ $v_content_compressed = PclZipUtilZipEncrypt($v_content_compressed,
+ $p_header['compressed_size'],
+ $v_header,
+ $p_header['crc'],
+ "test");
+
+ $p_header['compressed_size'] += 12;
+ $p_header['flag'] = 1;
+
+ // ----- Add the header to the data
+ $v_content_compressed = $v_header.$v_content_compressed;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Size after header : ".strlen($v_content_compressed)."");
+ }
+ */
+
+ // ----- Call the header generation
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1) {
+ @fclose($v_file);
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Write the compressed (or not) content
+ @fwrite($this->zip_fd,
+ $v_content_compressed, $p_header['compressed_size']);
+
+ // ----- Close the file
+ @fclose($v_file);
+ }
+
+ // ----- Look for a directory
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "'".$p_filename."' is a folder");
+ // ----- Look for directory last '/'
+ if (@substr($p_header['stored_filename'], -1) != '/') {
+ $p_header['stored_filename'] .= '/';
+ }
+
+ // ----- Set the file properties
+ $p_header['size'] = 0;
+ //$p_header['external'] = 0x41FF0010; // Value for a folder : to be checked
+ $p_header['external'] = 0x00000010; // Value for a folder : to be checked
+
+ // ----- Call the header generation
+ if (($v_result = $this->privWriteFileHeader($p_header)) != 1)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ }
+ }
+
+ // ----- Look for post-add callback
+ if (isset($p_options[PCLZIP_CB_POST_ADD])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_ADD]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_header, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_POST_ADD].'(PCLZIP_CB_POST_ADD, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Ignored
+ $v_result = 1;
+ }
+
+ // ----- Update the informations
+ // Nothing can be modified
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCalculateStoredFilename()
+ // Description :
+ // Based on file descriptor properties and global options, this method
+ // calculate the filename that will be stored in the archive.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privCalculateStoredFilename(&$p_filedescr, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCalculateStoredFilename", "filename='".$p_filedescr['filename']."'");
+ $v_result=1;
+
+ // ----- Working variables
+ $p_filename = $p_filedescr['filename'];
+ if (isset($p_options[PCLZIP_OPT_ADD_PATH])) {
+ $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH];
+ }
+ else {
+ $p_add_dir = '';
+ }
+ if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) {
+ $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH];
+ }
+ else {
+ $p_remove_dir = '';
+ }
+ if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
+ $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH];
+ }
+ else {
+ $p_remove_all_dir = 0;
+ }
+
+ // ----- Look for full name change
+ if (isset($p_filedescr['new_full_name'])) {
+ $v_stored_filename = $p_filedescr['new_full_name'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Changing full name of '".$p_filename."' for '".$v_stored_filename."'");
+ }
+
+ // ----- Look for path and/or short name change
+ else {
+
+ // ----- Look for short name change
+ if (isset($p_filedescr['new_short_name'])) {
+ $v_path_info = pathinfo($p_filename);
+ $v_dir = '';
+ if ($v_path_info['dirname'] != '') {
+ $v_dir = $v_path_info['dirname'].'/';
+ }
+ $v_stored_filename = $v_dir.$p_filedescr['new_short_name'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Changing short name of '".$p_filename."' for '".$v_stored_filename."'");
+ }
+ else {
+ // ----- Calculate the stored filename
+ $v_stored_filename = $p_filename;
+ }
+
+ // ----- Look for all path to remove
+ if ($p_remove_all_dir) {
+ $v_stored_filename = basename($p_filename);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Remove all path selected change '".$p_filename."' for '".$v_stored_filename."'");
+ }
+ // ----- Look for partial path remove
+ else if ($p_remove_dir != "") {
+ if (substr($p_remove_dir, -1) != '/')
+ $p_remove_dir .= "/";
+
+ if ( (substr($p_filename, 0, 2) == "./")
+ || (substr($p_remove_dir, 0, 2) == "./")) {
+
+ if ( (substr($p_filename, 0, 2) == "./")
+ && (substr($p_remove_dir, 0, 2) != "./")) {
+ $p_remove_dir = "./".$p_remove_dir;
+ }
+ if ( (substr($p_filename, 0, 2) != "./")
+ && (substr($p_remove_dir, 0, 2) == "./")) {
+ $p_remove_dir = substr($p_remove_dir, 2);
+ }
+ }
+
+ $v_compare = PclZipUtilPathInclusion($p_remove_dir,
+ $v_stored_filename);
+ if ($v_compare > 0) {
+ if ($v_compare == 2) {
+ $v_stored_filename = "";
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Path to remove is the current folder");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Remove path '$p_remove_dir' in file '$v_stored_filename'");
+ $v_stored_filename = substr($v_stored_filename,
+ strlen($p_remove_dir));
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Result is '$v_stored_filename'");
+ }
+ }
+ }
+ // ----- Look for path to add
+ if ($p_add_dir != "") {
+ if (substr($p_add_dir, -1) == "/")
+ $v_stored_filename = $p_add_dir.$v_stored_filename;
+ else
+ $v_stored_filename = $p_add_dir."/".$v_stored_filename;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Add path '$p_add_dir' in file '$p_filename' = '$v_stored_filename'");
+ }
+ }
+
+ // ----- Filename (reduce the path of stored name)
+ $v_stored_filename = PclZipUtilPathReduction($v_stored_filename);
+ $p_filedescr['stored_filename'] = $v_stored_filename;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Stored filename will be '".$p_filedescr['stored_filename']."', strlen ".strlen($p_filedescr['stored_filename']));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteFileHeader", 'file="'.$p_header['filename'].'", stored as "'.$p_header['stored_filename'].'"');
+ $v_result=1;
+
+ // ----- Store the offset position of the file
+ $p_header['offset'] = ftell($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, 'File offset of the header :'.$p_header['offset']);
+
+ // ----- Transform UNIX mtime to DOS format mdate/mtime
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ $v_date = getdate($p_header['mtime']);
+ $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
+ $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvvVVVvv", 0x04034b50,
+ $p_header['version_extracted'], $p_header['flag'],
+ $p_header['compression'], $v_mtime, $v_mdate,
+ $p_header['crc'], $p_header['compressed_size'],
+ $p_header['size'],
+ strlen($p_header['stored_filename']),
+ $p_header['extra_len']);
+
+ // ----- Write the first 148 bytes of the header in the archive
+ fputs($this->zip_fd, $v_binary_data, 30);
+
+ // ----- Write the variable fields
+ if (strlen($p_header['stored_filename']) != 0)
+ {
+ fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+ }
+ if ($p_header['extra_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteCentralFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteCentralFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteCentralFileHeader", 'file="'.$p_header['filename'].'", stored as "'.$p_header['stored_filename'].'"');
+ $v_result=1;
+
+ // TBC
+ //for(reset($p_header); $key = key($p_header); next($p_header)) {
+ // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "header[$key] = ".$p_header[$key]);
+ //}
+
+ // ----- Transform UNIX mtime to DOS format mdate/mtime
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ $v_date = getdate($p_header['mtime']);
+ $v_mtime = ($v_date['hours']<<11) + ($v_date['minutes']<<5) + $v_date['seconds']/2;
+ $v_mdate = (($v_date['year']-1980)<<9) + ($v_date['mon']<<5) + $v_date['mday'];
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvvvVVVvvvvvVV", 0x02014b50,
+ $p_header['version'], $p_header['version_extracted'],
+ $p_header['flag'], $p_header['compression'],
+ $v_mtime, $v_mdate, $p_header['crc'],
+ $p_header['compressed_size'], $p_header['size'],
+ strlen($p_header['stored_filename']),
+ $p_header['extra_len'], $p_header['comment_len'],
+ $p_header['disk'], $p_header['internal'],
+ $p_header['external'], $p_header['offset']);
+
+ // ----- Write the 42 bytes of the header in the zip file
+ fputs($this->zip_fd, $v_binary_data, 46);
+
+ // ----- Write the variable fields
+ if (strlen($p_header['stored_filename']) != 0)
+ {
+ fputs($this->zip_fd, $p_header['stored_filename'], strlen($p_header['stored_filename']));
+ }
+ if ($p_header['extra_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['extra'], $p_header['extra_len']);
+ }
+ if ($p_header['comment_len'] != 0)
+ {
+ fputs($this->zip_fd, $p_header['comment'], $p_header['comment_len']);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privWriteCentralHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privWriteCentralHeader($p_nb_entries, $p_size, $p_offset, $p_comment)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privWriteCentralHeader", 'nb_entries='.$p_nb_entries.', size='.$p_size.', offset='.$p_offset.', comment="'.$p_comment.'"');
+ $v_result=1;
+
+ // ----- Packed data
+ $v_binary_data = pack("VvvvvVVv", 0x06054b50, 0, 0, $p_nb_entries,
+ $p_nb_entries, $p_size,
+ $p_offset, strlen($p_comment));
+
+ // ----- Write the 22 bytes of the header in the zip file
+ fputs($this->zip_fd, $v_binary_data, 22);
+
+ // ----- Write the variable fields
+ if (strlen($p_comment) != 0)
+ {
+ fputs($this->zip_fd, $p_comment, strlen($p_comment));
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privList()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privList(&$p_list)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privList", "list");
+ $v_result=1;
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($this->zip_fd = @fopen($this->zipname, 'rb')) == 0)
+ {
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive \''.$this->zipname.'\' in binary read mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of Central Dir
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Offset : ".$v_central_dir['offset']."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_central_dir['offset']))
+ {
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position in file : ".ftell($this->zip_fd)."'");
+
+ // ----- Read each entry
+ for ($i=0; $i<$v_central_dir['entries']; $i++)
+ {
+ // ----- Read the file header
+ if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ $v_header['index'] = $i;
+
+ // ----- Get the only interesting attributes
+ $this->privConvertHeader2FileInfo($v_header, $p_list[$i]);
+ unset($v_header);
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Magic quotes trick
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privConvertHeader2FileInfo()
+ // Description :
+ // This function takes the file informations from the central directory
+ // entries and extract the interesting parameters that will be given back.
+ // The resulting file infos are set in the array $p_info
+ // $p_info['filename'] : Filename with full path. Given by user (add),
+ // extracted in the filesystem (extract).
+ // $p_info['stored_filename'] : Stored filename in the archive.
+ // $p_info['size'] = Size of the file.
+ // $p_info['compressed_size'] = Compressed size of the file.
+ // $p_info['mtime'] = Last modification date of the file.
+ // $p_info['comment'] = Comment associated with the file.
+ // $p_info['folder'] = true/false : indicates if the entry is a folder or not.
+ // $p_info['status'] = status of the action on the file.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privConvertHeader2FileInfo($p_header, &$p_info)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privConvertHeader2FileInfo", "Filename='".$p_header['filename']."'");
+ $v_result=1;
+
+ // ----- Get the interesting attributes
+ $p_info['filename'] = $p_header['filename'];
+ $p_info['stored_filename'] = $p_header['stored_filename'];
+ $p_info['size'] = $p_header['size'];
+ $p_info['compressed_size'] = $p_header['compressed_size'];
+ $p_info['mtime'] = $p_header['mtime'];
+ $p_info['comment'] = $p_header['comment'];
+ $p_info['folder'] = (($p_header['external']&0x00000010)==0x00000010);
+ $p_info['index'] = $p_header['index'];
+ $p_info['status'] = $p_header['status'];
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractByRule()
+ // Description :
+ // Extract a file or directory depending of rules (by index, by name, ...)
+ // Parameters :
+ // $p_file_list : An array where will be placed the properties of each
+ // extracted file
+ // $p_path : Path to add while writing the extracted files
+ // $p_remove_path : Path to remove (from the file memorized path) while writing the
+ // extracted files. If the path does not match the file path,
+ // the file is extracted with its memorized path.
+ // $p_remove_path does not apply to 'list' mode.
+ // $p_path and $p_remove_path are commulative.
+ // Return Values :
+ // 1 on success,0 or less on error (see error code list)
+ // --------------------------------------------------------------------------------
+ function privExtractByRule(&$p_file_list, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privExtractByRule", "path='$p_path', remove_path='$p_remove_path', remove_all_path='".($p_remove_all_path?'true':'false')."'");
+ $v_result=1;
+
+ // ----- Magic quotes trick
+ $this->privDisableMagicQuotes();
+
+ // ----- Check the path
+ if ( ($p_path == "")
+ || ( (substr($p_path, 0, 1) != "/")
+ && (substr($p_path, 0, 3) != "../")
+ && (substr($p_path,1,2)!=":/")))
+ $p_path = "./".$p_path;
+
+ // ----- Reduce the path last (and duplicated) '/'
+ if (($p_path != "./") && ($p_path != "/"))
+ {
+ // ----- Look for the path end '/'
+ while (substr($p_path, -1) == "/")
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Destination path [$p_path] ends by '/'");
+ $p_path = substr($p_path, 0, strlen($p_path)-1);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Modified to [$p_path]");
+ }
+ }
+
+ // ----- Look for path to remove format (should end by /)
+ if (($p_remove_path != "") && (substr($p_remove_path, -1) != '/'))
+ {
+ $p_remove_path .= '/';
+ }
+ $p_remove_path_size = strlen($p_remove_path);
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result = $this->privOpenFd('rb')) != 1)
+ {
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Start at beginning of Central Dir
+ $v_pos_entry = $v_central_dir['offset'];
+
+ // ----- Read each entry
+ $j_start = 0;
+ for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Read next file header entry : '$i'");
+
+ // ----- Read next Central dir entry
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_pos_entry))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Read the file header
+ $v_header = array();
+ if (($v_result = $this->privReadCentralFileHeader($v_header)) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Store the index
+ $v_header['index'] = $i;
+
+ // ----- Store the file position
+ $v_pos_entry = ftell($this->zip_fd);
+
+ // ----- Look for the specific extract rules
+ $v_extract = false;
+
+ // ----- Look for extract by name rule
+ if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
+ && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByName'");
+
+ // ----- Look if the filename is in the list
+ for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_extract); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Compare with file '".$p_options[PCLZIP_OPT_BY_NAME][$j]."'");
+
+ // ----- Look for a directory
+ if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The searched item is a directory");
+
+ // ----- Look if the directory is in the filename path
+ if ( (strlen($v_header['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
+ && (substr($v_header['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The directory is in the file path");
+ $v_extract = true;
+ }
+ }
+ // ----- Look for a filename
+ elseif ($v_header['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The file is the right one.");
+ $v_extract = true;
+ }
+ }
+ }
+
+ // ----- Look for extract by ereg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
+ && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract by ereg '".$p_options[PCLZIP_OPT_BY_EREG]."'");
+
+ if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_extract = true;
+ }
+ }
+
+ // ----- Look for extract by preg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
+ && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByEreg'");
+
+ if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_extract = true;
+ }
+ }
+
+ // ----- Look for extract by index rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
+ && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByIndex'");
+
+ // ----- Look if the index is in the list
+ for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_extract); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look if index '$i' is in [".$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].",".$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']."]");
+
+ if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found as part of an index range");
+ $v_extract = true;
+ }
+ if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Do not look this index range for next loop");
+ $j_start = $j+1;
+ }
+
+ if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Index range is greater than index, stop loop");
+ break;
+ }
+ }
+ }
+
+ // ----- Look for no rule, which means extract all the archive
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with no rule (extract all)");
+ $v_extract = true;
+ }
+
+ // ----- Check compression method
+ if ( ($v_extract)
+ && ( ($v_header['compression'] != 8)
+ && ($v_header['compression'] != 0))) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unsupported compression method (".$v_header['compression'].")");
+ $v_header['status'] = 'unsupported_compression';
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_COMPRESSION,
+ "Filename '".$v_header['stored_filename']."' is "
+ ."compressed by an unsupported compression "
+ ."method (".$v_header['compression'].") ");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Check encrypted files
+ if (($v_extract) && (($v_header['flag'] & 1) == 1)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unsupported file encryption");
+ $v_header['status'] = 'unsupported_encryption';
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ $this->privSwapBackMagicQuotes();
+
+ PclZip::privErrorLog(PCLZIP_ERR_UNSUPPORTED_ENCRYPTION,
+ "Unsupported encryption for "
+ ." filename '".$v_header['stored_filename']
+ ."'");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look for real extraction
+ if (($v_extract) && ($v_header['status'] != 'ok')) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "No need for extract");
+ $v_result = $this->privConvertHeader2FileInfo($v_header,
+ $p_file_list[$v_nb_extracted++]);
+ if ($v_result != 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ $v_extract = false;
+ }
+
+ // ----- Look for real extraction
+ if ($v_extract)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file '".$v_header['filename']."', index '$i'");
+
+ // ----- Go to the file position
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_header['offset']))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Look for extraction as string
+ if ($p_options[PCLZIP_OPT_EXTRACT_AS_STRING]) {
+
+ // ----- Extracting the file
+ $v_result1 = $this->privExtractFileAsString($v_header, $v_string);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Set the file content
+ $p_file_list[$v_nb_extracted]['content'] = $v_string;
+
+ // ----- Next extracted file
+ $v_nb_extracted++;
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ // ----- Look for extraction in standard output
+ elseif ( (isset($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT]))
+ && ($p_options[PCLZIP_OPT_EXTRACT_IN_OUTPUT])) {
+ // ----- Extracting the file in standard output
+ $v_result1 = $this->privExtractFileInOutput($v_header, $p_options);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ // ----- Look for normal extraction
+ else {
+ // ----- Extracting the file
+ $v_result1 = $this->privExtractFile($v_header,
+ $p_path, $p_remove_path,
+ $p_remove_all_path,
+ $p_options);
+ if ($v_result1 < 1) {
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result1);
+ return $v_result1;
+ }
+
+ // ----- Get the only interesting attributes
+ if (($v_result = $this->privConvertHeader2FileInfo($v_header, $p_file_list[$v_nb_extracted++])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look for user callback abort
+ if ($v_result1 == 2) {
+ break;
+ }
+ }
+ }
+ }
+
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $this->privSwapBackMagicQuotes();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFile()
+ // Description :
+ // Parameters :
+ // Return Values :
+ //
+ // 1 : ... ?
+ // PCLZIP_ERR_USER_ABORTED(2) : User ask for extraction stop in callback
+ // --------------------------------------------------------------------------------
+ function privExtractFile(&$p_entry, $p_path, $p_remove_path, $p_remove_all_path, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFile', "path='$p_path', remove_path='$p_remove_path', remove_all_path='".($p_remove_all_path?'true':'false')."'");
+ $v_result=1;
+
+ // ----- Read the file header
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'");
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ // ----- Look for all path to remove
+ if ($p_remove_all_path == true) {
+ // ----- Look for folder entry that not need to be extracted
+ if (($p_entry['external']&0x00000010)==0x00000010) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The entry is a folder : need to be filtered");
+
+ $p_entry['status'] = "filtered";
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "All path is removed");
+ // ----- Get the basename of the path
+ $p_entry['filename'] = basename($p_entry['filename']);
+ }
+
+ // ----- Look for path to remove
+ else if ($p_remove_path != "")
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look for some path to remove");
+ if (PclZipUtilPathInclusion($p_remove_path, $p_entry['filename']) == 2)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The folder is the same as the removed path '".$p_entry['filename']."'");
+
+ // ----- Change the file status
+ $p_entry['status'] = "filtered";
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ $p_remove_path_size = strlen($p_remove_path);
+ if (substr($p_entry['filename'], 0, $p_remove_path_size) == $p_remove_path)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found path '$p_remove_path' to remove in file '".$p_entry['filename']."'");
+
+ // ----- Remove the path
+ $p_entry['filename'] = substr($p_entry['filename'], $p_remove_path_size);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Resulting file is '".$p_entry['filename']."'");
+ }
+ }
+
+ // ----- Add the path
+ if ($p_path != '') {
+ $p_entry['filename'] = $p_path."/".$p_entry['filename'];
+ }
+
+ // ----- Check a base_dir_restriction
+ if (isset($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Check the extract directory restriction");
+ $v_inclusion
+ = PclZipUtilPathInclusion($p_options[PCLZIP_OPT_EXTRACT_DIR_RESTRICTION],
+ $p_entry['filename']);
+ if ($v_inclusion == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_EXTRACT_DIR_RESTRICTION is selected, file is outside restriction");
+
+ PclZip::privErrorLog(PCLZIP_ERR_DIRECTORY_RESTRICTION,
+ "Filename '".$p_entry['filename']."' is "
+ ."outside PCLZIP_OPT_EXTRACT_DIR_RESTRICTION");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look for pre-extract callback
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_entry['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ // ----- This status is internal and will be changed in 'skipped'
+ $p_entry['status'] = "aborted";
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ $p_entry['filename'] = $v_local_header['filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New filename is '".$p_entry['filename']."'");
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '".$p_entry['filename']."', size '$v_header[size]'");
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Look for specific actions while the file exist
+ if (file_exists($p_entry['filename']))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$p_entry['filename']."' already exists");
+
+ // ----- Look if file is a directory
+ if (is_dir($p_entry['filename']))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is a directory");
+
+ // ----- Change the file status
+ $p_entry['status'] = "already_a_directory";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ PclZip::privErrorLog(PCLZIP_ERR_ALREADY_A_DIRECTORY,
+ "Filename '".$p_entry['filename']."' is "
+ ."already used by an existing directory");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ // ----- Look if file is write protected
+ else if (!is_writeable($p_entry['filename']))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is write protected");
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_protected";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
+ "Filename '".$p_entry['filename']."' exists "
+ ."and is write protected");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Look if the extracted file is older
+ else if (filemtime($p_entry['filename']) > $p_entry['mtime'])
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is newer (".date("l dS of F Y h:i:s A", filemtime($p_entry['filename'])).") than the extracted file (".date("l dS of F Y h:i:s A", $p_entry['mtime']).")");
+ // ----- Change the file status
+ if ( (isset($p_options[PCLZIP_OPT_REPLACE_NEWER]))
+ && ($p_options[PCLZIP_OPT_REPLACE_NEWER]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_REPLACE_NEWER is selected, file will be replaced");
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File will not be replaced");
+ $p_entry['status'] = "newer_exist";
+
+ // ----- Look for PCLZIP_OPT_STOP_ON_ERROR
+ // For historical reason first PclZip implementation does not stop
+ // when this kind of error occurs.
+ if ( (isset($p_options[PCLZIP_OPT_STOP_ON_ERROR]))
+ && ($p_options[PCLZIP_OPT_STOP_ON_ERROR]===true)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "PCLZIP_OPT_STOP_ON_ERROR is selected, extraction will be stopped");
+
+ PclZip::privErrorLog(PCLZIP_ERR_WRITE_OPEN_FAIL,
+ "Newer version of '".$p_entry['filename']."' exists "
+ ."and option PCLZIP_OPT_REPLACE_NEWER is not selected");
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Existing file '".$p_entry['filename']."' is older than the extrated one - will be replaced by the extracted one (".date("l dS of F Y h:i:s A", filemtime($p_entry['filename'])).") than the extracted file (".date("l dS of F Y h:i:s A", $p_entry['mtime']).")");
+ }
+ }
+
+ // ----- Check the directory availability and create it if necessary
+ else {
+ if ((($p_entry['external']&0x00000010)==0x00000010) || (substr($p_entry['filename'], -1) == '/'))
+ $v_dir_to_check = $p_entry['filename'];
+ else if (!strstr($p_entry['filename'], "/"))
+ $v_dir_to_check = "";
+ else
+ $v_dir_to_check = dirname($p_entry['filename']);
+
+ if (($v_result = $this->privDirCheck($v_dir_to_check, (($p_entry['external']&0x00000010)==0x00000010))) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to create path for '".$p_entry['filename']."'");
+
+ // ----- Change the file status
+ $p_entry['status'] = "path_creation_fail";
+
+ // ----- Return
+ ////--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ //return $v_result;
+ $v_result = 1;
+ }
+ }
+ }
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010))
+ {
+ // ----- Look for not compressed file
+ if ($p_entry['compression'] == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file");
+
+ // ----- Opening destination file
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Error while opening '".$p_entry['filename']."' in write binary mode");
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_error";
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Read '".$p_entry['size']."' bytes");
+
+ // ----- Read the file by PCLZIP_READ_BLOCK_SIZE octets blocks
+ $v_size = $p_entry['compressed_size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Read $v_read_size bytes");
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
+ /* Try to speed up the code
+ $v_binary_data = pack('a'.$v_read_size, $v_buffer);
+ @fwrite($v_dest_file, $v_binary_data, $v_read_size);
+ */
+ @fwrite($v_dest_file, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Closing the destination file
+ fclose($v_dest_file);
+
+ // ----- Change the file mtime
+ touch($p_entry['filename'], $p_entry['mtime']);
+
+
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file (Compression method ".$p_entry['compression'].")");
+ // ----- TBC
+ // Need to be finished
+ if (($p_entry['flag'] & 1) == 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File is encrypted");
+ /*
+ // ----- Read the encryption header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read 12 encryption header bytes");
+ $v_encryption_header = @fread($this->zip_fd, 12);
+
+ // ----- Read the encrypted & compressed file in a buffer
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read '".($p_entry['compressed_size']-12)."' compressed & encrypted bytes");
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']-12);
+
+ // ----- Decrypt the buffer
+ $this->privDecrypt($v_encryption_header, $v_buffer,
+ $p_entry['compressed_size']-12, $p_entry['crc']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Buffer is '".$v_buffer."'");
+ */
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read '".$p_entry['compressed_size']."' compressed bytes");
+ // ----- Read the compressed file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+ }
+
+ // ----- Decompress the file
+ $v_file_content = @gzinflate($v_buffer);
+ unset($v_buffer);
+ if ($v_file_content === FALSE) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to inflate compressed file");
+
+ // ----- Change the file status
+ // TBC
+ $p_entry['status'] = "error";
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Opening destination file
+ if (($v_dest_file = @fopen($p_entry['filename'], 'wb')) == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Error while opening '".$p_entry['filename']."' in write binary mode");
+
+ // ----- Change the file status
+ $p_entry['status'] = "write_error";
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Write the uncompressed data
+ @fwrite($v_dest_file, $v_file_content, $p_entry['size']);
+ unset($v_file_content);
+
+ // ----- Closing the destination file
+ @fclose($v_dest_file);
+
+ // ----- Change the file mtime
+ @touch($p_entry['filename'], $p_entry['mtime']);
+ }
+
+ // ----- Look for chmod option
+ if (isset($p_options[PCLZIP_OPT_SET_CHMOD])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "chmod option activated '".$p_options[PCLZIP_OPT_SET_CHMOD]."'");
+
+ // ----- Change the mode of the file
+ @chmod($p_entry['filename'], $p_options[PCLZIP_OPT_SET_CHMOD]);
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done");
+ }
+ }
+
+ // ----- Change abort status
+ if ($p_entry['status'] == "aborted") {
+ $p_entry['status'] = "skipped";
+ }
+
+ // ----- Look for post-extract callback
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFileInOutput()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privExtractFileInOutput(&$p_entry, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileInOutput', "");
+ $v_result=1;
+
+ // ----- Read the file header
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'");
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ // ----- Look for pre-extract callback
+ if (isset($p_options[PCLZIP_CB_PRE_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A pre-callback '".$p_options[PCLZIP_CB_PRE_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_PRE_EXTRACT].'(PCLZIP_CB_PRE_EXTRACT, $v_local_header);');
+ if ($v_result == 0) {
+ // ----- Change the file status
+ $p_entry['status'] = "skipped";
+ $v_result = 1;
+ }
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ // ----- This status is internal and will be changed in 'skipped'
+ $p_entry['status'] = "aborted";
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+
+ // ----- Update the informations
+ // Only some fields can be modified
+ $p_entry['filename'] = $v_local_header['filename'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "New filename is '".$p_entry['filename']."'");
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file (with path) '".$p_entry['filename']."', size '$v_header[size]'");
+
+ // ----- Look if extraction should be done
+ if ($p_entry['status'] == 'ok') {
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010)) {
+ // ----- Look for not compressed file
+ if ($p_entry['compressed_size'] == $p_entry['size']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Reading '".$p_entry['size']."' bytes");
+
+ // ----- Read the file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Send the file to the output
+ echo $v_buffer;
+ unset($v_buffer);
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Reading '".$p_entry['size']."' bytes");
+
+ // ----- Read the compressed file in a buffer (one shot)
+ $v_buffer = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Decompress the file
+ $v_file_content = gzinflate($v_buffer);
+ unset($v_buffer);
+
+ // ----- Send the file to the output
+ echo $v_file_content;
+ unset($v_file_content);
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done");
+ }
+ }
+
+ // ----- Change abort status
+ if ($p_entry['status'] == "aborted") {
+ $p_entry['status'] = "skipped";
+ }
+
+ // ----- Look for post-extract callback
+ elseif (isset($p_options[PCLZIP_CB_POST_EXTRACT])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "A post-callback '".$p_options[PCLZIP_CB_POST_EXTRACT]."()') is defined for the extraction");
+
+ // ----- Generate a local information
+ $v_local_header = array();
+ $this->privConvertHeader2FileInfo($p_entry, $v_local_header);
+
+ // ----- Call the callback
+ // Here I do not use call_user_func() because I need to send a reference to the
+ // header.
+ eval('$v_result = '.$p_options[PCLZIP_CB_POST_EXTRACT].'(PCLZIP_CB_POST_EXTRACT, $v_local_header);');
+
+ // ----- Look for abort result
+ if ($v_result == 2) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "User callback abort the extraction");
+ $v_result = PCLZIP_ERR_USER_ABORTED;
+ }
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privExtractFileAsString()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privExtractFileAsString(&$p_entry, &$p_string)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privExtractFileAsString', "p_entry['filename']='".$p_entry['filename']."'");
+ $v_result=1;
+
+ // ----- Read the file header
+ $v_header = array();
+ if (($v_result = $this->privReadFileHeader($v_header)) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found file '".$v_header['filename']."', size '".$v_header['size']."'");
+
+ // ----- Check that the file header is coherent with $p_entry info
+ if ($this->privCheckFileHeaders($v_header, $p_entry) != 1) {
+ // TBC
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting file in string (with path) '".$p_entry['filename']."', size '$v_header[size]'");
+
+ // ----- Do the extraction (if not a folder)
+ if (!(($p_entry['external']&0x00000010)==0x00000010))
+ {
+ // ----- Look for not compressed file
+// if ($p_entry['compressed_size'] == $p_entry['size'])
+ if ($p_entry['compression'] == 0) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting an un-compressed file");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Reading '".$p_entry['size']."' bytes");
+
+ // ----- Reading the file
+ $p_string = @fread($this->zip_fd, $p_entry['compressed_size']);
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extracting a compressed file (compression method '".$p_entry['compression']."')");
+
+ // ----- Reading the file
+ $v_data = @fread($this->zip_fd, $p_entry['compressed_size']);
+
+ // ----- Decompress the file
+ if (($p_string = @gzinflate($v_data)) === FALSE) {
+ // TBC
+ }
+ }
+
+ // ----- Trace
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Extraction done");
+ }
+ else {
+ // TBC : error : can not extract a folder in a string
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadFileHeader", "");
+ $v_result=1;
+
+ // ----- Read the 4 bytes signature
+ $v_binary_data = @fread($this->zip_fd, 4);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary data is : '".sprintf("%08x", $v_binary_data)."'");
+ $v_data = unpack('Vid', $v_binary_data);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'");
+
+ // ----- Check signature
+ if ($v_data['id'] != 0x04034b50)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid File header");
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the first 42 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 26);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 26)
+ {
+ $p_header['filename'] = "";
+ $p_header['status'] = "invalid_header";
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Header : '".$v_binary_data."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Header (Hex) : '".bin2hex($v_binary_data)."'");
+ $v_data = unpack('vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $v_binary_data);
+
+ // ----- Get filename
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "File name length : ".$v_data['filename_len']);
+ $p_header['filename'] = fread($this->zip_fd, $v_data['filename_len']);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename : \''.$p_header['filename'].'\'');
+
+ // ----- Get extra_fields
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extra field length : ".$v_data['extra_len']);
+ if ($v_data['extra_len'] != 0) {
+ $p_header['extra'] = fread($this->zip_fd, $v_data['extra_len']);
+ }
+ else {
+ $p_header['extra'] = '';
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Extra field : \''.bin2hex($p_header['extra']).'\'');
+
+ // ----- Extract properties
+ $p_header['version_extracted'] = $v_data['version'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : ('.$p_header['version_extracted'].') \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\'');
+ $p_header['compression'] = $v_data['compression'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compression method : \''.$p_header['compression'].'\'');
+ $p_header['size'] = $v_data['size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_header['size'].'\'');
+ $p_header['compressed_size'] = $v_data['compressed_size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_header['compressed_size'].'\'');
+ $p_header['crc'] = $v_data['crc'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf("0x%X", $p_header['crc']).'\'');
+ $p_header['flag'] = $v_data['flag'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Flag : \''.$p_header['flag'].'\'');
+ $p_header['filename_len'] = $v_data['filename_len'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Filename_len : \''.$p_header['filename_len'].'\'');
+
+ // ----- Recuperate date in UNIX format
+ $p_header['mdate'] = $v_data['mdate'];
+ $p_header['mtime'] = $v_data['mtime'];
+ if ($p_header['mdate'] && $p_header['mtime'])
+ {
+ // ----- Extract time
+ $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
+ $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
+ $v_seconde = ($p_header['mtime'] & 0x001F)*2;
+
+ // ----- Extract date
+ $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
+ $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
+ $v_day = $p_header['mdate'] & 0x001F;
+
+ // ----- Get UNIX date format
+ $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+ else
+ {
+ $p_header['mtime'] = time();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Date is actual : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+
+ // TBC
+ //for(reset($v_data); $key = key($v_data); next($v_data)) {
+ // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Attribut[$key] = ".$v_data[$key]);
+ //}
+
+ // ----- Set the stored filename
+ $p_header['stored_filename'] = $p_header['filename'];
+
+ // ----- Set the status field
+ $p_header['status'] = "ok";
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadCentralFileHeader()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadCentralFileHeader(&$p_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadCentralFileHeader", "");
+ $v_result=1;
+
+ // ----- Read the 4 bytes signature
+ $v_binary_data = @fread($this->zip_fd, 4);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary data is : '".sprintf("%08x", $v_binary_data)."'");
+ $v_data = unpack('Vid', $v_binary_data);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'");
+
+ // ----- Check signature
+ if ($v_data['id'] != 0x02014b50)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid Central Dir File signature");
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Invalid archive structure');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read the first 42 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 42);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 42)
+ {
+ $p_header['filename'] = "";
+ $p_header['status'] = "invalid_header";
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid block size : ".strlen($v_binary_data));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header : '".$v_binary_data."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Header (Hex) : '".bin2hex($v_binary_data)."'");
+ $p_header = unpack('vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $v_binary_data);
+
+ // ----- Get filename
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "File name length : ".$p_header['filename_len']);
+ if ($p_header['filename_len'] != 0)
+ $p_header['filename'] = fread($this->zip_fd, $p_header['filename_len']);
+ else
+ $p_header['filename'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Filename : \''.$p_header['filename'].'\'');
+
+ // ----- Get extra
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Extra length : ".$p_header['extra_len']);
+ if ($p_header['extra_len'] != 0)
+ $p_header['extra'] = fread($this->zip_fd, $p_header['extra_len']);
+ else
+ $p_header['extra'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Extra : \''.$p_header['extra'].'\'');
+
+ // ----- Get comment
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Comment length : ".$p_header['comment_len']);
+ if ($p_header['comment_len'] != 0)
+ $p_header['comment'] = fread($this->zip_fd, $p_header['comment_len']);
+ else
+ $p_header['comment'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Comment : \''.$p_header['comment'].'\'');
+
+ // ----- Extract properties
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version : \''.($p_header['version']/10).'.'.($p_header['version']%10).'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Version need to extract : \''.($p_header['version_extracted']/10).'.'.($p_header['version_extracted']%10).'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Size : \''.$p_header['size'].'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Compressed Size : \''.$p_header['compressed_size'].'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'CRC : \''.sprintf("0x%X", $p_header['crc']).'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Flag : \''.$p_header['flag'].'\'');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Offset : \''.$p_header['offset'].'\'');
+
+ // ----- Recuperate date in UNIX format
+ if ($p_header['mdate'] && $p_header['mtime'])
+ {
+ // ----- Extract time
+ $v_hour = ($p_header['mtime'] & 0xF800) >> 11;
+ $v_minute = ($p_header['mtime'] & 0x07E0) >> 5;
+ $v_seconde = ($p_header['mtime'] & 0x001F)*2;
+
+ // ----- Extract date
+ $v_year = (($p_header['mdate'] & 0xFE00) >> 9) + 1980;
+ $v_month = ($p_header['mdate'] & 0x01E0) >> 5;
+ $v_day = $p_header['mdate'] & 0x001F;
+
+ // ----- Get UNIX date format
+ $p_header['mtime'] = mktime($v_hour, $v_minute, $v_seconde, $v_month, $v_day, $v_year);
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+ else
+ {
+ $p_header['mtime'] = time();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Date is actual : \''.date("d/m/y H:i:s", $p_header['mtime']).'\'');
+ }
+
+ // ----- Set the stored filename
+ $p_header['stored_filename'] = $p_header['filename'];
+
+ // ----- Set default status to ok
+ $p_header['status'] = 'ok';
+
+ // ----- Look if it is a directory
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Internal (Hex) : '".sprintf("Ox%04X", $p_header['internal'])."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "External (Hex) : '".sprintf("Ox%04X", $p_header['external'])."' (".(($p_header['external']&0x00000010)==0x00000010?'is a folder':'is a file').')');
+ if (substr($p_header['filename'], -1) == '/') {
+ //$p_header['external'] = 0x41FF0010;
+ $p_header['external'] = 0x00000010;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Force folder external : \''.sprintf("Ox%04X", $p_header['external']).'\'');
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Header of filename : \''.$p_header['filename'].'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privCheckFileHeaders()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // 1 on success,
+ // 0 on error;
+ // --------------------------------------------------------------------------------
+ function privCheckFileHeaders(&$p_local_header, &$p_central_header)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCheckFileHeaders", "");
+ $v_result=1;
+
+ // ----- Check the static values
+ // TBC
+ if ($p_local_header['filename'] != $p_central_header['filename']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "filename" : TBC To Be Completed');
+ }
+ if ($p_local_header['version_extracted'] != $p_central_header['version_extracted']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "version_extracted" : TBC To Be Completed');
+ }
+ if ($p_local_header['flag'] != $p_central_header['flag']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "flag" : TBC To Be Completed');
+ }
+ if ($p_local_header['compression'] != $p_central_header['compression']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "compression" : TBC To Be Completed');
+ }
+ if ($p_local_header['mtime'] != $p_central_header['mtime']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "mtime" : TBC To Be Completed');
+ }
+ if ($p_local_header['filename_len'] != $p_central_header['filename_len']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Bad check "filename_len" : TBC To Be Completed');
+ }
+
+ // ----- Look for flag bit 3
+ if (($p_local_header['flag'] & 8) == 8) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Purpose bit flag bit 3 set !');
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'File size, compression size and crc found in central header');
+ $p_local_header['size'] = $p_central_header['size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size : \''.$p_local_header['size'].'\'');
+ $p_local_header['compressed_size'] = $p_central_header['compressed_size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Compressed Size : \''.$p_local_header['compressed_size'].'\'');
+ $p_local_header['crc'] = $p_central_header['crc'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'CRC : \''.sprintf("0x%X", $p_local_header['crc']).'\'');
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privReadEndCentralDir()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privReadEndCentralDir(&$p_central_dir)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privReadEndCentralDir", "");
+ $v_result=1;
+
+ // ----- Go to the end of the zip file
+ $v_size = filesize($this->zipname);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Size of the file :$v_size");
+ @fseek($this->zip_fd, $v_size);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position at end of zip file : \''.ftell($this->zip_fd).'\'');
+ if (@ftell($this->zip_fd) != $v_size)
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to go to the end of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- First try : look if this is an archive with no commentaries (most of the time)
+ // in this case the end of central dir is at 22 bytes of the file end
+ $v_found = 0;
+ if ($v_size > 26) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Look for central dir with no comment');
+ @fseek($this->zip_fd, $v_size-22);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after min central position : \''.ftell($this->zip_fd).'\'');
+ if (($v_pos = @ftell($this->zip_fd)) != ($v_size-22))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Read for bytes
+ $v_binary_data = @fread($this->zip_fd, 4);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Binary data is : '".sprintf("%08x", $v_binary_data)."'");
+ $v_data = @unpack('Vid', $v_binary_data);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Binary signature is : '".sprintf("0x%08x", $v_data['id'])."'");
+
+ // ----- Check signature
+ if ($v_data['id'] == 0x06054b50) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Found central dir at the default position.");
+ $v_found = 1;
+ }
+
+ $v_pos = ftell($this->zip_fd);
+ }
+
+ // ----- Go back to the maximum possible size of the Central Dir End Record
+ if (!$v_found) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Start extended search of end central dir');
+ $v_maximum_size = 65557; // 0xFFFF + 22;
+ if ($v_maximum_size > $v_size)
+ $v_maximum_size = $v_size;
+ @fseek($this->zip_fd, $v_size-$v_maximum_size);
+ if (@ftell($this->zip_fd) != ($v_size-$v_maximum_size))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, 'Unable to seek back to the middle of the archive \''.$this->zipname.'\'');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Position after max central position : \''.ftell($this->zip_fd).'\'');
+
+ // ----- Read byte per byte in order to find the signature
+ $v_pos = ftell($this->zip_fd);
+ $v_bytes = 0x00000000;
+ while ($v_pos < $v_size)
+ {
+ // ----- Read a byte
+ $v_byte = @fread($this->zip_fd, 1);
+
+ // ----- Add the byte
+ $v_bytes = ($v_bytes << 8) | Ord($v_byte);
+
+ // ----- Compare the bytes
+ if ($v_bytes == 0x504b0506)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, 'Found End Central Dir signature at position : \''.ftell($this->zip_fd).'\'');
+ $v_pos++;
+ break;
+ }
+
+ $v_pos++;
+ }
+
+ // ----- Look if not found end of central dir
+ if ($v_pos == $v_size)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to find End of Central Dir Record signature");
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Unable to find End of Central Dir Record signature");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Read the first 18 bytes of the header
+ $v_binary_data = fread($this->zip_fd, 18);
+
+ // ----- Look for invalid block size
+ if (strlen($v_binary_data) != 18)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Invalid End of Central Dir Record size : ".strlen($v_binary_data));
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT, "Invalid End of Central Dir Record size : ".strlen($v_binary_data));
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Extract the values
+ ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Central Dir Record : '".$v_binary_data."'");
+ ////--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Central Dir Record (Hex) : '".bin2hex($v_binary_data)."'");
+ $v_data = unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size', $v_binary_data);
+
+ // ----- Check the global size
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Comment length : ".$v_data['comment_size']);
+ if (($v_pos + $v_data['comment_size'] + 18) != $v_size) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "The central dir is not at the end of the archive. Some trailing bytes exists after the archive.");
+
+ // ----- Removed in release 2.2 see readme file
+ // The check of the file size is a little too strict.
+ // Some bugs where found when a zip is encrypted/decrypted with 'crypt'.
+ // While decrypted, zip has training 0 bytes
+ if (0) {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_BAD_FORMAT,
+ 'The central dir is not at the end of the archive.'
+ .' Some trailing bytes exists after the archive.');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ }
+
+ // ----- Get comment
+ if ($v_data['comment_size'] != 0)
+ $p_central_dir['comment'] = fread($this->zip_fd, $v_data['comment_size']);
+ else
+ $p_central_dir['comment'] = '';
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Comment : \''.$p_central_dir['comment'].'\'');
+
+ $p_central_dir['entries'] = $v_data['entries'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries : \''.$p_central_dir['entries'].'\'');
+ $p_central_dir['disk_entries'] = $v_data['disk_entries'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Nb of entries for this disk : \''.$p_central_dir['disk_entries'].'\'');
+ $p_central_dir['offset'] = $v_data['offset'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Offset of Central Dir : \''.$p_central_dir['offset'].'\'');
+ $p_central_dir['size'] = $v_data['size'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Size of Central Dir : \''.$p_central_dir['size'].'\'');
+ $p_central_dir['disk'] = $v_data['disk'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Disk number : \''.$p_central_dir['disk'].'\'');
+ $p_central_dir['disk_start'] = $v_data['disk_start'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, 'Start disk number : \''.$p_central_dir['disk_start'].'\'');
+
+ // TBC
+ //for(reset($p_central_dir); $key = key($p_central_dir); next($p_central_dir)) {
+ // //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "central_dir[$key] = ".$p_central_dir[$key]);
+ //}
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDeleteByRule()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDeleteByRule(&$p_result_list, &$p_options)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDeleteByRule", "");
+ $v_result=1;
+ $v_list_detail = array();
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in file : ".ftell($this->zip_fd)."'");
+
+ // ----- Scan all the files
+ // ----- Start at beginning of Central Dir
+ $v_pos_entry = $v_central_dir['offset'];
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_pos_entry))
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Read each entry
+ $v_header_list = array();
+ $j_start = 0;
+ for ($i=0, $v_nb_extracted=0; $i<$v_central_dir['entries']; $i++)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Read next file header entry (index '$i')");
+
+ // ----- Read the file header
+ $v_header_list[$v_nb_extracted] = array();
+ if (($v_result = $this->privReadCentralFileHeader($v_header_list[$v_nb_extracted])) != 1)
+ {
+ // ----- Close the zip file
+ $this->privCloseFd();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename (index '$i') : '".$v_header_list[$v_nb_extracted]['stored_filename']."'");
+
+ // ----- Store the index
+ $v_header_list[$v_nb_extracted]['index'] = $i;
+
+ // ----- Look for the specific extract rules
+ $v_found = false;
+
+ // ----- Look for extract by name rule
+ if ( (isset($p_options[PCLZIP_OPT_BY_NAME]))
+ && ($p_options[PCLZIP_OPT_BY_NAME] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByName'");
+
+ // ----- Look if the filename is in the list
+ for ($j=0; ($j<sizeof($p_options[PCLZIP_OPT_BY_NAME])) && (!$v_found); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Compare with file '".$p_options[PCLZIP_OPT_BY_NAME][$j]."'");
+
+ // ----- Look for a directory
+ if (substr($p_options[PCLZIP_OPT_BY_NAME][$j], -1) == "/") {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The searched item is a directory");
+
+ // ----- Look if the directory is in the filename path
+ if ( (strlen($v_header_list[$v_nb_extracted]['stored_filename']) > strlen($p_options[PCLZIP_OPT_BY_NAME][$j]))
+ && (substr($v_header_list[$v_nb_extracted]['stored_filename'], 0, strlen($p_options[PCLZIP_OPT_BY_NAME][$j])) == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The directory is in the file path");
+ $v_found = true;
+ }
+ elseif ( (($v_header_list[$v_nb_extracted]['external']&0x00000010)==0x00000010) /* Indicates a folder */
+ && ($v_header_list[$v_nb_extracted]['stored_filename'].'/' == $p_options[PCLZIP_OPT_BY_NAME][$j])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The entry is the searched directory");
+ $v_found = true;
+ }
+ }
+ // ----- Look for a filename
+ elseif ($v_header_list[$v_nb_extracted]['stored_filename'] == $p_options[PCLZIP_OPT_BY_NAME][$j]) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "The file is the right one.");
+ $v_found = true;
+ }
+ }
+ }
+
+ // ----- Look for extract by ereg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_EREG]))
+ && ($p_options[PCLZIP_OPT_BY_EREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract by ereg '".$p_options[PCLZIP_OPT_BY_EREG]."'");
+
+ if (ereg($p_options[PCLZIP_OPT_BY_EREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_found = true;
+ }
+ }
+
+ // ----- Look for extract by preg rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_PREG]))
+ && ($p_options[PCLZIP_OPT_BY_PREG] != "")) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByEreg'");
+
+ if (preg_match($p_options[PCLZIP_OPT_BY_PREG], $v_header_list[$v_nb_extracted]['stored_filename'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filename match the regular expression");
+ $v_found = true;
+ }
+ }
+
+ // ----- Look for extract by index rule
+ else if ( (isset($p_options[PCLZIP_OPT_BY_INDEX]))
+ && ($p_options[PCLZIP_OPT_BY_INDEX] != 0)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Extract with rule 'ByIndex'");
+
+ // ----- Look if the index is in the list
+ for ($j=$j_start; ($j<sizeof($p_options[PCLZIP_OPT_BY_INDEX])) && (!$v_found); $j++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Look if index '$i' is in [".$p_options[PCLZIP_OPT_BY_INDEX][$j]['start'].",".$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']."]");
+
+ if (($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['start']) && ($i<=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end'])) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Found as part of an index range");
+ $v_found = true;
+ }
+ if ($i>=$p_options[PCLZIP_OPT_BY_INDEX][$j]['end']) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Do not look this index range for next loop");
+ $j_start = $j+1;
+ }
+
+ if ($p_options[PCLZIP_OPT_BY_INDEX][$j]['start']>$i) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Index range is greater than index, stop loop");
+ break;
+ }
+ }
+ }
+ else {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "No argument mean remove all file");
+ $v_found = true;
+ }
+
+ // ----- Look for deletion
+ if ($v_found)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_header_list[$v_nb_extracted]['stored_filename']."', index '$i' need to be deleted");
+ unset($v_header_list[$v_nb_extracted]);
+ }
+ else
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_header_list[$v_nb_extracted]['stored_filename']."', index '$i' will not be deleted");
+ $v_nb_extracted++;
+ }
+ }
+
+ // ----- Look if something need to be deleted
+ if ($v_nb_extracted > 0) {
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Creates a temporary zip archive
+ $v_temp_zip = new PclZip($v_zip_temp_name);
+
+ // ----- Open the temporary zip file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary write mode");
+ if (($v_result = $v_temp_zip->privOpenFd('wb')) != 1) {
+ $this->privCloseFd();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look which file need to be kept
+ for ($i=0; $i<sizeof($v_header_list); $i++) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Keep entry index '$i' : '".$v_header_list[$i]['filename']."'");
+
+ // ----- Calculate the position of the header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset='". $v_header_list[$i]['offset']."'");
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position before rewind : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after rewind : ".ftell($this->zip_fd)."'");
+ if (@fseek($this->zip_fd, $v_header_list[$i]['offset'])) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_INVALID_ARCHIVE_ZIP, 'Invalid archive size');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position after fseek : ".ftell($this->zip_fd)."'");
+
+ // ----- Read the file header
+ $v_local_header = array();
+ if (($v_result = $this->privReadFileHeader($v_local_header)) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Check that local file header is same as central file header
+ if ($this->privCheckFileHeaders($v_local_header,
+ $v_header_list[$i]) != 1) {
+ // TBC
+ }
+ unset($v_local_header);
+
+ // ----- Write the file header
+ if (($v_result = $v_temp_zip->privWriteFileHeader($v_header_list[$i])) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset for this file is '".$v_header_list[$i]['offset']."'");
+
+ // ----- Read/write the data block
+ if (($v_result = PclZipUtilCopyBlock($this->zip_fd, $v_temp_zip->zip_fd, $v_header_list[$i]['compressed_size'])) != 1) {
+ // ----- Close the zip file
+ $this->privCloseFd();
+ $v_temp_zip->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($v_temp_zip->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "New offset of central dir : $v_offset");
+
+ // ----- Re-Create the Central Dir files header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Creates the new central directory");
+ for ($i=0; $i<sizeof($v_header_list); $i++) {
+ // ----- Create the file header
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Offset of file : ".$v_header_list[$i]['offset']);
+ if (($v_result = $v_temp_zip->privWriteCentralFileHeader($v_header_list[$i])) != 1) {
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Transform the header to a 'usable' info
+ $v_temp_zip->privConvertHeader2FileInfo($v_header_list[$i], $p_result_list[$i]);
+ }
+
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Creates the central directory footer");
+
+ // ----- Zip file comment
+ $v_comment = '';
+ if (isset($p_options[PCLZIP_OPT_COMMENT])) {
+ $v_comment = $p_options[PCLZIP_OPT_COMMENT];
+ }
+
+ // ----- Calculate the size of the central header
+ $v_size = @ftell($v_temp_zip->zip_fd)-$v_offset;
+
+ // ----- Create the central dir footer
+ if (($v_result = $v_temp_zip->privWriteCentralHeader(sizeof($v_header_list), $v_size, $v_offset, $v_comment)) != 1) {
+ // ----- Reset the file list
+ unset($v_header_list);
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+ @unlink($v_zip_temp_name);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Close
+ $v_temp_zip->privCloseFd();
+ $this->privCloseFd();
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Destroy the temporary archive
+ unset($v_temp_zip);
+ }
+
+ // ----- Remove every files : reset the file
+ else if ($v_central_dir['entries'] != 0) {
+ $this->privCloseFd();
+
+ if (($v_result = $this->privOpenFd('wb')) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ if (($v_result = $this->privWriteCentralHeader(0, 0, 0, '')) != 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ $this->privCloseFd();
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDirCheck()
+ // Description :
+ // Check if a directory exists, if not it creates it and all the parents directory
+ // which may be useful.
+ // Parameters :
+ // $p_dir : Directory path to check.
+ // Return Values :
+ // 1 : OK
+ // -1 : Unable to create directory
+ // --------------------------------------------------------------------------------
+ function privDirCheck($p_dir, $p_is_dir=false)
+ {
+ $v_result = 1;
+
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDirCheck", "entry='$p_dir', is_dir='".($p_is_dir?"true":"false")."'");
+
+ // ----- Remove the final '/'
+ if (($p_is_dir) && (substr($p_dir, -1)=='/'))
+ {
+ $p_dir = substr($p_dir, 0, strlen($p_dir)-1);
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Looking for entry '$p_dir'");
+
+ // ----- Check the directory availability
+ if ((is_dir($p_dir)) || ($p_dir == ""))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, "'$p_dir' is a directory");
+ return 1;
+ }
+
+ // ----- Extract parent directory
+ $p_parent_dir = dirname($p_dir);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Parent directory is '$p_parent_dir'");
+
+ // ----- Just a check
+ if ($p_parent_dir != $p_dir)
+ {
+ // ----- Look for parent directory
+ if ($p_parent_dir != "")
+ {
+ if (($v_result = $this->privDirCheck($p_parent_dir)) != 1)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ }
+ }
+
+ // ----- Create the directory
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Create directory '$p_dir'");
+ if (!@mkdir($p_dir, 0777))
+ {
+ // ----- Error log
+ PclZip::privErrorLog(PCLZIP_ERR_DIR_CREATE_FAIL, "Unable to create directory '$p_dir'");
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result, "Directory '$p_dir' created");
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privMerge()
+ // Description :
+ // If $p_archive_to_add does not exist, the function exit with a success result.
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privMerge(&$p_archive_to_add)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privMerge", "archive='".$p_archive_to_add->zipname."'");
+ $v_result=1;
+
+ // ----- Look if the archive_to_add exists
+ if (!is_file($p_archive_to_add->zipname))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive to add does not exist. End of merge.");
+
+ // ----- Nothing to merge, so merge is a success
+ $v_result = 1;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look if the archive exists
+ if (!is_file($this->zipname))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive does not exist, duplicate the archive_to_add.");
+
+ // ----- Do a duplicate
+ $v_result = $this->privDuplicate($p_archive_to_add->zipname);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('rb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir = array();
+ if (($v_result = $this->privReadEndCentralDir($v_central_dir)) != 1)
+ {
+ $this->privCloseFd();
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in zip : ".ftell($this->zip_fd)."'");
+ @rewind($this->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in zip : ".ftell($this->zip_fd)."'");
+
+ // ----- Open the archive_to_add file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open archive_to_add in binary read mode");
+ if (($v_result=$p_archive_to_add->privOpenFd('rb')) != 1)
+ {
+ $this->privCloseFd();
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Read the central directory informations
+ $v_central_dir_to_add = array();
+ if (($v_result = $p_archive_to_add->privReadEndCentralDir($v_central_dir_to_add)) != 1)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Go to beginning of File
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in archive_to_add : ".ftell($p_archive_to_add->zip_fd)."'");
+ @rewind($p_archive_to_add->zip_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Position in archive_to_add : ".ftell($p_archive_to_add->zip_fd)."'");
+
+ // ----- Creates a temporay file
+ $v_zip_temp_name = PCLZIP_TEMPORARY_DIR.uniqid('pclzip-').'.tmp';
+
+ // ----- Open the temporary file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_zip_temp_fd = @fopen($v_zip_temp_name, 'wb')) == 0)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open temporary file \''.$v_zip_temp_name.'\' in binary write mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = $v_central_dir['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Copy the files from the archive_to_add into the temporary file
+ $v_size = $v_central_dir_to_add['offset'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = fread($p_archive_to_add->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Store the offset of the central dir
+ $v_offset = @ftell($v_zip_temp_fd);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "New offset of central dir : $v_offset");
+
+ // ----- Copy the block of file headers from the old archive
+ $v_size = $v_central_dir['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($this->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Copy the block of file headers from the archive_to_add
+ $v_size = $v_central_dir_to_add['size'];
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($p_archive_to_add->zip_fd, $v_read_size);
+ @fwrite($v_zip_temp_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Merge the file comments
+ $v_comment = $v_central_dir['comment'].' '.$v_central_dir_to_add['comment'];
+
+ // ----- Calculate the size of the (new) central header
+ $v_size = @ftell($v_zip_temp_fd)-$v_offset;
+
+ // ----- Swap the file descriptor
+ // Here is a trick : I swap the temporary fd with the zip fd, in order to use
+ // the following methods on the temporary fil and not the real archive fd
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Create the central dir footer
+ if (($v_result = $this->privWriteCentralHeader($v_central_dir['entries']+$v_central_dir_to_add['entries'], $v_size, $v_offset, $v_comment)) != 1)
+ {
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+ @fclose($v_zip_temp_fd);
+ $this->zip_fd = null;
+
+ // ----- Reset the file list
+ unset($v_header_list);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Swap back the file descriptor
+ $v_swap = $this->zip_fd;
+ $this->zip_fd = $v_zip_temp_fd;
+ $v_zip_temp_fd = $v_swap;
+
+ // ----- Close
+ $this->privCloseFd();
+ $p_archive_to_add->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Delete the zip file
+ // TBC : I should test the result ...
+ @unlink($this->zipname);
+
+ // ----- Rename the temporary file
+ // TBC : I should test the result ...
+ //@rename($v_zip_temp_name, $this->zipname);
+ PclZipUtilRename($v_zip_temp_name, $this->zipname);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDuplicate()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDuplicate($p_archive_filename)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privDuplicate", "archive_filename='$p_archive_filename'");
+ $v_result=1;
+
+ // ----- Look if the $p_archive_filename exists
+ if (!is_file($p_archive_filename))
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Archive to duplicate does not exist. End of duplicate.");
+
+ // ----- Nothing to duplicate, so duplicate is a success.
+ $v_result = 1;
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Open the zip file
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_result=$this->privOpenFd('wb')) != 1)
+ {
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Open the temporary file in write mode
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Open file in binary read mode");
+ if (($v_zip_temp_fd = @fopen($p_archive_filename, 'rb')) == 0)
+ {
+ $this->privCloseFd();
+
+ PclZip::privErrorLog(PCLZIP_ERR_READ_OPEN_FAIL, 'Unable to open archive file \''.$p_archive_filename.'\' in binary write mode');
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
+ return PclZip::errorCode();
+ }
+
+ // ----- Copy the files from the archive to the temporary file
+ // TBC : Here I should better append the file and go back to erase the central dir
+ $v_size = filesize($p_archive_filename);
+ while ($v_size != 0)
+ {
+ $v_read_size = ($v_size < PCLZIP_READ_BLOCK_SIZE ? $v_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Read $v_read_size bytes");
+ $v_buffer = fread($v_zip_temp_fd, $v_read_size);
+ @fwrite($this->zip_fd, $v_buffer, $v_read_size);
+ $v_size -= $v_read_size;
+ }
+
+ // ----- Close
+ $this->privCloseFd();
+
+ // ----- Close the temporary file
+ @fclose($v_zip_temp_fd);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privErrorLog()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privErrorLog($p_error_code=0, $p_error_string='')
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ PclError($p_error_code, $p_error_string);
+ }
+ else {
+ $this->error_code = $p_error_code;
+ $this->error_string = $p_error_string;
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privErrorReset()
+ // Description :
+ // Parameters :
+ // --------------------------------------------------------------------------------
+ function privErrorReset()
+ {
+ if (PCLZIP_ERROR_EXTERNAL == 1) {
+ PclErrorReset();
+ }
+ else {
+ $this->error_code = 0;
+ $this->error_string = '';
+ }
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDecrypt()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDecrypt($p_encryption_header, &$p_buffer, $p_size, $p_crc)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDecrypt', "size=".$p_size."");
+ $v_result=1;
+
+ // ----- To Be Modified ;-)
+ $v_pwd = "test";
+
+ $p_buffer = PclZipUtilZipDecrypt($p_buffer, $p_size, $p_encryption_header,
+ $p_crc, $v_pwd);
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privDisableMagicQuotes()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privDisableMagicQuotes()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privDisableMagicQuotes', "");
+ $v_result=1;
+
+ // ----- Look if function exists
+ if ( (!function_exists("get_magic_quotes_runtime"))
+ || (!function_exists("set_magic_quotes_runtime"))) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Functions *et_magic_quotes_runtime are not supported");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look if already done
+ if ($this->magic_quotes_status != -1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "magic_quote already disabled");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Get and memorize the magic_quote value
+ $this->magic_quotes_status = @get_magic_quotes_runtime();
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Current magic_quotes_runtime status is '".($this->magic_quotes_status==0?'disable':'enable')."'");
+
+ // ----- Disable magic_quotes
+ if ($this->magic_quotes_status == 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Disable magic_quotes");
+ @set_magic_quotes_runtime(0);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : privSwapBackMagicQuotes()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function privSwapBackMagicQuotes()
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, 'PclZip::privSwapBackMagicQuotes', "");
+ $v_result=1;
+
+ // ----- Look if function exists
+ if ( (!function_exists("get_magic_quotes_runtime"))
+ || (!function_exists("set_magic_quotes_runtime"))) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Functions *et_magic_quotes_runtime are not supported");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Look if something to do
+ if ($this->magic_quotes_status != -1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "magic_quote not modified");
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+
+ // ----- Swap back magic_quotes
+ if ($this->magic_quotes_status == 1) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Enable back magic_quotes");
+ @set_magic_quotes_runtime($this->magic_quotes_status);
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ }
+ // End of class
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilPathReduction()
+ // Description :
+ // Parameters :
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function PclZipUtilPathReduction($p_dir)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilPathReduction", "dir='$p_dir'");
+ $v_result = "";
+
+ // ----- Look for not empty path
+ if ($p_dir != "") {
+ // ----- Explode path by directory names
+ $v_list = explode("/", $p_dir);
+
+ // ----- Study directories from last to first
+ $v_skip = 0;
+ for ($i=sizeof($v_list)-1; $i>=0; $i--) {
+ // ----- Look for current path
+ if ($v_list[$i] == ".") {
+ // ----- Ignore this directory
+ // Should be the first $i=0, but no check is done
+ }
+ else if ($v_list[$i] == "..") {
+ $v_skip++;
+ }
+ else if ($v_list[$i] == "") {
+ // ----- First '/' i.e. root slash
+ if ($i == 0) {
+ $v_result = "/".$v_result;
+ if ($v_skip > 0) {
+ // ----- It is an invalid path, so the path is not modified
+ // TBC
+ $v_result = $p_dir;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Invalid path is unchanged");
+ $v_skip = 0;
+ }
+ }
+ // ----- Last '/' i.e. indicates a directory
+ else if ($i == (sizeof($v_list)-1)) {
+ $v_result = $v_list[$i];
+ }
+ // ----- Double '/' inside the path
+ else {
+ // ----- Ignore only the double '//' in path,
+ // but not the first and last '/'
+ }
+ }
+ else {
+ // ----- Look for item to skip
+ if ($v_skip > 0) {
+ $v_skip--;
+ }
+ else {
+ $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?"/".$v_result:"");
+ }
+ }
+ }
+
+ // ----- Look for skip
+ if ($v_skip > 0) {
+ while ($v_skip > 0) {
+ $v_result = '../'.$v_result;
+ $v_skip--;
+ }
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilPathInclusion()
+ // Description :
+ // This function indicates if the path $p_path is under the $p_dir tree. Or,
+ // said in an other way, if the file or sub-dir $p_path is inside the dir
+ // $p_dir.
+ // The function indicates also if the path is exactly the same as the dir.
+ // This function supports path with duplicated '/' like '//', but does not
+ // support '.' or '..' statements.
+ // Parameters :
+ // Return Values :
+ // 0 if $p_path is not inside directory $p_dir
+ // 1 if $p_path is inside directory $p_dir
+ // 2 if $p_path is exactly the same as $p_dir
+ // --------------------------------------------------------------------------------
+ function PclZipUtilPathInclusion($p_dir, $p_path)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilPathInclusion", "dir='$p_dir', path='$p_path'");
+ $v_result = 1;
+
+ // ----- Look for path beginning by ./
+ if ( ($p_dir == '.')
+ || ((strlen($p_dir) >=2) && (substr($p_dir, 0, 2) == './'))) {
+ $p_dir = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_dir, 1);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Replacing ./ by full path in p_dir '".$p_dir."'");
+ }
+ if ( ($p_path == '.')
+ || ((strlen($p_path) >=2) && (substr($p_path, 0, 2) == './'))) {
+ $p_path = PclZipUtilTranslateWinPath(getcwd(), FALSE).'/'.substr($p_path, 1);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Replacing ./ by full path in p_path '".$p_path."'");
+ }
+
+ // ----- Explode dir and path by directory separator
+ $v_list_dir = explode("/", $p_dir);
+ $v_list_dir_size = sizeof($v_list_dir);
+ $v_list_path = explode("/", $p_path);
+ $v_list_path_size = sizeof($v_list_path);
+
+ // ----- Study directories paths
+ $i = 0;
+ $j = 0;
+ while (($i < $v_list_dir_size) && ($j < $v_list_path_size) && ($v_result)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Working on dir($i)='".$v_list_dir[$i]."' and path($j)='".$v_list_path[$j]."'");
+
+ // ----- Look for empty dir (path reduction)
+ if ($v_list_dir[$i] == '') {
+ $i++;
+ continue;
+ }
+ if ($v_list_path[$j] == '') {
+ $j++;
+ continue;
+ }
+
+ // ----- Compare the items
+ if (($v_list_dir[$i] != $v_list_path[$j]) && ($v_list_dir[$i] != '') && ( $v_list_path[$j] != '')) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Items ($i,$j) are different");
+ $v_result = 0;
+ }
+
+ // ----- Next items
+ $i++;
+ $j++;
+ }
+
+ // ----- Look if everything seems to be the same
+ if ($v_result) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Look for tie break");
+ // ----- Skip all the empty items
+ while (($j < $v_list_path_size) && ($v_list_path[$j] == '')) $j++;
+ while (($i < $v_list_dir_size) && ($v_list_dir[$i] == '')) $i++;
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Looking on dir($i)='".($i < $v_list_dir_size?$v_list_dir[$i]:'')."' and path($j)='".($j < $v_list_path_size?$v_list_path[$j]:'')."'");
+
+ if (($i >= $v_list_dir_size) && ($j >= $v_list_path_size)) {
+ // ----- There are exactly the same
+ $v_result = 2;
+ }
+ else if ($i < $v_list_dir_size) {
+ // ----- The path is shorter than the dir
+ $v_result = 0;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilCopyBlock()
+ // Description :
+ // Parameters :
+ // $p_mode : read/write compression mode
+ // 0 : src & dest normal
+ // 1 : src gzip, dest normal
+ // 2 : src normal, dest gzip
+ // 3 : src & dest gzip
+ // Return Values :
+ // --------------------------------------------------------------------------------
+ function PclZipUtilCopyBlock($p_src, $p_dest, $p_size, $p_mode=0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilCopyBlock", "size=$p_size, mode=$p_mode");
+ $v_result = 1;
+
+ if ($p_mode==0)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Src offset before read :".(@ftell($p_src)));
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Dest offset before write :".(@ftell($p_dest)));
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($p_src, $v_read_size);
+ @fwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Src offset after read :".(@ftell($p_src)));
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Dest offset after write :".(@ftell($p_dest)));
+ }
+ else if ($p_mode==1)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @gzread($p_src, $v_read_size);
+ @fwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+ else if ($p_mode==2)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @fread($p_src, $v_read_size);
+ @gzwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+ else if ($p_mode==3)
+ {
+ while ($p_size != 0)
+ {
+ $v_read_size = ($p_size < PCLZIP_READ_BLOCK_SIZE ? $p_size : PCLZIP_READ_BLOCK_SIZE);
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Read $v_read_size bytes");
+ $v_buffer = @gzread($p_src, $v_read_size);
+ @gzwrite($p_dest, $v_buffer, $v_read_size);
+ $p_size -= $v_read_size;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilRename()
+ // Description :
+ // This function tries to do a simple rename() function. If it fails, it
+ // tries to copy the $p_src file in a new $p_dest file and then unlink the
+ // first one.
+ // Parameters :
+ // $p_src : Old filename
+ // $p_dest : New filename
+ // Return Values :
+ // 1 on success, 0 on failure.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilRename($p_src, $p_dest)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilRename", "source=$p_src, destination=$p_dest");
+ $v_result = 1;
+
+ // ----- Try to rename the files
+ if (!@rename($p_src, $p_dest)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to rename file, try copy+unlink");
+
+ // ----- Try to copy & unlink the src
+ if (!@copy($p_src, $p_dest)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to copy file");
+ $v_result = 0;
+ }
+ else if (!@unlink($p_src)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 5, "Fail to unlink old filename");
+ $v_result = 0;
+ }
+ }
+
+ // ----- Return
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilOptionText()
+ // Description :
+ // Translate option value in text. Mainly for debug purpose.
+ // Parameters :
+ // $p_option : the option value.
+ // Return Values :
+ // The option text value.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilOptionText($p_option)
+ {
+ //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZipUtilOptionText", "option='".$p_option."'");
+
+ $v_list = get_defined_constants();
+ for (reset($v_list); $v_key = key($v_list); next($v_list)) {
+ $v_prefix = substr($v_key, 0, 10);
+ if (( ($v_prefix == 'PCLZIP_OPT')
+ || ($v_prefix == 'PCLZIP_CB_')
+ || ($v_prefix == 'PCLZIP_ATT'))
+ && ($v_list[$v_key] == $p_option)) {
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_key);
+ return $v_key;
+ }
+ }
+
+ $v_result = 'Unknown';
+
+ //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
+ return $v_result;
+ }
+ // --------------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------------
+ // Function : PclZipUtilTranslateWinPath()
+ // Description :
+ // Translate windows path by replacing '\' by '/' and optionally removing
+ // drive letter.
+ // Parameters :
+ // $p_path : path to translate.
+ // $p_remove_disk_letter : true | false
+ // Return Values :
+ // The path translated.
+ // --------------------------------------------------------------------------------
+ function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true)
+ {
+ if (stristr(php_uname(), 'windows')) {
+ // ----- Look for potential disk letter
+ if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) {
+ $p_path = substr($p_path, $v_position+1);
+ }
+ // ----- Change potential windows directory separator
+ if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
+ $p_path = strtr($p_path, '\\', '/');
+ }
+ }
+ return $p_path;
+ }
+ // --------------------------------------------------------------------------------
+
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php
new file mode 100644
index 000000000..04dc75675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php
@@ -0,0 +1,51 @@
+<?php
+class repo_indexmenu_plugin {
+ /**
+ * Send a zipped theme
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+
+ function send_theme ($file) {
+ require_once(DOKU_PLUGIN.'indexmenu/syntax/indexmenu.php');
+ $idxm=new syntax_plugin_indexmenu_indexmenu();
+ //clean the file name
+ $file=cleanID($file);
+ //check config
+ if(!$idxm->getConf('be_repo') || empty($file)) return false;
+ $repodir=INDEXMENU_IMG_ABSDIR."/repository";
+ $zipfile=$repodir."/$file.zip";
+ $localtheme=INDEXMENU_IMG_ABSDIR."/$file/";
+ //theme does not exists
+ if (!file_exists($localtheme)) return false;
+ if (!io_mkdir_p($repodir)) return false;
+ $lm=@filemtime($zipfile);
+ //no cached zip or older than 1 day
+ if ($lm < time()-(60*60*24)) {
+ //create the zip
+ require_once(DOKU_PLUGIN."indexmenu/inc/pclzip.lib.php");
+ @unlink($zipfile);
+ $zip=new PclZip($zipfile);
+ $status=$zip->add($localtheme,PCLZIP_OPT_REMOVE_ALL_PATH);
+ //error
+ if ($status == 0) return false;
+ }
+ $len = (int) filesize($zipfile);
+ //don't send large zips
+ if ($len > 2*1024*1024) return false;
+ //headers
+ header('Cache-Control: must-revalidate, no-transform, post-check=0, pre-check=0');
+ header('Pragma: public');
+ header('Content-Type: application/zip');
+ header('Content-Disposition: attachment; filename="'.basename($zipfile).'";');
+ header("Content-Transfer-Encoding: binary");
+ //send zip
+ $fp=@fopen($zipfile, 'rb');
+ if ($fp) {
+ $ct=@fread($fp, $len);
+ print $ct;
+ }
+ @fclose($fp);
+ return true;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js
new file mode 100644
index 000000000..7c60ceffe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js
@@ -0,0 +1,640 @@
+/*----------------------------------------------------|
+ | dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+ |---------------------------------------------------|
+ | Copyright (c) 2002-2003 Geir Landro |
+ | |
+ | This script can be used freely as long as all |
+ | copyright messages are intact. |
+ | |
+ | Updated: 17.04.2003 |
+ |---------------------------------------------------|
+ | Modified for Dokuwiki by |
+ | Samuele Tognini <samuele@netsons.org> |
+ | under GPL 2 license |
+ | (http://www.gnu.org/licenses/gpl.html) |
+ | Updated: 29.08.2009 |
+ |---------------------------------------------------|
+ | indexmenu | wiki.splitbrain.org/plugin:indexmenu |
+ |--------------------------------------------------*/
+
+// Node object
+function Node(dokuid, id, pid, name, hns, isdir, ajax) {
+ this.dokuid = dokuid;
+ this.id = id;
+ this.pid = pid;
+ this.name = name;
+ this.hns = hns;
+ this.isdir = isdir;
+ this.ajax = ajax;
+ this._io = 0;
+ this._is = false;
+ this._ls = false;
+ this._hc = ajax;
+ this._ai = 0;
+ this._p = false;
+ this._lv = 0;
+ this._ok = false;
+ this._cp=false;
+}
+// Tree object
+function dTree(objName,theme) {
+ var objExt = indexmenu_findExt(theme);
+ this.config = {
+ urlbase:DOKU_BASE+'doku.php?id=',
+ plugbase:DOKU_BASE+'lib/plugins/indexmenu',
+ useCookies: true,
+ scroll:true,
+ toc:true,
+ maxjs:1,
+ jsajax:'',
+ sepchar:':',
+ theme:theme
+ };
+ var objImg=this.config.plugbase+'/images/'+theme+'/';
+ this.icon = {
+ root: objImg + 'base.'+objExt,
+ folder: objImg + 'folder.'+objExt,
+ folderH: objImg + 'folderh.'+objExt,
+ folderOpen: objImg + 'folderopen.'+objExt,
+ folderHOpen: objImg + 'folderhopen.'+objExt,
+ node: objImg + 'page.'+objExt,
+ empty: objImg + 'empty.'+objExt,
+ line: objImg + 'line.'+objExt,
+ join: objImg + 'join.'+objExt,
+ joinBottom: objImg + 'joinbottom.'+objExt,
+ plus: objImg + 'plus.'+objExt,
+ plusBottom: objImg + 'plusbottom.'+objExt,
+ minus: objImg + 'minus.'+objExt,
+ minusBottom: objImg + 'minusbottom.'+objExt,
+ nlPlus: objImg + 'nolines_plus.'+objExt,
+ nlMinus: objImg + 'nolines_minus.'+objExt
+ };
+ this.obj = objName;
+ this.aNodes = [];
+ this.aIndent = [];
+ this.root = new Node(false,-1);
+ this.selectedNode = null;
+ this.selectedFound = false;
+ this.completed = false;
+ this.scrllTmr=0;
+ this.pageid=window.indexmenu_ID||'';
+ this.fajax=false;
+}
+
+// Adds a new node to the node array
+dTree.prototype.add = function(dokuid, id, pid, name, hns, isdir, ajax) {
+ this.aNodes[this.aNodes.length] = new Node(dokuid, id, pid, name, hns, isdir, ajax);
+};
+
+// Open/close all nodes
+dTree.prototype.openAll = function() {
+ if (!this.getCookie('co' + this.obj)) {
+ this.oAll(true);
+ }
+};
+
+// Outputs the tree to the page
+dTree.prototype.toString = function() {
+ var str='';
+ if (this.config.scroll) {str += '<div id="cdtree_'+this.obj+'" class="dtree" style="position:relative;overflow:hidden;width:100%;">';}
+ str += '<div id="dtree_'+this.obj+'" class="dtree '+this.config.theme+'" style="overflow:';
+ if (this.config.scroll) { str += 'visible;position:relative;width:100%"';} else {str += 'hidden;"';}
+ str += '>';
+ if (DOKUid('dtree_'+this.obj)) {str += '<div class="error">Indexmenu id conflict</div>';}
+ if (this.config.toc) {
+ str += '<div id="t' + this.obj + '" class="indexmenu_tocbullet '+this.config.theme+'" style="display:none;" title="Table of contents"></div>';
+ str += '<div id="toc_' + this.obj + '" style="display:none;"></div>';
+ }
+ if (this.config.useCookies) { this.selectedNode = this.getSelected(); }
+ str += this.addNode(this.root)+'</div>';
+ if (this.config.scroll) {
+ str += '<div id="z' + this.obj + '" class="indexmenu_rarrow"></div>';
+ str += '<div id="left_'+this.obj+'" class="indexmenu_larrow" style="display:none;" title="Click to scroll back" onmousedown="javascript:'+this.obj+'.scroll(\'r\',1);" onmouseup="javascript:'+this.obj+'.stopscroll();"></div>';
+ str += '</div>';
+ }
+ this.completed = true;
+ this.divdisplay('nojs_',0);
+ return str;
+};
+
+// Creates the tree structure
+dTree.prototype.addNode = function(pNode) {
+ var str = '',cn,n=pNode._ai,l=pNode._lv+1;
+ for (n; n<this.aNodes.length; n++) {
+ if (this.aNodes[n].pid == pNode.id) {
+ cn = this.aNodes[n];
+ cn._p = pNode;
+ cn._ai = n;
+ cn._lv=l;
+ this.setCS(cn);
+ if (cn._hc && !cn._io && this.config.useCookies) {cn._io = this.isOpen(cn.id);}
+ if (this.pageid == (!cn.hns && cn.dokuid || cn.hns)) {
+ cn._cp=true;
+ } else if (cn.id == this.selectedNode && !this.selectedFound) {
+ cn._is = true;
+ this.selectedNode = n;
+ this.selectedFound = true;
+ }
+ if (!cn._hc && cn.isdir && !cn.ajax && !cn.hns) {
+ if (cn._ls) {str += this.noderr(cn, n);}
+ } else {
+ str += this.node(cn, n);
+ }
+ if (cn._ls) {break;}
+ }
+ }
+ return str;
+};
+
+dTree.prototype.noderr = function(node, nodeId) {
+ var str = '<div class="dTreeNode">' + this.indent(node, nodeId);
+ str += '<div class="emptynode" title="Empty"></div></div>';
+ return str;
+};
+
+// Creates the node icon, url and text
+dTree.prototype.node = function(node, nodeId) {
+ var h=1,jsfnc,str;
+ jsfnc='onmouseover="'+this.obj+'.show_feat(\''+nodeId+'\');" onmousedown="return indexmenu_checkcontextm(\''+nodeId+'\','+this.obj+',event);" oncontextmenu="return indexmenu_stopevt(event)"';
+ if (node._lv > this.config.maxjs) {h=0;} else {node._ok=true;}
+ str = '<div class="dTreeNode">' + this.indent(node, nodeId);
+ node.icon = (this.root.id == node.pid) ? this.icon.root : ((node.hns) ? this.icon.folderH : ((node._hc) ? this.icon.folder : this.icon.node));
+ node.iconOpen = (node._hc) ? ((node.hns) ? this.icon.folderHOpen : this.icon.folderOpen) : this.icon.node;
+ if (this.root.id == node.pid) {
+ node.icon = this.icon.root;
+ node.iconOpen = this.icon.root;
+ }
+ str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" alt="" />';
+ if (!node._hc || node.hns) {
+ str += '<a id="s' + this.obj + nodeId + '" class="' + ((node._cp) ? 'navSel' : ((node._is) ? 'nodeSel' : (node._hc) ? 'nodeFdUrl' : 'nodeUrl')) ;
+ str += '" href="' + this.config.urlbase;
+ (node.hns) ? str +=node.hns : str += node.dokuid;
+ str += '"' + ' title="' + node.name + '"' +jsfnc;
+ str += ' onclick="javascript: ' + this.obj + '.s(' + nodeId + ');"';
+ str += '>'+node.name+'</a>';
+ }
+ else if (node.pid != this.root.id) {
+ str += '<a id="s' + this.obj + nodeId + '" href="javascript: ' + this.obj + '.o(' + nodeId + '); " class="node"' + jsfnc + '>'+node.name+'</a>';
+ } else {
+ str += node.name;
+ }
+ str += '</div>';
+ if (node._hc) {
+ str += '<div id="d' + this.obj + nodeId + '" class="clip" style="display:' + ((this.root.id == node.pid || node._io) ? 'block' : 'none') + ';">';
+ if (h) {str += this.addNode(node);}
+ str += '</div>';
+ }
+ this.aIndent.pop();
+ return str;
+};
+
+// Adds the empty and line icons
+dTree.prototype.indent = function(node, nodeId) {
+ var n,str = '';
+ if (this.root.id != node.pid) {
+ for (n=0; n<this.aIndent.length; n++) {
+ str += '<img src="' + ( (this.aIndent[n] == 1) ? this.icon.line : this.icon.empty ) + '" alt="" />';
+ }
+ if (node._ls) {
+ this.aIndent.push(0);
+ } else {
+ this.aIndent.push(1);
+ }
+ if (node._hc) {
+ str += '<a href="javascript: ' + this.obj + '.o(' + nodeId+');"><img id="j' + this.obj + nodeId + '" src="';
+ str += ( (node._io) ? ((node._ls) ? this.icon.minusBottom : this.icon.minus) : ((node._ls) ? this.icon.plusBottom : this.icon.plus ) );
+ str += '" alt="" /></a>';
+ } else {str += '<img src="' + ((node._ls) ? this.icon.joinBottom : this.icon.join) + '" alt="" />';}
+ }
+ return str;
+};
+
+// Checks if a node has any children and if it is the last sibling
+dTree.prototype.setCS = function(node) {
+ var lastId,n;
+ for (n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n].pid == node.id) {node._hc = true;}
+ if (this.aNodes[n].pid == node.pid) {lastId = this.aNodes[n].id;}
+ }
+ if (lastId==node.id) {node._ls = true;}
+};
+
+// Returns the selected node
+dTree.prototype.getSelected = function() {
+ var sn = this.getCookie('cs' + this.obj);
+ return (sn) ? sn : null;
+};
+
+// Highlights the selected node
+dTree.prototype.s = function(id) {
+ var eOld,eNew,cn = this.aNodes[id];
+ if (this.selectedNode != id) {
+ eNew = DOKUid("s" + this.obj + id);
+ if (!eNew ) {return;}
+ if (this.selectedNode || this.selectedNode===0) {
+ eOld = DOKUid("s" + this.obj + this.selectedNode);
+ eOld.className = "node";
+ }
+ eNew.className = "nodeSel";
+ this.selectedNode = id;
+ if (this.config.useCookies) {this.setCookie('cs' + this.obj, cn.id);}
+ }
+};
+
+// Toggle Open or close
+dTree.prototype.o = function(id) {
+ var cn = this.aNodes[id];
+ this.nodeStatus(!cn._io, id, cn._ls);
+ cn._io = !cn._io;
+ if (this.config.useCookies) {this.updateCookie();}
+ this.divdisplay('z',0);
+ this.resizescroll("block");
+};
+
+// Open or close all nodes
+dTree.prototype.oAll = function(status) {
+ for (var n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n]._hc && this.aNodes[n].pid != this.root.id) {
+ this.nodeStatus(status, n, this.aNodes[n]._ls);
+ this.aNodes[n]._io = status;
+ }
+ }
+ if (this.config.useCookies) {this.updateCookie();}
+};
+
+// Opens the tree to a specific node
+dTree.prototype.openTo = function(nId, bSelect, bFirst) {
+ var n,cn;
+ if (!bFirst) {
+ for (n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n].id == nId) {
+ nId=n;
+ break;
+ }
+ }
+ }
+ this.fill(this.aNodes[nId].pid);
+ cn=this.aNodes[nId];
+ if (cn.pid==this.root.id || !cn._p) {return;}
+ cn._io = 1;
+ if (this.completed && cn._hc) {this.nodeStatus(true, cn._ai, cn._ls);}
+ if (cn._is) {
+ (this.completed) ? this.s(cn._ai) : this._sn=cn._ai;
+ }
+ this.openTo(cn._p._ai, false, true);
+};
+
+dTree.prototype.getOpenTo = function(nodes) {
+ if (nodes === '') {
+ this.openAll();
+ } else if (!this.config.useCookies ||!this.getCookie('co' + this.obj)) {
+ for (var n=0; n<nodes.length; n++) {
+ this.openTo(nodes[n],false,true);
+ }
+ }
+};
+
+// Change the status of a node(open or closed)
+dTree.prototype.nodeStatus = function(status, id, bottom) {
+ if (status && !this.fill(id)) {return;}
+ var eJoin,eIcon;
+ eJoin= DOKUid('j' + this.obj + id);
+ eIcon= DOKUid('i' + this.obj + id);
+ eIcon.src = (status) ? this.aNodes[id].iconOpen : this.aNodes[id].icon;
+ eJoin.src = ((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus));
+ DOKUid('d' + this.obj + id).style.display = (status) ? 'block': 'none';
+};
+
+// [Cookie] Clears a cookie
+dTree.prototype.clearCookie = function() {
+ var now,yday;
+ now = new Date();
+ yday = new Date(now.getTime() - 1000 * 60 * 60 * 24);
+ this.setCookie('co'+this.obj, 'cookieValue', yday);
+ this.setCookie('cs'+this.obj, 'cookieValue', yday);
+};
+
+// [Cookie] Sets value in a cookie
+dTree.prototype.setCookie = function(cookieName, cookieValue, expires, path, domain, secure) {
+ document.cookie =
+ escape(cookieName) + '=' + escape(cookieValue) +
+ (expires ? '; expires=' + expires.toGMTString() : '') +
+ ';path=/' +
+ (domain ? '; domain=' + domain : '') +
+ (secure ? '; secure' : '');
+};
+
+// [Cookie] Gets a value from a cookie
+dTree.prototype.getCookie = function(cookieName) {
+ var cookieValue = '',pN,posValue,endPos;
+ pN = document.cookie.indexOf(escape(cookieName) + '=');
+ if (pN != -1) {
+ posValue = pN + (escape(cookieName) + '=').length;
+ endPos = document.cookie.indexOf(';', posValue);
+ if (endPos != -1) {cookieValue = unescape(document.cookie.substring(posValue, endPos));}
+ else {cookieValue = unescape(document.cookie.substring(posValue));}
+ }
+ return (cookieValue);
+};
+
+// [Cookie] Returns ids of open nodes as a string
+dTree.prototype.updateCookie = function() {
+ var str = '',n;
+ for (n=0; n<this.aNodes.length; n++) {
+ if (this.aNodes[n]._io && this.aNodes[n].pid != this.root.id) {
+ if (str) {str += '.';}
+ str += this.aNodes[n].id;
+ }
+ }
+ this.setCookie('co' + this.obj, str);
+};
+
+// [Cookie] Checks if a node id is in a cookie
+dTree.prototype.isOpen = function(id) {
+ var n,aOpen = this.getCookie('co' + this.obj).split('.');
+ for (n=0; n<aOpen.length; n++){
+ if (aOpen[n] == id) {return true;}
+ }
+ return false;
+};
+
+dTree.prototype.openCurNS = function (max){
+ var r,cn,match,t,i,n,cnsa,cna,cns=this.pageid;
+ r=new RegExp ("\\b"+this.config.sepchar+"\\b","g");
+ match=cns.match(r)||-1;
+ if (max>0 && match.length >= max) {
+ t = cns.split(this.config.sepchar);
+ n = (this.aNodes[0].dokuid == '') ? 0 :this.aNodes[0].dokuid.split(this.config.sepchar).length;
+ t.splice(max + n,t.length);
+ cnsa=t.join(this.config.sepchar);
+ }
+ for (i=0; i<this.aNodes.length; i++){
+ cn=this.aNodes[i];
+ if (cns == cn.dokuid || cns == cn.hns) {
+ this.openTo(cn.id,false,true);
+ this.fajax=false;
+ if (cn.pid >= 0) {
+ addInitEvent(this.scroll("l",4,cn.pid,1));
+ }
+ break;
+ }
+ if (cnsa == cn.dokuid || cnsa == cn.hns) {
+ cna=cn;
+ this.fajax=true;
+ }
+ }
+ if (cna) {this.openTo(cna.id,false,true);}
+};
+
+dTree.prototype.fill = function(id) {
+ if (id == -1 || this.aNodes[id]._ok ) {return true;}
+ var n=id,eLoad,node,a,rd,ln,eDiv;
+ if (this.aNodes[n].ajax) {
+ eLoad=DOKUid('l' + this.obj);
+ node=DOKUid('s'+this.obj+n);
+ if (!eLoad) {eLoad=indexmenu_createPicker('l' + this.obj);}
+ eLoad.innerHTML='Loading ...';
+ DOKUid('s'+this.obj+n).parentNode.appendChild(eLoad);
+ eLoad.style.width='auto';
+ eLoad.style.display='inline';
+ this.getAjax(n);
+ return true;
+ }
+ rd = [];
+ while (!this.aNodes[n]._ok) {
+ rd[rd.length]=n;
+ n=this.aNodes[n].pid;
+ }
+ for (ln=rd.length-1; ln>=0; ln--) {
+ id=rd[ln];
+ a=this.aNodes[id];
+ eDiv=DOKUid('d' + this.obj + id);
+ if (!eDiv) {return false;}
+ this.aIndent = [];
+ n=a;
+ while (n.pid>=0) {
+ if (n._ls) {
+ this.aIndent.unshift(0);
+ } else {
+ this.aIndent.unshift(1);
+ }
+ n=n._p;
+ }
+ eDiv.innerHTML=this.addNode(a);
+ a._ok=true;
+ }
+ return true;
+};
+
+dTree.prototype.openCookies = function() {
+ var n,cn,aOpen = this.getCookie('co' + this.obj).split('.');
+ for (n=0; n<aOpen.length; n++){
+ if (aOpen[n] === "") {break;}
+ cn = this.aNodes[aOpen[n]];
+ if (!cn._ok) {this.nodeStatus(true, aOpen[n], cn._ls);cn._io = 1;}
+ }
+};
+
+dTree.prototype.scroll = function (where,s,n,i){
+ if (!this.config.scroll) {return false;}
+ var w,dtree,dtreel,nodeId;
+ dtree=DOKUid('dtree_'+this.obj);
+ dtreel=parseInt(dtree.offsetLeft,0);
+ if (where=="r") {
+ DOKUid('left_'+this.obj).style.border="thin inset";
+ this.scrollRight(dtreel,s);
+ } else {
+ nodeId=DOKUid('s'+this.obj+n);
+ w = parseInt(dtree.parentNode.offsetWidth - nodeId.offsetWidth - nodeId.offsetLeft,0);
+ if (this.config.toc) {w=w-11;}
+ if (dtreel <= w) {return;}
+ this.resizescroll("none");
+ this.stopscroll();
+ this.scrollLeft(dtreel,s,w-3,i);
+ }
+};
+
+dTree.prototype.scrollLeft = function (lft,s,w,i){
+ if(lft < w - i -10) {
+ this.divdisplay('z',0);
+ this.scrllTmr=0;
+ return;
+ }
+ var self=this;
+ DOKUid('dtree_'+self.obj).style.left = lft + "px";
+ this.scrllTmr=setTimeout(function (){self.scrollLeft(lft - s,s+i,w,i);},20);
+};
+
+//Scroll Back
+dTree.prototype.scrollRight = function (lft,s){
+ if(lft >= s) {
+ this.divdisplay('left_',0);
+ this.stopscroll();
+ return;
+ }
+ var self=this;
+ DOKUid('dtree_'+self.obj).style.left = lft + "px";
+ if (lft>-15) {s=1;}
+ this.scrllTmr=setTimeout(function (){self.scrollRight(lft+s,s+1);},20);
+};
+
+dTree.prototype.stopscroll = function (){
+ DOKUid('left_'+this.obj).style.border="none";
+ clearTimeout(this.scrllTmr);
+ this.scrllTmr=0;
+};
+
+dTree.prototype.show_feat = function (n){
+ var w,div,id,dtree,dtreel,self,node=DOKUid('s'+this.obj+n);
+ self=this;
+ if (this.config.toc && node.className != "node") {
+ div=DOKUid('t'+this.obj);
+ id =(this.aNodes[n].hns) ? this.aNodes[n].hns : this.aNodes[n].dokuid;
+ div.onmousedown=function (){indexmenu_createTocMenu('req=toc&id='+decodeURIComponent(id),'picker_'+self.obj,'t'+self.obj);};
+ node.parentNode.appendChild(div);
+ if (div.style.display=="none") {div.style.display="inline";}
+ }
+ if (this.config.scroll) {
+ div=DOKUid('z'+this.obj);
+ div.onmouseover=function(){div.style.border="none";self.scroll("l",1,n,0);};
+ div.onmousedown=function(){div.style.border="thin inset";self.scroll("l",4,n,1);};
+ div.onmouseout=function(){div.style.border="none";self.stopscroll();};
+ div.onmouseup=div.onmouseover;
+ dtree=DOKUid('dtree_'+this.obj);
+ dtreel=parseInt(dtree.offsetLeft,0);
+ w = parseInt(dtree.parentNode.offsetWidth - node.offsetWidth - node.offsetLeft + 1,0);
+ if (dtreel > w) {
+ div.style.display="none";
+ div.style.top = node.offsetTop+"px";
+ div.style.left = parseInt(node.offsetLeft + node.offsetWidth + w - 12,0)+"px";
+ div.style.display="block";
+ }
+ }
+};
+
+dTree.prototype.resizescroll = function (status){
+ var dtree,w,h,left=DOKUid('left_'+this.obj);
+ if (!left) {return;}
+ if (left.style.display==status) {
+ dtree=DOKUid('dtree_'+this.obj);
+ w=parseInt(dtree.offsetHeight/3,0);
+ h= parseInt(w/50,0)*50;
+ if (h < 50) {h=50;}
+ left.style.height=h+"px";
+ left.style.top = w+"px";
+ if (status=="none") {left.style.display="block";}
+ }
+};
+
+// Toggle Open or close
+dTree.prototype.getAjax = function(n) {
+ var node,req,curns,selft=this;
+ node=selft.aNodes[n];
+ // We use SACK to do the AJAX requests
+ var Ajax = new sack(DOKU_BASE+'lib/plugins/indexmenu/ajax.php');
+ req='req=index&idx='+node.dokuid+decodeURIComponent(this.config.jsajax);
+ curns=this.pageid.substring(0,this.pageid.lastIndexOf(this.config.sepchar));
+ Ajax.encodeURIString=false;
+ Ajax.onCompletion = function(){
+ var i,ajxnodes,ajxnode,plus;
+ plus=selft.aNodes.length -1;
+ eval(this.response);
+ if (!isArray(ajxnodes) || ajxnodes.length < 1) {
+ ajxnodes=[['', 1, 0, '', 0, 1, 0]];
+ }
+ node.ajax=false;
+ for(i=0;i<ajxnodes.length;i++){
+ ajxnode=ajxnodes[i];
+ ajxnode[2]=(ajxnode[2]==0) ? node.id : ajxnode[2] + plus;
+ ajxnode[1] += plus;
+ selft.add(ajxnode[0],ajxnode[1],ajxnode[2],ajxnode[3],ajxnode[4],ajxnode[5],ajxnode[6]);
+ }
+ if (selft.fajax) {
+ selft.fajax=false;
+ selft.openCurNS(0);
+ } else {
+ selft.openTo(node.id,false,true);
+ }
+ DOKUid('l'+selft.obj).style.display='none';
+ };
+ if (this.fajax) {
+ req +='&nss='+curns+'&max=1';
+ }
+ Ajax.encodeURIString = false;
+ Ajax.runAJAX(encodeURI(req));
+};
+
+//Load custom css
+dTree.prototype.loadCss = function() {
+ var oLink = document.createElement("link");
+ oLink.href = this.config.plugbase+'/images/'+this.config.theme+'/style.css';
+ oLink.rel = "stylesheet";
+ oLink.type = "text/css";
+ document.getElementsByTagName('head')[0].appendChild(oLink);
+};
+
+//Right click
+dTree.prototype.contextmenu = function(n,e) {
+ var li,id,html,type,node,self,cmenu,cdtree,rmenu,X=0,Y=0,i;
+ cdtree= DOKUid("cdtree_" + this.obj);
+ rmenu=DOKUid('r' + this.obj);
+ if(!rmenu) { return true; }
+ indexmenu_mouseposition(rmenu,e);
+ cmenu=window.indexmenu_contextmenu[0];
+ node =this.aNodes[n];
+ self=this;
+ rmenu.innerHTML='<div class="indexmenu_rmenuhead" title="'+node.name+'">'+node.name+"</div>";
+ for (i=0; i<cmenu.length; i++,i++,i++,i++) {
+ if (((!node._hc || node.hns) && !cmenu[i+2])||(node._hc && !node.hns && !cmenu[i+3])) {continue;}
+ html=cmenu[i];
+ if (cmenu[i+1]) {
+ type='li';
+ id =(node.hns) ? node.hns : node.dokuid;
+ html='<a title="'+cmenu[i]+'" href="'+eval(cmenu[i+1])+'">'+html+'</a>';
+ } else {
+ type='span';
+ rmenu.appendChild(document.createElement('ul'));
+ }
+ li=document.createElement(type);
+ li.innerHTML=html;
+ rmenu.lastChild.appendChild(li);
+ }
+ rmenu.style.display='inline';
+ return false;
+};
+
+dTree.prototype.divdisplay = function(obj,v) {
+ var o=DOKUid(obj+this.obj);
+ if (!o) {return false;}
+ (v) ? o.style.display='inline': o.style.display='none' ;
+};
+
+dTree.prototype.init = function(s,c,n,nav,max) {
+ if (s) {this.loadCss();}
+ if (!c) {this.openCookies();}
+ if (n) {this.getOpenTo(n.split(" "));}
+ if (nav) {this.openCurNS(max);}
+ if (window.indexmenu_contextmenu) {
+ var self = this;
+ indexmenu_createPicker('r'+ this.obj,'indexmenu_rmenu '+this.config.theme);
+ DOKUid('r'+ this.obj).oncontextmenu=indexmenu_stopevt;
+ addEvent(document, 'click', function() {self.divdisplay('r',0);});
+ }
+};
+
+// If Push and pop is not implemented by the browser
+if (!Array.prototype.push) {
+ Array.prototype.push = function array_push() {
+ for(var i=0;i<arguments.length;i++){
+ this[this.length]=arguments[i];
+ }
+ return this.length;
+ };
+}
+if (!Array.prototype.pop) {
+ Array.prototype.pop = function array_pop() {
+ var lstEl = this[this.length-1];
+ this.length = Math.max(this.length-1,0);
+ return lstEl;
+ };
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js
new file mode 100644
index 000000000..ce5937c3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js
@@ -0,0 +1,18 @@
+/*----------------------------------------------------|
+ | dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+ |---------------------------------------------------|
+ | Copyright (c) 2002-2003 Geir Landro |
+ | |
+ | This script can be used freely as long as all |
+ | copyright messages are intact. |
+ | |
+ | Updated: 17.04.2003 |
+ |---------------------------------------------------|
+ | Modified for Dokuwiki by |
+ | Samuele Tognini <samuele@netsons.org> |
+ | under GPL 2 license |
+ | (http://www.gnu.org/licenses/gpl.html) |
+ | Updated: 29.08.2009 |
+ |---------------------------------------------------|
+ | indexmenu | wiki.splitbrain.org/plugin:indexmenu |
+ |--------------------------------------------------*/ function Node(g,f,e,d,c,b,a){this.dokuid=g;this.id=f;this.pid=e;this.name=d;this.hns=c;this.isdir=b;this.ajax=a;this._io=0;this._is=false;this._ls=false;this._hc=a;this._ai=0;this._p=false;this._lv=0;this._ok=false;this._cp=false;}function dTree(d,c){var b=indexmenu_findExt(c);this.config={urlbase:DOKU_BASE+"doku.php?id=",plugbase:DOKU_MEDIA+"lib/plugins/indexmenu",useCookies:true,scroll:true,toc:true,maxjs:1,jsajax:"",sepchar:":",theme:c};var a=this.config.plugbase+"/images/"+c+"/";this.icon={root:a+"base."+b,folder:a+"folder."+b,folderH:a+"folderh."+b,folderOpen:a+"folderopen."+b,folderHOpen:a+"folderhopen."+b,node:a+"page."+b,empty:a+"empty."+b,line:a+"line."+b,join:a+"join."+b,joinBottom:a+"joinbottom."+b,plus:a+"plus."+b,plusBottom:a+"plusbottom."+b,minus:a+"minus."+b,minusBottom:a+"minusbottom."+b,nlPlus:a+"nolines_plus."+b,nlMinus:a+"nolines_minus."+b};this.obj=d;this.aNodes=[];this.aIndent=[];this.root=new Node(false,-1);this.selectedNode=null;this.selectedFound=false;this.completed=false;this.scrllTmr=0;this.pageid=window.indexmenu_ID||"";this.fajax=false;}dTree.prototype.add=(function(g,f,e,d,c,b,a){this.aNodes[this.aNodes.length]=new Node(g,f,e,d,c,b,a);});dTree.prototype.openAll=(function(){if(!this.getCookie("co"+this.obj)){this.oAll(true);}});dTree.prototype.toString=(function(){var str="";if(this.config.scroll){str+="<div id=\"cdtree_"+this.obj+"\" class=\"dtree\" style=\"position:relative;overflow:hidden;width:100%;\">";}str+="<div id=\"dtree_"+this.obj+"\" class=\"dtree "+this.config.theme+"\" style=\"overflow:";if(this.config.scroll){str+="visible;position:relative;width:100%\"";}else{str+="hidden;\"";}str+=">";if(DOKUid("dtree_"+this.obj)){str+="<div class=\"error\">Indexmenu id conflict</div>";}if(this.config.toc){str+="<div id=\"t"+this.obj+"\" class=\"indexmenu_tocbullet "+this.config.theme+"\" style=\"display:none;\" title=\"Table of contents\"></div>";str+="<div id=\"toc_"+this.obj+"\" style=\"display:none;\"></div>";}if(this.config.useCookies){this.selectedNode=this.getSelected();}str+=this.addNode(this.root)+"</div>";if(this.config.scroll){str+="<div id=\"z"+this.obj+"\" class=\"indexmenu_rarrow\"></div>";str+="<div id=\"left_"+this.obj+"\" class=\"indexmenu_larrow\" style=\"display:none;\" title=\"Click to scroll back\" onmousedown=\"javascript:"+this.obj+".scroll('r',1);\" onmouseup=\"javascript:"+this.obj+".stopscroll();\"></div>";str+="</div>";}this.completed=true;this.divdisplay("nojs_",0);return str;});dTree.prototype.addNode=(function(pNode){var str="",cn,n=pNode._ai,l=pNode._lv+1;for(n;n<this.aNodes.length;n++){if(this.aNodes[n].pid==pNode.id){cn=this.aNodes[n];cn._p=pNode;cn._ai=n;cn._lv=l;this.setCS(cn);if(cn._hc&&!cn._io&&this.config.useCookies){cn._io=this.isOpen(cn.id);}if(this.pageid==(!cn.hns&&cn.dokuid||cn.hns)){cn._cp=true;}else{if(cn.id==this.selectedNode&&!this.selectedFound){cn._is=true;this.selectedNode=n;this.selectedFound=true;}}if(!cn._hc&&cn.isdir&&!cn.ajax&&!cn.hns){if(cn._ls){str+=this.noderr(cn,n);}}else{str+=this.node(cn,n);}if(cn._ls){break;}}}return str;});dTree.prototype.noderr=(function(node,nodeId){var str="<div class=\"dTreeNode\">"+this.indent(node,nodeId);str+="<div class=\"emptynode\" title=\"Empty\"></div></div>";return str;});dTree.prototype.node=(function(node,nodeId){var h=1,jsfnc,str;jsfnc="onmouseover=\""+this.obj+".show_feat('"+nodeId+"');\" onmousedown=\"return indexmenu_checkcontextm('"+nodeId+"',"+this.obj+",event);\" oncontextmenu=\"return indexmenu_stopevt(event)\"";if(node._lv>this.config.maxjs){h=0;}else{node._ok=true;}str="<div class=\"dTreeNode\">"+this.indent(node,nodeId);node.icon=(this.root.id==node.pid)?this.icon.root:((node.hns)?this.icon.folderH:((node._hc)?this.icon.folder:this.icon.node));node.iconOpen=(node._hc)?((node.hns)?this.icon.folderHOpen:this.icon.folderOpen):this.icon.node;if(this.root.id==node.pid){node.icon=this.icon.root;node.iconOpen=this.icon.root;}str+="<img id=\"i"+this.obj+nodeId+"\" src=\""+((node._io)?node.iconOpen:node.icon)+"\" alt=\"\" />";if(!node._hc||node.hns){str+="<a id=\"s"+this.obj+nodeId+"\" class=\""+((node._cp)?"navSel":((node._is)?"nodeSel":(node._hc)?"nodeFdUrl":"nodeUrl"));str+="\" href=\""+this.config.urlbase;(node.hns)?str+=node.hns:str+=node.dokuid;str+="\" title=\""+node.name+"\""+jsfnc;str+=" onclick=\"javascript: "+this.obj+".s("+nodeId+");\"";str+=">"+node.name+"</a>";}else{if(node.pid!=this.root.id){str+="<a id=\"s"+this.obj+nodeId+"\" href=\"javascript: "+this.obj+".o("+nodeId+"); \" class=\"node\""+jsfnc+">"+node.name+"</a>";}else{str+=node.name;}}str+="</div>";if(node._hc){str+="<div id=\"d"+this.obj+nodeId+"\" class=\"clip\" style=\"display:"+((this.root.id==node.pid||node._io)?"block":"none")+";\">";if(h){str+=this.addNode(node);}str+="</div>";}this.aIndent.pop();return str;});dTree.prototype.indent=(function(node,nodeId){var n,str="";if(this.root.id!=node.pid){for(n=0;n<this.aIndent.length;n++){str+="<img src=\""+((this.aIndent[n]==1)?this.icon.line:this.icon.empty)+"\" alt=\"\" />";}if(node._ls){this.aIndent.push(0);}else{this.aIndent.push(1);}if(node._hc){str+="<a href=\"javascript: "+this.obj+".o("+nodeId+");\"><img id=\"j"+this.obj+nodeId+"\" src=\"";str+=((node._io)?((node._ls)?this.icon.minusBottom:this.icon.minus):((node._ls)?this.icon.plusBottom:this.icon.plus));str+="\" alt=\"\" /></a>";}else{str+="<img src=\""+((node._ls)?this.icon.joinBottom:this.icon.join)+"\" alt=\"\" />";}}return str;});dTree.prototype.setCS=(function(node){var lastId,n;for(n=0;n<this.aNodes.length;n++){if(this.aNodes[n].pid==node.id){node._hc=true;}if(this.aNodes[n].pid==node.pid){lastId=this.aNodes[n].id;}}if(lastId==node.id){node._ls=true;}});dTree.prototype.getSelected=(function(){var sn=this.getCookie("cs"+this.obj);return(sn)?sn:null;});dTree.prototype.s=(function(id){var eOld,eNew,cn=this.aNodes[id];if(this.selectedNode!=id){eNew=DOKUid("s"+this.obj+id);if(!eNew){return;}if(this.selectedNode||this.selectedNode===0){eOld=DOKUid("s"+this.obj+this.selectedNode);eOld.className="node";}eNew.className="nodeSel";this.selectedNode=id;if(this.config.useCookies){this.setCookie("cs"+this.obj,cn.id);}}});dTree.prototype.o=(function(id){var cn=this.aNodes[id];this.nodeStatus(!cn._io,id,cn._ls);cn._io=!cn._io;if(this.config.useCookies){this.updateCookie();}this.divdisplay("z",0);this.resizescroll("block");});dTree.prototype.oAll=(function(status){for(var n=0;n<this.aNodes.length;n++){if(this.aNodes[n]._hc&&this.aNodes[n].pid!=this.root.id){this.nodeStatus(status,n,this.aNodes[n]._ls);this.aNodes[n]._io=status;}}if(this.config.useCookies){this.updateCookie();}});dTree.prototype.openTo=(function(nId,bSelect,bFirst){var n,cn;if(!bFirst){for(n=0;n<this.aNodes.length;n++){if(this.aNodes[n].id==nId){nId=n;break;}}}this.fill(this.aNodes[nId].pid);cn=this.aNodes[nId];if(cn.pid==this.root.id||!cn._p){return;}cn._io=1;if(this.completed&&cn._hc){this.nodeStatus(true,cn._ai,cn._ls);}if(cn._is){(this.completed)?this.s(cn._ai):this._sn=cn._ai;}this.openTo(cn._p._ai,false,true);});dTree.prototype.getOpenTo=(function(nodes){if(nodes===""){this.openAll();}else{if(!this.config.useCookies||!this.getCookie("co"+this.obj)){for(var n=0;n<nodes.length;n++){this.openTo(nodes[n],false,true);}}}});dTree.prototype.nodeStatus=(function(status,id,bottom){if(status&&!this.fill(id)){return;}var eJoin,eIcon;eJoin=DOKUid("j"+this.obj+id);eIcon=DOKUid("i"+this.obj+id);eIcon.src=(status)?this.aNodes[id].iconOpen:this.aNodes[id].icon;eJoin.src=((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus));DOKUid("d"+this.obj+id).style.display=(status)?"block":"none";});dTree.prototype.clearCookie=(function(){var now,yday;now=new Date();yday=new Date(now.getTime()-86400000);this.setCookie("co"+this.obj,"cookieValue",yday);this.setCookie("cs"+this.obj,"cookieValue",yday);});dTree.prototype.setCookie=(function(cookieName,cookieValue,expires,path,domain,secure){document.cookie=escape(cookieName)+"="+escape(cookieValue)+(expires?"; expires="+expires.toGMTString():"")+";path=/"+(domain?"; domain="+domain:"")+(secure?"; secure":"");});dTree.prototype.getCookie=(function(cookieName){var cookieValue="",pN,posValue,endPos;pN=document.cookie.indexOf(escape(cookieName)+"=");if(pN!=-1){posValue=pN+(escape(cookieName)+"=").length;endPos=document.cookie.indexOf(";",posValue);if(endPos!=-1){cookieValue=unescape(document.cookie.substring(posValue,endPos));}else{cookieValue=unescape(document.cookie.substring(posValue));}}return(cookieValue);});dTree.prototype.updateCookie=(function(){var str="",n;for(n=0;n<this.aNodes.length;n++){if(this.aNodes[n]._io&&this.aNodes[n].pid!=this.root.id){if(str){str+=".";}str+=this.aNodes[n].id;}}this.setCookie("co"+this.obj,str);});dTree.prototype.isOpen=(function(id){var n,aOpen=this.getCookie("co"+this.obj).split(".");for(n=0;n<aOpen.length;n++){if(aOpen[n]==id){return true;}}return false;});dTree.prototype.openCurNS=(function(max){var r,cn,match,t,i,n,cnsa,cna,cns=this.pageid;r=new RegExp("\\b"+this.config.sepchar+"\\b","g");match=cns.match(r)||-1;if(max>0&&match.length>=max){t=cns.split(this.config.sepchar);n=(this.aNodes[0].dokuid=="")?0:this.aNodes[0].dokuid.split(this.config.sepchar).length;t.splice(max+n,t.length);cnsa=t.join(this.config.sepchar);}for(i=0;i<this.aNodes.length;i++){cn=this.aNodes[i];if(cns==cn.dokuid||cns==cn.hns){this.openTo(cn.id,false,true);this.fajax=false;if(cn.pid>=0){addInitEvent(this.scroll("l",4,cn.pid,1));}break;}if(cnsa==cn.dokuid||cnsa==cn.hns){cna=cn;this.fajax=true;}}if(cna){this.openTo(cna.id,false,true);}});dTree.prototype.fill=(function(id){if(id==-1||this.aNodes[id]._ok){return true;}var n=id,eLoad,node,a,rd,ln,eDiv;if(this.aNodes[n].ajax){eLoad=DOKUid("l"+this.obj);node=DOKUid("s"+this.obj+n);if(!eLoad){eLoad=indexmenu_createPicker("l"+this.obj);}eLoad.innerHTML="Loading ...";DOKUid("s"+this.obj+n).parentNode.appendChild(eLoad);eLoad.style.width="auto";eLoad.style.display="inline";this.getAjax(n);return true;}rd=[];while(!this.aNodes[n]._ok){rd[rd.length]=n;n=this.aNodes[n].pid;}for(ln=rd.length-1;ln>=0;ln--){id=rd[ln];a=this.aNodes[id];eDiv=DOKUid("d"+this.obj+id);if(!eDiv){return false;}this.aIndent=[];n=a;while(n.pid>=0){if(n._ls){this.aIndent.unshift(0);}else{this.aIndent.unshift(1);}n=n._p;}eDiv.innerHTML=this.addNode(a);a._ok=true;}return true;});dTree.prototype.openCookies=(function(){var n,cn,aOpen=this.getCookie("co"+this.obj).split(".");for(n=0;n<aOpen.length;n++){if(aOpen[n]===""){break;}cn=this.aNodes[aOpen[n]];if(!cn._ok){this.nodeStatus(true,aOpen[n],cn._ls);cn._io=1;}}});dTree.prototype.scroll=(function(where,s,n,i){if(!this.config.scroll){return false;}var w,dtree,dtreel,nodeId;dtree=DOKUid("dtree_"+this.obj);dtreel=parseInt(dtree.offsetLeft,0);if(where=="r"){DOKUid("left_"+this.obj).style.border="thin inset";this.scrollRight(dtreel,s);}else{nodeId=DOKUid("s"+this.obj+n);w=parseInt(dtree.parentNode.offsetWidth-nodeId.offsetWidth-nodeId.offsetLeft,0);if(this.config.toc){w=w-11;}if(dtreel<=w){return;}this.resizescroll("none");this.stopscroll();this.scrollLeft(dtreel,s,w-3,i);}});dTree.prototype.scrollLeft=(function(lft,s,w,i){if(lft<w-i-10){this.divdisplay("z",0);this.scrllTmr=0;return;}var self=this;DOKUid("dtree_"+self.obj).style.left=lft+"px";this.scrllTmr=setTimeout((function(){self.scrollLeft(lft-s,s+i,w,i);}),20);});dTree.prototype.scrollRight=(function(lft,s){if(lft>=s){this.divdisplay("left_",0);this.stopscroll();return;}var self=this;DOKUid("dtree_"+self.obj).style.left=lft+"px";if(lft>-15){s=1;}this.scrllTmr=setTimeout((function(){self.scrollRight(lft+s,s+1);}),20);});dTree.prototype.stopscroll=(function(){DOKUid("left_"+this.obj).style.border="none";clearTimeout(this.scrllTmr);this.scrllTmr=0;});dTree.prototype.show_feat=(function(n){var w,div,id,dtree,dtreel,self,node=DOKUid("s"+this.obj+n);self=this;if(this.config.toc&&node.className!="node"){div=DOKUid("t"+this.obj);id=(this.aNodes[n].hns)?this.aNodes[n].hns:this.aNodes[n].dokuid;div.onmousedown=(function(){indexmenu_createTocMenu("req=toc&id="+decodeURIComponent(id),"picker_"+self.obj,"t"+self.obj);});node.parentNode.appendChild(div);if(div.style.display=="none"){div.style.display="inline";}}if(this.config.scroll){div=DOKUid("z"+this.obj);div.onmouseover=(function(){div.style.border="none";self.scroll("l",1,n,0);});div.onmousedown=(function(){div.style.border="thin inset";self.scroll("l",4,n,1);});div.onmouseout=(function(){div.style.border="none";self.stopscroll();});div.onmouseup=div.onmouseover;dtree=DOKUid("dtree_"+this.obj);dtreel=parseInt(dtree.offsetLeft,0);w=parseInt(dtree.parentNode.offsetWidth-node.offsetWidth-node.offsetLeft+1,0);if(dtreel>w){div.style.display="none";div.style.top=node.offsetTop+"px";div.style.left=parseInt(node.offsetLeft+node.offsetWidth+w-12,0)+"px";div.style.display="block";}}});dTree.prototype.resizescroll=(function(status){var dtree,w,h,left=DOKUid("left_"+this.obj);if(!left){return;}if(left.style.display==status){dtree=DOKUid("dtree_"+this.obj);w=parseInt(dtree.offsetHeight/3,0);h=parseInt(w/50,0)*50;if(h<50){h=50;}left.style.height=h+"px";left.style.top=w+"px";if(status=="none"){left.style.display="block";}}});dTree.prototype.getAjax=(function(n){var node,req,curns,selft=this;node=selft.aNodes[n];var Ajax=new sack(DOKU_BASE+"lib/plugins/indexmenu/ajax.php");req="req=index&idx="+node.dokuid+decodeURIComponent(this.config.jsajax);curns=this.pageid.substring(0,this.pageid.lastIndexOf(this.config.sepchar));Ajax.encodeURIString=false;Ajax.onCompletion=(function(){var i,ajxnodes,ajxnode,plus;plus=selft.aNodes.length-1;eval(this.response);if(!isArray(ajxnodes)||ajxnodes.length<1){ajxnodes=[["",1,0,"",0,1,0]];}node.ajax=false;for(i=0;i<ajxnodes.length;i++){ajxnode=ajxnodes[i];ajxnode[2]=(ajxnode[2]==0)?node.id:ajxnode[2]+plus;ajxnode[1]+=plus;selft.add(ajxnode[0],ajxnode[1],ajxnode[2],ajxnode[3],ajxnode[4],ajxnode[5],ajxnode[6]);}if(selft.fajax){selft.fajax=false;selft.openCurNS(0);}else{selft.openTo(node.id,false,true);}DOKUid("l"+selft.obj).style.display="none";});if(this.fajax){req+="&nss="+curns+"&max=1";}Ajax.encodeURIString=false;Ajax.runAJAX(encodeURI(req));});dTree.prototype.loadCss=(function(){var oLink=document.createElement("link");oLink.href=this.config.plugbase+"/images/"+this.config.theme+"/style.css";oLink.rel="stylesheet";oLink.type="text/css";document.getElementsByTagName("head")[0].appendChild(oLink);});dTree.prototype.contextmenu=(function(n,e){var li,id,html,type,node,self,cmenu,cdtree,rmenu,X=0,Y=0,i;cdtree=DOKUid("cdtree_"+this.obj);rmenu=DOKUid("r"+this.obj);if(!rmenu){return true;}indexmenu_mouseposition(rmenu,e);cmenu=window.indexmenu_contextmenu[0];node=this.aNodes[n];self=this;rmenu.innerHTML="<div class=\"indexmenu_rmenuhead\" title=\""+node.name+"\">"+node.name+"</div>";for(i=0;i<cmenu.length;i++,i++,i++,i++){if(((!node._hc||node.hns)&&!cmenu[i+2])||(node._hc&&!node.hns&&!cmenu[i+3])){continue;}html=cmenu[i];if(cmenu[i+1]){type="li";id=(node.hns)?node.hns:node.dokuid;html="<a title=\""+cmenu[i]+"\" href=\""+eval(cmenu[i+1])+"\">"+html+"</a>";}else{type="span";rmenu.appendChild(document.createElement("ul"));}li=document.createElement(type);li.innerHTML=html;rmenu.lastChild.appendChild(li);}rmenu.style.display="inline";return false;});dTree.prototype.divdisplay=(function(obj,v){var o=DOKUid(obj+this.obj);if(!o){return false;}(v)?o.style.display="inline":o.style.display="none";});dTree.prototype.init=(function(s,c,n,nav,max){if(s){this.loadCss();}if(!c){this.openCookies();}if(n){this.getOpenTo(n.split(" "));}if(nav){this.openCurNS(max);}if(window.indexmenu_contextmenu){var self=this;indexmenu_createPicker("r"+this.obj,"indexmenu_rmenu "+this.config.theme);DOKUid("r"+this.obj).oncontextmenu=indexmenu_stopevt;addEvent(document,"click",(function(){self.divdisplay("r",0);}));}});if(!Array.prototype.push){Array.prototype.push=(function array_push(){for(var i=0;i<arguments.length;i++){this[this.length]=arguments[i];}return this.length;});}if(!Array.prototype.pop){Array.prototype.pop=(function array_pop(){var lstEl=this[this.length-1];this.length=Math.max(this.length-1,0);return lstEl;});}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js
new file mode 100644
index 000000000..2ea6e32f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js
@@ -0,0 +1,71 @@
+/* Right Context Menu configuration for admin users:
+ Menu is built from four array items: title, link, show if page or headpage, show if namespace.
+ Link is not created if it's 0, otherwise it's evaluated.
+ Second array is displayed only in edit mode.
+
+ Some usefull variables:
+ node.hns = headpage id;
+ node.isdir = node is namespace;
+ node.dokuid = the DW id (namespace parent in case of headpage);
+ id = the DW id of the selected node (headpage id in case of headpage);
+ this.config.urlbase = Url Base;
+ this.config.sepchar = Url separator;
+*/
+
+var indexmenu_contextmenu=new Array(
+ //Standard right menu
+ new Array(
+ '<b><em>Page action:</em></b>',0,1,0,
+ '<b><em>Namespace action:</em></b>',0,0,1,
+ 'New page here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Headpage here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\',\'"+node.name+"\');"',0,1,
+ 'Edit','indexmenu_getid(this.config.urlbase,id)+"do=edit"',1,0,
+ 'Search','"javascript: indexmenu_srchpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.isdir+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Toc preview','"javascript: indexmenu_createTocMenu(\'req=toc&id="+id+"\',\'picker_"+this.obj+"\',\'s"+this.obj+node.id+"\');"',1,0,
+ 'Revisions','indexmenu_getid(this.config.urlbase,id)+"do=revisions"',1,0,
+ 'Purge cache','indexmenu_getid(this.config.urlbase,id)+"purge=true"',1,0,
+ 'Acls','indexmenu_getid(this.config.urlbase,id)+"do=admin&dokupage=acl"',1,1
+ ),
+
+ //Right menu in edit mode.
+ new Array(
+ '<b><em>Edit action:</em></b>',0,1,0,
+ 'Insert as DWlink','"javascript: indexmenu_insertTags(\'"+id+"\',\'"+this.config.sepchar+"\');"+this.obj+".divdisplay(\'r\',0);"',1,0
+ )
+ );
+
+/*Custom User Functions
+Insert your custom functions here.
+*/
+function indexmenu_reqpage(b,s,id,n) {
+ var r,u=b;
+ if (n) {
+ r = id + s + n;
+ } else {
+ r = prompt("Insert the pagename to create","");
+ if (!r) {return;}
+ r = id + s + r;
+ }
+ if (r) window.location.href = indexmenu_getid(u,r);
+}
+
+function indexmenu_srchpage(u,s,isdir,nid) {
+ var r = prompt("Insert keyword(s) to search for within this namespace","");
+ if (r)
+ {
+ var fnid = nid;
+ if (isdir == "0") {
+ fnid = fnid.substring(0,nid.lastIndexOf(s));
+ }
+ var b=u,re = new RegExp(s, 'g');
+ fnid = fnid.replace(re, ":");
+ b += (u.indexOf("?id=") < 0) ? '?id=': '';
+ window.location.href = indexmenu_getid(b,r+" @"+fnid)+"do=search";
+ }
+}
+
+function indexmenu_getid(u,id) {
+ var url=(u||'')+encodeURI(id||'');
+ url += (u.indexOf("?") < 0) ? '?': '&';
+ return url;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js
new file mode 100644
index 000000000..d92956141
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js
@@ -0,0 +1,56 @@
+/* Right Context Menu configuration for anonymous users:
+ Menu is built from four array items: title, link, show if page or headpage, show if namespace.
+ Link is not created if it's 0, otherwise it's evaluated.
+ Second array is displayed only in edit mode.
+
+ Some usefull variables:
+ node.hns = headpage id;
+ node.isdir = node is namespace;
+ node.dokuid = the DW id (namespace parent in case of headpage);
+ id = the DW id of the selected node (headpage id in case of headpage);
+ this.config.urlbase = Url Base;
+ this.config.sepchar = Url separator;
+*/
+
+var indexmenu_contextmenu=new Array(
+ //Standard right menu
+ new Array(
+ '<b><em>Page action:</em></b>',0,1,0,
+ '<b><em>Namespace action:</em></b>',0,0,1,
+ 'Search','"javascript: indexmenu_srchpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.isdir+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Toc preview','"javascript: indexmenu_createTocMenu(\'req=toc&id="+id+"\',\'picker_"+this.obj+"\',\'s"+this.obj+node.id+"\');"',1,0,
+ 'Revisions','indexmenu_getid(this.config.urlbase,id)+"do=revisions"',1,0
+ ),
+
+ //Right menu in edit mode.
+ new Array(
+ '<b><em>Edit action:</em></b>',0,1,0,
+ 'Insert as DWlink','"javascript: indexmenu_insertTags(\'"+id+"\',\'"+this.config.sepchar+"\');"+this.obj+".divdisplay(\'r\',0);"',1,0,
+ 'Edit','indexmenu_getid(this.config.urlbase,id)+"do=edit"',1,0
+ )
+ );
+
+/*Custom User Functions
+Insert your custom functions here.
+*/
+
+function indexmenu_srchpage(u,s,isdir,nid) {
+ var r = prompt("Insert keyword(s) to search for within this namespace","");
+ if (r)
+ {
+ var fnid = nid;
+ if (isdir == "0") {
+ fnid = fnid.substring(0,nid.lastIndexOf(s));
+ }
+ var b=u,re = new RegExp(s, 'g');
+ fnid = fnid.replace(re, ":");
+ b += (u.indexOf("?id=") < 0) ? '?id=': '';
+ window.location.href = indexmenu_getid(b,r+" @"+fnid)+"do=search";
+ }
+}
+
+function indexmenu_getid(u,id) {
+ var url=(u||'')+encodeURI(id||'');
+ url += (u.indexOf("?") < 0) ? '?': '&';
+ return url;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js
new file mode 100644
index 000000000..d58ae3802
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js
@@ -0,0 +1,69 @@
+/* Right Context Menu configuration for authenticated users:
+ Menu is built from four array items: title, link, show if page or headpage, show if namespace.
+ Link is not created if it's 0, otherwise it's evaluated.
+ Second array is displayed only in edit mode.
+
+ Some usefull variables:
+ node.hns = headpage id;
+ node.isdir = node is namespace;
+ node.dokuid = the DW id (namespace parent in case of headpage);
+ id = the DW id of the selected node (headpage id in case of headpage);
+ this.config.urlbase = Url Base;
+ this.config.sepchar = Url separator;
+*/
+
+var indexmenu_contextmenu=new Array(
+ //Standard right menu
+ new Array(
+ '<b><em>Page action:</em></b>',0,1,0,
+ '<b><em>Namespace action:</em></b>',0,0,1,
+ 'New page here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Headpage here','"javascript: indexmenu_reqpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.dokuid+"\',\'"+node.name+"\');"',0,1,
+ 'Edit','indexmenu_getid(this.config.urlbase,id)+"do=edit"',1,0,
+ 'Search','"javascript: indexmenu_srchpage(\'"+this.config.urlbase+"\',\'"+this.config.sepchar+"\',\'"+node.isdir+"\',\'"+node.dokuid+"\');"',1,1,
+ 'Toc preview','"javascript: indexmenu_createTocMenu(\'req=toc&id="+id+"\',\'picker_"+this.obj+"\',\'s"+this.obj+node.id+"\');"',1,0,
+ 'Revisions','indexmenu_getid(this.config.urlbase,id)+"do=revisions"',1,0
+ ),
+
+ //Right menu in edit mode.
+ new Array(
+ '<b><em>Edit action:</em></b>',0,1,0,
+ 'Insert as DWlink','"javascript: indexmenu_insertTags(\'"+id+"\',\'"+this.config.sepchar+"\');"+this.obj+".divdisplay(\'r\',0);"',1,0
+ )
+ );
+
+/*Custom User Functions
+Insert your custom functions here.
+*/
+function indexmenu_reqpage(b,s,id,n) {
+ var r,u=b;
+ if (n) {
+ r = id + s + n;
+ } else {
+ r = prompt("Insert the pagename to create","");
+ if (!r) {return;}
+ r = id + s + r;
+ }
+ if (r) window.location.href = indexmenu_getid(u,r);
+}
+
+function indexmenu_srchpage(u,s,isdir,nid) {
+ var r = prompt("Insert keyword(s) to search for within this namespace","");
+ if (r)
+ {
+ var fnid = nid;
+ if (isdir == "0") {
+ fnid = fnid.substring(0,nid.lastIndexOf(s));
+ }
+ var b=u,re = new RegExp(s, 'g');
+ fnid = fnid.replace(re, ":");
+ b += (u.indexOf("?id=") < 0) ? '?id=': '';
+ window.location.href = indexmenu_getid(b,r+" @"+fnid)+"do=search";
+ }
+}
+
+function indexmenu_getid(u,id) {
+ var url=(u||'')+encodeURI(id||'');
+ url += (u.indexOf("?") < 0) ? '?': '&';
+ return url;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php
new file mode 100644
index 000000000..29d939aa5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * German language for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Fabian Pfannes <fpfannes@web.de>
+ */
+$lang['menu'] = 'Indexmenu Werkzeuge';
+$lang['fetch'] = 'Anzeigen';
+$lang['install'] = 'Installieren';
+$lang['delete'] = 'L&ouml;schen';
+$lang['check'] = '&Uuml;berpr&uuml;fen';
+$lang['no_repos'] = 'Keine URL f&uuml;r ein Template Repository vorhanden.';
+$lang['disabled'] = 'Deaktiviert';
+$lang['conn_err'] = 'Verbindung fehlgeschlagen';
+$lang['dir_err'] = 'Fehler bei der Erzeugung eines Verzeichnises. Designvorlage konnte nicht gespeichert werden';
+$lang['down_err'] = 'Fehler beim Herunterladen der Designvorlage';
+$lang['zip_err'] = 'Fehler beim Erstellen oder Entpacken der Zip-Datei';
+$lang['install_ok'] = 'Designvorlage wurde erfolgreich erstellt. Die neue Designvorlage ist in der Werkzeugleiste der Konfigurationsseite oder &uuml;ber die js#theme_name Option verf&uuml;gbar.';
+$lang['install_no'] = 'Verbindungsfehler. Sie k&ouml;nnen aber versuchen die Designvorlage <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">hier</a> hochzuladen.';
+$lang['delete_ok'] = 'Designvorlage wurde erfolgreich gel&ouml;scht.';
+$lang['delete_no'] = 'Beim L&ouml;schen ist ein Fehler aufgetreten';
+$lang['upload'] = 'Hochladen';
+$lang['checkupdates'] = 'Plugin updaten';
+$lang['noupdates'] = "Indexmenu muss nicht upgedated werden. Sie haben bereits die aktuellste Version:";
+$lang['infos'] = 'Sie k&ouml;nnen eine neue Designvorlage erstellen. Beachten Sie die Anleitung im <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Designvorlagen Tutorial</a. <br />Wenn Sie den "Hochladen" Button unter der Desingvorlage dr&uuml;cken k&ouml;nnen Sie viele Leute gl&uuml;cklich machen :-) dadurch, dass Sie sie im &ouml;ffentliche Indexmenu Repository bereitstellen.';
+$lang['showsort']="Indexmenu Sortierungsnummer: ";
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php
new file mode 100644
index 000000000..e298caa44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * English language for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$lang['menu'] = 'Indexmenu Utilities';
+$lang['fetch'] = 'Show';
+$lang['install'] = 'Install';
+$lang['delete'] = 'Delete';
+$lang['check'] = 'Check';
+$lang['no_repos'] = 'No theme repository url configured.';
+$lang['disabled'] = 'Disabled';
+$lang['conn_err'] = 'Connection error';
+$lang['dir_err'] = 'Unable to create temporary folder to receive theme';
+$lang['down_err'] = 'Unable to receive theme';
+$lang['zip_err'] = 'Zip creation or extraction error';
+$lang['install_ok'] = 'theme installed successfully. The new theme is avaiable in the toolbar of the edit page or with the js#theme_name option.';
+$lang['install_no'] = 'Connection error. However you can try to upload manually your theme from <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">here</a>.';
+$lang['delete_ok'] = 'Theme is successfully deleted.';
+$lang['delete_no'] = 'An error occurred during theme deleting';
+$lang['upload'] = 'Share';
+$lang['checkupdates'] = 'Plugin updates';
+$lang['noupdates'] = "Indexmenu does not need to be update. You have already the last release:";
+$lang['infos'] = 'You can create your theme following the instructions at the <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Theme Tutorial</a> page. <br />Then you could make more people happy :-) sending it to the public indexmenu repository, with the "share" button under that theme.';
+$lang['showsort']="Indexmenu sort number: ";
+$lang['donation_text'] = 'The indexmenu plugin is not sponsored by anyone but i develop and support it for free during my spare time. If you gain something thanks to it or you want to support its development, you can consider to make a donation.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php
new file mode 100644
index 000000000..114237f32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * spanish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Digna González Otero <digna.gonzalezotero [at] gmail [dot] com>
+ */
+
+$lang['menu'] = 'Utilidades de Indexmenu';
+$lang['fetch'] = 'Mostrar';
+$lang['install'] = 'Instalar';
+$lang['delete'] = 'Eliminar';
+$lang['check'] = 'Seleccionar';
+$lang['no_repos'] = 'Url de repositorio de temas no configurado.';
+$lang['disabled'] = 'Desactivado';
+$lang['conn_err'] = 'Error de conexión';
+$lang['dir_err'] = 'Imposible crear directorio temporar para almacenar el tema';
+$lang['down_err'] = 'Imposible recibir el tema';
+$lang['zip_err'] = 'Error de creación o extracción de Zip';
+$lang['install_ok'] = 'Tema instalado satisfactoriamente. El nuevo tema está disponible en la barra de herramientas de la página a editar o con el comando js#nombre_del_tema opción.';
+$lang['install_no'] = 'Error de conexión. Puedes intentar subir tu tema manualmente desde <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">here</a>.';
+$lang['delete_ok'] = 'Tema eliminado correctamente.';
+$lang['delete_no'] = 'Ocurrió un error durante la eliminación del tema';
+$lang['upload'] = 'Compartir';
+$lang['checkupdates'] = 'Actualizaciones de plugin';
+$lang['noupdates'] = "No es necesario actualizar Indexmenu. Ya tienes la última versión:";
+$lang['infos'] = 'Puedes crear tu tema siguiendo las instrucciones de la página <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Theme Tutorial</a>. <br />Después puedes hacer feliz a más gente:-) enviándolo al repositorio público de indexmenu, con el botón de "compartir" bajo ese tema.';
+$lang['showsort']="Número de posición de Indexmenu: ";
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php
new file mode 100644
index 000000000..4f6bbcd54
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Italian language for indexmenu plugin
+ *
+ * @license: GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author: Samuele Tognini <samuele@netsons.org>
+ */
+$lang['menu'] = "Utility di Indexmenu";
+$lang['fetch'] = 'Mostra';
+$lang['install'] = 'Installa';
+$lang['delete'] = 'Elimina';
+$lang['check'] = 'Controlla';
+$lang['no_repos'] = 'Non &egrave stato configurato nessun indirizzo web per il repository dei temi.';
+$lang['disabled'] = 'Disabilitato';
+$lang['conn_err'] = 'Errore di connessione';
+$lang['local_themes'] = 'Temi installati';
+$lang['dir_err'] = 'Impossibile creare la directory temporanea per scaricare il tema';
+$lang['down_err'] = 'Impossibile scaricare il tema';
+$lang['zip_err'] = 'Errore durante la creazione o scompattazione dell\' archivio';
+$lang['install_ok'] = "tema installato correttamente. Il nuovo tema &egrave accessibile dalla toolbar degli strumenti quando crei una pagina oppure tramite l' opzione js#nome_tema di indexmenu.";
+$lang['install_no'] = 'Errore durante l\' upload. Puoi comunque provare ad inviarmi manualmente il tema da <a href="http://samuele.netsons.org/dokuwiki/lib/plugins/indexmenu/upload/">qui</a>.';
+$lang['delete_ok'] = 'Rimozione del tema avvenuta con successo';
+$lang['delete_no'] = "Errore durante la rimozione del tema";
+$lang['upload'] = 'Condividi';
+$lang['checkupdates'] = 'Aggiornamenti plugin';
+$lang['noupdates'] = "Indexmenu non ha bisogno di essere aggiornato. Hai gi&agrave l'ultima release:";
+$lang['infos'] = 'Puoi creare il tuo tema seguendo le istruzioni nella pagina del <a href="http://wiki.splitbrain.org/plugin:indexmenu#theme_tutorial">Tutorial dei temi</a>.<br /> Poi potreste rendere felice pi&ugrave gente :-) inviandolo nel repository pubblico di indexemnu tramite il pulsante "condividi" sotto il tema della lista.';
+$lang['showsort']="Ordinamento in indexmenu: ";
+$lang['donation_text'] = 'Il plugin indexmenu non &egrave sponsorizzato da nessuno, ma lo sviluppo e supporto gratuitamente nel mio tempo libero. Se guadagni qualcosa grazie a questo plugin o vuoi supportarne lo sviluppo, puoi farlo con una donazione.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js
new file mode 100644
index 000000000..34c8266cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js
@@ -0,0 +1,101 @@
+/**
+ * Javascript for index view
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+indexmenu_nojs = {
+ /**
+ * Delay in ms before showing the throbber.
+ * Used to skip the throbber for fast AJAX calls.
+ */
+ throbber_delay: 500,
+
+ /**
+ * Attach event handlers to all "folders" below the given element
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treeattach: function(iobj){
+ var obj=DOKUid('nojs_'+iobj[0]);
+ if (!obj) return;
+
+ var items = getElementsByClass('indexmenu_idx',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+
+ // attach action to make the link clickable by AJAX
+ addEvent(elem,'click',function(e){ return indexmenu_nojs.toggle(e,this,iobj[1]); });
+ }
+ },
+
+ /**
+ * Open or close a subtree using AJAX
+ * The contents of subtrees are "cached" untill the page is reloaded.
+ * A "loading" indicator is shown only when the AJAX call is slow.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ * Modified by Samuele Tognini <samuele@netsons.org> for the indexmenu plugin
+ */
+ toggle: function(e,clicky,jsajax){
+ var listitem = clicky.parentNode.parentNode;
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(sublists.length && listitem.className=='open'){
+ sublists[0].style.display='none';
+ listitem.className='closed';
+ e.preventDefault();
+ return false;
+ }
+
+ // just show if already loaded
+ if(sublists.length && listitem.className=='closed'){
+ sublists[0].style.display='';
+ listitem.className='open';
+ e.preventDefault();
+ return false;
+ }
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE+'lib/plugins/indexmenu/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ ul.className = 'idx';
+ timeout = window.setTimeout(function(){
+ // show the throbber as needed
+ ul.innerHTML = '<li><img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="loading..." title="loading..." /></li>';
+ listitem.appendChild(ul);
+ listitem.className='open';
+ }, this.throbber_delay);
+ ajax.elementObj = ul;
+ ajax.afterCompletion = function(){
+ window.clearTimeout(timeout);
+ indexmenu_nojs.treeattach(ul);
+ if (listitem.className!='open') {
+ listitem.appendChild(ul);
+ listitem.className='open';
+ }
+ };
+ ajax.runAJAX(encodeURI('req=index&nojs=1&'+clicky.search.substr(1)+'&max=1'+decodeURIComponent(jsajax)));
+ e.preventDefault();
+ return false;
+ },
+
+ /* Find all nojs indexmenu objects */
+ treefind: function () {
+ var aobj=indexmenu_nojsqueue;
+ if (!aobj) return;
+
+ for (var i in aobj) {
+ indexmenu_nojs.treeattach(aobj[i]);
+ }
+ }
+};
+
+indexmenu_nojs.treefind();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js
new file mode 100644
index 000000000..ac437321e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js
@@ -0,0 +1 @@
+indexmenu_nojs={throbber_delay:500,treeattach:(function(iobj){var obj=DOKUid("nojs_"+iobj[0]);if(!obj){return;}var items=getElementsByClass("indexmenu_idx",obj,"a");for(var i=0;i<items.length;i++){var elem=items[i];addEvent(elem,"click",(function(e){return indexmenu_nojs.toggle(e,this,iobj[1]);}));}}),toggle:(function(e,clicky,jsajax){var listitem=clicky.parentNode.parentNode;var sublists=listitem.getElementsByTagName("ul");if(sublists.length&&listitem.className=="open"){sublists[0].style.display="none";listitem.className="closed";e.preventDefault();return false;}if(sublists.length&&listitem.className=="closed"){sublists[0].style.display="";listitem.className="open";e.preventDefault();return false;}var ajax=new sack(DOKU_BASE+"lib/plugins/indexmenu/ajax.php");ajax.AjaxFailedAlert="";ajax.encodeURIString=false;if(ajax.failed){return true;}var ul=document.createElement("ul");ul.className="idx";timeout=window.setTimeout((function(){ul.innerHTML="<li><img src=\""+DOKU_BASE+"lib/images/throbber.gif\" alt=\"loading...\" title=\"loading...\" /></li>";listitem.appendChild(ul);listitem.className="open";}),this.throbber_delay);ajax.elementObj=ul;ajax.afterCompletion=(function(){window.clearTimeout(timeout);indexmenu_nojs.treeattach(ul);if(listitem.className!="open"){listitem.appendChild(ul);listitem.className="open";}});ajax.runAJAX(encodeURI("req=index&nojs=1&"+clicky.search.substr(1)+"&max=1"+decodeURIComponent(jsajax)));e.preventDefault();return false;}),treefind:(function(){var aobj=indexmenu_nojsqueue;if(!aobj){return;}for(var i in aobj){indexmenu_nojs.treeattach(aobj[i]);}})};indexmenu_nojs.treefind();
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js
new file mode 100644
index 000000000..411f0fde5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js
@@ -0,0 +1,152 @@
+/* Queue of loaded script files */
+var indexmenu_jsqueue = [];
+/* Queue of loaded css files */
+var indexmenu_cssqueue = [];
+/* Queue of nojs trees */
+var indexmenu_nojsqueue = [];
+
+function indexmenu_findExt(path){
+ var ext = "gif";
+ var cext = path.lastIndexOf(".");
+ if ( cext > -1){
+ cext++;
+ cext = path.substring(cext, path.length).toLowerCase();
+ if ((cext == "png") || (cext == "jpg")) {ext = cext;}
+ }
+ return ext;
+}
+
+function indexmenu_createTocMenu(get,picker,btn) {
+ var toc_picker = DOKUid(picker);
+ if (!toc_picker) {
+ toc_picker=indexmenu_createPicker(picker);
+ toc_picker.className='dokuwiki indexmenu_toc';
+ toc_picker.innerHTML='<a href="#"><img src="'+DOKU_BASE+'lib/plugins/indexmenu/images/close.gif" class="indexmenu_close" /></a><div />';
+ addEvent(toc_picker.firstChild, 'click',function (event) {event.stopPropagation();return indexmenu_showPicker(picker)});
+ } else {
+ toc_picker.style.display = 'none';
+ }
+ indexmenu_ajaxmenu(get,toc_picker,DOKUid(btn),toc_picker.childNodes[1]);
+}
+
+function indexmenu_ajaxmenu(get,picker,btn,container,oncomplete) {
+ var indx_list;
+ if (container) {
+ indx_list = container;
+ } else {
+ indx_list = picker;
+ }
+ if (!indexmenu_showPicker(picker,btn)) return;
+ // We use SACK to do the AJAX requests
+ var ajax = new sack(DOKU_BASE+'lib/plugins/indexmenu/ajax.php');
+ ajax.encodeURIString=false;
+ ajax.onLoading = function () {
+ indx_list.innerHTML='<div class="tocheader">Loading .....</div>';
+ };
+
+ // define callback
+ ajax.onCompletion = function(){
+ var data = this.response;
+ indx_list.innerHTML="";
+ if (isFunction(oncomplete)) {
+ oncomplete(data,indx_list);
+ } else {
+ indx_list.innerHTML=data;
+ }
+ };
+
+ ajax.runAJAX(encodeURI(get));
+}
+
+function indexmenu_createPicker(id,cl) {
+ var indx_list = document.createElement('div');
+ indx_list.className = cl || 'picker';
+ indx_list.id=id;
+ indx_list.style.position = 'absolute';
+ indx_list.style.display = 'none';
+ var body = document.getElementsByTagName('body')[0];
+ body.appendChild(indx_list);
+ return indx_list;
+}
+
+function indexmenu_showPicker(pickerid,btn){
+ var x = 3, y = 3, picker = DOKUid(pickerid);
+ if(picker.style.display == 'none'){
+ x += findPosX(btn);
+ y += findPosY(btn);
+ if (picker.id != 'picker_plugin_indexmenu') {
+ x += btn.offsetWidth-3;
+ } else {
+ y += btn.offsetHeight;
+ }
+ picker.style.display = 'block';
+ picker.style.left = x+'px';
+ picker.style.top = y+'px';
+ return true;
+ }else{
+ picker.style.display = 'none';
+ return false;
+ }
+}
+
+function indexmenu_loadtoolbar(){
+ var toolbar = DOKUid('tool__bar');
+ if(!toolbar) return;
+ indexmenu_loadJs(DOKU_BASE+'lib/plugins/indexmenu/edit.js');
+}
+
+function indexmenu_loadJs(f){
+ var basef = f.replace(/^.*[\/\\]/g, '');
+ if (indexmenu_notinarray(indexmenu_jsqueue,basef)) {
+ var oLink = document.createElement("script");
+ oLink.src = f;
+ oLink.type = "text/javascript";
+ oLink.charset="utf-8";
+ indexmenu_jsqueue.push(basef);
+ document.getElementsByTagName("head")[0].appendChild(oLink);
+ }
+}
+
+function indexmenu_checkcontextm(n,obj,e){
+ var k=0;
+ e=e||event;
+ if ((e.which == 3 || e.button == 2) || (window.opera && e.which == 1 && e.ctrlKey)) {
+ obj.contextmenu (n,e);
+ indexmenu_stopevt(e);
+ }
+}
+
+function indexmenu_stopevt(e) {
+ if (!window.indexmenu_contextmenu) {
+ return true;
+ }
+ e=e||event;
+ e.preventdefault? e.preventdefault() : e.returnValue = false;
+ return false;
+}
+
+function indexmenu_notinarray(array,val) {
+ for (var i = 0; i < array.length; i++) {
+ if (array[i] == val) {
+ return false;
+ }
+ }
+ return true;
+}
+
+function indexmenu_mouseposition(obj,e) {
+/*http://www.quirksmode.org/js/events_properties.html*/
+ if (!e) e = window.event;
+ if (e.pageX || e.pageY) {
+ X = e.pageX;
+ Y = e.pageY;
+ }
+ else if (e.clientX || e.clientY) {
+ X = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
+ Y = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
+ }
+ obj.style.left=X-5+'px';
+ obj.style.top=Y-5+'px';
+}
+
+addInitEvent(indexmenu_loadtoolbar);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css
new file mode 100644
index 000000000..a70cbebfe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css
@@ -0,0 +1,190 @@
+/*--------------------------------------------------|
+| dTree 2.05 | www.destroydrop.com/javascript/tree/ |
+|---------------------------------------------------|
+| Copyright (c) 2002-2003 Geir Landro |
+|--------------------------------------------------*/
+/*
+ a.nodeFdUrl Namespace with url link (headpage) js
+ a.node Namespace without url link js
+ a.nodeUrl Page js
+ a.nodeSel Last visited page js
+ a.navSel Current page js
+ a.indexmenu_idx_head link style of a namespace with url (headpage) nojs
+ a.indexmenu_idx link style of a namespace without url nojs
+ */
+
+/* dtree properties. No need to change*/
+
+.dtree {
+ font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
+ font-size: 11px;
+ color: __text__;
+ white-space: nowrap;
+ line-height: normal;
+}
+
+.dtree img {
+ border: 0px;
+ vertical-align: top;
+}
+
+/*Properties that can be edit*/
+
+/*Link properties*/
+.dtree a {
+ color: __existing__;
+ text-decoration: none;
+}
+
+/*Link properties*/
+.dtree a.node, .dtree a.nodeSel a.navSel {
+ white-space: nowrap;
+ padding: 1px 2px 1px 2px;
+}
+/* Last visited page highlighting*/
+.dtree a.nodeSel {
+ background-color: __background_alt__;
+}
+/* Current page highlighting*/
+.dtree a.navSel {
+ background-color: __highlight__;
+}
+
+/*
+.dtree .clip {
+}
+*/
+
+/*nojs tree div*/
+.indexmenu_nojs {
+ display: block;
+}
+
+/*Namespace without page link in nojs mode. !important has to be used*/
+div.li a.indexmenu_idx {
+ color: __missing__ !important;
+ text-decoration: none !important;
+ font-weight: bold;
+}
+
+/*Namespace with page link (headpage) in nojs mode. !important has to be used*/
+
+div.li a.indexmenu_idx_head {
+ font-weight: bold;
+}
+
+
+/*Style for admin panel interface*/
+div.dokuwiki div.indexmenu_list_themes {
+ clear: both;
+ border-top: 2px solid __border__;
+ padding-left: 1em;
+}
+
+/*Mouseover property*/
+.dtree a.nodeFdUrl:hover, .dtree a.nodeSel:hover, a.navSel:hover, .dtree a.nodeUrl:hover {
+ color: __existing__;
+ text-decoration: underline;
+ background-color: __background_alt__;
+}
+/*Mouseover property*/
+.dtree a.node:hover {
+ text-decoration: none;
+}
+
+/*tocbullet property*/
+.dtree .indexmenu_tocbullet {
+ position:absolute;
+ background: transparent url(images/toc_bullet.gif) no-repeat scroll;
+ vertical-align: middle;
+ width: 11px;
+ height: 11px;
+}
+
+/*scrolling arrow property*/
+.dtree .indexmenu_larrow {
+ position:absolute;
+ filter:alpha(opacity=60);-moz-opacity:.60;opacity:.60;
+ background:transparent url(images/larrow.gif) repeat-y scroll;
+ padding-left:22px;
+ z-index:100;
+}
+
+/*toc property*/
+.indexmenu_toc {
+ font-size: 80%;
+ line-height: 1.2em;
+ white-space: normal;
+ overflow: hidden;
+ width: 200px !important;
+ z-index:100 !important;
+ word-wrap: break-word;
+}
+
+.indexmenu_toc .indexmenu_toc_inside {
+ border: 1px solid __border__;
+ background-color: __background__;
+ text-align: left;
+ padding: 0.5em 0 0.7em 0;
+ max-height: 300px;
+ height: expression( this.scrollHeight > 300 ? "300px" : "auto" );
+ overflow: auto;
+}
+
+.dtree .indexmenu_rarrow {
+ position:absolute;
+ background:white url(images/rarrow.gif) no-repeat scroll;
+ width:11px;
+ height:15px;
+}
+
+.indexmenu_rmenu {
+ position: absolute;
+ z-index: 100;
+ background-color: #fff;
+ border: 1px solid black;
+ font-size: 80%;
+ line-height: 100%;
+ padding-bottom: 5px;
+}
+
+.indexmenu_rmenuhead {
+ background-color: #CCFFCC;
+ border-bottom: 1px solid __text__;
+ color: __text__;
+ font-size: 90%;
+ margin: 0pt;
+ text-align: center;
+ padding: 1px 5px;
+ vertical-align: middle;
+ overflow: hidden;
+ width: 80px;
+}
+
+.indexmenu_rmenu ul,.indexmenu_rmenu li {
+ list-style-type: none !important;
+ list-style-image: none !important;
+ color: #000 !important;
+ margin: 2px !important;
+ text-align: center;
+}
+
+.indexmenu_rmenu a:hover {
+ background-color: #000 !important;
+ color: #fff !important;
+}
+
+.indexmenu_opts {
+ font-size: 80%;
+}
+
+.dtree .emptynode {
+ background: transparent url(images/empty.gif) no-repeat scroll;
+ display: inline;
+ padding: 1px 8px;
+ width: 16px;
+ height: 16px;
+ vertical-align: top;
+ /* needed by ie7 */
+ zoom: 1;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php
new file mode 100644
index 000000000..a1653437d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php
@@ -0,0 +1,720 @@
+<?php
+/**
+ * Info Indexmenu: Displays the index of a specified namespace.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ *
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+if(!defined('INDEXMENU_IMG_ABSDIR')) define('INDEXMENU_IMG_ABSDIR',DOKU_PLUGIN."indexmenu/images");
+require_once(DOKU_PLUGIN.'syntax.php');
+require_once(DOKU_INC.'inc/search.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_indexmenu_indexmenu extends DokuWiki_Syntax_Plugin {
+
+ var $sort=false;
+ var $msort=false;
+ var $rsort=false;
+ var $nsort=false;
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu',
+ 'desc' => 'Insert the index of a specified namespace.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu'
+ );
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ function getPType(){
+ return 'block';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 138;
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('{{indexmenu>.+?}}',$mode,'plugin_indexmenu_indexmenu');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $theme="default";
+ $ns=".";
+ $level = -1;
+ $nons = true;
+ $gen_id='random';
+ $maxjs=0;
+ $max=0;
+ $jsajax='';
+ $nss=array();
+ $match = substr($match,12,-2);
+ //split namespace,level,theme
+ $match = preg_split('/\|/u', $match, 2);
+ //split options
+ $opts=preg_split('/ /u',$match[1]);
+ //Context option
+ $context = in_array('context',$opts);
+ //split optional namespaces
+ $nss_temp=preg_split("/ /u",$match[0],-1,PREG_SPLIT_NO_EMPTY);
+ //Array optional namespace => level
+ for ($i = 1; $i < count($nss_temp); $i++) {
+ $nsss=preg_split("/#/u",$nss_temp[$i]);
+ if (!$context) {
+ $nsss[0] = $this->_parse_ns($nsss[0]);
+ }
+ $nss[]=array($nsss[0],(is_numeric($nsss[1])) ? $nsss[1] : $level);
+ }
+ //split main requested namespace
+ if (preg_match('/(.*)#(\S*)/u',$nss_temp[0],$ns_opt)) {
+ //split level
+ $ns = $ns_opt[1];
+ if (is_numeric($ns_opt[2])) $level=$ns_opt[2];
+ } else {
+ $ns = $nss_temp[0];
+ }
+ if (!$context) {
+ $ns = $this->_parse_ns($ns);
+ }
+ //nocookie option (disable for uncached pages)
+ $nocookie=$context||in_array('nocookie',$opts);
+ //noscroll option
+ $noscroll=in_array('noscroll',$opts);
+ //Open at current namespace option
+ $navbar=in_array('navbar',$opts);
+ //no namespaces options
+ $nons = in_array('nons',$opts);
+ //no pages option
+ $nopg = in_array('nopg',$opts);
+ //disable toc preview
+ $notoc = in_array('notoc',$opts);
+ //Main sort method
+ if (in_array('tsort',$opts)) {
+ $sort='t';
+ } elseif (in_array('dsort',$opts)) {
+ $sort='d';
+ } else $sort=0;
+ //Directory sort
+ $nsort=in_array('nsort',$opts);
+ //Metadata sort method
+ if ($msort = in_array('msort',$opts)) {
+ $msort='indexmenu_n';
+ } elseif (preg_match('/msort#(\S+)/u',$match[1],$msort_tmp) >0) $msort=str_replace(':',' ',$msort_tmp[1]);
+ //reverse sort
+ $rsort=in_array('rsort',$opts);
+ //javascript option
+ if (!$js= in_array('js',$opts)) {
+ //split theme
+ if (preg_match('/js#(\S*)/u',$match[1],$tmp_theme) > 0) {
+ if (is_dir(INDEXMENU_IMG_ABSDIR."/".$tmp_theme[1])) {
+ $theme=$tmp_theme[1];
+ }
+ $js=true;
+ }
+ }
+ //id generation method
+ if (preg_match('/id#(\S+)/u',$match[1],$id) >0) $gen_id=$id[1];
+ //max option
+ if (preg_match('/max#(\d+)($|\s+|#(\d+))/u',$match[1],$maxtmp) >0) {
+ $max=$maxtmp[1];
+ if ($maxtmp[3]) $jsajax = "&max=".$maxtmp[3];
+ //disable cookie to avoid javascript errors
+ $nocookie=true;
+ }
+ if ($sort) $jsajax .= "&sort=".$sort;
+ if ($msort) $jsajax .= "&msort=".$msort;
+ if ($rsort) $jsajax .= "&rsort=1";
+ if ($nsort) $jsajax .= "&nsort=1";
+ if ($nopg) $jsajax .= "&nopg=1";
+ //max js option
+ if (preg_match('/maxjs#(\d+)/u',$match[1],$maxtmp) >0) $maxjs=$maxtmp[1];
+ //js options
+ $js_opts=compact('theme','gen_id','nocookie','navbar','noscroll','maxjs','notoc','jsajax','context');
+ return array($ns,
+ $js_opts,
+ $sort,
+ $msort,
+ $rsort,
+ $nsort,
+ array('level' => $level,
+ 'nons' => $nons,
+ 'nopg' => $nopg,
+ 'nss' => $nss,
+ 'max' => $max,
+ 'js' => $js,
+ 'skip_index' => $this->getConf('skip_index'),
+ 'skip_file' => $this->getConf('skip_file'),
+ 'headpage' => $this->getConf('headpage'),
+ 'hide_headpage' => $this->getConf('hide_headpage')
+ )
+ );
+ }
+
+ /**
+ * Render output
+ */
+ function render($mode, &$renderer, $data) {
+ global $ACT;
+ global $conf;
+ global $INFO;
+ if($mode == 'xhtml'){
+ if ($ACT == 'preview') {
+ //Check user permission to display indexmenu in a preview page
+ if( $this->getConf('only_admins') &&
+ $conf['useacl'] &&
+ $INFO['perm'] < AUTH_ADMIN)
+ return false;
+ //disable cookies
+ $data[1]['nocookie']=true;
+ }
+ //Navbar with nojs
+ if ($data[1]['navbar'] && !$data[6]['js']) {
+ if (!isset($data[0])) $data[0]='..';
+ $data[6]['nss'][]=array(getNS($INFO['id']));
+ $renderer->info['cache'] = FALSE;
+ }
+
+ if ($data[1]['context']) {
+ //resolve current id relative namespaces
+ $data[0]=$this->_parse_ns($data[0],$INFO['id']);
+ foreach ($data[6]['nss'] as $key=>$value) {
+ $data[6]['nss'][$key][0] = $this->_parse_ns($value[0],$INFO['id']);
+ }
+ $renderer->info['cache'] = FALSE;
+ }
+ $n = $this->_indexmenu($data);
+ if (!@$n) {
+ $n = $this->getConf('empty_msg');
+ $n = str_replace('{{ns}}',cleanID($data[0]),$n);
+ $n = p_render('xhtml',p_get_instructions($n),$info);
+ }
+ $renderer->doc .= $n;
+ return true;
+ } else if ($mode == 'metadata') {
+ if (!($data[1]['navbar'] && !$data[6]['js']) && !$data[1]['context']) {
+ //this is an indexmenu page that needs the PARSER_CACHE_USE event trigger;
+ $renderer->meta['indexmenu'] = TRUE;
+ }
+ $renderer->doc .= ((empty($data[0])) ? $conf['title'] : nons($data[0])) ." index\n\n";
+ unset($renderer->persistent['indexmenu']);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Return the index
+ * @author Samuele Tognini <samuele@netsons.org>
+ *
+ * This function is a simple hack of Dokuwiki html_index($ns)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _indexmenu($myns) {
+ global $conf;
+ $ns = $myns[0];
+ $js_opts=$myns[1];
+ $this->sort = $myns[2];
+ $this->msort = $myns[3];
+ $this->rsort = $myns[4];
+ $this->nsort = $myns[5];
+ $opts = $myns[6];
+ $output=false;
+ $data = array();
+ $js_name="indexmenu_";
+ $fsdir="/".utf8_encodeFN(str_replace(':','/',$ns));
+ if ($this->sort || $this->msort || $this->rsort) {
+ $custsrch=$this->_search($data,$conf['datadir'],array($this,'_search_index'),$opts,$fsdir);
+ } else {
+ search($data,$conf['datadir'],array($this,'_search_index'),$opts,$fsdir);
+ }
+ if (!$data) return false;
+
+ // Id generation method
+ if (is_numeric($js_opts['gen_id'])) {
+ $js_name .= $js_opts['gen_id'];
+ } elseif ($js_opts['gen_id'] == 'ns') {
+ $js_name .= sprintf("%u",crc32($ns));
+ } else {
+ $js_name .= uniqid(rand());
+ }
+
+ //javascript index
+ if ($opts['js']) {
+ $ns = str_replace('/',':',$ns);
+ $output_tmp=$this->_jstree($data,$ns,$js_opts,$js_name,$opts['max']);
+ //remove unwanted nodes from standard index
+ $this->_clean_data($data);
+ } else {
+ $output .= "<script type='text/javascript' charset='utf-8'>\n";
+ $output .= "<!--//--><![CDATA[//><!--\n";
+ $output .= "indexmenu_nojsqueue.push(new Array('".$js_name."','".utf8_encodeFN($js_opts['jsajax'])."'));\n";
+ $output .= "addInitEvent(function(){indexmenu_loadJs(DOKU_BASE+'lib/plugins/indexmenu/nojsindex.js');});\n";
+ $output .= "//--><!]]>\n";
+ $output .= "</script>\n";
+ }
+ //Nojs dokuwiki index
+ $output.="\n".'<div id="nojs_'.$js_name.'" class="indexmenu_nojs"';
+ $output.=">\n";
+ $output.=html_buildlist($data,'idx',array($this,"_html_list_index"),"html_li_index");
+ $output.="</div>\n";
+ $output.=$output_tmp;
+ return $output;
+ }
+
+ /**
+ * Build the browsable index of pages using javascript
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _jstree($data,$ns,$js_opts,$js_name,$max) {
+ global $conf;
+ $hns=false;
+ if (empty($data)) return false;
+ //Render requested ns as root
+ $headpage=$this->getConf('headpage');
+ if (empty($ns) && !empty($headpage)) $headpage.=','.$conf['start'];
+ $title=$this->_getTitle($ns,$headpage,$hns);
+ if (empty($title)) {
+ (empty($ns)) ? $title = htmlspecialchars($conf['title'],ENT_QUOTES) : $title=$ns;
+ }
+ $out = "<script type='text/javascript' charset='utf-8'>\n";
+ $out .= "<!--//--><![CDATA[//><!--\n";
+ $out .= "var $js_name = new dTree('".$js_name."','".$js_opts['theme']."');\n";
+ $sepchar = idfilter(':');
+ $out .= "$js_name.config.urlbase='".substr(wl(":"), 0, -1)."';\n";
+ $out .= "$js_name.config.sepchar='".$sepchar."';\n";
+ if ($js_opts['notoc']) $out .="$js_name.config.toc=false;\n";
+ if ($js_opts['nocookie']) $out .="$js_name.config.useCookies=false;\n";
+ if ($js_opts['noscroll']) $out .="$js_name.config.scroll=false;\n";
+ if ($js_opts['maxjs'] > 0) $out .= "$js_name.config.maxjs=".$js_opts['maxjs'].";\n";
+ if (!empty($js_opts['jsajax'])) $out .= "$js_name.config.jsajax='".utf8_encodeFN($js_opts['jsajax'])."';\n";
+ $out .= $js_name.".add('".idfilter(cleanID($ns))."',0,-1,'".$title."'";
+ if ($hns) $out .= ",'".idfilter(cleanID($hns))."'";
+ $out .= ");\n";
+ $anodes = $this->_jsnodes($data,$js_name);
+ $out .= $anodes[0];
+ $out .= "document.write(".$js_name.");\n";
+ $out .= "addInitEvent(function(){".$js_name.".init(";
+ $out .= (int) is_file(INDEXMENU_IMG_ABSDIR.'/'.$js_opts['theme'].'/style.css').",";
+ $out .= (int) $js_opts['nocookie'].",";
+ $out .= '"'.$anodes[1].'",';
+ $out .= (int) $js_opts['navbar'].",$max";
+ $out .= ");});\n";
+ $out .= "//--><!]]>\n";
+ $out .= "</script>\n";
+ return $out;
+ }
+
+ /**
+ * Return array of javascript nodes and nodes to open.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _jsnodes($data,$js_name,$noajax=1) {
+ if (empty($data)) return false;
+ //Array of nodes to check
+ $q=array('0');
+ //Current open node
+ $node=0;
+ $out='';
+ $extra='';
+ if ($noajax) {
+ $jscmd=$js_name.".add";
+ $com=";\n";
+ } else {
+ $jscmd="new Array ";
+ $com=",";
+ }
+ foreach ($data as $i=>$item){
+ $i++;
+ //Remove already processed nodes (greater level = lower level)
+ while ($item['level'] <= $data[end($q)-1]['level']) {
+ array_pop($q);
+ }
+
+ //till i found its father node
+ if ($item['level']==1) {
+ //root node
+ $father='0';
+ } else {
+ //Father node
+ $father=end($q);
+ }
+ //add node and its options
+ if ($item['type'] == 'd' ) {
+ //Search the lowest open node of a tree branch in order to open it.
+ if ($item['open']) ($item['level'] < $data[$node]['level']) ? $node=$i : $extra .= "$i ";
+ //insert node in last position
+ array_push($q,$i);
+ }
+ $out .= $jscmd."('".idfilter($item['id'])."',$i,".$father.",'".$item['title']."'";
+ //hns
+ ($item['hns']) ? $out .= ",'".idfilter($item['hns'])."'" : $out .= ",0";
+ ($item['type'] == 'd' || $item['type']=='l') ? $out .= ",1" : $out .= ",0";
+ //MAX option
+ ($item['type']=='l') ? $out .= ",1" : $out .= ",0";
+ $out .= ")".$com;
+ }
+ $extra=rtrim($extra,' ');
+ return array($out,$extra);
+ }
+ /**
+ * Get page title, checking for headpages
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _getTitle ($ns,$headpage,&$hns) {
+ global $conf;
+ $hns=false;
+ $title=noNS($ns);
+ if (empty($headpage)) return $title;
+ $ahp=explode(",",$headpage);
+ foreach ($ahp as $hp) {
+ switch ($hp) {
+ case ":inside:":
+ $page=$ns.":".noNS($ns);
+ break;
+ case ":same:":
+ $page=$ns;
+ break;
+ //it's an inside start
+ case ":start:":
+ $page=ltrim($ns.":".$conf['start'],":");
+ break;
+ //inside pages
+ default:
+ $page=$ns.":".$hp;
+ }
+ //check headpage
+ if (@file_exists(wikiFN($page)) && auth_quickaclcheck($page) >= AUTH_READ) {
+ if ($conf['useheading'] && $title_tmp=p_get_first_heading($page,FALSE)) $title=$title_tmp;
+ $title=htmlspecialchars($title,ENT_QUOTES);
+ $hns=$page;
+ //headpage found, exit for
+ break;
+ }
+ }
+ return $title;
+ }
+
+ /**
+ * Parse namespace request
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _parse_ns ($ns,$id=FALSE) {
+ if (!$id) {
+ global $ID;
+ $id = $ID;
+ }
+ //Just for old reelases compatibility
+ if (empty($ns) || $ns == '..') $ns=":..";
+ return resolve_id(getNS($id),$ns);
+ }
+
+ /**
+ * Clean index data from unwanted nodes in nojs mode.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _clean_data(&$data) {
+ foreach ($data as $i=>$item) {
+ //closed node
+ if ($item['type'] == "d" && !$item['open']) {
+ $a=$i+1;
+ $level=$data[$i]['level'];
+ //search and remove every lower and closed nodes
+ while ($data[$a]['level'] > $level && !$data[$a]['open']) {
+ unset($data[$a]);
+ $a++;
+ }
+ }
+ $i++;
+ }
+ }
+
+ /**
+ * Build the browsable index of pages
+ *
+ * $opts['ns'] is the current namespace
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * modified by Samuele Tognini <samuele@netsons.org>
+ */
+ function _search_index(&$data,$base,$file,$type,$lvl,$opts){
+ global $conf;
+ $hns=false;
+ $return=false;
+ $isopen=false;
+ $skip_index=$opts['skip_index'];
+ $skip_file=$opts['skip_file'];
+ $headpage=$opts['headpage'];
+ $id = pathID($file);
+ if($type == 'd'){
+ // Skip folders in plugin conf
+ if (!empty($skip_index) &&
+ preg_match($skip_index, $id))
+ return false;
+ //check ACL (for sneaky_index namespaces too).
+ if ($this->getConf('sneaky_index') && auth_quickaclcheck($id.':') < AUTH_READ) return false;
+ //Open requested level
+ if ($opts['level'] > $lvl || $opts['level'] == -1) $isopen=true;
+ //Search optional namespaces
+ if (!empty($opts['nss'])){
+ $nss=$opts['nss'];
+ for ($a=0; $a<count($nss);$a++) {
+ if (preg_match("/^".$id."($|:.+)/i",$nss[$a][0],$match)) {
+ //It contains an optional namespace
+ $isopen=true;
+ } elseif (preg_match("/^".$nss[$a][0]."(:.*)/i",$id,$match)) {
+ //It's inside an optional namespace
+ if ($nss[$a][1] == -1 || substr_count($match[1],":") < $nss[$a][1]) {
+ $isopen=true;
+ } else {
+ $isopen=false;
+ }
+ }
+ }
+ }
+ if ($opts['nons']) {
+ return $isopen;
+ } elseif ($opts['max'] >0 && !$isopen && $lvl >= $opts['max']) {
+ $isopen=false;
+ //Stop recursive searching
+ $return=false;
+ //change type
+ $type="l";
+ } elseif ($opts['js']) {
+ $return=true;
+ } else {
+ $return=$isopen;
+ }
+ //Set title and headpage
+ $title=$this->_getTitle($id,$headpage,$hns);
+ if (!$hns && $opts['nopg']) $hns=$id.":".$conf['start'];
+ } else {
+ //Nopg.Dont show pages
+ if ($opts['nopg']) return false;
+ $return=true;
+ //Nons.Set all pages at first level
+ if ($opts['nons']) $lvl=1;
+ //don't add
+ if (substr($file,-4) != '.txt') return false;
+ //check hiddens and acl
+ if (isHiddenPage($id) || auth_quickaclcheck($id) < AUTH_READ) return false;
+ //Skip files in plugin conf
+ if (!empty($skip_file) &&
+ preg_match($skip_file, $id))
+ return false;
+ //Skip headpages to hide
+ if (!$opts['nons'] &&
+ !empty($headpage) &&
+ $opts['hide_headpage']) {
+ if ($id==$conf['start']) return false;
+ $ahp=explode(",",$headpage);
+ foreach ($ahp as $hp) {
+ switch ($hp) {
+ case ":inside:":
+ if (noNS($id)==noNS(getNS($id))) return false;
+ break;
+ case ":same:":
+ if (@is_dir(dirname(wikiFN($id))."/".utf8_encodeFN(noNS($id)))) return false;
+ break;
+ //it' s an inside start
+ case ":start:":
+ if (noNS($id)==$conf['start']) return false;
+ break;
+ default:
+ if (noNS($id)==cleanID($hp)) return false;
+ }
+ }
+ }
+ //Set title
+ if (!$conf['useheading'] || !$title=p_get_first_heading($id,FALSE)) $title=noNS($id);
+ $title=htmlspecialchars($title,ENT_QUOTES);
+ }
+
+ $item = array( 'id' => $id,
+ 'type' => $type,
+ 'level' => $lvl,
+ 'open' => $isopen,
+ 'title' => $title,
+ 'hns' => $hns,
+ 'file' => $file,
+ 'return' => $return
+ );
+ $item['sort'] = $this->_setorder($item);
+ $data[] = $item;
+ return $return;
+ }
+
+
+ /**
+ * Index item formatter
+ *
+ * User function for html_buildlist()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * modified by Samuele Tognini <samuele@netsons.org>
+ */
+ function _html_list_index($item){
+ $ret = '';
+ //namespace
+ if($item['type']=='d' || $item['type']=='l'){
+ $link=$item['id'];
+ $more='idx='.$item['id'];
+ //namespace link
+ if ($item['hns']) {
+ $link=$item['hns'];
+ $tagid="indexmenu_idx_head";
+ $more='';
+ } else {
+ //namespace with headpage
+ $tagid="indexmenu_idx";
+ if ($item['open']) $tagid.=' open';
+ }
+ $ret .= '<a href="'.wl($link,$more).'" class="'.$tagid.'">';
+ $ret .= $item['title'];
+ $ret .= '</a>';
+ }else{
+ //page link
+ $ret .= html_wikilink(':'.$item['id']);
+ }
+ return $ret;
+ }
+
+
+ /**
+ * recurse direcory
+ *
+ * This function recurses into a given base directory
+ * and calls the supplied function for each file and directory
+ *
+ * @param array ref $data The results of the search are stored here
+ * @param string $base Where to start the search
+ * @param callback $func Callback (function name or arayy with object,method)
+ * @param string $dir Current directory beyond $base
+ * @param int $lvl Recursion Level
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * modified by Samuele Tognini <samuele@netsons.org>
+ */
+ function _search(&$data,$base,$func,$opts,$dir='',$lvl=1){
+ $dirs = array();
+ $files = array();
+ $files_tmp=array();
+ $dirs_tmp=array();
+
+ //read in directories and files
+ $dh = @opendir($base.'/'.$dir);
+ if(!$dh) return;
+ while(($file = readdir($dh)) !== false){
+ //skip hidden files and upper dirs
+ if(preg_match('/^[\._]/',$file)) continue;
+ if(is_dir($base.'/'.$dir.'/'.$file)){
+ $dirs[] = $dir.'/'.$file;
+ continue;
+ }
+ $files[] = $dir.'/'.$file;
+ }
+ closedir($dh);
+ //Sort dirs
+ if ($this->nsort) {
+ foreach($dirs as $dir){
+ search_callback($func,$dirs_tmp,$base,$dir,'d',$lvl,$opts);
+ }
+ usort($dirs_tmp,array($this,"_cmp"));
+ foreach ($dirs_tmp as $dir) {
+ $data[]=$dir;
+ if ($dir['return']) $this->_search($data,$base,$func,$opts,$dir['file'],$lvl+1);
+ }
+ } else {
+ sort($dirs);
+ foreach($dirs as $dir){
+ if (search_callback($func,$data,$base,$dir,'d',$lvl,$opts)) $this->_search($data,$base,$func,$opts,$dir,$lvl+1);
+ }
+ }
+ //Sort files
+ foreach($files as $file){
+ search_callback($func,$files_tmp,$base,$file,'f',$lvl,$opts);
+ }
+ usort($files_tmp,array($this,"_cmp"));
+ if (empty($dirs) && empty($files_tmp)) {
+ $v=end($data);
+ if (!$v['hns']) array_pop($data);
+ } else {
+ $data=array_merge($data,$files_tmp);
+ }
+ return true;
+ }
+
+ /**
+ * Sort nodes
+ *
+ */
+ function _cmp($a, $b) {
+ if ($this->rsort) {
+ return strnatcasecmp($b['sort'], $a['sort']);
+ } else {
+ return strnatcasecmp($a['sort'], $b['sort']);
+ }
+ }
+
+
+ /**
+ * Add sort information to item.
+ *
+ * @author Samuele Tognini <samuele@netsons.org>
+ */
+ function _setorder($item) {
+ $sort=false;
+ if ($item['type']=='d') {
+ //Fake order info when nsort is not requested
+ ($this->nsort) ? $page=$item['hns'] : $sort=0;
+ }
+ if ($item['type']=='f') $page=$item['id'];
+ if ($page) {
+ if ($this->msort) $sort=p_get_metadata($page,$this->msort);
+ if (!$sort && $this->sort) {
+ switch ($this->sort) {
+ case 't':
+ $sort=$item['title'];
+ break;
+ case 'd':
+ $sort=@filectime(wikiFN($page));
+ break;
+ }
+ }
+ }
+ if ($sort===false) $sort=noNS($item['id']);
+ return $sort;
+ }
+} //Indexmenu class end
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php
new file mode 100644
index 000000000..962f7efca
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * Info Indexmenu tag: Tag a page with a sort number.
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Samuele Tognini <samuele@netsons.org>
+ *
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_indexmenu_tag extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Samuele Tognini',
+ 'email' => 'samuele@netsons.org',
+ 'date' => rtrim(io_readFile(DOKU_PLUGIN.'indexmenu/VERSION.txt')),
+ 'name' => 'Indexmenu tag',
+ 'desc' => 'Indexmenu tag plugin.',
+ 'url' => 'http://wiki.splitbrain.org/plugin:indexmenu'
+ );
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 139;
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('{{indexmenu_n>.+?}}',$mode,'plugin_indexmenu_tag');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $match = substr($match,14,-2);
+ return array($match);
+ }
+
+ /**
+ * Render output
+ */
+ function render($mode, &$renderer, $data) {
+ if (is_numeric($data[0])) $renderer->meta['indexmenu_n'] = $data[0];;
+ }
+} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php
new file mode 100644
index 000000000..dc0a7d2fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php
@@ -0,0 +1,259 @@
+<?php
+/**
+ * Info Plugin: Displays information about various DokuWiki internals
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_info extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Andreas Gohr',
+ 'email' => 'andi@splitbrain.org',
+ 'date' => '2008-09-12',
+ 'name' => 'Info Plugin',
+ 'desc' => 'Displays information about various DokuWiki internals',
+ 'url' => 'http://dokuwiki.org/plugin:info',
+ );
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * What about paragraphs?
+ */
+ function getPType(){
+ return 'block';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 155;
+ }
+
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~INFO:\w+~~',$mode,'plugin_info');
+ }
+
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $match = substr($match,7,-2); //strip ~~INFO: from start and ~~ from end
+ return array(strtolower($match));
+ }
+
+ /**
+ * Create output
+ */
+ function render($format, &$renderer, $data) {
+ if($format == 'xhtml'){
+ //handle various info stuff
+ switch ($data[0]){
+ case 'version':
+ $renderer->doc .= getVersion();
+ break;
+ case 'syntaxmodes':
+ $renderer->doc .= $this->_syntaxmodes_xhtml();
+ break;
+ case 'syntaxtypes':
+ $renderer->doc .= $this->_syntaxtypes_xhtml();
+ break;
+ case 'syntaxplugins':
+ $this->_plugins_xhtml('syntax', $renderer);
+ break;
+ case 'adminplugins':
+ $this->_plugins_xhtml('admin', $renderer);
+ break;
+ case 'actionplugins':
+ $this->_plugins_xhtml('action', $renderer);
+ break;
+ case 'rendererplugins':
+ $this->_plugins_xhtml('renderer', $renderer);
+ break;
+ case 'helperplugins':
+ $this->_plugins_xhtml('helper', $renderer);
+ break;
+ case 'helpermethods':
+ $this->_helpermethods_xhtml($renderer);
+ break;
+ default:
+ $renderer->doc .= "no info about ".htmlspecialchars($data[0]);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * list all installed plugins
+ *
+ * uses some of the original renderer methods
+ */
+ function _plugins_xhtml($type, &$renderer){
+ global $lang;
+ $renderer->doc .= '<ul>';
+
+ $plugins = plugin_list($type);
+ $plginfo = array();
+
+ // remove subparts
+ foreach($plugins as $p){
+ if (!$po =& plugin_load($type,$p)) continue;
+ list($name,$part) = explode('_',$p,2);
+ $plginfo[$name] = $po->getInfo();
+ }
+
+ // list them
+ foreach($plginfo as $info){
+ $renderer->doc .= '<li><div class="li">';
+ $renderer->externallink($info['url'],$info['name']);
+ $renderer->doc .= ' ';
+ $renderer->doc .= '<em>'.$info['date'].'</em>';
+ $renderer->doc .= ' ';
+ $renderer->doc .= $lang['by'];
+ $renderer->doc .= ' ';
+ $renderer->emaillink($info['email'],$info['author']);
+ $renderer->doc .= '<br />';
+ $renderer->doc .= strtr(hsc($info['desc']),array("\n"=>"<br />"));
+ $renderer->doc .= '</div></li>';
+ unset($po);
+ }
+
+ $renderer->doc .= '</ul>';
+ }
+
+ /**
+ * list all installed plugins
+ *
+ * uses some of the original renderer methods
+ */
+ function _helpermethods_xhtml(&$renderer){
+ global $lang;
+
+ $plugins = plugin_list('helper');
+ foreach($plugins as $p){
+ if (!$po =& plugin_load('helper',$p)) continue;
+
+ if (!method_exists($po, 'getMethods')) continue;
+ $methods = $po->getMethods();
+ $info = $po->getInfo();
+
+ $hid = $this->_addToTOC($info['name'], 2, $renderer);
+ $doc = '<h2><a name="'.$hid.'" id="'.$hid.'">'.hsc($info['name']).'</a></h2>';
+ $doc .= '<div class="level2">';
+ $doc .= '<p>'.strtr(hsc($info['desc']), array("\n"=>"<br />")).'</p>';
+ $doc .= '<pre class="code">$'.$p." =& plugin_load('helper', '".$p."');</pre>";
+ $doc .= '</div>';
+ foreach ($methods as $method){
+ $title = '$'.$p.'->'.$method['name'].'()';
+ $hid = $this->_addToTOC($title, 3, $renderer);
+ $doc .= '<h3><a name="'.$hid.'" id="'.$hid.'">'.hsc($title).'</a></h3>';
+ $doc .= '<div class="level3">';
+ $doc .= '<table class="inline"><tbody>';
+ $doc .= '<tr><th>Description</th><td colspan="2">'.$method['desc'].
+ '</td></tr>';
+ if ($method['params']){
+ $c = count($method['params']);
+ $doc .= '<tr><th rowspan="'.$c.'">Parameters</th><td>';
+ $params = array();
+ foreach ($method['params'] as $desc => $type){
+ $params[] = hsc($desc).'</td><td>'.hsc($type);
+ }
+ $doc .= join($params, '</td></tr><tr><td>').'</td></tr>';
+ }
+ if ($method['return']){
+ $doc .= '<tr><th>Return value</th><td>'.hsc(key($method['return'])).
+ '</td><td>'.hsc(current($method['return'])).'</td></tr>';
+ }
+ $doc .= '</tbody></table>';
+ $doc .= '</div>';
+ }
+ unset($po);
+
+ $renderer->doc .= $doc;
+ }
+ }
+
+ /**
+ * lists all known syntax types and their registered modes
+ */
+ function _syntaxtypes_xhtml(){
+ global $PARSER_MODES;
+ $doc = '';
+
+ $doc .= '<table class="inline"><tbody>';
+ foreach($PARSER_MODES as $mode => $modes){
+ $doc .= '<tr>';
+ $doc .= '<td class="leftalign">';
+ $doc .= $mode;
+ $doc .= '</td>';
+ $doc .= '<td class="leftalign">';
+ $doc .= join(', ',$modes);
+ $doc .= '</td>';
+ $doc .= '</tr>';
+ }
+ $doc .= '</tbody></table>';
+ return $doc;
+ }
+
+ /**
+ * lists all known syntax modes and their sorting value
+ */
+ function _syntaxmodes_xhtml(){
+ $modes = p_get_parsermodes();
+ $doc = '';
+
+ foreach ($modes as $mode){
+ $doc .= $mode['mode'].' ('.$mode['sort'].'), ';
+ }
+ return $doc;
+ }
+
+ /**
+ * Adds a TOC item
+ */
+ function _addToTOC($text, $level, &$renderer){
+ global $conf;
+
+ if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])){
+ $hid = $renderer->_headerToLink($text, 'true');
+ $renderer->toc[] = array(
+ 'hid' => $hid,
+ 'title' => $text,
+ 'type' => 'ul',
+ 'level' => $level - $conf['toptoclevel'] + 1
+ );
+ }
+ return $hid;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png
new file mode 100644
index 000000000..dc8c8a457
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png
new file mode 100644
index 000000000..df1e0a926
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png
new file mode 100644
index 000000000..d853518de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png
new file mode 100644
index 000000000..f5c931603
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png
new file mode 100644
index 000000000..f127e91c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png
new file mode 100644
index 000000000..892c83393
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png
new file mode 100644
index 000000000..2000f2085
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png
new file mode 100644
index 000000000..3c8a37df5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt
new file mode 100644
index 000000000..5226345f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt
@@ -0,0 +1,8 @@
+# General Plugin Info do not edit
+
+author Olivier Cortès / Eric Hameleers / Christopher Smith / Aurélien Bompard
+email olive@deep-ocean.net
+date 2009-06-15
+name Note Plugin
+desc Add Note/Important/Tip/Warning Capability (DIV+CSS box)
+url http://www.dokuwiki.org/plugin:note
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js
new file mode 100644
index 000000000..c21120727
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js
@@ -0,0 +1,36 @@
+/* Add Note buttons to the toolbar */
+/* from http://wiki.splitbrain.org/wiki:tips:toolbarbutton */
+
+/* Disabled because this does not allow to select a text and turn it into a note like the type:format does
+var notes_arr = new Array(); // key = insertion string , value = icon filename.
+notes_arr['<note></note>\\n']='tb_note.png';
+notes_arr['<note tip></note>\\n']='tb_tip.png';
+notes_arr['<note important></note>\\n']='tb_important.png';
+notes_arr['<note warning></note>\\n']='tb_warning.png';
+
+toolbar[toolbar.length] = {"type":"picker",
+ "title":"Notes",
+ "icon":"../../plugins/note/images/tb_note.png",
+ "key":"",
+ "list": notes_arr,
+ "icobase":"../plugins/note/images"};
+*/
+
+if(toolbar){
+ toolbar[toolbar.length] = {"type":"format", "title":"note", "key":"",
+ "icon":"../../plugins/note/images/tb_note.png",
+ "open":"<note>", "close":"</note>"
+ };
+ toolbar[toolbar.length] = {"type":"format", "title":"tip", "key":"",
+ "icon":"../../plugins/note/images/tb_tip.png",
+ "open":"<note tip>", "close":"</note>"
+ };
+ toolbar[toolbar.length] = {"type":"format", "title":"important", "key":"",
+ "icon":"../../plugins/note/images/tb_important.png",
+ "open":"<note important>", "close":"</note>"
+ };
+ toolbar[toolbar.length] = {"type":"format", "title":"warning", "key":"",
+ "icon":"../../plugins/note/images/tb_warning.png",
+ "open":"<note warning>", "close":"</note>"
+ };
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css
new file mode 100644
index 000000000..8b97dea06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css
@@ -0,0 +1,41 @@
+.noteclassic, .noteimportant, .notewarning, .notetip {
+ margin: 2em;
+ margin-left: auto;
+ margin-right: auto;
+ width: 70% !important;
+ min-height: 40px;
+ clear: both;
+ text-align: justify;
+ vertical-align: middle;
+ border-collapse: collapse;
+ padding: 15px 20px 15px 80px;
+ background-position: 20px 50%;
+ background-repeat: no-repeat;
+ -moz-border-radius: 20px;
+ -khtml-border-radius: 20px;
+ border-radius: 20px;
+}
+
+.noteclassic {
+ /*border: 1px solid #99D;*/
+ background-color: #eef;
+ background-image: url(images/note.png);
+}
+
+.noteimportant {
+ /*border: 1px solid #ff0;*/
+ background-color: #ffc;
+ background-image: url(images/important.png);
+}
+
+.notewarning {
+ /*border: 1px solid #d99;*/
+ background-color: #fdd;
+ background-image: url(images/warning.png);
+}
+
+.notetip {
+ /*border: 1px solid #9d9;*/
+ background-color: #dfd;
+ background-image: url(images/tip.png);
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php
new file mode 100644
index 000000000..368d0d412
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php
@@ -0,0 +1,191 @@
+<?php
+/**
+ * Add Note capability to dokuwiki
+ *
+ * <note>This is note</note>
+ * <note classic>This is note</note>
+ * <note important>This is an important note</note>
+ * <note warning>This is a big warning</note>
+ * <note tip>This is a tip</note>
+ *
+ * by Olivier Cortès <olive@deep-ocean.net>
+ * under the terms of the GNU GPL v2.
+ *
+ * Originaly derived from the work of :
+ * Stephane Chamberland <stephane.chamberland@ec.gc.ca> (Side Notes PlugIn)
+ * Carl-Christian Salvesen <calle@ioslo.net> (Graphviz plugin)
+ *
+ * Contributions by Eric Hameleers <alien [at] slackware [dot] com> :
+ * use <div> instead of <table>,
+ * contain the images and stylesheet inside the plugin,
+ * permit nesting of notes,
+ *
+ * Contributed by Christopher Smith <chris [at] jalakai [dot] co [dot] uk>
+ * fix some parsing problems and a security hole.
+ * make note types case independent
+ * simplify code reading
+ * modernise the plugin for changes/fixes/improvements to the underlying Dokuwiki plugin class,
+ * improve efficiency.
+ *
+ * Contributed by Aurélien Bompard <aurelien [at] bompard [dot] org>
+ * support for the ODT output format.
+ *
+ * @license GNU_GPL_v2
+ * @author Olivier Cortes <olive@deep-ocean.net>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+
+class syntax_plugin_note extends DokuWiki_Syntax_Plugin {
+
+ var $notes = array(
+ 'noteimportant' => array('important', 'importante'),
+ 'notewarning' => array('warning','bloquante','critique'),
+ 'notetip' => array('tip','tuyau','idée'),
+ 'noteclassic' => array('','classic','classique')
+ );
+
+ var $default = 'noteclassic';
+
+ function getInfo(){
+ return confToHash(dirname(__FILE__).'/info.txt');
+ }
+
+
+ function getType(){ return 'container'; }
+ function getPType(){ return 'normal'; }
+ function getAllowedTypes() {
+ return array('container','substition','protected','disabled','formatting','paragraphs');
+ }
+ function getSort(){ return 195; }
+
+ // override default accepts() method to allow nesting
+ // - ie, to get the plugin accepts its own entry syntax
+ function accepts($mode) {
+ if ($mode == substr(get_class($this), 7)) return true;
+ return parent::accepts($mode);
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('<note.*?>(?=.*?</note>)',$mode,'plugin_note');
+ }
+ function postConnect() {
+ $this->Lexer->addExitPattern('</note>','plugin_note');
+ }
+
+ function handle($match, $state, $pos, &$handler){
+
+ switch ($state) {
+
+ case DOKU_LEXER_ENTER :
+ $note = strtolower(trim(substr($match,5,-1)));
+
+ foreach( $this->notes as $class => $names ) {
+ if (in_array($note, $names))
+ return array($state, $class);
+ }
+
+ return array($state, $this->default);
+
+ case DOKU_LEXER_UNMATCHED :
+ return array($state, $match);
+
+ default:
+ return array($state);
+ }
+ }
+
+ function render($mode, &$renderer, $indata) {
+
+ if($mode == 'xhtml'){
+
+ list($state, $data) = $indata;
+
+ switch ($state) {
+ case DOKU_LEXER_ENTER :
+ $renderer->doc .= '<p><div class="'.$data.'">';
+ break;
+
+ case DOKU_LEXER_UNMATCHED :
+ $renderer->doc .= $renderer->_xmlEntities($data);
+ break;
+
+ case DOKU_LEXER_EXIT :
+ $renderer->doc .= "\n</div></p>";
+ break;
+ }
+ return true;
+
+ } elseif ($mode == 'odt'){
+
+ list($state, $data) = $indata;
+
+ switch ($state) {
+ case DOKU_LEXER_ENTER :
+ $type = substr($data, 4);
+ if ($type == "classic") {
+ $type = "note"; // the icon for classic notes is named note.png
+ }
+ $colors = array("note"=>"#eeffff", "warning"=>"#ffdddd", "important"=>"#ffffcc", "tip"=>"#ddffdd");
+ $renderer->autostyles["pluginnote"] = '
+ <style:style style:name="pluginnote" style:family="table">
+ <style:table-properties style:width="15cm" table:align="center" style:shadow="#808080 0.18cm 0.18cm"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote.A"] = '
+ <style:style style:name="pluginnote.A" style:family="table-column">
+ <style:table-column-properties style:column-width="1.5cm"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote.B"] = '
+ <style:style style:name="pluginnote.B" style:family="table-column">
+ <style:table-column-properties style:column-width="13.5cm"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote".$type.".A1"] = '
+ <style:style style:name="pluginnote'.$type.'.A1" style:family="table-cell">
+ <style:table-cell-properties style:vertical-align="middle" fo:padding="0.1cm" fo:border-left="0.002cm solid #000000" fo:border-right="none" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:background-color="'.$colors[$type].'"/>
+ </style:style>';
+ $renderer->autostyles["pluginnote".$type.".B1"] = '
+ <style:style style:name="pluginnote'.$type.'.B1" style:family="table-cell">
+ <style:table-cell-properties style:vertical-align="middle" fo:padding="0.3cm" fo:border-left="none" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:background-color="'.$colors[$type].'"/>
+ </style:style>';
+ // Content
+ $renderer->p_close();
+ $renderer->doc .= '<table:table table:name="" table:style-name="pluginnote">';
+ $renderer->doc .= '<table:table-column table:style-name="pluginnote.A"/>';
+ $renderer->doc .= '<table:table-column table:style-name="pluginnote.B"/>';
+ $renderer->doc .= '<table:table-row>';
+ $renderer->doc .= '<table:table-cell table:style-name="pluginnote'.$type.'.A1" office:value-type="string">';
+ // Don't use p_open, as it's not the same style-name
+ $renderer->doc .= '<text:p text:style-name="Table_20_Contents">';
+ $src = DOKU_PLUGIN."note/images/".$type.".png";
+ $renderer->_odtAddImage($src);
+ $renderer->doc .= '</text:p>';
+ $renderer->doc .= '</table:table-cell>';
+ $renderer->doc .= '<table:table-cell table:style-name="pluginnote'.$type.'.B1" office:value-type="string">';
+ $renderer->p_open();
+ break;
+
+ case DOKU_LEXER_UNMATCHED :
+ $renderer->cdata($data);
+ break;
+
+ case DOKU_LEXER_EXIT :
+ $renderer->p_close();
+ $renderer->doc .= '</table:table-cell>';
+ $renderer->doc .= '</table:table-row>';
+ $renderer->doc .= '</table:table>';
+ $renderer->p_open();
+ break;
+ }
+ return true;
+ }
+
+ // unsupported $mode
+ return false;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt
new file mode 100644
index 000000000..4c9835a1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt
@@ -0,0 +1,255 @@
+2010-07-17 Aurélien Bompard <aurelien@bompard.org>
+
+ * action.php, syntax.php: Better handling of the cache system The
+ template used for the ODT export is now added in the page's
+ dependencies, so the cached ODT page will not be used if the
+ template has been updated.
+
+2010-05-24 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/ru/lang.php, lang/ru/settings.php: Add translation by Yuri
+ Timofeev
+
+2010-05-12 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/zh/lang.php, lang/zh/settings.php: Add Chinese translation by
+ lainme
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, ChangeLog.txt: Add .txt to the ChangeLog for our
+ Windows-based friends
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: Cleanup changelog
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Fix a small syntax error
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Better tag replacement in the template ODT file
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, info.txt: Prepare for a new release
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Add options to cut off a part of the ODT template
+ In an ODT file, the only styles that will be saved are the styles
+ which are applied to some content in the document. If you want to
+ create an empty ODT document for this plugin, and still want to
+ define styles which will be applied to the wiki content, you have to
+ write some dummy text, apply the styles to this text, and surround
+ the text in the DOKUWIKI-ODT-CUT-START and DOKUWIKI-ODT-CUT-STOP
+ tags. This way, the styles will be retained in the ODT file, but the
+ dummy text will be removed on export.
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Better tag replacement in the template ODT file
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Better tag replacement in the template ODT file
+
+2010-04-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: replace with unicode entities instead of HTML (not
+ always defined)
+
+2009-08-15 Martin Braure de Calignon <braure@free.fr>
+
+ * syntax.php: Fix button link to export old revisions
+
+2009-07-02 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: prepare for release
+
+2009-07-02 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, renderer.php: Fixes from Andy Webber (thanks !)
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, renderer.php: use $['savedir'] as suggested on the wiki
+ page
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: release
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: add patch by Korsani
+
+2009-06-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: typo
+
+2009-02-11 Aurélien Bompard <aurelien@bompard.org>
+
+ * info.txt, renderer.php: Make the renderer class a singleton Only
+ make a single instance of the renderer. This is needed for Dokuwiki
+ >= rc2009-02-06. For details, see:
+ http://bugs.splitbrain.org/index.php?do=details&task_id=1598
+
+2009-02-09 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Revert "Create zipper on-demand" This reverts
+ commit 5e746e84b62fb0fdcd5607d7f9abc636a7710e2e.
+
+2009-02-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: Create zipper on-demand
+
+2009-01-15 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: prepare for new release
+
+2009-01-15 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, renderer.php: don't compress mimetype declaration
+
+2008-11-11 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: more safeguards. wiki:syntax now passes validators
+
+2008-09-28 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/ja/lang.php, lang/ja/settings.php: Add Japanese translation
+ from Ikuo Obataya. Thanks !
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog, info.txt: new release
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: update ChangeLog
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/es/lang.php, lang/es/settings.php: complete spanish
+ translation
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php, syntax.php: leftover from history cleaning
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/es/lang.php: spanish translation, 1st part
+
+2008-05-06 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: add changelog in changelog...
+
+2008-05-05 Aurélien Bompard <aurelien@bompard.org>
+
+ * ChangeLog: add ChangeLog (thanks to http://josefsson.org/git2cl/)
+
+
+2008-05-05 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, info.txt: update metadata for new release
+
+2008-05-05 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: use new headers/caching system if available
+
+2008-04-22 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: choose appropriate ZipLib file
+
+2008-04-21 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: dokuwiki's future temp dir is data/tmp, not
+ data/temp
+
+2008-04-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, TODO, TODO.txt, info.txt: ready for release
+
+2008-04-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * lang/it/lang.php: add italian translation
+
+2008-04-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, TODO, info.txt: get ready for release
+
+2008-03-08 Aurélien Bompard <aurelien@bompard.org>
+
+ * .gitignore: ignore Makefile
+
+2008-03-06 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: fix quotes
+
+2008-03-06 root <root@shiva.c-s.fr>
+
+ * renderer.php: extract template before checking for the styles
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * syntax.php: leftover
+
+2008-03-05 root <root@shiva.c-s.fr>
+
+ * syntax.php: Revert "leftover" This reverts commit
+ 93d7c67d705f3a6a5847554b15384dc5a1a50de6.
+
+2008-03-05 root <root@shiva.c-s.fr>
+
+ * renderer.php: fix <code> tag in list items
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * syntax.php: leftover
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: cleanup for patch
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt, info.txt: even better doc
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt: better doc
+
+2008-03-04 Aurélien Bompard <aurelien@bompard.org>
+
+ * README.txt: doc
+
+2008-03-03 Aurélien Bompard <aurelien@bompard.org>
+
+ * renderer.php: spit into the fields plugin
+
+2008-03-01 Aurélien Bompard <aurelien@bompard.org>
+
+ * TODO, renderer.php, styles.xml, syntax.php: closer to upstream
+
+2008-03-01 Aurélien Bompard <aurelien@bompard.org>
+
+ * TODO, admin.php, conf/default.php, conf/metadata.php,
+ lang/de/lang.php, lang/en/lang.php, lang/en/settings.php,
+ lang/fr/lang.php, lang/fr/settings.php, renderer.php: niiice :)
+
+2008-02-29 Aurélien Bompard <aurelien@bompard.org>
+
+ * admin.php, lang/en/lang.php: bla
+
+2008-02-28 Aurélien Bompard <aurelien@bompard.org>
+
+ * admin.php, lang/en/lang.php: niice
+
+2008-05-07 Aurélien Bompard <aurelien@bompard.org>
+
+ * initial commit from existing repo
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt
new file mode 100644
index 000000000..3d4c97f8d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt
@@ -0,0 +1,16 @@
+====== Dokuwiki ODT plugin ======
+
+This plugin lets you export wiki pages to ODT, the OpenDocument Text format as
+used by many applications, included OpenOffice.org
+
+Further documentation on the OpenDocument format is available here :
+http://en.wikipedia.org/wiki/OpenDocument
+
+
+===== Official documentation =====
+
+For installation and usage documentation, please refer to
+http://www.dokuwiki.org/plugin:odt
+
+This version of the plugin works with Dokuwiki 2007-06-26 and later.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php
new file mode 100644
index 000000000..20e74a0e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php
@@ -0,0 +1,391 @@
+<?php
+
+/**
+ * @author bouchon
+ * @link http://dev.maxg.info
+ * @link http://forum.maxg.info
+ *
+ * Modified for Dokuwiki
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+class ZipLib
+{
+
+ var $datasec, $ctrl_dir = array();
+ var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
+ var $old_offset = 0; var $dirs = Array(".");
+
+ function get_List($zip_name)
+ {
+ $zip = @fopen($zip_name, 'rb');
+ if(!$zip) return(0);
+ $centd = $this->ReadCentralDir($zip,$zip_name);
+
+ @rewind($zip);
+ @fseek($zip, $centd['offset']);
+
+ for ($i=0; $i<$centd['entries']; $i++)
+ {
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i;$info['filename'] = $header['filename'];
+ $info['stored_filename'] = $header['stored_filename'];
+ $info['size'] = $header['size'];$info['compressed_size']=$header['compressed_size'];
+ $info['crc'] = strtoupper(dechex( $header['crc'] ));
+ $info['mtime'] = $header['mtime']; $info['comment'] = $header['comment'];
+ $info['folder'] = ($header['external']==0x41FF0010||$header['external']==16)?1:0;
+ $info['index'] = $header['index'];$info['status'] = $header['status'];
+ $ret[]=$info; unset($header);
+ }
+ return $ret;
+ }
+
+ function Add($files,$compact)
+ {
+ if(!is_array($files[0])) $files=Array($files);
+
+ for($i=0;$files[$i];$i++){
+ $fn = $files[$i];
+ if(!in_Array(dirname($fn[0]),$this->dirs))
+ $this->add_Dir(dirname($fn[0]));
+ if(basename($fn[0]))
+ $ret[basename($fn[0])]=$this->add_File($fn[1],$fn[0],$compact);
+ }
+ return $ret;
+ }
+
+ /**
+ * Zips recursively the $folder directory, from the $basedir directory
+ */
+ function Compress($folder, $basedir=null, $parent=null)
+ {
+ $full_path = $basedir."/".$parent.$folder;
+ $zip_path = $parent.$folder;
+ if ($zip_path) {
+ $zip_path .= "/";
+ $this->add_dir($zip_path);
+ }
+ $dir = opendir($full_path);
+ while (false !== ($filename = readdir($dir))) {
+ if ($filename != "." && $filename != "..") {
+ if (is_dir($full_path."/".$filename)) {
+ $this->Compress($filename, $basedir, $zip_path);
+ } else {
+ $content = join('', file($full_path.'/'.$filename));
+ $this->add_File($content, $zip_path.$filename);
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the Zip file
+ */
+ function get_file()
+ {
+ $data = implode('', $this -> datasec);
+ $ctrldir = implode('', $this -> ctrl_dir);
+
+ return $data . $ctrldir . $this -> eof_ctrl_dir .
+ pack('v', sizeof($this -> ctrl_dir)).pack('v', sizeof($this -> ctrl_dir)).
+ pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00";
+ }
+
+ function add_dir($name)
+ {
+ $name = str_replace("\\", "/", $name);
+ $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+
+ $fr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
+ $fr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0);
+ $this -> datasec[] = $fr;
+
+ $new_offset = strlen(implode("", $this->datasec));
+
+ $cdrec = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
+ $cdrec .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
+ $cdrec .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 );
+ $ext = "\xff\xff\xff\xff";
+ $cdrec .= pack("V", 16 ).pack("V", $this -> old_offset ).$name;
+
+ $this -> ctrl_dir[] = $cdrec;
+ $this -> old_offset = $new_offset;
+ $this -> dirs[] = $name;
+ }
+
+ /**
+ * Add a file named $name from a string $data
+ */
+ function add_File($data, $name, $compact = 1)
+ {
+ $name = str_replace('\\', '/', $name);
+ $dtime = dechex($this->DosTime());
+
+ $hexdtime = '\x' . $dtime[6] . $dtime[7].'\x'.$dtime[4] . $dtime[5]
+ . '\x' . $dtime[2] . $dtime[3].'\x'.$dtime[0].$dtime[1];
+ eval('$hexdtime = "' . $hexdtime . '";');
+
+ if($compact)
+ $fr = "\x50\x4b\x03\x04\x14\x00\x00\x00\x08\x00".$hexdtime;
+ else $fr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00".$hexdtime;
+ $unc_len = strlen($data); $crc = crc32($data);
+
+ if($compact){
+ $zdata = gzcompress($data); $c_len = strlen($zdata);
+ $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
+ }else{
+ $zdata = $data;
+ }
+ $c_len=strlen($zdata);
+ $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+ $fr .= pack('v', strlen($name)).pack('v', 0).$name.$zdata;
+
+ $fr .= pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+
+ $this -> datasec[] = $fr;
+ $new_offset = strlen(implode('', $this->datasec));
+ if($compact)
+ $cdrec = "\x50\x4b\x01\x02\x00\x00\x14\x00\x00\x00\x08\x00";
+ else $cdrec = "\x50\x4b\x01\x02\x14\x00\x0a\x00\x00\x00\x00\x00";
+ $cdrec .= $hexdtime.pack('V', $crc).pack('V', $c_len).pack('V', $unc_len);
+ $cdrec .= pack('v', strlen($name) ).pack('v', 0 ).pack('v', 0 );
+ $cdrec .= pack('v', 0 ).pack('v', 0 ).pack('V', 32 );
+ $cdrec .= pack('V', $this -> old_offset );
+
+ $this -> old_offset = $new_offset;
+ $cdrec .= $name;
+ $this -> ctrl_dir[] = $cdrec;
+ return true;
+ }
+
+ function DosTime() {
+ $timearray = getdate();
+ if ($timearray['year'] < 1980) {
+ $timearray['year'] = 1980; $timearray['mon'] = 1;
+ $timearray['mday'] = 1; $timearray['hours'] = 0;
+ $timearray['minutes'] = 0; $timearray['seconds'] = 0;
+ }
+ return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) |
+ ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
+ }
+
+ /**
+ * Extract a zip file $zn to the $to directory
+ */
+ function Extract ( $zn, $to, $index = Array(-1) )
+ {
+ if(!@is_dir($to)) @mkdir($to,0777);
+ $ok = 0; $zip = @fopen($zn,'rb');
+ if(!$zip) return(-1);
+ $cdir = $this->ReadCentralDir($zip,$zn);
+ $pos_entry = $cdir['offset'];
+
+ if(!is_array($index)){ $index = array($index); }
+ for($i=0; isset($index[$i]);$i++){
+ if(intval($index[$i])!=$index[$i]||$index[$i]>$cdir['entries'])
+ return(-1);
+ }
+
+ for ($i=0; $i<$cdir['entries']; $i++)
+ {
+ @fseek($zip, $pos_entry);
+ $header = $this->ReadCentralFileHeaders($zip);
+ $header['index'] = $i; $pos_entry = ftell($zip);
+ @rewind($zip); fseek($zip, $header['offset']);
+ if(in_array("-1",$index)||in_array($i,$index))
+ $stat[$header['filename']]=$this->ExtractFile($header, $to, $zip);
+
+ }
+ fclose($zip);
+ return $stat;
+ }
+
+ function ReadFileHeader($zip, $header)
+ {
+ $binary_data = fread($zip, 30);
+ $data = unpack('vchk/vid/vversion/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len', $binary_data);
+
+ $header['filename'] = fread($zip, $data['filename_len']);
+ if ($data['extra_len'] != 0) {
+ $header['extra'] = fread($zip, $data['extra_len']);
+ } else { $header['extra'] = ''; }
+
+ $header['compression'] = $data['compression'];
+ $header['flag'] = $data['flag'];
+ $header['mdate'] = $data['mdate'];$header['mtime'] = $data['mtime'];
+ if (($header['flag'] & 8) != 8) { // Purpose bit flag bit 3 not set, overwrite the central header values
+ foreach (array('size','compressed_size','crc') as $hd) {
+ $header[$hd] = $data[$hd];
+ }
+ }
+
+ if ($header['mdate'] && $header['mtime']){
+ $hour=($header['mtime']&0xF800)>>11;$minute=($header['mtime']&0x07E0)>>5;
+ $seconde=($header['mtime']&0x001F)*2;$year=(($header['mdate']&0xFE00)>>9)+1980;
+ $month=($header['mdate']&0x01E0)>>5;$day=$header['mdate']&0x001F;
+ $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
+ }else{$header['mtime'] = time();}
+
+ $header['stored_filename'] = $header['filename'];
+ $header['status'] = "ok";
+ return $header;
+ }
+
+ function ReadCentralFileHeaders($zip){
+ $binary_data = fread($zip, 46);
+ $header = unpack('vchkid/vid/vversion/vversion_extracted/vflag/vcompression/vmtime/vmdate/Vcrc/Vcompressed_size/Vsize/vfilename_len/vextra_len/vcomment_len/vdisk/vinternal/Vexternal/Voffset', $binary_data);
+
+ if ($header['filename_len'] != 0)
+ $header['filename'] = fread($zip,$header['filename_len']);
+ else $header['filename'] = '';
+
+ if ($header['extra_len'] != 0)
+ $header['extra'] = fread($zip, $header['extra_len']);
+ else $header['extra'] = '';
+
+ if ($header['comment_len'] != 0)
+ $header['comment'] = fread($zip, $header['comment_len']);
+ else $header['comment'] = '';
+
+ if ($header['mdate'] && $header['mtime'])
+ {
+ $hour = ($header['mtime'] & 0xF800) >> 11;
+ $minute = ($header['mtime'] & 0x07E0) >> 5;
+ $seconde = ($header['mtime'] & 0x001F)*2;
+ $year = (($header['mdate'] & 0xFE00) >> 9) + 1980;
+ $month = ($header['mdate'] & 0x01E0) >> 5;
+ $day = $header['mdate'] & 0x001F;
+ $header['mtime'] = mktime($hour, $minute, $seconde, $month, $day, $year);
+ } else {
+ $header['mtime'] = time();
+ }
+ $header['stored_filename'] = $header['filename'];
+ $header['status'] = 'ok';
+ if (substr($header['filename'], -1) == '/')
+ $header['external'] = 0x41FF0010;
+ return $header;
+ }
+
+ function ReadCentralDir($zip,$zip_name)
+ {
+ $size = filesize($zip_name);
+ if ($size < 277) $maximum_size = $size;
+ else $maximum_size=277;
+
+ @fseek($zip, $size-$maximum_size);
+ $pos = ftell($zip); $bytes = 0x00000000;
+
+ while ($pos < $size)
+ {
+ $byte = @fread($zip, 1);
+ $bytes=(($bytes << 8) & 0xFFFFFFFF) | Ord($byte);
+ if ($bytes == 0x504b0506){ $pos++; break; } $pos++;
+ }
+
+ $data=unpack('vdisk/vdisk_start/vdisk_entries/ventries/Vsize/Voffset/vcomment_size',
+ fread($zip, 18));
+
+ if ($data['comment_size'] != 0)
+ $centd['comment'] = fread($zip, $data['comment_size']);
+ else $centd['comment'] = ''; $centd['entries'] = $data['entries'];
+ $centd['disk_entries'] = $data['disk_entries'];
+ $centd['offset'] = $data['offset'];$centd['disk_start'] = $data['disk_start'];
+ $centd['size'] = $data['size']; $centd['disk'] = $data['disk'];
+ return $centd;
+ }
+
+ function ExtractFile($header,$to,$zip)
+ {
+ $header = $this->readfileheader($zip, $header);
+
+ if(substr($to,-1)!="/") $to.="/";
+ if(substr($header['filename'],-1)=="/")
+ {
+// @mkdir($to.$header['filename']); --CS
+ $this->_mkdir($to.$header['filename']); //-- CS
+ return +2;
+ }
+
+// $pth = explode("/",dirname($header['filename']));
+// for($i=0,$tmp="";isset($pth[$i]);$i++){
+// if(!$pth[$i]) continue;
+// if(!is_dir($to.$tmp.$pth[$i])) @mkdir($to.$pth[$i],0777);
+// $tmp.=$pth[$i]."/";
+// }
+ if (!$this->_mkdir($to.dirname($header['filename']))) return (-1); //--CS
+
+ if (!array_key_exists("external", $header) || (!($header['external']==0x41FF0010)&&!($header['external']==16)))
+ {
+ if ($header['compression']==0)
+ {
+ $fp = @fopen($to.$header['filename'], 'wb');
+ if(!$fp) return(-1);
+ $size = $header['compressed_size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = fread($zip, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+ fclose($fp);
+ touch($to.$header['filename'], $header['mtime']);
+
+ }else{
+ if (!is_dir(dirname($to.$header['filename']))) $this->_mkdir(dirname($to.$header['filename'])); //-CS
+ $fp = fopen($to.$header['filename'].'.gz','wb');
+ if(!$fp) return(-1);
+ $binary_data = pack('va1a1Va1a1', 0x8b1f, Chr($header['compression']),
+ Chr(0x00), time(), Chr(0x00), Chr(3));
+
+ fwrite($fp, $binary_data, 10);
+ $size = $header['compressed_size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 1024 ? $size : 1024);
+ $buffer = fread($zip, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+
+ $binary_data = pack('VV', $header['crc'], $header['size']);
+ fwrite($fp, $binary_data,8); fclose($fp);
+
+ $gzp = @gzopen($to.$header['filename'].'.gz','rb');
+ if(!$gzp){
+ @gzclose($gzp); @unlink($to.$header['filename']);
+ die("Archive is compressed whereas ZLIB is not enabled.");
+ }
+ $fp = @fopen($to.$header['filename'],'wb');
+ if(!$fp) return(-1);
+ $size = $header['size'];
+
+ while ($size != 0)
+ {
+ $read_size = ($size < 2048 ? $size : 2048);
+ $buffer = gzread($gzp, $read_size);
+ $binary_data = pack('a'.$read_size, $buffer);
+ @fwrite($fp, $binary_data, $read_size);
+ $size -= $read_size;
+ }
+ fclose($fp); gzclose($gzp);
+
+ touch($to.$header['filename'], $header['mtime']);
+ @unlink($to.$header['filename'].'.gz');
+
+ }}
+ return true;
+ }
+
+ //--CS start
+ // centralize mkdir calls and use dokuwiki io functions
+ function _mkdir($d) {
+ return io_mkdir_p($d); // --AB
+ //return ap_mkdir($d);
+ }
+ //--CS end
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php
new file mode 100644
index 000000000..0ca861518
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * ODT Plugin: Exports to ODT
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'action.php');
+
+/**
+ * Add the template as a page dependency for the caching system
+ */
+class action_plugin_odt extends DokuWiki_Action_Plugin {
+
+ function register($controller) {
+ $controller->register_hook('PARSER_CACHE_USE','BEFORE', $this, 'handle_cache_prepare');
+ }
+
+ function handle_cache_prepare(&$event, $param) {
+ global $conf, $ID;
+ $cache =& $event->data;
+ // only the ODT rendering mode needs caching tweaks
+ if ($cache->mode != "odt") return;
+ $odt_meta = p_get_metadata($ID, 'relation odt');
+ $template_name = $odt_meta["template"];
+ if (!$template_name) {
+ return;
+ }
+ $template_path = $conf['mediadir'].'/'.$this->getConf("tpl_dir")."/".$template_name;
+ if (file_exists($template_path)) {
+ $cache->depends['files'][] = $template_path;
+ }
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php
new file mode 100644
index 000000000..d69966874
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+
+// Directory of the templates in the media manager
+$conf['tpl_dir'] = 'odt';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php
new file mode 100644
index 000000000..7614f3c73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Options for the odt plugin
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+$meta['tpl_dir'] = array('string');
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt
new file mode 100644
index 000000000..3006078be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt
@@ -0,0 +1,8 @@
+# General Plugin Info do not edit
+
+author Andreas Gohr, Aurelien Bompard
+email andi@splitbrain.org, aurelien@bompard.org
+date 2010-07-24
+name Open Document Plugin
+desc Export the current Wiki page to a OpenOffice ODT file
+url http://www.dokuwiki.org/plugin:odt
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php
new file mode 100644
index 000000000..607ff99e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php
@@ -0,0 +1,9 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Ins Open-Document-Format exportieren';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php
new file mode 100644
index 000000000..4a6d50985
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Export page to Open Document format';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'WARNING : the ODT template "%s" was not found in the templates directory "%s". Using the default template.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php
new file mode 100644
index 000000000..f86a80426
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Rodolfo Pilas <rodolfo@pilas.net>
+ */
+
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Exportar p&aacute;gina en formato Open Document';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'ATENCION : la plantilla ODT "%s" no ha sido encontrada en el directorio de plantillas "%s". Se usa la plantilla por defecto.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php
new file mode 100644
index 000000000..4290573ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'Exporter la page au format Open Document';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'ATTENTION: le modèle ODT "%s" n\'a pas été trouvé dans le répertoire de modèles "%s". L\'export est réalisé avec le modèle par défaut.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php
new file mode 100644
index 000000000..45e171be5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Options for odt plugin
+ * @author Diego Pierotto <ita.translations@tiscali.it>
+ */
+
+$lang['view'] = 'Esporta pagina in formato Open Document';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php
new file mode 100644
index 000000000..6df1be2d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'ã“ã®ãƒšãƒ¼ã‚¸ã‚’Open Documentフォーマットã§ä¿å­˜';
+
+// template not found in the directory
+$lang['tpl_not_found'] = '注æ„:ODTテンプレート "%s" ã¯ãƒ†ãƒ³ãƒ—レートディレクトリ "%s"ã®ä¸­ã«ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚デフォルトã®ãƒ†ãƒ³ãƒ—レートを使用ã—ã¾ã™ã€‚';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php
new file mode 100644
index 000000000..9eaaf2c43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = 'ЭкÑпорт Ñтраницы в формат Open Document';
+
+// template not found in the directory
+$lang['tpl_not_found'] = 'Ð’ÐИМÐÐИЕ: ODT шаблон "%s" не найден в каталоге Ð´Ð»Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð² "%s". ИÑпользуетÑÑ ÑˆÐ°Ð±Ð»Ð¾Ð½ по умолчанию.';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php
new file mode 100644
index 000000000..808b248e0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php
@@ -0,0 +1,12 @@
+<?php
+
+// settings must be present and set appropriately for the language
+$lang['encoding'] = 'utf-8';
+$lang['direction'] = 'ltr';
+
+// export button
+$lang['view'] = '将页é¢å¯¼å‡ºä¸ºå¼€æ”¾æ–‡æ¡£æ ¼å¼';
+
+// template not found in the directory
+$lang['tpl_not_found'] = '警告:模æ¿ç›®å½•ä¸­æ²¡æœ‰æ‰¾åˆ°ODTæ¨¡æ¿ â€œ%sâ€ã€‚;
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png
new file mode 100644
index 000000000..4ea3cec8f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php
new file mode 100644
index 000000000..5525e4926
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php
@@ -0,0 +1,1232 @@
+<?php
+/**
+ * ODT Plugin: Exports to ODT
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+require_once DOKU_INC.'inc/parser/renderer.php';
+
+// ZipLib.class.php
+$dw_version = preg_replace('/[^\d]/', '', getversion());
+if (version_compare($dw_version, "20070626") and
+ version_compare(PHP_VERSION,'5.0.0','>')) {
+ // If strictly newer than 2007-06-26 and use PHP5, fixes to ZipLib are
+ // included in Dokuwiki's ZipLib
+ require_once DOKU_INC.'inc/ZipLib.class.php';
+} else { // for DW up to 2007-06-26, we need the patched version
+ require_once 'ZipLib.class.php';
+}
+
+/**
+ * The Renderer
+ */
+class renderer_plugin_odt extends Doku_Renderer {
+ var $ZIP = null;
+ var $meta;
+ var $store = '';
+ var $footnotes = array();
+ var $manifest = array();
+ var $headers = array();
+ var $template = "";
+ var $fields = array();
+ var $in_list_item = false;
+ var $in_paragraph = false;
+ // Automatic styles. Will always be added to content.xml and styles.xml
+ var $autostyles = array(
+ "pm1"=>'
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.1cm" style:distance-after-sep="0.1cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>',
+ "sub"=>'
+ <style:style style:name="sub" style:family="text">
+ <style:text-properties style:text-position="-33% 80%"/>
+ </style:style>',
+ "sup"=>'
+ <style:style style:name="sup" style:family="text">
+ <style:text-properties style:text-position="33% 80%"/>
+ </style:style>',
+ "del"=>'
+ <style:style style:name="del" style:family="text">
+ <style:text-properties style:text-line-through-style="solid"/>
+ </style:style>',
+ "underline"=>'
+ <style:style style:name="underline" style:family="text">
+ <style:text-properties style:text-underline-style="solid"
+ style:text-underline-width="auto" style:text-underline-color="font-color"/>
+ </style:style>',
+ "media"=>'
+ <style:style style:name="media" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
+ style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="baseline" style:horizontal-pos="left"
+ style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "medialeft"=>'
+ <style:style style:name="medialeft" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
+ style:wrap-contour="false" style:horizontal-pos="left" style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "mediaright"=>'
+ <style:style style:name="mediaright" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit"
+ style:wrap-contour="false" style:horizontal-pos="right" style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "mediacenter"=>'
+ <style:style style:name="mediacenter" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:run-through="foreground" style:wrap="none" style:horizontal-pos="center"
+ style:horizontal-rel="paragraph"/>
+ </style:style>',
+ "tablealigncenter"=>'
+ <style:style style:name="tablealigncenter" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="center"/>
+ </style:style>',
+ "tablealignright"=>'
+ <style:style style:name="tablealignright" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="end"/>
+ </style:style>',
+ "tablealignleft"=>'
+ <style:style style:name="tablealignleft" style:family="paragraph" style:parent-style-name="Table_20_Contents">
+ <style:paragraph-properties fo:text-align="left"/>
+ </style:style>',
+ "tableheader"=>'
+ <style:style style:name="tableheader" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.05cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
+ </style:style>',
+ "tablecell"=>'
+ <style:style style:name="tablecell" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.05cm" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000"/>
+ </style:style>',
+ "legendcenter"=>'
+ <style:style style:name="legendcenter" style:family="paragraph" style:parent-style-name="Illustration">
+ <style:paragraph-properties fo:text-align="center"/>
+ </style:style>',
+ );
+ // Regular styles. May not be present if in template mode, in which case they will be added to styles.xml
+ var $styles = array(
+ "Source_20_Text"=>'
+ <style:style style:name="Source_20_Text" style:display-name="Source Text" style:family="text">
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" style:font-name-asian="Bitstream Vera Sans Mono" style:font-name-complex="Bitstream Vera Sans Mono"/>
+ </style:style>',
+ "Preformatted_20_Text"=>'
+ <style:style style:name="Preformatted_20_Text" style:display-name="Preformatted Text" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm"/>
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" style:font-name-asian="Bitstream Vera Sans Mono" style:font-name-complex="Bitstream Vera Sans Mono"/>
+ </style:style>',
+ "Horizontal_20_Line"=>'
+ <style:style style:name="Horizontal_20_Line" style:display-name="Horizontal Line" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.5cm" style:border-line-width-bottom="0.002cm 0.035cm 0.002cm" fo:padding="0cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.04cm double #808080" text:number-lines="false" text:line-number="0" style:join-border="false"/>
+ <style:text-properties fo:font-size="6pt" style:font-size-asian="6pt" style:font-size-complex="6pt"/>
+ </style:style>',
+ "Footnote"=>'
+ <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-left="0.5cm" fo:margin-right="0cm" fo:text-indent="-0.5cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>',
+ "Emphasis"=>'
+ <style:style style:name="Emphasis" style:family="text">
+ <style:text-properties fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/>
+ </style:style>',
+ "Strong_20_Emphasis"=>'
+ <style:style style:name="Strong_20_Emphasis" style:display-name="Strong Emphasis" style:family="text">
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>',
+ );
+ // Font definitions. May not be present if in template mode, in which case they will be added to styles.xml
+ var $fonts = array(
+ "StarSymbol"=>'<style:font-face style:name="StarSymbol" svg:font-family="StarSymbol"/>', // for bullets
+ "Bitstream Vera Sans Mono"=>'<style:font-face style:name="Bitstream Vera Sans Mono" svg:font-family="\'Bitstream Vera Sans Mono\'" style:font-family-generic="modern" style:font-pitch="fixed"/>', // for source code
+ );
+
+ /**
+ * Return version info
+ */
+ function getInfo(){
+ return confToHash(dirname(__FILE__).'/info.txt');
+ }
+
+ /**
+ * Returns the format produced by this renderer.
+ */
+ function getFormat(){
+ return "odt";
+ }
+
+ /**
+ * Do not make multiple instances of this class
+ */
+ function isSingleton(){
+ return true;
+ }
+
+
+ /**
+ * Initialize the rendering
+ */
+ function document_start() {
+ global $ID;
+
+ // If older or equal to 2007-06-26, we need to disable caching
+ $dw_version = preg_replace('/[^\d]/', '', getversion());
+ if (version_compare($dw_version, "20070626", "<=")) {
+ $this->info["cache"] = false;
+ }
+
+ // prepare the zipper
+ $this->ZIP = new ZipLib();
+
+ // prepare meta data
+ $this->meta = array(
+ 'meta:generator' => 'DokuWiki '.getversion(),
+ 'meta:initial-creator' => 'Generated',
+ 'meta:creation-date' => date('Y-m-d\\TH::i:s', null), //FIXME
+ 'dc:creator' => 'Generated',
+ 'dc:date' => date('Y-m-d\\TH::i:s', null),
+ 'dc:language' => 'en-US',
+ 'meta:editing-cycles' => '1',
+ 'meta:editing-duration' => 'PT0S',
+ );
+
+ // send the content type header, new method after 2007-06-26 (handles caching)
+ $output_filename = str_replace(':','-',$ID).".odt";
+ if (version_compare($dw_version, "20070626")) {
+ // store the content type headers in metadata
+ $headers = array(
+ 'Content-Type' => 'application/vnd.oasis.opendocument.text',
+ 'Content-Disposition' => 'attachment; filename="'.$output_filename.'";',
+ );
+ p_set_metadata($ID,array('format' => array('odt' => $headers) ));
+ } else { // older method
+ header('Content-Type: application/vnd.oasis.opendocument.text');
+ header('Content-Disposition: attachment; filename="'.$output_filename.'";');
+ }
+ }
+
+ /**
+ * Prepare meta.xml
+ */
+ function _odtMeta(){
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<office:document-meta ';
+ $value .= 'xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" ';
+ $value .= 'xmlns:xlink="http://www.w3.org/1999/xlink" ';
+ $value .= 'xmlns:dc="http://purl.org/dc/elements/1.1/" ';
+ $value .= 'xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" ';
+ $value .= 'office:version="1.0">';
+ $value .= '<office:meta>';
+ # FIXME
+ # foreach($meta as $meta_key => $meta_value)
+ # $value .= '<' . $meta_key . '>' . ODUtils::encode($meta_value) . '</' . $meta_key . '>';
+ $value .= '</office:meta>';
+ $value .= '</office:document-meta>';
+ $this->ZIP->add_File($value,'meta.xml');
+ }
+
+ /**
+ * Prepare manifest.xml
+ */
+ function _odtManifest(){
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">';
+ $value .= '<manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.text" manifest:full-path="/"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="settings.xml"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="meta.xml"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>';
+ $value .= '<manifest:file-entry manifest:media-type="text/xml" manifest:full-path="styles.xml"/>';
+
+ foreach($this->manifest as $path => $type){
+ $value .= '<manifest:file-entry manifest:media-type="'.$this->_xmlEntities($type).
+ '" manifest:full-path="'.$this->_xmlEntities($path).'"/>';
+ }
+
+ $value .= '</manifest:manifest>';
+ $this->ZIP->add_File($value,'META-INF/manifest.xml');
+ }
+
+ /**
+ * Prepare settings.xml
+ */
+ function _odtSettings(){
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<office:document-settings xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" office:version="1.0"><office:settings><config:config-item-set config:name="dummy-settings"><config:config-item config:name="MakeValidatorHappy" config:type="boolean">true</config:config-item></config:config-item-set></office:settings></office:document-settings>';
+ $this->ZIP->add_File($value,'settings.xml');
+ }
+
+
+
+
+ /**
+ * Closes the document
+ */
+ function document_end(){
+ global $conf;
+ if ($this->template) { // template chosen
+ if (file_exists($conf['mediadir'].'/'.$this->getConf("tpl_dir")."/".$this->template)) { //template found
+ $this->document_end_template();
+ } else { // template chosen but not found : warn the user and use the default template
+ $this->doc = '<text:p text:style-name="Text_20_body"><text:span text:style-name="Strong_20_Emphasis">'
+ .$this->_xmlEntities( sprintf($this->getLang('tpl_not_found'),$this->template,$this->getConf("tpl_dir")) )
+ .'</text:span></text:p>'.$this->doc;
+ $this->document_end_scratch();
+ }
+ } else {
+ $this->document_end_scratch();
+ }
+ $this->doc = $this->ZIP->get_file();
+ }
+
+
+ /**
+ * Closes the document when not using a template
+ */
+ function document_end_scratch(){
+ $autostyles = $this->_odtAutoStyles();
+ $userfields = $this->_odtUserFields();
+
+ // add defaults
+ $this->ZIP->add_File('application/vnd.oasis.opendocument.text', 'mimetype', 0);
+
+ $this->_odtMeta();
+ $this->_odtSettings();
+
+ $value = '<' . '?xml version="1.0" encoding="UTF-8"?' . ">\n";
+ $value .= '<office:document-content ';
+ $value .= 'xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" ';
+ $value .= 'xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" ';
+ $value .= 'xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" ';
+ $value .= 'xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" ';
+ $value .= 'xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" ';
+ $value .= 'xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" ';
+ $value .= 'xmlns:xlink="http://www.w3.org/1999/xlink" ';
+ $value .= 'xmlns:dc="http://purl.org/dc/elements/1.1/" ';
+ $value .= 'xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" ';
+ $value .= 'xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" ';
+ $value .= 'xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" ';
+ $value .= 'xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" ';
+ $value .= 'xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" ';
+ $value .= 'xmlns:math="http://www.w3.org/1998/Math/MathML" ';
+ $value .= 'xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" ';
+ $value .= 'xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" ';
+ $value .= 'xmlns:dom="http://www.w3.org/2001/xml-events" ';
+ $value .= 'xmlns:xforms="http://www.w3.org/2002/xforms" ';
+ $value .= 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ';
+ $value .= 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ';
+ $value .= 'office:version="1.0">';
+ $value .= '<office:scripts/>';
+ $value .= '<office:font-face-decls>';
+ $value .= '<style:font-face style:name="Tahoma1" svg:font-family="Tahoma"/>';
+ $value .= '<style:font-face style:name="Lucida Sans Unicode" svg:font-family="&apos;Lucida Sans Unicode&apos;" style:font-pitch="variable"/>';
+ $value .= '<style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-pitch="variable"/>';
+ $value .= '<style:font-face style:name="Times New Roman" svg:font-family="&apos;Times New Roman&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>';
+ $value .= '</office:font-face-decls>';
+ $value .= $autostyles;
+ $value .= '<office:body>';
+ $value .= '<office:text>';
+ $value .= '<office:forms form:automatic-focus="false" form:apply-design-mode="false"/>';
+ $value .= '<text:sequence-decls>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Table"/>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Text"/>';
+ $value .= '<text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>';
+ $value .= '</text:sequence-decls>';
+ $value .= $userfields;
+ $value .= $this->doc;
+ $value .= '</office:text>';
+ $value .= '</office:body>';
+ $value .= '</office:document-content>';
+
+ $this->ZIP->add_File($value,'content.xml');
+
+ $value = io_readFile(DOKU_PLUGIN.'odt/styles.xml');
+ $value = str_replace('<office:automatic-styles/>', $autostyles, $value);
+ $this->ZIP->add_File($value,'styles.xml');
+
+ // build final manifest
+ $this->_odtManifest();
+ }
+
+ /**
+ * Closes the document using a template
+ */
+ function document_end_template(){
+ global $conf, $ID; // for the temp dir
+
+ // Temp dir
+ if (is_dir($conf['tmpdir'])) {
+ $temp_dir = $conf['tmpdir']; // version > 20070626
+ } else {
+ $temp_dir = $conf['savedir'].'/cache/tmp'; // version <= 20070626
+ }
+ $this->temp_dir = $temp_dir."/odt/".str_replace(':','-',$ID);
+ if (is_dir($this->temp_dir)) { $this->io_rm_rf($this->temp_dir); }
+ io_mkdir_p($this->temp_dir);
+
+ // Extract template
+ $template_path = $conf['mediadir'].'/'.$this->getConf("tpl_dir")."/".$this->template;
+ $this->ZIP->Extract($template_path, $this->temp_dir);
+
+ // Prepare content
+ $autostyles = $this->_odtAutoStyles();
+ $missingstyles = $this->_odtStyles();
+ $missingfonts = $this->_odtFonts();
+ $userfields = $this->_odtUserFields();
+
+ // Insert content
+ $old_content = io_readFile($this->temp_dir.'/content.xml');
+ if (strpos($old_content, 'DOKUWIKI-ODT-INSERT') !== FALSE) { // Replace the mark
+ $this->_odtReplaceInFile('/<text:p[^>]*>DOKUWIKI-ODT-INSERT<\/text:p>/',
+ $this->doc, $this->temp_dir.'/content.xml', true);
+ } else { // Append to the template
+ $this->_odtReplaceInFile('</office:text>', $this->doc.'</office:text>', $this->temp_dir.'/content.xml');
+ }
+
+ // Cut off unwanted content
+ if (strpos($old_content, 'DOKUWIKI-ODT-CUT-START') !== FALSE
+ && strpos($old_content, 'DOKUWIKI-ODT-CUT-STOP') !== FALSE) {
+ $this->_odtReplaceInFile('/DOKUWIKI-ODT-CUT-START.*DOKUWIKI-ODT-CUT-STOP/',
+ '', $this->temp_dir.'/content.xml', true);
+ }
+
+ // Insert userfields
+ if (strpos($old_content, "text:user-field-decls") === FALSE) { // no existing userfields
+ $this->_odtReplaceInFile('/<office:text([^>]*)>/U', '<office:text\1>'.$userfields, $this->temp_dir.'/content.xml', TRUE);
+ } else {
+ $this->_odtReplaceInFile('</text:user-field-decls>', substr($userfields,23), $this->temp_dir.'/content.xml');
+ }
+
+ // Insert styles & fonts
+ $this->_odtReplaceInFile('</office:automatic-styles>', substr($autostyles, 25), $this->temp_dir.'/content.xml');
+ $this->_odtReplaceInFile('</office:automatic-styles>', substr($autostyles, 25), $this->temp_dir.'/styles.xml');
+ $this->_odtReplaceInFile('</office:styles>', $missingstyles.'</office:styles>', $this->temp_dir.'/styles.xml');
+ $this->_odtReplaceInFile('</office:font-face-decls>', $missingfonts.'</office:font-face-decls>', $this->temp_dir.'/styles.xml');
+
+ // Build the Zip
+ $this->ZIP->Compress(null, $this->temp_dir, null);
+ $this->io_rm_rf($this->temp_dir);
+ }
+
+ function _odtReplaceInFile($from, $to, $file, $regexp=FALSE) {
+ $value = io_readFile($file);
+ if ($regexp) {
+ $value = preg_replace($from, $to, $value);
+ } else {
+ $value = str_replace($from, $to, $value);
+ }
+ $file_f = fopen($file, 'w');
+ fwrite($file_f, $value);
+ fclose($file_f);
+ }
+
+ /**
+ * Recursively deletes a directory (equivalent to the "rm -rf" command)
+ * Found in comments on http://www.php.net/rmdir
+ */
+ function io_rm_rf($f) {
+ if (is_dir($f)) {
+ foreach(glob($f.'/*') as $sf) {
+ if (is_dir($sf) && !is_link($sf)) {
+ $this->io_rm_rf($sf);
+ } else {
+ unlink($sf);
+ }
+ }
+ } else { // avoid nasty consequenses if something wrong is given
+ die("Error: not a directory - $f");
+ }
+ rmdir($f);
+ }
+
+ // not supported - use OpenOffice builtin tools instead!
+ function render_TOC() { return ''; }
+
+ function toc_additem($id, $text, $level) {}
+
+ function _odtAutoStyles() {
+ $value = '<office:automatic-styles>';
+ foreach ($this->autostyles as $stylename=>$stylexml) {
+ $value .= $stylexml;
+ }
+ $value .= '</office:automatic-styles>';
+ return $value;
+ }
+
+ function _odtUserFields() {
+ $value = '<text:user-field-decls>';
+ foreach ($this->fields as $fname=>$fvalue) {
+ $value .= '<text:user-field-decl office:value-type="string" text:name="'.$fname.'" office:string-value="'.$fvalue.'"/>';
+ }
+ $value .= '</text:user-field-decls>';
+ return $value;
+ }
+
+ /* Add missing styles in the template */
+ function _odtStyles() {
+ $value = '';
+ $existing_styles = io_readFile($this->temp_dir.'/styles.xml');
+ foreach ($this->styles as $stylename=>$stylexml) {
+ if (strpos($existing_styles, 'style:name="'.$stylename.'"') === FALSE) {
+ $value .= $stylexml;
+ }
+ }
+ // Loop on bullet/numerotation styles
+ if (strpos($existing_styles, 'style:name="List_20_1"') === FALSE) {
+ $value .= '<text:list-style style:name="List_20_1" style:display-name="List 1">';
+ for ($i=1;$i<=10;$i++) {
+ $value .= '<text:list-level-style-bullet text:level="'.$i.'" text:style-name="Numbering_20_Symbols" text:bullet-char="•">
+ <style:list-level-properties text:space-before="'.(0.4*($i-1)).'cm" text:min-label-width="0.4cm"/>
+ <style:text-properties style:font-name="StarSymbol"/>
+ </text:list-level-style-bullet>';
+ }
+ $value .= '</text:list-style>';
+ }
+ if (strpos($existing_styles, 'style:name="Numbering_20_1"') === FALSE) {
+ $value .= '<text:list-style style:name="Numbering_20_1" style:display-name="Numbering 1">';
+ for ($i=1;$i<=10;$i++) {
+ $value .= '<text:list-level-style-number text:level="'.$i.'" text:style-name="Numbering_20_Symbols" style:num-suffix="." style:num-format="1">
+ <style:list-level-properties text:space-before="'.(0.5*($i-1)).'cm" text:min-label-width="0.5cm"/>
+ </text:list-level-style-number>';
+ }
+ $value .= '</text:list-style>';
+ }
+ return $value;
+ }
+
+ /* Add missing fonts in the template */
+ function _odtFonts() {
+ $value = '';
+ $existing_styles = io_readFile($this->temp_dir.'/styles.xml');
+ foreach ($this->fonts as $name=>$xml) {
+ if (strpos($existing_styles, 'style:name="'.$name.'"') === FALSE) {
+ $value .= $xml;
+ }
+ }
+ return $value;
+ }
+
+ function cdata($text) {
+ $this->doc .= $this->_xmlEntities($text);
+ }
+
+ function p_open($style='Text_20_body'){
+ if (!$this->in_paragraph) { // opening a paragraph inside another paragraph is illegal
+ $this->in_paragraph = true;
+ $this->doc .= '<text:p text:style-name="'.$style.'">';
+ }
+ }
+
+ function p_close(){
+ if ($this->in_paragraph) {
+ $this->in_paragraph = false;
+ $this->doc .= '</text:p>';
+ }
+ }
+
+ function header($text, $level, $pos){
+ $hid = $this->_headerToLink($text,true);
+ $this->doc .= '<text:h text:style-name="Heading_20_'.$level.'" text:outline-level="'.$level.'">';
+ $this->doc .= '<text:bookmark-start text:name="'.$hid.'"/>';
+ $this->doc .= $this->_xmlEntities($text);
+ $this->doc .= '<text:bookmark-end text:name="'.$hid.'"/>';
+ $this->doc .= '</text:h>';
+ }
+
+ function hr() {
+ $this->doc .= '<text:p text:style-name="Horizontal_20_Line"/>';
+ }
+
+ function linebreak() {
+ $this->doc .= '<text:line-break/>';
+ }
+
+ function strong_open() {
+ $this->doc .= '<text:span text:style-name="Strong_20_Emphasis">';
+ }
+
+ function strong_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function emphasis_open() {
+ $this->doc .= '<text:span text:style-name="Emphasis">';
+ }
+
+ function emphasis_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function underline_open() {
+ $this->doc .= '<text:span text:style-name="underline">';
+ }
+
+ function underline_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function monospace_open() {
+ $this->doc .= '<text:span text:style-name="Source_20_Text">';
+ }
+
+ function monospace_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function subscript_open() {
+ $this->doc .= '<text:span text:style-name="sub">';
+ }
+
+ function subscript_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function superscript_open() {
+ $this->doc .= '<text:span text:style-name="sup">';
+ }
+
+ function superscript_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ function deleted_open() {
+ $this->doc .= '<text:span text:style-name="del">';
+ }
+
+ function deleted_close() {
+ $this->doc .= '</text:span>';
+ }
+
+ /*
+ * Tables
+ */
+ function table_open($maxcols = NULL, $numrows = NULL){
+ $this->doc .= '<table:table>';
+ for($i=0; $i<$maxcols; $i++){
+ $this->doc .= '<table:table-column />';
+ }
+ }
+
+ function table_close(){
+ $this->doc .= '</table:table>';
+ }
+
+ function tablerow_open(){
+ $this->doc .= '<table:table-row>';
+ }
+
+ function tablerow_close(){
+ $this->doc .= '</table:table-row>';
+ }
+
+ function tableheader_open($colspan = 1, $align = "left"){
+ $this->doc .= '<table:table-cell office:value-type="string" table:style-name="tableheader" ';
+ //$this->doc .= ' table:style-name="tablealign'.$align.'"';
+ if ( $colspan > 1 ) {
+ $this->doc .= ' table:number-columns-spanned="'.$colspan.'"';
+ }
+ $this->doc .= '>';
+ $this->p_open('Table_20_Heading');
+ }
+
+ function tableheader_close(){
+ $this->p_close();
+ $this->doc .= '</table:table-cell>';
+ }
+
+ function tablecell_open($colspan = 1, $align = "left"){
+ $this->doc .= '<table:table-cell office:value-type="string" table:style-name="tablecell" ';
+ if ( $colspan > 1 ) {
+ $this->doc .= ' table:number-columns-spanned="'.$colspan.'"';
+ }
+ $this->doc .= '>';
+ if (!$align) $align = "left";
+ $style = "tablealign".$align;
+ $this->p_open($style);
+ }
+
+ function tablecell_close(){
+ $this->p_close();
+ $this->doc .= '</table:table-cell>';
+ }
+
+ /**
+ * Callback for footnote start syntax
+ *
+ * All following content will go to the footnote instead of
+ * the document. To achieve this the previous rendered content
+ * is moved to $store and $doc is cleared
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function footnote_open() {
+
+ // move current content to store and record footnote
+ $this->store = $this->doc;
+ $this->doc = '';
+ }
+
+ /**
+ * Callback for footnote end syntax
+ *
+ * All rendered content is moved to the $footnotes array and the old
+ * content is restored from $store again
+ *
+ * @author Andreas Gohr
+ */
+ function footnote_close() {
+ // recover footnote into the stack and restore old content
+ $footnote = $this->doc;
+ $this->doc = $this->store;
+ $this->store = '';
+
+ // check to see if this footnote has been seen before
+ $i = array_search($footnote, $this->footnotes);
+
+ if ($i === false) {
+ $i = count($this->footnotes);
+ // its a new footnote, add it to the $footnotes array
+ $this->footnotes[$i] = $footnote;
+
+ $this->doc .= '<text:note text:id="ftn'.$i.'" text:note-class="footnote">';
+ $this->doc .= '<text:note-citation>'.($i+1).'</text:note-citation>';
+ $this->doc .= '<text:note-body>';
+ $this->doc .= '<text:p text:style-name="Footnote">';
+ $this->doc .= $footnote;
+ $this->doc .= '</text:p>';
+ $this->doc .= '</text:note-body>';
+ $this->doc .= '</text:note>';
+
+ } else {
+ // seen this one before - just reference it FIXME: style isn't correct yet
+ $this->doc .= '<text:note-ref text:note-class="footnote" text:ref-name="ftn'.$i.'">'.($i+1).'</text:note-ref>';
+ }
+ }
+
+ function listu_open() {
+ $this->p_close();
+ $this->doc .= '<text:list text:style-name="List_20_1">';
+ }
+
+ function listu_close() {
+ $this->doc .= '</text:list>';
+ }
+
+ function listo_open() {
+ $this->p_close();
+ $this->doc .= '<text:list text:style-name="Numbering_20_1">';
+ }
+
+ function listo_close() {
+ $this->doc .= '</text:list>';
+ }
+
+ function listitem_open($level) {
+ $this->in_list_item = true;
+ $this->doc .= '<text:list-item>';
+ }
+
+ function listitem_close() {
+ $this->in_list_item = false;
+ $this->doc .= '</text:list-item>';
+ }
+
+ function listcontent_open() {
+ $this->doc .= '<text:p text:style-name="Text_20_body">';
+ }
+
+ function listcontent_close() {
+ $this->doc .= '</text:p>';
+ }
+
+ function unformatted($text) {
+ $this->doc .= $this->_xmlEntities($text);
+ }
+
+ function acronym($acronym) {
+ $this->doc .= $this->_xmlEntities($acronym);
+ }
+
+ function smiley($smiley) {
+ if ( array_key_exists($smiley, $this->smileys) ) {
+ $src = DOKU_INC."lib/images/smileys/".$this->smileys[$smiley];
+ $this->_odtAddImage($src);
+ } else {
+ $this->doc .= $this->_xmlEntities($smiley);
+ }
+ }
+
+ function entity($entity) {
+ # UTF-8 entity decoding is broken in PHP <5
+ if (version_compare(phpversion(), "5.0.0") and array_key_exists($entity, $this->entities) ) {
+ # decoding may fail for missing Multibyte-Support in entity_decode
+ $dec = @html_entity_decode($this->entities[$entity],ENT_NOQUOTES,'UTF-8');
+ if($dec){
+ $this->doc .= $this->_xmlEntities($dec);
+ }else{
+ $this->doc .= $this->_xmlEntities($entity);
+ }
+ } else {
+ $this->doc .= $this->_xmlEntities($entity);
+ }
+ }
+
+ function multiplyentity($x, $y) {
+ $this->doc .= $x.'×'.$y;
+ }
+
+ function singlequoteopening() {
+ global $lang;
+ $this->doc .= $lang['singlequoteopening'];
+ }
+
+ function singlequoteclosing() {
+ global $lang;
+ $this->doc .= $lang['singlequoteclosing'];
+ }
+
+ function apostrophe() {
+ global $lang;
+ $this->doc .= $lang['apostrophe'];
+ }
+
+ function doublequoteopening() {
+ global $lang;
+ $this->doc .= $lang['doublequoteopening'];
+ }
+
+ function doublequoteclosing() {
+ global $lang;
+ $this->doc .= $lang['doublequoteclosing'];
+ }
+
+ function php($text, $wrapper='dummy') {
+ $this->monospace_open();
+ $this->doc .= $this->_xmlEntities($text);
+ $this->monospace_close();
+ }
+ function phpblock($text) {
+ $this->file($text);
+ }
+
+ function html($text, $wrapper='dummy') {
+ $this->monospace_open();
+ $this->doc .= $this->_xmlEntities($text);
+ $this->monospace_close();
+ }
+ function htmlblock($text) {
+ $this->file($text);
+ }
+
+ /**
+ * static call back to replace spaces
+ */
+ function _preserveSpace($matches){
+ $spaces = $matches[1];
+ $len = strlen($spaces);
+ return '<text:s text:c="'.$len.'"/>';
+ }
+
+ function preformatted($text) {
+ $text = $this->_xmlEntities($text);
+ if (strpos($text, "\n") !== FALSE and strpos($text, "\n") == 0) {
+ // text starts with a newline, remove it
+ $text = substr($text,1);
+ }
+ $text = str_replace("\n",'<text:line-break/>',$text);
+ $text = preg_replace_callback('/( +)/',array('renderer_plugin_odt','_preserveSpace'),$text);
+
+ if ($this->in_list_item) { // if we're in a list item, we must close the <text:p> tag
+ $this->doc .= '</text:p>';
+ $this->doc .= '<text:p text:style-name="Preformatted_20_Text">';
+ $this->doc .= $text;
+ $this->doc .= '</text:p>';
+ $this->doc .= '<text:p>';
+ } else {
+ $this->doc .= '<text:p text:style-name="Preformatted_20_Text">';
+ $this->doc .= $text;
+ $this->doc .= '</text:p>';
+ }
+ }
+
+ function file($text) {
+ $this->preformatted($text);
+ }
+
+ function quote_open() {
+ if (!$this->in_paragraph) { // only start a new par if we're not already in one
+ $this->p_open();
+ }
+ $this->doc .= "&gt;";
+ }
+
+ function quote_close() {
+ if ($this->in_paragraph) { // only close the paragraph if we're actually in one
+ $this->p_close();
+ }
+ }
+
+ function code($text, $language = NULL) {
+ // FIXME we could convert GeSHi HTML and CSS classes to ODT XML here
+ $this->preformatted($text);
+ }
+
+ function internalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {
+ global $conf;
+ global $ID;
+ resolve_mediaid(getNS($ID),$src, $exists);
+ list($ext,$mime) = mimetype($src);
+
+ if(substr($mime,0,5) == 'image'){
+ $file = mediaFN($src);
+ $this->_odtAddImage($file, $width, $height, $align, $title);
+ }else{
+ // FIXME build absolute medialink and call externallink()
+ $this->code('FIXME internalmedia: '.$src);
+ }
+ }
+
+ function externalmedia ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $linking=NULL) {
+ global $conf;
+ global $ID;
+ list($ext,$mime) = mimetype($src);
+
+ if(substr($mime,0,5) == 'image'){
+ if($width) {
+ $width = 'svg:width="'.(($width/96.0)*2.54).'cm"';
+ } else {
+ $width = 'svg:rel-width="100%"';
+ }
+ if($height) {
+ $height = 'svg:height="'.(($height/96.0)*2.54).'cm"';
+ } else {
+ $height = 'svg:rel-height="100%"';
+ }
+
+ $style = 'media'.$align;
+ if($align){
+ $anchor = 'paragraph';
+ }else{
+ $anchor = 'as-char';
+ }
+
+ $this->doc .= '<draw:frame draw:style-name="'.$style.'" draw:name="'.$this->_xmlEntities($title).'"
+ text:anchor-type="'.$anchor.'" draw:z-index="0"
+ '.$width.' '.$height.' >';
+ $this->doc .= '<draw:image xlink:href="'.$this->_xmlEntities($src).'"
+ xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>';
+ $this->doc .= '</draw:frame>';
+ }else{
+ $this->externallink($src,$title);
+ }
+ }
+
+ function camelcaselink($link) {
+ $this->internallink($link,$link);
+ }
+
+ function reference($id, $name = NULL) {
+ $this->doc .= '<text:a xlink:type="simple" xlink:href="#'.$id.'"';
+ if ($name) {
+ $this->doc .= '>'.$this->_xmlEntities($name).'</text:a>';
+ } else {
+ $this->doc .= '/>';
+ }
+ }
+
+ /**
+ * Render an internal Wiki Link
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function internallink($id, $name = NULL) {
+ global $conf;
+ global $ID;
+ // default name is based on $id as given
+ $default = $this->_simpleTitle($id);
+ // now first resolve and clean up the $id
+ resolve_pageid(getNS($ID),$id,$exists);
+ $name = $this->_getLinkTitle($name, $default, $isImage, $id);
+
+ // build the absolute URL (keeping a hash if any)
+ list($id,$hash) = explode('#',$id,2);
+ $url = wl($id,'',true);
+ if($hash) $url .='#'.$hash;
+
+ if ($ID == $id) {
+ $this->reference($hash, $name);
+ } else {
+ $this->_doLink($url,$name);
+ }
+ }
+
+ /**
+ * Add external link
+ */
+ function externallink($url, $name = NULL) {
+ global $conf;
+
+ $name = $this->_getLinkTitle($name, $url, $isImage);
+
+ $this->_doLink($url,$name);
+ }
+
+ /**
+ * Just print local links
+ *
+ * @fixme add image handling
+ */
+ function locallink($hash, $name = NULL){
+ $name = $this->_getLinkTitle($name, $hash, $isImage);
+ $this->doc .= $name;
+ }
+
+ /**
+ * InterWiki links
+ */
+ function interwikilink($match, $name = NULL, $wikiName, $wikiUri) {
+ $name = $this->_getLinkTitle($name, $wikiUri, $isImage);
+ $url = $this-> _resolveInterWiki($wikiName,$wikiUri);
+ $this->_doLink($url,$name);
+ }
+
+ /**
+ * Just print WindowsShare links
+ *
+ * @fixme add image handling
+ */
+ function windowssharelink($url, $name = NULL) {
+ $name = $this->_getLinkTitle($name, $url, $isImage);
+ $this->doc .= $name;
+ }
+
+ /**
+ * Just print email links
+ *
+ * @fixme add image handling
+ */
+ function emaillink($address, $name = NULL) {
+ $name = $this->_getLinkTitle($name, $address, $isImage);
+ $this->_doLink("mailto:".$address,$name);
+ }
+
+ /**
+ * Add a hyperlink, handling Images correctly
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _doLink($url,$name){
+ $url = $this->_xmlEntities($url);
+ if(is_array($name)){
+ // Images
+ if($url) $this->doc .= '<draw:a xlink:type="simple" xlink:href="'.$url.'">';
+
+ if($name['type'] == 'internalmedia'){
+ $this->internalmedia($name['src'],
+ $name['title'],
+ $name['align'],
+ $name['width'],
+ $name['height'],
+ $name['cache'],
+ $name['linking']);
+ }
+
+ if($url) $this->doc .= '</draw:a>';
+ }else{
+ // Text
+ if($url) $this->doc .= '<text:a xlink:type="simple" xlink:href="'.$url.'">';
+ $this->doc .= $name; // we get the name already XML encoded
+ if($url) $this->doc .= '</text:a>';
+ }
+ }
+
+ /**
+ * Construct a title and handle images in titles
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ */
+ function _getLinkTitle($title, $default, & $isImage, $id=null) {
+ global $conf;
+
+ $isImage = false;
+ if ( is_null($title) ) {
+ if ($conf['useheading'] && $id) {
+ $heading = p_get_first_heading($id);
+ if ($heading) {
+ return $this->_xmlEntities($heading);
+ }
+ }
+ return $this->_xmlEntities($default);
+ } else if ( is_string($title) ) {
+ return $this->_xmlEntities($title);
+ } else if ( is_array($title) ) {
+ $isImage = true;
+ return $title;
+ }
+ }
+
+ /**
+ * Creates a linkid from a headline
+ *
+ * @param string $title The headline title
+ * @param boolean $create Create a new unique ID?
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ function _headerToLink($title,$create=false) {
+ $title = str_replace(':','',cleanID($title));
+ $title = ltrim($title,'0123456789._-');
+ if(empty($title)) $title='section';
+
+ if($create){
+ // make sure tiles are unique
+ $num = '';
+ while(in_array($title.$num,$this->headers)){
+ ($num) ? $num++ : $num = 1;
+ }
+ $title = $title.$num;
+ $this->headers[] = $title;
+ }
+
+ return $title;
+ }
+
+
+ function _xmlEntities($value) {
+ return str_replace( array('&','"',"'",'<','>'), array('&#38;','&#34;','&#39;','&#60;','&#62;'), $value);
+ }
+
+ function rss ($url,$params){
+ global $lang;
+ global $conf;
+
+ require_once(DOKU_INC.'inc/FeedParser.php');
+ $feed = new FeedParser();
+ $feed->feed_url($url);
+
+ //disable warning while fetching
+ if (!defined('DOKU_E_LEVEL')) { $elvl = error_reporting(E_ERROR); }
+ $rc = $feed->init();
+ if (!defined('DOKU_E_LEVEL')) { error_reporting($elvl); }
+
+ //decide on start and end
+ if($params['reverse']){
+ $mod = -1;
+ $start = $feed->get_item_quantity()-1;
+ $end = $start - ($params['max']);
+ $end = ($end < -1) ? -1 : $end;
+ }else{
+ $mod = 1;
+ $start = 0;
+ $end = $feed->get_item_quantity();
+ $end = ($end > $params['max']) ? $params['max'] : $end;;
+ }
+
+ $this->listu_open();
+ if($rc){
+ for ($x = $start; $x != $end; $x += $mod) {
+ $item = $feed->get_item($x);
+ $this->listitem_open(0);
+ $this->listcontent_open();
+ $this->externallink($item->get_permalink(),
+ $item->get_title());
+ if($params['author']){
+ $author = $item->get_author(0);
+ if($author){
+ $name = $author->get_name();
+ if(!$name) $name = $author->get_email();
+ if($name) $this->cdata(' '.$lang['by'].' '.$name);
+ }
+ }
+ if($params['date']){
+ $this->cdata(' ('.$item->get_date($conf['dformat']).')');
+ }
+ if($params['details']){
+ $this->cdata(strip_tags($item->get_description()));
+ }
+ $this->listcontent_close();
+ $this->listitem_close();
+ }
+ }else{
+ $this->listitem_open(0);
+ $this->listcontent_open();
+ $this->emphasis_open();
+ $this->cdata($lang['rssfailed']);
+ $this->emphasis_close();
+ $this->externallink($url);
+ $this->listcontent_close();
+ $this->listitem_close();
+ }
+ $this->listu_close();
+ }
+
+
+ function _odtAddImage($src, $width = NULL, $height = NULL, $align = NULL, $title = NULL, $style = NULL){
+ list($ext,$mime) = mimetype($src);
+ $name = 'Pictures/'.md5($src).'.'.$ext;
+ if(!$this->manifest[$name]){
+ $this->manifest[$name] = $mime;
+ $this->ZIP->add_File(io_readfile($src,false),$name,0);
+ }
+ // make sure width and height is available
+ // FIXME we don't have the dimension of an external file
+ // (except it's cached, but this is not the default) there seems
+ // to be no way to specify "use original image" in ODF - thus
+ // a hardcoded default size of 200 pixel here
+ if(!$width || !$height){
+ $info = getimagesize($src);
+ if(!$width){
+ $width = $info[0];
+ $height = $info[1];
+ }else{
+ $height = round(($width * $info[1]) / $info[0]);
+ }
+ }
+
+ // convert from pixel to centimeters
+ $width = (($width/96.0)*2.54);
+ $height = (($height/96.0)*2.54);
+ // Don't be wider than the page
+ if ($width >= 17){ // FIXME : this assumes A4 page format with 2cm margins
+ $width = $width.'cm" style:rel-width="100%';
+ $height = $height.'cm" style:rel-height="scale';
+ } else {
+ $width = $width.'cm';
+ $height = $height.'cm';
+ }
+
+ if($align){
+ $anchor = 'paragraph';
+ }else{
+ $anchor = 'as-char';
+ }
+
+ if (!$style or !array_key_exists($style, $this->autostyles)) {
+ $style = 'media'.$align;
+ }
+
+ if ($title) {
+ $this->doc .= '<draw:frame draw:style-name="'.$style.'" draw:name="'.$this->_xmlEntities($title).' Legend"
+ text:anchor-type="'.$anchor.'" draw:z-index="0" svg:width="'.$width.'">';
+ $this->doc .= '<draw:text-box>';
+ $this->doc .= '<text:p text:style-name="legendcenter">';
+ }
+ $this->doc .= '<draw:frame draw:style-name="'.$style.'" draw:name="'.$this->_xmlEntities($title).'"
+ text:anchor-type="'.$anchor.'" draw:z-index="0"
+ svg:width="'.$width.'" svg:height="'.$height.'" >';
+ $this->doc .= '<draw:image xlink:href="'.$this->_xmlEntities($name).'"
+ xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>';
+ $this->doc .= '</draw:frame>';
+ if ($title) {
+ $this->doc .= $this->_xmlEntities($title).'</text:p></draw:text-box></draw:frame>';
+ }
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml
new file mode 100644
index 000000000..c328464f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0"?>
+<!--
+ This file defines how the document is styled. This was extracted from a ODT file
+ created in OpenOffice 2.0 and could probably be much simpler.
+
+ You probably want to replace this file with a style fitting your corporate identity.
+
+ To do so, export the wiki:syntax page, edit it's style definitions (be sure to keep
+ the names) and save the resulting file. Extract the resulting file with unzip and
+ copy the styles.xml over this one.
+-->
+<office:document-styles xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" office:version="1.0">
+ <office:font-face-decls>
+ <style:font-face style:name="StarSymbol" svg:font-family="StarSymbol"/>
+ <style:font-face style:name="Bitstream Vera Sans Mono" svg:font-family="'Bitstream Vera Sans Mono'" style:font-family-generic="modern" style:font-pitch="fixed"/>
+ <style:font-face style:name="Bitstream Vera Sans" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Bitstream Vera Sans1" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Bitstream Vera Sans2" svg:font-family="'Bitstream Vera Sans'" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" fo:font-size="12pt" style:font-size-asian="12pt" style:font-size-complex="12pt"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" style:font-name="Bitstream Vera Sans" fo:font-size="12pt" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="12pt" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="12pt" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.212cm" fo:text-align="justify" style:justify-single-word="false"/>
+ </style:style>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Bitstream Vera Sans1" fo:font-size="14pt" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="14pt" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="1">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="24pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="24pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="24pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="2">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="18pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="18pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="18pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_3" style:display-name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="3">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="14pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="14pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_4" style:display-name="Heading 4" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="4">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="12pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="12pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="12pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Heading_20_5" style:display-name="Heading 5" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:class="text" style:default-outline-level="5">
+ <style:text-properties style:font-name="Bitstream Vera Sans" fo:font-size="10pt" fo:font-weight="bold" style:font-name-asian="Bitstream Vera Sans2" style:font-size-asian="10pt" style:font-weight-asian="bold" style:font-name-complex="Bitstream Vera Sans2" style:font-size-complex="10pt" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list"/>
+ <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ </style:style>
+ <style:style style:name="Table_20_Heading" style:display-name="Table Heading" style:family="paragraph" style:parent-style-name="Table_20_Contents" style:class="extra">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ </style:style>
+ <style:style style:name="Quotations" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
+ <style:paragraph-properties fo:margin-left="1cm" fo:margin-right="1cm" fo:margin-top="0cm" fo:margin-bottom="0.499cm" fo:text-indent="0cm" style:auto-text-indent="false"/>
+ </style:style>
+ <style:style style:name="Preformatted_20_Text" style:display-name="Preformatted Text" style:family="paragraph" style:parent-style-name="Standard" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0cm"/>
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" fo:font-size="10pt" style:font-name-asian="Bitstream Vera Sans Mono" style:font-size-asian="10pt" style:font-name-complex="Bitstream Vera Sans Mono" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="Horizontal_20_Line" style:display-name="Horizontal Line" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="html">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.499cm" style:border-line-width-bottom="0.002cm 0.035cm 0.002cm" fo:padding="0cm" fo:border-left="none" fo:border-right="none" fo:border-top="none" fo:border-bottom="0.039cm double #808080" text:number-lines="false" text:line-number="0" style:join-border="false"/>
+ <style:text-properties fo:font-size="6pt" style:font-size-asian="6pt" style:font-size-complex="6pt"/>
+ </style:style>
+ <style:style style:name="Footnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-left="0.5cm" fo:margin-right="0cm" fo:text-indent="-0.5cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt" style:font-size-complex="10pt"/>
+ </style:style>
+ <style:style style:name="Numbering_20_Symbols" style:display-name="Numbering Symbols" style:family="text"/>
+ <style:style style:name="Bullet_20_Symbols" style:display-name="Bullet Symbols" style:family="text">
+ <style:text-properties style:font-name="StarSymbol" fo:font-size="9pt" style:font-name-asian="StarSymbol" style:font-size-asian="9pt" style:font-name-complex="StarSymbol" style:font-size-complex="9pt"/>
+ </style:style>
+ <style:style style:name="Internet_20_link" style:display-name="Internet link" style:family="text">
+ <style:text-properties fo:color="#000080" style:text-underline-style="solid" style:text-underline-width="auto" style:text-underline-color="font-color"/>
+ </style:style>
+ <style:style style:name="Emphasis" style:family="text">
+ <style:text-properties fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Strong_20_Emphasis" style:display-name="Strong Emphasis" style:family="text">
+ <style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Source_20_Text" style:display-name="Source Text" style:family="text">
+ <style:text-properties style:font-name="Bitstream Vera Sans Mono" style:font-name-asian="Bitstream Vera Sans Mono" style:font-name-complex="Bitstream Vera Sans Mono"/>
+ </style:style>
+ <style:style style:name="Graphics" style:family="graphic">
+ <style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="dynamic" style:number-wrapped-paragraphs="no-limit" style:wrap-contour="false" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
+ </style:style>
+ <text:outline-style>
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ </text:outline-style>
+
+ <text:list-style style:name="Numbering_20_1" style:display-name="Numbering 1"/>
+ <text:list-style style:name="List_20_1" style:display-name="List 1"/>
+
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+
+ </office:styles>
+
+ <office:automatic-styles/>
+
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+</office:document-styles>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php
new file mode 100644
index 000000000..a8d0832d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * ODT Plugin: Exports to ODT
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Aurelien Bompard <aurelien@bompard.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+class syntax_plugin_odt extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return confToHash(dirname(__FILE__).'/info.txt');
+ }
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * What about paragraphs?
+ */
+ function getPType(){
+ return 'normal';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 319; // Before image detection, which uses {{...}} and is 320
+ }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~ODT~~',$mode,'plugin_odt');
+ $this->Lexer->addSpecialPattern('{{odt>.+?}}',$mode,'plugin_odt');
+ }
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ // Export button
+ if ($match == '~~ODT~~') { return array(); }
+ // Extended info
+ $match = substr($match,6,-2); //strip markup
+ $extinfo = explode(':',$match);
+ $info_type = $extinfo[0];
+ if (count($extinfo) < 2) { // no value
+ $info_value = '';
+ } elseif (count($extinfo) == 2) {
+ $info_value = $extinfo[1];
+ } else { // value may contain colons
+ $info_value = implode(array_slice($extinfo,1), ':');
+ }
+ return array($info_type, $info_value);
+ }
+
+ /**
+ * Create output
+ */
+ function render($format, &$renderer, $data) {
+ global $ID, $REV;
+ if (!$data) { // Export button
+ if($format != 'xhtml') return false;
+ $renderer->doc .= '<a href="'.exportlink($ID, 'odt', ($REV != '' ? 'rev='.$REV : '')).'" title="'.$this->getLang('view').'">';
+ $renderer->doc .= '<img src="'.DOKU_BASE.'lib/plugins/odt/odt.png" align="right" alt="'.$this->getLang('view').'" width="48" height="48" />';
+ $renderer->doc .= '</a>';
+ return true;
+ } else { // Extended info
+ list($info_type, $info_value) = $data;
+ if ($info_type == "template") { // Template-based export
+ $renderer->template = $info_value;
+ p_set_metadata($ID, array("relation"=> array("odt"=>array("template"=>$info_value))));
+ }
+ }
+ return false;
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php
new file mode 100644
index 000000000..b24b1ff6e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php
@@ -0,0 +1,202 @@
+<?php
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'admin.php');
+require_once(DOKU_INC.'inc/changelog.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class admin_plugin_revert extends DokuWiki_Admin_Plugin {
+ var $cmd;
+ // some vars which might need tuning later
+ var $max_lines = 800; // lines to read from changelog
+ var $max_revs = 20; // numer of old revisions to check
+
+
+ /**
+ * Constructor
+ */
+ function admin_plugin_revert(){
+ $this->setupLocale();
+ }
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Andreas Gohr',
+ 'email' => 'andi@splitbrain.org',
+ 'date' => '2008-12-10',
+ 'name' => 'Revert Manager',
+ 'desc' => 'Allows you to mass revert recent edits',
+ 'url' => 'http://dokuwiki.org/plugin:revert',
+ );
+ }
+
+ /**
+ * access for managers
+ */
+ function forAdminOnly(){
+ return false;
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 40;
+ }
+
+ /**
+ * handle user request
+ */
+ function handle() {
+ }
+
+ /**
+ * output appropriate html
+ */
+ function html() {
+
+ echo $this->plugin_locale_xhtml('intro');
+
+ $this->_searchform();
+
+ if(is_array($_REQUEST['revert']) && checkSecurityToken()){
+ $this->_revert($_REQUEST['revert'],$_REQUEST['filter']);
+ }elseif(isset($_REQUEST['filter'])){
+ $this->_list($_REQUEST['filter']);
+ }
+ }
+
+ /**
+ * Display the form for searching spam pages
+ */
+ function _searchform(){
+ global $lang;
+ echo '<form action="" method="post"><div class="no">';
+ echo '<label>'.$this->getLang('filter').': </label>';
+ echo '<input type="text" name="filter" class="edit" value="'.hsc($_REQUEST['filter']).'" />';
+ echo '<input type="submit" class="button" value="'.$lang['btn_search'].'" />';
+ echo ' <span>'.$this->getLang('note1').'</span>';
+ echo '</div></form><br /><br />';
+ }
+
+ /**
+ * Start the reversion process
+ */
+ function _revert($revert,$filter){
+ global $conf;
+
+ echo '<hr /><br />';
+ echo '<p>'.$this->getLang('revstart').'</p>';
+
+ echo '<ul>';
+ foreach($revert as $id){
+ global $REV;
+
+ // find the last non-spammy revision
+ $data = '';
+ $old = getRevisions($id, 0, $this->max_revs);
+ if(count($old)){
+ foreach($old as $REV){
+ $data = rawWiki($id,$REV);
+ if(strpos($data,$filter) === false) break;
+ }
+ }
+
+ if($data){
+ saveWikiText($id,$data,'old revision restored',false);
+ printf('<li><div class="li">'.$this->getLang('reverted').'</div></li>',$id,$REV);
+ }else{
+ saveWikiText($id,'','',false);
+ printf('<li><div class="li">'.$this->getLang('removed').'</div></li>',$id);
+ }
+ @set_time_limit(10);
+ flush();
+ }
+ echo '</ul>';
+
+ echo '<p>'.$this->getLang('revstop').'</p>';
+ }
+
+ /**
+ * List recent edits matching the given filter
+ */
+ function _list($filter){
+ global $conf;
+ echo '<hr /><br />';
+ echo '<form action="" method="post"><div class="no">';
+ echo '<input type="hidden" name="filter" value="'.hsc($filter).'" />';
+ formSecurityToken();
+
+ $recents = getRecents(0,$this->max_lines);
+ echo '<ul>';
+
+
+ $cnt = 0;
+ foreach($recents as $recent){
+ if($filter){
+ if(strpos(rawWiki($recent['id']),$filter) === false) continue;
+ }
+
+ $cnt++;
+ $date = strftime($conf['dformat'],$recent['date']);
+
+ echo ($recent['type']===DOKU_CHANGE_TYPE_MINOR_EDIT) ? '<li class="minor">' : '<li>';
+ echo '<div class="li">';
+ echo '<input type="checkbox" name="revert[]" value="'.hsc($recent['id']).'" checked="checked" id="revert__'.$cnt.'" />';
+ echo '<label for="revert__'.$cnt.'">'.$date.'</label> ';
+
+ echo '<a href="'.wl($recent['id'],"do=diff").'">';
+ $p = array();
+ $p['src'] = DOKU_BASE.'lib/images/diff.png';
+ $p['width'] = 15;
+ $p['height'] = 11;
+ $p['title'] = $lang['diff'];
+ $p['alt'] = $lang['diff'];
+ $att = buildAttributes($p);
+ echo "<img $att />";
+ echo '</a> ';
+
+ echo '<a href="'.wl($recent['id'],"do=revisions").'">';
+ $p = array();
+ $p['src'] = DOKU_BASE.'lib/images/history.png';
+ $p['width'] = 12;
+ $p['height'] = 14;
+ $p['title'] = $lang['btn_revs'];
+ $p['alt'] = $lang['btn_revs'];
+ $att = buildAttributes($p);
+ echo "<img $att />";
+ echo '</a> ';
+
+ echo html_wikilink(':'.$recent['id'],(useHeading('navigation'))?NULL:$recent['id']);
+ echo ' &ndash; '.htmlspecialchars($recent['sum']);
+
+ echo ' <span class="user">';
+ echo $recent['user'].' '.$recent['ip'];
+ echo '</span>';
+
+ echo '</div>';
+ echo '</li>';
+
+ @set_time_limit(10);
+ flush();
+ }
+ echo '</ul>';
+
+ echo '<p>';
+ echo '<input type="submit" class="button" value="'.$this->getLang('revert').'" /> ';
+ printf($this->getLang('note2'),hsc($filter));
+ echo '</p>';
+
+ echo '</div></form>';
+ }
+
+}
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php
new file mode 100644
index 000000000..1fff08db3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php
@@ -0,0 +1,5 @@
+<?php
+/**
+ * Afrikaans language file
+ *
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php
new file mode 100644
index 000000000..cdab0cf43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @author Yaman Hokan <always.smile.yh@hotmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt
new file mode 100644
index 000000000..ab7308d6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt
@@ -0,0 +1,4 @@
+====== ВъзÑтановÑване ======
+
+Тази Ñтраница помага при автоматичното възÑтановÑване от Ñпам-атака. За да намерите ÑпиÑък ÑÑŠÑ Ñпамнати Ñтраници, въведете текÑÑ‚ за Ñ‚ÑŠÑ€Ñене(пр. Ñпам препратка), Ñлед това потвърдете, че намерените Ñтраници Ñа наиÑтина Ñпам и възÑтановете редакциите.
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php
new file mode 100644
index 000000000..6f0ff0672
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * bulgarian language file
+ * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
+ * @author Viktor Usunov <usun0v@mail.bg>
+ */
+$lang['menu'] = 'ВъзÑтановÑване';
+$lang['filter'] = 'ТърÑене на Ñпамната Ñтраници';
+$lang['revert'] = 'Избрани Ñтраници за възÑтановÑване';
+$lang['reverted'] = '%s върнат до верÑÐ¸Ñ %s';
+$lang['removed'] = '%s премахнат';
+$lang['revstart'] = 'ПроцеÑÑŠÑ‚ на възÑтановÑване започна. Това може да отнеме много време. Ðко Ñкриптът Ñе проÑрочи преди да завърши, Ñ‚Ñ€Ñбва да възÑтановÑвате на по-малки парчета.';
+$lang['revstop'] = 'ПроцеÑÑŠÑ‚ на възÑтановÑване завърши уÑпешно.';
+$lang['note1'] = 'Забележка: за Ñ‚ÑŠÑ€Ñенето имат значение малки/големи букви';
+$lang['note2'] = 'Забележка: Ñтраницата ще бъде възвърната без да Ñъдържа Ñпам терминът <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt
new file mode 100644
index 000000000..fed2cb9cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt
@@ -0,0 +1,4 @@
+====== Gestor de reversions ======
+
+Esta pàgina ajuda en la reversió automàtica d'atacs de spam. Per a
+trobar una llista de pàgines que tinguen spam introduïxca una cadena de busca (p. e. una URL de spam), confirme que les pàgines trobades tenen realment spam i revertixca les edicions.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php
new file mode 100644
index 000000000..77dd5808e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * valencian language file
+ * @author Bernat Arlandis <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
+ */
+$lang['menu'] = 'Gestor de reversions';
+$lang['filter'] = 'Buscar pàgines en spam';
+$lang['revert'] = 'Revertir pàgines seleccionades';
+$lang['reverted'] = '%s revertides a la versió %s';
+$lang['removed'] = '%s llevades';
+$lang['revstart'] = 'El procés de reversió ha començat. Açò pot dur prou de temps. Si es talla abans d\'acabar, haurà de revertir per parts.';
+$lang['revstop'] = 'El procés de reversió ha finalisat correctament.';
+$lang['note1'] = 'Nota: esta busca és sensible a mayúscules';
+$lang['note2'] = 'Nota: esta pàgina es revertirà a l\'última versió que no continga el spam definit pel terme <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt
new file mode 100644
index 000000000..0af2e8e6d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt
@@ -0,0 +1,3 @@
+====== Gestió de reversions ======
+
+Aquesta pàgina us ajuda a revertir automàticament els canvis que siguin producte d'un atac amb brossa. Per trobar la llista de pàgines atacades, cerqueu una cadena adequada (p. ex. un URL de propaganda), confirmeu que les pàgines trobades contenen realment brossa i llavors revertiu-les a revisions anteriors. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php
new file mode 100644
index 000000000..b8800911f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Catalan language file
+ *
+ * @author Carles Bellver <carles.bellver@gmail.com>
+ * @author carles.bellver@gmail.com
+ * @author carles.bellver@cent.uji.es
+ * @author Carles Bellver <carles.bellver@cent.uji.es>
+ */
+$lang['menu'] = 'Gestió de reversions';
+$lang['filter'] = 'Cerca pàgines brossa';
+$lang['revert'] = 'Reverteix les pàgines seleccionades';
+$lang['reverted'] = 'S\'ha revertit %s a la revisió %s';
+$lang['removed'] = 'S\'ha suprimit %s';
+$lang['revstart'] = 'S\'ha iniciat el procés de reversió. Això pot trigar una bona estona. Si s\'excedeix el temps d\'espera màxim del servidor, haureu de tornar a intentar-ho per parts.';
+$lang['revstop'] = 'El procés de reversió ha acabat amb èxit.';
+$lang['note1'] = 'Nota: aquesta cerca distingeix entre majúscules i minúscules.';
+$lang['note2'] = 'Nota: la pàgina es revertirà a la darrera versió que no contingui el terme brossa especificat <em>%s</em>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt
new file mode 100644
index 000000000..bbc0df25a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt
@@ -0,0 +1,3 @@
+====== Obnova zaspamovaných stránek ======
+
+Tato stránka pomůže pÅ™i automatické obnovÄ› po spamovém útoku. Pro nalezení seznamu zaspamovaných stránek nedřív zadejte hledaný výraz (napÅ™. spamové URL) a pak potvrÄte, že nalezené stránky opravdu obsahují spam a mohou být obnoveny.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php
new file mode 100644
index 000000000..cdfe0e96c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ *
+ * @author Bohumir Zamecnik <bohumir@zamecnik.org>
+ * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
+ * @author tomas@valenta.cz
+ */
+$lang['menu'] = 'Obnova zaspamovaných stránek';
+$lang['filter'] = 'Hledat zaspamované stránky';
+$lang['revert'] = 'Obnovit vybrané stránky';
+$lang['reverted'] = '%s vrácena do verze %s';
+$lang['removed'] = '%s odstraněna';
+$lang['revstart'] = 'Obnova stránek zaÄala. Tento proces může trvat dlouho. Pokud
+skriptu vyprší Äas, budete muset obnovovat po menších blocích
+stránek.';
+$lang['revstop'] = 'Proces obnovy stránek byl úspěšnÄ› dokonÄen.';
+$lang['note1'] = 'Poznámka: toto vyhledávání je citlivé na velikost písmen';
+$lang['note2'] = 'Poznámka: tato stránka bude obnovena na poslední verze, která
+neobsahovala dané spamové slovo <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt
new file mode 100644
index 000000000..fdb0c5f32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt
@@ -0,0 +1,3 @@
+===== Gendannelsesstyring =====
+
+Denne side hjælper dig med at gendanne sider efter et angreb af uønskede indlæg. For at finde en liste af sider, der muligvis er blevet ændret, så skriv en søgestreng (for eksempel. en uønsket netadresse) og bekræft, at de fundne sider virkeligt er uønskede og gendan ændringerne. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php
new file mode 100644
index 000000000..97e15f361
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Danish language file
+ *
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esben Laursen <hyber@hyber.dk>
+ * @author Harith <haj@berlingske.dk>
+ * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Gendannelsesstyring';
+$lang['filter'] = 'Søg efter uønskede sider';
+$lang['revert'] = 'Gendan valgte sider';
+$lang['reverted'] = '%s gendannet til ændring %s';
+$lang['removed'] = '%s fjernet';
+$lang['revstart'] = 'Gendannelsesforløbet er startet. Dette kan tage et stykke tid. Hvis kodefilen giver "time out" før processen færdiggøres, skal du gendanne i mindre dele.';
+$lang['revstop'] = 'Gendannelsesforløbet fuldført uden fejl';
+$lang['note1'] = 'Bemærk: Der er forskel på store og små bogstaver i søgningen';
+$lang['note2'] = 'Bemærk: Denne side vil blive gendannet til den seneste udgave, der ikke indeholder det givne uønskede udtryk <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php
new file mode 100644
index 000000000..fd6e81c8a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * German (informal) language file
+ *
+ * @author Alexander Fischer <tbanus@os-forge.net>
+ * @author Juergen Schwarzer <jschwarzer@freenet.de>
+ */
+$lang['menu'] = 'Zurückstellungsmanager';
+$lang['revert'] = 'Stelle ausgewählte Seiten zurück.';
+$lang['removed'] = '%s entfernt';
+$lang['revstart'] = 'Zurückstellungsprozess gestartet. Dies kann eine längere Zeit dauern. Wenn das Skript vor Fertigstellung stopt, sollten Sie es in kleineren Stücken versuchen.';
+$lang['revstop'] = 'Zurückstellungsprozess erfolgreich beendet.';
+$lang['note1'] = 'Beachte: Diese Suche berücksichtigt Gross- und Kleinschreibung';
+$lang['note2'] = 'Beachte: Diese Seite wid zurückgestellt auf die letzte Version, die nicht den Spam-Ausdruck <i>%s</i> enthält.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt
new file mode 100644
index 000000000..d5a092155
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt
@@ -0,0 +1,3 @@
+====== Seiten wieder herstellen ======
+
+Dieses Plugin dient der automatischen Wiederherstellung von Seiten nach einem Spam-Angriff. Geben Sie zunächst einen Suchbegriff (z.B. eine Spam URL) ein um eine Liste betroffener Seiten zu erhalten. Nachdem Sie sich vergewissert haben, dass die gefundenen Seiten wirklich Spam enthalten, können Sie die Seiten wieder herstellen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php
new file mode 100644
index 000000000..d26413ac1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Germanlanguage file
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Dirk Einecke <dirk@dirkeinecke.de>
+ * @author Blitzi94@gmx.de
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Seiten wieder herstellen';
+$lang['filter'] = 'Nach betroffenen Seiten suchen';
+$lang['revert'] = 'Ausgewählte Seiten wieder herstellen';
+$lang['reverted'] = '%s wieder hergestellt zu Version %s';
+$lang['removed'] = '%s entfernt';
+$lang['revstart'] = 'Wiederherstellung gestartet. Dies kann einige Zeit dauern. Wenn das Script abbricht, bevor alle Seiten wieder hergestellt wurden, reduzieren Sie die Anzahl der Seiten und wiederholen Sie den Vorgang.';
+$lang['revstop'] = 'Wiederherstellung erfolgreich abgeschlossen.';
+$lang['note1'] = 'Anmerkung: diese Suche unterscheidet Groß- und Kleinschreibung';
+$lang['note2'] = 'Anmerkung: die Seite wird zur letzten Version, die nicht den angegebenen Spam Begriff <i>%s</i> enthält, wieder hergestellt.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt
new file mode 100644
index 000000000..9b583bc6b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt
@@ -0,0 +1,3 @@
+====== Αποκατάσταση κακόβουλων αλλαγών σελίδων ======
+
+Αυτή η σελίδα σας βοηθά να αποκαταστήσετε αυτόματα τις κακόβουλες αλλαγές σελίδων που Ï€ÏοκαλοÏν οι επιθέσεις spam. Για να βÏείτε τις σελίδες που Ï€Ïέπει να Ï„ÏοποποιηθοÏν, Ï€Ïώτα δώστε έναν ÏŒÏο αναζήτησης (Ï€.χ. έναν σÏνδεσμο spam) και έπειτα επιβεβαιώστε ότι οι σελίδες που θα βÏεθοÏν όντως πεÏιέχουν spam και Ï€ÏοχωÏήστε στην αποκατάστασή τους.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php
new file mode 100644
index 000000000..7b6fde803
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Greek language file
+ *
+ * Based on DokuWiki Version rc2007-05-24 english language file
+ * Original english language file contents included for reference
+ *
+ * @author Thanos Massias <tm@thriasio.gr>
+ * @author Αθανάσιος Îταής <homunculus@wana.gr>
+ * @author Konstantinos Koryllos <koryllos@gmail.com>
+ */
+$lang['menu'] = 'Αποκατάσταση κακόβουλων αλλαγών σελίδων';
+$lang['filter'] = 'Αναζήτηση σελίδων που πεÏιέχουν spam';
+$lang['revert'] = 'ΕπαναφοÏά παλαιότεÏων εκδόσεων των επιλεγμένων σελίδων';
+$lang['reverted'] = 'Η σελίδα %s επεναφέÏθηκε στην έκδοση %s';
+$lang['removed'] = 'Η σελίδα %s διαγÏάφηκε';
+$lang['revstart'] = 'Η διαδικασία αποκατάστασης άÏχισε. Αυτό ίσως πάÏει αÏκετό χÏόνο. Εάν η εφαÏμογή υπεÏβεί το διαθέσιμο χÏονικό ÏŒÏιο και τεÏματιστεί Ï€Ïιν τελειώσει, θα χÏειαστεί να επαναλάβετε αυτή τη διαδικασία για μικÏότεÏα τμήματα.';
+$lang['revstop'] = 'Η διαδικασία αποκατάστασης ολοκληÏώθηκε με επιτυχία.';
+$lang['note1'] = '<br />Σημείωση: η αναζήτηση επηÏεάζεται από το εάν οι χαÏακτήÏες είναι πεζοί ή κεφαλαίοι';
+$lang['note2'] = '<br />Σημείωση: η σελίδα θα επαναφεÏθεί στην πλέον Ï€Ïόσφατη έκδοση που δεν πεÏιέχει τον ÏŒÏο <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt
new file mode 100644
index 000000000..b8f355854
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt
@@ -0,0 +1,3 @@
+====== Revert Manager ======
+
+This page helps you with the automatic reversion of a spam attack. To find a list of spammy pages first enter a search string (eg. a spam URL), then confirm that the found pages are really spam and revert the edits.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php
new file mode 100644
index 000000000..a2002f1a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * english language file
+ */
+
+// for admin plugins, the menu prompt to be displayed in the admin menu
+// if set here, the plugin doesn't need to override the getMenuText() method
+$lang['menu'] = 'Revert Manager';
+
+// custom language strings for the plugin
+
+$lang['filter'] = 'Search spammy pages';
+$lang['revert'] = 'Revert selected pages';
+$lang['reverted'] = '%s reverted to revision %s';
+$lang['removed'] = '%s removed';
+$lang['revstart'] = 'Reversion process started. This can take a long time. If the
+ script times out before finishing, you need to revert in smaller
+ chunks.';
+$lang['revstop'] = 'Reversion process finished successfully.';
+$lang['note1'] = 'Note: this search is case sensitive';
+$lang['note2'] = 'Note: the page will be reverted to the last version not containing the given spam term <i>%s</i>.';
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt
new file mode 100644
index 000000000..14e831467
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt
@@ -0,0 +1,3 @@
+====== Administro de Restarigo ======
+
+Tiu ĉi paÄo helpas vin pri aÅ­tomata restarigo el spama atako. Por trovi liston de spamecaj paÄoj, unue mendu serĉan liter-ĉenon (ekz. spama URL), do konfirmu, ke la trovitaj paÄoj fakte estas spamaj kaj restarigu la antaÅ­ajn versiojn bonajn.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php
new file mode 100644
index 000000000..7ed2a4777
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Esperantolanguage file
+ *
+ * @author Felipe Castro <fefcas@uol.com.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Felipe Castro <fefcas (cxe) gmail (punkto) com>
+ * @author Felipo Kastro <fefcas@gmail.com>
+ * @author Robert Bogenschneider <robog@gmx.de>
+ * @author Erik Pedersen <erik pedersen@shaw.ca>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Administrado de restarigo';
+$lang['filter'] = 'Serĉi spamecajn paÄojn';
+$lang['revert'] = 'Restarigi la elektitajn paÄojn';
+$lang['reverted'] = '%s estas restarigita al revizio %s';
+$lang['removed'] = '%s estas forigita';
+$lang['revstart'] = 'Restariga procezo estas ekigita. Tio povas daÅ­ri longan tempon. Se la skripto tro prokrastos antaÅ­ plenumo, vi bezonos restarigi po pli etaj blokoj.';
+$lang['revstop'] = 'Restariga procezo plenumiÄis sukcese.';
+$lang['note1'] = 'Rimarko: tiu ĉi serĉo distingas usklecon';
+$lang['note2'] = 'Rimarko: la paÄo restariÄos al la lasta versio ne enhavanta la menditan spaman terminon <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt
new file mode 100644
index 000000000..39c5b047d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt
@@ -0,0 +1,3 @@
+====== Restaurador ======
+
+Esta página te ayuda con la restauración de ataques spam. Para encontrar una lista de páginas con spam introduce una cadena , luego confirma que las páginas encontradas son realmente un spam y restaura la edición. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php
new file mode 100644
index 000000000..2886528d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @author Oscar M. Lage <r0sk10@gmail.com>
+ * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
+ * @author oliver@samera.com.py
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Manuel Meco <manuel.meco@gmail.com>
+ * @author VictorCastelan <victorcastelan@gmail.com>
+ * @author Jordan Mero hack.jord@gmail.com
+ * @author Felipe Martinez <metalmartinez@gmail.com>
+ * @author Javier Aranda <internet@javierav.com>
+ * @author Zerial <fernando@zerial.org>
+ * @author Marvin Ortega <maty1206@maryanlinux.com>
+ * @author Daniel Castro Alvarado <dancas2@gmail.com>
+ * @author Fernando J. Gómez <fjgomez@gmail.com>
+ */
+$lang['menu'] = 'Restaurador';
+$lang['filter'] = 'Buscar páginas con spam';
+$lang['revert'] = 'Restaurar las páginas seleccionadas';
+$lang['reverted'] = '%s ha restaurado la revisión %s';
+$lang['removed'] = '%s borrado';
+$lang['revstart'] = 'El proceso de restaurado ha comenzado. Puede llevar bastante tiempo. Si el script se para antes de acabar, deberías restaurar cadenas más pequeñas.';
+$lang['revstop'] = 'El proceso de restaurado ha finalizado satisfactoriamente.';
+$lang['note1'] = 'Nota: la búsqueda diferencia entre mayúsculas y minúsculas.';
+$lang['note2'] = 'Nota: la página será restaurada a la última versión que no tenga el término de spam dado <em>%s</em>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt
new file mode 100644
index 000000000..c5a5a5afa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt
@@ -0,0 +1,3 @@
+====== Berrezartze Kudeatzailea ======
+
+Orri honek spam eraso baten berrezartze automatikoarekin laguntzen dizu. Spam-a duten orriak bilatzeko, lehenik sartu bilaketa katea (adb. spam URL bat), eta ondoren baieztatu bilatutako orriak benetan spam-a dutela, gero aldaketak berrezartzeko.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php
new file mode 100644
index 000000000..e94f07b2a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Basque language file
+ *
+ * @author Inko Illarramendi <inko.i.a@gmail.com>
+ */
+$lang['menu'] = 'Berrezartze Kudeatzailea';
+$lang['filter'] = 'Bilatu spam duten orriak';
+$lang['revert'] = 'Berrezarri aukeratutako orriak';
+$lang['reverted'] = '%s berrezarria %s berrikuspenera';
+$lang['removed'] = '%s ezabatua';
+$lang['revstart'] = 'Berrezartze prozesua hasi da. Honek denbora luzea eraman dezake.
+Script-a denbora mugara iristen bada, zati txikiagotan berrezarri
+beharko duzu. ';
+$lang['revstop'] = 'Berrezartze prozesua arrakastaz bukatu da.';
+$lang['note1'] = 'Oharra: bilaketa honek maiuskulak eta minuskulak bereizten ditu';
+$lang['note2'] = 'Oharra: orria azken bertsiora berrezarriko da, emandako <i>%s</i> spam terminorik ez duelarik.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt
new file mode 100644
index 000000000..0ccdb089a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt
@@ -0,0 +1,3 @@
+====== مدیریت برگشت‌ها ======
+
+این صÙحه، در بازیابی صÙحاتی Ú©Ù‡ به آن‌ها اسپم ارسال شده است Ú©Ù…Ú© می‌رساند. برای مشاهده‌ی صÙحات اسپم شده، ابتدا جستجو کنید، سپس از اسپم شدن صÙحه‌ی مورد نظر اطمینان حاصل کنید Ùˆ تغییرات اعمال شده را برگردانید. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php
new file mode 100644
index 000000000..02d2aabd2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Persian language file
+ *
+ * @author behrad eslamifar <behrad_es@yahoo.com)
+ * @author Mohsen Firoozmandan <info@mambolearn.com>
+ * @author omidmr@gmail.com
+ * @author Omid Mottaghi <omidmr@gmail.com>
+ * @author Mohammad Reza Shoaei <shoaei@gmail.com>
+ */
+$lang['menu'] = 'مدیریت برگشت‌ها';
+$lang['filter'] = 'جستجوی صÙحات اسپم شده';
+$lang['revert'] = 'بازگردانی صÙحات انتخاب شده';
+$lang['reverted'] = '%s به نگارش %s بازگردانده شد';
+$lang['removed'] = '%s حذ٠شد';
+$lang['revstart'] = 'در حال بازگرداندن. ممکن است مدتی زمان ببرد. اگر اجرای برنامه، پیش از اتمام به پایان رسید، باید در بخش‌های کوچک‌تری بازگردانی را انجام دهید.';
+$lang['revstop'] = 'بازگرداندن با موÙقیت به پایان رسید.';
+$lang['note1'] = 'توجه: جستجو حساس به حرو٠کوچک و بزرگ است';
+$lang['note2'] = 'توجه: صÙحه به آخرین نسخه‌ای Ú©Ù‡ حاوی اسپم <i>%s</i> نیست بازگردانده خواهد شد.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt
new file mode 100644
index 000000000..3b3ce5daa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt
@@ -0,0 +1,3 @@
+====== Palautuksenhallinta ======
+
+Tämä sivu auttaa sinua automaattisen palautuksenhallinnan kanssa spam hyökkäyksen jälkeen. Löytääksesi listan spammatyistä sivuista anna ensin hakusana (esim. spm URL), sen jälkeen varmista, että löytyneet sivut todella ovat spammia ja palauta sitten sivut.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php
new file mode 100644
index 000000000..26bc6b76a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @author otto@valjakko.net
+ * @author Otto Vainio <otto@valjakko.net>
+ * @author Teemu Mattila <ghcsystems@gmail.com>
+ */
+$lang['menu'] = 'Palautuksenhallinta';
+$lang['filter'] = 'Etsi spammattyjä sivuja';
+$lang['revert'] = 'Palauta valitut sivut';
+$lang['reverted'] = '%s palautettu versioon %s';
+$lang['removed'] = '%s poistettu';
+$lang['revstart'] = 'Palautusprosessi käynnistetty. Tämä voi viedä pidemmän aikaa. Jos ajo katkeaa aikakatkaisuun ennen loppua, niin sinun pitää palauttaa pienemmissä osissa.';
+$lang['revstop'] = 'Palautusprosessi lopetti onnistuneesti.';
+$lang['note1'] = 'Huomioi: tämä haku on kirjainkoosta riippuva';
+$lang['note2'] = 'Huomioi: tämä sivu palautetaan viimeiseen versioon, jossa ei ole annettua spamtermiä <i>%s</i>';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt
new file mode 100644
index 000000000..db61ac9cf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt
@@ -0,0 +1,3 @@
+====== Gestion des réversions ======
+
+Cette page peut vous aider à restaurer des pages après une attaque de spam. Pour trouver la liste des pages victimes des spammeurs, entrez un motif de recherche (tel qu'une URL de spam), puis confirmez que les pages trouvées contiennent du spam et annulez leurs éditions.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php
new file mode 100644
index 000000000..8d17280d4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * french language file
+ * @author Delassaux Julien <julien@delassaux.fr>
+ * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
+ * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author gb@isis.u-strasbg.fr
+ * @author stephane.gully@gmail.com
+ * @author Guillaume Turri <guillaume.turri@gmail.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author olivier duperray <duperray.olivier@laposte.net>
+ * @author Vincent Feltz <psycho@feltzv.fr>
+ */
+$lang['menu'] = 'Gestionnaire de réversions';
+$lang['filter'] = 'Trouver les pages spammées ';
+$lang['revert'] = 'Annuler les éditions sélectionnées';
+$lang['reverted'] = '%s restauré à la révision %s';
+$lang['removed'] = '%s supprimé';
+$lang['revstart'] = 'Processus de réversion démarré. Ceci peut prendre longtemps. Si le script dépasse le délai avant de terminer, vous devrez restaurer de plus petits groupes de pages.';
+$lang['revstop'] = 'Processus de réversion terminé avec succès.';
+$lang['note1'] = 'Note : cette recherche est insensible à la casse';
+$lang['note2'] = 'Note: cette page sera révisée à la version précédente ne contenant pas le terme spammeur <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt
new file mode 100644
index 000000000..81e98f1d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt
@@ -0,0 +1,3 @@
+====== Xestor de recuperación ======
+
+Esta páxina axudarao a se recuperar automaticamente dun ataque de spam. Para encontrar unha listaxe de páxinas que conteñan spam, primeiro debe inserir unha cadea de procura (por ex. un URL de spam) e despois confirmar que as páxinas encontradas conteñen realmente spam, antes de reverter as edicións.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php
new file mode 100644
index 000000000..33472090d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Galicianlanguage file
+ *
+ * @author CiberIrmandade da Fala <infoxeral@ciberirmandade.org>
+ * @author Tagen Ata <localizacion@tagenata.com>
+ * @author Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+$lang['menu'] = 'Xestor de recuperación';
+$lang['filter'] = 'Procurar páxinas con spam';
+$lang['revert'] = 'Recuperar as páxinas seleccionadas';
+$lang['reverted'] = '%s foi revertida á revisión %s';
+$lang['removed'] = '%s foi eliminada';
+$lang['revstart'] = 'O proceso de recuperación foi iniciado. Isto podería demorar un certo tempo. Se o script falla por ter superado o seu límite de tempo antes de rematar, terá que efectuar a recuperación sobre fragmentos máis pequenos.';
+$lang['revstop'] = 'O proceso de recuperación rematou correctamente.';
+$lang['note1'] = 'Nota: Esta procura distingue entre maiúsculas e minúsculas';
+$lang['note2'] = 'Nota: A páxina será revertida á última versión que non conteña o termo de spam <i>%s</i> indicado.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt
new file mode 100644
index 000000000..44b78dfea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt
@@ -0,0 +1,3 @@
+====== מנהל השחזור ======
+
+דף ×–×” יסיע בידך לשחזר ב×ופן ×וטומטי ×חרי התקפת ספ××. כדי לקבל ×ת רשימת ×”×“×¤×™× ×¢× ×”×¡×¤×× ×¢×œ×™×š ר×שית מחרוזת לחיפוש (לדוגמה כתובת ספ××) ×חר כך עליך ל×שר ×©×”×“×¤×™× ×©× ×ž×¦×ו ב×מת ×ž×›×™×œ×™× ×¡×¤×× ×•×œ×©×—×–×¨ ×ת העריכות.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php
new file mode 100644
index 000000000..e09ffeaab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Hebrew language file
+ *
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ * @author Moshe Kaplan <mokplan@gmail.com>
+ */
+$lang['menu'] = 'מנהל שחזור';
+$lang['filter'] = 'חפש ×“×¤×™× ×¢× ×¡×¤××';
+$lang['revert'] = 'שחזר ×ת ×”×“×¤×™× ×”× ×‘×—×¨×™×';
+$lang['reverted'] = '%s שוחזרו לגרסה %s';
+$lang['removed'] = '%s הוסרו';
+$lang['revstart'] = 'תהליך השחזור החל. התהליך עלול להיות ממושך. ×× ×ª×¡×¨×™×˜ מגיע למגבלת פסק הזמן לפני ×©×”×¡×ª×™×™× ×”×ª×”×œ×™×š ×™×”×™×” צורך לבצע ×ת השחזור ×‘×ž×§×˜×¢×™× ×§×˜× ×™× ×™×•×ª×¨.';
+$lang['revstop'] = 'תהליך השחזור ×”×•×©×œ× ×‘×”×¦×œ×—×”.';
+$lang['note1'] = 'לתשומת לבך: החיפוש ער לגודל ×”×ותיות הלועזיות.';
+$lang['note2'] = 'לתשות לבך: הדף ישוחזר לגרסה ×”×חרונה ש××™× ×” מכילה ×ת מונח הספ×× <i>%s</i>';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php
new file mode 100644
index 000000000..d8630a281
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Hindi language file
+ *
+ * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php
new file mode 100644
index 000000000..d2094b77b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Croatian language file
+ *
+ * @author Branko Rihtman <theney@gmail.com>
+ * @author Dražen Odobašić <dodobasic@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt
new file mode 100644
index 000000000..e2c2dadd9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt
@@ -0,0 +1,3 @@
+====== Visszaállítás kezelő ======
+
+Segítséget nyújtunk SPAM támadások utáni automatikus visszaállításhoz. A fertőzött oldalak kereséséhez meg kell adni egy karaktersorozatot (pl. egy SPAM URL-t). A találatok közül kiválasztva a valóban SPAM-et tartalmazó oldakat, visszaállítjuk őket a lehetséges utolsó SPAM mentes állapotra. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php
new file mode 100644
index 000000000..58f17007d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Hungarian language file
+ *
+ * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
+ * @author Siaynoq Mage <siaynoqmage@gmail.com>
+ * @author schilling.janos@gmail.com
+ */
+$lang['menu'] = 'Visszaállítás kezelő (anti-SPAM)';
+$lang['filter'] = 'SPAM tartalmú oldalak keresése';
+$lang['revert'] = 'Kiválasztott oldalak visszaállítása';
+$lang['reverted'] = '%s a következő változatra lett visszaállítva: %s';
+$lang['removed'] = '%s törölve';
+$lang['revstart'] = 'A visszaállítási folyamat elindult. Ez hosszú ideig eltarthat. Ha időtúllépés miatt nem tud lefutni, kisebb darabbal kell próbálkozni.';
+$lang['revstop'] = 'A visszaállítási folyamat sikeresen befejeződött.';
+$lang['note1'] = 'Megjegyzés: a keresés kisbetű-nagybetűre érzékeny';
+$lang['note2'] = 'Megjegyzés: Az oldalt az utolsó olyan változatra állítjuk vissza, ami nem tartalmazza a megadott spam kifejezést: <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php
new file mode 100644
index 000000000..d367340b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * idni language file
+ *
+ * @author Harefa <fidelis@harefa.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php
new file mode 100644
index 000000000..c3d485930
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Indonesian language file
+ *
+ * @author Irwan Butar Butar <irwansah.putra@gmail.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php
new file mode 100644
index 000000000..9de404992
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Icelandic language file
+ *
+ * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
+ * @author Ólafur Gunnlaugsson <oli@audiotools.com>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['removed'] = '%s eytt';
+$lang['note1'] = 'Athugaðu að þegar leitað er þá skiftir stafsetur máli, það að segja leitarvélin gerir mun á hástöfum og lágstöfum';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt
new file mode 100644
index 000000000..1577af7ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt
@@ -0,0 +1,3 @@
+====== Gestore di ripristini ======
+
+Questa pagina aiuta il controllo automatico degli attacchi spam. Per cercare una lista delle pagine con spam, inserisci innanzitutto una stringa di ricerca (ad esempio l'URL di un sito di spam), quindi conferma che le pagine trovate contengono realmente spam e ripristinale ad una versione precedente.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php
new file mode 100644
index 000000000..0c2b265de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @author Pietro Battiston toobaz@email.it
+ * @author Diego Pierotto ita.translations@tiscali.it
+ * @author ita.translations@tiscali.it
+ * @author Lorenzo Breda <lbreda@gmail.com>
+ * @author snarchio@alice.it
+ * @author robocap <robocap1@gmail.com>
+ */
+$lang['menu'] = 'Gestore di ripristini';
+$lang['filter'] = 'Cerca pagine con spam';
+$lang['revert'] = 'Ripristina le pagine selezionate';
+$lang['reverted'] = '%s ripristinata alla versione %s';
+$lang['removed'] = '%s rimossa';
+$lang['revstart'] = 'Processo di ripristino avviato. Può essere necessario molto tempo. Se lo script non fa in tempo a finire, sarà necessario ripristinare in blocchi più piccoli.';
+$lang['revstop'] = 'Processo di ripristino finito con successo.';
+$lang['note1'] = 'Nota: questa ricerca distingue le maiuscole';
+$lang['note2'] = 'Nota: la pagina verrà ripristinata all\'ultima versione non contenente la parola di spam data <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt
new file mode 100644
index 000000000..995a57fd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt
@@ -0,0 +1,3 @@
+====== å¾©å…ƒç®¡ç† ======
+
+ã“ã®ãƒšãƒ¼ã‚¸ã¯ã€ã‚¹ãƒ‘ムã«ã‚ˆã‚Šç·¨é›†ã•ã‚ŒãŸãƒšãƒ¼ã‚¸ã‚’自動的ã«å¾©å…ƒã™ã‚‹ãŸã‚ã®æ©Ÿèƒ½ã‚’管ç†ã—ã¾ã™ã€‚ スパムをå—ã‘ãŸãƒšãƒ¼ã‚¸ã‚’検索ã™ã‚‹ãŸã‚ã€ã‚¹ãƒ‘ムURLãªã©ã®ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã‚’入力ã—ã¦ãã ã•ã„。 ãã®å¾Œã€æ¤œç´¢çµæžœã«å«ã¾ã‚Œã¦ã„るページãŒã‚¹ãƒ‘ムã•ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’確èªã—ã¦ã‹ã‚‰å¾©å…ƒã‚’è¡Œã„ã¾ã™ã€‚
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php
new file mode 100644
index 000000000..0cd8c6f9b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * japanese language file
+ * @author Yuji Takenaka <webmaster@davilin.com>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
+ * @author Daniel Dupriest <kououken@gmail.com>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+$lang['menu'] = '復元管ç†';
+$lang['filter'] = 'スパムをå—ã‘ãŸãƒšãƒ¼ã‚¸ã‚’検索';
+$lang['revert'] = 'é¸æŠžã—ãŸãƒšãƒ¼ã‚¸ã‚’検索';
+$lang['reverted'] = '%s ã¯ãƒªãƒ“ジョン %s ã¸å¾©å…ƒã•ã‚Œã¾ã—ãŸ';
+$lang['removed'] = '%s ã¯å‰Šé™¤ã•ã‚Œã¾ã—ãŸ';
+$lang['revstart'] = '復元処ç†ä¸­ã§ã™ã€‚時間ãŒæŽ›ã‹ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ãŒã€ã‚‚ã—タイムアウトã—ãŸå ´åˆã¯ã€å¾©å…ƒã‚’複数回ã«åˆ†ã‘ã¦è¡Œã£ã¦ãã ã•ã„。';
+$lang['revstop'] = '復元処ç†ãŒæ­£ã—ã完了ã—ã¾ã—ãŸã€‚';
+$lang['note1'] = '注æ„:検索語å¥ã¯å¤§æ–‡å­—・å°æ–‡å­—を区別ã—ã¾ã™';
+$lang['note2'] = '注æ„:最新ã®å†…容ã«æ¤œç´¢ã—ãŸã‚¹ãƒ‘ムキーワード <i>%s</i> ãŒå«ã¾ã‚Œã¦ã„ãªã„ページãŒå¾©å…ƒã•ã‚Œã¾ã™ã€‚';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt
new file mode 100644
index 000000000..a0164dc4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt
@@ -0,0 +1,3 @@
+====== 복구 ê´€ë¦¬ìž ======
+
+스팸 공격으로 부터 ìžë™ìœ¼ë¡œ ë³µêµ¬í•˜ëŠ”ë° ì´íŽ˜ì´ì§€ëŠ” ë„ì›€ì´ ë  ìˆ˜ 있습니다. 스팸 ê³µê²©ë°›ì€ íŽ˜ì´ì§€ 목ë¡ì„ 찾으려면 문ìžì—´ì„ 입력하기 ë°”ëžë‹ˆë‹¤(예. 스팸 URL), ê·¸ 후 ê²€ìƒ‰ëœ íŽ˜ì´ì§€ë“¤ì´ 스팸 공격받았는지 확ì¸í•˜ê³  복구합니다.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php
new file mode 100644
index 000000000..5e070de92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Korean language file
+ *
+ * @author jk lee
+ * @author dongnak@gmail.com
+ * @author Song Younghwan <purluno@gmail.com>
+ * @author SONG Younghwan <purluno@gmail.com>
+ */
+$lang['menu'] = '복구 관리ìž';
+$lang['filter'] = '스팸 페ì´ì§€ 검색 ';
+$lang['revert'] = 'ì„ íƒ íŽ˜ì´ì§€ë“¤ 복구';
+$lang['reverted'] = '%s를 ì´ì „ 버전 %s 으로 복구';
+$lang['removed'] = '%s 삭제';
+$lang['revstart'] = '복구 ìž‘ì—…ì„ ì‹œìž‘í•©ë‹ˆë‹¤. 오랜 ì‹œê°„ì´ ê±¸ë¦´ 수 있습니다. 완료ë˜ê¸° ì „ì— ìŠ¤í¬ë¦½íŠ¸ time outì´ ë°œìƒí•œë‹¤ë©´ ë” ìž‘ì€ ìž‘ì—…ë“¤ë¡œ 나누어서 복구하기 ë°”ëžë‹ˆë‹¤. ';
+$lang['revstop'] = '복구 ìž‘ì—…ì´ ì„±ê³µì ìœ¼ë¡œ ë났습니다.';
+$lang['note1'] = '주ì˜: ëŒ€ì†Œë¬¸ìž êµ¬ë³„í•˜ì—¬ 검색합니다.';
+$lang['note2'] = '주ì˜: ì´ íŽ˜ì´ì§€ëŠ” 스팸 단어 <i>%s</i>를 í¬í•¨í•˜ì§€ ì•Šì€ ê°€ìž¥ 최근 과거 문서 버전으로 복구ë©ë‹ˆë‹¤. ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php
new file mode 100644
index 000000000..103485864
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Lithuanian language file
+ *
+ * @author audrius.klevas@gmail.com
+ * @author Arunas Vaitekunas <aras@fan.lt>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt
new file mode 100644
index 000000000..edcdab2cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt
@@ -0,0 +1,3 @@
+====== PiemÄ“sloto lapu atjaunotÄjs ======
+
+Å Ä« lapa palÄ«dzÄ“s automÄtiski atjaunot saturu pÄ“c huligÄnisma . Lai atrastu piedrazotÄs lapas ieraksti meklÄ“jamo izteiksmi (piem. smaperu URL), tad apstiprini, ka atrastÄs ir "mÄ“slapas" un atcel izdarÄ«tÄs izmaiņas .
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php
new file mode 100644
index 000000000..0101f2698
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Latvian, Lettish language file
+ *
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['menu'] = 'PiemÄ“sloto lapu atjaunotÄjs';
+$lang['filter'] = 'MeklÄ“t piemÄ“slotÄs lapas';
+$lang['revert'] = 'Atjaunot norÄdÄ«tÄs lapas ';
+$lang['reverted'] = '%s atjaunots uz %s stÄvokli';
+$lang['removed'] = '% dzēsts';
+$lang['revstart'] = 'AtjaunoÅ¡ana uzsÄkta. Tas var aizņemt ilgÄku laiku. Ja darbÄ«ba pÄrtrÅ«kst noilguma dēļ, atjaunoÅ¡ana jÄveic pa mazÄkÄm porcijÄm.';
+$lang['revstop'] = 'Atjaunošana veiksmīgi pabeigta. ';
+$lang['note1'] = 'Ievēro: Meklēšana atšķir lielos un mazos burtus.';
+$lang['note2'] = 'IevÄ“ro: Lapu atjaunos ar pÄ“dÄ“jo versiju, kas nesatur uzdoto spama vÄrdu <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt
new file mode 100644
index 000000000..efca2430d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt
@@ -0,0 +1,5 @@
+====== फेरबदल वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• ======
+
+हà¥à¤¯à¤¾ पानादà¥à¤µà¤¾à¤°à¥‡ तà¥à¤®à¥à¤¹à¥€ भंकस हलà¥à¤²à¥à¤¯à¤¾à¤¦à¥à¤µà¤¾à¤°à¥‡ à¤à¤¾à¤²à¥‡à¤²à¥‡ बदल आपोआप फेरबदल करू शकता.
+भंकस पानांची यादी बनवणà¥à¤¯à¤¾à¤¸à¤¾à¤ à¥€ पà¥à¤°à¤¥à¤® à¤à¤–ादा शबà¥à¤¦à¤¸à¤®à¥‚ह टाका ( उदा. à¤à¤–ादं भंकस URL ),
+मग जी पाने सापडतील टी भंकस असलà¥à¤¯à¤¾à¤šà¥‡ नकà¥à¤•à¥€ करा आणि तà¥à¤¯à¤¾à¤¤à¥€à¤² बदल रदà¥à¤¦ करा. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php
new file mode 100644
index 000000000..3912bb967
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Marathi language file
+ *
+ * @author ghatothkach@hotmail.com
+ * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
+ * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
+ * @author shantanoo@gmail.com
+ */
+$lang['menu'] = 'फेर बदल वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['filter'] = 'भंकस पाने शोधा';
+$lang['revert'] = 'निवडलेली पानातील बदल रदà¥à¤¦ करा';
+$lang['reverted'] = '%s फेरबदलून %s आवृतà¥à¤¤à¤¿à¤®à¤§à¥‡ आणला आहे';
+$lang['removed'] = '%s काढला आहे.';
+$lang['revstart'] = 'फेरबदलाची पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ चालॠà¤à¤¾à¤²à¥€ आहे.याला बराच वेळ लागू शकतो. जर सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿ समà¥à¤ªà¤£à¥à¤¯à¤¾à¤†à¤§à¤¿ तà¥à¤¯à¤¾à¤šà¥€ कालमरà¥à¤¯à¤¾à¤¦à¤¾ उलटून गेली तर छोटà¥à¤¯à¤¾-छोटà¥à¤¯à¤¾ तà¥à¤•à¤¡à¥à¤¯à¤¾à¤‚मधे फेरबदल करा.';
+$lang['revstop'] = 'फेरबदलाची पà¥à¤°à¤•à¥à¤°à¤¿à¤¯à¤¾ यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ पूरà¥à¤£ à¤à¤¾à¤²à¥€.';
+$lang['note1'] = 'टीप : हा शोध केस-सेंसिटिव आहे ( फ़कà¥à¤¤ इंगà¥à¤°à¤œà¥€à¤¸à¤¾à¤ à¥€ लागू )';
+$lang['note2'] = 'टीप : हे पान फेरबदल करून जà¥à¤¯à¤¾ शेवटचà¥à¤¯à¤¾ आवृतà¥à¤¤à¤¿à¤®à¤§à¥‡ <i>%s</i> हा दिलेला भंकस शबà¥à¤¦ नाही तà¥à¤¯à¤¾à¤¤ बदलले जाईल.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php
new file mode 100644
index 000000000..4fd337532
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Nepali language file
+ *
+ * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
+ * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ */
+$lang['menu'] = 'पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¥€ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['filter'] = 'सà¥à¤ªà¥à¤¯à¤¾à¤®à¤¯à¥à¤•à¥à¤¤ पृषà¥à¤ à¤¹à¤°à¥ खोजà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['revert'] = 'छानिà¤à¤• पृषà¥à¤ à¤¹à¤°à¥à¤²à¤¾à¤ˆ पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¤¿à¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥ ।';
+$lang['reverted'] = '%s लाई %s संसà¥à¤•à¤°à¤£à¤®à¤¾ फरà¥à¤•à¤¾à¤‡à¤¯à¥‹ ।';
+$lang['removed'] = '%s लाई हटाइयो ।';
+$lang['revstart'] = 'पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¤¿à¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥‡ कारà¥à¤¯ सà¥à¤°à¥ भयो । यसले लामो समय लिन सकà¥à¤›à¥¤ यदि सà¥à¤•à¥à¤°à¤¿à¤ªà¥à¤Ÿà¤•à¥‹ समय काà¥à¤°à¥à¤¯ सकिनॠपूरà¥à¤µ सकियो भने । तपाईले सानो सानो टà¥à¤•à¥à¤°à¤¾ लिà¤à¤° पà¥à¤°à¥à¤µà¤°à¥à¤ªà¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥ परà¥à¤¨à¥‡ हà¥à¤¨à¥à¤› ।';
+$lang['revstop'] = 'पूरà¥à¤µà¤¸à¥à¤¥à¤¿à¤¤à¤¿à¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥‡ कारà¥à¤¯ सफलतापूरà¥à¤µà¤• सकियो ।';
+$lang['note1'] = 'नोट: यो खोज वरà¥à¤£ समà¥à¤µà¥‡à¤¦à¤¨à¤¶à¥€à¤² छ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt
new file mode 100644
index 000000000..db8f5a06c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt
@@ -0,0 +1,3 @@
+===== Herstelmanager =====
+
+Deze pagina helpt u bij het herstellen van pagina's na een spam-aanval. Vul een zoekterm in (bijvoorbeeld een spam url) om een lijst te krijgen van bekladde pagina's, bevestig dat de pagina's inderdaad spam bevatten en herstel de wijzigingen.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php
new file mode 100644
index 000000000..3b5c4e0fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Dutch language file
+ *
+ * @author Wouter Schoot <wouter@schoot.org>
+ * @author John de Graaff <john@de-graaff.net>
+ * @author Niels Schoot <niels.schoot@quintiq.com>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
+ * @author Marijn Hofstra hofstra.m@gmail.com
+ * @author Matthias Carchon webmaster@c-mattic.be
+ */
+$lang['menu'] = 'Herstelmanager';
+$lang['filter'] = 'Zoek naar bekladde pagina\'s';
+$lang['revert'] = 'Herstel geselecteerde pagina\'s';
+$lang['reverted'] = '%s hersteld naar revisie %s';
+$lang['removed'] = '%s verwijderd';
+$lang['revstart'] = 'Herstelproces begonnen. Dit kan een lange tijd duren. Als het script een timeout genereerd voor het klaar is, moet je in kleinere selecties herstellen.';
+$lang['revstop'] = 'Herstelproces succesvol afgerond.';
+$lang['note1'] = 'NB: deze zoekopdracht is hoofdlettergevoelig';
+$lang['note2'] = 'NB: de pagina zal hersteld worden naar de laatste versie waar de opgegeven spam-term <i>%s</i> niet op voorkomt.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt
new file mode 100644
index 000000000..f48b98749
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt
@@ -0,0 +1,3 @@
+====== Tilbakestillingsbehandler ======
+
+Denne siden hjelper deg å automatisk reversere forsøpling av sidene. For å finne en liste over forsøplede sider, skriv inn en søkestreng (f.eks. en søppel-URL). Bekreft deretter at de funnede sidene virkelig er forsøplet og tilbakestill endringene.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php
new file mode 100644
index 000000000..262ea3fe5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Norwegianlanguage file
+ *
+ * @author Thomas Nygreen <nygreen@gmail.com>
+ * @author Arild Burud <arildb@met.no>
+ * @author Torkill Bruland <torkar-b@online.no>
+ * @author Rune M. Andersen <rune.andersen@gmail.com>
+ * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
+ * @author Knut Staring <knutst@gmail.com>
+ * @author Lisa Ditlefsen <lisa@vervesearch.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Tilbakestillingsbehandler';
+$lang['filter'] = 'Søk etter søppelmeldinger';
+$lang['revert'] = 'Tilbakestill valgte sider';
+$lang['reverted'] = '%s tilbakestilt til revisjon %s';
+$lang['removed'] = '%s fjernet';
+$lang['revstart'] = 'Prosessen med tilbakestilling er startet. Hvis det skjer et
+tidsavbrudd før prosessen er ferdig, må du tilbakestille
+færre sider om gangen.';
+$lang['revstop'] = 'Tilbakestillingen er fullført.';
+$lang['note1'] = 'Merk: søket skiller mellom store og små bokstaver';
+$lang['note2'] = 'Merk: siden vil bli tilbakestilt til den siste versjonen som ikke inneholder det oppgitte søppel-ordet <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt
new file mode 100644
index 000000000..410948a2f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt
@@ -0,0 +1,3 @@
+====== Menadżer przywracania ======
+
+Menadżer przywracania przeznaczony jest do automatycznego naprawiania stron, które uległy wandalizmom. W celu naprawienia uszkodzonych stron, wyszukaj je a następnie oznacz i przywróć poprzednie wersje.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php
new file mode 100644
index 000000000..8ad68b5f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * polish language file
+ * @author Grzegorz Żur <grzegorz.zur@gmail.com>
+ * @author Mariusz Kujawski <marinespl@gmail.com>
+ * @author Maciej Kurczewski <pipijajko@gmail.com>
+ * @author SÅ‚awomir Boczek <slawkens@gmail.com>
+ */
+$lang['menu'] = 'Menadżer przywracania';
+$lang['filter'] = 'Wyszukaj uszkodzone strony';
+$lang['revert'] = 'Napraw zaznaczone strony';
+$lang['reverted'] = 'StronÄ™ %s zastÄ…piono wersjÄ… %s';
+$lang['removed'] = 'Stronę %s usunięto';
+$lang['revstart'] = 'Naprawa rozpoczęta. To może zająć kilka minut. Jeśli strona przestanie się ładować, spróbuj ponownie zaznaczając mniejszą liczbę stron.';
+$lang['revstop'] = 'Naprawa zakończona pomyślnie!';
+$lang['note1'] = 'Uwaga: duże i małe litery są rozróżniane';
+$lang['note2'] = 'Uwaga: zostanie przywrócona ostatnia wersja strony niezawierająca wyrażenia <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt
new file mode 100644
index 000000000..5ce9890db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt
@@ -0,0 +1,3 @@
+====== Gerenciador de Reversões ======
+
+Essa página ajuda a reverter automaticamente um ataque de spam. Para encontrar as páginas que sofreram ataque, primeiro entre com um termo na busca (ex.: a URL do spam), então confirme que as páginas encontradas são realmente spam e reverta as edições.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php
new file mode 100644
index 000000000..93c8bf4e1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Lucien Raven <lucienraven@yahoo.com.br>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Flávio Veras <flaviove@gmail.com>
+ * @author Jeferson Propheta <jeferson.propheta@gmail.com>
+ * @author jair.henrique@gmail.com
+ * @author Luis Dantas <luis@dantas.com>
+ * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Luis Dantas <luisdantas@gmail.com>
+ */
+$lang['menu'] = 'Gerenciador de reversões';
+$lang['filter'] = 'Procura por páginas com spam';
+$lang['revert'] = 'Reverte as páginas selecionadas';
+$lang['reverted'] = '%s revertida para a revisão %s';
+$lang['removed'] = '% removida';
+$lang['revstart'] = 'O processo de reversão foi iniciado. Isso pode levar muito tempo. Se o tempo de execução do script expirar antes dele encerrar, você deverá tentar novamente usando blocos menores.';
+$lang['revstop'] = 'O processo de reversão terminou com sucesso.';
+$lang['note1'] = 'Nota: esta busca diferencia maiúsculas/minúsculas';
+$lang['note2'] = 'Nota: a página será revertida para a última versão que não contém o termo de spam <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt
new file mode 100644
index 000000000..7adfe5f21
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt
@@ -0,0 +1,3 @@
+====== Gerir Reversões ======
+
+Esta página ajuda a reverter automaticamente de um ataque spam. Para encontrar as páginas afectadas insira primeiro um texto de pesquisa (i.e spam URL), confirme as páginas encontradas como sendo resultantes de um ataque spam e reverta essas edições. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php
new file mode 100644
index 000000000..4ad114efe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Fil <fil@meteopt.com>
+ * @author André Neves <drakferion@gmail.com>
+ */
+$lang['menu'] = 'Gestor de Reversões';
+$lang['filter'] = 'Pesquisar por páginas "spammy"';
+$lang['revert'] = 'Reverter páginas seleccionadas';
+$lang['reverted'] = '%s revertida para revisão %s';
+$lang['removed'] = '%s removidas.';
+$lang['revstart'] = 'Processo de reversão iniciado. A sua execução pode demorar. Se der timeout antes de terminar então é preciso escolher quantidades menores de páginas a reverter.';
+$lang['revstop'] = 'Processo de reversão bem sucedido.';
+$lang['note1'] = 'Nota: a pesquisa é case-sensitive';
+$lang['note2'] = 'Nota: a página será revertida para a versão anterior que não contém os termos spam pesquisados: <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt
new file mode 100644
index 000000000..3a030359b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt
@@ -0,0 +1,3 @@
+====== Manager Reveniri ======
+
+Această pagină ajută revenirea automată în cazul unui atac spam. Pentru a găsi o listă a paginilor cu spam, întroduceţi mai întâi un şir de căutat (de ex. Un URL spam), apoi confirmaţi dacă paginile găsite conţin într-adevăr spam şi anulaţi editările.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php
new file mode 100644
index 000000000..6e534fd37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Romanian language file
+ *
+ * @author Sergiu Baltariu <s_baltariu@yahoo.com>
+ * @author s_baltariu@yahoo.com
+ * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
+ */
+$lang['menu'] = 'Manager Reveniri';
+$lang['filter'] = 'Caută pagini cu posibil spam';
+$lang['revert'] = 'Revenire pentru paginile selectate';
+$lang['reverted'] = '%s revenită la versiunea %s';
+$lang['removed'] = '%s eliminată';
+$lang['revstart'] = 'Procesul de revenire a început. Acesta poate dura mult timp.Dacă scriptul expiră înainte de finalizare, trebuie să reveniţi în paşi mai mici.';
+$lang['revstop'] = 'Procesul de revenire s-a finalizat cu succes.';
+$lang['note1'] = 'Notă: această căutare este sensibilă la majuscule.';
+$lang['note2'] = 'Notă: pagina va reveni la ultima versiune ce nu conţine termenul de spam <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt
new file mode 100644
index 000000000..6f08c9961
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt
@@ -0,0 +1,3 @@
+====== Менеджер откаток ======
+
+Эта Ñтраница поможет вам в автоматичеÑкой откатке изменений поÑле Ñпам-атаки. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы найти Ñпам-Ñтраницы, введите ключевые Ñлова и произведите поиÑк (например, по URL Ñпаммера). Затем убедитеÑÑŒ, что найденные Ñтраницы дейÑтвительно Ñодержат Ñпам, и Ñделайте откатку изменений.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php
new file mode 100644
index 000000000..a78210777
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * russian language file
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author Andrew Pleshakov <beotiger@mail.ru>
+ * @author Змей ЭтерийÑкий evil_snake@eternion.ru
+ * @author Hikaru Nakajima <jisatsu@mail.ru>
+ * @author Alexei Tereschenko <alexeitlex@yahoo.com>
+ * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Alexander Sorkin <kibizoid@gmail.com>
+ * @author Kirill Krasnov <krasnovforum@gmail.com>
+ * @author Vlad Tsybenko <vlad.development@gmail.com>
+ */
+$lang['menu'] = 'Менеджер откаток';
+$lang['filter'] = 'ПоиÑк Ñпам-Ñтраниц';
+$lang['revert'] = 'Откатить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ñ… Ñтраниц';
+$lang['reverted'] = '%s откачена к верÑии %s';
+$lang['removed'] = '%s удалена';
+$lang['revstart'] = 'Ðачат процеÑÑ Ð¾Ñ‚ÐºÐ°Ñ‚ÐºÐ¸. Он может занÑÑ‚ÑŒ много времени. ЕÑли Ñкрипт не уÑпевает завершить работу и выдает ошибку, необходимо произвеÑти откатку более маленькими чаÑÑ‚Ñми.';
+$lang['revstop'] = 'ПроцеÑÑ Ð¾Ñ‚ÐºÐ°Ñ‚ÐºÐ¸ уÑпешно завершен.';
+$lang['note1'] = 'Замечание: поиÑк Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ региÑтра';
+$lang['note2'] = 'Замечание: Ñтраница будет откачена к поÑледней верÑии, не Ñодержащей Ñпам-термин <i>%s</i>.';
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/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php
new file mode 100644
index 000000000..822837de0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Slovaklanguage file
+ *
+ * @author Michal Mesko <michal.mesko@gmail.com>
+ * @author exusik@gmail.com
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['menu'] = 'Reverzný menežér';
+$lang['filter'] = 'Hľadať spamerské stránky';
+$lang['revert'] = 'Vrátiť vybrané stránky';
+$lang['reverted'] = '%s vrátená na revíziu %s';
+$lang['removed'] = '%s odstránená';
+$lang['revstart'] = 'Proces reverzie bol spustený. Toto môže trvaÅ¥ dlhý Äas. Ak skript vyprší pred tým, ako skonÄí, musíte urobiÅ¥ reverziu v menších dávkach.';
+$lang['revstop'] = 'Proces reverzie sa úspeÅ¡ne skonÄil.';
+$lang['note1'] = 'Poznámka: vyhľadávanie rozlišuje medzi veľkými a malými písmenami';
+$lang['note2'] = 'Poznámka: táto stránka bude vrátená do poslednej verzie, ktorá neobsahuje spamový výraz <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php
new file mode 100644
index 000000000..1fcf4ca36
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Slovenian language file
+ *
+ * @author Dejan Levec <webphp@gmail.com>
+ * @author BoÅ¡tjan SeniÄar <senicar@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt
new file mode 100644
index 000000000..8c288e7f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt
@@ -0,0 +1,3 @@
+====== Управљач за враћање ======
+
+Ова Ñтрана вам помаже од напада Ñпама аутоматÑким враћањем на Ñтаре верзије Ñтраница. Да биÑте пронашли Ñпамоване Ñтранице откуцајте реч за претрагу (тј. реч која Ñе појављује у Ñпаму), затим потврдите да Ñе на пронађеним Ñтраницама Ñтварно налази Ñпам и онда вратите на Ñтање пре промена. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php
new file mode 100644
index 000000000..3b28a1729
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Serbian language file
+ *
+ * @author Иван Петровић petrovicivan@ubuntusrbija.org
+ * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ */
+$lang['menu'] = 'Управљач за враћање';
+$lang['filter'] = 'Претрага Ñпам Ñтраница';
+$lang['revert'] = 'Врати одабране Ñтранице';
+$lang['reverted'] = '%s враћена на ревизију %s';
+$lang['removed'] = '%s је уклоњена';
+$lang['revstart'] = 'ÐŸÑ€Ð¾Ñ†ÐµÑ Ð²Ñ€Ð°Ñ›Ð°ÑšÐ° је покренут. Може потрајати дуже време. Ðко иÑтекне време пре завршетка потребно је да покренете у мањим деловима.';
+$lang['revstop'] = 'ÐŸÑ€Ð¾Ñ†ÐµÑ Ð²Ñ€Ð°Ñ›Ð°ÑšÐ° је уÑпешно завршен.';
+$lang['note1'] = 'Ðапомена: ова претрага разликује велика и мала Ñлова';
+$lang['note2'] = 'Ðапомена: Ñтраница ће бити враћена на поÑледњу верзију која не Ñадржи Ñпам израз <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt
new file mode 100644
index 000000000..cd7f322a3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt
@@ -0,0 +1,3 @@
+====== Hantera återställningar ======
+
+Den här sidan hjälper till med automatiskt återställning efter en spamattack. För att hitta spammade sidor, ange först en söksträng (till exempel en webbadress). Kontrollera sedan att sidorna som hittades verkligen är spam, och återställ sedan redigeringarna.
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php
new file mode 100644
index 000000000..1b6ca3374
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Swedish language file
+ *
+ * @author Per Foreby <per@foreby.se>
+ * @author Nicklas Henriksson <nicklas[at]nihe.se>
+ * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author Dennis Karlsson
+ * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author emil@sys.nu
+ * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
+ * @author Tormod Johansson tormod.otter.johansson@gmail.com
+ * @author Emil Lind <emil@sys.nu>
+ * @author Bogge Bogge <bogge@bogge.com>
+ * @author Peter Åström <eaustreum@gmail.com>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+$lang['menu'] = 'Hantera återställningar';
+$lang['filter'] = 'Sök efter spamsidor';
+$lang['revert'] = 'Återställ markerade redigeringar';
+$lang['reverted'] = '%s återställd till version %s';
+$lang['removed'] = '%s borttagen';
+$lang['revstart'] = 'Återställningen startad. Detta kan ta lång tid. Om
+ skriptet får en timeout innan det är färdigt måste du köra återställningen
+ med färre sidor åt gången.';
+$lang['revstop'] = 'Återställningen avslutades utan problem.';
+$lang['note1'] = 'OBS: sökningen skiljer på stora och små bokstäver';
+$lang['note2'] = 'OBS: sidan kommer att återställas till den senaste versionen som inte innehåller den angivna söksträngen <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt
new file mode 100644
index 000000000..2bfd27e59
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt
@@ -0,0 +1,3 @@
+====== ตัวจัดà¸à¸²à¸£à¸à¸¹à¹‰à¸„ืนสภาพเอà¸à¸ªà¸²à¸£ ======
+
+หน้านี้จะช่วยคุณด้วยà¸à¸²à¸£à¸à¸¹à¹‰à¸„ืนหน้าที่ถูà¸à¹à¸ªà¸›à¸¡à¹‚ดยอัตโนมัติ เพื่อที่จะค้นหารายà¸à¸²à¸£à¸«à¸™à¹‰à¸²à¸—ี่ถูà¸à¸ªà¹à¸›à¸¡ อันดับà¹à¸£à¸à¹ƒà¸«à¹‰à¸à¸£à¸­à¸à¸‚้อความสืบค้น (เช่น URL เว็บโฆษณาที่มาสà¹à¸›à¸¡à¹„ว้), จาà¸à¸™à¸±à¹‰à¸™à¹ƒà¸«à¹‰à¸¢à¸·à¸™à¸¢à¸±à¸™à¸§à¹ˆà¸²à¹€à¸žà¸ˆà¸—ี่พบนั้นถูà¸à¸ªà¹à¸›à¸¡à¸ˆà¸£à¸´à¸‡à¹† à¹à¸¥à¹‰à¸§à¸ˆà¸¶à¸‡à¸ªà¸±à¹ˆà¸‡à¸„ืนสภาพต้นฉบับ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php
new file mode 100644
index 000000000..86e4f9ca4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Thai language file
+ *
+ * @author Komgrit Niyomrath <n.komgrit@gmail.com>
+ * @author Kittithat Arnontavilas mrtomyum@gmail.com
+ * @author Arthit Suriyawongkul <arthit@gmail.com>
+ * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
+ * @author Thanasak Sompaisansin <jombthep@gmail.com>
+ */
+$lang['menu'] = 'ตัวจัดà¸à¸²à¸£à¸„ืนสภาพเอà¸à¸ªà¸²à¸£à¸‰à¸šà¸±à¸šà¹€à¸”ิม';
+$lang['filter'] = 'ค้นหาเพจที่ถูà¸à¹à¸ªà¸›à¸¡';
+$lang['revert'] = 'คืนสภาพเพจที่เลือà¸à¹„ว้';
+$lang['reverted'] = 'คืนสภาพ %s à¸à¸¥à¸±à¸šà¹„ปเป็นฉบับ %s';
+$lang['removed'] = 'ถอดทิ้ง %s';
+$lang['revstart'] = 'à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£à¸„ืนสภาพได้เริ่มต้นà¹à¸¥à¹‰à¸§ นี่อาจต้องใช้เวลานาน ถ้าหมดเวลาที่à¸à¸³à¸«à¸™à¸”สำหรับสคริปต์à¸à¹ˆà¸­à¸™à¸—ี่จะสำเร็จ คุณต้องไปทำà¸à¸²à¸£à¹à¸šà¹ˆà¸‡à¸‚้อมูลให้เล็à¸à¸¥à¸‡à¹€à¸žà¸·à¹ˆà¸­à¸à¸²à¸£à¸„ืนสภาพทีละส่วน';
+$lang['revstop'] = 'à¸à¸£à¸°à¸šà¸§à¸™à¸à¸²à¸£à¸„ืนสภาพสำเร็จเรียบร้อย';
+$lang['note1'] = 'คำเตือน: à¸à¸²à¸£à¸„้นนี้นับตัวพิมพ์ใหà¸à¹ˆà¹€à¸¥à¹‡à¸ (case sensitive)';
+$lang['note2'] = 'คำเตือน: เพจจะถูà¸à¸„ืนสภาพไปยังรุ่นล่าสุดที่ไม่มีประโยคสà¹à¸›à¸¡à¸™à¸µà¹‰ <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt
new file mode 100644
index 000000000..ff123995a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt
@@ -0,0 +1,3 @@
+====== Eskiye Döndürme Yöneticisi ======
+
+Bu sayfa spam saldırılarına karşı otomatik eski haline çevirim yapmanızı sağlar. Spam içerikli sayfayı bulmak için bir anahtar kelime girin (mesela spam URLsi), daha sonra spame maruz kalan sayfalar olduğundan emin olup eski haline çevirin. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php
new file mode 100644
index 000000000..164a8ec4f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Turkish language file
+ *
+ * @author Aydın Coşkuner aydinweb@gmail.com
+ * @author Aydın Coşkuner <aydinweb@gmail.com>
+ * @author yavuzselim@gmail.com
+ * @author Cihan Kahveci kahvecicihan@gmail.com
+ * @author Yavuz Selim <yavuzselim@gmail.com>
+ */
+$lang['menu'] = 'Eskiye Döndürme';
+$lang['filter'] = 'Spam bulunan sayfaları ara';
+$lang['revert'] = 'Seçili sayfaları eskiye döndür';
+$lang['reverted'] = '%s %s sürümüne geri çevrildi. ';
+$lang['removed'] = '%s kaldırıldı';
+$lang['revstart'] = 'Eskiye döndürme işlemi başlatıldı. Bu işlem uzun sürebilir. Eğer script işlemi tamamlayamadan zaman aşımına uğrarsa küçük parçalar halinde işlemi uygulayın.';
+$lang['revstop'] = 'Eskiye döndürme işlemi başarıyla tamamlandı.';
+$lang['note1'] = 'Not: bu aramada küçük harf büyük harf ayrımı vardır.';
+$lang['note2'] = 'Not: bu sayfa <i>%s</i> spam kelimelerini içermeyen son haline geri çevirilecektir.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt
new file mode 100644
index 000000000..7bf5dfcb9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt
@@ -0,0 +1,3 @@
+====== Менеджер Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ======
+
+Ð¦Ñ Ñторінка дозволÑÑ” вам автоматично відновлюватиÑÑ Ð¿Ñ–ÑÐ»Ñ ÑпамерÑьких атак. Ð”Ð»Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÑпиÑку зіпÑутих Ñторінок Ñпочатку введіть Ñ€Ñдок (напр. ÑпамерÑьке поÑиланнÑ), а потім підтвердіть, що знайдена Ñторінка дійÑно Ñ” Ñпамом Ñ– відновіть редагуваннÑ. \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php
new file mode 100644
index 000000000..37104bdd2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Ukrainian language file
+ *
+ * @author serg_stetsuk@ukr.net
+ * @author okunia@gmail.com
+ * @author Oleksandr Kunytsia <okunia@gmail.com>
+ * @author Uko uko@uar.net
+ */
+$lang['menu'] = 'Менеджер відновленнÑ';
+$lang['filter'] = 'Пошук Ñпамних Ñторінок';
+$lang['revert'] = 'Відновити обрані Ñторінки';
+$lang['reverted'] = '%s відновлено до верÑÑ–Ñ— %s';
+$lang['removed'] = '%s вилучено';
+$lang['revstart'] = 'Розпочато Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ. Це може зайнÑти багато чаÑу. Якщо Ñкрипт закінчує роботу по таймауту, необхідно відновлювати меншими чаÑтинами.';
+$lang['revstop'] = 'ÐŸÑ€Ð¾Ñ†ÐµÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑƒÑпішно закінчено.';
+$lang['note1'] = 'Увага: пошук залежить від регіÑтру Ñимволів';
+$lang['note2'] = 'Увага: Ñторінку буде відновлено до оÑтанньої верÑÑ–Ñ—, Ñка не міÑтить ÑпамерÑького терміну <i>%s</i>.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt
new file mode 100644
index 000000000..2aad10206
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt
@@ -0,0 +1,3 @@
+====== 還原管ç†å™¨ ======
+
+該é é¢èƒ½å¹«åŠ©æ‚¨çš„é é¢å¾žåžƒåœ¾ä¿¡æ¯çš„攻擊中自動還原éŽä¾†ã€‚ 請先輸入關éµè©žæœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„é é¢ï¼ˆå¦‚æŸå€‹åžƒåœ¾ä¿¡æ¯çš„ URL),然åŽè«‹ç¢ºå®šæœç´¢çµæžœçš„確包å«åžƒåœ¾ä¿¡æ¯ï¼Œä¸¦å°‡å…¶é‚„原至先å‰çš„修訂版。
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php
new file mode 100644
index 000000000..40a137dc0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Chinese Traditional language file
+ *
+ * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-simptrad.html
+ * @author Wayne San <waynesan@zerozone.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
+ * @author Cheng-Wei Chien <e.cwchien@gmail.com>
+ */
+$lang['menu'] = '還原管ç†';
+$lang['filter'] = 'æœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„é é¢';
+$lang['revert'] = '還原所é¸çš„é é¢';
+$lang['reverted'] = '%s已還原到版本%s';
+$lang['removed'] = '%s已移除';
+$lang['revstart'] = '已開始還原æ“作。有å¯èƒ½éœ€è¦å¾ˆé•·æ™‚間。如果計時器在還原æ“作完æˆå‰åœæ­¢äº†ï¼Œè«‹å˜—試還原較少的內容。';
+$lang['revstop'] = '還原程åºå·²æˆå·¥çš„完æˆã€‚';
+$lang['note1'] = '注æ„: æœå°‹æœ‰åˆ†å¤§å°å¯«';
+$lang['note2'] = '注æ„: æ­¤é å°‡æœƒè¢«é‚„原到ä¸åŒ…å«çµ¦äºˆçš„spam term <i>%s</i> 的最新版本.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt
new file mode 100644
index 000000000..c697f8aea
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt
@@ -0,0 +1,3 @@
+====== 还原管ç†å™¨ ======
+
+该页é¢èƒ½å¸®åŠ©æ‚¨çš„页é¢ä»Žåžƒåœ¾ä¿¡æ¯çš„攻击中自动还原过æ¥ã€‚ 请先输入关键è¯æœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„页é¢ï¼ˆå¦‚æŸä¸ªåžƒåœ¾ä¿¡æ¯çš„ URL),然åŽè¯·ç¡®å®šæœç´¢ç»“果的确包å«åžƒåœ¾ä¿¡æ¯ï¼Œå¹¶å°†å…¶è¿˜åŽŸè‡³å…ˆå‰çš„修订版。
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php
new file mode 100644
index 000000000..6241b712b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Chinese(Simplified) language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author ZDYX <zhangduyixiong@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
+ * @author George Sheraton guxd@163.com
+ * @author Simon zhan <simonzhan@21cn.com>
+ * @author mr.jinyi@gmail.com
+ */
+$lang['menu'] = '还原管ç†å™¨';
+$lang['filter'] = 'æœç´¢åŒ…å«åžƒåœ¾ä¿¡æ¯çš„页é¢';
+$lang['revert'] = '还原选中的页é¢';
+$lang['reverted'] = '%s 还原至修订版 %s';
+$lang['removed'] = '%s 已移除';
+$lang['revstart'] = '已开始还原æ“作。有å¯èƒ½éœ€è¦å¾ˆé•¿æ—¶é—´ã€‚如果计时器在还原æ“作完æˆå‰åœæ­¢äº†ï¼Œè¯·å°è¯•è¿˜åŽŸè¾ƒå°‘的内容。';
+$lang['revstop'] = '还原æ“作æˆåŠŸå®Œæˆã€‚';
+$lang['note1'] = '请注æ„:本次æœç´¢åŒºåˆ†å¤§å°å†™';
+$lang['note2'] = '请注æ„:本页é¢å°†è¢«è¿˜åŽŸè‡³ä¸åŒ…å«ç»™å®šåžƒåœ¾ä¿¡æ¯ <i>%s</i> 的最近的修订版。';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README
new file mode 100644
index 000000000..21c5dcfae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README
@@ -0,0 +1,20 @@
+S5: A Simple Standards-Based Slide Show System
+http://meyerweb.com/eric/tools/s5/
+by Eric Meyer
+
+S5 reloaded version by Christian Effenberger
+
+Additional Themes from
+http://www.yatil.de/s5/download/
+by Martin Hense and Eric Eggert
+
+"dokuwiki" theme based on work by Anika Henke
+
+Additional themes from JesusDA at http://www.jesusda.com/projects/presentaciones_s5
+
+Scriptaculous was developed by Thomas Fuchs, http://script.aculo.us.
+
+Presentacular was developed by Jose Manuel Caicedo, http://cavorite.com/.
+
+The presentation icon was found at
+http://www.linkmatrix.de/index.php?id=icon
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php
new file mode 100644
index 000000000..cd1f40c86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php
@@ -0,0 +1,4 @@
+<?php
+
+$conf['template'] = 'dokuwiki';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php
new file mode 100644
index 000000000..7e83909ba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php
@@ -0,0 +1,4 @@
+<?php
+
+$meta['template'] = array('dirchoice','_dir' => DOKU_INC.'lib/plugins/s5/ui/');
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php
new file mode 100644
index 000000000..d38a3633a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php
@@ -0,0 +1,3 @@
+<?php
+
+$lang['view'] = 'View page as slide show';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php
new file mode 100644
index 000000000..3091a7eaf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php
@@ -0,0 +1,3 @@
+<?php
+
+$lang['view'] = 'Смотреть Ñтраницу как Ñлайд-шоу';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php
new file mode 100644
index 000000000..bd8bf02f9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php
@@ -0,0 +1,3 @@
+<?php
+
+$lang['view'] = 'Mostrar como presentación';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt
new file mode 100644
index 000000000..9692c8d2e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt
@@ -0,0 +1,8 @@
+# General Plugin Info do not edit
+base s5reloaded
+author Tomas Alonso
+email t.alonso@oan.es
+date 2010-07-18
+name S5 Reloaded Slideshow Plugin including Presentacular
+desc Display a Wiki page as S5 reloaded slideshow presentation with advanced effects using Presentacular
+url http://www.dokuwiki.org/plugin:s5reloaded
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php
new file mode 100644
index 000000000..d0822a1ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php
@@ -0,0 +1,338 @@
+<?php
+/**
+ * Renderer for XHTML output
+ *
+ * @author Harry Fuecks <hfuecks@gmail.com>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+// we inherit from the XHTML renderer instead directly of the base renderer
+require_once DOKU_INC.'inc/parser/xhtml.php';
+
+/**
+ * The Renderer
+ */
+class renderer_plugin_s5reloaded extends Doku_Renderer_xhtml {
+ var $slideopen = false;
+ var $notesopen = false;
+ var $base='';
+ var $tpl='';
+
+ /**
+ * the format we produce
+ */
+ function getFormat(){
+ // this should be 's5' usally, but we inherit from the xhtml renderer
+ // and produce XHTML as well, so we can gain magically compatibility
+ // by saying we're the 'xhtml' renderer here.
+ return 'xhtml';
+ }
+
+
+ /**
+ * Initialize the rendering
+ */
+ function document_start() {
+ global $ID;
+
+ // call the parent
+ parent::document_start();
+
+ // store the content type headers in metadata
+ $headers = array(
+ 'Content-Type' => 'text/html; charset=utf-8'
+ );
+ p_set_metadata($ID,array('format' => array('s5reloaded' => $headers) ));
+ $this->base = DOKU_MEDIA.'lib/plugins/s5reloaded/ui/';
+/* $this->tpl = $this->getConf('template'); */
+ $this->tpl = isset($_GET['s5theme'])?$_GET['s5theme']:$this->getConf('template');
+ }
+
+ /**
+ * Print the header of the page
+ *
+ * Gets called when the very first H1 header is discovered. It includes
+ * all the S5 CSS and JavaScript magic
+ */
+ function s5reloaded_init($title){
+ global $conf;
+ global $lang;
+ global $INFO;
+ global $ID;
+
+ //throw away any previous content
+ $this->doc = '
+<!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" xml:lang="'.$conf['lang'].'"
+ lang="'.$conf['lang'].'" dir="'.$lang['direction'].'">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>'.hsc($title).'</title>
+<!-- metadata -->
+<meta name="generator" content="S5" />
+<meta name="version" content="S5 1.3" />
+<meta name="author" content="Eric A. Meyer" />
+<meta name="company" content="Complex Spiral Consulting" />
+<!-- meta extensions -->
+<meta name="subject" content="S5 1.3beta7" />
+<meta name="creator" content="Christian Effenberger" />
+<meta name="contributor" content="youcan[64]netzgesta[46]de" />
+<meta name="publisher" content="s5.netzgesta.de" />
+<meta name="description" content="S5 1.3 is a very flexible and lightweight slide show system available for anyone to use (including transitions and scalable fonts and images)" />
+<meta name="keywords" content="S5, slide show, projection-mode, powerpoint-like, scala-like, keynote-like, incremental display, scalable fonts, scalable images, transitions, notes, osf, xoxo, css, javascript, xhtml, public domain" />
+<!-- configuration parameters -->
+<meta name="defaultView" content="slideshow" />
+<meta name="controlVis" content="hidden" />
+<meta name="tranSitions" content="true" />
+<meta name="fadeDuration" content="500" />
+<meta name="incrDuration" content="250" />
+<!-- configuration autoplay extension -->
+<meta name="autoMatic" content="false" />
+<meta name="playLoop" content="true" />
+<meta name="playDelay" content="10" />
+<!-- configuration audio extension -->
+<meta name="audioSupport" content="true" />
+<meta name="audioVolume" content="100" />
+<meta name="audioError" content="true" />
+<!-- configuration audio debug -->
+<meta name="audioDebug" content="false" />
+<!-- style sheet links -->
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/slides.css" type="text/css" media="projection" id="slideProj" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/outline.css" type="text/css" media="screen" id="outlineStyle" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/print.css" type="text/css" media="print" id="slidePrint" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/opera.css" type="text/css" media="projection" id="operaFix" />
+<link rel="stylesheet" href="'.$this->base.$this->tpl.'/wrap.css" type="text/css" />
+
+<style type="text/css" media="all">
+.imgcon {width: 100%; margin: 0 auto; padding: 0; text-align: center;}
+#anim {width: 33%; height: 320px; position: relative;}
+#anim img {position: absolute; top: 0px; left: 0px;}
+.logo {margin: 0.2em 0 0 0.15em; padding: 0;}
+.clock {margin: 0.1em 0.2em; padding: 0; position: absolute; top: 0em; right: 0em;}
+.red {color: #C02;}
+</style>
+
+<!-- S5 JS -->
+<script src="'.$this->base.$this->tpl.'/slides.js" type="text/javascript"></script>
+
+<!-- prototype + scriptaculous -->
+<script src="'.$this->base.'effects_support/prototype.js" type="text/javascript"></script>
+<script src="'.$this->base.'effects_support/scriptaculous.js" type="text/javascript"></script>
+
+<!-- Presentaculous JS -->
+<script src="'.$this->base.'effects_support/presentacular.js" type="text/javascript"></script>
+
+<script type="text/javascript" charset="utf-8" src="'.$this->base.'../../asciimath/asciimathml148r.js" ></script>
+
+
+</head>
+<body>
+
+<div class="layout">
+<div id="controls"><!-- DO NOT EDIT --></div>
+<div id="currentSlide"><!-- DO NOT EDIT --></div>
+<div id="header">
+<div class="scale" id="logo" style="background:url('.elgg_get_page_owner_entity()->getIcon('small').') no-repeat;"><!-- DO NOT EDIT --></div>
+</div>
+<div id="footer">
+<h1>'.$title.'</h1>
+<h2>'.hsc($conf['title']).' &#8226; '.strftime($conf['dformat'],$INFO['lastmod']).'</h2>
+<div class="scale" id="logo_bottom"><!-- DO NOT EDIT --></div>
+</div>
+</div>
+<div class="presentation">
+';
+ }
+
+ /**
+ * Closes the document
+ */
+ function document_end(){
+ // we don't care for footnotes and toc
+ // but cleanup is nice
+ $this->doc = preg_replace('#<p>\s*</p>#','',$this->doc);
+
+ if($this->slideopen){
+ $this->doc .= '</div>'.DOKU_LF; //close previous slide
+ }
+ if($this->notesopen){
+ $this->doc .= '</div>'.DOKU_LF; //close notes
+ $this->notesopen = false;
+ }
+ $this->doc .= '</div>
+ </body>
+ </html>';
+ }
+
+ /**
+ * This is what creates new slides
+ *
+ * A new slide is started for each H2 header
+ */
+ function header($text, $level, $pos) {
+ if($level == 1){
+ if(!$this->slideopen){
+ $this->s5reloaded_init($text); // this is the first slide
+ $level = 2;
+ }else{
+ return;
+ }
+ }
+
+ if($level == 2){
+ $this->last_h1 = $text;
+ }
+ if($level > 1){
+ //if($level == 2){
+ if($this->notesopen){
+ $this->doc .= '</div>'.DOKU_LF; //close notes
+ $this->notesopen = false;
+ }
+ $this->doc .= '<div class="slide">'.DOKU_LF;
+ $this->slideopen = true;
+ }
+ $this->doc .= '<h1>';
+ if ($this->last_h1 && $level > 2) {
+ $this->doc .= $this->_xmlEntities($this->last_h1.": ".$text);
+ $this->doc .= '</h1>'.DOKU_LF;
+ /* $this->doc .= '<h'.($level-1).'> ';
+ $this->doc .= '</h'.($level-1).'>'.DOKU_LF;
+ $this->doc .= '<h'.($level-1).'>';
+ $this->doc .= $text;
+ $this->doc .= '</h'.($level-1).'>'.DOKU_LF;*/
+ }
+ else {
+ $this->doc .= $this->_xmlEntities($text);
+ $this->doc .= '</h1>'.DOKU_LF;
+ }
+ }
+
+ /**
+ * Top-Level Sections are slides
+ */
+ function section_open($level) {
+// if($level < 3){
+// $this->doc .= '<div class="slidecontent">'.DOKU_LF;
+// }else{
+// $this->doc .= '<div>'.DOKU_LF;
+// }
+ // we don't use it
+ }
+
+ /**
+ * Throw away footnote
+ */
+ function footnote_close() {
+ // recover footnote into the stack and restore old content
+ $footnote = $this->doc;
+ $this->doc = $this->store;
+ $this->store = '';
+ }
+
+ /**
+ * No acronyms in a presentation
+ */
+ function acronym($acronym){
+ $this->doc .= $this->_xmlEntities($acronym);
+ }
+
+ /**
+ * A line stops the slide and start the handout section
+ */
+ function hr() {
+ $this->doc .= '<div class="notes">'.DOKU_LF;
+ $this->notesopen = true;
+ }
+
+ /**
+ * Renders internal and external media
+ */
+ function _media ($src, $title=NULL, $align=NULL, $width=NULL,
+ $height=NULL, $cache=NULL, $render = true) {
+
+ $ret = '';
+
+ list($ext,$mime,$dl) = mimetype($src);
+ if(substr($mime,0,5) == 'image'){
+ // first get the $title
+ if (!is_null($title)) {
+ $title = $this->_xmlEntities($title);
+ }elseif($ext == 'jpg' || $ext == 'jpeg'){
+ //try to use the caption from IPTC/EXIF
+ require_once(DOKU_INC.'inc/JpegMeta.php');
+ $jpeg =& new JpegMeta(mediaFN($src));
+ if($jpeg !== false) $cap = $jpeg->getTitle();
+ if($cap){
+ $title = $this->_xmlEntities($cap);
+ }
+ }
+ if (!$render) {
+ // if the picture is not supposed to be rendered
+ // return the title of the picture
+ if (!$title) {
+ // just show the sourcename
+ $title = $this->_xmlEntities(basename(noNS($src)));
+ }
+ return $title;
+ }
+ //add image tag
+ $ret .= '<img src="'.ml($src,array('w'=>$width,'h'=>$height,'cache'=>$cache)).'"';
+ $ret .= ' class="scale"';
+
+ // make left/right alignment for no-CSS view work (feeds)
+ if($align == 'right') $ret .= ' align="right"';
+ if($align == 'left') $ret .= ' align="left"';
+
+ if ($title) {
+ $ret .= ' title="' . $title . '"';
+ $ret .= ' alt="' . $title .'"';
+ }else{
+ $ret .= ' alt=""';
+ }
+
+ if ( !is_null($width) )
+ $ret .= ' width="'.$this->_xmlEntities($width).'"';
+
+ if ( !is_null($height) )
+ $ret .= ' height="'.$this->_xmlEntities($height).'"';
+
+ $ret .= ' />';
+
+ }elseif($mime == 'application/x-shockwave-flash'){
+ if (!$render) {
+ // if the flash is not supposed to be rendered
+ // return the title of the flash
+ if (!$title) {
+ // just show the sourcename
+ $title = basename(noNS($src));
+ }
+ return $this->_xmlEntities($title);
+ }
+
+ $att = array();
+ $att['class'] = "media$align";
+ if($align == 'right') $att['align'] = 'right';
+ if($align == 'left') $att['align'] = 'left';
+ $ret .= html_flashobject(ml($src,array('cache'=>$cache)),$width,$height,
+ array('quality' => 'high'),
+ null,
+ $att,
+ $this->_xmlEntities($title));
+ }elseif($title){
+ // well at least we have a title to display
+ $ret .= $this->_xmlEntities($title);
+ }else{
+ // just show the sourcename
+ $ret .= $this->_xmlEntities(basename(noNS($src)));
+ }
+
+ return $ret;
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif
new file mode 100644
index 000000000..0c506e397
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php
new file mode 100644
index 000000000..40b1d0630
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * S5 Reloaded Plugin: Display a Wiki page as S5 reloaded slideshow presentation
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Tomas Alonso <t.alonso@oan.es>, Andreas Gohr <andi@splitbrain.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class syntax_plugin_s5reloaded extends DokuWiki_Syntax_Plugin {
+
+ /**
+ * What kind of syntax are we?
+ */
+ function getType(){
+ return 'substition';
+ }
+
+ /**
+ * What about paragraphs?
+ */
+ function getPType(){
+ return 'normal';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ function getSort(){
+ return 800;
+ }
+
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('~~SLIDESHOW[^~]*~~',$mode,'plugin_s5reloaded');
+ }
+
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ if($match!='~~SLIDESHOW~~') return array(trim(substr($match,11,-2)));
+ return array();
+ }
+
+ /**
+ * Create output
+ */
+ function render($format, &$renderer, $data) {
+ global $ID;
+ if($format != 'xhtml') return false;
+
+ $renderer->doc .= '<a href="'.exportlink($ID, 's5reloaded',sizeof($data)?array('s5theme'=>$data[0]):null).'" title="'.$this->getLang('view').'">';
+ $renderer->doc .= '<img src="'.DOKU_BASE.'lib/plugins/s5reloaded/screen.gif" align="right" alt="'.$this->getLang('view').'" width="48" height="48" />';
+ $renderer->doc .= '</a>';
+ return true;
+ }
+}
+
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt
new file mode 100755
index 000000000..1a17182fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt
@@ -0,0 +1,29 @@
+Software License Agreement (BSD License)
+
+Copyright (c) 2007, Scott Schiller (schillmania.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 schillmania.com nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission from schillmania.com.
+
+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/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3 b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3
new file mode 100755
index 000000000..43cc6135d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js
new file mode 100644
index 000000000..9095b5de3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js
@@ -0,0 +1,658 @@
+/*
+ SoundManager 2: Javascript Sound for the Web.
+ --------------------------------------------------
+ http://www.schillmania.com/projects/soundmanager2/
+
+ Copyright (c) 2007, Scott Schiller. All rights reserved.
+ Code licensed under the BSD License:
+ http://www.schillmania.com/projects/soundmanager2/license.txt
+
+ Beta V2.0b.20070118
+*/
+
+function SoundManager(smURL,smID) {
+ var self = this;
+ this.enabled = false;
+ this.o = null;
+ this.url = (smURL||s5Path+'ui/audio_support/soundmanager2.swf');
+ this.id = (smID||'sm2movie');
+ this.oMC = null;
+ this.sounds = [];
+ this.soundIDs = [];
+ this.allowPolling = true; // allow flash to poll for status update (required for "while playing", "progress" etc. to work.)
+ this.isIE = (navigator.userAgent.match(/MSIE/));
+ this.isSafari = (navigator.userAgent.match(/safari/i));
+ this._didAppend = false;
+ this._didInit = false;
+ this._disabled = false;
+ this.version = 'V2.0b.20070118';
+
+ this.defaultOptions = {
+ // -----------------
+ 'debugMode': false, // enable debug/status messaging, handy for development/troubleshooting - will be written to a DIV with an ID of "soundmanager-debug", you can use CSS to make it pretty
+ 'autoLoad': false, // enable automatic loading (otherwise .load() will be called on demand with .play(), the latter being nicer on bandwidth - if you want to .load yourself, you also can)
+ 'stream': true, // allows playing before entire file has loaded (recommended)
+ 'autoPlay': false, // enable playing of file as soon as possible (much faster if "stream" is true)
+ 'onid3': null, // callback function for "ID3 data is added/available"
+ 'onload': null, // callback function for "load finished"
+ 'whileloading': null, // callback function for "download progress update" (X of Y bytes received)
+ 'onplay': null, // callback for "play" start
+ 'whileplaying': null, // callback during play (position update)
+ 'onstop': null, // callback for "user stop"
+ 'onfinish': null, // callback function for "sound finished playing"
+ 'onbeforefinish': null, // callback for "before sound finished playing (at [time])"
+ 'onbeforefinishtime': 2000, // offset (milliseconds) before end of sound to trigger beforefinish (eg. 1000 msec = 1 second)
+ 'onbeforefinishcomplete':null, // function to call when said sound finishes playing
+ 'onjustbeforefinish':null, // callback for [n] msec before end of current sound
+ 'onjustbeforefinishtime':200, // [n] - if not using, set to 0 (or null handler) and event will not fire.
+ 'multiShot': true, // let sounds "restart" or layer on top of each other when played multiple times, rather than one-shot/one at a time
+ 'pan': 0, // "pan" settings, left-to-right, -100 to 100
+ 'volume': 100, // self-explanatory. 0-100, the latter being the max.
+ // -----------------
+ 'foo': 'bar' // you don't need to change this one - it's actually an intentional filler.
+ }
+
+ // --- public methods ---
+
+ this.getMovie = function(smID) {
+ // return self.isIE?window[smID]:document[smID];
+ return self.isIE?window[smID]:(self.isSafari?document[smID+'-embed']:document.getElementById(smID+'-embed'));
+ }
+
+ this.loadFromXML = function(sXmlUrl) {
+ try {
+ self.o._loadFromXML(sXmlUrl);
+ } catch(e) {
+ self._failSafely();
+ return true;
+ }
+ }
+
+ this.createSound = function(oOptions) {
+ if (!self._didInit) throw new Error('soundManager.createSound(): Not loaded yet - wait for soundManager.onload() before calling sound-related methods');
+ if (arguments.length==2) {
+ // function overloading in JS! :) ..assume simple createSound(id,url) use case
+ oOptions = {'id':arguments[0],'url':arguments[1]}
+ }
+ var thisOptions = self._mergeObjects(oOptions);
+ self._writeDebug('soundManager.createSound(): "<a href="#" onclick="soundManager.play(\''+thisOptions.id+'\');return false" title="play this sound">'+thisOptions.id+'</a>" ('+thisOptions.url+')');
+ if (self._idCheck(thisOptions.id,true)) {
+ self._writeDebug('sound '+thisOptions.id+' already defined - exiting');
+ return false;
+ }
+ self.sounds[thisOptions.id] = new SMSound(self,thisOptions);
+ self.soundIDs[self.soundIDs.length] = thisOptions.id;
+ try {
+ self.o._createSound(thisOptions.id,thisOptions.onjustbeforefinishtime);
+ } catch(e) {
+ self._failSafely();
+ return true;
+ }
+ if (thisOptions.autoLoad || thisOptions.autoPlay) self.sounds[thisOptions.id].load(thisOptions);
+ if (thisOptions.autoPlay) self.sounds[thisOptions.id].playState = 1; // we can only assume this sound will be playing soon.
+ }
+
+ this.load = function(sID,oOptions) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].load(oOptions);
+ }
+
+ this.unload = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].unload();
+ }
+
+ this.play = function(sID,oOptions) {
+ if (!self._idCheck(sID)) {
+ if (typeof oOptions != 'Object') oOptions = {url:oOptions}; // overloading use case: play('mySound','/path/to/some.mp3');
+ if (oOptions && oOptions.url) {
+ // overloading use case, creation + playing of sound: .play('someID',{url:'/path/to.mp3'});
+ self._writeDebug('soundController.play(): attempting to create "'+sID+'"');
+ oOptions.id = sID;
+ self.createSound(oOptions);
+ } else {
+ return false;
+ }
+ }
+ self.sounds[sID].play(oOptions);
+ }
+
+ this.start = this.play; // just for convenience
+
+ this.setPosition = function(sID,nMsecOffset) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].setPosition(nMsecOffset);
+ }
+
+ this.stop = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self._writeDebug('soundManager.stop('+sID+')');
+ self.sounds[sID].stop();
+ }
+
+ this.stopAll = function() {
+ for (var oSound in self.sounds) {
+ if (oSound instanceof SMSound) oSound.stop(); // apply only to sound objects
+ }
+ }
+
+ this.pause = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].pause();
+ }
+
+ this.resume = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].resume();
+ }
+
+ this.togglePause = function(sID) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].togglePause();
+ }
+
+ this.setPan = function(sID,nPan) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].setPan(nPan);
+ }
+
+ this.setVolume = function(sID,nVol) {
+ if (!self._idCheck(sID)) return false;
+ self.sounds[sID].setVolume(nVol);
+ }
+
+ this.setPolling = function(bPolling) {
+ if (!self.o || !self.allowPolling) return false;
+ self._writeDebug('soundManager.setPolling('+bPolling+')');
+ self.o._setPolling(bPolling);
+ }
+
+ this.disable = function() {
+ // destroy all functions
+ if (self._disabled) return false;
+ self._disabled = true;
+ self._writeDebug('soundManager.disable(): Disabling all functions - future calls will return false.');
+ for (var i=self.soundIDs.length; i--;) {
+ self._disableObject(self.sounds[self.soundIDs[i]]);
+ }
+ self.initComplete(); // fire "complete", despite fail
+ self._disableObject(self);
+ }
+
+ this.getSoundById = function(sID,suppressDebug) {
+ if (!sID) throw new Error('SoundManager.getSoundById(): sID is null/undefined');
+ var result = self.sounds[sID];
+ if (!result && !suppressDebug) {
+ self._writeDebug('"'+sID+'" is an invalid sound ID.');
+ // soundManager._writeDebug('trace: '+arguments.callee.caller);
+ }
+ return result;
+ }
+
+ this.onload = function() {
+ onloadSM2();
+ // window.onload() equivalent for SM2, ready to create sounds etc.
+ // this is a stub - you can override this in your own external script, eg. soundManager.onload = function() {}
+ // soundManager._writeDebug('<em>Warning</em>: soundManager.onload() is undefined.');
+ }
+
+ this.onerror = function() {
+ onerrorSM2();
+ // stub for user handler, called when SM2 fails to load/init
+ }
+
+ // --- "private" methods ---
+
+ this._idCheck = this.getSoundById;
+
+ this._disableObject = function(o) {
+ for (var oProp in o) {
+ if (typeof o[oProp] == 'function') o[oProp] = function(){return false;}
+ }
+ oProp = null;
+ }
+
+ this._failSafely = function() {
+ // exception handler for "object doesn't support this property or method"
+ var flashCPLink = 'http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html';
+ var fpgssTitle = 'You may need to whitelist this location/domain eg. file://C:/ or C:/ or mysite.com, or set ALWAYS ALLOW under the Flash Player Global Security Settings page. Note that this seems to apply only to file system viewing.';
+ var flashCPL = '<a href="'+flashCPLink+'" title="'+fpgssTitle+'">view/edit</a>';
+ var FPGSS = '<a href="'+flashCPLink+'" title="Flash Player Global Security Settings">FPGSS</a>';
+ if (!self._disabled) {
+ self._writeDebug('soundManager: JS-&gt;Flash communication failed. Possible causes: flash/browser security restrictions ('+flashCPL+'), insufficient browser/plugin support, or .swf not found');
+ self._writeDebug('Verify that the movie path of <em>'+self.url+'</em> is correct (<a href="'+self.url+'" title="If you get a 404/not found, fix it!">test link</a>)');
+ if (self._didAppend) {
+ if (!document.domain) {
+ self._writeDebug('Loading from local file system? (document.domain appears to be null, this location may need whitelisting by '+FPGSS+')');
+ self._writeDebug('Possible security/domain restrictions ('+flashCPL+'), should work when served by http on same domain');
+ }
+ // self._writeDebug('Note: Movie added via JS method, static object/embed in-page markup method may work instead.');
+ }
+ self.disable();
+ }
+ }
+
+ this._createMovie = function(smID,smURL) {
+ var useDOM = !self.isIE; // IE needs document.write() to work, long story short - lame
+ if (window.location.href.indexOf('debug=1')+1) self.defaultOptions.debugMode = true; // allow force of debug mode via URL
+ var html = ['<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="16" height="16" id="'+smID+'"><param name="movie" value="'+smURL+'"><param name="quality" value="high"><param name="allowScriptAccess" value="always" /></object>','<embed name="'+smID+'-embed" id="'+smID+'-embed" src="'+smURL+'" width="1" height="1" quality="high" allowScriptAccess="always" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed>'];
+ var debugID = 'soundmanager-debug';
+ var debugHTML = '<div id="'+debugID+'" style="display:'+(self.defaultOptions.debugMode?'block':'none')+'"></div>';
+ if (useDOM) {
+ self.oMC = document.createElement('div');
+ self.oMC.className = 'movieContainer';
+ // "hide" flash movie
+ self.oMC.style.position = 'absolute';
+ self.oMC.style.left = '-256px';
+ self.oMC.style.width = '1px';
+ self.oMC.style.height = '1px';
+ self.oMC.innerHTML = html[self.isIE?0:1];
+ var oTarget = (!self.isIE && document.body?document.body:document.getElementsByTagName('div')[0]);
+ oTarget.appendChild(self.oMC); // append to body here can throw "operation aborted" under IE
+ if (!document.getElementById(debugID)) {
+ var oDebug = document.createElement('div');
+ oDebug.id = debugID;
+ oDebug.style.display = (self.defaultOptions.debugMode?'block':'none');
+ oTarget.appendChild(oDebug);
+ }
+ oTarget = null;
+ } else {
+ // IE method - local file system, may cause strange JS error at line 53?
+ // I hate this method, but it appears to be the only one that will work (createElement works, but JS->Flash communication oddly fails when viewing locally.)
+ // Finally, IE doesn't do application/xhtml+xml yet (thus document.write() is still minimally acceptable here.)
+ if (document.getElementById(debugID)) debugHTML = ''; // avoid overwriting
+ document.write('<div style="position:absolute;left:-256px;top:-256px;width:1px;height:1px" class="movieContainer">'+html[self.isIE?0:1]+'</div>'+debugHTML);
+ }
+ self._didAppend = true;
+ self._writeDebug('-- SoundManager 2 Version '+self.version.substr(1)+' --');
+ self._writeDebug('soundManager._createMovie(): trying to load <a href="'+smURL+'" title="Test this link (404=bad)">'+smURL+'</a>');
+ }
+
+ this._writeDebug = function(sText) {
+ if (!self.defaultOptions.debugMode) return false;
+ var sDID = 'soundmanager-debug';
+ try {
+ var o = document.getElementById(sDID);
+ if (!o) {
+ // attempt to create soundManager debug element
+ var oNew = document.createElement('div');
+ oNew.id = sDID;
+ // o = document.body.appendChild(oNew);
+ o = null;
+ if (!o) return false;
+ }
+ var p = document.createElement('div');
+ p.innerHTML = sText;
+ // o.appendChild(p); // top-to-bottom
+ o.insertBefore(p,o.firstChild); // bottom-to-top
+ } catch(e) {
+ // oh well
+ }
+ o = null;
+ }
+
+ this._debug = function() {
+ self._writeDebug('soundManager._debug(): sounds by id/url:');
+ for (var i=0,j=self.soundIDs.length; i<j; i++) {
+ self._writeDebug(self.sounds[self.soundIDs[i]].sID+' | '+self.sounds[self.soundIDs[i]].url);
+ }
+ }
+
+ this._mergeObjects = function(oMain,oAdd) {
+ // non-destructive merge
+ var o1 = oMain;
+ var o2 = (typeof oAdd == 'undefined'?self.defaultOptions:oAdd);
+ for (var o in o2) {
+ if (typeof o1[o] == 'undefined') o1[o] = o2[o];
+ }
+ return o1;
+ }
+
+ this.createMovie = function(sURL) {
+ self._writeDebug('soundManager.createMovie('+(sURL||'')+')');
+ if (sURL) self.url = sURL;
+ self._initMovie();
+ }
+
+ this._initMovie = function() {
+ // attempt to get, or create, movie
+ if (self.o) return false; // pre-init may have fired this function before window.onload(), may already exist
+ self.o = self.getMovie(self.id); // try to get flash movie (inline markup)
+ if (!self.o) {
+ // try to create
+ self._createMovie(self.id,self.url);
+ self.o = self.getMovie(self.id);
+ }
+ if (!self.o) {
+ self._writeDebug('SoundManager(): Could not find object/embed element. Sound will be disabled.');
+ self.disable();
+ } else {
+ self._writeDebug('SoundManager(): Got '+self.o.nodeName+' element ('+(self._didAppend?'created via JS':'static HTML')+')');
+ }
+ }
+
+ this.initComplete = function() {
+ if (self._didInit) return false;
+ self._didInit = true;
+ self._writeDebug('-- SoundManager 2 '+(self._disabled?'failed to load':'loaded')+' ('+(self._disabled?'security/load error':'OK')+') --');
+ if (self._disabled) {
+ self._writeDebug('soundManager.initComplete(): calling soundManager.onerror()');
+ self.onerror.apply(window);
+ return false;
+ }
+ self._writeDebug('soundManager.initComplete(): calling soundManager.onload()');
+ try {
+ // call user-defined "onload", scoped to window
+ self.onload.apply(window);
+ } catch(e) {
+ // something broke (likely JS error in user function)
+ self._writeDebug('soundManager.onload() threw an exception: '+e.message);
+ throw e; // (so browser/console gets message)
+ }
+ self._writeDebug('soundManager.onload() complete');
+ }
+
+ this.init = function() {
+ // called after onload()
+ self._initMovie();
+ // event cleanup
+ if (window.removeEventListener) {
+ window.removeEventListener('load',self.beginInit,false);
+ } else if (window.detachEvent) {
+ window.detachEvent('onload',self.beginInit);
+ }
+ try {
+ self.o._externalInterfaceTest(); // attempt to talk to Flash
+ self._writeDebug('Flash ExternalInterface call (JS -&gt; Flash) succeeded.');
+ if (!self.allowPolling) self._writeDebug('Polling (whileloading/whileplaying support) is disabled.');
+ self.setPolling(true);
+ self.enabled = true;
+ } catch(e) {
+ self._failSafely();
+ self.initComplete();
+ return false;
+ }
+ self.initComplete();
+ }
+
+ this.beginInit = function() {
+ self._initMovie();
+ setTimeout(self.init,1000); // some delay required, otherwise JS<->Flash/ExternalInterface communication fails under non-IE (?!)
+ }
+
+ this.destruct = function() {
+ if (self.isSafari) {
+ /* --
+ Safari 1.3.2 (v312.6)/OSX 10.3.9 and perhaps newer will crash if a sound is actively loading when user exits/refreshes/leaves page
+ (Apparently related to ExternalInterface making calls to an unloading/unloaded page?)
+ Unloading sounds (detaching handlers and so on) may help to prevent this
+ -- */
+ for (var i=self.soundIDs.length; i--;) {
+ if (self.sounds[self.soundIDs[i]].readyState == 1) self.sounds[self.soundIDs[i]].unload();
+ }
+ }
+ self.disable();
+ // self.o = null;
+ // self.oMC = null;
+ }
+
+}
+
+function SMSound(oSM,oOptions) {
+ var self = this;
+ var sm = oSM;
+ this.sID = oOptions.id;
+ this.url = oOptions.url;
+ this.options = sm._mergeObjects(oOptions);
+ this.id3 = {
+ /*
+ Name/value pairs set via Flash when available - see reference for names:
+ http://livedocs.macromedia.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001567.html
+ (eg., this.id3.songname or this.id3['songname'])
+ */
+ }
+
+ self.resetProperties = function(bLoaded) {
+ self.bytesLoaded = null;
+ self.bytesTotal = null;
+ self.position = null;
+ self.duration = null;
+ self.durationEstimate = null;
+ self.loaded = false;
+ self.loadSuccess = null;
+ self.playState = 0;
+ self.paused = false;
+ self.readyState = 0; // 0 = uninitialised, 1 = loading, 2 = failed/error, 3 = loaded/success
+ self.didBeforeFinish = false;
+ self.didJustBeforeFinish = false;
+ }
+
+ self.resetProperties();
+
+ // --- public methods ---
+
+ this.load = function(oOptions) {
+ self.loaded = false;
+ self.loadSuccess = null;
+ self.readyState = 1;
+ self.playState = (oOptions.autoPlay||false); // if autoPlay, assume "playing" is true (no way to detect when it actually starts in Flash unless onPlay is watched?)
+ var thisOptions = sm._mergeObjects(oOptions);
+ if (typeof thisOptions.url == 'undefined') thisOptions.url = self.url;
+ try {
+ sm._writeDebug('loading '+thisOptions.url);
+ sm.o._load(self.sID,thisOptions.url,thisOptions.stream,thisOptions.autoPlay,thisOptions.whileloading?1:0);
+ } catch(e) {
+ sm._writeDebug('SMSound().load(): JS-&gt;Flash communication failed.');
+ }
+ }
+
+ this.unload = function() {
+ // Flash 8/AS2 can't "close" a stream - fake it by loading an empty MP3
+ sm._writeDebug('SMSound().unload()');
+ self.setPosition(0); // reset current sound positioning
+ sm.o._unload(self.sID,s5Path+'ui/audio_support/null.mp3');
+ // reset load/status flags
+ self.resetProperties();
+ }
+
+ this.play = function(oOptions) {
+ if (!oOptions) oOptions = {};
+
+ // --- TODO: make event handlers specified via oOptions only apply to this instance of play() (eg. onfinish applies but will reset to default on finish)
+ if (oOptions.onfinish) self.options.onfinish = oOptions.onfinish;
+ if (oOptions.onbeforefinish) self.options.onbeforefinish = oOptions.onbeforefinish;
+ if (oOptions.onjustbeforefinish) self.options.onjustbeforefinish = oOptions.onjustbeforefinish;
+ // ---
+
+ var thisOptions = sm._mergeObjects(oOptions);
+ if (self.playState == 1) {
+ // var allowMulti = typeof oOptions.multiShot!='undefined'?oOptions.multiShot:sm.defaultOptions.multiShot;
+ var allowMulti = thisOptions.multiShot;
+ if (!allowMulti) {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'" already playing? (one-shot)');
+ return false;
+ } else {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'" already playing (multi-shot)');
+ }
+ }
+ if (!self.loaded) {
+ if (self.readyState == 0) {
+ sm._writeDebug('SMSound.play(): .play() before load request. Attempting to load "'+self.sID+'"');
+ // try to get this sound playing ASAP
+ thisOptions.stream = true;
+ thisOptions.autoPlay = true;
+ // TODO: need to investigate when false, double-playing
+ // if (typeof oOptions.autoPlay=='undefined') thisOptions.autoPlay = true; // only set autoPlay if unspecified here
+ self.load(thisOptions); // try to get this sound playing ASAP
+ } else if (self.readyState == 2) {
+ sm._writeDebug('SMSound.play(): Could not load "'+self.sID+'" - exiting');
+ return false;
+ } else {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'" is loading - attempting to play..');
+ }
+ } else {
+ sm._writeDebug('SMSound.play(): "'+self.sID+'"');
+ }
+ if (self.paused) {
+ self.resume();
+ } else {
+ self.playState = 1;
+ self.position = (thisOptions.offset||0);
+ if (thisOptions.onplay) thisOptions.onplay.apply(self);
+ self.setVolume(thisOptions.volume);
+ self.setPan(thisOptions.pan);
+ if (!thisOptions.autoPlay) {
+ sm._writeDebug('starting sound '+self.sID);
+ sm.o._start(self.sID,thisOptions.loop||1,self.position); // TODO: verify !autoPlay doesn't cause issue
+ }
+ }
+ }
+
+ this.start = this.play; // just for convenience
+
+ this.stop = function(bAll) {
+ if (self.playState == 1) {
+ self.playState = 0;
+ self.paused = false;
+ if (sm.defaultOptions.onstop) sm.defaultOptions.onstop.apply(self);
+ sm.o._stop(self.sID);
+ }
+ }
+
+ this.setPosition = function(nMsecOffset) {
+ // sm._writeDebug('setPosition('+nMsecOffset+')');
+ sm.o._setPosition(self.sID,nMsecOffset/1000,self.paused||!self.playState); // if paused or not playing, will not resume (by playing)
+ }
+
+ this.pause = function() {
+ if (self.paused) return false;
+ sm._writeDebug('SMSound.pause()');
+ self.paused = true;
+ sm.o._pause(self.sID);
+ }
+
+ this.resume = function() {
+ if (!self.paused) return false;
+ sm._writeDebug('SMSound.resume()');
+ self.paused = false;
+ sm.o._pause(self.sID); // flash method is toggle-based (pause/resume)
+ }
+
+ this.togglePause = function() {
+ // if playing, pauses - if paused, resumes playing.
+ sm._writeDebug('SMSound.togglePause()');
+ if (!self.playState) {
+ // self.setPosition();
+ self.play({offset:self.position/1000});
+ return false;
+ }
+ if (self.paused) {
+ sm._writeDebug('SMSound.togglePause(): resuming..');
+ self.resume();
+ } else {
+ sm._writeDebug('SMSound.togglePause(): pausing..');
+ self.pause();
+ }
+ }
+
+ this.setPan = function(nPan) {
+ if (typeof nPan == 'undefined') nPan = 0;
+ sm.o._setPan(self.sID,nPan);
+ self.options.pan = nPan;
+ }
+
+ this.setVolume = function(nVol) {
+ if (typeof nVol == 'undefined') nVol = 100;
+ sm.o._setVolume(self.sID,nVol);
+ self.options.volume = nVol;
+ }
+
+ // --- "private" methods called by Flash ---
+
+ this._whileloading = function(nBytesLoaded,nBytesTotal,nDuration) {
+ self.bytesLoaded = nBytesLoaded;
+ self.bytesTotal = nBytesTotal;
+ self.duration = nDuration;
+ self.durationEstimate = parseInt((self.bytesTotal/self.bytesLoaded)*self.duration); // estimate total time (will only be accurate with CBR MP3s.)
+ if (self.readyState != 3 && self.options.whileloading) self.options.whileloading.apply(self);
+ // soundManager._writeDebug('duration/durationEst: '+self.duration+' / '+self.durationEstimate);
+ }
+
+ this._onid3 = function(oID3PropNames,oID3Data) {
+ // oID3PropNames: string array (names)
+ // ID3Data: string array (data)
+ sm._writeDebug('SMSound()._onid3(): "'+this.sID+'" ID3 data received.');
+ var oData = [];
+ for (var i=0,j=oID3PropNames.length; i<j; i++) {
+ oData[oID3PropNames[i]] = oID3Data[i];
+ // sm._writeDebug(oID3PropNames[i]+': '+oID3Data[i]);
+ }
+ self.id3 = sm._mergeObjects(self.id3,oData);
+ if (self.options.onid3) self.options.onid3.apply(self);
+ }
+
+ this._whileplaying = function(nPosition) {
+ if (isNaN(nPosition) || nPosition == null) return false; // Flash may return NaN at times
+ self.position = nPosition;
+ if (self.playState == 1) {
+ if (self.options.whileplaying) self.options.whileplaying.apply(self); // flash may call after actual finish
+ if (self.loaded && self.options.onbeforefinish && self.options.onbeforefinishtime && !self.didBeforeFinish && self.duration-self.position <= self.options.onbeforefinishtime) {
+ sm._writeDebug('duration-position &lt;= onbeforefinishtime: '+self.duration+' - '+self.position+' &lt= '+self.options.onbeforefinishtime+' ('+(self.duration-self.position)+')');
+ self._onbeforefinish();
+ }
+ }
+ }
+
+ this._onload = function(bSuccess) {
+ bSuccess = (bSuccess==1?true:false);
+ sm._writeDebug('SMSound._onload(): "'+self.sID+'"'+(bSuccess?' loaded.':' failed to load (or loaded from cache - weird bug) - [<a href="'+self.url+'">test URL</a>]'));
+ self.loaded = bSuccess;
+ self.loadSuccess = bSuccess;
+ self.readyState = bSuccess?3:2;
+ if (self.options.onload) self.options.onload.apply(self);
+ }
+
+ this._onbeforefinish = function() {
+ if (!self.didBeforeFinish) {
+ self.didBeforeFinish = true;
+ if (self.options.onbeforefinish) self.options.onbeforefinish.apply(self);
+ }
+ }
+
+ this._onjustbeforefinish = function(msOffset) {
+ // msOffset: "end of sound" delay actual value (eg. 200 msec, value at event fire time was 187)
+ if (!self.didJustBeforeFinish) {
+ self.didJustBeforeFinish = true;
+ soundManager._writeDebug('SMSound._onjustbeforefinish()');
+ if (self.options.onjustbeforefinish) self.options.onjustbeforefinish.apply(self);;
+ }
+ }
+
+ this._onfinish = function() {
+ // sound has finished playing
+ sm._writeDebug('SMSound._onfinish(): "'+self.sID+'" finished playing');
+ self.playState = 0;
+ self.paused = false;
+ if (self.options.onfinish) self.options.onfinish.apply(self);
+ if (self.options.onbeforefinishcomplete) self.options.onbeforefinishcomplete.apply(self);
+ // reset some state items
+ self.setPosition(0);
+ self.didBeforeFinish = false;
+ self.didJustBeforeFinish = false;
+ }
+
+}
+
+var soundManager = new SoundManager();
+
+// attach onload handler
+if (window.addEventListener) {
+ window.addEventListener('load',soundManager.beginInit,false);
+ window.addEventListener('beforeunload',soundManager.destruct,false);
+} else if (window.attachEvent) {
+ window.attachEvent('onload',soundManager.beginInit);
+ window.attachEvent('beforeunload',soundManager.destruct);
+} else {
+ // no add/attachevent support - safe to assume no JS->Flash either.
+ soundManager.disable();
+} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf
new file mode 100755
index 000000000..234a83343
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif
new file mode 100644
index 000000000..909490511
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif
new file mode 100644
index 000000000..938a0795c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif
new file mode 100644
index 000000000..6fe83f2c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css
new file mode 100644
index 000000000..48b1657fd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css
@@ -0,0 +1,173 @@
+/* Blue Theme 2004 by Martin Hense ::: www.lounge7.de */
+
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: #000294 url(bluebottom.gif) right bottom no-repeat; color: #fff; font-size: 1.8em;}
+:link, :visited {text-decoration: none; color: #F8B73E;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #AAABF8;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+pre code {display: block;}
+ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+li {margin-top: 0.75em; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: #005; color: #9183BF;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0; height: 36px; border-top: 1px solid #08093F; background: #000136 url(bluefooter.gif) top right no-repeat; }
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide {
+ font-family: georgia, Times, 'Times New Roman', serif;
+ background: transparent url(bluebg.gif) repeat-x;
+}
+.slide h1 {position: absolute; left: 87px; z-index: 1;
+ white-space: nowrap;
+ text-transform: capitalize;
+ top: 1em; width: 80%;
+ margin: 0 auto; text-align: center; padding: 0;
+ font: 150%/1em georgia, Times, 'Times New Roman', serif;
+ color: #fff; background: transparent;
+ }
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #9183BF; font-family: Verdana, Helvetica, sans-serif;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 1.33em; padding: 0;
+ white-space: normal;
+ background: transparent;
+margin: 0 auto; width: 75%; text-align: center;
+ font: 2.5em Georgia, Times, 'Times New Roman', serif; height: 281px;
+ color: #fff;}
+#slide0 h3 {font-size: 1.5em;}
+#slide0 h4 {font-size: 1em;}
+#slide0 h3, #slide0 h4, #slide0 p {margin: 0; text-align: center; color: #fff;}
+#slide0 p {margin-top: 0.7em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif
new file mode 100644
index 000000000..5f448a16f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css
new file mode 100644
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc
new file mode 100644
index 000000000..4d90c87a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'v11rc1/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css
new file mode 100644
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css
new file mode 100644
index 000000000..f5c2666b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css
@@ -0,0 +1,156 @@
+/* Following are the presentation styles -- edit away! */
+
+body {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;}
+:link, :visited {text-decoration: none; color: #00C;}
+#controls :active {color: #88A !important;}
+#controls :focus {outline: 1px dotted #227;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+.slide code.bad, code del {color: red;}
+.slide code.old {color: silver;}
+.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+.slide pre code {display: block;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+.slide img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: #005; color: #AAB;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
+ font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;
+ color: #DDE; background: #005;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #77B;}
+
+.incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;}
+img.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css
new file mode 100644
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css
new file mode 100644
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css
new file mode 100644
index 000000000..74f0fdfba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 2em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc
new file mode 100644
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png
new file mode 100644
index 000000000..653814eef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css
new file mode 100644
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css
new file mode 100644
index 000000000..c004defcd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css
@@ -0,0 +1,163 @@
+/**
+ * Theme: dokuwiki
+ * @author Eric A. Meyer (http://meyerweb.com/) [default theme]
+ * @author Anika Henke <a.c.henke@arcor.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+body {background: #fff url(logo.png) top right no-repeat; color: #000; font-size: 1.9em;}
+:link, :visited {text-decoration: none; color: #436976;font-style:italic;}
+#controls :active {color: #436976 !important;}
+#controls :focus {outline: 1px dotted #436976;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0; font-family: Verdana, Helvetica, sans-serif;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote em {font-style: normal;}
+blockquote strong {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote strong em {font-style: italic;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: #000;}
+.slide pre {padding: 0.5em; margin: 0.25em 0 0.5em 0.5em; color: #000; font-size: 80%;background:#dee7ec;border:1px dashed #8cacbb;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+
+div#header, div#footer {background: #dee7ec; color: #000;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #dee7ec url(logo.png) top right no-repeat;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;border-top:1px solid #8cacbb;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.1em; left: 1.5%; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 25px; white-space: nowrap;
+ font: bold 150%/1em Verdana, Helvetica, sans-serif;
+ color: #436976; background: inherit;}
+.slide h2 {font-size: 140%;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #436976;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0;
+ font: bold 2em Verdana, Helvetica, sans-serif; white-space: normal;
+ color: #436976; background: transparent;
+ /*letter-spacing:0.25em; border-bottom:2px dashed #f90;border-right:2px dashed #f90;*/}
+#slide0 h2 {font: bold 1.5em Verdana, Helvetica, sans-serif; margin: 0.25em;
+ color: #638c9c; background: transparent;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+img{border: none;}
+
+ul li {list-style-type: square}
+li {color: #436976; font-weight: bold; }
+li div.li {color: #000; font-weight:normal; }
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css
new file mode 100644
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css
new file mode 100644
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE
new file mode 100644
index 000000000..6d1340dbc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+
+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/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js
new file mode 100644
index 000000000..53ea36f64
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js
@@ -0,0 +1,136 @@
+// script.aculo.us builder.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Builder = {
+ NODEMAP: {
+ AREA: 'map',
+ CAPTION: 'table',
+ COL: 'table',
+ COLGROUP: 'table',
+ LEGEND: 'fieldset',
+ OPTGROUP: 'select',
+ OPTION: 'select',
+ PARAM: 'object',
+ TBODY: 'table',
+ TD: 'table',
+ TFOOT: 'table',
+ TH: 'table',
+ THEAD: 'table',
+ TR: 'table'
+ },
+ // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
+ // due to a Firefox bug
+ node: function(elementName) {
+ elementName = elementName.toUpperCase();
+
+ // try innerHTML approach
+ var parentTag = this.NODEMAP[elementName] || 'div';
+ var parentElement = document.createElement(parentTag);
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
+ } catch(e) {}
+ var element = parentElement.firstChild || null;
+
+ // see if browser added wrapping tags
+ if(element && (element.tagName.toUpperCase() != elementName))
+ element = element.getElementsByTagName(elementName)[0];
+
+ // fallback to createElement approach
+ if(!element) element = document.createElement(elementName);
+
+ // abort if nothing could be created
+ if(!element) return;
+
+ // attributes (or text)
+ if(arguments[1])
+ if(this._isStringOrNumber(arguments[1]) ||
+ (arguments[1] instanceof Array) ||
+ arguments[1].tagName) {
+ this._children(element, arguments[1]);
+ } else {
+ var attrs = this._attributes(arguments[1]);
+ if(attrs.length) {
+ try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+ parentElement.innerHTML = "<" +elementName + " " +
+ attrs + "></" + elementName + ">";
+ } catch(e) {}
+ element = parentElement.firstChild || null;
+ // workaround firefox 1.0.X bug
+ if(!element) {
+ element = document.createElement(elementName);
+ for(attr in arguments[1])
+ element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
+ }
+ if(element.tagName.toUpperCase() != elementName)
+ element = parentElement.getElementsByTagName(elementName)[0];
+ }
+ }
+
+ // text, or array of children
+ if(arguments[2])
+ this._children(element, arguments[2]);
+
+ return DOKUid(element);
+ },
+ _text: function(text) {
+ return document.createTextNode(text);
+ },
+
+ ATTR_MAP: {
+ 'className': 'class',
+ 'htmlFor': 'for'
+ },
+
+ _attributes: function(attributes) {
+ var attrs = [];
+ for(attribute in attributes)
+ attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
+ '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
+ return attrs.join(" ");
+ },
+ _children: function(element, children) {
+ if(children.tagName) {
+ element.appendChild(children);
+ return;
+ }
+ if(typeof children=='object') { // array can hold nodes and text
+ children.flatten().each( function(e) {
+ if(typeof e=='object')
+ element.appendChild(e);
+ else
+ if(Builder._isStringOrNumber(e))
+ element.appendChild(Builder._text(e));
+ });
+ } else
+ if(Builder._isStringOrNumber(children))
+ element.appendChild(Builder._text(children));
+ },
+ _isStringOrNumber: function(param) {
+ return(typeof param=='string' || typeof param=='number');
+ },
+ build: function(html) {
+ var element = this.node('div');
+ DOKUid(element).update(html.strip());
+ return element.down();
+ },
+ dump: function(scope) {
+ if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
+
+ var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
+ "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
+ "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
+ "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
+ "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
+ "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
+
+ tags.each( function(tag){
+ scope[tag] = function() {
+ return Builder.node.apply(Builder, [tag].concat($A(arguments)));
+ };
+ });
+ }
+}; \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js
new file mode 100644
index 000000000..eb9c4c08a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js
@@ -0,0 +1,965 @@
+// script.aculo.us controls.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2009 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
+// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com)
+// Contributors:
+// Richard Livsey
+// Rahul Bhargava
+// Rob Wills
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// Autocompleter.Base handles all the autocompletion functionality
+// that's independent of the data source for autocompletion. This
+// includes drawing the autocompletion menu, observing keyboard
+// and mouse events, and similar.
+//
+// Specific autocompleters need to provide, at the very least,
+// a getUpdatedChoices function that will be invoked every time
+// the text inside the monitored textbox changes. This method
+// should get the text for which to provide autocompletion by
+// invoking this.getToken(), NOT by directly accessing
+// this.element.value. This is to allow incremental tokenized
+// autocompletion. Specific auto-completion logic (AJAX, etc)
+// belongs in getUpdatedChoices.
+//
+// Tokenized incremental autocompletion is enabled automatically
+// when an autocompleter is instantiated with the 'tokens' option
+// in the options parameter, e.g.:
+// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
+// will incrementally autocomplete with a comma as the token.
+// Additionally, ',' in the above example can be replaced with
+// a token array, e.g. { tokens: [',', '\n'] } which
+// enables autocompletion on multiple tokens. This is most
+// useful when one of the tokens is \n (a newline), as it
+// allows smart autocompletion after linebreaks.
+
+if(typeof Effect == 'undefined')
+ throw("controls.js requires including script.aculo.us' effects.js library");
+
+var Autocompleter = { };
+Autocompleter.Base = Class.create({
+ baseInitialize: function(element, update, options) {
+ element = DOKUid(element);
+ this.element = element;
+ this.update = DOKUid(update);
+ this.hasFocus = false;
+ this.changed = false;
+ this.active = false;
+ this.index = 0;
+ this.entryCount = 0;
+ this.oldElementValue = this.element.value;
+
+ if(this.setOptions)
+ this.setOptions(options);
+ else
+ this.options = options || { };
+
+ this.options.paramName = this.options.paramName || this.element.name;
+ this.options.tokens = this.options.tokens || [];
+ this.options.frequency = this.options.frequency || 0.4;
+ this.options.minChars = this.options.minChars || 1;
+ this.options.onShow = this.options.onShow ||
+ function(element, update){
+ if(!update.style.position || update.style.position=='absolute') {
+ update.style.position = 'absolute';
+ Position.clone(element, update, {
+ setHeight: false,
+ offsetTop: element.offsetHeight
+ });
+ }
+ Effect.Appear(update,{duration:0.15});
+ };
+ this.options.onHide = this.options.onHide ||
+ function(element, update){ new Effect.Fade(update,{duration:0.15}) };
+
+ if(typeof(this.options.tokens) == 'string')
+ this.options.tokens = new Array(this.options.tokens);
+ // Force carriage returns as token delimiters anyway
+ if (!this.options.tokens.include('\n'))
+ this.options.tokens.push('\n');
+
+ this.observer = null;
+
+ this.element.setAttribute('autocomplete','off');
+
+ Element.hide(this.update);
+
+ Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
+ Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
+ },
+
+ show: function() {
+ if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
+ if(!this.iefix &&
+ (Prototype.Browser.IE) &&
+ (Element.getStyle(this.update, 'position')=='absolute')) {
+ new Insertion.After(this.update,
+ '<iframe id="' + this.update.id + '_iefix" '+
+ 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
+ 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
+ this.iefix = DOKUid(this.update.id+'_iefix');
+ }
+ if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
+ },
+
+ fixIEOverlapping: function() {
+ Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
+ this.iefix.style.zIndex = 1;
+ this.update.style.zIndex = 2;
+ Element.show(this.iefix);
+ },
+
+ hide: function() {
+ this.stopIndicator();
+ if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
+ if(this.iefix) Element.hide(this.iefix);
+ },
+
+ startIndicator: function() {
+ if(this.options.indicator) Element.show(this.options.indicator);
+ },
+
+ stopIndicator: function() {
+ if(this.options.indicator) Element.hide(this.options.indicator);
+ },
+
+ onKeyPress: function(event) {
+ if(this.active)
+ switch(event.keyCode) {
+ case Event.KEY_TAB:
+ case Event.KEY_RETURN:
+ this.selectEntry();
+ Event.stop(event);
+ case Event.KEY_ESC:
+ this.hide();
+ this.active = false;
+ Event.stop(event);
+ return;
+ case Event.KEY_LEFT:
+ case Event.KEY_RIGHT:
+ return;
+ case Event.KEY_UP:
+ this.markPrevious();
+ this.render();
+ Event.stop(event);
+ return;
+ case Event.KEY_DOWN:
+ this.markNext();
+ this.render();
+ Event.stop(event);
+ return;
+ }
+ else
+ if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
+ (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
+
+ this.changed = true;
+ this.hasFocus = true;
+
+ if(this.observer) clearTimeout(this.observer);
+ this.observer =
+ setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
+ },
+
+ activate: function() {
+ this.changed = false;
+ this.hasFocus = true;
+ this.getUpdatedChoices();
+ },
+
+ onHover: function(event) {
+ var element = Event.findElement(event, 'LI');
+ if(this.index != element.autocompleteIndex)
+ {
+ this.index = element.autocompleteIndex;
+ this.render();
+ }
+ Event.stop(event);
+ },
+
+ onClick: function(event) {
+ var element = Event.findElement(event, 'LI');
+ this.index = element.autocompleteIndex;
+ this.selectEntry();
+ this.hide();
+ },
+
+ onBlur: function(event) {
+ // needed to make click events working
+ setTimeout(this.hide.bind(this), 250);
+ this.hasFocus = false;
+ this.active = false;
+ },
+
+ render: function() {
+ if(this.entryCount > 0) {
+ for (var i = 0; i < this.entryCount; i++)
+ this.index==i ?
+ Element.addClassName(this.getEntry(i),"selected") :
+ Element.removeClassName(this.getEntry(i),"selected");
+ if(this.hasFocus) {
+ this.show();
+ this.active = true;
+ }
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ },
+
+ markPrevious: function() {
+ if(this.index > 0) this.index--;
+ else this.index = this.entryCount-1;
+ this.getEntry(this.index).scrollIntoView(true);
+ },
+
+ markNext: function() {
+ if(this.index < this.entryCount-1) this.index++;
+ else this.index = 0;
+ this.getEntry(this.index).scrollIntoView(false);
+ },
+
+ getEntry: function(index) {
+ return this.update.firstChild.childNodes[index];
+ },
+
+ getCurrentEntry: function() {
+ return this.getEntry(this.index);
+ },
+
+ selectEntry: function() {
+ this.active = false;
+ this.updateElement(this.getCurrentEntry());
+ },
+
+ updateElement: function(selectedElement) {
+ if (this.options.updateElement) {
+ this.options.updateElement(selectedElement);
+ return;
+ }
+ var value = '';
+ if (this.options.select) {
+ var nodes = DOKUid(selectedElement).select('.' + this.options.select) || [];
+ if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
+ } else
+ value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
+
+ var bounds = this.getTokenBounds();
+ if (bounds[0] != -1) {
+ var newValue = this.element.value.substr(0, bounds[0]);
+ var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
+ if (whitespace)
+ newValue += whitespace[0];
+ this.element.value = newValue + value + this.element.value.substr(bounds[1]);
+ } else {
+ this.element.value = value;
+ }
+ this.oldElementValue = this.element.value;
+ this.element.focus();
+
+ if (this.options.afterUpdateElement)
+ this.options.afterUpdateElement(this.element, selectedElement);
+ },
+
+ updateChoices: function(choices) {
+ if(!this.changed && this.hasFocus) {
+ this.update.innerHTML = choices;
+ Element.cleanWhitespace(this.update);
+ Element.cleanWhitespace(this.update.down());
+
+ if(this.update.firstChild && this.update.down().childNodes) {
+ this.entryCount =
+ this.update.down().childNodes.length;
+ for (var i = 0; i < this.entryCount; i++) {
+ var entry = this.getEntry(i);
+ entry.autocompleteIndex = i;
+ this.addObservers(entry);
+ }
+ } else {
+ this.entryCount = 0;
+ }
+
+ this.stopIndicator();
+ this.index = 0;
+
+ if(this.entryCount==1 && this.options.autoSelect) {
+ this.selectEntry();
+ this.hide();
+ } else {
+ this.render();
+ }
+ }
+ },
+
+ addObservers: function(element) {
+ Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
+ Event.observe(element, "click", this.onClick.bindAsEventListener(this));
+ },
+
+ onObserverEvent: function() {
+ this.changed = false;
+ this.tokenBounds = null;
+ if(this.getToken().length>=this.options.minChars) {
+ this.getUpdatedChoices();
+ } else {
+ this.active = false;
+ this.hide();
+ }
+ this.oldElementValue = this.element.value;
+ },
+
+ getToken: function() {
+ var bounds = this.getTokenBounds();
+ return this.element.value.substring(bounds[0], bounds[1]).strip();
+ },
+
+ getTokenBounds: function() {
+ if (null != this.tokenBounds) return this.tokenBounds;
+ var value = this.element.value;
+ if (value.strip().empty()) return [-1, 0];
+ var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
+ var offset = (diff == this.oldElementValue.length ? 1 : 0);
+ var prevTokenPos = -1, nextTokenPos = value.length;
+ var tp;
+ for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
+ tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
+ if (tp > prevTokenPos) prevTokenPos = tp;
+ tp = value.indexOf(this.options.tokens[index], diff + offset);
+ if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
+ }
+ return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
+ }
+});
+
+Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
+ var boundary = Math.min(newS.length, oldS.length);
+ for (var index = 0; index < boundary; ++index)
+ if (newS[index] != oldS[index])
+ return index;
+ return boundary;
+};
+
+Ajax.Autocompleter = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, url, options) {
+ this.baseInitialize(element, update, options);
+ this.options.asynchronous = true;
+ this.options.onComplete = this.onComplete.bind(this);
+ this.options.defaultParams = this.options.parameters || null;
+ this.url = url;
+ },
+
+ getUpdatedChoices: function() {
+ this.startIndicator();
+
+ var entry = encodeURIComponent(this.options.paramName) + '=' +
+ encodeURIComponent(this.getToken());
+
+ this.options.parameters = this.options.callback ?
+ this.options.callback(this.element, entry) : entry;
+
+ if(this.options.defaultParams)
+ this.options.parameters += '&' + this.options.defaultParams;
+
+ new Ajax.Request(this.url, this.options);
+ },
+
+ onComplete: function(request) {
+ this.updateChoices(request.responseText);
+ }
+});
+
+// The local array autocompleter. Used when you'd prefer to
+// inject an array of autocompletion options into the page, rather
+// than sending out Ajax queries, which can be quite slow sometimes.
+//
+// The constructor takes four parameters. The first two are, as usual,
+// the id of the monitored textbox, and id of the autocompletion menu.
+// The third is the array you want to autocomplete from, and the fourth
+// is the options block.
+//
+// Extra local autocompletion options:
+// - choices - How many autocompletion choices to offer
+//
+// - partialSearch - If false, the autocompleter will match entered
+// text only at the beginning of strings in the
+// autocomplete array. Defaults to true, which will
+// match text at the beginning of any *word* in the
+// strings in the autocomplete array. If you want to
+// search anywhere in the string, additionally set
+// the option fullSearch to true (default: off).
+//
+// - fullSsearch - Search anywhere in autocomplete array strings.
+//
+// - partialChars - How many characters to enter before triggering
+// a partial match (unlike minChars, which defines
+// how many characters are required to do any match
+// at all). Defaults to 2.
+//
+// - ignoreCase - Whether to ignore case when autocompleting.
+// Defaults to true.
+//
+// It's possible to pass in a custom function as the 'selector'
+// option, if you prefer to write your own autocompletion logic.
+// In that case, the other options above will not apply unless
+// you support them.
+
+Autocompleter.Local = Class.create(Autocompleter.Base, {
+ initialize: function(element, update, array, options) {
+ this.baseInitialize(element, update, options);
+ this.options.array = array;
+ },
+
+ getUpdatedChoices: function() {
+ this.updateChoices(this.options.selector(this));
+ },
+
+ setOptions: function(options) {
+ this.options = Object.extend({
+ choices: 10,
+ partialSearch: true,
+ partialChars: 2,
+ ignoreCase: true,
+ fullSearch: false,
+ selector: function(instance) {
+ var ret = []; // Beginning matches
+ var partial = []; // Inside matches
+ var entry = instance.getToken();
+ var count = 0;
+
+ for (var i = 0; i < instance.options.array.length &&
+ ret.length < instance.options.choices ; i++) {
+
+ var elem = instance.options.array[i];
+ var foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase()) :
+ elem.indexOf(entry);
+
+ while (foundPos != -1) {
+ if (foundPos == 0 && elem.length != entry.length) {
+ ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
+ elem.substr(entry.length) + "</li>");
+ break;
+ } else if (entry.length >= instance.options.partialChars &&
+ instance.options.partialSearch && foundPos != -1) {
+ if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
+ partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
+ elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
+ foundPos + entry.length) + "</li>");
+ break;
+ }
+ }
+
+ foundPos = instance.options.ignoreCase ?
+ elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
+ elem.indexOf(entry, foundPos + 1);
+
+ }
+ }
+ if (partial.length)
+ ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
+ return "<ul>" + ret.join('') + "</ul>";
+ }
+ }, options || { });
+ }
+});
+
+// AJAX in-place editor and collection editor
+// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).
+
+// Use this if you notice weird scrolling problems on some browsers,
+// the DOM might be a bit confused when this gets called so do this
+// waits 1 ms (with setTimeout) until it does the activation
+Field.scrollFreeActivate = function(field) {
+ setTimeout(function() {
+ Field.activate(field);
+ }, 1);
+};
+
+Ajax.InPlaceEditor = Class.create({
+ initialize: function(element, url, options) {
+ this.url = url;
+ this.element = element = DOKUid(element);
+ this.prepareOptions();
+ this._controls = { };
+ arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
+ Object.extend(this.options, options || { });
+ if (!this.options.formId && this.element.id) {
+ this.options.formId = this.element.id + '-inplaceeditor';
+ if (DOKUid(this.options.formId))
+ this.options.formId = '';
+ }
+ if (this.options.externalControl)
+ this.options.externalControl = DOKUid(this.options.externalControl);
+ if (!this.options.externalControl)
+ this.options.externalControlOnly = false;
+ this._originalBackground = this.element.getStyle('background-color') || 'transparent';
+ this.element.title = this.options.clickToEditText;
+ this._boundCancelHandler = this.handleFormCancellation.bind(this);
+ this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
+ this._boundFailureHandler = this.handleAJAXFailure.bind(this);
+ this._boundSubmitHandler = this.handleFormSubmission.bind(this);
+ this._boundWrapperHandler = this.wrapUp.bind(this);
+ this.registerListeners();
+ },
+ checkForEscapeOrReturn: function(e) {
+ if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
+ if (Event.KEY_ESC == e.keyCode)
+ this.handleFormCancellation(e);
+ else if (Event.KEY_RETURN == e.keyCode)
+ this.handleFormSubmission(e);
+ },
+ createControl: function(mode, handler, extraClasses) {
+ var control = this.options[mode + 'Control'];
+ var text = this.options[mode + 'Text'];
+ if ('button' == control) {
+ var btn = document.createElement('input');
+ btn.type = 'submit';
+ btn.value = text;
+ btn.className = 'editor_' + mode + '_button';
+ if ('cancel' == mode)
+ btn.onclick = this._boundCancelHandler;
+ this._form.appendChild(btn);
+ this._controls[mode] = btn;
+ } else if ('link' == control) {
+ var link = document.createElement('a');
+ link.href = '#';
+ link.appendChild(document.createTextNode(text));
+ link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
+ link.className = 'editor_' + mode + '_link';
+ if (extraClasses)
+ link.className += ' ' + extraClasses;
+ this._form.appendChild(link);
+ this._controls[mode] = link;
+ }
+ },
+ createEditField: function() {
+ var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
+ var fld;
+ if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
+ fld = document.createElement('input');
+ fld.type = 'text';
+ var size = this.options.size || this.options.cols || 0;
+ if (0 < size) fld.size = size;
+ } else {
+ fld = document.createElement('textarea');
+ fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
+ fld.cols = this.options.cols || 40;
+ }
+ fld.name = this.options.paramName;
+ fld.value = text; // No HTML breaks conversion anymore
+ fld.className = 'editor_field';
+ if (this.options.submitOnBlur)
+ fld.onblur = this._boundSubmitHandler;
+ this._controls.editor = fld;
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+ createForm: function() {
+ var ipe = this;
+ function addText(mode, condition) {
+ var text = ipe.options['text' + mode + 'Controls'];
+ if (!text || condition === false) return;
+ ipe._form.appendChild(document.createTextNode(text));
+ };
+ this._form = DOKUid(document.createElement('form'));
+ this._form.id = this.options.formId;
+ this._form.addClassName(this.options.formClassName);
+ this._form.onsubmit = this._boundSubmitHandler;
+ this.createEditField();
+ if ('textarea' == this._controls.editor.tagName.toLowerCase())
+ this._form.appendChild(document.createElement('br'));
+ if (this.options.onFormCustomization)
+ this.options.onFormCustomization(this, this._form);
+ addText('Before', this.options.okControl || this.options.cancelControl);
+ this.createControl('ok', this._boundSubmitHandler);
+ addText('Between', this.options.okControl && this.options.cancelControl);
+ this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
+ addText('After', this.options.okControl || this.options.cancelControl);
+ },
+ destroy: function() {
+ if (this._oldInnerHTML)
+ this.element.innerHTML = this._oldInnerHTML;
+ this.leaveEditMode();
+ this.unregisterListeners();
+ },
+ enterEditMode: function(e) {
+ if (this._saving || this._editing) return;
+ this._editing = true;
+ this.triggerCallback('onEnterEditMode');
+ if (this.options.externalControl)
+ this.options.externalControl.hide();
+ this.element.hide();
+ this.createForm();
+ this.element.parentNode.insertBefore(this._form, this.element);
+ if (!this.options.loadTextURL)
+ this.postProcessEditField();
+ if (e) Event.stop(e);
+ },
+ enterHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.addClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onEnterHover');
+ },
+ getText: function() {
+ return this.element.innerHTML.unescapeHTML();
+ },
+ handleAJAXFailure: function(transport) {
+ this.triggerCallback('onFailure', transport);
+ if (this._oldInnerHTML) {
+ this.element.innerHTML = this._oldInnerHTML;
+ this._oldInnerHTML = null;
+ }
+ },
+ handleFormCancellation: function(e) {
+ this.wrapUp();
+ if (e) Event.stop(e);
+ },
+ handleFormSubmission: function(e) {
+ var form = this._form;
+ var value = $F(this._controls.editor);
+ this.prepareSubmission();
+ var params = this.options.callback(form, value) || '';
+ if (Object.isString(params))
+ params = params.toQueryParams();
+ params.editorId = this.element.id;
+ if (this.options.htmlResponse) {
+ var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Updater({ success: this.element }, this.url, options);
+ } else {
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: params,
+ onComplete: this._boundWrapperHandler,
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.url, options);
+ }
+ if (e) Event.stop(e);
+ },
+ leaveEditMode: function() {
+ this.element.removeClassName(this.options.savingClassName);
+ this.removeForm();
+ this.leaveHover();
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ if (this.options.externalControl)
+ this.options.externalControl.show();
+ this._saving = false;
+ this._editing = false;
+ this._oldInnerHTML = null;
+ this.triggerCallback('onLeaveEditMode');
+ },
+ leaveHover: function(e) {
+ if (this.options.hoverClassName)
+ this.element.removeClassName(this.options.hoverClassName);
+ if (this._saving) return;
+ this.triggerCallback('onLeaveHover');
+ },
+ loadExternalText: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this._controls.editor.disabled = true;
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._form.removeClassName(this.options.loadingClassName);
+ var text = transport.responseText;
+ if (this.options.stripLoadedTextTags)
+ text = text.stripTags();
+ this._controls.editor.value = text;
+ this._controls.editor.disabled = false;
+ this.postProcessEditField();
+ }.bind(this),
+ onFailure: this._boundFailureHandler
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+ postProcessEditField: function() {
+ var fpc = this.options.fieldPostCreation;
+ if (fpc)
+ DOKUid(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
+ },
+ prepareOptions: function() {
+ this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
+ Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
+ [this._extraDefaultOptions].flatten().compact().each(function(defs) {
+ Object.extend(this.options, defs);
+ }.bind(this));
+ },
+ prepareSubmission: function() {
+ this._saving = true;
+ this.removeForm();
+ this.leaveHover();
+ this.showSaving();
+ },
+ registerListeners: function() {
+ this._listeners = { };
+ var listener;
+ $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
+ listener = this[pair.value].bind(this);
+ this._listeners[pair.key] = listener;
+ if (!this.options.externalControlOnly)
+ this.element.observe(pair.key, listener);
+ if (this.options.externalControl)
+ this.options.externalControl.observe(pair.key, listener);
+ }.bind(this));
+ },
+ removeForm: function() {
+ if (!this._form) return;
+ this._form.remove();
+ this._form = null;
+ this._controls = { };
+ },
+ showSaving: function() {
+ this._oldInnerHTML = this.element.innerHTML;
+ this.element.innerHTML = this.options.savingText;
+ this.element.addClassName(this.options.savingClassName);
+ this.element.style.backgroundColor = this._originalBackground;
+ this.element.show();
+ },
+ triggerCallback: function(cbName, arg) {
+ if ('function' == typeof this.options[cbName]) {
+ this.options[cbName](this, arg);
+ }
+ },
+ unregisterListeners: function() {
+ $H(this._listeners).each(function(pair) {
+ if (!this.options.externalControlOnly)
+ this.element.stopObserving(pair.key, pair.value);
+ if (this.options.externalControl)
+ this.options.externalControl.stopObserving(pair.key, pair.value);
+ }.bind(this));
+ },
+ wrapUp: function(transport) {
+ this.leaveEditMode();
+ // Can't use triggerCallback due to backward compatibility: requires
+ // binding + direct element
+ this._boundComplete(transport, this.element);
+ }
+});
+
+Object.extend(Ajax.InPlaceEditor.prototype, {
+ dispose: Ajax.InPlaceEditor.prototype.destroy
+});
+
+Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
+ initialize: function($super, element, url, options) {
+ this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
+ $super(element, url, options);
+ },
+
+ createEditField: function() {
+ var list = document.createElement('select');
+ list.name = this.options.paramName;
+ list.size = 1;
+ this._controls.editor = list;
+ this._collection = this.options.collection || [];
+ if (this.options.loadCollectionURL)
+ this.loadCollection();
+ else
+ this.checkForExternalText();
+ this._form.appendChild(this._controls.editor);
+ },
+
+ loadCollection: function() {
+ this._form.addClassName(this.options.loadingClassName);
+ this.showLoadingText(this.options.loadingCollectionText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ var js = transport.responseText.strip();
+ if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
+ throw('Server returned an invalid collection representation.');
+ this._collection = eval(js);
+ this.checkForExternalText();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadCollectionURL, options);
+ },
+
+ showLoadingText: function(text) {
+ this._controls.editor.disabled = true;
+ var tempOption = this._controls.editor.firstChild;
+ if (!tempOption) {
+ tempOption = document.createElement('option');
+ tempOption.value = '';
+ this._controls.editor.appendChild(tempOption);
+ tempOption.selected = true;
+ }
+ tempOption.update((text || '').stripScripts().stripTags());
+ },
+
+ checkForExternalText: function() {
+ this._text = this.getText();
+ if (this.options.loadTextURL)
+ this.loadExternalText();
+ else
+ this.buildOptionList();
+ },
+
+ loadExternalText: function() {
+ this.showLoadingText(this.options.loadingText);
+ var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+ Object.extend(options, {
+ parameters: 'editorId=' + encodeURIComponent(this.element.id),
+ onComplete: Prototype.emptyFunction,
+ onSuccess: function(transport) {
+ this._text = transport.responseText.strip();
+ this.buildOptionList();
+ }.bind(this),
+ onFailure: this.onFailure
+ });
+ new Ajax.Request(this.options.loadTextURL, options);
+ },
+
+ buildOptionList: function() {
+ this._form.removeClassName(this.options.loadingClassName);
+ this._collection = this._collection.map(function(entry) {
+ return 2 === entry.length ? entry : [entry, entry].flatten();
+ });
+ var marker = ('value' in this.options) ? this.options.value : this._text;
+ var textFound = this._collection.any(function(entry) {
+ return entry[0] == marker;
+ }.bind(this));
+ this._controls.editor.update('');
+ var option;
+ this._collection.each(function(entry, index) {
+ option = document.createElement('option');
+ option.value = entry[0];
+ option.selected = textFound ? entry[0] == marker : 0 == index;
+ option.appendChild(document.createTextNode(entry[1]));
+ this._controls.editor.appendChild(option);
+ }.bind(this));
+ this._controls.editor.disabled = false;
+ Field.scrollFreeActivate(this._controls.editor);
+ }
+});
+
+//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
+//**** This only exists for a while, in order to let ****
+//**** users adapt to the new API. Read up on the new ****
+//**** API and convert your code to it ASAP! ****
+
+Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
+ if (!options) return;
+ function fallback(name, expr) {
+ if (name in options || expr === undefined) return;
+ options[name] = expr;
+ };
+ fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
+ options.cancelLink == options.cancelButton == false ? false : undefined)));
+ fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
+ options.okLink == options.okButton == false ? false : undefined)));
+ fallback('highlightColor', options.highlightcolor);
+ fallback('highlightEndColor', options.highlightendcolor);
+};
+
+Object.extend(Ajax.InPlaceEditor, {
+ DefaultOptions: {
+ ajaxOptions: { },
+ autoRows: 3, // Use when multi-line w/ rows == 1
+ cancelControl: 'link', // 'link'|'button'|false
+ cancelText: 'cancel',
+ clickToEditText: 'Click to edit',
+ externalControl: null, // id|elt
+ externalControlOnly: false,
+ fieldPostCreation: 'activate', // 'activate'|'focus'|false
+ formClassName: 'inplaceeditor-form',
+ formId: null, // id|elt
+ highlightColor: '#ffff99',
+ highlightEndColor: '#ffffff',
+ hoverClassName: '',
+ htmlResponse: true,
+ loadingClassName: 'inplaceeditor-loading',
+ loadingText: 'Loading...',
+ okControl: 'button', // 'link'|'button'|false
+ okText: 'ok',
+ paramName: 'value',
+ rows: 1, // If 1 and multi-line, uses autoRows
+ savingClassName: 'inplaceeditor-saving',
+ savingText: 'Saving...',
+ size: 0,
+ stripLoadedTextTags: false,
+ submitOnBlur: false,
+ textAfterControls: '',
+ textBeforeControls: '',
+ textBetweenControls: ''
+ },
+ DefaultCallbacks: {
+ callback: function(form) {
+ return Form.serialize(form);
+ },
+ onComplete: function(transport, element) {
+ // For backward compatibility, this one is bound to the IPE, and passes
+ // the element directly. It was too often customized, so we don't break it.
+ new Effect.Highlight(element, {
+ startcolor: this.options.highlightColor, keepBackgroundImage: true });
+ },
+ onEnterEditMode: null,
+ onEnterHover: function(ipe) {
+ ipe.element.style.backgroundColor = ipe.options.highlightColor;
+ if (ipe._effect)
+ ipe._effect.cancel();
+ },
+ onFailure: function(transport, ipe) {
+ alert('Error communication with the server: ' + transport.responseText.stripTags());
+ },
+ onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
+ onLeaveEditMode: null,
+ onLeaveHover: function(ipe) {
+ ipe._effect = new Effect.Highlight(ipe.element, {
+ startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
+ restorecolor: ipe._originalBackground, keepBackgroundImage: true
+ });
+ }
+ },
+ Listeners: {
+ click: 'enterEditMode',
+ keydown: 'checkForEscapeOrReturn',
+ mouseover: 'enterHover',
+ mouseout: 'leaveHover'
+ }
+});
+
+Ajax.InPlaceCollectionEditor.DefaultOptions = {
+ loadingCollectionText: 'Loading options...'
+};
+
+// Delayed observer, like Form.Element.Observer,
+// but waits for delay after last key input
+// Ideal for live-search fields
+
+Form.Element.DelayedObserver = Class.create({
+ initialize: function(element, delay, callback) {
+ this.delay = delay || 0.5;
+ this.element = DOKUid(element);
+ this.callback = callback;
+ this.timer = null;
+ this.lastValue = $F(this.element);
+ Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
+ },
+ delayedListener: function(event) {
+ if(this.lastValue == $F(this.element)) return;
+ if(this.timer) clearTimeout(this.timer);
+ this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
+ this.lastValue = $F(this.element);
+ },
+ onTimerEvent: function() {
+ this.timer = null;
+ this.callback(this.element, $F(this.element));
+ }
+}); \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js
new file mode 100644
index 000000000..6e3a1f872
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js
@@ -0,0 +1,974 @@
+// script.aculo.us dragdrop.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if(Object.isUndefined(Effect))
+ throw("dragdrop.js requires including script.aculo.us' effects.js library");
+
+var Droppables = {
+ drops: [],
+
+ remove: function(element) {
+ this.drops = this.drops.reject(function(d) { return d.element==DOKUid(element) });
+ },
+
+ add: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ greedy: true,
+ hoverclass: null,
+ tree: false
+ }, arguments[1] || { });
+
+ // cache containers
+ if(options.containment) {
+ options._containers = [];
+ var containment = options.containment;
+ if(Object.isArray(containment)) {
+ containment.each( function(c) { options._containers.push(DOKUid(c)) });
+ } else {
+ options._containers.push(DOKUid(containment));
+ }
+ }
+
+ if(options.accept) options.accept = [options.accept].flatten();
+
+ Element.makePositioned(element); // fix IE
+ options.element = element;
+
+ this.drops.push(options);
+ },
+
+ findDeepestChild: function(drops) {
+ deepest = drops[0];
+
+ for (i = 1; i < drops.length; ++i)
+ if (Element.isParent(drops[i].element, deepest.element))
+ deepest = drops[i];
+
+ return deepest;
+ },
+
+ isContained: function(element, drop) {
+ var containmentNode;
+ if(drop.tree) {
+ containmentNode = element.treeNode;
+ } else {
+ containmentNode = element.parentNode;
+ }
+ return drop._containers.detect(function(c) { return containmentNode == c });
+ },
+
+ isAffected: function(point, element, drop) {
+ return (
+ (drop.element!=element) &&
+ ((!drop._containers) ||
+ this.isContained(element, drop)) &&
+ ((!drop.accept) ||
+ (Element.classNames(element).detect(
+ function(v) { return drop.accept.include(v) } ) )) &&
+ Position.within(drop.element, point[0], point[1]) );
+ },
+
+ deactivate: function(drop) {
+ if(drop.hoverclass)
+ Element.removeClassName(drop.element, drop.hoverclass);
+ this.last_active = null;
+ },
+
+ activate: function(drop) {
+ if(drop.hoverclass)
+ Element.addClassName(drop.element, drop.hoverclass);
+ this.last_active = drop;
+ },
+
+ show: function(point, element) {
+ if(!this.drops.length) return;
+ var drop, affected = [];
+
+ this.drops.each( function(drop) {
+ if(Droppables.isAffected(point, element, drop))
+ affected.push(drop);
+ });
+
+ if(affected.length>0)
+ drop = Droppables.findDeepestChild(affected);
+
+ if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
+ if (drop) {
+ Position.within(drop.element, point[0], point[1]);
+ if(drop.onHover)
+ drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
+
+ if (drop != this.last_active) Droppables.activate(drop);
+ }
+ },
+
+ fire: function(event, element) {
+ if(!this.last_active) return;
+ Position.prepare();
+
+ if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
+ if (this.last_active.onDrop) {
+ this.last_active.onDrop(element, this.last_active.element, event);
+ return true;
+ }
+ },
+
+ reset: function() {
+ if(this.last_active)
+ this.deactivate(this.last_active);
+ }
+};
+
+var Draggables = {
+ drags: [],
+ observers: [],
+
+ register: function(draggable) {
+ if(this.drags.length == 0) {
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
+ this.eventKeypress = this.keyPress.bindAsEventListener(this);
+
+ Event.observe(document, "mouseup", this.eventMouseUp);
+ Event.observe(document, "mousemove", this.eventMouseMove);
+ Event.observe(document, "keypress", this.eventKeypress);
+ }
+ this.drags.push(draggable);
+ },
+
+ unregister: function(draggable) {
+ this.drags = this.drags.reject(function(d) { return d==draggable });
+ if(this.drags.length == 0) {
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ Event.stopObserving(document, "keypress", this.eventKeypress);
+ }
+ },
+
+ activate: function(draggable) {
+ if(draggable.options.delay) {
+ this._timeout = setTimeout(function() {
+ Draggables._timeout = null;
+ window.focus();
+ Draggables.activeDraggable = draggable;
+ }.bind(this), draggable.options.delay);
+ } else {
+ window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
+ this.activeDraggable = draggable;
+ }
+ },
+
+ deactivate: function() {
+ this.activeDraggable = null;
+ },
+
+ updateDrag: function(event) {
+ if(!this.activeDraggable) return;
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ // Mozilla-based browsers fire successive mousemove events with
+ // the same coordinates, prevent needless redrawing (moz bug?)
+ if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
+ this._lastPointer = pointer;
+
+ this.activeDraggable.updateDrag(event, pointer);
+ },
+
+ endDrag: function(event) {
+ if(this._timeout) {
+ clearTimeout(this._timeout);
+ this._timeout = null;
+ }
+ if(!this.activeDraggable) return;
+ this._lastPointer = null;
+ this.activeDraggable.endDrag(event);
+ this.activeDraggable = null;
+ },
+
+ keyPress: function(event) {
+ if(this.activeDraggable)
+ this.activeDraggable.keyPress(event);
+ },
+
+ addObserver: function(observer) {
+ this.observers.push(observer);
+ this._cacheObserverCallbacks();
+ },
+
+ removeObserver: function(element) { // element instead of observer fixes mem leaks
+ this.observers = this.observers.reject( function(o) { return o.element==element });
+ this._cacheObserverCallbacks();
+ },
+
+ notify: function(eventName, draggable, event) { // 'onStart', 'onEnd', 'onDrag'
+ if(this[eventName+'Count'] > 0)
+ this.observers.each( function(o) {
+ if(o[eventName]) o[eventName](eventName, draggable, event);
+ });
+ if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
+ },
+
+ _cacheObserverCallbacks: function() {
+ ['onStart','onEnd','onDrag'].each( function(eventName) {
+ Draggables[eventName+'Count'] = Draggables.observers.select(
+ function(o) { return o[eventName]; }
+ ).length;
+ });
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Draggable = Class.create({
+ initialize: function(element) {
+ var defaults = {
+ handle: false,
+ reverteffect: function(element, top_offset, left_offset) {
+ var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
+ new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
+ queue: {scope:'_draggable', position:'end'}
+ });
+ },
+ endeffect: function(element) {
+ var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
+ new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
+ queue: {scope:'_draggable', position:'end'},
+ afterFinish: function(){
+ Draggable._dragging[element] = false
+ }
+ });
+ },
+ zindex: 1000,
+ revert: false,
+ quiet: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ snap: false, // false, or xy or [x,y] or function(x,y){ return [x,y] }
+ delay: 0
+ };
+
+ if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
+ Object.extend(defaults, {
+ starteffect: function(element) {
+ element._opacity = Element.getOpacity(element);
+ Draggable._dragging[element] = true;
+ new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
+ }
+ });
+
+ var options = Object.extend(defaults, arguments[1] || { });
+
+ this.element = DOKUid(element);
+
+ if(options.handle && Object.isString(options.handle))
+ this.handle = this.element.down('.'+options.handle, 0);
+
+ if(!this.handle) this.handle = DOKUid(options.handle);
+ if(!this.handle) this.handle = this.element;
+
+ if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
+ options.scroll = DOKUid(options.scroll);
+ this._isScrollChild = Element.childOf(this.element, options.scroll);
+ }
+
+ Element.makePositioned(this.element); // fix IE
+
+ this.options = options;
+ this.dragging = false;
+
+ this.eventMouseDown = this.initDrag.bindAsEventListener(this);
+ Event.observe(this.handle, "mousedown", this.eventMouseDown);
+
+ Draggables.register(this);
+ },
+
+ destroy: function() {
+ Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
+ Draggables.unregister(this);
+ },
+
+ currentDelta: function() {
+ return([
+ parseInt(Element.getStyle(this.element,'left') || '0'),
+ parseInt(Element.getStyle(this.element,'top') || '0')]);
+ },
+
+ initDrag: function(event) {
+ if(!Object.isUndefined(Draggable._dragging[this.element]) &&
+ Draggable._dragging[this.element]) return;
+ if(Event.isLeftClick(event)) {
+ // abort on form elements, fixes a Firefox issue
+ var src = Event.element(event);
+ if((tag_name = src.tagName.toUpperCase()) && (
+ tag_name=='INPUT' ||
+ tag_name=='SELECT' ||
+ tag_name=='OPTION' ||
+ tag_name=='BUTTON' ||
+ tag_name=='TEXTAREA')) return;
+
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var pos = this.element.cumulativeOffset();
+ this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
+
+ Draggables.activate(this);
+ Event.stop(event);
+ }
+ },
+
+ startDrag: function(event) {
+ this.dragging = true;
+ if(!this.delta)
+ this.delta = this.currentDelta();
+
+ if(this.options.zindex) {
+ this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
+ this.element.style.zIndex = this.options.zindex;
+ }
+
+ if(this.options.ghosting) {
+ this._clone = this.element.cloneNode(true);
+ this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
+ if (!this._originallyAbsolute)
+ Position.absolutize(this.element);
+ this.element.parentNode.insertBefore(this._clone, this.element);
+ }
+
+ if(this.options.scroll) {
+ if (this.options.scroll == window) {
+ var where = this._getWindowScroll(this.options.scroll);
+ this.originalScrollLeft = where.left;
+ this.originalScrollTop = where.top;
+ } else {
+ this.originalScrollLeft = this.options.scroll.scrollLeft;
+ this.originalScrollTop = this.options.scroll.scrollTop;
+ }
+ }
+
+ Draggables.notify('onStart', this, event);
+
+ if(this.options.starteffect) this.options.starteffect(this.element);
+ },
+
+ updateDrag: function(event, pointer) {
+ if(!this.dragging) this.startDrag(event);
+
+ if(!this.options.quiet){
+ Position.prepare();
+ Droppables.show(pointer, this.element);
+ }
+
+ Draggables.notify('onDrag', this, event);
+
+ this.draw(pointer);
+ if(this.options.change) this.options.change(this);
+
+ if(this.options.scroll) {
+ this.stopScrolling();
+
+ var p;
+ if (this.options.scroll == window) {
+ with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
+ } else {
+ p = Position.page(this.options.scroll);
+ p[0] += this.options.scroll.scrollLeft + Position.deltaX;
+ p[1] += this.options.scroll.scrollTop + Position.deltaY;
+ p.push(p[0]+this.options.scroll.offsetWidth);
+ p.push(p[1]+this.options.scroll.offsetHeight);
+ }
+ var speed = [0,0];
+ if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
+ if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
+ if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
+ if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
+ this.startScrolling(speed);
+ }
+
+ // fix AppleWebKit rendering
+ if(Prototype.Browser.WebKit) window.scrollBy(0,0);
+
+ Event.stop(event);
+ },
+
+ finishDrag: function(event, success) {
+ this.dragging = false;
+
+ if(this.options.quiet){
+ Position.prepare();
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ Droppables.show(pointer, this.element);
+ }
+
+ if(this.options.ghosting) {
+ if (!this._originallyAbsolute)
+ Position.relativize(this.element);
+ delete this._originallyAbsolute;
+ Element.remove(this._clone);
+ this._clone = null;
+ }
+
+ var dropped = false;
+ if(success) {
+ dropped = Droppables.fire(event, this.element);
+ if (!dropped) dropped = false;
+ }
+ if(dropped && this.options.onDropped) this.options.onDropped(this.element);
+ Draggables.notify('onEnd', this, event);
+
+ var revert = this.options.revert;
+ if(revert && Object.isFunction(revert)) revert = revert(this.element);
+
+ var d = this.currentDelta();
+ if(revert && this.options.reverteffect) {
+ if (dropped == 0 || revert != 'failure')
+ this.options.reverteffect(this.element,
+ d[1]-this.delta[1], d[0]-this.delta[0]);
+ } else {
+ this.delta = d;
+ }
+
+ if(this.options.zindex)
+ this.element.style.zIndex = this.originalZ;
+
+ if(this.options.endeffect)
+ this.options.endeffect(this.element);
+
+ Draggables.deactivate(this);
+ Droppables.reset();
+ },
+
+ keyPress: function(event) {
+ if(event.keyCode!=Event.KEY_ESC) return;
+ this.finishDrag(event, false);
+ Event.stop(event);
+ },
+
+ endDrag: function(event) {
+ if(!this.dragging) return;
+ this.stopScrolling();
+ this.finishDrag(event, true);
+ Event.stop(event);
+ },
+
+ draw: function(point) {
+ var pos = this.element.cumulativeOffset();
+ if(this.options.ghosting) {
+ var r = Position.realOffset(this.element);
+ pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
+ }
+
+ var d = this.currentDelta();
+ pos[0] -= d[0]; pos[1] -= d[1];
+
+ if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
+ pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
+ pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
+ }
+
+ var p = [0,1].map(function(i){
+ return (point[i]-pos[i]-this.offset[i])
+ }.bind(this));
+
+ if(this.options.snap) {
+ if(Object.isFunction(this.options.snap)) {
+ p = this.options.snap(p[0],p[1],this);
+ } else {
+ if(Object.isArray(this.options.snap)) {
+ p = p.map( function(v, i) {
+ return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
+ } else {
+ p = p.map( function(v) {
+ return (v/this.options.snap).round()*this.options.snap }.bind(this));
+ }
+ }}
+
+ var style = this.element.style;
+ if((!this.options.constraint) || (this.options.constraint=='horizontal'))
+ style.left = p[0] + "px";
+ if((!this.options.constraint) || (this.options.constraint=='vertical'))
+ style.top = p[1] + "px";
+
+ if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
+ },
+
+ stopScrolling: function() {
+ if(this.scrollInterval) {
+ clearInterval(this.scrollInterval);
+ this.scrollInterval = null;
+ Draggables._lastScrollPointer = null;
+ }
+ },
+
+ startScrolling: function(speed) {
+ if(!(speed[0] || speed[1])) return;
+ this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
+ this.lastScrolled = new Date();
+ this.scrollInterval = setInterval(this.scroll.bind(this), 10);
+ },
+
+ scroll: function() {
+ var current = new Date();
+ var delta = current - this.lastScrolled;
+ this.lastScrolled = current;
+ if(this.options.scroll == window) {
+ with (this._getWindowScroll(this.options.scroll)) {
+ if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
+ var d = delta / 1000;
+ this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
+ }
+ }
+ } else {
+ this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
+ this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000;
+ }
+
+ Position.prepare();
+ Droppables.show(Draggables._lastPointer, this.element);
+ Draggables.notify('onDrag', this);
+ if (this._isScrollChild) {
+ Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
+ Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
+ Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
+ if (Draggables._lastScrollPointer[0] < 0)
+ Draggables._lastScrollPointer[0] = 0;
+ if (Draggables._lastScrollPointer[1] < 0)
+ Draggables._lastScrollPointer[1] = 0;
+ this.draw(Draggables._lastScrollPointer);
+ }
+
+ if(this.options.change) this.options.change(this);
+ },
+
+ _getWindowScroll: function(w) {
+ var T, L, W, H;
+ with (w.document) {
+ if (w.document.documentElement && documentElement.scrollTop) {
+ T = documentElement.scrollTop;
+ L = documentElement.scrollLeft;
+ } else if (w.document.body) {
+ T = body.scrollTop;
+ L = body.scrollLeft;
+ }
+ if (w.innerWidth) {
+ W = w.innerWidth;
+ H = w.innerHeight;
+ } else if (w.document.documentElement && documentElement.clientWidth) {
+ W = documentElement.clientWidth;
+ H = documentElement.clientHeight;
+ } else {
+ W = body.offsetWidth;
+ H = body.offsetHeight;
+ }
+ }
+ return { top: T, left: L, width: W, height: H };
+ }
+});
+
+Draggable._dragging = { };
+
+/*--------------------------------------------------------------------------*/
+
+var SortableObserver = Class.create({
+ initialize: function(element, observer) {
+ this.element = DOKUid(element);
+ this.observer = observer;
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onStart: function() {
+ this.lastValue = Sortable.serialize(this.element);
+ },
+
+ onEnd: function() {
+ Sortable.unmark();
+ if(this.lastValue != Sortable.serialize(this.element))
+ this.observer(this.element)
+ }
+});
+
+var Sortable = {
+ SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
+
+ sortables: { },
+
+ _findRootElement: function(element) {
+ while (element.tagName.toUpperCase() != "BODY") {
+ if(element.id && Sortable.sortables[element.id]) return element;
+ element = element.parentNode;
+ }
+ },
+
+ options: function(element) {
+ element = Sortable._findRootElement(DOKUid(element));
+ if(!element) return;
+ return Sortable.sortables[element.id];
+ },
+
+ destroy: function(element){
+ element = DOKUid(element);
+ var s = Sortable.sortables[element.id];
+
+ if(s) {
+ Draggables.removeObserver(s.element);
+ s.droppables.each(function(d){ Droppables.remove(d) });
+ s.draggables.invoke('destroy');
+
+ delete Sortable.sortables[s.element.id];
+ }
+ },
+
+ create: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ element: element,
+ tag: 'li', // assumes li children, override with tag: 'tagname'
+ dropOnEmpty: false,
+ tree: false,
+ treeTag: 'ul',
+ overlap: 'vertical', // one of 'vertical', 'horizontal'
+ constraint: 'vertical', // one of 'vertical', 'horizontal', false
+ containment: element, // also takes array of elements (or id's); or false
+ handle: false, // or a CSS class
+ only: false,
+ delay: 0,
+ hoverclass: null,
+ ghosting: false,
+ quiet: false,
+ scroll: false,
+ scrollSensitivity: 20,
+ scrollSpeed: 15,
+ format: this.SERIALIZE_RULE,
+
+ // these take arrays of elements or ids and can be
+ // used for better initialization performance
+ elements: false,
+ handles: false,
+
+ onChange: Prototype.emptyFunction,
+ onUpdate: Prototype.emptyFunction
+ }, arguments[1] || { });
+
+ // clear any old sortable with same element
+ this.destroy(element);
+
+ // build options for the draggables
+ var options_for_draggable = {
+ revert: true,
+ quiet: options.quiet,
+ scroll: options.scroll,
+ scrollSpeed: options.scrollSpeed,
+ scrollSensitivity: options.scrollSensitivity,
+ delay: options.delay,
+ ghosting: options.ghosting,
+ constraint: options.constraint,
+ handle: options.handle };
+
+ if(options.starteffect)
+ options_for_draggable.starteffect = options.starteffect;
+
+ if(options.reverteffect)
+ options_for_draggable.reverteffect = options.reverteffect;
+ else
+ if(options.ghosting) options_for_draggable.reverteffect = function(element) {
+ element.style.top = 0;
+ element.style.left = 0;
+ };
+
+ if(options.endeffect)
+ options_for_draggable.endeffect = options.endeffect;
+
+ if(options.zindex)
+ options_for_draggable.zindex = options.zindex;
+
+ // build options for the droppables
+ var options_for_droppable = {
+ overlap: options.overlap,
+ containment: options.containment,
+ tree: options.tree,
+ hoverclass: options.hoverclass,
+ onHover: Sortable.onHover
+ };
+
+ var options_for_tree = {
+ onHover: Sortable.onEmptyHover,
+ overlap: options.overlap,
+ containment: options.containment,
+ hoverclass: options.hoverclass
+ };
+
+ // fix for gecko engine
+ Element.cleanWhitespace(element);
+
+ options.draggables = [];
+ options.droppables = [];
+
+ // drop on empty handling
+ if(options.dropOnEmpty || options.tree) {
+ Droppables.add(element, options_for_tree);
+ options.droppables.push(element);
+ }
+
+ (options.elements || this.findElements(element, options) || []).each( function(e,i) {
+ var handle = options.handles ? DOKUid(options.handles[i]) :
+ (options.handle ? DOKUid(e).select('.' + options.handle)[0] : e);
+ options.draggables.push(
+ new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
+ Droppables.add(e, options_for_droppable);
+ if(options.tree) e.treeNode = element;
+ options.droppables.push(e);
+ });
+
+ if(options.tree) {
+ (Sortable.findTreeElements(element, options) || []).each( function(e) {
+ Droppables.add(e, options_for_tree);
+ e.treeNode = element;
+ options.droppables.push(e);
+ });
+ }
+
+ // keep reference
+ this.sortables[element.identify()] = options;
+
+ // for onupdate
+ Draggables.addObserver(new SortableObserver(element, options.onUpdate));
+
+ },
+
+ // return all suitable-for-sortable elements in a guaranteed order
+ findElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.tag);
+ },
+
+ findTreeElements: function(element, options) {
+ return Element.findChildren(
+ element, options.only, options.tree ? true : false, options.treeTag);
+ },
+
+ onHover: function(element, dropon, overlap) {
+ if(Element.isParent(dropon, element)) return;
+
+ if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
+ return;
+ } else if(overlap>0.5) {
+ Sortable.mark(dropon, 'before');
+ if(dropon.previousSibling != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, dropon);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ } else {
+ Sortable.mark(dropon, 'after');
+ var nextElement = dropon.nextSibling || null;
+ if(nextElement != element) {
+ var oldParentNode = element.parentNode;
+ element.style.visibility = "hidden"; // fix gecko rendering
+ dropon.parentNode.insertBefore(element, nextElement);
+ if(dropon.parentNode!=oldParentNode)
+ Sortable.options(oldParentNode).onChange(element);
+ Sortable.options(dropon.parentNode).onChange(element);
+ }
+ }
+ },
+
+ onEmptyHover: function(element, dropon, overlap) {
+ var oldParentNode = element.parentNode;
+ var droponOptions = Sortable.options(dropon);
+
+ if(!Element.isParent(dropon, element)) {
+ var index;
+
+ var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
+ var child = null;
+
+ if(children) {
+ var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
+
+ for (index = 0; index < children.length; index += 1) {
+ if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
+ offset -= Element.offsetSize (children[index], droponOptions.overlap);
+ } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
+ child = index + 1 < children.length ? children[index + 1] : null;
+ break;
+ } else {
+ child = children[index];
+ break;
+ }
+ }
+ }
+
+ dropon.insertBefore(element, child);
+
+ Sortable.options(oldParentNode).onChange(element);
+ droponOptions.onChange(element);
+ }
+ },
+
+ unmark: function() {
+ if(Sortable._marker) Sortable._marker.hide();
+ },
+
+ mark: function(dropon, position) {
+ // mark on ghosting only
+ var sortable = Sortable.options(dropon.parentNode);
+ if(sortable && !sortable.ghosting) return;
+
+ if(!Sortable._marker) {
+ Sortable._marker =
+ (DOKUid('dropmarker') || Element.extend(document.createElement('DIV'))).
+ hide().addClassName('dropmarker').setStyle({position:'absolute'});
+ document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
+ }
+ var offsets = dropon.cumulativeOffset();
+ Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
+
+ if(position=='after')
+ if(sortable.overlap == 'horizontal')
+ Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
+ else
+ Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
+
+ Sortable._marker.show();
+ },
+
+ _tree: function(element, options, parent) {
+ var children = Sortable.findElements(element, options) || [];
+
+ for (var i = 0; i < children.length; ++i) {
+ var match = children[i].id.match(options.format);
+
+ if (!match) continue;
+
+ var child = {
+ id: encodeURIComponent(match ? match[1] : null),
+ element: element,
+ parent: parent,
+ children: [],
+ position: parent.children.length,
+ container: DOKUid(children[i]).down(options.treeTag)
+ };
+
+ /* Get the element containing the children and recurse over it */
+ if (child.container)
+ this._tree(child.container, options, child);
+
+ parent.children.push (child);
+ }
+
+ return parent;
+ },
+
+ tree: function(element) {
+ element = DOKUid(element);
+ var sortableOptions = this.options(element);
+ var options = Object.extend({
+ tag: sortableOptions.tag,
+ treeTag: sortableOptions.treeTag,
+ only: sortableOptions.only,
+ name: element.id,
+ format: sortableOptions.format
+ }, arguments[1] || { });
+
+ var root = {
+ id: null,
+ parent: null,
+ children: [],
+ container: element,
+ position: 0
+ };
+
+ return Sortable._tree(element, options, root);
+ },
+
+ /* Construct a [i] index for a particular node */
+ _constructIndex: function(node) {
+ var index = '';
+ do {
+ if (node.id) index = '[' + node.position + ']' + index;
+ } while ((node = node.parent) != null);
+ return index;
+ },
+
+ sequence: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend(this.options(element), arguments[1] || { });
+
+ return DOKUid(this.findElements(element, options) || []).map( function(item) {
+ return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
+ });
+ },
+
+ setSequence: function(element, new_sequence) {
+ element = DOKUid(element);
+ var options = Object.extend(this.options(element), arguments[2] || { });
+
+ var nodeMap = { };
+ this.findElements(element, options).each( function(n) {
+ if (n.id.match(options.format))
+ nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
+ n.parentNode.removeChild(n);
+ });
+
+ new_sequence.each(function(ident) {
+ var n = nodeMap[ident];
+ if (n) {
+ n[1].appendChild(n[0]);
+ delete nodeMap[ident];
+ }
+ });
+ },
+
+ serialize: function(element) {
+ element = DOKUid(element);
+ var options = Object.extend(Sortable.options(element), arguments[1] || { });
+ var name = encodeURIComponent(
+ (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
+
+ if (options.tree) {
+ return Sortable.tree(element, arguments[1]).children.map( function (item) {
+ return [name + Sortable._constructIndex(item) + "[id]=" +
+ encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
+ }).flatten().join('&');
+ } else {
+ return Sortable.sequence(element, arguments[1]).map( function(item) {
+ return name + "[]=" + encodeURIComponent(item);
+ }).join('&');
+ }
+ }
+};
+
+// Returns true if child is contained within element
+Element.isParent = function(child, element) {
+ if (!child.parentNode || child == element) return false;
+ if (child.parentNode == element) return true;
+ return Element.isParent(child.parentNode, element);
+};
+
+Element.findChildren = function(element, only, recursive, tagName) {
+ if(!element.hasChildNodes()) return null;
+ tagName = tagName.toUpperCase();
+ if(only) only = [only].flatten();
+ var elements = [];
+ $A(element.childNodes).each( function(e) {
+ if(e.tagName && e.tagName.toUpperCase()==tagName &&
+ (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
+ elements.push(e);
+ if(recursive) {
+ var grandchildren = Element.findChildren(e, only, recursive, tagName);
+ if(grandchildren) elements.push(grandchildren);
+ }
+ });
+
+ return (elements.length>0 ? elements.flatten() : []);
+};
+
+Element.offsetSize = function (element, type) {
+ return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
+}; \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js
new file mode 100644
index 000000000..5ee17d3e2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js
@@ -0,0 +1,1123 @@
+// script.aculo.us effects.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// Contributors:
+// Justin Palmer (http://encytemedia.com/)
+// Mark Pilgrim (http://diveintomark.org/)
+// Martin Bialasinki
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// converts rgb() and #xxx to #xxxxxx format,
+// returns self (or first argument) if not convertable
+String.prototype.parseColor = function() {
+ var color = '#';
+ if (this.slice(0,4) == 'rgb(') {
+ var cols = this.slice(4,this.length-1).split(',');
+ var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
+ } else {
+ if (this.slice(0,1) == '#') {
+ if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+ if (this.length==7) color = this.toLowerCase();
+ }
+ }
+ return (color.length==7 ? color : (arguments[0] || this));
+};
+
+/*--------------------------------------------------------------------------*/
+
+Element.collectTextNodes = function(element) {
+ return $A(DOKUid(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
+ }).flatten().join('');
+};
+
+Element.collectTextNodesIgnoreClass = function(element, className) {
+ return $A(DOKUid(element).childNodes).collect( function(node) {
+ return (node.nodeType==3 ? node.nodeValue :
+ ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
+ Element.collectTextNodesIgnoreClass(node, className) : ''));
+ }).flatten().join('');
+};
+
+Element.setContentZoom = function(element, percent) {
+ element = DOKUid(element);
+ element.setStyle({fontSize: (percent/100) + 'em'});
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ return element;
+};
+
+Element.getInlineOpacity = function(element){
+ return DOKUid(element).style.opacity || '';
+};
+
+Element.forceRerendering = function(element) {
+ try {
+ element = DOKUid(element);
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch(e) { }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Effect = {
+ _elementDoesNotExistError: {
+ name: 'ElementDoesNotExistError',
+ message: 'The specified DOM element does not exist, but is required for this effect to operate'
+ },
+ Transitions: {
+ linear: Prototype.K,
+ sinoidal: function(pos) {
+ return (-Math.cos(pos*Math.PI)/2) + .5;
+ },
+ reverse: function(pos) {
+ return 1-pos;
+ },
+ flicker: function(pos) {
+ var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
+ return pos > 1 ? 1 : pos;
+ },
+ wobble: function(pos) {
+ return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
+ },
+ pulse: function(pos, pulses) {
+ return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
+ },
+ spring: function(pos) {
+ return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
+ },
+ none: function(pos) {
+ return 0;
+ },
+ full: function(pos) {
+ return 1;
+ }
+ },
+ DefaultOptions: {
+ duration: 1.0, // seconds
+ fps: 100, // 100= assume 66fps max.
+ sync: false, // true for combining
+ from: 0.0,
+ to: 1.0,
+ delay: 0.0,
+ queue: 'parallel'
+ },
+ tagifyText: function(element) {
+ var tagifyStyle = 'position:relative';
+ if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
+
+ element = DOKUid(element);
+ $A(element.childNodes).each( function(child) {
+ if (child.nodeType==3) {
+ child.nodeValue.toArray().each( function(character) {
+ element.insertBefore(
+ new Element('span', {style: tagifyStyle}).update(
+ character == ' ' ? String.fromCharCode(160) : character),
+ child);
+ });
+ Element.remove(child);
+ }
+ });
+ },
+ multiple: function(element, effect) {
+ var elements;
+ if (((typeof element == 'object') ||
+ Object.isFunction(element)) &&
+ (element.length))
+ elements = element;
+ else
+ elements = DOKUid(element).childNodes;
+
+ var options = Object.extend({
+ speed: 0.1,
+ delay: 0.0
+ }, arguments[2] || { });
+ var masterDelay = options.delay;
+
+ $A(elements).each( function(element, index) {
+ new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
+ });
+ },
+ PAIRS: {
+ 'slide': ['SlideDown','SlideUp'],
+ 'blind': ['BlindDown','BlindUp'],
+ 'appear': ['Appear','Fade']
+ },
+ toggle: function(element, effect, options) {
+ element = DOKUid(element);
+ effect = (effect || 'appear').toLowerCase();
+
+ return Effect[ Effect.PAIRS[ effect ][ element.visible() ? 1 : 0 ] ](element, Object.extend({
+ queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
+ }, options || {}));
+ }
+};
+
+Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
+
+/* ------------- core effects ------------- */
+
+Effect.ScopedQueue = Class.create(Enumerable, {
+ initialize: function() {
+ this.effects = [];
+ this.interval = null;
+ },
+ _each: function(iterator) {
+ this.effects._each(iterator);
+ },
+ add: function(effect) {
+ var timestamp = new Date().getTime();
+
+ var position = Object.isString(effect.options.queue) ?
+ effect.options.queue : effect.options.queue.position;
+
+ switch(position) {
+ case 'front':
+ // move unstarted effects after this effect
+ this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
+ e.startOn += effect.finishOn;
+ e.finishOn += effect.finishOn;
+ });
+ break;
+ case 'with-last':
+ timestamp = this.effects.pluck('startOn').max() || timestamp;
+ break;
+ case 'end':
+ // start effect after last queued effect has finished
+ timestamp = this.effects.pluck('finishOn').max() || timestamp;
+ break;
+ }
+
+ effect.startOn += timestamp;
+ effect.finishOn += timestamp;
+
+ if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
+ this.effects.push(effect);
+
+ if (!this.interval)
+ this.interval = setInterval(this.loop.bind(this), 15);
+ },
+ remove: function(effect) {
+ this.effects = this.effects.reject(function(e) { return e==effect });
+ if (this.effects.length == 0) {
+ clearInterval(this.interval);
+ this.interval = null;
+ }
+ },
+ loop: function() {
+ var timePos = new Date().getTime();
+ for(var i=0, len=this.effects.length;i<len;i++)
+ this.effects[i] && this.effects[i].loop(timePos);
+ }
+});
+
+Effect.Queues = {
+ instances: $H(),
+ get: function(queueName) {
+ if (!Object.isString(queueName)) return queueName;
+
+ return this.instances.get(queueName) ||
+ this.instances.set(queueName, new Effect.ScopedQueue());
+ }
+};
+Effect.Queue = Effect.Queues.get('global');
+
+Effect.Base = Class.create({
+ position: null,
+ start: function(options) {
+ if (options && options.transition === false) options.transition = Effect.Transitions.linear;
+ this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
+ this.currentFrame = 0;
+ this.state = 'idle';
+ this.startOn = this.options.delay*1000;
+ this.finishOn = this.startOn+(this.options.duration*1000);
+ this.fromToDelta = this.options.to-this.options.from;
+ this.totalTime = this.finishOn-this.startOn;
+ this.totalFrames = this.options.fps*this.options.duration;
+
+ this.render = (function() {
+ function dispatch(effect, eventName) {
+ if (effect.options[eventName + 'Internal'])
+ effect.options[eventName + 'Internal'](effect);
+ if (effect.options[eventName])
+ effect.options[eventName](effect);
+ }
+
+ return function(pos) {
+ if (this.state === "idle") {
+ this.state = "running";
+ dispatch(this, 'beforeSetup');
+ if (this.setup) this.setup();
+ dispatch(this, 'afterSetup');
+ }
+ if (this.state === "running") {
+ pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
+ this.position = pos;
+ dispatch(this, 'beforeUpdate');
+ if (this.update) this.update(pos);
+ dispatch(this, 'afterUpdate');
+ }
+ };
+ })();
+
+ this.event('beforeStart');
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).add(this);
+ },
+ loop: function(timePos) {
+ if (timePos >= this.startOn) {
+ if (timePos >= this.finishOn) {
+ this.render(1.0);
+ this.cancel();
+ this.event('beforeFinish');
+ if (this.finish) this.finish();
+ this.event('afterFinish');
+ return;
+ }
+ var pos = (timePos - this.startOn) / this.totalTime,
+ frame = (pos * this.totalFrames).round();
+ if (frame > this.currentFrame) {
+ this.render(pos);
+ this.currentFrame = frame;
+ }
+ }
+ },
+ cancel: function() {
+ if (!this.options.sync)
+ Effect.Queues.get(Object.isString(this.options.queue) ?
+ 'global' : this.options.queue.scope).remove(this);
+ this.state = 'finished';
+ },
+ event: function(eventName) {
+ if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
+ if (this.options[eventName]) this.options[eventName](this);
+ },
+ inspect: function() {
+ var data = $H();
+ for(property in this)
+ if (!Object.isFunction(this[property])) data.set(property, this[property]);
+ return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
+ }
+});
+
+Effect.Parallel = Class.create(Effect.Base, {
+ initialize: function(effects) {
+ this.effects = effects || [];
+ this.start(arguments[1]);
+ },
+ update: function(position) {
+ this.effects.invoke('render', position);
+ },
+ finish: function(position) {
+ this.effects.each( function(effect) {
+ effect.render(1.0);
+ effect.cancel();
+ effect.event('beforeFinish');
+ if (effect.finish) effect.finish(position);
+ effect.event('afterFinish');
+ });
+ }
+});
+
+Effect.Tween = Class.create(Effect.Base, {
+ initialize: function(object, from, to) {
+ object = Object.isString(object) ? DOKUid(object) : object;
+ var args = $A(arguments), method = args.last(),
+ options = args.length == 5 ? args[3] : null;
+ this.method = Object.isFunction(method) ? method.bind(object) :
+ Object.isFunction(object[method]) ? object[method].bind(object) :
+ function(value) { object[method] = value };
+ this.start(Object.extend({ from: from, to: to }, options || { }));
+ },
+ update: function(position) {
+ this.method(position);
+ }
+});
+
+Effect.Event = Class.create(Effect.Base, {
+ initialize: function() {
+ this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
+ },
+ update: Prototype.emptyFunction
+});
+
+Effect.Opacity = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ // make this work on IE on elements without 'layout'
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ var options = Object.extend({
+ from: this.element.getOpacity() || 0.0,
+ to: 1.0
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ update: function(position) {
+ this.element.setOpacity(position);
+ }
+});
+
+Effect.Move = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ x: 0,
+ y: 0,
+ mode: 'relative'
+ }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.element.makePositioned();
+ this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
+ this.originalTop = parseFloat(this.element.getStyle('top') || '0');
+ if (this.options.mode == 'absolute') {
+ this.options.x = this.options.x - this.originalLeft;
+ this.options.y = this.options.y - this.originalTop;
+ }
+ },
+ update: function(position) {
+ this.element.setStyle({
+ left: (this.options.x * position + this.originalLeft).round() + 'px',
+ top: (this.options.y * position + this.originalTop).round() + 'px'
+ });
+ }
+});
+
+// for backwards compatibility
+Effect.MoveBy = function(element, toTop, toLeft) {
+ return new Effect.Move(element,
+ Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
+};
+
+Effect.Scale = Class.create(Effect.Base, {
+ initialize: function(element, percent) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ scaleX: true,
+ scaleY: true,
+ scaleContent: true,
+ scaleFromCenter: false,
+ scaleMode: 'box', // 'box' or 'contents' or { } with provided values
+ scaleFrom: 100.0,
+ scaleTo: percent
+ }, arguments[2] || { });
+ this.start(options);
+ },
+ setup: function() {
+ this.restoreAfterFinish = this.options.restoreAfterFinish || false;
+ this.elementPositioning = this.element.getStyle('position');
+
+ this.originalStyle = { };
+ ['top','left','width','height','fontSize'].each( function(k) {
+ this.originalStyle[k] = this.element.style[k];
+ }.bind(this));
+
+ this.originalTop = this.element.offsetTop;
+ this.originalLeft = this.element.offsetLeft;
+
+ var fontSize = this.element.getStyle('font-size') || '100%';
+ ['em','px','%','pt'].each( function(fontSizeType) {
+ if (fontSize.indexOf(fontSizeType)>0) {
+ this.fontSize = parseFloat(fontSize);
+ this.fontSizeType = fontSizeType;
+ }
+ }.bind(this));
+
+ this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
+
+ this.dims = null;
+ if (this.options.scaleMode=='box')
+ this.dims = [this.element.offsetHeight, this.element.offsetWidth];
+ if (/^content/.test(this.options.scaleMode))
+ this.dims = [this.element.scrollHeight, this.element.scrollWidth];
+ if (!this.dims)
+ this.dims = [this.options.scaleMode.originalHeight,
+ this.options.scaleMode.originalWidth];
+ },
+ update: function(position) {
+ var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
+ if (this.options.scaleContent && this.fontSize)
+ this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
+ this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
+ },
+ finish: function(position) {
+ if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
+ },
+ setDimensions: function(height, width) {
+ var d = { };
+ if (this.options.scaleX) d.width = width.round() + 'px';
+ if (this.options.scaleY) d.height = height.round() + 'px';
+ if (this.options.scaleFromCenter) {
+ var topd = (height - this.dims[0])/2;
+ var leftd = (width - this.dims[1])/2;
+ if (this.elementPositioning == 'absolute') {
+ if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
+ if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
+ } else {
+ if (this.options.scaleY) d.top = -topd + 'px';
+ if (this.options.scaleX) d.left = -leftd + 'px';
+ }
+ }
+ this.element.setStyle(d);
+ }
+});
+
+Effect.Highlight = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
+ this.start(options);
+ },
+ setup: function() {
+ // Prevent executing on elements not in the layout flow
+ if (this.element.getStyle('display')=='none') { this.cancel(); return; }
+ // Disable background image during the effect
+ this.oldStyle = { };
+ if (!this.options.keepBackgroundImage) {
+ this.oldStyle.backgroundImage = this.element.getStyle('background-image');
+ this.element.setStyle({backgroundImage: 'none'});
+ }
+ if (!this.options.endcolor)
+ this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
+ if (!this.options.restorecolor)
+ this.options.restorecolor = this.element.getStyle('background-color');
+ // init color calculations
+ this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
+ this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
+ },
+ update: function(position) {
+ this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
+ return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
+ },
+ finish: function() {
+ this.element.setStyle(Object.extend(this.oldStyle, {
+ backgroundColor: this.options.restorecolor
+ }));
+ }
+});
+
+Effect.ScrollTo = function(element) {
+ var options = arguments[1] || { },
+ scrollOffsets = document.viewport.getScrollOffsets(),
+ elementOffsets = DOKUid(element).cumulativeOffset();
+
+ if (options.offset) elementOffsets[1] += options.offset;
+
+ return new Effect.Tween(null,
+ scrollOffsets.top,
+ elementOffsets[1],
+ options,
+ function(p){ scrollTo(scrollOffsets.left, p.round()); }
+ );
+};
+
+/* ------------- combination effects ------------- */
+
+Effect.Fade = function(element) {
+ element = DOKUid(element);
+ var oldOpacity = element.getInlineOpacity();
+ var options = Object.extend({
+ from: element.getOpacity() || 1.0,
+ to: 0.0,
+ afterFinishInternal: function(effect) {
+ if (effect.options.to!=0) return;
+ effect.element.hide().setStyle({opacity: oldOpacity});
+ }
+ }, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Appear = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
+ to: 1.0,
+ // force Safari to render floated elements properly
+ afterFinishInternal: function(effect) {
+ effect.element.forceRerendering();
+ },
+ beforeSetup: function(effect) {
+ effect.element.setOpacity(effect.options.from).show();
+ }}, arguments[1] || { });
+ return new Effect.Opacity(element,options);
+};
+
+Effect.Puff = function(element) {
+ element = DOKUid(element);
+ var oldStyle = {
+ opacity: element.getInlineOpacity(),
+ position: element.getStyle('position'),
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height
+ };
+ return new Effect.Parallel(
+ [ new Effect.Scale(element, 200,
+ { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
+ Object.extend({ duration: 1.0,
+ beforeSetupInternal: function(effect) {
+ Position.absolutize(effect.effects[0].element);
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().setStyle(oldStyle); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindUp = function(element) {
+ element = DOKUid(element);
+ element.makeClipping();
+ return new Effect.Scale(element, 0,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ restoreAfterFinish: true,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.BlindDown = function(element) {
+ element = DOKUid(element);
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: 0,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping();
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.SwitchOff = function(element) {
+ element = DOKUid(element);
+ var oldOpacity = element.getInlineOpacity();
+ return new Effect.Appear(element, Object.extend({
+ duration: 0.4,
+ from: 0,
+ transition: Effect.Transitions.flicker,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(effect.element, 1, {
+ duration: 0.3, scaleFromCenter: true,
+ scaleX: false, scaleContent: false, restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
+ }
+ });
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.DropOut = function(element) {
+ element = DOKUid(element);
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left'),
+ opacity: element.getInlineOpacity() };
+ return new Effect.Parallel(
+ [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
+ Object.extend(
+ { duration: 0.5,
+ beforeSetup: function(effect) {
+ effect.effects[0].element.makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
+ }
+ }, arguments[1] || { }));
+};
+
+Effect.Shake = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ distance: 20,
+ duration: 0.5
+ }, arguments[1] || {});
+ var distance = parseFloat(options.distance);
+ var split = parseFloat(options.duration) / 10.0;
+ var oldStyle = {
+ top: element.getStyle('top'),
+ left: element.getStyle('left') };
+ return new Effect.Move(element,
+ { x: distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) {
+ new Effect.Move(effect.element,
+ { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+ effect.element.undoPositioned().setStyle(oldStyle);
+ }}); }}); }}); }}); }}); }});
+};
+
+Effect.SlideDown = function(element) {
+ element = DOKUid(element).cleanWhitespace();
+ // SlideDown need to have the content of the element wrapped in a container element with fixed height!
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, 100, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ scaleFrom: window.opera ? 0 : 1,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().setStyle({height: '0px'}).show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
+ }, arguments[1] || { })
+ );
+};
+
+Effect.SlideUp = function(element) {
+ element = DOKUid(element).cleanWhitespace();
+ var oldInnerBottom = element.down().getStyle('bottom');
+ var elementDimensions = element.getDimensions();
+ return new Effect.Scale(element, window.opera ? 0 : 1,
+ Object.extend({ scaleContent: false,
+ scaleX: false,
+ scaleMode: 'box',
+ scaleFrom: 100,
+ scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+ restoreAfterFinish: true,
+ afterSetup: function(effect) {
+ effect.element.makePositioned();
+ effect.element.down().makePositioned();
+ if (window.opera) effect.element.setStyle({top: ''});
+ effect.element.makeClipping().show();
+ },
+ afterUpdateInternal: function(effect) {
+ effect.element.down().setStyle({bottom:
+ (effect.dims[0] - effect.element.clientHeight) + 'px' });
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().undoPositioned();
+ effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
+ }
+ }, arguments[1] || { })
+ );
+};
+
+// Bug in opera makes the TD containing this element expand for a instance after finish
+Effect.Squish = function(element) {
+ return new Effect.Scale(element, window.opera ? 1 : 0, {
+ restoreAfterFinish: true,
+ beforeSetup: function(effect) {
+ effect.element.makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping();
+ }
+ });
+};
+
+Effect.Grow = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.full
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var initialMoveX, initialMoveY;
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ initialMoveX = initialMoveY = moveX = moveY = 0;
+ break;
+ case 'top-right':
+ initialMoveX = dims.width;
+ initialMoveY = moveY = 0;
+ moveX = -dims.width;
+ break;
+ case 'bottom-left':
+ initialMoveX = moveX = 0;
+ initialMoveY = dims.height;
+ moveY = -dims.height;
+ break;
+ case 'bottom-right':
+ initialMoveX = dims.width;
+ initialMoveY = dims.height;
+ moveX = -dims.width;
+ moveY = -dims.height;
+ break;
+ case 'center':
+ initialMoveX = dims.width / 2;
+ initialMoveY = dims.height / 2;
+ moveX = -dims.width / 2;
+ moveY = -dims.height / 2;
+ break;
+ }
+
+ return new Effect.Move(element, {
+ x: initialMoveX,
+ y: initialMoveY,
+ duration: 0.01,
+ beforeSetup: function(effect) {
+ effect.element.hide().makeClipping().makePositioned();
+ },
+ afterFinishInternal: function(effect) {
+ new Effect.Parallel(
+ [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
+ new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
+ new Effect.Scale(effect.element, 100, {
+ scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
+ sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
+ ], Object.extend({
+ beforeSetup: function(effect) {
+ effect.effects[0].element.setStyle({height: '0px'}).show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
+ }
+ }, options)
+ );
+ }
+ });
+};
+
+Effect.Shrink = function(element) {
+ element = DOKUid(element);
+ var options = Object.extend({
+ direction: 'center',
+ moveTransition: Effect.Transitions.sinoidal,
+ scaleTransition: Effect.Transitions.sinoidal,
+ opacityTransition: Effect.Transitions.none
+ }, arguments[1] || { });
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ height: element.style.height,
+ width: element.style.width,
+ opacity: element.getInlineOpacity() };
+
+ var dims = element.getDimensions();
+ var moveX, moveY;
+
+ switch (options.direction) {
+ case 'top-left':
+ moveX = moveY = 0;
+ break;
+ case 'top-right':
+ moveX = dims.width;
+ moveY = 0;
+ break;
+ case 'bottom-left':
+ moveX = 0;
+ moveY = dims.height;
+ break;
+ case 'bottom-right':
+ moveX = dims.width;
+ moveY = dims.height;
+ break;
+ case 'center':
+ moveX = dims.width / 2;
+ moveY = dims.height / 2;
+ break;
+ }
+
+ return new Effect.Parallel(
+ [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
+ new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
+ new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
+ ], Object.extend({
+ beforeStartInternal: function(effect) {
+ effect.effects[0].element.makePositioned().makeClipping();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
+ }, options)
+ );
+};
+
+Effect.Pulsate = function(element) {
+ element = DOKUid(element);
+ var options = arguments[1] || { },
+ oldOpacity = element.getInlineOpacity(),
+ transition = options.transition || Effect.Transitions.linear,
+ reverser = function(pos){
+ return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
+ };
+
+ return new Effect.Opacity(element,
+ Object.extend(Object.extend({ duration: 2.0, from: 0,
+ afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
+ }, options), {transition: reverser}));
+};
+
+Effect.Fold = function(element) {
+ element = DOKUid(element);
+ var oldStyle = {
+ top: element.style.top,
+ left: element.style.left,
+ width: element.style.width,
+ height: element.style.height };
+ element.makeClipping();
+ return new Effect.Scale(element, 5, Object.extend({
+ scaleContent: false,
+ scaleX: false,
+ afterFinishInternal: function(effect) {
+ new Effect.Scale(element, 1, {
+ scaleContent: false,
+ scaleY: false,
+ afterFinishInternal: function(effect) {
+ effect.element.hide().undoClipping().setStyle(oldStyle);
+ } });
+ }}, arguments[1] || { }));
+};
+
+Effect.Morph = Class.create(Effect.Base, {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ if (!this.element) throw(Effect._elementDoesNotExistError);
+ var options = Object.extend({
+ style: { }
+ }, arguments[1] || { });
+
+ if (!Object.isString(options.style)) this.style = $H(options.style);
+ else {
+ if (options.style.include(':'))
+ this.style = options.style.parseStyle();
+ else {
+ this.element.addClassName(options.style);
+ this.style = $H(this.element.getStyles());
+ this.element.removeClassName(options.style);
+ var css = this.element.getStyles();
+ this.style = this.style.reject(function(style) {
+ return style.value == css[style.key];
+ });
+ options.afterFinishInternal = function(effect) {
+ effect.element.addClassName(effect.options.style);
+ effect.transforms.each(function(transform) {
+ effect.element.style[transform.style] = '';
+ });
+ };
+ }
+ }
+ this.start(options);
+ },
+
+ setup: function(){
+ function parseColor(color){
+ if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
+ color = color.parseColor();
+ return $R(0,2).map(function(i){
+ return parseInt( color.slice(i*2+1,i*2+3), 16 );
+ });
+ }
+ this.transforms = this.style.map(function(pair){
+ var property = pair[0], value = pair[1], unit = null;
+
+ if (value.parseColor('#zzzzzz') != '#zzzzzz') {
+ value = value.parseColor();
+ unit = 'color';
+ } else if (property == 'opacity') {
+ value = parseFloat(value);
+ if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+ this.element.setStyle({zoom: 1});
+ } else if (Element.CSS_LENGTH.test(value)) {
+ var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
+ value = parseFloat(components[1]);
+ unit = (components.length == 3) ? components[2] : null;
+ }
+
+ var originalValue = this.element.getStyle(property);
+ return {
+ style: property.camelize(),
+ originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
+ targetValue: unit=='color' ? parseColor(value) : value,
+ unit: unit
+ };
+ }.bind(this)).reject(function(transform){
+ return (
+ (transform.originalValue == transform.targetValue) ||
+ (
+ transform.unit != 'color' &&
+ (isNaN(transform.originalValue) || isNaN(transform.targetValue))
+ )
+ );
+ });
+ },
+ update: function(position) {
+ var style = { }, transform, i = this.transforms.length;
+ while(i--)
+ style[(transform = this.transforms[i]).style] =
+ transform.unit=='color' ? '#'+
+ (Math.round(transform.originalValue[0]+
+ (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
+ (Math.round(transform.originalValue[1]+
+ (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
+ (Math.round(transform.originalValue[2]+
+ (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
+ (transform.originalValue +
+ (transform.targetValue - transform.originalValue) * position).toFixed(3) +
+ (transform.unit === null ? '' : transform.unit);
+ this.element.setStyle(style, true);
+ }
+});
+
+Effect.Transform = Class.create({
+ initialize: function(tracks){
+ this.tracks = [];
+ this.options = arguments[1] || { };
+ this.addTracks(tracks);
+ },
+ addTracks: function(tracks){
+ tracks.each(function(track){
+ track = $H(track);
+ var data = track.values().first();
+ this.tracks.push($H({
+ ids: track.keys().first(),
+ effect: Effect.Morph,
+ options: { style: data }
+ }));
+ }.bind(this));
+ return this;
+ },
+ play: function(){
+ return new Effect.Parallel(
+ this.tracks.map(function(track){
+ var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
+ var elements = [DOKUid(ids) || $$(ids)].flatten();
+ return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
+ }).flatten(),
+ this.options
+ );
+ }
+});
+
+Element.CSS_PROPERTIES = $w(
+ 'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
+ 'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
+ 'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
+ 'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
+ 'fontSize fontWeight height left letterSpacing lineHeight ' +
+ 'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
+ 'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
+ 'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
+ 'right textIndent top width wordSpacing zIndex');
+
+Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
+
+String.__parseStyleElement = document.createElement('div');
+String.prototype.parseStyle = function(){
+ var style, styleRules = $H();
+ if (Prototype.Browser.WebKit)
+ style = new Element('div',{style:this}).style;
+ else {
+ String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
+ style = String.__parseStyleElement.childNodes[0].style;
+ }
+
+ Element.CSS_PROPERTIES.each(function(property){
+ if (style[property]) styleRules.set(property, style[property]);
+ });
+
+ if (Prototype.Browser.IE && this.include('opacity'))
+ styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
+
+ return styleRules;
+};
+
+if (document.defaultView && document.defaultView.getComputedStyle) {
+ Element.getStyles = function(element) {
+ var css = document.defaultView.getComputedStyle(DOKUid(element), null);
+ return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
+ styles[property] = css[property];
+ return styles;
+ });
+ };
+} else {
+ Element.getStyles = function(element) {
+ element = DOKUid(element);
+ var css = element.currentStyle, styles;
+ styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
+ results[property] = css[property];
+ return results;
+ });
+ if (!styles.opacity) styles.opacity = element.getOpacity();
+ return styles;
+ };
+}
+
+Effect.Methods = {
+ morph: function(element, style) {
+ element = DOKUid(element);
+ new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
+ return element;
+ },
+ visualEffect: function(element, effect, options) {
+ element = DOKUid(element);
+ var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
+ new Effect[klass](element, options);
+ return element;
+ },
+ highlight: function(element, options) {
+ element = DOKUid(element);
+ new Effect.Highlight(element, options);
+ return element;
+ }
+};
+
+$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
+ 'pulsate shake puff squish switchOff dropOut').each(
+ function(effect) {
+ Effect.Methods[effect] = function(element, options){
+ element = DOKUid(element);
+ Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
+ return element;
+ };
+ }
+);
+
+$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
+ function(f) { Effect.Methods[f] = Element[f]; }
+);
+
+Element.addMethods(Effect.Methods);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js
new file mode 100755
index 000000000..d6ec5cd63
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js
@@ -0,0 +1,153 @@
+/*
+Presentacular. v 0.1
+http://labs.cavorite.com/presentacular/
+(c) 2005, Juan Manuel Caicedo
+
+This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+See http://www.gnu.org/copyleft/gpl.html for more information
+
+*/
+
+/*
+Creates a chain function.
+
+Todo:
+ Handle return values
+ Add a chained property with a reference to the original function
+
+Static method
+*/
+Function.chain = function(from,ext){
+ return function() {
+ from.apply(this,arguments)
+ ext.apply(this,arguments)
+ }
+}
+
+/*
+Creates a chained function
+Instance method
+*/
+Function.prototype.chain = function(){
+ var __source = this
+ var exts = arguments
+ return function(){
+ __source.apply(this,arguments)
+ for (e = 0; e < exts.length; e++){
+ exts[e].apply(this,arguments)
+ }
+ }
+}
+
+/*
+Applies function f to each element of the list
+*/
+function Map(list,f){
+ var r = []
+ for (var i=0; i < list.length; i++){
+ r.push(f.call(this,list[i]))
+ }
+ return r
+}
+
+
+
+var Presentacular = {}
+
+/*
+Available effects
+TODO: Provide a function to add effects
+*/
+Presentacular.effects = {
+ blinddown: Effect.BlindDown,
+ blindup: Effect.BlindUp,
+ appear: Effect.Appear,
+ puff: Effect.Puff,
+ shake: Effect.Shake,
+ pulsate: Effect.Pulsate,
+ slidedown: Effect.SlideDown,
+ slideup: Effect.SlideUp,
+ highlight: Effect.Highlight,
+ grow: Effect.Grow,
+ fade: Effect.Fade,
+ fold: Effect.Fold,
+ shrink: Effect.Shrink,
+ dropout: Effect.DropOut,
+ switchoff: Effect.SwitchOff,
+ squish: Effect.Squish
+}
+
+/*
+Apply effects to element elm.
+
+parentClasses: If true, include effects defined in the parent element. Used for lists (ul, ol)
+
+*/
+Presentacular.applyEffects = function(elm,parentClasses){
+
+ var c = []
+ if (parentClasses && elm.className)
+ try {
+ c = c.concat(elm.parentNode.className.split(' '))
+ c = c.concat(elm.className.split(' '))
+ } catch (exc) {
+ return;
+ }
+ Map(c, function(cl){
+ if (!cl) return
+
+
+ //Proof of concept. this code could (and should) be more elegant
+ cl = cl.toLowerCase().split('_')
+
+ var opts = {duration: 1}
+ if (cl.length > 1){
+ opts.duration = cl[1]
+ }
+
+ if (Presentacular.effects[cl[0]]){
+ Presentacular.effects[cl[0]].call(this,elm,opts)
+ }
+ return
+ })
+}
+
+
+/*
+Chained function
+*/
+function ChangeSlide(step){
+
+ var ce = DOKUid('slide' + snum)
+
+ //Apply slide effects
+ Presentacular.applyEffects(ce)
+
+ //Apply effects to all elements but the incrementals
+ Map(ce.getElementsByTagName('*'), function(elm){
+ if (!hasClass(elm,"incremental")){
+ Presentacular.applyEffects(elm)
+ }
+ })
+}
+
+
+/*
+Chained function
+*/
+function ApplyCurrentElement(elm,className){
+ if (className == "current"){
+ Presentacular.applyEffects(elm,true)
+ }
+}
+
+/*
+Function chaining: execute the second function after the first one has finished
+
+This was necesary in order to keep the same function names and because I want
+to *extend* S5 instead of *edit* it.
+
+*/
+window.addClass = addClass.chain(ApplyCurrentElement)
+window.go = go.chain(ChangeSlide)
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js
new file mode 100644
index 000000000..f100f84a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js
@@ -0,0 +1,4874 @@
+/* Prototype JavaScript framework, version 1.6.1
+ * (c) 2005-2009 Sam Stephenson
+ *
+ * Prototype is freely distributable under the terms of an MIT-style license.
+ * For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+ Version: '1.6.1',
+
+ Browser: (function(){
+ var ua = navigator.userAgent;
+ var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
+ return {
+ IE: !!window.attachEvent && !isOpera,
+ Opera: isOpera,
+ WebKit: ua.indexOf('AppleWebKit/') > -1,
+ Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
+ MobileSafari: /Apple.*Mobile.*Safari/.test(ua)
+ }
+ })(),
+
+ BrowserFeatures: {
+ XPath: !!document.evaluate,
+ SelectorsAPI: !!document.querySelector,
+ ElementExtensions: (function() {
+ var constructor = window.Element || window.HTMLElement;
+ return !!(constructor && constructor.prototype);
+ })(),
+ SpecificElementExtensions: (function() {
+ if (typeof window.HTMLDivElement !== 'undefined')
+ return true;
+
+ var div = document.createElement('div');
+ var form = document.createElement('form');
+ var isSupported = false;
+
+ if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
+ isSupported = true;
+ }
+
+ div = form = null;
+
+ return isSupported;
+ })()
+ },
+
+ ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+ JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+ emptyFunction: function() { },
+ K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+ Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+
+var Abstract = { };
+
+
+var Try = {
+ these: function() {
+ var returnValue;
+
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ var lambda = arguments[i];
+ try {
+ returnValue = lambda();
+ break;
+ } catch (e) { }
+ }
+
+ return returnValue;
+ }
+};
+
+/* Based on Alex Arnell's inheritance implementation. */
+
+var Class = (function() {
+ function subclass() {};
+ function create() {
+ var parent = null, properties = $A(arguments);
+ if (Object.isFunction(properties[0]))
+ parent = properties.shift();
+
+ function klass() {
+ this.initialize.apply(this, arguments);
+ }
+
+ Object.extend(klass, Class.Methods);
+ klass.superclass = parent;
+ klass.subclasses = [];
+
+ if (parent) {
+ subclass.prototype = parent.prototype;
+ klass.prototype = new subclass;
+ parent.subclasses.push(klass);
+ }
+
+ for (var i = 0; i < properties.length; i++)
+ klass.addMethods(properties[i]);
+
+ if (!klass.prototype.initialize)
+ klass.prototype.initialize = Prototype.emptyFunction;
+
+ klass.prototype.constructor = klass;
+ return klass;
+ }
+
+ function addMethods(source) {
+ var ancestor = this.superclass && this.superclass.prototype;
+ var properties = Object.keys(source);
+
+ if (!Object.keys({ toString: true }).length) {
+ if (source.toString != Object.prototype.toString)
+ properties.push("toString");
+ if (source.valueOf != Object.prototype.valueOf)
+ properties.push("valueOf");
+ }
+
+ for (var i = 0, length = properties.length; i < length; i++) {
+ var property = properties[i], value = source[property];
+ if (ancestor && Object.isFunction(value) &&
+ value.argumentNames().first() == "$super") {
+ var method = value;
+ value = (function(m) {
+ return function() { return ancestor[m].apply(this, arguments); };
+ })(property).wrap(method);
+
+ value.valueOf = method.valueOf.bind(method);
+ value.toString = method.toString.bind(method);
+ }
+ this.prototype[property] = value;
+ }
+
+ return this;
+ }
+
+ return {
+ create: create,
+ Methods: {
+ addMethods: addMethods
+ }
+ };
+})();
+(function() {
+
+ var _toString = Object.prototype.toString;
+
+ function extend(destination, source) {
+ for (var property in source)
+ destination[property] = source[property];
+ return destination;
+ }
+
+ function inspect(object) {
+ try {
+ if (isUndefined(object)) return 'undefined';
+ if (object === null) return 'null';
+ return object.inspect ? object.inspect() : String(object);
+ } catch (e) {
+ if (e instanceof RangeError) return '...';
+ throw e;
+ }
+ }
+
+ function toJSON(object) {
+ var type = typeof object;
+ switch (type) {
+ case 'undefined':
+ case 'function':
+ case 'unknown': return;
+ case 'boolean': return object.toString();
+ }
+
+ if (object === null) return 'null';
+ if (object.toJSON) return object.toJSON();
+ if (isElement(object)) return;
+
+ var results = [];
+ for (var property in object) {
+ var value = toJSON(object[property]);
+ if (!isUndefined(value))
+ results.push(property.toJSON() + ': ' + value);
+ }
+
+ return '{' + results.join(', ') + '}';
+ }
+
+ function toQueryString(object) {
+ return $H(object).toQueryString();
+ }
+
+ function toHTML(object) {
+ return object && object.toHTML ? object.toHTML() : String.interpret(object);
+ }
+
+ function keys(object) {
+ var results = [];
+ for (var property in object)
+ results.push(property);
+ return results;
+ }
+
+ function values(object) {
+ var results = [];
+ for (var property in object)
+ results.push(object[property]);
+ return results;
+ }
+
+ function clone(object) {
+ return extend({ }, object);
+ }
+
+ function isElement(object) {
+ return !!(object && object.nodeType == 1);
+ }
+
+ function isArray(object) {
+ return _toString.call(object) == "[object Array]";
+ }
+
+
+ function isHash(object) {
+ return object instanceof Hash;
+ }
+
+ function isFunction(object) {
+ return typeof object === "function";
+ }
+
+ function isString(object) {
+ return _toString.call(object) == "[object String]";
+ }
+
+ function isNumber(object) {
+ return _toString.call(object) == "[object Number]";
+ }
+
+ function isUndefined(object) {
+ return typeof object === "undefined";
+ }
+
+ extend(Object, {
+ extend: extend,
+ inspect: inspect,
+ toJSON: toJSON,
+ toQueryString: toQueryString,
+ toHTML: toHTML,
+ keys: keys,
+ values: values,
+ clone: clone,
+ isElement: isElement,
+ isArray: isArray,
+ isHash: isHash,
+ isFunction: isFunction,
+ isString: isString,
+ isNumber: isNumber,
+ isUndefined: isUndefined
+ });
+})();
+Object.extend(Function.prototype, (function() {
+ var slice = Array.prototype.slice;
+
+ function update(array, args) {
+ var arrayLength = array.length, length = args.length;
+ while (length--) array[arrayLength + length] = args[length];
+ return array;
+ }
+
+ function merge(array, args) {
+ array = slice.call(array, 0);
+ return update(array, args);
+ }
+
+ function argumentNames() {
+ var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
+ .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
+ .replace(/\s+/g, '').split(',');
+ return names.length == 1 && !names[0] ? [] : names;
+ }
+
+ function bind(context) {
+ if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
+ var __method = this, args = slice.call(arguments, 1);
+ return function() {
+ var a = merge(args, arguments);
+ return __method.apply(context, a);
+ }
+ }
+
+ function bindAsEventListener(context) {
+ var __method = this, args = slice.call(arguments, 1);
+ return function(event) {
+ var a = update([event || window.event], args);
+ return __method.apply(context, a);
+ }
+ }
+
+ function curry() {
+ if (!arguments.length) return this;
+ var __method = this, args = slice.call(arguments, 0);
+ return function() {
+ var a = merge(args, arguments);
+ return __method.apply(this, a);
+ }
+ }
+
+ function delay(timeout) {
+ var __method = this, args = slice.call(arguments, 1);
+ timeout = timeout * 1000
+ return window.setTimeout(function() {
+ return __method.apply(__method, args);
+ }, timeout);
+ }
+
+ function defer() {
+ var args = update([0.01], arguments);
+ return this.delay.apply(this, args);
+ }
+
+ function wrap(wrapper) {
+ var __method = this;
+ return function() {
+ var a = update([__method.bind(this)], arguments);
+ return wrapper.apply(this, a);
+ }
+ }
+
+ function methodize() {
+ if (this._methodized) return this._methodized;
+ var __method = this;
+ return this._methodized = function() {
+ var a = update([this], arguments);
+ return __method.apply(null, a);
+ };
+ }
+
+ return {
+ argumentNames: argumentNames,
+ bind: bind,
+ bindAsEventListener: bindAsEventListener,
+ curry: curry,
+ delay: delay,
+ defer: defer,
+ wrap: wrap,
+ methodize: methodize
+ }
+})());
+
+
+Date.prototype.toJSON = function() {
+ return '"' + this.getUTCFullYear() + '-' +
+ (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+ this.getUTCDate().toPaddedString(2) + 'T' +
+ this.getUTCHours().toPaddedString(2) + ':' +
+ this.getUTCMinutes().toPaddedString(2) + ':' +
+ this.getUTCSeconds().toPaddedString(2) + 'Z"';
+};
+
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+ return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+var PeriodicalExecuter = Class.create({
+ initialize: function(callback, frequency) {
+ this.callback = callback;
+ this.frequency = frequency;
+ this.currentlyExecuting = false;
+
+ this.registerCallback();
+ },
+
+ registerCallback: function() {
+ this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+ },
+
+ execute: function() {
+ this.callback(this);
+ },
+
+ stop: function() {
+ if (!this.timer) return;
+ clearInterval(this.timer);
+ this.timer = null;
+ },
+
+ onTimerEvent: function() {
+ if (!this.currentlyExecuting) {
+ try {
+ this.currentlyExecuting = true;
+ this.execute();
+ this.currentlyExecuting = false;
+ } catch(e) {
+ this.currentlyExecuting = false;
+ throw e;
+ }
+ }
+ }
+});
+Object.extend(String, {
+ interpret: function(value) {
+ return value == null ? '' : String(value);
+ },
+ specialChar: {
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '\\': '\\\\'
+ }
+});
+
+Object.extend(String.prototype, (function() {
+
+ function prepareReplacement(replacement) {
+ if (Object.isFunction(replacement)) return replacement;
+ var template = new Template(replacement);
+ return function(match) { return template.evaluate(match) };
+ }
+
+ function gsub(pattern, replacement) {
+ var result = '', source = this, match;
+ replacement = prepareReplacement(replacement);
+
+ if (Object.isString(pattern))
+ pattern = RegExp.escape(pattern);
+
+ if (!(pattern.length || pattern.source)) {
+ replacement = replacement('');
+ return replacement + source.split('').join(replacement) + replacement;
+ }
+
+ while (source.length > 0) {
+ if (match = source.match(pattern)) {
+ result += source.slice(0, match.index);
+ result += String.interpret(replacement(match));
+ source = source.slice(match.index + match[0].length);
+ } else {
+ result += source, source = '';
+ }
+ }
+ return result;
+ }
+
+ function sub(pattern, replacement, count) {
+ replacement = prepareReplacement(replacement);
+ count = Object.isUndefined(count) ? 1 : count;
+
+ return this.gsub(pattern, function(match) {
+ if (--count < 0) return match[0];
+ return replacement(match);
+ });
+ }
+
+ function scan(pattern, iterator) {
+ this.gsub(pattern, iterator);
+ return String(this);
+ }
+
+ function truncate(length, truncation) {
+ length = length || 30;
+ truncation = Object.isUndefined(truncation) ? '...' : truncation;
+ return this.length > length ?
+ this.slice(0, length - truncation.length) + truncation : String(this);
+ }
+
+ function strip() {
+ return this.replace(/^\s+/, '').replace(/\s+$/, '');
+ }
+
+ function stripTags() {
+ return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
+ }
+
+ function stripScripts() {
+ return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+ }
+
+ function extractScripts() {
+ var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+ var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+ return (this.match(matchAll) || []).map(function(scriptTag) {
+ return (scriptTag.match(matchOne) || ['', ''])[1];
+ });
+ }
+
+ function evalScripts() {
+ return this.extractScripts().map(function(script) { return eval(script) });
+ }
+
+ function escapeHTML() {
+ return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+ }
+
+ function unescapeHTML() {
+ return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
+ }
+
+
+ function toQueryParams(separator) {
+ var match = this.strip().match(/([^?#]*)(#.*)?$/);
+ if (!match) return { };
+
+ return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+ if ((pair = pair.split('='))[0]) {
+ var key = decodeURIComponent(pair.shift());
+ var value = pair.length > 1 ? pair.join('=') : pair[0];
+ if (value != undefined) value = decodeURIComponent(value);
+
+ if (key in hash) {
+ if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+ hash[key].push(value);
+ }
+ else hash[key] = value;
+ }
+ return hash;
+ });
+ }
+
+ function toArray() {
+ return this.split('');
+ }
+
+ function succ() {
+ return this.slice(0, this.length - 1) +
+ String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+ }
+
+ function times(count) {
+ return count < 1 ? '' : new Array(count + 1).join(this);
+ }
+
+ function camelize() {
+ var parts = this.split('-'), len = parts.length;
+ if (len == 1) return parts[0];
+
+ var camelized = this.charAt(0) == '-'
+ ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+ : parts[0];
+
+ for (var i = 1; i < len; i++)
+ camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+ return camelized;
+ }
+
+ function capitalize() {
+ return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+ }
+
+ function underscore() {
+ return this.replace(/::/g, '/')
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
+ .replace(/([a-z\d])([A-Z])/g, '$1_$2')
+ .replace(/-/g, '_')
+ .toLowerCase();
+ }
+
+ function dasherize() {
+ return this.replace(/_/g, '-');
+ }
+
+ function inspect(useDoubleQuotes) {
+ var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
+ if (character in String.specialChar) {
+ return String.specialChar[character];
+ }
+ return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
+ });
+ if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+ return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+ }
+
+ function toJSON() {
+ return this.inspect(true);
+ }
+
+ function unfilterJSON(filter) {
+ return this.replace(filter || Prototype.JSONFilter, '$1');
+ }
+
+ function isJSON() {
+ var str = this;
+ if (str.blank()) return false;
+ str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
+ return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+ }
+
+ function evalJSON(sanitize) {
+ var json = this.unfilterJSON();
+ try {
+ if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+ } catch (e) { }
+ throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+ }
+
+ function include(pattern) {
+ return this.indexOf(pattern) > -1;
+ }
+
+ function startsWith(pattern) {
+ return this.indexOf(pattern) === 0;
+ }
+
+ function endsWith(pattern) {
+ var d = this.length - pattern.length;
+ return d >= 0 && this.lastIndexOf(pattern) === d;
+ }
+
+ function empty() {
+ return this == '';
+ }
+
+ function blank() {
+ return /^\s*$/.test(this);
+ }
+
+ function interpolate(object, pattern) {
+ return new Template(this, pattern).evaluate(object);
+ }
+
+ return {
+ gsub: gsub,
+ sub: sub,
+ scan: scan,
+ truncate: truncate,
+ strip: String.prototype.trim ? String.prototype.trim : strip,
+ stripTags: stripTags,
+ stripScripts: stripScripts,
+ extractScripts: extractScripts,
+ evalScripts: evalScripts,
+ escapeHTML: escapeHTML,
+ unescapeHTML: unescapeHTML,
+ toQueryParams: toQueryParams,
+ parseQuery: toQueryParams,
+ toArray: toArray,
+ succ: succ,
+ times: times,
+ camelize: camelize,
+ capitalize: capitalize,
+ underscore: underscore,
+ dasherize: dasherize,
+ inspect: inspect,
+ toJSON: toJSON,
+ unfilterJSON: unfilterJSON,
+ isJSON: isJSON,
+ evalJSON: evalJSON,
+ include: include,
+ startsWith: startsWith,
+ endsWith: endsWith,
+ empty: empty,
+ blank: blank,
+ interpolate: interpolate
+ };
+})());
+
+var Template = Class.create({
+ initialize: function(template, pattern) {
+ this.template = template.toString();
+ this.pattern = pattern || Template.Pattern;
+ },
+
+ evaluate: function(object) {
+ if (object && Object.isFunction(object.toTemplateReplacements))
+ object = object.toTemplateReplacements();
+
+ return this.template.gsub(this.pattern, function(match) {
+ if (object == null) return (match[1] + '');
+
+ var before = match[1] || '';
+ if (before == '\\') return match[2];
+
+ var ctx = object, expr = match[3];
+ var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+ match = pattern.exec(expr);
+ if (match == null) return before;
+
+ while (match != null) {
+ var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
+ ctx = ctx[comp];
+ if (null == ctx || '' == match[3]) break;
+ expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+ match = pattern.exec(expr);
+ }
+
+ return before + String.interpret(ctx);
+ });
+ }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = (function() {
+ function each(iterator, context) {
+ var index = 0;
+ try {
+ this._each(function(value) {
+ iterator.call(context, value, index++);
+ });
+ } catch (e) {
+ if (e != $break) throw e;
+ }
+ return this;
+ }
+
+ function eachSlice(number, iterator, context) {
+ var index = -number, slices = [], array = this.toArray();
+ if (number < 1) return array;
+ while ((index += number) < array.length)
+ slices.push(array.slice(index, index+number));
+ return slices.collect(iterator, context);
+ }
+
+ function all(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = true;
+ this.each(function(value, index) {
+ result = result && !!iterator.call(context, value, index);
+ if (!result) throw $break;
+ });
+ return result;
+ }
+
+ function any(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result = false;
+ this.each(function(value, index) {
+ if (result = !!iterator.call(context, value, index))
+ throw $break;
+ });
+ return result;
+ }
+
+ function collect(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+ this.each(function(value, index) {
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ }
+
+ function detect(iterator, context) {
+ var result;
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index)) {
+ result = value;
+ throw $break;
+ }
+ });
+ return result;
+ }
+
+ function findAll(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ }
+
+ function grep(filter, iterator, context) {
+ iterator = iterator || Prototype.K;
+ var results = [];
+
+ if (Object.isString(filter))
+ filter = new RegExp(RegExp.escape(filter));
+
+ this.each(function(value, index) {
+ if (filter.match(value))
+ results.push(iterator.call(context, value, index));
+ });
+ return results;
+ }
+
+ function include(object) {
+ if (Object.isFunction(this.indexOf))
+ if (this.indexOf(object) != -1) return true;
+
+ var found = false;
+ this.each(function(value) {
+ if (value == object) {
+ found = true;
+ throw $break;
+ }
+ });
+ return found;
+ }
+
+ function inGroupsOf(number, fillWith) {
+ fillWith = Object.isUndefined(fillWith) ? null : fillWith;
+ return this.eachSlice(number, function(slice) {
+ while(slice.length < number) slice.push(fillWith);
+ return slice;
+ });
+ }
+
+ function inject(memo, iterator, context) {
+ this.each(function(value, index) {
+ memo = iterator.call(context, memo, value, index);
+ });
+ return memo;
+ }
+
+ function invoke(method) {
+ var args = $A(arguments).slice(1);
+ return this.map(function(value) {
+ return value[method].apply(value, args);
+ });
+ }
+
+ function max(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value >= result)
+ result = value;
+ });
+ return result;
+ }
+
+ function min(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var result;
+ this.each(function(value, index) {
+ value = iterator.call(context, value, index);
+ if (result == null || value < result)
+ result = value;
+ });
+ return result;
+ }
+
+ function partition(iterator, context) {
+ iterator = iterator || Prototype.K;
+ var trues = [], falses = [];
+ this.each(function(value, index) {
+ (iterator.call(context, value, index) ?
+ trues : falses).push(value);
+ });
+ return [trues, falses];
+ }
+
+ function pluck(property) {
+ var results = [];
+ this.each(function(value) {
+ results.push(value[property]);
+ });
+ return results;
+ }
+
+ function reject(iterator, context) {
+ var results = [];
+ this.each(function(value, index) {
+ if (!iterator.call(context, value, index))
+ results.push(value);
+ });
+ return results;
+ }
+
+ function sortBy(iterator, context) {
+ return this.map(function(value, index) {
+ return {
+ value: value,
+ criteria: iterator.call(context, value, index)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria, b = right.criteria;
+ return a < b ? -1 : a > b ? 1 : 0;
+ }).pluck('value');
+ }
+
+ function toArray() {
+ return this.map();
+ }
+
+ function zip() {
+ var iterator = Prototype.K, args = $A(arguments);
+ if (Object.isFunction(args.last()))
+ iterator = args.pop();
+
+ var collections = [this].concat(args).map($A);
+ return this.map(function(value, index) {
+ return iterator(collections.pluck(index));
+ });
+ }
+
+ function size() {
+ return this.toArray().length;
+ }
+
+ function inspect() {
+ return '#<Enumerable:' + this.toArray().inspect() + '>';
+ }
+
+
+
+
+
+
+
+
+
+ return {
+ each: each,
+ eachSlice: eachSlice,
+ all: all,
+ every: all,
+ any: any,
+ some: any,
+ collect: collect,
+ map: collect,
+ detect: detect,
+ findAll: findAll,
+ select: findAll,
+ filter: findAll,
+ grep: grep,
+ include: include,
+ member: include,
+ inGroupsOf: inGroupsOf,
+ inject: inject,
+ invoke: invoke,
+ max: max,
+ min: min,
+ partition: partition,
+ pluck: pluck,
+ reject: reject,
+ sortBy: sortBy,
+ toArray: toArray,
+ entries: toArray,
+ zip: zip,
+ size: size,
+ inspect: inspect,
+ find: detect
+ };
+})();
+function $A(iterable) {
+ if (!iterable) return [];
+ if ('toArray' in Object(iterable)) return iterable.toArray();
+ var length = iterable.length || 0, results = new Array(length);
+ while (length--) results[length] = iterable[length];
+ return results;
+}
+
+function $w(string) {
+ if (!Object.isString(string)) return [];
+ string = string.strip();
+ return string ? string.split(/\s+/) : [];
+}
+
+Array.from = $A;
+
+
+(function() {
+ var arrayProto = Array.prototype,
+ slice = arrayProto.slice,
+ _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available
+
+ function each(iterator) {
+ for (var i = 0, length = this.length; i < length; i++)
+ iterator(this[i]);
+ }
+ if (!_each) _each = each;
+
+ function clear() {
+ this.length = 0;
+ return this;
+ }
+
+ function first() {
+ return this[0];
+ }
+
+ function last() {
+ return this[this.length - 1];
+ }
+
+ function compact() {
+ return this.select(function(value) {
+ return value != null;
+ });
+ }
+
+ function flatten() {
+ return this.inject([], function(array, value) {
+ if (Object.isArray(value))
+ return array.concat(value.flatten());
+ array.push(value);
+ return array;
+ });
+ }
+
+ function without() {
+ var values = slice.call(arguments, 0);
+ return this.select(function(value) {
+ return !values.include(value);
+ });
+ }
+
+ function reverse(inline) {
+ return (inline !== false ? this : this.toArray())._reverse();
+ }
+
+ function uniq(sorted) {
+ return this.inject([], function(array, value, index) {
+ if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+ array.push(value);
+ return array;
+ });
+ }
+
+ function intersect(array) {
+ return this.uniq().findAll(function(item) {
+ return array.detect(function(value) { return item === value });
+ });
+ }
+
+
+ function clone() {
+ return slice.call(this, 0);
+ }
+
+ function size() {
+ return this.length;
+ }
+
+ function inspect() {
+ return '[' + this.map(Object.inspect).join(', ') + ']';
+ }
+
+ function toJSON() {
+ var results = [];
+ this.each(function(object) {
+ var value = Object.toJSON(object);
+ if (!Object.isUndefined(value)) results.push(value);
+ });
+ return '[' + results.join(', ') + ']';
+ }
+
+ function indexOf(item, i) {
+ i || (i = 0);
+ var length = this.length;
+ if (i < 0) i = length + i;
+ for (; i < length; i++)
+ if (this[i] === item) return i;
+ return -1;
+ }
+
+ function lastIndexOf(item, i) {
+ i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+ var n = this.slice(0, i).reverse().indexOf(item);
+ return (n < 0) ? n : i - n - 1;
+ }
+
+ function concat() {
+ var array = slice.call(this, 0), item;
+ for (var i = 0, length = arguments.length; i < length; i++) {
+ item = arguments[i];
+ if (Object.isArray(item) && !('callee' in item)) {
+ for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
+ array.push(item[j]);
+ } else {
+ array.push(item);
+ }
+ }
+ return array;
+ }
+
+ Object.extend(arrayProto, Enumerable);
+
+ if (!arrayProto._reverse)
+ arrayProto._reverse = arrayProto.reverse;
+
+ Object.extend(arrayProto, {
+ _each: _each,
+ clear: clear,
+ first: first,
+ last: last,
+ compact: compact,
+ flatten: flatten,
+ without: without,
+ reverse: reverse,
+ uniq: uniq,
+ intersect: intersect,
+ clone: clone,
+ toArray: clone,
+ size: size,
+ inspect: inspect,
+ toJSON: toJSON
+ });
+
+ var CONCAT_ARGUMENTS_BUGGY = (function() {
+ return [].concat(arguments)[0][0] !== 1;
+ })(1,2)
+
+ if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;
+
+ if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
+ if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
+})();
+function $H(object) {
+ return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+ function initialize(object) {
+ this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+ }
+
+ function _each(iterator) {
+ for (var key in this._object) {
+ var value = this._object[key], pair = [key, value];
+ pair.key = key;
+ pair.value = value;
+ iterator(pair);
+ }
+ }
+
+ function set(key, value) {
+ return this._object[key] = value;
+ }
+
+ function get(key) {
+ if (this._object[key] !== Object.prototype[key])
+ return this._object[key];
+ }
+
+ function unset(key) {
+ var value = this._object[key];
+ delete this._object[key];
+ return value;
+ }
+
+ function toObject() {
+ return Object.clone(this._object);
+ }
+
+ function keys() {
+ return this.pluck('key');
+ }
+
+ function values() {
+ return this.pluck('value');
+ }
+
+ function index(value) {
+ var match = this.detect(function(pair) {
+ return pair.value === value;
+ });
+ return match && match.key;
+ }
+
+ function merge(object) {
+ return this.clone().update(object);
+ }
+
+ function update(object) {
+ return new Hash(object).inject(this, function(result, pair) {
+ result.set(pair.key, pair.value);
+ return result;
+ });
+ }
+
+ function toQueryPair(key, value) {
+ if (Object.isUndefined(value)) return key;
+ return key + '=' + encodeURIComponent(String.interpret(value));
+ }
+
+ function toQueryString() {
+ return this.inject([], function(results, pair) {
+ var key = encodeURIComponent(pair.key), values = pair.value;
+
+ if (values && typeof values == 'object') {
+ if (Object.isArray(values))
+ return results.concat(values.map(toQueryPair.curry(key)));
+ } else results.push(toQueryPair(key, values));
+ return results;
+ }).join('&');
+ }
+
+ function inspect() {
+ return '#<Hash:{' + this.map(function(pair) {
+ return pair.map(Object.inspect).join(': ');
+ }).join(', ') + '}>';
+ }
+
+ function toJSON() {
+ return Object.toJSON(this.toObject());
+ }
+
+ function clone() {
+ return new Hash(this);
+ }
+
+ return {
+ initialize: initialize,
+ _each: _each,
+ set: set,
+ get: get,
+ unset: unset,
+ toObject: toObject,
+ toTemplateReplacements: toObject,
+ keys: keys,
+ values: values,
+ index: index,
+ merge: merge,
+ update: update,
+ toQueryString: toQueryString,
+ inspect: inspect,
+ toJSON: toJSON,
+ clone: clone
+ };
+})());
+
+Hash.from = $H;
+Object.extend(Number.prototype, (function() {
+ function toColorPart() {
+ return this.toPaddedString(2, 16);
+ }
+
+ function succ() {
+ return this + 1;
+ }
+
+ function times(iterator, context) {
+ $R(0, this, true).each(iterator, context);
+ return this;
+ }
+
+ function toPaddedString(length, radix) {
+ var string = this.toString(radix || 10);
+ return '0'.times(length - string.length) + string;
+ }
+
+ function toJSON() {
+ return isFinite(this) ? this.toString() : 'null';
+ }
+
+ function abs() {
+ return Math.abs(this);
+ }
+
+ function round() {
+ return Math.round(this);
+ }
+
+ function ceil() {
+ return Math.ceil(this);
+ }
+
+ function floor() {
+ return Math.floor(this);
+ }
+
+ return {
+ toColorPart: toColorPart,
+ succ: succ,
+ times: times,
+ toPaddedString: toPaddedString,
+ toJSON: toJSON,
+ abs: abs,
+ round: round,
+ ceil: ceil,
+ floor: floor
+ };
+})());
+
+function $R(start, end, exclusive) {
+ return new ObjectRange(start, end, exclusive);
+}
+
+var ObjectRange = Class.create(Enumerable, (function() {
+ function initialize(start, end, exclusive) {
+ this.start = start;
+ this.end = end;
+ this.exclusive = exclusive;
+ }
+
+ function _each(iterator) {
+ var value = this.start;
+ while (this.include(value)) {
+ iterator(value);
+ value = value.succ();
+ }
+ }
+
+ function include(value) {
+ if (value < this.start)
+ return false;
+ if (this.exclusive)
+ return value < this.end;
+ return value <= this.end;
+ }
+
+ return {
+ initialize: initialize,
+ _each: _each,
+ include: include
+ };
+})());
+
+
+
+var Ajax = {
+ getTransport: function() {
+ return Try.these(
+ function() {return new XMLHttpRequest()},
+ function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+ function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+ ) || false;
+ },
+
+ activeRequestCount: 0
+};
+
+Ajax.Responders = {
+ responders: [],
+
+ _each: function(iterator) {
+ this.responders._each(iterator);
+ },
+
+ register: function(responder) {
+ if (!this.include(responder))
+ this.responders.push(responder);
+ },
+
+ unregister: function(responder) {
+ this.responders = this.responders.without(responder);
+ },
+
+ dispatch: function(callback, request, transport, json) {
+ this.each(function(responder) {
+ if (Object.isFunction(responder[callback])) {
+ try {
+ responder[callback].apply(responder, [request, transport, json]);
+ } catch (e) { }
+ }
+ });
+ }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+ onCreate: function() { Ajax.activeRequestCount++ },
+ onComplete: function() { Ajax.activeRequestCount-- }
+});
+Ajax.Base = Class.create({
+ initialize: function(options) {
+ this.options = {
+ method: 'post',
+ asynchronous: true,
+ contentType: 'application/x-www-form-urlencoded',
+ encoding: 'UTF-8',
+ parameters: '',
+ evalJSON: true,
+ evalJS: true
+ };
+ Object.extend(this.options, options || { });
+
+ this.options.method = this.options.method.toLowerCase();
+
+ if (Object.isString(this.options.parameters))
+ this.options.parameters = this.options.parameters.toQueryParams();
+ else if (Object.isHash(this.options.parameters))
+ this.options.parameters = this.options.parameters.toObject();
+ }
+});
+Ajax.Request = Class.create(Ajax.Base, {
+ _complete: false,
+
+ initialize: function($super, url, options) {
+ $super(options);
+ this.transport = Ajax.getTransport();
+ this.request(url);
+ },
+
+ request: function(url) {
+ this.url = url;
+ this.method = this.options.method;
+ var params = Object.clone(this.options.parameters);
+
+ if (!['get', 'post'].include(this.method)) {
+ params['_method'] = this.method;
+ this.method = 'post';
+ }
+
+ this.parameters = params;
+
+ if (params = Object.toQueryString(params)) {
+ if (this.method == 'get')
+ this.url += (this.url.include('?') ? '&' : '?') + params;
+ else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+ params += '&_=';
+ }
+
+ try {
+ var response = new Ajax.Response(this);
+ if (this.options.onCreate) this.options.onCreate(response);
+ Ajax.Responders.dispatch('onCreate', this, response);
+
+ this.transport.open(this.method.toUpperCase(), this.url,
+ this.options.asynchronous);
+
+ if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+ this.transport.onreadystatechange = this.onStateChange.bind(this);
+ this.setRequestHeaders();
+
+ this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+ this.transport.send(this.body);
+
+ /* Force Firefox to handle ready state 4 for synchronous requests */
+ if (!this.options.asynchronous && this.transport.overrideMimeType)
+ this.onStateChange();
+
+ }
+ catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ onStateChange: function() {
+ var readyState = this.transport.readyState;
+ if (readyState > 1 && !((readyState == 4) && this._complete))
+ this.respondToReadyState(this.transport.readyState);
+ },
+
+ setRequestHeaders: function() {
+ var headers = {
+ 'X-Requested-With': 'XMLHttpRequest',
+ 'X-Prototype-Version': Prototype.Version,
+ 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+ };
+
+ if (this.method == 'post') {
+ headers['Content-type'] = this.options.contentType +
+ (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+ /* Force "Connection: close" for older Mozilla browsers to work
+ * around a bug where XMLHttpRequest sends an incorrect
+ * Content-length header. See Mozilla Bugzilla #246651.
+ */
+ if (this.transport.overrideMimeType &&
+ (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+ headers['Connection'] = 'close';
+ }
+
+ if (typeof this.options.requestHeaders == 'object') {
+ var extras = this.options.requestHeaders;
+
+ if (Object.isFunction(extras.push))
+ for (var i = 0, length = extras.length; i < length; i += 2)
+ headers[extras[i]] = extras[i+1];
+ else
+ $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+ }
+
+ for (var name in headers)
+ this.transport.setRequestHeader(name, headers[name]);
+ },
+
+ success: function() {
+ var status = this.getStatus();
+ return !status || (status >= 200 && status < 300);
+ },
+
+ getStatus: function() {
+ try {
+ return this.transport.status || 0;
+ } catch (e) { return 0 }
+ },
+
+ respondToReadyState: function(readyState) {
+ var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+ if (state == 'Complete') {
+ try {
+ this._complete = true;
+ (this.options['on' + response.status]
+ || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ var contentType = response.getHeader('Content-type');
+ if (this.options.evalJS == 'force'
+ || (this.options.evalJS && this.isSameOrigin() && contentType
+ && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+ this.evalResponse();
+ }
+
+ try {
+ (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+ Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+ } catch (e) {
+ this.dispatchException(e);
+ }
+
+ if (state == 'Complete') {
+ this.transport.onreadystatechange = Prototype.emptyFunction;
+ }
+ },
+
+ isSameOrigin: function() {
+ var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
+ return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
+ protocol: location.protocol,
+ domain: document.domain,
+ port: location.port ? ':' + location.port : ''
+ }));
+ },
+
+ getHeader: function(name) {
+ try {
+ return this.transport.getResponseHeader(name) || null;
+ } catch (e) { return null; }
+ },
+
+ evalResponse: function() {
+ try {
+ return eval((this.transport.responseText || '').unfilterJSON());
+ } catch (e) {
+ this.dispatchException(e);
+ }
+ },
+
+ dispatchException: function(exception) {
+ (this.options.onException || Prototype.emptyFunction)(this, exception);
+ Ajax.Responders.dispatch('onException', this, exception);
+ }
+});
+
+Ajax.Request.Events =
+ ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+
+
+
+
+
+
+
+Ajax.Response = Class.create({
+ initialize: function(request){
+ this.request = request;
+ var transport = this.transport = request.transport,
+ readyState = this.readyState = transport.readyState;
+
+ if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+ this.status = this.getStatus();
+ this.statusText = this.getStatusText();
+ this.responseText = String.interpret(transport.responseText);
+ this.headerJSON = this._getHeaderJSON();
+ }
+
+ if(readyState == 4) {
+ var xml = transport.responseXML;
+ this.responseXML = Object.isUndefined(xml) ? null : xml;
+ this.responseJSON = this._getResponseJSON();
+ }
+ },
+
+ status: 0,
+
+ statusText: '',
+
+ getStatus: Ajax.Request.prototype.getStatus,
+
+ getStatusText: function() {
+ try {
+ return this.transport.statusText || '';
+ } catch (e) { return '' }
+ },
+
+ getHeader: Ajax.Request.prototype.getHeader,
+
+ getAllHeaders: function() {
+ try {
+ return this.getAllResponseHeaders();
+ } catch (e) { return null }
+ },
+
+ getResponseHeader: function(name) {
+ return this.transport.getResponseHeader(name);
+ },
+
+ getAllResponseHeaders: function() {
+ return this.transport.getAllResponseHeaders();
+ },
+
+ _getHeaderJSON: function() {
+ var json = this.getHeader('X-JSON');
+ if (!json) return null;
+ json = decodeURIComponent(escape(json));
+ try {
+ return json.evalJSON(this.request.options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ },
+
+ _getResponseJSON: function() {
+ var options = this.request.options;
+ if (!options.evalJSON || (options.evalJSON != 'force' &&
+ !(this.getHeader('Content-type') || '').include('application/json')) ||
+ this.responseText.blank())
+ return null;
+ try {
+ return this.responseText.evalJSON(options.sanitizeJSON ||
+ !this.request.isSameOrigin());
+ } catch (e) {
+ this.request.dispatchException(e);
+ }
+ }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+ initialize: function($super, container, url, options) {
+ this.container = {
+ success: (container.success || container),
+ failure: (container.failure || (container.success ? null : container))
+ };
+
+ options = Object.clone(options);
+ var onComplete = options.onComplete;
+ options.onComplete = (function(response, json) {
+ this.updateContent(response.responseText);
+ if (Object.isFunction(onComplete)) onComplete(response, json);
+ }).bind(this);
+
+ $super(url, options);
+ },
+
+ updateContent: function(responseText) {
+ var receiver = this.container[this.success() ? 'success' : 'failure'],
+ options = this.options;
+
+ if (!options.evalScripts) responseText = responseText.stripScripts();
+
+ if (receiver = DOKUid(receiver)) {
+ if (options.insertion) {
+ if (Object.isString(options.insertion)) {
+ var insertion = { }; insertion[options.insertion] = responseText;
+ receiver.insert(insertion);
+ }
+ else options.insertion(receiver, responseText);
+ }
+ else receiver.update(responseText);
+ }
+ }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+ initialize: function($super, container, url, options) {
+ $super(options);
+ this.onComplete = this.options.onComplete;
+
+ this.frequency = (this.options.frequency || 2);
+ this.decay = (this.options.decay || 1);
+
+ this.updater = { };
+ this.container = container;
+ this.url = url;
+
+ this.start();
+ },
+
+ start: function() {
+ this.options.onComplete = this.updateComplete.bind(this);
+ this.onTimerEvent();
+ },
+
+ stop: function() {
+ this.updater.options.onComplete = undefined;
+ clearTimeout(this.timer);
+ (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+ },
+
+ updateComplete: function(response) {
+ if (this.options.decay) {
+ this.decay = (response.responseText == this.lastText ?
+ this.decay * this.options.decay : 1);
+
+ this.lastText = response.responseText;
+ }
+ this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+ },
+
+ onTimerEvent: function() {
+ this.updater = new Ajax.Updater(this.container, this.url, this.options);
+ }
+});
+
+
+
+function DOKUid(element) {
+ if (arguments.length > 1) {
+ for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+ elements.push(DOKUid(arguments[i]));
+ return elements;
+ }
+ if (Object.isString(element))
+ element = document.getElementById(element);
+ return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+ document._getElementsByXPath = function(expression, parentElement) {
+ var results = [];
+ var query = document.evaluate(expression, DOKUid(parentElement) || document,
+ null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+ for (var i = 0, length = query.snapshotLength; i < length; i++)
+ results.push(Element.extend(query.snapshotItem(i)));
+ return results;
+ };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+ Object.extend(Node, {
+ ELEMENT_NODE: 1,
+ ATTRIBUTE_NODE: 2,
+ TEXT_NODE: 3,
+ CDATA_SECTION_NODE: 4,
+ ENTITY_REFERENCE_NODE: 5,
+ ENTITY_NODE: 6,
+ PROCESSING_INSTRUCTION_NODE: 7,
+ COMMENT_NODE: 8,
+ DOCUMENT_NODE: 9,
+ DOCUMENT_TYPE_NODE: 10,
+ DOCUMENT_FRAGMENT_NODE: 11,
+ NOTATION_NODE: 12
+ });
+}
+
+
+(function(global) {
+
+ var SETATTRIBUTE_IGNORES_NAME = (function(){
+ var elForm = document.createElement("form");
+ var elInput = document.createElement("input");
+ var root = document.documentElement;
+ elInput.setAttribute("name", "test");
+ elForm.appendChild(elInput);
+ root.appendChild(elForm);
+ var isBuggy = elForm.elements
+ ? (typeof elForm.elements.test == "undefined")
+ : null;
+ root.removeChild(elForm);
+ elForm = elInput = null;
+ return isBuggy;
+ })();
+
+ var element = global.Element;
+ global.Element = function(tagName, attributes) {
+ attributes = attributes || { };
+ tagName = tagName.toLowerCase();
+ var cache = Element.cache;
+ if (SETATTRIBUTE_IGNORES_NAME && attributes.name) {
+ tagName = '<' + tagName + ' name="' + attributes.name + '">';
+ delete attributes.name;
+ return Element.writeAttribute(document.createElement(tagName), attributes);
+ }
+ if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+ return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+ };
+ Object.extend(global.Element, element || { });
+ if (element) global.Element.prototype = element.prototype;
+})(this);
+
+Element.cache = { };
+Element.idCounter = 1;
+
+Element.Methods = {
+ visible: function(element) {
+ return DOKUid(element).style.display != 'none';
+ },
+
+ toggle: function(element) {
+ element = DOKUid(element);
+ Element[Element.visible(element) ? 'hide' : 'show'](element);
+ return element;
+ },
+
+
+ hide: function(element) {
+ element = DOKUid(element);
+ element.style.display = 'none';
+ return element;
+ },
+
+ show: function(element) {
+ element = DOKUid(element);
+ element.style.display = '';
+ return element;
+ },
+
+ remove: function(element) {
+ element = DOKUid(element);
+ element.parentNode.removeChild(element);
+ return element;
+ },
+
+ update: (function(){
+
+ var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
+ var el = document.createElement("select"),
+ isBuggy = true;
+ el.innerHTML = "<option value=\"test\">test</option>";
+ if (el.options && el.options[0]) {
+ isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
+ }
+ el = null;
+ return isBuggy;
+ })();
+
+ var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
+ try {
+ var el = document.createElement("table");
+ if (el && el.tBodies) {
+ el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
+ var isBuggy = typeof el.tBodies[0] == "undefined";
+ el = null;
+ return isBuggy;
+ }
+ } catch (e) {
+ return true;
+ }
+ })();
+
+ var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
+ var s = document.createElement("script"),
+ isBuggy = false;
+ try {
+ s.appendChild(document.createTextNode(""));
+ isBuggy = !s.firstChild ||
+ s.firstChild && s.firstChild.nodeType !== 3;
+ } catch (e) {
+ isBuggy = true;
+ }
+ s = null;
+ return isBuggy;
+ })();
+
+ function update(element, content) {
+ element = DOKUid(element);
+
+ if (content && content.toElement)
+ content = content.toElement();
+
+ if (Object.isElement(content))
+ return element.update().insert(content);
+
+ content = Object.toHTML(content);
+
+ var tagName = element.tagName.toUpperCase();
+
+ if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
+ element.text = content;
+ return element;
+ }
+
+ if (SELECT_ELEMENT_INNERHTML_BUGGY || TABLE_ELEMENT_INNERHTML_BUGGY) {
+ if (tagName in Element._insertionTranslations.tags) {
+ while (element.firstChild) {
+ element.removeChild(element.firstChild);
+ }
+ Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+ .each(function(node) {
+ element.appendChild(node)
+ });
+ }
+ else {
+ element.innerHTML = content.stripScripts();
+ }
+ }
+ else {
+ element.innerHTML = content.stripScripts();
+ }
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ }
+
+ return update;
+ })(),
+
+ replace: function(element, content) {
+ element = DOKUid(element);
+ if (content && content.toElement) content = content.toElement();
+ else if (!Object.isElement(content)) {
+ content = Object.toHTML(content);
+ var range = element.ownerDocument.createRange();
+ range.selectNode(element);
+ content.evalScripts.bind(content).defer();
+ content = range.createContextualFragment(content.stripScripts());
+ }
+ element.parentNode.replaceChild(content, element);
+ return element;
+ },
+
+ insert: function(element, insertions) {
+ element = DOKUid(element);
+
+ if (Object.isString(insertions) || Object.isNumber(insertions) ||
+ Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+ insertions = {bottom:insertions};
+
+ var content, insert, tagName, childNodes;
+
+ for (var position in insertions) {
+ content = insertions[position];
+ position = position.toLowerCase();
+ insert = Element._insertionTranslations[position];
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ insert(element, content);
+ continue;
+ }
+
+ content = Object.toHTML(content);
+
+ tagName = ((position == 'before' || position == 'after')
+ ? element.parentNode : element).tagName.toUpperCase();
+
+ childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+
+ if (position == 'top' || position == 'after') childNodes.reverse();
+ childNodes.each(insert.curry(element));
+
+ content.evalScripts.bind(content).defer();
+ }
+
+ return element;
+ },
+
+ wrap: function(element, wrapper, attributes) {
+ element = DOKUid(element);
+ if (Object.isElement(wrapper))
+ DOKUid(wrapper).writeAttribute(attributes || { });
+ else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+ else wrapper = new Element('div', wrapper);
+ if (element.parentNode)
+ element.parentNode.replaceChild(wrapper, element);
+ wrapper.appendChild(element);
+ return wrapper;
+ },
+
+ inspect: function(element) {
+ element = DOKUid(element);
+ var result = '<' + element.tagName.toLowerCase();
+ $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+ var property = pair.first(), attribute = pair.last();
+ var value = (element[property] || '').toString();
+ if (value) result += ' ' + attribute + '=' + value.inspect(true);
+ });
+ return result + '>';
+ },
+
+ recursivelyCollect: function(element, property) {
+ element = DOKUid(element);
+ var elements = [];
+ while (element = element[property])
+ if (element.nodeType == 1)
+ elements.push(Element.extend(element));
+ return elements;
+ },
+
+ ancestors: function(element) {
+ return Element.recursivelyCollect(element, 'parentNode');
+ },
+
+ descendants: function(element) {
+ return Element.select(element, "*");
+ },
+
+ firstDescendant: function(element) {
+ element = DOKUid(element).firstChild;
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ return DOKUid(element);
+ },
+
+ immediateDescendants: function(element) {
+ if (!(element = DOKUid(element).firstChild)) return [];
+ while (element && element.nodeType != 1) element = element.nextSibling;
+ if (element) return [element].concat(DOKUid(element).nextSiblings());
+ return [];
+ },
+
+ previousSiblings: function(element) {
+ return Element.recursivelyCollect(element, 'previousSibling');
+ },
+
+ nextSiblings: function(element) {
+ return Element.recursivelyCollect(element, 'nextSibling');
+ },
+
+ siblings: function(element) {
+ element = DOKUid(element);
+ return Element.previousSiblings(element).reverse()
+ .concat(Element.nextSiblings(element));
+ },
+
+ match: function(element, selector) {
+ if (Object.isString(selector))
+ selector = new Selector(selector);
+ return selector.match(DOKUid(element));
+ },
+
+ up: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return DOKUid(element.parentNode);
+ var ancestors = Element.ancestors(element);
+ return Object.isNumber(expression) ? ancestors[expression] :
+ Selector.findElement(ancestors, expression, index);
+ },
+
+ down: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return Element.firstDescendant(element);
+ return Object.isNumber(expression) ? Element.descendants(element)[expression] :
+ Element.select(element, expression)[index || 0];
+ },
+
+ previous: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return DOKUid(Selector.handlers.previousElementSibling(element));
+ var previousSiblings = Element.previousSiblings(element);
+ return Object.isNumber(expression) ? previousSiblings[expression] :
+ Selector.findElement(previousSiblings, expression, index);
+ },
+
+ next: function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return DOKUid(Selector.handlers.nextElementSibling(element));
+ var nextSiblings = Element.nextSiblings(element);
+ return Object.isNumber(expression) ? nextSiblings[expression] :
+ Selector.findElement(nextSiblings, expression, index);
+ },
+
+
+ select: function(element) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return Selector.findChildElements(element, args);
+ },
+
+ adjacent: function(element) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return Selector.findChildElements(element.parentNode, args).without(element);
+ },
+
+ identify: function(element) {
+ element = DOKUid(element);
+ var id = Element.readAttribute(element, 'id');
+ if (id) return id;
+ do { id = 'anonymous_element_' + Element.idCounter++ } while (DOKUid(id));
+ Element.writeAttribute(element, 'id', id);
+ return id;
+ },
+
+ readAttribute: function(element, name) {
+ element = DOKUid(element);
+ if (Prototype.Browser.IE) {
+ var t = Element._attributeTranslations.read;
+ if (t.values[name]) return t.values[name](element, name);
+ if (t.names[name]) name = t.names[name];
+ if (name.include(':')) {
+ return (!element.attributes || !element.attributes[name]) ? null :
+ element.attributes[name].value;
+ }
+ }
+ return element.getAttribute(name);
+ },
+
+ writeAttribute: function(element, name, value) {
+ element = DOKUid(element);
+ var attributes = { }, t = Element._attributeTranslations.write;
+
+ if (typeof name == 'object') attributes = name;
+ else attributes[name] = Object.isUndefined(value) ? true : value;
+
+ for (var attr in attributes) {
+ name = t.names[attr] || attr;
+ value = attributes[attr];
+ if (t.values[attr]) name = t.values[attr](element, value);
+ if (value === false || value === null)
+ element.removeAttribute(name);
+ else if (value === true)
+ element.setAttribute(name, name);
+ else element.setAttribute(name, value);
+ }
+ return element;
+ },
+
+ getHeight: function(element) {
+ return Element.getDimensions(element).height;
+ },
+
+ getWidth: function(element) {
+ return Element.getDimensions(element).width;
+ },
+
+ classNames: function(element) {
+ return new Element.ClassNames(element);
+ },
+
+ hasClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ var elementClassName = element.className;
+ return (elementClassName.length > 0 && (elementClassName == className ||
+ new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+ },
+
+ addClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ if (!Element.hasClassName(element, className))
+ element.className += (element.className ? ' ' : '') + className;
+ return element;
+ },
+
+ removeClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ element.className = element.className.replace(
+ new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+ return element;
+ },
+
+ toggleClassName: function(element, className) {
+ if (!(element = DOKUid(element))) return;
+ return Element[Element.hasClassName(element, className) ?
+ 'removeClassName' : 'addClassName'](element, className);
+ },
+
+ cleanWhitespace: function(element) {
+ element = DOKUid(element);
+ var node = element.firstChild;
+ while (node) {
+ var nextNode = node.nextSibling;
+ if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+ element.removeChild(node);
+ node = nextNode;
+ }
+ return element;
+ },
+
+ empty: function(element) {
+ return DOKUid(element).innerHTML.blank();
+ },
+
+ descendantOf: function(element, ancestor) {
+ element = DOKUid(element), ancestor = DOKUid(ancestor);
+
+ if (element.compareDocumentPosition)
+ return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+ if (ancestor.contains)
+ return ancestor.contains(element) && ancestor !== element;
+
+ while (element = element.parentNode)
+ if (element == ancestor) return true;
+
+ return false;
+ },
+
+ scrollTo: function(element) {
+ element = DOKUid(element);
+ var pos = Element.cumulativeOffset(element);
+ window.scrollTo(pos[0], pos[1]);
+ return element;
+ },
+
+ getStyle: function(element, style) {
+ element = DOKUid(element);
+ style = style == 'float' ? 'cssFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value || value == 'auto') {
+ var css = document.defaultView.getComputedStyle(element, null);
+ value = css ? css[style] : null;
+ }
+ if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+ return value == 'auto' ? null : value;
+ },
+
+ getOpacity: function(element) {
+ return DOKUid(element).getStyle('opacity');
+ },
+
+ setStyle: function(element, styles) {
+ element = DOKUid(element);
+ var elementStyle = element.style, match;
+ if (Object.isString(styles)) {
+ element.style.cssText += ';' + styles;
+ return styles.include('opacity') ?
+ element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+ }
+ for (var property in styles)
+ if (property == 'opacity') element.setOpacity(styles[property]);
+ else
+ elementStyle[(property == 'float' || property == 'cssFloat') ?
+ (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
+ property] = styles[property];
+
+ return element;
+ },
+
+ setOpacity: function(element, value) {
+ element = DOKUid(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+ return element;
+ },
+
+ getDimensions: function(element) {
+ element = DOKUid(element);
+ var display = Element.getStyle(element, 'display');
+ if (display != 'none' && display != null) // Safari bug
+ return {width: element.offsetWidth, height: element.offsetHeight};
+
+ var els = element.style;
+ var originalVisibility = els.visibility;
+ var originalPosition = els.position;
+ var originalDisplay = els.display;
+ els.visibility = 'hidden';
+ if (originalPosition != 'fixed') // Switching fixed to absolute causes issues in Safari
+ els.position = 'absolute';
+ els.display = 'block';
+ var originalWidth = element.clientWidth;
+ var originalHeight = element.clientHeight;
+ els.display = originalDisplay;
+ els.position = originalPosition;
+ els.visibility = originalVisibility;
+ return {width: originalWidth, height: originalHeight};
+ },
+
+ makePositioned: function(element) {
+ element = DOKUid(element);
+ var pos = Element.getStyle(element, 'position');
+ if (pos == 'static' || !pos) {
+ element._madePositioned = true;
+ element.style.position = 'relative';
+ if (Prototype.Browser.Opera) {
+ element.style.top = 0;
+ element.style.left = 0;
+ }
+ }
+ return element;
+ },
+
+ undoPositioned: function(element) {
+ element = DOKUid(element);
+ if (element._madePositioned) {
+ element._madePositioned = undefined;
+ element.style.position =
+ element.style.top =
+ element.style.left =
+ element.style.bottom =
+ element.style.right = '';
+ }
+ return element;
+ },
+
+ makeClipping: function(element) {
+ element = DOKUid(element);
+ if (element._overflow) return element;
+ element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+ if (element._overflow !== 'hidden')
+ element.style.overflow = 'hidden';
+ return element;
+ },
+
+ undoClipping: function(element) {
+ element = DOKUid(element);
+ if (!element._overflow) return element;
+ element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+ element._overflow = null;
+ return element;
+ },
+
+ cumulativeOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ positionedOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ element = element.offsetParent;
+ if (element) {
+ if (element.tagName.toUpperCase() == 'BODY') break;
+ var p = Element.getStyle(element, 'position');
+ if (p !== 'static') break;
+ }
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ absolutize: function(element) {
+ element = DOKUid(element);
+ if (Element.getStyle(element, 'position') == 'absolute') return element;
+
+ var offsets = Element.positionedOffset(element);
+ var top = offsets[1];
+ var left = offsets[0];
+ var width = element.clientWidth;
+ var height = element.clientHeight;
+
+ element._originalLeft = left - parseFloat(element.style.left || 0);
+ element._originalTop = top - parseFloat(element.style.top || 0);
+ element._originalWidth = element.style.width;
+ element._originalHeight = element.style.height;
+
+ element.style.position = 'absolute';
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.width = width + 'px';
+ element.style.height = height + 'px';
+ return element;
+ },
+
+ relativize: function(element) {
+ element = DOKUid(element);
+ if (Element.getStyle(element, 'position') == 'relative') return element;
+
+ element.style.position = 'relative';
+ var top = parseFloat(element.style.top || 0) - (element._originalTop || 0);
+ var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+ element.style.top = top + 'px';
+ element.style.left = left + 'px';
+ element.style.height = element._originalHeight;
+ element.style.width = element._originalWidth;
+ return element;
+ },
+
+ cumulativeScrollOffset: function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.scrollTop || 0;
+ valueL += element.scrollLeft || 0;
+ element = element.parentNode;
+ } while (element);
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ getOffsetParent: function(element) {
+ if (element.offsetParent) return DOKUid(element.offsetParent);
+ if (element == document.body) return DOKUid(element);
+
+ while ((element = element.parentNode) && element != document.body)
+ if (Element.getStyle(element, 'position') != 'static')
+ return DOKUid(element);
+
+ return DOKUid(document.body);
+ },
+
+ viewportOffset: function(forElement) {
+ var valueT = 0, valueL = 0;
+
+ var element = forElement;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+
+ if (element.offsetParent == document.body &&
+ Element.getStyle(element, 'position') == 'absolute') break;
+
+ } while (element = element.offsetParent);
+
+ element = forElement;
+ do {
+ if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
+ valueT -= element.scrollTop || 0;
+ valueL -= element.scrollLeft || 0;
+ }
+ } while (element = element.parentNode);
+
+ return Element._returnOffset(valueL, valueT);
+ },
+
+ clonePosition: function(element, source) {
+ var options = Object.extend({
+ setLeft: true,
+ setTop: true,
+ setWidth: true,
+ setHeight: true,
+ offsetTop: 0,
+ offsetLeft: 0
+ }, arguments[2] || { });
+
+ source = DOKUid(source);
+ var p = Element.viewportOffset(source);
+
+ element = DOKUid(element);
+ var delta = [0, 0];
+ var parent = null;
+ if (Element.getStyle(element, 'position') == 'absolute') {
+ parent = Element.getOffsetParent(element);
+ delta = Element.viewportOffset(parent);
+ }
+
+ if (parent == document.body) {
+ delta[0] -= document.body.offsetLeft;
+ delta[1] -= document.body.offsetTop;
+ }
+
+ if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
+ if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+ if (options.setWidth) element.style.width = source.offsetWidth + 'px';
+ if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+ return element;
+ }
+};
+
+Object.extend(Element.Methods, {
+ getElementsBySelector: Element.Methods.select,
+
+ childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+ write: {
+ names: {
+ className: 'class',
+ htmlFor: 'for'
+ },
+ values: { }
+ }
+};
+
+if (Prototype.Browser.Opera) {
+ Element.Methods.getStyle = Element.Methods.getStyle.wrap(
+ function(proceed, element, style) {
+ switch (style) {
+ case 'left': case 'top': case 'right': case 'bottom':
+ if (proceed(element, 'position') === 'static') return null;
+ case 'height': case 'width':
+ if (!Element.visible(element)) return null;
+
+ var dim = parseInt(proceed(element, style), 10);
+
+ if (dim !== element['offset' + style.capitalize()])
+ return dim + 'px';
+
+ var properties;
+ if (style === 'height') {
+ properties = ['border-top-width', 'padding-top',
+ 'padding-bottom', 'border-bottom-width'];
+ }
+ else {
+ properties = ['border-left-width', 'padding-left',
+ 'padding-right', 'border-right-width'];
+ }
+ return properties.inject(dim, function(memo, property) {
+ var val = proceed(element, property);
+ return val === null ? memo : memo - parseInt(val, 10);
+ }) + 'px';
+ default: return proceed(element, style);
+ }
+ }
+ );
+
+ Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
+ function(proceed, element, attribute) {
+ if (attribute === 'title') return element.title;
+ return proceed(element, attribute);
+ }
+ );
+}
+
+else if (Prototype.Browser.IE) {
+ Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
+ function(proceed, element) {
+ element = DOKUid(element);
+ try { element.offsetParent }
+ catch(e) { return DOKUid(document.body) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+
+ $w('positionedOffset viewportOffset').each(function(method) {
+ Element.Methods[method] = Element.Methods[method].wrap(
+ function(proceed, element) {
+ element = DOKUid(element);
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ var position = element.getStyle('position');
+ if (position !== 'static') return proceed(element);
+ var offsetParent = element.getOffsetParent();
+ if (offsetParent && offsetParent.getStyle('position') === 'fixed')
+ offsetParent.setStyle({ zoom: 1 });
+ element.setStyle({ position: 'relative' });
+ var value = proceed(element);
+ element.setStyle({ position: position });
+ return value;
+ }
+ );
+ });
+
+ Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
+ function(proceed, element) {
+ try { element.offsetParent }
+ catch(e) { return Element._returnOffset(0,0) }
+ return proceed(element);
+ }
+ );
+
+ Element.Methods.getStyle = function(element, style) {
+ element = DOKUid(element);
+ style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+ var value = element.style[style];
+ if (!value && element.currentStyle) value = element.currentStyle[style];
+
+ if (style == 'opacity') {
+ if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+ if (value[1]) return parseFloat(value[1]) / 100;
+ return 1.0;
+ }
+
+ if (value == 'auto') {
+ if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+ return element['offset' + style.capitalize()] + 'px';
+ return null;
+ }
+ return value;
+ };
+
+ Element.Methods.setOpacity = function(element, value) {
+ function stripAlpha(filter){
+ return filter.replace(/alpha\([^\)]*\)/gi,'');
+ }
+ element = DOKUid(element);
+ var currentStyle = element.currentStyle;
+ if ((currentStyle && !currentStyle.hasLayout) ||
+ (!currentStyle && element.style.zoom == 'normal'))
+ element.style.zoom = 1;
+
+ var filter = element.getStyle('filter'), style = element.style;
+ if (value == 1 || value === '') {
+ (filter = stripAlpha(filter)) ?
+ style.filter = filter : style.removeAttribute('filter');
+ return element;
+ } else if (value < 0.00001) value = 0;
+ style.filter = stripAlpha(filter) +
+ 'alpha(opacity=' + (value * 100) + ')';
+ return element;
+ };
+
+ Element._attributeTranslations = (function(){
+
+ var classProp = 'className';
+ var forProp = 'for';
+
+ var el = document.createElement('div');
+
+ el.setAttribute(classProp, 'x');
+
+ if (el.className !== 'x') {
+ el.setAttribute('class', 'x');
+ if (el.className === 'x') {
+ classProp = 'class';
+ }
+ }
+ el = null;
+
+ el = document.createElement('label');
+ el.setAttribute(forProp, 'x');
+ if (el.htmlFor !== 'x') {
+ el.setAttribute('htmlFor', 'x');
+ if (el.htmlFor === 'x') {
+ forProp = 'htmlFor';
+ }
+ }
+ el = null;
+
+ return {
+ read: {
+ names: {
+ 'class': classProp,
+ 'className': classProp,
+ 'for': forProp,
+ 'htmlFor': forProp
+ },
+ values: {
+ _getAttr: function(element, attribute) {
+ return element.getAttribute(attribute);
+ },
+ _getAttr2: function(element, attribute) {
+ return element.getAttribute(attribute, 2);
+ },
+ _getAttrNode: function(element, attribute) {
+ var node = element.getAttributeNode(attribute);
+ return node ? node.value : "";
+ },
+ _getEv: (function(){
+
+ var el = document.createElement('div');
+ el.onclick = Prototype.emptyFunction;
+ var value = el.getAttribute('onclick');
+ var f;
+
+ if (String(value).indexOf('{') > -1) {
+ f = function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ if (!attribute) return null;
+ attribute = attribute.toString();
+ attribute = attribute.split('{')[1];
+ attribute = attribute.split('}')[0];
+ return attribute.strip();
+ };
+ }
+ else if (value === '') {
+ f = function(element, attribute) {
+ attribute = element.getAttribute(attribute);
+ if (!attribute) return null;
+ return attribute.strip();
+ };
+ }
+ el = null;
+ return f;
+ })(),
+ _flag: function(element, attribute) {
+ return DOKUid(element).hasAttribute(attribute) ? attribute : null;
+ },
+ style: function(element) {
+ return element.style.cssText.toLowerCase();
+ },
+ title: function(element) {
+ return element.title;
+ }
+ }
+ }
+ }
+ })();
+
+ Element._attributeTranslations.write = {
+ names: Object.extend({
+ cellpadding: 'cellPadding',
+ cellspacing: 'cellSpacing'
+ }, Element._attributeTranslations.read.names),
+ values: {
+ checked: function(element, value) {
+ element.checked = !!value;
+ },
+
+ style: function(element, value) {
+ element.style.cssText = value ? value : '';
+ }
+ }
+ };
+
+ Element._attributeTranslations.has = {};
+
+ $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+ 'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
+ Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+ Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+ });
+
+ (function(v) {
+ Object.extend(v, {
+ href: v._getAttr2,
+ src: v._getAttr2,
+ type: v._getAttr,
+ action: v._getAttrNode,
+ disabled: v._flag,
+ checked: v._flag,
+ readonly: v._flag,
+ multiple: v._flag,
+ onload: v._getEv,
+ onunload: v._getEv,
+ onclick: v._getEv,
+ ondblclick: v._getEv,
+ onmousedown: v._getEv,
+ onmouseup: v._getEv,
+ onmouseover: v._getEv,
+ onmousemove: v._getEv,
+ onmouseout: v._getEv,
+ onfocus: v._getEv,
+ onblur: v._getEv,
+ onkeypress: v._getEv,
+ onkeydown: v._getEv,
+ onkeyup: v._getEv,
+ onsubmit: v._getEv,
+ onreset: v._getEv,
+ onselect: v._getEv,
+ onchange: v._getEv
+ });
+ })(Element._attributeTranslations.read.values);
+
+ if (Prototype.BrowserFeatures.ElementExtensions) {
+ (function() {
+ function _descendants(element) {
+ var nodes = element.getElementsByTagName('*'), results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName !== "!") // Filter out comment nodes.
+ results.push(node);
+ return results;
+ }
+
+ Element.Methods.down = function(element, expression, index) {
+ element = DOKUid(element);
+ if (arguments.length == 1) return element.firstDescendant();
+ return Object.isNumber(expression) ? _descendants(element)[expression] :
+ Element.select(element, expression)[index || 0];
+ }
+ })();
+ }
+
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = DOKUid(element);
+ element.style.opacity = (value == 1) ? 0.999999 :
+ (value === '') ? '' : (value < 0.00001) ? 0 : value;
+ return element;
+ };
+}
+
+else if (Prototype.Browser.WebKit) {
+ Element.Methods.setOpacity = function(element, value) {
+ element = DOKUid(element);
+ element.style.opacity = (value == 1 || value === '') ? '' :
+ (value < 0.00001) ? 0 : value;
+
+ if (value == 1)
+ if(element.tagName.toUpperCase() == 'IMG' && element.width) {
+ element.width++; element.width--;
+ } else try {
+ var n = document.createTextNode(' ');
+ element.appendChild(n);
+ element.removeChild(n);
+ } catch (e) { }
+
+ return element;
+ };
+
+ Element.Methods.cumulativeOffset = function(element) {
+ var valueT = 0, valueL = 0;
+ do {
+ valueT += element.offsetTop || 0;
+ valueL += element.offsetLeft || 0;
+ if (element.offsetParent == document.body)
+ if (Element.getStyle(element, 'position') == 'absolute') break;
+
+ element = element.offsetParent;
+ } while (element);
+
+ return Element._returnOffset(valueL, valueT);
+ };
+}
+
+if ('outerHTML' in document.documentElement) {
+ Element.Methods.replace = function(element, content) {
+ element = DOKUid(element);
+
+ if (content && content.toElement) content = content.toElement();
+ if (Object.isElement(content)) {
+ element.parentNode.replaceChild(content, element);
+ return element;
+ }
+
+ content = Object.toHTML(content);
+ var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+ if (Element._insertionTranslations.tags[tagName]) {
+ var nextSibling = element.next();
+ var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+ parent.removeChild(element);
+ if (nextSibling)
+ fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+ else
+ fragments.each(function(node) { parent.appendChild(node) });
+ }
+ else element.outerHTML = content.stripScripts();
+
+ content.evalScripts.bind(content).defer();
+ return element;
+ };
+}
+
+Element._returnOffset = function(l, t) {
+ var result = [l, t];
+ result.left = l;
+ result.top = t;
+ return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+ var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+ if (t) {
+ div.innerHTML = t[0] + html + t[1];
+ t[2].times(function() { div = div.firstChild });
+ } else div.innerHTML = html;
+ return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+ before: function(element, node) {
+ element.parentNode.insertBefore(node, element);
+ },
+ top: function(element, node) {
+ element.insertBefore(node, element.firstChild);
+ },
+ bottom: function(element, node) {
+ element.appendChild(node);
+ },
+ after: function(element, node) {
+ element.parentNode.insertBefore(node, element.nextSibling);
+ },
+ tags: {
+ TABLE: ['<table>', '</table>', 1],
+ TBODY: ['<table><tbody>', '</tbody></table>', 2],
+ TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3],
+ TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+ SELECT: ['<select>', '</select>', 1]
+ }
+};
+
+(function() {
+ var tags = Element._insertionTranslations.tags;
+ Object.extend(tags, {
+ THEAD: tags.TBODY,
+ TFOOT: tags.TBODY,
+ TH: tags.TD
+ });
+})();
+
+Element.Methods.Simulated = {
+ hasAttribute: function(element, attribute) {
+ attribute = Element._attributeTranslations.has[attribute] || attribute;
+ var node = DOKUid(element).getAttributeNode(attribute);
+ return !!(node && node.specified);
+ }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+(function(div) {
+
+ if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
+ window.HTMLElement = { };
+ window.HTMLElement.prototype = div['__proto__'];
+ Prototype.BrowserFeatures.ElementExtensions = true;
+ }
+
+ div = null;
+
+})(document.createElement('div'))
+
+Element.extend = (function() {
+
+ function checkDeficiency(tagName) {
+ if (typeof window.Element != 'undefined') {
+ var proto = window.Element.prototype;
+ if (proto) {
+ var id = '_' + (Math.random()+'').slice(2);
+ var el = document.createElement(tagName);
+ proto[id] = 'x';
+ var isBuggy = (el[id] !== 'x');
+ delete proto[id];
+ el = null;
+ return isBuggy;
+ }
+ }
+ return false;
+ }
+
+ function extendElementWith(element, methods) {
+ for (var property in methods) {
+ var value = methods[property];
+ if (Object.isFunction(value) && !(property in element))
+ element[property] = value.methodize();
+ }
+ }
+
+ var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');
+
+ if (Prototype.BrowserFeatures.SpecificElementExtensions) {
+ if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
+ return function(element) {
+ if (element && typeof element._extendedByPrototype == 'undefined') {
+ var t = element.tagName;
+ if (t && (/^(?:object|applet|embed)$/i.test(t))) {
+ extendElementWith(element, Element.Methods);
+ extendElementWith(element, Element.Methods.Simulated);
+ extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
+ }
+ }
+ return element;
+ }
+ }
+ return Prototype.K;
+ }
+
+ var Methods = { }, ByTag = Element.Methods.ByTag;
+
+ var extend = Object.extend(function(element) {
+ if (!element || typeof element._extendedByPrototype != 'undefined' ||
+ element.nodeType != 1 || element == window) return element;
+
+ var methods = Object.clone(Methods),
+ tagName = element.tagName.toUpperCase();
+
+ if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+ extendElementWith(element, methods);
+
+ element._extendedByPrototype = Prototype.emptyFunction;
+ return element;
+
+ }, {
+ refresh: function() {
+ if (!Prototype.BrowserFeatures.ElementExtensions) {
+ Object.extend(Methods, Element.Methods);
+ Object.extend(Methods, Element.Methods.Simulated);
+ }
+ }
+ });
+
+ extend.refresh();
+ return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+ if (element.hasAttribute) return element.hasAttribute(attribute);
+ return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+ var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+ if (!methods) {
+ Object.extend(Form, Form.Methods);
+ Object.extend(Form.Element, Form.Element.Methods);
+ Object.extend(Element.Methods.ByTag, {
+ "FORM": Object.clone(Form.Methods),
+ "INPUT": Object.clone(Form.Element.Methods),
+ "SELECT": Object.clone(Form.Element.Methods),
+ "TEXTAREA": Object.clone(Form.Element.Methods)
+ });
+ }
+
+ if (arguments.length == 2) {
+ var tagName = methods;
+ methods = arguments[1];
+ }
+
+ if (!tagName) Object.extend(Element.Methods, methods || { });
+ else {
+ if (Object.isArray(tagName)) tagName.each(extend);
+ else extend(tagName);
+ }
+
+ function extend(tagName) {
+ tagName = tagName.toUpperCase();
+ if (!Element.Methods.ByTag[tagName])
+ Element.Methods.ByTag[tagName] = { };
+ Object.extend(Element.Methods.ByTag[tagName], methods);
+ }
+
+ function copy(methods, destination, onlyIfAbsent) {
+ onlyIfAbsent = onlyIfAbsent || false;
+ for (var property in methods) {
+ var value = methods[property];
+ if (!Object.isFunction(value)) continue;
+ if (!onlyIfAbsent || !(property in destination))
+ destination[property] = value.methodize();
+ }
+ }
+
+ function findDOMClass(tagName) {
+ var klass;
+ var trans = {
+ "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+ "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+ "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+ "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+ "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+ "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+ "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+ "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+ "FrameSet", "IFRAME": "IFrame"
+ };
+ if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName + 'Element';
+ if (window[klass]) return window[klass];
+ klass = 'HTML' + tagName.capitalize() + 'Element';
+ if (window[klass]) return window[klass];
+
+ var element = document.createElement(tagName);
+ var proto = element['__proto__'] || element.constructor.prototype;
+ element = null;
+ return proto;
+ }
+
+ var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
+ Element.prototype;
+
+ if (F.ElementExtensions) {
+ copy(Element.Methods, elementPrototype);
+ copy(Element.Methods.Simulated, elementPrototype, true);
+ }
+
+ if (F.SpecificElementExtensions) {
+ for (var tag in Element.Methods.ByTag) {
+ var klass = findDOMClass(tag);
+ if (Object.isUndefined(klass)) continue;
+ copy(T[tag], klass.prototype);
+ }
+ }
+
+ Object.extend(Element, Element.Methods);
+ delete Element.ByTag;
+
+ if (Element.extend.refresh) Element.extend.refresh();
+ Element.cache = { };
+};
+
+
+document.viewport = {
+
+ getDimensions: function() {
+ return { width: this.getWidth(), height: this.getHeight() };
+ },
+
+ getScrollOffsets: function() {
+ return Element._returnOffset(
+ window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+ window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+ }
+};
+
+(function(viewport) {
+ var B = Prototype.Browser, doc = document, element, property = {};
+
+ function getRootElement() {
+ if (B.WebKit && !doc.evaluate)
+ return document;
+
+ if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
+ return document.body;
+
+ return document.documentElement;
+ }
+
+ function define(D) {
+ if (!element) element = getRootElement();
+
+ property[D] = 'client' + D;
+
+ viewport['get' + D] = function() { return element[property[D]] };
+ return viewport['get' + D]();
+ }
+
+ viewport.getWidth = define.curry('Width');
+
+ viewport.getHeight = define.curry('Height');
+})(document.viewport);
+
+
+Element.Storage = {
+ UID: 1
+};
+
+Element.addMethods({
+ getStorage: function(element) {
+ if (!(element = DOKUid(element))) return;
+
+ var uid;
+ if (element === window) {
+ uid = 0;
+ } else {
+ if (typeof element._prototypeUID === "undefined")
+ element._prototypeUID = [Element.Storage.UID++];
+ uid = element._prototypeUID[0];
+ }
+
+ if (!Element.Storage[uid])
+ Element.Storage[uid] = $H();
+
+ return Element.Storage[uid];
+ },
+
+ store: function(element, key, value) {
+ if (!(element = DOKUid(element))) return;
+
+ if (arguments.length === 2) {
+ Element.getStorage(element).update(key);
+ } else {
+ Element.getStorage(element).set(key, value);
+ }
+
+ return element;
+ },
+
+ retrieve: function(element, key, defaultValue) {
+ if (!(element = DOKUid(element))) return;
+ var hash = Element.getStorage(element), value = hash.get(key);
+
+ if (Object.isUndefined(value)) {
+ hash.set(key, defaultValue);
+ value = defaultValue;
+ }
+
+ return value;
+ },
+
+ clone: function(element, deep) {
+ if (!(element = DOKUid(element))) return;
+ var clone = element.cloneNode(deep);
+ clone._prototypeUID = void 0;
+ if (deep) {
+ var descendants = Element.select(clone, '*'),
+ i = descendants.length;
+ while (i--) {
+ descendants[i]._prototypeUID = void 0;
+ }
+ }
+ return Element.extend(clone);
+ }
+});
+/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license. Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+ initialize: function(expression) {
+ this.expression = expression.strip();
+
+ if (this.shouldUseSelectorsAPI()) {
+ this.mode = 'selectorsAPI';
+ } else if (this.shouldUseXPath()) {
+ this.mode = 'xpath';
+ this.compileXPathMatcher();
+ } else {
+ this.mode = "normal";
+ this.compileMatcher();
+ }
+
+ },
+
+ shouldUseXPath: (function() {
+
+ var IS_DESCENDANT_SELECTOR_BUGGY = (function(){
+ var isBuggy = false;
+ if (document.evaluate && window.XPathResult) {
+ var el = document.createElement('div');
+ el.innerHTML = '<ul><li></li></ul><div><ul><li></li></ul></div>';
+
+ var xpath = ".//*[local-name()='ul' or local-name()='UL']" +
+ "//*[local-name()='li' or local-name()='LI']";
+
+ var result = document.evaluate(xpath, el, null,
+ XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+
+ isBuggy = (result.snapshotLength !== 2);
+ el = null;
+ }
+ return isBuggy;
+ })();
+
+ return function() {
+ if (!Prototype.BrowserFeatures.XPath) return false;
+
+ var e = this.expression;
+
+ if (Prototype.Browser.WebKit &&
+ (e.include("-of-type") || e.include(":empty")))
+ return false;
+
+ if ((/(\[[\w-]*?:|:checked)/).test(e))
+ return false;
+
+ if (IS_DESCENDANT_SELECTOR_BUGGY) return false;
+
+ return true;
+ }
+
+ })(),
+
+ shouldUseSelectorsAPI: function() {
+ if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
+
+ if (Selector.CASE_INSENSITIVE_CLASS_NAMES) return false;
+
+ if (!Selector._div) Selector._div = new Element('div');
+
+ try {
+ Selector._div.querySelector(this.expression);
+ } catch(e) {
+ return false;
+ }
+
+ return true;
+ },
+
+ compileMatcher: function() {
+ var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+ c = Selector.criteria, le, p, m, len = ps.length, name;
+
+ if (Selector._cache[e]) {
+ this.matcher = Selector._cache[e];
+ return;
+ }
+
+ this.matcher = ["this.matcher = function(root) {",
+ "var r = root, h = Selector.handlers, c = false, n;"];
+
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ p = ps[i].re;
+ name = ps[i].name;
+ if (m = e.match(p)) {
+ this.matcher.push(Object.isFunction(c[name]) ? c[name](m) :
+ new Template(c[name]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.matcher.push("return h.unique(n);\n}");
+ eval(this.matcher.join('\n'));
+ Selector._cache[this.expression] = this.matcher;
+ },
+
+ compileXPathMatcher: function() {
+ var e = this.expression, ps = Selector.patterns,
+ x = Selector.xpath, le, m, len = ps.length, name;
+
+ if (Selector._cache[e]) {
+ this.xpath = Selector._cache[e]; return;
+ }
+
+ this.matcher = ['.//*'];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ name = ps[i].name;
+ if (m = e.match(ps[i].re)) {
+ this.matcher.push(Object.isFunction(x[name]) ? x[name](m) :
+ new Template(x[name]).evaluate(m));
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+
+ this.xpath = this.matcher.join('');
+ Selector._cache[this.expression] = this.xpath;
+ },
+
+ findElements: function(root) {
+ root = root || document;
+ var e = this.expression, results;
+
+ switch (this.mode) {
+ case 'selectorsAPI':
+ if (root !== document) {
+ var oldId = root.id, id = DOKUid(root).identify();
+ id = id.replace(/([\.:])/g, "\\$1");
+ e = "#" + id + " " + e;
+ }
+
+ results = $A(root.querySelectorAll(e)).map(Element.extend);
+ root.id = oldId;
+
+ return results;
+ case 'xpath':
+ return document._getElementsByXPath(this.xpath, root);
+ default:
+ return this.matcher(root);
+ }
+ },
+
+ match: function(element) {
+ this.tokens = [];
+
+ var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+ var le, p, m, len = ps.length, name;
+
+ while (e && le !== e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ p = ps[i].re;
+ name = ps[i].name;
+ if (m = e.match(p)) {
+ if (as[name]) {
+ this.tokens.push([name, Object.clone(m)]);
+ e = e.replace(m[0], '');
+ } else {
+ return this.findElements(document).include(element);
+ }
+ }
+ }
+ }
+
+ var match = true, name, matches;
+ for (var i = 0, token; token = this.tokens[i]; i++) {
+ name = token[0], matches = token[1];
+ if (!Selector.assertions[name](element, matches)) {
+ match = false; break;
+ }
+ }
+
+ return match;
+ },
+
+ toString: function() {
+ return this.expression;
+ },
+
+ inspect: function() {
+ return "#<Selector:" + this.expression.inspect() + ">";
+ }
+});
+
+if (Prototype.BrowserFeatures.SelectorsAPI &&
+ document.compatMode === 'BackCompat') {
+ Selector.CASE_INSENSITIVE_CLASS_NAMES = (function(){
+ var div = document.createElement('div'),
+ span = document.createElement('span');
+
+ div.id = "prototype_test_id";
+ span.className = 'Test';
+ div.appendChild(span);
+ var isIgnored = (div.querySelector('#prototype_test_id .test') !== null);
+ div = span = null;
+ return isIgnored;
+ })();
+}
+
+Object.extend(Selector, {
+ _cache: { },
+
+ xpath: {
+ descendant: "//*",
+ child: "/*",
+ adjacent: "/following-sibling::*[1]",
+ laterSibling: '/following-sibling::*',
+ tagName: function(m) {
+ if (m[1] == '*') return '';
+ return "[local-name()='" + m[1].toLowerCase() +
+ "' or local-name()='" + m[1].toUpperCase() + "']";
+ },
+ className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
+ id: "[@id='#{1}']",
+ attrPresence: function(m) {
+ m[1] = m[1].toLowerCase();
+ return new Template("[@#{1}]").evaluate(m);
+ },
+ attr: function(m) {
+ m[1] = m[1].toLowerCase();
+ m[3] = m[5] || m[6];
+ return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+ },
+ pseudo: function(m) {
+ var h = Selector.xpath.pseudos[m[1]];
+ if (!h) return '';
+ if (Object.isFunction(h)) return h(m);
+ return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+ },
+ operators: {
+ '=': "[@#{1}='#{3}']",
+ '!=': "[@#{1}!='#{3}']",
+ '^=': "[starts-with(@#{1}, '#{3}')]",
+ '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
+ '*=': "[contains(@#{1}, '#{3}')]",
+ '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
+ '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
+ },
+ pseudos: {
+ 'first-child': '[not(preceding-sibling::*)]',
+ 'last-child': '[not(following-sibling::*)]',
+ 'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
+ 'empty': "[count(*) = 0 and (count(text()) = 0)]",
+ 'checked': "[@checked]",
+ 'disabled': "[(@disabled) and (@type!='hidden')]",
+ 'enabled': "[not(@disabled) and (@type!='hidden')]",
+ 'not': function(m) {
+ var e = m[6], p = Selector.patterns,
+ x = Selector.xpath, le, v, len = p.length, name;
+
+ var exclusion = [];
+ while (e && le != e && (/\S/).test(e)) {
+ le = e;
+ for (var i = 0; i<len; i++) {
+ name = p[i].name
+ if (m = e.match(p[i].re)) {
+ v = Object.isFunction(x[name]) ? x[name](m) : new Template(x[name]).evaluate(m);
+ exclusion.push("(" + v.substring(1, v.length - 1) + ")");
+ e = e.replace(m[0], '');
+ break;
+ }
+ }
+ }
+ return "[not(" + exclusion.join(" and ") + ")]";
+ },
+ 'nth-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
+ },
+ 'nth-last-child': function(m) {
+ return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
+ },
+ 'nth-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("position() ", m);
+ },
+ 'nth-last-of-type': function(m) {
+ return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
+ },
+ 'first-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
+ },
+ 'last-of-type': function(m) {
+ m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
+ },
+ 'only-of-type': function(m) {
+ var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+ },
+ nth: function(fragment, m) {
+ var mm, formula = m[6], predicate;
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ if (mm = formula.match(/^(\d+)$/)) // digit only
+ return '[' + fragment + "= " + mm[1] + ']';
+ if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (mm[1] == "-") mm[1] = -1;
+ var a = mm[1] ? Number(mm[1]) : 1;
+ var b = mm[2] ? Number(mm[2]) : 0;
+ predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
+ "((#{fragment} - #{b}) div #{a} >= 0)]";
+ return new Template(predicate).evaluate({
+ fragment: fragment, a: a, b: b });
+ }
+ }
+ }
+ },
+
+ criteria: {
+ tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;',
+ className: 'n = h.className(n, r, "#{1}", c); c = false;',
+ id: 'n = h.id(n, r, "#{1}", c); c = false;',
+ attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
+ attr: function(m) {
+ m[3] = (m[5] || m[6]);
+ return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
+ },
+ pseudo: function(m) {
+ if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
+ return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
+ },
+ descendant: 'c = "descendant";',
+ child: 'c = "child";',
+ adjacent: 'c = "adjacent";',
+ laterSibling: 'c = "laterSibling";'
+ },
+
+ patterns: [
+ { name: 'laterSibling', re: /^\s*~\s*/ },
+ { name: 'child', re: /^\s*>\s*/ },
+ { name: 'adjacent', re: /^\s*\+\s*/ },
+ { name: 'descendant', re: /^\s/ },
+
+ { name: 'tagName', re: /^\s*(\*|[\w\-]+)(\b|$)?/ },
+ { name: 'id', re: /^#([\w\-\*]+)(\b|$)/ },
+ { name: 'className', re: /^\.([\w\-\*]+)(\b|$)/ },
+ { name: 'pseudo', re: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/ },
+ { name: 'attrPresence', re: /^\[((?:[\w-]+:)?[\w-]+)\]/ },
+ { name: 'attr', re: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ }
+ ],
+
+ assertions: {
+ tagName: function(element, matches) {
+ return matches[1].toUpperCase() == element.tagName.toUpperCase();
+ },
+
+ className: function(element, matches) {
+ return Element.hasClassName(element, matches[1]);
+ },
+
+ id: function(element, matches) {
+ return element.id === matches[1];
+ },
+
+ attrPresence: function(element, matches) {
+ return Element.hasAttribute(element, matches[1]);
+ },
+
+ attr: function(element, matches) {
+ var nodeValue = Element.readAttribute(element, matches[1]);
+ return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
+ }
+ },
+
+ handlers: {
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ a.push(node);
+ return a;
+ },
+
+ mark: function(nodes) {
+ var _true = Prototype.emptyFunction;
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = _true;
+ return nodes;
+ },
+
+ unmark: (function(){
+
+ var PROPERTIES_ATTRIBUTES_MAP = (function(){
+ var el = document.createElement('div'),
+ isBuggy = false,
+ propName = '_countedByPrototype',
+ value = 'x'
+ el[propName] = value;
+ isBuggy = (el.getAttribute(propName) === value);
+ el = null;
+ return isBuggy;
+ })();
+
+ return PROPERTIES_ATTRIBUTES_MAP ?
+ function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node.removeAttribute('_countedByPrototype');
+ return nodes;
+ } :
+ function(nodes) {
+ for (var i = 0, node; node = nodes[i]; i++)
+ node._countedByPrototype = void 0;
+ return nodes;
+ }
+ })(),
+
+ index: function(parentNode, reverse, ofType) {
+ parentNode._countedByPrototype = Prototype.emptyFunction;
+ if (reverse) {
+ for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
+ var node = nodes[i];
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ } else {
+ for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+ if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+ }
+ },
+
+ unique: function(nodes) {
+ if (nodes.length == 0) return nodes;
+ var results = [], n;
+ for (var i = 0, l = nodes.length; i < l; i++)
+ if (typeof (n = nodes[i])._countedByPrototype == 'undefined') {
+ n._countedByPrototype = Prototype.emptyFunction;
+ results.push(Element.extend(n));
+ }
+ return Selector.handlers.unmark(results);
+ },
+
+ descendant: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName('*'));
+ return results;
+ },
+
+ child: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ for (var j = 0, child; child = node.childNodes[j]; j++)
+ if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+ }
+ return results;
+ },
+
+ adjacent: function(nodes) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ var next = this.nextElementSibling(node);
+ if (next) results.push(next);
+ }
+ return results;
+ },
+
+ laterSibling: function(nodes) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ h.concat(results, Element.nextSiblings(node));
+ return results;
+ },
+
+ nextElementSibling: function(node) {
+ while (node = node.nextSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ previousElementSibling: function(node) {
+ while (node = node.previousSibling)
+ if (node.nodeType == 1) return node;
+ return null;
+ },
+
+ tagName: function(nodes, root, tagName, combinator) {
+ var uTagName = tagName.toUpperCase();
+ var results = [], h = Selector.handlers;
+ if (nodes) {
+ if (combinator) {
+ if (combinator == "descendant") {
+ for (var i = 0, node; node = nodes[i]; i++)
+ h.concat(results, node.getElementsByTagName(tagName));
+ return results;
+ } else nodes = this[combinator](nodes);
+ if (tagName == "*") return nodes;
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.tagName.toUpperCase() === uTagName) results.push(node);
+ return results;
+ } else return root.getElementsByTagName(tagName);
+ },
+
+ id: function(nodes, root, id, combinator) {
+ var targetNode = DOKUid(id), h = Selector.handlers;
+
+ if (root == document) {
+ if (!targetNode) return [];
+ if (!nodes) return [targetNode];
+ } else {
+ if (!root.sourceIndex || root.sourceIndex < 1) {
+ var nodes = root.getElementsByTagName('*');
+ for (var j = 0, node; node = nodes[j]; j++) {
+ if (node.id === id) return [node];
+ }
+ }
+ }
+
+ if (nodes) {
+ if (combinator) {
+ if (combinator == 'child') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (targetNode.parentNode == node) return [targetNode];
+ } else if (combinator == 'descendant') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.descendantOf(targetNode, node)) return [targetNode];
+ } else if (combinator == 'adjacent') {
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Selector.handlers.previousElementSibling(targetNode) == node)
+ return [targetNode];
+ } else nodes = h[combinator](nodes);
+ }
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node == targetNode) return [targetNode];
+ return [];
+ }
+ return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+ },
+
+ className: function(nodes, root, className, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ return Selector.handlers.byClassName(nodes, root, className);
+ },
+
+ byClassName: function(nodes, root, className) {
+ if (!nodes) nodes = Selector.handlers.descendant([root]);
+ var needle = ' ' + className + ' ';
+ for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+ nodeClassName = node.className;
+ if (nodeClassName.length == 0) continue;
+ if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+ results.push(node);
+ }
+ return results;
+ },
+
+ attrPresence: function(nodes, root, attr, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var results = [];
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (Element.hasAttribute(node, attr)) results.push(node);
+ return results;
+ },
+
+ attr: function(nodes, root, attr, value, operator, combinator) {
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ var handler = Selector.operators[operator], results = [];
+ for (var i = 0, node; node = nodes[i]; i++) {
+ var nodeValue = Element.readAttribute(node, attr);
+ if (nodeValue === null) continue;
+ if (handler(nodeValue, value)) results.push(node);
+ }
+ return results;
+ },
+
+ pseudo: function(nodes, name, value, root, combinator) {
+ if (nodes && combinator) nodes = this[combinator](nodes);
+ if (!nodes) nodes = root.getElementsByTagName("*");
+ return Selector.pseudos[name](nodes, value, root);
+ }
+ },
+
+ pseudos: {
+ 'first-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.previousElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'last-child': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (Selector.handlers.nextElementSibling(node)) continue;
+ results.push(node);
+ }
+ return results;
+ },
+ 'only-child': function(nodes, value, root) {
+ var h = Selector.handlers;
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
+ results.push(node);
+ return results;
+ },
+ 'nth-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root);
+ },
+ 'nth-last-child': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true);
+ },
+ 'nth-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, false, true);
+ },
+ 'nth-last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, formula, root, true, true);
+ },
+ 'first-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, false, true);
+ },
+ 'last-of-type': function(nodes, formula, root) {
+ return Selector.pseudos.nth(nodes, "1", root, true, true);
+ },
+ 'only-of-type': function(nodes, formula, root) {
+ var p = Selector.pseudos;
+ return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+ },
+
+ getIndices: function(a, b, total) {
+ if (a == 0) return b > 0 ? [b] : [];
+ return $R(1, total).inject([], function(memo, i) {
+ if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
+ return memo;
+ });
+ },
+
+ nth: function(nodes, formula, root, reverse, ofType) {
+ if (nodes.length == 0) return [];
+ if (formula == 'even') formula = '2n+0';
+ if (formula == 'odd') formula = '2n+1';
+ var h = Selector.handlers, results = [], indexed = [], m;
+ h.mark(nodes);
+ for (var i = 0, node; node = nodes[i]; i++) {
+ if (!node.parentNode._countedByPrototype) {
+ h.index(node.parentNode, reverse, ofType);
+ indexed.push(node.parentNode);
+ }
+ }
+ if (formula.match(/^\d+$/)) { // just a number
+ formula = Number(formula);
+ for (var i = 0, node; node = nodes[i]; i++)
+ if (node.nodeIndex == formula) results.push(node);
+ } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+ if (m[1] == "-") m[1] = -1;
+ var a = m[1] ? Number(m[1]) : 1;
+ var b = m[2] ? Number(m[2]) : 0;
+ var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+ for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+ for (var j = 0; j < l; j++)
+ if (node.nodeIndex == indices[j]) results.push(node);
+ }
+ }
+ h.unmark(nodes);
+ h.unmark(indexed);
+ return results;
+ },
+
+ 'empty': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++) {
+ if (node.tagName == '!' || node.firstChild) continue;
+ results.push(node);
+ }
+ return results;
+ },
+
+ 'not': function(nodes, selector, root) {
+ var h = Selector.handlers, selectorType, m;
+ var exclusions = new Selector(selector).findElements(root);
+ h.mark(exclusions);
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node._countedByPrototype) results.push(node);
+ h.unmark(exclusions);
+ return results;
+ },
+
+ 'enabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (!node.disabled && (!node.type || node.type !== 'hidden'))
+ results.push(node);
+ return results;
+ },
+
+ 'disabled': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.disabled) results.push(node);
+ return results;
+ },
+
+ 'checked': function(nodes, value, root) {
+ for (var i = 0, results = [], node; node = nodes[i]; i++)
+ if (node.checked) results.push(node);
+ return results;
+ }
+ },
+
+ operators: {
+ '=': function(nv, v) { return nv == v; },
+ '!=': function(nv, v) { return nv != v; },
+ '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
+ '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
+ '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
+ '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+ '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
+ '-').include('-' + (v || "").toUpperCase() + '-'); }
+ },
+
+ split: function(expression) {
+ var expressions = [];
+ expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+ expressions.push(m[1].strip());
+ });
+ return expressions;
+ },
+
+ matchElements: function(elements, expression) {
+ var matches = $$(expression), h = Selector.handlers;
+ h.mark(matches);
+ for (var i = 0, results = [], element; element = elements[i]; i++)
+ if (element._countedByPrototype) results.push(element);
+ h.unmark(matches);
+ return results;
+ },
+
+ findElement: function(elements, expression, index) {
+ if (Object.isNumber(expression)) {
+ index = expression; expression = false;
+ }
+ return Selector.matchElements(elements, expression || '*')[index || 0];
+ },
+
+ findChildElements: function(element, expressions) {
+ expressions = Selector.split(expressions.join(','));
+ var results = [], h = Selector.handlers;
+ for (var i = 0, l = expressions.length, selector; i < l; i++) {
+ selector = new Selector(expressions[i].strip());
+ h.concat(results, selector.findElements(element));
+ }
+ return (l > 1) ? h.unique(results) : results;
+ }
+});
+
+if (Prototype.Browser.IE) {
+ Object.extend(Selector.handlers, {
+ concat: function(a, b) {
+ for (var i = 0, node; node = b[i]; i++)
+ if (node.tagName !== "!") a.push(node);
+ return a;
+ }
+ });
+}
+
+function $$() {
+ return Selector.findChildElements(document, $A(arguments));
+}
+
+var Form = {
+ reset: function(form) {
+ form = DOKUid(form);
+ form.reset();
+ return form;
+ },
+
+ serializeElements: function(elements, options) {
+ if (typeof options != 'object') options = { hash: !!options };
+ else if (Object.isUndefined(options.hash)) options.hash = true;
+ var key, value, submitted = false, submit = options.submit;
+
+ var data = elements.inject({ }, function(result, element) {
+ if (!element.disabled && element.name) {
+ key = element.name; value = DOKUid(element).getValue();
+ if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
+ submit !== false && (!submit || key == submit) && (submitted = true)))) {
+ if (key in result) {
+ if (!Object.isArray(result[key])) result[key] = [result[key]];
+ result[key].push(value);
+ }
+ else result[key] = value;
+ }
+ }
+ return result;
+ });
+
+ return options.hash ? data : Object.toQueryString(data);
+ }
+};
+
+Form.Methods = {
+ serialize: function(form, options) {
+ return Form.serializeElements(Form.getElements(form), options);
+ },
+
+ getElements: function(form) {
+ var elements = DOKUid(form).getElementsByTagName('*'),
+ element,
+ arr = [ ],
+ serializers = Form.Element.Serializers;
+ for (var i = 0; element = elements[i]; i++) {
+ arr.push(element);
+ }
+ return arr.inject([], function(elements, child) {
+ if (serializers[child.tagName.toLowerCase()])
+ elements.push(Element.extend(child));
+ return elements;
+ })
+ },
+
+ getInputs: function(form, typeName, name) {
+ form = DOKUid(form);
+ var inputs = form.getElementsByTagName('input');
+
+ if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+ for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+ var input = inputs[i];
+ if ((typeName && input.type != typeName) || (name && input.name != name))
+ continue;
+ matchingInputs.push(Element.extend(input));
+ }
+
+ return matchingInputs;
+ },
+
+ disable: function(form) {
+ form = DOKUid(form);
+ Form.getElements(form).invoke('disable');
+ return form;
+ },
+
+ enable: function(form) {
+ form = DOKUid(form);
+ Form.getElements(form).invoke('enable');
+ return form;
+ },
+
+ findFirstElement: function(form) {
+ var elements = DOKUid(form).getElements().findAll(function(element) {
+ return 'hidden' != element.type && !element.disabled;
+ });
+ var firstByIndex = elements.findAll(function(element) {
+ return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+ }).sortBy(function(element) { return element.tabIndex }).first();
+
+ return firstByIndex ? firstByIndex : elements.find(function(element) {
+ return /^(?:input|select|textarea)$/i.test(element.tagName);
+ });
+ },
+
+ focusFirstElement: function(form) {
+ form = DOKUid(form);
+ form.findFirstElement().activate();
+ return form;
+ },
+
+ request: function(form, options) {
+ form = DOKUid(form), options = Object.clone(options || { });
+
+ var params = options.parameters, action = form.readAttribute('action') || '';
+ if (action.blank()) action = window.location.href;
+ options.parameters = form.serialize(true);
+
+ if (params) {
+ if (Object.isString(params)) params = params.toQueryParams();
+ Object.extend(options.parameters, params);
+ }
+
+ if (form.hasAttribute('method') && !options.method)
+ options.method = form.method;
+
+ return new Ajax.Request(action, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+
+Form.Element = {
+ focus: function(element) {
+ DOKUid(element).focus();
+ return element;
+ },
+
+ select: function(element) {
+ DOKUid(element).select();
+ return element;
+ }
+};
+
+Form.Element.Methods = {
+
+ serialize: function(element) {
+ element = DOKUid(element);
+ if (!element.disabled && element.name) {
+ var value = element.getValue();
+ if (value != undefined) {
+ var pair = { };
+ pair[element.name] = value;
+ return Object.toQueryString(pair);
+ }
+ }
+ return '';
+ },
+
+ getValue: function(element) {
+ element = DOKUid(element);
+ var method = element.tagName.toLowerCase();
+ return Form.Element.Serializers[method](element);
+ },
+
+ setValue: function(element, value) {
+ element = DOKUid(element);
+ var method = element.tagName.toLowerCase();
+ Form.Element.Serializers[method](element, value);
+ return element;
+ },
+
+ clear: function(element) {
+ DOKUid(element).value = '';
+ return element;
+ },
+
+ present: function(element) {
+ return DOKUid(element).value != '';
+ },
+
+ activate: function(element) {
+ element = DOKUid(element);
+ try {
+ element.focus();
+ if (element.select && (element.tagName.toLowerCase() != 'input' ||
+ !(/^(?:button|reset|submit)$/i.test(element.type))))
+ element.select();
+ } catch (e) { }
+ return element;
+ },
+
+ disable: function(element) {
+ element = DOKUid(element);
+ element.disabled = true;
+ return element;
+ },
+
+ enable: function(element) {
+ element = DOKUid(element);
+ element.disabled = false;
+ return element;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+ input: function(element, value) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ return Form.Element.Serializers.inputSelector(element, value);
+ default:
+ return Form.Element.Serializers.textarea(element, value);
+ }
+ },
+
+ inputSelector: function(element, value) {
+ if (Object.isUndefined(value)) return element.checked ? element.value : null;
+ else element.checked = !!value;
+ },
+
+ textarea: function(element, value) {
+ if (Object.isUndefined(value)) return element.value;
+ else element.value = value;
+ },
+
+ select: function(element, value) {
+ if (Object.isUndefined(value))
+ return this[element.type == 'select-one' ?
+ 'selectOne' : 'selectMany'](element);
+ else {
+ var opt, currentValue, single = !Object.isArray(value);
+ for (var i = 0, length = element.length; i < length; i++) {
+ opt = element.options[i];
+ currentValue = this.optionValue(opt);
+ if (single) {
+ if (currentValue == value) {
+ opt.selected = true;
+ return;
+ }
+ }
+ else opt.selected = value.include(currentValue);
+ }
+ }
+ },
+
+ selectOne: function(element) {
+ var index = element.selectedIndex;
+ return index >= 0 ? this.optionValue(element.options[index]) : null;
+ },
+
+ selectMany: function(element) {
+ var values, length = element.length;
+ if (!length) return null;
+
+ for (var i = 0, values = []; i < length; i++) {
+ var opt = element.options[i];
+ if (opt.selected) values.push(this.optionValue(opt));
+ }
+ return values;
+ },
+
+ optionValue: function(opt) {
+ return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+ initialize: function($super, element, frequency, callback) {
+ $super(callback, frequency);
+ this.element = DOKUid(element);
+ this.lastValue = this.getValue();
+ },
+
+ execute: function() {
+ var value = this.getValue();
+ if (Object.isString(this.lastValue) && Object.isString(value) ?
+ this.lastValue != value : String(this.lastValue) != String(value)) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+ initialize: function(element, callback) {
+ this.element = DOKUid(element);
+ this.callback = callback;
+
+ this.lastValue = this.getValue();
+ if (this.element.tagName.toLowerCase() == 'form')
+ this.registerFormCallbacks();
+ else
+ this.registerCallback(this.element);
+ },
+
+ onElementEvent: function() {
+ var value = this.getValue();
+ if (this.lastValue != value) {
+ this.callback(this.element, value);
+ this.lastValue = value;
+ }
+ },
+
+ registerFormCallbacks: function() {
+ Form.getElements(this.element).each(this.registerCallback, this);
+ },
+
+ registerCallback: function(element) {
+ if (element.type) {
+ switch (element.type.toLowerCase()) {
+ case 'checkbox':
+ case 'radio':
+ Event.observe(element, 'click', this.onElementEvent.bind(this));
+ break;
+ default:
+ Event.observe(element, 'change', this.onElementEvent.bind(this));
+ break;
+ }
+ }
+ }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.Element.getValue(this.element);
+ }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+ getValue: function() {
+ return Form.serialize(this.element);
+ }
+});
+(function() {
+
+ var Event = {
+ KEY_BACKSPACE: 8,
+ KEY_TAB: 9,
+ KEY_RETURN: 13,
+ KEY_ESC: 27,
+ KEY_LEFT: 37,
+ KEY_UP: 38,
+ KEY_RIGHT: 39,
+ KEY_DOWN: 40,
+ KEY_DELETE: 46,
+ KEY_HOME: 36,
+ KEY_END: 35,
+ KEY_PAGEUP: 33,
+ KEY_PAGEDOWN: 34,
+ KEY_INSERT: 45,
+
+ cache: {}
+ };
+
+ var docEl = document.documentElement;
+ var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
+ && 'onmouseleave' in docEl;
+
+ var _isButton;
+ if (Prototype.Browser.IE) {
+ var buttonMap = { 0: 1, 1: 4, 2: 2 };
+ _isButton = function(event, code) {
+ return event.button === buttonMap[code];
+ };
+ } else if (Prototype.Browser.WebKit) {
+ _isButton = function(event, code) {
+ switch (code) {
+ case 0: return event.which == 1 && !event.metaKey;
+ case 1: return event.which == 1 && event.metaKey;
+ default: return false;
+ }
+ };
+ } else {
+ _isButton = function(event, code) {
+ return event.which ? (event.which === code + 1) : (event.button === code);
+ };
+ }
+
+ function isLeftClick(event) { return _isButton(event, 0) }
+
+ function isMiddleClick(event) { return _isButton(event, 1) }
+
+ function isRightClick(event) { return _isButton(event, 2) }
+
+ function element(event) {
+ event = Event.extend(event);
+
+ var node = event.target, type = event.type,
+ currentTarget = event.currentTarget;
+
+ if (currentTarget && currentTarget.tagName) {
+ if (type === 'load' || type === 'error' ||
+ (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+ && currentTarget.type === 'radio'))
+ node = currentTarget;
+ }
+
+ if (node.nodeType == Node.TEXT_NODE)
+ node = node.parentNode;
+
+ return Element.extend(node);
+ }
+
+ function findElement(event, expression) {
+ var element = Event.element(event);
+ if (!expression) return element;
+ var elements = [element].concat(element.ancestors());
+ return Selector.findElement(elements, expression, 0);
+ }
+
+ function pointer(event) {
+ return { x: pointerX(event), y: pointerY(event) };
+ }
+
+ function pointerX(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollLeft: 0 };
+
+ return event.pageX || (event.clientX +
+ (docElement.scrollLeft || body.scrollLeft) -
+ (docElement.clientLeft || 0));
+ }
+
+ function pointerY(event) {
+ var docElement = document.documentElement,
+ body = document.body || { scrollTop: 0 };
+
+ return event.pageY || (event.clientY +
+ (docElement.scrollTop || body.scrollTop) -
+ (docElement.clientTop || 0));
+ }
+
+
+ function stop(event) {
+ Event.extend(event);
+ event.preventDefault();
+ event.stopPropagation();
+
+ event.stopped = true;
+ }
+
+ Event.Methods = {
+ isLeftClick: isLeftClick,
+ isMiddleClick: isMiddleClick,
+ isRightClick: isRightClick,
+
+ element: element,
+ findElement: findElement,
+
+ pointer: pointer,
+ pointerX: pointerX,
+ pointerY: pointerY,
+
+ stop: stop
+ };
+
+
+ var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+ m[name] = Event.Methods[name].methodize();
+ return m;
+ });
+
+ if (Prototype.Browser.IE) {
+ function _relatedTarget(event) {
+ var element;
+ switch (event.type) {
+ case 'mouseover': element = event.fromElement; break;
+ case 'mouseout': element = event.toElement; break;
+ default: return null;
+ }
+ return Element.extend(element);
+ }
+
+ Object.extend(methods, {
+ stopPropagation: function() { this.cancelBubble = true },
+ preventDefault: function() { this.returnValue = false },
+ inspect: function() { return '[object Event]' }
+ });
+
+ Event.extend = function(event, element) {
+ if (!event) return false;
+ if (event._extendedByPrototype) return event;
+
+ event._extendedByPrototype = Prototype.emptyFunction;
+ var pointer = Event.pointer(event);
+
+ Object.extend(event, {
+ target: event.srcElement || element,
+ relatedTarget: _relatedTarget(event),
+ pageX: pointer.x,
+ pageY: pointer.y
+ });
+
+ return Object.extend(event, methods);
+ };
+ } else {
+ Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
+ Object.extend(Event.prototype, methods);
+ Event.extend = Prototype.K;
+ }
+
+ function _createResponder(element, eventName, handler) {
+ var registry = Element.retrieve(element, 'prototype_event_registry');
+
+ if (Object.isUndefined(registry)) {
+ CACHE.push(element);
+ registry = Element.retrieve(element, 'prototype_event_registry', $H());
+ }
+
+ var respondersForEvent = registry.get(eventName);
+ if (Object.isUndefined(respondersForEvent)) {
+ respondersForEvent = [];
+ registry.set(eventName, respondersForEvent);
+ }
+
+ if (respondersForEvent.pluck('handler').include(handler)) return false;
+
+ var responder;
+ if (eventName.include(":")) {
+ responder = function(event) {
+ if (Object.isUndefined(event.eventName))
+ return false;
+
+ if (event.eventName !== eventName)
+ return false;
+
+ Event.extend(event, element);
+ handler.call(element, event);
+ };
+ } else {
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
+ (eventName === "mouseenter" || eventName === "mouseleave")) {
+ if (eventName === "mouseenter" || eventName === "mouseleave") {
+ responder = function(event) {
+ Event.extend(event, element);
+
+ var parent = event.relatedTarget;
+ while (parent && parent !== element) {
+ try { parent = parent.parentNode; }
+ catch(e) { parent = element; }
+ }
+
+ if (parent === element) return;
+
+ handler.call(element, event);
+ };
+ }
+ } else {
+ responder = function(event) {
+ Event.extend(event, element);
+ handler.call(element, event);
+ };
+ }
+ }
+
+ responder.handler = handler;
+ respondersForEvent.push(responder);
+ return responder;
+ }
+
+ function _destroyCache() {
+ for (var i = 0, length = CACHE.length; i < length; i++) {
+ Event.stopObserving(CACHE[i]);
+ CACHE[i] = null;
+ }
+ }
+
+ var CACHE = [];
+
+ if (Prototype.Browser.IE)
+ window.attachEvent('onunload', _destroyCache);
+
+ if (Prototype.Browser.WebKit)
+ window.addEventListener('unload', Prototype.emptyFunction, false);
+
+
+ var _getDOMEventName = Prototype.K;
+
+ if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
+ _getDOMEventName = function(eventName) {
+ var translations = { mouseenter: "mouseover", mouseleave: "mouseout" };
+ return eventName in translations ? translations[eventName] : eventName;
+ };
+ }
+
+ function observe(element, eventName, handler) {
+ element = DOKUid(element);
+
+ var responder = _createResponder(element, eventName, handler);
+
+ if (!responder) return element;
+
+ if (eventName.include(':')) {
+ if (element.addEventListener)
+ element.addEventListener("dataavailable", responder, false);
+ else {
+ element.attachEvent("ondataavailable", responder);
+ element.attachEvent("onfilterchange", responder);
+ }
+ } else {
+ var actualEventName = _getDOMEventName(eventName);
+
+ if (element.addEventListener)
+ element.addEventListener(actualEventName, responder, false);
+ else
+ element.attachEvent("on" + actualEventName, responder);
+ }
+
+ return element;
+ }
+
+ function stopObserving(element, eventName, handler) {
+ element = DOKUid(element);
+
+ var registry = Element.retrieve(element, 'prototype_event_registry');
+
+ if (Object.isUndefined(registry)) return element;
+
+ if (eventName && !handler) {
+ var responders = registry.get(eventName);
+
+ if (Object.isUndefined(responders)) return element;
+
+ responders.each( function(r) {
+ Element.stopObserving(element, eventName, r.handler);
+ });
+ return element;
+ } else if (!eventName) {
+ registry.each( function(pair) {
+ var eventName = pair.key, responders = pair.value;
+
+ responders.each( function(r) {
+ Element.stopObserving(element, eventName, r.handler);
+ });
+ });
+ return element;
+ }
+
+ var responders = registry.get(eventName);
+
+ if (!responders) return;
+
+ var responder = responders.find( function(r) { return r.handler === handler; });
+ if (!responder) return element;
+
+ var actualEventName = _getDOMEventName(eventName);
+
+ if (eventName.include(':')) {
+ if (element.removeEventListener)
+ element.removeEventListener("dataavailable", responder, false);
+ else {
+ element.detachEvent("ondataavailable", responder);
+ element.detachEvent("onfilterchange", responder);
+ }
+ } else {
+ if (element.removeEventListener)
+ element.removeEventListener(actualEventName, responder, false);
+ else
+ element.detachEvent('on' + actualEventName, responder);
+ }
+
+ registry.set(eventName, responders.without(responder));
+
+ return element;
+ }
+
+ function fire(element, eventName, memo, bubble) {
+ element = DOKUid(element);
+
+ if (Object.isUndefined(bubble))
+ bubble = true;
+
+ if (element == document && document.createEvent && !element.dispatchEvent)
+ element = document.documentElement;
+
+ var event;
+ if (document.createEvent) {
+ event = document.createEvent('HTMLEvents');
+ event.initEvent('dataavailable', true, true);
+ } else {
+ event = document.createEventObject();
+ event.eventType = bubble ? 'ondataavailable' : 'onfilterchange';
+ }
+
+ event.eventName = eventName;
+ event.memo = memo || { };
+
+ if (document.createEvent)
+ element.dispatchEvent(event);
+ else
+ element.fireEvent(event.eventType, event);
+
+ return Event.extend(event);
+ }
+
+
+ Object.extend(Event, Event.Methods);
+
+ Object.extend(Event, {
+ fire: fire,
+ observe: observe,
+ stopObserving: stopObserving
+ });
+
+ Element.addMethods({
+ fire: fire,
+
+ observe: observe,
+
+ stopObserving: stopObserving
+ });
+
+ Object.extend(document, {
+ fire: fire.methodize(),
+
+ observe: observe.methodize(),
+
+ stopObserving: stopObserving.methodize(),
+
+ loaded: false
+ });
+
+ if (window.Event) Object.extend(window.Event, Event);
+ else window.Event = Event;
+})();
+
+(function() {
+ /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+ Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */
+
+ var timer;
+
+ function fireContentLoadedEvent() {
+ if (document.loaded) return;
+ if (timer) window.clearTimeout(timer);
+ document.loaded = true;
+ document.fire('dom:loaded');
+ }
+
+ function checkReadyState() {
+ if (document.readyState === 'complete') {
+ document.stopObserving('readystatechange', checkReadyState);
+ fireContentLoadedEvent();
+ }
+ }
+
+ function pollDoScroll() {
+ try { document.documentElement.doScroll('left'); }
+ catch(e) {
+ timer = pollDoScroll.defer();
+ return;
+ }
+ fireContentLoadedEvent();
+ }
+
+ if (document.addEventListener) {
+ document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
+ } else {
+ document.observe('readystatechange', checkReadyState);
+ if (window == top)
+ timer = pollDoScroll.defer();
+ }
+
+ Event.observe(window, 'load', fireContentLoadedEvent);
+})();
+
+Element.addMethods();
+
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+ Before: function(element, content) {
+ return Element.insert(element, {before:content});
+ },
+
+ Top: function(element, content) {
+ return Element.insert(element, {top:content});
+ },
+
+ Bottom: function(element, content) {
+ return Element.insert(element, {bottom:content});
+ },
+
+ After: function(element, content) {
+ return Element.insert(element, {after:content});
+ }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+var Position = {
+ includeScrollOffsets: false,
+
+ prepare: function() {
+ this.deltaX = window.pageXOffset
+ || document.documentElement.scrollLeft
+ || document.body.scrollLeft
+ || 0;
+ this.deltaY = window.pageYOffset
+ || document.documentElement.scrollTop
+ || document.body.scrollTop
+ || 0;
+ },
+
+ within: function(element, x, y) {
+ if (this.includeScrollOffsets)
+ return this.withinIncludingScrolloffsets(element, x, y);
+ this.xcomp = x;
+ this.ycomp = y;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (y >= this.offset[1] &&
+ y < this.offset[1] + element.offsetHeight &&
+ x >= this.offset[0] &&
+ x < this.offset[0] + element.offsetWidth);
+ },
+
+ withinIncludingScrolloffsets: function(element, x, y) {
+ var offsetcache = Element.cumulativeScrollOffset(element);
+
+ this.xcomp = x + offsetcache[0] - this.deltaX;
+ this.ycomp = y + offsetcache[1] - this.deltaY;
+ this.offset = Element.cumulativeOffset(element);
+
+ return (this.ycomp >= this.offset[1] &&
+ this.ycomp < this.offset[1] + element.offsetHeight &&
+ this.xcomp >= this.offset[0] &&
+ this.xcomp < this.offset[0] + element.offsetWidth);
+ },
+
+ overlap: function(mode, element) {
+ if (!mode) return 0;
+ if (mode == 'vertical')
+ return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+ element.offsetHeight;
+ if (mode == 'horizontal')
+ return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+ element.offsetWidth;
+ },
+
+
+ cumulativeOffset: Element.Methods.cumulativeOffset,
+
+ positionedOffset: Element.Methods.positionedOffset,
+
+ absolutize: function(element) {
+ Position.prepare();
+ return Element.absolutize(element);
+ },
+
+ relativize: function(element) {
+ Position.prepare();
+ return Element.relativize(element);
+ },
+
+ realOffset: Element.Methods.cumulativeScrollOffset,
+
+ offsetParent: Element.Methods.getOffsetParent,
+
+ page: Element.Methods.viewportOffset,
+
+ clone: function(source, target, options) {
+ options = options || { };
+ return Element.clonePosition(target, source, options);
+ }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+ function iter(name) {
+ return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+ }
+
+ instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+ function(element, className) {
+ className = className.toString().strip();
+ var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+ return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+ } : function(element, className) {
+ className = className.toString().strip();
+ var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+ if (!classNames && !className) return elements;
+
+ var nodes = DOKUid(element).getElementsByTagName('*');
+ className = ' ' + className + ' ';
+
+ for (var i = 0, child, cn; child = nodes[i]; i++) {
+ if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+ (classNames && classNames.all(function(name) {
+ return !name.toString().blank() && cn.include(' ' + name + ' ');
+ }))))
+ elements.push(Element.extend(child));
+ }
+ return elements;
+ };
+
+ return function(className, parentElement) {
+ return DOKUid(parentElement || document.body).getElementsByClassName(className);
+ };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+ initialize: function(element) {
+ this.element = DOKUid(element);
+ },
+
+ _each: function(iterator) {
+ this.element.className.split(/\s+/).select(function(name) {
+ return name.length > 0;
+ })._each(iterator);
+ },
+
+ set: function(className) {
+ this.element.className = className;
+ },
+
+ add: function(classNameToAdd) {
+ if (this.include(classNameToAdd)) return;
+ this.set($A(this).concat(classNameToAdd).join(' '));
+ },
+
+ remove: function(classNameToRemove) {
+ if (!this.include(classNameToRemove)) return;
+ this.set($A(this).without(classNameToRemove).join(' '));
+ },
+
+ toString: function() {
+ return $A(this).join(' ');
+ }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js
new file mode 100644
index 000000000..37a0733a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js
@@ -0,0 +1,68 @@
+// script.aculo.us scriptaculous.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// 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.
+//
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Scriptaculous = {
+ Version: '1.8.3',
+ require: function(libraryName) {
+ try{
+ // inserting via DOM fails in Safari 2.0, so brute force approach
+ document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
+ } catch(e) {
+ // for xhtml+xml served content, fall back to DOM methods
+ var script = document.createElement('script');
+ script.type = 'text/javascript';
+ script.src = libraryName;
+ document.getElementsByTagName('head')[0].appendChild(script);
+ }
+ },
+ REQUIRED_PROTOTYPE: '1.6.0.3',
+ load: function() {
+ function convertVersionString(versionString) {
+ var v = versionString.replace(/_.*|\./g, '');
+ v = parseInt(v + '0'.times(4-v.length));
+ return versionString.indexOf('_') > -1 ? v-1 : v;
+ }
+
+ if((typeof Prototype=='undefined') ||
+ (typeof Element == 'undefined') ||
+ (typeof Element.Methods=='undefined') ||
+ (convertVersionString(Prototype.Version) <
+ convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
+ throw("script.aculo.us requires the Prototype JavaScript framework >= " +
+ Scriptaculous.REQUIRED_PROTOTYPE);
+
+ var js = /scriptaculous\.js(\?.*)?$/;
+ $$('head script[src]').findAll(function(s) {
+ return s.src.match(js);
+ }).each(function(s) {
+ var path = s.src.replace(js, ''),
+ includes = s.src.match(/\?.*load=([a-z,]*)/);
+ (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each(
+ function(include) { Scriptaculous.require(path+include+'.js') });
+ });
+ }
+};
+
+Scriptaculous.load(); \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js
new file mode 100644
index 000000000..ac2fef2d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js
@@ -0,0 +1,275 @@
+// script.aculo.us slider.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Marty Haught, Thomas Fuchs
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if (!Control) var Control = { };
+
+// options:
+// axis: 'vertical', or 'horizontal' (default)
+//
+// callbacks:
+// onChange(value)
+// onSlide(value)
+Control.Slider = Class.create({
+ initialize: function(handle, track, options) {
+ var slider = this;
+
+ if (Object.isArray(handle)) {
+ this.handles = handle.collect( function(e) { return DOKUid(e) });
+ } else {
+ this.handles = [DOKUid(handle)];
+ }
+
+ this.track = DOKUid(track);
+ this.options = options || { };
+
+ this.axis = this.options.axis || 'horizontal';
+ this.increment = this.options.increment || 1;
+ this.step = parseInt(this.options.step || '1');
+ this.range = this.options.range || $R(0,1);
+
+ this.value = 0; // assure backwards compat
+ this.values = this.handles.map( function() { return 0 });
+ this.spans = this.options.spans ? this.options.spans.map(function(s){ return DOKUid(s) }) : false;
+ this.options.startSpan = DOKUid(this.options.startSpan || null);
+ this.options.endSpan = DOKUid(this.options.endSpan || null);
+
+ this.restricted = this.options.restricted || false;
+
+ this.maximum = this.options.maximum || this.range.end;
+ this.minimum = this.options.minimum || this.range.start;
+
+ // Will be used to align the handle onto the track, if necessary
+ this.alignX = parseInt(this.options.alignX || '0');
+ this.alignY = parseInt(this.options.alignY || '0');
+
+ this.trackLength = this.maximumOffset() - this.minimumOffset();
+
+ this.handleLength = this.isVertical() ?
+ (this.handles[0].offsetHeight != 0 ?
+ this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
+ (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
+ this.handles[0].style.width.replace(/px$/,""));
+
+ this.active = false;
+ this.dragging = false;
+ this.disabled = false;
+
+ if (this.options.disabled) this.setDisabled();
+
+ // Allowed values array
+ this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
+ if (this.allowedValues) {
+ this.minimum = this.allowedValues.min();
+ this.maximum = this.allowedValues.max();
+ }
+
+ this.eventMouseDown = this.startDrag.bindAsEventListener(this);
+ this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+ this.eventMouseMove = this.update.bindAsEventListener(this);
+
+ // Initialize handles in reverse (make sure first handle is active)
+ this.handles.each( function(h,i) {
+ i = slider.handles.length-1-i;
+ slider.setValue(parseFloat(
+ (Object.isArray(slider.options.sliderValue) ?
+ slider.options.sliderValue[i] : slider.options.sliderValue) ||
+ slider.range.start), i);
+ h.makePositioned().observe("mousedown", slider.eventMouseDown);
+ });
+
+ this.track.observe("mousedown", this.eventMouseDown);
+ document.observe("mouseup", this.eventMouseUp);
+ document.observe("mousemove", this.eventMouseMove);
+
+ this.initialized = true;
+ },
+ dispose: function() {
+ var slider = this;
+ Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
+ Event.stopObserving(document, "mouseup", this.eventMouseUp);
+ Event.stopObserving(document, "mousemove", this.eventMouseMove);
+ this.handles.each( function(h) {
+ Event.stopObserving(h, "mousedown", slider.eventMouseDown);
+ });
+ },
+ setDisabled: function(){
+ this.disabled = true;
+ },
+ setEnabled: function(){
+ this.disabled = false;
+ },
+ getNearestValue: function(value){
+ if (this.allowedValues){
+ if (value >= this.allowedValues.max()) return(this.allowedValues.max());
+ if (value <= this.allowedValues.min()) return(this.allowedValues.min());
+
+ var offset = Math.abs(this.allowedValues[0] - value);
+ var newValue = this.allowedValues[0];
+ this.allowedValues.each( function(v) {
+ var currentOffset = Math.abs(v - value);
+ if (currentOffset <= offset){
+ newValue = v;
+ offset = currentOffset;
+ }
+ });
+ return newValue;
+ }
+ if (value > this.range.end) return this.range.end;
+ if (value < this.range.start) return this.range.start;
+ return value;
+ },
+ setValue: function(sliderValue, handleIdx){
+ if (!this.active) {
+ this.activeHandleIdx = handleIdx || 0;
+ this.activeHandle = this.handles[this.activeHandleIdx];
+ this.updateStyles();
+ }
+ handleIdx = handleIdx || this.activeHandleIdx || 0;
+ if (this.initialized && this.restricted) {
+ if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
+ sliderValue = this.values[handleIdx-1];
+ if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
+ sliderValue = this.values[handleIdx+1];
+ }
+ sliderValue = this.getNearestValue(sliderValue);
+ this.values[handleIdx] = sliderValue;
+ this.value = this.values[0]; // assure backwards compat
+
+ this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
+ this.translateToPx(sliderValue);
+
+ this.drawSpans();
+ if (!this.dragging || !this.event) this.updateFinished();
+ },
+ setValueBy: function(delta, handleIdx) {
+ this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
+ handleIdx || this.activeHandleIdx || 0);
+ },
+ translateToPx: function(value) {
+ return Math.round(
+ ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
+ (value - this.range.start)) + "px";
+ },
+ translateToValue: function(offset) {
+ return ((offset/(this.trackLength-this.handleLength) *
+ (this.range.end-this.range.start)) + this.range.start);
+ },
+ getRange: function(range) {
+ var v = this.values.sortBy(Prototype.K);
+ range = range || 0;
+ return $R(v[range],v[range+1]);
+ },
+ minimumOffset: function(){
+ return(this.isVertical() ? this.alignY : this.alignX);
+ },
+ maximumOffset: function(){
+ return(this.isVertical() ?
+ (this.track.offsetHeight != 0 ? this.track.offsetHeight :
+ this.track.style.height.replace(/px$/,"")) - this.alignY :
+ (this.track.offsetWidth != 0 ? this.track.offsetWidth :
+ this.track.style.width.replace(/px$/,"")) - this.alignX);
+ },
+ isVertical: function(){
+ return (this.axis == 'vertical');
+ },
+ drawSpans: function() {
+ var slider = this;
+ if (this.spans)
+ $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
+ if (this.options.startSpan)
+ this.setSpan(this.options.startSpan,
+ $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
+ if (this.options.endSpan)
+ this.setSpan(this.options.endSpan,
+ $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
+ },
+ setSpan: function(span, range) {
+ if (this.isVertical()) {
+ span.style.top = this.translateToPx(range.start);
+ span.style.height = this.translateToPx(range.end - range.start + this.range.start);
+ } else {
+ span.style.left = this.translateToPx(range.start);
+ span.style.width = this.translateToPx(range.end - range.start + this.range.start);
+ }
+ },
+ updateStyles: function() {
+ this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
+ Element.addClassName(this.activeHandle, 'selected');
+ },
+ startDrag: function(event) {
+ if (Event.isLeftClick(event)) {
+ if (!this.disabled){
+ this.active = true;
+
+ var handle = Event.element(event);
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var track = handle;
+ if (track==this.track) {
+ var offsets = this.track.cumulativeOffset();
+ this.event = event;
+ this.setValue(this.translateToValue(
+ (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
+ ));
+ var offsets = this.activeHandle.cumulativeOffset();
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ } else {
+ // find the handle (prevents issues with Safari)
+ while((this.handles.indexOf(handle) == -1) && handle.parentNode)
+ handle = handle.parentNode;
+
+ if (this.handles.indexOf(handle)!=-1) {
+ this.activeHandle = handle;
+ this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
+ this.updateStyles();
+
+ var offsets = this.activeHandle.cumulativeOffset();
+ this.offsetX = (pointer[0] - offsets[0]);
+ this.offsetY = (pointer[1] - offsets[1]);
+ }
+ }
+ }
+ Event.stop(event);
+ }
+ },
+ update: function(event) {
+ if (this.active) {
+ if (!this.dragging) this.dragging = true;
+ this.draw(event);
+ if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+ Event.stop(event);
+ }
+ },
+ draw: function(event) {
+ var pointer = [Event.pointerX(event), Event.pointerY(event)];
+ var offsets = this.track.cumulativeOffset();
+ pointer[0] -= this.offsetX + offsets[0];
+ pointer[1] -= this.offsetY + offsets[1];
+ this.event = event;
+ this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
+ if (this.initialized && this.options.onSlide)
+ this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
+ },
+ endDrag: function(event) {
+ if (this.active && this.dragging) {
+ this.finishDrag(event, true);
+ Event.stop(event);
+ }
+ this.active = false;
+ this.dragging = false;
+ },
+ finishDrag: function(event, success) {
+ this.active = false;
+ this.dragging = false;
+ this.updateFinished();
+ },
+ updateFinished: function() {
+ if (this.initialized && this.options.onChange)
+ this.options.onChange(this.values.length>1 ? this.values : this.value, this);
+ this.event = null;
+ }
+}); \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js
new file mode 100644
index 000000000..edacf4101
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js
@@ -0,0 +1,59 @@
+// script.aculo.us sound.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Based on code created by Jules Gravinese (http://www.webveteran.com/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+Sound = {
+ tracks: {},
+ _enabled: true,
+ template:
+ new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),
+ enable: function(){
+ Sound._enabled = true;
+ },
+ disable: function(){
+ Sound._enabled = false;
+ },
+ play: function(url){
+ if(!Sound._enabled) return;
+ var options = Object.extend({
+ track: 'global', url: url, replace: false
+ }, arguments[1] || {});
+
+ if(options.replace && this.tracks[options.track]) {
+ $R(0, this.tracks[options.track].id).each(function(id){
+ var sound = DOKUid('sound_'+options.track+'_'+id);
+ sound.Stop && sound.Stop();
+ sound.remove();
+ });
+ this.tracks[options.track] = null;
+ }
+
+ if(!this.tracks[options.track])
+ this.tracks[options.track] = { id: 0 };
+ else
+ this.tracks[options.track].id++;
+
+ options.id = this.tracks[options.track].id;
+ $$('body')[0].insert(
+ Prototype.Browser.IE ? new Element('bgsound',{
+ id: 'sound_'+options.track+'_'+options.id,
+ src: options.url, loop: 1, autostart: true
+ }) : Sound.template.evaluate(options));
+ }
+};
+
+if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){
+ if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1 }))
+ Sound.template = new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>');
+ else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('Windows Media') != -1 }))
+ Sound.template = new Template('<object id="sound_#{track}_#{id}" type="application/x-mplayer2" data="#{url}"></object>');
+ else if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('RealPlayer') != -1 }))
+ Sound.template = new Template('<embed type="audio/x-pn-realaudio-plugin" style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>');
+ else
+ Sound.play = function(){};
+} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js
new file mode 100644
index 000000000..90e97b8d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js
@@ -0,0 +1,568 @@
+// script.aculo.us unittest.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009
+
+// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com)
+// (c) 2005-2009 Michael Schuerig (http://www.schuerig.de/michael/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// experimental, Firefox-only
+Event.simulateMouse = function(element, eventName) {
+ var options = Object.extend({
+ pointerX: 0,
+ pointerY: 0,
+ buttons: 0,
+ ctrlKey: false,
+ altKey: false,
+ shiftKey: false,
+ metaKey: false
+ }, arguments[2] || {});
+ var oEvent = document.createEvent("MouseEvents");
+ oEvent.initMouseEvent(eventName, true, true, document.defaultView,
+ options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY,
+ options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, DOKUid(element));
+
+ if(this.mark) Element.remove(this.mark);
+ this.mark = document.createElement('div');
+ this.mark.appendChild(document.createTextNode(" "));
+ document.body.appendChild(this.mark);
+ this.mark.style.position = 'absolute';
+ this.mark.style.top = options.pointerY + "px";
+ this.mark.style.left = options.pointerX + "px";
+ this.mark.style.width = "5px";
+ this.mark.style.height = "5px;";
+ this.mark.style.borderTop = "1px solid red;";
+ this.mark.style.borderLeft = "1px solid red;";
+
+ if(this.step)
+ alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
+
+ DOKUid(element).dispatchEvent(oEvent);
+};
+
+// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
+// You need to downgrade to 1.0.4 for now to get this working
+// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
+Event.simulateKey = function(element, eventName) {
+ var options = Object.extend({
+ ctrlKey: false,
+ altKey: false,
+ shiftKey: false,
+ metaKey: false,
+ keyCode: 0,
+ charCode: 0
+ }, arguments[2] || {});
+
+ var oEvent = document.createEvent("KeyEvents");
+ oEvent.initKeyEvent(eventName, true, true, window,
+ options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
+ options.keyCode, options.charCode );
+ DOKUid(element).dispatchEvent(oEvent);
+};
+
+Event.simulateKeys = function(element, command) {
+ for(var i=0; i<command.length; i++) {
+ Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
+ }
+};
+
+var Test = {};
+Test.Unit = {};
+
+// security exception workaround
+Test.Unit.inspect = Object.inspect;
+
+Test.Unit.Logger = Class.create();
+Test.Unit.Logger.prototype = {
+ initialize: function(log) {
+ this.log = DOKUid(log);
+ if (this.log) {
+ this._createLogTable();
+ }
+ },
+ start: function(testName) {
+ if (!this.log) return;
+ this.testName = testName;
+ this.lastLogLine = document.createElement('tr');
+ this.statusCell = document.createElement('td');
+ this.nameCell = document.createElement('td');
+ this.nameCell.className = "nameCell";
+ this.nameCell.appendChild(document.createTextNode(testName));
+ this.messageCell = document.createElement('td');
+ this.lastLogLine.appendChild(this.statusCell);
+ this.lastLogLine.appendChild(this.nameCell);
+ this.lastLogLine.appendChild(this.messageCell);
+ this.loglines.appendChild(this.lastLogLine);
+ },
+ finish: function(status, summary) {
+ if (!this.log) return;
+ this.lastLogLine.className = status;
+ this.statusCell.innerHTML = status;
+ this.messageCell.innerHTML = this._toHTML(summary);
+ this.addLinksToResults();
+ },
+ message: function(message) {
+ if (!this.log) return;
+ this.messageCell.innerHTML = this._toHTML(message);
+ },
+ summary: function(summary) {
+ if (!this.log) return;
+ this.logsummary.innerHTML = this._toHTML(summary);
+ },
+ _createLogTable: function() {
+ this.log.innerHTML =
+ '<div id="logsummary"></div>' +
+ '<table id="logtable">' +
+ '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
+ '<tbody id="loglines"></tbody>' +
+ '</table>';
+ this.logsummary = DOKUid('logsummary');
+ this.loglines = DOKUid('loglines');
+ },
+ _toHTML: function(txt) {
+ return txt.escapeHTML().replace(/\n/g,"<br/>");
+ },
+ addLinksToResults: function(){
+ $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
+ td.title = "Run only this test";
+ Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
+ });
+ $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
+ td.title = "Run all tests";
+ Event.observe(td, 'click', function(){ window.location.search = "";});
+ });
+ }
+};
+
+Test.Unit.Runner = Class.create();
+Test.Unit.Runner.prototype = {
+ initialize: function(testcases) {
+ this.options = Object.extend({
+ testLog: 'testlog'
+ }, arguments[1] || {});
+ this.options.resultsURL = this.parseResultsURLQueryParameter();
+ this.options.tests = this.parseTestsQueryParameter();
+ if (this.options.testLog) {
+ this.options.testLog = DOKUid(this.options.testLog) || null;
+ }
+ if(this.options.tests) {
+ this.tests = [];
+ for(var i = 0; i < this.options.tests.length; i++) {
+ if(/^test/.test(this.options.tests[i])) {
+ this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
+ }
+ }
+ } else {
+ if (this.options.test) {
+ this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
+ } else {
+ this.tests = [];
+ for(var testcase in testcases) {
+ if(/^test/.test(testcase)) {
+ this.tests.push(
+ new Test.Unit.Testcase(
+ this.options.context ? ' -> ' + this.options.titles[testcase] : testcase,
+ testcases[testcase], testcases["setup"], testcases["teardown"]
+ ));
+ }
+ }
+ }
+ }
+ this.currentTest = 0;
+ this.logger = new Test.Unit.Logger(this.options.testLog);
+ setTimeout(this.runTests.bind(this), 1000);
+ },
+ parseResultsURLQueryParameter: function() {
+ return window.location.search.parseQuery()["resultsURL"];
+ },
+ parseTestsQueryParameter: function(){
+ if (window.location.search.parseQuery()["tests"]){
+ return window.location.search.parseQuery()["tests"].split(',');
+ };
+ },
+ // Returns:
+ // "ERROR" if there was an error,
+ // "FAILURE" if there was a failure, or
+ // "SUCCESS" if there was neither
+ getResult: function() {
+ var hasFailure = false;
+ for(var i=0;i<this.tests.length;i++) {
+ if (this.tests[i].errors > 0) {
+ return "ERROR";
+ }
+ if (this.tests[i].failures > 0) {
+ hasFailure = true;
+ }
+ }
+ if (hasFailure) {
+ return "FAILURE";
+ } else {
+ return "SUCCESS";
+ }
+ },
+ postResults: function() {
+ if (this.options.resultsURL) {
+ new Ajax.Request(this.options.resultsURL,
+ { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
+ }
+ },
+ runTests: function() {
+ var test = this.tests[this.currentTest];
+ if (!test) {
+ // finished!
+ this.postResults();
+ this.logger.summary(this.summary());
+ return;
+ }
+ if(!test.isWaiting) {
+ this.logger.start(test.name);
+ }
+ test.run();
+ if(test.isWaiting) {
+ this.logger.message("Waiting for " + test.timeToWait + "ms");
+ setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
+ } else {
+ this.logger.finish(test.status(), test.summary());
+ this.currentTest++;
+ // tail recursive, hopefully the browser will skip the stackframe
+ this.runTests();
+ }
+ },
+ summary: function() {
+ var assertions = 0;
+ var failures = 0;
+ var errors = 0;
+ var messages = [];
+ for(var i=0;i<this.tests.length;i++) {
+ assertions += this.tests[i].assertions;
+ failures += this.tests[i].failures;
+ errors += this.tests[i].errors;
+ }
+ return (
+ (this.options.context ? this.options.context + ': ': '') +
+ this.tests.length + " tests, " +
+ assertions + " assertions, " +
+ failures + " failures, " +
+ errors + " errors");
+ }
+};
+
+Test.Unit.Assertions = Class.create();
+Test.Unit.Assertions.prototype = {
+ initialize: function() {
+ this.assertions = 0;
+ this.failures = 0;
+ this.errors = 0;
+ this.messages = [];
+ },
+ summary: function() {
+ return (
+ this.assertions + " assertions, " +
+ this.failures + " failures, " +
+ this.errors + " errors" + "\n" +
+ this.messages.join("\n"));
+ },
+ pass: function() {
+ this.assertions++;
+ },
+ fail: function(message) {
+ this.failures++;
+ this.messages.push("Failure: " + message);
+ },
+ info: function(message) {
+ this.messages.push("Info: " + message);
+ },
+ error: function(error) {
+ this.errors++;
+ this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
+ },
+ status: function() {
+ if (this.failures > 0) return 'failed';
+ if (this.errors > 0) return 'error';
+ return 'passed';
+ },
+ assert: function(expression) {
+ var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
+ try { expression ? this.pass() :
+ this.fail(message); }
+ catch(e) { this.error(e); }
+ },
+ assertEqual: function(expected, actual) {
+ var message = arguments[2] || "assertEqual";
+ try { (expected == actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertInspect: function(expected, actual) {
+ var message = arguments[2] || "assertInspect";
+ try { (expected == actual.inspect()) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertEnumEqual: function(expected, actual) {
+ var message = arguments[2] || "assertEnumEqual";
+ try { $A(expected).length == $A(actual).length &&
+ expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ?
+ this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) +
+ ', actual ' + Test.Unit.inspect(actual)); }
+ catch(e) { this.error(e); }
+ },
+ assertNotEqual: function(expected, actual) {
+ var message = arguments[2] || "assertNotEqual";
+ try { (expected != actual) ? this.pass() :
+ this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertIdentical: function(expected, actual) {
+ var message = arguments[2] || "assertIdentical";
+ try { (expected === actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNotIdentical: function(expected, actual) {
+ var message = arguments[2] || "assertNotIdentical";
+ try { !(expected === actual) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNull: function(obj) {
+ var message = arguments[1] || 'assertNull';
+ try { (obj==null) ? this.pass() :
+ this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertMatch: function(expected, actual) {
+ var message = arguments[2] || 'assertMatch';
+ var regex = new RegExp(expected);
+ try { (regex.exec(actual)) ? this.pass() :
+ this.fail(message + ' : regex: "' + Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertHidden: function(element) {
+ var message = arguments[1] || 'assertHidden';
+ this.assertEqual("none", element.style.display, message);
+ },
+ assertNotNull: function(object) {
+ var message = arguments[1] || 'assertNotNull';
+ this.assert(object != null, message);
+ },
+ assertType: function(expected, actual) {
+ var message = arguments[2] || 'assertType';
+ try {
+ (actual.constructor == expected) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + (actual.constructor) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertNotOfType: function(expected, actual) {
+ var message = arguments[2] || 'assertNotOfType';
+ try {
+ (actual.constructor != expected) ? this.pass() :
+ this.fail(message + ': expected "' + Test.Unit.inspect(expected) +
+ '", actual "' + (actual.constructor) + '"'); }
+ catch(e) { this.error(e); }
+ },
+ assertInstanceOf: function(expected, actual) {
+ var message = arguments[2] || 'assertInstanceOf';
+ try {
+ (actual instanceof expected) ? this.pass() :
+ this.fail(message + ": object was not an instance of the expected type"); }
+ catch(e) { this.error(e); }
+ },
+ assertNotInstanceOf: function(expected, actual) {
+ var message = arguments[2] || 'assertNotInstanceOf';
+ try {
+ !(actual instanceof expected) ? this.pass() :
+ this.fail(message + ": object was an instance of the not expected type"); }
+ catch(e) { this.error(e); }
+ },
+ assertRespondsTo: function(method, obj) {
+ var message = arguments[2] || 'assertRespondsTo';
+ try {
+ (obj[method] && typeof obj[method] == 'function') ? this.pass() :
+ this.fail(message + ": object doesn't respond to [" + method + "]"); }
+ catch(e) { this.error(e); }
+ },
+ assertReturnsTrue: function(method, obj) {
+ var message = arguments[2] || 'assertReturnsTrue';
+ try {
+ var m = obj[method];
+ if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+ m() ? this.pass() :
+ this.fail(message + ": method returned false"); }
+ catch(e) { this.error(e); }
+ },
+ assertReturnsFalse: function(method, obj) {
+ var message = arguments[2] || 'assertReturnsFalse';
+ try {
+ var m = obj[method];
+ if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+ !m() ? this.pass() :
+ this.fail(message + ": method returned true"); }
+ catch(e) { this.error(e); }
+ },
+ assertRaise: function(exceptionName, method) {
+ var message = arguments[2] || 'assertRaise';
+ try {
+ method();
+ this.fail(message + ": exception expected but none was raised"); }
+ catch(e) {
+ ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e);
+ }
+ },
+ assertElementsMatch: function() {
+ var expressions = $A(arguments), elements = $A(expressions.shift());
+ if (elements.length != expressions.length) {
+ this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
+ return false;
+ }
+ elements.zip(expressions).all(function(pair, index) {
+ var element = DOKUid(pair.first()), expression = pair.last();
+ if (element.match(expression)) return true;
+ this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
+ }.bind(this)) && this.pass();
+ },
+ assertElementMatches: function(element, expression) {
+ this.assertElementsMatch([element], expression);
+ },
+ benchmark: function(operation, iterations) {
+ var startAt = new Date();
+ (iterations || 1).times(operation);
+ var timeTaken = ((new Date())-startAt);
+ this.info((arguments[2] || 'Operation') + ' finished ' +
+ iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+ return timeTaken;
+ },
+ _isVisible: function(element) {
+ element = DOKUid(element);
+ if(!element.parentNode) return true;
+ this.assertNotNull(element);
+ if(element.style && Element.getStyle(element, 'display') == 'none')
+ return false;
+
+ return this._isVisible(element.parentNode);
+ },
+ assertNotVisible: function(element) {
+ this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
+ },
+ assertVisible: function(element) {
+ this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
+ },
+ benchmark: function(operation, iterations) {
+ var startAt = new Date();
+ (iterations || 1).times(operation);
+ var timeTaken = ((new Date())-startAt);
+ this.info((arguments[2] || 'Operation') + ' finished ' +
+ iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+ return timeTaken;
+ }
+};
+
+Test.Unit.Testcase = Class.create();
+Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
+ initialize: function(name, test, setup, teardown) {
+ Test.Unit.Assertions.prototype.initialize.bind(this)();
+ this.name = name;
+
+ if(typeof test == 'string') {
+ test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
+ test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
+ this.test = function() {
+ eval('with(this){'+test+'}');
+ }
+ } else {
+ this.test = test || function() {};
+ }
+
+ this.setup = setup || function() {};
+ this.teardown = teardown || function() {};
+ this.isWaiting = false;
+ this.timeToWait = 1000;
+ },
+ wait: function(time, nextPart) {
+ this.isWaiting = true;
+ this.test = nextPart;
+ this.timeToWait = time;
+ },
+ run: function() {
+ try {
+ try {
+ if (!this.isWaiting) this.setup.bind(this)();
+ this.isWaiting = false;
+ this.test.bind(this)();
+ } finally {
+ if(!this.isWaiting) {
+ this.teardown.bind(this)();
+ }
+ }
+ }
+ catch(e) { this.error(e); }
+ }
+});
+
+// *EXPERIMENTAL* BDD-style testing to please non-technical folk
+// This draws many ideas from RSpec http://rspec.rubyforge.org/
+
+Test.setupBDDExtensionMethods = function(){
+ var METHODMAP = {
+ shouldEqual: 'assertEqual',
+ shouldNotEqual: 'assertNotEqual',
+ shouldEqualEnum: 'assertEnumEqual',
+ shouldBeA: 'assertType',
+ shouldNotBeA: 'assertNotOfType',
+ shouldBeAn: 'assertType',
+ shouldNotBeAn: 'assertNotOfType',
+ shouldBeNull: 'assertNull',
+ shouldNotBeNull: 'assertNotNull',
+
+ shouldBe: 'assertReturnsTrue',
+ shouldNotBe: 'assertReturnsFalse',
+ shouldRespondTo: 'assertRespondsTo'
+ };
+ var makeAssertion = function(assertion, args, object) {
+ this[assertion].apply(this,(args || []).concat([object]));
+ };
+
+ Test.BDDMethods = {};
+ $H(METHODMAP).each(function(pair) {
+ Test.BDDMethods[pair.key] = function() {
+ var args = $A(arguments);
+ var scope = args.shift();
+ makeAssertion.apply(scope, [pair.value, args, this]); };
+ });
+
+ [Array.prototype, String.prototype, Number.prototype, Boolean.prototype].each(
+ function(p){ Object.extend(p, Test.BDDMethods) }
+ );
+};
+
+Test.context = function(name, spec, log){
+ Test.setupBDDExtensionMethods();
+
+ var compiledSpec = {};
+ var titles = {};
+ for(specName in spec) {
+ switch(specName){
+ case "setup":
+ case "teardown":
+ compiledSpec[specName] = spec[specName];
+ break;
+ default:
+ var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
+ var body = spec[specName].toString().split('\n').slice(1);
+ if(/^\{/.test(body[0])) body = body.slice(1);
+ body.pop();
+ body = body.map(function(statement){
+ return statement.strip()
+ });
+ compiledSpec[testName] = body.join('\n');
+ titles[testName] = specName;
+ }
+ }
+ new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
+}; \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt
new file mode 100755
index 000000000..5c00e8abd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt
@@ -0,0 +1,31 @@
+EXECUTIVE
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html
@@ -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" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..811b676bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..c1df59a15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..ff6497417
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..9ed390d97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico
new file mode 100755
index 000000000..10ee10936
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png
new file mode 100755
index 000000000..119fe742e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..1001624dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css
new file mode 100755
index 000000000..e34ead879
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css
@@ -0,0 +1,545 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#000 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#000 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#controls :active
+{
+ color: #fff !important;
+}
+
+#controls :focus
+{
+ outline: 1px dotted #227;
+}
+
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #000;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png
new file mode 100755
index 000000000..66cb21ce9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png
new file mode 100755
index 000000000..79ed780d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png
new file mode 100755
index 000000000..340b839bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css
new file mode 100755
index 000000000..c44e23877
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css
@@ -0,0 +1,65 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {
+ width: 100%;
+ top: 0;
+ left: 0;
+}
+
+div#header {
+ top: 0;
+ height: 3em;
+ z-index: 1;
+}
+
+div#footer {
+ top: auto;
+ bottom: 0;
+ height: 2.5em;
+ z-index: 5;
+}
+
+.slide {
+ top: 0;
+ width: 92%;
+ padding: 3.5em 4% 4%;
+ z-index: 2;
+ list-style: none;
+}
+
+div#controls {
+ left: 50%;
+ bottom: 0;
+ width: 50%;
+ z-index: 100;
+}
+
+div#controls form {
+ text-align: right;
+ width: 100%;
+ margin: 0;
+}
+
+#currentSlide {
+ position: absolute;
+ width: 10%;
+ left: 45%;
+ bottom: 1em;
+ z-index: 10;
+}
+
+html>body #currentSlide {
+ position: fixed;
+}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc
new file mode 100755
index 000000000..9ec89fbeb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/drupal/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css
new file mode 100755
index 000000000..5858cf2bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css
@@ -0,0 +1,122 @@
+/* Following are the note styles -- edit away! */
+
+body {
+ margin: 0;
+ padding: 1.0em;
+ background: #333;
+ color: #FFF;
+ font: 2em/1.4em 'Lucida Grande', Verdana, sans-serif;
+}
+
+div.timers {
+ background: #FFF;
+ color: #333;
+ border: 0.08em solid #222;
+ border-top-width: 1px;
+ border-left-width: 1px;
+ float: left;
+ padding: 0.2em;
+ margin: 0 0 0.5em;
+ position: relative;
+}
+
+div.timers h1 {
+ text-align: left;
+ font-size: 0.6em;
+ line-height: 1.4em;
+ background-color: #FF9;
+ padding: 0 0.75em;
+ margin: 0.25em 0 0;
+ border: 1px solid #EE8;
+}
+
+div.timers div.controls {
+ position: absolute;
+ right: 0.25em;
+ top: 0.1em;
+ line-height: 1em;
+}
+
+div.timers h1 a {
+ text-decoration: none;
+ color: #000;
+}
+
+div.timers div.controls a {
+ font-size: 0.5em;
+ padding: 0;
+ color: #330;
+}
+
+div.timers a.control {
+ position: absolute;
+ text-decoration: none;
+ padding: 0 0.25em;
+ color: #AAA;
+ outline: 0;
+}
+
+#minus {
+ left: 0.25em;
+}
+
+#plus {
+ right: 0.25em;
+}
+
+.overtime {
+ background: yellow;
+ color: red;
+ border: 3px solid;
+ padding: 0.1em 0.25em;
+ font-weight: bold;
+}
+
+div.timers h2 {
+ font-size: 0.6em;
+ line-height: 1.0em;
+ font-weight: normal;
+ margin: 0 0 -0.25em;
+ padding-top: 0.5em;
+ color: #666;
+}
+
+div.timers p {margin: 0; padding: 0 0.5em;}
+div.timers form {margin: 0;}
+
+div.timers span.clock {
+ font-family: monospace;
+}
+
+div.timers ul {margin: 0; padding: 0; list-style: none;}
+div.timers li {float: left; width: 5em; margin: 0; padding: 0 0.5em;
+ text-align: center;}
+
+div#elapsed {width: 12.1em;}
+div#remaining {clear: left; width: 12.1em;}
+div#remaining p {text-align: center;}
+
+#slide,
+#next,
+#notes,
+#nextnotes {
+ font-size: 0.75em;
+ line-height: 1.4em;
+ clear: left;
+/* max-width: 30.0em; */
+ text-shadow: 0.1em 0.1em 0.1em #111;
+}
+
+#next {margin-top: 2.5em;}
+#next, #nextnotes {
+ color: #999;
+ font-size: 0.66em;
+}
+
+em.disclaimer {
+ color: #666;
+}
+
+div.collapsed h1 {display: block; font-size: 0.33em;}
+div.collapsed h1 a {display: inline;}
+div.collapsed * {display: none;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css
new file mode 100644
index 000000000..abe2c2659
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css
@@ -0,0 +1,354 @@
+/* Following are the presentation styles -- edit away! */
+
+body {
+ background: #1077BE url(top.png) no-repeat right top;
+ color: #FFF;
+ font-family: "Gill Sans", Optima, "Lucida Grande", Lucida, Verdana, sans-serif;
+ font-size: 2.25em;
+}
+
+:link, :visited {
+ text-decoration: none;
+ color: #62ccff;
+}
+
+#controls :active {
+ color: #88A !important;
+}
+
+#controls :focus {
+ outline: 1px dotted #227;
+}
+
+h1, h2, h3, h4 {
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+ul, pre {
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body {
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q {
+ font-style: italic;
+}
+
+blockquote {
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p {
+ margin: 0;
+}
+
+blockquote i {
+ font-style: normal;
+}
+
+blockquote b {
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i {
+ font-style: italic;
+}
+
+kbd {
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup {
+ font-size: smaller;
+ line-height: 1px;
+}
+
+.slide {
+ background: transparent url(druplicon.png) no-repeat 16px 16px;
+}
+
+.slide code {
+ padding: 2px 0.25em;
+ font-weight: bold;
+ color: white;
+ font-family: "Bitstream Vera Sans Mono", Monaco, "Lucida Console", monospace;
+ background-color: black;
+}
+
+.slide code.bad, code del {
+ color: red;
+}
+
+.slide code.old {
+ color: silver;
+}
+
+.slide pre {
+ font-family: "Bitstream Vera Sans Mono", Monaco, "Lucida Console", monospace;
+ padding: 0;
+ margin: 0.25em 0 0.5em 0.5em;
+ color: #533;
+ font-size: 90%;
+}
+
+.slide pre code {
+ display: block;
+}
+
+.slide ul {
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li {
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul {
+ line-height: 1;
+}
+
+.slide ul ul li {
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader {
+ display: block;
+ margin: 0 auto;
+}
+
+div#header, div#footer {
+ color: #fff;
+ font-family: "Lucida Grande", Lucida, Verdana, sans-serif;
+}
+
+div#header {
+ line-height: 1px;
+}
+
+div#footer {
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+ background: transparent url(bottom.png) repeat-x -546px top;
+}
+
+#footer h1, #footer h2 {
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2 {
+ font-style: italic;
+}
+
+div.long {
+ font-size: 0.75em;
+}
+
+.slide h1 {
+ position: absolute;
+ top: 0.7em;
+ width: 100%;
+ left: 0;
+ text-align: center;
+ z-index: 1;
+ margin: 0;
+ white-space: nowrap;
+ font: bold 150%/1em "Gill Sans", Optima, "Lucida Grande", Lucida, Verdana, sans-serif;
+ text-transform: capitalize;
+ color: #FFF;
+}
+
+.slide h3 {
+ font-size: 130%;
+}
+
+h1 abbr {
+ font-variant: small-caps;
+}
+
+#plink {
+ color: #FFF;
+}
+
+
+#currentSlide {
+ text-align: center;
+ font-size: 0.5em;
+ color: #449;
+}
+
+#slide0 {
+ background: transparent url(across.png) no-repeat;
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1 {
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+ font: bold 3em "Gill Sans", Optima, "Lucida Grande", Lucida, Verdana, sans-serif;
+ white-space: normal;
+ color: #FFF;
+ background-color: transparent;
+}
+
+#slide0 h2 {
+ font: bold italic 1em Helvetica, sans-serif;
+ margin: 0.25em;
+}
+
+#slide0 h3 {
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4 {
+ margin-top: 0;
+ font-size: 1em;
+}
+
+ul.urls {
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li {
+ display: inline;
+ margin: 0;
+}
+
+.note {
+ display: none;
+}
+
+.external {
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external {
+ border-bottom: none;
+}
+
+.external:after {
+ content: " \274F";
+ font-size: smaller;
+ color: #62ccff;
+}
+
+.incremental, .incremental *, .incremental *:after {
+ color: #DDE;
+ visibility: visible;
+}
+
+img.incremental {
+ visibility: hidden;
+}
+
+.slide .current {
+ color: #FB5;
+}
+
+
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css
new file mode 100755
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css
new file mode 100755
index 000000000..ad1530b9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout, .notes {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png
new file mode 100755
index 000000000..9251f8935
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg
new file mode 100644
index 000000000..248743c94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg
new file mode 100644
index 000000000..430d21174
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css
new file mode 100644
index 000000000..0da0ff300
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css
@@ -0,0 +1,168 @@
+/* Flower Theme 2004 by Martin Hense ::: www.lounge7.de */
+
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: #fff url(blume.jpg) no-repeat; color: #222; font-size: 2em;}
+:link, :visited {text-decoration: none;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+pre code {display: block;}
+ul {margin-right: 7%; margin-left: 50px; padding: 0; list-style: circle;}
+li {margin-top: 0.75em; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: disc;}
+img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: transparent; color: #BA9384;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;
+border-top: 1px solid #999999; background: #FFF0CF;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide {
+font-family: georgia, times, 'Times New Roman', serif; background: transparent url(blumerechts.jpg) right top no-repeat;
+}
+.slide h1 {position: absolute; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
+ text-transform: capitalize;
+ top: 35px; left: 60px; color: #4A040A;
+ font: 150%/1em georgia, times, 'Times New Roman', serif;
+ background: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+
+#currentSlide {text-align: center; font-size: 0.5em;
+color: #646587; font-family: Verdana, Helvetica, sans-serif; font-weight: bold;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 1.33em; padding: 0;
+ white-space: normal;
+ color: #000; background: transparent;
+ font: 2em georgia, times, 'Times New Roman', serif;}
+#slide0 h3 {margin-top: 0.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg
new file mode 100755
index 000000000..6da2a0090
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css
new file mode 100644
index 000000000..24b5fb0e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size and place the slide components.
+ Edit them if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; left: 0; z-index: 1;}
+div#footer {top: auto; bottom: 0; width: 100%; z-index: 5;}
+.slide {top: 0; width: 80%; padding: 1em 9% 2em 9%; z-index: 2; height: 100%;}
+
+div#controls {bottom: 1.5em; left: 0; width: 100%; text-align: center; z-index: 1000;}
+div#controls form {margin: 0; padding: 0;}
+
+#currentSlide {position: absolute; left: 0; bottom: 0.5em; z-index: 10;
+ width: 100%; text-align: center;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css
new file mode 100644
index 000000000..80fad55d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css
@@ -0,0 +1,130 @@
+/*
+ Theme: Drupal S5
+*/
+
+html {
+ height: 99%;
+}
+
+body {background: #E5F3FC url('bg-slide.jpg');
+ background-position: bottom left;
+ height: 100%;
+ color: #012C46; font: 32px Arial, sans-serif;}
+a {text-decoration: none; color: #336; border-bottom: 1px dotted;}
+h1, h2, h3, h4, h5, h6 {font-size: 1em; margin: 0;}
+sup {font-size: 0.75em; font-weight: normal;
+ vertical-align: 0.5em; line-height: 1px;}
+ul {margin-left: 1em; padding-left: 0;}
+li {margin-bottom: 0.66em;}
+li li {margin: 0.33em 0; font-size: smaller;}
+
+#header {background: transparent;
+ padding-bottom: 2em;}
+#footer {color: #BBB; border-top: 0px solid #333;}
+#header, #footer {font-size: 0.5em;}
+#footer h1, #footer h2 { padding: 0.5em 0.75em;
+ font-weight: normal;}
+#footer h1 {left: 0; font-size: 1em; letter-spacing: 10px;}
+#footer h2 {position: absolute; bottom: 10; right: 10;}
+
+#navList {margin-top: 3px;}
+
+.slide h1 {font-size: 1.3em; line-height: 1; letter-spacing: -1px;
+ margin: 0 -15% 2em 0; padding: 0.25em 15% 0.06125em 0;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css
new file mode 100644
index 000000000..3b0428edb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, div.slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body div.slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+div.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt
new file mode 100755
index 000000000..f656fa7de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt
@@ -0,0 +1,32 @@
+GORILLA
+(Based on the gorilla icon from the gorilla icon theme by Jakub Steiner)
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html
@@ -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" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..e007d2946
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..20c90e79d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..28e8eee94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..074709b5f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico
new file mode 100755
index 000000000..834bd85a5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png
new file mode 100755
index 000000000..b542561d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..565c6fd87
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css
new file mode 100755
index 000000000..aebdafd61
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css
@@ -0,0 +1,583 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #5d4e3b; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:url(pics/background-head.png) bottom left no-repeat transparent;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#7ea1c9 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #5d4e3b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #5d4e3b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #6b5a45;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif
new file mode 100644
index 000000000..55e1ff95e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js
new file mode 100644
index 000000000..118ae7005
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js
@@ -0,0 +1 @@
+// fixed.js: fix fixed positioning and fixed backgrounds in IE/Win // version 1.8, 08-Aug-2003 // written by Andrew Clover <and@doxdesk.com>, use freely /*@cc_on @if (@_win32 && @_jscript_version>4) var fixed_positions= new Array(); var fixed_backgrounds= new Array(); var fixed_viewport; // Initialisation. Called when the <body> tag arrives. Set up viewport so the // rest of the script knows we're going, and add a measurer div, used to detect // font size changes and measure image sizes for backgrounds later function fixed_init() { fixed_viewport= (document.compatMode=='CSS1Compat') ? document.documentElement : document.body; var el= document.createElement('div'); el.setAttribute('id', 'fixed-measure'); el.style.position= 'absolute'; el.style.top= '0'; el.style.left= '0'; el.style.overflow= 'hidden'; el.style.visibility= 'hidden'; el.style.fontSize= 'xx-large'; el.style.height= '5em'; el.style.setExpression('width', 'fixed_measureFont()'); document.body.insertBefore(el, document.body.firstChild); } // Binding. Called every time an element is added to the document, check it // for fixed features, if found add to our lists and set initial props function fixed_bind(el) { var needLayout= false; var tag= el.tagName.toLowerCase(); var st= el.style; var cst= el.currentStyle; var anc; // find fixed-position elements if (cst.position=='fixed') { needLayout= true; fixed_positions[fixed_positions.length]= el; // store original positioning as we'll overwrite it st.position= 'absolute'; st.fixedPLeft= cst.left; st.fixedPTop= cst.top; st.fixedPRight= cst.right; st.fixedPBottom= cst.bottom; st.fixedPWidth= fixed_parseLength(cst.width); st.fixedPHeight= fixed_parseLength(cst.height); // find element that will act as containing box, for convenience later st.fixedCB= null; for (anc= el; (anc= anc.parentElement).parentElement;) { if (anc.currentStyle.position!='static') { st.fixedCB= anc; break; } } // detect nested fixed positioning (only ancestor need move) st.fixedNest= false; for (anc= el; anc= anc.parentElement;) { if (anc.style.fixedNest!=null) st.fixedNest= true; break; } } // find fixed-background elements (not body/html which IE already gets right) if (cst.backgroundAttachment=='fixed' && tag!='body' && tag!='html') { needLayout= true; fixed_backgrounds[fixed_backgrounds.length]= el; // get background offset, converting from keyword if necessary st.fixedBLeft= fixed_parseLength(cst.backgroundPositionX); st.fixedBTop= fixed_parseLength(cst.backgroundPositionY); // if it's a non-zero %age, need to know size of image for layout if (st.fixedBLeft[1]=='%' || st.fixedBTop[1]=='%') { st.fixedBWidth= 0; st.fixedBHeight= 0; fixed_measureBack(el); } } if (needLayout) fixed_layout(); } // Layout. On every window or font size change, recalculate positioning // Request re-layout at next free moment var fixed_delaying= false; function fixed_delayout() { if (fixed_delaying) return; fixed_delaying= true; window.setTimeout(fixed_layout, 0); } var fixed_ARBITRARY= 200; function fixed_layout() { fixed_delaying= false; if (!fixed_viewport) return; var i, el, st, j, pr, tmp, A= 'auto'; var cb, cbLeft, cbTop, cbRight, cbBottom, oLeft, oTop, oRight, oBottom; var vpWidth=fixed_viewport.clientWidth, vpHeight=fixed_viewport.clientHeight; // calculate initial position for fixed-position elements [black magic] for (i= fixed_positions.length; i-->0;) { el= fixed_positions[i]; st= el.style; // find positioning of containing block cb= st.fixedCB; if (!cb) cb= fixed_viewport; cbLeft= fixed_pageLeft(cb); cbTop= fixed_pageTop(cb); if (cb!=fixed_viewport) { cbLeft+= cb.clientLeft; cbTop+= cb.clientTop; } cbRight= fixed_viewport.clientWidth-cbLeft-cb.clientWidth; cbBottom= fixed_viewport.clientHeight-cbTop-cb.clientHeight; // if size is in %, must recalculate relative to viewport if (st.fixedPWidth[1]=='%') st.width= Math.round(vpWidth*st.fixedPWidth[0]/100)+'px'; if (st.fixedPHeight[1]=='%') st.height= Math.round(vpHeight*st.fixedPHeight[0]/100)+'px'; // find out offset values at max size, to account for margins st.left= A; st.right= '0'; st.top= A; st.bottom= '0'; oRight= el.offsetLeft+el.offsetWidth; oBottom= el.offsetTop+el.offsetHeight; st.left= '0'; st.right= A; st.top= '0'; st.bottom= A; oLeft= el.offsetLeft; oTop= el.offsetTop; // use this to convert all edges to pixels st.left= A; st.right= st.fixedPRight; st.top= A; st.bottom= st.fixedPBottom; oRight-= el.offsetLeft+el.offsetWidth; oBottom-= el.offsetTop+el.offsetHeight; st.left= st.fixedPLeft; st.top= st.fixedPTop; oLeft= el.offsetLeft-oLeft; oTop= el.offsetTop-oTop; // edge positioning fix if (st.fixedPWidth[1]==A && st.fixedPLeft!=A && st.fixedPRight!=A) { tmp= el.offsetLeft; st.left= A; st.width= fixed_ARBITRARY+'px'; tmp= fixed_ARBITRARY+el.offsetLeft-tmp+cbLeft+cbRight; st.left= st.fixedPLeft; st.width= ((tmp<1)?1:tmp)+'px'; } if (st.fixedPHeight[1]==A && st.fixedPTop!=A && st.fixedPBottom!=A) { tmp= el.offsetTop; st.top= A; st.height= fixed_ARBITRARY+'px'; tmp= fixed_ARBITRARY+el.offsetTop-tmp+cbTop+cbBottom; st.top= st.fixedPTop; st.height= ((tmp<1)?1:tmp)+'px'; } // move all non-auto edges relative to the viewport st.fixedCLeft= (st.fixedPLeft=='auto') ? oLeft : oLeft-cbLeft; st.fixedCTop= (st.fixedPTop=='auto') ? oTop : oTop-cbTop; st.fixedCRight= (st.fixedPRight=='auto') ? oRight : oRight-cbRight; st.fixedCBottom= (st.fixedPBottom=='auto') ? oBottom : oBottom-cbBottom; // remove left-positioning of right-positioned elements if (st.fixedPLeft=='auto' && st.fixedPRight!='auto') st.fixedCLeft= 'auto'; if (st.fixedPTop=='auto' && st.fixedPBottom!='auto') st.fixedCTop= 'auto'; } // calculate initial positioning of fixed backgrounds for (i= fixed_backgrounds.length; i-->0;) { el= fixed_backgrounds[i]; st= el.style; tmp= st.fixedBImage; if (tmp) { if (tmp.readyState!='uninitialized') { st.fixedBWidth= tmp.offsetWidth; st.fixedBHeight= tmp.offsetHeight; st.fixedBImage= window.undefined; } } st.fixedBX= fixed_length(el, st.fixedBLeft, vpWidth-st.fixedBWidth); st.fixedBY= fixed_length(el, st.fixedBTop, vpHeight-st.fixedBHeight); } // now call scroll() to set the positions from the values just calculated fixed_scroll(); } // Scrolling. Offset fixed elements relative to viewport scrollness var fixed_lastX, fixed_lastY; var fixed_PATCHDELAY= 300; var fixed_patching= false; // callback function after a scroll, because incorrect scroll position is // often reported first go! function fixed_patch() { fixed_patching= false; var scrollX= fixed_viewport.scrollLeft, scrollY= fixed_viewport.scrollTop; if (scrollX!=fixed_lastX && scrollY!=fixed_lastY) fixed_scroll(); } function fixed_scroll() { if (!fixed_viewport) return; var i, el, st, viewportX, viewportY; var scrollX= fixed_viewport.scrollLeft, scrollY= fixed_viewport.scrollTop; fixed_lastX= scrollX; fixed_lastY= scrollY; // move non-nested fixed-position elements for (i= fixed_positions.length; i-->0;) { st= fixed_positions[i].style; viewportX= (st.fixedNest) ? 0 : scrollX; viewportY= (st.fixedNest) ? 0 : scrollY; if (st.fixedCLeft!='auto') st.left= (st.fixedCLeft+viewportX)+'px'; if (st.fixedCTop!='auto') st.top= (st.fixedCTop+viewportY)+'px'; viewportX= (st.fixedCB==null || st.fixedCB==fixed_viewport) ? 0 : viewportX; viewportY= (st.fixedCB==null || st.fixedCB==fixed_viewport) ? 0 : viewportY; st.right= (st.fixedCRight-viewportX+1)+'px'; st.right= (st.fixedCRight-viewportX)+'px'; st.bottom= (st.fixedCBottom-viewportY+1)+'px'; st.bottom= (st.fixedCBottom-viewportY)+'px'; } // align fixed backgrounds to viewport for (i= fixed_backgrounds.length; i-->0;) { el= fixed_backgrounds[i]; st= el.style; viewportX= scrollX; viewportY= scrollY; while (el.offsetParent) { viewportX-= el.offsetLeft+el.clientLeft; viewportY-= el.offsetTop +el.clientTop; el= el.offsetParent; } st.backgroundPositionX= (st.fixedBX+viewportX)+'px'; st.backgroundPositionY= (st.fixedBY+viewportY)+'px'; } // call back again in a tic if (!fixed_patching) { fixed_patching= true; window.setTimeout(fixed_patch, fixed_PATCHDELAY); } } // Measurement. Load bg-image into an invisible element on the page, when // loaded write the width/height to an element's style for layout use; detect // when font size changes function fixed_measureBack(el) { var measure= document.getElementById('fixed-measure'); var img= document.createElement('img'); img.setAttribute('src', fixed_parseURL(el.currentStyle.backgroundImage)); measure.appendChild(img); el.style.fixedBImage= img; if (img.readyState=='uninitialized') img.attachEvent('onreadystatechange', fixed_measureBackImage_ready); } function fixed_measureBackImage_ready() { var img= event.srcElement; if (img && img.readyState!='uninitialized') { img.detachEvent('onreadystatechange', fixed_measureBackImage_ready); fixed_layout(); } } var fixed_fontsize= 0; function fixed_measureFont() { var fs= document.getElementById('fixed-measure').offsetHeight; if (fixed_fontsize!=fs && fixed_fontsize!=0) fixed_delayout(); fixed_fontsize= fs; return '5em'; } // Utility. General-purpose functions // parse url() to get value inside function fixed_parseURL(v) { v= v.substring(4, v.length-1); if (v.charAt(0)=='"' && v.charAt(v.length-1)=='"' || v.charAt(0)=="'" && v.charAt(v.length-1)=="'") return v.substring(1, v.length-1); else return v; } // parse length or auto or background-position keyword into number and unit var fixed_numberChars= '+-0123456789.'; var fixed_ZERO= new Array(0, 'px'); var fixed_50PC= new Array(50, '%'); var fixed_100PC= new Array(100, '%'); var fixed_AUTO= new Array(0, 'auto'); function fixed_parseLength(v) { var num, i; if (v=='left' || v=='top') return fixed_ZERO; if (v=='right' || v=='bottom') return fixed_100PC; if (v=='center') return fixed_50PC; if (v=='auto') return fixed_AUTO; i= 0; while (i<v.length && fixed_numberChars.indexOf(v.charAt(i))!=-1) i++; num= parseFloat(v.substring(0, i)); if (num==0) return fixed_ZERO; else return new Array(num, v.substring(i)); } // convert parsed (number, unit) into a number of pixels function fixed_length(el, l, full) { var tmp, x; if (l[1]=='px') return l[0]; if (l[1]=='%') return Math.round(full*l[0]/100); // other units - measure by setting position; this is rather inefficient // but then these units are used for background-position so seldom... tmp= el.currentStyle.left; el.style.left= '0'; x= el.offsetLeft; el.style.left= l[0]+l[1]; x= el.offsetLeft-x; el.style.left= tmp; return x; } // convert stupid IE offsetLeft/Top to page-relative values function fixed_pageLeft(el) { var v= 0; while (el.offsetParent) { v+= el.offsetLeft; el= el.offsetParent; } return v; } function fixed_pageTop(el) { var v= 0; while (el.offsetParent) { v+= el.offsetTop; el= el.offsetParent; } return v; } // Scanning. Check document every so often until it has finished loading. Do // nothing until <body> arrives, then call main init. Pass any new elements // found on each scan to be bound var fixed_SCANDELAY= 500; function fixed_scan() { if (!document.body) return; if (!fixed_viewport) fixed_init(); var el; for (var i= 0; i<document.all.length; i++) { el= document.all[i]; if (!el.fixed_bound) { el.fixed_bound= true; fixed_bind(el); } } } var fixed_scanner; function fixed_stop() { window.clearInterval(fixed_scanner); fixed_scan(); } fixed_scan(); fixed_scanner= window.setInterval(fixed_scan, fixed_SCANDELAY); window.attachEvent('onload', fixed_stop); window.attachEvent('onresize', fixed_delayout); window.attachEvent('onscroll', fixed_scroll); @end @*/ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg
new file mode 100644
index 000000000..9be4d3369
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc
new file mode 100644
index 000000000..12a8b89f7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/graphic_support/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png
new file mode 100644
index 000000000..8f911e778
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif
new file mode 100644
index 000000000..132368469
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt
new file mode 100644
index 000000000..2900ef421
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt
@@ -0,0 +1,8 @@
+<!-- style sheet links -->
+<link rel="stylesheet" href="ui/i18n/slides.css" type="text/css" media="projection" id="slideProj" />
+<link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+<link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+<link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+<!-- S5 JS -->
+<script src="ui/default/slides.js" type="text/javascript"></script>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png
new file mode 100644
index 000000000..172c914f6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg
new file mode 100644
index 000000000..6be0296db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css
new file mode 100644
index 000000000..f47a7b5a7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css
@@ -0,0 +1,139 @@
+/*
+ Theme: i18n
+ Eric A. Meyer (http://meyerweb.com/)
+ Theme placed under CC by-sa 2.0 license
+*/
+
+body {background: #95A7D4 url(bg-slide.jpg) 100% 100% no-repeat; color: #210; font: 28px Arial, sans-serif;}
+a {text-decoration: none; color: #336; border-bottom: 1px dotted;}
+h1, h2, h3, h4, h5, h6 {font-size: 1em; margin: 0;}
+sup {font-size: 0.75em; font-weight: normal;
+ vertical-align: 0.5em; line-height: 1px;}
+ul {margin-left: 1em; padding-left: 0;}
+li {margin-bottom: 0.66em;}
+li li {margin: 0.33em 0; font-size: smaller;}
+
+#header {background: url(bg-shade.png); border-bottom: 1px solid #333;
+ padding-bottom: 2em;}
+#footer {background: url(bg-shade.png); color: #BBB; border-top: 1px solid #333;}
+#header, #footer {font-size: 0.5em;}
+#footer h1, #footer h2 { padding: 0.5em 0.75em;
+ font-weight: normal; font-style: italic;}
+#footer h1 {left: 0; font-size: 1em; letter-spacing: 1px;}
+#footer h2 {position: absolute; bottom: 0; right: 0;}
+
+
+#currentSlide {font-size: 0.5em;}
+#currentSlide span {font-size: 13px; color: rgb(49%,47%,66%);}
+#currentSlide #csSep {display: none;}
+#currentSlide #csHere {font-weight: bold;}
+#currentSlide #csHere:before {content: "#"; font-weight: normal;}
+#currentSlide #csTotal:before {content: " of ";}
+
+.slide h1 {font-size: 1.66em; line-height: 1; letter-spacing: -1px;
+ margin: 0 -15% 1em 0; padding: 0.5em 15% 0.06125em 0; border-bottom: 0.06125em solid rgb(90,94,120);}
+#slide0 h1 {border: none; font-size: 2.25em; letter-spacing: 0; margin: 3em 0 1.5em;}
+#slide0 h3 {margin: 0.5em 0 0;}
+#slide0 h4 {margin-top: 0; font-size: smaller;}
+
+.slide .current {color: #003; text-shadow: 0 0 0.25em #9AABD7;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt
new file mode 100755
index 000000000..c4f982126
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt
@@ -0,0 +1,31 @@
+MANDARINA
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html
@@ -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" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..6f68dc67e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..05b3dc503
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..8704104dc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..c5d1ffc64
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..56dfae9e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..da49c8361
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..835c5edfc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..1f9702ada
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico
new file mode 100755
index 000000000..075faddc7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png
new file mode 100755
index 000000000..1db9ca08f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..d759f1576
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css
new file mode 100755
index 000000000..36bfc0a29
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css
@@ -0,0 +1,584 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #fbcd15 url(pics/background-main.png) top left no-repeat;
+ color: #000; font-size: 2em;
+ font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
+/* font-family: Arial, Helvetica, sans-serif; */
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #fff;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:3px solid #f19c12;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#f19c12 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#f19c12 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:3px solid #f19c12 !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #f19c12;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif
new file mode 100644
index 000000000..a57ccb106
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg
new file mode 100644
index 000000000..3c0f13b1e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif
new file mode 100644
index 000000000..fffb08a26
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css
new file mode 100644
index 000000000..1b2107b3f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css
@@ -0,0 +1,166 @@
+/* Pixel Theme 2004 by Martin Hense ::: www.lounge7.de */
+
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: transparent url(pixelbg.gif) repeat-y; color: #08093F; font-size: 1.8em;}
+:link, :visited {text-decoration: none;}
+#controls :active {color: #88A !important;}
+#controls :focus {outline: 1px dotted #227;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+pre code {display: block;}
+ul {margin-right: 7%; margin-left: 50px; list-style: square;}
+li {margin-top: 0.75em; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: #005; color: #646587;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: transparent url(pixelheader.jpg) 0 0 no-repeat; height: 75px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0; border-top: 1px solid #08093F; background: #fff;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {font-style: italic;}
+
+div.long {font-size: 0.75em;}
+.slide {font-family: Verdana, Helvetica, Arial, sans-serif;}
+.slide h1 {position: absolute; z-index: 1;
+ margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;
+ font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;
+ top: 1.4em; left: 2%;
+ color: #08093F; background: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #646587;
+ font-family: Verdana, Helvetica, sans-serif; font-weight: bold;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; white-space: normal;
+ margin: 0; padding: 60px 60px 0 150px; text-align: right;
+ font: bold 2em Helvetica, sans-serif; white-space: normal; height: 281px;
+ color: #fff; background: transparent url(pixelslide0bg.gif) no-repeat;}
+#slide0 h3 {margin-top: 0.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt
new file mode 100755
index 000000000..d09fdc819
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt
@@ -0,0 +1,31 @@
+QUALITY
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html
new file mode 100755
index 000000000..47d9a6b83
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html
@@ -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" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="images/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..e0c18c4fe
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..af3be4e6b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..12d6402ee
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..3d7595d78
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico
new file mode 100755
index 000000000..f1cdf0d62
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png
new file mode 100755
index 000000000..dce12c815
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..2f8795842
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css
new file mode 100755
index 000000000..05d30adaf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css
@@ -0,0 +1,585 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left no-repeat;
+ color: #000; font-size: 2em;
+ font-family: Interstate-LightCondensed, Arial, Helvetica, sans-serif;
+/* font-family: Interstate-RegularCondensed, Arial, Helvetica, sans-serif; */
+/* font-family: Arial, Helvetica, sans-serif; */
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+/* color: #DDE; */
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:100%;
+ width:50px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#a80231 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#a80231 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) top left repeat-x #a70131;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html
new file mode 100644
index 000000000..902901b1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html
@@ -0,0 +1,157 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!-- Do not edit this document! The system will likely break if you do. -->
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Notes</title>
+<style type="text/css" media="all">
+body {
+ margin: 0;
+ padding: 1.0em;
+ background: #333;
+ color: #FFF;
+ font: 2em/1.4em 'Lucida Grande', Verdana, sans-serif;
+}
+div.timers {
+ background: #FFF;
+ color: #333;
+ border: 0.08em solid #222;
+ border-top-width: 1px;
+ border-left-width: 1px;
+ float: left;
+ padding: 0.2em;
+ margin: 0 0 0.5em;
+ position: relative;
+}
+div.timers h1 {
+ text-align: left;
+ font-size: 0.6em;
+ line-height: 1.4em;
+ background-color: #FF9;
+ padding: 0 0.75em;
+ margin: 0.25em 0 0;
+ border: 1px solid #EE8;
+}
+div.timers div.controls {
+ position: absolute;
+ right: 0.25em;
+ top: 0.1em;
+ line-height: 1em;
+}
+div.timers h1 a {
+ text-decoration: none;
+ color: #000;
+}
+div.timers div.controls a {
+ font-size: 0.5em;
+ padding: 0;
+ color: #330;
+}
+div.timers a.control {
+ position: absolute;
+ text-decoration: none;
+ padding: 0 0.25em;
+ color: #AAA;
+ outline: 0;
+}
+a.headctrl {
+ outline: none;
+ text-decoration: none;
+ font-weight: bold;
+}
+#minus {left: 0.25em;}
+#plus {right: 0.25em;}
+.overtime {
+ background: yellow;
+ color: red;
+ border: 3px solid;
+ padding: 0.1em 0.25em;
+ font-weight: bold;
+}
+div.timers h2 {
+ font-size: 0.6em;
+ line-height: 1.0em;
+ font-weight: normal;
+ margin: 0 0 -0.25em;
+ padding-top: 0.5em;
+ color: #666;
+}
+div.timers p {margin: 0; padding: 0 0.5em;}
+div.timers form {margin: 0;}
+div.timers span.clock {font-family: monospace;}
+div.timers ul {margin: 0; padding: 0; list-style: none;}
+div.timers li {float: left; width: 5em; margin: 0; padding: 0 0.5em; text-align: center;}
+div#elapsed {width: 12.1em;}
+div#remaining {clear: left; width: 12.1em;}
+div#remaining p {text-align: center;}
+#slide, #next, #notes, #nextnotes {
+ font-size: 0.75em;
+ line-height: 1.4em;
+ clear: left;
+/* max-width: 30.0em; */
+ text-shadow: 0.1em 0.1em 0.1em #111;
+}
+#next {margin-top: 2.5em;}
+#next, #nextnotes {color: #999; font-size: 0.66em;}
+em.disclaimer {color: #666;}
+div.collapsed h1 {display: block; font-size: 0.33em;}
+div.collapsed h1 a {display: inline;}
+div.collapsed * {display: none;}
+</style>
+<script type="text/javascript">
+// <![CDATA[
+ document.onkeyup = opener.keys;
+ document.onkeypress = opener.trap;
+ document.onclick = opener.clicker;
+// ]]>
+</script>
+</head>
+
+<body onload="opener.s5NotesWindowLoaded=true;" onunload="opener.s5NotesWindowLoaded=false;">
+
+
+<div class="timers" id="elapsed">
+<h1>
+<a href="#" onclick="opener.minimizeTimer('elapsed'); return false;">Elapsed Time</a>
+</h1>
+<ul>
+<li>
+<h2>Presentation</h2>
+<span class="clock" id="elapsed-presentation">00:00:00</span>
+</li>
+<li>
+<h2>Current Slide</h2>
+<span class="clock" id="elapsed-slide">00:00:00</span>
+</li>
+</ul>
+<div class="controls">
+<a href="#reset-elapsed" class="headctrl" onclick="opener.resetElapsedTime(); return false;" title="Reset Elapsed Time">|&lt;</a>
+</div>
+</div>
+
+<div class="timers" id="remaining">
+<h1>
+<a href="#" onclick="opener.minimizeTimer('remaining'); return false;">Remaining Time</a>
+</h1>
+<p>
+<a href="#subtract-remaining" class="control" id="minus" onclick="opener.alterRemainingTime('-5'); return false;" title="Subtract 5 Minutes">-</a>
+<span class="clock" id="timeLeft">00:00:00</span>
+<a href="#add-remaining" class="control" id="plus" onclick="opener.alterRemainingTime('5'); return false;" title="Add 5 Minutes">+</a>
+</p>
+<div class="controls">
+<form action="#" onsubmit="opener.resetRemainingTime(); return false;">
+<input type="text" class="text" id="startFrom" value="0" size="4" maxlength="4" />
+<a href="#toggle-remaining" class="headctrl" onclick="opener.toggleRemainingTime(); return false;" title="Pause/Run Remaining Time">||</a>
+<a href="#reset-remaining" class="headctrl" onclick="opener.resetRemainingTime(); return false;" title="Reset Remaining Time">|&lt;</a>
+</form>
+</div>
+</div>
+
+<h2 id="slide">...</h2>
+<div id="notes"></div>
+
+<h2 id="next">...</h2>
+<div id="nextnotes"></div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg
new file mode 100644
index 000000000..0602a0249
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png
new file mode 100644
index 000000000..5ba8d53db
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png
new file mode 100644
index 000000000..804e16147
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css
new file mode 100644
index 000000000..e54061c3e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css
@@ -0,0 +1,22 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {text-align: right; width: 100%; margin: 0;}
+#currentSlide {position: absolute; width: 12%; left: 44%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png
new file mode 100644
index 000000000..8453dc395
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html
@@ -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" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css
new file mode 100644
index 000000000..c04f5006a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css
@@ -0,0 +1,14 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.hide, .layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #sheet {display: block; visibility: visible; margin: 0; padding: 0;}
+#sheet {float: right; padding: 0.5em;}
+html>body #sheet {position: fixed; top: 0; right: 0;}
+
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em; border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#sheet {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css
new file mode 100644
index 000000000..41a5f5b3d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css
@@ -0,0 +1,162 @@
+/* Following are the presentation styles -- edit away! */
+
+body {background: #FFF url(backgrnd.jpg) repeat fixed; color: #cfc; font-family: 'Comic Sans MS', 'Comic Sans', Arial, Helvetica, sans-serif; font-size: 2.25em;}
+a:link, a:visited {text-decoration: none; color: #F93;}
+a:focus, a:hover {color: #f33 !important;}
+
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+h1 {text-shadow: 0.1em 0.1em 0.1em #363; background-color: transparent;}
+
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+img {border: 0; }
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}
+.slide code.bad, code del {color: red;}
+.slide code.old {color: silver;}
+.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}
+.slide pre code {display: block;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+.slide img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: transparent; color: #AAA; font-family: Verdana, Arial, Helvetica, sans-serif;}
+div#header {background: transparent url(header.png) bottom; line-height: 1px;}
+div#footer {background: transparent url(footer.png) top; color: #fff; font-size: 0.5em; font-weight: bold; padding: 1em 0;}
+#footer h1, #footer h2 {display: block; padding: 0; position:absolute; bottom:0.5em;}
+#footer h1 {left:1em; text-shadow: 0.2em 0.2em #000;}
+#footer h2 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic;}
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ left:0%;
+ background:transparent url(triangle.png) 50% 50% no-repeat;
+ height:456px;
+ width:240px;
+}
+div#logo_bottom
+{
+ position:absolute;
+ bottom:50%;
+ right:0%;
+ background:url(chalks.png) 25% 25% no-repeat;
+ height:20px;
+ width:160px;
+}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.9em; left: 1.25em; z-index: 1; margin: 0; padding: 0.35em 0 0 50px; white-space: nowrap; font: bold 150%/1em 'Comic Sans MS', 'Comic Sans', Verdana, Arial, Helvetica, sans-serif; text-transform: capitalize; color: #DDD; background-color: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #ccc;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 3em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #363; white-space: normal; color: #000; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #F93;}
+
+.incremental, .incremental *, .incremental *:after {color: #2A5A36; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #0F6;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css
new file mode 100644
index 000000000..5affe5da6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css
@@ -0,0 +1,3 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul, p {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;}
+img {page-break-inside: avoid; page-break-after: avoid;}
+/*.slide {page-break-after: always;}*/ body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .hide, .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css
new file mode 100644
index 000000000..8ed9c1e20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css
@@ -0,0 +1,8 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer, html>body div#controls, html>body .slide {position: fixed;}
+.handout, .notes, .hide {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png
new file mode 100644
index 000000000..79a243385
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png
new file mode 100644
index 000000000..e28d6f102
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png
new file mode 100644
index 000000000..063973f7f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png
new file mode 100644
index 000000000..4f3ba14c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css
new file mode 100644
index 000000000..5f0f5daa4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css
@@ -0,0 +1,22 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {text-align: right; width: 100%; margin: 0;}
+#currentSlide {position: absolute; width: 14%; left: 43%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html
@@ -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" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css
new file mode 100644
index 000000000..c04f5006a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css
@@ -0,0 +1,14 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.hide, .layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #sheet {display: block; visibility: visible; margin: 0; padding: 0;}
+#sheet {float: right; padding: 0.5em;}
+html>body #sheet {position: fixed; top: 0; right: 0;}
+
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em; border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#sheet {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png
new file mode 100644
index 000000000..6258f024b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css
new file mode 100755
index 000000000..866b03735
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css
@@ -0,0 +1,163 @@
+/* Following are the presentation styles -- edit away! */
+/* S5 1.3beta7 (29-Mar-2007) advanced version by C. Effenberger */
+
+body {background: #FFF url(backgrnd.png) repeat-x fixed; color: #333; font-family: Georgia, "Times New Roman", Times, serif; font-size: 2.25em;}
+a:link, a:visited {text-decoration: none; color: #F93; text-shadow: 0.1em 0.1em 0.1em #000;}
+a:focus, a:hover {color: #f33 !important;}
+
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+h1 {text-shadow: 0.1em 0.1em 0.1em #333; background-color: transparent;}
+
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+img {border: 0; }
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+.slide code {padding: 2px 0.25em; font-weight: bold; color: green;}
+.slide code.bad, code del {color: red;}
+.slide code.old {color: silver;}
+.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: green; font-size: 90%;}
+.slide pre code {display: block;}
+.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}
+.slide li {margin-top: 0.75em; margin-right: 0;}
+.slide ul ul {line-height: 1;}
+.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+.slide img.leader {display: block; margin: 0 auto;}
+
+div#header, div#footer {background: transparent; color: #AAA; font-family: Verdana, Arial, Helvetica, sans-serif;}
+div#header {line-height: 1px;}
+div#footer {background: transparent url(footer.png) top; color: #fff; font-size: 0.5em; font-weight: bold; padding: 1em 0;}
+#footer h1, #footer h2 {display: block; padding: 0; position:absolute; bottom:0.5em;}
+#footer h1 {left:1em; text-shadow: 0.2em 0.2em #000;}
+#footer h2 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic;}
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ left:0%;
+ background:url(sun.png) 50% 50% no-repeat;
+ height:256px;
+ width:256px;
+}
+div#logo_bottom
+{
+ position:absolute;
+ bottom:50%;
+ right:0%;
+ background:url(bank.png) 50% 50% no-repeat;
+ height:205px;
+ width:138px;
+}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.9em; left: 1.25em; z-index: 1; margin: 0; padding: 0.35em 0 0 50px; white-space: nowrap; font: bold 150%/1em Verdana, Arial, Helvetica, sans-serif; text-transform: capitalize; color: #DDD; background-color: transparent;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: #7BB81B; color: #fff;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 3em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.note {display: none;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #F93;}
+
+.incremental, .incremental *, .incremental *:after {color: #39f; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css
new file mode 100644
index 000000000..5affe5da6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css
@@ -0,0 +1,3 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul, p {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;}
+img {page-break-inside: avoid; page-break-after: avoid;}
+/*.slide {page-break-after: always;}*/ body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .hide, .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css
new file mode 100644
index 000000000..8ed9c1e20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css
@@ -0,0 +1,8 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer, html>body div#controls, html>body .slide {position: fixed;}
+.handout, .notes, .hide {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png
new file mode 100644
index 000000000..f06b1d393
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt
new file mode 100755
index 000000000..db32b3854
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt
@@ -0,0 +1,31 @@
+TANGO
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html
@@ -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" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..c44e44f2c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..713900b92
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..c7e1d71b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico
new file mode 100755
index 000000000..138568ed4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png
new file mode 100755
index 000000000..662b919f1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..4c3a86b44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css
new file mode 100755
index 000000000..8e807b108
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css
@@ -0,0 +1,583 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#7ea1c9 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#7ea1c9 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) top left repeat-x #7ea1c9;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt
new file mode 100755
index 000000000..fb08e2004
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt
@@ -0,0 +1,36 @@
+TANGO-DEVWEB
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Modificaciones a partir del tema TANGO por john Edisson Ortiz Roman (laguaza AT gmail.com)
+
+
+
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html
new file mode 100755
index 000000000..39d8f46ad
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html
@@ -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" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..5b29fb303
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..f36ad1acb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..cb5106987
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico
new file mode 100755
index 000000000..8de7eb42b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png
new file mode 100755
index 000000000..51e5173be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..4c3a86b44
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css
new file mode 100755
index 000000000..8e807b108
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css
@@ -0,0 +1,583 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:200%;
+ width:150px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#7ea1c9 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#7ea1c9 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+/* font: bold 2em Helvetica, sans-serif; */
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #31447b !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) top left repeat-x #7ea1c9;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt
new file mode 100755
index 000000000..5c00e8abd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt
@@ -0,0 +1,31 @@
+EXECUTIVE
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+/ui/default/pics
+
+con el nombre favicon.ico
+
+
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php
new file mode 100755
index 000000000..c920d452b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php
@@ -0,0 +1,102 @@
+<!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="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="ui/default/pics/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+<?php
+$page_owner = elgg_get_page_owner_entity();
+?>
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo" style="background:url(<?php echo $page_owner->getIcon('medium'); ?>) no-repeat;"><!-- NO EDITAR --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..9e49dd625
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..e8b5f9d82
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..ac1708379
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..811b676bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..c1df59a15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..ff6497417
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..9ed390d97
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico
new file mode 100755
index 000000000..10ee10936
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg
new file mode 100644
index 000000000..923639a20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..89a7e4fa2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..1001624dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css
new file mode 100755
index 000000000..a4bddd7fb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css
@@ -0,0 +1,525 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left repeat;
+ color: #000; font-size: 2em;
+/* font-family: Trebuchet MS, Arial, Helvetica, sans-serif; */
+ font-family: Arial, Helvetica, sans-serif;
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+ border-bottom: 1px dotted gray;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+ content: " \274F";
+ font-size: smaller;
+ color: #fff;
+}
+
+.incremental, .incremental *, .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+
+ color: #ffca00;
+ display:block;
+ font-weight:bold;
+ font-family: Arial, Sans-Serif !important;
+ font-size:41.5%;
+ line-height:1.5em;
+ background:#2e3436 url(pics/back_console.png) right bottom no-repeat ;
+ border:5px solid #ccc;
+ padding:1em 1em 1em 1em;
+
+
+}
+
+.slide pre code
+{
+ font-family: Arial, Sans-Serif !important;
+ display:block;
+ margin:0;
+ padding:0;
+}
+
+
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+}
+
+.slide ul ul
+{
+ line-height: 1;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+ list-style: square;
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:5%;
+ right:1%;
+ /*background:url(pics/logo.jpg) no-repeat;*/
+ height:96px;
+ width:96px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#000 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+ height: 10%;
+}
+
+#currentSlide {position:absolute; left: 33%; text-align: right; top: 1%; font-size: 0.75em; width: 54%; height:100px; background-color: transparent; color: #999;}
+
+div#footer {background:#000 url(pics/background-foot.png) top left repeat-x; color: #fff; font-size: 0.5em; font-weight: bold; padding: 1em 0; height: 2%;}
+#footer h1, #footer h2, #footer h3 {display: block; padding: 0; position:absolute; bottom:0.7em;}
+#footer h1 {left:1em; text-shadow: 0.2em 0.2em #000;}
+#footer h2 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic; visibility: hidden;}
+#footer h3 {right:1em; text-shadow: 0.2em 0.2em #000; font-style: italic; visibility: visible;}
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide {padding-top: 2em;}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.3em;
+ left: 0px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 1.2em;
+
+ text-transform: capitalize;
+ color: #fff;
+ background: transparent;
+}
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#controls :active
+{
+ color: #fff !important;
+}
+
+#controls :focus
+{
+ outline: 1px dotted #227;
+}
+
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.rotulo2
+{
+ font-size:200%;
+ text-align:center;
+ font-weight:bolder;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+ margin:0;
+}
+
+/* ========================= */
+/* === TABLAS === */
+/* ========================= */
+
+table
+{
+ background:url(pics/table-background.png) bottom left repeat-x #fff;
+ margin-right:1em;
+ font-size:70%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+table td
+{
+ padding:0.5em;
+ font-size:90%;
+ border:1px solid #d2d7cf !important;
+ border-spacing: 0;
+ text-align:center;
+}
+
+th
+{
+ background:url(pics/table-header.png) bottom left repeat-x #000;
+ color:#fff;
+}
+
+th a
+{
+ color:#fff !important;
+}
+
+
+
+table caption
+{
+ margin-bottom:1em;
+ margin-top:1em;
+ margin-left:-7em;
+
+
+}
+
+
+display-none
+{
+ display:none;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js
new file mode 100644
index 000000000..7cb810d51
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js
@@ -0,0 +1,2846 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+var sectionNames= new Array();
+var sectionTimes= new Array();
+var sectionTitle = "";
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+
+ fd = "";
+ ss = "";
+ at = "";
+ try {
+ for (var dat in sectionNames) {
+ if(dat==snum) sectionTitle = sectionNames[dat];
+ }
+ } catch (exc1) {}
+ try {
+ for (var dat in sectionTimes) {
+ if(dat==snum+1) {
+ playDelay = parseInt(sectionTimes[dat])*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+ }
+ }
+ } catch (exc2) {}
+ var secTitle = sectionTitle;
+ if (secTitle != "") secTitle += "<BR>";
+ cs.innerHTML = secTitle+'<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">' + fd + ss + '<\/span>' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>' +
+ '<span id="csAuto">' + at + '<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt
new file mode 100755
index 000000000..4c601efec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt
@@ -0,0 +1,32 @@
+ULTRAVIOLET
+
+Tema para S5, creado originalmente por jEsuSdA 8)
+http://www.jesusda.com
+
+Más temas en: http://www.jesusda.com/projects/presentaciones_s5
+
+
+
+Para customizar este tema modifica el archivo CSS:
+
+s5-ultraviolet/ui/default/pretty.css
+
+
+
+Los archivos gráficos referentes al tema están en la carpeta:
+
+s5-ultraviolet/ui/default/pics
+
+
+Puedes personalizar el favicon copiando el tuyo en la carpeta:
+
+s5-ultraviolet/images/
+
+con el nombre favicon.ico
+
+
+Te recomiendo que pongas todas las imágenes que uses en tu presentación dentro de esa misma carpteta.
+
+Para cualquier sugerencia e idea, por favor, contacta conmigo a través de mi web. ;)
+
+--jEsuSdA 8) \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif
new file mode 100755
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc
new file mode 100755
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico
new file mode 100755
index 000000000..61ab58a16
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html
new file mode 100755
index 000000000..ffa2037aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html
@@ -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" xml:lang="es" lang="es-es" >
+
+
+<head>
+
+ <title>[Título de la presentación aquí]</title>
+ <!-- metadata -->
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta http-equiv="content-language" content="es" />
+
+ <!--titulo y datos de publicación de la presentación-->
+
+ <meta name="description" content="[Título de la presentación aquí]" />
+
+ <meta name="keywords" content="[keywords aquí]" />
+ <meta name="presdate" content="[Aquí la fecha de publicación en formato aaaammdd]" />
+
+ <meta name="author" lang="es" content="[Nombre del autor de la presentación aquí]" />
+ <meta name="company" content="[Organización del autor de la presentación aquí]" />
+
+ <link rel="shortcut icon" href="images/favicon.ico" />
+
+ <meta name="generator" content="S5" />
+ <meta name="progid" content="quanta+" />
+ <meta name="version" content="S5 · jEsuSdA · 1.1" />
+ <!--Versión adaptada del estandard S5 1.1 por jEsuSdA-->
+
+ <meta name="robots" content="all" />
+
+ <!-- configuration parameters -->
+ <meta name="defaultView" content="slideshow" />
+ <meta name="controlVis" content="hidden" />
+
+ <!-- style sheet links -->
+ <link rel="stylesheet" href="ui/default/slides.css" type="text/css" media="projection" id="slideProj" />
+ <link rel="stylesheet" href="ui/default/outline.css" type="text/css" media="screen" id="outlineStyle" />
+ <link rel="stylesheet" href="ui/default/print.css" type="text/css" media="print" id="slidePrint" />
+ <link rel="stylesheet" href="ui/default/opera.css" type="text/css" media="projection" id="operaFix" />
+
+ <!-- S5 JS -->
+ <script src="ui/default/slides.js" type="text/javascript"></script>
+
+</head>
+
+<body>
+
+ <div class="layout">
+ <div id="controls"><!-- NO EDITAR --></div>
+ <div id="currentSlide"><!-- NO EDITAR --></div>
+
+ <div id="header">
+ <div id="logo"><!-- DO NOT EDIT --></div>
+ </div>
+
+ </div>
+
+ <div id="footer">
+ <h1>[Lugar/Fecha de la presentación aquí]</h1>
+ <h2>[Título de la presentación aquí]</h2>
+ </div>
+
+
+
+
+<div class="presentation">
+
+ <div class="slide">
+ <h1>[Título de la presentación aquí]</h1>
+ <h3>[Nombre del ponente aquí]</h3>
+ <h4>[Datos extra aquí]</h4>
+ </div>
+
+
+ <div class="slide">
+ <h1>[Título de la diapositiva]</h1>
+
+ <ul>
+ <li>[Punto uno]</li>
+ <li>[Punto dos]</li>
+ <li>[Punto tres]</li>
+ <li>[Punto cuatro]</li>
+ <li>[Punto cinco]</li>
+ </ul>
+
+ <div class="handout">
+
+ [Añade aquí cualquier nota o información que desees mostrar en la versión impresa, pero no en la versión en pantalla]
+
+ </div>
+
+ </div>
+ <!--fin slide-->
+
+</div>
+
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..a1de38829
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..d64801d93
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png
Binary files differ
diff --git a/mod/dokuwiki/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
new file mode 100755
index 000000000..7a5ce5971
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png
new file mode 100755
index 000000000..4f466baaf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png
new file mode 100755
index 000000000..77c1eb9bc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png
new file mode 100755
index 000000000..ff68fc4f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png
new file mode 100755
index 000000000..c51f5d675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png
new file mode 100755
index 000000000..0f5e534d5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png
new file mode 100755
index 000000000..09f67dbd9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css
new file mode 100755
index 000000000..ac95cf929
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css
@@ -0,0 +1,543 @@
+/* Following are the presentation styles -- edit away! */
+
+body
+{
+ background: #FFF url(pics/background-main.png) top left no-repeat;
+ color: #000; font-size: 2em;
+ font-family: Trebuchet MS, Arial, Helvetica, sans-serif;
+/* font-family: Arial, Helvetica, sans-serif; */
+
+}
+
+:link, :visited
+{
+ text-decoration: none;
+ color: #00C;
+}
+
+
+
+h1, h2, h3, h4
+{
+ font-size: 100%;
+ margin: 0;
+ padding: 0;
+ font-weight: inherit;
+}
+
+h1 abbr
+{
+ font-variant: small-caps;
+}
+
+ul, pre
+{
+ margin: 0;
+ line-height: 1em;
+}
+
+html, body
+{
+ margin: 0;
+ padding: 0;
+}
+
+blockquote, q
+{
+ font-style: italic;
+}
+
+blockquote
+{
+ padding: 0 2em 0.5em;
+ margin: 0 1.5em 0.5em;
+ text-align: center;
+ font-size: 1em;
+}
+
+blockquote p
+{
+ margin: 0;
+}
+
+blockquote i
+{
+ font-style: normal;
+}
+
+blockquote b
+{
+ display: block;
+ margin-top: 0.5em;
+ font-weight: normal;
+ font-size: smaller;
+ font-style: normal;
+}
+
+blockquote b i
+{
+ font-style: italic;
+}
+
+kbd
+{
+ font-weight: bold;
+ font-size: 1em;
+}
+
+sup
+{
+ font-size: smaller;
+ line-height: 1px;
+}
+
+
+ul.urls
+{
+ list-style: none;
+ display: inline;
+ margin: 0;
+}
+
+.urls li
+{
+ display: inline;
+ margin: 0;
+}
+
+.notes
+{
+ display: none;
+}
+
+.external
+{
+/* border-bottom: 1px dashed #0404cd !important; */
+ border-bottom: 1px dashed #0404cd;
+
+ background:url(pics/link.png) right bottom no-repeat;
+ padding-right:0.5em;
+}
+
+html>body .external
+{
+ border-bottom: none;
+}
+
+.external:after
+{
+
+/* content: " \274F"; */
+ font-size: smaller;
+ color: #8f89c0;
+}
+
+.mail
+{
+ background:url(pics/mail.png) right bottom no-repeat;
+ padding-right:0.8em;
+
+}
+
+.incremental, .incremental * , .incremental *:after
+{
+ color: #fff;
+ visibility: visible;
+ list-style: none !important;
+}
+
+img.incremental
+{
+ visibility: hidden;
+}
+
+.slide .current
+{
+ color: #fff;
+/* visibility: hidden; */
+ /*jesusda añadido */
+}
+
+
+/* ============== */
+/* === SLIDES === */
+/* ============== */
+
+.slide code
+{
+ padding: 2px 0.25em;
+ font-weight: bold;
+ color: #533;
+}
+
+.slide code.bad, code del
+{
+ color: red;
+}
+
+.slide code.old
+{
+ color: silver;
+}
+
+.slide pre
+{
+ padding: 0;
+ margin: 0.25em 0 0.5em 0.5em;
+ color: #533;
+ font-size: 90%;
+}
+
+.slide pre code
+{
+ display: block;
+}
+
+.slide ul
+{
+ margin-left: 5%;
+ margin-right: 7%;
+ margin-top:1em;
+ list-style: disc;
+}
+
+.slide li
+{
+ margin-top: 0.75em;
+ margin-right: 0;
+ list-style-image:url(pics/dot.png);
+}
+
+.slide ul ul
+{
+ line-height: 1.5;
+}
+
+.slide ul ul li
+{
+ margin: .2em;
+ font-size: 85%;
+/* list-style: square; */
+ list-style-image:url(pics/dot2.png);
+
+}
+
+.slide img.leader
+{
+ display: block;
+ margin: 0 auto;
+}
+
+
+/* ========================= */
+/* === HEADER AND FOOTER === */
+/* ========================= */
+
+div#logo
+{
+ position:absolute;
+ top:0%;
+ right:0%;
+ background:url(pics/logo.png) 50% 50% no-repeat;
+ height:250%;
+ width:250px;
+}
+
+div#header, div#footer
+{
+ background: #a80231;
+ color: #FFF;
+}
+
+
+div#header
+{
+ background:#5c3566 url(pics/background-head.png) bottom left repeat-x;
+ line-height: 1px;
+}
+
+div#footer
+{
+ background:#5c3566 url(pics/background-foot.png) top left repeat-x;
+ font-size: 0.5em;
+ font-weight: bold;
+ padding: 1em 0;
+}
+
+
+
+
+
+#footer h1, #footer h2
+{
+ display: block;
+ padding: 0 1em;
+}
+
+#footer h2
+{
+ font-style: italic;
+}
+
+
+
+/* ============== */
+/* === CLASES === */
+/* ============== */
+
+div.long
+{
+ font-size: 0.75em;
+}
+
+.slide h1
+{
+ position: absolute;
+ top: 0.7em;
+ left: 87px;
+ z-index: 1;
+ margin: 0;
+ padding: 0.3em 0 0 50px;
+ white-space: nowrap;
+ font-weight: bold;
+ font-size: 150%/1em;
+
+ text-transform: capitalize;
+ color: #fff;
+
+ background: url(pics/h1icon.png) left bottom no-repeat transparent;
+
+
+}
+
+.slide h2
+{
+ font-size: 130%;
+ color:#5b3566;
+}
+
+
+.slide h3
+{
+ font-size: 130%;
+}
+
+/* ================ */
+/* === CONTROLS === */
+/* ================ */
+
+#currentSlide
+{
+ text-align: center;
+ font-size: 0.6em;
+ font-weight:bold;
+ color: #fff;
+
+}
+
+#slide0
+{
+ padding-top: 3.5em;
+ font-size: 90%;
+}
+
+#slide0 h1
+{
+ position: static;
+ margin: 1em 0 0;
+ padding: 0;
+ /*font: bold 2em Helvetica, sans-serif;*/
+ font-weight: bold;
+ font-size:2em;
+ white-space: normal;
+ color: #000;
+ background: transparent;
+}
+
+#slide0 h2
+{
+ font-weight: bold;
+ font-style: italic;
+ font-size: 1em;
+ margin: 0.25em;
+}
+
+#slide0 h3
+{
+ margin-top: 1.5em;
+ font-size: 1.5em;
+}
+
+#slide0 h4
+{
+ margin-top: 0;
+ font-size: 1em;
+}
+
+/* ================ */
+/* === JESUSDA === */
+/* ================ */
+
+.first-pic
+{
+
+ float:right;
+ margin-top:-2em;
+}
+
+/* ================ */
+
+.align-center
+{
+ text-align:center;
+}
+/* ================ */
+
+.float-left , .left-column
+{
+ float:left !important;
+ width:49% !important;
+}
+
+.float-right , .right-column
+{
+ float:right !important;
+ width:49% !important;
+}
+/* ================ */
+.fullscreen
+{
+ z-index:1000 !important;
+ position:fixed !important;
+ top:0;
+ left:0;
+ width:100% !important;
+ height:100% !important;
+
+ background: #fff url(pics/background-main.png) top left no-repeat;
+
+ text-align:center;
+ margin-left:-1.65em;
+
+}
+
+.fullscreen h1
+{
+ display:none;
+}
+
+.rotulo
+{
+ font-size:800%;
+ text-align:center;
+ margin-top:-0.05em;
+
+}
+
+.align-center img
+{
+ margin:auto;
+ text-align:center;
+}
+
+/* ================ */
+
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css
new file mode 100755
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg
new file mode 100644
index 000000000..bf03b4ece
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif
new file mode 100644
index 000000000..75b945d25
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif
new file mode 100644
index 000000000..5f448a16f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif
new file mode 100644
index 000000000..24f086168
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png
new file mode 100644
index 000000000..4b2864ea2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css
new file mode 100644
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc
new file mode 100644
index 000000000..bba2db756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc
@@ -0,0 +1,42 @@
+<public:component>
+<public:attach event="onpropertychange" onevent="doFix()" />
+
+<script>
+
+// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com
+// Free usage permitted as long as this notice remains intact.
+
+// This must be a path to a blank image. That's all the configuration you need here.
+var blankImg = 'ui/default/blank.gif';
+
+var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
+
+function filt(s, m) {
+ if (filters[f]) {
+ filters[f].enabled = s ? true : false;
+ if (s) with (filters[f]) { src = s; sizingMethod = m }
+ } else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
+}
+
+function doFix() {
+ if ((parseFloat(navigator.userAgent.match(/MSIE (\S+)/)[1]) < 5.5) ||
+ (event && !/(background|src)/.test(event.propertyName))) return;
+
+ if (tagName == 'IMG') {
+ if ((/\.png$/i).test(src)) {
+ filt(src, 'image'); // was 'scale'
+ src = blankImg;
+ } else if (src.indexOf(blankImg) < 0) filt();
+ } else if (style.backgroundImage) {
+ if (style.backgroundImage.match(/^url[("']+(.*\.png)[)"']+$/i)) {
+ var s = RegExp.$1;
+ style.backgroundImage = '';
+ filt(s, 'crop');
+ } else filt();
+ }
+}
+
+doFix();
+
+</script>
+</public:component> \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css
new file mode 100644
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css
new file mode 100644
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css
new file mode 100644
index 000000000..1fe145578
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css
@@ -0,0 +1 @@
+/* Following are the presentation styles -- edit away! */ body {background: #F6EAD2 url(bkgr.jpg) left top no-repeat; color: #000; font-size: 2em;} :link, :visited {text-decoration: none; color: #00C;} #controls :active {color: #88A !important;} #controls :focus {outline: 1px dotted #227;} h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;} ul, pre {margin: 0; line-height: 1em;} html, body {margin: 0; padding: 0;} blockquote, q {font-style: italic;} blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;} blockquote p {margin: 0;} blockquote i {font-style: normal;} blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;} blockquote b i {font-style: italic;} kbd {font-weight: bold; font-size: 1em;} sup {font-size: smaller; line-height: 1px;} .slide code {padding: 2px 0.25em; font-weight: bold; color: #533;} .slide code.bad, code del {color: red;} .slide code.old {color: silver;} .slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;} .slide pre code {display: block;} .slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;} .slide li {margin-top: 0.75em; margin-right: 0;} .slide ul ul {line-height: 1;} .slide ul ul li {margin: .2em; font-size: 85%; list-style: square;} .slide img.leader {display: block; margin: 0 auto;} div#header, div#footer {background: #000; color: #fdf6e7; font-family: Verdana, Helvetica, sans-serif;} div#header {background: #000 url(buzzsaw.gif) left top no-repeat; line-height: 1px;} div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;} #footer h1, #footer h2 {display: block; padding: 0 1em;} #footer h2 {} div.long {font-size: 0.75em;} .slide h1 {position: absolute; top: 0.4em; left: 150px; z-index: 1; margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap; font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize; color: #DDE; background: #000;} .slide h3 {font-size: 130%;} h1 abbr {font-variant: small-caps;} div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;} html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;} #controls #sheet {display: none;} #controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;} #controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;} #controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;} #controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;} #controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;} #controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;} #controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;} #controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;} #controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;} #controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;} #controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;} #controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;} #controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;} #controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;} #controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;} #controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;} #controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;} #controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;} #controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;} #controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;} #controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;} #controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;} #controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;} #controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;} #controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;} #controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;} #controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;} #controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;} #controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;} #controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;} #controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;} #controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;} #controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;} #controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;} #controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;} #controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;} #controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;} #controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;} #controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;} #jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;} #currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;} #guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;} #guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;} #slide0 {padding-top: 3.5em; font-size: 90%;} #slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;} #slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;} #slide0 h3 {margin-top: 1.5em; font-size: 1.5em;} #slide0 h4 {margin-top: 0; font-size: 1em;} ul.urls {list-style: none; display: inline; margin: 0;} .urls li {display: inline; margin: 0;} .external {border-bottom: 1px dotted gray;} html>body .external {border-bottom: none;} .external:after {content: " \274F"; font-size: smaller; color: #999;} .incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;} img.incremental, canvas.incremental {visibility: hidden;} .slide .current {color: #B02;} /* diagnostics li:after {content: " [" attr(class) "]"; color: #F88;} */ table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; } table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; } table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; } table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; } table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; } table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; } table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; } table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; } #soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;} #soundmanager-debug code {font-size: 11px;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css
new file mode 100644
index 000000000..e7a71d145
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul {page-break-inside: avoid; visibility: visible !important;} h1 {page-break-after: avoid;} body {font-size: 12pt; background: white;} * {color: black;} #slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;} #slide0 h3 {margin: 0; padding: 0;} #slide0 h4 {margin: 0 0 0.5em; padding: 0;} #slide0 {margin-bottom: 3em;} h1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;} .extra {background: transparent !important;} div.extra, pre.extra, .example {font-size: 10pt; color: #333;} ul.extra a {font-weight: bold;} p.example {display: none;} #header {display: none;} #footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;} #footer h2, #controls {display: none;} /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * {display: none !important;} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css
new file mode 100644
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css
new file mode 100644
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png
new file mode 100644
index 000000000..daa740c40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png
new file mode 100644
index 000000000..cd590aae9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png
new file mode 100644
index 000000000..cf537a008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png
new file mode 100644
index 000000000..1c2ca4817
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png
new file mode 100644
index 000000000..4b0c923b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png
new file mode 100644
index 000000000..dbea88975
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png
new file mode 100644
index 000000000..0e48413d3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif
new file mode 100644
index 000000000..941489d40
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif
new file mode 100644
index 000000000..af280dea2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png
new file mode 100644
index 000000000..c4d99cd57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png
new file mode 100644
index 000000000..1bfd38790
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png
new file mode 100644
index 000000000..0fdd1c605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png
new file mode 100644
index 000000000..482e4d53e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png
new file mode 100644
index 000000000..e12561fb2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png
new file mode 100644
index 000000000..fb8943c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg
new file mode 100644
index 000000000..49370dbba
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css
new file mode 100755
index 000000000..14d8509e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css
@@ -0,0 +1,23 @@
+/* The following styles size, place, and layer the slide components.
+ Edit these if you want to change the overall slide layout.
+ The commented lines can be uncommented (and modified, if necessary)
+ to help you with the rearrangement process. */
+
+/* target = 1024x768 */
+
+div#header, div#footer, .slide {width: 100%; top: 0; left: 0;}
+div#header {top: 0; height: 3em; z-index: 1;}
+div#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}
+.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2; list-style: none;}
+div#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}
+div#controls form {position: absolute; bottom: 0; right: 0; width: 100%;
+ margin: 0;}
+#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}
+html>body #currentSlide {position: fixed;}
+
+/*
+div#header {background: #FCC;}
+div#footer {background: #CCF;}
+div#controls {background: #BBD;}
+div#currentSlide {background: #FFC;}
+*/
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif
new file mode 100644
index 000000000..cd6910106
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png
new file mode 100644
index 000000000..929dabba1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png
new file mode 100644
index 000000000..4f158d35d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png
new file mode 100644
index 000000000..a7b629995
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png
new file mode 100644
index 000000000..7e299bb50
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png
new file mode 100644
index 000000000..41e12cb15
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png
new file mode 100644
index 000000000..2ffcacae1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png
new file mode 100644
index 000000000..9fe420153
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png
new file mode 100644
index 000000000..2b9f44c4d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png
new file mode 100644
index 000000000..25788124d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png
new file mode 100644
index 000000000..bb4a8ae37
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png
new file mode 100644
index 000000000..c6bfe69fc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css
new file mode 100755
index 000000000..9e9d2a3c5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css
@@ -0,0 +1,7 @@
+/* DO NOT CHANGE THESE unless you really want to break Opera Show */
+.slide {
+ visibility: visible !important;
+ position: static !important;
+ page-break-before: always;
+}
+#slide0 {page-break-before: avoid;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css
new file mode 100755
index 000000000..62db519ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css
@@ -0,0 +1,15 @@
+/* don't change this unless you want the layout stuff to show up in the outline view! */
+
+.layout div, #footer *, #controlForm * {display: none;}
+#footer, #controls, #controlForm, #navLinks, #toggle {
+ display: block; visibility: visible; margin: 0; padding: 0;}
+#toggle {float: right; padding: 0.5em;}
+html>body #toggle {position: fixed; top: 0; right: 0;}
+
+/* making the outline look pretty-ish */
+
+#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}
+#slide0 h1 {padding-top: 1.5em;}
+.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;
+ border-top: 1px solid #888; border-bottom: 1px solid #AAA;}
+#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png
new file mode 100644
index 000000000..2561cb4a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png
new file mode 100644
index 000000000..2fc9c4a4a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png
new file mode 100644
index 000000000..7a7c80ddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css
new file mode 100644
index 000000000..75f69c3f7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css
@@ -0,0 +1,221 @@
+/* Following are the presentation styles -- edit away!
+ Note that the 'body' font size may have to be changed if the resolution is
+ different than expected. */
+
+body {background: #f3f3f3 url(bodybg.gif); color: #000; font-size: 2em; font-family: Verdana, Arial, sans-serif;}
+
+a {
+ color: #c30;
+ text-decoration: none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+:link, :visited {text-decoration: none;}
+#controls :active {color: #333 !important;}
+#controls :focus {outline: none;}
+h1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}
+ul, pre {margin: 0; line-height: 1em;}
+html, body {margin: 0; padding: 0;}
+
+blockquote, q {font-style: italic;}
+blockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}
+blockquote p {margin: 0;}
+blockquote i {font-style: normal;}
+blockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}
+blockquote b i {font-style: italic;}
+
+kbd {font-weight: bold; font-size: 1em;}
+sup {font-size: smaller; line-height: 1px;}
+
+code {padding: 2px 0.25em; font-weight: bold; color: #555;}
+code.bad, code del {color: red;}
+code.old {color: silver;}
+pre {font-size: .7em;
+ margin: 0 auto;
+ background-color: #f3f3f3;
+ border: 1px solid #d5d5d5;
+ width: 80%;
+ padding: 20px;}
+pre code {display: block;}
+pre code span {
+ font-weight: normal;
+ font-size: 0.98em;
+}
+ul {margin-left: 85px; margin-right: 3%; list-style: disc; padding: 0;}
+li {margin-top: 5px; margin-right: 0;}
+ul ul {line-height: 1;}
+ul ul li {margin: .2em; font-size: 85%; list-style: square;}
+p, li {
+ line-height: 1.2;
+}
+img.leader {display: block; margin: 0 auto;}
+
+
+div#header, div#footer {color: #AAB;
+ font-family: Verdana, Helvetica, sans-serif;}
+div#header {background: #f3f3f3 url(head.gif) repeat-x top;
+ line-height: 1px;}
+div#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0; color: #666;}
+#footer h1, #footer h2 {display: block; padding: 0 1em;}
+#footer h2 {margin-top: 0.5em;}
+
+div.long {font-size: 0.75em;}
+.slide h1 {position: absolute; top: 0.8em; left: 0; z-index: 1;
+ margin-left: 85px; padding: 0; white-space: nowrap;
+ font-weight: bold; font-size: 150%; line-height: 1;
+ color: #f3f3f3;}
+.slide h3 {font-size: 130%;}
+h1 abbr {font-variant: small-caps;}
+
+#toggle, #prev, #next {
+ display: block;
+ width: 35px; height: 35px;
+ line-height: 35px;
+ float: left;
+ background: url(button.gif) no-repeat 0 0;
+}
+#toggle {
+
+}
+#next {
+ text-align: left;
+}
+
+#currentSlide {text-align: center; font-size: 0.5em; color: #666; font-weight: bold;}
+#currentSlide span {display: none;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 1.33em; padding: 5px 0 5px 20px;
+ font: bold 2.2em Arial, Verdana, sans-serif; white-space: normal;
+ color: #000; background: transparent url(slide0h1.gif) no-repeat left bottom;
+ text-transform: none; }
+#slide0 h3 {margin-top: 0.3em; font-size: 1.2em;}
+#slide0 h4 {margin:0; font-size: 0.9em;}
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.notes {display: none;}
+
+acronym {
+ font-size: 90%;
+}
+
+div.image {
+ margin: 0 auto;
+ text-align: center;
+ background-color: #f3f3f3;
+ border: 1px solid #000;
+ font-size: 0.66%;
+ width: 400px;
+ padding: 20px;
+}
+
+p {
+ margin-left: 85px;
+}
+
+div.image p, #slide0 p {
+ margin-left: 0;
+}
+
+div#controls {position: absolute; left: 0; bottom: 0; width: 100%; text-align: center; font: bold 1em Verdana, Arial, Helvetica, sans-serif;}
+html>body div#controls {background: transparent; position: fixed; padding: 0; top: auto; text-align: center;}
+#controls #sheet {display: none;}
+#controls #controlForm {height: 32px; width: 100%; text-align: center; vertical-align: middle;}
+#controls #navLinks {border-top: 1px solid #999; overflow: hidden; padding: 0; margin: 0; height: 32px; width: 100%; background-color: #808080; text-align: center; vertical-align: middle; white-space: nowrap;}
+#controls #navLinks ul {margin: 0 auto; padding: 0; height: 32px; width: 500px; white-space: nowrap; text-align: center;}
+#controls #navLinks ul li {list-style: none; display: inline; margin: 0; padding: 0; float: left; height: 32px; width: 32px; text-align: center; background-color: transparent;}
+#controls #navLinks ul li.vr {list-style: none; display: inline; margin: 0px 2px; padding: 0; float: left; height: 32px; width: 1px; text-align: center; background-color: #606060;}
+#controls #navLinks ul li a {margin: 0; padding: 0; float: left; height: 32px; width: 32px; background-color: transparent;}
+
+#controls #navLinks ul li#exit {background: url(exit_link.png) no-repeat top left;}
+#controls #navLinks ul li#exit a:hover {background: url(exit_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#toggle {background: url(toggle_link.png) no-repeat top left;}
+#controls #navLinks ul li#toggle a:hover {background: url(toggle_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#show-notes {background: url(notes_link.png) no-repeat top left;}
+#controls #navLinks ul li#show-notes a:hover {background: url(notes_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#zero {background: url(zero_link.png) no-repeat top left;}
+#controls #navLinks ul li#zero a:hover {background: url(zero_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#prev {background: url(prev_link.png) no-repeat top left;}
+#controls #navLinks ul li#prev a:hover {background: url(prev_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#next {background: url(next_link.png) no-repeat top left;}
+#controls #navLinks ul li#next a:hover {background: url(next_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#last {background: url(last_link.png) no-repeat top left;}
+#controls #navLinks ul li#last a:hover {background: url(last_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#lst {background: url(list_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#fade a.isoff {background: url(fade_link.png) no-repeat top left;}
+#controls #navLinks ul li#fade a.ison {background: url(fade_on.png) no-repeat top right;}
+#controls #navLinks ul li#fade a:hover {background: url(fade_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#audio {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.isoff {background: url(audio_link.png) no-repeat top left;}
+#controls #navLinks ul li#audio a.ison {background: url(audio_on.png) no-repeat top right;}
+#controls #navLinks ul li#audio a:hover {background: url(audio_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#vol {background: url(volume_link.png) no-repeat top left;}
+
+#controls #navLinks ul li#auto a.isoff {background: url(auto_link.png) no-repeat top left;}
+#controls #navLinks ul li#auto a.ison {background: url(auto_on.png) no-repeat top right;}
+#controls #navLinks ul li#auto a:hover {background: url(auto_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#pause a.isoff {background: url(pause_link.png) no-repeat top left;}
+#controls #navLinks ul li#pause a.ison {background: url(pause_on.png) no-repeat top right;}
+#controls #navLinks ul li#pause a:hover {background: url(pause_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#loop a.isoff {background: url(loop_link.png) no-repeat top left;}
+#controls #navLinks ul li#loop a.ison {background: url(loop_on.png) no-repeat top right;}
+#controls #navLinks ul li#loop a:hover {background: url(loop_over.png) no-repeat bottom left;}
+
+#controls #navLinks ul li#del {background: url(delay_link.png) no-repeat top left;}
+
+#jumplist, #volumelist, #delaylist {padding: 0; margin: 0; width: 32px; height: 32px; cursor: n-resize;}
+
+#guru {position: absolute; visibility: visible; left: 0px; top: 0px; padding: 4px; width: 99%; height: auto; text-align: center; background-color: black; z-index: 10;}
+#guru div {border: solid 3px red; padding: 4px; font-family: monospace; font-size: 60%; width: auto; height: auto; color: red; text-align: center;}
+
+/*
+#currentSlide {white-space: nowrap; text-align: center; margin-bottom: -0.5em; font-size: 0.5em; background-color: transparent; color: #999;}
+
+#slide0 {padding-top: 3.5em; font-size: 90%;}
+#slide0 h1 {position: static; margin: 1em 0 0; padding: 0; font: bold 2em Verdana, Arial, Helvetica, sans-serif; font-variant: small-caps; text-shadow: 0.1em 0.1em 0.1em #666; white-space: normal; color: #222; background-color: transparent;}
+#slide0 h2 {font: bold italic 1em Arial, Helvetica, sans-serif; margin: 0.25em;}
+#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}
+#slide0 h4 {margin-top: 0; font-size: 1em;}
+*/
+
+ul.urls {list-style: none; display: inline; margin: 0;}
+.urls li {display: inline; margin: 0;}
+.external {border-bottom: 1px dotted gray;}
+html>body .external {border-bottom: none;}
+.external:after {content: " \274F"; font-size: smaller; color: #999;}
+
+.incremental, .incremental *, .incremental *:after {color: #ccc; visibility: visible;}
+img.incremental, canvas.incremental {visibility: hidden;}
+.slide .current {color: #B02;}
+
+/* diagnostics
+li:after {content: " [" attr(class) "]"; color: #F88;}
+*/
+
+table.piechart, table.barchart, table.linechart { border-spacing: 0.3em 0.15em; }
+table.piechart tr th, table.barchart tr th, table.linechart tr th { white-space: nowrap; }
+table.piechart tr td, table.barchart tr td, table.linechart tr td { vertical-align: top; white-space: nowrap; }
+table.piechart tr td.col, table.barchart tr td.col, table.linechart tr td.col { border-bottom: 1px solid #555; border-right: 1px solid #555; }
+table.fs90 tr td, table.fs90 tr th, div.fs90, pre.fs90, p.fs90 ,ul.fs90 {font-size: 0.9em; }
+table.fs75 tr td, table.fs75 tr th, div.fs75, pre.fs75, p.fs75 ,ul.fs75 {font-size: 0.75em; }
+table.fs66 tr td, table.fs66 tr th, div.fs66, pre.fs66, p.fs66 ,ul.fs66 {font-size: 0.66em; }
+table.fs50 tr td, table.fs50 tr th, div.fs50, pre.fs50, p.fs50 ,ul.fs50 {font-size: 0.5em; }
+
+#soundmanager-debug {position:fixed; top:0px; right:0px; width:30em; height:20em; overflow:auto; border:1px solid red; padding:1em; margin:2em; font-family:"sans serif"; font-size: 12px;color: black; background-color:#f6f6f6; z-index: 100;}
+#soundmanager-debug code {font-size: 11px;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png
new file mode 100644
index 000000000..c31d21350
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png
new file mode 100644
index 000000000..6fef4fa52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css
new file mode 100755
index 000000000..220083260
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css
@@ -0,0 +1 @@
+/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */ .slide, ul { page-break-inside: avoid; visibility: visible !important; } h1 { page-break-after: avoid; } html { width:100%; overflow:hidden; } body { font-size: 12pt; background: white; width:100%; } * { color: black; } #slide0 h1 { font-size: 200%; border: none; margin: 0.5em 0 0.25em; } #slide0 h3 { margin: 0; padding: 0; } #slide0 h4 { margin: 0 0 0.5em; padding: 0; } #slide0 { margin-bottom: 3em; } h1 { border-top: 2pt solid gray; border-bottom: 1px dotted silver; padding:0.2em 0 0.3em 0; } .extra { background: transparent !important; } div.extra, pre.extra, .example { font-size: 10pt; color: #333; } ul.extra a { font-weight: bold; } p.example { display: none; } #header { display: none; } #footer h1 { margin: 0; border-bottom: 1px solid; color: gray; font-style: italic; } #footer h2, #controls { display: none; } div.handout { display:block; border-top: 2px dotted #ccc; background:url(pics/back-handout-print.png) top right no-repeat #fff; min-height:6em; padding-right:6em; margin-bottom:1em; } .slide { display:block; background:url(pics/back-slide-print.png) top right no-repeat #fff; min-height:6em; margin-bottom:1em; } table { display:block; /* display:none; */ font-size:90%; overflow:hidden; margin-top:1em; margin-bottom:1em; } pre , code { margin:0; font-size:1pt; overflow:auto; } img { max-width:100% !important; } /* The following rule keeps the layout stuff out of print. Remove at your own risk! */ .layout, .layout * { display: none !important; } \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css
new file mode 100755
index 000000000..86444e041
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css
@@ -0,0 +1,9 @@
+/* Do not edit or override these styles! The system will likely break if you do. */
+
+div#header, div#footer, div#controls, .slide {position: absolute;}
+html>body div#header, html>body div#footer,
+ html>body div#controls, html>body .slide {position: fixed;}
+.handout {display: none;}
+.layout {display: block;}
+.slide, .hideme, .incremental {visibility: hidden;}
+#slide0 {visibility: visible;}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif
new file mode 100644
index 000000000..886235eb9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css
new file mode 100755
index 000000000..0786d7dbd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css
@@ -0,0 +1,3 @@
+@import url(s5-core.css); /* required to make the slide show run at all */
+@import url(framing.css); /* sets basic placement and size of slide components */
+@import url(pretty.css); /* stuff that makes the slides look better than blah */ \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js
new file mode 100644
index 000000000..510a04c0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js
@@ -0,0 +1,2812 @@
+// S5 1.3beta7 (18-Apr-2007) advanced version by C. Effenberger
+// Please see http://s5.netzgesta.de/ for more information
+// based on S5 v1.2a1 slides.js -- released into the Public Domain
+// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information
+// about all the wonderful and talented contributors to this code!
+// audio extension: soundmanager2 is NOT Public Domain
+// Please see http://www.schillmania.com/projects/soundmanager2/ for information
+
+var undef;
+var slideCSS = '';
+var snum = 0;
+var smax = 1;
+var incpos = 0;
+var number = undef;
+var firstTime = 1;
+var s5mode = true;
+var helpmode = false;
+var defaultView = 'slideshow'; //outline
+var controlVis = 'visible';
+var s5Path = 'lib/plugins/s5reloaded/';
+
+// scalable images extension
+var empx = 0;
+var images = new Array();
+var canvas = new Array();
+var medias = new Array();
+var piecharts = new Array();
+var barcharts = new Array();
+var linecharts = new Array();
+// scalable images extension
+
+// transition extension
+var tranSitions = false;
+var fadeModus = false;
+var fadeDuration = 500;
+var incrDuration = 250;
+var opac = 1;
+var cid = '';
+var nid = '';
+var tid = '';
+var jl = '';
+// transition extension
+
+// autoplay extension
+var autoMatic = false;
+var playLoop = false;
+var playPause = false;
+var autoRun = false;
+var playDelay = 5000;
+var remainDer = 0;
+var incrDelay = 0;
+// autoplay extension
+
+// audio extension
+var sound = new Array();
+var audioSupport = false;
+var audioVolume = 100;
+var audioError = false;
+var swfUnloaded = true;
+var bgSoundItem = 9999;
+var curSoundID = -1;
+// audio extension
+
+// panel extension
+var imgWidth = 32;
+var imgHeight = 32;
+// panel extension
+
+// canvas chart extension
+var canvasSupport = false;
+var ChartData = new Array();
+var colorSlice = new Array();
+var font = document.createElement("img");
+font.setAttribute("src", s5Path+"ui/graphic_support/numeric.png");
+signs = {
+ '0': {sx: 0, sy: 0, sw: 48, sh: 64},
+ '1': {sx: 48, sy: 0, sw: 48, sh: 64},
+ '2': {sx: 96, sy: 0, sw: 48, sh: 64},
+ '3': {sx: 144, sy: 0, sw: 48, sh: 64},
+ '4': {sx: 192, sy: 0, sw: 48, sh: 64},
+ '5': {sx: 240, sy: 0, sw: 48, sh: 64},
+ '6': {sx: 288, sy: 0, sw: 48, sh: 64},
+ '7': {sx: 336, sy: 0, sw: 48, sh: 64},
+ '8': {sx: 384, sy: 0, sw: 48, sh: 64},
+ '9': {sx: 432, sy: 0, sw: 48, sh: 64},
+ '%': {sx: 480, sy: 0, sw: 48, sh: 64},
+ '.': {sx: 528, sy: 0, sw: 24, sh: 64}
+};
+var colorNames= new Array();
+colorNames["black"]="#000000"; colorNames["maroon"]="#800000";
+colorNames["green"]="#008000"; colorNames["olive"]="#808000";
+colorNames["navy"]="#000080"; colorNames["purple"]="#800080";
+colorNames["teal"]="#008080"; colorNames["gray"]="#808080";
+colorNames["silver"]="#C0C0C0"; colorNames["red"]="#FF0000";
+colorNames["lime"]="#00FF00"; colorNames["yellow"]="#FFFF00";
+colorNames["blue"]="#0000FF"; colorNames["fuchsia"]="#FF00FF";
+colorNames["aqua"]="#00FFFF"; colorNames["white"]="#FFFFFF";
+colorNames["aliceblue"]="#F0F8FF"; colorNames["antiquewhite"]="#FAEBD7";
+colorNames["aquamarine"]="#7FFFD4"; colorNames["azure"]="#F0FFFF";
+colorNames["beige"]="#F5F5DC"; colorNames["blueviolet"]="#8A2BE2";
+colorNames["brown"]="#A52A2A"; colorNames["burlywood"]="#DEB887";
+colorNames["cadetblue"]="#5F9EA0"; colorNames["chartreuse"]="#7FFF00";
+colorNames["chocolate"]="#D2691E"; colorNames["coral"]="#FF7F50";
+colorNames["cornflowerblue"]="#6495ED"; colorNames["cornsilk"]="#FFF8DC";
+colorNames["crimson"]="#DC143C"; colorNames["darkblue"]="#00008B";
+colorNames["darkcyan"]="#008B8B"; colorNames["darkgoldenrod"]="#B8860B";
+colorNames["darkgray"]="#A9A9A9"; colorNames["darkgreen"]="#006400";
+colorNames["darkkhaki"]="#BDB76B"; colorNames["darkmagenta"]="#8B008B";
+colorNames["darkolivegreen"]="#556B2F"; colorNames["darkorange"]="#FF8C00";
+colorNames["darkorchid"]="#9932CC"; colorNames["darkred"]="#8B0000";
+colorNames["darksalmon"]="#E9967A"; colorNames["darkseagreen"]="#8FBC8F";
+colorNames["darkslateblue"]="#483D8B"; colorNames["darkslategray"]="#2F4F4F";
+colorNames["darkturquoise"]="#00CED1"; colorNames["darkviolet"]="#9400D3";
+colorNames["deeppink"]="#FF1493"; colorNames["deepskyblue"]="#00BFFF";
+colorNames["dimgray"]="#696969"; colorNames["dodgerblue"]="#1E90FF";
+colorNames["firebrick"]="#B22222"; colorNames["floralwhite"]="#FFFAF0";
+colorNames["forestgreen"]="#228B22"; colorNames["gainsboro"]="#DCDCDC";
+colorNames["ghostwhite"]="#F8F8FF"; colorNames["gold"]="#FFD700";
+colorNames["goldenrod"]="#DAA520"; colorNames["greenyellow"]="#ADFF2F";
+colorNames["honeydew"]="#F0FFF0"; colorNames["hotpink"]="#FF69B4";
+colorNames["indianred"]="#CD5C5C"; colorNames["indigo"]="#4B0082";
+colorNames["ivory"]="#FFFFF0"; colorNames["khaki"]="#F0E68C";
+colorNames["lavender"]="#E6E6FA"; colorNames["lavenderblush"]="#FFF0F5";
+colorNames["lawngreen"]="#7CFC00"; colorNames["lemonchiffon"]="#FFFACD";
+colorNames["lightblue"]="#ADD8E6"; colorNames["lightcoral"]="#F08080";
+colorNames["lightcyan"]="#E0FFFF"; colorNames["lightgoldenrodyellow"]="#FAFAD2";
+colorNames["lightgreen"]="#90EE90"; colorNames["lightgrey"]="#D3D3D3";
+colorNames["lightpink"]="#FFB6C1"; colorNames["lightsalmon"]="#FFA07A";
+colorNames["lightseagreen"]="#20B2AA"; colorNames["lightskyblue"]="#87CEFA";
+colorNames["lightslategray"]="#778899"; colorNames["lightsteelblue"]="#B0C4DE";
+colorNames["lightyellow"]="#FFFFE0"; colorNames["limegreen"]="#32CD32";
+colorNames["linen"]="#FAF0E6"; colorNames["mediumaquamarine"]="#66CDAA";
+colorNames["mediumblue"]="#0000CD"; colorNames["mediumorchid"]="#BA55D3";
+colorNames["ediumpurple"]="#9370D"; colorNames["mediumseagreen"]="#3CB371";
+colorNames["mediumslateblue"]="#7B68EE"; colorNames["mediumspringgreen"]="#00FA9A";
+colorNames["mediumturquoise"]="#48D1CC"; colorNames["mediumvioletred"]="#C71585";
+colorNames["midnightblue"]="#191970"; colorNames["mintcream"]="#F5FFFA";
+colorNames["mistyrose"]="#FFE4E1"; colorNames["moccasin"]="#FFE4B5";
+colorNames["navajowhite"]="#FFDEAD"; colorNames["oldlace"]="#FDF5E6";
+colorNames["olivedrab"]="#6B8E23"; colorNames["orange"]="#FFA500";
+colorNames["orangered"]="#FF4500"; colorNames["orchid"]="#DA70D6";
+colorNames["palegoldenrod"]="#EEE8AA"; colorNames["palegreen"]="#98FB98";
+colorNames["paleturquoise"]="#AFEEEE"; colorNames["palevioletred"]="#DB7093";
+colorNames["papayawhip"]="#FFEFD5"; colorNames["peachpuff"]="#FFDAB9";
+colorNames["peru"]="#CD853F"; colorNames["pink"]="#FFC0CB";
+colorNames["plum"]="#DDA0DD"; colorNames["powderblue"]="#B0E0E6";
+colorNames["rosybrown"]="#BC8F8F"; colorNames["royalblue"]="#4169E1";
+colorNames["saddlebrown"]="#8B4513"; colorNames["salmon"]="#FA8072";
+colorNames["sandybrown"]="#F4A460"; colorNames["seagreen"]="#2E8B57";
+colorNames["seashell"]="#FFF5EE"; colorNames["sienna"]="#A0522D";
+colorNames["skyblue"]="#87CEEB"; colorNames["slateblue"]="#6A5ACD";
+colorNames["slategray"]="#708090"; colorNames["snow"]="#FFFAFA";
+colorNames["springgreen"]="#00FF7F"; colorNames["steelblue"]="#4682B4";
+colorNames["tan"]="#D2B48C"; colorNames["thistle"]="#D8BFD8";
+colorNames["tomato"]="#FF6347"; colorNames["turquoise"]="#40E0D0";
+colorNames["violet"]="#EE82EE"; colorNames["wheat"]="#F5DEB3";
+colorNames["whitesmoke"]="#F5F5F5"; colorNames["yellowgreen"]="#9ACD32";
+var canvas_bgcolor = "";
+var canvas_width = 200;
+var canvas_height = 200;
+var canvas_noshade = 0;
+var canvas_nofill = 0;
+var canvas_noshadow = 0;
+var canvas_htmltext = 0;
+var canvas_imgtext = 0;
+var canvas_notext = 0;
+// canvas chart extension
+
+var s5NotesWindow;
+var s5NotesWindowLoaded = false;
+var previousSlide = 0;
+var presentationStart = new Date();
+var slideStart = new Date();
+
+var countdown = {
+ timer: 0,
+ state: 'pause',
+ start: new Date(),
+ end: 0,
+ remaining: 0
+};
+
+var isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;
+if(isIE) var notIE7 = parseInt(navigator.appVersion) < 7 ? 1 : 0;
+var isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;
+var isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;
+var isS2 = navigator.userAgent.indexOf('Safari') >= 2 ? 1 : 0;
+
+function hasClass(object, className) {
+ if (!object.className) return false;
+ return (object.className.search('(^|\\s)' + className + '(\\s|$)') != -1);
+}
+
+function hasValue(object, value) {
+ if (!object) return false;
+ return (object.search('(^|\\s)' + value + '(\\s|$)') != -1);
+}
+
+function removeClass(object,className) {
+ if (!object || !hasClass(object,className)) return;
+ object.className = object.className.replace(new RegExp('(^|\\s)'+className+'(\\s|$)'), RegExp.$1+RegExp.$2);
+}
+
+function addClass(object,className) {
+ if (!object || hasClass(object, className)) return;
+ if (object.className) {
+ object.className += ' '+className;
+ } else {
+ object.className = className;
+ }
+}
+
+function changeClass(object,className) {
+ if (!object) return;
+ object.firstChild.className = className;
+}
+
+function GetElementsWithClassName(elementName,className) {
+ var allElements = document.getElementsByTagName(elementName);
+ var elemColl = new Array();
+ for (var i = 0; i< allElements.length; i++) {
+ if (hasClass(allElements[i], className)) {
+ elemColl[elemColl.length] = allElements[i];
+ }
+ }
+ return elemColl;
+}
+
+function isParentOrSelf(element, id) {
+ if (element == null || element.nodeName=='BODY') return false;
+ else if (element.id == id) return true;
+ else return isParentOrSelf(element.parentNode, id);
+}
+
+function nodeValue(node) {
+ var result = "";
+ if (node.nodeType == 1) {
+ var children = node.childNodes;
+ for (var i = 0; i < children.length; ++i) {
+ result += nodeValue(children[i]);
+ }
+ }
+ else if (node.nodeType == 3) {
+ result = node.nodeValue;
+ }
+ return(result);
+}
+
+function slideLabel() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var list = document.getElementById('jumplist');
+ smax = slideColl.length;
+ for (var n = 0; n < smax; n++) {
+ var obj = slideColl[n];
+ var did = 'slide' + n.toString();
+ obj.setAttribute('id',did);
+ var otext = '';
+ var menu = obj.firstChild;
+ if (!menu) continue; // to cope with empty slides
+ while (menu && menu.nodeType == 3) {
+ menu = menu.nextSibling;
+ }
+ if (!menu) continue; // to cope with slides with only text nodes
+ var menunodes = menu.childNodes;
+ for (var o = 0; o < menunodes.length; o++) {
+ otext += nodeValue(menunodes[o]);
+ }
+ list.options[list.length] = new Option(n + ' : ' + otext, n);
+ }
+}
+
+function currentSlide() {
+ var cs, at, fd, ss;
+ if (document.getElementById) {
+ cs = document.getElementById('currentSlide');
+ } else {
+ cs = document.currentSlide;
+ }
+ fd = fadeModus?"F":"&ndash;";
+ ss = audioSupport?"S":"&ndash;";
+ at = (autoMatic?(playPause?"||":(playLoop?"&gt;0":"&gt;|")):"&ndash;&ndash;");
+ cs.innerHTML = '<div id="plink" nowrap="nowrap">' +
+ '<span id="csFade">[' + fd + ss + ']<\/span>&nbsp;' +
+ '<span id="csHere"><strong>' + snum + '<\/strong><\/span>' +
+ '<span id="csSep">\/<\/span>' +
+ '<span id="csTotal">' + (smax-1) + '<\/span>&nbsp;' +
+ '<span id="csAuto">[' + at + ']<\/span>' +
+ '<\/div>';
+
+ if (snum == 0) {
+ cs.style.visibility = 'hidden';
+ } else {
+ cs.style.visibility = 'visible';
+ }
+}
+
+function go(step) {
+ if (document.getElementById('slideProj').disabled || step == 0) return;
+ jl = document.getElementById('jumplist');
+ cid = 'slide' + snum;
+ var ce = document.getElementById(cid);
+ if (incrementals[snum].length > 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ removeClass(incrementals[snum][i], 'current');
+ removeClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ if (step != 'j') {
+ snum += step;
+ lmax = smax - 1;
+ if (snum > lmax) snum = lmax;
+ if (snum < 0) snum = 0;
+ }else {
+ snum = parseInt(jl.value);
+ }
+ nid = 'slide' + snum;
+ var ne = document.getElementById(nid);
+ if (!ne) {
+ ne = document.getElementById('slide0');
+ nid = 'slide0';
+ snum = 0;
+ }
+ if (step < 0) {
+ incpos = incrementals[snum].length
+ }else {
+ incpos = 0;
+ }
+ if (incrementals[snum].length > 0 && incpos == 0) {
+ for (var i = 0; i < incrementals[snum].length; i++) {
+ if (hasClass(incrementals[snum][i], 'current')) {
+ incpos = i + 1;
+ }else {
+ addClass(incrementals[snum][i], 'incremental');
+ }
+ }
+ }
+ if (incrementals[snum].length > 0 && incpos > 0) {
+ addClass(incrementals[snum][incpos - 1], 'current');
+ }
+ var guru = document.getElementById('guru');
+ if(guru && snum==0) {
+ guru.style.visibility = 'visible';
+ }else if(guru && snum>0) {
+ guru.style.visibility = 'hidden';
+ }
+ if(tranSitions && s5mode && fadeModus) {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {fadeoutSound(curSoundID,true); } // audio support
+ }
+ changeOpac(0,nid);
+ changeOpac(100,cid);
+ ce.style.visibility = 'visible';
+ shiftOpacity(cid,fadeDuration);
+ window.setTimeout("changeSlides()",fadeDuration);
+ }else {
+ if(curSoundID != getSoundID(nid)) {
+ if(curSoundID == bgSoundItem && !sound[getSoundID(nid)]) {
+ }else {stopSound(curSoundID); } // audio support
+ }
+ ce.style.visibility = 'hidden';
+ if (isOp) location.hash = nid;
+ ne.style.visibility = 'visible';
+ finishSlides();
+ }
+}
+
+function changeSlides() {
+ if(nid != cid) changeOpac(100,cid);
+ document.getElementById(cid).style.visibility = 'hidden';
+ document.getElementById(nid).style.visibility = 'visible';
+ if (isOp) location.hash = nid;
+ shiftOpacity(nid,fadeDuration);
+ window.setTimeout("finishSlides()",fadeDuration);
+}
+
+function finishSlides() {
+ jl.selectedIndex = snum;
+ currentSlide();
+ loadNote();
+ permaLink();
+ number = undef;
+ if(sound[getSoundID(nid)]) {
+ playSound(nid); // audio support
+ }else if(sound[bgSoundItem] && curSoundID != bgSoundItem) {
+ playSound(bgSoundItem); // audio support
+ }
+}
+
+function goTo(target) {
+ if (target >= smax || target == snum) return;
+ go(target - snum);
+}
+
+function subgo(step) {
+ if (step > 0) {
+ removeClass(incrementals[snum][incpos - 1],'current');
+ removeClass(incrementals[snum][incpos], 'incremental');
+ if(tranSitions && s5mode && fadeModus) {
+ if(!incrementals[snum][incpos].id) {
+ var tmp = new Date(); tid = "inc" + String(tmp.getTime());
+ incrementals[snum][incpos].id = tid;
+ }else {
+ tid = incrementals[snum][incpos].id;
+ }
+ if(typeof(incrementals[snum][incpos].src) != "undefined" || incrementals[snum][incpos].getContext) {
+ changeOpac(0,tid);
+ addClass(incrementals[snum][incpos],'current');
+ shiftOpacity(tid,incrDuration);
+ setTimeout("nextInc()",incrDuration);
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ }else {
+ addClass(incrementals[snum][incpos],'current');
+ nextInc();
+ }
+ } else {
+ incpos--;
+ removeClass(incrementals[snum][incpos],'current');
+ addClass(incrementals[snum][incpos], 'incremental');
+ addClass(incrementals[snum][incpos - 1],'current');
+ loadNote();
+ }
+}
+
+function nextInc() {
+ incpos++;
+ loadNote();
+}
+
+function toggle() {
+ var slideColl = GetElementsWithClassName('*','slide');
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ var guru = document.getElementById('guru');
+ if (!slides.disabled) {
+ stopPlay();
+ if(audioSupport && !swfUnloaded) stopAllSounds();
+ slides.disabled = true;
+ outline.disabled = false;
+ s5mode = false;
+ fontSize(1,'em');
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'visible';
+ }
+ if(guru) guru.style.visibility = 'hidden';
+ } else {
+ slides.disabled = false;
+ outline.disabled = true;
+ s5mode = true;
+ fontScale();
+ for (var n = 0; n < smax; n++) {
+ var slide = slideColl[n];
+ slide.style.visibility = 'hidden';
+ }
+ slideColl[snum].style.visibility = 'visible';
+ if(guru && snum==0) guru.style.visibility = 'visible';
+ }
+}
+
+function showHide(action) {
+ var obj = GetElementsWithClassName('*','hideme')[0];
+ switch (action) {
+ case 's':
+ obj.style.visibility = 'visible';
+ break;
+ case 'h':
+ obj.style.visibility = 'hidden';
+ break;
+ case 'k':
+ if (obj.style.visibility != 'visible') {
+ obj.style.visibility = 'visible';
+ } else {
+ obj.style.visibility = 'hidden';
+ }
+ break;
+ }
+}
+
+function keys(key) {
+ if (!key) {
+ key = event;
+ key.which = key.keyCode;
+ }
+ if (helpmode) {
+ dumpHelpReq();
+ return;
+ }
+ if (key.which == 84 && !isOp) {
+ toggle();
+ return;
+ }
+ if (s5mode) {
+ if (autoMatic) {
+ switch (key.which) {
+ case 70: // f/ading on/off
+ switchFade();
+ break;
+ case 83: // s/ound on/off
+ toggleSounds();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 65: // a/utoplay on/off
+ stopPlay();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 80: // p/ause
+ case 32: // spacebar
+ pausePlay();
+ break;
+ }
+ }else {
+ switch (key.which) {
+ case 8: // backspace = HELP
+ createHelpReq();
+ break;
+ case 10: // return
+ case 13: // enter
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ if(number != undef) {
+ goTo(number);
+ break;
+ }
+ case 32: // spacebar
+ case 34: // page down
+ case 39: // rightkey
+ case 40: // downkey
+ if(number != undef) {
+ go(number);
+ } else if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ break;
+ case 33: // page up
+ case 37: // leftkey
+ case 38: // upkey
+ if(number != undef) {
+ go(-1 * number);
+ } else if (!incrementals[snum] || incpos <= 0) {
+ go(-1);
+ } else {
+ subgo(-1);
+ }
+ break;
+ case 65: // a/utoplay
+ startPlay();
+ break;
+ case 72: // h
+ case 36: // home
+ goTo(0);
+ break;
+ case 69: // e
+ case 35: // end
+ goTo(smax-1);
+ break;
+ case 70: // f/ade transitions on/off
+ switchFade();
+ break;
+ case 76: // l/ooping on/off
+ switchLoop();
+ break;
+ case 83: // s/ound support on/off
+ toggleSounds();
+ break;
+ case 27: // escape
+ case 81: // q
+ if(!isOp) byby();
+ break;
+ case 67: // c
+ showHide('k');
+ break;
+ case 78: // n
+ createNotesWindow();
+ break;
+ }
+ if (key.which < 48 || key.which > 57) {
+ number = undef;
+ } else {
+ if (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;
+ if (key.target && isParentOrSelf(key.target, 'controls')) return;
+ number = (((number != undef) ? number : 0) * 10) + (key.which - 48);
+ }
+ }
+ }
+ return false;
+}
+
+function clicker(e) {
+ number = undef;
+ var target;
+ if (window.event) {
+ target = window.event.srcElement;
+ e = window.event;
+ } else {
+ target = e.target;
+ }
+ if (target.href != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;
+ if (!helpmode) {
+ if (!e.which || e.which == 1) {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ } else {
+ subgo(1);
+ }
+ }
+ } else {
+ dumpHelpReq();
+ }
+}
+
+function findSlide(hash) {
+ var target = null;
+ var slides = GetElementsWithClassName('*','slide');
+ for (var i = 0; i < slides.length; i++) {
+ var targetSlide = slides[i];
+ if ( (targetSlide.name && targetSlide.name == hash)
+ || (targetSlide.id && targetSlide.id == hash) ) {
+ target = targetSlide;
+ break;
+ }
+ }
+ while(target != null && target.nodeName != 'BODY') {
+ if (hasClass(target, 'slide')) {
+ return parseInt(target.id.slice(5));
+ }
+ target = target.parentNode;
+ }
+ return null;
+}
+
+function slideJump() {
+ if (window.location.hash == null) return;
+ var sregex = /^#slide(\d+)$/;
+ var matches = sregex.exec(window.location.hash);
+ var dest = null;
+ if (matches != null) {
+ dest = parseInt(matches[1]);
+ } else {
+ dest = findSlide(window.location.hash.slice(1));
+ }
+ if (dest != null)
+ go(dest - snum);
+}
+
+function fixLinks() {
+ var thisUri = window.location.href;
+ thisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);
+ var aelements = document.getElementsByTagName('A');
+ for (var i = 0; i < aelements.length; i++) {
+ var a = aelements[i].href;
+ var slideID = a.match('\#slide[0-9]{1,2}');
+ if ((slideID) && (slideID[0].slice(0,1) == '#')) {
+ var dest = findSlide(slideID[0].slice(1));
+ if (dest != null) {
+ if (aelements[i].addEventListener) {
+ aelements[i].addEventListener("click", new Function("e",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "if (e.preventDefault) e.preventDefault();"), true);
+ } else if (aelements[i].attachEvent) {
+ aelements[i].attachEvent("onclick", new Function("",
+ "if (document.getElementById('slideProj').disabled) return;" +
+ "go("+dest+" - snum); " +
+ "event.returnValue = false;"));
+ }
+ }
+ }
+ }
+}
+
+function externalLinks() {
+ if (!document.getElementsByTagName) return;
+ var anchors = document.getElementsByTagName('a');
+ for (var i=0; i<anchors.length; i++) {
+ var anchor = anchors[i];
+ if (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {
+ anchor.target = '_blank';
+ addClass(anchor,'external');
+ }
+ }
+}
+
+function permaLink() {
+ document.getElementById('plink').href = window.location.pathname + '#slide' + snum;
+}
+
+function createControls() {
+ var controlsDiv = document.getElementById("controls");
+ if (!controlsDiv) return;
+ var hider = ' onmouseover="showHide(\'s\');" onmouseout="showHide(\'h\');"';
+ var hideDiv, hideList = '';
+ if (controlVis == 'hidden') {
+ hideDiv = hider;
+ } else {
+ hideList = hider;
+ }
+ if(isOp) {
+ var str = '';
+ }else {
+ var str = '<a accesskey="t" id="sheet" title="toggle CSS" href="javascript:toggle();">&plusmn;<\/a>';
+ }
+ if(isIE) {
+ var tmp = "move around&xA0;until the color&xA0;change to red!";
+ }else if(isS2) {
+ var tmp = "move around\r\nuntil the color\r\nchange to red!";
+ }else {
+ var tmp = "move around until color change to red!";
+ }
+ if(isIE) {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] for keyboard help!"><ul>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst" style="vertical-align: middle; width: 160px;"><select style="cursor: auto; width: 160px; height: auto;" id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del" style="vertical-align: middle; width: 52px;"><select style="cursor: auto; width: 52px; height: auto;" id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul><\/div><\/form>';
+ }else {
+ controlsDiv.innerHTML = str +
+ '<form action="#" id="controlForm"' + hideDiv + '>' +
+ '<div id="navLinks" title="press [backspace] or double click this area for keyboard help!" ondblclick="createHelpReq();"><ul>' +
+ '<li id="exit"><a href="javascript:byby();" accesskey="q" title="exit Show"><\/a><\/li>' +
+ '<li id="show-notes"><a href="javascript:createNotesWindow();" accesskey="n" title="show Notes"><\/a><\/li>' +
+ '<li id="toggle"><a href="javascript:toggle();" accesskey="t" title="toggle CSS"><\/a><\/li>' +
+ '<li class="vr"><\/li>' +
+ '<li id="zero"><a href="javascript:goTo(0);" accesskey="h" title="goto Start Slide"><\/a><\/li>' +
+ '<li id="prev"><a href="javascript:go(-1);" accesskey="y" title="previous Slide"><\/a><\/li>' +
+ '<li id="next"><a href="javascript:go(1);" accesskey="x" title="next Slide"><\/a><\/li>' +
+ '<li id="last"><a href="javascript:goTo(smax-1);" accesskey="e" title="goto Last Slide"><\/a><\/li>' +
+ '<li id="lst"><a id="list" style="cursor:wait;" title="' + tmp + '"><\/a><select id="jumplist" title="select named Slide" onchange="go(\'j\');"><\/select><\/li>' +
+ '<li id="fadeLinks" class="vr"><\/li>' +
+ '<li id="fade"><a class="isoff" href="javascript:switchFade();" accesskey="f" title="Transions"><\/a><\/li>' +
+ '<li id="audioLinks" class="vr"><\/li>' +
+ '<li id="audio"><a class="isoff" href="javascript:toggleSounds();" accesskey="s" title="Sounds" ><\/a><\/li>' +
+ '<li id="vol"><a id="volume" style="cursor:wait;" title="' + tmp + '"><\/a><select id="volumelist" title="select Volume" onchange="setVolume();"><option value="100">100<\/option><option value="90">90<\/option><option value="80">80<\/option><option value="70">70<\/option><option value="60">60<\/option><option value="50">50<\/option><option value="40">40<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="10">10<\/option><option value="0">0<\/option><\/select><\/li>' +
+ '<li id="autoLinks" class="vr"><\/li>' +
+ '<li id="auto"><a class="isoff" href="javascript:togglePlay();" accesskey="a" title="Auto Play"><\/a><\/li>' +
+ '<li id="pause"><a class="isoff" href="javascript:pausePlay();" accesskey="p" title="Pause"><\/a><\/li>' +
+ '<li id="loop"><a class="isoff" href="javascript:switchLoop();" accesskey="l" title="Loop"><\/a><\/li>' +
+ '<li id="del"><a id="delay" style="cursor:wait;" title="' + tmp + '"><\/a><select id="delaylist" title="select Delay" onchange="setDelay();"><option value="90">90<\/option><option value="75">75<\/option><option value="60">60<\/option><option value="45">45<\/option><option value="30">30<\/option><option value="20">20<\/option><option value="15">15<\/option><option value="10">10<\/option><option value="5">5<\/option><\/select><\/li>' +
+ '<\/ul>' +
+ '<a href="http://s5.netzgesta.de" target="_blank" title="S5 Reloaded"><img style="position: absolute; right: 0; bottom: 0;" src="data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAgCAYAAAASYli2AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAYpSURBVHjaYvz//z8DOYCRkZEZRAEx0Ij/f2HiAAHEgqYIpACkkB1J7g8Q/wLRIJ1QNSB5fiDmAOLvQKHPQPoHSB4ggFiQDGMCUnxALAPECkAsBLIdiD8A8SMgfghU8wlqkTgQK1ZVVWldv3792fr16y8D+c9AhgMEECPIy1DDRIDYAojdzMzMWNXV1UG2/v/y5Qvzw4cPP587d24/kH8Gar/uwoULQ+/cufNFXFyciZmZ+UVmZuZKoFmvAQII5kJOIDbi4uKK2Llz53EbG5vP6GGWn5+vMWnSpJtA5jcg5v327Rtnc3PzfSD79+rVq2WBNBtIHUAAwQzkAWKzBQsWnIUZFhISovXmzZsfkpKSDD09PY8kJCR+QtWCguGvrKwsz7Rp07Q4ODh+srCwgILiH0gSIIBgBrICsUBoaCgorBiANgqvXbtWDMg8AcQf9+7d+x0o9xbI/gJV/3fVqlUvmJiY/gIdcaWhoYETahEDQADBDPwNxO9h3gNpBiq6f/HiRbWjR4+yvnr16grQNbeh6kCWsxkYGIhClT8yNDQUgyYhBoAAYoIKfgXi06mpqUowQ+vr6x+uW7fu0suXL8+uWbOGS0BAwB7kC6jXvqmoqLDIyclxzZo1S4udnR2WtBgAAggWyyCXSgOxZUxMjGpWVtY7S0vLr8iRsnnzZl4/P7/DQCYoYtSA2DApKUkVGNNPDh06dBrIvwU06xNAAMEM5AIKqAOxCjQsmHl5eXWdnJx4N2zYcB4prd4CUpfwJRuAAGJCimULoGYpbm5uZ5DBnz9/5tq4caPWkSNHeJEc+g0aTFzfv3/nACabjzk5OW8FBQVloLmHASCAYJECUiTg7+//HJiQTzY2NsrfvXv3n7m5+T5YMgJGEkjDS2gY/pKRkeHt7Ow0Bsb0v9+/fz+HxTJAAMG8DHKFLTC9aRUXF79BT9Qgw4CWHAAy70FdYgjEDgkJCTpWVlYMQBfeAaaMPqBZbwECCGYgMzQGQSleCehS0X///jEDvf9lxYoVoOTyAIjfANX+BqrlBrL1gLFf09vb+0FaWvoHMBctA6USUKQABBAjrPiCliKg7AOKIG5ougLlju9Ipc1foDJWqMWGhYWFtsBg4RISEnrg5uY2BWQgQACxIBkGMkQKijmRfPwXWuI8ASp7DQ1vEP4DDO8PwBzzDJheT0CLPQaAAEJOh0o8zAzeihwMiv+gGZ0B4sz/bIwM797/YTh1/wfDIWj5qAfMmtFnzpz5ICIiwqKoqPgjKChoOtCs5wABhJyXpUCGzddgOIethJ71jEFi1nNwgQrKz8zv37//097eDop15qVLl0pAzWAACCAWhEMYOJFdduELA++b3wxsTIwMfzmYGH6xMDG8gYYpKAg+cnJy/gB6VwuYZFiA7E+wvAwQQCy46ozexwzG17+BYx6UVE4B8Vmo68CRFR0dDQo3UAHBBUwJ4lCLGAACCNnAv4zQxAkCxbIMZ0EuBIYb98EPDFo3voGTzjOogVzArGf969cvNmC2+wssHD7BDAQIIBakmHwPDPy3MAMNeBhgpfbbVEkGhqQbDJaXvjI8BPJB4jz79u37DcwlP+fPn38NuTwECCBkA1+8+8Nwtusxg+STHwwcP/8z8EuwMXA1KjBcBSlwEmRgBhrID/U2O7QMBIEHxsbGkrAwBAggmIGgNMT64AfDWyB+By0EQMVZlC0/wwsXQYa38hzgCGGBWv5ZU1OT4c+fP8yLFi1SA3r5Haw8BAggmIGg5KBpJ8BgeOYTg8S3f2DN/OxMDNwgw0AKnv0EJ+avsITu7u6+EZqzQEHwHFqaMwAEEAtShS/pLcTwrU+Z4QwsyQANOwIL06tfGV5BqwmQWoGKigoLYJnJvWPHjhstLS169vb2M0DqAAIIVh6CXHT/9ndIawEUITCXgUDrQwbGbe8YjkJdAzZQVVVV/t69e8LAgtUYaNgxWKQABBByacMHzfTK9gIMYkBZpj//GT4c+8gAKm1AsfseqPYPtHTXAtaEacBqlgHoyq+srKw3XV1dFwHlvwEEECNyYwmp3cIJjbUf0DbLP7RGEg+0bcMCjQxQzH8BWQgQQIzktr5wAYAAYmKgMgAIMAAp8Fx3osz1lgAAAABJRU5ErkJggg==" width="20" height="32" alt="S5" \/><\/a>' +
+ '<\/div><\/form>';
+ }
+ if (controlVis == 'hidden') {
+ var hidden = document.getElementById('navLinks');
+ } else {
+ var hidden = document.getElementById('jumplist');
+ }
+ addClass(hidden,'hideme');
+}
+
+function fontScale() { // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers
+ if (!s5mode && !isOp) return false;
+ var hScreen = screen.width; var vScreen = screen.height;
+ var vWindow = window.outerHeight; var hWindow = window.outerWidth;
+ if (isOp && s5mode && defaultView=='slideshow' && ((hScreen != hWindow) || (vScreen != vWindow))) {
+ toggle();
+ return false;
+ }
+ if (isOp && !s5mode && ((hScreen != hWindow) || (vScreen != vWindow))) return false;
+ if (isOp && !s5mode && (hScreen == hWindow) && (vScreen == vWindow)) toggle();
+ var vScale = 48; // both yield 16 (the usual browser default) at 1024x768
+ var hScale = 64; // perhaps should auto-calculate based on theme's declared value?
+ if (window.innerHeight) {
+ var vSize = window.innerHeight;
+ var hSize = window.innerWidth;
+ } else if (document.documentElement.clientHeight) {
+ var vSize = document.documentElement.clientHeight;
+ var hSize = document.documentElement.clientWidth;
+ } else if (document.body.clientHeight) {
+ var vSize = document.body.clientHeight;
+ var hSize = document.body.clientWidth;
+ } else {
+ var vSize = 700; // assuming 1024x768, minus chrome and such equals 8:5
+ var hSize = 1024; // these do not account for kiosk mode or Opera Show
+ }
+ var newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));
+ extendImgSizes(newSize); // scalable images extension
+ extendCanSizes(newSize); // scalable canvas extension
+ extendObjSizes(newSize); // scalable object extension
+ fontSize(newSize,"px");
+ if(!isS2 || firstTime==0) {
+ generateCanvas(); // dynamic canvas extension
+ }
+ if (isGe) { // hack to counter incremental reflow bugs
+ var obj = document.getElementsByTagName('body')[0];
+ obj.style.visibility = 'hidden';
+ obj.style.display = 'none';
+ obj.style.display = 'block';
+ obj.style.visibility = 'visible';
+ changeOpac(100,'slide' + snum);
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("fixReflow()",10);
+ }else {
+ setListPos(); // invisible select extension
+ }
+}
+
+function fixReflow() {
+ shiftOpacity('slide' + snum,10);
+ window.setTimeout("finishReflow()",10);
+}
+function finishReflow() {
+ setListPos(); // invisible select extension
+}
+
+function fontSize(val,fmt) {
+ var value = val + fmt;
+ if (!(s5ss = document.getElementById('s5ss'))) {
+ if (!document.createStyleSheet) {
+ document.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));
+ s5ss.setAttribute('media','screen, projection');
+ s5ss.setAttribute('id','s5ss');
+ } else {
+ document.createStyleSheet();
+ document.s5ss = document.styleSheets[document.styleSheets.length - 1];
+ }
+ }
+ if (!(document.s5ss && document.s5ss.addRule)) {
+ while (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);
+ s5ss.appendChild(document.createTextNode('html {font-size: ' + value + ' !important;}'));
+ } else {
+ document.s5ss.addRule('html','font-size: ' + value + ' !important;');
+ }
+}
+
+function windowChange() {
+ fontScale();
+}
+
+function notOperaFix() {
+ slideCSS = document.getElementById('slideProj').href;
+ var slides = document.getElementById('slideProj');
+ var outline = document.getElementById('outlineStyle');
+ slides.setAttribute('media','screen');
+ outline.disabled = true;
+ if (isGe) {
+ slides.setAttribute('href','null'); // Gecko fix
+ slides.setAttribute('href',slideCSS); // Gecko fix
+ }
+ if ((isIE && notIE7) && document.styleSheets && document.styleSheets[0]) {
+ document.styleSheets[0].addRule('img', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('div', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ document.styleSheets[0].addRule('.slide', 'behavior: url('+s5Path+'ui/graphic_support/iepngfix.htc)');
+ }
+}
+
+function getIncrementals(obj) {
+ var incrementals = new Array();
+ if (!obj)
+ return incrementals;
+ var children = obj.childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (hasClass(child, 'incremental')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'incremental');
+ for (var j = 0; j < child.childNodes.length; j++) {
+ if (child.childNodes[j].nodeType == 1) {
+ addClass(child.childNodes[j], 'incremental');
+ }
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ removeClass(child,'incremental');
+ }
+ }
+ if (hasClass(child, 'show-first')) {
+ if (child.nodeName == 'OL' || child.nodeName == 'UL') {
+ removeClass(child, 'show-first');
+ if (child.childNodes[isGe].nodeType == 1) {
+ removeClass(child.childNodes[isGe], 'incremental');
+ }
+ } else {
+ incrementals[incrementals.length] = child;
+ }
+ }
+ incrementals = incrementals.concat(getIncrementals(child));
+ }
+ return incrementals;
+}
+
+function createIncrementals() {
+ var incrementals = new Array();
+ for (var i = 0; i < smax; i++) {
+ incrementals[i] = getIncrementals(document.getElementById('slide'+i));
+ }
+ return incrementals;
+}
+
+function trap(e) {
+ if (!e) {
+ e = event;
+ e.which = e.keyCode;
+ }
+ try {
+ modifierKey = e.ctrlKey || e.altKey || e.metaKey;
+ }
+ catch(e) {
+ modifierKey = false;
+ }
+ return modifierKey || e.which == 0;
+}
+
+// notes extension
+function noteLabel() { // Gives notes id's to match parent slides
+ var notes = GetElementsWithClassName('div','notes');
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ var id = 'note' + note.parentNode.id.substring(5);
+ note.setAttribute('id',id);
+ }
+ resetElapsedSlide();
+ resetRemainingTime();
+ window.setInterval('updateElaspedTime()', 1000);
+}
+
+function createNotesWindow() { // creates a window for our notes
+ if (!s5NotesWindow || s5NotesWindow.closed) { // Create the window if it doesn't exist
+ s5NotesWindowLoaded = false;
+ // Note: Safari has a tendency to ignore window options preferring to default to the settings of the parent window, grr.
+ s5NotesWindow = window.open(s5Path+'ui/s5-notes.html', 's5NotesWindow', 'top=0,left=0');
+ }
+ if (s5NotesWindowLoaded) { // Load the current note if the Note HTML has loaded
+ loadNote();
+ } else { // Keep trying...
+ window.setTimeout('createNotesWindow()', 50);
+ }
+}
+
+function loadNote() {
+// Loads a note into the note window
+ var notes = nextNotes = '<em class="disclaimer">There are no notes for this slide.</em>';
+ if (document.getElementById('note' + snum)) {
+ notes = document.getElementById('note' + snum).innerHTML;
+ }
+ if (document.getElementById('note' + (snum + 1))) {
+ nextNotes = document.getElementById('note' + (snum + 1)).innerHTML;
+ }
+
+ var jl = document.getElementById('jumplist');
+ var slideTitle = jl.options[jl.selectedIndex].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex) ? ' (' + jl.selectedIndex + '/' + (smax - 1) + ')' : '');
+ if (incrementals[snum].length > 0) {
+ slideTitle += ' <small>[' + incpos + '/' + incrementals[snum].length + ']</small>';
+ }
+ if (jl.selectedIndex < smax - 1) {
+ var nextTitle = jl.options[jl.selectedIndex + 1].text.replace(/^\d+\s+:\s+/, '') + ((jl.selectedIndex + 1) ? ' (' + (jl.selectedIndex + 1) + '/' + (smax - 1) + ')' : '');
+ } else {
+ var nextTitle = '[end of slide show]';
+ }
+
+ if (s5NotesWindow && !s5NotesWindow.closed && s5NotesWindow.document) {
+ s5NotesWindow.document.getElementById('slide').innerHTML = slideTitle;
+ s5NotesWindow.document.getElementById('notes').innerHTML = notes;
+ s5NotesWindow.document.getElementById('next').innerHTML = nextTitle;
+ s5NotesWindow.document.getElementById('nextnotes').innerHTML = nextNotes;
+ }
+ resetElapsedSlide();
+}
+
+function minimizeTimer(id) {
+ var obj = s5NotesWindow.document.getElementById(id);
+ if (hasClass(obj,'collapsed')) {
+ removeClass(obj,'collapsed');
+ } else {
+ addClass(obj,'collapsed');
+ }
+}
+
+function resetElapsedTime() {
+ presentationStart = new Date();
+ slideStart = new Date();
+ updateElaspedTime();
+}
+
+function resetElapsedSlide() {
+ if (snum != previousSlide) {
+ slideStart = new Date();
+ previousSlide = snum;
+ updateElaspedTime();
+ }
+}
+
+function updateElaspedTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var now = new Date();
+ var ep = s5NotesWindow.document.getElementById('elapsed-presentation');
+ var es = s5NotesWindow.document.getElementById('elapsed-slide');
+ ep.innerHTML = formatTime(now.valueOf() - presentationStart.valueOf());
+ es.innerHTML = formatTime(now.valueOf() - slideStart.valueOf());
+}
+
+function resetRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var startField = s5NotesWindow.document.getElementById('startFrom');
+ startFrom = readTime(startField.value);
+ countdown.remaining = startFrom * 60000; // convert to msecs
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var timeLeft = formatTime(countdown.remaining);
+ tl.innerHTML = timeLeft;
+}
+
+function updateRemainingTime() {
+ if (!s5NotesWindowLoaded || !s5NotesWindow || s5NotesWindow.closed) return;
+ var tl = s5NotesWindow.document.getElementById('timeLeft');
+ var now = new Date();
+ if (countdown.state == 'run') {
+ countdown.remaining = countdown.end - now;
+ }
+ tl.style.color = '';
+ tl.style.backgroundColor = '';
+ if (countdown.remaining >= 0) {
+ var timeLeft = formatTime(countdown.remaining);
+ removeClass(tl,'overtime');
+ if (countdown.remaining < 300000) {
+ tl.style.color = 'rgb(' + (255-Math.round(countdown.remaining/2000)) + ',0,0)';
+ tl.style.backgroundColor = 'rgb(255,255,' + (Math.round(countdown.remaining/2000)) + ')';
+ }
+ } else {
+ var timeLeft = '-' + formatTime(-countdown.remaining);
+ addClass(tl,'overtime');
+ }
+ tl.innerHTML = timeLeft;
+}
+
+function toggleRemainingTime() {
+ if (countdown.state == 'pause') countdown.state = 'run'; else countdown.state = 'pause';
+ if (countdown.state == 'pause') {
+ window.clearInterval(countdown.timer);
+ }
+ if (countdown.state == 'run') {
+ countdown.start = new Date().valueOf();
+ countdown.end = countdown.start + countdown.remaining;
+ countdown.timer = window.setInterval('updateRemainingTime()', 1000);
+ }
+}
+
+function alterRemainingTime(amt) {
+ var change = amt * 60000; // convert to msecs
+ countdown.end += change;
+ countdown.remaining += change;
+ updateRemainingTime();
+}
+
+function formatTime(msecs) {
+ var time = new Date(msecs);
+
+ var hrs = time.getUTCHours() + ((time.getUTCDate() -1) * 24); // I doubt anyone will spend more than 24 hours on a presentation or single slide but just in case...
+ hrs = (hrs < 10) ? '0'+hrs : hrs;
+ if (hrs == 'NaN' || isNaN(hrs)) hrs = '--';
+
+ var min = time.getUTCMinutes();
+ min = (min < 10) ? '0'+min : min;
+ if (min == 'NaN' || isNaN(min)) min = '--';
+
+ var sec = time.getUTCSeconds();
+ sec = (sec < 10) ? '0'+sec : sec;
+ if (sec == 'NaN' || isNaN(sec)) sec = '--';
+
+ return hrs + ':' + min + ':' + sec;
+}
+
+function readTime(val) {
+ var sregex = /:/;
+ var matches = sregex.exec(val);
+ if (matches == null) {
+ return val;
+ } else {
+ var times = val.split(':');
+ var hours = parseInt(times[0]);
+ var mins = parseInt(times[1]);
+ var total = (hours * 60) + mins;
+ return total;
+ }
+}
+// notes extension
+
+// startup process
+function createSlideShow() {
+ defaultCheck();
+ if(!isIE) createDetector(); // (degrade IE) scalable images extension
+ if(opac!=0 || isIE) { // &&!isIE (degrade IE)
+ tranSitions = false;
+ fadeModus = false;
+ }
+ if(tranSitions && document.getElementById && document.createElement){
+ createProgress();
+ var nop=document.getElementById('StartupControl');
+ nop.onload = dumpProgress;
+ }else {
+ startup();
+ showAll();
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+ }
+}
+
+function defaultCheck() {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'defaultView') {
+ defaultView = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'controlVis') {
+ controlVis = allMetas[i].content;
+ }
+ if (allMetas[i].name == 'tranSitions') {
+ tranSitions = (allMetas[i].content == "true") ? true : false;
+ fadeModus = (tranSitions == true) ? true : false;
+ }
+ if (allMetas[i].name == 'fadeDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ fadeDuration = Math.max(200,Math.min(tmp,2000));
+ }
+ if (allMetas[i].name == 'incrDuration') {
+ var tmp = parseInt(allMetas[i].content);
+ incrDuration = Math.max(50,Math.min(tmp,500));
+ }
+ if (allMetas[i].name == 'autoMatic') {
+ autoMatic = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playLoop') {
+ playLoop = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'playDelay') {
+ var tmp = parseInt(allMetas[i].content);
+ playDelay = Math.max(5,Math.min(tmp,90))*1000;
+ playDelay = (fadeModus == true) ? (playDelay+(2*fadeDuration)) : playDelay;
+ }
+ if (allMetas[i].name == 'audioSupport') {
+ audioSupport = (allMetas[i].content == "true") ? true : false;
+ }
+ if (allMetas[i].name == 'audioVolume') {
+ var tmp = parseInt(allMetas[i].content);
+ audioVolume = Math.max(0,Math.min(tmp,100));
+ }
+ if (allMetas[i].name == 'audioError') {
+ audioError = (allMetas[i].content == "true") ? true : false;
+ }
+ }
+}
+
+function createProgress() {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "StartupProgress";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=100)";
+ }else {
+ pg.style.opacity = 1.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/progress.gif)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+
+ var im = document.createElement('img');
+ im.id = "StartupControl";
+ im.src = s5Path+"ui/graphic_support/blank.gif?" + new Date().valueOf();
+ document.getElementsByTagName("body")[0].appendChild(im);
+}
+
+function startup() {
+ createControls(); // hallvord
+ slideLabel();
+ incrementals = createIncrementals();
+ noteLabel(); // [SI:060104] must follow slideLabel()
+ loadNote();
+ fixLinks();
+ externalLinks();
+ fontScale();
+ if (!isOp) {
+ if(isIE) {
+ document.getElementById('lst').style.backgroundImage = 'none';
+ document.getElementById('del').style.backgroundImage = 'none';
+ }else {
+ document.getElementById('audio').style.backgroundImage = 'none';
+ }
+ notOperaFix();
+ }else if(isOp) {
+ var obj = document.getElementById('exit');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('exit').style.opacity = 0.5;
+ obj = document.getElementById('toggle');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('toggle').style.opacity = 0.5;
+ document.getElementById('jumplist').style.visibility = 'hidden';
+ document.getElementById('list').style.visibility = 'hidden';
+ document.getElementById('lst').style.opacity = 0.5;
+ obj = document.getElementById('audio');
+ obj.firstChild.style.visibility = 'hidden';
+ document.getElementById('audio').style.opacity = 0.5;
+ document.getElementById('volumelist').style.visibility = 'hidden';
+ document.getElementById('volume').style.visibility = 'hidden';
+ document.getElementById('vol').style.opacity = 0.5;
+ document.getElementById('delaylist').style.visibility = 'hidden';
+ document.getElementById('delay').style.visibility = 'hidden';
+ document.getElementById('del').style.opacity = 0.5;
+ }
+ slideJump();
+ if (defaultView == 'outline') toggle();
+ document.onkeyup = keys;
+ document.onkeypress = trap;
+ document.onclick = clicker;
+}
+
+function preloadImgages() {
+ var temp = '';
+ var objects = document.getElementsByTagName('img');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].src != '') {
+ temp = new Image();
+ temp.src = objects[i].src;
+ }
+ }
+}
+
+function showAll() {
+ var obj1 = GetElementsWithClassName('div','presentation')[0];
+ if(!obj1) var obj1 = GetElementsWithClassName('ol','presentation')[0];
+ var obj2 = GetElementsWithClassName('div','layout')[0];
+ if(!obj1){}else {obj1.style.display = 'block'};
+ if(!obj2){}else {obj2.style.display = 'block'};
+}
+
+function dumpProgress() {
+ document.body.removeChild(document.getElementById('StartupControl'));
+ startup();
+ preloadImgages();
+ showAll();
+ createSoundManagerScript();
+ shiftOpacity('StartupProgress',1000);
+ window.setTimeout("removeProgress()",1000);
+}
+
+function removeProgress() {
+ document.body.removeChild(document.getElementById('StartupProgress'));
+ setListPos(true); // invisible select extension
+ panelSetup();
+ audioSetup(); // audio extension
+ if(isS2 && firstTime>=1) {
+ generateCanvas(); // dynamic canvas extension
+ } firstTime = 0;
+}
+function panelSetup() {
+ if(playPause) {
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ if(playLoop) {
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ if(audioSupport && !isIE && !isOp) {
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ }
+ if(fadeModus && !isIE) {
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ if(autoMatic) {
+ var obj = document.getElementById('auto'); changeClass(obj,'ison');
+ startPlay();
+ }
+ if(audioVolume && !isIE && !isOp) {
+ var idx = 0;
+ if(audioVolume >= 95 && audioVolume <= 100) {idx = 0;}
+ else if(audioVolume >= 85 && audioVolume < 95) {idx = 1;}
+ else if(audioVolume >= 75 && audioVolume < 85) {idx = 2;}
+ else if(audioVolume >= 65 && audioVolume < 75) {idx = 3;}
+ else if(audioVolume >= 55 && audioVolume < 65) {idx = 4;}
+ else if(audioVolume >= 45 && audioVolume < 55) {idx = 5;}
+ else if(audioVolume >= 35 && audioVolume < 45) {idx = 6;}
+ else if(audioVolume >= 25 && audioVolume < 35) {idx = 7;}
+ else if(audioVolume >= 15 && audioVolume < 25) {idx = 8;}
+ else if(audioVolume >= 5 && audioVolume < 15) {idx = 9;}
+ else {idx = 10;}
+ document.getElementById('volumelist').selectedIndex = idx;
+ }
+ if(playDelay && !isOp) {
+ var idx = 0; var vol = parseInt(playDelay/1000);
+ if(vol >= 83 && vol <= 90) {idx = 0;}
+ else if(vol >= 68 && vol < 83) {idx = 1;}
+ else if(vol >= 53 && vol < 68) {idx = 2;}
+ else if(vol >= 38 && vol < 53) {idx = 3;}
+ else if(vol >= 25 && vol < 38) {idx = 4;}
+ else if(vol >= 18 && vol < 25) {idx = 5;}
+ else if(vol >= 13 && vol < 18) {idx = 6;}
+ else if(vol >= 8 && vol < 13) {idx = 7;}
+ else {idx = 8;}
+ document.getElementById('delaylist').selectedIndex = idx;
+ }
+}
+// startup process
+
+// shutdown process
+function byby() {
+ stopPlay();
+ if(tranSitions && fadeModus && s5mode && !isOp) {
+ fadeoutSound(curSoundID,true); // audio support
+ var pg = document.createElement('div');
+ pg.id = "GoodBy";
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=0)";
+ }else {
+ pg.style.opacity = 0.0;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(255, 255, 255)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/finish.gif)";
+ document.getElementsByTagName("body")[0].appendChild(pg);
+ shiftOpacity('GoodBy',1000);
+ window.setTimeout("history.back()",1000);
+ }else {
+ stopSound(curSoundID);
+ history.back();
+ }
+}
+// shutdown process
+
+// scalable images extension
+function createDetector() {
+ var em = document.createElement('div');
+ em.id='EMSizeControl'; em.style.position="absolute"; em.style.left="-999px";
+ em.style.width="1em"; em.style.height="1em"; em.style.opacity=0.0;
+ document.getElementsByTagName("body")[0].appendChild(em);
+ var nop=document.getElementById('EMSizeControl');
+ if(!nop||findPosX(nop)!=-999) {}else {
+ opac=document.getElementById('EMSizeControl').style.opacity;
+ empx=document.getElementById('EMSizeControl').offsetHeight;
+ document.body.removeChild(document.getElementById('EMSizeControl'));
+ var objects = document.getElementsByTagName('img');
+ var j = 0; var i = 0; var k = 0; var d; var obj;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ images[j] = objects[i];
+ ++j;
+ }
+ }
+ var objects = document.getElementsByTagName('canvas'); j = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ canvas[objects[i].id] = objects[i];
+ if(j==0) {
+ if(objects[i].getContext) {
+ canvasSupport = true;
+ }
+ ++j;
+ }
+ }
+ }
+ if(canvasSupport!=true) {
+ for (d in canvas) {
+ try {
+ canvas[d].setAttribute("width",1);
+ canvas[d].setAttribute("height",1);
+ } catch (e) {
+ }
+ }
+ }
+ var objects = document.getElementsByTagName('table');
+ j = 0; k = 0; l = 0; var w; var h; var tmp; var cnt;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^piechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ piecharts[j] = objects[i];
+ em = piecharts[j].getAttribute("summary");
+ if(em != "") em = "," + em;
+ piecharts[j].setAttribute("summary", w + "," + h + em);
+ ++j;
+ }
+ }
+ }
+ if(objects[i].className.match(/^barchart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ barcharts[k] = objects[i];
+ em = barcharts[k].getAttribute("summary");
+ if(em != "") em = "," + em;
+ barcharts[k].setAttribute("summary", w + "," + h + em);
+ ++k;
+ }
+ }
+ }
+ if(objects[i].className.match(/^linechart/i)) {
+ tmp = objects[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ if(canvas[obj]) {
+ w = canvas[obj].getAttribute("width");
+ h = canvas[obj].getAttribute("height");
+ if(w>0&&h>0) {
+ linecharts[l] = objects[i];
+ em = linecharts[l].getAttribute("summary");
+ if(em != "") em = "," + em;
+ linecharts[l].setAttribute("summary", w + "," + h + em);
+ ++l;
+ }
+ }
+ }
+ }
+ objects = document.getElementsByTagName('object'); j = 0; i = 0;
+ for (i=0; i < objects.length; i++) {
+ if(objects[i].className.match(/^scale/i)) {
+ medias[j] = objects[i]; ++j;
+ if(!isIE) {
+ if(objects[i].getAttributeNode("classid")) objects[i].removeAttributeNode(objects[i].getAttributeNode("classid"));
+ if(objects[i].getAttributeNode("codebase")) objects[i].removeAttributeNode(objects[i].getAttributeNode("codebase"));
+ }
+ }
+ }
+ }
+}
+function extendImgSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < images.length; i++) {
+ w=images[i].getAttribute("width",0);
+ h=images[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ images[i].style.width=Math.floor(w*q)+"px";
+ images[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+
+function extendCanSizes(f) {
+ if(empx>0 && canvasSupport) {
+ var q = (f/empx); var w = 0; var h = 0; var tmp = ""; var cnt; var obj;
+ for(var i=0; i < piecharts.length; i++) {
+ if(piecharts[i].getAttribute("summary")) {
+ tmp = piecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = piecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < barcharts.length; i++) {
+ if(barcharts[i].getAttribute("summary")) {
+ tmp = barcharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = barcharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ for(var i=0; i < linecharts.length; i++) {
+ if(linecharts[i].getAttribute("summary")) {
+ tmp = linecharts[i].getAttribute("summary");
+ cnt = tmp.split(",");
+ if(cnt[0].match(/^[1-9][0-9]+/)) w = parseInt(cnt[0]);
+ if(cnt[1].match(/^[1-9][0-9]+/)) h = parseInt(cnt[1]);
+ if(w>0&&h>0) {
+ tmp = linecharts[i].id;
+ cnt = tmp.split("_");
+ obj = cnt[0] + "_canvas";
+ canvas[obj].setAttribute("width",Math.floor(w*q));
+ canvas[obj].setAttribute("height",Math.floor(h*q));
+ canvas[obj].style.width=Math.floor(w*q)+"px";
+ canvas[obj].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+ }
+}
+function extendObjSizes(f) {
+ if(empx>0) {
+ var q = (f/empx); var w = 0; var h = 0;
+ for(var i=0; i < medias.length; i++) {
+ w=medias[i].getAttribute("width",0);
+ h=medias[i].getAttribute("height",0);
+ if(w>0&&h>0) {
+ medias[i].style.width=Math.floor(w*q)+"px";
+ medias[i].style.height=Math.floor(h*q)+"px";
+ }
+ }
+ }
+}
+function findPosX(obj) {
+ var posLeft = 0;
+ while (obj.offsetParent) {
+ posLeft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ return posLeft;
+}
+function findPosY(obj) {
+ var posTop = 0;
+ while (obj.offsetParent) {
+ posTop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ return posTop;
+}
+// scalable images extension
+
+// canvas chart extension
+function deg2rad(degrees) {
+ return Math.PI *degrees/180;
+}
+function rad2deg(radians) {
+ return 180.0 *radians/Math.PI;
+}
+function circle_point_x(radians, diameter) {
+ var x = Math.cos(radians)*(diameter/2);
+ return x;
+}
+function circle_point_y(radians, diameter) {
+ var y = Math.sin(radians)*(diameter/2);
+ return y;
+}
+function roundTo(val,dig) {
+ var num = val;
+ if (val > 8191 && val < 10485) {
+ val = val-5000;
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ num = num+5000;
+ } else {
+ num = Math.round(val*Math.pow(10,dig))/Math.pow(10,dig);
+ }
+ return num;
+}
+function searchColor(value) {
+ for (var dat in colorNames) {
+ if(dat==value) return colorNames[dat];
+ }
+ return false;
+}
+function scanColor(value) {
+ if(value.match(/^#[0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var val1 = value.substr(1,1).toLowerCase();
+ var val2 = value.substr(2,1).toLowerCase();
+ var val3 = value.substr(3,1).toLowerCase();
+ value = '#' + val1 + val1 + val2 + val2 + val3 + val3;
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ var tmp = searchColor(value.toLowerCase());
+ if(!tmp) {}else{value = tmp;}
+ }
+ if(!value.match(/^#[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/i)) {
+ value = '#000000';
+ }
+ return value.toLowerCase();
+}
+function hex2rgb(val,trans) {
+ if(val.length==7) {
+ var tp1 = Math.max(0,Math.min(parseInt(val.substr(1,2),16),255));
+ var tp2 = Math.max(0,Math.min(parseInt(val.substr(3,2),16),255));
+ var tp3 = Math.max(0,Math.min(parseInt(val.substr(5,2),16),255));
+ return 'rgba(' + tp1 + ',' + tp2 + ',' + tp3 + ',' + trans + ')';
+ }
+}
+function trim(str) {
+ return (str.replace(/\s+$/,"").replace(/^\s+/,""));
+}
+function roundedRect(ctx,x,y,width,height,radius){
+ ctx.beginPath();
+ ctx.moveTo(x,y+radius);
+ ctx.lineTo(x,y+height-radius);
+ ctx.quadraticCurveTo(x,y+height,x+radius,y+height);
+ ctx.lineTo(x+width-radius,y+height);
+ ctx.quadraticCurveTo(x+width,y+height,x+width,y+height-radius);
+ ctx.lineTo(x+width,y+radius);
+ ctx.quadraticCurveTo(x+width,y,x+width-radius,y);
+ ctx.lineTo(x+radius,y);
+ ctx.quadraticCurveTo(x,y,x,y+radius);
+ ctx.closePath();
+}
+function drawString(ctx, text, fc, tx, ty) {
+ var xp = 0; var c = "";
+ ctx.beginPath();
+ for (var i = 0; i < text.length; i++) {
+ c = text[i];
+ ctx.drawImage(font, signs[c].sx, signs[c].sy, signs[c].sw, signs[c].sh, tx+xp, ty, signs[c].sw*fc, signs[c].sh*fc);
+ xp += (signs[c].sw*fc);
+ }
+ ctx.closePath();
+}
+function strokeString(ctx, txt, col, fh, tx, ty) {
+ var fw = fh*0.666666; var lw = fh*0.125;
+ var ls = lw/2; var cr = lw; var xp = 0;
+ ctx.lineCap = "round"; ctx.lineJoin = "round"
+ ctx.lineWidth = lw; ctx.strokeStyle = col;
+ for (var i = 0; i < txt.length; i++) {
+ strokeSymbol(ctx, txt[i], ls, tx+xp, ty, fw, fh);
+ xp += (txt[i]!="."?fw+cr:(fw/2)+cr);
+ }
+}
+function strokeSymbol(ctx, symbol, fc, cx, cy, cw, ch) {
+ ctx.beginPath();
+ switch (symbol) {
+ case "0":
+ ctx.moveTo(cx+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+(cw/2),(cw/2)-fc,deg2rad(180),0, false);
+ ctx.arc(cx+(cw/2),(cy+ch)-(cw/2),(cw/2)-fc,0,deg2rad(180), false);
+ ctx.closePath();
+ break;
+ case "1":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.moveTo(cx+(cw*0.666666),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.666666),cy+fc);
+ ctx.lineTo(cx+(cw*0.25),cy+(ch*0.25));
+ break;
+ case "2":
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.8));
+ ctx.lineTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+fc,cy+ch-fc);
+ ctx.arc(cx+(cw/2),cy+(cw*0.425),(cw*0.425)-fc,deg2rad(45),deg2rad(-180), true);
+ break;
+ case "3":
+ ctx.moveTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-90),deg2rad(180), false);
+ break;
+ case "4":
+ ctx.moveTo(cx+(cw*0.75),cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+fc,cy+(ch*0.666666));
+ ctx.lineTo(cx+(cw*0.75),cy+fc);
+ ctx.moveTo(cx+cw-fc,cy+ch-fc);
+ ctx.lineTo(cx+(cw*0.5),cy+ch-fc);
+ break;
+ case "5":
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.333333));
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-80),deg2rad(180), false);
+ break;
+ case "6":
+ ctx.moveTo(cx+fc,cy+ch-(cw*0.5)-fc);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-180),deg2rad(180), false);
+ ctx.bezierCurveTo(cx+fc,cy+fc,cx+fc,cy+fc,cx+(cw*0.9)-fc,cy+fc);
+ ctx.moveTo(cx+(cw*0.9)-fc,cy+fc);
+ break;
+ case "7":
+ ctx.moveTo(cx+(cw*0.5),cy+ch-fc);
+ ctx.lineTo(cx+cw-fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+fc);
+ ctx.lineTo(cx+(cw*0.1)+fc,cy+(ch*0.25)-fc);
+ break;
+ case "8":
+ ctx.moveTo(cx+(cw*0.92)-fc,cy+(cw*0.59));
+ ctx.arc(cx+(cw/2),cy+(cw*0.45),(cw*0.45)-fc,deg2rad(25),deg2rad(-205), true);
+ ctx.arc(cx+(cw/2),cy+ch-(cw*0.5),(cw*0.5)-fc,deg2rad(-135),deg2rad(-45), true);
+ ctx.closePath();
+ ctx.moveTo(cx+(cw*0.79),cy+(ch*0.47));
+ ctx.lineTo(cx+(cw*0.21),cy+(ch*0.47));
+ break;
+ case "9":
+ ctx.moveTo(cx+cw-fc,cy+(cw*0.5));
+ ctx.arc(cx+(cw/2),cy+(cw*0.5),(cw*0.5)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.bezierCurveTo(cx+cw-fc,cy+ch-fc,cx+cw-fc,cy+ch-fc,cx+(cw*0.1)+fc,cy+ch-fc);
+ break;
+ case "%":
+ ctx.moveTo(cx+fc,cy+(ch*0.75));
+ ctx.lineTo(cx+cw-fc,cy+(ch*0.25));
+ ctx.moveTo(cx+(cw*0.505),cy+(cw*0.3));
+ ctx.arc(cx+(cw*0.3),cy+(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ ctx.moveTo(cx+(cw*0.905),cy+ch-(cw*0.3));
+ ctx.arc(cx+(cw*0.7),cy+ch-(cw*0.3),(cw*0.3)-fc,deg2rad(0),deg2rad(360), false);
+ break;
+ case ".":
+ ctx.moveTo(cx+(cw*0.25),cy+ch-fc-fc);
+ ctx.arc(cx+(cw*0.25),cy+ch-fc-fc,fc,deg2rad(0),deg2rad(360), false);
+ ctx.closePath();
+ break;
+ default:
+ break;
+ }
+ ctx.stroke();
+}
+function drawBar(ctx,x,y,width,height,color,value,textdiv){
+ var rw = width/2; var rh = rw/2;
+ height = Math.max(height,rw);
+ var dh = Math.max(height-(2*rh),0.1); var S2L;
+ var xx = rw/8; var yy = rh/4;
+ var yo = rh/2; y = y - yy;
+ if(canvas_noshadow <= 0 && canvas_noshade <= 0) {
+ ctx.save();
+ S2L = ctx.createRadialGradient(x+rw+rh,y+height-rw+yy+rh,0,x+rw,y+height-rw+yy,rw);
+ S2L.addColorStop(0, 'rgba(0,0,0,0.5)');
+ S2L.addColorStop(0.7, 'rgba(0,0,0,0.25)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = S2L;
+ ctx.scale(1,0.5);
+ ctx.translate(xx,y+height+yy);
+ if(isOp){
+ ctx.fillRect(x,y+yy+height-width,width,width);
+ }else {
+ ctx.arc(x+rw,y+yy+height-width,width,0,deg2rad(360), false);
+ ctx.fill();
+ }
+ ctx.restore();
+ }else if(canvas_noshadow <= 0 && canvas_noshade >= 1) {
+ ctx.fillStyle = 'rgba(0,0,0,0.2)';
+ ctx.fillRect(x+yo,y+rh+yo+yo,width,dh);
+ }
+
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x,y+(height/2),x+width,y+(height/2));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.75)');
+ S2L.addColorStop(0.2, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.3, 'rgba(0,0,0,0)');
+ S2L.addColorStop(0.5, 'rgba(0,0,0,0.1)');
+ S2L.addColorStop(0.9, 'rgba(0,0,0,0.35)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x,y+rh);
+ ctx.lineTo(x,y+rh+dh);
+ ctx.bezierCurveTo(x,y+height,x+width,y+height,x+width,y+rh+dh)
+ ctx.lineTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = color;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.3)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.fillStyle = S2L;
+ ctx.fill();
+ S2L = ctx.createLinearGradient(x+rw-(width*0.15),y-2,x+rw+(width*0.15),y+(2.1*rh));
+ S2L.addColorStop(0, 'rgba(255,255,255,0.9)');
+ S2L.addColorStop(0.5, 'rgba(255,255,255,0)');
+ S2L.addColorStop(0.6, 'rgba(0,0,0,0)');
+ S2L.addColorStop(1, 'rgba(0,0,0,0.1)');
+ ctx.beginPath();
+ ctx.moveTo(x+width,y+rh);
+ ctx.bezierCurveTo(x+width,y,x,y,x,y+rh)
+ ctx.bezierCurveTo(x,y+(rh*2),x+width,y+(rh*2),x+width,y+rh)
+ ctx.closePath();
+ ctx.strokeStyle = S2L;
+ ctx.stroke();
+ }else {
+ ctx.fillStyle = color;
+ ctx.fillRect(x,y+rh+yo,width,dh);
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var bw = width; var bh = bw/4;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ var c; var w;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,x+(width/2)-(bw/2),y,bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext <= 0) {
+ strokeString(ctx, value + "%","rgba(48,48,48,1)", th, x+(width/2)-(w/2), y+((bh-th)/2));
+ }else {
+ drawString(ctx, value + "%", tf, x+(width/2)-(w/2), y+((bh-th)/2.2));
+ }
+ }else {
+ var bh = bw/3; var th = roundTo(bh*0.75,0);
+ roundedRect(ctx,x,y,bw,bh,bh/4);
+ ctx.fill();
+ var obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = x + "px";
+ obj.style.top = y+((bh-th)/2.2) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+
+ }
+}
+function drawLine(ctx,x,y,width,height,dist,array,factor,color,fill){
+ if(fill <= 0){
+ var style = hex2rgb(color,0.5);
+ ctx.lineJoin = "miter";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height);
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.lineTo(x+width,y+height);
+ ctx.lineTo(x,y+height);
+ ctx.closePath();
+ ctx.fillStyle = style;
+ ctx.fill();
+ }
+ ctx.lineJoin = "round";
+ ctx.beginPath();
+ ctx.moveTo(x,y+height-(array[0]*factor));
+ for (var i = 0; i < array.length; i++) {
+ ctx.lineTo(x+(i*dist),y+height-(array[i]*factor));
+ }
+ ctx.strokeStyle = color;
+ ctx.stroke();
+}
+function setDataURL(cid) {
+ if(cid.toDataURL) {
+ var obj = document.getElementById(cid.id + "_link");
+ if(obj) {
+ obj.setAttribute("title", "To Data URL");
+ obj.setAttribute("target", "_blank");
+ obj.setAttribute("href", cid.toDataURL());
+ }
+ }
+}
+function get_input(dataobj,canvasobj,linechart) {
+ var table = document.getElementById(dataobj);
+ var canvas = document.getElementById(canvasobj);
+ var row; var clm; var cnt = 0; var val = 0; var nme = ""; var col = "";
+ if(canvas.getContext) {
+ canvas_width = parseInt(canvas.style.width);
+ canvas_height = parseInt(canvas.style.height);
+ if(canvas_width >= 16 && canvas_height >= 16) {
+ var tmp = table.getAttribute("summary");
+ canvas_noshade = 0; canvas_noshadow = 0;
+ canvas_notext = 0; canvas_imgtext = 0;
+ canvas_htmltext = 0; canvas_nofill = 0;
+ if(tmp.search(/noshadow/) != -1) canvas_noshadow = 1;
+ if(tmp.search(/noshade/) != -1) canvas_noshade = 1;
+ if(tmp.search(/nofill/) != -1) canvas_nofill = 1;
+ if(tmp.search(/notext/) != -1) canvas_notext = 1;
+ if(tmp.search(/htmltext/) != -1) canvas_htmltext = 1;
+ if(tmp.search(/imgtext/) != -1) canvas_imgtext = 1;
+ if(table.getAttribute("bgcolor")) {
+ canvas_bgcolor = scanColor(table.getAttribute("bgcolor"));
+ }
+ ChartData = new Array(); colorSlice = new Array();
+ if(table.getElementsByTagName("tr")[0].getElementsByTagName("th")[0]) cnt = 1;
+ for(var r = cnt; r < table.getElementsByTagName("tr").length; r++) {
+ row = table.getElementsByTagName("tr")[r];
+ clm = row.getElementsByTagName("td").length;
+ if(row.getElementsByTagName("td")[0].getAttribute("bgcolor")) {
+ col = scanColor(row.getElementsByTagName("td")[0].getAttribute("bgcolor")); val = 0;
+ nme = trim(row.getElementsByTagName("td")[1].innerHTML.replace(/<[^>]+>/g,""));
+ if(!linechart) {
+ if(clm > 3) {
+ for(var z = 2; z < clm; z++) {
+ val += parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ }else {
+ val = parseFloat(row.getElementsByTagName("td")[2].innerHTML.replace(/<[^>]+>/g,""));
+ }
+ if(!isNaN(val) && val > 0 && nme != '') {
+ colorSlice[r-cnt] = col; ChartData[nme] = Math.abs(val);
+ }else {
+ break;
+ }
+ }else {
+ val = 0; i = 0;
+ if(clm > 3 && nme != '') {
+ ChartData[r-cnt] = new Array();
+ colorSlice[r-cnt] = col;
+ for(var z = 2; z < clm; z++) {
+ val = Math.abs(parseFloat(row.getElementsByTagName("td")[z].innerHTML.replace(/<[^>]+>/g,"")));
+ if(!isNaN(val) && val >= 0) {
+ ChartData[r-cnt][i] = val; i++;
+ }else {
+ ChartData[r-cnt][i] = 0; i++;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }else {
+ break;
+ }
+ }
+ }
+ }
+}
+function setPieChart(canvasobj,textobj) {
+ var cd = (Math.min(canvas_width,canvas_height)/110)*100;
+ var cp = cd*0.1; var cr = cd/2;
+ var sr = cr*0.93; var cw = cd+cp; var ch = cw;
+ var cx = (cd/2)+(cp/2); var cy = cx; var ct = 0;
+ for (var data in ChartData) {
+ ct += ChartData[data];
+ }
+ var poc = ct/100;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ }
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,cw,ch);
+ }else {
+ ctx.clearRect(0,0,cw,ch);
+ }
+ if(canvas_noshadow <= 0) {
+ if(!isOp) {
+ ctx.beginPath();
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),cr,cx+(cr*0.1),cy+(cr*0.1),sr*0.9);
+ B2B.addColorStop(0, 'rgba(0,0,0,0)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.arc(cx+(cr*0.1),cy+(cr*0.1),cr,0,deg2rad(360), false);
+ ctx.closePath();
+ ctx.fillStyle = B2B;
+ ctx.fill();
+ }else {
+ var B2B = ctx.createRadialGradient(cx+(cr*0.1),cy+(cr*0.1),0,cx+(cr*0.1),cy+(cr*0.1),cr);
+ B2B.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(0.87, 'rgba(0,0,0,0.5)');
+ B2B.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.fillStyle = B2B;
+ ctx.fillRect(0,0,cw,ch);
+ }
+ }
+ var val = 0; var deg = 0; var idx = 0; var data;
+ for (data in ChartData) {
+ val = ChartData[data]; sdeg = deg;
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ ctx.beginPath();
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr,sdeg,edeg, false);
+ ctx.lineTo(cx,cy);
+ ctx.closePath();
+ ctx.fillStyle = colorSlice[(idx++)];
+ ctx.fill();
+ }
+ if(canvas_noshade <= 0) {
+ ctx.beginPath();
+ var W2T = ctx.createLinearGradient(cp*2,cp*2,cx,cy);
+ W2T.addColorStop(0, 'rgba(255,255,255,0.8)');
+ W2T.addColorStop(1, 'rgba(255,255,255,0)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.fillStyle = W2T;
+ ctx.fill();
+ ctx.beginPath();
+ var T2B = ctx.createLinearGradient(cx,cy,cw-(cp*2),ch-(cp*2));
+ T2B.addColorStop(0, 'rgba(0,0,0,0)');
+ T2B.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,sr,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.fillStyle = T2B;
+ ctx.fill();
+ ctx.beginPath();
+ var B2T = ctx.createLinearGradient(cx,cy,cw-(cp*1.9),ch-(cp*1.9));
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(-45),deg2rad(135), false);
+ ctx.closePath();
+ ctx.strokeStyle = B2T;
+ ctx.stroke();
+ ctx.beginPath();
+ var T2W = ctx.createLinearGradient(cx,cy,(cp*1.9),(cp*1.9));
+ T2W.addColorStop(0, 'rgba(255,255,255,0)');
+ T2W.addColorStop(1, 'rgba(255,255,255,0.6)');
+ ctx.lineWidth = cr*0.07;
+ ctx.lineCap = "round";
+ ctx.moveTo(cx,cy);
+ ctx.arc(cx,cy,cr*0.965,deg2rad(135),deg2rad(315), false);
+ ctx.closePath();
+ ctx.strokeStyle = T2W;
+ ctx.stroke();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = 1;
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
+ var mpos = 0; var per = 0; var gx = 0;
+ var gy = 0; var tx = 0; var ty = 0;
+ var obj = ""; var w = 0; var c = 0;
+ var bw = cr*0.45; var bh = cr*0.125;
+ var th = roundTo(bh*0.75,0); var tf = bh/80;
+ if(canvas_notext <= 0) {
+ if(canvas_htmltext >= 1) {
+ bw = (cr*0.365);
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ for (data in ChartData) {
+ val = ChartData[data];
+ sdeg = deg; mpos = deg+(((val/2)/ct)*deg2rad(360));
+ deg += (val/ct)*deg2rad(360); edeg = deg;
+ per = roundTo(val/poc,2);
+ gx = circle_point_x(mpos, cd);
+ gy = circle_point_y(mpos, cd);
+ tx = parseFloat((cx+(2*Math.floor(cx + gx)))/3);
+ ty = (cy+(2*Math.floor(cy + gy)))/3;
+ if(canvas_htmltext <= 0) {
+ w = '"' + per + '"';
+ if(w.indexOf(".")!=-1) {
+ c = w.length+0.5;
+ w = parseFloat(c-2)*parseFloat(48*tf);
+ bw = parseFloat(c-1)*parseFloat(48*tf);
+ }else {
+ c = w.length;
+ w = parseFloat(c-1)*parseFloat(48*tf);
+ bw = parseFloat(c)*parseFloat(48*tf);
+ }
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ if(canvas_imgtext >= 1) {
+ drawString(ctx, per + "%", tf, tx-(w/2), ty-(th/1.8));
+ }else {
+ strokeString(ctx, per + "%","rgba(48,48,48,1)", th, tx-(w/2), ty-(th/2));
+ }
+ }else {
+ roundedRect(ctx,(tx-(bw/2)),ty-(bh/2),bw,bh,bh/4);
+ ctx.fill();
+ obj = document.createElement('div');
+ obj.style.position = "absolute";
+ obj.style.overflow = "hidden";
+ obj.style.textAlign = "center";
+ obj.style.width = bw + "px";
+ obj.style.left = (tx-(bw/2)) + "px";
+ obj.style.top = ty-(th/1.8) + "px";
+ obj.appendChild(document.createTextNode(per + "%"));
+ textdiv.appendChild(obj);
+ }
+ }
+ }
+ }
+}
+function setBarChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9; var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05; var ph = canvas_height*0.05;
+ var cm = 0; var ct = 0;
+ for (var data in ChartData) {
+ cm = Math.max(cm,ChartData[data]);
+ ct += ChartData[data];
+ }
+ var hf = ih/cm; var bs = colorSlice.length;
+ var bw = iw/(bs*1.1); var poc = ct/100;
+ var th = roundTo((bw/3)*0.75,0);
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_htmltext >= 1) {
+ if(document.getElementById(textobj)) {
+ canvas.parentNode.removeChild(canvas.parentNode.lastChild);
+ }
+ canvas.parentNode.style.position = "relative";
+ if(!document.getElementById(textobj)) {
+ var obj = document.createElement('div');
+ obj.id = textobj;
+ obj.style.color = "rgb(0,0,0)";
+ obj.style.fontFamily = "Arial,sans-serif";
+ obj.style.fontSize = th + "px";
+ obj.style.zIndex = 11;
+ canvas.parentNode.appendChild(obj);
+ }
+ var textdiv = document.getElementById(obj.id);
+ }
+ var cc = ""; var bh = 0; var idx = 0; var t = 0; per = 0;
+ for (var data in ChartData) {
+ per = roundTo(ChartData[data]/poc,2);
+ bh = ChartData[data]*hf;
+ drawBar(ctx,pw+(t*(bw*1.1)),ph+ih-bh,bw,bh,colorSlice[(idx++)],per,textdiv);
+ t++;
+ }
+ }
+}
+function setLineChart(canvasobj,textobj) {
+ var iw = canvas_width*0.9;
+ var ih = canvas_height*0.9;
+ var pw = canvas_width*0.05;
+ var ph = canvas_height*0.05;
+ var cm = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ cm = Math.max(cm,ChartData[i][j]);
+ }
+ }
+ var hf = (ih*0.95)/cm; var bw = iw;
+ var dw = iw/(ChartData[0].length-1)
+ var dh = ih/(ChartData[0].length-1)
+ var ps = Math.min(pw,ph); lw = ps/4;
+ var B2T;
+ var canvas = document.getElementById(canvasobj);
+ if(canvas.getContext) {
+ var ctx = canvas.getContext('2d');
+ if(canvas_bgcolor != "") {
+ ctx.fillStyle = canvas_bgcolor;
+ ctx.fillRect(0,0,canvas_width,canvas_height);
+ }else {
+ ctx.clearRect(0,0,canvas_width,canvas_height);
+ }
+ if(canvas_noshadow <= 0) {
+ B2T = ctx.createLinearGradient(pw+ps,ph+ih+1,pw+ps+ps,ph+ih+1);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.5)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps,ph+ih);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.lineTo(pw+ps+ps,ph+ih);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+ps+ps,ph+ih,pw+ps+ps,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.5)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+ps+ps,ph+ih);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+ps+iw,ph+ih+ps);
+ ctx.lineTo(pw+ps,ph+ih+ps);
+ ctx.closePath();
+ ctx.fill();
+ var B2T = ctx.createLinearGradient(pw+iw+1,ph+ps,pw+iw+1,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.0)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.35)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps);
+ ctx.lineTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ B2T = ctx.createLinearGradient(pw+iw,ph+ps+ps,pw+iw+ps,ph+ps+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,0.35)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0.0)');
+ ctx.fillStyle = B2T;
+ ctx.beginPath();
+ ctx.moveTo(pw+iw,ph+ps+ps);
+ ctx.lineTo(pw+iw,ph+ih);
+ ctx.lineTo(pw+iw+ps,ph+ih+ps);
+ ctx.lineTo(pw+iw+ps,ph+ps);
+ ctx.closePath();
+ ctx.fill();
+ }
+ ctx.lineCap = "butt";
+ ctx.lineWidth = lw/2;
+ ctx.strokeStyle = "rgba(255,255,255,0.25)";
+ if(canvas_nofill <= 0) {
+ ctx.fillStyle = "rgba(240,240,240,0.8)";
+ ctx.strokeStyle = "rgba(255,255,255,1)";
+ ctx.fillRect(pw,ph,iw,ih);
+ }
+ for (var i = 0; i < ChartData[0].length-1; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph);
+ ctx.lineTo(pw+(i*dw),ph+ih);
+ ctx.stroke();
+ }
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw,ph+(i*dh));
+ ctx.lineTo(pw+iw,ph+(i*dh));
+ ctx.stroke();
+ }
+ ctx.lineWidth = lw;
+ var cc = ""; var bh = 0; var idx = 0; var t = 0;
+ for (var i = 0; i < ChartData.length; i++) {
+ for (var j = 0; j < ChartData[i].length; j++) {
+ t = Math.max(t,ChartData[i][j]);
+ }
+ bh = t*hf; cc = colorSlice[(idx++)];
+ drawLine(ctx,pw,ph+ih-bh,bw,bh,dw,ChartData[i],hf,cc,canvas_nofill);
+ }
+ ctx.beginPath();
+ ctx.moveTo(pw,ph);
+ ctx.lineTo(pw,ph+ih);
+ ctx.lineTo(pw+iw+(lw/2),ph+ih);
+ ctx.strokeStyle = "rgba(48,48,48,1)";
+ ctx.stroke();
+ ctx.lineWidth = lw/2;
+ B2T = ctx.createLinearGradient(pw,ph+ih,pw,ph+ih+ps);
+ B2T.addColorStop(0, 'rgba(0,0,0,1)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,0)');
+ ctx.strokeStyle = B2T;
+ for (var i = 0; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw+(i*dw),ph+ih);
+ ctx.lineTo(pw+(i*dw),ph+ih+ps);
+ ctx.stroke();
+ }
+ B2T = ctx.createLinearGradient(pw-ps,ph,pw,ph);
+ B2T.addColorStop(0, 'rgba(0,0,0,0)');
+ B2T.addColorStop(0.5, 'rgba(0,0,0,1)');
+ B2T.addColorStop(1, 'rgba(0,0,0,1)');
+ ctx.strokeStyle = B2T;
+ for (var i = 1; i < ChartData[0].length; i++) {
+ ctx.beginPath();
+ ctx.moveTo(pw-ps,ph+(i*dh));
+ ctx.lineTo(pw,ph+(i*dh));
+ ctx.stroke();
+ }
+ }
+}
+function generateCanvas() {
+ if(canvasSupport) {
+ var canvasID; var tdataID; var textID;
+ var tmp; var dat; var i; var j;
+ for(i=0; i < piecharts.length; i++) {
+ tmp = piecharts[i].id.split("_");
+ tdataID = piecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setPieChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < barcharts.length; i++) {
+ tmp = barcharts[i].id.split("_");
+ tdataID = barcharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID);
+ if(colorSlice.length > 0) {
+ j = 0; dat = ""; for(dat in ChartData) {j++; }
+ if(j > 0 && j == colorSlice.length) {
+ setBarChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ for(i=0; i < linecharts.length; i++) {
+ tmp = linecharts[i].id.split("_");
+ tdataID = linecharts[i].id;
+ canvasID = tmp[0] + "_canvas";
+ textID = tmp[0] + "_text";
+ if(document.getElementById(tdataID)) {
+ get_input(tdataID,canvasID,true);
+ if(colorSlice.length > 0) {
+ if(ChartData.length == colorSlice.length) {
+ setLineChart(canvasID,textID);
+ }
+ }
+ }
+ }
+ }
+}
+// canvas chart extension
+
+// invisible select extension
+function setListPos(opt) {
+ if(!isIE) { //(degrade IE)
+ var ref = document.getElementById('list');
+ var x = findPosX(ref); var y = findPosY(ref);
+ var obj = document.getElementById('jumplist');
+ obj.style.position = 'fixed'; obj.style.left = x + 'px'; obj.style.top = y + 'px';
+ var vol = document.getElementById('volumelist');
+ ref = document.getElementById('volume');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ vol.style.position = 'fixed'; vol.style.left = x + 'px'; vol.style.top = y + 'px';
+ var del = document.getElementById('delaylist');
+ ref = document.getElementById('delay');
+ x = findPosX(ref); if(isOp) {y = window.innerHeight-imgHeight; }else {y = findPosY(ref);}
+ del.style.position = 'fixed'; del.style.left = x + 'px'; del.style.top = y + 'px';
+ var pnl = document.getElementById('navLinks');
+ }
+ if(opt) {
+ if(isIE) {
+ //(degrade IE)
+ //pnl.style.filter = "alpha(opacity=80)";
+ }else {
+ obj.style.opacity = 0.0;
+ vol.style.opacity = 0.0;
+ del.style.opacity = 0.0;
+ pnl.style.opacity = 0.8;
+ }
+ }
+}
+// invisible select extension
+
+// transition extension
+function switchFade() {
+ if(tranSitions && s5mode && fadeModus) {
+ fadeModus = false;
+ playDelay = playDelay-(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'isoff');
+ }else if(tranSitions && s5mode && !fadeModus) {
+ fadeModus = true;
+ playDelay = playDelay+(2*fadeDuration);
+ var obj = document.getElementById('fade'); changeClass(obj,'ison');
+ }
+ currentSlide();
+}
+function opacity(ids, opacStart, opacEnd, millisec) {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+ if(opacStart > opacEnd) {
+ for(var i = opacStart; i >= opacEnd; i--) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ } else if(opacStart < opacEnd) {
+ for(var i = opacStart; i <= opacEnd; i++) {
+ window.setTimeout("changeOpac(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ }
+}
+function changeOpac(opacity, ids) {
+ var obj = document.getElementById(ids);
+ if (isIE) {
+ obj.style.filter = "alpha(opacity=" + opacity + ")";
+ } else {
+ obj.style.opacity = (opacity / 100);
+ }
+}
+function shiftOpacity(ids, millisec) {
+ if(document.getElementById(ids).style.opacity != '') {
+ var currentOpac = document.getElementById(ids).style.opacity * 100;
+ } else {
+ var currentOpac = 0;
+ }
+ if(currentOpac == 0) {
+ opacity(ids, currentOpac, 100, millisec);
+ } else if(currentOpac > 0) {
+ opacity(ids, currentOpac, 0, millisec);
+ }
+}
+// transition extension
+
+// autoplay extension
+function autoPlay() {
+ if (s5mode && autoMatic && !playPause) {
+ if ((snum >= (smax-1)) && playLoop) {
+ goTo(0);
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }else if ((snum >= (smax-1)) && !playLoop) {
+ stopPlay();
+ }else {
+ if (!incrementals[snum] || incpos >= incrementals[snum].length) {
+ go(1);
+ if (incrementals[snum].length >0) {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = parseInt(playDelay/(incrementals[snum].length+1));
+ remainDer = parseInt(playDelay-(incrDelay*incrementals[snum].length));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ } else {
+ clearTimeout(autoRun); autoRun = null;
+ incrDelay = incrDuration;
+ remainDer = parseInt(playDelay-(incrementals[snum].length*incrDuration));
+ autoRun = setTimeout('autoPlayIncr()',incrDelay);
+ }
+ autoRun = setTimeout('autoPlay();',playDelay);
+ }
+ }
+}
+function autoPlayIncr() {
+ if (incpos < incrementals[snum].length) {
+ subgo(1);
+ autoRun = setTimeout('autoPlayIncr();',incrDelay);
+ }else {
+ autoRun = setTimeout('nop();',remainDer);
+ }
+}
+function nop() {
+ // no operation dummy
+}
+function togglePlay() {
+ if (autoRun && s5mode) {
+ stopPlay();
+ }else if (!autoRun && s5mode) {
+ startPlay();
+ }
+}
+function stopPlay() {
+ if (autoRun && s5mode) {
+ clearTimeout(autoRun); autoRun = null;
+ autoMatic = false; playPause = false; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'isoff');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ currentSlide();
+ }
+}
+function startPlay() {
+ if (!autoRun && s5mode) {
+ playPause = false; autoMatic = true; var obj = '';
+ obj = document.getElementById('auto'); changeClass(obj,'ison');
+ obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ autoRun = setTimeout('autoPlay();',playDelay);
+ currentSlide();
+ }
+}
+function pausePlay() {
+ if (s5mode && autoMatic) {
+ if (playPause) {
+ playPause = false; autoRun = setTimeout('autoPlay();',playDelay);
+ var obj = document.getElementById('pause'); changeClass(obj,'isoff');
+ }else {
+ if (autoRun){
+ clearTimeout(autoRun); autoRun = null; playPause = true;
+ var obj = document.getElementById('pause'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+ }
+}
+function switchLoop() {
+ if(s5mode) {
+ if (playLoop) {
+ playLoop = false;
+ var obj = document.getElementById('loop'); changeClass(obj,'isoff');
+ }else {
+ playLoop = true;
+ var obj = document.getElementById('loop'); changeClass(obj,'ison');
+ }
+ }
+ currentSlide();
+}
+function setDelay() {
+ var val = document.getElementById('delaylist');
+ if(s5mode) {
+ var delay = Math.max(5,Math.min(parseInt(val.value),300));
+ playDelay = (fadeModus == true) ? ((delay*1000)+(2*fadeDuration)) : (delay*1000);
+ }
+}
+// autoplay extension
+
+// audio extension
+function createSoundManagerScript() {
+ if(typeof soundManager=="undefined") {
+ onerrorSM2();
+ }else {
+ var script=document.createElement('SCRIPT');
+ var tx=document.createTextNode("soundManager.createMovie();");
+ script.appendChild(tx);
+ document.getElementsByTagName("body")[0].appendChild(script);
+ }
+}
+//soundManager.onload = function() {
+function onloadSM2() {
+ if(!isIE) { //(degrade IE)
+ swfUnloaded = false;
+ preloadSounds();
+ }
+}
+//soundManager.onerror = function() {
+function onerrorSM2() {
+ if(typeof soundManager!="undefined") {
+ soundManager.destruct;
+ delete soundManager;
+ }
+ audioSupport = false; swfUnloaded = true;
+ if(audioError && !isIE && !isOp) {
+ var dv = document.createElement('div'); dv.id = "guru";
+ var d2=document.createElement('div'); dv.appendChild(d2);
+ var tx=document.createTextNode('Guru Meditation - SoundManager failed to load/initialize!');
+ d2.appendChild(tx); document.getElementById('slide0').appendChild(dv);
+ }
+}
+function audioSetup() {
+ if(sound[0]) {
+ playSound(0);
+ }else if(sound[bgSoundItem] && !sound[0]) {
+ playSound(bgSoundItem);
+ }
+}
+function fadeoutSound(ids, option) {
+ if(curSoundID >= 0 && !swfUnloaded) {
+ if(isNaN(ids)) {
+ if(ids == "bgSound") {
+ var cnum = parseInt(bgSoundItem);
+ }else {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && ids == sound[i]["id"]) {
+ var cnum = i;
+ break;
+ }
+ }
+ }
+ }else {
+ var cnum = ids;
+ ids = sound[cnum]["id"];
+ }
+ var vol = getMaxVolume(sound[cnum]["volume"]);
+ var millisec = fadeDuration;
+ var speed = Math.round(millisec / vol);
+ var timer = 0;
+ for(var i = vol; i > 0; i--) {
+ setTimeout("fadeout(" + i + ",'" + ids + "')",(timer * speed));
+ timer++;
+ }
+ if(option) setTimeout("stopSound('"+ids+"')",millisec);
+ }
+}
+function fadeout(volume, id) {
+ soundManager.setVolume(id,volume);
+}
+function stopSound(ids) {
+ var sid;
+ if(isNaN(ids)) {
+ sid = ids;
+ }else if(sound[ids]) {
+ sid = sound[ids]["id"];
+ }
+ if(sid!='' && curSoundID >= 0) {
+ soundManager.stop(sid);
+ curSoundID = -1;
+ }
+}
+function toggleSounds() {
+ if(audioSupport && !swfUnloaded) {
+ stopAllSounds();
+ }else if (!audioSupport && !swfUnloaded) {
+ allowSounds();
+ }
+}
+function allowSounds() {
+ if(!swfUnloaded) {
+ audioSupport = true;
+ var obj = document.getElementById('audio'); changeClass(obj,'ison');
+ currentSlide();
+ }
+}
+function stopAllSounds() {
+ if(curSoundID >= 0) {
+ stopSound(curSoundID);
+ }else {
+ soundManager.stopAll();
+ curSoundID = -1;
+ }
+ audioSupport = false;
+ var obj = document.getElementById('audio'); changeClass(obj,'isoff');
+ currentSlide();
+}
+function playSound(id) {
+ if(audioSupport && !swfUnloaded) {
+ var url, sid, vol, lps, cnum;
+ if(isNaN(id)) {
+ sid = id;
+ if(sid == "bgSound") {
+ cnum = parseInt(bgSoundItem);
+ }else {
+ cnum = getSoundID(id);
+ }
+ }else {
+ cnum = parseInt(id);
+ if(sound[cnum]) sid = sound[cnum]["id"];
+ }
+ if(sound[cnum] && sound[cnum]["url"]!='' && sid!=''){
+ url = sound[cnum]["url"];
+ vol = (sound[cnum]["volume"]!='')?getMaxVolume(sound[cnum]["volume"]):getMaxVolume(100);
+ lps = (sound[cnum]["loops"])?true:false;
+ if(lps) {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){soundManager.play(sid,{volume:getMaxVolume(sound[cnum]["volume"])});}});
+ }else {
+ soundManager.play(sid,{volume:vol,onplay:function(){curSoundID=cnum;},onfinish:function(){curSoundID=-1;}});
+ }
+ }
+ }
+}
+function getSoundID(str) {
+ for (var i = 0; i < (sound.length-1); i++) {
+ if(sound[i] && str == sound[i]["id"]) {
+ var id = i;
+ break;
+ }
+ }
+ return id;
+}
+function setVolume() {
+ var vol = document.getElementById('volumelist');
+ if(audioSupport && !swfUnloaded) {
+ audioVolume = parseInt(vol.value);
+ if(curSoundID >= 0) {
+ if(sound[curSoundID]) {
+ var sid = sound[curSoundID]["id"];
+ var vid = getMaxVolume(sound[curSoundID]["volume"]);
+ soundManager.setVolume(sid,vid);
+ }
+ }
+ }
+}
+function getMaxVolume(value) {
+ if(audioVolume>0) {var factor = audioVolume/100;}else {var factor = 0;}
+ return Math.max(0,Math.min(parseInt(value*factor),audioVolume));
+}
+function preloadSounds() {
+ var temp = ''; var parm = ''; var t = ''; var cl = '';
+ var objects = document.getElementsByTagName('object');
+ for (var i=0; i < objects.length; i++) {
+ if(objects[i].type.toLowerCase() == 'audio/mp3' && objects[i].data != '') {
+ objects[i].width = 0; objects[i].height = 0;
+ if(objects[i].parentNode.tagName == 'DIV') {
+ cl = objects[i].parentNode.className.toLowerCase();
+ if(cl == 'presentation' || cl == 'slide') {
+ if(cl == 'presentation') {
+ t = parseInt(bgSoundItem);
+ }else {
+ t = parseInt(objects[i].parentNode.id.slice(5, objects[i].parentNode.id.length));
+ }
+ sound[t] = new Object();
+ if(t < bgSoundItem) {
+ sound[t]["id"] = objects[i].parentNode.id;
+ }else {
+ sound[t]["id"] = "bgSound";
+ }
+ sound[t]["url"] = objects[i].data;
+ sound[t]["volume"] = 100; sound[t]["loops"] = false;
+ if(objects[i].archive != '') {
+ parm = objects[i].archive.toLowerCase().split(',');
+ for (var j=0; j < parm.length; j++) {
+ if(parm[j] == 'loop') sound[t]["loops"] = true;
+ if(parm[j].search(/^volume/) != -1) {
+ var tmp = parm[j].split(':');
+ sound[t]["volume"] = parseInt(tmp[1]);
+ }
+ }
+ }
+ soundManager.createSound(sound[t]["id"],sound[t]["url"]);
+ }
+ }
+ }
+ }
+}
+// audio extension
+
+// help extension
+function createHelpReq() {
+ if(!document.getElementById("HelpReq")) {
+ var obj = document.getElementsByTagName("body")[0].firstChild;
+ var pg = document.createElement('div');
+ pg.id = "HelpReq";
+ if (pg.addEventListener) {
+ pg.addEventListener("onclick",dumpHelpReq,false);
+ } else if (pg.attachEvent) {
+ pg.attachEvent("onclick",dumpHelpReq);
+ }
+ pg.style.position = 'absolute';
+ pg.style.left = 0 + 'px';
+ pg.style.top = 0 + 'px';
+ pg.style.width = 100 + '%';
+ pg.style.height = 100 + '%';
+ pg.style.margin = 0 + 'px';
+ pg.style.padding = 0 + 'px';
+ if (isIE) {
+ pg.style.filter = "alpha(opacity=90)";
+ } else {
+ pg.style.opacity = 0.9;
+ }
+ pg.style.zIndex = 9999;
+ pg.style.backgroundColor="rgb(64,64,64)";
+ pg.style.textAlign = "center";
+ pg.style.verticalAlign = "middle";
+ pg.style.backgroundPosition="center center";
+ pg.style.backgroundRepeat="no-repeat";
+ pg.style.backgroundImage="url("+s5Path+"ui/graphic_support/help.jpg)";
+ document.getElementsByTagName("body")[0].insertBefore(pg,obj);
+ if(document.getElementById("HelpReq")) {
+ helpmode = true;
+ }
+ }
+}
+function dumpHelpReq() {
+ if(document.getElementById("HelpReq")) {
+ document.body.removeChild(document.getElementById('HelpReq'));
+ helpmode = false;
+ }
+}
+// help extension
+
+//DEBUG
+function ConsoleLog(value) {
+ if(window.console) {
+ window.console.log(value);
+ }
+}
+//DEBUG
+
+document.write('<style type="text/css" media="screen" id="blockStyle">.presentation, .layout {display: none; }</style>');
+
+if(!isIE && !isOp) {
+ document.write('<script type="text/javascript" src="'+s5Path+'ui/audio_support/soundmanager2.js"></script>');
+ if(typeof soundManager!="undefined") {
+ var allMetas = document.getElementsByTagName('meta');
+ for (var i = 0; i< allMetas.length; i++) {
+ if (allMetas[i].name == 'audioDebug') {
+ var audioDebug = (allMetas[i].content == "true") ? true : false;
+ soundManager.defaultOptions.debugMode = audioDebug;
+ }
+ }
+ }
+}
+
+window.onload = createSlideShow;
+window.onresize = function(){setTimeout('windowChange()',5);} \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif
new file mode 100644
index 000000000..1e531e9dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png
new file mode 100644
index 000000000..4588e2514
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png
new file mode 100644
index 000000000..400f613b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png
new file mode 100644
index 000000000..f362acd1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css
new file mode 100644
index 000000000..a37315552
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css
@@ -0,0 +1,410 @@
+/********************************************************************
+Screen and Print Styles for the Wrap Plugin
+********************************************************************/
+
+/* tables in columns and boxes should span the whole width */
+.wrap_column table,
+.wrap_left table, .wrap_right table, .wrap_center table,
+.wrap_box table,
+.wrap_info table, .wrap_important table, .wrap_alert table, .wrap_tip table, .wrap_help table, .wrap_todo table, .wrap_download table {
+ width: 100%;
+}
+/* emulate a headline */
+.wrap_column em strong,
+.wrap_left em strong, .wrap_right em strong, .wrap_center em strong,
+.wrap_box em strong,
+.wrap_info em strong, .wrap_important em strong, .wrap_alert em strong, .wrap_tip em strong, .wrap_help em strong, .wrap_todo em strong, .wrap_download em strong {
+ font-size: 130%;
+ font-weight: bold;
+ font-style: normal;
+ display: block;
+}
+/* emulate a bigger headline with a bottom border */
+.wrap_column em strong em.u,
+.wrap_left em strong em.u, .wrap_right em strong em.u, .wrap_center em strong em.u,
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ font-size: 115%;
+ border-bottom: 1px solid __border__;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+}
+/* different bigger headline for safety notes */
+.wrap_danger em strong em.u, .wrap_warning em strong em.u, .wrap_caution em strong em.u, .wrap_notice em strong em.u, .wrap_safety em strong em.u {
+ font-size: 115%;
+ font-style: normal;
+ text-decoration: none;
+ display: block;
+ text-transform: uppercase;
+ border-bottom-width: 0;
+}
+/* change border colour of emulated headlines inside boxes to something more neutral
+ (to match all the different background colours) */
+.wrap_box em strong em.u,
+.wrap_info em strong em.u, .wrap_important em strong em.u, .wrap_alert em strong em.u, .wrap_tip em strong em.u, .wrap_help em strong em.u, .wrap_todo em strong em.u, .wrap_download em strong em.u {
+ border-bottom-color: #999;
+}
+
+
+/* columns
+********************************************************************/
+
+.wrap_left,
+.wrap_column {
+ float: left;
+ margin-right: 1.5em;
+}
+.wrap_right {
+ float: right;
+ margin-left: 1.5em;
+}
+.wrap_center {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+/*
+.wrap_column,
+.wrap_left,
+.wrap_right {
+ overflow: hidden;
+}
+*/
+.wrap_container {
+ margin-right: -1.5em;
+}
+
+
+/* alignments
+********************************************************************/
+
+.wrap_leftalign {
+ text-align: left;
+}
+.wrap_centeralign {
+ text-align: center;
+}
+.wrap_rightalign {
+ text-align: right;
+}
+.wrap_justify {
+ text-align: justify;
+}
+
+
+/* box
+********************************************************************/
+
+/* see styles for boxes and notes with icons in style.css */
+
+/*____________ rounded corners ____________*/
+/* (only for modern browsers) */
+
+div.wrap_round {
+ border-radius: 20px;
+ -moz-border-radius: 20px;
+ -webkit-border-radius: 20px;
+ -khtml-border-radius: 20px;
+}
+span.wrap_round {
+ border-radius: 2px;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ -khtml-border-radius: 2px;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_lo {
+ color: __text_neu__;
+ font-size: 85%;
+}
+div.wrap_em {
+ color: #c00;
+ font-weight: bold;
+}
+
+/* see styles for highlighted text in style.css */
+
+
+/* typography
+********************************************************************/
+
+/*____________ fonts ____________*/
+
+div.wrap_sansserif {
+ font-family: Verdana,Tahoma,Geneva,"DejaVu Sans","Bitstream Vera Sans","Liberation Sans", Arial,Helvetica,FreeSans,"Liberation Sans","Nimbus Sans L", sans-serif;
+}
+div.wrap_serif {
+ font-family: Georgia,Garamond,"Palatino Linotype","Book Antiqua",Palatino,Palladio,"URW Palladio L","Liberation Serif",Didot,Gentium,"Bitstream Charter","Century Schoolbook L", "Times New Roman",Times,"Nimbus Roman No9 L","FreeSerif", serif;
+}
+div.wrap_monospace {
+ font-family: Courier,"Courier New",FreeMono,"Nimbus Mono L","Liberation Mono", "Lucida Console",Monaco,"DejaVu Sans Mono","Bitstream Vera Sans Mono", monospace;
+}
+
+/*____________ font size ____________*/
+
+div.wrap_bigger {
+ font-size: 125%;
+}
+div.wrap_muchbigger {
+ font-size: 200%;
+}
+div.wrap_smaller {
+ font-size: 75%;
+}
+
+/*____________ font colours ____________*/
+
+div.wrap_fgred {
+ color: #900;
+}
+div.wrap_fggreen {
+ color: #090;
+}
+div.wrap_fgblue {
+ color: #009;
+}
+div.wrap_fgcyan {
+ color: #099;
+}
+div.wrap_fgviolet {
+ color: #909;
+}
+div.wrap_fgyellow {
+ color: #990;
+}
+div.wrap_fggrey {
+ color: #666;
+}
+div.wrap_fgblack {
+ color: #000;
+}
+
+/* see styles for background colours and white font colour in style.css */
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ indent ____________*/
+
+div.wrap_indent {
+ padding-left: 1.5em;
+}
+
+/*____________ outdent ____________*/
+
+div.wrap_outdent {
+ margin-left: -1.5em;
+}
+
+/*____________ word wrapping in pre ____________*/
+
+divdiv.wrap_prewrap pre {
+ white-space: pre-wrap;
+ word-wrap: break-word;/* for IE < 8 */
+ /* white-space: -moz-pre-wrap; for FF < 3 */
+}
+
+/*____________ spoiler ____________*/
+
+divdiv.wrap_spoiler {
+ margin-bottom: 1.5em;
+}
+/* see rest of spoiler styles in style.css */
+
+/*____________ clear float ____________*/
+
+div.wrap_clear {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ font-size: 1px;
+ visibility: hidden;
+ overflow: hidden;
+}
+
+/*____________ hide ____________*/
+
+div.wrap_hide {
+ display: none;
+}
+
+
+/* STYLE.CSS */
+
+/* box
+********************************************************************/
+
+.wrap_box {
+ background: __background_alt__;
+ color: __text__;
+/*
+ overflow: hidden;
+*/
+}
+div.wrap_box,
+div.wrap_danger, div.wrap_warning, div.wrap_caution, div.wrap_notice, div.wrap_safety {
+ padding: 1em 1em .5em;
+ margin-bottom: 1.5em;
+}
+span.wrap_box,
+span.wrap_danger, span.wrap_warning, span.wrap_caution, span.wrap_notice, span.wrap_safety {
+ padding: 0 .3em;
+}
+
+/*____________ notes with icons ____________*/
+
+/* general styles for all note divs */
+div.wrap_info, div.wrap_important, div.wrap_alert, div.wrap_tip, div.wrap_help, div.wrap_todo, div.wrap_download {
+ padding: 1em 1em .5em 70px;
+ margin-bottom: 1.5em;
+ min-height: 68px;
+ background-position: 10px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html div.wrap_info, * html div.wrap_important, * html div.wrap_alert, * html div.wrap_tip, * html div.wrap_help, * html div.wrap_todo, * html div.wrap_download {
+ height: 68px;
+}
+/* general styles for all note spans */
+span.wrap_info, span.wrap_important, span.wrap_alert, span.wrap_tip, span.wrap_help, span.wrap_todo, span.wrap_download {
+ padding: 0 2px 0 20px;
+ min-height: 20px;
+ background-position: 2px 50%;
+ background-repeat: no-repeat;
+ color: #000;
+}
+/* special treatment for IE6 */
+* html span.wrap_info, * html span.wrap_important, * html span.wrap_alert, * html span.wrap_tip, * html span.wrap_help, * html span.wrap_todo, * html span.wrap_download {
+ height: 20px;
+}
+
+/*____________ info ____________*/
+.wrap_info { background-color: #d1d7df; }
+div.wrap_info { background-image: url(../../../wrap/images/note/48/info.png); }
+span.wrap_info { background-image: url(../../../wrap/images/note/16/info.png); }
+
+/*____________ important ____________*/
+.wrap_important { background-color: #ffd39f; }
+div.wrap_important { background-image: url(../../../wrap/images/note/48/important.png); }
+span.wrap_important { background-image: url(../../../wrap/images/note/16/important.png); }
+
+/*____________ alert ____________*/
+.wrap_alert { background-color: #ffbcaf; }
+div.wrap_alert { background-image: url(../../../wrap/images/note/48/alert.png); }
+span.wrap_alert { background-image: url(../../../wrap/images/note/16/alert.png); }
+
+/*____________ tip ____________*/
+.wrap_tip { background-color: #fff79f; }
+div.wrap_tip { background-image: url(../../../wrap/images/note/48/tip.png); }
+span.wrap_tip { background-image: url(../../../wrap/images/note/16/tip.png); }
+
+/*____________ help ____________*/
+.wrap_help { background-color: #dcc2ef; }
+div.wrap_help { background-image: url(../../../wrap/images/note/48/help.png); }
+span.wrap_help { background-image: url(../../../wrap/images/note/16/help.png); }
+
+/*____________ todo ____________*/
+.wrap_todo { background-color: #c2efdd; }
+div.wrap_todo { background-image: url(../../../wrap/images/note/48/todo.png); }
+span.wrap_todo { background-image: url(../../../wrap/images/note/16/todo.png); }
+
+/*____________ download ____________*/
+.wrap_download { background-color: #d6efc2; }
+div.wrap_download { background-image: url(../../../wrap/images/note/48/download.png); }
+span.wrap_download { background-image: url(../../../wrap/images/note/16/download.png); }
+
+
+/*____________ safety notes ____________*/
+
+.wrap_danger {
+ background-color: #c00;
+ color: #fff;
+}
+.wrap_warning {
+ background-color: #f60;
+ color: #000;
+}
+.wrap_caution {
+ background-color: #ff0;
+ color: #000;
+}
+.wrap_notice {
+ background-color: #06f;
+ color: #fff;
+}
+.wrap_safety {
+ background-color: #090;
+ color: #fff;
+}
+
+
+/* mark
+********************************************************************/
+
+div.wrap_hi {
+ background-color: #ff9;
+}
+
+/* typography
+********************************************************************/
+
+/*____________ font colours ____________*/
+
+div.wrap_fgwhite {
+ color: #fff;
+}
+
+/*____________ background colours ____________*/
+
+div.wrap_bgred {
+ background-color: #fcc;
+}
+div.wrap_bggreen {
+ background-color: #cfc;
+}
+div.wrap_bgblue {
+ background-color: #ccf;
+}
+div.wrap_bgcyan {
+ background-color: #9ff;
+}
+div.wrap_bgviolet {
+ background-color: #f9f;
+}
+div.wrap_bgyellow {
+ background-color: #ff9;
+}
+div.wrap_bggrey {
+ background-color: #ccc;
+}
+div.wrap_bgwhite {
+ background-color: #fff;
+}
+div.wrap_bgblack {
+ background-color: #000;
+}
+
+
+/* miscellaneous
+********************************************************************/
+
+/*____________ spoiler ____________*/
+
+div.wrap_spoiler {
+ background-color: __background__ !important;
+ color: __background__ !important;
+ border: 1px dotted red;
+}
+
+/*____________ only print ____________*/
+
+div.wrap_onlyprint {
+ display: none;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png
new file mode 100644
index 000000000..5610884d9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png
new file mode 100644
index 000000000..3a14a577e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php
new file mode 100644
index 000000000..633e001d2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php
@@ -0,0 +1,281 @@
+<?php
+/**
+ * Syntax Plugin Prototype
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_INC.'inc/parser/parser.php');
+
+/**
+ * All DokuWiki plugins to extend the parser/rendering mechanism
+ * need to inherit from this class
+ */
+class DokuWiki_Syntax_Plugin extends Doku_Parser_Mode {
+
+ var $allowedModesSetup = false;
+ var $localised = false; // set to true by setupLocale() after loading language dependent strings
+ var $lang = array(); // array to hold language dependent strings, best accessed via ->getLang()
+ var $configloaded = false; // set to true by loadConfig() after loading plugin configuration variables
+ var $conf = array(); // array to hold plugin settings, best accessed via ->getConf()
+
+ /**
+ * General Info
+ *
+ * Needs to return a associative array with the following values:
+ *
+ * author - Author of the plugin
+ * email - Email address to contact the author
+ * date - Last modified date of the plugin in YYYY-MM-DD format
+ * name - Name of the plugin
+ * desc - Short description of the plugin (Text only)
+ * url - Website with more information on the plugin (eg. syntax description)
+ */
+ function getInfo(){
+ $parts = explode('_',get_class($this));
+ $info = DOKU_PLUGIN.'/'.$parts[2].'/plugin.info.txt';
+ if(@file_exists($info)) return confToHash($info);
+ trigger_error('getInfo() not implemented in '.get_class($this).' and '.$info.' not found', E_USER_WARNING);
+ }
+
+ /**
+ * Syntax Type
+ *
+ * Needs to return one of the mode types defined in $PARSER_MODES in parser.php
+ */
+ function getType(){
+ trigger_error('getType() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ /**
+ * Allowed Mode Types
+ *
+ * Defines the mode types for other dokuwiki markup that maybe nested within the
+ * plugin's own markup. Needs to return an array of one or more of the mode types
+ * defined in $PARSER_MODES in parser.php
+ */
+ function getAllowedTypes() {
+ return array();
+ }
+
+ /**
+ * Paragraph Type
+ *
+ * Defines how this syntax is handled regarding paragraphs. This is important
+ * for correct XHTML nesting. Should return one of the following:
+ *
+ * 'normal' - The plugin can be used inside paragraphs
+ * 'block' - Open paragraphs need to be closed before plugin output
+ * 'stack' - Special case. Plugin wraps other paragraphs.
+ *
+ * @see Doku_Handler_Block
+ */
+ function getPType(){
+ return 'normal';
+ }
+
+ /**
+ * Handler to prepare matched data for the rendering process
+ *
+ * This function can only pass data to render() via its return value - render()
+ * may be not be run during the object's current life.
+ *
+ * Usually you should only need the $match param.
+ *
+ * @param $match string The text matched by the patterns
+ * @param $state int The lexer state for the match
+ * @param $pos int The character position of the matched text
+ * @param $handler ref Reference to the Doku_Handler object
+ * @return array Return an array with all data you want to use in render
+ */
+ function handle($match, $state, $pos, &$handler){
+ trigger_error('handle() not implemented in '.get_class($this), E_USER_WARNING);
+ }
+
+ /**
+ * Handles the actual output creation.
+ *
+ * The function must not assume any other of the classes methods have been run
+ * during the object's current life. The only reliable data it receives are its
+ * parameters.
+ *
+ * The function should always check for the given output format and return false
+ * when a format isn't supported.
+ *
+ * $renderer contains a reference to the renderer object which is
+ * currently handling the rendering. You need to use it for writing
+ * the output. How this is done depends on the renderer used (specified
+ * by $format
+ *
+ * The contents of the $data array depends on what the handler() function above
+ * created
+ *
+ * @param $format string output format being rendered
+ * @param $renderer ref reference to the current renderer object
+ * @param $data array data created by handler()
+ * @return boolean rendered correctly?
+ */
+ function render($format, &$renderer, $data) {
+ trigger_error('render() not implemented in '.get_class($this), E_USER_WARNING);
+
+ }
+
+ /**
+ * There should be no need to override these functions
+ */
+ function accepts($mode) {
+
+ if (!$this->allowedModesSetup) {
+ global $PARSER_MODES;
+
+ $allowedModeTypes = $this->getAllowedTypes();
+ foreach($allowedModeTypes as $mt) {
+ $this->allowedModes = array_merge($this->allowedModes, $PARSER_MODES[$mt]);
+ }
+
+ $idx = array_search(substr(get_class($this), 7), (array) $this->allowedModes);
+ if ($idx !== false) {
+ unset($this->allowedModes[$idx]);
+ }
+ $this->allowedModesSetup = true;
+ }
+
+ return parent::accepts($mode);
+ }
+
+ // plugin introspection methods
+ // extract from class name, format = <plugin type>_plugin_<name>[_<component name>]
+ function getPluginType() { list($t) = explode('_', get_class($this), 2); return $t; }
+ function getPluginName() { list($t, $p, $n) = explode('_', get_class($this), 4); return $n; }
+ function getPluginComponent() { list($t, $p, $n, $c) = explode('_', get_class($this), 4); return (isset($c)?$c:''); }
+
+ // localisation methods
+ /**
+ * getLang($id)
+ *
+ * use this function to access plugin language strings
+ * to try to minimise unnecessary loading of the strings when the plugin doesn't require them
+ * e.g. when info plugin is querying plugins for information about themselves.
+ *
+ * @param $id id of the string to be retrieved
+ * @return string string in appropriate language or english if not available
+ */
+ function getLang($id) {
+ if (!$this->localised) $this->setupLocale();
+
+ return (isset($this->lang[$id]) ? $this->lang[$id] : '');
+ }
+
+ /**
+ * locale_xhtml($id)
+ *
+ * retrieve a language dependent wiki page and pass to xhtml renderer for display
+ * plugin equivalent of p_locale_xhtml()
+ *
+ * @param $id id of language dependent wiki page
+ * @return string parsed contents of the wiki page in xhtml format
+ */
+ function locale_xhtml($id) {
+ return p_cached_output($this->localFN($id));
+ }
+
+ /**
+ * localFN($id)
+ * prepends appropriate path for a language dependent filename
+ * plugin equivalent of localFN()
+ */
+ function localFN($id) {
+ global $conf;
+ $plugin = $this->getPluginName();
+ $file = DOKU_PLUGIN.$plugin.'/lang/'.$conf['lang'].'/'.$id.'.txt';
+ if(!@file_exists($file)){
+ //fall back to english
+ $file = DOKU_PLUGIN.$plugin.'/lang/en/'.$id.'.txt';
+ }
+ return $file;
+ }
+
+ /**
+ * setupLocale()
+ * reads all the plugins language dependent strings into $this->lang
+ * this function is automatically called by getLang()
+ */
+ function setupLocale() {
+ if ($this->localised) return;
+
+ global $conf; // definitely don't invoke "global $lang"
+ $path = DOKU_PLUGIN.$this->getPluginName().'/lang/';
+
+ // don't include once, in case several plugin components require the same language file
+ @include($path.'en/lang.php');
+ if ($conf['lang'] != 'en') @include($path.$conf['lang'].'/lang.php');
+
+ $this->lang = $lang;
+ $this->localised = true;
+ }
+
+ // configuration methods
+ /**
+ * getConf($setting)
+ *
+ * use this function to access plugin configuration variables
+ */
+ function getConf($setting){
+
+ if (!$this->configloaded){ $this->loadConfig(); }
+
+ return $this->conf[$setting];
+ }
+
+ /**
+ * loadConfig()
+ * merges the plugin's default settings with any local settings
+ * this function is automatically called through getConf()
+ */
+ function loadConfig(){
+ global $conf;
+
+ $defaults = $this->readDefaultSettings();
+ $plugin = $this->getPluginName();
+
+ foreach ($defaults as $key => $value) {
+ if (isset($conf['plugin'][$plugin][$key])) continue;
+ $conf['plugin'][$plugin][$key] = $value;
+ }
+
+ $this->configloaded = true;
+ $this->conf =& $conf['plugin'][$plugin];
+ }
+
+ /**
+ * read the plugin's default configuration settings from conf/default.php
+ * this function is automatically called through getConf()
+ *
+ * @return array setting => value
+ */
+ function readDefaultSettings() {
+
+ $path = DOKU_PLUGIN.$this->getPluginName().'/conf/';
+ $conf = array();
+
+ if (@file_exists($path.'default.php')) {
+ include($path.'default.php');
+ }
+
+ return $conf;
+ }
+
+ /**
+ * Allow the plugin to prevent DokuWiki creating a second instance of itself
+ *
+ * @return bool true if the plugin can not be instantiated more than once
+ */
+ function isSingleton() {
+ return false;
+ }
+}
+//Setup VIM: ex: et ts=4 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js
new file mode 100644
index 000000000..96989731c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js
@@ -0,0 +1,207 @@
+// TBT javascript extensions: rgareus 2008
+// TBT javascript prototype: Jaromil 2007
+// reference javascript typewriter documentation: F. Permadi 2002
+// GNU GPL
+
+
+function TBT() {
+ this.setRowCarriageReturn = setRowCarriageReturn;
+ this.setXhtml = setXhtml;
+ this.setSpeed = setSpeed;
+ this.startTyping = startTyping;
+ this.feed = feed;
+ var currentChar;
+ var destination;
+ var cur_x;
+ var cur_y;
+ var row;
+ var col;
+ var text;
+ var render_text;
+ var rowsize;
+ var colsize;
+ var recording;
+ var cr;
+ var cc;
+ var rowcr=0; // config option; do a CR (\r) when moving the cursor up/down
+ var xhtml=0; // html or xhtml
+ var speed=1; // time factor.
+
+ function setSpeed(s) {
+ if (s> 0.01 && s< 20) this.speed=s;
+ else speed=1.0;
+ }
+
+ function setXhtml(onoff) {
+ xhtml=onoff?true:false;
+ }
+
+ function setRowCarriageReturn(onoff) {
+ rowcr=onoff?true:false;
+ }
+
+ function startTyping(destinationParam, tbtrecord) {
+ currentChar = 0;
+ destination = destinationParam;
+ recording = tbtrecord;
+
+ // global text positions
+ row = 0;
+ col = 0;
+ // cursor positions
+ cur_x = 0;
+ cur_y = 0;
+ // length counters
+ rowsize = 0;
+ colsize = 0;
+ cr = 0;
+ cc = 0;
+
+ // text bidimensional array
+ text = new Array();
+ text[0] = new Array();
+ // text render buffer
+ render_text = "";
+
+ setTimeout(this.feed, speed*recording[currentChar][1] );
+ }
+
+ function feed() {
+ var dest = document.getElementById(destination);
+
+ if (dest) {
+ // && dest.innerHTML)
+
+ /* TODO: handle movement keys:
+ KEY_BACKSPACE 275, 127, 272
+ KEY_PAGE_UP 261 ; KEY_PAGE_DOWN 262
+ KEY_HOME 263 ; KEY_DELETE 275
+ port the abstract_console from slw in js
+ */
+
+ // get the next char
+ switch( recording[currentChar][0] ) {
+ case 10: // NEWLINE
+ case 13: // RETURN
+ cur_y++; row++;
+ cur_x = 0; col = 0;
+ if(row >= text.length) {
+ text[row] = new Array();
+ }
+ break;
+
+ case 8: // standard ASCII BACKSPACE
+ case 127: // other low level BACKSPACE codes
+ case 272: // (APPLE BACKSPACE)
+ case 275: // (SOMETIMES!?)
+
+ if(col > 0) // delete if not at the beginning of line
+ text[row].splice(col-1,1);
+
+ if(cur_x > 0) {
+ cur_x--;
+ col--;
+ } else { // backspace at the beginning of a line
+ // move everything up one line
+ // TODO
+ }
+ break;
+
+ case 257: // UP
+ if(row <= 0) break;
+ cur_y--; row--;
+ if (rowcr) { col=0; cur_x=0; }
+ break;
+ case 258: // DOWN
+ if(row >= text.length) break;
+ cur_y++; row++;
+ if (rowcr) { col=0; cur_x=0; }
+ break;
+ case 259: // LEFT
+ if(cur_x <= 0) break;
+ cur_x--;
+ col--;
+ break;
+ case 260: // RIGHT
+ // if(cur_x >= text[row].length) break;
+ cur_x++;
+ col++;
+ break;
+
+ default:
+ if (!text[row]) text[row] = new Array();
+ text[row].splice(col,0,recording[currentChar][0]);
+ cur_x++; col++;
+ break;
+ }
+
+ // RENDER TEXT
+ render_text = "";
+
+ rowsize = text.length;
+ for(cr = 0; cr < rowsize; cr++) {
+
+ colsize = text[cr].length;
+
+ if(cur_y == cr) { // cursor row
+
+ for(cc = 0; cc < colsize; cc++) {
+
+ if(cur_x == cc) { // draw cursor
+ render_text += "<u>";
+ render_text += String.fromCharCode( text[cr][cc] );
+ render_text += "</u>";
+ } else // not yet on cursor
+ render_text += String.fromCharCode( text[cr][cc] );
+
+ }
+
+ // draw cursor at the end of line
+ if(cur_x >= colsize) render_text += "_";
+
+ } else // no need to draw the cursor
+ for(cc = 0; cc < colsize; cc++)
+ render_text += String.fromCharCode( text[cr][cc] );
+
+
+ // newline
+ render_text += xhtml?"<br/>":"<br>";
+ }
+
+ // render_text += String.fromCharCode( recording[currentChar][0] );
+ dest.innerHTML = render_text;
+
+
+
+ // DOM compliant alternative:
+ // var textNode=document.createTextNode(text);
+ // dest.replaceChild(textNode, dest.childNodes[0]);
+
+
+
+ // go to the next entry
+ currentChar++;
+
+
+ if (currentChar >= recording.length) {
+
+ // end of record, restart after 5 seconds
+ currentChar=0;
+ render_text="";
+
+ // clear all text buffer
+ for(cr=0; cr < text.length; cr++)
+ delete text[cr];
+ delete text;
+
+ // end of text
+
+ } else {
+
+ // RECURSION IS TIME -jrml 31jan2007
+ setTimeout(feed, speed*recording[currentChar][1] );
+ }
+ }
+ }
+};
+//Setup VIM: ex: sw=4 ts=8 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css
new file mode 100644
index 000000000..50c672d78
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css
@@ -0,0 +1,7 @@
+div.dokuwiki div.tbtdest {
+ font-family:monospace;
+}
+div.dokuwiki span.tbtbutton {
+ border-width:2px !important;
+ cursor:pointer;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php
new file mode 100644
index 000000000..28c4363e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * render time based text
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Robin Gareus <robin@gareus.org>
+ */
+
+if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+require_once(DOKU_PLUGIN.'syntax.php');
+require_once(DOKU_INC.'inc/search.php');
+require_once(DOKU_INC.'inc/JpegMeta.php');
+
+class syntax_plugin_tbt extends DokuWiki_Syntax_Plugin {
+ /**
+ * return some info
+ */
+ function getInfo(){
+ return array(
+ 'author' => 'Robin Gareus',
+ 'email' => 'robin@gareus.org',
+ 'date' => '2008-12-28',
+ 'name' => 'tbt',
+ 'desc' => 'render time based text.',
+ 'url' => 'http://mir.dnsalias.com/wiki/tbt',
+ );
+ }
+
+ function getType(){ return 'substition'; }
+ function getPType(){ return 'block'; }
+ function getSort(){ return 301; }
+
+ /**
+ * Connect pattern to lexer
+ */
+ function connectTo($mode) {
+ $this->Lexer->addSpecialPattern('\{\{tbt>[^}]*\}\}',$mode,'plugin_tbt');
+ }
+
+
+ /**
+ * Handle the match
+ */
+ function handle($match, $state, $pos, &$handler){
+ $data = array();
+
+ if (!strncasecmp($match,"{{tbt>",6) ) {
+ $match = substr($match,6,-2);
+ }
+ $data['tbt'] = $match;
+ return $data;
+ }
+
+ /**
+ * Create output
+ */
+ function render($mode, &$renderer, $data) {
+ global $myfckinguniqid;
+ if (empty($myfckinguniqid))$myfckinguniqid=1;
+ else $myfckinguniqid++;
+ $uid=$myfckinguniqid;
+
+ if($mode == 'xhtml'){
+ $renderer->doc .= '<span onclick="tbt_'.$uid.'.startTyping(\'textDestination_'.$uid.'\', TimeBasedText_'.$uid.');" class="toc_close tbtbutton">Restart</span><br/><br/>'."\n";
+ $renderer->doc .= '<div id="textDestination_'.$uid.'" class="tbtdest"> </div>';
+ $renderer->doc .= '<script language="JavaScript"><!--'."\n";
+ $renderer->doc .= 'var TimeBasedText_'.$uid.'='.$data['tbt'].";\n\n";
+ $renderer->doc .= 'var tbt_'.$uid.' = new TBT();'."\n";
+ $renderer->doc .= 'tbt_'.$uid.'.setRowCarriageReturn(1);'."\n";
+ $renderer->doc .= 'tbt_'.$uid.'.setXhtml(1);'."\n";
+ $renderer->doc .= 'tbt_'.$uid.'.startTyping("textDestination_'.$uid.'", TimeBasedText_'.$uid.');'."\n";
+ $renderer->doc .= '//--></script>'."\n";
+ return true;
+ }
+ return false;
+ }
+}
+//Setup VIM: ex: et sw=2 ts=2 enc=utf-8 :
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php
new file mode 100644
index 000000000..da6029bbf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php
@@ -0,0 +1,627 @@
+<?php
+/*
+ * User Manager
+ *
+ * Dokuwiki Admin Plugin
+ *
+ * This version of the user manager has been modified to only work with
+ * objectified version of auth system
+ *
+ * @author neolao <neolao@neolao.com>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+// must be run within Dokuwiki
+if(!defined('DOKU_INC')) die();
+
+if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+if(!defined('DOKU_PLUGIN_IMAGES')) define('DOKU_PLUGIN_IMAGES',DOKU_BASE.'lib/plugins/usermanager/images/');
+require_once(DOKU_PLUGIN.'admin.php');
+
+/**
+ * All DokuWiki plugins to extend the admin function
+ * need to inherit from this class
+ */
+class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
+
+ var $_auth = null; // auth object
+ var $_user_total = 0; // number of registered users
+ var $_filter = array(); // user selection filter(s)
+ var $_start = 0; // index of first user to be displayed
+ var $_last = 0; // index of the last user to be displayed
+ var $_pagesize = 20; // number of users to list on one page
+ var $_edit_user = ''; // set to user selected for editing
+ var $_edit_userdata = array();
+ var $_disabled = ''; // if disabled set to explanatory string
+
+ /**
+ * Constructor
+ */
+ function admin_plugin_usermanager(){
+ global $auth;
+
+ $this->setupLocale();
+
+ if (!isset($auth)) {
+ $this->disabled = $this->lang['noauth'];
+ } else if (!$auth->canDo('getUsers')) {
+ $this->disabled = $this->lang['nosupport'];
+ } else {
+
+ // we're good to go
+ $this->_auth = & $auth;
+
+ }
+ }
+
+ /**
+ * return some info
+ */
+ function getInfo(){
+
+ return array(
+ 'author' => 'Chris Smith',
+ 'email' => 'chris@jalakai.co.uk',
+ 'date' => '2008-09-17',
+ 'name' => 'User Manager',
+ 'desc' => 'Manage users '.$this->disabled,
+ 'url' => 'http://dokuwiki.org/plugin:usermanager',
+ );
+ }
+ /**
+ * return prompt for admin menu
+ */
+ function getMenuText($language) {
+
+ if (!is_null($this->_auth))
+ return parent::getMenuText($language);
+
+ return $this->getLang('menu').' '.$this->disabled;
+ }
+
+ /**
+ * return sort order for position in admin menu
+ */
+ function getMenuSort() {
+ return 2;
+ }
+
+ /**
+ * handle user request
+ */
+ function handle() {
+ global $ID;
+
+ if (is_null($this->_auth)) return false;
+
+ // extract the command and any specific parameters
+ // submit button name is of the form - fn[cmd][param(s)]
+ $fn = $_REQUEST['fn'];
+
+ if (is_array($fn)) {
+ $cmd = key($fn);
+ $param = is_array($fn[$cmd]) ? key($fn[$cmd]) : null;
+ } else {
+ $cmd = $fn;
+ $param = null;
+ }
+
+ if ($cmd != "search") {
+ if (!empty($_REQUEST['start']))
+ $this->_start = $_REQUEST['start'];
+ $this->_filter = $this->_retrieveFilter();
+ }
+
+ switch($cmd){
+ case "add" : $this->_addUser(); break;
+ case "delete" : $this->_deleteUser(); break;
+ case "modify" : $this->_modifyUser(); break;
+ case "edit" : $this->_editUser($param); break;
+ case "search" : $this->_setFilter($param);
+ $this->_start = 0;
+ break;
+ }
+
+ $this->_user_total = $this->_auth->canDo('getUserCount') ? $this->_auth->getUserCount($this->_filter) : -1;
+
+ // page handling
+ switch($cmd){
+ case 'start' : $this->_start = 0; break;
+ case 'prev' : $this->_start -= $this->_pagesize; break;
+ case 'next' : $this->_start += $this->_pagesize; break;
+ case 'last' : $this->_start = $this->_user_total; break;
+ }
+ $this->_validatePagination();
+ }
+
+ /**
+ * output appropriate html
+ */
+ function html() {
+ global $ID;
+
+ if(is_null($this->_auth)) {
+ print $this->lang['badauth'];
+ return false;
+ }
+
+ $user_list = $this->_auth->retrieveUsers($this->_start, $this->_pagesize, $this->_filter);
+ $users = array_keys($user_list);
+
+ $page_buttons = $this->_pagination();
+ $delete_disable = $this->_auth->canDo('delUser') ? '' : 'disabled="disabled"';
+
+ $editable = $this->_auth->canDo('UserMod');
+
+ print $this->locale_xhtml('intro');
+ print $this->locale_xhtml('list');
+
+ ptln("<div id=\"user__manager\">");
+ ptln("<div class=\"level2\">");
+
+ if ($this->_user_total > 0) {
+ ptln("<p>".sprintf($this->lang['summary'],$this->_start+1,$this->_last,$this->_user_total,$this->_auth->getUserCount())."</p>");
+ } else {
+ ptln("<p>".sprintf($this->lang['nonefound'],$this->_auth->getUserCount())."</p>");
+ }
+ ptln("<form action=\"".wl($ID)."\" method=\"post\">");
+ formSecurityToken();
+ ptln(" <table class=\"inline\">");
+ ptln(" <thead>");
+ ptln(" <tr>");
+ ptln(" <th>&nbsp;</th><th>".$this->lang["user_id"]."</th><th>".$this->lang["user_name"]."</th><th>".$this->lang["user_mail"]."</th><th>".$this->lang["user_groups"]."</th>");
+ ptln(" </tr>");
+
+ ptln(" <tr>");
+ ptln(" <td class=\"rightalign\"><input type=\"image\" src=\"".DOKU_PLUGIN_IMAGES."search.png\" name=\"fn[search][new]\" title=\"".$this->lang['search_prompt']."\" alt=\"".$this->lang['search']."\" class=\"button\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"userid\" class=\"edit\" value=\"".$this->_htmlFilter('user')."\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"username\" class=\"edit\" value=\"".$this->_htmlFilter('name')."\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"usermail\" class=\"edit\" value=\"".$this->_htmlFilter('mail')."\" /></td>");
+ ptln(" <td><input type=\"text\" name=\"usergroups\" class=\"edit\" value=\"".$this->_htmlFilter('grps')."\" /></td>");
+ ptln(" </tr>");
+ ptln(" </thead>");
+
+ if ($this->_user_total) {
+ ptln(" <tbody>");
+ foreach ($user_list as $user => $userinfo) {
+ extract($userinfo);
+ $groups = join(', ',$grps);
+ ptln(" <tr class=\"user_info\">");
+ ptln(" <td class=\"centeralign\"><input type=\"checkbox\" name=\"delete[".$user."]\" ".$delete_disable." /></td>");
+ if ($editable) {
+ ptln(" <td><a href=\"".wl($ID,array('fn[edit]['.hsc($user).']' => 1,
+ 'do' => 'admin',
+ 'page' => 'usermanager',
+ 'sectok' => getSecurityToken())).
+ "\" title=\"".$this->lang['edit_prompt']."\">".hsc($user)."</a></td>");
+ } else {
+ ptln(" <td>".hsc($user)."</td>");
+ }
+ ptln(" <td>".hsc($name)."</td><td>".hsc($mail)."</td><td>".hsc($groups)."</td>");
+ ptln(" </tr>");
+ }
+ ptln(" </tbody>");
+ }
+
+ ptln(" <tbody>");
+ ptln(" <tr><td colspan=\"5\" class=\"centeralign\">");
+ ptln(" <span class=\"medialeft\">");
+ ptln(" <input type=\"submit\" name=\"fn[delete]\" ".$delete_disable." class=\"button\" value=\"".$this->lang['delete_selected']."\" id=\"usrmgr__del\" />");
+ ptln(" </span>");
+ ptln(" <span class=\"mediaright\">");
+ ptln(" <input type=\"submit\" name=\"fn[start]\" ".$page_buttons['start']." class=\"button\" value=\"".$this->lang['start']."\" />");
+ ptln(" <input type=\"submit\" name=\"fn[prev]\" ".$page_buttons['prev']." class=\"button\" value=\"".$this->lang['prev']."\" />");
+ ptln(" <input type=\"submit\" name=\"fn[next]\" ".$page_buttons['next']." class=\"button\" value=\"".$this->lang['next']."\" />");
+ ptln(" <input type=\"submit\" name=\"fn[last]\" ".$page_buttons['last']." class=\"button\" value=\"".$this->lang['last']."\" />");
+ ptln(" </span>");
+ ptln(" <input type=\"submit\" name=\"fn[search][clear]\" class=\"button\" value=\"".$this->lang['clear']."\" />");
+ ptln(" <input type=\"hidden\" name=\"do\" value=\"admin\" />");
+ ptln(" <input type=\"hidden\" name=\"page\" value=\"usermanager\" />");
+
+ $this->_htmlFilterSettings(2);
+
+ ptln(" </td></tr>");
+ ptln(" </tbody>");
+ ptln(" </table>");
+
+ ptln("</form>");
+ ptln("</div>");
+
+ $style = $this->_edit_user ? " class=\"edit_user\"" : "";
+
+ if ($this->_auth->canDo('addUser')) {
+ ptln("<div".$style.">");
+ print $this->locale_xhtml('add');
+ ptln(" <div class=\"level2\">");
+
+ $this->_htmlUserForm('add',null,array(),4);
+
+ ptln(" </div>");
+ ptln("</div>");
+ }
+
+ if($this->_edit_user && $this->_auth->canDo('UserMod')){
+ ptln("<div".$style." id=\"scroll__here\">");
+ print $this->locale_xhtml('edit');
+ ptln(" <div class=\"level2\">");
+
+ $this->_htmlUserForm('modify',$this->_edit_user,$this->_edit_userdata,4);
+
+ ptln(" </div>");
+ ptln("</div>");
+ }
+ ptln("</div>");
+ }
+
+
+ /**
+ * @todo disable fields which the backend can't change
+ */
+ function _htmlUserForm($cmd,$user='',$userdata=array(),$indent=0) {
+ global $conf;
+ global $ID;
+
+ $name = $mail = $groups = '';
+ $notes = array();
+
+ if ($user) {
+ extract($userdata);
+ if (!empty($grps)) $groups = join(',',$grps);
+ } else {
+ $notes[] = sprintf($this->lang['note_group'],$conf['defaultgroup']);
+ }
+
+ ptln("<form action=\"".wl($ID)."\" method=\"post\">",$indent);
+ formSecurityToken();
+ ptln(" <table class=\"inline\">",$indent);
+ ptln(" <thead>",$indent);
+ ptln(" <tr><th>".$this->lang["field"]."</th><th>".$this->lang["value"]."</th></tr>",$indent);
+ ptln(" </thead>",$indent);
+ ptln(" <tbody>",$indent);
+
+ $this->_htmlInputField($cmd."_userid", "userid", $this->lang["user_id"], $user, $this->_auth->canDo("modLogin"), $indent+6);
+ $this->_htmlInputField($cmd."_userpass", "userpass", $this->lang["user_pass"], "", $this->_auth->canDo("modPass"), $indent+6);
+ $this->_htmlInputField($cmd."_username", "username", $this->lang["user_name"], $name, $this->_auth->canDo("modName"), $indent+6);
+ $this->_htmlInputField($cmd."_usermail", "usermail", $this->lang["user_mail"], $mail, $this->_auth->canDo("modMail"), $indent+6);
+ $this->_htmlInputField($cmd."_usergroups","usergroups",$this->lang["user_groups"],$groups,$this->_auth->canDo("modGroups"),$indent+6);
+
+ if ($this->_auth->canDo("modPass")) {
+ $notes[] = $this->lang['note_pass'];
+ if ($user) {
+ $notes[] = $this->lang['note_notify'];
+ }
+
+ ptln("<tr><td><label for=\"".$cmd."_usernotify\" >".$this->lang["user_notify"].": </label></td><td><input type=\"checkbox\" id=\"".$cmd."_usernotify\" name=\"usernotify\" value=\"1\" /></td></tr>", $indent);
+ }
+
+ ptln(" </tbody>",$indent);
+ ptln(" <tbody>",$indent);
+ ptln(" <tr>",$indent);
+ ptln(" <td colspan=\"2\">",$indent);
+ ptln(" <input type=\"hidden\" name=\"do\" value=\"admin\" />",$indent);
+ ptln(" <input type=\"hidden\" name=\"page\" value=\"usermanager\" />",$indent);
+
+ // save current $user, we need this to access details if the name is changed
+ if ($user)
+ ptln(" <input type=\"hidden\" name=\"userid_old\" value=\"".$user."\" />",$indent);
+
+ $this->_htmlFilterSettings($indent+10);
+
+ ptln(" <input type=\"submit\" name=\"fn[".$cmd."]\" class=\"button\" value=\"".$this->lang[$cmd]."\" />",$indent);
+ ptln(" </td>",$indent);
+ ptln(" </tr>",$indent);
+ ptln(" </tbody>",$indent);
+ ptln(" </table>",$indent);
+
+ foreach ($notes as $note)
+ ptln("<div class=\"fn\">".$note."</div>",$indent);
+
+ ptln("</form>",$indent);
+ }
+
+ function _htmlInputField($id, $name, $label, $value, $cando, $indent=0) {
+ $class = $cando ? '' : ' class="disabled"';
+ $disabled = $cando ? '' : ' disabled="disabled"';
+ echo str_pad('',$indent);
+
+ $fieldtype = ($name == "userpass") ? 'password' : 'text';
+
+ echo "<tr $class>";
+ echo "<td><label for=\"$id\" >$label: </label></td>";
+ echo "<td>";
+ if($cando){
+ echo "<input type=\"$fieldtype\" id=\"$id\" name=\"$name\" value=\"$value\" class=\"edit\" />";
+ }else{
+ echo "<input type=\"hidden\" name=\"$name\" value=\"$value\" />";
+ echo "<input type=\"$fieldtype\" id=\"$id\" name=\"$name\" value=\"$value\" class=\"edit disabled\" disabled=\"disabled\" />";
+ }
+ echo "</td>";
+ echo "</tr>";
+ }
+
+ function _htmlFilter($key) {
+ if (empty($this->_filter)) return '';
+ return (isset($this->_filter[$key]) ? hsc($this->_filter[$key]) : '');
+ }
+
+ function _htmlFilterSettings($indent=0) {
+
+ ptln("<input type=\"hidden\" name=\"start\" value=\"".$this->_start."\" />",$indent);
+
+ foreach ($this->_filter as $key => $filter) {
+ ptln("<input type=\"hidden\" name=\"filter[".$key."]\" value=\"".hsc($filter)."\" />",$indent);
+ }
+ }
+
+ function _addUser(){
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('addUser')) return false;
+
+ list($user,$pass,$name,$mail,$grps) = $this->_retrieveUser();
+ if (empty($user)) return false;
+
+ if ($this->_auth->canDo('modPass')){
+ if (empty($pass)){
+ if(!empty($_REQUEST['usernotify'])){
+ $pass = auth_pwgen();
+ } else {
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ }
+ } else {
+ if (!empty($pass)){
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ }
+
+ if ($this->_auth->canDo('modName')){
+ if (empty($name)){
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ } else {
+ if (!empty($name)){
+ return false;
+ }
+ }
+
+ if ($this->_auth->canDo('modMail')){
+ if (empty($mail)){
+ msg($this->lang['add_fail'], -1);
+ return false;
+ }
+ } else {
+ if (!empty($mail)){
+ return false;
+ }
+ }
+
+ if ($ok = $this->_auth->triggerUserMod('create', array($user,$pass,$name,$mail,$grps))) {
+
+ msg($this->lang['add_ok'], 1);
+
+ if (!empty($_REQUEST['usernotify']) && $pass) {
+ $this->_notifyUser($user,$pass);
+ }
+ } else {
+ msg($this->lang['add_fail'], -1);
+ }
+
+ return $ok;
+ }
+
+ /**
+ * Delete user
+ */
+ function _deleteUser(){
+ global $conf;
+
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('delUser')) return false;
+
+ $selected = $_REQUEST['delete'];
+ if (!is_array($selected) || empty($selected)) return false;
+ $selected = array_keys($selected);
+
+ if(in_array($_SERVER['REMOTE_USER'], $selected)) {
+ msg("You can't delete yourself!", -1);
+ return false;
+ }
+
+ $count = $this->_auth->triggerUserMod('delete', array($selected));
+ if ($count == count($selected)) {
+ $text = str_replace('%d', $count, $this->lang['delete_ok']);
+ msg("$text.", 1);
+ } else {
+ $part1 = str_replace('%d', $count, $this->lang['delete_ok']);
+ $part2 = str_replace('%d', (count($selected)-$count), $this->lang['delete_fail']);
+ msg("$part1, $part2",-1);
+ }
+
+ // invalidate all sessions
+ io_saveFile($conf['cachedir'].'/sessionpurge',time());
+
+ return true;
+ }
+
+ /**
+ * Edit user (a user has been selected for editing)
+ */
+ function _editUser($param) {
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('UserMod')) return false;
+
+ $user = cleanID(preg_replace('/.*:/','',$param));
+ $userdata = $this->_auth->getUserData($user);
+
+ // no user found?
+ if (!$userdata) {
+ msg($this->lang['edit_usermissing'],-1);
+ return false;
+ }
+
+ $this->_edit_user = $user;
+ $this->_edit_userdata = $userdata;
+
+ return true;
+ }
+
+ /**
+ * Modify user (modified user data has been recieved)
+ */
+ function _modifyUser(){
+ global $conf;
+
+ if (!checkSecurityToken()) return false;
+ if (!$this->_auth->canDo('UserMod')) return false;
+
+ // get currently valid user data
+ $olduser = cleanID(preg_replace('/.*:/','',$_REQUEST['userid_old']));
+ $oldinfo = $this->_auth->getUserData($olduser);
+
+ // get new user data subject to change
+ list($newuser,$newpass,$newname,$newmail,$newgrps) = $this->_retrieveUser();
+ if (empty($newuser)) return false;
+
+ $changes = array();
+ if ($newuser != $olduser) {
+
+ if (!$this->_auth->canDo('modLogin')) { // sanity check, shouldn't be possible
+ msg($this->lang['update_fail'],-1);
+ return false;
+ }
+
+ // check if $newuser already exists
+ if ($this->_auth->getUserData($newuser)) {
+ msg(sprintf($this->lang['update_exists'],$newuser),-1);
+ $re_edit = true;
+ } else {
+ $changes['user'] = $newuser;
+ }
+ }
+
+ if (!empty($newpass) && $this->_auth->canDo('modPass'))
+ $changes['pass'] = $newpass;
+ if (!empty($newname) && $this->_auth->canDo('modName') && $newname != $oldinfo['name'])
+ $changes['name'] = $newname;
+ if (!empty($newmail) && $this->_auth->canDo('modMail') && $newmail != $oldinfo['mail'])
+ $changes['mail'] = $newmail;
+ if (!empty($newgrps) && $this->_auth->canDo('modGroups') && $newgrps != $oldinfo['grps'])
+ $changes['grps'] = $newgrps;
+
+ if ($ok = $this->_auth->triggerUserMod('modify', array($olduser, $changes))) {
+ msg($this->lang['update_ok'],1);
+
+ if (!empty($_REQUEST['usernotify']) && $newpass) {
+ $notify = empty($changes['user']) ? $olduser : $newuser;
+ $this->_notifyUser($notify,$newpass);
+ }
+
+ // invalidate all sessions
+ io_saveFile($conf['cachedir'].'/sessionpurge',time());
+
+ } else {
+ msg($this->lang['update_fail'],-1);
+ }
+
+ if (!empty($re_edit)) {
+ $this->_editUser($olduser);
+ }
+
+ return $ok;
+ }
+
+ /**
+ * send password change notification email
+ */
+ function _notifyUser($user, $password) {
+
+ if ($sent = auth_sendPassword($user,$password)) {
+ msg($this->lang['notify_ok'], 1);
+ } else {
+ msg($this->lang['notify_fail'], -1);
+ }
+
+ return $sent;
+ }
+
+ /**
+ * retrieve & clean user data from the form
+ *
+ * @return array(user, password, full name, email, array(groups))
+ */
+ function _retrieveUser($clean=true) {
+
+ $user[0] = ($clean) ? cleanID(preg_replace('/.*:/','',$_REQUEST['userid'])) : $_REQUEST['userid'];
+ $user[1] = $_REQUEST['userpass'];
+ $user[2] = $_REQUEST['username'];
+ $user[3] = $_REQUEST['usermail'];
+ $user[4] = preg_split('/\s*,\s*/',$_REQUEST['usergroups'],-1,PREG_SPLIT_NO_EMPTY);
+
+ if (empty($user[4]) || (is_array($user[4]) && (count($user[4]) == 1) && (trim($user[4][0]) == ''))) {
+ $user[4] = null;
+ }
+
+ return $user;
+ }
+
+ function _setFilter($op) {
+
+ $this->_filter = array();
+
+ if ($op == 'new') {
+ list($user,$pass,$name,$mail,$grps) = $this->_retrieveUser(false);
+
+ if (!empty($user)) $this->_filter['user'] = $user;
+ if (!empty($name)) $this->_filter['name'] = $name;
+ if (!empty($mail)) $this->_filter['mail'] = $mail;
+ if (!empty($grps)) $this->_filter['grps'] = join('|',$grps);
+ }
+ }
+
+ function _retrieveFilter() {
+
+ $t_filter = $_REQUEST['filter'];
+ if (!is_array($t_filter)) return array();
+
+ // messy, but this way we ensure we aren't getting any additional crap from malicious users
+ $filter = array();
+
+ if (isset($t_filter['user'])) $filter['user'] = $t_filter['user'];
+ if (isset($t_filter['name'])) $filter['name'] = $t_filter['name'];
+ if (isset($t_filter['mail'])) $filter['mail'] = $t_filter['mail'];
+ if (isset($t_filter['grps'])) $filter['grps'] = $t_filter['grps'];
+
+ return $filter;
+ }
+
+ function _validatePagination() {
+
+ if ($this->_start >= $this->_user_total) {
+ $this->_start = $this->_user_total - $this->_pagesize;
+ }
+ if ($this->_start < 0) $this->_start = 0;
+
+ $this->_last = min($this->_user_total, $this->_start + $this->_pagesize);
+ }
+
+ /*
+ * return an array of strings to enable/disable pagination buttons
+ */
+ function _pagination() {
+
+ $disabled = 'disabled="disabled"';
+
+ $buttons['start'] = $buttons['prev'] = ($this->_start == 0) ? $disabled : '';
+
+ if ($this->_user_total == -1) {
+ $buttons['last'] = $disabled;
+ $buttons['next'] = '';
+ } else {
+ $buttons['last'] = $buttons['next'] = (($this->_start + $this->_pagesize) >= $this->_user_total) ? $disabled : '';
+ }
+
+ return $buttons;
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png
new file mode 100644
index 000000000..1aa445f03
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php
new file mode 100644
index 000000000..9a6c5666d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Afrikaans language file
+ *
+ */
+$lang['user_pass'] = 'Wagwoord';
+$lang['user_name'] = 'Regte Naam';
+$lang['user_mail'] = 'E-pos';
+$lang['edit'] = 'Verander';
+$lang['search'] = 'Soek';
+$lang['start'] = 'begin';
+$lang['prev'] = 'voorigste';
+$lang['next'] = 'volgende';
+$lang['last'] = 'einde';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt
new file mode 100644
index 000000000..14a10a27d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt
@@ -0,0 +1 @@
+==== إضاÙØ© حساب ==== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt
new file mode 100644
index 000000000..d44bb9fda
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt
@@ -0,0 +1 @@
+==== حذ٠الحساب ==== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt
new file mode 100644
index 000000000..5db2ce031
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt
@@ -0,0 +1 @@
+==== تعديل الحساب ==== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php
new file mode 100644
index 000000000..88a115de2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Arabic language file
+ *
+ * @author Yaman Hokan <always.smile.yh@hotmail.com>
+ */
+$lang['user_id'] = 'اسم المستخدم';
+$lang['user_pass'] = 'كلمة السر';
+$lang['user_name'] = 'الاسم الحقيقي';
+$lang['user_mail'] = 'البريد الالكتروني';
+$lang['user_groups'] = 'المجموعات';
+$lang['field'] = 'حقل';
+$lang['value'] = 'القيمة';
+$lang['add'] = 'إضاÙØ©';
+$lang['delete'] = 'حذÙ';
+$lang['delete_selected'] = 'حذ٠المختار';
+$lang['edit'] = 'تحرير';
+$lang['modify'] = 'Ø­Ùظ التعديلات';
+$lang['search'] = 'بحث';
+$lang['update_exists'] = 'لقد Ùشل تغيير اسم المستخدم , اسم المستخدم المحدد (%s) غير متاح . ( سيتم تطبيق أي تغييرات أخرى )';
+$lang['start'] = 'ابدأ';
+$lang['prev'] = 'السابق';
+$lang['next'] = 'التالي';
+$lang['last'] = 'الأخير';
+$lang['add_ok'] = 'تم بنجاح ضاÙØ© الحساب';
+$lang['add_fail'] = 'Ùشلت إضاÙØ© الحساب';
+$lang['notify_ok'] = 'تم إرسال رسالة الإشعار';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt
new file mode 100644
index 000000000..e0678198b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt
@@ -0,0 +1 @@
+===== ДобавÑне на потребител =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt
new file mode 100644
index 000000000..aa60fc3df
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt
@@ -0,0 +1 @@
+===== Изтриване на потребител =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt
new file mode 100644
index 000000000..652d03617
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt
@@ -0,0 +1 @@
+===== Редактиране на потребител =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt
new file mode 100644
index 000000000..0a9afd513
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt
@@ -0,0 +1 @@
+====== Управление на потребителите ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php
new file mode 100644
index 000000000..58c8453f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * bulgarian language file
+ *
+ * @author Nikolay Vladimirov <nikolay@vladimiroff.com>
+ * @author Viktor Usunov <usun0v@mail.bg>
+ */
+$lang['menu'] = 'Управление на потребителите';
+$lang['noauth'] = '(идентифицирането на потребителите е недоÑтъпно)';
+$lang['nosupport'] = '(не Ñе поддържа управление на потребители)';
+$lang['badauth'] = 'невалиден механизъм при идентификациÑ';
+$lang['user_id'] = 'Потребител';
+$lang['user_pass'] = 'Парола';
+$lang['user_name'] = 'ИÑтинÑко име';
+$lang['user_mail'] = 'Електронна поща';
+$lang['user_groups'] = 'Групи';
+$lang['field'] = 'Поле';
+$lang['value'] = 'СтойноÑÑ‚';
+$lang['add'] = 'ДобавÑне';
+$lang['delete'] = 'Изтриване';
+$lang['delete_selected'] = 'Изтриване на избраните';
+$lang['edit'] = 'Редактиране';
+$lang['edit_prompt'] = 'Редактиране на потребителÑ';
+$lang['modify'] = 'Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° промените';
+$lang['search'] = 'ТърÑене';
+$lang['search_prompt'] = 'ТърÑене';
+$lang['clear'] = 'ОбновÑване на Ñ‚ÑŠÑ€Ñенето';
+$lang['filter'] = 'Филтър';
+$lang['summary'] = 'Показване на потребители %1$d-%2$d от %3$d намерени. %4$d потребители общо.';
+$lang['nonefound'] = 'ÐÑма намерени потребители. Общо %d потребители.';
+$lang['delete_ok'] = '%d потребители изтрити';
+$lang['delete_fail'] = '%d не бÑха изтрити';
+$lang['update_ok'] = 'ОбновÑването на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ уÑпешно';
+$lang['update_fail'] = 'ОбновÑването на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ неуÑпешно';
+$lang['update_exists'] = 'СмÑната на потребителÑкото име бе невъзможна, оказаното потребителÑко име (%s) вече ÑъщеÑтвува (вÑÑкакви други промени ще бъдат приложени).';
+$lang['start'] = 'начало';
+$lang['prev'] = 'предишно';
+$lang['next'] = 'Ñледващо';
+$lang['last'] = 'поÑледно';
+$lang['edit_usermissing'] = 'ИзбраниÑÑ‚ потребител не бе намерен, оказаното потребителÑко име може да е изтрито или променено другаде.';
+$lang['user_notify'] = 'ОÑведомÑване на потребителÑ';
+$lang['note_notify'] = 'ОÑведомителната e-поща Ñе праща Ñамо, ако на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ðµ дадена нова парола.';
+$lang['note_group'] = 'Ðовите потребители ще бъдат добавÑни към групата (%s) ако не бъде поÑочена друга.';
+$lang['note_pass'] = 'Паролата ще бъде генерирана автоматично, ако полето е оÑтавено празно и функциÑта за уведомÑване на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ðµ включена.';
+$lang['add_ok'] = 'ДобавÑнето на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ уÑпешно';
+$lang['add_fail'] = 'ДобавÑнето на Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð±Ðµ неуÑпешно';
+$lang['notify_ok'] = 'ОÑведомително е-пиÑмо бе изпратено';
+$lang['notify_fail'] = 'Пращането на оÑведомително е-пиÑмо е невъзможно';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt
new file mode 100644
index 000000000..e90205fe6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt
@@ -0,0 +1 @@
+===== СпиÑък Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ð¸Ñ‚Ðµ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt
new file mode 100644
index 000000000..df5ba9235
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt
@@ -0,0 +1 @@
+===== Afegir usuari =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt
new file mode 100644
index 000000000..f386b589a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt
@@ -0,0 +1 @@
+===== Borrar usuari =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt
new file mode 100644
index 000000000..6b78c127f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt
@@ -0,0 +1 @@
+===== Editar usuari =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt
new file mode 100644
index 000000000..540a0702e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt
@@ -0,0 +1 @@
+====== Gestor d'usuaris ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php
new file mode 100644
index 000000000..5b0c628ed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Valencian language file
+ *
+ * @author Bernat Arlandis i Mañó <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@ya.com>
+ * @author Bernat Arlandis <berarma@llenguaitecnologia.com>
+ */
+$lang['menu'] = 'Gestor d\'usuaris';
+$lang['noauth'] = '(autenticació d\'usuaris no disponible)';
+$lang['nosupport'] = '(gestió d\'usuaris no admesa)';
+$lang['badauth'] = 'mecanisme d\'autenticació no vàlit';
+$lang['user_id'] = 'Usuari';
+$lang['user_pass'] = 'Contrasenya';
+$lang['user_name'] = 'Nom real';
+$lang['user_mail'] = 'Correu electrònic';
+$lang['user_groups'] = 'Grups';
+$lang['field'] = 'Camp';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Afegir';
+$lang['delete'] = 'Borrar';
+$lang['delete_selected'] = 'Borrar seleccionats';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar est usuari';
+$lang['modify'] = 'Guardar canvis';
+$lang['search'] = 'Buscar';
+$lang['search_prompt'] = 'Començar busca';
+$lang['clear'] = 'Reiniciar filtre de busques';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Mostrant usuaris %1$d-%2$d de %3$d trobats. %4$d usuaris totals.';
+$lang['nonefound'] = 'No s\'han trobat usuaris. %d usuaris totals.';
+$lang['delete_ok'] = '%d usuaris borrats';
+$lang['delete_fail'] = 'Erro borrant %d.';
+$lang['update_ok'] = 'Usuari actualisat correctament';
+$lang['update_fail'] = 'Erro actualisant usuari';
+$lang['update_exists'] = 'Erro canviant el nom de l\'usuari, el nom d\'usuari que ha donat ya existix (els demés canvis s\'aplicaran).';
+$lang['start'] = 'primera';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'següent';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'L\'usuari seleccionat no existix, pot haver segut borrat o modificat des d\'un atre lloc.';
+$lang['user_notify'] = 'Notificar a l\'usuari';
+$lang['note_notify'] = 'Els correus de notificació només s\'envien si a l\'usuari se li assigna una contrasenya nova.';
+$lang['note_group'] = 'Els usuaris nous s\'afegiran al grup predeterminat (%s) si no se n\'especifica atre.';
+$lang['note_pass'] = 'Si es deixa el camp buit i la notificació a l\'usuari està desactivada s\'autogenerarà la contrasenya.';
+$lang['add_ok'] = 'Usuari afegit correctament';
+$lang['add_fail'] = 'Erro afegint usuari';
+$lang['notify_ok'] = 'Correu de notificació enviat';
+$lang['notify_fail'] = 'Erro enviant el correu de notificació';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt
new file mode 100644
index 000000000..15af2d56f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt
@@ -0,0 +1 @@
+===== Llista d'usuaris =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt
new file mode 100644
index 000000000..07c599476
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt
@@ -0,0 +1 @@
+===== Nou usuari ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt
new file mode 100644
index 000000000..90878e563
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt
@@ -0,0 +1 @@
+===== Supressió d'usuari ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt
new file mode 100644
index 000000000..f7dc8cb8e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt
@@ -0,0 +1 @@
+===== Edició d'usuari ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt
new file mode 100644
index 000000000..864aa1008
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt
@@ -0,0 +1 @@
+======= Gestió d'usuaris ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php
new file mode 100644
index 000000000..445556973
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Catalan language file
+ *
+ * @author Carles Bellver <carles.bellver@gmail.com>
+ * @author carles.bellver@gmail.com
+ * @author carles.bellver@cent.uji.es
+ * @author Carles Bellver <carles.bellver@cent.uji.es>
+ */
+$lang['menu'] = 'Gestió d\'usuaris';
+$lang['noauth'] = '(l\'autenticació d\'usuaris no està disponible)';
+$lang['nosupport'] = '(la gestió d\'usuaris no funciona)';
+$lang['badauth'] = 'el mecanisme d\'autenticació no és vàlid';
+$lang['user_id'] = 'Usuari';
+$lang['user_pass'] = 'Contrasenya';
+$lang['user_name'] = 'Nom real';
+$lang['user_mail'] = 'Correu electrònic';
+$lang['user_groups'] = 'Grups';
+$lang['field'] = 'Camp';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Afegeix';
+$lang['delete'] = 'Suprimeix';
+$lang['delete_selected'] = 'Suprimeix els seleccionats';
+$lang['edit'] = 'Edita';
+$lang['edit_prompt'] = 'Edita aquest usuari';
+$lang['modify'] = 'Desa els canvis';
+$lang['search'] = 'Cerca';
+$lang['search_prompt'] = 'Fes la cerca';
+$lang['clear'] = 'Reinicia el filtre de cerca';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Visualització d\'usuaris %1$d-%2$d de %3$d trobats. %4$d usuaris en total.';
+$lang['nonefound'] = 'No s\'han trobat usuaris. %d usuaris en total.';
+$lang['delete_ok'] = 'S\'han suprimit %d usuaris';
+$lang['delete_fail'] = 'No s\'han pogut suprimir %d.';
+$lang['update_ok'] = 'L\'usuari ha estat actualitzat amb èxit';
+$lang['update_fail'] = 'Ha fallat l\'actualització de l\'usuari';
+$lang['update_exists'] = 'No s\'ha pogut canviar el nom de l\'usuari. El nom d\'usuari especificat (%s) ja existeix (qualsevol altre canvi sí que serà efectiu).';
+$lang['start'] = 'inici';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'següent';
+$lang['last'] = 'final';
+$lang['edit_usermissing'] = 'L\'usuari seleccionat no s\'ha pogut trobar. Potser el nom d\'usuari especificat s\'ha suprimit o modificat des d\'un altre lloc.';
+$lang['user_notify'] = 'Notificació a l\'usuari';
+$lang['note_notify'] = 'Els correus de notificació només s\'envien si es canvia la contrasenya de l\'usuari.';
+$lang['note_group'] = 'Els nous usuaris s\'afegeixen al grup per defecte (%s) si no s\'especifica un altre grup.';
+$lang['note_pass'] = 'La contrasenya es generarà automàticament si el camp es deixa en blanc i les notificacions estan habilitades per a aquest usuari.';
+$lang['add_ok'] = 'L\'usuari s\'ha afegit amb èxit';
+$lang['add_fail'] = 'No s\'ha pogut afegir l\'usuari';
+$lang['notify_ok'] = 'S\'ha enviat el correu de notificació';
+$lang['notify_fail'] = 'No s\'ha pogut enviar el correu de notificació';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt
new file mode 100644
index 000000000..22e1587f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt
@@ -0,0 +1 @@
+===== Llista d'usuaris ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt
new file mode 100644
index 000000000..39b14d554
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt
@@ -0,0 +1 @@
+===== Přidat uživatele =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt
new file mode 100644
index 000000000..a8790d87d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt
@@ -0,0 +1 @@
+===== Smazat uživatele =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt
new file mode 100644
index 000000000..d8ba38605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt
@@ -0,0 +1 @@
+===== Upravit uživatele =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt
new file mode 100644
index 000000000..5b8f6e90b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt
@@ -0,0 +1 @@
+====== Správa uživatelů ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php
new file mode 100644
index 000000000..6f368bd0f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Czech language file
+ *
+ * @author Tomas Valenta <t.valenta@sh.cvut.cz>
+ * @author Zbynek Krivka <zbynek.krivka@seznam.cz>
+ * @author Bohumir Zamecnik <bohumir@zamecnik.org>
+ * @author tomas@valenta.cz
+ */
+$lang['menu'] = 'Správa uživatelů';
+$lang['noauth'] = '(autentizace uživatelů není k dispozici)';
+$lang['nosupport'] = '(správa uživatelů není podporována)';
+$lang['badauth'] = 'chybná metoda autentizace';
+$lang['user_id'] = 'Uživatel';
+$lang['user_pass'] = 'Heslo';
+$lang['user_name'] = 'Celé jméno';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Skupiny';
+$lang['field'] = 'Položka';
+$lang['value'] = 'Hodnota';
+$lang['add'] = 'Přidat';
+$lang['delete'] = 'Smazat';
+$lang['delete_selected'] = 'Smazat vybrané';
+$lang['edit'] = 'Upravit';
+$lang['edit_prompt'] = 'Upravit uživatele';
+$lang['modify'] = 'Uložit změny';
+$lang['search'] = 'Hledání';
+$lang['search_prompt'] = 'Prohledat';
+$lang['clear'] = 'Zrušit vyhledávací filtr';
+$lang['filter'] = 'Filtr';
+$lang['summary'] = 'Zobrazuji uživatele %1$d-%2$d z %3$d nalezených. Celkem %4$d uživatelů.';
+$lang['nonefound'] = 'Žadný uživatel nenalezen. Celkem %d uživatelů.';
+$lang['delete_ok'] = '%d uživatelů smazáno';
+$lang['delete_fail'] = '%d uživatelů nelze smazat.';
+$lang['update_ok'] = 'Uživatel upraven';
+$lang['update_fail'] = 'Úprava uživatele selhala';
+$lang['update_exists'] = 'Jméno nelze změnit, jelikož zadané uživatelské jméno (%s) již existuje (ostatní změny ale budou provedeny).';
+$lang['start'] = 'první';
+$lang['prev'] = 'předchozí';
+$lang['next'] = 'další';
+$lang['last'] = 'poslední';
+$lang['edit_usermissing'] = 'Vybraný uživatel nebyl nalezen, zadané uživatelského mohlo být smazáno nebo změněno.';
+$lang['user_notify'] = 'Upozornit uživatele';
+$lang['note_notify'] = 'Maily s upozorněním se budou posílat pouze, když uživatel dostává nové heslo.';
+$lang['note_group'] = 'Noví uživatelé budou přidáváni do této výchozí skupiny (%s), pokud pro ně není uvedena žádná skupina.';
+$lang['note_pass'] = 'Heslo bude automaticky vygenerováno pokud je pole ponacháno prázdné a je zapnutá notifikace uživatele.';
+$lang['add_ok'] = 'Uživatel úspěšně vytvořen';
+$lang['add_fail'] = 'Vytvoření uživatele selhalo';
+$lang['notify_ok'] = 'Odeslán mail s upozorněním';
+$lang['notify_fail'] = 'Mail s upozorněním nebylo možno odeslat';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt
new file mode 100644
index 000000000..36b87fed9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt
@@ -0,0 +1 @@
+===== Seznam uživatelů =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt
new file mode 100644
index 000000000..d97de4248
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt
@@ -0,0 +1 @@
+===== Tilføj bruger =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt
new file mode 100644
index 000000000..dff05454c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt
@@ -0,0 +1 @@
+===== Slet bruger =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt
new file mode 100644
index 000000000..05d63b7b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt
@@ -0,0 +1 @@
+===== Rediger bruger =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt
new file mode 100644
index 000000000..3f597a243
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt
@@ -0,0 +1 @@
+====== Brugerstyring ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php
new file mode 100644
index 000000000..42bdcb7c3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Danish language file
+ *
+ * @author Lars Næsbye Christensen <larsnaesbye@stud.ku.dk>
+ * @author Kalle Sommer Nielsen <kalle@php.net>
+ * @author Esben Laursen <hyber@hyber.dk>
+ * @author Harith <haj@berlingske.dk>
+ * @author Daniel Ejsing-Duun <dokuwiki@zilvador.dk>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Brugerstyring';
+$lang['noauth'] = '(Brugervalidering er ikke tilgængelig)';
+$lang['nosupport'] = '(Brugerstyring er ikke understøttet)';
+$lang['badauth'] = 'Ugyldig brugerbekræftelsesfunktion';
+$lang['user_id'] = 'Bruger';
+$lang['user_pass'] = 'Adgangskode';
+$lang['user_name'] = 'Navn';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupper';
+$lang['field'] = 'Felt';
+$lang['value'] = 'Værdi';
+$lang['add'] = 'Tilføj';
+$lang['delete'] = 'Slet';
+$lang['delete_selected'] = 'Slet valgte';
+$lang['edit'] = 'Rediger';
+$lang['edit_prompt'] = 'Rediger denne bruger';
+$lang['modify'] = 'Gem ændringer';
+$lang['search'] = 'Søg';
+$lang['search_prompt'] = 'Udfør søgning';
+$lang['clear'] = 'Nulstil søgefilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Viser brugerne %1$d-%2$d ud af %3$d fundne. %4$d brugere totalt.';
+$lang['nonefound'] = 'Ingen brugere fundet. %d brugere totalt.';
+$lang['delete_ok'] = '%d brugere slettet';
+$lang['delete_fail'] = '%d kunne ikke slettes.';
+$lang['update_ok'] = 'Bruger opdateret korrekt';
+$lang['update_fail'] = 'Brugeropdatering mislykkedes';
+$lang['update_exists'] = 'Ændring af brugernavn mislykkedes, det valgte brugernavn (%s) er allerede optaget (andre ændringer vil blive udført).';
+$lang['start'] = 'begynde';
+$lang['prev'] = 'forrige';
+$lang['next'] = 'næste';
+$lang['last'] = 'sidste';
+$lang['edit_usermissing'] = 'Den valgte bruger blev ikke fundet. Brugernavnet kan være slettet eller ændret andetsteds.';
+$lang['user_notify'] = 'Meddel bruger';
+$lang['note_notify'] = 'Meddelelser bliver kun sendt, hvis brugeren får givet et nyt adgangskode.';
+$lang['note_group'] = 'Nye brugere vil blive tilføjet til standardgruppen (%s), hvis ingen gruppe er opgivet.';
+$lang['note_pass'] = 'Adgangskoden vil blive dannet automatisk, hvis feltet er tomt og underretning af brugeren er aktiveret.';
+$lang['add_ok'] = 'Bruger tilføjet uden fejl.';
+$lang['add_fail'] = 'Tilføjelse af bruger mislykkedes';
+$lang['notify_ok'] = 'Meddelelse sendt';
+$lang['notify_fail'] = 'Meddelelse kunne ikke sendes';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt
new file mode 100644
index 000000000..11d1710a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt
@@ -0,0 +1 @@
+===== Brugerliste =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt
new file mode 100644
index 000000000..1fc34c968
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt
@@ -0,0 +1 @@
+===== Benutzer hinzufügen ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt
new file mode 100644
index 000000000..778396aa0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt
@@ -0,0 +1 @@
+===== Benutzer gelöscht ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt
new file mode 100644
index 000000000..291b0f19d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt
@@ -0,0 +1 @@
+===== Benutzer bearbeiten ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt
new file mode 100644
index 000000000..a5927a89d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt
@@ -0,0 +1 @@
+===== Benutzerverwaltung ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php
new file mode 100644
index 000000000..d9011468b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * German (informal) language file
+ *
+ * @author Alexander Fischer <tbanus@os-forge.net>
+ * @author Juergen Schwarzer <jschwarzer@freenet.de>
+ */
+$lang['menu'] = 'Benutzerverwalter';
+$lang['noauth'] = '(Benutzeranmeldung ist nicht verfügbar)';
+$lang['nosupport'] = '(Benutzerverwaltung wird nicht unterstützt)';
+$lang['badauth'] = 'Ungültige Authentifizerung';
+$lang['user_id'] = 'Benutzer';
+$lang['user_pass'] = 'Passwort';
+$lang['user_name'] = 'Echter Name';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Gruppen';
+$lang['field'] = 'Feld';
+$lang['value'] = 'Wert';
+$lang['add'] = 'Zufügen';
+$lang['delete'] = 'Löschen';
+$lang['delete_selected'] = 'Lösche ausgewähltes';
+$lang['edit'] = 'Editieren';
+$lang['edit_prompt'] = 'Editiere den Benutzer';
+$lang['modify'] = 'Änderungen speichern';
+$lang['search'] = 'Suchen';
+$lang['search_prompt'] = 'Suche ausführen';
+$lang['clear'] = 'Suchfilter zurücksetzen';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Zeige Benutzer %1$d-%2$d von %3$d gefundenen. %4$d Benutzer insgesamt.';
+$lang['nonefound'] = 'Keinen Benutzer gefunden. Insgesamt %d Benutzer.';
+$lang['delete_ok'] = '%d Benutzer wurden gelöscht';
+$lang['delete_fail'] = '%d konnte nicht gelöscht werden';
+$lang['update_ok'] = 'Benutzer wurde erfolgreich aktualisiert';
+$lang['update_fail'] = 'Aktualisierung des Benutzers ist fehlgeschlagen';
+$lang['update_exists'] = 'Benutzername konnte nicht geändert werden, der angegebene Benutzername (%s) existiert bereits (alle anderen Änderungen werden angewandt).';
+$lang['start'] = 'Start';
+$lang['prev'] = 'vorige';
+$lang['next'] = 'nächste';
+$lang['last'] = 'letzte';
+$lang['edit_usermissing'] = 'Der gewählte Benutzer wurde nicht gefunden. Der angegebene Benutzername könnte gelöscht oder an anderer Stelle geändert worden sein.';
+$lang['user_notify'] = 'Benutzer benachrichtigen';
+$lang['note_notify'] = 'Benachrichtigungsemails werden nur versandt, wenn der Benutzer ein neues Kennwort erhält.';
+$lang['note_group'] = 'Neue Benutzer werden zur Standardgruppe (%s) hinzugefügt, wenn keine Gruppe angegeben wird.';
+$lang['note_pass'] = 'Das Passwort wird automatisch erzeugt, wenn das Feld freigelassen wird und der Benutzer Benachrichtigungen aktiviert hat.';
+$lang['add_ok'] = 'Benutzer erfolgreich hinzugefügt';
+$lang['add_fail'] = 'Hinzufügen des Benutzers fehlgeschlagen';
+$lang['notify_ok'] = 'Benachrichtigungsemail wurde versendet';
+$lang['notify_fail'] = 'Benachrichtigungsemail konnte nicht gesendet werden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt
new file mode 100644
index 000000000..0a62012e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt
@@ -0,0 +1 @@
+===== Benutzerliste ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt
new file mode 100644
index 000000000..925fa5042
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt
@@ -0,0 +1 @@
+===== Benutzer hinzufügen =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt
new file mode 100644
index 000000000..4f3bbbd03
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt
@@ -0,0 +1 @@
+===== Benutzer löschen =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt
new file mode 100644
index 000000000..9419200dd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt
@@ -0,0 +1 @@
+===== Benutzer ändern =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt
new file mode 100644
index 000000000..a5837b8c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt
@@ -0,0 +1 @@
+====== Benutzer-Manager ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php
new file mode 100644
index 000000000..913537f06
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * German language file
+ *
+ * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michael Klier <chi@chimeric.de>
+ * @author Leo Moll <leo@yeasoft.com>
+ * @author Florian Anderiasch <fa@art-core.org>
+ * @author Robin Kluth <commi1993@gmail.com>
+ * @author Arne Pelka <mail@arnepelka.de>
+ * @author Dirk Einecke <dirk@dirkeinecke.de>
+ * @author Blitzi94@gmx.de
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Benutzerverwaltung';
+$lang['noauth'] = '(Authentifizierungssystem nicht verfügbar)';
+$lang['nosupport'] = '(Benutzerverwaltung nicht unterstützt)';
+$lang['badauth'] = 'Ungültige Methode zur Authentifizierung';
+$lang['user_id'] = 'Benutzername';
+$lang['user_pass'] = 'Passwort';
+$lang['user_name'] = 'Voller Name';
+$lang['user_mail'] = 'E-Mail';
+$lang['user_groups'] = 'Gruppen';
+$lang['field'] = 'Feld';
+$lang['value'] = 'Wert';
+$lang['add'] = 'Hinzufügen';
+$lang['delete'] = 'Löschen';
+$lang['delete_selected'] = 'Ausgewählte löschen';
+$lang['edit'] = 'Ändern';
+$lang['edit_prompt'] = 'Benutzerdaten ändern';
+$lang['modify'] = 'Speichern';
+$lang['search'] = 'Suchen';
+$lang['search_prompt'] = 'Benutzerdaten filtern';
+$lang['clear'] = 'Filter zurücksetzen';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Zeige Benutzer %1$d-%2$d von %3$d gefundenen. %4$d Benutzer insgesamt.';
+$lang['nonefound'] = 'Keine Benutzer gefunden. %d Benutzer insgesamt.';
+$lang['delete_ok'] = '%d Benutzer gelöscht';
+$lang['delete_fail'] = '%d konnten nicht gelöscht werden.';
+$lang['update_ok'] = 'Benutzerdaten erfolgreich geändert.';
+$lang['update_fail'] = 'Änderung der Benutzerdaten fehlgeschlagen.';
+$lang['update_exists'] = 'Nutzername konnte nicht geändert werden, weil der angegebene Nutzer (%s) bereits existiert (alle anderen Änderungen wurden durchgeführt).';
+$lang['start'] = 'Anfang';
+$lang['prev'] = 'Vorherige';
+$lang['next'] = 'Nächste';
+$lang['last'] = 'Ende';
+$lang['edit_usermissing'] = 'Der ausgewählte Nutzer wurde nicht gefunden. Möglicherweise wurde er gelöscht oder der Nutzer wurde anderswo geändert.';
+$lang['user_notify'] = 'Nutzer benachrichtigen';
+$lang['note_notify'] = 'Benachrichtigungs-E-Mails werden nur versandt, wenn ein neues Passwort vergeben wurde.';
+$lang['note_group'] = 'Neue Nutzer werden der Standard-Gruppe (%s) hinzugefügt, wenn keine Gruppe angegeben wurde.';
+$lang['note_pass'] = 'Das Password wird automatisch generiert, wenn das entsprechende Feld leergelassen wird und die Benachrichtigung des Nutzers aktiviert ist.';
+$lang['add_ok'] = 'Nutzer erfolgreich angelegt';
+$lang['add_fail'] = 'Nutzer konnte nicht angelegt werden';
+$lang['notify_ok'] = 'Benachrichtigungsmail wurde versandt';
+$lang['notify_fail'] = 'Benachrichtigungsmail konnte nicht versandt werden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt
new file mode 100644
index 000000000..8d6d5fb46
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt
@@ -0,0 +1 @@
+===== Benutzerliste =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt
new file mode 100644
index 000000000..0616f8c53
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt
@@ -0,0 +1 @@
+===== ΠÏοσθήκη ΧÏήστη =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt
new file mode 100644
index 000000000..baf9bc054
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt
@@ -0,0 +1 @@
+===== ΔιαγÏαφή ΧÏήστη =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt
new file mode 100644
index 000000000..dec59efd7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt
@@ -0,0 +1 @@
+===== ΤÏοποποίηση ΧÏήστη =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt
new file mode 100644
index 000000000..874c13b57
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt
@@ -0,0 +1 @@
+====== ΔιαχείÏιση ΧÏηστών ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php
new file mode 100644
index 000000000..3c5c9b902
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Greek language file
+ *
+ * Based on DokuWiki Version rc2007-05-24 english language file
+ * Original english language file contents included for reference
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Thanos Massias <tm@thriasio.gr>
+ * @author Αθανάσιος Îταής <homunculus@wana.gr>
+ * @author Konstantinos Koryllos <koryllos@gmail.com>
+ */
+$lang['menu'] = 'ΔιαχείÏιση ΧÏηστών';
+$lang['noauth'] = '(η είσοδος χÏηστών δεν είναι δυνατή)';
+$lang['nosupport'] = '(δεν υποστηÏίζεται η διαχείÏιση χÏηστών)';
+$lang['badauth'] = 'μη επιτÏεπτός μηχανισμός πιστοποίησης';
+$lang['user_id'] = 'ΧÏήστης';
+$lang['user_pass'] = 'Κωδικός';
+$lang['user_name'] = 'ΠλήÏες όνομα';
+$lang['user_mail'] = 'e-mail';
+$lang['user_groups'] = 'Ομάδες';
+$lang['field'] = 'Πεδίο';
+$lang['value'] = 'Τιμή';
+$lang['add'] = 'ΠÏοσθήκη';
+$lang['delete'] = 'ΔιαγÏαφή';
+$lang['delete_selected'] = 'ΔιαγÏαφή επιλεγμένων χÏηστών';
+$lang['edit'] = 'ΤÏοποποίηση';
+$lang['edit_prompt'] = 'ΤÏοποποίηση χÏήστη';
+$lang['modify'] = 'Αποθήκευση αλλαγών';
+$lang['search'] = 'Αναζήτηση';
+$lang['search_prompt'] = 'Εκκίνηση αναζήτησης';
+$lang['clear'] = 'ΚαθαÏισμός φίλτÏων';
+$lang['filter'] = 'ΦίλτÏο';
+$lang['summary'] = 'Εμφάνιση χÏηστών %1$d-%2$d από %3$d σχετικοÏÏ‚. %4$d χÏήστες συνολικά.';
+$lang['nonefound'] = 'Δεν βÏέθηκαν σχετικοί χÏήστες. %d χÏήστες συνολικά.';
+$lang['delete_ok'] = '%d χÏήστες διεγÏάφησαν';
+$lang['delete_fail'] = '%d χÏήστες δεν διεγÏάφησαν.';
+$lang['update_ok'] = 'Επιτυχημένη Ï„Ïοποποίηση Ï€Ïοφίλ χÏήστη';
+$lang['update_fail'] = 'Αποτυχημένη Ï„Ïοποποίηση Ï€Ïοφίλ χÏήστη';
+$lang['update_exists'] = 'Η αλλαγή ονόματος χÏήστη απέτυχε -- το νέο όνομα χÏήστη (%s) ήδη υπάÏχει (τυχόν άλλες αλλαγές θα εφαÏμοστοÏν).';
+$lang['start'] = 'αÏχή';
+$lang['prev'] = 'Ï€ÏοηγοÏμενα';
+$lang['next'] = 'επόμενα';
+$lang['last'] = 'τέλος';
+$lang['edit_usermissing'] = 'Ο επιλεγμένος χÏήστης δεν βÏέθηκε. Πιθανόν να διαγÏάφηκε στο μεταξÏ.';
+$lang['user_notify'] = 'Ειδοποίηση χÏήστη';
+$lang['note_notify'] = 'Τα ενημεÏωτικά e-mails στέλνονται μόνο όταν δίνεται νέος κωδικός στον χÏήστη.';
+$lang['note_group'] = 'Οι νέοι χÏήστες θα ανήκουν στην ομάδα (%s) αν δεν οÏιστεί άλλη ομάδα.';
+$lang['note_pass'] = 'Ο κωδικός θα δημιουÏγηθεί αυτόματα εάν το πεδίο μείνει κενό και έχει επιλεγεί η αποστολή ειδοποίησης χÏήστη.';
+$lang['add_ok'] = 'Επιτυχημένη εγγÏαφή χÏήστη';
+$lang['add_fail'] = 'Η εγγÏαφή του χÏήστη απέτυχε';
+$lang['notify_ok'] = 'Εστάλη ενημεÏωτικό e-mail';
+$lang['notify_fail'] = 'Δεν ήταν δυνατή η αποστολή του ενημεÏÏ‰Ï„Î¹ÎºÎ¿Ï e-mail';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt
new file mode 100644
index 000000000..adb5c210b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt
@@ -0,0 +1 @@
+===== Κατάλογος ΧÏηστών =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt
new file mode 100644
index 000000000..9afecb5cd
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt
@@ -0,0 +1 @@
+===== Add user =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt
new file mode 100644
index 000000000..c3ca90dbb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt
@@ -0,0 +1 @@
+===== Delete user =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt
new file mode 100644
index 000000000..4d02dfddc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt
@@ -0,0 +1 @@
+===== Edit user =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt
new file mode 100644
index 000000000..73bf55613
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt
@@ -0,0 +1 @@
+====== User Manager ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php
new file mode 100644
index 000000000..189a1db20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * English language file
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+
+$lang['menu'] = 'User Manager';
+
+// custom language strings for the plugin
+$lang['noauth'] = '(user authentication not available)';
+$lang['nosupport'] = '(user management not supported)';
+
+$lang['badauth'] = 'invalid auth mechanism'; // should never be displayed!
+
+$lang['user_id'] = 'User';
+$lang['user_pass'] = 'Password';
+$lang['user_name'] = 'Real Name';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Groups';
+
+$lang['field'] = 'Field';
+$lang['value'] = 'Value';
+$lang['add'] = 'Add';
+$lang['delete'] = 'Delete';
+$lang['delete_selected'] = 'Delete Selected';
+$lang['edit'] = 'Edit';
+$lang['edit_prompt'] = 'Edit this user';
+$lang['modify'] = 'Save Changes';
+$lang['search'] = 'Search';
+$lang['search_prompt'] = 'Perform search';
+$lang['clear'] = 'Reset Search Filter';
+$lang['filter'] = 'Filter';
+
+$lang['summary'] = 'Displaying users %1$d-%2$d of %3$d found. %4$d users total.';
+$lang['nonefound'] = 'No users found. %d users total.';
+$lang['delete_ok'] = '%d users deleted';
+$lang['delete_fail'] = '%d failed deleting.';
+$lang['update_ok'] = 'User updated successfully';
+$lang['update_fail'] = 'User update failed';
+$lang['update_exists'] = 'User name change failed, the specified user name (%s) already exists (any other changes will be applied).';
+
+$lang['start'] = 'start';
+$lang['prev'] = 'previous';
+$lang['next'] = 'next';
+$lang['last'] = 'last';
+
+// added after 2006-03-09 release
+$lang['edit_usermissing'] = 'Selected user not found, the specified user name may have been deleted or changed elsewhere.';
+$lang['user_notify'] = 'Notify user';
+$lang['note_notify'] = 'Notification emails are only sent if the user is given a new password.';
+$lang['note_group'] = 'New users will be added to the default group (%s) if no group is specified.';
+$lang['note_pass'] = 'The password will be autogenerated if the field is left empty and notification of the user is enabled.';
+$lang['add_ok'] = 'User added successfully';
+$lang['add_fail'] = 'User addition failed';
+$lang['notify_ok'] = 'Notification email sent';
+$lang['notify_fail'] = 'Notification email could not be sent';
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt
new file mode 100644
index 000000000..54c45caf7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt
@@ -0,0 +1 @@
+===== User List =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt
new file mode 100644
index 000000000..8775ff85d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt
@@ -0,0 +1 @@
+===== Aldoni uzanton ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt
new file mode 100644
index 000000000..0d94f8122
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt
@@ -0,0 +1 @@
+===== Forigi uzanton ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt
new file mode 100644
index 000000000..2ced16e7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt
@@ -0,0 +1 @@
+===== Modifi uzanton ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt
new file mode 100644
index 000000000..2ef373f66
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt
@@ -0,0 +1 @@
+====== Administrado de Uzantoj ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php
new file mode 100644
index 000000000..0eb99b862
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Esperantolanguage file
+ *
+ * @author Felipe Castro <fefcas@uol.com.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Felipe Castro <fefcas (cxe) gmail (punkto) com>
+ * @author Felipo Kastro <fefcas@gmail.com>
+ * @author Robert Bogenschneider <robog@gmx.de>
+ * @author Erik Pedersen <erik pedersen@shaw.ca>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Robert Bogenschneider <robog@GMX.de>
+ */
+$lang['menu'] = 'Administrado de Uzantoj';
+$lang['noauth'] = '(identiÄo de uzantoj ne disponeblas)';
+$lang['nosupport'] = '(administro de uzantoj ne estas subtenata)';
+$lang['badauth'] = 'tiu identiÄa procezo ne validas';
+$lang['user_id'] = 'Uzanto';
+$lang['user_pass'] = 'Pasvorto';
+$lang['user_name'] = 'Vera nomo';
+$lang['user_mail'] = 'Retadreso';
+$lang['user_groups'] = 'Grupoj';
+$lang['field'] = 'Kampo';
+$lang['value'] = 'Valoro';
+$lang['add'] = 'Aldoni';
+$lang['delete'] = 'Forigi';
+$lang['delete_selected'] = 'Forigi elektitan';
+$lang['edit'] = 'Modifi';
+$lang['edit_prompt'] = 'Modifi tiun ĉi uzanton';
+$lang['modify'] = 'Registri modifojn';
+$lang['search'] = 'Serĉi';
+$lang['search_prompt'] = 'Fari serĉon';
+$lang['clear'] = 'Refari serĉan filtron';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'MontriÄas uzantoj %1$d-%2$d el %3$d trovitaj. %4$d uzantoj entute.';
+$lang['nonefound'] = 'Neniu uzantoj troviÄas. %d uzantoj entute.';
+$lang['delete_ok'] = '%d uzantoj estis forigitaj';
+$lang['delete_fail'] = '%d malsukcesis esti forigitaj.';
+$lang['update_ok'] = 'Tiu uzanto estis sukcese Äisdatigita';
+$lang['update_fail'] = 'Malsukceso okazis por Äisdatigi tiun uzanton';
+$lang['update_exists'] = 'Malsukceso okazis por ÅanÄi la nomon de tiu uzanto: la enmetita nomo (%s) jam ekzistas (ĉiuj aliaj ÅanÄoj estos aplikitaj)';
+$lang['start'] = 'Ekigi';
+$lang['prev'] = 'antaÅ­e';
+$lang['next'] = 'sekve';
+$lang['last'] = 'laste';
+$lang['edit_usermissing'] = 'La elektita uzanto ne estis trovita: tiu nomo povis esti forigita aÅ­ ÅanÄita aliloke.';
+$lang['user_notify'] = 'Avizi uzanton';
+$lang['note_notify'] = 'Avizantaj mesaÄoj estos sendataj nur se la uzanto ekhavos novan pasvorton.';
+$lang['note_group'] = 'Novaj uzantoj estos aldonitaj al la komuna grupo (%s) se neniu alia estos specifita.';
+$lang['note_pass'] = 'La pasvorto estos aÅ­tomate kreita se la kampo estos lasita malplena kaj \'aviso al uzantoj\' estos ebligita.';
+$lang['add_ok'] = 'La uzanto estis sukcese aldonita';
+$lang['add_fail'] = 'Malsukceso okazis por aldoni uzulon';
+$lang['notify_ok'] = 'Avizanta mesaÄo estis sendita';
+$lang['notify_fail'] = 'La avizanta mesaÄo ne povis esti sendita';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt
new file mode 100644
index 000000000..714671afb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt
@@ -0,0 +1 @@
+===== Listo de Uzantoj ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt
new file mode 100644
index 000000000..90c56e31d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt
@@ -0,0 +1 @@
+===== Agregar un usuario =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt
new file mode 100644
index 000000000..4c552a9c1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt
@@ -0,0 +1 @@
+===== Eliminar un usuario =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt
new file mode 100644
index 000000000..ccdd26f86
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt
@@ -0,0 +1 @@
+===== Editar datos del usuario =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt
new file mode 100644
index 000000000..e558d3a28
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt
@@ -0,0 +1 @@
+====== Administración de usuarios ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php
new file mode 100644
index 000000000..c11ebcd93
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Spanish language file
+ *
+ * @author Miguel Pagano <miguel.pagano>
+ * @author Oscar M. Lage <r0sk10@gmail.com>
+ * @author Gabriel Castillo <gch@pumas.ii.unam.mx>
+ * @author oliver@samera.com.py
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Manuel Meco <manuel.meco@gmail.com>
+ * @author VictorCastelan <victorcastelan@gmail.com>
+ * @author Jordan Mero hack.jord@gmail.com
+ * @author Felipe Martinez <metalmartinez@gmail.com>
+ * @author Javier Aranda <internet@javierav.com>
+ * @author Zerial <fernando@zerial.org>
+ * @author Marvin Ortega <maty1206@maryanlinux.com>
+ * @author Daniel Castro Alvarado <dancas2@gmail.com>
+ * @author Fernando J. Gómez <fjgomez@gmail.com>
+ */
+$lang['menu'] = 'Administración de usuarios';
+$lang['noauth'] = '(la autenticación de usuarios no está disponible)';
+$lang['nosupport'] = '(la administración de usuarios no está habilitada)';
+$lang['badauth'] = 'Mecanismo de autenticación inválido';
+$lang['user_id'] = 'Usuario';
+$lang['user_pass'] = 'Contraseña';
+$lang['user_name'] = 'Nombre';
+$lang['user_mail'] = 'Correo electrónico';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Agregar';
+$lang['delete'] = 'Eliminar';
+$lang['delete_selected'] = 'Eliminar seleccionados';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar datos de este usuario';
+$lang['modify'] = 'Guardar los cambios';
+$lang['search'] = 'Buscar';
+$lang['search_prompt'] = 'Realizar la búsqueda';
+$lang['clear'] = 'Limpiar los filtros de la búsqueda';
+$lang['filter'] = 'Filtrar';
+$lang['summary'] = 'Mostrando los usuarios %1$d-%2$d de %3$d encontrados. Cantidad total de usuarios %4$d.';
+$lang['nonefound'] = 'No se encontraron usuarios que coincidan con los párametros de la búsqueda. Cantidad total de usuarios %d.';
+$lang['delete_ok'] = '%d usuarios eliminados';
+$lang['delete_fail'] = '%d no se pudieron eliminar.';
+$lang['update_ok'] = 'Los datos del usuario se actualizaron exitosamente ';
+$lang['update_fail'] = 'Los datos del usuario no se actualizaron';
+$lang['update_exists'] = 'El cambio de nombre de usuario falló, el nombre especificado ($s) ya está en uso (los otros cambios se aplicaron).';
+$lang['start'] = 'primera';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'siguiente';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'El usuario seleccionado no ha sido encontrado; el usuario especificado puede haber sido eliminado o cambiado en algún otro lugar.';
+$lang['user_notify'] = 'Notificar al usuario';
+$lang['note_notify'] = 'El correo electrónico de notificación sólo será enviado si se actualizo la contraseña del usuario.';
+$lang['note_group'] = 'Si no se especifica ningún grupo, los nuevos usuarios serán agregados al grupo por defecto (%s).';
+$lang['note_pass'] = 'Se generará una clave automáticamente si el campo izquierdo es vacío y se esta activo la notificación de usuario. ';
+$lang['add_ok'] = 'El usuario fue creado exitosamente';
+$lang['add_fail'] = 'Falló la creación del usuario';
+$lang['notify_ok'] = 'Se envió la notificación por correo electrónico';
+$lang['notify_fail'] = 'No se pudo enviar la notificación por correo electrónico';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt
new file mode 100644
index 000000000..d0d32b913
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt
@@ -0,0 +1 @@
+===== Lista de usuarios =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt
new file mode 100644
index 000000000..855c43218
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt
@@ -0,0 +1 @@
+===== Erabiltzailea gehitu ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt
new file mode 100644
index 000000000..987b98f20
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt
@@ -0,0 +1 @@
+===== Erabiltzailea ezabatu ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt
new file mode 100644
index 000000000..82b92afe7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt
@@ -0,0 +1 @@
+====== Editatu erabiltzailea ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt
new file mode 100644
index 000000000..848b3da05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt
@@ -0,0 +1 @@
+====== Erabiltzaile Kudeatzailea ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php
new file mode 100644
index 000000000..b6e04f7c4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Basque language file
+ *
+ * @author Inko Illarramendi <inko.i.a@gmail.com>
+ */
+$lang['menu'] = 'Erabiltzaile Kudeatzailea';
+$lang['noauth'] = '(erabiltzaile kautotzea ez dago erabilgarri)';
+$lang['nosupport'] = '(erabiltzaile kudeaketa ez dago erabilgarri)';
+$lang['badauth'] = 'kautotze mekanismo baliogabea';
+$lang['user_id'] = 'Erabiltzailea';
+$lang['user_pass'] = 'Pasahitza';
+$lang['user_name'] = 'Benetako Izena';
+$lang['user_mail'] = 'Posta-e';
+$lang['user_groups'] = 'Taldeak';
+$lang['field'] = 'Eremu';
+$lang['value'] = 'Balioa';
+$lang['add'] = 'Gehitu';
+$lang['delete'] = 'Ezabatu';
+$lang['delete_selected'] = 'Ezabatu Hautatutakoak';
+$lang['edit'] = 'Editatu';
+$lang['edit_prompt'] = 'Editatu erabiltzaile hau';
+$lang['modify'] = 'Gorde Aldaketak';
+$lang['search'] = 'Bilatu';
+$lang['search_prompt'] = 'Egin bilaketa';
+$lang['clear'] = 'Berrasieratu Bilaketa Iragazkia';
+$lang['filter'] = 'Iragazi';
+$lang['summary'] = 'Erakusten diren erabiltzaileak %1$d-%2$d bilatutako %3$d erabiltzailetatik. %4$d erabiltzaile guztira.';
+$lang['nonefound'] = 'Ez da erabiltzailerik aurkitu. %d erabiltzaile guztira.';
+$lang['delete_ok'] = '%d erabiltzaile ezabatuak';
+$lang['delete_fail'] = '%d huts ezabatzean.';
+$lang['update_ok'] = 'Erabiltzailea arrakastaz eguneratuak';
+$lang['update_fail'] = 'Erabiltzaile eguneratzeak huts egin du ';
+$lang['update_exists'] = 'Erabiltzaile izen aldaketak huts egin du, zehaztutako erabiltzaile izena (%s) lehendik existitzen zen (beste edozein aldaketa ezarri egingo da).';
+$lang['start'] = 'hasi';
+$lang['prev'] = 'aurrekoa';
+$lang['next'] = 'hurrengoa';
+$lang['last'] = 'azkena';
+$lang['edit_usermissing'] = 'Aukeratutako erabiltzailea ez da aurkitu, zehaztutako erabiltzaile izena beste nonbait ezabatua edo aldatua izana gerta zitekeen.';
+$lang['user_notify'] = 'Erabiltzailea jakinarazi';
+$lang['note_notify'] = 'Jakinarazpen postak erabiltzaileari pasahitz berria ematen bazaio bakarrik bidaltzen dira.';
+$lang['note_group'] = 'Erabiltzaile berriak (%s) talde lehenetsira gehituko dira ez bada talderik zehazten.';
+$lang['note_pass'] = 'Pasahitza automatikoki sortuko da eremua hutsik uzten bada eta erabiltzailearen jakinarazpena gaitua badago.';
+$lang['add_ok'] = 'Erabiltzailea arrakastaz gehitua';
+$lang['add_fail'] = 'Erabiltzaile gehitzeak huts egin du';
+$lang['notify_ok'] = 'Jakinarazpen posta-e bidalia';
+$lang['notify_fail'] = 'Jakinarazpen posta-e ezin izan da bidali';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt
new file mode 100644
index 000000000..fb80b14be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt
@@ -0,0 +1 @@
+====== Erabiltzaile zerrenda ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt
new file mode 100644
index 000000000..32d604e43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt
@@ -0,0 +1 @@
+===== اÙزودن کاربر ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt
new file mode 100644
index 000000000..f8a59ff10
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt
@@ -0,0 +1 @@
+===== حذ٠کاربر ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt
new file mode 100644
index 000000000..33fe5b517
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt
@@ -0,0 +1 @@
+===== ویرایش کاربر ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt
new file mode 100644
index 000000000..ffb850109
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt
@@ -0,0 +1 @@
+===== مدیریت کاربران ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php
new file mode 100644
index 000000000..f9e973b9c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Persian language file
+ *
+ * @author behrad eslamifar <behrad_es@yahoo.com)
+ * @author Mohsen Firoozmandan <info@mambolearn.com>
+ * @author omidmr@gmail.com
+ * @author Omid Mottaghi <omidmr@gmail.com>
+ * @author Mohammad Reza Shoaei <shoaei@gmail.com>
+ */
+$lang['menu'] = 'مدیریت کاربر';
+$lang['noauth'] = '(معتبرسازی کاربر ممکن نیست)';
+$lang['nosupport'] = '(مدیریت کاربر پشتیبانی نمی‌شود)';
+$lang['badauth'] = 'روش معتبرسازی اشتباه است';
+$lang['user_id'] = 'کاربر';
+$lang['user_pass'] = 'گذرواژه';
+$lang['user_name'] = 'نام حقیقی';
+$lang['user_mail'] = 'ایمیل';
+$lang['user_groups'] = 'گروه‌ها';
+$lang['field'] = 'Ùیلد';
+$lang['value'] = 'ارزش';
+$lang['add'] = 'اضاÙÙ‡ کردن';
+$lang['delete'] = 'حذÙ';
+$lang['delete_selected'] = 'حذ٠انتخاب شده‌ها';
+$lang['edit'] = 'ویرایش';
+$lang['edit_prompt'] = 'ویرایش این کاربر';
+$lang['modify'] = 'ذخیره تغییرات';
+$lang['search'] = 'جستجو';
+$lang['search_prompt'] = 'انجام جستجو';
+$lang['clear'] = 'بازنویسی Ùیلترهای جستجو';
+$lang['filter'] = 'Ùیلتر';
+$lang['summary'] = 'نمایش کاربر %1$d-%2$d از %3$d. در کل %4$d کاربر.';
+$lang['nonefound'] = 'هیچ کاربری یاÙت نشد. در Ú©Ù„ %d کاربر.';
+$lang['delete_ok'] = '%d کاربر حذ٠شد';
+$lang['delete_fail'] = 'حذ٠%d کاربر با مشکل مواجه شد.';
+$lang['update_ok'] = 'کاربر با موÙقیت به روز رسانی شد.';
+$lang['update_fail'] = 'به روز رسانی کاربر با مشکل مواجه شد';
+$lang['update_exists'] = 'تغییر نام کاربری ممکن نیست، نام کاربری مورد نظر (%s) قبلن وجود داشته (مابقی تغییرات اعمال شده است)';
+$lang['start'] = 'شروع';
+$lang['prev'] = 'قبلی';
+$lang['next'] = 'بعدی';
+$lang['last'] = 'آخرین';
+$lang['edit_usermissing'] = 'کاربر انتخاب شده یاÙت نشد، نام کاربری مورد نظر در جایی دیگر حذ٠شده یا تغییر کرده.';
+$lang['user_notify'] = 'آگاه کردن کاربر';
+$lang['note_notify'] = 'ایمیلی برای آگاهی، Ùقط در زمان تغییر گذرواژه‌ ارسال می‌شود.';
+$lang['note_group'] = 'اگر گروهی انتخاب نشود، کاربران جدید به گروه پیش‌Ùرض (%s) اÙزوده خواهند شد.';
+$lang['note_pass'] = 'اگر Ùیلد گذرواژه خالی گذاشته شود، گذرواژه به طور خودکار تولید Ùˆ ایمیلی برای کاربر ارسال خواهد شد.';
+$lang['add_ok'] = 'کاربر با موÙقیت اÙزوده شد';
+$lang['add_fail'] = 'اÙزودن کاربر با مشکل مواجه شد';
+$lang['notify_ok'] = 'ایمیل آگاهی دهنده ارسال شد';
+$lang['notify_fail'] = 'ارسال ایمیل آگاهی دهنده با مشکل مواجه شد';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt
new file mode 100644
index 000000000..b539bf18a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt
@@ -0,0 +1 @@
+===== لیست کاربران ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt
new file mode 100644
index 000000000..5c4ee0a41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt
@@ -0,0 +1 @@
+===== Lisää käyttäjä ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt
new file mode 100644
index 000000000..2203a20f8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt
@@ -0,0 +1 @@
+===== Poista käyttäjä ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt
new file mode 100644
index 000000000..53e0b41ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt
@@ -0,0 +1 @@
+===== Muokkaa käyttäjää ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt
new file mode 100644
index 000000000..2ef0bb509
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt
@@ -0,0 +1 @@
+====== Käyttäjähallinta ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php
new file mode 100644
index 000000000..6eeb4c3e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Finnish language file
+ *
+ * @author otto@valjakko.net
+ * @author Otto Vainio <otto@valjakko.net>
+ * @author Teemu Mattila <ghcsystems@gmail.com>
+ */
+$lang['menu'] = 'Käyttäjähallinta';
+$lang['noauth'] = '(autentikointi ei ole käytössä)';
+$lang['nosupport'] = '(käyttäjähallinta ei ole tuettu)';
+$lang['badauth'] = 'Viallinen autentikointimenetelmä';
+$lang['user_id'] = 'Käyttäjä';
+$lang['user_pass'] = 'Salasana';
+$lang['user_name'] = 'Oikea nimi';
+$lang['user_mail'] = 'Sähköposti';
+$lang['user_groups'] = 'Ryhmät';
+$lang['field'] = 'Kenttä';
+$lang['value'] = 'Arvo';
+$lang['add'] = 'Lisää';
+$lang['delete'] = 'Poista';
+$lang['delete_selected'] = 'Poista valittu';
+$lang['edit'] = 'Muokkaa';
+$lang['edit_prompt'] = 'Muokkaa ryhmää';
+$lang['modify'] = 'Tallenna muutokset';
+$lang['search'] = 'Hae';
+$lang['search_prompt'] = 'Tee haku';
+$lang['clear'] = 'Tyhjennä hakusuodatin';
+$lang['filter'] = 'Suodatin';
+$lang['summary'] = 'Näytetään käyttäjät %1$d-%2$d / %3$d löytynyttä. %4$d käyttäjää yhteensä.';
+$lang['nonefound'] = 'Ei löytynyt käyttäjiä. %d käyttäjää yhteensä.';
+$lang['delete_ok'] = '%d käyttäjää poistettu';
+$lang['delete_fail'] = '%d poistoa epäonnistui';
+$lang['update_ok'] = 'Käyttäjän päivitys onnistui';
+$lang['update_fail'] = 'Käyttäjän päivitys epäonnistui';
+$lang['update_exists'] = 'Käyttäjän nimen vaihto epäonnistui. Nimi (%s) on jo olemassa (muut muutokset onnistuivat)';
+$lang['start'] = 'alku';
+$lang['prev'] = 'edellinen';
+$lang['next'] = 'seuraava';
+$lang['last'] = 'viimeinen';
+$lang['edit_usermissing'] = 'Valittua käyttäjää ei löytynyt. Käyttäjä on voitu päivittää tai poistaa muualta.';
+$lang['user_notify'] = 'Tiedota käyttäjälle';
+$lang['note_notify'] = 'Tiedotus lähetetään vain, jos käyttäjälle on määritelty uusi salasana.';
+$lang['note_group'] = 'Uudelle käyttäjälle määritellään oletusryhmä (%s), jos ryhmää ei erikseen määritellä.';
+$lang['note_pass'] = 'Salasana luodaan automaattisesti, mikäli kenttä jätetään tyhjäksi ja jos käyttäjän tiedotus on päällä.';
+$lang['add_ok'] = 'Käyttäjä lisätty onnistuneesti';
+$lang['add_fail'] = 'Käyttäjän lisäys epäonnistui';
+$lang['notify_ok'] = 'Ilmoitus sähköpostilla lähetetty';
+$lang['notify_fail'] = 'Ilmoitusta sähköpostilla ei voitu lähettää';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt
new file mode 100644
index 000000000..5ecf2ff7b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt
@@ -0,0 +1 @@
+===== Käyttäjälista ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt
new file mode 100644
index 000000000..e60b8b894
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt
@@ -0,0 +1 @@
+===== Ajouter un utilisateur =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt
new file mode 100644
index 000000000..778f44192
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt
@@ -0,0 +1 @@
+===== Supprimer un utilisateur =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt
new file mode 100644
index 000000000..ec193eb5a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt
@@ -0,0 +1 @@
+===== Modifier les informations d'un utilisateur =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt
new file mode 100644
index 000000000..84987b0bf
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt
@@ -0,0 +1 @@
+====== Gestion des utilisateurs ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php
new file mode 100644
index 000000000..9229ee8e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * french language file
+ *
+ * @author Guy Brand <gb@isis.u-strasbg.fr>
+ * @author Delassaux Julien <julien@delassaux.fr>
+ * @author Maurice A. LeBlanc <leblancma@cooptel.qc.ca>
+ * @author gb@isis.u-strasbg.fr
+ * @author stephane.gully@gmail.com
+ * @author Guillaume Turri <guillaume.turri@gmail.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author olivier duperray <duperray.olivier@laposte.net>
+ * @author Vincent Feltz <psycho@feltzv.fr>
+ */
+$lang['menu'] = 'Gestion des utilisateurs';
+$lang['noauth'] = '(authentification utilisateur non disponible)';
+$lang['nosupport'] = '(gestion utilisateur non supportée)';
+$lang['badauth'] = 'mécanisme d\'authentification invalide';
+$lang['user_id'] = 'Identifiant ';
+$lang['user_pass'] = 'Mot de passe ';
+$lang['user_name'] = 'Nom ';
+$lang['user_mail'] = 'Courriel ';
+$lang['user_groups'] = 'Groupes ';
+$lang['field'] = 'Champ';
+$lang['value'] = 'Valeur';
+$lang['add'] = 'Ajouter';
+$lang['delete'] = 'Supprimer';
+$lang['delete_selected'] = 'Supprimer la sélection';
+$lang['edit'] = 'Éditer';
+$lang['edit_prompt'] = 'Éditer cet utilisateur';
+$lang['modify'] = 'Enregistrer les modifications';
+$lang['search'] = 'Rechercher';
+$lang['search_prompt'] = 'Effectuer la recherche';
+$lang['clear'] = 'Réinitialiser la recherche';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Affichage des utilisateurs %1$d-%2$d parmi %3$d trouvé(s). %4$d utilisateur(s) au total.';
+$lang['nonefound'] = 'Aucun utilisateur trouvé. %d utilisateur(s) au total.';
+$lang['delete_ok'] = '%d utilisateurs effacés';
+$lang['delete_fail'] = '%d effacement échoué.';
+$lang['update_ok'] = 'utilisateur mis à jour avec succès';
+$lang['update_fail'] = 'échec de la mise à jour utilisateur';
+$lang['update_exists'] = 'échec du changement de nom d\'utilisateur, le nom spécifié (%s) existe déjà (toutes les autres modifications seront effectuées).';
+$lang['start'] = 'Démarrage';
+$lang['prev'] = 'Précédent';
+$lang['next'] = 'Suivant';
+$lang['last'] = 'Dernier';
+$lang['edit_usermissing'] = 'Utilisateur sélectionné non trouvé, cet utilisateur a peut-être été supprimé ou modifié ailleurs.';
+$lang['user_notify'] = 'Notifier l\'utilisateur ';
+$lang['note_notify'] = 'Envoi de notification par courriel uniquement lorsqu\'un nouveau mot de passe est attribué à l\'utilisateur.';
+$lang['note_group'] = 'Les nouveaux utilisateurs seront ajoutés au groupe par défaut (%s) si aucun groupe n\'est spécifié.';
+$lang['note_pass'] = 'Le mot de passe sera généré automatiquement si le champ est laissé vide et si la notification de l\'utilisateur est activée.';
+$lang['add_ok'] = 'Utilisateur ajouté avec succès';
+$lang['add_fail'] = 'Échec de l\'ajout de l\'utilisateur';
+$lang['notify_ok'] = 'Courriel de notification expédié';
+$lang['notify_fail'] = 'Échec de l\'expédition du courriel de notification';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt
new file mode 100644
index 000000000..2d708fe43
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt
@@ -0,0 +1 @@
+===== Liste des utilisateurs =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt
new file mode 100644
index 000000000..cd1c487ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt
@@ -0,0 +1 @@
+===== Engadir unha persoa usuaria =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt
new file mode 100644
index 000000000..f13133d6f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt
@@ -0,0 +1 @@
+===== Eliminar unha persoa usuaria =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt
new file mode 100644
index 000000000..d33f9c335
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt
@@ -0,0 +1 @@
+===== Editar unha persoa usuaria =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt
new file mode 100644
index 000000000..9b05a0c5e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt
@@ -0,0 +1 @@
+====== Xestor de persoas usuarias ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php
new file mode 100644
index 000000000..b6909c100
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Galicianlanguage file
+ *
+ * @author CiberIrmandade da Fala <infoxeral@ciberirmandade.org>
+ * @author Tagen Ata <localizacion@tagenata.com>
+ * @author Leandro Regueiro <leandro.regueiro@gmail.com>
+ */
+$lang['menu'] = 'Xestor de persoas usuarias';
+$lang['noauth'] = '(a autenticación de persoas usuarias non está dispoñíbel)';
+$lang['nosupport'] = '(a xestión de persoas usuarias non está soportada)';
+$lang['badauth'] = 'o mecanismo de autenticación non é válido';
+$lang['user_id'] = 'Usuaria/o';
+$lang['user_pass'] = 'Contrasinal';
+$lang['user_name'] = 'Nome real';
+$lang['user_mail'] = 'Correo';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Engadir';
+$lang['delete'] = 'Eliminar';
+$lang['delete_selected'] = 'Eliminar as seleccionadas';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar esta persoa usuaria';
+$lang['modify'] = 'Gardar os cambios';
+$lang['search'] = 'Procurar';
+$lang['search_prompt'] = 'Facer unha procura';
+$lang['clear'] = 'Reiniciar o filtro de procura';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'A mostrar as persoas usuarias %1$d-%2$d de %3$d encontradas. %4$d persoas usuarias en total.';
+$lang['nonefound'] = 'Non se encontraron persoas usuarias. %d persoas usuarias en total.';
+$lang['delete_ok'] = '%d persoas usuarias foron eliminadas';
+$lang['delete_fail'] = '%d non puideron ser eliminadas.';
+$lang['update_ok'] = 'A persoa usuaria foi actualizada correctamente';
+$lang['update_fail'] = 'Non se puido actualizar a persoa usuaria';
+$lang['update_exists'] = 'Non se puido mudar o nome da persoa usuaria; o nome especificado (%s) xa existe (o resto de cambios aplicaranse sen problemas).';
+$lang['start'] = 'comezo';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'seguinte';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'Non se encontrou a persoa usuaria seleccionada; pode que o nome de usuaria/o teña sido eliminado ou alterado nalgún momento.';
+$lang['user_notify'] = 'Notificar á/ao usuaria/o';
+$lang['note_notify'] = 'Os correos de notificación envíanse só se a persoa usuaria obtén un contrasinal novo.';
+$lang['note_group'] = 'As persoas usuarias novas serán engadidas ao grupo predeterminado (%s) se non se especifica outro.';
+$lang['note_pass'] = 'Se deixa o campo baleiro e a notificación á/ao usuaria/o está activada, xerarase automaticamente o contrasinal.';
+$lang['add_ok'] = 'A persoa usuaria foi engadida correctamente';
+$lang['add_fail'] = 'Non se puido engadir a/o usuaria/o';
+$lang['notify_ok'] = 'O correo de notificación foi enviado';
+$lang['notify_fail'] = 'Non se puido enviar o correo de notificación';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt
new file mode 100644
index 000000000..792afd7d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt
@@ -0,0 +1 @@
+===== Listaxe de persoas usuarias =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt
new file mode 100644
index 000000000..e2d1cb775
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt
@@ -0,0 +1 @@
+===== הוספת משתמש =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt
new file mode 100644
index 000000000..42d738b1d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt
@@ -0,0 +1 @@
+===== מחיקת משתמש =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt
new file mode 100644
index 000000000..af90af359
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt
@@ -0,0 +1 @@
+===== עריכת משתמש =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt
new file mode 100644
index 000000000..232c5153b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt
@@ -0,0 +1 @@
+====== מנהל ×ž×©×ª×ž×©×™× ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php
new file mode 100644
index 000000000..85f5274e8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * hebrew language file
+ *
+ * @author DoK <kamberd@yahoo.com>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ * @author Moshe Kaplan <mokplan@gmail.com>
+ */
+$lang['menu'] = 'מנהל משתמשי×';
+$lang['noauth'] = '(×ימות ×ž×©×ª×ž×©×™× ×ינו זמין)';
+$lang['nosupport'] = '(ניהול ×ž×©×ª×ž×©×™× ×ינו נתמך)';
+$lang['badauth'] = 'מנגנון ×ימות ×œ× ×ª×§×£';
+$lang['user_id'] = '×©× ×ž×©×ª×ž×©';
+$lang['user_pass'] = 'סיסמה';
+$lang['user_name'] = '×©× ×מיתי';
+$lang['user_mail'] = 'דו×"ל';
+$lang['user_groups'] = 'קבוצות';
+$lang['field'] = 'שדה';
+$lang['value'] = 'ערך';
+$lang['add'] = 'הוספה';
+$lang['delete'] = 'מחיקה';
+$lang['delete_selected'] = 'מחיקת הבחירה';
+$lang['edit'] = 'עריכה';
+$lang['edit_prompt'] = 'עריכת משתמש זה';
+$lang['modify'] = 'שמירת שינוי×';
+$lang['search'] = 'חיפוש';
+$lang['search_prompt'] = 'בצע חיפוש';
+$lang['clear'] = '×תחל סינון חיפוש';
+$lang['filter'] = 'סינון';
+$lang['summary'] = 'מציג ×ž×©×ª×ž×©×™× %1$d-%2$d מתוך %3$d שנמצ×ו. %4$d בסך הכל.';
+$lang['nonefound'] = '×œ× × ×ž×¦×ו משתמשי×. סך כל ×”×ž×©×ª×ž×©×™× %d.';
+$lang['delete_ok'] = '%d ×ž×©×ª×ž×©×™× × ×ž×—×§×•';
+$lang['delete_fail'] = '%d כשל במחיקה.';
+$lang['update_ok'] = 'משתמש עודכן בהצלחה';
+$lang['update_fail'] = 'עידכון המשתמש כשל';
+$lang['update_exists'] = 'שינוי ×©× ×”×ž×©×ª×ž×© כשל, ×©× ×”×©×ž×ª×ž×© שצויין (%s) כבר × ×ž×¦× (כל ×”×©×™× ×•×™×™× ×”××—×¨×™× ×™×•×—×œ×•).';
+$lang['start'] = 'התחלה';
+$lang['prev'] = 'קוד×';
+$lang['next'] = 'הב×';
+$lang['last'] = 'סוף';
+$lang['edit_usermissing'] = 'המשתמש שנבחר ×œ× × ×ž×¦×, ייתכן ×›×™ ×©× ×”×ž×©×ª×ž×© שצויין נמחק ×ו השתנה ×‘×ž×§×•× ×חר.';
+$lang['user_notify'] = 'הודע למשתמש';
+$lang['note_notify'] = 'הודעות בדו×"ל נשלחות רק במקרה שהמשתמש מקבל סיסמה חדשה.';
+$lang['note_group'] = '×ž×©×ª×ž×©×™× ×—×“×©×™× ×™×•×¡×¤×• לקבוצת ברירת המחדל (%s) ×× ×œ× ×¦×•×™× ×” קבוצה ×חרת.';
+$lang['add_ok'] = 'משתמש הוסף בהצלחה';
+$lang['add_fail'] = 'הוספת המשתמש כשלה';
+$lang['notify_ok'] = 'הודעה נשלחה';
+$lang['notify_fail'] = '×œ× × ×™×ª×Ÿ ×”×™×” לשלוח הודעה';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt
new file mode 100644
index 000000000..9308fbebb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt
@@ -0,0 +1 @@
+===== רשימת ×ž×©×ª×ž×©×™× =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php
new file mode 100644
index 000000000..d8630a281
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Hindi language file
+ *
+ * @author Abhinav Tyagi <abhinavtyagi11@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php
new file mode 100644
index 000000000..d2094b77b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Croatian language file
+ *
+ * @author Branko Rihtman <theney@gmail.com>
+ * @author Dražen Odobašić <dodobasic@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt
new file mode 100644
index 000000000..70a44c41d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt
@@ -0,0 +1,2 @@
+===== Felhasználó hozzáadása =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt
new file mode 100644
index 000000000..963d2e7b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt
@@ -0,0 +1,2 @@
+===== Felhasználó törlése =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt
new file mode 100644
index 000000000..f82746094
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt
@@ -0,0 +1,2 @@
+===== Felhasználó szerkesztése =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt
new file mode 100644
index 000000000..150aff848
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt
@@ -0,0 +1,2 @@
+====== Felhasználók kezelése ======
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php
new file mode 100644
index 000000000..b9f35cfc7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Hungarian language file
+ *
+ * @author Sandor TIHANYI <stihanyi+dw@gmail.com>
+ * @author Siaynoq Mage <siaynoqmage@gmail.com>
+ * @author schilling.janos@gmail.com
+ */
+$lang['menu'] = 'Felhasználók kezelése';
+$lang['noauth'] = '(A felhasználói azonosítás nem működik.)';
+$lang['nosupport'] = '(A felhasználók kezelése nem támogatott.)';
+$lang['badauth'] = 'nem érvényes autentikációs technika';
+$lang['user_id'] = 'Felhasználó azonosító';
+$lang['user_pass'] = 'Jelszó';
+$lang['user_name'] = 'Név';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Csoportok';
+$lang['field'] = 'Mező';
+$lang['value'] = 'Érték';
+$lang['add'] = 'Hozzáadás';
+$lang['delete'] = 'Törlés';
+$lang['delete_selected'] = 'Kiválasztottak törlése';
+$lang['edit'] = 'Szerkesztés';
+$lang['edit_prompt'] = 'A felhasználó szerkesztése';
+$lang['modify'] = 'Változások mentése';
+$lang['search'] = 'Keresés';
+$lang['search_prompt'] = 'Keresés';
+$lang['clear'] = 'Keresési szűrés törlése';
+$lang['filter'] = 'Szűrés';
+$lang['summary'] = '%1$d-%2$d. felhasználókat mutatom a(z) %3$d megtalált felhasználóból. %4$d felhasználó van összesen.';
+$lang['nonefound'] = 'Nem találtam ilyen felhasználót. %d felhasználó van összesen.';
+$lang['delete_ok'] = '%d felhasználó törölve.';
+$lang['delete_fail'] = '%d felhasználót nem sikerült törölni.';
+$lang['update_ok'] = 'A felhasználó adatait sikeresen elmentettem.';
+$lang['update_fail'] = 'A felhasználó adatainak mentése nem sikerült.';
+$lang['update_exists'] = 'A felhasználói azonosító változtatása nem sikerült, a megadott azonosító (%s) már létezik. (A többi változtatás mentve.)';
+$lang['start'] = 'első';
+$lang['prev'] = 'előző';
+$lang['next'] = 'következő';
+$lang['last'] = 'utolsó';
+$lang['edit_usermissing'] = 'A kiválasztott felhasználót nem találom, a felhasználói nevét törölték vagy megváltoztatták.';
+$lang['user_notify'] = 'Felhasználó értesítése';
+$lang['note_notify'] = 'Csak akkor küld értesítő e-mailt, ha a felhasználó új jelszót kapott.';
+$lang['note_group'] = 'Ha nincs csoport meghatározva, az új felhasználó az alapértelmezett csoportba (%s) kerül.';
+$lang['note_pass'] = 'Ha a baloldali mező üres, és a felhasználó értesítés aktív, akkor generált jelszó lesz.';
+$lang['add_ok'] = 'A felhasználó sikeresen hozzáadva.';
+$lang['add_fail'] = 'A felhasználó hozzáadása nem sikerült.';
+$lang['notify_ok'] = 'Értesítő levél elküldve.';
+$lang['notify_fail'] = 'Nem sikerült az értesítő levelet elküldeni.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt
new file mode 100644
index 000000000..9da7320c6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt
@@ -0,0 +1,2 @@
+===== Felhasználók listája =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php
new file mode 100644
index 000000000..d367340b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * idni language file
+ *
+ * @author Harefa <fidelis@harefa.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt
new file mode 100644
index 000000000..eae407c04
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt
@@ -0,0 +1 @@
+===== Tambah User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt
new file mode 100644
index 000000000..99e53c9ef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt
@@ -0,0 +1 @@
+===== Hapus User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt
new file mode 100644
index 000000000..6d14f4fde
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt
@@ -0,0 +1 @@
+===== Edit User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt
new file mode 100644
index 000000000..de053f2ae
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt
@@ -0,0 +1 @@
+===== Manajemen User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php
new file mode 100644
index 000000000..457ad4963
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Indonesian language file
+ *
+ * @author Irwan Butar Butar <irwansah.putra@gmail.com>
+ * @author Yustinus Waruwu <juswaruwu@gmail.com>
+ */
+$lang['menu'] = 'Manajemen User';
+$lang['noauth'] = '(autentikasi tidak tersedia)';
+$lang['nosupport'] = '(manajemen user tidak didukung)';
+$lang['badauth'] = 'mekanisme autentikasi invali';
+$lang['user_id'] = 'User';
+$lang['user_pass'] = 'Password';
+$lang['user_name'] = 'Nama Lengkap';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Grup';
+$lang['field'] = 'Field';
+$lang['value'] = 'Nilai';
+$lang['add'] = 'Tambah';
+$lang['delete'] = 'Hapus';
+$lang['delete_selected'] = 'Hapus pilihan';
+$lang['edit'] = 'Edit';
+$lang['edit_prompt'] = 'Edit user ini';
+$lang['modify'] = 'Simpan Perubahan';
+$lang['search'] = 'Pencarian';
+$lang['search_prompt'] = 'Lakukan pencarian';
+$lang['clear'] = 'Reset Filter Pencarian';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Menampilkan user %1$d-%2$d dari %3$d user yang ditemukan. Total semua user %4$d.';
+$lang['nonefound'] = 'User tidak ditemukan. Total semua user %d. ';
+$lang['delete_ok'] = 'User %d dihapus';
+$lang['delete_fail'] = 'User %d tidak berhasil dihapus';
+$lang['update_ok'] = 'User berhasil diubah';
+$lang['update_fail'] = 'Perubahan user tidak berhasil';
+$lang['update_exists'] = 'Perubahan username tidak berhasil, Username (%s) sudah ada (perubahan lain tetap dilakukan)';
+$lang['start'] = 'awal';
+$lang['prev'] = 'sebelumnya';
+$lang['next'] = 'berikutnya';
+$lang['last'] = 'terakhir';
+$lang['edit_usermissing'] = 'User yang dipilih tida ditemukan, username tersebut mungkin sudah dihapus atau diubah ditempat lain.';
+$lang['user_notify'] = 'Beritahu user';
+$lang['note_notify'] = 'Email notifikasi hanya dikirim jika user diberikan password baru';
+$lang['note_group'] = 'User baru akan ditambahkan ke grup default (%s) jika tidak ada grup yang diisi.';
+$lang['add_ok'] = 'User telah berhasil ditambahkan';
+$lang['add_fail'] = 'Penambahan user tidak berhasil.';
+$lang['notify_ok'] = 'Email notifikasi berhasil terkirim.';
+$lang['notify_fail'] = 'Email notifikasi tidak berhasil terkirim.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt
new file mode 100644
index 000000000..9b70bc157
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt
@@ -0,0 +1 @@
+===== Daftar User ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt
new file mode 100644
index 000000000..564006584
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt
@@ -0,0 +1 @@
+===== Eyða notanda ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php
new file mode 100644
index 000000000..cabf83d64
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Icelandic language file
+ *
+ * @author Hrannar Baldursson <hrannar.baldursson@gmail.com>
+ * @author Ólafur Gunnlaugsson <oli@audiotools.com>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['user_id'] = 'Notandi';
+$lang['user_pass'] = 'Aðgangsorð';
+$lang['user_name'] = 'Raunnafn';
+$lang['user_groups'] = 'Hópar';
+$lang['field'] = 'Svæði';
+$lang['delete'] = 'Eyða';
+$lang['add_ok'] = 'Notandinn var bætt við';
+$lang['add_fail'] = 'Bæta við nýjum notanda mistókst';
+$lang['notify_ok'] = 'Tilkynning var sendast með tölvupósti';
+$lang['notify_fail'] = 'Ekki hægt að senda tilkynning með tölvupósti';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt
new file mode 100644
index 000000000..9ce4c6e38
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt
@@ -0,0 +1 @@
+===== Aggiungi utente =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt
new file mode 100644
index 000000000..fc36212af
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt
@@ -0,0 +1 @@
+===== Cancella utente =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt
new file mode 100644
index 000000000..39767bfdc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt
@@ -0,0 +1 @@
+===== Modifica utente =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt
new file mode 100644
index 000000000..3421709d6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt
@@ -0,0 +1 @@
+====== Gestione Utenti ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php
new file mode 100644
index 000000000..67b17e9ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Italian language file
+ *
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Silvia Sargentoni <polinnia@tin.it>
+ * @author Pietro Battiston toobaz@email.it
+ * @author Diego Pierotto ita.translations@tiscali.it
+ * @author ita.translations@tiscali.it
+ * @author Lorenzo Breda <lbreda@gmail.com>
+ * @author snarchio@alice.it
+ * @author robocap <robocap1@gmail.com>
+ */
+$lang['menu'] = 'Gestione Utenti';
+$lang['noauth'] = '(autenticazione non disponibile)';
+$lang['nosupport'] = '(gestione utenti non supportata)';
+$lang['badauth'] = 'sistema di autenticazione non valido';
+$lang['user_id'] = 'User ID';
+$lang['user_pass'] = 'Password';
+$lang['user_name'] = 'Nome completo';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Gruppi';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valore';
+$lang['add'] = 'Aggiungi';
+$lang['delete'] = 'Cancella';
+$lang['delete_selected'] = 'Cancella selezionati';
+$lang['edit'] = 'Modifica';
+$lang['edit_prompt'] = 'Modifica questo utente';
+$lang['modify'] = 'Salva modifiche';
+$lang['search'] = 'Cerca';
+$lang['search_prompt'] = 'Esegui ricerca';
+$lang['clear'] = 'Azzera filtro di ricerca';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'Visualizzazione utenti %1$d-%2$d di %3$d trovati. %4$d utenti totali.';
+$lang['nonefound'] = 'Nessun utente trovato. %d utenti totali.';
+$lang['delete_ok'] = '%d utenti cancellati';
+$lang['delete_fail'] = 'Cancellazione %d fallita.';
+$lang['update_ok'] = 'Aggiornamento utente riuscito';
+$lang['update_fail'] = 'Aggiornamento utente fallito';
+$lang['update_exists'] = 'Modifica nome utente fallita, il nome utente specificato (%s) esiste già (qualunque altra modifica sarà applicata).';
+$lang['start'] = 'primo';
+$lang['prev'] = 'precedente';
+$lang['next'] = 'successivo';
+$lang['last'] = 'ultimo';
+$lang['edit_usermissing'] = 'Utente selezionato non trovato, il nome utente specificato potrebbe essere stato cancellato o modificato altrove.';
+$lang['user_notify'] = 'Notifica utente';
+$lang['note_notify'] = 'Le email di notifica sono inviate soltanto se all\'utente è stata assegnata una nuova password.';
+$lang['note_group'] = 'Se non si specifica alcun gruppo, i nuovi utenti saranno aggiunti al gruppo di default (%s).';
+$lang['note_pass'] = 'La password verrà generata automaticamente qualora il campo di inserimento relatvivo venisse lasciato vuoto e le notifiche all\'utente fossero abilitate.';
+$lang['add_ok'] = 'Utente aggiunto correttamente';
+$lang['add_fail'] = 'Aggiunta utente fallita';
+$lang['notify_ok'] = 'Email di notifica inviata';
+$lang['notify_fail'] = 'L\'email di notifica non può essere inviata';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt
new file mode 100644
index 000000000..91e27a9de
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt
@@ -0,0 +1 @@
+===== Elenco Utenti =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt
new file mode 100644
index 000000000..87b30e0a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt
@@ -0,0 +1 @@
+===== ãƒ¦ãƒ¼ã‚¶ãƒ¼ä½œæˆ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt
new file mode 100644
index 000000000..67ef23e23
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt
@@ -0,0 +1 @@
+===== ユーザー削除 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt
new file mode 100644
index 000000000..e7695e307
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt
@@ -0,0 +1 @@
+===== ユーザー編集 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt
new file mode 100644
index 000000000..5dbe51c8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt
@@ -0,0 +1 @@
+====== ãƒ¦ãƒ¼ã‚¶ãƒ¼ç®¡ç† ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php
new file mode 100644
index 000000000..321bbafe8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * japanese language file
+ * @author Yuji Takenaka <webmaster@davilin.com>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ * @author Ikuo Obataya <i.obataya@gmail.com>
+ * @author Daniel Dupriest <kououken@gmail.com>
+ * @author Kazutaka Miyasaka <kazmiya@gmail.com>
+ */
+$lang['menu'] = 'ユーザー管ç†';
+$lang['noauth'] = '(ユーザーèªè¨¼ãŒç„¡åŠ¹ã§ã™ï¼‰';
+$lang['nosupport'] = '(ユーザー管ç†ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“)';
+$lang['badauth'] = 'èªè¨¼ã®ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ãŒç„¡åŠ¹ã§ã™';
+$lang['user_id'] = 'ユーザー';
+$lang['user_pass'] = 'パスワード';
+$lang['user_name'] = 'æ°å';
+$lang['user_mail'] = 'メールアドレス';
+$lang['user_groups'] = 'グループ';
+$lang['field'] = 'é …ç›®';
+$lang['value'] = '値';
+$lang['add'] = '追加';
+$lang['delete'] = '削除';
+$lang['delete_selected'] = 'é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’削除';
+$lang['edit'] = '編集';
+$lang['edit_prompt'] = 'ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’編集';
+$lang['modify'] = '変更をä¿å­˜';
+$lang['search'] = '検索';
+$lang['search_prompt'] = '検索を実行';
+$lang['clear'] = '検索フィルターをリセット';
+$lang['filter'] = 'フィルター';
+$lang['summary'] = 'ユーザー %1$d-%2$d / %3$d, ç·ãƒ¦ãƒ¼ã‚¶ãƒ¼æ•° %4$d';
+$lang['nonefound'] = 'ユーザーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“, ç·ãƒ¦ãƒ¼ã‚¶ãƒ¼æ•° %d';
+$lang['delete_ok'] = '%d ユーザーãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸ';
+$lang['delete_fail'] = '%d ユーザーã®å‰Šé™¤ã«å¤±æ•—ã—ã¾ã—ãŸ';
+$lang['update_ok'] = 'ユーザーã¯æ›´æ–°ã•ã‚Œã¾ã—ãŸ';
+$lang['update_fail'] = 'ユーザーã®æ›´æ–°ã«å¤±æ•—ã—ã¾ã—ãŸ';
+$lang['update_exists'] = 'ユーザーå(%s)ã¯æ—¢ã«å­˜åœ¨ã™ã‚‹ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã®å¤‰æ›´ã«å¤±æ•—ã—ã¾ã—ãŸï¼ˆãã®ä»–ã®é …ç›®ã¯å¤‰æ›´ã•ã‚Œã¾ã—ãŸï¼‰ã€‚';
+$lang['start'] = '最åˆ';
+$lang['prev'] = 'å‰ã¸';
+$lang['next'] = '次ã¸';
+$lang['last'] = '最後';
+$lang['edit_usermissing'] = 'é¸æŠžã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。削除もã—ãã¯å¤‰æ›´ã•ã‚ŒãŸå¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚';
+$lang['user_notify'] = '通知ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼';
+$lang['note_notify'] = 'ユーザーãŒæ–°ã—ã„パスワードを設定ã—ãŸå ´åˆã®ã¿ã€é€šçŸ¥ãƒ¡ãƒ¼ãƒ«ãŒé€ä¿¡ã•ã‚Œã¾ã™ã€‚';
+$lang['note_group'] = 'グループを指定ã—ãªã„å ´åˆã¯ã€æ—¢å®šã®ã‚°ãƒ«ãƒ¼ãƒ—(%s)ã«ç™»éŒ²ã•ã‚Œã„ã¾ã™ã€‚';
+$lang['note_pass'] = 'パスワードを空欄ã¨ã—ãŸå ´åˆã¯ã€ãƒ‘スワードを自動的ã«ç”Ÿæˆã—ã¾ã™ã€‚ã“ã®å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¸ã®é€šçŸ¥ãŒæœ‰åŠ¹ã¨ãªã‚Šã¾ã™ã€‚';
+$lang['add_ok'] = 'ユーザーを登録ã—ã¾ã—ãŸ';
+$lang['add_fail'] = 'ユーザーã®ç™»éŒ²ã«å¤±æ•—ã—ã¾ã—ãŸ';
+$lang['notify_ok'] = '通知メールをé€ä¿¡ã—ã¾ã—ãŸ';
+$lang['notify_fail'] = '通知メールをé€ä¿¡ã§ãã¾ã›ã‚“ã§ã—ãŸ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt
new file mode 100644
index 000000000..182cc198c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt
@@ -0,0 +1 @@
+===== ユーザーリスト =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt
new file mode 100644
index 000000000..578ba5636
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ì¶”ê°€ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt
new file mode 100644
index 000000000..1e9c0ba73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ì‚­ì œ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt
new file mode 100644
index 000000000..b8b13c5c8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ì •ë³´ 수정 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt
new file mode 100644
index 000000000..8c8bfa5b9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt
@@ -0,0 +1 @@
+====== ì‚¬ìš©ìž ê´€ë¦¬ ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php
new file mode 100644
index 000000000..eeb8eb791
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * korean language file
+ *
+ * @author jk Lee
+ * @author dongnak@gmail.com
+ * @author Song Younghwan <purluno@gmail.com>
+ * @author SONG Younghwan <purluno@gmail.com>
+ */
+$lang['menu'] = 'ì‚¬ìš©ìž ê´€ë¦¬ìž';
+$lang['noauth'] = '(ì‚¬ìš©ìž ì¸ì¦ì´ 불가능합니다.)';
+$lang['nosupport'] = '(ì‚¬ìš©ìž ê´€ë¦¬ê°€ 지ì›ë˜ì§€ 않습니다.)';
+$lang['badauth'] = '유효하지 ì•Šì€ ì¸ì¦ 메카니즘입니다.';
+$lang['user_id'] = '사용ìž';
+$lang['user_pass'] = '패스워드';
+$lang['user_name'] = '실제 ì´ë¦„';
+$lang['user_mail'] = 'ì´ë©”ì¼ ';
+$lang['user_groups'] = '그룹들';
+$lang['field'] = '항목';
+$lang['value'] = 'ê°’';
+$lang['add'] = '추가';
+$lang['delete'] = '삭제';
+$lang['delete_selected'] = 'ì‚­ì œ ì„ íƒ';
+$lang['edit'] = '수정';
+$lang['edit_prompt'] = 'ì´ ì‚¬ìš©ìž ìˆ˜ì •';
+$lang['modify'] = '변경 저장';
+$lang['search'] = '검색';
+$lang['search_prompt'] = '검색 실행';
+$lang['clear'] = '검색 필터 초기화';
+$lang['filter'] = 'í•„í„°';
+$lang['summary'] = 'ê²€ìƒ‰ëœ ì‚¬ìš©ìžë“¤ 보기(%1$d-%2$d 중 %3$d). ì „ì²´ ì‚¬ìš©ìž %4$d 명.';
+$lang['nonefound'] = 'ê²€ìƒ‰ëœ ì‚¬ìš©ìžê°€ 없습니다. ì „ì²´ ì‚¬ìš©ìž %d 명.';
+$lang['delete_ok'] = '%d ëª…ì˜ ì‚¬ìš©ìžê°€ ì‚­ì œë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['delete_fail'] = '%d ëª…ì˜ ì‚¬ìš©ìžì˜ 삭제가 실패했습니다.';
+$lang['update_ok'] = 'ì‚¬ìš©ìž ê°±ì‹ ì´ ì„±ê³µí–ˆìŠµë‹ˆë‹¤.';
+$lang['update_fail'] = 'ì‚¬ìš©ìž ê°±ì‹ ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.';
+$lang['update_exists'] = 'ì‚¬ìš©ìž ì´ë¦„ ë³€ê²½ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤. ì‚¬ìš©ìž ì´ë¦„(%s)ì´ ì´ë¯¸ 존재합니다. (다른 í•­ëª©ë“¤ì˜ ë³€ê²½ì€ ì ìš©ë©ë‹ˆë‹¤.)';
+$lang['start'] = '시작';
+$lang['prev'] = 'ì´ì „';
+$lang['next'] = '다ìŒ';
+$lang['last'] = '마지막';
+$lang['edit_usermissing'] = 'ì„ íƒëœ 사용ìžë¥¼ ì°¾ì„ ìˆ˜ 없습니다, ì‚¬ìš©ìž ì´ë¦„ì´ ì‚­ì œë˜ê±°ë‚˜ 변경ëì„ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.';
+$lang['user_notify'] = '사용ìžì—게 알림';
+$lang['note_notify'] = '사용ìžì—게 새로운 암호를 준 경우ì—만 알림 ì´ë©”ì¼ì´ 보내집니다.';
+$lang['note_group'] = '새로운 사용ìžë“¤ì€ ì–´ë–¤ ê·¸ë£¹ë„ ì„¤ì •í•˜ì§€ ì•Šì€ ê²½ìš°ì— ê¸°ë³¸ 그룹(%s)ì— ì¶”ê°€ë©ë‹ˆë‹¤.';
+$lang['note_pass'] = 'ì‚¬ìš©ìž í†µì§€ê°€ 지정ë˜ì–´ 있ì„ë•Œ, í•„ë“œì— ì•„ë¬´ê°’ë„ ìž…ë ¥í•˜ì§€ 않으면 암호가 ìžë™ ìƒì„± ë©ë‹ˆë‹¤.';
+$lang['add_ok'] = '사용ìžê°€ 성공ì ìœ¼ë¡œ 추가ë˜ì—ˆìŠµë‹ˆë‹¤.';
+$lang['add_fail'] = 'ì‚¬ìš©ìž ì¶”ê°€ê°€ 실패했습니다.';
+$lang['notify_ok'] = '알림 ì´ë©”ì¼ì´ 성공ì ìœ¼ë¡œ 발송ë˜ì—ˆìŠµë‹ˆë‹¤. ';
+$lang['notify_fail'] = '알림 ì´ë©”ì¼ ë°œì†¡ì´ ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt
new file mode 100644
index 000000000..93fa3d6f2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt
@@ -0,0 +1 @@
+===== ì‚¬ìš©ìž ëª©ë¡ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt
new file mode 100644
index 000000000..32681ade7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt
@@ -0,0 +1,2 @@
+===== PridÄ—ti vartotojÄ… =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt
new file mode 100644
index 000000000..262713c98
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt
@@ -0,0 +1,2 @@
+===== IÅ¡trinti vartotojÄ… =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt
new file mode 100644
index 000000000..da57ea380
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt
@@ -0,0 +1,2 @@
+===== Redaguoti vartotojÄ… =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt
new file mode 100644
index 000000000..61f80d52e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt
@@ -0,0 +1,2 @@
+====== Vartotojų administravimas ======
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php
new file mode 100644
index 000000000..db3cf2d32
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Lithuanian language file
+ *
+ * @author grawity <grawity@gmail.com>
+ * @author audrius.klevas@gmail.com
+ * @author Arunas Vaitekunas <aras@fan.lt>
+ */
+$lang['menu'] = 'Vartotojų administravimas';
+$lang['noauth'] = '(vartotojų autentifikacija neprieinama)';
+$lang['nosupport'] = '(vartotojų administravimas nepalaikomas)';
+$lang['badauth'] = 'neteisingas autentifikacijos būdas';
+$lang['user_id'] = 'Vartotojas';
+$lang['user_pass'] = 'Slaptažodis';
+$lang['user_name'] = 'Vardas';
+$lang['user_mail'] = 'El.paštas';
+$lang['user_groups'] = 'GrupÄ—s';
+$lang['field'] = 'Laukas';
+$lang['value'] = 'Turinys';
+$lang['add'] = 'PridÄ—ti';
+$lang['delete'] = 'Pašalinti';
+$lang['delete_selected'] = 'Pašalinti pažymėtus';
+$lang['edit'] = 'Redaguoti';
+$lang['edit_prompt'] = 'Redaguoti šį vartotoją';
+$lang['modify'] = 'IÅ¡saugoti';
+$lang['search'] = 'Paieška';
+$lang['search_prompt'] = 'Ieškoti';
+$lang['clear'] = 'Panaikinti filtrÄ…';
+$lang['filter'] = 'Filtras';
+$lang['summary'] = 'Rodomi vartotojai %1$d-%2$d iš %3$d rastų. Iš viso %4$d vartotojų.';
+$lang['nonefound'] = 'Vartotojų nerasta. Iš viso %d vartotojų.';
+$lang['delete_ok'] = 'Pašalinta %d vartotojų';
+$lang['delete_fail'] = '%d nepavyko pašalinti.';
+$lang['update_ok'] = 'Vartotojas sÄ—kmingai pakeistas';
+$lang['update_fail'] = 'Vartotojo pakeitimas nepavyko';
+$lang['update_exists'] = 'Vartotojo vardo pakeitimas nepavyko, nes nurodytas vartotojo vardas (%s) jau yra (kiti pakeitimai įvykdyti).';
+$lang['start'] = 'pradžia';
+$lang['prev'] = 'atgal';
+$lang['next'] = 'pirmyn';
+$lang['last'] = 'pabaiga';
+$lang['edit_usermissing'] = 'Pasirinktas vartotojas nerastas, nurodytas vartotojo vardas galėjo būti pašalintas ar pakeistas kitur.';
+$lang['user_notify'] = 'Įspėti vartotoją';
+$lang['note_notify'] = 'Ä®spÄ—jimas siunÄiamas tik tada, kai vartotojui priskiriamas naujas slaptažodis.';
+$lang['note_group'] = 'Jei grupė nenurodyta, nauji vartotojai pridedami į pagrindinę grupę (%s).';
+$lang['add_ok'] = 'Vartotojas sÄ—kmingai pridÄ—tas';
+$lang['add_fail'] = 'Vartotojo pridÄ—jimas nepavyko';
+$lang['notify_ok'] = 'Įspėjimo el.laiškas išsiųstas';
+$lang['notify_fail'] = 'Įspėjimo el.laiško išsiųsti nepavyko';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt
new file mode 100644
index 000000000..87be62843
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt
@@ -0,0 +1,2 @@
+===== Vartotojų sąrašas =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt
new file mode 100644
index 000000000..06fd70002
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt
@@ -0,0 +1 @@
+===== Pievienot lietotÄju =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt
new file mode 100644
index 000000000..5f59af7b8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt
@@ -0,0 +1 @@
+===== DzÄ“st lietotÄju =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt
new file mode 100644
index 000000000..efb0b04d7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt
@@ -0,0 +1 @@
+===== Labot lietotÄju =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt
new file mode 100644
index 000000000..b248ddcb7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt
@@ -0,0 +1 @@
+====== LietotÄju pÄrvaldnieks ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php
new file mode 100644
index 000000000..620678ff5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Latvian language file
+ *
+ * @author Aivars Miška <allefm@gmail.lv>
+ * @author Aivars Miška <allefm@gmail.com>
+ */
+$lang['menu'] = 'LietotÄju pÄrvaldnieks';
+$lang['noauth'] = '(lietotÄju autentifikÄcijas nav)';
+$lang['nosupport'] = '(lietotÄju pÄrvaldÄ«ba netiek uzturÄ“ta)';
+$lang['badauth'] = 'nederÄ«gs autentifikÄcijas mehÄnisms';
+$lang['user_id'] = 'LietotÄjs';
+$lang['user_pass'] = 'Parole';
+$lang['user_name'] = 'VÄrds/uzvÄrds';
+$lang['user_mail'] = 'Epasts';
+$lang['user_groups'] = 'Grupas';
+$lang['field'] = 'Lauks';
+$lang['value'] = 'Vērtība';
+$lang['add'] = 'Pielikt';
+$lang['delete'] = 'Dzēst';
+$lang['delete_selected'] = 'Dzēst izvēlēto';
+$lang['edit'] = 'Labot';
+$lang['edit_prompt'] = 'Labot Å¡o lietotÄju';
+$lang['modify'] = 'SaglabÄt izmaiņas';
+$lang['search'] = 'Meklēšana';
+$lang['search_prompt'] = 'Meklēt';
+$lang['clear'] = 'Noņemt meklēšanas filtru';
+$lang['filter'] = 'Filtrs';
+$lang['summary'] = 'LietotÄji %1$d.- %2$d. no %3$d atrastajiem. Pavisam %4$d lietotÄji.';
+$lang['nonefound'] = 'Neviens nav atrasts. Pavisam %d lietotÄju.';
+$lang['delete_ok'] = 'DzÄ“sti %d lietotÄji';
+$lang['delete_fail'] = '%d neizdevÄs izdzÄ“st.';
+$lang['update_ok'] = 'LietotÄja dati saglabÄti';
+$lang['update_fail'] = 'LietotÄja dati nav saglabÄti';
+$lang['update_exists'] = 'LietotÄja vÄrds nav nomainÄ«ts, norÄdÄ«to vÄrdu (%s) kÄds jau izmanto (pÄrÄ“jÄs izmaiņas tiks saglabÄtas).';
+$lang['start'] = 'sÄkums';
+$lang['prev'] = 'iepriekšējais';
+$lang['next'] = 'nÄkamais';
+$lang['last'] = 'pēdējais';
+$lang['edit_usermissing'] = 'NorÄdÄ«tais lietotÄjs nav atrasts, varbÅ«t tas ir dzÄ“st vai mainÄ«ts citur.';
+$lang['user_notify'] = 'Paziņot lietotÄjam';
+$lang['note_notify'] = 'Paziņojumus izsÅ«ta tikai tad, ja lietotÄjam dod jaunu paroli.';
+$lang['note_group'] = 'Ja nenorÄda grupu, lietotÄju pievieno noklusÄ“tajai grupai (%s).';
+$lang['note_pass'] = 'Ja paroles lauku atstÄj tukÅ¡u un atzÄ«mÄ“ paziņoÅ¡anu lietotÄjam, parole tiks Ä£enerÄ“ta automÄtiski.';
+$lang['add_ok'] = 'LietotÄjs veiksmÄ«gi pievienots';
+$lang['add_fail'] = 'LietotÄjs nav pievienots.';
+$lang['notify_ok'] = 'Paziņojums izsūtīts.';
+$lang['notify_fail'] = 'Nevar izsūtīt paziņojumu.';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt
new file mode 100644
index 000000000..44a10d94c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt
@@ -0,0 +1 @@
+===== LietotÄju saraksts =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt
new file mode 100644
index 000000000..fc3a87737
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ नोंद करा ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt
new file mode 100644
index 000000000..cf0e48551
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ डिलीट करा ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt
new file mode 100644
index 000000000..2d3d64915
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ बदला ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt
new file mode 100644
index 000000000..9253b323e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php
new file mode 100644
index 000000000..8915678cc
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Marathi language file
+ *
+ * @author ghatothkach@hotmail.com
+ * @author Padmanabh Kulkarni <kulkarnipadmanabh@gmail.com>
+ * @author Padmanabh Kulkarni<kulkarnipadmanabh@gmail.com>
+ * @author shantanoo@gmail.com
+ */
+$lang['menu'] = 'सदसà¥à¤¯ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['noauth'] = '( सदसà¥à¤¯ अधिकृत करणà¥à¤¯à¤¾à¤šà¥€ सà¥à¤µà¤¿à¤§à¤¾ नाही )';
+$lang['nosupport'] = '( सदसà¥à¤¯ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ उपलबà¥à¤§ नाही )';
+$lang['badauth'] = 'अधिकृत करणà¥à¤¯à¤¾à¤šà¥€ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ अवैध';
+$lang['user_id'] = 'सदसà¥à¤¯';
+$lang['user_pass'] = 'पासवरà¥à¤¡';
+$lang['user_name'] = 'खरे नाव';
+$lang['user_mail'] = 'ईमेल';
+$lang['user_groups'] = 'गट';
+$lang['field'] = 'रकाना';
+$lang['value'] = 'किमà¥à¤®à¤¤';
+$lang['add'] = 'जोड़ा';
+$lang['delete'] = 'डिलीट';
+$lang['delete_selected'] = 'निवडलेले डिलीट करा';
+$lang['edit'] = 'संपादन';
+$lang['edit_prompt'] = 'या सदसà¥à¤¯à¤¾à¤šà¥€ माहिती बदला';
+$lang['modify'] = 'बदल सà¥à¤°à¤•à¥à¤·à¤¿à¤¤ करा';
+$lang['search'] = 'शोध';
+$lang['search_prompt'] = 'शोध करा';
+$lang['clear'] = 'शोधाचे निकष बदला';
+$lang['filter'] = 'निकष';
+$lang['summary'] = 'सापडलेलà¥à¤¯à¤¾ %3$d सदसà¥à¤¯à¤¾à¤ªà¥ˆà¤•à¥€ %1$d ते %2$d दाखवले आहेत. à¤à¤•à¥‚ण सदसà¥à¤¯à¤¾ %4$d.';
+$lang['nonefound'] = 'à¤à¤•à¤¹à¥€ सदसà¥à¤¯ मिळाला नाही. à¤à¤•à¥‚ण सदसà¥à¤¯ %d.';
+$lang['delete_ok'] = '%d सदसà¥à¤¯ डिलीट केले.';
+$lang['delete_fail'] = '%d डिलीट करू शकलो नाही.';
+$lang['update_ok'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ माहिती यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ बदलली आहे';
+$lang['update_fail'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ माहिती बदलता आली नाही';
+$lang['update_exists'] = 'सदसà¥à¤¯à¤¾à¤šà¥‡ नाव बदलू शकलो नाही. %s हे नाव आधीच असà¥à¤¤à¤¿à¤¤à¥à¤µà¤¾à¤¤ आहे. ( इतर सरà¥à¤µ बदल केले जातील )';
+$lang['start'] = 'सà¥à¤°à¥à¤µà¤¾à¤¤';
+$lang['prev'] = 'आधीचं';
+$lang['next'] = 'पà¥à¤¢à¤šà¤‚';
+$lang['last'] = 'शेवटचं';
+$lang['edit_usermissing'] = 'दिलेला सदसà¥à¤¯ सापडला नाही. तो कदाचित डिलीट à¤à¤¾à¤²à¤¾ असेल किंवा बदलला गेला असेल.';
+$lang['user_notify'] = 'सदसà¥à¤¯à¤¾à¤²à¤¾ सूचित करा.';
+$lang['note_notify'] = 'सदसà¥à¤¯à¤¾à¤²à¤¾ नवीन पासवरà¥à¤¡ दिला तरच सूचनेचे ईमेल पाठवले जातात.';
+$lang['note_group'] = 'नवीन सदसà¥à¤¯ जर गट निवडला नसेल तर %s या गटात टाकले जातील.';
+$lang['note_pass'] = 'पासवरà¥à¤¡à¤šà¤¾ रकाना रिकामा ठेवलà¥à¤¯à¤¾à¤¸ व सदसà¥à¤¯ सूचना वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾ चालू असलà¥à¤¯à¤¾à¤¸ पासवरà¥à¤¡ आपोआप तयार केला जाईल.';
+$lang['add_ok'] = 'सदसà¥à¤¯ यशसà¥à¤µà¥€à¤°à¥€à¤¤à¥à¤¯à¤¾ नोंद à¤à¤¾à¤²à¤¾';
+$lang['add_fail'] = 'सदसà¥à¤¯à¤¾à¤šà¥€ नोंद à¤à¤¾à¤²à¥€ नाही';
+$lang['notify_ok'] = 'सूचनेचा ईमेल पाठवला';
+$lang['notify_fail'] = 'सूचनेचा ईमेल पाठवला गेला नाही';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt
new file mode 100644
index 000000000..ab6906771
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt
@@ -0,0 +1 @@
+====== सदसà¥à¤¯ यादी ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt
new file mode 100644
index 000000000..868b12ab1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt
@@ -0,0 +1 @@
+=====पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt
new file mode 100644
index 000000000..4441c8349
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt
@@ -0,0 +1 @@
+===== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मेटà¥à¤¨à¥à¤¹à¥‹à¤¸ ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt
new file mode 100644
index 000000000..040d2697d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt
@@ -0,0 +1 @@
+===== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt
new file mode 100644
index 000000000..de08e483d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt
@@ -0,0 +1 @@
+====== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤• ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php
new file mode 100644
index 000000000..f68ed2074
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Nepali language file
+ *
+ * @author Saroj Kumar Dhakal <lotusnagarkot@gmail.com>
+ * @author SarojKumar Dhakal <lotusnagarkot@yahoo.com>
+ * @author Saroj Dhakal<lotusnagarkot@yahoo.com>
+ */
+$lang['menu'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤•';
+$lang['noauth'] = '(पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ पà¥à¤°à¤®à¤¾à¤£à¤¿à¤•à¤°à¤£ उपलबà¥à¤§ छैन)';
+$lang['nosupport'] = '(पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ वà¥à¤¯à¤µà¤¸à¥à¤¥à¤¾à¤ªà¤¨ समरà¥à¤¥à¤¿à¤¤ छैन)';
+$lang['badauth'] = 'अमानà¥à¤¯ पà¥à¤°à¤®à¤¾à¤£à¤¿à¤•à¤°à¤£ विधि';
+$lang['user_id'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾';
+$lang['user_pass'] = 'पà¥à¤°à¤µà¥‡à¤¶à¤¶à¤¬à¥à¤¦';
+$lang['user_name'] = 'वासà¥à¤¤à¤µà¤¿à¤• नाम';
+$lang['user_mail'] = 'इमेल';
+$lang['user_groups'] = 'समूह ';
+$lang['field'] = 'कà¥à¤·à¥‡à¤¤à¥à¤°';
+$lang['value'] = 'मान ';
+$lang['add'] = 'थपà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['delete'] = 'मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['delete_selected'] = 'सेलेकà¥à¤Ÿ गरिà¤à¤•à¥‹ मेटà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['edit'] = 'समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['edit_prompt'] = 'यो पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ समà¥à¤ªà¤¾à¤¦à¤¨ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥ ';
+$lang['modify'] = 'परिवरà¥à¤¤à¤¨ वचत गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['search'] = 'खोज';
+$lang['search_prompt'] = 'खोजà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['clear'] = 'खोज फिलà¥à¤Ÿà¤° पूरà¥à¤µà¤°à¥à¤ªà¤®à¤¾ फरà¥à¤•à¤¾à¤‰à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['filter'] = 'फिलà¥à¤Ÿà¤° ';
+$lang['summary'] = 'देखाउदै %1$d-%2$d of %3$d भेटिà¤à¤•à¤¾ %4$d कà¥à¤² पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मधà¥à¤¯à¥‡à¤¬à¤¾à¤Ÿ ।';
+$lang['nonefound'] = '%d कà¥à¤² पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¥¤ कà¥à¤¨à¥ˆ पनि पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ भेटिà¤à¤¨ ।';
+$lang['delete_ok'] = '%d पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मेटिà¤';
+$lang['delete_fail'] = '%d पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ हटाउन सकिà¤à¤¨ ';
+$lang['update_ok'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ सफलतापूरà¥à¤µà¤• अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• गरियो ';
+$lang['update_fail'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ अधà¥à¤¯à¤¾à¤µà¤§à¤¿à¤• कारà¥à¤¯ असफल';
+$lang['update_exists'] = 'परà¥à¤¯à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤•à¥‹ नाम परिवरà¥à¤¤à¤¨ असफल, दिइà¤à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ नाम( %s) पहिले देखि रहेको छ। ( यसबाहेकका परिवरà¥à¤°à¤¨à¤¹à¤°à¥‚ गरिà¤à¤•à¤¾ छनà¥)';
+$lang['start'] = 'सà¥à¤°à¥ गरà¥à¤¨à¥à¤¹à¥‹à¤¸à¥';
+$lang['prev'] = 'पहिलेको ';
+$lang['next'] = 'पछिको';
+$lang['last'] = 'अनà¥à¤¤à¤¿à¤®';
+$lang['edit_usermissing'] = 'छानिà¤à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ भेटिà¤à¤¨, खà¥à¤²à¤¾à¤‡à¤à¤•à¥‹ पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ मेटिà¤à¤•à¥‹ या कतै परिवरà¥à¤¤à¤¨ गरिà¤à¤•à¥‹ हà¥à¤¨à¤¸à¤•à¥à¤›à¥¤';
+$lang['user_notify'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ जानकारी दिनà¥à¤¹à¥‹à¤¸à¥ ';
+$lang['note_notify'] = 'जानकारी इमेल तब मातà¥à¤° पठाइनà¥à¤› जब पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ नयाठपà¥à¤°à¤µà¥‡à¤¶ शबà¥à¤¦ दिइनà¥à¤›à¥¤';
+$lang['note_group'] = 'नयाठपà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ पूरà¥à¤µà¤¨à¤¿à¤°à¥à¤§à¤¾à¤°à¤¿à¤¤ समूह नखà¥à¤²à¤¾à¤à¤®à¤¾ (%s) मा समावेश गराइनेछ ।';
+$lang['note_pass'] = 'पà¥à¤°à¤µà¥‡à¤¶ शवà¥à¤¦ कà¥à¤·à¥‡à¤¤à¥à¤° खाली राखेमा पà¥à¤°à¤µà¥‡à¤¶ शवà¥à¤¦ सà¥à¤µà¤¤: निरà¥à¤®à¤¾à¤£ हà¥à¤¨à¥‡à¤› र पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾à¤²à¤¾à¤ˆ जानकारी पठइने छ ।';
+$lang['add_ok'] = 'पà¥à¤°à¥‹à¤—करà¥à¤¤à¤¾ सफलतापूरà¥à¤µà¤• थपियो';
+$lang['add_fail'] = 'पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ थपà¥à¤¨à¥‡ कारà¥à¤¯ असफल';
+$lang['notify_ok'] = 'जानकारी पतà¥à¤° पठाइयो';
+$lang['notify_fail'] = 'जानकारी पतà¥à¤° पठाउन सकिà¤à¤¨ ';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt
new file mode 100644
index 000000000..ece94b388
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt
@@ -0,0 +1 @@
+===== पà¥à¤°à¤¯à¥‹à¤—करà¥à¤¤à¤¾ सà¥à¤šà¥€ ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt
new file mode 100644
index 000000000..992d9f300
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt
@@ -0,0 +1 @@
+===== Nieuwe gebruiker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt
new file mode 100644
index 000000000..ad26e058f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt
@@ -0,0 +1 @@
+===== Verwijder gebruiker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt
new file mode 100644
index 000000000..0d58e48f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt
@@ -0,0 +1 @@
+===== Gebruiker wijzigen ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt
new file mode 100644
index 000000000..7df09dbab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt
@@ -0,0 +1 @@
+==== Gebruikersmanager ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php
new file mode 100644
index 000000000..d4f0eaad9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Dutch language file
+ *
+ * @author Wouter Schoot <wouter@schoot.org>
+ * @author John de Graaff <john@de-graaff.net>
+ * @author Niels Schoot <niels.schoot@quintiq.com>
+ * @author Dion Nicolaas <dion@nicolaas.net>
+ * @author Danny Rotsaert <danny.rotsaert@edpnet.be>
+ * @author Marijn Hofstra hofstra.m@gmail.com
+ * @author Matthias Carchon webmaster@c-mattic.be
+ */
+$lang['menu'] = 'Gebruikersmanager';
+$lang['noauth'] = '(gebruikersauthenticatie niet beschikbaar)';
+$lang['nosupport'] = '(gebruikersmanagement niet ondersteund)';
+$lang['badauth'] = 'ongeldige authenticatiemethode';
+$lang['user_id'] = 'Gebruiker';
+$lang['user_pass'] = 'Wachtwoord';
+$lang['user_name'] = 'Volledige naam';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Groepen';
+$lang['field'] = 'Veld';
+$lang['value'] = 'Waarde';
+$lang['add'] = 'Toevoegen';
+$lang['delete'] = 'Verwijder';
+$lang['delete_selected'] = 'Verwijder geselecteerden';
+$lang['edit'] = 'Wijzigen';
+$lang['edit_prompt'] = 'Wijzig deze gebruiker';
+$lang['modify'] = 'Wijzigingen opslaan';
+$lang['search'] = 'Zoek';
+$lang['search_prompt'] = 'Voer zoekopdracht uit';
+$lang['clear'] = 'Verwijder zoekfilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Weergegeven gebruikers %1$d-%2$d van %3$d gevonden. %4$d gebruikers in totaal.';
+$lang['nonefound'] = 'Geen gebruikers gevonden. %d gebruikers in totaal.';
+$lang['delete_ok'] = '%d gebruikers verwijderd';
+$lang['delete_fail'] = '%d kon niet worden verwijderd.';
+$lang['update_ok'] = 'Gebruiker succesvol gewijzigd';
+$lang['update_fail'] = 'Gebruiker wijzigen mislukt';
+$lang['update_exists'] = 'Gebruikersnaam veranderen mislukt, de opgegeven gebruikersnaam (%s) bestaat reeds (overige aanpassingen worden wel doorgevoerd).';
+$lang['start'] = 'start';
+$lang['prev'] = 'vorige';
+$lang['next'] = 'volgende';
+$lang['last'] = 'laatste';
+$lang['edit_usermissing'] = 'Geselecteerde gebruiker niet gevonden, de opgegeven gebruikersnaam kan verwijderd zijn of elders aangepast.';
+$lang['user_notify'] = 'Gebruiker notificeren';
+$lang['note_notify'] = 'Notificatie-e-mails worden alleen verstuurd wanneer de gebruiker een nieuw wachtwoord wordt toegekend.';
+$lang['note_group'] = 'Nieuwe gebruikers zullen aan de standaard groep (%s) worden toegevoegd als er geen groep opgegeven is.';
+$lang['note_pass'] = 'Het wachtwoord wordt automatisch gegenereerd als het veld wordt leeggelaten en gebruikersnotificaties aanstaan.';
+$lang['add_ok'] = 'Gebruiker succesvol toegevoegd';
+$lang['add_fail'] = 'Gebruiker kon niet worden toegevoegd';
+$lang['notify_ok'] = 'Notificatie-e-mail verzonden';
+$lang['notify_fail'] = 'Notificatie-e-mail kon niet worden verzonden';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt
new file mode 100644
index 000000000..a9aac845d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt
@@ -0,0 +1 @@
+===== Gebruikerslijst ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt
new file mode 100644
index 000000000..4fb9cf271
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt
@@ -0,0 +1 @@
+===== Legg til bruker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt
new file mode 100644
index 000000000..55010182f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt
@@ -0,0 +1 @@
+===== Slett bruker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt
new file mode 100644
index 000000000..3dff0c92e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt
@@ -0,0 +1 @@
+===== Rediger bruker ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt
new file mode 100644
index 000000000..c9e1e5b8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt
@@ -0,0 +1 @@
+===== Behandle brukere ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php
new file mode 100644
index 000000000..df38de1b0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Norwegianlanguage file
+ *
+ * @author Thomas Nygreen <nygreen@gmail.com>
+ * @author Arild Burud <arildb@met.no>
+ * @author Torkill Bruland <torkar-b@online.no>
+ * @author Rune M. Andersen <rune.andersen@gmail.com>
+ * @author Jakob Vad Nielsen (me@jakobnielsen.net)
+ * @author Kjell Tore Næsgaard <kjell.t.nasgaard@ntnu.no>
+ * @author Knut Staring <knutst@gmail.com>
+ * @author Lisa Ditlefsen <lisa@vervesearch.com>
+ * @author Erik Pedersen <erik.pedersen@shaw.ca>
+ * @author Erik Bjørn Pedersen <erik.pedersen@shaw.ca>
+ */
+$lang['menu'] = 'Behandle brukere';
+$lang['noauth'] = '(autentisering av brukere ikke tilgjengelig)';
+$lang['nosupport'] = '(behandling av brukere støttes ikke)';
+$lang['badauth'] = 'ugyldig autentiseringsmekanisme';
+$lang['user_id'] = 'Bruker';
+$lang['user_pass'] = 'Passord';
+$lang['user_name'] = 'Fullt navn';
+$lang['user_mail'] = 'E-post';
+$lang['user_groups'] = 'Grupper';
+$lang['field'] = 'Felt';
+$lang['value'] = 'Verdi';
+$lang['add'] = 'Legg til';
+$lang['delete'] = 'Slett';
+$lang['delete_selected'] = 'Slett utvalgte';
+$lang['edit'] = 'Rediger';
+$lang['edit_prompt'] = 'Rediger denne brukeren';
+$lang['modify'] = 'Lagre endringer';
+$lang['search'] = 'Søk';
+$lang['search_prompt'] = 'Start søk';
+$lang['clear'] = 'Tilbakestill søkefilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Viser brukere %1$d-%2$d av %3$d. %4$d users total.';
+$lang['nonefound'] = 'Ingen brukere funnet. %d brukere totalt.';
+$lang['delete_ok'] = '%d brukere slettet.';
+$lang['delete_fail'] = '%d kunne ikke slettes.';
+$lang['update_ok'] = 'Brukeren ble oppdatert';
+$lang['update_fail'] = 'Oppdatering av brukeren feilet';
+$lang['update_exists'] = 'Endring av brukernavn feilet. Det oppgitte brukernavnet (%s) eksisterer allerede (alle andre endringer vil bli gjort).';
+$lang['start'] = 'første';
+$lang['prev'] = 'forrige';
+$lang['next'] = 'neste';
+$lang['last'] = 'siste';
+$lang['edit_usermissing'] = 'Fant ikke valgte brukere. Det oppgitte brukernavnet kan ha blitt slettet eller endret et annet sted.';
+$lang['user_notify'] = 'Varsle bruker';
+$lang['note_notify'] = 'E-post med varsling blir bare sendt hvis brukeren blir gitt nytt passord.';
+$lang['note_group'] = 'Nye brukere vil bli lagt til standardgruppen (%s) hvis ingen gruppe oppgis.';
+$lang['note_pass'] = 'Passordet vil bli autogenerert dersom feltet er tomt og varsle bruker er valgt.';
+$lang['add_ok'] = 'Brukeren ble lagt til';
+$lang['add_fail'] = 'Brukeren kunne ikke legges til';
+$lang['notify_ok'] = 'Varsling sendt';
+$lang['notify_fail'] = 'Varsling kunne ikke sendes';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt
new file mode 100644
index 000000000..40de64b01
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt
@@ -0,0 +1 @@
+===== Brukerliste ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt
new file mode 100644
index 000000000..a33f3baa7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt
@@ -0,0 +1 @@
+===== Dodawanie użytkownika =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt
new file mode 100644
index 000000000..72dd338f3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt
@@ -0,0 +1 @@
+===== Usuwanie użytkownika =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt
new file mode 100644
index 000000000..3c9d89835
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt
@@ -0,0 +1 @@
+===== Edycja użytkownika =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt
new file mode 100644
index 000000000..da1cfeac0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt
@@ -0,0 +1 @@
+====== Menadżer użytkowników ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php
new file mode 100644
index 000000000..3db83b9b3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * polish language file
+ *
+ * @author Grzegorz Żur <grzegorz.zur@gmail.com>
+ * @author Mariusz Kujawski <marinespl@gmail.com>
+ * @author Maciej Kurczewski <pipijajko@gmail.com>
+ * @author SÅ‚awomir Boczek <slawkens@gmail.com>
+ */
+$lang['menu'] = 'Menadżer użytkowników';
+$lang['noauth'] = '(uwierzytelnienie użytkownika niemożliwe)';
+$lang['nosupport'] = '(zarządzanie użytkownikami niemożliwe)';
+$lang['badauth'] = 'błędny mechanizm uwierzytelniania';
+$lang['user_id'] = 'Nazwa użytkownika';
+$lang['user_pass'] = 'Hasło';
+$lang['user_name'] = 'Użytkownik';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupy';
+$lang['field'] = 'Pole';
+$lang['value'] = 'Wartość';
+$lang['add'] = 'Dodaj';
+$lang['delete'] = 'Usuń';
+$lang['delete_selected'] = 'Usuń zaznaczone';
+$lang['edit'] = 'Edytuj';
+$lang['edit_prompt'] = 'Edytuj użytkownika';
+$lang['modify'] = 'Zapisz zmiany';
+$lang['search'] = 'Szukaj';
+$lang['search_prompt'] = 'Rozpocznij przeszukiwanie';
+$lang['clear'] = 'Resetuj filtr przeszukiwania';
+$lang['filter'] = 'Filtr';
+$lang['summary'] = 'Użytkownicy %1$d-%2$d z %3$d znalezionych. Całkowita ilość użytkowników %4$d.';
+$lang['nonefound'] = 'Nie znaleziono użytkowników. Całkowita ilość użytkowników %d.';
+$lang['delete_ok'] = 'Usunięto %d użytkowników.';
+$lang['delete_fail'] = 'Błąd przy usuwaniu %d użytkowników.';
+$lang['update_ok'] = 'Dane użytkownika zostały zmienione!';
+$lang['update_fail'] = 'Błąd przy zmianie danych użytkownika!';
+$lang['update_exists'] = 'Błąd przy zmianie nazwy użytkownika, użytkownik o tej nazwie (%s) już istnieje (inne zmiany zostały wprowadzone).';
+$lang['start'] = 'poczÄ…tek';
+$lang['prev'] = 'poprzedni';
+$lang['next'] = 'następny';
+$lang['last'] = 'ostatni';
+$lang['edit_usermissing'] = 'Nie znaleziono wybranego użytkownika, nazwa użytkownika mogła zostać zmieniona lub usunięta.';
+$lang['user_notify'] = 'Powiadamianie użytkownika';
+$lang['note_notify'] = 'Powiadomienia wysyłane są tylko jeżeli zmieniono hasło użytkownika.';
+$lang['note_group'] = 'Nowy użytkownik zostanie dodany do grupy domyślnej (%s) jeśli nie podano innej grupy.';
+$lang['note_pass'] = 'Jeśli pole będzie puste i powiadamianie użytkownika jest włączone, hasło zostanie automatyczne wygenerowane.';
+$lang['add_ok'] = 'Dodano użytkownika';
+$lang['add_fail'] = 'Dodawanie użytkownika nie powiodło się';
+$lang['notify_ok'] = 'Powiadomienie zostało wysłane';
+$lang['notify_fail'] = 'Wysyłanie powiadomienia nie powiodło się';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt
new file mode 100644
index 000000000..57da2e605
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt
@@ -0,0 +1 @@
+===== Lista użytkowników =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt
new file mode 100644
index 000000000..759ed688b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt
@@ -0,0 +1 @@
+===== Adicionar usuário ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt
new file mode 100644
index 000000000..9d18d58ff
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt
@@ -0,0 +1 @@
+===== Excluir usuário ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt
new file mode 100644
index 000000000..a1be1c8b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt
@@ -0,0 +1 @@
+===== Editar usuário ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt
new file mode 100644
index 000000000..5f3399653
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt
@@ -0,0 +1 @@
+====== Gerenciamento de Usuários ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php
new file mode 100644
index 000000000..cf7e48ea7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Portuguese language file
+ *
+ * @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
+ * @author Felipe Castro <fefcas@gmail.com>
+ * @author Lucien Raven <lucienraven@yahoo.com.br>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Flávio Veras <flaviove@gmail.com>
+ * @author Jeferson Propheta <jeferson.propheta@gmail.com>
+ * @author jair.henrique@gmail.com
+ * @author Luis Dantas <luis@dantas.com>
+ * @author Frederico Guimarães <frederico@teia.bio.br>
+ * @author Jair Henrique <jair.henrique@gmail.com>
+ * @author Luis Dantas <luisdantas@gmail.com>
+ */
+$lang['menu'] = 'Gerenciamento de Usuários';
+$lang['noauth'] = '(o gerenciamento de usuários não está disponível)';
+$lang['nosupport'] = '(o gerenciamento de usuários não é suportado)';
+$lang['badauth'] = 'mecanismo de autenticação inválido';
+$lang['user_id'] = 'Usuário';
+$lang['user_pass'] = 'Senha';
+$lang['user_name'] = 'Nome real';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Adicionar';
+$lang['delete'] = 'Excluir';
+$lang['delete_selected'] = 'Excluir a seleção';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar esse usuário';
+$lang['modify'] = 'Salvar as alterações';
+$lang['search'] = 'Pesquisar';
+$lang['search_prompt'] = 'Executar a pesquisa';
+$lang['clear'] = 'Limpar o filtro de pesquisa';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'Exibindo usuários %1$d-%2$d de %3$d encontrados. %4$d usuários no total.';
+$lang['nonefound'] = 'Nenhum usuário encontrado. %d usuários no total.';
+$lang['delete_ok'] = '%d usuários excluídos';
+$lang['delete_fail'] = 'Erro na exclusão de %d usuários.';
+$lang['update_ok'] = 'Usuário atualizado com sucesso';
+$lang['update_fail'] = 'Não foi possível atualizar o usuário';
+$lang['update_exists'] = 'Não foi possível mudar o nome do usuário. O nome especificado (%s) já existe (as outras mudanças serão aplicadas).';
+$lang['start'] = 'primeira';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'próxima';
+$lang['last'] = 'última';
+$lang['edit_usermissing'] = 'O usuário selecionado não foi encontrado, ele foi excluído ou teve o seu nome modificado.';
+$lang['user_notify'] = 'Notificar o usuário';
+$lang['note_notify'] = 'E-mails de notificação são enviados apenas se o usuário digitar uma nova senha.';
+$lang['note_group'] = 'Novos usuários serão adicionados ao grupo padrão (%s), caso nenhum grupo seja especificado.';
+$lang['note_pass'] = 'A senha será gerada automaticamente se o campo for deixado em branco e a notificação de usuário estiver habilitada.';
+$lang['add_ok'] = 'O usuário foi adicionado com sucesso';
+$lang['add_fail'] = 'O usuário não foi adicionado';
+$lang['notify_ok'] = 'O e-mail de notificação foi enviado';
+$lang['notify_fail'] = 'Não foi possível enviar o e-mail de notificação';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt
new file mode 100644
index 000000000..e5f79fb8d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt
@@ -0,0 +1 @@
+===== Lista de usuários ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt
new file mode 100644
index 000000000..a4c2672c7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt
@@ -0,0 +1 @@
+===== Adicionar Utilizador ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt
new file mode 100644
index 000000000..95bffc1e3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt
@@ -0,0 +1 @@
+===== Remover Utilizador ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt
new file mode 100644
index 000000000..176798454
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt
@@ -0,0 +1 @@
+===== Editar Utilizador ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt
new file mode 100644
index 000000000..27985ded6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt
@@ -0,0 +1 @@
+===== Gerir Utilizadores ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php
new file mode 100644
index 000000000..8c4607922
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Portugueselanguage file
+ *
+ * @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
+ * @author Enrico Nicoletto <liverig@gmail.com>
+ * @author Fil <fil@meteopt.com>
+ * @author André Neves <drakferion@gmail.com>
+ */
+$lang['menu'] = 'Gestor de Perfis';
+$lang['noauth'] = '(autenticação indisponível)';
+$lang['nosupport'] = '(gestão de utilizadores não suportada)';
+$lang['badauth'] = 'Mecanismo de autenticação inválido';
+$lang['user_id'] = 'Utilizador';
+$lang['user_pass'] = 'Senha';
+$lang['user_name'] = 'Nome Real';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Grupos';
+$lang['field'] = 'Campo';
+$lang['value'] = 'Valor';
+$lang['add'] = 'Adicionar';
+$lang['delete'] = 'Remover';
+$lang['delete_selected'] = 'Remover Seleccionado(s)';
+$lang['edit'] = 'Editar';
+$lang['edit_prompt'] = 'Editar utilizador';
+$lang['modify'] = 'Gravar Alterações';
+$lang['search'] = 'Pesquisar';
+$lang['search_prompt'] = 'Pesquisar';
+$lang['clear'] = 'Limpar Filtro de Pesquisa';
+$lang['filter'] = 'Filtro';
+$lang['summary'] = 'Apresentar utilizadores %1$d-%2$d de %3$d encontrados. %4$d inscritos.';
+$lang['nonefound'] = 'Nenhum utilizador encontrado. %d inscritos.';
+$lang['delete_ok'] = '%d utilizadores removidos';
+$lang['delete_fail'] = '%d remoções falhadas.';
+$lang['update_ok'] = 'Utilizador actualizado';
+$lang['update_fail'] = 'Utilizador não actualizado';
+$lang['update_exists'] = 'Falhou a alteração do nome, porque o utilizador (%s) já existe (as restantes alterações serão aplicadas).';
+$lang['start'] = 'primeiro';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'seguinte';
+$lang['last'] = 'último';
+$lang['edit_usermissing'] = 'Utilizador seleccionado não encontrado. Terá já sido removido ou alterado entretanto?';
+$lang['user_notify'] = 'Notificar utilizador';
+$lang['note_notify'] = 'Notificações só são enviadas se for atribuída uma nova senha ao utilizador.';
+$lang['note_group'] = 'Os novos utilizadores são adicionados ao grupo por omissão (%s) se não for especificado nenhum grupo.';
+$lang['note_pass'] = 'A password será automáticamente gerada se o campo esquerdo estiver vazio e a notificação de utilizador estiver activada.';
+$lang['add_ok'] = 'Utilizador adicionado.';
+$lang['add_fail'] = 'Utilizador não adicionado.';
+$lang['notify_ok'] = 'Mensagem de notificação enviada.';
+$lang['notify_fail'] = 'Não foi possível enviar mensagem de notificação';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt
new file mode 100644
index 000000000..01a0460aa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt
@@ -0,0 +1 @@
+===== Lista de Utilizadores ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt
new file mode 100644
index 000000000..9a5c45eef
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt
@@ -0,0 +1 @@
+===== Adaugă utilizator ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt
new file mode 100644
index 000000000..ea65fa984
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt
@@ -0,0 +1 @@
+===== Åžterge utilizator ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt
new file mode 100644
index 000000000..b7f8a4213
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt
@@ -0,0 +1 @@
+===== Editează utilizator ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt
new file mode 100644
index 000000000..f3c66266d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt
@@ -0,0 +1 @@
+===== Manager Utilizatori ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php
new file mode 100644
index 000000000..260814aed
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Romanian language file
+ *
+ * @author Sergiu Baltariu <s_baltariu@yahoo.com>
+ * @author s_baltariu@yahoo.com
+ * @author Emanuel-Emeric Andrasi <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrași <n30@mandrivausers.ro>
+ * @author Emanuel-Emeric AndraÅŸi <em.andrasi@mandrivausers.ro>
+ * @author Emanuel-Emeric Andrasi <em.andrasi@mandrivausers.ro>
+ */
+$lang['menu'] = 'Manager Utilizatori';
+$lang['noauth'] = '(autentificarea utilizatorilor nu este disponibilă)';
+$lang['nosupport'] = '(menegementul utilizatorilor nu e suportat)';
+$lang['badauth'] = 'mecanism de autentificare invalid';
+$lang['user_id'] = 'Utilizator';
+$lang['user_pass'] = 'Parolă';
+$lang['user_name'] = 'Nume Real';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Grupuri';
+$lang['field'] = 'Câmp';
+$lang['value'] = 'Valoare';
+$lang['add'] = 'Adaugă';
+$lang['delete'] = 'Åžterge';
+$lang['delete_selected'] = 'Şterge selecţia';
+$lang['edit'] = 'Editează';
+$lang['edit_prompt'] = 'Editează acest utilizator';
+$lang['modify'] = 'Salvează Modificările';
+$lang['search'] = 'Caută';
+$lang['search_prompt'] = 'Se caută';
+$lang['clear'] = 'Resetează Filtrul de Căutare';
+$lang['filter'] = 'Filtru';
+$lang['summary'] = 'Afişarea utilizatorilor %1$d-%2$d din %3$d găsită. %4$d utilizatori în total.';
+$lang['nonefound'] = 'Nici un utilizator nu a fost găsit. %d utilizatori în total.';
+$lang['delete_ok'] = '%d utilizatori ÅŸterÅŸi';
+$lang['delete_fail'] = '%d eÅŸuat la ÅŸtergere.';
+$lang['update_ok'] = 'Utilizatorul a fost actualizat cu succes';
+$lang['update_fail'] = 'Actualizarea utilizatorului a eÅŸuat';
+$lang['update_exists'] = 'Modificarea numelui de utilizator a eşuat. Numele de utilizator specificat (%s) există deja (orice altă modificare se va aplica)';
+$lang['start'] = 'început';
+$lang['prev'] = 'anterior';
+$lang['next'] = 'urmator';
+$lang['last'] = 'sfârşit';
+$lang['edit_usermissing'] = 'Utilizatorul selectat nu a fost găsit. E posibil ca numele de utilizator specificat să fi fost şters sau modificat în altă parte.';
+$lang['user_notify'] = 'Notificare utilizator';
+$lang['note_notify'] = 'Emailurile de notificare sunt trimise numai dacă utilizatorului îi este dată o nouă parolă.';
+$lang['note_group'] = 'Noii utilizatori vor fi adăugaţi la grupul implicit (%s) dacă nu se specifică grupul.';
+$lang['note_pass'] = 'Parola va fi regenerată automat dacă câmpul este lăsat gol şi notificarea utilizatorului este activată.';
+$lang['add_ok'] = 'Utilizator adăugat cu succes';
+$lang['add_fail'] = 'Adăugarea utilizatorului a eşuat';
+$lang['notify_ok'] = 'Emailul de notificare a fost trimis';
+$lang['notify_fail'] = 'Emailul de notificare nu a putut fi trimis';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt
new file mode 100644
index 000000000..6c0563444
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt
@@ -0,0 +1 @@
+===== Listă utilizatori ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt
new file mode 100644
index 000000000..3cb4264e7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt
@@ -0,0 +1 @@
+===== Добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt
new file mode 100644
index 000000000..80f874e05
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt
@@ -0,0 +1 @@
+===== Удалить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt
new file mode 100644
index 000000000..d447c4005
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt
@@ -0,0 +1 @@
+===== Редактировать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt
new file mode 100644
index 000000000..3a3e2607d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt
@@ -0,0 +1 @@
+====== Управление пользователÑми ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php
new file mode 100644
index 000000000..7bfe3410d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Russian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Denis Simakov <akinoame1@gmail.com>
+ * @author Andrew Pleshakov <beotiger@mail.ru>
+ * @author Змей ЭтерийÑкий evil_snake@eternion.ru
+ * @author Hikaru Nakajima <jisatsu@mail.ru>
+ * @author Alexei Tereschenko <alexeitlex@yahoo.com>
+ * @author Irina Ponomareva irinaponomareva@webperfectionist.com
+ * @author Alexander Sorkin <kibizoid@gmail.com>
+ * @author Kirill Krasnov <krasnovforum@gmail.com>
+ * @author Vlad Tsybenko <vlad.development@gmail.com>
+ */
+$lang['menu'] = 'Управление пользователÑми';
+$lang['noauth'] = '(Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ недоÑтупна)';
+$lang['nosupport'] = '(управление пользователÑми не поддерживаетÑÑ)';
+$lang['badauth'] = 'некорректный механизм аутентификации';
+$lang['user_id'] = 'Логин';
+$lang['user_pass'] = 'Пароль';
+$lang['user_name'] = 'Полное имÑ';
+$lang['user_mail'] = 'Е-мÑйл';
+$lang['user_groups'] = 'Группы';
+$lang['field'] = 'Поле';
+$lang['value'] = 'Значение';
+$lang['add'] = 'Добавить';
+$lang['delete'] = 'Удалить';
+$lang['delete_selected'] = 'Удалить выбранные';
+$lang['edit'] = 'Редактировать';
+$lang['edit_prompt'] = 'Редактировать Ñтого пользователÑ';
+$lang['modify'] = 'Сохранить изменениÑ';
+$lang['search'] = 'ПоиÑк';
+$lang['search_prompt'] = 'ИÑкать';
+$lang['clear'] = 'Ð¡Ð±Ñ€Ð¾Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° поиÑка';
+$lang['filter'] = 'Фильтр';
+$lang['summary'] = 'Показаны пользователи %1$d-%2$d из %3$d найденных. Ð’Ñего пользователей: %4$d.';
+$lang['nonefound'] = 'Ðе найдено ни одного пользователÑ. Ð’Ñего пользователей: %d.';
+$lang['delete_ok'] = 'Удалено пользователей: %d';
+$lang['delete_fail'] = 'Ðе удалоÑÑŒ удалить %d.';
+$lang['update_ok'] = 'Пользователь уÑпешно обновлен';
+$lang['update_fail'] = 'Ðе удалоÑÑŒ обновить пользователÑ';
+$lang['update_exists'] = 'Ðе удалоÑÑŒ изменить Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, такой пользователь (%s) уже ÑущеÑтвует (вÑе оÑтальные Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ применены).';
+$lang['start'] = 'в начало';
+$lang['prev'] = 'назад';
+$lang['next'] = 'вперед';
+$lang['last'] = 'в конец';
+$lang['edit_usermissing'] = 'Выбранный пользователь не найден. Возможно, указанный логин был удален или изменен извне.';
+$lang['user_notify'] = 'Сообщить пользователю';
+$lang['note_notify'] = 'Е-мÑйлы Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼ поÑылаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ в Ñлучае Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ паролÑ.';
+$lang['note_group'] = 'ЕÑли группа не указана, новые пользователи будут добавлены в группу по умолчанию (%s).';
+$lang['note_pass'] = 'Пароль будет Ñгенерирован автоматичеÑки, еÑли поле оÑтавлено пуÑтым и включено уведомление пользователÑ.';
+$lang['add_ok'] = 'Пользователь уÑпешно добавлен';
+$lang['add_fail'] = 'Ðе удалоÑÑŒ добавить пользователÑ';
+$lang['notify_ok'] = 'Е-мÑйл Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼ был поÑлан';
+$lang['notify_fail'] = 'Ðе удалоÑÑŒ поÑлать е-мÑйл Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt
new file mode 100644
index 000000000..26c0cbead
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt
@@ -0,0 +1 @@
+===== СпиÑок пользователей =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt
new file mode 100644
index 000000000..e2e106089
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt
@@ -0,0 +1,2 @@
+===== Pridanie užívateľa =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt
new file mode 100644
index 000000000..c7d6a3cc2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt
@@ -0,0 +1,2 @@
+===== Zmazanie užívateľa =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt
new file mode 100644
index 000000000..28af5b53c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt
@@ -0,0 +1,2 @@
+===== Zmena užívateľa =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt
new file mode 100644
index 000000000..0a626de52
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt
@@ -0,0 +1,2 @@
+====== Správa používateľov ======
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php
new file mode 100644
index 000000000..8b309bc71
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Slovak language file
+ *
+ * @author Ondrej Végh <ov@vsieti.sk>
+ * @author Michal Mesko <michal.mesko@gmail.com>
+ * @author exusik@gmail.com
+ * @author Martin Michalek <michalek.dev@gmail.com>
+ */
+$lang['menu'] = 'Správa používateľov';
+$lang['noauth'] = '(autentifikácia užívateľov nie je dostupná)';
+$lang['nosupport'] = '(správa užívateľov nie je podporovaná)';
+$lang['badauth'] = 'vadný autorizaÄný mechanizmus';
+$lang['user_id'] = 'Užívateľ';
+$lang['user_pass'] = 'Heslo';
+$lang['user_name'] = 'SkutoÄné meno';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Skupiny';
+$lang['field'] = 'Pole';
+$lang['value'] = 'Hodnota';
+$lang['add'] = 'Pridať';
+$lang['delete'] = 'Zmazať';
+$lang['delete_selected'] = 'Zmazať vybrané';
+$lang['edit'] = 'Zmeniť';
+$lang['edit_prompt'] = 'Zmeniť tohoto užívateľa';
+$lang['modify'] = 'Uložiť zmeny';
+$lang['search'] = 'Hľadať';
+$lang['search_prompt'] = 'Vykonať vyhľadávanie';
+$lang['clear'] = 'Vynulovať vyhľadávací filter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Zobrazenie užívateľov %1$d-%2$d z %3$d nájdených. %4$d užívateľov celkom.';
+$lang['nonefound'] = 'Žiadni užívatelia nenájdení. %d užívateľov celkom.';
+$lang['delete_ok'] = '%d užívateľov zmazaných';
+$lang['delete_fail'] = '%d chýb vymazania.';
+$lang['update_ok'] = 'Užívateľ úspešne zmenený';
+$lang['update_fail'] = 'Chyba zmeny užívateľa';
+$lang['update_exists'] = 'Chyba zmeny užívateľa, užívateľské meno (%s) už existuje (iné zmeny budú zaznamenané).';
+$lang['start'] = 'prvé';
+$lang['prev'] = 'predošlé';
+$lang['next'] = 'ÄalÅ¡ie';
+$lang['last'] = 'posledné';
+$lang['edit_usermissing'] = 'Vybraný užívateľ nebol nájdený, mohol byť zmazaný, alebo zmenený iným spôsobom.';
+$lang['user_notify'] = 'Upozorniť užívateľa';
+$lang['note_notify'] = 'NotifikaÄné e-maily iba vtedy, ak dostane užívateľ nové heslo';
+$lang['note_group'] = 'Noví užívatelia budú pridaní do východej skupiny (%s), ak nie je pre nich špecifikovaná iná skupina.';
+$lang['note_pass'] = 'Heslo bude vygenegované automaticky, ak bude pole prázdne a je zapnutá notifikácia používateľa.';
+$lang['add_ok'] = 'Používateľ úspešne pridaný';
+$lang['add_fail'] = 'Pridávanie užívateľa nebolo úspešné';
+$lang['notify_ok'] = 'NotifikaÄný e-mail bol poslaný';
+$lang['notify_fail'] = 'NotifikaÄný e-mail nemohol byÅ¥ poslaný';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt
new file mode 100644
index 000000000..6f15331e9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt
@@ -0,0 +1,2 @@
+===== Zoznam užívateľov =====
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt
new file mode 100644
index 000000000..985fa607e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt
@@ -0,0 +1 @@
+===== Dodaj uporabnika ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt
new file mode 100644
index 000000000..515b343e5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt
@@ -0,0 +1 @@
+===== Izbriši uporabnika ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt
new file mode 100644
index 000000000..23aeb0c3b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt
@@ -0,0 +1 @@
+===== Uredi uporabnika ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php
new file mode 100644
index 000000000..e31f8ff1a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Slovenian language file
+ *
+ * @author Dejan Levec <webphp@gmail.com>
+ * @author BoÅ¡tjan SeniÄar <senicar@gmail.com>
+ */
+$lang['user_id'] = 'Uporabnik';
+$lang['user_pass'] = 'Geslo';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Skupine';
+$lang['add'] = 'Dodaj';
+$lang['delete'] = 'Izbriši';
+$lang['delete_selected'] = 'Izbriši izbrano';
+$lang['edit'] = 'Uredi';
+$lang['modify'] = 'Shrani spremembe';
+$lang['search'] = 'Iskanje';
+$lang['prev'] = 'Prejšnji';
+$lang['next'] = 'Naslednji';
+$lang['last'] = 'Zadnji';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt
new file mode 100644
index 000000000..1aa8b7a7c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt
@@ -0,0 +1 @@
+===== Seznam uporabnikov ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt
new file mode 100644
index 000000000..1de9a50e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt
@@ -0,0 +1 @@
+===== Додај кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt
new file mode 100644
index 000000000..9b50365be
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt
@@ -0,0 +1 @@
+===== Обриши кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt
new file mode 100644
index 000000000..11e22e2f5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt
@@ -0,0 +1 @@
+===== Измени кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt
new file mode 100644
index 000000000..6c6ac9a5c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt
@@ -0,0 +1 @@
+====== Управљач кориÑницима ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php
new file mode 100644
index 000000000..ab64c925a
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Serbian language file
+ *
+ * @author Иван Петровић petrovicivan@ubuntusrbija.org
+ * @author Ivan Petrovic <petrovicivan@ubuntusrbija.org>
+ */
+$lang['menu'] = 'Управљач кориÑницима';
+$lang['noauth'] = '(кориÑничка провера није доÑтупна)';
+$lang['nosupport'] = '(уптављање кориÑницима није подржано)';
+$lang['badauth'] = 'неиÑправан механизам провере';
+$lang['user_id'] = 'КориÑник';
+$lang['user_pass'] = 'Лозинка';
+$lang['user_name'] = 'Име и презиме';
+$lang['user_mail'] = 'Е-адреÑа';
+$lang['user_groups'] = 'Групе';
+$lang['field'] = 'Поље';
+$lang['value'] = 'ВредноÑÑ‚';
+$lang['add'] = 'Додај';
+$lang['delete'] = 'Обриши';
+$lang['delete_selected'] = 'Обриши одабране';
+$lang['edit'] = 'Измени';
+$lang['edit_prompt'] = 'Измени кориÑника';
+$lang['modify'] = 'Сачувај измене';
+$lang['search'] = 'Претрага';
+$lang['search_prompt'] = 'Изведи претрагу';
+$lang['clear'] = 'Поништи филтер претраге';
+$lang['filter'] = 'Филтер';
+$lang['summary'] = 'Приказ %1$d-%2$d од %3$d пронађена кориÑника. Укупно има %4$d кориÑника.';
+$lang['nonefound'] = 'Ðије пронађен кориÑник. Укупно има %d кориÑника.';
+$lang['delete_ok'] = '%d кориÑника је обриÑано';
+$lang['delete_fail'] = '%d бриÑања није уÑпело.';
+$lang['update_ok'] = 'КориÑнички налог је ажуриран';
+$lang['update_fail'] = 'КориÑнички налог није ажуриран';
+$lang['update_exists'] = 'Измена кориÑничког имена није уÑпела, наведени кориÑник (%s) већ поÑтоји (оÑтале измене ће бити примењене).';
+$lang['start'] = 'почетак';
+$lang['prev'] = 'претходна';
+$lang['next'] = 'Ñледећа';
+$lang['last'] = 'крај';
+$lang['edit_usermissing'] = 'Одабрани кориÑник не поÑтоји, наведено кориÑничко име је можда обриÑано или је измењено негде другде.';
+$lang['user_notify'] = 'ОбавеÑти кориÑника';
+$lang['note_notify'] = 'Потврдна порука ће бити поÑлата једино ако је кориÑнику додељена нова лозинка.';
+$lang['note_group'] = 'Ðови кориÑници ће бити додељени подразумеваној групи (%s) ако није другачије назначено.';
+$lang['note_pass'] = 'Ðко Ñте оÑтавили поље празно и укључили обавештавање кориÑника лозинка ће бити аутоматÑки генериÑана.';
+$lang['add_ok'] = 'КориÑник је уÑпешно додат';
+$lang['add_fail'] = 'Додавање кориÑника није уÑпело';
+$lang['notify_ok'] = 'Порука Ñа обавештењен је поÑлата';
+$lang['notify_fail'] = 'Порука Ñа обавештењен није поÑлата';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt
new file mode 100644
index 000000000..948444245
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt
@@ -0,0 +1 @@
+===== СпиÑак кориÑника ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt
new file mode 100644
index 000000000..2ff1ee640
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt
@@ -0,0 +1 @@
+===== Lägg till användare =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt
new file mode 100644
index 000000000..5664a5906
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt
@@ -0,0 +1 @@
+===== Radera användare =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt
new file mode 100644
index 000000000..f1a7f4a22
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt
@@ -0,0 +1 @@
+===== Redigera användare =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt
new file mode 100644
index 000000000..bd13b8157
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt
@@ -0,0 +1 @@
+====== Hantera användare ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php
new file mode 100644
index 000000000..cedd30d1f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Swedish language file
+ *
+ * @author Per Foreby <per@foreby.se>
+ * @author Nicklas Henriksson <nicklas[at]nihe.se>
+ * @author HÃ¥kan Sandell <hakan.sandell[at]mydata.se>
+ * @author Dennis Karlsson
+ * @author Tormod Otter Johansson <tormod@latast.se>
+ * @author emil@sys.nu
+ * @author Pontus Bergendahl <pontus.bergendahl@gmail.com>
+ * @author Tormod Johansson tormod.otter.johansson@gmail.com
+ * @author Emil Lind <emil@sys.nu>
+ * @author Bogge Bogge <bogge@bogge.com>
+ * @author Peter Åström <eaustreum@gmail.com>
+ * @author HÃ¥kan Sandell <hakan.sandell@home.se>
+ */
+$lang['menu'] = 'Hantera användare';
+$lang['noauth'] = '(användarautentisering ej tillgänlig)';
+$lang['nosupport'] = '(användarhantering stödjs ej)';
+$lang['badauth'] = 'ogiltig autentiseringsmekanism';
+$lang['user_id'] = 'Användare';
+$lang['user_pass'] = 'Lösenord';
+$lang['user_name'] = 'Namn';
+$lang['user_mail'] = 'E-post';
+$lang['user_groups'] = 'Grupper';
+$lang['field'] = 'Fält';
+$lang['value'] = 'Värde';
+$lang['add'] = 'Lägg till';
+$lang['delete'] = 'Radera';
+$lang['delete_selected'] = 'Radera markerade';
+$lang['edit'] = 'Redigera';
+$lang['edit_prompt'] = 'Redigera användaren';
+$lang['modify'] = 'Spara ändringar';
+$lang['search'] = 'Sök';
+$lang['search_prompt'] = 'Utför sökning';
+$lang['clear'] = 'Återställ sökfilter';
+$lang['filter'] = 'Filter';
+$lang['summary'] = 'Visar användare %1$d-%2$d av %3$d funna. %4$d användare totalt.';
+$lang['nonefound'] = 'Inga användare hittades. %d användare totalt.';
+$lang['delete_ok'] = '%d användare raderade';
+$lang['delete_fail'] = '%d kunde inte raderas.';
+$lang['update_ok'] = 'Användaren uppdaterad';
+$lang['update_fail'] = 'Användaruppdatering misslyckades';
+$lang['update_exists'] = 'Kunde inte ändra användarnamn,, det angivna användarnamnet (%s) finns redan (andra ändringar kommer att utföras).';
+$lang['start'] = 'start';
+$lang['prev'] = 'föregående';
+$lang['next'] = 'nästa';
+$lang['last'] = 'sista';
+$lang['edit_usermissing'] = 'Vald användare hittades inte. Den angivna användaren kan ha blivit raderad, eller ändrats någon annanstans.';
+$lang['user_notify'] = 'Meddela användaren';
+$lang['note_notify'] = 'E-postmeddelanden skickas bara om användaren har fått ett nytt lösenord.';
+$lang['note_group'] = 'Nya användare läggs till i standardgruppen (%s) om inga grupper anges.';
+$lang['note_pass'] = 'Lösenordet kommer att autogenereras om fältet är tomt och e-postmeddelanden till användaren är påslaget.';
+$lang['add_ok'] = 'Användaren tillagd';
+$lang['add_fail'] = 'Användare kunde inte läggas till';
+$lang['notify_ok'] = 'E-postmeddelande skickat';
+$lang['notify_fail'] = 'E-postmeddelande kunde inte skickas';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt
new file mode 100644
index 000000000..e07c45277
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt
@@ -0,0 +1 @@
+===== Användarlista =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt
new file mode 100644
index 000000000..6a5f09855
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt
@@ -0,0 +1 @@
+====== เพิ่มผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt
new file mode 100644
index 000000000..4dbc82bf9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt
@@ -0,0 +1 @@
+====== ลบผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt
new file mode 100644
index 000000000..c36e8ddf8
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt
@@ -0,0 +1 @@
+====== à¹à¸à¹‰à¹„ขผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt
new file mode 100644
index 000000000..0f6a0c3b6
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt
@@ -0,0 +1 @@
+====== ตัวจัดà¸à¸²à¸£à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php
new file mode 100644
index 000000000..eb88d7b91
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Thai language file
+ *
+ * @author Komgrit Niyomrath <n.komgrit@gmail.com>
+ * @author Kittithat Arnontavilas mrtomyum@gmail.com
+ * @author Kittithat Arnontavilas <mrtomyum@gmail.com>
+ * @author Thanasak Sompaisansin <jombthep@gmail.com>
+ */
+$lang['menu'] = 'ตัวจัดà¸à¸²à¸£à¸šà¸±à¸à¸Šà¸µà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰';
+$lang['user_id'] = 'ผู้ใช้';
+$lang['user_pass'] = 'รหัสผ่าน';
+$lang['user_name'] = 'ชื่อจริง';
+$lang['user_mail'] = 'อีเมล';
+$lang['user_groups'] = 'à¸à¸¥à¸¸à¹ˆà¸¡';
+$lang['field'] = 'ฟิลด์';
+$lang['value'] = 'ค่า';
+$lang['add'] = 'เพิ่ม';
+$lang['delete'] = 'ลบ';
+$lang['delete_selected'] = 'ลบที่เลือà¸';
+$lang['edit'] = 'à¹à¸à¹‰à¹„ข';
+$lang['edit_prompt'] = 'à¹à¸à¹‰à¹„ขผู้ใช้คนนี้';
+$lang['modify'] = 'บันทึà¸à¸à¸²à¸£à¹à¸à¹‰à¹„ข';
+$lang['search'] = 'สืบค้น';
+$lang['search_prompt'] = 'ทำà¸à¸²à¸£à¸ªà¸·à¸šà¸„้น';
+$lang['clear'] = 'รีเซ็ทตัวà¸à¸£à¸­à¸‡à¸„ำค้น';
+$lang['filter'] = 'ตัวà¸à¸£à¸­à¸‡';
+$lang['summary'] = 'à¹à¸ªà¸”งผู้ใช้ %1$d-%2$d จาà¸à¸—ี่พบ %3$d คน, จาà¸à¸—ั้งหมด %4$d คน';
+$lang['nonefound'] = 'ไม่พบผู้ใช้ จาà¸à¸—ั้งหมด %d คน';
+$lang['delete_ok'] = 'ลบชื่อผู้ใช้ %d คน';
+$lang['delete_fail'] = 'ไม่สามารถลบได้ %d คน';
+$lang['update_ok'] = 'ปรับปรุงข้อมูลผู้ใช้ สำเร็จ';
+$lang['update_fail'] = 'ปรับปรุงข้อมูลผู้ใช้ **ไม่สำเร็จ**';
+$lang['update_exists'] = 'ไม่สามารถเปลี่นชื่อผู้ใช้ได้ ชื่อผู้ใช้ที่ระบุ (%s) มีอยู่à¹à¸¥à¹‰à¸§ (à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸™à¸™à¹à¸›à¸¥à¸‡à¸­à¸·à¹ˆà¸™à¹† ยังคงทำได้)';
+$lang['start'] = 'เริ่ม';
+$lang['prev'] = 'à¸à¹ˆà¸­à¸™à¸«à¸™à¹‰à¸²';
+$lang['next'] = 'ถัดไป';
+$lang['last'] = 'สุดท้าย';
+$lang['edit_usermissing'] = 'หาผู้ใช้ที่เลือà¸à¹„ม่พบ, ชื่อผุ้ใช้ที่ระบุอาจจะถูà¸à¸¥à¸š หรือเปลี่ยนเป็นอย่างอื่น';
+$lang['user_notify'] = 'à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰';
+$lang['note_notify'] = 'จดหมายà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸–ูà¸à¸ªà¹ˆà¸‡à¸à¹‡à¸•à¹ˆà¸­à¹€à¸¡à¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹„ด้รับมอบรหัสผ่านใหม่';
+$lang['note_group'] = 'ผู้ใช้ใหม่จะถูà¸à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸‚้าไปยังà¸à¸¥à¸¸à¹ˆà¸¡à¸›à¸£à¸´à¸¢à¸²à¸¢ (%s) หาà¸à¸¡à¸´à¹„ด้ระบุà¸à¸¥à¸¸à¹ˆà¸¡à¹€à¸­à¸²à¹„ว้';
+$lang['note_pass'] = 'รหัสผ่านจะถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¹‚ดยอัตโนมัติ ถ้าเว้นว่างช่องà¸à¸£à¸­à¸ à¹à¸¥à¸°à¹€à¸›à¸´à¸”à¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹€à¸­à¸²à¹„ว้';
+$lang['add_ok'] = 'à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸ªà¸³à¹€à¸£à¹‡à¸ˆ';
+$lang['add_fail'] = 'à¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸¥à¹‰à¸¡à¹€à¸«à¸¥à¸§';
+$lang['notify_ok'] = 'ส่งจดหมายà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¹„ปà¹à¸¥à¹‰à¸§';
+$lang['notify_fail'] = 'ไม่สามารถส่งจดหมายà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt
new file mode 100644
index 000000000..fdf65b555
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt
@@ -0,0 +1 @@
+====== รายชื่อผู้ใช้ ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt
new file mode 100644
index 000000000..beedc0be0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt
@@ -0,0 +1 @@
+===== Kullanıcı ekleme ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt
new file mode 100644
index 000000000..adb8e91e4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt
@@ -0,0 +1 @@
+===== Kullanıcı silme ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt
new file mode 100644
index 000000000..d9f3b7125
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt
@@ -0,0 +1 @@
+===== Kullanıcı Düzenleme ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt
new file mode 100644
index 000000000..1edcb2ce0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt
@@ -0,0 +1 @@
+====== Kullanıcı Yöneticisi ====== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php
new file mode 100644
index 000000000..28127d9d0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Turkish language file
+ *
+ * @author Aydın Coşkuner aydinweb@gmail.com
+ * @author Aydın Coşkuner <aydinweb@gmail.com>
+ * @author yavuzselim@gmail.com
+ * @author Cihan Kahveci kahvecicihan@gmail.com
+ * @author Yavuz Selim <yavuzselim@gmail.com>
+ */
+$lang['menu'] = 'Kullanıcı Yönetimi';
+$lang['noauth'] = '(kullanıcı onaylaması yoktur)';
+$lang['nosupport'] = '(kullanıcı yönetimi desteklenmemektedir)';
+$lang['badauth'] = 'yanlış onaylama metodu';
+$lang['user_id'] = 'Kullanıcı';
+$lang['user_pass'] = 'Åžifre';
+$lang['user_name'] = 'Gerçek İsim';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = 'Gruplar';
+$lang['field'] = 'Alan';
+$lang['value'] = 'DeÄŸer';
+$lang['add'] = 'Ekle';
+$lang['delete'] = 'Sil';
+$lang['delete_selected'] = 'Seçilenleri Sil';
+$lang['edit'] = 'Düzenle';
+$lang['edit_prompt'] = 'Bu kullanıcıyı düzenle';
+$lang['modify'] = 'DeÄŸiÅŸiklikleri kaydet';
+$lang['search'] = 'Arama';
+$lang['search_prompt'] = 'Aramayı Gerçekleştir';
+$lang['clear'] = 'Arama ayarlarını sıfırla';
+$lang['filter'] = 'Filtre';
+$lang['summary'] = 'Bulunan %3$d kullanıcının %1$d-%2$d gösterilmektedir. Toplam %4$d kullanıcı bulunmaktadır.';
+$lang['nonefound'] = 'Hiç kullanıcı bulunamadı. Toplam %d kullanıcı bulunmaktadır.';
+$lang['delete_ok'] = '%d kullanıcılar silindi';
+$lang['delete_fail'] = '%d silinemedi.';
+$lang['update_ok'] = 'Kullanıcı başarı ile güncelleştirildi';
+$lang['update_fail'] = 'Kullanıcı güncelleştirilemedi';
+$lang['update_exists'] = 'Kullanıcı adı değiştirilemedi. Belirtilen kullanıcı adı (%s) zaten bulunmaktadır (yapılan diğer değişiklikler uygulanacaktır).';
+$lang['start'] = 'baÅŸla';
+$lang['prev'] = 'önceki';
+$lang['next'] = 'sonraki';
+$lang['last'] = 'sonuncu';
+$lang['edit_usermissing'] = 'Seçili kullanıcılar bulunamadı, belirtilen kullanıcı silinmiş ya da değiştirilmiş olabilir.';
+$lang['user_notify'] = 'Kullanıcıyı bilgilendir';
+$lang['note_notify'] = 'Bilgilendirme e-postaları sadece kullanıcıya yeni bir parola verildiğinde gönderilmektedir.';
+$lang['note_group'] = 'Yeni kullanıcılar bir grup belirtilmezse varsayılan (%s) gruba eklenecektir.';
+$lang['note_pass'] = 'Eğer alan boş bırakılırsa parola otomatik oluşturulacaktır ve kullanıcı bilgilendirme etkinleştirilecektir. ';
+$lang['add_ok'] = 'Kullanıcı başarı ile eklendi';
+$lang['add_fail'] = 'Kullanıcı ekleme başarısız';
+$lang['notify_ok'] = 'Bildirim emaili gönderildi';
+$lang['notify_fail'] = 'Bildirim emaili gönderilemedi';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt
new file mode 100644
index 000000000..2314eb22f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt
@@ -0,0 +1 @@
+===== Kullanıcı Listesi ===== \ No newline at end of file
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt
new file mode 100644
index 000000000..bc3469714
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt
@@ -0,0 +1 @@
+===== Додати кориÑтувача =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt
new file mode 100644
index 000000000..739340b19
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt
@@ -0,0 +1 @@
+===== Ð’Ð¸Ð´Ð°Ð»ÐµÐ½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувача =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt
new file mode 100644
index 000000000..e359f748c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt
@@ -0,0 +1 @@
+===== Змінити кориÑтувача =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt
new file mode 100644
index 000000000..b658affe5
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt
@@ -0,0 +1 @@
+====== ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php
new file mode 100644
index 000000000..7e9f9167e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * ukrainian language file
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Oleksiy Voronin <ovoronin@gmail.com>
+ * @author serg_stetsuk@ukr.net
+ * @author okunia@gmail.com
+ * @author Oleksandr Kunytsia <okunia@gmail.com>
+ * @author Uko uko@uar.net
+ */
+$lang['menu'] = 'ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами';
+$lang['noauth'] = '(Ð°Ð²Ñ‚ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів не доÑтупна)';
+$lang['nosupport'] = '(ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами не підтримуєтьÑÑ)';
+$lang['badauth'] = 'невірний механізм автентифікації';
+$lang['user_id'] = 'Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача';
+$lang['user_pass'] = 'Пароль';
+$lang['user_name'] = 'Повне ім’Ñ';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = 'Групи';
+$lang['field'] = 'Поле';
+$lang['value'] = 'ЗначеннÑ';
+$lang['add'] = 'Додати';
+$lang['delete'] = 'Видалити';
+$lang['delete_selected'] = 'Видалити вибраних';
+$lang['edit'] = 'Змінити';
+$lang['edit_prompt'] = 'Змінити цього кориÑтувача';
+$lang['modify'] = 'Зберегти зміни';
+$lang['search'] = 'Пошук';
+$lang['search_prompt'] = 'Шукати';
+$lang['clear'] = 'ОчиÑтити фільтр пошуку';
+$lang['filter'] = 'Фільтр';
+$lang['summary'] = 'Показано кориÑтувачі %1$d-%2$d з %3$d знайдених. Ð’Ñього кориÑтувачів: %4$d.';
+$lang['nonefound'] = 'Ðе знайдено жодного кориÑтувача. Ð’Ñього кориÑтувачів: %d.';
+$lang['delete_ok'] = 'Видалено кориÑтувачів: %d';
+$lang['delete_fail'] = 'Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ %d.';
+$lang['update_ok'] = 'Дані кориÑтувача оновлено';
+$lang['update_fail'] = 'Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ дані кориÑтувача';
+$lang['update_exists'] = 'Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, такий кориÑтувач (%s) вже Ñ–Ñнує (вÑÑ– інші зміни будуть заÑтоÑовані).';
+$lang['start'] = 'на початок';
+$lang['prev'] = 'назад';
+$lang['next'] = 'вперед';
+$lang['last'] = 'в кінець';
+$lang['edit_usermissing'] = 'Обраного кориÑтувача не знайдено, можливо його було вилучено або змінено ще деÑÑŒ.';
+$lang['user_notify'] = 'Повідомити кориÑтувача';
+$lang['note_notify'] = 'ЛиÑти з повідомленнÑми відÑилаютьÑÑ Ð»Ð¸ÑˆÐµ у випадку видачі нового Ð¿Ð°Ñ€Ð¾Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувачу.';
+$lang['note_group'] = 'Якщо не визначено групи, то нові кориÑтувачі будуть автоматично додані до групи за замовчуваннÑм (%s).';
+$lang['note_pass'] = 'Пароль буде згенеровано автоматично, Ñкщо поле Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ заповнено Ñ– увімкнено прапорець "повідомити кориÑтувача".';
+$lang['add_ok'] = 'КориÑтувача додано';
+$lang['add_fail'] = 'Ðеможливо додати кориÑтувача';
+$lang['notify_ok'] = 'ЛиÑта з повідомленнÑм надіÑлано';
+$lang['notify_fail'] = 'Ðеможливо виÑлати лиÑта з повідомленнÑм';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt
new file mode 100644
index 000000000..76013a9b7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt
@@ -0,0 +1 @@
+===== СпиÑок кориÑтувачів =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt
new file mode 100644
index 000000000..6e25f1719
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt
@@ -0,0 +1 @@
+===== 增加帳號 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt
new file mode 100644
index 000000000..1a29ba349
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt
@@ -0,0 +1 @@
+===== 刪除帳號 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt
new file mode 100644
index 000000000..ec1c5d5ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt
@@ -0,0 +1 @@
+===== 修改帳號 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt
new file mode 100644
index 000000000..9c499d862
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt
@@ -0,0 +1 @@
+====== 帳號管ç†å“¡(User Manager) ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php
new file mode 100644
index 000000000..26c87205d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * English language file
+ *
+ * @author chinsan <chinsan.tw@gmail.com>
+ * @author Li-Jiun Huang <ljhuang.tw@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-simptrad.html
+ * @author Wayne San <waynesan@zerozone.tw>
+ * @author Li-Jiun Huang <ljhuang.tw@gmai.com>
+ * @author Cheng-Wei Chien <e.cwchien@gmail.com>
+ */
+$lang['menu'] = '帳號管ç†å“¡(User Manager)';
+$lang['noauth'] = '(帳號èªè­‰å°šæœªé–‹æ”¾)';
+$lang['nosupport'] = '(å°šä¸æ”¯æ´å¸³è™Ÿç®¡ç†)';
+$lang['badauth'] = '錯誤的èªè­‰æ©Ÿåˆ¶';
+$lang['user_id'] = '帳號';
+$lang['user_pass'] = '密碼';
+$lang['user_name'] = '真實姓å';
+$lang['user_mail'] = 'E-mail';
+$lang['user_groups'] = '群組';
+$lang['field'] = '欄ä½';
+$lang['value'] = '設定值';
+$lang['add'] = '增加';
+$lang['delete'] = '刪除';
+$lang['delete_selected'] = '刪除所é¸çš„';
+$lang['edit'] = '修改';
+$lang['edit_prompt'] = '修改該帳號';
+$lang['modify'] = '儲存變更';
+$lang['search'] = 'æœå°‹';
+$lang['search_prompt'] = '開始æœå°‹';
+$lang['clear'] = 'é‡æ–°è¨­å®šæœå°‹çš„æ¢ä»¶';
+$lang['filter'] = '篩é¸æ¢ä»¶(Filter)';
+$lang['summary'] = '顯示帳號 %1$d 至 %2$d å…± %3$d 筆符åˆ. 總共有 %4$d 個帳號';
+$lang['nonefound'] = '找ä¸åˆ°è©²ç”¨æˆ¶(å…± %d 帳號)。';
+$lang['delete_ok'] = '已刪除 %d 個帳號';
+$lang['delete_fail'] = '%d 個帳號刪除失敗';
+$lang['update_ok'] = 'æˆåŠŸæ›´æ–°è©²å¸³è™Ÿ';
+$lang['update_fail'] = '更新該帳號時失敗';
+$lang['update_exists'] = '變更帳號å稱 (%s) 時失敗,應該是已有åŒå的帳號,ä¸éŽé™¤äº†å¸³è™Ÿå稱之外的其他修改ä»æœƒå„²å­˜ã€‚';
+$lang['start'] = '開始';
+$lang['prev'] = '上一步';
+$lang['next'] = '下一步';
+$lang['last'] = '最後步驟';
+$lang['edit_usermissing'] = '找ä¸åˆ°æ‰€é¸çš„帳號,該帳號å¯èƒ½å·²ç¶“被刪除或是改為其他å稱喔。';
+$lang['user_notify'] = '通知使用者';
+$lang['note_notify'] = '通知信åªæœ‰åœ¨çµ¦äºˆä½¿ç”¨è€…新密碼時寄é€ã€‚';
+$lang['note_group'] = '如果沒有指定群組,新使用者將會被加入到é è¨­ç¾¤çµ„(%s)當中。';
+$lang['note_pass'] = '如果沒有輸入這個欄ä½è€Œä¸”有勾é¸é€šçŸ¥ä½¿ç”¨è€…,則會自動產生一組密碼。';
+$lang['add_ok'] = '新增使用者æˆåŠŸ';
+$lang['add_fail'] = '新增使用者失敗';
+$lang['notify_ok'] = '通知信已寄出';
+$lang['notify_fail'] = '通知信無法被寄出';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt
new file mode 100644
index 000000000..1e539bd41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt
@@ -0,0 +1 @@
+===== 帳號清單 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt
new file mode 100644
index 000000000..fd3b1e581
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt
@@ -0,0 +1 @@
+===== 添加用户 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt
new file mode 100644
index 000000000..dc6b7fcc7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt
@@ -0,0 +1 @@
+===== 删除用户 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt
new file mode 100644
index 000000000..83b72dff7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt
@@ -0,0 +1 @@
+===== 编辑用户 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt
new file mode 100644
index 000000000..5f254be72
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt
@@ -0,0 +1 @@
+====== 用户管ç†å™¨ ======
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php
new file mode 100644
index 000000000..55044ce65
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * English language file
+ *
+ * @author ZDYX <zhangduyixiong@gmail.com>
+ * @author http://www.chinese-tools.com/tools/converter-tradsimp.html
+ * @author George Sheraton guxd@163.com
+ * @author Simon zhan <simonzhan@21cn.com>
+ * @author mr.jinyi@gmail.com
+ */
+$lang['menu'] = '用户管ç†å™¨';
+$lang['noauth'] = '(用户认è¯ä¸å¯ç”¨ï¼‰';
+$lang['nosupport'] = '(用户管ç†ä¸æ”¯æŒï¼‰';
+$lang['badauth'] = 'éžæ³•çš„认è¯ç»“æž„';
+$lang['user_id'] = '用户å';
+$lang['user_pass'] = '密ç ';
+$lang['user_name'] = '真实姓å';
+$lang['user_mail'] = 'Email';
+$lang['user_groups'] = '组 *';
+$lang['field'] = 'æ ç›®';
+$lang['value'] = '值';
+$lang['add'] = '添加';
+$lang['delete'] = '删除';
+$lang['delete_selected'] = '删除选中的';
+$lang['edit'] = '编辑';
+$lang['edit_prompt'] = '编辑该用户';
+$lang['modify'] = 'ä¿å­˜æ›´æ”¹';
+$lang['search'] = 'æœç´¢';
+$lang['search_prompt'] = '进行æœç´¢';
+$lang['clear'] = 'é‡ç½®æœç´¢è¿‡æ»¤å™¨';
+$lang['filter'] = '过滤器';
+$lang['summary'] = '找到 %3$d å用户,显示其中第 %1$d 至 %2$d ä½ç”¨æˆ·ã€‚æ•°æ®åº“中共有 %4$d å用户。';
+$lang['nonefound'] = '没有找到用户。数æ®åº“中共有 %d å用户。';
+$lang['delete_ok'] = '用户 %d 已删除';
+$lang['delete_fail'] = '用户 %d 删除失败。';
+$lang['update_ok'] = '用户更新æˆåŠŸ';
+$lang['update_fail'] = '用户更新失败';
+$lang['update_exists'] = '用户å更改失败,您指定的用户å(%s)已存在(其他更改将立å³ç”Ÿæ•ˆï¼‰ã€‚';
+$lang['start'] = '第一页';
+$lang['prev'] = 'å‰ä¸€é¡µ';
+$lang['next'] = 'åŽä¸€é¡µ';
+$lang['last'] = '最åŽä¸€é¡µ';
+$lang['edit_usermissing'] = '您指定的用户没有找到,å¯èƒ½ç”¨æˆ·å·²è¢«åˆ é™¤æˆ–用户å已更改。';
+$lang['user_notify'] = '通知用户';
+$lang['note_notify'] = '通知邮件åªæœ‰åœ¨ç”¨æˆ·èŽ·å¾—新密ç æ—¶æ‰ä¼šå‘é€ã€‚';
+$lang['note_group'] = '* 如果没有指定组,新用户将被添加到默认的组(%s)中。';
+$lang['note_pass'] = '如果输入框留空则自动生æˆå£ä»¤ï¼Œå¹¶ä¼šé€šçŸ¥ç”¨æˆ·ã€‚';
+$lang['add_ok'] = '用户添加æˆåŠŸ';
+$lang['add_fail'] = '用户添加失败';
+$lang['notify_ok'] = '通知邮件已å‘é€';
+$lang['notify_fail'] = '通知邮件无法å‘é€';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt
new file mode 100644
index 000000000..e62a85bd0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt
@@ -0,0 +1 @@
+===== 用户列表 =====
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js
new file mode 100644
index 000000000..875e4297b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js
@@ -0,0 +1,9 @@
+/**
+ * Add JavaScript confirmation to the User Delete button
+ */
+function usrmgr_delconfirm(){
+ if(DOKUid('usrmgr__del')){
+ addEvent( DOKUid('usrmgr__del'),'click',function(){ return confirm(reallyDel); } );
+ }
+};
+addInitEvent(usrmgr_delconfirm);
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css
new file mode 100644
index 000000000..ff8e5d9d1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css
@@ -0,0 +1,20 @@
+/* User Manager specific styles */
+#user__manager tr.disabled {
+ color: #6f6f6f;
+ background: #e4e4e4;
+}
+#user__manager tr.user_info {
+ vertical-align: top;
+}
+#user__manager div.edit_user {
+ width: 46%;
+ float: left;
+}
+#user__manager table {
+ margin-bottom: 1em;
+}
+#user__manager input.button[disabled] {
+ color: #ccc!important;
+ border-color: #ccc!important;
+}
+/* IE won't understand but doesn't require it */
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js
new file mode 100644
index 000000000..a2a48a996
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js
@@ -0,0 +1,68 @@
+/**
+ * AJAX functions for the pagename quicksearch
+ *
+ * We're using a global object with self referencing methods
+ * here to make callbacks work
+ *
+ * @license GPL2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+//prepare class
+function ajax_qsearch_class(){
+ this.sack = null;
+ this.inObj = null;
+ this.outObj = null;
+ this.timer = null;
+}
+
+//create global object and add functions
+var ajax_qsearch = new ajax_qsearch_class();
+ajax_qsearch.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ajax_qsearch.sack.AjaxFailedAlert = '';
+ajax_qsearch.sack.encodeURIString = false;
+
+ajax_qsearch.init = function(inID,outID){
+ ajax_qsearch.inObj = document.getElementById(inID);
+ ajax_qsearch.outObj = document.getElementById(outID);
+
+ // objects found?
+ if(ajax_qsearch.inObj === null){ return; }
+ if(ajax_qsearch.outObj === null){ return; }
+
+ // attach eventhandler to search field
+ addEvent(ajax_qsearch.inObj,'keyup',ajax_qsearch.call);
+
+ // attach eventhandler to output field
+ addEvent(ajax_qsearch.outObj,'click',function(){ ajax_qsearch.outObj.style.display='none'; });
+};
+
+ajax_qsearch.clear = function(){
+ ajax_qsearch.outObj.style.display = 'none';
+ ajax_qsearch.outObj.innerHTML = '';
+ if(ajax_qsearch.timer !== null){
+ window.clearTimeout(ajax_qsearch.timer);
+ ajax_qsearch.timer = null;
+ }
+};
+
+ajax_qsearch.exec = function(){
+ ajax_qsearch.clear();
+ var value = ajax_qsearch.inObj.value;
+ if(value === ''){ return; }
+ ajax_qsearch.sack.runAJAX('call=qsearch&q='+encodeURI(value));
+};
+
+ajax_qsearch.sack.onCompletion = function(){
+ var data = ajax_qsearch.sack.response;
+ if(data === ''){ return; }
+
+ ajax_qsearch.outObj.innerHTML = data;
+ ajax_qsearch.outObj.style.display = 'block';
+};
+
+ajax_qsearch.call = function(){
+ ajax_qsearch.clear();
+ ajax_qsearch.timer = window.setTimeout("ajax_qsearch.exec()",500);
+};
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js
new file mode 100644
index 000000000..d7e6b3550
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js
@@ -0,0 +1,112 @@
+/**
+ * Handles the cookie used by several JavaScript functions
+ *
+ * Only a single cookie is written and read. You may only save
+ * sime name-value pairs - no complex types!
+ *
+ * You should only use the getValue and setValue methods
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+DokuCookie = {
+ data: Array(),
+ name: 'DOKU_PREFS',
+
+ /**
+ * Save a value to the cookie
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ setValue: function(key,val){
+ DokuCookie.init();
+ DokuCookie.data[key] = val;
+
+ // prepare expire date
+ var now = new Date();
+ DokuCookie.fixDate(now);
+ now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000); //expire in a year
+
+ //save the whole data array
+ var text = '';
+ for(var key in DokuCookie.data){
+ if (!DokuCookie.data.hasOwnProperty(key)) continue;
+ text += '#'+escape(key)+'#'+DokuCookie.data[key];
+ }
+ DokuCookie.setCookie(DokuCookie.name,text.substr(1),now,DOKU_BASE);
+ },
+
+ /**
+ * Get a Value from the Cookie
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ getValue: function(key){
+ DokuCookie.init();
+ return DokuCookie.data[key];
+ },
+
+ /**
+ * Loads the current set cookie
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ init: function(){
+ if(DokuCookie.data.length) return;
+ var text = DokuCookie.getCookie(DokuCookie.name);
+ if(text){
+ var parts = text.split('#');
+ for(var i=0; i<parts.length; i+=2){
+ DokuCookie.data[unescape(parts[i])] = unescape(parts[i+1]);
+ }
+ }
+ },
+
+ /**
+ * This sets a cookie by JavaScript
+ *
+ * @link http://www.webreference.com/js/column8/functions.html
+ */
+ setCookie: function(name, value, expires, path, domain, secure) {
+ var curCookie = name + "=" + escape(value) +
+ ((expires) ? "; expires=" + expires.toGMTString() : "") +
+ ((path) ? "; path=" + path : "") +
+ ((domain) ? "; domain=" + domain : "") +
+ ((secure) ? "; secure" : "");
+ document.cookie = curCookie;
+ },
+
+ /**
+ * This reads a cookie by JavaScript
+ *
+ * @link http://www.webreference.com/js/column8/functions.html
+ */
+ getCookie: function(name) {
+ var dc = document.cookie;
+ var prefix = name + "=";
+ var begin = dc.indexOf("; " + prefix);
+ if (begin == -1) {
+ begin = dc.indexOf(prefix);
+ if (begin !== 0){ return null; }
+ } else {
+ begin += 2;
+ }
+ var end = document.cookie.indexOf(";", begin);
+ if (end == -1){
+ end = dc.length;
+ }
+ return unescape(dc.substring(begin + prefix.length, end));
+ },
+
+ /**
+ * This is needed for the cookie functions
+ *
+ * @link http://www.webreference.com/js/column8/functions.html
+ */
+ fixDate: function(date) {
+ var base = new Date(0);
+ var skew = base.getTime();
+ if (skew > 0){
+ date.setTime(date.getTime() - skew);
+ }
+ }
+};
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js
new file mode 100644
index 000000000..908ab670c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js
@@ -0,0 +1,99 @@
+/**
+ * Makes a DOM object draggable
+ *
+ * This is currently for movable DOM dialogs only. If needed it could be
+ * extended to execute callbacks on special events...
+ *
+ * @link http://nofunc.org/Drag_Drop/
+ */
+var drag = {
+ obj: null,
+ handle: null,
+ oX: 0, // object X position
+ oY: 0, // object Y position
+ eX: 0, // event X delta
+ eY: 0, // event Y delta
+
+ /**
+ * Attaches the needed handlers to the given object
+ *
+ * This can be called for multiple objects, the right one is later
+ * determined from the event itself. The handle is optional
+ *
+ * @param DOMObject obj The object that should be draggable
+ * @param DOMObject handle A handle on which the obj can be dragged
+ */
+ attach: function (obj,handle) {
+ if(handle){
+ handle.dragobject = obj;
+ addEvent(DOKUid(handle),'mousedown',drag.start);
+ }else{
+ addEvent(DOKUid(obj),'mousedown',drag.start);
+ }
+ },
+
+ /**
+ * Starts the dragging operation
+ */
+ start: function (e){
+ drag.handle = e.target;
+ if(drag.handle.dragobject){
+ drag.obj = drag.handle.dragobject;
+ }else{
+ drag.obj = drag.handle;
+ }
+
+ drag.handle.className += ' ondrag';
+ drag.obj.className += ' ondrag';
+
+ drag.oX = parseInt(drag.obj.style.left);
+ drag.oY = parseInt(drag.obj.style.top);
+ drag.eX = drag.evX(e);
+ drag.eY = drag.evY(e);
+
+ addEvent(document,'mousemove',drag.drag);
+ addEvent(document,'mouseup',drag.stop);
+
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ },
+
+ /**
+ * Ends the dragging operation
+ */
+ stop: function(){
+ drag.handle.className = drag.handle.className.replace(/ ?ondrag/,'');
+ drag.obj.className = drag.obj.className.replace(/ ?ondrag/,'');
+ removeEvent(document,'mousemove',drag.drag);
+ removeEvent(document,'mouseup',drag.stop);
+ drag.obj = null;
+ drag.handle = null;
+ },
+
+ /**
+ * Moves the object during the dragging operation
+ */
+ drag: function(e) {
+ if(drag.obj) {
+ drag.obj.style.top = (drag.evY(e)+drag.oY-drag.eY+'px');
+ drag.obj.style.left = (drag.evX(e)+drag.oX-drag.eX+'px');
+ }
+ },
+
+ /**
+ * Returns the X position of the given event.
+ */
+ evX: function(e){
+ return (e.pageX) ? e.pageX : e.clientX + document.body.scrollTop; //fixme shouldn't this be scrollLeft?
+ },
+
+ /**
+ * Returns the Y position of the given event.
+ */
+ evY: function(e){
+ return (e.pageY) ? e.pageY : e.clientY + document.body.scrollTop;
+ }
+
+};
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js
new file mode 100644
index 000000000..6494a925f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js
@@ -0,0 +1,442 @@
+/**
+ * Functions for text editing (toolbar stuff)
+ *
+ * @todo most of the stuff in here should be revamped and then moved to toolbar.js
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+/**
+ * Creates a toolbar button through the DOM
+ *
+ * Style the buttons through the toolbutton class
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function createToolButton(icon,label,key,id){
+ var btn = document.createElement('button');
+ var ico = document.createElement('img');
+
+ // preapare the basic button stuff
+ btn.className = 'toolbutton';
+ btn.title = label;
+ if(key){
+ btn.title += ' ['+key.toUpperCase()+']';
+ btn.accessKey = key;
+ }
+
+ // set IDs if given
+ if(id){
+ btn.id = id;
+ ico.id = id+'_ico';
+ }
+
+ // create the icon and add it to the button
+ if(icon.substr(0,1) == '/'){
+ ico.src = icon;
+ }else{
+ ico.src = DOKU_MEDIA+'lib/images/toolbar/'+icon;
+ }
+ btn.appendChild(ico);
+
+ return btn;
+}
+
+/**
+ * Creates a picker window for inserting text
+ *
+ * The given list can be an associative array with text,icon pairs
+ * or a simple list of text. Style the picker window through the picker
+ * class or the picker buttons with the pickerbutton class. Picker
+ * windows are appended to the body and created invisible.
+ *
+ * @param string id the ID to assign to the picker
+ * @param array props the properties for the picker
+ * @param string edid the ID of the textarea
+ * @rteurn DOMobject the created picker
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function createPicker(id,props,edid){
+ var icobase = props['icobase'];
+ var list = props['list'];
+
+ // create the wrapping div
+ var picker = document.createElement('div');
+ picker.className = 'picker';
+ if(props['class']){
+ picker.className += ' '+props['class'];
+ }
+ picker.id = id;
+ picker.style.position = 'absolute';
+ picker.style.marginLeft = '-10000px'; // no display:none, to keep access keys working
+
+ for(var key in list){
+ if (!list.hasOwnProperty(key)) continue;
+
+ if(isNaN(key)){
+ // associative array -> treat as image/value pairs
+ var btn = document.createElement('button');
+ btn.className = 'pickerbutton';
+ var ico = document.createElement('img');
+ if(list[key].substr(0,1) == '/'){
+ ico.src = list[key];
+ }else{
+ ico.src = DOKU_MEDIA+'lib/images/'+icobase+'/'+list[key];
+ }
+ btn.title = key;
+ btn.appendChild(ico);
+ addEvent(btn,'click',bind(pickerInsert,key,edid));
+ picker.appendChild(btn);
+ }else if(isString(list[key])){
+ // a list of text -> treat as text picker
+ var btn = document.createElement('button');
+ btn.className = 'pickerbutton';
+ var txt = document.createTextNode(list[key]);
+ btn.title = list[key];
+ btn.appendChild(txt);
+ addEvent(btn,'click',bind(pickerInsert,list[key],edid));
+ picker.appendChild(btn);
+ }else{
+ // a list of lists -> treat it as subtoolbar
+ initToolbar(picker,edid,list);
+ break; // all buttons handled already
+ }
+
+ }
+ var body = document.getElementsByTagName('body')[0];
+ body.appendChild(picker);
+ return picker;
+}
+
+/**
+ * Called by picker buttons to insert Text and close the picker again
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pickerInsert(text,edid){
+ insertAtCarret(edid,text);
+ pickerClose();
+}
+
+/**
+ * Add button action for signature button
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @return boolean If button should be appended
+ * @author Gabriel Birke <birke@d-scribe.de>
+ */
+function addBtnActionSignature(btn, props, edid) {
+ if(typeof(SIG) != 'undefined' && SIG != ''){
+ addEvent(btn,'click',bind(insertAtCarret,edid,SIG));
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Make intended formattings easier to handle
+ *
+ * Listens to all key inputs and handle indentions
+ * of lists and code blocks
+ *
+ * Currently handles space, backspce and enter presses
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @fixme handle tabs
+ */
+function keyHandler(e){
+ if(e.keyCode != 13 &&
+ e.keyCode != 8 &&
+ e.keyCode != 32) return;
+ var field = e.target;
+ var selection = getSelection(field);
+ var search = "\n"+field.value.substr(0,selection.start);
+ var linestart = Math.max(search.lastIndexOf("\n"),
+ search.lastIndexOf("\r")); //IE workaround
+ search = search.substr(linestart);
+
+
+ if(e.keyCode == 13){ // Enter
+ // keep current indention for lists and code
+ var match = search.match(/(\n +([\*-] ?)?)/);
+ if(match){
+ var scroll = field.scrollHeight;
+ insertAtCarret(field.id,match[1]);
+ field.scrollTop += (field.scrollHeight - scroll);
+ e.preventDefault(); // prevent enter key
+ return false;
+ }
+ }else if(e.keyCode == 8){ // Backspace
+ // unindent lists
+ var match = search.match(/(\n +)([*-] ?)$/);
+ if(match){
+ var spaces = match[1].length-1;
+
+ if(spaces > 3){ // unindent one level
+ field.value = field.value.substr(0,linestart)+
+ field.value.substr(linestart+2);
+ selection.start = selection.start - 2;
+ selection.end = selection.start;
+ }else{ // delete list point
+ field.value = field.value.substr(0,linestart)+
+ field.value.substr(selection.start);
+ selection.start = linestart;
+ selection.end = linestart;
+ }
+ setSelection(selection);
+ e.preventDefault(); // prevent backspace
+ return false;
+ }
+ }else if(e.keyCode == 32){ // Space
+ // intend list item
+ var match = search.match(/(\n +)([*-] )$/);
+ if(match){
+ field.value = field.value.substr(0,linestart)+' '+
+ field.value.substr(linestart);
+ selection.start = selection.start + 2;
+ selection.end = selection.start;
+ setSelection(selection);
+ e.preventDefault(); // prevent space
+ return false;
+ }
+ }
+}
+
+//FIXME consolidate somewhere else
+addInitEvent(function(){
+ var field = DOKUid('wiki__text');
+ if(!field) return;
+ addEvent(field,'keydown',keyHandler);
+});
+
+/**
+ * Determine the current section level while editing
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function currentHeadlineLevel(textboxId){
+ var field = DOKUid(textboxId);
+ var selection = getSelection(field);
+ var search = "\n"+field.value.substr(0,selection.start);
+ var lasthl = search.lastIndexOf("\n==");
+ if(lasthl == -1 && field.form.prefix){
+ // we need to look in prefix context
+ search = field.form.prefix.value;
+ lasthl = search.lastIndexOf("\n==");
+ }
+ search = search.substr(lasthl+1,6);
+
+ if(search == '======') return 1;
+ if(search.substr(0,5) == '=====') return 2;
+ if(search.substr(0,4) == '====') return 3;
+ if(search.substr(0,3) == '===') return 4;
+ if(search.substr(0,2) == '==') return 5;
+
+ return 0;
+}
+
+
+/**
+ * global var used for not saved yet warning
+ */
+var textChanged = false;
+
+/**
+ * Check for changes before leaving the page
+ */
+function changeCheck(msg){
+ if(textChanged){
+ var ok = confirm(msg);
+ if(ok){
+ // remove a possibly saved draft using ajax
+ var dwform = DOKUid('dw__editform');
+ if(dwform){
+ var params = 'call=draftdel';
+ params += '&id='+encodeURIComponent(dwform.elements.id.value);
+
+ var sackobj = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ sackobj.AjaxFailedAlert = '';
+ sackobj.encodeURIString = false;
+ sackobj.runAJAX(params);
+ // we send this request blind without waiting for
+ // and handling the returned data
+ }
+ }
+ return ok;
+ }else{
+ return true;
+ }
+}
+
+/**
+ * Add changeCheck to all Links and Forms (except those with a
+ * JSnocheck class), add handlers to monitor changes
+ *
+ * Sets focus to the editbox as well
+ *
+ * @fixme this is old and crappy code. needs to be redone
+ */
+function initChangeCheck(msg){
+ var edit_text = document.getElementById('wiki__text');
+ if(!edit_text) return;
+ if(edit_text.readOnly) return;
+ if(!DOKUid('dw__editform')) return;
+
+ // add change check for links
+ var links = document.getElementsByTagName('a');
+ for(var i=0; i < links.length; i++){
+ if(links[i].className.indexOf('JSnocheck') == -1){
+ links[i].onclick = function(){
+ var rc = changeCheck(msg);
+ if(window.event) window.event.returnValue = rc;
+ return rc;
+ };
+ }
+ }
+ // add change check for forms
+ var forms = document.forms;
+ for(i=0; i < forms.length; i++){
+ if(forms[i].className.indexOf('JSnocheck') == -1){
+ forms[i].onsubmit = function(){
+ var rc = changeCheck(msg);
+ if(window.event) window.event.returnValue = rc;
+ return rc;
+ };
+ }
+ }
+
+ // reset change memory var on submit
+ var btn_save = document.getElementById('edbtn__save');
+ btn_save.onclick = function(){ textChanged = false; };
+ var btn_prev = document.getElementById('edbtn__preview');
+ btn_prev.onclick = function(){ textChanged = false; };
+
+ // add change memory setter
+ edit_text.onchange = function(){
+ textChanged = true; //global var
+ summaryCheck();
+ };
+ var summary = document.getElementById('edit__summary');
+ addEvent(summary, 'change', summaryCheck);
+ addEvent(summary, 'keyup', summaryCheck);
+ if (textChanged) summaryCheck();
+
+ // set focus
+ edit_text.focus();
+}
+
+/**
+ * Checks if a summary was entered - if not the style is changed
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function summaryCheck(){
+ var sum = document.getElementById('edit__summary');
+ if(sum.value === ''){
+ sum.className='missing';
+ }else{
+ sum.className='edit';
+ }
+}
+
+
+/**
+ * Class managing the timer to display a warning on a expiring lock
+ */
+function locktimer_class(){
+ this.sack = null;
+ this.timeout = 0;
+ this.timerID = null;
+ this.lasttime = null;
+ this.msg = '';
+ this.pageid = '';
+};
+var locktimer = new locktimer_class();
+ locktimer.init = function(timeout,msg,draft){
+ // init values
+ locktimer.timeout = timeout*1000;
+ locktimer.msg = msg;
+ locktimer.draft = draft;
+ locktimer.lasttime = new Date();
+
+ if(!DOKUid('dw__editform')) return;
+ locktimer.pageid = DOKUid('dw__editform').elements.id.value;
+ if(!locktimer.pageid) return;
+
+ // init ajax component
+ locktimer.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ locktimer.sack.AjaxFailedAlert = '';
+ locktimer.sack.encodeURIString = false;
+ locktimer.sack.onCompletion = locktimer.refreshed;
+
+ // register refresh event
+ addEvent(DOKUid('dw__editform').elements.wikitext,'keypress',function(){locktimer.refresh();});
+
+ // start timer
+ locktimer.reset();
+ };
+
+ /**
+ * (Re)start the warning timer
+ */
+ locktimer.reset = function(){
+ locktimer.clear();
+ locktimer.timerID = window.setTimeout("locktimer.warning()", locktimer.timeout);
+ };
+
+ /**
+ * Display the warning about the expiring lock
+ */
+ locktimer.warning = function(){
+ locktimer.clear();
+ alert(locktimer.msg);
+ };
+
+ /**
+ * Remove the current warning timer
+ */
+ locktimer.clear = function(){
+ if(locktimer.timerID !== null){
+ window.clearTimeout(locktimer.timerID);
+ locktimer.timerID = null;
+ }
+ };
+
+ /**
+ * Refresh the lock via AJAX
+ *
+ * Called on keypresses in the edit area
+ */
+ locktimer.refresh = function(){
+ var now = new Date();
+ // refresh every minute only
+ if(now.getTime() - locktimer.lasttime.getTime() > 30*1000){ //FIXME decide on time
+ var params = 'call=lock&id='+encodeURIComponent(locktimer.pageid);
+ if(locktimer.draft){
+ var dwform = DOKUid('dw__editform');
+ params += '&prefix='+encodeURIComponent(dwform.elements.prefix.value);
+ params += '&wikitext='+encodeURIComponent(dwform.elements.wikitext.value);
+ params += '&suffix='+encodeURIComponent(dwform.elements.suffix.value);
+ params += '&date='+encodeURIComponent(dwform.elements.date.value);
+ }
+ locktimer.sack.runAJAX(params);
+ locktimer.lasttime = now;
+ }
+ };
+
+
+ /**
+ * Callback. Resets the warning timer
+ */
+ locktimer.refreshed = function(){
+ var data = this.response;
+ var error = data.charAt(0);
+ data = data.substring(1);
+
+ DOKUid('draft__status').innerHTML=data;
+ if(error != '1') return; // locking failed
+ locktimer.reset();
+ };
+// end of locktimer class functions
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js
new file mode 100644
index 000000000..e7526ced7
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js
@@ -0,0 +1,176 @@
+// written by Dean Edwards, 2005
+// with input from Tino Zijdel
+
+// http://dean.edwards.name/weblog/2005/10/add-event/
+
+function addEvent(element, type, handler) {
+ // assign each event handler a unique ID
+ if (!handler.$$guid) handler.$$guid = addEvent.guid++;
+ // create a hash table of event types for the element
+ if (!element.events) element.events = {};
+ // create a hash table of event handlers for each element/event pair
+ var handlers = element.events[type];
+ if (!handlers) {
+ handlers = element.events[type] = {};
+ // store the existing event handler (if there is one)
+ if (element["on" + type]) {
+ handlers[0] = element["on" + type];
+ }
+ }
+ // store the event handler in the hash table
+ handlers[handler.$$guid] = handler;
+ // assign a global event handler to do all the work
+ element["on" + type] = handleEvent;
+};
+// a counter used to create unique IDs
+addEvent.guid = 1;
+
+function removeEvent(element, type, handler) {
+ // delete the event handler from the hash table
+ if (element.events && element.events[type]) {
+ delete element.events[type][handler.$$guid];
+ }
+};
+
+function handleEvent(event) {
+ var returnValue = true;
+ // grab the event object (IE uses a global event object)
+ event = event || fixEvent(window.event);
+ // get a reference to the hash table of event handlers
+ var handlers = this.events[event.type];
+ // execute each event handler
+ for (var i in handlers) {
+ if (!handlers.hasOwnProperty(i)) continue;
+ this.$$handleEvent = handlers[i];
+ if (this.$$handleEvent(event) === false) {
+ returnValue = false;
+ }
+ }
+ return returnValue;
+};
+
+function fixEvent(event) {
+ // add W3C standard event methods
+ event.preventDefault = fixEvent.preventDefault;
+ event.stopPropagation = fixEvent.stopPropagation;
+ // fix target
+ event.target = event.srcElement;
+ return event;
+};
+fixEvent.preventDefault = function() {
+ this.returnValue = false;
+};
+fixEvent.stopPropagation = function() {
+ this.cancelBubble = true;
+};
+
+
+/**
+ * Pseudo event handler to be fired after the DOM was parsed or
+ * on window load at last.
+ *
+ * @author based upon some code by Dean Edwards
+ * @author Dean Edwards
+ * @link http://dean.edwards.name/weblog/2006/06/again/
+ */
+window.fireoninit = function() {
+ // quit if this function has already been called
+ if (arguments.callee.done) return;
+ // flag this function so we don't do the same thing twice
+ arguments.callee.done = true;
+ // kill the timer
+ if (_timer) {
+ clearInterval(_timer);
+ _timer = null;
+ }
+
+ if (typeof window.oninit == 'function') {
+ window.oninit();
+ }
+};
+
+/**
+ * Run the fireoninit function as soon as possible after
+ * the DOM was loaded, using different methods for different
+ * Browsers
+ *
+ * @author Dean Edwards
+ * @link http://dean.edwards.name/weblog/2006/06/again/
+ */
+ // for Mozilla
+ if (document.addEventListener) {
+ document.addEventListener("DOMContentLoaded", window.fireoninit, null);
+ }
+
+ // for Internet Explorer (using conditional comments)
+ /*@cc_on @*/
+ /*@if (@_win32)
+ document.write("<scr" + "ipt id=\"__ie_init\" defer=\"true\" src=\"//:\"><\/script>");
+ var script = document.getElementById("__ie_init");
+ script.onreadystatechange = function() {
+ if (this.readyState == "complete") {
+ window.fireoninit(); // call the onload handler
+ }
+ };
+ /*@end @*/
+
+ // for Safari
+ if (/WebKit/i.test(navigator.userAgent)) { // sniff
+ var _timer = setInterval(function() {
+ if (/loaded|complete/.test(document.readyState)) {
+ window.fireoninit(); // call the onload handler
+ }
+ }, 10);
+ }
+
+ // for other browsers
+ window.onload = window.fireoninit;
+
+
+/**
+ * This is a pseudo Event that will be fired by the fireoninit
+ * function above.
+ *
+ * Use addInitEvent to bind to this event!
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see fireoninit()
+ */
+window.oninit = function(){};
+
+/**
+ * Bind a function to the window.init pseudo event
+ *
+ * @author Simon Willison
+ * @see http://simon.incutio.com/archive/2004/05/26/addLoadEvent
+ */
+function addInitEvent(func) {
+ var oldoninit = window.oninit;
+ if (typeof window.oninit != 'function') {
+ window.oninit = func;
+ } else {
+ window.oninit = function() {
+ oldoninit();
+ func();
+ };
+ }
+}
+
+/**
+ * Bind variables to a function call creating a closure
+ *
+ * Use this to circumvent variable scope problems when creating closures
+ * inside a loop
+ *
+ * @author Adrian Lang <lang@cosmocode.de>
+ * @link http://www.cosmocode.de/en/blog/gohr/2009-10/15-javascript-fixing-the-closure-scope-in-loops
+ * @param functionref fnc - the function to be called
+ * @param mixed - any arguments to be passed to the function
+ * @returns functionref
+ */
+function bind (fnc) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function() {
+ return fnc.apply(this, args);
+ }
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js
new file mode 100644
index 000000000..8d4f3ea78
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js
@@ -0,0 +1,146 @@
+/**
+ * Differrent helper functions
+ *
+ * @author Ilya Lebedev <ilya@lebedev.net>
+ * @license LGPL
+ */
+//-----------------------------------------------------------------------------
+// Variable/property checks
+//-----------------------------------------------------------------------------
+/**
+ * Checks if property is undefined
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isUndefined (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'undefined');
+}
+/**
+ * Checks if property is function
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isFunction (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'function');
+}
+/**
+ * Checks if property is string
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isString (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'string');
+}
+/**
+ * Checks if property is number
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isNumber (prop /* :Object */) /* :Boolean */ {
+ return (typeof prop == 'number');
+}
+/**
+ * Checks if property is the calculable number
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isNumeric (prop /* :Object */) /* :Boolean */ {
+ return isNumber(prop)&&!isNaN(prop)&&isFinite(prop);
+}
+/**
+ * Checks if property is array
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isArray (prop /* :Object */) /* :Boolean */ {
+ return (prop instanceof Array);
+}
+/**
+ * Checks if property is regexp
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isRegExp (prop /* :Object */) /* :Boolean */ {
+ return (prop instanceof RegExp);
+}
+/**
+ * Checks if property is a boolean value
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isBoolean (prop /* :Object */) /* :Boolean */ {
+ return ('boolean' == typeof prop);
+}
+/**
+ * Checks if property is a scalar value (value that could be used as the hash key)
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isScalar (prop /* :Object */) /* :Boolean */ {
+ return isNumeric(prop)||isString(prop);
+}
+/**
+ * Checks if property is empty
+ *
+ * @param {Object} prop value to check
+ * @return {Boolean} true if matched
+ * @scope public
+ */
+function isEmpty (prop /* :Object */) /* :Boolean */ {
+ if (isBoolean(prop)) return false;
+ if (isRegExp(prop) && new RegExp("").toString() == prop.toString()) return true;
+ if (isString(prop) || isNumber(prop)) return !prop;
+ if (Boolean(prop)&&false != prop) {
+ for (var i in prop) if(prop.hasOwnProperty(i)) return false
+ }
+ return true;
+}
+
+/**
+ * Checks if property is derived from prototype, applies method if it is not exists
+ *
+ * @param string property name
+ * @return bool true if prototyped
+ * @access public
+ */
+if ('undefined' == typeof Object.hasOwnProperty) {
+ Object.prototype.hasOwnProperty = function (prop) {
+ return !('undefined' == typeof this[prop] || this.constructor && this.constructor.prototype[prop] && this[prop] === this.constructor.prototype[prop]);
+ }
+}
+
+/**
+ * Very simplistic Flash plugin check, probably works for Flash 8 and higher only
+ */
+function hasFlash(version){
+ var ver = 0;
+ try{
+ if(navigator.plugins != null && navigator.plugins.length > 0){
+ ver = navigator.plugins["Shockwave Flash"].description.split(' ')[2].split('.')[0];
+ }else{
+ var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+ ver = axo.GetVariable("$version").split(' ')[1].split(',')[0];
+ }
+ }catch(e){ }
+
+ if(ver >= version) return true;
+ return false;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html
@@ -0,0 +1,12 @@
+<!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>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js
new file mode 100644
index 000000000..16b00c0ab
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js
@@ -0,0 +1,116 @@
+/**
+ * Javascript for index view
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+var index = {
+
+ /**
+ * Delay in ms before showing the throbber.
+ * Used to skip the throbber for fast AJAX calls.
+ */
+ throbber_delay: 500,
+
+ /**
+ * Attach event handlers to all "folders" below the given element
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treeattach: function(obj){
+ if(!obj) return;
+
+ var items = getElementsByClass('idx_dir',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+
+ // attach action to make the link clickable by AJAX
+ addEvent(elem,'click',function(e){ return index.toggle(e,this); });
+
+ // get the listitem the elem belongs to
+ var listitem = elem.parentNode;
+ while (listitem.tagName != 'LI') {
+ listitem = listitem.parentNode;
+ }
+ //when there are uls under this listitem mark this listitem as opened
+ if (listitem.getElementsByTagName('ul').length) {
+ listitem.open = true;
+ }
+ }
+ },
+
+ /**
+ * Open or close a subtree using AJAX
+ * The contents of subtrees are "cached" untill the page is reloaded.
+ * A "loading" indicator is shown only when the AJAX call is slow.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Ben Coburn <btcoburn@silicodon.net>
+ */
+ toggle: function(e,clicky){
+ var listitem = clicky.parentNode.parentNode;
+
+ listitem.open = !listitem.open;
+ // listitem.open represents now the action to be done
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(!listitem.open){
+ if (sublists.length) {
+ sublists[0].style.display='none';
+ }
+ listitem.className='closed';
+ e.preventDefault();
+ return false;
+ }
+
+ // just show if already loaded
+ if(sublists.length && listitem.open){
+ sublists[0].style.display='';
+ listitem.className='open';
+ e.preventDefault();
+ return false;
+ }
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ ul.className = 'idx';
+ timeout = window.setTimeout(function(){
+ // show the throbber as needed
+ if (listitem.open) {
+ ul.innerHTML = '<li><img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="loading..." title="loading..." /></li>';
+ listitem.appendChild(ul);
+ listitem.className='open';
+ }
+ }, this.throbber_delay);
+ ajax.elementObj = ul;
+ ajax.afterCompletion = function(){
+ window.clearTimeout(timeout);
+ index.treeattach(ul);
+ if (listitem.className!='open') {
+ if (!listitem.open) {
+ ul.style.display='none';
+ }
+ listitem.appendChild(ul);
+ if (listitem.open) {
+ listitem.className='open';
+ }
+ }
+ };
+ ajax.runAJAX(clicky.search.substr(1)+'&call=index');
+ e.preventDefault();
+ return false;
+ }
+};
+
+
+addInitEvent(function(){
+ if (DOKUid('index__tree'))
+ index.treeattach(DOKUid('index__tree'));
+});
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js
new file mode 100644
index 000000000..55469c158
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js
@@ -0,0 +1,282 @@
+/**
+ * The Link Wizard
+ *
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+var linkwiz = {
+ wiz: null,
+ entry: null,
+ result: null,
+ timer: null,
+ sack: null,
+ textArea: null,
+ selected: -1,
+ selection: null,
+
+ /**
+ * Initialize the linkwizard by creating the needed HTML
+ * and attaching the eventhandlers
+ */
+ init: function(textArea){
+ // prepare AJAX object
+ linkwiz.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ linkwiz.sack.AjaxFailedAlert = '';
+ linkwiz.sack.encodeURIString = false;
+
+ // create HTML Structure
+ linkwiz.wiz = document.createElement('div');
+ linkwiz.wiz.id = 'link__wiz';
+ linkwiz.wiz.className = 'picker';
+ linkwiz.wiz.style.top = (findPosY(textArea)+20)+'px';
+ linkwiz.wiz.style.left = (findPosX(textArea)+80)+'px';
+ linkwiz.wiz.style.marginLeft = '-10000px';
+
+ linkwiz.wiz.innerHTML =
+ '<div id="link__wiz_header">'+
+ '<img src="'+DOKU_BASE+'lib/images/close.png" width="16" height="16" align="right" alt="" id="link__wiz_close" />'+
+ LANG['linkwiz']+'</div>'+
+ '<div>'+LANG['linkto']+' <input type="text" class="edit" id="link__wiz_entry" autocomplete="off" /></div>'+
+ '<div id="link__wiz_result"></div>';
+ textArea.form.parentNode.appendChild(linkwiz.wiz);
+ linkwiz.textArea = textArea;
+ linkwiz.result = DOKUid('link__wiz_result');
+ linkwiz.entry = DOKUid('link__wiz_entry');
+
+ // attach event handlers
+ var obj;
+ obj = DOKUid('link__wiz_close');
+ obj.onclick = linkwiz.hide;
+
+ linkwiz.sack.elementObj = linkwiz.result;
+ addEvent(linkwiz.entry,'keyup',linkwiz.onEntry);
+ addEvent(linkwiz.result,'click',linkwiz.onResultClick);
+ drag.attach(linkwiz.wiz,DOKUid('link__wiz_header'));
+ },
+
+ /**
+ * handle all keyup events in the entry field
+ */
+ onEntry: function(e){
+ if(e.keyCode == 37 || e.keyCode == 39){ //left/right
+ return true; //ignore
+ }
+ if(e.keyCode == 27){
+ linkwiz.hide();
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ if(e.keyCode == 38){ //Up
+ linkwiz.select(linkwiz.selected -1);
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ if(e.keyCode == 40){ //Down
+ linkwiz.select(linkwiz.selected +1);
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ if(e.keyCode == 13){ //Enter
+ if(linkwiz.selected > -1){
+ var obj = linkwiz.getResult(linkwiz.selected);
+ if(obj){
+ var a = obj.getElementsByTagName('A')[0];
+ linkwiz.resultClick(a);
+ }
+ }else if(linkwiz.entry.value){
+ linkwiz.insertLink(linkwiz.entry.value);
+ }
+
+ e.preventDefault();
+ e.stopPropagation();
+ return false;
+ }
+ linkwiz.autocomplete();
+ },
+
+ /**
+ * Get one of the result by index
+ *
+ * @param int result div to return
+ * @returns DOMObject or null
+ */
+ getResult: function(num){
+ var obj;
+ var childs = linkwiz.result.getElementsByTagName('DIV');
+ obj = childs[num];
+ if(obj){
+ return obj;
+ }else{
+ return null;
+ }
+ },
+
+ /**
+ * Select the given result
+ */
+ select: function(num){
+ if(num < 0){
+ linkwiz.deselect();
+ return;
+ }
+
+ var obj = linkwiz.getResult(num);
+ if(obj){
+ linkwiz.deselect();
+ obj.className += ' selected';
+
+ // make sure the item is viewable in the scroll view
+ // FIXME check IE compatibility
+ if(obj.offsetTop > linkwiz.result.scrollTop + linkwiz.result.clientHeight){
+ linkwiz.result.scrollTop += obj.clientHeight;
+ }else if(obj.offsetTop - linkwiz.result.clientHeight < linkwiz.result.scrollTop){ // this works but isn't quite right, fixes welcome
+ linkwiz.result.scrollTop -= obj.clientHeight;
+ }
+ // now recheck - if still not in view, the user used the mouse to scroll
+ if( (obj.offsetTop > linkwiz.result.scrollTop + linkwiz.result.clientHeight) ||
+ (obj.offsetTop < linkwiz.result.scrollTop) ){
+ obj.scrollIntoView();
+ }
+
+ linkwiz.selected = num;
+ }
+ },
+
+ /**
+ * deselect a result if any is selected
+ */
+ deselect: function(){
+ if(linkwiz.selected > -1){
+ var obj = linkwiz.getResult(linkwiz.selected);
+ if(obj){
+ obj.className = obj.className.replace(/ ?selected/,'');
+ }
+ }
+ linkwiz.selected = -1;
+ },
+
+ /**
+ * Handle clicks in the result set an dispatch them to
+ * resultClick()
+ */
+ onResultClick: function(e){
+ if(e.target.tagName != 'A') return;
+ e.stopPropagation();
+ e.preventDefault();
+ linkwiz.resultClick(e.target);
+ return false;
+ },
+
+ /**
+ * Handles the "click" on a given result anchor
+ */
+ resultClick: function(a){
+ var id = a.title;
+ if(id == '' || id.substr(id.length-1) == ':'){
+ linkwiz.entry.value = id;
+ linkwiz.autocomplete_exec();
+ }else{
+ linkwiz.entry.value = id;
+ if(a.nextSibling && a.nextSibling.tagName == 'SPAN'){
+ linkwiz.insertLink(a.nextSibling.innerHTML);
+ }else{
+ linkwiz.insertLink('');
+ }
+ }
+ },
+
+ /**
+ * Insert the id currently in the entry box to the textarea,
+ * replacing the current selection or at the curso postion.
+ * When no selection is available the given title will be used
+ * as link title instead
+ */
+ insertLink: function(title){
+ if(!linkwiz.entry.value) return;
+
+ var sel = getSelection(linkwiz.textArea);
+ if(sel.start == 0 && sel.end == 0) sel = linkwiz.selection;
+
+ var stxt = sel.getText();
+ if(!stxt && !DOKU_UHC) stxt=title;
+
+ // prepend colon inside namespaces for non namespace pages
+ if(linkwiz.textArea.form['id'].value.indexOf(':') != -1 &&
+ linkwiz.entry.value.indexOf(':') == -1){
+ linkwiz.entry.value = ':'+linkwiz.entry.value;
+ }
+
+ var link = '[['+linkwiz.entry.value+'|';
+ if(stxt) link += stxt;
+ link += ']]';
+
+ var so = linkwiz.entry.value.length+3;
+ var eo = 2;
+
+ pasteText(sel,link,{startofs: so, endofs: eo});
+ linkwiz.hide();
+ },
+
+ /**
+ * Start the page/namespace lookup timer
+ *
+ * Calls autocomplete_exec when the timer runs out
+ */
+ autocomplete: function(){
+ if(linkwiz.timer !== null){
+ window.clearTimeout(linkwiz.timer);
+ linkwiz.timer = null;
+ }
+
+ linkwiz.timer = window.setTimeout(linkwiz.autocomplete_exec,350);
+ },
+
+ /**
+ * Executes the AJAX call for the page/namespace lookup
+ */
+ autocomplete_exec: function(){
+ linkwiz.deselect();
+ linkwiz.result.innerHTML = '<img src="'+DOKU_BASE+'lib/images/throbber.gif" alt="" width="16" height="16" />';
+ linkwiz.sack.runAJAX('call=linkwiz&q='+encodeURI(linkwiz.entry.value));
+ },
+
+ /**
+ * Clears the result area
+ */
+ clear: function(){
+ linkwiz.result.innerHTML = 'Search for a matching page name above, or browse through the pages on the right';
+ linkwiz.entry.value = '';
+ },
+
+ /**
+ * Show the linkwizard
+ */
+ show: function(){
+ linkwiz.selection = getSelection(linkwiz.textArea);
+ linkwiz.wiz.style.marginLeft = '0px';
+ linkwiz.entry.focus();
+ linkwiz.autocomplete();
+ },
+
+ /**
+ * Hide the link wizard
+ */
+ hide: function(){
+ linkwiz.wiz.style.marginLeft = '-10000px';
+ linkwiz.textArea.focus();
+ },
+
+ /**
+ * Toggle the link wizard
+ */
+ toggle: function(){
+ if(linkwiz.wiz.style.marginLeft == '-10000px'){
+ linkwiz.show();
+ }else{
+ linkwiz.hide();
+ }
+ }
+};
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js
new file mode 100644
index 000000000..598fb61f4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js
@@ -0,0 +1,351 @@
+/**
+ * JavaScript functionalitiy for the media management popup
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+var media_manager = {
+ keepopen: false,
+ hide: false,
+
+ /**
+ * Attach event handlers to all "folders" below the given element
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ treeattach: function(obj){
+ if(!obj) return;
+ var items = obj.getElementsByTagName('li');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+
+ // attach action to make the +/- clickable
+ var clicky = elem.getElementsByTagName('img')[0];
+ clicky.style.cursor = 'pointer';
+ addEvent(clicky,'click',function(event){ return media_manager.toggle(event,this); });
+
+ // attach action load folder list via AJAX
+ var link = elem.getElementsByTagName('a')[0];
+ link.style.cursor = 'pointer';
+ addEvent(link,'click',function(event){ return media_manager.list(event,this); });
+ }
+ },
+
+ /**
+ * Attach the image selector action to all links below the given element
+ * also add the action to autofill the "upload as" field
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ selectorattach: function(obj){
+ if(!obj) return;
+
+ var items = getElementsByClass('select',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+ elem.style.cursor = 'pointer';
+ addEvent(elem,'click',function(event){ return media_manager.select(event,this); });
+ }
+
+ // hide syntax example
+ items = getElementsByClass('example',obj,'div');
+ for(var i=0; i<items.length; i++){
+ elem = items[i];
+ elem.style.display = 'none';
+ }
+
+ var file = DOKUid('upload__file');
+ if(!file) return;
+ addEvent(file,'change',media_manager.suggest);
+ },
+
+ /**
+ * Attach deletion confirmation dialog to the delete buttons.
+ *
+ * Michael Klier <chi@chimeric.de>
+ */
+ confirmattach: function(obj){
+ if(!obj) return;
+
+ items = getElementsByClass('btn_media_delete',obj,'a');
+ for(var i=0; i<items.length; i++){
+ var elem = items[i];
+ addEvent(elem,'click',function(e){
+ if(e.target.tagName == 'IMG'){
+ var name = e.target.parentNode.title;
+ }else{
+ var name = e.target.title;
+ }
+ if(!confirm(LANG['del_confirm'] + "\n" + name)) {
+ e.preventDefault();
+ return false;
+ } else {
+ return true;
+ }
+ });
+ }
+ },
+
+ /**
+ * Creates checkboxes for additional options
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ attachoptions: function(obj){
+ if(!obj) return;
+
+ // keep open
+ if(opener){
+ var kobox = document.createElement('input');
+ kobox.type = 'checkbox';
+ kobox.id = 'media__keepopen';
+ if(DokuCookie.getValue('keepopen')){
+ kobox.checked = true;
+ kobox.defaultChecked = true; //IE wants this
+ media_manager.keepopen = true;
+ }
+ addEvent(kobox,'click',function(event){ return media_manager.togglekeepopen(event,this); });
+
+ var kolbl = document.createElement('label');
+ kolbl.htmlFor = 'media__keepopen';
+ kolbl.innerHTML = LANG['keepopen'];
+
+ var kobr = document.createElement('br');
+
+ obj.appendChild(kobox);
+ obj.appendChild(kolbl);
+ obj.appendChild(kobr);
+ }
+
+ // hide details
+ var hdbox = document.createElement('input');
+ hdbox.type = 'checkbox';
+ hdbox.id = 'media__hide';
+ if(DokuCookie.getValue('hide')){
+ hdbox.checked = true;
+ hdbox.defaultChecked = true; //IE wants this
+ media_manager.hide = true;
+ }
+ addEvent(hdbox,'click',function(event){ return media_manager.togglehide(event,this); });
+
+ var hdlbl = document.createElement('label');
+ hdlbl.htmlFor = 'media__hide';
+ hdlbl.innerHTML = LANG['hidedetails'];
+
+ var hdbr = document.createElement('br');
+
+ obj.appendChild(hdbox);
+ obj.appendChild(hdlbl);
+ obj.appendChild(hdbr);
+ media_manager.updatehide();
+ },
+
+ /**
+ * Opens the searchfield
+ *
+ * @author Tobias Sarnowski <sarnowski@cosmocode.de>
+ */
+ showsearchfield: function(event,link){
+ // prepare an AJAX call to fetch the search
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ cleanMsgArea();
+
+ var content = DOKUid('media__content');
+ content.innerHTML = '<img src="'+DOKU_MEDIA+'lib/images/loading.gif" alt="..." class="load" />';
+
+ ajax.elementObj = content;
+ ajax.afterCompletion = function(){
+ media_manager.selectorattach(content);
+ media_manager.confirmattach(content);
+ media_manager.updatehide();
+ };
+ ajax.runAJAX(link.search.substr(1)+'&call=mediasearchlist');
+ return false;
+ },
+
+ /**
+ * Toggles the keep open state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ togglekeepopen: function(event,cb){
+ if(cb.checked){
+ DokuCookie.setValue('keepopen',1);
+ media_manager.keepopen = true;
+ }else{
+ DokuCookie.setValue('keepopen','');
+ media_manager.keepopen = false;
+ }
+ },
+
+ /**
+ * Toggles the hide details state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ togglehide: function(event,cb){
+ if(cb.checked){
+ DokuCookie.setValue('hide',1);
+ media_manager.hide = true;
+ }else{
+ DokuCookie.setValue('hide','');
+ media_manager.hide = false;
+ }
+ media_manager.updatehide();
+ },
+
+ /**
+ * Sets the visibility of the image details accordingly to the
+ * chosen hide state
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ updatehide: function(){
+ var obj = DOKUid('media__content');
+ if(!obj) return;
+ var details = getElementsByClass('detail',obj,'div');
+ for(var i=0; i<details.length; i++){
+ if(media_manager.hide){
+ details[i].style.display = 'none';
+ }else{
+ details[i].style.display = '';
+ }
+ }
+ },
+
+ /**
+ * Insert the clicked image into the opener's textarea
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ select: function(event,link){
+ var id = link.name.substr(2);
+
+ if(!opener){
+ // if we don't run in popup display example
+ var ex = DOKUid('ex_'+id.replace(/:/g,'_'));
+ if(ex.style.display == ''){
+ ex.style.display = 'none';
+ }else{
+ ex.style.display = '';
+ }
+ return false;
+ }
+ opener.insertTags('wiki__text','{{'+id+'|','}}','');
+
+ if(!media_manager.keepopen) window.close();
+ opener.focus();
+ return false;
+ },
+
+ /**
+ * list the content of a namespace using AJAX
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ list: function(event,link){
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ cleanMsgArea();
+
+ var content = DOKUid('media__content');
+ content.innerHTML = '<img src="'+DOKU_MEDIA+'lib/images/loading.gif" alt="..." class="load" />';
+
+ ajax.elementObj = content;
+ ajax.afterCompletion = function(){
+ media_manager.selectorattach(content);
+ media_manager.confirmattach(content);
+ media_manager.updatehide();
+ media_manager.initFlashUpload();
+ };
+ ajax.runAJAX(link.search.substr(1)+'&call=medialist');
+ return false;
+ },
+
+
+ /**
+ * Open or close a subtree using AJAX
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ toggle: function(event,clicky){
+ var listitem = clicky.parentNode;
+
+ // if already open, close by removing the sublist
+ var sublists = listitem.getElementsByTagName('ul');
+ if(sublists.length){
+ listitem.removeChild(sublists[0]);
+ clicky.src = DOKU_MEDIA+'lib/images/plus.gif';
+ return false;
+ }
+
+ // get the enclosed link (is always the first one)
+ var link = listitem.getElementsByTagName('a')[0];
+
+ // prepare an AJAX call to fetch the subtree
+ var ajax = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ ajax.AjaxFailedAlert = '';
+ ajax.encodeURIString = false;
+ if(ajax.failed) return true;
+
+ //prepare the new ul
+ var ul = document.createElement('ul');
+ //fixme add classname here
+ listitem.appendChild(ul);
+ ajax.elementObj = ul;
+ ajax.afterCompletion = function(){ media_manager.treeattach(ul); };
+ ajax.runAJAX(link.search.substr(1)+'&call=medians');
+ clicky.src = DOKU_MEDIA+'lib/images/minus.gif';
+ return false;
+ },
+
+ /**
+ * Prefills the wikiname.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ suggest: function(){
+ var file = DOKUid('upload__file');
+ var name = DOKUid('upload__name');
+ if(!file || !name) return;
+
+ var text = file.value;
+ text = text.substr(text.lastIndexOf('/')+1);
+ text = text.substr(text.lastIndexOf('\\')+1);
+ name.value = text;
+ },
+
+
+ initFlashUpload: function(){
+ if(!hasFlash(8)) return;
+ var oform = DOKUid('dw__upload');
+ var oflash = DOKUid('dw__flashupload');
+ if(!oform || !oflash) return;
+
+ var clicky = document.createElement('img');
+ clicky.src = DOKU_MEDIA+'lib/images/multiupload.png';
+ clicky.title = LANG['mu_btn'];
+ clicky.alt = LANG['mu_btn'];
+ clicky.style.cursor = 'pointer';
+ clicky.onclick = function(){
+ oform.style.display = 'none';
+ oflash.style.display = '';
+ };
+ oform.appendChild(clicky);
+ }
+};
+
+addInitEvent(function(){
+ media_manager.treeattach(DOKUid('media__tree'));
+ media_manager.selectorattach(DOKUid('media__content'));
+ media_manager.confirmattach(DOKUid('media__content'));
+ media_manager.attachoptions(DOKUid('media__opts'));
+ media_manager.initFlashUpload();
+});
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc
new file mode 100644
index 000000000..d1db8e765
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc
@@ -0,0 +1,53 @@
+// this is an ugly fix to make Internet Explorer work with transparent
+// PNG images - do your self a favour and use a real browser!
+
+<public:component>
+<public:attach event="onpropertychange" onevent="propertyChanged()" />
+<script>
+
+var supported = /MSIE (5\.5)|[6789]/.test(navigator.userAgent) && navigator.platform == "Win32";
+var realSrc;
+var blankSrc = DOKU_BASE+"lib/images/blank.gif";
+
+if (supported) fixImage();
+
+function propertyChanged() {
+ if (!supported) return;
+
+ var pName = event.propertyName;
+ if (pName != "src") return;
+ // if not set to blank
+ if ( ! new RegExp(blankSrc).test(src))
+ fixImage();
+};
+
+function fixImage() {
+ // get src
+ var src = element.src;
+
+ // check for real change
+ if (src == realSrc) {
+ element.src = blankSrc;
+ return;
+ }
+
+ if ( ! new RegExp(blankSrc).test(src)) {
+ // backup old src
+ realSrc = src;
+ }
+
+ // test for png
+ if ( /\.png$/.test( realSrc.toLowerCase() ) ) {
+ // set blank image
+ element.src = blankSrc;
+ // set filter
+ element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
+ }
+ else {
+ // remove filter
+ element.runtimeStyle.filter = "";
+ }
+}
+
+</script>
+</public:component>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js
new file mode 100644
index 000000000..491794f13
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js
@@ -0,0 +1,561 @@
+/**
+ * Some of these scripts were taken from wikipedia.org and were modified for DokuWiki
+ */
+
+/**
+ * Some browser detection
+ */
+var clientPC = navigator.userAgent.toLowerCase(); // Get client info
+var is_macos = navigator.appVersion.indexOf('Mac') != -1;
+var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1) &&
+ (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
+var is_safari = ((clientPC.indexOf('AppleWebKit')!=-1) && (clientPC.indexOf('spoofer')==-1));
+var is_khtml = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ));
+if (clientPC.indexOf('opera')!=-1) {
+ var is_opera = true;
+ var is_opera_preseven = (window.opera && !document.childNodes);
+ var is_opera_seven = (window.opera && document.childNodes);
+}
+
+/**
+ * Handy shortcut to document.getElementById
+ *
+ * This function was taken from the prototype library
+ *
+ * @link http://prototype.conio.net/
+ */
+function DOKUid() {
+ var elements = new Array();
+
+ for (var i = 0; i < arguments.length; i++) {
+ var element = arguments[i];
+ if (typeof element == 'string')
+ element = document.getElementById(element);
+
+ if (arguments.length == 1)
+ return element;
+
+ elements.push(element);
+ }
+
+ return elements;
+}
+
+/**
+ * Simple function to check if a global var is defined
+ *
+ * @author Kae Verens
+ * @link http://verens.com/archives/2005/07/25/isset-for-javascript/#comment-2835
+ */
+function isset(varname){
+ return(typeof(window[varname])!='undefined');
+}
+
+/**
+ * Select elements by their class name
+ *
+ * @author Dustin Diaz <dustin [at] dustindiaz [dot] com>
+ * @link http://www.dustindiaz.com/getelementsbyclass/
+ */
+function getElementsByClass(searchClass,node,tag) {
+ var classElements = new Array();
+ if ( node == null )
+ node = document;
+ if ( tag == null )
+ tag = '*';
+ var els = node.getElementsByTagName(tag);
+ var elsLen = els.length;
+ var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
+ for (var i = 0, j = 0; i < elsLen; i++) {
+ if ( pattern.test(els[i].className) ) {
+ classElements[j] = els[i];
+ j++;
+ }
+ }
+ return classElements;
+}
+
+/**
+ * Get the X offset of the top left corner of the given object
+ *
+ * @link http://www.quirksmode.org/index.html?/js/findpos.html
+ */
+function findPosX(object){
+ var curleft = 0;
+ var obj = DOKUid(object);
+ if (obj.offsetParent){
+ while (obj.offsetParent){
+ curleft += obj.offsetLeft;
+ obj = obj.offsetParent;
+ }
+ }
+ else if (obj.x){
+ curleft += obj.x;
+ }
+ return curleft;
+} //end findPosX function
+
+/**
+ * Get the Y offset of the top left corner of the given object
+ *
+ * @link http://www.quirksmode.org/index.html?/js/findpos.html
+ */
+function findPosY(object){
+ var curtop = 0;
+ var obj = DOKUid(object);
+ if (obj.offsetParent){
+ while (obj.offsetParent){
+ curtop += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+ }
+ else if (obj.y){
+ curtop += obj.y;
+ }
+ return curtop;
+} //end findPosY function
+
+/**
+ * Escape special chars in JavaScript
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function jsEscape(text){
+ var re=new RegExp("\\\\","g");
+ text=text.replace(re,"\\\\");
+ re=new RegExp("'","g");
+ text=text.replace(re,"\\'");
+ re=new RegExp('"',"g");
+ text=text.replace(re,'&quot;');
+ re=new RegExp("\\\\\\\\n","g");
+ text=text.replace(re,"\\n");
+ return text;
+}
+
+/**
+ * This function escapes some special chars
+ * @deprecated by above function
+ */
+function escapeQuotes(text) {
+ var re=new RegExp("'","g");
+ text=text.replace(re,"\\'");
+ re=new RegExp('"',"g");
+ text=text.replace(re,'&quot;');
+ re=new RegExp("\\n","g");
+ text=text.replace(re,"\\n");
+ return text;
+}
+
+/**
+ * Adds a node as the first childenode to the given parent
+ *
+ * @see appendChild()
+ */
+function prependChild(parent,element) {
+ if(!parent.firstChild){
+ parent.appendChild(element);
+ }else{
+ parent.insertBefore(element,parent.firstChild);
+ }
+}
+
+/**
+ * Prints a animated gif to show the search is performed
+ *
+ * Because we need to modify the DOM here before the document is loaded
+ * and parsed completely we have to rely on document.write()
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function showLoadBar(){
+
+ document.write('<img src="'+DOKU_MEDIA+'lib/images/loading.gif" '+
+ 'width="150" height="12" alt="..." />');
+
+ /* this does not work reliable in IE
+ obj = DOKUid(id);
+
+ if(obj){
+ obj.innerHTML = '<img src="'+DOKU_BASE+'lib/images/loading.gif" '+
+ 'width="150" height="12" alt="..." />';
+ obj.style.display="block";
+ }
+ */
+}
+
+/**
+ * Disables the animated gif to show the search is done
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function hideLoadBar(id){
+ obj = DOKUid(id);
+ if(obj) obj.style.display="none";
+}
+
+/**
+ * Adds the toggle switch to the TOC
+ */
+function addTocToggle() {
+ if(!document.getElementById) return;
+ var header = DOKUid('toc__header');
+ if(!header) return;
+ var toc = DOKUid('toc__inside');
+
+ var obj = document.createElement('span');
+ obj.id = 'toc__toggle';
+ obj.style.cursor = 'pointer';
+ if (toc && toc.style.display == 'none') {
+ obj.innerHTML = '<span>+</span>';
+ obj.className = 'toc_open';
+ } else {
+ obj.innerHTML = '<span>&minus;</span>';
+ obj.className = 'toc_close';
+ }
+
+ prependChild(header,obj);
+ obj.parentNode.onclick = toggleToc;
+ try {
+ obj.parentNode.style.cursor = 'pointer';
+ obj.parentNode.style.cursor = 'hand';
+ }catch(e){}
+}
+
+/**
+ * This toggles the visibility of the Table of Contents
+ */
+function toggleToc() {
+ var toc = DOKUid('toc__inside');
+ var obj = DOKUid('toc__toggle');
+ if(toc.style.display == 'none') {
+ toc.style.display = '';
+ obj.innerHTML = '<span>&minus;</span>';
+ obj.className = 'toc_close';
+ } else {
+ toc.style.display = 'none';
+ obj.innerHTML = '<span>+</span>';
+ obj.className = 'toc_open';
+ }
+}
+
+/**
+ * Display an insitu footnote popup
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Chris Smith <chris@jalakai.co.uk>
+ */
+function footnote(e){
+ var obj = e.target;
+ var id = obj.id.substr(5);
+
+ // get or create the footnote popup div
+ var fndiv = DOKUid('insitu__fn');
+ if(!fndiv){
+ fndiv = document.createElement('div');
+ fndiv.id = 'insitu__fn';
+ fndiv.className = 'insitu-footnote JSpopup dokuwiki';
+
+ // autoclose on mouseout - ignoring bubbled up events
+ addEvent(fndiv,'mouseout',function(e){
+ if(e.target != fndiv){
+ e.stopPropagation();
+ return;
+ }
+ // check if the element was really left
+ if(e.pageX){ // Mozilla
+ var bx1 = findPosX(fndiv);
+ var bx2 = bx1 + fndiv.offsetWidth;
+ var by1 = findPosY(fndiv);
+ var by2 = by1 + fndiv.offsetHeight;
+ var x = e.pageX;
+ var y = e.pageY;
+ if(x > bx1 && x < bx2 && y > by1 && y < by2){
+ // we're still inside boundaries
+ e.stopPropagation();
+ return;
+ }
+ }else{ // IE
+ if(e.offsetX > 0 && e.offsetX < fndiv.offsetWidth-1 &&
+ e.offsetY > 0 && e.offsetY < fndiv.offsetHeight-1){
+ // we're still inside boundaries
+ e.stopPropagation();
+ return;
+ }
+ }
+ // okay, hide it
+ fndiv.style.display='none';
+ });
+ document.body.appendChild(fndiv);
+ }
+
+ // locate the footnote anchor element
+ var a = DOKUid( "fn__"+id );
+ if (!a){ return; }
+
+ // anchor parent is the footnote container, get its innerHTML
+ var content = new String (a.parentNode.parentNode.innerHTML);
+
+ // strip the leading content anchors and their comma separators
+ content = content.replace(/<sup>.*<\/sup>/gi, '');
+ content = content.replace(/^\s+(,\s+)+/,'');
+
+ // prefix ids on any elements with "insitu__" to ensure they remain unique
+ content = content.replace(/\bid=\"(.*?)\"/gi,'id="insitu__$1');
+
+ // now put the content into the wrapper
+ fndiv.innerHTML = content;
+
+ // position the div and make it visible
+ var x; var y;
+ if(e.pageX){ // Mozilla
+ x = e.pageX;
+ y = e.pageY;
+ }else{ // IE
+ x = e.offsetX;
+ y = e.offsetY;
+ }
+ fndiv.style.position = 'absolute';
+ fndiv.style.left = (x+2)+'px';
+ fndiv.style.top = (y+2)+'px';
+ fndiv.style.display = '';
+}
+
+/**
+ * Add the event handlers to footnotes
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+addInitEvent(function(){
+ var elems = getElementsByClass('fn_top',null,'a');
+ for(var i=0; i<elems.length; i++){
+ addEvent(elems[i],'mouseover',function(e){footnote(e);});
+ }
+});
+
+/**
+ * Add the edit window size controls
+ */
+function initSizeCtl(ctlid,edid){
+ if(!document.getElementById){ return; }
+
+ var ctl = DOKUid(ctlid);
+ var textarea = DOKUid(edid);
+ if(!ctl || !textarea) return;
+
+ var hgt = DokuCookie.getValue('sizeCtl');
+ if(hgt){
+ textarea.style.height = hgt;
+ }else{
+ textarea.style.height = '300px';
+ }
+
+ var wrp = DokuCookie.getValue('wrapCtl');
+ if(wrp){
+ setWrap(textarea, wrp);
+ } // else use default value
+
+ var l = document.createElement('img');
+ var s = document.createElement('img');
+ var w = document.createElement('img');
+ l.src = DOKU_MEDIA+'lib/images/larger.gif';
+ s.src = DOKU_MEDIA+'lib/images/smaller.gif';
+ w.src = DOKU_MEDIA+'lib/images/wrap.gif';
+ addEvent(l,'click',function(){sizeCtl(edid,100);});
+ addEvent(s,'click',function(){sizeCtl(edid,-100);});
+ addEvent(w,'click',function(){toggleWrap(edid);});
+ ctl.appendChild(l);
+ ctl.appendChild(s);
+ ctl.appendChild(w);
+}
+
+/**
+ * This sets the vertical size of the editbox
+ */
+function sizeCtl(edid,val){
+ var textarea = DOKUid(edid);
+ var height = parseInt(textarea.style.height.substr(0,textarea.style.height.length-2));
+ height += val;
+ textarea.style.height = height+'px';
+
+ DokuCookie.setValue('sizeCtl',textarea.style.height);
+}
+
+/**
+ * Toggle the wrapping mode of a textarea
+ */
+function toggleWrap(edid){
+ var textarea = DOKUid(edid);
+ var wrap = textarea.getAttribute('wrap');
+ if(wrap && wrap.toLowerCase() == 'off'){
+ setWrap(textarea, 'soft');
+ }else{
+ setWrap(textarea, 'off');
+ }
+
+ DokuCookie.setValue('wrapCtl',textarea.getAttribute('wrap'));
+}
+
+/**
+ * Set the wrapping mode of a textarea
+ *
+ * @author Fluffy Convict <fluffyconvict@hotmail.com>
+ * @author <shutdown@flashmail.com>
+ * @link http://news.hping.org/comp.lang.javascript.archive/12265.html
+ * @link https://bugzilla.mozilla.org/show_bug.cgi?id=41464
+ */
+function setWrap(textarea, wrapAttrValue){
+ textarea.setAttribute('wrap', wrapAttrValue);
+
+ // Fix display for mozilla
+ var parNod = textarea.parentNode;
+ var nxtSib = textarea.nextSibling;
+ parNod.removeChild(textarea);
+ parNod.insertBefore(textarea, nxtSib);
+}
+
+/**
+ * Handler to close all open Popups
+ */
+function closePopups(){
+ if(!document.getElementById){ return; }
+
+ var divs = document.getElementsByTagName('div');
+ for(var i=0; i < divs.length; i++){
+ if(divs[i].className.indexOf('JSpopup') != -1){
+ divs[i].style.display = 'none';
+ }
+ }
+}
+
+/**
+ * Looks for an element with the ID scroll__here at scrolls to it
+ */
+function scrollToMarker(){
+ var obj = DOKUid('scroll__here');
+ if(obj) obj.scrollIntoView();
+}
+
+/**
+ * Looks for an element with the ID focus__this at sets focus to it
+ */
+function focusMarker(){
+ var obj = DOKUid('focus__this');
+ if(obj) obj.focus();
+}
+
+/**
+ * Remove messages
+ */
+function cleanMsgArea(){
+ var elems = getElementsByClass('(success|info|error)',document,'div');
+ if(elems){
+ for(var i=0; i<elems.length; i++){
+ elems[i].style.display = 'none';
+ }
+ }
+}
+
+/**
+ * disable multiple revisions checkboxes if two are checked
+ *
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+addInitEvent(function(){
+ var revForm = DOKUid('page__revisions');
+ if (!revForm) return;
+ var elems = revForm.elements;
+ var countTicks = 0;
+ for (var i=0; i<elems.length; i++) {
+ var input1 = elems[i];
+ if (input1.type=='checkbox') {
+ addEvent(input1,'click',function(e){
+ if (this.checked) countTicks++;
+ else countTicks--;
+ for (var j=0; j<elems.length; j++) {
+ var input2 = elems[j];
+ if (countTicks >= 2) input2.disabled = (input2.type=='checkbox' && !input2.checked);
+ else input2.disabled = (input2.type!='checkbox');
+ }
+ });
+ input1.checked = false; // chrome reselects on back button which messes up the logic
+ } else if(input1.type=='submit'){
+ input1.disabled = true;
+ }
+ }
+});
+
+/**
+ * Add the event handler to the actiondropdown
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+addInitEvent(function(){
+ var selector = DOKUid('action__selector');
+ if(!selector) return;
+
+ addEvent(selector,'change',function(e){
+ this.form.submit();
+ });
+
+ DOKUid('action__selectorbtn').style.display = 'none';
+});
+
+/**
+ * Display error for Windows Shares on browsers other than IE
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function checkWindowsShares() {
+ if(!LANG['nosmblinks']) return true;
+ var elems = getElementsByClass('windows',document,'a');
+ if(elems){
+ for(var i=0; i<elems.length; i++){
+ var share = elems[i];
+ addEvent(share,'click',function(){
+ if(document.all == null) {
+ alert(LANG['nosmblinks']);
+ }
+ });
+ }
+ }
+}
+
+/**
+ * Add the event handler for the Windows Shares check
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+addInitEvent(function(){
+ checkWindowsShares();
+});
+
+/**
+ * Highlight the section when hovering over the appropriate section edit button
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+addInitEvent(function(){
+ var break_classes = new RegExp('secedit|toc|page');
+ var btns = getElementsByClass('btn_secedit',document,'form');
+ for(var i=0; i<btns.length; i++){
+ addEvent(btns[i],'mouseover',function(e){
+ var tgt = e.target;
+ if(tgt.form) tgt = tgt.form;
+ tgt = tgt.parentNode.previousSibling;
+ if(tgt.nodeName != "DIV") tgt = tgt.previousSibling;
+ while(!break_classes.test(tgt.className)) {
+ tgt.className += ' section_highlight';
+ if (tgt.tagName == 'H1') break;
+ tgt = (tgt.previousSibling != null) ? tgt.previousSibling : tgt.parentNode;
+ }
+ });
+
+ addEvent(btns[i],'mouseout',function(e){
+ var secs = getElementsByClass('section_highlight');
+ for(var j=0; j<secs.length; j++){
+ secs[j].className = secs[j].className.replace(/section_highlight/,'');
+ }
+ var secs = getElementsByClass('section_highlight');
+ });
+ }
+});
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js
new file mode 100644
index 000000000..39dd4cc41
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js
@@ -0,0 +1,226 @@
+/**
+ * Text selection related functions.
+ */
+
+/**
+ * selection prototype
+ *
+ * Object that capsulates the selection in a textarea. Returned by getSelection.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function selection_class(){
+ this.start = 0;
+ this.end = 0;
+ this.obj = null;
+ this.rangeCopy = null;
+ this.scroll = 0;
+ this.fix = 0;
+
+ this.getLength = function(){
+ return this.end - this.start;
+ };
+
+ this.getText = function(){
+ if(!this.obj) return '';
+ return this.obj.value.substring(this.start,this.end);
+ }
+}
+
+/**
+ * Get current selection/cursor position in a given textArea
+ *
+ * @link http://groups.drupal.org/node/1210
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @link http://linebyline.blogspot.com/2006/11/textarea-cursor-position-in-internet.html
+ * @returns object - a selection object
+ */
+function getSelection(textArea) {
+ var sel = new selection_class();
+
+ sel.obj = textArea;
+ sel.start = textArea.value.length;
+ sel.end = textArea.value.length;
+
+ textArea.focus();
+ if(document.getSelection) { // Mozilla et al.
+ sel.start = textArea.selectionStart;
+ sel.end = textArea.selectionEnd;
+ sel.scroll = textArea.scrollTop;
+ } else if(document.selection) { // MSIE
+ /*
+ * This huge lump of code is neccessary to work around two MSIE bugs:
+ *
+ * 1. Selections trim newlines at the end of the code
+ * 2. Selections count newlines as two characters
+ */
+
+ // The current selection
+ sel.rangeCopy = document.selection.createRange().duplicate();
+
+ var before_range = document.body.createTextRange();
+ before_range.moveToElementText(textArea); // Selects all the text
+ before_range.setEndPoint("EndToStart", sel.rangeCopy); // Moves the end where we need it
+
+ var before_finished = false, selection_finished = false;
+ var before_text, selection_text;
+ // Load the text values we need to compare
+ before_text = before_range.text;
+ selection_text = sel.rangeCopy.text;
+
+ sel.start = before_text.length;
+ sel.end = sel.start + selection_text.length;
+
+ // Check each range for trimmed newlines by shrinking the range by 1 character and seeing
+ // if the text property has changed. If it has not changed then we know that IE has trimmed
+ // a \r\n from the end.
+ do {
+ if (!before_finished) {
+ if (before_range.compareEndPoints("StartToEnd", before_range) == 0) {
+ before_finished = true;
+ } else {
+ before_range.moveEnd("character", -1);
+ if (before_range.text == before_text) {
+ sel.start += 2;
+ sel.end += 2;
+ } else {
+ before_finished = true;
+ }
+ }
+ }
+ if (!selection_finished) {
+ if (sel.rangeCopy.compareEndPoints("StartToEnd", sel.rangeCopy) == 0) {
+ selection_finished = true;
+ } else {
+ sel.rangeCopy.moveEnd("character", -1);
+ if (sel.rangeCopy.text == selection_text) {
+ sel.end += 2;
+ } else {
+ selection_finished = true;
+ }
+ }
+ }
+ } while ((!before_finished || !selection_finished));
+
+
+ // count number of newlines in str to work around stupid IE selection bug
+ var countNL = function(str) {
+ var m = str.split("\r\n");
+ if (!m || !m.length) return 0;
+ return m.length-1;
+ };
+ sel.fix = countNL(sel.obj.value.substring(0,sel.start));
+
+ }
+ return sel;
+}
+
+/**
+ * Set the selection
+ *
+ * You need to get a selection object via getSelection() first, then modify the
+ * start and end properties and pass it back to this function.
+ *
+ * @link http://groups.drupal.org/node/1210
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param object selection - a selection object as returned by getSelection()
+ */
+function setSelection(selection){
+ if(document.getSelection){ // FF
+ // what a pleasure in FF ;)
+ selection.obj.setSelectionRange(selection.start,selection.end);
+ if(selection.scroll) selection.obj.scrollTop = selection.scroll;
+ } else if(document.selection) { // IE
+ selection.rangeCopy.collapse(true);
+ selection.rangeCopy.moveStart('character',selection.start - selection.fix);
+ selection.rangeCopy.moveEnd('character',selection.end - selection.start);
+ selection.rangeCopy.select();
+ }
+}
+
+/**
+ * Inserts the given text at the current cursor position or replaces the current
+ * selection
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @param string text - the new text to be pasted
+ * @param objct selecttion - selection object returned by getSelection
+ * @param int opts.startofs - number of charcters at the start to skip from new selection
+ * @param int opts.endofs - number of characters at the end to skip from new selection
+ * @param bool opts.nosel - set true if new text should not be selected
+ */
+function pasteText(selection,text,opts){
+ if(!opts) opts = {};
+ // replace the content
+
+ selection.obj.value =
+ selection.obj.value.substring(0, selection.start) + text +
+ selection.obj.value.substring(selection.end, selection.obj.value.length);
+
+ // set new selection
+ selection.end = selection.start + text.length;
+
+ // modify the new selection if wanted
+ if(opts.startofs) selection.start += opts.startofs;
+ if(opts.endofs) selection.end -= opts.endofs;
+
+ // no selection wanted? set cursor to end position
+ if(opts.nosel) selection.start = selection.end;
+
+ setSelection(selection);
+}
+
+
+/**
+ * Format selection
+ *
+ * Apply tagOpen/tagClose to selection in textarea, use sampleText instead
+ * of selection if there is none.
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function insertTags(textAreaID, tagOpen, tagClose, sampleText){
+ var txtarea = DOKUid(textAreaID);
+
+ var selection = getSelection(txtarea);
+ var text = selection.getText();
+ var opts;
+
+ // don't include trailing space in selection
+ if(text.charAt(text.length - 1) == ' '){
+ selection.end--;
+ text = selection.getText();
+ }
+
+ if(!text){
+ // nothing selected, use the sample text and select it
+ text = sampleText;
+ opts = {
+ startofs: tagOpen.length,
+ endofs: tagClose.length
+ };
+ }else{
+ // place cursor at the end
+ opts = {
+ nosel: true
+ };
+ }
+
+ // surround with tags
+ text = tagOpen + text + tagClose;
+
+ // do it
+ pasteText(selection,text,opts);
+}
+
+/**
+ * Wraps around pasteText() for backward compatibility
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function insertAtCarret(textAreaID, text){
+ var txtarea = DOKUid(textAreaID);
+ var selection = getSelection(txtarea);
+ pasteText(selection,text,{nosel: true});
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js
new file mode 100644
index 000000000..d9633ef2d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js
@@ -0,0 +1,252 @@
+
+// used to identify pickers
+var pickercounter=0;
+
+/**
+ * Create a toolbar
+ *
+ * @param string tbid ID of the element where to insert the toolbar
+ * @param string edid ID of the editor textarea
+ * @param array tb Associative array defining the buttons
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function initToolbar(tbid,edid,tb){
+ var toolbar = DOKUid(tbid);
+ if(!toolbar) return;
+ var edit = DOKUid(edid);
+ if(!edit) return;
+ if(edit.readOnly) return;
+
+ //empty the toolbar area:
+ toolbar.innerHTML='';
+
+ var cnt = tb.length;
+ for(var i=0; i<cnt; i++){
+ var actionFunc;
+
+ // create new button
+ var btn = createToolButton(tb[i]['icon'],
+ tb[i]['title'],
+ tb[i]['key']);
+
+
+ // type is a tb function -> assign it as onclick
+ actionFunc = 'tb_'+tb[i]['type'];
+ if( isFunction(window[actionFunc]) ){
+ addEvent(btn,'click', bind(window[actionFunc],btn,tb[i],edid));
+ toolbar.appendChild(btn);
+ continue;
+ }
+
+ // type is a init function -> execute it
+ actionFunc = 'addBtnAction'+tb[i]['type'].charAt(0).toUpperCase()+tb[i]['type'].substring(1);
+ if( isFunction(window[actionFunc]) ){
+ if(window[actionFunc](btn, tb[i], edid)){
+ toolbar.appendChild(btn);
+ }
+ continue;
+ }
+
+ alert('unknown toolbar type: '+tb[i]['type']+' '+actionFunc);
+ } // end for
+
+}
+
+/**
+ * Button action for format buttons
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_format(btn, props, edid) {
+ var sample = props['title'];
+ if(props['sample']){
+ sample = props['sample'];
+ }
+ insertTags(edid,
+ fixtxt(props['open']),
+ fixtxt(props['close']),
+ fixtxt(sample));
+ pickerClose();
+ return false;
+}
+
+/**
+ * Button action for format buttons
+ *
+ * This works exactly as tb_format() except that, if multiple lines
+ * are selected, each line will be formatted seperately
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_formatln(btn, props, edid) {
+ var sample = props['title'];
+ if(props['sample']){
+ sample = props['sample'];
+ }
+ sample = fixtxt(sample);
+
+ props['open'] = fixtxt(props['open']);
+ props['close'] = fixtxt(props['close']);
+
+ // is something selected?
+ var opts;
+ var selection = getSelection(DOKUid(edid));
+ if(selection.getLength()){
+ sample = selection.getText();
+ opts = {nosel: true};
+ }else{
+ opts = {
+ startofs: props['open'].length,
+ endofs: props['close'].length
+ };
+ }
+
+ sample = sample.split("\n").join(props['close']+"\n"+props['open']);
+ sample = props['open']+sample+props['close'];
+
+ pasteText(selection,sample,opts);
+
+ pickerClose();
+ return false;
+}
+
+/**
+ * Button action for insert buttons
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Gabriel Birke <birke@d-scribe.de>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_insert(btn, props, edid) {
+ insertAtCarret(edid,fixtxt(props['insert']));
+ pickerClose();
+ return false;
+}
+
+/**
+ * Button action for the media popup
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_mediapopup(btn, props, edid) {
+ window.open(
+ DOKU_BASE+props['url']+encodeURIComponent(NS),
+ props['name'],
+ props['options']);
+ return false;
+}
+
+/**
+ * Button action for automatic headlines
+ *
+ * Insert a new headline based on the current section level
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function tb_autohead(btn, props, edid){
+ var lvl = currentHeadlineLevel(edid);
+
+ // determine new level
+ lvl += props['mod'];
+ if(lvl < 1) lvl = 1;
+ if(lvl > 5) lvl = 5;
+
+ var tags = '=';
+ for(var i=0; i<=5-lvl; i++) tags += '=';
+ insertTags(edid, tags+' ', ' '+tags+"\n", props['text']);
+ pickerClose();
+ return false;
+}
+
+
+/**
+ * Add button action for picker buttons and create picker element
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @return boolean If button should be appended
+ * @author Gabriel Birke <birke@d-scribe.de>
+ */
+function addBtnActionPicker(btn, props, edid) {
+ var pickerid = 'picker'+(pickercounter++);
+ createPicker(pickerid, props, edid);
+ addEvent(btn,'click',function(){
+ pickerToggle(pickerid,btn);
+ return false;
+ });
+ return true;
+}
+
+/**
+ * Add button action for the link wizard button
+ *
+ * @param DOMElement btn Button element to add the action to
+ * @param array props Associative array of button properties
+ * @param string edid ID of the editor textarea
+ * @return boolean If button should be appended
+ * @author Andreas Gohr <gohr@cosmocode.de>
+ */
+function addBtnActionLinkwiz(btn, props, edid) {
+ linkwiz.init(DOKUid(edid));
+ addEvent(btn,'click',function(){
+ linkwiz.toggle();
+ return false;
+ });
+ return true;
+}
+
+/**
+ * Show/Hide a previosly created picker window
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pickerToggle(pickerid,btn){
+ var picker = DOKUid(pickerid);
+ if(picker.style.marginLeft == '-10000px'){
+ var x = findPosX(btn);
+ var y = findPosY(btn);
+ picker.style.left = (x+3)+'px';
+ picker.style.top = (y+btn.offsetHeight+3)+'px';
+ picker.style.marginLeft = '0px';
+ }else{
+ picker.style.marginLeft = '-10000px';
+ }
+}
+
+/**
+ * Close all open pickers
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+function pickerClose(){
+ var pobjs = getElementsByClass('picker');
+ for(var i=0; i<pobjs.length; i++){
+ pobjs[i].style.marginLeft = '-10000px';
+ }
+}
+
+
+/**
+ * Replaces \n with linebreaks
+ */
+function fixtxt(str){
+ return str.replace(/\\n/g,"\n");
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js
new file mode 100644
index 000000000..cfcbe0ea9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js
@@ -0,0 +1,136 @@
+/* Simple AJAX Code-Kit (SACK) */
+/* ©2005 Gregory Wild-Smith */
+/* www.twilightuniverse.com */
+/* Software licenced under a modified X11 licence, see documentation or authors website for more details */
+
+function sack(file){
+ this.AjaxFailedAlert = "Your browser does not support the enhanced functionality of this website, and therefore you will have an experience that differs from the intended one.\n";
+ this.requestFile = file;
+ this.method = "POST";
+ this.URLString = "";
+ this.encodeURIString = true;
+ this.execute = false;
+
+ this.onLoading = function() { };
+ this.onLoaded = function() { };
+ this.onInteractive = function() { };
+ this.onCompletion = function() { };
+ this.afterCompletion = function() { };
+
+ this.createAJAX = function() {
+ try {
+ this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e) {
+ try {
+ this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+ } catch (err) {
+ this.xmlhttp = null;
+ }
+ }
+ if(!this.xmlhttp && typeof XMLHttpRequest != "undefined"){
+ this.xmlhttp = new XMLHttpRequest();
+ }
+ if (!this.xmlhttp){
+ this.failed = true;
+ }
+ };
+
+ this.setVar = function(name, value){
+ if (this.URLString.length < 3){
+ this.URLString = name + "=" + value;
+ } else {
+ this.URLString += "&" + name + "=" + value;
+ }
+ };
+
+ this.encVar = function(name, value){
+ var varString = encodeURIComponent(name) + "=" + encodeURIComponent(value);
+ return varString;
+ };
+
+ this.encodeURLString = function(string){
+ varArray = string.split('&');
+ for (i = 0; i < varArray.length; i++){
+ urlVars = varArray[i].split('=');
+ if (urlVars[0].indexOf('amp;') != -1){
+ urlVars[0] = urlVars[0].substring(4);
+ }
+ varArray[i] = this.encVar(urlVars[0],urlVars[1]);
+ }
+ return varArray.join('&');
+ };
+
+ this.runResponse = function(){
+ eval(this.response);
+ };
+
+ this.runAJAX = function(urlstring){
+ this.responseStatus = new Array(2);
+ if(this.failed && this.AjaxFailedAlert){
+ alert(this.AjaxFailedAlert);
+ } else {
+ if (urlstring){
+ if (this.URLString.length){
+ this.URLString = this.URLString + "&" + urlstring;
+ } else {
+ this.URLString = urlstring;
+ }
+ }
+ if (this.encodeURIString){
+ var timeval = new Date().getTime();
+ this.URLString = this.encodeURLString(this.URLString);
+ this.setVar("rndval", timeval);
+ }
+ if (this.element) { this.elementObj = document.getElementById(this.element); }
+ if (this.xmlhttp) {
+ var self = this;
+ if (this.method == "GET") {
+ var totalurlstring = this.requestFile + "?" + this.URLString;
+ this.xmlhttp.open(this.method, totalurlstring, true);
+ } else {
+ this.xmlhttp.open(this.method, this.requestFile, true);
+ }
+ if (this.method == "POST"){
+ try {
+ this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
+ } catch (e) {}
+ }
+
+ this.xmlhttp.onreadystatechange = function() {
+ switch (self.xmlhttp.readyState){
+ case 1:
+ self.onLoading();
+ break;
+ case 2:
+ self.onLoaded();
+ break;
+ case 3:
+ self.onInteractive();
+ break;
+ case 4:
+ self.response = self.xmlhttp.responseText;
+ self.responseXML = self.xmlhttp.responseXML;
+ self.responseStatus[0] = self.xmlhttp.status;
+ self.responseStatus[1] = self.xmlhttp.statusText;
+ self.onCompletion();
+ if(self.execute){ self.runResponse(); }
+ if (self.elementObj) {
+ var elemNodeName = self.elementObj.nodeName;
+ elemNodeName.toLowerCase();
+ if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea"){
+ self.elementObj.value = self.response;
+ } else {
+ self.elementObj.innerHTML = self.response;
+ }
+ }
+ self.afterCompletion();
+ self.URLString = "";
+ break;
+ }
+ };
+ this.xmlhttp.send(this.URLString);
+ }
+ }
+ };
+this.createAJAX();
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css b/mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css
new file mode 100644
index 000000000..44b72d770
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css
@@ -0,0 +1,63 @@
+rss channel, feed, RDF {
+ font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: __background__;
+ color: __text__;
+ margin: 0;
+ padding: 0;
+}
+
+
+link, description, language, managingEditor, copyright, lastBuildDate, date,
+pubDate, generator, webMaster, ttl, docs, tagline, author, copyright,
+generator, content, created, issued, modified, subject, id, format, creator,
+category, image {
+ display: none;
+}
+
+item link, entry id {
+ display: block;
+ color: __extern__;
+ text-decoration: underline;
+}
+
+channel title, feed title {
+ display: block;
+ font-size: 200%;
+ font-weight: bolder;
+ color: __extern__;
+ text-decoration: none;
+ border-bottom: 20px solid __background_alt__;
+}
+
+:root:before {
+ content: "This data file is meant to be read in a XML feed reader. See document source."
+}
+
+item, entry {
+ display: block;
+ margin: 1em 180px 1em 1em;
+ border-bottom: 1px solid __border__;
+ padding-bottom: 1em;
+}
+
+item title, entry title {
+ display: block;
+ background: transparent none;
+ border: 0px solid __background_other__;
+ padding: 0;
+ color: __text_alt__;
+ font-size: 1.4em;
+ font-weight: bold;
+}
+
+item pubDate, entry modified, item date {
+ display: inline;
+ color: __text_neu__;
+ font: 1em trebuchet ms, arial, helvetica, sans-serif;
+}
+
+item description, entry summary {
+ display: block;
+ clear: both;
+ padding-top: 0.5em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html
new file mode 100644
index 000000000..d614603ac
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html
@@ -0,0 +1,12 @@
+<!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>
+<meta http-equiv="refresh" content="0; URL=../../" />
+<meta name="robots" content="noindex" />
+<title>nothing here...</title>
+</head>
+<body>
+<!-- this is just here to prevent directory browsing -->
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css
new file mode 100644
index 000000000..814191615
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css
@@ -0,0 +1,113 @@
+/**
+ * Basic styles. These styles are needed for basic DokuWiki functions
+ * regardless of the used template. Templates can override them of course
+ */
+
+div.clearer {
+ clear: both;
+ line-height: 0;
+ height: 0;
+ overflow: hidden;
+}
+
+div.no {
+ display: inline;
+ margin: 0;
+ padding: 0;
+}
+
+.hidden {
+ display: none;
+}
+
+div.error {
+ background: #fcc url(../images/error.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #faa;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+div.info {
+ background: #ccf url(../images/info.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #aaf;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+div.success {
+ background: #cfc url(../images/success.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #afa;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+div.notify {
+ background: #ffc url(../images/notify.png) 0.5em 0px no-repeat;
+ color: #000;
+ border-bottom: 1px solid #ffa;
+ font-size: 90%;
+ margin: 0;
+ padding-left: 3em;
+ overflow: hidden;
+}
+
+
+/* image alignment */
+.medialeft {
+ float: left;
+}
+.mediaright {
+ float: right;
+}
+.mediacenter {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.leftalign { text-align: left; }
+.centeralign { text-align: center; }
+.rightalign { text-align: right; }
+
+em.u {
+ font-style: normal;
+ text-decoration: underline;
+}
+em em.u {
+ font-style: italic;
+}
+
+
+/* syntax highlighting code */
+.code .br0 { color: #66cc66; }
+.code .co0 { color: #808080; font-style: italic; }
+.code .co1 { color: #808080; font-style: italic; }
+.code .co2 { color: #808080; font-style: italic; }
+.code .co3 { color: #808080; }
+.code .coMULTI { color: #808080; font-style: italic; }
+.code .es0 { color: #000099; font-weight: bold; }
+.code .kw1 { color: #b1b100; }
+.code .kw2 { color: #000000; font-weight: bold; }
+.code .kw3 { color: #000066; }
+.code .kw4 { color: #993333; }
+.code .kw5 { color: #0000ff; }
+.code .me1 { color: #006600; }
+.code .me2 { color: #006600; }
+.code .nu0 { color: #cc66cc; }
+.code .re0 { color: #0000ff; }
+.code .re1 { color: #0000ff; }
+.code .re2 { color: #0000ff; }
+.code .re3 { color: #ff3333; font-weight:bold; }
+.code .re4 { color: #009999; }
+.code .st0 { color: #ff0000; }
+.code .sy0 { color: #66cc66; }
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php
new file mode 100644
index 000000000..37a6110ec
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php
@@ -0,0 +1,8 @@
+<?php
+// sidebar configuration settings
+$conf['enable'] = 1; // 1 or true to enable sidebar functionality, 0 or false to disable it
+$conf['page'] = 'sidebar'; // name of sidebar page
+$conf['layout'] = 'inside'; // inside (between button bars) or outside (full height of dokuwiki)
+$conf['orientation'] = 'left'; // left or right
+$conf['showeditbtn'] = 1; // show a sidebar edit button IF USER HAS EDIT PERMISSION FOR SIDEBAR
+$conf['editbtntxt'] = 'edit sidebar';
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php
new file mode 100644
index 000000000..f37e32c60
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php
@@ -0,0 +1,9 @@
+<?php
+// sidebar configuration settings
+$meta['enable'] = array('onoff');
+$meta['page'] = array('string');
+$meta['layout'] = array('multichoice', '_choices' => array('inside','outside'));
+$meta['orientation'] = array('multichoice', '_choices' => array('left','right'));
+//$meta['showeditbtn'] = array('onoff');
+//$meta['editbtntxt'] = array('string');
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css
new file mode 100644
index 000000000..2611daad0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css
@@ -0,0 +1,796 @@
+/**
+ * Design elements for default Template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+
+/* -------------- general elements --------------- */
+
+* { padding: 0; margin: 0; }
+
+/*body {
+ font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: __background__;
+ color: __text__;
+}*/
+
+/* the document */
+div.dokuwiki div.page {
+ margin: 4px 2em 0 1em;
+ text-align: justify;
+}
+
+div.dokuwiki table {
+ font-size: 100%;
+}
+
+div.dokuwiki tr,
+div.dokuwiki td,
+div.dokuwiki th {
+}
+
+div.dokuwiki img {
+ border: 0;
+}
+
+div.dokuwiki p,
+div.dokuwiki blockquote,
+div.dokuwiki table,
+div.dokuwiki pre {
+ margin: 0 0 1.0em 0;
+}
+
+div.dokuwiki hr {
+ border: 0px;
+ border-top: 1px solid __border__;
+ text-align: center;
+ height: 0px;
+}
+
+div.dokuwiki div.nothing {
+ text-align: center;
+ margin: 2em;
+}
+
+/* ---------------- forms ------------------------ */
+
+div.dokuwiki form {
+ border: none;
+ display: inline;
+}
+
+div.dokuwiki label.block {
+ display: block;
+ text-align: right;
+ font-weight: bold;
+}
+
+div.dokuwiki label.simple {
+ display: block;
+ text-align: left;
+ font-weight: normal;
+}
+
+div.dokuwiki label.block input.edit {
+ width: 50%;
+}
+
+div.dokuwiki fieldset {
+ width: 300px;
+ text-align: center;
+ border: 1px solid __border__;
+ padding: 0.5em;
+ margin: auto;
+}
+
+div.dokuwiki textarea.edit {
+ font-family: monospace;
+ font-size: 14px;
+ color: __text__;
+ background-color: __background__;
+ border: 1px solid __border__;
+ padding: 0.3em 0 0 0.3em;
+ width: 100%;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki textarea.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki input.edit,
+div.dokuwiki select.edit {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.edit,
+html>body div.dokuwiki select.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki select.edit {
+ padding: 0.1em 0;
+}
+
+div.dokuwiki input.missing {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: #ffcccc;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* disabled style - not understood by IE */
+div.dokuwiki textarea.edit[disabled],
+div.dokuwiki textarea.edit[readonly],
+div.dokuwiki input.edit[disabled],
+div.dokuwiki input.edit[readonly],
+div.dokuwiki select.edit[disabled] {
+ background-color: __background_neu__!important;
+ color: __text_neu__!important;
+}
+
+/* edit form */
+div.dokuwiki div.toolbar,
+div.dokuwiki div#wiki__editbar {
+ margin: 2px 0;
+ text-align: left;
+}
+div.dokuwiki div#size__ctl {
+ float: right;
+ width: 60px;
+ height: 2.7em;
+}
+div.dokuwiki #size__ctl img {
+ cursor: pointer;
+}
+div.dokuwiki div#wiki__editbar div.editButtons {
+ float: left;
+ padding: 0 1.0em 0.7em 0;
+}
+div.dokuwiki div#wiki__editbar div.summary {
+ float: left;
+}
+div.dokuwiki .nowrap {
+ white-space: nowrap;
+}
+div.dokuwiki div#draft__status {
+ float: right;
+ color: __text_alt__;
+}
+
+div.dokuwiki form#dw__editform div.license {
+ clear: left;
+ font-size: 90%;
+}
+
+div.dokuwiki p.license {
+ font-size: 90%;
+ text-align: center;
+}
+
+/* --------- buttons ------------------- */
+
+div.dokuwiki input.button,
+div.dokuwiki button.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ font-size: 100%;
+ cursor: pointer;
+ margin: 1px;
+ padding: 0.125em 0.4em;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.button,
+html>body div.dokuwiki button.button {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+* html div.dokuwiki input.button,
+* html div.dokuwiki button.button {
+ height: 1.8em;
+}
+
+div.dokuwiki div.secedit input.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+ font-size: 10px;
+ cursor: pointer;
+ float: right;
+ display: inline;
+}
+
+/* ----------- page navigator ------------- */
+
+div.dokuwiki div.pagenav {
+ margin: 1em 0 0 0;
+}
+
+div.dokuwiki div.pagenav-prev {
+ text-align: right;
+ float: left;
+ width: 49%
+}
+
+div.dokuwiki div.pagenav-next {
+ text-align: left;
+ float: right;
+ width: 49%
+}
+
+/* --------------- Links ------------------ */
+
+div.dokuwiki a:link,
+div.dokuwiki a:visited {
+ color: __extern__;
+ text-decoration: none;
+}
+div.dokuwiki a:hover,
+div.dokuwiki a:active {
+ color: __text__;
+ text-decoration: underline;
+}
+
+div.dokuwiki h1 a,
+div.dokuwiki h2 a,
+div.dokuwiki h3 a,
+div.dokuwiki h4 a,
+div.dokuwiki h5 a,
+div.dokuwiki a.nolink {
+ color: __text__ !important;
+ text-decoration: none !important;
+}
+
+/* external link */
+div.dokuwiki a.urlextern {
+ background: transparent url(images/link_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* windows share */
+div.dokuwiki a.windows {
+ background: transparent url(images/windows.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* interwiki link (icon are set by dokuwiki) */
+div.dokuwiki a.interwiki {
+}
+
+/* link to some embedded media */
+div.dokuwiki a.media {
+}
+
+div.dokuwiki a.urlextern:link,
+div.dokuwiki a.windows:link,
+div.dokuwiki a.interwiki:link {
+ color: __extern__;
+}
+
+div.dokuwiki a.urlextern:visited,
+div.dokuwiki a.windows:visited,
+div.dokuwiki a.interwiki:visited {
+ color: purple;
+}
+div.dokuwiki a.urlextern:hover,
+div.dokuwiki a.urlextern:active,
+div.dokuwiki a.windows:hover,
+div.dokuwiki a.windows:active,
+div.dokuwiki a.interwiki:hover,
+div.dokuwiki a.interwiki:active {
+ color: __text__;
+}
+
+/* email link */
+div.dokuwiki a.mail {
+ background: transparent url(images/mail_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* existing wikipage */
+div.dokuwiki a.wikilink1 {
+ color: __existing__ !important;
+}
+
+/* not existing wikipage */
+div.dokuwiki a.wikilink2 {
+ color: __missing__ !important;
+ text-decoration: none !important;
+ border-bottom: dashed 1px __missing__ !important;
+}
+
+/* ------------- Page elements ----------------- */
+
+div.dokuwiki div.preview {
+ background-color: __background_neu__;
+ margin: 0 0 0 2em;
+ padding: 4px;
+ border: 1px dashed __text__;
+}
+
+div.dokuwiki div.breadcrumbs {
+ background-color: __background_neu__;
+ color: __text_neu__;
+ font-size: 80%;
+ padding: 0 0 0 4px;
+}
+
+div.dokuwiki span.user {
+ color: __text_other__;
+ font-size: 90%;
+}
+
+div.dokuwiki li.minor {
+ color: __text_neu__;
+ font-style: italic;
+}
+
+/* embedded images */
+div.dokuwiki img.media {
+ margin: 3px;
+}
+
+div.dokuwiki img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+div.dokuwiki img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+div.dokuwiki img.mediacenter {
+ border: 0;
+ display: block;
+ margin: 0 auto;
+}
+
+/* smileys */
+div.dokuwiki img.middle {
+ vertical-align: middle;
+}
+
+div.dokuwiki acronym {
+ cursor: help;
+ border-bottom: 1px dotted __text__;
+}
+
+/* general headline setup */
+div.dokuwiki h1,
+div.dokuwiki h2,
+div.dokuwiki h3,
+div.dokuwiki h4,
+div.dokuwiki h5 {
+ color: __text__;
+ background-color: inherit;
+ font-size: 100%;
+ font-weight: normal;
+ margin: 0 0 1em 0;
+ padding: 0.5em 0 0 0;
+ border-bottom: 1px solid __border__;
+ clear: left;
+}
+
+/* special headlines */
+div.dokuwiki h1 {font-size: 160%; margin-left: 0px; font-weight: bold;}
+div.dokuwiki h2 {font-size: 150%; margin-left: 20px;}
+div.dokuwiki h3 {font-size: 140%; margin-left: 40px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h4 {font-size: 120%; margin-left: 60px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h5 {font-size: 100%; margin-left: 80px; border-bottom: none; font-weight: bold;}
+
+/* indent different sections */
+div.dokuwiki div.level1 {margin-left: 3px;}
+div.dokuwiki div.level2 {margin-left: 23px;}
+div.dokuwiki div.level3 {margin-left: 43px;}
+div.dokuwiki div.level4 {margin-left: 63px;}
+div.dokuwiki div.level5 {margin-left: 83px;}
+
+/* unordered lists */
+div.dokuwiki ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+}
+
+/* ordered lists */
+div.dokuwiki ol {
+ line-height: 1.5em;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+ font-weight: bold;
+}
+
+/* no gap in between nested lists */
+div.dokuwiki li ul {
+ margin-bottom: 0;
+}
+div.dokuwiki li ol {
+ margin-bottom: 0;
+}
+
+/* the list items overriding the ul/ol definition */
+div.dokuwiki .li {
+ color: __text__;
+ font-weight: normal;
+}
+
+div.dokuwiki ol {list-style-type: decimal}
+div.dokuwiki ol ol {list-style-type: upper-roman}
+div.dokuwiki ol ol ol {list-style-type: lower-alpha}
+div.dokuwiki ol ol ol ol {list-style-type: lower-greek}
+
+div.dokuwiki li.open {
+ list-style-image: url(images/open.gif);
+ /*list-style-type: circle;*/
+}
+
+div.dokuwiki li.closed {
+ list-style-image: url(images/closed.gif);
+ /*list-style-type: disc;*/
+}
+
+div.dokuwiki blockquote {
+ border-left: 2px solid __border__;
+ padding-left: 3px;
+}
+
+div.dokuwiki pre {
+ font-size: 120%;
+ padding: 0.5em;
+ border: 1px dashed __border__;
+ color: __text__;
+ overflow: auto;
+}
+
+/* code blocks by indention */
+div.dokuwiki pre.pre {
+ background-color: __background_other__;
+}
+
+/* code blocks by code tag */
+div.dokuwiki pre.code {
+ background-color: __background_other__;
+}
+
+/* inline code words */
+div.dokuwiki code {
+ font-size: 120%;
+}
+
+/* code blocks by file tag */
+div.dokuwiki pre.file {
+ background-color: __background_alt__;
+}
+
+/* inline tables */
+div.dokuwiki table.inline {
+ background-color: __background__;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+div.dokuwiki table.inline th {
+ padding: 3px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+div.dokuwiki table.inline td {
+ padding: 3px;
+ border: 1px solid __border__;
+}
+
+/* ---------- table of contents ------------------- */
+
+div.dokuwiki div.toc {
+ margin: 1.2em 0 0 2em;
+ float: right;
+ width: 200px;
+ font-size: 80%;
+ clear: both;
+}
+
+div.dokuwiki div.tocheader {
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+ text-align: left;
+ font-weight: bold;
+ padding: 3px;
+ margin-bottom: 2px;
+}
+
+div.dokuwiki span.toc_open,
+div.dokuwiki span.toc_close {
+ border: 0.4em solid __background_alt__;
+ float: right;
+ display: block;
+ margin: 0.4em 3px 0 0;
+}
+
+div.dokuwiki span.toc_open span,
+div.dokuwiki span.toc_close span {
+ display: none;
+}
+
+div.dokuwiki span.toc_open {
+ margin-top: 0.4em;
+ border-top: 0.4em solid __text__;
+}
+
+div.dokuwiki span.toc_close {
+ margin-top: 0;
+ border-bottom: 0.4em solid __text__;
+}
+
+div.dokuwiki #toc__inside {
+ border: 1px solid __border__;
+ background-color: __background__;
+ text-align: left;
+ padding: 0.5em 0 0.7em 0;
+}
+
+div.dokuwiki ul.toc {
+ list-style-type: none;
+ list-style-image: none;
+ line-height: 1.2em;
+ padding-left: 1em;
+ margin: 0;
+}
+
+div.dokuwiki ul.toc li {
+ background: transparent url(images/tocdot2.gif) 0 0.6em no-repeat;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki ul.toc li.clear {
+ background-image: none;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki a.toc:link,
+div.dokuwiki a.toc:visited {
+ color: __extern__;
+}
+
+div.dokuwiki a.toc:hover,
+div.dokuwiki a.toc:active {
+ color: __text__;
+}
+
+/* ---------------------------- Diff rendering --------------------------*/
+div.dokuwiki table.diff {
+ background-color: __background__;
+ width: 100%;
+}
+div.dokuwiki td.diff-blockheader {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th {
+ border-bottom: 1px solid __border__;
+ font-size: 110%;
+ width: 50%;
+ font-weight: normal;
+ text-align: left;
+}
+div.dokuwiki table.diff th a {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th span.user {
+ color: __text__;
+ font-size: 80%;
+}
+div.dokuwiki table.diff th span.sum {
+ font-size: 80%;
+ font-weight: bold;
+}
+div.dokuwiki table.diff th.minor {
+ font-style: italic;
+}
+div.dokuwiki table.diff td {
+ font-family: monospace;
+ font-size: 100%;
+}
+div.dokuwiki td.diff-addedline {
+ background-color: #ddffdd;
+}
+div.dokuwiki td.diff-deletedline {
+ background-color: #ffffbb;
+}
+div.dokuwiki td.diff-context {
+ background-color: __background_neu__;
+}
+div.dokuwiki table.diff td.diff-addedline strong,
+div.dokuwiki table.diff td.diff-deletedline strong {
+ color: red;
+}
+
+/* --------------------- footnotes -------------------------------- */
+
+div.dokuwiki div.footnotes {
+ clear: both;
+ border-top: 1px solid __border__;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.dokuwiki div.fn {
+ font-size: 90%;
+}
+
+div.dokuwiki a.fn_bot {
+ font-weight: bold;
+}
+
+/* insitu-footnotes */
+div.insitu-footnote {
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+ max-width: 40%; /* IE's width is handled in javascript */
+}
+
+/* overcome IE issue with one line code or file boxes which require h. scrolling */
+* html .insitu-footnote pre.code,
+* html .insitu-footnote pre.file {
+ padding-bottom: 18px;
+}
+
+/* --------------- search result formating --------------- */
+div.dokuwiki .search_result {
+ margin-bottom: 6px;
+ padding: 0 10px 0 30px;
+}
+
+div.dokuwiki .search_snippet {
+ color: __text_other__;
+ font-size: 12px;
+ margin-left: 20px;
+}
+
+div.dokuwiki .search_sep {
+ color: __text__;
+}
+
+div.dokuwiki .search_hit {
+ color: __text__;
+ background-color: __highlight__;
+}
+div.dokuwiki strong.search_hit {
+ font-weight: normal;
+}
+
+div.dokuwiki div.search_quickresult {
+ margin: 0 0 15px 30px;
+ padding: 0 10px 10px 0;
+ border-bottom: 1px dashed __border__;
+}
+div.dokuwiki div.search_quickresult h3 {
+ margin: 0 0 1.0em 0;
+ font-size: 1em;
+ font-weight: bold;
+}
+
+div.dokuwiki ul.search_quickhits {
+ margin: 0 0 0.5em 1.0em;
+}
+
+div.dokuwiki ul.search_quickhits li {
+ margin: 0 1.0em 0 1.0em;
+ float:left;
+ width: 30%;
+}
+
+/* ------------------ Additional ---------------------- */
+
+div.footerinc {
+ text-align: center;
+}
+.footerinc a img {
+ opacity: 0.5;
+ border: 0;
+}
+
+.footerinc a:hover img {
+ opacity: 1;
+}
+
+/* ---------- AJAX quicksearch ----------- */
+
+div.dokuwiki div.ajax_qsearch {
+ position: absolute;
+ right: 237px;;
+ width: 200px;
+ opacity: 0.9;
+ display: none;
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+}
+
+/* --------- Toolbar -------------------- */
+button.toolbutton {
+ background-color: __background__;
+ padding: 0px;
+ margin: 0 1px 0 0;
+ border: 1px solid __border__;
+ cursor: pointer;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body button.toolbutton {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+div.picker {
+ width: 250px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+button.pickerbutton {
+ padding: 0px;
+ margin: 0 1px 1px 0;
+ border: 0;
+ background-color: transparent;
+ font-size: 80%;
+ cursor: pointer;
+}
+
+/* --------------- Image Details ----------------- */
+
+div.dokuwiki div.img_big {
+ float: left;
+ margin-right: 0.5em;
+}
+
+div.dokuwiki dl.img_tags dt {
+ font-weight: bold;
+ background-color: __background_alt__;
+}
+div.dokuwiki dl.img_tags dd {
+ background-color: __background_neu__;
+}
+
+div.dokuwiki div.imagemeta {
+ color: __text_neu__;
+ font-size: 70%;
+ line-height: 95%;
+}
+
+div.dokuwiki div.imagemeta img.thumb {
+ float:left;
+ margin-right: 0.1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php
new file mode 100644
index 000000000..765358568
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * DokuWiki Image Detail Template
+ *
+ * This is the template for displaying image details
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+?>
+<!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" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="page">
+ <?php if($ERROR){ print $ERROR; }else{ ?>
+
+ <h1><?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?></h1>
+
+ <div class="img_big">
+ <?php tpl_img(900,700) ?>
+ </div>
+
+ <div class="img_detail">
+ <p class="img_caption">
+ <?php print nl2br(hsc(tpl_img_getTag('simple.title'))); ?>
+ </p>
+
+ <p>&larr; <?php echo $lang['img_backto']?> <?php tpl_pagelink($ID)?></p>
+
+ <dl class="img_tags">
+ <?php
+ $t = tpl_img_getTag('Date.EarliestTime');
+ if($t) print '<dt>'.$lang['img_date'].':</dt><dd>'.strftime($conf['dformat'],$t).'</dd>';
+
+ $t = tpl_img_getTag('File.Name');
+ if($t) print '<dt>'.$lang['img_fname'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.Byline','Exif.TIFFArtist','Exif.Artist','Iptc.Credit'));
+ if($t) print '<dt>'.$lang['img_artist'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright'));
+ if($t) print '<dt>'.$lang['img_copyr'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.Format');
+ if($t) print '<dt>'.$lang['img_format'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.NiceSize');
+ if($t) print '<dt>'.$lang['img_fsize'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('Simple.Camera');
+ if($t) print '<dt>'.$lang['img_camera'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject'));
+ if($t) print '<dt>'.$lang['img_keywords'].':</dt><dd>'.hsc($t).'</dd>';
+
+ ?>
+ </dl>
+ <?php //Comment in for Debug// dbg(tpl_img_getTag('Simple.Raw'));?>
+ </div>
+
+ <?php } ?>
+ </div>
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html
new file mode 100644
index 000000000..38aab7216
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Example footer include
+ *
+ * This file shows you how to use the include hooks. However I recommend to
+ * create your own complete new template instead.
+ */
+
+$tgt = ($conf['target']['extern']) ? 'target="'.$conf['target']['extern'].'"' : '';
+?>
+
+<div class="footerinc">
+
+ <a <?php echo $tgt?> href="<?php echo DOKU_BASE; ?>feed.php" title="Recent changes RSS feed"><img src="<?php echo DOKU_TPL; ?>images/button-rss.png" width="80" height="15" alt="Recent changes RSS feed" /></a>
+
+ <?php
+ $lic = license_img('button');
+ if($lic){
+ ?>
+ <a <?php echo $tgt?> href="<?php echo $license[$conf['license']]['url']?>" rel="license" title="<?php echo $license[$conf['license']]['name']?>"><img src="<?php echo DOKU_BASE.$lic ?>" width="80" height="15" alt="" /></a>
+ <?php } ?>
+
+ <a <?php echo $tgt?> href="http://www.dokuwiki.org/donate" title="Donate"><img src="<?php echo DOKU_TPL; ?>images/button-donate.gif" alt="Donate" width="80" height="15" /></a>
+
+ <a <?php echo $tgt?> href="http://www.php.net" title="Powered by PHP"><img src="<?php echo DOKU_TPL; ?>images/button-php.gif" width="80" height="15" alt="Powered by PHP" /></a>
+
+ <a <?php echo $tgt?> href="http://validator.w3.org/check/referer" title="Valid XHTML 1.0"><img src="<?php echo DOKU_TPL; ?>images/button-xhtml.png" width="80" height="15" alt="Valid XHTML 1.0" /></a>
+
+ <a <?php echo $tgt?> href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3" title="Valid CSS"><img src="<?php echo DOKU_TPL; ?>images/button-css.png" width="80" height="15" alt="Valid CSS" /></a>
+
+ <a <?php echo $tgt?> href="http://dokuwiki.org/" title="Driven by DokuWiki"><img src="<?php echo DOKU_TPL; ?>images/button-dw.png" width="80" height="15" alt="Driven by DokuWiki" /></a>
+
+<?php
+if ($conf['allowdebug']) {
+ echo '<!-- page made in '.round(delta_time(DOKU_START_TIME), 3).' seconds -->';
+}
+?>
+
+
+</div>
+<?php include(dirname(__FILE__).'/dwtb.html') ?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif
new file mode 100644
index 000000000..b43de48a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif
new file mode 100644
index 000000000..5861d637f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png
new file mode 100644
index 000000000..706325e1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif
new file mode 100644
index 000000000..bba284e21
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png
new file mode 100644
index 000000000..39d5f56a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif
new file mode 100644
index 000000000..28f329aaa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png
new file mode 100644
index 000000000..b036f7152
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png
new file mode 100644
index 000000000..ec686442c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png
new file mode 100644
index 000000000..f60be309f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif
new file mode 100644
index 000000000..8414d4d69
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico
new file mode 100644
index 000000000..8b9616abb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png
new file mode 100644
index 000000000..d286beb22
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif
new file mode 100644
index 000000000..815ccb1b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif
new file mode 100644
index 000000000..50a87a9a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif
new file mode 100644
index 000000000..f5d5c7e56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif
new file mode 100644
index 000000000..fc4b78e8c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif
new file mode 100644
index 000000000..3d39c2e73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif
new file mode 100644
index 000000000..4f12acce1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css
new file mode 100644
index 000000000..ca4b52756
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css
@@ -0,0 +1,79 @@
+/**
+ * Tableless Layout for default template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author moraes <moraes@tipos.com.br>
+ */
+
+/* -------------- top row --------------- */
+div.dokuwiki .header {
+ padding: 3px 0 0 2px;
+}
+
+div.dokuwiki .pagename {
+ float: left;
+ font-size: 200%;
+ font-weight: bolder;
+ color: __background_alt__;
+ text-align: left;
+ vertical-align: middle;
+}
+
+div.dokuwiki .pagename a {
+ color: __extern__ !important;
+ text-decoration: none !important;
+}
+
+div.dokuwiki .logo {
+ float: right;
+ font-size: 220%;
+ font-weight: bolder;
+ text-align: right;
+ vertical-align: middle;
+}
+
+div.dokuwiki .logo a {
+ color: __background_alt__ !important;
+ text-decoration: none !important;
+ font-variant: small-caps;
+ letter-spacing: 2pt;
+}
+
+/* --------------- top and bottom bar ---------------- */
+div.dokuwiki .bar {
+ border-top: 1px solid __border__;
+ border-bottom: 1px solid __border__;
+ background: __background_alt__;
+ padding: 0.1em 0.15em;
+ clear: both;
+}
+
+div.dokuwiki .bar-left {
+ float: left;
+}
+
+div.dokuwiki .bar-right {
+ float: right;
+ text-align: right;
+}
+
+div.dokuwiki #bar__bottom {
+ margin-bottom:3px;
+}
+
+/* ------------- File Metadata ----------------------- */
+
+div.dokuwiki div.meta {
+ clear: both;
+ margin-top: 1em;
+ color: __text_alt__;
+ font-size: 70%;
+}
+
+div.dokuwiki div.meta div.user {
+ float: left;
+}
+
+div.dokuwiki div.meta div.doc {
+ text-align: right;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php
new file mode 100644
index 000000000..11c4ea967
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template you need to change for the overall look
+ * of DokuWiki.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+
+$sidebar_inline = get_input("inline_sidebar");
+$page_inline = get_input("inline_page");
+
+if (empty($sidebar_inline)) {
+ob_start();
+include(dirname(__FILE__).'/main_index.php');
+$content = ob_get_clean();
+}
+
+if (empty($page_inline)) {
+// include functions that provide sidebar functionality
+@require_once(dirname(__FILE__).'/tplfn_sidebar.php');
+ob_start();
+include(dirname(__FILE__).'/sidebar.php');
+$sidebar = ob_get_clean();
+}
+
+if (empty($sidebar_inline) && empty($page_inline)) {
+
+ elgg_push_breadcrumb(elgg_echo('dokuwiki'), 'dokuwiki/all');
+ elgg_push_breadcrumb(sprintf(elgg_echo('dokuwiki:wikifrom'), elgg_get_page_owner_entity()->name));
+
+ $title = sprintf(elgg_echo('dokuwiki:wikifrom'), elgg_get_page_owner_entity()->name);
+
+ $sidebar = elgg_view_module('aside', elgg_echo('dokuwiki:sidebar'), $sidebar);
+
+ $body = elgg_view_layout('content', array(
+ 'filter' => '',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => $sidebar,
+ ));
+
+ echo elgg_view_page($title, $body);
+}
+else {
+ $all_link = elgg_get_site_url().'dokuwiki/'.elgg_get_page_owner_guid();
+ $all_text = elgg_echo('link:view:all');
+ $all_link = "<a href=\"$all_link\">$all_text</a>";
+
+ echo elgg_view('groups/profile/module', array(
+ 'title' => $content ? elgg_echo('dokuwiki:group') : elgg_echo('dokuwiki:sidebar'),
+ 'content' => $content . $sidebar,
+ 'all_link' => $all_link,
+ ));
+}
+
+
+//echo $content;
+
+?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php
new file mode 100644
index 000000000..31a7ebafb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * DokuWiki Sidebar Template
+ * This template is the Dokuwiki Default Template with
+ * a configurable sidebar facility.
+ *
+ * @link http://wiki.jalakai.co.uk/dokuwiki
+ * @link http://dokuwiki.org/template/sidebar
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @date 2009-01-27
+ *
+ * Default template by ...
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+$page_inline = get_input("inline_page");
+// include functions that provide sidebar functionality
+//@require_once(dirname(__FILE__).'/tplfn_sidebar.php');
+?>
+ <?php //tpl_metaheaders()?>
+
+ <?php /*old includehook @include(dirname(__FILE__).'/meta.html') */ ?>
+
+<?php /*old includehook @include(dirname(__FILE__).'/topheader.html') */ ?>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="stylehead">
+
+ <?php if (empty($page_inline)) { ?>
+ <div class="header">
+ <div class="pagename">
+ [[<?php tpl_link(wl($ID,'do=backlink'),tpl_pagetitle($ID,true),'title="'.$lang['btn_backlink'].'"')?>]]
+ </div>
+ <div class="logo">
+ <?php tpl_link(wl(),$conf['title'],'name="dokuwiki__top" id="dokuwiki__top" accesskey="h" title="[H]"')?>
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+ <?php }?>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/header.html')?>
+
+ <?php if (empty($page_inline)) { ?>
+ <div class="bar" id="bar__top">
+ <div class="bar-left" id="bar__topleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ </div>
+
+ <div class="bar-right" id="bar__topright">
+ <?php tpl_button('recent')?>
+ <?php tpl_searchform()?>&nbsp;
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+ <?php } ?>
+
+ <?php if($conf['breadcrumbs']){?>
+ <div class="breadcrumbs">
+ <?php tpl_breadcrumbs()?>
+ <?php //tpl_youarehere() //(some people prefer this)?>
+ </div>
+ <?php }?>
+
+ <?php if($conf['youarehere']){?>
+ <div class="breadcrumbs">
+ <?php tpl_youarehere() ?>
+ </div>
+ <?php }?>
+
+ </div>
+ <?php flush()?>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pageheader.html')?>
+
+ <div class="page">
+ <!-- wikipage start -->
+ <?php tpl_content()?>
+ <!-- wikipage stop -->
+ </div>
+
+ <?php if (empty($page_inline)) { ?>
+ <div class="clearer">&nbsp;</div>
+
+ <?php flush()?>
+
+ <div class="stylefoot">
+
+ <div class="meta">
+ <div class="user">
+ <?php tpl_userinfo()?>
+ </div>
+ <div class="doc">
+ <?php tpl_pageinfo()?>
+ </div>
+ </div>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pagefooter.html')?>
+
+ </div>
+ <?php } ?>
+ <div class="bar" id="bar__bottom">
+ <div class="bar-left" id="bar__bottomleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ </div>
+ <div class="bar-right" id="bar__bottomright">
+ <?php tpl_button('subscribe')?>
+ <?php tpl_button('subscribens')?>
+ <?php tpl_button('admin')?>
+ <?php tpl_button('profile')?>
+ <?php tpl_button('login')?>
+ <?php tpl_button('index')?>
+ <?php tpl_button('top')?>&nbsp;
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <?php if (empty($page_inline)) { ?>
+
+ </div>
+ <?php } ?>
+
+ <?php/* tpl_license(false);*/?>
+
+<?php /*old includehook @include(dirname(__FILE__).'/footer.html')*/ ?>
+
+<div class="no"><?php /* provide DokuWiki housekeeping, required in all templates */ tpl_indexerWebBug()?></div>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css
new file mode 100644
index 000000000..27d0b1d33
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css
@@ -0,0 +1,205 @@
+/**
+ * The CSS in here cotrols the appearance of the media manager
+ */
+
+#media__manager {
+ height: 100%;
+ overflow: hidden;
+}
+
+#media__left {
+ width: 30%;
+ border-right: solid 1px __border__;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ left: 0;
+}
+
+#media__right {
+ width: 69.7%;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ right: 0;
+}
+
+#media__manager h1 {
+ margin: 0;
+ padding: 0;
+ margin-bottom: 0.5em;
+}
+
+/* --- Tree formatting --- */
+
+#media__tree img {
+ float:left;
+ padding: 0.5em 0.3em 0 0;
+}
+
+#media__tree ul {
+ list-style-type: none;
+ list-style-image: none;
+ margin-left: 1.5em;
+}
+
+#media__tree li {
+ clear: left;
+ list-style-type: none;
+ list-style-image: none;
+}
+*+html #media__tree li,
+* html #media__tree li {
+ border: 1px solid __background__;
+}/* I don't understand this, but this fixes a style bug in IE;
+it's dirty, so any "real" fixes are welcome */
+
+/* --- options --- */
+
+#media__opts {
+ padding-left: 1em;
+ margin-bottom: 0.5em;
+}
+
+#media__opts input {
+ float: left;
+ display: block;
+ margin-top: 4px;
+ position: absolute;
+}
+*+html #media__opts input,
+* html #media__opts input {
+ position: static;
+}
+
+#media__opts label {
+ display: block;
+ float: left;
+ margin-left: 20px;
+ margin-bottom: 4px;
+}
+*+html #media__opts label,
+* html #media__opts label {
+ margin-left: 10px;
+}
+
+#media__opts br {
+ clear: left;
+}
+
+/* --- file list --- */
+
+#media__content img.load {
+ margin: 1em auto;
+}
+
+#media__content #scroll__here {
+ border: 1px dashed __border__;
+}
+
+#media__content .odd {
+ background-color: __background_other__;
+ padding: 0.4em;
+}
+
+#media__content .even {
+ padding: 0.4em;
+}
+
+#media__content a.mediafile {
+ margin-right: 1.5em;
+ font-weight: bold;
+}
+
+#media__content div.detail {
+ padding: 0.3em 0 0.3em 2em;
+}
+
+#media__content div.detail div.thumb {
+ float: left;
+ width: 130px;
+ text-align: center;
+ margin-right: 0.4em;
+}
+
+
+#media__content img.btn {
+ vertical-align: text-bottom;
+}
+
+#media__content div.example {
+ color: __text_neu__;
+ margin-left: 1em;
+}
+
+/* --- upload form --- */
+
+#media__content div.upload {
+ font-size: 90%;
+ padding: 0 0.5em 0.5em 0.5em;
+}
+
+#media__content form#dw__upload,
+#media__content div#dw__flashupload {
+ display: block;
+ border-bottom: solid 1px __border__;
+ padding: 0 0.5em 1em 0.5em;
+}
+#media__content form#dw__upload fieldset {
+ padding: 0;
+ margin: 0;
+ border: none;
+ width: auto;
+}
+#media__content form#dw__upload p {
+ text-align: left;
+ padding: 0.25em 0;
+ margin: 0;
+ line-height: 1.0em;
+}
+#media__content form#dw__upload label.check {
+ float: none;
+ width: auto;
+ margin-left: 11.5em;
+}
+
+/* --- meta edit form --- */
+
+#media__content form.meta {
+ display: block;
+ padding: 0 0 1em 0;
+}
+
+#media__content form.meta label {
+ display: block;
+ width: 25%;
+ float: left;
+ font-weight: bold;
+ margin-left: 1em;
+ clear: left;
+}
+
+#media__content form.meta .edit {
+ font: 100% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ float: left;
+ width: 70%;
+ padding-right: 0;
+ padding-left: 0.2em;
+ margin: 2px;
+}
+
+#media__content form.meta textarea.edit {
+ height: 8em;
+}
+
+#media__content form.meta div.metafield {
+ clear: left;
+}
+
+#media__content form.meta div.buttons {
+ clear: left;
+ margin-left: 20%;
+ padding-left: 1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php
new file mode 100644
index 000000000..c464597bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for the media selection popup.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://wiki.splitbrain.org/wiki:tpl:templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <title><?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>]</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <h1><?php echo hsc($lang['mediaselect'])?> <code><?php echo hsc($NS)?></code></h1>
+
+ <div class="mediaselect">
+
+ <div class="mediaselect-left">
+ <strong><a href="<?php echo DOKU_BASE?>lib/exe/media.php?ns="><?php echo hsc($lang['namespaces'])?></a></strong>
+
+ <?php tpl_medianamespaces()?>
+ </div>
+
+ <div class="mediaselect-right">
+ <?php tpl_mediafilelist()?>
+
+ <div class="uploadform">
+ <?php tpl_mediauploadform()?>
+ </div>
+ </div>
+
+ </div>
+
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php
new file mode 100644
index 000000000..66d40ad5e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php
@@ -0,0 +1,88 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for editing image meta data.
+ * It is displayed in the media popup.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://wiki.splitbrain.org/wiki:tpl:templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <title><?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>]</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <h1><?php echo hsc($lang['metaedit'])?> <code><?php echo hsc(noNS($IMG))?></code></h1>
+
+ <div class="mediaedit">
+ <?php/* everything in meta array is tried to save and read */?>
+
+ <div class="data">
+ <form action="<?php echo DOKU_BASE?>lib/exe/media.php" accept-charset="utf-8" method="post">
+ <input type="hidden" name="edit" value="<?php echo hsc($IMG)?>" />
+ <input type="hidden" name="save" value="1" />
+
+ <label class="block" for="img__title"><?php echo $lang['img_title']?></label>
+ <input type="text" name="meta[Iptc.Headline]" id="img__title" class="edit"
+ value="<?php echo hsc(tpl_img_getTag('IPTC.Headline'))?>" /><br />
+
+ <label class="block" for="img__caption"><?php echo $lang['img_caption']?></label>
+ <textarea name="meta[Iptc.Caption]" id="img__caption" class="edit" rows="5"><?php
+ echo hsc(tpl_img_getTag(array('IPTC.Caption',
+ 'EXIF.UserComment',
+ 'EXIF.TIFFImageDescription',
+ 'EXIF.TIFFUserComment')));
+ ?></textarea><br />
+
+ <label class="block" for="img__artist"><?php echo $lang['img_artist']?></label>
+ <input type="text" name="meta[Iptc.Byline]" id="img__artist" class="edit"
+ value="<?php echo hsc(tpl_img_getTag(array('Iptc.Byline',
+ 'Exif.TIFFArtist',
+ 'Exif.Artist',
+ 'Iptc.Credit')))?>" /><br />
+
+ <label class="block" for="img__copy"><?php echo $lang['img_copyr']?></label>
+ <input type="text" name="meta[Iptc.CopyrightNotice]" id="img__copy" class="edit"
+ value="<?php echo hsc(tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright')))?>" /><br />
+
+
+ <label class="block" for="img__keywords"><?php echo $lang['img_keywords']?></label>
+ <textarea name="meta[Iptc.Keywords]" id="img__keywords" class="edit"><?php
+ echo hsc(tpl_img_getTag(array('IPTC.Keywords',
+ 'EXIF.Category')));
+ ?></textarea><br />
+
+
+ <input type="submit" value="<?php echo $lang['btn_save']?>" title="ALT+S"
+ accesskey="s" class="button" />
+
+ </form>
+ </div>
+
+
+ <div class="footer">
+ <hr>
+ <?php tpl_button('backtomedia')?>
+ </div>
+ </div>
+
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php
new file mode 100644
index 000000000..7b7fe8675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for the media manager popup
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc($lang['mediaselect'])?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+ <?php tpl_metaheaders()?>
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div id="media__manager" class="dokuwiki">
+ <div id="media__left">
+ <?php html_msgarea()?>
+ <h1><?php echo hsc($lang['mediaselect'])?></h1>
+
+ <?php /* keep the id! additional elements are inserted via JS here */?>
+ <div id="media__opts"></div>
+
+ <?php tpl_mediaTree() ?>
+ </div>
+
+ <div id="media__right">
+ <?php tpl_mediaContent() ?>
+ </div>
+</div>
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php
new file mode 100644
index 000000000..4651b5667
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for displaying references to a media file.
+ * It is displayed in the media popup.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://wiki.splitbrain.org/wiki:tpl:templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <title><?php echo hsc($lang['mediaselect'])?> [<?php echo hsc($conf['title'])?>]</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <h1><?php echo hsc($lang['reference'])?> <code><?php echo hsc(noNS($DEL))?></code></h1>
+
+ <div class="mediaref">
+ <div class="mediaref_head">
+ <p><?php echo hsc($lang['ref_inuse'])?></p>
+ </div>
+
+ <?php tpl_showreferences($mediareferences)?>
+
+ <div class="mediaref_footer">
+ <hr>
+ <?php tpl_button('backtomedia')?>
+ </div>
+ </div>
+
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css
new file mode 100644
index 000000000..0491a7ba0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css
@@ -0,0 +1,238 @@
+
+body {
+ font: 10pt "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: White;
+ color: Black;
+}
+
+table {
+ font-size: 100%;
+ padding:0;
+ margin:0;
+}
+
+tr,td,th {padding:0; margin:0;}
+
+img {border:0}
+
+a {
+ color:#000000;
+ text-decoration:none;
+ background: none !important;
+}
+
+
+div.meta {
+ clear:both;
+ margin-top: 1em;
+ font-size:70%;
+ text-align:right;
+}
+
+
+div.notify,
+div.info,
+div.success,
+div.error,
+div.breadcrumbs,
+div.secedit {
+ display:none;
+}
+
+/* --------------------- Text formating -------------------------------- */
+
+/* external link */
+a.urlextern:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* interwiki link */
+a.interwiki:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* email link */
+a.mail:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* existing wikilink */
+a.wikilink1 {text-decoration:underline }
+
+/* the document */
+div.page {
+ text-align: justify;
+}
+
+/* general headline setup */
+h1, h2, h3, h4, h5 {
+ color: Black;
+ background-color: transparent;
+ font-family: "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ font-size: 100%;
+ font-weight: normal;
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 1em;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0.5em;
+ padding-bottom: 0;
+ border-bottom: 1px solid #000000;
+ clear:left;
+}
+
+/* special headlines */
+h1 {font-size: 160%; font-weight: bold;}
+h2 {font-size: 150%; }
+h3 {font-size: 140%; border-bottom: none; }
+h4 {font-size: 120%; border-bottom: none; }
+h5 {font-size: 100%; border-bottom: none; }
+
+/* embedded images */
+img.media {
+ margin: 3px;
+}
+
+img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+/* unordered lists */
+ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+}
+
+/* ordered lists */
+ol {
+ line-height: 1.5em;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+ font-weight: normal;
+}
+
+div.dokuwiki li ul {
+ margin-bottom: 0;
+}
+div.dokuwiki li ol {
+ margin-bottom: 0;
+}
+
+div.dokuwiki ol {list-style-type: decimal}
+div.dokuwiki ol ol {list-style-type: upper-roman}
+div.dokuwiki ol ol ol {list-style-type: lower-alpha}
+div.dokuwiki ol ol ol ol {list-style-type: lower-greek}
+
+/* the list items overriding the ol definition */
+span.li {
+ font-weight: normal;
+}
+
+/* code blocks by indention */
+pre.pre {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* code blocks by code tag */
+pre.code {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* inline code words */
+code {
+ font-size: 120%;
+}
+
+/* code blocks by file tag */
+pre.file {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dotted #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* footnotes */
+div.footnotes{
+ clear:both;
+ border-top: 1px solid #000000;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.fn{
+ font-size:90%;
+}
+
+a.fn_top{
+ vertical-align:super;
+ font-size:80%;
+}
+
+a.fn_bot{
+ vertical-align:super;
+ font-size:80%;
+ font-weight:bold;
+}
+
+acronym{
+ border: 0;
+}
+
+/* ---------- inline tables ------------------- */
+
+table.inline {
+ font-size: 80%;
+ background-color: #ffffff;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+table.inline th {
+ padding: 3px;
+ border: 1px solid #000000;
+ border-bottom: 2px solid #000000;
+}
+
+table.inline td {
+ padding: 3px;
+ border: 1px solid #000000;
+}
+
+.leftalign{
+ text-align: left;
+}
+
+.centeralign{
+ text-align: center;
+}
+
+.rightalign{
+ text-align: right;
+}
+
+.toc, .footerinc, .header, .bar, .user {display:none}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css
new file mode 100644
index 000000000..4678c3059
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css
@@ -0,0 +1,119 @@
+/**
+ * Layout and dedsign corrections for right-to-left languages
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ */
+
+.bar-left {
+ float: right;
+ text-align: right;
+}
+
+.bar-right {
+ float: left;
+ text-align: left;
+}
+
+.pagename {
+ float: right;
+ text-align: right;
+}
+
+.logo {
+ float: left;
+ text-align: left;
+}
+
+label {
+ text-align: left;
+}
+
+label.simple {
+ text-align: right;
+}
+
+div.meta div.user {
+ float: right
+}
+
+div.meta div.doc {
+ text-align: left;
+}
+
+/* ------------------ Design corrections --------------------------------- */
+
+div.dokuwiki ul,
+div.dokuwiki ol {
+ margin: 0.5em 1.5em 0.5em 0;
+}
+
+div.dokuwiki a.urlextern,
+div.dokuwiki a.interwiki,
+div.dokuwiki a.windows,
+div.dokuwiki a.mail,
+div.dokuwiki a.mail.JSnocheck {
+ /* should work but doesn't - so we just disable icons here*/
+ /*
+ background-position: right 1px;
+ padding-right: 16px;
+ */
+ background-image: none !important;
+ padding: 0px 0px 0px 0px;
+}
+
+div.dokuwiki div.secedit input.button {
+ float: left;
+}
+
+/* headlines */
+div.dokuwiki h1, div.dokuwiki h2, div.dokuwiki h3, div.dokuwiki h4, div.dokuwiki h5 {
+ clear: right;
+}
+
+/* special headlines */
+div.dokuwiki h1 {margin-left: 0px; margin-right: 0px;}
+div.dokuwiki h2 {margin-left: 0px; margin-right: 20px;}
+div.dokuwiki h3 {margin-left: 0px; margin-right: 40px;}
+div.dokuwiki h4 {margin-left: 0px; margin-right: 60px;}
+div.dokuwiki h5 {margin-left: 0px; margin-right: 80px;}
+
+/* indent different sections */
+div.dokuwiki div.level1 {margin-left: 0px; margin-right: 3px;}
+div.dokuwiki div.level2 {margin-left: 0px; margin-right: 23px;}
+div.dokuwiki div.level3 {margin-left: 0px; margin-right: 43px;}
+div.dokuwiki div.level4 {margin-left: 0px; margin-right: 63px;}
+div.dokuwiki div.level5 {margin-left: 0px; margin-right: 83px;}
+
+/* TOC control */
+div.dokuwiki div.toc {
+ float: left;
+}
+
+div.dokuwiki div.tocheader {
+ text-align: right;
+}
+
+div.dokuwiki #toc__inside {
+ text-align: right;
+}
+
+div.dokuwiki ul.toc {
+ padding: 0;
+ padding-right: 1em;
+}
+
+div.dokuwiki ul.toc li {
+ background-position: right 0.6em;
+ padding-right:0.4em;
+ direction: rtl;
+}
+
+div.dokuwiki ul.toc li.clear {
+ padding-right:0.4em;
+}
+
+div.dokuwiki pre {
+ text-align: left;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css
new file mode 100644
index 000000000..5af3c95cb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css
@@ -0,0 +1,189 @@
+/**
+ * Extra styles for sidebar template
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+/* dokuwiki containers & styles */
+
+/* sidebar orientation and position */
+#sidebar {
+ width:20%;
+ margin:0;
+ padding:0;
+ position: relative;
+}
+
+#sidebartop {
+ position: absolute;
+ top: -1.2em;
+ width: 100%;
+ height: 1.2em;
+ background: __background_neu__;
+}
+
+.sidebar_inside_left #sidebar {
+ float:left;
+}
+
+.sidebar_inside_right #sidebar {
+ float:right;
+}
+
+.sidebar_inside_left .dokuwiki div.breadcrumbs {
+ float: right;
+ width: 78%;
+ padding: 0 1% 0 0.9%;
+}
+
+.sidebar_inside_left .dokuwiki .page, .sidebar_inside_left .dokuwiki .meta {
+ float:right;
+ width:77%; /* also see IE Win fix below */
+ margin-right: 1%;
+ margin-left:0;
+}
+
+.sidebar_inside_right .dokuwiki .page, .sidebar_inside_right .dokuwiki .meta, .sidebar_inside_right .dokuwiki div.breadcrumbs {
+ float:left;
+ width:77%;
+ margin-left: 1%;
+ margin-right: 0;
+}
+
+.sidebar_outside_left #sidebar {
+ position:absolute;
+ top:0;
+ left:0;
+}
+
+.sidebar_outside_right #sidebar {
+ position:absolute;
+ top:0;
+ right:0;
+}
+
+.sidebar_outside_left .dokuwiki {
+ padding-left:21%;
+}
+
+.sidebar_outside_right .dokuwiki {
+ padding-right:21%;
+}
+
+.sidebar_outside_left .footerinc {
+ padding-left: 21%;
+}
+
+.sidebar_outside_right .footerinc {
+ padding-right: 21%;
+}
+
+/* sidebar presentation */
+/* the following three styles use a faux-column image to place a separating line
+ between the sidebar and dokuwiku */
+.sidebar_outside_left .dokuwiki, .sidebar_inside_left .dokuwiki {
+ background: url(images/sidebar-border.gif) repeat-y 20%;
+}
+
+.sidebar_outside_right .dokuwiki, .sidebar_inside_right .dokuwiki {
+ background: url(images/sidebar-border.gif) repeat-y 80%;
+}
+
+/* hide the line where it passes through .stylehead */
+.stylehead {
+}
+
+/* sidebar contents */
+#sidebar {
+ font-size:10px;
+}
+
+#sidebar a {
+ color: __existing__;
+}
+
+#sidebar a.wikilink2 {
+ color: __text_neu__;
+}
+
+#sidebar a.wikilink2:hover {
+ text-decoration:none;
+ cursor:default;
+}
+
+#sidebar h1 {
+ font-size:140%;
+ margin-left: 0px;
+ padding-left: 2px;
+ font-weight:bold;
+ padding-bottom:0;
+ background-color: __background_alt__;
+}
+#sidebar h2 {
+ font-size:120%;
+ margin-left: 4px;
+ font-weight:bold;
+ padding-bottom:0;
+}
+#sidebar h3 {
+ font-size:120%;
+ margin-left: 8px;
+ font-weight:normal;
+ padding-bottom:0;
+}
+#sidebar h4 {
+ font-size:100%;
+ margin-left: 12px;
+ font-weight:bold;
+ padding-bottom:0;
+}
+#sidebar h5 {
+ font-size:100%;
+ margin-left: 16px;
+ font-weight:normal;
+ padding-bottom:0;
+}
+#sidebar .toc {
+ display:none;
+}
+
+#sidebar_content .toc {
+ display:none;
+}
+#sidebar .secedit {
+}
+
+/* reduced section indentation */
+#sidebar div.level1 {margin-left: 2px;}
+#sidebar div.level2 {margin-left: 6px;}
+#sidebar div.level3 {margin-left: 10px;}
+#sidebar div.level4 {margin-left: 14px;}
+#sidebar div.level5 {margin-left: 18px;}
+
+/* IE fixes (hide from IE Mac) \*/
+
+* html .page .toc {height:1px} /* General Dokuwiki fix. IE needs this to always display TOC contents \*/
+* html pre {width:95%;} /* General Dokuwiki fix - very important for Sidebar. IE needs this to get the overflow:auto style to kick in \*/
+* html .stylehead {height:1px;} /* Get IE in hasLayout mode to ensure the background covers the whole element \*/
+
+* html .sidebar_inside_left .page, * html .sidebar_inside_right .page,
+* html .sidebar_inside_left .meta, * html .sidebar_inside_right .meta {
+ width: 77%; /* IE needs extra gap to ensure #sidebar & .page float next to each other \*/
+ overflow-x: auto; /* IE proprietary property to prevent wide images in wiki page forcing sidebar down below wiki page \*/
+ /* 'overflow-x:auto;' maybe replaced by 'overflow:auto;' to ensure template passes w3c validation \*/
+}
+
+/* (end IE Mac hiding) */
+
+/* duplicate standard DW styles with increased specificity to counter some sidebar styles */
+.sidebar_outside_left .insitu-footnote, .sidebar_inside_left .insitu-footnote {
+ background-color: __background_other__;
+}
+/* counteract some inappropriate DW styling */
+.sidebar div.dokuwiki #bar__bottom {
+ margin-bottom: 0;
+}
+.sidebar div.dokuwiki p.license {
+ background-color: __background_other__;
+ padding-top: 3px;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php
new file mode 100644
index 000000000..b5c157b39
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php
@@ -0,0 +1,9 @@
+<div id="owner_block">
+<div id="sidebartop"> </div>
+<!--<div id="sidebartop"> <?php tpl_sidebar_editbtn(); ?></div>-->
+ <div id="sidebar_content">
+ <?php tpl_sidebar_content(); ?>
+ </div>
+ <div class="clearer">&nbsp;</div>
+</div>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css
new file mode 100644
index 000000000..42332062b
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css
@@ -0,0 +1,9 @@
+/**
+ * Extra styles for sidebar template
+ *
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+/* prevent the sidebar being included when printing wiki pages */
+ #sidebar {display:none;}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini
new file mode 100644
index 000000000..291cfd259
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini
@@ -0,0 +1,67 @@
+; Please see http://www.php.net/manual/en/function.parse-ini-file.php
+; for limitations of the ini format used here
+
+; Define the stylesheets your template uses here. The second value
+; defines for which output media the style should be loaded. Currently
+; print, screen and rtl are supported. rtl styles are loaded additionally
+; to screen styles if a right-to-left language is selected (eg. hebrew)
+[stylesheets]
+layout.css = screen
+design.css = screen
+style.css = screen
+
+media.css = screen
+
+rtl.css = rtl
+print.css = print
+sidebar.css = screen
+sidebar_print.css = print
+
+; This section is used to configure some placeholder values used in
+; the stylesheets. Changing this file is the simplest method to
+; give your wiki a new look.
+[replacements]
+
+;--------------------------------------------------------------------------
+;------ guaranteed dokuwiki color placeholders that every plugin can use
+; main text and background colors
+__text__ = "#000"
+__background__ = "#fff"
+; alternative text and background colors
+__text_alt__ = "#638c9c"
+__background_alt__ = "#dee7ec"
+; neutral text and background colors
+__text_neu__ = "#666"
+__background_neu__ = "#f5f5f5"
+; border color
+__border__ = "#8cacbb"
+;--------------------------------------------------------------------------
+
+; other text and background colors
+__text_other__ = "#ccc"
+__background_other__ = "#f7f9fa"
+
+; these are used for links
+__extern__ = "#436976"
+__existing__ = "#090"
+__missing__ = "#f30"
+
+; highlighting search snippets
+__highlight__ = "#ff9"
+
+
+;--------------------------------------------------------------------------
+;------ for keeping old templates and plugins compatible to the old pattern
+; (to be deleted at the next or after next release)
+__white__ = "#fff"
+__lightgray__ = "#f5f5f5"
+__mediumgray__ = "#ccc"
+__darkgray__ = "#666"
+__black__ = "#000"
+
+; these are the shades of blue
+__lighter__ = "#f7f9fa"
+__light__ = "#eef3f8"
+__medium__ = "#dee7ec"
+__dark__ = "#8cacbb"
+__darker__ = "#638c9c"
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php
new file mode 100644
index 000000000..6c378c385
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php
@@ -0,0 +1,98 @@
+<?php
+/*
+ * Provide navigation sidebar functionality to Dokuwiki Templates
+ *
+ * This is not currently part of the official Dokuwiki release
+ *
+ * @link http://wiki.jalakai.co.uk/dokuwiki/doku.php?id=tutorials:dev:navigation_sidebar
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ */
+
+// sidebar configuration settings
+tpl_loadConfig();
+
+// determine the sidebar class
+$sidebar_class = "sidebar sidebar_".tpl_getConf('layout').'_'.tpl_getConf('orientation');
+
+// recursive function to establish best sidebar file to be used
+function getSidebarFN($ns, $file) {
+
+ // check for wiki page = $ns:$file (or $file where no namespace)
+ $nsFile = ($ns) ? "$ns:$file" : $file;
+ if (file_exists(wikiFN($nsFile)) && auth_quickaclcheck($nsFile)) return $nsFile;
+
+// remove deepest namespace level and call function recursively
+
+ // no namespace left, exit with no file found
+ if (!$ns) return '';
+
+ $i = strrpos($ns, ":");
+ $ns = ($i) ? substr($ns, 0, $i) : false;
+ return getSidebarFN($ns, $file);
+}
+
+// print a sidebar edit button - if appropriate
+function tpl_sidebar_editbtn() {
+ global $ID, $conf, $lang;
+
+ // check sidebar configuration
+ if (!tpl_getConf('showeditbtn') || !tpl_getConf('page')) return;
+
+ // check sidebar page exists
+ $fileSidebar = getSidebarFN(getNS($ID), tpl_getConf('page'));
+ if (!$fileSidebar) return;
+
+ // check user has edit permission for the sidebar page
+ if (auth_quickaclcheck($fileSidebar) < AUTH_EDIT) return;
+
+?>
+ <div class="secedit">
+ <form class="button" method="post" action="<?php echo wl($fileSidebar,'do=edit'); ?>" onsubmit="return svchk()">
+ <input type="hidden" name="do" value="edit" />
+ <input type="hidden" name="rev" value="" />
+ <input type="hidden" name="id" value="<?php echo $fileSidebar; ?>" />
+ <input type="submit" value="<?php echo $lang['btn_sidebaredit']; ?>" class="button" />
+ </form>
+ </div>
+<?php
+}
+
+// display the sidebar
+function tpl_sidebar_content() {
+ global $ID, $REV, $ACT, $conf;
+
+ // save globals
+ $saveID = $ID;
+ $saveREV = $REV;
+ $saveACT = $ACT;
+
+ // discover file to be displayed in navigation sidebar
+ $fileSidebar = '';
+
+ if (tpl_getConf('page')) {
+ $fileSidebar = getSidebarFN(getNS($ID), tpl_getConf('page'));
+ }
+
+ // determine what to display
+ if ($fileSidebar) {
+ $ID = $fileSidebar;
+ $REV = '';
+ $ACT = 'show';
+# print p_wiki_xhtml($fileSidebar,'',false);
+ tpl_content();
+ }
+ else {
+# global $IDX;
+# html_index($IDX);
+# $ID = getNS($ID);
+ $REV = '';
+ $ACT = 'index';
+
+ tpl_content();
+ }
+
+ // restore globals
+ $ID = $saveID;
+ $REV = $saveREV;
+ $ACT = $saveACT;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css
new file mode 100644
index 000000000..f34d8aba3
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css
@@ -0,0 +1,43 @@
+
+.dokuwiki ul.admin_tasks {
+ font-size: 115%;
+ float: left;
+ width: 40%;
+ list-style-type: none;
+}
+
+.dokuwiki ul.admin_tasks li {
+ line-height: 22px;
+ padding-left: 35px;
+ margin: 1em 0;
+ background: transparent none no-repeat scroll 0 0;
+ text-align: left;
+}
+
+.dokuwiki ul.admin_tasks li div.li {
+ font-weight: bold;
+}
+
+.dokuwiki ul.admin_tasks li.admin_acl {
+ background-image: url(../../images/admin/acl.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_usermanager {
+ background-image: url(../../images/admin/usermanager.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_plugin {
+ background-image: url(../../images/admin/plugin.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_config {
+ background-image: url(../../images/admin/config.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_revert {
+ background-image: url(../../images/admin/revert.png);
+}
+
+.dokuwiki ul.admin_tasks li.admin_popularity {
+ background-image: url(../../images/admin/popularity.png);
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css
new file mode 100644
index 000000000..060707377
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css
@@ -0,0 +1,68 @@
+#link__wiz {
+ position: absolute;
+ display: block;
+ z-index: 99;
+ width: 300px;
+ height: 250px;
+ padding: 0;
+ margin: 0;
+ overflow: hidden;
+ border: 1px solid __border__;
+ background-color: __background_neu__;
+ text-align: center;
+}
+
+#link__wiz_header {
+ background-color: __background_alt__;
+ height: 16px;
+ margin-bottom: 5px;
+}
+
+#link__wiz_close {
+ cursor: pointer;
+ margin: 0;
+}
+
+#link__wiz_result {
+ background-color: __background__;
+ width: 293px;
+ height: 193px;
+ overflow: auto;
+ border: 1px solid __border__;
+ margin: 3px auto;
+ text-align: left;
+}
+
+#link__wiz_result div.type_u {
+ padding: 3px 3px 3px 22px;
+ background: transparent url(../../images/up.png) 3px 3px no-repeat;
+}
+
+#link__wiz_result div.type_f {
+ padding: 3px 3px 3px 22px;
+ background: transparent url(../../images/page.png) 3px 3px no-repeat;
+}
+
+#link__wiz_result div.type_d {
+ padding: 3px 3px 3px 22px;
+ background: transparent url(../../images/ns.png) 3px 3px no-repeat;
+}
+
+#link__wiz_result div.even {
+ background-color: __background_neu__;
+}
+
+#link__wiz_result div.selected {
+ background-color: __background_alt__;
+}
+
+#link__wiz_result span {
+ display: block;
+ color: __text_neu__;
+}
+
+/*FIXME maybe move to a more general style sheet*/
+.ondrag {
+ cursor: move;
+ opacity: 0.8;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css
new file mode 100644
index 000000000..4830a9e2c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css
@@ -0,0 +1,835 @@
+/**
+ * Design elements for default Template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+
+/* -------------- general elements --------------- */
+
+* { padding: 0; margin: 0; }
+
+body {
+ font: 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: __background__;
+ color: __text__;
+}
+
+/* the document */
+div.dokuwiki div.page {
+ margin: 4px 2em 0 1em;
+ text-align: justify;
+}
+
+div.dokuwiki table {
+ font-size: 100%;
+}
+
+div.dokuwiki tr,
+div.dokuwiki td,
+div.dokuwiki th {
+}
+
+div.dokuwiki img {
+ border: 0;
+}
+
+div.dokuwiki p,
+div.dokuwiki blockquote,
+div.dokuwiki table,
+div.dokuwiki pre {
+ margin: 0 0 1.0em 0;
+}
+
+div.dokuwiki hr {
+ border: 0px;
+ border-top: 1px solid __border__;
+ text-align: center;
+ height: 0px;
+}
+
+div.dokuwiki div.nothing {
+ text-align: center;
+ margin: 2em;
+}
+
+/* ---------------- forms ------------------------ */
+
+div.dokuwiki form {
+ border: none;
+ display: inline;
+}
+
+div.dokuwiki label.block {
+ display: block;
+ text-align: right;
+ font-weight: bold;
+}
+
+div.dokuwiki label.simple {
+ display: block;
+ text-align: left;
+ font-weight: normal;
+}
+
+div.dokuwiki label.block input.edit {
+ width: 50%;
+}
+
+div.dokuwiki fieldset {
+ width: 300px;
+ text-align: center;
+ border: 1px solid __border__;
+ padding: 0.5em;
+ margin: auto;
+}
+
+div.dokuwiki textarea.edit {
+ font-family: monospace;
+ font-size: 14px;
+ color: __text__;
+ background-color: __background__;
+ border: 1px solid __border__;
+ padding: 0.3em 0 0 0.3em;
+ width: 100%;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki textarea.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki input.edit,
+div.dokuwiki select.edit {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.edit,
+html>body div.dokuwiki select.edit {
+ background: __background__ url(images/inputshadow.png) repeat-x top;
+}
+
+div.dokuwiki select.edit {
+ padding: 0.1em 0;
+}
+
+div.dokuwiki input.missing {
+ font-size: 100%;
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: #ffcccc;
+ vertical-align: middle;
+ margin: 1px;
+ padding: 0.20em 0.3em;
+ display: inline;
+}
+
+/* disabled style - not understood by IE */
+div.dokuwiki textarea.edit[disabled],
+div.dokuwiki textarea.edit[readonly],
+div.dokuwiki input.edit[disabled],
+div.dokuwiki input.edit[readonly],
+div.dokuwiki input.button[disabled],
+div.dokuwiki select.edit[disabled] {
+ background-color: __background_neu__!important;
+ color: __text_neu__!important;
+}
+
+/* edit form */
+div.dokuwiki div.toolbar,
+div.dokuwiki div#wiki__editbar {
+ margin: 2px 0;
+ text-align: left;
+}
+div.dokuwiki div#size__ctl {
+ float: right;
+ width: 60px;
+ height: 2.7em;
+}
+div.dokuwiki #size__ctl img {
+ cursor: pointer;
+}
+div.dokuwiki div#wiki__editbar div.editButtons {
+ float: left;
+ padding: 0 1.0em 0.7em 0;
+}
+div.dokuwiki div#wiki__editbar div.summary {
+ float: left;
+}
+div.dokuwiki .nowrap {
+ white-space: nowrap;
+}
+div.dokuwiki div#draft__status {
+ float: right;
+ color: __text_alt__;
+}
+
+div.dokuwiki div.license {
+ padding: 0.5em;
+ font-size: 90%;
+ text-align: center;
+}
+
+div.dokuwiki form#dw__editform div.license {
+ clear: left;
+ font-size: 90%;
+}
+
+/* --------- buttons ------------------- */
+
+div.dokuwiki input.button,
+div.dokuwiki button.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ font-size: 100%;
+ cursor: pointer;
+ margin: 1px;
+ padding: 0.125em 0.4em;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body div.dokuwiki input.button,
+html>body div.dokuwiki button.button {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+* html div.dokuwiki input.button,
+* html div.dokuwiki button.button {
+ height: 1.8em;
+}
+
+div.dokuwiki div.secedit input.button {
+ border: 1px solid __border__;
+ color: __text__;
+ background-color: __background__;
+ vertical-align: middle;
+ text-decoration: none;
+ margin: 0;
+ padding: 0;
+ font-size: 10px;
+ cursor: pointer;
+ float: right;
+ display: inline;
+}
+
+/* ----------- page navigator ------------- */
+
+div.dokuwiki div.pagenav {
+ margin: 1em 0 0 0;
+}
+
+div.dokuwiki div.pagenav-prev {
+ text-align: right;
+ float: left;
+ width: 49%
+}
+
+div.dokuwiki div.pagenav-next {
+ text-align: left;
+ float: right;
+ width: 49%
+}
+
+/* --------------- Links ------------------ */
+
+div.dokuwiki a:link,
+div.dokuwiki a:visited {
+ color: __extern__;
+ text-decoration: none;
+}
+div.dokuwiki a:hover,
+div.dokuwiki a:active {
+ color: __text__;
+ text-decoration: underline;
+}
+
+div.dokuwiki h1 a,
+div.dokuwiki h2 a,
+div.dokuwiki h3 a,
+div.dokuwiki h4 a,
+div.dokuwiki h5 a,
+div.dokuwiki a.nolink {
+ color: __text__ !important;
+ text-decoration: none !important;
+}
+
+/* external link */
+div.dokuwiki a.urlextern {
+ background: transparent url(images/link_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* windows share */
+div.dokuwiki a.windows {
+ background: transparent url(images/windows.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* interwiki link (icon are set by dokuwiki) */
+div.dokuwiki a.interwiki {
+}
+
+/* link to some embedded media */
+div.dokuwiki a.media {
+}
+
+div.dokuwiki a.urlextern:link,
+div.dokuwiki a.windows:link,
+div.dokuwiki a.interwiki:link {
+ color: __extern__;
+}
+
+div.dokuwiki a.urlextern:visited,
+div.dokuwiki a.windows:visited,
+div.dokuwiki a.interwiki:visited {
+ color: purple;
+}
+div.dokuwiki a.urlextern:hover,
+div.dokuwiki a.urlextern:active,
+div.dokuwiki a.windows:hover,
+div.dokuwiki a.windows:active,
+div.dokuwiki a.interwiki:hover,
+div.dokuwiki a.interwiki:active {
+ color: __text__;
+}
+
+/* email link */
+div.dokuwiki a.mail {
+ background: transparent url(images/mail_icon.gif) 0px 1px no-repeat;
+ padding: 1px 0px 1px 16px;
+}
+
+/* existing wikipage */
+div.dokuwiki a.wikilink1 {
+ color: __existing__ !important;
+}
+
+/* not existing wikipage */
+div.dokuwiki a.wikilink2 {
+ color: __missing__ !important;
+ text-decoration: none !important;
+ border-bottom: dashed 1px __missing__ !important;
+}
+
+/* ------------- Page elements ----------------- */
+
+div.dokuwiki div.preview {
+ background-color: __background_neu__;
+ margin: 0 0 0 2em;
+ padding: 4px;
+ border: 1px dashed __text__;
+}
+
+div.dokuwiki div.breadcrumbs {
+ background-color: __background_neu__;
+ color: __text_neu__;
+ font-size: 80%;
+ padding: 0 0 0 4px;
+}
+
+div.dokuwiki span.user {
+ color: __text_other__;
+ font-size: 90%;
+}
+
+div.dokuwiki li.minor {
+ color: __text_neu__;
+ font-style: italic;
+}
+
+/* embedded images */
+div.dokuwiki img.media {
+ margin: 3px;
+}
+
+div.dokuwiki img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+div.dokuwiki img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+div.dokuwiki img.mediacenter {
+ border: 0;
+ display: block;
+ margin: 0 auto;
+}
+
+/* smileys */
+div.dokuwiki img.middle {
+ vertical-align: middle;
+}
+
+div.dokuwiki acronym {
+ cursor: help;
+ border-bottom: 1px dotted __text__;
+}
+
+/* general headline setup */
+div.dokuwiki h1,
+div.dokuwiki h2,
+div.dokuwiki h3,
+div.dokuwiki h4,
+div.dokuwiki h5 {
+ color: __text__;
+ background-color: inherit;
+ font-size: 100%;
+ font-weight: normal;
+ margin: 0 0 1em 0;
+ padding: 0.5em 0 0 0;
+ border-bottom: 1px solid __border__;
+ clear: left;
+}
+
+/* special headlines */
+div.dokuwiki h1 {font-size: 160%; margin-left: 0px; font-weight: bold;}
+div.dokuwiki h2 {font-size: 150%; margin-left: 20px;}
+div.dokuwiki h3 {font-size: 140%; margin-left: 40px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h4 {font-size: 120%; margin-left: 60px; border-bottom: none; font-weight: bold;}
+div.dokuwiki h5 {font-size: 100%; margin-left: 80px; border-bottom: none; font-weight: bold;}
+
+/* indent different sections */
+div.dokuwiki div.level1 { margin-left: 3px; }
+div.dokuwiki div.level2 { margin-left: 23px; }
+div.dokuwiki div.level3 { margin-left: 43px; }
+div.dokuwiki div.level4 { margin-left: 63px; }
+div.dokuwiki div.level5 { margin-left: 83px; }
+
+/* unordered lists */
+div.dokuwiki ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+}
+
+/* ordered lists */
+div.dokuwiki ol {
+ line-height: 1.5em;
+ list-style-image: none;
+ margin: 0 0 1em 3.5em;
+ color: __text_alt__;
+ font-weight: bold;
+}
+
+/* no bottom gap in between and smaller left margin for nested lists */
+div.dokuwiki li ul,
+div.dokuwiki li ol {
+ margin: 0 0 0 1.5em;
+}
+
+/* the list items overriding the ul/ol definition */
+div.dokuwiki .li {
+ color: __text__;
+ font-weight: normal;
+}
+
+div.dokuwiki ol { list-style-type: decimal; }
+div.dokuwiki ol ol { list-style-type: upper-roman; }
+div.dokuwiki ol ol ol { list-style-type: lower-alpha; }
+div.dokuwiki ol ol ol ol { list-style-type: lower-greek; }
+
+div.dokuwiki li.open {
+ list-style-image: url(images/open.gif);
+ /*list-style-type: circle;*/
+}
+
+div.dokuwiki li.closed {
+ list-style-image: url(images/closed.gif);
+ /*list-style-type: disc;*/
+}
+
+div.dokuwiki blockquote {
+ border-left: 2px solid __border__;
+ padding-left: 3px;
+}
+
+div.dokuwiki pre {
+ font-size: 120%;
+ padding: 0.5em;
+ border: 1px dashed __border__;
+ color: __text__;
+ overflow: auto;
+}
+
+/* code blocks by indention */
+div.dokuwiki pre.pre {
+ background-color: __background_other__;
+}
+
+/* code blocks by code tag */
+div.dokuwiki pre.code {
+ background-color: __background_other__;
+}
+
+/* code blocks by file tag */
+div.dokuwiki pre.file {
+ background-color: __background_alt__;
+}
+
+/* filenames for file and code blocks */
+div.dokuwiki dl.file,
+div.dokuwiki dl.code {
+ margin-top: 2em;
+ margin-bottom: 2.5em;
+}
+
+div.dokuwiki dl.file dt,
+div.dokuwiki dl.code dt {
+ border: 1px dashed __border__;
+ display: inline;
+ padding: 0.1em 1em;
+ margin-left: 2em;
+}
+
+div.dokuwiki dl.code dt a,
+div.dokuwiki dl.file dt a {
+ color: __text__;
+}
+
+div.dokuwiki dl.code dt {
+ background-color: __background_other__;
+ border-bottom: 1px solid __background_other__;
+}
+
+div.dokuwiki dl.file dt {
+ background-color: __background_alt__;
+ border-bottom: 1px solid __background_alt__;
+}
+
+
+/* inline code words */
+div.dokuwiki code {
+ font-size: 120%;
+}
+
+/* inline tables */
+div.dokuwiki table.inline {
+ background-color: __background__;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+div.dokuwiki table.inline th {
+ padding: 3px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+div.dokuwiki table.inline td {
+ padding: 3px;
+ border: 1px solid __border__;
+}
+
+/* ---------- table of contents ------------------- */
+
+div.dokuwiki div.toc {
+ margin: 1.2em 0 0 2em;
+ float: right;
+ width: 200px;
+ font-size: 80%;
+ clear: both;
+}
+
+div.dokuwiki div.tocheader {
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+ text-align: left;
+ font-weight: bold;
+ padding: 3px;
+ margin-bottom: 2px;
+}
+
+div.dokuwiki span.toc_open,
+div.dokuwiki span.toc_close {
+ border: 0.4em solid __background_alt__;
+ float: right;
+ display: block;
+ margin: 0.4em 3px 0 0;
+}
+
+div.dokuwiki span.toc_open span,
+div.dokuwiki span.toc_close span {
+ display: none;
+}
+
+div.dokuwiki span.toc_open {
+ margin-top: 0.4em;
+ border-top: 0.4em solid __text__;
+}
+
+div.dokuwiki span.toc_close {
+ margin-top: 0;
+ border-bottom: 0.4em solid __text__;
+}
+
+div.dokuwiki #toc__inside {
+ border: 1px solid __border__;
+ background-color: __background__;
+ text-align: left;
+ padding: 0.5em 0 0.7em 0;
+}
+
+div.dokuwiki ul.toc {
+ list-style-type: none;
+ list-style-image: none;
+ line-height: 1.2em;
+ padding-left: 1em;
+ margin: 0;
+}
+
+div.dokuwiki ul.toc li {
+ background: transparent url(images/tocdot2.gif) 0 0.6em no-repeat;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki ul.toc li.clear {
+ background-image: none;
+ padding-left: 0.4em;
+}
+
+div.dokuwiki a.toc:link,
+div.dokuwiki a.toc:visited {
+ color: __extern__;
+}
+
+div.dokuwiki a.toc:hover,
+div.dokuwiki a.toc:active {
+ color: __text__;
+}
+
+/* ---------------------------- Diff rendering --------------------------*/
+div.dokuwiki table.diff {
+ background-color: __background__;
+ width: 100%;
+}
+div.dokuwiki td.diff-blockheader {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th {
+ border-bottom: 1px solid __border__;
+ font-size: 110%;
+ width: 50%;
+ font-weight: normal;
+ text-align: left;
+}
+div.dokuwiki table.diff th a {
+ font-weight: bold;
+}
+div.dokuwiki table.diff th span.user {
+ color: __text__;
+ font-size: 80%;
+}
+div.dokuwiki table.diff th span.sum {
+ font-size: 80%;
+ font-weight: bold;
+}
+div.dokuwiki table.diff th.minor {
+ font-style: italic;
+}
+div.dokuwiki table.diff td {
+ font-family: monospace;
+ font-size: 100%;
+}
+div.dokuwiki td.diff-addedline {
+ background-color: #ddffdd;
+}
+div.dokuwiki td.diff-deletedline {
+ background-color: #ffffbb;
+}
+div.dokuwiki td.diff-context {
+ background-color: __background_neu__;
+}
+div.dokuwiki table.diff td.diff-addedline strong,
+div.dokuwiki table.diff td.diff-deletedline strong {
+ color: red;
+}
+
+/* --------------------- footnotes -------------------------------- */
+
+div.dokuwiki div.footnotes {
+ clear: both;
+ border-top: 1px solid __border__;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.dokuwiki div.fn {
+ font-size: 90%;
+}
+
+div.dokuwiki a.fn_bot {
+ font-weight: bold;
+}
+
+/* insitu-footnotes */
+div.insitu-footnote {
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+ max-width: 40%; /* IE's width is handled in javascript */
+}
+
+/* overcome IE issue with one line code or file boxes which require h. scrolling */
+* html .insitu-footnote pre.code,
+* html .insitu-footnote pre.file {
+ padding-bottom: 18px;
+}
+
+/* --------------- search result formating --------------- */
+div.dokuwiki .search_result {
+ margin-bottom: 6px;
+ padding: 0 10px 0 30px;
+}
+
+div.dokuwiki .search_snippet {
+ color: __text_other__;
+ font-size: 12px;
+ margin-left: 20px;
+}
+
+div.dokuwiki .search_sep {
+ color: __text__;
+}
+
+div.dokuwiki .search_hit {
+ color: __text__;
+ background-color: __highlight__;
+}
+div.dokuwiki strong.search_hit {
+ font-weight: normal;
+}
+
+div.dokuwiki div.search_quickresult {
+ margin: 0 0 15px 30px;
+ padding: 0 10px 10px 0;
+ border-bottom: 1px dashed __border__;
+}
+div.dokuwiki div.search_quickresult h3 {
+ margin: 0 0 1.0em 0;
+ font-size: 1em;
+ font-weight: bold;
+}
+
+div.dokuwiki ul.search_quickhits {
+ margin: 0 0 0.5em 1.0em;
+}
+
+div.dokuwiki ul.search_quickhits li {
+ margin: 0 1.0em 0 1.0em;
+ float: left;
+ width: 30%;
+}
+
+div.dokuwiki div.section_highlight {
+ background-color: __background_alt__;
+}
+
+/* ------------------ Additional ---------------------- */
+
+div.footerinc {
+ text-align: center;
+}
+.footerinc a img {
+ opacity: 0.5;
+ border: 0;
+}
+
+.footerinc a:hover img {
+ opacity: 1;
+}
+
+/* ---------- AJAX quicksearch ----------- */
+
+div.dokuwiki div.ajax_qsearch {
+ position: absolute;
+ right: 237px;;
+ width: 200px;
+ opacity: 0.9;
+ display: none;
+ font-size: 80%;
+ line-height: 1.2em;
+ border: 1px solid __border__;
+ background-color: __background_other__;
+ text-align: left;
+ padding: 4px;
+}
+
+/* --------- Toolbar -------------------- */
+button.toolbutton {
+ background-color: __background__;
+ padding: 0px;
+ margin: 0 1px 0 0;
+ border: 1px solid __border__;
+ cursor: pointer;
+}
+
+/* nice alphatransparency background except for IE <7 */
+html>body button.toolbutton {
+ background: __background__ url(images/buttonshadow.png) repeat-x bottom;
+}
+
+div.picker {
+ width: 250px;
+ border: 1px solid __border__;
+ background-color: __background_alt__;
+}
+
+div.pk_hl {
+ width: 125px;
+}
+
+button.pickerbutton {
+ padding: 0px;
+ margin: 0 1px 1px 0;
+ border: 0;
+ background-color: transparent;
+ font-size: 80%;
+ cursor: pointer;
+}
+
+/* --------------- Image Details ----------------- */
+
+div.dokuwiki div.img_big {
+ float: left;
+ margin-right: 0.5em;
+}
+
+div.dokuwiki dl.img_tags dt {
+ font-weight: bold;
+ background-color: __background_alt__;
+}
+div.dokuwiki dl.img_tags dd {
+ background-color: __background_neu__;
+}
+
+div.dokuwiki div.imagemeta {
+ color: __text_neu__;
+ font-size: 70%;
+ line-height: 95%;
+}
+
+div.dokuwiki div.imagemeta img.thumb {
+ float: left;
+ margin-right: 0.1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php
new file mode 100644
index 000000000..4f42b116e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * DokuWiki Image Detail Template
+ *
+ * This is the template for displaying image details
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+?>
+<!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" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+
+ <?php tpl_metaheaders()?>
+
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="page">
+ <?php if($ERROR){ print $ERROR; }else{ ?>
+
+ <h1><?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?></h1>
+
+ <div class="img_big">
+ <?php tpl_img(900,700) ?>
+ </div>
+
+ <div class="img_detail">
+ <p class="img_caption">
+ <?php print nl2br(hsc(tpl_img_getTag('simple.title'))); ?>
+ </p>
+
+ <p>&larr; <?php echo $lang['img_backto']?> <?php tpl_pagelink($ID)?></p>
+
+ <dl class="img_tags">
+ <?php
+ $t = tpl_img_getTag('Date.EarliestTime');
+ if($t) print '<dt>'.$lang['img_date'].':</dt><dd>'.dformat($t).'</dd>';
+
+ $t = tpl_img_getTag('File.Name');
+ if($t) print '<dt>'.$lang['img_fname'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.Byline','Exif.TIFFArtist','Exif.Artist','Iptc.Credit'));
+ if($t) print '<dt>'.$lang['img_artist'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('Iptc.CopyrightNotice','Exif.TIFFCopyright','Exif.Copyright'));
+ if($t) print '<dt>'.$lang['img_copyr'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.Format');
+ if($t) print '<dt>'.$lang['img_format'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('File.NiceSize');
+ if($t) print '<dt>'.$lang['img_fsize'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag('Simple.Camera');
+ if($t) print '<dt>'.$lang['img_camera'].':</dt><dd>'.hsc($t).'</dd>';
+
+ $t = tpl_img_getTag(array('IPTC.Keywords','IPTC.Category','xmp.dc:subject'));
+ if($t) print '<dt>'.$lang['img_keywords'].':</dt><dd>'.hsc($t).'</dd>';
+
+ ?>
+ </dl>
+ <?php //Comment in for Debug// dbg(tpl_img_getTag('Simple.Raw'));?>
+ </div>
+
+ <?php } ?>
+ </div>
+</div>
+</body>
+</html>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html
new file mode 100644
index 000000000..38aab7216
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Example footer include
+ *
+ * This file shows you how to use the include hooks. However I recommend to
+ * create your own complete new template instead.
+ */
+
+$tgt = ($conf['target']['extern']) ? 'target="'.$conf['target']['extern'].'"' : '';
+?>
+
+<div class="footerinc">
+
+ <a <?php echo $tgt?> href="<?php echo DOKU_BASE; ?>feed.php" title="Recent changes RSS feed"><img src="<?php echo DOKU_TPL; ?>images/button-rss.png" width="80" height="15" alt="Recent changes RSS feed" /></a>
+
+ <?php
+ $lic = license_img('button');
+ if($lic){
+ ?>
+ <a <?php echo $tgt?> href="<?php echo $license[$conf['license']]['url']?>" rel="license" title="<?php echo $license[$conf['license']]['name']?>"><img src="<?php echo DOKU_BASE.$lic ?>" width="80" height="15" alt="" /></a>
+ <?php } ?>
+
+ <a <?php echo $tgt?> href="http://www.dokuwiki.org/donate" title="Donate"><img src="<?php echo DOKU_TPL; ?>images/button-donate.gif" alt="Donate" width="80" height="15" /></a>
+
+ <a <?php echo $tgt?> href="http://www.php.net" title="Powered by PHP"><img src="<?php echo DOKU_TPL; ?>images/button-php.gif" width="80" height="15" alt="Powered by PHP" /></a>
+
+ <a <?php echo $tgt?> href="http://validator.w3.org/check/referer" title="Valid XHTML 1.0"><img src="<?php echo DOKU_TPL; ?>images/button-xhtml.png" width="80" height="15" alt="Valid XHTML 1.0" /></a>
+
+ <a <?php echo $tgt?> href="http://jigsaw.w3.org/css-validator/check/referer?profile=css3" title="Valid CSS"><img src="<?php echo DOKU_TPL; ?>images/button-css.png" width="80" height="15" alt="Valid CSS" /></a>
+
+ <a <?php echo $tgt?> href="http://dokuwiki.org/" title="Driven by DokuWiki"><img src="<?php echo DOKU_TPL; ?>images/button-dw.png" width="80" height="15" alt="Driven by DokuWiki" /></a>
+
+<?php
+if ($conf['allowdebug']) {
+ echo '<!-- page made in '.round(delta_time(DOKU_START_TIME), 3).' seconds -->';
+}
+?>
+
+
+</div>
+<?php include(dirname(__FILE__).'/dwtb.html') ?>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png
new file mode 100644
index 000000000..ea03aec94
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png
new file mode 100644
index 000000000..212444f0e
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif
new file mode 100644
index 000000000..b43de48a4
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif
new file mode 100644
index 000000000..5861d637f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png
new file mode 100644
index 000000000..706325e1c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif
new file mode 100644
index 000000000..bba284e21
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png
new file mode 100644
index 000000000..39d5f56a9
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif
new file mode 100644
index 000000000..19aefb08f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png
new file mode 100644
index 000000000..b036f7152
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png
new file mode 100644
index 000000000..ec686442c
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png
new file mode 100644
index 000000000..f60be309f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif
new file mode 100644
index 000000000..8414d4d69
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico
new file mode 100644
index 000000000..8b9616abb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png
new file mode 100644
index 000000000..d286beb22
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif
new file mode 100644
index 000000000..815ccb1b1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif
new file mode 100644
index 000000000..50a87a9a0
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif
new file mode 100644
index 000000000..f5d5c7e56
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif
new file mode 100644
index 000000000..3d39c2e73
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif
new file mode 100644
index 000000000..4f12acce1
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css
new file mode 100644
index 000000000..ded2d87a2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css
@@ -0,0 +1,79 @@
+/**
+ * Tableless Layout for default template
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author moraes <moraes@tipos.com.br>
+ */
+
+/* -------------- top row --------------- */
+div.dokuwiki .header {
+ padding: 3px 0 0 2px;
+}
+
+div.dokuwiki .pagename {
+ float: left;
+ font-size: 200%;
+ font-weight: bolder;
+ color: __background_alt__;
+ text-align: left;
+ vertical-align: middle;
+}
+
+div.dokuwiki .pagename a {
+ color: __extern__ !important;
+ text-decoration: none !important;
+}
+
+div.dokuwiki .logo {
+ float: right;
+ font-size: 220%;
+ font-weight: bolder;
+ text-align: right;
+ vertical-align: middle;
+}
+
+div.dokuwiki .logo a {
+ color: __background_alt__ !important;
+ text-decoration: none !important;
+ font-variant: small-caps;
+ letter-spacing: 2pt;
+}
+
+/* --------------- top and bottom bar ---------------- */
+div.dokuwiki .bar {
+ border-top: 1px solid __border__;
+ border-bottom: 1px solid __border__;
+ background: __background_alt__;
+ padding: 0.1em 0.15em;
+ clear: both;
+}
+
+div.dokuwiki .bar-left {
+ float: left;
+}
+
+div.dokuwiki .bar-right {
+ float: right;
+ text-align: right;
+}
+
+div.dokuwiki #bar__bottom {
+ margin-bottom: 3px;
+}
+
+/* ------------- File Metadata ----------------------- */
+
+div.dokuwiki div.meta {
+ clear: both;
+ margin-top: 1em;
+ color: __text_alt__;
+ font-size: 70%;
+}
+
+div.dokuwiki div.meta div.user {
+ float: left;
+}
+
+div.dokuwiki div.meta div.doc {
+ text-align: right;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php
new file mode 100644
index 000000000..be03b3be2
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template you need to change for the overall look
+ * of DokuWiki.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+ob_start();
+
+include(dirname(__FILE__).'/main_index.php');
+
+$content = ob_get_clean();
+
+echo $content;
+
+?>
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php
new file mode 100644
index 000000000..976d139ce
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template you need to change for the overall look
+ * of DokuWiki.
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+
+// must be run from within DokuWiki
+if (!defined('DOKU_INC')) die();
+
+?>
+ <?php tpl_metaheaders()?>
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/meta.html')?>
+
+<?php /*old includehook*/ @include(dirname(__FILE__).'/topheader.html')?>
+<div class="dokuwiki">
+ <?php html_msgarea()?>
+
+ <div class="stylehead">
+
+ <div class="header">
+ <div class="pagename">
+ [[<?php tpl_link(wl($ID,'do=backlink'),tpl_pagetitle($ID,true),'title="'.$lang['btn_backlink'].'"')?>]]
+ </div>
+ <div class="logo">
+ <?php tpl_link(wl(),$conf['title'],'name="dokuwiki__top" id="dokuwiki__top" accesskey="h" title="[H]"')?>
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/header.html')?>
+
+ <div class="bar" id="bar__top">
+ <div class="bar-left" id="bar__topleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ </div>
+
+ <div class="bar-right" id="bar__topright">
+ <?php tpl_button('recent')?>
+ <?php tpl_searchform()?>&nbsp;
+ </div>
+
+ <div class="clearer"></div>
+ </div>
+
+ <?php if($conf['breadcrumbs']){?>
+ <div class="breadcrumbs">
+ <?php tpl_breadcrumbs()?>
+ <?php //tpl_youarehere() //(some people prefer this)?>
+ </div>
+ <?php }?>
+
+ <?php if($conf['youarehere']){?>
+ <div class="breadcrumbs">
+ <?php tpl_youarehere() ?>
+ </div>
+ <?php }?>
+
+ </div>
+ <?php flush()?>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pageheader.html')?>
+
+ <div class="page">
+ <!-- wikipage start -->
+ <?php tpl_content()?>
+ <!-- wikipage stop -->
+ </div>
+
+ <div class="clearer">&nbsp;</div>
+
+ <?php flush()?>
+
+ <div class="stylefoot">
+
+ <div class="meta">
+ <div class="user">
+ <?php tpl_userinfo()?>
+ </div>
+ <div class="doc">
+ <?php tpl_pageinfo()?>
+ </div>
+ </div>
+
+ <?php /*old includehook*/ @include(dirname(__FILE__).'/pagefooter.html')?>
+
+ <div class="bar" id="bar__bottom">
+ <div class="bar-left" id="bar__bottomleft">
+ <?php tpl_button('edit')?>
+ <?php tpl_button('history')?>
+ <?php tpl_button('revert')?>
+ </div>
+ <div class="bar-right" id="bar__bottomright">
+ <?php tpl_button('subscribe')?>
+ <?php tpl_button('subscribens')?>
+ <?php tpl_button('admin')?>
+ <?php tpl_button('profile')?>
+ <?php tpl_button('login')?>
+ <?php tpl_button('index')?>
+ <?php tpl_button('top')?>&nbsp;
+ </div>
+ <div class="clearer"></div>
+ </div>
+
+ </div>
+
+ <?php tpl_license(false);?>
+
+</div>
+<?php /*old includehook*/ @include(dirname(__FILE__).'/footer.html')?>
+
+<div class="no"><?php /* provide DokuWiki housekeeping, required in all templates */ tpl_indexerWebBug()?></div>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css
new file mode 100644
index 000000000..2831c984f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css
@@ -0,0 +1,205 @@
+/**
+ * The CSS in here cotrols the appearance of the media manager
+ */
+
+#media__manager {
+ height: 100%;
+ overflow: hidden;
+}
+
+#media__left {
+ width: 30%;
+ border-right: solid 1px __border__;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ left: 0;
+}
+
+#media__right {
+ width: 69.7%;
+
+ height: 100%;
+ overflow: auto;
+ position: absolute;
+ right: 0;
+}
+
+#media__manager h1 {
+ margin: 0;
+ padding: 0;
+ margin-bottom: 0.5em;
+}
+
+/* --- Tree formatting --- */
+
+#media__tree img {
+ float: left;
+ padding: 0.5em 0.3em 0 0;
+}
+
+#media__tree ul {
+ list-style-type: none;
+ list-style-image: none;
+ margin-left: 1.5em;
+}
+
+#media__tree li {
+ clear: left;
+ list-style-type: none;
+ list-style-image: none;
+}
+*+html #media__tree li,
+* html #media__tree li {
+ border: 1px solid __background__;
+}/* I don't understand this, but this fixes a style bug in IE;
+it's dirty, so any "real" fixes are welcome */
+
+/* --- options --- */
+
+#media__opts {
+ padding-left: 1em;
+ margin-bottom: 0.5em;
+}
+
+#media__opts input {
+ float: left;
+ display: block;
+ margin-top: 4px;
+ position: absolute;
+}
+*+html #media__opts input,
+* html #media__opts input {
+ position: static;
+}
+
+#media__opts label {
+ display: block;
+ float: left;
+ margin-left: 20px;
+ margin-bottom: 4px;
+}
+*+html #media__opts label,
+* html #media__opts label {
+ margin-left: 10px;
+}
+
+#media__opts br {
+ clear: left;
+}
+
+/* --- file list --- */
+
+#media__content img.load {
+ margin: 1em auto;
+}
+
+#media__content #scroll__here {
+ border: 1px dashed __border__;
+}
+
+#media__content .odd {
+ background-color: __background_other__;
+ padding: 0.4em;
+}
+
+#media__content .even {
+ padding: 0.4em;
+}
+
+#media__content a.mediafile {
+ margin-right: 1.5em;
+ font-weight: bold;
+}
+
+#media__content div.detail {
+ padding: 0.3em 0 0.3em 2em;
+}
+
+#media__content div.detail div.thumb {
+ float: left;
+ width: 130px;
+ text-align: center;
+ margin-right: 0.4em;
+}
+
+
+#media__content img.btn {
+ vertical-align: text-bottom;
+}
+
+#media__content div.example {
+ color: __text_neu__;
+ margin-left: 1em;
+}
+
+/* --- upload form --- */
+
+#media__content div.upload {
+ font-size: 90%;
+ padding: 0 0.5em 0.5em 0.5em;
+}
+
+#media__content form#dw__upload,
+#media__content div#dw__flashupload {
+ display: block;
+ border-bottom: solid 1px __border__;
+ padding: 0 0.5em 1em 0.5em;
+}
+#media__content form#dw__upload fieldset {
+ padding: 0;
+ margin: 0;
+ border: none;
+ width: auto;
+}
+#media__content form#dw__upload p {
+ text-align: left;
+ padding: 0.25em 0;
+ margin: 0;
+ line-height: 1.0em;
+}
+#media__content form#dw__upload label.check {
+ float: none;
+ width: auto;
+ margin-left: 11.5em;
+}
+
+/* --- meta edit form --- */
+
+#media__content form.meta {
+ display: block;
+ padding: 0 0 1em 0;
+}
+
+#media__content form.meta label {
+ display: block;
+ width: 25%;
+ float: left;
+ font-weight: bold;
+ margin-left: 1em;
+ clear: left;
+}
+
+#media__content form.meta .edit {
+ font: 100% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ float: left;
+ width: 70%;
+ padding-right: 0;
+ padding-left: 0.2em;
+ margin: 2px;
+}
+
+#media__content form.meta textarea.edit {
+ height: 8em;
+}
+
+#media__content form.meta div.metafield {
+ clear: left;
+}
+
+#media__content form.meta div.buttons {
+ clear: left;
+ margin-left: 20%;
+ padding-left: 1em;
+}
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php
new file mode 100644
index 000000000..7b7fe8675
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php
@@ -0,0 +1,44 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?php
+/**
+ * DokuWiki Default Template
+ *
+ * This is the template for the media manager popup
+ *
+ * You should leave the doctype at the very top - It should
+ * always be the very first line of a document.
+ *
+ * @link http://dokuwiki.org/templates
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>" lang="<?php echo $conf['lang']?>" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>
+ <?php echo hsc($lang['mediaselect'])?>
+ [<?php echo strip_tags($conf['title'])?>]
+ </title>
+ <?php tpl_metaheaders()?>
+ <link rel="shortcut icon" href="<?php echo DOKU_TPL?>images/favicon.ico" />
+</head>
+
+<body>
+<div id="media__manager" class="dokuwiki">
+ <div id="media__left">
+ <?php html_msgarea()?>
+ <h1><?php echo hsc($lang['mediaselect'])?></h1>
+
+ <?php /* keep the id! additional elements are inserted via JS here */?>
+ <div id="media__opts"></div>
+
+ <?php tpl_mediaTree() ?>
+ </div>
+
+ <div id="media__right">
+ <?php tpl_mediaContent() ?>
+ </div>
+</div>
+</body>
+</html>
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css
new file mode 100644
index 000000000..1d6e0756f
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css
@@ -0,0 +1,238 @@
+
+body {
+ font: 10pt "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ background-color: White;
+ color: Black;
+}
+
+table {
+ font-size: 100%;
+ padding: 0;
+ margin: 0;
+}
+
+tr,td,th { padding: 0; margin: 0; }
+
+img { border: 0; }
+
+a {
+ color: #000000;
+ text-decoration: none;
+ background: none !important;
+}
+
+
+div.meta {
+ clear: both;
+ margin-top: 1em;
+ font-size: 70%;
+ text-align: right;
+}
+
+
+div.notify,
+div.info,
+div.success,
+div.error,
+div.breadcrumbs,
+div.secedit {
+ display: none;
+}
+
+/* --------------------- Text formating -------------------------------- */
+
+/* external link */
+a.urlextern:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* interwiki link */
+a.interwiki:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* email link */
+a.mail:after {
+ content: " [" attr(href) "]";
+ font-size: 90%;
+}
+
+/* existing wikilink */
+a.wikilink1 { text-decoration: underline; }
+
+/* the document */
+div.page {
+ text-align: justify;
+}
+
+/* general headline setup */
+h1, h2, h3, h4, h5 {
+ color: Black;
+ background-color: transparent;
+ font-family: "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif;
+ font-size: 100%;
+ font-weight: normal;
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 1em;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0.5em;
+ padding-bottom: 0;
+ border-bottom: 1px solid #000000;
+ clear: left;
+}
+
+/* special headlines */
+h1 { font-size: 160%; font-weight: bold; }
+h2 { font-size: 150%; }
+h3 { font-size: 140%; border-bottom: none; }
+h4 { font-size: 120%; border-bottom: none; }
+h5 { font-size: 100%; border-bottom: none; }
+
+/* embedded images */
+img.media {
+ margin: 3px;
+}
+
+img.medialeft {
+ border: 0;
+ float: left;
+ margin: 0 1.5em 0 0;
+}
+
+img.mediaright {
+ border: 0;
+ float: right;
+ margin: 0 0 0 1.5em;
+}
+
+/* unordered lists */
+ul {
+ line-height: 1.5em;
+ list-style-type: square;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+}
+
+/* ordered lists */
+ol {
+ line-height: 1.5em;
+ margin: 0 0 1em 3.5em;
+ padding: 0;
+ font-weight: normal;
+}
+
+div.dokuwiki li ul {
+ margin-bottom: 0;
+}
+div.dokuwiki li ol {
+ margin-bottom: 0;
+}
+
+div.dokuwiki ol { list-style-type: decimal; }
+div.dokuwiki ol ol { list-style-type: upper-roman; }
+div.dokuwiki ol ol ol { list-style-type: lower-alpha; }
+div.dokuwiki ol ol ol ol { list-style-type: lower-greek; }
+
+/* the list items overriding the ol definition */
+span.li {
+ font-weight: normal;
+}
+
+/* code blocks by indention */
+pre.pre {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* code blocks by code tag */
+pre.code {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dashed #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* inline code words */
+code {
+ font-size: 120%;
+}
+
+/* code blocks by file tag */
+pre.file {
+ font-size: 8pt;
+ padding: 0.5em;
+ border: 1px dotted #000000;
+ color: Black;
+ overflow: visible;
+}
+
+/* footnotes */
+div.footnotes {
+ clear: both;
+ border-top: 1px solid #000000;
+ padding-left: 1em;
+ margin-top: 1em;
+}
+
+div.fn {
+ font-size: 90%;
+}
+
+a.fn_top {
+ vertical-align: super;
+ font-size: 80%;
+}
+
+a.fn_bot {
+ vertical-align: super;
+ font-size: 80%;
+ font-weight: bold;
+}
+
+acronym {
+ border: 0;
+}
+
+/* ---------- inline tables ------------------- */
+
+table.inline {
+ font-size: 80%;
+ background-color: #ffffff;
+ border-spacing: 0px;
+ border-collapse: collapse;
+}
+
+table.inline th {
+ padding: 3px;
+ border: 1px solid #000000;
+ border-bottom: 2px solid #000000;
+}
+
+table.inline td {
+ padding: 3px;
+ border: 1px solid #000000;
+}
+
+.leftalign {
+ text-align: left;
+}
+
+.centeralign {
+ text-align: center;
+}
+
+.rightalign {
+ text-align: right;
+}
+
+.toc, .footerinc, .header, .bar, .user { display: none; }
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css
new file mode 100644
index 000000000..af3793f7d
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css
@@ -0,0 +1,119 @@
+/**
+ * Layout and dedsign corrections for right-to-left languages
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Dotan Kamber <kamberd@yahoo.com>
+ */
+
+.bar-left {
+ float: right;
+ text-align: right;
+}
+
+.bar-right {
+ float: left;
+ text-align: left;
+}
+
+.pagename {
+ float: right;
+ text-align: right;
+}
+
+.logo {
+ float: left;
+ text-align: left;
+}
+
+label {
+ text-align: left;
+}
+
+label.simple {
+ text-align: right;
+}
+
+div.meta div.user {
+ float: right;
+}
+
+div.meta div.doc {
+ text-align: left;
+}
+
+/* ------------------ Design corrections --------------------------------- */
+
+div.dokuwiki ul,
+div.dokuwiki ol {
+ margin: 0.5em 1.5em 0.5em 0;
+}
+
+div.dokuwiki a.urlextern,
+div.dokuwiki a.interwiki,
+div.dokuwiki a.windows,
+div.dokuwiki a.mail,
+div.dokuwiki a.mail.JSnocheck {
+ /* should work but doesn't - so we just disable icons here*/
+ /*
+ background-position: right 1px;
+ padding-right: 16px;
+ */
+ background-image: none !important;
+ padding: 0px 0px 0px 0px;
+}
+
+div.dokuwiki div.secedit input.button {
+ float: left;
+}
+
+/* headlines */
+div.dokuwiki h1, div.dokuwiki h2, div.dokuwiki h3, div.dokuwiki h4, div.dokuwiki h5 {
+ clear: right;
+}
+
+/* special headlines */
+div.dokuwiki h1 { margin-left: 0px; margin-right: 0px; }
+div.dokuwiki h2 { margin-left: 0px; margin-right: 20px; }
+div.dokuwiki h3 { margin-left: 0px; margin-right: 40px; }
+div.dokuwiki h4 { margin-left: 0px; margin-right: 60px; }
+div.dokuwiki h5 { margin-left: 0px; margin-right: 80px; }
+
+/* indent different sections */
+div.dokuwiki div.level1 { margin-left: 0px; margin-right: 3px; }
+div.dokuwiki div.level2 { margin-left: 0px; margin-right: 23px; }
+div.dokuwiki div.level3 { margin-left: 0px; margin-right: 43px; }
+div.dokuwiki div.level4 { margin-left: 0px; margin-right: 63px; }
+div.dokuwiki div.level5 { margin-left: 0px; margin-right: 83px; }
+
+/* TOC control */
+div.dokuwiki div.toc {
+ float: left;
+}
+
+div.dokuwiki div.tocheader {
+ text-align: right;
+}
+
+div.dokuwiki #toc__inside {
+ text-align: right;
+}
+
+div.dokuwiki ul.toc {
+ padding: 0;
+ padding-right: 1em;
+}
+
+div.dokuwiki ul.toc li {
+ background-position: right 0.6em;
+ padding-right: 0.4em;
+ direction: rtl;
+}
+
+div.dokuwiki ul.toc li.clear {
+ padding-right: 0.4em;
+}
+
+div.dokuwiki pre {
+ text-align: left;
+}
+
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini
new file mode 100644
index 000000000..dfd5500fa
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini
@@ -0,0 +1,67 @@
+; Please see http://www.php.net/manual/en/function.parse-ini-file.php
+; for limitations of the ini format used here
+
+; Define the stylesheets your template uses here. The second value
+; defines for which output media the style should be loaded. Currently
+; print, screen and rtl are supported. rtl styles are loaded additionally
+; to screen styles if a right-to-left language is selected (eg. hebrew)
+[stylesheets]
+layout.css = screen
+design.css = screen
+style.css = screen
+
+media.css = screen
+_admin.css = screen
+_linkwiz.css = screen
+
+rtl.css = rtl
+print.css = print
+
+; This section is used to configure some placeholder values used in
+; the stylesheets. Changing this file is the simplest method to
+; give your wiki a new look.
+[replacements]
+
+;--------------------------------------------------------------------------
+;------ guaranteed dokuwiki color placeholders that every plugin can use
+; main text and background colors
+__text__ = "#000"
+__background__ = "#fff"
+; alternative text and background colors
+__text_alt__ = "#638c9c"
+__background_alt__ = "#dee7ec"
+; neutral text and background colors
+__text_neu__ = "#666"
+__background_neu__ = "#f5f5f5"
+; border color
+__border__ = "#8cacbb"
+;--------------------------------------------------------------------------
+
+; other text and background colors
+__text_other__ = "#ccc"
+__background_other__ = "#f7f9fa"
+
+; these are used for links
+__extern__ = "#436976"
+__existing__ = "#090"
+__missing__ = "#f30"
+
+; highlighting search snippets
+__highlight__ = "#ff9"
+
+
+;--------------------------------------------------------------------------
+;------ for keeping old templates and plugins compatible to the old pattern
+; (to be deleted at the next or after next release)
+__white__ = "#fff"
+__lightgray__ = "#f5f5f5"
+__mediumgray__ = "#ccc"
+__darkgray__ = "#666"
+__black__ = "#000"
+
+; these are the shades of blue
+__lighter__ = "#f7f9fa"
+__light__ = "#eef3f8"
+__medium__ = "#dee7ec"
+__dark__ = "#8cacbb"
+__darker__ = "#638c9c"
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php
new file mode 100644
index 000000000..a55081738
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * This file reads the style.ini of the used template and displays the
+ * replacements defined in it. Color replacements will be displayed
+ * visually. This should help with adjusting and using the styles
+ * specified in the style.ini
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Anika Henke <anika@selfthinker.org>
+ */
+?>
+<!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" xml:lang="en" lang="en" dir="ltr">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Template Replacements</title>
+ <style type="text/css">
+ body {
+ background-color: #fff;
+ color: #000;
+ }
+ caption {
+ font-weight: bold;
+ }
+ td {
+ margin: 0;
+ padding: 0.5em 2em;
+ font-family: monospace;
+ font-size: 120%;
+ border: 1px solid #fff;
+ }
+ tr:hover td {
+ border: 1px solid #ccc;
+ }
+ .color {
+ padding: 0.25em 1em;
+ border: 1px #000 solid;
+ }
+ </style>
+</head>
+<body>
+<?php
+if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
+require_once(DOKU_INC.'inc/init.php');
+
+$ini = @parse_ini_file($conf['template'].'/style.ini',true);
+if ($ini) {
+ echo '<table>';
+ echo "<caption>".htmlspecialchars($conf['template'])."'s style.ini</caption>";
+ foreach($ini['replacements'] as $key => $val){
+ echo '<tr>';
+ echo '<td>'.htmlspecialchars($key).'</td>';
+ echo '<td>'.htmlspecialchars($val).'</td>';
+ echo '<td>';
+ if(preg_match('/^#[0-f]{3,6}$/i',$val)){
+ echo '<div class="color" style="background-color:'.$val.';">&nbsp;</div>';
+ }
+ echo '</td>';
+ echo '</tr>';
+ }
+ echo '</table>';
+} else {
+ echo "<p>Non-existent template: <strong>".htmlspecialchars($conf['template'])."</strong></p>";
+}
+?>
+</body>
+</html>
diff --git a/mod/dokuwiki/views/default/dokuwiki/css.php b/mod/dokuwiki/views/default/dokuwiki/css.php
new file mode 100644
index 000000000..6753e79dc
--- /dev/null
+++ b/mod/dokuwiki/views/default/dokuwiki/css.php
@@ -0,0 +1,12 @@
+div.dokuwiki input {
+ width: auto;
+}
+
+div.dokuwiki .header {
+ margin-bottom: 10px;
+}
+
+#sidebartop {
+ position: relative !important;
+ display: none;
+}
diff --git a/mod/dokuwiki/views/default/dokuwiki/grouppage.php b/mod/dokuwiki/views/default/dokuwiki/grouppage.php
new file mode 100644
index 000000000..c095dfa2a
--- /dev/null
+++ b/mod/dokuwiki/views/default/dokuwiki/grouppage.php
@@ -0,0 +1,9 @@
+<?php
+
+$group = elgg_get_page_owner_entity();
+if ($group->dokuwiki_enable == 'yes' && $group->dokuwiki_frontpage_enable == 'yes') {
+ set_input("inline_page", true);
+ dokuwiki_page_handler(array($group->guid));
+}
+
+?>
diff --git a/mod/dokuwiki/views/default/dokuwiki/index.php b/mod/dokuwiki/views/default/dokuwiki/index.php
new file mode 100644
index 000000000..424f1109b
--- /dev/null
+++ b/mod/dokuwiki/views/default/dokuwiki/index.php
@@ -0,0 +1,13 @@
+<?php
+ global $CONFIG;
+ $destfile = $CONFIG->pluginspath.'dokuwiki/vendors/dokuwiki/'.$vars['page'];
+ if (file_exists($destfile)) {
+ if (strpos($destfile, ".png") === FALSE)
+ {
+ include($destfile);
+ } else {
+ header("Content-type: image");
+ echo file_get_contents($destfile);
+ }
+ }
+?>
diff --git a/mod/dokuwiki/views/default/dokuwiki/metatags.php b/mod/dokuwiki/views/default/dokuwiki/metatags.php
new file mode 100644
index 000000000..50cb9041b
--- /dev/null
+++ b/mod/dokuwiki/views/default/dokuwiki/metatags.php
@@ -0,0 +1,5 @@
+<?php
+if (elgg_get_context() == "dokuwiki") {
+ tpl_metaheaders();
+}
+?>
diff --git a/mod/dokuwiki/views/default/dokuwiki/sidebar.php b/mod/dokuwiki/views/default/dokuwiki/sidebar.php
new file mode 100644
index 000000000..e9a7c89ab
--- /dev/null
+++ b/mod/dokuwiki/views/default/dokuwiki/sidebar.php
@@ -0,0 +1,10 @@
+<?php
+
+$group = elgg_get_page_owner_entity();
+if ($group->dokuwiki_enable == 'yes' && $group->dokuwiki_frontsidebar_enable == 'yes') {
+ set_input("inline_sidebar", true);
+ set_input("inline_page", false);
+ dokuwiki_page_handler(array($group->guid));
+ }
+
+?>
diff --git a/mod/dokuwiki/views/default/object/dokuwiki.php b/mod/dokuwiki/views/default/object/dokuwiki.php
new file mode 100644
index 000000000..12063b9da
--- /dev/null
+++ b/mod/dokuwiki/views/default/object/dokuwiki.php
@@ -0,0 +1,19 @@
+<?php
+ $entity = $vars['entity'];
+ $owner_guid = $entity->container_guid;
+ $owner = get_entity($owner_guid);
+
+ $icon = elgg_view_entity_icon($owner, 'tiny');
+
+ if ($owner) {
+ $directory = elgg_get_data_path()."wikis/".$owner_guid."/pages";
+ $filecount = count(glob("" . $directory . "/*"));
+ $list_body = "<h3><a href='".$entity->getURL()."'>".sprintf(elgg_echo('dokuwiki:wikifrom'),$owner->name)."</a></h3>";
+ $list_body .= sprintf(elgg_echo("dokuwiki:pages"), $filecount);
+ echo elgg_view_image_block($icon, $list_body);
+ }
+ else {
+ // shouldn't show wikis from groups you can't see :-P
+ echo elgg_view_image_block("", "");
+ }
+?>
diff --git a/mod/dokuwiki/views/default/river/dokuwiki.php b/mod/dokuwiki/views/default/river/dokuwiki.php
new file mode 100644
index 000000000..67e6f60e7
--- /dev/null
+++ b/mod/dokuwiki/views/default/river/dokuwiki.php
@@ -0,0 +1,17 @@
+<?php
+ // 'action_type'=>$action_type, 'subject_guid'=>$subject_guid, 'object_guid' =>$object_guid, 'item'=>$res
+ $user = get_entity($vars['item']->subject_guid);
+ $wiki = get_entity($vars['item']->object_guid);
+ $parts = explode("/", $vars['item']->action_type);
+ $id = $wiki->container_guid;
+ $namespace = "<a href='".$wiki->getURL()."?id=".$parts[2]."'>".$parts[2]."</a>";
+ if ($wiki_owner = get_entity($wiki->container_guid))
+ $wikifrom = sprintf(elgg_echo("dokuwiki:wikifrom"), $wiki_owner->name);
+ else
+ $wikifrom = elgg_echo("dokuwiki:sitewiki");
+ if ($wiki)
+ $wikiname = "<a href='".$wiki->getURL()."'>".$wikifrom."</a>";
+ if ($user)
+ $user_node = "<a href='".$user->getURL()."'>" . $user->name . "</a>";
+ echo sprintf(elgg_echo("dokuwiki:river:modified"), $user_node, $namespace, $wikiname);
+?>
diff --git a/mod/editablecomments b/mod/editablecomments
new file mode 160000
+Subproject b97df962cca29bf292d72c1f174fc6322e59e12
diff --git a/mod/elgg-favorites b/mod/elgg-favorites
new file mode 160000
+Subproject d96e69bd1365c3e3c4d998e72d9941ea1ea2278
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..1da35aa46
--- /dev/null
+++ b/mod/embed/start.php
@@ -0,0 +1,165 @@
+<?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_extend_view('css/admin', 'embed/css');
+
+ if (elgg_is_logged_in()) {
+ 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');
+
+ $embed_js = elgg_get_simplecache_url('js', 'embed/embed');
+ elgg_register_simplecache_view('js/embed/embed');
+ elgg_register_js('elgg.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';
+
+ $page_owner = elgg_get_page_owner_entity();
+ if (elgg_instanceof($page_owner, 'group') && $page_owner->isMember()) {
+ $url = 'embed?container_guid=' . $page_owner->getGUID();
+ }
+
+ $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) {
+ $container = get_entity($container_guid);
+
+ if (elgg_instanceof($container, 'group') && $container->isMember()) {
+ // embedding inside a group so save file to group files
+ 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..e84427f24
--- /dev/null
+++ b/mod/embed/views/default/js/embed/embed.php
@@ -0,0 +1,147 @@
+//<script>
+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();
+ }
+ }
+
+ // ie 7 and 8 have a null response because of the use of an iFrame
+ // so just show the list after upload.
+ // http://jquery.malsup.com/form/#file-upload claims you can wrap JSON
+ // in a textarea, but a quick test didn't work, and that is fairly
+ // intrusive to the rest of the ajax system.
+ else if (response === undefined && $.browser.msie) {
+ 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);
+ }
+ },
+ 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/event_calendar/CHANGES.txt b/mod/event_calendar/CHANGES.txt
new file mode 100644
index 000000000..269ede4ae
--- /dev/null
+++ b/mod/event_calendar/CHANGES.txt
@@ -0,0 +1,154 @@
+CHANGE LOG
+0.85
+
+First version for Elgg 1.8
+
+0.84
+
+Fixed tag search so it works for Elgg 1.7.x.
+
+Added French and Spanish language files provided by UNESCO. These are not
+quite complete and additions are welcome.
+
+There is now an option to allow group admins to add any existing event to a
+group calendar
+
+Fixed a bug which incorrectly removed the ability to change the date and year.
+
+Renamed a date picker view to avoid a conflict with the Profile Manager.
+
+Added unpacked js for ease in customisation and localisation.
+
+Restored the vanished RSS feed link.
+
+Fixed a bug in the region dropdown behaviour on listing pages.
+
+Fixed a case where the page was not properly displayed when clicking on a
+pagination link.
+
+Added a sanity check for date formats.
+
+Changed the listing limit from 4 events to a more reasonable 15 events.
+
+Added real_end_time as an internal metadata value to compute collisions.
+
+Added three features that are turned off by default but can be enabled
+through plugin settings:
+
+The spots feature allows you to specify how many users can add an event to
+their personal calendars. This also adds an "open" filter to the show events page
+so that you can see how many events are not full.
+
+The no collisions feature prevents someone from adding an event
+if they already have another event on their personal calendar within
+the same time period. (This will only work with new events or events that
+you have resaved after updating this plugin as it needs the new real_end_time
+field.)
+
+The add users feature provides a magic JavaScript field that
+allows an event creator to add the event to the personal calendars of other users.
+This appears on the event edit form. (Requires the separate autocomplete plugin.)
+
+There is a separate option (turned off by default) to send notifications to
+users who have events added to their calendars through the add users feature.
+
+0.83
+
+Fixed a bug that prevented region filtering with embedded blanks from
+working properly (thanks Patrick!).
+
+Added a new paged view for events (not month specific) that allows adding/removing events
+to a calendar with one click.
+
+Fixed some issues with the personal event calendar widget.
+
+0.82
+
+Fixed a bug in displaying dates when the start and end date were the same.
+
+Fixed the form redisplay bug described here:
+http://community.elgg.org/mod/groups/topicposts.php?topic=423853&group_guid=263011
+
+Removed an error_log message that was accidentally left in.
+
+Added RSS feeds.
+
+Added the ability to filter events by regions if the region option is turned on.
+
+Added security tokens for Elgg 1.7
+
+0.81
+
+Fixed a problem with the group "widget" not displaying when it should.
+
+Hid the "Today" link as it was not behaving as most people expected.
+
+Forced the display into Month mode after Prev and Next is clicked.
+
+0.8
+
+Removed a debugging message left in the event delete action.
+
+Sorted events properly by date/time rather than time created.
+
+Fixed an error in the parameters passed to elgg_view_entity_list that caused
+problems with Elgg 1.6.1.
+
+Added an admin toggle to allow event times as well as dates.
+
+Added an admin toggle to show the venue in event listings.
+
+Added an admin toggle for an agenda view which should be useful for conferences
+with multiple events on one day.
+
+Added the ability to "lock" the show_events page so that the calendar only
+allows navigation between a first date and a last date.
+
+Added an admin toggle for an autogroup function that automatically adds all
+group events to a user's calendar for all groups that the user is a member of.
+Group events are also automatically removed if the user leaves the group.
+
+Added an admin toggle to add a region drop down to the event form and a field to
+enter the allowable regions.
+
+0.7
+
+Reworked design for Elgg 1.5
+
+Fixed several bugs, including in the list of people who added an event to
+their personal calendar (now shows the proper group navigation if this is
+a group event).
+
+Added the ability to view all/friends/mine events for logged-in users.
+
+Added numerous configuration options (accessible via event_calendar settings
+on the admin tools configuration page). This allows, for example, any logged-in
+user to add events to the site calendar, to remove group calendars, etc.
+
+People who create an event now have the event automatically added to their
+personal event calendar. This behaviour can be configured via the admin event
+calendar settings.
+
+0.6
+
+Fixed a bug that prevented more than one person adding a given event to
+his/her personal calendar.
+
+Fixed a bug that made the page owner the person who created the event. This
+is now the group for group events, otherwise the currently logged in user.
+
+Added river support.
+
+0.51
+
+Fixed event overlap detection
+
+0.5
+
+Initial release
+
+
+
+
+
+
diff --git a/mod/event_calendar/CONTRIBUTIONS.txt b/mod/event_calendar/CONTRIBUTIONS.txt
new file mode 100644
index 000000000..edadc2407
--- /dev/null
+++ b/mod/event_calendar/CONTRIBUTIONS.txt
@@ -0,0 +1,7 @@
+Pete Harris from Curverider contributed the icons. Thanks Pete!
+
+Igor Nuk from UNESCO sent me Spanish and French language files as well
+as a version tweaked to make it easier to customise.
+
+Many clients too numerous to mention have funded enhancements since the
+original version was funded by the Royal Institute of British Architects. \ No newline at end of file
diff --git a/mod/event_calendar/README.txt b/mod/event_calendar/README.txt
new file mode 100644
index 000000000..fbfd172b0
--- /dev/null
+++ b/mod/event_calendar/README.txt
@@ -0,0 +1,89 @@
+THIS VERSION IS DEPRECATED. USE THE VERSION IN
+
+https://github.com/kevinjardine/Elgg-Event-Calendar/tree/full
+
+/**
+ * Manage and display events
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2008-2011
+ * @link http://radagast.biz/
+ *
+ */
+
+ Note: this README.txt file is a bit outdated because it does not describe numerous
+ recently added features. For more information, check the CHANGES.txt file
+ or look at the event calendar settings available through Tools Administration.
+
+Version: 0.85
+
+Requires: Elgg 1.8 or higher
+
+Should be installed in mod/event_calendar
+
+*Description*
+
+The event_calendar plugin adds a site-wide event calendar as well as
+an event calendar to each group. Various options related to the site and group
+calendars can be set using the event calendar settings on the tool
+administration page.
+
+Group members can view events by month, week and day using a jQuery date
+picker widget, and submit event descriptions including the venue, start date,
+end date, tags, description, organiser, contact person, event access level,
+and fees if any.
+
+Group events are aggregated into the site wide event calendar accessible from
+the Tools menu drop down.
+
+Site admins (or optionally any user) can also add non-group-specific events to
+the site-wide calendar.
+
+Users can add group or site-wide events to a personal calendar to showcase
+events that they plan to attend or are interested in. They can optionally
+display these events by dragging an Event calendar widget onto their profile
+or dashboard.
+
+The number of users who have added an event to their personal gallery is listed
+on each event page along with a link to a page that displays these users in a
+gallery format. It is thus easy to find other people interested in the same
+event.
+
+*Admin settings*
+
+Numerous options for the event calendar can be set in the event_calendar settings
+area under Tool Administration.
+
+These include:
+
+Add starting and ending times as well as dates to events (default: no)
+
+Automatically add events a user creates to his/her personal calendar (default: yes)
+
+Automatically add group events for all members to their personal calendars (default: no)
+
+(If activated, the autogroup function automatically adds all group events to a
+user's calendar for all groups that the user is a member of. Group events are
+also automatically removed if the user leaves the group.)
+
+Use Agenda view (default: no)
+
+Useful for conferences with multiple events on the same day.
+
+Display venue in event listings (default: no)
+
+Add region dropdown (default: no), plus a way to specify the allowable regions
+
+First date displayable on show events pages (default: no first date)
+
+Last date displayable on show events pages (default: no last date)
+
+As well, there are numerous options for configuring the site wide and group calendars.
+
+*Acknowledgment*
+
+The initial development of the event calendar plugin was funded by the Research
+& Development department at the Royal Institute of British Architects
+(RIBA). Several other clients have funded enhancements. \ No newline at end of file
diff --git a/mod/event_calendar/actions/event_calendar/add_personal.php b/mod/event_calendar/actions/event_calendar/add_personal.php
new file mode 100644
index 000000000..ed4eb3092
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/add_personal.php
@@ -0,0 +1,17 @@
+<?php
+elgg_load_library('elgg:event_calendar');
+
+$event_guid = get_input('guid',0);
+$event = get_entity($event_guid);
+if (elgg_instanceof($event,'object','event_calendar')) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ if (!event_calendar_has_personal_event($event_guid,$user_guid)) {
+ if (event_calendar_add_personal_event($event_guid,$user_guid)) {
+ system_message(elgg_echo('event_calendar:add_to_my_calendar_response'));
+ } else {
+ register_error(elgg_echo('event_calendar:add_to_my_calendar_error'));
+ }
+ }
+}
+
+forward(REFERER);
diff --git a/mod/event_calendar/actions/event_calendar/add_to_group.php b/mod/event_calendar/actions/event_calendar/add_to_group.php
new file mode 100644
index 000000000..b5eae4693
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/add_to_group.php
@@ -0,0 +1,10 @@
+<?php
+$event_id = get_input("event_id",0);
+$group_id = get_input("group_id",0);
+$event = get_entity($event_id);
+$group = get_entity($group_id);
+if ($group && $group->canEdit()) {
+ add_entity_relationship($event_id, "display_on_group", $group_id );
+ system_message(elgg_echo('event_calendar:add_to_group:success'));
+}
+forward($event->getUrl());
diff --git a/mod/event_calendar/actions/event_calendar/add_to_group_members.php b/mod/event_calendar/actions/event_calendar/add_to_group_members.php
new file mode 100644
index 000000000..d0d555b12
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/add_to_group_members.php
@@ -0,0 +1,15 @@
+<?php
+elgg_load_library('elgg:event_calendar');
+$event_guid = get_input("event_guid",0);
+$event = get_entity($event_guid);
+$group = get_entity($event->container_guid);
+if (elgg_instanceof($group,'group') && elgg_instanceof($event,'object','event_calendar') && $group->canEdit()) {
+ $members = $group->getMembers(0,0);
+ foreach($members as $member) {
+ event_calendar_add_personal_event($event->guid,$member->guid);
+ }
+ system_message(elgg_echo('event_calendar:add_to_group_members:success'));
+} else {
+ register_error(elgg_echo('event_calendar:add_to_group_members:error'));
+}
+forward("event_calendar/manage_users/$event_guid");
diff --git a/mod/event_calendar/actions/event_calendar/addtocalendar.php b/mod/event_calendar/actions/event_calendar/addtocalendar.php
new file mode 100644
index 000000000..0144dfba1
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/addtocalendar.php
@@ -0,0 +1,33 @@
+<?php
+// this action allows an admin or event owner to approve a calendar request
+
+elgg_load_library('elgg:event_calendar');
+
+$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid());
+$event_guid = get_input('event_guid');
+
+$user = get_entity($user_guid);
+$event = get_entity($event_guid);
+
+if (elgg_instanceof($event, 'object', 'event_calendar')
+ && elgg_instanceof($user, 'user')
+ && $event->canEdit()
+ && check_entity_relationship($user_guid, 'event_calendar_request', $event_guid)) {
+
+ if (event_calendar_add_personal_event($event_guid,$user_guid)) {
+ remove_entity_relationship($user_guid, 'event_calendar_request', $event_guid);
+ notify_user($user_guid, $CONFIG->site->guid, elgg_echo('event_calendar:add_users_notify:subject'),
+ sprintf(
+ elgg_echo('event_calendar:add_users_notify:body'),
+ $user->name,
+ $event->title,
+ $event->getURL()
+ )
+ );
+ system_message(elgg_echo('event_calendar:request_approved'));
+ }
+} else {
+ register_error(elgg_echo('event_calendar:review_requests:error:approve'));
+}
+
+forward(REFERER);
diff --git a/mod/event_calendar/actions/event_calendar/delete.php b/mod/event_calendar/actions/event_calendar/delete.php
new file mode 100644
index 000000000..dd8a7ef22
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/delete.php
@@ -0,0 +1,21 @@
+<?php
+$event_guid = get_input('guid',0);
+$event = get_entity($event_guid);
+if (elgg_instanceof($event,'object','event_calendar') && $event->canEdit()) {
+ if (get_input('cancel','')) {
+ system_message(elgg_echo('event_calendar:delete_cancel_response'));
+ } else {
+ $container = get_entity($event->container_guid);
+ $event->delete();
+ system_message(elgg_echo('event_calendar:delete_response'));
+ if (elgg_instanceof($container,'group')) {
+ forward('event_calendar/group/'.$container->guid);
+ } else {
+ forward('event_calendar/list');
+ }
+ }
+} else {
+ register_error(elgg_echo('event_calendar:error_delete'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/mod/event_calendar/actions/event_calendar/edit.php b/mod/event_calendar/actions/event_calendar/edit.php
new file mode 100644
index 000000000..aef1a59cc
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/edit.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * Edit action
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2008
+ * @link http://radagast.biz/
+ *
+ */
+
+elgg_load_library('elgg:event_calendar');
+
+// start a new sticky form session in case of failure
+elgg_make_sticky_form('event_calendar');
+
+$event_guid = get_input('event_guid',0);
+$group_guid = get_input('group_guid',0);
+$event = event_calendar_set_event_from_form($event_guid,$group_guid);
+if ($event) {
+ // remove sticky form entries
+ elgg_clear_sticky_form('event_calendar');
+ $user_guid = elgg_get_logged_in_user_guid();
+ if ($event_guid) {
+ add_to_river('river/object/event_calendar/update','update',$user_guid,$event_guid);
+ system_message(elgg_echo('event_calendar:manage_event_response'));
+ } else {
+ $event_calendar_autopersonal = elgg_get_plugin_setting('autopersonal', 'event_calendar');
+ if (!$event_calendar_autopersonal || ($event_calendar_autopersonal == 'yes')) {
+ event_calendar_add_personal_event($event->guid,$user_guid);
+ }
+ add_to_river('river/object/event_calendar/create','create',$user_guid,$event->guid);
+ system_message(elgg_echo('event_calendar:add_event_response'));
+ }
+
+ if ($event->schedule_type == 'poll') {
+ forward('event_poll/add/'.$event->guid);
+ }
+
+ forward($event->getURL());
+} else {
+ // redisplay form with error message
+ register_error(elgg_echo('event_calendar:manage_event_error'));
+ if ($event_guid) {
+ forward('event_calendar/edit/'.$event_guid);
+ } else {
+ if ($group_guid) {
+ forward('event_calendar/add/'.$group_guid);
+ } else {
+ forward('event_calendar/add/');
+ }
+ }
+}
diff --git a/mod/event_calendar/actions/event_calendar/join_conference.php b/mod/event_calendar/actions/event_calendar/join_conference.php
new file mode 100644
index 000000000..9eb8f0da9
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/join_conference.php
@@ -0,0 +1,20 @@
+<?php
+// extended logic for BBB
+elgg_load_library('elgg:event_calendar');
+
+$event_guid = get_input('event_guid');
+$event = get_entity($event_guid);
+if (elgg_instanceof($event,'object','event_calendar')) {
+ // make sure that the conference still exists, and if not, try recreating it
+ if (event_calendar_conference_exists($event)) {
+ event_calendar_join_conference($event);
+ } else if (event_calendar_create_bbb_conf($event)) {
+ event_calendar_join_conference($event);
+ } else {
+ register_error(elgg_echo('event_calendar:couldnotjoin'));
+ forward($event->getURL());
+ }
+} else {
+ register_error(elgg_echo('event_calendar:error_nosuchevent'));
+ forward('event_calendar/list');
+}
diff --git a/mod/event_calendar/actions/event_calendar/killrequest.php b/mod/event_calendar/actions/event_calendar/killrequest.php
new file mode 100644
index 000000000..f4f3c3135
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/killrequest.php
@@ -0,0 +1,23 @@
+<?php
+// this action allows an admin or event owner to reject a calendar request
+
+elgg_load_library('elgg:event_calendar');
+
+$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid());
+$event_guid = get_input('event_guid');
+
+$user = get_entity($user_guid);
+$event = get_entity($event_guid);
+
+if (elgg_instanceof($event, 'object', 'event_calendar')
+ && elgg_instanceof($user, 'user')
+ && $event->canEdit()
+ && check_entity_relationship($user_guid, 'event_calendar_request', $event_guid)) {
+
+ remove_entity_relationship($user->guid, 'event_calendar_request', $event_guid);
+ system_message(elgg_echo('event_calendar:requestkilled'));
+} else {
+ register_error(elgg_echo('event_calendar:review_requests:error:reject'));
+}
+
+forward(REFERER);
diff --git a/mod/event_calendar/actions/event_calendar/manage_subscribers.php b/mod/event_calendar/actions/event_calendar/manage_subscribers.php
new file mode 100644
index 000000000..079c3628f
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/manage_subscribers.php
@@ -0,0 +1,26 @@
+<?php
+$event_guid = get_input('event_guid');
+$event = get_entity($event_guid);
+$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar');
+if (($event_calendar_add_users == 'yes') && elgg_instanceof($event,'object','event_calendar') && $event->canEdit()) {
+ $members = get_input('members');
+ // clear the event from all personal calendars
+ remove_entity_relationships($event_guid, 'personal_event', TRUE);
+ // add event to personal calendars
+ $event_calendar_add_users_notify = elgg_get_plugin_setting('add_users_notify', 'event_calendar');
+ $site_guid = elgg_get_site_entity()->guid;
+ foreach ($members as $user_guid) {
+ add_entity_relationship($user_guid,'personal_event',$event_guid);
+ if ($event_calendar_add_users_notify == 'yes') {
+ $subject = elgg_echo('event_calendar:add_users_notify:subject');
+ $user = get_user($user_guid);
+ $message = elgg_echo('event_calendar:add_users_notify:body',array($user->name,$event->title,$event->getURL()));
+ notify_user($user_guid, $site_guid, $subject, $message, NULL, 'email');
+ }
+ }
+ system_message(elgg_echo('event_calendar:manage_subscribers:success'));
+ forward($event->getURL());
+} else {
+ register_error(elgg_echo('event_calendar:manage_subscribers:error'));
+ forward();
+}
diff --git a/mod/event_calendar/actions/event_calendar/modify_full_calendar.php b/mod/event_calendar/actions/event_calendar/modify_full_calendar.php
new file mode 100644
index 000000000..1e0bd3a01
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/modify_full_calendar.php
@@ -0,0 +1,24 @@
+<?php
+elgg_load_library('elgg:event_calendar');
+$event_guid = get_input('event_guid',0);
+$day_delta = get_input('dayDelta');
+$minute_delta = get_input('minuteDelta','');
+$start_time = get_input('startTime','');
+$resend = get_input('resend','');
+$minutes = get_input('minutes');
+$iso_date = get_input('iso_date');
+$result = event_calendar_modify_full_calendar($event_guid,$day_delta,$minute_delta,$start_time,$resend,$minutes,$iso_date);
+if ($result) {
+ $response = array('success'=>TRUE);
+ // special handling for event polls
+ if (is_array($result)) {
+ $response['minutes'] = $result['minutes'];
+ $response['iso_date'] = $result['iso_date'];
+ }
+} else {
+ $response = array('success'=>FALSE, 'message' =>elgg_echo('event_calendar:modify_full_calendar:error'));
+}
+
+echo json_encode($response);
+
+exit;
diff --git a/mod/event_calendar/actions/event_calendar/remove_from_group.php b/mod/event_calendar/actions/event_calendar/remove_from_group.php
new file mode 100644
index 000000000..4a7185245
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/remove_from_group.php
@@ -0,0 +1,8 @@
+<?php
+$event_id = get_input("event_id",0);
+$group_id = get_input("group_id",0);
+$event = get_entity($event_id);
+remove_entity_relationship($event_id, "display_on_group", $group_id );
+system_message(elgg_echo('event_calendar:remove_from_group:success'));
+forward($event->getUrl());
+?> \ No newline at end of file
diff --git a/mod/event_calendar/actions/event_calendar/remove_from_group_members.php b/mod/event_calendar/actions/event_calendar/remove_from_group_members.php
new file mode 100644
index 000000000..a15b66c97
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/remove_from_group_members.php
@@ -0,0 +1,15 @@
+<?php
+elgg_load_library('elgg:event_calendar');
+$event_guid = get_input("event_guid",0);
+$event = get_entity($event_guid);
+$group = get_entity($event->container_guid);
+if (elgg_instanceof($group,'group') && elgg_instanceof($event,'object','event_calendar') && $group->canEdit()) {
+ $members = $group->getMembers(0,0);
+ foreach($members as $member) {
+ event_calendar_remove_personal_event($event->guid,$member->guid);
+ }
+ system_message(elgg_echo('event_calendar:remove_from_group_members:success'));
+} else {
+ register_error(elgg_echo('event_calendar:remove_from_group_members:error'));
+}
+forward("event_calendar/manage_users/$event_guid");
diff --git a/mod/event_calendar/actions/event_calendar/remove_personal.php b/mod/event_calendar/actions/event_calendar/remove_personal.php
new file mode 100644
index 000000000..1308b17e9
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/remove_personal.php
@@ -0,0 +1,12 @@
+<?php
+elgg_load_library('elgg:event_calendar');
+
+$event_guid = get_input('guid',0);
+$event = get_entity($event_guid);
+if (elgg_instanceof($event,'object','event_calendar')) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ event_calendar_remove_personal_event($event_guid,$user_guid);
+ system_message(elgg_echo('event_calendar:remove_from_my_calendar_response'));
+}
+
+forward(REFERER);
diff --git a/mod/event_calendar/actions/event_calendar/request_personal_calendar.php b/mod/event_calendar/actions/event_calendar/request_personal_calendar.php
new file mode 100644
index 000000000..68c96e364
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/request_personal_calendar.php
@@ -0,0 +1,16 @@
+<?php
+// asks the event owner to add you to the event
+elgg_load_library('elgg:event_calendar');
+
+$event_guid = get_input('guid',0);
+$user_guid = elgg_get_logged_in_user_guid();
+$event = get_entity($event_guid);
+if (elgg_instanceof($event,'object','event_calendar')) {
+ if (event_calendar_send_event_request($event,$user_guid)) {
+ system_message(elgg_echo('event_calendar:request_event_response'));
+ } else {
+ register_error(elgg_echo('event_calendar:request_event_error'));
+ }
+}
+
+forward(REFERER);
diff --git a/mod/event_calendar/actions/event_calendar/toggle_personal_calendar.php b/mod/event_calendar/actions/event_calendar/toggle_personal_calendar.php
new file mode 100644
index 000000000..8eb20e6b9
--- /dev/null
+++ b/mod/event_calendar/actions/event_calendar/toggle_personal_calendar.php
@@ -0,0 +1,40 @@
+<?php
+elgg_load_library('elgg:event_calendar');
+$event_guid = get_input('event_guid',0);
+$user_guid = get_input('user_guid',elgg_get_logged_in_user_guid());
+$other = get_input('other','');
+if ($other) {
+ $remove_response = elgg_echo('event_calendar:added_to_the_calendar');
+ $add_response = elgg_echo('event_calendar:removed_from_the_calendar');
+ $add_error = elgg_echo('event_calendar:add_to_the_calendar_error');
+} else {
+ $remove_response = elgg_echo('event_calendar:remove_from_my_calendar_response');
+ $add_response = elgg_echo('event_calendar:add_to_my_calendar_response');
+ $add_error = elgg_echo('event_calendar:add_to_my_calendar_error');
+}
+
+if (event_calendar_has_personal_event($event_guid,$user_guid)) {
+ $button_text = elgg_echo('event_calendar:add_to_the_calendar');
+ event_calendar_remove_personal_event($event_guid,$user_guid);
+ $response = array('success'=>TRUE, 'message' => $remove_response, 'button_text'=>$button_text);
+} else {
+ if (event_calendar_add_personal_event($event_guid,$user_guid)) {
+ $event_calendar_add_users_notify = elgg_get_plugin_setting('add_users_notify', 'event_calendar');
+ if ($event_calendar_add_users_notify == 'yes') {
+ $subject = elgg_echo('event_calendar:add_users_notify:subject');
+ $user = get_user($user_guid);
+ $event = get_entity($event_guid);
+ $site_guid = elgg_get_site_entity()->guid;
+ $message = elgg_echo('event_calendar:add_users_notify:body',array($user->name,$event->title,$event->getURL()));
+ notify_user($user_guid, $site_guid, $subject, $message, NULL, 'email');
+ }
+ $button_text = elgg_echo('event_calendar:remove_from_the_calendar_button');
+ $response = array('success'=>TRUE, 'message' => $add_response, 'button_text'=>$button_text);
+ } else {
+ $response = array('success'=>FALSE, 'message' =>$add_error);
+ }
+}
+
+echo json_encode($response);
+
+exit;
diff --git a/mod/event_calendar/activate.php b/mod/event_calendar/activate.php
new file mode 100644
index 000000000..3be14d287
--- /dev/null
+++ b/mod/event_calendar/activate.php
@@ -0,0 +1,4 @@
+<?php
+
+elgg_set_plugin_setting('listing_format', 'full', 'event_calendar');
+elgg_set_plugin_setting('fewer_fields', 'yes', 'event_calendar'); \ No newline at end of file
diff --git a/mod/event_calendar/images/calendar.gif b/mod/event_calendar/images/calendar.gif
new file mode 100644
index 000000000..d0abaa7c0
--- /dev/null
+++ b/mod/event_calendar/images/calendar.gif
Binary files differ
diff --git a/mod/event_calendar/images/event_icon.gif b/mod/event_calendar/images/event_icon.gif
new file mode 100644
index 000000000..a0ac7da52
--- /dev/null
+++ b/mod/event_calendar/images/event_icon.gif
Binary files differ
diff --git a/mod/event_calendar/images/event_icon_old.gif b/mod/event_calendar/images/event_icon_old.gif
new file mode 100644
index 000000000..154d5af09
--- /dev/null
+++ b/mod/event_calendar/images/event_icon_old.gif
Binary files differ
diff --git a/mod/event_calendar/images/ics.png b/mod/event_calendar/images/ics.png
new file mode 100644
index 000000000..311ffa221
--- /dev/null
+++ b/mod/event_calendar/images/ics.png
Binary files differ
diff --git a/mod/event_calendar/images/river_icon_event.gif b/mod/event_calendar/images/river_icon_event.gif
new file mode 100644
index 000000000..d02e5395a
--- /dev/null
+++ b/mod/event_calendar/images/river_icon_event.gif
Binary files differ
diff --git a/mod/event_calendar/languages/ca.php b/mod/event_calendar/languages/ca.php
new file mode 100644
index 000000000..4881d7458
--- /dev/null
+++ b/mod/event_calendar/languages/ca.php
@@ -0,0 +1,143 @@
+<?php
+$language = array (
+ 'item:object:event_calendar' => 'Calendari',
+ 'tag_names:event_tags' => 'Etiquetes',
+ 'event_calendar:optional' => 'Opcional.',
+ 'event_calendar:required' => 'Requerit.',
+ 'event_calendar:new_event' => 'Nou esdeveniment',
+ 'event_calendar:no_such_event_edit_error' => 'Error: no hi ha cap esdeveniment o no tens permissos per editar-lo.',
+ 'event_calendar:add_event_title' => 'Afegeix esdeveniment',
+ 'event_calendar:manage_event_title' => 'Edita esdeveniment',
+ 'event_calendar:manage_event_description' => 'Introdueix detalls del teu esdeveniment a sota. El títol, lloc on serà i data d\'inici són requerits. Pots fer clic a les icones del calendari per indicar les dates d\'inici i final.',
+ 'event_calendar:title_label' => 'Títol',
+ 'event_calendar:title_description' => 'D\'una a quatre paraules',
+ 'event_calendar:brief_description_label' => 'Descripció',
+ 'event_calendar:brief_description_description' => 'Una frase curta.',
+ 'event_calendar:venue_label' => 'On',
+ 'event_calendar:venue_description' => 'On serà aquest esdeveniment?',
+ 'event_calendar:start_date_label' => 'Data d\'inici',
+ 'event_calendar:start_date_description' => 'Quan començarà?',
+ 'event_calendar:end_date_label' => 'Data de finalització',
+ 'event_calendar:end_date_description' => 'Quan finalitzarà aquest esdeveniment? La data d\'inici serà utilitzada com a data de finalització si no en poses cap.',
+ 'event_calendar:start_time_label' => 'Hora d\'inici',
+ 'event_calendar:start_time_description' => 'A quina hora començarà aquest esdeveniment?',
+ 'event_calendar:end_time_label' => 'Hora de finalització',
+ 'event_calendar:end_time_description' => 'A quina hora finalitzarà aquest esdeveniment?',
+ 'event_calendar:fees_label' => 'Costos',
+ 'event_calendar:fees_description' => 'El cost d\'aquest esdeveniment, si és que en té.',
+ 'event_calendar:contact_label' => 'Contacte',
+ 'event_calendar:contact_description' => 'La persona de contacte per a més informació, preferiblement amb un número de telèfon o una adreça d\'email',
+ 'event_calendar:organiser_label' => 'Organitzadora',
+ 'event_calendar:organiser_description' => 'La persona o organització responsable d\'aquest esdeveniment.',
+ 'event_calendar:event_tags_label' => 'Etiquetes',
+ 'event_calendar:event_tags_description' => 'Una llista separada amb comes de les etiquetes més destacables per a aquest esdeveniment.',
+ 'event_calendar:long_description_label' => 'Descripció llarga',
+ 'event_calendar:long_description_description' => 'Pot ser un paràgraf o més com a requerit.',
+ 'event_calendar:manage_event_response' => 'El teu esdeveniment s\'ha desat correctament.',
+ 'event_calendar:add_event_response' => 'El teu esdeveniment s\'ha afegit correctament.',
+ 'event_calendar:show_events_title' => 'Calendari',
+ 'event_calendar:day_label' => 'Dia',
+ 'event_calendar:week_label' => 'Setmana',
+ 'event_calendar:month_label' => 'Mes',
+ 'event_calendar:group' => 'Calendari del grup',
+ 'event_calendar:new' => 'Afegir esdeveniment',
+ 'event_calendar:submit' => 'Desa i continua',
+ 'event_calendar:cancel' => 'Cancel·la',
+ 'event_calendar:widget_title' => 'Calendari',
+ 'event_calendar:widget:description' => 'Mostra els teus esdeveniments.',
+ 'event_calendar:num_display' => 'Número d\'esdeveniments per mostrar',
+ 'event_calendar:groupprofile' => 'Propers esdeveniments',
+ 'event_calendar:view_calendar' => 'vista del calendari',
+ 'event_calendar:when_label' => 'Quan',
+ 'event_calendar:site_wide_link' => 'Veure tots els esdeveniments',
+ 'event_calendar:view_link' => 'Veure aquest esdeveniment',
+ 'event_calendar:edit_link' => 'Edita aquest esdeveniment',
+ 'event_calendar:delete_link' => 'Esborra aquest esdeveniment',
+ 'event_calendar:delete_response' => 'Aquest esdeveniment ha estat esborrat.',
+ 'event_calendar:error_delete' => 'Aquest esdeveniment no existeix o no tens permisos per esborrar-lo.',
+ 'event_calendar:delete_cancel_response' => 'Esborrat de l\'esdeveniment cancel·lat.',
+ 'event_calendar:add_to_my_calendar' => 'Afegeix al meu calendari',
+ 'event_calendar:remove_from_my_calendar' => 'Treure del meu calendari',
+ 'event_calendar:add_to_my_calendar_response' => 'Aquest esdeveniment ha estat afegit al teu calendari personal',
+ 'event_calendar:add_to_the_calendar' => 'Afegeix al calendari',
+ 'event_calendar:remove_from_the_calendar' => 'Elimina',
+ 'event_calendar:add_to_the_calendar_menu_text' => 'Afegir al meu',
+ 'event_calendar:remove_from_the_calendar_menu_text' => 'Elimina del meu',
+ 'event_calendar:remove_from_the_calendar_button' => 'Elimina del calendari',
+ 'event_calendar:added_to_the_calendar' => 'Afegit al calendari',
+ 'event_calendar:removed_from_the_calendar' => 'Calendari eliminat',
+ 'event_calendar:personal_event_calendars_link' => 'A %s calendaris',
+ 'event_calendar:personal_event_calendars_link_one' => 'A un calendari',
+ 'event_calendar:users_for_event_breadcrumb' => 'Calendaris personals',
+ 'event_calendar:settings:group_profile_display_option:left' => 'columna esquerra',
+ 'event_calendar:settings:group_profile_display_option:right' => 'columna dreta',
+ 'event_calendar:settings:group_profile_display_option:none' => 'cap',
+ 'event_calendar:settings:agenda_view:title' => 'Utilitza la vista d\'agenda',
+ 'event_calendar:settings:yes' => 'sí',
+ 'event_calendar:settings:no' => 'no',
+ 'event_calendar:region_label' => 'Regió',
+ 'event_calendar:type_label' => 'Tipus',
+ 'event_calendar:all' => 'Tots',
+ 'event_calendar:no_events_found' => 'No s\'han trobat esdeveniments.',
+ 'event_calendar:mine' => 'Meus',
+ 'event_calendar:agenda:column:time' => 'Temps',
+ 'event_calendar:agenda:column:session' => 'Sessió',
+ 'event_calendar:agenda:column:venue' => 'Localització',
+ 'event_calendar:settings:agenda' => 'agenda',
+ 'event_calendar:settings:month' => 'per mes',
+ 'event_calendar:settings:full' => 'vista completa',
+ 'event_calendar:paged:column:date' => 'Data',
+ 'event_calendar:paged:column:time' => 'Hora',
+ 'event_calendar:paged:column:event' => 'Esdeveniment',
+ 'event_calendar:paged:column:venue' => 'Localització',
+ 'event_calendar:paged:column:calendar' => 'Calendari',
+ 'event_calendar:open' => 'Obrir',
+ 'event_calendar:add_user_label' => 'Afegir habitants',
+ 'event_calendar:show_all' => 'Tots',
+ 'event_calendar:show_mine' => 'El meu calendari',
+ 'event_calendar:show_friends' => 'Calendari de les amigues',
+ 'event_calendar:listing_title:all' => 'Tots',
+ 'event_calendar:listing_title:mine' => 'El meu calendari',
+ 'event_calendar:listing_title:friends' => 'Calendari de les amigues',
+ 'event_calendar:personal_manage:open' => 'obert',
+ 'event_calendar:personal_manage:closed' => 'tancat',
+ 'event_calendar:personal_manage:private' => 'privat',
+ 'event_calendar:from_label' => 'De:',
+ 'event_calendar:to_label' => 'A:',
+ 'event_calendar:settings:timeformat:title' => 'Format d\'hora',
+ 'event_calendar:time_format:12hour' => '12 hores (am/pm)',
+ 'event_calendar:time_format:24hour' => '24 hores',
+ 'event_calendar:all_day_label' => 'Event de tot el dia',
+ 'event_calendar:repeat_interval_label' => 'Repeteix cada',
+ 'event_calendar:repeat_weeks' => 'setmana(es)',
+ 'event_calendar:on_these_days' => 'en aquests dies',
+ 'event_calendar:day_abbrev:monday' => 'DL',
+ 'event_calendar:day_abbrev:tuesday' => 'DM',
+ 'event_calendar:day_abbrev:wednesday' => 'DC',
+ 'event_calendar:day_abbrev:thursday' => 'DJ',
+ 'event_calendar:day_abbrev:friday' => 'DV',
+ 'event_calendar:day_abbrev:saturday' => 'DS',
+ 'event_calendar:day_abbrev:sunday' => 'DG',
+ 'event_calendar:dow:full:monday' => 'Dilluns',
+ 'event_calendar:dow:full:tuesday' => 'Dimarts',
+ 'event_calendar:dow:full:wednesday' => 'Dimecres',
+ 'event_calendar:dow:full:thursday' => 'Dijous',
+ 'event_calendar:dow:full:friday' => 'Divendres',
+ 'event_calendar:dow:full:saturday' => 'Dissabte',
+ 'event_calendar:dow:full:sunday' => 'Diumenge',
+ 'event_calendar:schedule_type:fixed' => 'Posa data i hora',
+ 'event_calendar:interval:minute' => 'minut(s)',
+ 'event_calendar:interval:hour' => 'hora(es)',
+ 'event_calendar:interval:day' => 'dia(es)',
+ 'event_calendar:site_calendar' => 'Calendari del lloc',
+ 'event_calendar:calendar_label' => 'Calendari',
+ 'event_calendar:calendar_description' => 'Calendari per aquest esdeveniment.',
+ 'event_calendar:basic:header' => 'Informació bàsica',
+ 'event_calendar:schedule:header' => 'Horari',
+ 'event_calendar:permissions:header' => 'Permisos',
+ 'event_calendar:read_access' => 'Accés de lectura',
+ 'event_calendar:add_event' => 'Afegeix event',
+ 'event_calendar:poll_suffix' => '(enquesta)',
+ 'event_calendar:add' => 'Afegeix',
+);
+add_translation("ca", $language);
diff --git a/mod/event_calendar/languages/en.php b/mod/event_calendar/languages/en.php
new file mode 100644
index 000000000..b8fb918cc
--- /dev/null
+++ b/mod/event_calendar/languages/en.php
@@ -0,0 +1,360 @@
+<?php
+
+ $english = array(
+
+ 'item:object:event_calendar' => "Calendar",
+ 'tag_names:event_tags' => "Tags",
+ 'event_calendar:optional' => "Optional.",
+ 'event_calendar:required' => "Required.",
+ 'event_calendar:new_event' => "New event",
+ 'event_calendar:no_such_event_edit_error' => "Error: There is no such event or you do not have permission to edit it.",
+ 'event_calendar:add_event_title' => "Add event",
+ 'event_calendar:manage_event_title' => "Edit event",
+ 'event_calendar:manage_event_description' => "Enter the details of your event below. "
+ ."The title, venue, and start date are required. "
+ ."You can click on the calendar icons to set the start and end dates.",
+ 'event_calendar:title_label' => "Title",
+ 'event_calendar:title_description' => "One to four words",
+ 'event_calendar:brief_description_label' => "Description",
+ 'event_calendar:brief_description_description' => "A short phrase.",
+ 'event_calendar:venue_label' => "Where",
+ 'event_calendar:venue_description' => "Where will this event be held?",
+ 'event_calendar:start_date_label' => "Start date",
+ 'event_calendar:start_date_description' => "When will this event start?",
+ 'event_calendar:end_date_label' => "End date",
+ 'event_calendar:end_date_description' => "When will this event end? The start date will be "
+ ."used as the end date if this is not supplied.",
+ 'event_calendar:start_time_label' => "Start time",
+ 'event_calendar:start_time_description' => "What time will this event start?",
+ 'event_calendar:end_time_label' => "End time",
+ 'event_calendar:end_time_description' => "What time will this event end?",
+ 'event_calendar:fees_label' => "Fees",
+ 'event_calendar:fees_description' => "The cost of this event, if any.",
+ 'event_calendar:contact_label' => "Contact",
+ 'event_calendar:contact_description' => "The person to contact for more information, "
+ ."preferably with a telephone number or email address.",
+ 'event_calendar:organiser_label' => "Organiser",
+ 'event_calendar:organiser_description' => "The individual or organisation responsible for this event.",
+ 'event_calendar:event_tags_label' => "Tags",
+ 'event_calendar:event_tags_description' => "A comma-separated list of tags relevant to this event.",
+ 'event_calendar:long_description_label' => "Long description",
+ 'event_calendar:long_description_description' => "Can be a paragraph or more as required.",
+ 'event_calendar:manage_event_response' => "Your event has been saved.",
+ 'event_calendar:add_event_response' => "Your event has been added.",
+ 'event_calendar:manage_event_error' => "Error: There was an error in saving your event. "
+ ."Please make sure that you have provided the required fields.",
+ 'event_calendar:error_nosuchevent' => "Error: there is no such event.",
+ 'event_calendar:show_events_title' => "Calendar",
+ 'event_calendar:day_label' => "Day",
+ 'event_calendar:week_label' => "Week",
+ 'event_calendar:month_label' => "Month",
+ 'event_calendar:group' => "Group calendar",
+ 'event_calendar:new' => "Add event",
+ 'event_calendar:submit' => "Save and Continue",
+ 'event_calendar:cancel' => "Cancel",
+ 'event_calendar:widget_title' => "Calendar",
+ 'event_calendar:widget:description' => "Displays your events.",
+ 'event_calendar:num_display' => "Number of events to display",
+ 'event_calendar:groupprofile' => "Upcoming events",
+ 'event_calendar:view_calendar' => "view calendar",
+ 'event_calendar:when_label' => "When",
+ 'event_calendar:site_wide_link' => "View all events",
+ 'event_calendar:view_link' => "View this event",
+ 'event_calendar:edit_link' => "Edit this event",
+ 'event_calendar:delete_link' => "Delete this event",
+ 'event_calendar:delete_response' => "This event has been deleted.",
+ 'event_calendar:error_delete' => "This event does not exist or you do not have the right to delete it.",
+ 'event_calendar:delete_cancel_response' => "Event delete cancelled.",
+ 'event_calendar:add_to_my_calendar' => "Add to my calendar",
+ 'event_calendar:remove_from_my_calendar' => "Remove from my calendar",
+ 'event_calendar:add_to_my_calendar_response' => "This event has been added to your personal calendar.",
+ 'event_calendar:add_to_my_calendar_error' => "This event could not added to your personal calendar. "
+ ."(Perhaps the event is full or is scheduled at the same time as another event in your personal calendar?)",
+ 'event_calendar:remove_from_my_calendar_response' => "This event has been removed from your personal calendar.",
+ 'event_calendar:add_to_the_calendar' => "Add to calendar",
+ 'event_calendar:remove_from_the_calendar' => "Remove",
+ 'event_calendar:add_to_the_calendar_menu_text' => "Add to mine",
+ 'event_calendar:remove_from_the_calendar_menu_text' => "Remove from mine",
+ 'event_calendar:remove_from_the_calendar_button' => "Remove from calendar",
+ 'event_calendar:added_to_the_calendar' => "Added to calendar",
+ 'event_calendar:removed_from_the_calendar' => "Removed calendar",
+ 'event_calendar:add_to_the_calendar_response' => "Event added to this person's calendar.",
+ 'event_calendar:add_to_the_calendar_error' => "This event could not added to this person's calendar. "
+ ."(Perhaps the event is full or is scheduled at the same time as another event in this person's calendar?)",
+ 'event_calendar:remove_from_the_calendar_response' => "Event removed from this person's calendar.",
+
+ 'event_calendar:users_for_event_menu_title' => "People listing this event on their personal calendars",
+ 'event_calendar:users_for_event_title' => "Personal calendars for \"%s'\"",
+ 'event_calendar:personal_event_calendars_link' => "On %s calendars",
+ 'event_calendar:personal_event_calendars_link_one' => "On 1 calendar",
+ 'event_calendar:users_for_event_breadcrumb' => "Personal calendars",
+ 'event_calendar:settings:group_profile_display:title' => "Group calendar profile display (if group calendars are enabled)",
+ 'event_calendar:settings:group_profile_display_option:left' => "left column",
+ 'event_calendar:settings:group_profile_display_option:right' => "right column",
+ 'event_calendar:settings:group_profile_display_option:none' => "none",
+ 'event_calendar:settings:times:title' => "Add time as well as date to events",
+ 'event_calendar:settings:autopersonal:title' => "Automatically add events a user creates to his/her personal calendar.",
+ 'event_calendar:settings:autogroup:title' => "Automatically add group events for all members to their personal calendars.",
+ 'event_calendar:settings:agenda_view:title' => "Use Agenda view",
+ 'event_calendar:settings:venue_view:title' => "Display venue in summary view (event listings)",
+ 'event_calendar:settings:yes' => "yes",
+ 'event_calendar:settings:no' => "no",
+ 'event_calendar:settings:site_calendar:title' => "Site calendar",
+ 'event_calendar:settings:site_calendar:admin' => "yes, only admins can post events",
+ 'event_calendar:settings:site_calendar:loggedin' => "yes, any logged-in user can post an event",
+ 'event_calendar:settings:group_calendar:title' => "Group calendars",
+ 'event_calendar:settings:group_calendar:admin' => "yes, only admins and group owners can post events",
+ 'event_calendar:settings:group_calendar:members' => "yes, any group member can post an event",
+ 'event_calendar:settings:group_default:title' => "New groups should by default have a group calendar (if group calendars are enabled)",
+ 'event_calendar:settings:group_default:no' => "no (but admins or group owners can turn a group calendar on if desired)",
+ 'event_calendar:settings:group_default:yes' => "yes (but admins or group owners can turn a group calendar off if desired)",
+ 'event_calendar:settings:group_always_display:title' => "If group calendar is enabled, always display it (even if empty)",
+ 'event_calendar:settings:region_display:title' => "Add region field to events",
+ 'event_calendar:settings:region_list:title' => "List of regions (one per line)",
+ 'event_calendar:region_label' => "Region",
+ 'event_calendar:region_description' => "Select the region that this event will be held in.",
+ 'event_calendar:settings:type_display:title' => "Add event type to events",
+ 'event_calendar:settings:type_list:title' => "List of event types (one per line)",
+ 'event_calendar:type_label' => "Type",
+ 'event_calendar:type_description' => "Select the type of event.",
+ 'event_calendar:all' => "All",
+ 'event_calendar:region_filter_by_label' => "Filter by region: ",
+ 'event_calendar:settings:first_date:title' => "First allowable date (in YYYY-MM-DD format)",
+ 'event_calendar:settings:last_date:title' => "Last allowable date (in YYYY-MM-DD format)",
+ 'event_calendar:enable_event_calendar' => "Enable group calendar",
+ 'event_calendar:no_events_found' => "No events found.",
+ 'event_calendar:mine' => "Mine",
+ 'event_calendar:feature' => "Feature",
+ 'event_calendar:unfeature' => "Unfeature",
+ 'event_calendar:agenda:column:time' => "Time",
+ 'event_calendar:agenda:column:session' => "Session",
+ 'event_calendar:agenda:column:venue' => "Location",
+ 'event_calendar:upcoming_events_title' => "Upcoming events",
+ 'event_calendar:settings:paged' => "paged",
+ 'event_calendar:settings:agenda' => "agenda",
+ 'event_calendar:settings:month' => "by month",
+ 'event_calendar:settings:full' => "full view",
+ 'event_calendar:settings:listing_format:title' => "Event listing format",
+ 'event_calendar:paged:column:date' => "Date",
+ 'event_calendar:paged:column:time' => "Time",
+ 'event_calendar:paged:column:event' => "Event",
+ 'event_calendar:paged:column:venue' => "Location",
+ 'event_calendar:paged:column:calendar' => "Calendar",
+ 'event_calendar:settings:spots_display:title' => "Add a spots field for each "
+ ."event to allow you to limit the number of people who can add the event to their calendar",
+ 'event_calendar:settings:no_collisions:title' => "Collision detection: prevent people from adding two events at the same time to their personal calendar",
+ 'event_calendar:settings:collision_length:title' => "How long (in seconds) should an event be assumed to last if no end date or time is specified "
+ ."(used for collision detection). Defaults to 3600 seconds = 1 hour.",
+ 'event_calendar:spots_label' => "Spots",
+ 'event_calendar:spots_description' => "How many people are allowed to add this event to their personal calendars?",
+ 'event_calendar:open' => "Open",
+ 'event_calendar:settings:add_users:title' => "Allow event creators and site admins to add their event to other personal calendars.",
+ 'event_calendar:add_user_label' => "Add users",
+ 'event_calendar:add_user_description' => "Add this event to personal calendars by typing two or more characters in the above text autocomplete field to select a user. "
+ ."You can add multiple users by clicking the \"+\" link. (You must submit this form to actually add the event to the calendars.)",
+ 'event_calendar:settings:add_users_notify:title' => "Email users who have had an event added to their personal calendar by an admin or event creator.",
+ 'event_calendar:add_users_notify:subject' => "A new event has been added to your personal calendar",
+ 'event_calendar:add_users_notify:body' => "%s,\n\nThe \"%s\" event has been added to your calendar.\n\nYou can view it here: \n\n%s\n",
+
+ 'event_calendar:settings:region_list_handles:title' => "The region strings above are string handles. Use the Elgg translation system to resolve them.",
+ 'event_calendar:settings:type_list_handles:title' => "The type strings above are string handles. Use the Elgg translation system to resolve them.",
+
+ 'event_calendar:settings:personal_manage:title' => "Calendar permissions",
+ 'event_calendar:settings:personal_manage:description' => "Determines whether people can add events to their personal calendars (open), "
+ ."need to request the event creator to do so (closed), have no option at all (private), or allow event creators to determine this for each event (by event). "
+ ."Note if you set this to private you should probably activate the option above to allow event creators and site admins to "
+ ."add their events to other personal calendars.",
+ 'event_calendar:strapline' => "Posted %s by %s",
+
+ 'event_calendar:request_event_response' => "Your request to be added to this event has been sent.",
+ 'event_calendar:request_event_error' => "Error: Could not send your request to be added to this event.",
+ 'event_calendar:request_subject' => "You have received an event request",
+ 'event_calendar:request_message' => "%s has asked to have the event \"%s\", here:
+
+%s
+
+added to his/her personal calendar.
+
+You can manage calendar requests for this event here:
+
+%s
+",
+
+ 'event_calendar:review_requests_error' => "This event either does not exist or you do not have the authority to approve requests for it.",
+ 'event_calendar:review_requests_request_none' => "There are no requests to review for this event.",
+ 'event_calendar:request:remove:check' => 'Are you sure you want to reject this request?',
+ 'event_calendar:requestkilled' => 'This request has been rejected.',
+ 'event_calendar:request_approved' => "This request has been approved.",
+ 'event_calendar:review_requests_title' => "Review requests for \"%s\"",
+ 'event_calendar:review_requests_menu_title' => "Review requests",
+ 'event_calendar:make_request_title' => 'Request this event',
+ 'event_calendar:review_requests:reject' => "Reject",
+ 'event_calendar:review_requests:reject:title' => "Reject this request",
+ 'event_calendar:review_requests:accept' => "Accept",
+ 'event_calendar:review_requests:accept:title' => "Accept this request",
+ 'event_calendar:review_requests:error:approve' => "Error: could not approve this request.",
+ 'event_calendar:review_requests:error:reject' => "Error: could not reject this request.",
+
+ 'event_calendar:settings:hide_access:title' => "Hide event access drop down",
+ 'event_calendar:settings:default_access:title' => "If the event access is hidden, what should it default to?",
+ 'event_calendar:settings:hide_end:title' => "Hide end time and date fields",
+ 'event_calendar:settings:more_required:title' => "Make all visible fields except long description required.",
+
+ 'event_calendar:add_to_group:remove_group_title' => "Remove this event from group",
+ 'event_calendar:add_to_group:remove_group_button' => "Remove from group",
+ 'event_calendar:remove_from_group:success' => "Event removed from group calendar",
+ 'event_calendar:add_to_group:add_group_title' => "Add this event to group",
+ 'event_calendar:add_to_group:add_group_button' => "Add to group",
+ 'event_calendar:add_to_group:success' => "Event added to group calendar",
+ 'event_calendar:settings:add_to_group_calendar:title' => "Allow group admins to add any existing event to a group calendar",
+
+ 'event_calendar:group_breadcrumb' => "Group calendar",
+ 'event_calendar:no_group' => "There is no such group.",
+ 'event_calendar:generic_error_title' => "Error",
+ 'event_calendar:error_event_edit' => "Error: there is no such event or you do not have permission to edit it.",
+ 'event_calendar:add' => "Add",
+
+ 'feed:ical' => "iCal feed for this page",
+ 'event_calendar:ical_popup_message' => "You can use the following URL to get an iCalendar feed of the public events from this listing page: ",
+ 'event_calendar:ical_auth_file_name:title' => "Location of iCal authentication file on local file system (experimental - not needed for public feeds)",
+
+ 'event_calendar:owner:permissions_error' => "You do not have permission to view that page.",
+ 'event_calendar:feature_not_activated' => "This feature is not activated",
+
+ 'event_calendar:show_all' => "Show all",
+ 'event_calendar:show_open' => "Show open",
+ 'event_calendar:show_mine' => "My calendar",
+ 'event_calendar:show_friends' => "My friends' calendars",
+ 'event_calendar:show_only' => "Show only those on:",
+
+ 'event_calendar:listing_title:all' => "All events",
+ 'event_calendar:listing_title:open' => "Open events",
+ 'event_calendar:listing_title:mine' => "My calendar",
+ 'event_calendar:listing_title:friends' => "Friends' calendars",
+ 'event_calendar:manage_users:title' => "Manage subscribers for \"%s\"",
+ 'event_calendar:manage_users:breadcrumb' => "Manage subscribers",
+ 'event_calendar:manage_users:description' => "Add or remove events from personal calendars.",
+ 'event_calendar:manage_users:unauthorized' => "Error: you are not authorised to manage personal calendars for this event.",
+ 'event_calendar:add_to_group_members:success' => "This event has been added to the personal calendars of all group members.",
+ 'event_calendar:add_to_group_members:error' => "Error: could not add this event to the personal calendars of group members.",
+ 'event_calendar:remove_from_group_members:success' => "This event has been removed from the personal calendars of all group members.",
+ 'event_calendar:remove_from_group_members:error' => "Error: could not remove this event from the personal calendars of group members.",
+ 'event_calendar:add_to_group_members:button' => "Add to all",
+ 'event_calendar:remove_from_group_members:button' => "Remove from all",
+
+ 'event_calendar:manage_subscribers:success' => "Personal calendars updated.",
+ 'event_calendar:manage_subscribers:error' => "Error: could not update personal calendars.",
+ 'event_calendar:personal_manage:open' => "open",
+ 'event_calendar:personal_manage:closed' => "closed",
+ 'event_calendar:personal_manage:private' => "private",
+ 'event_calendar:personal_manage:by_event' => "by event",
+ 'event_calendar:personal_manage:label' => "Personal calendars",
+ 'event_calendar:personal_manage:description' => "Determines whether people can add this event to their calendars (open), "
+ ."need to apply to do so (closed) or have no option at all (private - so only you or a site admin can add the event to calendars).",
+ 'event_calendar:personal_manage:by_event:open' => "Open. People can freely add this event to their personal calendars.",
+ 'event_calendar:personal_manage:by_event:closed' => "Closed. People can request to add this event to their personal calendars. You can review and approve requests.",
+ 'event_calendar:personal_manage:by_event:private' => "Private. You or another event administrator must add this event to personal calendars. There is no way for other users to add or request this event.",
+
+ 'event_calendar:settings:full_calendar:title' => "Support full calendar",
+ 'event_calendar:modify_full_calendar:error' => "Error: could not modify full calendar",
+ 'event_calendar:from_label' => "From:",
+ 'event_calendar:to_label' => "To:",
+ 'event_calendar:settings:timeformat:title' => "Time format",
+ 'event_calendar:time_format:12hour' => "12 hour (am/pm)",
+ 'event_calendar:time_format:24hour' => "24 hour",
+ 'event_calendar:all_day_label' => "All-day event",
+ 'event_calendar:repeat_interval_label' => "Repeat every",
+ 'event_calendar:repeat_weeks' => "week(s)",
+ 'event_calendar:on_these_days' => "on these days:",
+ 'event_calendar:day_abbrev:monday' => "M",
+ 'event_calendar:day_abbrev:tuesday' => "T",
+ 'event_calendar:day_abbrev:wednesday' => "W",
+ 'event_calendar:day_abbrev:thursday' => "T",
+ 'event_calendar:day_abbrev:friday' => "F",
+ 'event_calendar:day_abbrev:saturday' => "S",
+ 'event_calendar:day_abbrev:sunday' => "S",
+ 'event_calendar:dow:full:monday' => "Monday",
+ 'event_calendar:dow:full:tuesday' => "Tuesday",
+ 'event_calendar:dow:full:wednesday' => "Wednesday",
+ 'event_calendar:dow:full:thursday' => "Thursday",
+ 'event_calendar:dow:full:friday' => "Friday",
+ 'event_calendar:dow:full:saturday' => "Saturday",
+ 'event_calendar:dow:full:sunday' => "Sunday",
+ 'event_calendar:schedule_type:poll' => "Create poll asking invitees about day/time",
+ 'event_calendar:schedule_type:fixed' => "Set day/time",
+ 'elgg_calendar:send_reminder_label' => "Send reminder",
+ 'elgg_calendar:send_reminder_before' => "before",
+ 'event_calendar:interval:minute' => "minute(s)",
+ 'event_calendar:interval:hour' => "hour(s)",
+ 'event_calendar:interval:day' => "day(s)",
+ 'event_calendar:site_calendar' => "Site-wide calendar",
+ 'event_calendar:calendar_label' => "Calendar",
+ 'event_calendar:calendar_description' => "Calendar for this event.",
+ 'event_calendar:are_you_sure' => "Are you sure about this change?",
+ 'event_calendar:basic:header' => "Basic info",
+ 'event_calendar:schedule:header' => "Schedule",
+ 'event_calendar:permissions:header' => "Permissions",
+ 'event_calendar:read_access' => "Read access",
+ 'event_calendar:web_conference_label' => "Include a web conference for this event.",
+ 'event_calendar:share_ownership:label' => "Share ownership of this event",
+ 'event_calendar:share_ownership:description' => "Allow the following people to edit or delete this event, invite participants, etc.",
+ 'event_calendar:settings:fewer_fields:title' => "Hide fees, contact, organiser and long description fields",
+ 'event_calendar:settings:restricted_times:title' => "Restricted time to between 6am and 9pm (6:00 and 21:00)",
+ 'event_calendar:add_event' => "Add event",
+ 'event_calendar:schedule_event' => "Schedule event",
+ 'event_calendar:list_polls' => "List event polls",
+ 'event_calendar:edit_form:error:missing_title' => "Error: please supply the missing title.",
+ 'event_calendar:repeated_event:week_interval' => "every %s weeks.",
+ 'event_calendar:repeated_event:week_single' => "every week.",
+ 'event_calendar:repeated_event:format' => "Starting on %s and repeated on %s",
+ 'event_calendar:settings:repeated_events:title' => "Allow repeated events (currently only works properly in full calendar mode)",
+ 'event_calendar:settings:reminders:title' => "Allow sending reminders",
+ 'event_calendar:reminder:subject' => "Reminder for event: %s",
+ 'event_calendar:reminder:body' => "The event
+
+%s
+
+takes place at
+
+%s.
+
+You can visit the event page here:
+%s
+ ",
+
+ /**
+ * BBB support
+ */
+
+ 'event_calendar:bbb_server_url' => "Big Blue Button server URL (must end with slash)",
+ 'event_calendar:bbb_security_salt' => "Big Blue Button security salt",
+ 'event_calendar:bbb_create_error' => "Error: unable to create BBB conference, message was: %s",
+ 'event_calendar:conference_create_error' => "Error: unable to create web conference.",
+ 'event_calendar:bbb_settings_error' => "Error: must set conference URL and salt in plugin settings",
+ 'event_calendar:couldnotjoin' => "Error: unable to join conference.",
+ 'event_calendar:join_conf_button' => "Join conference",
+
+ 'event_calendar:poll_suffix' => "(poll)",
+ 'event_calendar:resend_poll_invitation' => "Do you want to alert poll invitees that the options have changed?",
+
+ /**
+ * Event calendar river
+ **/
+
+ //generic terms to use
+
+ 'river:update:object:event_calendar' => "%s updated the event %s",
+ 'river:create:object:event_calendar' => "%s added the event %s",
+ 'river:comment:object:event_calendar' => '%s commented on the event %s',
+ 'event_calendar:river:created' => "%s added",
+ 'event_calendar:river:updated' => "%s updated",
+ 'event_calendar:river:annotated1' => "%s added",
+ 'event_calendar:river:annotated2' => "to his/her personal calendar.",
+
+ //these get inserted into the river links to take the user to the entity
+ 'event_calendar:river:create' => "a new event titled",
+ 'event_calendar:river:the_event' => "an event titled",
+
+ );
+
+ add_translation("en",$english);
diff --git a/mod/event_calendar/languages/es.php b/mod/event_calendar/languages/es.php
new file mode 100644
index 000000000..2282591d3
--- /dev/null
+++ b/mod/event_calendar/languages/es.php
@@ -0,0 +1,215 @@
+<?php
+$language = array (
+ 'tag_names:event_tags' => 'Etiqueta',
+ 'event_calendar:optional' => 'Opcional.',
+ 'event_calendar:required' => 'Requerido.',
+ 'event_calendar:add_to_my_calendar_error' => 'No se puede añadir ese evento a tu calendario personal. (Quizás tu calendario ya esté lleno o ¿intentas agendar dos eventos a la vez en tu calendario personal?)',
+ 'event_calendar:add_to_the_calendar' => 'Añadir al calendario',
+ 'event_calendar:remove_from_the_calendar' => 'Remover',
+ 'event_calendar:add_to_the_calendar_menu_text' => 'Añadir a mi calendario',
+ 'event_calendar:remove_from_the_calendar_menu_text' => 'Remover de mi calendario',
+ 'event_calendar:remove_from_the_calendar_button' => 'Remover del calendario',
+ 'event_calendar:added_to_the_calendar' => 'Añadir al calendario',
+ 'event_calendar:removed_from_the_calendar' => 'Remover calendario',
+ 'event_calendar:add_to_the_calendar_response' => 'Evento añadido al calendario personal',
+ 'event_calendar:add_to_the_calendar_error' => 'No se puede añadir ese evento a tu calendario personal. (Quizás tu calendario ya esté lleno o ¿intentas agendar dos eventos a la vez en tu calendario personal?)',
+ 'event_calendar:remove_from_the_calendar_response' => 'Evento borrado del calendario.',
+ 'event_calendar:users_for_event_menu_title' => 'Habitantes que apuntan ese evento en su calendario personal',
+ 'event_calendar:personal_event_calendars_link_one' => 'En 1 calendario',
+ 'event_calendar:users_for_event_breadcrumb' => 'Calendario personal',
+ 'event_calendar:settings:agenda' => 'Agenda',
+ 'event_calendar:settings:full' => 'Vista completa',
+ 'event_calendar:settings:spots_display:title' => 'Añade un campo para cada evento para que puedas limitar el numero de personas que pueden añadir el evento a su propio calendario',
+ 'event_calendar:settings:no_collisions:title' => 'Colisión detectada: evita que se añadan dos eventos a la vez en el calendario',
+ 'event_calendar:settings:collision_length:title' => 'Cuanto tiempo (en segundos) un evento puede ser considerado como activo si no se establece una fecha o hora para su fin (usado para la detección de colisiones). Por defecto: 3600 segundos = 1 hora.',
+ 'event_calendar:spots_description' => '¿A cuantas habitantes se aceptarán que añadan ese evento a sus calendarios personales?',
+ 'event_calendar:open' => 'Abierto',
+ 'event_calendar:add_user_label' => 'Añadir habitantes',
+ 'event_calendar:add_users_notify:subject' => 'Un nuevo evento se ha añadido a tu calendario personal',
+ 'event_calendar:add_users_notify:body' => '%s,
+
+Se ha añadido un evento de "%s" a tu calendario personal.',
+ 'event_calendar:settings:personal_manage:title' => 'Permisos del calendario',
+ 'event_calendar:request_event_response' => 'Tu petición para añadir ese evento ha sido enviada,',
+ 'event_calendar:request_event_error' => 'Error: Tu petición para añadir el evento al calendario no se ha enviado.',
+ 'event_calendar:request_subject' => 'Haz recebido una invitación de calendario',
+ 'event_calendar:review_requests_request_none' => 'No hay peticiones a revisar para ese evento.',
+ 'event_calendar:request:remove:check' => '¿Estas seguro que quieres rechazar esa petición?',
+ 'event_calendar:requestkilled' => 'La petición ha sido rechazada.',
+ 'event_calendar:request_approved' => 'La petición ha sido aceptada.',
+ 'event_calendar:make_request_title' => 'Enviar petición a ese evento',
+ 'event_calendar:review_requests:reject' => 'Rechazar',
+ 'event_calendar:review_requests:reject:title' => 'Rechazar la petición',
+ 'event_calendar:review_requests:accept' => 'Aceptar',
+ 'event_calendar:review_requests:accept:title' => 'Aceptar la petición',
+ 'event_calendar:review_requests:error:approve' => 'Error: la petición no se ha aprobado.',
+ 'event_calendar:review_requests:error:reject' => 'Error: No se ha podido rechazar la petición.',
+ 'event_calendar:settings:hide_access:title' => 'Ocultar acceso al calendario',
+ 'event_calendar:settings:hide_end:title' => 'Ocultar campos de fecha y hora',
+ 'event_calendar:settings:more_required:title' => 'Hacer visible todos los campos excepto si se requiere una larga descripción.',
+ 'event_calendar:add_to_group:remove_group_title' => 'Remover ese evento del grupo',
+ 'event_calendar:add_to_group:remove_group_button' => 'Remover del grupo',
+ 'event_calendar:remove_from_group:success' => 'Evento removido del calendario del grupo',
+ 'event_calendar:add_to_group:add_group_title' => 'Añadir ese evento al grupo',
+ 'event_calendar:add_to_group:add_group_button' => 'Adicionar al grupo',
+ 'event_calendar:add_to_group:success' => 'Evento añadido al calendario del grupo',
+ 'event_calendar:settings:add_to_group_calendar:title' => 'Aceptar que el grupo de operadores añadan cualquier evento existente al calendario del grupo',
+ 'event_calendar:group_breadcrumb' => 'Calendario del grupo',
+ 'event_calendar:generic_error_title' => 'Error',
+ 'event_calendar:add' => 'Añadir',
+ 'event_calendar:owner:permissions_error' => 'No ienes permisos para visualizar esa pagina.',
+ 'event_calendar:feature_not_activated' => 'Esa funcionalidad no esta activada',
+ 'event_calendar:show_all' => 'Muestra todo',
+ 'event_calendar:show_mine' => 'Mi calendario',
+ 'event_calendar:show_friends' => 'Calendario de mis amigas',
+ 'event_calendar:from_label' => 'Desde:',
+ 'event_calendar:to_label' => 'Hasta:',
+ 'event_calendar:time_format:12hour' => '12 horas (am/pm)',
+ 'event_calendar:time_format:24hour' => '24 horas',
+ 'event_calendar:all_day_label' => 'El evento dura todo el día',
+ 'event_calendar:repeat_interval_label' => 'Repite cada',
+ 'event_calendar:day_abbrev:monday' => 'L',
+ 'event_calendar:day_abbrev:tuesday' => 'M',
+ 'event_calendar:day_abbrev:wednesday' => 'M',
+ 'event_calendar:day_abbrev:thursday' => 'J',
+ 'event_calendar:day_abbrev:friday' => 'V',
+ 'event_calendar:day_abbrev:saturday' => 'S',
+ 'event_calendar:day_abbrev:sunday' => 'D',
+ 'event_calendar:dow:full:monday' => 'Lunes',
+ 'event_calendar:dow:full:tuesday' => 'Martes',
+ 'event_calendar:dow:full:wednesday' => 'Miércoles',
+ 'event_calendar:dow:full:thursday' => 'Jueves',
+ 'event_calendar:dow:full:friday' => 'Viernes',
+ 'event_calendar:dow:full:saturday' => 'Sabado',
+ 'event_calendar:dow:full:sunday' => 'Domingo',
+ 'event_calendar:schedule_type:fixed' => 'Selecciona dia/hora',
+ 'event_calendar:interval:minute' => 'minuto(s)',
+ 'event_calendar:interval:hour' => 'hora(s)',
+ 'event_calendar:interval:day' => 'día(s)',
+ 'event_calendar:site_calendar' => 'Calendario del sitio',
+ 'event_calendar:calendar_label' => 'Calendario',
+ 'event_calendar:basic:header' => 'Información básica',
+ 'event_calendar:schedule:header' => 'Fecha',
+ 'event_calendar:permissions:header' => 'Permisos',
+ 'event_calendar:read_access' => 'Acceso de lectura',
+ 'event_calendar:add_event' => 'Añadir evento',
+ 'event_calendar:schedule_event' => 'Evento agendado',
+ 'item:object:event_calendar' => 'Calendario',
+ 'event_calendar:new_event' => 'Nuevo evento',
+ 'event_calendar:no_such_event_edit_error' => 'Error: No existe tal evento o usted no tiene autorización para editarlo.',
+ 'event_calendar:add_event_title' => 'Agregar evento',
+ 'event_calendar:manage_event_title' => 'Editar evento',
+ 'event_calendar:manage_event_description' => 'Introduzca los detalles de su evento a continuación. El título, lugar y fecha de inicio se requieren. Puede hacer clic en los íconos del calendario para establecer las fechas de inicio y fin.',
+ 'event_calendar:title_label' => 'Título',
+ 'event_calendar:title_description' => 'Una a cuatro palabras',
+ 'event_calendar:brief_description_label' => 'Descripción breve',
+ 'event_calendar:brief_description_description' => 'Una frase corta.',
+ 'event_calendar:venue_label' => 'Lugar',
+ 'event_calendar:venue_description' => '¿Dónde se llevará a cabo este evento?',
+ 'event_calendar:start_date_label' => 'Fecha de inicio',
+ 'event_calendar:start_date_description' => '¿Cuándo comenzará este evento?',
+ 'event_calendar:end_date_label' => 'Fecha final',
+ 'event_calendar:end_date_description' => '¿Cuándo terminará este evento? La fecha de inicio será usada como la fecha de finalización si no se suministra esta información.',
+ 'event_calendar:start_time_label' => 'Hora de inicio',
+ 'event_calendar:start_time_description' => '¿A qué hora comenzará este evento?',
+ 'event_calendar:end_time_label' => 'Hora de finalización',
+ 'event_calendar:end_time_description' => '¿A qué hora terminará este evento?',
+ 'event_calendar:fees_label' => 'Tarifas',
+ 'event_calendar:fees_description' => 'El costo de este evento, si hay caso.',
+ 'event_calendar:contact_label' => 'Contacto',
+ 'event_calendar:contact_description' => 'Persona que será el contacto para brindar mayor información, preferiblemente con número de teléfono o dirección de correo electrónico.',
+ 'event_calendar:organiser_label' => 'Origanizador',
+ 'event_calendar:organiser_description' => 'La persona u organización responsable por este evento.',
+ 'event_calendar:event_tags_label' => 'Etiquetas',
+ 'event_calendar:event_tags_description' => 'Lista de etiquetas relativas al eventos, separadas por una coma.',
+ 'event_calendar:long_description_label' => 'Descripción larga',
+ 'event_calendar:long_description_description' => 'Puede ser un parágrafo o más, según lo requerido.',
+ 'event_calendar:manage_event_response' => 'Su evento ha sido guardado.',
+ 'event_calendar:add_event_response' => 'Su evento ha sido agregado.',
+ 'event_calendar:manage_event_error' => 'Error: Hubo un error al guardar su evento. Por favor asegúrese que todos los campos requeridos hayan sido proporcionados.',
+ 'event_calendar:error_nosuchevent' => 'Error: no existe tal evento.',
+ 'event_calendar:show_events_title' => 'Calendario',
+ 'event_calendar:day_label' => 'Día',
+ 'event_calendar:week_label' => 'Semana',
+ 'event_calendar:month_label' => 'Mes',
+ 'event_calendar:group' => 'Calendario de grupo',
+ 'event_calendar:new' => 'Agregar evento',
+ 'event_calendar:submit' => 'Enviar',
+ 'event_calendar:cancel' => 'Cancelar',
+ 'event_calendar:widget_title' => 'Calendario',
+ 'event_calendar:widget:description' => 'Exponer sus eventos.',
+ 'event_calendar:num_display' => 'Número de eventos expuestos',
+ 'event_calendar:groupprofile' => 'Eventos venideros',
+ 'event_calendar:view_calendar' => 'ver calendario',
+ 'event_calendar:when_label' => 'Cuando',
+ 'event_calendar:site_wide_link' => 'Ver todos los eventos',
+ 'event_calendar:view_link' => 'Ver este evento',
+ 'event_calendar:edit_link' => 'Editar este evento',
+ 'event_calendar:delete_link' => 'Eliminar este evento',
+ 'event_calendar:delete_response' => 'Este evento ha sido eliminado.',
+ 'event_calendar:error_delete' => 'Este evento no existe o usted no tiene el derecho de eliminarlo.',
+ 'event_calendar:delete_cancel_response' => 'Eliminación del evento cancelada.',
+ 'event_calendar:add_to_my_calendar' => 'Agregar a mi calendario',
+ 'event_calendar:remove_from_my_calendar' => 'Retirar de mi calendario',
+ 'event_calendar:add_to_my_calendar_response' => 'Este evento ha sido agregado a su calendario personal.',
+ 'event_calendar:remove_from_my_calendar_response' => 'Este evento ha sido retirado de su calendario personal.',
+ 'event_calendar:users_for_event_title' => 'Personas interesadas en el evento "%s"',
+ 'event_calendar:personal_event_calendars_link' => 'Eventos personales del calendario (%s)',
+ 'event_calendar:settings:group_profile_display:title' => 'Perfil de visualización del calendario de grupo (si están habilitados los calendarios de grupo)',
+ 'event_calendar:settings:group_profile_display_option:left' => 'Columna de la izquierda',
+ 'event_calendar:settings:group_profile_display_option:right' => 'Columna de la derecha',
+ 'event_calendar:settings:group_profile_display_option:none' => 'Ninguno',
+ 'event_calendar:settings:times:title' => 'Agregar hora y fecha a los eventos',
+ 'event_calendar:settings:autopersonal:title' => 'Agregar automáticamente a su calendario personal eventos que un usuario cree.',
+ 'event_calendar:settings:autogroup:title' => 'Agregar automáticamente los eventos de grupo al calendario personal de sus miembros.',
+ 'event_calendar:settings:agenda_view:title' => 'Usar Vista previa de Agenda',
+ 'event_calendar:settings:venue_view:title' => 'Mostrar sede en vista rápida (listados de eventos)',
+ 'event_calendar:settings:yes' => 'sí',
+ 'event_calendar:settings:no' => 'no',
+ 'event_calendar:settings:site_calendar:title' => 'Calendario del sitio',
+ 'event_calendar:settings:site_calendar:admin' => 'sí, solamente si administradores pueden anunciar eventos',
+ 'event_calendar:settings:site_calendar:loggedin' => 'sí, cualquier usuario registrado puede anunciar un evento',
+ 'event_calendar:settings:group_calendar:title' => 'Calendarios de grupo',
+ 'event_calendar:settings:group_calendar:admin' => 'sí, solamente administradores y propietarios de grupos pueden anunciar eventos',
+ 'event_calendar:settings:group_calendar:members' => 'sí, cualquier miembro de un grupo puede anunciar un evento',
+ 'event_calendar:settings:group_default:title' => 'Grupos nuevos deben tener un calendario de grupo por defecto (si los calendarios de grupo están activados)',
+ 'event_calendar:settings:group_default:no' => 'no (sin embargo administradores y propietarios de grupos pueden desactivar un calendario de grupo si lo desean)',
+ 'event_calendar:settings:group_default:yes' => 'sí (sin embargo administradores y propietarios de grupos pueden desactivar un calendario de grupo si lo desean)',
+ 'event_calendar:settings:group_always_display:title' => 'Si un calendario de grupo está activo, siempre exponerlo (aun si está vacío)',
+ 'event_calendar:settings:region_display:title' => 'Agregar campo región a eventos',
+ 'event_calendar:settings:region_list:title' => 'Lista de regiones (una por línea)',
+ 'event_calendar:region_label' => 'Región',
+ 'event_calendar:region_description' => 'Selecciona la región en la cual el evento se llevará a cabo',
+ 'event_calendar:settings:type_display:title' => 'Agregar tipo de eventos a eventos',
+ 'event_calendar:settings:type_list:title' => 'Lista de tipos de eventos (uno por línea)',
+ 'event_calendar:type_label' => 'Tipo de eventos',
+ 'event_calendar:type_description' => 'Seleccione un tipo de evento.',
+ 'event_calendar:all' => 'Todos',
+ 'event_calendar:region_filter_by_label' => 'Filtro por región:',
+ 'event_calendar:settings:first_date:title' => 'Primera fecha permitida (en el formato AAAA - MM- DD)',
+ 'event_calendar:settings:last_date:title' => 'Última fecha permitida (en el formato AAAA - MM- DD)',
+ 'event_calendar:enable_event_calendar' => 'Permitir clanedario de eventos de grupo',
+ 'event_calendar:no_events_found' => 'No se encontraron eventos.',
+ 'event_calendar:mine' => 'Mío',
+ 'event_calendar:feature' => 'Presentar',
+ 'event_calendar:unfeature' => 'No presentar',
+ 'event_calendar:agenda:column:time' => 'Hora',
+ 'event_calendar:agenda:column:session' => 'Sesión',
+ 'event_calendar:agenda:column:venue' => 'Lugar',
+ 'event_calendar:upcoming_events_title' => 'Eventor venideros',
+ 'event_calendar:settings:paged' => 'Paginado',
+ 'event_calendar:settings:month' => 'Por mes',
+ 'event_calendar:settings:listing_format:title' => 'Formato del listado de eventos',
+ 'event_calendar:paged:column:date' => 'Fecha',
+ 'event_calendar:paged:column:time' => 'Hora',
+ 'event_calendar:paged:column:event' => 'Evento',
+ 'event_calendar:paged:column:venue' => 'Lugar',
+ 'event_calendar:paged:column:calendar' => 'Calendario',
+ 'event_calendar:river:created' => '%s agregado',
+ 'event_calendar:river:updated' => '%s actualizado',
+ 'event_calendar:river:annotated1' => '%s agregado',
+ 'event_calendar:river:annotated2' => 'a su calendario personal.',
+ 'event_calendar:river:create' => 'un nuevo evento titulado',
+ 'event_calendar:river:the_event' => 'un evento titulado',
+);
+add_translation("es", $language);
diff --git a/mod/event_calendar/languages/fr.php b/mod/event_calendar/languages/fr.php
new file mode 100644
index 000000000..6e2624691
--- /dev/null
+++ b/mod/event_calendar/languages/fr.php
@@ -0,0 +1,124 @@
+<?php
+$language = array (
+ 'event_calendar:manage_event_description' => 'Entrez les détails de votre événement ci-dessous. Le titre, le lieu et la date de début sont obligatoires. Vous pouvez cliquer sur les icônes du calendrier pour indiquer les dates de début et de fin.',
+ 'event_calendar:start_time_label' => 'Horaire de départ',
+ 'event_calendar:start_time_description' => 'À quelle heure cet événement commence?',
+ 'event_calendar:end_time_label' => 'Horaire de fin',
+ 'event_calendar:end_time_description' => 'À quelle heure se termine cet événement?',
+ 'event_calendar:event_tags_label' => 'Balises',
+ 'event_calendar:event_tags_description' => 'Optionnel. Une liste de balises séparées par des virgules.',
+ 'event_calendar:error_nosuchevent' => 'Erreur: il n\'y a pas de tel événement.',
+ 'event_calendar:settings:times:title' => 'Ajouter du temps et la date aux événements',
+ 'event_calendar:settings:autogroup:title' => 'Ajouter automatiquement des événements de groupe à tous les membres dans leurs agendas personnels.',
+ 'event_calendar:settings:agenda_view:title' => 'Utilisez la vue Agenda',
+ 'event_calendar:settings:venue_view:title' => 'Afficher le lieu en vue sommaire (listings des événements)',
+ 'event_calendar:settings:group_always_display:title' => 'Si un calendrier de groupe est activé, toujours l\'afficher (même vides)',
+ 'event_calendar:settings:region_display:title' => 'Ajouter un champ région aux événements',
+ 'event_calendar:settings:region_list:title' => 'Liste des rListe des régions (un par ligne)
+ (une seule par ligne)',
+ 'event_calendar:region_label' => 'Régions',
+ 'event_calendar:region_description' => 'Sélectionnez la région dans laquelle cet événement aura lieu',
+ 'event_calendar:settings:type_display:title' => 'Ajouter le type d\'événement aux événements',
+ 'event_calendar:settings:type_list:title' => 'Liste des types d\'événement (un seul par ligne)',
+ 'event_calendar:type_label' => 'Type d\'événement',
+ 'event_calendar:type_description' => 'Sélectionnez le type d\'événement.',
+ 'event_calendar:all' => 'Tous',
+ 'event_calendar:region_filter_by_label' => 'Filtrer par région:',
+ 'event_calendar:settings:first_date:title' => 'Première date d\'entrée admissible (au format AAAA-MM-JJ)',
+ 'event_calendar:settings:last_date:title' => 'Dernière date admissible (au format AAAA-MM-JJ)',
+ 'event_calendar:mine' => 'Le mien',
+ 'event_calendar:feature' => 'Mise en vedette',
+ 'event_calendar:unfeature' => 'Enlever la mise en vedette',
+ 'event_calendar:agenda:column:time' => 'Heure',
+ 'event_calendar:agenda:column:session' => 'Session',
+ 'event_calendar:agenda:column:venue' => 'Lieu',
+ 'event_calendar:upcoming_events_title' => 'Événements à venir',
+ 'event_calendar:settings:paged' => 'Pagé',
+ 'event_calendar:settings:month' => 'par mois',
+ 'event_calendar:settings:listing_format:title' => 'Format des listes d\'événements',
+ 'event_calendar:paged:column:date' => 'Date',
+ 'event_calendar:paged:column:time' => 'Heure',
+ 'event_calendar:paged:column:event' => 'Evénement',
+ 'event_calendar:paged:column:venue' => 'Lieu',
+ 'event_calendar:paged:column:calendar' => 'Calendrier',
+ 'item:object:event_calendar' => 'Agenda',
+ 'event_calendar:new_event' => 'Nouvel événement',
+ 'event_calendar:no_such_event_edit_error' => 'Erreur: Il n\'y a pas de tel événement, ou vous n\'avez pas la permission de le modifier.',
+ 'event_calendar:add_event_title' => 'Ajouter un événement',
+ 'event_calendar:manage_event_title' => 'Modifier un événement',
+ 'event_calendar:title_label' => 'Titre',
+ 'event_calendar:title_description' => 'Obligatoire. Un à quatre mots',
+ 'event_calendar:brief_description_label' => 'Courte description',
+ 'event_calendar:brief_description_description' => 'Optionnel. Une phrase courte.',
+ 'event_calendar:venue_label' => 'Lieu',
+ 'event_calendar:venue_description' => 'Obligatoire. Où se tiendra l\'événement?',
+ 'event_calendar:start_date_label' => 'Date de départ',
+ 'event_calendar:start_date_description' => 'Obligatoire. A quelle date cet événement démarera?',
+ 'event_calendar:end_date_label' => 'Date de fin de l\'événement',
+ 'event_calendar:end_date_description' => 'Optionnel. Quand c\'est événement s\'achèvera-t-il? La date de départ sera utilisée comme date de fin si ce champ n\'est pas rempli.',
+ 'event_calendar:fees_label' => 'Prix d\'entrée',
+ 'event_calendar:fees_description' => 'Optionnel. Le côut de l\'événement.',
+ 'event_calendar:contact_label' => 'Contact',
+ 'event_calendar:contact_description' => 'Optionnel. La personne à contacter pour avoir plus de renseignements, préférablement avec un numéro de téléphone ou une adresse emailpreferably with a telephone number or email address.',
+ 'event_calendar:organiser_label' => 'Organisateur',
+ 'event_calendar:organiser_description' => 'Optionnel. La personne ou l\'organisation responsable de l\'événement.',
+ 'event_calendar:long_description_label' => 'Description longue',
+ 'event_calendar:long_description_description' => 'Optionnel. Peut être un paragraphe ou plus si nécessaire.',
+ 'event_calendar:manage_event_response' => 'Votre événement a été sauvegardé.',
+ 'event_calendar:add_event_response' => 'Votre événement a été ajouté.',
+ 'event_calendar:manage_event_error' => 'Erreur: Une erreur s\'est produite lors de l\'enregistrement de votre événement. Assurez-vous que les champs spécifiés ont bien été remplis.',
+ 'event_calendar:show_events_title' => 'Agenda des événements',
+ 'event_calendar:day_label' => 'Jour',
+ 'event_calendar:week_label' => 'Semaine',
+ 'event_calendar:month_label' => 'Mois',
+ 'event_calendar:group' => 'Agenda de groupe',
+ 'event_calendar:new' => 'Ajouter un événement',
+ 'event_calendar:submit' => 'Ok',
+ 'event_calendar:cancel' => 'Annuler',
+ 'event_calendar:widget_title' => 'Agenda des événements',
+ 'event_calendar:widget:description' => 'Afficher vos événements.',
+ 'event_calendar:num_display' => 'Nombre d\'événement à afficher',
+ 'event_calendar:groupprofile' => 'Les prochains événements',
+ 'event_calendar:view_calendar' => 'Voir l\'agenda',
+ 'event_calendar:when_label' => 'Quand',
+ 'event_calendar:site_wide_link' => 'Voir tous les événements',
+ 'event_calendar:view_link' => 'Voir cet événement',
+ 'event_calendar:edit_link' => 'Modifier cet événement',
+ 'event_calendar:delete_link' => 'Supprimer cet événement',
+ 'event_calendar:delete_confirm_title' => 'Confirmer la suppression de l\'événement',
+ 'event_calendar:delete_confirm_description' => 'Etes-vous sur de vouloir supprimer cet événement ("%s")? Cette action est irréversible.',
+ 'event_calendar:delete_response' => 'Cet événement a été supprimé.',
+ 'event_calendar:error_delete' => 'Cet événement n\'existe pas ou vous n\'avez pas le droit de le supprimer.',
+ 'event_calendar:delete_cancel_response' => 'Suppression de l\'événement annulé.',
+ 'event_calendar:add_to_my_calendar' => 'Ajouter à mon agenda',
+ 'event_calendar:remove_from_my_calendar' => 'Supprimer de mon agenda',
+ 'event_calendar:add_to_my_calendar_response' => 'Cet événement a été ajouté à votre agenda personnel.',
+ 'event_calendar:remove_from_my_calendar_response' => 'Cet événement a été supprimé de votre agenda personnel.',
+ 'event_calendar:users_for_event_title' => 'Membre du site intéressé par l\'événement "%s"\'',
+ 'event_calendar:personal_event_calendars_link' => 'Agenda des événements personnels de (%s)',
+ 'event_calendar:settings:group_profile_display:title' => 'Afficher le profil de l\'agenda du groupe (Si les agendas de groupe ont été permis)',
+ 'event_calendar:settings:group_profile_display_option:left' => 'Colonne de gauche',
+ 'event_calendar:settings:group_profile_display_option:right' => 'Colonne de droite',
+ 'event_calendar:settings:group_profile_display_option:none' => 'aucun',
+ 'event_calendar:settings:autopersonal:title' => 'Ajouter automatiquement les événements d\'un utilisateur à son agenda personnelA.',
+ 'event_calendar:settings:yes' => 'oui',
+ 'event_calendar:settings:no' => 'non',
+ 'event_calendar:settings:site_calendar:title' => 'Side de l\'agenda',
+ 'event_calendar:settings:site_calendar:admin' => 'oui, seuls les administrateurs peuvent proposer des événements',
+ 'event_calendar:settings:site_calendar:loggedin' => 'oui, seuls les utilisateurs identifiés peuvent publier un événement',
+ 'event_calendar:settings:group_calendar:title' => 'Les agendas du groupe',
+ 'event_calendar:settings:group_calendar:admin' => 'oui seuls les administrateurs et les créateurs du groupe peuvent publier un événement',
+ 'event_calendar:settings:group_calendar:members' => 'oui, les membres du groupe peuvent publier un événement',
+ 'event_calendar:settings:group_default:title' => 'Les nouveaux groupes par défaut peuvent avoir leur propre agenda (Si les agendas de groupe sont permis)',
+ 'event_calendar:settings:group_default:no' => 'non (mais les administrateurs du groupe peuvement ajouter la fonction agenda si désiré)',
+ 'event_calendar:settings:group_default:yes' => 'oui (mais les administrateurs ou les créateurs du groupe peuvent supprimer la fonction agenda si désiré)',
+ 'event_calendar:enable_event_calendar' => 'Ajouter la fonction agenda au groupe',
+ 'event_calendar:no_events_found' => 'Aucun événement trouvé.',
+ 'event_calendar:river:created' => '%s ajouté',
+ 'event_calendar:river:updated' => '%s mis à jour',
+ 'event_calendar:river:annotated1' => '%s ajouté',
+ 'event_calendar:river:annotated2' => 'à son agenda personnel.',
+ 'event_calendar:river:create' => 'un nouvel événement intitulé',
+ 'event_calendar:river:the_event' => 'un événement intitulé',
+);
+add_translation("fr", $language);
diff --git a/mod/event_calendar/languages/ru.php b/mod/event_calendar/languages/ru.php
new file mode 100644
index 000000000..980c014f3
--- /dev/null
+++ b/mod/event_calendar/languages/ru.php
@@ -0,0 +1,365 @@
+<?php
+
+ $russian = array(
+
+ 'item:object:event_calendar' => "Календарь",
+ 'tag_names:event_tags' => "Теги",
+ 'event_calendar:optional' => "Опционально.",
+ 'event_calendar:required' => "ОбÑзательно.",
+ 'event_calendar:new_event' => "Ðовое Ñобытие",
+ 'event_calendar:no_such_event_edit_error' => "Ошибка: Ðет такого ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸Ð»Ð¸ у Ð²Ð°Ñ Ð½ÐµÑ‚ прав на его редактирование.",
+ 'event_calendar:add_event_title' => "Добавить Ñобытие",
+ 'event_calendar:manage_event_title' => "Изменить Ñобытие",
+ 'event_calendar:manage_event_description' => "Введите детали вашего ÑобытиÑ. "
+ ."Ðазвание, меÑто и дата начала обÑзательны. "
+ ."Ð’Ñ‹ можете нажать на иконки календарÑ, чтобы уÑтановить начальную и конечную даты.",
+ 'event_calendar:title_label' => "Ðазвание",
+ 'event_calendar:title_description' => "От одного до четырех Ñлов",
+ 'event_calendar:brief_description_label' => "Краткое опиÑание",
+ 'event_calendar:brief_description_description' => "ÐšÐ¾Ñ€Ð¾Ñ‚ÐºÐ°Ñ Ñ„Ñ€Ð°Ð·Ð°.",
+ 'event_calendar:venue_label' => "МеÑто",
+ 'event_calendar:venue_description' => "Где Ñто Ñобытие будет проходить?",
+ 'event_calendar:start_date_label' => "Дата начала",
+ 'event_calendar:start_date_description' => "Когда Ñто Ñобытие начнетÑÑ?",
+ 'event_calendar:end_date_label' => "Дата окончаниÑ",
+ 'event_calendar:end_date_description' => "Когда Ñобытие закончитÑÑ? Будет иÑпользована дата начала "
+ ."еÑли не будет указано Ñвно.",
+ 'event_calendar:start_time_label' => "Ð’Ñ€ÐµÐ¼Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°",
+ 'event_calendar:start_time_description' => "Ð’ какое Ð²Ñ€ÐµÐ¼Ñ Ñобытие начинаетÑÑ?",
+ 'event_calendar:end_time_label' => "Ð’Ñ€ÐµÐ¼Ñ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ",
+ 'event_calendar:end_time_description' => "Ð’ какое Ð²Ñ€ÐµÐ¼Ñ Ñобытие закончитÑÑ?",
+ 'event_calendar:fees_label' => "СтоимоÑÑ‚ÑŒ",
+ 'event_calendar:fees_description' => "СтоимоÑÑ‚ÑŒ мероприÑтиÑ, еÑли еÑÑ‚ÑŒ.",
+ 'event_calendar:contact_label' => "Контакт",
+ 'event_calendar:contact_description' => "Лицо Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼ можно ÑвÑзатьÑÑ Ð´Ð»Ñ ÑƒÑ‚Ð¾Ñ‡Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸, "
+ ."желательно Ñ Ð½Ð¾Ð¼ÐµÑ€Ð¾Ð¼ телефона или email адреÑом.",
+ 'event_calendar:organiser_label' => "Организатор",
+ 'event_calendar:organiser_description' => "Лицо или организациÑ, Ð¾Ñ‚Ð²ÐµÑ‡Ð°ÑŽÑ‰Ð°Ñ Ð·Ð° Ñобытие.",
+ 'event_calendar:event_tags_label' => "Теги",
+ 'event_calendar:event_tags_description' => "СпиÑок тегов, отноÑÑщихÑÑ Ðº Ñтому Ñобытию, разделенный запÑтыми.",
+ 'event_calendar:long_description_label' => "Детальное опиÑание",
+ 'event_calendar:long_description_description' => "Может быть параграф или больше, Ñколько потребуетÑÑ.",
+ 'event_calendar:manage_event_response' => "Ваше Ñобытие Ñохранено.",
+ 'event_calendar:add_event_response' => "Ваше Ñобытие добавлено.",
+ 'event_calendar:manage_event_error' => "Ошибка: При Ñохранении возникла ошибка. "
+ ."ПожалуйÑта, удоÑтоверьтеÑÑŒ, что вы указали вÑе обÑзательные полÑ.",
+ 'event_calendar:error_nosuchevent' => "Ошибка: нет такого ÑобытиÑ.",
+ 'event_calendar:show_events_title' => "Календарь",
+ 'event_calendar:day_label' => "День",
+ 'event_calendar:week_label' => "ÐеделÑ",
+ 'event_calendar:month_label' => "МеÑÑц",
+ 'event_calendar:group' => "Календарь группы",
+ 'event_calendar:new' => "Добавить Ñобытие",
+ 'event_calendar:submit' => "Отправить",
+ 'event_calendar:cancel' => "Отменить",
+ 'event_calendar:widget_title' => "Календарь",
+ 'event_calendar:widget:description' => "Отображает ваши ÑобытиÑ.",
+ 'event_calendar:num_display' => "КоличеÑтво Ñобытий",
+ 'event_calendar:events_type' => "Показывать",
+ 'event_calendar:personal_events' => "ПерÑональные",
+ 'event_calendar:all_events' => "Ð’Ñе активные",
+ 'event_calendar:groupprofile' => "ПредÑтоÑщие ÑобытиÑ",
+ 'event_calendar:view_calendar' => "проÑмотр календарÑ",
+ 'event_calendar:when_label' => "Когда",
+ 'event_calendar:site_wide_link' => "ПроÑмотреть вÑе ÑобытиÑ",
+ 'event_calendar:view_link' => "ПроÑмотреть Ñобытие",
+ 'event_calendar:edit_link' => "Изменить Ñобытие",
+ 'event_calendar:delete_link' => "Удалить Ñобытие",
+ 'event_calendar:delete_response' => "Событие было удалено.",
+ 'event_calendar:error_delete' => "Такого ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ ÑущеÑтвует или у Ð²Ð°Ñ Ð½ÐµÑ‚ прав на его удаление.",
+ 'event_calendar:delete_cancel_response' => "Удаление ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¾Ñ‚Ð¼ÐµÐ½ÐµÐ½Ð¾.",
+ 'event_calendar:add_to_my_calendar' => "Добавить в мой календарь",
+ 'event_calendar:remove_from_my_calendar' => "Убрать мз моего календарÑ",
+ 'event_calendar:add_to_my_calendar_response' => "Событие было добавлено в Ваш личный календарь.",
+ 'event_calendar:add_to_my_calendar_error' => "Событие не может быть добавлено в Ваш перÑональный каледарь. "
+ ."(Возможно Ñобытие уже заполнено или Ñовпадает по времени Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ Ñобытием в Вашем перÑональном календаре?)",
+ 'event_calendar:remove_from_my_calendar_response' => "Событие было удалено из Вашего перÑонального календарÑ.",
+ 'event_calendar:add_to_the_calendar' => "Добавить в календарь",
+ 'event_calendar:remove_from_the_calendar' => "Убрать",
+ 'event_calendar:add_to_the_calendar_menu_text' => "Добавить в мой",
+ 'event_calendar:remove_from_the_calendar_menu_text' => "Убрать из моего",
+ 'event_calendar:remove_from_the_calendar_button' => "Убрать из календарÑ",
+ 'event_calendar:added_to_the_calendar' => "Добавлено в календарь",
+ 'event_calendar:removed_from_the_calendar' => "Удалено из календарÑ",
+ 'event_calendar:add_to_the_calendar_response' => "Событие добавлено в календарь.",
+ 'event_calendar:add_to_the_calendar_error' => "Это Ñобытие не может быть добавлено в календарь Ñтой перÑоны. "
+ ."(Возможно, Ñобытие уже заполнено или запланировано на времÑ, Ñовпадающее Ñо временем другого ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð² календаре Ñтой перÑоны)",
+ 'event_calendar:remove_from_the_calendar_response' => "Событие удалено из ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ Ñтой перÑоны.",
+
+ 'event_calendar:users_for_event_menu_title' => "Люди, региÑтрирующие Ñто Ñобытие в Ñвоих календарÑÑ…",
+ 'event_calendar:users_for_event_title' => "ПерÑональные календари \"%s'\"",
+ 'event_calendar:personal_event_calendars_link' => "Ð’ %s календарÑÑ…",
+ 'event_calendar:personal_event_calendars_link_one' => "В 1 календаре",
+ 'event_calendar:users_for_event_breadcrumb' => "ПерÑональные календари",
+ 'event_calendar:settings:group_profile_display:title' => "Окно Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€ÐµÐ¹ группы (еÑли календари группы разрешены)",
+ 'event_calendar:settings:group_profile_display_option:left' => "Ð»ÐµÐ²Ð°Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°",
+ 'event_calendar:settings:group_profile_display_option:right' => "Ð¿Ñ€Ð°Ð²Ð°Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°",
+ 'event_calendar:settings:group_profile_display_option:none' => "никакаÑ",
+ 'event_calendar:settings:times:title' => "Добавить Ð²Ñ€ÐµÐ¼Ñ Ð¸ дату к ÑобытиÑм",
+ 'event_calendar:settings:autopersonal:title' => "ÐвтоматичеÑки добавлÑÑ‚ÑŒ ÑобытиÑ, которые пользователь Ñоздает в Ñвоем календаре.",
+ 'event_calendar:settings:autogroup:title' => "ÐвтоматичеÑки добавлÑÑ‚ÑŒ групповые ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð² перÑональные календари вÑех членов группы.",
+ 'event_calendar:settings:agenda_view:title' => "ИÑпользовать вид План",
+ 'event_calendar:settings:venue_view:title' => "Показывать меÑто Ð¿Ñ€Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð² итоговом виде (ÑпиÑки Ñобытий)",
+ 'event_calendar:settings:yes' => "да",
+ 'event_calendar:settings:no' => "нет",
+ 'event_calendar:settings:site_calendar:title' => "Календарь Ñайта",
+ 'event_calendar:settings:site_calendar:admin' => "да, только админиÑтраторы могут отправлÑÑ‚ÑŒ ÑобытиÑ",
+ 'event_calendar:settings:site_calendar:loggedin' => "да, только вошедшие пользователи могут отправлÑÑ‚ÑŒ ÑобытиÑ",
+ 'event_calendar:settings:group_calendar:title' => "Календари группы",
+ 'event_calendar:settings:group_calendar:admin' => "да, только админиÑтраторы и владельцы групп могут отправлÑÑ‚ÑŒ ÑобытиÑ",
+ 'event_calendar:settings:group_calendar:members' => "да, только члены групп могут отправлÑÑ‚ÑŒ ÑобытиÑ",
+ 'event_calendar:settings:group_default:title' => "По умолчанию новые группы должны иметь календарь группы (еÑли календари группы разрешены)",
+ 'event_calendar:settings:group_default:no' => "нет (но админиÑтраторы или владельцы групп могут разрешить календари группы)",
+ 'event_calendar:settings:group_default:yes' => "да (но админиÑтраторы или владельцы групп могут запретить календари группы)",
+ 'event_calendar:settings:group_always_display:title' => "Ð’Ñегда показывать календарь группы, еÑли календари группы разрешены (даже еÑли он пуÑтой)",
+ 'event_calendar:settings:region_display:title' => "Добавить поле Регион в ÑобытиÑ",
+ 'event_calendar:settings:region_list:title' => "СпиÑок регионов (один на Ñтроку)",
+ 'event_calendar:region_label' => "Регион",
+ 'event_calendar:region_description' => "Выбрать регион, где будет проводитьÑÑ Ñобытие.",
+ 'event_calendar:settings:type_display:title' => "Добавить тип ÑобытиÑ",
+ 'event_calendar:settings:type_list:title' => "СпиÑок типов Ñобытий (один на Ñтроку)",
+ 'event_calendar:type_label' => "Тип ÑобытиÑ",
+ 'event_calendar:type_description' => "Выбрать тип ÑобытиÑ.",
+ 'event_calendar:all' => "Ð’Ñе",
+ 'event_calendar:region_filter_by_label' => "Фильтровать по региону: ",
+ 'event_calendar:settings:first_date:title' => "ÐŸÐµÑ€Ð²Ð°Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° (в формате ГГГГ-ММ-ДД)",
+ 'event_calendar:settings:last_date:title' => "ПоÑледнÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° (в формате ГГГГ-ММ-ДД)",
+ 'event_calendar:enable_event_calendar' => "Включить календарь группы",
+ 'event_calendar:no_events_found' => "Ðе найдено ни одного ÑобытиÑ.",
+ 'event_calendar:mine' => "Мои",
+ 'event_calendar:feature' => "СвойÑтва",
+ 'event_calendar:unfeature' => "Unfeature",
+ 'event_calendar:agenda:column:time' => "ВремÑ",
+ 'event_calendar:agenda:column:session' => "СеÑÑиÑ",
+ 'event_calendar:agenda:column:venue' => "МеÑто",
+ 'event_calendar:upcoming_events_title' => "ПредÑтоÑщие ÑобытиÑ",
+ 'event_calendar:settings:paged' => "поÑтранично",
+ 'event_calendar:settings:agenda' => "план",
+ 'event_calendar:settings:month' => "по меÑÑцам",
+ 'event_calendar:settings:full' => "полный вид",
+ 'event_calendar:settings:listing_format:title' => "Формат ÑпиÑка Ñобытий",
+ 'event_calendar:paged:column:date' => "Дата",
+ 'event_calendar:paged:column:time' => "ВремÑ",
+ 'event_calendar:paged:column:event' => "Событие",
+ 'event_calendar:paged:column:venue' => "МеÑто",
+ 'event_calendar:paged:column:calendar' => "Календарь",
+ 'event_calendar:settings:spots_display:title' => "Добавить поле КоличеÑтво к каждому "
+ ."чтобы ограничить количеÑтво людей, которые могут добавить Ñобытие к Ñебе в календари",
+ 'event_calendar:settings:no_collisions:title' => "Определение конфликтов: запретить людÑм добавлÑÑ‚ÑŒ в календари два ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ñ Ð¿ÐµÑ€ÐµÑекающимиÑÑ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð°Ð¼Ð¸",
+ 'event_calendar:settings:collision_length:title' => "Какую длительноÑÑ‚ÑŒ (в Ñекундах) выÑтавлÑÑ‚ÑŒ Ñобытию, еÑли не уÑтановлена его ÐºÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ð´Ð°Ñ‚Ð° или Ð²Ñ€ÐµÐ¼Ñ "
+ ."(иÑпользуетÑÑ Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚Ð¾Ð²). По умолчанию 3600 Ñекунд = 1 чаÑ.",
+ 'event_calendar:spots_label' => "КоличеÑтво",
+ 'event_calendar:spots_description' => "Скольким людÑм разрешено добавить Ñто Ñобытие в Ñвои перÑональные календари?",
+ 'event_calendar:open' => "Открыт",
+ 'event_calendar:settings:add_users:title' => "Разрешить ÑоздателÑм ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸ админиÑтраторам Ñайта добавлÑÑ‚ÑŒ Ñвои ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð² другие перÑональные календари.",
+ 'event_calendar:add_user_label' => "Добавить пользователей",
+ 'event_calendar:add_user_description' => "Добавить Ñто Ñобытие в перÑональные календари, Ð²Ñ‹Ð±Ð¸Ñ€Ð°Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² поле Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼ выше. "
+ ."Ð’Ñ‹ можете добавить неÑкольких пользователей, Ð½Ð°Ð¶Ð¸Ð¼Ð°Ñ Ð½Ð° ÑÑылку \"+\". (Ð’Ñ‹ должны отправить Ñту форму, чтобы добавить Ñобытие в календари.)",
+ 'event_calendar:settings:add_users_notify:title' => "Уведомить по Ñлектронной почте тех пользователей, которым админиÑтраторы Ñайта или Ñоздатель ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ð»Ð¸ Ñобытие в перÑональный календарь.",
+ 'event_calendar:add_users_notify:subject' => "Ð’ ваш перÑональный календарь добавлено новое Ñобытие",
+ 'event_calendar:add_users_notify:body' => "%s,\n\nСобытие \"%s\" было добавлено в ваш календарь.\n\nÐ’Ñ‹ можете поÑмотреть его здеÑÑŒ: \n\n%s\n",
+
+ 'event_calendar:settings:region_list_handles:title' => "Строки регионов выше - Ñто Ñтроковые деÑктипторы. ИÑпользуйте ÑиÑтему переводов Elgg Ð´Ð»Ñ Ð¸Ñ… разрешениÑ.",
+ 'event_calendar:settings:type_list_handles:title' => "Строки типов выше - Ñто Ñтроковые деÑктипторы. ИÑпользуйте ÑиÑтему переводов Elgg Ð´Ð»Ñ Ð¸Ñ… разрешениÑ.",
+
+ 'event_calendar:settings:personal_manage:title' => "ДопуÑки календарÑ",
+ 'event_calendar:settings:personal_manage:description' => "ОпределÑет, могут ли пользователи добавлÑÑ‚ÑŒ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð² Ñвои перÑональные календари (открытое), "
+ ."необходим Ð·Ð°Ð¿Ñ€Ð¾Ñ Ñоздателю ÑобытиÑ, чтобы Ñделать Ñто (закрытое), невозможно вообще (чаÑтное), или позволить Ñоздателю ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÑÑ‚ÑŒ Ñто Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ (по Ñобытию). "
+ ."Примечание. ЕÑли вы уÑтанавливаете Ñто в ЧаÑтное, то, возможно, Ñледует активировать опцию, позволÑющую Ñоздателю ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸Ð»Ð¸ админиÑтраторам Ñайта "
+ ."добавлÑÑ‚ÑŒ Ñвои ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð² перÑональные календари других пользователей.",
+ 'event_calendar:strapline' => "Опубликовал(а) %s %s",
+
+ 'event_calendar:request_event_response' => "Ваш Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° добавление к Ñтому Ñобытию был отправлен.",
+ 'event_calendar:request_event_error' => "Ошибка: ваш Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° добавление к Ñтому Ñобытию не может быть отправлен.",
+ 'event_calendar:request_subject' => "Ð’Ñ‹ получили Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð¾ Ñобытию",
+ 'event_calendar:request_message' => "%s проÑит разрешить добавить Ñобытие \"%s\", здеÑÑŒ:
+
+%s
+
+в Ñвой перÑональный календарь.
+
+Ð’Ñ‹ можете управлÑÑ‚ÑŒ календарными запроÑами на Ñто Ñобытие тут:
+
+%s
+",
+
+ 'event_calendar:review_requests_error' => "Либо Ñто Ñобытие не ÑущеÑтвует, либо у Ð²Ð°Ñ Ð½ÐµÑ‚ полномочий подтверждать Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° него.",
+ 'event_calendar:review_requests_request_none' => "Ð”Ð»Ñ Ñтого ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½ÐµÑ‚ запроÑов на обзор.",
+ 'event_calendar:request:remove:check' => 'Ð’Ñ‹ уверены, что хотите отклонить Ñтот запроÑ?',
+ 'event_calendar:requestkilled' => 'Этот Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð±Ñ‹Ð» отклонен.',
+ 'event_calendar:request_approved' => "Этот Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð±Ñ‹Ð» подтвержден.",
+ 'event_calendar:review_requests_title' => "Обзор запроÑов на \"%s\"",
+ 'event_calendar:review_requests_menu_title' => "Обзор запроÑов",
+ 'event_calendar:make_request_title' => 'ЗапроÑить Ñто Ñобытие',
+ 'event_calendar:review_requests:reject' => "Отклонить",
+ 'event_calendar:review_requests:reject:title' => "Отклонить Ñтот запроÑ",
+ 'event_calendar:review_requests:accept' => "ПринÑÑ‚ÑŒ",
+ 'event_calendar:review_requests:accept:title' => "ПринÑÑ‚ÑŒ Ñтот запроÑ",
+ 'event_calendar:review_requests:error:approve' => "Ошибка: не могу подтвердить Ñтот запроÑ.",
+ 'event_calendar:review_requests:error:reject' => "Ошибка: не могу отклонить Ñтот запроÑ.",
+
+ 'event_calendar:settings:hide_access:title' => "Скрыть выпадающий Ñлемент Ñ Ð´Ð¾Ñтупом к Ñобытию",
+ 'event_calendar:settings:default_access:title' => "Какое должно быть значение по умолчанию, еÑли доÑтуп к Ñобытию Ñкрыт?",
+ 'event_calendar:settings:hide_end:title' => "Скрыть Ð¿Ð¾Ð»Ñ Ð´Ð°Ñ‚Ñ‹ и времени окончаниÑ",
+ 'event_calendar:settings:more_required:title' => "Сделать обÑзательными вÑе видимые полÑ, кроме долгих опиÑаний.",
+
+ 'event_calendar:add_to_group:remove_group_title' => "Удалить Ñто Ñобытие из группы",
+ 'event_calendar:add_to_group:remove_group_button' => "Удалить из группы",
+ 'event_calendar:remove_from_group:success' => "Событие удалено из ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹",
+ 'event_calendar:add_to_group:add_group_title' => "Добавить Ñто Ñобытие в группу",
+ 'event_calendar:add_to_group:add_group_button' => "Добавить в группу",
+ 'event_calendar:add_to_group:success' => "Событие добавлено в календарь группы",
+ 'event_calendar:settings:add_to_group_calendar:title' => "Разрешить админиÑтраторам группы добавлÑÑ‚ÑŒ любое ÑущеÑтвующее Ñобытие в календарь группы",
+
+ 'event_calendar:group_breadcrumb' => "Календарь группы",
+ 'event_calendar:no_group' => "Такой группы не ÑущеÑтвует.",
+ 'event_calendar:generic_error_title' => "Ошибка",
+ 'event_calendar:error_event_edit' => "Ошибка: либо такого ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð½Ðµ ÑущеÑтвует, либо у Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÐµÐµ редактировать.",
+ 'event_calendar:add' => "Добавить",
+
+ 'feed:ical' => "Лента iCal Ð´Ð»Ñ Ñтой Ñтраницы",
+ 'event_calendar:ical_popup_message' => "Ð’Ñ‹ можете иÑпользовать Ñледующую ÑÑылку, чтобы получить ленту iCalendar на вÑе общие ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸Ð· Ñледующего ÑпиÑка: ",
+ 'event_calendar:ical_auth_file_name:title' => "Путь к файлу идентификации iCal в локальной файловой ÑиÑтеме (ÑкÑпериментально - не нужна Ð´Ð»Ñ Ð¾Ð±Ñ‰Ð¸Ñ… лент)",
+
+ 'event_calendar:owner:permissions_error' => "У Ð²Ð°Ñ Ð½ÐµÑ‚ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñтой Ñтраницы.",
+ 'event_calendar:feature_not_activated' => "Эта возможноÑÑ‚ÑŒ не активирована",
+
+ 'event_calendar:show_all' => "Показать вÑе",
+ 'event_calendar:show_open' => "Показать открытые",
+ 'event_calendar:show_mine' => "Мой календарь",
+ 'event_calendar:show_friends' => "Календарь друзей",
+ 'event_calendar:show_only' => "Показывать только:",
+
+ 'event_calendar:listing_title:all' => "Ð’Ñе ÑобытиÑ",
+ 'event_calendar:listing_title:open' => "Открытые ÑобытиÑ",
+ 'event_calendar:listing_title:mine' => "Мой календарь",
+ 'event_calendar:listing_title:friends' => "Календари друзей",
+ 'event_calendar:manage_users:title' => "УправлÑÑ‚ÑŒ подпиÑчиками на \"%s\"",
+ 'event_calendar:manage_users:breadcrumb' => "УправлÑÑ‚ÑŒ подпиÑчиками",
+ 'event_calendar:manage_users:description' => "Добавить или удалить ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸Ð· перÑональных календарей.",
+ 'event_calendar:manage_users:unauthorized' => "Ошибка: вы не уполномочены управлÑÑ‚ÑŒ перÑональными календарÑми Ð´Ð»Ñ Ñтого ÑобытиÑ.",
+ 'event_calendar:add_to_group_members:success' => "Это Ñобытие было добавлено в перÑональные календари вÑех членов группы.",
+ 'event_calendar:add_to_group_members:error' => "Ошибка: не могу добавить Ñто Ñобытие в перÑональные календари членов группы.",
+ 'event_calendar:remove_from_group_members:success' => "Это Ñобытие было удалено из перÑональных календарей вÑех членов группы.",
+ 'event_calendar:remove_from_group_members:error' => "Ошибка: не могу удалить Ñто Ñобытие из перÑональных календарей членов группы.",
+ 'event_calendar:add_to_group_members:button' => "Добавить вÑем",
+ 'event_calendar:remove_from_group_members:button' => "Удалить из вÑех",
+
+ 'event_calendar:manage_subscribers:success' => "ПерÑональный календарь обновлен.",
+ 'event_calendar:manage_subscribers:error' => "Ошибка: не могу обновить перÑональный календарь.",
+ 'event_calendar:personal_manage:open' => "открытый",
+ 'event_calendar:personal_manage:closed' => "закрытый",
+ 'event_calendar:personal_manage:private' => "приватный",
+ 'event_calendar:personal_manage:by_event' => "по Ñобытию",
+ 'event_calendar:personal_manage:label' => "ДоÑтуп к календарю",
+ 'event_calendar:personal_manage:description' => "ОпределÑет, может ли пользователь добавить Ñто Ñобытие в Ñвой календарÑÑ… (открытый),"
+ ."требуетÑÑ Ñ€Ð°Ð·Ñ€ÐµÑˆÐ½Ð¸Ðµ (закрытый) или не имеет возможноÑти добавить вообще (приватное - такм образом только вы или Ñайт-админ могут добавÑÑ‚ÑŒ Ñобытие в календари).",
+ 'event_calendar:personal_manage:by_event:open' => "Открытое. Пользователи могут Ñвободно добавлÑÑ‚ÑŒ Ñто Ñобытие в Ñвои перÑональные календари.",
+ 'event_calendar:personal_manage:by_event:closed' => "Закрытое. Пользователи могут отправлÑÑ‚ÑŒ запроÑ, чтобы добавить Ñто Ñобытие в Ñвои перÑональные календари. Ð’Ñ‹ можете проÑматривать и подтверждать Ñти запроÑÑ‹.",
+ 'event_calendar:personal_manage:by_event:private' => "ЧаÑтное. Ð’Ñ‹ или другой админиÑтратор ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ добавить Ñто Ñобытие в перÑональные календари. У других пользователей нет возможноÑти поÑлать Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° Ñто Ñобытие.",
+
+ 'event_calendar:settings:full_calendar:title' => "Поддержка полного календарÑ",
+ 'event_calendar:modify_full_calendar:error' => "Ошибка: не могу изменить веÑÑŒ календарь",
+ 'event_calendar:from_label' => "С: ",
+ 'event_calendar:to_label' => "По: ",
+ 'event_calendar:settings:timeformat:title' => "Формат времени",
+ 'event_calendar:time_format:12hour' => "12 чаÑовой (am/pm)",
+ 'event_calendar:time_format:24hour' => "24 чаÑовой",
+ 'event_calendar:all_day_label' => "ВеÑÑŒ день",
+ 'event_calendar:repeat_interval_label' => "ПовторÑÑ‚ÑŒ каждые",
+ 'event_calendar:repeat_weeks' => "неделю(и)",
+ 'event_calendar:on_these_days' => "в Ñти дни:",
+ 'event_calendar:day_abbrev:monday' => "П",
+ 'event_calendar:day_abbrev:tuesday' => "Ð’",
+ 'event_calendar:day_abbrev:wednesday' => "С",
+ 'event_calendar:day_abbrev:thursday' => "Ч",
+ 'event_calendar:day_abbrev:friday' => "П",
+ 'event_calendar:day_abbrev:saturday' => "С",
+ 'event_calendar:day_abbrev:sunday' => "Ð’",
+ 'event_calendar:dow:full:monday' => "Понедельник",
+ 'event_calendar:dow:full:tuesday' => "Вторник",
+ 'event_calendar:dow:full:wednesday' => "Среда",
+ 'event_calendar:dow:full:thursday' => "Четверг",
+ 'event_calendar:dow:full:friday' => "ПÑтница",
+ 'event_calendar:dow:full:saturday' => "Суббота",
+ 'event_calendar:dow:full:sunday' => "ВоÑкреÑенье",
+ 'event_calendar:schedule_type:poll' => "Сделать Ð¾Ð¿Ñ€Ð¾Ñ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð½Ñ‹Ñ… про день/времÑ",
+ 'event_calendar:schedule_type:fixed' => "УÑтановить день/времÑ",
+ 'elgg_calendar:send_reminder_label' => "Отправить напоминание",
+ 'elgg_calendar:send_reminder_before' => "перед",
+ 'event_calendar:interval:minute' => "менут",
+ 'event_calendar:interval:hour' => "чаÑов",
+ 'event_calendar:interval:day' => "дней",
+ 'event_calendar:site_calendar' => "Календарь Ñайта",
+ 'event_calendar:calendar_label' => "Календарь",
+ 'event_calendar:calendar_description' => "Календарь Ð´Ð»Ñ Ñтого ÑобытиÑ.",
+ 'event_calendar:are_you_sure' => "Ð’Ñ‹ уверены в Ñтом изменении?",
+ 'event_calendar:basic:header' => "ÐžÐ±Ñ‰Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ",
+ 'event_calendar:schedule:header' => "РаÑпиÑание",
+ 'event_calendar:permissions:header' => "РазрешениÑ",
+ 'event_calendar:read_access' => "ДоÑтуп на чтение ",
+ 'event_calendar:web_conference_label' => "Подключить веб-конференцию Ð´Ð»Ñ Ñтого ÑобытиÑ",
+ 'event_calendar:share_ownership:label' => "Добавить еще владельцев Ñтого ÑобытиÑ",
+ 'event_calendar:share_ownership:description' => "Разрешить Ñледующим людÑм редактировать или удалÑÑ‚ÑŒ Ñто Ñобытие, приглашать учаÑтников",
+ 'event_calendar:settings:fewer_fields:title' => "Скрыть платежную информацию, контакты, органайзер и длинные опиÑательные полÑ",
+ 'event_calendar:settings:restricted_times:title' => "Ограниченное Ð²Ñ€ÐµÐ¼Ñ Ð¼ÐµÐ¶Ð´Ñƒ 6:00 and 21:00",
+ 'event_calendar:add_event' => "Добавить Ñобытие",
+ 'event_calendar:schedule_event' => "РаÑпиÑание ÑобытиÑ",
+ 'event_calendar:list_polls' => "Показать голоÑованиÑ",
+ 'event_calendar:edit_form:error:missing_title' => "Ошибка: укажите название",
+ 'event_calendar:repeated_event:week_interval' => "каждые %s недели.",
+ 'event_calendar:repeated_event:week_single' => "каждую неделю.",
+ 'event_calendar:repeated_event:format' => "Ðачинать Ñ %s и продолжать по %s",
+ 'event_calendar:settings:repeated_events:title' => "Разрешить повторÑющиеÑÑ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ (ÑÐµÐ¹Ñ‡Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð°ÐµÑ‚ нормально только в режиме полного календарÑ)",
+ 'event_calendar:settings:reminders:title' => "Разрешить отправку напоминаний",
+ 'event_calendar:reminder:subject' => "Ðапоминане о Ñобытии: %s",
+ 'event_calendar:reminder:body' => "Событие
+
+%s
+
+будет проходть в
+
+%s.
+
+Ð’Ñ‹ можете проÑмотреть Ñтраницу ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ñ‚ÑƒÑ‚:
+%s
+ ",
+
+ /**
+ * BBB support
+ */
+
+ 'event_calendar:bbb_server_url' => "ÐÐ´Ñ€ÐµÑ Ñервера Big Blue Button (должен заканчиватьÑÑ ÐºÐ¾Ñой чертой)",
+ 'event_calendar:bbb_security_salt' => "Случайное чиÑло безопаÑноÑти Big Blue Button",
+ 'event_calendar:bbb_create_error' => "Ошибка: невозможно Ñоздать конференцию BBB, Ñообщение: %s",
+ 'event_calendar:conference_create_error' => "Ошибка: невозможно Ñоздать веб-конференцию.",
+ 'event_calendar:bbb_settings_error' => "Ошибка: необходимо уÑтановить Ð°Ð´Ñ€ÐµÑ ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð¸ и Ñлучайное чиÑло в наÑтройках плагина",
+ 'event_calendar:couldnotjoin' => "Ошибка: невозможно приÑоединитьÑÑ Ðº конференции.",
+ 'event_calendar:join_conf_button' => "ПриÑоединитьÑÑ Ðº конференции",
+
+ 'event_calendar:poll_suffix' => "(опроÑ)",
+ 'event_calendar:resend_poll_invitation' => "Ð’Ñ‹ хотите предупредить приглашенных пользователей, что Ñти опции изменилиÑÑŒ?",
+
+ /**
+ * Event calendar river
+ **/
+
+ //generic terms to use
+
+ 'river:update:object:event_calendar' => "%s обновил Ñобытие %s",
+ 'river:create:object:event_calendar' => "%s добавил Ñобытие %s",
+ 'river:comment:object:event_calendar' => '%s оÑтавил комментарий на Ñобытие %s',
+ 'event_calendar:river:created' => "%s добавлено",
+ 'event_calendar:river:updated' => "%s обновлено",
+ 'event_calendar:river:annotated1' => "%s добавил",
+ 'event_calendar:river:annotated2' => "в его/ее календарь.",
+
+ //these get inserted into the river links to take the user to the entity
+ 'event_calendar:river:create' => "новое Ñобытие",
+ 'event_calendar:river:the_event' => "Ñобытие",
+
+ );
+
+ add_translation("ru",$russian);
+
+?>
diff --git a/mod/event_calendar/manifest.xml b/mod/event_calendar/manifest.xml
new file mode 100644
index 000000000..ab565f233
--- /dev/null
+++ b/mod/event_calendar/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>Event Calendar</name>
+ <author>Kevin Jardine and Lorea Developers</author>
+ <version>1.8.0</version>
+ <category>content</category>
+ <category>widget</category>
+ <description>Adds configurable group and/or site-wide event calendars.</description>
+ <website>https://lorea.org</website>
+ <copyright>(C) Radagast Solutions 2009-2011, Lorea Developers 2011-2013</copyright>
+ <license>GNU Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/event_calendar/models/model.php b/mod/event_calendar/models/model.php
new file mode 100644
index 000000000..7b4698f98
--- /dev/null
+++ b/mod/event_calendar/models/model.php
@@ -0,0 +1,2518 @@
+<?php
+/**
+ * Elgg event model
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2008-2011
+ * @link http://radagast.biz/
+ *
+ */
+
+function event_calendar_get_event_for_edit($event_id) {
+ if ($event_id && $event = get_entity($event_id)) {
+ if ($event->canEdit()) {
+ return $event;
+ } else {
+ return false;
+ }
+ } else {
+ return false;
+ }
+}
+
+// converts to time in minutes since midnight
+function event_calendar_convert_to_time($hour,$minute,$meridian) {
+ if ($meridian) {
+ if ($meridian == 'am') {
+ if ($hour == 12) {
+ $hour = 0;
+ }
+ } else {
+ if ($hour < 12) {
+ $hour += 12;
+ }
+ }
+ }
+ return 60*$hour+$minute;
+}
+
+// returns the event or FALSE
+function event_calendar_set_event_from_form($event_guid,$group_guid) {
+
+ $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar');
+ $event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar');
+ $event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar');
+ $event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar');
+ $event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar');
+ $event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar');
+ $event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar');
+ $event_calendar_repeating_events = elgg_get_plugin_setting('repeating_events', 'event_calendar');
+ $schedule_type = get_input('schedule_type');
+
+ if ($event_calendar_more_required == 'yes') {
+ $required_fields = array('title','venue','start_date',
+ 'brief_description','fees','contact','organiser',
+ 'tags');
+
+ if ($event_calendar_times != 'no') {
+ $required_fields[] = 'start_time';
+ if ($event_calendar_hide_end != 'yes') {
+ $required_fields[] = 'end_time';
+ }
+ }
+ if ($event_calendar_region_display == 'yes') {
+ $required_fields[] = 'region';
+ }
+ if ($event_calendar_type_display == 'yes') {
+ $required_fields[] = 'event_type';
+ }
+ if ($event_calendar_spots_display == 'yes') {
+ $required_fields[] = 'spots';
+ }
+ } else {
+ $required_fields = array('title');
+ }
+
+ if ($event_guid) {
+ $event = get_entity($event_guid);
+ if (!elgg_instanceof($event, 'object', 'event_calendar')) {
+ // do nothing because this is a bad event guid
+ return FALSE;
+ }
+ } else {
+ $user_guid = elgg_get_logged_in_user_guid();
+ $event = new ElggObject();
+ $event->subtype = 'event_calendar';
+ $event->owner_guid = $user_guid;
+ if ($group_guid) {
+ $event->container_guid = $group_guid;
+ } else {
+ $event->container_guid = $event->owner_guid;
+ }
+ }
+ $event->access_id = get_input('access_id');
+ $event->title = get_input('title');
+ $event->description = get_input('description');
+ $event->venue = get_input('venue');
+
+ if ($schedule_type != 'poll') {
+ $start_date_text = trim(get_input('start_date'));
+ /*$event->original_start_date = get_input('start_date');
+ //$end_date = trim(get_input('end_date',''));
+ // convert start date from current server time to GMT
+ $start_date_text = gmdate("Y-m-d",$start_date);
+ //$event->munged_start_date_string = $start_date_text." ".date_default_timezone_get();*/
+
+ // TODO: is the timezone bit necessary?
+ $event->start_date = strtotime($start_date_text." GMT");
+ $end_date_text = trim(get_input('end_date',''));
+ //$event->original_end_date = get_input('end_date');
+ if ($end_date_text) {
+ $event->end_date = strtotime($end_date_text." GMT");
+ //$event->munged_end_date_string = $end_date_text." ".date_default_timezone_get();
+ } else {
+ $event->end_date = '';
+ }
+
+ if ($event_calendar_times != 'no') {
+ $hour = get_input('start_time_hour','');
+ $minute = get_input('start_time_minute','');
+ $meridian = get_input('start_time_meridian','');
+ if (is_numeric($hour) && is_numeric($minute)) {
+ $event->start_time = event_calendar_convert_to_time($hour,$minute,$meridian);
+ } else {
+ $event->start_time = '';
+ }
+ $hour = get_input('end_time_hour','');
+ $minute = get_input('end_time_minute','');
+ $meridian = get_input('end_time_meridian','');
+ if (is_numeric($hour) && is_numeric($minute)) {
+ $event->end_time = event_calendar_convert_to_time($hour,$minute,$meridian);
+ } else {
+ $event->end_time = '';
+ }
+ if (is_numeric($event->start_date) && is_numeric($event->start_time)) {
+ // Set start date to the Unix start time, if set.
+ // This allows sorting by date *and* time.
+ $event->start_date += $event->start_time*60;
+ }
+ }
+ }
+ if ($event_calendar_spots_display == 'yes') {
+ $event->spots = trim(get_input('spots'));
+ }
+ if ($event_calendar_region_display == 'yes') {
+ $event->region = get_input('region');
+ }
+ if ($event_calendar_type_display == 'yes') {
+ $event->event_type = get_input('event_type');
+ }
+ if ($event_calendar_personal_manage == 'by_event') {
+ $event->personal_manage = get_input('personal_manage');
+ }
+
+ if ($event_calendar_repeating_events != 'no') {
+ $repeats = get_input('repeats');
+ $event->repeats = $repeats;
+ if ($repeats == 'yes') {
+ $event->repeat_interval = get_input('repeat_interval');
+ $dow = array('monday','tuesday','wednesday','thursday','friday','saturday','sunday');
+ foreach ($dow as $w) {
+ $v = 'event-calendar-repeating-'.$w.'-value';
+ $event->$v = get_input($v);
+ }
+ }
+ }
+ $event->fees = get_input('fees');
+ $event->contact = get_input('contact');
+ $event->organiser = get_input('organiser');
+ $event->tags = string_to_tag_array(get_input('tags'));
+ $event->long_description = get_input('long_description');
+ $event->schedule_type = $schedule_type;
+ $event->send_reminder = get_input('send_reminder');
+ $event->reminder_number = get_input('reminder_number');
+ $event->reminder_interval = get_input('reminder_interval');
+ $event->web_conference = get_input('web_conference');
+ $event->real_end_time = event_calendar_get_end_time($event);
+ foreach ($required_fields as $fn) {
+ if (!trim($event->$fn)) {
+ return FALSE;
+ break;
+ }
+ }
+ if ($event->save()) {
+ if (!$event_guid && $event->web_conference) {
+ if (!event_calendar_create_bbb_conf($event)) {
+ register_error(elgg_echo('event_calendar:conference_create_error'));
+ }
+ }
+ if ($group_guid && (elgg_get_plugin_setting('autogroup', 'event_calendar') == 'yes')) {
+ event_calendar_add_personal_events_from_group($event->guid,$group_guid);
+ }
+ if (elgg_get_plugin_setting('add_users', 'event_calendar') == 'yes') {
+ if (function_exists('autocomplete_member_to_user')) {
+ $addusers = get_input('adduser',array());
+ foreach($addusers as $adduser) {
+ if ($adduser) {
+ $user = autocomplete_member_to_user($adduser);
+ $user_id = $user->guid;
+ event_calendar_add_personal_event($event->guid,$user_id);
+ if (elgg_get_plugin_setting('add_users_notify', 'event_calendar') == 'yes') {
+ notify_user($user_id, $CONFIG->site->guid, elgg_echo('event_calendar:add_users_notify:subject'),
+ sprintf(
+ elgg_echo('event_calendar:add_users_notify:body'),
+ $user->name,
+ $event->title,
+ $event->getURL()
+ )
+ );
+ }
+ }
+ }
+ }
+ }
+ }
+ return $event;
+}
+
+function event_calendar_get_events_between($start_date,$end_date,$is_count=FALSE,$limit=10,$offset=0,$container_guid=0,$region='-') {
+ $polls_supported = elgg_is_active_plugin('event_poll');
+ if ($is_count) {
+ $count = event_calendar_get_entities_from_metadata_between2('start_date','end_date',
+ $start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,true,$region);
+ return $count;
+ } else {
+ $events = event_calendar_get_entities_from_metadata_between2('start_date','end_date',
+ $start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,false,$region);
+ $repeating_events = event_calendar_get_repeating_events_between($start_date,$end_date,$container_guid,$region);
+ $all_events = event_calendar_merge_repeating_events($events, $repeating_events);
+ if ($polls_supported) {
+ elgg_load_library('elgg:event_poll');
+ $all_events = event_poll_merge_poll_events($all_events,$start_date,$end_date);
+ }
+
+ return $all_events;
+ }
+}
+
+function event_calendar_merge_repeating_events($events, $repeating_events) {
+ $non_repeating_events = array();
+ foreach($events as $e) {
+ if ($e->repeats != 'yes') {
+ $non_repeating_events[] = array('event' => $e,'data' => array(array('start_time' => $e->start_date, 'end_time' => $e->real_end_time)));
+ }
+ }
+
+ return array_merge($non_repeating_events, $repeating_events);
+}
+
+function event_calendar_get_repeating_events_between($start_date,$end_date,$container_guid,$region) {
+ // game plan: get all repeating events with start date <= $end_date and then generate all possible events
+ // sanity check
+ if ($start_date <= $end_date) {
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'event_calendar',
+ 'limit' => 0,
+ 'metadata_name_value_pairs' => array(
+ array(
+ 'name' => 'start_date',
+ 'value' => $end_date,
+ 'operand' => '<='
+ ),
+ array(
+ 'name' => 'repeats',
+ 'value' => 'yes'
+ ),
+ )
+ );
+ if ($container_guid) {
+ if (is_array($container_guid)) {
+ $options['container_guids'] = $container_guid;
+ } else {
+ $options['container_guid'] = $container_guid;
+ }
+ }
+
+ if ($region && $region != '-') {
+ $options['metadata_name_value_pairs'][] = array(
+ 'name' => 'region',
+ 'value' => $region
+ );
+ }
+
+ $events = elgg_get_entities_from_metadata($options);
+ }
+ return event_calendar_get_repeating_event_structure($events, $start_date, $end_date);
+}
+
+
+function event_calendar_get_repeating_event_structure($events, $start_date, $end_date) {
+ $dow = array('monday','tuesday','wednesday','thursday','friday','saturday','sunday');
+ $repeating_events = array();
+ if ($events) {
+ foreach($events as $e) {
+ $incs = array();
+ $repeat_data = array();
+ $day_num = date('N',$e->start_date)-1;
+ for($d=0;$d<7;$d++) {
+ $fn = 'event-calendar-repeating-'.$dow[$d].'-value';
+ if ($e->$fn) {
+ $increment = $d - $day_num;
+ $incs[] = $increment;
+ }
+ }
+ if ($incs) {
+ sort($incs);
+
+ $repeat_interval = $e->repeat_interval;
+ $event_start_time = $e->start_date;
+ $event_end_time = $e->real_end_time;
+ $week = 0;
+ if ($event_start_time <= $event_end_time) {
+ $more_to_do = TRUE;
+ $cur_start_time = $event_start_time;
+ $cur_end_time = $event_end_time;
+ // keep generating events until after $end_date
+ // repeat_times is a sanity check to prevent infinite loops in case of bad data
+ $repeat_times = 0;
+ do {
+ foreach($incs as $inc) {
+ //$seconds = $inc*60*60*24;
+ if ($inc >=0) {
+ $tinc = "+ " . $inc;
+ } else {
+ $tinc = $inc;
+ }
+ $this_start_time = strtotime($tinc . " day", $cur_start_time);
+ $this_end_time = strtotime($tinc . " day", $cur_end_time);
+ if ($this_start_time > $end_date) {
+ $more_to_do = FALSE;
+ break;
+ }
+ if ($this_start_time >= $event_start_time) {
+ $repeat_data[] = array (
+ 'start_time' => $this_start_time,
+ 'end_time' => $this_end_time,
+ );
+ }
+ }
+ // repeat_interval weeks later
+ $week += $repeat_interval;
+ $cur_start_time = strtotime("+" . $week . " week", $event_start_time);
+ $cur_end_time = strtotime("+" . $week ." week", $event_end_time);
+ $repeat_times += 1;
+ } while ($repeat_times < 1000 && $more_to_do);
+ }
+ }
+ $repeating_events[] = array('event'=>$e,'data'=>$repeat_data);
+ }
+ }
+ return $repeating_events;
+}
+
+function event_calendar_get_open_events_between($start_date,$end_date,
+$is_count,$limit=10,$offset=0,$container_guid=0,$region='-', $meta_max = 'spots', $annotation_name = 'personal_event') {
+ if ($is_count) {
+ $count = event_calendar_get_entities_from_metadata_between2('start_date','end_date',
+ $start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,true,$region,$meta_max,$annotation_name);
+ return $count;
+ } else {
+ $events = event_calendar_get_entities_from_metadata_between2('start_date','end_date',
+ $start_date, $end_date, "object", "event_calendar", 0, $container_guid, $limit,$offset,"",0,false,false,$region,$meta_max,$annotation_name);
+ //return event_calendar_vsort($events,'start_date');
+ $repeating_events = event_calendar_get_open_repeating_events_between($start_date,$end_date,$container_guid,$region);
+ $all_events = event_calendar_merge_repeating_events($events, $repeating_events);
+ return $all_events;
+ }
+}
+
+function event_calendar_get_open_repeating_events_between($start_date,$end_date,$container_guid,$region) {
+ $db_prefix = elgg_get_config('dbprefix');
+ $meta_max = 'spots';
+ $annotation_name = 'personal_event';
+ $joins = array();
+ $wheres = array();
+ $meta_max_n = get_metastring_id($meta_max);
+ $ann_n = get_metastring_id($annotation_name);
+ if (!$meta_max_n || !$ann_n) {
+ if ($count) {
+ return 0;
+ } else {
+ return false;
+ }
+ }
+
+ $joins[] = "LEFT JOIN {$dbprefix}metadata m4 ON (e.guid = m4.entity_guid AND m4.name_id=$meta_max_n) ";
+ $joins[] = "LEFT JOIN {$dbprefix}metastrings ms4 ON (m4.value_id = ms4.id) ";
+ $wheres[] = "((ms4.string is null) OR (ms4.string = \"\") OR (CONVERT(ms4.string,SIGNED) > (SELECT count(id) FROM {$dbprefix}annotations ann WHERE ann.entity_guid = e.guid AND name_id = $ann_n GROUP BY entity_guid)))";
+
+ // sanity check
+ if ($start_date <= $end_date) {
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'event_calendar',
+ 'limit' => 0,
+ 'metadata_name_value_pairs' => array(
+ array(
+ 'name' => 'start_date',
+ 'value' => $end_date,
+ 'operand' => '<='
+ ),
+ array(
+ 'name' => 'repeats',
+ 'value' => 'yes'
+ ),
+ ),
+ 'joins' => $joins,
+ 'wheres' => $wheres,
+
+ );
+ if ($container_guid) {
+ if (is_array($container_guid)) {
+ $options['container_guids'] = $container_guid;
+ } else {
+ $options['container_guid'] = $container_guid;
+ }
+ }
+
+ if ($region && $region != '-') {
+ $options['metadata_name_value_pairs'][] = array(
+ 'name' => 'region',
+ 'value' => $region
+ );
+ }
+
+ $events = elgg_get_entities_from_metadata($options);
+ }
+ return event_calendar_get_repeating_event_structure($events, $start_date, $end_date);
+}
+
+function event_calendar_get_events_for_user_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') {
+ if ($is_count) {
+ // old way
+ $count = event_calendar_get_entities_from_metadata_between('start_date','end_date',
+ $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,true,$region);
+
+ return $count;
+ } else {
+ $events = event_calendar_get_entities_from_metadata_between('start_date','end_date',
+ $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,false,$region);
+ //return event_calendar_vsort($events,'start_date');
+ return $events;
+ }
+}
+
+function event_calendar_get_events_for_user_between2($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') {
+ $options_new_way = array(
+ 'type' => 'object',
+ 'subtype' => 'event_calendar',
+ 'relationship' => 'personal_event',
+ 'relationship_guid' => $user_guid,
+ 'metadata_name_value_pairs' => array( array( 'name' => 'start_date',
+ 'value' => $start_date,
+ 'operand' => '>='),
+ array( 'name' => 'real_end_time',
+ 'value' => $end_date,
+ 'operand' => '<=')
+ ),
+ );
+
+ if ($container_guid) {
+ $options_new_way['container_guid'] = $container_guid;
+ }
+ if ($region && $region != '-') {
+ $options_new_way['metadata_name_value_pairs'][] = array('name'=>'region','value'=>sanitize_string($region));
+ }
+ if ($is_count) {
+ // old way
+ $count_old_way = event_calendar_get_entities_from_metadata_between('start_date','real_end_time',
+ $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,true,$region);
+ // new way
+ $options_new_way['count'] = TRUE;
+ $count_new_way = elgg_get_entities_from_relationship($options_new_way);
+ return $count_old_way+$count_new_way;
+ } else {
+ $events_old_way = event_calendar_get_entities_from_metadata_between('start_date','real_end_time',
+ $start_date, $end_date, "object", "event_calendar", $user_guid, $container_guid, $limit,$offset,"",0,true,false,$region);
+ $options_new_way['limit'] = $limit;
+ $options_new_way['offset'] = $offset;
+ $options_new_way['order_by_metadata'] = array(array('name'=>'start_date','direction'=>'ASC','as'=>'integer'));
+ //print_r($options_new_way);
+ $events_new_way = elgg_get_entities_from_relationship($options_new_way);
+ //return event_calendar_vsort($events,'start_date');
+ $repeating_events = event_calendar_get_repeating_events_for_user_between($user_guid,$start_date,$end_date,$container_guid,$region);
+ $all_events = event_calendar_merge_repeating_events(array_merge($events_old_way,$events_new_way), $repeating_events);
+ return $all_events;
+ }
+}
+
+function event_calendar_get_repeating_events_for_user_between($user_guid,$start_date,$end_date,$container_guid,$region) {
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'event_calendar',
+ 'relationship' => 'personal_event',
+ 'relationship_guid' => $user_guid,
+ 'metadata_name_value_pairs' => array(
+ array(
+ 'name' => 'start_date',
+ 'value' => $end_date,
+ 'operand' => '<='
+ ),
+ array(
+ 'name' => 'repeats',
+ 'value' => 'yes'
+ ),
+ )
+ );
+
+ if ($container_guid) {
+ if (is_array($container_guid)) {
+ $options['container_guids'] = $container_guid;
+ } else {
+ $options['container_guid'] = $container_guid;
+ }
+ }
+
+ if ($region && $region != '-') {
+ $options['metadata_name_value_pairs'][] = array(
+ 'name' => 'region',
+ 'value' => $region
+ );
+ }
+
+ $events = elgg_get_entities_from_relationship($options);
+ return event_calendar_get_repeating_event_structure($events, $start_date, $end_date);
+}
+
+function event_calendar_get_repeating_events_for_friends_between($user_guid,$friend_list,$start_date,$end_date,$container_guid=0,$region='-') {
+
+ $db_prefix = elgg_get_config('dbprefix');
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'event_calendar',
+ 'metadata_name_value_pairs' => array(
+ array( 'name' => 'start_date',
+ 'value' => $end_date,
+ 'operand' => '<='
+ ),
+ array( 'name' => 'repeats',
+ 'value' => 'yes'
+ )
+ ),
+ 'joins' => array("JOIN {$db_prefix}entity_relationships r ON (r.guid_two = e.guid)"),
+ 'wheres' => array("r.relationship = 'personal_event'","r.guid_one IN ($friend_list)"),
+ );
+
+ if ($container_guid) {
+ if (is_array($container_guid)) {
+ $options['container_guids'] = $container_guid;
+ } else {
+ $options['container_guid'] = $container_guid;
+ }
+ }
+ if ($region && $region != '-') {
+ $options['metadata_name_value_pairs'][] = array('name'=>'region','value'=>sanitize_string($region));
+ }
+
+ $events = elgg_get_entities_from_relationship($options);
+ return event_calendar_get_repeating_event_structure($events, $start_date, $end_date);
+}
+
+function event_calendar_get_events_for_friends_between($start_date,$end_date,$is_count,$limit=10,$offset=0,$user_guid,$container_guid=0,$region='-') {
+ if ($user_guid) {
+ $friends = get_user_friends($user_guid,"",5000);
+ if ($friends) {
+ $friend_guids = array();
+ foreach($friends as $friend) {
+ $friend_guids[] = $friend->getGUID();
+ }
+ $friend_list = implode(",",$friend_guids);
+ // elgg_get_entities_from_relationship does not take multiple relationship guids, so need some custom joins and wheres
+ $db_prefix = elgg_get_config('dbprefix');
+ $options_new_way = array(
+ 'type' => 'object',
+ 'subtype' => 'event_calendar',
+ 'metadata_name_value_pairs' => array(array( 'name' => 'start_date',
+ 'value' => $start_date,
+ 'operand' => '>='),
+ array( 'name' => 'real_end_time',
+ 'value' => $end_date,
+ 'operand' => '<=')
+ ),
+ 'joins' => array("JOIN {$db_prefix}entity_relationships r ON (r.guid_two = e.guid)"),
+ 'wheres' => array("r.relationship = 'personal_event'","r.guid_one IN ($friend_list)"),
+ );
+
+ if ($container_guid) {
+ $options_new_way['container_guid'] = $container_guid;
+ }
+ if ($region && $region != '-') {
+ $options_new_way['metadata_name_value_pairs'][] = array('name'=>'region','value'=>sanitize_string($region));
+ }
+ if ($is_count) {
+ $count_old_way = event_calendar_get_entities_from_metadata_between('start_date','end_date',
+ $start_date, $end_date, "object", "event_calendar", $friend_guids, $container_guid, $limit,$offset,"",0,true,true,$region);
+ $options_new_way['count'] = TRUE;
+ $count_new_way = elgg_get_entities_from_metadata($options_new_way);
+ return $count_old_way + $count_new_way;
+ } else {
+ $events_old_way = event_calendar_get_entities_from_metadata_between('start_date','end_date',
+ $start_date, $end_date, "object", "event_calendar", $friend_guids, $container_guid, $limit,$offset,"",0,true,false,$region);
+ //return event_calendar_vsort($events,'start_date');
+ $options_new_way['limit'] = $limit;
+ $options_new_way['offset'] = $offset;
+ $options_new_way['order_by_metadata'] = array(array('name'=>'start_date','direction'=>'ASC','as'=>'integer'));
+ //print_r($options_new_way);
+ $events_new_way = elgg_get_entities_from_metadata($options_new_way);
+ $repeating_events = event_calendar_get_repeating_events_for_friends_between($user_guid,$friend_list,$start_date,$end_date,$container_guid,$region);
+ $all_events = event_calendar_merge_repeating_events(array_merge($events_old_way,$events_new_way), $repeating_events);
+ return $all_events;
+ }
+ }
+ }
+ return array();
+}
+
+function event_calendar_vsort($original,$field, $descending = false) {
+ if (!$original) {
+ return $original;
+ }
+ $sortArr = array();
+
+ foreach ( $original as $key => $item ) {
+ $sortArr[ $key ] = $item->$field;
+ }
+
+ if ( $descending ) {
+ arsort( $sortArr );
+ } else {
+ asort( $sortArr );
+ }
+
+ $resultArr = array();
+ foreach ( $sortArr as $key => $value ) {
+ $resultArr[ $key ] = $original[ $key ];
+ }
+
+ return $resultArr;
+}
+
+// TODO - replace with Elgg API if possible
+
+/**
+ * Return a list of entities based on the given search criteria.
+ * In this case, returns entities with the given metadata between two values inclusive
+ *
+ * @param mixed $meta_start_name
+ * @param mixed $meta_end_name
+ * @param mixed $meta_start_value - start of metadata range, must be numerical value
+ * @param mixed $meta_end_value - end of metadata range, must be numerical 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 mixed $owner_guid Either one integer user guid or an array of user guids
+ * @param int $container_guid If supplied, the result is restricted to events associated with a specific container
+ * @param int $limit
+ * @param int $offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
+ * @param boolean $filter Filter by events in personal calendar if true
+ * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false)
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ */
+function event_calendar_get_entities_from_metadata_between($meta_start_name, $meta_end_name, $meta_start_value, $meta_end_value, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $container_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $filter = false, $count = false, $region='-')
+{
+ global $CONFIG;
+
+ // This should not be possible, but a sanity check just in case
+ if (!is_numeric($meta_start_value) || !is_numeric($meta_end_value)) {
+ return FALSE;
+ }
+
+ $meta_start_n = get_metastring_id($meta_start_name);
+ $meta_end_n = get_metastring_id($meta_end_name);
+ if ($region && $region != '-') {
+ $region_n = get_metastring_id('region');
+ $region_value_n = get_metastring_id($region);
+ if (!$region_n || !$region_value_n) {
+ if ($count) {
+ return 0;
+ } else {
+ return FALSE;
+ }
+ }
+ }
+
+ $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";
+ if ($order_by == "") $order_by = "v.string asc";
+ $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 ((is_array($container_guid) && (count($container_guid)))) {
+ foreach($container_guid as $key => $guid) {
+ $container_guid[$key] = (int) $guid;
+ }
+ } else {
+ $container_guid = (int) $container_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";
+ $where[] = "m.name_id='$meta_start_n'";
+ $where[] = "m2.name_id='$meta_end_n'";
+ $where[] = "((v.string >= $meta_start_value AND v.string <= $meta_end_value) OR ( v2.string >= $meta_start_value AND v2.string <= $meta_end_value) OR (v.string <= $meta_start_value AND v2.string >= $meta_start_value) OR ( v2.string <= $meta_end_value AND v2.string >= $meta_end_value))";
+ if ($region && $region != '-') {
+ $where[] = "m3.name_id='$region_n'";
+ $where[] = "m3.value_id='$region_value_n'";
+ }
+ if ($site_guid > 0)
+ $where[] = "e.site_guid = {$site_guid}";
+ if ($filter) {
+ if (is_array($owner_guid)) {
+ $where[] = "ms2.string in (".implode(",",$owner_guid).")";
+ } else if ($owner_guid > 0) {
+ $where[] = "ms2.string = {$owner_guid}";
+ }
+
+ $where[] = "ms.string = 'personal_event'";
+ } else {
+ if (is_array($owner_guid)) {
+ $where[] = "e.owner_guid in (".implode(",",$owner_guid).")";
+ } else if ($owner_guid > 0) {
+ $where[] = "e.owner_guid = {$owner_guid}";
+ }
+ }
+
+ if (is_array($container_guid)) {
+ $where[] = "e.container_guid in (".implode(",",$container_guid).")";
+ } else if ($container_guid > 0)
+ $where[] = "e.container_guid = {$container_guid}";
+
+ 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 JOIN {$CONFIG->dbprefix}metadata m2 on e.guid = m2.entity_guid ";
+ if ($filter) {
+ $query .= "JOIN {$CONFIG->dbprefix}annotations a ON (a.entity_guid = e.guid) ";
+ $query .= "JOIN {$CONFIG->dbprefix}metastrings ms ON (a.name_id = ms.id) ";
+ $query .= "JOIN {$CONFIG->dbprefix}metastrings ms2 ON (a.value_id = ms2.id) ";
+ }
+ if ($region && $region != '-') {
+ $query .= "JOIN {$CONFIG->dbprefix}metadata m3 ON (e.guid = m3.entity_guid) ";
+ }
+ $query .= "JOIN {$CONFIG->dbprefix}metastrings v on v.id = m.value_id JOIN {$CONFIG->dbprefix}metastrings v2 on v2.id = m2.value_id where";
+ foreach ($where as $w)
+ $query .= " $w and ";
+ $query .= get_access_sql_suffix("e"); // Add access controls
+ $query .= ' and ' . get_access_sql_suffix("m"); // Add access controls
+ $query .= ' and ' . get_access_sql_suffix("m2"); // Add access controls
+
+ if (!$count) {
+ $query .= " order by $order_by";
+ if ($limit) {
+ $query .= " limit $offset, $limit"; // Add order and limit
+ }
+ $entities = get_data($query, "entity_row_to_elggstar");
+ if (elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') {
+ if (get_entity($container_guid) instanceOf ElggGroup) {
+ $entities = event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name,
+ $meta_start_value, $meta_end_value, $entity_type,
+ $entity_subtype, $owner_guid, $container_guid,
+ 0, 0, "", 0,
+ false, false, '-',$entities);
+ }
+ }
+ return $entities;
+ } else {
+ if ($row = get_data_row($query))
+ return $row->total;
+ }
+ return false;
+}
+
+// adds any related events (has the display_on_group relation)
+// that meet the appropriate criteria
+
+function event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name,
+$meta_start_value, $meta_end_value, $entity_type = "",
+$entity_subtype = "", $owner_guid = 0, $container_guid = 0,
+$limit = 10, $offset = 0, $order_by = "", $site_guid = 0,
+$filter = false, $count = false, $region='-',$main_events) {
+
+ $main_list = array();
+ if ($main_events) {
+ foreach ($main_events as $event) {
+ $main_list[$event->guid] = $event;
+ }
+ }
+ $related_list = array();
+ $related_events = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'display_on_group',
+ 'relationship_guid' => $container_guid,
+ 'inverse_relationship' => TRUE,
+ ));
+ if ($related_events) {
+ foreach ($related_events as $event) {
+ $related_list[$event->guid] = $event;
+ }
+ }
+ // get all the events (across all containers) that meet the criteria
+ $all_events = event_calendar_get_entities_from_metadata_between($meta_start_name, $meta_end_name,
+ $meta_start_value, $meta_end_value, $entity_type, $entity_subtype, $owner_guid,
+ 0, $limit, $offset, $order_by, $site_guid, $filter, $count, $region);
+
+ if ($all_events) {
+ foreach($all_events as $event) {
+ if (array_key_exists($event->guid,$related_list)
+ && !array_key_exists($event->guid,$main_list)) {
+ // add to main events
+ $main_events[] = $event;
+ }
+ }
+ }
+ return event_calendar_vsort($main_events,$meta_start_name);
+}
+
+// TODO: try to replace this with new Elgg 1.7 API
+/**
+ * Return a list of entities based on the given search criteria.
+ * In this case, returns entities with the given metadata between two values inclusive
+ *
+ * @param mixed $meta_start_name
+ * @param mixed $meta_end_name
+ * @param mixed $meta_start_value - start of metadata range, must be numerical value
+ * @param mixed $meta_end_value - end of metadata range, must be numerical 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 mixed $owner_guid Either one integer user guid or an array of user guids
+ * @param int $container_guid If supplied, the result is restricted to events associated with a specific container
+ * @param int $limit
+ * @param int $offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid The site to get entities for. Leave as 0 (default) for the current site; -1 for all sites.
+ * @param boolean $filter Filter by events in personal calendar if true
+ * @param true|false $count If set to true, returns the total number of entities rather than a list. (Default: false)
+ * @param string $meta_max metadata name containing maximum annotation count
+ * @param string $annotation_name annotation name to count
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ *
+ * TODO: see if the new API is robust enough to avoid this custom query
+ */
+function event_calendar_get_entities_from_metadata_between2
+($meta_start_name, $meta_end_name, $meta_start_value, $meta_end_value,
+$entity_type = "", $entity_subtype = "", $owner_guid = 0, $container_guid = 0,
+$limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $filter = false,
+$count = false, $region='-', $meta_max = '', $annotation_name = '')
+{
+ global $CONFIG;
+
+ // This should not be possible, but a sanity check just in case
+ if (!is_numeric($meta_start_value) || !is_numeric($meta_end_value)) {
+ return FALSE;
+ }
+
+ $meta_start_n = get_metastring_id($meta_start_name);
+ $meta_end_n = get_metastring_id($meta_end_name);
+ if ($region && $region != '-') {
+ $region_n = get_metastring_id('region');
+ $region_value_n = get_metastring_id($region);
+ if (!$region_n || !$region_value_n) {
+ if ($count) {
+ return 0;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ $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";
+ if ($order_by == "") $order_by = "v.string asc";
+ $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 ((is_array($container_guid) && (count($container_guid)))) {
+ foreach($container_guid as $key => $guid) {
+ $container_guid[$key] = (int) $guid;
+ }
+ } else {
+ $container_guid = (int) $container_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";
+ $where[] = "m.name_id='$meta_start_n'";
+ $where[] = "m2.name_id='$meta_end_n'";
+ $where[] = "((v.string >= $meta_start_value AND v.string <= $meta_end_value) OR ( v2.string >= $meta_start_value AND v2.string <= $meta_end_value) OR (v.string <= $meta_start_value AND v2.string >= $meta_start_value) OR ( v2.string <= $meta_end_value AND v2.string >= $meta_end_value))";
+ if ($region && $region != '-') {
+ $where[] = "m3.name_id='$region_n'";
+ $where[] = "m3.value_id='$region_value_n'";
+ }
+ if ($site_guid > 0)
+ $where[] = "e.site_guid = {$site_guid}";
+ if ($filter) {
+ if (is_array($owner_guid)) {
+ $where[] = "ms2.string in (".implode(",",$owner_guid).")";
+ } else if ($owner_guid > 0) {
+ $where[] = "ms2.string = {$owner_guid}";
+ }
+
+ $where[] = "ms.string = 'personal_event'";
+ } else {
+ if (is_array($owner_guid)) {
+ $where[] = "e.owner_guid in (".implode(",",$owner_guid).")";
+ } else if ($owner_guid > 0) {
+ $where[] = "e.owner_guid = {$owner_guid}";
+ }
+ }
+
+ if (is_array($container_guid)) {
+ $where[] = "e.container_guid in (".implode(",",$container_guid).")";
+ } else if ($container_guid > 0)
+ $where[] = "e.container_guid = {$container_guid}";
+
+ 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 JOIN {$CONFIG->dbprefix}metadata m2 on e.guid = m2.entity_guid ";
+ if ($filter) {
+ $query .= "JOIN {$CONFIG->dbprefix}annotations a ON (a.entity_guid = e.guid) ";
+ $query .= "JOIN {$CONFIG->dbprefix}metastrings ms ON (a.name_id = ms.id) ";
+ $query .= "JOIN {$CONFIG->dbprefix}metastrings ms2 ON (a.value_id = ms2.id) ";
+ }
+ if ($region && $region != '-') {
+ $query .= "JOIN {$CONFIG->dbprefix}metadata m3 ON (e.guid = m3.entity_guid) ";
+ }
+ if ($meta_max && $annotation_name) {
+ // This groups events for which the meta max name is defined
+ // perhaps this should be a left join and accept null values?
+ // so it would return groups with no spots defined as well
+ $meta_max_n = get_metastring_id($meta_max);
+ $ann_n = get_metastring_id($annotation_name);
+ if (!$meta_max_n || !$ann_n) {
+ if ($count) {
+ return 0;
+ } else {
+ return false;
+ }
+ }
+
+ $query .= " LEFT JOIN {$CONFIG->dbprefix}metadata m4 ON (e.guid = m4.entity_guid AND m4.name_id=$meta_max_n) ";
+ $query .= " LEFT JOIN {$CONFIG->dbprefix}metastrings ms4 ON (m4.value_id = ms4.id) ";
+ $where[] = "((ms4.string is null) OR (ms4.string = \"\") OR (CONVERT(ms4.string,SIGNED) > (SELECT count(id) FROM {$CONFIG->dbprefix}annotations ann WHERE ann.entity_guid = e.guid AND name_id = $ann_n GROUP BY entity_guid)))";
+ }
+ $query .= "JOIN {$CONFIG->dbprefix}metastrings v on v.id = m.value_id JOIN {$CONFIG->dbprefix}metastrings v2 on v2.id = m2.value_id where";
+ foreach ($where as $w)
+ $query .= " $w AND ";
+ $query .= get_access_sql_suffix("e"); // Add access controls
+ $query .= ' AND ' . get_access_sql_suffix("m"); // Add access controls
+ $query .= ' AND ' . get_access_sql_suffix("m2"); // Add access controls
+
+ if (!$count) {
+ $query .= " order by $order_by";
+ if ($limit) {
+ $query .= " limit $offset, $limit"; // Add order and limit
+ }
+ $entities = get_data($query, "entity_row_to_elggstar");
+ if (elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') {
+ if (get_entity($container_guid) instanceOf ElggGroup) {
+ $entities = event_calendar_get_entities_from_metadata_between_related($meta_start_name, $meta_end_name,
+ $meta_start_value, $meta_end_value, $entity_type,
+ $entity_subtype, $owner_guid, $container_guid,
+ 0, 0, "", 0,
+ false, false, '-',$entities);
+ }
+ }
+ return $entities;
+ } else {
+ if ($row = get_data_row($query))
+ return $row->total;
+ }
+ return false;
+}
+
+function event_calendar_has_personal_event($event_guid,$user_guid) {
+ // check legacy implementation and new one
+ if (check_entity_relationship($user_guid,'personal_event',$event_guid)) {
+ return TRUE;
+ } else {
+ // use old method for now
+ $options = array('guid'=>$event_guid,'annotation_name' => 'personal_event', 'annotation_value' => $user_guid,'count'=>TRUE);
+ //$annotations = get_annotations($event_guid, "object", "event_calendar", "personal_event", (int) $user_guid, $user_guid);
+ if (elgg_get_annotations($options)) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+}
+
+function event_calendar_add_personal_event($event_guid,$user_guid) {
+ if ($event_guid && $user_guid) {
+ if (!event_calendar_has_personal_event($event_guid,$user_guid)
+ && !event_calendar_has_collision($event_guid,$user_guid)) {
+ if (!event_calendar_is_full($event_guid)) {
+ add_entity_relationship($user_guid,'personal_event',$event_guid);
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+function event_calendar_add_personal_events_from_group($event_guid,$group_guid) {
+ $members = get_group_members($group_guid, 100000);
+ foreach($members as $member) {
+ $member_id = $member->getGUID();
+ event_calendar_add_personal_event($event_guid,$member_id);
+ }
+}
+
+function event_calendar_remove_personal_event($event_guid,$user_guid) {
+ remove_entity_relationship($user_guid,'personal_event',$event_guid);
+ // also use old method for now
+ $annotations = get_annotations($event_guid, "object", "event_calendar", "personal_event", (int) $user_guid, $user_guid);
+ if ($annotations) {
+ foreach ($annotations as $annotation) {
+ $annotation->delete();
+ }
+ }
+}
+
+function event_calendar_get_personal_events_for_user($user_guid,$limit) {
+ $events_old_way = elgg_get_entities_from_annotations(array(
+ 'type' => 'object',
+ 'subtype' => 'event_calendar',
+ 'annotation_names' => 'personal_event',
+ 'annotation_value' => $user_guid,
+ 'limit' => 0,
+ ));
+
+ $events_new_way = elgg_get_entities_from_relationship(array(
+ 'type' => 'object',
+ 'subtype' => 'event_calendar',
+ 'relationship' => 'personal_event',
+ 'relationship_guid' => $user_guid,
+ 'limit' => 0,
+ ));
+
+ $events = array_merge($events_old_way,$events_new_way);
+
+ $final_events = array();
+ if ($events) {
+ $now = time();
+ $one_day = 60*60*24;
+ // don't show events that have been over for more than a day
+ foreach($events as $event) {
+ if (($event->start_date > $now-$one_day) || ($event->end_date && ($event->end_date > $now-$one_day))) {
+ $final_events[] = $event;
+ }
+ }
+ }
+ $sorted = event_calendar_vsort($final_events,'start_date');
+ return array_slice($sorted,0,$limit);
+}
+
+// the old way used annotations, and the new Elgg 1.8 way uses relationships
+// for now this version attempts to bridge the gap by using both methods for older sites
+
+function event_calendar_get_users_for_event($event_guid,$limit,$offset=0,$is_count=FALSE) {
+ $options = array(
+ 'type' => 'user',
+ 'relationship' => 'personal_event',
+ 'relationship_guid' => $event_guid,
+ 'inverse_relationship' => TRUE,
+ 'limit' => 0,
+ );
+ if ($is_count) {
+ //$count_old_way = count_annotations($event_guid, "object", "event_calendar", "personal_event");
+ $count_old_way = elgg_get_annotations(array(
+ 'guid'=>$event_guid,
+ 'type'=>"object",
+ 'subtype'=>"event_calendar",
+ 'annotation_name' => "personal_event",
+ 'count'=>TRUE)
+ );
+ $options ['count'] = TRUE;
+ $count_new_way = elgg_get_entities_from_relationship($options);
+ return $count_old_way + $count_new_way;
+ } else {
+ $users_old_way = array();
+ //$annotations = get_annotations($event_id, "object", "event_calendar", "personal_event", "", 0, $limit, $offset);
+ $annotations = elgg_get_annotations(array(
+ 'guid'=>$event_guid,
+ 'type'=>"object",
+ 'subtype'=>"event_calendar",
+ 'annotation_name' => "personal_event",
+ 'limit' => $limit,
+ 'offset' => $offset)
+ );
+ if ($annotations) {
+ foreach($annotations as $annotation) {
+ if (($user = get_entity($annotation->value)) && ($user instanceOf ElggUser)) {
+ $users_old_way[] = $user;
+ }
+ }
+ }
+ $users_new_way = elgg_get_entities_from_relationship($options);
+ return array_merge($users_old_way,$users_new_way);
+ }
+}
+
+function event_calendar_security_fields() {
+ $ts = time();
+ $token = generate_action_token($ts);
+ return "__elgg_token=$token&__elgg_ts=$ts";
+}
+
+function event_calendar_get_events_for_group($group_guid, $limit = 0) {
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'event_calendar',
+ 'container_guid' => $group_guid,
+ 'limit' => $limit,
+ );
+ return elgg_get_entities($options);
+}
+
+function event_calendar_convert_time($time) {
+ $event_calendar_time_format = elgg_get_plugin_setting('timeformat','event_calendar');
+ if ($event_calendar_time_format == '12') {
+ $hour = floor($time/60);
+ $minute = sprintf("%02d",$time-60*$hour);
+ if ($hour < 12) {
+ return "$hour:$minute am";
+ } else {
+ $hour -= 12;
+ return "$hour:$minute pm";
+ }
+ } else {
+ $hour = floor($time/60);
+ $minute = sprintf("%02d",$time-60*$hour);
+ return "$hour:$minute";
+ }
+}
+
+function event_calendar_format_time($date,$time1,$time2='') {
+ if (is_numeric($time1)) {
+ $t = event_calendar_convert_time($time1);
+ if (is_numeric($time2)) {
+ $t .= " - ".event_calendar_convert_time($time2);
+ }
+ return "$t, $date";
+ } else {
+ return $date;
+ }
+}
+
+function event_calender_get_gmt_from_server_time($server_time) {
+ $gmtime = $server_time - (int)substr(date('O'),0,3)*60*60;
+}
+
+function event_calendar_activated_for_group($group) {
+ $group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar');
+ $group_default = elgg_get_plugin_setting('group_default', 'event_calendar');
+ if ($group && ($group_calendar != 'no')) {
+ if ( ($group->event_calendar_enable == 'yes') || ((!$group->event_calendar_enable && (!$group_default || $group_default == 'yes')))) {
+ return true;
+ }
+ }
+ return false;
+}
+
+function event_calendar_get_region($event) {
+ $event_calendar_region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar');
+ $region = trim($event->region);
+ if ($event_calendar_region_list_handles == 'yes') {
+ $region = elgg_echo('event_calendar:region:'.$region);
+ }
+ return htmlspecialchars($region);
+}
+
+function event_calendar_get_type($event) {
+ $event_calendar_type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar');
+ $type = trim($event->event_type);
+ if ($type) {
+ if ($event_calendar_type_list_handles == 'yes') {
+ $type = elgg_echo('event_calendar:type:'.$type);
+ }
+ return htmlspecialchars($type);
+ } else {
+ return $type;
+ }
+}
+
+function event_calendar_get_formatted_full_items($event) {
+ $time_bit = event_calendar_get_formatted_time($event);
+ $event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar');
+ $event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar');
+ $event_items = array();
+ if ($time_bit) {
+ $item = new stdClass();
+ $item->title = elgg_echo('event_calendar:when_label');
+ $item->value = $time_bit;
+ $event_items[] = $item;
+ }
+ $item = new stdClass();
+ $item->title = elgg_echo('event_calendar:venue_label');
+ $item->value = htmlspecialchars($event->venue);
+ $event_items[] = $item;
+ if ($event_calendar_region_display == 'yes') {
+ $item = new stdClass();
+ $item->title = elgg_echo('event_calendar:region_label');
+ $item->value = event_calendar_get_region($event);
+ $event_items[] = $item;
+ }
+ if ($event_calendar_type_display == 'yes') {
+ $event_type = event_calendar_get_type($event);
+ if ($event_type) {
+ $item = new stdClass();
+ $item->title = elgg_echo('event_calendar:type_label');
+ $item->value = event_calendar_get_type($event);
+ $event_items[] = $item;
+ }
+ }
+ $item = new stdClass();
+ $item->title = elgg_echo('event_calendar:fees_label');
+ $item->value = htmlspecialchars($event->fees);
+ $event_items[] = $item;
+ $item = new stdClass();
+ $item->title = elgg_echo('event_calendar:organiser_label');
+ $item->value = htmlspecialchars($event->organiser);
+ $event_items[] = $item;
+ $item = new stdClass();
+ $item->title = elgg_echo('event_calendar:contact_label');
+ $item->value = htmlspecialchars($event->contact);
+ $event_items[] = $item;
+
+ return $event_items;
+}
+
+function event_calendar_get_formatted_time($event) {
+ if (!$event->start_date) {
+ return '';
+ }
+ $date_format = 'j M Y';
+ $event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar') != 'no';
+
+ $start_date = date($date_format,$event->start_date);
+ if ($event->end_date) {
+ $end_date = date($date_format,$event->end_date);
+ }
+ if ((!$event->end_date) || ($end_date == $start_date)) {
+ if (!$event->all_day && $event_calendar_times) {
+ $start_date = event_calendar_format_time($start_date,$event->start_time,$event->end_time);
+ }
+ $time_bit = $start_date;
+ } else {
+ if (!$event->all_day && $event_calendar_times) {
+ $start_date = event_calendar_format_time($start_date,$event->start_time);
+ $end_date = event_calendar_format_time($end_date,$event->end_time);
+ }
+ $time_bit = "$start_date - $end_date";
+ }
+
+ if ($event->repeats == 'yes') {
+ $dow = array('monday','tuesday','wednesday','thursday','friday','saturday','sunday');
+ $r = array();
+ foreach ($dow as $w) {
+ $fn = 'event-calendar-repeating-'.$w.'-value';
+ if ($event->$fn) {
+ $r[] = elgg_echo('event_calendar:dow:full:'.$w);
+ }
+ }
+ $week_bit = implode(", ",$r);
+ if ($event->repeat_interval > 1) {
+ $week_bit .= ' '.elgg_echo('event_calendar:repeated_event:week_interval',array($event->repeat_interval));
+ } else {
+ $week_bit .= ' '.elgg_echo('event_calendar:repeated_event:week_single');
+ }
+ $time_bit = elgg_echo('event_calendar:repeated_event:format',array($time_bit, $week_bit));
+ }
+
+ return $time_bit;
+}
+
+function event_calendar_get_formatted_date($ts) {
+ // TODO: make the date format configurable
+ return date('j/n/Y',$ts);
+}
+
+function event_calendar_is_full($event_id) {
+ $event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar');
+ if ($event_calendar_spots_display == 'yes') {
+ $count = event_calendar_get_users_for_event($event_id,0,0,TRUE);
+ $event = get_entity($event_id);
+ if ($event) {
+ $spots = $event->spots;
+ if (is_numeric($spots)) {
+ if ($count >= $spots) {
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE;
+}
+
+function event_calendar_has_collision($event_id, $user_id) {
+ $no_collisions = elgg_get_plugin_setting('no_collisions', 'event_calendar');
+ if ($no_collisions == 'yes') {
+ $event = get_entity($event_id);
+ if ($event) {
+ $start_time = $event->start_date;
+ $end_time = event_calendar_get_end_time($event);
+ // look to see if the user already has events within this period
+ $count = event_calendar_get_events_for_user_between2($start_time,$end_time,TRUE,10,0,$user_id);
+ if ($count > 0) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+// this complicated bit of code determines the event end time
+function event_calendar_get_end_time($event) {
+ $default_length = elgg_get_plugin_setting('collision_length', 'event_calendar');
+ $start_time = $event->start_date;
+ $end_time = $event->end_time;
+ $end_date = $event->end_date;
+ if($end_date) {
+ if ($end_time) {
+ $end_time = $end_date+$end_time*60;
+ } else if ($start_time == $end_date) {
+ if (is_numeric($default_length)) {
+ $end_time = $end_date + $default_length;
+ } else {
+ // default to an hour length
+ $end_time = $start_time + 3600;
+ }
+ } else {
+ $end_time = $end_date;
+ }
+ } else {
+ if ($end_time) {
+ if ($event->start_time) {
+ $end_time = $start_time + ($end_time*60 - $event->start_time*60);
+ } else {
+ $end_time = $start_time + $end_time*60;
+ }
+ } else {
+ if (is_numeric($default_length)) {
+ $end_time = $start_time + $default_length;
+ } else {
+ // default to an hour length
+ $end_time = $start_time + 3600;
+ }
+ }
+ }
+
+ return $end_time;
+}
+
+// a version to allow for some customised options
+function event_calendar_view_entity_list($entities, $count, $offset, $limit, $fullview = true, $viewtypetoggle = true, $pagination = true) {
+ $count = (int) $count;
+ $limit = (int) $limit;
+
+ // do not require views to explicitly pass in the offset
+ if (!$offset = (int) $offset) {
+ $offset = sanitise_int(get_input('offset', 0));
+ }
+
+ $context = elgg_get_context();
+
+ $html = elgg_view('event_calendar/entities/entity_list',array(
+ 'entities' => $entities,
+ 'count' => $count,
+ 'offset' => $offset,
+ 'limit' => $limit,
+ 'baseurl' => $_SERVER['REQUEST_URI'],
+ 'fullview' => $fullview,
+ 'context' => $context,
+ 'viewtypetoggle' => $viewtypetoggle,
+ 'viewtype' => get_input('search_viewtype','list'),
+ 'pagination' => $pagination
+ ));
+
+ return $html;
+}
+
+// returns open, closed or private for the given event and user
+function event_calendar_personal_can_manage($event,$user_id) {
+ $status = 'private';
+ $event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar');
+ if (!$event_calendar_personal_manage
+ || $event_calendar_personal_manage == 'open'
+ || $event_calendar_personal_manage == 'yes'
+ || (($event_calendar_personal_manage == 'by_event' && (!$event->personal_manage || ($event->personal_manage == 'open'))))) {
+ $status = 'open';
+ } else {
+ // in this case only admins or event owners can manage events on their personal calendars
+ if(elgg_is_admin_logged_in()) {
+ $status = 'open';
+ } else if ($event && ($event->owner_guid == $user_id)) {
+ $status = 'open';
+ } else if (($event_calendar_personal_manage == 'closed')
+ || ($event_calendar_personal_manage == 'no')
+ || (($event_calendar_personal_manage == 'by_event') && ($event->personal_manage == 'closed'))) {
+ $status = 'closed';
+ }
+ }
+
+ return $status;
+}
+
+function event_calendar_send_event_request($event,$user_guid) {
+ $result = FALSE;
+ if(add_entity_relationship($user_guid, 'event_calendar_request', $event->guid)) {
+ $subject = elgg_echo('event_calendar:request_subject');
+ $name = get_entity($user_guid)->name;
+ $title = $event->title;
+ $url = $event->getUrl();
+ $link = elgg_get_site_url().'event_calendar/review_requests/'.$event->guid;
+ $message = sprintf(elgg_echo('event_calendar:request_message'),$name,$title,$url,$link);
+ notify_user($event->owner_guid,elgg_get_site_entity()->guid,$subject,$message);
+ $result = TRUE;
+ }
+ return $result;
+}
+
+// pages
+
+function event_calendar_get_page_content_list($page_type,$container_guid,$start_date,$display_mode,$filter,$region='-') {
+ elgg_load_js('elgg.event_calendar');
+ global $autofeed;
+ $autofeed = true;
+ if ($page_type == 'group') {
+ if (!event_calendar_activated_for_group($container_guid)) {
+ forward();
+ }
+ elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'));
+ elgg_push_context('groups');
+ elgg_set_page_owner_guid($container_guid);
+ $user_guid = elgg_get_logged_in_user_guid();
+ if(event_calendar_can_add($container_guid)) {
+ elgg_register_menu_item('title', array(
+ 'name' => 'add',
+ 'href' => "event_calendar/add/".$container_guid,
+ 'text' => elgg_echo('event_calendar:add'),
+ 'class' => 'elgg-button elgg-button-action event-calendar-button-add',
+ ));
+ }
+ } else {
+ elgg_push_breadcrumb(elgg_echo('item:object:event_calendar'));
+ $user_guid = elgg_get_logged_in_user_guid();
+ if(event_calendar_can_add($container_guid)) {
+ elgg_register_menu_item('title', array(
+ 'name' => 'add',
+ 'href' => "event_calendar/add",
+ 'text' => elgg_echo('event_calendar:add'),
+ 'class' => 'elgg-button elgg-button-action event-calendar-button-add',
+ ));
+ }
+ }
+
+ $params = event_calendar_generate_listing_params($page_type,$container_guid,$start_date,$display_mode,$filter,$region);
+
+ $url = current_page_url();
+ if (substr_count($url, '?')) {
+ $url .= "&view=ical";
+ } else {
+ $url .= "?view=ical";
+ }
+
+ $url = elgg_format_url($url);
+ $menu_options = array(
+ 'name' => 'ical',
+ 'id' => 'event-calendar-ical-link',
+ 'text' => elgg_view_icon('calendar'),
+ 'href' => $url,
+ 'title' => elgg_echo('feed:ical'),
+ 'priority' => 800,
+ 'rel' => 'popup',
+ );
+ $menu_item = ElggMenuItem::factory($menu_options);
+ elgg_register_menu_item('extras', $menu_item);
+
+ $body = elgg_view_layout("content", $params);
+ $body .= elgg_view_module('popup', elgg_echo('feed:ical'), elgg_echo('event_calendar:ical_popup_message') . elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => elgg_echo('export'),
+ 'class' => 'elgg-button elgg-button-action',
+ )), array(
+ 'id' => 'event-calendar-ical',
+ 'class' => 'event-calendar-ical hidden',
+ ));
+
+ return elgg_view_page($title, $body);
+}
+
+function event_calendar_get_page_content_edit($page_type,$guid,$start_date='') {
+ elgg_load_js('elgg.event_calendar');
+ $vars = array();
+ $vars['id'] = 'event-calendar-edit';
+ // just in case a feature adds an image upload
+ $vars['enctype'] = 'multipart/form-data';
+
+ $body_vars = array();
+
+ if ($page_type == 'edit') {
+ $title = elgg_echo('event_calendar:manage_event_title');
+ $event = get_entity((int)$guid);
+ if (elgg_instanceof($event, 'object', 'event_calendar') && $event->canEdit()) {
+ $body_vars['event'] = $event;
+ $body_vars['form_data'] = event_calendar_prepare_edit_form_vars($event,$page_type);
+
+ $event_container = get_entity($event->container_guid);
+ if (elgg_instanceof($event_container, 'group')) {
+ elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid);
+ $body_vars['group_guid'] = $event_container->guid;
+ } else {
+ elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list');
+ $body_vars['group_guid'] = 0;
+ }
+ elgg_push_breadcrumb($event->title,$event->getURL());
+ elgg_push_breadcrumb(elgg_echo('event_calendar:manage_event_title'));
+
+ $content = elgg_view_form('event_calendar/edit', $vars,$body_vars);
+ } else {
+ $content = elgg_echo('event_calendar:error_event_edit');
+ }
+ } else {
+ $title = elgg_echo('event_calendar:add_event_title');
+
+ if ($guid) {
+ // add to group
+ $group = get_entity($guid);
+ if (elgg_instanceof($group, 'group')) {
+ $body_vars['group_guid'] = $guid;
+ elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$guid);
+ elgg_push_breadcrumb(elgg_echo('event_calendar:add_event_title'));
+ $body_vars['form_data'] = event_calendar_prepare_edit_form_vars(NULL,$page_type,$start_date);
+ $content = elgg_view_form('event_calendar/edit', $vars, $body_vars);
+ } else {
+ $content = elgg_echo('event_calendar:no_group');
+ }
+ } else {
+ $body_vars['group_guid'] = 0;
+ elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list');
+
+ elgg_push_breadcrumb(elgg_echo('event_calendar:add_event_title'));
+ $body_vars['form_data'] = event_calendar_prepare_edit_form_vars(NULL,$page_type,$start_date);
+
+ $content = elgg_view_form('event_calendar/edit', $vars, $body_vars);
+ }
+ }
+
+ $params = array('title' => $title, 'content' => $content,'filter' => '');
+
+ $body = elgg_view_layout("content", $params);
+
+ return elgg_view_page($title,$body);
+}
+
+/**
+ * Pull together variables for the edit form
+ *
+ * @param ElggObject $event
+ * @return array
+ */
+function event_calendar_prepare_edit_form_vars($event = NULL, $page_type = '', $start_date = '') {
+
+ // input names => defaults
+ $now = time();
+ $iso_date = date('Y-m-d',$now);
+ $now_midnight = strtotime($iso_date);
+ if ($start_date) {
+ $start_date = strtotime($start_date);
+ } else {
+ $start_date = $now+60*60;
+ }
+ $start_time = floor(($now-$now_midnight)/60) + 60;
+ $start_time = floor($start_time/5)*5;
+ $values = array(
+ 'title' => NULL,
+ 'description' => NULL,
+ 'venue' => NULL,
+ 'start_date' => $start_date,
+ 'end_date' => $start_date+60*60,
+ 'start_time' => $start_time,
+ 'end_time' => $start_time + 60,
+ 'spots' => NULL,
+ 'region' => '-',
+ 'event_type' => '-',
+ 'fees' => NULL,
+ 'contact' => NULL,
+ 'organiser' => NULL,
+ 'tags' => NULL,
+ 'send_reminder' => NULL,
+ 'reminder_number' => 1,
+ 'reminder_interval' => 60,
+ 'repeats' => NULL,
+ 'repeat_interval' => 1,
+ 'event-calendar-repeating-monday-value' => 0,
+ 'event-calendar-repeating-tuesday-value' => 0,
+ 'event-calendar-repeating-wednesday-value' => 0,
+ 'event-calendar-repeating-thursday-value' => 0,
+ 'event-calendar-repeating-friday-value' => 0,
+ 'event-calendar-repeating-saturday-value' => 0,
+ 'event-calendar-repeating-sunday-value' => 0,
+ 'personal_manage' => 'open',
+ 'web_conference' => NULL,
+ 'long_description' => NULL,
+ 'access_id' => ACCESS_DEFAULT,
+ 'group_guid' => NULL,
+ );
+
+ if ($page_type == 'schedule') {
+ $values['schedule_type'] = 'poll';
+ } else {
+ $values['schedule_type'] = 'all_day';
+ }
+
+ if ($event) {
+ foreach (array_keys($values) as $field) {
+ if (isset($event->$field)) {
+ $values[$field] = $event->$field;
+ }
+ }
+ }
+
+ if (elgg_is_sticky_form('event_calendar')) {
+ $sticky_values = elgg_get_sticky_values('event_calendar');
+ foreach ($sticky_values as $key => $value) {
+ $values[$key] = $value;
+ }
+ }
+
+ elgg_clear_sticky_form('event_calendar');
+
+ return $values;
+}
+
+function event_calendar_generate_listing_params($page_type,$container_guid,$original_start_date,$display_mode,$filter,$region='-') {
+ $event_calendar_listing_format = elgg_get_plugin_setting('listing_format', 'event_calendar');
+ $event_calendar_spots_display = trim(elgg_get_plugin_setting('spots_display', 'event_calendar'));
+ $event_calendar_first_date = trim(elgg_get_plugin_setting('first_date', 'event_calendar'));
+ $event_calendar_last_date = trim(elgg_get_plugin_setting('last_date', 'event_calendar'));
+
+ if (!$original_start_date) {
+ $original_start_date = date('Y-m-d');
+ }
+ if ( $event_calendar_first_date && ($original_start_date < $event_calendar_first_date) ) {
+ $original_start_date = $event_calendar_first_date;
+ }
+ if ( $event_calendar_last_date && ($original_start_date > $event_calendar_last_date) ) {
+ $original_start_date = $event_calendar_first_date;
+ }
+
+ if ($event_calendar_listing_format == 'paged') {
+ $start_ts = strtotime($original_start_date);
+ $start_date = $original_start_date;
+ if ($event_calendar_last_date) {
+ $end_ts = strtotime($event_calendar_last_date);
+ } else {
+ // set to a large number
+ $end_ts = 2000000000;
+ }
+ $mode = 'paged';
+ } else {
+
+ // the default interval is one month
+ $day = 60*60*24;
+ $week = 7*$day;
+ $month = 31*$day;
+
+ $mode = trim($display_mode);
+ if (!$mode) {
+ $mode = 'month';
+ }
+
+ if ($mode == "day") {
+ $start_date = $original_start_date;
+ $end_date = $start_date;
+ $start_ts = strtotime($start_date);
+ $end_ts = strtotime($end_date)+$day-1;
+ } else if ($mode == "week") {
+ // need to adjust start_date to be the beginning of the week
+ $start_ts = strtotime($original_start_date);
+ $start_ts -= date("w",$start_ts)*$day;
+ $end_ts = $start_ts + 6*$day;
+
+ $start_date = date('Y-m-d',$start_ts);
+ $end_date = date('Y-m-d',$end_ts);
+ } else {
+ $start_ts = strtotime($original_start_date);
+ $month = date('m',$start_ts);
+ $year = date('Y',$start_ts);
+ $start_date = $year.'-'.$month.'-1';
+ $end_date = $year.'-'.$month.'-'.getLastDayOfMonth($month,$year);
+ }
+
+ if ($event_calendar_first_date && ($start_date < $event_calendar_first_date)) {
+ $start_date = $event_calendar_first_date;
+ }
+
+ if ($event_calendar_last_date && ($end_date > $event_calendar_last_date)) {
+ $end_date = $event_calendar_last_date;
+ }
+
+ $start_ts = strtotime($start_date);
+
+ if ($mode == "day") {
+ $end_ts = strtotime($end_date)+$day-1;
+ $subtitle = elgg_echo('event_calendar:day_label').': '.date('j F Y',strtotime($start_date));
+ } else if ($mode == "week") {
+ // KJ - fix for end date bug
+ //$end_ts = $start_ts + 6*$day;
+ $end_ts = $start_ts + 7*$day;
+ $subtitle = elgg_echo('event_calendar:week_label').': '.date('j F',$start_ts) . ' - '.date('j F Y',$end_ts);
+ } else {
+ // KJ - fix for end date bug
+ //$end_ts = strtotime($end_date);
+ $end_ts = strtotime($end_date)+24*60*60-1;
+ $subtitle = date('F Y',$start_ts);
+ }
+ }
+
+ $current_user_guid = elgg_get_logged_in_user_guid();
+
+ $access_status = elgg_get_ignore_access();
+
+ if ($page_type == 'owner') {
+ $container = get_entity($container_guid);
+ if (elgg_instanceof($container, 'user')) {
+ $auth_token = get_input('auth_token');
+ if ($auth_token) {
+ $secret_key = event_calendar_get_secret_key();
+ if ($secret_key && ($auth_token === sha1($container->username . $secret_key))) {
+ elgg_set_ignore_access(TRUE);
+ }
+ }
+ if ($container->canEdit()) {
+ $user_guid = $container_guid;
+ $group_guid = 0;
+ } else {
+ register_error('event_calendar:owner:permissions_error');
+ forward();
+ exit;
+ }
+ } else {
+ register_error('event_calendar:owner:permissions_error');
+ forward();
+ exit;
+ }
+ } else {
+ $user_guid = $current_user_guid;
+ $group_guid = $container_guid;
+ }
+
+ $offset = get_input('offset');
+ $limit = get_input('limit',15);
+
+ if ($event_calendar_spots_display == 'yes') {
+ if (!$filter) {
+ $filter = 'open';
+ }
+ } else {
+ if (!$filter) {
+ $filter = 'all';
+ }
+ }
+
+ if ($filter == 'all') {
+ $count = event_calendar_get_events_between($start_ts,$end_ts,true,$limit,$offset,$container_guid,$region);
+ $events = event_calendar_get_events_between($start_ts,$end_ts,false,$limit,$offset,$container_guid,$region);
+ } else if ($filter == 'open') {
+ $count = event_calendar_get_open_events_between($start_ts,$end_ts,true,$limit,$offset,$container_guid,$region);
+ $events = event_calendar_get_open_events_between($start_ts,$end_ts,false,$limit,$offset,$container_guid,$region);
+ } else if ($filter == 'friends') {
+ $count = event_calendar_get_events_for_friends_between($start_ts,$end_ts,true,$limit,$offset,$user_guid,$container_guid,$region);
+ $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,$limit,$offset,$user_guid,$container_guid,$region);
+ } else if ($filter == 'mine') {
+ $count = event_calendar_get_events_for_user_between2($start_ts,$end_ts,true,$limit,$offset,$user_guid,$container_guid,$region);
+ $events = event_calendar_get_events_for_user_between2($start_ts,$end_ts,false,$limit,$offset,$user_guid,$container_guid,$region);
+ }
+
+ $vars = array(
+ 'original_start_date' => $original_start_date,
+ 'start_date' => $start_date,
+ 'end_date' => $end_date,
+ 'first_date' => $event_calendar_first_date,
+ 'last_date' => $event_calendar_last_date,
+ 'mode' => $mode,
+ 'events' => $events,
+ 'count' => $count,
+ 'offset' => $offset,
+ 'limit' => $limit,
+ 'group_guid' => $group_guid,
+ 'filter' => $filter,
+ 'region' => $region,
+ 'listing_format' => $event_calendar_listing_format,
+ );
+
+ $content = elgg_view('event_calendar/show_events', $vars);
+ if ($page_type == 'group') {
+ $filter_override = '';
+ } else {
+ $filter_override = elgg_view('event_calendar/filter_menu',$vars);
+ }
+
+ if ($event_calendar_listing_format == 'paged') {
+ $title = elgg_echo('event_calendar:upcoming_events_title');
+ } else if ($event_calendar_listing_format == 'full') {
+ $title = elgg_echo('event_calendar:show_events_title');
+ } else if ($page_type == 'group') {
+ $title = elgg_echo('event_calendar:group'). ' ('.$subtitle.')';
+ } else {
+ $title = elgg_echo('event_calendar:listing_title:'.$filter). ' ('.$subtitle.')';
+ }
+
+ $params = array('title' => $title, 'content' => $content, 'filter_override'=>$filter_override);
+ elgg_set_ignore_access($access_status);
+ return $params;
+}
+
+function event_calendar_get_page_content_view($event_guid,$light_box = FALSE) {
+ // add personal calendar button and links
+ elgg_push_context('event_calendar:view');
+ $event = get_entity($event_guid);
+
+ if (!elgg_instanceof($event, 'object', 'event_calendar')) {
+ $content = elgg_echo('event_calendar:error_nosuchevent');
+ $title = elgg_echo('event_calendar:generic_error_title');
+ } else {
+ $title = htmlspecialchars($event->title);
+ $event_container = get_entity($event->container_guid);
+ if (elgg_instanceof($event_container, 'group')) {
+ if ($event_container->canEdit()) {
+ event_calendar_handle_menu($event_guid);
+ }
+ elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid);
+ } else {
+ if ($event->canEdit()) {
+ event_calendar_handle_menu($event_guid);
+ }
+ elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list');
+ }
+
+ elgg_push_breadcrumb($event->title);
+ $content = elgg_view_entity($event, array('full_view' => true,'light_box'=>$light_box));
+ //check to see if comment are on - TODO - add this feature to all events
+ if ($event->comments_on != 'Off') {
+ $content .= elgg_view_comments($event);
+ }
+ }
+
+ if ($light_box) {
+ return '<div class="event-calendar-lightbox">'.elgg_view_title($title).$content.'</div>';
+ } else {
+ $params = array('title' => $title, 'content' => $content,'filter' => '');
+
+ $body = elgg_view_layout("content", $params);
+
+ return elgg_view_page($title,$body);
+ }
+}
+
+function event_calendar_get_page_content_display_users($event_guid) {
+ elgg_load_js('elgg.event_calendar');
+ $event = get_entity($event_guid);
+
+ if (!elgg_instanceof($event, 'object', 'event_calendar')) {
+ $content = elgg_echo('event_calendar:error_nosuchevent');
+ $title = elgg_echo('event_calendar:generic_error_title');
+ } else {
+ event_calendar_handle_menu($event_guid);
+ $title = elgg_echo('event_calendar:users_for_event_title',array(htmlspecialchars($event->title)));
+ $event_container = get_entity($event->container_guid);
+ if (elgg_instanceof($event_container, 'group')) {
+ elgg_push_context('groups');
+ elgg_set_page_owner_guid($event->container_guid);
+ elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid);
+ } else {
+ elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list');
+ }
+ elgg_push_breadcrumb($event->title,$event->getURL());
+ elgg_push_breadcrumb(elgg_echo('event_calendar:users_for_event_breadcrumb'));
+ $limit = 12;
+ $offset = get_input('offset', 0);
+ $users = event_calendar_get_users_for_event($event_guid,$limit,$offset,false);
+ $options = array(
+ 'full_view' => FALSE,
+ 'list_type_toggle' => FALSE,
+ 'limit'=>$limit,
+ 'event_calendar_event'=>$event,
+ );
+ elgg_extend_view('user/default','event_calendar/calendar_toggle');
+ $content = elgg_view_entity_list($users,$options);
+ }
+ $params = array('title' => $title, 'content' => $content,'filter' => '');
+
+ $body = elgg_view_layout("content", $params);
+
+ return elgg_view_page($title,$body);
+}
+
+// display a list of all the members of the container of $event_guid and allowing
+// adding or removing them
+
+function event_calendar_get_page_content_manage_users($event_guid) {
+ // TODO: make this an optional feature, toggled off
+ elgg_load_js('elgg.event_calendar');
+ $event = get_entity($event_guid);
+ $limit = 10;
+ $offset = get_input('offset', 0);
+
+ $event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar');
+ if ($event_calendar_add_users != 'yes') {
+ register_error(elgg_echo('event_calendar:feature_not_activated'));
+ forward();
+ exit;
+ }
+
+ if (!elgg_instanceof($event, 'object', 'event_calendar')) {
+ $content = elgg_echo('event_calendar:error_nosuchevent');
+ $title = elgg_echo('event_calendar:generic_error_title');
+ } else {
+ event_calendar_handle_menu($event_guid);
+ $title = elgg_echo('event_calendar:manage_users:title',array($event->title));
+ $event_container = get_entity($event->container_guid);
+ if ($event_container->canEdit()) {
+ if (elgg_instanceof($event_container, 'group')) {
+ elgg_push_context('groups');
+ elgg_set_page_owner_guid($event->container_guid);
+ elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid);
+ elgg_register_menu_item('title', array(
+ 'name' => 'remove_from_group_members',
+ 'href' => elgg_add_action_tokens_to_url('action/event_calendar/remove_from_group_members?event_guid='.$event_guid),
+ 'text' => elgg_echo('event_calendar:remove_from_group_members:button'),
+ 'class' => 'elgg-button elgg-button-action',
+ ));
+ elgg_register_menu_item('title', array(
+ 'name' => 'add_to_group_members',
+ 'href' => elgg_add_action_tokens_to_url('action/event_calendar/add_to_group_members?event_guid='.$event_guid),
+ 'text' => elgg_echo('event_calendar:add_to_group_members:button'),
+ 'class' => 'elgg-button elgg-button-action',
+ ));
+ $users = $event_container->getMembers($limit,$offset);
+ $count = $event_container->getMembers($limit,$offset,TRUE);
+ elgg_extend_view('user/default','event_calendar/calendar_toggle');
+ $options = array(
+ 'full_view' => FALSE,
+ 'list_type_toggle' => FALSE,
+ 'limit'=>$limit,
+ 'event_calendar_event'=>$event,
+ 'pagination' => TRUE,
+ 'count'=>$count,
+ );
+ $content .= elgg_view_entity_list($users,$options,$offset,$limit);
+ } else {
+ elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list');
+ $content = '<p>'.elgg_echo('event_calendar:manage_users:description').'</p>';
+ $content .= elgg_view_form('event_calendar/manage_subscribers',array(),array('event'=>$event));
+ }
+ elgg_push_breadcrumb($event->title,$event->getURL());
+ elgg_push_breadcrumb(elgg_echo('event_calendar:manage_users:breadcrumb'));
+
+ } else {
+ $content = elgg_echo('event_calendar:manage_users:unauthorized');
+ }
+ }
+ $params = array('title' => $title, 'content' => $content,'filter' => '');
+
+ $body = elgg_view_layout("content", $params);
+
+ return elgg_view_page($title,$body);
+}
+
+function event_calendar_get_page_content_review_requests($event_guid) {
+ $event = get_entity($event_guid);
+
+ if (!elgg_instanceof($event, 'object', 'event_calendar')) {
+ $content = elgg_echo('event_calendar:error_nosuchevent');
+ $title = elgg_echo('event_calendar:generic_error_title');
+ } else {
+ event_calendar_handle_menu($event_guid);
+ $title = elgg_echo('event_calendar:review_requests_title',array(htmlspecialchars($event->title)));
+ $event_container = get_entity($event->container_guid);
+ if (elgg_instanceof($event_container, 'group')) {
+ elgg_push_context('groups');
+ elgg_set_page_owner_guid($event->container_guid);
+ elgg_push_breadcrumb(elgg_echo('event_calendar:group_breadcrumb'), 'event_calendar/group/'.$event->container_guid);
+ } else {
+ elgg_push_breadcrumb(elgg_echo('event_calendar:show_events_title'),'event_calendar/list');
+ }
+ elgg_push_breadcrumb($event->title,$event->getURL());
+ elgg_push_breadcrumb(elgg_echo('event_calendar:review_requests_menu_title'));
+
+ if ($event->canEdit()) {
+ $requests = elgg_get_entities_from_relationship(
+ array(
+ 'relationship' => 'event_calendar_request',
+ 'relationship_guid' => $event_guid,
+ 'inverse_relationship' => TRUE,
+ 'limit' => 0)
+ );
+ if ($requests) {
+ $content = elgg_view('event_calendar/review_requests',array('requests' => $requests, 'entity' => $event));
+ } else {
+ $content = elgg_echo('event_calendar:review_requests_request_none');
+ }
+ } else {
+ $content = elgg_echo('event_calendar:review_requests_error');
+ }
+ }
+ $params = array('title' => $title, 'content' => $content,'filter' => '');
+
+ $body = elgg_view_layout("content", $params);
+
+ return elgg_view_page($title,$body);
+}
+
+function event_calendar_handle_menu($event_guid) {
+ $event = get_entity($event_guid);
+ $event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar');
+ if ((($event_calendar_personal_manage == 'by_event') && ($event->personal_manage == 'closed'))
+ || (($event_calendar_personal_manage == 'closed') || ($event_calendar_personal_manage == 'no'))) {
+ $url = "event_calendar/review_requests/$event_guid";
+ $item = new ElggMenuItem('event-calendar-0review_requests', elgg_echo('event_calendar:review_requests_menu_title'), $url);
+ $item->setSection('event_calendar');
+ elgg_register_menu_item('page', $item);
+ //elgg_register_menu_item(elgg_echo('event_calendar:review_requests_title'), $CONFIG->wwwroot . "pg/event_calendar/review_requests/".$event_id, '0eventcalendaradmin');
+ }
+ $event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar');
+ if ($event_calendar_add_users == 'yes') {
+ $url = "event_calendar/manage_users/$event_guid";
+ $item = new ElggMenuItem('event-calendar-1manage_users', elgg_echo('event_calendar:manage_users:breadcrumb'), $url);
+ $item->setSection('event_calendar');
+ elgg_register_menu_item('page', $item);
+ }
+}
+function event_calendar_get_secret_key() {
+ $key_file_name = elgg_get_plugin_setting('ical_auth_file_name','event_calendar');
+ if ($key_file_name && file_exists($key_file_name)) {
+ $key = (require($key_file_name));
+
+ return $key['tokenSecretKey'];
+ } else {
+ return FALSE;
+ }
+}
+
+function getLastDayOfMonth($month,$year) {
+ return idate('d', mktime(0, 0, 0, ($month + 1), 0, $year));
+}
+
+function event_calendar_modify_full_calendar($event_guid,$day_delta,$minute_delta,$start_time,$resend,$minutes,$iso_date) {
+ $event = get_entity($event_guid);
+ if (elgg_instanceof($event,'object','event_calendar') && $event->canEdit()) {
+ if ($event->is_event_poll) {
+ if (elgg_is_active_plugin('event_poll')) {
+ elgg_load_library('elgg:event_poll');
+ return event_poll_change($event_guid,$day_delta,$minute_delta,$start_time,$resend,$minutes,$iso_date);
+ } else {
+ return FALSE;
+ }
+ } else {
+ $event->start_date = strtotime("$day_delta days",$event->start_date)+60*$minute_delta;
+ if ($event->end_date) {
+ $event->end_date = strtotime("$day_delta days",$event->end_date);
+ }
+ $times = elgg_get_plugin_setting('times','event_calendar');
+ //$inc = 24*60*60*$day_delta+60*$minute_delta;
+
+ //$event->real_end_time += $inc;
+ $event->real_end_time = strtotime("$day_delta days",$event->real_end_time)+60*$minute_delta;
+ if ($times != 'no') {
+ $event->start_time += $minute_delta;
+ if ($event->end_time) {
+ $event->end_time += $minute_delta;
+ }
+ }
+ $dow = array('monday','tuesday','wednesday','thursday','friday','saturday','sunday');
+ $week_repeats = array();
+ $weekday_delta = (($day_delta % 7) + 7) % 7; // Imagine delta is -12: ((-12 % 7) + 7 % 7) = +2 (thursdays are saturdays)
+ foreach ($dow as $i => $w) {
+ $v = 'event-calendar-repeating-'.$w.'-value';
+ $new_day = $dow[($i+$weekday_delta)%7];
+ $week_repeats[$new_day] = $event->$v;
+ }
+ foreach ($week_repeats as $w => $value) {
+ $v = 'event-calendar-repeating-'.$w.'-value';
+ $event->$v = $value;
+ }
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+function event_calendar_get_page_content_fullcalendar_events($start_date,$end_date,$filter='all',$container_guid=0,$region='-') {
+ //print "$start_date - $end_date";
+ $start_ts = strtotime($start_date);
+ $end_ts = strtotime($end_date);
+ if ($filter == 'all') {
+ $events = event_calendar_get_events_between($start_ts,$end_ts,false,0,0,$container_guid,$region);
+ } else if ($filter == 'open') {
+ $events = event_calendar_get_open_events_between($start_ts,$end_ts,false,0,0,$container_guid,$region);
+ } else if ($filter == 'friends') {
+ $user_guid = elgg_get_logged_in_user_guid();
+ $events = event_calendar_get_events_for_friends_between($start_ts,$end_ts,false,0,0,$user_guid,$container_guid,$region);
+ } else if ($filter == 'mine') {
+ $user_guid = elgg_get_logged_in_user_guid();
+ $events = event_calendar_get_events_for_user_between2($start_ts,$end_ts,false,0,0,$user_guid,$container_guid,$region);
+ }
+ $event_array = array();
+ $times_supported = elgg_get_plugin_setting('times','event_calendar') != 'no';
+ $polls_supported = elgg_is_active_plugin('event_poll');
+ foreach($events as $e) {
+ $event = $e['event'];
+ $event_data = $e['data'];
+ $c = count($event_data);
+ foreach($event_data as $ed) {
+ $event_item = array(
+ 'guid' => $event->guid,
+ 'title' => $event->title,
+ 'start' => date('c',$ed['start_time']),
+ 'end' => date('c',$ed['end_time']),
+ );
+ if (!$times_supported || ($event->schedule_type == 'all_day')) {
+ $event_item['allDay'] = TRUE;
+ } else {
+ $event_item['allDay'] = FALSE;
+ }
+
+ if ($polls_supported && isset($e['is_event_poll']) && $e['is_event_poll']) {
+ $event_item['className'] = 'event-poll-class';
+ $event_item['title'] .= ' '.elgg_echo('event_calendar:poll_suffix');
+ $event_item['is_event_poll'] = TRUE;
+ $event_item['url'] = elgg_get_site_url().'event_poll/vote/'.$event->guid;
+ $event_item['minutes'] = $ed['minutes'];
+ $event_item['iso_date'] = $ed['iso_date'];
+ } else {
+ $event_item['id'] = $event->guid;
+ $event_item['is_event_poll'] = FALSE;
+ $event_item['url'] = elgg_get_site_url().'event_calendar/view/'.$event->guid;
+ }
+
+ $event_array[] = $event_item;
+ }
+ }
+
+ $json_events_string = json_encode($event_array);
+ return $json_events_string;
+}
+
+// right now this does not return repeated events in sorted order, so repeated events only really work properly for the full calendar
+// TODO: find another solution for displaying repeated events
+
+function event_calendar_flatten_event_structure($events) {
+ $flattened = array();
+ $guids = array();
+ foreach($events as $e) {
+ $this_event = $e['event'];
+ $guid = $this_event->guid;
+ if (!in_array($guid,$guids)) {
+ $guids[] = $guid;
+ $flattened[] = $this_event;
+ }
+ }
+ return $flattened;
+}
+
+function event_calendar_queue_reminders() {
+ // game plan - get all events up to 60 days ahead
+ // with no reminder sent
+ // compute reminder period
+ // if <= current time, set reminder_queued flag and queue the
+ // notification message using the message_queue plugin
+ if (elgg_plugin_exists('message_queue')) {
+ $now = time();
+ // oops - this does not work for repeated events
+ // need extra stuff for that
+ /*$options = array(
+ 'type' => 'object',
+ 'subtype' => 'event_calendar',
+ 'metadata_name_value_pairs' => array(
+ array('name' => 'reminder_queued', 'value' => 'no'),
+ array('name' => 'send_reminder', 'value' => 1),
+ array('name' => 'start_date', 'value' => $now + 60*24*60*60, 'operand' => '>='),
+ ),
+ 'limit' => 0,
+ );
+ $events = elgg_get_entities_from_metadata($options);
+ */
+ $event_list = event_calendar_get_events_between($now,$now + 60*24*60*60,FALSE,0);
+
+ foreach($event_list as $es) {
+ $e = $es['event'];
+ if ($e->send_reminder) {
+ $reminder_period = 60*$e->reminder_interval*$e->reminder_number;
+ if ($e->repeats) {
+ // repeated events require more complex handing
+ foreach($es['data'] as $d) {
+ // if event falls in the reminder period
+ if ($d->start_time - $reminder_period >= $now) {
+ // and the reminder has not already been queued
+ if (!event_calendar_repeat_reminder_logged($e,$d->start_time)) {
+ // set the reminder queued flag
+ event_calendar_repeat_reminder_log($e,$d->start_time);
+ // queue the reminder for sending
+ event_calendar_queue_reminder($e);
+ }
+ break;
+ }
+ }
+ } else {
+ // if this is just a normal non-repeated event, then we just need to set a flag and queue the reminder
+ if (($e->reminder_queued != 'yes') && ($e->start_date - $now <= $reminder_period)) {
+ $e->reminder_queued = 'yes';
+ event_calendar_queue_reminder($e);
+ }
+ }
+ }
+ }
+ }
+}
+
+function event_calendar_repeat_reminder_log($e,$start) {
+ // this simple log just uses annotations on the event
+ // TODO - remove log entries for past events
+ create_annotation($e->guid, 'repeat_reminder_log_item', $start, '',0,ACCESS_PUBLIC);
+}
+
+function event_calendar_repeat_reminder_logged($e,$start) {
+ $options = array(
+ 'guid' => $e->guid,
+ 'annotation_name' => 'repeat_reminder_log_item',
+ 'annotation_value' => $start,
+ 'limit' => 1
+ );
+
+ if (elgg_get_annotations($options)) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+function event_calendar_queue_reminder($e) {
+ elgg_load_library('elgg:message_queue');
+ $subject = elgg_echo('event_calendar:reminder:subject',array($e->title));
+ $time_string = event_calendar_get_formatted_time($e);
+ $body = elgg_echo('event_calendar:reminder:body',array($e->title,$time_string,$e->getURL()));
+ $m = message_queue_create_message($subject,$body);
+ if ($m) {
+ $users = event_calendar_get_users_for_event($e->guid,0);
+ foreach($users as $u) {
+ message_queue_add($m->guid,$u->guid);
+ }
+ message_queue_set_for_sending($m->guid);
+ }
+}
+
+/*function event_calendar_create_bbb_conf($event) {
+ $bbb_security_salt = elgg_get_plugin_setting('bbb_security_salt','event_calendar');
+ $bbb_server_url = rtrim(elgg_get_plugin_setting('bbb_server_url','event_calendar'), '/') . '/';
+ if ($bbb_security_salt) {
+ $day_in_minutes = 60*24;
+ $now = time();
+ // fix duration bug
+ # $duration = (int)(($event->real_end_time-$event->start_date)/60)+$day_in_minutes;
+ $duration = (int)(($event->real_end_time-$now)/60)+$day_in_minutes;
+ $title = urlencode($event->title);
+ $params = "name=$title&meetingID={$event->guid}&duration=$duration";
+ $checksum = sha1('create'.$params.$bbb_security_salt);
+ $params .= "&checksum=$checksum";
+
+ // create curl resource
+ $ch = curl_init();
+
+ // set url
+ curl_setopt($ch, CURLOPT_URL, $bbb_server_url.'api/create?'.$params);
+
+ //return the transfer as a string
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+
+ // $output contains the output string
+ $output = curl_exec($ch);
+
+ // close curl resource to free up system resources
+ curl_close($ch);
+
+ #error_log("BBB create request:");
+ #error_log($bbb_server_url.'api/create?'.$params);
+
+ #error_log("BBB create response:");
+ #error_log($output);
+
+ $xml = new SimpleXMLElement($output);
+ if ($xml->returncode == 'SUCCESS') {
+ $event->bbb_attendee_password = (string) $xml->attendeePW;
+ $event->bbb_moderator_password = (string) $xml->moderatorPW;
+ } else {
+ register_error(elgg_echo('event_calendar:bbb_create_error',array($xml->message)));
+ }
+ } else {
+ register_error(elgg_echo('event_calendar:bbb_settings_error'));
+ }
+}*/
+
+// utility function for BBB api calls
+function event_calendar_bbb_api($api_function,$params=NULL) {
+
+ $bbb_security_salt = elgg_get_plugin_setting('bbb_security_salt','event_calendar');
+ $bbb_server_url = rtrim(elgg_get_plugin_setting('bbb_server_url','event_calendar'), '/') . '/';
+ if ($bbb_security_salt) {
+ if (isset($params) && is_array($params) && count($params) > 0) {
+ $query = array();
+ foreach($params as $k => $v) {
+ $query[] = $k.'='.rawurlencode($v);
+ }
+ $qs = implode('&',$query);
+ } else {
+ $qs = '';
+ }
+ $checksum = sha1($api_function.$qs.$bbb_security_salt);
+ if ($qs) {
+ $qs .= "&checksum=$checksum";
+ }
+
+ // create curl resource
+ $ch = curl_init();
+
+ // set url
+ curl_setopt($ch, CURLOPT_URL, $bbb_server_url.'api/'.$api_function.'?'.$qs);
+
+ //return the transfer as a string
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+
+ // $output contains the output string
+ $output = curl_exec($ch);
+
+ // close curl resource to free up system resources
+ curl_close($ch);
+
+ error_log("BBB api call: ".$api_function);
+ error_log(print_r($params,TRUE));
+ error_log("BBB response: \n".$output);
+ return $output;
+ } else {
+ return FALSE;
+ }
+}
+
+function event_calendar_create_bbb_conf($event) {
+ $day_in_minutes = 60*24;
+ $now = time();
+ // fix duration bug
+ # $duration = (int)(($event->real_end_time-$event->start_date)/60)+$day_in_minutes;
+ $duration = (int)(($event->real_end_time-$now)/60)+$day_in_minutes;
+ if ($duration > 0) {
+ $title = urlencode($event->title);
+ $output = event_calendar_bbb_api('create',array('meetingID'=>$event->guid,'name'=>$title,'duration'=>$duration));
+ if ($output) {
+ $xml = new SimpleXMLElement($output);
+ if ($xml->returncode == 'SUCCESS') {
+ $event->bbb_attendee_password = (string) $xml->attendeePW;
+ $event->bbb_moderator_password = (string) $xml->moderatorPW;
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ } else {
+ return FALSE;
+ }
+ } else {
+ return FALSE;
+ }
+}
+
+// checks to see if a BBB conference is actually running
+function event_calendar_is_conference_running($event) {
+ $output = event_calendar_bbb_api('isMeetingRunning',array('meetingID'=>$event->guid));
+ if (!$output) {
+ return FALSE;
+ } else {
+ $xml = new SimpleXMLElement($output);
+ if ($xml->returncode == 'SUCCESS' && $xml->running == 'true') {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+}
+
+// checks to see if a BBB conference exists
+function event_calendar_conference_exists($event) {
+ $output = event_calendar_bbb_api('getMeetingInfo',array('meetingID'=>$event->guid,'password'=>$event->bbb_moderator_password));
+ if (!$output) {
+ return FALSE;
+ } else {
+ $xml = new SimpleXMLElement($output);
+ if ($xml->returncode == 'SUCCESS' && $xml->meetingID == $event->guid) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+}
+
+// forwards to the join link
+// this function assumes that the conference is running
+function event_calendar_join_conference($event) {
+ forward(event_calendar_get_join_bbb_url($event));
+}
+
+function event_calendar_get_join_bbb_url($event) {
+ $bbb_security_salt = elgg_get_plugin_setting('bbb_security_salt','event_calendar');
+ $bbb_server_url = rtrim(elgg_get_plugin_setting('bbb_server_url','event_calendar'), '/') . '/';
+ $user = elgg_get_logged_in_user_entity();
+ $full_name = urlencode($user->name);
+ if ($event->canEdit()) {
+ $password = urlencode($event->bbb_moderator_password);
+ } else {
+ $password = urlencode($event->bbb_attendee_password);
+ }
+ $params = "fullName=$full_name&meetingID={$event->guid}&userID={$user->username}&password=$password";
+ $checksum = sha1('join'.$params.$bbb_security_salt);
+ $params .= "&checksum=$checksum";
+ $url = $bbb_server_url.'api/join?'.$params;
+ return $url;
+}
+
+// returns TRUE if the given user can add an event to the given calendar
+// if group_guid is 0, this is assumed to be the site calendar
+function event_calendar_can_add($group_guid=0,$user_guid=0) {
+ if (!$user_guid) {
+ if (elgg_is_logged_in()) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ } else {
+ return FALSE;
+ }
+ }
+ if ($group_guid) {
+ if (!event_calendar_activated_for_group($group_guid)) {
+ return FALSE;
+ }
+ $group = get_entity($group_guid);
+ if (elgg_instanceof($group,'group')) {
+ $group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar');
+ if (!$group_calendar || $group_calendar == 'members') {
+ return $group->canWriteToContainer($user_guid);
+ } else if ($group_calendar == 'admin') {
+ if ($group->canEdit($user_guid)) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+ } else {
+ return FALSE;
+ }
+ } else {
+ $site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar');
+ if (!$site_calendar || $site_calendar == 'admin') {
+ // only admins can post directly to the site-wide calendar
+ return elgg_is_admin_user($user_guid);
+ } else if ($site_calendar == 'loggedin') {
+ // any logged-in user can post to the site calendar
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
diff --git a/mod/event_calendar/start.php b/mod/event_calendar/start.php
new file mode 100644
index 000000000..954c3400a
--- /dev/null
+++ b/mod/event_calendar/start.php
@@ -0,0 +1,414 @@
+<?php
+
+/**
+ * Event calendar plugin
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2008-2011
+ * @link http://radagast.biz/
+ */
+
+
+elgg_register_event_handler('init','system','event_calendar_init');
+
+function event_calendar_init() {
+
+ elgg_register_library('elgg:event_calendar', elgg_get_plugins_path() . 'event_calendar/models/model.php');
+
+ elgg_register_plugin_hook_handler('cron', 'fiveminute', 'event_calendar_handle_reminders_cron',400);
+
+ // Register a page handler, so we can have nice URLs
+ elgg_register_page_handler('event_calendar','event_calendar_page_handler');
+
+ // Register URL handler
+ elgg_register_entity_url_handler('object', 'event_calendar','event_calendar_url');
+
+ // Register granular notification for this type
+ register_notification_object('object', 'event_calendar', elgg_echo('event_calendar:new_event'));
+
+ elgg_extend_view('css/elements/forms', 'css/elements/forms/datepicker_multi');
+
+ // Set up site menu
+ $site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar');
+ if (!$site_calendar || $site_calendar != 'no') {
+ // add a site navigation item
+ $item = new ElggMenuItem('event_calendar', elgg_echo('item:object:event_calendar'), 'event_calendar/list/');
+ elgg_register_menu_item('site', $item);
+ }
+ // make event calendar title and description searchable
+ elgg_register_entity_type('object','event_calendar');
+
+ // make legacy tags searchable
+ if (function_exists('elgg_register_tag_metadata_name')) {
+ elgg_register_tag_metadata_name('event_tags');
+ }
+
+ // register the plugin's JavaScript
+ $plugin_js = elgg_get_simplecache_url('js', 'event_calendar/event_calendar');
+ elgg_register_js('elgg.event_calendar', $plugin_js);
+
+ //add to group profile page
+ // TODO - are the left and right values still relevant for Elgg 1.8?
+ $group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar');
+ if (!$group_calendar || $group_calendar != 'no') {
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'event_calendar_owner_block_menu');
+ $group_profile_display = elgg_get_plugin_setting('group_profile_display', 'event_calendar');
+ if (!$group_profile_display || $group_profile_display == 'right') {
+ //elgg_extend_view('groups/right_column', 'event_calendar/groupprofile_calendar');
+ elgg_extend_view('groups/tool_latest', 'event_calendar/group_module');
+ } else if ($group_profile_display == 'left') {
+ elgg_extend_view('groups/tool_latest', 'event_calendar/group_module');
+ //elgg_extend_view('groups/left_column', 'event_calendar/groupprofile_calendar');
+ }
+ }
+
+ //add to the css
+ elgg_extend_view('css/elgg', 'event_calendar/css');
+
+ $event_calendar_listing_format = elgg_get_plugin_setting('listing_format', 'event_calendar');
+ if (elgg_is_active_plugin('event_poll') || ($event_calendar_listing_format == 'full')) {
+ elgg_extend_view('css/elgg', 'fullcalendar/css');
+ $plugin_js = elgg_get_simplecache_url('js', 'event_calendar/fullcalendar');
+ elgg_register_js('elgg.full_calendar', $plugin_js);
+ }
+
+ //add a widget
+ elgg_register_widget_type('event_calendar',elgg_echo("event_calendar:widget_title"),elgg_echo('event_calendar:widget:description'),array('all','dashboard'));
+
+ // add the event calendar group tool option
+ $event_calendar_group_default = elgg_get_plugin_setting('group_default', 'event_calendar');
+ if (!$event_calendar_group_default || ($event_calendar_group_default == 'yes')) {
+ add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),true);
+ } else {
+ add_group_tool_option('event_calendar',elgg_echo('event_calendar:enable_event_calendar'),false);
+ }
+
+ // if autogroup is set, listen and respond to join/leave events
+ if (elgg_get_plugin_setting('autogroup', 'event_calendar') == 'yes') {
+ elgg_register_event_handler('join', 'group', 'event_calendar_handle_join');
+ elgg_register_event_handler('leave', 'group', 'event_calendar_handle_leave');
+ }
+
+ // entity menu
+ elgg_register_plugin_hook_handler('register', 'menu:entity', 'event_calendar_entity_menu_setup');
+ elgg_register_plugin_hook_handler('prepare', 'menu:entity', 'event_calendar_entity_menu_prepare');
+
+ // register actions
+ $action_path = elgg_get_plugins_path() . 'event_calendar/actions/event_calendar';
+
+ elgg_register_action("event_calendar/edit","$action_path/edit.php");
+ elgg_register_action("event_calendar/delete","$action_path/delete.php");
+ elgg_register_action("event_calendar/add_personal","$action_path/add_personal.php");
+ elgg_register_action("event_calendar/remove_personal","$action_path/remove_personal.php");
+ elgg_register_action("event_calendar/request_personal_calendar","$action_path/request_personal_calendar.php");
+ elgg_register_action("event_calendar/toggle_personal_calendar","$action_path/toggle_personal_calendar.php");
+ elgg_register_action("event_calendar/killrequest","$action_path/killrequest.php");
+ elgg_register_action("event_calendar/addtocalendar","$action_path/addtocalendar.php");
+ elgg_register_action("event_calendar/add_to_group","$action_path/add_to_group.php");
+ elgg_register_action("event_calendar/remove_from_group","$action_path/remove_from_group.php");
+ elgg_register_action("event_calendar/add_to_group_members","$action_path/add_to_group_members.php");
+ elgg_register_action("event_calendar/remove_from_group_members","$action_path/remove_from_group_members.php");
+ elgg_register_action("event_calendar/manage_subscribers","$action_path/manage_subscribers.php");
+ elgg_register_action("event_calendar/modify_full_calendar","$action_path/modify_full_calendar.php");
+ elgg_register_action("event_calendar/join_conference","$action_path/join_conference.php");
+}
+
+/**
+ * Add a menu item to an ownerblock
+ */
+function event_calendar_owner_block_menu($hook, $type, $return, $params) {
+ elgg_load_library('elgg:event_calendar');
+ if (elgg_instanceof($params['entity'], 'group')) {
+ if (event_calendar_activated_for_group($params['entity'])) {
+ $url = "event_calendar/group/{$params['entity']->guid}";
+ $item = new ElggMenuItem('event_calendar', elgg_echo('event_calendar:group'), $url);
+ $return[] = $item;
+ }
+ }
+
+ return $return;
+}
+
+function event_calendar_url($entity) {
+ $friendly_title = elgg_get_friendly_title($entity->title);
+ return "event_calendar/view/{$entity->guid}/$friendly_title";
+}
+
+/**
+ * Dispatches event calendar pages.
+ *
+ * URLs take the form of
+ * Site event calendar: event_calendar/list/<start_date>/<display_mode>/<filter_context>/<region>
+ * Single event: event_calendar/view/<event_guid>/<title>
+ * New event: event_calendar/add
+ * Edit event: event_calendar/edit/<event_guid>
+ * Group event calendar: event_calendar/group/<group_guid>/<start_date>/<display_mode>/<filter_context>/<region>
+ * Add group event: event_calendar/add/<group_guid>
+ * Review requests: event_calendar/review_requests/<event_guid>
+ * Display event subscribers: event_calendar/display_users/<event_guid>
+ * Events for a user's calendar: event_calendar/owner/<username>/<start_date>/<display_mode>/<filter_context>/<region>
+ *
+ * Title is ignored
+ *
+ * @param array $page
+ * @return NULL
+ */
+function event_calendar_page_handler($page) {
+
+ elgg_load_library('elgg:event_calendar');
+ $page_type = $page[0];
+ switch ($page_type) {
+ case 'list':
+ if (isset($page[1])) {
+ $start_date = $page[1];
+ if (isset($page[2])) {
+ $display_mode = $page[2];
+ if (isset($page[3])) {
+ $filter_mode = $page[3];
+ if (isset($page[4])) {
+ $region = $page[4];
+ } else {
+ $region = '';
+ }
+ } else {
+ $filter_mode = '';
+ }
+ } else {
+ $display_mode = '';
+ }
+ } else {
+ $start_date = 0;
+ }
+ echo event_calendar_get_page_content_list($page_type,0,$start_date,$display_mode,$filter_mode,$region);
+ break;
+ case 'view':
+ echo event_calendar_get_page_content_view($page[1]);
+ break;
+ case 'display_users':
+ echo event_calendar_get_page_content_display_users($page[1]);
+ break;
+ case 'manage_users':
+ echo event_calendar_get_page_content_manage_users($page[1]);
+ break;
+ case 'schedule':
+ case 'add':
+ if (isset($page[1])) {
+ group_gatekeeper();
+ $group_guid = $page[1];
+ } else {
+ gatekeeper();
+ $group_guid = 0;
+ }
+ echo event_calendar_get_page_content_edit($page_type,$group_guid,$page[2]);
+ break;
+ case 'edit':
+ gatekeeper();
+ echo event_calendar_get_page_content_edit($page_type, $page[1]);
+ break;
+ case 'group':
+ group_gatekeeper();
+ if (isset($page[1])) {
+ $group_guid = $page[1];
+ if (isset($page[2])) {
+ $start_date = $page[2];
+ if (isset($page[3])) {
+ $display_mode = $page[3];
+ if (isset($page[4])) {
+ $filter_mode = $page[4];
+ if (isset($page[5])) {
+ $region = $page[5];
+ } else {
+ $region = '';
+ }
+ } else {
+ $filter_mode = '';
+ }
+ } else {
+ $display_mode = '';
+ }
+ } else {
+ $start_date = '';
+ }
+ } else {
+ $group_guid = 0;
+ }
+ echo event_calendar_get_page_content_list($page_type,$group_guid,$start_date,$display_mode,$filter_mode,$region);
+ break;
+ case 'owner':
+ if (isset($page[1])) {
+ $username = $page[1];
+ $user = get_user_by_username($username);
+ $user_guid = $user->guid;
+ if (isset($page[2])) {
+ $start_date = $page[2];
+ if (isset($page[3])) {
+ $display_mode = $page[3];
+ if (isset($page[4])) {
+ $filter_mode = $page[4];
+ if (isset($page[5])) {
+ $region = $page[5];
+ } else {
+ $region = '';
+ }
+ } else {
+ $filter_mode = '';
+ }
+ } else {
+ $display_mode = '';
+ }
+ } else {
+ $start_date = '';
+ }
+ } else {
+ $group_guid = 0;
+ }
+ echo event_calendar_get_page_content_list($page_type,$user_guid,$start_date,$display_mode,$filter_mode,$region);
+ break;
+ case 'review_requests':
+ gatekeeper();
+ echo event_calendar_get_page_content_review_requests($page[1]);
+ break;
+ case 'get_fullcalendar_events':
+ echo event_calendar_get_page_content_fullcalendar_events($page[1],$page[2],$page[3],$page[4]);
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+/**
+ * Add particular event calendar links/info to entity menu
+ */
+function event_calendar_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 != 'event_calendar') {
+ return $return;
+ }
+ if (elgg_is_active_plugin('event_poll') && $entity->canEdit() && $entity->schedule_type == 'poll') {
+ $options = array(
+ 'name' => 'schedule',
+ 'text' => elgg_echo('event_poll:schedule_button'),
+ 'title' => elgg_echo('event_poll:schedule_button'),
+ 'href' => 'event_poll/vote/'.$entity->guid,
+ 'priority' => 150,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+ $user_guid = elgg_get_logged_in_user_guid();
+ if ($user_guid) {
+ $calendar_status = event_calendar_personal_can_manage($entity,$user_guid);
+ if ($calendar_status == 'open') {
+ if (event_calendar_has_personal_event($entity->guid,$user_guid)) {
+ $options = array(
+ 'name' => 'personal_calendar',
+ 'text' => elgg_echo('event_calendar:remove_from_the_calendar_menu_text'),
+ 'title' => elgg_echo('event_calendar:remove_from_my_calendar'),
+ 'href' => elgg_add_action_tokens_to_url("action/event_calendar/remove_personal?guid={$entity->guid}"),
+ 'priority' => 150,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ } else {
+ if (!event_calendar_is_full($entity->guid) && !event_calendar_has_collision($entity->guid,$user_guid)) {
+ $options = array(
+ 'name' => 'personal_calendar',
+ 'text' => elgg_echo('event_calendar:add_to_the_calendar_menu_text'),
+ 'title' => elgg_echo('event_calendar:add_to_my_calendar'),
+ 'href' => elgg_add_action_tokens_to_url("action/event_calendar/add_personal?guid={$entity->guid}"),
+ 'priority' => 150,
+ );
+ $return[] = ElggMenuItem::factory($options); }
+ }
+ } else if ($calendar_status == 'closed') {
+ if (!event_calendar_has_personal_event($entity->guid,$user_guid) && !check_entity_relationship($user_guid, 'event_calendar_request', $entity->guid)) {
+ $options = array(
+ 'name' => 'personal_calendar',
+ 'text' => elgg_echo('event_calendar:make_request_title'),
+ 'title' => elgg_echo('event_calendar:make_request_title'),
+ 'href' => elgg_add_action_tokens_to_url("action/event_calendar/request_personal_calendar?guid={$entity->guid}"),
+ 'priority' => 150,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+ }
+ }
+
+ $count = event_calendar_get_users_for_event($entity->guid,0,0,true);
+ if ($count == 1) {
+ $calendar_text = elgg_echo('event_calendar:personal_event_calendars_link_one');
+ } else {
+ $calendar_text = elgg_echo('event_calendar:personal_event_calendars_link',array($count));
+ }
+
+ $options = array(
+ 'name' => 'calendar_listing',
+ 'text' => $calendar_text,
+ 'title' => elgg_echo('event_calendar:users_for_event_menu_title'),
+ 'href' => "event_calendar/display_users/{$entity->guid}",
+ 'priority' => 150,
+ );
+ $return[] = ElggMenuItem::factory($options);
+
+ /*if (elgg_is_admin_logged_in() && (elgg_get_plugin_setting('allow_featured', 'event_calendar') == 'yes')) {
+ if ($event->featured) {
+ elgg_register_menu_item(elgg_echo('event_calendar:unfeature'), $CONFIG->url . "action/event_calendar/unfeature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions');
+ } else {
+ elgg_register_menu_item(elgg_echo('event_calendar:feature'), $CONFIG->url . "action/event_calendar/feature?event_id=".$event_id.'&'.event_calendar_security_fields(), 'eventcalendaractions');
+ }
+ }*/
+
+ return $return;
+}
+
+function event_calendar_entity_menu_prepare($hook, $type, $return, $params) {
+ // remove access level from listings
+ if (elgg_in_context('event_calendar') && !elgg_in_context('event_calendar:view')) {
+ $new_return = array();
+ if (isset($return['default']) && is_array($return['default'])) {
+ foreach($return['default'] AS $item) {
+ if ($item->getName() != 'access') {
+ $new_return[] = $item;
+ }
+ }
+ }
+ $return['default'] = $new_return;
+ }
+
+ return $return;
+}
+
+function event_calendar_handle_join($event, $object_type, $object) {
+ elgg_load_library('elgg:event_calendar');
+ $group = $object['group'];
+ $user = $object['user'];
+ $user_guid = $user->getGUID();
+ $events = event_calendar_get_events_for_group($group->getGUID());
+ foreach ($events as $event) {
+ $event_id = $event->getGUID();
+ event_calendar_add_personal_event($event_id,$user_guid);
+ }
+}
+
+function event_calendar_handle_leave($event, $object_type, $object) {
+ elgg_load_library('elgg:event_calendar');
+ $group = $object['group'];
+ $user = $object['user'];
+ $user_guid = $user->getGUID();
+ $events = event_calendar_get_events_for_group($group->getGUID());
+ foreach ($events as $event) {
+ $event_id = $event->getGUID();
+ event_calendar_remove_personal_event($event_id,$user_guid);
+ }
+}
+
+function event_calendar_handle_reminders_cron() {
+ elgg_load_library('elgg:event_calendar');
+ event_calendar_queue_reminders();
+}
diff --git a/mod/event_calendar/views/default/css/elements/forms/datepicker_multi.php b/mod/event_calendar/views/default/css/elements/forms/datepicker_multi.php
new file mode 100644
index 000000000..4a18bdad1
--- /dev/null
+++ b/mod/event_calendar/views/default/css/elements/forms/datepicker_multi.php
@@ -0,0 +1,39 @@
+<?php
+
+?>
+
+.ui-datepicker.ui-datepicker-multi {
+ width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+ float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+ margin-bottom: 0.4em;
+ margin-left: auto;
+ margin-right: auto;
+ margin-top: 0;
+ width: 95%;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header {
+ border-left-width-ltr-source: physical;
+ border-left-width-rtl-source: physical;
+ border-left-width-value: 0;
+}
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width-ltr-source: physical;
+ border-left-width-rtl-source: physical;
+ border-left-width-value: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left;
+}
diff --git a/mod/event_calendar/views/default/event_calendar/agenda_footer.php b/mod/event_calendar/views/default/event_calendar/agenda_footer.php
new file mode 100644
index 000000000..8749ebe08
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/agenda_footer.php
@@ -0,0 +1,5 @@
+<?php
+
+echo '</tbody></table></div>';
+
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/agenda_header.php b/mod/event_calendar/views/default/event_calendar/agenda_header.php
new file mode 100644
index 000000000..712dbed8d
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/agenda_header.php
@@ -0,0 +1,12 @@
+<?php
+
+$header .= '<div class="event_calendar_agenda_date_section">';
+$header .= '<div class="event_calendar_agenda_date">'.$vars['date'].'</div>';
+$header .= '<table><thead><tr>';
+$header .= '<th class="agenda_header">'.elgg_echo('event_calendar:agenda:column:time').'</th>';
+$header .= '<th class="agenda_header">'.elgg_echo('event_calendar:agenda:column:session').'</th>';
+$header .= '<th class="agenda_header">'.elgg_echo('event_calendar:agenda:column:venue').'</th>';
+$header .= '</td></thead><tbody>';
+
+echo $header;
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/agenda_item_view.php b/mod/event_calendar/views/default/event_calendar/agenda_item_view.php
new file mode 100644
index 000000000..807982665
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/agenda_item_view.php
@@ -0,0 +1,26 @@
+<?php
+$event = $vars['event'];
+$times = $vars['times'];
+$time_bit = '';
+if ($times != 'no') {
+ if (is_numeric($event->start_time)) {
+ $time_bit = event_calendar_convert_time($event->start_time);
+ }
+ if (is_numeric($event->end_time)) {
+ $time_bit .= " - ".event_calendar_convert_time($event->end_time);
+ }
+ $time_bit .= ' ';
+}
+$info = '<tr>';
+$info .= '<td class="event_calendar_agenda_time">'.$time_bit.'</td>';
+$info .= '<td class="event_calendar_agenda_title"><a href="'.$event->getUrl().'">'.$event->title.'</a></td>';
+$info .= '<td class="event_calendar_agenda_venue">'.$event->venue.'</td>';
+$info .= '</tr>';
+if (trim($event->description)) {
+ $info .= '<tr class="event_calendar_agenda_description">';
+ $info .= '<td class="event_calendar_agenda_time">&nbsp;</td>';
+ $info .= '<td colspan="2">'.$event->description.'</td></tr>';
+}
+
+echo $info;
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/agenda_view.php b/mod/event_calendar/views/default/event_calendar/agenda_view.php
new file mode 100644
index 000000000..05cdb6461
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/agenda_view.php
@@ -0,0 +1,34 @@
+<?php
+$nav = elgg_view('navigation/pagination',array(
+
+// 'baseurl' => $_SERVER['REQUEST_URI'],
+ 'baseurl' => $_SERVER['SCRIPT_NAME'].'/?'.$_SERVER['QUERY_STRING'],
+ 'offset' => $vars['offset'],
+ 'count' => $vars['count'],
+ 'limit' => $vars['limit'],
+
+ ));
+$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar');
+$events = $vars['events'];
+$html = '';
+$date_format = 'j M Y';
+$current_date = '';
+if ($events) {
+ foreach($events as $event) {
+ $date = date($date_format,$event->start_date);
+ if ($date != $current_date) {
+ if ($html) {
+ $html .= elgg_view('event_calendar/agenda_footer');
+ }
+ $html .= elgg_view('event_calendar/agenda_header',array('date'=>$date));
+
+ $current_date = $date;
+ }
+ $html .= elgg_view('event_calendar/agenda_item_view',array('event'=>$event,'times'=>$event_calendar_times));
+ }
+ $html .= elgg_view('event_calendar/agenda_footer');
+}
+$html = $nav.'<div class="event_calendar_agenda">'.$html.'</div>'.$nav;
+
+echo $html;
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/calendar.php b/mod/event_calendar/views/default/event_calendar/calendar.php
new file mode 100644
index 000000000..ea12ff603
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/calendar.php
@@ -0,0 +1,70 @@
+<?php
+if ($vars['mode']) {
+ $mode = $vars['mode'];
+} else {
+ $mode = 'month';
+}
+
+# event_calendar/list/<start_date>/<display_mode>/<filter_context>/<region>
+if ($vars['group_guid']) {
+ $link_bit = $vars['url']."event_calendar/group/{$vars['group_guid']}/{$vars['original_start_date']}/%s";
+} else {
+ $link_bit = $vars['url']."event_calendar/list/{$vars['original_start_date']}/%s/{$vars['filter']}";
+}
+
+#$link_bit = "event_calendar/show_events.php?start_date='.$vars['original_start_date'].'&group_guid='.$vars['group_guid'].'&filter='.$vars['filter'].'&mode=';
+
+$range_bit = '';
+$first_date = $vars['first_date'];
+if ($first_date) {
+ $range_bit .= 'minDate: $.datepicker.parseDate("yy-mm-dd", "'.$first_date.'"),'."\n";
+}
+$last_date = $vars['last_date'];
+if ($last_date) {
+ $range_bit .= 'maxDate: $.datepicker.parseDate("yy-mm-dd", "'.$last_date.'"),'."\n";
+}
+if ($first_date || $last_date) {
+ if (substr($first_date,0,7) == substr($last_date,0,7)) {
+ $range_bit .= "changeMonth: false,\n";
+ }
+
+ if (substr($first_date,0,4) == substr($last_date,0,4)) {
+ $range_bit .= "changeYear: false,\n";
+ }
+}
+
+$body .= elgg_view("input/datepicker_inline",
+ array(
+ 'name' => 'my_datepicker',
+ 'mode' => $vars['mode']?$vars['mode']:'month',
+ 'start_date' => $vars['start_date'],
+ 'end_date' => $vars['end_date'],
+ 'group_guid' => $vars['group_guid'],
+ 'range_bit' => $range_bit,
+ )
+);
+
+$body .= '<div id="calendarmenucontainer">';
+$body .= '<ul id="calendarmenu">';
+if ($mode == 'day') {
+ $link_class = ' class="sys_selected"';
+} else {
+ $link_class = '';
+}
+$body .= '<li'.$link_class.'><a href="'.sprintf($link_bit,'day').'">'.elgg_echo('event_calendar:day_label').'</a></li>';
+if ($mode == 'week') {
+ $link_class = ' class="sys_selected"';
+} else {
+ $link_class = '';
+}
+$body .= '<li'.$link_class.'><a href="'.sprintf($link_bit,'week').'">'.elgg_echo('event_calendar:week_label').'</a></li>';
+if ($mode == 'month') {
+ $link_class = ' class="sys_selected sys_calmenu_last"';
+} else {
+ $link_class = ' class="sys_calmenu_last"';
+}
+$body .= '<li'.$link_class.'><a href="'.sprintf($link_bit,'month').'">'.elgg_echo('event_calendar:month_label').'</a></li>';
+$body .= '</ul>';
+$body .= '</div>';
+echo $body;
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/calendar_toggle.php b/mod/event_calendar/views/default/event_calendar/calendar_toggle.php
new file mode 100644
index 000000000..30de15cf2
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/calendar_toggle.php
@@ -0,0 +1,18 @@
+<?php
+$event = $vars['event_calendar_event'];
+$user = $vars['entity'];
+$container = get_entity($event->container_guid);
+if (event_calendar_has_personal_event($event->guid, $user->guid)) {
+ $label = elgg_echo('event_calendar:remove_from_the_calendar_button');
+} else {
+ $label = elgg_echo('event_calendar:add_to_the_calendar');
+}
+
+if ($container->canEdit()) {
+ $button = elgg_view('input/button',array(
+ 'id'=>'event_calendar_user_data_'.$event->guid.'_'.$user->guid,
+ 'class' => "event-calendar-personal-calendar-toggle",
+ 'value' => $label,
+ ));
+ echo '<div class="event-calendar-personal-calendar-toggle-wrapper">'.$button.'<div>';
+}
diff --git a/mod/event_calendar/views/default/event_calendar/conference_button.php b/mod/event_calendar/views/default/event_calendar/conference_button.php
new file mode 100644
index 000000000..79fa9c5a2
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/conference_button.php
@@ -0,0 +1,33 @@
+<?php
+// A non-admin / non-event-creator only sees the button if they have the event on his/her personal calendar
+// and it is at most 15 minutes before the conference starts.
+
+// The button is removed for everyone (even admins) one day after the event end time.
+
+$event = $vars['event'];
+
+if ($event) {
+ elgg_load_library('elgg:event_calendar');
+ $user_guid = elgg_get_logged_in_user_guid();
+ $termination_time = strtotime("1 day",$event->real_end_time);
+ if ($termination_time < time()) {
+ $in_time_window = FALSE;
+ } else if ($event->canEdit()) {
+ $in_time_window = TRUE;
+ } else if (event_calendar_has_personal_event($event->guid, $user_guid) && (strtotime('-15 minutes',$event->start_date) <= time())) {
+ $in_time_window = TRUE;
+ } else {
+ $in_time_window = FALSE;
+ }
+ if ( $in_time_window ) {
+ $button = elgg_view('output/url', array(
+ 'href' => 'action/event_calendar/join_conference?event_guid='.$event->guid,
+ 'text' => elgg_echo('event_calendar:join_conf_button'),
+ 'class' => 'elgg-button elgg-button-action',
+ 'target' => '_blank',
+ 'is_action' => TRUE,
+ ));
+
+ echo '<div class="event-calendar-conf-join-button">'.$button.'</div>';
+ }
+}
diff --git a/mod/event_calendar/views/default/event_calendar/container.php b/mod/event_calendar/views/default/event_calendar/container.php
new file mode 100644
index 000000000..cb5c8620c
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/container.php
@@ -0,0 +1,28 @@
+<?php
+elgg_load_library('elgg:event_calendar');
+$site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar');
+$group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar');
+$admin = elgg_is_admin_logged_in();
+$containers = array();
+if (($site_calendar != 'no') && ($admin || !$site_calendar || ($site_calendar == 'loggedin'))) {
+ $containers[0] = elgg_echo('event_calendar:site_calendar');
+}
+$user = elgg_get_logged_in_user_entity();
+$groups = $user->getGroups('',0,0);
+foreach ($groups as $group) {
+ if (event_calendar_activated_for_group($group)) {
+ if ($admin || !$group_calendar || $group_calendar == 'members') {
+ if ($group->canWriteToContainer($user->guid)) {
+ $containers[$group->guid] = $group->name;
+ }
+ } else if ($group->canEdit()) {
+ $containers[$group->guid] = $group->name;
+ }
+ }
+}
+if ($vars['container_guid']) {
+ $value = $vars['container_guid'];
+} else {
+ $value = 0;
+}
+echo elgg_view('input/dropdown',array('name'=>'group_guid', 'value'=>$vars['container_guid'],'options_values'=>$containers));
diff --git a/mod/event_calendar/views/default/event_calendar/css.php b/mod/event_calendar/views/default/event_calendar/css.php
new file mode 100644
index 000000000..00cfd6cbb
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/css.php
@@ -0,0 +1,264 @@
+<?php
+//$background_colour = '#EBF1EB';
+//$highlight_colour = '#478787';
+
+$background_colour = '#F5F5F5';
+$highlight_colour = '#3874B7';
+?>
+
+#calendarmenucontainer {
+ position:relative;
+ left: 25px;
+}
+
+ul#calendarmenu li {
+ float: left;
+ border-top: 1px solid #969696;
+ border-left: 1px solid #969696;
+ border-bottom: 1px solid #969696;
+ background-color: <?php echo $background_colour; ?>;
+}
+
+
+ul#calendarmenu li.sys_calmenu_last {
+ border-right: 1px solid #969696;
+}
+
+ul#calendarmenu li a {
+ text-decoration: none;
+ padding: 4px 12px;
+ float: left;
+}
+
+ul#calendarmenu li a:hover, ul#calendarmenu li.sys_selected a{
+ text-decoration: none;
+ padding: 4px 12px;
+ float: left;
+ color: #FFFFFF;
+ background: <?php echo $highlight_colour; ?>;
+}
+
+.event-calendar-ical {
+ width: 200px;
+}
+
+td.ui-datepicker-unselectable {
+ background-color: #FFFFFF !important;
+ color: #888888 !important;
+}
+
+#my_datepicker .week-highlight a {
+ text-decoration: none;
+ color: #FFFFFF;
+ background: <?php echo $highlight_colour; ?>;
+}
+
+.river_object_event_calendar_create {
+ background: url(<?php echo $vars['url']; ?>mod/event_calendar/images/river_icon_event.gif) no-repeat left -1px;
+}
+.river_object_event_calendar_update {
+ background: url(<?php echo $vars['url']; ?>mod/event_calendar/images/river_icon_event.gif) no-repeat left -1px;
+}
+#event_list {
+ width:510px;
+ margin:0;
+ float:left;
+ padding:5px 0 0 0;
+}
+#event_list .search_listing {
+ border:2px solid #cccccc;
+ margin:0 0 5px 0;
+}
+
+.events {
+ min-height: 300px;
+}
+
+div.event_calendar_agenda_date_section {
+ margin-bottom: 10px;
+}
+
+.event_calendar_agenda_date {
+ font-size: 1.3em;
+ font-weight: bold;
+ margin-bottom: 3px;
+}
+
+th.agenda_header {
+ font-weight: bold;
+}
+
+td.event_calendar_agenda_time {
+ width: 120px;
+}
+
+.event_calendar_agenda_title a {
+ font-weight: bold;
+}
+
+td.event_calendar_agenda_title {
+ width: 180px;
+}
+
+.event_calendar_agenda_venue {
+ margin-bottom: 5px;
+}
+
+.event_calendar_paged_month {
+ font-size: 1.3em;
+ font-weight: bold;
+ margin-bottom: 5px;
+ text-transform:uppercase;
+}
+
+td.event_calendar_paged_date {
+ width: 80px;
+}
+td.event_calendar_paged_time {
+ width: 60px;
+}
+td.event_calendar_paged_title {
+ width: 280px;
+}
+
+td.event_calendar_paged_calendar {
+ padding-left: 30px;
+}
+
+table.event_calendar_paged_table {
+ width:100%;
+ border-collapse:collapse;
+ border-bottom-width:1px;
+ border-bottom-style:solid;
+ border-bottom-color:#bfbfbf;
+ margin-bottom: 5px;
+}
+
+table.event_calendar_paged_table td {
+ border-width:1px 0 0 0;
+ border-style:solid;
+ border-color:#bfbfbf;
+}
+
+table.event_calendar_paged_table th {
+ font-family:verdana, helvetica, arial, sans-serif;
+ font-size:9pt;
+ color:#183e76;
+ background-color:#ececec;
+ font-weight:bold;
+ text-transform:none;
+ padding:3px 3px 3px 3px;
+}
+
+.event_calendar_strapline {
+ font-size: 85%;
+}
+
+.event-calendar-personal-calendar-toggle-wrapper {
+ width: 100%;
+ margin-bottom: 30px;
+}
+
+.event-calendar-personal-calendar-toggle {
+ float: right;
+}
+
+li.event-calendar-filter-menu-show-only {
+ border:0;
+ padding-top:.4em;
+ background:#fff;
+ margin:0 -.3em 0 1.5em;
+}
+
+.event-calendar-compressed-date {
+ width: 150px !important;
+ margin-right: 10px;
+}
+
+fieldset > legend {
+ font-weight: bold;
+ font-size: 1.2em;
+ line-height: 1.1em;
+ padding-bottom: 5px;
+}
+.event-calendar-repeating-wrapper {
+ padding: 0;
+ margin-top: 5px;
+}
+.event-calendar-repeating-unselected {
+ font-size: 16px;
+ font-weight: bold;
+ color: #DDDDDD;
+ background-color: #AAAAAA;
+ border: 1px solid #444444;
+ padding: 5px;
+ width: 25px;
+ text-align: center;
+ display: inline-block;
+ margin: 0;
+}
+
+.event-calendar-repeating-unselected:hover {
+ text-decoration: none;
+}
+
+.event-calendar-repeating-selected {
+ font-size: 16px;
+ font-weight: bold;
+ color: #000000;
+ background-color: #FFFFFF;
+ border: 1px solid #000000;
+ padding: 5px;
+ width: 25px;
+ text-align: center;
+ display: inline-block;
+ margin: 0;
+}
+
+.event-calendar-repeating-selected:hover {
+ text-decoration: none;
+ color: #CCCCCC;
+}
+
+.event-calendar-edit-form-schedule-block ul.elgg-vertical li {
+ display: block !important;
+ clear: both;
+}
+
+.event-calendar-edit-form-block ul.elgg-vertical li label {
+ font-weight: normal;
+ width: 500px;
+}
+
+.event-calendar-edit-form-block h2 {
+ font-size: 18px;
+ color: #000000;
+}
+
+.event-calendar-edit-date-wrapper {
+ clear: both;
+ margin-left: 20px;
+ display: none;
+}
+
+.event-calendar-edit-reminder-wrapper {
+ margin-top: 10px;
+ display: none;
+}
+
+.event-calendar-edit-form-membership-block, .event-calendar-edit-form-share-block {
+ display: none;
+}
+
+.event-calendar-description {
+ display: none;
+}
+
+.event-calendar-edit-bottom {
+ clear: both;
+ margin-bottom: 5px;
+}
+
+.event-calendar-date-selected {
+ background-color: #DDDDFF;
+}
diff --git a/mod/event_calendar/views/default/event_calendar/datetime_edit.php b/mod/event_calendar/views/default/event_calendar/datetime_edit.php
new file mode 100644
index 000000000..2e0830167
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/datetime_edit.php
@@ -0,0 +1,46 @@
+<?php
+$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar');
+$event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar');
+$prefix = $vars['prefix'];
+$body = '';
+
+if ($event_calendar_times != 'no') {
+ if ($event_calendar_hide_end != 'yes') {
+ $body .= '<p><label>'.elgg_echo('event_calendar:from_label').'</label>';
+ }
+ $body .= elgg_view("input/date", array(
+ 'class'=>'event-calendar-compressed-date',
+ 'name' => 'start_date',
+ 'value'=>$vars['start_date'],
+ ));
+ $body .= '<span id="event-calendar-start-time-wrapper">';
+ $body .= elgg_view("input/timepicker",array('name' => 'start_time','value'=>$vars['start_time']));
+ $body .= '</span>';
+ if ($event_calendar_hide_end != 'yes') {
+ $body .= '</p><p id="event-calendar-to-time-wrapper"><label>'.elgg_echo('event_calendar:to_label').'</label>';
+ $body .= elgg_view("input/date", array(
+ 'class'=>'event-calendar-compressed-date',
+ 'name' => 'end_date',
+ 'value'=>$vars['end_date'],
+ ));
+ $body .= '<span id="event-calendar-end-time-wrapper">';
+ $body .= elgg_view("input/timepicker",array('name' => 'end_time','value'=>$vars['end_time']));
+ $body .= '</span>';
+ }
+ $body .= '</p>';
+} else {
+
+ $body .= '<p><label>'.elgg_echo("event_calendar:start_date_label").'<br />';
+ $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE, 'autocomplete'=>'off','name' => 'start_date','value'=>$vars['start_date']));
+ $body .= '</label></p>';
+ $body .= '<p class="description">'.$prefix['start_date'].elgg_echo('event_calendar:start_date_description').'</p>';
+
+ if ($event_calendar_hide_end != 'yes') {
+ $body .= '<p id="event-calendar-to-time-wrapper"><label>'.elgg_echo("event_calendar:end_date_label").'<br />';
+ $body .= elgg_view("event_calendar/input/date_local",array('timestamp'=>TRUE,'autocomplete'=>'off','name' => 'end_date','value'=>$vars['end_date']));
+ $body .= '</label></p>';
+ //$body .= '<p class="description">'.$prefix['end_date'].elgg_echo('event_calendar:end_date_description').'</p>';
+ }
+}
+
+echo $body; \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/entities/entity_list.php b/mod/event_calendar/views/default/event_calendar/entities/entity_list.php
new file mode 100644
index 000000000..84c2c0b7d
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/entities/entity_list.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * View a list of entities
+ *
+ * @package Elgg
+ * @author Curverider Ltd <info@elgg.com>
+ * @link http://elgg.com/
+ *
+ */
+
+$context = $vars['context'];
+$offset = $vars['offset'];
+$entities = $vars['entities'];
+$limit = $vars['limit'];
+$count = $vars['count'];
+$baseurl = $vars['baseurl'];
+$context = $vars['context'];
+$viewtype = $vars['viewtype'];
+$pagination = $vars['pagination'];
+$fullview = $vars['fullview'];
+
+$html = "";
+$nav = "";
+
+if (isset($vars['viewtypetoggle'])) {
+ $viewtypetoggle = $vars['viewtypetoggle'];
+} else {
+ $viewtypetoggle = true;
+}
+
+if ($context == "search" && $count > 0 && $viewtypetoggle) {
+ $nav .= elgg_view('navigation/viewtype', array(
+ 'baseurl' => $baseurl,
+ 'offset' => $offset,
+ 'count' => $count,
+ 'viewtype' => $viewtype,
+ ));
+}
+
+if ($pagination) {
+ $nav .= elgg_view('navigation/pagination',array(
+ 'baseurl' => $baseurl,
+ 'offset' => $offset,
+ 'count' => $count,
+ 'limit' => $limit,
+ ));
+}
+
+$html .= $nav;
+if ($viewtype == 'list') {
+ if (is_array($entities) && sizeof($entities) > 0) {
+ foreach($entities as $entity) {
+ $html .= elgg_view_entity($entity, $fullview);
+ }
+ }
+} else {
+ if (is_array($entities) && sizeof($entities) > 0) {
+ $html .= elgg_view('event_calendar/entities/gallery', array('entities' => $entities));
+ }
+}
+
+if ($count) {
+ $html .= $nav;
+}
+
+echo $html; \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/entities/gallery.php b/mod/event_calendar/views/default/event_calendar/entities/gallery.php
new file mode 100644
index 000000000..a12dfa84a
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/entities/gallery.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Elgg gallery view
+ *
+ * @package Elgg
+ * @subpackage Core
+ * @author Curverider Ltd
+ * @link http://elgg.org/
+ */
+
+$entities = $vars['entities'];
+if (is_array($entities) && sizeof($entities) > 0) {
+
+?>
+
+<table class="entity_gallery">
+
+<?php
+
+ $col = 0;
+ foreach($entities as $entity) {
+ if ($col == 0) {
+
+ echo "<tr>";
+
+ }
+ echo "<td class=\"entity_gallery_item\">";
+ echo elgg_view('event_calendar/entities/gallery_item',array('entity'=>$entity));
+ echo "</td>";
+ $col++;
+ if ($col > 3) {
+ echo "</tr>";
+ $col = 0;
+ }
+ }
+ if ($col > 0) echo "</tr>";
+
+?>
+
+</table>
+
+<?php
+
+} \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/entities/gallery_item.php b/mod/event_calendar/views/default/event_calendar/entities/gallery_item.php
new file mode 100644
index 000000000..9fc1edeca
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/entities/gallery_item.php
@@ -0,0 +1,63 @@
+<?php
+
+ /**
+ * Elgg user display (gallery)
+ *
+ * @package ElggProfile
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Curverider Ltd <info@elgg.com>
+ * @copyright Curverider Ltd 2008-2010
+ * @link http://elgg.com/
+ *
+ * @uses $vars['entity'] The user entity
+ */
+
+$icon = elgg_view(
+ "profile/icon", array(
+ 'entity' => $vars['entity'],
+ 'size' => 'medium',
+ )
+ );
+
+$banned = $vars['entity']->isBanned();
+
+$rel = "";
+if (elgg_get_page_owner_guid() == $vars['entity']->guid)
+ $rel = 'me';
+else if (check_entity_relationship(elgg_get_page_owner_guid(), 'friend', $vars['entity']->guid))
+ $rel = 'friend';
+
+if (!$banned)
+ $info .= "<p><b><a href=\"" . $vars['entity']->getUrl() . "\" rel=\"$rel\">" . $vars['entity']->name . "</a></b></p>";
+else
+ $info .= "<p><b><strike>" . $vars['entity']->name . "</b></strike><br />".elgg_echo('profile:banned')."</p>";
+
+// TODO: look into a way to pass $authorised and $event_id in $vars
+$authorised = FALSE;
+$event_id = get_input('event_id', 0);
+if ($event_id) {
+ if(isadminloggedin()) {
+ $authorised = TRUE;
+ } else {
+ // load the event from the database
+ $event = get_entity($event_id);
+ $user_id = elgg_get_logged_in_user_guid();
+ if ($event && ($event->owner_guid == $user_id)) {
+ $authorised = TRUE;
+ }
+ }
+}
+
+if ($authorised) {
+ $link = '<p><a href="#" ';
+ $link .= 'onclick="javascript:event_calendar_personal_toggle('.$event_id.','.$vars['entity']->guid.'); return false;" ';
+ $link .= ' >';
+ $link .= '<span id="event_calendar_user_data_'.$vars['entity']->guid.'">'.elgg_echo('event_calendar:remove_from_the_calendar').'</span>';
+ $link .= '</a></p>';
+ $info .= $link;
+}
+
+// echo elgg_view_image_block($icon, $info);
+echo elgg_view('search/gallery_listing',array('icon' => $icon, 'info' => $info));
+
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/filter_menu.php b/mod/event_calendar/views/default/event_calendar/filter_menu.php
new file mode 100644
index 000000000..1364902a8
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/filter_menu.php
@@ -0,0 +1,78 @@
+<?php
+// generate a list of filter tabs
+$group_guid = $vars['group_guid'];
+$filter_context = $vars['filter'];
+if ($group_guid) {
+ $url_start = "event_calendar/group/{$group_guid}/{$vars['start_date']}/{$vars['mode']}";
+} else {
+ $url_start = "event_calendar/list/{$vars['start_date']}/{$vars['mode']}";
+}
+
+$tabs = array(
+ 'all' => array(
+ 'text' => elgg_echo('event_calendar:show_all'),
+ 'href' => "$url_start/all",
+ 'selected' => ($filter_context == 'all'),
+ 'priority' => 200,
+ ),
+);
+
+if (elgg_is_logged_in()) {
+ $tabs ['mine'] = array(
+ 'text' => elgg_echo('event_calendar:show_mine'),
+ 'href' => "$url_start/mine",
+ 'selected' => ($filter_context == 'mine'),
+ 'priority' => 300,
+ );
+ $tabs['friend'] = array(
+ 'text' => elgg_echo('event_calendar:show_friends'),
+ 'href' => "$url_start/friends",
+ 'selected' => ($filter_context == 'friends'),
+ 'priority' => 400,
+ );
+}
+
+$tab_rendered = array();
+
+$event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar');
+if ($event_calendar_spots_display == "yes") {
+ $tabs['open'] = array(
+ 'text' => elgg_echo('event_calendar:show_open'),
+ 'href' => "$url_start/open",
+ 'selected' => ($filter_context == 'open'),
+ 'priority' => 100,
+ );
+} else {
+ $tab_rendered['open'] = '';
+}
+
+foreach ($tabs as $name => $tab) {
+ if ($tab['selected']) {
+ $state_selected = ' class="elgg-state-selected"';
+ } else {
+ $state_selected = '';
+ }
+ $tab_rendered[$name] = '<li'.$state_selected.'><a href="'.elgg_normalize_url($tab['href']).'">'.$tab['text'].'</a></li>';
+
+ //elgg_register_menu_item('filter', $tab);
+}
+
+//echo elgg_view_menu('filter', array('sort_by' => 'priority', 'class' => 'elgg-menu-hz'));
+
+$menu = <<<__MENU
+<ul class="elgg-menu elgg-menu-filter elgg-menu-hz elgg-menu-filter-default">
+ {$tab_rendered['open']}
+ {$tab_rendered['all']}
+ {$tab_rendered['mine']}
+ {$tab_rendered['friend']}
+</ul>
+__MENU;
+
+echo $menu;
+
+$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar');
+if ($event_calendar_region_display == 'yes') {
+ elgg_load_js("elgg.event_calendar");
+ $url_start .= "/$filter_context";
+ echo elgg_view('event_calendar/region_select',array('url_start'=>$url_start,'region'=>$vars['region']));
+} \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/forms/add_to_group.php b/mod/event_calendar/views/default/event_calendar/forms/add_to_group.php
new file mode 100644
index 000000000..2c8fdec53
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/forms/add_to_group.php
@@ -0,0 +1,74 @@
+<?php
+// Game plan - display two drop downs: one with a list of groups
+// without this event, one with - can add using one and remove using
+// the other
+// the user must have the authority to edit the groups
+
+$event_id = $vars['event']->guid;
+$event_container = $vars['event']->container_guid;
+
+// get the list of all groups:
+
+if (elgg_is_admin_logged_in()) {
+ $groups = elgg_get_entities(array(
+ 'type' => 'group',
+ 'limit' => 5000,
+ ));
+} else {
+ $groups = elgg_get_entities(array(
+ 'type' => 'group',
+ 'owner_guid' => elgg_get_logged_in_user_guid(),
+ 'limit' => 5000,
+ ));
+}
+
+// split the group list into two lists
+
+$add_options = array();
+$remove_options = array();
+$remove_group = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'display_on_group',
+ 'relationship_guid' => $event_id,
+ 'inverse_relationship' => FALSE,
+ 'limit' => 5000,
+));
+$remove_group_ids = array();
+foreach ($remove_group as $group) {
+ $remove_group_ids[] = $group->guid;
+ if ($group->guid != $event_container && $group->canEdit()) {
+ $remove_options[$group->guid] = $group->name;
+ }
+}
+
+if ($remove_group) {
+ foreach($groups as $group) {
+ if (($group->guid != $event_container) && !in_array($group->guid,$remove_group_ids)) {
+ $add_options[$group->guid] = $group->name;
+ }
+ }
+} else {
+ foreach($groups as $group) {
+ if ($group->guid != $event_container && $group->canEdit()) {
+ $add_options[$group->guid] = $group->name;
+ }
+ }
+}
+
+if ($add_options || $remove_options) {
+ echo '<div class="contentWrapper" >';
+ $event_bit = elgg_view('input/hidden', array("name" => "event_id","value" => $event_id));
+ if ($add_options) {
+ echo "<h4>".elgg_echo('event_calendar:add_to_group:add_group_title')."</h4>";
+ $add_pulldown = elgg_view("input/dropdown",array("name" => "group_id","options_values" => $add_options));
+ $submit_button = "<p>".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:add_group_button')))."</p>";
+ echo elgg_view ('input/form',array("body" => $event_bit.$add_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/add_to_group"));
+ }
+
+ if ($remove_options) {
+ echo "<h4>".elgg_echo('event_calendar:add_to_group:remove_group_title')."</h4>";
+ $remove_pulldown = elgg_view("input/dropdown",array("name" => "group_id","options_values" => $remove_options));
+ $submit_button = "<p>".elgg_view("input/submit",array("value"=>elgg_echo('event_calendar:add_to_group:remove_group_button')))."</p>";
+ echo elgg_view ('input/form',array("body" => $event_bit.$remove_pulldown.$submit_button,"action" => $vars['url']."action/event_calendar/remove_from_group"));
+ }
+ echo '</div>';
+}
diff --git a/mod/event_calendar/views/default/event_calendar/full_calendar_view.php b/mod/event_calendar/views/default/event_calendar/full_calendar_view.php
new file mode 100644
index 000000000..1a58321b5
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/full_calendar_view.php
@@ -0,0 +1,200 @@
+<?php
+elgg_load_js('elgg.full_calendar');
+
+$timeformat = elgg_get_plugin_setting('timeformat', 'event_calendar') == 24 ? 'H(:mm)' : 'h(:mm)t';
+
+// TODO: is there an easy way to avoid embedding JS?
+?>
+<script>
+
+var goToDateFlag = 0;
+
+handleEventClick = function(event) {
+ if (event.url) {
+ window.location.href = event.url;
+ event.preventDefault();
+ }
+};
+
+handleDayClick = function(date,allDay,jsEvent,view) {
+ var iso = getISODate(date);
+ var link = $('.elgg-menu-item-event-calendar-0add').find('a').attr('href');
+ var ss = link.split('/');
+ var link = $('.elgg-menu-item-event-calendar-0add').find('a').attr('href');
+ var ss = link.split('/');
+ var last_ss = ss[ss.length-1];
+ var group_guid;
+ if (last_ss == 'add') {
+ group_guid = 0;
+ } else if (last_ss.split('-').length == 3) {
+ group_guid = ss[ss.length-2];
+ } else {
+ group_guid = last_ss;
+ }
+ var url = elgg.get_site_url();
+ $('.fc-widget-content').removeClass('event-calendar-date-selected');
+ var current_iso = $('#event-calendar-selected-date').val();
+ if (current_iso == iso) {
+ // deselect
+ $('#event-calendar-selected-date').val("");
+ $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid);
+ $('.event-calendar-button-add').attr('href',url+'event_calendar/add/'+group_guid);
+ $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid);
+ } else {
+ $('#event-calendar-selected-date').val(iso);
+ $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid+'/'+iso);
+ $('.event-calendar-button-add').attr('href',url+'event_calendar/add/'+group_guid+'/'+iso);
+ $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid+'/'+iso);
+
+ $(this).addClass('event-calendar-date-selected');
+ }
+}
+
+handleEventDrop = function(event,dayDelta,minuteDelta,allDay,revertFunc) {
+
+ if (!event.is_event_poll && !confirm("<?php echo elgg_echo('event_calendar:are_you_sure'); ?>")) {
+ revertFunc();
+ } else {
+ if (event.is_event_poll) {
+ if (confirm("<?php echo elgg_echo('event_calendar:resend_poll_invitation'); ?>")) {
+ var resend = 1;
+ } else {
+ resend = 0;
+ }
+ var data = {event_guid: event.guid, startTime: event.start.toISOString(), dayDelta: dayDelta, minuteDelta: minuteDelta, resend: resend, minutes: event.minutes, iso_date: event.iso_date};
+ } else {
+ data = {event_guid: event.guid, startTime: event.start.toISOString(), dayDelta: dayDelta, minuteDelta: minuteDelta};
+ }
+ elgg.action('event_calendar/modify_full_calendar',
+ {
+ data: data,
+ success: function (res) {
+ var success = res.success;
+ var msg = res.message;
+ if (!success) {
+ elgg.register_error(msg,2000);
+ revertFunc()
+ } else {
+ event.minutes = res.minutes;
+ event.iso_date = res.iso_date;
+ }
+ }
+ }
+ );
+ }
+};
+
+getISODate = function(d) {
+ var year = d.getFullYear();
+ var month = d.getMonth()+1;
+ month = month < 10 ? '0' + month : month;
+ var day = d.getDate();
+ day = day < 10 ? '0' + day : day;
+ return year +"-"+month+"-"+day;
+}
+
+handleEventRender = function(event, element, view) {
+ /*if (event.is_event_poll) {
+ element.draggable = false;
+ }*/
+}
+
+handleGetEvents = function(start, end, callback) {
+ var start_date = getISODate(start);
+ var end_date = getISODate(end);
+ var url = "event_calendar/get_fullcalendar_events/"+start_date+"/"+end_date+"/<?php echo $vars['filter']; ?>/<?php echo $vars['group_guid']; ?>";
+ elgg.getJSON(url, {success:
+ function(events) {
+ callback(events);
+ }
+ });
+ // reset date links and classes
+ //$('.fc-widget-content').removeClass('event-calendar-date-selected');
+ var link = $('.elgg-menu-item-event-calendar-0add').find('a').attr('href');
+ if (link != undefined) {
+ var ss = link.split('/');
+ var last_ss = ss[ss.length-1];
+ var group_guid;
+ if (last_ss == 'add') {
+ group_guid = 0;
+ } else if (last_ss.split('-').length == 3) {
+ group_guid = ss[ss.length-2];
+ } else {
+ group_guid = last_ss;
+ }
+ var url = elgg.get_site_url();
+ $('.elgg-menu-item-event-calendar-0add').find('a').attr('href',url+'event_calendar/add/'+group_guid);
+ $('.elgg-menu-item-event-calendar-1schedule').find('a').attr('href',url+'event_calendar/schedule/'+group_guid);
+ }
+}
+
+handleViewDisplay = function(view) {
+ // TODO: finish this, need to highlight selected date if any
+ var current_iso = $('#event-calendar-selected-date').val();
+ if (view == 'month') {
+ goToDateFlag = 0;
+ } else if (goToDateFlag == 0 && current_iso != "") {
+ goToDateFlag = 1;
+ var a = current_iso.split("-");
+ $('#calendar').fullCalendar('gotoDate',parseInt(a[0],10),parseInt(a[1],10)-1,parseInt(a[2],10));
+ //$('.fc-widget-content').removeClass('event-calendar-date-selected');
+ //$(".fc-widget-content[data-date='"+ciso+"']").addClass('event-calendar-date-selected');
+ }
+
+ //$(".fc-widget-content[data-date='20120105']")
+}
+
+fullcalendarInit = function() {
+
+ var loadFullCalendar = function() {
+ var locale = $.datepicker.regional[elgg.get_language()];
+ if (!locale) {
+ locale = $.datepicker.regional[''];
+ }
+ $('#calendar').fullCalendar({
+ header: {
+ left: 'prev,next today',
+ center: 'title',
+ right: 'month,agendaWeek,agendaDay'
+ },
+ month: <?php echo date('n',strtotime($vars['start_date']))-1; ?>,
+ ignoreTimezone: true,
+ editable: true,
+ slotMinutes: 15,
+ eventRender: handleEventRender,
+ eventDrop: handleEventDrop,
+ eventClick: handleEventClick,
+ dayClick: handleDayClick,
+ events: handleGetEvents,
+ viewDisplay: handleViewDisplay,
+
+ isRTL: locale.isRTL,
+ firstDay: locale.firstDay,
+ monthNames: locale.monthNames,
+ monthNamesShort: locale.monthNamesShort,
+ dayNames: locale.dayNames,
+ dayNamesShort: locale.dayNamesShort,
+ buttonText: {
+ today: locale.currentText,
+ month: elgg.echo('event_calendar:month_label'),
+ week: elgg.echo('event_calendar:week_label'),
+ day: elgg.echo('event_calendar:day_label')
+ },
+ timeFormat: "<?php echo $timeformat; ?>",
+ });
+ }
+
+ elgg.get({
+ url: elgg.config.wwwroot + 'vendors/jquery/i18n/jquery.ui.datepicker-'+ elgg.get_language() +'.js',
+ dataType: "script",
+ cache: true,
+ success: loadFullCalendar,
+ error: loadFullCalendar, // english language is already loaded.
+ });
+}
+
+elgg.register_hook_handler('init', 'system', fullcalendarInit);
+
+</script>
+<div id='calendar'></div>
+<input type="hidden" id="event-calendar-selected-date" />
diff --git a/mod/event_calendar/views/default/event_calendar/group_module.php b/mod/event_calendar/views/default/event_calendar/group_module.php
new file mode 100644
index 000000000..b1c1567e7
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/group_module.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Group event calendar module
+ */
+
+$group = elgg_get_page_owner_entity();
+
+if ($group->event_calendar_enable == "no") {
+ return true;
+}
+
+elgg_push_context('widgets');
+$content = elgg_view('event_calendar/groupprofile_calendar');
+elgg_pop_context();
+
+if (!$content) {
+ if (elgg_get_plugin_setting('group_always_display', 'event_calendar') == 'yes') {
+ $content = elgg_echo('event_calendar:no_events_found');
+ }
+}
+
+if ($content) {
+ $all_link = elgg_view('output/url', array(
+ 'href' => "event_calendar/group/$group->guid",
+ 'text' => elgg_echo('link:view:all'),
+ ));
+ $new_link = elgg_view('output/url', array(
+ 'href' => "event_calendar/add/$group->guid",
+ 'text' => elgg_echo('event_calendar:new'),
+ ));
+ echo elgg_view('groups/profile/module', array(
+ 'title' => elgg_echo('event_calendar:group'),
+ 'content' => $content,
+ 'all_link' => $all_link,
+ 'add_link' => $new_link,
+ ));
+}
diff --git a/mod/event_calendar/views/default/event_calendar/groupprofile_calendar.php b/mod/event_calendar/views/default/event_calendar/groupprofile_calendar.php
new file mode 100644
index 000000000..c71780be8
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/groupprofile_calendar.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * Elgg event_calendar group profile content
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2008
+ * @link http://radagast.biz/
+ *
+ */
+
+elgg_load_library('elgg:event_calendar');
+
+$page_owner_entity = elgg_get_page_owner_entity();
+
+if (event_calendar_activated_for_group($page_owner_entity)) {
+ $num = 5;
+ // Get the upcoming events
+ $start_date = time(); // now
+ $end_date = $start_date + 60*60*24*365*2; // maximum is two years from now
+ $events = event_calendar_get_events_between($start_date,$end_date,false,$num,0,elgg_get_page_owner_guid());
+
+ // If there are any events to view, view them
+ if (is_array($events) && sizeof($events) > 0) {
+
+ foreach($events as $event) {
+ echo elgg_view("object/event_calendar",array('entity' => $event['event']));
+ }
+
+ }
+}
diff --git a/mod/event_calendar/views/default/event_calendar/groupprofile_calendar_deprecated.php b/mod/event_calendar/views/default/event_calendar/groupprofile_calendar_deprecated.php
new file mode 100644
index 000000000..0d7d5101f
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/groupprofile_calendar_deprecated.php
@@ -0,0 +1,44 @@
+<?php
+
+/**
+ * Elgg event_calendar group profile content
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2008
+ * @link http://radagast.biz/
+ *
+ */
+
+elgg_load_library('elgg:event_calendar');
+
+$page_owner_entity = elgg_get_page_owner_entity();
+
+if (event_calendar_activated_for_group($page_owner_entity)) {
+ $num = 5;
+ // Get the upcoming events
+ $start_date = time(); // now
+ $end_date = $start_date + 60*60*24*365*2; // maximum is two years from now
+ $events = event_calendar_get_events_between($start_date,$end_date,false,$num,0,elgg_get_page_owner_guid());
+
+ // If there are any events to view, view them
+ if (is_array($events) && sizeof($events) > 0) {
+
+ echo '<div id="group_pages_widget">';
+ echo '<h2>'.elgg_echo("event_calendar:groupprofile").'</h2>';
+ foreach($events as $event) {
+ echo elgg_view("object/event_calendar",array('entity' => $event));
+ }
+ echo '<div class="forum_latest"><a href="'.$vars['url'].'pg/event_calendar/group/'.elgg_get_page_owner_guid().'">'.elgg_echo('event_calendar:view_calendar').'</a></div>';
+ echo "</div>";
+
+ } else if (elgg_get_plugin_setting('group_always_display', 'event_calendar') == 'yes') {
+ echo '<div id="group_pages_widget">';
+ echo '<h2>'.elgg_echo("event_calendar:groupprofile").'</h2>';
+ echo '<div class="forum_latest">'.elgg_echo('event_calendar:no_events_found').'</div>';
+ echo "</div>";
+ }
+}
+
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/input/date_local.php b/mod/event_calendar/views/default/event_calendar/input/date_local.php
new file mode 100644
index 000000000..a0ce7f4d3
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/input/date_local.php
@@ -0,0 +1,55 @@
+<?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']);
+}
+
+// convert timestamps to text for display
+if (is_numeric($vars['value'])) {
+ $vars['value'] = date('Y-m-d', $vars['value']);
+}
+
+$attributes = elgg_format_attributes($vars);
+echo "<input type=\"text\" $attributes />";
diff --git a/mod/event_calendar/views/default/event_calendar/metatags.php b/mod/event_calendar/views/default/event_calendar/metatags.php
new file mode 100644
index 000000000..8375ef118
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/metatags.php
@@ -0,0 +1,2 @@
+<link rel="stylesheet" href="<?php echo $vars['url']; ?>mod/event_calendar/datepicker.css" type="text/css" media="screen" title="Flora (Default)">
+<script type="text/javascript" src="<?php echo $vars['url']; ?>mod/event_calendar/ui.datepicker.js"></script>
diff --git a/mod/event_calendar/views/default/event_calendar/nav.php b/mod/event_calendar/views/default/event_calendar/nav.php
new file mode 100644
index 000000000..746a46151
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/nav.php
@@ -0,0 +1,38 @@
+<?php
+$allselect = ''; $friendsselect = ''; $mineselect = '';
+switch($vars['filter']) {
+ case 'all': $allselect = 'class="selected"';
+ break;
+ case 'friends': $friendsselect = 'class="selected"';
+ break;
+ case 'mine': $mineselect = 'class="selected"';
+ break;
+ case 'open': $openselect = 'class="selected"';
+ break;
+}
+
+$url_start = $vars['url'].'mod/event_calendar/show_events.php?group_guid='.$vars['group_guid'].'&amp;mode='.$vars['mod'].'&amp;start_date='.$vars['start_date'];
+
+?>
+<div id="elgg_horizontal_tabbed_nav">
+ <ul>
+<?php
+$event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar');
+if ($event_calendar_spots_display == "yes") {
+?>
+ <li <?php echo $openselect; ?> ><a onclick="javascript:$('#event_list').load('<?php echo $url_start; ?>&amp;filter=open&amp;callback=true'); return false;" href="<?php echo $url_start; ?>&amp;filter=open&amp;callback=true"><?php echo elgg_echo('event_calendar:open'); ?></a></li>
+<?php
+}
+?>
+ <li <?php echo $allselect; ?> ><a onclick="javascript:$('#event_list').load('<?php echo $url_start; ?>&amp;filter=all&amp;callback=true'); return false;" href="<?php echo $url_start; ?>&amp;filter=all&amp;callback=true"><?php echo elgg_echo('all'); ?></a></li>
+ <li <?php echo $friendsselect; ?> ><a onclick="javascript:$('#event_list').load('<?php echo $url_start; ?>&amp;filter=friends&amp;callback=true'); return false;" href="<?php echo $url_start; ?>&amp;filter=friends&amp;callback=true"><?php echo elgg_echo('friends'); ?></a></li>
+ <li <?php echo $mineselect; ?> ><a onclick="javascript:$('#event_list').load('<?php echo $url_start; ?>&amp;filter=mine&amp;callback=true'); return false;" href="<?php echo $url_start; ?>&amp;filter=mine&amp;callback=true"><?php echo elgg_echo('event_calendar:mine'); ?></a></li>
+ </ul>
+</div>
+<?php
+$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar');
+if ($event_calendar_region_display == 'yes') {
+ $url_start .= '&amp;filter='.$vars['filter'];
+ echo elgg_view('event_calendar/region_select',array('url_start'=>$url_start,'region'=>$vars['region']));
+}
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/paged_footer.php b/mod/event_calendar/views/default/event_calendar/paged_footer.php
new file mode 100644
index 000000000..954769104
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/paged_footer.php
@@ -0,0 +1,4 @@
+<?php
+echo '</tbody></table></div>';
+?>
+
diff --git a/mod/event_calendar/views/default/event_calendar/paged_header.php b/mod/event_calendar/views/default/event_calendar/paged_header.php
new file mode 100644
index 000000000..5f4b8e59c
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/paged_header.php
@@ -0,0 +1,15 @@
+<?php
+$header .= '<div class="event_calendar_paged_header_section">';
+$header .= '<div class="event_calendar_paged_month">'.$vars['date'].'</div>';
+$header .= '<table class="event_calendar_paged_table"><thead><tr>';
+$header .= '<th class="paged_header">'.elgg_echo('event_calendar:paged:column:date').'</th>';
+$header .= '<th class="paged_header">'.elgg_echo('event_calendar:paged:column:time').'</th>';
+$header .= '<th class="paged_header">'.elgg_echo('event_calendar:paged:column:event').'</th>';
+$header .= '<th class="paged_header">'.elgg_echo('event_calendar:paged:column:venue').'</th>';
+if ($vars['personal_manage'] != 'no') {
+ $header .= '<th class="paged_header">'.elgg_echo('event_calendar:paged:column:calendar').'</th>';
+}
+$header .= '</td></thead><tbody>';
+
+echo $header;
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/paged_item_view.php b/mod/event_calendar/views/default/event_calendar/paged_item_view.php
new file mode 100644
index 000000000..f2092bafc
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/paged_item_view.php
@@ -0,0 +1,27 @@
+<?php
+$event = $vars['event'];
+$time_bit = '';
+if (is_numeric($event->start_time)) {
+ $time_bit = event_calendar_convert_time($event->start_time);
+}
+
+$date_bit = event_calendar_get_formatted_date($event->start_date);
+
+if (event_calendar_has_personal_event($event->guid,elgg_get_logged_in_user_guid())) {
+ $calendar_bit = 'checked = "checked"';
+} else {
+ $calendar_bit = '';
+}
+
+$info = '<tr>';
+$info .= '<td class="event_calendar_paged_date">'.$date_bit.'</td>';
+$info .= '<td class="event_calendar_paged_time">'.$time_bit.'</td>';
+$info .= '<td class="event_calendar_paged_title"><a href="'.$event->getUrl().'">'.$event->title.'</a></td>';
+$info .= '<td class="event_calendar_paged_venue">'.$event->venue.'</td>';
+if ($vars['personal_manage'] != 'no') {
+ $info .= '<td class="event_calendar_paged_calendar"><input class="event_calendar_paged_checkbox" id="event_calendar_paged_checkbox_'.$event->guid.'" '.$calendar_bit.' type="checkbox" /></td>';
+}
+$info .= '</tr>';
+
+echo $info;
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/paged_view.php b/mod/event_calendar/views/default/event_calendar/paged_view.php
new file mode 100644
index 000000000..f8257792f
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/paged_view.php
@@ -0,0 +1,36 @@
+<?php
+elgg_load_js('elgg.event_calendar');
+$nav = elgg_view('navigation/pagination',array(
+
+// 'baseurl' => $_SERVER['REQUEST_URI'],
+ 'baseurl' => $_SERVER['SCRIPT_NAME'].'/?'.$_SERVER['QUERY_STRING'],
+ 'offset' => $vars['offset'],
+ 'count' => $vars['count'],
+ 'limit' => $vars['limit'],
+
+ ));
+$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar');
+$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar');
+$events = $vars['events'];
+$html = '';
+$date_format = 'F Y';
+$current_month = '';
+if ($events) {
+ foreach($events as $event) {
+ $month = date($date_format,$event->start_date);
+ if ($month != $current_month) {
+ if ($html) {
+ $html .= elgg_view('event_calendar/paged_footer');
+ }
+ $html .= elgg_view('event_calendar/paged_header',array('date'=>$month,'personal_manage'=>$event_calendar_personal_manage));
+
+ $current_month = $month;
+ }
+ $html .= elgg_view('event_calendar/paged_item_view',array('event'=>$event,'times'=>$event_calendar_times,'personal_manage'=>$event_calendar_personal_manage));
+ }
+ $html .= elgg_view('event_calendar/paged_footer');
+}
+$msgs = '<div id="event_calendar_paged_messages"></div>';
+$html = $msgs.$nav.'<div class="event_calendar_paged">'.$html.'</div>'.$nav;
+
+echo $html;
diff --git a/mod/event_calendar/views/default/event_calendar/personal_manage_section.php b/mod/event_calendar/views/default/event_calendar/personal_manage_section.php
new file mode 100644
index 000000000..9e03db0ab
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/personal_manage_section.php
@@ -0,0 +1,20 @@
+<?php
+$fd = $vars['form_data'];
+$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar');
+$body = '';
+
+if ($event_calendar_personal_manage == 'by_event') {
+ $personal_manage_options = array(
+ elgg_echo('event_calendar:personal_manage:by_event:open') => 'open',
+ elgg_echo('event_calendar:personal_manage:by_event:closed') => 'closed',
+ elgg_echo('event_calendar:personal_manage:by_event:private') => 'private',
+ );
+ $body .= '<div class="event-calendar-edit-form-block event-calendar-edit-form-membership-block">';
+ $body .= '<h2>'.elgg_echo('event_calendar:personal_manage:label').'</h2>';
+ $body .= elgg_view("input/radio",array('name' => 'personal_manage','value'=>$fd['personal_manage'],'options'=>$personal_manage_options));
+ //$body .= '<p class="event-calendar-description">'.$prefix['personal_manage'].elgg_echo('event_calendar:personal_manage:description').'</p>';
+ $body .= '<br clear="both" />';
+ $body .= '</div>';
+}
+
+echo $body;
diff --git a/mod/event_calendar/views/default/event_calendar/personal_toggle_js.php b/mod/event_calendar/views/default/event_calendar/personal_toggle_js.php
new file mode 100644
index 000000000..c0611e45c
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/personal_toggle_js.php
@@ -0,0 +1,20 @@
+<?php
+// TODO: put the rest into a JS function
+
+$elgg_ts = time();
+$elgg_token = generate_action_token($elgg_ts);
+$tokens = "&__elgg_ts=$elgg_ts&__elgg_token=$elgg_token";
+?>
+<script type="text/javascript">
+function event_calendar_personal_toggle(event_id,user_id) {
+
+ var link = "<?php echo $vars['url']; ?>action/event_calendar/toggle_personal_calendar?";
+ link += "user_id="+user_id+"&event_id="+event_id+"&other=true";
+ link += "<?php echo $tokens; ?>";
+ $.get(link,
+ function (res) {
+ $('#event_calendar_user_data_'+user_id).html(res);
+ }
+ );
+}
+</script> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/region_select.php b/mod/event_calendar/views/default/event_calendar/region_select.php
new file mode 100644
index 000000000..a987171a2
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/region_select.php
@@ -0,0 +1,21 @@
+<?php
+
+$region_list = trim(elgg_get_plugin_setting('region_list', 'event_calendar'));
+// make sure that we are using Unix line endings
+$region_list = str_replace("\r\n","\n",$region_list);
+$region_list = str_replace("\r","\n",$region_list);
+if ($region_list) {
+ $body = '';
+ $options_values = array('-' =>elgg_echo('event_calendar:all'));
+ foreach(explode("\n",$region_list) as $region_item) {
+ $region_item = trim($region_item);
+ $options_values[$region_item] = $region_item;
+ }
+
+ $body .= elgg_echo('event_calendar:region_filter_by_label');
+ $body .= elgg_view('input/hidden',array('id'=>'event-calendar-region-url-start','value'=>$vars['url_start']));
+ $body .= elgg_view("input/dropdown",array('id' => 'event-calendar-region','value'=>$vars['region'],'options_values'=>$options_values));
+ $body .= '<br />';
+}
+
+echo $body;
diff --git a/mod/event_calendar/views/default/event_calendar/reminder_section.php b/mod/event_calendar/views/default/event_calendar/reminder_section.php
new file mode 100644
index 000000000..fffa6d065
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/reminder_section.php
@@ -0,0 +1,28 @@
+<?php
+$fd = $vars['form_data'];
+$event_calendar_reminders = elgg_get_plugin_setting('reminders', 'event_calendar');
+$body = '';
+if ($event_calendar_reminders == 'yes') {
+ $body .= '<div class="event-calendar-edit-reminder-wrapper">';
+ if ($fd['send_reminder']) {
+ $body .= elgg_view('input/checkbox',array('name'=>'send_reminder','checked' => 'checked','value'=>1));
+ } else {
+ $body .= elgg_view('input/checkbox',array('name'=>'send_reminder','value'=>1));
+ }
+ $body .= elgg_echo('elgg_calendar:send_reminder_label'). ' ';
+ $numbers = array();
+ for ($i=1;$i<60;$i++) {
+ $numbers[$i] = $i;
+ }
+ $intervals = array(
+ 1 => elgg_echo('event_calendar:interval:minute'),
+ 60 => elgg_echo('event_calendar:interval:hour'),
+ 60*24 => elgg_echo('event_calendar:interval:day'),
+ );
+
+ $body .= elgg_view('input/dropdown',array('name'=>'reminder_number','options_values'=>$numbers,'value'=>$fd['reminder_number']));
+ $body .= elgg_view('input/dropdown',array('name'=>'reminder_interval','options_values'=>$intervals,'value'=>$fd['reminder_interval']));
+ $body .= elgg_echo('elgg_calendar:send_reminder_before');
+ $body .= '</div>';
+}
+echo $body;
diff --git a/mod/event_calendar/views/default/event_calendar/repeat_form_element.php b/mod/event_calendar/views/default/event_calendar/repeat_form_element.php
new file mode 100644
index 000000000..5de858caf
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/repeat_form_element.php
@@ -0,0 +1,32 @@
+<?php
+$event = $vars['event'];
+$fd = $vars['form_data'];
+$days = array('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday');
+
+if ($fd['repeats'] == 'yes') {
+ echo elgg_view('input/checkbox',array('name'=>'repeats','value'=>'yes','checked'=>'checked'));
+} else {
+ echo elgg_view('input/checkbox',array('name'=>'repeats','value'=>'yes'));
+}
+echo elgg_echo('event_calendar:repeat_interval_label').' ';
+echo elgg_view('input/dropdown',array('name'=>'repeat_interval','value'=>$fd['repeat_interval'],'options_values'=>array('1'=>'1','2'=>'2','3'=>'3','4'=>'4','5'=>'5','6'=>'6','7'=>'7','8'=>'8')));
+echo ' '.elgg_echo('event_calendar:repeat_weeks');
+echo ' '.elgg_echo('event_calendar:on_these_days');
+
+echo '<div class="event-calendar-repeating-wrapper">';
+
+foreach($days as $day) {
+ $label = elgg_echo("event_calendar:day_abbrev:$day");
+ echo <<<HTML
+<a id="event-calendar-repeating-$day" href="javascript:void(0);" class="event-calendar-repeating-unselected">
+ $label
+</a>
+HTML;
+
+}
+
+echo '</div>';
+
+foreach($days as $day) {
+ echo elgg_view('input/hidden', array('name' => "event-calendar-repeating-$day-value", 'value' => $fd["event-calendar-repeating-$day-value"]));
+} \ No newline at end of file
diff --git a/mod/event_calendar/views/default/event_calendar/review_requests.php b/mod/event_calendar/views/default/event_calendar/review_requests.php
new file mode 100644
index 000000000..11916b4e3
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/review_requests.php
@@ -0,0 +1,30 @@
+<?php
+
+foreach($vars['requests'] as $request) {
+ if ($request instanceof ElggUser) {
+ $icon = elgg_view("profile/icon", array(
+ 'entity' => $request,
+ 'size' => 'small'
+ ));
+ $info = '<a href="' . $request->getURL() . '" >'.$request->name.'</a>';
+ $info .= '<div style="margin-top: 5px;" ></div>';
+ $info .= elgg_view('output/confirmlink',
+ array(
+ 'class' => "elgg-button elgg-button-delete",
+ 'href' => 'action/event_calendar/killrequest?user_guid='.$request->guid.'&event_guid=' . $vars['entity']->guid,
+ 'confirm' => elgg_echo('event_calendar:request:remove:check'),
+ 'text' => elgg_echo('event_calendar:review_requests:reject'),
+ 'title' => elgg_echo('event_calendar:review_requests:reject:title'),
+ ));
+ $info .= '&nbsp;&nbsp;';
+ $info .= elgg_view('output/url', array(
+ 'text' => elgg_echo('event_calendar:review_requests:accept'),
+ 'title' => elgg_echo('event_calendar:review_requests:accept:title'),
+ 'href' => "action/event_calendar/addtocalendar?user_guid={$request->guid}&event_guid={$vars['entity']->guid}",
+ 'class' => "elgg-button elgg-button-submit",
+ 'is_action' => TRUE,
+ ));
+ //$url = elgg_add_action_tokens_to_url("{$vars['url']}action/event_calendar/addtocalendar?user_guid={$request->guid}&event_guid={$vars['entity']->guid}");
+ echo elgg_view_image_block($icon,$info);
+ }
+}
diff --git a/mod/event_calendar/views/default/event_calendar/schedule_section.php b/mod/event_calendar/views/default/event_calendar/schedule_section.php
new file mode 100644
index 000000000..3a74dc789
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/schedule_section.php
@@ -0,0 +1,22 @@
+<?php
+$event = $vars['event'];
+$fd = $vars['form_data'];
+$event_calendar_repeated_events = elgg_get_plugin_setting('repeated_events', 'event_calendar');
+
+$body = '<div class="event-calendar-edit-date-wrapper">';
+$body .= elgg_view('event_calendar/datetime_edit',
+ array(
+ 'start_date' => $fd['start_date'],
+ 'end_date' => $fd['end_date'],
+ 'start_time' => $fd['start_time'],
+ 'end_time' => $fd['end_time'],
+ 'prefix' => $vars['prefix'],
+));
+if ($event_calendar_repeated_events == 'yes') {
+ $body .= elgg_view('event_calendar/repeat_form_element',$vars);
+}
+
+$body .= elgg_view('event_calendar/reminder_section',$vars);
+$body .= '</div>';
+
+echo $body;
diff --git a/mod/event_calendar/views/default/event_calendar/share_section.php b/mod/event_calendar/views/default/event_calendar/share_section.php
new file mode 100644
index 000000000..c4f6cf45f
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/share_section.php
@@ -0,0 +1,26 @@
+<?php
+$fd = $vars['form_data'];
+$event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar');
+$body = '<fieldset>';
+$body .= '<legend>'.elgg_echo('event_calendar:permissions:header').'</legend>';
+if($event_calendar_hide_access == 'yes') {
+ $event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar');
+ if($event_calendar_default_access) {
+ $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>$event_calendar_default_access));
+ } else {
+ $body .= elgg_view("input/hidden",array('name' => 'access_id','value'=>ACCESS_DEFAULT));
+ }
+} else {
+ $body .= '<p><label>'.elgg_echo('event_calendar:read_access').'</label>';
+ $body .= elgg_view("input/access",array('name' => 'access_id','value'=>$fd['access_id']));
+ $body .= '</p>';
+}
+if (elgg_plugin_exists('entity_admins')) {
+ $body .= elgg_echo('event_calendar:share_ownership:label');
+ $body .= '<br />';
+ $body .= elgg_echo('event_calendar:share_ownership:description');
+ $body .= elgg_view('input/entity_admins_dropdown',array('entity'=>$vars['event']));
+}
+$body .= '</fieldset>';
+
+echo $body;
diff --git a/mod/event_calendar/views/default/event_calendar/show_events.php b/mod/event_calendar/views/default/event_calendar/show_events.php
new file mode 100644
index 000000000..3a484e756
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/show_events.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Elgg show events view
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2008-12
+ * @link http://radagast.biz/
+ *
+ */
+
+elgg_load_library('elgg:event_calendar');
+
+$listing_format = $vars['listing_format'];
+
+if ($vars['events']) {
+ if ($listing_format == 'agenda') {
+ $vars['events'] = event_calendar_flatten_event_structure($vars['events']);
+ $event_list = elgg_view('event_calendar/agenda_view',$vars);
+ } else if ($listing_format == 'paged') {
+ $vars['events'] = event_calendar_flatten_event_structure($vars['events']);
+ $event_list = elgg_view('event_calendar/paged_view',$vars);
+ } else if ($listing_format == 'full') {
+ $event_list = elgg_view('event_calendar/full_calendar_view',$vars);
+ } else {
+ $vars['events'] = event_calendar_flatten_event_structure($vars['events']);
+ $options = array(
+ 'list_class' => 'elgg-list-entity',
+ 'full_view' => FALSE,
+ 'pagination' => TRUE,
+ 'list_type' => 'listing',
+ 'list_type_toggle' => FALSE,
+ 'offset' => $vars['offset'],
+ 'limit' => $vars['limit'],
+ );
+ $event_list = elgg_view_entity_list($vars['events'], $options);
+ }
+} else {
+ if ($listing_format == 'full') {
+ // show the empty calendar
+ $event_list = elgg_view('event_calendar/full_calendar_view',$vars);
+ } else {
+ $event_list = '<p>'.elgg_echo('event_calendar:no_events_found').'</p>';
+ }
+}
+if ($listing_format == 'paged' || $listing_format == 'full') {
+ echo $event_list;
+} else {
+?>
+<div style="width:100%">
+<div id="event_list" style="float:left;">
+<?php
+echo $event_list;
+?>
+</div>
+<div style="float:right;">
+<?php
+echo elgg_view('event_calendar/calendar',$vars);
+?>
+</div>
+</div>
+<?php
+}
diff --git a/mod/event_calendar/views/default/event_calendar/strapline.php b/mod/event_calendar/views/default/event_calendar/strapline.php
new file mode 100644
index 000000000..edc60aa3e
--- /dev/null
+++ b/mod/event_calendar/views/default/event_calendar/strapline.php
@@ -0,0 +1,18 @@
+<div class="contentWrapper">
+<span class="event_calendar_strapline">
+<?php
+
+ $event = $vars['entity'];
+
+ $time_updated = $event->time_created;
+ $owner_guid = $event->owner_guid;
+ $owner = get_entity($owner_guid);
+
+ echo sprintf(elgg_echo('event_calendar:strapline'),
+ elgg_view_friendly_time($time_updated),
+ "<a href=\"" . $owner->getURL() . "\">" . $owner->name ."</a>"
+ );
+
+?>
+</span>
+</div> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/forms/event_calendar/edit.php b/mod/event_calendar/views/default/forms/event_calendar/edit.php
new file mode 100644
index 000000000..747dae0f0
--- /dev/null
+++ b/mod/event_calendar/views/default/forms/event_calendar/edit.php
@@ -0,0 +1,233 @@
+<?php
+$event = $vars['event'];
+$fd = $vars['form_data'];
+
+$schedule_options = array(
+ elgg_echo('event_calendar:all_day_label') => 'all_day',
+ elgg_echo('event_calendar:schedule_type:fixed')=>'fixed',
+);
+
+if (elgg_is_active_plugin('event_poll')) {
+ $schedule_options = array_merge(array(elgg_echo('event_calendar:schedule_type:poll')=>'poll'),$schedule_options);
+}
+
+$event_calendar_fewer_fields = elgg_get_plugin_setting('fewer_fields', 'event_calendar');
+$event_calendar_repeating_events = elgg_get_plugin_setting('repeating_events', 'event_calendar');
+
+$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar');
+$event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar');
+$event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar');
+
+$event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar');
+$event_calendar_bbb_server_url = elgg_get_plugin_setting('bbb_server_url', 'event_calendar');
+
+if ($event_calendar_more_required == 'yes') {
+ $required_fields = array('title','venue','start_date','start_time',
+ 'brief_description','region','event_type','fees','contact','organiser',
+ 'event_tags','spots');
+} else {
+ $required_fields = array('title','venue','start_date');
+}
+$all_fields = array('title','venue','start_time','start_date','end_time','end_date',
+ 'brief_description','region','event_type','fees','contact','organiser','event_tags',
+ 'long_description','spots','personal_manage');
+
+$prefix = array();
+foreach ($all_fields as $fn) {
+ if (in_array($fn,$required_fields)) {
+ $prefix[$fn] = elgg_echo('event_calendar:required').' ';
+ } else {
+ $prefix[$fn] = elgg_echo('event_calendar:optional').' ';
+ }
+}
+
+if ($event) {
+ $event_action = 'manage_event';
+ $event_guid = $event->guid;
+} else {
+ $event_action = 'add_event';
+ $event_guid = 0;
+}
+
+$title = $fd['title'];
+$brief_description = $fd['description'];
+$venue = $fd['venue'];
+
+$fees = $fd['fees'];
+if ($event_calendar_spots_display) {
+ $spots = $fd['spots'];
+}
+if ($event_calendar_region_display) {
+ $region = $fd['region'];
+}
+if ($event_calendar_type_display) {
+ $event_type = $fd['event_type'];
+}
+$contact = $fd['contact'];
+$organiser = $fd['organiser'];
+$event_tags = $fd['tags'];
+$all_day = $fd['all_day'];
+$schedule_type = $fd['schedule_type'];
+$long_description = $fd['long_description'];
+
+$body = '<div>';
+
+$body .= elgg_view('input/hidden',array('name'=>'event_action', 'value'=>$event_action));
+$body .= elgg_view('input/hidden',array('name'=>'event_guid', 'value'=>$event_guid));
+
+$body .= '<fieldset>';
+$body .= '<legend>' . elgg_echo('event_calendar:basic:header') . '</legend>';
+
+$body .= '<p><label>'.elgg_echo("event_calendar:title_label").'</label>';
+$body .= elgg_view("input/text",array('name' => 'title', 'value' => $title));
+$body .= '</p>';
+$body .= '<p class="event-calendar-description">'.$prefix['title'].elgg_echo('event_calendar:title_description').'</p>';
+
+$body .= '<p><label>'.elgg_echo("event_calendar:venue_label").'</label>';
+$body .= elgg_view("input/text",array('name' => 'venue', 'value' => $venue));
+$body .= '</p>';
+$body .= '<p class="event-calendar-description">'.$prefix['venue'].elgg_echo('event_calendar:venue_description').'</p>';
+
+if ($event_calendar_fewer_fields != 'yes') {
+ $body .= '<p><label>'.elgg_echo("event_calendar:brief_description_label").'</label>';
+ $body .= elgg_view("input/text",array('name' => 'description', 'value' => $brief_description));
+ $body .= '</p>';
+ $body .= '<p class="event-calendar-description">'.$prefix['brief_description'].elgg_echo('event_calendar:brief_description_description').'</p>';
+
+} else {
+ $body .= '<label>'.elgg_echo("event_calendar:long_description_label").'</label>';
+ $body .= elgg_view("input/longtext",array('name' => 'long_description', 'value' => $long_description));
+ $body .= '<p class="event-calendar-description">'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'</p>';
+}
+
+$body .= '<p><label>'.elgg_echo("event_calendar:event_tags_label").'</label>';
+$body .= elgg_view("input/tags",array('name' => 'tags', 'value' => $event_tags));
+$body .= '</p>';
+$body .= '<p class="event-calendar-description">'.$prefix['event_tags'].elgg_echo('event_calendar:event_tags_description').'</p>';
+
+if ($event || !$vars['group_guid']) {
+ $body .= '<p><label>'.elgg_echo("event_calendar:calendar_label").'</label>';
+ $body .= elgg_view('event_calendar/container',array('container_guid'=>$vars['group_guid']));
+ $body .= '</p>';
+ $body .= '<p class="event-calendar-description">'.$prefix['calendar'].elgg_echo('event_calendar:calendar_description').'</p>';
+} else {
+ $body .= elgg_view('input/hidden',array('name'=>'group_guid', 'value'=>$vars['group_guid']));
+}
+
+if($event_calendar_bbb_server_url) {
+ $body .= '<p>';
+ if ($fd['web_conference']) {
+ $body .= elgg_view('input/checkbox',array('name'=>'web_conference','value'=>1,'checked'=>'checked'));
+ } else {
+ $body .= elgg_view('input/checkbox',array('name'=>'web_conference','value'=>1));
+ }
+ $body .= elgg_echo('event_calendar:web_conference_label');
+ $body .= '</p>';
+}
+
+$body .= '</fieldset>';
+
+$body .= '<fieldset>';
+$body .= '<legend>'.elgg_echo('event_calendar:schedule:header').'</legend>';
+$body .= elgg_view('input/radio',array('name'=>'schedule_type','value'=>$schedule_type,'options'=>$schedule_options));
+
+$vars['prefix'] = $prefix;
+
+$body .= elgg_view('event_calendar/schedule_section',$vars);
+
+if ($event_calendar_spots_display == 'yes') {
+ $body .= '<p><label>'.elgg_echo("event_calendar:spots_label").'<br />';
+ $body .= elgg_view("input/text",array('name' => 'spots', 'value' => $spots));
+ $body .= '</label></p>';
+ $body .= '<p class="event-calendar-description">'.$prefix['spots'].elgg_echo('event_calendar:spots_description').'</p>';
+}
+
+$body .= '<div class="event-calendar-edit-bottom"></div>';
+$body .= '</fieldset>';
+
+$body .= elgg_view('event_calendar/personal_manage_section',$vars);
+
+$body .= elgg_view('event_calendar/share_section',$vars);
+
+if ($event_calendar_region_display == 'yes' || $event_calendar_type_display == 'yes' || $event_calendar_fewer_fields != 'yes') {
+ $body .= '<fieldset>';
+
+ if ($event_calendar_region_display == 'yes') {
+ $region_list = trim(elgg_get_plugin_setting('region_list', 'event_calendar'));
+ $region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar');
+ // make sure that we are using Unix line endings
+ $region_list = str_replace("\r\n","\n",$region_list);
+ $region_list = str_replace("\r","\n",$region_list);
+ if ($region_list) {
+ $options = array();
+ $options[] = '-';
+ foreach(explode("\n",$region_list) as $region_item) {
+ $region_item = trim($region_item);
+ if ($region_list_handles == 'yes') {
+ $options[$region_item] = elgg_echo('event_calendar:region:'.$region_item);
+ } else {
+ $options[$region_item] = $region_item;
+ }
+ }
+ $body .= '<p><label>'.elgg_echo("event_calendar:region_label").'</label>';
+ $body .= elgg_view("input/dropdown",array('name' => 'region','value'=>$region,'options_values'=>$options));
+ $body .= '</p>';
+ $body .= '<p class="event-calendar-description">'.$prefix['region'].elgg_echo('event_calendar:region_description').'</p>';
+ }
+ }
+
+ if ($event_calendar_type_display == 'yes') {
+ $type_list = trim(elgg_get_plugin_setting('type_list', 'event_calendar'));
+ $type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar');
+ // make sure that we are using Unix line endings
+ $type_list = str_replace("\r\n","\n",$type_list);
+ $type_list = str_replace("\r","\n",$type_list);
+ if ($type_list) {
+ $options = array();
+ $options[] = '-';
+ foreach(explode("\n",$type_list) as $type_item) {
+ $type_item = trim($type_item);
+ if ($type_list_handles == 'yes') {
+ $options[$type_item] = elgg_echo('event_calendar:type:'.$type_item);
+ } else {
+ $options[$type_item] = $type_item;
+ }
+ }
+ $body .= '<p><label>'.elgg_echo("event_calendar:type_label").'</label>';
+ $body .= elgg_view("input/dropdown",array('name' => 'event_type','value'=>$event_type,'options_values'=>$options));
+ $body .= '</p>';
+ $body .= '<p class="event-calendar-description">'.$prefix['event_type'].elgg_echo('event_calendar:type_description').'</p>';
+ }
+ }
+
+ if ($event_calendar_fewer_fields != 'yes') {
+
+ $body .= '<p><label>'.elgg_echo("event_calendar:fees_label").'</label>';
+ $body .= elgg_view("input/text",array('name' => 'fees', 'value' => $fees));
+ $body .= '</p>';
+ $body .= '<p class="event-calendar-description">'.$prefix['fees'].elgg_echo('event_calendar:fees_description').'</p>';
+
+ $body .= '<p><label>'.elgg_echo("event_calendar:contact_label").'</label>';
+ $body .= elgg_view("input/text",array('name' => 'contact', 'value' => $contact));
+ $body .= '</p>';
+ $body .= '<p class="event-calendar-description">'.$prefix['contact'].elgg_echo('event_calendar:contact_description').'</p>';
+
+ $body .= '<p><label>'.elgg_echo("event_calendar:organiser_label").'</label>';
+ $body .= elgg_view("input/text",array('name' => 'organiser', 'value' => $organiser));
+ $body .= '</p>';
+ $body .= '<p class="event-calendar-description">'.$prefix['organiser'].elgg_echo('event_calendar:organiser_description').'</p>';
+
+ $body .= '<p><label>'.elgg_echo("event_calendar:long_description_label").'</label>';
+ $body .= elgg_view("input/longtext",array('name' => 'long_description', 'value' => $long_description));
+ $body .= '</p>';
+ $body .= '<p class="event-calendar-description">'.$prefix['long_description'].elgg_echo('event_calendar:long_description_description').'</p>';
+ }
+
+ $body .= '</fieldset>';
+}
+
+$body .= elgg_view('input/submit', array('name'=>'submit','value'=>elgg_echo('event_calendar:submit')));
+
+$body .= '</div>';
+
+echo $body;
diff --git a/mod/event_calendar/views/default/forms/event_calendar/manage_subscribers.php b/mod/event_calendar/views/default/forms/event_calendar/manage_subscribers.php
new file mode 100644
index 000000000..8039c5015
--- /dev/null
+++ b/mod/event_calendar/views/default/forms/event_calendar/manage_subscribers.php
@@ -0,0 +1,14 @@
+<?php
+$event = $vars['event'];
+$users = event_calendar_get_users_for_event($event->guid,0);
+$guids = array();
+foreach($users as $user) {
+ $guids[] = $user->guid;
+}
+// TODO: if the event container is a group need to restrict user picker to the members of the group?
+$content = elgg_view('input/userpicker_plus',array('value'=> $guids));
+$content .= '<br /><br />';
+$content .= elgg_view('input/hidden',array('name'=>'event_guid','value'=>$event->guid));
+$content .= elgg_view('input/submit',array('value'=>elgg_echo('submit'),'name'=>'submit_manage_subscribers','id'=>'submit-manage-subscribers'));
+
+echo $content;
diff --git a/mod/event_calendar/views/default/fullcalendar/css.php b/mod/event_calendar/views/default/fullcalendar/css.php
new file mode 100644
index 000000000..04f118493
--- /dev/null
+++ b/mod/event_calendar/views/default/fullcalendar/css.php
@@ -0,0 +1,618 @@
+/*
+ * FullCalendar v1.5.3 Stylesheet
+ *
+ * Copyright (c) 2011 Adam Shaw
+ * Dual licensed under the MIT and GPL licenses, located in
+ * MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
+ *
+ * Date: Mon Feb 6 22:40:40 2012 -0800
+ *
+ */
+
+
+.fc {
+ direction: ltr;
+ text-align: left;
+ }
+
+.fc table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ }
+
+html .fc,
+.fc table {
+ font-size: 1em;
+ }
+
+.fc td,
+.fc th {
+ padding: 0;
+ vertical-align: top;
+ }
+
+
+
+/* Header
+------------------------------------------------------------------------*/
+
+.fc-header td {
+ white-space: nowrap;
+ }
+
+.fc-header-left {
+ width: 25%;
+ text-align: left;
+ }
+
+.fc-header-center {
+ text-align: center;
+ }
+
+.fc-header-right {
+ width: 25%;
+ text-align: right;
+ }
+
+.fc-header-title {
+ display: inline-block;
+ vertical-align: top;
+ }
+
+.fc-header-title h2 {
+ margin-top: 0;
+ white-space: nowrap;
+ }
+
+.fc .fc-header-space {
+ padding-left: 10px;
+ }
+
+.fc-header .fc-button {
+ margin-bottom: 1em;
+ vertical-align: top;
+ }
+
+/* buttons edges butting together */
+
+.fc-header .fc-button {
+ margin-right: -1px;
+ }
+
+.fc-header .fc-corner-right {
+ margin-right: 1px; /* back to normal */
+ }
+
+.fc-header .ui-corner-right {
+ margin-right: 0; /* back to normal */
+ }
+
+/* button layering (for border precedence) */
+
+.fc-header .fc-state-hover,
+.fc-header .ui-state-hover {
+ z-index: 2;
+ }
+
+.fc-header .fc-state-down {
+ z-index: 3;
+ }
+
+.fc-header .fc-state-active,
+.fc-header .ui-state-active {
+ z-index: 4;
+ }
+
+
+
+/* Content
+------------------------------------------------------------------------*/
+
+.fc-content {
+ clear: both;
+ }
+
+.fc-view {
+ width: 100%; /* needed for view switching (when view is absolute) */
+ overflow: hidden;
+ }
+
+
+
+/* Cell Styles
+------------------------------------------------------------------------*/
+
+.fc-widget-header, /* <th>, usually */
+.fc-widget-content { /* <td>, usually */
+ border: 1px solid #ccc;
+ }
+
+.fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */
+ background: #ffc;
+ }
+
+.fc-cell-overlay { /* semi-transparent rectangle while dragging */
+ background: #9cf;
+ opacity: .2;
+ filter: alpha(opacity=20); /* for IE */
+ }
+
+
+
+/* Buttons
+------------------------------------------------------------------------*/
+
+.fc-button {
+ position: relative;
+ display: inline-block;
+ cursor: pointer;
+ }
+
+.fc-state-default { /* non-theme */
+ border-style: solid;
+ border-width: 1px 0;
+ }
+
+.fc-button-inner {
+ position: relative;
+ float: left;
+ overflow: hidden;
+ }
+
+.fc-state-default .fc-button-inner { /* non-theme */
+ border-style: solid;
+ border-width: 0 1px;
+ }
+
+.fc-button-content {
+ position: relative;
+ float: left;
+ height: 1.9em;
+ line-height: 1.9em;
+ padding: 0 .6em;
+ white-space: nowrap;
+ }
+
+/* icon (for jquery ui) */
+
+.fc-button-content .fc-icon-wrap {
+ position: relative;
+ float: left;
+ top: 50%;
+ }
+
+.fc-button-content .ui-icon {
+ position: relative;
+ float: left;
+ margin-top: -50%;
+ *margin-top: 0;
+ *top: -50%;
+ }
+
+/* gloss effect */
+
+.fc-state-default .fc-button-effect {
+ position: absolute;
+ top: 50%;
+ left: 0;
+ }
+
+.fc-state-default .fc-button-effect span {
+ position: absolute;
+ top: -100px;
+ left: 0;
+ width: 500px;
+ height: 100px;
+ border-width: 100px 0 0 1px;
+ border-style: solid;
+ border-color: #fff;
+ background: #444;
+ opacity: .09;
+ filter: alpha(opacity=9);
+ }
+
+/* button states (determines colors) */
+
+.fc-state-default,
+.fc-state-default .fc-button-inner {
+ border-style: solid;
+ border-color: #ccc #bbb #aaa;
+ background: #F3F3F3;
+ color: #000;
+ }
+
+.fc-state-hover,
+.fc-state-hover .fc-button-inner {
+ border-color: #999;
+ }
+
+.fc-state-down,
+.fc-state-down .fc-button-inner {
+ border-color: #555;
+ background: #777;
+ }
+
+.fc-state-active,
+.fc-state-active .fc-button-inner {
+ border-color: #555;
+ background: #777;
+ color: #fff;
+ }
+
+.fc-state-disabled,
+.fc-state-disabled .fc-button-inner {
+ color: #999;
+ border-color: #ddd;
+ }
+
+.fc-state-disabled {
+ cursor: default;
+ }
+
+.fc-state-disabled .fc-button-effect {
+ display: none;
+ }
+
+
+
+/* Global Event Styles
+------------------------------------------------------------------------*/
+
+.fc-event {
+ border-style: solid;
+ border-width: 0;
+ font-size: .85em;
+ cursor: default;
+ }
+
+a.fc-event,
+.fc-event-draggable {
+ cursor: pointer;
+ }
+
+a.fc-event {
+ text-decoration: none;
+ }
+
+.fc-rtl .fc-event {
+ text-align: right;
+ }
+
+.fc-event-skin {
+ border-color: #36c; /* default BORDER color */
+ background-color: #36c; /* default BACKGROUND color */
+ color: #fff; /* default TEXT color */
+ }
+
+.fc-event-inner {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ border-style: solid;
+ border-width: 0;
+ overflow: hidden;
+ }
+
+.fc-event-time,
+.fc-event-title {
+ padding: 0 1px;
+ }
+
+.fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anymore, change class ***/
+ display: block;
+ position: absolute;
+ z-index: 99999;
+ overflow: hidden; /* hacky spaces (IE6/7) */
+ font-size: 300%; /* */
+ line-height: 50%; /* */
+ }
+
+
+
+/* Horizontal Events
+------------------------------------------------------------------------*/
+
+.fc-event-hori {
+ border-width: 1px 0;
+ margin-bottom: 1px;
+ }
+
+/* resizable */
+
+.fc-event-hori .ui-resizable-e {
+ top: 0 !important; /* importants override pre jquery ui 1.7 styles */
+ right: -3px !important;
+ width: 7px !important;
+ height: 100% !important;
+ cursor: e-resize;
+ }
+
+.fc-event-hori .ui-resizable-w {
+ top: 0 !important;
+ left: -3px !important;
+ width: 7px !important;
+ height: 100% !important;
+ cursor: w-resize;
+ }
+
+.fc-event-hori .ui-resizable-handle {
+ _padding-bottom: 14px; /* IE6 had 0 height */
+ }
+
+
+
+/* Fake Rounded Corners (for buttons and events)
+------------------------------------------------------------*/
+
+.fc-corner-left {
+ margin-left: 1px;
+ }
+
+.fc-corner-left .fc-button-inner,
+.fc-corner-left .fc-event-inner {
+ margin-left: -1px;
+ }
+
+.fc-corner-right {
+ margin-right: 1px;
+ }
+
+.fc-corner-right .fc-button-inner,
+.fc-corner-right .fc-event-inner {
+ margin-right: -1px;
+ }
+
+.fc-corner-top {
+ margin-top: 1px;
+ }
+
+.fc-corner-top .fc-event-inner {
+ margin-top: -1px;
+ }
+
+.fc-corner-bottom {
+ margin-bottom: 1px;
+ }
+
+.fc-corner-bottom .fc-event-inner {
+ margin-bottom: -1px;
+ }
+
+
+
+/* Fake Rounded Corners SPECIFICALLY FOR EVENTS
+-----------------------------------------------------------------*/
+
+.fc-corner-left .fc-event-inner {
+ border-left-width: 1px;
+ }
+
+.fc-corner-right .fc-event-inner {
+ border-right-width: 1px;
+ }
+
+.fc-corner-top .fc-event-inner {
+ border-top-width: 1px;
+ }
+
+.fc-corner-bottom .fc-event-inner {
+ border-bottom-width: 1px;
+ }
+
+
+
+/* Reusable Separate-border Table
+------------------------------------------------------------*/
+
+table.fc-border-separate {
+ border-collapse: separate;
+ }
+
+.fc-border-separate th,
+.fc-border-separate td {
+ border-width: 1px 0 0 1px;
+ }
+
+.fc-border-separate th.fc-last,
+.fc-border-separate td.fc-last {
+ border-right-width: 1px;
+ }
+
+.fc-border-separate tr.fc-last th,
+.fc-border-separate tr.fc-last td {
+ border-bottom-width: 1px;
+ }
+
+.fc-border-separate tbody tr.fc-first td,
+.fc-border-separate tbody tr.fc-first th {
+ border-top-width: 0;
+ }
+
+
+
+/* Month View, Basic Week View, Basic Day View
+------------------------------------------------------------------------*/
+
+.fc-grid th {
+ text-align: center;
+ }
+
+.fc-grid .fc-day-number {
+ float: right;
+ padding: 0 2px;
+ }
+
+.fc-grid .fc-other-month .fc-day-number {
+ opacity: 0.3;
+ filter: alpha(opacity=30); /* for IE */
+ /* opacity with small font can sometimes look too faded
+ might want to set the 'color' property instead
+ making day-numbers bold also fixes the problem */
+ }
+
+.fc-grid .fc-day-content {
+ clear: both;
+ padding: 2px 2px 1px; /* distance between events and day edges */
+ }
+
+/* event styles */
+
+.fc-grid .fc-event-time {
+ font-weight: bold;
+ }
+
+/* right-to-left */
+
+.fc-rtl .fc-grid .fc-day-number {
+ float: left;
+ }
+
+.fc-rtl .fc-grid .fc-event-time {
+ float: right;
+ }
+
+
+
+/* Agenda Week View, Agenda Day View
+------------------------------------------------------------------------*/
+
+.fc-agenda table {
+ border-collapse: separate;
+ }
+
+.fc-agenda-days th {
+ text-align: center;
+ }
+
+.fc-agenda .fc-agenda-axis {
+ width: 50px;
+ padding: 0 4px;
+ vertical-align: middle;
+ text-align: right;
+ white-space: nowrap;
+ font-weight: normal;
+ }
+
+.fc-agenda .fc-day-content {
+ padding: 2px 2px 1px;
+ }
+
+/* make axis border take precedence */
+
+.fc-agenda-days .fc-agenda-axis {
+ border-right-width: 1px;
+ }
+
+.fc-agenda-days .fc-col0 {
+ border-left-width: 0;
+ }
+
+/* all-day area */
+
+.fc-agenda-allday th {
+ border-width: 0 1px;
+ }
+
+.fc-agenda-allday .fc-day-content {
+ min-height: 34px; /* TODO: doesnt work well in quirksmode */
+ _height: 34px;
+ }
+
+/* divider (between all-day and slots) */
+
+.fc-agenda-divider-inner {
+ height: 2px;
+ overflow: hidden;
+ }
+
+.fc-widget-header .fc-agenda-divider-inner {
+ background: #eee;
+ }
+
+/* slot rows */
+
+.fc-agenda-slots th {
+ border-width: 1px 1px 0;
+ }
+
+.fc-agenda-slots td {
+ border-width: 1px 0 0;
+ background: none;
+ }
+
+.fc-agenda-slots td div {
+ height: 20px;
+ }
+
+.fc-agenda-slots tr.fc-slot0 th,
+.fc-agenda-slots tr.fc-slot0 td {
+ border-top-width: 0;
+ }
+
+.fc-agenda-slots tr.fc-minor th,
+.fc-agenda-slots tr.fc-minor td {
+ border-top-style: dotted;
+ }
+
+.fc-agenda-slots tr.fc-minor th.ui-widget-header {
+ *border-top-style: solid; /* doesn't work with background in IE6/7 */
+ }
+
+
+
+/* Vertical Events
+------------------------------------------------------------------------*/
+
+.fc-event-vert {
+ border-width: 0 1px;
+ }
+
+.fc-event-vert .fc-event-head,
+.fc-event-vert .fc-event-content {
+ position: relative;
+ z-index: 2;
+ width: 100%;
+ overflow: hidden;
+ }
+
+.fc-event-vert .fc-event-time {
+ white-space: nowrap;
+ font-size: 10px;
+ }
+
+.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */
+ position: absolute;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: #fff;
+ opacity: .3;
+ filter: alpha(opacity=30);
+ }
+
+.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */
+.fc-select-helper .fc-event-bg {
+ display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */
+ }
+
+/* resizable */
+
+.fc-event-vert .ui-resizable-s {
+ bottom: 0 !important; /* importants override pre jquery ui 1.7 styles */
+ width: 100% !important;
+ height: 8px !important;
+ overflow: hidden !important;
+ line-height: 8px !important;
+ font-size: 11px !important;
+ font-family: monospace;
+ text-align: center;
+ cursor: s-resize;
+ }
+
+.fc-agenda .ui-resizable-resizing { /* TODO: better selector */
+ _overflow: hidden;
+ }
+
+
diff --git a/mod/event_calendar/views/default/fullcalendar/fullcalendar.print.css b/mod/event_calendar/views/default/fullcalendar/fullcalendar.print.css
new file mode 100644
index 000000000..e11c18163
--- /dev/null
+++ b/mod/event_calendar/views/default/fullcalendar/fullcalendar.print.css
@@ -0,0 +1,61 @@
+/*
+ * FullCalendar v1.5.3 Print Stylesheet
+ *
+ * Include this stylesheet on your page to get a more printer-friendly calendar.
+ * When including this stylesheet, use the media='print' attribute of the <link> tag.
+ * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css.
+ *
+ * Copyright (c) 2011 Adam Shaw
+ * Dual licensed under the MIT and GPL licenses, located in
+ * MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
+ *
+ * Date: Mon Feb 6 22:40:40 2012 -0800
+ *
+ */
+
+
+ /* Events
+-----------------------------------------------------*/
+
+.fc-event-skin {
+ background: none !important;
+ color: #000 !important;
+ }
+
+/* horizontal events */
+
+.fc-event-hori {
+ border-width: 0 0 1px 0 !important;
+ border-bottom-style: dotted !important;
+ border-bottom-color: #000 !important;
+ padding: 1px 0 0 0 !important;
+ }
+
+.fc-event-hori .fc-event-inner {
+ border-width: 0 !important;
+ padding: 0 1px !important;
+ }
+
+/* vertical events */
+
+.fc-event-vert {
+ border-width: 0 0 0 1px !important;
+ border-left-style: dotted !important;
+ border-left-color: #000 !important;
+ padding: 0 1px 0 0 !important;
+ }
+
+.fc-event-vert .fc-event-inner {
+ border-width: 0 !important;
+ padding: 1px 0 !important;
+ }
+
+.fc-event-bg {
+ display: none !important;
+ }
+
+.fc-event .ui-resizable-handle {
+ display: none !important;
+ }
+
+
diff --git a/mod/event_calendar/views/default/icon/object/event_calendar/small.php b/mod/event_calendar/views/default/icon/object/event_calendar/small.php
new file mode 100644
index 000000000..d30d14453
--- /dev/null
+++ b/mod/event_calendar/views/default/icon/object/event_calendar/small.php
@@ -0,0 +1,3 @@
+<?php
+ echo $vars['url'] . "mod/event_calendar/images/event_icon.gif";
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/input/datepicker_inline.php b/mod/event_calendar/views/default/input/datepicker_inline.php
new file mode 100644
index 000000000..3fd9c37af
--- /dev/null
+++ b/mod/event_calendar/views/default/input/datepicker_inline.php
@@ -0,0 +1,83 @@
+<?php
+
+/**
+ * JQuery data picker(inline version)
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2008 -2011
+ * @link http://radagast.biz/
+ *
+ */
+if ($vars['group_guid']) {
+ $link_bit = $vars['url']."event_calendar/group/{$vars['group_guid']}/%s/{$vars['mode']}";
+} else {
+ $link_bit = $vars['url']."event_calendar/list/%s/{$vars['mode']}/{$vars['filter']}";
+}
+
+if ($vars['mode'] == 'week') {
+ $selected_week = date('W',strtotime($vars['start_date'].' UTC'))+1;
+} else {
+ $selected_week = '';
+}
+
+if ($vars['mode']) {
+ $wrapper_class = "event-calendar-filter-period-".$vars['mode'];
+} else {
+ $wrapper_class = "event-calendar-filter-period-month";
+}
+// TODO - figure out how to move this JavaScript
+?>
+
+<script language="javascript">
+var selectedWeek = "<?php echo $selected_week; ?>";
+highlightWeek = function(d) {
+ if (!selectedWeek) { return [true,''];}
+ //var date = $(this).datepicker('getDate');
+ var dayOfWeek = d.getUTCDay();
+ var weekNumber = $.datepicker.iso8601Week(d);
+ if (dayOfWeek == 6) {
+ weekNumber += 1;
+ }
+
+ if (selectedWeek == weekNumber) {
+ return [true,'week-highlight'];
+ }
+ return [true,''];
+}
+$(document).ready(function(){
+var done_loading = false;
+$("#<?php echo $vars['name']; ?>").datepicker({
+ onChangeMonthYear: function(year, month, inst) {
+ if(inst.onChangeToday){
+ day=inst.selectedDay;
+ }else{
+ day=1;
+ }
+ if (done_loading) {
+ // in this case the mode is forced to month
+ document.location.href = "<?php echo $link_bit; ?>".replace('%s', year+'-'+month+'-1');
+ }
+ },
+ onSelect: function(date) {
+ // jump to the new page
+ document.location.href = "<?php echo $link_bit; ?>".replace('%s', date.substring(0,10));
+ },
+ dateFormat: "yy-mm-dd",
+ defaultDate: "<?php echo $vars['start_date'] .' - '.$vars['end_date']; ?>",
+ beforeShowDay: highlightWeek
+});
+var start_date = $.datepicker.parseDate("yy-mm-dd", "<?php echo $vars['start_date']; ?>");
+var end_date = $.datepicker.parseDate("yy-mm-dd", "<?php echo $vars['end_date']; ?>");
+// not sure why this is necessary, but it seems to be
+if ("<?php echo $vars['mode'] ?>" == "month") {
+ end_date += 1;
+}
+$("#<?php echo $vars['name']; ?>").datepicker("setDate", start_date, end_date);
+done_loading = true;
+});
+
+</script>
+<div style="position:relative;" id="<?php echo $vars['name']; ?>" class="<?php echo $wrapper_class; ?>" ></div>
+<p style="clear: both;"><!-- See day-by-day example for highlighting days code --></p> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/input/timepicker.php b/mod/event_calendar/views/default/input/timepicker.php
new file mode 100644
index 000000000..2cc95ced7
--- /dev/null
+++ b/mod/event_calendar/views/default/input/timepicker.php
@@ -0,0 +1,51 @@
+<?php
+$time_format = elgg_get_plugin_setting('timeformat', 'event_calendar');
+if (!$time_format) {
+ $time_format = '24';
+}
+
+$value = $vars['value'];
+if (is_numeric($value)) {
+ $hour = floor($value/60);
+ $minute = ($value -60*$hour);
+} else {
+ $hour = 0;
+ $minute = 0;
+}
+
+$hours = array();
+$minutes = array();
+
+if ($time_format == '12') {
+ $meridians = array('am'=>'am','pm'=>'pm');
+ if ($hour == 0) {
+ $hour = 12;
+ $meridian = 'am';
+ } else if ($hour == 12) {
+ $meridian = 'pm';
+ } else if ($hour < 12) {
+ $meridian = 'am';
+ } else {
+ $hour -= 12;
+ $meridian = 'pm';
+ }
+ for($h=1;$h<=12;$h++) {
+ $hours[$h] = $h;
+ }
+} else {
+ for($h=0;$h<=23;$h++) {
+ $hours[$h] = $h;
+ }
+}
+
+for($m=0;$m<60;$m=$m+5) {
+ $mt = sprintf("%02d",$m);
+ $minutes[$m] = $mt;
+}
+
+echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_hour','value'=>$hour,'options_values'=>$hours));
+echo " <b>:</b> ";
+echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_minute','value'=>$minute,'options_values'=>$minutes));
+if ($time_format == '12') {
+ echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_meridian','value'=>$meridian,'options_values'=>$meridians));
+}
diff --git a/mod/event_calendar/views/default/input/timepicker_old.php b/mod/event_calendar/views/default/input/timepicker_old.php
new file mode 100644
index 000000000..1d2156cda
--- /dev/null
+++ b/mod/event_calendar/views/default/input/timepicker_old.php
@@ -0,0 +1,38 @@
+<?php
+
+$time_format = elgg_get_plugin_setting('timeformat', 'event_calendar');
+if (!$time_format) {
+ $time_format = 24;
+}
+
+$value = $vars['value'];
+if (is_numeric($value)) {
+ $hour = floor($value/60);
+ $minute = ($value -60*$hour);
+
+ // add 1 to avoid pulldown 0 bug
+ $hour++;
+ $minute++;
+} else {
+ $hour = '-';
+ $minute = '-';
+}
+
+$hours = array();
+$hours['-'] = '-';
+
+for($i=0;$i<$time_format;$i++) {
+ $hours[$i+1] = $i;
+}
+
+$minutes = array();
+$minutes['-'] = '-';
+
+for($i=0;$i<60;$i=$i+15) {
+ $minutes[$i+1] = sprintf("%02d",$i);
+}
+
+echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_h','value'=>$hour,'options_values'=>$hours));
+echo elgg_view('input/dropdown',array('name'=>$vars['name'].'_m','value'=>$minute,'options_values'=>$minutes));
+
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/js/event_calendar/event_calendar.php b/mod/event_calendar/views/default/js/event_calendar/event_calendar.php
new file mode 100644
index 000000000..efa1dc1dd
--- /dev/null
+++ b/mod/event_calendar/views/default/js/event_calendar/event_calendar.php
@@ -0,0 +1,171 @@
+//<script type="text/javascript">
+elgg.provide('elgg.event_calendar');
+
+elgg.event_calendar.init = function () {
+ $('.event_calendar_paged_checkbox').click(elgg.event_calendar.handlePagedPersonalCalendarToggle);
+ $('.event-calendar-personal-calendar-toggle').click(elgg.event_calendar.handleDisplayPagePersonalCalendarToggle);
+ $('#event-calendar-region').change(elgg.event_calendar.handleRegionChange);
+ $('#event-calendar-ical-link').click(elgg.event_calendar.handleIcalPopup);
+ $('.event-calendar-repeating-unselected').each(elgg.event_calendar.setRepeatingClass);
+ $('.event-calendar-repeating-unselected').live('click',elgg.event_calendar.handleRepeatingSelect);
+ $('.event-calendar-repeating-selected').live('click',elgg.event_calendar.handleRepeatingUnselect);
+ $('#event-calendar-edit').submit(elgg.event_calendar.handleEditFormSubmit);
+ $('input.elgg-input-radio[name="schedule_type"]').click(elgg.event_calendar.handleScheduleType);
+ elgg.event_calendar.handleScheduleType();
+
+ var all_day_field = $('[name="all_day"][type="checkbox"]');
+ if (all_day_field.is(':checked')) {
+ //$('[name="start_time"]').val(0);
+ $('#event-calendar-start-time-wrapper').attr('disabled','disabled');
+ //$('[name="end_time"]').val(0);
+ $('#event-calendar-end-time-wrapper').attr('disabled','disabled');
+ }
+ all_day_field.change(elgg.event_calendar.handleAllDayField);
+
+ $('.elgg-input-date[name="start_date"], .elgg-input-date[name="end_date"]').datepicker({
+ dateFormat: 'yy-mm-dd',
+ numberOfMonths: 3,
+ onSelect: elgg.event_calendar.handleDateRangeSelect,
+ });
+}
+
+elgg.event_calendar.handleScheduleType = function(e) {
+ var st = $('input.elgg-input-radio[name="schedule_type"]:checked').val();
+ if (st == 'poll') {
+ $(".event-calendar-edit-date-wrapper").hide();
+ $(".event-calendar-edit-reminder-wrapper").hide();
+ $(".event-calendar-edit-form-membership-block").hide();
+ $(".event-calendar-edit-form-share-block").hide();
+ } else {
+ $(".event-calendar-edit-date-wrapper").show();
+ $(".event-calendar-edit-reminder-wrapper").show();
+ $(".event-calendar-edit-form-membership-block").show();
+ $(".event-calendar-edit-form-share-block").show();
+ if (st == 'all_day') {
+ $("#event-calendar-start-time-wrapper").hide();
+ $("#event-calendar-end-time-wrapper").hide();
+ } else {
+ $("#event-calendar-start-time-wrapper").show();
+ $("#event-calendar-end-time-wrapper").show();
+ }
+ }
+}
+
+elgg.event_calendar.handleAllDayField = function(e) {
+ var field = $('[name="start_time"]');
+ if (field.attr('disabled') == 'disabled') {
+ field.removeAttr('disabled');
+ } else {
+ field.attr('disabled','disabled');
+ }
+
+ field = $('[name="end_time"]');
+ if (field.attr('disabled') == 'disabled') {
+ field.removeAttr('disabled');
+ } else {
+ field.attr('disabled','disabled');
+ }
+}
+
+elgg.event_calendar.handleDateRangeSelect = function(selectedDate) {
+ if (this.name == 'start_date') {
+ $('.elgg-input-date[name="end_date"]').datepicker("option", "minDate", selectedDate);
+ } else {
+ $('.elgg-input-date[name="start_date"]').datepicker("option", "maxDate", selectedDate);
+ }
+}
+
+elgg.event_calendar.handleEditFormSubmit = function(e) {
+ if ($.trim($('[name="title"]').val()) == '') {
+ alert(elgg.echo('event_calendar:edit_form:error:missing_title'));
+ e.preventDefault();
+ }
+}
+
+elgg.event_calendar.setRepeatingClass = function(e) {
+ var id = $(this).attr('id');
+ if ($("[name='"+id+"-value']").val() == 1) {
+ $(this).removeClass('event-calendar-repeating-unselected');
+ $(this).addClass('event-calendar-repeating-selected');
+ }
+}
+
+elgg.event_calendar.handleRepeatingSelect = function(e) {
+ $(this).removeClass('event-calendar-repeating-unselected');
+ $(this).addClass('event-calendar-repeating-selected');
+ var id = $(this).attr('id');
+ $("[name='"+id+"-value']").val(1);
+}
+
+elgg.event_calendar.handleRepeatingUnselect = function(e) {
+ $(this).removeClass('event-calendar-repeating-selected');
+ $(this).addClass('event-calendar-repeating-unselected');
+ var id = $(this).attr('id');
+ $("[name='"+id+"-value']").val(0);
+}
+
+elgg.event_calendar.handleRegionChange = function(e) {
+ url = $('#event-calendar-region-url-start').val()+"/"+escape($('#event-calendar-region').val());
+ elgg.forward(url);
+}
+
+elgg.event_calendar.handleIcalPopup = function(e) {
+ this.href = '#event-calendar-ical';
+ e.preventDefault();
+}
+
+elgg.event_calendar.handlePagedPersonalCalendarToggle = function() {
+ guid = parseInt($(this).attr('id').substring('event_calendar_paged_checkbox_'.length));
+ elgg.event_calendar.togglePagedPersonalCalendar(guid);
+}
+elgg.event_calendar.togglePagedPersonalCalendar = function(guid) {
+ elgg.action('event_calendar/toggle_personal_calendar',
+ {
+ data: {event_guid: guid},
+ success: function (res) {
+ var success = res.success;
+ var msg = res.message;
+ if (success) {
+ elgg.system_message(msg,2000);
+ } else {
+ elgg.register_error(msg,2000);
+ }
+ //$('#event_calendar_paged_messages').html(msg);
+ if (!success) {
+ // action failed so toggle checkbox
+ $("#event_calendar_paged_checkbox_"+guid).attr('checked',!$("#event_calendar_paged_checkbox_"+guid).attr('checked'));
+ }
+ }
+ }
+ );
+}
+
+elgg.event_calendar.handleDisplayPagePersonalCalendarToggle = function() {
+ var guidBit = $(this).attr('id').substring('event_calendar_user_data_'.length);
+ var guids = guidBit.split('_');
+ var event_guid = parseInt(guids[0]);
+ var user_guid = parseInt(guids[1]);
+ elgg.event_calendar.toggleDisplayPagePersonalCalendar(event_guid,user_guid);
+}
+
+elgg.event_calendar.toggleDisplayPagePersonalCalendar = function(event_guid,user_guid) {
+ elgg.action('event_calendar/toggle_personal_calendar',
+ {
+ data: {event_guid: event_guid,user_guid: user_guid, other: 'yes'},
+ success: function (res) {
+ var success = res.success;
+ var msg = res.message;
+ if (success) {
+ var button_text = res.button_text;
+ $('#event_calendar_user_data_'+event_guid+'_'+user_guid).val(button_text);
+ //elgg.system_message(msg,2000);
+ } else {
+ elgg.register_error(msg,2000);
+ }
+ }
+ }
+ );
+}
+
+elgg.register_hook_handler('init', 'system', elgg.event_calendar.init);
+//</script> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/js/event_calendar/fullcalendar.min.js b/mod/event_calendar/views/default/js/event_calendar/fullcalendar.min.js
new file mode 100644
index 000000000..df37bdfd8
--- /dev/null
+++ b/mod/event_calendar/views/default/js/event_calendar/fullcalendar.min.js
@@ -0,0 +1,114 @@
+/*
+
+ FullCalendar v1.5.3
+ http://arshaw.com/fullcalendar/
+
+ Use fullcalendar.css for basic styling.
+ For event drag & drop, requires jQuery UI draggable.
+ For event resizing, requires jQuery UI resizable.
+
+ Copyright (c) 2011 Adam Shaw
+ Dual licensed under the MIT and GPL licenses, located in
+ MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
+
+ Date: Mon Feb 6 22:40:40 2012 -0800
+
+*/
+(function(m,ma){function wb(a){m.extend(true,Ya,a)}function Yb(a,b,e){function d(k){if(E){u();q();na();S(k)}else f()}function f(){B=b.theme?"ui":"fc";a.addClass("fc");b.isRTL&&a.addClass("fc-rtl");b.theme&&a.addClass("ui-widget");E=m("<div class='fc-content' style='position:relative'/>").prependTo(a);C=new Zb(X,b);(P=C.render())&&a.prepend(P);y(b.defaultView);m(window).resize(oa);t()||g()}function g(){setTimeout(function(){!n.start&&t()&&S()},0)}function l(){m(window).unbind("resize",oa);C.destroy();
+E.remove();a.removeClass("fc fc-rtl ui-widget")}function j(){return i.offsetWidth!==0}function t(){return m("body")[0].offsetWidth!==0}function y(k){if(!n||k!=n.name){F++;pa();var D=n,Z;if(D){(D.beforeHide||xb)();Za(E,E.height());D.element.hide()}else Za(E,1);E.css("overflow","hidden");if(n=Y[k])n.element.show();else n=Y[k]=new Ja[k](Z=s=m("<div class='fc-view fc-view-"+k+"' style='position:absolute'/>").appendTo(E),X);D&&C.deactivateButton(D.name);C.activateButton(k);S();E.css("overflow","");D&&
+Za(E,1);Z||(n.afterShow||xb)();F--}}function S(k){if(j()){F++;pa();o===ma&&u();var D=false;if(!n.start||k||r<n.start||r>=n.end){n.render(r,k||0);fa(true);D=true}else if(n.sizeDirty){n.clearEvents();fa();D=true}else if(n.eventsDirty){n.clearEvents();D=true}n.sizeDirty=false;n.eventsDirty=false;ga(D);W=a.outerWidth();C.updateTitle(n.title);k=new Date;k>=n.start&&k<n.end?C.disableButton("today"):C.enableButton("today");F--;n.trigger("viewDisplay",i)}}function Q(){q();if(j()){u();fa();pa();n.clearEvents();
+n.renderEvents(J);n.sizeDirty=false}}function q(){m.each(Y,function(k,D){D.sizeDirty=true})}function u(){o=b.contentHeight?b.contentHeight:b.height?b.height-(P?P.height():0)-Sa(E):Math.round(E.width()/Math.max(b.aspectRatio,0.5))}function fa(k){F++;n.setHeight(o,k);if(s){s.css("position","relative");s=null}n.setWidth(E.width(),k);F--}function oa(){if(!F)if(n.start){var k=++v;setTimeout(function(){if(k==v&&!F&&j())if(W!=(W=a.outerWidth())){F++;Q();n.trigger("windowResize",i);F--}},200)}else g()}function ga(k){if(!b.lazyFetching||
+ya(n.visStart,n.visEnd))ra();else k&&da()}function ra(){K(n.visStart,n.visEnd)}function sa(k){J=k;da()}function ha(k){da(k)}function da(k){na();if(j()){n.clearEvents();n.renderEvents(J,k);n.eventsDirty=false}}function na(){m.each(Y,function(k,D){D.eventsDirty=true})}function ua(k,D,Z){n.select(k,D,Z===ma?true:Z)}function pa(){n&&n.unselect()}function U(){S(-1)}function ca(){S(1)}function ka(){gb(r,-1);S()}function qa(){gb(r,1);S()}function G(){r=new Date;S()}function p(k,D,Z){if(k instanceof Date)r=
+N(k);else yb(r,k,D,Z);S()}function L(k,D,Z){k!==ma&&gb(r,k);D!==ma&&hb(r,D);Z!==ma&&ba(r,Z);S()}function c(){return N(r)}function z(){return n}function H(k,D){if(D===ma)return b[k];if(k=="height"||k=="contentHeight"||k=="aspectRatio"){b[k]=D;Q()}}function T(k,D){if(b[k])return b[k].apply(D||i,Array.prototype.slice.call(arguments,2))}var X=this;X.options=b;X.render=d;X.destroy=l;X.refetchEvents=ra;X.reportEvents=sa;X.reportEventChange=ha;X.rerenderEvents=da;X.changeView=y;X.select=ua;X.unselect=pa;
+X.prev=U;X.next=ca;X.prevYear=ka;X.nextYear=qa;X.today=G;X.gotoDate=p;X.incrementDate=L;X.formatDate=function(k,D){return Oa(k,D,b)};X.formatDates=function(k,D,Z){return ib(k,D,Z,b)};X.getDate=c;X.getView=z;X.option=H;X.trigger=T;$b.call(X,b,e);var ya=X.isFetchNeeded,K=X.fetchEvents,i=a[0],C,P,E,B,n,Y={},W,o,s,v=0,F=0,r=new Date,J=[],M;yb(r,b.year,b.month,b.date);b.droppable&&m(document).bind("dragstart",function(k,D){var Z=k.target,ja=m(Z);if(!ja.parents(".fc").length){var ia=b.dropAccept;if(m.isFunction(ia)?
+ia.call(Z,ja):ja.is(ia)){M=Z;n.dragStart(M,k,D)}}}).bind("dragstop",function(k,D){if(M){n.dragStop(M,k,D);M=null}})}function Zb(a,b){function e(){q=b.theme?"ui":"fc";if(b.header)return Q=m("<table class='fc-header' style='width:100%'/>").append(m("<tr/>").append(f("left")).append(f("center")).append(f("right")))}function d(){Q.remove()}function f(u){var fa=m("<td class='fc-header-"+u+"'/>");(u=b.header[u])&&m.each(u.split(" "),function(oa){oa>0&&fa.append("<span class='fc-header-space'/>");var ga;
+m.each(this.split(","),function(ra,sa){if(sa=="title"){fa.append("<span class='fc-header-title'><h2>&nbsp;</h2></span>");ga&&ga.addClass(q+"-corner-right");ga=null}else{var ha;if(a[sa])ha=a[sa];else if(Ja[sa])ha=function(){na.removeClass(q+"-state-hover");a.changeView(sa)};if(ha){ra=b.theme?jb(b.buttonIcons,sa):null;var da=jb(b.buttonText,sa),na=m("<span class='fc-button fc-button-"+sa+" "+q+"-state-default'><span class='fc-button-inner'><span class='fc-button-content'>"+(ra?"<span class='fc-icon-wrap'><span class='ui-icon ui-icon-"+
+ra+"'/></span>":da)+"</span><span class='fc-button-effect'><span></span></span></span></span>");if(na){na.click(function(){na.hasClass(q+"-state-disabled")||ha()}).mousedown(function(){na.not("."+q+"-state-active").not("."+q+"-state-disabled").addClass(q+"-state-down")}).mouseup(function(){na.removeClass(q+"-state-down")}).hover(function(){na.not("."+q+"-state-active").not("."+q+"-state-disabled").addClass(q+"-state-hover")},function(){na.removeClass(q+"-state-hover").removeClass(q+"-state-down")}).appendTo(fa);
+ga||na.addClass(q+"-corner-left");ga=na}}}});ga&&ga.addClass(q+"-corner-right")});return fa}function g(u){Q.find("h2").html(u)}function l(u){Q.find("span.fc-button-"+u).addClass(q+"-state-active")}function j(u){Q.find("span.fc-button-"+u).removeClass(q+"-state-active")}function t(u){Q.find("span.fc-button-"+u).addClass(q+"-state-disabled")}function y(u){Q.find("span.fc-button-"+u).removeClass(q+"-state-disabled")}var S=this;S.render=e;S.destroy=d;S.updateTitle=g;S.activateButton=l;S.deactivateButton=
+j;S.disableButton=t;S.enableButton=y;var Q=m([]),q}function $b(a,b){function e(c,z){return!ca||c<ca||z>ka}function d(c,z){ca=c;ka=z;L=[];c=++qa;G=z=U.length;for(var H=0;H<z;H++)f(U[H],c)}function f(c,z){g(c,function(H){if(z==qa){if(H){for(var T=0;T<H.length;T++){H[T].source=c;oa(H[T])}L=L.concat(H)}G--;G||ua(L)}})}function g(c,z){var H,T=Aa.sourceFetchers,X;for(H=0;H<T.length;H++){X=T[H](c,ca,ka,z);if(X===true)return;else if(typeof X=="object"){g(X,z);return}}if(H=c.events)if(m.isFunction(H)){u();
+H(N(ca),N(ka),function(C){z(C);fa()})}else m.isArray(H)?z(H):z();else if(c.url){var ya=c.success,K=c.error,i=c.complete;H=m.extend({},c.data||{});T=Ta(c.startParam,a.startParam);X=Ta(c.endParam,a.endParam);if(T)H[T]=Math.round(+ca/1E3);if(X)H[X]=Math.round(+ka/1E3);u();m.ajax(m.extend({},ac,c,{data:H,success:function(C){C=C||[];var P=$a(ya,this,arguments);if(m.isArray(P))C=P;z(C)},error:function(){$a(K,this,arguments);z()},complete:function(){$a(i,this,arguments);fa()}}))}else z()}function l(c){if(c=
+j(c)){G++;f(c,qa)}}function j(c){if(m.isFunction(c)||m.isArray(c))c={events:c};else if(typeof c=="string")c={url:c};if(typeof c=="object"){ga(c);U.push(c);return c}}function t(c){U=m.grep(U,function(z){return!ra(z,c)});L=m.grep(L,function(z){return!ra(z.source,c)});ua(L)}function y(c){var z,H=L.length,T,X=na().defaultEventEnd,ya=c.start-c._start,K=c.end?c.end-(c._end||X(c)):0;for(z=0;z<H;z++){T=L[z];if(T._id==c._id&&T!=c){T.start=new Date(+T.start+ya);T.end=c.end?T.end?new Date(+T.end+K):new Date(+X(T)+
+K):null;T.title=c.title;T.url=c.url;T.allDay=c.allDay;T.className=c.className;T.editable=c.editable;T.color=c.color;T.backgroudColor=c.backgroudColor;T.borderColor=c.borderColor;T.textColor=c.textColor;oa(T)}}oa(c);ua(L)}function S(c,z){oa(c);if(!c.source){if(z){pa.events.push(c);c.source=pa}L.push(c)}ua(L)}function Q(c){if(c){if(!m.isFunction(c)){var z=c+"";c=function(T){return T._id==z}}L=m.grep(L,c,true);for(H=0;H<U.length;H++)if(m.isArray(U[H].events))U[H].events=m.grep(U[H].events,c,true)}else{L=
+[];for(var H=0;H<U.length;H++)if(m.isArray(U[H].events))U[H].events=[]}ua(L)}function q(c){if(m.isFunction(c))return m.grep(L,c);else if(c){c+="";return m.grep(L,function(z){return z._id==c})}return L}function u(){p++||da("loading",null,true)}function fa(){--p||da("loading",null,false)}function oa(c){var z=c.source||{},H=Ta(z.ignoreTimezone,a.ignoreTimezone);c._id=c._id||(c.id===ma?"_fc"+bc++:c.id+"");if(c.date){if(!c.start)c.start=c.date;delete c.date}c._start=N(c.start=kb(c.start,H));c.end=kb(c.end,
+H);if(c.end&&c.end<=c.start)c.end=null;c._end=c.end?N(c.end):null;if(c.allDay===ma)c.allDay=Ta(z.allDayDefault,a.allDayDefault);if(c.className){if(typeof c.className=="string")c.className=c.className.split(/\s+/)}else c.className=[]}function ga(c){if(c.className){if(typeof c.className=="string")c.className=c.className.split(/\s+/)}else c.className=[];for(var z=Aa.sourceNormalizers,H=0;H<z.length;H++)z[H](c)}function ra(c,z){return c&&z&&sa(c)==sa(z)}function sa(c){return(typeof c=="object"?c.events||
+c.url:"")||c}var ha=this;ha.isFetchNeeded=e;ha.fetchEvents=d;ha.addEventSource=l;ha.removeEventSource=t;ha.updateEvent=y;ha.renderEvent=S;ha.removeEvents=Q;ha.clientEvents=q;ha.normalizeEvent=oa;var da=ha.trigger,na=ha.getView,ua=ha.reportEvents,pa={events:[]},U=[pa],ca,ka,qa=0,G=0,p=0,L=[];for(ha=0;ha<b.length;ha++)j(b[ha])}function gb(a,b,e){a.setFullYear(a.getFullYear()+b);e||Ka(a);return a}function hb(a,b,e){if(+a){b=a.getMonth()+b;var d=N(a);d.setDate(1);d.setMonth(b);a.setMonth(b);for(e||Ka(a);a.getMonth()!=
+d.getMonth();)a.setDate(a.getDate()+(a<d?1:-1))}return a}function ba(a,b,e){if(+a){b=a.getDate()+b;var d=N(a);d.setHours(9);d.setDate(b);a.setDate(b);e||Ka(a);lb(a,d)}return a}function lb(a,b){if(+a)for(;a.getDate()!=b.getDate();)a.setTime(+a+(a<b?1:-1)*cc)}function xa(a,b){a.setMinutes(a.getMinutes()+b);return a}function Ka(a){a.setHours(0);a.setMinutes(0);a.setSeconds(0);a.setMilliseconds(0);return a}function N(a,b){if(b)return Ka(new Date(+a));return new Date(+a)}function zb(){var a=0,b;do b=new Date(1970,
+a++,1);while(b.getHours());return b}function Fa(a,b,e){for(b=b||1;!a.getDay()||e&&a.getDay()==1||!e&&a.getDay()==6;)ba(a,b);return a}function Ca(a,b){return Math.round((N(a,true)-N(b,true))/Ab)}function yb(a,b,e,d){if(b!==ma&&b!=a.getFullYear()){a.setDate(1);a.setMonth(0);a.setFullYear(b)}if(e!==ma&&e!=a.getMonth()){a.setDate(1);a.setMonth(e)}d!==ma&&a.setDate(d)}function kb(a,b){if(typeof a=="object")return a;if(typeof a=="number")return new Date(a*1E3);if(typeof a=="string"){if(a.match(/^\d+(\.\d+)?$/))return new Date(parseFloat(a)*
+1E3);if(b===ma)b=true;return Bb(a,b)||(a?new Date(a):null)}return null}function Bb(a,b){a=a.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2})(:?([0-9]{2}))?))?)?)?)?$/);if(!a)return null;var e=new Date(a[1],0,1);if(b||!a[13]){b=new Date(a[1],0,1,9,0);if(a[3]){e.setMonth(a[3]-1);b.setMonth(a[3]-1)}if(a[5]){e.setDate(a[5]);b.setDate(a[5])}lb(e,b);a[7]&&e.setHours(a[7]);a[8]&&e.setMinutes(a[8]);a[10]&&e.setSeconds(a[10]);a[12]&&e.setMilliseconds(Number("0."+
+a[12])*1E3);lb(e,b)}else{e.setUTCFullYear(a[1],a[3]?a[3]-1:0,a[5]||1);e.setUTCHours(a[7]||0,a[8]||0,a[10]||0,a[12]?Number("0."+a[12])*1E3:0);if(a[14]){b=Number(a[16])*60+(a[18]?Number(a[18]):0);b*=a[15]=="-"?1:-1;e=new Date(+e+b*60*1E3)}}return e}function mb(a){if(typeof a=="number")return a*60;if(typeof a=="object")return a.getHours()*60+a.getMinutes();if(a=a.match(/(\d+)(?::(\d+))?\s*(\w+)?/)){var b=parseInt(a[1],10);if(a[3]){b%=12;if(a[3].toLowerCase().charAt(0)=="p")b+=12}return b*60+(a[2]?parseInt(a[2],
+10):0)}}function Oa(a,b,e){return ib(a,null,b,e)}function ib(a,b,e,d){d=d||Ya;var f=a,g=b,l,j=e.length,t,y,S,Q="";for(l=0;l<j;l++){t=e.charAt(l);if(t=="'")for(y=l+1;y<j;y++){if(e.charAt(y)=="'"){if(f){Q+=y==l+1?"'":e.substring(l+1,y);l=y}break}}else if(t=="(")for(y=l+1;y<j;y++){if(e.charAt(y)==")"){l=Oa(f,e.substring(l+1,y),d);if(parseInt(l.replace(/\D/,""),10))Q+=l;l=y;break}}else if(t=="[")for(y=l+1;y<j;y++){if(e.charAt(y)=="]"){t=e.substring(l+1,y);l=Oa(f,t,d);if(l!=Oa(g,t,d))Q+=l;l=y;break}}else if(t==
+"{"){f=b;g=a}else if(t=="}"){f=a;g=b}else{for(y=j;y>l;y--)if(S=dc[e.substring(l,y)]){if(f)Q+=S(f,d);l=y-1;break}if(y==l)if(f)Q+=t}}return Q}function Ua(a){return a.end?ec(a.end,a.allDay):ba(N(a.start),1)}function ec(a,b){a=N(a);return b||a.getHours()||a.getMinutes()?ba(a,1):Ka(a)}function fc(a,b){return(b.msLength-a.msLength)*100+(a.event.start-b.event.start)}function Cb(a,b){return a.end>b.start&&a.start<b.end}function nb(a,b,e,d){var f=[],g,l=a.length,j,t,y,S,Q;for(g=0;g<l;g++){j=a[g];t=j.start;
+y=b[g];if(y>e&&t<d){if(t<e){t=N(e);S=false}else{t=t;S=true}if(y>d){y=N(d);Q=false}else{y=y;Q=true}f.push({event:j,start:t,end:y,isStart:S,isEnd:Q,msLength:y-t})}}return f.sort(fc)}function ob(a){var b=[],e,d=a.length,f,g,l,j;for(e=0;e<d;e++){f=a[e];for(g=0;;){l=false;if(b[g])for(j=0;j<b[g].length;j++)if(Cb(b[g][j],f)){l=true;break}if(l)g++;else break}if(b[g])b[g].push(f);else b[g]=[f]}return b}function Db(a,b,e){a.unbind("mouseover").mouseover(function(d){for(var f=d.target,g;f!=this;){g=f;f=f.parentNode}if((f=
+g._fci)!==ma){g._fci=ma;g=b[f];e(g.event,g.element,g);m(d.target).trigger(d)}d.stopPropagation()})}function Va(a,b,e){for(var d=0,f;d<a.length;d++){f=m(a[d]);f.width(Math.max(0,b-pb(f,e)))}}function Eb(a,b,e){for(var d=0,f;d<a.length;d++){f=m(a[d]);f.height(Math.max(0,b-Sa(f,e)))}}function pb(a,b){return gc(a)+hc(a)+(b?ic(a):0)}function gc(a){return(parseFloat(m.curCSS(a[0],"paddingLeft",true))||0)+(parseFloat(m.curCSS(a[0],"paddingRight",true))||0)}function ic(a){return(parseFloat(m.curCSS(a[0],
+"marginLeft",true))||0)+(parseFloat(m.curCSS(a[0],"marginRight",true))||0)}function hc(a){return(parseFloat(m.curCSS(a[0],"borderLeftWidth",true))||0)+(parseFloat(m.curCSS(a[0],"borderRightWidth",true))||0)}function Sa(a,b){return jc(a)+kc(a)+(b?Fb(a):0)}function jc(a){return(parseFloat(m.curCSS(a[0],"paddingTop",true))||0)+(parseFloat(m.curCSS(a[0],"paddingBottom",true))||0)}function Fb(a){return(parseFloat(m.curCSS(a[0],"marginTop",true))||0)+(parseFloat(m.curCSS(a[0],"marginBottom",true))||0)}
+function kc(a){return(parseFloat(m.curCSS(a[0],"borderTopWidth",true))||0)+(parseFloat(m.curCSS(a[0],"borderBottomWidth",true))||0)}function Za(a,b){b=typeof b=="number"?b+"px":b;a.each(function(e,d){d.style.cssText+=";min-height:"+b+";_height:"+b})}function xb(){}function Gb(a,b){return a-b}function Hb(a){return Math.max.apply(Math,a)}function Pa(a){return(a<10?"0":"")+a}function jb(a,b){if(a[b]!==ma)return a[b];b=b.split(/(?=[A-Z])/);for(var e=b.length-1,d;e>=0;e--){d=a[b[e].toLowerCase()];if(d!==
+ma)return d}return a[""]}function Qa(a){return a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/'/g,"&#039;").replace(/"/g,"&quot;").replace(/\n/g,"<br />")}function Ib(a){return a.id+"/"+a.className+"/"+a.style.cssText.replace(/(^|;)\s*(top|left|width|height)\s*:[^;]*/ig,"")}function qb(a){a.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})}function ab(a){a.children().removeClass("fc-first fc-last").filter(":first-child").addClass("fc-first").end().filter(":last-child").addClass("fc-last")}
+function rb(a,b){a.each(function(e,d){d.className=d.className.replace(/^fc-\w*/,"fc-"+lc[b.getDay()])})}function Jb(a,b){var e=a.source||{},d=a.color,f=e.color,g=b("eventColor"),l=a.backgroundColor||d||e.backgroundColor||f||b("eventBackgroundColor")||g;d=a.borderColor||d||e.borderColor||f||b("eventBorderColor")||g;a=a.textColor||e.textColor||b("eventTextColor");b=[];l&&b.push("background-color:"+l);d&&b.push("border-color:"+d);a&&b.push("color:"+a);return b.join(";")}function $a(a,b,e){if(m.isFunction(a))a=
+[a];if(a){var d,f;for(d=0;d<a.length;d++)f=a[d].apply(b,e)||f;return f}}function Ta(){for(var a=0;a<arguments.length;a++)if(arguments[a]!==ma)return arguments[a]}function mc(a,b){function e(j,t){if(t){hb(j,t);j.setDate(1)}j=N(j,true);j.setDate(1);t=hb(N(j),1);var y=N(j),S=N(t),Q=f("firstDay"),q=f("weekends")?0:1;if(q){Fa(y);Fa(S,-1,true)}ba(y,-((y.getDay()-Math.max(Q,q)+7)%7));ba(S,(7-S.getDay()+Math.max(Q,q))%7);Q=Math.round((S-y)/(Ab*7));if(f("weekMode")=="fixed"){ba(S,(6-Q)*7);Q=6}d.title=l(j,
+f("titleFormat"));d.start=j;d.end=t;d.visStart=y;d.visEnd=S;g(6,Q,q?5:7,true)}var d=this;d.render=e;sb.call(d,a,b,"month");var f=d.opt,g=d.renderBasic,l=b.formatDate}function nc(a,b){function e(j,t){t&&ba(j,t*7);j=ba(N(j),-((j.getDay()-f("firstDay")+7)%7));t=ba(N(j),7);var y=N(j),S=N(t),Q=f("weekends");if(!Q){Fa(y);Fa(S,-1,true)}d.title=l(y,ba(N(S),-1),f("titleFormat"));d.start=j;d.end=t;d.visStart=y;d.visEnd=S;g(1,1,Q?7:5,false)}var d=this;d.render=e;sb.call(d,a,b,"basicWeek");var f=d.opt,g=d.renderBasic,
+l=b.formatDates}function oc(a,b){function e(j,t){if(t){ba(j,t);f("weekends")||Fa(j,t<0?-1:1)}d.title=l(j,f("titleFormat"));d.start=d.visStart=N(j,true);d.end=d.visEnd=ba(N(d.start),1);g(1,1,1,false)}var d=this;d.render=e;sb.call(d,a,b,"basicDay");var f=d.opt,g=d.renderBasic,l=b.formatDate}function sb(a,b,e){function d(w,I,R,V){v=I;F=R;f();(I=!C)?g(w,V):z();l(I)}function f(){if(k=L("isRTL")){D=-1;Z=F-1}else{D=1;Z=0}ja=L("firstDay");ia=L("weekends")?0:1;la=L("theme")?"ui":"fc";$=L("columnFormat")}function g(w,
+I){var R,V=la+"-widget-header",ea=la+"-widget-content",aa;R="<table class='fc-border-separate' style='width:100%' cellspacing='0'><thead><tr>";for(aa=0;aa<F;aa++)R+="<th class='fc- "+V+"'/>";R+="</tr></thead><tbody>";for(aa=0;aa<w;aa++){R+="<tr class='fc-week"+aa+"'>";for(V=0;V<F;V++)R+="<td class='fc- "+ea+" fc-day"+(aa*F+V)+"'><div>"+(I?"<div class='fc-day-number'/>":"")+"<div class='fc-day-content'><div style='position:relative'>&nbsp;</div></div></div></td>";R+="</tr>"}R+="</tbody></table>";w=
+m(R).appendTo(a);K=w.find("thead");i=K.find("th");C=w.find("tbody");P=C.find("tr");E=C.find("td");B=E.filter(":first-child");n=P.eq(0).find("div.fc-day-content div");ab(K.add(K.find("tr")));ab(P);P.eq(0).addClass("fc-first");y(E);Y=m("<div style='position:absolute;z-index:8;top:0;left:0'/>").appendTo(a)}function l(w){var I=w||v==1,R=p.start.getMonth(),V=Ka(new Date),ea,aa,va;I&&i.each(function(wa,Ga){ea=m(Ga);aa=ca(wa);ea.html(ya(aa,$));rb(ea,aa)});E.each(function(wa,Ga){ea=m(Ga);aa=ca(wa);aa.getMonth()==
+R?ea.removeClass("fc-other-month"):ea.addClass("fc-other-month");+aa==+V?ea.addClass(la+"-state-highlight fc-today"):ea.removeClass(la+"-state-highlight fc-today");ea.find("div.fc-day-number").text(aa.getDate());I&&rb(ea,aa)});P.each(function(wa,Ga){va=m(Ga);if(wa<v){va.show();wa==v-1?va.addClass("fc-last"):va.removeClass("fc-last")}else va.hide()})}function j(w){o=w;w=o-K.height();var I,R,V;if(L("weekMode")=="variable")I=R=Math.floor(w/(v==1?2:6));else{I=Math.floor(w/v);R=w-I*(v-1)}B.each(function(ea,
+aa){if(ea<v){V=m(aa);Za(V.find("> div"),(ea==v-1?R:I)-Sa(V))}})}function t(w){W=w;M.clear();s=Math.floor(W/F);Va(i.slice(0,-1),s)}function y(w){w.click(S).mousedown(X)}function S(w){if(!L("selectable")){var I=parseInt(this.className.match(/fc\-day(\d+)/)[1]);I=ca(I);c("dayClick",this,I,true,w)}}function Q(w,I,R){R&&r.build();R=N(p.visStart);for(var V=ba(N(R),F),ea=0;ea<v;ea++){var aa=new Date(Math.max(R,w)),va=new Date(Math.min(V,I));if(aa<va){var wa;if(k){wa=Ca(va,R)*D+Z+1;aa=Ca(aa,R)*D+Z+1}else{wa=
+Ca(aa,R);aa=Ca(va,R)}y(q(ea,wa,ea,aa-1))}ba(R,7);ba(V,7)}}function q(w,I,R,V){w=r.rect(w,I,R,V,a);return H(w,a)}function u(w){return N(w)}function fa(w,I){Q(w,ba(N(I),1),true)}function oa(){T()}function ga(w,I,R){var V=ua(w);c("dayClick",E[V.row*F+V.col],w,I,R)}function ra(w,I){J.start(function(R){T();R&&q(R.row,R.col,R.row,R.col)},I)}function sa(w,I,R){var V=J.stop();T();if(V){V=pa(V);c("drop",w,V,true,I,R)}}function ha(w){return N(w.start)}function da(w){return M.left(w)}function na(w){return M.right(w)}
+function ua(w){return{row:Math.floor(Ca(w,p.visStart)/7),col:ka(w.getDay())}}function pa(w){return U(w.row,w.col)}function U(w,I){return ba(N(p.visStart),w*7+I*D+Z)}function ca(w){return U(Math.floor(w/F),w%F)}function ka(w){return(w-Math.max(ja,ia)+F)%F*D+Z}function qa(w){return P.eq(w)}function G(){return{left:0,right:W}}var p=this;p.renderBasic=d;p.setHeight=j;p.setWidth=t;p.renderDayOverlay=Q;p.defaultSelectionEnd=u;p.renderSelection=fa;p.clearSelection=oa;p.reportDayClick=ga;p.dragStart=ra;p.dragStop=
+sa;p.defaultEventEnd=ha;p.getHoverListener=function(){return J};p.colContentLeft=da;p.colContentRight=na;p.dayOfWeekCol=ka;p.dateCell=ua;p.cellDate=pa;p.cellIsAllDay=function(){return true};p.allDayRow=qa;p.allDayBounds=G;p.getRowCnt=function(){return v};p.getColCnt=function(){return F};p.getColWidth=function(){return s};p.getDaySegmentContainer=function(){return Y};Kb.call(p,a,b,e);Lb.call(p);Mb.call(p);pc.call(p);var L=p.opt,c=p.trigger,z=p.clearEvents,H=p.renderOverlay,T=p.clearOverlays,X=p.daySelectionMousedown,
+ya=b.formatDate,K,i,C,P,E,B,n,Y,W,o,s,v,F,r,J,M,k,D,Z,ja,ia,la,$;qb(a.addClass("fc-grid"));r=new Nb(function(w,I){var R,V,ea;i.each(function(aa,va){R=m(va);V=R.offset().left;if(aa)ea[1]=V;ea=[V];I[aa]=ea});ea[1]=V+R.outerWidth();P.each(function(aa,va){if(aa<v){R=m(va);V=R.offset().top;if(aa)ea[1]=V;ea=[V];w[aa]=ea}});ea[1]=V+R.outerHeight()});J=new Ob(r);M=new Pb(function(w){return n.eq(w)})}function pc(){function a(U,ca){S(U);ua(e(U),ca)}function b(){Q();ga().empty()}function e(U){var ca=da(),ka=
+na(),qa=N(g.visStart);ka=ba(N(qa),ka);var G=m.map(U,Ua),p,L,c,z,H,T,X=[];for(p=0;p<ca;p++){L=ob(nb(U,G,qa,ka));for(c=0;c<L.length;c++){z=L[c];for(H=0;H<z.length;H++){T=z[H];T.row=p;T.level=c;X.push(T)}}ba(qa,7);ba(ka,7)}return X}function d(U,ca,ka){t(U)&&f(U,ca);ka.isEnd&&y(U)&&pa(U,ca,ka);q(U,ca)}function f(U,ca){var ka=ra(),qa;ca.draggable({zIndex:9,delay:50,opacity:l("dragOpacity"),revertDuration:l("dragRevertDuration"),start:function(G,p){j("eventDragStart",ca,U,G,p);fa(U,ca);ka.start(function(L,
+c,z,H){ca.draggable("option","revert",!L||!z&&!H);ha();if(L){qa=z*7+H*(l("isRTL")?-1:1);sa(ba(N(U.start),qa),ba(Ua(U),qa))}else qa=0},G,"drag")},stop:function(G,p){ka.stop();ha();j("eventDragStop",ca,U,G,p);if(qa)oa(this,U,qa,0,U.allDay,G,p);else{ca.css("filter","");u(U,ca)}}})}var g=this;g.renderEvents=a;g.compileDaySegs=e;g.clearEvents=b;g.bindDaySeg=d;Qb.call(g);var l=g.opt,j=g.trigger,t=g.isEventDraggable,y=g.isEventResizable,S=g.reportEvents,Q=g.reportEventClear,q=g.eventElementHandlers,u=g.showEvents,
+fa=g.hideEvents,oa=g.eventDrop,ga=g.getDaySegmentContainer,ra=g.getHoverListener,sa=g.renderDayOverlay,ha=g.clearOverlays,da=g.getRowCnt,na=g.getColCnt,ua=g.renderDaySegs,pa=g.resizableDayEvent}function qc(a,b){function e(j,t){t&&ba(j,t*7);j=ba(N(j),-((j.getDay()-f("firstDay")+7)%7));t=ba(N(j),7);var y=N(j),S=N(t),Q=f("weekends");if(!Q){Fa(y);Fa(S,-1,true)}d.title=l(y,ba(N(S),-1),f("titleFormat"));d.start=j;d.end=t;d.visStart=y;d.visEnd=S;g(Q?7:5)}var d=this;d.render=e;Rb.call(d,a,b,"agendaWeek");
+var f=d.opt,g=d.renderAgenda,l=b.formatDates}function rc(a,b){function e(j,t){if(t){ba(j,t);f("weekends")||Fa(j,t<0?-1:1)}t=N(j,true);var y=ba(N(t),1);d.title=l(j,f("titleFormat"));d.start=d.visStart=t;d.end=d.visEnd=y;g(1)}var d=this;d.render=e;Rb.call(d,a,b,"agendaDay");var f=d.opt,g=d.renderAgenda,l=b.formatDate}function Rb(a,b,e){function d(h){Ba=h;f();v?P():g();l()}function f(){Wa=i("theme")?"ui":"fc";Sb=i("weekends")?0:1;Tb=i("firstDay");if(Ub=i("isRTL")){Ha=-1;Ia=Ba-1}else{Ha=1;Ia=0}La=mb(i("minTime"));
+bb=mb(i("maxTime"));Vb=i("columnFormat")}function g(){var h=Wa+"-widget-header",O=Wa+"-widget-content",x,A,ta,za,Da,Ea=i("slotMinutes")%15==0;x="<table style='width:100%' class='fc-agenda-days fc-border-separate' cellspacing='0'><thead><tr><th class='fc-agenda-axis "+h+"'>&nbsp;</th>";for(A=0;A<Ba;A++)x+="<th class='fc- fc-col"+A+" "+h+"'/>";x+="<th class='fc-agenda-gutter "+h+"'>&nbsp;</th></tr></thead><tbody><tr><th class='fc-agenda-axis "+h+"'>&nbsp;</th>";for(A=0;A<Ba;A++)x+="<td class='fc- fc-col"+
+A+" "+O+"'><div><div class='fc-day-content'><div style='position:relative'>&nbsp;</div></div></div></td>";x+="<td class='fc-agenda-gutter "+O+"'>&nbsp;</td></tr></tbody></table>";v=m(x).appendTo(a);F=v.find("thead");r=F.find("th").slice(1,-1);J=v.find("tbody");M=J.find("td").slice(0,-1);k=M.find("div.fc-day-content div");D=M.eq(0);Z=D.find("> div");ab(F.add(F.find("tr")));ab(J.add(J.find("tr")));aa=F.find("th:first");va=v.find(".fc-agenda-gutter");ja=m("<div style='position:absolute;z-index:2;left:0;width:100%'/>").appendTo(a);
+if(i("allDaySlot")){ia=m("<div style='position:absolute;z-index:8;top:0;left:0'/>").appendTo(ja);x="<table style='width:100%' class='fc-agenda-allday' cellspacing='0'><tr><th class='"+h+" fc-agenda-axis'>"+i("allDayText")+"</th><td><div class='fc-day-content'><div style='position:relative'/></div></td><th class='"+h+" fc-agenda-gutter'>&nbsp;</th></tr></table>";la=m(x).appendTo(ja);$=la.find("tr");q($.find("td"));aa=aa.add(la.find("th:first"));va=va.add(la.find("th.fc-agenda-gutter"));ja.append("<div class='fc-agenda-divider "+
+h+"'><div class='fc-agenda-divider-inner'/></div>")}else ia=m([]);w=m("<div style='position:absolute;width:100%;overflow-x:hidden;overflow-y:auto'/>").appendTo(ja);I=m("<div style='position:relative;width:100%;overflow:hidden'/>").appendTo(w);R=m("<div style='position:absolute;z-index:8;top:0;left:0'/>").appendTo(I);x="<table class='fc-agenda-slots' style='width:100%' cellspacing='0'><tbody>";ta=zb();za=xa(N(ta),bb);xa(ta,La);for(A=tb=0;ta<za;A++){Da=ta.getMinutes();x+="<tr class='fc-slot"+A+" "+
+(!Da?"":"fc-minor")+"'><th class='fc-agenda-axis "+h+"'>"+(!Ea||!Da?s(ta,i("axisFormat")):"&nbsp;")+"</th><td class='"+O+"'><div style='position:relative'>&nbsp;</div></td></tr>";xa(ta,i("slotMinutes"));tb++}x+="</tbody></table>";V=m(x).appendTo(I);ea=V.find("div:first");u(V.find("td"));aa=aa.add(V.find("th:first"))}function l(){var h,O,x,A,ta=Ka(new Date);for(h=0;h<Ba;h++){A=ua(h);O=r.eq(h);O.html(s(A,Vb));x=M.eq(h);+A==+ta?x.addClass(Wa+"-state-highlight fc-today"):x.removeClass(Wa+"-state-highlight fc-today");
+rb(O.add(x),A)}}function j(h,O){if(h===ma)h=Wb;Wb=h;ub={};var x=J.position().top,A=w.position().top;h=Math.min(h-x,V.height()+A+1);Z.height(h-Sa(D));ja.css("top",x);w.height(h-A-1);Xa=ea.height()+1;O&&y()}function t(h){Ga=h;cb.clear();Ma=0;Va(aa.width("").each(function(O,x){Ma=Math.max(Ma,m(x).outerWidth())}),Ma);h=w[0].clientWidth;if(vb=w.width()-h){Va(va,vb);va.show().prev().removeClass("fc-last")}else va.hide().prev().addClass("fc-last");db=Math.floor((h-Ma)/Ba);Va(r.slice(0,-1),db)}function y(){function h(){w.scrollTop(A)}
+var O=zb(),x=N(O);x.setHours(i("firstHour"));var A=ca(O,x)+1;h();setTimeout(h,0)}function S(){Xb=w.scrollTop()}function Q(){w.scrollTop(Xb)}function q(h){h.click(fa).mousedown(W)}function u(h){h.click(fa).mousedown(H)}function fa(h){if(!i("selectable")){var O=Math.min(Ba-1,Math.floor((h.pageX-v.offset().left-Ma)/db)),x=ua(O),A=this.parentNode.className.match(/fc-slot(\d+)/);if(A){A=parseInt(A[1])*i("slotMinutes");var ta=Math.floor(A/60);x.setHours(ta);x.setMinutes(A%60+La);C("dayClick",M[O],x,false,
+h)}else C("dayClick",M[O],x,true,h)}}function oa(h,O,x){x&&Na.build();var A=N(K.visStart);if(Ub){x=Ca(O,A)*Ha+Ia+1;h=Ca(h,A)*Ha+Ia+1}else{x=Ca(h,A);h=Ca(O,A)}x=Math.max(0,x);h=Math.min(Ba,h);x<h&&q(ga(0,x,0,h-1))}function ga(h,O,x,A){h=Na.rect(h,O,x,A,ja);return E(h,ja)}function ra(h,O){for(var x=N(K.visStart),A=ba(N(x),1),ta=0;ta<Ba;ta++){var za=new Date(Math.max(x,h)),Da=new Date(Math.min(A,O));if(za<Da){var Ea=ta*Ha+Ia;Ea=Na.rect(0,Ea,0,Ea,I);za=ca(x,za);Da=ca(x,Da);Ea.top=za;Ea.height=Da-za;u(E(Ea,
+I))}ba(x,1);ba(A,1)}}function sa(h){return cb.left(h)}function ha(h){return cb.right(h)}function da(h){return{row:Math.floor(Ca(h,K.visStart)/7),col:U(h.getDay())}}function na(h){var O=ua(h.col);h=h.row;i("allDaySlot")&&h--;h>=0&&xa(O,La+h*i("slotMinutes"));return O}function ua(h){return ba(N(K.visStart),h*Ha+Ia)}function pa(h){return i("allDaySlot")&&!h.row}function U(h){return(h-Math.max(Tb,Sb)+Ba)%Ba*Ha+Ia}function ca(h,O){h=N(h,true);if(O<xa(N(h),La))return 0;if(O>=xa(N(h),bb))return V.height();
+h=i("slotMinutes");O=O.getHours()*60+O.getMinutes()-La;var x=Math.floor(O/h),A=ub[x];if(A===ma)A=ub[x]=V.find("tr:eq("+x+") td div")[0].offsetTop;return Math.max(0,Math.round(A-1+Xa*(O%h/h)))}function ka(){return{left:Ma,right:Ga-vb}}function qa(){return $}function G(h){var O=N(h.start);if(h.allDay)return O;return xa(O,i("defaultEventMinutes"))}function p(h,O){if(O)return N(h);return xa(N(h),i("slotMinutes"))}function L(h,O,x){if(x)i("allDaySlot")&&oa(h,ba(N(O),1),true);else c(h,O)}function c(h,O){var x=
+i("selectHelper");Na.build();if(x){var A=Ca(h,K.visStart)*Ha+Ia;if(A>=0&&A<Ba){A=Na.rect(0,A,0,A,I);var ta=ca(h,h),za=ca(h,O);if(za>ta){A.top=ta;A.height=za-ta;A.left+=2;A.width-=5;if(m.isFunction(x)){if(h=x(h,O)){A.position="absolute";A.zIndex=8;wa=m(h).css(A).appendTo(I)}}else{A.isStart=true;A.isEnd=true;wa=m(o({title:"",start:h,end:O,className:["fc-select-helper"],editable:false},A));wa.css("opacity",i("dragOpacity"))}if(wa){u(wa);I.append(wa);Va(wa,A.width,true);Eb(wa,A.height,true)}}}}else ra(h,
+O)}function z(){B();if(wa){wa.remove();wa=null}}function H(h){if(h.which==1&&i("selectable")){Y(h);var O;Ra.start(function(x,A){z();if(x&&x.col==A.col&&!pa(x)){A=na(A);x=na(x);O=[A,xa(N(A),i("slotMinutes")),x,xa(N(x),i("slotMinutes"))].sort(Gb);c(O[0],O[3])}else O=null},h);m(document).one("mouseup",function(x){Ra.stop();if(O){+O[0]==+O[1]&&T(O[0],false,x);n(O[0],O[3],false,x)}})}}function T(h,O,x){C("dayClick",M[U(h.getDay())],h,O,x)}function X(h,O){Ra.start(function(x){B();if(x)if(pa(x))ga(x.row,
+x.col,x.row,x.col);else{x=na(x);var A=xa(N(x),i("defaultEventMinutes"));ra(x,A)}},O)}function ya(h,O,x){var A=Ra.stop();B();A&&C("drop",h,na(A),pa(A),O,x)}var K=this;K.renderAgenda=d;K.setWidth=t;K.setHeight=j;K.beforeHide=S;K.afterShow=Q;K.defaultEventEnd=G;K.timePosition=ca;K.dayOfWeekCol=U;K.dateCell=da;K.cellDate=na;K.cellIsAllDay=pa;K.allDayRow=qa;K.allDayBounds=ka;K.getHoverListener=function(){return Ra};K.colContentLeft=sa;K.colContentRight=ha;K.getDaySegmentContainer=function(){return ia};
+K.getSlotSegmentContainer=function(){return R};K.getMinMinute=function(){return La};K.getMaxMinute=function(){return bb};K.getBodyContent=function(){return I};K.getRowCnt=function(){return 1};K.getColCnt=function(){return Ba};K.getColWidth=function(){return db};K.getSlotHeight=function(){return Xa};K.defaultSelectionEnd=p;K.renderDayOverlay=oa;K.renderSelection=L;K.clearSelection=z;K.reportDayClick=T;K.dragStart=X;K.dragStop=ya;Kb.call(K,a,b,e);Lb.call(K);Mb.call(K);sc.call(K);var i=K.opt,C=K.trigger,
+P=K.clearEvents,E=K.renderOverlay,B=K.clearOverlays,n=K.reportSelection,Y=K.unselect,W=K.daySelectionMousedown,o=K.slotSegHtml,s=b.formatDate,v,F,r,J,M,k,D,Z,ja,ia,la,$,w,I,R,V,ea,aa,va,wa,Ga,Wb,Ma,db,vb,Xa,Xb,Ba,tb,Na,Ra,cb,ub={},Wa,Tb,Sb,Ub,Ha,Ia,La,bb,Vb;qb(a.addClass("fc-agenda"));Na=new Nb(function(h,O){function x(eb){return Math.max(Ea,Math.min(tc,eb))}var A,ta,za;r.each(function(eb,uc){A=m(uc);ta=A.offset().left;if(eb)za[1]=ta;za=[ta];O[eb]=za});za[1]=ta+A.outerWidth();if(i("allDaySlot")){A=
+$;ta=A.offset().top;h[0]=[ta,ta+A.outerHeight()]}for(var Da=I.offset().top,Ea=w.offset().top,tc=Ea+w.outerHeight(),fb=0;fb<tb;fb++)h.push([x(Da+Xa*fb),x(Da+Xa*(fb+1))])});Ra=new Ob(Na);cb=new Pb(function(h){return k.eq(h)})}function sc(){function a(o,s){sa(o);var v,F=o.length,r=[],J=[];for(v=0;v<F;v++)o[v].allDay?r.push(o[v]):J.push(o[v]);if(u("allDaySlot")){L(e(r),s);na()}g(d(J),s)}function b(){ha();ua().empty();pa().empty()}function e(o){o=ob(nb(o,m.map(o,Ua),q.visStart,q.visEnd));var s,v=o.length,
+F,r,J,M=[];for(s=0;s<v;s++){F=o[s];for(r=0;r<F.length;r++){J=F[r];J.row=0;J.level=s;M.push(J)}}return M}function d(o){var s=z(),v=ka(),F=ca(),r=xa(N(q.visStart),v),J=m.map(o,f),M,k,D,Z,ja,ia,la=[];for(M=0;M<s;M++){k=ob(nb(o,J,r,xa(N(r),F-v)));vc(k);for(D=0;D<k.length;D++){Z=k[D];for(ja=0;ja<Z.length;ja++){ia=Z[ja];ia.col=M;ia.level=D;la.push(ia)}}ba(r,1,true)}return la}function f(o){return o.end?N(o.end):xa(N(o.start),u("defaultEventMinutes"))}function g(o,s){var v,F=o.length,r,J,M,k,D,Z,ja,ia,la,
+$="",w,I,R={},V={},ea=pa(),aa;v=z();if(w=u("isRTL")){I=-1;aa=v-1}else{I=1;aa=0}for(v=0;v<F;v++){r=o[v];J=r.event;M=qa(r.start,r.start);k=qa(r.start,r.end);D=r.col;Z=r.level;ja=r.forward||0;ia=G(D*I+aa);la=p(D*I+aa)-ia;la=Math.min(la-6,la*0.95);D=Z?la/(Z+ja+1):ja?(la/(ja+1)-6)*2:la;Z=ia+la/(Z+ja+1)*Z*I+(w?la-D:0);r.top=M;r.left=Z;r.outerWidth=D;r.outerHeight=k-M;$+=l(J,r)}ea[0].innerHTML=$;w=ea.children();for(v=0;v<F;v++){r=o[v];J=r.event;$=m(w[v]);I=fa("eventRender",J,J,$);if(I===false)$.remove();
+else{if(I&&I!==true){$.remove();$=m(I).css({position:"absolute",top:r.top,left:r.left}).appendTo(ea)}r.element=$;if(J._id===s)t(J,$,r);else $[0]._fci=v;ya(J,$)}}Db(ea,o,t);for(v=0;v<F;v++){r=o[v];if($=r.element){J=R[s=r.key=Ib($[0])];r.vsides=J===ma?(R[s]=Sa($,true)):J;J=V[s];r.hsides=J===ma?(V[s]=pb($,true)):J;s=$.find("div.fc-event-content");if(s.length)r.contentTop=s[0].offsetTop}}for(v=0;v<F;v++){r=o[v];if($=r.element){$[0].style.width=Math.max(0,r.outerWidth-r.hsides)+"px";R=Math.max(0,r.outerHeight-
+r.vsides);$[0].style.height=R+"px";J=r.event;if(r.contentTop!==ma&&R-r.contentTop<10){$.find("div.fc-event-time").text(Y(J.start,u("timeFormat"))+" - "+J.title);$.find("div.fc-event-title").remove()}fa("eventAfterRender",J,J,$)}}}function l(o,s){var v="<",F=o.url,r=Jb(o,u),J=r?" style='"+r+"'":"",M=["fc-event","fc-event-skin","fc-event-vert"];oa(o)&&M.push("fc-event-draggable");s.isStart&&M.push("fc-corner-top");s.isEnd&&M.push("fc-corner-bottom");M=M.concat(o.className);if(o.source)M=M.concat(o.source.className||
+[]);v+=F?"a href='"+Qa(o.url)+"'":"div";v+=" class='"+M.join(" ")+"' style='position:absolute;z-index:8;top:"+s.top+"px;left:"+s.left+"px;"+r+"'><div class='fc-event-inner fc-event-skin'"+J+"><div class='fc-event-head fc-event-skin'"+J+"><div class='fc-event-time'>"+Qa(W(o.start,o.end,u("timeFormat")))+"</div></div><div class='fc-event-content'><div class='fc-event-title'>"+Qa(o.title)+"</div></div><div class='fc-event-bg'></div></div>";if(s.isEnd&&ga(o))v+="<div class='ui-resizable-handle ui-resizable-s'>=</div>";
+v+="</"+(F?"a":"div")+">";return v}function j(o,s,v){oa(o)&&y(o,s,v.isStart);v.isEnd&&ga(o)&&c(o,s,v);da(o,s)}function t(o,s,v){var F=s.find("div.fc-event-time");oa(o)&&S(o,s,F);v.isEnd&&ga(o)&&Q(o,s,F);da(o,s)}function y(o,s,v){function F(){if(!M){s.width(r).height("").draggable("option","grid",null);M=true}}var r,J,M=true,k,D=u("isRTL")?-1:1,Z=U(),ja=H(),ia=T(),la=ka();s.draggable({zIndex:9,opacity:u("dragOpacity","month"),revertDuration:u("dragRevertDuration"),start:function($,w){fa("eventDragStart",
+s,o,$,w);i(o,s);r=s.width();Z.start(function(I,R,V,ea){B();if(I){J=false;k=ea*D;if(I.row)if(v){if(M){s.width(ja-10);Eb(s,ia*Math.round((o.end?(o.end-o.start)/wc:u("defaultEventMinutes"))/u("slotMinutes")));s.draggable("option","grid",[ja,1]);M=false}}else J=true;else{E(ba(N(o.start),k),ba(Ua(o),k));F()}J=J||M&&!k}else{F();J=true}s.draggable("option","revert",J)},$,"drag")},stop:function($,w){Z.stop();B();fa("eventDragStop",s,o,$,w);if(J){F();s.css("filter","");K(o,s)}else{var I=0;M||(I=Math.round((s.offset().top-
+X().offset().top)/ia)*u("slotMinutes")+la-(o.start.getHours()*60+o.start.getMinutes()));C(this,o,k,I,M,$,w)}}})}function S(o,s,v){function F(I){var R=xa(N(o.start),I),V;if(o.end)V=xa(N(o.end),I);v.text(W(R,V,u("timeFormat")))}function r(){if(M){v.css("display","");s.draggable("option","grid",[$,w]);M=false}}var J,M=false,k,D,Z,ja=u("isRTL")?-1:1,ia=U(),la=z(),$=H(),w=T();s.draggable({zIndex:9,scroll:false,grid:[$,w],axis:la==1?"y":false,opacity:u("dragOpacity"),revertDuration:u("dragRevertDuration"),
+start:function(I,R){fa("eventDragStart",s,o,I,R);i(o,s);J=s.position();D=Z=0;ia.start(function(V,ea,aa,va){s.draggable("option","revert",!V);B();if(V){k=va*ja;if(u("allDaySlot")&&!V.row){if(!M){M=true;v.hide();s.draggable("option","grid",null)}E(ba(N(o.start),k),ba(Ua(o),k))}else r()}},I,"drag")},drag:function(I,R){D=Math.round((R.position.top-J.top)/w)*u("slotMinutes");if(D!=Z){M||F(D);Z=D}},stop:function(I,R){var V=ia.stop();B();fa("eventDragStop",s,o,I,R);if(V&&(k||D||M))C(this,o,k,M?0:D,M,I,R);
+else{r();s.css("filter","");s.css(J);F(0);K(o,s)}}})}function Q(o,s,v){var F,r,J=T();s.resizable({handles:{s:"div.ui-resizable-s"},grid:J,start:function(M,k){F=r=0;i(o,s);s.css("z-index",9);fa("eventResizeStart",this,o,M,k)},resize:function(M,k){F=Math.round((Math.max(J,s.height())-k.originalSize.height)/J);if(F!=r){v.text(W(o.start,!F&&!o.end?null:xa(ra(o),u("slotMinutes")*F),u("timeFormat")));r=F}},stop:function(M,k){fa("eventResizeStop",this,o,M,k);if(F)P(this,o,0,u("slotMinutes")*F,M,k);else{s.css("z-index",
+8);K(o,s)}}})}var q=this;q.renderEvents=a;q.compileDaySegs=e;q.clearEvents=b;q.slotSegHtml=l;q.bindDaySeg=j;Qb.call(q);var u=q.opt,fa=q.trigger,oa=q.isEventDraggable,ga=q.isEventResizable,ra=q.eventEnd,sa=q.reportEvents,ha=q.reportEventClear,da=q.eventElementHandlers,na=q.setHeight,ua=q.getDaySegmentContainer,pa=q.getSlotSegmentContainer,U=q.getHoverListener,ca=q.getMaxMinute,ka=q.getMinMinute,qa=q.timePosition,G=q.colContentLeft,p=q.colContentRight,L=q.renderDaySegs,c=q.resizableDayEvent,z=q.getColCnt,
+H=q.getColWidth,T=q.getSlotHeight,X=q.getBodyContent,ya=q.reportEventElement,K=q.showEvents,i=q.hideEvents,C=q.eventDrop,P=q.eventResize,E=q.renderDayOverlay,B=q.clearOverlays,n=q.calendar,Y=n.formatDate,W=n.formatDates}function vc(a){var b,e,d,f,g,l;for(b=a.length-1;b>0;b--){f=a[b];for(e=0;e<f.length;e++){g=f[e];for(d=0;d<a[b-1].length;d++){l=a[b-1][d];if(Cb(g,l))l.forward=Math.max(l.forward||0,(g.forward||0)+1)}}}}function Kb(a,b,e){function d(G,p){G=qa[G];if(typeof G=="object")return jb(G,p||e);
+return G}function f(G,p){return b.trigger.apply(b,[G,p||da].concat(Array.prototype.slice.call(arguments,2),[da]))}function g(G){return j(G)&&!d("disableDragging")}function l(G){return j(G)&&!d("disableResizing")}function j(G){return Ta(G.editable,(G.source||{}).editable,d("editable"))}function t(G){U={};var p,L=G.length,c;for(p=0;p<L;p++){c=G[p];if(U[c._id])U[c._id].push(c);else U[c._id]=[c]}}function y(G){return G.end?N(G.end):na(G)}function S(G,p){ca.push(p);if(ka[G._id])ka[G._id].push(p);else ka[G._id]=
+[p]}function Q(){ca=[];ka={}}function q(G,p){p.click(function(L){if(!p.hasClass("ui-draggable-dragging")&&!p.hasClass("ui-resizable-resizing"))return f("eventClick",this,G,L)}).hover(function(L){f("eventMouseover",this,G,L)},function(L){f("eventMouseout",this,G,L)})}function u(G,p){oa(G,p,"show")}function fa(G,p){oa(G,p,"hide")}function oa(G,p,L){G=ka[G._id];var c,z=G.length;for(c=0;c<z;c++)if(!p||G[c][0]!=p[0])G[c][L]()}function ga(G,p,L,c,z,H,T){var X=p.allDay,ya=p._id;sa(U[ya],L,c,z);f("eventDrop",
+G,p,L,c,z,function(){sa(U[ya],-L,-c,X);pa(ya)},H,T);pa(ya)}function ra(G,p,L,c,z,H){var T=p._id;ha(U[T],L,c);f("eventResize",G,p,L,c,function(){ha(U[T],-L,-c);pa(T)},z,H);pa(T)}function sa(G,p,L,c){L=L||0;for(var z,H=G.length,T=0;T<H;T++){z=G[T];if(c!==ma)z.allDay=c;xa(ba(z.start,p,true),L);if(z.end)z.end=xa(ba(z.end,p,true),L);ua(z,qa)}}function ha(G,p,L){L=L||0;for(var c,z=G.length,H=0;H<z;H++){c=G[H];c.end=xa(ba(y(c),p,true),L);ua(c,qa)}}var da=this;da.element=a;da.calendar=b;da.name=e;da.opt=
+d;da.trigger=f;da.isEventDraggable=g;da.isEventResizable=l;da.reportEvents=t;da.eventEnd=y;da.reportEventElement=S;da.reportEventClear=Q;da.eventElementHandlers=q;da.showEvents=u;da.hideEvents=fa;da.eventDrop=ga;da.eventResize=ra;var na=da.defaultEventEnd,ua=b.normalizeEvent,pa=b.reportEventChange,U={},ca=[],ka={},qa=b.options}function Qb(){function a(i,C){var P=z(),E=pa(),B=U(),n=0,Y,W,o=i.length,s,v;P[0].innerHTML=e(i);d(i,P.children());f(i);g(i,P,C);l(i);j(i);t(i);C=y();for(P=0;P<E;P++){Y=[];for(W=
+0;W<B;W++)Y[W]=0;for(;n<o&&(s=i[n]).row==P;){W=Hb(Y.slice(s.startCol,s.endCol));s.top=W;W+=s.outerHeight;for(v=s.startCol;v<s.endCol;v++)Y[v]=W;n++}C[P].height(Hb(Y))}Q(i,S(C))}function b(i,C,P){var E=m("<div/>"),B=z(),n=i.length,Y;E[0].innerHTML=e(i);E=E.children();B.append(E);d(i,E);l(i);j(i);t(i);Q(i,S(y()));E=[];for(B=0;B<n;B++)if(Y=i[B].element){i[B].row===C&&Y.css("top",P);E.push(Y[0])}return m(E)}function e(i){var C=fa("isRTL"),P,E=i.length,B,n,Y,W;P=ka();var o=P.left,s=P.right,v,F,r,J,M,k=
+"";for(P=0;P<E;P++){B=i[P];n=B.event;W=["fc-event","fc-event-skin","fc-event-hori"];ga(n)&&W.push("fc-event-draggable");if(C){B.isStart&&W.push("fc-corner-right");B.isEnd&&W.push("fc-corner-left");v=p(B.end.getDay()-1);F=p(B.start.getDay());r=B.isEnd?qa(v):o;J=B.isStart?G(F):s}else{B.isStart&&W.push("fc-corner-left");B.isEnd&&W.push("fc-corner-right");v=p(B.start.getDay());F=p(B.end.getDay()-1);r=B.isStart?qa(v):o;J=B.isEnd?G(F):s}W=W.concat(n.className);if(n.source)W=W.concat(n.source.className||
+[]);Y=n.url;M=Jb(n,fa);k+=Y?"<a href='"+Qa(Y)+"'":"<div";k+=" class='"+W.join(" ")+"' style='position:absolute;z-index:8;left:"+r+"px;"+M+"'><div class='fc-event-inner fc-event-skin'"+(M?" style='"+M+"'":"")+">";if(!n.allDay&&B.isStart)k+="<span class='fc-event-time'>"+Qa(T(n.start,n.end,fa("timeFormat")))+"</span>";k+="<span class='fc-event-title'>"+Qa(n.title)+"</span></div>";if(B.isEnd&&ra(n))k+="<div class='ui-resizable-handle ui-resizable-"+(C?"w":"e")+"'>&nbsp;&nbsp;&nbsp;</div>";k+="</"+(Y?
+"a":"div")+">";B.left=r;B.outerWidth=J-r;B.startCol=v;B.endCol=F+1}return k}function d(i,C){var P,E=i.length,B,n,Y;for(P=0;P<E;P++){B=i[P];n=B.event;Y=m(C[P]);n=oa("eventRender",n,n,Y);if(n===false)Y.remove();else{if(n&&n!==true){n=m(n).css({position:"absolute",left:B.left});Y.replaceWith(n);Y=n}B.element=Y}}}function f(i){var C,P=i.length,E,B;for(C=0;C<P;C++){E=i[C];(B=E.element)&&ha(E.event,B)}}function g(i,C,P){var E,B=i.length,n,Y,W;for(E=0;E<B;E++){n=i[E];if(Y=n.element){W=n.event;if(W._id===
+P)H(W,Y,n);else Y[0]._fci=E}}Db(C,i,H)}function l(i){var C,P=i.length,E,B,n,Y,W={};for(C=0;C<P;C++){E=i[C];if(B=E.element){n=E.key=Ib(B[0]);Y=W[n];if(Y===ma)Y=W[n]=pb(B,true);E.hsides=Y}}}function j(i){var C,P=i.length,E,B;for(C=0;C<P;C++){E=i[C];if(B=E.element)B[0].style.width=Math.max(0,E.outerWidth-E.hsides)+"px"}}function t(i){var C,P=i.length,E,B,n,Y,W={};for(C=0;C<P;C++){E=i[C];if(B=E.element){n=E.key;Y=W[n];if(Y===ma)Y=W[n]=Fb(B);E.outerHeight=B[0].offsetHeight+Y}}}function y(){var i,C=pa(),
+P=[];for(i=0;i<C;i++)P[i]=ca(i).find("td:first div.fc-day-content > div");return P}function S(i){var C,P=i.length,E=[];for(C=0;C<P;C++)E[C]=i[C][0].offsetTop;return E}function Q(i,C){var P,E=i.length,B,n;for(P=0;P<E;P++){B=i[P];if(n=B.element){n[0].style.top=C[B.row]+(B.top||0)+"px";B=B.event;oa("eventAfterRender",B,B,n)}}}function q(i,C,P){var E=fa("isRTL"),B=E?"w":"e",n=C.find("div.ui-resizable-"+B),Y=false;qb(C);C.mousedown(function(W){W.preventDefault()}).click(function(W){if(Y){W.preventDefault();
+W.stopImmediatePropagation()}});n.mousedown(function(W){function o(ia){oa("eventResizeStop",this,i,ia);m("body").css("cursor","");s.stop();ya();k&&ua(this,i,k,0,ia);setTimeout(function(){Y=false},0)}if(W.which==1){Y=true;var s=u.getHoverListener(),v=pa(),F=U(),r=E?-1:1,J=E?F-1:0,M=C.css("top"),k,D,Z=m.extend({},i),ja=L(i.start);K();m("body").css("cursor",B+"-resize").one("mouseup",o);oa("eventResizeStart",this,i,W);s.start(function(ia,la){if(ia){var $=Math.max(ja.row,ia.row);ia=ia.col;if(v==1)$=0;
+if($==ja.row)ia=E?Math.min(ja.col,ia):Math.max(ja.col,ia);k=$*7+ia*r+J-(la.row*7+la.col*r+J);la=ba(sa(i),k,true);if(k){Z.end=la;$=D;D=b(c([Z]),P.row,M);D.find("*").css("cursor",B+"-resize");$&&$.remove();na(i)}else if(D){da(i);D.remove();D=null}ya();X(i.start,ba(N(la),1))}},W)}})}var u=this;u.renderDaySegs=a;u.resizableDayEvent=q;var fa=u.opt,oa=u.trigger,ga=u.isEventDraggable,ra=u.isEventResizable,sa=u.eventEnd,ha=u.reportEventElement,da=u.showEvents,na=u.hideEvents,ua=u.eventResize,pa=u.getRowCnt,
+U=u.getColCnt,ca=u.allDayRow,ka=u.allDayBounds,qa=u.colContentLeft,G=u.colContentRight,p=u.dayOfWeekCol,L=u.dateCell,c=u.compileDaySegs,z=u.getDaySegmentContainer,H=u.bindDaySeg,T=u.calendar.formatDates,X=u.renderDayOverlay,ya=u.clearOverlays,K=u.clearSelection}function Mb(){function a(Q,q,u){b();q||(q=j(Q,u));t(Q,q,u);e(Q,q,u)}function b(Q){if(S){S=false;y();l("unselect",null,Q)}}function e(Q,q,u,fa){S=true;l("select",null,Q,q,u,fa)}function d(Q){var q=f.cellDate,u=f.cellIsAllDay,fa=f.getHoverListener(),
+oa=f.reportDayClick;if(Q.which==1&&g("selectable")){b(Q);var ga;fa.start(function(ra,sa){y();if(ra&&u(ra)){ga=[q(sa),q(ra)].sort(Gb);t(ga[0],ga[1],true)}else ga=null},Q);m(document).one("mouseup",function(ra){fa.stop();if(ga){+ga[0]==+ga[1]&&oa(ga[0],true,ra);e(ga[0],ga[1],true,ra)}})}}var f=this;f.select=a;f.unselect=b;f.reportSelection=e;f.daySelectionMousedown=d;var g=f.opt,l=f.trigger,j=f.defaultSelectionEnd,t=f.renderSelection,y=f.clearSelection,S=false;g("selectable")&&g("unselectAuto")&&m(document).mousedown(function(Q){var q=
+g("unselectCancel");if(q)if(m(Q.target).parents(q).length)return;b(Q)})}function Lb(){function a(g,l){var j=f.shift();j||(j=m("<div class='fc-cell-overlay' style='position:absolute;z-index:3'/>"));j[0].parentNode!=l[0]&&j.appendTo(l);d.push(j.css(g).show());return j}function b(){for(var g;g=d.shift();)f.push(g.hide().unbind())}var e=this;e.renderOverlay=a;e.clearOverlays=b;var d=[],f=[]}function Nb(a){var b=this,e,d;b.build=function(){e=[];d=[];a(e,d)};b.cell=function(f,g){var l=e.length,j=d.length,
+t,y=-1,S=-1;for(t=0;t<l;t++)if(g>=e[t][0]&&g<e[t][1]){y=t;break}for(t=0;t<j;t++)if(f>=d[t][0]&&f<d[t][1]){S=t;break}return y>=0&&S>=0?{row:y,col:S}:null};b.rect=function(f,g,l,j,t){t=t.offset();return{top:e[f][0]-t.top,left:d[g][0]-t.left,width:d[j][1]-d[g][0],height:e[l][1]-e[f][0]}}}function Ob(a){function b(j){xc(j);j=a.cell(j.pageX,j.pageY);if(!j!=!l||j&&(j.row!=l.row||j.col!=l.col)){if(j){g||(g=j);f(j,g,j.row-g.row,j.col-g.col)}else f(j,g);l=j}}var e=this,d,f,g,l;e.start=function(j,t,y){f=j;
+g=l=null;a.build();b(t);d=y||"mousemove";m(document).bind(d,b)};e.stop=function(){m(document).unbind(d,b);return l}}function xc(a){if(a.pageX===ma){a.pageX=a.originalEvent.pageX;a.pageY=a.originalEvent.pageY}}function Pb(a){function b(l){return d[l]=d[l]||a(l)}var e=this,d={},f={},g={};e.left=function(l){return f[l]=f[l]===ma?b(l).position().left:f[l]};e.right=function(l){return g[l]=g[l]===ma?e.left(l)+b(l).width():g[l]};e.clear=function(){d={};f={};g={}}}var Ya={defaultView:"month",aspectRatio:1.35,
+header:{left:"title",center:"",right:"today prev,next"},weekends:true,allDayDefault:true,ignoreTimezone:true,lazyFetching:true,startParam:"start",endParam:"end",titleFormat:{month:"MMMM yyyy",week:"MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",day:"dddd, MMM d, yyyy"},columnFormat:{month:"ddd",week:"ddd M/d",day:"dddd M/d"},timeFormat:{"":"h(:mm)t"},isRTL:false,firstDay:0,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"],buttonText:{prev:"&nbsp;&#9668;&nbsp;",next:"&nbsp;&#9658;&nbsp;",prevYear:"&nbsp;&lt;&lt;&nbsp;",nextYear:"&nbsp;&gt;&gt;&nbsp;",today:"today",month:"month",week:"week",day:"day"},theme:false,buttonIcons:{prev:"circle-triangle-w",next:"circle-triangle-e"},unselectAuto:true,dropAccept:"*"},yc=
+{header:{left:"next,prev today",center:"",right:"title"},buttonText:{prev:"&nbsp;&#9658;&nbsp;",next:"&nbsp;&#9668;&nbsp;",prevYear:"&nbsp;&gt;&gt;&nbsp;",nextYear:"&nbsp;&lt;&lt;&nbsp;"},buttonIcons:{prev:"circle-triangle-e",next:"circle-triangle-w"}},Aa=m.fullCalendar={version:"1.5.3"},Ja=Aa.views={};m.fn.fullCalendar=function(a){if(typeof a=="string"){var b=Array.prototype.slice.call(arguments,1),e;this.each(function(){var f=m.data(this,"fullCalendar");if(f&&m.isFunction(f[a])){f=f[a].apply(f,
+b);if(e===ma)e=f;a=="destroy"&&m.removeData(this,"fullCalendar")}});if(e!==ma)return e;return this}var d=a.eventSources||[];delete a.eventSources;if(a.events){d.push(a.events);delete a.events}a=m.extend(true,{},Ya,a.isRTL||a.isRTL===ma&&Ya.isRTL?yc:{},a);this.each(function(f,g){f=m(g);g=new Yb(f,a,d);f.data("fullCalendar",g);g.render()});return this};Aa.sourceNormalizers=[];Aa.sourceFetchers=[];var ac={dataType:"json",cache:false},bc=1;Aa.addDays=ba;Aa.cloneDate=N;Aa.parseDate=kb;Aa.parseISO8601=
+Bb;Aa.parseTime=mb;Aa.formatDate=Oa;Aa.formatDates=ib;var lc=["sun","mon","tue","wed","thu","fri","sat"],Ab=864E5,cc=36E5,wc=6E4,dc={s:function(a){return a.getSeconds()},ss:function(a){return Pa(a.getSeconds())},m:function(a){return a.getMinutes()},mm:function(a){return Pa(a.getMinutes())},h:function(a){return a.getHours()%12||12},hh:function(a){return Pa(a.getHours()%12||12)},H:function(a){return a.getHours()},HH:function(a){return Pa(a.getHours())},d:function(a){return a.getDate()},dd:function(a){return Pa(a.getDate())},
+ddd:function(a,b){return b.dayNamesShort[a.getDay()]},dddd:function(a,b){return b.dayNames[a.getDay()]},M:function(a){return a.getMonth()+1},MM:function(a){return Pa(a.getMonth()+1)},MMM:function(a,b){return b.monthNamesShort[a.getMonth()]},MMMM:function(a,b){return b.monthNames[a.getMonth()]},yy:function(a){return(a.getFullYear()+"").substring(2)},yyyy:function(a){return a.getFullYear()},t:function(a){return a.getHours()<12?"a":"p"},tt:function(a){return a.getHours()<12?"am":"pm"},T:function(a){return a.getHours()<
+12?"A":"P"},TT:function(a){return a.getHours()<12?"AM":"PM"},u:function(a){return Oa(a,"yyyy-MM-dd'T'HH:mm:ss'Z'")},S:function(a){a=a.getDate();if(a>10&&a<20)return"th";return["st","nd","rd"][a%10-1]||"th"}};Aa.applyAll=$a;Ja.month=mc;Ja.basicWeek=nc;Ja.basicDay=oc;wb({weekMode:"fixed"});Ja.agendaWeek=qc;Ja.agendaDay=rc;wb({allDaySlot:true,allDayText:"all-day",firstHour:6,slotMinutes:30,defaultEventMinutes:120,axisFormat:"h(:mm)tt",timeFormat:{agenda:"h:mm{ - h:mm}"},dragOpacity:{agenda:0.5},minTime:0,
+maxTime:24})})(jQuery);
diff --git a/mod/event_calendar/views/default/js/event_calendar/fullcalendar.php b/mod/event_calendar/views/default/js/event_calendar/fullcalendar.php
new file mode 100644
index 000000000..d0321f64b
--- /dev/null
+++ b/mod/event_calendar/views/default/js/event_calendar/fullcalendar.php
@@ -0,0 +1,5227 @@
+//<script>
+/**
+ * @preserve
+ * FullCalendar v1.5.3
+ * http://arshaw.com/fullcalendar/
+ *
+ * Use fullcalendar.css for basic styling.
+ * For event drag & drop, requires jQuery UI draggable.
+ * For event resizing, requires jQuery UI resizable.
+ *
+ * Copyright (c) 2011 Adam Shaw
+ * Dual licensed under the MIT and GPL licenses, located in
+ * MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
+ *
+ * Date: Mon Feb 6 22:40:40 2012 -0800
+ *
+ */
+
+(function($, undefined) {
+
+
+var defaults = {
+
+ // display
+ defaultView: 'month',
+ aspectRatio: 1.35,
+ header: {
+ left: 'title',
+ center: '',
+ right: 'today prev,next'
+ },
+ weekends: true,
+
+ // editing
+ //editable: false,
+ //disableDragging: false,
+ //disableResizing: false,
+
+ allDayDefault: true,
+ ignoreTimezone: true,
+
+ // event ajax
+ lazyFetching: true,
+ startParam: 'start',
+ endParam: 'end',
+
+ // time formats
+ titleFormat: {
+ month: 'MMMM yyyy',
+ week: "MMM d[ yyyy]{ '&#8212;'[ MMM] d yyyy}",
+ day: 'dddd, MMM d, yyyy'
+ },
+ columnFormat: {
+ month: 'ddd',
+ week: 'ddd M/d',
+ day: 'dddd M/d'
+ },
+ timeFormat: { // for event elements
+ '': 'h(:mm)t' // default
+ },
+
+ // locale
+ isRTL: false,
+ firstDay: 0,
+ 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'],
+ buttonText: {
+ prev: '&nbsp;&#9668;&nbsp;',
+ next: '&nbsp;&#9658;&nbsp;',
+ prevYear: '&nbsp;&lt;&lt;&nbsp;',
+ nextYear: '&nbsp;&gt;&gt;&nbsp;',
+ today: 'today',
+ month: 'month',
+ week: 'week',
+ day: 'day'
+ },
+
+ // jquery-ui theming
+ theme: false,
+ buttonIcons: {
+ prev: 'circle-triangle-w',
+ next: 'circle-triangle-e'
+ },
+
+ //selectable: false,
+ unselectAuto: true,
+
+ dropAccept: '*'
+
+};
+
+// right-to-left defaults
+var rtlDefaults = {
+ header: {
+ left: 'next,prev today',
+ center: '',
+ right: 'title'
+ },
+ buttonText: {
+ prev: '&nbsp;&#9658;&nbsp;',
+ next: '&nbsp;&#9668;&nbsp;',
+ prevYear: '&nbsp;&gt;&gt;&nbsp;',
+ nextYear: '&nbsp;&lt;&lt;&nbsp;'
+ },
+ buttonIcons: {
+ prev: 'circle-triangle-e',
+ next: 'circle-triangle-w'
+ }
+};
+
+
+
+var fc = $.fullCalendar = { version: "1.5.3" };
+var fcViews = fc.views = {};
+
+
+$.fn.fullCalendar = function(options) {
+
+
+ // method calling
+ if (typeof options == 'string') {
+ var args = Array.prototype.slice.call(arguments, 1);
+ var res;
+ this.each(function() {
+ var calendar = $.data(this, 'fullCalendar');
+ if (calendar && $.isFunction(calendar[options])) {
+ var r = calendar[options].apply(calendar, args);
+ if (res === undefined) {
+ res = r;
+ }
+ if (options == 'destroy') {
+ $.removeData(this, 'fullCalendar');
+ }
+ }
+ });
+ if (res !== undefined) {
+ return res;
+ }
+ return this;
+ }
+
+
+ // would like to have this logic in EventManager, but needs to happen before options are recursively extended
+ var eventSources = options.eventSources || [];
+ delete options.eventSources;
+ if (options.events) {
+ eventSources.push(options.events);
+ delete options.events;
+ }
+
+
+ options = $.extend(true, {},
+ defaults,
+ (options.isRTL || options.isRTL===undefined && defaults.isRTL) ? rtlDefaults : {},
+ options
+ );
+
+
+ this.each(function(i, _element) {
+ var element = $(_element);
+ var calendar = new Calendar(element, options, eventSources);
+ element.data('fullCalendar', calendar); // TODO: look into memory leak implications
+ calendar.render();
+ });
+
+
+ return this;
+
+};
+
+
+// function for adding/overriding defaults
+function setDefaults(d) {
+ $.extend(true, defaults, d);
+}
+
+
+
+
+function Calendar(element, options, eventSources) {
+ var t = this;
+
+
+ // exports
+ t.options = options;
+ t.render = render;
+ t.destroy = destroy;
+ t.refetchEvents = refetchEvents;
+ t.reportEvents = reportEvents;
+ t.reportEventChange = reportEventChange;
+ t.rerenderEvents = rerenderEvents;
+ t.changeView = changeView;
+ t.select = select;
+ t.unselect = unselect;
+ t.prev = prev;
+ t.next = next;
+ t.prevYear = prevYear;
+ t.nextYear = nextYear;
+ t.today = today;
+ t.gotoDate = gotoDate;
+ t.incrementDate = incrementDate;
+ t.formatDate = function(format, date) { return formatDate(format, date, options) };
+ t.formatDates = function(format, date1, date2) { return formatDates(format, date1, date2, options) };
+ t.getDate = getDate;
+ t.getView = getView;
+ t.option = option;
+ t.trigger = trigger;
+
+
+ // imports
+ EventManager.call(t, options, eventSources);
+ var isFetchNeeded = t.isFetchNeeded;
+ var fetchEvents = t.fetchEvents;
+
+
+ // locals
+ var _element = element[0];
+ var header;
+ var headerElement;
+ var content;
+ var tm; // for making theme classes
+ var currentView;
+ var viewInstances = {};
+ var elementOuterWidth;
+ var suggestedViewHeight;
+ var absoluteViewElement;
+ var resizeUID = 0;
+ var ignoreWindowResize = 0;
+ var date = new Date();
+ var events = [];
+ var _dragElement;
+
+
+
+ /* Main Rendering
+ -----------------------------------------------------------------------------*/
+
+
+ setYMD(date, options.year, options.month, options.date);
+
+
+ function render(inc) {
+ if (!content) {
+ initialRender();
+ }else{
+ calcSize();
+ markSizesDirty();
+ markEventsDirty();
+ renderView(inc);
+ }
+ }
+
+
+ function initialRender() {
+ tm = options.theme ? 'ui' : 'fc';
+ element.addClass('fc');
+ if (options.isRTL) {
+ element.addClass('fc-rtl');
+ }
+ if (options.theme) {
+ element.addClass('ui-widget');
+ }
+ content = $("<div class='fc-content' style='position:relative'/>")
+ .prependTo(element);
+ header = new Header(t, options);
+ headerElement = header.render();
+ if (headerElement) {
+ element.prepend(headerElement);
+ }
+ changeView(options.defaultView);
+ $(window).resize(windowResize);
+ // needed for IE in a 0x0 iframe, b/c when it is resized, never triggers a windowResize
+ if (!bodyVisible()) {
+ lateRender();
+ }
+ }
+
+
+ // called when we know the calendar couldn't be rendered when it was initialized,
+ // but we think it's ready now
+ function lateRender() {
+ setTimeout(function() { // IE7 needs this so dimensions are calculated correctly
+ if (!currentView.start && bodyVisible()) { // !currentView.start makes sure this never happens more than once
+ renderView();
+ }
+ },0);
+ }
+
+
+ function destroy() {
+ $(window).unbind('resize', windowResize);
+ header.destroy();
+ content.remove();
+ element.removeClass('fc fc-rtl ui-widget');
+ }
+
+
+
+ function elementVisible() {
+ return _element.offsetWidth !== 0;
+ }
+
+
+ function bodyVisible() {
+ return $('body')[0].offsetWidth !== 0;
+ }
+
+
+
+ /* View Rendering
+ -----------------------------------------------------------------------------*/
+
+ // TODO: improve view switching (still weird transition in IE, and FF has whiteout problem)
+
+ function changeView(newViewName) {
+ if (!currentView || newViewName != currentView.name) {
+ ignoreWindowResize++; // because setMinHeight might change the height before render (and subsequently setSize) is reached
+
+ unselect();
+
+ var oldView = currentView;
+ var newViewElement;
+
+ if (oldView) {
+ (oldView.beforeHide || noop)(); // called before changing min-height. if called after, scroll state is reset (in Opera)
+ setMinHeight(content, content.height());
+ oldView.element.hide();
+ }else{
+ setMinHeight(content, 1); // needs to be 1 (not 0) for IE7, or else view dimensions miscalculated
+ }
+ content.css('overflow', 'hidden');
+
+ currentView = viewInstances[newViewName];
+ if (currentView) {
+ currentView.element.show();
+ }else{
+ currentView = viewInstances[newViewName] = new fcViews[newViewName](
+ newViewElement = absoluteViewElement =
+ $("<div class='fc-view fc-view-" + newViewName + "' style='position:absolute'/>")
+ .appendTo(content),
+ t // the calendar object
+ );
+ }
+
+ if (oldView) {
+ header.deactivateButton(oldView.name);
+ }
+ header.activateButton(newViewName);
+
+ renderView(); // after height has been set, will make absoluteViewElement's position=relative, then set to null
+
+ content.css('overflow', '');
+ if (oldView) {
+ setMinHeight(content, 1);
+ }
+
+ if (!newViewElement) {
+ (currentView.afterShow || noop)(); // called after setting min-height/overflow, so in final scroll state (for Opera)
+ }
+
+ ignoreWindowResize--;
+ }
+ }
+
+
+
+ function renderView(inc) {
+ if (elementVisible()) {
+ ignoreWindowResize++; // because renderEvents might temporarily change the height before setSize is reached
+
+ unselect();
+
+ if (suggestedViewHeight === undefined) {
+ calcSize();
+ }
+
+ var forceEventRender = false;
+ if (!currentView.start || inc || date < currentView.start || date >= currentView.end) {
+ // view must render an entire new date range (and refetch/render events)
+ currentView.render(date, inc || 0); // responsible for clearing events
+ setSize(true);
+ forceEventRender = true;
+ }
+ else if (currentView.sizeDirty) {
+ // view must resize (and rerender events)
+ currentView.clearEvents();
+ setSize();
+ forceEventRender = true;
+ }
+ else if (currentView.eventsDirty) {
+ currentView.clearEvents();
+ forceEventRender = true;
+ }
+ currentView.sizeDirty = false;
+ currentView.eventsDirty = false;
+ updateEvents(forceEventRender);
+
+ elementOuterWidth = element.outerWidth();
+
+ header.updateTitle(currentView.title);
+ var today = new Date();
+ if (today >= currentView.start && today < currentView.end) {
+ header.disableButton('today');
+ }else{
+ header.enableButton('today');
+ }
+
+ ignoreWindowResize--;
+ currentView.trigger('viewDisplay', _element);
+ }
+ }
+
+
+
+ /* Resizing
+ -----------------------------------------------------------------------------*/
+
+
+ function updateSize() {
+ markSizesDirty();
+ if (elementVisible()) {
+ calcSize();
+ setSize();
+ unselect();
+ currentView.clearEvents();
+ currentView.renderEvents(events);
+ currentView.sizeDirty = false;
+ }
+ }
+
+
+ function markSizesDirty() {
+ $.each(viewInstances, function(i, inst) {
+ inst.sizeDirty = true;
+ });
+ }
+
+
+ function calcSize() {
+ if (options.contentHeight) {
+ suggestedViewHeight = options.contentHeight;
+ }
+ else if (options.height) {
+ suggestedViewHeight = options.height - (headerElement ? headerElement.height() : 0) - vsides(content);
+ }
+ else {
+ suggestedViewHeight = Math.round(content.width() / Math.max(options.aspectRatio, .5));
+ }
+ }
+
+
+ function setSize(dateChanged) { // todo: dateChanged?
+ ignoreWindowResize++;
+ currentView.setHeight(suggestedViewHeight, dateChanged);
+ if (absoluteViewElement) {
+ absoluteViewElement.css('position', 'relative');
+ absoluteViewElement = null;
+ }
+ currentView.setWidth(content.width(), dateChanged);
+ ignoreWindowResize--;
+ }
+
+
+ function windowResize() {
+ if (!ignoreWindowResize) {
+ if (currentView.start) { // view has already been rendered
+ var uid = ++resizeUID;
+ setTimeout(function() { // add a delay
+ if (uid == resizeUID && !ignoreWindowResize && elementVisible()) {
+ if (elementOuterWidth != (elementOuterWidth = element.outerWidth())) {
+ ignoreWindowResize++; // in case the windowResize callback changes the height
+ updateSize();
+ currentView.trigger('windowResize', _element);
+ ignoreWindowResize--;
+ }
+ }
+ }, 200);
+ }else{
+ // calendar must have been initialized in a 0x0 iframe that has just been resized
+ lateRender();
+ }
+ }
+ }
+
+
+
+ /* Event Fetching/Rendering
+ -----------------------------------------------------------------------------*/
+
+
+ // fetches events if necessary, rerenders events if necessary (or if forced)
+ function updateEvents(forceRender) {
+ if (!options.lazyFetching || isFetchNeeded(currentView.visStart, currentView.visEnd)) {
+ refetchEvents();
+ }
+ else if (forceRender) {
+ rerenderEvents();
+ }
+ }
+
+
+ function refetchEvents() {
+ fetchEvents(currentView.visStart, currentView.visEnd); // will call reportEvents
+ }
+
+
+ // called when event data arrives
+ function reportEvents(_events) {
+ events = _events;
+ rerenderEvents();
+ }
+
+
+ // called when a single event's data has been changed
+ function reportEventChange(eventID) {
+ rerenderEvents(eventID);
+ }
+
+
+ // attempts to rerenderEvents
+ function rerenderEvents(modifiedEventID) {
+ markEventsDirty();
+ if (elementVisible()) {
+ currentView.clearEvents();
+ currentView.renderEvents(events, modifiedEventID);
+ currentView.eventsDirty = false;
+ }
+ }
+
+
+ function markEventsDirty() {
+ $.each(viewInstances, function(i, inst) {
+ inst.eventsDirty = true;
+ });
+ }
+
+
+
+ /* Selection
+ -----------------------------------------------------------------------------*/
+
+
+ function select(start, end, allDay) {
+ currentView.select(start, end, allDay===undefined ? true : allDay);
+ }
+
+
+ function unselect() { // safe to be called before renderView
+ if (currentView) {
+ currentView.unselect();
+ }
+ }
+
+
+
+ /* Date
+ -----------------------------------------------------------------------------*/
+
+
+ function prev() {
+ renderView(-1);
+ }
+
+
+ function next() {
+ renderView(1);
+ }
+
+
+ function prevYear() {
+ addYears(date, -1);
+ renderView();
+ }
+
+
+ function nextYear() {
+ addYears(date, 1);
+ renderView();
+ }
+
+
+ function today() {
+ date = new Date();
+ renderView();
+ }
+
+
+ function gotoDate(year, month, dateOfMonth) {
+ if (year instanceof Date) {
+ date = cloneDate(year); // provided 1 argument, a Date
+ }else{
+ setYMD(date, year, month, dateOfMonth);
+ }
+ renderView();
+ }
+
+
+ function incrementDate(years, months, days) {
+ if (years !== undefined) {
+ addYears(date, years);
+ }
+ if (months !== undefined) {
+ addMonths(date, months);
+ }
+ if (days !== undefined) {
+ addDays(date, days);
+ }
+ renderView();
+ }
+
+
+ function getDate() {
+ return cloneDate(date);
+ }
+
+
+
+ /* Misc
+ -----------------------------------------------------------------------------*/
+
+
+ function getView() {
+ return currentView;
+ }
+
+
+ function option(name, value) {
+ if (value === undefined) {
+ return options[name];
+ }
+ if (name == 'height' || name == 'contentHeight' || name == 'aspectRatio') {
+ options[name] = value;
+ updateSize();
+ }
+ }
+
+
+ function trigger(name, thisObj) {
+ if (options[name]) {
+ return options[name].apply(
+ thisObj || _element,
+ Array.prototype.slice.call(arguments, 2)
+ );
+ }
+ }
+
+
+
+ /* External Dragging
+ ------------------------------------------------------------------------*/
+
+ if (options.droppable) {
+ $(document)
+ .bind('dragstart', function(ev, ui) {
+ var _e = ev.target;
+ var e = $(_e);
+ if (!e.parents('.fc').length) { // not already inside a calendar
+ var accept = options.dropAccept;
+ if ($.isFunction(accept) ? accept.call(_e, e) : e.is(accept)) {
+ _dragElement = _e;
+ currentView.dragStart(_dragElement, ev, ui);
+ }
+ }
+ })
+ .bind('dragstop', function(ev, ui) {
+ if (_dragElement) {
+ currentView.dragStop(_dragElement, ev, ui);
+ _dragElement = null;
+ }
+ });
+ }
+
+
+}
+
+function Header(calendar, options) {
+ var t = this;
+
+
+ // exports
+ t.render = render;
+ t.destroy = destroy;
+ t.updateTitle = updateTitle;
+ t.activateButton = activateButton;
+ t.deactivateButton = deactivateButton;
+ t.disableButton = disableButton;
+ t.enableButton = enableButton;
+
+
+ // locals
+ var element = $([]);
+ var tm;
+
+
+
+ function render() {
+ tm = options.theme ? 'ui' : 'fc';
+ var sections = options.header;
+ if (sections) {
+ element = $("<table class='fc-header' style='width:100%'/>")
+ .append(
+ $("<tr/>")
+ .append(renderSection('left'))
+ .append(renderSection('center'))
+ .append(renderSection('right'))
+ );
+ return element;
+ }
+ }
+
+
+ function destroy() {
+ element.remove();
+ }
+
+
+ function renderSection(position) {
+ var e = $("<td class='fc-header-" + position + "'/>");
+ var buttonStr = options.header[position];
+ if (buttonStr) {
+ $.each(buttonStr.split(' '), function(i) {
+ if (i > 0) {
+ e.append("<span class='fc-header-space'/>");
+ }
+ var prevButton;
+ $.each(this.split(','), function(j, buttonName) {
+ if (buttonName == 'title') {
+ e.append("<span class='fc-header-title'><h2>&nbsp;</h2></span>");
+ if (prevButton) {
+ prevButton.addClass(tm + '-corner-right');
+ }
+ prevButton = null;
+ }else{
+ var buttonClick;
+ if (calendar[buttonName]) {
+ buttonClick = calendar[buttonName]; // calendar method
+ }
+ else if (fcViews[buttonName]) {
+ buttonClick = function() {
+ button.removeClass(tm + '-state-hover'); // forget why
+ calendar.changeView(buttonName);
+ };
+ }
+ if (buttonClick) {
+ var icon = options.theme ? smartProperty(options.buttonIcons, buttonName) : null; // why are we using smartProperty here?
+ var text = smartProperty(options.buttonText, buttonName); // why are we using smartProperty here?
+ var button = $(
+ "<span class='fc-button fc-button-" + buttonName + " " + tm + "-state-default'>" +
+ "<span class='fc-button-inner'>" +
+ "<span class='fc-button-content'>" +
+ (icon ?
+ "<span class='fc-icon-wrap'>" +
+ "<span class='ui-icon ui-icon-" + icon + "'/>" +
+ "</span>" :
+ text
+ ) +
+ "</span>" +
+ "<span class='fc-button-effect'><span></span></span>" +
+ "</span>" +
+ "</span>"
+ );
+ if (button) {
+ button
+ .click(function() {
+ if (!button.hasClass(tm + '-state-disabled')) {
+ buttonClick();
+ }
+ })
+ .mousedown(function() {
+ button
+ .not('.' + tm + '-state-active')
+ .not('.' + tm + '-state-disabled')
+ .addClass(tm + '-state-down');
+ })
+ .mouseup(function() {
+ button.removeClass(tm + '-state-down');
+ })
+ .hover(
+ function() {
+ button
+ .not('.' + tm + '-state-active')
+ .not('.' + tm + '-state-disabled')
+ .addClass(tm + '-state-hover');
+ },
+ function() {
+ button
+ .removeClass(tm + '-state-hover')
+ .removeClass(tm + '-state-down');
+ }
+ )
+ .appendTo(e);
+ if (!prevButton) {
+ button.addClass(tm + '-corner-left');
+ }
+ prevButton = button;
+ }
+ }
+ }
+ });
+ if (prevButton) {
+ prevButton.addClass(tm + '-corner-right');
+ }
+ });
+ }
+ return e;
+ }
+
+
+ function updateTitle(html) {
+ element.find('h2')
+ .html(html);
+ }
+
+
+ function activateButton(buttonName) {
+ element.find('span.fc-button-' + buttonName)
+ .addClass(tm + '-state-active');
+ }
+
+
+ function deactivateButton(buttonName) {
+ element.find('span.fc-button-' + buttonName)
+ .removeClass(tm + '-state-active');
+ }
+
+
+ function disableButton(buttonName) {
+ element.find('span.fc-button-' + buttonName)
+ .addClass(tm + '-state-disabled');
+ }
+
+
+ function enableButton(buttonName) {
+ element.find('span.fc-button-' + buttonName)
+ .removeClass(tm + '-state-disabled');
+ }
+
+
+}
+
+fc.sourceNormalizers = [];
+fc.sourceFetchers = [];
+
+var ajaxDefaults = {
+ dataType: 'json',
+ cache: false
+};
+
+var eventGUID = 1;
+
+
+function EventManager(options, _sources) {
+ var t = this;
+
+
+ // exports
+ t.isFetchNeeded = isFetchNeeded;
+ t.fetchEvents = fetchEvents;
+ t.addEventSource = addEventSource;
+ t.removeEventSource = removeEventSource;
+ t.updateEvent = updateEvent;
+ t.renderEvent = renderEvent;
+ t.removeEvents = removeEvents;
+ t.clientEvents = clientEvents;
+ t.normalizeEvent = normalizeEvent;
+
+
+ // imports
+ var trigger = t.trigger;
+ var getView = t.getView;
+ var reportEvents = t.reportEvents;
+
+
+ // locals
+ var stickySource = { events: [] };
+ var sources = [ stickySource ];
+ var rangeStart, rangeEnd;
+ var currentFetchID = 0;
+ var pendingSourceCnt = 0;
+ var loadingLevel = 0;
+ var cache = [];
+
+
+ for (var i=0; i<_sources.length; i++) {
+ _addEventSource(_sources[i]);
+ }
+
+
+
+ /* Fetching
+ -----------------------------------------------------------------------------*/
+
+
+ function isFetchNeeded(start, end) {
+ return !rangeStart || start < rangeStart || end > rangeEnd;
+ }
+
+
+ function fetchEvents(start, end) {
+ rangeStart = start;
+ rangeEnd = end;
+ cache = [];
+ var fetchID = ++currentFetchID;
+ var len = sources.length;
+ pendingSourceCnt = len;
+ for (var i=0; i<len; i++) {
+ fetchEventSource(sources[i], fetchID);
+ }
+ }
+
+
+ function fetchEventSource(source, fetchID) {
+ _fetchEventSource(source, function(events) {
+ if (fetchID == currentFetchID) {
+ if (events) {
+ for (var i=0; i<events.length; i++) {
+ events[i].source = source;
+ normalizeEvent(events[i]);
+ }
+ cache = cache.concat(events);
+ }
+ pendingSourceCnt--;
+ if (!pendingSourceCnt) {
+ reportEvents(cache);
+ }
+ }
+ });
+ }
+
+
+ function _fetchEventSource(source, callback) {
+ var i;
+ var fetchers = fc.sourceFetchers;
+ var res;
+ for (i=0; i<fetchers.length; i++) {
+ res = fetchers[i](source, rangeStart, rangeEnd, callback);
+ if (res === true) {
+ // the fetcher is in charge. made its own async request
+ return;
+ }
+ else if (typeof res == 'object') {
+ // the fetcher returned a new source. process it
+ _fetchEventSource(res, callback);
+ return;
+ }
+ }
+ var events = source.events;
+ if (events) {
+ if ($.isFunction(events)) {
+ pushLoading();
+ events(cloneDate(rangeStart), cloneDate(rangeEnd), function(events) {
+ callback(events);
+ popLoading();
+ });
+ }
+ else if ($.isArray(events)) {
+ callback(events);
+ }
+ else {
+ callback();
+ }
+ }else{
+ var url = source.url;
+ if (url) {
+ var success = source.success;
+ var error = source.error;
+ var complete = source.complete;
+ var data = $.extend({}, source.data || {});
+ var startParam = firstDefined(source.startParam, options.startParam);
+ var endParam = firstDefined(source.endParam, options.endParam);
+ if (startParam) {
+ data[startParam] = Math.round(+rangeStart / 1000);
+ }
+ if (endParam) {
+ data[endParam] = Math.round(+rangeEnd / 1000);
+ }
+ pushLoading();
+ $.ajax($.extend({}, ajaxDefaults, source, {
+ data: data,
+ success: function(events) {
+ events = events || [];
+ var res = applyAll(success, this, arguments);
+ if ($.isArray(res)) {
+ events = res;
+ }
+ callback(events);
+ },
+ error: function() {
+ applyAll(error, this, arguments);
+ callback();
+ },
+ complete: function() {
+ applyAll(complete, this, arguments);
+ popLoading();
+ }
+ }));
+ }else{
+ callback();
+ }
+ }
+ }
+
+
+
+ /* Sources
+ -----------------------------------------------------------------------------*/
+
+
+ function addEventSource(source) {
+ source = _addEventSource(source);
+ if (source) {
+ pendingSourceCnt++;
+ fetchEventSource(source, currentFetchID); // will eventually call reportEvents
+ }
+ }
+
+
+ function _addEventSource(source) {
+ if ($.isFunction(source) || $.isArray(source)) {
+ source = { events: source };
+ }
+ else if (typeof source == 'string') {
+ source = { url: source };
+ }
+ if (typeof source == 'object') {
+ normalizeSource(source);
+ sources.push(source);
+ return source;
+ }
+ }
+
+
+ function removeEventSource(source) {
+ sources = $.grep(sources, function(src) {
+ return !isSourcesEqual(src, source);
+ });
+ // remove all client events from that source
+ cache = $.grep(cache, function(e) {
+ return !isSourcesEqual(e.source, source);
+ });
+ reportEvents(cache);
+ }
+
+
+
+ /* Manipulation
+ -----------------------------------------------------------------------------*/
+
+
+ function updateEvent(event) { // update an existing event
+ var i, len = cache.length, e,
+ defaultEventEnd = getView().defaultEventEnd, // getView???
+ startDelta = event.start - event._start,
+ endDelta = event.end ?
+ (event.end - (event._end || defaultEventEnd(event))) // event._end would be null if event.end
+ : 0; // was null and event was just resized
+ for (i=0; i<len; i++) {
+ e = cache[i];
+ if (e._id == event._id && e != event) {
+ e.start = new Date(+e.start + startDelta);
+ if (event.end) {
+ if (e.end) {
+ e.end = new Date(+e.end + endDelta);
+ }else{
+ e.end = new Date(+defaultEventEnd(e) + endDelta);
+ }
+ }else{
+ e.end = null;
+ }
+ e.title = event.title;
+ e.url = event.url;
+ e.allDay = event.allDay;
+ e.className = event.className;
+ e.editable = event.editable;
+ e.color = event.color;
+ e.backgroudColor = event.backgroudColor;
+ e.borderColor = event.borderColor;
+ e.textColor = event.textColor;
+ normalizeEvent(e);
+ }
+ }
+ normalizeEvent(event);
+ reportEvents(cache);
+ }
+
+
+ function renderEvent(event, stick) {
+ normalizeEvent(event);
+ if (!event.source) {
+ if (stick) {
+ stickySource.events.push(event);
+ event.source = stickySource;
+ }
+ cache.push(event);
+ }
+ reportEvents(cache);
+ }
+
+
+ function removeEvents(filter) {
+ if (!filter) { // remove all
+ cache = [];
+ // clear all array sources
+ for (var i=0; i<sources.length; i++) {
+ if ($.isArray(sources[i].events)) {
+ sources[i].events = [];
+ }
+ }
+ }else{
+ if (!$.isFunction(filter)) { // an event ID
+ var id = filter + '';
+ filter = function(e) {
+ return e._id == id;
+ };
+ }
+ cache = $.grep(cache, filter, true);
+ // remove events from array sources
+ for (var i=0; i<sources.length; i++) {
+ if ($.isArray(sources[i].events)) {
+ sources[i].events = $.grep(sources[i].events, filter, true);
+ }
+ }
+ }
+ reportEvents(cache);
+ }
+
+
+ function clientEvents(filter) {
+ if ($.isFunction(filter)) {
+ return $.grep(cache, filter);
+ }
+ else if (filter) { // an event ID
+ filter += '';
+ return $.grep(cache, function(e) {
+ return e._id == filter;
+ });
+ }
+ return cache; // else, return all
+ }
+
+
+
+ /* Loading State
+ -----------------------------------------------------------------------------*/
+
+
+ function pushLoading() {
+ if (!loadingLevel++) {
+ trigger('loading', null, true);
+ }
+ }
+
+
+ function popLoading() {
+ if (!--loadingLevel) {
+ trigger('loading', null, false);
+ }
+ }
+
+
+
+ /* Event Normalization
+ -----------------------------------------------------------------------------*/
+
+
+ function normalizeEvent(event) {
+ var source = event.source || {};
+ var ignoreTimezone = firstDefined(source.ignoreTimezone, options.ignoreTimezone);
+ event._id = event._id || (event.id === undefined ? '_fc' + eventGUID++ : event.id + '');
+ if (event.date) {
+ if (!event.start) {
+ event.start = event.date;
+ }
+ delete event.date;
+ }
+ event._start = cloneDate(event.start = parseDate(event.start, ignoreTimezone));
+ event.end = parseDate(event.end, ignoreTimezone);
+ if (event.end && event.end <= event.start) {
+ event.end = null;
+ }
+ event._end = event.end ? cloneDate(event.end) : null;
+ if (event.allDay === undefined) {
+ event.allDay = firstDefined(source.allDayDefault, options.allDayDefault);
+ }
+ if (event.className) {
+ if (typeof event.className == 'string') {
+ event.className = event.className.split(/\s+/);
+ }
+ }else{
+ event.className = [];
+ }
+ // TODO: if there is no start date, return false to indicate an invalid event
+ }
+
+
+
+ /* Utils
+ ------------------------------------------------------------------------------*/
+
+
+ function normalizeSource(source) {
+ if (source.className) {
+ // TODO: repeat code, same code for event classNames
+ if (typeof source.className == 'string') {
+ source.className = source.className.split(/\s+/);
+ }
+ }else{
+ source.className = [];
+ }
+ var normalizers = fc.sourceNormalizers;
+ for (var i=0; i<normalizers.length; i++) {
+ normalizers[i](source);
+ }
+ }
+
+
+ function isSourcesEqual(source1, source2) {
+ return source1 && source2 && getSourcePrimitive(source1) == getSourcePrimitive(source2);
+ }
+
+
+ function getSourcePrimitive(source) {
+ return ((typeof source == 'object') ? (source.events || source.url) : '') || source;
+ }
+
+
+}
+
+
+fc.addDays = addDays;
+fc.cloneDate = cloneDate;
+fc.parseDate = parseDate;
+fc.parseISO8601 = parseISO8601;
+fc.parseTime = parseTime;
+fc.formatDate = formatDate;
+fc.formatDates = formatDates;
+
+
+
+/* Date Math
+-----------------------------------------------------------------------------*/
+
+var dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'],
+ DAY_MS = 86400000,
+ HOUR_MS = 3600000,
+ MINUTE_MS = 60000;
+
+
+function addYears(d, n, keepTime) {
+ d.setFullYear(d.getFullYear() + n);
+ if (!keepTime) {
+ clearTime(d);
+ }
+ return d;
+}
+
+
+function addMonths(d, n, keepTime) { // prevents day overflow/underflow
+ if (+d) { // prevent infinite looping on invalid dates
+ var m = d.getMonth() + n,
+ check = cloneDate(d);
+ check.setDate(1);
+ check.setMonth(m);
+ d.setMonth(m);
+ if (!keepTime) {
+ clearTime(d);
+ }
+ while (d.getMonth() != check.getMonth()) {
+ d.setDate(d.getDate() + (d < check ? 1 : -1));
+ }
+ }
+ return d;
+}
+
+
+function addDays(d, n, keepTime) { // deals with daylight savings
+ if (+d) {
+ var dd = d.getDate() + n,
+ check = cloneDate(d);
+ check.setHours(9); // set to middle of day
+ check.setDate(dd);
+ d.setDate(dd);
+ if (!keepTime) {
+ clearTime(d);
+ }
+ fixDate(d, check);
+ }
+ return d;
+}
+
+
+function fixDate(d, check) { // force d to be on check's YMD, for daylight savings purposes
+ if (+d) { // prevent infinite looping on invalid dates
+ while (d.getDate() != check.getDate()) {
+ d.setTime(+d + (d < check ? 1 : -1) * HOUR_MS);
+ }
+ }
+}
+
+
+function addMinutes(d, n) {
+ d.setMinutes(d.getMinutes() + n);
+ return d;
+}
+
+
+function clearTime(d) {
+ d.setHours(0);
+ d.setMinutes(0);
+ d.setSeconds(0);
+ d.setMilliseconds(0);
+ return d;
+}
+
+
+function cloneDate(d, dontKeepTime) {
+ if (dontKeepTime) {
+ return clearTime(new Date(+d));
+ }
+ return new Date(+d);
+}
+
+
+function zeroDate() { // returns a Date with time 00:00:00 and dateOfMonth=1
+ var i=0, d;
+ do {
+ d = new Date(1970, i++, 1);
+ } while (d.getHours()); // != 0
+ return d;
+}
+
+
+function skipWeekend(date, inc, excl) {
+ inc = inc || 1;
+ while (!date.getDay() || (excl && date.getDay()==1 || !excl && date.getDay()==6)) {
+ addDays(date, inc);
+ }
+ return date;
+}
+
+
+function dayDiff(d1, d2) { // d1 - d2
+ return Math.round((cloneDate(d1, true) - cloneDate(d2, true)) / DAY_MS);
+}
+
+
+function setYMD(date, y, m, d) {
+ if (y !== undefined && y != date.getFullYear()) {
+ date.setDate(1);
+ date.setMonth(0);
+ date.setFullYear(y);
+ }
+ if (m !== undefined && m != date.getMonth()) {
+ date.setDate(1);
+ date.setMonth(m);
+ }
+ if (d !== undefined) {
+ date.setDate(d);
+ }
+}
+
+
+
+/* Date Parsing
+-----------------------------------------------------------------------------*/
+
+
+function parseDate(s, ignoreTimezone) { // ignoreTimezone defaults to true
+ if (typeof s == 'object') { // already a Date object
+ return s;
+ }
+ if (typeof s == 'number') { // a UNIX timestamp
+ return new Date(s * 1000);
+ }
+ if (typeof s == 'string') {
+ if (s.match(/^\d+(\.\d+)?$/)) { // a UNIX timestamp
+ return new Date(parseFloat(s) * 1000);
+ }
+ if (ignoreTimezone === undefined) {
+ ignoreTimezone = true;
+ }
+ return parseISO8601(s, ignoreTimezone) || (s ? new Date(s) : null);
+ }
+ // TODO: never return invalid dates (like from new Date(<string>)), return null instead
+ return null;
+}
+
+
+function parseISO8601(s, ignoreTimezone) { // ignoreTimezone defaults to false
+ // derived from http://delete.me.uk/2005/03/iso8601.html
+ // TODO: for a know glitch/feature, read tests/issue_206_parseDate_dst.html
+ var m = s.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2})(:?([0-9]{2}))?))?)?)?)?$/);
+ if (!m) {
+ return null;
+ }
+ var date = new Date(m[1], 0, 1);
+ if (ignoreTimezone || !m[13]) {
+ var check = new Date(m[1], 0, 1, 9, 0);
+ if (m[3]) {
+ date.setMonth(m[3] - 1);
+ check.setMonth(m[3] - 1);
+ }
+ if (m[5]) {
+ date.setDate(m[5]);
+ check.setDate(m[5]);
+ }
+ fixDate(date, check);
+ if (m[7]) {
+ date.setHours(m[7]);
+ }
+ if (m[8]) {
+ date.setMinutes(m[8]);
+ }
+ if (m[10]) {
+ date.setSeconds(m[10]);
+ }
+ if (m[12]) {
+ date.setMilliseconds(Number("0." + m[12]) * 1000);
+ }
+ fixDate(date, check);
+ }else{
+ date.setUTCFullYear(
+ m[1],
+ m[3] ? m[3] - 1 : 0,
+ m[5] || 1
+ );
+ date.setUTCHours(
+ m[7] || 0,
+ m[8] || 0,
+ m[10] || 0,
+ m[12] ? Number("0." + m[12]) * 1000 : 0
+ );
+ if (m[14]) {
+ var offset = Number(m[16]) * 60 + (m[18] ? Number(m[18]) : 0);
+ offset *= m[15] == '-' ? 1 : -1;
+ date = new Date(+date + (offset * 60 * 1000));
+ }
+ }
+ return date;
+}
+
+
+function parseTime(s) { // returns minutes since start of day
+ if (typeof s == 'number') { // an hour
+ return s * 60;
+ }
+ if (typeof s == 'object') { // a Date object
+ return s.getHours() * 60 + s.getMinutes();
+ }
+ var m = s.match(/(\d+)(?::(\d+))?\s*(\w+)?/);
+ if (m) {
+ var h = parseInt(m[1], 10);
+ if (m[3]) {
+ h %= 12;
+ if (m[3].toLowerCase().charAt(0) == 'p') {
+ h += 12;
+ }
+ }
+ return h * 60 + (m[2] ? parseInt(m[2], 10) : 0);
+ }
+}
+
+
+
+/* Date Formatting
+-----------------------------------------------------------------------------*/
+// TODO: use same function formatDate(date, [date2], format, [options])
+
+
+function formatDate(date, format, options) {
+ return formatDates(date, null, format, options);
+}
+
+
+function formatDates(date1, date2, format, options) {
+ options = options || defaults;
+ var date = date1,
+ otherDate = date2,
+ i, len = format.length, c,
+ i2, formatter,
+ res = '';
+ for (i=0; i<len; i++) {
+ c = format.charAt(i);
+ if (c == "'") {
+ for (i2=i+1; i2<len; i2++) {
+ if (format.charAt(i2) == "'") {
+ if (date) {
+ if (i2 == i+1) {
+ res += "'";
+ }else{
+ res += format.substring(i+1, i2);
+ }
+ i = i2;
+ }
+ break;
+ }
+ }
+ }
+ else if (c == '(') {
+ for (i2=i+1; i2<len; i2++) {
+ if (format.charAt(i2) == ')') {
+ var subres = formatDate(date, format.substring(i+1, i2), options);
+ if (parseInt(subres.replace(/\D/, ''), 10)) {
+ res += subres;
+ }
+ i = i2;
+ break;
+ }
+ }
+ }
+ else if (c == '[') {
+ for (i2=i+1; i2<len; i2++) {
+ if (format.charAt(i2) == ']') {
+ var subformat = format.substring(i+1, i2);
+ var subres = formatDate(date, subformat, options);
+ if (subres != formatDate(otherDate, subformat, options)) {
+ res += subres;
+ }
+ i = i2;
+ break;
+ }
+ }
+ }
+ else if (c == '{') {
+ date = date2;
+ otherDate = date1;
+ }
+ else if (c == '}') {
+ date = date1;
+ otherDate = date2;
+ }
+ else {
+ for (i2=len; i2>i; i2--) {
+ if (formatter = dateFormatters[format.substring(i, i2)]) {
+ if (date) {
+ res += formatter(date, options);
+ }
+ i = i2 - 1;
+ break;
+ }
+ }
+ if (i2 == i) {
+ if (date) {
+ res += c;
+ }
+ }
+ }
+ }
+ return res;
+};
+
+
+var dateFormatters = {
+ s : function(d) { return d.getSeconds() },
+ ss : function(d) { return zeroPad(d.getSeconds()) },
+ m : function(d) { return d.getMinutes() },
+ mm : function(d) { return zeroPad(d.getMinutes()) },
+ h : function(d) { return d.getUTCHours() % 12 || 12 },
+ hh : function(d) { return zeroPad(d.getUTCHours() % 12 || 12) },
+ H : function(d) { return d.getUTCHours() },
+ HH : function(d) { return zeroPad(d.getUTCHours()) },
+ d : function(d) { return d.getDate() },
+ dd : function(d) { return zeroPad(d.getDate()) },
+ ddd : function(d,o) { return o.dayNamesShort[d.getDay()] },
+ dddd: function(d,o) { return o.dayNames[d.getDay()] },
+ M : function(d) { return d.getMonth() + 1 },
+ MM : function(d) { return zeroPad(d.getMonth() + 1) },
+ MMM : function(d,o) { return o.monthNamesShort[d.getMonth()] },
+ MMMM: function(d,o) { return o.monthNames[d.getMonth()] },
+ yy : function(d) { return (d.getFullYear()+'').substring(2) },
+ yyyy: function(d) { return d.getFullYear() },
+ t : function(d) { return d.getUTCHours() < 12 ? 'a' : 'p' },
+ tt : function(d) { return d.getUTCHours() < 12 ? 'am' : 'pm' },
+ T : function(d) { return d.getUTCHours() < 12 ? 'A' : 'P' },
+ TT : function(d) { return d.getUTCHours() < 12 ? 'AM' : 'PM' },
+ u : function(d) { return formatDate(d, "yyyy-MM-dd'T'HH:mm:ss'Z'") },
+ S : function(d) {
+ var date = d.getDate();
+ if (date > 10 && date < 20) {
+ return 'th';
+ }
+ return ['st', 'nd', 'rd'][date%10-1] || 'th';
+ }
+};
+
+
+
+fc.applyAll = applyAll;
+
+
+/* Event Date Math
+-----------------------------------------------------------------------------*/
+
+
+function exclEndDay(event) {
+ if (event.end) {
+ return _exclEndDay(event.end, event.allDay);
+ }else{
+ return addDays(cloneDate(event.start), 1);
+ }
+}
+
+
+function _exclEndDay(end, allDay) {
+ end = cloneDate(end);
+ return allDay || end.getHours() || end.getMinutes() ? addDays(end, 1) : clearTime(end);
+}
+
+
+function segCmp(a, b) {
+ return (b.msLength - a.msLength) * 100 + (a.event.start - b.event.start);
+}
+
+
+function segsCollide(seg1, seg2) {
+ return seg1.end > seg2.start && seg1.start < seg2.end;
+}
+
+
+
+/* Event Sorting
+-----------------------------------------------------------------------------*/
+
+
+// event rendering utilities
+function sliceSegs(events, visEventEnds, start, end) {
+ var segs = [],
+ i, len=events.length, event,
+ eventStart, eventEnd,
+ segStart, segEnd,
+ isStart, isEnd;
+ for (i=0; i<len; i++) {
+ event = events[i];
+ eventStart = event.start;
+ eventEnd = visEventEnds[i];
+ if (eventEnd > start && eventStart < end) {
+ if (eventStart < start) {
+ segStart = cloneDate(start);
+ isStart = false;
+ }else{
+ segStart = eventStart;
+ isStart = true;
+ }
+ if (eventEnd > end) {
+ segEnd = cloneDate(end);
+ isEnd = false;
+ }else{
+ segEnd = eventEnd;
+ isEnd = true;
+ }
+ segs.push({
+ event: event,
+ start: segStart,
+ end: segEnd,
+ isStart: isStart,
+ isEnd: isEnd,
+ msLength: segEnd - segStart
+ });
+ }
+ }
+ return segs.sort(segCmp);
+}
+
+
+// event rendering calculation utilities
+function stackSegs(segs) {
+ var levels = [],
+ i, len = segs.length, seg,
+ j, collide, k;
+ for (i=0; i<len; i++) {
+ seg = segs[i];
+ j = 0; // the level index where seg should belong
+ while (true) {
+ collide = false;
+ if (levels[j]) {
+ for (k=0; k<levels[j].length; k++) {
+ if (segsCollide(levels[j][k], seg)) {
+ collide = true;
+ break;
+ }
+ }
+ }
+ if (collide) {
+ j++;
+ }else{
+ break;
+ }
+ }
+ if (levels[j]) {
+ levels[j].push(seg);
+ }else{
+ levels[j] = [seg];
+ }
+ }
+ return levels;
+}
+
+
+
+/* Event Element Binding
+-----------------------------------------------------------------------------*/
+
+
+function lazySegBind(container, segs, bindHandlers) {
+ container.unbind('mouseover').mouseover(function(ev) {
+ var parent=ev.target, e,
+ i, seg;
+ while (parent != this) {
+ e = parent;
+ parent = parent.parentNode;
+ }
+ if ((i = e._fci) !== undefined) {
+ e._fci = undefined;
+ seg = segs[i];
+ bindHandlers(seg.event, seg.element, seg);
+ $(ev.target).trigger(ev);
+ }
+ ev.stopPropagation();
+ });
+}
+
+
+
+/* Element Dimensions
+-----------------------------------------------------------------------------*/
+
+
+function setOuterWidth(element, width, includeMargins) {
+ for (var i=0, e; i<element.length; i++) {
+ e = $(element[i]);
+ e.width(Math.max(0, width - hsides(e, includeMargins)));
+ }
+}
+
+
+function setOuterHeight(element, height, includeMargins) {
+ for (var i=0, e; i<element.length; i++) {
+ e = $(element[i]);
+ e.height(Math.max(0, height - vsides(e, includeMargins)));
+ }
+}
+
+
+// TODO: curCSS has been deprecated (jQuery 1.4.3 - 10/16/2010)
+
+
+function hsides(element, includeMargins) {
+ return hpadding(element) + hborders(element) + (includeMargins ? hmargins(element) : 0);
+}
+
+
+function hpadding(element) {
+ return (parseFloat($.curCSS(element[0], 'paddingLeft', true)) || 0) +
+ (parseFloat($.curCSS(element[0], 'paddingRight', true)) || 0);
+}
+
+
+function hmargins(element) {
+ return (parseFloat($.curCSS(element[0], 'marginLeft', true)) || 0) +
+ (parseFloat($.curCSS(element[0], 'marginRight', true)) || 0);
+}
+
+
+function hborders(element) {
+ return (parseFloat($.curCSS(element[0], 'borderLeftWidth', true)) || 0) +
+ (parseFloat($.curCSS(element[0], 'borderRightWidth', true)) || 0);
+}
+
+
+function vsides(element, includeMargins) {
+ return vpadding(element) + vborders(element) + (includeMargins ? vmargins(element) : 0);
+}
+
+
+function vpadding(element) {
+ return (parseFloat($.curCSS(element[0], 'paddingTop', true)) || 0) +
+ (parseFloat($.curCSS(element[0], 'paddingBottom', true)) || 0);
+}
+
+
+function vmargins(element) {
+ return (parseFloat($.curCSS(element[0], 'marginTop', true)) || 0) +
+ (parseFloat($.curCSS(element[0], 'marginBottom', true)) || 0);
+}
+
+
+function vborders(element) {
+ return (parseFloat($.curCSS(element[0], 'borderTopWidth', true)) || 0) +
+ (parseFloat($.curCSS(element[0], 'borderBottomWidth', true)) || 0);
+}
+
+
+function setMinHeight(element, height) {
+ height = (typeof height == 'number' ? height + 'px' : height);
+ element.each(function(i, _element) {
+ _element.style.cssText += ';min-height:' + height + ';_height:' + height;
+ // why can't we just use .css() ? i forget
+ });
+}
+
+
+
+/* Misc Utils
+-----------------------------------------------------------------------------*/
+
+
+//TODO: arraySlice
+//TODO: isFunction, grep ?
+
+
+function noop() { }
+
+
+function cmp(a, b) {
+ return a - b;
+}
+
+
+function arrayMax(a) {
+ return Math.max.apply(Math, a);
+}
+
+
+function zeroPad(n) {
+ return (n < 10 ? '0' : '') + n;
+}
+
+
+function smartProperty(obj, name) { // get a camel-cased/namespaced property of an object
+ if (obj[name] !== undefined) {
+ return obj[name];
+ }
+ var parts = name.split(/(?=[A-Z])/),
+ i=parts.length-1, res;
+ for (; i>=0; i--) {
+ res = obj[parts[i].toLowerCase()];
+ if (res !== undefined) {
+ return res;
+ }
+ }
+ return obj[''];
+}
+
+
+function htmlEscape(s) {
+ return s.replace(/&/g, '&amp;')
+ .replace(/</g, '&lt;')
+ .replace(/>/g, '&gt;')
+ .replace(/'/g, '&#039;')
+ .replace(/"/g, '&quot;')
+ .replace(/\n/g, '<br />');
+}
+
+
+function cssKey(_element) {
+ return _element.id + '/' + _element.className + '/' + _element.style.cssText.replace(/(^|;)\s*(top|left|width|height)\s*:[^;]*/ig, '');
+}
+
+
+function disableTextSelection(element) {
+ element
+ .attr('unselectable', 'on')
+ .css('MozUserSelect', 'none')
+ .bind('selectstart.ui', function() { return false; });
+}
+
+
+/*
+function enableTextSelection(element) {
+ element
+ .attr('unselectable', 'off')
+ .css('MozUserSelect', '')
+ .unbind('selectstart.ui');
+}
+*/
+
+
+function markFirstLast(e) {
+ e.children()
+ .removeClass('fc-first fc-last')
+ .filter(':first-child')
+ .addClass('fc-first')
+ .end()
+ .filter(':last-child')
+ .addClass('fc-last');
+}
+
+
+function setDayID(cell, date) {
+ cell.each(function(i, _cell) {
+ _cell.className = _cell.className.replace(/^fc-\w*/, 'fc-' + dayIDs[date.getDay()]);
+ // TODO: make a way that doesn't rely on order of classes
+ });
+}
+
+
+function getSkinCss(event, opt) {
+ var source = event.source || {};
+ var eventColor = event.color;
+ var sourceColor = source.color;
+ var optionColor = opt('eventColor');
+ var backgroundColor =
+ event.backgroundColor ||
+ eventColor ||
+ source.backgroundColor ||
+ sourceColor ||
+ opt('eventBackgroundColor') ||
+ optionColor;
+ var borderColor =
+ event.borderColor ||
+ eventColor ||
+ source.borderColor ||
+ sourceColor ||
+ opt('eventBorderColor') ||
+ optionColor;
+ var textColor =
+ event.textColor ||
+ source.textColor ||
+ opt('eventTextColor');
+ var statements = [];
+ if (backgroundColor) {
+ statements.push('background-color:' + backgroundColor);
+ }
+ if (borderColor) {
+ statements.push('border-color:' + borderColor);
+ }
+ if (textColor) {
+ statements.push('color:' + textColor);
+ }
+ return statements.join(';');
+}
+
+
+function applyAll(functions, thisObj, args) {
+ if ($.isFunction(functions)) {
+ functions = [ functions ];
+ }
+ if (functions) {
+ var i;
+ var ret;
+ for (i=0; i<functions.length; i++) {
+ ret = functions[i].apply(thisObj, args) || ret;
+ }
+ return ret;
+ }
+}
+
+
+function firstDefined() {
+ for (var i=0; i<arguments.length; i++) {
+ if (arguments[i] !== undefined) {
+ return arguments[i];
+ }
+ }
+}
+
+
+
+fcViews.month = MonthView;
+
+function MonthView(element, calendar) {
+ var t = this;
+
+
+ // exports
+ t.render = render;
+
+
+ // imports
+ BasicView.call(t, element, calendar, 'month');
+ var opt = t.opt;
+ var renderBasic = t.renderBasic;
+ var formatDate = calendar.formatDate;
+
+
+
+ function render(date, delta) {
+ if (delta) {
+ addMonths(date, delta);
+ date.setDate(1);
+ }
+ var start = cloneDate(date, true);
+ start.setDate(1);
+ var end = addMonths(cloneDate(start), 1);
+ var visStart = cloneDate(start);
+ var visEnd = cloneDate(end);
+ var firstDay = opt('firstDay');
+ var nwe = opt('weekends') ? 0 : 1;
+ if (nwe) {
+ skipWeekend(visStart);
+ skipWeekend(visEnd, -1, true);
+ }
+ addDays(visStart, -((visStart.getDay() - Math.max(firstDay, nwe) + 7) % 7));
+ addDays(visEnd, (7 - visEnd.getDay() + Math.max(firstDay, nwe)) % 7);
+ var rowCnt = Math.round((visEnd - visStart) / (DAY_MS * 7));
+ if (opt('weekMode') == 'fixed') {
+ addDays(visEnd, (6 - rowCnt) * 7);
+ rowCnt = 6;
+ }
+ t.title = formatDate(start, opt('titleFormat'));
+ t.start = start;
+ t.end = end;
+ t.visStart = visStart;
+ t.visEnd = visEnd;
+ renderBasic(6, rowCnt, nwe ? 5 : 7, true);
+ }
+
+
+}
+
+fcViews.basicWeek = BasicWeekView;
+
+function BasicWeekView(element, calendar) {
+ var t = this;
+
+
+ // exports
+ t.render = render;
+
+
+ // imports
+ BasicView.call(t, element, calendar, 'basicWeek');
+ var opt = t.opt;
+ var renderBasic = t.renderBasic;
+ var formatDates = calendar.formatDates;
+
+
+
+ function render(date, delta) {
+ if (delta) {
+ addDays(date, delta * 7);
+ }
+ var start = addDays(cloneDate(date), -((date.getDay() - opt('firstDay') + 7) % 7));
+ var end = addDays(cloneDate(start), 7);
+ var visStart = cloneDate(start);
+ var visEnd = cloneDate(end);
+ var weekends = opt('weekends');
+ if (!weekends) {
+ skipWeekend(visStart);
+ skipWeekend(visEnd, -1, true);
+ }
+ t.title = formatDates(
+ visStart,
+ addDays(cloneDate(visEnd), -1),
+ opt('titleFormat')
+ );
+ t.start = start;
+ t.end = end;
+ t.visStart = visStart;
+ t.visEnd = visEnd;
+ renderBasic(1, 1, weekends ? 7 : 5, false);
+ }
+
+
+}
+
+fcViews.basicDay = BasicDayView;
+
+//TODO: when calendar's date starts out on a weekend, shouldn't happen
+
+
+function BasicDayView(element, calendar) {
+ var t = this;
+
+
+ // exports
+ t.render = render;
+
+
+ // imports
+ BasicView.call(t, element, calendar, 'basicDay');
+ var opt = t.opt;
+ var renderBasic = t.renderBasic;
+ var formatDate = calendar.formatDate;
+
+
+
+ function render(date, delta) {
+ if (delta) {
+ addDays(date, delta);
+ if (!opt('weekends')) {
+ skipWeekend(date, delta < 0 ? -1 : 1);
+ }
+ }
+ t.title = formatDate(date, opt('titleFormat'));
+ t.start = t.visStart = cloneDate(date, true);
+ t.end = t.visEnd = addDays(cloneDate(t.start), 1);
+ renderBasic(1, 1, 1, false);
+ }
+
+
+}
+
+setDefaults({
+ weekMode: 'fixed'
+});
+
+
+function BasicView(element, calendar, viewName) {
+ var t = this;
+
+
+ // exports
+ t.renderBasic = renderBasic;
+ t.setHeight = setHeight;
+ t.setWidth = setWidth;
+ t.renderDayOverlay = renderDayOverlay;
+ t.defaultSelectionEnd = defaultSelectionEnd;
+ t.renderSelection = renderSelection;
+ t.clearSelection = clearSelection;
+ t.reportDayClick = reportDayClick; // for selection (kinda hacky)
+ t.dragStart = dragStart;
+ t.dragStop = dragStop;
+ t.defaultEventEnd = defaultEventEnd;
+ t.getHoverListener = function() { return hoverListener };
+ t.colContentLeft = colContentLeft;
+ t.colContentRight = colContentRight;
+ t.dayOfWeekCol = dayOfWeekCol;
+ t.dateCell = dateCell;
+ t.cellDate = cellDate;
+ t.cellIsAllDay = function() { return true };
+ t.allDayRow = allDayRow;
+ t.allDayBounds = allDayBounds;
+ t.getRowCnt = function() { return rowCnt };
+ t.getColCnt = function() { return colCnt };
+ t.getColWidth = function() { return colWidth };
+ t.getDaySegmentContainer = function() { return daySegmentContainer };
+
+
+ // imports
+ View.call(t, element, calendar, viewName);
+ OverlayManager.call(t);
+ SelectionManager.call(t);
+ BasicEventRenderer.call(t);
+ var opt = t.opt;
+ var trigger = t.trigger;
+ var clearEvents = t.clearEvents;
+ var renderOverlay = t.renderOverlay;
+ var clearOverlays = t.clearOverlays;
+ var daySelectionMousedown = t.daySelectionMousedown;
+ var formatDate = calendar.formatDate;
+
+
+ // locals
+
+ var head;
+ var headCells;
+ var body;
+ var bodyRows;
+ var bodyCells;
+ var bodyFirstCells;
+ var bodyCellTopInners;
+ var daySegmentContainer;
+
+ var viewWidth;
+ var viewHeight;
+ var colWidth;
+
+ var rowCnt, colCnt;
+ var coordinateGrid;
+ var hoverListener;
+ var colContentPositions;
+
+ var rtl, dis, dit;
+ var firstDay;
+ var nwe;
+ var tm;
+ var colFormat;
+
+
+
+ /* Rendering
+ ------------------------------------------------------------*/
+
+
+ disableTextSelection(element.addClass('fc-grid'));
+
+
+ function renderBasic(maxr, r, c, showNumbers) {
+ rowCnt = r;
+ colCnt = c;
+ updateOptions();
+ var firstTime = !body;
+ if (firstTime) {
+ buildSkeleton(maxr, showNumbers);
+ }else{
+ clearEvents();
+ }
+ updateCells(firstTime);
+ }
+
+
+
+ function updateOptions() {
+ rtl = opt('isRTL');
+ if (rtl) {
+ dis = -1;
+ dit = colCnt - 1;
+ }else{
+ dis = 1;
+ dit = 0;
+ }
+ firstDay = opt('firstDay');
+ nwe = opt('weekends') ? 0 : 1;
+ tm = opt('theme') ? 'ui' : 'fc';
+ colFormat = opt('columnFormat');
+ }
+
+
+
+ function buildSkeleton(maxRowCnt, showNumbers) {
+ var s;
+ var headerClass = tm + "-widget-header";
+ var contentClass = tm + "-widget-content";
+ var i, j;
+ var table;
+
+ s =
+ "<table class='fc-border-separate' style='width:100%' cellspacing='0'>" +
+ "<thead>" +
+ "<tr>";
+ for (i=0; i<colCnt; i++) {
+ s +=
+ "<th class='fc- " + headerClass + "'/>"; // need fc- for setDayID
+ }
+ s +=
+ "</tr>" +
+ "</thead>" +
+ "<tbody>";
+ for (i=0; i<maxRowCnt; i++) {
+ s +=
+ "<tr class='fc-week" + i + "'>";
+ for (j=0; j<colCnt; j++) {
+ s +=
+ "<td class='fc- " + contentClass + " fc-day" + (i*colCnt+j) + "'>" + // need fc- for setDayID
+ "<div>" +
+ (showNumbers ?
+ "<div class='fc-day-number'/>" :
+ ''
+ ) +
+ "<div class='fc-day-content'>" +
+ "<div style='position:relative'>&nbsp;</div>" +
+ "</div>" +
+ "</div>" +
+ "</td>";
+ }
+ s +=
+ "</tr>";
+ }
+ s +=
+ "</tbody>" +
+ "</table>";
+ table = $(s).appendTo(element);
+
+ head = table.find('thead');
+ headCells = head.find('th');
+ body = table.find('tbody');
+ bodyRows = body.find('tr');
+ bodyCells = body.find('td');
+ bodyFirstCells = bodyCells.filter(':first-child');
+ bodyCellTopInners = bodyRows.eq(0).find('div.fc-day-content div');
+
+ markFirstLast(head.add(head.find('tr'))); // marks first+last tr/th's
+ markFirstLast(bodyRows); // marks first+last td's
+ bodyRows.eq(0).addClass('fc-first'); // fc-last is done in updateCells
+
+ dayBind(bodyCells);
+
+ daySegmentContainer =
+ $("<div style='position:absolute;z-index:8;top:0;left:0'/>")
+ .appendTo(element);
+ }
+
+
+
+ function updateCells(firstTime) {
+ var dowDirty = firstTime || rowCnt == 1; // could the cells' day-of-weeks need updating?
+ var month = t.start.getMonth();
+ var today = clearTime(new Date());
+ var cell;
+ var date;
+ var row;
+
+ if (dowDirty) {
+ headCells.each(function(i, _cell) {
+ cell = $(_cell);
+ date = indexDate(i);
+ cell.html(formatDate(date, colFormat));
+ setDayID(cell, date);
+ });
+ }
+
+ bodyCells.each(function(i, _cell) {
+ cell = $(_cell);
+ date = indexDate(i);
+ if (date.getMonth() == month) {
+ cell.removeClass('fc-other-month');
+ }else{
+ cell.addClass('fc-other-month');
+ }
+ if (+date == +today) {
+ cell.addClass(tm + '-state-highlight fc-today');
+ }else{
+ cell.removeClass(tm + '-state-highlight fc-today');
+ }
+ cell.find('div.fc-day-number').text(date.getDate());
+ if (dowDirty) {
+ setDayID(cell, date);
+ }
+ });
+
+ bodyRows.each(function(i, _row) {
+ row = $(_row);
+ if (i < rowCnt) {
+ row.show();
+ if (i == rowCnt-1) {
+ row.addClass('fc-last');
+ }else{
+ row.removeClass('fc-last');
+ }
+ }else{
+ row.hide();
+ }
+ });
+ }
+
+
+
+ function setHeight(height) {
+ viewHeight = height;
+
+ var bodyHeight = viewHeight - head.height();
+ var rowHeight;
+ var rowHeightLast;
+ var cell;
+
+ if (opt('weekMode') == 'variable') {
+ rowHeight = rowHeightLast = Math.floor(bodyHeight / (rowCnt==1 ? 2 : 6));
+ }else{
+ rowHeight = Math.floor(bodyHeight / rowCnt);
+ rowHeightLast = bodyHeight - rowHeight * (rowCnt-1);
+ }
+
+ bodyFirstCells.each(function(i, _cell) {
+ if (i < rowCnt) {
+ cell = $(_cell);
+ setMinHeight(
+ cell.find('> div'),
+ (i==rowCnt-1 ? rowHeightLast : rowHeight) - vsides(cell)
+ );
+ }
+ });
+
+ }
+
+
+ function setWidth(width) {
+ viewWidth = width;
+ colContentPositions.clear();
+ colWidth = Math.floor(viewWidth / colCnt);
+ setOuterWidth(headCells.slice(0, -1), colWidth);
+ }
+
+
+
+ /* Day clicking and binding
+ -----------------------------------------------------------*/
+
+
+ function dayBind(days) {
+ days.click(dayClick)
+ .mousedown(daySelectionMousedown);
+ }
+
+
+ function dayClick(ev) {
+ if (!opt('selectable')) { // if selectable, SelectionManager will worry about dayClick
+ var index = parseInt(this.className.match(/fc\-day(\d+)/)[1]); // TODO: maybe use .data
+ var date = indexDate(index);
+ trigger('dayClick', this, date, true, ev);
+ }
+ }
+
+
+
+ /* Semi-transparent Overlay Helpers
+ ------------------------------------------------------*/
+
+
+ function renderDayOverlay(overlayStart, overlayEnd, refreshCoordinateGrid) { // overlayEnd is exclusive
+ if (refreshCoordinateGrid) {
+ coordinateGrid.build();
+ }
+ var rowStart = cloneDate(t.visStart);
+ var rowEnd = addDays(cloneDate(rowStart), colCnt);
+ for (var i=0; i<rowCnt; i++) {
+ var stretchStart = new Date(Math.max(rowStart, overlayStart));
+ var stretchEnd = new Date(Math.min(rowEnd, overlayEnd));
+ if (stretchStart < stretchEnd) {
+ var colStart, colEnd;
+ if (rtl) {
+ colStart = dayDiff(stretchEnd, rowStart)*dis+dit+1;
+ colEnd = dayDiff(stretchStart, rowStart)*dis+dit+1;
+ }else{
+ colStart = dayDiff(stretchStart, rowStart);
+ colEnd = dayDiff(stretchEnd, rowStart);
+ }
+ dayBind(
+ renderCellOverlay(i, colStart, i, colEnd-1)
+ );
+ }
+ addDays(rowStart, 7);
+ addDays(rowEnd, 7);
+ }
+ }
+
+
+ function renderCellOverlay(row0, col0, row1, col1) { // row1,col1 is inclusive
+ var rect = coordinateGrid.rect(row0, col0, row1, col1, element);
+ return renderOverlay(rect, element);
+ }
+
+
+
+ /* Selection
+ -----------------------------------------------------------------------*/
+
+
+ function defaultSelectionEnd(startDate, allDay) {
+ return cloneDate(startDate);
+ }
+
+
+ function renderSelection(startDate, endDate, allDay) {
+ renderDayOverlay(startDate, addDays(cloneDate(endDate), 1), true); // rebuild every time???
+ }
+
+
+ function clearSelection() {
+ clearOverlays();
+ }
+
+
+ function reportDayClick(date, allDay, ev) {
+ var cell = dateCell(date);
+ var _element = bodyCells[cell.row*colCnt + cell.col];
+ trigger('dayClick', _element, date, allDay, ev);
+ }
+
+
+
+ /* External Dragging
+ -----------------------------------------------------------------------*/
+
+
+ function dragStart(_dragElement, ev, ui) {
+ hoverListener.start(function(cell) {
+ clearOverlays();
+ if (cell) {
+ renderCellOverlay(cell.row, cell.col, cell.row, cell.col);
+ }
+ }, ev);
+ }
+
+
+ function dragStop(_dragElement, ev, ui) {
+ var cell = hoverListener.stop();
+ clearOverlays();
+ if (cell) {
+ var d = cellDate(cell);
+ trigger('drop', _dragElement, d, true, ev, ui);
+ }
+ }
+
+
+
+ /* Utilities
+ --------------------------------------------------------*/
+
+
+ function defaultEventEnd(event) {
+ return cloneDate(event.start);
+ }
+
+
+ coordinateGrid = new CoordinateGrid(function(rows, cols) {
+ var e, n, p;
+ headCells.each(function(i, _e) {
+ e = $(_e);
+ n = e.offset().left;
+ if (i) {
+ p[1] = n;
+ }
+ p = [n];
+ cols[i] = p;
+ });
+ p[1] = n + e.outerWidth();
+ bodyRows.each(function(i, _e) {
+ if (i < rowCnt) {
+ e = $(_e);
+ n = e.offset().top;
+ if (i) {
+ p[1] = n;
+ }
+ p = [n];
+ rows[i] = p;
+ }
+ });
+ p[1] = n + e.outerHeight();
+ });
+
+
+ hoverListener = new HoverListener(coordinateGrid);
+
+
+ colContentPositions = new HorizontalPositionCache(function(col) {
+ return bodyCellTopInners.eq(col);
+ });
+
+
+ function colContentLeft(col) {
+ return colContentPositions.left(col);
+ }
+
+
+ function colContentRight(col) {
+ return colContentPositions.right(col);
+ }
+
+
+
+
+ function dateCell(date) {
+ return {
+ row: Math.floor(dayDiff(date, t.visStart) / 7),
+ col: dayOfWeekCol(date.getDay())
+ };
+ }
+
+
+ function cellDate(cell) {
+ return _cellDate(cell.row, cell.col);
+ }
+
+
+ function _cellDate(row, col) {
+ return addDays(cloneDate(t.visStart), row*7 + col*dis+dit);
+ // what about weekends in middle of week?
+ }
+
+
+ function indexDate(index) {
+ return _cellDate(Math.floor(index/colCnt), index%colCnt);
+ }
+
+
+ function dayOfWeekCol(dayOfWeek) {
+ return ((dayOfWeek - Math.max(firstDay, nwe) + colCnt) % colCnt) * dis + dit;
+ }
+
+
+
+
+ function allDayRow(i) {
+ return bodyRows.eq(i);
+ }
+
+
+ function allDayBounds(i) {
+ return {
+ left: 0,
+ right: viewWidth
+ };
+ }
+
+
+}
+
+function BasicEventRenderer() {
+ var t = this;
+
+
+ // exports
+ t.renderEvents = renderEvents;
+ t.compileDaySegs = compileSegs; // for DayEventRenderer
+ t.clearEvents = clearEvents;
+ t.bindDaySeg = bindDaySeg;
+
+
+ // imports
+ DayEventRenderer.call(t);
+ var opt = t.opt;
+ var trigger = t.trigger;
+ //var setOverflowHidden = t.setOverflowHidden;
+ var isEventDraggable = t.isEventDraggable;
+ var isEventResizable = t.isEventResizable;
+ var reportEvents = t.reportEvents;
+ var reportEventClear = t.reportEventClear;
+ var eventElementHandlers = t.eventElementHandlers;
+ var showEvents = t.showEvents;
+ var hideEvents = t.hideEvents;
+ var eventDrop = t.eventDrop;
+ var getDaySegmentContainer = t.getDaySegmentContainer;
+ var getHoverListener = t.getHoverListener;
+ var renderDayOverlay = t.renderDayOverlay;
+ var clearOverlays = t.clearOverlays;
+ var getRowCnt = t.getRowCnt;
+ var getColCnt = t.getColCnt;
+ var renderDaySegs = t.renderDaySegs;
+ var resizableDayEvent = t.resizableDayEvent;
+
+
+
+ /* Rendering
+ --------------------------------------------------------------------*/
+
+
+ function renderEvents(events, modifiedEventId) {
+ reportEvents(events);
+ renderDaySegs(compileSegs(events), modifiedEventId);
+ }
+
+
+ function clearEvents() {
+ reportEventClear();
+ getDaySegmentContainer().empty();
+ }
+
+
+ function compileSegs(events) {
+ var rowCnt = getRowCnt(),
+ colCnt = getColCnt(),
+ d1 = cloneDate(t.visStart),
+ d2 = addDays(cloneDate(d1), colCnt),
+ visEventsEnds = $.map(events, exclEndDay),
+ i, row,
+ j, level,
+ k, seg,
+ segs=[];
+ for (i=0; i<rowCnt; i++) {
+ row = stackSegs(sliceSegs(events, visEventsEnds, d1, d2));
+ for (j=0; j<row.length; j++) {
+ level = row[j];
+ for (k=0; k<level.length; k++) {
+ seg = level[k];
+ seg.row = i;
+ seg.level = j; // not needed anymore
+ segs.push(seg);
+ }
+ }
+ addDays(d1, 7);
+ addDays(d2, 7);
+ }
+ return segs;
+ }
+
+
+ function bindDaySeg(event, eventElement, seg) {
+ if (isEventDraggable(event)) {
+ draggableDayEvent(event, eventElement);
+ }
+ if (seg.isEnd && isEventResizable(event)) {
+ resizableDayEvent(event, eventElement, seg);
+ }
+ eventElementHandlers(event, eventElement);
+ // needs to be after, because resizableDayEvent might stopImmediatePropagation on click
+ }
+
+
+
+ /* Dragging
+ ----------------------------------------------------------------------------*/
+
+
+ function draggableDayEvent(event, eventElement) {
+ var hoverListener = getHoverListener();
+ var dayDelta;
+ eventElement.draggable({
+ zIndex: 9,
+ delay: 50,
+ opacity: opt('dragOpacity'),
+ revertDuration: opt('dragRevertDuration'),
+ start: function(ev, ui) {
+ trigger('eventDragStart', eventElement, event, ev, ui);
+ hideEvents(event, eventElement);
+ hoverListener.start(function(cell, origCell, rowDelta, colDelta) {
+ eventElement.draggable('option', 'revert', !cell || !rowDelta && !colDelta);
+ clearOverlays();
+ if (cell) {
+ //setOverflowHidden(true);
+ dayDelta = rowDelta*7 + colDelta * (opt('isRTL') ? -1 : 1);
+ renderDayOverlay(
+ addDays(cloneDate(event.start), dayDelta),
+ addDays(exclEndDay(event), dayDelta)
+ );
+ }else{
+ //setOverflowHidden(false);
+ dayDelta = 0;
+ }
+ }, ev, 'drag');
+ },
+ stop: function(ev, ui) {
+ hoverListener.stop();
+ clearOverlays();
+ trigger('eventDragStop', eventElement, event, ev, ui);
+ if (dayDelta) {
+ eventDrop(this, event, dayDelta, 0, event.allDay, ev, ui);
+ }else{
+ eventElement.css('filter', ''); // clear IE opacity side-effects
+ showEvents(event, eventElement);
+ }
+ //setOverflowHidden(false);
+ }
+ });
+ }
+
+
+}
+
+fcViews.agendaWeek = AgendaWeekView;
+
+function AgendaWeekView(element, calendar) {
+ var t = this;
+
+
+ // exports
+ t.render = render;
+
+
+ // imports
+ AgendaView.call(t, element, calendar, 'agendaWeek');
+ var opt = t.opt;
+ var renderAgenda = t.renderAgenda;
+ var formatDates = calendar.formatDates;
+
+
+
+ function render(date, delta) {
+ if (delta) {
+ addDays(date, delta * 7);
+ }
+ var start = addDays(cloneDate(date), -((date.getDay() - opt('firstDay') + 7) % 7));
+ var end = addDays(cloneDate(start), 7);
+ var visStart = cloneDate(start);
+ var visEnd = cloneDate(end);
+ var weekends = opt('weekends');
+ if (!weekends) {
+ skipWeekend(visStart);
+ skipWeekend(visEnd, -1, true);
+ }
+ t.title = formatDates(
+ visStart,
+ addDays(cloneDate(visEnd), -1),
+ opt('titleFormat')
+ );
+ t.start = start;
+ t.end = end;
+ t.visStart = visStart;
+ t.visEnd = visEnd;
+ renderAgenda(weekends ? 7 : 5);
+ }
+
+
+}
+
+fcViews.agendaDay = AgendaDayView;
+
+function AgendaDayView(element, calendar) {
+ var t = this;
+
+
+ // exports
+ t.render = render;
+
+
+ // imports
+ AgendaView.call(t, element, calendar, 'agendaDay');
+ var opt = t.opt;
+ var renderAgenda = t.renderAgenda;
+ var formatDate = calendar.formatDate;
+
+
+
+ function render(date, delta) {
+ if (delta) {
+ addDays(date, delta);
+ if (!opt('weekends')) {
+ skipWeekend(date, delta < 0 ? -1 : 1);
+ }
+ }
+ var start = cloneDate(date, true);
+ var end = addDays(cloneDate(start), 1);
+ t.title = formatDate(date, opt('titleFormat'));
+ t.start = t.visStart = start;
+ t.end = t.visEnd = end;
+ renderAgenda(1);
+ }
+
+
+}
+
+setDefaults({
+ allDaySlot: true,
+ allDayText: 'all-day',
+ firstHour: 6,
+ slotMinutes: 30,
+ defaultEventMinutes: 120,
+ axisFormat: 'h(:mm)tt',
+ timeFormat: {
+ agenda: 'h:mm{ - h:mm}'
+ },
+ dragOpacity: {
+ agenda: .5
+ },
+ minTime: 0,
+ maxTime: 24
+});
+
+
+// TODO: make it work in quirks mode (event corners, all-day height)
+// TODO: test liquid width, especially in IE6
+
+
+function AgendaView(element, calendar, viewName) {
+ var t = this;
+
+
+ // exports
+ t.renderAgenda = renderAgenda;
+ t.setWidth = setWidth;
+ t.setHeight = setHeight;
+ t.beforeHide = beforeHide;
+ t.afterShow = afterShow;
+ t.defaultEventEnd = defaultEventEnd;
+ t.timePosition = timePosition;
+ t.dayOfWeekCol = dayOfWeekCol;
+ t.dateCell = dateCell;
+ t.cellDate = cellDate;
+ t.cellIsAllDay = cellIsAllDay;
+ t.allDayRow = getAllDayRow;
+ t.allDayBounds = allDayBounds;
+ t.getHoverListener = function() { return hoverListener };
+ t.colContentLeft = colContentLeft;
+ t.colContentRight = colContentRight;
+ t.getDaySegmentContainer = function() { return daySegmentContainer };
+ t.getSlotSegmentContainer = function() { return slotSegmentContainer };
+ t.getMinMinute = function() { return minMinute };
+ t.getMaxMinute = function() { return maxMinute };
+ t.getBodyContent = function() { return slotContent }; // !!??
+ t.getRowCnt = function() { return 1 };
+ t.getColCnt = function() { return colCnt };
+ t.getColWidth = function() { return colWidth };
+ t.getSlotHeight = function() { return slotHeight };
+ t.defaultSelectionEnd = defaultSelectionEnd;
+ t.renderDayOverlay = renderDayOverlay;
+ t.renderSelection = renderSelection;
+ t.clearSelection = clearSelection;
+ t.reportDayClick = reportDayClick; // selection mousedown hack
+ t.dragStart = dragStart;
+ t.dragStop = dragStop;
+
+
+ // imports
+ View.call(t, element, calendar, viewName);
+ OverlayManager.call(t);
+ SelectionManager.call(t);
+ AgendaEventRenderer.call(t);
+ var opt = t.opt;
+ var trigger = t.trigger;
+ var clearEvents = t.clearEvents;
+ var renderOverlay = t.renderOverlay;
+ var clearOverlays = t.clearOverlays;
+ var reportSelection = t.reportSelection;
+ var unselect = t.unselect;
+ var daySelectionMousedown = t.daySelectionMousedown;
+ var slotSegHtml = t.slotSegHtml;
+ var formatDate = calendar.formatDate;
+
+
+ // locals
+
+ var dayTable;
+ var dayHead;
+ var dayHeadCells;
+ var dayBody;
+ var dayBodyCells;
+ var dayBodyCellInners;
+ var dayBodyFirstCell;
+ var dayBodyFirstCellStretcher;
+ var slotLayer;
+ var daySegmentContainer;
+ var allDayTable;
+ var allDayRow;
+ var slotScroller;
+ var slotContent;
+ var slotSegmentContainer;
+ var slotTable;
+ var slotTableFirstInner;
+ var axisFirstCells;
+ var gutterCells;
+ var selectionHelper;
+
+ var viewWidth;
+ var viewHeight;
+ var axisWidth;
+ var colWidth;
+ var gutterWidth;
+ var slotHeight; // TODO: what if slotHeight changes? (see issue 650)
+ var savedScrollTop;
+
+ var colCnt;
+ var slotCnt;
+ var coordinateGrid;
+ var hoverListener;
+ var colContentPositions;
+ var slotTopCache = {};
+
+ var tm;
+ var firstDay;
+ var nwe; // no weekends (int)
+ var rtl, dis, dit; // day index sign / translate
+ var minMinute, maxMinute;
+ var colFormat;
+
+
+
+ /* Rendering
+ -----------------------------------------------------------------------------*/
+
+
+ disableTextSelection(element.addClass('fc-agenda'));
+
+
+ function renderAgenda(c) {
+ colCnt = c;
+ updateOptions();
+ if (!dayTable) {
+ buildSkeleton();
+ }else{
+ clearEvents();
+ }
+ updateCells();
+ }
+
+
+
+ function updateOptions() {
+ tm = opt('theme') ? 'ui' : 'fc';
+ nwe = opt('weekends') ? 0 : 1;
+ firstDay = opt('firstDay');
+ if (rtl = opt('isRTL')) {
+ dis = -1;
+ dit = colCnt - 1;
+ }else{
+ dis = 1;
+ dit = 0;
+ }
+ minMinute = parseTime(opt('minTime'));
+ maxMinute = parseTime(opt('maxTime'));
+ colFormat = opt('columnFormat');
+ }
+
+
+
+ function buildSkeleton() {
+ var headerClass = tm + "-widget-header";
+ var contentClass = tm + "-widget-content";
+ var s;
+ var i;
+ var d;
+ var maxd;
+ var minutes;
+ var slotNormal = opt('slotMinutes') % 15 == 0;
+
+ s =
+ "<table style='width:100%' class='fc-agenda-days fc-border-separate' cellspacing='0'>" +
+ "<thead>" +
+ "<tr>" +
+ "<th class='fc-agenda-axis " + headerClass + "'>&nbsp;</th>";
+ for (i=0; i<colCnt; i++) {
+ s +=
+ "<th class='fc- fc-col" + i + ' ' + headerClass + "'/>"; // fc- needed for setDayID
+ }
+ s +=
+ "<th class='fc-agenda-gutter " + headerClass + "'>&nbsp;</th>" +
+ "</tr>" +
+ "</thead>" +
+ "<tbody>" +
+ "<tr>" +
+ "<th class='fc-agenda-axis " + headerClass + "'>&nbsp;</th>";
+ for (i=0; i<colCnt; i++) {
+ s +=
+ "<td class='fc- fc-col" + i + ' ' + contentClass + "'>" + // fc- needed for setDayID
+ "<div>" +
+ "<div class='fc-day-content'>" +
+ "<div style='position:relative'>&nbsp;</div>" +
+ "</div>" +
+ "</div>" +
+ "</td>";
+ }
+ s +=
+ "<td class='fc-agenda-gutter " + contentClass + "'>&nbsp;</td>" +
+ "</tr>" +
+ "</tbody>" +
+ "</table>";
+ dayTable = $(s).appendTo(element);
+ dayHead = dayTable.find('thead');
+ dayHeadCells = dayHead.find('th').slice(1, -1);
+ dayBody = dayTable.find('tbody');
+ dayBodyCells = dayBody.find('td').slice(0, -1);
+ dayBodyCellInners = dayBodyCells.find('div.fc-day-content div');
+ dayBodyFirstCell = dayBodyCells.eq(0);
+ dayBodyFirstCellStretcher = dayBodyFirstCell.find('> div');
+
+ markFirstLast(dayHead.add(dayHead.find('tr')));
+ markFirstLast(dayBody.add(dayBody.find('tr')));
+
+ axisFirstCells = dayHead.find('th:first');
+ gutterCells = dayTable.find('.fc-agenda-gutter');
+
+ slotLayer =
+ $("<div style='position:absolute;z-index:2;left:0;width:100%'/>")
+ .appendTo(element);
+
+ if (opt('allDaySlot')) {
+
+ daySegmentContainer =
+ $("<div style='position:absolute;z-index:8;top:0;left:0'/>")
+ .appendTo(slotLayer);
+
+ s =
+ "<table style='width:100%' class='fc-agenda-allday' cellspacing='0'>" +
+ "<tr>" +
+ "<th class='" + headerClass + " fc-agenda-axis'>" + opt('allDayText') + "</th>" +
+ "<td>" +
+ "<div class='fc-day-content'><div style='position:relative'/></div>" +
+ "</td>" +
+ "<th class='" + headerClass + " fc-agenda-gutter'>&nbsp;</th>" +
+ "</tr>" +
+ "</table>";
+ allDayTable = $(s).appendTo(slotLayer);
+ allDayRow = allDayTable.find('tr');
+
+ dayBind(allDayRow.find('td'));
+
+ axisFirstCells = axisFirstCells.add(allDayTable.find('th:first'));
+ gutterCells = gutterCells.add(allDayTable.find('th.fc-agenda-gutter'));
+
+ slotLayer.append(
+ "<div class='fc-agenda-divider " + headerClass + "'>" +
+ "<div class='fc-agenda-divider-inner'/>" +
+ "</div>"
+ );
+
+ }else{
+
+ daySegmentContainer = $([]); // in jQuery 1.4, we can just do $()
+
+ }
+
+ slotScroller =
+ $("<div style='position:absolute;width:100%;overflow-x:hidden;overflow-y:auto'/>")
+ .appendTo(slotLayer);
+
+ slotContent =
+ $("<div style='position:relative;width:100%;overflow:hidden'/>")
+ .appendTo(slotScroller);
+
+ slotSegmentContainer =
+ $("<div style='position:absolute;z-index:8;top:0;left:0'/>")
+ .appendTo(slotContent);
+
+ s =
+ "<table class='fc-agenda-slots' style='width:100%' cellspacing='0'>" +
+ "<tbody>";
+ d = zeroDate();
+ maxd = addMinutes(cloneDate(d), maxMinute);
+ addMinutes(d, minMinute);
+ slotCnt = 0;
+ for (i=0; d < maxd; i++) {
+ minutes = d.getMinutes();
+ s +=
+ "<tr class='fc-slot" + i + ' ' + (!minutes ? '' : 'fc-minor') + "'>" +
+ "<th class='fc-agenda-axis " + headerClass + "'>" +
+ ((!slotNormal || !minutes) ? formatDate(d, opt('axisFormat')) : '&nbsp;') +
+ "</th>" +
+ "<td class='" + contentClass + "'>" +
+ "<div style='position:relative'>&nbsp;</div>" +
+ "</td>" +
+ "</tr>";
+ addMinutes(d, opt('slotMinutes'));
+ slotCnt++;
+ }
+ s +=
+ "</tbody>" +
+ "</table>";
+ slotTable = $(s).appendTo(slotContent);
+ slotTableFirstInner = slotTable.find('div:first');
+
+ slotBind(slotTable.find('td'));
+
+ axisFirstCells = axisFirstCells.add(slotTable.find('th:first'));
+ }
+
+
+
+ function updateCells() {
+ var i;
+ var headCell;
+ var bodyCell;
+ var date;
+ var today = clearTime(new Date());
+ for (i=0; i<colCnt; i++) {
+ date = colDate(i);
+ headCell = dayHeadCells.eq(i);
+ headCell.html(formatDate(date, colFormat));
+ bodyCell = dayBodyCells.eq(i);
+ if (+date == +today) {
+ bodyCell.addClass(tm + '-state-highlight fc-today');
+ }else{
+ bodyCell.removeClass(tm + '-state-highlight fc-today');
+ }
+ setDayID(headCell.add(bodyCell), date);
+ }
+ }
+
+
+
+ function setHeight(height, dateChanged) {
+ if (height === undefined) {
+ height = viewHeight;
+ }
+ viewHeight = height;
+ slotTopCache = {};
+
+ var headHeight = dayBody.position().top;
+ var allDayHeight = slotScroller.position().top; // including divider
+ var bodyHeight = Math.min( // total body height, including borders
+ height - headHeight, // when scrollbars
+ slotTable.height() + allDayHeight + 1 // when no scrollbars. +1 for bottom border
+ );
+
+ dayBodyFirstCellStretcher
+ .height(bodyHeight - vsides(dayBodyFirstCell));
+
+ slotLayer.css('top', headHeight);
+
+ slotScroller.height(bodyHeight - allDayHeight - 1);
+
+ slotHeight = slotTableFirstInner.height() + 1; // +1 for border
+
+ if (dateChanged) {
+ resetScroll();
+ }
+ }
+
+
+
+ function setWidth(width) {
+ viewWidth = width;
+ colContentPositions.clear();
+
+ axisWidth = 0;
+ setOuterWidth(
+ axisFirstCells
+ .width('')
+ .each(function(i, _cell) {
+ axisWidth = Math.max(axisWidth, $(_cell).outerWidth());
+ }),
+ axisWidth
+ );
+
+ var slotTableWidth = slotScroller[0].clientWidth; // needs to be done after axisWidth (for IE7)
+ //slotTable.width(slotTableWidth);
+
+ gutterWidth = slotScroller.width() - slotTableWidth;
+ if (gutterWidth) {
+ setOuterWidth(gutterCells, gutterWidth);
+ gutterCells
+ .show()
+ .prev()
+ .removeClass('fc-last');
+ }else{
+ gutterCells
+ .hide()
+ .prev()
+ .addClass('fc-last');
+ }
+
+ colWidth = Math.floor((slotTableWidth - axisWidth) / colCnt);
+ setOuterWidth(dayHeadCells.slice(0, -1), colWidth);
+ }
+
+
+
+ function resetScroll() {
+ var d0 = zeroDate();
+ var scrollDate = cloneDate(d0);
+ scrollDate.setHours(opt('firstHour'));
+ var top = timePosition(d0, scrollDate) + 1; // +1 for the border
+ function scroll() {
+ slotScroller.scrollTop(top);
+ }
+ scroll();
+ setTimeout(scroll, 0); // overrides any previous scroll state made by the browser
+ }
+
+
+ function beforeHide() {
+ savedScrollTop = slotScroller.scrollTop();
+ }
+
+
+ function afterShow() {
+ slotScroller.scrollTop(savedScrollTop);
+ }
+
+
+
+ /* Slot/Day clicking and binding
+ -----------------------------------------------------------------------*/
+
+
+ function dayBind(cells) {
+ cells.click(slotClick)
+ .mousedown(daySelectionMousedown);
+ }
+
+
+ function slotBind(cells) {
+ cells.click(slotClick)
+ .mousedown(slotSelectionMousedown);
+ }
+
+
+ function slotClick(ev) {
+ if (!opt('selectable')) { // if selectable, SelectionManager will worry about dayClick
+ var col = Math.min(colCnt-1, Math.floor((ev.pageX - dayTable.offset().left - axisWidth) / colWidth));
+ var date = colDate(col);
+ var rowMatch = this.parentNode.className.match(/fc-slot(\d+)/); // TODO: maybe use data
+ if (rowMatch) {
+ var mins = parseInt(rowMatch[1]) * opt('slotMinutes');
+ var hours = Math.floor(mins/60);
+ date.setHours(hours);
+ date.setMinutes(mins%60 + minMinute);
+ trigger('dayClick', dayBodyCells[col], date, false, ev);
+ }else{
+ trigger('dayClick', dayBodyCells[col], date, true, ev);
+ }
+ }
+ }
+
+
+
+ /* Semi-transparent Overlay Helpers
+ -----------------------------------------------------*/
+
+
+ function renderDayOverlay(startDate, endDate, refreshCoordinateGrid) { // endDate is exclusive
+ if (refreshCoordinateGrid) {
+ coordinateGrid.build();
+ }
+ var visStart = cloneDate(t.visStart);
+ var startCol, endCol;
+ if (rtl) {
+ startCol = dayDiff(endDate, visStart)*dis+dit+1;
+ endCol = dayDiff(startDate, visStart)*dis+dit+1;
+ }else{
+ startCol = dayDiff(startDate, visStart);
+ endCol = dayDiff(endDate, visStart);
+ }
+ startCol = Math.max(0, startCol);
+ endCol = Math.min(colCnt, endCol);
+ if (startCol < endCol) {
+ dayBind(
+ renderCellOverlay(0, startCol, 0, endCol-1)
+ );
+ }
+ }
+
+
+ function renderCellOverlay(row0, col0, row1, col1) { // only for all-day?
+ var rect = coordinateGrid.rect(row0, col0, row1, col1, slotLayer);
+ return renderOverlay(rect, slotLayer);
+ }
+
+
+ function renderSlotOverlay(overlayStart, overlayEnd) {
+ var dayStart = cloneDate(t.visStart);
+ var dayEnd = addDays(cloneDate(dayStart), 1);
+ for (var i=0; i<colCnt; i++) {
+ var stretchStart = new Date(Math.max(dayStart, overlayStart));
+ var stretchEnd = new Date(Math.min(dayEnd, overlayEnd));
+ if (stretchStart < stretchEnd) {
+ var col = i*dis+dit;
+ var rect = coordinateGrid.rect(0, col, 0, col, slotContent); // only use it for horizontal coords
+ var top = timePosition(dayStart, stretchStart);
+ var bottom = timePosition(dayStart, stretchEnd);
+ rect.top = top;
+ rect.height = bottom - top;
+ slotBind(
+ renderOverlay(rect, slotContent)
+ );
+ }
+ addDays(dayStart, 1);
+ addDays(dayEnd, 1);
+ }
+ }
+
+
+
+ /* Coordinate Utilities
+ -----------------------------------------------------------------------------*/
+
+
+ coordinateGrid = new CoordinateGrid(function(rows, cols) {
+ var e, n, p;
+ dayHeadCells.each(function(i, _e) {
+ e = $(_e);
+ n = e.offset().left;
+ if (i) {
+ p[1] = n;
+ }
+ p = [n];
+ cols[i] = p;
+ });
+ p[1] = n + e.outerWidth();
+ if (opt('allDaySlot')) {
+ e = allDayRow;
+ n = e.offset().top;
+ rows[0] = [n, n+e.outerHeight()];
+ }
+ var slotTableTop = slotContent.offset().top;
+ var slotScrollerTop = slotScroller.offset().top;
+ var slotScrollerBottom = slotScrollerTop + slotScroller.outerHeight();
+ function constrain(n) {
+ return Math.max(slotScrollerTop, Math.min(slotScrollerBottom, n));
+ }
+ for (var i=0; i<slotCnt; i++) {
+ rows.push([
+ constrain(slotTableTop + slotHeight*i),
+ constrain(slotTableTop + slotHeight*(i+1))
+ ]);
+ }
+ });
+
+
+ hoverListener = new HoverListener(coordinateGrid);
+
+
+ colContentPositions = new HorizontalPositionCache(function(col) {
+ return dayBodyCellInners.eq(col);
+ });
+
+
+ function colContentLeft(col) {
+ return colContentPositions.left(col);
+ }
+
+
+ function colContentRight(col) {
+ return colContentPositions.right(col);
+ }
+
+
+
+
+ function dateCell(date) { // "cell" terminology is now confusing
+ return {
+ row: Math.floor(dayDiff(date, t.visStart) / 7),
+ col: dayOfWeekCol(date.getDay())
+ };
+ }
+
+
+ function cellDate(cell) {
+ var d = colDate(cell.col);
+ var slotIndex = cell.row;
+ if (opt('allDaySlot')) {
+ slotIndex--;
+ }
+ if (slotIndex >= 0) {
+ addMinutes(d, minMinute + slotIndex * opt('slotMinutes'));
+ }
+ return d;
+ }
+
+
+ function colDate(col) { // returns dates with 00:00:00
+ return addDays(cloneDate(t.visStart), col*dis+dit);
+ }
+
+
+ function cellIsAllDay(cell) {
+ return opt('allDaySlot') && !cell.row;
+ }
+
+
+ function dayOfWeekCol(dayOfWeek) {
+ return ((dayOfWeek - Math.max(firstDay, nwe) + colCnt) % colCnt)*dis+dit;
+ }
+
+
+
+
+ // get the Y coordinate of the given time on the given day (both Date objects)
+ function timePosition(day, time) { // both date objects. day holds 00:00 of current day
+ day = cloneDate(day, true);
+ if (time < addMinutes(cloneDate(day), minMinute)) {
+ return 0;
+ }
+ if (time >= addMinutes(cloneDate(day), maxMinute)) {
+ return slotTable.height();
+ }
+ var slotMinutes = opt('slotMinutes'),
+ minutes = time.getHours()*60 + time.getMinutes() - minMinute,
+ slotI = Math.floor(minutes / slotMinutes),
+ slotTop = slotTopCache[slotI];
+ if (slotTop === undefined) {
+ slotTop = slotTopCache[slotI] = slotTable.find('tr:eq(' + slotI + ') td div')[0].offsetTop; //.position().top; // need this optimization???
+ }
+ return Math.max(0, Math.round(
+ slotTop - 1 + slotHeight * ((minutes % slotMinutes) / slotMinutes)
+ ));
+ }
+
+
+ function allDayBounds() {
+ return {
+ left: axisWidth,
+ right: viewWidth - gutterWidth
+ }
+ }
+
+
+ function getAllDayRow(index) {
+ return allDayRow;
+ }
+
+
+ function defaultEventEnd(event) {
+ var start = cloneDate(event.start);
+ if (event.allDay) {
+ return start;
+ }
+ return addMinutes(start, opt('defaultEventMinutes'));
+ }
+
+
+
+ /* Selection
+ ---------------------------------------------------------------------------------*/
+
+
+ function defaultSelectionEnd(startDate, allDay) {
+ if (allDay) {
+ return cloneDate(startDate);
+ }
+ return addMinutes(cloneDate(startDate), opt('slotMinutes'));
+ }
+
+
+ function renderSelection(startDate, endDate, allDay) { // only for all-day
+ if (allDay) {
+ if (opt('allDaySlot')) {
+ renderDayOverlay(startDate, addDays(cloneDate(endDate), 1), true);
+ }
+ }else{
+ renderSlotSelection(startDate, endDate);
+ }
+ }
+
+
+ function renderSlotSelection(startDate, endDate) {
+ var helperOption = opt('selectHelper');
+ coordinateGrid.build();
+ if (helperOption) {
+ var col = dayDiff(startDate, t.visStart) * dis + dit;
+ if (col >= 0 && col < colCnt) { // only works when times are on same day
+ var rect = coordinateGrid.rect(0, col, 0, col, slotContent); // only for horizontal coords
+ var top = timePosition(startDate, startDate);
+ var bottom = timePosition(startDate, endDate);
+ if (bottom > top) { // protect against selections that are entirely before or after visible range
+ rect.top = top;
+ rect.height = bottom - top;
+ rect.left += 2;
+ rect.width -= 5;
+ if ($.isFunction(helperOption)) {
+ var helperRes = helperOption(startDate, endDate);
+ if (helperRes) {
+ rect.position = 'absolute';
+ rect.zIndex = 8;
+ selectionHelper = $(helperRes)
+ .css(rect)
+ .appendTo(slotContent);
+ }
+ }else{
+ rect.isStart = true; // conside rect a "seg" now
+ rect.isEnd = true; //
+ selectionHelper = $(slotSegHtml(
+ {
+ title: '',
+ start: startDate,
+ end: endDate,
+ className: ['fc-select-helper'],
+ editable: false
+ },
+ rect
+ ));
+ selectionHelper.css('opacity', opt('dragOpacity'));
+ }
+ if (selectionHelper) {
+ slotBind(selectionHelper);
+ slotContent.append(selectionHelper);
+ setOuterWidth(selectionHelper, rect.width, true); // needs to be after appended
+ setOuterHeight(selectionHelper, rect.height, true);
+ }
+ }
+ }
+ }else{
+ renderSlotOverlay(startDate, endDate);
+ }
+ }
+
+
+ function clearSelection() {
+ clearOverlays();
+ if (selectionHelper) {
+ selectionHelper.remove();
+ selectionHelper = null;
+ }
+ }
+
+
+ function slotSelectionMousedown(ev) {
+ if (ev.which == 1 && opt('selectable')) { // ev.which==1 means left mouse button
+ unselect(ev);
+ var dates;
+ hoverListener.start(function(cell, origCell) {
+ clearSelection();
+ if (cell && cell.col == origCell.col && !cellIsAllDay(cell)) {
+ var d1 = cellDate(origCell);
+ var d2 = cellDate(cell);
+ dates = [
+ d1,
+ addMinutes(cloneDate(d1), opt('slotMinutes')),
+ d2,
+ addMinutes(cloneDate(d2), opt('slotMinutes'))
+ ].sort(cmp);
+ renderSlotSelection(dates[0], dates[3]);
+ }else{
+ dates = null;
+ }
+ }, ev);
+ $(document).one('mouseup', function(ev) {
+ hoverListener.stop();
+ if (dates) {
+ if (+dates[0] == +dates[1]) {
+ reportDayClick(dates[0], false, ev);
+ }
+ reportSelection(dates[0], dates[3], false, ev);
+ }
+ });
+ }
+ }
+
+
+ function reportDayClick(date, allDay, ev) {
+ trigger('dayClick', dayBodyCells[dayOfWeekCol(date.getDay())], date, allDay, ev);
+ }
+
+
+
+ /* External Dragging
+ --------------------------------------------------------------------------------*/
+
+
+ function dragStart(_dragElement, ev, ui) {
+ hoverListener.start(function(cell) {
+ clearOverlays();
+ if (cell) {
+ if (cellIsAllDay(cell)) {
+ renderCellOverlay(cell.row, cell.col, cell.row, cell.col);
+ }else{
+ var d1 = cellDate(cell);
+ var d2 = addMinutes(cloneDate(d1), opt('defaultEventMinutes'));
+ renderSlotOverlay(d1, d2);
+ }
+ }
+ }, ev);
+ }
+
+
+ function dragStop(_dragElement, ev, ui) {
+ var cell = hoverListener.stop();
+ clearOverlays();
+ if (cell) {
+ trigger('drop', _dragElement, cellDate(cell), cellIsAllDay(cell), ev, ui);
+ }
+ }
+
+
+}
+
+function AgendaEventRenderer() {
+ var t = this;
+
+
+ // exports
+ t.renderEvents = renderEvents;
+ t.compileDaySegs = compileDaySegs; // for DayEventRenderer
+ t.clearEvents = clearEvents;
+ t.slotSegHtml = slotSegHtml;
+ t.bindDaySeg = bindDaySeg;
+
+
+ // imports
+ DayEventRenderer.call(t);
+ var opt = t.opt;
+ var trigger = t.trigger;
+ //var setOverflowHidden = t.setOverflowHidden;
+ var isEventDraggable = t.isEventDraggable;
+ var isEventResizable = t.isEventResizable;
+ var eventEnd = t.eventEnd;
+ var reportEvents = t.reportEvents;
+ var reportEventClear = t.reportEventClear;
+ var eventElementHandlers = t.eventElementHandlers;
+ var setHeight = t.setHeight;
+ var getDaySegmentContainer = t.getDaySegmentContainer;
+ var getSlotSegmentContainer = t.getSlotSegmentContainer;
+ var getHoverListener = t.getHoverListener;
+ var getMaxMinute = t.getMaxMinute;
+ var getMinMinute = t.getMinMinute;
+ var timePosition = t.timePosition;
+ var colContentLeft = t.colContentLeft;
+ var colContentRight = t.colContentRight;
+ var renderDaySegs = t.renderDaySegs;
+ var resizableDayEvent = t.resizableDayEvent; // TODO: streamline binding architecture
+ var getColCnt = t.getColCnt;
+ var getColWidth = t.getColWidth;
+ var getSlotHeight = t.getSlotHeight;
+ var getBodyContent = t.getBodyContent;
+ var reportEventElement = t.reportEventElement;
+ var showEvents = t.showEvents;
+ var hideEvents = t.hideEvents;
+ var eventDrop = t.eventDrop;
+ var eventResize = t.eventResize;
+ var renderDayOverlay = t.renderDayOverlay;
+ var clearOverlays = t.clearOverlays;
+ var calendar = t.calendar;
+ var formatDate = calendar.formatDate;
+ var formatDates = calendar.formatDates;
+
+
+
+ /* Rendering
+ ----------------------------------------------------------------------------*/
+
+
+ function renderEvents(events, modifiedEventId) {
+ reportEvents(events);
+ var i, len=events.length,
+ dayEvents=[],
+ slotEvents=[];
+ for (i=0; i<len; i++) {
+ if (events[i].allDay) {
+ dayEvents.push(events[i]);
+ }else{
+ slotEvents.push(events[i]);
+ }
+ }
+ if (opt('allDaySlot')) {
+ renderDaySegs(compileDaySegs(dayEvents), modifiedEventId);
+ setHeight(); // no params means set to viewHeight
+ }
+ renderSlotSegs(compileSlotSegs(slotEvents), modifiedEventId);
+ }
+
+
+ function clearEvents() {
+ reportEventClear();
+ getDaySegmentContainer().empty();
+ getSlotSegmentContainer().empty();
+ }
+
+
+ function compileDaySegs(events) {
+ var levels = stackSegs(sliceSegs(events, $.map(events, exclEndDay), t.visStart, t.visEnd)),
+ i, levelCnt=levels.length, level,
+ j, seg,
+ segs=[];
+ for (i=0; i<levelCnt; i++) {
+ level = levels[i];
+ for (j=0; j<level.length; j++) {
+ seg = level[j];
+ seg.row = 0;
+ seg.level = i; // not needed anymore
+ segs.push(seg);
+ }
+ }
+ return segs;
+ }
+
+
+ function compileSlotSegs(events) {
+ var colCnt = getColCnt(),
+ minMinute = getMinMinute(),
+ maxMinute = getMaxMinute(),
+ d = addMinutes(cloneDate(t.visStart), minMinute),
+ visEventEnds = $.map(events, slotEventEnd),
+ i, col,
+ j, level,
+ k, seg,
+ segs=[];
+ for (i=0; i<colCnt; i++) {
+ col = stackSegs(sliceSegs(events, visEventEnds, d, addMinutes(cloneDate(d), maxMinute-minMinute)));
+ countForwardSegs(col);
+ for (j=0; j<col.length; j++) {
+ level = col[j];
+ for (k=0; k<level.length; k++) {
+ seg = level[k];
+ seg.col = i;
+ seg.level = j;
+ segs.push(seg);
+ }
+ }
+ addDays(d, 1, true);
+ }
+ return segs;
+ }
+
+
+ function slotEventEnd(event) {
+ if (event.end) {
+ return cloneDate(event.end);
+ }else{
+ return addMinutes(cloneDate(event.start), opt('defaultEventMinutes'));
+ }
+ }
+
+
+ // renders events in the 'time slots' at the bottom
+
+ function renderSlotSegs(segs, modifiedEventId) {
+
+ var i, segCnt=segs.length, seg,
+ event,
+ classes,
+ top, bottom,
+ colI, levelI, forward,
+ leftmost,
+ availWidth,
+ outerWidth,
+ left,
+ html='',
+ eventElements,
+ eventElement,
+ triggerRes,
+ vsideCache={},
+ hsideCache={},
+ key, val,
+ contentElement,
+ height,
+ slotSegmentContainer = getSlotSegmentContainer(),
+ rtl, dis, dit,
+ colCnt = getColCnt();
+
+ if (rtl = opt('isRTL')) {
+ dis = -1;
+ dit = colCnt - 1;
+ }else{
+ dis = 1;
+ dit = 0;
+ }
+
+ // calculate position/dimensions, create html
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ event = seg.event;
+ top = timePosition(seg.start, seg.start);
+ bottom = timePosition(seg.start, seg.end);
+ colI = seg.col;
+ levelI = seg.level;
+ forward = seg.forward || 0;
+ leftmost = colContentLeft(colI*dis + dit);
+ availWidth = colContentRight(colI*dis + dit) - leftmost;
+ availWidth = Math.min(availWidth-6, availWidth*.95); // TODO: move this to CSS
+ if (levelI) {
+ // indented and thin
+ outerWidth = availWidth / (levelI + forward + 1);
+ }else{
+ if (forward) {
+ // moderately wide, aligned left still
+ outerWidth = ((availWidth / (forward + 1)) - (12/2)) * 2; // 12 is the predicted width of resizer =
+ }else{
+ // can be entire width, aligned left
+ outerWidth = availWidth;
+ }
+ }
+ left = leftmost + // leftmost possible
+ (availWidth / (levelI + forward + 1) * levelI) // indentation
+ * dis + (rtl ? availWidth - outerWidth : 0); // rtl
+ seg.top = top;
+ seg.left = left;
+ seg.outerWidth = outerWidth;
+ seg.outerHeight = bottom - top;
+ html += slotSegHtml(event, seg);
+ }
+ slotSegmentContainer[0].innerHTML = html; // faster than html()
+ eventElements = slotSegmentContainer.children();
+
+ // retrieve elements, run through eventRender callback, bind event handlers
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ event = seg.event;
+ eventElement = $(eventElements[i]); // faster than eq()
+ triggerRes = trigger('eventRender', event, event, eventElement);
+ if (triggerRes === false) {
+ eventElement.remove();
+ }else{
+ if (triggerRes && triggerRes !== true) {
+ eventElement.remove();
+ eventElement = $(triggerRes)
+ .css({
+ position: 'absolute',
+ top: seg.top,
+ left: seg.left
+ })
+ .appendTo(slotSegmentContainer);
+ }
+ seg.element = eventElement;
+ if (event._id === modifiedEventId) {
+ bindSlotSeg(event, eventElement, seg);
+ }else{
+ eventElement[0]._fci = i; // for lazySegBind
+ }
+ reportEventElement(event, eventElement);
+ }
+ }
+
+ lazySegBind(slotSegmentContainer, segs, bindSlotSeg);
+
+ // record event sides and title positions
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ if (eventElement = seg.element) {
+ val = vsideCache[key = seg.key = cssKey(eventElement[0])];
+ seg.vsides = val === undefined ? (vsideCache[key] = vsides(eventElement, true)) : val;
+ val = hsideCache[key];
+ seg.hsides = val === undefined ? (hsideCache[key] = hsides(eventElement, true)) : val;
+ contentElement = eventElement.find('div.fc-event-content');
+ if (contentElement.length) {
+ seg.contentTop = contentElement[0].offsetTop;
+ }
+ }
+ }
+
+ // set all positions/dimensions at once
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ if (eventElement = seg.element) {
+ eventElement[0].style.width = Math.max(0, seg.outerWidth - seg.hsides) + 'px';
+ height = Math.max(0, seg.outerHeight - seg.vsides);
+ eventElement[0].style.height = height + 'px';
+ event = seg.event;
+ if (seg.contentTop !== undefined && height - seg.contentTop < 10) {
+ // not enough room for title, put it in the time header
+ eventElement.find('div.fc-event-time')
+ .text(formatDate(event.start, opt('timeFormat')) + ' - ' + event.title);
+ eventElement.find('div.fc-event-title')
+ .remove();
+ }
+ trigger('eventAfterRender', event, event, eventElement);
+ }
+ }
+
+ }
+
+
+ function slotSegHtml(event, seg) {
+ var html = "<";
+ var url = event.url;
+ var skinCss = getSkinCss(event, opt);
+ var skinCssAttr = (skinCss ? " style='" + skinCss + "'" : '');
+ var classes = ['fc-event', 'fc-event-skin', 'fc-event-vert'];
+ if (isEventDraggable(event)) {
+ classes.push('fc-event-draggable');
+ }
+ if (seg.isStart) {
+ classes.push('fc-corner-top');
+ }
+ if (seg.isEnd) {
+ classes.push('fc-corner-bottom');
+ }
+ classes = classes.concat(event.className);
+ if (event.source) {
+ classes = classes.concat(event.source.className || []);
+ }
+ if (url) {
+ html += "a href='" + htmlEscape(event.url) + "'";
+ }else{
+ html += "div";
+ }
+ html +=
+ " class='" + classes.join(' ') + "'" +
+ " style='position:absolute;z-index:8;top:" + seg.top + "px;left:" + seg.left + "px;" + skinCss + "'" +
+ ">" +
+ "<div class='fc-event-inner fc-event-skin'" + skinCssAttr + ">" +
+ "<div class='fc-event-head fc-event-skin'" + skinCssAttr + ">" +
+ "<div class='fc-event-time'>" +
+ htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) +
+ "</div>" +
+ "</div>" +
+ "<div class='fc-event-content'>" +
+ "<div class='fc-event-title'>" +
+ htmlEscape(event.title) +
+ "</div>" +
+ "</div>" +
+ "<div class='fc-event-bg'></div>" +
+ "</div>"; // close inner
+ if (seg.isEnd && isEventResizable(event)) {
+ html +=
+ "<div class='ui-resizable-handle ui-resizable-s'>=</div>";
+ }
+ html +=
+ "</" + (url ? "a" : "div") + ">";
+ return html;
+ }
+
+
+ function bindDaySeg(event, eventElement, seg) {
+ if (isEventDraggable(event)) {
+ draggableDayEvent(event, eventElement, seg.isStart);
+ }
+ if (seg.isEnd && isEventResizable(event)) {
+ resizableDayEvent(event, eventElement, seg);
+ }
+ eventElementHandlers(event, eventElement);
+ // needs to be after, because resizableDayEvent might stopImmediatePropagation on click
+ }
+
+
+ function bindSlotSeg(event, eventElement, seg) {
+ var timeElement = eventElement.find('div.fc-event-time');
+ if (isEventDraggable(event)) {
+ draggableSlotEvent(event, eventElement, timeElement);
+ }
+ if (seg.isEnd && isEventResizable(event)) {
+ resizableSlotEvent(event, eventElement, timeElement);
+ }
+ eventElementHandlers(event, eventElement);
+ }
+
+
+
+ /* Dragging
+ -----------------------------------------------------------------------------------*/
+
+
+ // when event starts out FULL-DAY
+
+ function draggableDayEvent(event, eventElement, isStart) {
+ var origWidth;
+ var revert;
+ var allDay=true;
+ var dayDelta;
+ var dis = opt('isRTL') ? -1 : 1;
+ var hoverListener = getHoverListener();
+ var colWidth = getColWidth();
+ var slotHeight = getSlotHeight();
+ var minMinute = getMinMinute();
+ eventElement.draggable({
+ zIndex: 9,
+ opacity: opt('dragOpacity', 'month'), // use whatever the month view was using
+ revertDuration: opt('dragRevertDuration'),
+ start: function(ev, ui) {
+ trigger('eventDragStart', eventElement, event, ev, ui);
+ hideEvents(event, eventElement);
+ origWidth = eventElement.width();
+ hoverListener.start(function(cell, origCell, rowDelta, colDelta) {
+ clearOverlays();
+ if (cell) {
+ //setOverflowHidden(true);
+ revert = false;
+ dayDelta = colDelta * dis;
+ if (!cell.row) {
+ // on full-days
+ renderDayOverlay(
+ addDays(cloneDate(event.start), dayDelta),
+ addDays(exclEndDay(event), dayDelta)
+ );
+ resetElement();
+ }else{
+ // mouse is over bottom slots
+ if (isStart) {
+ if (allDay) {
+ // convert event to temporary slot-event
+ eventElement.width(colWidth - 10); // don't use entire width
+ setOuterHeight(
+ eventElement,
+ slotHeight * Math.round(
+ (event.end ? ((event.end - event.start) / MINUTE_MS) : opt('defaultEventMinutes'))
+ / opt('slotMinutes')
+ )
+ );
+ eventElement.draggable('option', 'grid', [colWidth, 1]);
+ allDay = false;
+ }
+ }else{
+ revert = true;
+ }
+ }
+ revert = revert || (allDay && !dayDelta);
+ }else{
+ resetElement();
+ //setOverflowHidden(false);
+ revert = true;
+ }
+ eventElement.draggable('option', 'revert', revert);
+ }, ev, 'drag');
+ },
+ stop: function(ev, ui) {
+ hoverListener.stop();
+ clearOverlays();
+ trigger('eventDragStop', eventElement, event, ev, ui);
+ if (revert) {
+ // hasn't moved or is out of bounds (draggable has already reverted)
+ resetElement();
+ eventElement.css('filter', ''); // clear IE opacity side-effects
+ showEvents(event, eventElement);
+ }else{
+ // changed!
+ var minuteDelta = 0;
+ if (!allDay) {
+ minuteDelta = Math.round((eventElement.offset().top - getBodyContent().offset().top) / slotHeight)
+ * opt('slotMinutes')
+ + minMinute
+ - (event.start.getHours() * 60 + event.start.getMinutes());
+ }
+ eventDrop(this, event, dayDelta, minuteDelta, allDay, ev, ui);
+ }
+ //setOverflowHidden(false);
+ }
+ });
+ function resetElement() {
+ if (!allDay) {
+ eventElement
+ .width(origWidth)
+ .height('')
+ .draggable('option', 'grid', null);
+ allDay = true;
+ }
+ }
+ }
+
+
+ // when event starts out IN TIMESLOTS
+
+ function draggableSlotEvent(event, eventElement, timeElement) {
+ var origPosition;
+ var allDay=false;
+ var dayDelta;
+ var minuteDelta;
+ var prevMinuteDelta;
+ var dis = opt('isRTL') ? -1 : 1;
+ var hoverListener = getHoverListener();
+ var colCnt = getColCnt();
+ var colWidth = getColWidth();
+ var slotHeight = getSlotHeight();
+ eventElement.draggable({
+ zIndex: 9,
+ scroll: false,
+ grid: [colWidth, slotHeight],
+ axis: colCnt==1 ? 'y' : false,
+ opacity: opt('dragOpacity'),
+ revertDuration: opt('dragRevertDuration'),
+ start: function(ev, ui) {
+ trigger('eventDragStart', eventElement, event, ev, ui);
+ hideEvents(event, eventElement);
+ origPosition = eventElement.position();
+ minuteDelta = prevMinuteDelta = 0;
+ hoverListener.start(function(cell, origCell, rowDelta, colDelta) {
+ eventElement.draggable('option', 'revert', !cell);
+ clearOverlays();
+ if (cell) {
+ dayDelta = colDelta * dis;
+ if (opt('allDaySlot') && !cell.row) {
+ // over full days
+ if (!allDay) {
+ // convert to temporary all-day event
+ allDay = true;
+ timeElement.hide();
+ eventElement.draggable('option', 'grid', null);
+ }
+ renderDayOverlay(
+ addDays(cloneDate(event.start), dayDelta),
+ addDays(exclEndDay(event), dayDelta)
+ );
+ }else{
+ // on slots
+ resetElement();
+ }
+ }
+ }, ev, 'drag');
+ },
+ drag: function(ev, ui) {
+ minuteDelta = Math.round((ui.position.top - origPosition.top) / slotHeight) * opt('slotMinutes');
+ if (minuteDelta != prevMinuteDelta) {
+ if (!allDay) {
+ updateTimeText(minuteDelta);
+ }
+ prevMinuteDelta = minuteDelta;
+ }
+ },
+ stop: function(ev, ui) {
+ var cell = hoverListener.stop();
+ clearOverlays();
+ trigger('eventDragStop', eventElement, event, ev, ui);
+ if (cell && (dayDelta || minuteDelta || allDay)) {
+ // changed!
+ eventDrop(this, event, dayDelta, allDay ? 0 : minuteDelta, allDay, ev, ui);
+ }else{
+ // either no change or out-of-bounds (draggable has already reverted)
+ resetElement();
+ eventElement.css('filter', ''); // clear IE opacity side-effects
+ eventElement.css(origPosition); // sometimes fast drags make event revert to wrong position
+ updateTimeText(0);
+ showEvents(event, eventElement);
+ }
+ }
+ });
+ function updateTimeText(minuteDelta) {
+ var newStart = addMinutes(cloneDate(event.start), minuteDelta);
+ var newEnd;
+ if (event.end) {
+ newEnd = addMinutes(cloneDate(event.end), minuteDelta);
+ }
+ timeElement.text(formatDates(newStart, newEnd, opt('timeFormat')));
+ }
+ function resetElement() {
+ // convert back to original slot-event
+ if (allDay) {
+ timeElement.css('display', ''); // show() was causing display=inline
+ eventElement.draggable('option', 'grid', [colWidth, slotHeight]);
+ allDay = false;
+ }
+ }
+ }
+
+
+
+ /* Resizing
+ --------------------------------------------------------------------------------------*/
+
+
+ function resizableSlotEvent(event, eventElement, timeElement) {
+ var slotDelta, prevSlotDelta;
+ var slotHeight = getSlotHeight();
+ eventElement.resizable({
+ handles: {
+ s: 'div.ui-resizable-s'
+ },
+ grid: slotHeight,
+ start: function(ev, ui) {
+ slotDelta = prevSlotDelta = 0;
+ hideEvents(event, eventElement);
+ eventElement.css('z-index', 9);
+ trigger('eventResizeStart', this, event, ev, ui);
+ },
+ resize: function(ev, ui) {
+ // don't rely on ui.size.height, doesn't take grid into account
+ slotDelta = Math.round((Math.max(slotHeight, eventElement.height()) - ui.originalSize.height) / slotHeight);
+ if (slotDelta != prevSlotDelta) {
+ timeElement.text(
+ formatDates(
+ event.start,
+ (!slotDelta && !event.end) ? null : // no change, so don't display time range
+ addMinutes(eventEnd(event), opt('slotMinutes')*slotDelta),
+ opt('timeFormat')
+ )
+ );
+ prevSlotDelta = slotDelta;
+ }
+ },
+ stop: function(ev, ui) {
+ trigger('eventResizeStop', this, event, ev, ui);
+ if (slotDelta) {
+ eventResize(this, event, 0, opt('slotMinutes')*slotDelta, ev, ui);
+ }else{
+ eventElement.css('z-index', 8);
+ showEvents(event, eventElement);
+ // BUG: if event was really short, need to put title back in span
+ }
+ }
+ });
+ }
+
+
+}
+
+
+function countForwardSegs(levels) {
+ var i, j, k, level, segForward, segBack;
+ for (i=levels.length-1; i>0; i--) {
+ level = levels[i];
+ for (j=0; j<level.length; j++) {
+ segForward = level[j];
+ for (k=0; k<levels[i-1].length; k++) {
+ segBack = levels[i-1][k];
+ if (segsCollide(segForward, segBack)) {
+ segBack.forward = Math.max(segBack.forward||0, (segForward.forward||0)+1);
+ }
+ }
+ }
+ }
+}
+
+
+
+
+function View(element, calendar, viewName) {
+ var t = this;
+
+
+ // exports
+ t.element = element;
+ t.calendar = calendar;
+ t.name = viewName;
+ t.opt = opt;
+ t.trigger = trigger;
+ //t.setOverflowHidden = setOverflowHidden;
+ t.isEventDraggable = isEventDraggable;
+ t.isEventResizable = isEventResizable;
+ t.reportEvents = reportEvents;
+ t.eventEnd = eventEnd;
+ t.reportEventElement = reportEventElement;
+ t.reportEventClear = reportEventClear;
+ t.eventElementHandlers = eventElementHandlers;
+ t.showEvents = showEvents;
+ t.hideEvents = hideEvents;
+ t.eventDrop = eventDrop;
+ t.eventResize = eventResize;
+ // t.title
+ // t.start, t.end
+ // t.visStart, t.visEnd
+
+
+ // imports
+ var defaultEventEnd = t.defaultEventEnd;
+ var normalizeEvent = calendar.normalizeEvent; // in EventManager
+ var reportEventChange = calendar.reportEventChange;
+
+
+ // locals
+ var eventsByID = {};
+ var eventElements = [];
+ var eventElementsByID = {};
+ var options = calendar.options;
+
+
+
+ function opt(name, viewNameOverride) {
+ var v = options[name];
+ if (typeof v == 'object') {
+ return smartProperty(v, viewNameOverride || viewName);
+ }
+ return v;
+ }
+
+
+ function trigger(name, thisObj) {
+ return calendar.trigger.apply(
+ calendar,
+ [name, thisObj || t].concat(Array.prototype.slice.call(arguments, 2), [t])
+ );
+ }
+
+
+ /*
+ function setOverflowHidden(bool) {
+ element.css('overflow', bool ? 'hidden' : '');
+ }
+ */
+
+
+ function isEventDraggable(event) {
+ return isEventEditable(event) && !opt('disableDragging');
+ }
+
+
+ function isEventResizable(event) { // but also need to make sure the seg.isEnd == true
+ return isEventEditable(event) && !opt('disableResizing');
+ }
+
+
+ function isEventEditable(event) {
+ return firstDefined(event.editable, (event.source || {}).editable, opt('editable'));
+ }
+
+
+
+ /* Event Data
+ ------------------------------------------------------------------------------*/
+
+
+ // report when view receives new events
+ function reportEvents(events) { // events are already normalized at this point
+ eventsByID = {};
+ var i, len=events.length, event;
+ for (i=0; i<len; i++) {
+ event = events[i];
+ if (eventsByID[event._id]) {
+ eventsByID[event._id].push(event);
+ }else{
+ eventsByID[event._id] = [event];
+ }
+ }
+ }
+
+
+ // returns a Date object for an event's end
+ function eventEnd(event) {
+ return event.end ? cloneDate(event.end) : defaultEventEnd(event);
+ }
+
+
+
+ /* Event Elements
+ ------------------------------------------------------------------------------*/
+
+
+ // report when view creates an element for an event
+ function reportEventElement(event, element) {
+ eventElements.push(element);
+ if (eventElementsByID[event._id]) {
+ eventElementsByID[event._id].push(element);
+ }else{
+ eventElementsByID[event._id] = [element];
+ }
+ }
+
+
+ function reportEventClear() {
+ eventElements = [];
+ eventElementsByID = {};
+ }
+
+
+ // attaches eventClick, eventMouseover, eventMouseout
+ function eventElementHandlers(event, eventElement) {
+ eventElement
+ .click(function(ev) {
+ if (!eventElement.hasClass('ui-draggable-dragging') &&
+ !eventElement.hasClass('ui-resizable-resizing')) {
+ return trigger('eventClick', this, event, ev);
+ }
+ })
+ .hover(
+ function(ev) {
+ trigger('eventMouseover', this, event, ev);
+ },
+ function(ev) {
+ trigger('eventMouseout', this, event, ev);
+ }
+ );
+ // TODO: don't fire eventMouseover/eventMouseout *while* dragging is occuring (on subject element)
+ // TODO: same for resizing
+ }
+
+
+ function showEvents(event, exceptElement) {
+ eachEventElement(event, exceptElement, 'show');
+ }
+
+
+ function hideEvents(event, exceptElement) {
+ eachEventElement(event, exceptElement, 'hide');
+ }
+
+
+ function eachEventElement(event, exceptElement, funcName) {
+ var elements = eventElementsByID[event._id],
+ i, len = elements.length;
+ for (i=0; i<len; i++) {
+ if (!exceptElement || elements[i][0] != exceptElement[0]) {
+ elements[i][funcName]();
+ }
+ }
+ }
+
+
+
+ /* Event Modification Reporting
+ ---------------------------------------------------------------------------------*/
+
+
+ function eventDrop(e, event, dayDelta, minuteDelta, allDay, ev, ui) {
+ var oldAllDay = event.allDay;
+ var eventId = event._id;
+ moveEvents(eventsByID[eventId], dayDelta, minuteDelta, allDay);
+ trigger(
+ 'eventDrop',
+ e,
+ event,
+ dayDelta,
+ minuteDelta,
+ allDay,
+ function() {
+ // TODO: investigate cases where this inverse technique might not work
+ moveEvents(eventsByID[eventId], -dayDelta, -minuteDelta, oldAllDay);
+ reportEventChange(eventId);
+ },
+ ev,
+ ui
+ );
+ reportEventChange(eventId);
+ }
+
+
+ function eventResize(e, event, dayDelta, minuteDelta, ev, ui) {
+ var eventId = event._id;
+ elongateEvents(eventsByID[eventId], dayDelta, minuteDelta);
+ trigger(
+ 'eventResize',
+ e,
+ event,
+ dayDelta,
+ minuteDelta,
+ function() {
+ // TODO: investigate cases where this inverse technique might not work
+ elongateEvents(eventsByID[eventId], -dayDelta, -minuteDelta);
+ reportEventChange(eventId);
+ },
+ ev,
+ ui
+ );
+ reportEventChange(eventId);
+ }
+
+
+
+ /* Event Modification Math
+ ---------------------------------------------------------------------------------*/
+
+
+ function moveEvents(events, dayDelta, minuteDelta, allDay) {
+ minuteDelta = minuteDelta || 0;
+ for (var e, len=events.length, i=0; i<len; i++) {
+ e = events[i];
+ if (allDay !== undefined) {
+ e.allDay = allDay;
+ }
+ addMinutes(addDays(e.start, dayDelta, true), minuteDelta);
+ if (e.end) {
+ e.end = addMinutes(addDays(e.end, dayDelta, true), minuteDelta);
+ }
+ normalizeEvent(e, options);
+ }
+ }
+
+
+ function elongateEvents(events, dayDelta, minuteDelta) {
+ minuteDelta = minuteDelta || 0;
+ for (var e, len=events.length, i=0; i<len; i++) {
+ e = events[i];
+ e.end = addMinutes(addDays(eventEnd(e), dayDelta, true), minuteDelta);
+ normalizeEvent(e, options);
+ }
+ }
+
+
+}
+
+function DayEventRenderer() {
+ var t = this;
+
+
+ // exports
+ t.renderDaySegs = renderDaySegs;
+ t.resizableDayEvent = resizableDayEvent;
+
+
+ // imports
+ var opt = t.opt;
+ var trigger = t.trigger;
+ var isEventDraggable = t.isEventDraggable;
+ var isEventResizable = t.isEventResizable;
+ var eventEnd = t.eventEnd;
+ var reportEventElement = t.reportEventElement;
+ var showEvents = t.showEvents;
+ var hideEvents = t.hideEvents;
+ var eventResize = t.eventResize;
+ var getRowCnt = t.getRowCnt;
+ var getColCnt = t.getColCnt;
+ var getColWidth = t.getColWidth;
+ var allDayRow = t.allDayRow;
+ var allDayBounds = t.allDayBounds;
+ var colContentLeft = t.colContentLeft;
+ var colContentRight = t.colContentRight;
+ var dayOfWeekCol = t.dayOfWeekCol;
+ var dateCell = t.dateCell;
+ var compileDaySegs = t.compileDaySegs;
+ var getDaySegmentContainer = t.getDaySegmentContainer;
+ var bindDaySeg = t.bindDaySeg; //TODO: streamline this
+ var formatDates = t.calendar.formatDates;
+ var renderDayOverlay = t.renderDayOverlay;
+ var clearOverlays = t.clearOverlays;
+ var clearSelection = t.clearSelection;
+
+
+
+ /* Rendering
+ -----------------------------------------------------------------------------*/
+
+
+ function renderDaySegs(segs, modifiedEventId) {
+ var segmentContainer = getDaySegmentContainer();
+ var rowDivs;
+ var rowCnt = getRowCnt();
+ var colCnt = getColCnt();
+ var i = 0;
+ var rowI;
+ var levelI;
+ var colHeights;
+ var j;
+ var segCnt = segs.length;
+ var seg;
+ var top;
+ var k;
+ segmentContainer[0].innerHTML = daySegHTML(segs); // faster than .html()
+ daySegElementResolve(segs, segmentContainer.children());
+ daySegElementReport(segs);
+ daySegHandlers(segs, segmentContainer, modifiedEventId);
+ daySegCalcHSides(segs);
+ daySegSetWidths(segs);
+ daySegCalcHeights(segs);
+ rowDivs = getRowDivs();
+ // set row heights, calculate event tops (in relation to row top)
+ for (rowI=0; rowI<rowCnt; rowI++) {
+ levelI = 0;
+ colHeights = [];
+ for (j=0; j<colCnt; j++) {
+ colHeights[j] = 0;
+ }
+ while (i<segCnt && (seg = segs[i]).row == rowI) {
+ // loop through segs in a row
+ top = arrayMax(colHeights.slice(seg.startCol, seg.endCol));
+ seg.top = top;
+ top += seg.outerHeight;
+ for (k=seg.startCol; k<seg.endCol; k++) {
+ colHeights[k] = top;
+ }
+ i++;
+ }
+ rowDivs[rowI].height(arrayMax(colHeights));
+ }
+ daySegSetTops(segs, getRowTops(rowDivs));
+ }
+
+
+ function renderTempDaySegs(segs, adjustRow, adjustTop) {
+ var tempContainer = $("<div/>");
+ var elements;
+ var segmentContainer = getDaySegmentContainer();
+ var i;
+ var segCnt = segs.length;
+ var element;
+ tempContainer[0].innerHTML = daySegHTML(segs); // faster than .html()
+ elements = tempContainer.children();
+ segmentContainer.append(elements);
+ daySegElementResolve(segs, elements);
+ daySegCalcHSides(segs);
+ daySegSetWidths(segs);
+ daySegCalcHeights(segs);
+ daySegSetTops(segs, getRowTops(getRowDivs()));
+ elements = [];
+ for (i=0; i<segCnt; i++) {
+ element = segs[i].element;
+ if (element) {
+ if (segs[i].row === adjustRow) {
+ element.css('top', adjustTop);
+ }
+ elements.push(element[0]);
+ }
+ }
+ return $(elements);
+ }
+
+
+ function daySegHTML(segs) { // also sets seg.left and seg.outerWidth
+ var rtl = opt('isRTL');
+ var i;
+ var segCnt=segs.length;
+ var seg;
+ var event;
+ var url;
+ var classes;
+ var bounds = allDayBounds();
+ var minLeft = bounds.left;
+ var maxLeft = bounds.right;
+ var leftCol;
+ var rightCol;
+ var left;
+ var right;
+ var skinCss;
+ var html = '';
+ // calculate desired position/dimensions, create html
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ event = seg.event;
+ classes = ['fc-event', 'fc-event-skin', 'fc-event-hori'];
+ if (isEventDraggable(event)) {
+ classes.push('fc-event-draggable');
+ }
+ if (rtl) {
+ if (seg.isStart) {
+ classes.push('fc-corner-right');
+ }
+ if (seg.isEnd) {
+ classes.push('fc-corner-left');
+ }
+ leftCol = dayOfWeekCol(seg.end.getDay()-1);
+ rightCol = dayOfWeekCol(seg.start.getDay());
+ left = seg.isEnd ? colContentLeft(leftCol) : minLeft;
+ right = seg.isStart ? colContentRight(rightCol) : maxLeft;
+ }else{
+ if (seg.isStart) {
+ classes.push('fc-corner-left');
+ }
+ if (seg.isEnd) {
+ classes.push('fc-corner-right');
+ }
+ leftCol = dayOfWeekCol(seg.start.getDay());
+ rightCol = dayOfWeekCol(seg.end.getDay()-1);
+ left = seg.isStart ? colContentLeft(leftCol) : minLeft;
+ right = seg.isEnd ? colContentRight(rightCol) : maxLeft;
+ }
+ classes = classes.concat(event.className);
+ if (event.source) {
+ classes = classes.concat(event.source.className || []);
+ }
+ url = event.url;
+ skinCss = getSkinCss(event, opt);
+ if (url) {
+ html += "<a href='" + htmlEscape(url) + "'";
+ }else{
+ html += "<div";
+ }
+ html +=
+ " class='" + classes.join(' ') + "'" +
+ " style='position:absolute;z-index:8;left:"+left+"px;" + skinCss + "'" +
+ ">" +
+ "<div" +
+ " class='fc-event-inner fc-event-skin'" +
+ (skinCss ? " style='" + skinCss + "'" : '') +
+ ">";
+ if (!event.allDay && seg.isStart) {
+ html +=
+ "<span class='fc-event-time'>" +
+ htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) +
+ "</span>";
+ }
+ html +=
+ "<span class='fc-event-title'>" + htmlEscape(event.title) + "</span>" +
+ "</div>";
+ if (seg.isEnd && isEventResizable(event)) {
+ html +=
+ "<div class='ui-resizable-handle ui-resizable-" + (rtl ? 'w' : 'e') + "'>" +
+ "&nbsp;&nbsp;&nbsp;" + // makes hit area a lot better for IE6/7
+ "</div>";
+ }
+ html +=
+ "</" + (url ? "a" : "div" ) + ">";
+ seg.left = left;
+ seg.outerWidth = right - left;
+ seg.startCol = leftCol;
+ seg.endCol = rightCol + 1; // needs to be exclusive
+ }
+ return html;
+ }
+
+
+ function daySegElementResolve(segs, elements) { // sets seg.element
+ var i;
+ var segCnt = segs.length;
+ var seg;
+ var event;
+ var element;
+ var triggerRes;
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ event = seg.event;
+ element = $(elements[i]); // faster than .eq()
+ triggerRes = trigger('eventRender', event, event, element);
+ if (triggerRes === false) {
+ element.remove();
+ }else{
+ if (triggerRes && triggerRes !== true) {
+ triggerRes = $(triggerRes)
+ .css({
+ position: 'absolute',
+ left: seg.left
+ });
+ element.replaceWith(triggerRes);
+ element = triggerRes;
+ }
+ seg.element = element;
+ }
+ }
+ }
+
+
+ function daySegElementReport(segs) {
+ var i;
+ var segCnt = segs.length;
+ var seg;
+ var element;
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ element = seg.element;
+ if (element) {
+ reportEventElement(seg.event, element);
+ }
+ }
+ }
+
+
+ function daySegHandlers(segs, segmentContainer, modifiedEventId) {
+ var i;
+ var segCnt = segs.length;
+ var seg;
+ var element;
+ var event;
+ // retrieve elements, run through eventRender callback, bind handlers
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ element = seg.element;
+ if (element) {
+ event = seg.event;
+ if (event._id === modifiedEventId) {
+ bindDaySeg(event, element, seg);
+ }else{
+ element[0]._fci = i; // for lazySegBind
+ }
+ }
+ }
+ lazySegBind(segmentContainer, segs, bindDaySeg);
+ }
+
+
+ function daySegCalcHSides(segs) { // also sets seg.key
+ var i;
+ var segCnt = segs.length;
+ var seg;
+ var element;
+ var key, val;
+ var hsideCache = {};
+ // record event horizontal sides
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ element = seg.element;
+ if (element) {
+ key = seg.key = cssKey(element[0]);
+ val = hsideCache[key];
+ if (val === undefined) {
+ val = hsideCache[key] = hsides(element, true);
+ }
+ seg.hsides = val;
+ }
+ }
+ }
+
+
+ function daySegSetWidths(segs) {
+ var i;
+ var segCnt = segs.length;
+ var seg;
+ var element;
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ element = seg.element;
+ if (element) {
+ element[0].style.width = Math.max(0, seg.outerWidth - seg.hsides) + 'px';
+ }
+ }
+ }
+
+
+ function daySegCalcHeights(segs) {
+ var i;
+ var segCnt = segs.length;
+ var seg;
+ var element;
+ var key, val;
+ var vmarginCache = {};
+ // record event heights
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ element = seg.element;
+ if (element) {
+ key = seg.key; // created in daySegCalcHSides
+ val = vmarginCache[key];
+ if (val === undefined) {
+ val = vmarginCache[key] = vmargins(element);
+ }
+ seg.outerHeight = element[0].offsetHeight + val;
+ }
+ }
+ }
+
+
+ function getRowDivs() {
+ var i;
+ var rowCnt = getRowCnt();
+ var rowDivs = [];
+ for (i=0; i<rowCnt; i++) {
+ rowDivs[i] = allDayRow(i)
+ .find('td:first div.fc-day-content > div'); // optimal selector?
+ }
+ return rowDivs;
+ }
+
+
+ function getRowTops(rowDivs) {
+ var i;
+ var rowCnt = rowDivs.length;
+ var tops = [];
+ for (i=0; i<rowCnt; i++) {
+ tops[i] = rowDivs[i][0].offsetTop; // !!?? but this means the element needs position:relative if in a table cell!!!!
+ }
+ return tops;
+ }
+
+
+ function daySegSetTops(segs, rowTops) { // also triggers eventAfterRender
+ var i;
+ var segCnt = segs.length;
+ var seg;
+ var element;
+ var event;
+ for (i=0; i<segCnt; i++) {
+ seg = segs[i];
+ element = seg.element;
+ if (element) {
+ element[0].style.top = rowTops[seg.row] + (seg.top||0) + 'px';
+ event = seg.event;
+ trigger('eventAfterRender', event, event, element);
+ }
+ }
+ }
+
+
+
+ /* Resizing
+ -----------------------------------------------------------------------------------*/
+
+
+ function resizableDayEvent(event, element, seg) {
+ var rtl = opt('isRTL');
+ var direction = rtl ? 'w' : 'e';
+ var handle = element.find('div.ui-resizable-' + direction);
+ var isResizing = false;
+
+ // TODO: look into using jquery-ui mouse widget for this stuff
+ disableTextSelection(element); // prevent native <a> selection for IE
+ element
+ .mousedown(function(ev) { // prevent native <a> selection for others
+ ev.preventDefault();
+ })
+ .click(function(ev) {
+ if (isResizing) {
+ ev.preventDefault(); // prevent link from being visited (only method that worked in IE6)
+ ev.stopImmediatePropagation(); // prevent fullcalendar eventClick handler from being called
+ // (eventElementHandlers needs to be bound after resizableDayEvent)
+ }
+ });
+
+ handle.mousedown(function(ev) {
+ if (ev.which != 1) {
+ return; // needs to be left mouse button
+ }
+ isResizing = true;
+ var hoverListener = t.getHoverListener();
+ var rowCnt = getRowCnt();
+ var colCnt = getColCnt();
+ var dis = rtl ? -1 : 1;
+ var dit = rtl ? colCnt-1 : 0;
+ var elementTop = element.css('top');
+ var dayDelta;
+ var helpers;
+ var eventCopy = $.extend({}, event);
+ var minCell = dateCell(event.start);
+ clearSelection();
+ $('body')
+ .css('cursor', direction + '-resize')
+ .one('mouseup', mouseup);
+ trigger('eventResizeStart', this, event, ev);
+ hoverListener.start(function(cell, origCell) {
+ if (cell) {
+ var r = Math.max(minCell.row, cell.row);
+ var c = cell.col;
+ if (rowCnt == 1) {
+ r = 0; // hack for all-day area in agenda views
+ }
+ if (r == minCell.row) {
+ if (rtl) {
+ c = Math.min(minCell.col, c);
+ }else{
+ c = Math.max(minCell.col, c);
+ }
+ }
+ dayDelta = (r*7 + c*dis+dit) - (origCell.row*7 + origCell.col*dis+dit);
+ var newEnd = addDays(eventEnd(event), dayDelta, true);
+ if (dayDelta) {
+ eventCopy.end = newEnd;
+ var oldHelpers = helpers;
+ helpers = renderTempDaySegs(compileDaySegs([eventCopy]), seg.row, elementTop);
+ helpers.find('*').css('cursor', direction + '-resize');
+ if (oldHelpers) {
+ oldHelpers.remove();
+ }
+ hideEvents(event);
+ }else{
+ if (helpers) {
+ showEvents(event);
+ helpers.remove();
+ helpers = null;
+ }
+ }
+ clearOverlays();
+ renderDayOverlay(event.start, addDays(cloneDate(newEnd), 1)); // coordinate grid already rebuild at hoverListener.start
+ }
+ }, ev);
+
+ function mouseup(ev) {
+ trigger('eventResizeStop', this, event, ev);
+ $('body').css('cursor', '');
+ hoverListener.stop();
+ clearOverlays();
+ if (dayDelta) {
+ eventResize(this, event, dayDelta, 0, ev);
+ // event redraw will clear helpers
+ }
+ // otherwise, the drag handler already restored the old events
+
+ setTimeout(function() { // make this happen after the element's click event
+ isResizing = false;
+ },0);
+ }
+
+ });
+ }
+
+
+}
+
+//BUG: unselect needs to be triggered when events are dragged+dropped
+
+function SelectionManager() {
+ var t = this;
+
+
+ // exports
+ t.select = select;
+ t.unselect = unselect;
+ t.reportSelection = reportSelection;
+ t.daySelectionMousedown = daySelectionMousedown;
+
+
+ // imports
+ var opt = t.opt;
+ var trigger = t.trigger;
+ var defaultSelectionEnd = t.defaultSelectionEnd;
+ var renderSelection = t.renderSelection;
+ var clearSelection = t.clearSelection;
+
+
+ // locals
+ var selected = false;
+
+
+
+ // unselectAuto
+ if (opt('selectable') && opt('unselectAuto')) {
+ $(document).mousedown(function(ev) {
+ var ignore = opt('unselectCancel');
+ if (ignore) {
+ if ($(ev.target).parents(ignore).length) { // could be optimized to stop after first match
+ return;
+ }
+ }
+ unselect(ev);
+ });
+ }
+
+
+ function select(startDate, endDate, allDay) {
+ unselect();
+ if (!endDate) {
+ endDate = defaultSelectionEnd(startDate, allDay);
+ }
+ renderSelection(startDate, endDate, allDay);
+ reportSelection(startDate, endDate, allDay);
+ }
+
+
+ function unselect(ev) {
+ if (selected) {
+ selected = false;
+ clearSelection();
+ trigger('unselect', null, ev);
+ }
+ }
+
+
+ function reportSelection(startDate, endDate, allDay, ev) {
+ selected = true;
+ trigger('select', null, startDate, endDate, allDay, ev);
+ }
+
+
+ function daySelectionMousedown(ev) { // not really a generic manager method, oh well
+ var cellDate = t.cellDate;
+ var cellIsAllDay = t.cellIsAllDay;
+ var hoverListener = t.getHoverListener();
+ var reportDayClick = t.reportDayClick; // this is hacky and sort of weird
+ if (ev.which == 1 && opt('selectable')) { // which==1 means left mouse button
+ unselect(ev);
+ var _mousedownElement = this;
+ var dates;
+ hoverListener.start(function(cell, origCell) { // TODO: maybe put cellDate/cellIsAllDay info in cell
+ clearSelection();
+ if (cell && cellIsAllDay(cell)) {
+ dates = [ cellDate(origCell), cellDate(cell) ].sort(cmp);
+ renderSelection(dates[0], dates[1], true);
+ }else{
+ dates = null;
+ }
+ }, ev);
+ $(document).one('mouseup', function(ev) {
+ hoverListener.stop();
+ if (dates) {
+ if (+dates[0] == +dates[1]) {
+ reportDayClick(dates[0], true, ev);
+ }
+ reportSelection(dates[0], dates[1], true, ev);
+ }
+ });
+ }
+ }
+
+
+}
+
+function OverlayManager() {
+ var t = this;
+
+
+ // exports
+ t.renderOverlay = renderOverlay;
+ t.clearOverlays = clearOverlays;
+
+
+ // locals
+ var usedOverlays = [];
+ var unusedOverlays = [];
+
+
+ function renderOverlay(rect, parent) {
+ var e = unusedOverlays.shift();
+ if (!e) {
+ e = $("<div class='fc-cell-overlay' style='position:absolute;z-index:3'/>");
+ }
+ if (e[0].parentNode != parent[0]) {
+ e.appendTo(parent);
+ }
+ usedOverlays.push(e.css(rect).show());
+ return e;
+ }
+
+
+ function clearOverlays() {
+ var e;
+ while (e = usedOverlays.shift()) {
+ unusedOverlays.push(e.hide().unbind());
+ }
+ }
+
+
+}
+
+function CoordinateGrid(buildFunc) {
+
+ var t = this;
+ var rows;
+ var cols;
+
+
+ t.build = function() {
+ rows = [];
+ cols = [];
+ buildFunc(rows, cols);
+ };
+
+
+ t.cell = function(x, y) {
+ var rowCnt = rows.length;
+ var colCnt = cols.length;
+ var i, r=-1, c=-1;
+ for (i=0; i<rowCnt; i++) {
+ if (y >= rows[i][0] && y < rows[i][1]) {
+ r = i;
+ break;
+ }
+ }
+ for (i=0; i<colCnt; i++) {
+ if (x >= cols[i][0] && x < cols[i][1]) {
+ c = i;
+ break;
+ }
+ }
+ return (r>=0 && c>=0) ? { row:r, col:c } : null;
+ };
+
+
+ t.rect = function(row0, col0, row1, col1, originElement) { // row1,col1 is inclusive
+ var origin = originElement.offset();
+ return {
+ top: rows[row0][0] - origin.top,
+ left: cols[col0][0] - origin.left,
+ width: cols[col1][1] - cols[col0][0],
+ height: rows[row1][1] - rows[row0][0]
+ };
+ };
+
+}
+
+function HoverListener(coordinateGrid) {
+
+
+ var t = this;
+ var bindType;
+ var change;
+ var firstCell;
+ var cell;
+
+
+ t.start = function(_change, ev, _bindType) {
+ change = _change;
+ firstCell = cell = null;
+ coordinateGrid.build();
+ mouse(ev);
+ bindType = _bindType || 'mousemove';
+ $(document).bind(bindType, mouse);
+ };
+
+
+ function mouse(ev) {
+ _fixUIEvent(ev); // see below
+ var newCell = coordinateGrid.cell(ev.pageX, ev.pageY);
+ if (!newCell != !cell || newCell && (newCell.row != cell.row || newCell.col != cell.col)) {
+ if (newCell) {
+ if (!firstCell) {
+ firstCell = newCell;
+ }
+ change(newCell, firstCell, newCell.row-firstCell.row, newCell.col-firstCell.col);
+ }else{
+ change(newCell, firstCell);
+ }
+ cell = newCell;
+ }
+ }
+
+
+ t.stop = function() {
+ $(document).unbind(bindType, mouse);
+ return cell;
+ };
+
+
+}
+
+
+
+// this fix was only necessary for jQuery UI 1.8.16 (and jQuery 1.7 or 1.7.1)
+// upgrading to jQuery UI 1.8.17 (and using either jQuery 1.7 or 1.7.1) fixed the problem
+// but keep this in here for 1.8.16 users
+// and maybe remove it down the line
+
+function _fixUIEvent(event) { // for issue 1168
+ if (event.pageX === undefined) {
+ event.pageX = event.originalEvent.pageX;
+ event.pageY = event.originalEvent.pageY;
+ }
+}
+function HorizontalPositionCache(getElement) {
+
+ var t = this,
+ elements = {},
+ lefts = {},
+ rights = {};
+
+ function e(i) {
+ return elements[i] = elements[i] || getElement(i);
+ }
+
+ t.left = function(i) {
+ return lefts[i] = lefts[i] === undefined ? e(i).position().left : lefts[i];
+ };
+
+ t.right = function(i) {
+ return rights[i] = rights[i] === undefined ? t.left(i) + e(i).width() : rights[i];
+ };
+
+ t.clear = function() {
+ elements = {};
+ lefts = {};
+ rights = {};
+ };
+
+}
+
+})(jQuery);
+
+//</script>
diff --git a/mod/event_calendar/views/default/js/event_calendar/gcal.js b/mod/event_calendar/views/default/js/event_calendar/gcal.js
new file mode 100644
index 000000000..e9bbe26d8
--- /dev/null
+++ b/mod/event_calendar/views/default/js/event_calendar/gcal.js
@@ -0,0 +1,112 @@
+/*
+ * FullCalendar v1.5.3 Google Calendar Plugin
+ *
+ * Copyright (c) 2011 Adam Shaw
+ * Dual licensed under the MIT and GPL licenses, located in
+ * MIT-LICENSE.txt and GPL-LICENSE.txt respectively.
+ *
+ * Date: Mon Feb 6 22:40:40 2012 -0800
+ *
+ */
+
+(function($) {
+
+
+var fc = $.fullCalendar;
+var formatDate = fc.formatDate;
+var parseISO8601 = fc.parseISO8601;
+var addDays = fc.addDays;
+var applyAll = fc.applyAll;
+
+
+fc.sourceNormalizers.push(function(sourceOptions) {
+ if (sourceOptions.dataType == 'gcal' ||
+ sourceOptions.dataType === undefined &&
+ (sourceOptions.url || '').match(/^(http|https):\/\/www.google.com\/calendar\/feeds\//)) {
+ sourceOptions.dataType = 'gcal';
+ if (sourceOptions.editable === undefined) {
+ sourceOptions.editable = false;
+ }
+ }
+});
+
+
+fc.sourceFetchers.push(function(sourceOptions, start, end) {
+ if (sourceOptions.dataType == 'gcal') {
+ return transformOptions(sourceOptions, start, end);
+ }
+});
+
+
+function transformOptions(sourceOptions, start, end) {
+
+ var success = sourceOptions.success;
+ var data = $.extend({}, sourceOptions.data || {}, {
+ 'start-min': formatDate(start, 'u'),
+ 'start-max': formatDate(end, 'u'),
+ 'singleevents': true,
+ 'max-results': 9999
+ });
+
+ var ctz = sourceOptions.currentTimezone;
+ if (ctz) {
+ data.ctz = ctz = ctz.replace(' ', '_');
+ }
+
+ return $.extend({}, sourceOptions, {
+ url: sourceOptions.url.replace(/\/basic$/, '/full') + '?alt=json-in-script&callback=?',
+ dataType: 'jsonp',
+ data: data,
+ startParam: false,
+ endParam: false,
+ success: function(data) {
+ var events = [];
+ if (data.feed.entry) {
+ $.each(data.feed.entry, function(i, entry) {
+ var startStr = entry['gd$when'][0]['startTime'];
+ var start = parseISO8601(startStr, true);
+ var end = parseISO8601(entry['gd$when'][0]['endTime'], true);
+ var allDay = startStr.indexOf('T') == -1;
+ var url;
+ $.each(entry.link, function(i, link) {
+ if (link.type == 'text/html') {
+ url = link.href;
+ if (ctz) {
+ url += (url.indexOf('?') == -1 ? '?' : '&') + 'ctz=' + ctz;
+ }
+ }
+ });
+ if (allDay) {
+ addDays(end, -1); // make inclusive
+ }
+ events.push({
+ id: entry['gCal$uid']['value'],
+ title: entry['title']['$t'],
+ url: url,
+ start: start,
+ end: end,
+ allDay: allDay,
+ location: entry['gd$where'][0]['valueString'],
+ description: entry['content']['$t']
+ });
+ });
+ }
+ var args = [events].concat(Array.prototype.slice.call(arguments, 1));
+ var res = applyAll(success, this, args);
+ if ($.isArray(res)) {
+ return res;
+ }
+ return events;
+ }
+ });
+
+}
+
+
+// legacy
+fc.gcalFeed = function(url, sourceOptions) {
+ return $.extend({}, sourceOptions, { url: url, dataType: 'gcal' });
+};
+
+
+})(jQuery);
diff --git a/mod/event_calendar/views/default/object/event_calendar.php b/mod/event_calendar/views/default/object/event_calendar.php
new file mode 100644
index 000000000..17f7ff130
--- /dev/null
+++ b/mod/event_calendar/views/default/object/event_calendar.php
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * Elgg event_calendar object view
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2008
+ * @link http://radagast.biz/
+ *
+ */
+
+elgg_load_library('elgg:event_calendar');
+
+$event = $vars['entity'];
+$full = elgg_extract('full_view', $vars, FALSE);
+
+if ($full) {
+ $body = elgg_view('event_calendar/strapline',$vars);
+ if ($event->web_conference) {
+ $body .= '<br />';
+ $body .= elgg_view('event_calendar/conference_button',array('event'=>$event));
+ }
+ $event_items = event_calendar_get_formatted_full_items($event);
+ $body .= '<br />';
+
+ foreach($event_items as $item) {
+ $value = $item->value;
+ if (!empty($value)) {
+
+ //This function controls the alternating class
+ $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even';
+ $body .= "<p class=\"{$even_odd}\"><b>";
+ $body .= $item->title.':</b> ';
+ $body .= $item->value;
+ }
+ }
+ $metadata = elgg_view_menu('entity', array(
+ 'entity' => $event,
+ 'handler' => 'event_calendar',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+ ));
+
+ $tags = elgg_view('output/tags', array('tags' => $event->tags));
+
+ $params = array(
+ 'entity' => $event,
+ 'metadata' => $metadata,
+ 'tags' => $tags,
+ 'title' => false,
+ );
+ $list_body = elgg_view('object/elements/summary', $params);
+ echo $list_body;
+ echo $body;
+ if ($event->long_description) {
+ echo '<div class="elgg-output">'.$event->long_description.'</div>';
+ } else {
+ echo '<div class="elgg-output">'.$event->description.'</div>';
+ }
+ if ($vars['light_box'] == TRUE) {
+ $event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar');
+ if ($event_calendar_add_users == 'yes') {
+ $url = "event_calendar/manage_users/$event->guid";
+ echo '<p>'.elgg_view('output/url',array('text'=> elgg_echo('event_calendar:manage_users:breadcrumb'), 'href'=>$url)).'</p>';
+ }
+ }
+ if (elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar') == 'yes') {
+ echo elgg_view('event_calendar/forms/add_to_group',array('event' => $event));
+ }
+
+} else {
+
+ $time_bit = event_calendar_get_formatted_time($event);
+ $icon = '<img src="'.elgg_view("icon/object/event_calendar/small").'" />';
+ $extras = array($time_bit);
+ if ($event->description) {
+ $extras[] = $event->description;
+ }
+
+ if ($event_calendar_venue_view = elgg_get_plugin_setting('venue_view', 'event_calendar') == 'yes') {
+ $extras[] = $event->venue;
+ }
+ if ($extras) {
+ $info = "<p>".implode("<br />",$extras)."</p>";
+ } else {
+ $info = '';
+ }
+
+ if (elgg_in_context('widgets')) {
+ $metadata = '';
+ } else {
+ $metadata = elgg_view_menu('entity', array(
+ 'entity' => $event,
+ 'handler' => 'event_calendar',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+ ));
+ }
+
+ $tags = elgg_view('output/tags', array('tags' => $event->tags));
+
+ $params = array(
+ 'entity' => $event,
+ 'metadata' => $metadata,
+ 'subtitle' => $info,
+ 'tags' => $tags,
+ );
+ $list_body = elgg_view('object/elements/summary', $params);
+
+ echo elgg_view_image_block($icon, $list_body);
+}
+
+?>
diff --git a/mod/event_calendar/views/default/plugins/event_calendar/settings.php b/mod/event_calendar/views/default/plugins/event_calendar/settings.php
new file mode 100644
index 000000000..a58647828
--- /dev/null
+++ b/mod/event_calendar/views/default/plugins/event_calendar/settings.php
@@ -0,0 +1,474 @@
+<?php
+$yn_options = array(elgg_echo('event_calendar:settings:yes')=>'yes',
+ elgg_echo('event_calendar:settings:no')=>'no',
+);
+
+$time_format_options = array(elgg_echo('event_calendar:time_format:12hour')=>'12',elgg_echo('event_calendar:time_format:24hour')=>'24');
+
+$membership_options = array(
+ elgg_echo('event_calendar:personal_manage:open') => 'open' ,
+ elgg_echo('event_calendar:personal_manage:closed') => 'closed',
+ elgg_echo('event_calendar:personal_manage:private') => 'private',
+ elgg_echo('event_calendar:personal_manage:by_event') => 'by_event',
+);
+
+$access_options = array( ACCESS_PRIVATE => elgg_echo("PRIVATE"),
+ ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"),
+ ACCESS_PUBLIC => elgg_echo("PUBLIC"));
+
+$listing_options = array(elgg_echo('event_calendar:settings:paged')=>'paged',
+ elgg_echo('event_calendar:settings:agenda')=>'agenda',
+ elgg_echo('event_calendar:settings:month')=>'month',
+ elgg_echo('event_calendar:settings:full')=>'full',
+);
+
+$body = '';
+
+/*$event_calendar_full_calendar = elgg_get_plugin_setting('full_calendar', 'event_calendar');
+if (!$event_calendar_full_calendar) {
+ $event_calendar_full_calendar = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:full_calendar:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[full_calendar]','value'=>$event_calendar_full_calendar,'options'=>$yn_options));
+
+$body .= '<br />';*/
+
+$event_calendar_hide_access = elgg_get_plugin_setting('hide_access', 'event_calendar');
+if (!$event_calendar_hide_access) {
+ $event_calendar_hide_access = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:hide_access:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[hide_access]','value'=>$event_calendar_hide_access,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_default_access = elgg_get_plugin_setting('default_access', 'event_calendar');
+if (!$event_calendar_default_access) {
+ $event_calendar_default_access = ACCESS_LOGGED_IN;
+}
+
+$body .= elgg_echo('event_calendar:settings:default_access:title');
+$body .= '<br />';
+$body .= elgg_view('input/dropdown',array('name'=>'params[default_access]','value'=>$event_calendar_default_access,'options_values'=>$access_options));
+
+$body .= '<br /><br />';
+
+$event_calendar_hide_end = elgg_get_plugin_setting('hide_end', 'event_calendar');
+if (!$event_calendar_hide_end) {
+ $event_calendar_hide_end = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:hide_end:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[hide_end]','value'=>$event_calendar_hide_end,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_listing_format = elgg_get_plugin_setting('listing_format', 'event_calendar');
+if (!$event_calendar_listing_format) {
+ $event_calendar_listing_format = 'month';
+}
+
+$body .= elgg_echo('event_calendar:settings:listing_format:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[listing_format]','value'=>$event_calendar_listing_format,'options'=>$listing_options));
+
+$body .= '<br />';
+
+$event_calendar_repeated_events = elgg_get_plugin_setting('repeated_events', 'event_calendar');
+if (!$event_calendar_repeated_events) {
+ $event_calendar_repeated_events = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:repeated_events:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[repeated_events]','value'=>$event_calendar_repeated_events,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_reminders = elgg_get_plugin_setting('reminders', 'event_calendar');
+if (!$event_calendar_reminders) {
+ $event_calendar_reminders = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:reminders:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[reminders]','value'=>$event_calendar_reminders,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_times = elgg_get_plugin_setting('times', 'event_calendar');
+if (!$event_calendar_times) {
+ $event_calendar_times = 'yes';
+}
+
+$body .= elgg_echo('event_calendar:settings:times:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[times]','value'=>$event_calendar_times,'options'=>$yn_options));
+
+$body .= '<br />';
+
+/*$event_calendar_restricted_times = elgg_get_plugin_setting('restricted_times', 'event_calendar');
+if (!$event_calendar_restricted_times) {
+ $event_calendar_restricted_times = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:restricted_times:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[restricted_times]','value'=>$event_calendar_restricted_times,'options'=>$yn_options));
+
+$body .= '<br />';*/
+
+$event_calendar_time_format = elgg_get_plugin_setting('timeformat', 'event_calendar');
+if (!$event_calendar_time_format) {
+ $event_calendar_time_format = '24';
+}
+
+$body .= elgg_echo('event_calendar:settings:timeformat:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[timeformat]','value'=>$event_calendar_time_format,'options'=>$time_format_options));
+
+$body .= '<br />';
+
+$event_calendar_autopersonal = elgg_get_plugin_setting('autopersonal', 'event_calendar');
+if (!$event_calendar_autopersonal) {
+ $event_calendar_autopersonal = 'yes';
+}
+
+$body .= elgg_echo('event_calendar:settings:autopersonal:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[autopersonal]','value'=>$event_calendar_autopersonal,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_autogroup = elgg_get_plugin_setting('autogroup', 'event_calendar');
+if (!$event_calendar_autogroup) {
+ $event_calendar_autogroup = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:autogroup:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[autogroup]','value'=>$event_calendar_autogroup,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_add_to_group_calendar = elgg_get_plugin_setting('add_to_group_calendar', 'event_calendar');
+if (!$event_calendar_add_to_group_calendar) {
+ $event_calendar_add_to_group_calendar = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:add_to_group_calendar:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[add_to_group_calendar]','value'=>$event_calendar_add_to_group_calendar,'options'=>$yn_options));
+
+$body .= '<br />';
+
+// agenda view is now handled in the listing area
+
+/*$event_calendar_agenda_view = elgg_get_plugin_setting('agenda_view', 'event_calendar');
+if (!$event_calendar_agenda_view) {
+ $event_calendar_agenda_view = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:agenda_view:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[agenda_view]','value'=>$event_calendar_agenda_view,'options'=>$yn_options));
+
+$body .= '<br />';*/
+
+$event_calendar_venue_view = elgg_get_plugin_setting('venue_view', 'event_calendar');
+if (!$event_calendar_venue_view) {
+ $event_calendar_venue_view = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:venue_view:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[venue_view]','value'=>$event_calendar_venue_view,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_fewer_fields = elgg_get_plugin_setting('fewer_fields', 'event_calendar');
+if (!$event_calendar_fewer_fields) {
+ $event_calendar_fewer_fields = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:fewer_fields:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[fewer_fields]','value'=>$event_calendar_fewer_fields,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$options = array(elgg_echo('event_calendar:settings:no')=>'no',
+ elgg_echo('event_calendar:settings:site_calendar:admin')=>'admin',
+ elgg_echo('event_calendar:settings:site_calendar:loggedin')=>'loggedin',
+);
+
+$event_calendar_site_calendar = elgg_get_plugin_setting('site_calendar', 'event_calendar');
+if (!$event_calendar_site_calendar) {
+ $event_calendar_site_calendar = 'admin';
+}
+
+$body .= elgg_echo('event_calendar:settings:site_calendar:title').'<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[site_calendar]','value'=>$event_calendar_site_calendar,'options'=>$options));
+
+$body .= '<br />';
+
+$options = array(elgg_echo('event_calendar:settings:no')=>'no',
+ elgg_echo('event_calendar:settings:group_calendar:admin')=>'admin',
+ elgg_echo('event_calendar:settings:group_calendar:members')=>'members',
+);
+
+$event_calendar_group_calendar = elgg_get_plugin_setting('group_calendar', 'event_calendar');
+if (!$event_calendar_group_calendar) {
+ $event_calendar_group_calendar = 'members';
+}
+
+$body .= elgg_echo('event_calendar:settings:group_calendar:title').'<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[group_calendar]','value'=>$event_calendar_group_calendar,'options'=>$options));
+
+$body .= '<br />';
+
+$options = array(elgg_echo('event_calendar:settings:group_default:yes')=>'yes',
+ elgg_echo('event_calendar:settings:group_default:no')=>'no',
+);
+
+$event_calendar_group_default = elgg_get_plugin_setting('group_default', 'event_calendar');
+if (!$event_calendar_group_default) {
+ $event_calendar_group_default = 'yes';
+}
+
+$body .= elgg_echo('event_calendar:settings:group_default:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[group_default]','value'=>$event_calendar_group_default,'options'=>$options));
+
+$body .= '<br />';
+
+$event_calendar_group_always_display = elgg_get_plugin_setting('group_always_display', 'event_calendar');
+if (!$event_calendar_group_always_display) {
+ $event_calendar_group_always_display = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:group_always_display:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[group_always_display]','value'=>$event_calendar_group_always_display,'options'=>$yn_options));
+
+$body .= '<br />';
+
+// There does not seem to be a way to determine where the group calendar box will appear in Elgg 1.8
+
+/*$options = array(elgg_echo('event_calendar:settings:group_profile_display_option:left')=>'left',
+ elgg_echo('event_calendar:settings:group_profile_display_option:right')=>'right',
+ elgg_echo('event_calendar:settings:group_profile_display_option:none')=>'none',
+);
+
+$event_calendar_group_profile_display = elgg_get_plugin_setting('group_profile_display', 'event_calendar');
+if (!$event_calendar_group_profile_display) {
+ $event_calendar_group_profile_display = 'right';
+}
+
+$body .= elgg_echo('event_calendar:settings:group_profile_display:title').'<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[group_profile_display]','value'=>$event_calendar_group_profile_display,'options'=>$options));
+
+$body .= '<br />';*/
+
+$event_calendar_add_users = elgg_get_plugin_setting('add_users', 'event_calendar');
+if (!$event_calendar_add_users) {
+ $event_calendar_add_users = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:add_users:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[add_users]','value'=>$event_calendar_add_users,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_add_users_notify = elgg_get_plugin_setting('add_users_notify', 'event_calendar');
+if (!$event_calendar_add_users_notify) {
+ $event_calendar_add_users_notify = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:add_users_notify:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[add_users_notify]','value'=>$event_calendar_add_users_notify,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_personal_manage = elgg_get_plugin_setting('personal_manage', 'event_calendar');
+if (!$event_calendar_personal_manage && $personal_manage == 'yes') {
+ $event_calendar_personal_manage = 'open';
+}
+
+$body .= elgg_echo('event_calendar:settings:personal_manage:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[personal_manage]','value'=>$event_calendar_personal_manage,'options'=>$membership_options));
+$body .= '<p>'.elgg_echo('event_calendar:settings:personal_manage:description').'</p>';
+
+$event_calendar_spots_display = elgg_get_plugin_setting('spots_display', 'event_calendar');
+if (!$event_calendar_spots_display) {
+ $event_calendar_spots_display = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:spots_display:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[spots_display]','value'=>$event_calendar_spots_display,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_no_collisions = elgg_get_plugin_setting('no_collisions', 'event_calendar');
+if (!$event_calendar_no_collisions) {
+ $event_calendar_no_collisions = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:no_collisions:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[no_collisions]','value'=>$event_calendar_no_collisions,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_collision_length = elgg_get_plugin_setting('collision_length', 'event_calendar');
+if (!$event_calendar_collision_length) {
+ $event_calendar_collision_length = '3600';
+}
+
+$body .= elgg_echo('event_calendar:settings:collision_length:title');
+$body .= '<br />';
+$body .= elgg_view('input/text',array('name'=>'params[collision_length]','value'=>$event_calendar_collision_length));
+
+$body .= '<br /><br />';
+
+$event_calendar_region_display = elgg_get_plugin_setting('region_display', 'event_calendar');
+if (!$event_calendar_region_display) {
+ $event_calendar_region_display = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:region_display:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[region_display]','value'=>$event_calendar_region_display,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_region_list = elgg_get_plugin_setting('region_list', 'event_calendar');
+if (!$event_calendar_region_list) {
+ $event_calendar_region_list = '';
+}
+
+$body .= elgg_echo('event_calendar:settings:region_list:title');
+$body .= '<br />';
+$body .= elgg_view('input/plaintext',array('name'=>'params[region_list]','value'=>$event_calendar_region_list));
+
+$body .= '<br />';
+
+$event_calendar_region_list_handles = elgg_get_plugin_setting('region_list_handles', 'event_calendar');
+if (!$event_calendar_region_list_handles) {
+ $event_calendar_region_list_handles = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:region_list_handles:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[region_list_handles]','value'=>$event_calendar_region_list_handles,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_type_display = elgg_get_plugin_setting('type_display', 'event_calendar');
+if (!$event_calendar_type_display) {
+ $event_calendar_type_display = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:type_display:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[type_display]','value'=>$event_calendar_type_display,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_type_list = elgg_get_plugin_setting('type_list', 'event_calendar');
+if (!$event_calendar_type_list) {
+ $event_calendar_type_list = '';
+}
+
+$body .= elgg_echo('event_calendar:settings:type_list:title');
+$body .= '<br />';
+$body .= elgg_view('input/plaintext',array('name'=>'params[type_list]','value'=>$event_calendar_type_list));
+
+$body .= '<br />';
+
+$event_calendar_type_list_handles = elgg_get_plugin_setting('type_list_handles', 'event_calendar');
+if (!$event_calendar_type_list_handles) {
+ $event_calendar_type_list_handles = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:type_list_handles:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[type_list_handles]','value'=>$event_calendar_type_list_handles,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$event_calendar_first_date = elgg_get_plugin_setting('first_date', 'event_calendar');
+if (!$event_calendar_first_date) {
+ $event_calendar_first_date = '';
+}
+
+$body .= elgg_echo('event_calendar:settings:first_date:title');
+$body .= '<br />';
+$body .= elgg_view('input/text',array('name'=>'params[first_date]','value'=>$event_calendar_first_date));
+
+$body .= '<br /><br />';
+
+$event_calendar_last_date = elgg_get_plugin_setting('last_date', 'event_calendar');
+if (!$event_calendar_last_date) {
+ $event_calendar_last_date = '';
+}
+
+$body .= elgg_echo('event_calendar:settings:last_date:title');
+$body .= '<br />';
+$body .= elgg_view('input/text',array('name'=>'params[last_date]','value'=>$event_calendar_last_date));
+
+$body .= '<br /><br />';
+
+$event_calendar_more_required = elgg_get_plugin_setting('more_required', 'event_calendar');
+if (!$event_calendar_more_required) {
+ $event_calendar_more_required = 'no';
+}
+
+$body .= elgg_echo('event_calendar:settings:more_required:title');
+$body .= '<br />';
+$body .= elgg_view('input/radio',array('name'=>'params[more_required]','value'=>$event_calendar_more_required,'options'=>$yn_options));
+
+$body .= '<br />';
+
+$ical_auth_file_name = elgg_get_plugin_setting('ical_auth_file_name', 'event_calendar');
+
+$body .= elgg_echo('event_calendar:ical_auth_file_name:title');
+$body .= '<br />';
+$body .= elgg_view('input/text',array('name'=>'params[ical_auth_file_name]','value'=>$ical_auth_file_name, 'class'=>'event-calendar-ical-auth-setting'));
+
+$body .= '<br /><br />';
+
+$event_calendar_bbb_server_url = elgg_get_plugin_setting('bbb_server_url', 'event_calendar');
+
+$body .= elgg_echo('event_calendar:bbb_server_url');
+$body .= '<br />';
+$body .= elgg_view('input/text', array(
+ 'name' => 'params[bbb_server_url]',
+ 'value' => $event_calendar_bbb_server_url,
+ 'class' => 'text_input',
+));
+
+$body .= '<br /><br />';
+
+$event_calendar_bbb_security_salt = elgg_get_plugin_setting('bbb_security_salt', 'event_calendar');
+
+$body .= elgg_echo('event_calendar:bbb_security_salt');
+$body .= '<br />';
+$body .= elgg_view('input/text', array(
+ 'name' => 'params[bbb_security_salt]',
+ 'value' => $event_calendar_bbb_security_salt,
+ 'class' => 'text_input',
+));
+
+$body .= '<br /><br />';
+
+echo $body;
diff --git a/mod/event_calendar/views/default/river/object/event_calendar/create.php b/mod/event_calendar/views/default/river/object/event_calendar/create.php
new file mode 100644
index 000000000..515389411
--- /dev/null
+++ b/mod/event_calendar/views/default/river/object/event_calendar/create.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Event river view.
+ */
+
+elgg_load_library('elgg:event_calendar');
+
+$object = $vars['item']->getObjectEntity();
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => event_calendar_get_formatted_time($object),
+));
diff --git a/mod/event_calendar/views/default/river/object/event_calendar/update.php b/mod/event_calendar/views/default/river/object/event_calendar/update.php
new file mode 100644
index 000000000..515389411
--- /dev/null
+++ b/mod/event_calendar/views/default/river/object/event_calendar/update.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Event river view.
+ */
+
+elgg_load_library('elgg:event_calendar');
+
+$object = $vars['item']->getObjectEntity();
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => event_calendar_get_formatted_time($object),
+));
diff --git a/mod/event_calendar/views/default/widgets/event_calendar/content.php b/mod/event_calendar/views/default/widgets/event_calendar/content.php
new file mode 100644
index 000000000..eaedb76bd
--- /dev/null
+++ b/mod/event_calendar/views/default/widgets/event_calendar/content.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Elgg event calendar widget
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2008
+ * @link http://radagast.biz/
+ *
+ */
+
+ // Load event calendar model
+ elgg_load_library('elgg:event_calendar');
+
+ //the number of events to display
+ $num = (int) $vars['entity']->num_display;
+ if (!$num)
+ $num = 5;
+
+ // Get the events
+ $owner = elgg_get_page_owner_entity();
+ if(elgg_instanceof($owner, 'group')) {
+ $events = event_calendar_get_events_for_group(elgg_get_page_owner_guid(),$num);
+ } else {
+ $events = event_calendar_get_personal_events_for_user(elgg_get_page_owner_guid(),$num);
+ }
+
+ // If there are any events to view, view them
+ if (is_array($events) && sizeof($events) > 0) {
+
+ echo "<div id=\"widget_calendar\">";
+
+ foreach($events as $event) {
+ echo elgg_view("object/event_calendar",array('entity' => $event));
+ }
+
+ echo "</div>";
+
+ }
+
+?> \ No newline at end of file
diff --git a/mod/event_calendar/views/default/widgets/event_calendar/edit.php b/mod/event_calendar/views/default/widgets/event_calendar/edit.php
new file mode 100644
index 000000000..716920c8a
--- /dev/null
+++ b/mod/event_calendar/views/default/widgets/event_calendar/edit.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * Elgg event_calendar group widget
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2008
+ * @link http://radagast.biz/
+ *
+ */
+
+if (!$vars['entity']->num_display) {
+ $num_display = 5;
+} else {
+ $num_display = $vars['entity']->num_display;
+}
+?>
+
+<p>
+ <?php echo elgg_echo("event_calendar:num_display"); ?>:
+ <select name="params[num_display]">
+ <option value="1" <?php if($num_display == 1) echo "SELECTED"; ?>>1</option>
+ <option value="2" <?php if($num_display == 2) echo "SELECTED"; ?>>2</option>
+ <option value="3" <?php if($num_display == 3) echo "SELECTED"; ?>>3</option>
+ <option value="4" <?php if($num_display == 4) echo "SELECTED"; ?>>4</option>
+ <option value="5" <?php if($num_display == 5) echo "SELECTED"; ?>>5</option>
+ <option value="6" <?php if($num_display == 6) echo "SELECTED"; ?>>6</option>
+ <option value="7" <?php if($num_display == 7) echo "SELECTED"; ?>>7</option>
+ <option value="8" <?php if($num_display == 8) echo "SELECTED"; ?>>8</option>
+ <option value="9" <?php if($num_display == 9) echo "SELECTED"; ?>>9</option>
+ <option value="10" <?php if($num_display == 10) echo "SELECTED"; ?>>10</option>
+ </select>
+</p>
diff --git a/mod/event_calendar/views/ical/event_calendar/show_events.php b/mod/event_calendar/views/ical/event_calendar/show_events.php
new file mode 100644
index 000000000..d357908b9
--- /dev/null
+++ b/mod/event_calendar/views/ical/event_calendar/show_events.php
@@ -0,0 +1,7 @@
+<?php
+if ($vars['events']) {
+ foreach ($vars['events'] as $entity) {
+ echo elgg_view_entity($entity['event']);
+ }
+ //echo elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false);
+}
diff --git a/mod/event_calendar/views/ical/object/event_calendar.php b/mod/event_calendar/views/ical/object/event_calendar.php
new file mode 100644
index 000000000..36d71a66c
--- /dev/null
+++ b/mod/event_calendar/views/ical/object/event_calendar.php
@@ -0,0 +1,44 @@
+<?php
+$event = $vars['entity'];
+if ($event->organizer) {
+ $organizer = "\nORGANIZER;CN={$event->organizer}\n";
+} else {
+ $organizer = '';
+}
+
+if ($event->description) {
+ // make sure that we are using Unix line endings
+ $description = str_replace("\r\n","\n",$event->description);
+ $description = str_replace("\r","\n",$description);
+
+ // now convert to icalendar format
+ $description = str_replace("\n",'\n',$description);
+ $description = wordwrap($description,75,"\r\n ",TRUE);
+} else {
+ $description = '';
+}
+?>
+BEGIN:VEVENT
+UID:<?php echo elgg_get_site_url().'event_calendar/view/'.$event->guid; ?>
+
+URL:<?php echo elgg_get_site_url().'event_calendar/view/'.$event->guid; ?>
+
+DTSTAMP:<?php echo date("Ymd\THis\Z", $event->getTimeUpdated())?>
+
+CREATED:<?php echo date("Ymd\THis\Z", $event->getTimeCreated())?>
+
+LAST-MODIFIED:<?php echo date("Ymd\THis\Z", $event->getTimeUpdated()) ?>
+
+DTSTART;VALUE=DATE:<?php echo date("Ymd\THis\Z", $event->start_date); ?>
+
+DTEND;VALUE=DATE:<?php echo date("Ymd\THis\Z", $event->real_end_time); ?>
+
+SUMMARY:<?php echo $event->title; ?>
+
+DESCRIPTION:<?php echo $description; ?>
+
+LOCATION:<?php echo $event->venue; ?><?php echo $organizer; ?>
+
+CATEGORIES:<?php implode(",",$event->tags); ?>
+
+END:VEVENT
diff --git a/mod/event_calendar/views/ical/page/default.php b/mod/event_calendar/views/ical/page/default.php
new file mode 100644
index 000000000..b4cd7eefb
--- /dev/null
+++ b/mod/event_calendar/views/ical/page/default.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg ICAL output pageshell
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+header("Content-Type: text/calendar");
+header("Content-Disposition: inline; filename=\"calendar.ics\"");
+?>
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Curverider Ltd//NONSGML Elgg <?php echo get_version(true); ?>//EN
+<?php echo $vars['body']; ?>
+END:VCALENDAR
diff --git a/mod/event_calendar/views/ical/page/layouts/default.php b/mod/event_calendar/views/ical/page/layouts/default.php
new file mode 100644
index 000000000..57598fa1b
--- /dev/null
+++ b/mod/event_calendar/views/ical/page/layouts/default.php
@@ -0,0 +1,2 @@
+<?php
+echo $vars['content']; \ No newline at end of file
diff --git a/mod/event_calendar/views/rss/event_calendar/show_events.php b/mod/event_calendar/views/rss/event_calendar/show_events.php
new file mode 100644
index 000000000..40c67ff6a
--- /dev/null
+++ b/mod/event_calendar/views/rss/event_calendar/show_events.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg show events RSS view
+ *
+ * @package event_calendar
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Radagast Solutions 2009
+ * @link http://radagast.biz/
+ *
+ */
+
+elgg_load_library('elgg:event_calendar');
+if ($vars['events']) {
+ $options = array(
+ 'count' => $vars['count'],
+ 'offset' => 0,
+ 'limit' => 15,
+ 'list_type_toggle' => FALSE,
+ 'pagination' => FALSE,
+ );
+ // echo elgg_view_entity_list($vars['events'], $vars['count'], $vars['offset'], $vars['limit'], false, false);
+ echo elgg_view_entity_list(event_calendar_flatten_event_structure($vars['events']), $options);
+}
diff --git a/mod/event_calendar/views/rss/object/event_calendar.php b/mod/event_calendar/views/rss/object/event_calendar.php
new file mode 100644
index 000000000..45b2d847a
--- /dev/null
+++ b/mod/event_calendar/views/rss/object/event_calendar.php
@@ -0,0 +1,61 @@
+<?php
+
+ /**
+ * Elgg default object view
+ *
+ * @package Elgg
+ * @subpackage Core
+
+ * @author Curverider Ltd
+
+ * @link http://elgg.org/
+ */
+
+ elgg_load_library('elgg:event_calendar');
+ $title = $vars['entity']->title;
+
+ $event_items = event_calendar_get_formatted_full_items($vars['entity']);
+ $items = array();
+ foreach($event_items as $item) {
+ if (trim($item->value)) {
+ $items[] = '<b>'.$item->title.'</b>: '.$item->value;
+ }
+ }
+
+ $description = '<p>'.implode('<br />',$items).'</p>';
+
+ if ($vars['entity']->long_description) {
+ $description .= '<p>'.autop($vars['entity']->long_description).'</p>';
+ } else {
+ $description .= '<p>'.$vars['entity']->description.'</p>';
+ }
+
+?>
+
+ <item>
+ <guid isPermaLink='true'><?php echo htmlspecialchars($vars['entity']->getURL()); ?></guid>
+ <link><?php echo htmlspecialchars($vars['entity']->getURL()); ?></link>
+ <title><![CDATA[<?php echo $title; ?>]]></title>
+ <description><![CDATA[<?php echo $description; ?>]]></description>
+ <?php
+ $owner = $vars['entity']->getOwnerEntity();
+ if ($owner)
+ {
+?>
+ <dc:creator><?php echo $owner->name; ?></dc:creator>
+<?php
+ }
+ ?>
+ <?php
+ if (
+ ($vars['entity'] instanceof Locatable) &&
+ ($vars['entity']->getLongitude()) &&
+ ($vars['entity']->getLatitude())
+ ) {
+ ?>
+ <georss:point><?php echo $vars['entity']->getLatitude(); ?> <?php echo $vars['entity']->getLongitude(); ?></georss:point>
+ <?php
+ }
+ ?>
+ <?php echo elgg_view('extensions/item'); ?>
+ </item>
diff --git a/mod/event_connect b/mod/event_connect
new file mode 160000
+Subproject 3688c10f1bfdaecdb0bb515b2ce3d8490d0487c
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..f0ffa6b9d
--- /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");
+ $header = 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('title' => $title, 'content' => $content));
+ echo elgg_view_page($title, $body);
+ } else {
+ elgg_load_css('elgg.walled_garden');
+ $body = elgg_view_layout('walled_garden', array('content' => $header . $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/faq b/mod/faq
new file mode 160000
+Subproject b3a038c8ac7db28d5cd47a7ae870f722c24e592
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..e20c4079f
--- /dev/null
+++ b/mod/file/actions/file/upload.php
@@ -0,0 +1,222 @@
+<?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;
+$file->tags = string_to_tag_array($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);
+ }
+ } elseif ($file->icontime) {
+ // if it is not an image, we do not need thumbnails
+ unset($file->icontime);
+
+ $thumb = new ElggFile();
+
+ $thumb->setFilename($prefix . "thumb" . $filestorename);
+ $thumb->delete();
+ unset($file->thumbnail);
+
+ $thumb->setFilename($prefix . "smallthumb" . $filestorename);
+ $thumb->delete();
+ unset($file->smallthumb);
+
+ $thumb->setFilename($prefix . "largethumb" . $filestorename);
+ $thumb->delete();
+ unset($file->largethumb);
+ }
+} 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..d55c1e62b
--- /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('', '404');
+}
+
+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..99cf62714
--- /dev/null
+++ b/mod/file/pages/file/owner.php
@@ -0,0 +1,57 @@
+<?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('', '404');
+}
+
+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(
+ 'type' => 'object',
+ 'subtype' => 'file',
+ 'container_guid' => $owner->guid,
+ '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..d60dfb755
--- /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(
+ 'type' => 'object',
+ 'subtype' => '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..96c8de785
--- /dev/null
+++ b/mod/file/pages/file/world.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * All files
+ *
+ * @package ElggFile
+ */
+
+elgg_push_breadcrumb(elgg_echo('file'));
+
+elgg_register_title_button();
+
+$title = elgg_echo('file:all');
+
+$content = elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'file',
+ '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/foafssl b/mod/foafssl
new file mode 160000
+Subproject 3c1da1eaff8f61049b45ad99528f8f4e09ac7e6
diff --git a/mod/friendrequest/actions/friendrequest/decline.php b/mod/friendrequest/actions/friendrequest/decline.php
new file mode 100644
index 000000000..ca3f1c9e4
--- /dev/null
+++ b/mod/friendrequest/actions/friendrequest/decline.php
@@ -0,0 +1,12 @@
+<?php
+
+$user = elgg_get_logged_in_user_entity();
+$friend = get_entity(sanitize_int(get_input("guid")));
+
+if(remove_entity_relationship($friend->guid, 'friendrequest', $user->guid)) {
+ system_message(elgg_echo("friendrequest:decline:success", array($friend->name)));
+} else {
+ system_message(elgg_echo("friendrequest:decline:fail"));
+}
+
+forward(REFERER);
diff --git a/mod/friendrequest/actions/friends/add.php b/mod/friendrequest/actions/friends/add.php
new file mode 100644
index 000000000..e6efe1db1
--- /dev/null
+++ b/mod/friendrequest/actions/friends/add.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Elgg add friend action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Management
+ * @override actions/friends/add.php
+ */
+
+
+// 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);
+}
+$user = elgg_get_logged_in_user_entity();
+
+$errors = false;
+
+if(check_entity_relationship($friend->guid, "friendrequest", $user->guid)
+ || check_entity_relationship($friend->guid, "friend", $user->guid)) {
+
+ try {
+ if (!$user->addFriend($friend_guid)) {
+ $errors = true;
+ }
+
+ $ia = elgg_set_ignore_access(true);
+ $friend->addFriend($user->guid);
+ elgg_set_ignore_access($ia);
+
+ remove_entity_relationship($friend->guid, "friendrequest", $user->guid);
+
+ } 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', $user->guid, $friend->guid);
+ add_to_river('river/relationship/friend/create', 'friend', $friend->guid, $user->guid);
+ system_message(elgg_echo("friends:add:successful", array($friend->name)));
+ }
+} elseif(add_entity_relationship($user->guid, "friendrequest", $friend->guid)) {
+ system_message(elgg_echo("friendrequest:add:successful", array($friend->name)));
+} else {
+ register_error(elgg_echo("friendrequest:add:exists", array($friend->name)));
+}
+
+// Forward back to the page you friended the user on
+forward(REFERER);
diff --git a/mod/friendrequest/actions/friends/remove.php b/mod/friendrequest/actions/friends/remove.php
new file mode 100644
index 000000000..62bccb891
--- /dev/null
+++ b/mod/friendrequest/actions/friends/remove.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Elgg remove friend action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Management
+ * @override actions/friends/remove.php
+ */
+
+// 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);
+ $ia = elgg_set_ignore_access(true);
+ $friend->removeFriend(elgg_get_logged_in_user_guid());
+ elgg_set_ignore_access($ia);
+ } 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/mod/friendrequest/languages/ca.php b/mod/friendrequest/languages/ca.php
new file mode 100644
index 000000000..ab17319c1
--- /dev/null
+++ b/mod/friendrequest/languages/ca.php
@@ -0,0 +1,20 @@
+<?php
+$language = array (
+ 'friendrequest' => 'Sol·licituds d\'Amistat',
+ 'friendrequest:add:successful' => 'Has enviat una sol·licitud d\'amistat a %s. La ha d\'acceptar. Dóna-li temps.',
+ 'friendrequest:add:failure' => 'Oops! Hi ha hagut algun problema mentre s\'intentava enviar la sol·licitud. Torna-ho a provar.',
+ 'friendrequest:add:exists' => 'Ja has enviat la sol·licitud d\'amistat a %s, no siguis tan insistent.',
+ 'friendrequest:decline:success' => 'Has denegat la sol·licitud d\'amistat de %s',
+ 'friendrequest:decline:fail' => 'Per algun motiu aquesta petició d\'amistat no pot ésser eliminada',
+ 'friendrequest:remove:check' => 'Estas segur de que vols denegar la sol·licitud d\'amistat?',
+ 'friendrequest:none' => 'No hi ha sol·licitud d\'amistat pendents.',
+ 'friendrequest:new:subject' => '%s vol ser la teva amiga',
+ 'friendrequest:new:body' => '% vol ser la teva amiga. Està esperant que aprovis la seva sol·licitud. No la facis esperar!
+
+Pots veure les teves sol·licituds d\'amistat pendents clicant a aquest link (recorda que has d\'estar loginat per veure-la):
+
+%s
+
+(No responguis aquest mail, perquè és una màquina qui l\'envia)',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/friendrequest/languages/en.php b/mod/friendrequest/languages/en.php
new file mode 100644
index 000000000..40bfbd36a
--- /dev/null
+++ b/mod/friendrequest/languages/en.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * ElggFriendRequest English language file.
+ *
+ */
+
+$english = array(
+ 'friendrequest' => 'Friend Requests',
+
+ 'friendrequest:add:successful' => 'You sent a friend request to %s. She has to accept it. Give she time.',
+ 'friendrequest:add:failure' => 'Oops! There was a problem while trying to send the request. Try it again.',
+ 'friendrequest:add:exists' => 'You already sent a friend request to %s, don\'t be so intense.',
+
+ 'friendrequest:decline:success' => 'You just declined %s friend request',
+ 'friendrequest:decline:fail' => 'For any reason this friend request cannot be deleted',
+
+ 'friendrequest:remove:check' => 'Are you sure you want to decline the friend request?',
+ 'friendrequest:none' => 'No pending friend requests.',
+
+ 'friendrequest:new:subject' => '%s want to be your friend',
+ 'friendrequest:new:body' => '%s want to be your friend. She is waiting that you aprovate her petition. Do not her wait!
+
+You can see your pending friend requests following this link (remember you have to be logged in to see it):
+
+ %s
+
+(Do not try to reply this mail, because is a machine who is sending it)',
+
+);
+
+add_translation('en', $english);
diff --git a/mod/friendrequest/languages/es.php b/mod/friendrequest/languages/es.php
new file mode 100644
index 000000000..1677ef4fb
--- /dev/null
+++ b/mod/friendrequest/languages/es.php
@@ -0,0 +1,22 @@
+<?php
+$es = array (
+ 'friendrequest' => 'Peticiones de amistad',
+ 'friendrequest:add:successful' => 'Has enviado una petición de amistad a %s. Tiene que aprobarla antes de salir en tu lista de amigos. Dale tiempo :)',
+ 'friendrequest:add:failure' => 'Ups!, no se sabe muy bien por qué, pero el sistema no puede completar tu petición. Inténtalo de nuevo o ponte en contacto con lxs administradorxs.',
+ 'friendrequest:add:exists' => 'Ya has enviado antes una petición de amistad a %s. Ya lo leerá, ¡ten paciencia!',
+ 'friendrequest:decline:success' => 'Has rechazado la petición de amistad de %s',
+ 'friendrequest:decline:fail' => 'No ha sido posible borrar la petición de amistad. Inténtalo de nuevo o ponte en contacto con lxs administradorxs.',
+ 'friendrequest:remove:check' => 'Estás seguro de rechazar esta petición de amistad?',
+ 'friendrequest:none' => 'No hay peticiones de amistad pendientes.',
+ 'friendrequest:new:subject' => '%s quiere ser tu amigx',
+ 'friendrequest:new:body' => '%s quiere ser tu amigx. Está esperando a que apruebes su petición, no hagas que se impaciente ;)
+
+Puedes ver las peticiones que tienes pendientes a través del siguiente link (recuerda que tienes estar logeadx en la red para poder hacerlo):
+
+ %s
+
+No puedes responder a este email porque soy una máquina y no te leeré, no lo intentes ;)',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/friendrequest/languages/gl.php b/mod/friendrequest/languages/gl.php
new file mode 100644
index 000000000..9b8c12440
--- /dev/null
+++ b/mod/friendrequest/languages/gl.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * ElggFriendRequest galician language file.
+ *
+ */
+
+$galician = array(
+ 'friendrequest' => 'Peticións de amizade',
+
+ 'friendrequest:add:successful' => 'Enviaches unha petición de amizade a %s. Ten que aprobala se quere, dálle tempo :)',
+ 'friendrequest:add:failure' => 'Mimá!, non se sabe moi ben por qué, pero o sistema non pode completa-la túa petición. Téntao de novo ou ponte en contacto cxs administran a rede.',
+ 'friendrequest:add:exists' => 'Xa lle tes enviado unha petición de amizade s %s. Xa o lerá, ten paciencia meu!',
+
+ 'friendrequest:decline:success' => 'Borrache-la petición de amizade',
+ 'friendrequest:decline:fail' => 'Non foi posible borra-la petición de amizade. Téntao de novo ou ponte en contacto coxs que administran a rede.',
+
+// 'friendrequest:remove:check' => 'Are you sure you want to decline the friend request?',
+// 'friendrequest:none' => 'No pending friend requests.',
+
+ 'friendrequest:new:subject' => '%s quere ter amizade contigo',
+ 'friendrequest:new:body' => '%s quere ter amizade contigo. Está a agardar a que aprobe-la súa petición, non fagas que se impaciente ;)
+
+Si te logueaches na rede, podes ve-las peticións que tes pendentes a través da seguinte ligazón:
+
+%s
+
+Non podes responder a este email porque son unha máquina e non te vou ler, non o tentes ;)',
+
+);
+
+add_translation('gl', $galician);
diff --git a/mod/friendrequest/languages/pt.php b/mod/friendrequest/languages/pt.php
new file mode 100644
index 000000000..73010fd06
--- /dev/null
+++ b/mod/friendrequest/languages/pt.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * ElggFriendRequest Portuguese language file.
+ *
+ */
+
+$portuguese = array(
+ 'friendrequest' => 'Pedidos de amizade',
+
+ 'friendrequest:add:successful' => 'Você enviou um pedido de amizade a &amp;s. Elx tem que aprova-la antes de aparecer na tua lista de amigxs. Espere um pouco :)',
+ 'friendrequest:add:failure' => 'Erro. Não foi possível completar seu pedido. Tente novamente ou entre em contato com xs administradorxs.',
+ 'friendrequest:add:exists' => 'Você já enviou um pedido de amizade a &amp;s. Elx Leerá em breve, seja paciente!',
+
+ 'friendrequest:decline:success' => 'O pedido de amizade foi apagado corretamente',
+ 'friendrequest:decline:fail' => 'Não foi possível apagar o pedido de amizade. Tente novamente ou entre em contato com xs administradorxs.',
+
+// 'friendrequest:remove:check' => 'Are you sure you want to decline the friend request?',
+// 'friendrequest:none' => 'No pending friend requests.',
+
+ 'friendrequest:new:subject' => '%s quer ser teu/tua amigx!',
+ 'friendrequest:new:body' => '%s quer ser teu/tua amigx. Elx está esperando que você aceite o pedido.
+
+Você pode ver os teus pedidos pendentes clicando em (lembre-se que você tem que estar loga)):
+
+%s
+
+Não responda a esta mensagem porque eu sou uma máquina e não vou te ler ;)',
+
+);
+
+add_translation('pt', $portuguese);
diff --git a/mod/friendrequest/languages/sr.php b/mod/friendrequest/languages/sr.php
new file mode 100644
index 000000000..d7d693a09
--- /dev/null
+++ b/mod/friendrequest/languages/sr.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * ElggFriendRequest Serbian language file.
+ *
+ */
+
+$serbian = array(
+ 'friendrequest' => 'Dodaj u prijatelje',
+
+ 'friendrequest:add:successful' => 'Zahtevao si da postanes prijatelj sa %s. Moras sacekati da odobri tvoj zahtev pre nego sto se pojave u tvojoj listi prijatelja.',
+ 'friendrequest:add:failure' => 'Izvini, zbog sistemske greske nismo u mogucnosti da izvrsimo zahtev. Molim pokusaj ponovo.',
+ 'friendrequest:add:exists' => 'Vec si pozvao %s da budete prijatelji.',
+
+ 'friendrequest:decline:success' => 'Uspesno uklonjen zahtev za prijateljstvo.',
+ 'friendrequest:decline:fail' => 'Nemogu da uklonim zahtev za prijateljstvo.',
+
+// 'friendrequest:remove:check' => 'Are you sure you want to decline the friend request?',
+// 'friendrequest:none' => 'No pending friend requests.',
+
+ 'friendrequest:new:subject' => '%s zeli da bude tvoj prijatelj!',
+ 'friendrequest:new:body' => '%s zeli da bude tvoj prijatelj! Ali ceka da odobris zahtev...uloguj se sada i odobri zahtev!
+
+Mozes pogledati cekajuce zahteve na:
+
+%s
+
+(Ne mozes odgovoriti na ovaj email.)',
+
+);
+
+add_translation('sr', $serbian);
diff --git a/mod/friendrequest/manifest.xml b/mod/friendrequest/manifest.xml
new file mode 100644
index 000000000..e5b4aad6a
--- /dev/null
+++ b/mod/friendrequest/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>Friend request</name>
+ <author>Bosssumon and Zac Hopkinson, Lorea</author>
+ <version>1.8.0</version>
+ <category>social</category>
+ <description>Let users confirm friend requests. Make all friend requests reciprocal</description>
+ <website>https://lorea.org/</website>
+ <copyright>(C) Lorea 2011-2013</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/friendrequest/start.php b/mod/friendrequest/start.php
new file mode 100644
index 000000000..2ea3c80f9
--- /dev/null
+++ b/mod/friendrequest/start.php
@@ -0,0 +1,151 @@
+<?php
+/**
+ * Elgg friend request plugin.
+ *
+ * @package ElggFriendRequest
+ */
+
+elgg_register_event_handler('init', 'system', 'friendrequest_init');
+
+function friendrequest_init() {
+
+ //This will let users view their friend requests
+ elgg_register_page_handler('friendrequests', 'friendrequest_page_handler');
+
+ elgg_register_plugin_hook_handler('register', 'menu:topbar', 'friendrequest_topbar_menu');
+ elgg_register_plugin_hook_handler('register', 'menu:page', 'friendrequest_page_menu');
+
+ //We need to override the friend remove action to remove the relationship we created
+ $actions_dir = elgg_get_plugins_path().'friendrequest/actions/friends';
+ elgg_register_action('friends/add', "$actions_dir/add.php");
+ elgg_register_action('friends/remove', "$actions_dir/remove.php");
+
+ $actions_dir = elgg_get_plugins_path().'friendrequest/actions/friendrequest';
+ elgg_register_action('friendrequest/decline', "$actions_dir/decline.php");
+
+ //Regular Elgg engine sends out an email via an event. The 400 priority will let us run first.
+ //Then we return false to stop the event chain. The normal event handler will never get to run.
+ //elgg_register_event_handler('create', 'friend', 'friendrequest_event_create_friend', 400);
+
+ //Handle our add action event:
+ elgg_register_event_handler('create', 'friendrequest', 'friendrequest_event_create_friendrequest');
+
+}
+
+function friendrequest_page_handler($page){
+
+ //Keep the URLs uniform:
+ if (isset($page[0])) {
+ forward("friendrequests");
+ }
+
+ gatekeeper();
+
+ elgg_push_context('friends');
+
+ $title = elgg_echo('friendrequest');
+
+ $page_owner = elgg_get_logged_in_user_entity();
+ elgg_set_page_owner_guid($page_owner->guid);
+
+ $requests = elgg_get_entities_from_relationship(array(
+ 'type' => 'user',
+ 'relationship' => 'friendrequest',
+ 'relationship_guid' => $page_owner->guid,
+ 'inverse_relationship' => true,
+ 'limit' => 0,
+ ));
+ $content = elgg_view('friendrequest/requests', array(
+ 'requests' => $requests,
+ ));
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+
+ return true;
+}
+
+function friendrequest_count(){
+ return elgg_get_entities_from_relationship(array(
+ 'type' => 'user',
+ 'relationship' => 'friendrequest',
+ 'relationship_guid' => elgg_get_logged_in_user_guid(),
+ 'inverse_relationship' => true,
+ 'limit' => 0,
+ 'count' => true,
+ ));
+}
+
+function friendrequest_topbar_menu($hook, $entity_type, $returnvalue, $params) {
+ $count = friendrequest_count();
+ if($count) {
+ foreach($returnvalue as $item) {
+ if($item->getName() == 'friends') {
+ $item->setText(
+ $item->getText() . elgg_view('output/url', array(
+ 'href' => 'friendrequests',
+ 'text' => "<span class=\"messages-new\">$count</span>",
+ 'title' => elgg_echo('friendrequest'),
+ ))
+ );
+ return $returnvalue;
+ }
+ }
+ }
+ return $returnvalue;
+}
+
+function friendrequest_page_menu($hook, $entity_type, $returnvalue, $params) {
+ if(elgg_in_context('friends')){
+ foreach($returnvalue as $i => $item) {
+ if($item->getName() == 'friends:of') {
+ unset($returnvalue[$i]);
+ }
+ }
+ if (elgg_is_logged_in()) {
+ $count = friendrequest_count();
+ $item = new ElggMenuItem('friendrequests', elgg_echo('friendrequest').($count? " ($count)": ""), "friendrequests");
+ $returnvalue[] = $item;
+ }
+ }
+ return $returnvalue;
+}
+
+function friendrequest_event_create_friend($event, $object_type, $object){var_dump($object);elgg_echo('hola');
+ if (($object instanceof ElggRelationship) && ($event == 'create') && ($object_type == 'friend')) {
+ //We don't want anything happening here... (no email/etc)
+
+ //Returning false will interrupt the rest of the chain.
+ //The normal handler for the create friend event has a priority of 500 so it will never be called.
+ return false;
+ }
+ return true; //Shouldn't get here...
+}
+
+function friendrequest_event_create_friendrequest($event, $object_type, $object){
+ if (($object instanceof ElggRelationship) && ($event == 'create') && ($object_type == 'friendrequest')) {
+ $requester = get_entity($object->guid_one);
+ $requested = get_entity($object->guid_two);
+
+ $friendrequests_url = elgg_get_site_url() . "friendrequests/";
+
+ // Notify target user
+ return notify_user(
+ $requested,
+ $requester,
+ elgg_echo('friendrequest:newfriend:subject', array(
+ $requester->name
+ ), $requested->language),
+ elgg_echo('friendrequest:newfriend:body', array(
+ $requester->name,
+ $friendrequests_url,
+ ), $requested->language)
+ );
+ }
+}
diff --git a/mod/friendrequest/views/default/friendrequest/requests.php b/mod/friendrequest/views/default/friendrequest/requests.php
new file mode 100644
index 000000000..1680bdc4e
--- /dev/null
+++ b/mod/friendrequest/views/default/friendrequest/requests.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * The friend requests' list
+ *
+ * @uses $vars['requests'] Array of ElggUsers
+ */
+
+if (!empty($vars['requests']) && is_array($vars['requests'])) {
+ $user = elgg_get_logged_in_user_entity();
+ 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/friends/add?friend={$user->guid}";
+ $accept_button = elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => elgg_echo('accept'),
+ 'class' => 'elgg-button elgg-button-submit',
+ 'is_action' => true,
+ 'is_trusted' => true,
+ ));
+
+ $url = "action/friendrequest/decline?guid={$user->guid}";
+ $delete_button = elgg_view('output/confirmlink', array(
+ 'href' => $url,
+ 'confirm' => elgg_echo('friendrequest: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('friendrequest:none') . "</p>";
+}
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/graphstats b/mod/graphstats
new file mode 160000
+Subproject b5d046138c5841d55b4497618d5678cb8027c24
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..f19b90566
--- /dev/null
+++ b/mod/groups/actions/groups/edit.php
@@ -0,0 +1,235 @@
+<?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) {
+ // update access collection name if group name changes
+ if (!$is_new_group && $shortname == 'name' && $value != $group->name) {
+ $group_name = html_entity_decode($value, ENT_QUOTES, 'UTF-8');
+ $ac_name = sanitize_string(elgg_echo('groups:group') . ": " . $group_name);
+ $acl = get_access_collection($group->group_acl);
+ if ($acl) {
+ // @todo Elgg api does not support updating access collection name
+ $db_prefix = elgg_get_config('dbprefix');
+ $query = "UPDATE {$db_prefix}access_collections SET name = '$ac_name'
+ WHERE id = $group->group_acl";
+ update_data($query);
+ }
+ }
+
+ $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;
+ $group->container_guid = $new_owner_guid;
+
+ $metadata = elgg_get_metadata(array(
+ 'guid' => $group_guid,
+ 'limit' => false,
+ ));
+ if ($metadata) {
+ foreach ($metadata as $md) {
+ if ($md->owner_guid == $old_owner_guid) {
+ $md->owner_guid = $new_owner_guid;
+ $md->save();
+ }
+ }
+ }
+
+ // @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..a96165b0e
--- /dev/null
+++ b/mod/groups/actions/groups/membership/invite.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Invite users to join a group
+ *
+ * @package ElggGroups
+ */
+
+$logged_in_user = elgg_get_logged_in_user_entity();
+
+$user_guids = get_input('user_guid');
+if (!is_array($user_guids)) {
+ $user_guids = array($user_guids);
+}
+$group_guid = get_input('group_guid');
+$group = get_entity($group_guid);
+
+if (count($user_guids) > 0 && elgg_instanceof($group, 'group') && $group->canEdit()) {
+ foreach ($user_guids as $guid) {
+ $user = get_user($guid);
+ if (!$user) {
+ continue;
+ }
+
+ if (check_entity_relationship($group->guid, 'invited', $user->guid)) {
+ register_error(elgg_echo("groups:useralreadyinvited"));
+ continue;
+ }
+
+ if (check_entity_relationship($user->guid, 'member', $group->guid)) {
+ // @todo add error message
+ continue;
+ }
+
+ // Create relationship
+ add_entity_relationship($group->guid, 'invited', $user->guid);
+
+ // Send notification
+ $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"));
+ }
+ }
+}
+
+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..874e21b2d
--- /dev/null
+++ b/mod/groups/lib/discussion.php
@@ -0,0 +1,235 @@
+<?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 (!elgg_instanceof($group, 'group')) {
+ forward('', '404');
+ }
+ 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..d5bec1862
--- /dev/null
+++ b/mod/groups/lib/groups.php
@@ -0,0 +1,590 @@
+<?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");
+ $display_query = _elgg_get_display_query($tag);
+ $title = elgg_echo('groups:search:title', array($display_query));
+
+ // groups plugin saves tags as "interests" - see groups_fields_setup() in start.php
+ $params = array(
+ 'metadata_name' => 'interests',
+ 'metadata_value' => $tag,
+ 'type' => '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);
+
+ if (elgg_get_plugin_setting('limited_groups', 'groups') != 'yes' || elgg_is_admin_logged_in()) {
+ 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);
+
+ if (elgg_get_plugin_setting('limited_groups', 'groups') != 'yes' || elgg_is_admin_logged_in()) {
+ 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 (!elgg_instanceof($group, 'group')) {
+ forward('', '404');
+ }
+
+ 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'));
+
+ $db_prefix = elgg_get_config('dbprefix');
+ $content = elgg_list_entities_from_relationship(array(
+ 'relationship' => 'member',
+ 'relationship_guid' => $group->guid,
+ 'inverse_relationship' => true,
+ 'type' => 'user',
+ 'limit' => 20,
+ 'joins' => array("JOIN {$db_prefix}users_entity u ON e.guid=u.guid"),
+ 'order_by' => 'u.name ASC',
+ ));
+
+ $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;
+ } else {
+ $values['vis'] = $group->access_id;
+ }
+
+ $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..6002a535c
--- /dev/null
+++ b/mod/groups/start.php
@@ -0,0 +1,1073 @@
+<?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_instanceof($page_owner, 'group')) {
+ forward('', '404');
+ }
+
+ 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' => $page_owner->getGUID(),
+ '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' => false
+ ));
+
+ 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,
+ 'type' => '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..3199d76ba
--- /dev/null
+++ b/mod/groups/upgrades/2011030101.php
@@ -0,0 +1,66 @@
+<?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)
+ $topic->delete();
+ return;
+ }
+
+ $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..e2dc5455a
--- /dev/null
+++ b/mod/groups/views/default/forms/groups/edit.php
@@ -0,0 +1,178 @@
+<?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())) {
+ $members = array();
+
+ $options = array(
+ 'relationship' => 'member',
+ 'relationship_guid' => $vars['entity']->getGUID(),
+ 'inverse_relationship' => true,
+ 'type' => 'user',
+ 'limit' => 0,
+ );
+
+ $batch = new ElggBatch('elgg_get_entities_from_relationship', $options);
+ foreach ($batch 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..32dd2b74d
--- /dev/null
+++ b/mod/groups/views/default/groups/css.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Elgg Groups css
+ *
+ * @package groups
+ */
+
+?>
+.groups-profile > .elgg-image {
+ margin-right: 10px;
+}
+.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..3f7496871
--- /dev/null
+++ b/mod/groups/views/default/groups/profile/summary.php
@@ -0,0 +1,64 @@
+<?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
+ // we don't force icons to be square so don't set width/height
+ echo elgg_view_entity_icon($group, 'large', array(
+ 'href' => '',
+ 'width' => '',
+ 'height' => '',
+ ));
+ ?>
+ </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..f3f8f8d2d
--- /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',
+ 'type' => '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..1199a0c34
--- /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,
+ 'type' => '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..1e4e84b80
--- /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;
+}
+
+// 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') && $is_member) {
+ 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..e6988d16e
--- /dev/null
+++ b/mod/groups/views/default/object/groupforumtopic.php
@@ -0,0 +1,101 @@
+<?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,
+ 'class' => 'clearfix',
+ ));
+
+ 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/habitorio_theme/graphics/button.png b/mod/habitorio_theme/graphics/button.png
new file mode 100644
index 000000000..1d5c5a71f
--- /dev/null
+++ b/mod/habitorio_theme/graphics/button.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/elgg_sprites.png b/mod/habitorio_theme/graphics/elgg_sprites.png
new file mode 100644
index 000000000..d30df93e2
--- /dev/null
+++ b/mod/habitorio_theme/graphics/elgg_sprites.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/login.png b/mod/habitorio_theme/graphics/login.png
new file mode 100644
index 000000000..f0e7762d2
--- /dev/null
+++ b/mod/habitorio_theme/graphics/login.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/logo.png b/mod/habitorio_theme/graphics/logo.png
new file mode 100644
index 000000000..eea028015
--- /dev/null
+++ b/mod/habitorio_theme/graphics/logo.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/menu.gif b/mod/habitorio_theme/graphics/menu.gif
new file mode 100644
index 000000000..75bdefd61
--- /dev/null
+++ b/mod/habitorio_theme/graphics/menu.gif
Binary files differ
diff --git a/mod/habitorio_theme/graphics/menu.png b/mod/habitorio_theme/graphics/menu.png
new file mode 100644
index 000000000..1dff418a0
--- /dev/null
+++ b/mod/habitorio_theme/graphics/menu.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/people.png b/mod/habitorio_theme/graphics/people.png
new file mode 100644
index 000000000..b983d9d31
--- /dev/null
+++ b/mod/habitorio_theme/graphics/people.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/preset1.png b/mod/habitorio_theme/graphics/preset1.png
new file mode 100644
index 000000000..367f5f828
--- /dev/null
+++ b/mod/habitorio_theme/graphics/preset1.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/preset2.png b/mod/habitorio_theme/graphics/preset2.png
new file mode 100644
index 000000000..75d3c7488
--- /dev/null
+++ b/mod/habitorio_theme/graphics/preset2.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/preset3.png b/mod/habitorio_theme/graphics/preset3.png
new file mode 100644
index 000000000..2c496c2d8
--- /dev/null
+++ b/mod/habitorio_theme/graphics/preset3.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/preset4.png b/mod/habitorio_theme/graphics/preset4.png
new file mode 100644
index 000000000..fba38467d
--- /dev/null
+++ b/mod/habitorio_theme/graphics/preset4.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/preset5.png b/mod/habitorio_theme/graphics/preset5.png
new file mode 100644
index 000000000..626f19eed
--- /dev/null
+++ b/mod/habitorio_theme/graphics/preset5.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/preset6.png b/mod/habitorio_theme/graphics/preset6.png
new file mode 100644
index 000000000..4ad5f5780
--- /dev/null
+++ b/mod/habitorio_theme/graphics/preset6.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/preset7.png b/mod/habitorio_theme/graphics/preset7.png
new file mode 100644
index 000000000..2c82b009b
--- /dev/null
+++ b/mod/habitorio_theme/graphics/preset7.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/purity_01.png b/mod/habitorio_theme/graphics/purity_01.png
new file mode 100644
index 000000000..7f444b470
--- /dev/null
+++ b/mod/habitorio_theme/graphics/purity_01.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/purity_02.png b/mod/habitorio_theme/graphics/purity_02.png
new file mode 100644
index 000000000..565759e40
--- /dev/null
+++ b/mod/habitorio_theme/graphics/purity_02.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/purity_03.png b/mod/habitorio_theme/graphics/purity_03.png
new file mode 100644
index 000000000..6b19dabea
--- /dev/null
+++ b/mod/habitorio_theme/graphics/purity_03.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/search.gif b/mod/habitorio_theme/graphics/search.gif
new file mode 100644
index 000000000..1634ad85c
--- /dev/null
+++ b/mod/habitorio_theme/graphics/search.gif
Binary files differ
diff --git a/mod/habitorio_theme/graphics/search.png b/mod/habitorio_theme/graphics/search.png
new file mode 100644
index 000000000..e7c87fd4c
--- /dev/null
+++ b/mod/habitorio_theme/graphics/search.png
Binary files differ
diff --git a/mod/habitorio_theme/graphics/sidebar_background.gif b/mod/habitorio_theme/graphics/sidebar_background.gif
new file mode 100644
index 000000000..a0b8028d1
--- /dev/null
+++ b/mod/habitorio_theme/graphics/sidebar_background.gif
Binary files differ
diff --git a/mod/habitorio_theme/graphics/spacer.gif b/mod/habitorio_theme/graphics/spacer.gif
new file mode 100644
index 000000000..1c9d8aaad
--- /dev/null
+++ b/mod/habitorio_theme/graphics/spacer.gif
Binary files differ
diff --git a/mod/habitorio_theme/graphics/topbar.gif b/mod/habitorio_theme/graphics/topbar.gif
new file mode 100644
index 000000000..d606d3e3f
--- /dev/null
+++ b/mod/habitorio_theme/graphics/topbar.gif
Binary files differ
diff --git a/mod/habitorio_theme/manifest.xml b/mod/habitorio_theme/manifest.xml
new file mode 100644
index 000000000..dd9e42e65
--- /dev/null
+++ b/mod/habitorio_theme/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>Habitorio Theme</name>
+ <author>Lorea developers</author>
+ <version>1.8.0</version>
+ <category>theme</category>
+ <description>
+ Theme for Habitorio.net. Original authors: SocialApparatus http://socia.us
+ </description>
+ <website>https://lorea.org</website>
+ <copyright>(C) 2012 SocialApparatus, Lorea developers</copyright>
+ <license>GNU General Public License (GPL) version 2</license>
+ <admin_interface>simple</admin_interface>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/habitorio_theme/start.php b/mod/habitorio_theme/start.php
new file mode 100644
index 000000000..595b41b1c
--- /dev/null
+++ b/mod/habitorio_theme/start.php
@@ -0,0 +1,84 @@
+<?php
+
+function habitorio_theme_init() {
+ elgg_extend_view('page/elements/head', 'habitorio_theme/meta');
+ elgg_extend_view('css/elgg', 'habitorio_theme/css');
+ elgg_unregister_menu_item('topbar', 'elgg_logo');
+ if (elgg_is_active_plugin(CHAMELEONTHEMEENGINE)) {
+ if (!function_exists('chameleonPresets')) {
+
+ function chameleonPresets() {
+ $presets = array(
+ 'preset1' => array(
+ 'thumbnail' => 'habitorio_theme/graphics/preset1.png',
+ 'body_background_color' => 'ECECEC',
+ 'body_background_pattern' => 'eleven',
+ 'accent_color' => '1d1d1d',
+ 'logo_font' => 'poiret',
+ 'body_font' => 'nunito',
+ 'logo_color' => 'f34557'
+ ),
+ 'preset2' => array(
+ 'thumbnail' => 'habitorio_theme/graphics/preset2.png',
+ 'body_background_color' => 'a52a2a',
+ 'body_background_pattern' => 'twelve',
+ 'accent_color' => '216587',
+ 'logo_font' => 'oxygen',
+ 'body_font' => 'ubuntu',
+ 'logo_color' => '000000'
+ ),
+ 'preset3' => array(
+ 'thumbnail' => 'habitorio_theme/graphics/preset3.png',
+ 'body_background_color' => 'e8e8e8',
+ 'body_background_pattern' => 'twentyone',
+ 'accent_color' => '61871f',
+ 'logo_font' => 'oxygen',
+ 'body_font' => 'comfortaa',
+ 'logo_color' => '61871f'
+ ),
+ 'preset4' => array(
+ 'thumbnail' => 'habitorio_theme/graphics/preset4.png',
+ 'body_background_color' => '1e1436',
+ 'body_background_pattern' => 'four',
+ 'accent_color' => '000000',
+ 'logo_font' => 'lobster',
+ 'body_font' => 'oxygen',
+ 'logo_color' => '1e1436'
+ ),
+ 'preset5' => array(
+ 'thumbnail' => 'habitorio_theme/graphics/preset5.png',
+ 'body_background_color' => '163853',
+ 'body_background_pattern' => 'twentyfive',
+ 'accent_color' => '0F7516',
+ 'logo_font' => 'poiret',
+ 'body_font' => 'nunito',
+ 'logo_color' => 'ff0000'
+ ),
+ 'preset6' => array(
+ 'thumbnail' => 'habitorio_theme/graphics/preset6.png',
+ 'body_background_color' => 'e6e3de',
+ 'body_background_pattern' => 'fourteen',
+ 'accent_color' => 'ea7a3e',
+ 'logo_font' => 'nunito',
+ 'body_font' => 'poiret',
+ 'logo_color' => '4c4a47'
+ ),
+ 'preset7' => array(
+ 'thumbnail' => 'habitorio_theme/graphics/preset7.png',
+ 'body_background_color' => '000000',
+ 'body_background_pattern' => 'fifteen',
+ 'accent_color' => '1d1d1d',
+ 'logo_font' => 'comfortaa',
+ 'body_font' => 'nunito',
+ 'logo_color' => '72a32b'
+ )
+ );
+ return $presets;
+ }
+
+ }
+ }
+}
+
+elgg_register_event_handler('init', 'system', 'habitorio_theme_init');
+?>
diff --git a/mod/habitorio_theme/views/default/css/admin.php b/mod/habitorio_theme/views/default/css/admin.php
new file mode 100644
index 000000000..e3205ca4e
--- /dev/null
+++ b/mod/habitorio_theme/views/default/css/admin.php
@@ -0,0 +1,1443 @@
+<?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;
+ outline: 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;
+}
+: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: "" "";
+}
+
+/* ***************************************
+ 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! */
+.elgg-grid:after,
+.clearfix: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;
+}
+<?php // elgg-layout gets clearfix ?>
+.elgg-layout:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+/* ***************************************
+ 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;
+}
+.elgg-table th {
+ background-color: #ddd;
+}
+.elgg-table .alt td {
+ background: #eee;
+}
+.elgg-table td {
+ padding: 4px 8px;
+ border-bottom: 1px solid #ccc;
+}
+.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;
+}
+/* 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;
+ outline: none;
+}
+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;
+}
+
+/* ***************************************
+ 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;
+}
+.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 {
+ display: inline;
+}
+.elgg-plugin-category-bundled {
+ border-width: 2px;
+ border-color: #DAA520;
+}
+
+/****************************************
+ 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-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/mod/habitorio_theme/views/default/css/elements/OOCSS_LICENSE b/mod/habitorio_theme/views/default/css/elements/OOCSS_LICENSE
new file mode 100644
index 000000000..c09c45873
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/elements/buttons.php b/mod/habitorio_theme/views/default/css/elements/buttons.php
new file mode 100644
index 000000000..f584fa90f
--- /dev/null
+++ b/mod/habitorio_theme/views/default/css/elements/buttons.php
@@ -0,0 +1,132 @@
+<?php
+/**
+ * CSS buttons
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+/* **************************
+ BUTTONS
+************************** */
+
+/* Base */
+.elgg-button {
+ font-size: 14px;
+ font-weight: bold;
+ width: auto;
+ padding: 1px 4px;
+ cursor: pointer;
+ outline: none;
+ background:#333333;
+ color:#ffffff;
+
+}
+a.elgg-button {
+ padding: 3px 6px;
+}
+a.elgg-button:hover {
+color:#ffffff;
+}
+
+/* Submit: This button should convey, "you're about to take some definitive action" */
+.elgg-button-submit {
+ color: white;
+ text-decoration: none;
+
+
+}
+
+.elgg-button-submit:hover {
+ border-color: #333333;
+ text-decoration: none;
+ color: white;
+ background: #333333 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 {
+ color: #fff;
+ text-align: center;
+ font-weight: bold;
+ text-decoration: none;
+ cursor: pointer;
+ height:27px;
+ line-height:27px;
+ border:3px solid #ffffff;
+ -moz-border-radius:10px;
+ -webkit-border-radius:10px;
+ border-radius:10px;
+}
+
+.elgg-button-action:hover,
+.elgg-button-action:focus {
+ text-decoration: none;
+ box-shadow:0px 0px 4px #333333;
+}
+
+/* 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;
+}
+.elgg-button-delete:hover {
+ color: #999;
+ background-color: #333;
+ background-position: left 10px;
+ text-decoration: none;
+}
+
+.elgg-button-dropdown {
+ text-decoration:none;
+ text-align:center;
+ display:block;
+ font-weight:bold;
+ position:relative;
+ right:30px;
+ top:30px;
+ color: #333333;
+ border:2px solid #dddddd;
+ width:70px;
+ height:30px;
+ line-height:30px;
+ -moz-border-radius:10px;
+ -webkit-border-radius:10px;
+ border-radius:10px;
+}
+
+.elgg-button-dropdown:after {
+ content: " \25BC ";
+ font-size:smaller;
+}
+
+.elgg-button-dropdown:hover {
+ text-decoration:none;
+ box-shadow:0px 0px 4px #333333;
+}
+
+.elgg-button-dropdown.elgg-state-active {
+ outline: none;
+ color: #333;
+}
diff --git a/mod/habitorio_theme/views/default/css/elements/components.php b/mod/habitorio_theme/views/default/css/elements/components.php
new file mode 100644
index 000000000..7fe535d57
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/elements/core.php b/mod/habitorio_theme/views/default/css/elements/core.php
new file mode 100644
index 000000000..74f21ee59
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/elements/forms.php b/mod/habitorio_theme/views/default/css/elements/forms.php
new file mode 100644
index 000000000..c6aa55841
--- /dev/null
+++ b/mod/habitorio_theme/views/default/css/elements/forms.php
@@ -0,0 +1,298 @@
+<?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-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+input:focus, textarea:focus {
+
+ 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-radio.elgg-horizontal li {
+ display: inline;
+ padding-right: 10px;
+}
+
+.elgg-form-account input[type="text"],
+.elgg-form-account input[type="password"] {
+ width: 300px;
+}
+
+/* ***************************************
+ 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: 100%;
+}
+.friends-picker {
+ position: relative;
+ overflow: hidden;
+ margin: 0;
+ padding:0;
+ width: 730px;
+ height: auto;
+ background-color: #dedede;
+}
+.friendspicker-savebuttons {
+ background: white;
+ 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;
+}
+.tabHasContent {
+ background: white;
+ color:#333 !important;
+}
+.friends-picker-navigation li a:hover {
+ background: #333;
+ color:white !important;
+}
+.friends-picker-navigation li a.current {
+ 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;
+ margin:10px 0 0;
+ padding:10px 10px 0;
+}
+
+/* ***************************************
+ USER PICKER
+*************************************** */
+
+.user-picker .user-picker-entry {
+ clear:both;
+ height:25px;
+ padding:5px;
+ margin-top:5px;
+ border-bottom:1px solid #cccccc;
+}
+.user-picker-entry .elgg-button-delete {
+ margin-right:10px;
+}
+/* ***************************************
+ DATE PICKER
+**************************************** */
+.ui-datepicker {
+ margin-top: 3px;
+ background-color: white;
+ border: 1px solid #333333;
+ overflow: hidden;
+}
+
+.ui-datepicker-header {
+ color: white;
+ padding: 2px 0;
+}
+.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: #333333;
+ 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;
+ background: #fafafa;
+}
+.ui-datepicker-calendar .ui-state-hover {
+ border: 1px solid #aaa;
+ color: #333333;
+ background: #eee;
+}
+.ui-datepicker-calendar .ui-state-active,
+.ui-datepicker-calendar .ui-state-active.ui-state-hover {
+ font-weight: bold;
+ border: 1px solid #333333;
+ color: #333333;
+ background: #E4ECF5;
+}
diff --git a/mod/habitorio_theme/views/default/css/elements/grid.php b/mod/habitorio_theme/views/default/css/elements/grid.php
new file mode 100644
index 000000000..fdbaf4aca
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/elements/helpers.php b/mod/habitorio_theme/views/default/css/elements/helpers.php
new file mode 100644
index 000000000..9d0cd7ba9
--- /dev/null
+++ b/mod/habitorio_theme/views/default/css/elements/helpers.php
@@ -0,0 +1,160 @@
+<?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;
+}
+
+.right {
+ float: right;
+}
+
+.left {
+ float: left;
+}
+
+.link {
+ cursor: pointer;
+}
+
+<?php @todo // do we need something like large and small? ?>
+.large {
+ font-size: 120%;
+}
+
+.small {
+ font-size: 80%;
+}
+
+.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/mod/habitorio_theme/views/default/css/elements/icons.php b/mod/habitorio_theme/views/default/css/elements/icons.php
new file mode 100644
index 000000000..f7c789e33
--- /dev/null
+++ b/mod/habitorio_theme/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: 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;
+}
diff --git a/mod/habitorio_theme/views/default/css/elements/layout.php b/mod/habitorio_theme/views/default/css/elements/layout.php
new file mode 100644
index 000000000..2a3780681
--- /dev/null
+++ b/mod/habitorio_theme/views/default/css/elements/layout.php
@@ -0,0 +1,142 @@
+<?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 ?>
+body {
+text-shadow:1px 1px 0px #ffffff;
+}
+.elgg-page-default {
+min-width: 998px;
+}
+.elgg-page-default .elgg-page-header > .elgg-inner {
+width: 1016px;
+margin:20px auto 0px auto;
+background:url(<?php echo $vars['url']; ?>mod/habitorio_theme/graphics/purity_01.png) top center no-repeat;
+}
+.elgg-page-default .elgg-page-header {
+
+}
+.elgg-page-default .elgg-page-body > .elgg-inner {
+width: 990px;
+margin: 0px auto;
+background:url(<?php echo $vars['url']; ?>mod/habitorio_theme/graphics/purity_02.png) top center repeat-y;
+padding:0px 13px;
+}
+.elgg-body {
+background:none;
+}
+.elgg-page-default .elgg-page-footer > .elgg-inner {
+width: 970px;
+margin: 0 auto;
+padding: 5px 0;
+}
+.elgg-page-default .elgg-page-footer {
+background:url(<?php echo $vars['url']; ?>mod/habitorio_theme/graphics/purity_03.png) bottom center no-repeat;
+width:1016px;
+padding:10px;
+margin:0px auto;
+height:50px;
+}
+
+/***** TOPBAR ******/
+.elgg-page-topbar {
+background: #2D2D2D ;
+position: relative;
+height: 24px;
+z-index: 9000;
+width:940px;
+margin-left:auto;
+margin-right:auto;
+}
+.elgg-page-topbar > .elgg-inner {
+padding: 0 10px;
+}
+
+/***** PAGE MESSAGES ******/
+.elgg-system-messages {
+position: absolute;
+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;
+}
+.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(); ?>mod/habitorio_theme/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-sidebar {
+position: relative;
+padding: 20px 10px;
+float: right;
+width: 210px;
+margin: 0 0 0 10px;
+-webkit-border-top-left-radius: 15px;
+-webkit-border-top-right-radius: 15px;
+-moz-border-radius-topleft: 15px;
+-moz-border-radius-topright: 15px;
+border-top-left-radius: 15px;
+border-top-right-radius: 15px;}
+.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;
+padding-top:20px;
+}
+.elgg-page-footer {
+color: #999;
+}
+.elgg-page-footer a:hover {
+color: #666;
+}
diff --git a/mod/habitorio_theme/views/default/css/elements/misc.php b/mod/habitorio_theme/views/default/css/elements/misc.php
new file mode 100644
index 000000000..d9622d34a
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/elements/modules.php b/mod/habitorio_theme/views/default/css/elements/modules.php
new file mode 100644
index 000000000..74092c774
--- /dev/null
+++ b/mod/habitorio_theme/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;
+} \ No newline at end of file
diff --git a/mod/habitorio_theme/views/default/css/elements/navigation.php b/mod/habitorio_theme/views/default/css/elements/navigation.php
new file mode 100644
index 000000000..62f370069
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/elements/reset.php b/mod/habitorio_theme/views/default/css/elements/reset.php
new file mode 100644
index 000000000..44bf2fac9
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/elements/typography.php b/mod/habitorio_theme/views/default/css/elements/typography.php
new file mode 100644
index 000000000..5c59f1639
--- /dev/null
+++ b/mod/habitorio_theme/views/default/css/elements/typography.php
@@ -0,0 +1,155 @@
+<?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:#333333;
+}
+
+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-size: 11px;
+
+ 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:1px 3px;
+}
+
+.elgg-monospace {
+}
+
+blockquote {
+ line-height: 1.3em;
+ padding:3px 15px;
+ margin:0px 0 15px 0;
+ background:#EBF5FF;
+ border:none;
+
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: bold;
+ color: #333333;
+}
+
+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: 2.2em;
+ line-height: 1.2em;
+ text-decoration: none;
+ margin-top:40px;
+ margin-left:40px;
+ float:left;
+}
+
+.elgg-heading-main {
+ float: left;
+ max-width: 530px;
+ margin-right: 10px;
+}
+.elgg-heading-basic {
+ color: #333333;
+ 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: #333333;
+}
+
+/* ***************************************
+ 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, 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%;
+} \ No newline at end of file
diff --git a/mod/habitorio_theme/views/default/css/elgg.php b/mod/habitorio_theme/views/default/css/elgg.php
new file mode 100644
index 000000000..4960e6ade
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/ie.php b/mod/habitorio_theme/views/default/css/ie.php
new file mode 100644
index 000000000..4bddd4d55
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/ie6.php b/mod/habitorio_theme/views/default/css/ie6.php
new file mode 100644
index 000000000..cf49d33f2
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/ie7.php b/mod/habitorio_theme/views/default/css/ie7.php
new file mode 100644
index 000000000..db0125b4b
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/lightbox.php b/mod/habitorio_theme/views/default/css/lightbox.php
new file mode 100644
index 000000000..7d5917cc3
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/css/walled_garden.php b/mod/habitorio_theme/views/default/css/walled_garden.php
new file mode 100644
index 000000000..f6f7f97dc
--- /dev/null
+++ b/mod/habitorio_theme/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/mod/habitorio_theme/views/default/custom_index/css.php b/mod/habitorio_theme/views/default/custom_index/css.php
new file mode 100644
index 000000000..66cdf3e53
--- /dev/null
+++ b/mod/habitorio_theme/views/default/custom_index/css.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Custom Index CSS
+ *
+ */
+?>
+
+/*******************************
+ Custom Index
+********************************/
+.custom-index {
+ padding: 10px 0;
+}
+.custom-index .elgg-module-featured {
+}
+.custom-index .elgg-module-featured:hover {
+}
diff --git a/mod/habitorio_theme/views/default/habitorio_theme/css.php b/mod/habitorio_theme/views/default/habitorio_theme/css.php
new file mode 100644
index 000000000..bf475dcd4
--- /dev/null
+++ b/mod/habitorio_theme/views/default/habitorio_theme/css.php
@@ -0,0 +1,178 @@
+<?php
+?>
+
+#social_menu {
+background:url(<?php echo $vars['url']; ?>mod/habitorio_theme/graphics/menu.png) top center no-repeat;
+width:980px;
+height:54px;
+margin:20px auto 0px auto;
+position:relative;
+}
+#social_topbar {
+background:url(<?php echo $vars['url']; ?>mod/habitorio_theme/graphics/menu.png) bottom center no-repeat;
+width:980px;
+height:41px;
+margin:0px auto;
+padding-top:3px;
+}
+#social_topbar a {
+color:#333333;
+}
+.elgg-menu-site > li > a {
+padding: 6px 6px 3px 6px;
+height: 20px;
+font-weight:bold;
+box-shadow:none;
+}
+
+.elgg-menu-site-default {
+position: absolute;
+bottom: 13px;
+left: 30px;
+height: 23px;
+}
+.elgg-menu-site-default > li {
+float: left;
+margin-right: 1px;
+}
+.elgg-menu-site-default li:last-child{
+background:none;
+}
+.elgg-menu-site-default > li > a {
+color: #333333;
+}
+.elgg-menu-site-default > .elgg-state-selected > a,
+.elgg-menu-site-default > li:hover > a {
+color: #fff;
+-moz-border-radius:8px;
+-webkit-border-radius:8px;
+border-radius:8px;
+-webkit-box-shadow: none;
+-moz-box-shadow: none;
+box-shadow: none;
+background:#A7A7A7;
+text-shadow:none;
+}
+.elgg-menu-site > li > a:hover {
+text-decoration: none;
+text-shadow:none;
+box-shadow:inset 0 0 1px #ffffff;
+}
+.elgg-menu-site-more {
+display: none;
+position: relative;
+left: -1px;
+width: 100%;
+z-index: 1;
+min-width: 150px;
+padding:0px;
+background:#ffffff;
+-webkit-border-radius: 10px;
+-moz-border-radius: 10px;
+border-radius: 10px;
+}
+
+li:hover > .elgg-menu-site-more {
+display: block;
+-webkit-box-shadow: none;
+-moz-box-shadow: none;
+box-shadow: none;
+border:none;
+background:#ffffff;
+box-shadow:0px 0px 4px #333333;
+text-shadow:none;
+}
+
+.elgg-menu-site-more > li > a {
+color: #333;
+background:#ffffff;
+padding:5px;
+}
+.elgg-menu-site-more > li > a:hover {
+background:#A7A7A7;
+color:#ffffff;
+text-shadow:none;
+}
+.elgg-menu-site-more >li:first-child> a,
+.elgg-menu-site-more > li:first-child >a:hover {
+-webkit-border-top-left-radius: 10px;
+-webkit-border-top-right-radius: 10px;
+-moz-border-radius-topleft: 10px;
+-moz-border-radius-topright: 10px;
+border-top-left-radius: 10px;
+border-top-right-radius: 10px;
+text-shadow:none;
+}
+.elgg-menu-site-more > li:last-child > a,
+.elgg-menu-site-more > li:last-child > a:hover {
+-webkit-border-bottom-right-radius: 10px;
+-webkit-border-bottom-left-radius: 10px;
+-moz-border-radius-bottomright: 10px;
+-moz-border-radius-bottomleft: 10px;
+border-bottom-right-radius: 10px;
+border-bottom-left-radius: 10px;
+text-shadow:none;
+}
+.elgg-more > a:before {
+content: "\25BC";
+font-size: smaller;
+margin-right: 4px;
+}
+.elgg-page-header .elgg-search {
+bottom: 49px;
+height: 31px;
+position: absolute;
+right: 10px;
+background:url(<?php echo $vars['url']; ?>mod/habitorio_theme/graphics/search.png) no-repeat;
+padding-right:60px;
+width:216px;
+height:34px;
+}
+.front_left {
+width:420px;
+margin-left:50px;
+}
+.front_right {
+width:420px;
+margin-right:50px;
+}
+.search-input {
+border:none;
+}
+.elgg-page-header .elgg-search input[type=text] {
+width: 166px;
+}
+.elgg-page-header .elgg-search input[type=submit] {
+display: none;
+}
+.elgg-search input[type=text] {
+color: #333;
+font-size: 12px;
+font-weight: bold;
+padding: 2px 4px 2px 26px;
+margin-top:10px;
+margin-left:6px;
+border:none;
+}
+.elgg-search input[type=text]:focus, .elgg-search input[type=text]:active {
+
+color: #0054A7;
+border:none;
+}
+.search-list li {
+padding: 5px 0 0;
+}
+.search-heading-category {
+margin-top: 20px;
+color: #666666;
+}
+
+*:hover, .elgg-state-selected {
+text-shadow:none;
+}
+.elgg-menu-page a:hover, #profile-owner-block a:hover{
+background:#333333;
+}
+.elgg-menu-page li.elgg-state-selected > a {
+background:#000000;
+}
diff --git a/mod/habitorio_theme/views/default/habitorio_theme/leftside.php b/mod/habitorio_theme/views/default/habitorio_theme/leftside.php
new file mode 100644
index 000000000..d49c84137
--- /dev/null
+++ b/mod/habitorio_theme/views/default/habitorio_theme/leftside.php
@@ -0,0 +1,5 @@
+<?php
+$frontleft = elgg_get_plugin_setting('frontleft','habitorio_theme');
+if (!$frontleft) $frontleft = '<h2>You can edit this information in the admin section of this theme.</h2>';
+echo $frontleft;
+?>
diff --git a/mod/habitorio_theme/views/default/habitorio_theme/rightside.php b/mod/habitorio_theme/views/default/habitorio_theme/rightside.php
new file mode 100644
index 000000000..02b18dd6a
--- /dev/null
+++ b/mod/habitorio_theme/views/default/habitorio_theme/rightside.php
@@ -0,0 +1,5 @@
+<?php
+$frontright = elgg_get_plugin_setting('frontright', 'habitorio_theme');
+if (!$frontright) $frontright = '<h2>You can edit this information in the admin section of this theme.</h2>';
+echo $frontright;
+?>
diff --git a/mod/habitorio_theme/views/default/page/default.php b/mod/habitorio_theme/views/default/page/default.php
new file mode 100644
index 000000000..c6bb6f1b0
--- /dev/null
+++ b/mod/habitorio_theme/views/default/page/default.php
@@ -0,0 +1,58 @@
+<?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') {
+ 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;
+}
+
+// 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">
+ <?php echo elgg_view('page/elements/messages', array('object' => $vars['sysmessages'])); ?>
+ </div>
+
+
+ <div class="elgg-page-header">
+ <div class="elgg-inner">
+ <?php echo elgg_view('page/elements/header', $vars); ?>
+ </div>
+ </div>
+ <div class="elgg-page-body">
+ <div class="elgg-inner">
+ <?php echo elgg_view('page/elements/body', $vars); ?>
+ </div>
+ </div>
+ <div class="elgg-page-footer">
+ <div class="elgg-inner">
+ <?php echo elgg_view('page/elements/footer', $vars); ?>
+ </div>
+ </div>
+</div>
+<?php echo elgg_view('page/elements/foot'); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/mod/habitorio_theme/views/default/page/elements/footer.php b/mod/habitorio_theme/views/default/page/elements/footer.php
new file mode 100644
index 000000000..2459545c0
--- /dev/null
+++ b/mod/habitorio_theme/views/default/page/elements/footer.php
@@ -0,0 +1,12 @@
+<?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'));
+?> \ No newline at end of file
diff --git a/mod/habitorio_theme/views/default/page/elements/header.php b/mod/habitorio_theme/views/default/page/elements/header.php
new file mode 100644
index 000000000..ad3bfabce
--- /dev/null
+++ b/mod/habitorio_theme/views/default/page/elements/header.php
@@ -0,0 +1,22 @@
+<?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
+?>
+<div id="social_menu">
+<?php
+echo elgg_view_menu('site');
+?>
+<div style="clear:both;"></div>
+</div>
+<?php echo elgg_view('page/elements/topbar', $vars); ?>
+<div style="clear:both;"></div>
diff --git a/mod/habitorio_theme/views/default/page/elements/header_logo.php b/mod/habitorio_theme/views/default/page/elements/header_logo.php
new file mode 100644
index 000000000..373ce27f7
--- /dev/null
+++ b/mod/habitorio_theme/views/default/page/elements/header_logo.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Elgg header logo
+ */
+
+$site = elgg_get_site_entity();
+$site_name = $site->name;
+$site_url = elgg_get_site_url();
+$site_description = $site->description;
+?>
+
+<h1 style="float:left;margin-top:10px;">
+ <a class="elgg-heading-site" href="<?php echo $site_url; ?>">
+ <?php echo $site_name; ?>
+ </a>
+</h1>
+
+
+<div style="clear:left;"></div>
+<p style="float:left;margin-left:20px;"><?php echo $site_description; ?></p>
+
diff --git a/mod/habitorio_theme/views/default/page/elements/messages.php b/mod/habitorio_theme/views/default/page/elements/messages.php
new file mode 100644
index 000000000..869ce2b5e
--- /dev/null
+++ b/mod/habitorio_theme/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 '<div style="width:990px;margin:0px auto;position:relative;">';
+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 autop($message);
+ echo '</li>';
+ }
+ }
+}
+
+echo '</ul></div>';
diff --git a/mod/habitorio_theme/views/default/page/elements/topbar.php b/mod/habitorio_theme/views/default/page/elements/topbar.php
new file mode 100644
index 000000000..ef70a83cc
--- /dev/null
+++ b/mod/habitorio_theme/views/default/page/elements/topbar.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Elgg topbar
+ * The standard elgg top toolbar
+ */
+
+// Elgg logo
+?>
+<div id="social_topbar">
+ <div style="width:930px;margin:0px auto;">
+ <?php if (elgg_is_logged_in()):
+ echo elgg_view_menu('topbar', array('sort_by' => 'priority', array('elgg-menu-hz')));
+ endif ?>
+ </div>
+ <div style="clear:both;"></div>
+</div>
+<?php
+
+// 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/mod/habitorio_theme/views/default/page/layouts/custom_index.php b/mod/habitorio_theme/views/default/page/layouts/custom_index.php
new file mode 100644
index 000000000..d42b45d0d
--- /dev/null
+++ b/mod/habitorio_theme/views/default/page/layouts/custom_index.php
@@ -0,0 +1,48 @@
+<?php
+if (elgg_get_config('allow_registration') != false) {
+ $friend_guid = (int) get_input('friend_guid', 0);
+ $invitecode = get_input('invitecode');
+ $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 float',
+ );
+ $body_params = array(
+ 'friend_guid' => $friend_guid,
+ 'invitecode' => $invitecode
+ );
+ $content = elgg_view_form('register', $form_params, $body_params);
+ $content .= elgg_view('help/register');
+} else {
+ $content = '';
+}
+$showpeople = elgg_get_plugin_setting('showpeople','habitorio_theme');
+if (!$showpeople) $showpeople = 'right';
+?>
+
+<div class="custom-index elgg-main elgg-grid clearfix">
+ <div class="elgg-col elgg-col-1of2">
+ <div class="elgg-inner pvm phm prl">
+ <div class="front_left">
+ <?php if ($showpeople == 'Left') { ?>
+ <img src="<?php echo $vars['url']; ?>mod/habitorio_theme/graphics/people.png">
+ <?php } ?>
+ <?php echo elgg_view('habitorio_theme/leftside'); ?>
+ <?php if (!elgg_is_logged_in()) echo $content;?>
+ </div>
+ </div>
+ </div>
+ <div class="elgg-col elgg-col-1of2">
+ <div class="elgg-inner pvm">
+ <div class="front_right">
+ <?php if ($showpeople == 'Right') { ?>
+ <img src="<?php echo $vars['url']; ?>mod/habitorio_theme/graphics/people.png">
+ <?php } ?>
+ <?php echo elgg_view('habitorio_theme/rightside'); ?>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/mod/habitorio_theme/views/default/plugins/purity_theme/settings.php b/mod/habitorio_theme/views/default/plugins/purity_theme/settings.php
new file mode 100644
index 000000000..a7ffd5bee
--- /dev/null
+++ b/mod/habitorio_theme/views/default/plugins/purity_theme/settings.php
@@ -0,0 +1,24 @@
+<?php
+ $frontleft = $vars['entity']->frontleft;
+ if (!$frontleft) $frontleft='<h2>You can edit this information in the admin section of this theme.</h2>';
+ $frontright = $vars['entity']->frontright;
+ if (!$frontright) $frontright='<h2>You can edit this information in the admin section of this theme.</h2>';
+ $showpeople = $vars['entity']->showpeople;
+ if (!$showpeople) $showpeople = 'Right';
+?>
+<div id="habitorio_theme_admin">
+
+ <label>Show the default "people" image?</label><br/>
+ <?php echo elgg_view('input/dropdown',array('name'=>'params[showpeople]','value'=>$showpeople,'options'=>array('no','Left','Right'))); ?>
+ <p>&nbsp;</p>
+ <label>Front left text area:</label><br/>
+ <?php
+ echo elgg_view('input/longtext', array('name'=>'params[frontleft]','value'=>$frontleft));
+ ?>
+ <p>&nbsp;</p>
+ <label>Front right text area:</label><br/>
+ <?php
+ echo elgg_view('input/longtext', array('name'=>'params[frontright]','value'=>$frontright));
+ ?>
+
+</div>
diff --git a/mod/html5/.gitignore b/mod/html5/.gitignore
new file mode 100644
index 000000000..336139754
--- /dev/null
+++ b/mod/html5/.gitignore
@@ -0,0 +1,3 @@
+/.project
+/.buildpath
+/.settings
diff --git a/mod/html5/README b/mod/html5/README
new file mode 100644
index 000000000..29e8181b9
--- /dev/null
+++ b/mod/html5/README
@@ -0,0 +1,7 @@
+# HTML5 Plugin for Elgg #
+Provides several javascript libraries + views that allow developers to start using HTML5 features in Elgg today.
+
+## Features ##
+* HTML5 input views
+* Modernizr javascript library for easy html5 feature detection
+* Javascript shim for the placeholder attribute \ No newline at end of file
diff --git a/mod/html5/manifest.xml b/mod/html5/manifest.xml
new file mode 100644
index 000000000..e5a53dda7
--- /dev/null
+++ b/mod/html5/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>HTML5</name>
+ <author>Evan Winslow and Lorea Developers</author>
+ <version>1.8.0</version>
+ <description>
+ Provides several javascript libraries + views that allow developers to start using HTML5 features in Elgg today.
+ </description>
+ <copyright>(C) Evan Winslow 2010</copyright>
+ <website>http://github.com/ewinslow/elgg-html5</website>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/html5/start.php b/mod/html5/start.php
new file mode 100644
index 000000000..462eb88e7
--- /dev/null
+++ b/mod/html5/start.php
@@ -0,0 +1,11 @@
+<?php
+
+function html5_init() {
+ elgg_extend_view('css/elgg', 'html5/css', 1);
+ elgg_extend_view('theme_preview/forms/inputs', 'html5/theme_preview/forms/inputs');
+
+ elgg_register_js('Modernizr', '/mod/html5/vendors/Modernizr-1.5.js', 'head', 1);
+ elgg_register_js('jquery.placeholder', '/mod/html5/vendors/jquery/jquery.placeholder-1.0.1.js', 'footer');
+}
+
+elgg_register_event_handler('init', 'system', 'html5_init');
diff --git a/mod/html5/vendors/Modernizr-1.5.min.js b/mod/html5/vendors/Modernizr-1.5.min.js
new file mode 100644
index 000000000..a8dc724e6
--- /dev/null
+++ b/mod/html5/vendors/Modernizr-1.5.min.js
@@ -0,0 +1,28 @@
+/*!
+ * Modernizr JavaScript library 1.5
+ * http://www.modernizr.com/
+ *
+ * Copyright (c) 2009-2010 Faruk Ates - http://farukat.es/
+ * Dual-licensed under the BSD and MIT licenses.
+ * http://www.modernizr.com/license/
+ *
+ * Featuring major contributions by
+ * Paul Irish - http://paulirish.com
+ */
+ window.Modernizr=function(i,e,I){function C(a,b){for(var c in a)if(m[a[c]]!==I&&(!b||b(a[c],D)))return true}function r(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1);return!!C([a,"Webkit"+c,"Moz"+c,"O"+c,"ms"+c,"Khtml"+c],b)}function P(){j[E]=function(a){for(var b=0,c=a.length;b<c;b++)J[a[b]]=!!(a[b]in n);return J}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" "));j[Q]=function(a){for(var b=0,c,h=a.length;b<h;b++){n.setAttribute("type",a[b]);if(c=n.type!==
+ "text"){n.value=K;/tel|search/.test(n.type)||(c=/url|email/.test(n.type)?n.checkValidity&&n.checkValidity()===false:n.value!=K)}L[a[b]]=!!c}return L}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var j={},s=e.documentElement,D=e.createElement("modernizr"),m=D.style,n=e.createElement("input"),E="input",Q=E+"types",K=":)",M=Object.prototype.toString,y=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),d={},L={},J={},N=[],u=function(){var a={select:"input",
+ change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"},b={};return function(c,h){var t=arguments.length==1;if(t&&b[c])return b[c];h=h||document.createElement(a[c]||"div");c="on"+c;var g=c in h;if(!g&&h.setAttribute){h.setAttribute(c,"return;");g=typeof h[c]=="function"}h=null;return t?(b[c]=g):g}}(),F={}.hasOwnProperty,O;O=typeof F!=="undefined"&&typeof F.call!=="undefined"?function(a,b){return F.call(a,b)}:function(a,b){return b in a&&typeof a.constructor.prototype[b]==="undefined"};
+ d.canvas=function(){return!!e.createElement("canvas").getContext};d.canvastext=function(){return!!(d.canvas()&&typeof e.createElement("canvas").getContext("2d").fillText=="function")};d.geolocation=function(){return!!navigator.geolocation};d.crosswindowmessaging=function(){return!!i.postMessage};d.websqldatabase=function(){var a=!!i.openDatabase;if(a)try{a=!!openDatabase("testdb","1.0","html5 test db",2E5)}catch(b){a=false}return a};d.indexedDB=function(){return!!i.indexedDB};d.hashchange=function(){return u("hashchange",
+ i)&&(document.documentMode===I||document.documentMode>7)};d.historymanagement=function(){return!!(i.history&&history.pushState)};d.draganddrop=function(){return u("drag")&&u("dragstart")&&u("dragenter")&&u("dragover")&&u("dragleave")&&u("dragend")&&u("drop")};d.websockets=function(){return"WebSocket"in i};d.rgba=function(){m.cssText="background-color:rgba(150,255,150,.5)";return(""+m.backgroundColor).indexOf("rgba")!==-1};d.hsla=function(){m.cssText="background-color:hsla(120,40%,100%,.5)";return(""+
+ m.backgroundColor).indexOf("rgba")!==-1};d.multiplebgs=function(){m.cssText="background:url(//:),url(//:),red url(//:)";return/(url\s*\(.*?){3}/.test(m.background)};d.backgroundsize=function(){return r("backgroundSize")};d.borderimage=function(){return r("borderImage")};d.borderradius=function(){return r("borderRadius","",function(a){return(""+a).indexOf("orderRadius")!==-1})};d.boxshadow=function(){return r("boxShadow")};d.opacity=function(){var a=y.join("opacity:.5;")+"";m.cssText=a;return(""+m.opacity).indexOf("0.5")!==
+ -1};d.cssanimations=function(){return r("animationName")};d.csscolumns=function(){return r("columnCount")};d.cssgradients=function(){var a=("background-image:"+y.join("gradient(linear,left top,right bottom,from(#9f9),to(white));background-image:")+y.join("linear-gradient(left top,#9f9, white);background-image:")).slice(0,-17);m.cssText=a;return(""+m.backgroundImage).indexOf("gradient")!==-1};d.cssreflections=function(){return r("boxReflect")};d.csstransforms=function(){return!!C(["transformProperty",
+ "WebkitTransform","MozTransform","OTransform","msTransform"])};d.csstransforms3d=function(){var a=!!C(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);if(a){var b=document.createElement("style"),c=e.createElement("div");b.textContent="@media ("+y.join("transform-3d),(")+"modernizr){#modernizr{height:3px}}";e.getElementsByTagName("head")[0].appendChild(b);c.id="modernizr";s.appendChild(c);a=c.offsetHeight===3;b.parentNode.removeChild(b);c.parentNode.removeChild(c)}return a};
+ d.csstransitions=function(){return r("transitionProperty")};d.fontface=function(){var a;if(/*@cc_on@if(@_jscript_version>=5)!@end@*/0)a=true;else{var b=e.createElement("style"),c=e.createElement("span"),h,t=false,g=e.body,o,w;b.textContent="@font-face{font-family:testfont;src:url('data:font/ttf;base64,AAEAAAAMAIAAAwBAT1MvMliohmwAAADMAAAAVmNtYXCp5qrBAAABJAAAANhjdnQgACICiAAAAfwAAAAEZ2FzcP//AAMAAAIAAAAACGdseWYv5OZoAAACCAAAANxoZWFk69bnvwAAAuQAAAA2aGhlYQUJAt8AAAMcAAAAJGhtdHgGDgC4AAADQAAAABRsb2NhAIQAwgAAA1QAAAAMbWF4cABVANgAAANgAAAAIG5hbWUgXduAAAADgAAABPVwb3N03NkzmgAACHgAAAA4AAECBAEsAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAACAAMDAAAAAAAAgAACbwAAAAoAAAAAAAAAAFBmRWQAAAAgqS8DM/8zAFwDMwDNAAAABQAAAAAAAAAAAAMAAAADAAAAHAABAAAAAABGAAMAAQAAAK4ABAAqAAAABgAEAAEAAgAuqQD//wAAAC6pAP///9ZXAwAAAAAAAAACAAAABgBoAAAAAAAvAAEAAAAAAAAAAAAAAAAAAAABAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEACoAAAAGAAQAAQACAC6pAP//AAAALqkA////1lcDAAAAAAAAAAIAAAAiAogAAAAB//8AAgACACIAAAEyAqoAAwAHAC6xAQAvPLIHBADtMrEGBdw8sgMCAO0yALEDAC88sgUEAO0ysgcGAfw8sgECAO0yMxEhESczESMiARDuzMwCqv1WIgJmAAACAFUAAAIRAc0ADwAfAAATFRQWOwEyNj0BNCYrASIGARQGKwEiJj0BNDY7ATIWFX8aIvAiGhoi8CIaAZIoN/43KCg3/jcoAWD0JB4eJPQkHh7++EY2NkbVRjY2RgAAAAABAEH/+QCdAEEACQAANjQ2MzIWFAYjIkEeEA8fHw8QDxwWFhwWAAAAAQAAAAIAAIuYbWpfDzz1AAsEAAAAAADFn9IuAAAAAMWf0i797/8zA4gDMwAAAAgAAgAAAAAAAAABAAADM/8zAFwDx/3v/98DiAABAAAAAAAAAAAAAAAAAAAABQF2ACIAAAAAAVUAAAJmAFUA3QBBAAAAKgAqACoAWgBuAAEAAAAFAFAABwBUAAQAAgAAAAEAAQAAAEAALgADAAMAAAAQAMYAAQAAAAAAAACLAAAAAQAAAAAAAQAhAIsAAQAAAAAAAgAFAKwAAQAAAAAAAwBDALEAAQAAAAAABAAnAPQAAQAAAAAABQAKARsAAQAAAAAABgAmASUAAQAAAAAADgAaAUsAAwABBAkAAAEWAWUAAwABBAkAAQBCAnsAAwABBAkAAgAKAr0AAwABBAkAAwCGAscAAwABBAkABABOA00AAwABBAkABQAUA5sAAwABBAkABgBMA68AAwABBAkADgA0A/tDb3B5cmlnaHQgMjAwOSBieSBEYW5pZWwgSm9obnNvbi4gIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UuIEtheWFoIExpIGdseXBocyBhcmUgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDMuYmFlYzJhOTJiZmZlNTAzMiAtIHN1YnNldCBvZiBKdXJhTGlnaHRiYWVjMmE5MmJmZmU1MDMyIC0gc3Vic2V0IG9mIEZvbnRGb3JnZSAyLjAgOiBKdXJhIExpZ2h0IDogMjMtMS0yMDA5YmFlYzJhOTJiZmZlNTAzMiAtIHN1YnNldCBvZiBKdXJhIExpZ2h0VmVyc2lvbiAyIGJhZWMyYTkyYmZmZTUwMzIgLSBzdWJzZXQgb2YgSnVyYUxpZ2h0aHR0cDovL3NjcmlwdHMuc2lsLm9yZy9PRkwAQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMAA5ACAAYgB5ACAARABhAG4AaQBlAGwAIABKAG8AaABuAHMAbwBuAC4AIAAgAFIAZQBsAGUAYQBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGUAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUALgAgAEsAYQB5AGEAaAAgAEwAaQAgAGcAbAB5AHAAaABzACAAYQByAGUAIAByAGUAbABlAGEAcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAEcAUABMACAAdgBlAHIAcwBpAG8AbgAgADMALgBiAGEAZQBjADIAYQA5ADIAYgBmAGYAZQA1ADAAMwAyACAALQAgAHMAdQBiAHMAZQB0ACAAbwBmACAASgB1AHIAYQBMAGkAZwBoAHQAYgBhAGUAYwAyAGEAOQAyAGIAZgBmAGUANQAwADMAMgAgAC0AIABzAHUAYgBzAGUAdAAgAG8AZgAgAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAASgB1AHIAYQAgAEwAaQBnAGgAdAAgADoAIAAyADMALQAxAC0AMgAwADAAOQBiAGEAZQBjADIAYQA5ADIAYgBmAGYAZQA1ADAAMwAyACAALQAgAHMAdQBiAHMAZQB0ACAAbwBmACAASgB1AHIAYQAgAEwAaQBnAGgAdABWAGUAcgBzAGkAbwBuACAAMgAgAGIAYQBlAGMAMgBhADkAMgBiAGYAZgBlADUAMAAzADIAIAAtACAAcwB1AGIAcwBlAHQAIABvAGYAIABKAHUAcgBhAEwAaQBnAGgAdABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAAAAAAgAAAAAAAP+BADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQACAQIAEQt6ZXJva2F5YWhsaQ==')}";
+ e.getElementsByTagName("head")[0].appendChild(b);c.setAttribute("style","font:99px _,arial,helvetica;position:absolute;visibility:hidden");if(!g){g=s.appendChild(e.createElement("fontface"));t=true}c.innerHTML="........";c.id="fonttest";g.appendChild(c);h=c.offsetWidth*c.offsetHeight;c.style.font="99px testfont,_,arial,helvetica";a=h!==c.offsetWidth*c.offsetHeight;var v=function(){if(g.parentNode){a=j.fontface=h!==c.offsetWidth*c.offsetHeight;s.className=s.className.replace(/(no-)?fontface\b/,"")+
+ (a?" ":" no-")+"fontface"}};setTimeout(v,75);setTimeout(v,150);addEventListener("load",function(){v();(w=true)&&o&&o(a);setTimeout(function(){t||(g=c);g.parentNode.removeChild(g);b.parentNode.removeChild(b)},50)},false)}j._fontfaceready=function(p){w||a?p(a):(o=p)};return a||h!==c.offsetWidth};d.video=function(){var a=e.createElement("video"),b=!!a.canPlayType;if(b){b=new Boolean(b);b.ogg=a.canPlayType('video/ogg; codecs="theora"');b.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"');b.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return b};
+ d.audio=function(){var a=e.createElement("audio"),b=!!a.canPlayType;if(b){b=new Boolean(b);b.ogg=a.canPlayType('audio/ogg; codecs="vorbis"');b.mp3=a.canPlayType("audio/mpeg;");b.wav=a.canPlayType('audio/wav; codecs="1"');b.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")}return b};d.localStorage=function(){return"localStorage"in i&&i.localStorage!==null};d.sessionStorage=function(){try{return"sessionStorage"in i&&i.sessionStorage!==null}catch(a){return false}};d.webworkers=function(){return!!i.Worker};
+ d.applicationCache=function(){var a=i.applicationCache;return!!(a&&typeof a.status!="undefined"&&typeof a.update=="function"&&typeof a.swapCache=="function")};d.svg=function(){return!!e.createElementNS&&!!e.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect};d.smil=function(){return!!e.createElementNS&&/SVG/.test(M.call(e.createElementNS("http://www.w3.org/2000/svg","animate")))};d.svgclippaths=function(){return!!e.createElementNS&&/SVG/.test(M.call(e.createElementNS("http://www.w3.org/2000/svg",
+ "clipPath")))};for(var z in d)if(O(d,z))N.push(((j[z.toLowerCase()]=d[z]())?"":"no-")+z.toLowerCase());j[E]||P();j.addTest=function(a,b){a=a.toLowerCase();if(!j[a]){b=!!b();s.className+=" "+(b?"":"no-")+a;j[a]=b;return j}};m.cssText="";D=n=null;(function(){var a=e.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1})()&&function(a,b){function c(f,k){if(o[f])o[f].styleSheet.cssText+=k;else{var l=t[G],q=b[A]("style");q.media=f;l.insertBefore(q,l[G]);o[f]=q;c(f,k)}}function h(f,
+ k){for(var l=new RegExp("\\b("+w+")\\b(?!.*[;}])","gi"),q=function(B){return".iepp_"+B},x=-1;++x<f.length;){k=f[x].media||k;h(f[x].imports,k);c(k,f[x].cssText.replace(l,q))}}for(var t=b.documentElement,g=b.createDocumentFragment(),o={},w="abbr|article|aside|audio|canvas|command|datalist|details|figure|figcaption|footer|header|hgroup|keygen|mark|meter|nav|output|progress|section|source|summary|time|video",v=w.split("|"),p=[],H=-1,G="firstChild",A="createElement";++H<v.length;){b[A](v[H]);g[A](v[H])}g=
+ g.appendChild(b[A]("div"));a.attachEvent("onbeforeprint",function(){for(var f,k=b.getElementsByTagName("*"),l,q,x=new RegExp("^"+w+"$","i"),B=-1;++B<k.length;)if((f=k[B])&&(q=f.nodeName.match(x))){l=new RegExp("^\\s*<"+q+"(.*)\\/"+q+">\\s*$","i");g.innerHTML=f.outerHTML.replace(/\r|\n/g," ").replace(l,f.currentStyle.display=="block"?"<div$1/div>":"<span$1/span>");l=g.childNodes[0];l.className+=" iepp_"+q;l=p[p.length]=[f,l];f.parentNode.replaceChild(l[1],l[0])}h(b.styleSheets,"all")});a.attachEvent("onafterprint",
+ function(){for(var f=-1,k;++f<p.length;)p[f][1].parentNode.replaceChild(p[f][0],p[f][1]);for(k in o)t[G].removeChild(o[k]);o={};p=[]})}(this,e);j._enableHTML5=true;j._version="1.5";s.className=s.className.replace(/\bno-js\b/,"")+" js";s.className+=" "+N.join(" ");return j}(this,this.document); \ No newline at end of file
diff --git a/mod/html5/vendors/jquery/jquery.placeholder-1.0.1.js b/mod/html5/vendors/jquery/jquery.placeholder-1.0.1.js
new file mode 100644
index 000000000..61dfb87e6
--- /dev/null
+++ b/mod/html5/vendors/jquery/jquery.placeholder-1.0.1.js
@@ -0,0 +1,58 @@
+/**
+ * jQuery.placeholder - Placeholder plugin for input fields
+ * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
+ * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/).
+ * Date: 2008/10/14
+ *
+ * @author Blair Mitchelmore
+ * @version 1.0.1
+ *
+ **/
+new function($) {
+ $.fn.placeholder = function(settings) {
+ settings = settings || {};
+ var key = settings.dataKey || "placeholderValue";
+ var attr = settings.attr || "placeholder";
+ var className = settings.className || "placeholder";
+ var values = settings.values || [];
+ var block = settings.blockSubmit || false;
+ var blank = settings.blankSubmit || false;
+ var submit = settings.onSubmit || false;
+ var value = settings.value || "";
+ var position = settings.cursor_position || 0;
+
+
+ return this.filter(":input").each(function(index) {
+ $.data(this, key, values[index] || $(this).attr(attr));
+ }).each(function() {
+ if ($.trim($(this).val()) === "")
+ $(this).addClass(className).val($.data(this, key));
+ }).focus(function() {
+ if ($.trim($(this).val()) === $.data(this, key))
+ $(this).removeClass(className).val(value)
+ if ($.fn.setCursorPosition) {
+ $(this).setCursorPosition(position);
+ }
+ }).blur(function() {
+ if ($.trim($(this).val()) === value)
+ $(this).addClass(className).val($.data(this, key));
+ }).each(function(index, elem) {
+ if (block)
+ new function(e) {
+ $(e.form).submit(function() {
+ return $.trim($(e).val()) != $.data(e, key)
+ });
+ }(elem);
+ else if (blank)
+ new function(e) {
+ $(e.form).submit(function() {
+ if ($.trim($(e).val()) == $.data(e, key))
+ $(e).removeClass(className).val("");
+ return true;
+ });
+ }(elem);
+ else if (submit)
+ new function(e) { $(e.form).submit(submit); }(elem);
+ });
+ };
+}(jQuery);
diff --git a/mod/html5/views/default/html/img.php b/mod/html5/views/default/html/img.php
new file mode 100644
index 000000000..10fcbe0d1
--- /dev/null
+++ b/mod/html5/views/default/html/img.php
@@ -0,0 +1,11 @@
+<?php
+
+$defaults = array(
+ 'alt' => '',
+ 'title' => '',
+ 'border' => 0,
+);
+
+$attributes = elgg_format_attributes(array_merge($defaults, $vars));
+
+echo "<img $attributes />"; \ No newline at end of file
diff --git a/mod/html5/views/default/html5/css.php b/mod/html5/views/default/html5/css.php
new file mode 100644
index 000000000..eae9c7d13
--- /dev/null
+++ b/mod/html5/views/default/html5/css.php
@@ -0,0 +1,2 @@
+article, aside, details, figcaption, figure, footer, header, hgroup,
+menu, nav, section { display: block; }
diff --git a/mod/html5/views/default/html5/theme_preview/forms/inputs.php b/mod/html5/views/default/html5/theme_preview/forms/inputs.php
new file mode 100644
index 000000000..de38dc71c
--- /dev/null
+++ b/mod/html5/views/default/html5/theme_preview/forms/inputs.php
@@ -0,0 +1,101 @@
+<form action="#">
+ <fieldset>
+ <legend>HTML5 Inputs</legend>
+ <div>
+ <label for="color">Color input (.elgg-input-color):</label>
+ <?php echo elgg_view('input/color', array(
+ 'name' => 'color',
+ 'id' => 'color',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="datetime-local">Local datetime input (.elgg-input-datetime-local):</label>
+ <?php echo elgg_view('input/datetime-local', array(
+ 'name' => 'datetime-local',
+ 'id' => 'datetime-local',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="datetime">Datetime input (.elgg-input-datetime):</label><br />
+ <?php echo elgg_view('input/datetime', array(
+ 'name' => 'datetime',
+ 'id' => 'datetime',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="email">Email input (.elgg-input-email):</label><br />
+ <?php echo elgg_view('input/email', array(
+ 'name' => 'email',
+ 'id' => 'email',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="image">Image input (.elgg-input-image):</label><br />
+ <?php echo elgg_view('input/image', array(
+ 'name' => 'image',
+ 'id' => 'image',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="month">Month input (.elgg-input-month):</label><br />
+ <?php echo elgg_view('input/month', array(
+ 'name' => 'month',
+ 'id' => 'month',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="number">Number input (.elgg-input-number):</label>
+ <?php echo elgg_view('input/number', array(
+ 'name' => 'number',
+ 'id' => 'number',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="range">Range input (.elgg-input-range):</label>
+ <?php echo elgg_view('input/range', array(
+ 'name' => 'range',
+ 'id' => 'range',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="search">Tags input (.elgg-input-search):</label>
+ <?php echo elgg_view('input/search', array(
+ 'name' => 'search',
+ 'id' => 'search',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="tel">Telephone input (.elgg-input-tel):</label>
+ <?php echo elgg_view('input/tel', array(
+ 'name' => 'tel',
+ 'id' => 'tel',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="time">Time input (.elgg-input-time):</label>
+ <?php echo elgg_view('input/time', array(
+ 'name' => 'time',
+ 'id' => 'time',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="week">Week input (.elgg-input-week):</label>
+ <?php echo elgg_view('input/week', array(
+ 'name' => 'week',
+ 'id' => 'week',
+ ));
+ ?>
+ </div>
+ </fieldset>
+</form> \ No newline at end of file
diff --git a/mod/html5/views/default/input/color.php b/mod/html5/views/default/input/color.php
new file mode 100644
index 000000000..be8154fc9
--- /dev/null
+++ b/mod/html5/views/default/input/color.php
@@ -0,0 +1,12 @@
+<?php
+$defaults = array(
+ 'class' => 'elgg-input-color',
+);
+
+$vars = array_merge($defaults, $vars);
+
+$vars['type'] = 'color';
+
+?>
+
+<input <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/mod/html5/views/default/input/datetime-local.php b/mod/html5/views/default/input/datetime-local.php
new file mode 100644
index 000000000..468843901
--- /dev/null
+++ b/mod/html5/views/default/input/datetime-local.php
@@ -0,0 +1,14 @@
+<?php
+$defaults = array(
+ 'class' => 'elgg-input-datetime-local',
+);
+
+$vars = array_merge($defaults, $vars);
+
+if (isset($vars['value']) && is_int($vars['value'])) {
+ $vars['value'] = date("Y-m-d\TH:i:s", $vars['value']);
+}
+
+$vars['type'] = 'datetime-local';
+?>
+<input <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/mod/html5/views/default/input/datetime.php b/mod/html5/views/default/input/datetime.php
new file mode 100644
index 000000000..69e4bd7f7
--- /dev/null
+++ b/mod/html5/views/default/input/datetime.php
@@ -0,0 +1,15 @@
+<?php
+$defaults = array(
+ 'class' => 'elgg-input-datetime',
+);
+
+$vars = array_merge($defaults, $vars);
+
+if (isset($vars['value']) && is_int($vars['value'])) {
+ $vars['value'] = date("c", $vars['value']);
+}
+
+$vars['type'] = 'datetime';
+
+?>
+<input <?php echo elgg_format_attributes($vars); ?> />
diff --git a/mod/html5/views/default/input/image.php b/mod/html5/views/default/input/image.php
new file mode 100644
index 000000000..cf740f782
--- /dev/null
+++ b/mod/html5/views/default/input/image.php
@@ -0,0 +1,11 @@
+<?php
+$defaults = array(
+ 'class' => 'elgg-input-image',
+);
+
+$vars = array_merge($defaults, $vars);
+
+$vars['type'] = 'image';
+
+?>
+<input <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/mod/html5/views/default/input/month.php b/mod/html5/views/default/input/month.php
new file mode 100644
index 000000000..c99b3f34c
--- /dev/null
+++ b/mod/html5/views/default/input/month.php
@@ -0,0 +1,16 @@
+<?php
+$defaults = array(
+ 'class' => 'elgg-input-month',
+);
+
+$vars = array_merge($defaults, $vars);
+
+if (isset($vars['value']) && is_int($vars['value'])) {
+ $vars['value'] = date("Y-m", $vars['value']);
+}
+
+$vars['type'] = 'month';
+
+?>
+
+<input <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/mod/html5/views/default/input/number.php b/mod/html5/views/default/input/number.php
new file mode 100644
index 000000000..ec4938734
--- /dev/null
+++ b/mod/html5/views/default/input/number.php
@@ -0,0 +1,11 @@
+<?php
+$defaults = array(
+ 'class' => 'elgg-input-number',
+);
+
+$vars = array_merge($defaults, $vars);
+
+$vars['type'] = 'number';
+
+?>
+<input <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/mod/html5/views/default/input/option.php b/mod/html5/views/default/input/option.php
new file mode 100644
index 000000000..05d5d649f
--- /dev/null
+++ b/mod/html5/views/default/input/option.php
@@ -0,0 +1,13 @@
+<?php
+
+$text = $vars['text'];
+
+if (!isset($text)) {
+ $text = $vars['value'];
+ unset($vars['value']);
+}
+
+$text = htmlentities($text, ENT_QUOTES, 'UTF-8');
+$attributes = elgg_format_attributes($vars);
+
+echo "<option $attributes>$text</option>"; \ No newline at end of file
diff --git a/mod/html5/views/default/input/range.php b/mod/html5/views/default/input/range.php
new file mode 100644
index 000000000..235687257
--- /dev/null
+++ b/mod/html5/views/default/input/range.php
@@ -0,0 +1,13 @@
+<?php
+
+$defaults = array(
+ 'class' => 'elgg-input-range',
+);
+
+$vars = array_merge($defaults, $vars);
+
+$vars['type'] = 'range';
+
+?>
+
+<input <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/mod/html5/views/default/input/search.php b/mod/html5/views/default/input/search.php
new file mode 100644
index 000000000..becf8a11b
--- /dev/null
+++ b/mod/html5/views/default/input/search.php
@@ -0,0 +1,13 @@
+<?php
+
+$defaults = array(
+ 'class' => 'elgg-input-search',
+);
+
+$vars = array_merge($defaults, $vars);
+
+$vars['type'] = 'search';
+
+?>
+
+<input <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/mod/html5/views/default/input/tel.php b/mod/html5/views/default/input/tel.php
new file mode 100644
index 000000000..0704344a8
--- /dev/null
+++ b/mod/html5/views/default/input/tel.php
@@ -0,0 +1,12 @@
+<?php
+$defaults = array(
+ 'class' => 'elgg-input-tel',
+);
+
+$vars = array_merge($defaults, $vars);
+
+$vars['type'] = 'tel';
+
+?>
+
+<input <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/mod/html5/views/default/input/time.php b/mod/html5/views/default/input/time.php
new file mode 100644
index 000000000..6bb557266
--- /dev/null
+++ b/mod/html5/views/default/input/time.php
@@ -0,0 +1,13 @@
+<?php
+
+$defaults = array(
+ 'class' => 'elgg-input-time',
+);
+
+$vars = array_merge($defaults, $vars);
+
+$vars['type'] = 'time';
+
+?>
+
+<input <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/mod/html5/views/default/input/week.php b/mod/html5/views/default/input/week.php
new file mode 100644
index 000000000..3d09ba07f
--- /dev/null
+++ b/mod/html5/views/default/input/week.php
@@ -0,0 +1,13 @@
+<?php
+
+$defaults = array(
+ 'class' => 'elgg-input-week',
+);
+
+$vars = array_merge($defaults, $vars);
+
+$vars['type'] = 'week';
+
+?>
+
+<input <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/mod/html5/views/default/output/friendlytime.php b/mod/html5/views/default/output/friendlytime.php
new file mode 100644
index 000000000..dc9699fba
--- /dev/null
+++ b/mod/html5/views/default/output/friendlytime.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Friendly time
+ * Translates an epoch time into a human-readable time.
+ *
+ * @uses string $vars['time'] Unix-style epoch timestamp
+ * @override views/default/output/friendlytime.php
+ */
+
+$friendly_time = elgg_get_friendly_time($vars['time']);
+$timestamp = htmlentities(date(elgg_echo('friendlytime:date_format'), $vars['time']));
+$datetime = htmlentities(date("c", $vars['time']));
+
+echo "<time title=\"$timestamp\" datetime=\"$datetime\" class=\"timestamp\">$friendly_time</time>";
diff --git a/mod/html5/views/default/page/admin.php b/mod/html5/views/default/page/admin.php
new file mode 100644
index 000000000..e1180e851
--- /dev/null
+++ b/mod/html5/views/default/page/admin.php
@@ -0,0 +1,68 @@
+<?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()
+ *
+ * @override views/default/page/admin.php
+ */
+
+$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>
+<html lang="<?php echo get_current_language(); ?>">
+<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>
diff --git a/mod/html5/views/default/page/default.php b/mod/html5/views/default/page/default.php
new file mode 100644
index 000000000..4ff2215da
--- /dev/null
+++ b/mod/html5/views/default/page/default.php
@@ -0,0 +1,78 @@
+<?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()
+ *
+ * @override views/default/page/default.php
+ */
+
+// 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>
+<html 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()){ ?>
+ <header class="elgg-page-topbar">
+ <div class="elgg-inner">
+ <?php echo $topbar; ?>
+ </div>
+ </header>
+ <?php } ?>
+
+ <header class="elgg-page-header">
+ <div class="elgg-inner">
+ <?php echo $header; ?>
+ </div>
+ </header>
+ <div class="elgg-page-body">
+ <div class="elgg-inner">
+ <?php echo $body; ?>
+ </div>
+ </div>
+ <footer class="elgg-page-footer">
+ <div class="elgg-inner">
+ <?php echo $footer; ?>
+ </div>
+ </footer>
+</div>
+<?php echo elgg_view('page/elements/foot'); ?>
+</body>
+</html>
diff --git a/mod/html5/views/default/page/elements/footer.php b/mod/html5/views/default/page/elements/footer.php
new file mode 100644
index 000000000..c0da2f370
--- /dev/null
+++ b/mod/html5/views/default/page/elements/footer.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Elgg footer
+ * The standard HTML footer that displays across the site
+ *
+ * @package Elgg
+ * @subpackage Core
+ * @override views/default/page/elements/footer.php
+ *
+ */
+
+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 '<footer 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 '</footer>';
diff --git a/mod/html5/views/default/page/elements/head.php b/mod/html5/views/default/page/elements/head.php
new file mode 100644
index 000000000..47254934e
--- /dev/null
+++ b/mod/html5/views/default/page/elements/head.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * The standard HTML head
+ *
+ * @uses $vars['title'] The page title
+ * @override views/default/page/elements/head.php
+ */
+
+// 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();
+
+$release = get_version(true);
+?>
+ <meta charset="utf-8" />
+ <meta name="generator" content="Elgg <?php echo $release; ?>" />
+ <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">
+ <?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/mod/html5/views/default/page/layouts/admin.php b/mod/html5/views/default/page/layouts/admin.php
new file mode 100644
index 000000000..683ba3468
--- /dev/null
+++ b/mod/html5/views/default/page/layouts/admin.php
@@ -0,0 +1,42 @@
+<?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
+ *
+ * @override views/default/page/layouts/admin.php
+ */
+
+?>
+
+<div class="elgg-layout elgg-layout-one-sidebar">
+ <aside class="elgg-sidebar clearfix">
+ <?php
+ echo elgg_view('admin/sidebar', $vars);
+ ?>
+ </aside>
+ <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/mod/html5/views/default/page/layouts/one_sidebar.php b/mod/html5/views/default/page/layouts/one_sidebar.php
new file mode 100644
index 000000000..e5e063b51
--- /dev/null
+++ b/mod/html5/views/default/page/layouts/one_sidebar.php
@@ -0,0 +1,50 @@
+<?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)
+ *
+ * @override views/default/page/layouts/one_sidebar.php
+ */
+
+$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; ?>">
+ <aside class="elgg-sidebar">
+ <?php
+ echo elgg_view('page/elements/sidebar', $vars);
+ ?>
+ </aside>
+
+ <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/mod/html5/views/default/page/layouts/two_sidebar.php b/mod/html5/views/default/page/layouts/two_sidebar.php
new file mode 100644
index 000000000..929547424
--- /dev/null
+++ b/mod/html5/views/default/page/layouts/two_sidebar.php
@@ -0,0 +1,45 @@
+<?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
+ *
+ * @override views/default/page/layouts/two_sidebar.php
+ */
+
+$class = 'elgg-layout elgg-layout-two-sidebar clearfix';
+if (isset($vars['class'])) {
+ $class = "$class {$vars['class']}";
+}
+?>
+
+<div class="<?php echo $class; ?>">
+ <aside class="elgg-sidebar">
+ <?php
+ echo elgg_view('page/elements/sidebar', $vars);
+ ?>
+ </aside>
+ <aside class="elgg-sidebar-alt">
+ <?php
+ echo elgg_view('page/elements/sidebar_alt', $vars);
+ ?>
+ </aside>
+
+ <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/mod/html5/views/default/page/walled_garden.php b/mod/html5/views/default/page/walled_garden.php
new file mode 100644
index 000000000..c12a7203d
--- /dev/null
+++ b/mod/html5/views/default/page/walled_garden.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Walled garden page shell
+ *
+ * Used for the walled garden index page
+ *
+ * @override views/default/page/walled_garden.php
+ */
+
+$is_sticky_register = elgg_is_sticky_form('register');
+$wg_body_class = 'elgg-body-walledgarden';
+if ($is_sticky_register) {
+ $wg_body_class .= ' hidden';
+}
+
+// Set the content type
+header("Content-type: text/html; charset=UTF-8");
+?>
+<!DOCTYPE html>
+<html lang="<?php echo get_current_language(); ?>">
+<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="<?php echo $wg_body_class; ?>">
+ <?php echo $vars['body']; ?>
+ </div>
+</div>
+<?php if ($is_sticky_register): ?>
+<script type="text/javascript">
+elgg.register_hook_handler('init', 'system', function() {
+ $('.registration_link').trigger('click');
+});
+</script>
+<?php endif; ?>
+<?php echo elgg_view('page/elements/foot'); ?>
+</body>
+</html>
diff --git a/mod/html5/views/default/search/search_box.php b/mod/html5/views/default/search/search_box.php
new file mode 100644
index 000000000..2abc47ca3
--- /dev/null
+++ b/mod/html5/views/default/search/search_box.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Search box
+ *
+ * @uses $vars['value'] Current search query
+ * @uses $vars['class'] Additional class
+ *
+ * @override mod/search/views/default/search/search_box.php
+ */
+
+if (array_key_exists('value', $vars)) {
+ $value = $vars['value'];
+} elseif ($value = get_input('q', get_input('tag', NULL))) {
+ $value = $value;
+}
+
+$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="search" class="search-input" size="21" name="q" value="<?php echo $display_query; ?>" placeholder="<?php echo elgg_echo('search'); ?>" />
+ <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/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..25a70a4aa
--- /dev/null
+++ b/mod/htmlawed/start.php
@@ -0,0 +1,163 @@
+<?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) {
+ $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..05fe829f4
--- /dev/null
+++ b/mod/htmlawed/tests/tags.php
@@ -0,0 +1,47 @@
+<?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() {
+ // 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..63f8c4162
--- /dev/null
+++ b/mod/htmlawed/vendors/htmLawed/htmLawed.php
@@ -0,0 +1,723 @@
+<?php
+
+/*
+htmLawed 1.1.16, 29 August 2013
+Copyright Santosh Patnaik
+Dual licensed with LGPL 3 and GPL 2+
+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(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);}
+ }
+ // get markup
+ if(!preg_match('`^(/?)([a-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('`^([^:?[@!$()*,=/\'\]]+?)(:|&#(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])) && (isset($aN[$k][$e]) or (isset($aNU[$k]) && !isset($aNU[$k][$e]))) && !isset($rl['n'][$k]) && !isset($rl['n']['*'])) or isset($rl[$k])){
+ 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 = preg_replace('`\s+`', ' ', 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, 'param'=>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, 'tbody'=>1, 'tfoot'=>1, 'thead'=>1, 'tr'=>1, 'ul'=>1);
+$T = explode('<', $t);
+$X = 1;
+while($X){
+ $n = $N;
+ $t = $T;
+ ob_start();
+ if(isset($d[$p])){echo str_repeat($s, ++$n);}
+ 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){
+ if($n){echo "\n", str_repeat($s, --$n), "$e\n", str_repeat($s, $n);}
+ else{++$N; ob_end_clean(); continue 2;}
+ }
+ else{echo "\n", str_repeat($s, $n), "$e\n", str_repeat($s, ($x != 1 ? ++$n : $n));}
+ echo $r; continue;
+ }
+ $f = "\n". str_repeat($s, $n);
+ if(isset($c[$y])){
+ if(!$x){echo $e, $f, $r;}
+ else{echo $f, $e, $r;}
+ }elseif(isset($b[$y])){echo $f, $e, $r;
+ }elseif(isset($a[$y])){echo $e, $f, $r;
+ }elseif(!$y){echo $f, $e, $f, $r;
+ }else{echo $e, $r;}
+ }
+ $X = 0;
+}
+$t = str_replace(array("\n ", " \n"), "\n", 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.16';
+// 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..3a5b92155
--- /dev/null
+++ b/mod/htmlawed/vendors/htmLawed/htmLawedTest.php
@@ -0,0 +1,650 @@
+<?php
+
+/*
+htmLawedTest.php, 28 May 2013
+htmLawed 1.1.16, 29 August 2013
+Copyright Santosh Patnaik
+Dual licensed with LGPL 3 and GPL 2+
+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 : 0));
+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, #diff{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, #diff, 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;}
+#diff{overflow:auto; background-color: white; border:1px #dcdcdc 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;
+ 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); ?>') + '" /></p>';
+ f.action = 'htmLawedTest.php?pre=1';
+ f.target = 'hlprehtm';
+ f.method = 'post';
+ var t = document.createElement('textarea');
+ t.name = 'inputH';
+ t.value = i;
+ f.appendChild(t);
+ 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;
+ 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="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 t = document.createElement('textarea');
+ t.name = 'fragment';
+ t.value = i;
+ f.appendChild(t);
+ 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);
+// Diff Match and Patch javascript code by Neil Fraser; Apache license 2.0; http://code.google.com/p/google-diff-match-patch/
+(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=0.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=0.5;this.Patch_Margin=4;this.Match_MaxBits=32}
+diff_match_patch.prototype.diff_main=function(a,b,c,d){"undefined"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error("Null input. (diff_main)");if(a==b)return a?[[0,a]]:[];"undefined"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b),c=a.substring(0,f),a=a.substring(f),b=b.substring(f),f=this.diff_commonSuffix(a,b),g=a.substring(a.length-f),a=a.substring(0,a.length-f),b=b.substring(0,b.length-f),a=this.diff_compute_(a,
+b,e,d);c&&a.unshift([0,c]);g&&a.push([0,g]);this.diff_cleanupMerge(a);return a};
+diff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[1,b]];if(!b)return[[-1,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);if(-1!=g)return c=[[1,e.substring(0,g)],[0,f],[1,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=-1),c;if(1==f.length)return[[-1,a],[1,b]];return(e=this.diff_halfMatch_(a,b))?(f=e[0],a=e[1],g=e[2],b=e[3],e=e[4],f=this.diff_main(f,g,c,d),c=this.diff_main(a,b,c,d),f.concat([[0,e]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,
+b,d):this.diff_bisect_(a,b,d)};
+diff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b),a=d.chars1,b=d.chars2,d=d.lineArray,a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([0,""]);for(var e=d=b=0,f="",g="";b<a.length;){switch(a[b][0]){case 1:e++;g+=a[b][1];break;case -1:d++;f+=a[b][1];break;case 0:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=d.length}d=e=0;g=f=""}b++}a.pop();return a};
+diff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=f,h=2*f,j=Array(h),i=Array(h),k=0;k<h;k++)j[k]=-1,i[k]=-1;j[g+1]=0;i[g+1]=0;for(var k=d-e,p=0!=k%2,q=0,s=0,o=0,v=0,u=0;u<f&&!((new Date).getTime()>c);u++){for(var n=-u+q;n<=u-s;n+=2){var l=g+n,m;m=n==-u||n!=u&&j[l-1]<j[l+1]?j[l+1]:j[l-1]+1;for(var r=m-n;m<d&&r<e&&a.charAt(m)==b.charAt(r);)m++,r++;j[l]=m;if(m>d)s+=2;else if(r>e)q+=2;else if(p&&(l=g+k-n,0<=l&&l<h&&-1!=i[l])){var t=d-i[l];if(m>=
+t)return this.diff_bisectSplit_(a,b,m,r,c)}}for(n=-u+o;n<=u-v;n+=2){l=g+n;t=n==-u||n!=u&&i[l-1]<i[l+1]?i[l+1]:i[l-1]+1;for(m=t-n;t<d&&m<e&&a.charAt(d-t-1)==b.charAt(e-m-1);)t++,m++;i[l]=t;if(t>d)v+=2;else if(m>e)o+=2;else if(!p&&(l=g+k-n,0<=l&&l<h&&-1!=j[l]&&(m=j[l],r=g+m-l,t=d-t,m>=t)))return this.diff_bisectSplit_(a,b,m,r,c)}}return[[-1,a],[1,b]]};
+diff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d),a=a.substring(c),b=b.substring(d),f=this.diff_main(f,g,!1,e),e=this.diff_main(a,b,!1,e);return f.concat(e)};
+diff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b="",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf("\n",c);-1==f&&(f=a.length-1);var q=a.substring(c,f+1),c=f+1;(e.hasOwnProperty?e.hasOwnProperty(q):void 0!==e[q])?b+=String.fromCharCode(e[q]):(b+=String.fromCharCode(g),e[q]=g,d[g++]=q)}return b}var d=[],e={};d[0]="";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};
+diff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join("")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};
+diff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};
+diff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;for(var d=0,e=1;;){var f=a.substring(c-e),f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};
+diff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g="",h,j,n,l;-1!=(e=b.indexOf(d,e+1));){var m=f.diff_commonPrefix(a.substring(c),b.substring(e)),r=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<r+m&&(g=b.substring(e-r,e)+b.substring(e,e+m),h=a.substring(0,c-r),j=a.substring(c+m),n=b.substring(0,e-r),l=b.substring(e+m))}return 2*g.length>=a.length?[h,j,n,l,g]:null}if(0>=this.Diff_Timeout)return null;
+var d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4)),d=c(d,e,Math.ceil(d.length/2)),h;if(!g&&!d)return null;h=d?g?g[4].length>d[4].length?g:d:d:g;var j;a.length>b.length?(g=h[0],d=h[1],e=h[2],j=h[3]):(e=h[0],j=h[1],g=h[2],d=h[3]);h=h[4];return[g,d,e,j,h]};
+diff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,j=0,i=0;f<a.length;)0==a[f][0]?(c[d++]=f,g=j,h=i,i=j=0,e=a[f][1]):(1==a[f][0]?j+=a[f][1].length:i+=a[f][1].length,e&&e.length<=Math.max(g,h)&&e.length<=Math.max(j,i)&&(a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,d--,f=0<d?c[d-1]:-1,i=j=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(-1==a[f-1][0]&&1==a[f][0]){b=a[f-1][1];c=a[f][1];
+d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[0,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[0,b.substring(0,e)]),a[f-1][0]=1,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=-1,a[f+1][1]=b.substring(e),f++;f++}f++}};
+diff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_),c=g&&c.match(diff_match_patch.linebreakRegex_),d=h&&d.match(diff_match_patch.linebreakRegex_),i=c&&a.match(diff_match_patch.blanklineEndRegex_),j=d&&b.match(diff_match_patch.blanklineStartRegex_);
+return i||j?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(0==a[c-1][0]&&0==a[c+1][0]){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g)var h=e.substring(e.length-g),d=d.substring(0,d.length-g),e=h+e.substring(0,e.length-g),f=h+f;for(var g=d,h=e,j=f,i=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){var d=d+e.charAt(0),e=e.substring(1)+f.charAt(0),f=f.substring(1),k=b(d,e)+b(e,f);k>=i&&(i=k,g=d,h=e,j=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-1,1),c--),a[c][1]=
+h,j?a[c+1][1]=j:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\s/;diff_match_patch.linebreakRegex_=/[\r\n]/;diff_match_patch.blanklineEndRegex_=/\n\r?\n$/;diff_match_patch.blanklineStartRegex_=/^\r?\n\r?\n/;
+diff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,j=!1,i=!1;f<a.length;){if(0==a[f][0])a[f][1].length<this.Diff_EditCost&&(j||i)?(c[d++]=f,g=j,h=i,e=a[f][1]):(d=0,e=null),j=i=!1;else if(-1==a[f][0]?i=!0:j=!0,e&&(g&&h&&j&&i||e.length<this.Diff_EditCost/2&&3==g+h+j+i))a.splice(c[d-1],0,[-1,e]),a[c[d-1]+1][0]=1,d--,e=null,g&&h?(j=i=!0,d=0):(d--,f=0<d?c[d-1]:-1,j=i=!1),b=!0;f++}b&&this.diff_cleanupMerge(a)};
+diff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([0,""]);for(var b=0,c=0,d=0,e="",f="",g;b<a.length;)switch(a[b][0]){case 1:d++;f+=a[b][1];b++;break;case -1:c++;e+=a[b][1];b++;break;case 0:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&0==a[b-c-d-1][0]?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[0,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-g)+a[b][1],f=f.substring(0,f.length-
+g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[1,f]):0===d?a.splice(b-c,c+d,[-1,e]):a.splice(b-c-d,c+d,[-1,e],[1,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&0==a[b-1][0]?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=""}""===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)0==a[b-1][0]&&0==a[b+1][0]&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,a[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,
+a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};diff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){1!==a[g][0]&&(c+=a[g][1].length);-1!==a[g][0]&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&-1===a[g][0]?f:f+(b-e)};
+diff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\n/g,g=0;g<a.length;g++){var h=a[g][0],j=a[g][1],j=j.replace(c,"&amp;").replace(d,"&lt;").replace(e,"&gt;").replace(f,"<span style=\"color: #dcdcdc;\">&not;</span><br>");switch(h){case 1:b[g]='<ins style="background:#ccffcc; text-decoration: none;">'+j+"</ins>";break;case -1:b[g]='<del style="background:#ffffcc; text-decoration: line-through; color: orange;">'+j+"</del>";break;case 0:b[g]="<span>"+j+"</span>"}}return b.join("")};
+diff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)-1!==a[c][0]&&(b[c]=a[c][1]);return b.join("")};diff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][0],g=a[e][1];switch(f){case 1:c+=g.length;break;case -1:d+=g.length;break;case 0:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};
+diff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case 1:b[c]="+"+encodeURI(a[c][1]);break;case -1:b[c]="-"+a[c][1].length;break;case 0:b[c]="="+a[c][1].length}return b.join("\t").replace(/%20/g," ")};
+diff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case "+":try{c[d++]=[1,decodeURI(h)]}catch(j){throw Error("Illegal escape in diff_fromDelta: "+h);}break;case "-":case "=":var i=parseInt(h,10);if(isNaN(i)||0>i)throw Error("Invalid number in diff_fromDelta: "+h);h=a.substring(e,e+=i);"="==f[g].charAt(0)?c[d++]=[0,h]:c[d++]=[-1,h];break;default:if(f[g])throw Error("Invalid diff operation in diff_fromDelta: "+
+f[g]);}}if(e!=a.length)throw Error("Delta length ("+e+") does not equal source text length ("+a.length+").");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error("Null input. (match_main)");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};
+diff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return!f.Match_Distance?g?1:e:e+g/f.Match_Distance}if(b.length>this.Match_MaxBits)throw Error("Pattern too long for this browser.");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));for(var j=1<<b.length-1,h=-1,i,k,p=b.length+a.length,q,s=0;s<b.length;s++){i=0;for(k=p;i<k;)d(s,c+
+k)<=g?i=k:p=k,k=Math.floor((p-i)/2+i);p=k;i=Math.max(1,c-k+1);var o=Math.min(c+k,a.length)+b.length;k=Array(o+2);for(k[o+1]=(1<<s)-1;o>=i;o--){var v=e[a.charAt(o-1)];k[o]=0===s?(k[o+1]<<1|1)&v:(k[o+1]<<1|1)&v|(q[o+1]|q[o])<<1|1|q[o+1];if(k[o]&j&&(v=d(s,o-1),v<=g))if(g=v,h=o-1,h>c)i=Math.max(1,2*c-h);else break}if(d(s+1,c)>g)break;q=k}return h};
+diff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};
+diff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([0,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([0,d]);a.start1-=c.length;a.start2-=c.length;a.length1+=
+c.length+d.length;a.length2+=c.length+d.length}};
+diff_match_patch.prototype.patch_make=function(a,b,c){var d;if("string"==typeof a&&"string"==typeof b&&"undefined"==typeof c)d=a,b=this.diff_main(d,b,!0),2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b));else if(a&&"object"==typeof a&&"undefined"==typeof b&&"undefined"==typeof c)b=a,d=this.diff_text1(b);else if("string"==typeof a&&b&&"object"==typeof b&&"undefined"==typeof c)d=a;else if("string"==typeof a&&"string"==typeof b&&c&&"object"==typeof c)d=a,b=c;else throw Error("Unknown call format to patch_make.");
+if(0===b.length)return[];for(var c=[],a=new diff_match_patch.patch_obj,e=0,f=0,g=0,h=d,j=0;j<b.length;j++){var i=b[j][0],k=b[j][1];if(!e&&0!==i)a.start1=f,a.start2=g;switch(i){case 1:a.diffs[e++]=b[j];a.length2+=k.length;d=d.substring(0,g)+k+d.substring(g);break;case -1:a.length1+=k.length;a.diffs[e++]=b[j];d=d.substring(0,g)+d.substring(g+k.length);break;case 0:k.length<=2*this.Patch_Margin&&e&&b.length!=j+1?(a.diffs[e++]=b[j],a.length1+=k.length,a.length2+=k.length):k.length>=2*this.Patch_Margin&&
+e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}1!==i&&(f+=k.length);-1!==i&&(g+=k.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};diff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};
+diff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];var a=this.patch_deepCopy(a),c=this.patch_addPadding(a),b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),j,i=-1;if(h.length>this.Match_MaxBits){if(j=this.match_main(b,h.substring(0,this.Match_MaxBits),g),-1!=j&&(i=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==i||j>=i))j=-1}else j=this.match_main(b,h,g);
+if(-1==j)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=j-g,g=-1==i?b.substring(j,j+h.length):b.substring(j,i+this.Match_MaxBits),h==g)b=b.substring(0,j)+this.diff_text2(a[f].diffs)+b.substring(j+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);for(var h=0,k,i=0;i<a[f].diffs.length;i++){var p=a[f].diffs[i];0!==p[0]&&(k=this.diff_xIndex(g,h));1===p[0]?b=b.substring(0,
+j+k)+p[1]+b.substring(j+k):-1===p[0]&&(b=b.substring(0,j+k)+b.substring(j+this.diff_xIndex(g,h+p[1].length)));-1!==p[0]&&(h+=p[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};
+diff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c="",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;var d=a[0],e=d.diffs;if(0==e.length||0!=e[0][0])e.unshift([0,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||0!=e[e.length-1][0]?(e.push([0,
+c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};
+diff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g="";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,j=!0;h.start1=e-g.length;h.start2=f-g.length;if(""!==g)h.length1=h.length2=g.length,h.diffs.push([0,g]);for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){var g=d.diffs[0][0],i=d.diffs[0][1];1===g?(h.length2+=i.length,f+=i.length,h.diffs.push(d.diffs.shift()),
+j=!1):-1===g&&1==h.diffs.length&&0==h.diffs[0][0]&&i.length>2*b?(h.length1+=i.length,e+=i.length,j=!1,h.diffs.push([g,i]),d.diffs.shift()):(i=i.substring(0,b-h.length1-this.Patch_Margin),h.length1+=i.length,e+=i.length,0===g?(h.length2+=i.length,f+=i.length):j=!1,h.diffs.push([g,i]),i==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(i.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);i=this.diff_text1(d.diffs).substring(0,this.Patch_Margin);""!==i&&
+(h.length1+=i.length,h.length2+=i.length,0!==h.diffs.length&&0===h.diffs[h.diffs.length-1][0]?h.diffs[h.diffs.length-1][1]+=i:h.diffs.push([0,i]));j||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join("")};
+diff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;for(var a=a.split("\n"),c=0,d=/^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error("Invalid patch string: "+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);""===e[2]?(f.start1--,f.length1=1):"0"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);""===e[4]?(f.start2--,f.length2=1):"0"==e[4]?f.length2=0:(f.start2--,f.length2=
+parseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error("Illegal escape in patch_fromText: "+g);}if("-"==e)f.diffs.push([-1,g]);else if("+"==e)f.diffs.push([1,g]);else if(" "==e)f.diffs.push([0,g]);else if("@"==e)break;else if(""!==e)throw Error('Invalid patch mode "'+e+'" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};
+diff_match_patch.patch_obj.prototype.toString=function(){var a,b;a=0===this.length1?this.start1+",0":1==this.length1?this.start1+1:this.start1+1+","+this.length1;b=0===this.length2?this.start2+",0":1==this.length2?this.start2+1:this.start2+1+","+this.length2;a=["@@ -"+a+" +"+b+" @@\n"];var c;for(b=0;b<this.diffs.length;b++){switch(this.diffs[b][0]){case 1:c="+";break;case -1:c="-";break;case 0:c=" "}a[b+1]=c+encodeURI(this.diffs[b][1])+"\n"}return a.join("").replace(/%20/g," ")};
+this.diff_match_patch=diff_match_patch;this.DIFF_DELETE=-1;this.DIFF_INSERT=1;this.DIFF_EQUAL=0;})()
+var dmp = new diff_match_patch(); function diffLaunch(){var text1 = document.getElementById('text').value; var text2 = document.getElementById('text2').value; dmp.Diff_Timeout = 0; dmp.Diff_EditCost = 4; var d = dmp.diff_main(text1, text2); var ds = dmp.diff_prettyHtml(d); document.getElementById('diff').innerHTML = ds;
+}
+//--><!]]></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;">$config: ', str_replace(array(' ', "\t", ' '), array(' ', '&nbsp; ', '&nbsp; '), nl2br(htmlspecialchars(print_r($GLOBALS['hlcfg']['config'], true)))), '<br />$spec: ', str_replace(array(' ', "\t", ' '), array(' ', '&nbsp; ', '&nbsp; '), nl2br(htmlspecialchars(print_r($GLOBALS['hlcfg']['spec'], 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]) ? ' <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>' : ''), ' <a href="htmLawedTest.php" title="[toggle visibility] inline output-input diff; might not be perfectly accurate, semantically or otherwise " onclick="javascript:toggle(\'diff\'); diffLaunch(); return false;"><span class="notice">Diff &raquo;</span></a> <div id="diff" style="display: none;"></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 100755
index 000000000..819b39e06
--- /dev/null
+++ b/mod/htmlawed/vendors/htmLawed/htmLawed_README.htm
@@ -0,0 +1,2178 @@
+<!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, 29 August 2013<br />
+htmLawed 1.1.16, 29 August 2013<br />
+Copyright Santosh Patnaik<br />
+Dual licensed with LGPL 3 and GPL 2+<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 PHP script to process text with HTML markup to make it more compliant with HTML standards and administrative policies. It works by making HTML well-formed with balanced and properly nested tags, neutralizing code that may be used for cross-site scripting (XSS) attacks, allowing only specified HTML tags and attributes, and so on. Such <em>lawing in</em>&#160;of HTML in text used in (X)HTML or XML documents ensures that it is in accordance with the aesthetics, safety and usability requirements set by administrators.<br />
+<br />
+&#160; htmLawed is highly customizable, and fast with low memory usage. Its free and open-source code is in one small file, does not require extensions or libraries, and works in older versions of PHP as well. It is a good alternative to the HTML <a href="http://tidy.sourceforge.net">Tidy</a>&#160;application.<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;can <strong>restrict elements</strong>&#160; ^~`<br />
+&#160; * &#160;ensures 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>transforms 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 />
+&#160; * &#160;permit custom, non-standard attributes as well as custom rules for standard attributes &#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 created in 2007 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 an extension or external application like <span class="term">HTML Tidy</span>. The core logic of htmLawed, that of identifying HTML elements and attributes, was based on the <span class="term">Kses</span>&#160;(version 0.2.2) HTML filter software of Ulf Harnhammar (it can still be used with code that uses <span class="term">Kses</span>; see <a href="#s2.6">section 2.6</a>.).<br />
+<br />
+&#160; See <a href="#s4.3">section 4.3</a>&#160;for a detailed log of changes in htmLawed over the years, and <a href="#s4.10">section 4.10</a>&#160;for acknowledgements.<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 copyrighted by Santosh Patnaik, MD, PhD, and licensed under LGPL license version <a href="http://www.gnu.org/licenses/lgpl-3.0.txt">3</a>, and GPL license version <a href="http://www.gnu.org/licenses/gpl-2.0.txt">2</a>&#160;(or later).<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; In this document, only HTML body-level elements are considered. htmLawed does not have support for head-level elements, <span class="term">body</span>, and the frame-level elements, <span class="term">frameset</span>, <span class="term">frame</span>&#160;and <span class="term">noframes</span>, and these elements are ignored here.<br />
+<br />
+&#160; * &#160;<em>administrator</em>&#160;- or admin; person setting up the code that utilizes 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;- see <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 the <span class="term">&lt;a href="x"&gt;click&lt;/a&gt;</span>&#160;element<br />
+&#160; * &#160;<em>HTML</em>&#160;- implies XHTML unless specified otherwise<br />
+&#160; * &#160;<em>HTML body</em>&#160;- Complete HTML documents typically have a <em>head</em>&#160;and a <em>body</em>&#160;container. Information in <em>head</em>&#160;specifies title of the document, etc., whereas that in the body informs what is to be displayed on a web-page; it is only the elements for <em>body</em>, except <span class="term">frames</span>, <span class="term">frameset</span>&#160;and <span class="term">noframes</span>&#160;that htmLawed is concerned with<br />
+&#160; * &#160;<em>input</em>&#160;- text 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 HTML of text that can otherwise potentially, and circumstantially, expose text readers to security vulnerabilities like cross-site scripting attacks (XSS)<br />
+&#160; * &#160;<em>scheme</em>&#160;- a URL protocol like <span class="term">http</span>&#160;and <span class="term">ftp</span><br />
+&#160; * &#160;<em>specifications</em>&#160;- standard specifications, for HTML4, HTML5, Ruby, etc.<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 class="sub-section"><h3>
+<a name="s1.6" id="s1.6"></a><span class="item-no">1.6</span>&#160; Availability
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed can be downloaded for free at its <a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed">website</a>. Besides the <span class="term">htmLawed.php</span>&#160;file, the download has the htmLawed documentation (this document) in plain <a href="htmLawed_README.txt">text</a>&#160;and <a href="htmLawed_README.htm">HTML</a>&#160;formats, a script for <a href="htmLawedTest.php">testing</a>, and a text file for <a href="htmLawed_TESTCASE.txt">test-cases</a>. htmLawed is also available as a PHP class (OOP code) on its website.<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 works in PHP version 4.4 or higher. Either <span class="term">include()</span>&#160;the <span class="term">htmLawed.php</span>&#160;file, or copy-paste the entire code. To use with PHP 4.3, have the following code included:<br />
+<br />
+
+<code class="code">&#160; &#160; if(!function_exists(&#39;ctype_digit&#39;)){</code>
+<br />
+
+<code class="code">&#160; &#160; &#160;function ctype_digit($var){</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; return ((int) $var == $var);</code>
+<br />
+
+<code class="code">&#160; &#160; &#160;}</code>
+<br />
+
+<code class="code">&#160; &#160; }</code>
+<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; With the <span class="term">htmLawed class</span>&#160;(<a href="#s1.6">section 1.6</a>), usage is:<br />
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed&#58;&#58;hl($text);</code>
+<br />
+<br />
+&#160; <strong>Notes</strong>: (1) 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. (2) htmLawed does not have support for head-level elements, <span class="term">body</span>, and the frame-level elements, <span class="term">frameset</span>, <span class="term">frame</span>&#160;and <span class="term">noframes</span>.<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; The <span class="term">$config</span>&#160;and <span class="term">$spec</span>&#160;arguments are detailed below. Some examples are shown in <a href="#s2.9">section 2.9</a>. 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; <em>array("regex1", "regex2")</em>&#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; <em>word</em>&#160;- <span class="term">@</span>&#160;in mail address in <span class="term">href</span>&#160;attribute value is replaced with specified <em>word</em><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; <em>string</em>&#160;- dictated by values in <em>string</em><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; <em>name</em>&#160;- <em>name</em>&#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; <em>name</em>&#160;- <em>name</em>&#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; <em>word</em>&#160;- remove invalid ones and replace duplicate ones with new and unique ones based on the <em>word</em>; the admin-specified <em>word</em>, 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 of htmLawed 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 policies. <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 possibly used to implement a functionality like that achieved using <span class="term">$spec</span>&#160;functionality.<br />
+<br />
+&#160; <span class="term">$spec</span>&#160;can also be used to permit custom, non-standard attributes as well as custom rules for standard attributes. Thus, the following value of <span class="term">$spec</span>&#160;will permit the custom uses of the standard <span class="term">rel</span>&#160;attribute in <span class="term">input</span>&#160;(not permitted as per standards) and of a non-standard attribute, <span class="term">vFlag</span>, in <span class="term">img</span>.<br />
+<br />
+
+<code class="code">&#160; &#160; $spec = &#39;img=vFlag; input=rel&#39;</code>
+<br />
+<br />
+&#160; The attribute names can contain alphabets, colons (:) and hyphens (-), but they must start with an alphabet.<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 consumed during text processing by htmLawed depends on its configuration, the size of the input, and the amount, nestedness and well-formedness of the HTML markup within the input. 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. Unless end-users, either people or software, supplying the content are completely trusted, security issues arising from the degree of HTML usage permitted through htmLawed's setting should be considered. 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 (some Internet Explorer versions are vulnerable)<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 permissive circumstances, such as when the character encoding is left undefined through HTTP headers or HTML <span class="term">meta</span>&#160;tags, this can allow for an exploit (like Google's <em>UTF-7/XSS</em>&#160;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 may therefore get identified as mere plain text. 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 be single- and not double-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. Thus, <span class="term">&amp;Lt;</span>&#160;or <span class="term">&amp;TILDE;</span>&#160;will not be recognized as entities and will be <em>neutralized</em>.<br />
+<br />
+&#160; * &#160;HTML comments should not be inside element tags (they can be 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;Even if intended HTML is lost from an 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 specifications) 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 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 specifications (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 legally invalid per se.<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>. Content of the latter elements can, however, be individually filtered through htmLawed.<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 specifications. 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 specifications 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 specifications (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 specifications. 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 <em>UTF-7/XSS</em>&#160;vulnerability of the past). Also, htmLawed can mangle input text if it is not well-formed in terms of character encoding. Administrators can consider using code available elsewhere to check well-formedness of input text characters to correct any defect.<br />
+<br />
+&#160; * &#160;htmLawed is expected to work with input texts in ASCII-compatible single byte encodings such as national variants of ASCII (like ISO-646-DE/German of the ISO 646 standard), extended ASCII variants (like ISO 8859-10/Turkish of the ISO 8859/ISO Latin standard), ISO 8859-based Windows variants (like Windows 1252), EBCDIC, Shift JIS (Japanese), GB-Roman (Chinese), and KS-Roman (Korean). It should also properly handle texts with variable byte encodings like UTF-7 (Unicode) and UTF-8 (Unicode). However, htmLawed may mangle input texts with double byte encodings like UTF-16 (Unicode), JIS X 0208:1997 (Japanese) and K SX 1001:1992 (Korean), or the UTF-32 (Unicode) quadruple byte encoding. If an input text has such an encoding, administrators can use PHP's <a href="http://php.net/manual/en/book.iconv.php">iconv</a>&#160;functions, or some other mean, to convert text to UTF-8 before passing it to htmLawed.<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; Allowing a custom attribute, <span class="term">vFlag</span>, in <span class="term">img</span>&#160;and permitting custom use of the standard attribute, <span class="term">rel</span>, in <span class="term">input</span>&#160;--<br />
+<br />
+
+<code class="code">&#160; &#160; $spec = &#39;img=vFlag; input=rel&#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 point only 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>&#160;(otherwise, for example when UTF-8 encoding is in use, Japanese or Korean characters can get mangled). 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>). Thus, the <span class="term">keep_bad</span>&#160;parameter's value affects <span class="term">&lt;xml&gt;</span>&#160;but not <span class="term">&lt;&#42;&gt;</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...), and is subjected to the <span class="term">keep_bad</span>&#160;value.<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>. Using the <span class="term">$spec</span>&#160;argument, htmLawed can be forced to permit custom, non-standard attributes as well as custom rules for standard attributes (<a href="#s2.3">section 2.3</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 <em>discouraged</em>&#160;in HTML documents as per the specifications (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 reading of this documentation may provide an answer.<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 />
+
+</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 without a change-log entry if the secondary files, but not htmLawed per se, are revised.)<br />
+<br />
+&#160; <em>Version number - Release date. Notes</em><br />
+<br />
+&#160; 1.1.16 - 29 August 2013. Fix for a potential security vulnerability arising from specialy encoded space characters in URL schemes/protocols<br />
+<br />
+&#160; 1.1.15 - 11 August 2013. Improved tidying/prettifying functionality<br />
+<br />
+&#160; 1.1.14 - 8 August 2012. Fix for possible segmental loss of incremental indentation during <span class="term">tidying</span>&#160;when <span class="term">balance</span>&#160;is disabled; fix for non-effectuation under some circumstances of a corrective behavior to preserve plain text within elements like <span class="term">blockquote</span>.<br />
+<br />
+&#160; 1.1.13 - 22 July 2012. Added feature allowing use of custom, non-standard attributes or custom rules for standard attributes<br />
+<br />
+&#160; 1.1.12 - 5 July 2012. Fix for a bug in identifying an unquoted value of the <span class="term">face</span>&#160;attribute<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["tidy"]</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. Fix for a bug in checks for invalid HTML code-point entities<br />
+<br />
+&#160; 1.0.8 - 15 May 2008. Permit <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); fix for a bug allowing <span class="term">td</span>&#160;directly inside <span class="term">table</span>; <span class="term">$config["safe"]</span>&#160;introduced<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 installation:<br />
+<br />
+&#160; (1) From version 1.1-1.1.10 to 1.1.11 (or later), 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 year 2010):<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, Dac Chartrand, Ulf Harnhammer, Gareth Heyes, Klaus Leithoff, Lukasz Pilorz, Shelley Powers, Harro Verton, 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 <a href="http://www.w3c.org">W3C</a>&#160;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;- first 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;- second argument; an associative array; optional; named <span class="term">$C</span>&#160;within 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;- third 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, named <span class="term">$S</span>&#160;within htmLawed code, 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 <span class="term">$config</span>&#160;and <span class="term">$spec</span>&#160;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; The functionality of htmLawed is dictated by the external HTML standard. It is thus coded for a clear-cut objective with not much concern for tweakability. The code is only minimally annotated with comments -- it is not meant to instruct; PHP developers familiar with the HTML specifications will see the logic, and others can always refer to the htmLawed documentation. The compact structuring of the statements is meant to aid a quick grasp of the logic.
+</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 29 Aug, 2013 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..5e19605e5
--- /dev/null
+++ b/mod/htmlawed/vendors/htmLawed/htmLawed_README.txt
@@ -0,0 +1,1734 @@
+/*
+htmLawed_README.txt, 29 August 2013
+htmLawed 1.1.16, 29 August 2013
+Copyright Santosh Patnaik
+Dual licensed with LGPL 3 and GPL 2+
+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 PHP script to process text with HTML markup to make it more compliant with HTML standards and administrative policies. It works by making HTML well-formed with balanced and properly nested tags, neutralizing code that may be used for cross-site scripting (XSS) attacks, allowing only specified HTML tags and attributes, and so on. Such `lawing in` of HTML in text used in (X)HTML or XML documents ensures that it is in accordance with the aesthetics, safety and usability requirements set by administrators.
+
+ htmLawed is highly customizable, and fast with low memory usage. Its free and open-source code is in one small file, does not require extensions or libraries, and works in older versions of PHP as well. It is a good alternative to the HTML Tidy:- http://tidy.sourceforge.net application.
+
+
+-- 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 ^~`
+
+ * can *restrict elements* ^~`
+ * ensures 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' ^`
+ * *transforms 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' ^`
+ * permit custom, non-standard attributes as well as custom rules for standard attributes ~`
+
+ * *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 created in 2007 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 an extension or external application like 'HTML Tidy'. The core logic of htmLawed, that of identifying HTML elements and attributes, was based on the 'Kses' (version 0.2.2) HTML filter software of Ulf Harnhammar (it can still be used with code that uses 'Kses'; see section:- #2.6.).
+
+ See section:- #4.3 for a detailed log of changes in htmLawed over the years, and section:- #4.10 for acknowledgements.
+
+
+-- 1.4 License & copyright ----------------------------------------o
+
+
+ htmLawed is free and open-source software dual copyrighted by Santosh Patnaik, MD, PhD, and 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).
+
+
+-- 1.5 Terms used here --------------------------------------------o
+
+
+ In this document, only HTML body-level elements are considered. htmLawed does not have support for head-level elements, 'body', and the frame-level elements, 'frameset', 'frame' and 'noframes', and these elements are ignored here.
+
+ * `administrator` - or admin; person setting up the code that utilizes htmLawed; also, `user`
+ * `attributes` - name-value pairs like 'href="http://x.com"' in opening tags
+ * `author` - see `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 the '<a href="x">click</a>' element
+ * `HTML` - implies XHTML unless specified otherwise
+ * `HTML body` - Complete HTML documents typically have a `head` and a `body` container. Information in `head` specifies title of the document, etc., whereas that in the body informs what is to be displayed on a web-page; it is only the elements for `body`, except 'frames', 'frameset' and 'noframes' that htmLawed is concerned with
+ * `input` - text 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 HTML of text that can otherwise potentially, and circumstantially, expose text readers to security vulnerabilities like cross-site scripting attacks (XSS)
+ * `scheme` - a URL protocol like 'http' and 'ftp'
+ * `specifications` - standard specifications, for HTML4, HTML5, Ruby, etc.
+ * `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`
+
+
+-- 1.6 Availability ------------------------------------------------o
+
+
+ htmLawed can be downloaded for free at its website:- http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed. Besides the 'htmLawed.php' file, the download has the htmLawed documentation (this document) in plain text:- htmLawed_README.txt and HTML:- htmLawed_README.htm formats, a script for testing:- htmLawedTest.php, and a text file for test-cases:- htmLawed_TESTCASE.txt. htmLawed is also available as a PHP class (OOP code) on its website.
+
+
+== 2 Usage ========================================================oo
+
+
+ htmLawed works in PHP version 4.4 or higher. Either 'include()' the 'htmLawed.php' file, or copy-paste the entire code. To use with PHP 4.3, have the following code included:
+
+ if(!function_exists('ctype_digit')){
+ function ctype_digit($var){
+ return ((int) $var == $var);
+ }
+ }
+
+
+-- 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);
+
+ With the 'htmLawed class' (section:- #1.6), usage is:
+
+ $processed = htmLawed::hl($text);
+
+ *Notes*: (1) 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. (2) htmLawed does not have support for head-level elements, 'body', and the frame-level elements, 'frameset', 'frame' and 'noframes'.
+
+ 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);
+
+ The '$config' and '$spec' arguments are detailed below. Some examples are shown in section:- #2.9. 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 of htmLawed 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 policies. '$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 possibly used to implement a functionality like that achieved using '$spec' functionality.
+
+ '$spec' can also be used to permit custom, non-standard attributes as well as custom rules for standard attributes. Thus, the following value of '$spec' will permit the custom uses of the standard 'rel' attribute in 'input' (not permitted as per standards) and of a non-standard attribute, 'vFlag', in 'img'.
+
+ $spec = 'img=vFlag; input=rel'
+
+ The attribute names can contain alphabets, colons (:) and hyphens (-), but they must start with an alphabet.
+
+
+-- 2.4 Performance time & memory usage ----------------------------o
+
+
+ The time and memory consumed during text processing by htmLawed depends on its configuration, the size of the input, and the amount, nestedness and well-formedness of the HTML markup within the input. 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 permitted through htmLawed's setting should be considered. 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 (some Internet Explorer versions are vulnerable)
+
+ * 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 permissive circumstances, such as when the character encoding is left undefined through HTTP headers or HTML 'meta' tags, this can allow for 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 may therefore get identified as mere plain text. 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 be single- and not double-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. Thus, '&Lt;' or '&TILDE;' will not be recognized as entities and will be `neutralized`.
+
+ * HTML comments should not be inside element tags (they can be 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>'.
+
+ * Even if intended HTML is lost from an 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 specifications) 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 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 specifications (like asking for normalization of white-spacing within 'textarea' elements) are clearly wrong. Regarding security, note that `unsafe` HTML code is not legally invalid per se.
+
+ * 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'. Content of the latter elements can, however, be individually filtered through htmLawed.
+
+ * 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 specifications. 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 specifications 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 specifications (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 specifications. 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). Also, htmLawed can mangle input text if it is not well-formed in terms of character encoding. Administrators can consider using code available elsewhere to check well-formedness of input text characters to correct any defect.
+
+ * htmLawed is expected to work with input texts in ASCII-compatible single byte encodings such as national variants of ASCII (like ISO-646-DE/German of the ISO 646 standard), extended ASCII variants (like ISO 8859-10/Turkish of the ISO 8859/ISO Latin standard), ISO 8859-based Windows variants (like Windows 1252), EBCDIC, Shift JIS (Japanese), GB-Roman (Chinese), and KS-Roman (Korean). It should also properly handle texts with variable byte encodings like UTF-7 (Unicode) and UTF-8 (Unicode). However, htmLawed may mangle input texts with double byte encodings like UTF-16 (Unicode), JIS X 0208:1997 (Japanese) and K SX 1001:1992 (Korean), or the UTF-32 (Unicode) quadruple byte encoding. If an input text has such an encoding, administrators can use PHP's iconv:- http://php.net/manual/en/book.iconv.php functions, or some other mean, to convert text to UTF-8 before passing it to htmLawed.
+
+ * 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);
+
+ Allowing a custom attribute, 'vFlag', in 'img' and permitting custom use of the standard attribute, 'rel', in 'input' --
+
+ $spec = 'img=vFlag; input=rel';
+ $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 point only 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' (otherwise, for example when UTF-8 encoding is in use, Japanese or Korean characters can get mangled). 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'). Thus, the 'keep_bad' parameter's value affects '<xml>' but not '<*>'. 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...), and is subjected to the 'keep_bad' value.
+
+ 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. Using the '$spec' argument, htmLawed can be forced to permit custom, non-standard attributes as well as custom rules for standard attributes (section:- #2.3).
+
+ 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 specifications (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 reading of this documentation may provide an answer.
+
+ 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.
+
+
+-- 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 without a change-log entry if the secondary files, but not htmLawed per se, are revised.)
+
+ `Version number - Release date. Notes`
+
+ 1.1.16 - 29 August 2013. Fix for a potential security vulnerability arising from specialy encoded space characters in URL schemes/protocols
+
+ 1.1.15 - 11 August 2013. Improved tidying/prettifying functionality
+
+ 1.1.14 - 8 August 2012. Fix for possible segmental loss of incremental indentation during 'tidying' when 'balance' is disabled; fix for non-effectuation under some circumstances of a corrective behavior to preserve plain text within elements like 'blockquote'.
+
+ 1.1.13 - 22 July 2012. Added feature allowing use of custom, non-standard attributes or custom rules for standard attributes
+
+ 1.1.12 - 5 July 2012. Fix for a bug in identifying an unquoted value of the 'face' attribute
+
+ 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["tidy"]' 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. Fix for a bug in checks for invalid HTML code-point entities
+
+ 1.0.8 - 15 May 2008. Permit '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); fix for a bug allowing 'td' directly inside 'table'; '$config["safe"]' introduced
+
+ 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 installation:
+
+ (1) From version 1.1-1.1.10 to 1.1.11 (or later), 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 year 2010):
+
+ * 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, Dac Chartrand, Ulf Harnhammer, Gareth Heyes, Klaus Leithoff, Lukasz Pilorz, Shelley Powers, Harro Verton, 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:- http://www.w3c.org 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' - first 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' - second argument; an associative array; optional; named '$C' within 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' - third 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, named '$S' within htmLawed code, 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).
+
+ The functionality of htmLawed is dictated by the external HTML standard. It is thus coded for a clear-cut objective with not much concern for tweakability. The code is only minimally annotated with comments -- it is not meant to instruct; PHP developers familiar with the HTML specifications will see the logic, and others can always refer to the htmLawed documentation. The compact structuring of the statements is meant to aid a quick grasp of the logic.
+
+___________________________________________________________________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..c5cccaaba
--- /dev/null
+++ b/mod/htmlawed/vendors/htmLawed/htmLawed_TESTCASE.txt
@@ -0,0 +1,450 @@
+/*
+htmLawed_TESTCASE.txt, 27 August 2013
+htmLawed 1.1.16, 29 August 2013
+Copyright Santosh Patnaik
+Dual licensed with LGPL 3 and GPL 2+
+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>Custom:</strong> <img alt="image" my:data="portrait" /><br />
+<strong>Data-*:</strong> <a data-xml="x" data-xmnt="x" data-xmlnt="x" data-xmn:t="x" data-xmxm="x">a</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 />
+<blockquote>QQQ<div>x</div><!-- comment --></blockquote><br />
+<blockquote><div>x</div><!-- comment -->QQQ</blockquote><br />
+<blockquote><!-- comment --><div>x</div>QQQ<div>x</div></blockquote><br />
+<blockquote><div>x<!-- comment --></div>QQQ</blockquote><p>x</p><br />
+<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)<br />
+<strong>Casing:</strong> <A href=""></a><br />
+<strong>Check for tidy:</strong> <br /><hr /></div><hr /></div><hr /></div><div>hi</div>
+
+<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>HTML5</h6>
+
+<strong>figure and figcaption:</strong> <figure><img src="picture.jpg" alt="picture"><figcaption>Caption for the awesome picture</figcaption></figure>
+<strong>article:</strong> <h1>A</h1><p>B</p><article><h2>C</h2></article><article><h2>E</h2><p>F</p><p>G</p></article>
+<strong>meter</strong>: <p>Heat <meter min="100" max="200" value="150">150</meter>.</p>
+<strong>datalist</strong>: <input list="b" /><datalist id="b"><option value="c"><option value="d"></datalist>
+
+<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>
+<strong>Menu</strong>: <menu type="toolbar"><li><menu label="File">
+ <button type="button" onclick="new()">New...</button>
+ </menu></li><li><menu label="Edit"><button type="button" onclick="cut()">Cut...</button></menu></li>
+ </menu>
+
+<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>Microsoft Word</h6>
+
+<strong>Proprietary tag</strong>: <p class=3DMsoNormal><o:p>&nbsp;</o:p></p><br />
+<strong>XML declaration</strong>: <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><br />
+<strong>XML-invalid character code-point (may not replicate)</strong>: <p class=3DMsoNormal>“Where is he?†asked both Mary – the one so lovely – and Jane.</p>
+
+<h6>Nesting</h6>
+
+<strong>Block or inline a</strong>: <p><a href="link">text</a></p><a href="link"><div>hi</div></a><br />
+
+<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>Tag transformation</h6>
+<strong>Font element intended as 'inline' element:</strong> <p><font color='red'>hi</font></p><br />
+<strong>Font element intended as 'block' element:</strong> <div><font color='red'><div>hi</div></font></div><br />
+<strong>Font element intended as 'block' element:</strong> <center><font color='red'><div>hi</div><div>QQQ</div></font></center><br />
+
+<h6>Tidy</h6>
+<strong>White-space handling:</strong> abc<em> def </em> ghi abc <em>def</em> ghi
+
+<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>Opera:</strong> <a href="\xE2\x80\x83javascript:alert(123)">link</a>
+<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 />
+<._.> hi! <br />
+<<< ALERT >>> <br />
+<![if !vml]> some stuff <![endif]> <br />
+<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> <br />
+<uml:ns ns = "urn:www"> <br />
+<uml:ns ns = 'urn:www'> <br />
+if(13<age AND 21>age){say 'teen'} <br />
+age >51 and a smoking history of >51 pack-years <b>was</b> <br />
+age > 51 and a smoking history of >51 pack-years <b>was</b> <br />
+age <51 and a smoking history of <51 pack-years <b>was</b> <br />
+age < 51 and a smoking history of < 51 pack-years <b>was</b> <br />
+<b>age >51 and a smoking history of >51 pack-years</b> <br />
+<b>age > 51 and a smoking history of >51 pack-years</b> <br />
+<b>age <51 and a smoking history of <51 pack-years</b> <br />
+<b>age < 51 and a smoking history of < 51 pack-years</b> <br /> \ No newline at end of file
diff --git a/mod/identica/graphics/identica.png b/mod/identica/graphics/identica.png
new file mode 100644
index 000000000..888163d82
--- /dev/null
+++ b/mod/identica/graphics/identica.png
Binary files differ
diff --git a/mod/identica/graphics/thewire_speech_bubble.gif b/mod/identica/graphics/thewire_speech_bubble.gif
new file mode 100644
index 000000000..d0e8606a1
--- /dev/null
+++ b/mod/identica/graphics/thewire_speech_bubble.gif
Binary files differ
diff --git a/mod/identica/languages/ca.php b/mod/identica/languages/ca.php
new file mode 100644
index 000000000..7330f1cc6
--- /dev/null
+++ b/mod/identica/languages/ca.php
@@ -0,0 +1,10 @@
+<?php
+$language = array (
+ 'identica:title' => 'Identi.ca',
+ 'identica:info' => 'Mostra els teus últims missatges',
+ 'identica:username' => 'Introdueix el teu nom d\'usuària d\'identi.ca',
+ 'identica:num' => 'Número de missatges a mostrar.',
+ 'identica:visit' => 'Visitar el meu identi.ca',
+ 'identica:notset' => 'Aquest giny d\'Identi.ca no és encara llest. Per mostrar els teus últims missatges, clica a - edita - i omple amb els teus detalls',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/identica/languages/en.php b/mod/identica/languages/en.php
new file mode 100644
index 000000000..44932dc4a
--- /dev/null
+++ b/mod/identica/languages/en.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Identi.ca widget language file
+ */
+
+$english = array(
+
+ 'identica:title' => 'Identi.ca',
+ 'identica:info' => 'Display your latest tweets',
+ 'identica:username' => 'Enter your identi.ca username.',
+ 'identica:num' => 'The number of tweets to show.',
+ 'identica:visit' => 'visit my identi.ca',
+ 'identica:notset' => 'This Identi.ca widget is not yet set to go. To display your latest tweets, click on - edit - and fill in your details',
+);
+
+add_translation("en", $english);
diff --git a/mod/identica/languages/es.php b/mod/identica/languages/es.php
new file mode 100644
index 000000000..7a73755f7
--- /dev/null
+++ b/mod/identica/languages/es.php
@@ -0,0 +1,12 @@
+<?php
+$es = array (
+ 'identica:title' => 'Identi.ca',
+ 'identica:info' => 'Muestra tus últimos tweets',
+ 'identica:username' => 'Tu nombre de usuario en identi.ca',
+ 'identica:num' => 'Número de tweets a mostrar.',
+ 'identica:visit' => 'visita mi identi.ca',
+ 'identica:notset' => 'El widget de Identi.ca aún no está configurado. Para mostrar tus últimos tweets, haz click en en - editar - y rellena el formulario',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/identica/manifest.xml b/mod/identica/manifest.xml
new file mode 100644
index 000000000..45b8fff61
--- /dev/null
+++ b/mod/identica/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>Identica Widget</name>
+ <author>Simon Leblanc, Lorea Developers</author>
+ <version>1.8.0</version>
+ <category>social</category>
+ <category>widget</category>
+ <description>Elgg simple identi.ca widget (based of the Curverider Ltd's work)</description>
+ <website>https://www.lorea.org/</website>
+ <copyright>(C) Simon Leblanc 2009, Lorea 2012-2013</copyright>
+ <license>GNU Affero General Public License, version 3 or later</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/identica/start.php b/mod/identica/start.php
new file mode 100644
index 000000000..d9bdf6af7
--- /dev/null
+++ b/mod/identica/start.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Elgg identi.ca widget
+ * This plugin allows users to pull in their identi.ca feed to display on their profile
+ *
+ * @package ElggIdentica
+ */
+
+elgg_register_event_handler('init', 'system', 'identica_init');
+
+function identica_init() {
+ elgg_extend_view('css/elgg', 'identica/css');
+ elgg_register_js('identica', elgg_get_site_url() . "mod/identica/views/default/identica/js.php");
+ elgg_register_js('friendly_time', elgg_get_site_url() . "mod/identica/views/default/js/friendly_time.php");
+ elgg_register_widget_type('identica', elgg_echo('identica:title'), elgg_echo('identica:info'));
+}
diff --git a/mod/identica/views/default/identica/css.php b/mod/identica/views/default/identica/css.php
new file mode 100644
index 000000000..e87d0cf31
--- /dev/null
+++ b/mod/identica/views/default/identica/css.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Elgg Identi.ca CSS
+ *
+ * @package ElggIdentica
+ */
+?>
+
+#identica_widget {
+ margin:0 10px 0 10px;
+}
+#identica_widget ul {
+ margin:0;
+ padding:0;
+}
+#identica_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;
+}
+#identica_widget li span {
+ color:#666666;
+ background:white;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ padding:5px;
+ display:block;
+}
+p.visit_identica a {
+ background:url(<?php echo elgg_get_site_url(); ?>mod/identica/graphics/identica.png) left no-repeat;
+ padding:0 0 0 20px;
+ margin:0;
+}
+p.identica_username .input-text {
+ width:200px;
+}
+.visit_identica {
+ background:white;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ padding:2px;
+ margin:0 0 5px 0;
+}
+#identica_widget li > a {
+ display:block;
+ margin:0 0 0 4px;
+}
+#identica_widget li span a {
+ display:inline !important;
+}
diff --git a/mod/identica/views/default/identica/js.php b/mod/identica/views/default/identica/js.php
new file mode 100644
index 000000000..1dd560836
--- /dev/null
+++ b/mod/identica/views/default/identica/js.php
@@ -0,0 +1,40 @@
+/**
+ * Elgg identi.ca widget
+ * This plugin allows users to pull in their identi.ca feed to display on their profile
+ *
+ * @package ElggIdentica
+ */
+
+elgg.identica = {};
+
+/**
+ * Parse the JSON result for show this in HTML
+ *
+ * @param JSON string the JSON result of the identi.ca's call
+ */
+elgg.identica.callback = function(identicas) {
+ var statusHTML = [];
+ for (var i=0; i<identicas.length; i++){
+ var username = identicas[i].user.screen_name;
+ var status = identicas[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
+ return '<a href="'+url+'">'+url+'</a>';
+ }).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
+ return reply.charAt(0)+'<a href="http://identi.ca/'+reply.substring(1)+'">'+reply.substring(1)+'</a>';
+ }).replace(/\B#([-_a-z0-9]+)/ig, function(tag) {
+ return tag.charAt(0)+'<a href="http://identi.ca/tag/'+tag.substring(1).replace(/[^a-z0-9]+/ig, '')+'">'+tag.substring(1)+'</a>';
+ }).replace(/\B!([_a-z0-9]+)/ig, function(group) {
+ return group.charAt(0)+'<a href="http://identi.ca/group/'+group.substring(1)+'">'+group.substring(1)+'</a>';
+ });
+ statusHTML.push('<li><span>'+status+'</span> <a style="font-size:85%" href="http://identi.ca/notice/'+identicas[i].id+'">'+elgg.get_friendly_time(identicas[i].created_at)+'</a></li>');
+ }
+ document.getElementById('identica_update_list').innerHTML = statusHTML.join('');
+}
+
+elgg.identica.init = function() {
+ username = $('#identica_update_list').data('username');
+ num = $('#identica_update_list').data('num');
+ js = "https://identi.ca/api/statuses/user_timeline/"+username+".json?callback=elgg.identica.callback&count="+num;
+ $.getScript(js);
+};
+
+elgg.register_hook_handler('init', 'system', elgg.identica.init);
diff --git a/mod/identica/views/default/js/friendly_time.php b/mod/identica/views/default/js/friendly_time.php
new file mode 100644
index 000000000..0b0275206
--- /dev/null
+++ b/mod/identica/views/default/js/friendly_time.php
@@ -0,0 +1,50 @@
+elgg.get_friendly_time = function(time) {
+
+ if (!time) {
+ time = new Date();
+ } else {
+ time = new Date(time);
+ }
+ diff = (new Date().getTime() - time.getTime()) / 1000;
+
+ minute = 60;
+ hour = minute * 60;
+ day = hour * 24;
+
+ if (diff < minute) {
+ return elgg.echo("friendlytime:justnow");
+ } else if (diff < hour) {
+ diff = Math.round(diff / minute);
+ if (diff == 0) {
+ diff = 1;
+ }
+
+ if (diff > 1) {
+ return elgg.echo("friendlytime:minutes", [diff]);
+ } else {
+ return elgg.echo("friendlytime:minutes:singular", [diff]);
+ }
+ } else if (diff < day) {
+ diff = Math.round(diff / hour);
+ if (diff == 0) {
+ diff = 1;
+ }
+
+ if (diff > 1) {
+ return elgg.echo("friendlytime:hours", [diff]);
+ } else {
+ return elgg.echo("friendlytime:hours:singular", [diff]);
+ }
+ } else {
+ diff = Math.round(diff / day);
+ if (diff == 0) {
+ diff = 1;
+ }
+
+ if (diff > 1) {
+ return elgg.echo("friendlytime:days", [diff]);
+ } else {
+ return elgg.echo("friendlytime:days:singular", [diff]);
+ }
+ }
+};
diff --git a/mod/identica/views/default/widgets/identica/content.php b/mod/identica/views/default/widgets/identica/content.php
new file mode 100644
index 000000000..42cbd1853
--- /dev/null
+++ b/mod/identica/views/default/widgets/identica/content.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * Elgg identi.ca view page
+ *
+ * @package ElggIdentica
+ */
+
+//some required params
+
+$username = $vars['entity']->identica_username;
+$num = $vars['entity']->identica_num;
+
+// if the identi.ca username is empty, then do not show
+if ($username) {
+ elgg_load_js('friendly_time');
+ elgg_load_js('identica');
+?>
+
+<div id="identica_widget">
+ <ul id="identica_update_list" data-username="<?php echo $username; ?>" data-num="<?php echo $num; ?>"></ul>
+ <p class="visit_identica"><a href="http://identi.ca/<?php echo $username; ?>"><?php echo elgg_echo("identica:visit"); ?></a></p>
+</div>
+
+<?php
+} else {
+
+ echo "<p>" . elgg_echo("identica:notset") . ".</p>";
+
+}
diff --git a/mod/identica/views/default/widgets/identica/edit.php b/mod/identica/views/default/widgets/identica/edit.php
new file mode 100644
index 000000000..888f4e908
--- /dev/null
+++ b/mod/identica/views/default/widgets/identica/edit.php
@@ -0,0 +1,16 @@
+<?php
+
+ /**
+ * Elgg identi.ca edit page
+ *
+ * @package ElggIdentica
+ */
+
+?>
+ <p>
+ <?php echo elgg_echo("identica:username"); ?>
+ <input type="text" name="params[identica_username]" value="<?php echo htmlentities($vars['entity']->identica_username); ?>" />
+ <br /><?php echo elgg_echo("twitter:num"); ?>
+ <input type="text" name="params[identica_num]" value="<?php echo htmlentities($vars['entity']->identica_num); ?>" />
+
+ </p>
diff --git a/mod/infinite_scroll b/mod/infinite_scroll
new file mode 160000
+Subproject 68db72a726e9ccd3603acbf59914c2017276b0e
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/landing b/mod/landing
new file mode 160000
+Subproject d1ea0d2593cbf55a3804224fd587dbde00672a8
diff --git a/mod/languages/README.txt b/mod/languages/README.txt
new file mode 100644
index 000000000..002a1a2a3
--- /dev/null
+++ b/mod/languages/README.txt
@@ -0,0 +1,9 @@
+This plugin contains the following language packs:
+
+ * [Spanish](http://community.elgg.org/pg/plugins/project/791438/developer/nnimis/espaol-spanish-language-pack-v18), thanks to nnmis
+ * [Dutch](http://community.elgg.org/pg/plugins/project/802303/developer/jeabakker/dutch-translation-for-elgg-18), thanks to ColdTrick IT Solutions
+ * [German](http://community.elgg.org/pg/plugins/project/788318/developer/iionly/german-language-pack-for-elgg-182), thanks to iionly
+ * [Portuguese](http://community.elgg.org/pg/plugins/release/832562/developer/rcerceau/elgg-18-and-elgg-17-1714-and-181-brazilian-portuguese-language-and-improved-translationbrowser-plugin), thanks to R.Cerceau
+ * [French](http://community.elgg.org/pg/plugins/project/823113/developer/Duclos/french-translation-for-elgg-v181), thanks to Jean-Baptiste Duclos
+ * [Danish](http://community.elgg.org/pg/plugins/project/868128/developer/TheMuller/danish-language-pack-184), thanks to TheMuller
+ * [Basque](http://community.elgg.org/plugins/892053/1.1/basque-language-pack-18), thanks to Ander Goñi (@agonirena)
diff --git a/mod/languages/languages/ca/ca.blog.php b/mod/languages/languages/ca/ca.blog.php
new file mode 100644
index 000000000..90763738d
--- /dev/null
+++ b/mod/languages/languages/ca/ca.blog.php
@@ -0,0 +1,54 @@
+<?php
+$language = array (
+ 'blog:notification' => '%s ha escrit un nou missatge del blog.
+
+%s
+%s
+
+Veure i comentar el nou missatge:
+%s',
+ 'blog' => 'Blogs',
+ 'blog:blogs' => 'Blogs',
+ 'blog:revisions' => 'Revisions',
+ 'blog:archives' => 'Arxius',
+ 'blog:blog' => 'Blog',
+ 'item:object:blog' => 'Blogs',
+ 'blog:title:user_blogs' => 'Blogs de %s',
+ 'blog:title:all_blogs' => 'Tots els blogs del lloc',
+ 'blog:title:friends' => 'Blogs d&acute;amics',
+ 'blog:group' => 'Blog del grup',
+ 'blog:enableblog' => 'Habilitar blog del grup',
+ 'blog:write' => 'Afegir una entrada al blog',
+ 'blog:add' => 'Afegir una entrada al blog',
+ 'blog:edit' => 'Editar entrada del blog',
+ 'blog:excerpt' => 'Extracte',
+ 'blog:body' => 'Cos',
+ 'blog:save_status' => 'Desat: ',
+ 'blog:never' => 'Mai',
+ 'blog:status' => 'Estat',
+ 'blog:status:draft' => 'Esborrany',
+ 'blog:status:published' => 'Publicat',
+ 'blog:status:unsaved_draft' => 'Esborrany no desat',
+ 'blog:revision' => 'Revisió',
+ 'blog:auto_saved_revision' => 'Revisió desa autom&agrave;ticament',
+ 'blog:message:saved' => 'Entrada del blog desada.',
+ 'blog:error:cannot_save' => 'No s&acute;ha pogut desar l&acute;entrada del blog.',
+ 'blog:error:cannot_write_to_container' => 'No té els permisos necessaris per afegir el blog al grup.',
+ 'blog:messages:warning:draft' => 'Hi ha un esborrany sense desar per aquesta entrada!',
+ 'blog:edit_revision_notice' => '(Versió anterior)',
+ 'blog:message:deleted_post' => 'Entrada del blog eliminada.',
+ 'blog:error:cannot_delete_post' => 'No s&acute;ha pogut eliminar l&acute;entrada del blog.',
+ 'blog:none' => 'No hi ha entrades en el blog',
+ 'blog:error:missing:title' => 'Ha d&acute;ingressar un títol per al blog!',
+ 'blog:error:missing:description' => 'Ha d&acute;ingresar el cos del seu blog!',
+ 'blog:error:cannot_edit_post' => 'La publicació no existeix o no té els permisos necessaris sobre ella.',
+ 'blog:error:revision_not_found' => 'No s&acute;ha pogut trobar la revisió.',
+ 'river:create:object:blog' => '%s ha publicat una entrada al blog %s',
+ 'river:comment:object:blog' => '%s ha comentat en el blog %s',
+ 'blog:newpost' => 'Una entrada nova de blog',
+ 'blog:widget:description' => 'Mostrar las entrades més recents del blog',
+ 'blog:moreblogs' => 'Més entrades del blog',
+ 'blog:numbertodisplay' => 'Quantitat d&acute;entrades del blog a mostrar',
+ 'blog:noblogs' => 'No hi ha entrades del blog',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.bookmarks.php b/mod/languages/languages/ca/ca.bookmarks.php
new file mode 100644
index 000000000..c3cb84500
--- /dev/null
+++ b/mod/languages/languages/ca/ca.bookmarks.php
@@ -0,0 +1,51 @@
+<?php
+$language = array (
+ 'bookmarks:edit' => 'Edita l\'enllaç',
+ 'bookmarks:owner' => 'Enllaços de %s',
+ 'bookmarks:none' => 'No hi ha enllaços',
+ 'bookmarks:notification' => '%s ha afegit un nou enllaç:
+
+%s - %s
+%s
+
+Veure i comentar al nou enllaç:
+%s',
+ 'river:create:object:bookmarks' => '%s ha enllaçat %s',
+ 'river:comment:object:bookmarks' => '%s ha comentat l\'enllaç %s',
+ 'bookmarks:nogroup' => 'Aquest grup no té cap enllaç encara',
+ 'bookmarks:no_title' => 'Sense títol',
+ 'bookmarks:save:failed' => 'No es pot desar l\'enllaç. Siusplau, torna-ho a provar.',
+ 'bookmarks:save:invalid' => 'L\'enllaç és invàlid i no pot ser desat',
+ 'bookmarks' => 'Enllaços',
+ 'bookmarks:add' => 'Nou enllaç',
+ 'bookmarks:friends' => 'Enllaços de les amistats',
+ 'bookmarks:everyone' => 'Tots els enllaços',
+ 'bookmarks:this' => 'Marca això com a enllaç',
+ 'bookmarks:this:group' => 'Marca com enllaç a %s',
+ 'bookmarks:inbox' => 'Safata d\'entrada dels enllaços',
+ 'bookmarks:morebookmarks' => 'Més enllaços',
+ 'bookmarks:more' => 'Més',
+ 'bookmarks:with' => 'Compartir amb',
+ 'bookmarks:new' => 'Nou element marcat com enllaç',
+ 'bookmarks:address' => 'URL del recurs a marcar com enllaç',
+ 'bookmarks:delete:confirm' => 'Estàs segur que vols esborrar aquest recurs?',
+ 'bookmarks:numbertodisplay' => 'Nombre d\'elements marcats com enllaços a mostrar',
+ 'bookmarks:shared' => 'Afegit com enllaç',
+ 'bookmarks:visit' => 'Visitar el recurs',
+ 'bookmarks:recent' => 'Enllaços recents',
+ 'bookmarks:bookmarklet' => 'Descarrega els enllaços dinàmics',
+ 'bookmarks:bookmarklet:group' => 'Descarrega un grup d\'enllaços dinàmics',
+ 'bookmarks:river:annotate' => 'un comentari per aquest element marcat com enllaç',
+ 'bookmarks:river:item' => 'un element',
+ 'item:object:bookmarks' => 'Enllaços',
+ 'bookmarks:group' => 'Enllaços',
+ 'bookmarks:enablebookmarks' => 'Activa l\'agrupació d\'enllaços',
+ 'bookmarks:widget:description' => 'Aquest giny mostra els darrers enllaços',
+ 'bookmarks:bookmarklet:description' => 'El marcador dinàmic d\'enllaços et permet compartir qualsevol recurs que trobis a la xarxa amb les teves amistats, o simplement marcar-los per a tu mateix/a. Utilitza\'ls, simplement arrossega el botó a la teva barra de direcció:',
+ 'bookmarks:bookmarklet:descriptionie' => 'Si estàs fent servir Internet Explorer, hauràs de fer botó dret sobre la icona del marcador dinàmic, escollir \'afegir a adreces d\'interès\' i aleshores a la barra d\'enllaços.',
+ 'bookmarks:bookmarklet:description:conclusion' => 'Aleshores podràs desar qualsevol pàgina que visitis simplement prement-la cada cop.',
+ 'bookmarks:save:success' => 'S\'ha afegit correctament.',
+ 'bookmarks:delete:success' => 'S\'ha esborrat correctament.',
+ 'bookmarks:delete:failed' => 'No es pot esborrar l\'enllaç. Siusplau, torna-ho a provar.',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.categories.php b/mod/languages/languages/ca/ca.categories.php
new file mode 100644
index 000000000..f50a0a804
--- /dev/null
+++ b/mod/languages/languages/ca/ca.categories.php
@@ -0,0 +1,12 @@
+<?php
+$ca = array (
+ 'categories' => 'Categories',
+ 'categories:settings' => 'Defineix les categories del lloc',
+ 'categories:explanation' => 'Per definir les categories que s\'usaran arreu el sistema, escriu-les aquí, separades per comes. Les eines compatibles les mostraran quan l\'habitant crei o editi contingut.',
+ 'categories:save:success' => 'Les categories del lloc han estat guardades satisfactòriament.',
+ 'categories:results' => 'Resultats per la categoria: %s',
+ 'categories:on_activate_reminder' => 'Les categories no funcionaran a no ser que n\'afegeixis alguna. <a href="%s">Afegeix categories ara.</a>',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.core.php b/mod/languages/languages/ca/ca.core.php
new file mode 100644
index 000000000..57aa93118
--- /dev/null
+++ b/mod/languages/languages/ca/ca.core.php
@@ -0,0 +1,994 @@
+<?php
+$language = array (
+ 'login' => 'Inicia sessió',
+ 'loginok' => 'Has iniciat sessió',
+ 'loginerror' => 'Ha fallat alguna cosa en iniciar la sessió. Verifica les teves credencials i torna-ho a intentar',
+ 'login:empty' => 'El nom d\'usuària/correu-e i la contrasenya són necessaris.',
+ 'auth:nopams' => 'Error intern. No hi ha un mètode d\'autenticació d\'usuàries instal·lat',
+ 'logout' => 'Tanca sessió',
+ 'logouterror' => 'No s´ha pogut tancar la sessió. Si us plau, torna-ho a intentar',
+ 'loggedinrequired' => 'Has d´estar identificada per poder veure aquesta pàgina',
+ 'adminrequired' => 'Has de ser una administradora per poder veure aquesta pàgina',
+ 'membershiprequired' => 'Has de ser membre del grup per poder veure aquesta pàgina',
+ 'exception:contact_admin' => 'Un error irreparable ha succeït i s\'ha fet l\'informe. Contacta l\'administradora del lloc amb la següent informació:',
+ 'actionunauthorized' => 'No estàs autoritzada per realitzar aquesta acció',
+ 'InstallationException:SiteNotInstalled' => 'No s´ha pogut processar la sol·licitud. El lloc no està configurat o la base de dades ha caigut',
+ 'DatabaseException:WrongCredentials' => 'No s´ha pogut connectar a la base de dades amb aquestes credencials. Verifica l´arxiu de configuració',
+ 'DatabaseException:NoConnect' => 'No es pot consultar la base de dades \'%s\'. Si un plau, verifica que aquesta base de dades existeixi i que tinguis els permisos corresponents',
+ 'DatabaseException:InvalidDBLink' => 'S\'ha perdut la connexió a la base de dades',
+ 'PluginException:MisconfiguredPlugin' => '%s (guid: %s) és una extensió desconfigurada que ha estat deshabilitada. Si us plau, revisa la Wiki d´Elgg per ampliar la informació (http://docs.elgg.org/wiki/)',
+ 'ElggPlugin:Exception:CannotIncludeFile' => 'No es pot incloure %s per a l\'extensióin %s (guid: %s) a %s. Verifica els permisos!',
+ 'ElggPlugin:Exception:CannotRegisterViews' => 'No es pot carregar el directori "views" per a l\'extensió %s (guid: %s) en %s. Verifica els permisos!',
+ 'ElggPlugin:Exception:CannotRegisterLanguages' => 'No poden registrar-se idiomes per a l\'extensió %s (guid: %s) a %s. Verifica els permisos!',
+ 'ElggPlugin:Dependencies:Suggests' => 'Suggereix',
+ 'InvalidParameterException:GUIDNotForExport' => 'No s´ha especificat un GUID durant l´exportació. Això no hauria de succeir.',
+ 'InvalidParameterException:UnexpectedODDClass' => 'import() ha passat una classe ODD inesperada',
+ 'InstallationException:TypeNotSupported' => 'No es reconeix el tipus %s. Això indica un error en la instal·lació causat, probablement, per una actualizació incompleta.',
+ 'ImportException:NoGUID' => 'S´ha creat una nova entitat sense GUID. Això no pot passar.',
+ 'ImportException:GUIDNotFound' => 'No s´ha pogut trobar l´entitat \'%d\'.',
+ 'ImportException:NoODDElements' => 'No s´han trobat elements OpenDD per a la importació. La importació ha fallat.',
+ 'ImportException:NotAllImported' => 'No s´han importat tots els elements.',
+ 'IOException:MissingFileName' => 'Has d´especificar un nom abans d´obrir un arxiu.',
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => 'No s´ha pogut carregar la classe de repositori %s per a l´arxiu %u',
+ 'NotificationException:NoNotificationMethod' => 'No s´ha especificat un mètode de notificació.',
+ 'NotificationException:NoHandlerFound' => 'No s´ha trobat un controlador \'%s\' o no és executable.',
+ 'DatabaseException:UnspecifiedQueryType' => 'Tipus de consulta no reconegut o no especificat.',
+ 'DatabaseException:NoTablesSpecified' => 'No s´han especificat les taules per a la consulta.',
+ 'InvalidParameterException:NoEntityFound' => 'No es troba l´entitat. Pot ser que no existeixi o que no tingui els premisos necessaris sobre ella.',
+ 'InvalidParameterException:GUIDNotFound' => 'No s´ha pogut trobar el GUID: %s, o no hi té accés.',
+ 'InvalidParameterException:CanNotExportType' => 'Ens sap greu, l´exportació de \'%s\' no es troba implementada',
+ 'APIException:ApiResultUnknown' => 'Els resultats de l´API no són coneguts. Això no pot passar.',
+ 'ConfigurationException:NoSiteID' => 'No s´ha especificat una ID del lloc.',
+ 'SecurityException:APIAccessDenied' => 'Ens sap greu, l´accés a l´API ha estat deshabilitat per part de l´administradora.',
+ 'SecurityException:NoAuthMethods' => 'No s´han trobat mètodes d´identificació per processar la sol·licitud.',
+ 'SecurityException:ForwardFailedToRedirect' => 'La redirecció no pot ser feta ja que hi ha capçaleres que ja s\'han enviat. S\'ha detingut l\'execució per seguretat. Mira a http://docs.elgg.org/ per trobar més informació.',
+ 'APIException:ParameterNotArray' => '%s no és un Array.',
+ 'APIException:InvalidParameter' => 'S´ha trobat un paràmetre no vàlid per a \'%s\' en el mètode \'%s\'.',
+ 'APIException:UserAuthenticationFailed' => 'La crida al mètode ha fallat en la identificació de la usuària',
+ 'SecurityException:AuthTokenExpired' => 'El token d´identificació no es troba o ha caducat.',
+ 'APIException:TemporalDrift' => 'X-Elgg-time és molt llunyà en el passat o en el futur. Error Epoch.',
+ 'SecurityException:InvalidPostHash' => 'Hash de POST data no vàlid - S´esperava %s, però s´ha rebut %s.',
+ 'SecurityException:DupePacket' => 'Signatura de paquet vista abans.',
+ 'SecurityException:InvalidAPIKey' => 'Clau API no vàlida o perduda.',
+ 'NotImplementedException:CallMethodNotImplemented' => 'No se suporta la crida al mètode \'%s\'.',
+ 'NotImplementedException:XMLRPCMethodNotImplemented' => 'Crida al mètode XML-RPC \'%s\' no implementada.',
+ 'InvalidParameterException:UnexpectedReturnFormat' => 'La crida al mètode \'%s\' ha tingut un resultat inesperat.',
+ 'PluginException:NoPluginName' => 'No s´ha pogut trobar el nom de l\'extensió',
+ 'SecurityException:authenticationfailed' => 'No s´ha pogut identificar l´usuària',
+ 'CronException:unknownperiod' => '%s no és un període recognoscible.',
+ 'SecurityException:deletedisablecurrentsite' => 'No es pot eliminar o deshabilitar el lloc que estàs veient en aquests moments!',
+ 'LoginException:BannedUser' => 'Has estat bloquejada en aquest lloc i no pots accedir-hi',
+ 'LoginException:UsernameFailure' => 'No pots entrar. Si us plau, revisa el teu nom d\'usuària/correu-e i clau d\'accés.',
+ 'LoginException:AccountLocked' => 'El teu compte ha estat bloquejat perquè ha superat el nombre permès d´intents d´iniciar la sessió.',
+ 'LoginException:ChangePasswordFailure' => 'Ha fallat la verificació de la clau d\'accés.',
+ 'deprecatedfunction' => 'Alerta: aquest codi utilitza la funció obsoleta \'%s\' que no és compatible amb aquesta versió d´Elgg',
+ 'pageownerunavailable' => 'Alerta: l´administradora de la pàgina %d no es troba accessible!',
+ 'error:missing_data' => 'Falta alguna informació a la teva petició',
+ 'auth.gettoken' => 'Aquesta crida API permet a l´usuària obtenir un token d´identificació que es pot usar per identificar futures crides API. S´ha d´enviar com a paràmetre auth_token',
+ 'username' => 'Nom d´usuària',
+ 'loginusername' => 'Nom d\'usuària o correu-e',
+ 'admin_option' => 'Fer administradora a aquesta usuària?',
+ 'LOGGED_IN' => 'Usuàries en línia',
+ 'dashboard:nowidgets' => 'El teu escriptoril et permet seguir l´activitat i el contingut que t´interessen d´aquest lloc',
+ 'widgets:add:description' => 'Clica el botó del giny que t´interessa per afegir-lo a la pàgina.',
+ 'widgets:save:success' => 'El giny s´ha desat correctament.',
+ 'widgets:save:failure' => 'No s´ha pogut desar el giny. Si us plau, intenti-ho una altra vegada.',
+ 'user' => 'Usuària',
+ 'item:user' => 'Usuàries',
+ 'friends' => 'Amigues',
+ 'friends:yours' => 'Les teves amigues',
+ 'friends:owned' => 'Amigues de %s',
+ 'friend:add' => 'Nova amiga',
+ 'friend:remove' => 'Esborrar amiga',
+ 'friends:add:successful' => '%s ha estat afegida com a amiga.',
+ 'friends:add:failure' => 'No s´ha pogut afegir %s com a amiga.',
+ 'friends:remove:successful' => 'S´ha esborrat %s de les teves amigues.',
+ 'friends:remove:failure' => 'No s´ha pogut esborrar %s de les teves amigues.',
+ 'friends:none' => 'Aquesta usuària no té cap amiga encara.',
+ 'friends:none:you' => 'Encara no tens cap amiga.',
+ 'friends:none:found' => 'No s´ha trobat cap amiga.',
+ 'friends:of:none' => 'Ningú no ha afegit aquesta usuària com a amiga.',
+ 'friends:of:none:you' => 'Ningú no t´ha afegit com a amiga. Pots començar a afegir contingut i completar el teu perfil perquè la gent et trobi.',
+ 'friends:of:owned' => 'Gent que s\'ha fet amiga de %s',
+ 'friends:of' => 'Amigues de',
+ 'friends:collections' => 'Col·leccions d\'amigues',
+ 'friends:collections:add' => 'Nova col·lecció d\'amigues',
+ 'friends:addfriends' => 'Seleccionar amigues',
+ 'friends:collectionfriends' => 'Amigues en aquesta col·lecció',
+ 'friends:nocollectionname' => 'Has de posar un nom a la col·lecció abans de crear-la',
+ 'avatar:remove' => 'Elimina el teu avatar i restableix l\'icona predefinida',
+ 'avatar:remove:success' => 'S\'ha eliminat l\'avatar correctament',
+ 'avatar:remove:fail' => 'Error en eliminar l\'avatar',
+ 'profile:explainchangefields' => 'Pots substituir els camps de perfil que hi ha amb d´altres creats per tu si utilitzes el formulari de sota.
+
+ Ingressa un nou camp de perfil. Per exemple, \'Equip favorit\'. Després, selecciona el tipus de camp. Per exemple, \'text, url, etiquetes\'. Fes clic al botó \'Afegir\'. Per tornar a ordenar els camps, arrossega el control al costat de l´etiqueta del camp. Per editar l´etiqueta del camp, fes clic al text de l´etiqueta.
+
+Pots tornar a la disposició original del perfil en qualsevol moment, però perdràs la informació creada en els camps personalitzats del perfil fins al moment.',
+ 'profile:field_too_long' => 'No pots desar la informació del perfil perquè la secció "%s" és massa llarga.',
+ 'profile:noaccess' => 'No tens permisos per editar aquest perfil',
+ 'river' => 'Activitat',
+ 'river:friend:user:default' => '%s ara és amiga de %s',
+ 'river:noaccess' => 'No tens permís per veure aquest element.',
+ 'riveritem:single:user' => 'una usuària',
+ 'riveritem:plural:user' => 'algunes usuàries',
+ 'river:update' => 'Actualitzar per %s',
+ 'river:delete:success' => 'L\'activitat ha estat eliminada',
+ 'river:delete:fail' => 'No es pot eliminar l\'activitat',
+ 'river:widgets:friends' => 'Activitat de les amigues',
+ 'notifications:methods' => 'Si us plau, indica els mètodes que vols habilitar.',
+ 'notifications:usersettings:save:ok' => 'La teva configuració de notificacions s´ha guardat correctament.',
+ 'notifications:usersettings:save:fail' => 'Hi ha hagut un error a l´hora de desar la configuració de notificacions',
+ 'user.notification.get' => 'Retornar la configuració de notificacions per a una usuària en concret.',
+ 'user.notification.set' => 'Establir la configuració de notificacions per a una usuàri en concret.',
+ 'users:searchtitle' => 'Cercar per usuàries: %s',
+ 'tag:search:startblurb' => 'Elements amb etiquetes que coincideixin amb \'%s\':',
+ 'user:search:startblurb' => 'Usuàries que coincideixin amb \'%s\':',
+ 'userpicker:only_friends' => 'Només amigues',
+ 'registerok' => 'T´has registrat correctament per a %s',
+ 'registerbad' => 'No t´has pogut registrar per culpa d´una errada desconeguda.',
+ 'registerdisabled' => 'L´administradora del sistema ha deshabilitat el registre',
+ 'registration:notemail' => 'No has ingressat una adreça de correu vàlida',
+ 'registration:userexists' => 'El nom d\'usuària ja existeix',
+ 'registration:usernametooshort' => 'El nom d\'usuària ha de tenir, com a mínim, %u caràcters',
+ 'registration:usernametoolong' => 'El teu nom d\'usuària és massa llarg. Pot tenir un màxim de %u caràcters.',
+ 'registration:passwordtooshort' => 'La contrasenya ha de tenir, com a mínim, %u caràcters.',
+ 'registration:dupeemail' => 'Aquesta adreça de correu ja està registrada.',
+ 'registration:invalidchars' => 'Ens sap greu, el teu nom d\'usuària té caràcters no vàlids: %s. Aquests són tots els caràcters que estan invalidats: %s',
+ 'registration:emailnotvalid' => 'Ens sap greu, l\'adreça de correu que has ingressat no és vàlida en el sistema',
+ 'registration:passwordnotvalid' => 'Ens sap greu, la contrasenya que has ingressat no és vàlida en el sistema',
+ 'registration:usernamenotvalid' => 'Ens sap greu, el nom d\'usuària que has ingressat no és vàlid en el sistema',
+ 'adduser' => 'Afegir usuària',
+ 'adduser:ok' => 'S\'ha afegit correctament una nova usuària.',
+ 'adduser:bad' => 'No s\'ha pogut afegir la nova usuària.',
+ 'user:name:success' => 'S\'ha modificat correctament el teu nom a la xarxa.',
+ 'user:name:fail' => 'No s\'ha pogut modificar el teu nom a la xarxa. Si us plau, assegura\'t que no és massa llarg i torna-ho a intentar.',
+ 'user:password:fail' => 'No s\'ha pogut modificar la contrasenya a la xarxa',
+ 'user:password:fail:incorrect_current_password' => 'Has introduït malament la contrasenya actual.',
+ 'user:resetpassword:unknown_user' => 'Usuària no vàlida.',
+ 'user:resetpassword:reset_password_confirm' => 'Quan modifiquis la contrasenya, t\'enviarem la nova a l´adreça de correu registrada.',
+ 'user:set:language' => 'Configuració d\'idioma',
+ 'user:language:label' => 'El teu idioma',
+ 'user:language:success' => 'S\'ha actualitzat la configuració d\'idioma.',
+ 'user:language:fail' => 'No s\'ha pogut actualitzar la configuració d\'idioma.',
+ 'user:username:notfound' => 'No s\'ha trobat la usuària %s',
+ 'user:password:resetreq:success' => 'Sol·licitud de nova contrasenya confirmada. T\'hem enviat un correu electrònic',
+ 'user:password:resetreq:fail' => 'No s\'ha pogut sol·lictar una nova contrasenya.',
+ 'user:password:text' => 'Per sol·licitar una nova contrasenya, ingressa el teu nom d\'usuària i fes clic al botó de sota.',
+ 'user:persistent' => 'Recorda\'m',
+ 'admin:configuration:success' => 'La teva configuració ha estat desada',
+ 'admin:configuration:fail' => 'No s\'ha pogut desar la teva configuració',
+ 'admin:configuration:dataroot:relative_path' => 'No es pot posar "%s" com a dataroot perquè no és una ruta absoluta.',
+ 'admin:description' => 'El panell d\'administració et permetrà organitzar tots els aspectes del sistema, des de la gestió d\'usuàries fins al comportament de les extensions. Selecciona una opció a sota per començar.',
+ 'admin:appearance' => 'Aparença',
+ 'admin:users' => 'Usuàries',
+ 'admin:users:online' => 'Actualment en línia',
+ 'admin:users:add' => 'Afegeix una nova usuària',
+ 'admin:users:description' => 'Aquest panell d\'administració et permetrà gestionar la configuració d\'usuàries de la xarxa. Selecciona una opció a sota per començar.',
+ 'admin:users:adduser:label' => 'Clica aquí per afegir una nova usuària...',
+ 'admin:users:opt:linktext' => 'Configura les usuàries...',
+ 'admin:users:opt:description' => 'Configurar usuàries i informació de comptes.',
+ 'admin:users:find' => 'Trobar',
+ 'admin:settings:advanced' => 'Configuració avançada',
+ 'admin:site:description' => 'Aquest panell d\'administració et permetrà gestionar la configuració global de la xarxa. Selecciona una opció a sota per començar.',
+ 'admin:site:opt:linktext' => 'Configurar lloc...',
+ 'admin:site:access:warning' => 'Les modificacions en el control dels acessos només tindran impacte en els acessos futurs.',
+ 'admin:widget:online_users' => 'Usuàries en línia',
+ 'admin:widget:online_users:help' => 'Llista de les usuàries actuals del lloc',
+ 'admin:widget:content_stats:help' => 'Seguiment del contingut creat per les usuàries de la xarxa',
+ 'admin:widget:admin_welcome:admin_overview' => 'Pots navegar per l\'àrea d\'administració amb el menú de la dreta. Està organitzat per aquestes tres seccions:
+<dl>
+<dt>Administra</dt><dd>Les tasques del dia a dia com el contingut denunciat, mirar qui és en línia, les estadístiques.</dd>
+<dt>Configura</dt><dd>Tasques ocasionals com canviar el nom del lloc o activar una extensió.</dd>
+<dt>Desenvolupa</dt><dd>Per a les desenvolupadores que estan construint extensions o dissenyant temes (Requereix que l\'extensió developer estigui activa.)</dd>
+</dl>',
+ 'admin:widget:admin_welcome:outro' => '<br>Assegura\'t de verificar els recursos disponibles als enllaços a peu de pàgina i gràcies per utilitzar Elgg!',
+ 'admin:widget:control_panel:help' => 'Proveeix d\'accés fàcil als controls comuns',
+ 'admin:footer:manual' => 'Manual d\'qdministració',
+ 'admin:plugins:category:nonbundled' => 'No inclosa',
+ 'plugins:disabled' => 'Les extensions no s\'estan carregant perquè hi ha un arxiu anomenat "disabled" al directori.',
+ 'plugins:usersettings:save:ok' => 'La configuració de la usuària per a l\'extensió %s s\'ha desat correctament',
+ 'admin:plugins:description' => 'Aquest panell et permetrà controlar i configurar les eines instal·lades al seu lloc.',
+ 'admin:plugins:label:repository' => 'Codi',
+ 'admin:plugins:label:bugtracker' => 'Informar d\'això',
+ 'admin:plugins:label:donate' => 'Donar',
+ 'admin:plugins:warning:unmet_dependencies' => 'Aquesta extensió té dependències desconegudes i no s´activarà. Consulta les dependències a baix per ampliar la informació',
+ 'admin:plugins:warning:invalid' => '%s no és una extensió d\'Elgg vàlida',
+ 'admin:plugins:warning:invalid:check_docs' => 'Verifica <a href="http://docs.elgg.org/Invalid_Plugin">la documentació de l\'Elgg</a> amb consells per solucionar problemes.',
+ 'admin:statistics:description' => 'Això és un resum de les estadístiques del lloc. Si necessites estadístiques més avançades, disposes d´una funcionalitat d\'adminsitració professional',
+ 'admin:statistics:opt:description' => 'Veure informació estadística sobre usuàries i objectes en el lloc',
+ 'admin:statistics:label:numusers' => 'Quantitat d´usuàries',
+ 'admin:statistics:label:numonline' => 'Quantitat d´usuàries connectades',
+ 'admin:statistics:label:onlineusers' => 'Usuàries connectades ara mateix',
+ 'admin:statistics:label:version:release' => 'Alliberament',
+ 'admin:server:label:post_max_size' => 'Mida màxima del POST',
+ 'admin:server:label:upload_max_filesize' => 'Mida màxima de la pujada',
+ 'admin:server:warning:post_max_too_small' => '(Nota: post_max_size ha de ser més gran que aquest valor per suportar càrregues d\'aquesta mida)',
+ 'admin:user:label:search' => 'Trobar usuàries:',
+ 'admin:user:ban:no' => 'No pot bloquejar aquesta usuària',
+ 'admin:user:ban:yes' => 'Usuària bloquejada',
+ 'admin:user:unban:no' => 'No es pot desbloquejar aquesta usuària',
+ 'admin:user:unban:yes' => 'Usuària desbloquejada',
+ 'admin:user:delete:no' => 'No es pot eliminar aquesta usuària',
+ 'admin:user:delete:yes' => 'La usuària %s ha estat eliminada',
+ 'admin:user:self:delete:no' => 'No pots eliminar-te a tu mateixa',
+ 'admin:user:resetpassword:yes' => 'Contrasenya restablerta. Es notificarà a l´usuària.',
+ 'admin:user:resetpassword:no' => 'No és possible restablir la contrasenya.',
+ 'admin:user:makeadmin:yes' => 'La usuària s\'ha convertit en administradora.',
+ 'admin:user:makeadmin:no' => 'No s\'ha pogut convertir la usuària en administradora',
+ 'admin:user:removeadmin:yes' => 'La usuària ja no és administradora',
+ 'admin:user:removeadmin:no' => 'No es poden eliminar els privilegis d\'administradora a aquesta usuària.',
+ 'admin:add_menu_item:description' => 'Completa el nom per mostrar i l´adreça URL per afegir un element de menú personalizat',
+ 'admin:default_widgets:instructions' => 'Afegir, esborrar, moure i configurar els giny per defecte a la pàgina de giny seleccionada. Aquests canvis només tindran efecte en les noves usuàries',
+ 'usersettings:description' => 'El panell de configuració permet parametritzar les teves preferències personals, des de l\'administració d\'usuàries al comportament de les extensions. Selecciona una opció a sota per començar.',
+ 'usersettings:statistics' => 'Les teves estadístiques',
+ 'usersettings:statistics:opt:description' => 'Veure informació estadística \'´usuàries i d\'objectes a la xarxa',
+ 'usersettings:user' => 'Les teves preferències',
+ 'usersettings:user:opt:description' => 'Això et permetrà establir les teves preferències.',
+ 'usersettings:user:opt:linktext' => 'Modificar les teves preferències',
+ 'usersettings:plugins:opt:description' => 'Preferències de configuració per a les teves eines actives',
+ 'usersettings:plugins:opt:linktext' => 'Configura les teves eines',
+ 'usersettings:plugins:description' => 'Aquest panell et permetrà establir les teves preferències personals per les eines habilitades per l\'administradora del sistema.',
+ 'usersettings:statistics:label:numentities' => 'El teu contingut',
+ 'usersettings:statistics:yourdetails' => 'Els teus detalls',
+ 'river:friends' => 'Activitat de les amigues',
+ 'friends:widget:description' => 'Mostra alguna de les teves amigues.',
+ 'friends:num_display' => 'Quantitat d\'amigues a mostrar',
+ 'saving' => 'Desant...',
+ 'remove' => 'Eliminar',
+ 'revert' => 'Revertir',
+ 'back' => 'Enrere',
+ 'makeadmin' => 'Fer administradora',
+ 'removeadmin' => 'Esborrar administradora',
+ 'active' => 'Activa',
+ 'content:latest:blurb' => 'Opcionalment, clica aquí per veure el contingut més recent de tota la xarxa',
+ 'question:areyousure' => 'Estàs segur?',
+ 'on' => 'Encès',
+ 'off' => 'Apagat',
+ 'deleteconfirm' => 'Està segur de voler eliminar aquest objecte?',
+ 'deleteconfirm:plural' => 'Estàs segur de voler eliminar aquests objectes?',
+ 'fileexists' => 'L\'arxiu ja ha estat carregat. Per substituir-lo, selecciona:',
+ 'useradd:subject' => 'Compte d´usuària creat',
+ 'useradd:body' => '%s,
+
+El teu compte d´usuària ha estat creat a %s. Per iniciar la sessió visita:
+
+%s
+
+i inicia sessió amb les següents credencials:
+
+Usuària: %s
+Contrasenya: %s
+
+Un cop identificada, et recomanem que modifiquis la teva contrasenya.',
+ 'systemmessages:dismiss' => 'clica per tancar',
+ 'installation:dataroot:warning' => 'Has de crear aquest directori manualment. S\'ha de trobar en un directori diferent al de la instal·lació d\'Elgg',
+ 'installation:sitepermissions' => 'Permisos d\'accés per defecte:',
+ 'installation:debug' => 'El mode Debug proveeix informació extra que es pot utilizar per evaluar eventualitats. Pot fer més lent el funcionament del sistema i s\'ha d\'utilitzar només quan es detectin problemes:',
+ 'installation:debug:error' => 'Mostra només errors crítics',
+ 'installation:debug:warning' => 'Mostra només alertes crítiques',
+ 'installation:debug:notice' => 'Mostra totes les errades, alertes i informacions d´esdeveniments',
+ 'installation:registration:description' => 'El registre d\'usuàries està actiu per defecte. Desactiva\'l si no vols que es puguin registrar noves usuàries.',
+ 'installation:registration:label' => 'Permet que es registrin noves usuàries',
+ 'installation:walled_garden:description' => 'Habilitar el lloc perquè s´executi com una xarxa privada. Això impedirà a usuàries no registrats visualitzar qualsevol pàgina del lloc, excepte les establertes com a públiques',
+ 'installation:walled_garden:label' => 'Restringeix les pàgines a les usuàries connectades.',
+ 'installation:httpslogin' => 'Habilitar aquesta opció perquè les usuàries s´identifiquin mitjançant HTTPS. Necessitaràs habilitar HTTPS també al servidor perquè funcioni',
+ 'installation:view' => 'Ingressa la vista que es visualitzará per defecte en el lloc o deixa-ho en blanc per la vista per defecte (si tens dubtes, deixa-ho per defecte):',
+ 'installation:allow_user_default_access:description' => 'Si se selecciona, es permetrà a les usuàries establir el seu nivell d´accés per defecte i pot sobreescriure els nivells d´accés del sistema',
+ 'installation:allow_user_default_access:label' => 'Permetre l\'accés per defecte de les usuàries',
+ 'installation:simplecache:description' => 'La memòria cau simple augmenta el rendiment perquè emmagatzema contingut estàtic, com fulls CSS i arxius JavaScript. Habitualment es desitja que aquesta opció estigui activada.',
+ 'installation:simplecache:label' => 'Utilitzar memòria cau simple (recomanat)',
+ 'installation:systemcache:description' => 'La memòria cau del sistema disminueix el temps de càrrega de l\'Elgg posant les dades a arxius.',
+ 'installation:systemcache:label' => 'Utilitza la memòria del sistema (recomanat)',
+ 'upgrading' => 'Actualizant...',
+ 'upgrade:unable_to_upgrade_info' => 'No es pot actualizar perquè s´han detectat vistes antigues en el directori de vistes del nucli d´Elgg. Aquestes vistes han quedat obsoletes i s´han d´esborrar perquè Elgg funcioni correctament. Si no ha fet canvis al nucli d´Elgg, elimini només el directori de vistes (views) i substitueixi´l amb l´últim paquet d´instal·lació descarregat d´<a href="http://elgg.org">elgg.org</a>.<br>
+ <br>
+
+ Si necessites instruccions detallades, visita la <a href="http://docs.elgg.org/wiki/Upgrading_Elgg">
+ Documentació d´actualizació d´Elgg</a>. Si necessita assistència, si us plau vagi als <a href="http://community.elgg.org/pg/groups/discussion/">Fòrums de Suport de la Comunitat</a>',
+ 'friend:newfriend:subject' => '%s t´ha fet una de les seves amigues!',
+ 'actiongatekeeper:uploadexceeded' => 'La mida de(ls) arxiu(s) pujat(s) excedeix el límit establert per l\'administrador del lloc',
+ 'ar' => 'Àrab',
+ 'bg' => 'Búlgar',
+ 'bo' => 'Tibetà',
+ 'br' => 'Bretó',
+ 'ca' => 'Català',
+ 'cs' => 'Txec',
+ 'da' => 'Danès',
+ 'de' => 'Alemany',
+ 'el' => 'Grec',
+ 'en' => 'Anglès',
+ 'eu' => 'Basc',
+ 'fi' => 'Finès',
+ 'fr' => 'Francès',
+ 'ga' => 'Irlandès',
+ 'gd' => 'Escocès / Gaelic',
+ 'gl' => 'Gallec',
+ 'gn' => 'Guaraní',
+ 'he' => 'Hebreu',
+ 'hu' => 'Hungarès',
+ 'hy' => 'Armeni',
+ 'it' => 'Italià',
+ 'iw' => 'Hebreu (obsolet)',
+ 'ja' => 'Japonès',
+ 'ji' => 'Yiddish (obsolee)',
+ 'ko' => 'Coreà',
+ 'ku' => 'Kurd',
+ 'la' => 'Llatí',
+ 'lt' => 'Lituà',
+ 'mi' => 'Maorí',
+ 'mk' => 'Macedoni',
+ 'no' => 'Noruec',
+ 'oc' => 'Occità',
+ 'pl' => 'Polonès',
+ 'pt' => 'Portuguès',
+ 'qu' => 'Quèxua',
+ 'ru' => 'Rus',
+ 'sa' => 'Sànscrit',
+ 'sl' => 'Eslovè',
+ 'so' => 'Somalí',
+ 'sq' => 'Albanès',
+ 'sr' => 'Serbi',
+ 'tr' => 'Turc',
+ 'ur' => 'Urdú',
+ 'zh' => 'Xinès',
+ 'zu' => 'Zulú',
+ 'dashboard' => 'Escriptori',
+ 'widgets:add' => 'Afegir giny',
+ 'widget:unavailable' => 'Ja has afegit aquest giny',
+ 'widget:edit' => 'Personalitza el giny',
+ 'widgets' => 'Ginys',
+ 'widget' => 'Giny',
+ 'item:object:widget' => 'Ginys',
+ 'widgets:add:success' => 'El giny s\'ha afegit correctament.',
+ 'widgets:add:failure' => 'No es pot afegir el giny.',
+ 'widgets:move:failure' => 'No es pot guardar la nova posició del giny.',
+ 'widgets:remove:failure' => 'El giny no s\'ha pogut eliminar',
+ 'admin:widget:admin_welcome' => 'Benvinguda',
+ 'admin:plugins:category:widget' => 'Ginys',
+ 'admin:appearance:default_widgets' => 'Giny per defecte',
+ 'admin:default_widgets:unknown_type' => 'Tipus de giny desconegut',
+ 'profile:twitter' => 'Nom d\'usuària al twitter',
+ 'ElggPlugin:NoPluginPackagePackage' => 'ElggPluginPackage falta per a l\'extensió amb ID %s (guid %s)',
+ 'ElggPluginPackage:InvalidPlugin:CircularDep' => 'Dependència %s invàlida "%s" a l\'extensió %s. Les extensions no poden entrar en conflicte amb altres de requerits!',
+ 'PluginException:ParserError' => 'Error en processar el manifest amb versió d´ API %s a l\'extensió %s',
+ 'PluginException:NoAvailableParser' => 'No s´ha pogut trobar un processador per al manifest de la versió de l´ API %s a l\'extensió %s',
+ 'PluginException:ParserErrorMissingRequiredAttribute' => 'Falta l´atribut \'%s\' al manifest de l\'extensió %s',
+ 'ClassNotFoundException:MissingClass' => 'Classe \'%s\' no trobada, Falta alguna extensió?',
+ 'admin:plugins:category:bundled' => 'Inclosa',
+ 'admin:plugins:activate_all' => 'Activar totes',
+ 'admin:plugins:deactivate_all' => 'Desactivar totes',
+ 'admin:plugins:opt:linktext' => 'Configurar eines...',
+ 'entity:default:missingsupport:popup' => 'Aquesta entitat no es pot mostrar correctament. Això pot ser perquè el suport de l\'extensió ja no es troba instal·lat',
+ 'actiongatekeeper:pluginprevents' => 'Una extensió d´aquest formulari ha evitat que s\'enviï el formulari',
+ 'add' => 'Afegeix',
+ 'login:baduser' => 'No és possible carregar el teu compte.',
+ 'actionnotfound' => 'No s\'ha trobat el fixter d\'acció per a %s',
+ 'InstallationException:MissingLibrary' => 'No s\'ha pogut carregar %s',
+ 'InstallationException:CannotLoadSettings' => 'Elgg no pot carregar el fitxer de configuració. No existeix o hi ha algun problema amb el sistema de permisos.',
+ 'DatabaseException:InvalidQuery' => 'Consulta invàlida',
+ 'PluginException:CannotStart' => '%s (guid: %s) no es pot iniciar i ha estat desactivat. Raó: %s',
+ 'PluginException:InvalidID' => '%s es un ID invàlid per una extensió.',
+ 'PluginException:InvalidPath' => '%s es una ruta invàlida per una extensió.',
+ 'PluginException:InvalidManifest' => 'El fitxer de manifest no és vàlid per la extensió %s',
+ 'PluginException:InvalidPlugin' => '%s no es una extensió vàlida.',
+ 'PluginException:InvalidPlugin:Details' => '%s no és una extensió vàlida: %s',
+ 'PluginException:NullInstantiated' => 'ElggPlugin no pot ser instancialitzat amb un valor nul. Li has de passar un GUID, un ID d\'una extensió o una ruta absoluta.',
+ 'ElggPlugin:MissingID' => 'Falta l\'ID de l\'extensió (guid %s)',
+ 'ElggPluginPackage:InvalidPlugin:MissingFile' => 'Falta el fitxer %s al paquet',
+ 'ElggPluginPackage:InvalidPlugin:InvalidDependency' => 'Tipus de dependència invàlid "%s"',
+ 'ElggPlugin:Exception:NoID' => 'L\'extensió amb guid %s no té ID!',
+ 'ElggPlugin:Dependencies:Requires' => 'Requereix',
+ 'ElggPlugin:Dependencies:Conflicts' => 'Té conflictes amb',
+ 'ElggPlugin:Dependencies:Conflicted' => 'Està en conflicte amb',
+ 'ElggPlugin:Dependencies:Provides' => 'Proveeix',
+ 'ElggPlugin:Dependencies:Priority' => 'Prioritat',
+ 'ElggPlugin:Dependencies:Elgg' => 'Versió d\'Elgg',
+ 'ElggPlugin:Dependencies:PhpExtension' => 'Extensió PHP: %s',
+ 'ElggPlugin:Dependencies:Plugin' => 'Extensió: %s',
+ 'ElggPlugin:Dependencies:Priority:After' => 'Després de %s',
+ 'ElggPlugin:Dependencies:Priority:Before' => 'Abans de %s',
+ 'ElggPlugin:Dependencies:Priority:Uninstalled' => '%s no està instal·lat',
+ 'ElggPlugin:Dependencies:Suggests:Unsatisfied' => 'Es troba a faltar',
+ 'ElggPlugin:InvalidAndDeactivated' => '%s és una extensió invàlida i s\'ha desactivat',
+ 'InvalidParameterException:LibraryNotRegistered' => '%s no és una llibreria registrada',
+ 'InvalidParameterException:LibraryNotFound' => 'No s\'ha pogut carregar la llibreria %s des de %s',
+ 'InvalidParameterException:UnrecognisedHttpMethod' => 'No es reconeix el mètode http %s per al mètode de l\'api \'%s\'',
+ 'APIException:FunctionDoesNotExist' => 'La funció de mètode \'%s\' no es pot cridar',
+ 'APIException:MissingNonce' => 'Falta la capçalera X-Elgg-nonce',
+ 'RegistrationException:EmptyPassword' => 'Els camps de contrasenya no poden estar buits',
+ 'RegistrationException:PasswordMismatch' => 'Les contrasenyes han de coincidir',
+ 'LoginException:PasswordFailure' => 'No pots entrar. Si us plau, revisa la teva contrasenya.',
+ 'viewfailure' => 'Hi ha un error intern en la vista %s',
+ 'changebookmark' => 'Si us plau, canvia l\'enllaç que tens per aquesta pàgina',
+ 'noaccess' => 'El contingut ha estat eliminat, es invàlid o no tens permisos per veure\'l.',
+ 'error:default' => 'Ups... alguna cosa a anat molt malament',
+ 'error:404' => 'Perdona, no podem trobar la pàgina que estàs buscant.',
+ 'access:limited:label' => 'Limitat',
+ 'access:help' => 'El nivell d\'accés',
+ 'widget:numbertodisplay' => 'Nombre d\'elements a mostrar',
+ 'widget:delete' => 'Elimina %s',
+ 'collections:add' => 'Nova col·lecció',
+ 'friends:collections:edited' => 'Col·lecció guardada',
+ 'friends:collection:edit_failed' => 'No s\'ha pogut guardar la col·lecció',
+ 'avatar' => 'Avatar',
+ 'avatar:create' => 'Crea el teu avatar',
+ 'avatar:edit' => 'Edita l\'avatar',
+ 'avatar:preview' => 'Previsualitza',
+ 'avatar:upload' => 'Puja un nou avatar',
+ 'avatar:current' => 'Avatar actual',
+ 'avatar:crop:title' => 'Eina de retallat d\'avatars',
+ 'avatar:upload:instructions' => 'El teu avatar es mostrat per tot el lloc. Pots canviar-lo tant sovint com vulguis. (Formats de fitxer acceptats: GIF, JPG o PNG)',
+ 'avatar:create:instructions' => 'Clica i arrossega un quadrat per ajustar per on vols que es retalli l\'avatar. Una previsualització apareixerà a la caixa de la dreta. Quan estiguis satisfeta amb la previsualització, clica a \'Crea l\'avatar\'. La versió retallada serà la usada arreu del lloc com el teu avatar.',
+ 'avatar:upload:success' => 'L\'avatar s\'ha pujat correctament',
+ 'avatar:upload:fail' => 'Ha fallat la pujada de l\'avatar',
+ 'avatar:resize:fail' => 'Ha fallat el redimensionament de l\'avatar',
+ 'avatar:crop:success' => 'S\'ha retallat l\'avatar correctament',
+ 'avatar:crop:fail' => 'No s\'ha pogut retallar l\'avatar',
+ 'profile:field:text' => 'Text curt',
+ 'profile:field:longtext' => 'Àrea de text',
+ 'profile:field:tags' => 'Etiquetes',
+ 'profile:field:url' => 'Adreça web',
+ 'profile:field:email' => 'Adreça de correu-e',
+ 'profile:field:location' => 'Lloc',
+ 'profile:field:date' => 'Data',
+ 'admin:appearance:profile_fields' => 'Edita els camps del perfil',
+ 'link:view:all' => 'Veure tot',
+ 'river:update:user:avatar' => '%s té un nou avatar',
+ 'river:update:user:profile' => '%s ha actualitzat el seu perfil',
+ 'river:ingroup' => 'en el grup %s',
+ 'river:none' => 'Sense activitat',
+ 'river:widget:title' => 'Activitat',
+ 'river:widget:description' => 'Mosta la última activitat',
+ 'river:widget:type' => 'Tipus d\'activitat',
+ 'river:widgets:all' => 'Activitat de tot el lloc',
+ 'notification:method:email' => 'Correu-e',
+ 'settings:edit' => 'Edita la configuració',
+ 'register:fields' => 'Tots els camps són necessaris',
+ 'user:current_password:label' => 'Contrasenya actual',
+ 'walled_garden:welcome' => 'Benvingut a',
+ 'menu:page:header:administer' => 'Administra',
+ 'menu:page:header:configure' => 'Configura',
+ 'menu:page:header:develop' => 'Desenvolupa',
+ 'menu:page:header:default' => 'Altres',
+ 'admin:view_site' => 'Veure el lloc',
+ 'admin:loggedin' => 'Has entrat com a %s',
+ 'admin:menu' => 'Menú',
+ 'admin:unknown_section' => 'Secció d\'administració invàlida.',
+ 'admin:statistics:server' => 'Informació del servidor',
+ 'admin:administer_utilities' => 'Utilitats',
+ 'admin:develop_utilities' => 'Utilitats',
+ 'admin:users:newest' => 'Nouvinguts',
+ 'admin:settings' => 'Configuració',
+ 'admin:settings:basic' => 'Configuració bàsica',
+ 'admin:dashboard' => 'Escriptori',
+ 'admin:widget:new_users' => 'Nouvinguts',
+ 'admin:widget:new_users:help' => 'Llista dels nouvinguts',
+ 'admin:widget:content_stats' => 'Estadístiques del contingut',
+ 'widget:content_stats:type' => 'Tipus de contingut',
+ 'widget:content_stats:number' => 'Nombre',
+ 'admin:widget:admin_welcome:help' => 'Petita introducció a l\'àrea d\'administració d\'Elgg',
+ 'admin:widget:admin_welcome:intro' => 'Benvingut a Elgg! Ara mateix estàs al panell d\'administració. És útil per mirar què està passant al lloc ara mateix.',
+ 'admin:widget:control_panel' => 'Panell de control',
+ 'admin:cache:flush' => 'Neteja la memòria cau',
+ 'admin:cache:flushed' => 'La memòria cau del lloc s\'ha netejat',
+ 'admin:footer:faq' => 'Preguntes freqüents d\'administració',
+ 'admin:footer:community_forums' => 'Fòrums de la Comunitat d\'Elgg',
+ 'admin:footer:blog' => 'Blog d\'Elgg',
+ 'admin:plugins:category:all' => 'Totes les extensions',
+ 'admin:plugins:category:active' => 'Extensions actives',
+ 'admin:plugins:category:inactive' => 'Extensions inactives',
+ 'admin:plugins:category:admin' => 'Administració',
+ 'admin:plugins:category:content' => 'Contingut',
+ 'admin:plugins:category:development' => 'Desenvolupament',
+ 'admin:plugins:category:enhancement' => 'Millores',
+ 'admin:plugins:category:api' => 'Servei/API',
+ 'admin:plugins:category:communication' => 'Comunicació',
+ 'admin:plugins:category:security' => 'Seguretat i Spam',
+ 'admin:plugins:category:social' => 'Social',
+ 'admin:plugins:category:multimedia' => 'Multimèdia',
+ 'admin:plugins:category:theme' => 'Temes',
+ 'admin:plugins:category:utility' => 'Utilitats',
+ 'admin:plugins:sort:priority' => 'Prioritat',
+ 'admin:plugins:sort:alpha' => 'Alfabèticament',
+ 'admin:plugins:sort:date' => 'Més nou',
+ 'admin:plugins:markdown:unknown_plugin' => 'Extensió desconeguda.',
+ 'admin:plugins:markdown:unknown_file' => 'Fitxer desconegut.',
+ 'admin:notices:could_not_delete' => 'No es pot eliminar l\'avís.',
+ 'admin:options' => 'Opcions d\'administració',
+ 'plugins:settings:save:ok' => 'La configuració de l\'extensió %s s\'ha desat correctament.',
+ 'plugins:settings:save:fail' => 'Hi ha hagut un problema al desar la configuració de l\'extensió %s.',
+ 'plugins:usersettings:save:fail' => 'Hi ha hagut un problema al desar la configuració de l\'extensió %s.',
+ 'item:object:plugin' => 'Extensions',
+ 'admin:plugins' => 'Extensions',
+ 'admin:plugins:activate' => 'Activar',
+ 'admin:plugins:deactivate' => 'Desactivar',
+ 'admin:plugins:label:categories' => 'Categories',
+ 'admin:plugins:label:location' => 'Lloc',
+ 'admin:plugins:label:dependencies' => 'Dependències',
+ 'admin:plugins:warning:elgg_version_unknown' => 'Aquesta extensió utilitza un fitxer de manifest antic i no especifica amb quina versió d\'Elgg és compatible. Possiblement no funcionarà!',
+ 'admin:plugins:cannot_activate' => 'no es pot activar',
+ 'admin:plugins:set_priority:yes' => 'S\'ha reorganitzat %s.',
+ 'admin:plugins:set_priority:no' => 'No s\'ha pogut reorganitzar %s.',
+ 'admin:plugins:set_priority:no_with_msg' => 'No s\'ha pogut reorganitzar %s. Error: %s',
+ 'admin:plugins:deactivate:yes' => 'S\'ha desactivat %s.',
+ 'admin:plugins:deactivate:no' => 'No s\'ha pogut desactivar %s.',
+ 'admin:plugins:deactivate:no_with_msg' => 'No s\'ha pogut desactivar %s. Error: %s',
+ 'admin:plugins:activate:yes' => 'Activat %s.',
+ 'admin:plugins:activate:no' => 'No s\'ha pogut activar %s.',
+ 'admin:plugins:activate:no_with_msg' => 'No s\'ha pogut activar %s. Error: %s',
+ 'admin:plugins:categories:all' => 'Totes les categories',
+ 'admin:plugins:plugin_website' => 'Lloc web de l\'extensió',
+ 'admin:plugins:author' => '%s',
+ 'admin:plugins:version' => 'Versió %s',
+ 'admin:plugin_settings' => 'Configuració de l\'extensió',
+ 'admin:plugins:warning:unmet_dependencies_active' => 'L\'extensió està activa però té dependènices sense resoldre. És una bomba de rellotgeria, mira "més info" a baix per més detalls.',
+ 'admin:plugins:dependencies:type' => 'Tipus',
+ 'admin:plugins:dependencies:name' => 'Nom',
+ 'admin:plugins:dependencies:expected_value' => 'Valor esperat',
+ 'admin:plugins:dependencies:local_value' => 'Valor actual',
+ 'admin:plugins:dependencies:comment' => 'Comentari',
+ 'admin:server:label:php' => 'PHP',
+ 'admin:server:label:web_server' => 'Servidor web',
+ 'admin:server:label:server' => 'Servidor',
+ 'admin:server:label:log_location' => 'Ruta del log',
+ 'admin:server:label:php_version' => 'Versió PHP',
+ 'admin:server:label:php_ini' => 'Ruta del fitxer PHP ini',
+ 'admin:server:label:php_log' => 'Log del PHP',
+ 'admin:server:label:mem_avail' => 'Memòria disponible',
+ 'admin:server:label:mem_used' => 'Memòria usada',
+ 'admin:server:error_log' => 'Log d\'errors del servidor web',
+ 'admin:user:self:ban:no' => 'No et pots bloquejar a tu mateix',
+ 'admin:user:self:removeadmin:no' => 'No pots eliminar-te els teus propis privilegis d\'administració.',
+ 'admin:appearance:menu_items' => 'Elements del menú',
+ 'admin:menu_items:configure' => 'Configura els elements del menú principal',
+ 'admin:menu_items:description' => 'Selecciona quins elements de menú vols mostrar com a importants. Els elements no usats estaran al menú "Més", al final de la llista.',
+ 'admin:menu_items:hide_toolbar_entries' => 'Elimina els enllaços del menú de la barra d\'eines?',
+ 'admin:menu_items:saved' => 'Elements de menú guardats.',
+ 'admin:add_menu_item' => 'Afegeix un element de menú personalitzat',
+ 'river:all' => 'Activitat del lloc',
+ 'river:mine' => 'Activitat personal',
+ 'river:select' => 'Mostra %s',
+ 'river:comments:more' => '+%u més',
+ 'river:generic_comment' => 'ha comentat a %s %s',
+ 'friends:icon_size' => 'Mida de la icona: <br>',
+ 'banned' => 'Bloquejat',
+ 'comment' => 'Comenta',
+ 'upgrade' => 'Actualitza',
+ 'sort' => 'Ordena',
+ 'filter' => 'Filtra',
+ 'new' => 'Nou',
+ 'create' => 'Crea',
+ 'activity' => 'Activitat',
+ 'members' => 'Membres',
+ 'tagcloud' => 'Núvol d\'etiquetes',
+ 'tagcloud:allsitetags' => 'Etiquetes del lloc',
+ 'edit:this' => 'Edita',
+ 'delete:this' => 'Elimina',
+ 'comment:this' => 'Comenta',
+ 'upgrade:unable_to_upgrade' => 'No es pot actualitzar.',
+ 'update:twitter_api:deactivated' => 'Twitter API (abans Twitter Service) ha estat desactivat durant l\'actualització. Si us plau, activa\'l manualment si és necessari.',
+ 'update:oauth_api:deactivated' => 'OAuth API (antes OAuth Lib) ha estat desactivada durant l\'actualització. Si us plau, activa\'l manualment si és necessari.',
+ 'deprecated:function' => '%s() està desactualitzada i ara s\'usa %s()',
+ 'generic_comments:latest' => 'Últims comentaris',
+ 'generic_comment:none' => 'No hi ha comentaris',
+ 'generic_comment:title' => 'Comentat per %s',
+ 'byline' => 'Per %s',
+ 'tags:site_cloud' => 'Núvol d\'etiquetes del lloc',
+ 'js:security:token_refresh_failed' => 'No es pot connectar a %s. Experimentaràs problemes quan vulguis guardar continguts.',
+ 'js:security:token_refreshed' => 'La connexió a %s s\'ha restablert!',
+ 'item:site' => 'Llocs',
+ 'logoutok' => 'S&acute;ha tancat la sessió',
+ 'exception:title' => 'Error Fatal',
+ 'actionundefined' => 'L&acute;acció (%s) sol&middot;licitada no es troba definida en el sistema',
+ 'actionloggedout' => 'Ens sap greu, no es pot fer aquesta acció sense identificar-se abans',
+ 'SecurityException:Codeblock' => 'Accés denegat per l&acute;execució de bloc de codi privilegiat',
+ 'SecurityException:FunctionDenied' => 'Accés denegat a la funció privilegiada \'%s\'',
+ 'DatabaseException:DBSetupIssues' => 'S&acute;han trobat algunes errades: ',
+ 'DatabaseException:ScriptNotFound' => 'No ha estat possible trobar l&acute;script de base de dades %s',
+ 'IOException:FailedToLoadGUID' => 'Error en carregar una nova %s de GUID: %d',
+ 'InvalidParameterException:NonElggObject' => 'Passant un no-ElggObject a un constructor ElggObject!',
+ 'InvalidParameterException:UnrecognisedValue' => 'No es reconeix el valor que s&acute;ha passat al constructor',
+ 'InvalidClassException:NotValidElggStar' => 'GUID: %d no és un %s v&agrave;lid',
+ 'ElggPluginPackage:InvalidPlugin:InvalidProvides' => 'Tipus "%s" prove&iuml;t no v&agrave;lid',
+ 'ElggPlugin:Dependencies:PhpIni' => 'Configuració PHP ini: %s',
+ 'InvalidParameterException:NonElggUser' => 'Passant un no-ElggUser a un constructor ElggUser!',
+ 'InvalidParameterException:NonElggSite' => 'Passant un no-ElggSite a un constructor ElggSite!',
+ 'InvalidParameterException:NonElggGroup' => 'Passant un no-ElggGroup a un constructor ElggGroup!',
+ 'IOException:UnableToSaveNew' => 'No s&acute;ha pogut desar un nou %s',
+ 'InvalidParameterException:NonArrayReturnValue' => 'Funció de serialització d&acute;entitat passada a un par&agrave;metre de retorn no-array',
+ 'IOException:NotDirectory' => '%s no és un directori',
+ 'IOException:BaseEntitySaveFailed' => 'No s&acute;ha pogut desar una nova entitat!',
+ 'InvalidParameterException:EntityTypeNotSet' => 'S&acute;ha de setejar el tipus d&acute;entitat',
+ 'ClassException:ClassnameNotClass' => '%s no és un %s',
+ 'ImportException:ImportFailed' => 'No s&acute;ha pogut importar l&acute;element %d',
+ 'ImportException:ProblemSaving' => 'S&acute;ha trobat un problema en desar %s',
+ 'ImportException:ProblemUpdatingMeta' => 'Hi ha hagut un error en actualizar \'%s\' a l&acute;entitat \'%d\'',
+ 'ExportException:NoSuchEntity' => 'GUID d&acute;entitat no v&agrave;lid: %d',
+ 'InvalidParameterException:UnrecognisedFileMode' => 'Mode d&acute;arxiu \'%s\' no reconegut',
+ 'InvalidParameterException:MissingOwner' => 'L&acute;arxiu %s (guid: %d) (guid del propietari: %d) no té un propietari!',
+ 'IOException:CouldNotMake' => 'No es pot fer %s',
+ 'NotificationException:ErrorNotifyingGuid' => 'Hi ha hagut un error en notificar %d',
+ 'NotificationException:NoEmailAddress' => 'No s&acute;ha pogut carregar l&acute;adre&ccedil;a de correu per al GUID:%d',
+ 'NotificationException:MissingParameter' => 'Falta el par&agrave;metre requerit: \'%s\'',
+ 'DatabaseException:WhereSetNonQuery' => 'On no contingui WhereQueryComponent',
+ 'DatabaseException:SelectFieldsMissing' => 'Falten camps a l&acute;estil de la consulta',
+ 'DatabaseException:NoACL' => 'No s&acute;ha especificat el control d\'accés en la consulta',
+ 'InvalidParameterException:IdNotExistForGUID' => 'Ens sap greu, \'%s\' no existeix per al guid: %d',
+ 'InvalidParameterException:NoDataFound' => 'No s&acute;han trobat resultats',
+ 'InvalidParameterException:DoesNotBelong' => 'No pertany a l&acute;entitat',
+ 'InvalidParameterException:DoesNotBelongOrRefer' => 'No pertany o no es refereix a l&acute;entitat',
+ 'InvalidParameterException:MissingParameter' => 'Falta un par&agrave;metre. Ha de proveir un GUID',
+ 'InvalidParameterException:APIMethodOrFunctionNotSet' => 'M&egrave;tode o funció no especificada a l&acute;hora de cridar expose_method()',
+ 'InvalidParameterException:APIParametersArrayStructure' => 'Les estructures d&acute;Array no són v&agrave;lides en les crides a la funció \'%s\'',
+ 'APIException:MissingParameterInMethod' => 'Falta un par&agrave;metre %s al m&egrave;tode %s',
+ 'APIException:UnrecognisedTypeCast' => 'Tipus no reconegut al casteig %s per a la variable \'%s\' en el m&egrave;tode \'%s\'',
+ 'APIException:FunctionParseError' => '%s(%s) té un error de processament',
+ 'APIException:FunctionNoReturn' => '%s(%s) no ha tornat cap valor',
+ 'APIException:APIAuthenticationFailed' => 'La crida al m&egrave;tode ha fallat en la identificació de l&acute;API',
+ 'CallException:InvalidCallMethod' => '%s ha de ser cridat utilitzant \'%s\'',
+ 'APIException:MethodCallNotImplemented' => 'La crida al m&egrave;tode \'%s\' no es troba implementada',
+ 'APIException:AlgorithmNotSupported' => 'No se suporta o s&acute;ha deshabilitat l&acute;algoritme \'%s\'',
+ 'APIException:NotGetOrPost' => 'El m&egrave;tode de Request ha de ser GET o POST',
+ 'APIException:MissingAPIKey' => 'Falta una clau API',
+ 'APIException:BadAPIKey' => 'Clau API incorrecta',
+ 'APIException:MissingHmac' => 'Falta l&acute;encap&ccedil;alat X-Elgg-hmac',
+ 'APIException:MissingHmacAlgo' => 'Falta l&acute;encap&ccedil;alat X-Elgg-hmac-algo',
+ 'APIException:MissingTime' => 'Falta l&acute;encap&ccedil;alat X-Elgg-time',
+ 'APIException:NoQueryString' => 'No hi ha dades a la query string',
+ 'APIException:MissingPOSTHash' => 'Falta l&acute;encap&ccedil;alat X-Elgg-posthash',
+ 'APIException:MissingPOSTAlgo' => 'Falta l&acute;encap&ccedil;alat X-Elgg-posthash_algo',
+ 'APIException:MissingContentType' => 'Falta content type per a post data',
+ 'CallException:NotRPCCall' => 'La crida no sembla ser una crida XML-RPC v&agrave;lida',
+ 'system.api.list' => 'Llista de totes les crides API disponibles en el sistema',
+ 'name' => 'Nom',
+ 'password' => 'Contrasenya',
+ 'passwordagain' => 'Contrasenya (una altra vegada, per verificar)',
+ 'PRIVATE' => 'Privat',
+ 'PUBLIC' => 'Tothom',
+ 'access:friends:label' => 'Contacte',
+ 'access' => 'Accés',
+ 'widgets:position:fixed' => '(Posició fixa a la p&agrave;gina)',
+ 'group' => 'Grup',
+ 'item:group' => 'Grups',
+ 'friends:collectionname' => 'Nom de la col&middot;lecció',
+ 'friends:collectionedit' => 'Editar aquesta col&middot;lecció',
+ 'friends:nocollections' => 'Encara no tens cap col&middot;lecció',
+ 'friends:collectiondeleted' => 'La col&middot;lecció ha estat eliminada',
+ 'friends:collectiondeletefailed' => 'No s&acute;ha pogut eliminar la col&middot;lecció',
+ 'friends:collectionadded' => 'La col&middot;lecció ha estat creada correctament',
+ 'friends:collections:members' => 'Membres d&acute;aquesta col&middot;lecció',
+ 'friends:collections:edit' => 'Editar col&middot;lecció',
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'profile:edit' => 'Editar perfil',
+ 'profile:aboutme' => 'Sobre mi',
+ 'profile:description' => 'Sobre mi',
+ 'profile:briefdescription' => 'Descripció curta',
+ 'profile:location' => 'Ubicació',
+ 'profile:skills' => 'Habilitats',
+ 'profile:interests' => 'Interessos',
+ 'profile:contactemail' => 'Correu de contacte',
+ 'profile:phone' => 'Tel&egrave;fon',
+ 'profile:mobile' => 'Tel&egrave;fon m&ograve;bil',
+ 'profile:website' => 'Lloc web',
+ 'profile:saved' => 'El seu perfil s&acute;ha guardat correctament',
+ 'profile:edit:default' => 'Editar camps de perfil',
+ 'profile:label' => 'Etiqueta de perfil',
+ 'profile:type' => 'Tipus de perfil',
+ 'profile:editdefault:delete:fail' => 'Hi ha hagut una errada en eliminar l&acute;element de perfil per defecte',
+ 'profile:editdefault:delete:success' => 'Element per defecte de perfil eliminat!',
+ 'profile:defaultprofile:reset' => 'Torna a inciar el perfil de sistema per defecte',
+ 'profile:resetdefault' => 'Torna a iniciar el perfil de sistema per defecte',
+ 'profile:editdefault:success' => 'Element afegit al perfil per defecte correctament',
+ 'profile:editdefault:fail' => 'No s&acute;ha pogut guardar el perfil per defecte',
+ 'feed:rss' => 'Canal RSS d&acute;actualitzacions per aquesta p&agrave;gina',
+ 'link:view' => 'Veure enlla&ccedil;',
+ 'river:posted:generic' => '%s publicat',
+ 'notifications:usersettings' => 'Configuració de notificacions',
+ 'search' => 'Cercar',
+ 'searchtitle' => 'Cercar: %s',
+ 'groups:searchtitle' => 'Cercar per grups: %s',
+ 'advancedsearchtitle' => '%s amb coincid&egrave;ncies en resultats %s',
+ 'notfound' => 'No s&acute;han trobat resultats',
+ 'next' => 'Seg&uuml;ent',
+ 'previous' => 'Anterior',
+ 'viewtype:change' => 'Modificar tipus de llista',
+ 'viewtype:list' => 'Vista de llista',
+ 'viewtype:gallery' => 'Galeria',
+ 'user:search:finishblurb' => 'Cliqui aquí per veure més',
+ 'group:search:startblurb' => 'Grups que coincideixen amb \'%s\':',
+ 'group:search:finishblurb' => 'Cliqui aquí per veure més',
+ 'search:go' => 'Anar',
+ 'account' => 'Compte',
+ 'settings' => 'Configuració',
+ 'tools' => 'Eines',
+ 'register' => 'Registrar-se',
+ 'user:set:name' => 'Configuració del nom del compte',
+ 'user:name:label' => 'El meu nom per mostrar',
+ 'user:set:password' => 'Contrasenya del compte',
+ 'user:password:label' => 'Nova contrasenya',
+ 'user:password2:label' => 'Confirmar nova contrasenya',
+ 'user:password:success' => 'Contrasenya modificada',
+ 'user:password:fail:notsame' => 'Les dues contrasenyes no coincideixen!',
+ 'user:password:fail:tooshort' => 'La contrasenya és massa curta!',
+ 'user:password:lost' => 'He oblidat la meva contrasenya',
+ 'admin' => 'Administració',
+ 'admin:statistics' => 'Estadístiques',
+ 'admin:statistics:overview' => 'Resum',
+ 'admin:plugins:opt:description' => 'Configurar les eines instal&middot;lades al lloc. ',
+ 'admin:plugins:label:author' => 'Autor',
+ 'admin:plugins:label:copyright' => 'Copyright',
+ 'admin:plugins:label:licence' => 'Llic&egrave;ncia',
+ 'admin:plugins:label:website' => 'URL',
+ 'admin:plugins:label:moreinfo' => 'més informació',
+ 'admin:plugins:label:version' => 'Versió',
+ 'admin:statistics:opt:linktext' => 'Veure estadístiques..',
+ 'admin:statistics:label:basic' => 'Estadístiques b&agrave;siques del lloc',
+ 'admin:statistics:label:numentities' => 'Entitats del lloc',
+ 'admin:statistics:label:version' => 'Versió d&acute;Elgg',
+ 'admin:statistics:label:version:version' => 'Versió',
+ 'admin:user:label:searchbutton' => 'Cercar',
+ 'usersettings:statistics:opt:linktext' => 'Estadístiques del compte',
+ 'usersettings:plugins' => 'Eines',
+ 'usersettings:statistics:label:name' => 'Nom complet',
+ 'usersettings:statistics:label:email' => 'Correu',
+ 'usersettings:statistics:label:membersince' => 'Membre des de',
+ 'usersettings:statistics:label:lastlogin' => 'últim accés',
+ 'friends:tiny' => 'diminuta',
+ 'friends:small' => 'petita',
+ 'save' => 'Desar',
+ 'reset' => 'Reiniciar',
+ 'publish' => 'Publicar',
+ 'cancel' => 'Cancel&middot;lar',
+ 'update' => 'Actualitzar',
+ 'preview' => 'Previsualitzar',
+ 'edit' => 'Editar',
+ 'delete' => 'Esborrar',
+ 'accept' => 'Acceptar',
+ 'load' => 'Carregar',
+ 'upload' => 'Pujar',
+ 'ban' => 'Bloquejar',
+ 'unban' => 'Desbloquejar',
+ 'enable' => 'Habilitar',
+ 'disable' => 'Deshabilitar',
+ 'request' => 'Sol&middot;licitud',
+ 'complete' => 'Completa',
+ 'open' => 'Obrir',
+ 'close' => 'Tancar',
+ 'reply' => 'Respondre',
+ 'more' => 'més',
+ 'comments' => 'Comentaris',
+ 'import' => 'Importar',
+ 'export' => 'Exportar',
+ 'untitled' => 'Sense títol',
+ 'help' => 'Ajuda',
+ 'send' => 'Enviar',
+ 'post' => 'Publicar',
+ 'submit' => 'Enviar',
+ 'site' => 'Lloc',
+ 'up' => 'A dalt',
+ 'down' => 'A baix',
+ 'top' => 'Primer',
+ 'bottom' => 'últim',
+ 'invite' => 'Convidar',
+ 'resetpassword' => 'Restablir contrase&ntilde;a',
+ 'option:yes' => 'Sí',
+ 'option:no' => 'No',
+ 'unknown' => 'Desconegut',
+ 'total' => 'Total',
+ 'learnmore' => 'Clic aquí per veure més',
+ 'content' => 'contingut',
+ 'content:latest' => 'activitat recent',
+ 'link:text' => 'veure enlla&ccedil;',
+ 'title' => 'Títol',
+ 'description' => 'Descripció',
+ 'tags' => 'Etiquetes',
+ 'spotlight' => 'Enfocament',
+ 'all' => 'Tot',
+ 'mine' => 'Meu',
+ 'by' => 'per',
+ 'none' => 'res',
+ 'annotations' => 'Anotacions',
+ 'relationships' => 'Relacions',
+ 'metadata' => 'Metadata',
+ 'importsuccess' => 'Importació exitosa',
+ 'importfail' => 'Error en importar dades d&acute;OpenDD',
+ 'friendlytime:justnow' => 'ara',
+ 'friendlytime:minutes' => 'fa %s minuts',
+ 'friendlytime:minutes:singular' => 'fa un minut',
+ 'friendlytime:hours' => 'fa %s hores',
+ 'friendlytime:hours:singular' => 'fa una hora',
+ 'friendlytime:days' => 'fa %s dies',
+ 'friendlytime:days:singular' => 'ahir',
+ 'friendlytime:date_format' => 'j F Y @ g:ia',
+ 'date:month:01' => 'Gener %s',
+ 'date:month:02' => 'Febrer %s',
+ 'date:month:03' => 'Mar&ccedil; %s',
+ 'date:month:04' => 'Abril %s',
+ 'date:month:05' => 'Maig %s',
+ 'date:month:06' => 'Juny %s',
+ 'date:month:07' => 'Juliol %s',
+ 'date:month:08' => 'Agost %s',
+ 'date:month:09' => 'Setembre %s',
+ 'date:month:10' => 'Octubre %s',
+ 'date:month:11' => 'Novembre %s',
+ 'date:month:12' => 'Desembre %s',
+ 'installation:sitename' => 'El nom del lloc:',
+ 'installation:sitedescription' => 'Descripció curta del lloc (opcional):',
+ 'installation:wwwroot' => 'URL del lloc:',
+ 'installation:path' => 'El path complet de la instal&middot;lació d&acute;Elgg:',
+ 'installation:dataroot' => 'El path complet del directori de dades:',
+ 'installation:language' => 'Idioma per defecte del lloc:',
+ 'installation:debug:none' => 'Desactivar mode Debug (recomanat)',
+ 'installation:httpslogin:label' => 'Habilitar identificació HTTPS',
+ 'installation:siteemail' => 'adre&ccedil;a de correu del lloc (utilizada per enviar correus des del sistema):',
+ 'installation:disableapi' => 'Elgg proveeix una API per al desenvolupament de serveis web de manera que aplicacions remotes puguin interactuar amb el lloc',
+ 'installation:disableapi:label' => 'Habilitar l&acute;API de serveis web d&acute;Elgg',
+ 'upgrade:db' => 'S&acute;ha actualitzat la base de dades',
+ 'upgrade:core' => 'S&acute;ha actualitzat la instal&middot;lació d&acute;Elgg',
+ 'welcome' => 'Benvinguda o benvingut',
+ 'welcome:user' => 'Benvinguda o benvingut %s',
+ 'email:settings' => 'Configuració de correu',
+ 'email:address:label' => 'adre&ccedil;a de correu',
+ 'email:save:success' => 'Nova adre&ccedil;a de correu desada, s&acute;ha sol&middot;licitat la verificació',
+ 'email:save:fail' => 'No s&acute;ha pogut desar la nova adre&ccedil;a de correu',
+ 'friend:newfriend:body' => '%s t&acute;ha fet un dels seus contactes!
+
+Per veure el seu perfil, cliqui aquí:
+
+%s
+
+Si us plau, no respongui aquest correu',
+ 'email:resetpassword:subject' => 'Contrasenya restablerta!',
+ 'email:resetpassword:body' => 'Hola %s,
+
+la seva contrasenya ha estat restablerta a: %s',
+ 'email:resetreq:subject' => 'Sol&middot;licitud de nova contrasenya',
+ 'email:resetreq:body' => 'Hola %s,
+
+Algú (de la direcció IP %s) ha sol&middot;licitat una nova contrasenya pel seu compte.
+
+Si ha estat vost&egrave; qui ha realitzat la petició, faci clic a l&acute;enlla&ccedil; de sota. Si no és així, ignori aquest correu.
+
+%s
+',
+ 'default_access:settings' => 'El seu nivell d&acute;accés per defecte',
+ 'default_access:label' => 'Accés per defecte',
+ 'user:default_access:success' => 'El nivell d&acute;accés per defecte ha estat desat',
+ 'user:default_access:failure' => 'El nivell d&acute;accés per defecte no s&acute;ha pogut desar',
+ 'xmlrpc:noinputdata' => 'Falten dades',
+ 'comments:count' => '%s comentaris',
+ 'riveraction:annotation:generic_comment' => '%s va comentar a %s',
+ 'generic_comments:add' => 'Comentar',
+ 'generic_comments:post' => 'Publicar un comentari',
+ 'generic_comments:text' => 'Comentar',
+ 'generic_comment:posted' => 'S&acute;ha publicat el seu comentari',
+ 'generic_comment:deleted' => 'S&acute;ha esborrat el seu comentari',
+ 'generic_comment:blank' => 'Ens sap greu, ha d&acute;ingressar algun comentari abans de poder desar-lo',
+ 'generic_comment:notfound' => 'Ens sap greu, no s&acute;ha pogut trobar l&acute;element que cercava',
+ 'generic_comment:notdeleted' => 'Ens sap greu, no s&acute;ha pogut eliminar el comentari',
+ 'generic_comment:failure' => 'Hi ha hagut una errada inesperada en intentar afegir el seu comentari. Si us plau, torni-ho a intentar',
+ 'generic_comment:email:subject' => 'Tens un comentari nou!',
+ 'generic_comment:email:body' => 'Tens un comentari nou en aquest element "%s" de %s. Dice:
+
+
+%s
+
+
+Per respondre o veure l&acute;element original, faci clic aquí:
+
+%s
+
+Per veure el perfil de %s, faci clic aquí:
+
+%s
+
+Si us plau, no respongui a aquest correu',
+ 'entity:default:strapline' => 'Creat %s per %s',
+ 'entity:delete:success' => 'L&acute;entitat %s ha estat eliminada',
+ 'entity:delete:fail' => 'L&acute;entitat %s no ha pogut ser eliminada',
+ 'actiongatekeeper:missingfields' => 'Al formulari, falten __token o camps __ts',
+ 'actiongatekeeper:tokeninvalid' => 'S&acute;ha trobat una errada (no coincid&egrave;ncia de token). Aix&ograve; probablement indiqui que la p&agrave;gina que estava utilitzant ja ha caducat. Si us plau, torni-ho a intentar',
+ 'actiongatekeeper:timeerror' => 'La p&agrave;gina que estava utilitzant ha caducat. Si us plau, recarregui-la i torni-ho a intentar',
+ '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_names:tags' => 'Etiquetes',
+ 'aa' => 'Afar',
+ 'ab' => 'Abkhazian',
+ 'af' => 'Afrikaans',
+ 'am' => 'Amharic',
+ 'as' => 'Assamese',
+ 'ay' => 'Aymara',
+ 'az' => 'Azerbaijani',
+ 'ba' => 'Bashkir',
+ 'be' => 'Byelorussian',
+ 'bh' => 'Bihari',
+ 'bi' => 'Bislama',
+ 'bn' => 'Bengali; Bangla',
+ 'co' => 'Corsican',
+ 'cy' => 'Welsh',
+ 'dz' => 'Bhutani',
+ 'eo' => 'Esperanto',
+ 'es' => 'Espa&ntilde;ol',
+ 'et' => 'Estonian',
+ 'fa' => 'Persian',
+ 'fj' => 'Fiji',
+ 'fo' => 'Faeroese',
+ 'fy' => 'Frisian',
+ 'gu' => 'Gujarati',
+ 'ha' => 'Hausa',
+ 'hi' => 'Hindi',
+ 'hr' => 'Croatian',
+ 'ia' => 'Interlingua',
+ 'id' => 'Indonesian',
+ 'ie' => 'Interlingue',
+ 'ik' => 'Inupiak',
+ 'is' => 'Icelandic',
+ 'iu' => 'Inuktitut',
+ 'jw' => 'Javanese',
+ 'ka' => 'Georgian',
+ 'kk' => 'Kazakh',
+ 'kl' => 'Greenlandic',
+ 'km' => 'Cambodian',
+ 'kn' => 'Kannada',
+ 'ks' => 'Kashmiri',
+ 'ky' => 'Kirghiz',
+ 'ln' => 'Lingala',
+ 'lo' => 'Laothian',
+ 'lv' => 'Latvian/Lettish',
+ 'mg' => 'Malagasy',
+ 'ml' => 'Malayalam',
+ 'mn' => 'Mongolian',
+ 'mo' => 'Moldavian',
+ 'mr' => 'Marathi',
+ 'ms' => 'Malay',
+ 'mt' => 'Maltese',
+ 'my' => 'Burmese',
+ 'na' => 'Nauru',
+ 'ne' => 'Nepali',
+ 'nl' => 'Dutch',
+ 'om' => '(Afan) Oromo',
+ 'or' => 'Oriya',
+ 'pa' => 'Punjabi',
+ 'ps' => 'Pashto / Pushto',
+ 'rm' => 'Rhaeto-Romance',
+ 'rn' => 'Kirundi',
+ 'ro' => 'Romanian',
+ 'rw' => 'Kinyarwanda',
+ 'sd' => 'Sindhi',
+ 'sg' => 'Sangro',
+ 'sh' => 'Serbo-Croatian',
+ 'si' => 'Singhalese',
+ 'sk' => 'Slovak',
+ 'sm' => 'Samoan',
+ 'sn' => 'Shona',
+ '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',
+ 'ts' => 'Tsonga',
+ 'tt' => 'Tatar',
+ 'tw' => 'Twi',
+ 'ug' => 'Uigur',
+ 'uk' => 'Ukrainian',
+ 'uz' => 'Uzbek',
+ 'vi' => 'Vietnamese',
+ 'vo' => 'Volapuk',
+ 'wo' => 'Wolof',
+ 'xh' => 'Xhosa',
+ 'yi' => 'Yiddish',
+ 'yo' => 'Yoruba',
+ 'za' => 'Zuang',
+ 'ConfigurationException:NoCachePath' => 'El directori de la memòria cau està sense configurar!',
+ 'ConfigurationException:CacheDirNotSet' => 'No s\'ha configurat el directori de la Cau \'cache_path\'.',
+ 'email' => 'Correu electrònic de contacte',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.custom_index.php b/mod/languages/languages/ca/ca.custom_index.php
new file mode 100644
index 000000000..9fff2e811
--- /dev/null
+++ b/mod/languages/languages/ca/ca.custom_index.php
@@ -0,0 +1,11 @@
+<?php
+$ca = array (
+ 'custom:bookmarks' => 'Favorits més recents',
+ 'custom:groups' => 'Grups més recents',
+ 'custom:files' => 'Arxius pujats més recents',
+ 'custom:blogs' => 'Entrades més recents',
+ 'custom:members' => 'Membres nous de la xarxa',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.dashboard.php b/mod/languages/languages/ca/ca.dashboard.php
new file mode 100644
index 000000000..e902d9138
--- /dev/null
+++ b/mod/languages/languages/ca/ca.dashboard.php
@@ -0,0 +1,11 @@
+<?php
+$ca = array (
+ 'dashboard:widget:group:title' => 'Activitat del grup',
+ 'dashboard:widget:group:desc' => 'Segueix l\'activitat en un dels teus grups',
+ 'dashboard:widget:group:select' => 'Selecciona un grup',
+ 'dashboard:widget:group:noactivity' => 'No hi ha activitat en aquest grup',
+ 'dashboard:widget:group:noselect' => 'Edita aquest guiny per seleccionar un grup',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.developers.php b/mod/languages/languages/ca/ca.developers.php
new file mode 100644
index 000000000..7ba9fe9ee
--- /dev/null
+++ b/mod/languages/languages/ca/ca.developers.php
@@ -0,0 +1,47 @@
+<?php
+$language = array (
+ 'admin:develop_tools' => 'Eines',
+ 'admin:develop_tools:preview' => 'Sorral',
+ 'admin:develop_tools:inspect' => 'Inspeccions',
+ 'admin:develop_tools:unit_tests' => 'Tests d\'unitat',
+ 'developers:label:system_cache' => 'Utilitza la memòria cau del sistema',
+ 'developers:help:system_cache' => 'Desconnecta això mentre desenvolupes. D\'una altra forma, els canvis en les teves extensions no es registraran.',
+ 'developers:unit_tests:description' => 'L\'Elgg té tests d\'integració i unitat per detectar errors en les classes i funcions del nucli',
+ 'developers:unit_tests:warning' => 'Advertència: No utilitzis aquests tests en un lloc de producció. Poden corrompre la teva base de dades',
+ 'developers:unit_tests:run' => 'Testejar',
+ 'admin:developers' => 'Desenvolupadors',
+ 'admin:developers:settings' => 'Configuració de Desenvolupadors',
+ 'elgg_dev_tools:settings:explanation' => 'Controli la configuració de desenvolupament i depuració. Algunes d&acute;aquestes opcions també estan disponibles a altres seccions de l&acute;administració.',
+ 'developers:label:simple_cache' => 'Utilitzar mem&ograve;ria cau simple',
+ 'developers:help:simple_cache' => 'Deshabilitar la mem&ograve;ria cau durant el temps que es desenvolupa. D&acute;una altra manera, les modificacions a les vistes (inclosos els css) seran ignorades.',
+ 'developers:label:debug_level' => 'Nivell de monitoratge',
+ 'developers:help:debug_level' => 'Aix&ograve; controla la quantitat d&acute;informació que es registra. Vegi elgg_log() per ampliar la informació.',
+ 'developers:label:display_errors' => 'Mostrar errors fatals de PHP',
+ 'developers:help:display_errors' => 'Per defecte, l&acute;arxiu .htaccess d&acute;Elgg deshabilita la visualització d&acute;errors fatals.',
+ 'developers:label:screen_log' => 'Registrar a la pantalla',
+ 'developers:help:screen_log' => 'Aix&ograve; mostra les sortides de elgg_log() y elgg_dump() a la p&aacute;gina.',
+ 'developers:label:show_strings' => 'Mostrar strings de traduccions estranyes',
+ 'developers:help:show_strings' => 'Aix&ograve; mostra les traduccions utilitzades per elgg_echo().',
+ 'developers:label:wrap_views' => 'Wrap de vistes',
+ 'developers:help:wrap_views' => 'Aix&ograve; agafa gairebé tota la vista amb comentaris HTML. és útil per trobar la vista en particular que genera un HTML.',
+ 'developers:label:log_events' => 'Esdeveniments de Logs i Hooks de plugins',
+ 'developers:help:log_events' => 'Escriure esdeveniments i hooks de plugins en el log. Alerta: n&acute;hi ha més d&acute;un a cada p&aacute;gina.',
+ 'developers:debug:off' => 'Apagat',
+ 'developers:debug:error' => 'Error',
+ 'developers:debug:warning' => 'Alerta',
+ 'developers:debug:notice' => 'Informació',
+ 'developers:inspect:help' => 'Inspecció de configuració del framework Elgg.',
+ 'developers:event_log_msg' => '%s: \'%s, %s\' a %s',
+ 'theme_preview:general' => 'Introducció',
+ 'theme_preview:breakout' => 'Fora d&acute;iframe',
+ 'theme_preview:buttons' => 'Botons',
+ 'theme_preview:components' => 'Components',
+ 'theme_preview:forms' => 'Formularis',
+ 'theme_preview:grid' => 'Grilla',
+ 'theme_preview:icons' => 'Icones',
+ 'theme_preview:modules' => 'M&ograve;duls',
+ 'theme_preview:navigation' => 'Navegació',
+ 'theme_preview:typography' => 'Tipografíes',
+ 'developers:settings:success' => 'Configuracions emmagatzemades',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.diagnostics.php b/mod/languages/languages/ca/ca.diagnostics.php
new file mode 100644
index 000000000..b6f516048
--- /dev/null
+++ b/mod/languages/languages/ca/ca.diagnostics.php
@@ -0,0 +1,30 @@
+<?php
+$language = array (
+ 'admin:administer_utilities:diagnostics' => 'Diagnòstic del sistema',
+ 'diagnostics' => 'Diagnòstic del sistema',
+ 'diagnostics:report' => 'Informe del diagnòstic',
+ 'diagnostics:description' => 'El següent informe diagnòstic pot ser útil per veure quins problemes hi ha amb l\'Elgg. Els desenvolupadors de l\'Elgg poden demanar-te que l\'adjuntes si obres una incidència.',
+ 'diagnostics:download' => 'Descarrega',
+ 'diagnostics:header' => '========================================================================
+Informe de Diagnòstic de l\'Elgg
+Generat %s per %s
+========================================================================',
+ 'diagnostics:report:basic' => 'Publicació de l\'Elgg %s, versió %s
+
+------------------------------------------------------------------------',
+ 'diagnostics:report:php' => 'Informació del PHP:
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:md5' => 'Arxius instal.lats i checksums:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:globals' => 'Variables globals:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:plugins' => 'Extensions instal·lades i detalls:
+%s
+------------------------------------------------------------------------',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.embed.php b/mod/languages/languages/ca/ca.embed.php
new file mode 100644
index 000000000..abefba7a7
--- /dev/null
+++ b/mod/languages/languages/ca/ca.embed.php
@@ -0,0 +1,14 @@
+<?php
+$ca = array (
+ 'embed:embed' => 'Incrusta',
+ 'embed:upload' => 'Puja multimèdia',
+ 'embed:upload_type' => 'Puja del tipus:',
+ 'embed:no_upload_content' => 'No hi ha contingut pujat!',
+ 'embed:no_section_content' => 'No s\'ha trobat res.',
+ 'embed:no_sections' => 'No s\'han trobat extensions suportades. Consulta-ho amb l\'administrador del lloc per que habiliti una extensió amb suport per incrustar recursos.',
+ 'embed:instructions' => 'Seleccioni l´arxiu que vol afegir al contingut. Només cal que faci clic al damunt',
+ 'embed:media' => 'Afegir contingut',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.externalpages.php b/mod/languages/languages/ca/ca.externalpages.php
new file mode 100644
index 000000000..90d575cc4
--- /dev/null
+++ b/mod/languages/languages/ca/ca.externalpages.php
@@ -0,0 +1,15 @@
+<?php
+$ca = array (
+ 'admin:appearance:expages' => 'Pàgines del lloc',
+ 'expages:error' => 'Ui, torna-ho a provar o posa\'t en contacte amb qui administra la xarxa',
+ 'expages' => 'P&agrave;gines del lloc',
+ 'expages:about' => 'Sobre',
+ 'expages:terms' => 'Termes',
+ 'expages:privacy' => 'Privacitat',
+ 'expages:contact' => 'Contacte',
+ 'expages:notset' => 'Aquestes p&agrave;gines encara no han estat configurades.',
+ 'expages:posted' => 'La seva p&agrave;gina s&acute;ha actualitzat correctament.',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.file.php b/mod/languages/languages/ca/ca.file.php
new file mode 100644
index 000000000..8415c49b9
--- /dev/null
+++ b/mod/languages/languages/ca/ca.file.php
@@ -0,0 +1,74 @@
+<?php
+$language = array (
+ 'file:friends' => 'Arxius dels teus amics',
+ 'file:user:gallery' => 'Veure galeria de %s',
+ 'file:tags' => 'Etiquetes',
+ 'file:list:list' => 'Canviar a la vista de llista',
+ 'file:list:gallery' => 'Canviar a la vista de galeria',
+ 'file:friends:type:video' => 'Vídeos dels teus amics',
+ 'file:friends:type:document' => 'Documents dels teus amics',
+ 'file:friends:type:audio' => 'Àudio dels teus amics',
+ 'file:friends:type:image' => 'Imatges dels teus amics',
+ 'file:friends:type:general' => 'Arxius generals dels teus amics',
+ 'file:delete:confirm' => 'Estàs segura de voler esborrar aquest arxiu?',
+ 'file:notification' => '%s ha pujat un nou arxiu:
+
+%s
+%s
+
+Veure i comentar al nou arxiu:
+%s',
+ 'file:deletefailed' => 'El teu arxiu no es pot eliminar en aquests moments.',
+ 'file:noaccess' => 'No disposes dels permisos necessaris per modificar l´arxiu',
+ 'file:nofile' => 'Has de seleccionar un arxiu',
+ 'file:widget' => 'Giny d´arxius',
+ 'file' => 'Arxius',
+ 'file:user' => 'Arxius de %s',
+ 'file:all' => 'Tots els arxius',
+ 'file:edit' => 'Editar arxiu',
+ 'file:more' => 'Més arxius',
+ 'file:list' => 'Vista de llista',
+ 'file:group' => 'Arxius del grup',
+ 'file:gallery' => 'Vista de galeria',
+ 'file:gallery_list' => 'Vista de galeria o llista',
+ 'file:num_files' => 'Quantitat d\'arxius a mostrar',
+ 'file:upload' => 'Carregar un arxiu',
+ 'file:replace' => 'Substituir contingut de l&acute;arxiu (deixar en blanc si no es vol modificar)',
+ 'file:list:title' => '%s - %s %s',
+ 'file:title:friends' => 'De contactes',
+ 'file:add' => 'Carregar un arxiu',
+ 'file:file' => 'Arxiu',
+ 'file:title' => 'Títol',
+ 'file:desc' => 'Descripció',
+ 'file:types' => 'Tipus d&acute;arxiu carregats',
+ 'file:type:' => 'Arxius',
+ 'file:type:all' => 'Tots els arxius',
+ 'file:type:video' => 'Vídeos',
+ 'file:type:document' => 'Documents',
+ 'file:type:audio' => '&Agrave;udio',
+ 'file:type:image' => 'Imatges',
+ 'file:type:general' => 'General',
+ 'file:user:type:video' => 'Vídeos de %s',
+ 'file:user:type:document' => 'Documents de %s',
+ 'file:user:type:audio' => '&Agrave;udio de %s',
+ 'file:user:type:image' => 'Imatges de %s',
+ 'file:user:type:general' => 'Arxius generals de %s',
+ 'file:widget:description' => 'Veure els arxius més recents',
+ 'groups:enablefiles' => 'Habilitar arxius de grups',
+ 'file:download' => 'Descarregar',
+ 'file:tagcloud' => 'Núvol d&acute;etiquetes',
+ 'file:display:number' => 'Quantitat d&acute;arxius a mostrar',
+ 'river:create:object:file' => '%s ha carregat l&acute;arxiu %s',
+ 'river:comment:object:file' => '%s ha comentat l&acute;arxiu %s',
+ 'item:object:file' => 'Arxius',
+ 'file:embed' => 'Incrustar multim&egrave;dia',
+ 'file:embedall' => 'Tot',
+ 'file:saved' => 'Arxiu desat correctament.',
+ 'file:deleted' => 'Arxiu eliminat correctament.',
+ 'file:none' => 'No s&acute;ha carregat cap arxiu.',
+ 'file:uploadfailed' => 'Ens sap greu, no s&acute;ha pogut desar l&acute;arxiu.',
+ 'file:downloadfailed' => 'Ens sap greu, l&acute;arxiu no est&agrave; disponible en aquest moment.',
+ 'file:cannotload' => 'Hi ha hagut una errada a l\'hora d&acute;intentar carregar l&acute;arxiu',
+ 'file:newupload' => 'Pujada d\'un nou fitxer',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.garbagecollector.php b/mod/languages/languages/ca/ca.garbagecollector.php
new file mode 100644
index 000000000..c50d45cde
--- /dev/null
+++ b/mod/languages/languages/ca/ca.garbagecollector.php
@@ -0,0 +1,17 @@
+<?php
+$ca = array (
+ 'garbagecollector:period' => 'Amb quina freq&uuml;&egrave;ncia ha de passar el camió de la brossa?',
+ 'garbagecollector:weekly' => 'Un cop a la setmana',
+ 'garbagecollector:monthly' => 'Un cop al mes',
+ 'garbagecollector:yearly' => 'Un cop a l&acute;any',
+ 'garbagecollector' => 'GARBAGE COLLECTOR
+',
+ 'garbagecollector:done' => 'Fet',
+ 'garbagecollector:optimize' => 'Optimizant %s ',
+ 'garbagecollector:error' => 'ERROR',
+ 'garbagecollector:ok' => 'OK',
+ 'garbagecollector:gc:metastrings' => 'Netejant metastrings no enlla&ccedil;ats: ',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.groups.php b/mod/languages/languages/ca/ca.groups.php
new file mode 100644
index 000000000..026f02665
--- /dev/null
+++ b/mod/languages/languages/ca/ca.groups.php
@@ -0,0 +1,219 @@
+<?php
+$language = array (
+ 'groups:owned:user' => 'Grups dels quals n\'és propietari %s',
+ 'groups:cantcreate' => 'No pots crear un grup. Només ho poden fer els administradors.',
+ 'groups:search_in_group' => 'Cerca en aquest grup',
+ 'groups:acl' => 'Grup: %s',
+ 'discussion:notification:topic:subject' => 'Nou missatge de discussió al grup',
+ 'groups:notification' => '%s ha afegit un nou tema de debat a %s:
+
+%s
+%s
+
+Veure i contestar a la discussió:
+%s',
+ 'discussion:notification:reply:body' => '%s ha contestat al tema de debat %s dins el grup %s
+
+%s
+
+Veure i contestar a la discussió:
+%s',
+ 'discussion:none' => 'No hi ha debats',
+ 'discussion:reply:title' => 'Resposta per %s',
+ 'groups:whocancreate' => 'Qui pot crear nous grups?',
+ 'groups:nowidgets' => 'No s´ha trobat cap giny per aquest grup.',
+ 'groups:widgets:members:label:pleaseedit' => 'Si us plau, configura aquest giny.',
+ 'groups:widgets:description' => 'Mostra en el teu perfil els grups als quals pertanys',
+ 'groups:widgets:entities:label:pleaseedit' => 'Si us plau, configura aquest giny.',
+ 'groups:access:private' => 'Tancat - Les usuàries hi han de ser convidades',
+ 'groups:access:public' => 'Obert - Qualsevol usuària s\'hi pot afegir',
+ 'groups:cantremove' => 'No s\'ha pogut eliminar la usuària del grup',
+ 'groups:userinvited' => 'La usuària ha estat convidada.',
+ 'groups:usernotinvited' => 'No s\'ha pogut convidar la usuària.',
+ 'groups:useralreadyinvited' => 'La usuària ja ha estat convidada',
+ 'groups' => 'Grups',
+ 'groups:owned' => 'Grups que estic administrant',
+ 'groups:yours' => 'Els meus grups',
+ 'groups:user' => 'Grups de %s',
+ 'groups:all' => 'Tots els grups',
+ 'groups:add' => 'Crear un nou grup',
+ 'groups:edit' => 'Editar grup',
+ 'groups:delete' => 'Eliminar grup',
+ 'groups:membershiprequests' => 'Administrar sol&middot;licituts per afegir-s&acute;hi',
+ 'groups:invitations' => 'Invitacions de grup',
+ 'groups:icon' => 'Icona de grup (deixar en blanc si no es vol modificar)',
+ 'groups:name' => 'Nom del grup',
+ 'groups:username' => 'Nom curt del grup (es mostra a les URLs, només car&agrave;cters alfanum&egrave;rics)',
+ 'groups:description' => 'Descripció',
+ 'groups:briefdescription' => 'Descripció curta',
+ 'groups:interests' => 'Etiquetes',
+ 'groups:website' => 'Lloc web',
+ 'groups:members' => 'Membres del grup',
+ 'groups:members:title' => 'Membres de %s',
+ 'groups:members:more' => 'Veure tots els membres',
+ 'groups:membership' => 'Permisos de membres del grup',
+ 'groups:access' => 'Permisos d&acute;accés',
+ 'groups:owner' => 'Administrador',
+ 'groups:widget:num_display' => 'Quantitat de grups a mostrar',
+ 'groups:widget:membership' => 'Membres del grup',
+ 'groups:noaccess' => 'Sense accés al grup',
+ 'groups:permissions:error' => 'No disposa de permisos per realitzar aquesta acció',
+ 'groups:ingroup' => 'en el grup',
+ 'groups:cantedit' => 'No pot modificar aquest grup',
+ 'groups:saved' => 'Grup desat',
+ 'groups:featured' => 'Grups destacats',
+ 'groups:makeunfeatured' => 'No destacat',
+ 'groups:makefeatured' => 'Fer destacat',
+ 'groups:featuredon' => '%s és ara un grup destacat.',
+ 'groups:unfeatured' => '%s ha estat esborrat dels grups destacats.',
+ 'groups:featured_error' => 'Grup no vàlid.',
+ 'groups:joinrequest' => 'Sol&middot;licitar afegir-s&acute;hi',
+ 'groups:join' => 'Afegir-se al grup',
+ 'groups:leave' => 'Abandonar el grup',
+ 'groups:invite' => 'Convidar contactes',
+ 'groups:invite:title' => 'Convidar contactes al grup',
+ 'groups:inviteto' => 'Convidar contactes a \'%s\'',
+ 'groups:nofriends' => 'No té cap contacte que no hagi estat convidat al grup.',
+ 'groups:nofriendsatall' => 'No té cap contacte a convidar!',
+ 'groups:viagroups' => 'grups via',
+ 'groups:group' => 'Grup',
+ 'groups:search:tags' => 'etiqueta',
+ 'groups:search:title' => 'Cercar grups que coincideixin amb l&acute;etiqueta \'%s\'',
+ 'groups:search:none' => 'No s&acute;ha trobat cap grup',
+ 'groups:activity' => 'Activitat del grup',
+ 'groups:enableactivity' => 'Habilitar l&acute;activitat del grup',
+ 'groups:activity:none' => 'Encar no hi ha activitat al grup',
+ 'groups:notfound' => 'No s&acute;ha trobat el grup',
+ 'groups:notfound:details' => 'El grup sol&middot;licitat no existeix o no se&acute;n permet l\'accés',
+ 'groups:requests:none' => 'En aquest moment no hi ha cap sol&middot;licitud pendent.',
+ 'groups:invitations:none' => 'En aquest moment no hi ha cap invitació.',
+ 'item:object:groupforumtopic' => 'Discussions',
+ 'groupforumtopic:new' => 'Entrada nova de discussió',
+ 'groups:count' => 'grups creats',
+ 'groups:open' => 'grup obert',
+ 'groups:closed' => 'grupo tancat',
+ 'groups:member' => 'membres',
+ 'groups:searchtag' => 'Cercar grups por etiqueta',
+ 'groups:more' => 'Més grups',
+ 'groups:none' => 'Sense grups',
+ 'groups:access:group' => 'Només membres del grup',
+ 'groups:closedgroup' => 'Aquest grup és tancat en les admissions.',
+ 'groups:closedgroup:request' => 'Per sol&middot;licitar afegir-s&acute;hi, premi l&acute;enlla&ccedil; del menú "sol&middot;licitar afegir-s&acute;hi".',
+ 'groups:visibility' => 'Qui pot veure aquest grup?',
+ 'groups:enableforum' => 'Habilitar discussions de grup',
+ 'groups:yes' => 'sí',
+ 'groups:no' => 'no',
+ 'groups:lastupdated' => 'Actualizació més recent %s per %s',
+ 'groups:lastcomment' => 'Comentari més recent %s per %s',
+ 'discussion' => 'Discussió',
+ 'discussion:add' => 'Discussió nova',
+ 'discussion:latest' => 'Discussió més recent',
+ 'discussion:group' => 'Discussió del grup',
+ 'discussion:topic:created' => 'S&acute;ha creat una discussió nova.',
+ 'discussion:topic:updated' => 'S&acute;ha actualitzat la discussió.',
+ 'discussion:topic:deleted' => 'S&acute;ha eliminat la discussió.',
+ 'discussion:topic:notfound' => 'No s&acute;ha pogut trobat la discussió',
+ 'discussion:error:notsaved' => 'No s&acute;ha pogut desar la discussió',
+ 'discussion:error:missing' => 'Es necessiten el títol i el missatge',
+ 'discussion:error:permissions' => 'No disposa dels permisos necessaris per poder realitzar aquesta acció',
+ 'discussion:error:notdeleted' => 'No s&acute;ha pogut eliminar la discussió',
+ 'discussion:reply:deleted' => 'La resposta en la discussió ha estat eliminada.',
+ 'discussion:reply:error:notdeleted' => 'No s&acute;ha pogut eliminar la resposta en la discussió',
+ 'reply:this' => 'Respondre',
+ 'group:replies' => 'Respostes',
+ 'groups:forum:created' => 'Creat %s amb %d comentaris',
+ 'groups:forum:created:single' => 'Creat %s amb %d respostes',
+ 'groups:forum' => 'Discussió',
+ 'groups:addtopic' => 'Discussió nova',
+ 'groups:forumlatest' => 'Discussió més recent',
+ 'groups:latestdiscussion' => 'Discussió més recent',
+ 'groups:newest' => 'La més recent',
+ 'groups:popular' => 'Popular',
+ 'groupspost:success' => 'La seva resposta ha estat publicada correctament',
+ 'groups:alldiscussion' => 'Discussió més recent',
+ 'groups:edittopic' => 'Editar discussió',
+ 'groups:topicmessage' => 'Missatge de discussió',
+ 'groups:topicstatus' => 'Estat de la discussió',
+ 'groups:reply' => 'Publicar un comentari',
+ 'groups:topic' => 'Discussió',
+ 'groups:posts' => 'Entrades',
+ 'groups:lastperson' => 'última persona',
+ 'groups:when' => 'Quan',
+ 'grouptopic:notcreated' => 'No s&acute;ha trobat cap discussió.',
+ 'groups:topicopen' => 'Oberta',
+ 'groups:topicclosed' => 'Tancada',
+ 'groups:topicresolved' => 'Resolta',
+ 'grouptopic:created' => 'S&acute;ha creat la discussió.',
+ 'groupstopic:deleted' => 'Discussió eliminada',
+ 'groups:topicsticky' => 'Que enganxa',
+ 'groups:topicisclosed' => 'La discussió est&agrave; tancada.',
+ 'groups:topiccloseddesc' => 'La discussió est&agrave; tancada i no s&acute;hi accepten comentaris nous.',
+ 'grouptopic:error' => 'No s&acute;ha pogut crear una discussió en el grup. Si us plau, intenti-ho una altra vegada o contacti amb l&acute;administrador.',
+ 'groups:forumpost:edited' => 'El comentari al f&ograve;rum ha estat editat.',
+ 'groups:forumpost:error' => 'Hi ha hagut un error en intentar editar el comentari al f&ograve;rum.',
+ 'groups:privategroup' => 'El grup és tancat. Ha sol&middot;licitat afegir-s&acute;hi.',
+ 'groups:notitle' => 'Els grups han de tenir un títol',
+ 'groups:cantjoin' => 'No pot afegir-se al grup',
+ 'groups:cantleave' => 'No pot abandonar el grup',
+ 'groups:removeuser' => 'Treure del grup',
+ 'groups:removed' => 'S&acute;ha tret a %s del grup',
+ 'groups:addedtogroup' => 'S&acute;ha afegit al grup correctament',
+ 'groups:joinrequestnotmade' => 'No pot sol&middot;licitar afegir-se al grup',
+ 'groups:joinrequestmade' => 'Ha sol&middot;licitat afegir-se al grup',
+ 'groups:joined' => 'S&acute;ha afegit al grup correctament!',
+ 'groups:left' => 'Ha abandonat el grup correctament',
+ 'groups:notowner' => 'Ens sap greu, vost&egrave; no és l&acute;administrador d&acute;aquest grup.',
+ 'groups:notmember' => 'Ens sap greu, vost&egrave; no és membre d&acute;aquest grup.',
+ 'groups:alreadymember' => 'Ja és membre d&acute;aquest grup!',
+ 'groups:invite:subject' => '%s ha estat convidat a afegir-se a %s!',
+ 'groups:updated' => 'Resposta més recent per %s %s',
+ 'groups:started' => 'Iniciat per %s',
+ 'groups:joinrequest:remove:check' => 'Est&agrave; segur que vol retirar la sol&middot;licitud al grup?',
+ 'groups:invite:remove:check' => 'Est&agrave; segur que vol retirar la invitació?',
+ 'groups:invite:body' => 'Hola %s,
+
+%s l&acute;ha convidat a afegir-se al grup \'%s\'. Premi a sota per veure la invitació:
+
+%s',
+ 'groups:welcome:subject' => 'Benvingut al grup %s!',
+ 'groups:welcome:body' => 'Hola %s!
+
+Vost&egrave; és membre del grup \'%s\'! Premi a sota per comen&ccedil;ar a utilitzar-lo!
+
+%s',
+ 'groups:request:subject' => '%s ha sol&middot;licitat afegir-se a %s',
+ 'groups:request:body' => 'Hola %s,
+
+%s ha sol&middot;licitat afegir-se al grup \'%s\'. Premi a sota per consultar el seu perfil %s
+
+o faci clic a sota per veure les sol&middot;licituts d&acute;aquest grup:
+
+%s',
+ 'river:create:group:default' => '%s ha creat el grup %s',
+ 'river:join:group:default' => '%s s&acute;ha afegit al grup %s',
+ 'river:create:object:groupforumtopic' => '%s ha creat una discussió nova: %s',
+ 'river:reply:object:groupforumtopic' => '%s ha enviat una resposta a la discussió %s',
+ 'groups:widgets:members:title' => 'Membres del grup',
+ 'groups:widgets:members:description' => 'Llistar membres del grup.',
+ 'groups:widgets:members:label:displaynum' => 'Llistar membres del grup.',
+ 'groups:widgets:entities:title' => 'Objectes en el grup',
+ 'groups:widgets:entities:description' => 'Llista d&acute;objectes guardats en el grup',
+ 'groups:widgets:entities:label:displaynum' => 'Llista d&acute;objectes del grup.',
+ 'groups:forumtopic:edited' => 'Discussió editada correctament.',
+ 'groups:allowhiddengroups' => 'Vol permetre els grups privats (invisibles)?',
+ 'group:deleted' => 'Grup i continguts del grup eliminats',
+ 'group:notdeleted' => 'No s&acute;ha pogut eliminar el grup',
+ 'group:notfound' => 'No s&acute;ha pogut trobar el grup',
+ 'grouppost:deleted' => 'La publicació del grup ha estat eliminada',
+ 'grouppost:notdeleted' => 'No s&acute;ha pogut eliminar la publicació del grup',
+ 'groupstopic:notdeleted' => 'Discussió no eliminada',
+ 'grouptopic:blank' => 'No hi ha discussió',
+ 'grouptopic:notfound' => 'No s&acute;ha pogut trobar la discussió',
+ 'grouppost:nopost' => 'Entrada buida',
+ 'groups:deletewarning' => 'Vol eliminar aquest grup? Aquesta acció no té marxa enrere!',
+ 'groups:invitekilled' => 'S&acute;ha eliminat la invitació.',
+ 'groups:joinrequestkilled' => 'S&acute;ha eliminat la sol&middot;licitud d&acute;inscripcció.',
+ 'groups:ecml:discussion' => 'Discussions del grup',
+ 'groups:ecml:groupprofile' => 'Perfils del grup',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.invitefriends.php b/mod/languages/languages/ca/ca.invitefriends.php
new file mode 100644
index 000000000..fd3333d3e
--- /dev/null
+++ b/mod/languages/languages/ca/ca.invitefriends.php
@@ -0,0 +1,26 @@
+<?php
+$language = array (
+ 'invitefriends:registration_disabled' => 'El registre d\'usuàries noves està deshabilitat. No pots convidar cap usuària nova.',
+ 'friends:invite' => 'Convidar contactes',
+ 'invitefriends:introduction' => 'Per convidar els seus coneguts a entrar a la xarxa, introdueixi les seves adreces de correu a la part d´abaix. Una adreça de correu a cada línia:',
+ 'invitefriends:message' => 'Introdueixi un missatge per convidar:',
+ 'invitefriends:subject' => 'Invitació per a %s',
+ 'invitefriends:success' => 'Les invitacions han estat enviades amb èxit. Gràcies per fer créixer la xarxa.',
+ 'invitefriends:invitations_sent' => 'Invitacions enviades: %s. S´han trobat els problemes següents:',
+ 'invitefriends:already_members' => 'Aquestes persones ja són membres de la xarxa: %s',
+ 'invitefriends:noemails' => 'No s´ha ingressat cap adreça de correu',
+ 'invitefriends:message:default' => 'Hola,
+
+et vull convidar a entrar a la xarxa %s.',
+ 'invitefriends:email' => '%s l´ha convidat a participar a %s. L´ha enviat aquest missatge:
+
+%s
+
+Per començar a participar a la xarxa social, premi el següent enllaç:
+
+ %s
+
+El sistema l´inclourà com a contacte de la persona que l´ha convidat.',
+ 'invitefriends:email_error' => 'S´han enviat invitacions, però les direccions següents no són vàlides: %s',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.likes.php b/mod/languages/languages/ca/ca.likes.php
new file mode 100644
index 000000000..1b3e6833f
--- /dev/null
+++ b/mod/languages/languages/ca/ca.likes.php
@@ -0,0 +1,34 @@
+<?php
+$language = array (
+ 'likes:this' => 'li agrada això',
+ 'likes:deleted' => 'El teu "m\'agrada" s\'ha eliminat',
+ 'likes:see' => 'Mira a qui li agrada',
+ 'likes:remove' => 'Ja no m\'agrada',
+ 'likes:notdeleted' => 'Hi ha algun problema eliminant el teu "m\'agrada"',
+ 'likes:likes' => 'Ara t\'agrada això',
+ 'likes:failure' => 'Hi ha hagut un problema al marcar això',
+ 'likes:alreadyliked' => 'Ja t\'agrada això',
+ 'likes:notfound' => 'L\'objecte que estàs tractant de marcar no es troba',
+ 'likes:likethis' => 'M\'agrada això',
+ 'likes:userlikedthis' => 'Li agrada a %s',
+ 'likes:userslikedthis' => 'Els "m\'agrada" de %s',
+ 'likes:river:annotate' => 'li agrada',
+ 'likes:delete:confirm' => 'Estàs segur de voler esborrar aquest "m\'agrada"?',
+ 'river:likes' => 'li agrada %s %s',
+ 'likes:notifications:subject' => 'a %s li agrada el teu missatge "%s"',
+ 'likes:notifications:body' => 'Hola %1$s,
+
+A %2$s li agrada el teu missatge "%3$s" a %4$s
+
+Mira el teu missatge original aquí:
+
+%5$s
+
+o mira el perfil de %2$s aquí:
+
+%6$s
+
+Gràcies,
+%4$s',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.logbrowser b/mod/languages/languages/ca/ca.logbrowser
new file mode 100644
index 000000000..651a23730
--- /dev/null
+++ b/mod/languages/languages/ca/ca.logbrowser
@@ -0,0 +1,20 @@
+<?php
+$language = array (
+ 'admin:administer_utilities:logbrowser' => 'Navegador de registres',
+ 'logbrowser' => 'Navegador de registres',
+ 'logbrowser:browse' => 'Navegar pel registre del sistema',
+ 'logbrowser:search' => 'Refinar resultats',
+ 'logbrowser:user' => 'Cercar com la usuària',
+ 'logbrowser:starttime' => 'Temps d\'inici (per exemple "l\'últim dilluns", "fa 1 hora")',
+ 'logbrowser:endtime' => 'Tems de finalització',
+ 'logbrowser:explore' => 'Explora el registre',
+ 'logbrowser:date' => 'Data i temps',
+ 'logbrowser:ip_address' => 'Adreça IP',
+ 'logbrowser:user:name' => 'Usuària',
+ 'logbrowser:user:guid' => 'GUID de la usuària',
+ 'logbrowser:object' => 'Tipus d\'objecte',
+ 'logbrowser:object:guid' => 'GUID de l\'objecte',
+ 'logbrowser:action' => 'Acció',
+ 'logbrowser:no_result' => 'Sense resultats',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.logrotate.php b/mod/languages/languages/ca/ca.logrotate.php
new file mode 100644
index 000000000..3a330a035
--- /dev/null
+++ b/mod/languages/languages/ca/ca.logrotate.php
@@ -0,0 +1,20 @@
+<?php
+$language = array (
+ 'logrotate:delete' => 'Esborrar registres arxivats més antics que',
+ 'logrotate:period' => 'Amb quina freq&uuml;&egrave;ncia s&acute;ha de desar el log del sistema?',
+ 'logrotate:weekly' => 'Un cop cada setmana',
+ 'logrotate:monthly' => 'Un cop cada mes',
+ 'logrotate:yearly' => 'Un cop cada any',
+ 'logrotate:logrotated' => 'Registre desat
+',
+ 'logrotate:lognotrotated' => 'Hi ha hagut una errada a l&acute;hora de desar el registre
+',
+ 'logrotate:week' => 'setmana',
+ 'logrotate:month' => 'mes',
+ 'logrotate:year' => 'any',
+ 'logrotate:logdeleted' => 'Registre eliminat
+',
+ 'logrotate:lognotdeleted' => 'Hi ha hagut una errada a l&acute;hora d&acute;eliminar el registre
+',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.members.php b/mod/languages/languages/ca/ca.members.php
new file mode 100644
index 000000000..16338987e
--- /dev/null
+++ b/mod/languages/languages/ca/ca.members.php
@@ -0,0 +1,13 @@
+<?php
+$ca = array (
+ 'members:searchtag' => 'Cercar membres per etiqueta',
+ 'members:searchname' => 'Cercar membres per nom',
+ 'members:label:newest' => 'Nous',
+ 'members:label:popular' => 'Populars',
+ 'members:label:online' => 'Connectats',
+ 'members:title:searchname' => 'Cercar membres per %s',
+ 'members:title:searchtag' => 'Membres amb etiquetes %s',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.messageboard.php b/mod/languages/languages/ca/ca.messageboard.php
new file mode 100644
index 000000000..09ac43756
--- /dev/null
+++ b/mod/languages/languages/ca/ca.messageboard.php
@@ -0,0 +1,43 @@
+<?php
+$ca = array (
+ 'messageboard:messageboard' => 'safata de comentaris',
+ 'messageboard:history:title' => 'Historial',
+ 'messageboard:owner' => 'Safata personal de %s',
+ 'messageboard:owner_history' => 'Comentaris de %s a la safata personal de %s',
+ 'river:messageboard:user:default' => '%s ha comentat a la safata personal de %s',
+ 'messageboard:board' => 'Safata de comentaris',
+ 'messageboard:viewall' => 'Veure tots',
+ 'messageboard:postit' => 'Nou',
+ 'messageboard:history' => 'Historial',
+ 'messageboard:none' => 'No hi ha cap comentari a la teva safata',
+ 'messageboard:num_display' => 'Nombre de comentaris a mostrar',
+ 'messageboard:desc' => 'Aquesta és la safata dels comentaris. Qualsevol, fins i tot tu, pot deixar un missatge al teu perfil.',
+ 'messageboard:user' => 'a la safata personal de %s',
+ 'messageboard:replyon' => 'respondre a',
+ 'messageboard:posted' => 'S\'ha escrit el comentari',
+ 'messageboard:deleted' => 'S\'ha esborrat el comentari',
+ 'messageboard:email:subject' => 'Tens un nou comentari a la safata',
+ 'messageboard:email:body' => '%s t\'ha deixat aquest comentari:
+
+
+%s
+
+
+Per a veure els comentaris de la teva safata de missatges, prem en aquest vincle:
+
+%s
+
+Per a consultar el perfil de %s, prem en aquest altre:
+
+%s
+
+Siusplau, no responguis aquest correu electrònic, recorda que és el sistema qui te l\'ha enviat per art de màgia. Si tens algun problema o comentari sobre la xarxa, posa\'t en contacte amb les/les administrador/es.',
+ 'messageboard:blank' => 'Has de posar alguna cosa a la safata de comentaris abans d\'enviar-ho, sinó anem malament!',
+ 'messageboard:notfound' => 'mmm, no trobo el què em dius. Torna-ho a provar o posa\'t en contacte amb els/les administradors/es.',
+ 'messageboard:notdeleted' => 'No s\'ha pogut esborrar el comentari, torna-ho a provar o posa\'t en contacte amb els/les administradors/es.',
+ 'messageboard:somethingwentwrong' => 'Avui no és el teu dia de sort, això està fent coses estranyes. Torna-ho a provar o posa\'t en contacte amb els/les administradors/es.',
+ 'messageboard:failure' => 'Error xungo, el sistema no en té ni idea de què està passant. Torna-ho a provar o posa\'t en contacte amb els/les administradors/es.',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.messages.php b/mod/languages/languages/ca/ca.messages.php
new file mode 100644
index 000000000..dfcc311c3
--- /dev/null
+++ b/mod/languages/languages/ca/ca.messages.php
@@ -0,0 +1,64 @@
+<?php
+$language = array (
+ 'messages:unreadcount' => '%s no llegit',
+ 'messages:user:nonexist' => 'No es pot trobar el receptor a la base de dades d\'usuàries.',
+ 'messages:deleted_sender' => 'Usuària eliminada',
+ 'messages' => 'Missatges',
+ 'messages:back' => 'torna a missatges',
+ 'messages:user' => 'La teva safata d\'entrada',
+ 'messages:posttitle' => 'els missatges de %s: %s',
+ 'messages:inbox' => 'Safata d\'entrada',
+ 'messages:send' => 'Envia un missatge',
+ 'messages:sent' => 'Missatges enviats',
+ 'messages:message' => 'Missatge',
+ 'messages:title' => 'Assumpte',
+ 'messages:to' => 'A',
+ 'messages:from' => 'De',
+ 'messages:fly' => 'Envia',
+ 'messages:replying' => 'Missatge amb resposta a',
+ 'messages:sendmessage' => 'Envia un missatge',
+ 'messages:compose' => 'Escriu un missatge',
+ 'messages:sentmessages' => 'Missatges enviats',
+ 'messages:recent' => 'Missatges recents',
+ 'messages:original' => 'Missatge original',
+ 'messages:yours' => 'El teu missatge',
+ 'messages:answer' => 'Respondre',
+ 'messages:markread' => 'Marca com a llegit',
+ 'messages:new' => 'Missatge nou',
+ 'notification:method:site' => 'Lloc',
+ 'messages:error' => 'No s\'ha pogut desar el teu missatge. Siusplau, torna-ho a provar.',
+ 'item:object:messages' => 'Missatges',
+ 'messages:posted' => 'El missatge s\'ha enviat satisfactòriament.',
+ 'messages:email:subject' => 'Tens un missatge!',
+ 'messages:email:body' => 'Tens un missatge nou de %s. Diu:
+
+
+%s
+
+
+Per veure els teus missatges, prem aquí:
+
+%s
+
+Per enviar a %s un missatge, prem aquí:
+
+%s
+
+Siusplau, no responguis a aquest correu.',
+ 'messages:blank' => 'Disculpa; has de posar alguna cosa al cos del missatge abans de desar-lo.',
+ 'messages:notfound' => 'Disculpa; el missatge que busques no existeix.',
+ 'messages:notdeleted' => 'Disculpa; no es pot esborrar aquest missatge.',
+ 'messages:nopermission' => 'No tens permisos per modificar aquest missatge! i què et pensaves? ;)',
+ 'messages:nomessages' => 'No hi ha cap missatge a mostrar.',
+ 'messages:user:blank' => 'Hauries de dir a qui vols enviar això.',
+ 'messages:toggle' => 'Marca tots',
+ 'messages:add' => 'Redactar',
+ 'messages:recipient' => 'Trii un destinatari&hellip;',
+ 'messages:to_user' => 'Per a: %s',
+ 'messages:success:delete:single' => 'Missatge eliminat',
+ 'messages:success:delete' => 'Missatges eliminats',
+ 'messages:success:read' => 'Missatges marcats com a llegits',
+ 'messages:error:messages_not_selected' => 'No hi ha missatges seleccionats',
+ 'messages:error:delete:single' => 'No es pot eliminar el missatge',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.notifications.php b/mod/languages/languages/ca/ca.notifications.php
new file mode 100644
index 000000000..9023ef965
--- /dev/null
+++ b/mod/languages/languages/ca/ca.notifications.php
@@ -0,0 +1,16 @@
+<?php
+$language = array (
+ 'notifications:subscriptions:friends:description' => 'Això és una col·lecció automàtica de les teves amigues. Per rebre actualitzacions, selecciona-ho a sota. Això afectarà les usuàries que corresponguin amb el panell principal de notificacions al final de la pàgina.',
+ 'notifications:subscriptions:title' => 'Notificacions per usuària',
+ 'friends:all' => 'Tots els contactes',
+ 'notifications:subscriptions:personal:description' => 'Rebre notificacions quan es modifiquin els meus continguts',
+ 'notifications:subscriptions:personal:title' => 'Notificacions personals',
+ 'notifications:subscriptions:friends:title' => 'Contactes',
+ 'notifications:subscriptions:collections:edit' => 'Per habilitar notificacions compartides faci clic aquí',
+ 'notifications:subscriptions:changesettings' => 'Notificacions',
+ 'notifications:subscriptions:changesettings:groups' => 'Notificacions de grups',
+ 'notifications:subscriptions:description' => 'Per rebre notificacions dels seus contactes quan crei nou contingut, cerqui&acute;ls a la xarxa i seleccioni el tipus de notificació que vol rebre',
+ 'notifications:subscriptions:groups:description' => 'Per rebre notificacions quan es crei un nou contingut en grups dels quals vost&egrave; n&acute;és membre, cerqui&acute;ls a la xarxa i seleccioni el tipus de notificació que vol rebre',
+ 'notifications:subscriptions:success' => 'La seva configuració de notificacions ha quedat desada',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.pages.php b/mod/languages/languages/ca/ca.pages.php
new file mode 100644
index 000000000..a53cbf253
--- /dev/null
+++ b/mod/languages/languages/ca/ca.pages.php
@@ -0,0 +1,62 @@
+<?php
+$ca = array (
+ 'pages' => 'Pàgines',
+ 'pages:group' => 'Pàgines',
+ 'pages:all' => 'Totes les pàgines',
+ 'pages:new' => 'Nova pàgina',
+ 'pages:edit' => 'Modificar la pàgina',
+ 'pages:delete' => 'Esborrar la pàgina',
+ 'pages:history' => 'Històric del a pàgina',
+ 'pages:view' => 'Veure pàgina',
+ 'pages:navigation' => 'Pàgina de navegació',
+ 'item:object:page_top' => 'Pàgines d\'inici',
+ 'item:object:page' => 'Pàgines',
+ 'pages:nogroup' => 'El grup no té contingut encara o bé no tens permisos per veure la informació generada',
+ 'pages:more' => 'Més pàgines',
+ 'pages:title' => 'Títol de la pàgina',
+ 'pages:description' => 'Descripció de l\'entrada',
+ 'pages:tags' => 'Etiquetes',
+ 'pages:access_id' => 'Accés de lectura',
+ 'pages:write_access_id' => 'Accés de modificació',
+ 'pages:noaccess' => 'Sense accés a la pàgina',
+ 'pages:cantedit' => 'No pots modificar aquesta pàgina',
+ 'pages:saved' => 'Pàgina desada',
+ 'pages:notsaved' => 'La pàgina no es pot desar',
+ 'pages:delete:success' => 'S\'ha esborrat la pàgina',
+ 'pages:delete:failure' => 'No es pot esborrar la pàgina',
+ 'pages:strapline' => 'Darrera actualització %s per %s',
+ 'pages:revision' => 'Revisió',
+ 'pages:num' => 'Nombre de pàgines a mostrar',
+ 'pages:widget:description' => 'Aquest és un llistat de les teves pàgines',
+ 'pages:label:view' => 'Veure pàgina',
+ 'pages:label:edit' => 'Modificar pàgina',
+ 'pages:label:history' => 'Històric de la pàgina',
+ 'pages:sidebar:this' => 'Aquesta pàgina',
+ 'pages:sidebar:children' => 'Sub-pàgines',
+ 'pages:sidebar:parent' => 'Pare',
+ 'pages:newchild' => 'Crear una sub-pàgina',
+ 'pages:backtoparent' => 'Tornar a \'%s\'',
+ 'pages:owner' => 'P&agrave;gines de %s',
+ 'pages:friends' => 'P&agrave;gines de contactes',
+ 'pages:add' => 'Afegir p&agrave;gina',
+ 'groups:enablepages' => 'Habilitar p&agrave;gines del grup',
+ 'pages:none' => 'Encara no hi ha cap p&agrave;gina creada',
+ 'river:create:object:page' => '%s ha creat la p&agrave;gina %s',
+ 'river:create:object:page_top' => '%s ha creat una p&agrave;gina %s',
+ 'river:update:object:page' => '%s ha actualizat la p&agrave;gina %s',
+ 'river:update:object:page_top' => '%s ha actualizat una p&agrave;gina %s',
+ 'river:comment:object:page' => '%s ha comentat en la p&agrave;gina %s',
+ 'river:comment:object:page_top' => '%s ha comentat en la p&agrave;gina %s',
+ 'pages:error:no_title' => 'Ha d&acute;especificar un títol per aquesta p&agrave;gina.',
+ 'pages:revision:subtitle' => 'Revisió creada %s per %s',
+ 'pages:notification' => '%s ha afegit una nova pàgina:
+
+%s
+%s
+
+Veure i comentar a la nova pàgina:
+%s',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.profile.php b/mod/languages/languages/ca/ca.profile.php
new file mode 100644
index 000000000..dad8e8433
--- /dev/null
+++ b/mod/languages/languages/ca/ca.profile.php
@@ -0,0 +1,8 @@
+<?php
+$ca = array (
+ 'profile' => 'Perfil',
+ 'profile:notfound' => 'Ens sap greu, no s&acute;ha pogut trobar el perfil sol&middot;licitat.',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.relatedgroups.php b/mod/languages/languages/ca/ca.relatedgroups.php
new file mode 100644
index 000000000..babf7691b
--- /dev/null
+++ b/mod/languages/languages/ca/ca.relatedgroups.php
@@ -0,0 +1,11 @@
+<?php
+$ca = array (
+ 'add' => 'Afegeix',
+ 'relatedgroups:in_frontpage' => 'Mostra els grups relacionats a la pàgina del grup',
+ 'relatedgroups:unrelated' => 'Grups no relacionats',
+ 'relatedgroups:nopermissons' => 'No tens permisos per modificar els grups relacionats',
+ 'relatedgroups:add:error' => 'S\'ha produït un error. Estàs segur que has introduït bé el nom del grup?',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.reportedcontent.php b/mod/languages/languages/ca/ca.reportedcontent.php
new file mode 100644
index 000000000..4a7360da0
--- /dev/null
+++ b/mod/languages/languages/ca/ca.reportedcontent.php
@@ -0,0 +1,34 @@
+<?php
+$language = array (
+ 'admin:administer_utilities:reportedcontent' => 'Contingut denunciat',
+ 'reportedcontent:instructions' => 'La denúncia serà enviada als administradors del lloc perquè puguin moderar.',
+ 'reportedcontent:user' => 'Denunciar usuària',
+ 'item:object:reported_content' => 'Elements denunciats',
+ 'reportedcontent' => 'Contingut denunciat',
+ 'reportedcontent:this' => 'Denunciar',
+ 'reportedcontent:this:tooltip' => 'Denunciar aquesta p&agrave;gina a l&acute;administrador',
+ 'reportedcontent:none' => 'No hi ha contingut denunciat',
+ 'reportedcontent:report' => 'Denunciar aix&ograve;',
+ 'reportedcontent:title' => 'Títol de la p&agrave;gina',
+ 'reportedcontent:deleted' => 'El contingut denunciat ha estat eliminat',
+ 'reportedcontent:notdeleted' => 'No s&acute;ha pogut eliminar la denúncia',
+ 'reportedcontent:delete' => 'Eliminar denúncia',
+ 'reportedcontent:areyousure' => 'Vol eliminar aix&ograve;?',
+ 'reportedcontent:archive' => 'Desar denúncia',
+ 'reportedcontent:archived' => 'La denúncia ha quedat desada',
+ 'reportedcontent:visit' => 'Visitar element denunciat',
+ 'reportedcontent:by' => 'Denunciat per',
+ 'reportedcontent:objecttitle' => 'Títol de la p&agrave;gina',
+ 'reportedcontent:objecturl' => 'URL de la p&agrave;gina',
+ 'reportedcontent:reason' => 'Motiu de la denúncia',
+ 'reportedcontent:description' => 'Per qu&egrave; denuncies aix&ograve;?',
+ 'reportedcontent:address' => 'Ubicació de l&acute;element',
+ 'reportedcontent:success' => 'La seva denúncia ha estat enviada als administradors',
+ 'reportedcontent:failing' => 'No s&acute;ha pogut enviar la seva denúncia',
+ 'reportedcontent:moreinfo' => 'Més informació',
+ 'reportedcontent:numbertodisplay' => 'Quantitat de denúncies a mostrar',
+ 'reportedcontent:widget:description' => 'Mostrar el contingut denunciat',
+ 'reportedcontent:failed' => 'Ens sap greu, hi ha hagut una errada a l&acute;hora d&acute;intentar denunciar el contingut.',
+ 'reportedcontent:notarchived' => 'No s&acute;ha pogut arxivar la denúncia',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.search.php b/mod/languages/languages/ca/ca.search.php
new file mode 100644
index 000000000..fe8fd56ed
--- /dev/null
+++ b/mod/languages/languages/ca/ca.search.php
@@ -0,0 +1,18 @@
+<?php
+$ca = array (
+ 'search:enter_term' => 'Introdueix un terme de recerca',
+ 'search:no_results' => 'No hi ha resultats.',
+ 'search:matched' => 'Coincideixen:',
+ 'search:results' => 'Resultats de %s',
+ 'search:no_query' => 'Si us plau, instrodueixi una consulta.',
+ 'search:search_error' => 'Error',
+ 'search:more' => '+%s més %s',
+ 'search_types:tags' => 'Etiquetes',
+ 'search_types:comments' => 'Comentaris',
+ 'search:comment_on' => 'Comentari de "%s"',
+ 'search:comment_by' => 'per',
+ 'search:unavailable_entity' => 'Entitat no disponible',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.subgroups.php b/mod/languages/languages/ca/ca.subgroups.php
new file mode 100644
index 000000000..97a53b4bd
--- /dev/null
+++ b/mod/languages/languages/ca/ca.subgroups.php
@@ -0,0 +1,22 @@
+<?php
+$ca = array (
+ 'subgroups' => 'Subgrups',
+ 'subgroups:more' => 'Veure tots els subgrups',
+ 'subgroups:owner' => 'Subgrups de %s',
+ 'subgroups:owner:single' => 'Subgrup de %s',
+ 'subgroups:none' => 'Aquest grup no té subgrups.',
+ 'subgroups:group' => 'Subgrups del grup',
+ 'subgroups:in_frontpage' => 'Mostra els subgrups a la pàgina del grup',
+ 'subgroups:add' => 'Edita subgrups',
+ 'subgroups:add:label' => 'Escriu el nom del grup',
+ 'subgroups:addurl:label' => 'Copia l\'URL del grup aquí',
+ 'subgroups:add:button' => 'Afegeix com a subgrup',
+ 'subgroups:dontwork' => 'No funciona?',
+ 'subgroups:unlink' => 'Desvincula els grups',
+ 'add' => 'Afegeix',
+ 'subgroups:nopermissons' => 'No tens permissos per modificar el grup',
+ 'subgroups:add:error' => 'Ha hagut un error. Has escrit bé el nom del grup?',
+);
+
+add_translation("ca", $ca);
+
diff --git a/mod/languages/languages/ca/ca.tagcloud.php b/mod/languages/languages/ca/ca.tagcloud.php
new file mode 100644
index 000000000..3e3d796b4
--- /dev/null
+++ b/mod/languages/languages/ca/ca.tagcloud.php
@@ -0,0 +1,7 @@
+<?php
+$language = array (
+ 'tagcloud:widget:numtags' => 'Nombre d\'etiquetes a mostrar',
+ 'tagcloud:widget:title' => 'Núvol d\'etiquetes',
+ 'tagcloud:widget:description' => 'Núvol d\'etiquetes',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.thewire.php b/mod/languages/languages/ca/ca.thewire.php
new file mode 100644
index 000000000..c022e8e0f
--- /dev/null
+++ b/mod/languages/languages/ca/ca.thewire.php
@@ -0,0 +1,34 @@
+<?php
+$language = array (
+ 'thewire:by' => 'Enllaçar les entrades de %s',
+ 'thewire:notfound' => 'Ens sap greu, no s´ha pogut trobar la publicació sol.licitada.',
+ 'thewire:widget:desc' => 'Mostrar els seus missatges curts més recents',
+ 'thewire' => 'Missatges curts',
+ 'thewire:everyone' => 'Tots els missatges curts',
+ 'thewire:user' => 'Missatges curts de %s',
+ 'thewire:friends' => 'Missatges curts de contactes',
+ 'thewire:reply' => 'Respondre',
+ 'thewire:replying' => 'Respondre a %s (@%s) qui ha escrit',
+ 'thewire:thread' => 'Debat',
+ 'thewire:charleft' => 'car&agrave;cters restants',
+ 'thewire:tags' => 'Missatges curts que coincideixen amb l&acute;etiqueta \'%s\'',
+ 'thewire:noposts' => 'Encara no hi ha cap missatge curt',
+ 'item:object:thewire' => 'Missatges curts',
+ 'thewire:update' => 'Actualitzar',
+ 'thewire:previous' => 'Anterior',
+ 'thewire:hide' => 'Ocultar',
+ 'thewire:previous:help' => 'Veure publicació anterior',
+ 'thewire:hide:help' => 'Ocultar publicació anterior',
+ 'river:create:object:thewire' => '%s ha publicat un nou %s',
+ 'thewire:wire' => 'Missatge curt',
+ 'thewire:num' => 'Quantitat de comentaris a mostrar',
+ 'thewire:moreposts' => 'Més missatges curts',
+ 'thewire:posted' => 'El missatge s&acute;ha publicat correctament.',
+ 'thewire:deleted' => 'El missatge s&acute;ha eliminat correctament.',
+ 'thewire:blank' => 'Ha d&acute;introduir contingut per poder publicar.',
+ 'thewire:notdeleted' => 'Ens sap greu, no s&acute;ha pogut eliminar el missatge curt.',
+ 'thewire:notify:subject' => 'Missatge curt nou',
+ 'thewire:notify:reply' => '%s ha respost a %s amb un missatge curt:',
+ 'thewire:notify:post' => '%s ha publicat un missatge curt nou:',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.tinymce.php b/mod/languages/languages/ca/ca.tinymce.php
new file mode 100644
index 000000000..9ed43e4bb
--- /dev/null
+++ b/mod/languages/languages/ca/ca.tinymce.php
@@ -0,0 +1,8 @@
+<?php
+$language = array (
+ 'tinymce:remove' => 'Treure editor',
+ 'tinymce:lang_notice' => 'L\'idioma del teu lloc és %s però aquest no està instal·lat per al TinyMCE. Aconsegueix-lo a <a target="_blank" href="%s">aquí</a> i copia\'l a %s. Llavors, <a href="%s">actualitza la catxé</a>. Mira el README del TinyMCE per a més detalls.',
+ 'tinymce:add' => 'Afegir editor',
+ 'tinymce:word_count' => 'Quantitat de paraules: ',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.twitter.php b/mod/languages/languages/ca/ca.twitter.php
new file mode 100644
index 000000000..aa60b7201
--- /dev/null
+++ b/mod/languages/languages/ca/ca.twitter.php
@@ -0,0 +1,10 @@
+<?php
+$language = array (
+ 'twitter:notset' => 'El giny de Twitter no està preparat per funcionar. Per poder mostrar els tweets més recents, fes clic a - editar - i completa les teves dades',
+ 'twitter:username' => 'Introdueix el teu nom d\'usuària de Twitter.',
+ 'twitter:title' => 'Twitter',
+ 'twitter:info' => 'Mostra els tweets més recents',
+ 'twitter:num' => 'Quantitat de tweets a mostrar.',
+ 'twitter:visit' => 'Anar al meu Twitter',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/ca/ca.uservalidationbyemail.php b/mod/languages/languages/ca/ca.uservalidationbyemail.php
new file mode 100644
index 000000000..f8071c7a4
--- /dev/null
+++ b/mod/languages/languages/ca/ca.uservalidationbyemail.php
@@ -0,0 +1,48 @@
+<?php
+$language = array (
+ 'email:validate:subject' => '%s si us plau, confirma la teva adreça de correu per %s!',
+ 'email:validate:body' => '%s,
+
+Abans de començar a utilitzar %s, has de confirmar la teva adreça de correu.
+
+Si us plau, confirma la teva adreça fent clic a l´enllaç de sota:
+
+%s
+
+Si no pots fer clic a l´enllaç, copia\'l i enganxa\'l al teu explorador manualment.
+
+%s
+%s',
+ 'email:confirm:success' => 'Has confirmat la teva adreça de correu!',
+ 'email:confirm:fail' => 'La teva adreça de correu no ha pogut ser verificada...',
+ 'uservalidationbyemail:registerok' => 'Per activar el teu compte, si us plau confirma la teva adreça de correu amb el correu que t\'hem enviat a la teva bústia.',
+ 'uservalidationbyemail:login:fail' => 'El teu compte no es troba validat. La identificació ha fallat. S´ha enviat un altre correu de verificació.',
+ 'uservalidationbyemail:admin:no_unvalidated_users' => 'No hi ha usuàries no validades.',
+ 'uservalidationbyemail:confirm_validate_checked' => 'Validar les usuàries seleccionades?',
+ 'uservalidationbyemail:confirm_resend_validation_checked' => 'Reenviar validació a les usuàries seleccionades?',
+ 'uservalidationbyemail:confirm_delete_checked' => 'Eliminar les usuàries seleccionades?',
+ 'uservalidationbyemail:errors:unknown_users' => 'Usuàries desconegudes',
+ 'uservalidationbyemail:errors:could_not_validate_user' => 'No es pot validar l´usuària.',
+ 'uservalidationbyemail:errors:could_not_validate_users' => 'No es pot validar totes les usuàries seleccionades.',
+ 'uservalidationbyemail:errors:could_not_delete_user' => 'No es pot eliminar la usuària.',
+ 'uservalidationbyemail:errors:could_not_delete_users' => 'No es poden eliminar totes les usuàries seleccionades.',
+ 'uservalidationbyemail:errors:could_not_resend_validations' => 'No es poden reenviar les sol·licituds de validació a totes les usuàries seleccionades.',
+ 'uservalidationbyemail:messages:validated_user' => 'Usuària validada.',
+ 'uservalidationbyemail:messages:validated_users' => 'Totes les usuàries seleccionades han estat validades.',
+ 'uservalidationbyemail:messages:deleted_user' => 'Usuària eliminada.',
+ 'uservalidationbyemail:messages:deleted_users' => 'Totes les usuàries seleccionades han estat eliminades.',
+ 'uservalidationbyemail:messages:resent_validation' => 'Sol·licitud de validació reenviada.',
+ 'uservalidationbyemail:messages:resent_validations' => 'Sol·licituds de validació reenviades a les usuàries seleccionades.',
+ 'admin:users:unvalidated' => 'No validats',
+ 'uservalidationbyemail:admin:unvalidated' => 'No validat',
+ 'uservalidationbyemail:admin:user_created' => 'Registrat %s',
+ 'uservalidationbyemail:admin:resend_validation' => 'Reenviar validació',
+ 'uservalidationbyemail:admin:validate' => 'Validar',
+ 'uservalidationbyemail:admin:delete' => 'Eliminar',
+ 'uservalidationbyemail:confirm_validate_user' => 'Validar %s?',
+ 'uservalidationbyemail:confirm_resend_validation' => 'Reenviar correu de validació a %s?',
+ 'uservalidationbyemail:confirm_delete' => 'Eliminar %s?',
+ 'uservalidationbyemail:check_all' => 'Tots',
+ 'uservalidationbyemail:errors:could_not_resend_validation' => 'No es pot reenviar la sol&middot;licitud de validació.',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/languages/languages/da/da.blog.php b/mod/languages/languages/da/da.blog.php
new file mode 100644
index 000000000..8c33c356b
--- /dev/null
+++ b/mod/languages/languages/da/da.blog.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Blog Danish language file.
+ *
+ */
+
+$danish = array(
+ 'blog' => 'Blog',
+ 'blog:blogs' => 'Blogge',
+ 'blog:revisions' => 'Revision',
+ 'blog:archives' => 'Arkiver',
+ 'blog:blog' => 'Blog',
+ 'item:object:blog' => 'Blogs',
+
+ 'blog:title:user_blogs' => '%s\'s blogge',
+ 'blog:title:all_blogs' => 'Alle blogge',
+ 'blog:user:friends' => '%ss venners blog',
+
+ 'blog:group' => 'Gruppe blog',
+ 'blog:enableblog' => 'Aktiver gruppe blog',
+ 'blog:write' => 'Skriv et blogindlæg',
+
+ // Editing
+ 'blog:add' => 'Tilføj blogindlæg',
+ 'blog:edit' => 'Rediger blogindlæg',
+ 'blog:excerpt' => 'Uddrag',
+ 'blog:body' => 'Brødtekst',
+ 'blog:save_status' => 'Sidst gemt: ',
+ 'blog:never' => 'Aldrig',
+
+ // Statuses
+ 'blog:status' => 'Status',
+ 'blog:status:draft' => 'Kladde',
+ 'blog:status:published' => 'Offentliggjort',
+ 'blog:status:unsaved_draft' => 'Ikke gemt kladde',
+
+ 'blog:revision' => 'Revision',
+ 'blog:auto_saved_revision' => 'Auto gemt revision',
+
+ // messages
+ 'blog:message:saved' => 'Blogindlæg gemt.',
+ 'blog:error:cannot_save' => 'Kan ikke gemme blogindlæg.',
+ 'blog:error:cannot_write_to_container' => 'Utilstrækkelig adgang til at gemme bloggen til gruppe.',
+ 'blog:error:post_not_found' => 'Dette indlæg er blevet fjernet, er ugyldigt, eller du har ikke tilladelse til at se det.',
+ 'blog:messages:warning:draft' => 'Der er en ikke gemt kladde til dette indlæg!',
+ 'blog:edit_revision_notice' => '(Gammel version)',
+ 'blog:message:deleted_post' => 'Blogindlæg slettet.',
+ 'blog:error:cannot_delete_post' => 'Kan ikke slette blogindlæg.',
+ 'blog:none' => 'Ingen blogindlæg',
+ 'blog:error:missing:title' => 'Angiv en blog titel!',
+ 'blog:error:missing:description' => 'Indtast venligst brødteksten til ​​din blog!',
+ 'blog:error:cannot_edit_post' => 'Dette indlæg eksisterer måske ikke, eller du har måske ikke tilladelse til at redigere det.',
+ 'blog:error:revision_not_found' => 'Kan ikke finde denne revision.',
+
+ // river
+ 'river:create:object:blog' => '%s har offentliggjort et blogindlæg %s',
+ 'river:comment:object:blog' => '%s har kommenteret et blogindlæg %s',
+
+ // notifications
+ 'blog:newpost' => 'Et nyt blogindlæg',
+
+ // widget
+ 'blog:widget:description' => 'Vis dit seneste blogindlæg',
+ 'blog:moreblogs' => 'Flere blogindlæg',
+ 'blog:numbertodisplay' => 'Antal af blogindlæg, der skal vises',
+ 'blog:noblogs' => 'Ingen blogindlæg'
+
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.bookmarks.php b/mod/languages/languages/da/da.bookmarks.php
new file mode 100644
index 000000000..d0d679a43
--- /dev/null
+++ b/mod/languages/languages/da/da.bookmarks.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Bookmarks Danish language file
+ */
+
+$danish = array(
+
+ /**
+ * Menu items and titles
+ */
+ 'bookmarks' => "Bogmærker",
+ 'bookmarks:add' => "Tilføj bogmærke",
+ 'bookmarks:owner' => "%s's bogmærker",
+ 'bookmarks:read' => "Mine bogmærker",
+ 'bookmarks:friends' => "Venners bogmærker",
+ 'bookmarks:everyone' => "Alle bogmærker",
+ 'bookmarks:this' => "Bogmærk denne side",
+ 'bookmarks:this:group'=> "Bogmærk i %s",
+ 'bookmarks:bookmarklet' => "Hent \"Bookmarklet\"",
+ 'bookmarks:bookmarklet:group'=> "Hent gruppe \"Bookmarklet\"",
+ 'bookmarks:inbox' => "Bogmærke indbakke",
+ 'bookmarks:morebookmarks' => "Flere bogmærker",
+ 'bookmarks:more' => "Flere bogmærker",
+ 'bookmarks:with' => "Del med",
+ 'bookmarks:new' => "Et nyt bogmærke",
+ 'bookmarks:via' => "via bogmærker",
+ 'bookmarks:address' => "Adresse på ressourcen der skal bogmærkes",
+ 'bookmarks:none' => 'Ingen bogmærker',
+
+ 'bookmarks:delete:confirm' => "Er du sikker på, at du vil slette denne ressource?",
+
+ 'bookmarks:numbertodisplay' => "Antal bogmærker, der skal vises",
+
+ 'bookmarks:shared' => "Bogmærket",
+ 'bookmarks:visit' => "Besøg ressource" ,
+ 'bookmarks:recent' => "Seneste bogmærker",
+
+ 'river:create:object:bookmarks' => '%s bookmærkede %s',
+ 'river:comment:object:bookmarks' => '%s kommenterede bookmærket %s',
+ 'bookmarks:river:annotate' => "%s kommenterede på",
+ 'bookmarks:river:item' => "noget",
+
+ 'item:object:bookmarks' => "Bogmærker",
+
+ 'bookmarks:group' => 'Gruppe bogmærker',
+ 'bookmarks:enablebookmarks' => 'Aktiver gruppe bogmærker',
+ 'bookmarks:nogroup' => 'Denne gruppe har ingen bogmærker endnu',
+ 'bookmarks:more' => 'Flere bogmærker',
+
+ 'bookmarks:no_title' => 'Ingen titel',
+
+ /**
+ * Widget and bookmarklet
+ */
+ 'bookmarks:widget:description' => "Vis dine nyeste bogmærker.",
+
+ 'bookmarks:bookmarklet:description' =>
+ "\"Bookmarklet\" bogmærket gør dig i stand til at dele enhver ressource, du finder på nettet med dine venner eller bare lave et privat bogmærke. For at bruge det skal du blot trække knappen herunder op i din browsers linkbar:",
+
+ 'bookmarks:bookmarklet:descriptionie' =>
+ "Hvis du bruger Internet Explorer, er du nødt til at højreklikke på \"Bookmarklet\" ikonet og vælge \"Føj til Favoritter\" og derefter \"Linkbar\".",
+
+ 'bookmarks:bookmarklet:description:conclusion' =>
+ "Du kan så gemme enhver side, du besøger ved at klikke på ikonet.",
+
+/**
+* Status messages
+*/
+
+ 'bookmarks:save:success' => "Bogmærket er gemt.",
+ 'bookmarks:delete:success' => "Bogmærket er slettet.",
+
+/**
+ * Error messages
+ */
+
+ 'bookmarks:save:failed' => "Bogmærket kunne ikke gemmes, prøv venligst igen.",
+ 'bookmarks:delete:failed' => "Bogmærket kunne ikke slettes, prøv venligst igen."
+
+);
+
+add_translation("da",$danish);
diff --git a/mod/languages/languages/da/da.categories.php b/mod/languages/languages/da/da.categories.php
new file mode 100644
index 000000000..b0f7c5d01
--- /dev/null
+++ b/mod/languages/languages/da/da.categories.php
@@ -0,0 +1,15 @@
+<?php
+/*
+ * Categories Danish language file
+*/
+
+$danish = array(
+ 'categories' => 'Kategorier',
+ 'categories:settings' => 'Indstil kategorier for din Elgg side',
+ 'categories:explanation' => 'Du kan definerede nogle kategorier, der vil blive brugt over hele systemet, ved at skrive dem herunder, separeret med komma. Kompatible værktøjer vil så vise dem, når brugeren opretter eller redigerer indhold.',
+ 'categories:save:success' => 'Kategorierne er gemt.',
+ 'categories:results' => "Resultater for kategori: %s",
+ 'categories:on_enable_reminder' => "Du har ikke tilføjet nogen kategorier endnu! <a href=\"%s\">Tilføj kategorier nu.</a>",
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.custom_index.php b/mod/languages/languages/da/da.custom_index.php
new file mode 100644
index 000000000..983126085
--- /dev/null
+++ b/mod/languages/languages/da/da.custom_index.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Custom Index Danish language file
+ */
+
+$danish = array(
+ 'custom:bookmarks' => "Seneste bogmærker",
+ 'custom:groups' => "Seneste grupper",
+ 'custom:files' => "Seneste filer",
+ 'custom:blogs' => "Seneste blogindlæg",
+ 'custom:members' => "Seneste medlemmer",
+);
+
+add_translation("da",$danish);
diff --git a/mod/languages/languages/da/da.developers.php b/mod/languages/languages/da/da.developers.php
new file mode 100644
index 000000000..9d9735acb
--- /dev/null
+++ b/mod/languages/languages/da/da.developers.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Elgg developer tools Danish language file.
+ *
+ */
+
+$danish = array(
+ // menu
+ 'admin:developers' => 'Udviklere',
+ 'admin:developers:settings' => 'Udvikler indstillinger',
+ 'admin:developers:preview' => 'Tema eksempel',
+ 'admin:developers:inspect' => 'Inspicér',
+
+ // settings
+ 'elgg_dev_tools:settings:explanation' => 'Kontrollér dine indstillinger for udvikling og fejlfinding nedenfor. Nogle af disse indstillinger er også tilgængelige på andre admin sider.',
+ 'developers:label:simple_cache' => 'Brug simpel cache',
+ 'developers:help:simple_cache' => 'Fravælg fil cache, når du udvikler. Ellers vil dine ændringer (herunder CSS) blive ignoreret.',
+ 'developers:label:view_path_cache' => 'Brug view path cache',
+ 'developers:help:view_path_cache' => 'Slå dette fra, under udviklingen. Ellers vil nye views i din plugin ikke blive registreret.',
+ 'developers:label:debug_level' => "Sporings niveau",
+ 'developers:help:debug_level' => "Dette kontrollerer mængden af ​​loggede oplysninger. Se elgg_log() for flere oplysninger.",
+ 'developers:label:display_errors' => 'Vis fatale PHP fejl',
+ 'developers:help:display_errors' => "Som standard, udelader Elgg's .htaccess fil visning af fatale fejl.",
+ 'developers:label:screen_log' => "Log til skærmen",
+ 'developers:help:screen_log' => "Dette viser elgg_log() og elgg_dump() output på websiden.",
+ 'developers:label:show_strings' => "Vis rå oversættelses strenge",
+ 'developers:help:show_strings' => "Dette viser oversættelses strenge brugt af elgg_echo().",
+ 'developers:label:wrap_views' => "Wrap views",
+ 'developers:help:wrap_views' => "Dette wrapper næsten alle views med HTML kommentarer. Nyttigt til at finde et view, der opretter noget bestemt HTML.",
+ 'developers:label:log_events' => "Log events og plugin hooks",
+ 'developers:help:log_events' => "Skriver events og plugin hooks til loggen. Advarsel: Der er mange af disse per side.",
+
+ 'developers:debug:off' => 'Fra',
+ 'developers:debug:error' => 'Fejl',
+ 'developers:debug:warning' => 'Advarsel',
+ 'developers:debug:notice' => 'Bemærk',
+
+ // inspection
+ 'developers:inspect:help' => 'Inspicér konfiguration af Elgg\'s framework.',
+
+ // event logging
+ 'developers:event_log_msg' => "%s: '%s, %s' i %s",
+
+ // theme preview
+ 'theme_preview:general' => 'Introduktion',
+ 'theme_preview:breakout' => 'Hop ud af iframe',
+ 'theme_preview:buttons' => 'Knapper',
+ 'theme_preview:components' => 'Komponenter',
+ 'theme_preview:forms' => 'Formularer',
+ 'theme_preview:grid' => 'Grid',
+ 'theme_preview:icons' => 'Ikoner',
+ 'theme_preview:modules' => 'Moduler',
+ 'theme_preview:navigation' => 'Navigation',
+ 'theme_preview:typography' => 'Typografi',
+
+ // status messages
+ 'developers:settings:success' => 'Indstillinger gemt',
+);
+
+add_translation('da', $danish);
diff --git a/mod/languages/languages/da/da.diagnostics.php b/mod/languages/languages/da/da.diagnostics.php
new file mode 100644
index 000000000..a49ef0fd3
--- /dev/null
+++ b/mod/languages/languages/da/da.diagnostics.php
@@ -0,0 +1,70 @@
+<?php
+/**
+* Elgg diagnostics Danish language file
+*/
+
+
+
+$danish = array(
+
+ 'admin:utilities:diagnostics' => 'System diagnostik',
+ 'diagnostics' => 'System diagnostik',
+ 'diagnostics:report' => 'Diagnostik rapport',
+ 'diagnostics:unittester' => 'Enhedstest',
+
+ 'diagnostics:description' => 'Den følgende diagnostik rapport er anvendelig til at diagnosticere ethvert problem med Elgg, og skal vedhæftes alle bugrapporter.',
+ 'diagnostics:unittester:description' => 'Følgende er diagnostik tests, som er registreret af plugins og kan udføres for at debugge dele af Elgg frameworket.',
+
+ 'diagnostics:unittester:description' => 'Enhedstest kontrollerer Elgg Core for defekte eller buggy APIs.',
+ 'diagnostics:unittester:debug' => 'Siden skal være i debug mode for at køre enhedstest.',
+ 'diagnostics:unittester:warning' => 'Advarsel: Disse tests kan efterlade debugging objekter i din database. BRUG DEM IKKE PÃ… EN FUNGERENDE ONLINE SIDE!',
+
+ 'diagnostics:test:executetest' => 'Udfør test',
+ 'diagnostics:test:executeall' => 'Udfør alle',
+ 'diagnostics:unittester:notests' => 'Beklager, der er ingen enhedstest moduler installeret.',
+ 'diagnostics:unittester:testnotfound' => 'Beklager, rapporten kunne ikke genereres, fordi testen ikke blev fundet',
+
+ 'diagnostics:unittester:testresult:nottestclass' => 'FEJL - Resultatet er ikke en test class',
+ 'diagnostics:unittester:testresult:fail' => 'FEJL',
+ 'diagnostics:unittester:testresult:success' => 'SUCCES',
+
+ 'diagnostics:unittest:example' => 'Eksempel på enhedstest er kun tilgængelig i debug mode.',
+
+ 'diagnostics:unittester:report' => 'Test rapport for %s',
+
+ 'diagnostics:download' => 'Download .txt',
+
+
+ '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("da", $danish);
diff --git a/mod/languages/languages/da/da.embed.php b/mod/languages/languages/da/da.embed.php
new file mode 100644
index 000000000..4f9195fd1
--- /dev/null
+++ b/mod/languages/languages/da/da.embed.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Embed Danish language file
+ *
+ */
+
+$danish = array(
+ 'media:insert' => 'Embed indhold',
+ 'embed:embed' => 'Embed',
+ 'embed:media' => 'Embed indhold',
+ 'embed:instructions' => 'Klik på en fil for at embedde den i dit indhold.',
+ 'embed:upload' => 'Upload medie',
+ 'embed:upload_type' => 'Upload type: ',
+
+ // messages
+ 'embed:no_upload_content' => 'Intet uploaded indhold!',
+ 'embed:no_section_content' => 'Ingen emner fundet.',
+
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.event_manager.php b/mod/languages/languages/da/da.event_manager.php
new file mode 100644
index 000000000..2530be247
--- /dev/null
+++ b/mod/languages/languages/da/da.event_manager.php
@@ -0,0 +1,302 @@
+<?php
+
+ $danish = array(
+ 'event_manager' => 'Event Manager',
+ 'groups:enableevents' => 'Aktiver gruppe events',
+ 'event_manager:group' => 'Gruppe events',
+ 'event_manager:group:more' => 'Flere events',
+
+ 'item:object:event' => 'Events',
+ 'item:object:eventslot' => 'Eventaktiviteter',
+ 'item:object:eventday' => 'Eventdage',
+ 'item:object:eventregistration' => 'Eventtilmeldinger',
+ 'item:object:eventregistrationquestion' => 'Event tilmeldings spørgsmål',
+ 'item:object:eventquestions' => 'Event spørgsmål',
+
+ 'event_manager:menu:title' => 'Events',
+ 'event_manager:menu:events' => 'Alle events',
+ 'event_manager:menu:group_events' => 'Gruppe events',
+ 'event_manager:menu:new_event' => 'Nyt Event',
+
+ 'event_manager:sidebar:title' => 'Viser nu',
+
+ 'river:comment:object:event' => '%s kommenteret på %s',
+
+ 'event_manager:list:title' => 'Events',
+ 'event_manager:list:searchevents' => 'Søg events',
+ 'event_manager:list:advancedsearch' => 'Avanceret søgning',
+ 'event_manager:list:simplesearch' => 'Simpel søgning',
+ 'event_manager:list:noresults' => 'Ingen events fundet',
+ 'event_manager:list:showmorevents' => 'Vis flere events',
+ 'event_manager:list:includepastevents' => 'Inklusiv gamle events',
+ 'event_manager:list:meattending' => 'Vis events hvor jeg deltager',
+ 'event_manager:list:owning' => 'Vis events jeg har oprettet',
+ 'event_manager:list:friendsattending' => 'Vis events hvor mine venner deltager',
+
+ 'event_manager:list:navigation:list' => 'Liste',
+ 'event_manager:list:navigation:all' => 'Alle events',
+ 'event_manager:list:navigation:other' => 'Andre events',
+ 'event_manager:list:navigation:owned' => 'Mine events',
+ 'event_manager:list:navigation:your' => 'Dine events',
+ 'event_manager:list:navigation:friends' => 'Venners events',
+ 'event_manager:list:navigation:attending' => 'Deltager disse events',
+ 'event_manager:list:navigation:onthemap' => 'PÃ¥ kortet',
+ 'event_manager:list:navigation:refreshing' => 'opdater events',
+ 'event_manager:list:count' => ' events fundet',
+ 'event_manager:full' => 'optaget',
+ 'event_manager:personwaitinglist' => 'personer på ventelisten',
+ 'event_manager:peoplewaitinglist' => 'mennesker på ventelisten',
+
+ 'event_manager:registration:list:navigation:waiting' => 'Vente liste',
+ 'event_manager:registration:list:navigation:attending' => 'Deltagere',
+
+ 'event_manager:registration:view:savetopdf' => 'Gem som pdf',
+
+ 'event_manager:edit:title' => 'Opret / Ændre Event',
+ 'event_manager:edit:upload:title' => 'Tilføj filer til dit event',
+ 'event_manager:edit:form:file' => 'Vælge fil',
+ 'event_manager:edit:form:title' => 'Titel',
+ 'event_manager:edit:form:description' => 'Beskrivelse',
+ 'event_manager:edit:form:files' => 'Filer',
+ 'event_manager:edit:form:venue' => 'Sted',
+ 'event_manager:edit:form:type' => 'Type',
+ 'event_manager:edit:form:location' => 'Lokalitet',
+ 'event_manager:event:edit:maps_address' => 'Adresse',
+ 'event_manager:edit:form:region' => 'Region',
+ 'event_manager:edit:form:options' => 'Muligheder',
+ 'event_manager:edit:form:rsvp_options' => 'Svar muligheder',
+ 'event_manager:edit:form:shortdescription' => 'Kort beskrivelse',
+ 'event_manager:edit:form:organizer' => 'Arrangør',
+ 'event_manager:edit:form:with_program' => 'Beskriv dagens program?',
+ 'event_manager:edit:form:delete_current_icon' => 'Slet nuværende eventbillede?',
+ 'event_manager:edit:form:comments_on' => 'Kommentarer slået til?',
+ 'event_manager:edit:form:registration_ended' => 'Inaktiver tilmelding på dette event',
+ 'event_manager:edit:form:registration_needed' => 'Behov for tilmelding for at deltage?',
+ 'event_manager:edit:form:show_attendees' => 'Vis deltagere?',
+ 'event_manager:edit:form:notify_onsignup' => 'Giv mig besked, når nogen tilmelder sig',
+ 'event_manager:edit:form:start_day' => 'Dato',
+ 'event_manager:edit:form:start_day:from' => 'Dato fra',
+ 'event_manager:edit:form:start_day:to' => 'Dato til',
+ 'event_manager:edit:form:endregistration_day' => 'Slut dato for tilmelding',
+ 'event_manager:edit:form:multiple_days' => 'Flere dage?',
+ 'event_manager:edit:form:start_time' => 'Start tid',
+ 'event_manager:edit:form:end_time' => 'Slut tid',
+ 'event_manager:edit:form:access' => 'Adgang',
+ 'event_manager:edit:form:max_attendees' => 'Maks deltagere',
+ 'event_manager:edit:form:waiting_list' => 'Aktiver vente liste?',
+ 'event_manager:edit:form:register_nologin' => 'Tillad tilmelding for brugere der ikke er logget ind?',
+ 'event_manager:edit:form:spots_left' => 'Pladser tilbage',
+ 'event_manager:edit:form:spots_left:full' => 'Aktivitet er fyldt op',
+ 'event_manager:edit:form:spots_left:waiting_list' => ' deltage(re) på venteliste',
+ 'event_manager:edit:form:currenticon' => 'Nuværende eventbillede',
+ 'event_manager:edit:form:icon' => 'Event eventbillede (lad stå blankt for ikke at ændre)',
+
+ 'event_manager:form:program:day' => 'Tilføj event dag',
+ 'event_manager:program:day:add' => 'Tilføj dag',
+ 'event_manager:form:program:slot' => 'Tilføj aktivitet',
+ 'event_manager:program:slot:add' => 'Tilføj aktivitet',
+
+ 'event_manager:editregistration:title' => 'Ændre event registrings formular',
+ 'event_manager:editregistration:addfield' => 'Tilføj felt',
+ 'event_manager:editregistration:addfield:title' => 'Tilføj tilmeldingsformular felt',
+ 'event_manager:editregistration:fieldtype' => 'Felt type',
+ 'event_manager:editregistration:fieldoptions' => 'Felt muligheder',
+ 'event_manager:editregistration:commasepetared' => 'komma separeret',
+ 'event_manager:editregistration:question' => 'Spørgsmål',
+
+ 'event_manager:registration:message:registrationnotneeded' => 'Tilmelding til dette event er ikke nødvendigt.',
+ 'event_manager:registration:register:title' => 'Tilmeld til event',
+ 'event_manager:registration:registrationto' => 'tilmelding til ',
+ 'event_manager:registration:edit:title' => 'Ændre din tilmelding',
+ 'event_manager:registration:edityourregistration' => 'Ændre din tilmelding',
+ 'event_manager:registration:viewyourregistration' => 'Vis din tilmelding',
+ 'event_manager:registration:yourregistration' => 'Din tilmelding',
+ 'event_manager:registration:programparticipation' => 'Program deltagelse',
+ 'event_manager:registration:editprogramparticipation' => 'Ændre din program deltagelse',
+
+ 'event_manager:registration:program:success' => 'Der er hermed (af)tilmeldt til de valgte aktiviteter',
+ 'event_manager:registration:program:fail' => 'Der skete en fejl i (af)tilmeldingen til de valge aktiviteter',
+
+ 'event_manager:event:registration:notification:owner:subject' => 'Event tilmelding',
+ 'event_manager:event:registration:notification:user:subject' => 'Event tilmelding',
+
+ 'event_manager:event:registration:notification:owner:text:html:event_attending' => '<p>Hej %s, </p><p>%s har tilmeld sig som \'attending\' til dit <a href="%s">\'%s\'</a> event.</p>',
+ 'event_manager:event:registration:notification:owner:text:event_attending' => "Hej %s, \n\r\n\r%s har tilmeld sig som 'attending' til dit '%s' event.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:user:text:html:event_attending' => '<p>Hej %s, </p><p>Du har hermed tilmeldt dig som \'attending\' til <a href="%s">\'%s\'</a> eventen.</p>',
+ 'event_manager:event:registration:notification:user:text:event_attending' => "Hej %s, \n\r\n\rDu har hermed tilmeldt dig som 'attending' til '%s' eventen.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:owner:text:html:event_waitinglist' => '<p>Hej %s, </p><p>%s er på venteliste for dit <a href="%s">\'%s\'</a> event.</p>',
+ 'event_manager:event:registration:notification:owner:text:event_waitinglist' => "Hej %s, \n\r\n\r%s er på venteliste for dit '%s' event.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:user:text:html:event_waitinglist' => '<p>Hej %s, </p><p>Du er nu på venteliste for <a href="%s">\'%s\'</a> eventen.</p>',
+ 'event_manager:event:registration:notification:user:text:event_waitinglist' => "Hej %s, \n\r\n\rDu er nu på venteliste for '%s' eventen.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:owner:text:html:event_exhibiting' => '<p>Hej %s, </p><p>%s har tilmeldt sig som \'besøgende\' til dit <a href="%s">\'%s\'</a> event.</p>',
+ 'event_manager:event:registration:notification:owner:text:event_exhibiting' => "Hej %s, \n\r\n\r%s har tilmeldt sig som 'besøgende' til dit '%s' event.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:user:text:html:event_exhibiting' => '<p>Hej %s, </p><p>Du har hermed tilmeldt dig som \'besøgende\' til <a href="%s">\'%s\'</a> eventen.</p>',
+ 'event_manager:event:registration:notification:user:text:event_exhibiting' => "Hej %s, \n\r\n\rDu har hermed tilmeldt dig som 'besøgende' til '%s' eventen.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:owner:text:html:event_organizing' => '<p>Hej %s, </p><p>%s har hermed tilmeldt sig som \'arrangør\' til dit <a href="%s">\'%s\'</a> event.</p>',
+ 'event_manager:event:registration:notification:owner:text:event_organizing' => "Hej %s, \n\r\n\r%s har hermed tilmeldt sig som 'arrangør' til dit '%s' event.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:user:text:html:event_organizing' => '<p>Hej %s, </p><p>Du har hermed tilmeldt dig som \'arrangør\' til <a href="%s">\'%s\'</a> eventen.</p>',
+ 'event_manager:event:registration:notification:user:text:event_organizing' => "Hej %s, \n\r\n\rDu har hermed tilmeldt dig som 'arrangør' til '%s' eventen.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:owner:text:html:event_presenting' => '<p>Hej %s, </p><p>%s har hermed tilmeldt sig som \'frivillig\' til dit <a href="%s">\'%s\'</a> event.</p>',
+ 'event_manager:event:registration:notification:owner:text:event_presenting' => "Hej %s, \n\r\n\r%s har hermed tilmeldt sig som'frivillig' til dit '%s' event.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:user:text:html:event_presenting' => '<p>Hej %s, </p><p>Du har hermed tilmeldt dig som \'frivillig\' til <a href="%s">\'%s\'</a> eventen.</p>',
+ 'event_manager:event:registration:notification:user:text:event_presenting' => "Hej %s, \n\r\n\rDu har hermed tilmeldt dig som 'frivillig' til '%s' eventen.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:owner:text:html:event_interested' => '<p>Hej %s, </p><p>%s har hermed tilmeldt sig som \'interesseret\' til dit <a href="%s">\'%s\'</a> event.</p>',
+ 'event_manager:event:registration:notification:owner:text:event_interested' => "Hej %s, \n\r\n\r%s har hermed tilmeldt sig som 'interesseret' til dit '%s' event.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:user:text:html:event_interested' => '<p>Hej %s, </p><p>Du har hermed tilmeldt dig som \'interesseret\' til <a href="%s">\'%s\'</a> eventen.</p>',
+ 'event_manager:event:registration:notification:user:text:event_interested' => "Hej %s, \n\r\n\rDu har hermed tilmeldt dig som ''interesseret' til '%s' eventen.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:owner:text:html:event_undo' => '<p>Hej %s,</p><p>%s har meldt sig fra dit <a href="%s">\'%s\'</a> event.</p>',
+ 'event_manager:event:registration:notification:owner:text:event_undo' => "Hej %s, \n\r\n\r%s har meldt sig fra dit '%s' event.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:user:text:html:event_undo' => '<p>Hej %s,</p><p>Du har hermed meldt dig fra <a href="%s">\'%s\'</a> eventen.</p>',
+ 'event_manager:event:registration:notification:user:text:event_undo' => "Hej %s, \n\r\n\rDu har hermed meldt dig fra '%s' event.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:user:text:html:event_spotfree' => '<p>Hej %s, </p><p>Nogen har meldt sig fra <a href="%s">\'%s\'</a> eventen. Du er nu tilmeldt eventen og ikke længere på ventelisten.</p>',
+ 'event_manager:event:registration:notification:user:text:event_spotfree' => "Hej %s, \n\r\n\rNogen har meldt sig fra '%s' eventen. Du er nu tilmeldt eventen og ikke længere på ventelisten.\n\r\n\r",
+
+ 'event_manager:event:registration:notification:program:linktext' => 'Se programmet ved at klikke på dette link',
+
+ 'event_manager:event:rsvp' => 'Svar muligheder',
+ 'event_manager:event:editevent' => 'Ændre event',
+ 'event_manager:event:deleteevent' => 'Slette event',
+ 'event_manager:event:uploadfiles' => 'Upload filer',
+ 'event_manager:event:setsitetakeover' => 'Overtag siden',
+ 'event_manager:event:disablesitetakeover' => 'Inaktiver overtagelsen af sitet',
+ 'event_manager:event:attendees' => 'Deltagere',
+ 'event_manager:event:progam' => 'Programmet',
+ 'event_manager:event:editprogram' => 'Ændre programmet',
+ 'event_manager:event:editquestions' => 'Ændre tilmeldings spørgsmålene',
+ 'event_manager:event:viewwaitinglist' => 'Vis venteliste',
+ 'event_manager:event:waitinglist:empty' => 'Ventelisten er tom',
+ 'event_manager:event:viewregistrations' => 'Vis tilmeldinger',
+ 'event_manager:event:viewregistration' => 'Vis tilmelding',
+ 'event_manager:event:noregistrations' => 'Ingen tilmeldinger endnu',
+ 'event_manager:event:exportattendees' => 'Eksporter deltagerne',
+ 'event_manager:event:currentavatar' => 'Nuværende event eventbillede',
+ 'event_manager:event:editicon' => 'Ændre eventbillede',
+ 'event_manager:event:preview' => 'Vis eventbillede',
+ 'event_manager:event:createicon' => 'Opret eventbillede',
+
+ 'event_manager:registrationform:editquestion:required' => 'Obligatorisk?',
+ 'event_manager:registrationform:fieldorder:error' => 'Fejl i ændring af felt rækkefølge',
+
+ 'event_manager:event:file:notfound:title' => 'Fil ikke fundet',
+ 'event_manager:event:file:notfound:text' => 'Filen du leder efter kunne ikke findes',
+
+ 'event_manager:event:register:register_link' => 'Tilmeld dig dette event',
+ 'event_manager:event:register:no_registrationform' => 'The organizer of this event hasn\'t created a registration form yet.<br />Please try again later.',
+
+ 'event_manager:event:view:event' => 'Event',
+ 'event_manager:event:view:date' => 'Dato',
+ 'event_manager:event:view:createdby' => 'Oprettet af',
+
+ 'event_manager:datepicker:input:localisation' => '',
+ 'event_manager:datepicker:input:dateformat' => '%d.%m.%Y',
+ 'event_manager:datepicker:input:dateformat_js' => 'dd.mm.yyyy',
+
+ //Error
+ 'event_manager:login_needed' => 'Du skal være logget ind.',
+ 'event_manager:event_not_found' => 'Event ikke fundet.',
+ 'event_manager:relationship_type_not_found' => 'Sammenkoblingstype ikke fundet.',
+ 'event_manager:error:max_attendees:not_numeric' => 'Tallet for \'Maks deltagere\' skal være numerisk.',
+
+ // relationships
+ 'event_manager:event:relationship:join' => 'Tilmeld event',
+ 'event_manager:event:relationship:leave' => 'Afmeld event',
+ 'event_manager:event:relationship:event_attending' => 'Deltager',
+ 'event_manager:event:relationship:event_waitinglist' => 'Venteliste',
+ 'event_manager:event:relationship:event_interested' => 'Interesseret',
+ 'event_manager:event:relationship:event_presenting' => 'Frivillig',
+ 'event_manager:event:relationship:event_exhibiting' => 'Besøgende',
+ 'event_manager:event:relationship:event_organizing' => 'Arrangør',
+ 'event_manager:event:relationship:undo' => 'Fortryd',
+ 'event_manager:event:relationship:kick' => 'Prik fra event',
+
+ 'event_manager:event:rsvp:registration_ended' => 'Registreringen til dette event er afsluttet.',
+ 'event_manager:event:rsvp:event_full' => 'Dette er event har opnået maks. loftet for antal deltagere.',
+ 'event_manager:event:rsvp:waiting_list' => 'Venteliste',
+ 'event_manager:event:rsvp:nospotsleft' => 'Dette event har ikke flere pladser tilbage for det\'s aktiviteter.',
+ 'event_manager:event:rsvp:waiting_list:message' => 'Det event du vil deltage i er optaget. Udfyld venligst dette formular, for at skrive dig på venteliste.',
+
+ 'event_manager:event:relationship:message:event_attending' => 'Du deltager nu i dette event',
+ 'event_manager:event:relationship:message:event_waitinglist' => 'Du er nu på ventelisten for dette event',
+ 'event_manager:event:relationship:message:event_interested' => 'Du er nu interesseret i dette event',
+ 'event_manager:event:relationship:message:event_presenting' => 'Du er nu frivillige hjælper ved dette event',
+ 'event_manager:event:relationship:message:event_exhibiting' => 'Du er nu besøgende til dette event',
+ 'event_manager:event:relationship:message:event_organizing' => 'Du er nu arrangør for dette event',
+ 'event_manager:event:relationship:message:event_undo' => 'Du har nu afmeldt dig dette event',
+ 'event_manager:event:relationship:message:error' => 'Fejl i til-/afmeldingen til eventen',
+ 'event_manager:event:relationship:message:unavailable_relation' => 'Svar muligheden du valgte er ikke tilgængeligt',
+
+ // widgets
+ 'event_manager:widgets:events:title' => 'Event manager',
+ 'event_manager:widgets:events:description' => 'Vis kommende events',
+
+ 'event_manager:widgets:events:numbertodisplay' => 'Antallet af events til visning',
+ 'event_manager:widgets:events:showevents' => 'Vis events',
+ 'event_manager:widgets:events:showevents:icreated' => 'jeg har oprettet',
+ 'event_manager:widgets:events:showevents:attendingto' => 'jeg deltager i',
+
+ // actions
+ 'event_manager:action:event:edit:ok' => 'Gemt',
+ 'event_manager:action:event:edit:error' => 'Fejl: Event ikke gemt',
+ 'event_manager:action:event:edit:error_fields' => 'Udfyld venligst de obligatoriske felter',
+ 'event_manager:action:registration:edit:error_fields_with_program' => 'Udfyld venligst de obligatoriske felter og vælg mindst 1 aktivitet at deltage i',
+ 'event_manager:action:registration:edit:error_fields_program_only' => 'Vælg mindst 1 aktivitet at deltage i',
+ 'event_manager:action:event:delete:ok' => 'Slettet',
+ 'event_manager:action:event:delete:error' => 'Fejl: Event ikke slettet',
+
+ // settings
+ 'event_manager:settings:google_maps' => 'Google Maps Indstillinger',
+ 'event_manager:settings:enter_google_maps_key' => 'Udfyld din google maps kode',
+ 'event_manager:settings:google_maps:enterdefaultlocation' => 'Skriv en standard lokation, som google kortet skal starte på',
+ 'event_manager:settings:google_maps:enterdefaultzoom' => 'Vælg en standard zoom indstilling (0 = zoomet ind, 19 = zoomet ud)',
+ 'event_manager:settings:enter_google_maps_key:clickhere' => 'GÃ¥ til <a target="_blank" href="http://code.google.com/apis/maps/signup.html">http://code.google.com/apis/maps/signup.html</a> for at hente din "Google Maps API key"',
+ 'event_manager:settings:region_list' => 'Skriv (komma separerede) event regioner',
+ 'event_manager:settings:type_list' => 'Skriv (komma separerede) event typer',
+ 'event_manager:settings:migration' => 'Migrer %d events fra "Event kalenderen"',
+ 'event_manager:settings:migration:success' => 'Korrekt migrerede %d events',
+ 'event_manager:settings:migration:noeventstomigrate' => 'Ingen events at migrere',
+ 'event_manager:settings:notification_sender' => 'Svar notification sender (email)',
+
+ 'event_manager:settings:migration:site:whocancreate' => 'Hvem skal kunne oprette events',
+ 'event_manager:settings:migration:site:whocancreate:admin_only' => 'kun admin',
+ 'event_manager:settings:migration:site:whocancreate:everyone' => 'alle',
+
+ 'event_manager:settings:migration:group:whocancreate' => 'Hvem skal kunne oprette gruppe events',
+ 'event_manager:settings:migration:group:whocancreate:group_admin' => 'gruppe ejere og admins',
+ 'event_manager:settings:migration:group:whocancreate:members' => 'ethvert gruppemedlem',
+ 'event_manager:settings:migration:group:whocancreate:no_one' => 'ingen',
+
+
+ // river
+ 'event_manager:river:event_relationship:create:event_attending' => '%s deltager i %s',
+ 'event_manager:river:event_relationship:create:event_interested' => '%s er interesseret i %s',
+ 'event_manager:river:event_relationship:create:event_presenting' => '%s er frivillig ved %s',
+ 'event_manager:river:event_relationship:create:event_exhibiting' => '%s er besøgende på %s',
+ 'event_manager:river:event_relationship:create:event_organizing' => '%s er arrangør for %s',
+
+ 'event_manager:confirm:sitetakeover:access' => 'Dette event sætter sin adgang til offentlig for at blive overtaget af sitet.',
+
+ 'calculate_route' => 'Beregn rute',
+
+ 'from' => 'Fra',
+ 'to' => 'Til',
+ 'less' => 'Mindre',
+ 'approve' => 'Godkend',
+ 'disapprove' => 'Afvis',
+ 'requiredfields' => 'Krævede felter',
+ );
+
+ add_translation('da', $danish);
diff --git a/mod/languages/languages/da/da.externalpages.php b/mod/languages/languages/da/da.externalpages.php
new file mode 100644
index 000000000..3c0bd333a
--- /dev/null
+++ b/mod/languages/languages/da/da.externalpages.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * External pages English language file
+ */
+
+$danish = array(
+
+/**
+* Menu items and titles
+*/
+ 'expages' => "Ekstra sider",
+ 'admin:appearance:expages' => "Ekstra sider",
+ 'expages:about' => "Om",
+ 'expages:terms' => "Betingelser",
+ 'expages:privacy' => "Beskyttelse af personlige oplysninger",
+ 'expages:contact' => "Kontakt",
+
+ 'expages:notset' => "Denne side er ikke sat op endnu.",
+
+ /**
+ * Status messages
+ */
+ 'expages:posted' => "Din side blev opdateret.",
+ 'expages:error' => "Kunne ikke gemme denne side.",
+
+);
+
+add_translation('da',$danish);
+
+
diff --git a/mod/languages/languages/da/da.file.php b/mod/languages/languages/da/da.file.php
new file mode 100644
index 000000000..f63285731
--- /dev/null
+++ b/mod/languages/languages/da/da.file.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * Elgg file plugin language pack
+ *
+ * @package ElggFile
+ */
+
+$danish = array(
+
+/**
+ * Menu items and titles
+ */
+ 'file' => "Filer",
+ 'file:user' => "%s's filer",
+ 'file:friends' => "Venners filer",
+ 'file:all' => "Alle filer",
+ 'file:edit' => "Rediger fil",
+ 'file:more' => "Flere filer",
+ 'file:list' => "Liste",
+ 'file:group' => "Gruppe filer",
+ 'file:gallery' => "Galleri",
+ 'file:gallery_list' => "Vis som liste eller galleri",
+ 'file:num_files' => "Antal viste filer",
+ 'file:user:gallery' => "Se %s galleri",
+ 'file:via' => 'via filer',
+ 'file:upload' => "Tilføj en fil",
+ 'file:replace' => 'Erstat fil indhold (lad være tom for ikke at ændre i fil)',
+ 'file:list:title' => "%s's %s %s",
+ 'file:title:friends' => "Venner'",
+
+ 'file:add' => 'Upload en fil',
+
+ 'file:file' => "Fil",
+ 'file:title' => "Titel",
+ 'file:desc' => "Beskrivelse",
+ 'file:tags' => "Tags",
+
+ 'file:types' => "Tilføjede filtyper",
+
+ 'file:type:' => 'Filer',
+ 'file:type:all' => "Alle filer",
+ 'file:type:video' => "Videoer",
+ 'file:type:document' => "Dokumenter",
+ 'file:type:audio' => "Lyd",
+ 'file:type:image' => "Billeder",
+ 'file:type:general' => "Andre",
+
+ 'file:user:type:video' => "%s's videoer",
+ 'file:user:type:document' => "%s's dokumenter",
+ 'file:user:type:audio' => "%s's lyd",
+ 'file:user:type:image' => "%s's billeder",
+ 'file:user:type:general' => "%s's generelle filer",
+
+ 'file:friends:type:video' => "Dine venners videoer",
+ 'file:friends:type:document' => "Dine venners dokumenter",
+ 'file:friends:type:audio' => "Dine venners lyd",
+ 'file:friends:type:image' => "Dine venners billeder",
+ 'file:friends:type:general' => "Dine venners generelle filer",
+
+ 'file:widget' => "Fil widget",
+ 'file:widget:description' => "Fremvis dine seneste filer",
+
+ 'groups:enablefiles' => 'Aktiver gruppefiler',
+
+ 'file:download' => "Hent dette",
+
+ 'file:delete:confirm' => "Er du sikker på, at du vil slette denne fil?",
+
+ 'file:tagcloud' => "Tag sky",
+
+ 'file:display:number' => "Antal viste filer",
+
+ 'river:create:object:file' => '%s tilføjede filen %s',
+ 'river:comment:object:file' => '%s kommenterede filen %s',
+
+ 'item:object:file' => "Filer",
+
+/**
+* Embed media
+**/
+
+ 'file:embed' => "Embed medie",
+ 'file:embedall' => "Alle",
+
+/**
+* Status messages
+*/
+
+ 'file:saved' => "Din fil blev gemt.",
+ 'file:deleted' => "Din fil blev slettet.",
+
+/**
+* Error messages
+*/
+
+ 'file:none' => "Vi kan ikke finde nogle filer i øjeblikket",
+ 'file:uploadfailed' => "Beklager, vi kunne ikke gemme din fil.",
+ 'file:downloadfailed' => "Beklager, denne fil er ikke til rådighed lige nu.",
+ 'file:deletefailed' => "Din fil kunne ikke slettes.",
+ 'file:noaccess' => "Du har ikke tilladelse ti at ændre denne fil",
+ 'file:cannotload' => "Der opstod en fejl med indlæsning af filen",
+ 'file:nofile' => "Du skal vælge en fil",
+);
+
+add_translation('da',$danish);
+
diff --git a/mod/languages/languages/da/da.garbagecollector.php b/mod/languages/languages/da/da.garbagecollector.php
new file mode 100644
index 000000000..4583672b7
--- /dev/null
+++ b/mod/languages/languages/da/da.garbagecollector.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Elgg garbage collector Danish language pack.
+ *
+ * @package ElggGarbageCollector
+ */
+
+$danish = array(
+ 'garbagecollector:period' => 'Hvor ofte skal Elgg opsamle skrald?',
+
+ 'garbagecollector:weekly' => 'En gang om ugen',
+ 'garbagecollector:monthly' => 'En gang om måneden',
+ 'garbagecollector:yearly' => 'En gang om året',
+
+ 'garbagecollector' => "SKRALD OPSAMLER\n",
+ 'garbagecollector:done' => "FÆRDIG\n",
+ 'garbagecollector:optimize' => "Optimerer %s ",
+
+ 'garbagecollector:error' => "FEJL",
+ 'garbagecollector:ok' => "OK",
+
+ 'garbagecollector:gc:metastrings' => 'Rydder op i uforbundne metastrenge: ',
+
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.groups.php b/mod/languages/languages/da/da.groups.php
new file mode 100644
index 000000000..889040f2a
--- /dev/null
+++ b/mod/languages/languages/da/da.groups.php
@@ -0,0 +1,265 @@
+<?php
+/**
+ * Elgg groups plugin Danish language pack
+ *
+ * @package ElggGroups
+ */
+
+$danish = array(
+
+/**
+ * Menu items and titles
+ */
+ 'groups' => "Grupper",
+ 'groups:owned' => "Grupper jeg styrer",
+ 'groups:yours' => "Dine grupper",
+ 'groups:user' => "%s's grupper",
+ 'groups:all' => "Alle grupper",
+ 'groups:add' => "Opret en ny gruppe",
+ 'groups:edit' => "Rediger gruppe",
+ 'groups:delete' => 'Slet gruppe',
+ 'groups:membershiprequests' => 'Administrer anmodning om deltagelse',
+ 'groups:invitations' => 'Gruppe invitationer',
+
+ 'groups:icon' => "Gruppe ikon (efterlad blank for at beholde det uændret)",
+ 'groups:name' => "Gruppe navn",
+ 'groups:username' => "Gruppens korte navn (vises i web adressen, brug kun alfanumeriske tegn, dvs. A-Z og 0-9)",
+ 'groups:description' => "Beskrivelse",
+ 'groups:briefdescription' => "Kort beskrivelse",
+ 'groups:interests' => "Tags",
+ 'groups:website' => "Hjemmeside",
+ 'groups:members' => "Medlemmer af gruppen",
+ 'groups:members:title' => 'Medlemmer af %s',
+ 'groups:members:more' => "Se alle medlemmer",
+ 'groups:membership' => "Medlemsskab",
+ 'groups:access' => "Adgangs tilladelser",
+ 'groups:owner' => "Ejer",
+ 'groups:widget:num_display' => "Antal af grupper der skal vises",
+ 'groups:widget:membership' => "Grupper",
+ 'groups:widgets:description' => "Vis de grupper, som du er medlem af, på din profil",
+ 'groups:noaccess' => "Ikke adgang til gruppen",
+ 'groups:permissions:error' => 'Du har ikke tilladelser til dette',
+ 'groups:ingroup' => 'i gruppen',
+ 'groups:cantedit' => 'Du kan ikke redigere denne gruppe',
+ 'groups:saved' => "Gruppe gemt",
+ 'groups:featured' => 'Foretrukne grupper',
+ 'groups:makeunfeatured' => 'Vælg fra',
+ 'groups:makefeatured' => 'Vælg til',
+ 'groups:featuredon' => '%s er nu en foretrukket gruppe',
+ 'groups:unfeature' => '%s er nu fjernet fra listen med foretrukne',
+ 'groups:featured_error' => 'Ugyldig gruppe.',
+ 'groups:joinrequest' => "Ansøg om medlemsskab",
+ 'groups:join' => "Bliv medlem af gruppen",
+ 'groups:leave' => "Forlad gruppen",
+ 'groups:invite' => "Inviter venner",
+ 'groups:invite:title' => 'Inviter venner til gruppen',
+ 'groups:inviteto' => "Inviter venner til '%s'",
+ 'groups:nofriends' => "Ingen af dine venner mangler at blive inviteret til gruppen.",
+ 'groups:nofriendsatall' => 'Du har ingen venner at invitere!',
+ 'groups:viagroups' => "via grupper",
+ 'groups:group' => "Gruppe",
+ 'groups:search:tags' => "tag",
+ 'groups:search:title' => "Søg efter grupper tagget med '%s'",
+ 'groups:search:none' => "Ingen match blev fundet",
+
+ 'groups:activity' => "Gruppeaktivitet",
+ 'groups:enableactivity' => 'Aktiver gruppeaktivitet',
+ 'groups:activity:none' => "Der er ingen gruppeaktivitet endnu",
+
+ 'groups:notfound' => "Gruppe ikke fundet",
+ 'groups:notfound:details' => "Den forespurgte gruppe eksisterer ikke eller du har ikke adgang til den",
+
+ 'groups:requests:none' => 'Der er ingen udestående anmodninger om medlemskab.',
+
+ 'groups:invitations:none' => 'Der er ingen udestående invitationer.',
+
+ 'item:object:groupforumtopic' => "Diskussions emner",
+
+ 'groupforumtopic:new' => "Nyt diskussions emne",
+
+ 'groups:count' => "grupper oprettet",
+ 'groups:open' => "Ã¥ben gruppe",
+ 'groups:closed' => "lukket gruppe",
+ 'groups:member' => "medlemmer",
+ 'groups:searchtag' => "Søg grupper efter tag",
+
+ 'groups:more' => 'Flere grupper',
+ 'groups:none' => 'Ingen grupper',
+
+
+/*
+* Access
+*/
+ 'groups:access:private' => 'Lukket - brugere skal inviteres',
+ 'groups:access:public' => 'Ã…ben - alle kan deltage',
+ 'groups:access:group' => 'Kun for medlemmer',
+ 'groups:closedgroup' => 'Denne gruppe er for medlemmer.',
+ 'groups:closedgroup:request' => 'Anmod om medlemskab ved at klikke på "Anmod om medlemskab" i menuen.',
+ 'groups:visibility' => 'Hvem kan se denne gruppe?',
+
+/*
+Group tools
+*/
+ 'groups:enableforum' => 'Aktiver gruppedebat',
+ 'groups:yes' => 'ja',
+ 'groups:no' => 'nej',
+ 'groups:lastupdated' => 'Sidst opdateret %s af %s',
+ 'groups:lastcomment' => 'Seneste kommentar %s af %s',
+
+ /*
+ Group discussion
+ */
+ 'discussion' => 'Diskussion',
+ 'discussion:add' => 'Tilføj diskussionsemne',
+ 'discussion:latest' => 'Sidste diskussion',
+ 'discussion:group' => 'Gruppediskussioner',
+
+ 'discussion:topic:created' => 'Diskussionsemnet blev oprettet.',
+ 'discussion:topic:updated' => 'Diskussionsemnet blev opdateret.',
+ 'discussion:topic:deleted' => 'Diskussionsemne er blevet slettet.',
+
+ 'discussion:topic:notfound' => 'Diskussionsemne ikke fundet',
+ 'discussion:error:notsaved' => 'Kan ikke gemme dette emne',
+ 'discussion:error:missing' => 'BÃ¥de titel og besked skal udfyldes',
+ 'discussion:error:permissions' => 'Du har ikke tilladelse til at udføre denne handling',
+ 'discussion:error:notdeleted' => 'Kunne ikke slette diskussionsemne',
+
+ 'discussion:reply:deleted' => 'Svaret er blevet slettet.',
+ 'discussion:reply:error:notdeleted' => 'Kunne ikke slette diskussionssvaret',
+
+/*
+Group forum strings
+*/
+
+ 'group:replies' => "Svar",
+ 'groups:forum:created' => 'Oprettet %s med %d kommentarer',
+ 'groups:forum:created:single' => 'Oprettet %s med %d kommentar',
+ 'groups:forum' => 'Discussion',
+ 'groups:addtopic' => "Tilføj et emne",
+ 'groups:forumlatest' => "Forum senest",
+ 'groups:latestdiscussion' => "Seneste diskussion",
+ 'groups:newest' => 'Seneste',
+ 'groups:popular' => 'Populær',
+ 'groupspost:success' => "Din kommentar er tilføjet",
+ 'groups:alldiscussion' => "Seneste diskussion",
+ 'groups:edittopic' => "Rediger emne",
+ 'groups:topicmessage' => "Emne besked",
+ 'groups:topicstatus' => "Emne status",
+ 'groups:reply' => "Send en kommentar",
+ 'groups:topic' => "Emne",
+ 'groups:posts' => "Indlæg",
+ 'groups:lastperson' => "Sidste person",
+ 'groups:when' => "NÃ¥r",
+ 'grouptopic:notcreated' => "Ingen enmer er blevet oprettet.",
+ 'groups:topicopen' => "Ã…ben",
+ 'groups:topicclosed' => "Lukket",
+ 'groups:topicresolved' => "Løst",
+ 'grouptopic:created' => "Dit emne blev oprettet.",
+ 'groupstopic:deleted' => "Emnet er blevet slettet.",
+ 'groups:topicsticky' => "Vigtig",
+ 'groups:topicisclosed' => "Dette ene er lukket.",
+ 'groups:topiccloseddesc' => "Dette emne er nu blevet lukket og kan ikke modtage nye kommenterer.",
+ 'grouptopic:error' => "Dit gruppeemne kunne ikke oprettes. Prøv venligst igen eller kontakt systemadministratoren.",
+ 'groups:forumpost:edited' => "Du har redigeret forumindlægget korrekt.",
+ 'groups:forumpost:error' => "Der opstod et problem med at redigere forumindlægget.",
+
+
+ 'groups:privategroup' => "Denne gruppe er privat, kræver medlemsskab.",
+ 'groups:notitle' => "Grupper skal have en titel",
+ 'groups:cantjoin' => "Kunne ikke blive medlem af gruppen",
+ 'groups:cantleave' => "Kunne ikke forlade gruppen",
+ 'groups:removeuser' => 'Fjern fra gruppe',
+ 'groups:cantremove' => 'Kan ikke fjerne bruger fra gruppe',
+ 'groups:removed' => '%s er fjernet fra gruppen',
+ 'groups:addedtogroup' => "Brugeren blev tilføjet til gruppen",
+ 'groups:joinrequestnotmade' => "Kunne ikke ansøge om at blive medlem",
+ 'groups:joinrequestmade' => "Ansøgning om at blive medlem af gruppen er gennemført",
+ 'groups:joined' => "Du er blevet medlem af gruppen!",
+ 'groups:left' => "Du er frameldt gruppen!",
+ 'groups:notowner' => "Beklager, du ejer ikke denne gruppe.",
+ 'groups:notmember' => 'Beklager, du er ikke medlem af denne gruppe.',
+ 'groups:alreadymember' => "Du er allerede medlem af denne gruppe!",
+ 'groups:userinvited' => "Brugeren er blevet inviteret.",
+ 'groups:usernotinvited' => "Brugeren kunne ikke inviteres.",
+ 'groups:useralreadyinvited' => 'Brugeren er allerede blevet inviteret',
+ 'groups:invite:subject' => "%s du er blevet inviteret til at blive medlem af %s!",
+ 'groups:updated' => "Seneste kommentar af %s %s",
+ 'groups:started' => "Startet af %s",
+ 'groups:joinrequest:remove:check' => 'Er du sikker på, at du vil fjerne denne anmodning om tilmelding?',
+ 'groups:invite:remove:check' => 'Er du sikker på, at du vil fjerne denne invitation?',
+ 'groups:invite:body' => "Hej %s,
+
+%s inviterede dig til at være med i '%s' gruppen, klik herunder for at bekræfte:
+
+%s",
+
+ 'groups:welcome:subject' => "Velkommen til %s gruppen!",
+ 'groups:welcome:body' => "Hej %s!
+
+Du er nu medlem af '%s' gruppen! Klik herunder for at begynde med at skrive!
+
+%s",
+
+ 'groups:request:subject' => "%s har ønsket at blive medlem af %s",
+ 'groups:request:body' => "Hej %s,
+
+%s har bedt om at måtte være med i '%s' gruppen, klik nedenfor for at se deres profil:
+
+%s
+
+eller klik nedenfor for at se gruppens anmodningsliste:
+
+%s",
+
+/*
+Forum river items
+*/
+
+ 'river:create:group:default' => '%s oprettede gruppen %s',
+ 'river:join:group:default' => '%s blev medlem af gruppen %s',
+ 'river:create:object:groupforumtopic' => '%s tilføjede et nyt diskussionsemne %s',
+ 'river:reply:object:groupforumtopic' => '%s svarede på diskussionsemnet %s',
+
+ 'groups:nowidgets' => "Ingen widgets defineret for denne gruppe.",
+
+
+ 'groups:widgets:members:title' => "Gruppens medlemmer",
+ 'groups:widgets:members:description' => "Vis en gruppes medlemmer.",
+ 'groups:widgets:members:label:displaynum' => "Vis en gruppes medlemmer.",
+ 'groups:widgets:members:label:pleaseedit' => "Indstil venligst denne widget.",
+
+ 'groups:widgets:entities:title' => "Objekter i gruppen",
+ 'groups:widgets:entities:description' => "Vis objekterne gemt i denne gruppe",
+ 'groups:widgets:entities:label:displaynum' => "Vis en gruppes objekter",
+ 'groups:widgets:entities:label:pleaseedit' => "Indstil venligst denne widget.",
+
+ 'groups:forumtopic:edited' => 'Forumemne succesfuldt redigeret.',
+
+ 'groups:allowhiddengroups' => 'Vil du tillade private (skjulte) grupper?',
+
+/**
+* Action messages
+*/
+ 'group:deleted' => 'Gruppe og gruppeindhold slettet',
+ 'group:notdeleted' => 'Gruppen kunne ikke slettes',
+
+ 'group:notfound' => 'Kunne ikke finde gruppen',
+ 'grouppost:deleted' => 'Gruppeindlæg slettet korrekt',
+ 'grouppost:notdeleted' => 'Gruppeindlæg kunne ikke slettes',
+ 'groupstopic:deleted' => 'Emne slettet',
+ 'groupstopic:notdeleted' => 'Emne kunne ikke slettes',
+ 'grouptopic:blank' => 'Ingen emner',
+ 'grouptopic:notfound' => 'Kunne ikke finde emnet',
+ 'grouppost:nopost' => 'Tom post',
+ 'groups:deletewarning' => "Er du sikker på at du vil slette denne gruppe? Du kan ikke gøre det om!",
+
+ 'groups:invitekilled' => 'Invitationen er blevet slettet.',
+ 'groups:joinrequestkilled' => 'Anmodningen om tilslutning er blevet slettet.',
+
+ // ecml
+ 'groups:ecml:discussion' => 'Gruppediskussioner',
+ 'groups:ecml:groupprofile' => 'Gruppeprofiler',
+
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.image_captcha.php b/mod/languages/languages/da/da.image_captcha.php
new file mode 100644
index 000000000..321d2c5ac
--- /dev/null
+++ b/mod/languages/languages/da/da.image_captcha.php
@@ -0,0 +1,31 @@
+<?php
+
+ $danish = array(
+ 'image_captcha' => "Billede Sikkerhedscheck",
+
+ 'image_captcha:settings:icons' => "Vælg hvilken type billeder du vil bruge for din Sikkerhedscheck",
+ 'image_captcha:settings:icons:general' => "Generelt",
+ 'image_captcha:settings:icons:fruit' => "Frugt",
+
+ 'image_captcha:icon_types:fruit:apple' => "Æble",
+ 'image_captcha:icon_types:fruit:cherry' => "Kirsebær",
+ 'image_captcha:icon_types:fruit:lemon' => "Citron",
+ 'image_captcha:icon_types:fruit:pear' => "Pære",
+ 'image_captcha:icon_types:fruit:strawberry' => "Jordbær",
+
+ 'image_captcha:icon_types:general:folder' => "Mappe",
+ 'image_captcha:icon_types:general:house' => "Hus",
+ 'image_captcha:icon_types:general:lock' => "LÃ¥s",
+ 'image_captcha:icon_types:general:man' => "Mand",
+ 'image_captcha:icon_types:general:monitor' => "Skærm",
+ 'image_captcha:icon_types:general:rss' => "Rss",
+ 'image_captcha:icon_types:general:woman' => "Kvinde",
+
+ 'image_captcha:label' => "Sikkerhedscheck - Vælg det rigtige billede: <u>%s</u>",
+
+ 'image_captcha:verify:fail' => "Beklager, valgte billede er ikke korrekt.",
+
+
+ );
+
+ add_translation("da", $danish);
diff --git a/mod/languages/languages/da/da.invitefriends.php b/mod/languages/languages/da/da.invitefriends.php
new file mode 100644
index 000000000..cf4fe4987
--- /dev/null
+++ b/mod/languages/languages/da/da.invitefriends.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Elgg invite Danish language file
+ *
+ * @package ElggInviteFriends
+ */
+
+$danish = array(
+
+ 'friends:invite' => 'Inviter venner',
+
+ 'invitefriends:registration_disabled' => 'Ny bruger registrering er blevet deaktiveret for denne side; du kan ikke invitere nye brugere.',
+ 'invitefriends:introduction' => 'Inviter dine venner til at slutte sig til dig på dette netværk ved at skrive deres e-mail adresser herunder (en pr. linie):',
+ 'invitefriends:message' => 'Send en besked med til dem:',
+ 'invitefriends:subject' => 'Invitation til at tilmelde dig %s',
+
+ 'invitefriends:success' => 'Dine venner er inviteret.',
+ 'invitefriends:invitations_sent' => 'Invitationer sendt: %s. Der opstod følgende problemer:',
+ 'invitefriends:email_error' => 'Følgende adresser er ikke gyldige: %s',
+ 'invitefriends:already_members' => 'Følgende er allerede medlemmer: %s',
+ 'invitefriends:noemails' => 'Ingen e-mail adresser blev angivet.',
+
+ 'invitefriends:message:default' => '
+Hej,
+
+Jeg vil gerne invitere dig til at deltage på mit nye netværk %s.',
+
+ 'invitefriends:email' => '
+Du er blevet inviteret til at deltage på %s af %s. Følgende besked blev medsendt:
+
+%s
+
+Klik på linket herunder for at tilmelde dig:
+
+%s
+
+Du vil automatisk tilføje afsenderen som ven, når du opretter din konto.',
+
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.likes.php b/mod/languages/languages/da/da.likes.php
new file mode 100644
index 000000000..962ba5854
--- /dev/null
+++ b/mod/languages/languages/da/da.likes.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Likes Danish language file
+ */
+
+$danish = array(
+ 'likes:this' => 'synes godt om dette',
+ 'likes:deleted' => 'Din tilkendegivelse "synes godt om" er blevet fjernet',
+ 'likes:see' => 'Se hvem der synes godt om dette',
+ 'likes:remove' => 'Synes ikke godt om længere',
+ 'likes:notdeleted' => 'Der opstod et problem med at fjerne tilkendegivelsen "synes godt om"',
+ 'likes:likes' => 'Du synes nu godt om dette',
+ 'likes:failure' => 'Der opstod et problem med at synes godt om dette',
+ 'likes:alreadyliked' => 'Du har allerede tilkendegivet at du synes godt om dette emne',
+ 'likes:notfound' => 'Enmet, du gerne vil synes godt om, kan ikke findes',
+ 'likes:likethis' => 'Tilkendegiv, at du synes godt om dette',
+ 'likes:userlikedthis' => '%s synes godt om',
+ 'likes:userslikedthis' => '%s synes godt om',
+ 'likes:river:annotate' => 'synes godt om',
+ 'likes:email:body' => '%s synes godt om %s',
+ 'likes:email:subject' => 'En bruger synes godt om en af dine ting',
+ 'river:likes' => 'synes godt om %s %s',
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.logbrowser.php b/mod/languages/languages/da/da.logbrowser.php
new file mode 100644
index 000000000..82bc13688
--- /dev/null
+++ b/mod/languages/languages/da/da.logbrowser.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Elgg log browser plugin Danish language pack
+ *
+ * @package ElggLogBrowser
+ */
+
+$danish = array(
+ 'admin:utilities:logbrowser' => 'Log browser',
+ 'logbrowser' => 'Log browser',
+ 'logbrowser:browse' => 'Gennemse system log',
+ 'logbrowser:search' => 'Præciser resultater',
+ 'logbrowser:user' => 'Brugernavn at søge på',
+ 'logbrowser:starttime' => 'Starttidspunkt (for eksempel "Sidste mandag", "1 time siden")',
+ 'logbrowser:endtime' => 'Sluttidspunkt',
+
+ 'logbrowser:explore' => 'Gennemse log',
+
+ 'logbrowser:date' => 'Dato og tid',
+ 'logbrowser:user:name' => 'Bruger',
+ 'logbrowser:user:guid' => 'Bruger GUID',
+ 'logbrowser:object' => 'Object type',
+ 'logbrowser:object:guid' => 'Object GUID',
+ 'logbrowser:action' => 'Action',
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.logrotate.php b/mod/languages/languages/da/da.logrotate.php
new file mode 100644
index 000000000..8c681b956
--- /dev/null
+++ b/mod/languages/languages/da/da.logrotate.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Elgg log rotator Danish language pack.
+ *
+ * @package ElggLogRotate
+ */
+
+$danish = array(
+ 'logrotate:period' => 'Hvor ofte skal system loggen gemmes?',
+
+ 'logrotate:weekly' => 'En gang om ugen',
+ 'logrotate:monthly' => 'En gang om måneden',
+ 'logrotate:yearly' => 'En gang om året',
+
+ 'logrotate:logrotated' => "Log roteret\n",
+ 'logrotate:lognotrotated' => "Der opstod en fejl under rotering af log\n",
+
+ 'logrotate:date' => 'Slet arkiverede logs ældre end en/et',
+
+ 'logrotate:week' => 'uge',
+ 'logrotate:month' => 'måned',
+ 'logrotate:year' => 'Ã¥r',
+
+ 'logrotate:logdeleted' => "Log slettet\n",
+ 'logrotate:lognotdeleted' => "Fejl under sletning af log\n",
+
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.market.php b/mod/languages/languages/da/da.market.php
new file mode 100644
index 000000000..f16e89d35
--- /dev/null
+++ b/mod/languages/languages/da/da.market.php
@@ -0,0 +1,148 @@
+<?php
+/**
+ * Elgg Market Plugin
+ * @package market
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author slyhne
+ * @copyright slyhne 2010-2011
+ * @link www.zurf.dk/elgg
+ * @version 1.8
+ */
+
+$danish = array(
+
+ // Menu items and titles
+ 'market' => "Marked indlæg",
+ 'market:posts' => "Marked Indlæg",
+ 'market:title' => "Markedet",
+ 'market:user:title' => "%s's indlæg på Markedet",
+ 'market:user' => "%s's Marked",
+ 'market:user:friends' => "%s's venners Marked",
+ 'market:user:friends:title' => "%s's venners indlæg på Markedet",
+ 'market:mine' => "Mit Marked",
+ 'market:mine:title' => "Mine indlæg på Markedet",
+ 'market:posttitle' => "%s's Markeds emne: %s",
+ 'market:friends' => "Venners Marked",
+ 'market:friends:title' => "Mine venners indlæg på Markedet",
+ 'market:everyone:title' => "Alt på Markedet",
+ 'market:everyone' => "Alle Markeds Indlæg",
+ 'market:read' => "Vis indlæg",
+ 'market:add' => "Opret ny annonce",
+ 'market:add:title' => "Opret nyt indlæg på Markedet",
+ 'market:edit' => "Rediger annonce",
+ 'market:imagelimitation' => "Skal være JPG, GIF eller PNG.",
+ 'market:text' => "Lav en kort beskrivelse af dit emne",
+ 'market:uploadimages' => "Vil du gerne uploade et billede til dit emne?",
+ 'market:image' => "Emne image",
+ 'market:imagelater' => "",
+ 'market:strapline' => "Oprettet",
+ 'item:object:market' => 'Markeds indlæg',
+ 'market:none:found' => 'Ingen Markeds indlæg fundet',
+ 'market:pmbuttontext' => "Send privat besked",
+ 'market:price' => "Pris",
+ 'market:price:help' => "(i %s)",
+ 'market:text:help' => "(Ingen HTML og max. 250 karakter)",
+ 'market:title:help' => "(1-3 ord)",
+ 'market:tags' => "Tags",
+ 'market:tags:help' => "(Separer med kommaer)",
+ 'market:access:help' => "(Hvem skal kunne se dette Markeds indlæg?)",
+ 'market:replies' => "Svar",
+ 'market:created:gallery' => "Oprettet af %s <br>den %s",
+ 'market:created:listing' => "Oprettet af %s den %s",
+ 'market:showbig' => "Vis det store billede",
+ 'market:type' => "Type",
+ 'market:charleft' => "karakter tilbage",
+ 'market:accept:terms' => "Jeg har læst og accepterer %s.",
+ 'market:terms' => "betingelser",
+ 'market:terms:title' => "Betingelserne",
+ 'market:terms' => "<li class='elgg-divide-bottom'>The Market is for buying or selling used itemts among members.</li>
+ <li class='elgg-divide-bottom'>No more than %s Marked posts are allowed pr. user at the same time.</li>
+ <li class='elgg-divide-bottom'>Only one Marked post is allowed pr. item.</li>
+
+ <li class='elgg-divide-bottom'>A Marked post may only contain one item, unless it's part of a matching set.</li>
+ <li class='elgg-divide-bottom'>The Marked is for used/home made items only.</li>
+ <li class='elgg-divide-bottom'>The Marked post must be deleted when it's no longer relevant.</li>
+ <li class='elgg-divide-bottom'>Commercial advertising is limited to those who have signed a promotional agreement with us.</li>
+ <li class='elgg-divide-bottom'>We reserve the right to delete any Marked posts violating our terms of use.</li>
+ <li class='elgg-divide-bottom'>Terms are subject to change over time.</li>
+ ",
+
+ // market widget
+ 'market:widget' => "My Marked",
+ 'market:widget:description' => "Showcase your posts on The Marked",
+ 'market:widget:viewall' => "View all my posts on The Marked",
+ 'market:num_display' => "Number of posts to display",
+ 'market:icon_size' => "Icon size",
+ 'market:small' => "small",
+ 'market:tiny' => "tiny",
+
+ // market river
+ 'river:create:object:market' => '%s posted a new ad in the Marked %s',
+ 'river:update:object:market' => '%s updated the ad %s in the Market',
+ 'river:comment:object:market' => '%s commented on the Market ad %s',
+
+ // Status messages
+ 'market:posted' => "Your Market post was successfully posted.",
+ 'market:deleted' => "Your Market post was successfully deleted.",
+ 'market:uploaded' => "Your image was succesfully added.",
+
+ // Error messages
+ 'market:save:failure' => "Your Market post could not be saved. Please try again.",
+ 'market:blank' => "Sorry; you need to fill in both the title and body before you can make a post.",
+ 'market:tobig' => "Sorry; your file is bigger then 1MB, please upload a smaller file.",
+ 'market:notjpg' => "Please make sure the picture inculed is a .jpg, .png or .gif file.",
+ 'market:notuploaded' => "Sorry; your file doesn't apear to be uploaded.",
+ 'market:notfound' => "Sorry; we could not find the specified Market post.",
+ 'market:notdeleted' => "Sorry; we could not delete this Market post.",
+ 'market:tomany' => "Error: Too many Market posts",
+ 'market:tomany:text' => "You have reached the maximum number of Market posts pr. user. Please delete some first!",
+ 'market:accept:terms:error' => "You must accept the terms of use!",
+
+ // Settings
+ 'market:settings:status' => "Status",
+ 'market:settings:desc' => "Description",
+ 'market:max:posts' => "Max. number of market posts pr. user",
+ 'market:unlimited' => "Unlimited",
+ 'market:currency' => "Currency ($, €, DKK or something)",
+ 'market:allowhtml' => "Allow HTML in market posts",
+ 'market:numchars' => "Max. number of characters in market post (only valid without HTML)",
+ 'market:pmbutton' => "Enable private message button",
+ 'market:adminonly' => "Only admin can create market posts",
+ 'market:comments' => "Allow comments",
+ 'market:custom' => "Custom field",
+
+ // market categories
+ 'market:categories' => 'Market categories',
+ 'market:categories:choose' => 'Choose type',
+ 'market:categories:settings' => 'Market Categories:',
+ 'market:categories:explanation' => 'Set some predefined categories for posting to the market.<br>Categories could be "clothes, footwear or buy,sell etc...", seperate each category with commas - remember not to use special characters in categories and put them in your language files as market:<i>categoryname</i>',
+ 'market:categories:save:success' => 'Site market categories were successfully saved.',
+ 'market:categories:settings:categories' => 'Market Categories',
+ 'market:all' => "All",
+ 'market:category' => "Category",
+ 'market:category:title' => "Category: %s",
+
+ // Categories
+ 'market:buy' => "Buying",
+ 'market:sell' => "Selling",
+ 'market:swap' => "Swap",
+ 'market:free' => "Free",
+
+ // Custom select
+ 'market:custom:select' => "Item condition",
+ 'market:custom:text' => "Condition",
+ 'market:custom:activate' => "Enable Custom Select:",
+ 'market:custom:settings' => "Custom Select Choices",
+ 'market:custom:choices' => "Set some predefined choices for the custom select dropdown box.<br>Choices could be \"market:new,market:used...etc\", seperate each choice with commas - remember to put them in your language files",
+
+ // Custom choises
+ 'market:na' => "No information",
+ 'market:new' => "New",
+ 'market:unused' => "Unused",
+ 'market:used' => "Used",
+ 'market:good' => "Good",
+ 'market:fair' => "Fair",
+ 'market:poor' => "Poor",
+);
+
+add_translation("da",$danish);
diff --git a/mod/languages/languages/da/da.members.php b/mod/languages/languages/da/da.members.php
new file mode 100644
index 000000000..c42ddc2ef
--- /dev/null
+++ b/mod/languages/languages/da/da.members.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Members Danish language file
+ */
+
+$danish = array(
+ 'members:label:newest' => 'Seneste',
+ 'members:label:popular' => 'Populære',
+ 'members:label:active' => 'Online',
+ 'members:searchname' => 'Søg brugere efter navn',
+ 'members:searchtag' => 'Søg brugere efter tag',
+ 'members:title:searchname' => 'Brugere ved navn %s',
+ 'members:title:searchtag' => 'Brugere tagget med %s',
+);
+
+add_translation("da",$danish); \ No newline at end of file
diff --git a/mod/languages/languages/da/da.menu_builder.php b/mod/languages/languages/da/da.menu_builder.php
new file mode 100644
index 000000000..78ec7e51f
--- /dev/null
+++ b/mod/languages/languages/da/da.menu_builder.php
@@ -0,0 +1,49 @@
+<?php
+
+ $danish = array(
+
+ /**
+ * Menu punkts and titles
+ */
+
+ 'menu_builder' => "Menu Bygger",
+ 'LOGGED_OUT' => "Besøgende",
+
+ // punkt
+ 'item:object:menu_builder_menu_item' => "Menu Bygger punkt",
+
+ // views
+ // edit
+ 'menu_builder:edit_mode:off' => "Vis tilstand",
+ 'menu_builder:edit_mode:on' => "Ændrings tilstand",
+ 'menu_builder:edit_mode:add' => "Klik for at tilføje ny menu punkt",
+
+ 'menu_builder:toggle_context' => "Skift sammenhæng",
+ 'menu_builder:toggle_context:normal_user' => "Viser menuen som ikke admin bruger",
+ 'menu_builder:toggle_context:logged_out' => "Viser menuen for besøgende",
+ 'menu_builder:toggle_context:all' => "Viser alle menuens punkter",
+ 'menu_builder:toggle_context:default' => "Viser menuen som administrator",
+
+ // add
+ 'menu_builder:add:title' => "Tilføj nyt menu punkt",
+ 'menu_builder:add:form:title' => "Titel",
+ 'menu_builder:add:form:url' => "URL",
+ 'menu_builder:add:form:parent' => "Overordnet menu punkt",
+ 'menu_builder:add:form:parent:toplevel' => "Øverst niveau menu punkt",
+ 'menu_builder:add:form:access' => "Hvem skal kunne se dette menu punkt?",
+ 'menu_builder:add:access:admin_only' => "Kun admins",
+
+ // actions
+ 'menu_builder:actions:edit:error:input' => "Forkert input for at tilføje/ændre et menu punkt",
+ 'menu_builder:actions:edit:error:entity' => "Det givne GUID kunne ikke findes",
+ 'menu_builder:actions:edit:error:subtype' => "Det givne GUID er ikke et menu punkt",
+ 'menu_builder:actions:edit:error:create' => "Der er desværre opstået en fejl under oprettelsen af menu punktet, prøv venligst igen",
+ 'menu_builder:actions:edit:error:parent' => "Du kan ikke flytte dette menupunkt, for det har undermenuer. Flyt venligst alle undermenuer først.",
+ 'menu_builder:actions:edit:error:save' => "Der er desværre opstået en fejl under gemmelsen af menu punktet, prøv venligst igen",
+ 'menu_builder:actions:edit:success' => "Menupuntket er hermed gemt",
+
+ 'menu_builder:actions:delete:success' => "Menupunktet er hermed slettet",
+
+ );
+
+ add_translation("da",$danish);
diff --git a/mod/languages/languages/da/da.messageboard.php b/mod/languages/languages/da/da.messageboard.php
new file mode 100644
index 000000000..707e370c8
--- /dev/null
+++ b/mod/languages/languages/da/da.messageboard.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Messageboard Danish language file
+ */
+
+$danish = array(
+
+/**
+* Menu items and titles
+*/
+
+ 'messageboard:board' => "Opslagstavle",
+ 'messageboard:messageboard' => "opslagstavle",
+ 'messageboard:viewall' => "Se alle",
+ 'messageboard:postit' => "Send det",
+ 'messageboard:history:title' => "Historie",
+ 'messageboard:none' => "Der er intet på denne opslagstavle endnu",
+ 'messageboard:num_display' => "Antal viste beskeder" ,
+ 'messageboard:desc' => "Dette er en opslagstavle, som du kan bruge på din profil, så andre brugere kan kommentere.",
+
+ 'messageboard:user' => "%s's opslagstavle",
+
+ 'messageboard:replyon' => 'svar på',
+ 'messageboard:history' => "historie",
+
+ 'messageboard:owner' => '%s\'s opslagstavle',
+ 'messageboard:owner_history' => '%s\'s beskeder på %s\'s opslagstavle',
+
+ /**
+ * Message board widget river
+ */
+ 'river:messageboard:user:default' => "%s skrev på %s's opslagstavle",
+
+ /**
+ * Status messages
+ */
+
+ 'messageboard:posted' => "Du har skrevet på opslagstavlen." ,
+ 'messageboard:deleted' => "Du har slettet beskeden." ,
+
+/**
+ * Email messages
+ */
+
+ 'messageboard:email:subject' => "Du har en ny kommentar på opslagstavlen!" ,
+ 'messageboard:email:body' => "Du har en ny kommentar på opslagstavle fra %s. Der står:
+
+%s
+
+For at se din opslagstavles kommentarer, klik her:
+
+%s
+
+For at se %s's profil, klik her:
+
+%s
+
+Du kan ikke svare på denne mail." ,
+
+/**
+ * Error messages
+ */
+
+ 'messageboard:blank' => "Beklager, men du er nødt til at skrive noget i beskeden før vi kan gemme den." ,
+ 'messageboard:notfound' => "Beklager, vi kunne ikke finde det specificerede emne." ,
+ 'messageboard:notdeleted' => "Beklager, vi kunne ikke slette denne besked." ,
+ 'messageboard:somethingwentwrong' => "Noget gik galt da din besked skulle gemmes, kontroller at du har skrevet en besked.",
+
+ 'messageboard:failure' => "En uventet fejl skete under tilføjelsen af din besked. Prøv venligst igen."
+
+);
+
+add_translation("da",$danish);
diff --git a/mod/languages/languages/da/da.messages.php b/mod/languages/languages/da/da.messages.php
new file mode 100644
index 000000000..e5df14664
--- /dev/null
+++ b/mod/languages/languages/da/da.messages.php
@@ -0,0 +1,95 @@
+<?php
+/**
+* Elgg Messages Danish language file
+*
+*/
+
+$danish = array(
+
+/**
+ * Menu items and titles
+ */
+
+ 'messages' => "Beskeder",
+ 'messages:back' => "Tilbage til beskeder",
+ 'messages:user' => "%s's indbakke",
+ 'messages:posttitle' => "%s's beskeder: %s",
+ 'messages:inbox' => "Indbakke",
+ 'messages:send' => "Send en besked",
+ 'messages:sent' => "Sendte beskeder",
+ 'messages:message' => "Besked",
+ 'messages:title' => "Emne",
+ 'messages:to' => "Til",
+ 'messages:from' => "Fra",
+ 'messages:fly' => "Send",
+ 'messages:replying' => "Besked som svar til",
+ 'messages:inbox' => "Indbakke",
+ 'messages:sendmessage' => "Send en besked",
+ 'messages:compose' => "Opret en besked",
+ 'messages:add' => "Opret en besked",
+ 'messages:sentmessages' => "Sendte beskeder",
+ 'messages:recent' => "Seneste beskeder",
+ 'messages:original' => "Original besked",
+ 'messages:yours' => "Din besked",
+ 'messages:answer' => "Svar",
+ 'messages:toggle' => 'Marker alle',
+ 'messages:markread' => 'Marker som læst',
+ 'messages:recipient' => 'Vælg en modtager&hellip;',
+ 'messages:to_user' => 'To: %s',
+
+ 'messages:new' => 'Ny besked',
+
+ 'notification:method:site' => 'Beskeder',
+
+ 'messages:error' => 'Der opstod et problem med at gemme din besked. Prøv venligst igen.',
+
+ 'item:object:messages' => 'Beskeder',
+
+/**
+ * Status messages
+ */
+
+ 'messages:posted' => "Din besked blev sendt.",
+ 'messages:success:delete:single' => "Din besked blev slettet.",
+ 'messages:success:delete' => 'Dine beskeder blev slettet.',
+ 'messages:success:read' => 'Beskeder markeret som læst',
+ 'messages:error:messages_not_selected' => 'Ingen beskeder valgt',
+ 'messages:error:delete:single' => 'Kunne ikke slette beskeden',
+
+/**
+ * Email messages
+ */
+
+ 'messages:email:subject' => 'Du har en ny besked!',
+ 'messages:email:body' => "Du har en ny besked fra %s. Den lyder:
+
+
+%s
+
+
+Klik her for at se dine beskeder:
+
+%s
+
+Klik her for at sende %s en besked:
+
+%s
+
+Du kan ikke svare via denne mail.",
+
+/**
+ * Error messages
+ */
+
+ 'messages:blank' => "Beklager, du skal skrive noget i beskedfeltet, før den kan gemmes.",
+ 'messages:notfound' => "Beklager, vi kunne ikke finde den specificerede besked.",
+ 'messages:notdeleted' => "Beklager, beskeden kunne ikke slettes.",
+ 'messages:nopermission' => "Du har ikke tilladelse til at ændre beskeden.",
+ 'messages:nomessages' => "Der er ingen beskeder at vise.",
+ 'messages:user:nonexist' => "Modtageren kunne ikke findes i databasen.",
+ 'messages:user:blank' => "Du har ikke valgt nogen at sende til.",
+
+ 'messages:deleted_sender' => 'Slettet bruger',
+);
+
+add_translation("da",$danish);
diff --git a/mod/languages/languages/da/da.notifications.php b/mod/languages/languages/da/da.notifications.php
new file mode 100644
index 000000000..3f1902066
--- /dev/null
+++ b/mod/languages/languages/da/da.notifications.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Notifications Danish language file.
+ *
+ */
+
+$danish = array(
+
+ 'friends:all' => 'Alle venner',
+
+ 'notifications:subscriptions:personal:description' => 'Modtag besked når der sker noget omkring dit indhold',
+ 'notifications:subscriptions:personal:title' => 'Personlig besked',
+
+ 'notifications:subscriptions:friends:title' => 'Venner',
+ 'notifications:subscriptions:friends:description' => 'Det følgende er en automatisk samling oprettet ud fra dine venner. For at modtage opdateringer vælg nedenfor. Dette vil påvirke den tilsvarende bruger i beskedindstillingspanelet nederst på siden.',
+ 'notifications:subscriptions:collections:edit' => 'Klik her for at redigere din vennesamling.',
+
+ 'notifications:subscriptions:changesettings' => 'Beskeder',
+ 'notifications:subscriptions:changesettings:groups' => 'Gruppe beskeder',
+ 'notification:method:email' => 'E-mail',
+
+ 'notifications:subscriptions:title' => 'Indstil individuelt',
+ 'notifications:subscriptions:description' => 'Du kan vælge at modtage beskeder fra dine venner, når de opretter nyt indhold. Find dem herunder og vælg den type besked du foretrækker.',
+
+ 'notifications:subscriptions:groups:description' => 'Du kan vælge at modtage besked, når nyt indhold tilføjes en gruppe, du er medlem af. Find gruppen herunder og vælg den type besked du foretrækker.',
+
+ 'notifications:subscriptions:success' => 'Dine indstillinger for beskeder er blevet gemt.',
+
+);
+
+add_translation("da",$danish);
diff --git a/mod/languages/languages/da/da.pages.php b/mod/languages/languages/da/da.pages.php
new file mode 100644
index 000000000..1b61027bd
--- /dev/null
+++ b/mod/languages/languages/da/da.pages.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Pages Danish language file
+ *
+ * @package ElggPages
+ */
+
+$danish = array(
+
+/**
+ * Menu items and titles
+ */
+
+ 'pages' => "Sider" ,
+ 'pages:owner' => "%s's sider",
+ 'pages:friends' => "Venners sider",
+ 'pages:all' => "Alle sider",
+ 'pages:add' => "Tilføj side",
+
+ 'pages:group' => "Gruppe sider",
+ 'groups:enablepages' => 'Aktiver gruppe sider',
+
+ 'pages:edit' => "Rediger denne side" ,
+ 'pages:delete' => "Slet denne side" ,
+ 'pages:history' => "Sidehistorik" ,
+ 'pages:view' => "Se side" ,
+ 'pages:revision' => "Revision",
+
+ 'pages:navigation' => "Navigation" ,
+ 'pages:via' => "via sider",
+ 'item:object:page_top' => "Top-niveau sider" ,
+ 'item:object:page' => "Sider" ,
+ 'pages:nogroup' => 'Denne gruppe har ikke nogen sider endnu',
+ 'pages:more' => 'Flere sider',
+ 'pages:none' => 'Der er ikke oprettet sider endnu',
+
+ /**
+ * River
+ **/
+
+ 'river:create:object:page' => '%s oprettede siden %s',
+ 'river:create:object:page_top' => '%s oprettede siden %s',
+ 'river:update:object:page' => '%s opdaterede siden %s',
+ 'river:update:object:page_top' => '%s opdaterede siden %s',
+ 'river:comment:object:page' => '%s kommenterede siden %s',
+ 'river:comment:object:page_top' => '%s kommenterede siden %s',
+
+ /**
+ * Form fields
+ */
+
+ 'pages:title' => 'Sidetitler',
+ 'pages:description' => 'Side indhold',
+ 'pages:tags' => 'Tags',
+ 'pages:access_id' => 'Læseadgang',
+ 'pages:write_access_id' => 'Skriveadgang',
+
+/**
+ * Status and error messages
+ */
+ 'pages:noaccess' => "Igen adgang til side" ,
+ 'pages:cantedit' => "Du kan ikke redigere denne side" ,
+ 'pages:saved' => "Siden gemt" ,
+ 'pages:notsaved' => "Siden kunne ikke gemmes" ,
+ 'pages:error:no_title' => "Din side skal have en titel." ,
+ 'pages:delete:success' => "Din side er blevet slettet" ,
+ 'pages:delete:failure' => "Siden kunne ikke slettes." ,
+
+/**
+ * Page
+ */
+ 'pages:strapline' => "Sidst opdateret %s af %s" ,
+
+/**
+ * History
+ */
+ 'pages:revision' => "Revision lavet %s af %s" ,
+
+/**
+ * Widget
+ **/
+
+ 'pages:num' => "Antal sider, der skal vises" ,
+ 'pages:widget:description' => "Dette er en liste med dine sider.",
+
+/**
+ * Submenu items
+ */
+ 'pages:label:view' => "Se side" ,
+ 'pages:label:edit' => "Rediger side" ,
+ 'pages:label:history' => "Sidehistorik" ,
+
+/**
+ * Sidebar items
+ */
+ 'pages:sidebar:this' => "Denne side" ,
+ 'pages:sidebar:children' => "Undersider" ,
+ 'pages:sidebar:parent' => "Forælder" ,
+
+ 'pages:newchild' => "Opret en underside" ,
+ 'pages:backtoparent' => "Tilbage til '%s'"
+);
+
+add_translation("da",$danish);
diff --git a/mod/languages/languages/da/da.php b/mod/languages/languages/da/da.php
new file mode 100644
index 000000000..a808148d1
--- /dev/null
+++ b/mod/languages/languages/da/da.php
@@ -0,0 +1,1343 @@
+<?php
+/**
+* Core Danish Language
+*
+* @package Elgg.Core
+* @subpackage Languages.Danish
+*/
+
+$danish = array(
+ /**
+ * Sites
+ */
+
+ 'item:site' => "Sider",
+
+/**
+* Sessions
+*/
+
+ 'login' => "Log ind",
+ 'loginok' => "Du er blevet logget ind.",
+ 'loginerror' => "Vi kunne ikke logge dig ind. Tjek venligst dine legitimationsoplysninger og prøv igen.",
+ 'login:empty' => "Du skal angive brugernavn og adgangskode.",
+ 'login:baduser' => "Din brugerkonto kunne ikke indlæses.",
+ 'auth:nopams' => "Intern fejl. Ingen bruger godkendelsesmetode installeret.",
+
+ 'logout' => "Log ud",
+ 'logoutok' => "Du er blevet logget ud.",
+ 'logouterror' => "Vi kunne ikke logge dig ud. Prøv venligst igen.",
+
+ 'loggedinrequired' => "Du skal være logget ind for at se denne side.",
+ 'adminrequired' => "Du skal være administrator for at se denne side.",
+ 'membershiprequired' => "Du skal være medlem af gruppen for at se siden.",
+
+
+/**
+* Errors
+*/
+ 'exception:title' => "Fatal fejl.",
+ 'exception:contact_admin' => 'En uoprettelig fejl er opstået og er blevet noteret i loggen. Kontakt venligst administratoren med følgende informationer:',
+
+ 'actionundefined' => "Den forespurgte handling (%s) var ikke defineret i systemet.",
+ 'actionnotfound' => "Filen til %s blev ikke fundet.",
+ 'actionloggedout' => "Beklager, du kan ikke udføre denne handling, når du er logget ud.",
+ 'actionunauthorized' => 'Du har ikke tilladelse til at udføre denne handling.',
+
+ 'InstallationException:SiteNotInstalled' => 'Ude af stand til at håndtere denne anmodning. Dette site '
+ . ' er ikke konfigureret eller databasen er nede..',
+ 'InstallationException:MissingLibrary' => 'Kunne ikke indlæse %s',
+ 'InstallationException:CannotLoadSettings' => "Elgg Kunne ikke indlæse filen 'settings'. Enten eksisterer den ikke, eller der er problemer med filtilladelser.",
+
+ 'SecurityException:Codeblock' => "Adgang nægtet til at eksekvere privilegeret kodeblok",
+ 'DatabaseException:WrongCredentials' => "Elgg kunne ikke forbinde til databasen ved hjælp af de givne legitimationsoplysninger. Kontrollér filen 'settings'.",
+ 'DatabaseException:NoConnect' => "Elgg kunne ikke finde databasen '%s'. Kontroller at databasen er oprettet og at du har adgang til den.",
+ 'SecurityException:FunctionDenied' => "Adgang til priviligeret funktion '%s' nægtet.",
+ 'DatabaseException:DBSetupIssues' => "Der var følgende problemer: ",
+ 'DatabaseException:ScriptNotFound' => "Elgg kunne ikke finde det efterspurgte database script på %s.",
+ 'DatabaseException:InvalidQuery' => "Ugyldig forespørgsel",
+
+ 'IOException:FailedToLoadGUID' => "Kunne ikke loade ny %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 er ikke en gyldig %s",
+
+ 'PluginException:MisconfiguredPlugin' => "% s (GUID:% s) er en fejlkonfigureret plugin. Den er blevet deaktiveret. Tjek venligst i Elgg wiki for mulige årsager (http://docs.elgg.org/wiki/).",
+ 'PluginException:CannotStart' => '%s (guid: %s) kan ikke starte. Ã…rsag: %s',
+ 'PluginException:InvalidID' => "%s er et ugyldigt plugin ID.",
+ 'PluginException:InvalidPath' => "%s er en ugyldig plugin sti.",
+ 'PluginException:InvalidManifest' => 'Ugyldig manifestfil til plugin %s',
+ 'PluginException:InvalidPlugin' => '%s er ikke en gyldig plugin.',
+ 'PluginException:InvalidPlugin:Details' => '%s er ikke en gyldig plugin: %s',
+ 'PluginException:NullInstantiated' => 'ElggPlugin kan ikke blive nul instantieret. Du skal udfylde en GUID, en plugin ID, eller den fuldkomne sti.',
+
+ 'ElggPlugin:MissingID' => 'Mangler plugin ID (guid %s)',
+ 'ElggPlugin:NoPluginPackagePackage' => 'Mangler ElggPluginPackage til plugin ID %s (guid %s)',
+
+ 'ElggPluginPackage:InvalidPlugin:MissingFile' => 'Mangler fil %s i pakken',
+ 'ElggPluginPackage:InvalidPlugin:InvalidDependency' => 'Invalid dependency type "%s"',
+ 'ElggPluginPackage:InvalidPlugin:InvalidProvides' => 'Invalid provides type "%s"',
+ 'ElggPluginPackage:InvalidPlugin:CircularDep' => '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. Check permissions!',
+ 'ElggPlugin:Exception:CannotRegisterViews' => 'Cannot open views dir for plugin %s (guid: %s) at %s. Check permissions!',
+ 'ElggPlugin:Exception:CannotRegisterLanguages' => 'Cannot register languages for plugin %s (guid: %s) at %s. Check permissions!',
+ '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' => 'Kræver',
+ 'ElggPlugin:Dependencies:Suggests' => 'Foreslår',
+ 'ElggPlugin:Dependencies:Conflicts' => 'Konflikter',
+ 'ElggPlugin:Dependencies:Conflicted' => 'Konfliktede',
+ 'ElggPlugin:Dependencies:Provides' => 'Yder',
+ 'ElggPlugin:Dependencies:Priority' => 'Prioritet',
+
+ 'ElggPlugin:Dependencies:Elgg' => 'Elgg version',
+ 'ElggPlugin:Dependencies:PhpExtension' => 'PHP udvidelse: %s',
+ 'ElggPlugin:Dependencies:PhpIni' => 'PHP ini setting: %s',
+ 'ElggPlugin:Dependencies:Plugin' => 'Plugin: %s',
+ 'ElggPlugin:Dependencies:Priority:After' => 'Efter %s',
+ 'ElggPlugin:Dependencies:Priority:Before' => 'Før %s',
+ 'ElggPlugin:Dependencies:Priority:Uninstalled' => '%s er ikke installeret',
+ 'ElggPlugin:Dependencies:Suggests:Unsatisfied' => 'Mangler',
+
+ 'ElggPlugin:InvalidAndDeactivated' => '%s er en ugyldig plugin og er blevet deaktiveret.',
+
+ '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' => "Ikke i stand til at gemme ny %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 er ikke en %s.",
+ 'ClassNotFoundException:MissingClass' => "Klassen '%s' blev ikke fundet, mangler der et plugin?",
+ 'InstallationException:TypeNotSupported' => "Type %s er ikke understøttet. Det indikerer en fejl ved din installation, sandsynligvis forårsaget af en ufuldstændig opdatering.",
+
+ 'ImportException:ImportFailed' => "Kunne ikke importere elementet %d",
+ 'ImportException:ProblemSaving' => "Der var et problem med at gemme %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' => "Ikke alle elementer blev importeret.",
+
+ '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' => "Plugin navnet kunne ikke findes",
+
+ 'SecurityException:authenticationfailed' => "Bruger kunne ikke autoriseres",
+
+ 'CronException:unknownperiod' => '%s er ikke en genkendt periode.',
+
+ 'SecurityException:deletedisablecurrentsite' => 'Du kan ikke slette eller deaktivere den side, du er på!',
+
+ 'RegistrationException:EmptyPassword' => "Felterne 'adgangskode' må ikke være tomme",
+ 'RegistrationException:PasswordMismatch' => 'Adgangskoderne skal være ens',
+ 'LoginException:BannedUser' => 'Du er blevet udelukket fra dette websted, og kan ikke logge ind',
+ 'LoginException:UsernameFailure' => 'Vi kunne ikke logge dig ind. Tjek venligst dit brugernavn og adgangskode.',
+ 'LoginException:PasswordFailure' => 'Vi kunne ikke logge dig ind. Tjek venligst dit brugernavn og adgangskode.',
+ 'LoginException:AccountLocked' => 'Din konto er blevet spærret på grund af for mange log ind fejl.',
+ 'LoginException:ChangePasswordFailure' => 'Fejl i nuværende password check.',
+
+ 'memcache:notinstalled' => 'PHP memcache module not installed, you must install php5-memcache',
+ 'memcache:noservers' => 'No memcache servers defined, please populate the $CONFIG->memcache_servers variable',
+ 'memcache:versiontoolow' => 'Memcache needs at least version %s to run, you are running %s',
+ 'memcache:noaddserver' => 'Multiple server support disabled, you may need to upgrade your PECL memcache library',
+
+ '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' => 'Vær venlig at ændre dit bogmærke til denne side',
+ 'noaccess' => 'Dette indhold er fjernet, er ugyldig eller du har ikke rettigheder til at se det.',
+ 'error:missing_data' => 'Der er manglende data i din forespørgsel',
+
+ 'error:default' => 'Uups...du burde ikke kunne se denne side.',
+ 'error:404' => 'Vi beklager meget, men kan ikke finde den side du leder efter.',
+
+ /**
+ * 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' => "Fulde navn",
+ 'email' => "E-mail adresse",
+ 'username' => "Brugernavn",
+ 'loginusername' => "Brugernavn eller e-mail",
+ 'password' => "Adgangskode",
+ 'passwordagain' => "Adgangskode (igen for verifikation)",
+ 'admin_option' => "Skal denne bruger være administrator?",
+
+ /**
+ * Access
+ */
+
+ 'PRIVATE' => "Privat",
+ 'LOGGED_IN' => "Brugere der er logget ind",
+ 'PUBLIC' => "Offentlig",
+ 'access:friends:label' => "Venner",
+ 'access' => "Adgang",
+ 'access:limited:label' => "Begrænset",
+ 'access:help' => "Adgangsniveauet",
+
+ /**
+ * Dashboard and widgets
+ */
+
+ 'dashboard' => "Instrumentpanel",
+ 'dashboard:nowidgets' => "Med dit instrumentpanel kan du holde øje med aktivitet og indhold der betyder noget for dig.",
+
+ 'widgets:add' => "Tilføj widgets",
+ 'widgets:add:description' => "Klik på en widget knap herunder for at tilføje den til siden.",
+ 'widgets:position:fixed' => '(Fast placering på siden)',
+ 'widget:unavailable' => 'Du har allerede tilføjet denne widget',
+ 'widget:numbertodisplay' => 'Antal enmer der skal vises',
+
+ 'widget:delete' => 'Fjern %s',
+ 'widget:edit' => 'Tilpas denne widget',
+
+ 'widgets' => "Widgets",
+ 'widget' => "Widget",
+ 'item:object:widget' => "Widgets",
+ 'widgets:save:success' => "Din widget blev gemt.",
+ 'widgets:save:failure' => "Vi kunne ikke gemme din widget. Prøv venligst igen.",
+ 'widgets:add:success' => "Din widget blev tilføjet.",
+ 'widgets:add:failure' => "Vi kunne ikke tilføje din widget.",
+ 'widgets:move:failure' => "Vi kunne ikke gemme den nye widget position.",
+ 'widgets:remove:failure' => "Kunne ikke fjerne denne widget",
+
+ /**
+ * Groups
+ */
+
+ 'group' => "Gruppe",
+ 'item:group' => "Grupper",
+
+ /**
+ * Users
+ */
+
+ 'user' => "Bruger",
+ 'item:user' => "Brugere",
+
+ /**
+ * Friends
+ */
+
+ 'friends' => "Venner",
+ 'friends:yours' => "Dine venner",
+ 'friends:owned' => "%s's venner",
+ 'friend:add' => "Tilføj ven",
+ 'friend:remove' => "Fjern ven",
+
+ 'friends:add:successful' => "Du har føjet %s til dine venner.",
+ 'friends:add:failure' => "Vi kunne ikke tilføje %s som en ven. Prøv venligst igen.",
+
+ 'friends:remove:successful' => "Du har fjernet %s fra dine venner.",
+ 'friends:remove:failure' => "Vi kunne ikke fjerne %s fra dine venner. Prøv venligst igen.",
+
+ 'friends:none' => "Denne bruger har ikke tilføjet nogen venner endnu.",
+ 'friends:none:you' => "Du har ikke tilføjet nogen venner endnu!",
+
+ 'friends:none:found' => "Ingen venner fundet.",
+
+ 'friends:of:none' => "Ingen har tilføjet denne bruger som ven endnu.",
+ 'friends:of:none:you' => "Ingen har tilføjet dig som ven endnu. Begynd at tilføje indhold og udfylde din profil for at lade folk finde dig!",
+
+ 'friends:of:owned' => "Folk der har føjet %s til deres venner",
+
+ 'friends:of' => "Venner med",
+ 'friends:collections' => "Venneliste",
+ 'collections:add' => "Ny liste",
+ 'friends:collections:add' => "Ny venneliste",
+ 'friends:addfriends' => "Tilføj venner",
+ 'friends:collectionname' => "Listens navn",
+ 'friends:collectionfriends' => "Venner i listen",
+ 'friends:collectionedit' => "Rediger denne liste",
+ 'friends:nocollections' => "Du har endnu ikke nogen lister!",
+ 'friends:collectiondeleted' => "Din liste er blevet slettet!",
+ 'friends:collectiondeletefailed' => "Vi kunne ikke slette listen. Enter har du ikke tilladelse, eller også skete der en anden fejl.",
+ 'friends:collectionadded' => "Din liste er blevet oprettet",
+ 'friends:nocollectionname' => "Du er nødt til at give din liste et navn, før den kan oprettes.",
+ 'friends:collections:members' => "Venneliste",
+ 'friends:collections:edit' => "Rediger liste",
+ 'friends:collections:edited' => "Gemte liste",
+ 'friends:collection:edit_failed' => 'Kunne ikke gemme listen.',
+
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ',
+
+ 'avatar' => 'Avatar',
+ 'avatar:create' => 'Opret dit profilbillede',
+ 'avatar:edit' => 'Rediger profilbillede',
+ 'avatar:preview' => 'Forhåndsvisning',
+ 'avatar:upload' => 'Upload et nyt profilbillede',
+ 'avatar:current' => 'Nuværende profilbillede',
+ 'avatar:revert' => 'Gendan dit profilbillede til standard ikonet',
+ 'avatar:crop:title' => 'Profilbillede beskæringsværktøj',
+ 'avatar:upload:instructions' => "Dit profilbillede vises på hele sitet. Du kan ændre den så tit du har lyst. (Filformater der accepteres: GIF, JPG eller PNG)",
+ 'avatar:create:instructions' => 'Klik og træk en firkant nedenfor for at vise, hvordan du ønsker dit profilbillede beskåret. Et eksempel vises i boksen til højre. Når du er tilfreds med forhåndsvisningen, klikker du på \'Opret dit profilbillede \'. Denne redigerede version vil blive anvendt på hele sitet som dit profilbillede.',
+ 'avatar:upload:success' => 'Profilbillede uploaded',
+ 'avatar:upload:fail' => 'Profilbillede upload fejlede',
+ 'avatar:resize:fail' => 'Ændring af størrelsen på dit profilbillede mislykkedes',
+ 'avatar:crop:success' => 'Beskæring af profilbilledet lykkedes',
+ 'avatar:crop:fail' => 'Beskæring af profilbilledet fejlede',
+ 'avatar:revert:success' => 'Gendannelsen af dit profilbillede er lykkedes',
+ 'avatar:revert:fail' => 'Profilbilledets gendannelse mislykkedes',
+
+ 'profile:edit' => "Rediger profil",
+ 'profile:aboutme' => "Om mig",
+ 'profile:description' => "Om mig",
+ 'profile:briefdescription' => "Kort beskrivelse",
+ 'profile:location' => "Sted",
+ 'profile:skills' => "Færdigheder",
+ 'profile:interests' => "Interesser",
+ 'profile:contactemail' => "Kontakt mail",
+ 'profile:phone' => "Telefon",
+ 'profile:mobile' => "Mobil",
+ 'profile:website' => "Website",
+ 'profile:twitter' => "Twitter brugernavn",
+ 'profile:saved' => "Din profil blev gemt.",
+
+ 'profile:field:text' => 'Kort tekst',
+ 'profile:field:longtext' => 'Stort tekst felt',
+ 'profile:field:tags' => 'Tags',
+ 'profile:field:url' => 'Web adresse',
+ 'profile:field:email' => 'Email adresse',
+ 'profile:field:location' => 'Lokation',
+ 'profile:field:date' => 'Dato',
+
+ 'admin:appearance:profile_fields' => 'Rediger profil felter',
+ 'profile:edit:default' => 'Rediger profil felter',
+ 'profile:label' => "Navn",
+ 'profile:type' => "Profiltype",
+ 'profile:editdefault:delete:fail' => 'Standardprofil element kunne ikke slettes',
+ 'profile:editdefault:delete:success' => 'Standardprofil element slettet!',
+ 'profile:defaultprofile:reset' => 'Standard profil genoprettet',
+ 'profile:resetdefault' => 'Genopret standard profil',
+ 'profile:explainchangefields' => "Du kan erstatte de eksisterende felter i profilen med dine egne ved hjælp af formularen nedenfor. \n\n Giv det nye profilfelt en navn, for eksempel, 'Favorit hold', vælg derefter felt type (f.eks tekst, url, tags), og klik på knappen 'Tilføj'. For at ændre rækkefølgen af felterne træk i markeringen ved siden af navnet. For at redigere et feltnavn - klik på navnet for at gøre teksten redigerbar. \n\n Du kan altid vende tilbage til standardindstillingerne for profilen, men du vil miste alle data, der allerede er tilføjet i de brugerdefinerede felter på profil sider.",
+ 'profile:editdefault:success' => 'Element føjet til standard profilen',
+ 'profile:editdefault:fail' => 'Standard profilen kunne ikke gemmes',
+
+
+/**
+ * Feeds
+ */
+ 'feed:rss' => 'RSS feed for denne side',
+/**
+ * Links
+ */
+ 'link:view' => 'se link',
+ 'link:view:all' => 'Se alle',
+
+
+/**
+ * River
+ */
+ 'river' => "River",
+ 'river:friend:user:default' => "%s er nu ven med %s",
+ 'river:update:user:avatar' => '%s har oprettet et nyt profilbillede',
+ 'river:update:user:profile' => '%s har opdateret profilen',
+ 'river:noaccess' => 'Du har ikke tilladelse til at se dette element.',
+ 'river:posted:generic' => '%s postede',
+ 'riveritem:single:user' => 'en bruger',
+ 'riveritem:plural:user' => 'nogle grugere',
+ 'river:ingroup' => 'i gruppen %s',
+ 'river:none' => 'Ingen aktivitet',
+ 'river:update' => 'Opdatering for %s',
+
+ 'river:widget:title' => "Aktivitet",
+ 'river:widget:description' => "Vis seneste aktivitet",
+ 'river:widget:type' => "Type af aktivitet",
+ 'river:widgets:friends' => 'Venners aktivitet',
+ 'river:widgets:all' => 'Al aktivitet',
+
+/**
+ * Notifications
+ */
+ 'notifications:usersettings' => "Indstillinger for beskeder",
+ 'notifications:methods' => "Angiv hvilke metoder du vil tillade.",
+ 'notification:method:email' => 'E-mail',
+
+ 'notifications:usersettings:save:ok' => "Dine indstillinger for beskeder er gemt.",
+ 'notifications:usersettings:save:fail' => "Der opstop et problem med at gemme dine indstillinger for beskeder.",
+
+ 'user.notification.get' => 'Vis indstillinger for beskeder for en given bruger.',
+ 'user.notification.set' => 'Angiv indstillinger for beskeder for en given bruger.',
+/**
+ * Search
+ */
+
+ 'search' => "Søg",
+ 'searchtitle' => "Søg: %s",
+ 'users:searchtitle' => "Søgning efter brugere: %s",
+ 'groups:searchtitle' => "Søgning efter grupper: %s",
+ 'advancedsearchtitle' => "%s med resultater der matcher %s",
+ 'notfound' => "Ingen resultater fundet.",
+ 'next' => "Næste",
+ 'previous' => "Forrige",
+
+ 'viewtype:change' => "Skift listetype",
+ 'viewtype:list' => "Listevisning",
+ 'viewtype:gallery' => "Galleri",
+
+ 'tag:search:startblurb' => "Elementer med tags matchende '%s':",
+
+ 'user:search:startblurb' => "Brugere matchende '%s':",
+ 'user:search:finishblurb' => "Klik her for at se mere.",
+
+ 'group:search:startblurb' => "Grupper, der matcher '%s':",
+ 'group:search:finishblurb' => "Klik her for at se mere.",
+ 'search:go' => 'Go',
+ 'userpicker:only_friends' => 'Kun venner',
+
+/**
+ * Account
+ */
+
+ 'account' => "Konto",
+ 'settings' => "Indstillinger",
+ 'tools' => "Værktøjer",
+ 'settings:edit' => 'Ændre indstillinger',
+
+ 'register' => "Registrer",
+ 'registerok' => "Du er nu tilmeldt %s.",
+ 'registerbad' => "Din registrering mislykkedes på grund af en ukendt fejl.",
+ 'registerdisabled' => "Registrering er blevet deaktiveret af systemadministratoren",
+ 'register:fields' => 'Alle felter skal udfyldes',
+
+ 'registration:notemail' => 'Den e-mail adresse, du angav, synes ikke at være en gyldig e-mail adresse.',
+ 'registration:userexists' => 'Brugernavnet er allerede i brug',
+ 'registration:usernametooshort' => 'Dit brugernavn skal være mindst på %u tegn.',
+ 'registration:passwordtooshort' => 'Din adgangskode skal være på mindst %u tegn.',
+ 'registration:dupeemail' => 'Denne e-mail adresse er allerede registreret.',
+ 'registration:invalidchars' => 'Beklager, dit brugernavn indeholder følgende ugyldige tegn: %s. Alle disse tegn er ugyldige: %s',
+ 'registration:emailnotvalid' => 'Beklager, den e-mail adresse, du indtastede er ugyldig på dette system',
+ 'registration:passwordnotvalid' => 'Beklager, den adgangskode, du indtastede er ugyldig på dette system',
+ 'registration:usernamenotvalid' => 'Beklager, det brugernavn, du indtastede, er ugyldigt på dette system',
+
+ 'adduser' => "Tilføj bruger",
+ 'adduser:ok' => "Du har nu tilføjet en ny bruger.",
+ 'adduser:bad' => "Den nye bruger kunne ikke oprettes.",
+
+ 'user:set:name' => "Indstillinger for kontonavn",
+ 'user:name:label' => "Mit brugernavn",
+ 'user:name:success' => "Dit navn er ændret.",
+ 'user:name:fail' => "Kunne ikke ændre dit navn i systemet. Sørg for, at dit navn ikke er for langt og prøv igen.",
+
+ 'user:set:password' => "Konto adgangskode",
+ 'user:current_password:label' => 'Nuværende adgangskode',
+ 'user:password:label' => "Din nye adgangskode",
+ 'user:password2:label' => "Din nye adgangskode igen",
+ 'user:password:success' => "Adgangskode ændret",
+ 'user:password:fail' => "Kunne ikke ændre din adgangskode.",
+ 'user:password:fail:notsame' => "De to adgangskoder er ikke ens!",
+ 'user:password:fail:tooshort' => "Adgangskoden er for kort!",
+ 'user:password:fail:incorrect_current_password' => 'Den nuværende indtastede adgangskode er forkert.',
+ 'user:resetpassword:unknown_user' => 'Ugyldig bruger.',
+ 'user:resetpassword:reset_password_confirm' => 'Nulstilling af din adgangskode vil sende en e-mail med en ny adgangskode til din registrerede e-mail adresse.',
+
+ 'user:set:language' => "Sprogindstillinger",
+ 'user:language:label' => "Dit sprog",
+ 'user:language:success' => "Dine sprogindstillinger er blevet opdateret.",
+ 'user:language:fail' => "Dine sprogindstillinger kunne ikke gemmes.",
+
+ 'user:username:notfound' => 'Brugernavn %s ikke fundet.',
+
+ 'user:password:lost' => 'Mistet adgangskode',
+ 'user:password:resetreq:success' => 'Vellykket anmodet om en ny adgangskode, e-mail sendt',
+ 'user:password:resetreq:fail' => 'Kunne ikke anmode om en ny adgangskode.',
+
+ 'user:password:text' => 'For at anmode om et nyt password, så indtast dit brugernavn nedenfor og klik på knappen Anmod.',
+
+ 'user:persistent' => 'Husk mig',
+
+ 'walled_garden:welcome' => 'Velkommen til',
+
+/**
+ * Administration
+ */
+ 'menu:page:header:administer' => 'Administrer',
+ 'menu:page:header:configure' => 'Konfigurer',
+ 'menu:page:header:develop' => 'Udvikle',
+ 'menu:page:header:default' => 'Andet',
+
+ 'admin:view_site' => 'Se siden',
+ 'admin:loggedin' => 'Logged ind som %s',
+ 'admin:menu' => 'Menu',
+
+ 'admin:configuration:success' => "Dine indstillinger er blevet gemt.",
+ 'admin:configuration:fail' => "Dine indstillinger kunne ikke gemmes.",
+ 'admin:configuration:dataroot:relative_path' => 'Cannot set "%s" as the dataroot because it is not an absolute path.',
+
+ 'admin:unknown_section' => 'Ugyldig adminsektion.',
+
+ 'admin' => "Administration",
+ 'admin:description' => "Administrationspanelet giver dig mulighed for at styre alle aspekter af systemet, fra brugerhåndtering til hvordan plugins skal fungere. Vælg en indstilling nedenfor for at komme i gang.",
+
+ 'admin:statistics' => "Statistik",
+ 'admin:statistics:overview' => 'Oversigt',
+ 'admin:statistics:server' => 'Server Info',
+
+ 'admin:appearance' => 'Udseende',
+ 'admin:administer_utilities' => 'Hjælpeprogrammer',
+ 'admin:develop_utilities' => 'Utilities',
+
+ 'admin:users' => "Brugere",
+ 'admin:users:online' => 'Online i øjeblikket',
+ 'admin:users:newest' => 'Nyeste',
+ 'admin:users:add' => 'Tilføj ny bruger',
+ 'admin:users:description' => "Dette administrationspanel giver dig mulighed for at kontrollere brugernes indstillinger. Vælg herunder for at komme i gang.",
+ 'admin:users:adduser:label' => "Klik her for at tilføje en ny bruger...",
+ 'admin:users:opt:linktext' => "Konfigurer brugere...",
+ 'admin:users:opt:description' => "Konfigurer brugere og kontooplysninger. ",
+ 'admin:users:find' => 'Find',
+
+ 'admin:settings' => 'Indstillinger',
+ 'admin:settings:basic' => 'Grundlæggende indstillinger',
+ 'admin:settings:advanced' => 'Avancerede indstillinger',
+ 'admin:site:description' => "Dette administrationspanel giver dig mulighed for at kontrollere de globale indstillinger for dit websted. Vælg en indstilling nedenfor for at komme i gang.",
+ 'admin:site:opt:linktext' => "Konfigurer siden...",
+ 'admin:site:access:warning' => "Ændring af adgangstilladelser påvirker kun tilladelser for indhold oprettet fremover.",
+
+ 'admin:dashboard' => 'Dashboard',
+ 'admin:widget:online_users' => 'Online brugere',
+ 'admin:widget:online_users:help' => 'Viser de brugere, der er på sitet i øjeblikket',
+ 'admin:widget:new_users' => 'Nye brugere',
+ 'admin:widget:new_users:help' => 'Viser de nyeste brugere',
+ 'admin:widget:content_stats' => 'Indholdsstatistik',
+ 'admin:widget:content_stats:help' => 'Hold styr på indhold oprettet af brugerne',
+ 'widget:content_stats:type' => 'Indholdstype',
+ 'widget:content_stats:number' => 'Nummer',
+
+ 'admin:widget:admin_welcome' => 'Velkommen',
+ 'admin:widget:admin_welcome:help' => "En kort introduktion til Elggs admininistrationspanel",
+ 'admin:widget:admin_welcome:intro' =>
+'Velkommen til Elgg! Lige nu kigger du på administrationsdelens instrumentpanel. Det er nyttigt til give overblik over, hvad der sker på sitet.',
+
+ 'admin:widget:admin_welcome:admin_overview' =>
+"Navigation til administrationspanelet er i menuen til højre. Den er organiseret i"
+. " tre dele:
+ <dl>
+ <dt>Administrer</dt><dd>Dagligdags opgaver som kontrol af rapporteret indhold, hvem der er online og visning af statistik.</dd>
+ <dt>Konfigurer</dt><dd>Lejlighedsvise opgaver som at indtaste navnet på hjemmesiden eller aktivere et plugin.</dd>
+ <dt>Udvikle</dt><dd>For udviklere, der er ved at kode plugins eller designe temaer. (Kræver et udvikler-plugin.)</dd>
+ </dl>
+ ",
+
+ // argh, this is ugly
+ 'admin:widget:admin_welcome:outro' => '<br />Sørg for at tjekke de ressourcer, der er til rådighed via link i footer og tak fordi du anvender Elgg!',
+
+ 'admin:widget:control_panel' => 'Kontrol panel',
+ 'admin:widget:control_panel:help' => "Giver hurtig adgang til standard værktøjer",
+
+ 'admin:cache:flush' => 'Tøm cachen',
+ 'admin:cache:flushed' => "Sidens cach er blevet tømt",
+
+ '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' => 'Alle plugins',
+ 'admin:plugins:category:active' => 'Aktive plugins',
+ 'admin:plugins:category:inactive' => 'Inaktive plugins',
+ 'admin:plugins:category:admin' => 'Admin',
+ 'admin:plugins:category:bundled' => 'Medfølgende',
+ 'admin:plugins:category:nonbundled' => 'Ikke medfølgende',
+ 'admin:plugins:category:content' => 'Indhold',
+ 'admin:plugins:category:development' => 'Udvikling',
+ 'admin:plugins:category:enhancement' => 'Forbedringer',
+ 'admin:plugins:category:api' => 'Service/API',
+ 'admin:plugins:category:communication' => 'kommunikation',
+ 'admin:plugins:category:security' => 'Sikkerhed og Spam',
+ 'admin:plugins:category:social' => 'Social',
+ 'admin:plugins:category:multimedia' => 'Multimedia',
+ 'admin:plugins:category:theme' => 'Temaer',
+ 'admin:plugins:category:widget' => 'Widgets',
+ 'admin:plugins:category:utility' => 'Utilities',
+
+ 'admin:plugins:sort:priority' => 'Prioritet',
+ 'admin:plugins:sort:alpha' => 'Alfabetisk',
+ 'admin:plugins:sort:date' => 'Nyeste',
+
+ 'admin:plugins:markdown:unknown_plugin' => 'Ukendt plugin.',
+ 'admin:plugins:markdown:unknown_file' => 'Ukendt fil.',
+
+
+ 'admin:notices:could_not_delete' => 'Kunne ikke slette besked.',
+
+ 'admin:options' => 'Admin muligheder',
+
+
+/**
+ * Plugins
+ */
+ 'plugins:disabled' => 'Plugins bliver loaded, fordi en fil ved navn "inaktiv" er i modul mappen.',
+ 'plugins:settings:save:ok' => "Indstillinger for %s plugin er blevet gemt.",
+ 'plugins:settings:save:fail' => "Der var problemer med at gemme indstillinger for %s plugin.",
+ 'plugins:usersettings:save:ok' => "Bruger indstillinger for %s plugin er blevet gemt.",
+ 'plugins:usersettings:save:fail' => "Der var problemer med at gemme bruger indstillinger for %s plugin.",
+ 'item:object:plugin' => 'Plugins',
+
+ 'admin:plugins' => "Plugins",
+ 'admin:plugins:activate_all' => 'Aktiver alle',
+ 'admin:plugins:deactivate_all' => 'Deaktiver alle',
+ 'admin:plugins:activate' => 'Aktiver',
+ 'admin:plugins:deactivate' => 'Deaktiver',
+ 'admin:plugins:description' => "Dette administrationspanel giver dig mulighed for at styre og konfigurere værktøjer installeret på dit websted.",
+ 'admin:plugins:opt:linktext' => "Konfigurer værktøjer...",
+ 'admin:plugins:opt:description' => "Konfigurer værktøjer installeret på sitet. ",
+ 'admin:plugins:label:author' => "Author",
+ 'admin:plugins:label:copyright' => "Copyright",
+ 'admin:plugins:label:categories' => 'Kategorier',
+ 'admin:plugins:label:licence' => "Licens",
+ 'admin:plugins:label:website' => "URL",
+ 'admin:plugins:label:moreinfo' => 'mere info',
+ 'admin:plugins:label:version' => 'Version',
+ 'admin:plugins:label:location' => 'Placering',
+ 'admin:plugins:label:dependencies' => 'Afhængigheder',
+
+ 'admin:plugins:warning:elgg_version_unknown' => 'Dette plugin bruger en ugyldig manifest fil og angiver ikke en kompatibel Elgg version. Det vil sandsynligvis ikke fungere!',
+ 'admin:plugins:warning:unmet_dependencies' => 'Dette plugin har udækkede afhængigheder og kan ikke aktiveres. Tjek afhængigheder under mere info.',
+ 'admin:plugins:warning:invalid' => '%s er ikke et gyldigt Elgg plugin. Tjek <a href="http://docs.elgg.org/Invalid_Plugin">the Elgg documentation</a> for tip til fejlfinding.',
+ 'admin:plugins:cannot_activate' => 'kan ikke aktivere',
+
+ 'admin:plugins:set_priority:yes' => "Flyttede %s.",
+ 'admin:plugins:set_priority:no' => "Kunne ikke flytte %s.",
+ 'admin:plugins:set_priority:no_with_msg' => "Kunne ikke reordre %s. Fejl: %s",
+ 'admin:plugins:deactivate:yes' => "Deaktiverede %s.",
+ 'admin:plugins:deactivate:no' => "Kunne ikke deaktivere %s.",
+ 'admin:plugins:deactivate:no_with_msg' => "Kunne ikke deacktivere %s. Fejl: %s",
+ 'admin:plugins:activate:yes' => "Aktiverede %s.",
+ 'admin:plugins:activate:no' => "Kunne ikke aktivere %s.",
+ 'admin:plugins:activate:no_with_msg' => "Kunne ikke aktivere %s. Fejl: %s",
+ 'admin:plugins:categories:all' => 'Alle kategorier',
+ 'admin:plugins:plugin_website' => 'Plugin website',
+ 'admin:plugins:author' => '%s',
+ 'admin:plugins:version' => 'Version %s',
+ 'admin:plugin_settings' => 'Plugin Indstillinger',
+ 'admin:plugins:warning:unmet_dependencies_active' => 'Dette plugin er aktiv, men der er udækkede afhængigheder. Du kan støde på problemer. Se "mere information" nedenfor for yderligere oplysninger.',
+
+ 'admin:plugins:dependencies:type' => 'Type',
+ 'admin:plugins:dependencies:name' => 'Navn',
+ 'admin:plugins:dependencies:expected_value' => 'Testet værdi',
+ 'admin:plugins:dependencies:local_value' => 'Faktisk værdi',
+ 'admin:plugins:dependencies:comment' => 'Kommentar',
+
+ 'admin:statistics:description' => "Dette er en oversigt over statistik på dit websted. Hvis du har brug for mere detaljerede statistikker, er en professionel administrations funktion tilgængelig.",
+ 'admin:statistics:opt:description' => "Vis statistiske oplysninger om brugere og objekter på dit websted.",
+ 'admin:statistics:opt:linktext' => "Vis statistik...",
+ 'admin:statistics:label:basic' => "Grundlæggende side statistik",
+ 'admin:statistics:label:numentities' => "Enheder på siden",
+ 'admin:statistics:label:numusers' => "Antal brugere",
+ 'admin:statistics:label:numonline' => "Antal brugere online",
+ 'admin:statistics:label:onlineusers' => "Brugere online nu",
+ '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 Lokation',
+ 'admin:server:label:php_version' => 'PHP version',
+ 'admin:server:label:php_ini' => 'PHP ini fil lokation',
+ '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:user:label:search' => "Find brugere:",
+ 'admin:user:label:searchbutton' => "Søg",
+
+ 'admin:user:ban:no' => "Kan ikke udelukke brugeren",
+ 'admin:user:ban:yes' => "Bruger udelukket.",
+ 'admin:user:self:ban:no' => "Du kan ikke udelukke dig selv",
+ 'admin:user:unban:no' => "Kan ikke annullere udelukkelse af bruger",
+ 'admin:user:unban:yes' => "Brugers udelukkelse annulleret.",
+ 'admin:user:delete:no' => "Kan ikke slette bruger",
+ 'admin:user:delete:yes' => "Brugeren %s er blevet slettet",
+ 'admin:user:self:delete:no' => "Du kan ikke slette dig selv",
+
+ 'admin:user:resetpassword:yes' => "Nulstilling af adgangskode, brugeren underrettet",
+ 'admin:user:resetpassword:no' => "Adgangskoden kunne ikke nulstilles.",
+
+ 'admin:user:makeadmin:yes' => "Bruger er nu administrator.",
+ 'admin:user:makeadmin:no' => "Vi kunne ikke gøre denne bruger til administrator.",
+
+ 'admin:user:removeadmin:yes' => "Brugeren er ikke længere administrator.",
+ 'admin:user:removeadmin:no' => "Vi kunne ikke fjerne administratorrettigheder fra denne bruger.",
+ 'admin:user:self:removeadmin:no' => "Du kan ikke fjerne dine egne administratorrettigheder.",
+
+ 'admin:appearance:menu_items' => 'Menupunkter',
+ 'admin:menu_items:configure' => 'Konfigurer hovedmenupunkter',
+ 'admin:menu_items:description' => 'Vælg, hvilke menupunkter du vil vise som hyperlinks. Ubrugte emner vil blive tilføjet under "Flere".',
+ 'admin:menu_items:hide_toolbar_entries' => 'Fjern links fra værktøjslinie menuen?',
+ 'admin:menu_items:saved' => 'Menupunkter gemt.',
+ 'admin:add_menu_item' => 'Opret et tilpasset menupunkt',
+ 'admin:add_menu_item:description' => 'Udfyld Navn og URL for at tilføje brugerdefinerede elementer til din navigationsmenu.',
+
+ 'admin:appearance:default_widgets' => 'Standard Widgets',
+ 'admin:default_widgets:unknown_type' => 'Ukendt widget type',
+ 'admin:default_widgets:instructions' => 'Tilføj, fjern, placér, og konfigurer standard widgets til den valgte widget side.'
+ . ' Disse ændringer vil kun gælde for nye brugere på sitet.',
+
+/**
+ * User settings
+ */
+ 'usersettings:description' => "Bruger indstillingspanelet gør dig i stand til at kontrollere alle dine personlige indstilinger, fra brugerstrying til hvordan dine plugins skal fungere. Vælg en mulighed herunder for at begynde.",
+
+ 'usersettings:statistics' => "Dine statistikker",
+ 'usersettings:statistics:opt:description' => "Vis statistisk information om brugere og objekter på din side.",
+ 'usersettings:statistics:opt:linktext' => "Konto statistikker",
+
+ 'usersettings:user' => "Dine indstillinger",
+ 'usersettings:user:opt:description' => "Dette gør dig i stand til at styre dine brugerinstillinger.",
+ 'usersettings:user:opt:linktext' => "Rediger dine indstillinger",
+
+ 'usersettings:plugins' => "Værktøjer",
+ 'usersettings:plugins:opt:description' => "Konfigurerer indstillinger (hvis nogen) for dine aktive værktøjer.",
+ 'usersettings:plugins:opt:linktext' => "Konfigurer dine værktøjer",
+
+ 'usersettings:plugins:description' => "Dette panel gør dig i stand til at styre og opsætte personlige indstillinger for de værktøjer, der er blevet installeret af systemadministratoren.",
+ 'usersettings:statistics:label:numentities' => "Dit indhold",
+
+ 'usersettings:statistics:yourdetails' => "Dine detaljer",
+ 'usersettings:statistics:label:name' => "Fulde navn",
+ 'usersettings:statistics:label:email' => "E-mail",
+ 'usersettings:statistics:label:membersince' => "Medlem siden",
+ 'usersettings:statistics:label:lastlogin' => "Sidst logget ind",
+
+/**
+ * Activity river
+ */
+ 'river:all' => 'Al aktivitet',
+ 'river:mine' => 'Min aktivitet',
+ 'river:friends' => 'Venners aktivitet',
+ 'river:select' => 'Vis %s',
+ 'river:comments:more' => '+%u mere',
+ 'river:generic_comment' => 'kommenterede %s %s',
+
+ 'friends:widget:description' => "Vis nogle af dine venner.",
+ 'friends:num_display' => "Antal venner der skal vises",
+ 'friends:icon_size' => "Ikon størrelse",
+ 'friends:tiny' => "bittesmå",
+ 'friends:small' => "små",
+
+ /**
+ * Generic action words
+ */
+
+ 'save' => "Gem",
+ 'reset' => 'Reset',
+ 'publish' => "Offentliggør",
+ 'cancel' => "Annuller",
+ 'saving' => "Gemmer ...",
+ 'update' => "Opdater",
+ 'preview' => "Eksempel",
+ 'edit' => "Rediger",
+ 'delete' => "Slet",
+ 'accept' => "Accepter",
+ 'load' => "Hent",
+ 'upload' => "Tilføj",
+ 'ban' => "Udeluk",
+ 'unban' => "Ophæv udelukkelse",
+ 'banned' => "Udelukket",
+ 'enable' => "Aktiver",
+ 'disable' => "Deaktiver",
+ 'request' => "Anmod",
+ 'complete' => "Færdig",
+ 'open' => "Ã…bn",
+ 'close' => "Luk",
+ 'reply' => "Svar",
+ 'more' => 'Mere',
+ 'comments' => 'Kommentarer',
+ 'import' => 'Importer',
+ 'export' => 'Eksporter',
+ 'untitled' => 'Uden titel',
+ 'help' => 'Hjælp',
+ 'send' => 'Send',
+ 'post' => 'Post',
+ 'submit' => 'Send',
+ 'comment' => 'Kommentar',
+ 'upgrade' => 'Opgrader',
+ 'sort' => 'Sortér',
+ 'filter' => 'Filter',
+ 'new' => 'Ny',
+ 'add' => 'Tilføj',
+ 'create' => 'Opret',
+ 'revert' => 'Kør tilbage',
+
+ 'site' => 'Side',
+ 'activity' => 'Aktivitet',
+ 'members' => 'Medlemmer',
+
+ 'up' => 'Op',
+ 'down' => 'Ned',
+ 'top' => 'Top',
+ 'bottom' => 'Bund',
+
+ 'invite' => "Invitér",
+
+ 'resetpassword' => "Nulstil adgangskode",
+ 'makeadmin' => "Gør til administrator",
+ 'removeadmin' => "Fjern admin",
+
+ 'option:yes' => "Ja",
+ 'option:no' => "Nej",
+
+ 'unknown' => "Ukendt",
+
+ 'active' => "Aktiv",
+ 'total' => "Total",
+
+ 'learnmore' => "Klik her for at lære mere.",
+
+ 'content' => "indhold",
+ 'content:latest' => "Seneste aktivitet",
+ 'content:latest:blurb' => "Alternativt, klik her for at se det seneste indhold fra hele siden.",
+
+ 'link:text' => "se link",
+ /**
+ * Generic questions
+ */
+
+ 'question:areyousure' => 'Er du sikker?',
+
+ /**
+ * Generic data words
+ */
+
+ 'title' => "Titel",
+ 'description' => "Beskrivelse",
+ 'tags' => "Tags",
+ 'spotlight' => "Spotlight",
+ 'all' => "Alle",
+ 'mine' => "Mine",
+
+ 'by' => "af",
+ 'none' => 'ingen',
+
+ 'annotations' => "Notater",
+ 'relationships' => "Forhold",
+ 'metadata' => "Metadata",
+ 'tagcloud' => "Tag cloud",
+ 'tagcloud:allsitetags' => "Alle tags",
+
+ 'on' => 'On',
+ 'off' => 'Off',
+
+/**
+ * Entity actions
+ */
+ 'edit:this' => 'Rediger dette',
+ 'delete:this' => 'Slet dette',
+ 'comment:this' => 'Kommenter dette',
+
+ /**
+ * Input / output strings
+ */
+
+ 'deleteconfirm' => "Er du sikker på, at du vil slette dette?",
+ 'fileexists' => "En fil er allerede blevet uploaded. Vælg den for at erstatte den:",
+
+ /**
+ * User add
+ */
+
+ 'useradd:subject' => 'Brugerkonto oprettet',
+ 'useradd:body' => '
+%s,
+
+En brugerkonto er blevet oprettet til dig på %s. For at logge ind, besøg:
+
+%s
+
+Du kan logge ind med disse bruger oplysninger:
+
+Brugernavn: %s
+Adgangskode: %s
+
+Vi anbefaler, at du ændrer din adgangskode, når du har logget ind.
+',
+
+/**
+* System messages
+**/
+
+ 'systemmessages:dismiss' => "klik for at lukke",
+
+
+/**
+* Import / export
+*/
+ 'importsuccess' => "Data import lykkedes",
+ 'importfail' => "OpenDD data import mislykkedes",
+
+ /**
+ * Time
+ */
+
+ 'friendlytime:justnow' => "lige nu",
+ 'friendlytime:minutes' => "%s minutter siden",
+ 'friendlytime:minutes:singular' => "et minut siden",
+ 'friendlytime:hours' => "%s timer siden",
+ 'friendlytime:hours:singular' => "en time siden",
+ 'friendlytime:days' => "%s dage siden",
+ 'friendlytime:days:singular' => "i går",
+ 'friendlytime:date_format' => 'j F Y @ g:ia',
+
+ 'date:month:01' => 'Januar %s',
+ 'date:month:02' => 'Februar %s',
+ 'date:month:03' => 'Marts %s',
+ 'date:month:04' => 'April %s',
+ 'date:month:05' => 'Maj %s',
+ 'date:month:06' => 'Juni %s',
+ 'date:month:07' => 'Juli %s',
+ 'date:month:08' => 'August %s',
+ 'date:month:09' => 'September %s',
+ 'date:month:10' => 'Oktober %s',
+ 'date:month:11' => 'November %s',
+ 'date:month:12' => 'December %s',
+
+
+/**
+ * System settings
+ */
+
+ 'installation:sitename' => "Din sides navn (f.eks. \"Mit sociale netværk\"):",
+ 'installation:sitedescription' => "Kort beskrivelse af din side (Valgfrit)",
+ 'installation:wwwroot' => "Sidens URL, efterfulgt af en skråstreg:",
+ 'installation:path' => "Den fulde sti til din sides rod på din disk, efterfulgt af en skråstreg:",
+ 'installation:dataroot' => "Den fulde sti til den folder, hvor tilføjede filer bliver gemt, efterfulgt af en skråstreg:",
+ 'installation:dataroot:warning' => "Du skal oprette denne folder manuelt. Den bør være placeret i en anden folder end din Elgg installation.",
+ 'installation:sitepermissions' => "Standard adgangstilladelser:",
+ 'installation:language' => "Standardsproget for din side:",
+ 'installation:debug' => "Debug mode giver ekstra information, der kan bruges til at diagnosticere fejl, men den gør dit system langsommere og bør kun bruges, hvis du har problemer.",
+ 'installation:debug:none' => 'Fravælg debug mode (anbefalet)',
+ 'installation:debug:error' => 'Vis kun kritiske fejl',
+ 'installation:debug:warning' => 'Vis fejl og advarsler',
+ 'installation:debug:notice' => 'Log alle fejl, advarsler og bemærkninger',
+
+ // Walled Garden support
+ 'installation:registration:description' => 'Bruger registrering er aktiveret som standard. Slå dette fra, hvis du ikke ønsker, at nye brugere skal kunne registrere på egen hånd.',
+ 'installation:registration:label' => 'Tillad nye brugere at registrere sig',
+ 'installation:walled_garden:description' => 'Aktiver stedet til at køre som et privat netværk. Dette vil ikke tillade brugere, der ikke er logget ind, at se andre sider end dem, der specifikt er markeret som offentlige.',
+ 'installation:walled_garden:label' => 'Begræns sider til registrerede brugere',
+
+ 'installation:httpslogin' => "Aktiver dette hvis du vil have bruger log ind håndteret af HTTPS. Du skal have https aktiveret på din server for at dette fungerer.",
+ 'installation:httpslogin:label' => "Aktiver HTTPS log ind",
+ 'installation:view' => "Vælg det udseende, der skal bruges som standard for din side eller lad være med at vælge for at bruge standard udseende (er du i tvivl, så brug standard):",
+
+ 'installation:siteemail' => "Sidens e-mail adresse (bruges når der sendes system e-mails)",
+
+ 'installation:disableapi' => "Elgg leverer en API der er en fleksibel og udvidelig grænseflade, der tillader programmer at tilgå visse Elgg funktioner udefra.",
+ 'installation:disableapi:label' => "Aktiver Elgg's web service API",
+
+ 'installation:allow_user_default_access:description' => "Hvis tilvalgt vil individuelle brugere have tilladelse til at definere deres eget adgangsniveau, som kan overskrive systemets standard adgangsniveau.",
+ 'installation:allow_user_default_access:label' => "Tillad bruger standard adgang.",
+
+ 'installation:simplecache:description' => "Simple cache øger præstationen ved at cache statisk indhold inklusive nogle CSS og JavaScript filer. Normalt vil du have dette slået til.",
+ 'installation:simplecache:label' => "Brug simple cache (anbefalet)",
+
+ 'installation:viewpathcache:description' => "View filepath cache nedsætter loadtiden på plugins ved at cache placeringen af deres visninger.",
+ 'installation:viewpathcache:label' => "Brug view filepath cache (anbefalet)",
+
+ 'upgrading' => 'Opgraderer...',
+ 'upgrade:db' => 'Din database blev opgraderet.',
+ 'upgrade:core' => 'Din elgg installation blev opgraderet.',
+ 'upgrade:unable_to_upgrade' => 'Kunne ikke opgradere.',
+ '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 (tidligere Twitter Service) blev deaktiveret under opgraderingen. Aktiver den venligst manuelt, hvis det kræves.',
+ 'update:oauth_api:deactivated' => 'OAuth API (previously OAuth Lib) blev deaktiveret under opgraderingen. Aktiver den venligst manuelt, hvis det kræves.',
+
+ 'deprecated:function' => '%s() was deprecated by %s()',
+
+/**
+ * Welcome
+ */
+
+ 'welcome' => "Velkommen",
+ 'welcome:user' => 'Velkommen %s',
+
+/**
+* Emails
+*/
+ 'email:settings' => "E-mail",
+ 'email:address:label' => "Din e-mail adresse",
+
+ 'email:save:success' => "Ny e-mail adresse gemt, anmodning om verifikation afsendt.",
+ 'email:save:fail' => "Din nye e-mail adresse kunne ikke gemmes.",
+
+ 'friend:newfriend:subject' => "%s har gjort dig til ven!",
+ 'friend:newfriend:body' => "%s har gjort dig til ven!
+
+For at se deres personlige profil, klik her;
+
+%s
+
+Du kan ikke besvare via denne mail.",
+
+
+
+ 'email:resetpassword:subject' => "Adgangskode ændret!",
+ 'email:resetpassword:body' => "Hej %s,
+
+Dit password er blevet ændret til: %s",
+
+
+ 'email:resetreq:subject' => "Anmodning om en ny adgangskode.",
+ 'email:resetreq:body' => "Hej %s,
+
+Nogen (fra IP adressen %s) har anmodet om en ny adgangskode til deres konto.
+
+Hvis det var dig, der sendte anmodningen så klik på linket nedenfor ellers ignorer denne e-mail.
+
+%s
+",
+
+/**
+* user default access
+*/
+
+ 'default_access:settings' => "Dit standard adgangsniveau",
+ 'default_access:label' => "Standard adgang",
+ 'user:default_access:success' => "Dit nye standard adgangsniveau er gemt.",
+ 'user:default_access:failure' => "Dit nye standard adgangsniveau kunne ikke gemmes.",
+
+/**
+ * XML-RPC
+ */
+ 'xmlrpc:noinputdata' => "Input data mangler",
+
+ /**
+ * Comments
+ */
+
+ 'comments:count' => "%s kommntarer",
+
+ 'riveraction:annotation:generic_comment' => "%s har kommenteret %s",
+
+ 'generic_comments:add' => "Tilføj kommentar",
+ 'generic_comments:post' => "Send kommentar",
+ 'generic_comments:text' => "Kommentar",
+ 'generic_comments:latest' => "Seneste kommentarer",
+ 'generic_comment:posted' => "Din kommentar er blevet tilføjet.",
+ 'generic_comment:deleted' => "Din kommentar er blevet slettet.",
+ 'generic_comment:blank' => "Beklager, men du er nødt til at skrive noget i din kommentar for at vi kan gemme den.",
+ 'generic_comment:notfound' => "Beklager, vi kunne ikke finde det specifikke objekt.",
+ 'generic_comment:notdeleted' => "Beklager, vi kunne ikke slette denne kommentar.",
+ 'generic_comment:failure' => "En uforudset fejl skete ved tilføjelsen af din kommentar. Prøv venligst igen.",
+ 'generic_comment:none' => 'Ingen kommentarer',
+ 'generic_comment:title' => 'Kommenteret af %s',
+
+ 'generic_comment:email:subject' => "Du har en ny kommentar!",
+ 'generic_comment:email:body' => "Du har en ny kommentar til din \"%s\" fra %s. Der står:
+
+
+%s
+
+
+Klik her for at svare eller se det oprindelige emne:
+
+%s
+
+Klik her for at se %s's profil:
+
+%s
+
+Du kan ikke svare via denne mail.",
+
+/**
+* Entities
+*/
+ 'byline' => 'Af %s',
+ 'entity:default:strapline' => "Oprettet %s af %s",
+ 'entity:default:missingsupport:popup' => "Denne enhed kan ikke vises korrekt. Dette kan være fordi det kræver undersøttelse fra et plugin, der ikke længere er installeret.",
+
+ 'entity:delete:success' => "Enheden %s er blevet slettet",
+ 'entity:delete:fail' => "Enheden %s kunne ikke slettes",
+
+/**
+* Action gatekeeper
+*/
+
+ 'actiongatekeeper:missingfields' => "Form mangler __token eller __ts felter",
+ 'actiongatekeeper:tokeninvalid' => "Vi stødte på en fejl (token mismatch). Det betyder formegentlig, at siden du brugte er udløbet. Prøv venligst igen.",
+ 'actiongatekeeper:timeerror' => "Siden du brugte er udløbet. Genopfrisk siden og prøv igen.",
+ 'actiongatekeeper:pluginprevents' => "En udvidelse har forhindret denne form i at blive indsendt.",
+
+
+/**
+* Word blacklists
+*/
+ 'word:blacklist' => "og, den, det, da, men hun, han, hendes, hans, en, et, ikke, også, om, nu, dermed, således, til, stadig, ligesom, derimod, derfor, omvendt, tværtimod, hellere, følge, yderligere, alligevel, imens, derefter, denne, dette, synes, hvem, hvad, hvor, hvornår, hvordan, hvorfor, hvorledes, hvormed",
+
+/**
+* Tag labels
+*/
+
+ 'tag_names:tags' => 'Tags',
+ 'tags:site_cloud' => 'Site Tag Cloud',
+
+/**
+ * Javascript
+ */
+
+ 'js:security:token_refresh_failed' => 'Kan ikke kontakte %s. Du kan muligvis opleve problemer med at gemme indhold.',
+ 'js:security:token_refreshed' => 'Forbindelse med %s genoprettet!',
+
+/**
+* Languages according to ISO 639-1
+*/
+ 'aa' => "Afar",
+ 'ab' => "Abkhasisk",
+ 'af' => "Afrikaans",
+ 'am' => "Amharisk",
+ 'ar' => "Arabisk",
+ 'as' => "Assamesisk",
+ 'ay' => "Aymaransk",
+ 'az' => "Azerbadjansk",
+ 'ba' => "Bashkir",
+ 'be' => "Hviderussisk",
+ 'bg' => "Bulgarsk",
+ 'bh' => "Bihari",
+ 'bi' => "Bislama",
+ 'bn' => "Bengalsk",
+ 'bo' => "Tibetansk",
+ 'br' => "Breton",
+ 'ca' => "Catalansk",
+ 'co' => "Corsicansk",
+ 'cs' => "Tjekkisk",
+ 'cy' => "Walisisk",
+ 'da' => "Dansk",
+ 'de' => "Tysk",
+ 'dz' => "Bhutani",
+ 'el' => "Græsk",
+ 'en' => "Engelsk",
+ 'eo' => "Esperanto",
+ 'es' => "Spansk",
+ 'et' => "Estisk",
+ 'eu' => "Baskisk",
+ 'fa' => "Persisk",
+ 'fi' => "Finsk",
+ 'fj' => "Fiji",
+ 'fo' => "Faeroese",
+ 'fr' => "Fransk",
+ 'fy' => "Frisian",
+ 'ga' => "Irsk",
+ 'gd' => "Skotsk / Gælisk",
+ 'gl' => "Galician",
+ 'gn' => "Guaranisk",
+ 'gu' => "Gujarati",
+ 'he' => "Hebraisk",
+ 'ha' => "Hausa",
+ 'hi' => "Hindi",
+ 'hr' => "Croatisk",
+ 'hu' => "Ungarsk",
+ 'hy' => "Armensk",
+ 'ia' => "Interlingua",
+ 'id' => "Indonesisk",
+ 'ie' => "Interlingue",
+ 'ik' => "Inupiak",
+ //"in" => "Indonesian",
+ 'is' => "Islandsk",
+ 'it' => "Italiensk",
+ 'iu' => "Inuktitut",
+ 'iw' => "Hebraisk (forældet)",
+ 'ja' => "Japansk",
+ 'ji' => "Yiddish (obsolete)",
+ 'jw' => "Javanesisk",
+ 'ka' => "Georgisk",
+ 'kk' => "Kazakh",
+ 'kl' => "Grønlandsk",
+ 'km' => "Khmer",
+ 'kn' => "Kannada",
+ 'ko' => "Koreansk",
+ 'ks' => "Kashmiri",
+ 'ku' => "Kurdisk",
+ 'ky' => "Kirghizisk",
+ 'la' => "Latin",
+ 'ln' => "Lingala",
+ 'lo' => "Laothian",
+ 'lt' => "Lithaunsk",
+ 'lv' => "Lettisk",
+ 'mg' => "Malagasy",
+ 'mi' => "Maori",
+ 'mk' => "Makedonsk",
+ 'ml' => "Malaysisk",
+ 'mn' => "Mongolsk",
+ 'mo' => "Moldovisk",
+ 'mr' => "Marathi",
+ 'ms' => "Malajisk",
+ 'mt' => "Maltesisk",
+ 'my' => "Burmesisk",
+ 'na' => "Naurisk",
+ 'ne' => "Nepalesisk",
+ 'nl' => "Hollandsk",
+ 'no' => "Norsk",
+ 'oc' => "Occitansk",
+ 'om' => "Oromo",
+ 'or' => "Orija",
+ 'pa' => "Punjab",
+ 'pl' => "Polsk",
+ 'ps' => "Afghansk",
+ 'pt' => "Portuguisisk",
+ 'qu' => "Quechua",
+ 'rm' => "Retroromansk",
+ 'rn' => "Kirundi",
+ 'ro' => "Rumænsk",
+ 'ru' => "Russisk",
+ 'rw' => "Kinyarwanda",
+ 'sa' => "Sanskrit",
+ 'sd' => "Sindhi",
+ 'sg' => "Sangro",
+ 'sh' => "Serbokroatisk",
+ 'si' => "Singalesisk",
+ 'sk' => "Slovakisk",
+ 'sl' => "Slovensk",
+ 'sm' => "Samoansk",
+ 'sn' => "Shona",
+ 'so' => "Somalisk",
+ 'sq' => "Albansk",
+ 'sr' => "Serbisk",
+ 'ss' => "Siswati",
+ 'st' => "Sesotho",
+ 'su' => "Sundanesisk",
+ 'sv' => "Svensk",
+ 'sw' => "Swahili",
+ 'ta' => "Tamilsk",
+ 'te' => "Tegulu",
+ 'tg' => "Tajik",
+ 'th' => "Thai",
+ 'ti' => "Tigrinya",
+ 'tk' => "Turkmen",
+ 'tl' => "Tagalog",
+ 'tn' => "Setswana",
+ 'to' => "Tonga",
+ 'tr' => "Tyrkisk",
+ 'ts' => "Tsonga",
+ 'tt' => "Tatar",
+ 'tw' => "Twi",
+ 'ug' => "Uigur",
+ 'uk' => "Ukrainsk",
+ 'ur' => "Urdu",
+ 'uz' => "Uzbek",
+ 'vi' => "Vietnamesisk",
+ 'vo' => "Volapuk",
+ 'wo' => "Wolof",
+ 'xh' => "Xhosa",
+ //"y" => "Yiddish",
+ "yi" => "Yiddish",
+ 'yo' => "Yoruba",
+ 'za' => "Zuang",
+ 'zh' => "Kinesisk",
+ 'zu' => "Zulu"
+);
+
+add_translation("da",$danish);
diff --git a/mod/languages/languages/da/da.profile.php b/mod/languages/languages/da/da.profile.php
new file mode 100644
index 000000000..57d2c0ea3
--- /dev/null
+++ b/mod/languages/languages/da/da.profile.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Profile Danish language file
+ */
+
+$danish = array(
+ 'profile' => "Profil",
+ 'profile:notfound' => "Beklager, vi kunne ikke finde den ønskede profil.",
+
+
+);
+
+add_translation("da",$danish);
diff --git a/mod/languages/languages/da/da.reportedcontent.php b/mod/languages/languages/da/da.reportedcontent.php
new file mode 100644
index 000000000..7368c7869
--- /dev/null
+++ b/mod/languages/languages/da/da.reportedcontent.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Reported content Danish language file
+ *
+ */
+
+
+$danish = array(
+
+ 'item:object:reported_content' => 'Rapporterede poster',
+ 'admin:utilities:reportedcontent' => 'Rapporteret indhold',
+ 'reportedcontent' => 'Rapporteret indhold',
+ 'reportedcontent:this' => 'Rapporter dette',
+ 'reportedcontent:this:tooltip' => 'Rapporter denne side til en administrator',
+ 'reportedcontent:none' => 'Der er ikke noget rapporteret indhold',
+ 'reportedcontent:report' => 'Rapporter til administrationen',
+ 'reportedcontent:title' => 'Sidetitel',
+ 'reportedcontent:deleted' => 'Det rapporterede indhold er blevet slettet',
+ 'reportedcontent:notdeleted' => 'Vi kunne ikke slette denne rapport',
+ 'reportedcontent:delete' => 'Slet den',
+ 'reportedcontent:areyousure' => 'Er du sikker på at du vil slette?',
+ 'reportedcontent:archive' => 'Arkiver den',
+ 'reportedcontent:archived' => 'Rapporten er blevet arkiveret',
+ 'reportedcontent:visit' => 'Se rapporteret post',
+ 'reportedcontent:by' => 'Rapport af',
+ 'reportedcontent:objecttitle' => 'Side titel',
+ 'reportedcontent:objecturl' => 'Side Url',
+ 'reportedcontent:reason' => 'Begrundelse for rapport',
+ 'reportedcontent:description' => 'Hvorfor rapporterer du dette?',
+ 'reportedcontent:address' => 'Placering af emnet',
+ 'reportedcontent:success' => 'Din rapport er blevet sendt til administrationen',
+ 'reportedcontent:failing' => 'Din rapport kunne ikke sendes',
+ 'reportedcontent:report' => 'Rapporter dette',
+ 'reportedcontent:moreinfo' => 'Mere information',
+ 'reportedcontent:instructions' => 'Denne rapport vil blive sendt til administratorer af dette websted til gennemsyn.',
+ 'reportedcontent:numbertodisplay' => 'Antal rapporter, der skal vises',
+ 'reportedcontent:widget:description' => 'Vis rapporteret indhold',
+ 'reportedcontent:user' => 'Rapporter bruger',
+
+ 'reportedcontent:failed' => 'Beklager, forsøget på at rapportere dette indhold fejlede.',
+ 'reportedcontent:notarchived' => 'Vi kunne ikke arkivere denne rapport',
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.river_activity_3C.php b/mod/languages/languages/da/da.river_activity_3C.php
new file mode 100644
index 000000000..b237c8215
--- /dev/null
+++ b/mod/languages/languages/da/da.river_activity_3C.php
@@ -0,0 +1,142 @@
+<?php
+
+ /*
+ * 3 Column River Acitivity
+ *
+ * @package ElggRiverDash
+ * Full Creadit goes to ELGG Core Team for creating a beautiful social networking script
+ *
+ * Modified by Satheesh PM, BARC, Mumbai, India..
+ * http://satheesh.anushaktinagar.net
+ *
+ * @author ColdTrick IT Solutions
+ * @copyright Coldtrick IT Solutions 2009
+ * @link http://www.coldtrick.com/
+ * @version 1.0
+ *
+ */
+
+
+
+$danish = array(
+
+ 'river_activity_3C:birthdays' => 'Fødselsdage',
+ 'river_activity_3C:birthdays-no' => 'Du har ikke konfigureret fødselsdags boksen endnu',
+ 'river_activity_3C:today' => 'Fødselsdage i dag',
+ 'river_activity_3C:tomorrow' => 'Fødselsdage i morgen',
+ 'river_activity_3C:upcoming' => 'Fødselsdage snart',
+
+ 'river_activity_3C:wire' => 'Del dine tanker med alle andre',
+
+ 'river_activity_3C:featured' => 'Anbefalede grupper',
+ 'river_activity_3C:featured-no' => 'Der er ingen anbefalede grupper',
+ 'river_activity_3C:groupsmember' => 'Dine grupper',
+ 'river_activity_3C:groupsmember-no' => 'Du er endnu ikke medlem af nogen grupper',
+ 'river_activity_3C:newgroups' => 'Seneste grupper',
+ 'river_activity_3C:newgroups-no' => 'Der er ingen grupper oprettet endnu',
+ 'river_activity_3C:join' => 'Bliv medlem af gruppen',
+
+ 'river_activity_3C:friends' => 'Dine venner',
+ 'river_activity_3C:friends-no' => 'Du har ingen venner endnu',
+ 'river_activity_3C:friendsonline' => 'Venner online',
+ 'river_activity_3C:friendsonline-no' => 'Der er ingen venner online',
+ 'river_activity_3C:addfriends' => 'Tilføj venner',
+ 'river_activity_3C:invite' => 'Inviter venner',
+
+ 'river_activity_3C:file' => 'Seneste Filer',
+ 'river_activity_3C:file-no' => 'Der er ingen filer',
+
+ 'river_activity_3C:blog' => 'Seneste blogs',
+ 'river_activity_3C:blog-no' => 'Der er ingen blogs',
+
+
+ 'river_activity_3C:page' => 'Seneste sider',
+ 'river_activity_3C:page-no' => 'Der er ingen sider',
+
+ 'river_activity_3C:bookmark' => 'Seneste bogmærker',
+ 'river_activity_3C:bookmark-no' => 'Der er ingen bogmærker',
+
+ 'river_activity_3C:online' => 'Online Medlemmer',
+ 'river_activity_3C:newestmembers' => 'Sidste medlemmer',
+
+ 'river_activity_3C:horoscope' => 'Din dag i dag',
+ 'river_activity_3C:system_message' => 'Vigtige beskeder',
+
+ 'river_activity_3C:viewmore' => 'Vis mere',
+
+ 'river_activity_3C:site_status' => 'Du har endnu ikke skrevet startdatoen på din side.',
+ 'river_activity_3C:part1' => ' er gået siden starten af vores ',
+ 'river_activity_3C:part2' => ' side og har ',
+ 'river_activity_3C:part3' => ' aktive brugere og vores medlemstal er nu oppe på ',
+ 'river_activity_3C:year' => ' år, ',
+ 'river_activity_3C:month' => ' måneder, ',
+ 'river_activity_3C:day' => ' dage, ',
+ 'river_activity_3C:hour' => ' timer, ',
+ 'river_activity_3C:minute' => ' minuter og ',
+ 'river_activity_3C:second' => ' sekunder ',
+
+ 'river_activity_3C:setting' => ' Indstillinger',
+ 'river_activity_3C:invitation' => ' Gruppe adgang',
+ 'river_activity_3C:discussions' => ' Discussioner',
+ 'river_activity_3C:members' => ' Medlemmer',
+ 'river_activity_3C:friendrequest' => ' Ven anmodning',
+ 'river_activity_3C:inbox' => ' Indbakke',
+ 'river_activity_3C:bookmarks' => ' Bogmærker',
+ 'river_activity_3C:messageboard' => ' Beskeder',
+ 'river_activity_3C:editavatar' => ' Nyt profilbillede',
+ 'river_activity_3C:invites' => ' Inviter venner',
+ 'river_activity_3C:editprofile' => ' Ændre profil',
+ 'river_activity_3C:welcome' => ' Velkommen tilbage',
+ 'river_activity_3C:birthdaywish' => ' Tillykke med din fødselsdag i dag!',
+ 'river_activity_3C:membersince' => 'Medlem siden',
+ 'river_activity_3C:lastlogin' => 'Sidst logged ind',
+
+ 'river_activity_3C:featured' => 'Anbefalet',
+ 'river_activity_3C:info' => 'Info',
+ 'river_activity_3C:aside' => 'Aside',
+ 'river_activity_3C:popup' => 'Pop Up',
+ 'river_activity_3C:icon' => 'Icon View',
+ 'river_activity_3C:list' => 'List View',
+
+ 'river_activity_3C:number' => 'How many number items you want to show ',
+ 'river_activity_3C:yes' => 'Yes',
+ 'river_activity_3C:no' => 'No',
+ 'river_activity_3C:riverbox' => 'Select a view for the 3 Column River Activity Page River Boxes',
+ 'river_activity_3C:status' => 'Show the site status in 3 Column River Activity Page',
+ 'river_activity_3C:startdate' => 'Select the start date of the site ',
+ 'river_activity_3C:showbookamrk' => 'Show the latest Bookmarks in 3 Column River Activity Page',
+ 'river_activity_3C:files' => 'Show the latest Files in 3 Column River Activity Page',
+ 'river_activity_3C:blogs' => 'Show the latest Blogs in 3 Column River Activity Page',
+ 'river_activity_3C:pages' => 'Show the latest Pages in 3 Column River Activity Page',
+ 'river_activity_3C:featuredgroup' => 'Show the Featured Groups in 3 Column River Activity Page',
+ 'river_activity_3C:latestgroup' => 'Show the latest Groups in 3 Column River Activity Page',
+ 'river_activity_3C:groupmem' => 'Show Groups where you are a member in 3 Column River Activity Page',
+ 'river_activity_3C:resentmem' => 'Show recent Members of site in 3 Column River Activity Page',
+ 'river_activity_3C:showfriends' => 'Show Friends in 3 Column River Activity Page',
+ 'river_activity_3C:birthday' => 'Show Birthdays of Members in 3 Column River Activity Page',
+ 'river_activity_3C:bdaypar' => 'Enter the name of profile field that corresponds to Birth Date of Members in Profile Manager',
+ 'river_activity_3C:viewbday' => 'Select a view type for Birth of Members',
+ 'river_activity_3C:wireform' => 'Show wire form in 3 Column River Activity Page',
+ 'river_activity_3C:showhoro' => 'Show horoscope in 3 Column River Activity Page',
+ 'river_activity_3C:onlinemem' => 'Show Online Members in 3 Column River Activity Page',
+ 'river_activity_3C:onlinefriends' => 'Show online friends in 3 Column River Activity Page',
+ 'river_activity_3C:profile' => 'Show profile avatar and links in in 3 Column River Activity Page',
+ 'river_activity_3C:sysmsg' => 'Show System Message in 3 Column River Activity Page',
+ 'river_activity_3C:sysmsgext' => 'Do you want to extend the system messages to Side Bar',
+ 'river_activity_3C:sysmsgtxt' => 'Enter your System Messages below',
+ 'river_activity_3C:sysmsginfo' => 'Each of your Site Message should be between a &lt;div title=""&gt; &lt;/div&gt; HTML tag like &lt;div title="number/name"&gt; Your message Here &lt;/div&gt;<br />If your adding a java script in between the div tag then first disable the <b>HTMLawed 1.5</b> plugin and then add the script and save the settings<br />After saving remember to enable the <b>HTMLawed 1.5</b> plugin.',
+ 'river_activity_3C:support' => '<b><font color="red">I don\'t want either donations or credits for this plugin. Only thing I want is a recommendation in the ELGG Community Site, which cost you nothing. If this plugin is useful for you, Please do a recommendation for this plugin in community and hence you are helping other members to find and download this plugin. Thank You.</font><br /><a href="http://community.elgg.org/pg/plugins/project/844663/developer/thuvalpakshi/3-column-river-activity" target="_blank"><b>Click to do a Recommendation for this Plugin</b></a></b>',
+ 'river_activity_3C:thankyou' => 'Thank you very much for downloading 3 Column River Activity. Your Comments and Suggestions are always welcome. You are always free to contact Me for any Help and modification.Thank you.<br /><a href="http://satheesh.anushaktinagar.net" target="_blank"><b>Click to visit my Personal site</b></a>',
+
+ 'river_activity_3C:actbook' => 'Bookmark plugin is not activated',
+ 'river_activity_3C:actfile' => 'File plugin is not activated',
+ 'river_activity_3C:actblog' => 'Blog plugin is not activated',
+ 'river_activity_3C:actpage' => 'Pages plugin is not activated',
+ 'river_activity_3C:actgroup' => 'Group plugin is not activated',
+ 'river_activity_3C:actmem' => 'Members plugin is not activated',
+ 'river_activity_3C:actprofile' => 'Profile Manager plugin is not activated',
+ 'river_activity_3C:actwire' => 'The Wire plugin is not activated',
+
+ );
+
+add_translation("da", $danish); \ No newline at end of file
diff --git a/mod/languages/languages/da/da.roles_group_admins.php b/mod/languages/languages/da/da.roles_group_admins.php
new file mode 100644
index 000000000..1c601d812
--- /dev/null
+++ b/mod/languages/languages/da/da.roles_group_admins.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Group Admin roles plugin language pack
+ *
+ */
+
+$danish = array(
+
+ 'roles_group_admins:role:title' => 'Gruppe administrator',
+ 'roles_group_admins:action:make_group_admin' => 'Giv administrator rettigheder',
+ 'roles_group_admins:action:revoke_group_admin' => 'Fjern administrator rettighederne',
+
+ 'roles_group_admins:action:make_group_admin:success' => 'Gruppe administrator rettighederne er godkendt for bruger %s',
+ 'roles_group_admins:action:make_group_admin:failure' => 'Kunne ikke give administrator rettigheder for bruger',
+ 'roles_group_admins:action:revoke_group_admin:success' => 'Gruppe administrator rettighederne er fjernet for bruger %s',
+ 'roles_group_admins:action:revoke_group_admin:failure' => 'Kunne ikke fjerne administrator rettigheder fra bruger',
+
+);
+
+add_translation("da", $danish);
diff --git a/mod/languages/languages/da/da.search.php b/mod/languages/languages/da/da.search.php
new file mode 100644
index 000000000..27d554012
--- /dev/null
+++ b/mod/languages/languages/da/da.search.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Search Danish language file
+ *
+ */
+
+$danish = array(
+ 'search:enter_term' => 'Indtast et søgeord:',
+ 'search:no_results' => 'Ingen resultater...',
+ 'search:matched' => 'Match: ',
+ 'search:results' => 'Resultater for %s',
+ 'search:no_query' => 'Vær venlig at indtaste noget at søge efter.',
+ 'search:search_error' => 'Fejl',
+
+ 'search:more' => '+%s flere %s',
+
+ 'search_types:tags' => 'Tags',
+
+ 'search_types:comments' => 'Kommentarer',
+ 'search:comment_on' => 'Kommentér "%s"',
+ 'search:comment_by' => 'af',
+ 'search:unavailable_entity' => 'Utilgængelig søgeterm',
+);
+
+add_translation("da",$danish);
diff --git a/mod/languages/languages/da/da.tagcloud.php b/mod/languages/languages/da/da.tagcloud.php
new file mode 100644
index 000000000..a67823a91
--- /dev/null
+++ b/mod/languages/languages/da/da.tagcloud.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Tag cloud Danish language file
+ */
+
+$danish = array(
+ 'tagcloud:widget:title' => 'Tag Cloud',
+ 'tagcloud:widget:description' => 'Tag cloud',
+ 'tagcloud:widget:numtags' => 'Antal tags, der skal vises',
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.tasks.php b/mod/languages/languages/da/da.tasks.php
new file mode 100644
index 000000000..d008b8c5c
--- /dev/null
+++ b/mod/languages/languages/da/da.tasks.php
@@ -0,0 +1,144 @@
+<?php
+/**
+ * Tasks languages
+ *
+ * @package ElggTasks
+ */
+
+$danish = array(
+
+ /**
+ * Menu items and titles
+ */
+
+ 'tasks' => "Opgaver",
+ 'tasks:owner' => "%s's opgaver",
+ 'tasks:friends' => "Venners' opgaver",
+ 'tasks:all' => "Klubbens opgaver",
+ 'tasks:add' => "Ny opgave",
+
+ 'tasks:group' => "Gruppe opgaver",
+ 'groups:enabletasks' => 'Aktiver gruppe opgaver',
+
+ 'tasks:edit' => "Ændre opgave",
+ 'tasks:delete' => "Slet opgave",
+ 'tasks:history' => "Historik",
+ 'tasks:view' => "Vis opgave",
+ 'tasks:revision' => "Revision",
+
+ 'tasks:navigation' => "Navigation",
+ 'tasks:via' => "via opgaver",
+ 'item:object:task_top' => 'Top-niveau opgaver',
+ 'item:object:task' => 'Opgaver',
+ 'tasks:nogroup' => 'Denne gruppe har endnu ingen opgaver',
+ 'tasks:more' => 'Flere opgaver',
+ 'tasks:none' => 'Ingen opgaver lige nu',
+
+ /**
+ * River
+ **/
+
+ 'river:create:object:task' => '%s oprettet en opgave %s',
+ 'river:create:object:task_top' => '%s oprettet en opgave %s',
+ 'river:update:object:task' => '%s opdateret en opgave %s',
+ 'river:update:object:task_top' => '%s opdateret en opgave %s',
+ 'river:comment:object:task' => '%s kommenter på en opgave %s',
+ 'river:comment:object:task_top' => '%s kommenter på en opgave %s',
+
+ /**
+ * Form fields
+ */
+
+ 'tasks:title' => 'Opgaver titel',
+ 'tasks:description' => 'Opgave tekst',
+ 'tasks:tags' => 'Tags',
+ 'tasks:access_id' => 'Læse adgang',
+ 'tasks:write_access_id' => 'Skrive adgang',
+
+ /**
+ * Status and error messages
+ */
+ 'tasks:noaccess' => 'Ingen adgang til opgaver',
+ 'tasks:cantedit' => 'Du kan ikke ændre denne opgave',
+ 'tasks:saved' => 'Opgave gemt',
+ 'tasks:notsaved' => 'Opgaven kunne ikke gemmes',
+ 'tasks:error:no_title' => 'Du skal vælge en titel til opgaven.',
+ 'tasks:delete:success' => 'Opgaven hermed slettet.',
+ 'tasks:delete:failure' => 'Opgaven kunne ikke slettes.',
+
+ /**
+ * Task
+ */
+ 'tasks:strapline' => 'Sidst opdateret %s af %s',
+
+ /**
+ * History
+ */
+ 'tasks:revision:subtitle' => 'Revision lavet %s af %s',
+
+ /**
+ * Widget
+ **/
+
+ 'tasks:num' => 'Antallet af opgaver vist',
+ 'tasks:widget:description' => "Dette er en liste med dine opgaver.",
+
+ /**
+ * Submenu items
+ */
+ 'tasks:label:view' => "Vis opgave",
+ 'tasks:label:edit' => "Ændre opgave",
+ 'tasks:label:history' => "Opgave historik",
+
+ /**
+ * Sidebar items
+ */
+ 'tasks:sidebar:this' => "Denne opgave",
+ 'tasks:sidebar:children' => "Under-opgaver",
+ 'tasks:sidebar:parent' => "Over opgave",
+
+ 'tasks:newchild' => "Ny under-opgave",
+ 'tasks:backtoparent' => "Tilbage til '%s'",
+
+
+
+ 'tasks:start_date' => "Start",
+ 'tasks:end_date' => "Slut",
+ 'tasks:percent_done' => " færdig",
+ 'tasks:work_remaining' => "Tilbage.",
+
+
+ 'tasks:task_type' => 'Type',
+ 'tasks:status' => 'Status',
+ 'tasks:assigned_to' => 'Opgave ejer',
+
+ 'tasks:task_type_'=>"",
+ 'tasks:task_type_0'=>"",
+ 'tasks:task_type_1'=>"Analyse",
+ 'tasks:task_type_2'=>"Specifikationer",
+ 'tasks:task_type_3'=>"Udvikling",
+ 'tasks:task_type_4'=>"Test",
+ 'tasks:task_type_5'=>"Event",
+
+ 'tasks:task_status_'=>"",
+ 'tasks:task_status_0'=>"",
+ 'tasks:task_status_1'=>"Åbnet",
+ 'tasks:task_status_2'=>"Aktiveret",
+ 'tasks:task_status_3'=>"På hold",
+ 'tasks:task_status_4'=>"I gang",
+ 'tasks:task_status_5'=>"Lukket",
+
+ 'tasks:task_percent_done_'=>"0%",
+ 'tasks:task_percent_done_0'=>"0%",
+ 'tasks:task_percent_done_1'=>"20%",
+ 'tasks:task_percent_done_2'=>"40%",
+ 'tasks:task_percent_done_3'=>"60%",
+ 'tasks:task_percent_done_4'=>"80%",
+ 'tasks:task_percent_done_5'=>"100%",
+
+ 'tasks:tasksboard'=>"Opgave tavle",
+ 'tasks:tasksmanage'=>"Styring",
+ 'tasks:tasksmanageone'=>"Styre en opgave",
+);
+
+add_translation("da", $danish); \ No newline at end of file
diff --git a/mod/languages/languages/da/da.thewire.php b/mod/languages/languages/da/da.thewire.php
new file mode 100644
index 000000000..944eff6e1
--- /dev/null
+++ b/mod/languages/languages/da/da.thewire.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * The Wire Danish language file
+ */
+
+$danish = array(
+
+/**
+ * Menu items and titles
+ */
+ 'thewire' => "The wire",
+ 'thewire:everyone' => "Alle wire indlæg",
+ 'thewire:user' => "%s's wire indlæg",
+ 'thewire:friends' => 'Dine venner på the wire',
+ 'thewire:reply' => "Svar",
+ 'thewire:replying' => "Svar til %s (@%s) som skrev",
+ 'thewire:thread' => "Tråd",
+ 'thewire:charleft' => "tegn tilbage",
+ 'thewire:tags' => "Wire indlæg tagged med '%s'",
+ 'thewire:noposts' => "Ingen wire indlæg endnu",
+ 'item:object:thewire' => "Wire indlæg",
+ 'thewire:update' => 'Opdater',
+
+ 'thewire:previous' => "Tidligere",
+ 'thewire:hide' => "Gem",
+ 'thewire:previous:help' => "Se tidligere indlæg",
+ 'thewire:hide:help' => "Gem tidligere indlæg",
+
+ /**
+ * The wire river
+ */
+ 'river:create:object:thewire' => "%s skrev til %s",
+ 'thewire:wire' => 'wire',
+
+/**
+ * Wire widget
+ **/
+ 'thewire:widget:desc' => 'Vis dine seneste wire indlæg',
+ 'thewire:num' => 'Antal indlæg der skal vises',
+ 'thewire:moreposts' => 'Ikke flere wire indlæg',
+
+/**
+ * Status messages
+ */
+ 'thewire:posted' => "Dit indlæg blev postet til the wire.",
+ 'thewire:deleted' => "Dit wire indlæg er blevet slettet.",
+ 'thewire:blank' => "Beklager, du skal skrive noget i tekstboksen, før det kan gemmes.",
+ 'thewire:notfound' => "Beklager, vi kunne ikke finde det specificerede wire indlæg.",
+ 'thewire:notdeleted' => "Beklager, vi kunne ikke slette dette wire indlæg.",
+
+ /**
+ * Notifications
+ */
+ 'thewire:notify:subject' => "Nyt wire indlæg",
+ 'thewire:notify:reply' => '%s svarede på %s på the wire:',
+ 'thewire:notify:post' => '%s skrev på the wire:',
+
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.tidypics.php b/mod/languages/languages/da/da.tidypics.php
new file mode 100644
index 000000000..78113d467
--- /dev/null
+++ b/mod/languages/languages/da/da.tidypics.php
@@ -0,0 +1,190 @@
+<?php
+/**
+* Elgg tidypics plugin danish language pack
+*
+*/
+
+
+$danish = array(
+
+ // Menu items and titles
+ 'image' => "Billede",
+ 'images' => "Billeder",
+ 'caption' => "Beskrivelse",
+ 'photos' => "Fotos",
+ 'album' => "Fotoalbum",
+ 'albums' => "Fotoalbums",
+ 'album:slideshow' => "Se slideshow",
+ 'album:yours' => "Dine Fotoalbums",
+ 'album:yours:friends' => "Dine venners fotoalbums",
+ 'album:user' => "%s's Fotoalbums",
+ 'album:friends' => "%s's venners fotoalbum",
+ 'album:all' => "Alle Fotoalbums",
+ 'album:group' => "Gruppe-Fotoalbum",
+ 'item:object:image' => "Fotos",
+ 'item:object:album' => "Album",
+ 'tidypics:uploading:images' => "Billederne er uploadet",
+ 'tidypics:enablephotos' => 'Skift gruppealbum',
+ 'tidypics:editprops' => 'Rediger billede',
+ 'tidypics:mostcommented' => 'Mest kommenterede',
+ 'tidypics:mostcommentedthismonth' => 'Mest kommenterede i denne måned',
+ 'tidypics:mostcommentedtoday' => 'Mest kommenterede i dag',
+ 'tidypics:mostviewed' => 'Mest besøgte billeder',
+ 'tidypics:mostvieweddashboard' => 'Mest besøgte instrumentpanel',
+ 'tidypics:mostviewedthisyear' => 'Mest besøgte i år',
+ 'tidypics:mostviewedthismonth' => 'Mest besøgte i denne måned',
+ 'tidypics:mostviewedlastmonth' => 'Mest besøgte sidste måned',
+ 'tidypics:mostviewedtoday' => 'Set flest gange i dag',
+ 'tidypics:recentlyviewed' => 'Senest viste billeder',
+ 'tidypics:recentlycommented' => 'Senest kommenterede billeder',
+ 'tidypics:mostrecent' => 'Nyeste billeder ifællesskabet',
+ 'tidypics:yourmostviewed' => 'Dine mest sete',
+ 'tidypics:yourmostrecent' => 'Sidst uploaded',
+ 'tidypics:friendmostviewed' => "%s's mest sete",
+ 'tidypics:friendmostrecent' => "%s's seneste billeder ",
+ 'tidypics:highestrated' => "Højest bedømte billeder",
+ 'tidypics:viewsbyowner' => "Visninger: %s af %s medlemmer (ikke inklusive dig selv)",
+ 'tidypics:viewsbyothers' => "Visninger: %s (%s af dig)",
+ 'tidypics:administration' => 'Tidypics administration',
+ 'tidypics:stats' => 'Statistik',
+ 'tidypics:upgrade' => 'Opgrader',
+ 'tidypics:sort' => 'Sortér %s album',
+
+ //settings
+ 'tidypics:settings' => 'Indstillinger',
+ 'tidypics:settings:server:analysis' => 'Kør server analyse',
+ 'tidypics:admin:instructions' => 'Dette er de centrale Tidypics indstillinger. Tilpas dem til din opsætning og klik derefter på Gem.',
+ 'tidypics:settings:image_lib' => "Foto arkiv: ",
+ 'tidypics:settings:download_link' => "Vis download-link",
+ 'tidypics:settings:tagging' => "Tillad fotolinks",
+ 'tidypics:settings:photo_ratings' => "Tillad karakterergivning af foto (kræver plugin af Miguel Montes eller andet kompatibelt plugin)",
+ 'tidypics:settings:exif' => "Vis EXIF data",
+ 'tidypics:settings:view_count' => "Vis tæller",
+ 'tidypics:settings:grp_perm_override' => "Giv gruppens medlemmer fuld adgang til gruppe-album",
+ 'tidypics:settings:maxfilesize' => "Maksimal billedstørrelse i megabytes (MB):",
+ 'tidypics:settings:quota' => "Tildelt plads til brugere / grupper (MB) (0 = Ingen plads)",
+ 'tidypics:settings:watermark' => "Indtast teksten for vandmærke - ImageMagick cmdline skal vælges for billedbiblioteket",
+ 'tidypics:settings:im_path' => "Angiv stien til ImageMagick kommandoer (som slutter med et Slash/)",
+ 'tidypics:settings:img_river_view' => "Hvor mange poster i aktivitetslisten for hvert parti af uploadede billeder",
+ 'tidypics:settings:album_river_view' => "Vis albumcover eller et sæt af fotos til nye album",
+ 'tidypics:settings:largesize' => "Størrelse på billede",
+ 'tidypics:settings:smallsize' => "Tumbnailstørrelse på album",
+ 'tidypics:settings:thumbsize' => "Thumbnailstørrelse på billede",
+
+
+ //actions
+ 'album:create' => "Skab album",
+ 'album:add' => "Tilføj nyt album",
+ 'album:addpix' => "Tilføj fotos",
+ 'album:edit' => "Rediger album",
+ 'album:delete' => "Slet album",
+ 'album:sort' => "Sortér album",
+ 'image:edit' => "Rediger billede",
+ 'image:delete' => "Slet billede",
+ 'image:download' => "Download billede",
+
+ //forms
+ 'album:title' => "Titel",
+ 'album:desc' => "Beskrivelse",
+ 'album:tags' => "Nøgleord",
+ 'album:cover' => "Billedet skal bruges som albumcover",
+ 'tidypics:quota' => "Plads:",
+ 'tidypics:uploader:choose' => "Vælg fotos",
+ 'tidypics:uploader:upload' => "Upload fotos",
+ 'tidypics:uploader:describe' => "Beskriv fotos",
+ 'tidypics:uploader:instructs' => 'Med tre nemme trin kan du tilføje fotos i dit album ved hjælp af denne uploader: vælg, upload og beskriv fotos. Hvis du ikke har Flash, er der også en <a href="%s">standard uploader</a> til rådighed.',
+ 'tidypics:uploader:basic' => 'Du kan uploade op til 10 fotos ad gangen (%s MB maksimum pr. foto)',
+ 'tidypics:sort:instruct' => 'Sortér fotos i albummet ved hjælp af drag and drop. Klik derefter på knappen Gem.',
+
+ //views
+ 'image:total' => "Billeder i album:",
+ 'image:by' => "Billede tilføjet af",
+ 'album:by' => "Album oprettet af:",
+ 'album:created:on' => "Oprettet",
+ 'image:none' => "Ingen billeder tilføjet.",
+ 'image:back' => "Forrige",
+ 'image:next' => "Næste",
+
+ // tagging
+ 'tidypics:taginstruct' => 'Vælg et område på billedet, som du ønsker at linke',
+ 'tidypics:deltag_title' => 'Vælg at slette links',
+ 'tidypics:finish_tagging' => 'Annuller',
+ 'tidypics:tagthisphoto' => 'Tilføj link til foto',
+ 'tidypics:deletetag' => 'Slet foto link',
+ 'tidypics:actiontag' => 'Link',
+ 'tidypics:actiondelete' => 'Slet',
+ 'tidypics:actioncancel' => 'Annuller',
+ 'tidypics:inthisphoto' => 'Links i billedet',
+ 'tidypics:usertag' => "Foto links til medlem %s",
+ 'tidypics:phototagging:success' => 'Foto link tilføjet',
+ 'tidypics:phototagging:error' => 'Uventet fejl ved linket',
+ 'tidypics:deletetag:success' => 'Udvalgte links er blevet fjernet',
+
+
+ //rss
+ 'tidypics:posted' => 'Billedet indstilles individuelt:',
+
+ //widgets
+ 'tidypics:widget:albums' => "Fotoalbum",
+ 'tidypics:widget:album_descr' => "Viser seneste album",
+ 'tidypics:widget:num_albums' => "Antal albums",
+ 'tidypics:widget:latest' => "Nyeste billeder",
+ 'tidypics:widget:latest_descr' => "Vis seneste billeder",
+ 'tidypics:widget:num_latest' => "Antal billeder",
+ 'album:more' => "Vis alle albums",
+
+ //river
+ 'image:river:created' => "%s har tilføjet et billede %s i album %s",
+ 'image:river:created:multiple' => "%s added %u photos to album %s",
+ 'image:river:item' => "et billede",
+ 'image:river:annotate' => "en kommentar til billedet",
+ 'image:river:tagged' => "%s tagged %s in the photo %s",
+ 'image:river:tagged:unknown' => "%s tagged %s in a photo",
+ 'album:river:created' => "%s har tilføjet et nyt album",
+ 'album:river:group' => "i gruppen",
+ 'album:river:item' => "et album",
+ 'album:river:annotate' => "en kommentar til albummet",
+
+ //notifications
+ 'tidypics:newalbum' => 'Nye Fotoalbum',
+
+
+ // Status messages
+ 'tidypics:upl_success' => "Billedet er uploadet med succes",
+ 'image:saved' => "Billedet blev gemt",
+ 'images:saved' => "Alle billeder er gemt",
+ 'image:deleted' => "Billedet blev slettet",
+ 'image:delete:confirm' => "Ønsker du at slette dette billede?",
+ 'images:edited' => "Billedet er blevet opdateret",
+ 'album:edited' => "Albummet er blevet opdateret",
+ 'album:saved' => "Albummet blev gemt",
+ 'album:deleted' => "Albummet er blevet slettet",
+ 'album:delete:confirm' => "Ønsker du at slette dette album?",
+ 'album:created' => "Deres nye album er skabt",
+ 'tidypics:settings:save:ok' => 'Tidypics Indstillingerne er gemt',
+ 'tidypics:album:sorted' => 'Albummet %s er sorteret',
+ 'tidypics:upgrade:success' => 'Tidypics blev opgraderet med succes',
+
+ //Error messages
+ 'tidypics:partialuploadfailure' => "Der opstod en fejl under uploadingen af billeder (%s af %s billeder)",
+ 'tidypics:completeuploadfailure' => "Upload af billede mislykkedes",
+ 'tidypics:exceedpostlimit' => "Alt for mange store billeder på én gang - forsøg evt. at overføre færre eller mindre billeder",
+ 'tidypics:noimages' => "Ingen billeder udvalgt til upload",
+ 'tidypics:image_mem' => "Billedet er for stort",
+ 'tidypics:image_pixels' => "Billedet har for mange pixels",
+ 'tidypics:unk_error' => "Ukendt fejl opstod under upload",
+ 'tidypics:save_error' => "Ukendt fejl opstod, da billedet skulle gemmes på serveren",
+ 'tidypics:not_image' => "Type af billede kan ikke genkendes",
+ 'image:deletefailed' => "Dit billede kunne ikke slettes",
+ 'image:downloadfailed' => "Fejl: Billedet er ikke tilgængeligt i øjeblikket",
+ 'tidypics:nosettings' => "Administratoren af webstedet, har ikke foretaget justeringer for fotoalbum",
+ 'tidypics:exceed_quota' => "Din tildelte plads er opbrugt!",
+ 'images:notedited' => "Ikke alle billeder er blevet opdateret",
+ 'album:none' => "Ingen albums skabt endnu",
+ 'album:uploadfailed' => "Dit album kunne ikke gemmes",
+ 'album:deletefailed' => "Dit album kunne ikke slettes",
+ 'album:blank' => "Giv venligst dette album en titel samt beskrivelse",
+ 'tidypics:upgrade:failed' => "Opgraderingen af Tidypics mislykkedes",
+);
+
+add_translation("da", $danish); \ No newline at end of file
diff --git a/mod/languages/languages/da/da.tinymce.php b/mod/languages/languages/da/da.tinymce.php
new file mode 100644
index 000000000..db051c1ef
--- /dev/null
+++ b/mod/languages/languages/da/da.tinymce.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * TinyMCE Danish language file
+ *
+ */
+
+$danish = array(
+ 'tinymce:remove' => "Fjern editor",
+ 'tinymce:add' => "Tilføj editor",
+ 'tinymce:word_count' => 'Ord tæller: ',
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.twitter.php b/mod/languages/languages/da/da.twitter.php
new file mode 100644
index 000000000..ffbe86f17
--- /dev/null
+++ b/mod/languages/languages/da/da.twitter.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Twitter widget Danish language file
+ */
+
+$danish = array(
+
+ 'twitter:title' => 'Twitter',
+ 'twitter:info' => 'Vis dine seneste tweets',
+ 'twitter:username' => 'Skriv dit twitter brugernavn.',
+ 'twitter:num' => 'Antal tweets du vil vise.',
+ 'twitter:visit' => 'Besøg mig på twitter',
+ 'twitter:notset' => 'Denne twitter widget er ikke indstillet endnu. Klik på \'rediger\' og udfyld dine detaljer, for at vise dine seneste tweets.',
+
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.twitter_api.php b/mod/languages/languages/da/da.twitter_api.php
new file mode 100644
index 000000000..e8a79b588
--- /dev/null
+++ b/mod/languages/languages/da/da.twitter_api.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * An Danish language definition file
+ */
+
+$danish = array(
+ 'twitter_api' => 'Twitter Services',
+
+ 'twitter_api:requires_oauth' => 'Twitter Services kræver at OAuth Libraries plugin er aktiveret.',
+
+ 'twitter_api:consumer_key' => 'Consumer Key',
+ 'twitter_api:consumer_secret' => 'Consumer Secret',
+
+ 'twitter_api:settings:instructions' => 'Du skal indhente en Consumer Key og Consumer Secret fra <a href="https://dev.twitter.com/apps/new" target="_blank">Twitter</a>. Udfyld den nye app ansøgning. Vælg "Browser" som ansøgningstype og "Read & Write" som adgangstype. Callback url er %stwitter_api/authorize',
+
+ 'twitter_api:usersettings:description' => "Link din %s konto med Twitter.",
+ 'twitter_api:usersettings:request' => "Du skal først <a href=\"%s\">autorisere</a> %s for at få adgang til din Twitter konto.",
+ 'twitter_api:authorize:error' => 'Kunne ikke autorisere Twitter.',
+ 'twitter_api:authorize:success' => 'Twitter adgang er blevet autoriseret.',
+
+ 'twitter_api:usersettings:authorized' => "Du har autoriseret %s til at tilgå din Twitter konto: @%s.",
+ 'twitter_api:usersettings:revoke' => 'Klik <a href="%s">her</a> for at tilbagekalde adgangstilladelse.',
+ 'twitter_api:revoke:success' => 'Twitter adgang er blevet tilbagekaldt.',
+
+ 'twitter_api:login' => 'Tillad de eksisterende brugere, der har forbundet deres Twitter konto, at logge ind med Twitter?',
+ 'twitter_api:new_users' => 'Tillad nye brugere at tilmelde sig ved hjælp af deres Twitter konto, selvom brugerregistrering er deaktiveret?',
+ 'twitter_api:login:success' => 'Du er blevet logget ind.',
+ 'twitter_api:login:error' => 'Kunne ikke logge ind med Twitter.',
+ 'twitter_api:login:email' => "Du skal indtaste en gyldig e-mail adresse til din nye %s konto.",
+
+ 'twitter_api:deprecated_callback_url' => 'Callback URL\'en er ændret for Twitter API til %s. Bed din administrator om at ændre det.',
+
+);
+
+add_translation('da',$danish);
diff --git a/mod/languages/languages/da/da.uservalidationbyemail.php b/mod/languages/languages/da/da.uservalidationbyemail.php
new file mode 100644
index 000000000..ffbdc349d
--- /dev/null
+++ b/mod/languages/languages/da/da.uservalidationbyemail.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Email user validation Danish language file
+ *
+ */
+
+
+$danish = array(
+ 'admin:users:unvalidated' => 'Ikke bekræftet',
+
+ 'email:validate:subject' => "%s vær venlig at bekræfte din e-mail adresse for %s!",
+ 'email:validate:body' => "Hej %s,
+
+Før du kan begynde at bruge %s, skal du bekræfte din e-mail adresse.
+
+Vær venlig at bekræfte din e-mail adresse ved at klikke på linket herunder:
+
+%s
+
+Hvis du ikke kan klikke på linket så kopier og indsæt det i din browser manuelt.
+
+%s
+%s
+",
+ 'email:confirm:success' => "Du har bekræftet din e-mail adresse!",
+ 'email:confirm:fail' => "Din e-mail adresse kunne ikke bekræftes...",
+
+ 'uservalidationbyemail:registerok' => "Aktiver venligst din konto ved at bekræfte din e-mail adresse i det link vi lige har sendt til dig.",
+ 'uservalidationbyemail:login:fail' => "Din konto er ikke valideret så log ind forsøget mislykkedes. En ny validerings e-mail er blevet sendt.",
+
+ 'uservalidationbyemail:admin:no_unvalidated_users' => 'Ingen ikke validerede brugere.',
+
+ 'uservalidationbyemail:admin:unvalidated' => 'Ikke valideret',
+ 'uservalidationbyemail:admin:user_created' => 'Registrerede %s',
+ 'uservalidationbyemail:admin:resend_validation' => 'Gensend validering',
+ 'uservalidationbyemail:admin:validate' => 'Valider',
+ 'uservalidationbyemail:admin:delete' => 'Slet',
+ 'uservalidationbyemail:confirm_validate_user' => 'Valider %s?',
+ 'uservalidationbyemail:confirm_resend_validation' => 'Gensend validerings e-mail til %s?',
+ 'uservalidationbyemail:confirm_delete' => 'Slet %s?',
+ 'uservalidationbyemail:confirm_validate_checked' => 'Valider markerede brugere?',
+ 'uservalidationbyemail:confirm_resend_validation_checked' => 'Gensend validering til markerede brugere?',
+ 'uservalidationbyemail:confirm_delete_checked' => 'Slet markerede brugere?',
+ 'uservalidationbyemail:check_all' => 'Alle',
+
+ 'uservalidationbyemail:errors:unknown_users' => 'Ukendte brugere',
+ 'uservalidationbyemail:errors:could_not_validate_user' => 'Kunne ikke validate bruger.',
+ 'uservalidationbyemail:errors:could_not_validate_users' => 'Kunne ikke validere alle markerede brugere.',
+ 'uservalidationbyemail:errors:could_not_delete_user' => 'Kunne ikke slette bruger.',
+ 'uservalidationbyemail:errors:could_not_delete_users' => 'Kunne ikke slette alle markerede brugere.',
+ 'uservalidationbyemail:errors:could_not_resend_validation' => 'Kunne ikke gensende anmodning om validering.',
+ 'uservalidationbyemail:errors:could_not_resend_validations' => 'Kunne ikke gensende alle anmodninger om validering til markerede brugere.',
+
+ 'uservalidationbyemail:messages:validated_user' => 'Bruger valideret.',
+ 'uservalidationbyemail:messages:validated_users' => 'Alle markerede brugere validerede.',
+ 'uservalidationbyemail:messages:deleted_user' => 'Bruger slettet.',
+ 'uservalidationbyemail:messages:deleted_users' => 'Alle markerede brugere slettet.',
+ 'uservalidationbyemail:messages:resent_validation' => 'Anmodning om validering gensendt.',
+ 'uservalidationbyemail:messages:resent_validations' => 'Anmodning om validering gensendt til alle markerede brugere.'
+
+);
+
+add_translation("da",$danish);
diff --git a/mod/languages/languages/de/de.blog.php b/mod/languages/languages/de/de.blog.php
new file mode 100644
index 000000000..00e03a1c3
--- /dev/null
+++ b/mod/languages/languages/de/de.blog.php
@@ -0,0 +1,50 @@
+<?php
+$de = array (
+ 'blog' => 'Blogs',
+ 'blog:blogs' => 'Blogs',
+ 'blog:revisions' => 'Revisionen',
+ 'blog:archives' => 'Ältere Blogs',
+ 'blog:blog' => 'Blog',
+ 'item:object:blog' => 'Blogs',
+ 'blog:title:user_blogs' => 'Blogs von %s',
+ 'blog:title:all_blogs' => 'Alle Blogs der Community',
+ 'blog:title:friends' => 'Blogs Deiner Freunde',
+ 'blog:group' => 'Gruppen-Blog',
+ 'blog:enableblog' => 'Gruppen-Blog aktivieren',
+ 'blog:write' => 'Einen Blog-Eintrag verfassen',
+ 'blog:add' => 'Blog-Eintrag verfassen',
+ 'blog:edit' => 'Blog-Eintrag editieren',
+ 'blog:excerpt' => 'Auszug',
+ 'blog:body' => 'Blogtext',
+ 'blog:save_status' => 'Zuletzt gespeichert: ',
+ 'blog:never' => 'Nie',
+ 'blog:status' => 'Status',
+ 'blog:status:draft' => 'Entwurf',
+ 'blog:status:published' => 'Veröffentlicht',
+ 'blog:status:unsaved_draft' => 'Nicht-gespeicherter Entwurf',
+ 'blog:revision' => 'Revision',
+ 'blog:auto_saved_revision' => 'Automatisch gespeicherte Revision',
+ 'blog:message:saved' => 'Dein Blog-Eintrag wurde gespeichert.',
+ 'blog:error:cannot_save' => 'Dein Blog-Eintrag konnte nicht gespeichert werden.',
+ 'blog:error:cannot_write_to_container' => 'Keine ausreichenden Zugriffsrechte zum Speichern des Blog-Eintrags im Gruppenblog vorhanden.',
+ 'blog:error:post_not_found' => 'Dieser Blog-Eintrag wurde entweder gelöscht oder der Link zum Eintrag ist ungültig oder Du hast nicht die notwendigen Zugriffsrechte, um darauf zuzugreifen.',
+ 'blog:messages:warning:draft' => 'Die Entwurfsversion dieses Eintrags wurde nocht nicht gespeichert!',
+ 'blog:edit_revision_notice' => '(Alte Revision)',
+ 'blog:message:deleted_post' => 'Dein Blog-Eintrag wurde gelöscht.',
+ 'blog:error:cannot_delete_post' => 'Der Blog-Eintrag konnte nicht gelöscht werden.',
+ 'blog:none' => 'Keine Blog-Einträge vorhanden.',
+ 'blog:error:missing:title' => 'Bitte einen Titel für Deinen Blog-Eintrag angeben!',
+ 'blog:error:missing:description' => 'Bitte gebe den Text Deines Blog-Eintrages ein!',
+ 'blog:error:cannot_edit_post' => 'Dieser Blog-Eintrag scheint nicht vorhanden zu sein oder Du hast möglicherweise nicht die notwendigen Zugriffrechte, um ihn zu editieren.',
+ 'blog:error:revision_not_found' => 'Diese Revision ist nicht verfügbar.',
+ 'river:create:object:blog' => '%s veröffentlichte den Blog-Eintrag %s',
+ 'river:comment:object:blog' => '%s kommentierte den Blog-Eintrag %s',
+ 'blog:newpost' => 'Ein neuer Blog-Eintrag',
+ 'blog:widget:description' => 'Dieses Widget zeigt Deine neuesten Blogs an.',
+ 'blog:moreblogs' => 'Weitere Blog-Einträge',
+ 'blog:numbertodisplay' => 'Anzahl der anzuzeigenden Blog-Einträge',
+ 'blog:noblogs' => 'Keine Blog-Einträge vorhanden.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.bookmarks.php b/mod/languages/languages/de/de.bookmarks.php
new file mode 100644
index 000000000..99ae4e647
--- /dev/null
+++ b/mod/languages/languages/de/de.bookmarks.php
@@ -0,0 +1,46 @@
+<?php
+$de = array (
+ 'bookmarks' => 'Lesezeichen',
+ 'bookmarks:add' => 'Lesezeichen hinzufügen',
+ 'bookmarks:edit' => 'Lesezeichen editieren',
+ 'bookmarks:owner' => 'Lesezeichen von %s',
+ 'bookmarks:friends' => 'Lesezeichen Deiner Freunde',
+ 'bookmarks:everyone' => 'Alle Lesezeichen der Community',
+ 'bookmarks:this' => 'Lesezeichen für diese Seite hinzufügen',
+ 'bookmarks:this:group' => 'Lesezeichen in %s setzen',
+ 'bookmarks:bookmarklet' => 'Bookmarklet zum Browser hinzufügen',
+ 'bookmarks:bookmarklet:group' => 'Gruppen-Bookmarklet zum Browser hinzufügen',
+ 'bookmarks:inbox' => 'Lesezeichen-Inbox',
+ 'bookmarks:morebookmarks' => 'Weitere Lesezeichen',
+ 'bookmarks:more' => 'Weitere Lesezeichen',
+ 'bookmarks:with' => 'Teile das Lesezeichen mit',
+ 'bookmarks:new' => 'Ein neues Lesezeichen',
+ 'bookmarks:address' => 'Zieladresse des Lesezeichens',
+ 'bookmarks:none' => 'Noch keine Lesezeichen vorhanden.',
+ 'bookmarks:delete:confirm' => 'Bist Du sicher, dass Du dieses Lesezeichen löschen willst?',
+ 'bookmarks:numbertodisplay' => 'Anzahl der anzuzeigenden Lesezeichen-Einträge.',
+ 'bookmarks:shared' => 'Lesezeichen gesetzt',
+ 'bookmarks:visit' => 'Gehe zu dieser Seite',
+ 'bookmarks:recent' => 'Neuesten Lesezeichen',
+ 'river:create:object:bookmarks' => '%s hat das Lesezeichen %s hinzugefügt.',
+ 'river:comment:object:bookmarks' => '%s kommentierte das Lesezeichen %s',
+ 'bookmarks:river:annotate' => 'einen Kommentar zum Lesezeichen',
+ 'bookmarks:river:item' => 'einen Eintrag',
+ 'item:object:bookmarks' => 'Lesezeichen',
+ 'bookmarks:group' => 'Gruppen-Lesezeichen',
+ 'bookmarks:enablebookmarks' => 'Gruppen-Lesezeichen aktivieren',
+ 'bookmarks:nogroup' => 'Diese Gruppe hat noch keine Lesezeichen.',
+ 'bookmarks:no_title' => 'Kein Titel',
+ 'bookmarks:widget:description' => 'Dieses Widget zeigt Deine neuesten Lesezeichen an.',
+ 'bookmarks:bookmarklet:description' => 'Das Lesezeichen-Bookmarklet ermöglicht es Dir, alle interessanten Web-Addressen mit Deinen Freunden zu teilen oder auch nur für Dich selbst ein Lesezeichen zu setzen. Um das Bookmarklet zu verwenden, ziehe den folgenden Button einfach in die Lesezeichen-Leiste Deines Browsers:',
+ 'bookmarks:bookmarklet:descriptionie' => 'Wenn Du den Internet Explorer verwendest, klicke mit der rechten Maustaste auf das Bookmarklet-Icon, wähle \'Zu Favoriten hinzufügen\' und dann die Lesezeichen-Leiste.',
+ 'bookmarks:bookmarklet:description:conclusion' => 'Du kannst dann ein Lesezeichen für eine Seite setzen, indem Du auf das Bookmarklet in der Lesezeichen-Leiste des Browsers klickst.',
+ 'bookmarks:save:success' => 'Für den Eintrag wurde ein Lesezeichen gesetzt.',
+ 'bookmarks:delete:success' => 'Das Lesezeichen wurde gelöscht.',
+ 'bookmarks:save:failed' => 'Das Lesezeichen konnte nicht gespeichert werden. Bitte gebe einen Titel und eine Zieladresse an und versuche es noch einmal.',
+ 'bookmarks:save:invalid' => 'Die Adresse des Lesezeichens ist ungültig und kann nicht gespeichert werden.',
+ 'bookmarks:delete:failed' => 'Das Lesezeichen konnte nicht gelöscht werden. Versuche es bitte noch einmal.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.categories.php b/mod/languages/languages/de/de.categories.php
new file mode 100644
index 000000000..afbc0b2cd
--- /dev/null
+++ b/mod/languages/languages/de/de.categories.php
@@ -0,0 +1,12 @@
+<?php
+$de = array (
+ 'categories' => 'Kategorien',
+ 'categories:settings' => 'Seiten-Kategorien einrichten',
+ 'categories:explanation' => 'Um einige Kategorien festzulegen, die für die gesamte Community-Seite benutzt werden, gebe sie bitte im folgenden mit Komma getrennt ein. Kompatible Tools werden die Kategorien dann anzeigen, wenn Mitglieder Einträge erzeugen oder editieren.',
+ 'categories:save:success' => 'Seiten-Kategorien wurden gespeichert.',
+ 'categories:results' => 'Treffer für die Seiten-Kategorie: %s',
+ 'categories:on_activate_reminder' => 'Die seitenübergreifenden Kategorien sind erst verwendbar, nachdem Kategorien hinzugefügt wurden. <a href="%s">Kategorien jetzt hinzufügen.</a>',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.core.php b/mod/languages/languages/de/de.core.php
new file mode 100644
index 000000000..591842862
--- /dev/null
+++ b/mod/languages/languages/de/de.core.php
@@ -0,0 +1,969 @@
+<?php
+$de = array (
+ 'item:site' => 'Seiten',
+ 'login' => 'Anmelden',
+ 'loginok' => 'Du bist nun angemeldet.',
+ 'loginerror' => 'Die Anmeldung ist fehlgeschlagen. Bitte prüfe, ob Deine Eingaben für die Anmeldung richtig sind und versuche es noch einmal.',
+ 'login:empty' => 'Benutzername/Email-Adresse und Passwort müssen eingegeben werden.',
+ 'login:baduser' => 'Dein Benutzeraccount ist nicht verfügbar.',
+ 'auth:nopams' => 'Interner Fehler. Keine Methode zur Benutzerauthentifizierung installiert.',
+ 'logout' => 'Abmelden',
+ 'logoutok' => 'Du bist nun abgemeldet.',
+ 'logouterror' => 'Wir konnten Dich nicht abmelden. Bitte versuche es noch einmal.',
+ 'loggedinrequired' => 'Du mußt angemeldet sein, um diese Seite aufrufen zu können.',
+ 'adminrequired' => 'Du mußt ein Administrator sein, um diese Seite aufrufen zu können.',
+ 'membershiprequired' => 'Du mußt Mitglied dieser Gruppe sein, um diese Seite aufrufen zu können.',
+ 'exception:title' => 'Schwerwiegender Fehler.',
+ 'actionundefined' => 'Die angeforderte Aktion (%s) ist im System nicht definiert.',
+ 'actionnotfound' => 'Die Datei für die Ausführung der Aktion %s wurde nicht gefunden.',
+ 'actionloggedout' => 'Entschuldigung, Du kannst diese Aktion nicht ausführen während Du nicht angemeldet bist.',
+ 'actionunauthorized' => 'Du bist nicht authorisiert, diese Aktion auszuführen',
+ 'InstallationException:SiteNotInstalled' => 'Die angeforderte Seite kann nicht geladen werden. Die Community-Seite ist nicht konfiguriert oder die zugehörige Datenbank ist nicht verfügbar.',
+ 'InstallationException:MissingLibrary' => '%s kann nicht geladen werden.',
+ 'InstallationException:CannotLoadSettings' => 'Elgg kann die konfigurationsdatei settings.php nicht laden. Entweder existiert die Datei nicht oder der Zugriff ist aufgrund fehlender Zugriffsrechte blockiert.',
+ 'SecurityException:Codeblock' => 'Zugriff auf die Ausführung des privilegierten Codeabschnittes verweigert.',
+ 'DatabaseException:WrongCredentials' => 'Elgg konnte mit den gegebenen Verbindungsparametern keine Verbindung zur Datenbank herstellen. Bitte prüfe die Konfiguration in settings.pgp.',
+ 'DatabaseException:NoConnect' => 'Elgg konnte keine Verbindung mit der Datenbank \'%s\' herstellen. Bitte prüfe, ob die Datenbank erzeugt wurde und Du die Rechte hast, um auf sie zuzugreifen.',
+ 'SecurityException:FunctionDenied' => 'Zugriff auf die privilegierte Funktion \'%s\' verweigert.',
+ 'DatabaseException:DBSetupIssues' => 'Einige Probleme sind aufgetreten: ',
+ 'DatabaseException:ScriptNotFound' => 'Elgg konnte das angeforderte Datenbankskript %s nicht finden.',
+ 'DatabaseException:InvalidQuery' => 'Unzulässige Datenbank-Query.',
+ 'IOException:FailedToLoadGUID' => 'Das Laden der neuen Form %s von GUID ist gescheitert:%d',
+ 'InvalidParameterException:NonElggObject' => 'Übergabe eines unzulässigen ElggObjects an einen ElggObject-Konstruktor!',
+ 'InvalidParameterException:UnrecognisedValue' => 'Unbekannter Wert einen einen Konstruktor übergeben.',
+ 'InvalidClassException:NotValidElggStar' => 'GUID:%d ist kein zulässiger %s',
+ 'PluginException:MisconfiguredPlugin' => '%s (GUID: %s) ist ein falsch konfiguriertes Plugin. Es wurde deaktiviert. Im Elgg-Wiki sind einige mögliche Ursachen für das Problem beschrieben (http://docs.elgg.org/wiki/).',
+ 'PluginException:CannotStart' => '%s (GUID: %s) kann nicht gestartet werden und wurde deaktiviert. Ursache: %s.',
+ 'PluginException:InvalidID' => '%s ist eine ungültig Plugin-ID.',
+ 'PluginException:InvalidPath' => '%s ist ungültiger Plugin-Dateipfad.',
+ 'PluginException:InvalidManifest' => 'Ungültige Manifest-Datei für das Plugin %s.',
+ 'PluginException:InvalidPlugin' => '%s ist kein zulässiges Plugin.',
+ 'PluginException:InvalidPlugin:Details' => '%s ist kein zulässiges Plugin: %s',
+ 'PluginException:NullInstantiated' => 'Ein ElggPlugin-Objekt kann nicht mit NULL instanziiert werden. Es muss eine GUID, eine Plugin-ID oder ein vollständiger Dateipfad übergeben werden.',
+ 'ElggPlugin:MissingID' => 'Fehlende Plugin-ID (GUID: %s)',
+ 'ElggPlugin:NoPluginPackagePackage' => 'Das zugehörige Plugin-Paket für die Plugin-ID %s (GUID: %s) fehlt.',
+ 'ElggPluginPackage:InvalidPlugin:MissingFile' => 'Fehlende Datei %s im Paket.',
+ 'ElggPluginPackage:InvalidPlugin:InvalidDependency' => 'Ungültiger Dependency-Typ "%s".',
+ 'ElggPluginPackage:InvalidPlugin:InvalidProvides' => 'Ungültiger Provides-Typ "%s"',
+ 'ElggPluginPackage:InvalidPlugin:CircularDep' => 'Ungültige %s-Abhängigkeit "%s" im Plugin %s. Plugins können nicht mit etwas in Konflikt stehen oder etwas voraussetzen, das sie selbst bereitstellen!',
+ 'ElggPlugin:Exception:CannotIncludeFile' => 'Einbindung von %s für Plugin %s (GUID: %s) an %s gescheitert.',
+ 'ElggPlugin:Exception:CannotRegisterViews' => 'Öffnen des Views-Verzeichnis für Plugin %s (GUID: %s) an %s gescheitert.',
+ 'ElggPlugin:Exception:CannotRegisterLanguages' => 'Einbinden der Sprachen für Plugin %s (GUID: %s) an %s gescheitert.',
+ 'ElggPlugin:Exception:NoID' => 'Keine ID für Plugin-GUID %s!',
+ 'PluginException:ParserError' => 'Das Parsen der Manifest-Datei mit API-Version %s des Plugins %s ist fehlgeschlagen.',
+ 'PluginException:NoAvailableParser' => 'Es steht kein Parser für die Manifest-API-Version %s des Plugins %s zur Verfügung.',
+ 'PluginException:ParserErrorMissingRequiredAttribute' => 'Fehlendes Required-\'%s\'-Attribut in der Manifest-Datei des Plugins %s.',
+ 'ElggPlugin:Dependencies:Requires' => 'Benötigt',
+ 'ElggPlugin:Dependencies:Suggests' => 'Schlägt vor',
+ 'ElggPlugin:Dependencies:Conflicts' => 'Im Konflikt mit',
+ 'ElggPlugin:Dependencies:Conflicted' => 'Im Konflikt mit',
+ 'ElggPlugin:Dependencies:Provides' => 'Stellt bereit',
+ 'ElggPlugin:Dependencies:Priority' => 'Priorität',
+ 'ElggPlugin:Dependencies:Elgg' => 'Elgg-Version',
+ 'ElggPlugin:Dependencies:PhpExtension' => 'PHP-Erweiterung: %s',
+ 'ElggPlugin:Dependencies:PhpIni' => 'PHP ini-Einstellung: %s',
+ 'ElggPlugin:Dependencies:Plugin' => 'Plugin: %s',
+ 'ElggPlugin:Dependencies:Priority:After' => 'Nach %s',
+ 'ElggPlugin:Dependencies:Priority:Before' => 'Vor %s',
+ 'ElggPlugin:Dependencies:Priority:Uninstalled' => '%s ist nicht installiert.',
+ 'ElggPlugin:Dependencies:Suggests:Unsatisfied' => 'Fehlt',
+ 'ElggPlugin:InvalidAndDeactivated' => '%s ist ein unzulässiges Plugin und wurde deaktiviert.',
+ 'InvalidParameterException:NonElggUser' => 'Übergabe eines unzulässigen ElggUsers-Objekts an einen ElggUser-Konstruktor!',
+ 'InvalidParameterException:NonElggSite' => 'Übergabe einer unzulässigen ElggSite-Objekts an einen ElggSite-Konstruktor!',
+ 'InvalidParameterException:NonElggGroup' => 'Übergabe einer unzulässigen ElggGroup-Objekts an einen ElggGroup-Konstruktor!',
+ 'IOException:UnableToSaveNew' => 'Speichern der neuen %s war nicht erfolgreich.',
+ 'InvalidParameterException:GUIDNotForExport' => 'GUID wurde beim Exportieren nicht spezifiziert. Das sollte normalerweise nicht passieren.',
+ 'InvalidParameterException:NonArrayReturnValue' => 'Der Entitäts-Serialisierungs-Funktion wurde ein Rückgabewert übergeben, der nicht als Feld definiert ist.',
+ 'ConfigurationException:NoCachePath' => 'Der Pfad des Cache ist nicht gesetzt!',
+ 'IOException:NotDirectory' => '%s ist kein Verzeichnis.',
+ 'IOException:BaseEntitySaveFailed' => 'Das Speichern der Basis-Entitäts-Informationen für das neue Objekt ist gescheitert!',
+ 'InvalidParameterException:UnexpectedODDClass' => 'Eine nicht erwartete ODD Klasse wurde von import() verarbeitet.',
+ 'InvalidParameterException:EntityTypeNotSet' => 'Der Typ der Entität muß gesetzt sein.',
+ 'ClassException:ClassnameNotClass' => '%s ist kein %s.',
+ 'ClassNotFoundException:MissingClass' => 'Die Klasse \'%s\' wurde nicht gefunden. Fehlendes Plugin?',
+ 'InstallationException:TypeNotSupported' => 'Typ %s wird nicht unterstützt. Dies weist auf ein Problem in Deiner Installation hin, höchst wahrscheinlich verursacht durch ein unvollständig durchgeführtes Upgrade.',
+ 'ImportException:ImportFailed' => 'Element %d konnte nicht importiert werden.',
+ 'ImportException:ProblemSaving' => 'Beim Speichern von %s ist ein Problem aufgetreten.',
+ 'ImportException:NoGUID' => 'Es wurde eine neue Entität erzeugt, aber sie hat keine GUID. Das sollte nicht passieren.',
+ 'ImportException:GUIDNotFound' => 'Entität \'%d\' konnte nicht gefunden werden.',
+ 'ImportException:ProblemUpdatingMeta' => 'Beim Updaten von \'%s\' der Entität \'%d\' ist ein Problem aufgetreten.',
+ 'ExportException:NoSuchEntity' => 'Die Entität (GUID:%d) ist nicht vorhanden.',
+ 'ImportException:NoODDElements' => 'Keine OpenDD Elemente in den Importdaten gefunden. Das Importieren ist gescheitert.',
+ 'ImportException:NotAllImported' => 'Es konnten nicht alle Elemente importiert werden.',
+ 'InvalidParameterException:UnrecognisedFileMode' => 'Unbekannter Dateimodus \'%s\'',
+ 'InvalidParameterException:MissingOwner' => 'Datei %s (Datei-GUID:%d) (Besitzer-GUID:%d) hat keinen Besitzer!',
+ 'IOException:CouldNotMake' => '%s war nicht möglich.',
+ 'IOException:MissingFileName' => 'Du mußt einen Namen angeben bevor Du eine Datei öffnen kannst.',
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => 'Filestore-Klasse %s für Datei %u konnte nicht geladen werden.',
+ 'NotificationException:NoNotificationMethod' => 'Es wurde keine Benachrichtigungsmethode festgelegt.',
+ 'NotificationException:NoHandlerFound' => 'Es wurde kein Handler für \'%s\' gefunden oder der Handler konnte nicht aufgerufen werden.',
+ 'NotificationException:ErrorNotifyingGuid' => 'Bei der Benachrichtigung von %d ist ein Fehler aufgetreten.',
+ 'NotificationException:NoEmailAddress' => 'Für GUID:%d konnte keine Email-Adresse gefunden werden.',
+ 'NotificationException:MissingParameter' => 'Notwendiger Parameter fehlt, \'%s\'',
+ 'DatabaseException:WhereSetNonQuery' => 'Der Where-Satz enthält eine ungültige Where-Query-Komponente.',
+ 'DatabaseException:SelectFieldsMissing' => 'Fehlende Felder bei einer Select Style-Query.',
+ 'DatabaseException:UnspecifiedQueryType' => 'Unbekannter oder unspezifizierter Query-Typ.',
+ 'DatabaseException:NoTablesSpecified' => 'Es wurden keine Tablellen für die Query angegeben.',
+ 'DatabaseException:NoACL' => 'Für die Query wurde keine Zugangskontrolle definiert.',
+ 'InvalidParameterException:NoEntityFound' => 'Die Entität konnte nicht gefunden werden. Entweder existiert sie nicht oder Du darfst auf sie nicht zugreifen.',
+ 'InvalidParameterException:GUIDNotFound' => 'GUID:%s konnte nicht gefunden werden oder Du darfst darauf nicht zugreifen.',
+ 'InvalidParameterException:IdNotExistForGUID' => 'Entschuldigung, \'%s\' ist für GUID:%d nicht vorhanden.',
+ 'InvalidParameterException:CanNotExportType' => 'Entschuldigung, wir wissen nicht wie \'%s\' exportiert werden kann.',
+ 'InvalidParameterException:NoDataFound' => 'Es konnten keine Daten gefunden werden.',
+ 'InvalidParameterException:DoesNotBelong' => 'Gehört nicht zur Entität.',
+ 'InvalidParameterException:DoesNotBelongOrRefer' => 'Gehört nicht zur Entität oder zum Verweis auf die Entität.',
+ 'InvalidParameterException:MissingParameter' => 'Fehlender Parameter. Du mußt eine GUID angeben.',
+ 'InvalidParameterException:LibraryNotRegistered' => '%s ist keine eingebundene Library.',
+ 'InvalidParameterException:LibraryNotFound' => 'Die Library %s von %s konnte nicht geladen werden.',
+ 'APIException:ApiResultUnknown' => 'Der Typ der API-Rückgabe ist unbekannt. Das sollte nicht passieren.',
+ 'ConfigurationException:NoSiteID' => 'Es wurde keine Site-ID angegeben.',
+ 'SecurityException:APIAccessDenied' => 'Entschuldigung, der API-Zugriff wurde durch den Administrator deaktiviert.',
+ 'SecurityException:NoAuthMethods' => 'Eine konnte keine Authentifizierungs-Methode gefunden werden, um diesen API-Zugriff zu authentifizieren.',
+ 'SecurityException:ForwardFailedToRedirect' => 'Die Weiterleitung kann nicht durchgeführt werden, da der Seiten-Header bereits gesendet wurde. Die Ausführung wird sicherheitshalber gestoppt. Bitte gehe zu http://docs.elgg.org/ für weitere Informationen.',
+ 'InvalidParameterException:APIMethodOrFunctionNotSet' => 'Die Methode oder Funktion wurde im Aufruf in expose_method() nicht gesetzt.',
+ 'InvalidParameterException:APIParametersArrayStructure' => 'Die Parameter-Feldstruktur im Aufruf von Expose-Methode \'%s\' ist falsch.',
+ 'InvalidParameterException:UnrecognisedHttpMethod' => 'Unbekannte Http-Methode %s für API-Mmethode \'%s\'',
+ 'APIException:MissingParameterInMethod' => 'Fehlender Parameter %s in Methode %s',
+ 'APIException:ParameterNotArray' => '%s scheint kein Feld zu sein.',
+ 'APIException:UnrecognisedTypeCast' => 'Unbekannter Typ in Cast %s für Variable \'%s\' in Methode \'%s\'',
+ 'APIException:InvalidParameter' => 'Ungültiger Parameter für \'%s\' in Methode \'%s\' gefunden.',
+ 'APIException:FunctionParseError' => '%s(%s) ergab einen Parsing-Fehler.',
+ 'APIException:FunctionNoReturn' => '%s(%s) lieferte keinen Rückgabewert.',
+ 'APIException:APIAuthenticationFailed' => 'Beim Aufruf der Methode schlug die API-Authentifizierung fehl.',
+ 'APIException:UserAuthenticationFailed' => 'Beim Aufruf der Methode schlug die Benutzer-Authentifizierung fehl.',
+ 'SecurityException:AuthTokenExpired' => 'Entweder fehlt das Authentifizierungs-Token, es ist ungültig oder abgelaufen.',
+ 'CallException:InvalidCallMethod' => '%s muß unter Verwendung von \'%s\' aufgerufen werden.',
+ 'APIException:MethodCallNotImplemented' => 'Der Methoden-Aufruf \'%s\' ist nicht implementiert.',
+ 'APIException:FunctionDoesNotExist' => 'Die Funktion für die Methode \'%s\' kann nicht aufgerufen werden.',
+ 'APIException:AlgorithmNotSupported' => 'Algorithmus \'%s\' wird nicht unterstützt oder wurde deaktiviert.',
+ 'ConfigurationException:CacheDirNotSet' => 'Das Cache-Verzeichnis \'cache_path\' wurde nicht gesetzt.',
+ 'APIException:NotGetOrPost' => 'Die Anfrage-Methode muß GET oder POST sein.',
+ 'APIException:MissingAPIKey' => 'Fehlender API-Schlüssel',
+ 'APIException:BadAPIKey' => 'Ungültiger API-Schlüssel',
+ 'APIException:MissingHmac' => 'Fehlender X-Elgg-hmac Header',
+ 'APIException:MissingHmacAlgo' => 'Fehlender X-Elgg-hmac-algo Header',
+ 'APIException:MissingTime' => 'Fehlender X-Elgg-time Header',
+ 'APIException:MissingNonce' => 'Fehlender X-Elgg-nonce Header',
+ 'APIException:TemporalDrift' => 'Epoch-Fehler: X-Elgg-time liegt zu weit in der Vergangenheit oder Zukunft.',
+ 'APIException:NoQueryString' => 'Fehlende Daten im Query-String',
+ 'APIException:MissingPOSTHash' => 'Fehlender X-Elgg-posthash Header',
+ 'APIException:MissingPOSTAlgo' => 'Fehlender X-Elgg-posthash_algo Header',
+ 'APIException:MissingContentType' => 'Content Typ für POST-Daten fehlt',
+ 'SecurityException:InvalidPostHash' => 'POST-Daten-Hash ist ungültig - Erwartet wurde %s aber %s erhalten.',
+ 'SecurityException:DupePacket' => 'Packet-Signatur ist schon von früher bekannt.',
+ 'SecurityException:InvalidAPIKey' => 'Ungültiger oder fehlender API-Schlüssel.',
+ 'NotImplementedException:CallMethodNotImplemented' => 'Der Methoden-Aufruf \'%s\' wird derzeit nicht unterstützt.',
+ 'NotImplementedException:XMLRPCMethodNotImplemented' => 'Der XML-RPC Methoden-Aufruf \'%s\' ist nicht implementiert.',
+ 'InvalidParameterException:UnexpectedReturnFormat' => 'Der Aufruf der Methode \'%s\' lieferte eine unerwartete Rückgabe.',
+ 'CallException:NotRPCCall' => 'Der Aufruf scheint kein zulässiger XML-RPC Aufruf zu sein.',
+ 'PluginException:NoPluginName' => 'Der Name des Plugins wurde nicht gefunden.',
+ 'SecurityException:authenticationfailed' => 'Der Benutzer konnte nicht authentifiziert werden',
+ 'CronException:unknownperiod' => '%s ist ein unbekanntes Zeitintervall.',
+ 'SecurityException:deletedisablecurrentsite' => 'Du kannst die Site-Installation nicht löschen oder deaktivieren, während Du Dich darauf befindest!',
+ 'RegistrationException:EmptyPassword' => 'Die Passwort-Felder dürfen nicht leer sein',
+ 'RegistrationException:PasswordMismatch' => 'Die Passwörter müssen übereinstimmen',
+ 'LoginException:BannedUser' => 'Dein Benutzeraccount auf dieser Seite wurde gesperrt. Du kannst Dich daher nicht anmelden.',
+ 'LoginException:UsernameFailure' => 'Die Anmeldung ist fehlgeschlagen. Bitte prüfe, ob Benutzername/Email-Adresse und Passwort richtig sind.',
+ 'LoginException:PasswordFailure' => 'Die Anmeldung ist fehlgeschlagen. Bitte prüfe, ob Benutzername/Email-Adresse und Passwort richtig sind.',
+ 'LoginException:AccountLocked' => 'Dein Benutzeraccount wurde aufgrund zu vieler fehlgeschlagener Anmeldeversuche gesperrt.',
+ 'LoginException:ChangePasswordFailure' => 'Die Überprüfung des derzeitigen Passworts ist fehlgeschlagen.',
+ 'memcache:notinstalled' => 'Das PHP-Memcache-Modul ist nicht installiert. Due mußt php5-memcache installieren.',
+ 'memcache:noservers' => 'Es wurden keine Memcache-Server definiert. Weise der Variablen $CONFIG->memcache_servers bitte etwas zu.',
+ 'memcache:versiontoolow' => 'Memcache setzt zum Betrieb mindestens Version %s voraus. Du benutzt Version %s.',
+ 'memcache:noaddserver' => 'Mehr-Server-Unterstützung ist deaktiviert. Du mußt möglicherweise Deine PECL-Memcache-Library upgraden.',
+ 'deprecatedfunction' => 'Warnung: Dieser Code verwendet die veraltete Funktion \'%s\' und ist mit dieser Version von Elgg nicht kompatibel.',
+ 'pageownerunavailable' => 'Warnung: Der Seiten-Eigentümer %d ist nicht erreichbar!',
+ 'viewfailure' => 'In der View %s ist ein interner Fehler aufgetreten.',
+ 'changebookmark' => 'Bitte ändere Dein Lesezeichen für diese Seite.',
+ 'noaccess' => 'Dieser Seiteninhalt wurde entweder gelöscht oder ist fehlerhaft oder Du hast keine ausreichende Berechtigungen, um darauf zuzugreifen.',
+ 'error:default' => 'Hoppla...irgendetwas ist schiefgegangen.',
+ 'error:404' => 'Entschuldigung. Die gewünschte Seite konnte nicht gefunden werden.',
+ 'system.api.list' => 'Liste alle im System verfügbaren API-Aufrufe auf.',
+ 'auth.gettoken' => 'Dieser API-Aufruf ermöglicht es einem Benutzer ein Authetifizierungs-Token zu beziehen, das für die Authentifizierung nachfolgender API-Aufrufe verwendet werden kann. Übergebe es als Parameter auth_token.',
+ 'name' => 'Name',
+ 'email' => 'Email-Adresse',
+ 'username' => 'Benutzername',
+ 'loginusername' => 'Benutzername oder Email',
+ 'password' => 'Passwort',
+ 'passwordagain' => 'Passwort (wiederholen für Verifikation)',
+ 'admin_option' => 'Diesen Benutzer zum Admin machen?',
+ 'PRIVATE' => 'Privat',
+ 'LOGGED_IN' => 'Angemeldete Benutzer',
+ 'PUBLIC' => 'Öffentlich',
+ 'access:friends:label' => 'Freunde',
+ 'access' => 'Zugangslevel',
+ 'dashboard' => 'Dashboard',
+ 'dashboard:nowidgets' => 'Dein persönliches Dashboard ermöglicht es Dir, die Aktivitäten auf dieser Commuity-Seite zu verfolgen und schnellen Zugriff auf die Inhalte zu bekommen, die Dich besonders interessieren.',
+ 'widgets:add' => 'Widgets hinzufügen',
+ 'widgets:add:description' => 'Klicke auf eines der unten aufgelisteten Widgets, um es zu Deiner Seite hinzuzufügen.',
+ 'widgets:position:fixed' => '(Feste Position auf der Seite)',
+ 'widget:unavailable' => 'Du hast dieses Widget bereits hinzugefügt.',
+ 'widget:numbertodisplay' => 'Anzahl der anzuzeigenden Einträge.',
+ 'widget:delete' => '%s entfernen',
+ 'widget:edit' => 'Dieses Widget konfigurieren',
+ 'widgets' => 'Widgets',
+ 'widget' => 'Widget',
+ 'item:object:widget' => 'Widgets',
+ 'widgets:save:success' => 'Das Widget wurde hinzugefügt.',
+ 'widgets:save:failure' => 'Das Widget konnte nicht hinzugefügt werden. Bitte versuche es noch einmal.',
+ 'widgets:add:success' => 'Das Widget wurde hinzugefügt.',
+ 'widgets:add:failure' => 'Das Hinzufügen des Wigets ist fehlgeschlagen.',
+ 'widgets:move:failure' => 'Die Position des Wigets auf Deiner Seite konnte nicht gespeichert werden.',
+ 'widgets:remove:failure' => 'Das Wiget konnte nicht entfernt werden.',
+ 'group' => 'Gruppe',
+ 'item:group' => 'Gruppen',
+ 'user' => 'Benutzer',
+ 'item:user' => 'Mitglieder',
+ 'friends' => 'Freunde',
+ 'friends:yours' => 'Deine Freunde',
+ 'friends:owned' => 'Freunde von %s',
+ 'friend:add' => 'Zu Freundesliste hinzufügen',
+ 'friend:remove' => 'Aus Freundesliste entfernen',
+ 'friends:add:successful' => '%s wurde zu Deiner Freundesliste hinzugefügt.',
+ 'friends:add:failure' => '%s konnte nicht zu Deiner Freundesliste hinzugefügt werden. Bitte versuche es noch einmal.',
+ 'friends:remove:successful' => '%s wurde aus Deiner Freundesliste entfernt.',
+ 'friends:remove:failure' => '%s konnte nicht aus Deiner Freundesliste entfernt werden. Bitte versuche es noch einmal.',
+ 'friends:none' => 'Dieser Benutzer hat noch niemand in seine Freundesliste aufgenommen.',
+ 'friends:none:you' => 'Du hast noch niemanden in Deine Freundenliste aufgenommen!',
+ 'friends:none:found' => 'Es wurden keine Freunde gefunden.',
+ 'friends:of:none' => 'Bisher hat diesen Benutzer noch niemand in die Freundesliste aufgenommen.',
+ 'friends:of:none:you' => 'Bisher hat Dich noch niemand in seine Freundesliste aufgenomen. Werde aktiv und trage etwas zur Community bei, fülle Dein Profil, damit Dich die anderen Mitglieder finden können!',
+ 'friends:of:owned' => 'Mitglieder, die mit %s befreundet sind',
+ 'friends:of' => 'Befreundet mit',
+ 'friends:collections' => 'Freundeslisten',
+ 'collections:add' => 'Neue Liste',
+ 'friends:collections:add' => 'Neue Freundesliste erstellen',
+ 'friends:addfriends' => 'Freunde hinzufügen',
+ 'friends:collectionname' => 'Name der Freundesliste',
+ 'friends:collectionfriends' => 'Freunde in dieser Liste',
+ 'friends:collectionedit' => 'Bearbeite diese Liste',
+ 'friends:nocollections' => 'Du hast noch keine Freundesliste erstellt.',
+ 'friends:collectiondeleted' => 'Deine Freundesliste wurde gelöscht.',
+ 'friends:collectiondeletefailed' => 'Wir konnten die Freundesliste nicht löschen. Entweder hast Du dafür keine Berechtigung oder ein anderes Problem ist aufgetreten.',
+ 'friends:collectionadded' => 'Die Freundesliste wurde erstellt',
+ 'friends:nocollectionname' => 'Du mußt Deiner Freundesliste einen Namen geben, bevor sie abgespeichert werden kann.',
+ 'friends:collections:members' => 'Mitglieder in der Freundesliste',
+ 'friends:collections:edit' => 'Freundesliste bearbeiten',
+ 'friends:collections:edited' => 'Die Freundesliste wurde gespeichert.',
+ 'friends:collection:edit_failed' => 'Das Speichern der Freundesliste ist fehlgeschlagen.',
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'avatar' => 'Profilbild',
+ 'avatar:create' => 'Profilbild erstellen',
+ 'avatar:edit' => 'Profilbild bearbeiten',
+ 'avatar:preview' => 'Vorschau',
+ 'avatar:upload' => 'Profilbild hochladen',
+ 'avatar:current' => 'Derzeitiges Profilbild',
+ 'avatar:crop:title' => 'Tool zum Zuschneiden des Profilbildes',
+ 'avatar:upload:instructions' => 'Das Profilbild ist das Bild, das auf Deiner Profilseite und bei all Deinen Beiträgen auf der Community-Seite angezeigt wird. Du kannst es so oft ändern wie Du willst. (Mögliche Dateiformate: GIF, JPG oder PNG)',
+ 'avatar:create:instructions' => 'Um Dein Profilbild nach Deinen Wünschen zuzuschneiden (optional), klicke es an und markiere einen quadratischen Ausschnitt während Du die Maustaste gedrückt hältst. Du kannst den Ausschnitt anschließend auch verschieben und in der Größe anpassen. Eine Vorschau Deines Profilbildes wird in der Box rechts daneben dargestellt. Wenn Du zufrieden mit dem Zuschneiden bist, klicke auf \'Profilbild erstellen\', um das Profilbild zu übernehmen. Das zugeschnittene Bild wird dann auf der ganzen Community-Seite als Dein Profilbild verwendet.',
+ 'avatar:upload:success' => 'Dein Profilbild wurde hochgeladen.',
+ 'avatar:upload:fail' => 'Das Hochladen des Profilbildes ist fehlgeschlagen.',
+ 'avatar:resize:fail' => 'Die Größenanpassung des Profilbildes ist fehlgeschlagen.',
+ 'avatar:crop:success' => 'Das Zuschneiden des Profilbildes war erfolgreich.',
+ 'avatar:crop:fail' => 'Das Zuschneiden des Profilbildes ist fehlgeschlagen.',
+ 'profile:edit' => 'Profil bearbeiten',
+ 'profile:aboutme' => 'Ãœber mich',
+ 'profile:description' => 'Ãœber mich',
+ 'profile:briefdescription' => 'Kurzbeschreibung',
+ 'profile:location' => 'Heimatort',
+ 'profile:skills' => 'Fähigkeiten',
+ 'profile:interests' => 'Interessen',
+ 'profile:contactemail' => 'Email-Kontaktadresse',
+ 'profile:phone' => 'Telefon',
+ 'profile:mobile' => 'Handy',
+ 'profile:website' => 'Webseite',
+ 'profile:twitter' => 'Twitter-Benutzername',
+ 'profile:saved' => 'Die Änderungen an Deinem Profil wurden gespeichert.',
+ 'profile:field:text' => 'Kurzbeschreibung',
+ 'profile:field:longtext' => 'Ausführliche Beschreibung',
+ 'profile:field:tags' => 'Tags',
+ 'profile:field:url' => 'Webseite',
+ 'profile:field:email' => 'Email-Adresse',
+ 'profile:field:location' => 'Heimatort',
+ 'profile:field:date' => 'Datum',
+ 'admin:appearance:profile_fields' => 'Profilfelder konfigurieren',
+ 'profile:edit:default' => 'Anpassen der Profilfelder',
+ 'profile:label' => 'Name des Profilfeldes',
+ 'profile:type' => 'Feldtyp',
+ 'profile:editdefault:delete:fail' => 'Das Entfernen des Standard-Feldes aus dem Profil ist fehlgeschlagen.',
+ 'profile:editdefault:delete:success' => 'Das Profilfeld wurde gelöscht!',
+ 'profile:defaultprofile:reset' => 'Die Standard-Profilfelder wurden wiederhergestellt.',
+ 'profile:resetdefault' => 'Die Standard-Profilfelder wiederherstellen',
+ 'profile:explainchangefields' => 'Hier kannst Du die existierenden Profilfelder durch eigene Felder ersetzen. Zuerst mußt Du einen Namen für das neue Feld eingeben, z.B. \'Lieblingsteam\'. Dann mußt Du den Typ des Feldes auswählen (z.B. Text, URL, Tags). Mit einem Klick auf \'Hinzufügen\' wird das Feld dann in das Profil aufgenommen. Um die Reihenfolge der Felder zu ändern, kannst Du ein Feld am Greifer neben dem Namen in seine gewünschte Position ziehen. Um den Namen eines Feldes zu ändern, klicke auf den Text, um ihn editierbar zu machen.
+
+ Du kannst jederzeit das ursprüngliche Standard-Profil wiederherstellen. Aber alle Informationen, die in die benutzerdefinierten Felder auf den Profilseiten eingegeben wurden, gehen dann verloren.',
+ 'profile:editdefault:success' => 'Das Profilfeld wurde hinzugefügt.',
+ 'profile:editdefault:fail' => 'Die Änderung der Profilfelder konnte nicht gespeichert werden.',
+ 'feed:rss' => 'RSS-Feed für diese Seite',
+ 'link:view' => 'Link aufrufen',
+ 'link:view:all' => 'Alle ansehen',
+ 'river' => 'River',
+ 'river:friend:user:default' => '%s ist nun mit %s befreundet.',
+ 'river:update:user:avatar' => '%s hat ein neues Profilbild hochgeladen.',
+ 'river:update:user:profile' => '%s hat ihre/seine Profilseite aktualisiert.',
+ 'river:noaccess' => 'Du hast keine Berechtigung um diesen Eintrag anzuzeigen.',
+ 'river:posted:generic' => '%s schrieb',
+ 'riveritem:single:user' => 'ein Mitglied',
+ 'riveritem:plural:user' => 'einige Mitglieder',
+ 'river:ingroup' => 'in der Gruppe %s',
+ 'river:none' => 'Keine Aktivität',
+ 'river:update' => 'Aktualisierung für %s',
+ 'river:widget:title' => 'Aktivitäten',
+ 'river:widget:description' => 'Neueste Aktivitäten anzeigen',
+ 'river:widget:type' => 'Art der Aktivitäten',
+ 'river:widgets:friends' => 'Aktivitäten Deiner Freunde',
+ 'river:widgets:all' => 'Alle Aktivitäten der Seite',
+ 'notifications:usersettings' => 'Benachrichtigungs-Einstellungen',
+ 'notifications:methods' => 'Wähle bitte die Benachrichtigungsmethoden aus, die Du zulassen willst.',
+ 'notification:method:email' => 'Email',
+ 'notifications:usersettings:save:ok' => 'Deine Benachrichtigungs-Einstellungen wurden gespeichert.',
+ 'notifications:usersettings:save:fail' => 'Beim Speichern Deiner Benachrichtigungs-Einstellungen ist ein Problem aufgetreten.',
+ 'user.notification.get' => 'Ausgabe der Benachrichtigungs-Einstellungen für einen bestimmten Benutzer.',
+ 'user.notification.set' => 'Setze die Benachrichtigungs-Einstellungen für einen bestimmten Benutzer.',
+ 'search' => 'Suche',
+ 'searchtitle' => 'Suche: %s',
+ 'users:searchtitle' => 'Suche nach Mitgliedern: %s',
+ 'groups:searchtitle' => 'Suche nach Gruppen: %s',
+ 'advancedsearchtitle' => '%s mit Treffern passend zu %s',
+ 'notfound' => 'Keine Treffer.',
+ 'next' => 'Weiter',
+ 'previous' => 'Zurück',
+ 'viewtype:change' => 'Ansicht wechseln',
+ 'viewtype:list' => 'Listen-Ansicht',
+ 'viewtype:gallery' => 'Gallerie-Ansicht',
+ 'tag:search:startblurb' => 'Einträge mit Tags passend zu \'%s\':',
+ 'user:search:startblurb' => 'Mitglieder passend zu \'%s\':',
+ 'user:search:finishblurb' => 'Für weitere Treffer hier klicken.',
+ 'group:search:startblurb' => 'Gruppen passend zu \'%s\':',
+ 'group:search:finishblurb' => 'Für weitere Treffer hier klicken.',
+ 'search:go' => 'Los',
+ 'userpicker:only_friends' => 'Nur Freunde',
+ 'account' => 'Account',
+ 'settings' => 'Einstellungen',
+ 'tools' => 'Tools',
+ 'settings:edit' => 'Einstellungen bearbeiten',
+ 'register' => 'Registrieren',
+ 'registerok' => 'Du hast Dich erfolgreich auf %s registriert.',
+ 'registerbad' => 'Deine Registrierung ist aufgrund eines unbekannten Fehlers fehlgeschlagen.',
+ 'registerdisabled' => 'Die Registrierung wurde durch den Administrator deaktiviert.',
+ 'register:fields' => 'Es müssen alle Felder ausgefüllt werden.',
+ 'registration:notemail' => 'Die von Dir angegebene Email-Adresse scheint keine gültige Email-Adresse zu sein.',
+ 'registration:userexists' => 'Dieser Benutzername ist schon belegt.',
+ 'registration:usernametooshort' => 'Dein Benutzername muss mindestens %u Zeichen lang sein.',
+ 'registration:passwordtooshort' => 'Das Passwort muss mindestens %u Zeichen lang sein.',
+ 'registration:dupeemail' => 'Diese Email-Adresse ist schon bei einer früheren Registrierung verwendet worden.',
+ 'registration:invalidchars' => 'Entschuldigung, Dein Benutzername enthält das unzulässige Zeichen %s. Folgende Zeichen sind nicht zulässig: %s',
+ 'registration:emailnotvalid' => 'Entschuldigung, die angegebene Email-Adresse ist auf dieser Seite nicht zulässig.',
+ 'registration:passwordnotvalid' => 'Entschuldigung, das angegebene Passwort ist auf dieser Seite nicht zulässig.',
+ 'registration:usernamenotvalid' => 'Entschuldigung, der angegebene Benutzername ist auf dieser Seite nicht zulässig.',
+ 'adduser' => 'Benutzer hinzufügen',
+ 'adduser:ok' => 'Es wurde ein neuer Benutzer hinzugefügt.',
+ 'adduser:bad' => 'Der neue Benutzeraccount konnte nicht erzeugt werden.',
+ 'user:set:name' => 'Benutzernamen-Einstellungen',
+ 'user:name:label' => 'Mein Name',
+ 'user:name:success' => 'Dein auf der Seite angezeigter Name wurde geändert.',
+ 'user:name:fail' => 'Dein Name konnte nicht geändert werden. Stelle sicher, dass der Name nicht zu lang ist und versuche es noch einmal.',
+ 'user:set:password' => 'Account-Passwort ändern',
+ 'user:current_password:label' => 'Dein derzeitiges Passwort',
+ 'user:password:label' => 'Dein neues Passwort',
+ 'user:password2:label' => 'Neues Passwort noch einmal eingeben',
+ 'user:password:success' => 'Dein Passwort wurde geändert',
+ 'user:password:fail' => 'Dein Passwort wurde geändert.',
+ 'user:password:fail:notsame' => 'Die zwei eingegebenen Passwörter stimmen nicht überein!',
+ 'user:password:fail:tooshort' => 'Das angegebene Passwort ist zu kurz!',
+ 'user:password:fail:incorrect_current_password' => 'Deine Eingabe stimmt nicht mit Deinem derzeitigen Passwort überein.',
+ 'user:resetpassword:unknown_user' => 'Unbekannter Benutzername.',
+ 'user:resetpassword:reset_password_confirm' => 'Beim Zurücksetzen des Passworts wird eine Email mit dem neuen Passwort an Deine bei der Accountregistrierung angegebene Email-Adresse versendet.',
+ 'user:set:language' => 'Sprache der Community-Seite',
+ 'user:language:label' => 'Deine Sprache',
+ 'user:language:success' => 'Deine Spracheinstellungen wurden aktualisiert.',
+ 'user:language:fail' => 'Deine Spracheinstellungen konnten nicht gespeichert werden.',
+ 'user:username:notfound' => 'Benutzername %s unbekannt.',
+ 'user:password:lost' => 'Neues Passwort',
+ 'user:password:resetreq:success' => 'Die Anforderung eines neuen Passworts war erfolgreich. Die Email mit dem neuen Passwort wurde gesendet',
+ 'user:password:resetreq:fail' => 'Die Anforderung eines neuen Passworts ist fehlgeschlagen.',
+ 'user:password:text' => 'Um ein neues Passwort anzufordern, gebe im folgenden Textfeld Deinen Benutzernamen oder Deine Email-Adresse ein. Wir werden Dir dann eine Email zur Bestätigung der Anfrage zusenden. Folge dem Link in dieser Email, um Deine Passwort-Anfrage zu bestätigen. Dann wird Dir ein neues Passwort zugesandt.',
+ 'user:persistent' => 'Merken',
+ 'walled_garden:welcome' => 'Wilkommen in',
+ 'menu:page:header:administer' => 'Administrieren',
+ 'menu:page:header:configure' => 'Konfigurieren',
+ 'menu:page:header:develop' => 'Entwickeln',
+ 'menu:page:header:default' => 'Anderes',
+ 'admin:view_site' => 'Seite anzeigen',
+ 'admin:loggedin' => 'Angemeldet als %s',
+ 'admin:menu' => 'Menü',
+ 'admin:configuration:success' => 'Deine Einstellungen wurden gespeichert.',
+ 'admin:configuration:fail' => 'Deine Einstellungen konnten nicht gespeichert werden.',
+ 'admin:unknown_section' => 'Unbekannter Adminbereich.',
+ 'admin' => 'Admin',
+ 'admin:description' => 'Der Admin-Bereich ermöglicht es Dir, Systemeinstellungen vorzunehmen. Du hast Zugriff beispielsweise auf die Benutzerverwaltung und die Konfiguration von Plugins. Bitte wähle eine der unten angebotenen Optionen.',
+ 'admin:statistics' => 'Statistiken',
+ 'admin:statistics:overview' => 'Ãœbersicht',
+ 'admin:appearance' => 'Design',
+ 'admin:administer_utilities' => 'Werkzeuge',
+ 'admin:develop_utilities' => 'Werkzeuge',
+ 'admin:users' => 'Benutzer',
+ 'admin:users:online' => 'Online',
+ 'admin:users:newest' => 'Neueste',
+ 'admin:users:add' => 'Neuen Benutzer hinzufügen',
+ 'admin:users:description' => 'In diesem Admin-Bereich kannst Du Benutzereinstellugen für Benutzeraccounts konfigurieren. Wähle eine der unten gezeigten Optionen.',
+ 'admin:users:adduser:label' => 'Hier klicken um einen neuen Benutzeraccount zu erstellen...',
+ 'admin:users:opt:linktext' => 'Benutzeraccount konfigurieren...',
+ 'admin:users:opt:description' => 'Benutzeraccounts und Accountinformationen bearbeiten. ',
+ 'admin:users:find' => 'Finde',
+ 'admin:settings' => 'Einstellungen',
+ 'admin:settings:basic' => 'Grundeinstellungen',
+ 'admin:settings:advanced' => 'Erweiterte Einstellungen',
+ 'admin:site:description' => 'Hier kannst Du einige globale Einstellungen für Deine Community-Seite vornehmen.',
+ 'admin:site:opt:linktext' => 'Community-Seite konfigurieren...',
+ 'admin:site:access:warning' => 'Eine Änderung des Zugangslevels betrifft nur die Seiteninhalte, die nach der Änderung erstellt werden.',
+ 'admin:dashboard' => 'Dashboard',
+ 'admin:widget:online_users' => 'Angemeldete Benutzer',
+ 'admin:widget:online_users:help' => 'Auflistung der Benutzer, die momentan online sind.',
+ 'admin:widget:new_users' => 'Neue Benutzer',
+ 'admin:widget:new_users:help' => 'Auflistung der neuesten Benutzer.',
+ 'admin:widget:content_stats' => 'Inhalts-Statistiken',
+ 'admin:widget:content_stats:help' => 'Auflistung der Inhalte, die von Benutzern erzeugt wurden.',
+ 'widget:content_stats:type' => 'Typ des Inhalts',
+ 'widget:content_stats:number' => 'Anzahl',
+ 'admin:widget:admin_welcome' => 'Willkommen',
+ 'admin:widget:admin_welcome:help' => 'Eine kurze Einführung in den Admin-Bereich von Elgg.',
+ 'admin:widget:admin_welcome:intro' => 'Willkommen auf Deiner Elgg-Seite! Du siehst gerade das Administrator-Dashboard. Es ist hilfreich, um auf Deiner Seite den Ãœberblick zu behalten.',
+ 'admin:widget:admin_welcome:admin_overview' => 'Der Admin-Bereich ist in Unterseiten aufgeteilt, die über das Menu auf der rechten Seite aufgerufen werden können. Der Admin-Bereich ist aufgeteilt in drei Abschnitte:
+ <dl>
+ <dt>Administrieren</dt><dd>Alltägliche Aufgaben wie das Prüfen von gemeldeten Beiträgen, Auflisten der gerade angemeldeten Benutzern und das Anzeigen von Statistiken.</dd>
+ <dt>Konfigurieren</dt><dd>Gelegentlich notwendige Aufgaben wie die Konfiguration des Namens der Seite oder das Aktivieren eines Plugins.</dd>
+ <dt>Entwickeln</dt><dd>Für Entwickler, die ein Plugin oder ein Theme testen wollen. (Ein Entwickler-Plugin ist dafür notwendig.)</dd>
+ </dl>
+ ',
+ 'admin:widget:admin_welcome:outro' => '<br />Wirf auch einen Blick auf die zusätzlichen Resourcen, die Du über die Links in der Fußzeile des Admin-Bereichs aufrufen kannst. Und vielen Dank, dass Du Elgg verwendest!',
+ 'admin:widget:control_panel' => 'Seiten-Administration',
+ 'admin:widget:control_panel:help' => 'Schnellzugriff auf einige allgemeine administrative Funktionen',
+ 'admin:cache:flush' => 'Seitencaches zurücksetzen',
+ 'admin:cache:flushed' => 'Die Caches der Seite wurden zurückgesetzt.',
+ 'admin:footer:faq' => 'Administrations-FAQs',
+ 'admin:footer:manual' => 'Administrator-Handbuch',
+ 'admin:footer:community_forums' => 'Elgg-Community-Foren',
+ 'admin:footer:blog' => 'Elgg-Blog',
+ 'admin:plugins:category:all' => 'Alle Plugins',
+ 'admin:plugins:category:active' => 'Aktivierte Plugins',
+ 'admin:plugins:category:inactive' => 'Deaktivierte Plugins',
+ 'admin:plugins:category:admin' => 'Admin',
+ 'admin:plugins:category:bundled' => 'Mitgeliefert',
+ 'admin:plugins:category:nonbundled' => 'Nicht mitgeliefert',
+ 'admin:plugins:category:content' => 'Inhalte',
+ 'admin:plugins:category:development' => 'Entwicklung',
+ 'admin:plugins:category:enhancement' => 'Erweiterung',
+ 'admin:plugins:category:api' => 'Service/API',
+ 'admin:plugins:category:communication' => 'Kommunikation',
+ 'admin:plugins:category:security' => 'Sicherheit und 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' => 'Werkzeuge',
+ 'admin:plugins:sort:priority' => 'Priorität',
+ 'admin:plugins:sort:alpha' => 'Alphabetisch',
+ 'admin:plugins:sort:date' => 'Neueste',
+ 'admin:plugins:markdown:unknown_plugin' => 'Unbekanntes Plugin.',
+ 'admin:plugins:markdown:unknown_file' => 'Unbekannte Datei.',
+ 'admin:notices:could_not_delete' => 'Die Benachrichtigung kann nicht gelöscht werden.',
+ 'admin:options' => 'Admin-Optionen',
+ 'plugins:settings:save:ok' => 'Die Einstellungen für das Plugin %s wurden gespeichert.',
+ 'plugins:settings:save:fail' => 'Beim Speichern der Einstellungungen für das Plugin %s ist ein Problem aufgetreten.',
+ 'plugins:usersettings:save:ok' => 'Die Benutzereinstellungen für das Plugin %s wurden gespeichert.',
+ 'plugins:usersettings:save:fail' => 'Beim Speichern der Benutzereinstellungungen für das Plugin %s ist ein Problem aufgetreten.',
+ 'item:object:plugin' => 'Plugins',
+ 'admin:plugins' => 'Plugins',
+ 'admin:plugins:activate_all' => 'Alle aktivieren',
+ 'admin:plugins:deactivate_all' => 'Alle deaktivieren',
+ 'admin:plugins:activate' => 'Aktivieren',
+ 'admin:plugins:deactivate' => 'Deaktivieren',
+ 'admin:plugins:description' => 'Hier kannst Du die auf Deiner Community-Seite installierten Tools (Plugins) verwalten und hast Zugriff auf die von ihnen angebotenen Konfigurationsoptionen.',
+ 'admin:plugins:opt:linktext' => 'Tools konfigurieren...',
+ 'admin:plugins:opt:description' => 'Konfigurieren der installierten Tools der Community-Seite.',
+ 'admin:plugins:label:author' => 'Author',
+ 'admin:plugins:label:copyright' => 'Copyright',
+ 'admin:plugins:label:categories' => 'Kategorien',
+ 'admin:plugins:label:licence' => 'Lizenz',
+ 'admin:plugins:label:website' => 'URL',
+ 'admin:plugins:label:moreinfo' => 'Weitere Informationen',
+ 'admin:plugins:label:version' => 'Version',
+ 'admin:plugins:label:location' => 'Pfad zum Plugin-Verzeichnis',
+ 'admin:plugins:label:dependencies' => 'Abhängigkeiten',
+ 'admin:plugins:warning:elgg_version_unknown' => 'Dieses Plugin verwendet eine veraltete Manifest-Datei und es gibt keine Informationen bezüglich den kompatiblen Elgg-Versionen. Es wird wahrscheinlich nicht funktionieren!',
+ 'admin:plugins:warning:unmet_dependencies' => 'Dieses Plugin hat unerfüllte Abhängigkeiten und kann deshalb nicht aktiviert werden. Prüfe die Abhängigkeiten für weitere Informationen.',
+ 'admin:plugins:warning:invalid' => '%s ist kein zulässiges Elgg-Plugin. Bitte schau in der <a href="http://docs.elgg.org/Invalid_Plugin">Elgg-Dokumentation</a> nach, um weitere Hinweise zur Problemlösung zu erhalten.',
+ 'admin:plugins:cannot_activate' => 'Aktivierung nicht möglich.',
+ 'admin:plugins:set_priority:yes' => '%s neu angeordnet.',
+ 'admin:plugins:set_priority:no' => '%s kann nicht neu angeordnet werden.',
+ 'admin:plugins:set_priority:no_with_msg' => '%s konnte nicht neu angeordnet werden. Fehlermeldung: %s',
+ 'admin:plugins:deactivate:yes' => '%s deaktiviert.',
+ 'admin:plugins:deactivate:no' => '%s kann nicht deaktiviert werden.',
+ 'admin:plugins:deactivate:no_with_msg' => '%s konnte nicht deaktiviert werden. Fehlermeldung: %s',
+ 'admin:plugins:activate:yes' => '%s aktiviert.',
+ 'admin:plugins:activate:no' => '%s kann nicht aktiviert werden.',
+ 'admin:plugins:activate:no_with_msg' => '%s konnte nicht aktiviert werden. Fehlermeldung: %s',
+ 'admin:plugins:categories:all' => 'Alle Kategorien',
+ 'admin:plugins:plugin_website' => 'Plugin-Webseite',
+ 'admin:plugins:author' => '%s',
+ 'admin:plugins:version' => 'Version %s',
+ 'admin:plugin_settings' => 'Plugin-Einstellungen',
+ 'admin:plugins:warning:unmet_dependencies_active' => 'Dieses Plugin ist aktiviert aber es hat unerfüllte Abhängigkeiten. Dies kann zu Problemen führen. Siehe "mehr Info" unten für weitere Einzelheiten.',
+ 'admin:plugins:dependencies:type' => 'Typ',
+ 'admin:plugins:dependencies:name' => 'Name',
+ 'admin:plugins:dependencies:expected_value' => 'Erwarteter Wert',
+ 'admin:plugins:dependencies:local_value' => 'Tatsächlicher Wert',
+ 'admin:plugins:dependencies:comment' => 'Kommentar',
+ 'admin:statistics:description' => 'Dies ist ein Überblick über die Seiten-Statistik Deiner Community. Falls Du detailiertere Statistiken benötigst, ist ein ausführlicheres, professionelles Administations-Tool verfügbar.',
+ 'admin:statistics:opt:description' => 'Überblick über Statistiken zu Benutzern und Objekten Deiner Community-Seite.',
+ 'admin:statistics:opt:linktext' => 'Statistiken anzeigen...',
+ 'admin:statistics:label:basic' => 'Kurzstatistik Deiner Community-Seite',
+ 'admin:statistics:label:numentities' => 'Entitäten Deiner Community-Seite',
+ 'admin:statistics:label:numusers' => 'Anzahl der Mitglieder',
+ 'admin:statistics:label:numonline' => 'Anzahl der angemeldeten Mitglieder',
+ 'admin:statistics:label:onlineusers' => 'Momentan angemeldete Mitglieder',
+ 'admin:statistics:label:version' => 'Elgg-Version',
+ 'admin:statistics:label:version:release' => 'Release',
+ 'admin:statistics:label:version:version' => 'Version',
+ 'admin:user:label:search' => 'Suche Benutzeraccount:',
+ 'admin:user:label:searchbutton' => 'Suche',
+ 'admin:user:ban:no' => 'Benutzeraccount sperren',
+ 'admin:user:ban:yes' => 'Benutzeraccount gesperrt.',
+ 'admin:user:self:ban:no' => 'Du kannst Dich nicht selbst sperren!',
+ 'admin:user:unban:no' => 'Sperrung des Benutzeraccounts kann nicht aufgehoben werden.',
+ 'admin:user:unban:yes' => 'Sperrung des Benutzeraccounts aufgehoben.',
+ 'admin:user:delete:no' => 'Benutzeraccount kann nicht gelöscht werden.',
+ 'admin:user:delete:yes' => 'Der Benutzeraccount %s wurde gelöscht.',
+ 'admin:user:self:delete:no' => 'Du kannst Deinen eigenen Account nicht löschen!',
+ 'admin:user:resetpassword:yes' => 'Das Passwort wurde zurückgesetzt und der Benutzer benachrichtigt.',
+ 'admin:user:resetpassword:no' => 'Das Passwort konnte nicht zurückgesetzt werden.',
+ 'admin:user:makeadmin:yes' => 'Der Benutzer ist nun ein Administrator.',
+ 'admin:user:makeadmin:no' => 'Die Zuweisung von Administratorrechten für den Benutzer ist fehlgeschlagen.',
+ 'admin:user:removeadmin:yes' => 'Der Benutzer ist nicht länger ein Administrator.',
+ 'admin:user:removeadmin:no' => 'Die Rücknahme von Administratorrechten für den Benutzer ist fehlgeschlagen.',
+ 'admin:user:self:removeadmin:no' => 'Du kannst Dir nicht selbst die Administratorrechte entziehen.',
+ 'admin:appearance:menu_items' => 'Menü-Einträge',
+ 'admin:menu_items:configure' => 'Konfiguriere die Einträge im Hauptmenü.',
+ 'admin:menu_items:description' => 'Wähle aus, welche Links Du als separate Menü-Einträge anzeigen lassen willst. Die restlichen Links werden unter "Mehr" am Ende der Liste zusammengefaßt.',
+ 'admin:menu_items:hide_toolbar_entries' => 'Links aus dem Toolbar-Menü entfernen?',
+ 'admin:menu_items:saved' => 'Menü-Einträge gespeichert.',
+ 'admin:add_menu_item' => 'Einen benutzerdefinierten Menü-Eintrag hinzufügen',
+ 'admin:add_menu_item:description' => 'Gebe den anzuzeigenden Namen und die URL an, um einen Eintrag zum Menü hinzuzufügen.',
+ 'admin:appearance:default_widgets' => 'Standard-Widgets',
+ 'admin:default_widgets:unknown_type' => 'Unbekannter Widget-Typ.',
+ 'admin:default_widgets:instructions' => 'Hinzufügen, Entfernen, Positionieren und Konfigurieren der standardmäßig anzuzeigenden Widgets für die gewünschte Seite. Diese Änderungen werden nur neu erstellte Benutzeraccounts auf Deiner Community-Seite betreffen.',
+ 'usersettings:description' => 'Hier kannst Du alle Deine persönlichen Einstellungen vornehmen, beispielsweise Einstellungen der Benutzeraccounts order Konfiguration von Plugins.',
+ 'usersettings:statistics' => 'Deine persönliche Statistik',
+ 'usersettings:statistics:opt:description' => 'Überblick über Statistiken zu Benutzern und Objekten Deiner Community-Seite.',
+ 'usersettings:statistics:opt:linktext' => 'Account-Statistik',
+ 'usersettings:user' => 'Deine Einstellungen',
+ 'usersettings:user:opt:description' => 'Hier kannst Du Benutzereinstellungen konfigurieren.',
+ 'usersettings:user:opt:linktext' => 'Account konfigurieren',
+ 'usersettings:plugins' => 'Tools',
+ 'usersettings:plugins:opt:description' => 'Einstellungen (falls vorhanden) der aktivierten Tools konfigurieren.',
+ 'usersettings:plugins:opt:linktext' => 'Konfiguriere Deine Tools',
+ 'usersettings:plugins:description' => 'Hier kannst Du Deine persönlichen Einstellungen für die vom Administrator installierten Tools konfigurieren.',
+ 'usersettings:statistics:label:numentities' => 'Deine Beiträge',
+ 'usersettings:statistics:yourdetails' => 'Deine Accountdetails',
+ 'usersettings:statistics:label:name' => 'Vollständiger Name',
+ 'usersettings:statistics:label:email' => 'Email-Adresse',
+ 'usersettings:statistics:label:membersince' => 'Mitglied seit',
+ 'usersettings:statistics:label:lastlogin' => 'Zuletzt angemeldet',
+ 'river:all' => 'Alle Aktivitäten',
+ 'river:mine' => 'Meine Aktivitäten',
+ 'river:friends' => 'Aktivitäten von Freunden',
+ 'river:select' => 'Zeige %s',
+ 'river:comments:more' => '+%u weitere',
+ 'river:generic_comment' => 'kommentierte %s %s',
+ 'friends:widget:description' => 'Auflistung einiger Deiner Freunde',
+ 'friends:num_display' => 'Anzahl der anzuzeigenden Freunde.',
+ 'friends:icon_size' => 'Icon-Größe',
+ 'friends:tiny' => 'sehr klein',
+ 'friends:small' => 'klein',
+ 'save' => 'Speichern',
+ 'reset' => 'Zurücksetzen',
+ 'publish' => 'Veröffentlichen',
+ 'cancel' => 'Abbrechen',
+ 'saving' => 'Wird gespeichert...',
+ 'update' => 'Aktualisieren',
+ 'preview' => 'Vorschau',
+ 'edit' => 'Bearbeiten',
+ 'delete' => 'Löschen',
+ 'accept' => 'Zustimmen',
+ 'load' => 'Laden',
+ 'upload' => 'Hochladen',
+ 'ban' => 'Sperren',
+ 'unban' => 'Sperrung aufheben',
+ 'banned' => 'Gesperrt',
+ 'enable' => 'Aktivieren',
+ 'disable' => 'Deaktivieren',
+ 'request' => 'Anfordern',
+ 'complete' => 'vollständig',
+ 'open' => 'Öffnen',
+ 'close' => 'Schließen',
+ 'reply' => 'Antworten',
+ 'more' => 'Weitere',
+ 'comments' => 'Kommentare',
+ 'import' => 'Importieren',
+ 'export' => 'Exportieren',
+ 'untitled' => 'Ohne Titel',
+ 'help' => 'Hilfe',
+ 'send' => 'Absenden',
+ 'post' => 'Schreiben',
+ 'submit' => 'Abschicken',
+ 'comment' => 'Kommentieren',
+ 'upgrade' => 'Aktualisieren',
+ 'sort' => 'Sortieren',
+ 'filter' => 'Filtern',
+ 'new' => 'Neu',
+ 'add' => 'Hinzufügen',
+ 'create' => 'Hinzufügen',
+ 'site' => 'Webseite',
+ 'activity' => 'Aktivitäten',
+ 'members' => 'Mitglieder',
+ 'up' => 'Höher',
+ 'down' => 'Tiefer',
+ 'top' => 'Anfang',
+ 'bottom' => 'Ende',
+ 'invite' => 'Einladen',
+ 'resetpassword' => 'Passwort zurücksetzen',
+ 'makeadmin' => 'Zum Admin machen',
+ 'removeadmin' => 'Admin entlassen',
+ 'option:yes' => 'Ja',
+ 'option:no' => 'Nein',
+ 'unknown' => 'Unbekannt',
+ 'active' => 'Aktiv',
+ 'total' => 'Gesamt',
+ 'learnmore' => 'Hier klicken um mehr zu erfahren.',
+ 'content' => 'Beiträge',
+ 'content:latest' => 'Letzte Aktivitäten',
+ 'content:latest:blurb' => 'Oder hier klicken, um die neuesten Beiträge dieser Community-Seite zu sehen.',
+ 'link:text' => 'Link besuchen',
+ 'question:areyousure' => 'Bist Du sicher?',
+ 'title' => 'Titel',
+ 'description' => 'Beschreibung',
+ 'tags' => 'Tags',
+ 'spotlight' => 'Spotlight',
+ 'all' => 'Alle',
+ 'mine' => 'Meine',
+ 'by' => 'von',
+ 'none' => 'keine',
+ 'annotations' => 'Kommentare',
+ 'relationships' => 'Beziehungen',
+ 'metadata' => 'Metadaten',
+ 'tagcloud' => 'Tagcloud',
+ 'tagcloud:allsitetags' => 'Alle Tags der Seite',
+ 'on' => 'An',
+ 'off' => 'Aus',
+ 'edit:this' => 'Bearbeiten',
+ 'delete:this' => 'Löschen',
+ 'comment:this' => 'Kommentieren',
+ 'deleteconfirm' => 'Bist Du sicher, dass Du diesen Eintrag löschen willst?',
+ 'fileexists' => 'Es wurde bereits eine Datei hochgeladen. Um sie zu ersetzen, unten auswählen:',
+ 'useradd:subject' => 'Benutzeraccount erstellt',
+ 'useradd:body' => '
+%s,
+
+Auf der Community-Seite %s wurde ein Benutzeraccount für Dich erstellt %s. Um Dich anzumelden, gehe zu:
+
+%s
+
+und melde Dich mit diesen Zugangsdaten an:
+
+Benutzername (Username): %s
+Passwort: %s
+
+Nachdem Du Dich angemeldet hast, solltest Du Dein Passwort ändern.
+',
+ 'systemmessages:dismiss' => 'Hier klicken, um die Statusmeldung auszublenden',
+ 'importsuccess' => 'Das Importieren der Daten war erfolgreich',
+ 'importfail' => 'Das Importieren der OpenDD-Daten ist fehlgeschlagen.',
+ 'friendlytime:justnow' => 'soeben',
+ 'friendlytime:minutes' => 'vor %s Minuten',
+ 'friendlytime:minutes:singular' => 'vor einer Minute',
+ 'friendlytime:hours' => 'vor %s Stunden',
+ 'friendlytime:hours:singular' => 'vor einer Stunde',
+ 'friendlytime:days' => 'vor %s Tagen',
+ 'friendlytime:days:singular' => 'gestern',
+ 'friendlytime:date_format' => 'j F Y @ g:ia',
+ 'date:month:01' => '%s Januar',
+ 'date:month:02' => '%s Februar',
+ 'date:month:03' => '%s März',
+ 'date:month:04' => '%s April',
+ 'date:month:05' => '%s Mai',
+ 'date:month:06' => '%s Juni',
+ 'date:month:07' => '%s Juli',
+ 'date:month:08' => '%s August',
+ 'date:month:09' => '%s September',
+ 'date:month:10' => '%s Oktober',
+ 'date:month:11' => '%s November',
+ 'date:month:12' => '%s Dezember',
+ 'installation:sitename' => 'Der Name Deiner Community-Seite:',
+ 'installation:sitedescription' => 'Eine kurze Beschreibung Deiner Seite (optional):',
+ 'installation:wwwroot' => 'Die URL Deiner Community-Seite:',
+ 'installation:path' => 'Der vollständige Pfad zum Elgg-Installationsverzeichnis auf Deinem Server:',
+ 'installation:dataroot' => 'Der vollständige Pfad zum Elgg-Datenverzeichnis auf Deinem Server:',
+ 'installation:dataroot:warning' => 'Du mußt dieses Verzeichnis selbst erzeugen. Es muß in einem anderen Verzeichnis als Dein Elgg-Installationsverzeichnis sein.',
+ 'installation:sitepermissions' => 'Der standardmäßige Zugangslevel: ',
+ 'installation:language' => 'Die Standardsprache Deiner Community-Seite: ',
+ 'installation:debug' => 'Der Debug-Modus liefert detailiertere Rückmeldungen, die bei der Fehlersuche hilfreich sein können. Allerdings kann dadurch das Laden der Seiten verlangsamt werden. Daher sollte er nur aktiviert werden, falls Probleme auftreten: ',
+ 'installation:debug:none' => 'Debug-Modus deaktivieren (empfohlen)',
+ 'installation:debug:error' => 'Nur kritische Fehler anzeigen',
+ 'installation:debug:warning' => 'Kritische Fehler und Warnungen anzeigen',
+ 'installation:debug:notice' => 'Alle Fehler, Warnungen und Benachrichtigungen protokollieren',
+ 'installation:registration:description' => 'Standardmäßig ist die Registrierung neuer Benutzeraccounts erlaubt. Schalte dies ab, wenn Du nicht willst, dass neue Besucher Deiner Seite Accounts registrieren dürfen.',
+ 'installation:registration:label' => 'Registrieren neuer Benutzeraccounts erlauben',
+ 'installation:walled_garden:description' => 'Deine Community-Seite als privates Netzwerk betreiben. Nur angemeldete Benutzer werden auf die Inhalte Deiner Seite Zugriff haben mit der Ausnahme von Inhalten, deren Zugriffsberechtigung explizit auf \'öffentlich\' gesetzt ist.',
+ 'installation:walled_garden:label' => 'Zugriff auf angemeldete Benutzer beschränken',
+ 'installation:httpslogin' => 'Aktivieren, um den Benutzern die Anmeldung via HTTPS zu ermöglichen. Dafür ist es notwendig, dass Dein Server das https-Protokoll unterstützt.',
+ 'installation:httpslogin:label' => 'HTTPS-Anmeldungen zulassen',
+ 'installation:view' => 'Gebe den Ansichtsmodus an, der für Deine Community-Seite verwendet werden soll. Wenn Du nicht sicher bist was Du eingeben sollst, lass das Textfeld leer oder verwende "default", um den Standardmodus zu verwenden:',
+ 'installation:siteemail' => 'Email-Adresse Deiner Community-Seite (wird vom System verwendet, um Benachrichtigungen zu versenden)',
+ 'installation:disableapi' => 'Elgg bietet eine API zum Erstellen von Webservices, die externen Anwendungen die Interaktion mit Deiner Elgg-Seite ermöglicht.',
+ 'installation:disableapi:label' => 'Webservice-API von Elgg aktivieren',
+ 'installation:allow_user_default_access:description' => 'Falls diese Option aktiviert ist, dürfen Benutzer einen individuellen Zuganglevel für ihre Inhalte festlegen, wodurch der systemweite Zugangslevel außer Kraft gesetzt wird.',
+ 'installation:allow_user_default_access:label' => 'Indivuellen benutzerdefinierten Zugangslevel erlauben',
+ 'installation:simplecache:description' => 'Simple Cache verbessert die Systemleistung durch Caching von statischen Seiteninhalten inklusive einiger CSS- und JavaScript-Dateien. Normalerweise wirst Du Simple Cache verwenden wollen.',
+ 'installation:simplecache:label' => 'Simple Cache aktivieren (empfohlen)',
+ 'upgrading' => 'Aktualisieren...',
+ 'upgrade:db' => 'Deine Datenbank wurde aktualisiert.',
+ 'upgrade:core' => 'Deine Elgg-Installation wurde aktualisiert.',
+ 'upgrade:unable_to_upgrade' => 'Die Aktualisierung ist fehlgeschlagen.',
+ 'upgrade:unable_to_upgrade_info' => 'Diese Installation kann nicht aktualisiert werden, da in den Views-Verzeichnissen der
+ Elgg-Basisinstallation veraltete Views gefunden wurden. Diese Views werden nicht mehr
+ unterstützt und müssen entfernt werden, damit Elgg funktionieren kann. Wenn Du keine
+ Dateien modifiziert hast, die in der Standardinstallation von Elgg enthalten sind,
+ kannst Du einfach das Views-Verzeichnis löschen und durch das View-Verzeichnis ersetzen,
+ das im Paket der neuesten Version von Elgg enthalten ist und von <a href="http://elgg.org">elgg.org</a>
+ heruntergeladen werden kann.<br /><br />
+
+ Wenn Du genauere Installationsanweisungen benötigst, lese die <a href="http://docs.elgg.org/wiki/Upgrading_Elgg">
+ Dokumentation über die Aktualisierung von Elgg</a>. Falls Du Hilfe benötigst, stelle Deine Frage in den
+ <a href="http://community.elgg.org/pg/groups/discussion/">Community Support-Foren</a>.',
+ 'update:twitter_api:deactivated' => 'Die Twitter API (bisher Twitter Service genannt) wurde während der Seitenaktualisierung deaktiviert. Bitte aktiviere die API manuell, falls sie benötigt wird.',
+ 'update:oauth_api:deactivated' => 'OAuth API (bisher OAuth Lib genannt) wurde während der Seitenaktualisierung deaktiviert. Bitte aktiviere die API manuell, falls sie benötigt wird.',
+ 'deprecated:function' => '%s() wurde durch %s() als veraltet markiert.',
+ 'welcome' => 'Willkommen',
+ 'welcome:user' => 'Willkommen %s',
+ 'email:settings' => 'Email',
+ 'email:address:label' => 'Deine Email-Adresse',
+ 'email:save:success' => 'Neue Email-Adresse gespeichert. Eine Bestätigungs-Email wurde versandt.',
+ 'email:save:fail' => 'Deine neue Email-Adresse konnte nicht gespeichert werden.',
+ 'friend:newfriend:subject' => 'Du bist nun mit %s befreundet!',
+ 'friend:newfriend:body' => 'Du bist nun mit %s befreundet!
+
+Klicke auf den folgenden Link um ihr/sein Profil zu besuchen:
+
+%s
+
+Du kannst auf diese Email NICHT antworten.',
+ 'email:resetpassword:subject' => 'Passwort wurde zurückgesetzt!',
+ 'email:resetpassword:body' => 'Hallo %s,
+
+Dein Passwort wurde zurückgesetzt. Dein neues Passwort ist: %s',
+ 'email:resetreq:subject' => 'Anfrage zum Zurücksetzen Deines Passworts.',
+ 'email:resetreq:body' => 'Hallo %s,
+
+es wurde eine Anfrage zum Zurücksetzen des Passworts Deines Accounts gestellt (von der IP-Adresse %s).
+
+Falls Du diese Anfrage gestellt hast, klicke bitte auf den folgenden Link, um die Anfrage zu bestätigen:
+
+%s
+
+Andernfalls ignoriere bitte diese Email.
+',
+ 'default_access:settings' => 'Standard-Zugangslevel für Deine Inhalte',
+ 'default_access:label' => 'Standard-Zugangslevel',
+ 'user:default_access:success' => 'Dein neuer Standard-Zugangslevel wurde gespeichert.',
+ 'user:default_access:failure' => 'Dein neuer Standard-Zugangslevel konnte nicht gespeichert werden.',
+ 'xmlrpc:noinputdata' => 'Fehlende Eingabedaten',
+ 'comments:count' => 'Kommentare von %s',
+ 'riveraction:annotation:generic_comment' => '%s kommentierte %s',
+ 'generic_comments:add' => 'Kommentieren',
+ 'generic_comments:post' => 'Kommentieren',
+ 'generic_comments:text' => 'Kommentar',
+ 'generic_comments:latest' => 'Neueste Kommentare',
+ 'generic_comment:posted' => 'Dein Kommentar wurde gespeichert.',
+ 'generic_comment:deleted' => 'Der Kommentar wurde gelöscht.',
+ 'generic_comment:blank' => 'Entschuldigung, aber Du mußt zuerst etwas schreiben bevor wir Deinen Kommentar abspeichern können.',
+ 'generic_comment:notfound' => 'Entschuldigung, aber wird konnten den gesuchten Eintrag nicht finden.',
+ 'generic_comment:notdeleted' => 'Entschuldigung, dieser Kommentar konnte nicht gelöscht werden.',
+ 'generic_comment:failure' => 'Beim Speichern Deines Kommentars ist ein Fehler aufgetreten. Bitte versuche es noch einmal.',
+ 'generic_comment:none' => 'Keine Kommentare.',
+ 'generic_comment:title' => 'Kommentar von %s',
+ 'generic_comment:email:subject' => 'Du hast einen neuen Kommentar erhalten!',
+ 'generic_comment:email:body' => 'Zu Deinem Eintrag "%s" wurde von %s ein neuer Kommentar geschrieben. Der Kommentar lautet:
+
+
+%s
+
+
+Um zu antworten oder Deinen ursprünglichen Eintrag aufzurufen, folge diesem Link:
+
+%s
+
+Um das Profil von %s aufzurufen, folge diesem Link:
+
+%s
+
+Du kannst auf diese Email NICHT antworten.',
+ 'byline' => 'Von %s',
+ 'entity:default:strapline' => '%s erzeugt von %s',
+ 'entity:default:missingsupport:popup' => 'Diese Entität kann nicht richtig angezeigt werden. Dies kann daran liegen, dass dafür ein Plugin benötigt wird, das nicht mehr installiert ist.',
+ 'entity:delete:success' => 'Die Entität %s wurde gelöscht',
+ 'entity:delete:fail' => 'Die Entität %s konnte nicht gelöscht werden',
+ 'actiongatekeeper:missingfields' => 'Der Form fehlt der __token und/oder __ts Eintrag',
+ 'actiongatekeeper:tokeninvalid' => 'Es ist ein Fehler aufgetreten (Token mismatch - ungültiges Token). Ursache dafür ist wahrscheinlich, dass das Authentifizierungs-Token für die Seite, die Du betrachtet hast, abgelaufen ist. Bitte lade die Seite neu und versuche es noch einmal.',
+ 'actiongatekeeper:timeerror' => 'Das Authentifizierungs-Token für die die Seite, die Du betrachtet hast, ist abgelaufen. Bitte lade die Seite neu und versuche es noch einmal.',
+ 'actiongatekeeper:pluginprevents' => 'Durch eine installierte Erweiterung wurde die Ãœbertragung dieser Form verhindert.',
+ 'word:blacklist' => 'und, der, die, das, den, dem, des, ein, eine, eines, einen, einem, einer, dann, aber, sie, er, es, ihr, ihm, ihres, ihrer, ihrem, ihren, sein, seiner, seines, seinem, seinen, nicht, also, über, jetzt, deshalb, daher, darum, demzufolge, deswegen, folglich, somit, allerdings, immer, noch, ebenso, andernfalls, umgekehrt, eher, infolgedessen, darüberhinaus, darüber, hinaus, trotzdem, dennoch, anstatt, stattdessen, inzwischen, mittlerweile, unterdessen, dementsprechend, dies, dieser, dieses, diesem, diesen, was, wem, wessen, deren, dessen',
+ 'tag_names:tags' => 'Tags',
+ 'tags:site_cloud' => 'Tagcloud',
+ 'js:security:token_refresh_failed' => 'Verbindung mit %s fehlgeschlagen. Eventuell gibt es Probleme beim Speichern neuer Inhalte.',
+ 'js:security:token_refreshed' => 'Verbindung mit %s wiederhergestellt!',
+ 'aa' => 'Afar',
+ 'ab' => 'Abchasisch',
+ 'af' => 'Afrikaans',
+ 'am' => 'Amharisch',
+ 'ar' => 'Arabisch',
+ 'as' => 'Assamesisch',
+ 'ay' => 'Aymara',
+ 'az' => 'Aserbaidschanisch',
+ 'ba' => 'Baschkirisch',
+ 'be' => 'Weissrussisch',
+ 'bg' => 'Bulgarisch',
+ 'bh' => 'Bihari',
+ 'bi' => 'Bislama',
+ 'bn' => 'Bengalisch',
+ 'bo' => 'Tibetisch',
+ 'br' => 'Bretonisch',
+ 'ca' => 'Katalanisch',
+ 'co' => 'Korsisch',
+ 'cs' => 'Tschechisch',
+ 'cy' => 'Walisisch',
+ 'da' => 'Dänisch',
+ 'de' => 'Deutsch',
+ 'dz' => 'hutanisch',
+ 'el' => 'Griechisch',
+ 'en' => 'Englisch',
+ 'eo' => 'Esperanto',
+ 'es' => 'Spanisch',
+ 'et' => 'Estnisch',
+ 'eu' => 'Baskisch',
+ 'fa' => 'Persisch',
+ 'fi' => 'Finnisch',
+ 'fj' => 'Fidschi',
+ 'fo' => 'Färöisch',
+ 'fr' => 'Französisch',
+ 'fy' => 'Friesisch',
+ 'ga' => 'Irisch',
+ 'gd' => 'Schottisch / Gälisch',
+ 'gl' => 'Galizisch',
+ 'gn' => 'Guarani',
+ 'gu' => 'Gujarati',
+ 'he' => 'Hebräisch',
+ 'ha' => 'Hausa',
+ 'hi' => 'Hindi',
+ 'hr' => 'Kroatisch',
+ 'hu' => 'Ungarisch',
+ 'hy' => 'Armenisch',
+ 'ia' => 'Interlingua',
+ 'id' => 'Indonesisch',
+ 'ie' => 'Interlingue',
+ 'ik' => 'Inupiaq',
+ 'is' => 'Isländisch',
+ 'it' => 'Italienisch',
+ 'iu' => 'Inuit',
+ 'iw' => 'Hebräisch (obsolet)',
+ 'ja' => 'Japanisch',
+ 'ji' => 'Yiddish (obsolet)',
+ 'jw' => 'Javanisch',
+ 'ka' => 'Georgisch',
+ 'kk' => 'Kasachisch',
+ 'kl' => 'Grönländisch',
+ 'km' => 'Kambodschanisch',
+ 'kn' => 'Kanadisch',
+ 'ko' => 'Koreanisch',
+ 'ks' => 'Kashmiri',
+ 'ku' => 'Kurdisch',
+ 'ky' => 'Kirgisisch',
+ 'la' => 'Latein',
+ 'ln' => 'Lingala',
+ 'lo' => 'Laotisch',
+ 'lt' => 'Litauisch',
+ 'lv' => 'Lettisch',
+ 'mg' => 'Malagasy',
+ 'mi' => 'Maori',
+ 'mk' => 'Mazedonisch',
+ 'ml' => 'Malayalam',
+ 'mn' => 'Mongolisch',
+ 'mo' => 'Moldawisch',
+ 'mr' => 'Marathi',
+ 'ms' => 'Malaiisch',
+ 'mt' => 'Maltesisch',
+ 'my' => 'Burmanisch',
+ 'na' => 'Nauruisch',
+ 'ne' => 'Nepalesisch',
+ 'nl' => 'Niederländisch',
+ 'no' => 'Norwegisch',
+ 'oc' => 'Ossetisch',
+ 'om' => 'Oromo',
+ 'or' => 'Oriya',
+ 'pa' => 'Panjabi',
+ 'pl' => 'Polnisch',
+ 'ps' => 'Paschtunisch',
+ 'pt' => 'Portugiesisch',
+ 'qu' => 'Quechua',
+ 'rm' => 'Rätoromanisch',
+ 'rn' => 'Kirundi',
+ 'ro' => 'Rumänisch',
+ 'ru' => 'Russisch',
+ 'rw' => 'Kinyarwanda',
+ 'sa' => 'Sanskrit',
+ 'sd' => 'Sindhi',
+ 'sg' => 'Sangro',
+ 'sh' => 'Serbokroatisch',
+ 'si' => 'Singhalesisch',
+ 'sk' => 'Slowakisch',
+ 'sl' => 'Slowenisch',
+ 'sm' => 'Samoisch',
+ 'sn' => 'Shona',
+ 'so' => 'Somali',
+ 'sq' => 'Albanisch',
+ 'sr' => 'Serbisch',
+ 'ss' => 'Siswati',
+ 'st' => 'Sesotho',
+ 'su' => 'Sudanesisch',
+ 'sv' => 'Schwedisch',
+ 'sw' => 'Swahili',
+ 'ta' => 'Tamilisch',
+ 'te' => 'Tegulu',
+ 'tg' => 'Tadschikisch',
+ 'th' => 'Thailändisch',
+ 'ti' => 'Tigrinya',
+ 'tk' => 'Turkmenisch',
+ 'tl' => 'Tagalog',
+ 'tn' => 'Setswana',
+ 'to' => 'Tongaisch',
+ 'tr' => 'Türkisch',
+ 'ts' => 'Tsonga',
+ 'tt' => 'Tatarisch',
+ 'tw' => 'Twi',
+ 'ug' => 'Uigurisch',
+ 'uk' => 'Ukrainisch',
+ 'ur' => 'Urdu',
+ 'uz' => 'Uzbek',
+ 'vi' => 'Vietnamesisch',
+ 'vo' => 'Volapuk',
+ 'wo' => 'Wolof',
+ 'xh' => 'Xhosa',
+ 'yi' => 'Yiddish',
+ 'yo' => 'Yoruba',
+ 'za' => 'Zuang',
+ 'zh' => 'Chinesisch',
+ 'zu' => 'Zulu',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.custom_index.php b/mod/languages/languages/de/de.custom_index.php
new file mode 100644
index 000000000..b6699816f
--- /dev/null
+++ b/mod/languages/languages/de/de.custom_index.php
@@ -0,0 +1,11 @@
+<?php
+$de = array (
+ 'custom:bookmarks' => 'Neueste Lesezeichen',
+ 'custom:groups' => 'Neueste Gruppen',
+ 'custom:files' => 'Neueste Dateien',
+ 'custom:blogs' => 'Neueste Blog-Einträge',
+ 'custom:members' => 'Neueste Mitglieder',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.dashboard.php b/mod/languages/languages/de/de.dashboard.php
new file mode 100644
index 000000000..3b58fcf76
--- /dev/null
+++ b/mod/languages/languages/de/de.dashboard.php
@@ -0,0 +1,11 @@
+<?php
+$de = array (
+ 'dashboard:widget:group:title' => 'Gruppen-Aktivität',
+ 'dashboard:widget:group:desc' => 'Zeige die Aktivitäten in einer Deiner Gruppen an.',
+ 'dashboard:widget:group:select' => 'Wähle eine Gruppe',
+ 'dashboard:widget:group:noactivity' => 'In dieser Gruppe gibt es noch keine Aktivitäten.',
+ 'dashboard:widget:group:noselect' => 'Bearbeite dieses Widget, um eine Gruppe auszuwählen.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.developers.php b/mod/languages/languages/de/de.developers.php
new file mode 100644
index 000000000..ba85cf70c
--- /dev/null
+++ b/mod/languages/languages/de/de.developers.php
@@ -0,0 +1,43 @@
+<?php
+$de = array (
+ 'admin:develop_tools' => 'Entwickler-Werkzeuge',
+ 'admin:develop_tools:preview' => 'Theming-Sandbox',
+ 'admin:develop_tools:inspect' => 'Prüfen',
+ 'admin:developers' => 'Entwickler',
+ 'admin:developers:settings' => 'Einstellungen',
+ 'elgg_dev_tools:settings:explanation' => 'Prüfe die untenstehenden Entwicklungs- und Debug-Einstellungen. Einige dieser Einstellungen sind auch auf anderen Admin-Seiten verfügbar.',
+ 'developers:label:simple_cache' => 'Simple Cache aktivieren',
+ 'developers:help:simple_cache' => 'Deaktiviere den Datei-Cache während Entwicklungstests. Andernfalls werden Code-Änderungen an Views (inklusive CSS) nicht unmittelbar sichtbar sein.',
+ 'developers:label:debug_level' => 'Fehlerprotokoll-Level',
+ 'developers:help:debug_level' => 'Diese Einstellung legt fest, welche Details protokolliert werden. Siehe elgg_log() für mehr Informationen.',
+ 'developers:label:display_errors' => 'Fatal PHP Errors anzeigen',
+ 'developers:help:display_errors' => 'Standardmäßig unterdrückt die .htaccess-Datei von Elgg die Anzeige von Fatal Errors.',
+ 'developers:label:screen_log' => 'Protokolleinträge auf dem Bildschirm ausgeben',
+ 'developers:help:screen_log' => 'Diese Einstellung legt fest, ob die Ausgaben von elgg_log() und elgg_dump() im Browserfenster ausgegeben werden.',
+ 'developers:label:show_strings' => 'Sprach-Strings im Rohformat anzeigen',
+ 'developers:help:show_strings' => 'Diese Einstellung legt fest, ob die von elgg_echo() verwendeten Sprach-Strings angezeigt werden.',
+ 'developers:label:wrap_views' => 'Views einkapseln',
+ 'developers:help:wrap_views' => 'Diese Einstellung aktiviert die Einkapselung fast aller Views in HTML-Kommentare. Dies kann hilfreich sein, um den erzeugten HTML-Code einer View zuzuordnen.',
+ 'developers:label:log_events' => 'Events und Plugin Hooks protokollieren',
+ 'developers:help:log_events' => 'Einträge für Events und Plugin Hooks ins Log schreiben. Warnung: es gibt sehr viele davon bei jedem Seitenaufruf.',
+ 'developers:debug:off' => 'Aus',
+ 'developers:debug:error' => 'Fehler',
+ 'developers:debug:warning' => 'Warnung',
+ 'developers:debug:notice' => 'Anmerkung',
+ 'developers:inspect:help' => 'Konfiguration des Elgg-Frameworks prüfen.',
+ 'developers:event_log_msg' => '%s: \'%s, %s\' in %s',
+ 'theme_preview:general' => 'Einführung',
+ 'theme_preview:breakout' => 'Theme-Preview in ganzen Browserfenster anzeigen',
+ 'theme_preview:buttons' => 'Knöpfe',
+ 'theme_preview:components' => 'Komponenten',
+ 'theme_preview:forms' => 'Forms',
+ 'theme_preview:grid' => 'Grid',
+ 'theme_preview:icons' => 'Icons',
+ 'theme_preview:modules' => 'Module',
+ 'theme_preview:navigation' => 'Navigation',
+ 'theme_preview:typography' => 'Typographie',
+ 'developers:settings:success' => 'Einstellungen gespeichert',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.diagnostics.php b/mod/languages/languages/de/de.diagnostics.php
new file mode 100644
index 000000000..4d329eff0
--- /dev/null
+++ b/mod/languages/languages/de/de.diagnostics.php
@@ -0,0 +1,39 @@
+<?php
+$de = array (
+ 'diagnostics' => 'Systemdiagnose',
+ 'diagnostics:report' => 'Diagnose-Report',
+ 'diagnostics:description' => 'Der Diagnosereport, der im folgenden erstellt werden kann, kann zur Lösung bei allen mit Elgg auftretenden Problemen hilfreich sein und sollte zu allen gemeldeten Bugs beigefügt werden.',
+ 'diagnostics:download' => 'Report herunterladen',
+ 'diagnostics:header' => '========================================================================
+Elgg-Diagnose-Report
+Generiert %s von %s
+========================================================================
+
+',
+ 'diagnostics:report:basic' => '
+Elgg-Release %s, Version %s
+
+------------------------------------------------------------------------',
+ 'diagnostics:report:php' => '
+PHP info:
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:plugins' => '
+Einzelheiten zu den installierten Plugins:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:md5' => '
+Installierte Dateien und Prüfsummen:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:globals' => '
+Globale Variablen:
+
+%s
+------------------------------------------------------------------------',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.embed.php b/mod/languages/languages/de/de.embed.php
new file mode 100644
index 000000000..300712fcf
--- /dev/null
+++ b/mod/languages/languages/de/de.embed.php
@@ -0,0 +1,14 @@
+<?php
+$de = array (
+ 'embed:embed' => 'Einbetten',
+ 'embed:media' => 'Inhalt einbetten',
+ 'embed:instructions' => 'Klicke eine verfügbare Datei an, um sie in Deinen Eintrag einzubetten.',
+ 'embed:upload' => 'Medien hochladen',
+ 'embed:upload_type' => 'Dateityp: ',
+ 'embed:no_upload_content' => 'Keine Datei zum Hochladen ausgewählt!',
+ 'embed:no_section_content' => 'Keine Datei zum Einbetten vorhanden.',
+ 'embed:no_sections' => 'Es wurden keine Plugins gefunden, die das Einbetten von Inhalten unterstützen. Bitte den Admin der Community-Seite ein solches Plugin (oder auch entsprechend den Anforderungen ggf. mehrere) zu aktivieren.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.externalpages.php b/mod/languages/languages/de/de.externalpages.php
new file mode 100644
index 000000000..e8218f462
--- /dev/null
+++ b/mod/languages/languages/de/de.externalpages.php
@@ -0,0 +1,15 @@
+<?php
+$de = array (
+ 'expages' => 'Externe Seiten',
+ 'admin:appearance:expages' => 'Externe Seiten',
+ 'expages:about' => 'Impressum',
+ 'expages:terms' => 'AGBs',
+ 'expages:privacy' => 'Datenschutz',
+ 'expages:contact' => 'Kontakt',
+ 'expages:notset' => 'Diese Seite wurde noch nicht eingerichtet.',
+ 'expages:posted' => 'Dein Seiten-Eintrag wurde gespeichert.',
+ 'expages:error' => 'Beim Speichern der Seite ist ein Fehler aufgetreten.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.file.php b/mod/languages/languages/de/de.file.php
new file mode 100644
index 000000000..d9c9a4dac
--- /dev/null
+++ b/mod/languages/languages/de/de.file.php
@@ -0,0 +1,69 @@
+<?php
+$de = array (
+ 'file' => 'Dateien',
+ 'file:user' => 'Dateien von %s',
+ 'file:friends' => 'Dateien Deiner Freunde',
+ 'file:all' => 'Alle Dateien der Community',
+ 'file:edit' => 'Datei-Eintrag editieren',
+ 'file:more' => 'Weitere Dateien',
+ 'file:list' => 'Listen-Ansicht',
+ 'file:group' => 'Gruppen-Dateien',
+ 'file:gallery' => 'Gallerie-Ansicht',
+ 'file:gallery_list' => 'Gallerie- oder Listen-Ansicht',
+ 'file:num_files' => 'Anzahl der anzuzeigenden Dateien',
+ 'file:user:gallery' => 'Gallerie-Ansicht der Dateien von %s',
+ 'file:upload' => 'Datei hochladen',
+ 'file:replace' => 'Ersetzen der Datei (leer lassen, um Datei nicht zu ändern)',
+ 'file:list:title' => '%s\'s %s %s',
+ 'file:title:friends' => 'Freunde',
+ 'file:add' => 'Datei hochladen',
+ 'file:file' => 'Datei',
+ 'file:title' => 'Titel',
+ 'file:desc' => 'Beschreibung',
+ 'file:tags' => 'Tags',
+ 'file:list:list' => 'Zur Listen-Ansicht wechseln',
+ 'file:list:gallery' => 'Zur Gallerie-Ansicht wechseln',
+ 'file:types' => 'Hochgeladene Dateitypen',
+ 'file:type:' => 'Dateien',
+ 'file:type:all' => 'Alle Dateien',
+ 'file:type:video' => 'Videos',
+ 'file:type:document' => 'Dokumente',
+ 'file:type:audio' => 'Audio-Dateien',
+ 'file:type:image' => 'Bilder',
+ 'file:type:general' => 'Unbestimmte Dateien',
+ 'file:user:type:video' => 'Videos von %s',
+ 'file:user:type:document' => 'Dokumente von %s',
+ 'file:user:type:audio' => 'Audio-Dateien von %s',
+ 'file:user:type:image' => 'Bilder von %s',
+ 'file:user:type:general' => 'Unbestimmte Dateien von %s',
+ 'file:friends:type:video' => 'Videos Deiner Freunde',
+ 'file:friends:type:document' => 'Dokumente Deiner Freunde',
+ 'file:friends:type:audio' => 'Audio-Dateien Deiner Freunde',
+ 'file:friends:type:image' => 'Bilder Deiner Freunde',
+ 'file:friends:type:general' => 'Unbestimmte Dateien Deiner Freunde',
+ 'file:widget' => 'Datei-Widget',
+ 'file:widget:description' => 'Auflistung Deiner neuesten Dateien',
+ 'groups:enablefiles' => 'Gruppen-Dateien aktivieren',
+ 'file:download' => 'Download',
+ 'file:delete:confirm' => 'Bist Du sicher, dass Du diese Datei löschen willst?',
+ 'file:tagcloud' => 'Tagcloud',
+ 'file:display:number' => 'Anzahl der anzuzeigenden Dateien',
+ 'river:create:object:file' => '%s hat die Datei %s hochgeladen',
+ 'river:comment:object:file' => '%s kommentierte die Datei %s',
+ 'item:object:file' => 'Dateien',
+ 'file:newupload' => 'Eine neue Datei wurde hochgeladen.',
+ 'file:embed' => 'Medien einbetten',
+ 'file:embedall' => 'Alle',
+ 'file:saved' => 'Deine Datei wurde gespeichert.',
+ 'file:deleted' => 'Deine Datei wurde gelöscht.',
+ 'file:none' => 'Noch keine Dateien vorhanden.',
+ 'file:uploadfailed' => 'Entschuldigung, wir konnten Deine Datei nicht speichern.',
+ 'file:downloadfailed' => 'Entschuldigung, diese Datei ist derzeit nicht verfügbar.',
+ 'file:deletefailed' => 'Deine Datei konnte zu diesem Zeitpunkt nicht gelöscht werden.',
+ 'file:noaccess' => 'Du hast keine Berechtigung, um diesen Datei-Eintrag zu ändern.',
+ 'file:cannotload' => 'Beim Hochladen dieser Datei ist ein Fehler aufgetreten.',
+ 'file:nofile' => 'Du mußt eine Datei auswählen.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.garbagecollector.php b/mod/languages/languages/de/de.garbagecollector.php
new file mode 100644
index 000000000..7dfe84f0a
--- /dev/null
+++ b/mod/languages/languages/de/de.garbagecollector.php
@@ -0,0 +1,18 @@
+<?php
+$de = array (
+ 'garbagecollector:period' => 'Wie oft soll der Garbage Collector ausgeführt werden?',
+ 'garbagecollector:weekly' => 'Einmal pro Woche',
+ 'garbagecollector:monthly' => 'Einmal pro Monat',
+ 'garbagecollector:yearly' => 'Einmal pro Jahr',
+ 'garbagecollector' => 'GARBAGE COLLECTOR
+',
+ 'garbagecollector:done' => 'FERTIG
+',
+ 'garbagecollector:optimize' => 'Optimiere %s ',
+ 'garbagecollector:error' => 'FEHLER',
+ 'garbagecollector:ok' => 'OK',
+ 'garbagecollector:gc:metastrings' => 'Entfernen nicht-verlinkter Metastrings: ',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.groups.php b/mod/languages/languages/de/de.groups.php
new file mode 100644
index 000000000..efd99deec
--- /dev/null
+++ b/mod/languages/languages/de/de.groups.php
@@ -0,0 +1,204 @@
+<?php
+$de = array (
+ 'groups' => 'Gruppen',
+ 'groups:owned' => 'Von mir gegründete Gruppen',
+ 'groups:yours' => 'Meine Gruppen',
+ 'groups:user' => 'Gruppen von %s',
+ 'groups:all' => 'Alle Gruppen',
+ 'groups:add' => 'Starte eine neue Gruppe',
+ 'groups:edit' => 'Bearbeite Gruppen-Einstellungen',
+ 'groups:delete' => 'Lösche Gruppe',
+ 'groups:membershiprequests' => 'Verwalte Beitritts-Anfragen',
+ 'groups:invitations' => 'Einladungen zum Gruppenbeitritt',
+ 'groups:icon' => 'Gruppen-Icon (leer lassen, um nicht zu ändern)',
+ 'groups:name' => 'Gruppenname',
+ 'groups:username' => 'Kurzname der Gruppe (angezeigt in URLs, nur alphanumerische Zeichen)',
+ 'groups:description' => 'Beschreibung',
+ 'groups:briefdescription' => 'Kurzbeschreibung',
+ 'groups:interests' => 'Tags',
+ 'groups:website' => 'Webseite',
+ 'groups:members' => 'Gruppen-Mitglieder',
+ 'groups:members:title' => 'Mitglieder von %s',
+ 'groups:members:more' => 'Alle Mitglieder auflisten',
+ 'groups:membership' => 'Beschränkung des Gruppenbeitritts',
+ 'groups:access' => 'Zugangslevel',
+ 'groups:owner' => 'Gründer',
+ 'groups:widget:num_display' => 'Anzahl der anzuzeigenden Gruppen',
+ 'groups:widget:membership' => 'Gruppen-Mitgliedschaft',
+ 'groups:widgets:description' => 'Auflistung der Gruppen, in denen Du Mitglied bist, in Deinem Profil',
+ 'groups:noaccess' => 'Zugang zur Gruppe verweigert',
+ 'groups:permissions:error' => 'Du hast keine Berechtigung für diese Aktion.',
+ 'groups:ingroup' => 'in der Gruppe',
+ 'groups:cantedit' => 'Du kannst die Gruppen-Einstellungen nicht bearbeiten',
+ 'groups:saved' => 'Gruppe angelegt',
+ 'groups:featured' => 'Besondere Gruppen',
+ 'groups:makeunfeatured' => 'Aus "Besondere Gruppen" entfernen',
+ 'groups:makefeatured' => 'Zu "Besondere Gruppen" hinzufügen',
+ 'groups:featuredon' => '%s ist nun eine "Besondere Gruppe".',
+ 'groups:unfeatured' => '%s wurde aus der Liste der "Besonderen Gruppen" entfernt.',
+ 'groups:featured_error' => 'Ungültige Gruppe.',
+ 'groups:joinrequest' => 'Gruppenbeitritt beantragen',
+ 'groups:join' => 'Gruppe beitreten',
+ 'groups:leave' => 'Gruppe verlassen',
+ 'groups:invite' => 'Freunde einladen',
+ 'groups:invite:title' => 'Lade Deine Freunde ein, dieser Gruppe beizutreten',
+ 'groups:inviteto' => 'Freunde zur Gruppe \'%s\' einladen',
+ 'groups:nofriends' => 'Alle Deine Freunde wurden bereits zu dieser Gruppe eingeladen.',
+ 'groups:nofriendsatall' => 'Du hast leider noch keine Freunde, die Du einladen könntest!',
+ 'groups:viagroups' => 'via Gruppen',
+ 'groups:group' => 'Gruppe',
+ 'groups:search:tags' => 'Tag',
+ 'groups:search:title' => 'Suche nach Gruppen mit dem Tag \'%s\'',
+ 'groups:search:none' => 'Es wurden keine passenden Gruppen gefunden.',
+ 'groups:activity' => 'Letzte Aktivitäten der Gruppe',
+ 'groups:enableactivity' => 'Anzeige von "Letzte Aktivitäten der Gruppe" aktivieren',
+ 'groups:activity:none' => 'In dieser Gruppe gibt es noch keine Aktivitäten.',
+ 'groups:notfound' => 'Gruppe nicht gefunden',
+ 'groups:notfound:details' => 'Die angeforderte Gruppe existiert entweder nicht oder Du hast keine Zugangsberechtigung',
+ 'groups:requests:none' => 'Derzeit gibt es keine ausstehenden Anfragen für einen Beitritt zu dieser Gruppe.',
+ 'groups:invitations:none' => 'Derzeit gibt es keine unbeantworteten Einladungen zum Beitreten in diese Gruppe.',
+ 'item:object:groupforumtopic' => 'Diskussionsthemen',
+ 'groupforumtopic:new' => 'Neuen Eintrag im Diskussionsforum hinzufügen',
+ 'groups:count' => 'Verfügbare Gruppen',
+ 'groups:open' => 'Öffentliche Gruppe',
+ 'groups:closed' => 'Nicht-öffentliche Gruppe',
+ 'groups:member' => 'Mitglieder',
+ 'groups:searchtag' => 'Suche nach Gruppen via Tags',
+ 'groups:more' => 'Weitere Gruppen',
+ 'groups:none' => 'Keine Gruppen',
+ 'groups:access:private' => 'Nicht-öffentliche Gruppe - Gruppenbeitritt ist nur mit Einladung möglich',
+ 'groups:access:public' => 'Öffentliche Gruppe - jeder Benutzer kann der Gruppe beitreten',
+ 'groups:access:group' => 'Nur für Gruppenmitglieder',
+ 'groups:closedgroup' => 'Diese Gruppe ist nicht-öffentlich.',
+ 'groups:closedgroup:request' => 'Um dieser Gruppe beitreten zu dürfen, wähle bitte den Menueintrag "Gruppenbeitritt beantragen".',
+ 'groups:visibility' => 'Wer kann diese Gruppe sehen?',
+ 'groups:enableforum' => 'Gruppen-Diskussionsforum aktivieren',
+ 'groups:yes' => 'ja',
+ 'groups:no' => 'nein',
+ 'groups:lastupdated' => '%s zuletzt aktualisiert durch %s',
+ 'groups:lastcomment' => '%s zuletzt kommentiert durch %s',
+ 'discussion' => 'Diskussion',
+ 'discussion:add' => 'Neuen Eintrag im Diskussionsforum hinzufügen',
+ 'discussion:latest' => 'Neuester Diskussionsbeitrag',
+ 'discussion:group' => 'Gruppen-Diskussion',
+ 'discussion:none' => 'Es gibt noch keine Diskussionsbeiträge.',
+ 'discussion:reply:title' => 'Antwort von %s',
+ 'discussion:topic:created' => 'Der Diskussionsbeitrag wurde hinzugefügt.',
+ 'discussion:topic:updated' => 'Der Diskussionsbeitrag wurde aktualisiert.',
+ 'discussion:topic:deleted' => 'Der Diskussionsbeitrag wurde gelöscht.',
+ 'discussion:topic:notfound' => 'Der gewünschte Diskussionsbeitrag wurde leider nicht gefunden.',
+ 'discussion:error:notsaved' => 'Der Diskussionsbeitrag konnte nicht gespeichert werden.',
+ 'discussion:error:missing' => 'Es müssen sowohl der Titel als auch das Textfeld ausgefüllt werden.',
+ 'discussion:error:permissions' => 'Du hast keine Berechtigung für diese Aktion.',
+ 'discussion:error:notdeleted' => 'Der Diskussionsbeitrag konnte nicht gelöscht werden.',
+ 'discussion:reply:deleted' => 'Die Antwort im Diskussionsbeitrag wurde gelöscht.',
+ 'discussion:reply:error:notdeleted' => 'Die Antwort im Diskussionsbeitrag konnte nicht gelöscht werden.',
+ 'reply:this' => 'Antwort schreiben',
+ 'group:replies' => 'Antworten',
+ 'groups:forum:created' => '%s hinzugefügt mit %d Kommentaren',
+ 'groups:forum:created:single' => '%s hinzugefügt mit %d Antwort',
+ 'groups:forum' => 'Diskussion',
+ 'groups:addtopic' => 'Einen Diskussionsbeitrag hinzufügen',
+ 'groups:forumlatest' => 'Neueste Diskussionsbeiträge',
+ 'groups:latestdiscussion' => 'Neueste Diskussionsbeiträge',
+ 'groups:newest' => 'Neueste',
+ 'groups:popular' => 'Beliebt',
+ 'groupspost:success' => 'Deine Antwort wurde gespeichert',
+ 'groups:alldiscussion' => 'Neueste Diskussionsbeiträge',
+ 'groups:edittopic' => 'Diskussionsbeitrag bearbeiten',
+ 'groups:topicmessage' => 'Textinhalt des Diskussionsbeitrags',
+ 'groups:topicstatus' => 'Status des Beitrags',
+ 'groups:reply' => 'Einen Kommentar schreiben',
+ 'groups:topic' => 'Beitrag',
+ 'groups:posts' => 'Einträge',
+ 'groups:lastperson' => 'Letzte Person',
+ 'groups:when' => 'Wann',
+ 'grouptopic:notcreated' => 'Es wurden noch keine Diskussionsbeiträge erstellt.',
+ 'groups:topicopen' => 'Offen',
+ 'groups:topicclosed' => 'Geschlossen',
+ 'groups:topicresolved' => 'Aufgelöst',
+ 'grouptopic:created' => 'Dein Diskussionsbeitrag wurde gespeichert.',
+ 'groupstopic:deleted' => 'Beitrag wurde gelöscht.',
+ 'groups:topicsticky' => 'Sticky',
+ 'groups:topicisclosed' => 'Dieser Diskussionsbeitrag ist geschlossen.',
+ 'groups:topiccloseddesc' => 'Dieser Diskussionsbeitrag ist geschlossen und es können keine weiteren Kommentare hinzugefügt werden.',
+ 'grouptopic:error' => 'Dein Diskussionsbeitrag konnte nicht gespeichert werden. Bitte versuche es noche einmal oder wende Dich an einen Administrator.',
+ 'groups:forumpost:edited' => 'Die Änderungen an dem Diskussionsbeitrag wurden gespeichert.',
+ 'groups:forumpost:error' => 'Beim Speichern der Änderungen an dem Diskussionsbeitrag ist ein Fehler aufgetreten.',
+ 'groups:privategroup' => 'Dies ist eine nicht-öffentliche Gruppe. Der Beitritt zur Gruppe ist nur auf Anfrage möglich.',
+ 'groups:notitle' => 'Gruppen müssen einen Titel haben.',
+ 'groups:cantjoin' => 'Du kannst dieser Gruppe nicht beitreten.',
+ 'groups:cantleave' => 'Das Verlassen der Gruppe ist fehlgeschlagen.',
+ 'groups:removeuser' => 'Aus der Gruppe entfernen',
+ 'groups:cantremove' => 'Der Benutzer konnte nicht aus der Gruppe entfernt werden.',
+ 'groups:removed' => '%s wurde aus der Gruppe entfernt.',
+ 'groups:addedtogroup' => 'Der Benutzer wurde als Mitglied der Gruppe hinzugefügt.',
+ 'groups:joinrequestnotmade' => 'Die Anfrage zum Beitritt zur Gruppe ist fehlgeschlagen.',
+ 'groups:joinrequestmade' => 'Die Anfrage zum Beitritt zur Gruppe wurde gesendet.',
+ 'groups:joined' => 'Du bist der Gruppe beigetreten!',
+ 'groups:left' => 'Du hast die Gruppe verlassen.',
+ 'groups:notowner' => 'Entschuldigung, aber Du bist nicht der Gründer dieser Gruppe.',
+ 'groups:notmember' => 'Entschuldigung, aber Du bist kein Mitglied dieser Gruppe.',
+ 'groups:alreadymember' => 'Du bist bereits ein Mitglied dieser Gruppe!',
+ 'groups:userinvited' => 'Der Benutzer wurde eingeladen.',
+ 'groups:usernotinvited' => 'Die Einladung an den Benutzer konnte nicht gesendet werden.',
+ 'groups:useralreadyinvited' => 'Dieser Benutzer wurde bereits eingeladen.',
+ 'groups:invite:subject' => 'Hallo %s, Du wurdest eingeladen, der Gruppe %s beizutreten!',
+ 'groups:updated' => 'Letze Antwort von %s %s',
+ 'groups:started' => 'Gestartet von %s',
+ 'groups:joinrequest:remove:check' => 'Bist Du sicher, dass Du diese Anfrage zum Gruppenbeitritt löschen willst?',
+ 'groups:invite:remove:check' => 'Bist Du sicher, dass Du diese Einladung zum Gruppenbeitritt löschen willst?',
+ 'groups:invite:body' => 'Hallo %s,
+
+%s hat Dich eingeladen, der Gruppe \'%s\' beizutreten. Folge dem Link um Deine ausstehenden Einladungen zum Beitreten in Gruppen zu sehen:
+
+%s',
+ 'groups:welcome:subject' => 'Willkommen in der Gruppe %s!',
+ 'groups:welcome:body' => 'Hallo %s!
+
+Du bist nun ein Mitglied der Gruppe \'%s\'! Folge dem Link um einen Beitrag in der Gruppe zu schreiben!
+
+%s',
+ 'groups:request:subject' => '%s hat beantragt, der Gruppe %s beitreten zu dürfen',
+ 'groups:request:body' => 'Hallo %s,
+
+%s hat beantragt, der Gruppe %s beitreten zu dürfen. Folge dem Link um ihr/sein Profil zu sehen:
+
+%s
+
+oder folge dem nächsten Link, um die ausstehenden Anfragen zum Gruppenbeitritt zu sehen:
+
+%s',
+ 'river:create:group:default' => '%s hat die Gruppe %s gegründet.',
+ 'river:join:group:default' => '%s ist der Gruppe %s beigetreten.',
+ 'river:create:object:groupforumtopic' => '%s schrieb einen neuen Diskussionsbeitrag %s',
+ 'river:reply:object:groupforumtopic' => '%s schrieb einen Kommentar zum Diskussionsbeitrag %s',
+ 'groups:nowidgets' => 'Für diese Gruppe wurden keine Widgets aktiviert.',
+ 'groups:widgets:members:title' => 'Mitglieder der Gruppen',
+ 'groups:widgets:members:description' => 'Zeige die Mitglieder einer Gruppe an.',
+ 'groups:widgets:members:label:displaynum' => 'Zeige die Mitglieder einer Gruppe an.',
+ 'groups:widgets:members:label:pleaseedit' => 'Bitte konfiguriere dieses Widget.',
+ 'groups:widgets:entities:title' => 'Objekte in der Gruppe',
+ 'groups:widgets:entities:description' => 'Zeige die Objekte an, die in dieser Gruppe gespeichert sind.',
+ 'groups:widgets:entities:label:displaynum' => 'Zeige die Objekte einer Gruppe an.',
+ 'groups:widgets:entities:label:pleaseedit' => 'Bitte konfiguriere dieses Widget.',
+ 'groups:forumtopic:edited' => 'Diskussionsbeitrag wurde aktualisiert.',
+ 'groups:allowhiddengroups' => 'Möchtest Du private (versteckte) Gruppen zulassen?',
+ 'group:deleted' => 'Die Gruppe und der Inhalt der Gruppe wurde gelöscht.',
+ 'group:notdeleted' => 'Die Gruppe konnte nicht gelöscht werden.',
+ 'group:notfound' => 'Die Gruppe wurde nicht gefunden.',
+ 'grouppost:deleted' => 'Der Gruppenbeitrag wurde gelöscht.',
+ 'grouppost:notdeleted' => 'Der Gruppenbeitrag konnte nicht gelöscht werden.',
+ 'groupstopic:notdeleted' => 'Beitrag konnte nicht gelöscht werden.',
+ 'grouptopic:blank' => 'Kein Titel eingegeben oder leerer Textinhalt.',
+ 'grouptopic:notfound' => 'Dieser Beitrag konnte nicht gefunden werden.',
+ 'grouppost:nopost' => 'Leerer Beitrag.',
+ 'groups:deletewarning' => 'Bist Du sicher, dass Du diese Gruppe löschen willst? Dies kann nicht rückgängig gemacht werden!',
+ 'groups:invitekilled' => 'Die Einladung wurde gelöscht.',
+ 'groups:joinrequestkilled' => 'Der Antrag zum Gruppenbeitritt wurde gelöscht.',
+ 'groups:ecml:discussion' => 'Gruppen-Diskussionen',
+ 'groups:ecml:groupprofile' => 'Gruppen-Profile',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.install.php b/mod/languages/languages/de/de.install.php
new file mode 100644
index 000000000..8e169a088
--- /dev/null
+++ b/mod/languages/languages/de/de.install.php
@@ -0,0 +1,156 @@
+<?php
+/**
+ * Installer German Language
+ *
+ * @package ElggLanguage
+ * @subpackage Installer
+ */
+
+$german = array(
+ 'install:title' => 'Elgg-Installation',
+ 'install:welcome' => 'Wilkommen',
+ 'install:requirements' => 'Überprüfung der Systemvoraussetzungen',
+ 'install:database' => 'Installation der Datenbank',
+ 'install:settings' => 'Konfiguration der Seite',
+ 'install:admin' => 'Erstellung des Administrator-Accounts',
+ 'install:complete' => 'Fertig',
+
+ 'install:welcome:instructions' => "Die Installation von Elgg besteht aus 6 einfachen Schritten und der erste Schritt davon ist das Lesen dieser Begrüßung!
+
+Wenn Du es nicht bereits getan hast, lies bitte die mitgelieferten Installations-Hinweise (oder rufe die Hinweise auf indem Du dem Link am Ende dieser Seite folgst).
+
+Wenn Du bereits bist, um fortzufahren, klicke auf den 'Weiter'-Knopf.",
+ 'install:requirements:instructions:success' => "Dein Server hat die Überprüfung der Systemvoraussetzungen bestanden.",
+ 'install:requirements:instructions:failure' => "Dein Server erfüllt nicht alle notwendigen Systemvoraussetzungen. Nachdem Du die im folgenden aufgelisteten Probleme beseitigt hast, lade diese Seite erneut. Folge den Links am Ende der Seite, um weitere Informationen zu möglichen Problemlösungen zu erhalten.",
+ 'install:requirements:instructions:warning' => "Dein Server hat die Überprüfung der Systemvoraussetzungen bestanden, aber es gab mindestens eine Warnmeldung. Wir empfehlen, dass Du die Hinweise zu Installationsproblemen liest, um mehr darüber zu erfahren.",
+
+ 'install:require:php' => 'PHP',
+ 'install:require:rewrite' => 'Webserver',
+ 'install:require:settings' => 'Konfigurationsdatei',
+ 'install:require:database' => 'Datenbank',
+
+ 'install:check:root' => 'Aufgrund fehlender Schreibberechtigung ist es leider nicht möglich, auf Deinem Server im Hauptverzeichnis der Elgg-Installation die Datei .htaccess zu erzeugen. Du hast zwei Möglichkeiten:
+
+ 1. Ändere (während der Installation) die Schreibberechtigungen für das Elgg-Hauptverzeichnis,
+
+ 2. Lege die Datei .htaccess selbst an, indem Du die Datei namens htaccess_dist zu .htaccess kopierst.',
+
+ 'install:check:php:version' => 'Elgg benötigt PHP in Version %s oder neuer. Dieser Server verwendet Version %s.',
+ 'install:check:php:extension' => 'Elgg benötigt die PHP-Erweiterung %s.',
+ 'install:check:php:extension:recommend' => 'Es wird empfohlen, dass die PHP-Erweiterung %s auf dem Server installiert ist.',
+ 'install:check:php:open_basedir' => 'Die auf dem Server gesetzte PHP-Einstellung für open_basedir verhindert möglicherweise, dass Elgg Daten in seinem Datenverzeichnis speichern kann.',
+ 'install:check:php:safe_mode' => 'Es wird nicht empfohlen, PHP im Safe Mode zu verwenden, da dies zu Problemen mit Elgg führen kann.',
+ 'install:check:php:arg_separator' => 'Das von PHP verwendete Trennzeichen arg_separator.output muss \'&\' sein, damit Elgg einwandfrei funktioniert. Das eingestellte Trennzeichen auf Deinem Server ist aber \'%s\'',
+ 'install:check:php:register_globals' => 'Register globals muss auf dem Server ausgeschaltet sein, d.h. der Wert der PHP-Variable register_globals muss \'0\' sein.',
+ 'install:check:php:session.auto_start' => "Auf dem Server muss session.auto_start ausgeschaltet sein, damit Elgg einwandfrei funktioniert. Ändere diese Einstellung entweder in der PHP-Konfiguration php.ini oder setze den Wert dieser PHP-Variable in der .htaccess-Datei von Elgg.",
+
+ 'install:check:enginedir' => 'Aufgrund fehlender Schreibberechtigung ist es leider nicht möglich, auf Deinem Server im \'engine\'-Unterverzeichnis die Datei settings.php zu erzeugen. Du hast zwei Möglichkeiten:
+
+ 1. Ändere (während der Installation) die Schreibberechtigungen für das \'engine\'-Unterverzeichnis
+
+ 2. Lege die Datei settings.php selbst an, indem Du die Datei namens settings.example.php zu settings.php kopierst. Folge dann den Anweisungen in der Datei, um die Verbindungsparameter für Deine Datenbank einzutragen.',
+ 'install:check:readsettings' => 'Im \'engine\'-Unterverzeichnis ist eine Konfigurationsdatei settings.php vorhanden, aber es fehlt die notwendige Leseberechtigung. Du kannst entweder die Datei löschen, damit sie neu angelegt werden kann oder Du kannst die Leseberechtigungen der Datei anpassen.',
+
+ 'install:check:php:success' => "Die PHP-Konfiguration auf Deinem Server erfüllt alle notwendigen Voraussetzungen für Elgg.",
+ 'install:check:rewrite:success' => 'Die Überprüfung der konfigurierten rewrite-Regeln war erfolgreich.',
+ 'install:check:database' => 'Die Voraussetzungen für den Datenbank-Server werden überprüft, sobald Elgg seine Datenbank lädt.',
+
+ 'install:database:instructions' => "Wenn Du nicht bereits eine Datenbank für Elgg angelegt hast, mache dies bitte jetzt. Trage dann die Verbindungsparameter unten ein, damit Elgg die Datenbank initialisieren kann.",
+ 'install:database:error' => 'Bei der Initialisierung der Datenbank ist ein Problem aufgetreten und die Installation kann nicht fortgesetzt werden. Lies bitte die oben angezeigte Meldung und korrigiere die fehlerhaften Einstellungen. Wenn Du weitere Hilfe dafür benötigst, folge dem Link am Ende der Seite, um weitere Informationen zu möglichen Problemlösungen zu erhalten oder bitte in den Elgg-Community-Foren um Hilfe.',
+
+ 'install:database:label:dbuser' => 'Datenbank-Benutzername',
+ 'install:database:label:dbpassword' => 'Datenbank-Passwort',
+ 'install:database:label:dbname' => 'Datenbank-Name',
+ 'install:database:label:dbhost' => 'Datenbank-Host',
+ 'install:database:label:dbprefix' => 'Tabellen-Prefix',
+
+ 'install:database:help:dbuser' => 'Der Benutzername des MySQL-Accounts, der alle notwendigen Zugriffsprivilegien für die von Elgg zu verwendende Datenbank hat',
+ 'install:database:help:dbpassword' => 'Das Passwort für den zu verwendeten Benutzeraccount',
+ 'install:database:help:dbname' => 'Der Name der von zu verwendenden Datenbank',
+ 'install:database:help:dbhost' => 'Der Hostname des MySQL-Servers (normalerweise \'localhost\')',
+ 'install:database:help:dbprefix' => "Das Tabellen-Prefix das bei allen Elgg-Tabellen in der Datenbank gesetzt wird (normalerweise \'elgg_\')",
+
+ 'install:settings:instructions' => 'Für die weitere Konfiguration der Elgg-Seite benötigen wir einige Eingaben. Wenn Du noch kein\'t <a href="http://docs.elgg.org/wiki/Data_directory" target="_blank">Elgg-Datenverzeichnis</a> angelegt hast, mußt Du dies jetzt tun.',
+
+ 'install:settings:label:sitename' => 'Seiten-Name',
+ 'install:settings:label:siteemail' => 'Email-Adresse',
+ 'install:settings:label:wwwroot' => 'URL der Seite',
+ 'install:settings:label:path' => 'Elgg-Installationsverzeichnis',
+ 'install:settings:label:dataroot' => 'Datenverzeichnis',
+ 'install:settings:label:language' => 'Sprache der Seite',
+ 'install:settings:label:siteaccess' => 'Standard-Zugangslevel',
+ 'install:label:combo:dataroot' => 'Datenverzeichnis von Elgg anlegen lassen',
+
+ 'install:settings:help:sitename' => 'Der Name Deiner neuen Elgg Community-Seite',
+ 'install:settings:help:siteemail' => 'Die Email-Adresse die von Elgg für die Kommunikation mit Benutzern verwendet wird',
+ 'install:settings:help:wwwroot' => 'Die Adresse der Community-Seite (Elgg kann sie in den meisten Fällen korrekt erkennen)',
+ 'install:settings:help:path' => 'Das Verzeichnis auf dem Server, in das Du den Elgg-Code kopiert hast (Elgg kann es in den meisten Fällen korrekt erkennen)',
+ 'install:settings:help:dataroot' => 'Das Verzeichnis, das Du auf dem Server angelegt hast, in dem Elgg Dateien speichern kann (die Zugriffrechte werden beim Klicken auf den "Weiter"-Knopf überprüft)',
+ 'install:settings:help:dataroot:apache' => 'Du hast die Wahl, Elgg das Datenverzeichnis für die Speicherung von Benutzer-Dateien anlegen zu lassen oder den Pfad zum bereits angelegten Datenverzeichnis einzugeben (die Zugriffrechte dieses Verzeichnisses werden beim Klicken auf den "Weiter"-Knopf überprüft)',
+ 'install:settings:help:language' => 'Die Standardsprache für Deine Community-Seite',
+ 'install:settings:help:siteaccess' => 'Der Standard-Zugangslevel für neu von Benutzern erzeugte Inhalte',
+
+ 'install:admin:instructions' => "Nun ist es Zeit, einen Administrator-Account anzulegen.",
+
+ 'install:admin:label:displayname' => 'Name',
+ 'install:admin:label:email' => 'Email-Adresse',
+ 'install:admin:label:username' => 'Benutzername',
+ 'install:admin:label:password1' => 'Passwort',
+ 'install:admin:label:password2' => 'Passwort',
+
+ 'install:admin:help:displayname' => 'Der Name, der auf der Community-Seite für diesen Benutzeraccount angezeigt wird',
+ 'install:admin:help:email' => '',
+ 'install:admin:help:username' => 'Benutzername des Account, der für die Anmeldung verwendet wird',
+ 'install:admin:help:password1' => "Das Passwort muss mindestens %u Zeichen lang sein",
+ 'install:admin:help:password2' => 'Gebe das Password zur Bestätigung erneut ein',
+
+ 'install:admin:password:mismatch' => 'Passwort muss bei beiden Eingaben übereinstimmen.',
+ 'install:admin:password:empty' => 'Das Passwort-Feld muss ausgefüllt werden.',
+ 'install:admin:password:tooshort' => 'Dein Passwort war zu kurz.',
+ 'install:admin:cannot_create' => 'Die Erzeugung des Administrator-Accounts ist fehlgeschlagen.',
+
+ 'install:complete:instructions' => 'Die Installation Deiner Elgg Community-Seite ist nun abgeschlossen. Klicke auf den Knopf unten, um zur Startseite weitergeleitet zu werden.',
+ 'install:complete:gotosite' => 'Zur Seite gehen',
+
+ 'InstallationException:UnknownStep' => '%s ist ein unbekannter Installationsschritt.',
+
+ 'install:success:database' => 'Die Datenbank wurde initialisiert.',
+ 'install:success:settings' => 'Die Seiten-Einstellungen wurden gespeichert.',
+ 'install:success:admin' => 'Der Administrator-Account wurde angelegt.',
+
+ 'install:error:htaccess' => 'Das Erzeugen der .htaccess-Datei ist fehlgeschlagen.',
+ 'install:error:settings' => 'Die settings-Datei konnte nicht erzeugt werden.',
+ 'install:error:databasesettings' => 'Elgg konnte mit den eingegebenen Verbindungsparametern keine Verbindung mit der Datenbank herstellen.',
+ 'install:error:oldmysql' => 'Voraussetzung für Elgg ist MySQL in Version 5.0 oder neuer. Dein Server verwendet Version %s.',
+ 'install:error:nodatabase' => 'Der Zugriff auf die Datenbank %s ist nicht möglich. Möglicherweise ist die Datenbank nicht vorhanden.',
+ 'install:error:cannotloadtables' => 'Der Zugriff auf die Tabellen der Datenbank ist nicht möglich.',
+ 'install:error:tables_exist' => 'In der Datenbank ist bereits eine Elgg-Tabellenstruktur vorhanden. Du mußt entweder diese Tabellen aus der Datenbank löschen oder die Installation neu starten. Bei einem Neustart kann versucht werden, die bestehende Tabellenstruktur zu verwenden. Um die Installation neu zu starten, entferne \'?step=database\' aus der URL in der Adressleiste Deines Browsers und drücke \'Enter\'.',
+ 'install:error:readsettingsphp' => 'Die Datei engine/settings.example.php ist nicht lesbar.',
+ 'install:error:writesettingphp' => 'Die Datei engine/settings.php kann nicht geschrieben werden.',
+ 'install:error:requiredfield' => '%s ist eine notwendige Eingabe.',
+ 'install:error:datadirectoryexists' => 'Dein Datenverzeichnis %s ist nicht vorhanden.',
+ 'install:error:writedatadirectory' => 'Dein Webserver hat keine Schreibberechtigung für das Datenverzeichnis %s.',
+ 'install:error:locationdatadirectory' => 'Dein Datenverzeichnis %s muss aus Sicherheitsgründen außerhalb des Installationspfades von Elgg sein.',
+ 'install:error:emailaddress' => '%s ist keine zulässige Email-Adresse.',
+ 'install:error:createsite' => 'Das Erstellen der Community-Seite ist fehlgeschlagen.',
+ 'install:error:savesitesettings' => 'Das Speichern der Seiteneinstellungen ist fehlgeschlagen.',
+ 'install:error:loadadmin' => 'Der Administrator-Account kann nicht geladen werden.',
+ 'install:error:adminaccess' => 'Das Zuweisen von Administrator-Privilegien an den neuen Benutzeraccount ist fehlgeschlagen.',
+ 'install:error:adminlogin' => 'Das automatische Anmelden des neuen Administrator-Benutzers ist fehlgeschlagen.',
+ 'install:error:rewrite:apache' => 'Die Überprüfung Deines Servers hat ergeben, dass der Apache-Webserver verwendet wird.',
+ 'install:error:rewrite:nginx' => 'Die Überprüfung Deines Servers hat ergeben, dass der Nginx-Webserver verwendet wird.',
+ 'install:error:rewrite:lighttpd' => 'Die Überprüfung Deines Servers hat ergeben, dass der Lighttpd-Webserver verwendet wird.',
+ 'install:error:rewrite:iis' => 'Die Überprüfung Deines Servers hat ergeben, dass der IIS-Webserver verwendet wird.',
+ 'install:error:rewrite:allowoverride' => "Der Rewrite-Test ist fehlgeschlagen. Die wahrscheinlichste Ursache ist, dass für das Elgg-Installationsverzeichnis 'AllowOverride All' nicht gesetzt ist. Die verhindert, dass der Apache-Webserver die Einstellungen in der Datei .htaccess verarbeiten kann, in welcher die Rewrite-Regeln gesetzt werden.
+ \n\nEine andere mögliche Ursache ist, dass in der Konfiguration des Apache-Webservers ein Alias für Dein Elgg-Installationsverzeichnis definiert ist. Dann mußt Du in der Datei .htaccess die richtige Einstellung für RewriteBase setzen. In der Datei .htaccess in Deinem Elgg-Installationsverzeichnis sind weitere Hinweise, was zu tun ist.",
+ 'install:error:rewrite:htaccess:write_permission' => 'Dein Webserver hat keine Berechtigung, um im Elgg-Installationsverzeichnis die Datei .htaccess zu erzeugen. Du mußt entweder die Zugriffsberechtigungen anpassen oder selbst die Datei .htaccess anlegen, indem Du die Datei namens htaccess_dist zu .htaccess kopierst.',
+ 'install:error:rewrite:htaccess:read_permission' => 'Im Elgg-Installationsverzeichnis ist die Datei .htaccess vorhanden, aber Dein Webserver hat keine Leseberechtigung für diese Datei.',
+ 'install:error:rewrite:htaccess:non_elgg_htaccess' => 'Im Elgg-Installationsverzeichnis ist eine Datei namens .htaccess, die nicht von Elgg angelegt wurde. Bitte entferne diese Datei.',
+ 'install:error:rewrite:htaccess:old_elgg_htaccess' => 'Im Elgg-Installationsverzeichnis scheint eine veraltete .htaccess-Datei vorhanden zu sein. Sie enthält nicht die Rewrite-Regeln für das Überprüfen des Webservers.',
+ 'install:error:rewrite:htaccess:cannot_copy' => 'Beim Erzeugen der Datei .htaccess im Elgg-Installationsverzeichnis ist ein unbekannter Fehler aufgetreten. Du mußt die Datei .htaccess selbst anlegen, indem Du die Datei namens htaccess_dist zu .htaccess kopierst.',
+ 'install:error:rewrite:altserver' => 'Der Test der Rewrite-Regeln ist fehlgeschlagen. Du mußt die Rewrite-Regeln von Elgg selbst zur Konfiguration Deines Webservers hinzufügen und es dann wieder versuchen.',
+ 'install:error:rewrite:unknown' => 'Uups. Es war nicht möglich festzustellen, welches Webserver-Programm auf Deinem Server verwendet wird. Darüber hinaus ist der Test der Rewrite-Regeln von Elgg fehlgeschlagen. Es ist leider nicht möglich, spezifischere Hinweise zu den Ursachen des Problems zu geben. Bitte folge dem Link zu Hinweisen bei Installationsproblemen.',
+ 'install:warning:rewrite:unknown' => 'Dein Server unterstützt die automatische Prüfung von Rewrite-Regeln nicht. Du kannst die Installation fortsetzen, aber es kann sein, das Deine Community-Seite nicht einwandfrei funktionieren wird. Du kannst die Überprüfung der Rewrite-Regeln selbst durchführen, indem Du diesem Link folgst: <a href="%s" target="_blank">Test</a>. Du wirst die Meldung \'success\' bekommen, wenn die Rewrite-Regeln funktionieren.',
+);
+
+add_translation("de", $german); \ No newline at end of file
diff --git a/mod/languages/languages/de/de.invitefriends.php b/mod/languages/languages/de/de.invitefriends.php
new file mode 100644
index 000000000..9b2472c54
--- /dev/null
+++ b/mod/languages/languages/de/de.invitefriends.php
@@ -0,0 +1,30 @@
+<?php
+$de = array (
+ 'friends:invite' => 'Freunde einladen',
+ 'invitefriends:registration_disabled' => 'Die Registrierung von neuen Mitgliedern wurde auf dieser Community-Seite deaktiviert. Du kannst daher leider keine neuen Mitglieder einladen.',
+ 'invitefriends:introduction' => 'Um Deine Freunde einzuladen, dieser Community-Seite beizutreten, geben im Folgenden deren Email-Adressen ein (eine Adresse pro Zeile):',
+ 'invitefriends:message' => 'Gebe eine Nachricht ein, die mit der Einladung zusammen versendet wird:',
+ 'invitefriends:subject' => 'Einladung für die Community-Webseite %s',
+ 'invitefriends:success' => 'Die Einladungen an Deine Freunde wurden versendet.',
+ 'invitefriends:invitations_sent' => 'Versendete Einladungen: %s. Es traten folgende Probleme auf:',
+ 'invitefriends:email_error' => 'Die folgenden Email-Adressen sind ungültig: %s',
+ 'invitefriends:already_members' => 'Die folgenden Leute sind bereits Mitglied der Community: %s',
+ 'invitefriends:noemails' => 'Es wurden keine Email-Adressen eingegeben.',
+ 'invitefriends:message:default' => '
+Hallo,
+
+Ich möchte Dich einladen, meiner Community-Seite %s beizutreten.',
+ 'invitefriends:email' => '
+Durch wurdest eingeladen, der Community-Seite %s beizutreten. Die Einladung wurde von %s versendet. Die folgende Nachricht wurde der Einladung beigefügt:
+
+%s
+
+Um der Community-Seite beizutreten, folge dem folgenden Link:
+
+%s
+
+Nachdem Du einen Account auf der Community-Seite erstellt hast, wirst das Mitglied, das Dich eingeladen hat, automatisch in Deine Freundesliste aufgenommen.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.likes.php b/mod/languages/languages/de/de.likes.php
new file mode 100644
index 000000000..de145c437
--- /dev/null
+++ b/mod/languages/languages/de/de.likes.php
@@ -0,0 +1,36 @@
+<?php
+$de = array (
+ 'likes:this' => 'gefällt das',
+ 'likes:deleted' => 'Dein "Gefällt mir" wurde entfernt.',
+ 'likes:see' => 'Nachschauen, wem das gefällt',
+ 'likes:remove' => 'Gefällt mir nicht mehr',
+ 'likes:notdeleted' => 'Beim Entfernen Deines "Gefällt mir" ist ein Problem aufgetreten.',
+ 'likes:likes' => 'Der Beitrag wurde als "Gefällt mir" markiert.',
+ 'likes:failure' => 'Beim "Gefällt mir"-Markieren dieses Beitrags ist ein Problem aufgetreten.',
+ 'likes:alreadyliked' => 'Du hast diesen Beitrag bereits zuvor als "Gefällt mir" markiert.',
+ 'likes:notfound' => 'Der Beitrag, der Die gefällt, kann leider nicht gefunden werden.',
+ 'likes:likethis' => 'Gefällt mir',
+ 'likes:userlikedthis' => '%s gefällt',
+ 'likes:userslikedthis' => '%s gefällt',
+ 'likes:river:annotate' => 'gefällt',
+ 'river:likes' => 'gefällt %s %s',
+ 'likes:notifications:subject' => '%s gefällt Dein Beiträg "%s"',
+ 'likes:notifications:body' => 'Hallo %1$s,
+
+%2$s gefällt Dein Beitrag "%3$s" auf %4$s.
+
+Um Deinen ursprünglichen Beitrag aufzurufen, folge diesem Link:
+
+%5$s
+
+Um das Profil von %2$s aufzurufen, folge diesem Link:
+
+%6$s
+
+Danke,
+%4$s
+',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.logbrowser.php b/mod/languages/languages/de/de.logbrowser.php
new file mode 100644
index 000000000..85afea562
--- /dev/null
+++ b/mod/languages/languages/de/de.logbrowser.php
@@ -0,0 +1,20 @@
+<?php
+$de = array (
+ 'admin:administer_utilities:logbrowser' => 'Logdatei-Browser',
+ 'logbrowser' => 'Logdatei-Browser',
+ 'logbrowser:browse' => 'Systemlog-Datei durchsuchen',
+ 'logbrowser:search' => 'Angezeigte Logeinträge einschränken',
+ 'logbrowser:user' => 'Logeinträge für den folgenden Benutzernamen anzeigen',
+ 'logbrowser:starttime' => 'Logeinträge ab (Eingabe nur in Englisch möglich, z.B. "last monday", "1 hour ago")',
+ 'logbrowser:endtime' => 'Logeinträge bis',
+ 'logbrowser:explore' => 'Logdatei durchsuchen',
+ 'logbrowser:date' => 'Datum und Zeit',
+ 'logbrowser:user:name' => 'Benutzer',
+ 'logbrowser:user:guid' => 'Benutzer-GUID',
+ 'logbrowser:object' => 'Objekt-Typ',
+ 'logbrowser:object:guid' => 'Objekt-GUID',
+ 'logbrowser:action' => 'Aktion',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.logrotate.php b/mod/languages/languages/de/de.logrotate.php
new file mode 100644
index 000000000..68d7dc64f
--- /dev/null
+++ b/mod/languages/languages/de/de.logrotate.php
@@ -0,0 +1,22 @@
+<?php
+$de = array (
+ 'logrotate:period' => 'Wie oft sollen die Einträge im Systemlog archiviert werden?',
+ 'logrotate:weekly' => 'Einmal pro Woche',
+ 'logrotate:monthly' => 'Einmal pro Monat',
+ 'logrotate:yearly' => 'Einmal pro Jahr',
+ 'logrotate:logrotated' => 'Die alten Einträge in der Logdatei wurden archiviert.
+',
+ 'logrotate:lognotrotated' => 'Beim Archivieren der alten Einträge in der Logdatei ist ein Fehler aufgetreten.
+',
+ 'logrotate:delete' => 'Löschen von archivierten Logs älter als',
+ 'logrotate:week' => 'eine Woche',
+ 'logrotate:month' => 'einen Monat',
+ 'logrotate:year' => 'ein Jahr',
+ 'logrotate:logdeleted' => 'Das Log wurde gelöscht.
+',
+ 'logrotate:lognotdeleted' => 'Beim Löschen des Logs ist ein Fehler aufgetreten.
+',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.members.php b/mod/languages/languages/de/de.members.php
new file mode 100644
index 000000000..5f9217565
--- /dev/null
+++ b/mod/languages/languages/de/de.members.php
@@ -0,0 +1,13 @@
+<?php
+$de = array (
+ 'members:label:newest' => 'Neueste',
+ 'members:label:popular' => 'Beliebt',
+ 'members:label:online' => 'Im Moment aktiv',
+ 'members:searchname' => 'Mitgliedersuche via Name',
+ 'members:searchtag' => 'Mitgliedersuche via Tags',
+ 'members:title:searchname' => 'Suche in Mitgliedern nach %s',
+ 'members:title:searchtag' => 'Suche nach Mitgliedern mit dem Tag %s',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.messageboard.php b/mod/languages/languages/de/de.messageboard.php
new file mode 100644
index 000000000..dce4499c6
--- /dev/null
+++ b/mod/languages/languages/de/de.messageboard.php
@@ -0,0 +1,43 @@
+<?php
+$de = array (
+ 'messageboard:board' => 'Nachrichten-Pinnwand',
+ 'messageboard:messageboard' => 'Nachrichten-Pinnwand',
+ 'messageboard:viewall' => 'Alle anzeigen',
+ 'messageboard:postit' => 'Anheften',
+ 'messageboard:history:title' => 'Ãœberblick',
+ 'messageboard:none' => 'Es gibt noch keine Nachrichten auf dieser Pinnwand',
+ 'messageboard:num_display' => 'Anzahl der anzuzeigenden Nachrichten',
+ 'messageboard:desc' => 'Dieses Widget ist eine Nachrichten-Pinnwand, die Du zu Deiner Profilseite hinzufügen kannst, damit andere Mitglieder Dir eine Nachricht hinterlassen können.',
+ 'messageboard:user' => 'Nachrichten-Pinnwand von %s',
+ 'messageboard:replyon' => 'antworten auf',
+ 'messageboard:history' => 'Ãœberblick',
+ 'messageboard:owner' => 'Nachrichten-Pinnwand von %s',
+ 'messageboard:owner_history' => 'Nachrichten von %s auf der Pinnwand von %s',
+ 'river:messageboard:user:default' => '%s schrieb eine Nachricht auf der Pinnwand von %s.',
+ 'messageboard:posted' => 'Deine Nachricht wurde auf der Pinnwand hinzugefügt.',
+ 'messageboard:deleted' => 'Die Nachricht wurde gelöscht.',
+ 'messageboard:email:subject' => 'Du hast eine neue Nachricht auf Deiner Pinnwand!',
+ 'messageboard:email:body' => 'Du hast eine neue Nachricht von %s auf Deiner Pinnwand. Die Nachricht lautet:
+
+
+%s
+
+
+Um Deine Pinnwand aufzurufen, folge dem Link:
+
+ %s
+
+Um das Profil von %s aufzurufen, folge dem Link:
+
+ %s
+
+Du kannst auf diese Email NICHT antworten.',
+ 'messageboard:blank' => 'Entschuldigung. Du mußt erst etwas im Nachrichtenfeld schreiben, bevor wir es abspeichern können.',
+ 'messageboard:notfound' => 'Entschuldigung. Wir konnten den gesuchten Eintrag nicht finden.',
+ 'messageboard:notdeleted' => 'Entschuldigung. Die Nachricht konnte nicht gelöscht werden.',
+ 'messageboard:somethingwentwrong' => 'Beim Speichern Deiner Nachricht ist ein Fehler aufgetreten. Hattest Du einen Text eingegeben?',
+ 'messageboard:failure' => 'Beim Speichern Deiner Nachricht ist ein unerwarteter Fehler aufgetreten. Bitte versuche es noch einmal.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.messages.php b/mod/languages/languages/de/de.messages.php
new file mode 100644
index 000000000..9973533fd
--- /dev/null
+++ b/mod/languages/languages/de/de.messages.php
@@ -0,0 +1,60 @@
+<?php
+$de = array (
+ 'messages' => 'Nachrichten',
+ 'messages:back' => 'Zurück zu Nachrichten',
+ 'messages:user' => 'Dein Postkasten',
+ 'messages:posttitle' => '%ss Nachrichten: %s',
+ 'messages:inbox' => 'Postkasten',
+ 'messages:send' => 'Nachricht senden',
+ 'messages:sent' => 'Nachricht senden',
+ 'messages:message' => 'Nachricht',
+ 'messages:title' => 'Ãœberschrift',
+ 'messages:to' => 'An',
+ 'messages:from' => 'Von',
+ 'messages:fly' => 'Senden',
+ 'messages:sendmessage' => 'Nachricht senden',
+ 'messages:compose' => 'Nachricht verfassen',
+ 'messages:sentmessages' => 'Nachricht senden',
+ 'messages:recent' => 'Neueste Nachrichten',
+ 'messages:original' => 'Ursprüngliche Nachricht',
+ 'messages:yours' => 'Deine Nachricht',
+ 'messages:answer' => 'Antworten',
+ 'messages:markread' => 'Als gelesen markieren',
+ 'messages:new' => 'Neue Nachricht',
+ 'notification:method:site' => 'Website',
+ 'messages:error' => 'Leider gab es ein Problem deine Nachricht zu speichern. Bitte versuche es noch einmal.',
+ 'item:object:messages' => 'Nachrichten',
+ 'messages:posted' => 'Deine Nachricht wurde erfolgreich versendet.',
+ 'messages:email:subject' => 'Du hast eine neue Nachricht!',
+ 'messages:email:body' => 'Du hast eine neue Nachricht von %s:
+
+%s
+
+Deine Nachrichten anschauen: %s
+
+%s eine Nachricht senden: %s
+
+Auf diese Mail kann nicht geantwortet werden.',
+ 'messages:blank' => 'Leider musst du erst etwas in das Textfeld schreiben, bevor es gespeichert werden kann.',
+ 'messages:notfound' => 'Leider konnte die gesuchte Nachricht nicht gefunden werden.',
+ 'messages:notdeleted' => 'Leider konnte die Nachricht nicht gelöscht werden.',
+ 'messages:nopermission' => 'Du bist nicht berechtigt diese Nachricht zu verändern.',
+ 'messages:nomessages' => 'Es gibt noch keine Nachrichten die angezeigt werden können.',
+ 'messages:user:nonexist' => 'Leider konnte der Empfänger in der Benutzerdatenbank nicht gefunden werden.',
+ 'messages:user:blank' => 'Du hast noch keinen Empfänger ausgewählt.',
+ 'messages:replying' => 'Antworten auf',
+ 'messages:toggle' => 'Alle ummarkieren',
+ 'messages:unreadcount' => '%s ungelesene',
+ 'messages:add' => 'Eine Nachricht verfassen',
+ 'messages:recipient' => 'Wähle einen Empfänger&hellip;',
+ 'messages:to_user' => 'An: %s',
+ 'messages:success:delete:single' => 'Die Nachricht wurde gelöscht.',
+ 'messages:success:delete' => 'Die Nachrichten wurden gelöscht.',
+ 'messages:success:read' => 'Die Nachrichten wurden als gelesen markiert.',
+ 'messages:error:messages_not_selected' => 'Es wurden keine Nachrichten ausgewählt.',
+ 'messages:error:delete:single' => 'Die Nachricht konnte nicht gelöscht werden.',
+ 'messages:deleted_sender' => 'Ehemaliges Mitglied',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.notifications.php b/mod/languages/languages/de/de.notifications.php
new file mode 100644
index 000000000..383cfa04e
--- /dev/null
+++ b/mod/languages/languages/de/de.notifications.php
@@ -0,0 +1,18 @@
+<?php
+$de = array (
+ 'friends:all' => 'Alle Freunde',
+ 'notifications:subscriptions:personal:description' => 'Benachrichtigt werden, wenn es zu Deinen Beiträgen auf der Seite Rückmeldungen gibt.',
+ 'notifications:subscriptions:personal:title' => 'Persönliche Benachrichtigungseinstellungen',
+ 'notifications:subscriptions:friends:title' => 'Freundeslisten',
+ 'notifications:subscriptions:friends:description' => 'Um gleiche Benachrichtigungseinstellungen für alle Freunde, die in einer Deiner Freundeslisten enthalten sind, festzulegen, kannst Du Deine verfügbaren Freundeslisten hier an- und abwählen. Dies wird aber auch die freundesspezifischen Benachrichtigungseinstellungen, die weiter unten verfügbar sind, beeinflussen. Die erste Liste wurde automatisch erstellt und enthält alle Deine Freunde.',
+ 'notifications:subscriptions:collections:edit' => 'Um Deine Freundeslisten zu bearbeiten, hier klicken.',
+ 'notifications:subscriptions:changesettings' => 'Benachrichtigungen',
+ 'notifications:subscriptions:changesettings:groups' => 'Gruppen-Benachrichtigungen',
+ 'notifications:subscriptions:title' => 'Freundesspezifische Benachrichtigungseinstellungen',
+ 'notifications:subscriptions:description' => 'Um benachrichtigt zu werden, wenn Deine Freunde neue Beiträge erstellen, kannst Du für jeden einzelnen Deiner Freunde im Folgenden spezifische Benachrichtungseinstellungen festlegen.',
+ 'notifications:subscriptions:groups:description' => 'Um benachrichtigt zu werden, wenn neue Beiträge zu einer Gruppe hinzugefügt werden, in der Du Mitglied bist, kannst Du im Folgenden gruppenspezifische Benachrichtigungseinstellungen festlegen.',
+ 'notifications:subscriptions:success' => 'Deine Benachrichtigungseinstellungen wurden gespeichert.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.pages.php b/mod/languages/languages/de/de.pages.php
new file mode 100644
index 000000000..d07b72c49
--- /dev/null
+++ b/mod/languages/languages/de/de.pages.php
@@ -0,0 +1,54 @@
+<?php
+$de = array (
+ 'pages' => 'Coop-Seiten',
+ 'pages:owner' => 'Coop-Seiten von %s',
+ 'pages:friends' => 'Coop-Seiten von Freunden',
+ 'pages:all' => 'Alle Coop-Seiten',
+ 'pages:add' => 'Eine Coop-Seiten hinzufügen',
+ 'pages:group' => 'Gruppen-Coop-Seiten',
+ 'groups:enablepages' => 'Gruppen-Coop-Seiten aktivieren',
+ 'pages:edit' => 'Diese Coop-Seite bearbeiten',
+ 'pages:delete' => 'Diese Coop-Seite löschen',
+ 'pages:history' => 'Bearbeitungsverlauf',
+ 'pages:view' => 'Coop-Seite anzeigen',
+ 'pages:revision' => 'Revision',
+ 'pages:navigation' => 'Navigation',
+ 'item:object:page_top' => 'Haupt-Coop-Seiten',
+ 'item:object:page' => 'Coop-Seiten',
+ 'pages:nogroup' => 'Diese Gruppe hat noch keine Coop-Seiten.',
+ 'pages:more' => 'Weitere Coop-Seiten',
+ 'pages:none' => 'Es wurden noch keine Coop-Seiten erstellt.',
+ 'river:create:object:page' => '%s hat die Coop-Seite %s hinzugefügt.',
+ 'river:create:object:page_top' => '%s hat die Coop-Seite %s hinzugefügt.',
+ 'river:update:object:page' => '%s aktualisierte die Coop-Seite %s.',
+ 'river:update:object:page_top' => '%s aktualisierte die Coop-Seite %s.',
+ 'river:comment:object:page' => '%s schrieb einen Kommentar zur Coop-Seite %s.',
+ 'river:comment:object:page_top' => '%s schrieb einen Kommentar zur Coop-Seite %s.',
+ 'pages:title' => 'Titel der Coop-Seite',
+ 'pages:description' => 'Seitentext',
+ 'pages:tags' => 'Tags',
+ 'pages:access_id' => 'Zugangslevel',
+ 'pages:write_access_id' => 'Schreibberechtigung',
+ 'pages:noaccess' => 'Keine Zugangsberechtigung für diese Coop-Seite.',
+ 'pages:cantedit' => 'Du kannst diese Coop-Seite nicht bearbeiten.',
+ 'pages:saved' => 'Die Coop-Seite wurde gespeichert.',
+ 'pages:notsaved' => 'Die Coop-Seite konnte nicht gespeichert werden.',
+ 'pages:error:no_title' => 'Du mußt einen Titel für diese Coop-Seite eingeben.',
+ 'pages:delete:success' => 'Die Coop-Seite wurde gelöscht.',
+ 'pages:delete:failure' => 'Die Coop-Seite konnte nicht gelöscht werden.',
+ 'pages:strapline' => 'Zuletzt aktualisiert am %s von %s',
+ 'pages:revision:subtitle' => 'Revision erzeugt am %s von %s',
+ 'pages:num' => 'Anzahl der anzuzeigenden Coop-Seiten',
+ 'pages:widget:description' => 'Dies ist eine Liste Deiner Coop-Seiten.',
+ 'pages:label:view' => 'Coop-Seite anzeigen',
+ 'pages:label:edit' => 'Coop-Seite bearbeiten',
+ 'pages:label:history' => 'Bearbeitungsverlauf der Coop-Seite',
+ 'pages:sidebar:this' => 'Diese Coop-Seite',
+ 'pages:sidebar:children' => 'Unter-Coop-Seiten',
+ 'pages:sidebar:parent' => 'Ãœbergeordnete Coop-Seite',
+ 'pages:newchild' => 'Eine Unter-Coop-Seite erstellen',
+ 'pages:backtoparent' => 'Zurück zu \'%s\'',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.profile.php b/mod/languages/languages/de/de.profile.php
new file mode 100644
index 000000000..a7e2237bc
--- /dev/null
+++ b/mod/languages/languages/de/de.profile.php
@@ -0,0 +1,8 @@
+<?php
+$de = array (
+ 'profile' => 'Profil',
+ 'profile:notfound' => 'Entschuldigung, wir konnten das gesuchte Profil nicht finden.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.reportedcontent.php b/mod/languages/languages/de/de.reportedcontent.php
new file mode 100644
index 000000000..87b66b6c0
--- /dev/null
+++ b/mod/languages/languages/de/de.reportedcontent.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Elgg reported content plugin language pack
+ *
+ * @package ElggReportedContent
+ */
+
+$german = array(
+
+ 'item:object:reported_content' => 'Gemeldete Beiträge',
+ 'admin:administer_utilities:reportedcontent' => 'Gemeldete Beiträge',
+ 'reportedcontent' => 'Gemeldete Beiträge',
+ 'reportedcontent:this' => 'Beitrag melden',
+ 'reportedcontent:this:tooltip' => 'Melde diese Seiten/diesen Beitrag einem Administrator.',
+ 'reportedcontent:none' => 'Es gibt keine gemeldeten Beiträge.',
+ 'reportedcontent:report' => 'Einem Admin melden',
+ 'reportedcontent:title' => 'Titel des Beitrags',
+ 'reportedcontent:deleted' => 'Der gemeldete Beitrag wurde gelöscht.',
+ 'reportedcontent:notdeleted' => 'Die Meldung konnte nicht gelöscht werden.',
+ 'reportedcontent:delete' => 'Meldung löschen',
+ 'reportedcontent:areyousure' => 'Bist Du sicher, dass Du das löschen willst?',
+ 'reportedcontent:archive' => 'Meldung archivieren',
+ 'reportedcontent:archived' => 'Die Meldung wurde archiviert.',
+ 'reportedcontent:visit' => 'Gemeldeten Beitrag anzeigen',
+ 'reportedcontent:by' => 'Gemeldet von',
+ 'reportedcontent:objecttitle' => 'Titel des gemeldeten Beitrags',
+ 'reportedcontent:objecturl' => 'URL des gemeldeten Beitrags',
+ 'reportedcontent:reason' => 'Grund für die Meldung',
+ 'reportedcontent:description' => 'Warum möchtest Du diesen Beitrag melden?',
+ 'reportedcontent:address' => 'Adresse des Beitrags',
+ 'reportedcontent:success' => 'Deine Meldung wurde an den Admin gesendet.',
+ 'reportedcontent:failing' => 'Deine Meldung konnte nicht gesendet werden.',
+ 'reportedcontent:report' => 'Diesen Beitrag melden',
+ 'reportedcontent:moreinfo' => 'Weitere Informationen',
+ 'reportedcontent:instructions' => 'Die Meldung wird an die Administratoren dieser Community-Seite gesendet, damit sie auf diesen Beitrag aufmerksam gemacht werden.',
+ 'reportedcontent:numbertodisplay' => 'Anzahl der anzuzeigenden Meldungen',
+ 'reportedcontent:widget:description' => 'Gemeldete Beiträge anzeigen.',
+ 'reportedcontent:user' => 'Benutzer melden',
+
+ 'reportedcontent:failed' => 'Entschuldigung, leider ist der Versuch, diesen Beitrag zu melden, gescheitert.',
+ 'reportedcontent:notarchived' => 'Die Meldung konnte nicht archiviert werden.',
+);
+
+add_translation("de", $german); \ No newline at end of file
diff --git a/mod/languages/languages/de/de.search.php b/mod/languages/languages/de/de.search.php
new file mode 100644
index 000000000..4f37ee203
--- /dev/null
+++ b/mod/languages/languages/de/de.search.php
@@ -0,0 +1,18 @@
+<?php
+$de = array (
+ 'search:enter_term' => 'Gebe einen Suchbegriff ein:',
+ 'search:no_results' => 'Keine Treffer.',
+ 'search:matched' => 'Treffer: ',
+ 'search:results' => 'Treffer für %s',
+ 'search:no_query' => 'Bitte geben einen Begriff ein, nach dem gesucht werden soll.',
+ 'search:search_error' => 'Fehler',
+ 'search:more' => '+%s weitere %s',
+ 'search_types:tags' => 'Tags',
+ 'search_types:comments' => 'Kommentare',
+ 'search:comment_on' => 'Kommentare zu "%s"',
+ 'search:comment_by' => 'von',
+ 'search:unavailable_entity' => 'Entität nicht verfügbar.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.tagcloud.php b/mod/languages/languages/de/de.tagcloud.php
new file mode 100644
index 000000000..93f992ad0
--- /dev/null
+++ b/mod/languages/languages/de/de.tagcloud.php
@@ -0,0 +1,9 @@
+<?php
+$de = array (
+ 'tagcloud:widget:title' => 'Tagcloud',
+ 'tagcloud:widget:description' => 'Tagcloud',
+ 'tagcloud:widget:numtags' => 'Anzahl der anzuzeigenden Tags.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.thewire.php b/mod/languages/languages/de/de.thewire.php
new file mode 100644
index 000000000..d5762d8bf
--- /dev/null
+++ b/mod/languages/languages/de/de.thewire.php
@@ -0,0 +1,36 @@
+<?php
+$de = array (
+ 'thewire' => 'Der Heiße Draht',
+ 'thewire:everyone' => 'Alle Nachrichten im Heißen Draht',
+ 'thewire:user' => 'Der Heiße Draht von %s',
+ 'thewire:friends' => 'Deine Freunde im Heißen Draht',
+ 'thewire:reply' => 'Antworten',
+ 'thewire:replying' => 'Antworten auf %s (@%s), der schrieb',
+ 'thewire:thread' => 'Thread',
+ 'thewire:charleft' => 'Zeichen übrig',
+ 'thewire:tags' => 'Nachrichten im Heißen Draht mit dem Tag \'%s\'',
+ 'thewire:noposts' => 'Noch keine Nachrichten im Heißen Draht.',
+ 'item:object:thewire' => 'Nachrichten im Heißen Draht',
+ 'thewire:update' => 'Aktualisieren',
+ 'thewire:by' => 'Nachricht im Heißen Draht von %s',
+ 'thewire:previous' => 'Vorherige',
+ 'thewire:hide' => 'Verbergen',
+ 'thewire:previous:help' => 'Vorherige Nachricht ansehen',
+ 'thewire:hide:help' => 'Vorherige Nachricht verbergen',
+ 'river:create:object:thewire' => '%s schrieb im %s',
+ 'thewire:wire' => 'Heißen Draht',
+ 'thewire:widget:desc' => 'Anzeige Deiner neuesten Nachrichten im Heißen Draht',
+ 'thewire:num' => 'Anzahl der anzuzeigenden Einträge',
+ 'thewire:moreposts' => 'Weitere Nachrichten im Heißen Draht',
+ 'thewire:posted' => 'Deine Nachricht wurde dem Heißen Draht hinzugefügt.',
+ 'thewire:deleted' => 'Die Nachricht wurde aus dem Heißen Draht gelöscht.',
+ 'thewire:blank' => 'Entschuldigung, Du mußt erst etwas schreiben, bevor es veröffentlicht werden kann.',
+ 'thewire:notfound' => 'Entschuldigung, die gesuchte Nachricht aus dem Heißen Draht konnte nicht gefunden werden.',
+ 'thewire:notdeleted' => 'Entschuldigung, wir konnten diese Nachricht nicht aus dem Heißen Draht löschen.',
+ 'thewire:notify:subject' => 'Neue Nachricht im Heißen Draht',
+ 'thewire:notify:reply' => '%s autwortete auf %s im Heißen Draht:',
+ 'thewire:notify:post' => '%s schrieb im Heißen Draht:',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.tinymce.php b/mod/languages/languages/de/de.tinymce.php
new file mode 100644
index 000000000..c12ac4dc4
--- /dev/null
+++ b/mod/languages/languages/de/de.tinymce.php
@@ -0,0 +1,9 @@
+<?php
+$de = array (
+ 'tinymce:remove' => 'Editor deaktivieren',
+ 'tinymce:add' => 'Editor aktivieren',
+ 'tinymce:word_count' => 'Anzahl Worte: ',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.twitter.php b/mod/languages/languages/de/de.twitter.php
new file mode 100644
index 000000000..2c10a367f
--- /dev/null
+++ b/mod/languages/languages/de/de.twitter.php
@@ -0,0 +1,12 @@
+<?php
+$de = array (
+ 'twitter:title' => 'Twitter',
+ 'twitter:info' => 'Dieses Widget zeigt Deine neuesten Tweets.',
+ 'twitter:username' => 'Gebe Deinen Twitter-Benutzernamen ein.',
+ 'twitter:num' => 'Anzahl der anzuzeigenden Tweets.',
+ 'twitter:visit' => 'Besuche meine Twitter-Seite',
+ 'twitter:notset' => 'Dieses Twitter-Widget ist noch nicht eingerichtet. Um Deine letzten Tweets anzeigen zu lassen, klicke auf \'Bearbeiten\' und gebe die notwendigen Verbindungsdaten ein',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/de/de.twitter_api.php b/mod/languages/languages/de/de.twitter_api.php
new file mode 100644
index 000000000..d023835ee
--- /dev/null
+++ b/mod/languages/languages/de/de.twitter_api.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * An German language definition file
+ */
+
+$german = array(
+ 'twitter_api' => 'Twitter-Service',
+
+ 'twitter_api:requires_oauth' => 'Für die Twitter-Services muss das OAuth-Libraries-Plugin aktiviert sein.',
+
+ 'twitter_api:consumer_key' => 'Consumer Key',
+ 'twitter_api:consumer_secret' => 'Consumer Secret',
+
+ 'twitter_api:settings:instructions' => 'Es ist ein Consumer Key und und ein Consumer Secret von <a href="https://dev.twitter.com/apps/new" target="_blank">Twitter</a> notwendig. Fülle auf Twitter die Angaben für eine neue Applikation aus. Wähle "Browser" als Applikationstyp und "Read & Write" für die Zugangsberechtigung. Die Callback-URL, die Du angeben mußt, ist %stwitter_api/authorize.',
+
+ 'twitter_api:usersettings:description' => "Verbinde Deinen %s-Account mit Twitter.",
+ 'twitter_api:usersettings:request' => "Du mußt zuerst eine <a href=\"%s\">Authorisierung</a> für %s einrichten, damit der Zugriff auf Deinen Twitter-Account möglich ist.",
+ 'twitter_api:usersettings:cannot_revoke' => "Du kannst die Verbindung Deines Accounts mit Twitter nicht aufheben, da Du keine Email-Addresse oder kein Passwort für Deinen Account angegeben hast. <a href=\"%s\">Gebe diese Angaben jetzt ein</a>.",
+ 'twitter_api:authorize:error' => 'Twitter-Authorisierung fehlgeschlagen.',
+ 'twitter_api:authorize:success' => 'Twitter-Zugriff wurde authorisiert.',
+
+ 'twitter_api:usersettings:authorized' => "Du hast %s authorisiert, auf Deinen Twitter-Account zuzugreifen: @%s.",
+ 'twitter_api:usersettings:revoke' => '<a href="%s">HIER</a> klicken, um den Zugriff auf Deinen Twitter-Account zu widerrufen..',
+ 'twitter_api:usersettings:site_not_configured' => 'Bevor Twitter verwendet werden kann, muss erst ein Administrator die Konfiguration vornehmen.',
+
+ 'twitter_api:revoke:success' => 'Twitter-Zugriff wurde widerrufen.',
+
+ 'twitter_api:login' => 'Erlaube existierenden Benutzern, die ihren Twitter-Account verbunden haben, sich mit ihren Twitter-Accountdaten auf Deiner Elgg-Community-Seite anzumelden?',
+ 'twitter_api:new_users' => 'Erlaube neuen Benutzern, sich mit ihren Twitter-Accountdaten anzumelden, selbst wenn die Account-Registrierung auf Deiner Elgg-Community-Seite deaktiviert ist?',
+ 'twitter_api:login:success' => 'Du bist nun angemeldet.',
+ 'twitter_api:login:error' => 'Die Anmeldung mit Deinen Twitter-Accountdaten ist fehlgeschlagen.',
+ 'twitter_api:login:email' => "Du mußt als erstes eine gültige Email-Adresse für Deinen neuen %s-Account eingeben.",
+
+ 'twitter_api:invalid_page' => 'Ungültige Seite.',
+
+ 'twitter_api:deprecated_callback_url' => 'Die Callback-URL für die Twitter-API hat sich zu %s geändert. Bitte den Administrator dieser Community-Seite, sie zu ändern.',
+
+ 'twitter_api:interstitial:settings' => 'Account konfigurieren',
+ 'twitter_api:interstitial:description' => 'Du kannst Dich in wenigen Augenblicken auf %s anmelden! Wir benötigen nur noch einige wenige Angaben. Diese Angaben sind optional, aber sie ermöglichen es Dir, Dich auf dieser Community-Seite anzumelden, falls Twitter einmal nicht erreichbar ist oder Du Dich entschließen solltest, die Verbindung zu Deinem Twitter-Account zu trennen.',
+
+ 'twitter_api:interstitial:username' => 'Dies ist Dein Benutzername. Er kann nicht geändert werden. Wenn Du ein Passwort angibst, kannst Du Deinen Benutzernamen oder Deine Email-Adresse für die Anmeldung auf dieser Community-Seite verwenden.',
+
+ 'twitter_api:interstitial:name' => 'Dies ist der Name, den die anderen Mitglieder sehen werden, wenn sie mit Dir interagieren.',
+
+ 'twitter_api:interstitial:email' => 'Deine Email-Adresse. Standardmäßig können die anderen Mitglieder der Community-Seite diese nicht sehen.',
+
+ 'twitter_api:interstitial:password' => 'Ein Passwort, damit Du Dich auf dieser Community-Seite anmelden kannst, falls Twitter nicht erreichbar ist oder Du Dich entschließen solltest, die Verbindung zu Deinem Twitter-Account zu trennen.',
+ 'twitter_api:interstitial:password2' => 'Das gleiche Passwort noch einmal.',
+
+ 'twitter_api:interstitial:no_thanks' => 'Nein danke.',
+
+ 'twitter_api:interstitial:no_display_name' => 'Du mußt einen Namen eingeben.',
+ 'twitter_api:interstitial:invalid_email' => 'Du mußt entweder eine gültige Email-Adresse oder gar keine eingeben.',
+ 'twitter_api:interstitial:existing_email' => 'Diese Email-Adresse ist bereits auf dieser Community-Seite registriert.',
+ 'twitter_api:interstitial:password_mismatch' => 'Die beiden Passwort-Eingaben stimmen nicht überein.',
+ 'twitter_api:interstitial:cannot_save' => 'Das Speichern der Eingaben ist fehlgeschlagen!',
+ 'twitter_api:interstitial:saved' => 'Die Eingaben wurden gespeichert.',
+);
+
+add_translation('de', $german); \ No newline at end of file
diff --git a/mod/languages/languages/de/de.uservalidationbyemail.php b/mod/languages/languages/de/de.uservalidationbyemail.php
new file mode 100644
index 000000000..7a85c0a4d
--- /dev/null
+++ b/mod/languages/languages/de/de.uservalidationbyemail.php
@@ -0,0 +1,51 @@
+<?php
+$de = array (
+ 'admin:users:unvalidated' => 'Inaktiv',
+ 'email:validate:subject' => '%s, bitte bestätige Deine Email-Adresse!',
+ 'email:validate:body' => 'Hallo %s,
+
+bevor Du Dich auf der Community-Seite %s anmelden kannst, mußt Du Deine Email-Addresse bestätigen.
+
+Um Deine angegebene Email-Addresse zu bestätigen, folgende diesem Link:
+
+%s
+
+Wenn Du nicht direkt auf den Link klicken kannst, kopiere ihn bitte von Hand in die Adresszeile Deines Browsers.
+
+%s
+%s
+',
+ 'email:confirm:success' => 'Du hast Deine Email-Adresse bestätigt!',
+ 'email:confirm:fail' => 'Deine Email-Adresse konnte nicht bestätigt werden...',
+ 'uservalidationbyemail:registerok' => 'Um Deinen Account zu aktivieren, mußt Du Deine Email-Adresse bestätigen, indem Du dem Link in der Email folgst, die wir Dir gerade gesendet haben.',
+ 'uservalidationbyemail:login:fail' => 'Dein Account ist noch nicht validiert, daher ist die Anmeldung auf dieser Community-Seite noch nicht möglich. Es wurde eine neue Validierungs-Email an die von Dir angegebene Email-Adresse gesendet.',
+ 'uservalidationbyemail:admin:no_unvalidated_users' => 'Keine inaktiven Benutzeraccounts.',
+ 'uservalidationbyemail:admin:unvalidated' => 'Inaktiv',
+ 'uservalidationbyemail:admin:user_created' => '%s registriert',
+ 'uservalidationbyemail:admin:resend_validation' => 'Bestätigungs-Email erneut senden',
+ 'uservalidationbyemail:admin:validate' => 'Bestätigen',
+ 'uservalidationbyemail:admin:delete' => 'Löschen',
+ 'uservalidationbyemail:confirm_validate_user' => '%s bestätigen?',
+ 'uservalidationbyemail:confirm_resend_validation' => 'Bestätigungs-Email an %s erneut senden?',
+ 'uservalidationbyemail:confirm_delete' => '%s löschen?',
+ 'uservalidationbyemail:confirm_validate_checked' => 'Markierte Benutzeraccounts bestätigen?',
+ 'uservalidationbyemail:confirm_resend_validation_checked' => 'Bestätigungs-Email erneut an markierte Benutzeraccounts senden?',
+ 'uservalidationbyemail:confirm_delete_checked' => 'Markierte Benutzeraccounts löschen?',
+ 'uservalidationbyemail:check_all' => 'Alle',
+ 'uservalidationbyemail:errors:unknown_users' => 'Unbekannter Benutzer',
+ 'uservalidationbyemail:errors:could_not_validate_user' => 'Benutzeraccount konnte nicht bestätigt werden.',
+ 'uservalidationbyemail:errors:could_not_validate_users' => 'Es konnten nicht alle markierten Benutzeraccounts bestätigt werden.',
+ 'uservalidationbyemail:errors:could_not_delete_user' => 'Benutzeraccount konnte nicht gelöscht werden.',
+ 'uservalidationbyemail:errors:could_not_delete_users' => 'Es konnten nicht alle markierten Benutzeraccounts gelöscht werden.',
+ 'uservalidationbyemail:errors:could_not_resend_validation' => 'Bestätigungs-Email konnte nicht versendet werden.',
+ 'uservalidationbyemail:errors:could_not_resend_validations' => 'Die Bestätigungs-Email konnte nicht an alle markierten Benutzeraccounts versendet werden.',
+ 'uservalidationbyemail:messages:validated_user' => 'Benutzeraccount bestätigt.',
+ 'uservalidationbyemail:messages:validated_users' => 'Alle markierten Benutzeraccount bestätigt.',
+ 'uservalidationbyemail:messages:deleted_user' => 'Benutzeraccount gelöscht.',
+ 'uservalidationbyemail:messages:deleted_users' => 'Alle markierten Benutzeraccount gelöscht.',
+ 'uservalidationbyemail:messages:resent_validation' => 'Bestätigungs-Email gesendet.',
+ 'uservalidationbyemail:messages:resent_validations' => 'Die Bestätigungs-Email wurde erneut an alle markierten Benutzeraccount gesendet.',
+);
+
+add_translation("de", $de);
+
diff --git a/mod/languages/languages/en/en.core.php b/mod/languages/languages/en/en.core.php
new file mode 100644
index 000000000..f79560e04
--- /dev/null
+++ b/mod/languages/languages/en/en.core.php
@@ -0,0 +1,39 @@
+<?php
+$en = array(
+ 'membershiprequired' => 'You must be a inhabitant of this group to view that page.',
+ 'friends:collections:members' => 'Collection inhabitants',
+ 'usersettings:statistics:label:membersince' => 'Inhabitant since',
+ 'members' => 'Inhabitants',
+
+ // Custom index plugin
+ 'custom:members' => 'Newest inhabitants',
+
+ // Groups plugin
+ 'groups:widgets:description' => 'Display the groups you are a inhabitant of on your profile',
+ 'groups:notmember' => 'Sorry, you are not a inhabitant of this group.',
+ 'groups:alreadymember' => 'You are already a inhabitant of this group!',
+ 'groups:welcome:body' => "Hi %s!
+
+You are now an inhabitant of the '%s' group! Click below to begin posting!
+
+%s",
+ 'groups:members:title' => 'Inhabitants of %s',
+ 'groups:access:group' => 'Group inhabitants only',
+ 'groups:widgets:members:description' => 'List the inhabitants of a group.',
+ 'groups:widgets:members:label:displaynum' => 'List the inhabitants of a group.',
+
+ // Invite friends plugin
+ 'invitefriends:already_members' => 'The following are already inhabitants: %s',
+
+ // Members plugin
+ 'members:searchname' => 'Search inhabitants by name',
+ 'members:searchtag' => 'Search inhabitants by tag',
+ 'members:title:searchname' => 'Inhabitants search for %s',
+ 'members:title:searchtag' => 'Inhabitants tagged with %s',
+
+ // Notifications plugin
+ 'notifications:subscriptions:groups:description' => 'To receive notifications when new content is added to a group you are an inhabitant of, find it below and select the notification method(s) you would like to use.'
+
+);
+
+add_translation("en", $en);
diff --git a/mod/languages/languages/es/es.blog.php b/mod/languages/languages/es/es.blog.php
new file mode 100644
index 000000000..27ba90fb4
--- /dev/null
+++ b/mod/languages/languages/es/es.blog.php
@@ -0,0 +1,57 @@
+<?php
+$es = array (
+ 'blog:notification' => '%s ha escrito una nueva entrada de blog.
+
+%s
+%s
+
+Puedes verla y comentar en ella en:
+%s',
+ 'blog' => 'Blogs',
+ 'blog:blogs' => 'Blogs',
+ 'blog:revisions' => 'Revisiones',
+ 'blog:archives' => 'Archivos',
+ 'blog:blog' => 'Blog',
+ 'item:object:blog' => 'Blogs',
+ 'blog:title:user_blogs' => 'Blogs de %s',
+ 'blog:title:all_blogs' => 'Todos los blogs del sitio',
+ 'blog:title:friends' => 'Blogs de amigos',
+ 'blog:group' => 'Blog del grupo',
+ 'blog:enableblog' => 'Habilitar blog del grupo',
+ 'blog:write' => 'Agregar una entrada al blog',
+ 'blog:add' => 'Agregar una entrada al blog',
+ 'blog:edit' => 'Editar entrada del blog',
+ 'blog:excerpt' => 'Extracto',
+ 'blog:body' => 'Cuerpo',
+ 'blog:save_status' => 'Guardado: ',
+ 'blog:never' => 'Nunca',
+ 'blog:status' => 'Estado',
+ 'blog:status:draft' => 'Borrador',
+ 'blog:status:published' => 'Publicado',
+ 'blog:status:unsaved_draft' => 'Borrador no guardado',
+ 'blog:revision' => 'Revisión',
+ 'blog:auto_saved_revision' => 'Revisión guardada automaticamente',
+ 'blog:message:saved' => 'Entrada del blog guardada.',
+ 'blog:error:cannot_save' => 'No se pudo guardar la entrada del blog.',
+ 'blog:error:cannot_write_to_container' => 'No posee los permisos necesarios para añadir el blog al grupo.',
+ 'blog:error:post_not_found' => 'Esta entrada ha sido quitada, es inválida, o no tiene los permisos necesarios para poder verla.',
+ 'blog:messages:warning:draft' => 'Hay un borrador sin guardar para esta entrada!',
+ 'blog:edit_revision_notice' => '(Versión anterior)',
+ 'blog:message:deleted_post' => 'Entrada del blog eliminada.',
+ 'blog:error:cannot_delete_post' => 'No se pudo eliminar la entrada del blog.',
+ 'blog:none' => 'No hay entradas en el blog',
+ 'blog:error:missing:title' => 'Debe ingresar un título para el blog!',
+ 'blog:error:missing:description' => 'Debe ingresar el cuerpo de su blog!',
+ 'blog:error:cannot_edit_post' => 'La publicación no existe o no posee los permisos necesarios sobre ella.',
+ 'blog:error:revision_not_found' => 'No se pudo encontrar la revisión.',
+ 'river:create:object:blog' => '%s publicó una entrada en el blog %s',
+ 'river:comment:object:blog' => '%s comentó en el blog %s',
+ 'blog:newpost' => 'Una nueva entrada de blog',
+ 'blog:widget:description' => 'Mostrar las últimas entradas de blog',
+ 'blog:moreblogs' => 'Más entradas de blog',
+ 'blog:numbertodisplay' => 'Cantidad de entradas de blog a mostrar',
+ 'blog:noblogs' => 'No hay entradas en el blog',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.bookmarks.php b/mod/languages/languages/es/es.bookmarks.php
new file mode 100644
index 000000000..8d8782e89
--- /dev/null
+++ b/mod/languages/languages/es/es.bookmarks.php
@@ -0,0 +1,55 @@
+<?php
+$es = array (
+ 'bookmarks:notification' => 'English
+
+%s ha añadido un nuevo enlace:
+
+%s - %s
+%s
+
+Puedes verlo y comentar en él en:
+%s',
+ 'bookmarks:save:invalid' => 'La dirección del enlace es invalida y no puede salvarse.',
+ 'bookmarks' => 'Enlaces',
+ 'bookmarks:add' => 'Añadir a enlaces',
+ 'bookmarks:edit' => 'Editar enlace',
+ 'bookmarks:owner' => 'Enlaces de %s',
+ 'bookmarks:friends' => 'Enlaces de tus amigos',
+ 'bookmarks:everyone' => 'Todos los enlaces',
+ 'bookmarks:this' => 'Marcar como enlace',
+ 'bookmarks:bookmarklet' => 'Obtener marcadores',
+ 'bookmarks:inbox' => 'Entradas de enlaces',
+ 'bookmarks:more' => 'Más enlaces',
+ 'bookmarks:with' => 'Compartir información',
+ 'bookmarks:address' => 'Dirección de los recursos de los enlaces',
+ 'bookmarks:delete:confirm' => 'Seguro que quieres eliminar este recurso?',
+ 'bookmarks:shared' => 'Añadido a enlaces',
+ 'bookmarks:visit' => 'Visitar el recurso',
+ 'bookmarks:recent' => 'Enlaces recientes',
+ 'bookmarks:river:annotate' => 'un comentario en este enlace',
+ 'bookmarks:river:item' => 'un artículo',
+ 'item:object:bookmarks' => 'Enlaces',
+ 'bookmarks:widget:description' => 'Este componente está diseñado para el interfaz de su escritorio y mostrará las entradas a los artículos enlaces que creas precisos',
+ 'bookmarks:bookmarklet:description' => 'Los enlaces marcados permiten compartir cualquier recurso de la web de forma rápida y sencilla, con sus amigos. Para usarlo, muevelo a través del navegador a la zona:',
+ 'bookmarks:bookmarklet:descriptionie' => 'Si estás usando Internet Explorer, necesitarás pulsar el botón derecho del icono marcador y seleccionar \'añadir a enlaces\'\' indicando el link correspondiente',
+ 'bookmarks:bookmarklet:description:conclusion' => 'Puedes guardar cualquier página que visites pulsándolo en cualquier momento',
+ 'bookmarks:save:success' => 'Su artículo ha sido marcado correctamente.',
+ 'bookmarks:delete:success' => 'Su artículo ha sido eliminado correctamente.',
+ 'bookmarks:save:failed' => 'Su artículo marcado no puede guardarse, inténtelo de nuevo.',
+ 'bookmarks:delete:failed' => 'Su artículo marcado no puede ser eliminado, inténtelo de nuevo.',
+ 'bookmarks:this:group' => 'Añadido en %s',
+ 'bookmarks:bookmarklet:group' => 'Obtener bookmarklet del grupo',
+ 'bookmarks:new' => 'Un nuevo objeto marcado',
+ 'bookmarks:numbertodisplay' => 'Número de enlaces a mostrar',
+ 'bookmarks:group' => 'Enlaces del grupo',
+ 'bookmarks:enablebookmarks' => 'Habilitar marcadores de grupos',
+ 'river:create:object:bookmarks' => '%s agregó %s como enlace',
+ 'river:comment:object:bookmarks' => '%s comentó en el enlace %s',
+ 'bookmarks:none' => 'Sin enlaces',
+ 'bookmarks:nogroup' => 'Este grupo no posee enlaces aún',
+ 'bookmarks:no_title' => 'Sin título',
+ 'bookmarks:morebookmarks' => 'Más enlaces',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.categories.php b/mod/languages/languages/es/es.categories.php
new file mode 100644
index 000000000..4c9b7ee2b
--- /dev/null
+++ b/mod/languages/languages/es/es.categories.php
@@ -0,0 +1,12 @@
+<?php
+$es = array (
+ 'categories' => 'Categorías',
+ 'categories:settings' => 'Edita las categorías del sitio',
+ 'categories:explanation' => 'Para establecer algunas categorías globales para el sitio que serán usadas a través de tu sistema, introdúcelas abajo separadas por comas. Serán mostradas por las herramientas compatibles cuando el usuario cree o edite contenido.',
+ 'categories:save:success' => 'Las categorías del sitio se han grabado correctamente.',
+ 'categories:results' => 'Resultados del sitio para la categoría: %s',
+ 'categories:on_activate_reminder' => 'Las categorías del sitio no se encuentran disponibles hasta que agregue alguna. <a href="%s">Añadir categorías ahora.</a>',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.core.php b/mod/languages/languages/es/es.core.php
new file mode 100644
index 000000000..57d03400d
--- /dev/null
+++ b/mod/languages/languages/es/es.core.php
@@ -0,0 +1,1001 @@
+<?php
+$language = array (
+ 'DatabaseException:InvalidDBLink' => 'La conexión a la base de datos se ha perdido.',
+ 'avatar:remove' => 'Retire su avatar y establecer el icono por defecto',
+ 'avatar:remove:success' => 'Eliminación del avatar con éxito',
+ 'avatar:remove:fail' => 'Fallo la eliminación del avatar',
+ 'profile:field_too_long' => 'No se puede guardar la información de su perfil, porque la sección "%s" es demasiado larga.',
+ 'profile:noaccess' => 'Usted no tiene permiso para editar este perfil.',
+ 'river:delete:success' => 'El artículo ha sido eliminado',
+ 'river:delete:fail' => 'El artículo no pudo ser eliminado',
+ 'registration:usernametoolong' => 'Su nombre de usuario es demasiado largo. Puede tener un máximo de %u caracteres.',
+ 'admin:plugins:label:repository' => 'Codigo',
+ 'admin:plugins:label:bugtracker' => 'Informar de un problema',
+ 'admin:plugins:label:donate' => 'Donar',
+ 'admin:plugins:warning:invalid:check_docs' => 'Compruebe la documentación href="http://docs.elgg.org/Invalid_Plugin"> <a> para obtener sugerencias de solución de problemas.</a>',
+ 'admin:server:label:post_max_size' => 'Tamaño máximo del POST',
+ 'admin:server:label:upload_max_filesize' => 'Tamaño máximo de subida',
+ 'admin:server:warning:post_max_too_small' => '(Nota: post_max_size debe ser mayor que este valor para soportar subidas de este tamaño)',
+ 'remove' => 'Eliminar',
+ 'back' => 'Atras',
+ 'deleteconfirm:plural' => '¿Está seguro que desea eliminar estos elementos?',
+ 'actiongatekeeper:uploadexceeded' => 'El tamaño de archivo (s) subido excede el límite establecido por el administrador del sitio',
+ 'friends:collections:members' => 'Habitantes de esta colección',
+ 'members' => 'Habitantes',
+ 'dashboard' => 'Escritorio',
+ 'dashboard:nowidgets' => 'Su escritorio le permite seguir la actividad y el contenido que le interesan de este sitio',
+ 'exception:contact_admin' => 'Un error muy chungo ha ocurrido y se ha registrado. Contacta con el administrador con la siguiente información:',
+ 'PluginException:NullInstantiated' => 'ElggPlugin no se puede inicializar con valor nulo. Le tienes que pasar un GUID, un ID de plugin, o una ruta completa.',
+ 'InvalidParameterException:UnexpectedODDClass' => 'import() pasado a una clase ODD inesperada',
+ 'InvalidParameterException:LibraryNotFound' => 'No se puede cargar la librería %s desde %s',
+ 'SecurityException:ForwardFailedToRedirect' => 'No se ha podido redirigir porque las cabeceras ya se habían enviado. Se ha parado la ejecución por motivos de seguridad. Busca http://docs.elgg.org/ en para más información.',
+ 'LoginException:ChangePasswordFailure' => 'Ha fallado la comprobación de la contraseña actual.',
+ 'noaccess' => 'El contenido ha sido eliminado, es inválido, o no tienes permiso para verlo.',
+ 'error:missing_data' => 'Falta algún dato en tu petición',
+ 'error:default' => 'Ups... algo fue muy mal.',
+ 'error:404' => 'Perdón. No podemos encontrar la página que pides.',
+ 'access:limited:label' => 'Limitado',
+ 'access:help' => 'Nivel de acceso',
+ 'profile:field:text' => 'Texto corto',
+ 'profile:field:longtext' => 'Ãrea para texto largo',
+ 'profile:field:tags' => 'Etiquetas',
+ 'profile:field:url' => 'Dirección web',
+ 'profile:field:email' => 'Dirección de correo-e',
+ 'profile:field:location' => 'Lugar',
+ 'profile:field:date' => 'Fecha',
+ 'river:update:user:profile' => '%s ha actualizado su perfil',
+ 'river:update' => 'Actualización para %s',
+ 'settings:edit' => 'Edita las preferencias',
+ 'register:fields' => 'Todos los campos son necesarios',
+ 'admin:configuration:dataroot:relative_path' => 'No se puede poner "%s" como carpeta de datos porque no es una ruta absoluta.',
+ 'admin:statistics:server' => 'Información del servidor',
+ 'admin:administer_utilities' => 'Utilidades',
+ 'admin:develop_utilities' => 'Utilidades',
+ 'admin:widget:admin_welcome:outro' => '<br>Asegúrese de verificar los recursos disponibles en los enlaces del pié de página y gracias por utilizar Elgg!',
+ 'admin:widget:control_panel' => 'Panel de control',
+ 'admin:widget:control_panel:help' => 'Provee de un acceso fácil a los controles comunes',
+ 'admin:cache:flush' => 'Actualiza la caché',
+ 'admin:cache:flushed' => 'Las caches del sitio han sido limpiadas',
+ 'admin:plugins:category:nonbundled' => 'Excluido',
+ 'admin:plugins:category:utility' => 'Utilidades',
+ 'plugins:disabled' => 'Los plugins estan siendo cargados porque un fichero llamado "disabled" está en el directorio mod.',
+ 'admin:plugins:set_priority:no_with_msg' => 'No se puede reordenar %s. Error: %s',
+ 'admin:plugins:deactivate:no_with_msg' => 'No se puede desactivar %s. Error: %s',
+ 'admin:plugins:activate:no_with_msg' => 'No se puede activar %s. Error: %s',
+ 'admin:server:label:php' => 'PHP',
+ 'admin:server:label:web_server' => 'Servidor web',
+ 'admin:server:label:server' => 'Servidor',
+ 'admin:server:label:log_location' => 'Ruta al log',
+ 'admin:server:label:php_version' => 'Versión PHP',
+ 'admin:server:label:php_ini' => 'Ruta al fichero PHP ini',
+ 'admin:server:label:php_log' => 'Log PHP',
+ 'admin:server:label:mem_avail' => 'Memoria disponible',
+ 'admin:server:label:mem_used' => 'Memoria usada',
+ 'admin:server:error_log' => 'Log de errores del servidor web',
+ 'new' => 'Nuevo',
+ 'create' => 'Crear',
+ 'revert' => 'Revertir',
+ 'on' => 'Activo',
+ 'off' => 'Inactivo',
+ 'installation:systemcache:description' => 'La caché del sistema reduce el tiempo de carga del motor de Elgg cacheando los datos en ficheros.',
+ 'installation:systemcache:label' => 'Usa la caché del sistema (recomendado)',
+ 'upgrade:unable_to_upgrade_info' => 'La instalación no se puede actualizar debido a que se detectaron views antiguas
+ en el directorio de views del core de Elgg. Estas views han quedado obsoletas y deben removerse
+ para que Elgg funcione correctamente. Si no ha efectuado cambios al core de Elgg, puede
+ simplemente eliminar el directorio de views y reemplazarlo con el del último paquete de instalación
+ de Elgg descargado de <a href="http://elgg.org">elgg.org</a>.<br><br>
+
+ Si necesita instrucciones detalladas, por favor visite la <a href="http://docs.elgg.org/wiki/Upgrading_Elgg">
+ Documentación de actualización de Elgg</a>. Si necesita asistencia, por favor acuda a los
+ <a href="http://community.elgg.org/pg/groups/discussion/">Foros de Soporte de la Comunidad</a>',
+ 'generic_comment:title' => 'Comentario de %s',
+ 'ca' => 'Catalán',
+ 'de' => 'Alemán',
+ 'el' => 'Griego',
+ 'en' => 'Inglés',
+ 'eu' => 'Basco',
+ 'fr' => 'Francés',
+ 'gd' => 'Scots / Gaélico',
+ 'gl' => 'Gallego',
+ 'gn' => 'Guaraní',
+ 'he' => 'Hebreo',
+ 'it' => 'Italiano',
+ 'iw' => 'Hebreo (obsoleto)',
+ 'ja' => 'Japonés',
+ 'ko' => 'Coreano',
+ 'la' => 'Latín',
+ 'lt' => 'Lituano',
+ 'pt' => 'Portugués',
+ 'ru' => 'Ruso',
+ 'sq' => 'Albanés',
+ 'sr' => 'Serbio',
+ 'vi' => 'Vietnamita',
+ 'zh' => 'Chino',
+ 'add' => 'Añade',
+ 'item:site' => 'Sitios',
+ 'login' => 'Iniciar sesión',
+ 'loginok' => 'Ha iniciado sesión',
+ 'loginerror' => 'Inicio de sesión incorrecto. Verifique sus credenciales e intente nuevamente',
+ 'login:empty' => 'El nombre de usuario y contraseña son requeridos',
+ 'login:baduser' => 'No se pudo cargar su cuenta de usuario',
+ 'auth:nopams' => 'Error interno. No se encuentra un método de autenticación instalado',
+ 'logout' => 'Cerrar sesión',
+ 'logoutok' => 'Se ha cerrado la sesión',
+ 'logouterror' => 'No se pudo cerrar la sesión, por favor intente nuevamente',
+ 'loggedinrequired' => 'Debe estar autenticado para poder visualizar esta página',
+ 'adminrequired' => 'Debe ser un administrador para poder visualizar esta página',
+ 'membershiprequired' => 'Debe ser miembro del grupo para poder visualizar esta página',
+ 'exception:title' => 'Error Fatal',
+ 'actionundefined' => 'La acción (%s) solicitada no se encuentra definida en el sistema',
+ 'actionnotfound' => 'El log de acciones para %s no se ha encontrado',
+ 'actionloggedout' => 'Lo sentimos, no puede realizar esta acción sin identificarse',
+ 'actionunauthorized' => 'Usted no posee los permisos necesarios para realizar esta acción',
+ 'InstallationException:SiteNotInstalled' => 'No se pudo procesar la solicitud. El sitio no se encuentra configurado o la base de datos se encuentra caída',
+ 'InstallationException:MissingLibrary' => 'No se pudo cargar %s',
+ 'InstallationException:CannotLoadSettings' => 'No se pudo cargar el archivo de configuracion, puede que no exista o que se deba a un error de configuración de permisos',
+ 'SecurityException:Codeblock' => 'Acceso denegado para la ejecución de bloque de código privilegiado',
+ 'DatabaseException:WrongCredentials' => 'No se pudo conectar a la base de datos con las credenciales provistas. Verifique el archivo de configuración',
+ 'DatabaseException:NoConnect' => 'No se puede consultar la base de datos \'%s\', por favor verifique que dicha base de datos exista y que posea permisos sobre la misma',
+ 'SecurityException:FunctionDenied' => 'Acceso denegado a la función privilegiada \'%s\'',
+ 'DatabaseException:DBSetupIssues' => 'Se encontró una cantidad de errores: ',
+ 'DatabaseException:ScriptNotFound' => 'No se pudo encontrar el script de base de datos %s',
+ 'DatabaseException:InvalidQuery' => 'Consulta inválida',
+ 'IOException:FailedToLoadGUID' => 'Error al cargar una nueva %s de GUID: %d',
+ 'InvalidParameterException:NonElggObject' => 'Pasando un no-ElggObject a un constructor ElggObject!',
+ 'InvalidParameterException:UnrecognisedValue' => 'No se reconoce el valor pasado al constructor',
+ 'InvalidClassException:NotValidElggStar' => 'GUID: %d no es un %s válido',
+ 'PluginException:MisconfiguredPlugin' => '%s (guid: %s) es un plugin desconfigurado que ha sido deshabilitado. Por favor revise la Wiki de Elgg para más información (http://docs.elgg.org/wiki/)',
+ 'PluginException:CannotStart' => '%s (guid: %s) no puede iniciarse. Motivo: %s',
+ 'PluginException:InvalidID' => '%s no es un ID de plugin válido',
+ 'PluginException:InvalidPath' => '%s es un path de plugin inválido',
+ 'PluginException:InvalidManifest' => 'Archivo de manifesto inválido para el plugin %s',
+ 'PluginException:InvalidPlugin' => '%s no es un plugin válido',
+ 'PluginException:InvalidPlugin:Details' => '%s no es un plugin válido: %s',
+ 'ElggPlugin:MissingID' => 'No se encuentra el ID del plugin (guid %s)',
+ 'ElggPlugin:NoPluginPackagePackage' => 'ElggPluginPackage faltante para el plugin con ID %s (guid %s)',
+ 'ElggPluginPackage:InvalidPlugin:MissingFile' => 'Archivo %s faltante en el package',
+ 'ElggPluginPackage:InvalidPlugin:InvalidDependency' => 'Tipo de dependencia "%s" inválida',
+ 'ElggPluginPackage:InvalidPlugin:InvalidProvides' => 'Tipo "%s" provisto inválido',
+ 'ElggPluginPackage:InvalidPlugin:CircularDep' => 'Dependencia %s inválida "%s" en plugin %s. Los plugins no pueden entrar en conlicto con otros requeridos!',
+ 'ElggPlugin:Exception:CannotIncludeFile' => 'No puede incluirse %s para el plugin %s (guid: %s) en %s. Verifique los permisos!',
+ 'ElggPlugin:Exception:CannotRegisterViews' => 'No puede cargarse el directorio "views" para el plugin %s (guid: %s) en %s. Verifique los permisos!',
+ 'ElggPlugin:Exception:CannotRegisterLanguages' => 'No pueden registrarse lenguajes para el plugin %s (guid: %s) en %s. Verifique los permisos!',
+ 'ElggPlugin:Exception:NoID' => 'No se encontró el ID para el plugin con guid %s!',
+ 'PluginException:ParserError' => 'Error procesando el manifiesto con versión de API %s en plugin %s',
+ 'PluginException:NoAvailableParser' => 'No se encuentra un procesador para el manifiesto de la versión de la API %s en plugin %s',
+ 'PluginException:ParserErrorMissingRequiredAttribute' => 'Atributo \'%s\' faltante en manifiesto del el plugin %s',
+ 'ElggPlugin:Dependencies:Requires' => 'Requiere',
+ 'ElggPlugin:Dependencies:Suggests' => 'Sugiere',
+ 'ElggPlugin:Dependencies:Conflicts' => 'Conflictos',
+ 'ElggPlugin:Dependencies:Conflicted' => 'En conflicto',
+ 'ElggPlugin:Dependencies:Provides' => 'Provee',
+ 'ElggPlugin:Dependencies:Priority' => 'Prioridad',
+ 'ElggPlugin:Dependencies:Elgg' => 'Versión Elgg',
+ 'ElggPlugin:Dependencies:PhpExtension' => 'Extensión PHP: %s',
+ 'ElggPlugin:Dependencies:PhpIni' => 'Configuración PHP ini: %s',
+ 'ElggPlugin:Dependencies:Plugin' => 'Plugin: %s',
+ 'ElggPlugin:Dependencies:Priority:After' => 'Luego %s',
+ 'ElggPlugin:Dependencies:Priority:Before' => 'Antes %s',
+ 'ElggPlugin:Dependencies:Priority:Uninstalled' => '%s no instalado',
+ 'ElggPlugin:Dependencies:Suggests:Unsatisfied' => 'Faltante',
+ 'ElggPlugin:InvalidAndDeactivated' => '%s no es un plugin válido y se ha deshabilitado',
+ 'InvalidParameterException:NonElggUser' => 'Pasando un no-ElggUser a un constructor ElggUser!',
+ 'InvalidParameterException:NonElggSite' => 'Pasando un no-ElggSite a un constructor ElggSite!',
+ 'InvalidParameterException:NonElggGroup' => 'Pasando un no-ElggGroup a un constructor ElggGroup!',
+ 'IOException:UnableToSaveNew' => 'No se pudo guardar un nuevo %s',
+ 'InvalidParameterException:GUIDNotForExport' => 'No se ha especificado un GUID durante la exportación, esto no debería ocurrir',
+ 'InvalidParameterException:NonArrayReturnValue' => 'Función de serialización de entidad pasada a un parámetro de retorno no-array',
+ 'ConfigurationException:NoCachePath' => 'Path de Cache seteado en Null!',
+ 'IOException:NotDirectory' => '%s no es un directorio',
+ 'IOException:BaseEntitySaveFailed' => 'No se pudo guardar una nueva entidad!',
+ 'InvalidParameterException:EntityTypeNotSet' => 'Debe setearse el tipo de entidad',
+ 'ClassException:ClassnameNotClass' => '%s no es un %s',
+ 'ClassNotFoundException:MissingClass' => 'Clase \'%s\' no encontrada, hay algún plugin faltante?',
+ 'InstallationException:TypeNotSupported' => 'No se reconoce el tipo %s. Esto indica un error en la instalación, seguramente causado por una actualización incompleta',
+ 'ImportException:ImportFailed' => 'No pudo importarse el elemento %d',
+ 'ImportException:ProblemSaving' => 'Se encontró un problema al guardar %s',
+ 'ImportException:NoGUID' => 'Se creó una nueva entidad sin GUID, esto no debe ocurrir',
+ 'ImportException:GUIDNotFound' => 'No se pudo encontrar la entidad \'%d\'',
+ 'ImportException:ProblemUpdatingMeta' => 'Ocurrió un error al actualizar \'%s\' en la entidad \'%d\'',
+ 'ExportException:NoSuchEntity' => 'GUID de entidad inválido: %d',
+ 'ImportException:NoODDElements' => 'No se encontraron elementos OpenDD para la importación, la importación ha fallado',
+ 'ImportException:NotAllImported' => 'No se importaron todos los elementos',
+ 'InvalidParameterException:UnrecognisedFileMode' => 'Modo de archivo \'%s\' no reconocido',
+ 'InvalidParameterException:MissingOwner' => 'El archivo %s (guid: %d) (guid del dueño: %d) no tiene un dueño!',
+ 'IOException:CouldNotMake' => 'No puede realizarse %s',
+ 'IOException:MissingFileName' => 'Debe especificar un nombre antes de abrir un archivo',
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => 'No pudo cargarse la clase de repositorio %s para el archivo %u',
+ 'NotificationException:NoNotificationMethod' => 'No se especificó un método de notificación',
+ 'NotificationException:NoHandlerFound' => 'No se encuentra un controlador \'%s\' o no es ejecutable',
+ 'NotificationException:ErrorNotifyingGuid' => 'Ocurrió un error al notificar %d',
+ 'NotificationException:NoEmailAddress' => 'No pudo cargarse la dirección de Email para el GUID:%d',
+ 'NotificationException:MissingParameter' => 'Parámetro requerido faltante: \'%s\'',
+ 'DatabaseException:WhereSetNonQuery' => 'Donde no contenga WhereQueryComponent',
+ 'DatabaseException:SelectFieldsMissing' => 'Campos faltantes en el estilo de consulta',
+ 'DatabaseException:UnspecifiedQueryType' => 'Tipo de consulta no reconocido o no especificado',
+ 'DatabaseException:NoTablesSpecified' => 'No se especificaron las tablas para la consulta',
+ 'DatabaseException:NoACL' => 'No se especificó el control de acceso en la consulta',
+ 'InvalidParameterException:NoEntityFound' => 'No se encuentra la entidad, puede que esta no exista o que no tenga los permisos necesarios sobre ella',
+ 'InvalidParameterException:GUIDNotFound' => 'No se pudo encontrar el GUID: %s, o no tiene acceso a ella',
+ 'InvalidParameterException:IdNotExistForGUID' => 'Lo sentimos, \'%s\' no existe para el guid: %d',
+ 'InvalidParameterException:CanNotExportType' => 'Lo sentimos, no se encuentra implementada la exportación de \'%s\'',
+ 'InvalidParameterException:NoDataFound' => 'No se encontraron resultados',
+ 'InvalidParameterException:DoesNotBelong' => 'No pertenece a la entidad',
+ 'InvalidParameterException:DoesNotBelongOrRefer' => 'No pertenece o se refiere a la entidad',
+ 'InvalidParameterException:MissingParameter' => 'Parámetro faltante, debe proveer un GUID',
+ 'InvalidParameterException:LibraryNotRegistered' => '%s no es una librería registrada',
+ 'APIException:ApiResultUnknown' => 'Los resultados de la API no son conocidos, esto no debe ocurrir',
+ 'ConfigurationException:NoSiteID' => 'No se especificó un ID del sitio',
+ 'SecurityException:APIAccessDenied' => 'Lo sentimos, el acceso a la API ha sido deshabilitado para el administrador',
+ 'SecurityException:NoAuthMethods' => 'No se encontraron métodos de autenticación para procesar la solicitud',
+ 'InvalidParameterException:APIMethodOrFunctionNotSet' => 'Método o función no especificado en el llamado a expose_method()',
+ 'InvalidParameterException:APIParametersArrayStructure' => 'Estructuras de Array son inválidas en llamados a la función \'%s\'',
+ 'InvalidParameterException:UnrecognisedHttpMethod' => 'Método http %s no reconocido para el método \'%s\' de la API',
+ 'APIException:MissingParameterInMethod' => 'Parámetro %s faltante en método %s',
+ 'APIException:ParameterNotArray' => '%s no es un Array',
+ 'APIException:UnrecognisedTypeCast' => 'Tipo no reconocido en casteo %s para la variable \'%s\' en el método \'%s\'',
+ 'APIException:InvalidParameter' => 'Se encontró un parámetro inválido para \'%s\' en el método \'%s\'',
+ 'APIException:FunctionParseError' => '%s(%s) posee un error de procesamiento',
+ 'APIException:FunctionNoReturn' => '%s(%s) no retornó ningún valor',
+ 'APIException:APIAuthenticationFailed' => 'El llamado al método falló en la autenticación de la API',
+ 'APIException:UserAuthenticationFailed' => 'El llamado al método falló en la autenticación del usuario',
+ 'SecurityException:AuthTokenExpired' => 'El token de autenticación no se encuentra o bien se encuentra expirado',
+ 'CallException:InvalidCallMethod' => '%s debe llamarse utilizando \'%s\'',
+ 'APIException:MethodCallNotImplemented' => 'La llamada al método \'%s\' no se encuentra implementada',
+ 'APIException:FunctionDoesNotExist' => 'La función para el método \'%s\' no es ejecutable',
+ 'APIException:AlgorithmNotSupported' => 'No se soporta o se ha deshabilitado el algoritmo \'%s\'',
+ 'ConfigurationException:CacheDirNotSet' => 'Directorio de Cache \'cache_path\' no establecido',
+ 'APIException:NotGetOrPost' => 'El método de Request debe ser GET o POST',
+ 'APIException:MissingAPIKey' => 'Clave API faltante',
+ 'APIException:BadAPIKey' => 'Clave API incorrecta',
+ 'APIException:MissingHmac' => 'Encabezado X-Elgg-hmac faltante',
+ 'APIException:MissingHmacAlgo' => 'Encabezado X-Elgg-hmac-algo faltante',
+ 'APIException:MissingTime' => 'Encabezado X-Elgg-time faltante',
+ 'APIException:MissingNonce' => 'Encabezado X-Elgg-nonce faltante',
+ 'APIException:TemporalDrift' => 'X-Elgg-time es muy lejano en el pasado o en el futuro. Fallo Epoch',
+ 'APIException:NoQueryString' => 'No hay datos en la query string',
+ 'APIException:MissingPOSTHash' => 'Encabezado X-Elgg-posthash faltante',
+ 'APIException:MissingPOSTAlgo' => 'Encabezado X-Elgg-posthash_algo faltante',
+ 'APIException:MissingContentType' => 'Content type faltante para post data',
+ 'SecurityException:InvalidPostHash' => 'Hash de POST data inválido - Se esperaba %s pero se recibió %s',
+ 'SecurityException:DupePacket' => 'Firma de paquete ya vista',
+ 'SecurityException:InvalidAPIKey' => 'Clave API inválida o faltante',
+ 'NotImplementedException:CallMethodNotImplemented' => 'El llamado al método \'%s\' no es soportado',
+ 'NotImplementedException:XMLRPCMethodNotImplemented' => 'Llamado al método XML-RPC \'%s\' no implementada',
+ 'InvalidParameterException:UnexpectedReturnFormat' => 'La llamada al método \'%s\' devolvió un resultado inesperado',
+ 'CallException:NotRPCCall' => 'La llamada no parece ser una llamada XML-RPC válida',
+ 'PluginException:NoPluginName' => 'No se pudo encontrar el nombre del plugin',
+ 'SecurityException:authenticationfailed' => 'No se pudo autenticar el usuario',
+ 'CronException:unknownperiod' => '%s no es un período reconocible',
+ 'SecurityException:deletedisablecurrentsite' => 'No puede eliminar o deshabilitar el sitio que está viendo en este momento!',
+ 'RegistrationException:EmptyPassword' => 'Los campos de contraseñas son obligatorios',
+ 'RegistrationException:PasswordMismatch' => 'Las contraseñas deben coincidir',
+ 'LoginException:BannedUser' => 'Su ingreso ha sido bloqueado momentáneamente',
+ 'LoginException:UsernameFailure' => 'No pudo iniciarse la sesión. Por favor verifique su nombre de usuario y contraseña',
+ 'LoginException:PasswordFailure' => 'No pudo iniciarse la sesión. Por favor verifique su nombre de usuario y contraseña',
+ 'LoginException:AccountLocked' => 'Su cuenta ha sido bloqueada por la cantidad de intentos fallidos de inicio de sesion',
+ 'deprecatedfunction' => 'Precaución: Este código utiliza la función obsoleta \'%s\' que no es compatible con esta versión de Elgg',
+ 'pageownerunavailable' => 'Precaución: El administrador de página %d no se encuentra accesible!',
+ 'viewfailure' => 'Ocurrió un error interno en la vista %s',
+ 'changebookmark' => 'Por favor modifique su índice para esta vista',
+ 'system.api.list' => 'Lista todas las llamadas API disponibles en el sistema',
+ 'auth.gettoken' => 'Esta llamada API le permite al usuario obtener un token de autenticación el cual puede ser utilizado para autenticar futuras llamadas a la API. Enviarlo como parámetro auth_token',
+ 'name' => 'Nombre',
+ 'email' => 'Dirección de Email',
+ 'username' => 'Nombre de usuario',
+ 'loginusername' => 'Nombre de usuario o Email',
+ 'password' => 'Contraseña',
+ 'passwordagain' => 'Contraseña (nuevamente, para verificación)',
+ 'admin_option' => 'Hacer administrador a este usuario?',
+ 'PRIVATE' => 'Privado',
+ 'LOGGED_IN' => 'Usuarios logueados',
+ 'PUBLIC' => 'Todos',
+ 'access:friends:label' => 'Amigos',
+ 'access' => 'Acceso',
+ 'widgets:add' => 'Agregar widget',
+ 'widgets:add:description' => 'Haga click en el botón de algún widget para agregarlo a la página',
+ 'widgets:position:fixed' => '(Posición fija en la página)',
+ 'widget:unavailable' => 'Ya agregó este widget',
+ 'widget:numbertodisplay' => 'Cantidad de elementos para mostrar',
+ 'widget:delete' => 'Quitar %s',
+ 'widget:edit' => 'Personalizar este widget',
+ 'widgets' => 'Widgets',
+ 'widget' => 'Widget',
+ 'item:object:widget' => 'Widgets',
+ 'widgets:save:success' => 'El widget se guardó correctamente',
+ 'widgets:save:failure' => 'No se pudo guardar el widget, por favor intente nuevamente',
+ 'widgets:add:success' => 'Se agregó correctamente el widget',
+ 'widgets:add:failure' => 'No se pudo añadir el widget',
+ 'widgets:move:failure' => 'No se pudo guardar la nueva posición del widget',
+ 'widgets:remove:failure' => 'No se pudo quitar el widget',
+ 'group' => 'Grupo',
+ 'item:group' => 'Grupos',
+ 'user' => 'Usuario',
+ 'item:user' => 'Usuarios',
+ 'friends' => 'Amigos',
+ 'friends:yours' => 'Tus Amigos',
+ 'friends:owned' => 'Amigos de %s',
+ 'friend:add' => 'Nuevo amigo',
+ 'friend:remove' => 'Quitar amigo',
+ 'friends:add:successful' => 'Se ha añadido a %s como amigo',
+ 'friends:add:failure' => 'No se pudo añadir a %s como amigo. Por favor intente nuevamente',
+ 'friends:remove:successful' => 'Se quitó a %s de sus amigos',
+ 'friends:remove:failure' => 'No se pudo quitar a %s de sus amigos. Por favor intente nuevamente',
+ 'friends:none' => 'Este usuario no tiene amigos aún',
+ 'friends:none:you' => 'No tienes amigos aún',
+ 'friends:none:found' => 'No se encontraron amigos',
+ 'friends:of:none' => 'Nadie ha agragado a este usuario como amigo aún',
+ 'friends:of:none:you' => 'Nadie te ha agragado como amigo aún. Comienza a añadir contenido y completar tu perfil para que la gente te encuentre!',
+ 'friends:of:owned' => 'Amigos de %s',
+ 'friends:of' => 'Amigos de',
+ 'friends:collections' => 'Colecciones de amigos',
+ 'collections:add' => 'Nueva colección',
+ 'friends:collections:add' => 'Nueva colección de amigos',
+ 'friends:addfriends' => 'Seleccionar amigos',
+ 'friends:collectionname' => 'Nombre de la colección',
+ 'friends:collectionfriends' => 'Amigos en la colección',
+ 'friends:collectionedit' => 'Editar esta colección',
+ 'friends:nocollections' => 'No tienes colecciones aún',
+ 'friends:collectiondeleted' => 'La colección ha sido eliminada',
+ 'friends:collectiondeletefailed' => 'No se puede eliminar la colección',
+ 'friends:collectionadded' => 'La colección se ha creado correctamente',
+ 'friends:nocollectionname' => 'Debes ponerle un nombre a la colección antes de crearla',
+ 'friends:collections:edit' => 'Editar colección',
+ 'friends:collections:edited' => 'Colección guardada',
+ 'friends:collection:edit_failed' => 'No se pudo guardar la colección',
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'avatar' => 'Imagen de perfil',
+ 'avatar:create' => 'Cree su imagen de perfil',
+ 'avatar:edit' => 'Editar imagen de perfil',
+ 'avatar:preview' => 'Previsualizar',
+ 'avatar:upload' => 'Subir nueva imagen de perfil',
+ 'avatar:current' => 'Imagen de perfil actual',
+ 'avatar:crop:title' => 'Herramienta de recorte de imagen de perfil',
+ 'avatar:upload:instructions' => 'Su imagen de perfil se mostrará en la red. Podrá modificarla siempre que lo desee (Formatos de archivo aceptados: GIF, JPG o PNG)',
+ 'avatar:create:instructions' => 'Haga click y arrastre un cuadrado debajo para seleccionar el recorte de la imagen. Aparecerá una previsualización en la caja de la deracha. Cuando esté conforme con la previsualización, haga click en \'Crear imagen de perfil\'. La versión recortada será la que se utilice para mostrar en la red',
+ 'avatar:upload:success' => 'Imagen de perfil subida correctamente',
+ 'avatar:upload:fail' => 'Falló la subida de la imagen de perfil',
+ 'avatar:resize:fail' => 'Error al modificar el tamaño de la imagen de perfil',
+ 'avatar:crop:success' => 'Recorte de la imagen de perfil finalizado correctamente',
+ 'avatar:crop:fail' => 'Error en el recorte de la imagen de perfil',
+ 'profile:edit' => 'Editar perfil',
+ 'profile:aboutme' => 'Sobre mi',
+ 'profile:description' => 'Sobre mi',
+ 'profile:briefdescription' => 'Descripción corta',
+ 'profile:location' => 'Ubicación',
+ 'profile:skills' => 'Habilidades',
+ 'profile:interests' => 'Intereses',
+ 'profile:contactemail' => 'Email de contacto',
+ 'profile:phone' => 'Teléfono',
+ 'profile:mobile' => 'Móvil',
+ 'profile:website' => 'Sitio Web',
+ 'profile:twitter' => 'Usuario de Twitter',
+ 'profile:saved' => 'Su perfil ha sido guardado correctamente',
+ 'admin:appearance:profile_fields' => 'Editar campos de perfil',
+ 'profile:edit:default' => 'Editar campos de perfil',
+ 'profile:label' => 'Etiqueta de perfil',
+ 'profile:type' => 'Tipo de perfil',
+ 'profile:editdefault:delete:fail' => 'Error al eliminar item de perfil por defecto',
+ 'profile:editdefault:delete:success' => 'Item de perfil por defecto eliminado!',
+ 'profile:defaultprofile:reset' => 'Reinicio de perfil de sistema por defecto',
+ 'profile:resetdefault' => 'Reiniciar perfil de sistema por defecto',
+ 'profile:explainchangefields' => 'Puede reemplazar los campos de perfil existentes con sus propios utilizando el formulario de abajo.
+
+ Ingrese un nuevo nombre de campo de perfil, por ejemplo, \'Equipo favorito\', luego seleccione el tipo de campo (eg. texto, url, tags), y haga click en el botón de \'Agregar\'. Para re ordenar los campos arrastre el control al lado de la etiqueta del campo. Para editar la etiqueta del campo haga click en el texto de la etiqueta para volverlo editable.
+
+ Puede volver a la disposición original del perfil en cualquier momento, pero perderá la información creada en los campos personalizados del perfil hasta el momento',
+ 'profile:editdefault:success' => 'Elemento agregado al perfil por defecto correctamente',
+ 'profile:editdefault:fail' => 'No se pudo guardar el perfil por defecto',
+ 'feed:rss' => 'Canal RSS para esta página',
+ 'link:view' => 'Ver enlace',
+ 'link:view:all' => 'Ver todos',
+ 'river' => 'River',
+ 'river:friend:user:default' => '%s ahora es amigo de %s',
+ 'river:update:user:avatar' => '%s tiene una nueva imagen de perfil',
+ 'river:noaccess' => 'No posee permisos para visualizar este elemento',
+ 'river:posted:generic' => '%s publicado',
+ 'riveritem:single:user' => 'un usuario',
+ 'riveritem:plural:user' => 'algunos usuarios',
+ 'river:ingroup' => 'en el grupo %s',
+ 'river:none' => 'Sin actividad',
+ 'river:widget:title' => 'Actividad',
+ 'river:widget:description' => 'Mostrar la última actividad',
+ 'river:widget:type' => 'Tipo de actividad',
+ 'river:widgets:friends' => 'Actividad de amigos',
+ 'river:widgets:all' => 'Toda la actividad del sitio',
+ 'notifications:usersettings' => 'Configuración de notifiaciones',
+ 'notifications:methods' => 'Por favor, indique los métodos que desea habilitar',
+ 'notifications:usersettings:save:ok' => 'Su configuración de notificaciones se guardó correctamente',
+ 'notifications:usersettings:save:fail' => 'Ocurrió un error al guardar la configuración de notificaciones',
+ 'user.notification.get' => 'Retornar la configuración de notificaciones para un usuario dado',
+ 'user.notification.set' => 'Establecer la configuración de notificaciones para un usuario dado',
+ 'search' => 'Buscar',
+ 'searchtitle' => 'Buscar: %s',
+ 'users:searchtitle' => 'Buscar para usuarios: %s',
+ 'groups:searchtitle' => 'Buscar para grupos: %s',
+ 'advancedsearchtitle' => '%s con coincidencias en resultados %s',
+ 'notfound' => 'No se encontraron resultados',
+ 'next' => 'Siguiente',
+ 'previous' => 'Anterior',
+ 'viewtype:change' => 'Modificar tipo de lista',
+ 'viewtype:list' => 'Vista de lista',
+ 'viewtype:gallery' => 'Galería',
+ 'tag:search:startblurb' => 'Items con tags que coincidan con \'%s\':',
+ 'user:search:startblurb' => 'Usuarios que coincidan con \'%s\':',
+ 'user:search:finishblurb' => 'Click aquí para ver mas',
+ 'group:search:startblurb' => 'Grupos que coinciden con \'%s\':',
+ 'group:search:finishblurb' => 'Click aquí para ver mas',
+ 'search:go' => 'Ir',
+ 'userpicker:only_friends' => 'Sólo amigos',
+ 'account' => 'Cuenta',
+ 'settings' => 'Configuración',
+ 'tools' => 'Herramientas',
+ 'register' => 'Registrarse',
+ 'registerok' => 'Se registró correctamente para %s',
+ 'registerbad' => 'No se pudo registrar debido a un error desconocido',
+ 'registerdisabled' => 'La registración se deshabilitó por el administrador del sistema',
+ 'registration:notemail' => 'No ha ingresado una dirección de Email válida',
+ 'registration:userexists' => 'El nombre de usuario ya existe',
+ 'registration:usernametooshort' => 'El nombre de usuario debe tener un mínimo de %u caracteres',
+ 'registration:passwordtooshort' => 'La contraseña debe tener un mínimo de %u caracteres',
+ 'registration:dupeemail' => 'Ya se encuentra registrada la dirección de Email',
+ 'registration:invalidchars' => 'Lo sentimos, su nombre de usuario posee los caracteres inválidos: %s. Estos son todos los caracteres que se encuentran invalidados: %s',
+ 'registration:emailnotvalid' => 'Lo sentimos, la dirección de email que ha ingresado es inválida en el sistema',
+ 'registration:passwordnotvalid' => 'Lo sentimos, la contraseña que ha ingresado es inválida en el sistema',
+ 'registration:usernamenotvalid' => 'Lo sentimos, el nombre de usuario que ha ingresado es inválida en el sistema',
+ 'adduser' => 'Nuevo usuario',
+ 'adduser:ok' => 'Se agregó correctamente un nuevo usuario',
+ 'adduser:bad' => 'No se pudo agregar el nuevo usuario',
+ 'user:set:name' => 'Configuración del nombre de cuenta',
+ 'user:name:label' => 'Mi nombre para mostrar',
+ 'user:name:success' => 'Se modificó correctamente su nombre en la red',
+ 'user:name:fail' => 'No se pudo modificar su nombre en la red. Por favor, asegúrese de que no es demasiado largo e intente nuevamente',
+ 'user:set:password' => 'Contraseña de la cuenta',
+ 'user:current_password:label' => 'Contraseña actual',
+ 'user:password:label' => 'Nueva contraseña',
+ 'user:password2:label' => 'Confirmar nueva contraseña',
+ 'user:password:success' => 'Contraseña modificada',
+ 'user:password:fail' => 'No se pudo modificar la contraseña en la red',
+ 'user:password:fail:notsame' => 'Las dos contraseñas no coinciden!',
+ 'user:password:fail:tooshort' => 'La contraseña es demasiado corta!',
+ 'user:password:fail:incorrect_current_password' => 'La contraseña actual ingresada es incorrecta',
+ 'user:resetpassword:unknown_user' => 'Usuario inválido',
+ 'user:resetpassword:reset_password_confirm' => 'Al modificar la contraseña se le enviará la nueva a la dirección de Email registrada',
+ 'user:set:language' => 'Configuración de lenguaje',
+ 'user:language:label' => 'Su lenguaje',
+ 'user:language:success' => 'Se actualizó su configuración de lenguaje',
+ 'user:language:fail' => 'No se pudo actualizar su configuración de lenguaje',
+ 'user:username:notfound' => 'No se encuentra el usuario %s',
+ 'user:password:lost' => 'Olvidé mi contraseña',
+ 'user:password:resetreq:success' => 'Solicitud de nueva contraseña confirmada, se le ha enviado un Email',
+ 'user:password:resetreq:fail' => 'No se pudo solicitar una nueva contraseña',
+ 'user:password:text' => 'Para solicitar una nueva contraseña ingrese su nombre de usuario y presione el botón debajo',
+ 'user:persistent' => 'Recordarme',
+ 'walled_garden:welcome' => 'Bienvenido a',
+ 'menu:page:header:administer' => 'Administrar',
+ 'menu:page:header:configure' => 'Configurar',
+ 'menu:page:header:develop' => 'Desarrollar',
+ 'menu:page:header:default' => 'Otro',
+ 'admin:view_site' => 'Ver sitio',
+ 'admin:loggedin' => 'Sesión iniciada como %s',
+ 'admin:menu' => 'Menú',
+ 'admin:configuration:success' => 'Su configuración ha sido guardada',
+ 'admin:configuration:fail' => 'No se pudo guardar su configuración',
+ 'admin:unknown_section' => 'Sección de administración inválida',
+ 'admin' => 'Administración',
+ 'admin:description' => 'El panel de administración le permite organizar todos los aspectos del sistema, desde la gestión de usuarios hasta el comportamiento de los plugins. Seleccione una opción debajo para comenzar',
+ 'admin:statistics' => 'Estadísticas',
+ 'admin:statistics:overview' => 'Resumen',
+ 'admin:appearance' => 'Apariencia',
+ 'admin:users' => 'Usuarios',
+ 'admin:users:online' => 'Conectados actualmente',
+ 'admin:users:newest' => 'Los mas nuevos',
+ 'admin:users:add' => 'Agregar Nuevo Usuario',
+ 'admin:users:description' => 'Este panel de administración le permite gestionar la configuración de usuarios de la red. Seleccione una opción debajo para comenzar',
+ 'admin:users:adduser:label' => 'Click aquí para agregar un nuevo usuario..',
+ 'admin:users:opt:linktext' => 'Configurar usuarios..',
+ 'admin:users:opt:description' => 'Configurar usuarios e información de cuentas',
+ 'admin:users:find' => 'Buscar',
+ 'admin:settings' => 'Configuración',
+ 'admin:settings:basic' => 'Configuración Básica',
+ 'admin:settings:advanced' => 'Configuración Avanzada',
+ 'admin:site:description' => 'Este panel de administración le permite gestionar la configuración global de la red. Selecciona una opción debajo para comenzar',
+ 'admin:site:opt:linktext' => 'Configurar sitio..',
+ 'admin:site:access:warning' => 'Las modificaciones en el control de accesos sólo tendrá impacto en los accesos futuros',
+ 'admin:dashboard' => 'Panel de control',
+ 'admin:widget:online_users' => 'Usuarios conectados',
+ 'admin:widget:online_users:help' => 'Lista los usuarios conectados actualmente en la red',
+ 'admin:widget:new_users' => 'Usuarios Nuevos',
+ 'admin:widget:new_users:help' => 'Lista los usuarios más nuevos',
+ 'admin:widget:content_stats' => 'Estadísticas de contenido',
+ 'admin:widget:content_stats:help' => 'Seguimiento del contenido creado por los usuarios de la red',
+ 'widget:content_stats:type' => 'Tipo de contenido',
+ 'widget:content_stats:number' => 'Número',
+ 'admin:widget:admin_welcome' => 'Bienvenido',
+ 'admin:widget:admin_welcome:help' => 'Esta es el área de administración',
+ 'admin:widget:admin_welcome:intro' => 'Bienvenido! Se encuentra viendo el panel de control de la administración. Es útil para visualizar las novedades en la red',
+ 'admin:widget:admin_welcome:admin_overview' => 'La navegación para el área de administración se encuentra en el menú de la derecha. El mismo se organiza en tres secciones:
+ <dl>
+ <dt>Administrar</dt><dd>Tareas diarias como monitorear contenido reportado, verificar quién se encuentra conectado y visualizar estadísticas.</dd>
+ <dt>Configurar</dt><dd>Tareas ocasionales como establecer el nombre de la red social o activar y desactivar plugins.</dd>
+ <dt>Desarrollar</dt><dd>Para desarrolladores quienes construyen plugins o diseñan temas personalizados. (Requiere el plugin de desarrollador.)</dd>
+ </dl>
+ ',
+ 'admin:footer:faq' => 'FAQs de Administración',
+ 'admin:footer:manual' => 'Manual de Administración',
+ 'admin:footer:community_forums' => 'Foros de la Comunidad Elgg',
+ 'admin:footer:blog' => 'Blog Elgg',
+ 'admin:plugins:category:all' => 'Todos los plugins',
+ 'admin:plugins:category:active' => 'Plugins activos',
+ 'admin:plugins:category:inactive' => 'Plugins inactivos',
+ 'admin:plugins:category:admin' => 'Admin',
+ 'admin:plugins:category:bundled' => 'Incluído',
+ 'admin:plugins:category:content' => 'Contenido',
+ 'admin:plugins:category:development' => 'Desarrollo',
+ 'admin:plugins:category:enhancement' => 'Mejoras',
+ 'admin:plugins:category:api' => 'Servicio/API',
+ 'admin:plugins:category:communication' => 'Comunicación',
+ 'admin:plugins:category:security' => 'Seguridad and Spam',
+ 'admin:plugins:category:social' => 'Social',
+ 'admin:plugins:category:multimedia' => 'Multimedia',
+ 'admin:plugins:category:theme' => 'Temas',
+ 'admin:plugins:category:widget' => 'Widgets',
+ 'admin:plugins:sort:priority' => 'Prioridad',
+ 'admin:plugins:sort:alpha' => 'Alfabético',
+ 'admin:plugins:sort:date' => 'Los más nuevos',
+ 'admin:plugins:markdown:unknown_plugin' => 'Plugin desconocido',
+ 'admin:plugins:markdown:unknown_file' => 'Archivo desconocido',
+ 'admin:notices:could_not_delete' => 'Notificación de no se pudo eliminar',
+ 'admin:options' => 'Opciones de Admin',
+ 'plugins:settings:save:ok' => 'Configuración para el plugin %s guardada correctamente',
+ 'plugins:settings:save:fail' => 'Ocurrió un error al intentar guardar la configuración para el plugin %s',
+ 'plugins:usersettings:save:ok' => 'Configuración del usuario para el plugin %s guardada',
+ 'plugins:usersettings:save:fail' => 'Ocurrió un error al intentar guardar la configuración del usuario para el plugin %s',
+ 'item:object:plugin' => 'Plugins',
+ 'admin:plugins' => 'Plugins',
+ 'admin:plugins:activate_all' => 'Activar todos',
+ 'admin:plugins:deactivate_all' => 'Desactivar todos',
+ 'admin:plugins:activate' => 'Activar',
+ 'admin:plugins:deactivate' => 'Desactivar',
+ 'admin:plugins:description' => 'Este panel le permite controlar y configurar las herramientas instaladas en su sitio',
+ 'admin:plugins:opt:linktext' => 'Configurar herramientas..',
+ 'admin:plugins:opt:description' => 'Configurar las herramientas instaladas en el sitio. ',
+ 'admin:plugins:label:author' => 'Autor',
+ 'admin:plugins:label:copyright' => 'Copyright',
+ 'admin:plugins:label:categories' => 'Categorías',
+ 'admin:plugins:label:licence' => 'Licencia',
+ 'admin:plugins:label:website' => 'URL',
+ 'admin:plugins:label:moreinfo' => 'mas información',
+ 'admin:plugins:label:version' => 'Versión',
+ 'admin:plugins:label:location' => 'Ubicacion',
+ 'admin:plugins:label:dependencies' => 'Dependencias',
+ 'admin:plugins:warning:elgg_version_unknown' => 'Este plugin utiliza un archivo de manifiesto obsoleto y no especifica una versión de Elgg compatibla. Es muy probable que no funcione!',
+ 'admin:plugins:warning:unmet_dependencies' => 'Este plugin tiene dependencias desconocidas y no se activará. Consulte las dependencias debajo de mas información',
+ 'admin:plugins:warning:invalid' => '%s no es un plugin Elgg válido. Visite <a href="http://docs.elgg.org/Invalid_Plugin">la Documentación Elgg</a> para consejos de solución de problemas',
+ 'admin:plugins:cannot_activate' => 'no se puede activar',
+ 'admin:plugins:set_priority:yes' => 'Reordenar %s',
+ 'admin:plugins:set_priority:no' => 'No se puede reordenar %s',
+ 'admin:plugins:deactivate:yes' => 'Desactivar %s',
+ 'admin:plugins:deactivate:no' => 'No se puede desactivar %s',
+ 'admin:plugins:activate:yes' => 'Activado %s',
+ 'admin:plugins:activate:no' => 'No se puede activar %s',
+ 'admin:plugins:categories:all' => 'Todas las categorías',
+ 'admin:plugins:plugin_website' => 'Sitio del plugin',
+ 'admin:plugins:author' => '%s',
+ 'admin:plugins:version' => 'Versión %s',
+ 'admin:plugin_settings' => 'Configuración del plugin',
+ 'admin:plugins:warning:unmet_dependencies_active' => 'El plugin se ecnuentra activo pero posee dependencias desconocidas. Puede que se encuentren problemas en su funcionamiento. Vea "mas información" debajo para detalles',
+ 'admin:plugins:dependencies:type' => 'Tipo',
+ 'admin:plugins:dependencies:name' => 'Nombre',
+ 'admin:plugins:dependencies:expected_value' => 'Valor de Test',
+ 'admin:plugins:dependencies:local_value' => 'Valor Actual',
+ 'admin:plugins:dependencies:comment' => 'Comentario',
+ 'admin:statistics:description' => 'Este es un resumen de las estadísticas del sitio. Si necesita estadísticas mas avanzadas, hay dispoinble una funcionalidad de administración profesional',
+ 'admin:statistics:opt:description' => 'Ver información estadística sobre usuarios y objetos en el sitio',
+ 'admin:statistics:opt:linktext' => 'Ver estadísticas..',
+ 'admin:statistics:label:basic' => 'Estadísticas básicas del sitio',
+ 'admin:statistics:label:numentities' => 'Entidades del sitio',
+ 'admin:statistics:label:numusers' => 'Cantidad de usuarios',
+ 'admin:statistics:label:numonline' => 'Cantidad de usuarios conectados',
+ 'admin:statistics:label:onlineusers' => 'Usuarios conectados en este momento',
+ 'admin:statistics:label:version' => 'Versión de Elgg',
+ 'admin:statistics:label:version:release' => 'Release',
+ 'admin:statistics:label:version:version' => 'Versión',
+ 'admin:user:label:search' => 'Encontrar usuarios:',
+ 'admin:user:label:searchbutton' => 'Buscar',
+ 'admin:user:ban:no' => 'No puede bloquear al usuario',
+ 'admin:user:ban:yes' => 'Usuario bloqueado',
+ 'admin:user:self:ban:no' => 'No puede bloquearse a usted mismo',
+ 'admin:user:unban:no' => 'No puede desbloquear al usuario',
+ 'admin:user:unban:yes' => 'Usuario desbloqueado',
+ 'admin:user:delete:no' => 'No puede eliminar al usuario',
+ 'admin:user:delete:yes' => 'El usuario %s ha sido eliminado',
+ 'admin:user:self:delete:no' => 'No puede eliminarse a usted mismo',
+ 'admin:user:resetpassword:yes' => 'Contraseña restablecida, se notifica al usuario',
+ 'admin:user:resetpassword:no' => 'No se puede restablecer la contraseña',
+ 'admin:user:makeadmin:yes' => 'El usuario ahora es un administrador',
+ 'admin:user:makeadmin:no' => 'No se pudo establecer al usuario como administrador',
+ 'admin:user:removeadmin:yes' => 'El usuario ya no es administrador',
+ 'admin:user:removeadmin:no' => 'No se pueden quitar los privilegios de administrador de este usuario',
+ 'admin:user:self:removeadmin:no' => 'No puede quitar sus privilegios de administrador',
+ 'admin:appearance:menu_items' => 'Elementos del Menú',
+ 'admin:menu_items:configure' => 'Configurar los elementos del menú principal',
+ 'admin:menu_items:description' => 'Seleccione qué elementos del menú desea mostrar como enlaces favoritos. Los items no utilizados se encontrarán en el item "Mas" al final de la lista',
+ 'admin:menu_items:hide_toolbar_entries' => 'Quitar enlaces del menú de la barra de herramientas?',
+ 'admin:menu_items:saved' => 'Elementos del menú guardados',
+ 'admin:add_menu_item' => 'Agregar un elemento del menú personalizado',
+ 'admin:add_menu_item:description' => 'Complete el nombre para mostrar y la dirección url para agregar un elemento de menú personalizado',
+ 'admin:appearance:default_widgets' => 'Widgets por defecto',
+ 'admin:default_widgets:unknown_type' => 'Tipo de widget desconocido',
+ 'admin:default_widgets:instructions' => 'Agregar, quitar, mover y configurar los widgets por defecto en la página de widget seleccionada Estos cambios sólo tendrán impacto en los nuevos usuarios',
+ 'usersettings:description' => 'El panel de configuración permite parametrizar sus preferencias personales, desde la administración de usuarios al comportamiento de los plugins. Seleccione una opción debajo para comenzar',
+ 'usersettings:statistics' => 'Sus estadísticas',
+ 'usersettings:statistics:opt:description' => 'Ver información estadística de usuarios y objectos en la red',
+ 'usersettings:statistics:opt:linktext' => 'Estadísticas de la cuenta',
+ 'usersettings:user' => 'Sus preferencias',
+ 'usersettings:user:opt:description' => 'Esto le permite establecer sus preferencias',
+ 'usersettings:user:opt:linktext' => 'Modificar sus preferencias',
+ 'usersettings:plugins' => 'Herramientas',
+ 'usersettings:plugins:opt:description' => 'Preferencias de Configuración para sus herramientas activas',
+ 'usersettings:plugins:opt:linktext' => 'Configure sus herramientas',
+ 'usersettings:plugins:description' => 'Este panel le permite establecer sus preferencias personales para las herramientas habilitadas por el administrador del sistema',
+ 'usersettings:statistics:label:numentities' => 'Su contenido',
+ 'usersettings:statistics:yourdetails' => 'Sus detalles',
+ 'usersettings:statistics:label:name' => 'Nombre completo',
+ 'usersettings:statistics:label:email' => 'Email',
+ 'usersettings:statistics:label:membersince' => 'Membro desde',
+ 'usersettings:statistics:label:lastlogin' => 'último acceso',
+ 'river:all' => 'Actividad de toda la red',
+ 'river:mine' => 'Mi Actividad',
+ 'river:friends' => 'Actividad de Amigos',
+ 'river:select' => 'Mostrar %s',
+ 'river:comments:more' => '+%u más',
+ 'river:generic_comment' => 'comentado en %s %s',
+ 'friends:widget:description' => 'Muestra algunos de tus amigos',
+ 'friends:num_display' => 'Cantidad de amigos a mostrar',
+ 'friends:icon_size' => 'Tamaño del ícono',
+ 'friends:tiny' => 'pequeño',
+ 'friends:small' => 'chico',
+ 'save' => 'Guardar',
+ 'reset' => 'Reiniciar',
+ 'publish' => 'Publicar',
+ 'cancel' => 'Cancelar',
+ 'saving' => 'Guardando..',
+ 'update' => 'Actualizar',
+ 'preview' => 'Previsualizar',
+ 'edit' => 'Editar',
+ 'delete' => 'Eliminar',
+ 'accept' => 'Aceptar',
+ 'load' => 'Cargar',
+ 'upload' => 'Subir',
+ 'ban' => 'Bloquear',
+ 'unban' => 'Desbloquar',
+ 'banned' => 'Bloqueado',
+ 'enable' => 'Habilitar',
+ 'disable' => 'Deshabilitar',
+ 'request' => 'Solicitud',
+ 'complete' => 'Completa',
+ 'open' => 'Abrir',
+ 'close' => 'Cerrar',
+ 'reply' => 'Responder',
+ 'more' => 'más',
+ 'comments' => 'Comentarios',
+ 'import' => 'Importar',
+ 'export' => 'Exportar',
+ 'untitled' => 'Sin Título',
+ 'help' => 'Ayuda',
+ 'send' => 'Enviar',
+ 'post' => 'Publicar',
+ 'submit' => 'Enviar',
+ 'comment' => 'Comentar',
+ 'upgrade' => 'Actualizar',
+ 'sort' => 'Ordenar',
+ 'filter' => 'Filtrar',
+ 'site' => 'Sitio',
+ 'activity' => 'Actividad',
+ 'up' => 'Arriba',
+ 'down' => 'Abajo',
+ 'top' => 'Primero',
+ 'bottom' => 'Ultimo',
+ 'invite' => 'Invitar',
+ 'resetpassword' => 'Restablecer contraseña',
+ 'makeadmin' => 'Hacer administrador',
+ 'removeadmin' => 'Quitar administrador',
+ 'option:yes' => 'Si',
+ 'option:no' => 'No',
+ 'unknown' => 'Desconocido',
+ 'active' => 'Activo',
+ 'total' => 'Total',
+ 'learnmore' => 'Click aquí para ver más',
+ 'content' => 'contenido',
+ 'content:latest' => 'última actividad',
+ 'content:latest:blurb' => 'Alternativamente, click aquí para ver el último contenido en toda la red',
+ 'link:text' => 'ver link',
+ 'question:areyousure' => 'Está seguro?',
+ 'title' => 'Título',
+ 'description' => 'Descripción',
+ 'tags' => 'Tags',
+ 'spotlight' => 'Enfoque',
+ 'all' => 'Todo',
+ 'mine' => 'Mío',
+ 'by' => 'por',
+ 'none' => 'nada',
+ 'annotations' => 'Anotaciones',
+ 'relationships' => 'Relaciones',
+ 'metadata' => 'Metadata',
+ 'tagcloud' => 'Nube de tags',
+ 'tagcloud:allsitetags' => 'Tags de todo el sitio',
+ 'edit:this' => 'Editar',
+ 'delete:this' => 'Eliminar',
+ 'comment:this' => 'Comentar',
+ 'deleteconfirm' => 'Está seguro de eliminar este item?',
+ 'fileexists' => 'El archivo ya se ha subido. Para reemplazarlo, seleccione:',
+ 'useradd:subject' => 'Cuenta de usuario creada',
+ 'useradd:body' => '
+%s,
+
+Su cuenta de usuario ha sido creada en %s. Para iniciar sesión visite:
+
+%s
+
+e inicie sesión con las siguientes credenciales:
+
+Username: %s
+Password: %s
+
+Una vez autenticado, le recomendamos que modifique su contraseña.
+',
+ 'systemmessages:dismiss' => 'click para cerrar',
+ 'importsuccess' => 'Importación exitosa',
+ 'importfail' => 'Error al importar datos de OpenDD',
+ 'friendlytime:justnow' => 'ahora',
+ 'friendlytime:minutes' => 'hace %s minutos',
+ 'friendlytime:minutes:singular' => 'hace un minuto',
+ 'friendlytime:hours' => 'hace %s horas',
+ 'friendlytime:hours:singular' => 'hace una hora',
+ 'friendlytime:days' => 'hace %s días',
+ 'friendlytime:days:singular' => 'ayer',
+ 'friendlytime:date_format' => 'j F Y @ g:ia',
+ 'date:month:01' => 'Enero %s',
+ 'date:month:02' => 'Febrero %s',
+ 'date:month:03' => 'Marzo %s',
+ 'date:month:04' => 'Abril %s',
+ 'date:month:05' => 'Mayo %s',
+ 'date:month:06' => 'Junio %s',
+ 'date:month:07' => 'Julio %s',
+ 'date:month:08' => 'Agosto %s',
+ 'date:month:09' => 'Septiembre %s',
+ 'date:month:10' => 'Octubre %s',
+ 'date:month:11' => 'Noviembre %s',
+ 'date:month:12' => 'Diciembre %s',
+ 'installation:sitename' => 'El nombre del sitio:',
+ 'installation:sitedescription' => 'Breve descripción del sitio (opcional):',
+ 'installation:wwwroot' => 'URL del sitio:',
+ 'installation:path' => 'El path completo a la instalación de Elgg:',
+ 'installation:dataroot' => 'El path completo al directorio de datos:',
+ 'installation:dataroot:warning' => 'Debe crear este directorio manualmente. Debe encontrarse en un directorio diferente al de la instalación de Elgg',
+ 'installation:sitepermissions' => 'Permisos de acceso por defecto:',
+ 'installation:language' => 'Lenguaje por defecto para el sitio:',
+ 'installation:debug' => 'El modo Debug provee información extra que puede utilizarse para evaluar eventualidades. Puede enlentecer el funcionamiento del sistema y debe utilizarse sólo cuando se detectan problemas:',
+ 'installation:debug:none' => 'Desactivar modo Debug (reomendado)',
+ 'installation:debug:error' => 'Mostrar sólo errores críticos',
+ 'installation:debug:warning' => 'Mostrar sólo alertas críticas',
+ 'installation:debug:notice' => 'Mostrar todos los errores, alertas e informaciones de eventos',
+ 'installation:registration:description' => 'La registración de usuarios se encuentra habilitada por defecto. Puede deshabilitarla para impedir que nuevos usuarios se registren por sí mismos',
+ 'installation:registration:label' => 'Permitir el registro de nuevos usuarios',
+ 'installation:walled_garden:description' => 'Habilitar al sitio para ejecutarse como una red privada. Esto impedirá a usuarios no registrados visualizar cualquier página del sitio, exceptuando las establecidas como públicas',
+ 'installation:walled_garden:label' => 'Restringir páginas a usuarios registrados',
+ 'installation:httpslogin' => 'Habilitar esta opción para que los usuarios se autentiquen mediante HTTPS. Necesitará habilitar HTTPS en el server también para que esto funcione',
+ 'installation:httpslogin:label' => 'Habilitar autenticación HTTPS',
+ 'installation:view' => 'Ingrese la vista que se visualizará por defecto en el sitio o deje esto en blanco para la vista por defecto (si tiene dudas, déjelo por defecto):',
+ 'installation:siteemail' => 'Dirección de Email del sitio (utilizada para enviar mails desde el sistema):',
+ 'installation:disableapi' => 'Elgg provee una API para el desarrollo de servicios web de modo que aplicaciones remotas puedan interactuar con el sitio',
+ 'installation:disableapi:label' => 'Habilitar la API de servicios web de Elgg',
+ 'installation:allow_user_default_access:description' => 'Si se selecciona, se les permitirá a los usuarios establecer su propio nivel de acceso por defecto que puede sobreescribir los niveles de acceso del sistema',
+ 'installation:allow_user_default_access:label' => 'Permitir el acceso por defecto de los usuarios',
+ 'installation:simplecache:description' => 'La cache simple aumenta el rentimiento almacenando contenido estático, como hojas CSS y archivos JavaScript. Normalmente se desea esto activado',
+ 'installation:simplecache:label' => 'Utilizar cache simple (recomendado)',
+ 'upgrading' => 'Actualizando..',
+ 'upgrade:db' => 'La base de datos ha sido actualizada',
+ 'upgrade:core' => 'La instalación de Elgg ha sido actualizada',
+ 'upgrade:unable_to_upgrade' => 'No se puede actualizar',
+ 'update:twitter_api:deactivated' => 'La API de Twitter (anteriormente Twitter Service) se ha desactivado durante la actualización. Por favor actívela manualmente si se requiere',
+ 'update:oauth_api:deactivated' => 'La API OAuth (anteriormente OAuth Lib) se ha desactivado durante la actualización. Por favor actívela manualmente si se requiere',
+ 'deprecated:function' => '%s() ha quedado obsoleta por %s()',
+ 'welcome' => 'Bienvenido',
+ 'welcome:user' => 'Bienvenido %s',
+ 'email:settings' => 'Configuración de Email',
+ 'email:address:label' => 'Dirección de Email',
+ 'email:save:success' => 'Nueva dirección de Email guardada, se solicitó la verificación',
+ 'email:save:fail' => 'No se pudo guardar la nueva dirección de Email',
+ 'friend:newfriend:subject' => '%s te ha puesto como amigo suyo!',
+ 'friend:newfriend:body' => '%s te ha puesto como amigo suyo!
+
+Para visualizar su perfil haz click aquí:
+
+%s
+
+Por favor no responda a este mail',
+ 'email:resetpassword:subject' => 'Contraseña restablecida!',
+ 'email:resetpassword:body' => 'Hola %s,
+
+Tu contraseña ha sido restablecida a: %s',
+ 'email:resetreq:subject' => 'Solicitud de nueva contraseña',
+ 'email:resetreq:body' => 'Hola %s,
+
+Alguien (de la dirección IP %s) solicitó una nueva contraseña para su cuenta.
+
+Si fuiste tu quien realizó la solicitud haz click en el link debajo, de otra forma ignora este mail.
+
+%s
+',
+ 'default_access:settings' => 'Tu nivel de acceso por defecto',
+ 'default_access:label' => 'Acceso por defecto',
+ 'user:default_access:success' => 'El nivel de acceso por defecto ha sido guardado',
+ 'user:default_access:failure' => 'El nivel de acceso por defecto no ha podido ser guardado',
+ 'xmlrpc:noinputdata' => 'Ingresos de datos faltantes',
+ 'comments:count' => '%s comentarios',
+ 'riveraction:annotation:generic_comment' => '%s comentó en %s',
+ 'generic_comments:add' => 'Comentar',
+ 'generic_comments:post' => 'Publicar un comentario',
+ 'generic_comments:text' => 'Comentar',
+ 'generic_comments:latest' => 'últimos comentarios',
+ 'generic_comment:posted' => 'Se ha publicado su comentario',
+ 'generic_comment:deleted' => 'Se ha quitado su comentario',
+ 'generic_comment:blank' => 'Lo sentimos, debe ingresar algún comentario antes de poder guardarlo',
+ 'generic_comment:notfound' => 'Lo sentimos, no se pudo encontrer el item especificado',
+ 'generic_comment:notdeleted' => 'Lo sentimos, no se pudo eliminar el comentario',
+ 'generic_comment:failure' => 'Ocurrió un error inesperado al intentar agregar su comentario. Por favor intente nuevamente',
+ 'generic_comment:none' => 'Sin comentarios',
+ 'generic_comment:email:subject' => 'Tienes un nuevo comentario!',
+ 'generic_comment:email:body' => 'Tiene un nuevo comentario en el item "%s" de %s. Dice:
+
+
+%s
+
+
+Para responder o ver el item original, haga click aquí:
+
+%s
+
+Para ver el prfil de %s, haga click aquí:
+
+%s
+
+Por favor no responda a este correo',
+ 'byline' => 'Por %s',
+ 'entity:default:strapline' => 'Creado %s por %s',
+ 'entity:default:missingsupport:popup' => 'Esta entidad no puede mostrarse correctamente. Esto puede deberse a que el soporte provisto por un plugin ya no se encuentra instalado',
+ 'entity:delete:success' => 'La entidad %s ha sido eliminada',
+ 'entity:delete:fail' => 'La entidad %s no pudo ser eliminada',
+ 'actiongatekeeper:missingfields' => 'En el formulario faltan __token o campos __ts',
+ 'actiongatekeeper:tokeninvalid' => 'Se encontró un error (no coincidencia de token). Esto probablemente indique que la página que se encontraba utilizando haya expirado. Por favor intente nuevamente',
+ 'actiongatekeeper:timeerror' => 'La página que se encontraba utilizando ha expirado. Por favor refresque la página e intente nuevamente',
+ 'actiongatekeeper:pluginprevents' => 'Una extensión de este formulario ha evitado que se envíe el formulario',
+ '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_names:tags' => 'Tags',
+ 'tags:site_cloud' => 'Nube de Tags del Sitio',
+ 'js:security:token_refresh_failed' => 'No se pudo contactar a %s. Puede experimentar problemas al guardar contenidos en el sitio',
+ 'js:security:token_refreshed' => 'La conexión a %s ha sido restaurada!',
+ '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',
+ 'co' => 'Corsican',
+ 'cs' => 'Czech',
+ 'cy' => 'Welsh',
+ 'da' => 'Danish',
+ 'dz' => 'Bhutani',
+ 'eo' => 'Esperanto',
+ 'es' => 'Español',
+ 'et' => 'Estonian',
+ 'fa' => 'Persian',
+ 'fi' => 'Finnish',
+ 'fj' => 'Fiji',
+ 'fo' => 'Faeroese',
+ 'fy' => 'Frisian',
+ 'ga' => 'Irish',
+ 'gu' => 'Gujarati',
+ 'ha' => 'Hausa',
+ 'hi' => 'Hindi',
+ 'hr' => 'Croatian',
+ 'hu' => 'Hungarian',
+ 'hy' => 'Armenian',
+ 'ia' => 'Interlingua',
+ 'id' => 'Indonesian',
+ 'ie' => 'Interlingue',
+ 'ik' => 'Inupiak',
+ 'is' => 'Icelandic',
+ 'iu' => 'Inuktitut',
+ 'ji' => 'Yiddish (obsolete)',
+ 'jw' => 'Javanese',
+ 'ka' => 'Georgian',
+ 'kk' => 'Kazakh',
+ 'kl' => 'Greenlandic',
+ 'km' => 'Cambodian',
+ 'kn' => 'Kannada',
+ 'ks' => 'Kashmiri',
+ 'ku' => 'Kurdish',
+ 'ky' => 'Kirghiz',
+ 'ln' => 'Lingala',
+ 'lo' => 'Laothian',
+ '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',
+ 'qu' => 'Quechua',
+ 'rm' => 'Rhaeto-Romance',
+ 'rn' => 'Kirundi',
+ 'ro' => 'Romanian',
+ 'rw' => 'Kinyarwanda',
+ 'sa' => 'Sanskrit',
+ 'sd' => 'Sindhi',
+ 'sg' => 'Sangro',
+ 'sh' => 'Serbo-Croatian',
+ 'si' => 'Singhalese',
+ 'sk' => 'Slovak',
+ 'sl' => 'Slovenian',
+ 'sm' => 'Samoan',
+ 'sn' => 'Shona',
+ 'so' => 'Somali',
+ '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',
+ 'vo' => 'Volapuk',
+ 'wo' => 'Wolof',
+ 'xh' => 'Xhosa',
+ 'yi' => 'Yiddish',
+ 'yo' => 'Yoruba',
+ 'za' => 'Zuang',
+ 'zu' => 'Zulu',
+ 'notification:method:email' => 'Email',
+);
+add_translation("es", $language); \ No newline at end of file
diff --git a/mod/languages/languages/es/es.custom_index.php b/mod/languages/languages/es/es.custom_index.php
new file mode 100644
index 000000000..b046889bb
--- /dev/null
+++ b/mod/languages/languages/es/es.custom_index.php
@@ -0,0 +1,11 @@
+<?php
+$es = array (
+ 'custom:bookmarks' => 'Últimos favoritos',
+ 'custom:groups' => 'Últimos grupos',
+ 'custom:files' => 'Últimos ficheros subidos',
+ 'custom:blogs' => 'Últimas entradas',
+ 'custom:members' => 'Nuevos miembros de la red',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.custom_keys.php b/mod/languages/languages/es/es.custom_keys.php
new file mode 100644
index 000000000..ae38703f5
--- /dev/null
+++ b/mod/languages/languages/es/es.custom_keys.php
@@ -0,0 +1,5 @@
+<?php
+$es = NULL;
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.dashboard.php b/mod/languages/languages/es/es.dashboard.php
new file mode 100644
index 000000000..5317de654
--- /dev/null
+++ b/mod/languages/languages/es/es.dashboard.php
@@ -0,0 +1,11 @@
+<?php
+$es = array (
+ 'dashboard:widget:group:title' => 'Actividad del grupo',
+ 'dashboard:widget:group:desc' => 'Sigue la actividad en uno de tus grupos',
+ 'dashboard:widget:group:select' => 'Selecciona un grupo',
+ 'dashboard:widget:group:noactivity' => 'No hay actividad en este grupo',
+ 'dashboard:widget:group:noselect' => 'Edita este widget para seleccionar un grupo',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.developers.php b/mod/languages/languages/es/es.developers.php
new file mode 100644
index 000000000..4a9821d46
--- /dev/null
+++ b/mod/languages/languages/es/es.developers.php
@@ -0,0 +1,49 @@
+<?php
+$es = array (
+ 'admin:develop_tools' => 'Herramientas',
+ 'admin:develop_tools:preview' => 'Testeo de temas',
+ 'admin:develop_tools:inspect' => 'Inspecciona',
+ 'admin:develop_tools:unit_tests' => 'Tests unitarios',
+ 'developers:label:system_cache' => 'Utiliza el caché del sistema',
+ 'developers:help:system_cache' => 'Desactívalo mientras estés desarrollando. Si no, los cambios en los plugins no se verán.',
+ 'developers:unit_tests:description' => 'Elgg tiene tests unitarios y de integración para detectar bugs en las clases del core y sus funciones.',
+ 'developers:unit_tests:warning' => 'Atención: No ejecutes estos tests en sitios en producción. Pueden corromper la base de datos.',
+ 'developers:unit_tests:run' => 'Ejecuta',
+ 'admin:developers' => 'Desarrolladores',
+ 'admin:developers:settings' => 'Configuración de Desarrolladores',
+ 'elgg_dev_tools:settings:explanation' => 'Controle su configuración de desarrollo y depuración. Algunas de estas opciones también se encuentran disponibles en otras secciones de la administración.',
+ 'developers:label:simple_cache' => 'Utilizar cache simple',
+ 'developers:help:simple_cache' => 'Deshabilitar la cache mientras se desarrolla. De otro modo, las modificaciones a las views (incluyendo los css) serán ignoradas.',
+ 'developers:label:debug_level' => 'Nivel de monitoreo',
+ 'developers:help:debug_level' => 'Esto controla la cantidad de información que se registra. Vea elgg_log() para más información.',
+ 'developers:label:display_errors' => 'Mostrar errores fatales de PHP',
+ 'developers:help:display_errors' => 'Por defecto, el archivo .htaccess de Elgg deshabilita la visualización de errores fatales.',
+ 'developers:label:screen_log' => 'Registrar en pantalla',
+ 'developers:help:screen_log' => 'Esto muestra las salidas de elgg_log() y elgg_dump() en la página.',
+ 'developers:label:show_strings' => 'Mostrar strings de traducciones extrañas',
+ 'developers:help:show_strings' => 'Esto muestra las traducciones utilizadas por elgg_echo().',
+ 'developers:label:wrap_views' => 'Wrap de vistas',
+ 'developers:help:wrap_views' => 'Esto atrapa casi toda la vista con comentarios HTML. Util para encontrar la vista en particular que genera un HTML.',
+ 'developers:label:log_events' => 'Eventos de Logs y Hooks de plugins',
+ 'developers:help:log_events' => 'Escribir eventos y hooks de plugins en el log. Precaución: hay varios de estos por página.',
+ 'developers:debug:off' => 'Apagado',
+ 'developers:debug:error' => 'Error',
+ 'developers:debug:warning' => 'Precaución',
+ 'developers:debug:notice' => 'Información',
+ 'developers:inspect:help' => 'Inspección de configuration del framework Elgg.',
+ 'developers:event_log_msg' => '%s: \'%s, %s\' en %s',
+ 'theme_preview:general' => 'Introducción',
+ 'theme_preview:breakout' => 'Fuera de iframe',
+ 'theme_preview:buttons' => 'Botones',
+ 'theme_preview:components' => 'Componentes',
+ 'theme_preview:forms' => 'Formularios',
+ 'theme_preview:grid' => 'Grilla',
+ 'theme_preview:icons' => 'Iconos',
+ 'theme_preview:modules' => 'Módulos',
+ 'theme_preview:navigation' => 'Navegación',
+ 'theme_preview:typography' => 'Tipografías',
+ 'developers:settings:success' => 'Configuraciones almacenadas',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.diagnostics.php b/mod/languages/languages/es/es.diagnostics.php
new file mode 100644
index 000000000..7c2fac60a
--- /dev/null
+++ b/mod/languages/languages/es/es.diagnostics.php
@@ -0,0 +1,40 @@
+<?php
+$es = array (
+ 'admin:administer_utilities:diagnostics' => 'Diagnóstico del sistema',
+ 'diagnostics' => 'Diagnóstico del sistema',
+ 'diagnostics:report' => 'Reportes de Diagnósticos',
+ 'diagnostics:description' => 'El informe de diagnóstico es muy útil para poder resolver cualquier problema de la plataforma. Puedes descargar un log completo y analizarlo. Presiona el botón para obtener un .txt',
+ 'diagnostics:download' => 'Descargar .txt',
+ 'diagnostics:header' => '========================================================================
+Informe de Diagnóstico de la red social
+Generado %s por %s
+========================================================================
+
+',
+ 'diagnostics:report:basic' => '
+Distribución de Elgg %s, version %s
+
+------------------------------------------------------------------------',
+ 'diagnostics:report:php' => '
+PHP info:
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:plugins' => '
+Detalles y plugins instalados:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:md5' => '
+Ficheros y checksums instalados:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:globals' => '
+Variables globales:
+
+%s
+------------------------------------------------------------------------',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.embed.php b/mod/languages/languages/es/es.embed.php
new file mode 100644
index 000000000..d57c952a8
--- /dev/null
+++ b/mod/languages/languages/es/es.embed.php
@@ -0,0 +1,14 @@
+<?php
+$es = array (
+ 'embed:embed' => 'Incrustar',
+ 'embed:instructions' => 'Selecciona el archivo que deseas insertar en el contenido. Simplemente haz "click" sobre él',
+ 'embed:media' => 'Insertar contenido',
+ 'embed:upload' => 'Subir medio',
+ 'embed:upload_type' => 'Tipo de subida: ',
+ 'embed:no_upload_content' => 'No hay contenido de subida!',
+ 'embed:no_section_content' => 'No se encontraron elementos.',
+ 'embed:no_sections' => 'No se encontraron plugins soportados. Consulte con el administrador del sitio para que habilite un plugin con soporte para incrustar recursos.',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.externalpages.php b/mod/languages/languages/es/es.externalpages.php
new file mode 100644
index 000000000..95ff2261c
--- /dev/null
+++ b/mod/languages/languages/es/es.externalpages.php
@@ -0,0 +1,15 @@
+<?php
+$es = array (
+ 'expages' => 'Páginas del sitio',
+ 'admin:appearance:expages' => 'Páginas del Sitio',
+ 'expages:about' => 'Acerca de',
+ 'expages:terms' => 'Términos',
+ 'expages:privacy' => 'Privacidad',
+ 'expages:contact' => 'Contacto',
+ 'expages:notset' => 'Esta páginas no se ha configurado aún.',
+ 'expages:posted' => 'Su página se ha actualizado correctamente.',
+ 'expages:error' => 'No se pudo guardar la página.',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.file.php b/mod/languages/languages/es/es.file.php
new file mode 100644
index 000000000..7b65c6549
--- /dev/null
+++ b/mod/languages/languages/es/es.file.php
@@ -0,0 +1,76 @@
+<?php
+$es = array (
+ 'file:list:list' => 'Cambia a la vista en lista',
+ 'file:list:gallery' => 'Cambia a la vista en galería',
+ 'file:notification' => '%s ha subido un nuevo archivo:
+
+%s
+%s
+
+Puedes verlo y hacer un comentario en:
+%s',
+ 'file' => 'Archivos',
+ 'file:user' => 'Archivos de %s',
+ 'file:friends' => 'Archivos de amigos',
+ 'file:all' => 'Todos los archivos',
+ 'file:edit' => 'Editar archivo',
+ 'file:more' => 'Más archivos',
+ 'file:list' => 'vista de lista',
+ 'file:group' => 'Archivos del grupo',
+ 'file:gallery' => 'vista de galería',
+ 'file:gallery_list' => 'Vista de galería o lista',
+ 'file:num_files' => 'Cantidad de archivos a mostrar',
+ 'file:user:gallery' => 'Vista %s galería',
+ 'file:upload' => 'Subir un archivo',
+ 'file:replace' => 'Reemplazar contenido de archivo (dejar en blanco para no modificar)',
+ 'file:list:title' => '%s - %s %s',
+ 'file:title:friends' => 'De amigos',
+ 'file:add' => 'Subir un archivo',
+ 'file:file' => 'Archivo',
+ 'file:title' => 'Título',
+ 'file:desc' => 'Descripción',
+ 'file:tags' => 'Tags',
+ 'file:types' => 'Tipos de archivo subidos',
+ 'file:type:' => 'Archivos',
+ 'file:type:all' => 'Todos los archivos',
+ 'file:type:video' => 'Videos',
+ 'file:type:document' => 'Documentos',
+ 'file:type:audio' => 'Audio',
+ 'file:type:image' => 'Imagenes',
+ 'file:type:general' => 'General',
+ 'file:user:type:video' => 'Videos de %s',
+ 'file:user:type:document' => 'Documentos de %s',
+ 'file:user:type:audio' => 'Audio de %s',
+ 'file:user:type:image' => 'Imagenes de %s',
+ 'file:user:type:general' => 'Archivos generales de %s',
+ 'file:friends:type:video' => 'Videos de amigos',
+ 'file:friends:type:document' => 'Documentos de amigos',
+ 'file:friends:type:audio' => 'Audio de amigos',
+ 'file:friends:type:image' => 'Imagenes de amigos',
+ 'file:friends:type:general' => 'Archivos generales de amigos',
+ 'file:widget' => 'Widget de archivos',
+ 'file:widget:description' => 'Ver los últimos archivos',
+ 'groups:enablefiles' => 'Habilitar archivos de grupos',
+ 'file:download' => 'Descargar',
+ 'file:delete:confirm' => 'Desea eliminar este archivo?',
+ 'file:tagcloud' => 'Tag cloud',
+ 'file:display:number' => 'Cantidad de archivos a mostrar',
+ 'river:create:object:file' => '%s subió el archivo %s',
+ 'river:comment:object:file' => '%s comentó en el archivo %s',
+ 'item:object:file' => 'Archivos',
+ 'file:embed' => 'Incrustar multimedia',
+ 'file:embedall' => 'Todo',
+ 'file:saved' => 'Archivo guardado correctamente.',
+ 'file:deleted' => 'Archivo eliminado correctamente.',
+ 'file:none' => 'No se subieron archivos.',
+ 'file:uploadfailed' => 'Lo sentimos, no se pudo guardar el archivo.',
+ 'file:downloadfailed' => 'Lo sentimos, el archivo no está disponible en este momento.',
+ 'file:deletefailed' => 'Su archivo no puede ser eliminado en este momento.',
+ 'file:noaccess' => 'No posee los permisos necesarios para modificar el archivo',
+ 'file:cannotload' => 'Ha ocurrido un error al intentar cargar el archivo',
+ 'file:nofile' => 'Debe seleccionar un archivo',
+ 'file:newupload' => 'Nuevo archivo subido',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.garbagecollector.php b/mod/languages/languages/es/es.garbagecollector.php
new file mode 100644
index 000000000..c097247e9
--- /dev/null
+++ b/mod/languages/languages/es/es.garbagecollector.php
@@ -0,0 +1,18 @@
+<?php
+$es = array (
+ 'garbagecollector:period' => 'Con qué frecuencia debe ejecutarse el garbagecollector?',
+ 'garbagecollector:weekly' => 'Una vez por semana',
+ 'garbagecollector:monthly' => 'Una vez al mes',
+ 'garbagecollector:yearly' => 'Una vez al año',
+ 'garbagecollector' => 'GARBAGE COLLECTOR
+',
+ 'garbagecollector:done' => 'Hecho
+',
+ 'garbagecollector:optimize' => 'Optimizando %s ',
+ 'garbagecollector:error' => 'ERROR',
+ 'garbagecollector:ok' => 'OK',
+ 'garbagecollector:gc:metastrings' => 'Limpiando metastrings no enlazados: ',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.groups.php b/mod/languages/languages/es/es.groups.php
new file mode 100644
index 000000000..b3f243a66
--- /dev/null
+++ b/mod/languages/languages/es/es.groups.php
@@ -0,0 +1,213 @@
+<?php
+$es = array (
+ 'groups:search_in_group' => 'Busca en este grupo',
+ 'groups:acl' => 'Grupo: %s',
+ 'groups:notification' => '%s ha añadido una nueva discusión en el foro %s:
+
+%s
+%s
+
+Puedes verla y contestarla en:
+%s',
+ 'discussion:none' => 'No hay discusiones',
+ 'discussion:reply:title' => 'Respuesta de %s',
+ 'groups' => 'Grupos',
+ 'groups:owned' => 'Grupos que administro',
+ 'groups:yours' => 'Mis grupos',
+ 'groups:user' => 'Grupos de %s',
+ 'groups:all' => 'Todos los grupos',
+ 'groups:add' => 'Crear un nuevo grupo',
+ 'groups:edit' => 'Editar grupo',
+ 'groups:delete' => 'Eliminar grupo',
+ 'groups:membershiprequests' => 'Administrar solicitudes para unirse',
+ 'groups:invitations' => 'Invitaciones de grupo',
+ 'groups:icon' => 'Icono de grupo (dejar en blanco para no modificarlo)',
+ 'groups:name' => 'Nombre del grupo',
+ 'groups:username' => 'Nombre corto del grupo (se muestra en URLs, solamente caracteres alfanuméricos)',
+ 'groups:description' => 'Descripción',
+ 'groups:briefdescription' => 'Descripción corta',
+ 'groups:interests' => 'Tags',
+ 'groups:website' => 'Sitio web',
+ 'groups:members' => 'Miembros del grupo',
+ 'groups:members:title' => 'Miembros de %s',
+ 'groups:members:more' => 'Ver todos los miembros',
+ 'groups:membership' => 'Permisos de miembros del grupo',
+ 'groups:access' => 'Permisos de acceso',
+ 'groups:owner' => 'Administrador',
+ 'groups:widget:num_display' => 'Cantidad de grupos a mostrar',
+ 'groups:widget:membership' => 'Miembros del grupo',
+ 'groups:widgets:description' => 'Mostrar en tu perfil los grupos a los que perteneces',
+ 'groups:noaccess' => 'Sin acceso al grupo',
+ 'groups:permissions:error' => 'No posee permisos para esto',
+ 'groups:ingroup' => 'en el grupo',
+ 'groups:cantedit' => 'No puede modificar este grupo',
+ 'groups:saved' => 'Grupo guardado',
+ 'groups:featured' => 'Grupos destacados',
+ 'groups:makeunfeatured' => 'No destacado',
+ 'groups:makefeatured' => 'Hacer destacado',
+ 'groups:featuredon' => '%s ahora es un grupo destacado.',
+ 'groups:unfeatured' => '%s ha sido quitado de los grupos destacados.',
+ 'groups:featured_error' => 'Grupo inválido.',
+ 'groups:joinrequest' => 'Solicitar unirse',
+ 'groups:join' => 'Unirse al grupo',
+ 'groups:leave' => 'Abandonar grupo',
+ 'groups:invite' => 'Invitar amigos',
+ 'groups:invite:title' => 'Invitar amigos al grupo',
+ 'groups:inviteto' => 'Invitar amigos a \'%s\'',
+ 'groups:nofriends' => 'No posee amigos que no hayan sido invitados al grupo.',
+ 'groups:nofriendsatall' => 'No tienes amigos para invitar!',
+ 'groups:viagroups' => 'grupos via',
+ 'groups:group' => 'Grupo',
+ 'groups:search:tags' => 'tag',
+ 'groups:search:title' => 'Buscar grupos que conicidan con el tag \'%s\'',
+ 'groups:search:none' => 'No se encontraron grupos',
+ 'groups:activity' => 'Actividad del grupo',
+ 'groups:enableactivity' => 'Habilitar la actividad del grupo',
+ 'groups:activity:none' => 'Aún no hay actividad en el grupo',
+ 'groups:notfound' => 'Grupo no encontrado',
+ 'groups:notfound:details' => 'El grupo solicitado no existe o bien no tiene acceso a el',
+ 'groups:requests:none' => 'En este momento no hay solicitudes pendientes.',
+ 'groups:invitations:none' => 'En este momento no hay invitaciones.',
+ 'item:object:groupforumtopic' => 'Discusiones',
+ 'groupforumtopic:new' => 'Nueva entrada de discusión',
+ 'groups:count' => 'grupos creados',
+ 'groups:open' => 'grupo abierto',
+ 'groups:closed' => 'grupo cerrado',
+ 'groups:member' => 'miembros',
+ 'groups:searchtag' => 'Buscar grupos por tag',
+ 'groups:more' => 'Más grupos',
+ 'groups:none' => 'Sin grupos',
+ 'groups:access:private' => 'Cerrado - Los usuarios deben ser invitados',
+ 'groups:access:public' => 'Abierto - Cualquier usuario puede unirse',
+ 'groups:access:group' => 'Sólo miembros del grupo',
+ 'groups:closedgroup' => 'Este grupo es cerrado en sus admisiones.',
+ 'groups:closedgroup:request' => 'Para solicitar unirse, haga click en el link del menú "solicitar unirse".',
+ 'groups:visibility' => 'Quienes pueden ver este grupo?',
+ 'groups:enableforum' => 'Habilitar discusiones de grupo',
+ 'groups:yes' => 'si',
+ 'groups:no' => 'no',
+ 'groups:lastupdated' => 'Ultima actualización %s por %s',
+ 'groups:lastcomment' => 'Ultimo comentario %s por %s',
+ 'discussion' => 'Discusión',
+ 'discussion:add' => 'Nueva discusión',
+ 'discussion:latest' => 'Ultima discusión',
+ 'discussion:group' => 'Discusión del grupo',
+ 'discussion:topic:created' => 'Se creó una nueva discusión.',
+ 'discussion:topic:updated' => 'Se ha actualizado la discusión.',
+ 'discussion:topic:deleted' => 'Se ha eliminado la discusión.',
+ 'discussion:topic:notfound' => 'No se pudo encontrar la discusión',
+ 'discussion:error:notsaved' => 'No se pudo guardar la discusión',
+ 'discussion:error:missing' => 'El título y el mensaje son requridos',
+ 'discussion:error:permissions' => 'No posee los permisos necesarios para poder realizar esta acción',
+ 'discussion:error:notdeleted' => 'No se pudo eliminar la discusión',
+ 'discussion:reply:deleted' => 'La respuesta en la discusión ha sido eliminada.',
+ 'discussion:reply:error:notdeleted' => 'No se pudo eliminar la respuesta en la discusión',
+ 'reply:this' => 'Responder',
+ 'group:replies' => 'Respuestas',
+ 'groups:forum:created' => 'Creado %s con %d comentarios',
+ 'groups:forum:created:single' => 'Creado %s con %d respuestas',
+ 'groups:forum' => 'Discusión',
+ 'groups:addtopic' => 'Nueva discusión',
+ 'groups:forumlatest' => 'Ultima discusión',
+ 'groups:latestdiscussion' => 'Ultima discusión',
+ 'groups:newest' => 'La más reciente',
+ 'groups:popular' => 'Popular',
+ 'groupspost:success' => 'Su respuesta ha sido publicada correctamente',
+ 'groups:alldiscussion' => 'Ultima discusión',
+ 'groups:edittopic' => 'Editar discusión',
+ 'groups:topicmessage' => 'Mensaje de discusión',
+ 'groups:topicstatus' => 'Estado de la discusión',
+ 'groups:reply' => 'Publicar un comentario',
+ 'groups:topic' => 'Discusión',
+ 'groups:posts' => 'Entradas',
+ 'groups:lastperson' => 'Ultima persona',
+ 'groups:when' => 'Cuando',
+ 'grouptopic:notcreated' => 'No se encontraron discusiones.',
+ 'groups:topicopen' => 'Abierta',
+ 'groups:topicclosed' => 'Cerrada',
+ 'groups:topicresolved' => 'Resuelta',
+ 'grouptopic:created' => 'Se ha creado la discusión.',
+ 'groupstopic:deleted' => 'Duscusión eliminada',
+ 'groups:topicsticky' => 'Pegadiza',
+ 'groups:topicisclosed' => 'La discusión se encuentra cerrada.',
+ 'groups:topiccloseddesc' => 'La discusión se encuentra cerrada y no acepta nuevos comentarios.',
+ 'grouptopic:error' => 'No se pudo crear una discusión en el grupo. Por favor intente nuevamente o contacte a un administrador del sistema.',
+ 'groups:forumpost:edited' => 'El comentario en el foro ha sido editado.',
+ 'groups:forumpost:error' => 'Ha ocurrido un error al intentar editar el comentario en el foro.',
+ 'groups:privategroup' => 'El grupo se encuentra cerrado. Solicitando unirse.',
+ 'groups:notitle' => 'Los grupos deben tener un título',
+ 'groups:cantjoin' => 'No puede unirse al grupo',
+ 'groups:cantleave' => 'No puede abandonar el grupo',
+ 'groups:removeuser' => 'Quitar del grupo',
+ 'groups:cantremove' => 'No se pudo quitar el usuario del grupo',
+ 'groups:removed' => 'Se quitó a %s del grupo',
+ 'groups:addedtogroup' => 'Se agregó al grupo correctamente',
+ 'groups:joinrequestnotmade' => 'No puede solicitar unirse al grupo',
+ 'groups:joinrequestmade' => 'Solicitó unirse al grupo',
+ 'groups:joined' => 'Se ha unido al grupo correctamente!',
+ 'groups:left' => 'Ha abandonado al grupo correctamente',
+ 'groups:notowner' => 'Lo sentimos, no es el administrador de este grupo.',
+ 'groups:notmember' => 'Lo sentimos, no es miembro de este grupo.',
+ 'groups:alreadymember' => 'Ya es miembro de este grupo!',
+ 'groups:userinvited' => 'El usuario ha sido invitado.',
+ 'groups:usernotinvited' => 'No se pudo invitar al usuario.',
+ 'groups:useralreadyinvited' => 'El usuario ya ha sido invitado',
+ 'groups:invite:subject' => '%s has sido invitado para unirte a %s!',
+ 'groups:updated' => 'Ultima respuesta por %s %s',
+ 'groups:started' => 'Iniciado por %s',
+ 'groups:joinrequest:remove:check' => 'Está seguro que desea quitar la solicitud al grupo?',
+ 'groups:invite:remove:check' => 'Está seguro de quitar la invitación?',
+ 'groups:invite:body' => 'Hola %s,
+
+%s te ha invitado a unirte al grupo \'%s\'. Haz click debajo para ver la invitación:
+
+%s',
+ 'groups:welcome:subject' => 'Bienvenido al grupo %s!',
+ 'groups:welcome:body' => 'Hola %s!
+
+Eres miembro del grupo \'%s\'! Haz click debajo para comenzar a autilizarlo!
+
+%s',
+ 'groups:request:subject' => '%s ha solicitado unirse a %s',
+ 'groups:request:body' => 'Hola %s,
+
+%s ha solicitado unirse al grupo \'%s\'. Haga click debajo para consultar su perfil
+
+%s
+
+o haga click debaajo para ver las solicitudes para este grupo:
+
+%s',
+ 'river:create:group:default' => '%s ha creado el grupo %s',
+ 'river:join:group:default' => '%s se ha unido al grupo %s',
+ 'river:create:object:groupforumtopic' => '%s ha agregado una nueva discusión: %s',
+ 'river:reply:object:groupforumtopic' => '%s ha respondido en la discusión %s',
+ 'groups:nowidgets' => 'No se encontraon widgets para este grupo.',
+ 'groups:widgets:members:title' => 'Miembros del grupo',
+ 'groups:widgets:members:description' => 'Listar miembros del grupo.',
+ 'groups:widgets:members:label:displaynum' => 'Listar miembros del grupo.',
+ 'groups:widgets:members:label:pleaseedit' => 'Por favor configure este widget.',
+ 'groups:widgets:entities:title' => 'Objetos en el grupo',
+ 'groups:widgets:entities:description' => 'Lista de objetos guardados en el grupo',
+ 'groups:widgets:entities:label:displaynum' => 'Lista de objetos del grupo.',
+ 'groups:widgets:entities:label:pleaseedit' => 'Por favor configure este widget.',
+ 'groups:forumtopic:edited' => 'Discusión editada correctamente.',
+ 'groups:allowhiddengroups' => 'Desea permitir los grupos privados(invisibles)?',
+ 'group:deleted' => 'Grupo y contenidos de grupo eliminados',
+ 'group:notdeleted' => 'No se pudo eliminar al grupo',
+ 'group:notfound' => 'No se pudo encontrar el grupo',
+ 'grouppost:deleted' => 'La publicación del grupo ha sido eliminada',
+ 'grouppost:notdeleted' => 'No se pudo eliminar la publicación del grupo',
+ 'groupstopic:notdeleted' => 'Discusión no eliminada',
+ 'grouptopic:blank' => 'No hay discusión',
+ 'grouptopic:notfound' => 'No se pudo encontrar la discusión',
+ 'grouppost:nopost' => 'Entrada vacía',
+ 'groups:deletewarning' => 'Desea eliminar este grupo? su acción es irreversible!',
+ 'groups:invitekilled' => 'Se ha eliminado la invitación.',
+ 'groups:joinrequestkilled' => 'Se ha eliminado la solicitud de inscripción.',
+ 'groups:ecml:discussion' => 'Discusiones del grupo',
+ 'groups:ecml:groupprofile' => 'Perfiles del grupo',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.install.php b/mod/languages/languages/es/es.install.php
new file mode 100644
index 000000000..42de4d4d8
--- /dev/null
+++ b/mod/languages/languages/es/es.install.php
@@ -0,0 +1,156 @@
+<?php
+/**
+ * Installer English Language
+ *
+ * @package ElggLanguage
+ * @subpackage Installer
+ */
+
+$spanish = array(
+ 'install:title' => 'Instalación de Elgg',
+ 'install:welcome' => 'Bienvenido!',
+ 'install:requirements' => 'Verificación de requerimientos',
+ 'install:database' => 'Instalación de base de datos',
+ 'install:settings' => 'Configuración del sitio',
+ 'install:admin' => 'Crear cuenta admin',
+ 'install:complete' => 'Finalizado',
+
+ 'install:welcome:instructions' => "La instalación de Elgg consta de 6 pasos simples y leer esta bienvenida es el primero!
+
+Si no lo hizo, lea las instrucciones de instalación incluidas con Elgg (haga click en el enlace de instrucciones al final de la página).
+
+Cuando se encuentre listo para continuar, presione el botón siguiente.",
+ 'install:requirements:instructions:success' => "Su servidor pasó la verificación de requerimientos.",
+ 'install:requirements:instructions:failure' => "Su servidor falló la verificación de requerimientos. Luego de solucionar los items enumerados debajo refresque esta página. Si necesita mas ayuda verifique los enlaces de solución de problemas al final de esta página.",
+ 'install:requirements:instructions:warning' => "Su servidor pasó la verificación de requerimientos, pero hay al menos una advertencia. Le recomendamos que verifique la página de solución de problemas para mas información.",
+
+ 'install:require:php' => 'PHP',
+ 'install:require:rewrite' => 'Servidor web',
+ 'install:require:settings' => 'Archivo de configuración',
+ 'install:require:database' => 'Base de datos',
+
+ 'install:check:root' => 'Su servidor web no posee los permisos necesarios para crear el archivo .htaccess en la raíz del directorio de Elgg. Tiene dos opciones:
+
+ 1. Modificar los permisos en el directorio raíz
+
+ 2. Copiar el archivo htaccess_dist a .htaccess',
+
+ 'install:check:php:version' => 'Elgg requiere la versión %s de PHP o superior. Este servidor se encuentra ejecutando la versión %s.',
+ 'install:check:php:extension' => 'Elgg requiere la extensión %s de PHP.',
+ 'install:check:php:extension:recommend' => 'Se recomienda que la estensión %s de PHP se encuentre instalada.',
+ 'install:check:php:open_basedir' => 'La directiva de PHP open_basedir puede evitar que Elgg guarde archivos en su directorio de datos.',
+ 'install:check:php:safe_mode' => 'Ejecutar PHP en modo seguro no es recomendado y puede ocasionar inconvenientes con Elgg.',
+ 'install:check:php:arg_separator' => 'arg_separator.output debe ser & para que Elgg funcione, el valor actual del servidor es %s',
+ 'install:check:php:register_globals' => 'Debe desactivarse el registro de globales.',
+ 'install:check:php:session.auto_start' => "session.auto_start debe desactivarse para que Elgg funcione. Modifique la configuración de su servidor o agregue la directiva al archivo .htaccess de Elgg.",
+
+ 'install:check:enginedir' => 'Su servidor no posee los permisos para crear el archivo settings.php en el directorio engine. Tiene dos opciones:
+
+ 1. Modificar los permisos en el directorio engine
+
+ 2. Copiar el archivo settings.example.php a settings.php y seguir las instrucciones en el para setear los parámeetros de base de datos.',
+ 'install:check:readsettings' => 'Existe un archivo settings en el directorio engine pero el servidor no puede leerlo. Puede eliminar el archivo o modificar los permisos sobre el mismo.',
+
+ 'install:check:php:success' => "El PHP de su servidor satisface todos los requerimientos de Elgg.",
+ 'install:check:rewrite:success' => 'El test de reescritura de reglas ha sido exitoso.',
+ 'install:check:database' => 'Los requerimientos de bases de datos se verificarán cuando Elgg cargue la base de datos.',
+
+ 'install:database:instructions' => "Si aún no creó una base de datos para Elgg debe hacerlo ahora. Luego complete los datos debajo para inicializar la base de datos.",
+ 'install:database:error' => 'Ocurrió un error al crear la base de datos de Elgg y la instalación no puede continuar. Revise los mensajes de error y corrija los problemas. Si necesita mas ayuda, visite el enlace para la solución de problemas de instalación debajo o utilice los foros de la comunidad Elgg.',
+
+ 'install:database:label:dbuser' => 'Usuario de Base de Datos',
+ 'install:database:label:dbpassword' => 'Contraseña',
+ 'install:database:label:dbname' => 'Nombre de la Base de Datos',
+ 'install:database:label:dbhost' => 'Host de Base de Datos',
+ 'install:database:label:dbprefix' => 'Prefijo de Tablas de la Base de Datos',
+
+ 'install:database:help:dbuser' => 'Usuario que posee todos los privilegios sobre la base de datos MySql que creó para Elgg',
+ 'install:database:help:dbpassword' => 'Contraseña para la cuenta del usuario anterior',
+ 'install:database:help:dbname' => 'Nombre de la base de datos Elgg',
+ 'install:database:help:dbhost' => 'Nombre del Host para el servidor MySQL (normalmente localhost)',
+ 'install:database:help:dbprefix' => "Prefijo para todas las tablas de Elgg (normalmente elgg_)",
+
+ 'install:settings:instructions' => 'Necesitamos alguna información sobre el sitio para configurar Elgg. Si usted no <a href="http://docs.elgg.org/wiki/Data_directory" target="_blank">creó un directorio de datos (data)</a> para Elgg, debe hacerlo ahora.',
+
+ 'install:settings:label:sitename' => 'Nombre del Sitio',
+ 'install:settings:label:siteemail' => 'Dirección de Email del Sitio',
+ 'install:settings:label:wwwroot' => 'URL del Sitio',
+ 'install:settings:label:path' => 'Directorio de Instalación de Elgg',
+ 'install:settings:label:dataroot' => 'Directorio Data',
+ 'install:settings:label:language' => 'Idioma del Sitio',
+ 'install:settings:label:siteaccess' => 'Acceso por Defecto',
+ 'install:label:combo:dataroot' => 'Elgg crea el directorio data',
+
+ 'install:settings:help:sitename' => 'El nombre de su nuevo sitio Elgg',
+ 'install:settings:help:siteemail' => 'Dirección de Email utilizada por Elgg para comunicaciones a los usuarios',
+ 'install:settings:help:wwwroot' => 'La dirección de esde sitio (normalmente Elgg la selecciona correctamnete)',
+ 'install:settings:help:path' => 'El directorio en donde se almacena el código de Elgg (normalmente Elgg lo selecciona correctamente)',
+ 'install:settings:help:dataroot' => 'El directorio que ha creado para que Elgg guarde archivos (se validarán los permisos sobre este directorio cuando presione el botón de siguiente)',
+ 'install:settings:help:dataroot:apache' => 'Tiene la opción de que Elgg cree el directorio o de seleccionar uno que ya haya creado (se validarán los permisos sobre este directorio cuando presione el botón de siguiente)',
+ 'install:settings:help:language' => 'El idioma por defecto para el sitio',
+ 'install:settings:help:siteaccess' => 'El nivel de acceso por defecto al crear nuevo contenido los usuarios',
+
+ 'install:admin:instructions' => "Es tiempo de crear la cuenta del Administrador.",
+
+ 'install:admin:label:displayname' => 'Nombre para Mostrar',
+ 'install:admin:label:email' => 'Dirección de Email',
+ 'install:admin:label:username' => 'Nombre de Usuario',
+ 'install:admin:label:password1' => 'Contraseña',
+ 'install:admin:label:password2' => 'Contraseña Nuevamente',
+
+ 'install:admin:help:displayname' => 'El nombre que se muestra en el sitio para esta cuenta',
+ 'install:admin:help:email' => '',
+ 'install:admin:help:username' => 'Nombre de usuario utilizado para acceder al sitio',
+ 'install:admin:help:password1' => "La contraseña de la cuenta debe tener al menos %u caracteres",
+ 'install:admin:help:password2' => 'Escriba nuevamente la contraseña para confirmar',
+
+ 'install:admin:password:mismatch' => 'Las contraseñas deben coincidir.',
+ 'install:admin:password:empty' => 'La contraseña no puede estar vacía.',
+ 'install:admin:password:tooshort' => 'La contraseña es demasiado corta',
+ 'install:admin:cannot_create' => 'No se pudo crear la cuenta del administrador.',
+
+ 'install:complete:instructions' => 'Su sitio Elgg ahora está listo para su uso. Haga click en el botón de abajo para ir a visitar el sitio.',
+ 'install:complete:gotosite' => 'Ir al sitio',
+
+ 'InstallationException:UnknownStep' => '%s es un paso de instalación desconocido.',
+
+ 'install:success:database' => 'Se ha instalado la base de datos.',
+ 'install:success:settings' => 'Se ha guardado la configuración del sitio.',
+ 'install:success:admin' => 'Se ha creado la cuenta Admin.',
+
+ 'install:error:htaccess' => 'No se pudo crear el archivo .htaccess',
+ 'install:error:settings' => 'No se pudo crear el archivo de configuración',
+ 'install:error:databasesettings' => 'No se pudo conectar a la base de datos con la información provista',
+ 'install:error:oldmysql' => 'MySQL debe ser una versión 5.0 o superior. Su servidor se encuentra utilizando la versión %s.',
+ 'install:error:nodatabase' => 'No se pudo acceder a la base de datos %s. Puede que no exista.',
+ 'install:error:cannotloadtables' => 'No se pueden cargar las tablas de la base de datos',
+ 'install:error:tables_exist' => 'Se encontraron tablas de Elgg preexistentes en la base de datos. Debe eliminarlas o reiniciar el instalador para intentar utilizarlas. Para reiniciar el instalador, quite \'?step=database\' de la URL en la barra de direcciones de su explorador y presione ENTER.',
+ 'install:error:readsettingsphp' => 'No se pudo leer el archivo engine/settings.example.php',
+ 'install:error:writesettingphp' => 'No se pudo escribir el archivo engine/settings.php',
+ 'install:error:requiredfield' => '%s es requerido',
+ 'install:error:datadirectoryexists' => 'El directorio de datos (data) %s no existe.',
+ 'install:error:writedatadirectory' => 'El servidor no puede escribir en el directorio de datos (data) %s.',
+ 'install:error:locationdatadirectory' => 'El directorio de datos (data) %s debe encontrarse fuera de la carpeta de instalación por motivos de seguridad.',
+ 'install:error:emailaddress' => '%s no es una dirección de Email válida',
+ 'install:error:createsite' => 'No se pudo crear el sitio.',
+ 'install:error:savesitesettings' => 'No se pudo guardar la configuración del sitio',
+ 'install:error:loadadmin' => 'No se pudo cargar el usuario administrador.',
+ 'install:error:adminaccess' => 'No se le pueden otorgar privilegios de administrador al usuario.',
+ 'install:error:adminlogin' => 'No se puede autenticar automáticamente al usuario administrador.',
+ 'install:error:rewrite:apache' => 'Creemos que su servidor se encuentra ejecutando el web server Apache.',
+ 'install:error:rewrite:nginx' => 'Creemos que su servidor se encuentra ejecutando el web server Nginx.',
+ 'install:error:rewrite:lighttpd' => 'Creemos que su servidor se encuentra ejecutando el web server Lighttpd.',
+ 'install:error:rewrite:iis' => 'Creemos que su servidor se encuentra ejecutando el web server Microsoft IIS.',
+ 'install:error:rewrite:allowoverride' => "La prueba de reescritura falló, la causa mas común es que AllowOverride no se encuentra establecido en All en el directorio de Elgg. Esto le impide al apache procesar el archivo .htaccess el cual contiene las reglas de reescritura.
+ \n\nOtra causa puede ser que el Apache tenga configurado un alias para el directorio de Elgg y deba establecer RewriteBase en su archivo .htaccess. Hay varias instrucciones en el archivo .htaccess de su directorio de Elgg.",
+ 'install:error:rewrite:htaccess:write_permission' => 'Su servidor web no tiene permisos para escribir el archivo .htaccess en la carpeta de Elgg. Debe copiar manualmente htaccess_dist a .htaccess o modificar los permisos en el directorio.',
+ 'install:error:rewrite:htaccess:read_permission' => 'Hay un archivo .htaccess en el directorio de Elgg, pero su servidor web no tiene los permisos necesarios para leerlo.',
+ 'install:error:rewrite:htaccess:non_elgg_htaccess' => 'Hay un archivo .htaccess en el directorio de Elgg que no ha sido creado por Elgg. Por favor elimínelo.',
+ 'install:error:rewrite:htaccess:old_elgg_htaccess' => 'Al parecer hay un archivo .htaccess de Elgg antiguo en el directorio de Elgg. El mismo no contiene la regla de reescritura para realizar la prueba del servidor web.',
+ 'install:error:rewrite:htaccess:cannot_copy' => 'Ha ocurrido un error desconocido al crear el archivo .htaccess. Deberá copiar manualmente htaccess_dist a .htaccess en el directorio de Elgg.',
+ 'install:error:rewrite:altserver' => 'La prueba de la reescritura de reglas ha fallado. Debe configurar su servidor web con reescritura de reglas e intentar nuevamente.',
+ 'install:error:rewrite:unknown' => 'Oof. No podemos saber qué tipo de servidor web se encuentra ejecutando y falló la reescritura de reglas. No podemos ofrecer ninguna ayuda específica. Por favor verifique el enlace de solución de problemas.',
+ 'install:warning:rewrite:unknown' => 'Su servidor no soporta la prueba automática de reescritura de reglas. Puede continuar con la instalación, pero puede experimentar problemas con el sitio. Puede probar manualmente las reescritura de reglas accediento a este enlace: <a href="%s" target="_blank">pruebas</a>. Observará la palabra success si la ejecución ha sido exitosa.',
+);
+
+add_translation("es", $spanish);
diff --git a/mod/languages/languages/es/es.invitefriends.php b/mod/languages/languages/es/es.invitefriends.php
new file mode 100644
index 000000000..7f473d06f
--- /dev/null
+++ b/mod/languages/languages/es/es.invitefriends.php
@@ -0,0 +1,29 @@
+<?php
+$es = array (
+ 'friends:invite' => 'Invitar amigos',
+ 'invitefriends:registration_disabled' => 'El registro de nuevos usuarios se ha deshabilitado, no puede invitar a nuevos usuarios.',
+ 'invitefriends:introduction' => 'Para invitar a tus amigos a entrar en la red social, introduce sus direcciones de email en la parte de abajo. Una dirección de email para cada línea:',
+ 'invitefriends:message' => 'Introduce un mensaje de invitación:',
+ 'invitefriends:subject' => 'Invitación para %s',
+ 'invitefriends:success' => 'Las invitaciones han sido enviadas con éxito. Gracias por hacer crecer nuestra familia.',
+ 'invitefriends:invitations_sent' => 'Invitaciones enviadas: %s. Se econtraron los siguientes problemas:',
+ 'invitefriends:already_members' => 'Los siguientes ya son miembros de la red: %s',
+ 'invitefriends:noemails' => 'No se ingresaron direcciones de Email',
+ 'invitefriends:message:default' => '
+Hola,
+
+Quiero invitarte a que entres a la red social %s.',
+ 'invitefriends:email' => 'Se te ha invitado a participar en %s por %s. Te ha enviado el siguiente mensaje:
+
+%s
+
+Para comenzar a tomar parte de la red social, pulsa el siguiente enlace:
+
+ %s
+
+Automáticamente el sistema te pondrá como amigo de la persona que te ha invitado.',
+ 'invitefriends:email_error' => 'Se enviaron invitaciones, pero las siguientes direcciones no son válidas: %s',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.likes.php b/mod/languages/languages/es/es.likes.php
new file mode 100644
index 000000000..9123a9b90
--- /dev/null
+++ b/mod/languages/languages/es/es.likes.php
@@ -0,0 +1,36 @@
+<?php
+$es = array (
+ 'likes:this' => 'le gusta esto',
+ 'likes:deleted' => 'Ya no te gusta esto',
+ 'likes:see' => 'Ver a quienes les gusta esto',
+ 'likes:remove' => 'Ya no me gusta',
+ 'likes:notdeleted' => 'Ocurrió un problema al intentar quitar el me gusta',
+ 'likes:likes' => 'Ahora te gusta esto',
+ 'likes:failure' => 'Ocurrió un problema al agregar el me gusta',
+ 'likes:alreadyliked' => 'Ya te gusta esto',
+ 'likes:notfound' => 'No se pudo encontrar el item que te gusta',
+ 'likes:likethis' => 'Me gusta',
+ 'likes:userlikedthis' => '%s me gusta',
+ 'likes:userslikedthis' => '%s me gusta',
+ 'likes:river:annotate' => 'me gusta',
+ 'river:likes' => 'me gustan %s %s',
+ 'likes:notifications:subject' => '%s me gusta en tu publicación "%s"',
+ 'likes:notifications:body' => 'Hola %1$s,
+
+a %2$s le gusta tu publicación "%3$s" en %4$s!
+
+Ver publicación original aquí:
+
+%5$s
+
+o ver el perfil de %2$s aquí:
+
+%6$s
+
+Gracias,
+%4$s
+',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.logbrowser.php b/mod/languages/languages/es/es.logbrowser.php
new file mode 100644
index 000000000..07f521569
--- /dev/null
+++ b/mod/languages/languages/es/es.logbrowser.php
@@ -0,0 +1,21 @@
+<?php
+$es = array (
+ 'admin:administer_utilities:logbrowser' => 'Visor de eventos',
+ 'logbrowser:ip_address' => 'Dirección IP',
+ 'logbrowser' => 'Visor de eventos',
+ 'logbrowser:browse' => 'Ver eventos del sistema',
+ 'logbrowser:search' => 'Refinar resultados',
+ 'logbrowser:user' => 'Buscar por nombre de usuario',
+ 'logbrowser:starttime' => 'Tiempo de inicio (por ejemplo "lunes anterior", "hace 1 hora")',
+ 'logbrowser:endtime' => 'Tiempo de fin',
+ 'logbrowser:explore' => 'Explorar log',
+ 'logbrowser:date' => 'Fecha y hora',
+ 'logbrowser:user:name' => 'Usuario',
+ 'logbrowser:user:guid' => 'GUID del Usuario',
+ 'logbrowser:object' => 'Tipo de objeto',
+ 'logbrowser:object:guid' => 'GUID del objecto',
+ 'logbrowser:action' => 'Acción',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.logrotate.php b/mod/languages/languages/es/es.logrotate.php
new file mode 100644
index 000000000..fd0812b99
--- /dev/null
+++ b/mod/languages/languages/es/es.logrotate.php
@@ -0,0 +1,22 @@
+<?php
+$es = array (
+ 'logrotate:delete' => 'Elimina los logs archivados más antiguos de',
+ 'logrotate:period' => 'Con qué frecuencia debe archivarse el log del sistema?',
+ 'logrotate:weekly' => 'Una vez a la semana',
+ 'logrotate:monthly' => 'Una vez al mes',
+ 'logrotate:yearly' => 'Una vez al año',
+ 'logrotate:logrotated' => 'Registro archivado
+',
+ 'logrotate:lognotrotated' => 'Error al archivar el registro
+',
+ 'logrotate:week' => 'semana',
+ 'logrotate:month' => 'mes',
+ 'logrotate:year' => 'año',
+ 'logrotate:logdeleted' => 'Registro eliminado
+',
+ 'logrotate:lognotdeleted' => 'Error al eliminar el registro
+',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.members.php b/mod/languages/languages/es/es.members.php
new file mode 100644
index 000000000..cca86eb29
--- /dev/null
+++ b/mod/languages/languages/es/es.members.php
@@ -0,0 +1,13 @@
+<?php
+$es = array (
+ 'members:searchtag' => 'Buscar miembros por etiquetas',
+ 'members:searchname' => 'Buscar miembros por nombre',
+ 'members:label:newest' => 'Nuevos',
+ 'members:label:popular' => 'Populares',
+ 'members:label:online' => 'Conectados',
+ 'members:title:searchname' => 'Buscar miembros para %s',
+ 'members:title:searchtag' => 'Miembros con tags %s',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.messageboard.php b/mod/languages/languages/es/es.messageboard.php
new file mode 100644
index 000000000..fb00c739c
--- /dev/null
+++ b/mod/languages/languages/es/es.messageboard.php
@@ -0,0 +1,43 @@
+<?php
+$es = array (
+ 'messageboard:board' => 'Bandeja de comentarios',
+ 'messageboard:viewall' => 'Ver todos',
+ 'messageboard:postit' => 'Nuevo',
+ 'messageboard:history' => 'Historial',
+ 'messageboard:none' => 'No tienes ningún comentario en tu bandeja',
+ 'messageboard:num_display' => 'Número de comentarios a mostrar',
+ 'messageboard:desc' => 'Esta es la bandeja de comentarios. Cualquiera, incluyéndote a ti, puede dejar un comentario en tu perfil.',
+ 'messageboard:user' => 'en la bandeja personal de %s',
+ 'messageboard:replyon' => 'responder a',
+ 'messageboard:posted' => 'El comentario ha sido escrito',
+ 'messageboard:deleted' => 'El comentario ha sido borrado',
+ 'messageboard:email:subject' => 'Tienes un comentario nuevo en la bandeja',
+ 'messageboard:email:body' => '%s te ha dejado el siguiente comentario:
+
+
+%s
+
+
+Para ver los comentarios en tu bandeja de mensajes, haz clic en el siguiente link:
+
+ %s
+
+Para consultar el perfil de %s, haz clic en este link:
+
+ %s
+
+No respondas a este email, recuerda que es el sistema el que te lo ha enviado de forma automágica. Si tienes algún problema o comentario sobre N-1, ponte en contacto con lxs administradorxs.',
+ 'messageboard:blank' => 'Necesitas poner algo en la bandeja de comentarios para enviarlo, ¿no crees?',
+ 'messageboard:notfound' => 'Uff, no encuentro lo que buscas. Inténtalo de nuevo o ponte en contacto con lxs administradorxs.',
+ 'messageboard:notdeleted' => 'El comentario no ha podido ser borrado, inténtalo de nuevo o ponte en contacto con lxs administradorxs.',
+ 'messageboard:somethingwentwrong' => 'Argh, algo extraño ha sucedido. Inténtalo de nuevo o ponte en contacto con lxs administradorxs.',
+ 'messageboard:failure' => '¡Fallazo!, el sistema no tiene ni idea de qué sucede. Inténtalo de nuevo o ponte en contacto con lxs administradorxs.',
+ 'messageboard:messageboard' => 'muro',
+ 'messageboard:history:title' => 'Historial',
+ 'messageboard:owner' => 'muro de %s',
+ 'messageboard:owner_history' => '%s comentó en el muro de %s',
+ 'river:messageboard:user:default' => '%s comentó en el muro de %s',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.messages.php b/mod/languages/languages/es/es.messages.php
new file mode 100644
index 000000000..11386fd8c
--- /dev/null
+++ b/mod/languages/languages/es/es.messages.php
@@ -0,0 +1,66 @@
+<?php
+$es = array (
+ 'messages:unreadcount' => '%s sin leer',
+ 'messages' => 'Correos',
+ 'messages:back' => 'volver a correos',
+ 'messages:user' => 'Buzón de correo',
+ 'messages:posttitle' => 'correos de %s: %s',
+ 'messages:inbox' => 'Buzón de correo',
+ 'messages:send' => 'Enviar un correo',
+ 'messages:sent' => 'Enviar correo',
+ 'messages:message' => 'Correo',
+ 'messages:title' => 'Asunto',
+ 'messages:to' => 'Para',
+ 'messages:from' => 'De',
+ 'messages:fly' => 'Enviar',
+ 'messages:replying' => 'Correo en respuesta a',
+ 'messages:sendmessage' => 'Enviar un correo',
+ 'messages:compose' => 'Escribir un correo',
+ 'messages:sentmessages' => 'Ver correos enviados',
+ 'messages:recent' => 'Correos recientes',
+ 'messages:original' => 'Correo original',
+ 'messages:yours' => 'Tu correo',
+ 'messages:answer' => 'Contestar',
+ 'messages:toggle' => 'Seleccionar todos',
+ 'messages:markread' => 'Marcar como leído',
+ 'messages:new' => 'Nuevo correo',
+ 'notification:method:site' => 'red social',
+ 'messages:error' => 'Hubo un problema al guardar tu correo. Por favor, vuelve a intentarlo.',
+ 'item:object:messages' => 'Correos',
+ 'messages:posted' => 'El correo se ha enviado',
+ 'messages:email:subject' => '¡Tienes un correo nuevo en tu buzón!',
+ 'messages:email:body' => 'Tienes un correo nuevo de %s que dice:
+
+
+%s
+
+
+Para ver tu buzón de correo haz clic aquí:
+
+ %s
+
+Para enviar un correo a %s haz clic aquí:
+
+ %s
+
+Por cierto... no respondas a este correo. Es una máquina quien te lo envia ;)',
+ 'messages:blank' => '¡Fíjate bien!, tienes que poner algo en el cuerpo del correo antes de que podamos guardarlo.',
+ 'messages:notfound' => '¡Vaya!, no hemos podido encontrar el correo solicitado. Inténtalo de nuevo o ponte en contacto con quien administra la red.',
+ 'messages:notdeleted' => '¡Vaya!, no hemos podido eliminar el correo. Inténtalo de nuevo o ponte en contacto con quien administra la red.',
+ 'messages:nopermission' => '¡No flipes!, no tienes permisos para modificar este correo.',
+ 'messages:nomessages' => 'No hay ningún correo que mostrar',
+ 'messages:user:nonexist' => 'No hemos podido encontrar a esta habitante en la base de datos. Inténtalo de nuevo o ponte en contacto con quien administra la red.',
+ 'messages:user:blank' => 'No has seleccionado a nadie para enviarle esto',
+ 'messages:add' => 'Redactar',
+ 'messages:recipient' => 'Elegir un destinatario&hellip;',
+ 'messages:to_user' => 'Para: %s',
+ 'messages:success:delete:single' => 'Mensaje eliminado',
+ 'messages:success:delete' => 'Mensajes eliminados',
+ 'messages:success:read' => 'Mensajes marcados como leídos',
+ 'messages:error:messages_not_selected' => 'No hay mensajes seleccionados',
+ 'messages:error:delete:single' => 'No se puede eliminar el mensaje',
+ 'messages:deleted_sender' => 'Usuario eliminado',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.notifications.php b/mod/languages/languages/es/es.notifications.php
new file mode 100644
index 000000000..982131d3a
--- /dev/null
+++ b/mod/languages/languages/es/es.notifications.php
@@ -0,0 +1,18 @@
+<?php
+$es = array (
+ 'friends:all' => 'Todos los amigos',
+ 'notifications:subscriptions:personal:description' => 'Recibir notificaciones cuando se modifiquen tus contenidos',
+ 'notifications:subscriptions:personal:title' => 'Notificaciones personales',
+ 'notifications:subscriptions:friends:title' => 'Amigos',
+ 'notifications:subscriptions:friends:description' => 'La siguiente es una colección automática de sus amigos. Para recibir actualizaciones selecciona debajo. Esto afectará a los usuarios que se corresopndan con el panel principal de notificaciones al final de la página',
+ 'notifications:subscriptions:collections:edit' => 'Para habilitar notificaciones compartidas haga click aquí',
+ 'notifications:subscriptions:changesettings' => 'Notificaciones',
+ 'notifications:subscriptions:changesettings:groups' => 'Notificaciones de grupos',
+ 'notifications:subscriptions:title' => 'Notificaciones por usuario',
+ 'notifications:subscriptions:description' => 'Para recibir noticificaciones de tus amigos cuando crean nuevo contenido, búscalos en la red y selecciona el tipo de notificación que quieres recibir',
+ 'notifications:subscriptions:groups:description' => 'Para recibir noticificaciones cuando se cree nuevo contenido en grupos en los que eres miembro, búscalos en la red y selecciona el tipo de notificación que quieres recibir',
+ 'notifications:subscriptions:success' => 'Su configuración de notificaciones ha sido guardada',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.pages.php b/mod/languages/languages/es/es.pages.php
new file mode 100644
index 000000000..65c442ff9
--- /dev/null
+++ b/mod/languages/languages/es/es.pages.php
@@ -0,0 +1,62 @@
+<?php
+$es = array (
+ 'pages:notification' => '%s creó una página nueva:
+
+%s
+%s
+
+Puedes verla y hacer comentarios en:
+%s',
+ 'pages' => 'Páginas',
+ 'pages:group' => 'Páginas',
+ 'pages:all' => 'Todas las páginas',
+ 'pages:new' => 'Nueva página',
+ 'pages:edit' => 'Editar la página',
+ 'pages:delete' => 'Borrar la página',
+ 'pages:history' => 'Historial de la página',
+ 'pages:view' => 'Ver página',
+ 'pages:navigation' => 'Página de navegación',
+ 'item:object:page_top' => 'Páginas iniciales',
+ 'item:object:page' => 'Páginas',
+ 'pages:nogroup' => 'El grupo no tiene contenido creado de momento, o bien no tienes permisos para visualializarlo la información',
+ 'pages:more' => 'Ver todas',
+ 'pages:title' => 'Título de la página',
+ 'pages:description' => 'Descripción de la entrada',
+ 'pages:tags' => 'Etiquetas',
+ 'pages:access_id' => 'Elige quién puede verla',
+ 'pages:write_access_id' => 'Elige quién puede editarla',
+ 'pages:noaccess' => 'Sin acceso a la página',
+ 'pages:cantedit' => 'No puedes editar esta página',
+ 'pages:saved' => 'Página guardada',
+ 'pages:notsaved' => 'La página no puede ser guardada',
+ 'pages:delete:success' => 'Tu página ha sido borrada correctamente',
+ 'pages:delete:failure' => 'No hemos podido borrar la página. Si el problema persiste contacta con quien adminstre la red.',
+ 'pages:strapline' => 'Última actualización %s por %s',
+ 'pages:revision' => 'Revisión',
+ 'pages:num' => 'Número de páginas a mostrar',
+ 'pages:widget:description' => 'Esta es una lista de tus páginas',
+ 'pages:label:view' => 'Ver página',
+ 'pages:label:edit' => 'Editar página',
+ 'pages:label:history' => 'Historial de la página',
+ 'pages:sidebar:this' => 'Esta página',
+ 'pages:sidebar:children' => 'Subpáginas',
+ 'pages:sidebar:parent' => 'Parent',
+ 'pages:newchild' => 'Crear una subpágina',
+ 'pages:backtoparent' => 'Volver a \'%s\'',
+ 'pages:owner' => 'Páginas de %s',
+ 'pages:friends' => 'Páginas de amigos',
+ 'pages:add' => 'Agregar Página',
+ 'groups:enablepages' => 'Habilitar páginas del grupo',
+ 'pages:none' => 'No hay páginas creadas aún',
+ 'river:create:object:page' => '%s ha creado la página %s',
+ 'river:create:object:page_top' => '%s ha creado una página %s',
+ 'river:update:object:page' => '%s ha actualizado la página %s',
+ 'river:update:object:page_top' => '%s ha actualizado una página %s',
+ 'river:comment:object:page' => '%s ha comentado en la página titulada %s',
+ 'river:comment:object:page_top' => '%s ha comentado en una página titulada %s',
+ 'pages:error:no_title' => 'Debe especificar un título para esta página.',
+ 'pages:revision:subtitle' => 'Revisión creada %s por %s',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.profile.php b/mod/languages/languages/es/es.profile.php
new file mode 100644
index 000000000..7f32b0cf2
--- /dev/null
+++ b/mod/languages/languages/es/es.profile.php
@@ -0,0 +1,8 @@
+<?php
+$es = array (
+ 'profile' => 'Perfil',
+ 'profile:notfound' => 'Lo sentimos. No se pudo encontrar el perfil solicitado.',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.reportedcontent.php b/mod/languages/languages/es/es.reportedcontent.php
new file mode 100644
index 000000000..90db7947a
--- /dev/null
+++ b/mod/languages/languages/es/es.reportedcontent.php
@@ -0,0 +1,36 @@
+<?php
+$es = array (
+ 'admin:administer_utilities:reportedcontent' => 'Contenido reportado',
+ 'item:object:reported_content' => 'Objetos compartidos',
+ 'reportedcontent' => 'Contenido reportado',
+ 'reportedcontent:this' => 'Reportar abuso',
+ 'reportedcontent:none' => 'No hay contenido reportado',
+ 'reportedcontent:report' => 'Reportar abuso',
+ 'reportedcontent:title' => 'Título de la página',
+ 'reportedcontent:deleted' => 'El contenido reportado ha sido borrado',
+ 'reportedcontent:notdeleted' => 'No podemos borrar el contenido',
+ 'reportedcontent:delete' => 'Borrar',
+ 'reportedcontent:areyousure' => '¿Estás segurx de que quieres borrarlo?',
+ 'reportedcontent:archive' => 'Archivar',
+ 'reportedcontent:archived' => 'El contenido ha sido archivado',
+ 'reportedcontent:visit' => 'Visitar el contenido del informe',
+ 'reportedcontent:by' => 'Reportado por',
+ 'reportedcontent:objecttitle' => 'Título del objeto',
+ 'reportedcontent:objecturl' => 'URL del objeto',
+ 'reportedcontent:reason' => 'Razón para informar',
+ 'reportedcontent:description' => 'Explica a lxs administradorxs por qué estás reportando este contenido:',
+ 'reportedcontent:address' => 'Localización del objeto',
+ 'reportedcontent:success' => 'El informe ha sido enviado a lxs administradorxs',
+ 'reportedcontent:failing' => 'El informe no puede ser enviado. Inténtalo de nuevo o ponte en contacto con lxs administradorx.',
+ 'reportedcontent:moreinfo' => 'Más información',
+ 'reportedcontent:failed' => 'El intento de reportar el contenido ha fallado. Inténtalo de nuevo o ponte en contacto con lxs administradorxs.',
+ 'reportedcontent:notarchived' => 'No podemos archivar el contenido reportado. Inténtalo de nuevo o ponte en contacto con lxs administradorxs.',
+ 'reportedcontent:this:tooltip' => 'Reportar esta página al administrador',
+ 'reportedcontent:instructions' => 'El reporte será enviado a los administradores del sitio para moderación.',
+ 'reportedcontent:numbertodisplay' => 'Cantidad de reportes a mostrar',
+ 'reportedcontent:widget:description' => 'Mostrar el contenido reportado',
+ 'reportedcontent:user' => 'Reportar usuario',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.search.php b/mod/languages/languages/es/es.search.php
new file mode 100644
index 000000000..ff34226ad
--- /dev/null
+++ b/mod/languages/languages/es/es.search.php
@@ -0,0 +1,18 @@
+<?php
+$es = array (
+ 'search:enter_term' => 'Introduce un término de búsqueda',
+ 'search:no_results' => 'No hay resultados.',
+ 'search:matched' => 'Coinciden:',
+ 'search:results' => 'Resultados de %s',
+ 'search:no_query' => 'Por favor, introduce una consulta a buscar.',
+ 'search:search_error' => 'Error',
+ 'search:more' => '+%s más %s',
+ 'search_types:tags' => 'Etiquetas',
+ 'search_types:comments' => 'Comentarios',
+ 'search:comment_on' => 'Comentarios de "%s"',
+ 'search:comment_by' => 'por',
+ 'search:unavailable_entity' => 'Entidad no disponible',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.tagcloud.php b/mod/languages/languages/es/es.tagcloud.php
new file mode 100644
index 000000000..2899bef99
--- /dev/null
+++ b/mod/languages/languages/es/es.tagcloud.php
@@ -0,0 +1,9 @@
+<?php
+$es = array (
+ 'tagcloud:widget:title' => 'Nube de Tags',
+ 'tagcloud:widget:description' => 'Nube de Tags',
+ 'tagcloud:widget:numtags' => 'Cantidad de tags a mostrar',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.thewire.php b/mod/languages/languages/es/es.thewire.php
new file mode 100644
index 000000000..da3e31f75
--- /dev/null
+++ b/mod/languages/languages/es/es.thewire.php
@@ -0,0 +1,36 @@
+<?php
+$es = array (
+ 'thewire' => 'Telegramas',
+ 'thewire:everyone' => 'Todos los telegramas',
+ 'thewire:user' => 'Telegramas de %s',
+ 'thewire:friends' => 'Telegramas de amigos',
+ 'thewire:tags' => 'Telegramas que coinciden con el tag \'%s\'',
+ 'thewire:noposts' => 'No hay telegramas aún',
+ 'item:object:thewire' => 'Telegramas',
+ 'thewire:by' => 'Telegrama mandado por %s',
+ 'river:create:object:thewire' => '%s mandó un nuevo %s',
+ 'thewire:wire' => 'telegrama',
+ 'thewire:widget:desc' => 'Mostrar tus últimos telegramas',
+ 'thewire:num' => 'Cantidad de telegramas a mostrar',
+ 'thewire:moreposts' => 'Más telegramas',
+ 'thewire:notfound' => 'Lo sentimos, no se pudo encontrar el telegrama solicitado.',
+ 'thewire:notdeleted' => 'Lo sentimos, no se pudo eliminar el telegrama.',
+ 'thewire:notify:subject' => 'Nuevo telegrama',
+ 'thewire:notify:reply' => '%s respondió a %s con un telegrama:',
+ 'thewire:notify:post' => '%s publicó un nuevo telegrama:',
+ 'thewire:reply' => 'Responder',
+ 'thewire:replying' => 'Responder a %s (@%s) quien escribe',
+ 'thewire:thread' => 'Debate',
+ 'thewire:charleft' => 'caracteres restantes',
+ 'thewire:update' => 'Actualizar',
+ 'thewire:previous' => 'Anterior',
+ 'thewire:hide' => 'Ocultar',
+ 'thewire:previous:help' => 'Ver publicación anterior',
+ 'thewire:hide:help' => 'Ocultar publicación anterior',
+ 'thewire:posted' => 'El mensaje se publicó correctamente.',
+ 'thewire:deleted' => 'El mensaje se eliminó correctamente.',
+ 'thewire:blank' => 'Debe ingresar contenido para poder publicar.',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.tinymce.php b/mod/languages/languages/es/es.tinymce.php
new file mode 100644
index 000000000..ed2621234
--- /dev/null
+++ b/mod/languages/languages/es/es.tinymce.php
@@ -0,0 +1,9 @@
+<?php
+$es = array (
+ 'tinymce:remove' => 'Quitar editor',
+ 'tinymce:add' => 'Agregar editor',
+ 'tinymce:word_count' => 'Cantidad de palabras: ',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.twitter.php b/mod/languages/languages/es/es.twitter.php
new file mode 100644
index 000000000..7e9a8da5d
--- /dev/null
+++ b/mod/languages/languages/es/es.twitter.php
@@ -0,0 +1,12 @@
+<?php
+$es = array (
+ 'twitter:title' => 'Twitter',
+ 'twitter:info' => 'Mostrar tus últimos tweets',
+ 'twitter:username' => 'Ingrese su nombre de usuario de twitter.',
+ 'twitter:num' => 'Cantidad de tweets a mostrar.',
+ 'twitter:visit' => 'ir a mi twitter',
+ 'twitter:notset' => 'El widget de Twitter no se encuentra listo para funcionar. Para mostrar los últimos tweets, haga click en - editar - y complete sus los datos',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/languages/languages/es/es.twitter_api.php b/mod/languages/languages/es/es.twitter_api.php
new file mode 100644
index 000000000..048c29ef2
--- /dev/null
+++ b/mod/languages/languages/es/es.twitter_api.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * An english language definition file
+ */
+
+$spanish = array(
+ 'twitter_api' => 'Servicios de Twitter',
+
+ 'twitter_api:requires_oauth' => 'Los Services de Twitter requieren el plugin OAuth Libraries para poder activarse.',
+
+ 'twitter_api:consumer_key' => 'Clave del Consumidor',
+ 'twitter_api:consumer_secret' => 'Secreto del Consumidor',
+
+ 'twitter_api:settings:instructions' => 'Debe obtener la clave y el secreto del consumidor en <a href="https://dev.twitter.com/apps/new" target="_blank">Twitter</a>. Complete la nueva app. Seleccione "Browser" como tipo de app y tipee "Read & Write" para el tipo de acceso. La url de callback es %stwitter_api/authorize',
+
+ 'twitter_api:usersettings:description' => "Enlace su cuenta %s con Twitter.",
+ 'twitter_api:usersettings:request' => "Primero debe <a href=\"%s\">autorizar</a> %s para acceder a su cuenta de Twitter.",
+ 'twitter_api:usersettings:cannot_revoke' => "No puede romper el enlace con su cuenta de Twitter ya que no ingresó un usuario y contraseña. <a href=\"%s\">Ingréselos aquí</a>.",
+ 'twitter_api:authorize:error' => 'No se puede autorizar Twitter.',
+ 'twitter_api:authorize:success' => 'El acceso a Twitter ha sido autorizado.',
+
+ 'twitter_api:usersettings:authorized' => "Ha autorizado a %s para acceder a su cuenta de Twitter: @%s.",
+ 'twitter_api:usersettings:revoke' => 'Click <a href="%s">aquí</a> para revocar el acceso.',
+ 'twitter_api:revoke:success' => 'El acceso a Twitter ha sido revocado.',
+
+ 'twitter_api:login' => 'Permitir a los usuarios que han registrado su Twitter autenticarse con su cuenta de Twitter?',
+ 'twitter_api:new_users' => 'Permitir a los nuevos usuarios autenticarse utilizando su cuenta de Twitter si la registración de usuarios se encuentra desactivada?',
+ 'twitter_api:login:success' => 'Se ha autenticado.',
+ 'twitter_api:login:error' => 'No se pudo autenticar con Twitter.',
+ 'twitter_api:login:email' => "Debe ingresar una dirección de correo válida para su cuenta de %s.",
+
+ 'twitter_api:invalid_page' => 'Página inválida',
+
+ 'twitter_api:deprecated_callback_url' => 'La URL de callback para la API de Twitter ha cambiado a %s. Por favor consulte con su administrador para modificarla.',
+
+ 'twitter_api:interstitial:settings' => 'Configure sus preferencias',
+ 'twitter_api:interstitial:description' => 'Se encuentra casi listo para utilizar %s! Necesitamos unos pocos detalles más para continuar. Son opcionales, pero le permitirán. autenticarse si se cae Twitter o desea desvincular sus cuentas',
+
+ 'twitter_api:interstitial:username' => 'Este es su nombre de usuario, no puede ser modificado. Si establece una contraseña, puede utilizar su nombre de usuario o Email para autenticarse.',
+
+ 'twitter_api:interstitial:name' => 'Este es el nombre que la gente verá para interactuar contigo.',
+
+ 'twitter_api:interstitial:email' => 'Su dirección de Email. Por defecto no es visible para los usuarios.',
+
+ 'twitter_api:interstitial:password' => 'Una contraseña para autenticarse si Twitter se encuentra caído o desea desvincular sus cuentas.',
+ 'twitter_api:interstitial:password2' => 'La misma contraseña, otra vez.',
+
+ 'twitter_api:interstitial:no_thanks' => 'No, gracias',
+
+ 'twitter_api:interstitial:no_display_name' => 'Debe tener un nombre para mostrar.',
+ 'twitter_api:interstitial:invalid_email' => 'Debe ingresar una dirección de mail válida o dejar en blanco.',
+ 'twitter_api:interstitial:existing_email' => 'El mail ya se encuentra registrado en el sitio.',
+ 'twitter_api:interstitial:password_mismatch' => 'Las contraseñas no coinciden.',
+ 'twitter_api:interstitial:cannot_save' => 'No se pueden guardar los detalles de la cuenta.',
+ 'twitter_api:interstitial:saved' => 'Detalles de la cuenta guardados!',
+);
+
+add_translation('es', $spanish);
diff --git a/mod/languages/languages/es/es.uservalidationbyemail.php b/mod/languages/languages/es/es.uservalidationbyemail.php
new file mode 100644
index 000000000..d49dbde86
--- /dev/null
+++ b/mod/languages/languages/es/es.uservalidationbyemail.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Email user validation plugin language pack.
+ *
+ * @package Elgg.Core.Plugin
+ * @subpackage ElggUserValidationByEmail
+ */
+
+$spanish = array(
+ 'admin:users:unvalidated' => 'No validados',
+
+ 'email:validate:subject' => "%s por favor confirme su dirección de correo para %s!",
+ 'email:validate:body' => "%s,
+
+Antes de comenzar a utilizar %s, debe confirmar su dirección de correo.
+
+Por favor confirme su dirección haciendo click en el enlace de abajo:
+
+%s
+
+Si no puede hacer click en el enlace, copie y pegue en su explorador manualmente.
+
+%s
+%s
+",
+ 'email:confirm:success' => "Ha confirmado su dirección de Email!",
+ 'email:confirm:fail' => "Su dirección de Email no pudo ser confirmada...",
+
+ 'uservalidationbyemail:registerok' => "Para activar su cuenta, por favor confirme su dirección de Email con el correo que acabamos de enviarle a su casilla.",
+ 'uservalidationbyemail:login:fail' => "Su cuenta no se encuentra validada y la autenticación ha fallado. Se envió un nuevo correo de verificación.",
+
+ 'uservalidationbyemail:admin:no_unvalidated_users' => 'No hay usuarios no validados.',
+
+ 'uservalidationbyemail:admin:unvalidated' => 'No validado',
+ 'uservalidationbyemail:admin:user_created' => 'Registrado %s',
+ 'uservalidationbyemail:admin:resend_validation' => 'Reenviar validación',
+ 'uservalidationbyemail:admin:validate' => 'Validar',
+ 'uservalidationbyemail:admin:delete' => 'Eliminar',
+ 'uservalidationbyemail:confirm_validate_user' => 'Validar %s?',
+ 'uservalidationbyemail:confirm_resend_validation' => 'Reenviar email de validación a %s?',
+ 'uservalidationbyemail:confirm_delete' => 'Eliminar %s?',
+ 'uservalidationbyemail:confirm_validate_checked' => 'Validar usuarios seleccionados?',
+ 'uservalidationbyemail:confirm_resend_validation_checked' => 'Reenviar validación a los usuarios seleccionados?',
+ 'uservalidationbyemail:confirm_delete_checked' => 'Eliminar usuarios seleccionados?',
+ 'uservalidationbyemail:check_all' => 'Todos',
+
+ 'uservalidationbyemail:errors:unknown_users' => 'Usuarios desconocidos',
+ 'uservalidationbyemail:errors:could_not_validate_user' => 'No se puede validar al usuario.',
+ 'uservalidationbyemail:errors:could_not_validate_users' => 'No se puede validar a todos los usuarios seleccionados.',
+ 'uservalidationbyemail:errors:could_not_delete_user' => 'No se puede eliminar al usuario.',
+ 'uservalidationbyemail:errors:could_not_delete_users' => 'No se puede eliminar a todos los usuarios seleccionados.',
+ 'uservalidationbyemail:errors:could_not_resend_validation' => 'No se puede reenviar la solicitud de validación.',
+ 'uservalidationbyemail:errors:could_not_resend_validations' => 'No se pueden reenviar las solicitudes de validación a todos los usuarios seleccionados.',
+
+ 'uservalidationbyemail:messages:validated_user' => 'Usuario validado.',
+ 'uservalidationbyemail:messages:validated_users' => 'Todos los usuarios seleccionados han sido validados.',
+ 'uservalidationbyemail:messages:deleted_user' => 'Usuario eliminado.',
+ 'uservalidationbyemail:messages:deleted_users' => 'Todos los usuarios seleccionados han sido eliminados.',
+ 'uservalidationbyemail:messages:resent_validation' => 'Solicitud de validación reenviada.',
+ 'uservalidationbyemail:messages:resent_validations' => 'Solicitudes de validación reenviadas a los usuarios seleccionados.'
+
+);
+
+add_translation("es", $spanish); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.blog.php b/mod/languages/languages/eu/eu.blog.php
new file mode 100644
index 000000000..c81fce10b
--- /dev/null
+++ b/mod/languages/languages/eu/eu.blog.php
@@ -0,0 +1,57 @@
+<?php
+$basque=array (
+ 'blog' => 'Bloga',
+ 'blog:blogs' => 'Blogak',
+ 'blog:revisions' => 'Berrikuspenak',
+ 'blog:archives' => 'Artxiboak',
+ 'blog:blog' => 'Bloga',
+ 'item:object:blog' => 'Blogak',
+ 'blog:title:user_blogs' => '%s-(r)en blogak',
+ 'blog:title:all_blogs' => 'Blog guztiak',
+ 'blog:title:friends' => 'Lagunen blogak',
+ 'blog:group' => 'Taldeko bloga',
+ 'blog:enableblog' => 'Taldeko bloga gaitu',
+ 'blog:write' => 'Idatzi blog mezu bat',
+ 'blog:add' => 'Gehitu blog mezu bat',
+ 'blog:edit' => 'Editatu blog mezua',
+ 'blog:excerpt' => 'Laburpena',
+ 'blog:body' => 'Gorputza',
+ 'blog:save_status' => 'Azken gordea: ',
+ 'blog:never' => 'Inoiz',
+ 'blog:status' => 'Egoera',
+ 'blog:status:draft' => 'Zirriborroa',
+ 'blog:status:published' => 'Argitaratua',
+ 'blog:status:unsaved_draft' => 'Gorde ez den zirriborroa',
+ 'blog:revision' => 'Berrikuspena',
+ 'blog:auto_saved_revision' => 'Automatikoki gordetako berrikuspena',
+ 'blog:message:saved' => 'Blog mezua gorde da.',
+ 'blog:error:cannot_save' => 'Ezin izan da blog mezua gorde.',
+ 'blog:error:cannot_write_to_container' => 'Ez duzu beharrezko baimenik bloga taldean gordetzeko.',
+ 'blog:messages:warning:draft' => 'Mezu honen gorde gabeko zirriborro bat dago!',
+ 'blog:edit_revision_notice' => '(Bertsio zaharra)',
+ 'blog:message:deleted_post' => 'Blog mezua ezabatua.',
+ 'blog:error:cannot_delete_post' => 'Ezin da blog mezua ezabatu.',
+ 'blog:none' => 'Ez dago blog mezurik',
+ 'blog:error:missing:title' => 'Sartu mesedez blogaren izenburua!',
+ 'blog:error:missing:description' => 'Sartu mesedez blogaren gorputza!',
+ 'blog:error:cannot_edit_post' => 'Ez dago horrelako mezurik edo ez duzu berau editatzeko baimenik.',
+ 'blog:error:revision_not_found' => 'Ezin da berrikuspen hau aurkitu.',
+ 'river:create:object:blog' => '%s-(e)k %s blog mezua argitaratu du',
+ 'river:comment:object:blog' => '%s-(e)k %s bloga iruzkindu du',
+ 'blog:newpost' => 'Blog mezu berria',
+ 'blog:notification' => '
+%s-ek blog mezu bat egin du.
+
+%s
+%s
+
+Irakurri eta egin iruzkina blog mezu berrian:
+%s
+',
+ 'blog:widget:description' => 'Erakutsi zure blog mezuak berrienak',
+ 'blog:moreblogs' => 'Blog mezu gehiago',
+ 'blog:numbertodisplay' => 'Erakutsiko diren blog mezu kopurua',
+ 'blog:noblogs' => 'Ez da blog mezurik',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.bookmarks.php b/mod/languages/languages/eu/eu.bookmarks.php
new file mode 100644
index 000000000..7632e7745
--- /dev/null
+++ b/mod/languages/languages/eu/eu.bookmarks.php
@@ -0,0 +1,53 @@
+<?php
+$basque=array (
+ 'bookmarks' => 'Laster-markak',
+ 'bookmarks:add' => 'Laster-marka gehitu',
+ 'bookmarks:edit' => 'Laster-marka editatu',
+ 'bookmarks:owner' => '%s-(r)en laster-markak',
+ 'bookmarks:friends' => 'Lagunen laster-markak',
+ 'bookmarks:everyone' => 'Guneko laster-marka guztiak',
+ 'bookmarks:this' => 'Orrin honen laster-marka egin',
+ 'bookmarks:this:group' => 'Laster-marka %s-(e)n',
+ 'bookmarks:bookmarklet' => 'Bookmarklet-a lortu',
+ 'bookmarks:bookmarklet:group' => 'Taldeko bookmarklet-a lortu',
+ 'bookmarks:inbox' => 'Laster-marken sarrera ontzia',
+ 'bookmarks:morebookmarks' => 'Laster-marka gehiago',
+ 'bookmarks:more' => 'Laster-marka gehiago',
+ 'bookmarks:with' => 'Honekin partekatu',
+ 'bookmarks:new' => 'Laster-marka berria',
+ 'bookmarks:address' => 'Laster-markaren helbidea',
+ 'bookmarks:none' => 'Ez da laster-markarik',
+ 'bookmarks:notification' => '%s-ek laster-marka berria sortu du:
+
+%s - %s
+%s
+
+Irakurri eta iruzkina egin laster-marka berriari:
+%s
+',
+ 'bookmarks:delete:confirm' => 'Ziur zaude baliabide hau ezabatu nahi duzula?',
+ 'bookmarks:numbertodisplay' => 'Bistaratuko diren laster-marka kopurua',
+ 'bookmarks:shared' => 'Laster-markatua',
+ 'bookmarks:visit' => 'Baliabidea bisitatu',
+ 'bookmarks:recent' => 'Laster-marka berriak',
+ 'river:create:object:bookmarks' => '%s-(e)k %s laster-markatu du',
+ 'river:comment:object:bookmarks' => '%s-(e)k iruzkina utzi du %s laster-markan',
+ 'bookmarks:river:annotate' => 'Iruzkina laster-marka honetan',
+ 'bookmarks:river:item' => 'elementu bat',
+ 'item:object:bookmarks' => 'Laster-markak',
+ 'bookmarks:group' => 'Talde laster-markak',
+ 'bookmarks:enablebookmarks' => 'Taldeko laster-markak gaitu',
+ 'bookmarks:nogroup' => 'Talde honek ez du oraindik inongo laster-markarik',
+ 'bookmarks:no_title' => 'Izenbururik ez',
+ 'bookmarks:widget:description' => 'Bistaratu zure laster-marka berrienak.',
+ 'bookmarks:bookmarklet:description' => 'Laster-marka bookmarlet-ak sarean aurkitzen dituzun baliabideak zure lagunekin partekatzen uzten dizu, edo zuretzat bakarrik izango diren laster-markak sortzen. Hau erabiltzeko, arrastatu ezazu botoia zure nabigatzailearen esteka barrara:',
+ 'bookmarks:bookmarklet:descriptionie' => 'Internet Explorer erabiltzen ari bazara, bookmarklet ikonoan eskuineko botoiarekin klikatu, aukeratu \'Gehitu gogokoetan\' eta gero esteka barra.',
+ 'bookmarks:bookmarklet:description:conclusion' => 'Berau klikatuz, bisitatzen duzun edozein orri gorde ahal izango duzu nahi duzunean.',
+ 'bookmarks:save:success' => 'Zure elementuren laster-marka ongi sortu da.',
+ 'bookmarks:delete:success' => 'Zure laster-marka ezabatu da.',
+ 'bookmarks:save:failed' => 'Zure elementuaren laster-marka ezin izan da gorde. Ziurtatu izenburu eta helbidea sartu dituzula eta berriz saiatu.',
+ 'bookmarks:save:invalid' => 'Laster-markaren helbidea baliogabea da eta ezin izan da gorde.',
+ 'bookmarks:delete:failed' => 'Laster-marka ezin izan da ezabatu. Saiatu berriz, mesedez.',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.categories.php b/mod/languages/languages/eu/eu.categories.php
new file mode 100644
index 000000000..2e53e490e
--- /dev/null
+++ b/mod/languages/languages/eu/eu.categories.php
@@ -0,0 +1,11 @@
+<?php
+$basque=array (
+ 'categories' => 'Atalak',
+ 'categories:settings' => 'Ezarri guneko atalak',
+ 'categories:explanation' => 'Gune osoan erabiliko diren atalak definitzeko, sartu hemen, komaz bananduta. Atal hauek, bateragarriak diren tresnek erakutsiko dituzte erabiltzaileak edukiak sortu edo editatzean dituenean.',
+ 'categories:save:success' => 'Guneko atalak ondo gorde dira.',
+ 'categories:results' => 'Gune atalarentzat emaitzak: %s',
+ 'categories:on_activate_reminder' => 'Gune atalak ez dira bistaratuko atalak sortu ezean. <a href="%s">Gehitu atalak orain.</a>',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.core.php b/mod/languages/languages/eu/eu.core.php
new file mode 100644
index 000000000..de4162358
--- /dev/null
+++ b/mod/languages/languages/eu/eu.core.php
@@ -0,0 +1,996 @@
+<?php
+$basque=array (
+ 'item:site' => 'Guneak',
+ 'login' => 'Saioa hasi',
+ 'loginok' => 'Saioa hasi duzu.',
+ 'loginerror' => 'Ezin izan da zure saioa hasi. Egiaztatu zure kredentzialak eta saiatu berriz, mesedez.',
+ 'login:empty' => 'Erabiltzaile eta pasahitza beharrezkoak dira.',
+ 'login:baduser' => 'Ezin izan da kargatu zure erabiltzaile kontua.',
+ 'auth:nopams' => 'Barne errorea. Ez da instalatu erabiltzaileak baieztatzeko metodorik',
+ 'logout' => 'Saioa amaitu',
+ 'logoutok' => 'Zure saioa amaitu da.',
+ 'logouterror' => 'Ezin izan dugu zure saioa amaitu. Saiatu berriro, mesedez.',
+ 'loggedinrequired' => 'Orria ikusteko saioa hasi behar duzu.',
+ 'adminrequired' => 'Administratzailea izan behar duzu orria ikusteko.',
+ 'membershiprequired' => 'Talde honen kidea izan behar duzu orria ikusteko.',
+ 'exception:title' => 'Errore larria.',
+ 'exception:contact_admin' => 'Errore konponezina gertatu da eta erregistratua izan da. Gunearen administrazailearekin harremanetan jarri eta eskeini iezaiozu hurrengo informazioa:',
+ 'actionundefined' => 'Eskatutako kintza (%s) ez dago sisteman definituta.',
+ 'actionnotfound' => '%s-entzat akzio-fitxategia ez da aurkitu.',
+ 'actionloggedout' => 'Barkatu, baina ezin duzu akzio hau burutu saioa hasi ezean.',
+ 'actionunauthorized' => 'Ez duzu akzio hau burutzeko baimenik',
+ 'InstallationException:SiteNotInstalled' => 'Ezin da eskaera hau burutu. Gunea ez da konfiguratu edo datubasea ez dago martxan.',
+ 'InstallationException:MissingLibrary' => 'Ezin da %s kargatu',
+ 'InstallationException:CannotLoadSettings' => 'Elgg-ek ezin izan du ezarpen fitxategia kargatu. Ez dago horrelakorik edo fitxategi baimen arazoren bat dago.',
+ 'SecurityException:Codeblock' => 'Ez duzu baimenik kode zati berezia abiarazteko',
+ 'DatabaseException:WrongCredentials' => 'Elgg-ek ezin izan du datu basearekin konektatu emandako kredentzialekin. Baieztatu ezarpen fitxategia.',
+ 'DatabaseException:NoConnect' => 'Elgg-ek ezin izan du \'%s\' datu basea hautatu. Egiaztatu datu basea sortuta dagoela eta berau atzitzeko beharrezko baimenak badituzula.',
+ 'SecurityException:FunctionDenied' => '\'%s\' funtzio berezia atzitzea ukatu egin da.',
+ 'DatabaseException:DBSetupIssues' => 'Arazo batzuk egon dira: ',
+ 'DatabaseException:ScriptNotFound' => 'Elgg-ek ezin izan du eskatutako datubase script-a aurkitu %s-(e)n.',
+ 'DatabaseException:InvalidQuery' => 'Eskakizun baliogabea',
+ 'IOException:FailedToLoadGUID' => 'Ezin izan da %s berria kargatu %d GUID-tik',
+ 'InvalidParameterException:NonElggObject' => 'ElggObject ez den zerbait pasatu zaio ElggObject-en sortzaileari!',
+ 'InvalidParameterException:UnrecognisedValue' => 'Balio ezezaguna pasatu zaio sortzaileari.',
+ 'InvalidClassException:NotValidElggStar' => 'GUID:%d ez da %s balioduna',
+ 'PluginException:MisconfiguredPlugin' => '%s (guid: %s) txarto konfiguratutako plugina da. Desgaitua izan da. Jo Elgg-en wiki-ra (http://docs.elgg.org/wiki/).',
+ 'PluginException:CannotStart' => '%s (guid: %s) ezin izan da martxan jarri eta desgaitua izan da. Arrazoia: %s',
+ 'PluginException:InvalidID' => '%s ez da baliozko plugin ID-a.',
+ 'PluginException:InvalidPath' => '%s plugin bide baliogabea da.',
+ 'PluginException:InvalidManifest' => 'Manifestu fitxategi baliogabea du %s plugin-ak',
+ 'PluginException:InvalidPlugin' => '%s ez da plugin baliogarria',
+ 'PluginException:InvalidPlugin:Details' => '%s ez da plugin balioduna: %s',
+ 'PluginException:NullInstantiated' => 'ElggPlugin ezin da hutsik instantziatu. GUID, plugin ID, edo bide oso bat eskaini behar zaio.',
+ 'ElggPlugin:MissingID' => 'Ez da aurkitu plugin ID-rik (guid %s)',
+ 'ElggPlugin:NoPluginPackagePackage' => '%s IDa (guid %s) duen pluginak ElggPluginPackage galdua du',
+ 'ElggPluginPackage:InvalidPlugin:MissingFile' => '%s fitxategia ez da aurkitzen paketean',
+ 'ElggPluginPackage:InvalidPlugin:InvalidDependency' => 'Menpekotasun mota baliogabea: "%s"',
+ 'ElggPluginPackage:InvalidPlugin:InvalidProvides' => 'Emandako "%s% mota baliogabea da',
+ 'ElggPluginPackage:InvalidPlugin:CircularDep' => '%s menpekotasun baliogabea "%s", %s pluginean. Pluginen artean ezin da gatazkarik eman eskaini edo behar duten zerbaiten inguruan!',
+ 'ElggPlugin:Exception:CannotIncludeFile' => 'Ezin da %s txertatu %s pluginarentzat (guid: %s), hemen: %s.',
+ 'ElggPlugin:Exception:CannotRegisterViews' => 'Ezin da views karpeta zabalu %s pluginarentzat (guid: %s), hemen: %s.',
+ 'ElggPlugin:Exception:CannotRegisterLanguages' => 'Ezin dira hizkuntzak registratu %s pluginarentzat (guid: %s), hemen: %s.',
+ 'ElggPlugin:Exception:NoID' => 'Ez da ID-rik %s guid-a duen pluginarentzat!',
+ 'PluginException:ParserError' => 'Manifestua irakurtzekoan errorea eman da API %s bertsiorekin, %s plugin-ean.',
+ 'PluginException:NoAvailableParser' => 'Ez da aurkitu analizatzailerik manifesturarako API %s bertsioarekin, %s plugin-ean.',
+ 'PluginException:ParserErrorMissingRequiredAttribute' => 'Ez da aurkitzen beharrezkoa den \'%s\' atributua manifestuan %s pluginarentzat.',
+ 'ElggPlugin:Dependencies:Requires' => 'Behar du',
+ 'ElggPlugin:Dependencies:Suggests' => 'Iradokizunak',
+ 'ElggPlugin:Dependencies:Conflicts' => 'Gatazkak',
+ 'ElggPlugin:Dependencies:Conflicted' => 'Gatazka eman da',
+ 'ElggPlugin:Dependencies:Provides' => 'Ematen du',
+ 'ElggPlugin:Dependencies:Priority' => 'Lehentasuna',
+ 'ElggPlugin:Dependencies:Elgg' => 'Elgg bertsioa',
+ 'ElggPlugin:Dependencies:PhpExtension' => 'PHP hedapena: %s',
+ 'ElggPlugin:Dependencies:PhpIni' => 'PHP ini ezarpenak: %s',
+ 'ElggPlugin:Dependencies:Plugin' => 'Plugina: %s',
+ 'ElggPlugin:Dependencies:Priority:After' => '%s ondoren',
+ 'ElggPlugin:Dependencies:Priority:Before' => '%s aurretik',
+ 'ElggPlugin:Dependencies:Priority:Uninstalled' => '%s ez dago instalaturik',
+ 'ElggPlugin:Dependencies:Suggests:Unsatisfied' => 'Ez da aurkitzen',
+ 'ElggPlugin:InvalidAndDeactivated' => '%s baliogabeko plugina da eta desaktibatua izan da.',
+ 'InvalidParameterException:NonElggUser' => 'ElggUser ez den zerbait pasatu zaio ElggUser-en sortzaileari!',
+ 'InvalidParameterException:NonElggSite' => 'ElggSite ez den zerbait pasatu zaio ElggSite-ren sortzaileari!',
+ 'InvalidParameterException:NonElggGroup' => 'ElggGroup ez den zerbait pasatu zaio ElggGroup-en sortzaileari!',
+ 'IOException:UnableToSaveNew' => 'Ezin izan da %s berria gorde',
+ 'InvalidParameterException:GUIDNotForExport' => 'GUID-a ez da zehaztu esportazioan. Honek ez luke inoiz gertatu behar.',
+ 'InvalidParameterException:NonArrayReturnValue' => 'Entitatea serializatzeko funtzioak array ez den parametroa bueltatu du',
+ 'ConfigurationException:NoCachePath' => 'Katxearen bidea hutsik dago!',
+ 'IOException:NotDirectory' => '%s ez da karpeta bat.',
+ 'IOException:BaseEntitySaveFailed' => 'Ezin izan da objektu berriaren oinarrizko entitate informazioa gorde!',
+ 'InvalidParameterException:UnexpectedODDClass' => 'import()-ek espero ez zen ODD klase bat pasatu du',
+ 'InvalidParameterException:EntityTypeNotSet' => 'Entitate mota zehaztu behar da.',
+ 'ClassException:ClassnameNotClass' => '%s ez da %s.',
+ 'ClassNotFoundException:MissingClass' => '%s klasea ez da aurkitu, plugin-a falta da?',
+ 'InstallationException:TypeNotSupported' => '%s motarentzat ez dago euskarririk. Honek instalazioan errore bat egon dela esan nahi du, seguraski bukatu gabeko eguneraketaren bat dela-eta.',
+ 'ImportException:ImportFailed' => 'Ezin izan da %d elementua inportatu',
+ 'ImportException:ProblemSaving' => '%s gordetzerakoan arazo bat egon da',
+ 'ImportException:NoGUID' => 'Entitate berria sortu da baina ez du GUID-rik. Hau ez litzateke gertatu behar.',
+ 'ImportException:GUIDNotFound' => 'Ezin izan da \'%d\' entitatea aurkitu.',
+ 'ImportException:ProblemUpdatingMeta' => 'Arazo bat egon da \'%s\' eguneratzean \'%d\' entitatean',
+ 'ExportException:NoSuchEntity' => 'Ez dago halako entitaterik GUID:%d',
+ 'ImportException:NoODDElements' => 'Ez da OpenDD elementurik aurkitu inportatzeko datuetan; beraz, inportazioak huts egin du.',
+ 'ImportException:NotAllImported' => 'Ez dira elementu guztiak inportatu.',
+ 'InvalidParameterException:UnrecognisedFileMode' => '\'%s\' fitxategi mota ezezaguna da',
+ 'InvalidParameterException:MissingOwner' => 'Fitxategi honek: %s (guid:%d) (jabearen guid:%d) jabea galdua du!',
+ 'IOException:CouldNotMake' => 'Ezin izan da %s egin',
+ 'IOException:MissingFileName' => 'Izena zehaztu behar duzu fitxategia zabaldu baino lehen.',
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => '%s Filestore klasea ezin izan da kargatu %u fitxategiarentzat',
+ 'NotificationException:NoNotificationMethod' => 'Ez da jadkinarazpen metodoa zehaztu.',
+ 'NotificationException:NoHandlerFound' => 'Ez da kontroladorerik aurkitu \'%s\'-rako edo ezin izan da deitu.',
+ 'NotificationException:ErrorNotifyingGuid' => 'Errore bat egon da %d jakinaraztean',
+ 'NotificationException:NoEmailAddress' => 'Ezin izan da GUID:%d-rako posta elektroniko helbidea aurkitu',
+ 'NotificationException:MissingParameter' => 'Beharrezkoa den \'%s\' parametroa falta da',
+ 'DatabaseException:WhereSetNonQuery' => 'Where parteak WhereQueryComponent ez den zerbait du',
+ 'DatabaseException:SelectFieldsMissing' => 'Eremuak falta dira select motako kontsulta batean',
+ 'DatabaseException:UnspecifiedQueryType' => 'Kontsulta mota ezezaguna edo zehaztu gabea.',
+ 'DatabaseException:NoTablesSpecified' => 'Ez da taularik zehaztu kontsultarako.',
+ 'DatabaseException:NoACL' => 'Ez da atzipen kontrolik zehaztu kontsultan',
+ 'InvalidParameterException:NoEntityFound' => 'Entitatea ez da aurkitu. Ez dago horrelakorik edo ez duzu atzipen baimenik.',
+ 'InvalidParameterException:GUIDNotFound' => 'GUID:%s ezin izan da aurkitu edo ez duzu honetarako atzipenik baimenik.',
+ 'InvalidParameterException:IdNotExistForGUID' => 'Barkatu, ez dago \'%s\'-rik guid:%d-(r)entzat',
+ 'InvalidParameterException:CanNotExportType' => 'Barkatu, ez dakit nola esportatu \'%s\'',
+ 'InvalidParameterException:NoDataFound' => 'Ez da daturik aurkitu.',
+ 'InvalidParameterException:DoesNotBelong' => 'Ez dagokio entitateari.',
+ 'InvalidParameterException:DoesNotBelongOrRefer' => 'Ez dagokio entitateari edo ez dio erreferentziarik egiten.',
+ 'InvalidParameterException:MissingParameter' => 'Parametroa falta da, GUID bat sartu behar duzu.',
+ 'InvalidParameterException:LibraryNotRegistered' => '%s ez da erregistratutako liburutegia',
+ 'InvalidParameterException:LibraryNotFound' => 'Ezin izan da %s liburutegia kargatu %s-tik',
+ 'APIException:ApiResultUnknown' => 'API emaitza mota ezezagunekoa da. Hau ez litzateke inoiz gertatu behar.',
+ 'ConfigurationException:NoSiteID' => 'Gunearen ID-a ez da zehaztu.',
+ 'SecurityException:APIAccessDenied' => 'Barkatu, baina kudeatzaileak API bidezko atzipena ezgaitu du.',
+ 'SecurityException:NoAuthMethods' => 'Ez da autentifikatze-metodorik aurkitu API eskaera honetarako.',
+ 'SecurityException:ForwardFailedToRedirect' => 'Ezin da berbideratzerik gauzatu buruak jada bidaliak zirelako. Segutasunagatik exekuzioa gelditzen. Begira http://docs.elgg.org/ gehiago jakiteko.',
+ 'InvalidParameterException:APIMethodOrFunctionNotSet' => 'Metodo edo funtzioa ez da ezarri expose_method deitzean',
+ 'InvalidParameterException:APIParametersArrayStructure' => 'Parametroen array egitura ez da zuzena \'%s\' expose metodoa abiarazteko',
+ 'InvalidParameterException:UnrecognisedHttpMethod' => 'http metodo ezezaguna %s api \'%s\' metodoarentzat',
+ 'APIException:MissingParameterInMethod' => '%s parametroa falta da %s metodoan',
+ 'APIException:ParameterNotArray' => 'Ez dirudi %s array bat denik.',
+ 'APIException:UnrecognisedTypeCast' => 'Mota ezezaguna %s bihurketan \'%s\' aldagairako \'%s\' metodoan',
+ 'APIException:InvalidParameter' => 'Baliogabeko parametroa aurkitu da \'%s\'-rako \'%s\' metodoan.',
+ 'APIException:FunctionParseError' => '%s(%s)-(e)k errore bat izan du analisi sintaktikoan.',
+ 'APIException:FunctionNoReturn' => '%s(%s)-(e)k ez du baliorik itzuli.',
+ 'APIException:APIAuthenticationFailed' => 'Metodoaren abiarazteak API Autentifikazioan huts egin du',
+ 'APIException:UserAuthenticationFailed' => 'Metodoaren abiarazteak huts egin dut Erabiltzaile Autentifikazioan',
+ 'SecurityException:AuthTokenExpired' => 'Autentifikatze-tokena falta da, baliogabea da edo denbora dela-eta baliogabetua izan da.',
+ 'CallException:InvalidCallMethod' => '%s deitzeko \'%s\' erabili behar da',
+ 'APIException:MethodCallNotImplemented' => '\'%s\' deitzeko metodoa ez da inplementatu.',
+ 'APIException:FunctionDoesNotExist' => '\'%s\' metodoarentzat funtzioa ez da abiarazgarria',
+ 'APIException:AlgorithmNotSupported' => '\'%s\' algoritmoarentzat ez dago sostengurik edo desgaitua izan da.',
+ 'ConfigurationException:CacheDirNotSet' => '\'cache_path\' katxe karpeta ez da zehaztu.',
+ 'APIException:NotGetOrPost' => 'Eskaera metodoak GET edo POST izan behar du',
+ 'APIException:MissingAPIKey' => 'Ez dago API gakorik',
+ 'APIException:BadAPIKey' => 'API gako okerra',
+ 'APIException:MissingHmac' => 'X-Elgg-hmac goiburua falta da',
+ 'APIException:MissingHmacAlgo' => 'X-Elgg-hmac-algo goiburua falta da',
+ 'APIException:MissingTime' => 'X-Elgg-time goiburua falta da',
+ 'APIException:MissingNonce' => 'Ez da X-Elgg-nonce bururik',
+ 'APIException:TemporalDrift' => 'X-Elgg-time urrunegi dago iragan edo etorkizunean. Denboraldian errorea.',
+ 'APIException:NoQueryString' => 'Ez dago kontsulta katean daturik',
+ 'APIException:MissingPOSTHash' => 'X-Elgg-posthash goiburua falta da',
+ 'APIException:MissingPOSTAlgo' => 'X-Elgg-posthash_algo goiburua falta da',
+ 'APIException:MissingContentType' => 'Post datuaren eduki mota falta da',
+ 'SecurityException:InvalidPostHash' => 'POST datuaren hasha baliogabekoa da - %s espero zen baina %s jaso da.',
+ 'SecurityException:DupePacket' => 'Paketearen sinadura lehendik ikusita zegoen.',
+ 'SecurityException:InvalidAPIKey' => 'API gakoa falta da edo baliogabea da.',
+ 'NotImplementedException:CallMethodNotImplemented' => 'Ez dago \'%s\' deitzeko metodoarentzat euskarririk.',
+ 'NotImplementedException:XMLRPCMethodNotImplemented' => 'XML-RPC \'%s\' metodoarentzat ez dago euskarririk.',
+ 'InvalidParameterException:UnexpectedReturnFormat' => '\'%s\' metodoaren deiak espero ez zen balio bat itzuli du.',
+ 'CallException:NotRPCCall' => 'Ez dirudi deia XML-RPC dei egokia denik',
+ 'PluginException:NoPluginName' => 'Pluginaren izena ezin izan da aurkitu',
+ 'SecurityException:authenticationfailed' => 'Erabiltzailea ezin izan da autentifikatu',
+ 'CronException:unknownperiod' => '%s ez da epe ezaguna.',
+ 'SecurityException:deletedisablecurrentsite' => 'Ezin duzu orain ikusten ari zaren gunea ezabatu edo ezgaitu!',
+ 'RegistrationException:EmptyPassword' => 'Pasahitzaren eremuak ezin du hutsik egon',
+ 'RegistrationException:PasswordMismatch' => 'Pasahitzek bat etorri behar dute',
+ 'LoginException:BannedUser' => 'Gune honetara sartzea debekatua duzu eta ezin duzu saiorik hasi',
+ 'LoginException:UsernameFailure' => 'Ezin dugu saioa hasi. Egiaztatu zure erabiltzaile eta pasahitza, mesedez.',
+ 'LoginException:PasswordFailure' => 'Ezin dugu saioa hasi. Egiaztatu zure erabiltzaile eta pasahitza, mesedez.',
+ 'LoginException:AccountLocked' => 'Zure kontua kateatu egin da, saioa hasteko saiakera oker gehiegi egin dira.',
+ 'LoginException:ChangePasswordFailure' => 'Pashitzaren egiaztatzeak huts egin du.',
+ 'memcache:notinstalled' => 'PHP memcache modulua ez dago instalatua, php5-memcache instalatu behar duzu',
+ 'memcache:noservers' => 'Ez da memcache zerbitzaririk zehaztu. Mesedez, eman balio bat $CONFIG->memcache_servers aldagaiari',
+ 'memcache:versiontoolow' => 'Memcache-k, gutxienez %s bertsioa behar du funtzionatzeko eta zu %s bertsioa ari zara erabiltzen',
+ 'memcache:noaddserver' => 'Zerbitzari anitzen euskarria desgaitua dago, agian zure PECL memcache liburutegia eguneratu beharko duzu',
+ 'deprecatedfunction' => 'Oharra: Kodeak baztertutako \'%s\' funtzioa erabiltzen du eta ez da Elggen bertsio honekin bateragarria',
+ 'pageownerunavailable' => 'Oharra: %d orriaren jabea ez dago eskuragarri!',
+ 'viewfailure' => 'Barne akatsa gertatu da %s bistan',
+ 'changebookmark' => 'Mesedez, alda ezazu orri honen zure laster-marka',
+ 'noaccess' => 'Eduki hau ezabatu egin da, baliogabea da edo ez duzu berau ikusteko baimenik.',
+ 'error:missing_data' => 'Zure eskaeran daturen bat falta edo galdu da',
+ 'error:default' => 'Iepa... zerbaitek huts egin du.',
+ 'error:404' => 'Barkatu. Ezin izan dugu zuk eskatutako orria aurkitu.',
+ 'system.api.list' => 'Sistemako API dei erabilgarri guztiak zerrendatu.',
+ 'auth.gettoken' => 'API dei honek erabiltzaile autentikazio token bat lortzea ahalbidetzen du, etorkizunean egin daitezkeen API deietan autentikatzeko baliagarria. auth_token parametroa bezala bidali behar da',
+ 'name' => 'Bistaratuko den izena',
+ 'email' => 'Posta elektroniko helbidea',
+ 'username' => 'Erabiltzaile izena',
+ 'loginusername' => 'Erabiltzaile izena edo posta helbidea',
+ 'password' => 'Pasahitza',
+ 'passwordagain' => 'Pasahitza (berriro, egiaztatzeko)',
+ 'admin_option' => 'Erabiltzaile hau kudeatzaile egin?',
+ 'PRIVATE' => 'Pribatua',
+ 'LOGGED_IN' => 'Saioa hasi duten erabiltzaileak',
+ 'PUBLIC' => 'Publikoa',
+ 'access:friends:label' => 'Lagunak',
+ 'access' => 'Atzipena',
+ 'access:limited:label' => 'Mugatua',
+ 'access:help' => 'Atzipen maila',
+ 'dashboard' => 'Aginte mahaia',
+ 'dashboard:nowidgets' => 'Aginte panelean zuretzat interesgarriak diren eduki eta jardueren berri izan dezakezu.',
+ 'widgets:add' => 'Gehitu widgetak',
+ 'widgets:add:description' => 'Klik egin azpian dauden edozein widget botoietan orrira gehitu ahal izateko.',
+ 'widgets:position:fixed' => '(Orrian kokapen finkoa)',
+ 'widget:unavailable' => 'Dagoeneko widget hau gehitu duzu',
+ 'widget:numbertodisplay' => 'Bistaratuko diren ale kopurua',
+ 'widget:delete' => '%s Ezabatu',
+ 'widget:edit' => 'Widget hau pertsonailzatu',
+ 'widgets' => 'Widgetak',
+ 'widget' => 'Widget',
+ 'item:object:widget' => 'Widgetak',
+ 'widgets:save:success' => 'Widgeta ondo gorde da.',
+ 'widgets:save:failure' => 'Ezin izan dugu zure widgeta gorde. Saiatu berriz, mesedez.',
+ 'widgets:add:success' => 'Widgeta ondo gehitu da.',
+ 'widgets:add:failure' => 'Ezin izan dugu zure widgeta gehitu.',
+ 'widgets:move:failure' => 'Ezin izan dugu widget berriaren kokapena gorde.',
+ 'widgets:remove:failure' => 'Ezin izan da widget hau ezabatu',
+ 'group' => 'Taldea',
+ 'item:group' => 'Taldeak',
+ 'user' => 'Erabiltzailea',
+ 'item:user' => 'Erabiltzaileak',
+ 'friends' => 'Lagunak',
+ 'friends:yours' => 'Zure lagunak',
+ 'friends:owned' => '%s-(r)en lagunak',
+ 'friend:add' => 'Laguna gehitu',
+ 'friend:remove' => 'Laguna ezabatu',
+ 'friends:add:successful' => '%s lagun bezala gehitu duzu.',
+ 'friends:add:failure' => 'Ezin izan dugu %s lagun bezala gehitu. Saiatu berriro, mesedez.',
+ 'friends:remove:successful' => '%s zure lagunartetik ezabatu duzu.',
+ 'friends:remove:failure' => 'Ezin izan dugu %s zure lagununartetik ezabatu. Saiatu berriro, mesedez.',
+ 'friends:none' => 'Erabiltzaile honek ez du lagunik gehitu oraindik.',
+ 'friends:none:you' => 'Ez duzu oraindik lagunik gehitu.',
+ 'friends:none:found' => 'Ez da lagunik aurkitu.',
+ 'friends:of:none' => 'Inork ez du erabiltzaile hau lagun bezala gehitu oraindik.',
+ 'friends:of:none:you' => 'Inork ez zaitu oraindik lagun bezala gehitu. Hasi edukia sartzen eta osatu zure profila jendeak zu aurkitzeko!',
+ 'friends:of:owned' => '%s laguntzat duten pertsonak',
+ 'friends:of' => 'Honen lagunak:',
+ 'friends:collections' => 'Lagunen bildumak',
+ 'collections:add' => 'Bilduma berria',
+ 'friends:collections:add' => 'Lagun bilduma berria',
+ 'friends:addfriends' => 'Lagunak hautatu',
+ 'friends:collectionname' => 'Bildumaren izena',
+ 'friends:collectionfriends' => 'Lagunak bilduman',
+ 'friends:collectionedit' => 'Bilduma hau editatu',
+ 'friends:nocollections' => 'Ez duzu bildumarik oraindik.',
+ 'friends:collectiondeleted' => 'Zure bilduma ezabatu egin da.',
+ 'friends:collectiondeletefailed' => 'Ezin izan dugu bilduma ezabatu. Baimenik ez duzu edo beste arazoren bat gertatu da.',
+ 'friends:collectionadded' => 'Bilduma ondo sortu da',
+ 'friends:nocollectionname' => 'Bildumari izena eman behar diozu sortu baino lehen.',
+ 'friends:collections:members' => 'Bildumako kideak',
+ 'friends:collections:edit' => 'Bilduma editatu',
+ 'friends:collections:edited' => 'Gordetako bilduma',
+ 'friends:collection:edit_failed' => 'Ezin izan da bilduma gorde.',
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'avatar' => 'Avatar',
+ 'avatar:create' => 'Sortu zure avatarra',
+ 'avatar:edit' => 'Avatarra editatu',
+ 'avatar:preview' => 'Aurreikusi',
+ 'avatar:upload' => 'Kargatu avatar berria',
+ 'avatar:current' => 'Uneko avatarra',
+ 'avatar:remove' => 'Ezabatu zure avatarra eta erabili lehenetsitako ikonoa',
+ 'avatar:crop:title' => 'Avatarra mozteko tresna',
+ 'avatar:upload:instructions' => 'Zure avatarra gunean zehar erakusten da. Nahi bezainbeste alda dezakezu . (Onartutako fitxategi formatuak: GIF, JPG edo PNG)',
+ 'avatar:create:instructions' => 'Klik egin eta arrastratu azpiko laukitxoa avatarra zure gustura mozteko. Aurrebista eskuineko kaxain erakutsiko da. Aurreikuspenarekin ados zaudenean, klik egin \'Sortu zure avatarra\'. Moztutako avatar hau erabiliko da gunean zehar.',
+ 'avatar:upload:success' => 'Avatarra ongi ingo da',
+ 'avatar:upload:fail' => 'Avatar igoerak huts egin du',
+ 'avatar:resize:fail' => 'Avatarraren tamaina aldaketak huts egin du',
+ 'avatar:crop:success' => 'Avatarraren moztea ongi burutu da',
+ 'avatar:crop:fail' => 'Avatarraren mozteak huts egin du',
+ 'avatar:remove:success' => 'Avatarra ondo ezabatu da',
+ 'avatar:remove:fail' => 'Avatarra ezin izan da ezabatu',
+ 'profile:edit' => 'Profila editatu',
+ 'profile:aboutme' => 'Niri buruz',
+ 'profile:description' => 'Niri buruz',
+ 'profile:briefdescription' => 'Deskribapen laburra',
+ 'profile:location' => 'Kokapena',
+ 'profile:skills' => 'Trebetasunak',
+ 'profile:interests' => 'Zaletasunak',
+ 'profile:contactemail' => 'Harremanetarako eposta',
+ 'profile:phone' => 'Telefonoa',
+ 'profile:mobile' => 'Telefono mugikorra',
+ 'profile:website' => 'Webgunea',
+ 'profile:twitter' => 'Twitter erabiltzailea',
+ 'profile:saved' => 'Zure profila ongi gorde da.',
+ 'profile:field:text' => 'Testu laburra',
+ 'profile:field:longtext' => 'Testu luze eremua',
+ 'profile:field:tags' => 'Etiketak',
+ 'profile:field:url' => 'Web helbidea',
+ 'profile:field:email' => 'Eposta helbidea',
+ 'profile:field:location' => 'Kokapena',
+ 'profile:field:date' => 'Data',
+ 'admin:appearance:profile_fields' => 'Editatu Profil Eremuak',
+ 'profile:edit:default' => 'Editatu profil eremuak',
+ 'profile:label' => 'Profile etiketa',
+ 'profile:type' => 'Profil mota',
+ 'profile:editdefault:delete:fail' => 'Errorea gertatu da profileko eremu lehenetsia ezabatzean',
+ 'profile:editdefault:delete:success' => 'Profileko eremua ezabatu da',
+ 'profile:defaultprofile:reset' => 'Profileko eremuak sistemak lehenetsitako eremuekin berrezarri dira',
+ 'profile:resetdefault' => 'Lehenetsitako profila berrezarri',
+ 'profile:explainchangefields' => 'Profilaren eremuak zureak diren eremuekin ordeztu ditzakezu azpian dagoen datu-orria erabiliz.
+
+ Eman profil eremu berriari etiketa bat, adibidez, \'Talde gogokoena\', gero hautatu eremu mota (adib. testua, url, etiketak), eta klik egin \'Gehitu\' botoian. Eremuak ordenatzeko, arrastratu ezkerreko heldulekua erabiliz. Eremu etikea editatzeko - klik egin etiketaren testuan editagarri bihurtzeko.
+
+ Nahi duzunean, lehenetsitako profila ezarri dezakezu, baina zuk propio sortutako eremuen datuak galdutko dituzu.',
+ 'profile:editdefault:success' => 'Profil eremu berria gehitu da',
+ 'profile:editdefault:fail' => 'Lehenetsitako profila ezin izan da gorde',
+ 'profile:field_too_long' => 'Ezin izan da zure profil informazioa gorde "%s" sekzioa luzeegia delako.',
+ 'profile:noaccess' => 'Ez duzu baimenik profil hau editatzeko.',
+ 'feed:rss' => 'Orri honen RSS jarioa',
+ 'link:view' => 'Esteka ikusi',
+ 'link:view:all' => 'Guztia ikusi',
+ 'river' => 'Ibaia',
+ 'river:friend:user:default' => '%s eta %s lagunak dira orain',
+ 'river:update:user:avatar' => '%s-(e)k avatar berria du',
+ 'river:update:user:profile' => '%s-(e)k profila eguneratu du/dute',
+ 'river:noaccess' => 'Ez duzu baimenik ale hau ikusteko.',
+ 'river:posted:generic' => '%s-(e)k argitaratua',
+ 'riveritem:single:user' => 'erabiltzailea',
+ 'riveritem:plural:user' => 'erabiltzaile batzuk',
+ 'river:ingroup' => '%s taldean',
+ 'river:none' => 'Aktibitaterik ez',
+ 'river:update' => 'Eguneraketa honentzat: %s',
+ 'river:widget:title' => 'Aktibitatea',
+ 'river:widget:description' => 'Bistaratu azken aktibitatea',
+ 'river:widget:type' => 'Aktibitate mota',
+ 'river:widgets:friends' => 'Lagunen aktibitatea',
+ 'river:widgets:all' => 'Guneko aktibitate guztia',
+ 'notifications:usersettings' => 'Jakinarazpen ezarpenak',
+ 'notifications:methods' => 'Zehaztu zein metodo baimendu nahi dituzun.',
+ 'notification:method:email' => 'Email',
+ 'notifications:usersettings:save:ok' => 'Zure jakinarazpen ezarpenak ondo gorde dira.',
+ 'notifications:usersettings:save:fail' => 'Arazo bat egon da zure jakinarazpen ezarpenak gordetzerakoan.',
+ 'user.notification.get' => 'Erabiltzaile konkretu baten jakinarazpen ezarpenak lortzen ditu.',
+ 'user.notification.set' => 'Erabiltzaile konkretu baten jakinarazpen ezarpenak ezartzen ditu.',
+ 'search' => 'Bilatu',
+ 'searchtitle' => 'Bilaketa: %s',
+ 'users:searchtitle' => 'Erabiltzaileak bilatzen: %s',
+ 'groups:searchtitle' => 'Taldeak bilatzen: %s',
+ 'advancedsearchtitle' => '%s bilaketak %s emaitza lortu ditu',
+ 'notfound' => 'Ez da emaitzik aurkitu.',
+ 'next' => 'Hurrengoa',
+ 'previous' => 'Aurrekoa',
+ 'viewtype:change' => 'Aldatu zerrenda mota',
+ 'viewtype:list' => 'Zerrenda ikuspegia',
+ 'viewtype:gallery' => 'Galeria',
+ 'tag:search:startblurb' => '\'%s\' etiketa duten elementuak:',
+ 'user:search:startblurb' => '\'%s\' duten erabiltzaileak:',
+ 'user:search:finishblurb' => 'Gehiago ikusteko, klik egin hemen.',
+ 'group:search:startblurb' => '%s-(r)ekin bat datozen taldeak:',
+ 'group:search:finishblurb' => 'Gehiago ikusteko, klikatu hemen',
+ 'search:go' => 'Joan',
+ 'userpicker:only_friends' => 'Lagunak bakarrik',
+ 'account' => 'Kontua',
+ 'settings' => 'Ezarpenak',
+ 'tools' => 'Tresnak',
+ 'settings:edit' => 'Editatu ezarpenak',
+ 'register' => 'Erregistratu',
+ 'registerok' => 'Ondo erregistratu zara %s-(e)n.',
+ 'registerbad' => 'Zure registroak huts egin du errore ezezagun bat medio.',
+ 'registerdisabled' => 'Sistema kudeatzaileak erregistroa desgaitu egin du',
+ 'register:fields' => 'Eremu guztiak derrigorrezkoak dira',
+ 'registration:notemail' => 'Zure posta helbideak ez du helbide on baten itxurarik.',
+ 'registration:userexists' => 'Ba da horrelako erabiltzaile izenik',
+ 'registration:usernametooshort' => 'Erabiltzaile izenak gutxienez %u karaktere luze izan behar ditu.',
+ 'registration:usernametoolong' => 'Zure erabiltzaile izena luzeegia da. Gehienez, %u karaktere luze izan daiteke.',
+ 'registration:passwordtooshort' => 'Pasahitzak gutxienez %u karaktere luze izan behar ditu.',
+ 'registration:dupeemail' => 'Posta elektroniko helbide hau erregistratuta dago jada.',
+ 'registration:invalidchars' => 'Barkatu, zure erabiltzaile izenak egokia ez den %s karakterea du. Hauek dira erabili ezin diren karaktereak: %s',
+ 'registration:emailnotvalid' => 'Barkatu, sartutako posta elektronikoa ez da zuzena sistema honetan',
+ 'registration:passwordnotvalid' => 'Barkatu, sartutako pasahitza ez da zuzena sistema honetan',
+ 'registration:usernamenotvalid' => 'Barkatu, sartutako erabiltzaile izena ez da zuzena sistema honetan',
+ 'adduser' => 'Erabiltzaile Gehitu',
+ 'adduser:ok' => 'Erabiltzaile berria ondo gehitu duzu.',
+ 'adduser:bad' => 'Ezin izan da erabiltzaile berria sortu.',
+ 'user:set:name' => 'Kontuaren izenaren ezarpenak',
+ 'user:name:label' => 'Zure izena',
+ 'user:name:success' => 'Zure izena ongi aldatu da sisteman.',
+ 'user:name:fail' => 'Ezin izan da zure izena sisteman aldatu. Baieztatu zure izena ez dela oso luzea eta berriz zaiatu.',
+ 'user:set:password' => 'Kontuaren pasahitza',
+ 'user:current_password:label' => 'Indarrean dagoen pasahitza',
+ 'user:password:label' => 'Zure pasahitz berria',
+ 'user:password2:label' => 'Zure pasahitza berria berriz',
+ 'user:password:success' => 'Pasahitza aldatu da',
+ 'user:password:fail' => 'Ezin izan da zure pasahitza sisteman aldatu.',
+ 'user:password:fail:notsame' => 'Bi pasahitzak ez dira berdinak!',
+ 'user:password:fail:tooshort' => 'Pasahitza laburregia da!',
+ 'user:password:fail:incorrect_current_password' => 'Sartutako indarreko pasahitza ez da zuzena.',
+ 'user:resetpassword:unknown_user' => 'Erabiltzaile okerra.',
+ 'user:resetpassword:reset_password_confirm' => 'Pasahitza berrezartzean, posta mezu bat bidaliko da pasahitza berriarekin zure erregistratutako posta helbidera.',
+ 'user:set:language' => 'Hizkuntza ezarpenak',
+ 'user:language:label' => 'Zure hizkuntza',
+ 'user:language:success' => 'Zure hizkuntza ezarpenak eguneratu dira.',
+ 'user:language:fail' => 'Zure hizkuntza ezarpenak ezin izan dira gorde.',
+ 'user:username:notfound' => '%s erabiltzailea ezin izan da aurkitu.',
+ 'user:password:lost' => 'Pasahitza galdu dut',
+ 'user:password:resetreq:success' => 'Pasahitz berriaren eskaera ondo burutu da eta mezua ere bidali da',
+ 'user:password:resetreq:fail' => 'Ezin izan da pasahitz berri baten eskaera egin.',
+ 'user:password:text' => 'Pasahitz berria sortzeko, sartu azpian zure erabiltzaile izena eta klik egin botoian.',
+ 'user:persistent' => 'Gogora nazazu',
+ 'walled_garden:welcome' => 'Ongi etorri',
+ 'menu:page:header:administer' => 'Kudeatu',
+ 'menu:page:header:configure' => 'Ezarri',
+ 'menu:page:header:develop' => 'Garatu',
+ 'menu:page:header:default' => 'Beste batzuk',
+ 'admin:view_site' => 'Gunera joan',
+ 'admin:loggedin' => '%s bezala hasi duzu saioa',
+ 'admin:menu' => 'Menua',
+ 'admin:configuration:success' => 'Ezarpenak gorde dira.',
+ 'admin:configuration:fail' => 'Ezin izan dira zure ezarpenak gorde.',
+ 'admin:configuration:dataroot:relative_path' => 'Ezin izan da %s datu-erro bezala ezarri ez delako bide absolutua.',
+ 'admin:unknown_section' => 'Balio gabeko Admin Sekzioa.',
+ 'admin' => 'Administrazioa',
+ 'admin:description' => 'Administrazio paneletik sistemaren ezaugarriak kontrola ditzakezu, erabiltzaile-kudeaketatik pluginen ezarpenetaraino. Hasteko, hautatu azpiko aukeraren bat.',
+ 'admin:statistics' => 'Estatistikak',
+ 'admin:statistics:overview' => 'Laburpena',
+ 'admin:statistics:server' => 'Zerbitzariaren Xehetasunak',
+ 'admin:appearance' => 'Itxura',
+ 'admin:administer_utilities' => 'Tresnak',
+ 'admin:develop_utilities' => 'Tresnak',
+ 'admin:users' => 'Erabiltzaileak',
+ 'admin:users:online' => 'Orain Online',
+ 'admin:users:newest' => 'Berrienak',
+ 'admin:users:add' => 'Gehitu Erabiltzaile Berria',
+ 'admin:users:description' => 'Administrazio panel honetan zure guneko erabiltzaileen ezarpenak kontrola ditzakezu. Hasteko, hautatu azpiko aukeraren bat.',
+ 'admin:users:adduser:label' => 'Klik egin hemen erabiltzaile berria gehitzeko...',
+ 'admin:users:opt:linktext' => 'Erabiltzaileak konfiguratu...',
+ 'admin:users:opt:description' => 'Konfiguratu erabiltzaile eta kontu informazioa.',
+ 'admin:users:find' => 'Bilatu',
+ 'admin:settings' => 'Ezarpenak',
+ 'admin:settings:basic' => 'Oinarrizko Ezarpenak',
+ 'admin:settings:advanced' => 'Ezarpen Aurreratuak',
+ 'admin:site:description' => 'Administrazio panel honek gunearen ezarpen orokorrak kontrolatzeko balio du. Hasteko, hautatu azpiko aukeraren bat.',
+ 'admin:site:opt:linktext' => 'Gunea konfiguratu...',
+ 'admin:site:access:warning' => 'Sarbide ezarpenen aldaketak etorkizunean sortutako edukiei bakarrik eragingo die.',
+ 'admin:dashboard' => 'Aginte mahaia',
+ 'admin:widget:online_users' => 'Erabitlzaileak online',
+ 'admin:widget:online_users:help' => 'Gunean dauden erabiltzaileak zerrendatzen ditu',
+ 'admin:widget:new_users' => 'Erabiltzaile berriak',
+ 'admin:widget:new_users:help' => 'Zerendatu erabiltzaile berrienak',
+ 'admin:widget:content_stats' => 'Eduki estatistikak',
+ 'admin:widget:content_stats:help' => 'Mantendu zure erabiltzaileak sortutako edukien arrastoa',
+ 'widget:content_stats:type' => 'Eduki mota',
+ 'widget:content_stats:number' => 'Kopurua',
+ 'admin:widget:admin_welcome' => 'Ongi etorri',
+ 'admin:widget:admin_welcome:help' => 'Sarrera laburra Elgg-en kudeaketa gunera',
+ 'admin:widget:admin_welcome:intro' => 'Ongi etorri Elgg-era! Orain kudeaketa mahaigainean zaude. Gunean zer gertatzen den jakiteko baliagarria da.',
+ 'admin:widget:admin_welcome:admin_overview' => 'Kudeaketa guneko nabigazioa eskuin aldean dagoen menuak eskaintzen du. Hiru sekziotan antolatua dago:
+ <dl>
+ <dt>Kudeatu</dt><dd>Eguneroko atazak; sortutako edukiak gainbegiratzea, online nor dagoen ikustea eta estatistikak begiratzea.</dd>
+ <dt>Ezarri</dt><dd>Noizbehinka burutzen diren lanak; gunearen izena ezartzea edo plugin bat aktibatzea.</dd>
+ <dt>Garatu</dt><dd>Pluginak garatzen edo itxurak diseinatzen dituzten garatzaileentzat. (Developer plugin-a behar da.)</dd>
+ </dl>',
+ 'admin:widget:admin_welcome:outro' => '<br />Begiratu itzazu oinean eskaintzen zaizkizun baliabideak eta eskerrik asko Elgg erabiltzeagatik!',
+ 'admin:widget:control_panel' => 'Aginte mahaiga',
+ 'admin:widget:control_panel:help' => 'Sarrera erraza eskaintzen du kontrol erabilienetara',
+ 'admin:cache:flush' => 'Katxeak hustu',
+ 'admin:cache:flushed' => 'Gunearen katxeak hustu dira',
+ 'admin:footer:faq' => 'Kudeaketa FAQ-ak',
+ 'admin:footer:manual' => 'Kudeaketa Eskuliburua',
+ 'admin:footer:community_forums' => 'Elgg Komunitate Foroak',
+ 'admin:footer:blog' => 'Elgg Bloga',
+ 'admin:plugins:category:all' => 'Plugin guztiak',
+ 'admin:plugins:category:active' => 'Plugin aktibatuak',
+ 'admin:plugins:category:inactive' => 'Plugin desaktibatuak',
+ 'admin:plugins:category:admin' => 'Admin',
+ 'admin:plugins:category:bundled' => 'Bildua',
+ 'admin:plugins:category:nonbundled' => 'Ez bildua',
+ 'admin:plugins:category:content' => 'Edukia',
+ 'admin:plugins:category:development' => 'Garapena',
+ 'admin:plugins:category:enhancement' => 'Hobekuntzak',
+ 'admin:plugins:category:api' => 'Zerbitzua/API',
+ 'admin:plugins:category:communication' => 'Komunikazioa',
+ 'admin:plugins:category:security' => 'Segurtasun eta Spam-a',
+ 'admin:plugins:category:social' => 'Soziala',
+ 'admin:plugins:category:multimedia' => 'Multimedia',
+ 'admin:plugins:category:theme' => 'Gaiak',
+ 'admin:plugins:category:widget' => 'Widgetak',
+ 'admin:plugins:category:utility' => 'Tresnak',
+ 'admin:plugins:sort:priority' => 'Lehentasuna',
+ 'admin:plugins:sort:alpha' => 'Alfabetikoki',
+ 'admin:plugins:sort:date' => 'Berriena',
+ 'admin:plugins:markdown:unknown_plugin' => 'Plugin ezezaguna.',
+ 'admin:plugins:markdown:unknown_file' => 'Fitxategi ezezaguna.',
+ 'admin:notices:could_not_delete' => 'Ezin izan da oharra ezabatu.',
+ 'admin:options' => 'Kudeaketa aukerak',
+ 'plugins:disabled' => 'Pluginak ez dira kargatu "disabled" izena duen fitxategi bat dagoelako mod karpetany.',
+ 'plugins:settings:save:ok' => '%s pluginaren ezarpenak ondo gorde dira.',
+ 'plugins:settings:save:fail' => 'Arazo bat egon da %s pluginaren ezarpenak gordetzerakoan.',
+ 'plugins:usersettings:save:ok' => '%s pluginaren erabiltzaile-ezarpenak ondo gorde dira.',
+ 'plugins:usersettings:save:fail' => 'Arazo bat egon da %s pluginaren erabiltzaile-ezarpenak gordetzerakoan.',
+ 'item:object:plugin' => 'Pluginak',
+ 'admin:plugins' => 'Pluginak',
+ 'admin:plugins:activate_all' => 'Denak Aktibatu',
+ 'admin:plugins:deactivate_all' => 'Dena Desaktibatu',
+ 'admin:plugins:activate' => 'Aktibatu',
+ 'admin:plugins:deactivate' => 'Desaktibatu',
+ 'admin:plugins:description' => 'Administrazio panel honetatik gunean instalatuta dauden tresnak kontrolatu eta konfiguratu ditzakezu.',
+ 'admin:plugins:opt:linktext' => 'Tresnak konfiguratu...',
+ 'admin:plugins:opt:description' => 'Gunean instalatuta dauden tresnak konfiguratu. ',
+ 'admin:plugins:label:author' => 'Egilea',
+ 'admin:plugins:label:copyright' => 'Copyright',
+ 'admin:plugins:label:categories' => 'Kategoriak',
+ 'admin:plugins:label:licence' => 'Lizentzia',
+ 'admin:plugins:label:website' => 'URL',
+ 'admin:plugins:label:moreinfo' => 'informazio gehiago',
+ 'admin:plugins:label:version' => 'Bertsioa',
+ 'admin:plugins:label:location' => 'Kokapena',
+ 'admin:plugins:label:dependencies' => 'Mendekotasunak',
+ 'admin:plugins:warning:elgg_version_unknown' => 'Plugin honek manifestu fitxategi zaharra darabil eta ez du Elggen bertsio bateragarririk zehazten. Ziurenik ez du funtzionatuko!',
+ 'admin:plugins:warning:unmet_dependencies' => 'Ase ezin diren mendekotasunak ditu plugin honek eta ezin da aktibatu. Egiaztatu mendekotasunak informazio gehiago erabiliz.',
+ 'admin:plugins:warning:invalid' => '%s ez da Elgg plugin egokia. Bisitatu <a href="http://docs.elgg.org/Invalid_Plugin">Elgg dokumentazioa</a> arazoak konpontzeko aholkuak irakurtzeko.',
+ 'admin:plugins:cannot_activate' => 'ezin izan da aktibatu',
+ 'admin:plugins:set_priority:yes' => 'Birordenatua %s.',
+ 'admin:plugins:set_priority:no' => 'Ezin izan da %s birordenatu.',
+ 'admin:plugins:set_priority:no_with_msg' => 'Ezin izan da %s birordenatu. Akatsa: %s',
+ 'admin:plugins:deactivate:yes' => 'Desaktibatua %s.',
+ 'admin:plugins:deactivate:no' => 'Ezin izan da %s desaktibatu.',
+ 'admin:plugins:deactivate:no_with_msg' => 'Ezin izan da %s desaktibatu. Akatsa: %s',
+ 'admin:plugins:activate:yes' => 'Aktibatua %s.',
+ 'admin:plugins:activate:no' => 'Ezin izan da %s aktibatu.',
+ 'admin:plugins:activate:no_with_msg' => 'Ezin izan da %s aktibatu. Akatsa: %s',
+ 'admin:plugins:categories:all' => 'Kategoria guztiak',
+ 'admin:plugins:plugin_website' => 'Pluginaren webgunea',
+ 'admin:plugins:author' => '%s',
+ 'admin:plugins:version' => 'Bertsioa %s',
+ 'admin:plugin_settings' => 'Plugin Ezarpenak',
+ 'admin:plugins:warning:unmet_dependencies_active' => 'Plugin hau aktibatu da baina asetu ez diren mendekotasunak ditu. Arazoak izan ditzakezus. Bisitatu "infor gehiago" azpian xehetasunetarako.',
+ 'admin:plugins:dependencies:type' => 'Mota',
+ 'admin:plugins:dependencies:name' => 'Izena',
+ 'admin:plugins:dependencies:expected_value' => 'Espero den balioa',
+ 'admin:plugins:dependencies:local_value' => 'Indarrean den balioa',
+ 'admin:plugins:dependencies:comment' => 'Iruzkina',
+ 'admin:statistics:description' => 'Hau gunearen estatistiken ikuspegi orokor bat da. Estatistikak xehetasun gehiagorekin behar badituzu, badago kudeaketa funtzionalitate profesionala eskuragarri.',
+ 'admin:statistics:opt:description' => 'Ikusi zure gunean dauden erabiltzaile eta objektuei buruzko estatistikak.',
+ 'admin:statistics:opt:linktext' => 'Ikusi estatistikak...',
+ 'admin:statistics:label:basic' => 'Gunearen oinarrizko estatistikak',
+ 'admin:statistics:label:numentities' => 'Guneko entitateak',
+ 'admin:statistics:label:numusers' => 'Erabiltzaile kopurua',
+ 'admin:statistics:label:numonline' => 'Online dauden erabiltzaile kopurua',
+ 'admin:statistics:label:onlineusers' => 'Orain online dauden erabiltzaileak',
+ 'admin:statistics:label:version' => 'Elgg bertsioa',
+ 'admin:statistics:label:version:release' => 'Argitalpena',
+ 'admin:statistics:label:version:version' => 'Bertsioa',
+ 'admin:server:label:php' => 'PHP',
+ 'admin:server:label:web_server' => 'Web Zerbitzaria',
+ 'admin:server:label:server' => 'Zerbitzaria',
+ 'admin:server:label:log_location' => 'Log Kokapena',
+ 'admin:server:label:php_version' => 'PHP bertsioa',
+ 'admin:server:label:php_ini' => 'PHP ini fitxategiaren kokapena',
+ 'admin:server:label:php_log' => 'PHP Loga',
+ 'admin:server:label:mem_avail' => 'Memoria erabilgarria',
+ 'admin:server:label:mem_used' => 'Erabilitako memoria',
+ 'admin:server:error_log' => 'Web zerbitzariaren errore loga',
+ 'admin:server:label:post_max_size' => 'POST gehienezko tamaina',
+ 'admin:server:label:upload_max_filesize' => 'Igotzeko gehienezko tamaina',
+ 'admin:server:warning:post_max_too_small' => '(Oharra: post_max_size balioa hau baino handiago izan behar da tamaina honetako igoerak egin ahal izateko)',
+ 'admin:user:label:search' => 'Bilatu erabiltzaileak:',
+ 'admin:user:label:searchbutton' => 'Bilaketa',
+ 'admin:user:ban:no' => 'Ezin da erabiltzailea debekatu',
+ 'admin:user:ban:yes' => 'Erabiltzailea debekatu da.',
+ 'admin:user:self:ban:no' => 'Ezin duzu zure burua debekatu',
+ 'admin:user:unban:no' => 'Ezin zaio debekua kendu erabiltzaileari',
+ 'admin:user:unban:yes' => 'Debekua kendu zaio erabiltzaileari.',
+ 'admin:user:delete:no' => 'Ezin da erabiltzailea ezabatu',
+ 'admin:user:delete:yes' => '%s Erabiltzailea ezabatu da',
+ 'admin:user:self:delete:no' => 'Ezin duzu zure burua ezabatu',
+ 'admin:user:resetpassword:yes' => 'Pasahitza berrasia, erabiltzailea jakinaren gainean.',
+ 'admin:user:resetpassword:no' => 'Ezin izan da pasahitza berrasi.',
+ 'admin:user:makeadmin:yes' => 'Erabiltzailea orain kudeatzailea da.',
+ 'admin:user:makeadmin:no' => 'Ezin izan dugu erabiltzailea kudeatzaile bihurtu.',
+ 'admin:user:removeadmin:yes' => 'Erabiltzaileak kudeatzaile izateari utzi dio.',
+ 'admin:user:removeadmin:no' => 'Ezin dira erabiltzaile honen kudeatzaile baimenak kendu.',
+ 'admin:user:self:removeadmin:no' => 'Ezin dituzu zureak propio diren kudeaketa baimenak ezabatu.',
+ 'admin:appearance:menu_items' => 'Menu Aleak',
+ 'admin:menu_items:configure' => 'Ezarri menu nagusiaren aleak',
+ 'admin:menu_items:description' => 'Hautatu zein menu item erakutsi nahi dituzun esteka nabarmen gisa. Erabiltzen ez diren itemak "Gehiago" bezala gehituko dira zerrendaren amaieran.',
+ 'admin:menu_items:hide_toolbar_entries' => 'Tresna-barra menutik estekak ezabatu?',
+ 'admin:menu_items:saved' => 'Menu itemak gorde dira.',
+ 'admin:add_menu_item' => 'Gehitu menu item pertsonalizatua',
+ 'admin:add_menu_item:description' => 'Bete bistaratzeko izena eta URLa zure nabigazio menuari item pertsonalizatuak gehitzeko.',
+ 'admin:appearance:default_widgets' => 'Widget Lehenetsiak',
+ 'admin:default_widgets:unknown_type' => 'Widget mota ezezaguna',
+ 'admin:default_widgets:instructions' => 'Gehitu, ezabau, kokatu eta konfiguratu hautatutako widget orriko lehenetsitako widgetak. Aldaketok gunearen erabiltzaile berriak bakarrik eragingo ditu.',
+ 'usersettings:description' => 'Erabiltzailearen ezarpenen paneletik ezarpen pertsonal guztian kudeatu ditzakezu, erabiltzaile-kudeaketatik pluginen ezarpenetaraino. Hasteko, hautatu azpiko aukeraren bat.',
+ 'usersettings:statistics' => 'Zure estatistikak',
+ 'usersettings:statistics:opt:description' => 'Ikusi zure guneko erabiltzaile eta objektuei buruzko estatiskikak.',
+ 'usersettings:statistics:opt:linktext' => 'Kontuaren estatistikak',
+ 'usersettings:user' => 'Zure ezarpenak',
+ 'usersettings:user:opt:description' => 'Erabiltzailearen ezarpenak kontrolatu ditzakezu honekin.',
+ 'usersettings:user:opt:linktext' => 'Zure ezarpenak aldatu',
+ 'usersettings:plugins' => 'Tresnak',
+ 'usersettings:plugins:opt:description' => 'Konfiguratu aktibatuta dituzun tresnen ezarpenak (baleude).',
+ 'usersettings:plugins:opt:linktext' => 'Zure tresnak konfiguratu',
+ 'usersettings:plugins:description' => 'Panel honek kudeatzaileak instalatutako tresnen ezarpen pertsonalak kontrolatu eta konfiguratzeko balio du.',
+ 'usersettings:statistics:label:numentities' => 'Zure edukia',
+ 'usersettings:statistics:yourdetails' => 'Zure xehetasunak',
+ 'usersettings:statistics:label:name' => 'Izen osoa',
+ 'usersettings:statistics:label:email' => 'Posta elektronikoa',
+ 'usersettings:statistics:label:membersince' => 'Kidea noiztik:',
+ 'usersettings:statistics:label:lastlogin' => 'Azkenengoz saioa hasi du',
+ 'river:all' => 'Guneko Aktibitate Guztia',
+ 'river:mine' => 'Nire Aktibitatea',
+ 'river:friends' => 'Lagunen Aktibitatea',
+ 'river:select' => 'Erakutsi %s',
+ 'river:comments:more' => '+%u gehiago',
+ 'river:generic_comment' => 'Iruzkindua hemen %s %s',
+ 'friends:widget:description' => 'Zure lagunetako batzuk bistaratzen ditu.',
+ 'friends:num_display' => 'Bistaratuko diren lagun kopurua',
+ 'friends:icon_size' => 'Ikonoaren tamaina',
+ 'friends:tiny' => 'oso txikia',
+ 'friends:small' => 'txikia',
+ 'save' => 'Gorde',
+ 'reset' => 'Berrezarri',
+ 'publish' => 'Argitaratu',
+ 'cancel' => 'Utzi',
+ 'saving' => 'Gordetzen ...',
+ 'update' => 'Eguneratu',
+ 'preview' => 'Aurreikusi',
+ 'edit' => 'Editatu',
+ 'delete' => 'Ezabatu',
+ 'accept' => 'Onartu',
+ 'load' => 'Kargatu',
+ 'upload' => 'Igo',
+ 'ban' => 'Debekatu',
+ 'unban' => 'Debekua kendu',
+ 'banned' => 'Debekatua',
+ 'enable' => 'Gaitu',
+ 'disable' => 'Ezgaitu',
+ 'request' => 'Eskaera',
+ 'complete' => 'Osatua',
+ 'open' => 'Ireki',
+ 'close' => 'Itxi',
+ 'reply' => 'Erantzun',
+ 'more' => 'Gehiago',
+ 'comments' => 'Iruzkinak',
+ 'import' => 'Inportatu',
+ 'export' => 'Esportatu',
+ 'untitled' => 'Izengabea',
+ 'help' => 'Laguntza',
+ 'send' => 'Bidali',
+ 'post' => 'Bidali',
+ 'submit' => 'Bidali',
+ 'comment' => 'Iruzkina',
+ 'upgrade' => 'Eguneratu',
+ 'sort' => 'Ordenatu',
+ 'filter' => 'Iragazi',
+ 'new' => 'Berria',
+ 'add' => 'Gehitu',
+ 'create' => 'Sortu',
+ 'remove' => 'Ezabatu',
+ 'revert' => 'Leheneratu',
+ 'site' => 'Gunea',
+ 'activity' => 'Jarduera',
+ 'members' => 'Kideak',
+ 'up' => 'Gora',
+ 'down' => 'Behera',
+ 'top' => 'Goian',
+ 'bottom' => 'Behean',
+ 'invite' => 'Gonbidatu',
+ 'resetpassword' => 'Pasahitza berrasi',
+ 'makeadmin' => 'Kudeatzaile bezala jarri',
+ 'removeadmin' => 'Kudeatzaile izatetik kendu',
+ 'option:yes' => 'Bai',
+ 'option:no' => 'Ez',
+ 'unknown' => 'Ezezaguna',
+ 'active' => 'Aktibo',
+ 'total' => 'Guztira',
+ 'learnmore' => 'Egin klik hemen gehiago ikasteko.',
+ 'content' => 'edukia',
+ 'content:latest' => 'Azken jarduera',
+ 'content:latest:blurb' => 'Bestela, egin klik hemen guneko edukirik berriena ikusteko.',
+ 'link:text' => 'esteka ikusi',
+ 'question:areyousure' => 'Ziur zaude?',
+ 'title' => 'Izenburua',
+ 'description' => 'Deskribapena',
+ 'tags' => 'Etiketak',
+ 'spotlight' => 'Fokua',
+ 'all' => 'Guztiak',
+ 'mine' => 'Nireak',
+ 'by' => 'nork:',
+ 'none' => 'ezer',
+ 'annotations' => 'Oharpenak',
+ 'relationships' => 'Erlazioak',
+ 'metadata' => 'Metadatuak',
+ 'tagcloud' => 'Etiketa lainoa',
+ 'tagcloud:allsitetags' => 'Gune guztiko etiketak',
+ 'on' => '-k, hemen :',
+ 'off' => 'Itzalita',
+ 'edit:this' => 'Hau editatu',
+ 'delete:this' => 'Hau ezabatu',
+ 'comment:this' => 'Hau iruzkindu',
+ 'deleteconfirm' => 'Ziur item hau ezabatu nahi duzula?',
+ 'deleteconfirm:plural' => 'Ziur item hauek ezabatu nahi dituzula?',
+ 'fileexists' => 'Fitxategia igo da. Ordezteko, aukeratu azpian:',
+ 'useradd:subject' => 'Erabiltzaile kontua sortu da',
+ 'useradd:body' => '
+%s,
+
+Zure erabiltzaile kontua sortu da %s-(e)n. Sartzeko, bisitatu:
+
+%s
+
+Erabiltzaile eta pasahitz hauekin sartu:
+
+Erabiltzailea: %s
+Pasahitza: %s
+
+Sartu ondoren, pasahitza aldatzea gomendatzen dizugu.
+',
+ 'systemmessages:dismiss' => 'egin klik alde batera uzteko',
+ 'importsuccess' => 'Datuak ondo inportatu dira',
+ 'importfail' => 'OpenDD datu inportazioak huts egin du.',
+ 'friendlytime:justnow' => 'oraintxe',
+ 'friendlytime:minutes' => 'orain dela %s minutu',
+ 'friendlytime:minutes:singular' => 'orain dela minutu bat',
+ 'friendlytime:hours' => 'orain dela %s ordu',
+ 'friendlytime:hours:singular' => 'orain dela ordu bat',
+ 'friendlytime:days' => 'orain dela %s egun',
+ 'friendlytime:days:singular' => 'atzo',
+ 'friendlytime:date_format' => 'j F Y @ g:ia',
+ 'date:month:01' => 'Urtarrila %s',
+ 'date:month:02' => 'Otsaila %s',
+ 'date:month:03' => 'Martxoa %s',
+ 'date:month:04' => 'Apirila %s',
+ 'date:month:05' => 'Maiatza %s',
+ 'date:month:06' => 'Ekaina %s',
+ 'date:month:07' => 'Uztaila %s',
+ 'date:month:08' => 'Abuztua %s',
+ 'date:month:09' => 'Iraila %s',
+ 'date:month:10' => 'Urria %s',
+ 'date:month:11' => 'Azaroa %s',
+ 'date:month:12' => 'Abendua %s',
+ 'installation:sitename' => 'Gunearen izena:',
+ 'installation:sitedescription' => 'Gunearen deskribapen laburra (aukeran):',
+ 'installation:wwwroot' => 'Gunearen URLa:',
+ 'installation:path' => 'Elgg instalazio karpetaren bide osoa:',
+ 'installation:dataroot' => 'Datu karpetaren bide osoa:',
+ 'installation:dataroot:warning' => 'Karpeta hau eskuz sortu behar duzu. Elgg instalazioaren karpetatik kanpo egon beharko litzateke.',
+ 'installation:sitepermissions' => 'Sarbide baimen lehenetsiak:',
+ 'installation:language' => 'Gunearen lehenetsitako hizkuntza:',
+ 'installation:debug' => 'Arazketa moduak informazio gehigarria eskaintzen du akats-diagnostikoak egiteko. Sistema moteldu dezakeenez, arazoak izatekotan bakarrik erabili:',
+ 'installation:debug:none' => 'Desaktibatu arazketa modua (gomendatua)',
+ 'installation:debug:error' => 'Errore larriak bakarrik bistaratu',
+ 'installation:debug:warning' => 'Errore eta oharrak bistaratu',
+ 'installation:debug:notice' => 'Errore guztiak gorde, abisu eta oharrak',
+ 'installation:registration:description' => 'Erebiltzaileen erregistroa baimendua dago modu lehenetsian. Hau desaktibatu ez baduzu nahi erabiltzaile berriak euren kasa erregistratzerik.',
+ 'installation:registration:label' => 'Baimendu erabiltzaile berrien erregistroa',
+ 'installation:walled_garden:description' => 'Baimendu guneak sare pribatu bezala lan egitea. Saioa hasi ez duten erabiltzaileak ez dira gai izango publiko bezala markatu ez diren orriak ikusten.',
+ 'installation:walled_garden:label' => 'Mugatu orriak saioa hasi duten erabiltzaileentzat',
+ 'installation:httpslogin' => 'Hau aktibatu saio hasiera HTTPS bidez burutzeko. Https gaitua izan behar duzu zure zerbitzarian.',
+ 'installation:httpslogin:label' => 'HTTPS sarbidea aktibatu',
+ 'installation:view' => 'Sartu zure guneko bista lehenetsia izango dena edo utzi hutsik lehenetsitako bista erabiltzeko (zalantzarik baduzu, utzi hutsik):',
+ 'installation:siteemail' => 'Gunearen posta elektroniko helbidea (sistemak mezuak bidaltzean erabiliko dena):',
+ 'installation:disableapi' => 'Elggek web zerbitzuak sortzeko APIa eskaintzen du, beste aplikazio batzuk zure gunearekin harremanetan jartzeko.',
+ 'installation:disableapi:label' => 'Aktibatu Elggen web zerbitzu APIa',
+ 'installation:allow_user_default_access:description' => 'Markatzen baduzu, erabiltzaile bakoitzak bere lehenetsitako sarbide baimena ezartzeko gauza izango da, sistemaren lehenetsitako sarbide maila gainidatziz.',
+ 'installation:allow_user_default_access:label' => 'Aktibatu erabiltzaileen sarbide maila lehenetsia',
+ 'installation:simplecache:description' => 'Simple cache-ak errendimendua hobetzen du, eduki estatikoa, zenbait CSS eta Javascript fitxategi katxeatuz. Komenigarria da gaitua izatea.',
+ 'installation:simplecache:label' => 'Simple cache erabili (gomendatua)',
+ 'installation:systemcache:description' => 'System cache-k Elggen motorearen karga denbora gutxitu egiten du, datuak fitxategietan katxeatuz.',
+ 'installation:systemcache:label' => 'Erabili system cache (gomendatua)',
+ 'upgrading' => 'Eguneratzen...',
+ 'upgrade:db' => 'Zure datu basea eguneratu da.',
+ 'upgrade:core' => 'Zure Elgg instalazioa eguneratu da.',
+ 'upgrade:unable_to_upgrade' => 'Ezin izan da eguneratu.',
+ 'upgrade:unable_to_upgrade_info' => 'Instalazio hau ezin izan da eguneratu bista zaharrak
+ aurkitu direlako Elggen bista karpetan. Bista hauek zaharkituta daude eta
+ ezabatu egin behar dira Elggek ondo funtzionatzeko. Ez badiozu Elggi aldaketarik egin,
+ ezabatu views karpeta eta ordeztu Elggek eskaintzen duenarekin;
+ ondorengo helbidean lotu dezakezu: <a href="http://elgg.org">elgg.org</a>.<br /><br />
+
+ Argibide gehiago behar baduzu, bisitatu <a href="http://docs.elgg.org/wiki/Upgrading_Elgg">
+ Elgg eguneratzeko dokumentazioa</a>. Laguntza behar baduzu, bidali mezua
+ <a href="http://community.elgg.org/pg/groups/discussion/">Komunitate Soporte Forora</a>.',
+ 'update:twitter_api:deactivated' => 'Twitter API (lehen Twitter Service) desaktibatu egin da eguneraketan. Behar baduzu, eskuz aktibatu, mesedez.',
+ 'update:oauth_api:deactivated' => 'OAuth API (lehen OAuth Lib) desaktibatu egin da eguneraketan. Behar baduzu, eskuz aktibatu, mesedez.',
+ 'deprecated:function' => '%s() zaharkitua dago, %s() da berria',
+ 'welcome' => 'Ongi etorri',
+ 'welcome:user' => 'Ongi etorri %s',
+ 'email:settings' => 'Posta elektronikoaren ezarpenak',
+ 'email:address:label' => 'Zure posta elektroniko helbidea',
+ 'email:save:success' => 'Posta elektroniko helbide berria gordeta, egiaztapena eskatu da.',
+ 'email:save:fail' => 'Ezin izan da gorde zure posta elektroniko helbidea berria.',
+ 'friend:newfriend:subject' => '%s-(e)k bere lagun egin zaitu!',
+ 'friend:newfriend:body' => '%s-(e)k bere lagun egin zaitu!
+
+Bere profila ikusteko egin klik hemen:
+
+%s
+
+Ezin duzu posta elektroniko honi erantzun.',
+ 'email:resetpassword:subject' => 'Pasahitza berrezarri da!',
+ 'email:resetpassword:body' => 'Kaixo %s,
+
+Zure pasahitza berrezarria izan da: %s',
+ 'email:resetreq:subject' => 'Pasahitza berriaren eskatu.',
+ 'email:resetreq:body' => 'Kaixo %s,
+
+Norbaitek (%s IP helbidetik) bere konturako pasahitz berria eskatu du.
+
+Hau zuk eskatu baduzu egin klik beheko estekan, bestela mezu hau baztertu.
+
+%s
+',
+ 'default_access:settings' => 'Zure sarbide baimen lehenetsia',
+ 'default_access:label' => 'Atzipen maila lehenetsia',
+ 'user:default_access:success' => 'Zure sarbide lehenetsi berria gorde da.',
+ 'user:default_access:failure' => 'Zure sarbide lehenetsi berria ezin izan da gorde.',
+ 'xmlrpc:noinputdata' => 'Sartutako datuak falta dira',
+ 'comments:count' => '%s iruzkin',
+ 'riveraction:annotation:generic_comment' => '%s-(e)k %s iruzkindu du',
+ 'generic_comments:add' => 'Iruzkindu',
+ 'generic_comments:post' => 'Iruzkina idatzi',
+ 'generic_comments:text' => 'Iruzkina',
+ 'generic_comments:latest' => 'Azken iruzkinak',
+ 'generic_comment:posted' => 'Zure iruzkina gehitu da.',
+ 'generic_comment:deleted' => 'Zure iruzkina ezabatu da.',
+ 'generic_comment:blank' => 'Barkatu, zerbait idatzi behar duzu iruzkinean gorde aurretik.',
+ 'generic_comment:notfound' => 'Barkatu, baina ez dugu zehaztutako elementua aurkitu.',
+ 'generic_comment:notdeleted' => 'Barkatu, ezin izan dugu iruzkina ezabatu.',
+ 'generic_comment:failure' => 'Espero ez zen errore bat gertatu da zure iruzkina gehitzerakoan. Saiatu berriro, mesedez.',
+ 'generic_comment:none' => 'Iruzkinak',
+ 'generic_comment:title' => '%s -(e)k iruzkindua',
+ 'generic_comment:email:subject' => 'Iruzkin berria duzu!',
+ 'generic_comment:email:body' => 'Iruzkin berria duzu "%s"-(e)n, %s-(e)k idatzita. Honakoa dio:
+
+%s
+
+
+Erantzun edo originala ikusteko, egin klik hemen:
+
+%s
+
+%s-(r)en profila ikusteko, egin klik hemen:
+
+%s
+
+Ezin duzu posta elektroniko honi erantzun.',
+ 'byline' => '%s-(e)k egina',
+ 'entity:default:strapline' => '%s sortu du %s-(e)k',
+ 'entity:default:missingsupport:popup' => 'Entitate hau ezin da ondo erakutsi. Baliteke hau gertatzea momentu honetan instalatuta ez dagoen pluginen bat behar duelako.',
+ 'entity:delete:success' => '%s entitatea ezabatu egin da',
+ 'entity:delete:fail' => 'Ezin izan da %s entitatea ezabatu',
+ 'actiongatekeeper:missingfields' => 'Datu-orrian __token edo __ts eremuak falta dira',
+ 'actiongatekeeper:tokeninvalid' => 'Errore bat aurkitu dugu (tokenak ez datoz bat). Baliteke ikusten ari zinen orriak iraungi izana. Saiatu berriro, mesedez.',
+ 'actiongatekeeper:timeerror' => 'Ikusten ari zinen orriak iraungi du. Eguneratu eta saiatu berriro, mesedez.',
+ 'actiongatekeeper:pluginprevents' => 'Luzapen batek eragotzi du datu-orri honen bidalketa.',
+ 'actiongatekeeper:uploadexceeded' => 'Igo den/diren fitxategien tamainak zure sistema administratzaileak ezarri duen muga gainditu dute',
+ 'word:blacklist' => 'eta, orduan, baina, hura, bere, bat, ez, ere, buruz, orain, hala ere, seguraski, bestela, aldian, nahiago, hori dela eta, are gehiago, ordez, bitartean, hau, dirudi, zer, nor, noren',
+ 'tag_names:tags' => 'Etiketak',
+ 'tags:site_cloud' => 'Gunearen Etiketa Lainoa',
+ 'js:security:token_refresh_failed' => 'Ezin izan da %s kontaktatu. Edukia gordetzerakoan arazoak izan ditzakezu.',
+ 'js:security:token_refreshed' => '%s-ra konexioa berreskuratu da!',
+ 'aa' => 'Afarera',
+ 'ab' => 'Abkhazera',
+ 'af' => 'Afrikaans',
+ 'am' => 'Amharera',
+ 'ar' => 'Arabiera',
+ 'as' => 'Assamera',
+ 'ay' => 'Aymara',
+ 'az' => 'Azerbaijanera',
+ 'ba' => 'Bashkir',
+ 'be' => 'Bielorrusiera',
+ 'bg' => 'Bulgariera',
+ 'bh' => 'Bihari',
+ 'bi' => 'Bislama',
+ 'bn' => 'Bengalera',
+ 'bo' => 'Tibetera',
+ 'br' => 'Bretainera',
+ 'ca' => 'Katalan',
+ 'co' => 'Korsikera',
+ 'cs' => 'Txekiera',
+ 'cy' => 'Galesera',
+ 'da' => 'Daniera',
+ 'de' => 'Aleman',
+ 'dz' => 'Bhutani',
+ 'el' => 'Greziera',
+ 'en' => 'Ingelesa',
+ 'eo' => 'Esperanto',
+ 'es' => 'Espaniera',
+ 'et' => 'Estoniera',
+ 'eu' => 'Euskara',
+ 'fa' => 'Persiera',
+ 'fi' => 'Finlandiera',
+ 'fj' => 'Fijiera',
+ 'fo' => 'Faroeera',
+ 'fr' => 'Frantsesa',
+ 'fy' => 'Frisiera',
+ 'ga' => 'Gaelera, Irlandakoa',
+ 'gd' => 'Gaelera, Eskoziakoa',
+ 'gl' => 'Galiziera',
+ 'gn' => 'Guaraniera',
+ 'gu' => 'Gujaratera',
+ 'he' => 'Hebreera',
+ 'ha' => 'Hausa',
+ 'hi' => 'Hindi',
+ 'hr' => 'Kroaziera',
+ 'hu' => 'Hungariera',
+ 'hy' => 'Armeniera',
+ 'ia' => 'Interlingua',
+ 'id' => 'Indonesiera',
+ 'ie' => 'Interlingue',
+ 'ik' => 'Inupiak',
+ 'is' => 'Islandiera',
+ 'it' => 'Italiera',
+ 'iu' => 'Inuitera',
+ 'iw' => 'Hebreera (zaharkitua)',
+ 'ja' => 'Japoniera',
+ 'ji' => 'Yiddish (zaharkitua)',
+ 'jw' => 'Javanese',
+ 'ka' => 'Georgiera',
+ 'kk' => 'Kazakh',
+ 'kl' => 'Groenlandiera',
+ 'km' => 'Kanbodiera',
+ 'kn' => 'Kannadera',
+ 'ko' => 'Koreera',
+ 'ks' => 'Kashmirera',
+ 'ku' => 'Kurduera',
+ 'ky' => 'Kirgizera',
+ 'la' => 'Latin',
+ 'ln' => 'Lingalera',
+ 'lo' => 'Laothian',
+ 'lt' => 'Lituaniera',
+ 'lv' => 'Letoniera',
+ 'mg' => 'Malagasy',
+ 'mi' => 'Maoriera',
+ 'mk' => 'Mazedoniera',
+ 'ml' => 'Malayalamera',
+ 'mn' => 'Mongoliera',
+ 'mo' => 'Moldaviera',
+ 'mr' => 'Marathera',
+ 'ms' => 'Malaysiera',
+ 'mt' => 'Maltera',
+ 'my' => 'Burmese',
+ 'na' => 'Nauru',
+ 'ne' => 'Nepalera',
+ 'nl' => 'Nederlandera',
+ 'no' => 'Norvergiera',
+ 'oc' => 'Okzitaniera',
+ 'om' => 'Oromoera',
+ 'or' => 'Oriyera',
+ 'pa' => 'Punjabera',
+ 'pl' => 'Poloniera',
+ 'ps' => 'Pashtoera',
+ 'pt' => 'Portugesa',
+ 'qu' => 'Quechuera',
+ 'rm' => 'Rhaeto-Romance',
+ 'rn' => 'Kirundi',
+ 'ro' => 'Errumaniera',
+ 'ru' => 'Errusiera',
+ 'rw' => 'Kinyarwanda',
+ 'sa' => 'Sanskrito',
+ 'sd' => 'Sindhi',
+ 'sg' => 'Sangro',
+ 'sh' => 'Serbokroaziera',
+ 'si' => 'Singhalese',
+ 'sk' => 'Eslovakiera',
+ 'sl' => 'Esloveniera',
+ 'sm' => 'Samoera',
+ 'sn' => 'Shonera',
+ 'so' => 'Somaliera',
+ 'sq' => 'Albaniera',
+ 'sr' => 'Serbiera',
+ 'ss' => 'Siswati',
+ 'st' => 'Sesotho',
+ 'su' => 'Sundanese',
+ 'sv' => 'Suediera',
+ 'sw' => 'Swahili',
+ 'ta' => 'Tamilera',
+ 'te' => 'Teluguera',
+ 'tg' => 'Tajikera',
+ 'th' => 'Thaiera',
+ 'ti' => 'Tigrinyera',
+ 'tk' => 'Turkmen',
+ 'tl' => 'Tagalog',
+ 'tn' => 'Setswana',
+ 'to' => 'Tonga',
+ 'tr' => 'Turkiera',
+ 'ts' => 'Tsongera',
+ 'tt' => 'Tatarera',
+ 'tw' => 'Twi',
+ 'ug' => 'Uigur',
+ 'uk' => 'Ukraniera',
+ 'ur' => 'Urdu',
+ 'uz' => 'Uzbekera',
+ 'vi' => 'Vietnamera',
+ 'vo' => 'Volapuk',
+ 'wo' => 'Wolofera',
+ 'xh' => 'Xhosera',
+ 'yi' => 'Yiddish',
+ 'yo' => 'Yorubera',
+ 'za' => 'Zuang',
+ 'zh' => 'Txinera',
+ 'zu' => 'Zuluera',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.custom_index.php b/mod/languages/languages/eu/eu.custom_index.php
new file mode 100644
index 000000000..73a3d78b4
--- /dev/null
+++ b/mod/languages/languages/eu/eu.custom_index.php
@@ -0,0 +1,10 @@
+<?php
+$basque=array (
+ 'custom:bookmarks' => 'Azken laster-markak',
+ 'custom:groups' => 'Azken taldeak',
+ 'custom:files' => 'Azken fitxategiak',
+ 'custom:blogs' => 'Azken blog mezuak',
+ 'custom:members' => 'Erabiltzaile berrienak',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.dashboard.php b/mod/languages/languages/eu/eu.dashboard.php
new file mode 100644
index 000000000..5ec1a8783
--- /dev/null
+++ b/mod/languages/languages/eu/eu.dashboard.php
@@ -0,0 +1,10 @@
+<?php
+$basque=array (
+ 'dashboard:widget:group:title' => 'Talde jarduera',
+ 'dashboard:widget:group:desc' => 'Zure talde batean eman den jarduna ikusi',
+ 'dashboard:widget:group:select' => 'Hautatu talde bat',
+ 'dashboard:widget:group:noactivity' => 'Ez dago jardunik talde honetan',
+ 'dashboard:widget:group:noselect' => 'Widget hau editatu talde bat hautatzeko',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.developers.php b/mod/languages/languages/eu/eu.developers.php
new file mode 100644
index 000000000..0ba3c6f5b
--- /dev/null
+++ b/mod/languages/languages/eu/eu.developers.php
@@ -0,0 +1,48 @@
+<?php
+$basque=array (
+ 'admin:develop_tools' => 'Tresnak',
+ 'admin:develop_tools:preview' => 'Gai lan-ingurua',
+ 'admin:develop_tools:inspect' => 'Aztertu',
+ 'admin:develop_tools:unit_tests' => 'Proba Unitarioak',
+ 'admin:developers' => 'Garatzaileak',
+ 'admin:developers:settings' => 'Ezarpenak',
+ 'elgg_dev_tools:settings:explanation' => 'Kontrolatu zure garapen eta debug ezarpenak azpian. Ezarpen batzuk beste kudeaketa orri batzuetan eskura daude.',
+ 'developers:label:simple_cache' => 'Erabili "simple cache"',
+ 'developers:help:simple_cache' => 'Garatzean, desgaitu fitxategi katxea. Bestela, zure bistetan egiten dituzun aldaketak (css-ak barne) ez dira kontutan hartuko.',
+ 'developers:label:system_cache' => 'Erabili sistemaren katxea',
+ 'developers:help:system_cache' => 'Desgaitu hau garatzekoan. Bestela, zure pluginetan ematen diren aldaketak ez dira erregistratuko.',
+ 'developers:label:debug_level' => 'Aztarna maila',
+ 'developers:help:debug_level' => 'Honek, egunkariak gordetzen duen informazio kopurua kontrolatzen du. Ikus elgg_log() xehetasun gehiago eskuratzeko.',
+ 'developers:label:display_errors' => 'Erakutsi PHP errore larriak',
+ 'developers:help:display_errors' => 'Modu lehenetsian, Elgg-en .htaccess fitxategiak errore larrien bistaratzea desgaitzen du.',
+ 'developers:label:screen_log' => 'Pantailan erakutsi',
+ 'developers:help:screen_log' => 'Honek elgg_log() eta elgg_dump() -ek sortutakoa erakusten du web orrian.',
+ 'developers:label:show_strings' => 'Erakutsi itzulpen kate gordinak',
+ 'developers:help:show_strings' => 'Honek elgg_echo() -k erabilzen dituen itzulpen kateak erakusten ditu.',
+ 'developers:label:wrap_views' => 'Bistak inguratu',
+ 'developers:help:wrap_views' => 'Honek bista gehienak HTML iruzkinekin inguratzen ditu. Erabilgarria HTML jakin bat sortzen duen bista aurkitzeko.',
+ 'developers:label:log_events' => 'Gorde gertaera eta plugin gakoak (hooks)',
+ 'developers:help:log_events' => 'Idatzi gertaera eta plugin gakoak (hooks) egunkarira. Adi: Orriko horrelako asko dira.',
+ 'developers:debug:off' => 'Desgaitua',
+ 'developers:debug:error' => 'Errorea',
+ 'developers:debug:warning' => 'Abisua',
+ 'developers:debug:notice' => 'Oharra',
+ 'developers:inspect:help' => 'Aztertu Elgg laninguruaren konfigurazioa.',
+ 'developers:event_log_msg' => '%s: \'%s, %s\' in %s',
+ 'theme_preview:general' => 'Sarrera',
+ 'theme_preview:breakout' => 'Break out of iframe',
+ 'theme_preview:buttons' => 'Botoiak',
+ 'theme_preview:components' => 'Konponenteak',
+ 'theme_preview:forms' => 'Datuorriak',
+ 'theme_preview:grid' => 'Saretak',
+ 'theme_preview:icons' => 'Ikonoak',
+ 'theme_preview:modules' => 'Moduloak',
+ 'theme_preview:navigation' => 'Nabigazioa',
+ 'theme_preview:typography' => 'Tipografia',
+ 'developers:unit_tests:description' => 'Elggek, integrazio eta proba unitarioak eskaintzen ditu bere muin eta funtziotan akatsak atzemateko.',
+ 'developers:unit_tests:warning' => 'Adi: ez abiarazi test hauek produkzioan dagoen gune batean. Probok datubasea ondatu dezakete.',
+ 'developers:unit_tests:run' => 'Abiarazi',
+ 'developers:settings:success' => 'Ezarpenak gorde dira',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.diagnostics.php b/mod/languages/languages/eu/eu.diagnostics.php
new file mode 100644
index 000000000..77776fc7e
--- /dev/null
+++ b/mod/languages/languages/eu/eu.diagnostics.php
@@ -0,0 +1,39 @@
+<?php
+$basque=array (
+ 'admin:administer_utilities:diagnostics' => 'Sistema Diagnostikoa',
+ 'diagnostics' => 'Sistema diagnostikoak',
+ 'diagnostics:report' => 'Diagnostiko Txostena',
+ 'diagnostics:description' => 'Ondorengo diagnostiko txostena erabilgarria da Elgg-en edozein arazo diagnostikatzeko eta akatsen baten berri ematen duzunean txertatzeko.',
+ 'diagnostics:download' => 'Deskargatu',
+ 'diagnostics:header' => '========================================================================
+Elgg Diagnostiko Txostena
+%s sotua %s-(e)k egina
+========================================================================
+
+',
+ 'diagnostics:report:basic' => '
+Elgg %s argitalpena, %s bertsioa
+
+------------------------------------------------------------------------',
+ 'diagnostics:report:php' => '
+PHP informazioa:
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:plugins' => '
+Instalatutako pluginak eta xehetasunak:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:md5' => '
+Instalatutako fitxategiak eta kontroleko baturak:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:globals' => '
+Aldagai globalak:
+
+%s
+------------------------------------------------------------------------',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.embed.php b/mod/languages/languages/eu/eu.embed.php
new file mode 100644
index 000000000..f43cd8f8c
--- /dev/null
+++ b/mod/languages/languages/eu/eu.embed.php
@@ -0,0 +1,13 @@
+<?php
+$basque=array (
+ 'embed:embed' => 'Txertatu',
+ 'embed:media' => 'Edukia txertatu',
+ 'embed:instructions' => 'Klik egin edozein fitxategitan zure edukian txertatzeko.',
+ 'embed:upload' => 'Media igo',
+ 'embed:upload_type' => 'Igotzeko modua:',
+ 'embed:no_upload_content' => 'Ez igo edukirik!',
+ 'embed:no_section_content' => 'Ez da elementurik aurkitu.',
+ 'embed:no_sections' => 'Txertatzeko pluginik ez da aurkitu. Eskatu iezaiozu gune kudeatzaileari txertatzeko euskarria duen plugin bat aktibatzeko.',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.externalpages.php b/mod/languages/languages/eu/eu.externalpages.php
new file mode 100644
index 000000000..e07c25a1f
--- /dev/null
+++ b/mod/languages/languages/eu/eu.externalpages.php
@@ -0,0 +1,14 @@
+<?php
+$basque=array (
+ 'expages' => 'Gune orriak',
+ 'admin:appearance:expages' => 'Gune orriak',
+ 'expages:about' => 'Honi buruz',
+ 'expages:terms' => 'Baldintzak',
+ 'expages:privacy' => 'Pribatutasuna',
+ 'expages:contact' => 'Kontaktua',
+ 'expages:notset' => 'Orri honek ez du ezarpenik oraindik.',
+ 'expages:posted' => 'Zure orria ongi eguneratu da.',
+ 'expages:error' => 'Ezin izan da orri hau gorde.',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.file.php b/mod/languages/languages/eu/eu.file.php
new file mode 100644
index 000000000..2250ef073
--- /dev/null
+++ b/mod/languages/languages/eu/eu.file.php
@@ -0,0 +1,76 @@
+<?php
+$basque=array (
+ 'file' => 'Fitxategiak',
+ 'file:user' => '%s-(r)en fitxategiak',
+ 'file:friends' => 'Lagunen fitxategiak',
+ 'file:all' => 'Fitxategi guztiak',
+ 'file:edit' => 'Editatu fitxategia',
+ 'file:more' => 'Fitxategi gehiago',
+ 'file:list' => 'zerrenda ikuspegia',
+ 'file:group' => 'Taldeko fitxategiak',
+ 'file:gallery' => 'galeria ikuspegia',
+ 'file:gallery_list' => 'Galeria edo zerrenda ikuspegia',
+ 'file:num_files' => 'Erakutsiko diren fitxategi kopurua',
+ 'file:user:gallery' => 'Ikusi %s galeria',
+ 'file:upload' => 'Fitxategi bat igo',
+ 'file:replace' => 'Ordeztu fitxategi edukia (utzi hutsik fitxategia ez aldatzeko)',
+ 'file:list:title' => '%s-(r)en %s %s',
+ 'file:title:friends' => 'Lagunenak',
+ 'file:add' => 'Fitxategi bat igo',
+ 'file:file' => 'Fitxategia',
+ 'file:title' => 'Izenburua',
+ 'file:desc' => 'Deskribapena',
+ 'file:tags' => 'Etiketak',
+ 'file:list:list' => 'Aldatu zerrenda iksupegira',
+ 'file:list:gallery' => 'Aldatu galeria ikuspegira',
+ 'file:types' => 'Igotako fitxategi motak',
+ 'file:type:' => 'Fitxategiak',
+ 'file:type:all' => 'Fitxategi guztiak',
+ 'file:type:video' => 'Bideoak',
+ 'file:type:document' => 'Dokumentuak',
+ 'file:type:audio' => 'Audioa',
+ 'file:type:image' => 'Irudiak',
+ 'file:type:general' => 'Orokorra',
+ 'file:user:type:video' => '%s-(r)en bideoak',
+ 'file:user:type:document' => '%s-(r)en dokumentuak',
+ 'file:user:type:audio' => '%s-(r)en audio fitxatetiak',
+ 'file:user:type:image' => '%s-(r)en irudiak',
+ 'file:user:type:general' => '%s-(r)en fitxategi orokorrak',
+ 'file:friends:type:video' => 'Zure lagunen bideoak',
+ 'file:friends:type:document' => 'Zure lagunen dokumentuak',
+ 'file:friends:type:audio' => 'Zure lagunen audioak',
+ 'file:friends:type:image' => 'Zure lagunen irudiak',
+ 'file:friends:type:general' => 'Zure lagunen fitxategi orokorrak',
+ 'file:widget' => 'Fitxategi widgeta',
+ 'file:widget:description' => 'Zure fitxategi berrien erakusleihoa',
+ 'groups:enablefiles' => 'Baimendu talde fitxategiak',
+ 'file:download' => 'Hau deskargatu',
+ 'file:delete:confirm' => 'Ziur fitxategi hau ezabatu nahi duzula?',
+ 'file:tagcloud' => 'Etiketa lainoa',
+ 'file:display:number' => 'Erakutsi beharreko fitxategi kopurua',
+ 'river:create:object:file' => '%s-(e)k %s fitxategia igo du',
+ 'river:comment:object:file' => '%s-(e)k %s fitxategia iruzkindu du',
+ 'item:object:file' => 'Fitxategiak',
+ 'file:newupload' => 'Fitxategi berri bat igo da',
+ 'file:notification' => '%s-ek fitxategi berria kargatu du:
+
+%s
+%s
+
+Ikusi eta iruzkina egin fitxategi berriari:
+%s
+',
+ 'file:embed' => 'Multimedia txertatu',
+ 'file:embedall' => 'Guztia',
+ 'file:saved' => 'Zure fitxategia ongi gorde da.',
+ 'file:deleted' => 'Zure fitxategia ongi ezabatu da.',
+ 'file:none' => 'Ez da fitxategirik.',
+ 'file:uploadfailed' => 'Barkatu; ezin izan dugu zure fitxategia gorde.',
+ 'file:downloadfailed' => 'Barkatu; fitxategi hau ez dago eskuragarri orain.',
+ 'file:deletefailed' => 'Zure fitxategia ezin izan da ezabatu orain.',
+ 'file:noaccess' => 'Ez duzu fitxategi hau aldatzeko baimeni',
+ 'file:cannotload' => 'Fitxategia igotzean errore bat gertatu da',
+ 'file:nofile' => 'Fitxategi bat hautatu behar duzu',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.garbagecollector.php b/mod/languages/languages/eu/eu.garbagecollector.php
new file mode 100644
index 000000000..4a109d2e5
--- /dev/null
+++ b/mod/languages/languages/eu/eu.garbagecollector.php
@@ -0,0 +1,17 @@
+<?php
+$basque=array (
+ 'garbagecollector:period' => 'Zer maiztasunarekin exekutatu behar da Elgg-en zabor biltzailea?',
+ 'garbagecollector:weekly' => 'Astean behin',
+ 'garbagecollector:monthly' => 'Hilean behin',
+ 'garbagecollector:yearly' => 'Urtean behin',
+ 'garbagecollector' => 'ZABOR BILTZAILEA
+',
+ 'garbagecollector:done' => 'EGINDA
+',
+ 'garbagecollector:optimize' => '%s optimizatzen ',
+ 'garbagecollector:error' => 'ERROREA',
+ 'garbagecollector:ok' => 'ONDO',
+ 'garbagecollector:gc:metastrings' => 'Lotuta ez dauden metastring-ak garbitzen: ',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.groups.php b/mod/languages/languages/eu/eu.groups.php
new file mode 100644
index 000000000..5cd9235d0
--- /dev/null
+++ b/mod/languages/languages/eu/eu.groups.php
@@ -0,0 +1,213 @@
+<?php
+$basque=array (
+ 'groups' => 'Taldeak',
+ 'groups:owned' => 'Jabe naizen taldeak',
+ 'groups:yours' => 'Nire taldeak',
+ 'groups:user' => '%s-(r)en taldeak',
+ 'groups:all' => 'Talde guztiak',
+ 'groups:add' => 'Talde berri bat sortu',
+ 'groups:edit' => 'Taldea editatu',
+ 'groups:delete' => 'Taldea ezabatu',
+ 'groups:membershiprequests' => 'Kudeatu taldekidetza eskaerak',
+ 'groups:invitations' => 'Talde gonbidapenak',
+ 'groups:icon' => 'Taldearen ikonoa (utzi zuri aldaketarik ez egiteko)',
+ 'groups:name' => 'Taldearen izena',
+ 'groups:username' => 'Taldearen izen laburra (URL-tan erakusten da, alfazenbakizko karaktereak bakarrik)',
+ 'groups:description' => 'Deskribapena',
+ 'groups:briefdescription' => 'Deskribapen laburra',
+ 'groups:interests' => 'Etiketak',
+ 'groups:website' => 'Webgunea',
+ 'groups:members' => 'Taldekideak',
+ 'groups:members:title' => '%s-(e)n taldekideak',
+ 'groups:members:more' => 'Ikusi taldekide guztiak',
+ 'groups:membership' => 'Taldekidetza baimenak',
+ 'groups:access' => 'Sartzeko baimenak',
+ 'groups:owner' => 'Jabea',
+ 'groups:widget:num_display' => 'Bistaratuko diren talde kopurua',
+ 'groups:widget:membership' => 'Taldekidetza',
+ 'groups:widgets:description' => 'Erakutsi zure profilean zein taldeetako kide zaren',
+ 'groups:noaccess' => 'Ez duzu talde honetan sartzerik',
+ 'groups:permissions:error' => 'Ez duzu honetarako baimenik',
+ 'groups:ingroup' => 'taldean',
+ 'groups:cantedit' => 'Ezin duzu talde hau editatu',
+ 'groups:saved' => 'Taldea gorde da',
+ 'groups:featured' => 'Nabarmendutako taldeak',
+ 'groups:makeunfeatured' => 'Nabarmentzea kendu',
+ 'groups:makefeatured' => 'Nabarmendu',
+ 'groups:featuredon' => '%s taldea, talde nabarmena da orain.',
+ 'groups:unfeatured' => '%s talde nabarmen izateari utzi dio.',
+ 'groups:featured_error' => 'Talde baliogabea',
+ 'groups:joinrequest' => 'Taldekide izatea eskatu',
+ 'groups:join' => 'Taldekide egin',
+ 'groups:leave' => 'Taldekide izateari utzi',
+ 'groups:invite' => 'Lagunak gonbitatu',
+ 'groups:invite:title' => 'Gonbidatu lagunak talde honetara',
+ 'groups:inviteto' => '\'%s\'-(r)a lagunak gonbidatu',
+ 'groups:nofriends' => 'Ez duzu talde honetara gonbidatu ez duzun lagunik.',
+ 'groups:nofriendsatall' => 'Ez duzu gonbidapena luzatu ahal izateko lagunik!',
+ 'groups:viagroups' => 'taldeen bidez',
+ 'groups:group' => 'Taldea',
+ 'groups:search:tags' => 'etiketa',
+ 'groups:search:title' => 'Bilatu \'%s\' etiketa duten taldeak',
+ 'groups:search:none' => 'Ez da bat datorren talderik aurkitu',
+ 'groups:search_in_group' => 'Bilatu talde honetan',
+ 'groups:acl' => 'Taldea: %s',
+ 'groups:notification' => '%s-ek eztabaida gai berria sortu du %s-en:
+
+%s
+%s
+
+Irakurri eta utzi zure enrantzuna:
+%s
+',
+ 'groups:activity' => 'Talde jarduna',
+ 'groups:enableactivity' => 'Gaitu talde jarduna',
+ 'groups:activity:none' => 'Ez da talde jardunik oraindik',
+ 'groups:notfound' => 'Ez da talderik aurkitu',
+ 'groups:notfound:details' => 'Eskatutako taldea ez da existitzen edo ez duzu bertara sartzeko baimenik',
+ 'groups:requests:none' => 'Ez dago taldean sartzeko eskaerarik.',
+ 'groups:invitations:none' => 'Ez dago gonbidapenekin.',
+ 'item:object:groupforumtopic' => 'foro gaiak',
+ 'groupforumtopic:new' => 'Bidali foro mezu bat',
+ 'groups:count' => 'sortutako taldeak',
+ 'groups:open' => 'talde irekia',
+ 'groups:closed' => 'talde itxia',
+ 'groups:member' => 'taldekide',
+ 'groups:searchtag' => 'Bilatu taldeak etiketen bidez',
+ 'groups:more' => 'Talde gehiago',
+ 'groups:none' => 'Talderik ez',
+ 'groups:access:private' => 'Itxia - Gonbidapena beharrezkoa da',
+ 'groups:access:public' => 'Irekia - Edonor sartu daiteke',
+ 'groups:access:group' => 'Taldekideak bakarrik',
+ 'groups:closedgroup' => 'Talde honek partaidetza itxia du.',
+ 'groups:closedgroup:request' => 'Taldekide izatea eskatzeko, klik egin "Taldekide izatea eskatu" menu estekan.',
+ 'groups:visibility' => 'Nork ikusi dezake talde hau?',
+ 'groups:enableforum' => 'Gaitu talde foroak',
+ 'groups:yes' => 'bai',
+ 'groups:no' => 'ez',
+ 'groups:lastupdated' => 'Azken eguneraketa %s, %s-(e)k egina',
+ 'groups:lastcomment' => 'Azken iruzkina %s, %s-(e)k egina',
+ 'discussion' => 'Foroa',
+ 'discussion:add' => 'Gehitu foro gai bat',
+ 'discussion:latest' => 'Azken foroak',
+ 'discussion:group' => 'Talde foroak',
+ 'discussion:none' => 'Ez da fororik',
+ 'discussion:reply:title' => 'Erantzuna, %s-(e)k egina',
+ 'discussion:topic:created' => 'foro gaia sortu da.',
+ 'discussion:topic:updated' => 'foro gaia eguneratu da.',
+ 'discussion:topic:deleted' => 'foro gaia ezabatu da.',
+ 'discussion:topic:notfound' => 'Ez da aurkitu foro gairik',
+ 'discussion:error:notsaved' => 'Ezin izan da gai hau gorde',
+ 'discussion:error:missing' => 'Bai izenburua eta mezua, beharrezko eremuak dira',
+ 'discussion:error:permissions' => 'Ez duzu ekintza hau burutzeko baimenik',
+ 'discussion:error:notdeleted' => 'Ezin izan da foro gaia ezabatu',
+ 'discussion:reply:deleted' => 'Eztabidaren erantzuna ezabatu da.',
+ 'discussion:reply:error:notdeleted' => 'Ezin izan da foro sarreraren erantzuna ezabatu',
+ 'reply:this' => 'Honi erantzun',
+ 'group:replies' => 'Erantzunak',
+ 'groups:forum:created' => '%s sortua %d iruzkinkenik',
+ 'groups:forum:created:single' => '%s sortua, %d erantzunekin',
+ 'groups:forum' => 'Foroa',
+ 'groups:addtopic' => 'Sarrera gehitu',
+ 'groups:forumlatest' => 'Foroko azken eztabaidak',
+ 'groups:latestdiscussion' => 'Azken eztabaidak',
+ 'groups:newest' => 'Berrienak',
+ 'groups:popular' => 'Arrakastatsuenak',
+ 'groupspost:success' => 'Zure erantzuna bidali da',
+ 'groups:alldiscussion' => 'Foro sarrera guztiak',
+ 'groups:edittopic' => 'Gaia editatu',
+ 'groups:topicmessage' => 'Gaiaren mezua',
+ 'groups:topicstatus' => 'Gaiaren egoera',
+ 'groups:reply' => 'Iruzkina bidali',
+ 'groups:topic' => 'Gaia',
+ 'groups:posts' => 'Mezuak',
+ 'groups:lastperson' => 'Azken pertsona',
+ 'groups:when' => 'Noiz',
+ 'grouptopic:notcreated' => 'Ez da gairik sortu.',
+ 'groups:topicopen' => 'Irekia',
+ 'groups:topicclosed' => 'Itxia',
+ 'groups:topicresolved' => 'Ebatzia',
+ 'grouptopic:created' => 'Zure gaia sortu da.',
+ 'groupstopic:deleted' => 'Gaia ezabatu da',
+ 'groups:topicsticky' => 'Garrantzitsua',
+ 'groups:topicisclosed' => 'Gai hau itxia dago.',
+ 'groups:topiccloseddesc' => 'Gai hau itxita dago eta ez du iruzkin berririk onartzen.',
+ 'grouptopic:error' => 'Ezin izan da taldeko gaia sortu. Saiatu berriro edo kontaktatu sistemaren kudeatzailearekin.',
+ 'groups:forumpost:edited' => 'Foroko mezua ondo editatu da.',
+ 'groups:forumpost:error' => 'Arazo bat egon da foroko mezua editatzean.',
+ 'groups:privategroup' => 'Talde hau itxia da. Taldekidetza eskatzen.',
+ 'groups:notitle' => 'Taldeek izenburua behar dute',
+ 'groups:cantjoin' => 'Ez da posible izan taldekidetza burutzea',
+ 'groups:cantleave' => 'Ez da posible izan talde hau uztea',
+ 'groups:removeuser' => 'Taldea uztea',
+ 'groups:cantremove' => 'Ezin izan da erabiltzailea taldetik kanporatu',
+ 'groups:removed' => '%s ondo kanporatu da taldetik',
+ 'groups:addedtogroup' => 'Erabiltzailea taldekide bihurtu da',
+ 'groups:joinrequestnotmade' => 'Taldekidetza eskera ezin izan da egin',
+ 'groups:joinrequestmade' => 'Taldekidetza eskera egin da',
+ 'groups:joined' => 'Taldearekin bat egin da!',
+ 'groups:left' => 'Taldea utzi da',
+ 'groups:notowner' => 'Barkatu, ez zara talde honen jabea.',
+ 'groups:notmember' => 'Barkatu, ez zara talde honen kide.',
+ 'groups:alreadymember' => 'Talde honetan kidea zara dagoeneko!',
+ 'groups:userinvited' => 'Erabiltzaileari gonbidapena bidali zaio.',
+ 'groups:usernotinvited' => 'Ezin izan da erabiltzaileari gonbidapena bidali.',
+ 'groups:useralreadyinvited' => 'Erabiltzailea jada gonbidatua izan da',
+ 'groups:invite:subject' => '%s gonbidatuta zaude %s taldean kide izateko!',
+ 'groups:updated' => 'Azken iruzkina %s-(e)k egina: %s',
+ 'groups:started' => '%s-(e)k hasia',
+ 'groups:joinrequest:remove:check' => 'Ziur zaude izen emate eskaera hau baztertu nahi duzula?',
+ 'groups:invite:remove:check' => 'Ziur zaude gonbidapen hau ezabatu nahi duzula?',
+ 'groups:invite:body' => 'Kaixo %s,
+
+%s-(e)k gonbita bidali dizu \'%s\' taldearekin bat egiteko. Zure gonbidapenak ikusteko klik egin azpian:
+
+%s',
+ 'groups:welcome:subject' => 'Ongi etorri %s taldera!',
+ 'groups:welcome:body' => 'Kaixo %s!
+
+Orain \'%s\' taldearen kide zara! Egin klik behean mezuak idazten hasteko!
+
+%s',
+ 'groups:request:subject' => '%s-(e)k %s taldearen kide izatea eskatu du',
+ 'groups:request:body' => 'Kaixo %s,
+
+%s-(e)k \'%s\' taldeko kide izatea eskatu du, egin klik egin azpian bere profila ikusteko:
+
+%s
+
+edo egin klik azpian taldekidetza onartzeko:
+
+%s',
+ 'river:create:group:default' => '%s-(e)k talde hau sortu du: %s',
+ 'river:join:group:default' => '%s-(e)k %s taldearekin bat egin du',
+ 'river:create:object:groupforumtopic' => '%s-(e)k eztabaida gai bat sartu du: %s',
+ 'river:reply:object:groupforumtopic' => '%s-(e) eztabida gaiari erantzuna eman dio: %s',
+ 'groups:nowidgets' => 'Ez da widget-ik zehaztu talde honetan.',
+ 'groups:widgets:members:title' => 'Taldekideak',
+ 'groups:widgets:members:description' => 'Talde baten kideak zerrendatu.',
+ 'groups:widgets:members:label:displaynum' => 'Talde baten kideak zerrendatu.',
+ 'groups:widgets:members:label:pleaseedit' => 'Konfigura ezazu widget hau, mesedez.',
+ 'groups:widgets:entities:title' => 'Taldeko objektuak',
+ 'groups:widgets:entities:description' => 'Zerrendatu talde honetan gorde diren objektuak',
+ 'groups:widgets:entities:label:displaynum' => 'Zerrendatu talde baten objektuak.',
+ 'groups:widgets:entities:label:pleaseedit' => 'Konfigura ezazu widget hau, mesedez.',
+ 'groups:forumtopic:edited' => 'Foroko gaia editatu da.',
+ 'groups:allowhiddengroups' => 'Baimendu nahi dituzu talde pribatuak (ikusezinak)?',
+ 'group:deleted' => 'Taldea eta bere edukiak ezabatu dira',
+ 'group:notdeleted' => 'Ezin izan da taldea ezabatu',
+ 'group:notfound' => 'Ezin izan da taldea aurkitu',
+ 'grouppost:deleted' => 'Talde bidalketa ezabatu da',
+ 'grouppost:notdeleted' => 'Ezin izan da talde bidalketa ezabatu',
+ 'groupstopic:notdeleted' => 'Ez da gaia ezabatu',
+ 'grouptopic:blank' => 'Gairik ez',
+ 'grouptopic:notfound' => 'Ezin da gaia aurkitu',
+ 'grouppost:nopost' => 'Bidalketa hutsa',
+ 'groups:deletewarning' => 'Ziur zaude talde hau ezabatu nahi duzula? Ez dago atzera bueltarik!',
+ 'groups:invitekilled' => 'Gonbidapena ezabatu da.',
+ 'groups:joinrequestkilled' => 'Taldekitetza eskaria ezabatua izan da.',
+ 'groups:ecml:discussion' => 'Talde eztabaidak',
+ 'groups:ecml:groupprofile' => 'Talde profilak',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.install.php b/mod/languages/languages/eu/eu.install.php
new file mode 100644
index 000000000..8fee9e338
--- /dev/null
+++ b/mod/languages/languages/eu/eu.install.php
@@ -0,0 +1,134 @@
+<?php
+$basque=array (
+ 'install:title' => 'Elgg Instalazioa',
+ 'install:welcome' => 'Ongi etorri',
+ 'install:requirements' => 'Eskakizunen baieztapena',
+ 'install:database' => 'Datubase instalazioa',
+ 'install:settings' => 'Konfiguratu gunea',
+ 'install:admin' => 'Sortu admin kontua',
+ 'install:complete' => 'Amaitua',
+ 'install:next' => 'Hurrengoa',
+ 'install:refresh' => 'Eguneratu',
+ 'install:welcome:instructions' => 'Elgg 6 pausutan egiten da eta ongietorri hau irakurtzea da lehendabizikoa!
+
+Oraindik egin ez baduzu, irakurri Elggek dakarren instalazio gida (edo egin klik orri honen azpialdean dagoen gida estekan).
+
+Haurrera egiteko prest bazaude, egin klik Hurrengoa botoian.',
+ 'install:requirements:instructions:success' => 'Zure zerbitzariak eskakizun baieztapenak gainditu ditu.',
+ 'install:requirements:instructions:failure' => 'Zure zerbitzariak ez du gainditu eskakizun egiaztapena. Azpian agertzen diren arazoak konpondu ondoren, freskatu orri hau. Laguntza behar baduzu, begiratu arazoak konpontzeko estekak orri honen azpialdean.',
+ 'install:requirements:instructions:warning' => 'Zure zerbitzariak gainditu du eskakizun egiaztapena, baina bada gutxienez oharren bat. Instalazioaren inguruko arazoen konponketa orria kontsultatzea aholkatzen dizugu xehetasun gehiago eskuratzeko.',
+ 'install:require:php' => 'PHP',
+ 'install:require:rewrite' => 'Web zerbitzaria',
+ 'install:require:settings' => 'Ezarpen fitxategia',
+ 'install:require:database' => 'Datubasea',
+ 'install:check:root' => 'Zure web zerbitzariak ez du .htaccess fitxategia Elgg karpetaren erroan sortzeko baimenik. Bi aukera dituzu:
+
+ 1. Aldatu erro karpetaren baimenak
+
+ 2. Kopiatu edo berrinzendatu htaccess_dist fitxategia .htaccess bezala',
+ 'install:check:php:version' => 'Elggek, PHP %s edo berriago behar du. Zerbitzari honek %s bertsioa darabil.',
+ 'install:check:php:extension' => 'Elggek PHP hedapen hau: %s behar du.',
+ 'install:check:php:extension:recommend' => 'PHP hedapen hau: %s instalatzea gomendatzen da.',
+ 'install:check:php:open_basedir' => 'PHPren open_basedir direktibaren ondorioz, posible da Elggek ezin fitxategiak gordetzea datu karpetan.',
+ 'install:check:php:safe_mode' => 'PHP modu seguruan abiaraztea ez da aholkatzen, Elggek arazoak izan baiditzake.',
+ 'install:check:php:arg_separator' => 'Elggek lan egiteko arg_separator.output -en balioak & behar du, eta zure zerbitzariaren balioa %s da',
+ 'install:check:php:register_globals' => 'Register globals -ek desgaitua behar du.',
+ 'install:check:php:session.auto_start' => 'Elggek lan egiteko session.auto_start -ek desgaitua behar du. Aldatu ezarpena zure zerbitzarian edo jarri direktiba Elggen .htaccess fitxategian.',
+ 'install:check:enginedir' => 'Zure web zerbitzariak ez du settings.php fitxategia engine karpetan sortzeko baimenik. Bi aukera dituzu:
+
+ 1. Aldatu baimenak engine karpetan
+
+ 2. settings.example.php fitxategia settings.php bezala kopiatu eta jarraitu fitxategian bertan dauden jarraibideak datubase parametroak ezartzeko.',
+ 'install:check:readsettings' => 'Ezarpen fitxategia bada engine karpetan baina web zerbitzariak ezin du irakurri. Fitxategia ezabatu edo aldatu irakurketa baimenak fitxategiari.',
+ 'install:check:php:success' => 'Zure zerbitzariko PHPek Elggen eskakizun guztiak betetzen ditu.',
+ 'install:check:rewrite:success' => 'rewrite arauen froga arrakastatsua izan da.',
+ 'install:check:database' => 'Datubase eskakizunak Ellgek bere datubasea kargatzen duenean begiratzen dira.',
+ 'install:database:instructions' => 'Ez baduzu oraindik Elggentzat datubaserik sortu, egizu orain. Ondoren, bete azpiko balioak Elgg datubasea hasieratzeko.',
+ 'install:database:error' => 'Errorea eman da Elggen datubasea sortzean eta instalazioak ezin du aurrera egin. Berrikusi azpiko mezuak eta konpondu egon daitezkeen arazoak. Laguntzarik behar baduzu, begiratu instalazio arazoak konpontzeko gidaren esteka edo galdera egin Elgg komunitatearen foroan.',
+ 'install:database:label:dbuser' => 'Datubase Erabiltzailea',
+ 'install:database:label:dbpassword' => 'Datubase Pasahitza',
+ 'install:database:label:dbname' => 'Datubase Izena',
+ 'install:database:label:dbhost' => 'Datubase Zerbitzaria',
+ 'install:database:label:dbprefix' => 'Datubase Taulen Aurrizkia',
+ 'install:database:help:dbuser' => 'Elggentzat sortutako datubasean baimen guztiak dituen erabiltzailea',
+ 'install:database:help:dbpassword' => 'Pasahitza aurreko datubase erabiltzailearentzat',
+ 'install:database:help:dbname' => 'Elgg datubasearen izena',
+ 'install:database:help:dbhost' => 'MySQL zerbitzariaren izena (normalean localhost)',
+ 'install:database:help:dbprefix' => 'Elggen taulei emandako aurrizkia (normalean elgg_)',
+ 'install:settings:instructions' => 'Elggen ezparpenak egiteko datu batzuk behar ditugu. Ez baduzu Elggentzat <a href="http://docs.elgg.org/wiki/Data_directory" target="_blank">datu karpeta sortu</a>, orain bertan egin beharko duzu.',
+ 'install:settings:label:sitename' => 'Gunearen Izena',
+ 'install:settings:label:siteemail' => 'Gunearen Posta Helbidea',
+ 'install:settings:label:wwwroot' => 'Gunearen URLa',
+ 'install:settings:label:path' => 'Elggen Instalazio Karpeta',
+ 'install:settings:label:dataroot' => 'Datu Karpeta',
+ 'install:settings:label:language' => 'Gunearen Hizkuntza',
+ 'install:settings:label:siteaccess' => 'Guneko Atzipen Lehenetsia',
+ 'install:label:combo:dataroot' => 'Elggek datu karpeta sortzen du',
+ 'install:settings:help:sitename' => 'Zure Elgg gune berriaren izena',
+ 'install:settings:help:siteemail' => 'Elggek erabiltzaileekin komunikatzeko erabiltzen duen eposta helbidea',
+ 'install:settings:help:wwwroot' => 'Gunearen helbidea (Elggek hau normalean ondo asmatzen du)',
+ 'install:settings:help:path' => 'Elggen kodea dagoen karpeta (Elggek normalean ondo asmatzen du)',
+ 'install:settings:help:dataroot' => 'Elggek fitxategiak gordetzeko karpeta (karpeta honen baimenak Hurrengoa sakatzen duzunean begiratuko dira)',
+ 'install:settings:help:dataroot:apache' => 'Elggek sortu dezake datu karpeta edo zuk dagoeneko sortua duzun karpetaren bidea sartu dezakezu (karpeta honen baimenak Hurrengoa sakatzen duzunean begiratuko dira)',
+ 'install:settings:help:language' => 'Gune honen hizkuntza lehenetsia',
+ 'install:settings:help:siteaccess' => 'Lehenetsitako atzipen maila erabiltzaileek sortutako eduki berrientzat',
+ 'install:admin:instructions' => 'Administratzailearen kontua sortzeko garaia da.',
+ 'install:admin:label:displayname' => 'Bistaratuko den izena',
+ 'install:admin:label:email' => 'Eposta helbidea',
+ 'install:admin:label:username' => 'Erabiltzailea',
+ 'install:admin:label:password1' => 'Pasahitza',
+ 'install:admin:label:password2' => 'Pasahitza Berriz',
+ 'install:admin:help:displayname' => 'Gunean kontu hau zein izenekin erakutsiko den',
+ 'install:admin:help:email' => '',
+ 'install:admin:help:username' => 'Saioa hasteko kontuaren erabiltzaile izena',
+ 'install:admin:help:password1' => 'Kontuaren pasahitzak %u karaktere luze izan behar du gutxienez',
+ 'install:admin:help:password2' => 'Berridatzi pasahitza berresteko',
+ 'install:admin:password:mismatch' => 'Pasahitzak bat etorri behar dira',
+ 'install:admin:password:empty' => 'Pasahitzak ezin da hutsa izan.',
+ 'install:admin:password:tooshort' => 'Zure pasahitza laburregia zen',
+ 'install:admin:cannot_create' => 'Ezin izan da administratzaile konturik sortu.',
+ 'install:complete:instructions' => 'Zure Elgg gunea erabilgarri dago. Sakatu azpiko botoia zure gunera joateko.karpeta honen baimenak Hurrengoa sakatzen duzunean begiratuko dira',
+ 'install:complete:gotosite' => 'Segi gunera',
+ 'InstallationException:UnknownStep' => '%s ezezaguna den instalazio urratsa da.',
+ 'install:success:database' => 'Datubasea instalatu da.',
+ 'install:success:settings' => 'Gune ezarpenak gorde dira.',
+ 'install:success:admin' => 'Admin kontua sortu da.',
+ 'install:error:htaccess' => 'Ezin izan da .htaccess sortu',
+ 'install:error:settings' => 'Ezin izan da ezarpen fitxategia sortu',
+ 'install:error:databasesettings' => 'Ezin izan da emandako ezarpenekin datubasera konektatu',
+ 'install:error:oldmysql' => 'MySQL-ek 5.0 edo berriagoko bertsioa behar du. Zure zerbitzariak %s darabil.',
+ 'install:error:nodatabase' => 'Ezin da %s datubasea erabili. Agian ez da horrelakorik.',
+ 'install:error:cannotloadtables' => 'Ezin izan dira datubase taulak kargatu',
+ 'install:error:tables_exist' => 'Badira Elgg taulak datubasean. Taula hauek ezabatu edo instalazio berrabiarazi dezakezu jada badiren taulak erabiltzen saiatzeko. Instalazioa berrabiarazteko, ezabatu \'?step=database\' zure nabigatzailearen URLtik eta sakatu Enter.',
+ 'install:error:readsettingsphp' => 'Ezin izan da engine/settings.example.php irakurri',
+ 'install:error:writesettingphp' => 'Ezin izan da engine/settings.php idatzi',
+ 'install:error:requiredfield' => '%s beharrezkoa da',
+ 'install:error:relative_path' => 'Ez dirudi "%s" zure datu karpetaren bide osoa denik',
+ 'install:error:datadirectoryexists' => 'Ez da %s datu karpetarik.',
+ 'install:error:writedatadirectory' => 'Zure %s datu karpeta ez da idazgarria web zerbitzariarentzat.',
+ 'install:error:locationdatadirectory' => 'Zure %s datu karpetak instalazio bidetik kanpo egon behar du segurtasun arrazoiak medio.',
+ 'install:error:emailaddress' => '%s ez da posta helbide zuzena',
+ 'install:error:createsite' => 'Ezin izan da gunea sortu',
+ 'install:error:savesitesettings' => 'Ezin izan dira gunearen ezarpenak gorde',
+ 'install:error:loadadmin' => 'Ezin izan da admin erabiltzailea kargatu.',
+ 'install:error:adminaccess' => 'Sortu berri den kontuari ezin izan zaio admin pribilegiorik eman.',
+ 'install:error:adminlogin' => 'Ezin izan da admin erabiltzaile berriarekin saioa automatikoki hasi.',
+ 'install:error:rewrite:apache' => 'Zure zerbitzariak Apache web zerbitzaria darabilela uste dugu.',
+ 'install:error:rewrite:nginx' => 'Zure zerbitzariak Nginx web zerbitzaria darabilela uste dugu.',
+ 'install:error:rewrite:lighttpd' => 'Zure zerbitzariak Lighttpd web zerbitzaria darabilela uste dugu.',
+ 'install:error:rewrite:iis' => 'Zure zerbitzariak IIS web zerbitzaria darabilela uste dugu.',
+ 'install:error:rewrite:allowoverride' => 'Rewrite probak huts egin du. Ziurrenik AllowOverride ez da jarri Elggen karpeta Guztientzat. Honekin, Apachek ez ditu rewrite arauak ezartzen dituzten .htaccess fitxategiak prozesatzen.
+
+
+Izan daiteke ere zure Elgg karpeta alias batekin ezarri izana Apachen eta RewriteBase zure .htaccess fitxategian jarri behar izatea. Argibide gehiago aurkituko dituzu zure Elgg karpetaren .htaccess fitxategian.',
+ 'install:error:rewrite:htaccess:write_permission' => 'Zure web zerbitzariak ez du baimenik .htaccess fitxategia sortzeko Elggen karpetan. htaccess_dist fitxategia .htaccess bezala kopiatu beharko duzu edo karpetan baimenak aldatu beharko dituzu.',
+ 'install:error:rewrite:htaccess:read_permission' => 'Ba da .htaccess fitxategirik Elggen karpetan, baina zure web zerbitzariak ez du berau irakurtzeko baimenik.',
+ 'install:error:rewrite:htaccess:non_elgg_htaccess' => 'Ba da Elggek sortu ez duen .htaccess fitxategi bat Elggen karpetan. Mesedez, ezabatu ezazu.',
+ 'install:error:rewrite:htaccess:old_elgg_htaccess' => 'Badirudi Elggen karpetan .htaccess fitxategi zahar bat dagoela. Web zerbitzaria probatzeko behar diren rewrite araurik ez dago bertan.',
+ 'install:error:rewrite:htaccess:cannot_copy' => 'Errore ezezaguna gertatu da .htaccess fitxategia sortzean. htaccess_dist fitxategia .htaccess bezala kopiatu beharko duzu Elggen karpetan.',
+ 'install:error:rewrite:altserver' => 'Rewrite arauen probak huts egin du. Zure web zerbitzaria Elggen rewrite arauekin konfiguratu beharko duzu eta berriz ere probatu.',
+ 'install:error:rewrite:unknown' => 'Ezin izan dugu zure zerbitzariak zein web zerbitzari darabilen igarri eta rewrite arauek huts egin dute. Ezin dugu aholku zehatzik eskaini. Begiratu mesedez arazoak konpontzeko esteka.',
+ 'install:warning:rewrite:unknown' => 'Zure zerbitzariak ez du rewrite arauak automatikoki probatzeko euskarririk. Instalazioarekin aurrera egin dezakezu, baina zure gunearekin arazoak izan ditzakezu. Rewrite arauak proba ditzakezu esteka honetan klik eginez: <a href="%s" target="_blank">proba</a>. Arrakasta hitzak ikusiko duzu arauak lanean badira.',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.invitefriends.php b/mod/languages/languages/eu/eu.invitefriends.php
new file mode 100644
index 000000000..eb59187f9
--- /dev/null
+++ b/mod/languages/languages/eu/eu.invitefriends.php
@@ -0,0 +1,29 @@
+<?php
+$basque=array (
+ 'friends:invite' => 'Lagunak gonbidatu',
+ 'invitefriends:registration_disabled' => 'Erabiltzaile berrien erregistroa ezgaitu egin da gune honetan; ezin duzu erabiltzaile berririk gonbidatu.',
+ 'invitefriends:introduction' => 'Sare honetara lagunak gonbidatzeko, sartu beraien posta elektronikoak azpian (helbide bat lerroko):',
+ 'invitefriends:message' => 'Sartu zure lagunek jasoko duten gonbidapen testua:',
+ 'invitefriends:subject' => '%s-(e)n sartzeko gonbidapena',
+ 'invitefriends:success' => 'Zure lagunek gonbidatuak izan dira.',
+ 'invitefriends:invitations_sent' => 'Bidalitako gonbidapenak: %s. Arazo hauek eman dira:',
+ 'invitefriends:email_error' => 'Ondorengo helbide hauek ez dira egokiak: %s',
+ 'invitefriends:already_members' => 'Ondorengo hauek dagoeneko taldekide dira: %s',
+ 'invitefriends:noemails' => 'Ez da e-posta helbiderik sartu.',
+ 'invitefriends:message:default' => '
+Kaixo,
+
+Nire sarea den %s-(e)n sartzeko gonbida luzatu nahi dizut.',
+ 'invitefriends:email' => '
+%s sarean sartzeko gonbidapena luzatu dizu %s -(e)k. Mezu hau bidali nahi dizu:
+
+%s
+
+Sartzeko, egin klik esteka honetan:
+
+%s
+
+Automatikoki zure lagun moduan ageriko da kontua sortzen duzunean.',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.likes.php b/mod/languages/languages/eu/eu.likes.php
new file mode 100644
index 000000000..98e1e8116
--- /dev/null
+++ b/mod/languages/languages/eu/eu.likes.php
@@ -0,0 +1,35 @@
+<?php
+$basque=array (
+ 'likes:this' => 'Gustokoa du',
+ 'likes:deleted' => 'Zure gustokoa ezabatu da',
+ 'likes:see' => 'Ikusi nork duen hau gustoko',
+ 'likes:remove' => 'Gustokoa kendu',
+ 'likes:notdeleted' => 'Zure gustokoa kentzerakoan arazoa egon da',
+ 'likes:likes' => 'Item hau gustokoa duzu orain',
+ 'likes:failure' => 'Item hau gustokoa duzula ezartzean arazoa egon da',
+ 'likes:alreadyliked' => 'Dagoeneko gustokoa duzu item hau',
+ 'likes:notfound' => 'Gustokoa bihurtu nahi duzun itema ezin da aurkitu',
+ 'likes:likethis' => 'Gustokoa egin',
+ 'likes:userlikedthis' => '%s-(e)k gustokoa du',
+ 'likes:userslikedthis' => '%s-(e)k gustokoa du',
+ 'likes:river:annotate' => 'gustokoak',
+ 'river:likes' => 'gustokoa %s %s',
+ 'likes:notifications:subject' => '%s-(e)k gustokoa du zure mezua: "%s"',
+ 'likes:notifications:body' => 'Kaixo %1$s,
+
+%2$s-(e)k gustokoa du zure mezua: "%3$s" %4$s-(e)n
+
+Ikusi zure jatorrizko mezua hemen:
+
+%5$s
+
+edo ikusi %2$s-(r)en profila hemen:
+
+%6$s
+
+Eskerrik asko,
+%4$s
+',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.logbrowser.php b/mod/languages/languages/eu/eu.logbrowser.php
new file mode 100644
index 000000000..7ca170193
--- /dev/null
+++ b/mod/languages/languages/eu/eu.logbrowser.php
@@ -0,0 +1,21 @@
+<?php
+$basque=array (
+ 'admin:administer_utilities:logbrowser' => 'Log nabigatzailea',
+ 'logbrowser' => 'Log nabigatzailea',
+ 'logbrowser:browse' => 'Sistemaren logean zehar nabigatu',
+ 'logbrowser:search' => 'Emaitzak findu',
+ 'logbrowser:user' => 'Bilaketarako erabiltzaile izena',
+ 'logbrowser:starttime' => 'Hasiera-data (adibidez "pasa den astelehenean", "orain dela ordu 1")',
+ 'logbrowser:endtime' => 'Bukaera-data',
+ 'logbrowser:explore' => 'Loga esploratu',
+ 'logbrowser:date' => 'Data eta ordua',
+ 'logbrowser:ip_address' => 'IP helbidea',
+ 'logbrowser:user:name' => 'Erabiltzailea',
+ 'logbrowser:user:guid' => 'Erabiltzailearen GUID',
+ 'logbrowser:object' => 'Objektu mota',
+ 'logbrowser:object:guid' => 'Objektuaren GUID',
+ 'logbrowser:action' => 'Ekintza',
+ 'logbrowser:no_result' => 'Emaitzik ez',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.logrotate.php b/mod/languages/languages/eu/eu.logrotate.php
new file mode 100644
index 000000000..1bc4dd166
--- /dev/null
+++ b/mod/languages/languages/eu/eu.logrotate.php
@@ -0,0 +1,21 @@
+<?php
+$basque=array (
+ 'logrotate:period' => 'Zein maiztasunez artxibatu behar da sistemaren loga?',
+ 'logrotate:weekly' => 'Astean behin',
+ 'logrotate:monthly' => 'Hilean behin',
+ 'logrotate:yearly' => 'Urtean behin',
+ 'logrotate:logrotated' => 'Loga biratua
+',
+ 'logrotate:lognotrotated' => 'Errorea loga biratzean
+',
+ 'logrotate:delete' => 'Ezabatu hau baino zaharrado diren artxibatutako logak: ',
+ 'logrotate:week' => 'astea',
+ 'logrotate:month' => 'hilabetea',
+ 'logrotate:year' => 'urtea',
+ 'logrotate:logdeleted' => 'Loga ezabatua
+',
+ 'logrotate:lognotdeleted' => 'Errorea loga ezabatzean
+',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.members.php b/mod/languages/languages/eu/eu.members.php
new file mode 100644
index 000000000..bb90e5c19
--- /dev/null
+++ b/mod/languages/languages/eu/eu.members.php
@@ -0,0 +1,12 @@
+<?php
+$basque=array (
+ 'members:label:newest' => 'Berrienak',
+ 'members:label:popular' => 'Ezagunenak',
+ 'members:label:online' => 'Online',
+ 'members:searchname' => 'Erabiltzaileak izenez bilatu',
+ 'members:searchtag' => 'Erabiltzaileak etiketa bidez bilatu',
+ 'members:title:searchname' => 'Erabiltzaile bilaketa %s-(r)entzat',
+ 'members:title:searchtag' => '%s etiketa duten erabiltzaileak',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.messageboard.php b/mod/languages/languages/eu/eu.messageboard.php
new file mode 100644
index 000000000..0edad152e
--- /dev/null
+++ b/mod/languages/languages/eu/eu.messageboard.php
@@ -0,0 +1,42 @@
+<?php
+$basque=array (
+ 'messageboard:board' => 'Mezu-taula',
+ 'messageboard:messageboard' => 'mezu-taula',
+ 'messageboard:viewall' => 'Ikusi dena',
+ 'messageboard:postit' => 'Bidali',
+ 'messageboard:history:title' => 'Historia',
+ 'messageboard:none' => 'Oraindik ez dago ezer mezu-taula honetan',
+ 'messageboard:num_display' => 'Erakutsiko diren mezu kopurua',
+ 'messageboard:desc' => 'Hau zure profilean ipini dezakezun mezu-taula da, non beste erabiltzaileek iruzkinak idazteko aukera duten.',
+ 'messageboard:user' => '%s-(r)en mezu-taula',
+ 'messageboard:replyon' => 'Erantzuna hemen',
+ 'messageboard:history' => 'historikoa',
+ 'messageboard:owner' => '%s-(r)en mezu-taula',
+ 'messageboard:owner_history' => '%s-(r)en mezuak %s-(r)en mezu-taulan',
+ 'river:messageboard:user:default' => '%s-(e) mezua jarri du %s-(r)en mezu-taulan',
+ 'messageboard:posted' => 'Zure mezua mezu-taulara bidali da.',
+ 'messageboard:deleted' => 'Mezua ezabatu duzu.',
+ 'messageboard:email:subject' => 'Iruzkin berria duzu mezu-taulan!',
+ 'messageboard:email:body' => '%-(e)k iruzkin berria idatzi du zure mezu-taulan. Hau dio:
+
+
+%s
+
+
+Zure mezu-tauleko iruzkinak ikusteko egin klik hemen:
+
+ %s
+
+%s-(r)en profila ikusteko egin klik hemen:
+
+ %s
+
+Ez erantzun posta elektroniko honi.',
+ 'messageboard:blank' => 'Barkatu; zerbait idatzi behar duzu mezu gunean gorde ahal izateko.',
+ 'messageboard:notfound' => 'Barkatu; ezin izan dugu emandako elementua aurkitu.',
+ 'messageboard:notdeleted' => 'Barkatu; ezin izan dugu mezu hau ezabatu.',
+ 'messageboard:somethingwentwrong' => 'Zerbait gaizki joan da zure mezua gordetzerakoan, ziurtatu mezua ondo idatzi duzula.',
+ 'messageboard:failure' => 'Espero ez zen errore bat gertatu da mezua gehitzerakoan. Saiatu berriro, mesedez.',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.messages.php b/mod/languages/languages/eu/eu.messages.php
new file mode 100644
index 000000000..83f487101
--- /dev/null
+++ b/mod/languages/languages/eu/eu.messages.php
@@ -0,0 +1,65 @@
+<?php
+$basque=array (
+ 'messages' => 'Mezuak',
+ 'messages:unreadcount' => '%s irakurri gabe',
+ 'messages:back' => 'itzuli mezuetara',
+ 'messages:user' => '%s-(r)en sarrera ontzia',
+ 'messages:posttitle' => '%s-(r)en mezuak: %s',
+ 'messages:inbox' => 'Sarrera ontzia',
+ 'messages:send' => 'Bidali',
+ 'messages:sent' => 'Bidalitakoak',
+ 'messages:message' => 'Mezua',
+ 'messages:title' => 'Gaia',
+ 'messages:to' => 'Nori',
+ 'messages:from' => 'Nork',
+ 'messages:fly' => 'Bidali',
+ 'messages:replying' => 'Honi erantzunez',
+ 'messages:sendmessage' => 'Mezua bidali',
+ 'messages:compose' => 'Mezua sortu',
+ 'messages:add' => 'Mezua sortu',
+ 'messages:sentmessages' => 'Bidalitako mezuak',
+ 'messages:recent' => 'Mezu berriak',
+ 'messages:original' => 'Jatorrizko mezua',
+ 'messages:yours' => 'Zure mezua',
+ 'messages:answer' => 'Erantzun',
+ 'messages:toggle' => 'Txandakatu guztiak',
+ 'messages:markread' => 'Irakurria bezala markatu',
+ 'messages:recipient' => 'Hautatu hartzailea&hellip;',
+ 'messages:to_user' => 'Nori: %s',
+ 'messages:new' => 'Mezu berria',
+ 'notification:method:site' => 'Gunea',
+ 'messages:error' => 'Arazo bat egon da zure mezua gordetzean. Mesedez saiatu berriro.',
+ 'item:object:messages' => 'Mezuak',
+ 'messages:posted' => 'Zure mezua bidali da.',
+ 'messages:success:delete:single' => 'Mezua ezabatu da',
+ 'messages:success:delete' => 'Mezuak ezabatu dira',
+ 'messages:success:read' => 'Mezuak irakurriak bezala markatu dira',
+ 'messages:error:messages_not_selected' => 'Ez da mezurik hautatu',
+ 'messages:error:delete:single' => 'Ezin izan da mezua ezabatu',
+ 'messages:email:subject' => 'Mezu berria duzu!',
+ 'messages:email:body' => '%s-(e)k mezu berri bat bidali dizu. Hau dio:
+
+
+ %s
+
+
+ Zure mezuak ikusteko egin klik hemen:
+
+ %s
+
+ %s-(r)i mezu bat bidaltzeko egin klik hemen:
+
+ %s
+
+ Ez erantzun posta elektroniko honi.',
+ 'messages:blank' => 'Barkatu; gorder ahal izateko, zerbait idatzi behar duzu mezuaren gorputzean.',
+ 'messages:notfound' => 'Barkatu; ezin izan dugu esandako mezua aurkitu.',
+ 'messages:notdeleted' => 'Barkatu; ezin izan dugu mezu hau ezabatu.',
+ 'messages:nopermission' => 'Ez duzu mezua aldatzeko baimenik.',
+ 'messages:nomessages' => 'Ez dago mezurik.',
+ 'messages:user:nonexist' => 'Ezin izan dugu hartzailea aurkitu erabiltzaileen datu basean.',
+ 'messages:user:blank' => 'Ez duzu hau nori bidali hautatu.',
+ 'messages:deleted_sender' => 'Ezabatutako erabiltzailea',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.notifications.php b/mod/languages/languages/eu/eu.notifications.php
new file mode 100644
index 000000000..4e63401da
--- /dev/null
+++ b/mod/languages/languages/eu/eu.notifications.php
@@ -0,0 +1,17 @@
+<?php
+$basque=array (
+ 'friends:all' => 'Lagun guztiak',
+ 'notifications:subscriptions:personal:description' => 'Jakinarazpenak jaso zure edukietan ekintzarik gertatuz gero.',
+ 'notifications:subscriptions:personal:title' => 'Jakinarazpen pertsonalak',
+ 'notifications:subscriptions:friends:title' => 'Lagunak',
+ 'notifications:subscriptions:friends:description' => 'Hurrengoa zure lagunekin automatikoki osatutako bilduma da. Jakinarazpenak jasotzeko, hautatu azpian. Honek orriaren azpialdean erakusten den jakinarazpen arbel nagusian eragina izango du hautatutako erabiltzaileengan. ',
+ 'notifications:subscriptions:collections:edit' => 'Zure partekatutako jakinarazpenak editatzeko, klik egin hemen.',
+ 'notifications:subscriptions:changesettings' => 'Jakinarazpenak',
+ 'notifications:subscriptions:changesettings:groups' => 'Talde jakinarazpenak',
+ 'notifications:subscriptions:title' => 'Jakinarazpenak erabiltzaileko',
+ 'notifications:subscriptions:description' => 'Zure lagunek eduki berria sortzean jakinarazpenak jaso nahi badituzu, bilatu itzazu hemen eta aukeratu jakinarazpenak jasotzeko modua.',
+ 'notifications:subscriptions:groups:description' => 'Taldekide zaren talde batean eduki berria gehitzean jakinarazpenak jaso nahi badituzu, bilatu taldea eta aukeratu jakinarazpenak jasotzeko modua.',
+ 'notifications:subscriptions:success' => 'Zure jakinarazpen ezarpenak gorde dira.',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.pages.php b/mod/languages/languages/eu/eu.pages.php
new file mode 100644
index 000000000..f6a8f822f
--- /dev/null
+++ b/mod/languages/languages/eu/eu.pages.php
@@ -0,0 +1,62 @@
+<?php
+$basque=array (
+ 'pages' => 'Orriak',
+ 'pages:owner' => '%s-(r)en orriak',
+ 'pages:friends' => 'Lagunen orriak',
+ 'pages:all' => 'Gune osoko orriak',
+ 'pages:add' => 'Orria gehitu',
+ 'pages:group' => 'Taldeko orriak',
+ 'groups:enablepages' => 'Baimendu talde orriak',
+ 'pages:edit' => 'Orri hau editatu',
+ 'pages:delete' => 'Orri hau ezabatu',
+ 'pages:history' => 'historia',
+ 'pages:view' => 'Orria ikusi',
+ 'pages:revision' => 'Berrikuspena',
+ 'pages:navigation' => 'Nabigazioa',
+ 'pages:new' => 'Orri berria',
+ 'pages:notification' => '%s-ek orri berria sortu du:
+
+%s
+%s
+
+Ikusi eta utzi zure iruzkina orri berrian:
+%s
+',
+ 'item:object:page_top' => 'Goi mailako orriak',
+ 'item:object:page' => 'Orriak',
+ 'pages:nogroup' => 'Talde honez ez du oraindik inongo orririk',
+ 'pages:more' => 'Orri gehiago',
+ 'pages:none' => 'Ez da orririk sortu oraindik',
+ 'river:create:object:page' => '%s-(e)k %s orria sortu du',
+ 'river:create:object:page_top' => '%s-(e)k %s orria sortu du',
+ 'river:update:object:page' => '%s-(e)k %s orria eguneratu du',
+ 'river:update:object:page_top' => '%s-(e)k %s orria eguneratu du',
+ 'river:comment:object:page' => '%s-(e)k iruzkina jarri du %s tituludun orrian',
+ 'river:comment:object:page_top' => '%s-(e)k iruzkina jarri du %s tituludun orrian',
+ 'pages:title' => 'Orri izenbura',
+ 'pages:description' => 'Orri edukia',
+ 'pages:tags' => 'Etiketak',
+ 'pages:access_id' => 'Irakurtzeko sarbidea',
+ 'pages:write_access_id' => 'Idazteko sarbidea',
+ 'pages:noaccess' => 'Orrira sarbiderik ez',
+ 'pages:cantedit' => 'Ezin duzu orri hau editatu',
+ 'pages:saved' => 'Orria gord da',
+ 'pages:notsaved' => 'Ezin izan da orria gorde',
+ 'pages:error:no_title' => 'Orri honentzat izenburua eman behar duzu.',
+ 'pages:delete:success' => 'Orria ongi ezabatu da.',
+ 'pages:delete:failure' => 'Ezin izan da orria ezabatu',
+ 'pages:strapline' => 'Azken eguneraketa %s, honek egina: %s',
+ 'pages:revision:subtitle' => 'Berrikuspena sotua %s, honek egina: %s',
+ 'pages:num' => 'Erakutsiko den orri kopurua',
+ 'pages:widget:description' => 'Hau zure orri zerrenda da.',
+ 'pages:label:view' => 'Orria ikusi',
+ 'pages:label:edit' => 'Orria editatu',
+ 'pages:label:history' => 'Orri historia',
+ 'pages:sidebar:this' => 'Orri hau',
+ 'pages:sidebar:children' => 'Azpiorriak',
+ 'pages:sidebar:parent' => 'Gurasoa',
+ 'pages:newchild' => 'Azpiorri bat sortu',
+ 'pages:backtoparent' => 'Atzera \'%s\'-(r)a',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.profile.php b/mod/languages/languages/eu/eu.profile.php
new file mode 100644
index 000000000..b44c7cbfd
--- /dev/null
+++ b/mod/languages/languages/eu/eu.profile.php
@@ -0,0 +1,7 @@
+<?php
+$basque=array (
+ 'profile' => 'Profila',
+ 'profile:notfound' => 'Barkatu. Ezin izan dugu eskatutako profila aurkitu.',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.reportedcontent.php b/mod/languages/languages/eu/eu.reportedcontent.php
new file mode 100644
index 000000000..84377e78d
--- /dev/null
+++ b/mod/languages/languages/eu/eu.reportedcontent.php
@@ -0,0 +1,35 @@
+<?php
+$basque=array (
+ 'item:object:reported_content' => 'Salatutako elementuak',
+ 'admin:administer_utilities:reportedcontent' => 'Salatutako edukia',
+ 'reportedcontent' => 'Salatutako edukia',
+ 'reportedcontent:this' => 'Salaketa egin',
+ 'reportedcontent:this:tooltip' => 'Salatu hau kudeatzaileari',
+ 'reportedcontent:none' => 'Ez dago salatutako edukirik',
+ 'reportedcontent:report' => 'Salaketa egin',
+ 'reportedcontent:title' => 'Orriaren izenburua',
+ 'reportedcontent:deleted' => 'Salatutako edukia ezabatu egin da',
+ 'reportedcontent:notdeleted' => 'Ezin izan dugu salaketa ezabatu',
+ 'reportedcontent:delete' => 'Ezabatu salaketa',
+ 'reportedcontent:areyousure' => 'Ziur ezabatu nahi duzula?',
+ 'reportedcontent:archive' => 'Salaketa artxibatu',
+ 'reportedcontent:archived' => 'Salaketa artxibatu egin da',
+ 'reportedcontent:visit' => 'Bisitatu salatutako elementua',
+ 'reportedcontent:by' => 'Nork salatu du:',
+ 'reportedcontent:objecttitle' => 'Orriaren izenburua',
+ 'reportedcontent:objecturl' => 'Orriaren URLa',
+ 'reportedcontent:reason' => 'Salaketa egiteko arrazoia',
+ 'reportedcontent:description' => 'Zergatik ari zara hau salaketzen?',
+ 'reportedcontent:address' => 'Elementuaren kokapena',
+ 'reportedcontent:success' => 'Zure salaketa gunearen kudeatzaileari bidali zaio',
+ 'reportedcontent:failing' => 'Ezin izan da zure salaketa bidali',
+ 'reportedcontent:moreinfo' => 'Informazio gehiago',
+ 'reportedcontent:instructions' => 'Salaketa hau guneko administratzaileari bidaliko zaio, berak berrikusi dezan.',
+ 'reportedcontent:numbertodisplay' => 'Erakutsiko diren salaketa kopurua',
+ 'reportedcontent:widget:description' => 'Erakutsi salatutako edukia',
+ 'reportedcontent:user' => 'Salatu erabiltzailea',
+ 'reportedcontent:failed' => 'Barkatu, eduki hau salatzeko saiakerak huts egin du.',
+ 'reportedcontent:notarchived' => 'Ezin izan dugu salaketa artxibatu',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.search.php b/mod/languages/languages/eu/eu.search.php
new file mode 100644
index 000000000..6fa2d2a88
--- /dev/null
+++ b/mod/languages/languages/eu/eu.search.php
@@ -0,0 +1,17 @@
+<?php
+$basque=array (
+ 'search:enter_term' => 'Sartu bilaketarako hitza:',
+ 'search:no_results' => 'Emaitzarik ez.',
+ 'search:matched' => 'Aurkituak:',
+ 'search:results' => 'Emaitzak honentzat: %s',
+ 'search:no_query' => 'Mesedez, sartu bilatzeko hitza.',
+ 'search:search_error' => 'Errorea',
+ 'search:more' => '+%s gehiago %s',
+ 'search_types:tags' => 'Etiketak',
+ 'search_types:comments' => 'Iruzkinak',
+ 'search:comment_on' => 'Iruzkinak "%s"-(r)entzat',
+ 'search:comment_by' => 'egilea:',
+ 'search:unavailable_entity' => 'Enitate ez erabilgarria',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.tagcloud.php b/mod/languages/languages/eu/eu.tagcloud.php
new file mode 100644
index 000000000..47c82cfcf
--- /dev/null
+++ b/mod/languages/languages/eu/eu.tagcloud.php
@@ -0,0 +1,8 @@
+<?php
+$basque=array (
+ 'tagcloud:widget:title' => 'Etiketa Lainoa',
+ 'tagcloud:widget:description' => 'Etiketa lainoa',
+ 'tagcloud:widget:numtags' => 'Erakutsiko diren etiketa kopurua',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.thewire.php b/mod/languages/languages/eu/eu.thewire.php
new file mode 100644
index 000000000..2ef2b06a7
--- /dev/null
+++ b/mod/languages/languages/eu/eu.thewire.php
@@ -0,0 +1,35 @@
+<?php
+$basque=array (
+ 'thewire' => 'Haria',
+ 'thewire:everyone' => 'Hariko mezu guztiak',
+ 'thewire:user' => '%s-(r)en hari mezuak',
+ 'thewire:friends' => 'Lagunen mezuak harian',
+ 'thewire:reply' => 'Erantzun',
+ 'thewire:replying' => '%s-(r)i erantzunez (@%s), zeinek idatzu zuen',
+ 'thewire:thread' => 'Haria',
+ 'thewire:charleft' => 'karaktere erabilgarri',
+ 'thewire:tags' => '\'%s\' etiketa duten hariko mezuak',
+ 'thewire:noposts' => 'Ez da hariko mezurik',
+ 'item:object:thewire' => 'Hariko mezuak',
+ 'thewire:update' => 'Eguneratu',
+ 'thewire:by' => '%s-(e)k sortutako hari mezuak',
+ 'thewire:previous' => 'Aurrekoak',
+ 'thewire:hide' => 'Ezkutatu',
+ 'thewire:previous:help' => 'Ikusi aurreko mezuak',
+ 'thewire:hide:help' => 'Ezkutatu aurreko mezuak',
+ 'river:create:object:thewire' => '%s-(e)k mezua utzi du hemen: %s',
+ 'thewire:wire' => 'Haria',
+ 'thewire:widget:desc' => 'Erakutsi zure azken hari mezuak',
+ 'thewire:num' => 'Erakutsiko diren mezu kopurua',
+ 'thewire:moreposts' => 'Hari mezu gehiago',
+ 'thewire:posted' => 'Zure mezua ondo argitaratu da harian.',
+ 'thewire:deleted' => 'Hari mezua ondo ezabatu da.',
+ 'thewire:blank' => 'Barkatu; zerbait jarri behar duzu mezuan bidali ahal izateko.',
+ 'thewire:notfound' => 'Barkatu; ezin izan dugu eskatutako hari-mezua aurkitu.',
+ 'thewire:notdeleted' => 'Barkatu; ezin izan dugu eskatutako hari-mezua ezabatu.',
+ 'thewire:notify:subject' => 'Hari mezu berria',
+ 'thewire:notify:reply' => '%s-(e)k %s-(r)i emandako erantzuna harian:',
+ 'thewire:notify:post' => '%s-(e)k mezua jarri du harian:',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.tinymce.php b/mod/languages/languages/eu/eu.tinymce.php
new file mode 100644
index 000000000..bdae4b62e
--- /dev/null
+++ b/mod/languages/languages/eu/eu.tinymce.php
@@ -0,0 +1,8 @@
+<?php
+$basque=array (
+ 'tinymce:remove' => 'Editorea kendu',
+ 'tinymce:add' => 'Editorea jarri',
+ 'tinymce:word_count' => 'Hitz kopurua: ',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.twitter.php b/mod/languages/languages/eu/eu.twitter.php
new file mode 100644
index 000000000..43bfc0353
--- /dev/null
+++ b/mod/languages/languages/eu/eu.twitter.php
@@ -0,0 +1,11 @@
+<?php
+$basque=array (
+ 'twitter:title' => 'Twitter',
+ 'twitter:info' => 'Erakutsi zure azken tweetak',
+ 'twitter:username' => 'Zure twitter erabiltzailea sartu.',
+ 'twitter:num' => 'Erakutsiko diren tweet kopurua.',
+ 'twitter:visit' => 'Nire twitter bisitatu',
+ 'twitter:notset' => 'Twitter widget hau ez dago prest oraindik. Zure azken twitter mezuak erakusteko, editatu botoian klik egin eta bete zure datuak',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.twitter_api.php b/mod/languages/languages/eu/eu.twitter_api.php
new file mode 100644
index 000000000..428d90533
--- /dev/null
+++ b/mod/languages/languages/eu/eu.twitter_api.php
@@ -0,0 +1,40 @@
+<?php
+$basque=array (
+ 'twitter_api' => 'Twitter Zerbitzuak',
+ 'twitter_api:requires_oauth' => 'Twitter Zerbitzuak OAuth liburutegi plugina gaituta izatea eskatzen du.',
+ 'twitter_api:consumer_key' => 'Kontsumatzailearen Gakoa',
+ 'twitter_api:consumer_secret' => 'Kontsumatzailearen Pasahitza',
+ 'twitter_api:settings:instructions' => 'Ondorengo webgune honetatik lortu behar dituzu giltza eta pasahitza: <a href="https://dev.twitter.com/apps/new" target="_blank">Twitter</a>. Bete aplikazio berria sortzeko aplikazioa. Hautatu "Browser" aplikazio mota beza eta eman "Read & Write" atzipen modu gisa. Callback url-a hau da: %stwitter_api/authorize',
+ 'twitter_api:usersettings:description' => 'Lotu zure %s kontua Twitterrekin.',
+ 'twitter_api:usersettings:request' => 'Hasteko, <a href="%s">baimendu</a> %s zure Twitter kontua atzitzeko.',
+ 'twitter_api:usersettings:cannot_revoke' => 'Ezin duzu zure kontuak Twitterrekin duen lotura eten, ez duzulako eposta helbide edo pasahitza eman. <a href="%s">Eman orain</a>.]]',
+ 'twitter_api:authorize:error' => 'Ezin izan da Twitter baimendu.',
+ 'twitter_api:authorize:success' => 'Twitterrera atzipena onartua izan da.',
+ 'twitter_api:usersettings:authorized' => '%s baimendu duzu zure @%s Twitter kontua atzitzeko.',
+ 'twitter_api:usersettings:revoke' => 'Klik egin <a href="%s">hemen</a> atzipena ezeztatzeko.',
+ 'twitter_api:usersettings:site_not_configured' => 'Administratzaile batek, Twitter erabili ahal izateko, berau konfiguratu behar du lehenik eta behin.',
+ 'twitter_api:revoke:success' => 'Twitterrera atzipena ezeztatu da.',
+ 'twitter_api:login' => 'Twitter kontua konfiguratu duten erabiltzaileei Twitter erabiliz saioa hastea baimendu?',
+ 'twitter_api:new_users' => 'Erabiltzaile berriak Twitter kontua erabiliz saioa hastea baimendu nahiz eta erabiltzaile erregistroa ezgaitua egon?',
+ 'twitter_api:login:success' => 'Saioa hasi duzu.',
+ 'twitter_api:login:error' => 'Ezin izan da Twitter erabiliz saioa hasi.',
+ 'twitter_api:login:email' => 'Eposta helbide baliozko bat sartu behar duzu zure %s kontu berrirako.',
+ 'twitter_api:invalid_page' => 'Orri baliogabea',
+ 'twitter_api:deprecated_callback_url' => 'Twitter APIaren callback url-a berria hau da: %s. Mesedez, eskatu zure administratzaileari aldatu dezala.',
+ 'twitter_api:interstitial:settings' => 'Konfiguratu zure ezarpenak',
+ 'twitter_api:interstitial:description' => '%s erabiltzeko ia prest zaude! Xehetasun gutxi batzuk gehiago behar ditugu aurrera egin baino lehen. Aukerakoak dira, baina Twitter jausi edo zure kontuak deskonektatzea erabakitzen baduzu, saioa hastea ahalbideratuko dizute.',
+ 'twitter_api:interstitial:username' => 'Hau zure erabiltzaile izena da. Ezin izango duzu aldatu. Pasahitza ezarrita, erabiltzaile izen edo posta helbidea erabili ditzakezu saioa hasteko.',
+ 'twitter_api:interstitial:name' => 'Hau da jendeak zurekin harremanak izatean ikusiko duen izena.',
+ 'twitter_api:interstitial:email' => 'Zure posta helbidea. Erabiltzaileek ezin dute hau ikusi modu lehenetsian.',
+ 'twitter_api:interstitial:password' => 'Twitter jausi edo zure kontuak deskonektatzea erabakitzen baduzu, saioa hasteko pasahitza.',
+ 'twitter_api:interstitial:password2' => 'Pasahitz berdina, berriz.',
+ 'twitter_api:interstitial:no_thanks' => 'Ez, eskerrik asko',
+ 'twitter_api:interstitial:no_display_name' => 'Bistaratze izen bat izan behar duzu.',
+ 'twitter_api:interstitial:invalid_email' => 'Eposta helbide baliogarri bat edo hutsik utzi eremua',
+ 'twitter_api:interstitial:existing_email' => 'Eposta helbide hau gune honetan erregistratua dago jada.',
+ 'twitter_api:interstitial:password_mismatch' => 'Zure pasahitzak ez datoz bat.',
+ 'twitter_api:interstitial:cannot_save' => 'Ezin izan dira kontu xehetasuank gorde.',
+ 'twitter_api:interstitial:saved' => 'Kontuaren xehetasunak gorde dira!',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/eu/eu.uservalidationbyemail.php b/mod/languages/languages/eu/eu.uservalidationbyemail.php
new file mode 100644
index 000000000..6a8182599
--- /dev/null
+++ b/mod/languages/languages/eu/eu.uservalidationbyemail.php
@@ -0,0 +1,50 @@
+<?php
+$basque=array (
+ 'admin:users:unvalidated' => 'Balidatu gabeak',
+ 'email:validate:subject' => '%s, mesedez, egiaztatu zure posta elektroniko helbidea, %s -(r)entzat!',
+ 'email:validate:body' => '%s,
+
+%s erabiltzen hasi aurretik, zure eposta helbidea berretsi behar duzu.
+
+Mesedez, berretsi zure eposta helbidea, azpian dagoen estekan klik eginez:
+
+%s
+
+Ezin baduzu estekan klik egin, kopia eta itsatsi ezazu zure nabigatzailean eskuz.
+
+%s
+%s
+',
+ 'email:confirm:success' => 'Zure posta elektroniko helbidea egiaztatu duzu!',
+ 'email:confirm:fail' => 'Ezin izan da egiaztatu zure posta helbide elektronikoa...',
+ 'uservalidationbyemail:registerok' => 'Zure kontua aktibatzeko, bidali dizugun estekan klik eginez, egiaztatu zure posta elektroniko helbidea.',
+ 'uservalidationbyemail:login:fail' => 'Zure kontua ez dago balidatua, saiakera logak horrela erakusten duenez. Beste balidazio posta mezu bat bidali da.',
+ 'uservalidationbyemail:admin:no_unvalidated_users' => 'Ez dago balidatu ez den erabiltzailerik.',
+ 'uservalidationbyemail:admin:unvalidated' => 'Balidatu gabekoak',
+ 'uservalidationbyemail:admin:user_created' => 'Erregistratua %s',
+ 'uservalidationbyemail:admin:resend_validation' => 'Egiaztapena berriz ere bidali',
+ 'uservalidationbyemail:admin:validate' => 'Balidatu',
+ 'uservalidationbyemail:admin:delete' => 'Ezabatu',
+ 'uservalidationbyemail:confirm_validate_user' => 'Balidatu %s?',
+ 'uservalidationbyemail:confirm_resend_validation' => 'Berriz ere balidazio mezua bidali %s -(r)i?',
+ 'uservalidationbyemail:confirm_delete' => 'Ezabatu %s?',
+ 'uservalidationbyemail:confirm_validate_checked' => 'Balidatu hautatutako erabiltzaileak?',
+ 'uservalidationbyemail:confirm_resend_validation_checked' => 'Berriz ere balidazioa bidali hautatutako erabiltzaileei?',
+ 'uservalidationbyemail:confirm_delete_checked' => 'Ezabatu hautatutako erabiltzaileak?',
+ 'uservalidationbyemail:check_all' => 'Guztiak',
+ 'uservalidationbyemail:errors:unknown_users' => 'Erabiltzaile ezezagunak',
+ 'uservalidationbyemail:errors:could_not_validate_user' => 'Ezin izan da erabiltzailea balidatu.',
+ 'uservalidationbyemail:errors:could_not_validate_users' => 'Ezin izan dira hautatutako erabiltzaile guztiak balidatu.',
+ 'uservalidationbyemail:errors:could_not_delete_user' => 'Ezin izan da erabiltzailea ezabatu.',
+ 'uservalidationbyemail:errors:could_not_delete_users' => 'Ezin izan dira hautatutako erabiltzaile guztiak ezabatu.',
+ 'uservalidationbyemail:errors:could_not_resend_validation' => 'Ezin izan da balidazio eskaera berriz ere bidali.',
+ 'uservalidationbyemail:errors:could_not_resend_validations' => 'Ezin izan dira hautatutako erabiltzaile guztiei balidazio eskaerak berriz ere bidali.',
+ 'uservalidationbyemail:messages:validated_user' => 'Erabiltzailea balidatu da.',
+ 'uservalidationbyemail:messages:validated_users' => 'Hautatutako erabiltzaile guztiak balidatu dira.',
+ 'uservalidationbyemail:messages:deleted_user' => 'Erabiltzailea ezabatu da.',
+ 'uservalidationbyemail:messages:deleted_users' => 'Hautatutako erabiltzaile guztiak ezabatu dira.',
+ 'uservalidationbyemail:messages:resent_validation' => 'Balidazio eskaera birbidali da.',
+ 'uservalidationbyemail:messages:resent_validations' => 'Balidazio eskaerak hautatutako erabiltzaile guztiei birbidali zaizkie.',
+);
+
+add_translation("eu", $basque); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.blog.php b/mod/languages/languages/fr/fr.blog.php
new file mode 100644
index 000000000..c22a064ca
--- /dev/null
+++ b/mod/languages/languages/fr/fr.blog.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Blog English language file.
+ *
+ */
+
+$french = array(
+ 'blog' => "Blogs",
+ 'blog:blogs' => "Blogs",
+ 'blog:revisions' => "Révisions",
+ 'blog:archives' => "Archives",
+ 'blog:blog' => "Blog",
+ 'item:object:blog' => "Blogs",
+
+ 'blog:title:user_blogs' => "Blog de %s",
+ 'blog:title:all_blogs' => "Tous les blogs du site",
+ 'blog:title:friends' => "Blogs des contacts",
+
+ 'blog:group' => "Blog de groupe",
+ 'blog:enableblog' => "Activer le blog du groupe",
+ 'blog:write' => "Écrivez un article",
+
+ // Editing
+ 'blog:add' => "Ajouter un article",
+ 'blog:edit' => "Modifier l'article",
+ 'blog:excerpt' => "Extrait",
+ 'blog:body' => "Corps de l'article",
+ 'blog:save_status' => "Dernier enregistrement :",
+ 'blog:never' => "jamais",
+
+ // Statuses
+ 'blog:status' => "Statut",
+ 'blog:status:draft' => "Brouillon",
+ 'blog:status:published' => "Publié",
+ 'blog:status:unsaved_draft' => "Brouillon non enregistré",
+
+ 'blog:revision' => "Révision",
+ 'blog:auto_saved_revision' => "Révision enregistrée automatiquement",
+
+ // messages
+ 'blog:message:saved' => "Article enregistré.",
+ 'blog:error:cannot_save' => ":Impossible d'enregistrer l'article.",
+ 'blog:error:cannot_write_to_container' => "Accès insuffisant pour enregistrer l'article pour ce groupe.",
+ 'blog:error:post_not_found' => "Cet article a été supprimé, est invalide, ou vous n'avez pas la permission de le voir.",
+ 'blog:messages:warning:draft' => "Il y a un brouillon non enregistré pour cet article !",
+ 'blog:edit_revision_notice' => "(Ancienne version)",
+ 'blog:message:deleted_post' => "Article supprimé.",
+ 'blog:error:cannot_delete_post' => "Impossible de supprimer l'article.",
+ 'blog:none' => "Aucun article",
+ 'blog:error:missing:title' => "Vous devez donner un titre à votre article !",
+ 'blog:error:missing:description' => "Le corps de votre article est vide !",
+ 'blog:error:cannot_edit_post' => "Cet article peut ne pas exister ou vous n'ayez pas les autorisations pour le modifier.",
+ 'blog:error:revision_not_found' => "Impossible de trouvez cette révision.",
+
+ // river
+ 'river:create:object:blog' => "%s a publié un article de blog %s",
+ 'river:comment:object:blog' => "%s a commenté le blog de %s",
+
+ // notifications
+ 'blog:newpost' => "Nouvel envoie sur blog",
+
+ // widget
+ 'blog:widget:description' => "Ce widget affiche vos derniers articles de blog.",
+ 'blog:moreblogs' => "Plus d'articles du blog",
+ 'blog:numbertodisplay' => "Nombre d'articles du blog à afficher",
+ 'blog:noblogs' => "Aucun blog",
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.bookmarks.php b/mod/languages/languages/fr/fr.bookmarks.php
new file mode 100644
index 000000000..31cb9434b
--- /dev/null
+++ b/mod/languages/languages/fr/fr.bookmarks.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Bookmarks English language file
+ */
+
+$french = array(
+
+ /**
+ * Menu items and titles
+ */
+ 'bookmarks' => "Signets",
+ 'bookmarks:add' => "Mettre quelque chose en signet",
+ 'bookmarks:edit' => "Modifier le signet",
+ 'bookmarks:owner' => "Les signets de %s",
+ 'bookmarks:friends' => "Signets des contacts",
+ 'bookmarks:everyone' => "Tous les signets du site",
+ 'bookmarks:this' => "Mettre en signet cette page",
+ 'bookmarks:this:group' => "Mettre en signet dans %s",
+ 'bookmarks:bookmarklet' => "Récupérer le 'bookmarklet'",
+ 'bookmarks:bookmarklet:group' => "Récupérer le 'bookmarklet' du groupe",
+ 'bookmarks:inbox' => "Boîte de réception des signets",
+ 'bookmarks:morebookmarks' => "",
+ 'bookmarks:more' => "Plus de signets",
+ 'bookmarks:with' => "Partager avec",
+ 'bookmarks:new' => "Un nouveau signet",
+ 'bookmarks:via' => "via les signets",
+ 'bookmarks:address' => "Adresse de la ressource à ajouter à vos signets",
+ 'bookmarks:none' => "Aucun signets",
+
+ 'bookmarks:delete:confirm' => "Etes-vous sûr(e) de vouloir supprimer cette ressource ?",
+
+ 'bookmarks:numbertodisplay' => "Nombre de signets à afficher",
+
+ 'bookmarks:shared' => "Mis en signet",
+ 'bookmarks:visit' => "Voir la ressource",
+ 'bookmarks:recent' => "Signets récents",
+
+ 'river:create:object:bookmarks' => "%s mis en signet %s",
+ 'river:comment:object:bookmarks' => "%s a commenté le signet %s",
+ 'bookmarks:river:annotate' => "a posté un commentaire sur ce signet",
+ 'bookmarks:river:item' => "un élément",
+
+ 'item:object:bookmarks' => "Eléments mis en signets",
+
+ 'bookmarks:group' => "Signets du groupe",
+ 'bookmarks:enablebookmarks' => "Activer les signets du groupe",
+ 'bookmarks:nogroup' => "Ce groupe n'a pas encore de signets",
+ 'bookmarks:more' => "Plus de signets",
+
+ 'bookmarks:no_title' => "Pas de titre",
+
+ /**
+ * Widget and bookmarklet
+ */
+ 'bookmarks:widget:description' => "Ce widget affiche vos derniers signets.",
+
+ 'bookmarks:bookmarklet:description' =>
+ "Le bookmarklet vous permez de partager ce que vous trouvez sur le web avec vos contact, ou pour vous-même. Pour l'utiliser, glissez simplement le bouton ci-dessous dans votre barre de liens de votre navigateur.",
+
+ 'bookmarks:bookmarklet:descriptionie' =>
+ "Si vous utilisez Internet Explorer, faites un clic droit sur le bouton et ajouter le dans vos favoris, puis votre barre de liens.",
+
+ 'bookmarks:bookmarklet:description:conclusion' =>
+ "Vous pouvez mettre en signet n'importe quelle page en cliquant sur le bookmarklet.",
+
+ /**
+ * Status messages
+ */
+
+ 'bookmarks:save:success' => "Votre élément a bien été mis en signet.",
+ 'bookmarks:delete:success' => "Votre signet a bien été supprimé.",
+
+ /**
+ * Error messages
+ */
+
+ 'bookmarks:save:failed' => "Votre élément n'a pu être correctement mis en signet. Vérifiez que le titre et le lien soient correct et réessayez.",
+ 'bookmarks:save:invalid' => "L'addresse du signet est invalide et ne peut être sauvé.",
+ 'bookmarks:delete:failed' => "Votre signet n'a pu être supprimé. Merci de réessayer.",
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.categories.php b/mod/languages/languages/fr/fr.categories.php
new file mode 100644
index 000000000..d7766ec2e
--- /dev/null
+++ b/mod/languages/languages/fr/fr.categories.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Categories English language file
+ */
+
+$french = array(
+ 'categories' => "Catégories",
+ 'categories:settings' => "Définir les catégories du site",
+ 'categories:explanation' => "Pour définir quelques catégories pré-déterminées qui seront utilisées à travers l'ensemble du site, veuillez les saisir ci-dessous, en les séparant par des virgules. Les outils compatibles pourront alors les afficher quand les utilisateurs créent ou éditent des contenus.",
+ 'categories:save:success' => "Les catégories du site ont été correctement enregistrées.",
+ 'categories:results' => "Résultats pour la catégorie du site: %s",
+ 'categories:on_activate_reminder' => "Les lots de catégories ne fonctionneront pas tant que vous n'aurez pas ajouté de catégories ! <a href=\"%s\">Ajouter une catégorie maintenant.</a>",
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.custom_index.php b/mod/languages/languages/fr/fr.custom_index.php
new file mode 100644
index 000000000..ae3f53d1e
--- /dev/null
+++ b/mod/languages/languages/fr/fr.custom_index.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Custom Index English language file
+ */
+
+$french = array(
+ 'custom:bookmarks' => "Signets les plus récents",
+ 'custom:groups' => "Groupes les plus récents",
+ 'custom:files' => "Fichiers les plus récents",
+ 'custom:blogs' => "Articles de blog les plus récents",
+ 'custom:members' => "Nouveaux membres",
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.dashboard.php b/mod/languages/languages/fr/fr.dashboard.php
new file mode 100644
index 000000000..d7d008c74
--- /dev/null
+++ b/mod/languages/languages/fr/fr.dashboard.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * User dashboard languages
+ */
+
+$french = array(
+ 'dashboard:widget:group:title' => "Activité groupe",
+ 'dashboard:widget:group:desc' => "Voir l'activité dans l'un de vos groupes",
+ 'dashboard:widget:group:select' => "Sélectionner un groupe",
+ 'dashboard:widget:group:noactivity' => "Il n'y a aucune activité dans ce groupe",
+ 'dashboard:widget:group:noselect' => "Editer ce widget pour sélectionner un groupe",
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.developers.php b/mod/languages/languages/fr/fr.developers.php
new file mode 100644
index 000000000..057299bf2
--- /dev/null
+++ b/mod/languages/languages/fr/fr.developers.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Elgg developer tools English language file.
+ *
+ */
+
+$french = array(
+ // menu
+ 'admin:develop_tools' => "Outils",
+ 'admin:develop_tools:preview' => "Bac à sable thème",
+ 'admin:develop_tools:inspect' => "Inspecter",
+ 'admin:developers' => "Les développeurs",
+ 'admin:developers:settings' => "Paramètres développeurs",
+
+ // settings
+ 'elgg_dev_tools:settings:explanation' => "Pour vos dévelopements et déboguage, contrôlez les paramètres ci-dessous. Certains de ces paramètres sont aussi disponibles sur d'autres pages adminitrations.",
+ 'developers:label:simple_cache' => "Utiliser le cache simple",
+ 'developers:help:simple_cache' => "Désactiver le fichier cache lors du développement. Autrement, les changements que vous verrez (y compris les css) seront ignorés.",
+ 'developers:label:view_path_cache' => "Utiliser voir le chemin du cache",
+ 'developers:help:view_path_cache' => "Désactivez cette option lors du développement. Autrement, les nouveaux aspects de vos plugins ne seront pas enregistrés.",
+ 'developers:label:debug_level' => "Niveau de suivi des traces",
+ 'developers:help:debug_level' => "Contrôle la quantité d'informations enregistrées. Voir elgg_log() pour plus d'informations.",
+ 'developers:label:display_errors' => "Affichage des erreurs PHP fatales",
+ 'developers:help:display_errors' => "Par défaut, le fichier .htaccess d'Elgg supprime l'affichage des erreurs fatales.",
+ 'developers:label:screen_log' => "Journal à l'écran",
+ 'developers:help:screen_log' => "Affiche les sorties elgg_log() et elgg_dump() sur la page web.",
+ 'developers:label:show_strings' => "Montrer les chaines de traduction Brutes",
+ 'developers:help:show_strings' => "Affiche les chaines de traduction utilisées par elgg_echo().",
+ 'developers:label:wrap_views' => "Vues contractées",
+ 'developers:help:wrap_views' => "Cela associe toutes les vues avec des commentaires HTML. Utile pour trouver la vue créant un fichier HTML particulier. (traduction à revoir, chaine originale : This wraps almost every view with HTML comments. Useful for finding the view creating particular HTML.)",
+ 'developers:label:log_events' => "Journaux des évènements et interceptions plugins.",
+ 'developers:help:log_events' => "Ecrire les évènements et les interceptions plugins dans le journal. Attention : il y a en beaucoup par page.",
+
+ 'developers:debug:off' => "Arrêt",
+ 'developers:debug:error' => "Erreur",
+ 'developers:debug:warning' => "Avertissement",
+ 'developers:debug:notice' => "Avis",
+
+ // inspection
+ 'developers:inspect:help' => "Inspecter la configuration système d'Elgg.",
+
+ // event logging
+ 'developers:event_log_msg' => "%s : '%s, %s' dans %s",
+
+ // theme preview
+ 'theme_preview:general' => "Introduction",
+ 'theme_preview:breakout' => "Sortir de l'iframe",
+ 'theme_preview:buttons' => "Boutons",
+ 'theme_preview:components' => "Composants",
+ 'theme_preview:forms' => "Formulaires",
+ 'theme_preview:grid' => "Grille",
+ 'theme_preview:icons' => "Icônes",
+ 'theme_preview:modules' => "Modules",
+ 'theme_preview:navigation' => "Navigation",
+ 'theme_preview:typography' => "Typographie",
+
+ // status messages
+ 'developers:settings:success' => "Paramètres sauvegardés",
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.diagnostics.php b/mod/languages/languages/fr/fr.diagnostics.php
new file mode 100644
index 000000000..e65d259be
--- /dev/null
+++ b/mod/languages/languages/fr/fr.diagnostics.php
@@ -0,0 +1,70 @@
+<?php
+ /**
+ * Elgg diagnostics language pack.
+ *
+ * @package ElggDiagnostics
+ */
+
+ $french = array(
+
+ 'admin:develop_utilities:diagnostics' => "Diagnostic du système",
+ 'diagnostics' => "Diagnostics du système",
+ 'diagnostics:report' => "Rapport de Diagnostic",
+ 'diagnostics:unittester' => "Tests d'unités",
+
+ 'diagnostics:description' => "Le rapport de diagnostic suivant est utile pour diagnostiquer tout problème avec Elgg, et devrait être inclus dans tout rapport d'erreur que vous rapportez.",
+ 'diagnostics:unittester:description' => "Les tests d'unités contrôlent le Core de Elgg en cas d'APIs cassés ou défectueux.",
+
+ 'diagnostics:unittester:description' => "Les tests d'unités contrôlent le Core de Elgg en cas d'APIs cassés ou défectueux.",
+ 'diagnostics:unittester:debug' => "Le site doit être en mode debug pour lancer les tests d'unités.",
+ 'diagnostics:unittester:warning' => "ATTENTION: ces tests peuvent laisser des éléments de débogage dans votre base de données.<br /> NE PAS UTILISER SUR UN SITE DE PRODUCTION !",
+
+ 'diagnostics:test:executetest' => "Exécuter le test",
+ 'diagnostics:test:executeall' => "Tout exécuter",
+ 'diagnostics:unittester:notests' => "Désolé, il n'y a pas de module d'unité de test installé actuellement.",
+ 'diagnostics:unittester:testnotfound' => "Désolé, le rapport ne peut être généré, le test correspondant n'a pas été trouvé",
+
+ 'diagnostics:unittester:testresult:nottestclass' => "Echec - le résultat n'est pas une classe de test",
+ 'diagnostics:unittester:testresult:fail' => "Echec",
+ 'diagnostics:unittester:testresult:success' => "Succes",
+
+ 'diagnostics:unittest:example' => "Exemple de test d'unité, seulement disponible en mode debug.",
+
+ 'diagnostics:unittester:report' => "Rapport de test pour %s",
+
+ 'diagnostics:download' => "Télécharger le fichier '.txt'",
+
+
+ 'diagnostics:header' => "========================================================================
+Elgg Diagnostic Report
+Généré %s par %s
+========================================================================
+
+",
+ 'diagnostics:report:basic' => "
+Elgg Release %s, version %s
+
+------------------------------------------------------------------------",
+ 'diagnostics:report:php' => "
+PHP info:
+%s
+------------------------------------------------------------------------",
+ 'diagnostics:report:plugins' => "
+Plugins installés et détails:
+
+%s
+------------------------------------------------------------------------",
+ 'diagnostics:report:md5' => "
+Fichiers installés et checksums:
+
+%s
+------------------------------------------------------------------------",
+ 'diagnostics:report:globals' => "
+Variables globales:
+
+%s
+------------------------------------------------------------------------",
+
+ );
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.embed.php b/mod/languages/languages/fr/fr.embed.php
new file mode 100644
index 000000000..77edd8b5c
--- /dev/null
+++ b/mod/languages/languages/fr/fr.embed.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Embed French language strings
+ *
+ */
+
+$french = array(
+ 'embed:embed' => "Importé",
+ 'embed:media' => "Fichier importé",
+ 'embed:instructions' => "Cliquez sur le fichier de votre choix pour l'importer dans votre contenu.",
+ 'embed:upload' => "Envoyer des médias",
+ 'embed:upload_type' => "Envoyer type : ",
+
+ // messages
+ 'embed:no_upload_content' => "Aucun fichier téléchargé !",
+ 'embed:no_section_content' => "Pas d'éléments trouvés.",
+
+ 'embed:no_sections' => "Aucun plugin gérant l'intégration de fichier média n'a été trouvé. Demander à l'administrateur du site d'activer un plugin gérant l'intégration de fichier média.",
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.externalpages.php b/mod/languages/languages/fr/fr.externalpages.php
new file mode 100644
index 000000000..28c423af0
--- /dev/null
+++ b/mod/languages/languages/fr/fr.externalpages.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * External pages English language file
+ */
+
+$french = array(
+
+ /**
+ * Menu items and titles
+ */
+ 'expages' => "Pages externes",
+ 'admin:appearance:expages' => "Pages du site",
+ 'expages:about' => "A propos",
+ 'expages:terms' => "Mentions légales",
+ 'expages:privacy' => "Informations personnelles",
+ 'expages:contact' => "Contact",
+
+ 'expages:notset' => "Cette page n'a pas été définie pour le moment.",
+
+ /**
+ * Status messages
+ */
+ 'expages:posted' => "Votre message de page a bien été posté.",
+ 'expages:error' => "Impossible de sauver cette page.",
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.file.php b/mod/languages/languages/fr/fr.file.php
new file mode 100644
index 000000000..e012795e9
--- /dev/null
+++ b/mod/languages/languages/fr/fr.file.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * Elgg file plugin language pack
+ *
+ * @package ElggFile
+ */
+
+$french = array(
+
+ /**
+ * Menu items and titles
+ */
+ 'file' => "Fichier",
+ 'file:user' => "Fichiers de %s",
+ 'file:friends' => "Fichiers des amis de %s",
+ 'file:all' => "Tous les fichiers du site",
+ 'file:edit' => "Editer le fichier",
+ 'file:more' => "Plus de fichiers",
+ 'file:list' => "Vue liste",
+ 'file:group' => "Fichiers du groupe",
+ 'file:gallery' => "Vue galerie",
+ 'file:gallery_list' => "Vue 'liste' ou 'galerie'",
+ 'file:num_files' => "Nombre de fichiers à afficher",
+ 'file:user:gallery'=> "Voir la gallerie %s",
+ 'file:via' => "via les fichiers",
+ 'file:upload' => "Envoyer un fichier",
+ 'file:replace' => "Remplacer le contenu du fichier (laisser en blanc pour ne rien changer)",
+ 'file:list:title' => "de %s %s %s",
+ 'file:title:friends' => "Amis",
+
+ 'file:add' => "Envoyer un fichier",
+
+ 'file:file' => "Fichier",
+ 'file:title' => "Titre",
+ 'file:desc' => "Description",
+ 'file:tags' => "Tags",
+
+ 'file:list:list' => "Basculer vers la vue en liste",
+ 'file:list:gallery' => "Basculer vers la vue en galerie",
+
+ 'file:types' => "Type de fichiers téléchargés",
+
+ 'file:type:' => "Fichiers",
+ 'file:type:all' => "Tous les fichiers",
+ 'file:type:video' => "Vidéos",
+ 'file:type:document' => "Documents",
+ 'file:type:audio' => "Audio",
+ 'file:type:image' => "Images",
+ 'file:type:general' => "Général",
+
+ 'file:user:type:video' => "Les documents de %s",
+ 'file:user:type:document' => "Les documents de %s",
+ 'file:user:type:audio' => "Les fichiers audio de %s",
+ 'file:user:type:image' => "Les images de %s",
+ 'file:user:type:general' => "Les fichiers généraux de %s",
+
+ 'file:friends:type:video' => "Les vidéos de vos contacts",
+ 'file:friends:type:document' => "Les documents de vos contacts",
+ 'file:friends:type:audio' => "Les enregistrements audio de vos contacts",
+ 'file:friends:type:image' => "Les images de vos contacts",
+ 'file:friends:type:general' => "Les fichiers généraux de vos contacts",
+
+ 'file:widget' => "Widget fichiers",
+ 'file:widget:description' => "Liste de vos derniers fichiers",
+
+ 'groups:enablefiles' => "Activer les fichiers de groupes",
+
+ 'file:download' => "Télécharger ce",
+
+ 'file:delete:confirm' => "Etes-vous sûr(e) de vouloir supprimer ce fichier ?",
+
+ 'file:tagcloud' => "Nuage de tags",
+
+ 'file:display:number' => "Nombre de fichiers à afficher",
+
+ 'river:create:object:file' => "%s a téléchargé le fichier %s",
+ 'river:comment:object:file' => "%s a commenté le fichier %s",
+
+ 'item:object:file' => "Fichiers",
+
+ 'file:newupload' => "Un nouveau fichier a été chargé",
+
+ /**
+ * Embed media
+ **/
+
+ 'file:embed' => "Importer un fichier media",
+ 'file:embedall' => "Tout",
+
+ /**
+ * Status messages
+ */
+
+ 'file:saved' => "Votre fichier a bien été enregistré.",
+ 'file:deleted' => "Votre fichier a bien été supprimé.",
+
+ /**
+ * Error messages
+ */
+
+ 'file:none' => "Aucun fichier pour le moment.",
+ 'file:uploadfailed' => "Désolé, votre fichier n'a pu être enregistré.",
+ 'file:downloadfailed' => "Désolé, ce fichier n'est pas disponible en ce moment.",
+ 'file:deletefailed' => "Votre fichier n'a pas pu être effacé en ce moment.",
+ 'file:noaccess' => "Vous n'avez pas la permission de modifier ce fichier",
+ 'file:cannotload' => "Erreur de chargement du fichier",
+ 'file:nofile' => "Vous devez choisir un fichier",
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.garbagecollector.php b/mod/languages/languages/fr/fr.garbagecollector.php
new file mode 100644
index 000000000..aa582d389
--- /dev/null
+++ b/mod/languages/languages/fr/fr.garbagecollector.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Elgg garbage collector language pack.
+ *
+ * @package ElggGarbageCollector
+ */
+
+$french = array(
+ 'garbagecollector:period' => "A quelle fréquence souhaitez-vous faire tourner le ramasse-miettes ?",
+
+ 'garbagecollector:weekly' => "Une fois par semaine",
+ 'garbagecollector:monthly' => "Une fois par mois",
+ 'garbagecollector:yearly' => "Une fois par an",
+
+ 'garbagecollector' => "Ramasse-miettes",
+ 'garbagecollector:done' => "Terminé",
+ 'garbagecollector:optimize' => "Optimisation en cours %s ",
+
+ 'garbagecollector:error' => "Erreur",
+ 'garbagecollector:ok' => "Ok",
+
+ 'garbagecollector:gc:metastrings' => "Nettoyage des chaînes meta (metastrings) non liées: ",
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.groups.php b/mod/languages/languages/fr/fr.groups.php
new file mode 100644
index 000000000..8e3098375
--- /dev/null
+++ b/mod/languages/languages/fr/fr.groups.php
@@ -0,0 +1,265 @@
+<?php
+/**
+ * Elgg groups plugin language pack
+ *
+ * @package ElggGroups
+ */
+
+$french = array(
+
+ /**
+ * Menu items and titles
+ */
+ 'groups' => "Groupes",
+ 'groups:owned' => "Les groupes que je possède",
+ 'groups:yours' => "Mes groupes",
+ 'groups:user' => "Les groupes de %s",
+ 'groups:all' => "Tous les groupes",
+ 'groups:add' => "Créer un nouveau groupe",
+ 'groups:edit' => "Modifier le groupe",
+ 'groups:delete' => "Supprimer le groupe",
+ 'groups:membershiprequests' => "Gérer les membres souhaitant se joindre au groupe",
+ 'groups:invitations' => "Invitations du groupe",
+
+ 'groups:icon' => "Icone du groupe (ne rien inscrire pour laisser inchangé)",
+ 'groups:name' => "Nom du groupe",
+ 'groups:username' => "Nom court du goupe (Qui s'affichera dans l'URL : en caractères alphanumériques)",
+ 'groups:description' => "Description",
+ 'groups:briefdescription' => "Brève description",
+ 'groups:interests' => "Intérêts",
+ 'groups:website' => "Site web",
+ 'groups:members' => "Membres du groupe",
+ 'groups:members:title' => "Les membres de %s",
+ 'groups:members:more' => "Voir tous les membres",
+ 'groups:membership' => "Permissions d'accès au groupe",
+ 'groups:access' => "Permissions d'accès",
+ 'groups:owner' => "Propriétaire",
+ 'groups:widget:num_display' => "Nombre de groupes à afficher",
+ 'groups:widget:membership' => "Adhésion au groupe",
+ 'groups:widgets:description' => "Afficher les groupes dont vous êtes membre dans votre profil",
+ 'groups:noaccess' => "Vous n'avez pas accès au groupe",
+ 'groups:permissions:error' => "Vous n'avez pas les autorisations pour çà",
+ 'groups:ingroup' => "dans le groupe",
+ 'groups:cantedit' => "Vous ne pouvez pas modifier ce groupe",
+ 'groups:saved' => "Groupe enregistré",
+ 'groups:featured' => "Les groupes à la une",
+ 'groups:makeunfeatured' => "Enlever de la une",
+ 'groups:makefeatured' => "Mettre à la une",
+ 'groups:featuredon' => "%s est maintenant un groupe à la une.",
+ 'groups:unfeatured' => "s% a été enlevé par les groupes à la une.",
+ 'groups:featured_error' => "Groupe invalide.",
+ 'groups:joinrequest' => "Demander une adhésion au groupe",
+ 'groups:join' => "Rejoindre le groupe",
+ 'groups:leave' => "Quitter le groupe",
+ 'groups:invite' => "Inviter des contacts",
+ 'groups:invite:title' => "Invitez des amis à ce groupe",
+ 'groups:inviteto' => "Inviter des contacts au groupe '%s'",
+ 'groups:nofriends' => "Vous n'avez plus de contacts à inviter à ce groupe.",
+ 'groups:nofriendsatall' => "Vous n'avez pas d'amis à inviter !",
+ 'groups:viagroups' => "Via les groupes",
+ 'groups:group' => "Groupe",
+ 'groups:search:tags' => "Tag",
+ 'groups:search:title' => "Rechercher des groupes qui contiennent le tag '% s'",
+ 'groups:search:none' => "Aucun groupe correspondant n'a été trouvé",
+
+ 'groups:activity' => "Activité du Groupe",
+ 'groups:enableactivity' => "Rendre disponible Activité de groupe",
+ 'groups:activity:none' => "Il n'y a pas encore d'activité de groupe",
+
+ 'groups:notfound' => "Le groupe n'a pas été trouvé",
+ 'groups:notfound:details' => "Le groupe que vous recherchez n'existe pas, ou alors vous n'avez pas la permission d'y accéder",
+
+ 'groups:requests:none' => "Il n'y a pas de membre demandant de rejoindre le groupe en ce moment.",
+
+ 'groups:invitations:none' => "Il n'y a pas d'invitations en attente.",
+
+ 'item:object:groupforumtopic' => "Sujets de discussion",
+
+ 'groupforumtopic:new' => "Ajouter un message à la discussion",
+
+ 'groups:count' => "groupe créé",
+ 'groups:open' => "groupe ouvert",
+ 'groups:closed' => "groupe fermé",
+ 'groups:member' => "membres",
+ 'groups:searchtag' => "Rechercher des groupes par des mots-clé",
+
+ 'groups:more' => "Plus de groupes",
+ 'groups:none' => "Aucun groupe",
+
+
+ /*
+ * Access
+ */
+ 'groups:access:private' => "Fermé - Les utilisateurs doivent être invités",
+ 'groups:access:public' => "Ouvert - N'importe quel utilisateur peut rejoindre le groupe",
+ 'groups:access:group' => "Membres du groupe seulement",
+ 'groups:closedgroup' => "Ce groupe est en adhésion privée.",
+ 'groups:closedgroup:request' => "Pour demander à être ajouté, cliquer le lien 'Demander une adhésion'.",
+ 'groups:visibility' => "Qui peut voir ce groupe ?",
+
+ /*
+ Group tools
+ */
+ 'groups:enableforum' => "Activer le module 'discussion' du groupe",
+ 'groups:yes' => "oui",
+ 'groups:no' => "non",
+ 'groups:lastupdated' => "Dernière mise à jour %s par %s",
+ 'groups:lastcomment' => "Dernier commentaire %s by %s",
+
+ /*
+ Group discussion
+ */
+ 'discussion' => "Discussion",
+ 'discussion:add' => "Ajouter un sujet de discussion",
+ 'discussion:latest' => "Dernières discussions",
+ 'discussion:group' => "Groupe de discussion",
+ 'discussion:none' => "Aucune discussion",
+ 'discussion:reply:title' => "Réponse par %s",
+
+ 'discussion:topic:created' => "Le sujet de discussion a été créé.",
+ 'discussion:topic:updated' => "Le sujet de discussion a été mis à jour.",
+ 'discussion:topic:deleted' => "Le sujet de discussion a été supprimée.",
+
+ 'discussion:topic:notfound' => "Le sujet de discussion est introuvable",
+ 'discussion:error:notsaved' => "Impossible d'enregistrer ce sujet",
+ 'discussion:error:missing' => "Les deux champs 'titre' et 'message' sont obligatoires",
+ 'discussion:error:permissions' => "Vous n'avez pas les autorisations pour effectuer cette action",
+ 'discussion:error:notdeleted' => "Impossible de supprimer le sujet de discussion",
+
+ 'discussion:reply:deleted' => "La réponse de la discussion a été supprimée.",
+ 'discussion:reply:error:notdeleted' => "Impossible de supprimer la réponse de la discussion",
+
+ 'reply:this' => "Répondre à çà",
+
+ 'group:replies' => "Réponses",
+ 'groups:forum:created' => "Créé %s avec %d commentaires",
+ 'groups:forum:created:single' => "Créé %s avec %d réponse",
+ 'groups:forum' => "Discussion",
+ 'groups:addtopic' => "Ajouter un sujet",
+ 'groups:forumlatest' => "Dernière discussion",
+ 'groups:latestdiscussion' => "Dernières discussions",
+ 'groups:newest' => "Récents",
+ 'groups:popular' => "Populaires",
+ 'groupspost:success' => "Votre réponse a été publié avec succès",
+ 'groups:alldiscussion' => "Dernière discussion",
+ 'groups:edittopic' => "Modifier le sujet",
+ 'groups:topicmessage' => "Message du sujet",
+ 'groups:topicstatus' => "Statut du sujet",
+ 'groups:reply' => "Publier un commentaire",
+ 'groups:topic' => "Sujets",
+ 'groups:posts' => "Posts",
+ 'groups:lastperson' => "Dernière personne",
+ 'groups:when' => "Quand",
+ 'grouptopic:notcreated' => "Aucun sujet n'a été créé.",
+ 'groups:topicopen' => "Ouvert",
+ 'groups:topicclosed' => "Fermé",
+ 'groups:topicresolved' => "Résolu",
+ 'grouptopic:created' => "Votre sujet a été créé.",
+ 'groupstopic:deleted' => "Sujet supprimé",
+ 'groups:topicsticky' => "Sticky",
+ 'groups:topicisclosed' => "Cette discussion sujet est fermée.",
+ 'groups:topiccloseddesc' => "Cette discussion a été fermée et n'accepte plus de nouveaux commentaires.",
+ 'grouptopic:error' => "Votre sujet n'a pas pu être créé. Merci d'essayer plus tard ou de contacter un administrateur du système.",
+ 'groups:forumpost:edited' => "Vous avez modifié ce billet avec succés.",
+ 'groups:forumpost:error' => "Il y a eu un problème lors de la modification du billet.",
+
+
+ 'groups:privategroup' => "Ce groupe est privé. Il est nécessaire de demander une adhésion.",
+ 'groups:notitle' => "Les groupes doivent avoir un titre",
+ 'groups:cantjoin' => "N'a pas pu rejoindre le groupe",
+ 'groups:cantleave' => "N'a pas pu quitter le groupe",
+ 'groups:removeuser' => "Retirer du groupe",
+ 'groups:cantremove' => "Ne peut retirer l'utilisateur du groupe",
+ 'groups:removed' => "Retiré du groupe %s avec succès",
+ 'groups:addedtogroup' => "A ajouté avec succés l'utilisateur au groupe",
+ 'groups:joinrequestnotmade' => "La demande d'adhésion n'a pas pu être réalisée",
+ 'groups:joinrequestmade' => "La demande d'adhésion s'est déroulée avec succés",
+ 'groups:joined' => "Vous avez rejoint le groupe avec succés !",
+ 'groups:left' => "Vous avez quitter le groupe avec succés",
+ 'groups:notowner' => "Désolé, vous n'êtes pas le propriétaire du groupe.",
+ 'groups:notmember' => "Désolé, vous n'êtes pas membre de ce groupe.",
+ 'groups:alreadymember' => "Vous êtes déjà membre de ce groupe !",
+ 'groups:userinvited' => "L'utilisateur a été invité.",
+ 'groups:usernotinvited' => "L'utilisateur n'a pas pu être invité",
+ 'groups:useralreadyinvited' => "L'utilisateur a déjà été invité",
+ 'groups:invite:subject' => "%s vous avez été invité(e) à rejoindre %s !",
+ 'groups:updated' => "Derniere réponse par %s %s",
+ 'groups:started' => "Démarré par %s",
+ 'groups:joinrequest:remove:check' => "Etes-vous sûr de vouloir supprimer cette demande d'adhésion ?",
+ 'groups:invite:remove:check' => "Etes-vous sûr de vouloir supprimer cette invitation ?",
+ 'groups:invite:body' => "Bonjour %s,
+
+Vous avez été invité(e) à rejoindre le groupe '%s' cliquez sur le lien ci-dessous pour confirmer:
+
+%s",
+
+ 'groups:welcome:subject' => "Bienvenue dans le groupe %s !",
+ 'groups:welcome:body' => "Bonjour %s !
+
+Vous êtes maintenant membre du groupe '%s' ! Cliquez le lien ci-dessous pour commencer à participer !
+
+%s",
+
+ 'groups:request:subject' => "%s a demandé une adhésion à %s",
+ 'groups:request:body' => "Bonjour %s,
+
+%s a demandé à rejoindre le groupe '%s', cliquez le lien ci-dessous pour voir son profil :
+
+%s
+
+ou cliquez le lien ci-dessous pour confirmer son adhésion :
+
+%s",
+
+ /*
+ Forum river items
+ */
+
+ 'river:create:group:default' => "%s a créé le groupe %s",
+ 'river:join:group:default' => "%s a rejoint le groupe %s",
+ 'river:create:object:groupforumtopic' => "%s a ajouté un nouveau sujet de discussion %s",
+ 'river:reply:object:groupforumtopic' => "%s a répondu sur le sujet de discussion %s",
+
+ 'groups:nowidgets' => "Aucun widget n'ont été défini pour ce groupe.",
+
+
+ 'groups:widgets:members:title' => "Membres du groupe",
+ 'groups:widgets:members:description' => "Lister les membres d'un groupe.",
+ 'groups:widgets:members:label:displaynum' => "Lister les membres d'un groupe.",
+ 'groups:widgets:members:label:pleaseedit' => "Merci de configurer ce widget.",
+
+ 'groups:widgets:entities:title' => "Objets dans le groupe",
+ 'groups:widgets:entities:description' => "Lister les objets enregistré dans ce groupe",
+ 'groups:widgets:entities:label:displaynum' => "Lister les objets d'un groupe.",
+ 'groups:widgets:entities:label:pleaseedit' => "Merci de configurer ce widget.",
+
+ 'groups:forumtopic:edited' => "Sujet du forum modifié avec succés.",
+
+ 'groups:allowhiddengroups' => "Voulez-vous permettre les groupes privés (invisibles) ?",
+
+ /**
+ * Action messages
+ */
+ 'group:deleted' => "Contenus du groupe et groupe supprimés",
+ 'group:notdeleted' => "Le groupe n'a pas pu être supprimé",
+
+ 'group:notfound' => "Impossible de trouver le groupe",
+ 'grouppost:deleted' => "La publication dans le groupe a été effacée",
+ 'grouppost:notdeleted' => "La publication dans le groupe n'a pas pu être effacée",
+ 'groupstopic:deleted' => "Sujet supprimé",
+ 'groupstopic:notdeleted' => "Le sujet n'a pas pu être supprimé",
+ 'grouptopic:blank' => "Pas de sujet",
+ 'grouptopic:notfound' => "Le sujet n'a pu être trouvé",
+ 'grouppost:nopost' => "Pas d'articles",
+ 'groups:deletewarning' => "Etes-vous sur de vouloir supprimer ce groupe ? Cette action est irréversible !",
+
+ 'groups:invitekilled' => "L'invitation a été supprimée",
+ 'groups:joinrequestkilled' => "La demande d'adhésion a été supprimée.",
+
+ // ecml
+ 'groups:ecml:discussion' => "Discussions de groupe",
+ 'groups:ecml:groupprofile' => "Les profils de groupe",
+
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.install.php b/mod/languages/languages/fr/fr.install.php
new file mode 100644
index 000000000..9a87367e4
--- /dev/null
+++ b/mod/languages/languages/fr/fr.install.php
@@ -0,0 +1,156 @@
+<?php
+/**
+ * Installer English Language
+ *
+ * @package ElggLanguage
+ * @subpackage Installer
+ */
+
+$french = array(
+ 'install:title' => "Installation d'Elgg",
+ 'install:welcome' => "Bienvenu",
+ 'install:requirements' => "Vérification des pré-requis techniques",
+ 'install:database' => "Installation base de donnée",
+ 'install:settings' => "Configuration du site",
+ 'install:admin' => "Créer un compte administrateur",
+ 'install:complete' => "Terminé",
+
+ 'install:welcome:instructions' => "L'installation d'Elgg a 6 étapes simples et commence par la lecture de cette page de bienvenu !
+
+Si vous n'êtes pas déjà prêt, lisez les instructions d'installation qui font partis d'Elgg (ou cliquer sur le lien instructions au bas de la page).
+
+Si vous êtes prêt à commencer, cliquer sur le bouton Suivant.",
+ 'install:requirements:instructions:success' => "Votre serveur a passé la vérification des pré-requis techniques.",
+ 'install:requirements:instructions:failure' => "Votre serveur n'a pas passé la vérification des pré-requis techniques. Après avoir résolu les questions ci-dessous , actualisez cette page. Consultez les liens de dépannage au bas de cette page si vous avez besoin d'aide supplémentaire.",
+ 'install:requirements:instructions:warning' => "Votre serveur a passé la vérification des pré-requis techniques, mais il y a encore au moins un avertissement. Nous vous recommandons de vérifier la page dépannage de l'installation pour plus de détails.",
+
+ 'install:require:php' => "PHP",
+ 'install:require:rewrite' => "Serveur web",
+ 'install:require:settings' => "Fichier paramètres",
+ 'install:require:database' => "Base de données",
+
+ 'install:check:root' => "Votre serveur web n'a pas la permission de créer le fichier \".htaccess\" dans le répertoire racine d'Elgg. Vous avez deux choix :
+
+ 1. Changer les permissions dans le répertoire racine
+
+ 2. Copier le fichier \".htaccess_dist\" en le renommant \".htaccess\"",
+
+ 'install:check:php:version' => "Elgg a besoin de la version %s de PHP ou supérieur. Ce serveur utilise la version %s.",
+ 'install:check:php:extension' => "Elgg a besoin de la version %s de l'extention PHP.",
+ 'install:check:php:extension:recommend' => "Il est recommandé que l'extention PHP %s soit installé.",
+ 'install:check:php:open_basedir' => "La directive \"open_basedir\" de PHP peut empêcher Elgg d'enregistrer des fichiers dans son répertoire de données.",
+ 'install:check:php:safe_mode' => "Exécute PHP en mode sans échec n'est pas conseillé et peut causer des problèmes avec Elgg.",
+ 'install:check:php:arg_separator' => "Pour fonctionner l'option d'Elgg arg_separator.output doit être \"&\", et la valeur sur votre serveur est %s",
+ 'install:check:php:register_globals' => "L'option \"Register globals\" doit être mis à \"off\".",
+ 'install:check:php:session.auto_start' => "Pour fonctionner l'option d'Elgg session.auto_start doit être mise à \"off\". Soit modifier la configuration de votre serveur ou ajouter cette directive au fichier \".htaccess\" d'Elgg.",
+
+ 'install:check:enginedir' => "Votre serveur web n'a pas la permission de créer le fichier \"settings.php\" (paramètres) dans le répertoire \"engine\" (moteur) d'Elgg. Vous avez deux choix :
+
+ 1. Changer les permissions dans le répertoire \"engine\"
+
+ 2. Copier le fichier \"settings.example.php\" en le renommant \"settings.php\" et suivre les instructions à l'intérieur, pour définir les paramètres de la base de données.",
+ 'install:check:readsettings' => "Un fichier de paramètres existe dans le répertoire \"engine\" (moteur), mais le serveur web ne peut pas le lire. Vous pouvez supprimer le fichier ou modifier les autorisations de lecture sur lui.",
+
+ 'install:check:php:success' => "Votre serveur PHP remplis tous les pré-requis techniques d'Elgg.",
+ 'install:check:rewrite:success' => "Le test des règles de redirection s'est fait avec succès.",
+ 'install:check:database' => "Les pré-requis techniques des base de données sont verifiés quand Elgg les lit.",
+
+ 'install:database:instructions' => "Si vous n'avez pas déjà créé une base de données pour Elgg, le faire maintenant. Ensuite, remplissez les valeurs ci-dessous pour initialiser la base d'Elgg.",
+ 'install:database:error' => "Il y a eu une erreur pendant la création de la base de données Elgg et l'installation ne peut pas continuer. Lisez le message ci-dessus et corrigez les problèmes. Si vous avez besoin de plus d'aide, visitez le lien ci-dessous concernant le dépannage de l'installation ou poster un message sur les forums de la communauté Elgg.",
+
+ 'install:database:label:dbuser' => "Nom utilisateur de la base de données",
+ 'install:database:label:dbpassword' => "Mot de passe de la base de données",
+ 'install:database:label:dbname' => "Nom de la base de données",
+ 'install:database:label:dbhost' => "Nom du serveur de la base de données",
+ 'install:database:label:dbprefix' => "Préfixe des tables de la base de données",
+
+ 'install:database:help:dbuser' => "L'utilisateur qui a tous les privilèges de la base de données MySQL que vous avez créé pour Elgg",
+ 'install:database:help:dbpassword' => "Mot de passe pour le compte d'utilisateur de la base de données ci-dessus ",
+ 'install:database:help:dbname' => "Nom de la base de données d'Elgg",
+ 'install:database:help:dbhost' => "Nom du serveur du serveur MySQL (habituellement localhost)",
+ 'install:database:help:dbprefix' => "Le préfix donné à toutes les tables d'Elgg (habituellement elgg_)",
+
+ 'install:settings:instructions' => "Nous avons besoin d'informations à propos du site car nous configurons Elgg. Si vous n'avez pas <a href=\"http://docs.elgg.org/wiki/Data_directory\" target=\"_blank\">crée un répertoire données</a> pour Elgg, vous devez le faire maintenant.",
+
+ 'install:settings:label:sitename' => "Nom du site",
+ 'install:settings:label:siteemail' => "Adresse mail du site",
+ 'install:settings:label:wwwroot' => "URL du site",
+ 'install:settings:label:path' => "Répertoire d'installation d'Elgg",
+ 'install:settings:label:dataroot' => "Répertoire des données",
+ 'install:settings:label:language' => "Langue du site",
+ 'install:settings:label:siteaccess' => "Accès au site par défaut",
+ 'install:label:combo:dataroot' => "Elgg crée un répertoire de données",
+
+ 'install:settings:help:sitename' => "Nom de votre nouveau site Elgg",
+ 'install:settings:help:siteemail' => "Adresse mail utilisé par Elgg pour la communication avec les utilisateurs",
+ 'install:settings:help:wwwroot' => "L'adresse du site (Elgg habituellement le devine correctement)",
+ 'install:settings:help:path' => "Le répertoire où vous avez mis le code d'Elgg (Elgg habituellement le devine correctement)",
+ 'install:settings:help:dataroot' => "Le répertoire que vous avez créé pour que Elgg enregistre des fichiers (les permissions sur ce répertoire seront vérifiées lorsque vous cliquerez sur Suivant)",
+ 'install:settings:help:dataroot:apache' => "Elgg vous donne la possibilité de créer un répertoire de données ou d'entrer le répertoire que vous avez déjà créé pour stocker les fichiers des utilisateurs (les permissions sur ce répertoire seront vérifiées lorsque vous cliquerez sur Suivant)",
+ 'install:settings:help:language' => "Le langage par défaut pour le site",
+ 'install:settings:help:siteaccess' => "Le niveau d'accès par défaut aux contenus créés pour les nouveaux utilisateurs",
+
+ 'install:admin:instructions' => "Il est maintenant temps de créer un compte administrateur.",
+
+ 'install:admin:label:displayname' => "Affichage le nom",
+ 'install:admin:label:email' => "Adresse mail",
+ 'install:admin:label:username' => "Nom d'utilisateur",
+ 'install:admin:label:password1' => "Mot de passe",
+ 'install:admin:label:password2' => "Mot de passe à nouveau",
+
+ 'install:admin:help:displayname' => "Le nom qui est affiché sur le site pour ce compte",
+ 'install:admin:help:email' => "",
+ 'install:admin:help:username' => "Nom du compte d'utilisteur utilisé pour se connecter",
+ 'install:admin:help:password1' => "Le mot de passe du compte doit avoir au moins une longueur de %u caractères",
+ 'install:admin:help:password2' => "Retaper le mot de passe pour confirmer",
+
+ 'install:admin:password:mismatch' => "Les mots de passe doivent correspondre.",
+ 'install:admin:password:empty' => "Les mots de passe ne peuvent être vide.",
+ 'install:admin:password:tooshort' => "Votre mot de passe était trop court",
+ 'install:admin:cannot_create' => "Impossible de créer un compte administrateur.",
+
+ 'install:complete:instructions' => "Votre site Elgg est maintenant prêt à être utilisé. Cliquez sur le bouton ci-dessous pour être redirigé vers votre site.",
+ 'install:complete:gotosite' => "Aller sur le site site",
+
+ 'InstallationException:UnknownStep' => "%s est une étape d'installation inconnue.",
+
+ 'install:success:database' => "La base de donnée a été installé.",
+ 'install:success:settings' => "Les paramètres du Site ont été sauvegardés.",
+ 'install:success:admin' => "Le compte administrateur a été créé.",
+
+ 'install:error:htaccess' => "Impossible de créé un fichier .htaccess",
+ 'install:error:settings' => "Impossible de créé un fichier paramètres",
+ 'install:error:databasesettings' => "Impossible de se connecter à la base de données avec ces paramètres.",
+ 'install:error:oldmysql' => "La version MySQL doit être la version 5.0 ou supérieur. Votre serveur utilise la version %s.",
+ 'install:error:nodatabase' => "Impossible d'utiliser la base de données %s. Il se peut qu'elle n'existe pas",
+ 'install:error:cannotloadtables' => "Impossible de charger les tables de la base de données",
+ 'install:error:tables_exist' => "Il y a déjà des tables dans la base de données d'Elgg, vous devez soit laisser tomber ces tableaux ou redémarrer l'installateur et nous allons tenter de les utiliser. Pour redémarrer l'installeur, enlevez \"?step=database\" partir de la barre d'adresse URL de votre navigateur et appuyez sur Entrée.",
+ 'install:error:readsettingsphp' => "Impossible de lire le fichier engine/settings.example.php",
+ 'install:error:writesettingphp' => "Impossible d'écrire le fichier engine/settings.php",
+ 'install:error:requiredfield' => "%s est nécessaire",
+ 'install:error:datadirectoryexists' => "Votre répertoire de données %s n'existe pas.",
+ 'install:error:writedatadirectory' => "Le serveur web ne peut pas écrire dans votre répertoire de données %s.",
+ 'install:error:locationdatadirectory' => "Votre répertoire de données %s doit être en dehors du répertoire de votre installation pour des raisons de sécurité.",
+ 'install:error:emailaddress' => "%s n'est pas une adresse mail valide",
+ 'install:error:createsite' => "Impossible de créer le site.",
+ 'install:error:savesitesettings' => "Impossible d'enregistrer les paramètres du site.",
+ 'install:error:loadadmin' => "Impossible de lire le compte administrateur.",
+ 'install:error:adminaccess' => "Impossible de donner des privilèges administrateurs à ce nouveau compte utilisateur.",
+ 'install:error:adminlogin' => " Impossible de se connecter automatiquement à ce nouveau compte administrateur.",
+ 'install:error:rewrite:apache' => "Nous pensons que votre serveur exécute le serveur web \"Apache\".",
+ 'install:error:rewrite:nginx' => "Nous pensons que votre serveur exécute le serveur web \"Nginx\".",
+ 'install:error:rewrite:lighttpd' => "Nous pensons que votre serveur exécute le serveur web \"Lighttpd\".",
+ 'install:error:rewrite:iis' => "Nous pensons que votre serveur exécute le serveur web \"IIS\".",
+ 'install:error:rewrite:allowoverride' => "Le test de réécrire a échoué car très probablement l'option AllowOverride pour le répertoire d'Elgg n'est pas configuré à \"All\" (Tous). Cela empêche Apache de traiter le fichier \".htaccess\" qui contient les règles de réécriture.
+ \n\nUne cause moins probable est qu'un alias pour votre répertoire Elgg est configuré dans Apache et que vous devez définir le RewriteBase dans votre fichier \".htaccess\". Il y a d'autres instructions dans le fichier \".htaccess\". dans votre répertoire d'Elgg.",
+ 'install:error:rewrite:htaccess:write_permission' => "Votre serveur web n'a pas la permission de créer le fichier \".htaccess\". dans le répertoire d'Elgg. Vous devez copier manuellement le fichier \"htaccess_dist\" en le renommant \".htaccess\". ou changer les permissions dans le répertoire.",
+ 'install:error:rewrite:htaccess:read_permission' => "Il y a un fichier \".htaccess\" dans le répertoire d'Elgg, mais votre serveur web n'a pas la permission de le lire.",
+ 'install:error:rewrite:htaccess:non_elgg_htaccess' => "Il y a un fichier \".htaccess\" dans le répertoire d'Elgg, qui n'a pas été créé par Elgg. Enlever le, s'il vous plaît.",
+ 'install:error:rewrite:htaccess:old_elgg_htaccess' => "Il semble y avoir un vieux fichier \".htaccess\" dans le répertoire d'Elgg. Il ne contient pas la règle de réécriture permettant de tester le serveur Web.",
+ 'install:error:rewrite:htaccess:cannot_copy' => "Une erreur inconnue s'est produite lors de la création du fichier \".htaccess\". Dans le répertoire d'Elgg, Vous devez copier manuellement le fichier \".htaccess_dist\" en le renommant \".htaccess\".",
+ 'install:error:rewrite:altserver' => "Le test des règles de réécriture a échoué. Vous devez configurer votre serveur web avec les règles de réécriture d'Elgg et réessayer.",
+ 'install:error:rewrite:unknown' => "Euh, nous ne pouvons comprendre quel type de serveur Web est utilisé sur votre serveur et cela a fait échoué la mise en place des règles de réécriture. Nous ne pouvons donner aucun conseil particulier. Vérifier le lien de dépannage, s'il vous plaît.",
+ 'install:warning:rewrite:unknown' => "Votre serveur ne supporte pas de test automatique des règles de réécriture. Vous pouvez continuer l'installation, mais vous pouvez rencontrer des problèmes avec votre site Vous pouvez tester manuellement les règles de réécriture en cliquant sur ce lien : <a href=\"%s\" target=\"_blank\">test</a>. Vous verrez le mot \"succès\" si les redirections fonctionnent.",
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.invitefriends.php b/mod/languages/languages/fr/fr.invitefriends.php
new file mode 100644
index 000000000..6a4b0cbaf
--- /dev/null
+++ b/mod/languages/languages/fr/fr.invitefriends.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Elgg invite language file
+ *
+ * @package ElggInviteFriends
+ */
+
+$french = array(
+
+ 'friends:invite' => "Inviter des contacts",
+
+ 'invitefriends:registration_disabled' => "L'enregistrement des nouveaux utilisateurs a été désactivé sur ce site, vous ne pouvez pas inviter de nouveaux utilisateurs.",
+
+ 'invitefriends:introduction' => "Pour inviter des contacts à vous rejoindre sur ce réseau, entrez leurs adresses mail ci-dessous (une par ligne) :",
+ 'invitefriends:message' => "Ecrivez un message qu'ils vont recevoir avec votre invitation :",
+ 'invitefriends:subject' => "Invitation à rejoindre %s",
+
+ 'invitefriends:success' => "Vos contacts ont été invités.",
+ 'invitefriends:invitations_sent' => "Invitation envoyé: %s. Il ya eu les problèmes suivants :",
+ 'invitefriends:email_error' => "Les invitations ont été envoyées, mais l'adresse suivante comporte des erreurs: %s",
+ 'invitefriends:already_members' => "Les invités suivants sont déja membres: %s",
+ 'invitefriends:noemails' => "Aucune adresse email a été entrée",
+
+ 'invitefriends:message:default' => "
+Bonjour,
+
+Je souhaiterais vous inviter à rejoindre mon réseau sur %s.",
+
+ 'invitefriends:email' => "
+Vous avez été invité à rejoindre %s par %s, qui a ajouté le message suivant :
+
+%s
+
+Pour vous inscrire, cliquez sur le lien suivant :
+
+%s
+
+Ils seront automatiquement ajoutés à vos contacts quand vous aurez créé votre compte.",
+
+ );
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.likes.php b/mod/languages/languages/fr/fr.likes.php
new file mode 100644
index 000000000..8bb200cc9
--- /dev/null
+++ b/mod/languages/languages/fr/fr.likes.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Likes English language file
+ */
+
+$french = array(
+ 'likes:this' => "a aimé çà",
+ 'likes:deleted' => "Votre appréciation a été retiré",
+ 'likes:see' => "Voir ceux qui ont aimé çà",
+ 'likes:remove' => "N'aime pas çà",
+ 'likes:notdeleted' => "Il y a eu un problème, lors de la suppresion d'appréciation",
+ 'likes:likes' => "Vous aimez çà maintenant",
+ 'likes:failure' => "Il y a eu un problème d'appréciation sur cet élément",
+ 'likes:alreadyliked' => "Vous avez déjà porté votre appréciation çà",
+ 'likes:notfound' => "L'élément que vous essayez d'apprécier ne peut être trouvé",
+ 'likes:likethis' => "Aime çà",
+ 'likes:userlikedthis' => "%s aime",
+ 'likes:userslikedthis' => "%s aiment",
+ 'likes:river:annotate' => "aime",
+
+ 'river:likes' => "aiment %s %s",
+
+ // notifications. yikes.
+ 'likes:notifications:subject' => "%s aime votre message \"%s\"",
+ 'likes:notifications:body' =>
+"Bonjour %1$s,
+
+%2$s aime votre message '%3$s' sur %4$s
+
+Voir votre message originale ici :
+
+%5$s
+
+ou voir le profil de %2$s ici :
+
+%6$s
+
+Merci,
+%4$s
+",
+
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.logbrowser.php b/mod/languages/languages/fr/fr.logbrowser.php
new file mode 100644
index 000000000..cbd66330a
--- /dev/null
+++ b/mod/languages/languages/fr/fr.logbrowser.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Elgg log browser plugin language pack
+ *
+ * @package ElggLogBrowser
+ */
+
+$french = array(
+ 'admin:administer_utilities:logbrowser' => "Connection aux journaux",
+ 'logbrowser' => "Visualiseur de journal",
+ 'logbrowser:browse' => "Visualiser les journaux système",
+ 'logbrowser:search' => "Affiner les résultats",
+ 'logbrowser:user' => "Rechercher par nom d'utilisateur",
+ 'logbrowser:starttime' => "Heure de début (par exemple 'dernier lundi', 'il y a une heure')",
+ 'logbrowser:endtime' => "Heure de fin",
+
+ 'logbrowser:explore' => "Explorer le journal",
+
+ 'logbrowser:date' => "Date et heure",
+ 'logbrowser:user:name' => "Utilisateur",
+ 'logbrowser:user:guid' => "Guide de l'utilisateur",
+ 'logbrowser:object' => "Type de l'objet",
+ 'logbrowser:object:guid' => "Aide à propos des Objets",
+ 'logbrowser:action' => "Action",
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.logrotate.php b/mod/languages/languages/fr/fr.logrotate.php
new file mode 100644
index 000000000..c943282af
--- /dev/null
+++ b/mod/languages/languages/fr/fr.logrotate.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Elgg log rotator language pack.
+ *
+ * @package ElggLogRotate
+ */
+
+$french = array(
+ 'logrotate:period' => "A quelle fréquence souhaitez-vous archiver les logs du système ?",
+
+ 'logrotate:weekly' => "Une fois par semaine",
+ 'logrotate:monthly' => "Une fois par mois",
+ 'logrotate:yearly' => "Une fois par an",
+
+ 'logrotate:logrotated' => "Rotation du log effectuée\n",
+ 'logrotate:lognotrotated' => "Erreur lors de la rotation du log\n",
+
+ 'logrotate:delete' => "Supprimer les journaux archivés plus ancien qu'",
+
+ 'logrotate:week' => "une semaine",
+ 'logrotate:month' => "un mois",
+ 'logrotate:year' => "une année",
+
+ 'logrotate:logdeleted' => "Fichier journal supprimé (fichier log)",
+ 'logrotate:lognotdeleted' => "Erreur de suppression du journal (fichier log)",
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.members.php b/mod/languages/languages/fr/fr.members.php
new file mode 100644
index 000000000..542575f88
--- /dev/null
+++ b/mod/languages/languages/fr/fr.members.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Members English language file
+ */
+
+$french = array(
+ 'members:label:newest' => "Nouveaux",
+ 'members:label:popular' => "Populaires",
+ 'members:label:online' => "En ligne",
+ 'members:searchname' => "Recherche de membres par nom",
+ 'members:searchtag' => "Recherche de membres par tag",
+ 'members:title:searchname' => "Recherche de membres pour %s",
+ 'members:title:searchtag' => "Membres tagués avec %s",
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.messageboard.php b/mod/languages/languages/fr/fr.messageboard.php
new file mode 100644
index 000000000..4a297b644
--- /dev/null
+++ b/mod/languages/languages/fr/fr.messageboard.php
@@ -0,0 +1,72 @@
+<?php
+
+$french = array(
+
+ /**
+ * Menu items and titles
+ */
+
+ 'messageboard:board' => "Forum",
+ 'messageboard:messageboard' => "forum",
+ 'messageboard:viewall' => "Voir tout",
+ 'messageboard:postit' => "Envoyer",
+ 'messageboard:history:title' => "Historique",
+ 'messageboard:none' => "Il n'y a encore rien dans le forum",
+ 'messageboard:num_display' => "Nombre de messages à afficher",
+ 'messageboard:desc' => "Ceci est un forum que vous pouvez ajouter sur votre profil, et où les autres utilisateurs peuvent laisse un message.",
+
+ 'messageboard:user' => "Forum de %s",
+
+ 'messageboard:replyon' => "réponse sur",
+ 'messageboard:history' => "historique",
+
+ 'messageboard:owner' => "forum de %s",
+ 'messageboard:owner_history' => "%s a envoyé un message sur le forum de %s",
+
+ /**
+ * Message board widget river
+ */
+ 'river:messageboard:user:default' => "%s a envoyé un message sur le forum de %s",
+
+ /**
+ * Status messages
+ */
+
+ 'messageboard:posted' => "Votre message a bien été envoyé sur le forum.",
+ 'messageboard:deleted' => "Votre message a bien été supprimé.",
+
+ /**
+ * Email messages
+ */
+
+ 'messageboard:email:subject' => "Vous avez un nouveau message sur le forum !",
+ 'messageboard:email:body' => "Vous avez reçu un nouveau message de %s sur votre forum. Il est écrit :
+
+
+%s
+
+
+Pour voir vos messages de forum, cliquez sur :
+
+ %s
+
+Pour voir le profil de %s, cliquez sur :
+
+ %s
+
+Vous ne pouvez pas répondre à cet email.",
+
+ /**
+ * Error messages
+ */
+
+ 'messageboard:blank' => "Désolé, vous devez écrire quelque chose dans le corps du message avant de pouvoir l'enregistrer.",
+ 'messageboard:notfound' => "Désolé, l'élément spécifié n'a pu être trouvé.",
+ 'messageboard:notdeleted' => "Désolé, le message n'a pu être supprimé.",
+ 'messageboard:somethingwentwrong' => "Quelque chose a tourné court lors de l'enregistrement de votre message, veuillez vérifier que vous avez bien écrit un message.",
+
+ 'messageboard:failure' => "Une erreur imprévue s'est produite lors de l'ajout de votre message. Veuillez réeessayer.",
+
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.messages.php b/mod/languages/languages/fr/fr.messages.php
new file mode 100644
index 000000000..0257e8969
--- /dev/null
+++ b/mod/languages/languages/fr/fr.messages.php
@@ -0,0 +1,96 @@
+<?php
+/**
+* Elgg send a message action page
+*
+* @package ElggMessages
+*/
+
+$french = array(
+ /**
+ * Menu items and titles
+ */
+
+ 'messages' => "Messages",
+ 'messages:back' => "Retour aux messages",
+ 'messages:user' => "Boîte de réception de %s",
+ 'messages:posttitle' => "Messages de %s : %s",
+ 'messages:inbox' => "Boîte de réception",
+ 'messages:send' => "Envoyer un message",
+ 'messages:sent' => "Envoyé",
+ 'messages:message' => "Message",
+ 'messages:title' => "Sujet",
+ 'messages:to' => "Pour",
+ 'messages:from' => "De",
+ 'messages:fly' => "Envoyer",
+ 'messages:replying' => "Message en réponse à",
+ 'messages:inbox' => "Boîte de réception",
+ 'messages:sendmessage' => "Envoyer un message",
+ 'messages:compose' => "Ecrire un message",
+ 'messages:add' => "Composer un message",
+ 'messages:sentmessages' => "Messages envoyés",
+ 'messages:recent' => "Messages reçus",
+ 'messages:original' => "Message d'origine",
+ 'messages:yours' => "Votre message",
+ 'messages:answer' => "Répondre",
+ 'messages:toggle' => "Tout basculer",
+ 'messages:markread' => "Marquer comme lu",
+ 'messages:recipient' => "Choisissez un destinataire &hellip",
+ 'messages:to_user' => "Pour : %s",
+
+ 'messages:new' => "Nouveau message",
+
+ 'notification:method:site' => "Messages",
+
+ 'messages:error' => "Un problème est survenu lors de l'enregistrement de votre message. Veuillez réessayer.",
+
+ 'item:object:messages' => "Messages",
+
+ /**
+ * Status messages
+ */
+
+ 'messages:posted' => "Votre message a bien été envoyé.",
+ 'messages:success:delete:single' => "Le message a été supprimé",
+ 'messages:success:delete' => "Les messages ont été supprimés",
+ 'messages:success:read' => "Les messages ont été marqués comme lus",
+ 'messages:error:messages_not_selected' => "Aucun message sélectionné",
+ 'messages:error:delete:single' => "Impossible de supprimer le message",
+
+ /**
+ * Email messages
+ */
+
+ 'messages:email:subject' => "Vous avez reçu un nouveau message !",
+ 'messages:email:body' => "Vous avez un nouveau message de %s. Il est écrit :
+
+
+ %s
+
+
+Pour voir vos messages, cliquez sur :
+
+ %s
+
+Pour envoyer un message, cliquez sur :
+
+ %s
+
+Vous ne pouvez pas répondre à cet email.",
+
+ /**
+ * Error messages
+ */
+
+ 'messages:blank' => "Désolé, vous devez écrire quelque chose dans votre message avant de pouvoir l'enregistrer.",
+ 'messages:notfound' => "Désolé, le message spécifié n'a pu être trouvé.",
+ 'messages:notdeleted' => "Désolé, ce message n'a pu être effacé.",
+ 'messages:nopermission' => "Vous n'avez pas l'autorisation de modifier ce message.",
+ 'messages:nomessages' => "Il n'y a aucun message.",
+ 'messages:user:nonexist' => "Le destinataire n'a pu être trouvé dans la base de données des utilisateurs.",
+ 'messages:user:blank' => "Vous n'avez sélectionné personne à qui envoyer ce message.",
+
+ 'messages:deleted_sender' => "Utilisateur effacé",
+
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.notifications.php b/mod/languages/languages/fr/fr.notifications.php
new file mode 100644
index 000000000..44e2fc88e
--- /dev/null
+++ b/mod/languages/languages/fr/fr.notifications.php
@@ -0,0 +1,26 @@
+<?php
+
+$french = array(
+
+ 'friends:all' => "Tous les contacts",
+
+ 'notifications:subscriptions:personal:description' => "Recevoir des notifications quand des actions concernent vos contenus",
+ 'notifications:subscriptions:personal:title' => "Notifications personnelles",
+
+ 'notifications:subscriptions:friends:title' => "Amis",
+ 'notifications:subscriptions:friends:description' => "Ce qui suit est une collection automatique faite à partie de vos amis. Pour recevoir les mises à jour choisissez ci-dessous. Cela affectera, pour les utilisateurs correspondant, le panneau principal des paramètres de notifications, en bas de la page.",
+ 'notifications:subscriptions:collections:edit' => "Pour éditer vos notifications d'accès partagés, cliquez ici.",
+
+ 'notifications:subscriptions:changesettings' => "Notifications",
+ 'notifications:subscriptions:changesettings:groups' => "Notifications pour les groupes",
+
+ 'notifications:subscriptions:title' => "Notifications par utilisateur",
+ 'notifications:subscriptions:description' => "Pour recevoir des notifications de vos contacts (sur une base individuelle) quand ils créent de nouveaux contenus, trouvez-les ci-dessous, et choisissez le mode de notifications que vous souhaitez utiliser.",
+
+ 'notifications:subscriptions:groups:description' => "Pour recevoir des notifications lorsque de nouveaux contenus sont ajoutés à un groupe auquel vous appartenez, sélectionnez-les ci-dessous, et choisissez le mode de notifications que vous souhaitez utiliser.",
+
+ 'notifications:subscriptions:success' => "Vos paramètres de notifications ont bien été enregistrés.",
+
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.pages.php b/mod/languages/languages/fr/fr.pages.php
new file mode 100644
index 000000000..e59bb1899
--- /dev/null
+++ b/mod/languages/languages/fr/fr.pages.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Pages languages
+ *
+ * @package ElggPages
+ */
+
+$french = array(
+
+ /**
+ * Menu items and titles
+ */
+
+ 'pages' => "Pages",
+ 'pages:owner' => "Pages de s%",
+ 'pages:friends' => "Pages de amis ",
+ 'pages:all' => "Toutes les pages du site",
+ 'pages:add' => "Ajouter une page",
+
+ 'pages:group' => "Pages du groupe",
+ 'groups:enablepages' => "Autoriser les pages de Groupe",
+
+ 'pages:edit' => "Editer cette page",
+ 'pages:delete' => "Effacer cette page",
+ 'pages:history' => "Historique",
+ 'pages:view' => "Voir la page",
+ 'pages:revision' => "Révision",
+
+ 'pages:navigation' => "Navigation",
+ 'pages:via' => "via les pages",
+ 'item:object:page_top' => "Page de plus haut niveau",
+ 'item:object:page' => "Pages",
+ 'pages:nogroup' => "Ce groupe ne comporte encore aucune page",
+ 'pages:more' => "Plus de pages",
+ 'pages:none' => "Aucune page créé pour l'instant",
+
+ /**
+ * River
+ **/
+
+ 'river:create:object:page' => "%s a créé une page %s",
+ 'river:create:object:page_top' => "%s a créé une page %s",
+ 'river:update:object:page' => "%s a mis à jour une page %s",
+ 'river:update:object:page_top' => "%s a mis à jour une page %s",
+ 'river:comment:object:page' => "%s a commenté sur une page intitulée %s",
+ 'river:comment:object:page_top' => "%s a commenté sur une page intitulée %s",
+
+ /**
+ * Form fields
+ */
+
+ 'pages:title' => "Titre de la page",
+ 'pages:description' => "Texte de la page",
+ 'pages:tags' => "Tags",
+ 'pages:access_id' => "Accès en lecture",
+ 'pages:write_access_id' => "Accès en écriture",
+
+ /**
+ * Status and error messages
+ */
+ 'pages:noaccess' => "Pas d'accès à cette page",
+ 'pages:cantedit' => "Vous ne pouvez pas éditer cette page",
+ 'pages:saved' => "Pages enregistrées",
+ 'pages:notsaved' => "La page n'a pu être enregistrée",
+ 'pages:error:no_title' => "Vous devez spécifier un titre pour cette page.",
+ 'pages:delete:success' => "Votre page a bien été effacée.",
+ 'pages:delete:failure' => "Votre page n'a pu être effacée.",
+
+ /**
+ * Page
+ */
+ 'pages:strapline' => "Dernière mise à jour le %s par %s",
+
+ /**
+ * History
+ */
+ 'pages:revision:subtitle' => "Révision créé %s par %s",
+
+ /**
+ * Widget
+ **/
+
+ 'pages:num' => "Nombre de pages à afficher",
+ 'pages:widget:description' => "Voici la liste des vos pages.",
+
+ /**
+ * Submenu items
+ */
+ 'pages:label:view' => "Voir la page",
+ 'pages:label:edit' => "Editer la page",
+ 'pages:label:history' => "Historique de la page",
+
+ /**
+ * Sidebar items
+ */
+ 'pages:sidebar:this' => "Cette page",
+ 'pages:sidebar:children' => "Sous-pages",
+ 'pages:sidebar:parent' => "Parent",
+
+ 'pages:newchild' => "Créer une sous-page",
+ 'pages:backtoparent' => "Retour à '%s'",
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.php b/mod/languages/languages/fr/fr.php
new file mode 100644
index 000000000..1765b6cf6
--- /dev/null
+++ b/mod/languages/languages/fr/fr.php
@@ -0,0 +1,1310 @@
+<?php
+/**
+ * Core English Language
+ *
+ * @package Elgg.Core
+ * @subpackage Languages.English
+ */
+
+$french = array(
+/**
+ * Sites
+ */
+
+ 'item:site' => "Sites",
+
+/**
+ * Sessions
+ */
+
+ 'login' => "Connexion",
+ 'loginok' => "Vous êtes désormais connecté(e).",
+ 'loginerror' => "Nous n'avons pas pu vous identifier. Assurez-vous que les informations que vous avez entrées sont correctes et réessayez.",
+ 'login:empty' => "Nom d'utilisateur et mot de passe sont requis.",
+ 'login:baduser' => "Impossible de charger votre compte d'utilisateur.",
+ 'auth:nopams' => "Erreur interne. Aucune méthode d'authentification des utilisateurs installés.",
+
+ 'logout' => "Déconnexion",
+ 'logoutok' => "Vous avez été déconnecté(e).",
+ 'logouterror' => "Nous n'avons pas pu vous déconnecter. Essayez de nouveau.",
+
+ 'loggedinrequired' => "Vous devez être connecté pour voir cette page.",
+ 'adminrequired' => "Vous devez être administrateur pour voir cette page.",
+ 'membershiprequired' => "Vous devez être membre de ce groupe pour voir cette page.",
+
+
+/**
+ * Errors
+ */
+ 'exception:title' => "Bienvenue sur Elgg.",
+
+ 'actionundefined' => "L'action demandée (%s) n'est pas définie par le système.",
+ 'actionnotfound' => "Le fichier d'action pour %s n'a pas été trouvé.",
+ 'actionloggedout' => "Désolé, vous ne pouvez pas effectuer cette action sans être connecté.",
+ 'actionunauthorized' => "Vous n'êtes pas autorisé à effectuer cette action",
+
+ 'InstallationException:SiteNotInstalled' => "Impossible de traiter cette requête.
+ Ce site n'est pas configuré ou la base de données est en panne.",
+ 'InstallationException:MissingLibrary' => "Impossible de charger %s",
+ 'InstallationException:CannotLoadSettings' => "Elgg n'a pas pu charger le fichier de paramètres. Il n'existe pas ou il y a un problème de d'autorisations.",
+
+ 'SecurityException:Codeblock' => "Accès non autorisé pour la création de bloc de code.",
+ 'DatabaseException:WrongCredentials' => "Elgg n'a pas pu se connecter à la base de données avec les informations données. Vérifiez les paramètres.",
+ 'DatabaseException:NoConnect' => "Elgg n'a pas pu sélectionner la base de données '%s', merci de vérifier que la base de données est bien créée et que vous y avez accès.",
+ 'SecurityException:FunctionDenied' => "L'accès à la fonction privilégiée '%s' n'est pas autorisé.",
+ 'DatabaseException:DBSetupIssues' => "Il y a eu plusieurs problèmes :",
+ 'DatabaseException:ScriptNotFound' => "Elgg n'a pas pu trouver le script de la base de données a %s.",
+ 'DatabaseException:InvalidQuery' => "Requête non valide",
+
+ 'IOException:FailedToLoadGUID' => "Echec du chargement du nouveau %s avec le GUID:%d",
+ 'InvalidParameterException:NonElggObject' => "Passage d'un objet de type non-Elgg vers un constructeur d'objet Elgg !",
+ 'InvalidParameterException:UnrecognisedValue' => "Valeur non reconnue passés au constructeur.",
+
+ 'InvalidClassException:NotValidElggStar' => "guid : %d n'est pas valide %s",
+
+ 'PluginException:MisconfiguredPlugin' => "%s (guid : %s) est un plugin non configuré. Il a été désactivé. Veuillez chercher dans le wiki d'Elgg pour connaître les cause possibles (http://docs.elgg.org/wiki/).",
+ 'PluginException:CannotStart' => "%s (guid : %s) ne peut pas démarrer. Raison : %s",
+ 'PluginException:InvalidID' => "%s est un ID de plugin invalide.",
+ 'PluginException:InvalidPath' => "%s est un chemin invalide pour le plugin.",
+ 'PluginException:InvalidManifest' => "Fichier manifest.xml invalide pour le plugin %s",
+ 'PluginException:InvalidPlugin' => "%s n'est pas un plugin valide.",
+ 'PluginException:InvalidPlugin:Details' => "%s n'est pas valide. plugin : %s",
+ 'PluginException:NullInstantiated' => "il peut pas y avoir aucun Plugins d'Elgg. Vous devez passer un GUID, un plugin ID, ou un chemin complet.",
+
+ 'ElggPlugin:MissingID' => "Manque l'ID du plugin (guid %s)",
+ 'ElggPlugin:NoPluginPackagePackage' => "Manque le paquet d'Elgg 'ElggPluginPackage' du plugin ID %s (guid %s)",
+
+ 'ElggPluginPackage:InvalidPlugin:MissingFile' => "Manque le fichier %s dans le paquet",
+ 'ElggPluginPackage:InvalidPlugin:InvalidDependency' => "Type '%s' des dépendances invalide",
+ 'ElggPluginPackage:InvalidPlugin:InvalidProvides' => "Type '%s' invalide",
+ 'ElggPluginPackage:InvalidPlugin:CircularDep' => "%s invalide dans dépendance '%s', dans le plugin %s. Les plugins peuvent pas être en conflit avec, ou avoir besoin de quelque chose, qu'ils contiennent !",
+
+ 'ElggPlugin:Exception:CannotIncludeFile' => "Impossible d'inclure %s pour le plugin %s (guid : %s) ici %s. Vérifiez les autorisations !",
+ 'ElggPlugin:Exception:CannotRegisterViews' => "Impossible d'ouvrir la vue dir pour le plugin %s (guid : %s) ici %s. Vérifiez les autorisations !",
+ 'ElggPlugin:Exception:CannotRegisterLanguages' => "Impossible d'enregistrer les langues pour le plugin %s (guid : %s) sur %s. Vérifiez les autorisations !",
+ 'ElggPlugin:Exception:NoID' => "Aucun ID pour le plugin guid %s !",
+
+ 'PluginException:ParserError' => "Erreur de syntaxe du fichier manifest.xml avec la version %s de l'API du plugin %s.",
+ 'PluginException:NoAvailableParser' => "Analyseur syntaxique du fichier manifest.xml introuvable pour l'API version %s du plugin %s.",
+ 'PluginException:ParserErrorMissingRequiredAttribute' => "L'attribut nécessaire '%s' manque dans le fichier manifest.xml pour le plugin %s.",
+
+ 'ElggPlugin:Dependencies:Requires' => "Requis",
+ 'ElggPlugin:Dependencies:Suggests' => "Suggestion",
+ 'ElggPlugin:Dependencies:Conflicts' => "Conflits",
+ 'ElggPlugin:Dependencies:Conflicted' => "En conflit",
+ 'ElggPlugin:Dependencies:Provides' => "Fournit",
+ 'ElggPlugin:Dependencies:Priority' => "Priorité",
+
+ 'ElggPlugin:Dependencies:Elgg' => "version d'Elgg",
+ 'ElggPlugin:Dependencies:PhpExtension' => "extension PHP : %s",
+ 'ElggPlugin:Dependencies:PhpIni' => "Paramètre PHP ini : %s",
+ 'ElggPlugin:Dependencies:Plugin' => "Plugin: %s",
+ 'ElggPlugin:Dependencies:Priority:After' => "Après %s",
+ 'ElggPlugin:Dependencies:Priority:Before' => "Avant %s",
+ 'ElggPlugin:Dependencies:Priority:Uninstalled' => "%s n'est pas installé",
+ 'ElggPlugin:Dependencies:Suggests:Unsatisfied' => "Manquant",
+
+ 'ElggPlugin:InvalidAndDeactivated' => "%s est un plugin invalide et a été désactivé.",
+
+ 'InvalidParameterException:NonElggUser' => "Passage d'un utilisateur de type non-Elgg vers un constructeur d'utilisateur Elgg !",
+
+ 'InvalidParameterException:NonElggSite' => "Passage d'un site non-Elgg vers un constructeur de site Elgg !",
+
+ 'InvalidParameterException:NonElggGroup' => "Passage d'un groupe non-Elgg vers un constructeur de groupe Elgg !",
+
+ 'IOException:UnableToSaveNew' => "Impossible de sauvegarder le nouveau %s",
+
+ 'InvalidParameterException:GUIDNotForExport' => "GUID non spécifié durant l'export, ceci ne devrait pas se produire.",
+ 'InvalidParameterException:NonArrayReturnValue' => "La fonction de sérialisation de l'entité a retourné une valeur dont le type n'est pas un tableau",
+
+ 'ConfigurationException:NoCachePath' => "Le chemin du cache est vide !",
+ 'IOException:NotDirectory' => "%s n'est pas un répertoire.",
+
+ 'IOException:BaseEntitySaveFailed' => "Impossibilité de sauver les informations de base du nouvel objet !",
+ 'InvalidParameterException:UnexpectedODDClass' => "import() a passé un argument qui n'est pas du type ODD class",
+ 'InvalidParameterException:EntityTypeNotSet' => "Le type d'entité doit être renseigné.",
+
+ 'ClassException:ClassnameNotClass' => "%s n'est pas %s.",
+ 'ClassNotFoundException:MissingClass' => "La classe '%s' n'a pas été trouvée, le plugin serait-il manquant ?",
+ 'InstallationException:TypeNotSupported' => "Le type %s n'est pas supporté. Il y a une erreur dans votre installation, le plus souvent causé par une mise à jour non-complète.",
+
+ 'ImportException:ImportFailed' => "Impossible d'importer l'élément %d",
+ 'ImportException:ProblemSaving' => "Une erreur est survenue en sauvant %s",
+ 'ImportException:NoGUID' => "La nouvelle entité a été créée mais n'a pas de GUID, ceci ne devrait pas se produire.",
+
+ 'ImportException:GUIDNotFound' => "L'entité '%d' n'a pas été trouvée.",
+ 'ImportException:ProblemUpdatingMeta' => "Il y a eu un problème lors de la mise à jour de '%s' pour l'entité '%d'",
+
+ 'ExportException:NoSuchEntity' => "Il n'y a pas d'entité telle que GUID:%d",
+
+ 'ImportException:NoODDElements' => "Aucun élément OpenDD n'a été trouvé dans les données importées, l'importation a échoué.",
+ 'ImportException:NotAllImported' => "Tous les éléments n'ont pas été importés.",
+
+ 'InvalidParameterException:UnrecognisedFileMode' => "Mode de fichier non-reconnu : '%s'",
+ 'InvalidParameterException:MissingOwner' => "Tous les fichiers doivent avoir un propriétaire",
+ 'IOException:CouldNotMake' => "Impossible de faire %s",
+ 'IOException:MissingFileName' => "Vous devez spécifier un nom avant d'ouvrir un fichier.",
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => "Fichiers stockés non trouvés ou classes non sauvegardées avec le fichier !",
+ 'NotificationException:NoNotificationMethod' => "Aucune méthode de notification spécifiée.",
+ 'NotificationException:NoHandlerFound' => "Aucune fonction trouvée pour '%s' ou elle ne peut être appelée.",
+ 'NotificationException:ErrorNotifyingGuid' => "Une erreur s'est produite lors de la notification %d",
+ 'NotificationException:NoEmailAddress' => "Impossible de trouver une adresse e-mail pour GUID:%d",
+ 'NotificationException:MissingParameter' => "Un argument obligatoire a été omis, '%s'",
+
+ 'DatabaseException:WhereSetNonQuery' => "La requête where ne contient pas de WhereQueryComponent",
+ 'DatabaseException:SelectFieldsMissing' => "Des champs sont manquants sur la requête de sélection.",
+ 'DatabaseException:UnspecifiedQueryType' => "Type de requête non-reconnue ou non-spécifiée.",
+ 'DatabaseException:NoTablesSpecified' => "Aucune table spécifiée pour la requête.",
+ 'DatabaseException:NoACL' => "Pas de liste d'accès fourni pour la requête",
+
+ 'InvalidParameterException:NoEntityFound' => "Aucune entité trouvée, soit elle est inexistante, soit vous n'y avez pas accès.",
+
+ 'InvalidParameterException:GUIDNotFound' => "GUID : %s n'a pas été trouvé ou vous n'y avez pas accès.",
+ 'InvalidParameterException:IdNotExistForGUID' => "Désolé, '%s' n'existe pas pour GUID : %d",
+ 'InvalidParameterException:CanNotExportType' => "Désolé, je ne sais pas comment exporter '%s'",
+ 'InvalidParameterException:NoDataFound' => "Aucune donnée trouvée.",
+ 'InvalidParameterException:DoesNotBelong' => "N'appartient pas à l'entité.",
+ 'InvalidParameterException:DoesNotBelongOrRefer' => "N'appartient pas ou aucune référence à l'entité.",
+ 'InvalidParameterException:MissingParameter' => "Paramètre manquant, il faut fournir un GUID.",
+ 'InvalidParameterException:LibraryNotRegistered' => "%s n'est pas une bibliothèque enregistré",
+
+ 'APIException:ApiResultUnknown' => "Les résultats de API sont de types inconnus, ceci ne devrait pas se produire.",
+ 'ConfigurationException:NoSiteID' => "L'identifiant du site n'a pas été spécifié.",
+ 'SecurityException:APIAccessDenied' => "Désolé, l'accès API a été désactivé par l'administrateur.",
+ 'SecurityException:NoAuthMethods' => "Aucune méthode d'authentification n'a été trouvée pour cette requête API.",
+ 'SecurityException:ForwardFailedToRedirect' => "La Redirection ne peut aboutir à cause des entêtes déjà envoyées. Arrêt de l'exécution par sécurité. Pour plus d'informations rechercher sur http://docs.elgg.org/ .",
+ 'InvalidParameterException:APIMethodOrFunctionNotSet' => "Methode ou fonction non définie dans expose_method()",
+ 'InvalidParameterException:APIParametersArrayStructure' => "Le paramètre de structure 'array' est incorrect pour appeller to expose method '%s'",
+ 'InvalidParameterException:UnrecognisedHttpMethod' => "Methode HTTP %s pour la methode API '%s' non reconnue",
+ 'APIException:MissingParameterInMethod' => "Argument %s manquant pour la méthode %s",
+ 'APIException:ParameterNotArray' => "%s n'est semble t-il pas un tableau.",
+ 'APIException:UnrecognisedTypeCast' => "Type %s non reconnu pour la variable '%s' pour la fonction '%s'",
+ 'APIException:InvalidParameter' => "Paramètre invalide pour '%s' pour la fonction '%s'.",
+ 'APIException:FunctionParseError' => "%s(%s) a une erreur d'analyse.",
+ 'APIException:FunctionNoReturn' => "%s(%s) ne retourne aucune valeur.",
+ 'APIException:APIAuthenticationFailed' => "Echec d'authentification d'API par l'appel de méthode",
+ 'APIException:UserAuthenticationFailed' => "Echec d'authentification d'utilisateur par l'appel de méthode",
+ 'SecurityException:AuthTokenExpired' => "Le jeton d'authentification est manquant, invalide ou expiré.",
+ 'CallException:InvalidCallMethod' => "%s doit être appelé en utilisant '%s'",
+ 'APIException:MethodCallNotImplemented' => "L'appel à la méthode '%s' n'a pas été implémenté.",
+ 'APIException:FunctionDoesNotExist' => "La fonction pour la methode '%s' n'est pas appellable",
+ 'APIException:AlgorithmNotSupported' => "L'algorithme '%s' n'est pas supporté ou a été désactivé.",
+ 'ConfigurationException:CacheDirNotSet' => "Le répertoire de cache 'cache_path' n'a pas été renseigné.",
+ 'APIException:NotGetOrPost' => "La méthode de requête doit être GET ou POST",
+ 'APIException:MissingAPIKey' => "Clé API manquante",
+ 'APIException:BadAPIKey' => "Mauvaise clé API",
+ 'APIException:MissingHmac' => "X-Elgg-hmac manquant dans l'entête",
+ 'APIException:MissingHmacAlgo' => "X-Elgg-hmac-algo manquant dans l'entête",
+ 'APIException:MissingTime' => "X-Elgg-time manquant dans l'entête",
+ 'APIException:MissingNonce' => "X-Elgg-nonce manquant dans l'entête",
+ 'APIException:TemporalDrift' => "X-Elgg-time est trop éloigné dans le temps. Epoch a échoué.",
+ 'APIException:NoQueryString' => "Aucune valeur dans la requête",
+ 'APIException:MissingPOSTHash' => "X-Elgg-posthash manquant dans l'entête",
+ 'APIException:MissingPOSTAlgo' => "X-Elgg-posthash_algo manquant dans l'entête",
+ 'APIException:MissingContentType' => "Le content-type est manquant pour les données postées",
+ 'SecurityException:InvalidPostHash' => "La signature des données POST est invalide.%s attendu mais %s reçu.",
+ 'SecurityException:DupePacket' => "La signature du paquet a déjà été envoyée.",
+ 'SecurityException:InvalidAPIKey' => "Clé API invalide ou non-reconnue.",
+ 'NotImplementedException:CallMethodNotImplemented' => "La méthode '%s' n'est pas supportée actuellement.",
+
+ 'NotImplementedException:XMLRPCMethodNotImplemented' => "L'appel à la méthode XML-RPC '%s' n'a pas été implémentée.",
+ 'InvalidParameterException:UnexpectedReturnFormat' => "L'appel à la méthode '%s' a retourné un résultat inattendu.",
+ 'CallException:NotRPCCall' => "L'appel ne semble pas être un appel XML-RPC valide",
+
+ 'PluginException:NoPluginName' => "Le nom du plugin n'a pas pu être trouvé",
+
+ 'SecurityException:authenticationfailed' => "Impossible d'authentifier l'utilisateur",
+
+ 'CronException:unknownperiod' => "%s n'est pas une période valide.",
+
+ 'SecurityException:deletedisablecurrentsite' => "Impossible de supprimer ou désactiver le site en cours !",
+
+ 'RegistrationException:EmptyPassword' => "Les champs du mot de passe ne peut pas être vide",
+ 'RegistrationException:PasswordMismatch' => "Les mots de passe doivent correspondre",
+ 'LoginException:BannedUser' => "Vous avez été banni de ce site et ne pouvez plus vous connecter",
+ 'LoginException:UsernameFailure' => "Nous n'avons pas pu vous connecter ! Vérifiez votre nom d'utilisateur et mot de passe.",
+ 'LoginException:PasswordFailure' => "Nous n'avons pas pu vous connecter ! Vérifiez votre nom d'utilisateur et mot de passe.",
+ 'LoginException:AccountLocked' => "Votre compte a été verrouillé suite à un trop grand nombre d'échecs de connexion.",
+ 'LoginException:ChangePasswordFailure' => "Echec vérification mot de passe courant.",
+
+ 'memcache:notinstalled' => "Le module PHP memcache n'est pas installé. Vous devez installer php5-memcache",
+ 'memcache:noservers' => "Pas de serveur memcache défini, veuillez renseigner la variable",
+ 'memcache:versiontoolow' => "Memcache nécessite au minimum la version %s pour fonctionner, vous avez la version %s",
+ 'memcache:noaddserver' => "Le support de serveurs multiples est désactivé, vous avez peut-être besoin de mettre à jour votre bibliothèque memcache PECL",
+
+ 'deprecatedfunction' => "Attention : Ce code source utilise une fonction périmée '%s'. Il n'est pas compatible avec cette version de Elgg.",
+
+ 'pageownerunavailable' => "Attention : La page de l'utilisateur %d n'est pas accessible.",
+ 'viewfailure' => "Il ya eu une erreur interne dans la vue %s",
+ 'changebookmark' => "Veuillez changer votre favori pour cette page.",
+ 'noaccess' => "Ce contenu a été supprimé, est invalide, ou vous n'avez pas la permission pour le voir.",
+
+/**
+ * API
+ */
+ 'system.api.list' => "Liste tous les appels API au système.",
+ 'auth.gettoken' => "Cet appel API permet à un utilisateur de se connecter, il retourne une clef d'authentification qui permet de rendre la tentative de connexion unique.",
+
+/**
+ * User details
+ */
+
+ 'name' => "Nom à afficher",
+ 'email' => "Adresse e-mail",
+ 'username' => "Nom d'utilisateur",
+ 'loginusername' => "Nom d'utilisateur ou e-mail",
+ 'password' => "Mot de passe",
+ 'passwordagain' => "Confirmation du mot de passe",
+ 'admin_option' => "Définir cet utilisateur comme administrateur ?",
+
+/**
+ * Access
+ */
+
+ 'PRIVATE' => "Privé",
+ 'LOGGED_IN' => "Utilisateurs connectés",
+ 'PUBLIC' => "Publique",
+ 'access:friends:label' => "Contacts",
+ 'access' => "Accès",
+
+/**
+ * Dashboard and widgets
+ */
+
+ 'dashboard' => "Tableau de bord",
+ 'dashboard:nowidgets' => "Votre tableau de bord vous permet de suivre l'activité et le contenu vous conçernant.",
+
+ 'widgets:add' => "Ajouter des widgets",
+ 'widgets:add:description' => "Cliquez sur n'importe quel widget ci-dessous pour l'ajouter à la page.",
+ 'widgets:position:fixed' => "(Position modifiée sur la page)",
+ 'widget:unavailable' => "Vous avez déjà ajouté ce widget",
+ 'widget:numbertodisplay' => "Nombre d'éléments à afficher ",
+
+ 'widget:delete' => "Supprimer %s",
+ 'widget:edit' => "Personnaliser ce widget",
+
+ 'widgets' => "Widgets",
+ 'widget' => "Widget",
+ 'item:object:widget' => "Widgets",
+ 'widgets:save:success' => "Le widget a été sauvegardé avec succès.",
+ 'widgets:save:failure' => "Un problème est survenu lors de l'enregistrement de votre widget. Veuillez recommencer.",
+ 'widgets:add:success' => "Le widget a bien été ajouté.",
+ 'widgets:add:failure' => "Nous n'avons pas pu ajouter votre widget.",
+ 'widgets:move:failure' => "Nous n'avons pas pu enregistrer la position du nouveau widget.",
+ 'widgets:remove:failure' => "Impossible de supprimer ce widget",
+
+/**
+ * Groups
+ */
+
+ 'group' => "Groupe",
+ 'item:group' => "Groupes",
+
+/**
+ * Users
+ */
+
+ 'user' => "Utilisateur",
+ 'item:user' => "Utilisateurs",
+
+/**
+ * Friends
+ */
+
+ 'friends' => "Contacts",
+ 'friends:yours' => "Vos contacts",
+ 'friends:owned' => "Les contacts de %s",
+ 'friend:add' => "Ajouter un contact",
+ 'friend:remove' => "Supprimer un contact",
+
+ 'friends:add:successful' => "Vous avez ajouté %s à vos contacts.",
+ 'friends:add:failure' => "%s n'a pas pu être ajouté(e) à vos contacts. Merci de réessayer ultérieurement.",
+
+ 'friends:remove:successful' => "Vous avez supprimé %s de vos contacts.",
+ 'friends:remove:failure' => "%s n'a pas pu être supprimé(e) de vos contacts. Merci de réessayer ultérieurement.",
+
+ 'friends:none' => "Cet utilisateur n'a pas encore ajouté de contact.",
+ 'friends:none:you' => "Vous n'avez pas encore de contact !",
+
+ 'friends:none:found' => "Aucun contact n'a été trouvé.",
+
+ 'friends:of:none' => "Personne n'a encore ajouté cet utilisateur comme contact.",
+ 'friends:of:none:you' => "Personne ne vous a encore ajouté comme contact. Commencez par remplir votre page profil et publiez du contenu pour que les gens vous trouvent !",
+
+ 'friends:of:owned' => "Les personnes qui ont %s dans leurs contacts",
+
+ 'friends:of' => "Contacts de",
+ 'friends:collections' => "Groupement de contacts",
+ 'collections:add' => "Nouvelle collection",
+ 'friends:collections:add' => "Nouveau groupement de contacts",
+ 'friends:addfriends' => "Sélectionner des contacts",
+ 'friends:collectionname' => "Nom du groupement",
+ 'friends:collectionfriends' => "Contacts dans le groupement",
+ 'friends:collectionedit' => "Modifier ce groupement",
+ 'friends:nocollections' => "Vous n'avez pas encore de groupement de contacts.",
+ 'friends:collectiondeleted' => "Votre groupement de contacts a été supprimé.",
+ 'friends:collectiondeletefailed' => "Le groupement de contacts n'a pas été supprimer. Vous n'avez pas de droits suffisants, ou un autre problème peut-être en cause.",
+ 'friends:collectionadded' => "Votre groupement de contact a été créé avec succès",
+ 'friends:nocollectionname' => "Vous devez nommer votre groupement de contact avant qu'il puisse être créé.",
+ 'friends:collections:members' => "Membres du groupement",
+ 'friends:collections:edit' => "Modifier le groupement de contacts",
+ 'friends:collections:edited' => "Collection sauvegardée",
+ 'friends:collection:edit_failed' => "Impossible de sauvegarder la collection.",
+
+ 'friendspicker:chararray' => "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+
+ 'avatar' => "Avatar",
+ 'avatar:create' => "Créez votre avatar",
+ 'avatar:edit' => "Modifier mon avatar",
+ 'avatar:preview' => "Extrait",
+ 'avatar:upload' => "Envoyer un nouvel avatar",
+ 'avatar:current' => "Avatar actuel",
+ 'avatar:crop:title' => "Outil pour recadrer l'avatar",
+ 'avatar:upload:instructions' => "Votre avatar est affiché sur tout le site. Vous pouvez le changer quand vous le souhaitez. (Formats de fichiers acceptés: GIF, JPG ou PNG)",
+ 'avatar:create:instructions' => "Cliquez et faites glisser un carré ci-dessous selon la façon dont vous voulez que votre avatar soit recadré. Un aperçu s'affiche sur la droite. Lorsque vous êtes satisfait de l'aperçu, cliquez sur «Créez votre avatar». Cette version recadrée sera utilisée sur le site.",
+ 'avatar:upload:success' => "Avatar téléchargé avec succès",
+ 'avatar:upload:fail' => "Échec de l'envoi de l'image",
+ 'avatar:resize:fail' => "Le redimensionnement de l'avatar a échoué",
+ 'avatar:crop:success' => "Le redimensionnement de l'avatar a réussi",
+ 'avatar:crop:fail' => "Le recadrage de l'avatar a échoué",
+
+ 'profile:edit' => "Modifier mon profil",
+ 'profile:aboutme' => "A propos de moi",
+ 'profile:description' => "A propos de moi",
+ 'profile:briefdescription' => "Brève description",
+ 'profile:location' => "Lieu",
+ 'profile:skills' => "Compétences",
+ 'profile:interests' => "Intérêts",
+ 'profile:contactemail' => "Contact e-mail",
+ 'profile:phone' => "Téléphone",
+ 'profile:mobile' => "Téléphone portable",
+ 'profile:website' => "Site Web",
+ 'profile:twitter' => "Nom d'utilisateur Twitter",
+ 'profile:saved' => "Votre profil a été correctement enregistré.",
+
+ 'profile:field:text' => "Texte court",
+ 'profile:field:longtext' => "Région de texte importante",
+ 'profile:field:tags' => "Tags",
+ 'profile:field:url' => "Adresse web ",
+ 'profile:field:email' => "Adresse Mail ",
+ 'profile:field:location' => "Position géographique",
+ 'profile:field:date' => "Date",
+
+ 'admin:appearance:profile_fields' => "Modifier les champs du profil",
+ 'profile:edit:default' => "Modifier les champs du profil",
+ 'profile:label' => "Etiquette du profil",
+ 'profile:type' => "Type de l'étiquette",
+ 'profile:editdefault:delete:fail' => "Echec de l'enlevement du champ profil par défaut",
+ 'profile:editdefault:delete:success' => "Le champ profil par défaut est supprimé !",
+ 'profile:defaultprofile:reset' => "Réinitialisation du profil système par défaut",
+ 'profile:resetdefault' => "Réinitialisation du profil par défaut",
+ 'profile:explainchangefields' => "Vous pouvez remplacer les champs de profil existant avec les vôtres en utilisant le formulaire ci-dessous.\n\nDonner une étiquette pour le nouveau champ du profil, par exemple, 'équipe préférée', puis sélectionnez le type de champ (par exemple, texte, url, balises), et cliquez sur le bouton 'Ajouter'. Pour réordonner les champs faites glisser la poignée de l'étiquette du champ. Pour modifier un champ d'étiquette - cliquez sur le texte de l'étiquette pour le rendre modifiable. A tout moment vous pouvez revenir au profil par défaut, mais vous perdrez toutes les informations déjà entrées dans des champs personnalisés des pages de profil.",
+ 'profile:editdefault:success' => "Champ ajouté au profil par défaut avec succès",
+ 'profile:editdefault:fail' => "Le profil par défaut n'a pas pu être sauvé",
+
+
+/**
+ * Feeds
+ */
+ 'feed:rss' => "S'abonner au fil RSS de cette page",
+/**
+ * Links
+ */
+ 'link:view' => "voir le lien",
+ 'link:view:all' => "Voir tout",
+
+
+/**
+ * River
+ */
+ 'river' => "Flux",
+ 'river:friend:user:default' => "%s est maintenant ami with %s",
+ 'river:update:user:avatar' => "%s a un nouvel avatar",
+ 'river:update:user:profile' => "%s ont mis à jour leur profils",
+ 'river:noaccess' => "Vous n'avez pas la permission de voir cet élément.",
+ 'river:posted:generic' => "%s envoyé",
+ 'riveritem:single:user' => "un utilisateur",
+ 'riveritem:plural:user' => "des utilisateurs",
+ 'river:ingroup' => "au groupe %s",
+ 'river:none' => "Aucune activité",
+ 'river:update' => "Mise à jour pour %s",
+
+ 'river:widget:title' => "Activité",
+ 'river:widget:description' => "Afficher l'activité la plus récente",
+ 'river:widget:type' => "Type d'activité",
+ 'river:widgets:friends' => "Activité des amis",
+ 'river:widgets:all' => "Toutes les activités sur le site",
+
+/**
+ * Notifications
+ */
+ 'notifications:usersettings' => "Configuration des messages du site",
+ 'notifications:methods' => "Choisissez votre mode de réception des messages du site.",
+ 'notification:method:email' => "Mail",
+
+ 'notifications:usersettings:save:ok' => "La configuration des messages du site a été enregistrée avec succès.",
+ 'notifications:usersettings:save:fail' => "Il y a eu un problème lors de la sauvegarde des paramètres de configuration des messages du site.",
+
+ 'user.notification.get' => "Renvoie les paramètres de messages du site pour un utilisateur donné.",
+ 'user.notification.set' => "Définir les paramètres de messages du site pour un utilisateur donné.",
+/**
+ * Search
+ */
+
+ 'search' => "Rechercher",
+ 'searchtitle' => "Rechercher : %s",
+ 'users:searchtitle' => "Recherche des utilisateurs : %s",
+ 'groups:searchtitle' => "Rechercher des groupes : %s",
+ 'advancedsearchtitle' => "%s résultat(s) trouvé(s) pour %s",
+ 'notfound' => "Aucun résultat trouvé.",
+ 'next' => "Suivant",
+ 'previous' => "Précédent",
+
+ 'viewtype:change' => "Changer le type de liste",
+ 'viewtype:list' => "Lister les vues",
+ 'viewtype:gallery' => "Galerie",
+
+ 'tag:search:startblurb' => "Eléments avec le(s) mot(s)-clé '%s' :",
+
+ 'user:search:startblurb' => "Utilisateurs avec le(s) mot(s)-clé '%s' :",
+ 'user:search:finishblurb' => "Cliquez ici pour plus de résultats...",
+
+ 'group:search:startblurb' => "Groupes qui vérifient le critère : %s",
+ 'group:search:finishblurb' => "Pour en savoir plus, cliquez ici.",
+ 'search:go' => "Rechercher",
+ 'userpicker:only_friends' => "Seulement les amis",
+
+/**
+ * Account
+ */
+
+ 'account' => "Compte",
+ 'settings' => "Votre compte",
+ 'tools' => "Outils",
+
+ 'register' => "S'enregistrer",
+ 'registerok' => "Vous vous êtes enregistré avec succès sur %s.",
+ 'registerbad' => "Votre création de compte n'a pas fonctionné pour une raison inconnue.",
+ 'registerdisabled' => "La création de compte a été désactivé par l'administrateur du site.",
+ 'register:fields' => "Tous les champs sont requis",
+
+ 'registration:notemail' => "L'adresse e-mail que vous avez renseigné n'apparaît pas comme valide.",
+ 'registration:userexists' => "Ce nom d'utilisateur existe déjà",
+ 'registration:usernametooshort' => "Le nom d'utilisateur doit faire %u caractères au minimum.",
+ 'registration:passwordtooshort' => "Le mot de passe doit faire %u caractères au minimum.",
+ 'registration:dupeemail' => "Cette adresse e-mail est déjà utilisée.",
+ 'registration:invalidchars' => "Désolé, votre nom d'utilisateur contient les caractères invalides suivants: %s. Tout ces caractères sont invalides: %s",
+ 'registration:emailnotvalid' => "Désolé, l'adresse e-mail que vous avez entré est invalide sur ce site.",
+ 'registration:passwordnotvalid' => "Désolé, le mot de passe que vous avez entré est invalide sur ce site.",
+ 'registration:usernamenotvalid' => "Désolé, le nom d'utilisateur que vous avez entré est invalide sur ce site.",
+
+ 'adduser' => "Ajouter un utilisateur",
+ 'adduser:ok' => "Vous avez ajouté un nouvel utilisateur avec succès.",
+ 'adduser:bad' => "Le nouvel utilisateur ne peut pas être créé.",
+
+ 'user:set:name' => "Nom",
+ 'user:name:label' => "Votre nom à afficher",
+ 'user:name:success' => "Votre nom a été changé avec succès.",
+ 'user:name:fail' => "Impossible de changer votre nom. Assurez-vous que votre nom n'est pas trop long et essayez à nouveau.",
+
+ 'user:set:password' => "Mot de passe",
+ 'user:current_password:label' => "Mot de passe actuel",
+ 'user:password:label' => "Votre nouveau mot de passe",
+ 'user:password2:label' => "Veuillez retaper votre nouveau mot de passe",
+ 'user:password:success' => "Mot de passe modifié avec succès",
+ 'user:password:fail' => "Impossible de modifier votre mot de passe.",
+ 'user:password:fail:notsame' => "Les deux mots de passe ne correspondent pas !",
+ 'user:password:fail:tooshort' => "Le mot de passe est trop court !",
+ 'user:password:fail:incorrect_current_password' => "Le mot de passe actuel entré est incorrect.",
+ 'user:resetpassword:unknown_user' => "Utilisateur inconnu.",
+ 'user:resetpassword:reset_password_confirm' => "Après réinitialisation de votre mot de passe, celui-ci sera envoyé à votre adresse e-mail.",
+
+ 'user:set:language' => "Langue",
+ 'user:language:label' => "Votre langue",
+ 'user:language:success' => "Votre paramètre de langage a été mis à jour.",
+ 'user:language:fail' => "Votre paramètre de langage n'a pas pu être sauvegardé.",
+
+ 'user:username:notfound' => "Nom d'utilisateur %s non trouvé.",
+
+ 'user:password:lost' => "Mot de passe perdu ?",
+ 'user:password:resetreq:success' => "Vous avez demandé un nouveau mot de passe, un e-mail vous a été envoyé",
+ 'user:password:resetreq:fail' => "Impossible de demander un nouveau mot de passe.",
+
+ 'user:password:text' => "Pour générer un nouveau mot de passe, entrez votre nom d'utilisateur ci-dessous. Puis cliquez sur le bouton de demande.",
+
+ 'user:persistent' => "Se souvenir de moi",
+
+ 'walled_garden:welcome' => "Bienvenue à",
+
+/**
+ * Administration
+ */
+ 'menu:page:header:administer' => "Administrer",
+ 'menu:page:header:configure' => "Configurer",
+ 'menu:page:header:develop' => "Développer",
+ 'menu:page:header:default' => "Autre",
+
+ 'admin:view_site' => "Voir le site",
+ 'admin:loggedin' => "Connecté en tant que %s",
+ 'admin:menu' => "Menu",
+
+ 'admin:configuration:success' => "Vos paramètres ont été sauvegardés.",
+ 'admin:configuration:fail' => "Vos paramètres n'ont pas pu être sauvegardés.",
+
+ 'admin:unknown_section' => "Partie Admin invalide.",
+
+ 'admin' => "Administration",
+ 'admin:description' => "Le panneau d'administration vous permet de contrôler tous les aspects du système d'Elgg, de la gestion des utilisateurs à la gestion des outils installés. Choisissez une option dans le menu ci-contre pour commencer.",
+
+ 'admin:statistics' => "Statistiques",
+ 'admin:statistics:overview' => "Vu d'ensemble",
+
+ 'admin:appearance' => "Apparence",
+ 'admin:administer_utilities' => "Utilitaires",
+ 'admin:develop_utilities' => "Utilitaires",
+
+ 'admin:users' => "Utilisateurs",
+ 'admin:users:online' => "Actuellement en ligne",
+ 'admin:users:newest' => "Le plus récent",
+ 'admin:users:add' => "Ajouter un nouvel utilisateur",
+ 'admin:users:description' => "Ce panneau d'administration vous permet de contrôler les paramètres des utilisateurs de votre site. Choisissez une option ci-dessous pour commencer.",
+ 'admin:users:adduser:label' => "Cliquez ici pour ajouter un nouvel utilisateur ...",
+ 'admin:users:opt:linktext' => "Configurer des utilisateurs ...",
+ 'admin:users:opt:description' => "Configurer les utilisateurs et les informations des comptes.",
+ 'admin:users:find' => "Trouver",
+
+ 'admin:settings' => "Paramètres",
+ 'admin:settings:basic' => "Réglages de base",
+ 'admin:settings:advanced' => "Paramètres avancés",
+ 'admin:site:description' => "Ce menu vous permet de définir les paramètres principaux de votre site. Choisissez une option ci-dessous pour commencer.",
+ 'admin:site:opt:linktext' => "Configurer le site...",
+ 'admin:site:access:warning' => "Changer les paramètres d'accès n'affectera que les permissions de contenu créées dans le futur.",
+
+ 'admin:dashboard' => "Tableau de bord",
+ 'admin:widget:online_users' => "Utilisateurs en ligne",
+ 'admin:widget:online_users:help' => "Affiche la liste des utilisateurs actuellement sur le site",
+ 'admin:widget:new_users' => "Nouveaux utilisateurs",
+ 'admin:widget:new_users:help' => "Affiche la liste des nouveaux utilisateurs",
+ 'admin:widget:content_stats' => "Statistiques",
+ 'admin:widget:content_stats:help' => "Gardez une trace du contenu créé par vos utilisateurs",
+ 'widget:content_stats:type' => "Type de contenu",
+ 'widget:content_stats:number' => "Nombre",
+
+ 'admin:widget:admin_welcome' => "Bienvenue",
+ 'admin:widget:admin_welcome:help' => "Une courte introduction à la zone d'administration de Elgg",
+ 'admin:widget:admin_welcome:intro' =>
+"Bienvenue sur Elgg ! Vous êts actuellement sur le tableau de bord de l'administration. Il permet de faire le suivi de ce qui se passe sur le site.",
+
+ 'admin:widget:admin_welcome:admin_overview' =>
+"La navigation dans l'administration se fait à l'aide du menu de droite. Il est organisé en
+. Trois sections :
+ <dl>
+ <dt>Administrer</dt><dd>Les tâches quotidiennes comme le suivi du contenu signalé, l'aperçu des utilisateurs en ligne, l'affichage des statistiques...</dd>
+ <dt>Configurer</dt><dd>Les tâches occasionnelles comme le paramétrage du nom du site ou l'activation d'un plugin.</dd>
+ <dt>Développer</dt><dd>Pour les développeurs qui créent des plugins ou conçoient des thèmes. (Nécessite des connaissances en programmation.)</dd>
+ </dl>
+ ",
+
+ // argh, this is ugly
+ 'admin:widget:admin_welcome:outro' => "<br /> Soyez sûr de vérifier les ressources disponibles via les liens de bas de page et merci d'utiliser Elgg !",
+
+ 'admin:footer:faq' => "FAQ Administration",
+ 'admin:footer:manual' => "Guide sur l'administration",
+ 'admin:footer:community_forums' => "Forums de la communauté Elgg",
+ 'admin:footer:blog' => "Blog d'Elgg",
+
+ 'admin:plugins:category:all' => "Tous les plugins",
+ 'admin:plugins:category:active' => "Plugins Actifs",
+ 'admin:plugins:category:inactive' => "Plugins Inactifs",
+ 'admin:plugins:category:admin' => "Admin",
+ 'admin:plugins:category:bundled' => "Empaqueté",
+ 'admin:plugins:category:nonbundled' => "Non-Empaqueté",
+ 'admin:plugins:category:content' => "Contenu",
+ 'admin:plugins:category:development' => "Développement",
+ 'admin:plugins:category:enhancement' => "Améliorations",
+ 'admin:plugins:category:api' => "Service/API",
+ 'admin:plugins:category:communication' => "Communication",
+ 'admin:plugins:category:security' => "Sécurité et spam",
+ 'admin:plugins:category:social' => "Social",
+ 'admin:plugins:category:multimedia' => "Multimédia",
+ 'admin:plugins:category:theme' => "Thèmes",
+ 'admin:plugins:category:widget' => "Widgets",
+ 'admin:plugins:category:utility' => "Utilitaires",
+
+ 'admin:plugins:sort:priority' => "Priorité",
+ 'admin:plugins:sort:alpha' => "Alphabétique",
+ 'admin:plugins:sort:date' => "Le plus récent",
+
+ 'admin:plugins:markdown:unknown_plugin' => "Plugin inconnu.",
+ 'admin:plugins:markdown:unknown_file' => "fichier inconnu.",
+
+
+ 'admin:notices:could_not_delete' => "Impossible de supprimer la remarque.",
+
+ 'admin:options' => "Options Administrateur",
+
+
+/**
+ * Plugins
+ */
+ 'plugins:settings:save:ok' => "Le paramètrage du plugin %s a été enregistré.",
+ 'plugins:settings:save:fail' => "Il y a eu un problème lors de l'enregistrement des paramètres du plugin %s.",
+ 'plugins:usersettings:save:ok' => "Le paramètrage du plugin a été enregistré avec succès.",
+ 'plugins:usersettings:save:fail' => "Il y a eu un problème lors de l'enregistrement du paramètrage du plugin %s.",
+ 'item:object:plugin' => "Plugins",
+
+ 'admin:plugins' => "Administrer les plugins",
+ 'admin:plugins:activate_all' => "Tout Activer",
+ 'admin:plugins:deactivate_all' => "Tout Désactiver",
+ 'admin:plugins:activate' => "Activer",
+ 'admin:plugins:deactivate' => "Désactiver",
+ 'admin:plugins:description' => "Ce menu vous permet de contrôler et de configurer les outils installés sur votre site.",
+ 'admin:plugins:opt:linktext' => "Configurer les outils...",
+ 'admin:plugins:opt:description' => "Configurer les outils installés sur le site.",
+ 'admin:plugins:label:author' => "Auteur",
+ 'admin:plugins:label:copyright' => "Copyright",
+ 'admin:plugins:label:categories' => "Catégories",
+ 'admin:plugins:label:licence' => "Licence",
+ 'admin:plugins:label:website' => "URL",
+ 'admin:plugins:label:moreinfo' => "Plus d'informations",
+ 'admin:plugins:label:version' => "Version",
+ 'admin:plugins:label:location' => "Adresse",
+ 'admin:plugins:label:dependencies' => "Dépendances",
+
+ 'admin:plugins:warning:elgg_version_unknown' => "Ce plugin utilise un ancien fichier manifest.xml et ne précise pas si cette version est compatible avec l'Elgg actuel. Il ne fonctionnera probablement pas !",
+ 'admin:plugins:warning:unmet_dependencies' => "Ce plugin ne retrouve pas certaines dépendances et ne peut être activé. Vérifiez les dépendances pour plus d'infos.",
+ 'admin:plugins:warning:invalid' => "%s n'est pas un plugin valide d'Elgg. Vérifiez <a href=\"http://docs.elgg.org/Invalid_Plugin\">la documentation d'Elgg</a> les conseils de dépannage.",
+ 'admin:plugins:cannot_activate' => "Activation impossible",
+
+ 'admin:plugins:set_priority:yes' => "%s Réordonné",
+ 'admin:plugins:set_priority:no' => "Impossible de réordonné %s.",
+ 'admin:plugins:set_priority:no_with_msg' => "Impossible de réordonner %s. Erreur : %s",
+ 'admin:plugins:deactivate:yes' => "Désactivé %s.",
+ 'admin:plugins:deactivate:no' => "Impossible de désactiver %s.",
+ 'admin:plugins:deactivate:no_with_msg' => "Impossible de désactiver %s. Erreur : %s",
+ 'admin:plugins:activate:yes' => "%s Activé.",
+ 'admin:plugins:activate:no' => "Impossible d'activer %s.",
+ 'admin:plugins:activate:no_with_msg' => "Impossible d'activer %s. Erreur : %s",
+ 'admin:plugins:categories:all' => "Toutes les catégories",
+ 'admin:plugins:plugin_website' => "Site du plugin",
+ 'admin:plugins:author' => "%s",
+ 'admin:plugins:version' => "Version %s",
+ 'admin:plugin_settings' => "Paramètres du plugin",
+ 'admin:plugins:warning:unmet_dependencies_active' => "Ce plugin est actif, mais a des dépendances non introuvables. Vous pouvez avoir des problèmes. Voir 'plus d'info' ci-dessous pour plus de détails.",
+
+ 'admin:plugins:dependencies:type' => "Type",
+ 'admin:plugins:dependencies:name' => "Nom",
+ 'admin:plugins:dependencies:expected_value' => "Valeur testée",
+ 'admin:plugins:dependencies:local_value' => "Valeur réelle",
+ 'admin:plugins:dependencies:comment' => "Commentaire",
+
+ 'admin:statistics:description' => "Cette page est un résumé des statistiques de votre site. Si vous avez besoin de statistiques plus détaillées, une version professionnelle d'administration est disponible.",
+ 'admin:statistics:opt:description' => "Voir des informations statistiques sur les utilisateurs et les objets de votre site.",
+ 'admin:statistics:opt:linktext' => "Voir statistiques...",
+ 'admin:statistics:label:basic' => "Statistiques basiques du site",
+ 'admin:statistics:label:numentities' => "Entités sur le site",
+ 'admin:statistics:label:numusers' => "Nombre d'utilisateurs",
+ 'admin:statistics:label:numonline' => "Nombre d'utilisateurs en ligne",
+ 'admin:statistics:label:onlineusers' => "Utilisateurs en ligne actuellement",
+ 'admin:statistics:label:version' => "Version d'Elgg",
+ 'admin:statistics:label:version:release' => "Révision",
+ 'admin:statistics:label:version:version' => "Version",
+
+ 'admin:user:label:search' => "Trouver des utilisateurs :",
+ 'admin:user:label:searchbutton' => "Chercher",
+
+ 'admin:user:ban:no' => "Cet utilisateur ne peut pas être banni",
+ 'admin:user:ban:yes' => "Utilisateur banni.",
+ 'admin:user:self:ban:no' => "Vous ne pouvez pas vous bannir vous même",
+ 'admin:user:unban:no' => "Cet utilisateur ne peut pas être réintégré",
+ 'admin:user:unban:yes' => "Utilisateur réintégré.",
+ 'admin:user:delete:no' => "Cet utilisateur ne peut pas être supprimé",
+ 'admin:user:delete:yes' => "Utilisateur supprimé",
+ 'admin:user:self:delete:no' => "Vous ne pouvez pas vous supprimer",
+
+ 'admin:user:resetpassword:yes' => "Mot de passe réinitialisé, utilisateur notifié.",
+ 'admin:user:resetpassword:no' => "Le mot de passe n'a pas pu être réinitialisé.",
+
+ 'admin:user:makeadmin:yes' => "L'utilisateur est maintenant un administrateur.",
+ 'admin:user:makeadmin:no' => "Nous ne pouvons pas faire de cet utilisateur un administrateur.",
+
+ 'admin:user:removeadmin:yes' => "L'utilisateur n'est plus administrateur.",
+ 'admin:user:removeadmin:no' => "Nous ne pouvons pas supprimer les privilèges d'administrateur à cet utilisateur.",
+ 'admin:user:self:removeadmin:no' => "Vous ne pouvez pas supprimer vos propres privilèges d'administrateur.",
+
+ 'admin:appearance:menu_items' => "Les éléments de menu",
+ 'admin:menu_items:configure' => "Configurer les éléments du menu principal",
+ 'admin:menu_items:description' => "Sélectionnez les éléments de menu que vous voulez afficher en liens directs. Les éléments de menu inutilisés seront ajoutées dans la liste «Plus».",
+ 'admin:menu_items:hide_toolbar_entries' => "Supprimer les liens dans le menu barre d'outils ?",
+ 'admin:menu_items:saved' => "Les éléments de menu sauvés.",
+ 'admin:add_menu_item' => "Ajouter un élément de menu personnalisé",
+ 'admin:add_menu_item:description' => "Remplissez le nom et l'URL d'affichage pour ajouter des éléments personnalisés à votre menu de navigation.",
+
+ 'admin:appearance:default_widgets' => "Widgets par défaut",
+ 'admin:default_widgets:unknown_type' => "Type du widget Inconnu",
+ 'admin:default_widgets:instructions' => "Ajoutez, supprimez, positionnez et configurez les widgets par défaut pour la page des profils. Ces changements s'appliqueront uniquement aux nouveaux utilisateurs sur le site.",
+
+
+/**
+ * User settings
+ */
+ 'usersettings:description' => "Le panneau de configuration vous permet de contrôler tous vos paramètres et vos plugins. Choisissez une option ci-dessous pour continuer.",
+
+ 'usersettings:statistics' => "Vos statistiques",
+ 'usersettings:statistics:opt:description' => "VVisualiser les statistiques des utilisateurs et des objets sur votre espace.",
+ 'usersettings:statistics:opt:linktext' => "Statistiques de votre compte.",
+
+ 'usersettings:user' => "Vos paramètres",
+ 'usersettings:user:opt:description' => "Ceci vous permet de contrôler vos paramètres.",
+ 'usersettings:user:opt:linktext' => "Changer vos paramètres",
+
+ 'usersettings:plugins' => "Outils",
+ 'usersettings:plugins:opt:description' => "Configurer vos paramètres (s'il y en a) pour activer vos outils.",
+ 'usersettings:plugins:opt:linktext' => "Configurer vos outils",
+
+ 'usersettings:plugins:description' => "Ce panneau de configuration vous permez de mettre à jour les options de vos outils installés par l'administrateur.",
+ 'usersettings:statistics:label:numentities' => "Vos entités",
+
+ 'usersettings:statistics:yourdetails' => "Vos informations",
+ 'usersettings:statistics:label:name' => "Votre nom",
+ 'usersettings:statistics:label:email' => "E-mail",
+ 'usersettings:statistics:label:membersince' => "Membre depuis",
+ 'usersettings:statistics:label:lastlogin' => "Dernière connexion",
+
+/**
+ * Activity river
+ */
+ 'river:all' => "Toute l'activité du site",
+ 'river:mine' => "Mon activité",
+ 'river:friends' => "Activités des Amis",
+ 'river:select' => "Afficher %s",
+ 'river:comments:more' => "+%u plus",
+ 'river:generic_comment' => "commenté sur %s",
+
+ 'friends:widget:description' => "Affiche certains de vos amis.",
+ 'friends:num_display' => "Nombre d'amis à afficher",
+ 'friends:icon_size' => "Taille des icônes",
+ 'friends:tiny' => "minuscule",
+ 'friends:small' => "petit",
+
+/**
+ * Generic action words
+ */
+
+ 'save' => "Enregistrer",
+ 'reset' => "Réinitialiser",
+ 'publish' => "Publier",
+ 'cancel' => "Annuler",
+ 'saving' => "Enregistrement en cours",
+ 'update' => "Mettre à jour",
+ 'preview' => "Prévisualisation",
+ 'edit' => "Modifier",
+ 'delete' => "Supprimer",
+ 'accept' => "Accepter",
+ 'load' => "Charger",
+ 'upload' => "Charger",
+ 'ban' => "Bannir",
+ 'unban' => "Réintégrer",
+ 'banned' => "Banni",
+ 'enable' => "Activer",
+ 'disable' => "Désactiver",
+ 'request' => "Requête",
+ 'complete' => "Complété",
+ 'open' => "Ouvrir",
+ 'close' => "Fermer",
+ 'reply' => "Répondre",
+ 'more' => "Plus",
+ 'comments' => "Commentaires",
+ 'import' => "Importer",
+ 'export' => "Exporter",
+ 'untitled' => "Sans titre",
+ 'help' => "Aide",
+ 'send' => "Envoyer",
+ 'post' => "Poster",
+ 'submit' => "Soumettre",
+ 'comment' => "Commentaire",
+ 'upgrade' => "Mise à jour",
+ 'sort' => "Trier",
+ 'filter' => "Filtrer",
+ 'new' => "Nouveau",
+ 'add' => "Ajouter",
+ 'create' => "Créer",
+
+ 'site' => "Site",
+ 'activity' => "Activité",
+ 'members' => "Membres",
+
+ 'up' => "Monter",
+ 'down' => "Descendre",
+ 'top' => "Au dessus",
+ 'bottom' => "Au dessous",
+
+ 'invite' => "Inviter",
+
+ 'resetpassword' => "Réinitialiser le mot de passe",
+ 'makeadmin' => "Rendre l'utilisateur administrateur",
+ 'removeadmin' => "Supprimer les droits administrateur de l'utilisateur",
+
+ 'option:yes' => "Oui",
+ 'option:no' => "Non",
+
+ 'unknown' => "Inconnu",
+
+ 'active' => "Activé",
+ 'total' => "Total",
+
+ 'learnmore' => "Cliquer ici pour en apprendre plus.",
+
+ 'content' => "contenu",
+ 'content:latest' => "Dernière activité",
+ 'content:latest:blurb' => "Vous pouvez également cliquer ici pour voir les dernières modifications effectuées sur le site.",
+
+ 'link:text' => "voir le lien",
+/**
+ * Generic questions
+ */
+
+ 'question:areyousure' => "Etês-vous sûr ?",
+
+/**
+ * Generic data words
+ */
+
+ 'title' => "Titre",
+ 'description' => "Description",
+ 'tags' => "Tags",
+ 'spotlight' => "Projecteur sur",
+ 'all' => "Tous",
+ 'mine' => "Moi",
+
+ 'by' => "par",
+ 'none' => "aucun",
+
+ 'annotations' => "Annotations",
+ 'relationships' => "Relations",
+ 'metadata' => "Métadonnées",
+ 'tagcloud' => "Nuage de tags",
+ 'tagcloud:allsitetags' => "Tous les tags du site",
+
+ 'on' => "Actif",
+ 'off' => "Inactif",
+
+/**
+ * Entity actions
+ */
+ 'edit:this' => "Modifier",
+ 'delete:this' => "Supprimer",
+ 'comment:this' => "Commenter",
+
+/**
+ * Input / output strings
+ */
+
+ 'deleteconfirm' => "Etes-vous sur de voloir supprimer cet élément ?",
+ 'fileexists' => "Un fichier a déjà été chargé. Pour le remplacer sélectionner le ci-dessous :",
+
+/**
+ * User add
+ */
+
+ 'useradd:subject' => "Compte de l'utilisateur créé",
+ 'useradd:body' => "
+%s,
+
+Un compte utilisateur vous a été créé a %s. Pour vous connecter, rendez-vous :
+
+%s
+
+Et connectez vous avec les identifiants suivant :
+
+Nom d'utilisateur : %s
+Mot de passe : %s
+
+Une fois que vous vous êtes connecté(e), nous vous conseillons fortement de changer votre mot de passe.
+",
+
+/**
+ * System messages
+ **/
+
+ 'systemmessages:dismiss' => "Cliquer pour fermer",
+
+
+/**
+ * Import / export
+ */
+ 'importsuccess' => "L'import des données a été réalisée avec succès",
+ 'importfail' => "L'import OpenDD des données a échouée.",
+
+/**
+ * Time
+ */
+
+ 'friendlytime:justnow' => "à l'instant",
+ 'friendlytime:minutes' => "il y a %s minutes",
+ 'friendlytime:minutes:singular' => "il y a une minute",
+ 'friendlytime:hours' => "il y a %s heures",
+ 'friendlytime:hours:singular' => "il y a une heure",
+ 'friendlytime:days' => "Il y a %s jours",
+ 'friendlytime:days:singular' => "hier",
+ 'friendlytime:date_format' => "j F Y @ g:ia",
+
+ 'date:month:01' => "Janvier %s",
+ 'date:month:02' => "Février %s",
+ 'date:month:03' => "Mars %s",
+ 'date:month:04' => "Avril %s",
+ 'date:month:05' => "Mai %s",
+ 'date:month:06' => "Juin %s",
+ 'date:month:07' => "Juillet %s",
+ 'date:month:08' => "Août %s",
+ 'date:month:09' => "Septembre %s",
+ 'date:month:10' => "Octobre %s",
+ 'date:month:11' => "Novembre %s",
+ 'date:month:12' => "Décembre %s",
+
+
+/**
+ * System settings
+ */
+
+ 'installation:sitename' => "Le nom de votre site (par exemple 'Mon site de réseau social') : ",
+ 'installation:sitedescription' => "Brève description du site (facultatif) : ",
+ 'installation:wwwroot' => "L'URL du site, suivi de ' / ' : ",
+ 'installation:path' => "Chemin physique des fichiers sur le serveur, suivi par ' / ' : ",
+ 'installation:dataroot' => "Chemin complet où seront hébergés les fichiers uploadés par les utilisateurs, suivi de ' / ' :",
+ 'installation:dataroot:warning' => "Vous devez créer ce répertoire manuellement. Il doit se situer dans un répertoire différent de votre installation de Elgg.",
+ 'installation:sitepermissions' => "Les permissions d'accés par défaut : ",
+ 'installation:language' => "La langue par défaut de votre site : ",
+ 'installation:debug' => "Le mode de débogage permet de mettre en évidence certaines erreurs de fonctionnement, cependant il ralenti l'accès au site, il est à utiliser uniquement en cas de problème :",
+ 'installation:debug:none' => "Désactive le mode debug (recommandé)",
+ 'installation:debug:error' => "Afficher seulement les erreurs critiques",
+ 'installation:debug:warning' => "Afficher les erreurs et les avertissements",
+ 'installation:debug:notice' => "Log toutes les erreurs, les avertissements et les avis",
+
+ // Walled Garden support
+ 'installation:registration:description' => "L'enregistrement d'un utilisateur est activé par défaut. Désactivez cette option si vous ne voulez pas que de nouveaux utilisateurs soient en mesure de s'inscrire eux-mêmes.",
+ 'installation:registration:label' => "Permettre à de nouveaux utilisateurs de s'enregistrer eux-mêmes",
+ 'installation:walled_garden:description' => "Autoriser le site à fonctionner comme un réseau privé. Cela empêchera les utilisateurs non connectés d'afficher les pages du site autres que celles expressément spécifiées publiques.",
+ 'installation:walled_garden:label' => "Restreindre les pages aux utilisateurs enregistrés",
+
+ 'installation:httpslogin' => "Activer ceci afin que les utilisateurs puissent se connecter via le protocole https. Vous devez avoir https activé sur votre serveur afin que cela fonctionne.",
+ 'installation:httpslogin:label' => "Activer les connexions HTTPS",
+ 'installation:view' => "Entrer le nom de la vue qui sera utilisée automatiquement pour l'affichage du site (par exemple : 'mobile'), laissez par défaut en cas de doute :",
+
+ 'installation:siteemail' => "L'adresse e-mail du site (utilisée lors d'envoi d'e-mail par le système)",
+
+ 'installation:disableapi' => "Elgg fournit une API pour l'élaboration de services web qui permettent à des applications distantes d'interagir avec votre site.",
+ 'installation:disableapi:label' => "Activer les services web d'Elgg",
+
+ 'installation:allow_user_default_access:description' => "Si coché, les utilisateurs pourront modifier leur niveau d'accés par défaut et pourront surpasser le niveau d'accés mis en place par défaut dans le système.",
+ 'installation:allow_user_default_access:label' => "Autoriser un niveau d'accés par défaut pour l'utilisateur",
+
+ 'installation:simplecache:description' => "Le cache simple augmente les performances en mettant en cache du contenu statique comme des CSS et des fichiers Javascripts. Normalement vous ne devriez pas avoir besoin de l'activer.",
+ 'installation:simplecache:label' => "Utiliser un cache simple (recommandé)",
+
+ 'installation:viewpathcache:description' => "Le cache utilisé pour stocker les chemins vers les vues des greffons réduit le temps de chargement de ces derniers.",
+ 'installation:viewpathcache:label' => "Utiliser le cache de stockage des chemins vers les vues des greffons (recommandé)",
+
+ 'upgrading' => "Mise à jour en cours",
+ 'upgrade:db' => "Votre base de données a été mise à jour.",
+ 'upgrade:core' => "Votre installation de Elgg a été mise à jour",
+ 'upgrade:unable_to_upgrade' => "Impossible de mettre à jour.",
+ 'upgrade:unable_to_upgrade_info' =>
+ "Cette installation ne peut pas être mise à jour, car des fichiers de l'ancienne version
+ ont été détectées dans le répertoire noyau d'Elgg (core). Ces fichiers ont été jugés obsolètes et doivent être
+ retirés pour Elgg pour fonctionner correctement. Si vous n'avez pas apporté des changements au noyau d'Elgg, vous pouvez
+ simplement supprimer le répertoire noyau (core) et le remplacer par celui du dernier
+ paquet téléchargé d'Elgg depuis <a href=\"http://elgg.org> elgg.org\" </ a>. <br /> <br />
+
+ Si vous avez besoin d'instructions détaillées, s'il vous plaît visiter <a href=\"http://docs.elgg.org/wiki/Upgrading_Elgg\"> <a
+ Documentation sur la mise à niveau d'Elgg </ a>. Si vous avez besoin d'aide, merci d'écrire à
+ <a Forums href=\"http://community.elgg.org/pg/groups/discussion/\"> aide technique communautaire (support)</ a>. ",
+
+ 'update:twitter_api:deactivated' => "Twitter API (précédemment Twitter Service) a été désactivé lors de la mise à niveau. S'il vous plaît activer manuellement si nécessaire.",
+ 'update:oauth_api:deactivated' => "OAuth API (précédemment OAuth Lib) a été désactivé lors de la mise à niveau. S'il vous plaît activer manuellement si nécessaire.",
+
+ 'deprecated:function' => "%s() a été déclaré obsolète par %s()",
+
+/**
+ * Welcome
+ */
+
+ 'welcome' => "Bienvenue",
+ 'welcome:user' => "Bienvenue %s",
+
+/**
+ * Emails
+ */
+ 'email:settings' => "Paramètres e-mail",
+ 'email:address:label' => "Votre adresse e-mail",
+
+ 'email:save:success' => "Votre nouvelle adresse e-mail a été enregistrée, vous allez recevoir un e-mail de confirmation.",
+ 'email:save:fail' => "Votre nouvelle adresse e-mail n'a pas pu être enregistrée.",
+
+ 'friend:newfriend:subject' => "%s vous a ajouté comme contact !",
+ 'friend:newfriend:body' => "%s vous a ajouté comme contact !
+
+Pour voir son profil cliquer sur le lien ci-dessous
+
+ %s
+
+Vous ne pouvez pas répondre à cet e-mail.",
+
+
+
+ 'email:resetpassword:subject' => "Réinitialisation du mot de passe !",
+ 'email:resetpassword:body' => "Bonjour %s,
+
+Votre nouveau mot de passe est : %s",
+
+
+ 'email:resetreq:subject' => "Demander un nouveau mot de passe.",
+ 'email:resetreq:body' => "Bonjour %s,
+
+Quelqu'un (avec l'adresse IP %s) a demandé un nouveau mot de passe pour son compte.
+
+Si vous avez demandé ce changement veuillez cliquer sur le lien ci-dessous, sinon ignorez cet e-mail.
+
+%s
+",
+
+/**
+ * user default access
+ */
+
+'default_access:settings' => "Votre niveau d'accés par défaut",
+'default_access:label' => "Accés par défaut",
+'user:default_access:success' => "Votre nouveau niveau d'accés par défaut a été enregistré.",
+'user:default_access:failure' => "Votre nouveau niveau d'accés par défaut n'a pu être enregistré.",
+
+/**
+ * XML-RPC
+ */
+ 'xmlrpc:noinputdata' => "Input data missing",
+
+/**
+ * Comments
+ */
+
+ 'comments:count' => "%s commentaire(s)",
+
+ 'riveraction:annotation:generic_comment' => "%s a écrit un commentaire sur %s",
+
+ 'generic_comments:add' => "Laisser un commentaire",
+ 'generic_comments:post' => "Poster un commentaire",
+ 'generic_comments:text' => "Commentaire",
+ 'generic_comments:latest' => "Derniers commentaires",
+ 'generic_comment:posted' => "Votre commentaire a été publié avec succés.",
+ 'generic_comment:deleted' => "Votre commentaire a été correctement supprimé.",
+ 'generic_comment:blank' => "Désolé; vous devez remplir votre commentaire avant de pouvoir l'enregistrer.",
+ 'generic_comment:notfound' => "Désolé; l'élément recherché n'a pas été trouvé.",
+ 'generic_comment:notdeleted' => "Désolé; le commentaire n'a pu être supprimé.",
+ 'generic_comment:failure' => "Une erreur est survenue lors de l'ajout de votre commentaire. Veillez réessayer.",
+ 'generic_comment:none' => "Pas de commentaires",
+ 'generic_comment:title' => "Commentaire par %s",
+
+ 'generic_comment:email:subject' => "Vous avez un nouveau commentaire !",
+ 'generic_comment:email:body' => "Vous avez un nouveau commentaire sur l'élément '%s' de %s. Voici son contenu :
+
+
+%s
+
+
+Pour répondre ou voir le contenu de référence, suivez le lien :
+
+%s
+
+Pour voir le profil de %s, suivez ce lien :
+
+%s
+
+Ne répondez pas à cet e-mail.",
+
+/**
+ * Entities
+ */
+ 'byline' => "Par %s",
+ 'entity:default:strapline' => "Créé le %s par %s",
+ 'entity:default:missingsupport:popup' => "Cette entité ne peut pas être affichée correctement. C'est peut-être du à un plugin qui a été supprimé.",
+
+ 'entity:delete:success' => "L'entité %s a été effacée",
+ 'entity:delete:fail' => "L'entité %s n'a pas pu être effacée",
+
+
+/**
+ * Action gatekeeper
+ */
+ 'actiongatekeeper:missingfields' => "Il manque les champs __token ou __ts dans le formulaire.",
+ 'actiongatekeeper:tokeninvalid' => "Une erreur est survenue. Cela veut probablement dire que la page que vous utilisiez a expirée. Merci de réessayer",
+ 'actiongatekeeper:timeerror' => "La page a expiré, rafraichissez et recommencez à nouveau.",
+ 'actiongatekeeper:pluginprevents' => "Une extension a empêché ce formulaire d'être envoyé",
+
+
+/**
+ * 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' => "Nuage de tag du site",
+
+/**
+ * Javascript
+ */
+
+ 'js:security:token_refresh_failed' => "Impossible de contacter %s. Vous aurez sans doute des difficultés à enregistrer le contenu.",
+ 'js:security:token_refreshed' => "La connexion à %s est restaurée !",
+
+/**
+ * Languages according to ISO 639-1
+ */
+ "aa" => "Afar",
+ "ab" => "Abkhaze",
+ "af" => "Afrikaans",
+ "am" => "Amharique",
+ "ar" => "Arabe",
+ "as" => "Assamais",
+ "ay" => "Aymara",
+ "az" => "Azéri",
+ "ba" => "Bachkir",
+ "be" => "Biélorusse",
+ "bg" => "Bulgare",
+ "bh" => "Bihari",
+ "bi" => "Bichelamar",
+ "bn" => "Bengalî",
+ "bo" => "Tibétain",
+ "br" => "Breton",
+ "ca" => "Catalan",
+ "co" => "Corse",
+ "cs" => "Tchèque",
+ "cy" => "Gallois",
+ "da" => "Danois",
+ "de" => "Allemand",
+ "dz" => "Dzongkha",
+ "el" => "Grec",
+ "en" => "Anglais",
+ "eo" => "Espéranto",
+ "es" => "Espagnol",
+ "et" => "Estonien",
+ "eu" => "Basque",
+ "fa" => "Persan",
+ "fi" => "Finnois",
+ "fj" => "Fidjien",
+ "fo" => "Féringien",
+ "fr" => "Français",
+ "fy" => "Frison",
+ "ga" => "Irlandais",
+ "gd" => "Écossais",
+ "gl" => "Galicien",
+ "gn" => "Guarani",
+ "gu" => "Gujarâtî",
+ "he" => "Hébreu",
+ "ha" => "Haoussa",
+ "hi" => "Hindî",
+ "hr" => "Croate",
+ "hu" => "Hongrois",
+ "hy" => "Arménien",
+ "ia" => "Interlingua",
+ "id" => "Indonésien",
+ "ie" => "Occidental",
+ "ik" => "Inupiaq",
+ //"in" => "Indonésien",
+ "is" => "Islandais",
+ "it" => "Italien",
+ "iu" => "Inuktitut",
+ "iw" => "Hébreu (obsolète)",
+ "ja" => "Japonais",
+ "ji" => "Yiddish (obsolète)",
+ "jw" => "Javanais",
+ "ka" => "Géorgien",
+ "kk" => "Kazakh",
+ "kl" => "Kalaallisut",
+ "km" => "Khmer",
+ "kn" => "Kannara",
+ "ko" => "Coréen",
+ "ks" => "Kashmiri",
+ "ku" => "Kurde",
+ "ky" => "Kirghiz",
+ "la" => "Latin",
+ "ln" => "Lingala",
+ "lo" => "Lao",
+ "lt" => "Lituanien",
+ "lv" => "Letton",
+ "mg" => "Malgache",
+ "mi" => "Maori",
+ "mk" => "Macédonien",
+ "ml" => "Malayalam",
+ "mn" => "Mongol",
+ "mo" => "Moldave",
+ "mr" => "Marâthî",
+ "ms" => "Malais",
+ "mt" => "Maltais",
+ "my" => "Birman",
+ "na" => "Nauruan",
+ "ne" => "Népalais",
+ "nl" => "Néerlandais",
+ "no" => "Norvégien",
+ "oc" => "Occitan",
+ "om" => "Oromo",
+ "or" => "Oriya",
+ "pa" => "Panjâbî",
+ "pl" => "Polonais",
+ "ps" => "Pachto",
+ "pt" => "Portugais",
+ "qu" => "Quechua",
+ "rm" => "Romanche",
+ "rn" => "Kirundi",
+ "ro" => "Roumain",
+ "ru" => "Russe",
+ "rw" => "Kinyarwanda",
+ "sa" => "Sanskrit",
+ "sd" => "Sindhi",
+ "sg" => "Sango",
+ "sh" => "Serbo-Croate",
+ "si" => "Cingalais",
+ "sk" => "Slovaque",
+ "sl" => "Slovène",
+ "sm" => "Samoan",
+ "sn" => "Shona",
+ "so" => "Somali",
+ "sq" => "Albanais",
+ "sr" => "Serbe",
+ "ss" => "Siswati",
+ "st" => "Sotho",
+ "su" => "Soundanais",
+ "sv" => "Suédois",
+ "sw" => "Swahili",
+ "ta" => "Tamoul",
+ "te" => "Télougou",
+ "tg" => "Tadjik",
+ "th" => "Thaï",
+ "ti" => "Tigrinya",
+ "tk" => "Turkmène",
+ "tl" => "Tagalog",
+ "tn" => "Tswana",
+ "to" => "Tongien",
+ "tr" => "Turc",
+ "ts" => "Tsonga",
+ "tt" => "Tatar",
+ "tw" => "Twi",
+ "ug" => "Ouïghour",
+ "uk" => "Ukrainien",
+ "ur" => "Ourdou",
+ "uz" => "Ouzbek",
+ "vi" => "Vietnamien",
+ "vo" => "Volapük",
+ "wo" => "Wolof",
+ "xh" => "Xhosa",
+ //"y" => "Yiddish",
+ "yi" => "Yiddish",
+ "yo" => "Yoruba",
+ "za" => "Zhuang",
+ "zh" => "Chinois",
+ "zu" => "Zoulou",
+);
+
+add_translation("fr",$french);
diff --git a/mod/languages/languages/fr/fr.profile.php b/mod/languages/languages/fr/fr.profile.php
new file mode 100644
index 000000000..b0d9d255d
--- /dev/null
+++ b/mod/languages/languages/fr/fr.profile.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg profile plugin language pack
+ */
+
+$french = array(
+ 'profile' => "Profil",
+ 'profile:notfound' => "Désolé, nous n'avons pas pu trouver le profil demandé.",
+
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.reportedcontent.php b/mod/languages/languages/fr/fr.reportedcontent.php
new file mode 100644
index 000000000..c431354e6
--- /dev/null
+++ b/mod/languages/languages/fr/fr.reportedcontent.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Elgg reported content plugin language pack
+ *
+ * @package ElggReportedContent
+ */
+
+$french = array(
+
+ 'item:object:reported_content' => "Eléments signalés",
+ 'admin:administer_utilities:reportedcontent' => "Contenu signalé",
+ 'reportedcontent' => "Contenu signalé",
+ 'reportedcontent:this' => "Signaler ceci",
+ 'reportedcontent:this:tooltip' => "Signaler cette page à un administrateur",
+ 'reportedcontent:none' => "Il n'y a pas de contenu signalé",
+ 'reportedcontent:report' => "Signaler ceci",
+ 'reportedcontent:title' => "Titre de la page",
+ 'reportedcontent:deleted' => "Le contenu signalé a été effacé",
+ 'reportedcontent:notdeleted' => "Il a été impossible d'effacer ce signalement",
+ 'reportedcontent:delete' => "L'effacer",
+ 'reportedcontent:areyousure' => "Etes-vous sûr de vouloir l'effacer ?",
+ 'reportedcontent:archive' => "L'archiver",
+ 'reportedcontent:archived' => "Le signalement a bien été archivé",
+ 'reportedcontent:visit' => "Visiter l'élément signalé",
+ 'reportedcontent:by' => "Signalé par ",
+ 'reportedcontent:objecttitle' => "Titre de l'objet",
+ 'reportedcontent:objecturl' => "URL de l'objet",
+ 'reportedcontent:reason' => "Motif du signalement",
+ 'reportedcontent:description' => "Pourquoi souhaitez-vous signaler ceci ?",
+ 'reportedcontent:address' => "Emplacement de l'élément",
+ 'reportedcontent:success' => "Votre signalement a bien été envoyé à l'adminsitrateur du site",
+ 'reportedcontent:failing' => "Votre signalement n'a pu être envoyé",
+ 'reportedcontent:report' => "Signaler ceci",
+ 'reportedcontent:moreinfo' => "Plus d'information",
+ 'reportedcontent:instructions' => "Ce rapport sera envoyé aux administrateurs de ce site à des fins d'examen.",
+ 'reportedcontent:numbertodisplay' => "Nombre de rapports à afficher",
+ 'reportedcontent:widget:description' => "Afficher le contenu signalé",
+ 'reportedcontent:user' => "Rapport utilisateur",
+
+ 'reportedcontent:failed' => "Désolé, la tentative de signaler ce contenu a échoué.",
+ 'reportedcontent:notarchived' => "Il a été impossible d'archiver ce signalement",
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.search.php b/mod/languages/languages/fr/fr.search.php
new file mode 100644
index 000000000..ec8ae82f3
--- /dev/null
+++ b/mod/languages/languages/fr/fr.search.php
@@ -0,0 +1,21 @@
+<?php
+
+$french = array(
+ 'search:enter_term' => "Entrer un terme de recherche :",
+ 'search:no_results' => "Aucun résultat.",
+ 'search:matched' => "Correspondant: ",
+ 'search:results' => "Résultats pour %s",
+ 'search:no_query' => "Veuillez entrer une requête de recherche.",
+ 'search:search_error' => "Erreur",
+
+ 'search:more' => "+%s plus %s",
+
+ 'search_types:tags' => "Tags",
+
+ 'search_types:comments' => "Commentaires",
+ 'search:comment_on' => "Commentaire sur '%s'",
+ 'search:comment_by' => "par",
+ 'search:unavailable_entity' => "Entité indisponible",
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.tagcloud.php b/mod/languages/languages/fr/fr.tagcloud.php
new file mode 100644
index 000000000..757fa9b98
--- /dev/null
+++ b/mod/languages/languages/fr/fr.tagcloud.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Tag cloud English language file
+ */
+
+$french = array(
+ 'tagcloud:widget:title' => "Nuage de Tags",
+ 'tagcloud:widget:description' => "Nuage de tags",
+ 'tagcloud:widget:numtags' => "Nombre de tags à afficher",
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.thewire.php b/mod/languages/languages/fr/fr.thewire.php
new file mode 100644
index 000000000..b77dc27db
--- /dev/null
+++ b/mod/languages/languages/fr/fr.thewire.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * The Wire English language file
+ */
+
+$french = array(
+
+ /**
+ * Menu items and titles
+ */
+ 'thewire' => "Microblog",
+ 'thewire:everyone' => "Tous les messages du microblog",
+ 'thewire:user' => "Le microblog de %s",
+ 'thewire:friends' => "Messages des contacts sur le microblog",
+ 'thewire:reply' => "Répondre",
+ 'thewire:replying' => "Répondre à %s, qui a écrit",
+ 'thewire:thread' => "Flux",
+ 'thewire:charleft' => "caractères restant",
+ 'thewire:tags' => "Messages du microblog commentés par '% s' avec",
+ 'thewire:noposts' => "Pas encore de messages sur le microblog",
+ 'item:object:thewire' => "Messages du microblog",
+ 'thewire:update' => "Mise à jour",
+ 'thewire:by' => "Message sur le microblog par %s",
+
+ 'thewire:previous' => "Précédent",
+ 'thewire:hide' => "Masquer",
+ 'thewire:previous:help' => "Voir le message précédent",
+ 'thewire:hide:help' => "Masquer le message précédent",
+
+ /**
+ * The wire river
+ */
+ 'river:create:object:thewire' => "%s a envoyé un message à %s",
+ 'thewire:wire' => "microblog",
+
+ /**
+ * Wire widget
+ */
+ 'thewire:widget:desc' => "Affichez vos derniers messages du microblog",
+ 'thewire:num' => "Nombre de publications à afficher",
+ 'thewire:moreposts' => "Plus de messages du microblog",
+
+ /**
+ * Status messages
+ */
+ 'thewire:posted' => "Votre message a bien été posté sur le microblog.",
+ 'thewire:deleted' => "Votre message a bien été supprimé du microblog.",
+ 'thewire:blank' => "Désolé, vous devez d'abord écrire un message avant de l'envoyer.",
+ 'thewire:notfound' => "Désolé, le message spécifié n'a pu être trouvé.",
+ 'thewire:notdeleted' => "Désolé, ce message n'a pu être effacé du microblog.",
+
+ /**
+ * Notifications
+ */
+ 'thewire:notify:subject' => "Nouveau message sur le microblog",
+ 'thewire:notify:reply' => "%s a répondu à %s sur le microblog :",
+ 'thewire:notify:post' => "%s posté sur le microblog:",
+
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.tinymce.php b/mod/languages/languages/fr/fr.tinymce.php
new file mode 100644
index 000000000..16ecdf391
--- /dev/null
+++ b/mod/languages/languages/fr/fr.tinymce.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * TinyMCE language pack.
+ *
+ * @package ElggTinyMCE
+ */
+
+$french = array(
+ 'tinymce:remove' => "Supprimer l'éditeur",
+ 'tinymce:add' => "Ajouter l'éditeur",
+ 'tinymce:word_count' => "Nombre de mots :",
+);
+
+add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.twitter.php b/mod/languages/languages/fr/fr.twitter.php
new file mode 100644
index 000000000..554c6e052
--- /dev/null
+++ b/mod/languages/languages/fr/fr.twitter.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Twitter widget language file
+ */
+ $french = array(
+ 'twitter:title' => "Twitter", 'twitter:info' => "Afficher vos derniers tweets", 'twitter:username' => "Votre nom d'utilisateur Twitter.", 'twitter:num' => "Nombre de tweets à afficher.", 'twitter:visit' => "visitez mon compte", 'twitter:notset' => "Ce module Twitter n'est pas encore configuré. Pour afficher vos derniers tweets, cliquez sur - éditer - et complétez les informations demandées", );
+ add_translation("fr", $french); \ No newline at end of file
diff --git a/mod/languages/languages/fr/fr.twitter_api.php b/mod/languages/languages/fr/fr.twitter_api.php
new file mode 100644
index 000000000..cc9ad7bdb
--- /dev/null
+++ b/mod/languages/languages/fr/fr.twitter_api.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * An english language definition file
+ */
+
+$french = array(
+ 'twitter_api' => "Services Twitter",
+
+ 'twitter_api:requires_oauth' => "Twitter Services nécessitent les bibliothèques OAuth plugin pour être activés.",
+
+ 'twitter_api:consumer_key' => "Clé client",
+ 'twitter_api:consumer_secret' => "Secret du client",
+
+ 'twitter_api:settings:instructions' => "Vous devez obtenir une clé client et le code secret à partir de <a href=\"https://twitter.com/oauth_clients\" target=\"_blank\">Twitter</a> . La plupart des champs sont explicites, la principale donnée dont vous aurez besoin est l'url de retour qui prend la forme http://[VotreSite]/action/twitterlogin/return - [VotreSite] est l'url de votre réseau Elgg.",
+
+ 'twitter_api:usersettings:description' => "Lier votre compte %s avec Twitter.",
+ 'twitter_api:usersettings:request' => "Vous devez d'abord <a href=\"%s\">autoriser</a> %s pour accéder à votre compte Twitter.",
+ 'twitter_api:usersettings:cannot_revoke' => "Vous ne pouvez pas enlever le lien entre votre compte et Twitter parce que vous n'avez pas fournit d'adresse mail ou de mot de passe. <a href=\"%s\">Donnez les maintenant</a>.",
+ 'twitter_api:authorize:error' => "Impossible d'autoriser Twitter.",
+ 'twitter_api:authorize:success' => "L'accès à Twitter a été autorisé.",
+
+ 'twitter_api:usersettings:authorized' => "Vous avez autorisé %s à accéder à votre compte Twitter : @%s.",
+ 'twitter_api:usersettings:revoke' => "Cliquez <a href=\"%s\">ici</a> pour révoquer l'accès.",
+
+ 'twitter_api:revoke:success' => "L'accès à Twitter a été révoqué.",
+
+ 'twitter_api:login' => "Autoriser les utilisateurs existants qui ont lié leur compte Twitter de signer avec Twitter ?",
+ 'twitter_api:new_users' => "Permet aux nouveaux utilisateurs de s'inscrire en utilisant leur compte Twitter, même si l'enregistrement manuel est désactivé ?",
+ 'twitter_api:login:success' => "Vous êtes connecté",
+ 'twitter_api:login:error' => "Impossible de se connecter à Twitter.",
+ 'twitter_api:login:email' => "Vous devez entrer une adresse email valide pour votre nouveau compte %s.",
+
+ 'twitter_api:invalid_page' => "Page invalide",
+
+ 'twitter_api:deprecated_callback_url' => "L'URL de retour de l'API Twitter est modifié comme suit %s. Merci de demandez à votre administrateur de la changer.",
+
+ 'twitter_api:interstitial:settings' => "Configurer vos paramètres",
+ 'twitter_api:interstitial:description' => "Vous êtes presque prêt à utiliser %s ! Nous avons besoin de quelques détails supplémentaires avant que vous pussiez continuer. Ils sont facultatifs, mais ils vous permettrons de vous connecter si Twitter ne fonctionne pas ou si vous décidez de rompre le lien des comptes.",
+
+ 'twitter_api:interstitial:username' => "Voici votre nom utilisateur (login). Il ne peut être changé. Si vous donnez un mot de passe, vous pouvez utiliser le nom d'utilisateur ou votre adresse mail pour vous connecter.",
+
+ 'twitter_api:interstitial:name' => "Voici le nom public que vous verrez quand on interagira avec vous.",
+
+ 'twitter_api:interstitial:email' => "Votre adresse mail. Les utilisateurs ne peuvent la voir par défaut.",
+
+ 'twitter_api:interstitial:password' => "Une mot de passe pour se connecter si Twitter ne fonctionne pas ou si vous décidez de rompre le lien des comptes.",
+ 'twitter_api:interstitial:password2' => "Même mot de passe à nouveau.",
+
+ 'twitter_api:interstitial:no_thanks' => "Non merci",
+
+ 'twitter_api:interstitial:no_display_name' => "Vous devez avoir un nom à afficher.",
+ 'twitter_api:interstitial:invalid_email' => "Vous devez entrer une adresse mail valide ou rien.",
+ 'twitter_api:interstitial:existing_email' => "Cette adresse mail est déjà enregistrée sur le site.",
+ 'twitter_api:interstitial:password_mismatch' => "Vos mots de passe ne sont pas les mêmes.",
+ 'twitter_api:interstitial:cannot_save' => "Impossible de sauvegarder les détails du compte.",
+ 'twitter_api:interstitial:saved' => "Détails du compte sauvegardés !",
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/fr/fr.uservalidationbyemail.php b/mod/languages/languages/fr/fr.uservalidationbyemail.php
new file mode 100644
index 000000000..0ed7f6ecd
--- /dev/null
+++ b/mod/languages/languages/fr/fr.uservalidationbyemail.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Email user validation plugin language pack.
+ *
+ * @package Elgg.Core.Plugin
+ * @subpackage ElggUserValidationByEmail
+ */
+
+$french = array(
+ 'admin:users:unvalidated' => "Invalidées",
+
+ 'email:validate:subject' => "%s veuillez confirmer votre adresse de courriel !",
+ 'email:validate:body' => "%s,
+
+avant de pouvoir commencer à utiliser %s, vous devez confirmer votre adresse mail.
+
+Veuillez confirmer votre adresse de courriel en cliquant sur le lien suivant:
+
+%s
+
+Si vous ne pouvez pas cliquer sur le lien, copier et coller le dans votre navigateur manuellement.
+
+%s
+%s
+",
+ 'email:confirm:success' => "Vous avez validé votre adresse de courriel !",
+ 'email:confirm:fail' => "Votre adresse de courriel n'a pu être vérifiée...",
+
+ 'uservalidationbyemail:registerok' => "Pour activer votre compte, veuillez confirmer votre adresse e-mail en cliquant sur le lien qui vient de vous être envoyé (si vous ne recevez rien, veuillez vérifier votre dossier Spam).",
+ 'uservalidationbyemail:login:fail' => "Votre compte n'est pas validé, par conséquent la tentative de connexion a échoué. Un autre e-mail de validation a été envoyé.",
+
+ 'uservalidationbyemail:admin:no_unvalidated_users' => "Aucun utilisateurs non-validés.",
+
+ 'uservalidationbyemail:admin:unvalidated' => "Invalidés",
+ 'uservalidationbyemail:admin:user_created' => "%s enregistré",
+ 'uservalidationbyemail:admin:resend_validation' => "Renvoyer la validation",
+ 'uservalidationbyemail:admin:validate' => "Valider",
+ 'uservalidationbyemail:admin:delete' => "Supprimer",
+ 'uservalidationbyemail:confirm_validate_user' => "Valider %s ?",
+ 'uservalidationbyemail:confirm_resend_validation' => "Renvoyer la validation e-mail à %s ?",
+ 'uservalidationbyemail:confirm_delete' => "Supprimer %s ?",
+ 'uservalidationbyemail:confirm_validate_checked' => "Valider les utilisateurs cochés ?",
+ 'uservalidationbyemail:confirm_resend_validation_checked' => "Renvoyer la validation aux utilisateurs cochés ?",
+ 'uservalidationbyemail:confirm_delete_checked' => "Supprimer les utilisateurs cochés ?",
+ 'uservalidationbyemail:check_all' => "Tous",
+
+ 'uservalidationbyemail:errors:unknown_users' => "Utilisateurs inconnus",
+ 'uservalidationbyemail:errors:could_not_validate_user' => "Impossible de valider l'utilisateur.",
+ 'uservalidationbyemail:errors:could_not_validate_users' => "Impossible de valider tout les utilisateurs cochés.",
+ 'uservalidationbyemail:errors:could_not_delete_user' => "Impossible de supprimer l'utilisateur.",
+ 'uservalidationbyemail:errors:could_not_delete_users' => "Impossible de supprimer tout les utilisateurs cochés.",
+ 'uservalidationbyemail:errors:could_not_resend_validation' => "Impossible de renvoyer la demande de validation.",
+ 'uservalidationbyemail:errors:could_not_resend_validations' => "Impossible de renvoyer toutes les demandes de validation aux utilisateurs cochés.",
+
+ 'uservalidationbyemail:messages:validated_user' => "Utilisateur validé.",
+ 'uservalidationbyemail:messages:validated_users' => "Tout les utilisateurs cochés validés.",
+ 'uservalidationbyemail:messages:deleted_user' => "Utilisateur supprimé.",
+ 'uservalidationbyemail:messages:deleted_users' => "Tout les utilisateurs cochés supprimé.",
+ 'uservalidationbyemail:messages:resent_validation' => "Demande de validation renvoyée.",
+ 'uservalidationbyemail:messages:resent_validations' => "Demandes de validation renvoyées à tout les utilisateurs cochés.",
+
+);
+
+add_translation("fr", $french);
diff --git a/mod/languages/languages/gl/gl.blog.php b/mod/languages/languages/gl/gl.blog.php
new file mode 100644
index 000000000..ca90ab646
--- /dev/null
+++ b/mod/languages/languages/gl/gl.blog.php
@@ -0,0 +1,16 @@
+<?php
+$gl = array (
+ 'blog' => 'Blogue',
+ 'item:object:blog' => 'Comentarios no blogue',
+ 'blog:never' => 'nunca',
+ 'blog:newpost' => 'Nova nota no blogue',
+ 'blog:enableblog' => 'Habilitar blogue no grupo',
+ 'blog:group' => 'Blogue do grupo',
+ 'blog:none' => 'Non se publicaron entradas',
+ 'blog:widget:description' => 'Este elemento amosa as túas últimas entradas no blogue',
+ 'blog:moreblogs' => 'Máis entradas',
+ 'blog:numbertodisplay' => 'Número de entradas a amosar',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.bookmarks.php b/mod/languages/languages/gl/gl.bookmarks.php
new file mode 100644
index 000000000..3918d7e83
--- /dev/null
+++ b/mod/languages/languages/gl/gl.bookmarks.php
@@ -0,0 +1,40 @@
+<?php
+$gl = array (
+ 'bookmarks' => 'Enlaces',
+ 'bookmarks:add' => 'Engadir a enlaces',
+ 'bookmarks:friends' => 'Enlaces das túas amigas',
+ 'bookmarks:everyone' => 'Tódolos enlaces',
+ 'bookmarks:this' => 'Marcar como enlace',
+ 'bookmarks:bookmarklet' => 'Obter marcador de enlaces',
+ 'bookmarks:inbox' => 'Entradas de enlaces',
+ 'bookmarks:more' => 'Ver máis',
+ 'bookmarks:with' => 'Comparti-la información',
+ 'bookmarks:address' => 'Enderezo dos recursos dos enlaces',
+ 'bookmarks:delete:confirm' => 'Seguro que queres eliminar este recurso?',
+ 'bookmarks:shared' => 'Engadido a enlaces',
+ 'bookmarks:visit' => 'Visita-lo recurso',
+ 'bookmarks:recent' => 'Enlaces recentes',
+ 'bookmarks:river:annotate' => 'un comentario en ',
+ 'bookmarks:river:item' => 'un enlace',
+ 'item:object:bookmarks' => 'Enlaces marcados',
+ 'bookmarks:widget:description' => 'Este compoñente está deseñado para a interface do teu escritorio e mostrará as entradas ós enlaces que crearas.',
+ 'bookmarks:bookmarklet:description' => 'O marcador de enlaces permite compartir calquera recurso da web de forma rápida e sinxela. Para usalo, clica sobre él e arrástrao hasta a barra de marcadores do teu navegador.',
+ 'bookmarks:bookmarklet:descriptionie' => 'Se estas a usar Internet Explorer, necesitarás pulsa-lo botón dereito do icono marcador e seleccionar "engadir a favoritos" e indica-la barra de enlaces.',
+ 'bookmarks:bookmarklet:description:conclusion' => 'Unha vez instalado o marcador de enlaces, só tes que pulsar nel para comparti-lo enlace da páxina que esteas a visitar.',
+ 'bookmarks:save:success' => 'O enlace foi marcado correctamente.',
+ 'bookmarks:delete:success' => 'O enlace eliminouse correctamente.',
+ 'bookmarks:save:failed' => 'O enlace marcado non se pode gardar, téntao de novo.',
+ 'bookmarks:delete:failed' => 'O enlace marcado non se pode eliminar, téntao de novo.',
+ 'bookmarks:this:group' => 'Engadido en %s',
+ 'bookmarks:bookmarklet:group' => 'Obter marcador de enlaces do grupo',
+ 'bookmarks:new' => 'Un novo enlace marcado',
+ 'bookmarks:numbertodisplay' => 'Número de enlaces a mostrar',
+ 'bookmarks:group' => 'Enlaces do grupo',
+ 'bookmarks:enablebookmarks' => 'Habilita-los enlaces de grupos',
+ 'bookmarks:morebookmarks' => 'Máis enlaces',
+ 'bookmarks:nogroup' => 'Este grupo non ten enlaces creados',
+ 'bookmarks:no_title' => 'Sen título',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.core.php b/mod/languages/languages/gl/gl.core.php
new file mode 100644
index 000000000..8594d3901
--- /dev/null
+++ b/mod/languages/languages/gl/gl.core.php
@@ -0,0 +1,664 @@
+<?php
+$gl = array (
+ 'add' => 'Engade',
+ 'item:site' => 'Lugares',
+ 'login' => 'Entrar',
+ 'loginok' => 'Flúe libremente pola rede ;)',
+ 'loginerror' => 'Aceso denegado! Revisa os datos. Se están ben, seguramente é o teu primer intento e non tes a conta activada. Busca a mensaxe de validación na túa conta de correo, pode que esté na carpeta de spam/correo non desexado',
+ 'logout' => 'Sair',
+ 'logoutok' => 'Acabas de sair da rede',
+ 'logouterror' => 'Non te podemos sacar da rede, estás atrapadx! Téntao de novo...',
+ 'exception:title' => 'Benvidx á rede social',
+ 'actionundefined' => 'Esa acción non está definida no sistema. Non a tentes máis.',
+ 'actionloggedout' => 'Sentímolo, non podes facer esta acción ata que non esteas conectado.',
+ 'notfound' => 'Non se atoparon resultados.',
+ 'SecurityException:Codeblock' => 'Aceso denegado. Fáltanche os privilexios!',
+ 'DatabaseException:WrongCredentials' => 'O sistema non se pode conectar á base de datos utizando as credenciais %s@%s (pw: %s).',
+ 'DatabaseException:NoConnect' => 'O sistema non pode seleccionar a base de datos \'%s\', por favor, revisa se existe e tes aceso.',
+ 'SecurityException:FunctionDenied' => 'Aceso denegado. Non tes privilexios!',
+ 'DatabaseException:DBSetupIssues' => 'Hai unha serie de problemas:',
+ 'DatabaseException:ScriptNotFound' => 'Elgg non atopa o script da base de datos que solicitas en %s',
+ 'IOException:FailedToLoadGUID' => 'Erro ó cargar un novo %s dende GUID:%d',
+ 'InvalidParameterException:NonElggObject' => 'Pasando un no-ElggObject ó construtor de ElggObjects!',
+ 'InvalidParameterException:UnrecognisedValue' => 'Valor non válido para o constructor de obxetos',
+ 'InvalidClassException:NotValidElggStar' => 'GUID:%d non é un %s válido',
+ 'PluginException:MisconfiguredPlugin' => '%s é un plugin mal configurado e foi deshabilitado',
+ 'InvalidParameterException:NonElggUser' => 'Pasando un no-ElggUser ó construtor de ElggUsers!',
+ 'InvalidParameterException:NonElggSite' => 'Pasando un no-ElggSite ó construcor de EggSites!',
+ 'InvalidParameterException:NonElggGroup' => 'Pasando un no-ElggGroup ó construcor de ElggGroups!',
+ 'IOException:UnableToSaveNew' => 'Non se pode gardar %s',
+ 'InvalidParameterException:GUIDNotForExport' => 'O Guid non foi especificado durante a exportación, non debería acurrir.',
+ 'InvalidParameterException:NonArrayReturnValue' => 'A función entity serialisation pasou un parámetro non-array returnvalue',
+ 'ConfigurationException:NoCachePath' => 'Cache path sin configurar!',
+ 'IOException:NotDirectory' => '%s non é un directorio',
+ 'IOException:BaseEntitySaveFailed' => 'Non se pode gardar unha nova base de entidades de información',
+ 'InvalidParameterException:UnexpectedODDClass' => 'import() tivo un ODD class inesperado',
+ 'InvalidParameterException:EntityTypeNotSet' => 'Entity debe ser configurada',
+ 'ClassException:ClassnameNotClass' => '%s non é %s.',
+ 'ClassNotFoundException:MissingClass' => 'A clase \'%s\' non se atopou, pode que o plugin se nos perdera...',
+ 'InstallationException:TypeNotSupported' => 'Os caracteres %s non se poden usar. Isto debe ser un erro na instalación, probablemente por unha actualización incompleta.',
+ 'ImportException:ImportFailed' => 'Non se pode importar o elemento %d',
+ 'ImportException:ProblemSaving' => 'Houbo un problema ó gardar %s',
+ 'ImportException:NoGUID' => 'Creouse unha nova identidade sen GUID, isto non debería pasar.',
+ 'ImportException:GUIDNotFound' => 'Non atopo a identidade \'%d\'',
+ 'ImportException:ProblemUpdatingMeta' => 'Houbo un problema ó actualizar \'%s\' coa identidade \'%d\'',
+ 'ExportException:NoSuchEntity' => 'A identidade non contén o GUID: %d',
+ 'ImportException:NoODDElements' => 'Non se atoparon elementos OpenDD ó importa-los datos. A importación fallou.',
+ 'ImportException:NotAllImported' => 'Non foron importados tódo-los elementos',
+ 'InvalidParameterException:UnrecognisedFileMode' => 'Modo de arquivo non recoñecido \'%s\'',
+ 'InvalidParameterException:MissingOwner' => 'Tódo-los arquivos teñen que ter un creador',
+ 'IOException:CouldNotMake' => 'Non podo facer %s',
+ 'IOException:MissingFileName' => 'Debes especificar un nome antes de abrir un arquivo',
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => 'Sistema de arquivos non atopado ou clase gardada co arquivo',
+ 'NotificationException:NoNotificationMethod' => 'Non se especificou un método de notificación',
+ 'NotificationException:NoHandlerFound' => 'Non se atopou un handler para \'%s\' ou non é posible chamalo',
+ 'NotificationException:ErrorNotifyingGuid' => 'Erro ó notificar %d',
+ 'NotificationException:NoEmailAddress' => 'Non é posible obte-la dirección de email para o GUID: %d',
+ 'NotificationException:MissingParameter' => 'Perdeuse',
+ 'DatabaseException:WhereSetNonQuery' => 'O contido non se configurou como WhereQueryComponent',
+ 'DatabaseException:SelectFieldsMissing' => 'Campos pedidos no select style query',
+ 'DatabaseException:UnspecifiedQueryType' => 'O tipo de query non é recoñecible ou non está especificado',
+ 'DatabaseException:NoTablesSpecified' => 'Non se especificaron tablas para a query',
+ 'DatabaseException:NoACL' => 'Non se especificou un control de acceso para a query',
+ 'InvalidParameterException:NoEntityFound' => 'A entidade non pode ser atopada ou non ten acceso',
+ 'InvalidParameterException:GUIDNotFound' => 'GUID: %s non pode ser atopado ou non ten acceso',
+ 'InvalidParameterException:IdNotExistForGUID' => 'Ups, \'%s\' non existe para o guid: %d',
+ 'InvalidParameterException:CanNotExportType' => 'Síntoo, non sei como exportar \'%s\'',
+ 'InvalidParameterException:NoDataFound' => 'Non atopo ningún dato!',
+ 'InvalidParameterException:DoesNotBelong' => 'Non pertence á identidade',
+ 'InvalidParameterException:DoesNotBelongOrRefer' => 'Non pertence á identidade ou non se atopa referenciada',
+ 'InvalidParameterException:MissingParameter' => 'Parámetro perdido, precisas suministrar un GUID.',
+ 'SecurityException:APIAccessDenied' => 'Perdoa, o acceso á API foi deshabilitada polxs administradorxs.',
+ 'SecurityException:NoAuthMethods' => 'Non se atoparon métodos de autenticación válidos para esta clase de petición á API.',
+ 'APIException:ApiResultUnknown' => 'O resultado da API devolve un tipo non recoñecible. Isto é un erro chungo.',
+ 'ConfigurationException:NoSiteID' => 'Non se especificou unha ID para o sitio',
+ 'APIException:MissingParameterInMethod' => 'Vaia, perdimos o parámetro %s no método %s',
+ 'APIException:ParameterNotArray' => '%s non parece que sexa un array',
+ 'APIException:UnrecognisedTypeCast' => 'Tipo non recoñecido en %s para a variable \'%s\' no método \'%s\'',
+ 'APIException:InvalidParameter' => 'Atopei un parámetro non válido en \'%s\' no método \'%s\'',
+ 'APIException:FunctionParseError' => '%s(%s) ten un erro de parseo!',
+ 'APIException:FunctionNoReturn' => '%s(%s) non retornou ningún valor',
+ 'SecurityException:AuthTokenExpired' => 'O token de autenticación perdeuse, non é válido ou expirou.',
+ 'CallException:InvalidCallMethod' => '%s debe ser chamado utilizando \'%s\'',
+ 'APIException:MethodCallNotImplemented' => 'O método de chamada \'%s\' non foi implementado',
+ 'APIException:AlgorithmNotSupported' => 'O algoritmo \'%s\' non está soportado ou foi deshabilitado.',
+ 'ConfigurationException:CacheDirNotSet' => 'O directorio de caché \'cache_path\' non foi configurado.',
+ 'APIException:NotGetOrPost' => 'O método para a petición debe ser GET ou POST',
+ 'APIException:MissingAPIKey' => 'Perdín o X-Elgg-apikey HTTP header!!!',
+ 'APIException:MissingHmac' => 'Perdín o X-Elgg-hmac header!!!',
+ 'APIException:MissingHmacAlgo' => 'Perdín o X-Elgg-hmac-algo header!!!',
+ 'APIException:MissingTime' => 'Perdín o X-Elgg-time header!!!!',
+ 'APIException:TemporalDrift' => 'X-Elgg-time está demasiado lonxe no pasado e no futuro. Vaia erro!',
+ 'APIException:NoQueryString' => 'Non hai datos no string da query',
+ 'APIException:MissingPOSTHash' => 'Perdín o X-Elgg-posthash header!!!',
+ 'APIException:MissingPOSTAlgo' => 'Perdín o X-Elgg-posthash_algo header!!!',
+ 'APIException:MissingContentType' => 'Anda, perdín o tipo de contido de datos que ía postear!',
+ 'SecurityException:InvalidPostHash' => 'POST data hash é inválido - Esperaba %s pero recibín %s.',
+ 'SecurityException:DupePacket' => 'A firma do paquete foi vista',
+ 'SecurityException:InvalidAPIKey' => 'API Key perdida ou inválida',
+ 'NotImplementedException:CallMethodNotImplemented' => 'A chamada ó método \'%s\' non se soporta actualmente.',
+ 'NotImplementedException:XMLRPCMethodNotImplemented' => 'O método de chamada XML-RPC \'%s\' non está implementado',
+ 'InvalidParameterException:UnexpectedReturnFormat' => 'A chamada ó método \'%s\' devolveu un resultado enesperado',
+ 'CallException:NotRPCCall' => 'A chamada non parece conter unha chamada XML-RPC válida.',
+ 'PluginException:NoPluginName' => 'Non atopo o nome do plugin',
+ 'SecurityException:authenticationfailed' => 'A habitante non puido autentificarse',
+ 'CronException:unknownperiod' => '%s non é un periodo recoñecido.',
+ 'SecurityException:deletedisablecurrentsite' => 'Eh, non podes borrar ou deshabilita-lo sitio mentres o estés a ver!',
+ 'system.api.list' => 'Listar toda-las chamadas á API dispoñibles no sistema.',
+ 'auth.gettoken' => 'A chamada á API necesita un usuario logueado!!!',
+ 'name' => 'Introduce unha identidade',
+ 'email' => 'Correo electrónico de contacto',
+ 'username' => 'Usuarix',
+ 'password' => 'Clave',
+ 'passwordagain' => 'Repetir clave',
+ 'admin_option' => 'Convertir en admin',
+ 'PRIVATE' => 'Privado',
+ 'LOGGED_IN' => 'Habitantes da rede',
+ 'PUBLIC' => 'Todo o mundo (Internet)',
+ 'access' => 'Elixe quén o pode ver',
+ 'access:friends:label' => 'Só amigxs',
+ 'dashboard' => 'Escritorio',
+ 'dashboard:nowidgets' => 'O Escritorio é a túa páxina de inicio persoal. Pulsa "Habilitar/Deshabilitar compoñentes" para personalizalo ó teu gusto.',
+ 'widgets:add' => 'Engadir compoñentes ó teu Escritorio',
+ 'widgets:add:description' => 'Selecciona as compoñentes que queiras engadir ó teu Escritorio arrastrándoa dende a galería de compoñentes da dereita a calquera área da zona de embaixo. Simplemente colócao onde máis che guste.',
+ 'widgets:position:fixed' => '(Posición fixa na páxina)',
+ 'widgets' => 'Compoñentes',
+ 'widget' => 'Compoñente',
+ 'item:object:widget' => 'Compoñentes',
+ 'widgets:save:success' => 'A compoñente foi gardado con éxito',
+ 'widgets:save:failure' => 'Non podemos garda-los compoñentes. Téntao de novo ou ponte en contacto coas administradoras.',
+ 'group' => 'Grupo',
+ 'item:group' => 'Grupos',
+ 'profile:edit:default' => 'Substituir campos do perfil',
+ 'user' => 'Habitante',
+ 'item:user' => 'Habitantes',
+ 'riveritem:single:user' => 'unha habitante',
+ 'riveritem:plural:user' => 'algunhas habitantes',
+ 'profile:edit' => 'Editar datos do teu perfil',
+ 'profile:aboutme' => 'Sobre min',
+ 'profile:description' => 'Sobre min',
+ 'profile:briefdescription' => 'Descripción breve',
+ 'profile:location' => 'Localización',
+ 'profile:skills' => 'Habilidades',
+ 'profile:interests' => 'Intereses',
+ 'profile:contactemail' => 'Email de contacto',
+ 'profile:phone' => 'Teléfono',
+ 'profile:mobile' => 'Móbil',
+ 'profile:website' => 'Sitio web',
+ 'profile:label' => 'Etiqueta do perfil',
+ 'profile:type' => 'Tipo de perfil',
+ 'profile:editdefault:fail' => 'O perfil por defecto non pode ser gardado',
+ 'profile:editdefault:success' => 'Artigo engadido con éxito ó teu perfil por defecto :)',
+ 'profile:editdefault:delete:fail' => 'Fallo na eliminación do artigo do perfil por defecto!! Ponte en contacto coxs administradorxs',
+ 'profile:editdefault:delete:success' => 'Obxecto do perfil por defecto eliminado',
+ 'profile:defaultprofile:reset' => 'Perfil por defecto ó de sistema reseteado',
+ 'profile:resetdefault' => 'Resetear o perfil por defecto',
+ 'profile:saved' => 'O perfil foi gardado correctamente.',
+ 'friends' => 'Amigxs',
+ 'friends:yours' => 'As túas amigas',
+ 'friends:owned' => 'Amigx de %s',
+ 'friend:add' => 'Engadir amigx',
+ 'friend:remove' => 'Eliminar amigx',
+ 'friends:add:successful' => 'Engadiche a %s á túa lista de amigx. Agora terá que acepta-la túa petición. Xa veremos... :)',
+ 'friends:add:failure' => 'Non podemos engadi-lxs amigxs.Proba de novo ou contacta coas administradoras.',
+ 'friends:remove:successful' => 'Eliminaches a %s da túa lista de amigxs',
+ 'friends:remove:failure' => 'Non podemos eliminar a %s da túa lista de amigxs! Proba de novo ou contacta coas administradoras.',
+ 'friends:none' => 'Este habitante non foi engadido aínda por ningún dos teus amigxs.',
+ 'friends:none:you' => 'Non tés amigxs? A qué agardas para engadilos?',
+ 'friends:none:found' => 'Non atopaches amigxs',
+ 'friends:of:none' => 'Ninguén engadiu a este habitante como amigx aínda.',
+ 'friends:of:none:you' => 'Ninguén che engadiu como amigx aínda. Unha boa idea, se non coñeces a ninguén, é enche-lo teu perfil para permitir que a xente te atope. Tamén podes unirte a algún grupo. É cuestión de moverse un pouquiño!',
+ 'friends:of' => 'Amigx de',
+ 'friends:of:owned' => 'Xente que fixo %s amigxs',
+ 'friends:num_display' => 'Número de amigxs a amosar',
+ 'friends:icon_size' => 'Tamaño do icono:',
+ 'friends:tiny' => 'Diminuto',
+ 'friends:small' => 'Pequeno',
+ 'friends:collections' => 'Lista de amigxs',
+ 'friends:collections:add' => 'Nova lista de amigxs',
+ 'friends:addfriends' => 'Engadir amigxs',
+ 'friends:collectionname' => 'Lista de nomes',
+ 'friends:collectionfriends' => 'Amigxs na lista',
+ 'friends:collectionedit' => 'Edita esta lista',
+ 'friends:nocollections' => 'Aínda non tes ningunha lista',
+ 'friends:collectiondeleted' => 'A lista foi borrada!',
+ 'friends:collectiondeletefailed' => 'Foi imposible elimina-la lista. Non tés permisos ou ocurriu algún outro problemiña.',
+ 'friends:collectionadded' => 'A lista creouse correctamente :)',
+ 'friends:nocollectionname' => 'Téslle que asignar un nome á lista antes de creala.',
+ 'friends:collections:members' => 'Lista de habitantes',
+ 'friends:collections:edit' => 'Edita-la lista',
+ 'feed:rss' => 'Subscribirse ó RSS',
+ 'link:view' => 'Ve-lo enlace',
+ 'river' => 'Relacións',
+ 'river:noaccess' => 'Non té-los permisos para ver este obxecto!',
+ 'river:posted:generic' => '%s pública',
+ 'plugins:settings:save:ok' => 'As configuracións dos %s plugins foron gardadas satisfactoriamente.',
+ 'plugins:settings:save:fail' => 'Houbo un problemiña ó garda-las configuracións dos %s plugins.',
+ 'plugins:usersettings:save:ok' => 'A configuración para os plugins foi correctamente gardada.',
+ 'plugins:usersettings:save:fail' => 'Houbo un problemiña ó garda-la configuración dos plugins.',
+ 'admin:plugins:label:version' => 'Versión',
+ 'item:object:plugin' => 'Configuración dos plugins',
+ 'notifications:usersettings' => 'Configuración das notificacións.',
+ 'notifications:methods' => 'Por favor, especifica qué métodos queres permitir.',
+ 'notifications:usersettings:save:ok' => 'A configuración das notificacións foi gardada',
+ 'notifications:usersettings:save:fail' => 'Non se puido garda-la configuración da notificación.',
+ 'user.notification.get' => 'Restaura-la configuración das notificacións para unha habitante determinada.',
+ 'user.notification.set' => 'Elixe a configuración das notificacións para unha habitante determinada.',
+ 'search' => 'Introduce texto e/ou etiquetas',
+ 'search:go' => 'Buscar',
+ 'searchtitle' => 'Buscando: %s',
+ 'users:searchtitle' => 'Buscando usuarixs: %s',
+ 'advancedsearchtitle' => '%s con resultados coincidentes %s',
+ 'next' => 'Seguinte',
+ 'previous' => 'Anterior',
+ 'viewtype:change' => 'Cambia-lo tipo de listado',
+ 'viewtype:list' => 'Ver en formato Lista',
+ 'viewtype:gallery' => 'Ver en formato Galería',
+ 'tag:search:startblurb' => 'Tarefas, artigos, arquivos, páxinas, blogues, fotos e vídeos coa etiqueta: \'%s\'',
+ 'user:search:startblurb' => 'Detalles das usuarias da rede que coiciden con: %s',
+ 'user:search:finishblurb' => 'Para ver máis, pulsa eiquí:',
+ 'account' => 'Conta',
+ 'settings' => 'Configuración',
+ 'tools' => 'Ferramentas',
+ 'register' => 'Rexistro',
+ 'registerok' => 'Rexistráchete en %s con éxito :)',
+ 'registerbad' => 'O rexistro non é válido! Pode que xa exista esx usuarix, que o contrasinal repetido non coincida co primeiro escrito ou que elexiras usuarix ou contrasinal demasiado curtos.',
+ 'registerdisabled' => 'O rexistro foi deshabilitado polo administrador do sistema',
+ 'registration:notemail' => 'O email que introduciches parece ser non válido.',
+ 'registration:userexists' => 'Ese usuarix xa existe! Proba con outro :)',
+ 'registration:usernametooshort' => 'O nome de usuarix debe ter polo menos 4 caracteres',
+ 'registration:passwordtooshort' => 'A clave debe ter un mínimo de 6 caracteres',
+ 'registration:dupeemail' => 'Ese email está asociado a outra conta :P',
+ 'registration:invalidchars' => 'O nome de usuarix contén caracteres inválidos. Por favor, non empregues tildes nin nada estrano, aínda non estamos preparadxs...',
+ 'registration:emailnotvalid' => 'O email que introduciches non nos serve. Revisa que o teñas ben escrito. Gracias :)',
+ 'registration:passwordnotvalid' => 'A clave que introduciches non nos serve. Revisa que o teñas ben escrito. Gracias :)',
+ 'registration:usernamenotvalid' => 'O usuario introducido non nos serve. Proba con outrx, por favor.',
+ 'adduser' => 'Engadir usuarixs',
+ 'adduser:ok' => 'Acabas de engadir un novx usuarix.',
+ 'adduser:bad' => 'A túa nova usuarix non pode ser creadx.',
+ 'user:set:name' => 'Configuración da túa identidade',
+ 'user:name:label' => 'Novo nome (podes cambia-lo nome que aparece asociado á túa actividade na rede, pero a túa usuaria para loguearte e a url do teu perfil seguirán sendo as mesmas)',
+ 'user:name:success' => 'Cambióuse o teu nome no sistema, agora es outro :)',
+ 'user:name:fail' => 'Non se puido cambiar-lo teu nome no sistema!',
+ 'user:set:password' => 'Configuración do contrasinal',
+ 'user:password:label' => 'Novo contrasinal',
+ 'user:password2:label' => 'Repite o contrasinal',
+ 'user:password:success' => 'Contasinal cambiado',
+ 'user:password:fail' => 'Non se puido cambia-lo contrasinal do sistema.',
+ 'user:password:fail:notsame' => 'Non coinciden as claves',
+ 'user:password:fail:tooshort' => 'O contrasinal é demasiado curto... Se escolles un máis largo será máis seguro ;)',
+ 'user:set:language' => 'Configuración da lingua',
+ 'user:language:label' => 'A túa lingua',
+ 'user:language:success' => 'A túa lingua foi actualizada.',
+ 'user:language:fail' => 'A túa ligua non se puido gardar.',
+ 'user:username:notfound' => 'Usuarix %s non atopado.',
+ 'user:password:lost' => 'Clave olvidada',
+ 'user:password:resetreq:success' => 'Enviámosche a nova clave ó teu correo. Recomendámosche que a cambies por outra cando volvas á rede (podes facelo en "Configuración").',
+ 'user:password:resetreq:fail' => 'Non podo xerar unha nova clave.',
+ 'user:password:text' => 'Mira o correo que nos diches ó rexixstrarte: Váite chegar un enlace que debes clicar para recibir unha nova clave (se non aparece, revisa a carpeta "non-desexado" ou "spam").',
+ 'user:persistent' => 'Recordalo',
+ 'admin:configuration:success' => 'A túa configuración foi gardada! Yeah :)',
+ 'admin:configuration:fail' => 'A túa configuración puido ser gardada!',
+ 'admin' => 'Admin',
+ 'admin:description' => 'O panel de administración permite o control de tódo-los aspectos do sistema, dende a xestión dos habitantes hasta como se comportan os plugins. Elixe a opción de embaixo para comezar.',
+ 'admin:site:description' => 'Este panel de administración permite controla-la configuración global da rede social. Elixe unha opción adecuada para comezar.',
+ 'admin:site:opt:linktext' => 'Configure o lugar...',
+ 'admin:plugins' => 'Administración de Ferramentas',
+ 'admin:plugins:description' => 'O panel de Administrador permite o control e a configuración dar ferramentas instaladas na rede social.',
+ 'admin:plugins:opt:linktext' => 'Configure as ferramentas...',
+ 'admin:plugins:opt:description' => 'Configure as ferramentas instaladas no seu lugar.',
+ 'admin:plugins:label:author' => 'Autor',
+ 'admin:plugins:label:copyright' => 'Copyright',
+ 'admin:plugins:label:licence' => 'Licencia',
+ 'admin:plugins:label:website' => 'URL',
+ 'admin:plugins:label:moreinfo' => 'máis info',
+ 'admin:statistics' => 'Estatísticas',
+ 'admin:statistics:description' => 'Esta é unha versión previa das estatísticas do teu lugar.',
+ 'admin:statistics:opt:description' => 'Ver infornación estatística sobre habitantes os obxectos do sistema.',
+ 'admin:statistics:opt:linktext' => 'Ver estatísticas...',
+ 'admin:statistics:label:basic' => 'Estatísticas básicas do lugar...',
+ 'admin:statistics:label:numentities' => 'Entidades so lugar.',
+ 'admin:statistics:label:numusers' => 'Número de habitantes',
+ 'admin:statistics:label:numonline' => 'Número de habitantes on line',
+ 'admin:statistics:label:onlineusers' => 'Habitantes online neste intre.',
+ 'admin:statistics:label:version' => 'Versión de Elgg',
+ 'admin:statistics:label:version:release' => 'Release',
+ 'admin:statistics:label:version:version' => 'Versión',
+ 'admin:user:label:search' => 'Buscar habitantes:',
+ 'admin:user:ban:no' => 'Non podes banear a estx habitante',
+ 'admin:user:ban:yes' => 'Habitantes baneadxs.',
+ 'admin:user:unban:no' => 'Non podes desbanear ó habitante',
+ 'admin:user:unban:yes' => 'Habitante desbaneadx.',
+ 'admin:user:delete:no' => 'Non podes borrar a estx habitante',
+ 'admin:user:delete:yes' => 'Usuarix eliminadx',
+ 'admin:user:resetpassword:yes' => 'Contrasinal reseteado e notificado á habitante.',
+ 'admin:user:resetpassword:no' => 'O contrasinal non pode ser reseteado.',
+ 'admin:user:makeadmin:yes' => 'Estx habitante agora é administradorx.',
+ 'admin:user:makeadmin:no' => 'Non podemos facer admin a estx habitante.',
+ 'admin:user:removeadmin:yes' => 'Estx habitante xa non administra.',
+ 'admin:user:removeadmin:no' => 'Non podemos elimina-los privilexios de administración de estx habitante.',
+ 'usersettings:description' => 'A configuración do taboleiro do habitantr permite o control do seu espacio, dende a xestión de habitantes ata cómo se comportan os plugins. Elixa unha opción das de embaixo para comezar.',
+ 'usersettings:statistics' => 'As túas estatísticas',
+ 'usersettings:statistics:opt:description' => 'Ve-la información estatística dos habitantes e obxectos do lugar.',
+ 'usersettings:statistics:opt:linktext' => 'Estatísticas da conta',
+ 'usersettings:user' => 'Configuración da conta',
+ 'usersettings:user:opt:description' => 'Isto permíteche controla-la configuración dx habitante.',
+ 'usersettings:user:opt:linktext' => 'Configura-lx habitante',
+ 'usersettings:plugins' => 'Ferramentas',
+ 'usersettings:plugins:opt:description' => 'Configura-las ferramentas activas',
+ 'usersettings:plugins:opt:linktext' => 'Configura-las ferramentas',
+ 'usersettings:plugins:description' => 'Este taboleiro permíteche controlar e configura-las ferramentas que teñas instaladas',
+ 'usersettings:statistics:label:numentities' => 'As túas entidades',
+ 'usersettings:statistics:yourdetails' => 'Os teus detalles',
+ 'usersettings:statistics:label:name' => 'Identidade',
+ 'usersettings:statistics:label:email' => 'Email',
+ 'usersettings:statistics:label:membersince' => 'Eiquí dende',
+ 'usersettings:statistics:label:lastlogin' => 'Último acceso',
+ 'save' => 'Gardar',
+ 'publish' => 'Publicar',
+ 'cancel' => 'Cancelar',
+ 'saving' => 'Gardando...',
+ 'update' => 'Actualizar',
+ 'edit' => 'Editar',
+ 'delete' => 'Eliminar',
+ 'load' => 'Cargar',
+ 'upload' => 'Subir',
+ 'ban' => 'Prohibir',
+ 'unban' => 'Liberar',
+ 'enable' => 'Habilitar',
+ 'disable' => 'Deshabilitar',
+ 'request' => 'Solicitar',
+ 'complete' => 'Completado',
+ 'open' => 'Aberto',
+ 'close' => 'Pechado',
+ 'reply' => 'Responder',
+ 'more' => 'Máis',
+ 'comments' => 'Comentarios',
+ 'import' => 'Importar',
+ 'export' => 'Exportar',
+ 'up' => 'Enriba',
+ 'down' => 'Embaixo',
+ 'top' => 'Enriba de todo',
+ 'bottom' => 'Embaixo de todo',
+ 'invite' => 'Convidar',
+ 'resetpassword' => 'Resetea-lo contrasinal',
+ 'makeadmin' => 'Facer admin',
+ 'removeadmin' => 'Eliminar admin',
+ 'option:yes' => 'Si',
+ 'option:no' => 'Non',
+ 'unknown' => 'Descoñecido',
+ 'active' => 'Activo',
+ 'total' => 'Total',
+ 'learnmore' => 'Clique eiquí para saber máis.',
+ 'content' => 'Contido',
+ 'content:latest' => 'Últimas actividades',
+ 'content:latest:blurb' => 'Alternativamente, pulse eiquí para ve-los últimos contidos.',
+ 'link:text' => 've-la ligazón',
+ 'question:areyousure' => 'Estás segurx? recorda que non hai volta atrás!',
+ 'title' => 'Título',
+ 'description' => 'Descripción',
+ 'tags' => 'Etiquetas',
+ 'spotlight' => 'Noticias:',
+ 'all' => 'Todos',
+ 'by' => 'por',
+ 'annotations' => 'Anotacións',
+ 'relationships' => 'Relacións',
+ 'metadata' => 'Metadatos',
+ 'deleteconfirm' => 'Estás segurx de que queres elimina-lo artigo?',
+ 'fileexists' => 'O arquivo foi subido... para remplazalo selecciona embaixo:',
+ 'systemmessages:dismiss' => 'Pulsa para pechar',
+ 'importsuccess' => 'A importación dos datos foi correcta',
+ 'importfail' => 'A importación OpenDD fallou!',
+ 'useradd:subject' => 'Conta de habitante creadaels',
+ 'useradd:body' => '%s,
+Creouse unha conta de usuarix en %s. Para entrar visita:
+
+%s
+
+Para poder participar tes que usa-las seguintes credenciais:
+
+Username: %s
+Contrasinal: %s
+
+Unha vez teñas entrado na rede, recomendámosche que cambies o teu contrasinal (podes facelo en "Configuración")',
+ 'friendlytime:justnow' => 'agora mesmo',
+ 'friendlytime:minutes' => 'vai %s minutos',
+ 'friendlytime:minutes:singular' => 'vai un minuto',
+ 'friendlytime:hours' => 'vai %s horas',
+ 'friendlytime:hours:singular' => 'vai unha hora',
+ 'friendlytime:days' => 'vai %s días',
+ 'friendlytime:days:singular' => 'Onte',
+ 'date:month:01' => '%s de xaneiro',
+ 'date:month:02' => '%s de febreiro',
+ 'date:month:03' => '%s de marzo',
+ 'date:month:04' => '%s de abril',
+ 'date:month:05' => '%s de maio',
+ 'date:month:06' => '%s de xuño',
+ 'date:month:07' => '%s de xullo',
+ 'date:month:08' => '%s de agosto',
+ 'date:month:09' => '%s de setembro',
+ 'date:month:10' => '% de outubro',
+ 'date:month:11' => '%s de novembro',
+ 'date:month:12' => '%s de decembro',
+ 'installation:sitename' => 'Nome da túa rede social',
+ 'installation:sitedescription' => 'Pequena descripción da rede social',
+ 'installation:wwwroot' => 'A URL do sitio seguida dun slash:',
+ 'installation:path' => 'O patch completo da raiz do teu sitio no teu disco duro, seguida dun slash:',
+ 'installation:dataroot' => 'TEI patch completo do directorio onde tódolos ficheiros subidos van ser gardados, seguidos dun sladh:',
+ 'installation:dataroot:warning' => 'Debes crea-lo directorio de forma manual. É recomendable facelo fóra do directorio onde teña-la instalación do Elgg. Por exemplo, no teu /home/ estaría ben.',
+ 'installation:language' => 'Lingua por defecto:',
+ 'installation:debug' => 'O modo debug proporciona información extra moi útil para realizar diagnósticos e tarefas de desenvolvemento. Ten coidado porque habilitalo pode relentiza-lo teu sistema.',
+ 'installation:view' => 'Introduce a vista que queres utilizar por defecto no teu sitio ou deixalo en branco se queres que se empregue a vista por defecto.',
+ 'installation:siteemail' => 'Enderezo do email do sitio (utilizada cando se envían mensaxes do sistema)',
+ 'installation:disableapi' => 'A API RESTful é un interzace flexible e extensible que habilita certas aplicacións que empregan Elgg de forma remota.',
+ 'installation:disableapi:label' => 'Habilita-la API RESTful',
+ 'upgrading' => 'Actualizando...',
+ 'upgrade:db' => 'A base de datos foi actualizada',
+ 'upgrade:core' => 'A instalación do Elgg foi actualizada',
+ 'welcome' => 'Benvidx',
+ 'email:settings' => 'Configuración do email',
+ 'email:address:label' => 'Novo enderezo do email',
+ 'email:save:success' => 'O novo email foi gardado, verificación ó sistema enviada con éxito.',
+ 'email:save:fail' => 'O teu novo mail non pode ser gardado. Téntao de novo.',
+ 'friend:newfriend:subject' => '%s fíxote amigo',
+ 'friend:newfriend:body' => '%s fíxote amigo.
+
+Para ve-lo seu perfil, preme eiquí:
+
+%s
+
+Por favor, non contestes este mail, escribiuno unha máquina sen sentimentos ;)',
+ 'email:resetpassword:subject' => 'Contrasinal reseteado!',
+ 'email:resetpassword:body' => 'Ola %s,
+
+O teu contrasinal foi restablecido a : %s',
+ 'email:resetreq:subject' => 'petición de contrasinal novo.',
+ 'email:resetreq:body' => 'Ola %s,
+
+Alguén (dende a IP %s) ten solicitado un novo contrasinal para a túa conta.
+
+Se tes sido ti quén a solicitou, preme na ligazón de embaixo. Se non, ignora este mail.
+
+%s',
+ 'default_access:settings' => 'O teu nivel de acceso por defecto',
+ 'default_access:label' => 'Acceso por defecto',
+ 'user:default_access:success' => 'O teu novo nivel de acceso foi gardado.',
+ 'user:default_access:failure' => 'O teu novo nivel de acceso non pode ser gardado.',
+ 'xmlrpc:noinputdata' => 'Datos de entrada inválidos',
+ 'comments:count' => '%s comentarios',
+ 'riveraction:annotation:generic_comment' => 'un comentario en',
+ 'generic_comments:add' => 'Engadir un comentario',
+ 'generic_comments:text' => 'Comentario',
+ 'generic_comment:posted' => 'O comentario foi enviado corrrectamente.',
+ 'generic_comment:deleted' => 'O comentario foi eliminado correctamente.',
+ 'generic_comment:blank' => 'Perdoa... necesitas poñer "algo" no comentario antes de gardalo.',
+ 'generic_comment:notfound' => 'Mimá! non puidemos atopa-lo artigo :(',
+ 'generic_comment:notdeleted' => 'Baia oh! non puidemos elimina-lo comentario :(',
+ 'generic_comment:failure' => 'Un erro inesperado ocurriu ó engadi-lo comentario... Estas cousas pasan, téntao de novo...',
+ 'generic_comment:email:subject' => 'Tes un comentario novo nun dos teus artigos',
+ 'generic_comment:email:body' => 'Hai un comentario no artigo "%s" escrito por %s, que di:
+
+%s
+
+Para contestar ou ve-la mensaxe orixinal, preme eiquí:
+
+%s
+
+Para ve-lo perfil do usuarix de %s, preme eiquí:
+
+%s
+
+Por certo, non respondas a este email. Escribiucho unha máquina ;)',
+ 'entity:default:strapline' => 'Creada %s por %s',
+ 'entity:default:missingsupport:popup' => 'Esta entidade non pode ser desplegada correctamente. Pode ser que requira soporte dun plugin que non está instalado.',
+ 'entity:delete:success' => '%s entidades foron eliminadas',
+ 'entity:delete:fail' => '%s entidades non puideron ser eliminadas',
+ 'actiongatekeeper:missingfields' => 'O formulario está campo perdido __token ou __ts',
+ 'actiongatekeeper:tokeninvalid' => 'Atopamos un erro 8token mismstch)!. a sesión expirou. Refresca a páxina (F5).',
+ 'actiongatekeeper:timeerror' => 'A páxina na que te atopas expirou! É necesario que a recargues',
+ 'actiongatekeeper:pluginprevents' => 'Unha extensión foi retida por este formulario.',
+ 'word:blacklist' => 'e, el, entón, pero, ela, o seu, un, non, acerca, agora, nembergantes, aínda, de outro modo, 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',
+ 'aa' => 'Afar',
+ 'ab' => 'Abkhazian',
+ 'af' => 'Afrikaans',
+ 'am' => 'Amhric',
+ 'ar' => 'Arábico',
+ 'as' => 'Assamese',
+ 'ay' => 'Aymara',
+ 'az' => 'Azerbaijani',
+ 'ba' => 'Bashkir',
+ 'be' => 'Byelorussian',
+ 'bg' => 'Búlgaro',
+ 'bh' => 'Bihari',
+ 'bi' => 'Bislama',
+ 'bn' => 'Bengali; Bangla',
+ 'bo' => 'Tibetan',
+ 'br' => 'Bretón',
+ 'ca' => 'Catalán',
+ 'co' => 'Corsa',
+ 'cs' => 'Checo',
+ 'cy' => 'Welsh',
+ 'da' => 'Danés',
+ 'de' => 'Alemán',
+ 'dz' => 'Bhutani',
+ 'el' => 'Grego',
+ 'en' => 'Inglés',
+ 'eo' => 'Esperanto',
+ 'es' => 'Español',
+ 'et' => 'Estonio',
+ 'eu' => 'Euskera',
+ 'fa' => 'Persa',
+ 'fi' => 'Finés',
+ 'fj' => 'Fiji',
+ 'fo' => 'Faeroese',
+ 'fr' => 'Francés',
+ 'fy' => 'Frisian',
+ 'ga' => 'Irlandés',
+ 'gd' => 'Gaélico',
+ 'gl' => 'Galego',
+ 'gn' => 'Guaraní',
+ 'gu' => 'Gujarati',
+ 'he' => 'Hebreo',
+ 'ha' => 'Hausa',
+ 'hi' => 'Hindú',
+ 'hr' => 'Croata',
+ 'hu' => 'Húngaro',
+ 'hy' => 'Armenio',
+ 'ia' => 'Interlenguaxe',
+ 'id' => 'Indonesio',
+ 'ie' => 'Interlenguaxe',
+ 'ik' => 'Inupiak',
+ 'is' => 'Islandés',
+ 'it' => 'Italiano',
+ 'iu' => 'Inuktitut',
+ 'iw' => 'Hebreo antigo',
+ 'ja' => 'Xaponés',
+ 'ji' => 'Yiddish',
+ 'jw' => 'Xavanés',
+ 'ka' => 'Xeorxiano',
+ 'kk' => 'Kazakh',
+ 'kl' => 'Greenlandic',
+ 'km' => 'Camboiano',
+ 'kn' => 'Canadiense',
+ 'ko' => 'Coreán',
+ 'ks' => 'Kashmiri',
+ 'ku' => 'Kurdo',
+ 'ky' => 'Kirghiz',
+ 'la' => 'Latín',
+ 'ln' => 'Lingala',
+ 'lo' => 'Laotán',
+ 'lt' => 'Lituano',
+ 'lv' => 'Latvian/Lettish',
+ 'mg' => 'Malagasy',
+ 'mi' => 'Maorí',
+ 'mk' => 'Macedonio',
+ 'ml' => 'Malayam',
+ 'mn' => 'Mongol',
+ 'mo' => 'Moldavo',
+ 'mr' => 'Marathi',
+ 'ms' => 'Malay',
+ 'mt' => 'Maltés',
+ 'my' => 'Burmés',
+ 'na' => 'Nauru',
+ 'ne' => 'Nepalí',
+ 'nl' => 'Holandés',
+ 'no' => 'Noruego',
+ 'oc' => 'Occitano',
+ 'om' => '(Afan) Oromo',
+ 'or' => 'Oriya',
+ 'pa' => 'Punjabi',
+ 'pl' => 'Polaco',
+ 'ps' => 'Pashto / Pushto',
+ 'pt' => 'Portugués',
+ 'qu' => 'Quechua',
+ 'rm' => 'Rhaeto-Romance',
+ 'rn' => 'Kirundi',
+ 'ro' => 'Rumano',
+ 'ru' => 'Ruso',
+ 'rw' => 'Kiryanwanda',
+ 'sa' => 'Sanskrit',
+ 'sd' => 'Sindhi',
+ 'sg' => 'Sangro',
+ 'sh' => 'Serbo-Croata',
+ 'si' => 'Singalese',
+ 'sk' => 'Slovako',
+ 'sl' => 'Esloveno',
+ 'sm' => 'Samoano',
+ 'sn' => 'Shona',
+ 'so' => 'Somalí',
+ 'sq' => 'Albanés',
+ 'sr' => 'Serbio',
+ 'ss' => 'Siswati',
+ 'st' => 'Seshoto',
+ 'su' => 'Sundanés',
+ 'sv' => 'Sueco',
+ 'sw' => 'Swahili',
+ 'ta' => 'Tamil',
+ 'te' => 'Tengulu',
+ 'tg' => 'Tajik',
+ 'th' => 'Thai',
+ 'ti' => 'Tigrinya',
+ 'tk' => 'Turco',
+ 'tl' => 'Tagalo',
+ 'tn' => 'Setswana',
+ 'to' => 'Tonga',
+ 'tr' => 'Turkoman',
+ 'ts' => 'Tsonga',
+ 'tt' => 'Tatar',
+ 'tw' => 'Twi',
+ 'ug' => 'Uigur',
+ 'uk' => 'Ukraniano',
+ 'ur' => 'Urdu',
+ 'uz' => 'uzbek',
+ 'vi' => 'Vietnamita',
+ 'vo' => 'Volapuk',
+ 'wo' => 'Wolof',
+ 'xh' => 'Xhosa',
+ 'yi' => 'Yiddisha',
+ 'yo' => 'Yoruba',
+ 'za' => 'Zuang',
+ 'zh' => 'Chinés',
+ 'zu' => 'Zulú',
+ 'memcache:notinstalled' => 'O módulo PHP memcache non se atopa instalado. Proba sudo apt-get install php5-memcache',
+ 'memcache:noservers' => 'Non hai servidores de memcache definidos, asegúrate de comproba-la variable',
+ 'memcache:versiontoolow' => 'Memcache necesita a versión %s para funcionar correctamente, ti tes a versión %s',
+ 'memcache:noaddserver' => 'Soporte para múltiples servidores deshabilitado, necesitas actueliza-la túa librería memcache PECL',
+ 'deprecatedfunction' => 'Atención: O código emprega a función antiga \'%s\' e non é compatible con esta versión do Elgg',
+ 'pageownerunavailable' => 'Atención: O propietario da páxina %d non é accesible',
+ 'profile:explainchangefields' => 'Podes engadir campos do perfil',
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'groups:searchtitle' => 'Buscando grupos: %s',
+ 'group:search:startblurb' => 'Grupos coa etiqueta: \'%s\'',
+ 'group:search:finishblurb' => 'Para ver máis, preme eiquí.',
+ 'admin:site:access:warning' => 'Cambia-las configuracións de acceso só afecta ós permisos do contido que se vaia crear no futuro.',
+ 'accept' => 'Aceptar',
+ 'installation:sitepermissions' => 'Permisos de acceso por defecto:',
+ 'installation:httpslogin' => 'Habilitar para que os "login" dxs habitantes se fagan a través de HTTPS. Recorda que tes que ter dispoñible o servicio/porto no teu sistema.',
+ 'installation:httpslogin:label' => 'Habilitar logins con HTTPS',
+ 'installation:allow_user_default_access:description' => 'Se os seleccionas, xs habitantes poderán configura-los seus propios niveles de acceso que poden sobreescribir os niveles de acceso por defecto do sistema. É unha opción bastante INSEGURA. Pénsao.',
+ 'installation:allow_user_default_access:label' => 'Permiti-lo acceso por defecto xs habitantes.',
+ 'installation:simplecache:description' => 'A cache simple incrementa a eficiencia no cacheo de contido estático ó incluir ficheiros CSS e JavaScript. o mellor é poñela en "on".',
+ 'installation:simplecache:label' => 'Utiliza cache simple (recomendado)',
+ 'welcome:user' => '%s',
+ 'loggedinrequired' => 'Tes que estar logueadx para ver este contido.',
+ 'adminrequired' => 'Tea que ser admin para ver este contido.',
+ 'membershiprequired' => 'Tes que formar parte deste grupo para ver este contido.',
+ 'userpicker:only_friends' => 'Só amigxs',
+ 'user:resetpassword:unknown_user' => 'Usuarix non válidx',
+ 'user:resetpassword:reset_password_confirm' => 'Se restaura-lo teu contrasinal, mandarémosche un novo ó enderezo de email co que te teñas rexistrado.',
+ 'admin:user:label:searchbutton' => 'Buscar',
+ 'untitled' => 'Sen título',
+ 'help' => 'Axuda',
+ 'send' => 'Enviar',
+ 'post' => 'Publicar',
+ 'submit' => 'Enviar',
+ 'site' => 'Lugar',
+ 'installation:debug:none' => 'Desconecta o modo debug (recomendado)',
+ 'installation:debug:error' => 'Amosar só os erros críticos',
+ 'installation:debug:warning' => 'Amosa-los erros e advertencias',
+ 'installation:debug:notice' => 'Rexistrar tódolos erros, advertencias e notificacións',
+ 'tag_names:tags' => 'Etiquetas',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.custom_index.php b/mod/languages/languages/gl/gl.custom_index.php
new file mode 100644
index 000000000..8e021ab61
--- /dev/null
+++ b/mod/languages/languages/gl/gl.custom_index.php
@@ -0,0 +1,11 @@
+<?php
+$gl = array (
+ 'custom:bookmarks' => 'Últimos enlaces ',
+ 'custom:groups' => 'Últimos grupos',
+ 'custom:files' => 'Últimos ficheiros subidos',
+ 'custom:blogs' => 'Últimas entradas',
+ 'custom:members' => 'Últimxs habitantes',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.embed.php b/mod/languages/languages/gl/gl.embed.php
new file mode 100644
index 000000000..4069daa8b
--- /dev/null
+++ b/mod/languages/languages/gl/gl.embed.php
@@ -0,0 +1,8 @@
+<?php
+$gl = array (
+ 'embed:instructions' => 'Selecciona a foto ou arquivo que desexas insertar. Simplemente clica sobre el. Se non está gardado nos teus arquivos, dalle a subir arquivo.',
+ 'embed:media' => 'Insertar imaxe/arquivo',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.externalpages.php b/mod/languages/languages/gl/gl.externalpages.php
new file mode 100644
index 000000000..9e9db7b6f
--- /dev/null
+++ b/mod/languages/languages/gl/gl.externalpages.php
@@ -0,0 +1,14 @@
+<?php
+$gl = array (
+ 'expages' => 'Páxinas externas',
+ 'expages:about' => 'Sobre',
+ 'expages:terms' => 'Termos',
+ 'expages:privacy' => 'Privacidade',
+ 'expages:contact' => 'Contacto',
+ 'expages:notset' => 'A páxina non foi iniciada',
+ 'expages:posted' => 'A súa páxina foi enviada correctamente',
+ 'expages:error' => 'Baia oh, téntao de novo ou ponte en contacto coxs administradorxs detallándolle-lo problema',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.file.php b/mod/languages/languages/gl/gl.file.php
new file mode 100644
index 000000000..17268b3b4
--- /dev/null
+++ b/mod/languages/languages/gl/gl.file.php
@@ -0,0 +1,61 @@
+<?php
+$gl = array (
+ 'groups:enablefiles' => 'Activar arquivos do grupo',
+ 'file' => 'Arquivos',
+ 'file:user' => 'Arquivos de %s',
+ 'file:friends' => 'Arquivos dxs amigx de %s',
+ 'file:all' => 'Tódolos arquivos',
+ 'file:edit' => 'Editar arquivo',
+ 'file:more' => 'Ver máis arquivos',
+ 'file:list' => 'modo Lista',
+ 'file:group' => 'Arquivos do grupo',
+ 'file:gallery' => 'modo Galería',
+ 'file:gallery_list' => 'Amosar só iconos ou con detalle',
+ 'file:num_files' => 'Número de arquivos a amosar',
+ 'file:user:gallery' => 'Ve-la galería de %s',
+ 'file:upload' => 'Subir un arquivo',
+ 'file:file' => 'Arquivo',
+ 'file:title' => 'Título',
+ 'file:desc' => 'Descrición',
+ 'file:tags' => 'Etiquetas',
+ 'file:types' => 'Tipo de arquivo subido',
+ 'file:type:all' => 'Tódolos arquivos',
+ 'file:type:video' => 'Videos',
+ 'file:type:document' => 'Documentos',
+ 'file:type:audio' => 'Audios',
+ 'file:type:image' => 'Imaxes',
+ 'file:type:general' => 'Xeral',
+ 'file:user:type:video' => 'videos de %s',
+ 'file:user:type:document' => 'documentos de %s',
+ 'file:user:type:audio' => 'audios de %s',
+ 'file:user:type:image' => 'imaxes de %s',
+ 'file:user:type:general' => 'arquivos xerais de %s',
+ 'file:friends:type:video' => 'Videos dxs túas amigxs',
+ 'file:friends:type:document' => 'Documentos dxs túas amigxs',
+ 'file:friends:type:audio' => 'Audios dxs túas amigxs',
+ 'file:friends:type:image' => 'Imaxes dxs túas amigxs',
+ 'file:friends:type:general' => 'Arquivos dxs túas amigxs',
+ 'file:widget' => 'Arquivos subidos',
+ 'file:widget:description' => 'Amosa-los últimos arquivos',
+ 'file:download' => 'Descargar arquivo',
+ 'file:delete:confirm' => 'Estás segurx de que queres eliminar este arquivo?',
+ 'file:tagcloud' => 'Nube de etiquetas',
+ 'file:display:number' => 'Número de arquivos a amosar',
+ 'item:object:file' => 'Arquivos',
+ 'file:embed' => 'Multimedia chantado (embebido)',
+ 'file:embedall' => 'Todos',
+ 'file:saved' => 'O arquivo foi gardado correctamente.',
+ 'file:deleted' => 'O arquivo foi eliminado correctamente.',
+ 'file:none' => 'Non hai arquivos subidos.',
+ 'file:uploadfailed' => 'Non damos gardado o arquivo. Téntao de novo ou ponte en contacto coxs administradorxs.',
+ 'file:downloadfailed' => '¡Tarde piaches!, o arquivo non se atopa no sistema',
+ 'file:deletefailed' => 'Mimá!, non damos borrado o arquivo. Téntao de novo ou ponte en contacto coxs administradorxs.',
+ 'file:newupload' => 'Novo arquivo subido',
+ 'file:replace' => 'Substitui-lo arquivo (déixao en branco se non queres cambios)',
+ 'file:noaccess' => 'Non tes permisos para modificar este arquivo.',
+ 'file:cannotload' => 'Erro ó carga-lo arquivo',
+ 'file:nofile' => 'Tes que seleccionar un arquivo',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.groups.php b/mod/languages/languages/gl/gl.groups.php
new file mode 100644
index 000000000..81d45cdb1
--- /dev/null
+++ b/mod/languages/languages/gl/gl.groups.php
@@ -0,0 +1,143 @@
+<?php
+$gl = array (
+ 'groups' => 'Grupos',
+ 'groups:owned' => 'Grupos que crearas',
+ 'groups:yours' => 'Grupos ós que pertences',
+ 'groups:invitations' => 'Invitacións pendentes',
+ 'groups:invitations:none' => 'Non hai invitacións pendentes de aprobación',
+ 'groups:user' => 'grupos de %s',
+ 'groups:all' => 'Grupos',
+ 'groups:edit' => 'Editar grupo',
+ 'groups:delete' => 'Borrar grupo',
+ 'groups:membershiprequests' => 'Organiza-las peticións de membro',
+ 'groups:icon' => 'Icono do grupo',
+ 'groups:name' => 'Nome do grupo',
+ 'groups:username' => 'Nome curto do grupo (amosado nas URLs)',
+ 'groups:description' => 'Descrición',
+ 'groups:briefdescription' => 'Breve',
+ 'groups:interests' => 'Etiquetas',
+ 'groups:website' => ' Web',
+ 'groups:members' => 'Membros',
+ 'groups:membership' => 'Permisos dxs membros do grupo',
+ 'groups:access' => 'Permisos de acceso',
+ 'groups:owner' => 'Creado por',
+ 'groups:widget:num_display' => 'Número de grupos a amosar',
+ 'groups:widget:membership' => 'Membros',
+ 'groups:widgets:description' => 'Mostrar no teu perfil os grupos ós que pertences',
+ 'groups:noaccess' => 'Acceso non permitido ó grupo',
+ 'groups:cantedit' => 'Non podes editar este grupo',
+ 'groups:saved' => 'Grupo gardado',
+ 'groups:featured' => 'Grupos resaltados',
+ 'groups:makeunfeatured' => 'Sen resaltar',
+ 'groups:makefeatured' => 'Resaltar grupo',
+ 'groups:featuredon' => 'Resaltache-lo grupo e as súas características',
+ 'groups:joinrequest' => 'Entrar no grupo',
+ 'groups:join' => 'Entrar no grupo',
+ 'groups:leave' => 'Deixa-lo grupo',
+ 'groups:invite' => 'Invitar amigxs',
+ 'groups:inviteto' => 'Invitar amigxs dende \'%s\'',
+ 'groups:nofriends' => 'Aínda non tes amigos que non foran invitados ó grupo',
+ 'groups:viagroups' => 'vía grupos',
+ 'groups:group' => 'Grupo',
+ 'groups:notfound' => 'Grupo non atopado',
+ 'groups:notfound:details' => 'A petición de acceso ó grupo non existe ou non tes permisos para acceder',
+ 'groups:requests:none' => 'Non hai usuarixs agardando para entrar polo momento',
+ 'item:object:groupforumtopic' => 'Títulos das discusións',
+ 'groupforumtopic:new' => 'Postear unha nova discusión',
+ 'groups:count' => 'Grupos creados',
+ 'groups:open' => 'Grupo aberto',
+ 'groups:closed' => 'Grupo pechado',
+ 'groups:member' => 'Membros',
+ 'groups:searchtag' => 'Buscar grupos por etiquetas',
+ 'groups:access:private' => 'Pechado - Xs usuarixs deben ser invitados',
+ 'groups:access:public' => 'Aberto - Calquera usuarix pode pertencer',
+ 'groups:closedgroup' => 'Este grupo está pechado. ',
+ 'groups:enableforum' => 'Activar foro do grupo',
+ 'groups:yes' => 'si',
+ 'groups:no' => 'non',
+ 'groups:lastupdated' => 'Ultima actualización %s por %s',
+ 'group:replies' => 'Respostas',
+ 'groups:forum' => 'Foro do grupo',
+ 'groups:addtopic' => 'Engadir un título',
+ 'groups:forumlatest' => 'Última entrada no foro',
+ 'groups:latestdiscussion' => 'Últimos comentarios',
+ 'groups:newest' => 'Todos',
+ 'groups:popular' => 'Populares',
+ 'groupspost:success' => 'O teu comentario foi posteado correctamente',
+ 'groups:alldiscussion' => 'Toda-las entradas',
+ 'groups:edittopic' => 'Editar',
+ 'groups:topicmessage' => 'Comentario',
+ 'groups:topicstatus' => 'Estado do título',
+ 'groups:reply' => 'Escribir un comentario',
+ 'groups:topic' => 'Título',
+ 'groups:posts' => 'Entradas',
+ 'groups:lastperson' => 'Ultima persoa',
+ 'groups:when' => 'Cando',
+ 'grouptopic:notcreated' => 'Non hai títulos creados',
+ 'groups:topicopen' => 'Aberto',
+ 'groups:topicclosed' => 'Pechado',
+ 'groups:topicresolved' => 'Resolto',
+ 'grouptopic:created' => 'O título foi creado',
+ 'groupstopic:deleted' => 'Título borrado',
+ 'groups:topicsticky' => 'Sticky',
+ 'groups:topicisclosed' => 'Título pechado',
+ 'groups:topiccloseddesc' => 'O título foi pechado e non acepta novos comentarios',
+ 'grouptopic:error' => 'O título do grupo non pode ser creado. Fala con alguén que administre o sistema.',
+ 'groups:forumpost:edited' => 'Editaches con éxito a entrado do foro',
+ 'groups:forumpost:error' => 'Existe algún tipo de problema na edición da entrada',
+ 'groups:privategroup' => 'Este grupo é privado',
+ 'groups:notitle' => 'Os grupos deben ter un nome obrigatoriamente',
+ 'groups:cantjoin' => 'Non podes entrar no grupo, Revisa que non entraras xa.',
+ 'groups:cantleave' => 'Non podes deixa-lo grupo',
+ 'groups:addedtogroup' => 'Usuario engadido ó grupo correctamente',
+ 'groups:joinrequestnotmade' => 'A petición de entrada ó grupo non pode ser enviada',
+ 'groups:joinrequestmade' => 'A petición de entrada ó grupo foi realizada con éxito',
+ 'groups:joined' => 'Entraches no grupo con éxito!',
+ 'groups:left' => 'Xa saíches do grupo!',
+ 'groups:notowner' => 'Síntoo, non tes permiso para administrar este grupo',
+ 'groups:alreadymember' => 'Xa es parte deste grupo!',
+ 'groups:userinvited' => 'Usuarix invitadx',
+ 'groups:usernotinvited' => 'Estx usuarix non pode ser invitadx',
+ 'groups:useralreadyinvited' => 'Estx usuarix xa fora invitadx',
+ 'groups:updated' => 'Último comentario',
+ 'groups:invite:subject' => '%s fuches invitadx a pertencer ó grupo %s!',
+ 'groups:started' => 'Fío aberto por',
+ 'groups:joinrequest:remove:check' => 'Estás segurx de que queres borrar esta petición de entrada?',
+ 'groups:invite:body' => 'Ola %s,',
+ 'groups:welcome:subject' => 'Benvido ó grupo %s !',
+ 'groups:welcome:body' => 'Ola %s! A partires de agora formas parte do grupo %s, emprega o seguinte ligazón para comezar a participar. %s',
+ 'groups:request:subject' => '%s solicitou a entrada no grupo %s',
+ 'groups:request:body' => 'Ola %s, %s solicitou entrar no grupo \'%s\', preme embaixo para ve-lo seu perfil: %s ou eiquí para confirma-la súa petición directamente',
+ 'groups:nowidgets' => 'Non hai widgets definidos para este grupo',
+ 'groups:widgets:members:title' => 'Membros do grupo',
+ 'groups:widgets:members:description' => 'Listaxe dos membros do grupo',
+ 'groups:widgets:members:label:displaynum' => 'Listaxe dos membros do grupo',
+ 'groups:widgets:members:label:pleaseedit' => 'Por favor, configura o widget.',
+ 'groups:widgets:entities:title' => 'Obxectos no grupo',
+ 'groups:widgets:entities:description' => 'Listaxe de obxectos gardados neste grupo',
+ 'groups:widgets:entities:label:displaynum' => 'Listaxe dos obxectos do grupo',
+ 'groups:widgets:entities:label:pleaseedit' => 'Por favor, configura o widget.',
+ 'groups:forumtopic:edited' => 'Título do foro editado con éxito',
+ 'group:deleted' => 'O grupo e os seus contidos foron borrados',
+ 'group:notdeleted' => 'O grupo non pode ser borrado',
+ 'grouppost:deleted' => 'Entradas do grupo borradas con éxito',
+ 'grouppost:notdeleted' => 'As entradas do grupo non poden ser borradas',
+ 'groupstopic:notdeleted' => 'Título non borrado',
+ 'grouptopic:blank' => 'Sen título',
+ 'groups:deletewarning' => 'Estás seguro de que queres borra-lo grupo? Pénsao ben, que despois non hai volta atrás!',
+ 'groups:joinrequestkilled' => 'A petición de entrada foi borrada',
+ 'groups:visibility' => 'Quen pode ver este grupo?',
+ 'groups:allowhiddengroups' => 'Queres permitir grupos privados (invisibles)?',
+ 'groups:notmember' => 'Síntoo, non es membro de este grupo.',
+ 'groups:invite:remove:check' => 'Estás segurx de que queres rexeitar esta invitación?',
+ 'groups:invitekilled' => 'A invitación foi borrada',
+ 'groups:search:tags' => 'etiqueta',
+ 'grouppost:nopost' => 'Vacío',
+ 'grouptopic:notfound' => 'Título non atopado',
+ 'groups:lastcomment' => 'Último comentario %s por %s',
+ 'groups:members:more' => 'Ver máis membros',
+ 'groups:closedgroup:request' => 'Para solicitar a entrada preme en "Entrar no grupo"',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.messageboard.php b/mod/languages/languages/gl/gl.messageboard.php
new file mode 100644
index 000000000..87177c0ad
--- /dev/null
+++ b/mod/languages/languages/gl/gl.messageboard.php
@@ -0,0 +1,36 @@
+<?php
+$gl = array (
+ 'messageboard:board' => 'Bandexa',
+ 'messageboard:viewall' => 'Ver todos',
+ 'messageboard:postit' => 'Novo',
+ 'messageboard:history' => 'Historial',
+ 'messageboard:none' => 'Non tes ningún comentario na túa bandexa',
+ 'messageboard:num_display' => 'Número de comentarios a mostrar',
+ 'messageboard:desc' => 'Esta é a bandexa dos comentarios. Calquera, incluido ti, pode deixar un comentario no teu perfil.',
+ 'messageboard:user' => 'na bandexa persoal de %s',
+ 'messageboard:replyon' => 'responder a ',
+ 'messageboard:posted' => 'O comentario foi escrito',
+ 'messageboard:deleted' => 'O comentario foi borrado',
+ 'messageboard:email:subject' => 'Tes un novo comentario na túa bandexa',
+ 'messageboard:email:body' => '%s deixouche o seguinte comentario:
+
+%s
+
+Para ve-los comentarios na túa bandexa dos mensaxes, clica na seguinte ligazón:
+
+%s
+
+Para consulta-lo perfil de %s, clica nesta ligazón:
+
+%s
+
+Non respondas a esta mail, recorda que é o sistema quen cho enviou de forma automática. Se tes algún problema ou comentario sobre a rede, ponte en contacto coxs que a administran.',
+ 'messageboard:blank' => 'Necesitas poñer algo na bandexa dos comentarios para envialo, non cres?',
+ 'messageboard:notfound' => 'Baia oh, non atopo o que buscas. Téntao de novo ou ponte en contacto coxs que administran a rede.',
+ 'messageboard:notdeleted' => 'O comentario non puido ser borrado, téntao de novo ou ponte en contacto coxs que administran a rede.',
+ 'messageboard:somethingwentwrong' => 'Mimá, algo extrano pasou. Téntao de novo ou ponte en contacto coxs que administran a rede.',
+ 'messageboard:failure' => 'Fallazo! O sistema non ten nin idea do que sucede. Téntao de novo ou ponte en contacto coxs que administran a rede.',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.messages.php b/mod/languages/languages/gl/gl.messages.php
new file mode 100644
index 000000000..a078e6a72
--- /dev/null
+++ b/mod/languages/languages/gl/gl.messages.php
@@ -0,0 +1,52 @@
+<?php
+$gl = array (
+ 'messages' => 'Correos',
+ 'messages:back' => 'volver a correos',
+ 'messages:user' => 'Buzón de correo',
+ 'messages:posttitle' => 'correo de %s: %s',
+ 'messages:inbox' => 'Buzón de correo',
+ 'messages:send' => 'Enviar un correo',
+ 'messages:sent' => 'Enviar correo',
+ 'messages:message' => 'Correo',
+ 'messages:title' => 'Asunto',
+ 'messages:to' => 'Para',
+ 'messages:from' => 'De',
+ 'messages:fly' => 'Enviar',
+ 'messages:replying' => 'Correo en resposta a ',
+ 'messages:sendmessage' => 'Enviar un correo',
+ 'messages:compose' => 'Escribir un correo',
+ 'messages:sentmessages' => 'Correos enviados',
+ 'messages:recent' => 'Correos recentes',
+ 'messages:original' => 'Correo orixinal',
+ 'messages:yours' => 'O teu correo',
+ 'messages:answer' => 'Responder',
+ 'messages:toggle' => 'Seleccionar todos',
+ 'messages:markread' => 'Marcar como lido',
+ 'messages:new' => 'Novo correo',
+ 'notification:method:site' => 'rede social',
+ 'messages:error' => 'Houbo un problema ó garda-lo correo. Por favor, téntao de novo.',
+ 'item:object:messages' => 'Correos',
+ 'messages:posted' => 'Correo enviado',
+ 'messages:email:subject' => 'Tes un correo novo no buzón!',
+ 'messages:email:body' => 'Tes un correo novo de %s que di:
+
+
+%s
+
+
+Para ver o teu buzón de correo preme eiquí:
+
+%s
+
+Por certo... Non respondas a este correo. Foi unha máquina quen cho enviou ;)',
+ 'messages:blank' => 'Fíxate ben!, tes que poñer algo no corpo do correo antes de gardalo.',
+ 'messages:notfound' => 'Vaia oh!, non puidemos atopa-lo correo solicitado. Téntao de novo ou ponte en contacto coxs que administran a rede.',
+ 'messages:notdeleted' => 'Vaia oh! non puidemos elimina-lo correo. Téntao de novo ou ponte en contacto coxs que administran a rede.',
+ 'messages:nopermission' => 'Non o flipes!, non te-los permisos para modificar este correo',
+ 'messages:nomessages' => 'Non hai ningún correo.',
+ 'messages:user:nonexist' => 'Non puidemos atopar a estx habitante na base de datos. Téntao de novo ou ponte en contacto coxs que administran a rede.',
+ 'messages:user:blank' => 'Non tes seleccionado a ninguén para enviarlle isto',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.pages.php b/mod/languages/languages/gl/gl.pages.php
new file mode 100644
index 000000000..a37c4b078
--- /dev/null
+++ b/mod/languages/languages/gl/gl.pages.php
@@ -0,0 +1,42 @@
+<?php
+$gl = array (
+ 'pages' => 'Páxinas',
+ 'pages:group' => 'Páxinas',
+ 'pages:all' => 'Tódalas páxinas',
+ 'pages:new' => 'Nova páxina',
+ 'pages:edit' => 'Edita-la páxina',
+ 'pages:delete' => 'Borra-la páxina',
+ 'pages:history' => 'Historial da páxina',
+ 'pages:view' => 'Ve-la páxina',
+ 'pages:navigation' => 'Páxina de navegación',
+ 'item:object:page_top' => 'Páxinas iniciais',
+ 'item:object:page' => 'Páxinas',
+ 'pages:nogroup' => 'O grupo non ten contido creado polo momento, ou ben non te-los permisos para visualiza-la información',
+ 'pages:more' => 'Máis páxinas',
+ 'pages:title' => 'Título da páxina',
+ 'pages:description' => 'Descrición da entrada',
+ 'pages:tags' => 'Etiquetas',
+ 'pages:access_id' => 'Elixe quen a pode ver',
+ 'pages:write_access_id' => 'Elixe quen pode editala',
+ 'pages:noaccess' => 'Sen acceso á páxina',
+ 'pages:cantedit' => 'Non podes edita-la páxina',
+ 'pages:saved' => 'Páxina gardada',
+ 'pages:notsaved' => 'A páxina non pode ser gardada',
+ 'pages:delete:success' => 'A túa páxina foi borrada correctamente',
+ 'pages:delete:failure' => 'Non dimos borrado a páxina. Se o problema persiste contacta coxs administran a rede.',
+ 'pages:strapline' => 'Última actualización %s por %s',
+ 'pages:num' => 'Número de páxinas a amosar',
+ 'pages:widget:description' => 'Esta é unha listaxe das túas páxinas',
+ 'pages:label:view' => 'Ve-la páxina',
+ 'pages:label:edit' => 'Edita-la páxina',
+ 'pages:label:history' => 'Historial da páxina',
+ 'pages:sidebar:this' => 'Esta páxina',
+ 'pages:sidebar:children' => 'Subpáxinas',
+ 'pages:sidebar:parent' => 'Parent',
+ 'pages:newchild' => 'Crear unha subpáxina',
+ 'pages:backtoparent' => 'Volver a \'%s\'',
+ 'groups:enablepages' => 'Activar páxinas do grupo',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.profile.php b/mod/languages/languages/gl/gl.profile.php
new file mode 100644
index 000000000..1580e9349
--- /dev/null
+++ b/mod/languages/languages/gl/gl.profile.php
@@ -0,0 +1,8 @@
+<?php
+$gl = array (
+ 'profile' => 'Perfil',
+ 'profile:notfound' => 'Non atopamo-lo perfil que estas a buscar. Proba con outro.',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.reportedcontent.php b/mod/languages/languages/gl/gl.reportedcontent.php
new file mode 100644
index 000000000..d80603c6a
--- /dev/null
+++ b/mod/languages/languages/gl/gl.reportedcontent.php
@@ -0,0 +1,7 @@
+<?php
+$gl = array (
+ 'item:object:reported_content' => 'Artigos publicados',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/gl/gl.uservalidationbyemail.php b/mod/languages/languages/gl/gl.uservalidationbyemail.php
new file mode 100644
index 000000000..b1d7c954c
--- /dev/null
+++ b/mod/languages/languages/gl/gl.uservalidationbyemail.php
@@ -0,0 +1,8 @@
+<?php
+$gl = array (
+ 'email:confirm:success' => 'Xa tes confirmada a túa conta',
+ 'email:confirm:fail' => 'O teu correo non pode ser verificado...',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/languages/languages/it/it.blog.php b/mod/languages/languages/it/it.blog.php
new file mode 100644
index 000000000..854d02b7a
--- /dev/null
+++ b/mod/languages/languages/it/it.blog.php
@@ -0,0 +1,12 @@
+<?php
+$it = array (
+ 'blog' => 'Blog',
+ 'blog:newpost' => 'Nuovo contenuto del blog',
+ 'blog:never' => 'mai',
+ 'blog:enableblog' => 'Abilita blog di gruppo',
+ 'blog:group' => 'Blog',
+ 'item:object:blog' => 'Post',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/it/it.bookmarks.php b/mod/languages/languages/it/it.bookmarks.php
new file mode 100644
index 000000000..692692e8d
--- /dev/null
+++ b/mod/languages/languages/it/it.bookmarks.php
@@ -0,0 +1,31 @@
+<?php
+$it = array (
+ 'bookmarks' => 'Preferiti',
+ 'bookmarks:friends' => 'I preferiti degli amici',
+ 'bookmarks:everyone' => 'Preferiti nel sito',
+ 'bookmarks:this' => 'Questo preferito',
+ 'bookmarks:this:group' => ' Preferiti in %s',
+ 'bookmarks:bookmarklet' => 'Inserisci nei preferiti',
+ 'bookmarks:bookmarklet:group' => 'Manda nei preferiti del gruppo',
+ 'bookmarks:more' => 'Piu\'',
+ 'bookmarks:with' => 'Condividi con',
+ 'bookmarks:delete:confirm' => 'Sei sicuro di voler cancellare questa risorsa?',
+ 'bookmarks:visit' => 'Visita le risorse',
+ 'bookmarks:river:annotate' => 'postato un commento su questo articolo dei preferiti ',
+ 'bookmarks:group' => 'Preferiti',
+ 'bookmarks:widget:description' => 'Questo widget è stato progettato per il vostro cruscotto e vi mostrerà le ultime nella tua casella di posta segnalibri. ',
+ 'bookmarks:bookmarklet:description' => 'Il bookmarklet segnalibri "PREFERITI" ti permette di condividere tutte le risorse che trovate sul web con i vostri amici, o semplicemente per te. Per poterlo utilizzare, è sufficiente trascinare ilseguente pulsante link del tuo browser:',
+ 'bookmarks:bookmarklet:descriptionie' => 'Se si utilizza Internet Explorer, sarà necessario fare clic destro del mouse sull\'icona bookmarklet, selezionare \'Aggiungi ai preferiti\', e poi la barra dei collegamenti ',
+ 'bookmarks:bookmarklet:description:conclusion' => 'È quindi possibile salvare le pagine visitate dai clic su di esso in qualsiasi momento.',
+ 'bookmarks:save:success' => 'Il tuo articolo è stato correttamente segnalato nei preferiti. ',
+ 'bookmarks:add' => 'Aggiungi preferiti',
+ 'bookmarks:recent' => 'Recenti',
+ 'bookmarks:river:item' => 'un elemento',
+ 'bookmarks:enablebookmarks' => 'Abilita preferiti di gruppo',
+ 'bookmarks:delete:success' => 'Gli elementi dei tuoi preferiti sono cancellati',
+ 'bookmarks:save:failed' => 'Gli elementi dei toui preferiti non possono essere salvati Riprova',
+ 'bookmarks:delete:failed' => 'Gli elementi dei tuoi preferiti non possono essere cancellati Riprova',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/it/it.categories.php b/mod/languages/languages/it/it.categories.php
new file mode 100644
index 000000000..6cb0c2b5f
--- /dev/null
+++ b/mod/languages/languages/it/it.categories.php
@@ -0,0 +1,10 @@
+<?php
+$it = array (
+ 'categories' => 'Categorie',
+ 'categories:settings' => 'Categorie sito',
+ 'categories:explanation' => 'Per impostare qualche categoria per il sito predefinite, e utilizzabili in tutto il sistema, inserisci qui sotto, separati da virgole. Compatibilmente agli strumenti installati potrai visualizzarne il contenuto quando l\'utente li crea o li modifica.',
+ 'categories:save:success' => 'Categorie del sito sono state salvate. ',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/it/it.core.php b/mod/languages/languages/it/it.core.php
new file mode 100644
index 000000000..a82210399
--- /dev/null
+++ b/mod/languages/languages/it/it.core.php
@@ -0,0 +1,707 @@
+<?php
+$it = array (
+ 'item:site' => 'Siti',
+ 'login' => 'Entra',
+ 'loginok' => 'Benvenuto.',
+ 'loginerror' => 'Non possiamo farti entrare. Questo può accadere perchè non hai ancora convalidato il tuo account, o i dati che hai fornito non sono corretti. Assicurati che i tuoi dati siano corretti e per favore riprova.',
+ 'logout' => 'Esci',
+ 'logoutok' => 'Arrivederci.',
+ 'logouterror' => 'Non possiamo farti uscire. Per favore riprova.',
+ 'exception:title' => 'Benvenuto in Elgg.',
+ 'actionundefined' => 'L\'azione che è stata richiesta (%s) non è definita nel sistema.',
+ 'actionloggedout' => 'Scusaci, non puoi compiere questa azione senza una previa identificazione sul sito.',
+ 'notfound' => 'Nessun risultato trovato.',
+ 'SecurityException:Codeblock' => 'Negato l\'accesso privilegiato per l\'esecuzione di codice blocco',
+ 'DatabaseException:WrongCredentials' => 'Elgg potrebbe non connettersi al database utilizzando le credenziali fornite.',
+ 'DatabaseException:NoConnect' => 'Elgg non poteva selezionare il database \'%s\', si prega di verificare che il database è stato creato e si ha accesso ad esso.',
+ 'SecurityException:FunctionDenied' => 'L\'accesso alle funzione privilegiata \'%s\' è negato.',
+ 'DatabaseException:DBSetupIssues' => 'Ci sono stati un numero di problemi:',
+ 'DatabaseException:ScriptNotFound' => 'Elgg potrebbe non trovare la richiesta allo script database %s.',
+ 'IOException:FailedToLoadGUID' => 'Impossibile caricare nuovi %s dall GUID:%d',
+ 'InvalidParameterException:NonElggObject' => 'Passaggio di un non ElggObject ad un costruttore ElggObject!',
+ 'InvalidParameterException:UnrecognisedValue' => 'Non riconosciuto valore passato a costruttore.',
+ 'InvalidClassException:NotValidElggStar' => 'GUID:%d non è un valido %s',
+ 'PluginException:MisconfiguredPlugin' => '%s è un plugin non configurato.',
+ 'InvalidParameterException:NonElggUser' => 'Passaggio di un non-ElggUser ad un costruttore ElggUser!',
+ 'InvalidParameterException:NonElggSite' => 'Passaggio di un non-ElggUser ad un costruttore ElggUser!',
+ 'InvalidParameterException:NonElggGroup' => 'Passaggio di un non-ElggUser ad un costruttore ElggUser!',
+ 'IOException:UnableToSaveNew' => 'Inabilitato a salvare il nuovo %s',
+ 'InvalidParameterException:GUIDNotForExport' => 'Il GUID non è stato specificato durante l\'esportazione, questo non dovrebbe accadere mai.',
+ 'InvalidParameterException:NonArrayReturnValue' => 'Entità seria la funzione ha superato un parametro non in ordine',
+ 'ConfigurationException:NoCachePath' => 'La patch della Cache non è impostata!',
+ 'IOException:NotDirectory' => '%s non è una cartella.',
+ 'IOException:BaseEntitySaveFailed' => 'Impossibile salvare il nuovo oggetto della base di entita informazioni!',
+ 'InvalidParameterException:UnexpectedODDClass' => 'importazione ()ha superato un inatteso ODD classe',
+ 'InvalidParameterException:EntityTypeNotSet' => 'Tipo di entità deve essere impostato.',
+ 'ClassException:ClassnameNotClass' => '%s non è un %s.',
+ 'ClassNotFoundException:MissingClass' => 'La classe \'%s\' non è stata trovata, il Plugin è mancante?',
+ 'InstallationException:TypeNotSupported' => 'Tipo %s non è supportato. Questo significa che c\'è un errore nella tua installazione, molto probabilmente causato da un aggiornamento incompleto.',
+ 'ImportException:ImportFailed' => 'Non è possibile importare l\'elemento %d',
+ 'ImportException:ProblemSaving' => 'C\'è stato un problema nell\'importare %s',
+ 'ImportException:NoGUID' => 'Una nuova entità è stata creata ma non ha un GUID, questo non dovrebbe accadere.',
+ 'ImportException:GUIDNotFound' => 'L\'entità \'%d\' non può essere trovata.',
+ 'ImportException:ProblemUpdatingMeta' => 'C\'è stato un problema nell\'aggiornare \'%s\' sull\'entità \'%d\'',
+ 'ExportException:NoSuchEntity' => 'Nessuna entità GUID simile:%d',
+ 'ImportException:NoODDElements' => 'Nessun elemento OpenDD è stato trovato nell\'importazione dei dati, l\'importazione è fallita.',
+ 'ImportException:NotAllImported' => 'Non tutti gli elementi sono stati importati.',
+ 'InvalidParameterException:UnrecognisedFileMode' => 'Modalità file non riconosciuta \'%s\'',
+ 'InvalidParameterException:MissingOwner' => 'Tutti i file devono avere un proprietario!',
+ 'IOException:CouldNotMake' => 'Non si può fare %s',
+ 'IOException:MissingFileName' => 'Devi specificare un nome prima di aprire un file.',
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => 'La cartella per il deposito dei File non è stata trovata o la classe non è stata salvata con un file!',
+ 'NotificationException:NoNotificationMethod' => 'Nessun metodo di notificazione è stato specificato.',
+ 'NotificationException:NoHandlerFound' => 'Nessun gestore trovati per \'%s\' o non è stato collocato.',
+ 'NotificationException:ErrorNotifyingGuid' => 'Si è verificato un errore durante la comunicazione %d',
+ 'NotificationException:NoEmailAddress' => 'Non posso ottenere l\'indirizzo email per il GUID:%d',
+ 'NotificationException:MissingParameter' => 'Manca un parametro richiesto, \'%s\'',
+ 'DatabaseException:WhereSetNonQuery' => 'Se non impostato Dove contiene Componente Query',
+ 'DatabaseException:SelectFieldsMissing' => 'I campi mancanti su una query per selezionare lo stile',
+ 'DatabaseException:UnspecifiedQueryType' => 'Non riconosciuto o non specificato tipo di richiesta.',
+ 'DatabaseException:NoTablesSpecified' => 'Non specificato tabelle per query.',
+ 'DatabaseException:NoACL' => 'Controllo di accesso non è stato fornito su richiesta',
+ 'InvalidParameterException:NoEntityFound' => 'Nessuna entità trovata, o non esiste o non hai accesso ad essa.',
+ 'InvalidParameterException:GUIDNotFound' => 'GUID:%s non può essere trovato, o non è possibile accedere.',
+ 'InvalidParameterException:IdNotExistForGUID' => 'Spiacente, \'%s\' non esiste per la guid:%d',
+ 'InvalidParameterException:CanNotExportType' => 'Spiacente, Non so come esportare \'%s\'',
+ 'InvalidParameterException:NoDataFound' => 'Impossibile trovare i dati.',
+ 'InvalidParameterException:DoesNotBelong' => 'Non appartengono a entità.',
+ 'InvalidParameterException:DoesNotBelongOrRefer' => 'Non appartengono o si riferiscono a entità.',
+ 'InvalidParameterException:MissingParameter' => 'Parametro mancante, è necessario fornire un GUID.',
+ 'SecurityException:APIAccessDenied' => 'Siamo spiacenti, l\' API di accesso è stato disattivato dagli amministratori.',
+ 'SecurityException:NoAuthMethods' => 'Metodi di autenticazione non è stato trovato che possa autenticare questa richiesta API.',
+ 'APIException:ApiResultUnknown' => 'API dei risultati è di un tipo sconosciuto, questo non dovrebbe mai accadere.',
+ 'ConfigurationException:NoSiteID' => 'ID del sito non è stato specificato.',
+ 'APIException:MissingParameterInMethod' => 'Parametro mancante %s in metodo %s',
+ 'APIException:ParameterNotArray' => '%s non sembra essere un array.',
+ 'APIException:UnrecognisedTypeCast' => 'Non riconosciuti tipo espressi in %s per la variabile \'%s\' in metodo \'%s\'',
+ 'APIException:InvalidParameter' => 'Parametro non valido trovato per\' %s\' in metodo \'%s\'.',
+ 'APIException:FunctionParseError' => '%s(%s) ha un errore di parsing.',
+ 'APIException:FunctionNoReturn' => '%s(%s) non ha restituito alcun valore.',
+ 'SecurityException:AuthTokenExpired' => 'Dati di autenticazione mancanti, non validi o scaduti.',
+ 'CallException:InvalidCallMethod' => '%s deve essere chiamato con \'%s\'',
+ 'APIException:MethodCallNotImplemented' => 'Metodo di chiamata \'%s\' non stato attuato.',
+ 'APIException:AlgorithmNotSupported' => 'Algoritmo \'%s\' non è supportato o è stato disabilitato.',
+ 'ConfigurationException:CacheDirNotSet' => 'Directory Cache \'cache_path\' non impostata.',
+ 'APIException:NotGetOrPost' => 'Metodo deve essere richiesta GET o POST',
+ 'APIException:MissingAPIKey' => 'Mancante X-Elgg-apikey HTTP in testa',
+ 'APIException:MissingHmac' => 'Mancante X-Elgg-hmac in testa',
+ 'APIException:MissingHmacAlgo' => 'Mancante X-Elgg-hmac-algo in testa',
+ 'APIException:MissingTime' => 'Mancante X-Elgg-time in testa',
+ 'APIException:TemporalDrift' => 'X-Elgg-tempo troppo lontano nel passato o futuro. Epoca non.',
+ 'APIException:NoQueryString' => 'Non sono disponibili dati sulla stringa di ricerca',
+ 'APIException:MissingPOSTHash' => 'Mancante X-Elgg-posthash in testa',
+ 'APIException:MissingPOSTAlgo' => 'Mancante X-Elgg-posthash_algo in testa',
+ 'APIException:MissingContentType' => 'Mancante tipo di contenuto per il post dei dati',
+ 'SecurityException:InvalidPostHash' => 'POST hash dei dati non valido - Prevista %s ma si %s.',
+ 'SecurityException:DupePacket' => 'Tipo di firma già visto.',
+ 'SecurityException:InvalidAPIKey' => 'Non valido o mancante API Key.',
+ 'NotImplementedException:CallMethodNotImplemented' => 'Metodo di chiamata \'%s\' non è attualmente supportato.',
+ 'NotImplementedException:XMLRPCMethodNotImplemented' => 'XML-RPC Metodo di chiamata \'%s\' non implementato.',
+ 'InvalidParameterException:UnexpectedReturnFormat' => 'Metodo di chiamata \'%s\' ha restituito un risultato inaspettato.',
+ 'CallException:NotRPCCall' => 'Non sembra essere una valida chiamata XML-RPC',
+ 'PluginException:NoPluginName' => 'Il nome plugin non è stato possibile trovare',
+ 'SecurityException:authenticationfailed' => 'L\'utente potrebbe non essere autenticato',
+ 'CronException:unknownperiod' => '%s non è un periodo riconosciuto.',
+ 'SecurityException:deletedisablecurrentsite' => 'Non è possibile eliminare o disabilitare il sito che si sta visualizzando!',
+ 'memcache:notinstalled' => 'PHP Memcache modulo non è installato, è necessario installare php5-Memcache',
+ 'memcache:noservers' => 'Memcache server non definiti, si prega di compilare il variable',
+ 'memcache:versiontoolow' => 'Memcache ha bisogno di almeno versione %s al termine, si esegue %s',
+ 'memcache:noaddserver' => 'Supporto di più server disabili, potrebbe essere necessario aggiornare la tua libreria PECL Memcache',
+ 'deprecatedfunction' => 'Avvertenza: Questo codice utilizza la funzione deprecata \'%s\' e non è compatibile con questa versione di Elgg',
+ 'pageownerunavailable' => 'Attenzione: la pagina proprietaria %d non è accessibile',
+ 'system.api.list' => 'Elenca tutte le chiamate API disponibili sul sistema.',
+ 'auth.gettoken' => 'Questa chiamata API consente a un utente di accedere, restituire un token di autenticazione che può essere utilizzato in leu di un nome utente e la password per l\'autenticazione chiede inoltre.',
+ 'name' => 'Nome mostrato',
+ 'email' => 'Indirizzo Email',
+ 'username' => 'Username',
+ 'password' => 'Password',
+ 'passwordagain' => 'Password (di nuovo per verifica)',
+ 'admin_option' => 'Rendere questo utente un amministratore ?',
+ 'PRIVATE' => 'Privato',
+ 'LOGGED_IN' => 'Utenti loggati',
+ 'PUBLIC' => 'Pubblico',
+ 'access:friends:label' => 'Amici',
+ 'access' => 'Accesso',
+ 'dashboard' => 'Home',
+ 'dashboard:nowidgets' => 'La tua Homepage da l\'inizio del sito. Fare clic su \'Modifica pagina\' per aggiungere i gadget per tenere traccia del contenuto e la vita all\'interno del sistema.',
+ 'widgets:add' => 'Aggiungi i gadget alla tua pagina',
+ 'widgets:add:description' => 'Scegli le caratteristiche che si desidera aggiungere alla tua pagina trascinandoli dalla <b>Galleria gadget</b> sulla destra, ad una delle tre aree gadget qui sotto, scegliendo la posizione dove si desidera che vengano visualizzati.
+
+
+
+Per rimuovere un gadget trascinarlo nella <b>Galleria gadget</b>.',
+ 'widgets:position:fixed' => '(Fissa posizione nella pagina)',
+ 'widgets' => 'Gadgets',
+ 'widget' => 'Gadgets',
+ 'item:object:widget' => 'Gadgets',
+ 'widgets:save:success' => 'I tuoi gadget sono stati salvati con successo.',
+ 'widgets:save:failure' => 'Problema nel salvare i tuoi gadget, riprova più tardi.',
+ 'group' => 'Gruppo',
+ 'item:group' => 'Gruppi',
+ 'profile:edit:default' => 'Riempire i campi profilo',
+ 'user' => 'Utente',
+ 'item:user' => 'Utenti',
+ 'riveritem:single:user' => 'un utente',
+ 'riveritem:plural:user' => 'alcuni utenti',
+ 'profile:edit' => 'Modifca profilo',
+ 'profile:aboutme' => 'Informazioni su di me',
+ 'profile:description' => 'Informazioni su di me',
+ 'profile:briefdescription' => 'Breve descrizione',
+ 'profile:location' => 'Dove abito',
+ 'profile:skills' => 'In cosa sono abile',
+ 'profile:interests' => 'Interessi',
+ 'profile:contactemail' => 'Contatto email',
+ 'profile:phone' => 'Telefono',
+ 'profile:mobile' => 'Cellulare',
+ 'profile:website' => 'Sito internet',
+ 'profile:label' => 'Nome profilo',
+ 'profile:type' => 'Tipo profilo',
+ 'profile:editdefault:fail' => 'Il profilo di default non e stato salvato',
+ 'profile:editdefault:success' => 'Voce correttamente aggiunta al profilo di default',
+ 'profile:editdefault:delete:fail' => 'Rimosso profilo predefinito voce campo non assegnato',
+ 'profile:editdefault:delete:success' => 'Profilo predefinito punto cancellato!',
+ 'profile:defaultprofile:reset' => 'Resetta profilo default del sistema',
+ 'profile:resetdefault' => 'Resetta profilo default',
+ 'profile:explainchangefields' => 'È possibile sostituire i campi già esistenti con il proprio profilo utilizzando il modulo seguente. In primo luogo si dà il nuovo campo profilo di una etichetta, ad esempio, \'squadra del cuore\'. Dopodiché è necessario selezionare il tipo di campo, per esempio, i tag, url, testo e così via. In qualsiasi momento puoi tornare al profilo di default',
+ 'profile:saved' => 'Profilo salvato con successo.',
+ 'friends' => 'Amici',
+ 'friends:yours' => 'I tuoi amici',
+ 'friends:owned' => '%s amici',
+ 'friend:add' => 'Aggiungi un amico',
+ 'friend:remove' => 'Rimuovi un amico',
+ 'friends:add:successful' => 'Hai correttamente aggiunto %s come amico.',
+ 'friends:add:failure' => 'Impossibile aggiungere %s come amico. Si prega di riprovare.',
+ 'friends:remove:successful' => 'Hai correttamente rimosso %s dai tuoi amici.',
+ 'friends:remove:failure' => 'Impossibile rimuovere %s dai tuoi amici. Si prega di riprovare.',
+ 'friends:none' => 'Questo utente non ha aggiunto ancora qualcuno come amico.',
+ 'friends:none:you' => 'Non hai aggiunto qualcuno come amico! Cerca il tuo interesse per iniziare la ricerca di persone da seguire.',
+ 'friends:none:found' => 'Non sono stati trovati amici.',
+ 'friends:of:none' => 'Nessuno ha aggiunto questo utente come amico ancora.',
+ 'friends:of:none:you' => 'Nessuno ti ha aggiunto come amico ancora. Inizia aggiungendo contenuti e compila il tuo profilo, per farti trovare!',
+ 'friends:of:owned' => 'Persone che hanno fatto %s un amico',
+ 'friends:num_display' => 'Numero di amici da visualizzare',
+ 'friends:icon_size' => 'Dimensione immagine',
+ 'friends:tiny' => 'Piccolissima',
+ 'friends:small' => 'Piccola',
+ 'friends:of' => 'Amici di',
+ 'friends:collections' => 'Gruppi di amici',
+ 'friends:collections:add' => 'Nuovo gruppo di amici',
+ 'friends:addfriends' => 'Aggiungi amici',
+ 'friends:collectionname' => 'Nome gruppo',
+ 'friends:collectionfriends' => 'Amici nel gruppo',
+ 'friends:collectionedit' => 'Modifica questo gruppo',
+ 'friends:nocollections' => 'Non hai ancora un gruppo.',
+ 'friends:collectiondeleted' => 'Il tuo gruppo e stato cancellato.',
+ 'friends:collectiondeletefailed' => 'Non siamo stati in grado di eliminare il gruppo. O non hai il permesso, o qualche altro problema si verifica.',
+ 'friends:collectionadded' => 'Il tuo gruppo e stato creato con successo',
+ 'friends:nocollectionname' => 'Necessario dare un nome al tuo gruppo prima che possa essere creato.',
+ 'friends:collections:members' => 'Membri del gruppo',
+ 'friends:collections:edit' => 'Modifica il gruppo',
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'feed:rss' => 'Iscriviti al feed',
+ 'link:view' => 'visita link',
+ 'river' => 'Canale',
+ 'river:noaccess' => 'Non hai i permessi per visualizzare questo articolo.',
+ 'river:posted:generic' => '%s ha inviato',
+ 'plugins:settings:save:ok' => 'Le impostazioni per il plugin %s sono state salvate con successo.',
+ 'plugins:settings:save:fail' => 'Problema per il salvataggio delle impostazioni %s plugin.',
+ 'plugins:usersettings:save:ok' => 'Impostazioni per utente %s plugin sono state salvate con successo.',
+ 'plugins:usersettings:save:fail' => 'Problema per salvare le impostazioni per utente %s plugin.',
+ 'admin:plugins:label:version' => 'Versione',
+ 'item:object:plugin' => 'Impostazioni di configurazione plugin',
+ 'notifications:usersettings' => 'Impostazioni notifiche',
+ 'notifications:methods' => 'Si prega di specificare quali metodi si desidera consentire.',
+ 'notifications:usersettings:save:ok' => 'Le impostazioni di notifica sono state salvate.',
+ 'notifications:usersettings:save:fail' => 'Problema nel salvare le impostazioni di notifica.',
+ 'user.notification.get' => 'Torna alle impostazioni di notifica per un determinato utente.',
+ 'user.notification.set' => 'Impostare le impostazioni di notifica per un determinato utente.',
+ 'search' => 'Cerca',
+ 'searchtitle' => 'Cerca: %s',
+ 'users:searchtitle' => 'Ricerca per utenti: %s',
+ 'groups:searchtitle' => 'Ricerca per gruppi: %s',
+ 'advancedsearchtitle' => '%s con i risultati corrispondenti %s',
+ 'next' => 'Successivo',
+ 'previous' => 'Precedente',
+ 'viewtype:change' => 'Cambia tipo di lista',
+ 'viewtype:list' => 'Elenco',
+ 'viewtype:gallery' => 'Galleria',
+ 'tag:search:startblurb' => 'Elementi con tag corrispondenti \'%s\':',
+ 'user:search:startblurb' => 'Utenti corrispondenti \'%s\':',
+ 'user:search:finishblurb' => 'Per vedere tutto, clicca qui.',
+ 'group:search:startblurb' => 'Gruppi individuati \'%s\'',
+ 'group:search:finishblurb' => 'Mostra ancora, clicca qui.',
+ 'search:go' => 'Vai',
+ 'account' => 'Profilo',
+ 'settings' => 'Impostazioni',
+ 'tools' => 'Strumenti',
+ 'register' => 'Registrati',
+ 'registerok' => 'Sei correttamente registrato come %s.',
+ 'registerbad' => 'La tua registrazione e\' stata rifiutata, il nickname esiste di già, la password e\' corta o sbagliata, riprova.',
+ 'registerdisabled' => 'La registrazione e stata disabilitata dall\'amministratore del sistema',
+ 'registration:notemail' => 'Indirizzo email che hai fornito non sembra essere un indirizzo email valido.',
+ 'registration:userexists' => 'Questo nome utente esiste , prova con un altro',
+ 'registration:usernametooshort' => 'Il tuo nome utente deve essere un minimo di 4 caratteri.',
+ 'registration:passwordtooshort' => 'La password deve essere un minimo di 6 caratteri.',
+ 'registration:dupeemail' => 'Questo indirizzo email e già stato registrato.',
+ 'registration:invalidchars' => 'Siamo spiacenti, il tuo nome utente contiene caratteri non validi.',
+ 'registration:emailnotvalid' => 'Siamo spiacenti, indirizzo email inserito non valido su questo sistema',
+ 'registration:passwordnotvalid' => 'Siamo spiacenti, password inserita non valida su questo sistema',
+ 'registration:usernamenotvalid' => 'Siamo spiacenti, nome utente inserito non valido su questo sistema',
+ 'adduser' => 'Aggiungi utente',
+ 'adduser:ok' => 'Hai aggiunto correttamente un nuovo utente.',
+ 'adduser:bad' => 'Il nuovo utente non puo essere creato.',
+ 'user:set:name' => 'Nome account impostazioni',
+ 'user:name:label' => 'Il tuo nome',
+ 'user:name:success' => 'Cambiato con successo il tuo nome sul sistema.',
+ 'user:name:fail' => 'Impossibile cambiare il tuo nome sul sistema.',
+ 'user:set:password' => 'Password Account',
+ 'user:password:label' => 'La tua nuova password',
+ 'user:password2:label' => 'La tua nuova password (di nuovo)',
+ 'user:password:success' => 'Password cambiata',
+ 'user:password:fail' => 'Impossibile cambiare la password del sistema.',
+ 'user:password:fail:notsame' => 'Le due password non sono la stessa cosa!',
+ 'user:password:fail:tooshort' => 'La password e troppo breve!',
+ 'user:set:language' => 'Impostazioni lingua',
+ 'user:language:label' => 'La tua lingua',
+ 'user:language:success' => 'Le impostazioni della lingua sono state aggiornati.',
+ 'user:language:fail' => 'Le impostazioni della lingua non possono essere salvate.',
+ 'user:username:notfound' => 'Utente %s non trovato.',
+ 'user:password:lost' => 'Hai dimenticato la password',
+ 'user:password:resetreq:success' => 'Hai chiesto una nuova password, e-mail inviata con successo',
+ 'user:password:resetreq:fail' => 'Non puoi richiedere una nuova password.',
+ 'user:password:text' => 'Per generare una nuova password scrivi qui sotto il tuo nome utente ti invieremo una pagina contenente il link di attivazione.',
+ 'user:persistent' => 'Ricordati',
+ 'admin:configuration:success' => 'Le tue impostazioni sono state salvate.',
+ 'admin:configuration:fail' => 'Le tue impostazioni non possono essere salvate.',
+ 'admin' => 'Amministrazione',
+ 'admin:description' => 'Il pannello di amministrazione permette di controllare tutti gli aspetti del sistema, dalla gestione degli utenti ai comportamenti delle plugin. Scegli una delle seguenti opzioni per iniziare.',
+ 'admin:site:description' => 'Questo pannello di amministrazione permette di controllare le impostazioni globali per il tuo sito. Scegli una delle seguenti opzioni per iniziare.',
+ 'admin:site:opt:linktext' => 'Configura sito...',
+ 'admin:site:access:warning' => 'Cambiare impostazione di accesso riguarda solo le autorizzazioni per i contenuti creati in futuro.',
+ 'admin:plugins' => 'Amministrazione plugin',
+ 'admin:plugins:description' => 'Questo pannello di amministrazione permette di controllare e configurare le plugin installate sul tuo sito.',
+ 'admin:plugins:opt:linktext' => 'Configurazione strumenti...',
+ 'admin:plugins:opt:description' => 'Configurare gli strumenti installati sul sito.',
+ 'admin:plugins:label:author' => 'Autore',
+ 'admin:plugins:label:copyright' => 'Copyright',
+ 'admin:plugins:label:licence' => 'Licenza',
+ 'admin:plugins:label:website' => 'URL',
+ 'admin:plugins:label:moreinfo' => 'alte informazioni',
+ 'admin:statistics' => 'Statistiche',
+ 'admin:statistics:description' => 'Questa è una panoramica delle statistiche sul tuo sito.',
+ 'admin:statistics:opt:description' => 'Visualizza le informazioni e statistiche sugli utenti e gli oggetti sul tuo sito.',
+ 'admin:statistics:opt:linktext' => 'Visualizza statistiche...',
+ 'admin:statistics:label:basic' => 'Statistiche di base del sito',
+ 'admin:statistics:label:numentities' => 'Attività del sito',
+ 'admin:statistics:label:numusers' => 'Numero di utenti',
+ 'admin:statistics:label:numonline' => 'Numero di utenti online',
+ 'admin:statistics:label:onlineusers' => 'Utenti online',
+ 'admin:statistics:label:version' => 'Versione di Elgg',
+ 'admin:statistics:label:version:release' => 'Rilascio',
+ 'admin:statistics:label:version:version' => 'Versione',
+ 'admin:user:label:search' => 'Trova utenti:',
+ 'admin:user:ban:no' => 'Non può bannare utente',
+ 'admin:user:ban:yes' => 'Utente bannato.',
+ 'admin:user:unban:no' => 'Non può togliere il ban a utente',
+ 'admin:user:unban:yes' => 'Utente tolto dal ban.',
+ 'admin:user:delete:no' => 'Non può cancellare utente',
+ 'admin:user:delete:yes' => 'Utente cancellato',
+ 'admin:user:resetpassword:yes' => 'Reimpostazione della password, notificato a utente.',
+ 'admin:user:resetpassword:no' => 'Password non ripristinabile.',
+ 'admin:user:makeadmin:yes' => 'Questo utente è un amministratore.',
+ 'admin:user:makeadmin:no' => 'Non siamo riusciti a rendere questo utente un amministratore.',
+ 'admin:user:removeadmin:yes' => 'Questo utente non è più un amministratore.',
+ 'admin:user:removeadmin:no' => 'Non siamo riusciti a rimuovere i privilegi di amministratore di questo utente.',
+ 'usersettings:description' => 'Le impostazioni utente pannello vi permette di controllare tutte le tue impostazioni personali, dalla gestione degli utenti a comportarsi come plugin. Scegli una delle seguenti opzioni per iniziare.',
+ 'usersettings:statistics' => 'Le tue statistiche',
+ 'usersettings:statistics:opt:description' => 'Visualizza le informazioni statistiche sugli utenti e gli oggetti sul tuo sito.',
+ 'usersettings:statistics:opt:linktext' => 'Statistiche Account',
+ 'usersettings:user' => 'Le tue impostazioni',
+ 'usersettings:user:opt:description' => 'Consente di controllare le impostazioni utente.',
+ 'usersettings:user:opt:linktext' => 'Cambia le tue impostazioni',
+ 'usersettings:plugins' => 'Strumenti',
+ 'usersettings:plugins:opt:description' => 'Configurare le impostazioni (se del caso) per la vostra attiva strumenti.',
+ 'usersettings:plugins:opt:linktext' => 'Configura i tuoi strumenti',
+ 'usersettings:plugins:description' => 'Questo pannello permette di controllare e configurare le impostazioni personali e gli strumenti installati dal vostro amministratore di sistema.',
+ 'usersettings:statistics:label:numentities' => 'Le tue attività',
+ 'usersettings:statistics:yourdetails' => 'I tuoi dati',
+ 'usersettings:statistics:label:name' => 'Nome completo',
+ 'usersettings:statistics:label:email' => 'Email',
+ 'usersettings:statistics:label:membersince' => 'Iscritto dal',
+ 'usersettings:statistics:label:lastlogin' => 'Ultimo ingresso',
+ 'save' => 'Salva',
+ 'publish' => 'Pubblica',
+ 'cancel' => 'Annulla',
+ 'saving' => 'Salvataggio ...',
+ 'update' => 'Aggiorna',
+ 'edit' => 'Modifica',
+ 'delete' => 'Cancella',
+ 'accept' => 'Accetta',
+ 'load' => 'Carica',
+ 'upload' => 'Invia',
+ 'ban' => 'Banna',
+ 'unban' => 'Togli ban',
+ 'enable' => 'Abilita',
+ 'disable' => 'Disabilita',
+ 'request' => 'Richiedi',
+ 'complete' => 'Completa',
+ 'open' => 'Apri',
+ 'close' => 'Chiudi',
+ 'reply' => 'Rispondi',
+ 'more' => 'Altro',
+ 'comments' => 'Commenti',
+ 'import' => 'Importa',
+ 'export' => 'Esporta',
+ 'up' => 'Sopra',
+ 'down' => 'Sotto',
+ 'top' => 'Alto',
+ 'bottom' => 'Basso',
+ 'invite' => 'Invita',
+ 'resetpassword' => 'Resetta la password',
+ 'makeadmin' => 'Rendi admin',
+ 'removeadmin' => 'Togli admin',
+ 'option:yes' => 'Si',
+ 'option:no' => 'No',
+ 'unknown' => 'Sconosciuto',
+ 'active' => 'Attivo',
+ 'total' => 'Totale',
+ 'learnmore' => 'Clicca qui per sapere altro.',
+ 'content' => 'contenuto',
+ 'content:latest' => 'Ultime attività',
+ 'content:latest:blurb' => 'In alternativa, fare clic qui per visualizzare il contenuto piu recente di tutto il sito.',
+ 'link:text' => 'vedi il link',
+ 'question:areyousure' => 'Sei sicuro ?',
+ 'title' => 'Titolo',
+ 'description' => 'Descrizione',
+ 'tags' => 'Tag',
+ 'spotlight' => 'In primo piano',
+ 'all' => 'Tutti',
+ 'by' => 'da',
+ 'annotations' => 'Annotazioni',
+ 'relationships' => 'Relazioni',
+ 'metadata' => 'Metadati',
+ 'deleteconfirm' => 'Sei sicuro di voler eliminare questa voce?',
+ 'fileexists' => 'Un file è già stato caricato. Per sostituirlo, selezionare il testo qui sotto:',
+ 'useradd:subject' => 'Account utente creato',
+ 'useradd:body' => '%s,
+
+
+
+Un account utente e\' stato creato per te %s. Per accedere, visitare:
+
+
+
+ %s
+
+
+
+E accedere con queste credenziali utente:
+
+
+
+ Username: %s
+
+ Password: %s
+
+
+
+Dopo aver effettuato un accesso, si consiglia di cambiare la tua password.',
+ 'systemmessages:dismiss' => 'Clicca per annullare',
+ 'importsuccess' => 'Importazione di dati riuscita',
+ 'importfail' => 'Importazione di dati fallita.',
+ 'friendlytime:justnow' => 'adesso',
+ 'friendlytime:minutes' => '%s minuti fa',
+ 'friendlytime:minutes:singular' => 'un minuto fa',
+ 'friendlytime:hours' => '%s ore fa',
+ 'friendlytime:hours:singular' => 'un ora fa',
+ 'friendlytime:days' => '%s giorni fa',
+ 'friendlytime:days:singular' => 'ieri',
+ 'date:month:01' => 'Gennaio %s',
+ 'date:month:02' => 'Febbraio %s',
+ 'date:month:03' => 'Marzo %s',
+ 'date:month:04' => 'Aprile %s',
+ 'date:month:05' => 'Maggio %s',
+ 'date:month:06' => 'Giugno %s',
+ 'date:month:07' => 'Luglio %s',
+ 'date:month:08' => 'Agosto %s',
+ 'date:month:09' => 'Settembre %s',
+ 'date:month:10' => 'Ottobre %s',
+ 'date:month:11' => 'Novembre %s',
+ 'date:month:12' => 'Dicembre %s',
+ 'installation:sitename' => 'Il nome del tuo sito (es "Il mio sito di social networking"):',
+ 'installation:sitedescription' => 'Breve descrizione del tuo sito (opzionale)',
+ 'installation:wwwroot' => 'URL del sito, seguita da una barra:',
+ 'installation:path' => 'Il percorso completo del tuo sito in root sul vostro hosting, seguito da una barra:',
+ 'installation:dataroot' => 'Intero percorso della directory dove i file caricati verranno memorizzati, seguita da una barra:',
+ 'installation:dataroot:warning' => 'E necessario creare manualmente questa directory. Essa dovrebbe trovarsi in una directory diversa della vostra installazione Elgg.',
+ 'installation:sitepermissions' => 'Le autorizzazioni di accesso predefinite:',
+ 'installation:language' => 'La lingua predefinita per il tuo sito:',
+ 'installation:debug' => 'Il debug mode fornisce informazioni supplementari che possono essere utilizzate per diagnosticare guasti, tuttavia si puo rallentare il vostro sistema deve essere utilizzato solo se si verificano problemi:',
+ 'installation:httpslogin' => 'Abilita questo utente ad avere accesso tramite HTTPS. Avrete bisogno di avere https abilitato sul server.',
+ 'installation:httpslogin:label' => 'Abilita HTTPS login',
+ 'installation:view' => 'Inserisci la vista principale che sara utilizzato come impostazione predefinita per il tuo sito o lasciare questo spazio vuoto per la visualizzazione predefinita (in caso di dubbio, lasciare il default):',
+ 'installation:siteemail' => 'Indirizzo e-mail del sito (sistema utilizzato per invio di e-mail)',
+ 'installation:disableapi' => 'Il RESTful API flessibile ed estensibile che consente alle applicazioni di interfaccia per utilizzo di determinate funzioni a distanza Elgg.',
+ 'installation:disableapi:label' => 'Abilita il RESTful API',
+ 'installation:allow_user_default_access:description' => 'Se selezionato, i singoli utenti sono autorizzati a fissare i loro livello di accesso di default e possono accedere a il sistema oltre il livello di accesso predefinito.',
+ 'installation:allow_user_default_access:label' => 'Consentire agli utenti accesso predefinito',
+ 'installation:simplecache:description' => 'Il semplice aumento delle prestazioni della cache da caching statico il contenuto, compresi alcuni file CSS e JavaScript. Normalmente si desidera questo.',
+ 'installation:simplecache:label' => 'Usa semplice cache',
+ 'upgrading' => 'Aggiornamento',
+ 'upgrade:db' => 'Il database e stato aggiornato.',
+ 'upgrade:core' => 'La vostra installazione di Elgg e stata aggiornata',
+ 'welcome' => 'Benvenuto',
+ 'welcome:user' => 'Benvenuto %s',
+ 'email:settings' => 'Impostazioni e-mail',
+ 'email:address:label' => 'Il tuo indirizzo e-mail',
+ 'email:save:success' => 'Nuovo indirizzo e-mail salvato, richiesta una verifica.',
+ 'email:save:fail' => 'Il tuo nuovo indirizzo di posta elettronica non poteva essere salvato.',
+ 'friend:newfriend:subject' => '%s ha fatto di voi un amico!',
+ 'friend:newfriend:body' => '%s ha fatto di voi un amico!
+
+
+
+Per visualizzare il loro profilo, clicca qui:
+
+
+
+ %s
+
+
+
+Impossibile rispondere a questa e-mail.',
+ 'email:resetpassword:subject' => 'Reimpostazione della password!',
+ 'email:resetpassword:body' => 'Salve %s,
+
+
+
+La tua password e\' stata reimpostata a: %s',
+ 'email:resetreq:subject' => 'Richiesta di nuova password.',
+ 'email:resetreq:body' => 'Salve %s,
+
+
+
+Qualcuno (da questo indirizzo IP %s) ha chiesto una nuova password per questo account.
+
+
+
+Se hai richiesto tu il cambio password, fai clic sul link qui sotto, altrimenti ignora questa e-mail.
+
+
+
+%s
+
+',
+ 'default_access:settings' => 'Il tuo livello di accesso predefinito',
+ 'default_access:label' => 'Accesso predefinito',
+ 'user:default_access:success' => 'Il tuo nuovo livello di accesso è stato salvato.',
+ 'user:default_access:failure' => 'Il tuo nuovo livello di accesso non è stato salvato.',
+ 'xmlrpc:noinputdata' => 'Inserisci dati mancanti',
+ 'comments:count' => '%s commenti',
+ 'riveraction:annotation:generic_comment' => '%s commenta %s',
+ 'generic_comments:add' => 'Aggiungi un commento',
+ 'generic_comments:text' => 'Commenta',
+ 'generic_comment:posted' => 'Commento inviato con successo.',
+ 'generic_comment:deleted' => 'Il tuo commento e\' stato eliminato.',
+ 'generic_comment:blank' => 'Siamo spiacenti, hai bisogno di scrivere qualcosa nell commento prima di di salvare.',
+ 'generic_comment:notfound' => 'Siamo spiacenti, non siamo riusciti a trovare oggetto specificato.',
+ 'generic_comment:notdeleted' => 'Siamo spiacenti, non abbiamo potuto eliminare questo commento.',
+ 'generic_comment:failure' => 'Un errore imprevisto si verifica quando aggiungi il tuo commento. Si prega di riprovare.',
+ 'generic_comment:email:subject' => 'Hai un nuovo commento!',
+ 'generic_comment:email:body' => 'Hai un nuovo commento sul tuo articolo "%s" from %s. Si legge:
+
+
+
+
+
+%s
+
+
+
+
+
+Per rispondere o per visualizzare, clicca qui:
+
+
+
+ %s
+
+
+
+Per visualizzare %s\'s profilo, clicca qui:
+
+
+
+ %s
+
+
+
+Impossibile rispondere a questa e-mail.',
+ 'entity:default:strapline' => 'Creato %s da %s',
+ 'entity:default:missingsupport:popup' => 'Questo oggetto non pu� essere visualizzato correttamente. Cio puo essere dovuto al fatto che esso richiede il supporto fornito da un plugin che non � piu installata.',
+ 'entity:delete:success' => 'Oggetto %s e stato cancellato',
+ 'entity:delete:fail' => 'Oggetto %s non puo essere cancellato',
+ 'actiongatekeeper:missingfields' => 'Manca un simbolo o campo',
+ 'actiongatekeeper:tokeninvalid' => 'Si e verificato un errore (di disallineamento). Questo probabilmente significa che la pagina che si stava utilizzando e scaduta. Si prega di riprovare.',
+ 'actiongatekeeper:timeerror' => 'La pagina che si stava utilizzando e scaduta. Si prega di aggiornare e riprovare.',
+ 'actiongatekeeper:pluginprevents' => 'Una estensione ha impedito che questo possa essere presentata sotto forma di.',
+ 'word:blacklist' => 'e, la, allora, ma, lei, la sua, lei, lui, uno, e non, anche, su, ora, di conseguenza, tuttavia, ancora, allo stesso modo, altrimenti, quindi, per converso, invece, di conseguenza, inoltre, tuttavia, invece, nel frattempo, di conseguenza, questa, sembra, che cosa, chi, di cui, chiunque.',
+ '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',
+ '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',
+ 'yi' => 'Yiddish',
+ 'yo' => 'Yoruba',
+ 'za' => 'Zuang',
+ 'zh' => 'Chinese',
+ 'zu' => 'Zulu',
+ 'loggedinrequired' => 'Devi essere iscritto per vedere questa pagina',
+ 'adminrequired' => 'Devi essere un amministratore per vedere questa pagina',
+ 'InvalidParameterException:APIMethodOrFunctionNotSet' => 'Metodo o una funzione non impostato nella chiamata in expose_method ()',
+ 'APIException:BadAPIKey' => 'Errore chiave API',
+ 'userpicker:only_friends' => 'Solo gli amici',
+ 'user:resetpassword:unknown_user' => 'Utente non valido',
+ 'user:resetpassword:reset_password_confirm' => 'Reimpostata la password spedita al tuo indirizzo email registrato ',
+ 'admin:user:label:searchbutton' => 'Ricerca',
+ 'untitled' => 'Senza titolo',
+ 'help' => 'Aiuto',
+ 'send' => 'Manda',
+ 'post' => 'Post',
+ 'submit' => 'Invia',
+ 'site' => 'Sito',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/it/it.custom_index.php b/mod/languages/languages/it/it.custom_index.php
new file mode 100644
index 000000000..ab063e593
--- /dev/null
+++ b/mod/languages/languages/it/it.custom_index.php
@@ -0,0 +1,11 @@
+<?php
+$it = array (
+ 'custom:bookmarks' => 'Ultimi preferiti',
+ 'custom:groups' => 'Gruppi recenti',
+ 'custom:files' => 'File recenti',
+ 'custom:blogs' => 'Ultimi post nei blog',
+ 'custom:members' => 'Ultimi iscritti ',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/it/it.file.php b/mod/languages/languages/it/it.file.php
new file mode 100644
index 000000000..ecf1eb30b
--- /dev/null
+++ b/mod/languages/languages/it/it.file.php
@@ -0,0 +1,53 @@
+<?php
+$it = array (
+ 'groups:enablefiles' => 'File del gruppo Attiva ',
+ 'file:friends' => '%s\'s file amici',
+ 'file:all' => 'I file di tutto il sito',
+ 'file:edit' => 'Edit file',
+ 'file:group' => 'File',
+ 'file:gallery' => 'vista galleria',
+ 'file:title' => 'Titolo',
+ 'file:desc' => 'Descrizione',
+ 'file:tags' => 'Tags',
+ 'file:saved' => 'Il file è stato salvato con successo. ',
+ 'file:deleted' => 'Il vostro file è stato cancellato con successo. ',
+ 'file:none' => 'Ma non abbiamo trovato alcun file al momento.',
+ 'file:uploadfailed' => 'Ci dispiace, non siamo riusciti a salvare il file ',
+ 'file:downloadfailed' => 'Ci dispiace, questo file non è disponibile in questo momento. ',
+ 'file:deletefailed' => 'Il file non può essere cancellato in questo momento.',
+ 'file:user' => 'File di',
+ 'file:more' => 'Più file',
+ 'file:list' => 'Vista lista',
+ 'file:num_files' => 'Numero di file da visualizzare',
+ 'file:user:gallery' => 'Vedi la galleria di %s',
+ 'file:upload' => 'Carica un file',
+ 'file:replace' => 'Sostituire il contenuto di un file (lasciare vuoto per non modificare il file) ',
+ 'file:newupload' => 'Un nuovo file è stato caricato',
+ 'file:type:all' => 'Tutti i file',
+ 'file:type:video' => 'Video',
+ 'file:type:document' => 'Documenti',
+ 'file:type:audio' => 'Audio',
+ 'file:type:image' => 'Immagini',
+ 'file:type:general' => 'Generale',
+ 'file:user:type:video' => 'video di %s',
+ 'file:user:type:document' => 'Documenti di %s',
+ 'file:user:type:audio' => 'Audio di %s',
+ 'file:user:type:image' => 'Immagini di %s',
+ 'file:user:type:general' => 'File generali di %s',
+ 'file:friends:type:video' => 'Video dei tuoi amici',
+ 'file:friends:type:document' => 'Documenti degli amici',
+ 'file:friends:type:audio' => 'Audio degli amici',
+ 'file:friends:type:image' => 'Immagini degli amici',
+ 'file:friends:type:general' => 'File completi degli amici',
+ 'file:widget:description' => 'Guarda i tuoi ultimi file',
+ 'file:download' => 'Scarica questo',
+ 'file:delete:confirm' => 'Sei sicuro di voler cancellare questo file?',
+ 'file:display:number' => 'Numero dei file da visualizzare',
+ 'file:embedall' => 'Tutti',
+ 'file:noaccess' => 'Non hai permessi necessari a modificare questo file',
+ 'file:cannotload' => 'Possono esserci errori di caricamento del file',
+ 'file:nofile' => 'Devi selezionare il file',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/it/it.groups.php b/mod/languages/languages/it/it.groups.php
new file mode 100644
index 000000000..719331a32
--- /dev/null
+++ b/mod/languages/languages/it/it.groups.php
@@ -0,0 +1,141 @@
+<?php
+$it = array (
+ 'groups' => 'Gruppi',
+ 'groups:owned' => 'Gruppi che gestisci',
+ 'groups:yours' => 'I tuoi gruppi',
+ 'groups:user' => '%s\'s gruppi',
+ 'groups:all' => 'Tutti i siti del gruppo',
+ 'groups:edit' => 'Edita il gruppo',
+ 'groups:delete' => 'Cancella il gruppo',
+ 'groups:membershiprequests' => 'Gestisci le richieste di accredito',
+ 'groups:icon' => 'Icona Gruppo (lasciare in bianco per non modificare)',
+ 'groups:name' => 'Nome Gruppo',
+ 'groups:username' => 'l nome del gruppo in breve (visualizzato nella URL, caratteri alfanumerici) ',
+ 'groups:description' => 'Descrizione',
+ 'groups:briefdescription' => 'Breve descrizione ',
+ 'groups:interests' => 'Tags',
+ 'groups:website' => 'Sito WEB',
+ 'groups:members' => 'Membri gruppo',
+ 'groups:membership' => 'Autorizzazioni Gruppo di appartenenza ',
+ 'groups:access' => 'Permessi accesso',
+ 'groups:owner' => 'Contatto',
+ 'groups:widget:num_display' => 'Numero dei gruppi da visualizzare',
+ 'groups:widget:membership' => 'Gruppo di appartenenza',
+ 'groups:widgets:description' => 'Visualizzare i gruppi di cui si è un membro',
+ 'groups:cantedit' => 'Non puoi editare in questo gruppo',
+ 'groups:saved' => 'Gruppo salvato',
+ 'groups:featured' => 'Gruppi in primo piano',
+ 'groups:joinrequest' => 'Richiesta accesso gruppo',
+ 'groups:join' => 'Unisciti al gruppo',
+ 'groups:leave' => 'Abbandona il gruppo',
+ 'groups:invite' => 'Invita amici',
+ 'groups:inviteto' => 'Invita un\'amico per\'%s\'',
+ 'groups:nofriends' => 'Non hai amici che non sono stati invitati a questo gruppo',
+ 'groups:group' => 'Gruppo',
+ 'groups:notfound' => 'Gruppo non trovato',
+ 'groups:notfound:details' => 'Il gruppo che hai richiesto o non esiste o non hai i permessi d\'accesso',
+ 'groups:requests:none' => 'Non ci sono richieste in attesa di adesione in questo momento',
+ 'groupforumtopic:new' => 'Inserita una nuova discussione',
+ 'groups:count' => 'gruppo creato',
+ 'groups:open' => 'apri gruppo',
+ 'groups:closed' => 'chiudi gruppo',
+ 'groups:member' => 'membri',
+ 'groups:searchtag' => 'Ricerca gruppi per Tags',
+ 'groups:access:private' => 'Privato_ Gli utenti devono essere invitati ',
+ 'groups:access:public' => 'Libero -ogni membro può accedere',
+ 'groups:closedgroup' => 'Questo gruppo è privato. Devi chiedere di essere aggiunti, fare clic su" richiesta adesione" dal link del menu. ',
+ 'groups:visibility' => 'Chi può vedere questo gruppo?',
+ 'groups:enableforum' => 'Gruppo di discussione Attiva ',
+ 'groups:yes' => 'si',
+ 'groups:no' => 'no',
+ 'groups:deletewarning' => 'Sei sicuro di voler cancellare questo gruppo? Non vi è possibilità di annullare l\'operazione',
+ 'groups:invitations' => 'Invito al gruppo',
+ 'groups:noaccess' => 'Impossibile accedere al gruppo',
+ 'item:object:groupforumtopic' => 'Argomenti discussi',
+ 'groups:lastupdated' => 'Ultimi aggiornamenti %s da %s',
+ 'group:replies' => 'Repliche',
+ 'groups:forum' => 'Discussione di gruppo',
+ 'groups:addtopic' => 'Aggiungi argomento',
+ 'groups:forumlatest' => 'Ultime discussioni',
+ 'groups:newest' => 'Novita\'',
+ 'groups:popular' => 'Popolari',
+ 'groupspost:success' => 'Il tuo commento e\' stato aggiunto',
+ 'groups:edittopic' => 'Imposta un argomento',
+ 'groups:topicmessage' => 'Messaggi principali',
+ 'groups:topicstatus' => 'stato degli argomenti',
+ 'groups:reply' => 'Inserisci commento',
+ 'groups:topic' => 'Argomenti',
+ 'groups:lastperson' => 'Ultimo utente',
+ 'groups:when' => 'Quando',
+ 'grouptopic:notcreated' => 'Nessun argomento creato',
+ 'groups:topicopen' => 'Aperto',
+ 'groups:topicclosed' => 'Chiuso',
+ 'groups:topicresolved' => 'Risolto',
+ 'grouptopic:created' => 'Il tuo argomento e\' stato creato',
+ 'groupstopic:deleted' => 'Argomenti cancellati',
+ 'groups:topicisclosed' => 'L\'argomento è chiuso',
+ 'groups:topiccloseddesc' => 'Questo argomento è chiuso ,impossibile aggiungere commenti',
+ 'grouptopic:error' => 'L\'argomento gruppo non potrebbe essere creato. Si prega di riprovare oppure contattare un amministratore di sistema. ',
+ 'groups:forumpost:edited' => 'Hai correttamente modificato il post sul forum. ',
+ 'groups:forumpost:error' => 'C\'è stato un problema modificando il post sul forum.',
+ 'groups:privategroup' => 'Questo gruppo è privato, è richiesta l\'adesione. ',
+ 'groups:notitle' => 'Il gruppo deve avere un titolo',
+ 'groups:cantjoin' => 'Non può unirti al gruppo ',
+ 'groups:cantleave' => 'Non puoi lasciare il gruppo',
+ 'groups:addedtogroup' => 'Aggiunto un nuovo utente al gruppo',
+ 'groups:joinrequestnotmade' => 'Non puoi chiedere di unirti al gruppo',
+ 'groups:joinrequestmade' => 'Ha chiesto di unirti al gruppo ',
+ 'groups:joined' => 'Aggiunto al gruppo',
+ 'groups:left' => 'Hai lasciato il gruppo',
+ 'groups:notowner' => 'Spiacente non sei l\'amministratore di questo gruppo',
+ 'groups:notmember' => 'Spiacente, non sei membro di questo gruppo.',
+ 'groups:alreadymember' => 'Sei già membro di questo gruppo!',
+ 'groups:userinvited' => 'L\'utente è stato invitato',
+ 'groups:usernotinvited' => 'L\'utente non potrebbe essere invitato. ',
+ 'groups:useralreadyinvited' => 'L\'utente è gia\' stato invitato',
+ 'groups:updated' => 'Ultimi commenti',
+ 'groups:invite:subject' => '%s hai ricevuto l\'invito ad unirti a %s',
+ 'groups:started' => 'Inizia da',
+ 'groups:joinrequest:remove:check' => 'Sei sicuro di voler lasciare il gruppo?',
+ 'groups:invite:body' => 'Ciao %s,
+
+%s sei stato invitato ad unirti al gruppo \'%s\' , clicca qui sotto per confermare:
+
+%s',
+ 'groups:welcome:subject' => 'Benvenuto nel gruppo %s',
+ 'groups:welcome:body' => 'Ciao %s!
+
+Tu ora sei un nuovo membro del gruppo \'%s\' ! Clicca per seguirci o per iniziare la tua attività!
+
+%s',
+ 'groups:request:subject' => '% s ha chiesto di aderire a % s ',
+ 'groups:request:body' => 'Ciao %s,
+
+%s richiesto di aderire al gruppo \'%s\' , clicca per vedere il suo profilo:
+
+%s
+
+oppure clicca per confermare la richiesta:
+
+%s',
+ 'groups:nowidgets' => 'Nessun gadget definito per questo gruppo',
+ 'groups:widgets:members:title' => 'Membri gruppo',
+ 'groups:widgets:members:description' => 'Lista dei membri di un gruppo',
+ 'groups:widgets:members:label:displaynum' => 'Lista dei membri di un gruppo',
+ 'groups:widgets:entities:title' => 'Oggetti nel gruppo',
+ 'groups:widgets:entities:description' => 'Lista oggetti salvata per questo gruppo',
+ 'groups:widgets:entities:label:displaynum' => 'Lista degli oggetti di un gruppo',
+ 'groups:widgets:entities:label:pleaseedit' => 'Per favore configura questo gadget',
+ 'groups:allowhiddengroups' => 'Vuoi consentire gruppi privati (invisibili)? ',
+ 'group:notdeleted' => 'Il gruppo non puo\' essere eliminato',
+ 'grouppost:deleted' => 'I post del gruppo sono cancellati',
+ 'grouppost:notdeleted' => 'I posto di gruppo non possono essere cancellati',
+ 'groupstopic:notdeleted' => 'L\'argomento non è cancellato',
+ 'grouptopic:blank' => 'Nesun argomento',
+ 'grouptopic:notfound' => 'Impossibile trovare il post',
+ 'grouppost:nopost' => 'Post vuoto',
+ 'groups:joinrequestkilled' => 'latua richiesta è stata soppressa ',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/it/it.messageboard.php b/mod/languages/languages/it/it.messageboard.php
new file mode 100644
index 000000000..0767c8b12
--- /dev/null
+++ b/mod/languages/languages/it/it.messageboard.php
@@ -0,0 +1,39 @@
+<?php
+$it = array (
+ 'messageboard:board' => 'Bacheca',
+ 'messageboard:messageboard' => 'Bacheca',
+ 'messageboard:viewall' => 'Vedi tutti',
+ 'messageboard:postit' => 'Aggiungi',
+ 'messageboard:history' => 'Cronistoria',
+ 'messageboard:none' => 'Non ci sono messaggi attualmente',
+ 'messageboard:num_display' => 'Numero di messaggi da visualizzare',
+ 'messageboard:desc' => 'Questo è un messaggio che si può mettere sul tuo profilo che altri utenti possono commentare.',
+ 'messageboard:user' => '%s\'s bacheca',
+ 'messageboard:replyon' => 'Replicato',
+ 'messageboard:posted' => 'Hai aggiunto correttamente alla bacheca',
+ 'messageboard:deleted' => 'Cancellato il messaggio',
+ 'messageboard:email:subject' => 'Tu hai un nuovo commento sulla tua bacheca dei messaggi',
+ 'messageboard:email:body' => 'Tu hai un nuovo messaggio nella tua bacheca da parte di %s. Lui dice:
+
+
+%s
+
+
+Per vedere i commenti clicca qui:
+
+%s
+
+Vedi %s\'s profilo, clicca qui:
+
+%s
+
+Tu non puoi replicare a questa email.',
+ 'messageboard:blank' => 'Ci dispiace, si deve scrivere effettivamente qualcosa prima che si possa salvare.',
+ 'messageboard:notfound' => 'Ci dispiace, ma non abbiamo trovato l\'elemento specificato.',
+ 'messageboard:notdeleted' => 'Ci dispiace, non siamo riusciti a cancellare questo messaggio.',
+ 'messageboard:somethingwentwrong' => 'Qualcosa è andato storto quando si tenta di salvare il tuo messaggio, assicurarsi che effettivamente ha scritto un messaggio.',
+ 'messageboard:failure' => 'Un errore imprevisto si è verificato quando si aggiunge il tuo messaggio. Riprova ancora.',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/it/it.messages.php b/mod/languages/languages/it/it.messages.php
new file mode 100644
index 000000000..953be5cde
--- /dev/null
+++ b/mod/languages/languages/it/it.messages.php
@@ -0,0 +1,56 @@
+<?php
+$it = array (
+ 'messages' => 'Messaggi',
+ 'messages:back' => 'Torna ai messaggi',
+ 'messages:user' => 'Posta in arrivo',
+ 'messages:posttitle' => '%s\'s messaggi: %s',
+ 'messages:inbox' => 'Posta in arrivo',
+ 'messages:send' => 'Invia un messaggio',
+ 'messages:sent' => 'Messaggi inviati',
+ 'messages:message' => 'Messaggi',
+ 'messages:title' => 'Titolo',
+ 'messages:to' => 'A',
+ 'messages:from' => 'Da',
+ 'messages:replying' => 'Messaggio di risposta ad ',
+ 'messages:sendmessage' => 'Invia un messaggio',
+ 'messages:compose' => 'Invia un messaggio',
+ 'messages:sentmessages' => 'Messaggi inviati',
+ 'messages:recent' => 'Messaggi recenti',
+ 'messages:original' => 'Messaggio originale',
+ 'messages:yours' => 'Il tuo messaggio',
+ 'messages:answer' => 'Risposta',
+ 'messages:markread' => 'Segna come letto',
+ 'messages:new' => 'Nuovo messaggio',
+ 'notification:method:site' => 'Sito',
+ 'messages:error' => 'Ci sono dei problemi per salvare il tuo messaggio- Riprova ',
+ 'item:object:messages' => 'Messaggi',
+ 'messages:posted' => 'Il tuo messaggio è stato inviato con successo. ',
+ 'messages:email:subject' => 'Tu hai un nuovo messaggio!',
+ 'messages:email:body' => 'Hai un nuovo messaggio da %s. Vi è scritto:
+
+
+%s
+
+
+per vedere il tuo messaggio clicca qui:
+
+%s
+
+Per spedire a %s un messaggio clicca qui:
+
+%s
+
+Non puoi replicare a questa email.',
+ 'messages:blank' => 'Ci dispiace, dovete effettivamente scrivere qualcosa nel corpo del messaggio prima che si possa salvare.',
+ 'messages:notfound' => 'Ci dispiace, ma non abbiamo trovato il messaggio specificato.',
+ 'messages:notdeleted' => 'Ci dispiace, non siamo riusciti a cancellare questo messaggio.',
+ 'messages:nopermission' => 'Non hai il permesso di modificare quel messaggio.',
+ 'messages:nomessages' => 'non vi sono messaggi da visualizzare',
+ 'messages:user:nonexist' => 'Non esiste nel database degli utenti il destinatario del messaggio. ',
+ 'messages:fly' => 'Manda',
+ 'messages:toggle' => 'Togli tutto',
+ 'messages:user:blank' => 'Non hai selezionato qualcosa da inviare a ',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/it/it.pages.php b/mod/languages/languages/it/it.pages.php
new file mode 100644
index 000000000..5300d403f
--- /dev/null
+++ b/mod/languages/languages/it/it.pages.php
@@ -0,0 +1,41 @@
+<?php
+$it = array (
+ 'pages' => 'Pagine',
+ 'pages:group' => 'Pagine',
+ 'pages:all' => 'Tutte le pagine del sito',
+ 'pages:new' => 'Nuova Pagina',
+ 'pages:edit' => 'Edita questa pagina',
+ 'pages:delete' => 'Cancella questa pagina',
+ 'pages:history' => 'Cronistoria pagine',
+ 'pages:view' => 'Guarda la pagina',
+ 'pages:navigation' => 'Navigazione pagine',
+ 'item:object:page_top' => 'Livello superiore',
+ 'item:object:page' => 'Pagine',
+ 'pages:nogroup' => 'Questo gruppo non ha nessun pagina ancora',
+ 'pages:more' => 'Più pagine',
+ 'pages:title' => 'Titolo Pagina',
+ 'pages:description' => 'La tua pagina iniziale ',
+ 'pages:access_id' => 'Accesso',
+ 'pages:write_access_id' => 'Accesso in scrittura ',
+ 'pages:noaccess' => 'Nessun accesso alla pagina',
+ 'pages:cantedit' => 'Non puoi editare su questa pagina',
+ 'pages:saved' => 'Pagina salvata',
+ 'pages:notsaved' => 'La pagina non può essere salvata',
+ 'pages:delete:success' => 'La tua pagina è stata cancellata.',
+ 'pages:delete:failure' => 'La pagina non può essere cancellata.',
+ 'pages:strapline' => 'Ultimo aggiornamento %s da parte di %s',
+ 'pages:revision' => 'Revisione creata %s da %s',
+ 'pages:num' => 'Numero di pagina da visualizzzare',
+ 'pages:widget:description' => 'Questo è un elenco delle tue pagine',
+ 'pages:label:view' => 'Guarda la pagina',
+ 'pages:label:edit' => 'Edita la pagina',
+ 'pages:label:history' => 'Cronistoria pagina',
+ 'pages:sidebar:this' => 'Questa pagina',
+ 'pages:sidebar:children' => 'Pagine dipendenti',
+ 'pages:newchild' => 'Crea una pagina dipendente',
+ 'pages:backtoparent' => 'Torna a \'%s\'',
+ 'groups:enablepages' => 'Abilita uso delle pagine per il gruppo',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/it/it.profile.php b/mod/languages/languages/it/it.profile.php
new file mode 100644
index 000000000..9a3d1a021
--- /dev/null
+++ b/mod/languages/languages/it/it.profile.php
@@ -0,0 +1,8 @@
+<?php
+$it = array (
+ 'profile' => 'Profilo',
+ 'profile:notfound' => 'Siamo spiacenti, non siamo riusciti a trovare il profilo specificato.',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/it/it.reportedcontent.php b/mod/languages/languages/it/it.reportedcontent.php
new file mode 100644
index 000000000..e8bc4395e
--- /dev/null
+++ b/mod/languages/languages/it/it.reportedcontent.php
@@ -0,0 +1,7 @@
+<?php
+$it = array (
+ 'item:object:reported_content' => 'Rapporto oggetti',
+);
+
+add_translation("it", $it);
+
diff --git a/mod/languages/languages/ja/ja.blog.php b/mod/languages/languages/ja/ja.blog.php
new file mode 100644
index 000000000..952951a44
--- /dev/null
+++ b/mod/languages/languages/ja/ja.blog.php
@@ -0,0 +1,12 @@
+<?php
+$ja = array (
+ 'blog' => 'ブログ',
+ 'blog:newpost' => 'æ–°ç€ãƒ–ログ記事',
+ 'item:object:blog' => 'ブログ記事',
+ 'blog:never' => 'never',
+ 'blog:enableblog' => 'グループブログã®åˆ©ç”¨',
+ 'blog:group' => 'グループブログ',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.bookmarks.php b/mod/languages/languages/ja/ja.bookmarks.php
new file mode 100644
index 000000000..5451d9484
--- /dev/null
+++ b/mod/languages/languages/ja/ja.bookmarks.php
@@ -0,0 +1,37 @@
+<?php
+$ja = array (
+ 'bookmarks' => 'ブックマーク',
+ 'bookmarks:add' => 'æ–°è¦ãƒ–ックマーク登録',
+ 'bookmarks:friends' => 'å‹é”ã®ãƒ–ックマーク',
+ 'bookmarks:everyone' => 'サイト全体ã®ãƒ–ックマーク',
+ 'bookmarks:this' => 'ã“ã®ãƒšãƒ¼ã‚¸ã‚’ブックマークã™ã‚‹',
+ 'bookmarks:this:group' => '%s ã®ãƒ–ックマーク',
+ 'bookmarks:bookmarklet' => 'ブックマークレットã®å–å¾—',
+ 'bookmarks:bookmarklet:group' => 'グループ用ブックマークレットã®å–å¾—',
+ 'bookmarks:inbox' => 'ブックマーク一覧',
+ 'bookmarks:more' => 'ã‚‚ã£ã¨ã¿ã‚‹',
+ 'bookmarks:with' => '共有ã™ã‚‹ãƒ¡ãƒ³ãƒãƒ¼ã®é¸æŠž',
+ 'bookmarks:new' => 'æ–°ç€ãƒ–ックマーク',
+ 'bookmarks:address' => 'URL',
+ 'bookmarks:delete:confirm' => '本当ã«å‰Šé™¤ã—ã¾ã™ã‹?',
+ 'bookmarks:numbertodisplay' => '一覧表示数',
+ 'bookmarks:shared' => 'ブックマーク済ã¿',
+ 'bookmarks:visit' => 'ブックマーク先ã¸',
+ 'bookmarks:recent' => '最近ã®ãƒ–ックマーク',
+ 'bookmarks:river:annotate' => 'ã“ã®ãƒ–ックマークã¸ã®ã‚³ãƒ¡ãƒ³ãƒˆ',
+ 'bookmarks:river:item' => 'アイテム',
+ 'item:object:bookmarks' => 'ブックマークアイテム',
+ 'bookmarks:group' => 'ブループブックマーク',
+ 'bookmarks:enablebookmarks' => 'グループブックマークã®åˆ©ç”¨',
+ 'bookmarks:widget:description' => 'æ–°ç€ãƒ–ックマークをダッシュボードã«è¡¨ç¤ºã—ã¾ã™ã€‚',
+ 'bookmarks:bookmarklet:description' => 'ブックマークレットã¯Webã§è¦‹ã¤ã‘ãŸã‚µã‚¤ãƒˆã®æƒ…報をå‹é”や自分ã®ãŸã‚ã«ç´ æ—©ãä¿å­˜ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚下ã®ãƒœã‚¿ãƒ³ã‚’ブラウザã®ãƒªãƒ³ã‚¯ãƒãƒ¼ã«ãƒ‰ãƒ©ãƒƒã‚°ã™ã‚‹ã ã‘ã§åˆ©ç”¨ãŒé–‹å§‹ã§ãã¾ã™ã€‚',
+ 'bookmarks:bookmarklet:descriptionie' => 'Internet Explorerã‚’ãŠä½¿ã„ã®æ–¹ã¯ãƒ–ックマークレットアイコンをå³ã‚¯ãƒªãƒƒã‚¯ã—ã¦ã‹ã‚‰ã€ŒãŠæ°—ã«å…¥ã‚Šã«ä¿å­˜ã€ã‚’é¸æŠžã—ã¦ã„ãŸã ãã€ãã®å¾Œã€ãƒªãƒ³ã‚¯ãƒãƒ¼ã«ç™»éŒ²ã—ã¦ãã ã•ã„。',
+ 'bookmarks:bookmarklet:description:conclusion' => 'ã“ã‚Œã§ã„ã¤ã§ã‚‚ページをブックマーク登録ã§ãるよã†ã«ãªã‚Šã¾ã—ãŸã€‚',
+ 'bookmarks:save:success' => 'ブックマークã«ç™»éŒ²ã—ã¾ã—ãŸã€‚',
+ 'bookmarks:delete:success' => 'ブックマークã‹ã‚‰å‰Šé™¤ã—ã¾ã—ãŸã€‚',
+ 'bookmarks:save:failed' => 'ブックマークã«ç™»éŒ²ã§ãã¾ã›ã‚“。',
+ 'bookmarks:delete:failed' => 'ブックマークã‹ã‚‰å‰Šé™¤ã§ãã¾ã›ã‚“。',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.categories.php b/mod/languages/languages/ja/ja.categories.php
new file mode 100644
index 000000000..0724f683f
--- /dev/null
+++ b/mod/languages/languages/ja/ja.categories.php
@@ -0,0 +1,11 @@
+<?php
+$ja = array (
+ 'categories' => 'カテゴリ',
+ 'categories:settings' => 'カテゴリã®è¨­å®š',
+ 'categories:explanation' => 'サイト内カテゴリを設定ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ã‚µã‚¤ãƒˆã‚·ã‚¹ãƒ†ãƒ å…¨ä½“ã§ãã®ã‚«ãƒ†ã‚´ãƒªãŒåˆ©ç”¨ã§ã
+るよã†ã«ãªã‚Šã¾ã™ã€‚互æ›æ€§ã®ã‚るツールã§ã‚ã‚Œã°ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’æ–°è¦ä½œæˆã€ã¾ãŸã¯ç·¨é›†ã™ã‚‹ç”»é¢ã«ã‚«ãƒ†ã‚´ãƒªè¨­å®šæ¬„ãŒè¡¨ç¤ºã•ã‚Œã‚‹ã§ã—ょã†ã€‚<br /><br />カテゴリã¯ã‚«ãƒ³ãƒžã§åŒºåˆ‡ã£ã¦åˆ—挙ã—ã¦ãã ã•ã„。',
+ 'categories:save:success' => 'サイトカテゴリをä¿å­˜ã—ã¾ã—ãŸã€‚',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.core.php b/mod/languages/languages/ja/ja.core.php
new file mode 100644
index 000000000..8e1ec6289
--- /dev/null
+++ b/mod/languages/languages/ja/ja.core.php
@@ -0,0 +1,661 @@
+<?php
+$ja = array (
+ 'item:site' => 'サイト',
+ 'login' => 'ログイン',
+ 'loginok' => 'ログインã—ã¾ã—ãŸã€‚',
+ 'loginerror' => 'ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æ‰¿èªæ‰‹ç¶šããŒå®Œäº†ã—ã¦ã„ãªã„ã‹ã€ã‚ãªãŸã®å…¥åŠ›ã«é–“é•ã„ãŒã‚ã‚‹ã‹ã€ä½•å›žã‚‚ログインã«å¤±æ•—ã—ãŸã›ã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 ã‚ãªãŸã®ãƒ­ã‚°ã‚¤ãƒ³æƒ…å ±ãŒæ­£ã—ã„ã‹ç¢ºèªã—ã¦ãã ã•ã„。',
+ 'logout' => 'ログアウト',
+ 'logoutok' => 'ログアウトã—ã¾ã—ãŸã€‚',
+ 'logouterror' => 'ログアウトã§ãã¾ã›ã‚“。もã†ä¸€åº¦è©¦ã—ã¦ãã ã•ã„。',
+ 'loggedinrequired' => 'ã“ã®ãƒšãƒ¼ã‚¸ã‚’見るã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ãŒå¿…è¦ã§ã™ã€‚',
+ 'adminrequired' => 'ã“ã®ãƒšãƒ¼ã‚¸ã‚’見るã«ã¯ç®¡ç†è€…権é™ãŒå¿…è¦ã§ã™ã€‚',
+ 'exception:title' => 'よã†ã“ãã€ã“ã®ã‚µã‚¤ãƒˆã¸ï¼',
+ 'actionundefined' => 'è¦æ±‚ã•ã‚ŒãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³(%s) ã¯ã“ã®ã‚·ã‚¹ãƒ†ãƒ ã§å®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。',
+ 'actionloggedout' => 'ログインã—ãªã‘ã‚Œã°ãã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã¯å®Ÿè¡Œã§ãã¾ã›ã‚“。',
+ 'SecurityException:Codeblock' => '特権コードブロックã®å®Ÿè¡ŒãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚',
+ 'DatabaseException:WrongCredentials' => 'Elggã¯å…¥åŠ›ã•ã‚ŒãŸæƒ…å ±ã§ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«æŽ¥ç¶šã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚',
+ 'DatabaseException:NoConnect' => 'Elggã¯æ¬¡ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ \'%s\' ã‚’é¸æŠžã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 データベースãŒä½œæˆæ¸ˆã¿ã§ãã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãる権é™ã‚’ã‚‚ã£ã¦ã„ã‚‹ã‹ç¢ºèªã—ã¦ãã ã•ã„。',
+ 'SecurityException:FunctionDenied' => '特殊機能 \'%s\' ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚',
+ 'DatabaseException:DBSetupIssues' => 'ã„ãã¤ã‹ã®å•é¡ŒãŒã‚ã‚Šã¾ã™: ',
+ 'DatabaseException:ScriptNotFound' => 'Elggã«è¦æ±‚ã•ã‚ŒãŸ %s ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚¹ã‚¯ãƒªãƒ—トãŒè¦‹å½“ãŸã‚Šã¾ã›ã‚“。',
+ 'IOException:FailedToLoadGUID' => 'GUID:%d ã®æ–°ã—ã„ %s ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚',
+ 'InvalidParameterException:NonElggObject' => 'ElggObjectã§ã¯ãªã„オブジェクトãŒElggObject counstructorã«æ¸¡ã•ã‚Œã¾ã—ãŸï¼',
+ 'InvalidParameterException:UnrecognisedValue' => 'Constuctorã«ä¸æ˜Žã®å€¤ãŒæ¸¡ã•ã‚Œã¾ã—ãŸã€‚',
+ 'InvalidClassException:NotValidElggStar' => 'GUID:%d ã¯æœ‰åŠ¹ãª %s ã§ã¯ã‚ã‚Šã¾ã›ã‚“。',
+ 'PluginException:MisconfiguredPlugin' => '%s ãŒElggプラグインã¨ã—ã¦å‹•ä½œã§ãã¾ã›ã‚“。Elgg wikiã‚„ä»–ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ä¿®æ­£ã—ã¦ãã ã•ã„。',
+ 'InvalidParameterException:NonElggUser' => 'ElggUserã§ã¯ãªã„オブジェクトãŒElggUser counstructorã«æ¸¡ã•ã‚Œã¾ã—ãŸï¼',
+ 'InvalidParameterException:NonElggSite' => 'ElggSiteã§ã¯ãªã„オブジェクトãŒElggSite counstructorã«æ¸¡ã•ã‚Œã¾ã—ãŸï¼',
+ 'InvalidParameterException:NonElggGroup' => 'ElggGroupã§ã¯ãªã„オブジェクトãŒElggGroup counstructorã«æ¸¡ã•ã‚Œã¾ã—ãŸï¼',
+ 'IOException:UnableToSaveNew' => 'æ–°ã—ã„ %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' => 'キャッシュã®ãƒ‘スãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。',
+ 'IOException:NotDirectory' => '%s ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。',
+ 'IOException:BaseEntitySaveFailed' => 'Unable to save new object\'s base entity information!',
+ 'InvalidParameterException:UnexpectedODDClass' => 'import() passed an unexpected ODD class',
+ 'InvalidParameterException:EntityTypeNotSet' => 'Entity タイプをセットã—ã¦ãã ã•ã„。',
+ 'ClassException:ClassnameNotClass' => '%s 㯠%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' => '次ã®è¦ç´ ã‚’インãƒãƒ¼ãƒˆã§ãã¾ã›ã‚“。: %d',
+ 'ImportException:ProblemSaving' => 'ä¿å­˜ä¸­ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚: %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' => 'ファイル %s (%d) ã¯ã‚ªãƒ¼ãƒŠãƒ¼ãŒä¸æ˜Žã§ã™ã€‚',
+ 'IOException:CouldNotMake' => '%s ãŒä½œæˆã§ãã¾ã›ã‚“。',
+ 'IOException:MissingFileName' => 'ファイルを開ãå‰ã«åå‰ã‚’特定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚',
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => 'Filestore not found or class not saved with file!',
+ '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.',
+ '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.',
+ '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_path\' ãŒæœªè¨­å®šã§ã™ã€‚',
+ 'APIException:NotGetOrPost' => 'リクエストメソッド㯠GET ã‹ 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!',
+ 'memcache:notinstalled' => 'PHP memcache module not installed, you must install php5-memcache',
+ 'memcache:noservers' => 'No memcache servers defined, please populate the $CONFIG->memcache_servers variable',
+ 'memcache:versiontoolow' => 'Memcache needs at least version %s to run, you are running %s',
+ 'memcache:noaddserver' => 'Multiple server support disabled, you may need to upgrade your PECL memcache library',
+ 'deprecatedfunction' => 'Warning: This code uses the deprecated function \'%s\' and is not compatible with this version of Elgg',
+ 'pageownerunavailable' => '警告: ページオーナー %d を許å¯ã§ãã¾ã›ã‚“。',
+ 'system.api.list' => 'システムã‹ã‚‰å‘¼ã³å‡ºã•ã‚Œã‚‹ã™ã¹ã¦ã®æœ‰åŠ¹ãªAPIリスト',
+ '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',
+ 'name' => 'æ°å',
+ 'email' => 'Eメール',
+ 'username' => 'ユーザーå',
+ 'password' => 'パスワード',
+ 'passwordagain' => 'パスワード(確èªï¼‰',
+ 'admin_option' => 'ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ç®¡ç†è€…権é™ã‚’与ãˆã‚‹',
+ 'PRIVATE' => 'éžå…¬é–‹',
+ 'LOGGED_IN' => 'ログインユーザーã®ã¿',
+ 'PUBLIC' => 'ã™ã¹ã¦ã«å…¬é–‹',
+ 'access:friends:label' => 'å‹é”ã®ã¿',
+ 'access' => '公開範囲',
+ 'dashboard' => 'ダッシュボード',
+ 'dashboard:nowidgets' => 'ダッシュボードã¯ã“ã®ã‚µã‚¤ãƒˆã®å…¥ã‚Šå£ã§ã™ã€‚「ã“ã®ãƒšãƒ¼ã‚¸ã®ç·¨é›†ã€ã‚’クリックã™ã‚‹ã¨ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆã®è¿½åŠ ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æ›´æ–°ã€ã‚ãªãŸã®å…¬é–‹æƒ…å ±ã®ç·¨é›†ãŒã§ãã¾ã™ã€‚',
+ 'widgets:add' => 'ウィジェットã®è¿½åŠ ',
+ 'widgets:add:description' => 'ページã«è¿½åŠ ã—ãŸã„機能をå³ã®<b>ウィジェット一覧</b>ã‹ã‚‰é¸ã‚“ã§ãã ã•ã„。 é¸ã‚“ã æ©Ÿèƒ½ã‚’ウィジェット領域ã«ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦é…ç½®ã™ã‚‹ã¨ã€ãã®å ´æ‰€ã«ã‚¦ã‚£ã‚¸ã‚§ãƒƒãƒˆãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ ウィジェットを削除ã—ãŸã„å ´åˆã¯ãƒ‰ãƒ©ãƒƒã‚°ã—ã¦<b>ウィジェット一覧</b>ã«æˆ»ã—ã¦ä¸‹ã•ã„。',
+ 'widgets:position:fixed' => '(修正ã—ãŸä½ç½®ï¼‰',
+ 'widgets' => 'ウィジェット',
+ 'widget' => 'ウィジェット',
+ 'item:object:widget' => 'ウィジェット',
+ 'widgets:save:success' => 'ウィジェットをä¿å­˜ã—ã¾ã—ãŸã€‚',
+ 'widgets:save:failure' => 'ウィジェットをä¿å­˜ã§ãã¾ã›ã‚“。',
+ 'group' => 'グループ',
+ 'item:group' => 'グループ',
+ 'user' => 'ユーザー',
+ 'item:user' => 'ユーザー',
+ 'friends' => 'å‹é”',
+ 'friends:yours' => 'ã‚ãªãŸã®å‹é”',
+ 'friends:owned' => '%s ã®å‹é”',
+ 'friend:add' => 'å‹é”登録ã™ã‚‹',
+ 'friend:remove' => 'å‹é”登録を解除ã™ã‚‹',
+ 'friends:add:successful' => '%s ã‚’å‹é”登録ã—ã¾ã—ãŸã€‚',
+ 'friends:add:failure' => '%s ã‚’å‹é”登録ã§ãã¾ã›ã‚“。',
+ 'friends:remove:successful' => '%s ã¨ã®å‹é”登録を解除ã—ã¾ã—ãŸã€‚',
+ 'friends:remove:failure' => '%s ã¨ã®å‹é”登録を解除ã§ãã¾ã›ã‚“。',
+ 'friends:none' => 'ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã¾ã èª°ã‚‚å‹é”登録ã—ã¦ã„ã¾ã›ã‚“。',
+ 'friends:none:you' => 'ã‚ãªãŸã¯ã¾ã èª°ã‚‚å‹ã ã¡ç™»éŒ²ã—ã¦ã„ã¾ã›ã‚“ï¼ ã„ã‚ã„ã‚ãªäººã‚’探ã—ã¦ã¿ã¾ã—ょã†ã€‚',
+ 'friends:none:found' => 'å‹é”ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。',
+ 'friends:of:none' => '誰もã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å‹é”ã¨ã—ã¦ç™»éŒ²ã—ã¦ã„ã¾ã›ã‚“。',
+ 'friends:of:none:you' => '誰もã‚ãªãŸã‚’å‹é”登録ã—ã¦ã„ã¾ã›ã‚“。ブログやWireを書ã„ãŸã‚Šã€ãƒ—ロフィールã«ã‚ãªãŸã®ã“ã¨ã‚’ã„ã‚ã„ã‚書ã„ã¦ã¿ã¾ã—ょã†ã€‚',
+ 'friends:of:owned' => '%sã‚’å‹é”登録ã—ã¦ã„るメンãƒãƒ¼',
+ 'friends:num_display' => '一覧表示数',
+ 'friends:icon_size' => 'アイコンã®ã‚µã‚¤ã‚º',
+ 'friends:tiny' => '極å°',
+ 'friends:small' => 'å°',
+ 'friends:of' => 'ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å‹é”登録ã—ã¦ã„るメンãƒãƒ¼',
+ 'friends:collections' => 'リスト',
+ 'friends:collections:add' => 'æ–°è¦ãƒªã‚¹ãƒˆã®ä½œæˆ',
+ 'friends:addfriends' => 'å‹é”ã®ç™»éŒ²',
+ 'friends:collectionname' => 'リストå',
+ 'friends:collectionfriends' => 'リストã«ç™»éŒ²ã•ã‚ŒãŸå‹é”',
+ 'friends:collectionedit' => 'リストã®ç·¨é›†',
+ 'friends:nocollections' => 'リストãŒã‚ã‚Šã¾ã›ã‚“。',
+ 'friends:collectiondeleted' => 'リストを削除ã—ã¾ã—ãŸã€‚',
+ 'friends:collectiondeletefailed' => 'リストãŒå‰Šé™¤ã§ãã¾ã›ã‚“。権é™ãŒãªã„ã‹ã€ä½•ã‚‰ã‹ã®å•é¡ŒãŒç™ºç”Ÿã—ã¦ã„ã¾ã™ã€‚',
+ 'friends:collectionadded' => 'リストを作æˆã—ã¾ã—ãŸã€‚',
+ 'friends:nocollectionname' => 'リストã®åå‰ã‚’入力ã—ã¦ãã ã•ã„。',
+ 'friends:collections:members' => 'リストã®ãƒ¡ãƒ³ãƒãƒ¼',
+ 'friends:collections:edit' => 'リストã®ç·¨é›†',
+ 'friendspicker:chararray' => '',
+ 'feed:rss' => 'フィードをå–å¾—',
+ 'link:view' => 'リンク先をã¿ã‚‹',
+ 'river' => 'River',
+ 'river:noaccess' => 'ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’見る権é™ãŒã‚ã‚Šã¾ã›ã‚“。',
+ 'river:posted:generic' => '%s ãŒæŠ•ç¨¿ã•ã‚Œã¾ã—ãŸã€‚',
+ 'riveritem:single:user' => 'ユーザー',
+ 'riveritem:plural:user' => 'ユーザー',
+ 'plugins:settings:save:ok' => 'プラグイン %s ã®è¨­å®šã‚’ä¿å­˜ã—ã¾ã—ãŸã€‚',
+ 'plugins:settings:save:fail' => 'プラグイン %s ã®è¨­å®šãŒä¿å­˜ã§ãã¾ã›ã‚“。',
+ 'plugins:usersettings:save:ok' => 'プラグイン %s ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼è¨­å®šã‚’ä¿å­˜ã—ã¾ã—ãŸã€‚',
+ 'plugins:usersettings:save:fail' => 'プラグイン %s ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼è¨­å®šãŒä¿å­˜ã§ãã¾ã›ã‚“。',
+ 'admin:plugins:label:version' => 'ãƒãƒ¼ã‚¸ãƒ§ãƒ³',
+ 'item:object:plugin' => 'プラグインã®è¨­å®š',
+ 'notifications:usersettings' => '通知設定',
+ 'notifications:methods' => '通知ã®æ–¹æ³•ã‚’é¸ã‚“ã§ä¸‹ã•ã„。',
+ 'notifications:usersettings:save:ok' => '通知設定をä¿å­˜ã—ã¾ã—ãŸã€‚',
+ 'notifications:usersettings:save:fail' => '通知設定ã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚',
+ 'user.notification.get' => '特定ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¸ã®é€šçŸ¥ã®è¨­å®šã‚’è¿”ã—ã¾ã™ã€‚',
+ 'user.notification.set' => '特定ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¸ã®é€šçŸ¥ã«ã¤ã„ã¦è¨­å®šã—ã¦ãã ã•ã„。',
+ 'search' => '検索',
+ 'searchtitle' => '検索: %s',
+ 'users:searchtitle' => 'ユーザー検索: %s',
+ 'groups:searchtitle' => 'グループ検索',
+ 'advancedsearchtitle' => '%s ã¨ä¸€è‡´ã—ãŸçµæžœã¯ %s',
+ 'notfound' => '検索çµæžœãªã—',
+ 'next' => '次ã¸',
+ 'previous' => 'å‰ã¸',
+ 'viewtype:change' => '表示ã®å¤‰æ›´',
+ 'viewtype:list' => '一覧',
+ 'viewtype:gallery' => 'ギャラリ',
+ 'tag:search:startblurb' => 'ã‚¿ã‚°ã«ä¸€è‡´ã—ãŸã®ã¯ \'%s\':',
+ 'user:search:startblurb' => '一致ã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ \'%s\':',
+ 'user:search:finishblurb' => 'ã‚‚ã£ã¨ã¿ã‚‹',
+ 'group:search:startblurb' => '一致ã—ãŸã‚°ãƒ«ãƒ¼ãƒ—㯠\'%s\':',
+ 'group:search:finishblurb' => 'ã‚‚ã£ã¨ã¿ã‚‹',
+ 'search:go' => 'Go',
+ 'userpicker:only_friends' => 'å‹é”ã®ã¿',
+ 'account' => 'アカウント',
+ 'settings' => '設定',
+ 'tools' => 'ツール',
+ 'register' => 'æ–°è¦ç™»éŒ²',
+ 'registerok' => 'ã‚ãªãŸã¯ %s ã¨ã—ã¦ç™»éŒ²ã•ã‚Œã¾ã—ãŸã€‚',
+ 'registerbad' => '登録ãŒã§ãã¾ã›ã‚“。ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒã™ã§ã«åˆ©ç”¨ã•ã‚Œã¦ã„ã‚‹ã‹ã€ãƒ‘スワードãŒä¸€è‡´ã—ãªã‹ã£ãŸã‹ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードãŒçŸ­ã™ãŽãŸå¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚',
+ 'registerdisabled' => 'システム管ç†è€…ãŒæ–°è¦ç™»éŒ²ã‚’ç¦æ­¢ã—ã¦ã„ã¾ã™ã€‚',
+ 'registration:notemail' => '無効ãªEメールアドレスãŒå…¥åŠ›ã•ã‚ŒãŸã‚ˆã†ã§ã™ã€‚',
+ 'registration:userexists' => 'ãã®ãƒ¦ãƒ¼ã‚¶åã¯ã™ã§ã«ä½¿ã‚ã‚Œã¦ã„ã¾ã™ã€‚',
+ 'registration:usernametooshort' => 'ユーザーåã¯ã‚¢ãƒ«ãƒ•ã‚¡ãƒ™ãƒƒãƒˆã§4文字以上ã«ã—ã¦ãã ã•ã„。',
+ 'registration:passwordtooshort' => 'パスワードã¯ã‚¢ãƒ«ãƒ•ã‚¡ãƒ™ãƒƒãƒˆã§6文字以上ã«ã—ã¦ãã ã•ã„。',
+ 'registration:dupeemail' => 'ãã®Eメールアドレスã¯ã™ã§ã«åˆ©ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚',
+ 'registration:invalidchars' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã«åˆ©ç”¨ã§ããªã„文字ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚',
+ 'registration:emailnotvalid' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€ãã®Eメールアドレスã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。',
+ 'registration:passwordnotvalid' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€ãã®ãƒ‘スワードã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。',
+ 'registration:usernamenotvalid' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“ãŒã€ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。',
+ 'adduser' => 'ユーザー登録',
+ 'adduser:ok' => 'æ–°ã—ã„ユーザーを登録ã—ã¾ã—ãŸã€‚',
+ 'adduser:bad' => 'æ–°ã—ã„ユーザーãŒç™»éŒ²ã§ãã¾ã›ã‚“。',
+ 'user:set:name' => 'アカウント編集',
+ 'user:name:label' => 'ãƒãƒ³ãƒ‰ãƒ«å',
+ 'user:name:success' => 'ãƒãƒ³ãƒ‰ãƒ«åを変更ã—ã¾ã—ãŸã€‚',
+ 'user:name:fail' => 'ãƒãƒ³ãƒ‰ãƒ«åãŒå¤‰æ›´ã§ãã¾ã›ã‚“。ãƒãƒ³ãƒ‰ãƒ«åãŒé•·ã™ãŽãŸå¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚',
+ 'user:set:password' => 'パスワード',
+ 'user:password:label' => 'æ–°ã—ã„パスワード',
+ 'user:password2:label' => 'æ–°ã—ã„パスワード(確èªï¼‰',
+ 'user:password:success' => 'パスワードを変更ã—ã¾ã—ãŸã€‚',
+ 'user:password:fail' => 'パスワードãŒå¤‰æ›´ã§ãã¾ã›ã‚“。',
+ 'user:password:fail:notsame' => 'パスワードãŒä¸€è‡´ã—ã¾ã›ã‚“。',
+ 'user:password:fail:tooshort' => 'パスワードãŒçŸ­ã„ãŸã‚登録ã§ãã¾ã›ã‚“。',
+ 'user:resetpassword:unknown_user' => 'ユーザーãŒè¦‹å½“ãŸã‚Šã¾ã›ã‚“。',
+ 'user:resetpassword:reset_password_confirm' => '登録ã•ã‚ŒãŸEメールアドレスã«æ–°ã—ã„パスワードをé€ä¿¡ã—ã¾ã—ãŸã€‚',
+ 'user:set:language' => '言語設定',
+ 'user:language:label' => '利用ã™ã‚‹è¨€èªž',
+ 'user:language:success' => '利用ã™ã‚‹è¨€èªžè¨­å®šã‚’æ›´æ–°ã—ã¾ã—ãŸã€‚',
+ 'user:language:fail' => '言語設定ãŒä¿å­˜ã§ãã¾ã›ã‚“。',
+ 'user:username:notfound' => 'ユーザーå %s ãŒè¦‹å½“ãŸã‚Šã¾ã›ã‚“。',
+ 'user:password:lost' => 'パスワードを忘れãŸå ´åˆ',
+ 'user:password:resetreq:success' => 'æ–°ã—ã„パスワード発行ã®æ‰‹ç¶šãをスタートã—ã¾ã—ãŸã€‚ã”登録ã®Eメールã‚ã¦ã«é€ä¿¡ã•ã‚Œã¾ã—ãŸã€‚',
+ 'user:password:resetreq:fail' => 'æ–°ã—ã„パスワード発行ã®æ‰‹ç¶šãã«å¤±æ•—ã—ã¾ã—ãŸã€‚',
+ 'user:password:text' => 'æ–°ã—ã„パスワードを発行ã™ã‚‹å ´åˆã¯ã€ä¸‹è¨˜ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼åを入力ã—é€ä¿¡ã—ã¦ãã ã•ã„。ã“ã¡ã‚‰ã‚ˆã‚ŠEメールãŒå±Šãã¾ã™ã€‚ãã®æœ¬æ–‡ã«æœ¬äººç¢ºèªç”¨ã®ãƒªãƒ³ã‚¯ãŒæ›¸ã‹ã‚Œã¦ã„ã‚‹ã®ã§ãれをクリックã—ã¦ä¸‹ã•ã„。ãã®å¾Œã€ãƒ‘スワードãŒå±Šãã¾ã™ã€‚',
+ 'user:persistent' => '次回入力をçœç•¥',
+ 'admin:configuration:success' => '設定をä¿å­˜ã—ã¾ã—ãŸã€‚',
+ 'admin:configuration:fail' => '設定ãŒä¿å­˜ã§ãã¾ã›ã‚“。',
+ 'admin' => '管ç†',
+ 'admin:description' => 'ã“ã®ç®¡ç†ãƒ‘ãƒãƒ«ã§ã¯ã€æ§˜ã€…ãªæ©Ÿèƒ½ã«ã¤ã„ã¦ã®è¨­å®šãƒ»ç®¡ç†ãŒã§ãã¾ã™ã€‚開始ã™ã‚‹ã«ã¯ä»¥ä¸‹ã®ã‚ªãƒ—ションをé¸æŠžã—ã¦ãã ã•ã„。',
+ 'admin:site:description' => 'ã“ã®ç®¡ç†ãƒ‘ãƒãƒ«ã§ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸã‚µã‚¤ãƒˆå…¨ä½“ã«é–¢ã‚る設定を管ç†ã§ãã¾ã™ã€‚',
+ 'admin:site:opt:linktext' => 'サイトã®è¨­å®š..',
+ 'admin:site:access:warning' => '公開範囲ã®è¨­å®šã§ã™ã€‚ã“ã‚Œã‹ã‚‰ä½œæˆã™ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ã®ã¿é©ç”¨ã•ã‚Œã¾ã™ã€‚',
+ 'admin:plugins' => 'ツール管ç†',
+ 'admin:plugins:description' => 'ã“ã®ç®¡ç†ãƒ‘ãƒãƒ«ã§ã¯ã€ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸãƒ„ールã®æœ‰åŠ¹ãƒ»ç„¡åŠ¹åŒ–ã‚„ãã‚Œãžã‚Œã®è¨­å®šã‚’è¡Œã„ã¾ã™ã€‚',
+ 'admin:plugins:opt:linktext' => 'ツールã®è¨­å®š...',
+ 'admin:plugins:opt:description' => 'インストール済ã¿ãƒ„ールã®è¨­å®š',
+ 'admin:plugins:label:author' => '開発者',
+ 'admin:plugins:label:copyright' => 'コピーライト',
+ 'admin:plugins:label:licence' => 'ライセンス',
+ 'admin:plugins:label:website' => 'URL',
+ 'admin:plugins:label:moreinfo' => 'ã‚‚ã£ã¨ã¿ã‚‹',
+ 'admin:statistics' => 'サイト統計情報',
+ 'admin:statistics:description' => 'ã“ã‚Œã¯ã‚ãªãŸã®ã‚µã‚¤ãƒˆã®çµ±è¨ˆæƒ…å ±ã§ã™ã€‚å°‚é–€ã®ç®¡ç†æ©Ÿèƒ½ã‚’ã”利用ã®å ´åˆã¯ã‚ˆã‚Šè©³ç´°ãªçµ±è¨ˆæƒ…報利用ã§ãã¾ã™ã€‚',
+ 'admin:statistics:opt:description' => 'サイト上ã®ãƒ¦ãƒ¼ã‚¶ã¨ã‚ªãƒ–ジェクトã«é–¢ã™ã‚‹çµ±è¨ˆæƒ…報を表示ã—ã¾ã™ã€‚',
+ 'admin:statistics:opt:linktext' => '統計情報をã¿ã‚‹...',
+ 'admin:statistics:label:basic' => 'サイト統計情報(概è¦ï¼‰',
+ 'admin:statistics:label:numentities' => 'サイト統計情報(数値)',
+ 'admin:statistics:label:numusers' => 'ユーザー数',
+ 'admin:statistics:label:numonline' => 'ログイン中ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ•°',
+ 'admin:statistics:label:onlineusers' => 'ログイン中ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼',
+ 'admin:statistics:label:version' => 'Elgg ãƒãƒ¼ã‚¸ãƒ§ãƒ³',
+ 'admin:statistics:label:version:release' => 'リリース',
+ 'admin:statistics:label:version:version' => 'ãƒãƒ¼ã‚¸ãƒ§ãƒ³',
+ 'admin:user:label:search' => 'ユーザー検索',
+ 'admin:user:label:searchbutton' => '検索',
+ 'admin:user:ban:no' => 'ユーザーã®æŠ•ç¨¿ã‚’ç¦æ­¢ã§ãã¾ã›ã‚“。',
+ 'admin:user:ban:yes' => 'ユーザーã®æŠ•ç¨¿ã‚’ç¦æ­¢',
+ 'admin:user:unban:no' => 'ユーザーã®æŠ•ç¨¿ç¦æ­¢ã‚’解除ã§ãã¾ã›ã‚“。',
+ 'admin:user:unban:yes' => 'ユーザーã®æŠ•ç¨¿ç¦æ­¢ã‚’解除',
+ 'admin:user:delete:no' => 'ユーザーãŒå‰Šé™¤ã§ãã¾ã›ã‚“。',
+ 'admin:user:delete:yes' => 'ユーザーã®å‰Šé™¤',
+ 'admin:user:resetpassword:yes' => 'パスワードをリセットã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ã«é€šçŸ¥ã—ã¾ã™ã€‚',
+ 'admin:user:resetpassword:no' => 'パスワードãŒãƒªã‚»ãƒƒãƒˆã§ãã¾ã›ã‚“',
+ 'admin:user:makeadmin:yes' => 'ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ç®¡ç†è€…ã§ã™ã€‚',
+ 'admin:user:makeadmin:no' => 'ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ç®¡ç†è€…権é™ã‚’与ãˆã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。',
+ 'admin:user:removeadmin:yes' => 'ユーザーã¯ã‚‚ã†ç®¡ç†è€…ã§ã¯ã‚ã‚Šã¾ã›ã‚“。',
+ 'admin:user:removeadmin:no' => 'ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ç®¡ç†è€…権é™ãŒè§£é™¤ã§ãã¾ã›ã‚“。',
+ 'usersettings:description' => 'ユーザー設定パãƒãƒ«ã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ç®¡ç†ã‹ã‚‰ãƒ—ラグイン管ç†ã¨ã„ã£ãŸã™ã¹ã¦ã®è¨­å®šã‚’è¡Œã†ã“ã¨ãŒã§ãã¾ã™ã€‚以下ã®ã‚ªãƒ—ションをé¸æŠžã—ã¦ãã ã•ã„。',
+ 'usersettings:statistics' => 'ã‚ãªãŸã®æƒ…å ±',
+ 'usersettings:statistics:opt:description' => 'サイト上ã®ãƒ¦ãƒ¼ã‚¶ã¨ã‚ªãƒ–ジェクトã«é–¢ã™ã‚‹çµ±è¨ˆæƒ…報を表示ã—ã¾ã™ã€‚',
+ 'usersettings:statistics:opt:linktext' => '統計情報',
+ 'usersettings:user' => 'ã‚ãªãŸã®è¨­å®š',
+ 'usersettings:user:opt:description' => 'ユーザー設定ã®ç®¡ç†ã‚’è¡Œã„ã¾ã™ã€‚',
+ 'usersettings:user:opt:linktext' => '設定ã®å¤‰æ›´',
+ 'usersettings:plugins' => 'ツール',
+ 'usersettings:plugins:opt:description' => '利用å¯èƒ½ãªãƒ„ールã®è¨­å®š',
+ 'usersettings:plugins:opt:linktext' => 'ツールã®è¨­å®š',
+ 'usersettings:plugins:description' => 'ã“ã®ãƒ‘ãƒãƒ«ã§ã¯ã€åˆ©ç”¨å¯èƒ½ãªãƒ„ールã«é–¢ã™ã‚‹è¨­å®šãŒã§ãã¾ã™ã€‚',
+ 'usersettings:statistics:label:numentities' => '数値情報',
+ 'usersettings:statistics:yourdetails' => '詳細',
+ 'usersettings:statistics:label:name' => 'æ°å',
+ 'usersettings:statistics:label:email' => 'Eメール',
+ 'usersettings:statistics:label:membersince' => '利用開始時期',
+ 'usersettings:statistics:label:lastlogin' => 'å‰å›žã®ãƒ­ã‚°ã‚¤ãƒ³',
+ 'save' => 'ä¿å­˜',
+ 'publish' => '公開',
+ 'cancel' => 'キャンセル',
+ 'saving' => 'ä¿å­˜ä¸­...',
+ 'update' => 'æ›´æ–°',
+ 'edit' => '編集',
+ 'delete' => '削除',
+ 'accept' => '承èªã™ã‚‹',
+ 'load' => '読込',
+ 'upload' => 'アップロード',
+ 'ban' => '投稿ç¦æ­¢',
+ 'unban' => '投稿ç¦æ­¢è§£é™¤',
+ 'enable' => '有効ã«ã™ã‚‹',
+ 'disable' => '無効ã«ã™ã‚‹',
+ 'request' => 'リクエスト',
+ 'complete' => '完了',
+ 'open' => 'é–‹ã',
+ 'close' => 'é–‰ã˜ã‚‹',
+ 'reply' => '返信',
+ 'more' => 'ã‚‚ã£ã¨ã¿ã‚‹',
+ 'comments' => 'コメント',
+ 'import' => 'インãƒãƒ¼ãƒˆ',
+ 'export' => 'エクスãƒãƒ¼ãƒˆ',
+ 'untitled' => 'タイトルãªã—',
+ 'help' => 'ヘルプ',
+ 'send' => 'é€ä¿¡',
+ 'post' => '投稿',
+ 'submit' => 'é€ä¿¡',
+ 'site' => 'サイト',
+ 'up' => '上ã¸',
+ 'down' => '下ã¸',
+ 'top' => '最åˆ',
+ 'bottom' => '最後',
+ 'invite' => '招待ã™ã‚‹',
+ 'resetpassword' => 'パスワードã®ãƒªã‚»ãƒƒãƒˆ',
+ 'makeadmin' => '管ç†è€…権é™ã‚’与ãˆã‚‹',
+ 'removeadmin' => '管ç†è€…権é™ã‚’外ã™',
+ 'option:yes' => 'ã¯ã„',
+ 'option:no' => 'ã„ã„ãˆ',
+ 'unknown' => 'アンノウン',
+ 'active' => 'アクティブ',
+ 'total' => 'ã™ã¹ã¦',
+ 'learnmore' => '詳細ã¯ã“ã¡ã‚‰',
+ 'content' => 'コンテンツ',
+ 'content:latest' => '最近ã®æ“作',
+ 'content:latest:blurb' => 'サイト内ã®æœ€æ–°ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を表示',
+ 'link:text' => 'リンク',
+ 'question:areyousure' => 'よã‚ã—ã„ã§ã™ã‹ï¼Ÿ',
+ 'title' => 'タイトル',
+ 'description' => '概è¦',
+ 'tags' => 'ã‚¿ã‚°',
+ 'spotlight' => 'スãƒãƒƒãƒˆãƒ©ã‚¤ãƒˆ',
+ 'all' => 'å…¨ã¦',
+ 'by' => 'by',
+ 'annotations' => '注釈',
+ 'relationships' => '関連',
+ 'metadata' => 'メタデータ',
+ 'deleteconfirm' => 'ã“ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’削除ã—ã¦ã‚ˆã„ã§ã™ã‹ï¼Ÿ',
+ 'fileexists' => 'ファイルã¯ã™ã§ã«ã‚¢ãƒƒãƒ—ロードã•ã‚Œã¦ã„ã¾ã™ã€‚ç½®ãæ›ãˆã‚‹ã¨ãã¯ä»¥ä¸‹ã‹ã‚‰é¸æŠžã—ã¦ãã ã•ã„。',
+ 'useradd:subject' => 'ユーザーãŒä½œæˆã•ã‚Œã¾ã—ãŸã€‚',
+ 'useradd:body' => '
+%s ã•ã‚“,
+
+%s ã«ã‚ãªãŸã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒç™»éŒ²ã•ã‚Œã¾ã—ãŸ. ã“ã¡ã‚‰ã‹ã‚‰ã”確èªãã ã•ã„:
+
+%s
+
+ログインã®ãŸã‚ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ãƒ‘スワードã¯æ¬¡ã®é€šã‚Šã§ã™ã€‚:
+
+ユーザーå: %s
+パスワード: %s
+
+上記パスワードã¯æš«å®šãƒ‘スワードã§ã™ã€‚ログイン後ã«, ç›´ã¡ã«ã”自身ã§ãƒ‘スワードを変更ã™ã‚‹ã“ã¨ã‚’ãŠã™ã™ã‚ã—ã¾ã™ã€‚
+
+',
+ 'systemmessages:dismiss' => 'クリックã™ã‚‹ã¨æ¶ˆãˆã¾ã™ã€‚',
+ 'importsuccess' => 'データã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆã«æˆåŠŸã—ã¾ã—ãŸã€‚',
+ 'importfail' => 'OpenDDデータ・インãƒãƒ¼ãƒˆå¤±æ•—',
+ 'friendlytime:justnow' => 'Now!',
+ 'friendlytime:minutes' => '%s 分å‰',
+ 'friendlytime:minutes:singular' => '1分å‰',
+ 'friendlytime:hours' => '%s 時間å‰',
+ 'friendlytime:hours:singular' => '1時間å‰',
+ 'friendlytime:days' => '%s æ—¥å‰',
+ 'friendlytime:days:singular' => '機能',
+ 'friendlytime:date_format' => 'Y年m月d日',
+ 'date:month:01' => '1月 %s',
+ 'date:month:02' => '2月 %s',
+ 'date:month:03' => '3月 %s',
+ 'date:month:04' => '4月 %s',
+ 'date:month:05' => '5月 %s',
+ 'date:month:06' => '6月 %s',
+ 'date:month:07' => '7月 %s',
+ 'date:month:08' => '8月 %s',
+ 'date:month:09' => '9月 %s',
+ 'date:month:10' => '10月 %s',
+ 'date:month:11' => '11月 %s',
+ 'date:month:12' => '12月 %s',
+ 'installation:sitename' => 'サイトå (例ãˆã° "ç§ã®ã‚½ãƒ¼ã‚·ãƒ£ãƒ«ãƒ»ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒ»ã‚µã‚¤ãƒˆ")',
+ 'installation:sitedescription' => 'ã‚µã‚¤ãƒˆæ¦‚è¦ (必須入力項目ã§ã¯ã‚ã‚Šã¾ã›ã‚“)',
+ 'installation:wwwroot' => 'サイトã®URL(末尾ã«ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ãŒç¶šã)',
+ 'installation:path' => 'サイトルートã®ãƒ•ãƒ«ãƒ‘ス(末尾ã«ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ãŒç¶šã)',
+ 'installation:dataroot' => 'アップロードã—ãŸãƒ•ã‚¡ã‚¤ãƒ«ã‚’ä¿å­˜ã™ã‚‹ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã®ãƒ•ãƒ«ãƒ‘ス(末尾ã«ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ãŒç¶šã)',
+ 'installation:dataroot:warning' => '手動ã§ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã‚’作æˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ ã‚ãªãŸãŒElggをインストールã—ãŸãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¨ã¯åˆ¥ã®ä½ç½®ã«ä½œæˆã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚',
+ 'installation:sitepermissions' => 'デフォルトã®å…¬é–‹ç¯„囲',
+ 'installation:language' => 'デフォルトã®è¨€èªž',
+ 'installation:debug' => 'デãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã¯ã€éšœå®³ã®è¨ºæ–­ã«ç”¨ã„ã‚‹ã“ã¨ãŒã§ãã‚‹ã€ã‚ˆã‚Šå¤šãã®æƒ…報をもãŸã‚‰ã—ã¾ã™ã€‚ ã—ã‹ã—ãªãŒã‚‰ãã‚Œã¯ã€ã‚·ã‚¹ãƒ†ãƒ ã®åœæ­¢ãŒé…ããªã‚‹ã®ã§ã€å•é¡ŒãŒç™ºç”Ÿã—ãŸã¨ãã®ã¿åˆ©ç”¨ã™ã‚‹ã¹ãã§ã™ã€‚',
+ 'installation:debug:none' => 'デãƒãƒƒã‚°ãƒ¢ãƒ¼ãƒ‰ã‚’オフ(推奨)',
+ 'installation:debug:error' => 'é‡å¤§ãªã‚¨ãƒ©ãƒ¼ã®ã¿è¡¨ç¤º',
+ 'installation:debug:warning' => 'エラーã¨è­¦å‘Šã‚’表示',
+ 'installation:debug:notice' => 'ã™ã¹ã¦ã®ã‚¨ãƒ©ãƒ¼ã€è­¦å‘Šã€å‡ºåŠ›ã‚’ログã«è¨˜éŒ²',
+ 'installation:httpslogin' => 'ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ãƒ­ã‚°ã‚¤ãƒ³ãŒå¼·åˆ¶çš„ã«httpsã‚’é©ç”¨ã—ã¾ã™ã€‚å‰æã¨ã—ã¦Webサーãƒãƒ¼ãŒhttpsを利用ã§ãã‚‹ã“ã¨ã‚‚å¿…è¦ã§ã™ã€‚',
+ 'installation:httpslogin:label' => 'HTTPSログインを有効ã«ã™ã‚‹',
+ 'installation:view' => 'サイトテーマã®é¸æŠž',
+ 'installation:siteemail' => 'サイト管ç†è€…Eメールアドレス(システムã‹ã‚‰ã®Eメールé…ä¿¡ã‚’è¡Œã†éš›ã«åˆ©ç”¨ã™ã‚‹é€ä¿¡å…ƒã‚¢ãƒ‰ãƒ¬ã‚¹ã¨ãªã‚Šã¾ã™ï¼‰',
+ 'installation:disableapi' => 'RESTful APIã¯å¤–部アプリケーションãŒElggã®æ©Ÿèƒ½ã¨é€£æºã™ã‚‹éš›ã«åˆ©ç”¨ã§ãる柔軟ã§æ‹¡å¼µæ€§ã®ã‚ã‚‹APIã§ã™ã€‚',
+ 'installation:disableapi:label' => 'RESTful API を有効ã«ã™ã‚‹ã€‚',
+ 'installation:allow_user_default_access:description' => 'ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã€ãã‚Œãžã‚Œã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè‡ªåˆ†ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«å¯¾ã—ã¦å…¬é–‹ç¯„囲を設定ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚',
+ 'installation:allow_user_default_access:label' => 'ユーザーã«å…¬é–‹ç¯„囲ã®è¨­å®šã‚’許å¯',
+ 'installation:simplecache:description' => 'シンプル キャッシュã¯CSSã‚„JavaScriptã‚’å«ã‚ãŸé™çš„コンテンツファイルをキャッシュã™ã‚‹ã“ã¨ã«ã‚ˆã£ã¦ãƒ‘フォーマンスをå‘上ã•ã›ã¾ã™ã€‚通常ã¯ãƒã‚§ãƒƒã‚¯ã—ã¦ãŠãã¾ã—ょã†ã€‚',
+ 'installation:simplecache:label' => 'シンプルキャッシュを使ã†ï¼ˆæŽ¨å¥¨ï¼‰',
+ 'upgrading' => 'アップグレード中',
+ 'upgrade:db' => 'データベースをアップグレードã—ã¾ã—ãŸã€‚',
+ 'upgrade:core' => 'elggをアップグレードã—ã¾ã—ãŸã€‚',
+ 'welcome' => 'よã†ã“ã',
+ 'welcome:user' => 'よã†ã“ãã€%s',
+ 'email:settings' => 'Eメール設定',
+ 'email:address:label' => 'ã‚ãªãŸã®Eメールアドレス',
+ 'email:save:success' => 'æ–°ã—ã„メールアドレスをä¿å­˜ã—ã¾ã—ãŸã€‚承èªä½œæ¥­ã«é€²ã¿ã¾ã™ã€‚',
+ 'email:save:fail' => 'æ–°ã—ã„EメールアドレスãŒä¿å­˜ã§ãã¾ã›ã‚“。',
+ 'friend:newfriend:subject' => '%s ã¯ã‚ãªãŸã‚’å‹é”ã«ç™»éŒ²ã—ã¾ã—ãŸï¼',
+ 'friend:newfriend:body' => '%s ã¯ã‚ãªãŸã‚’å‹é”ã¨ã—ã¦ç™»éŒ²ã—ã¾ã—ãŸï¼
+
+プロファイルã¯ä¸‹è¨˜URLã§ç¢ºèªã§ãã¾ã™ã€‚
+
+%s
+
+(※) ã“ã®ãƒ¡ãƒ¼ãƒ«ã«ã¯è¿”ä¿¡ã—ãªã„ã§ãã ã•ã„。
+
+',
+ 'email:resetpassword:subject' => 'パスワードをリセットã—ã¾ã—ãŸ',
+ 'email:resetpassword:body' => '%s ã•ã‚“, ã“ã‚“ã«ã¡ã¯ã€‚
+
+ã‚ãªãŸã®ãƒ‘スワードã¯å†è¨­å®šã•ã‚Œã¾ã—ãŸ: %s
+',
+ 'email:resetreq:subject' => 'æ–°ã—ã„パスワードã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆ',
+ 'email:resetreq:body' => '%s ã•ã‚“ã€ã“ã‚“ã«ã¡ã¯,
+
+ã©ãªãŸã‹ (from the IP address %s) ãŒã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®æ–°ã—ã„パスワードã®ç™ºè¡Œã‚’求ã‚ã¦ã„ã¾ã™ã€‚
+
+ã‚ãªãŸè‡ªèº«ãŒãƒ‘スワードã®å†è¨­å®šã‚’リクエストã—ãŸã®ãªã‚‰ä¸‹è¨˜ãƒªãƒ³ã‚¯ã‚’クリックã™ã‚Œã°ãƒ‘スワードをå†è¨­å®šã§ãã¾ã™
+。ãã®ã‚ˆã†ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’ã—ã¦ã„ãªã„å ´åˆã¯ã€è¦æ±‚ã—ãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆåã‚’é–“é•ãˆãŸã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚’ç„¡
+視ã—ã¦ãã ã•ã„。
+
+%s
+',
+ 'default_access:settings' => 'ã‚ãªãŸã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®å…¬é–‹ç¯„囲',
+ 'default_access:label' => 'デフォルトã®å…¬é–‹ç¯„囲',
+ 'user:default_access:success' => 'æ–°ã—ã„公開範囲ã®è¨­å®šã‚’ä¿å­˜ã—ã¾ã—ãŸã€‚',
+ 'user:default_access:failure' => 'æ–°ã—ã„公開範囲ã®è¨­å®šãŒä¿å­˜ã§ãã¾ã›ã‚“。',
+ 'xmlrpc:noinputdata' => '入力データãŒã‚ã‚Šã¾ã›ã‚“',
+ 'comments:count' => '%s コメント',
+ 'riveraction:annotation:generic_comment' => '%s ㌠%s ã«ã‚³ãƒ¡ãƒ³ãƒˆã—ã¾ã—ãŸã€‚',
+ 'generic_comments:add' => 'コメントã™ã‚‹',
+ 'generic_comments:text' => 'コメント',
+ 'generic_comment:posted' => 'コメントを投稿ã—ã¾ã—ãŸã€‚',
+ 'generic_comment:deleted' => 'コメントを削除ã—ã¾ã—ãŸã€‚',
+ 'generic_comment:blank' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。コメント内容ãŒæœªå…¥åŠ›ã®ãŸã‚é€ä¿¡ã§ãã¾ã›ã‚“。',
+ 'generic_comment:notfound' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。アイテムãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。',
+ 'generic_comment:notdeleted' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。ã“ã®ã‚³ãƒ¡ãƒ³ãƒˆãŒå‰Šé™¤ã§ãã¾ã›ã‚“。',
+ 'generic_comment:failure' => 'コメントã—ãŸéš›ã€äºˆæœŸã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚',
+ 'generic_comment:email:subject' => 'æ–°ã—ã„コメントãŒã‚ã‚Šã¾ã™ï¼',
+ 'generic_comment:email:body' => 'ã‚ãªãŸã®æŠ•ç¨¿ "%s" ã«ã€ %s ã•ã‚“ã‹ã‚‰æ–°ã—ãコメントãŒæ›¸ãè¾¼ã¾ã‚Œ>ã¾ã—ãŸã€‚:
+
+%s
+
+ã“ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’Webã§è¦‹ã‚‹ã‹ã€è¿”ä¿¡ã™ã‚‹å ´åˆã¯ä¸‹è¨˜ã‚’クリックã—ã¦ãã ã•ã„:
+
+%s
+
+%s ã®ãƒ—ロフィールを見る場åˆã¯ä¸‹è¨˜ã‚’クリックã—ã¦ãã ã•ã„:
+
+%s
+
+(※) ã“ã®ãƒ¡ãƒ¼ãƒ«ã«ã¯è¿”ä¿¡ã—ãªã„ã§ãã ã•ã„。
+
+',
+ 'entity:default:strapline' => 'ä½œæˆ %s by %s',
+ 'entity:default:missingsupport:popup' => 'ã“ã®æƒ…報を正確ã«è¡¨ç¤ºã§ãã¾ã›ã‚“。利用ã—ã¦ã„ãŸãƒ—ラグインãŒã†ã¾ã動作ã—ã¦ã„ãªã„ã‹ã€ã‚¢ãƒ³ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚ŒãŸå¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚',
+ 'entity:delete:success' => 'エンティティ %s を削除ã—ã¾ã—ãŸã€‚',
+ 'entity:delete:fail' => 'エンティティ %s ãŒå‰Šé™¤ã§ãã¾ã›ã‚“。',
+ '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. Please try again.',
+ 'actiongatekeeper:timeerror' => 'ã”覧ã®ãƒšãƒ¼ã‚¸ã¯é–²è¦§æœŸé™ãŒåˆ‡ã‚Œã¦ã„ã¾ã™ã€‚å†åº¦ãƒšãƒ¼ã‚¸ã‚’読ã¿è¾¼ã‚“ã§ãã ã•ã„。',
+ 'actiongatekeeper:pluginprevents' => 'A extension has prevented this form from being submitted.',
+ '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_names:tags' => 'ã‚¿ã‚°',
+ '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' => '英語',
+ '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',
+ 'is' => 'Icelandic',
+ 'it' => 'Italian',
+ 'iu' => 'Inuktitut',
+ 'iw' => 'Hebrew (obsolete)',
+ 'ja' => '日本語',
+ 'ji' => 'Yiddish (obsolete)',
+ 'jw' => 'Javanese',
+ 'ka' => 'Georgian',
+ 'kk' => 'Kazakh',
+ 'kl' => 'Greenlandic',
+ 'km' => 'Cambodian',
+ 'kn' => 'Kannada',
+ 'ko' => '韓国語',
+ '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',
+ 'yi' => 'Yiddish',
+ 'yo' => 'Yoruba',
+ 'za' => 'Zuang',
+ 'zh' => '中国語',
+ 'zu' => 'Zulu',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.custom_index.php b/mod/languages/languages/ja/ja.custom_index.php
new file mode 100644
index 000000000..8d9f6b57f
--- /dev/null
+++ b/mod/languages/languages/ja/ja.custom_index.php
@@ -0,0 +1,11 @@
+<?php
+$ja = array (
+ 'custom:bookmarks' => 'æ–°ç€ãƒ–ックマーク',
+ 'custom:groups' => 'æ–°ç€ã‚°ãƒ«ãƒ¼ãƒ—',
+ 'custom:files' => 'æ–°ç€ãƒ•ã‚¡ã‚¤ãƒ«',
+ 'custom:blogs' => 'æ–°ç€ãƒ–ログ記事',
+ 'custom:members' => '最近ã®å‚加メンãƒãƒ¼',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.embed.php b/mod/languages/languages/ja/ja.embed.php
new file mode 100644
index 000000000..0f8c73034
--- /dev/null
+++ b/mod/languages/languages/ja/ja.embed.php
@@ -0,0 +1,8 @@
+<?php
+$ja = array (
+ 'embed:instructions' => '貼り付ã‘るファイルをé¸æŠž',
+ 'embed:media' => 'ファイルã®è²¼ã‚Šä»˜ã‘',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.externalpages.php b/mod/languages/languages/ja/ja.externalpages.php
new file mode 100644
index 000000000..9abb4879e
--- /dev/null
+++ b/mod/languages/languages/ja/ja.externalpages.php
@@ -0,0 +1,14 @@
+<?php
+$ja = array (
+ 'expages' => '外部å‘ã‘説明ページ',
+ 'expages:about' => 'ã“ã®ã‚µã‚¤ãƒˆã«ã¤ã„ã¦',
+ 'expages:terms' => '利用æ¡ä»¶',
+ 'expages:privacy' => '個人情報ã«ã¤ã„ã¦',
+ 'expages:contact' => 'ãŠå•ã„åˆã‚ã›',
+ 'expages:notset' => 'ã“ã®ãƒšãƒ¼ã‚¸ã¯ã¾ã è¨­ç½®ã•ã‚Œã¦ã„ã¾ã›ã‚“。',
+ 'expages:posted' => 'ページãŒä½œæˆã•ã‚Œã¾ã—ãŸã€‚',
+ 'expages:error' => '何らã‹ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ã“ã®ã¾ã¾ç¶šãよã†ã§ã—ãŸã‚‰ã€ç®¡ç†è€…ã«ã”連絡ãã ã•ã„。',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.file.php b/mod/languages/languages/ja/ja.file.php
new file mode 100644
index 000000000..7d45380f2
--- /dev/null
+++ b/mod/languages/languages/ja/ja.file.php
@@ -0,0 +1,61 @@
+<?php
+$ja = array (
+ 'groups:enablefiles' => 'グループファイル共有ã®åˆ©ç”¨',
+ 'file' => 'ファイル',
+ 'file:user' => '%s ã®ãƒ•ã‚¡ã‚¤ãƒ«',
+ 'file:friends' => '%s ã®å‹é”ã®ãƒ•ã‚¡ã‚¤ãƒ«',
+ 'file:all' => 'サイト全体ã®ãƒ•ã‚¡ã‚¤ãƒ«',
+ 'file:edit' => 'ファイル編集',
+ 'file:more' => 'ã‚‚ã£ã¨ã¿ã‚‹',
+ 'file:list' => 'リスト表示',
+ 'file:group' => 'グループファイル',
+ 'file:gallery' => 'ギャラリー表示',
+ 'file:gallery_list' => 'ギャラリー表示 or リスト表示',
+ 'file:num_files' => '一覧表示数',
+ 'file:user:gallery' => '%s ã®ã‚®ãƒ£ãƒ©ãƒªãƒ¼ã‚’ã¿ã‚‹',
+ 'file:upload' => 'ファイルã®ã‚¢ãƒƒãƒ—ロード',
+ 'file:replace' => 'ファイルã®ç½®ãæ›ãˆ',
+ 'file:newupload' => 'æ–°ã—ã„ファイルã®ã‚¢ãƒƒãƒ—ロード',
+ 'file:file' => 'ファイル',
+ 'file:title' => 'タイトル',
+ 'file:desc' => '説明',
+ 'file:tags' => 'ã‚¿ã‚°',
+ 'file:types' => 'ファイルタイプ',
+ 'file:type:all' => 'ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«',
+ 'file:type:video' => 'å‹•ç”»',
+ 'file:type:document' => 'ドキュメント',
+ 'file:type:audio' => '音声',
+ 'file:type:image' => 'ç”»åƒ',
+ 'file:type:general' => 'ãã®ä»–',
+ 'file:user:type:video' => '%s ã®å‹•ç”»',
+ 'file:user:type:document' => '%s ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ',
+ 'file:user:type:audio' => '%s ã®éŸ³å£°',
+ 'file:user:type:image' => '%s ã®ç”»åƒ',
+ 'file:user:type:general' => '%s ã®ãã®ä»–ã®ãƒ•ã‚¡ã‚¤ãƒ«',
+ 'file:friends:type:video' => 'å‹é”ã®å‹•ç”»',
+ 'file:friends:type:document' => 'å‹é”ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆ',
+ 'file:friends:type:audio' => 'å‹é”ã®éŸ³å£°',
+ 'file:friends:type:image' => 'å‹é”ã®ç”»åƒ',
+ 'file:friends:type:general' => 'å‹é”ã®ãã®ä»–ã®ãƒ•ã‚¡ã‚¤ãƒ«',
+ 'file:widget' => 'ファイル・ウィジェット',
+ 'file:widget:description' => 'æ–°ç€ãƒ•ã‚¡ã‚¤ãƒ«',
+ 'file:download' => 'ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã®ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰',
+ 'file:delete:confirm' => '本当ã«ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’削除ã—ã¾ã™ã‹ï¼Ÿ',
+ 'file:tagcloud' => 'タグクラウド',
+ 'file:display:number' => '一覧表示数',
+ 'item:object:file' => 'ファイル',
+ 'file:embed' => 'ファイルã®è²¼ä»˜ã‘',
+ 'file:embedall' => 'ã™ã¹ã¦',
+ 'file:saved' => 'ファイルをä¿å­˜ã—ã¾ã—ãŸã€‚',
+ 'file:deleted' => 'ファイルを削除ã—ã¾ã—ãŸã€‚',
+ 'file:none' => 'ファイルãŒã‚ã‚Šã¾ã›ã‚“。',
+ 'file:uploadfailed' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。ファイルをä¿å­˜ã§ãã¾ã›ã‚“。',
+ 'file:downloadfailed' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。今ã€ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。',
+ 'file:deletefailed' => '今ã€ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã¯å‰Šé™¤ã§ãã¾ã›ã‚“。',
+ 'file:noaccess' => 'ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’変更ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。',
+ 'file:cannotload' => 'ファイルを読ã¿è¾¼ã‚€éš›ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚',
+ 'file:nofile' => 'ファイルをé¸æŠžã—ã¦ä¸‹ã•ã„。',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.groups.php b/mod/languages/languages/ja/ja.groups.php
new file mode 100644
index 000000000..66d17b679
--- /dev/null
+++ b/mod/languages/languages/ja/ja.groups.php
@@ -0,0 +1,155 @@
+<?php
+$ja = array (
+ 'groups' => 'グループ',
+ 'groups:owned' => 'ã‚ãªãŸãŒãƒªãƒ¼ãƒ€ãƒ¼ã®ã‚°ãƒ«ãƒ¼ãƒ—',
+ 'groups:yours' => 'ã‚ãªãŸãŒæ‰€å±žã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—',
+ 'groups:user' => '%s ã®æ‰€å±žã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—',
+ 'groups:all' => 'ã™ã¹ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ—',
+ 'groups:edit' => 'グループã®ç·¨é›†',
+ 'groups:delete' => 'グループã®å‰Šé™¤',
+ 'groups:membershiprequests' => 'å‚加リクエストã®ç®¡ç†',
+ 'groups:invitations' => 'グループã¸ã®æ‹›å¾…',
+ 'groups:icon' => 'グループアイコン',
+ 'groups:name' => 'グループå',
+ 'groups:username' => 'URL用英数記å',
+ 'groups:description' => '説明',
+ 'groups:briefdescription' => '短ã„説明(一覧表示用)',
+ 'groups:interests' => 'ã‚¿ã‚°',
+ 'groups:website' => 'Web',
+ 'groups:members' => 'グループメンãƒãƒ¼',
+ 'groups:membership' => 'グループå‚加ã®è¨±å¯',
+ 'groups:access' => '公開範囲ã®è¨±å¯',
+ 'groups:owner' => 'リーダー',
+ 'groups:widget:num_display' => '一覧表示数',
+ 'groups:widget:membership' => 'グループå‚加',
+ 'groups:widgets:description' => 'プロフィールã«æ‰€å±žã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã®è¡¨ç¤º',
+ 'groups:noaccess' => 'グループã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ãªã„',
+ 'groups:cantedit' => 'ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を編集ã§ãã¾ã›ã‚“。',
+ 'groups:saved' => 'ä¿å­˜',
+ 'groups:featured' => 'クローズアップ',
+ 'groups:makeunfeatured' => 'クローズアップをやã‚ã‚‹',
+ 'groups:makefeatured' => 'クローズアップã«ç™»éŒ²ã™ã‚‹',
+ 'groups:featuredon' => 'ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—をクローズアップã«ç™»éŒ²ã—ã¾ã—ãŸã€‚',
+ 'groups:joinrequest' => 'å‚加希望',
+ 'groups:join' => 'グループã¸ã®å‚加',
+ 'groups:leave' => 'グループをやã‚ã‚‹',
+ 'groups:invite' => 'å‹é”を招待',
+ 'groups:inviteto' => '%s ã«å‹é”を招待',
+ 'groups:nofriends' => 'ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«æ‹›å¾…ã§ãる人ã¯ã„ã¾ã›ã‚“。',
+ 'groups:viagroups' => 'via groups',
+ 'groups:group' => 'グループ',
+ 'groups:search:tags' => 'ã‚¿ã‚°',
+ 'groups:notfound' => 'グループãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。',
+ 'groups:notfound:details' => 'グループã¯å­˜åœ¨ã—ãªã„ã‹ã€ã‚¢ã‚¯ã‚»ã‚¹è¨±å¯ãŒã‚ã‚Šã¾ã›ã‚“。',
+ 'groups:requests:none' => '会員リクエストã¯ã‚ã‚Šã¾ã›ã‚“。',
+ 'groups:invitations:none' => 'グループã¸ã®æ‹›å¾…ã¯ã‚ã‚Šã¾ã›ã‚“。',
+ 'item:object:groupforumtopic' => 'フォーラムトピック',
+ 'groupforumtopic:new' => 'æ–°è¦ãƒ•ã‚©ãƒ¼ãƒ©ãƒ æŠ•ç¨¿',
+ 'groups:count' => 'グループ数',
+ 'groups:open' => 'オープングループ',
+ 'groups:closed' => 'クローズドグループ',
+ 'groups:member' => '会員',
+ 'groups:searchtag' => 'ã‚¿ã‚°ã§ã‚°ãƒ«ãƒ¼ãƒ—を検索',
+ 'groups:access:private' => 'クローズド - 招待制ã§ã™ã€‚',
+ 'groups:access:public' => 'フリーå‚加 - 誰ã§ã‚‚å‚加ã§ãã¾ã™ã€‚',
+ 'groups:closedgroup' => 'ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã‚¯ãƒ­ãƒ¼ã‚ºãƒ‰ãªæ‹›å¾…制ãªã‚°ãƒ«ãƒ¼ãƒ—ã§ã™ã€‚å‚加をã—ãŸã„å ´åˆã¯ã€Œå‚加希望ã€ã‚’クリックã—ã¦ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ã£ã¦ãã ã•ã„。',
+ 'groups:visibility' => 'ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã‚’ã¿ã‚‹ã“ã¨ãŒã§ãる人',
+ 'groups:enableforum' => 'グループフォーラムã®åˆ©ç”¨',
+ 'groups:yes' => 'ã¯ã„',
+ 'groups:no' => 'ã„ã„ãˆ',
+ 'groups:lastupdated' => '最終更新 %s (更新者 %s )',
+ 'group:replies' => '返信',
+ 'groups:forum' => 'グループフォーラム',
+ 'groups:addtopic' => 'æ–°è¦ãƒˆãƒ”ック作æˆ',
+ 'groups:forumlatest' => '最新ã®ã‚„ã‚Šã¨ã‚Š',
+ 'groups:latestdiscussion' => '最新ã®ã‚„ã‚Šã¨ã‚Š',
+ 'groups:newest' => 'æ–°ç€',
+ 'groups:popular' => '人気',
+ 'groupspost:success' => 'コメントを投稿ã—ã¾ã—ãŸã€‚',
+ 'groups:alldiscussion' => '最新ã®ã‚„ã‚Šã¨ã‚Š',
+ 'groups:edittopic' => 'トピックã®ç·¨é›†',
+ 'groups:topicmessage' => 'トピックメッセージ',
+ 'groups:topicstatus' => 'トピックステータス',
+ 'groups:reply' => 'コメントã®æŠ•ç¨¿',
+ 'groups:topic' => 'トピック',
+ 'groups:posts' => '投稿',
+ 'groups:lastperson' => '最後ã«æŠ•ç¨¿ã—ãŸäºº',
+ 'groups:when' => 'ã„ã¤',
+ 'grouptopic:notcreated' => 'トピックã¯ã‚ã‚Šã¾ã›ã‚“。',
+ 'groups:topicopen' => '稼åƒä¸­',
+ 'groups:topicclosed' => '終了',
+ 'groups:topicresolved' => '解決済ã¿',
+ 'grouptopic:created' => 'トピックを作æˆã—ã¾ã—ãŸã€‚',
+ 'groupstopic:deleted' => '削除ã—ãŸãƒˆãƒ”ック',
+ 'groups:topicsticky' => 'スティッキー',
+ 'groups:topicisclosed' => 'ã“ã®ãƒˆãƒ”ックã¯çµ‚了ã—ã¾ã—ãŸã€‚',
+ 'groups:topiccloseddesc' => 'ã“ã®ãƒˆãƒ”ックã¯çµ‚了ã—ã¾ã—ãŸã€‚æ–°ã—ã„コメントã¯å—ã‘付ã‘ã¦ã„ã¾ã›ã‚“。',
+ 'grouptopic:error' => 'グループトピックãŒä½œæˆã§ãã¾ã›ã‚“。システム管ç†è€…ã«å•ã„åˆã‚ã›ãã ã•ã„。',
+ 'groups:forumpost:edited' => '投稿を編集ã—ã¾ã—ãŸã€‚',
+ 'groups:forumpost:error' => '投稿ã®ç·¨é›†ã®éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚',
+ 'groups:privategroup' => 'ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ã‚¯ãƒ­ãƒ¼ã‚ºãƒ‰ - 招待制ã§ã™ã€‚',
+ 'groups:notitle' => 'グループ作æˆã«ã¯ã‚°ãƒ«ãƒ¼ãƒ—åãŒå¿…è¦ã§ã™ã€‚',
+ 'groups:cantjoin' => 'グループã«å‚加ã§ãã¾ã›ã‚“。',
+ 'groups:cantleave' => 'グループをやã‚ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。',
+ 'groups:addedtogroup' => 'グループã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追加ã—ã¾ã—ãŸã€‚',
+ 'groups:joinrequestnotmade' => 'グループå‚加ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚',
+ 'groups:joinrequestmade' => 'グループå‚加ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆ',
+ 'groups:joined' => 'グループã«å‚加ã—ã¾ã—ãŸï¼',
+ 'groups:left' => 'グループをやã‚ã¾ã—ãŸã€‚',
+ 'groups:notowner' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。ã‚ãªãŸã¯ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒªãƒ¼ãƒ€ãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。',
+ 'groups:notmember' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。ã‚ãªãŸã¯ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¼šå“¡ã§ã¯ã‚ã‚Šã¾ã›ã‚“。',
+ 'groups:alreadymember' => 'ã‚ãªãŸã¯ã™ã§ã«ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¼šå“¡ã§ã™ã€‚',
+ 'groups:userinvited' => '招待ã—ã¾ã—ãŸã€‚',
+ 'groups:usernotinvited' => '招待ãŒã§ãã¾ã›ã‚“。',
+ 'groups:useralreadyinvited' => 'ã™ã§ã«æ‹›å¾…済ã¿ã§ã™ã€‚',
+ 'groups:updated' => 'æ–°ç€ã‚³ãƒ¡ãƒ³ãƒˆ',
+ 'groups:invite:subject' => '%s ã•ã‚“ã€%s ã«æ‹›å¾…ã•ã‚Œã¾ã—ãŸï¼',
+ 'groups:started' => 'Started by',
+ 'groups:joinrequest:remove:check' => 'ã“ã®æ‹›å¾…リクエストを削除ã—ã¦ã‚ˆã„ã§ã™ã‹ï¼Ÿ',
+ 'groups:invite:body' => '%s ã•ã‚“ã€ã“ã‚“ã«ã¡ã¯ã€‚
+
+%s ãŒã‚ãªãŸã‚’グループ \'%s\' ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚下記をã”覧下ã•ã„。
+
+%s',
+ 'groups:welcome:subject' => 'よã†ã“ãã€%s グループã¸ï¼',
+ 'groups:welcome:body' => '%s ã•ã‚“ã€ã“ã‚“ã«ã¡ã¯ã€‚
+
+You are now a member of the \'%s\' group! Click below to begin posting!
+ã‚ãªãŸã¯ \'%s\' グループã«å‚加ã—ã¾ã—ãŸï¼ 下記ã‹ã‚‰ã‚°ãƒ«ãƒ¼ãƒ—ページã¸ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚
+
+%s',
+ 'groups:request:subject' => '%s 㯠%s ã¸æ‹›å¾…ã•ã‚Œã¾ã—ãŸã€‚',
+ 'groups:request:body' => '%s ã•ã‚“ã€ã“ã‚“ã«ã¡ã¯ã€‚
+
+%s ã¯ã‚°ãƒ«ãƒ¼ãƒ— \'%s\' ã«æ‹›å¾…ã—ã¦ã„ã¾ã™ã€‚グループã®ãƒ—ロフィールã¯ä¸‹è¨˜ã‹ã‚‰ã”覧下ã•ã„。
+
+%s
+
+招待状ã¯ä¸‹è¨˜ã‹ã‚‰ã”覧下ã•ã„。
+
+%s',
+ 'groups:nowidgets' => 'ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«è¨­å®šã•ã‚Œã¦ã„るウィジェットã¯ã‚ã‚Šã¾ã›ã‚“。',
+ 'groups:widgets:members:title' => 'グループメンãƒãƒ¼',
+ 'groups:widgets:members:description' => 'メンãƒãƒ¼ä¸€è¦§',
+ 'groups:widgets:members:label:displaynum' => 'メンãƒãƒ¼ä¸€è¦§',
+ 'groups:widgets:members:label:pleaseedit' => 'ウィジェットã®è¨­å®š',
+ 'groups:widgets:entities:title' => 'オブジェクト',
+ 'groups:widgets:entities:description' => 'ä¿å­˜ã•ã‚ŒãŸã‚ªãƒ–ジェクト一覧。',
+ 'groups:widgets:entities:label:displaynum' => 'オブジェクト一覧',
+ 'groups:widgets:entities:label:pleaseedit' => 'ウィジェットã®è¨­å®š',
+ 'groups:forumtopic:edited' => 'フォーラムトピックを編集ã—ã¾ã—ãŸã€‚',
+ 'groups:allowhiddengroups' => 'プライベートãªã‚°ãƒ«ãƒ¼ãƒ—を許å¯ã—ã¾ã™ã‹ï¼Ÿ',
+ 'group:deleted' => 'グループã¨ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を削除ã—ã¾ã—ãŸã€‚',
+ 'group:notdeleted' => 'グループãŒå‰Šé™¤ã§ãã¾ã›ã‚“。',
+ 'grouppost:deleted' => '投稿を削除ã—ã¾ã—ãŸã€‚',
+ 'grouppost:notdeleted' => '投稿ãŒå‰Šé™¤ã§ãã¾ã›ã‚“。',
+ 'groupstopic:notdeleted' => '削除ã—ã¦ã„ãªã„トピック',
+ 'grouptopic:blank' => 'トピックã¯ã‚ã‚Šã¾ã›ã‚“',
+ 'grouptopic:notfound' => 'トピックãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。',
+ 'grouppost:nopost' => '投稿ãŒã‚ã‚Šã¾ã›ã‚“。',
+ 'groups:deletewarning' => 'ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を削除ã—ã¦ã„ã„ã§ã™ã‹ï¼Ÿå‰Šé™¤ã—ãŸã‚‰å…ƒã«æˆ»ã™äº‹ã¯ã§ãã¾ã›ã‚“ï¼',
+ 'groups:joinrequestkilled' => 'å‚加リクエストを削除ã—ã¾ã—ãŸã€‚',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.messageboard.php b/mod/languages/languages/ja/ja.messageboard.php
new file mode 100644
index 000000000..174e751f6
--- /dev/null
+++ b/mod/languages/languages/ja/ja.messageboard.php
@@ -0,0 +1,41 @@
+<?php
+$ja = array (
+ 'messageboard:board' => 'メモ',
+ 'messageboard:messageboard' => 'メモ',
+ 'messageboard:viewall' => 'ã™ã¹ã¦ã¿ã‚‹',
+ 'messageboard:postit' => '投稿',
+ 'messageboard:history:title' => 'éŽåŽ»ã®ãƒ¡ãƒ¢',
+ 'messageboard:none' => 'メモã¯ã‚ã‚Šã¾ã›ã‚“。',
+ 'messageboard:num_display' => '一覧表示数',
+ 'messageboard:desc' => '「メモã€ã‚’使ã†ã¨ãƒ—ロフィールページ上ã§ã„ã‚ã„ã‚ãªäººã‹ã‚‰æ›¸ãè¾¼ã¿ã‚’ã—ã¦ã‚‚らãˆã¾ã™ã€‚',
+ 'messageboard:user' => '%s ã®ãƒ¡ãƒ¢',
+ 'messageboard:replyon' => '返信',
+ 'messageboard:history' => 'éŽåŽ»ã®ãƒ¡ãƒ¢',
+ 'messageboard:posted' => 'メモã«æ›¸ãè¾¼ã¿ã‚’ã—ã¾ã—ãŸã€‚',
+ 'messageboard:deleted' => 'メモã®æ›¸ãè¾¼ã¿ã‚’削除ã—ã¾ã—ãŸã€‚',
+ 'messageboard:email:subject' => 'メモã«æ–°ã—ã„書ãè¾¼ã¿ãŒã‚ã‚Šã¾ã™ï¼',
+ 'messageboard:email:body' => 'メモ㫠%s ã‹ã‚‰æ–°ã—ã„書ãè¾¼ã¿ãŒã‚ã‚Šã¾ã—ãŸã€‚
+
+%s
+
+ã“ã®æ›¸ãè¾¼ã¿ã‚’ã¿ã‚‹ã«ã¯ä¸‹è¨˜URLをクリックã—ã¦ä¸‹ã•ã„。
+
+%s
+
+%s ã®ãƒ—ロフィールã¯ã“ã¡ã‚‰ã§ã™ã€‚
+
+%s
+
+(*) ã“ã®ãƒ¡ãƒ¼ãƒ«ã«è¿”ä¿¡ã—ãªã„ã§ãã ã•ã„。
+
+
+',
+ 'messageboard:blank' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。何ã‹å…¥åŠ›ã—ãŸå¾Œã€ä¿å­˜ã—ã¦ä¸‹ã•ã„。',
+ 'messageboard:notfound' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。ãã®ã‚¢ã‚¤ãƒ†ãƒ ã¯è¦‹å½“ãŸã‚Šã¾ã›ã‚“。',
+ 'messageboard:notdeleted' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。書ãè¾¼ã¿ã‚’削除ã§ãã¾ã›ã‚“。',
+ 'messageboard:somethingwentwrong' => '書ãè¾¼ã¿ã®ä¿å­˜ä¸­ã€ä½•ã‚‰ã‹ã®å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚',
+ 'messageboard:failure' => '書ãè¾¼ã¿ã®éš›ã«ä½•ã‹ã‚‰ã®ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.messages.php b/mod/languages/languages/ja/ja.messages.php
new file mode 100644
index 000000000..d070ffe39
--- /dev/null
+++ b/mod/languages/languages/ja/ja.messages.php
@@ -0,0 +1,55 @@
+<?php
+$ja = array (
+ 'messages' => 'メッセージ',
+ 'messages:back' => 'メッセージã«ã‚‚ã©ã‚‹',
+ 'messages:user' => 'å—ä¿¡ç®±',
+ 'messages:posttitle' => '%s ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸: %s',
+ 'messages:inbox' => 'å—ä¿¡ç®±',
+ 'messages:send' => 'メッセージã®é€ä¿¡',
+ 'messages:sent' => 'é€ä¿¡æ¸ˆã¿ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸',
+ 'messages:message' => 'メッセージ',
+ 'messages:title' => 'タイトル',
+ 'messages:to' => '宛先',
+ 'messages:from' => 'é€ä¿¡å…ƒ',
+ 'messages:fly' => 'é€ä¿¡',
+ 'messages:replying' => '返信先',
+ 'messages:sendmessage' => 'メッセージã®é€ä¿¡',
+ 'messages:compose' => 'æ–°è¦ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®ä½œæˆ',
+ 'messages:sentmessages' => 'é€ä¿¡æ¸ˆã¿ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸',
+ 'messages:recent' => '最近ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸',
+ 'messages:original' => 'オリジナルメッセージ',
+ 'messages:yours' => 'ã‚ãªãŸã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸',
+ 'messages:answer' => '返信',
+ 'messages:toggle' => 'å…¨ã¦ã‚’é¸æŠž',
+ 'messages:markread' => '既読マーク',
+ 'messages:new' => 'æ–°ã—ã„メッセージ',
+ 'notification:method:site' => 'サイト',
+ 'messages:error' => 'メッセージã®ä¿å­˜ã®éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚',
+ 'item:object:messages' => 'メッセージ',
+ 'messages:posted' => 'メッセージをé€ä¿¡ã—ã¾ã—ãŸã€‚',
+ 'messages:email:subject' => 'æ–°ã—ã„メッセージãŒå±Šãã¾ã—ãŸï¼',
+ 'messages:email:body' => '%s ã‹ã‚‰æ–°ã—ã„メッセージãŒå±Šãã¾ã—ãŸã€‚
+
+%s
+
+メッセージをã¿ã‚‹ã«ã¯ä¸‹è¨˜ã‚’クリックã—ã¦ä¸‹ã•ã„。
+
+ %s
+
+%s ã«è¿”ä¿¡ã™ã‚‹ã«ã¯ä¸‹è¨˜ã‚’クリックã—ã¦ä¸‹ã•ã„。
+
+ %s
+
+(※) ã“ã®ãƒ¡ãƒ¼ãƒ«ã«è¿”ä¿¡ã—ãªã„ã§ãã ã•ã„。
+',
+ 'messages:blank' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。何も入力ãŒãªã„ãŸã‚ã€é€ä¿¡ã§ãã¾ã›ã‚“。',
+ 'messages:notfound' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。メッセージãŒè¦‹å½“ãŸã‚‰ã„ã¾ã›ã‚“。',
+ 'messages:notdeleted' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。メッセージãŒå‰Šé™¤ã§ãã¾ã›ã‚“。',
+ 'messages:nopermission' => 'メッセージを変更ã™ã‚‹æ¨©é™ãŒã‚ã‚Šã¾ã›ã‚“。',
+ 'messages:nomessages' => 'メッセージãŒã‚ã‚Šã¾ã›ã‚“。',
+ 'messages:user:nonexist' => 'ユーザー一覧ã«ãã®é€ä¿¡å…ˆãŒã‚ã‚Šã¾ã›ã‚“。',
+ 'messages:user:blank' => 'é€ä¿¡å…ˆã‚’指定ã—ã¦ãã ã•ã„。',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.pages.php b/mod/languages/languages/ja/ja.pages.php
new file mode 100644
index 000000000..078b3030e
--- /dev/null
+++ b/mod/languages/languages/ja/ja.pages.php
@@ -0,0 +1,43 @@
+<?php
+$ja = array (
+ 'pages' => 'ページ',
+ 'pages:group' => 'グループページ',
+ 'pages:all' => 'サイトã™ã¹ã¦ã®ãƒšãƒ¼ã‚¸',
+ 'pages:new' => 'æ–°ã—ã„ページ',
+ 'pages:edit' => 'ã“ã®ãƒšãƒ¼ã‚¸ã®ç·¨é›†',
+ 'pages:delete' => 'ã“ã®ãƒšãƒ¼ã‚¸ã‚’削除',
+ 'pages:history' => '履歴',
+ 'pages:view' => 'ページをã¿ã‚‹',
+ 'pages:navigation' => 'ページé€ã‚Š',
+ 'item:object:page_top' => 'トップレベルページ',
+ 'item:object:page' => 'ページ',
+ 'pages:nogroup' => 'ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ã¯ãƒšãƒ¼ã‚¸ãŒã¾ã ã‚ã‚Šã¾ã›ã‚“。',
+ 'pages:more' => 'ã‚‚ã£ã¨ã¿ã‚‹',
+ 'pages:title' => 'タイトル',
+ 'pages:description' => '本文',
+ 'pages:tags' => 'ã‚¿ã‚°',
+ 'pages:access_id' => '公開範囲',
+ 'pages:write_access_id' => '編集å¯èƒ½ãªç¯„囲',
+ 'pages:noaccess' => 'ページを閲覧ã§ãã¾ã›ã‚“。',
+ 'pages:cantedit' => 'ã“ã®ãƒšãƒ¼ã‚¸ã®ç·¨é›†ã¯ã§ãã¾ã›ã‚“。',
+ 'pages:saved' => 'ページをä¿å­˜ã—ã¾ã—ãŸã€‚',
+ 'pages:notsaved' => 'ページをä¿å­˜ã§ãã¾ã›ã‚“。',
+ 'pages:delete:success' => 'ページを削除ã—ã¾ã—ãŸã€‚',
+ 'pages:delete:failure' => 'ページãŒå‰Šé™¤ã§ãã¾ã›ã‚“。',
+ 'pages:strapline' => '最終更新: %s (更新者 %s )',
+ 'pages:revision' => 'リビジョン作æˆï¼š %s (作æˆè€… %s )',
+ 'pages:num' => '一覧表示数',
+ 'pages:widget:description' => 'ページã®ãƒªã‚¹ãƒˆã§ã™ã€‚',
+ 'pages:label:view' => 'ページをã¿ã‚‹',
+ 'pages:label:edit' => 'ページã®ç·¨é›†',
+ 'pages:label:history' => '履歴',
+ 'pages:sidebar:this' => 'ã“ã®ãƒšãƒ¼ã‚¸',
+ 'pages:sidebar:children' => 'å­ãƒšãƒ¼ã‚¸',
+ 'pages:sidebar:parent' => '親ページ',
+ 'pages:newchild' => 'å­ãƒšãƒ¼ã‚¸ã‚’作æˆ',
+ 'pages:backtoparent' => '「 %s ã€ã«ã‚‚ã©ã‚‹',
+ 'groups:enablepages' => 'グループページã®åˆ©ç”¨',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/ja/ja.reportedcontent.php b/mod/languages/languages/ja/ja.reportedcontent.php
new file mode 100644
index 000000000..7743c75ad
--- /dev/null
+++ b/mod/languages/languages/ja/ja.reportedcontent.php
@@ -0,0 +1,30 @@
+<?php
+$ja = array (
+ 'item:object:reported_content' => '報告済ã¿ã‚¢ã‚¤ãƒ†ãƒ ',
+ 'reportedcontent' => '報告済ã¿ã‚¢ã‚¤ãƒ†ãƒ ',
+ 'reportedcontent:this' => '報告ã™ã‚‹',
+ 'reportedcontent:none' => '報告ã•ã‚ŒãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯ã‚ã‚Šã¾ã›ã‚“。',
+ 'reportedcontent:report' => '報告ã™ã‚‹',
+ 'reportedcontent:title' => 'ページタイトル',
+ 'reportedcontent:deleted' => '報告ã•ã‚ŒãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã¯å‰Šé™¤ã•ã‚Œã¦ã„ã¾ã™ã€‚',
+ 'reportedcontent:notdeleted' => '報告を削除ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。',
+ 'reportedcontent:delete' => '削除',
+ 'reportedcontent:areyousure' => '本当ã«å‰Šé™¤ã—ã¾ã™ã‹ï¼Ÿ',
+ 'reportedcontent:archive' => 'ä¿ç®¡ã™ã‚‹',
+ 'reportedcontent:archived' => '報告をä¿ç®¡ã—ã¾ã—ãŸã€‚',
+ 'reportedcontent:visit' => '報告ã•ã‚ŒãŸã‚¢ã‚¤ãƒ†ãƒ ã‚’ã¿ã‚‹',
+ 'reportedcontent:by' => '報告者:',
+ 'reportedcontent:objecttitle' => 'オブジェクトタイトル',
+ 'reportedcontent:objecturl' => 'オブジェクトURL',
+ 'reportedcontent:reason' => '報告ç†ç”±',
+ 'reportedcontent:description' => '何ã‹å•é¡ŒãŒã‚ã‚Šã¾ã—ãŸã‹ï¼Ÿ',
+ 'reportedcontent:address' => 'アイテムã®URL',
+ 'reportedcontent:success' => 'ã‚ãªãŸã®å ±å‘Šã‚’管ç†è€…ã«é€ä¿¡ã—ã¾ã—ãŸã€‚',
+ 'reportedcontent:failing' => 'ã‚ãªãŸã®å ±å‘Šã‚’é€ä¿¡ã§ãã¾ã›ã‚“。',
+ 'reportedcontent:moreinfo' => 'ã‚‚ã£ã¨ã¿ã‚‹',
+ 'reportedcontent:failed' => '申ã—訳ã‚ã‚Šã¾ã›ã‚“。報告ã®é€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸã€‚',
+ 'reportedcontent:notarchived' => '報告ãŒä¿ç®¡ã§ãã¾ã›ã‚“。',
+);
+
+add_translation("ja", $ja);
+
diff --git a/mod/languages/languages/nl/nl.blog.php b/mod/languages/languages/nl/nl.blog.php
new file mode 100644
index 000000000..9a93099fa
--- /dev/null
+++ b/mod/languages/languages/nl/nl.blog.php
@@ -0,0 +1,50 @@
+<?php
+$nl = array (
+ 'blog:archives' => 'Archieven',
+ 'blog:group' => 'Groep blog',
+ 'blog:enableblog' => 'Groep blog inschakelen',
+ 'blog:blogs' => 'Blogs',
+ 'blog:revisions' => 'Revisies',
+ 'blog:blog' => 'Blog',
+ 'blog:title:user_blogs' => '%s\'s blogs',
+ 'blog:title:all_blogs' => 'Alle site blogs',
+ 'blog:title:friends' => 'Blogs van vrienden',
+ 'blog:write' => 'Schrijf een blog',
+ 'blog:add' => 'Voeg een blog toe',
+ 'blog:edit' => 'Bewerk blog',
+ 'blog:excerpt' => 'Uittreksel',
+ 'blog:body' => 'Bericht',
+ 'blog:save_status' => 'Laatst opgeslagen:',
+ 'blog:status' => 'Status',
+ 'blog:status:draft' => 'Concept',
+ 'blog:status:published' => 'Gepubliceerd',
+ 'blog:status:unsaved_draft' => 'Niet opgeslagen concept',
+ 'blog:revision' => 'Revisie',
+ 'blog:auto_saved_revision' => 'Revisie automatisch opgeslagen',
+ 'blog:message:saved' => 'Blog opgeslagen',
+ 'blog:error:cannot_save' => 'Blog kon niet worden opgeslagen.',
+ 'blog:error:cannot_write_to_container' => 'Onvoldoende rechten om de blog op te slaan in de groep.',
+ 'blog:error:post_not_found' => 'Deze blog is verwijderd, ongeldig, of je hebt onvoldoende rechten om het te mogen zien.',
+ 'blog:messages:warning:draft' => 'Er is een niet opgeslagen concept voor deze blog!',
+ 'blog:edit_revision_notice' => '(Oude versie)',
+ 'blog:message:deleted_post' => 'Blog verwijderd.',
+ 'blog:error:cannot_delete_post' => 'Kan blog niet verwijderen.',
+ 'blog:none' => 'Geen blogs',
+ 'blog:error:missing:title' => 'Geef een blog titel op!',
+ 'blog:error:missing:description' => 'Geef een bericht op bij je blog!',
+ 'blog:error:cannot_edit_post' => 'Deze blog bestaat niet of je hebt onvoldoende rechten om deze te mogen bewerken.',
+ 'blog:error:revision_not_found' => 'Kan deze revisie niet vinden.',
+ 'river:create:object:blog' => '%s publiceerde een blog %s',
+ 'river:comment:object:blog' => '%s reageerde op de blog %s',
+ 'blog:noblogs' => 'Geen blogs',
+ 'item:object:blog' => 'Blog berichten',
+ 'blog:widget:description' => 'Deze widget toont je laatste blog berichten',
+ 'blog:moreblogs' => 'Meer blog berichten',
+ 'blog:numbertodisplay' => 'Aantal blog berichten om te tonen',
+ 'blog' => 'Blog',
+ 'blog:newpost' => 'Nieuw blog bericht',
+ 'blog:never' => 'nooit',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.bookmarks.php b/mod/languages/languages/nl/nl.bookmarks.php
new file mode 100644
index 000000000..3ddabadbf
--- /dev/null
+++ b/mod/languages/languages/nl/nl.bookmarks.php
@@ -0,0 +1,46 @@
+<?php
+$nl = array (
+ 'bookmarks:edit' => 'Bewerk favoriet',
+ 'bookmarks:owner' => '%s\'s favorieten',
+ 'bookmarks:none' => 'Geen favorieten',
+ 'river:create:object:bookmarks' => '%s maakte %s aan als favoriet',
+ 'river:comment:object:bookmarks' => '%s reageerde op een favoriet %s',
+ 'bookmarks:river:annotate' => 'een reactie op deze favoriet',
+ 'bookmarks:nogroup' => 'Deze groep heeft nog geen favorieten',
+ 'bookmarks:no_title' => 'Geen titel',
+ 'bookmarks:save:invalid' => 'Het adres van de favoriet is ongeldig en kon niet worden opgeslagen.',
+ 'bookmarks:morebookmarks' => 'Meer favorieten',
+ 'bookmarks:this:group' => 'Favoriet in %s',
+ 'bookmarks:bookmarklet:group' => 'Verkrijg groeps bookmarklet',
+ 'bookmarks:group' => 'Groeps favorieten',
+ 'bookmarks:enablebookmarks' => 'Schakel groeps favorieten in',
+ 'bookmarks' => 'Favorieten',
+ 'bookmarks:add' => 'Favoriet toevoegen',
+ 'bookmarks:friends' => 'Favorieten van vrienden',
+ 'bookmarks:everyone' => 'Alle Site favorieten',
+ 'bookmarks:this' => 'Voeg favoriet toe',
+ 'bookmarks:bookmarklet' => 'Browser plugin',
+ 'bookmarks:inbox' => 'Favorieten inbox',
+ 'bookmarks:more' => 'Meer favorieten',
+ 'bookmarks:with' => 'Deel met',
+ 'bookmarks:new' => 'Een nieuwe favoriet',
+ 'bookmarks:address' => 'Adres van de favoriet',
+ 'bookmarks:delete:confirm' => 'Weet je zeker dat je deze favoriet wilt verwijderen?',
+ 'bookmarks:numbertodisplay' => 'Aantal favorieten om weer te geven',
+ 'bookmarks:shared' => 'Favoriet',
+ 'bookmarks:visit' => 'Ga naar de pagina',
+ 'bookmarks:recent' => 'Recente favorieten',
+ 'bookmarks:river:item' => 'een favoriet',
+ 'item:object:bookmarks' => 'Favorieten',
+ 'bookmarks:widget:description' => 'Deze widget is ontworpen voor je Dashboard en laat je de laatste favorieten in de Inbox zien.',
+ 'bookmarks:bookmarklet:description' => 'De favorieten Browser plugin maakt het mogelijk om iedere willekeurige pagina te delen met je vrienden, of om gewoon voor jezelf om te onthouden. Om het te gebruiken sleep je de Browser plugin naar je Links balk van je browser: ',
+ 'bookmarks:bookmarklet:descriptionie' => 'Als je Internet Explorer gebruikt moet je met de rechter muisknop op de Brwoser plugin klikken en dan kiezen voor \'toevoegen aan favorieten\' en dan de Links balk.',
+ 'bookmarks:bookmarklet:description:conclusion' => 'Je kunt dan iedere pagina die je bezoekt markeren door op de link te klikken.',
+ 'bookmarks:save:success' => 'Je favoriet is succesvol opgeslagen.',
+ 'bookmarks:delete:success' => 'Je favoriet is succesvol verwijderd.',
+ 'bookmarks:save:failed' => 'Je favoriet kon niet worden opgeslagen. Probeer het nogmaals.',
+ 'bookmarks:delete:failed' => 'Je favoriet kon niet worden verwijderd. Probeer het nogmaals.',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.categories.php b/mod/languages/languages/nl/nl.categories.php
new file mode 100644
index 000000000..7133df96a
--- /dev/null
+++ b/mod/languages/languages/nl/nl.categories.php
@@ -0,0 +1,12 @@
+<?php
+$nl = array (
+ 'categories' => 'Categorieën',
+ 'categories:settings' => 'Stel Site categorieën in',
+ 'categories:explanation' => 'Om een aantal voorgedefinieerde categorieë in te stellen, die door over hele site kunnen worden gebruik, geeft ze hieronder in. Door een komma gescheiden. Geschikte plugins zullen ze dan weer geven als een gebruiker content bewerkt of aanmaakt.',
+ 'categories:save:success' => 'Site categorieën zijn succesvol opgeslagen.',
+ 'categories:on_activate_reminder' => 'Site categorieën zal niet werken totdat je enkele categorieën toevoegt. <a href="%s">Voeg categorieën toe</a>.',
+ 'categories:results' => 'Resultaten voor de Site categorie: %s',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.core.php b/mod/languages/languages/nl/nl.core.php
new file mode 100644
index 000000000..ccf7e847e
--- /dev/null
+++ b/mod/languages/languages/nl/nl.core.php
@@ -0,0 +1,947 @@
+<?php
+$nl = array (
+ 'notification:method:email' => 'E-mail',
+ 'SecurityException:ForwardFailedToRedirect' => 'Redirect kon niet worden uitgevoerd omdat er al headers verzonden zijn. Om veiligheidsredenen wordt de executie gestopt. Zoek op http://docs.elgg.org/ voor meer informatie.',
+ 'LoginException:ChangePasswordFailure' => 'Huidige wachtwoord incorrect.',
+ 'noaccess' => 'De inhoud is verwijderd, is ongeldig of je hebt geen toegang om het te mogen bekijken.',
+ 'profile:field:text' => 'Korte tekst',
+ 'profile:field:longtext' => 'Groot tekst vlak',
+ 'profile:field:tags' => 'Tags',
+ 'profile:field:url' => 'Web adres',
+ 'profile:field:email' => 'E-mail adres',
+ 'profile:field:location' => 'Locatie',
+ 'profile:field:date' => 'Datum',
+ 'river:update' => 'Update van %s',
+ 'register:fields' => 'Alle velden zijn verplicht',
+ 'on' => 'Aan',
+ 'off' => 'Uit',
+ 'generic_comment:title' => 'Reactie door %s',
+ 'login:empty' => 'Gebruikersnaam en wachtwoord zijn verplicht.',
+ 'login:baduser' => 'Je account kon niet worden geladen.',
+ 'auth:nopams' => 'Interne fout. Geen gebruiker validatie methoden gedefinieerd.',
+ 'actionnotfound' => 'Het actie bestand voor %s kon niet worden gevonden.',
+ 'actionunauthorized' => 'Je bent niet geautoriseerd om deze actie uit te voeren',
+ 'InstallationException:SiteNotInstalled' => 'Je verzoek kon niet worden uitgevoerd. Deze site is niet geconfigureerd of de database is niet beschikbaar.',
+ 'InstallationException:MissingLibrary' => '%s kan niet worden geladen',
+ 'InstallationException:CannotLoadSettings' => 'Elgg kan het settings bestand niet laden. Het bestand bestaat niet of er is een probleem met de rechten.',
+ 'DatabaseException:WrongCredentials' => 'Elgg kon geen verbinding maken met de database met de op gegeven aanmeld gegevens. Controleer het settings bestand.',
+ 'DatabaseException:InvalidQuery' => 'Ongeldige query',
+ 'PluginException:MisconfiguredPlugin' => '%s (guid: %s) is een verkeerd geconfigureerde plugin. Het is uitgeschakeld. Bezoek de Elgg wiki voor mogelijke oorzaken (http://docs.elgg.org/wiki/).',
+ 'PluginException:CannotStart' => '%s (guid: %s) kan niet starten. Reden: %s',
+ 'PluginException:InvalidID' => '%s is een ongeldige plugin ID.',
+ 'PluginException:InvalidPath' => '%s is een ongeldig plugin pad.',
+ 'PluginException:InvalidManifest' => 'Ongeldig manifest bestand voor plugin: %s',
+ 'PluginException:InvalidPlugin' => '%s is een ongeldige plugin.',
+ 'PluginException:InvalidPlugin:Details' => '%s is een ongeldige plugin: %s',
+ 'PluginException:NullInstantiated' => 'ElggPlugin kan niet worden geïnitieerd met null. Je moet een GUID, een plugin ID of een pad opgeven.',
+ 'ElggPlugin:MissingID' => 'Plugin ID ontbreekt (guid %s)',
+ 'ElggPlugin:NoPluginPackagePackage' => 'Ontbrekend ElggPluginPackage voor plugin ID %s (guid %s)',
+ 'ElggPluginPackage:InvalidPlugin:MissingFile' => 'Ontbrekend bestand %s in package',
+ 'ElggPluginPackage:InvalidPlugin:InvalidDependency' => 'Ongeldig afhankelijkheid type "%s"',
+ 'ElggPluginPackage:InvalidPlugin:InvalidProvides' => 'Ongeldig biedt type "%s"',
+ 'ElggPluginPackage:InvalidPlugin:CircularDep' => 'Ongeldig %s afhankelijkheid "%s" in plugin %s. Plugins kunnen niet conflicteren met of afhankelijk zijn van iets dat ze beiden!',
+ 'ElggPlugin:Exception:CannotIncludeFile' => 'Kan %s niet laden voor plugin %s (guid: %s) in %s. Controleer rechten!',
+ 'ElggPlugin:Exception:CannotRegisterViews' => 'Kan de views map niet openen van plugin %s (guid: %s) in %s. Controleer rechten!',
+ 'ElggPlugin:Exception:CannotRegisterLanguages' => 'Kan de vertalingen niet registeren voor plugin %s (guid: %s) in %s. Controleer rechten!',
+ 'ElggPlugin:Exception:NoID' => 'Geen ID voor plugin guid %s!',
+ 'PluginException:ParserError' => 'Fout tijdens het lezen van de manifest met API versie %s in plugin %s',
+ 'PluginException:NoAvailableParser' => 'Kan geen parser vinden voor manifest API versie %s in plugin %s.',
+ 'PluginException:ParserErrorMissingRequiredAttribute' => 'Ontbrekend verplicht \'%s\' attribuut in manifest van plugin %s.',
+ 'ElggPlugin:Dependencies:Requires' => 'Vereist',
+ 'ElggPlugin:Dependencies:Suggests' => 'Adviseert',
+ 'ElggPlugin:Dependencies:Conflicts' => 'Conflicteert',
+ 'ElggPlugin:Dependencies:Conflicted' => 'Geconflicteerd',
+ 'ElggPlugin:Dependencies:Provides' => 'Biedt',
+ 'ElggPlugin:Dependencies:Priority' => 'Prioriteit',
+ 'ElggPlugin:Dependencies:Elgg' => 'Elgg versie',
+ 'ElggPlugin:Dependencies:PhpExtension' => 'PHP module: %s',
+ 'ElggPlugin:Dependencies:PhpIni' => 'PHP ini instelling: %s',
+ 'ElggPlugin:Dependencies:Plugin' => 'Plugin: %s',
+ 'ElggPlugin:Dependencies:Priority:After' => 'Na %s',
+ 'ElggPlugin:Dependencies:Priority:Before' => 'Voor %s',
+ 'ElggPlugin:Dependencies:Priority:Uninstalled' => '%s in niet geïnstalleerd',
+ 'ElggPlugin:Dependencies:Suggests:Unsatisfied' => 'Ontbreekt',
+ 'ElggPlugin:InvalidAndDeactivated' => '%s in een ongeldige plugin en is uitgeschakeld',
+ 'InvalidParameterException:MissingOwner' => 'Bestand %s (bestand guid: %s) (eigenaar guid: %d) mist een eigenaar!',
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => 'De filestore class %s voor bestand %u kon niet worden geladen',
+ 'InvalidParameterException:LibraryNotRegistered' => '%s in geen geregistreerde bibliotheek',
+ 'RegistrationException:EmptyPassword' => 'De wachtwoord velden kunnen niet leeg zijn',
+ 'RegistrationException:PasswordMismatch' => 'Wachtwoorden moeten gelijk zijn',
+ 'LoginException:BannedUser' => 'Je account is geblokkeerd hierdoor mag je niet aanmelden',
+ 'LoginException:UsernameFailure' => 'We konden je niet aanmelden. Controleer je gebruikersnaam.',
+ 'LoginException:PasswordFailure' => 'We konden je niet aanmelden. Controleer je wachtwoord.',
+ 'LoginException:AccountLocked' => 'Je account in geblokkeerd vanwege teveel ongeldige aanmeld pogingen.',
+ 'viewfailure' => 'Er is een interne fout in de view %s',
+ 'changebookmark' => 'Wijzig uw favoriet voor deze pagina',
+ 'loginusername' => 'Gebruikersnaam of e-mail',
+ 'widget:unavailable' => 'Je hebt deze widget al toegevoegd',
+ 'widget:numbertodisplay' => 'Aantal items om weer te geven',
+ 'widget:delete' => 'Verwijder %s',
+ 'widget:edit' => 'Bewerk deze widget',
+ 'widgets:add:success' => 'De widget is toegevoegd.',
+ 'widgets:add:failure' => 'De widget kon niet worden toegevoegd.',
+ 'widgets:move:failure' => 'De neiuwe widget positie kon niet worden opgeslagen.',
+ 'widgets:remove:failure' => 'De widget kan niet worden verwijderd',
+ 'collections:add' => 'Nieuwe lijst',
+ 'friends:collections:edited' => 'Lijst bijgewerkt',
+ 'friends:collection:edit_failed' => 'De lijst kon niet worden opgeslagen.',
+ 'avatar' => 'Avatar',
+ 'avatar:create' => 'Maak je avatar',
+ 'avatar:edit' => 'Bewerk avatar',
+ 'avatar:preview' => 'Voorbeeld',
+ 'avatar:upload' => 'Upload een nieuwe avatar',
+ 'avatar:current' => 'Huidige avatar',
+ 'avatar:crop:title' => 'Avatar bijsnijden',
+ 'avatar:upload:instructions' => 'Je avatar wordt weergegeven op verschillende plaatsen op de site. Je kunt je avatar zovaak als je wilt vervangen. (Ondersteunde bestandsformaten: GIF, JPG of PNG)',
+ 'avatar:create:instructions' => 'Klik en sleep hieronder een vierkant om je avatar aan te passen. Een voorbeeld zal hiernaast verschijnen. Als je tevreden bent met het voorbeeld klik op \'Maak avatar\'. Deze aangepaste versie zal worden gebruikt op verschillende plaatsen op de site.',
+ 'avatar:upload:success' => 'Avatar succesvol geüpload',
+ 'avatar:upload:fail' => 'Avatar upload mislukt',
+ 'avatar:resize:fail' => 'Schalen van de avatar mislukt',
+ 'avatar:crop:success' => 'Bijsnijden van de avatar succesvol',
+ 'avatar:crop:fail' => 'Bijsnijden van de avatar mislukt',
+ 'profile:edit' => 'Bewerk profiel',
+ 'profile:aboutme' => 'Over mij',
+ '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 gebruikersnaam',
+ 'profile:saved' => 'Je profiel is succesvol opgeslagen.',
+ 'admin:appearance:profile_fields' => 'Bewerk profiel velden',
+ 'profile:edit:default' => 'Bewerk profiel velden',
+ 'profile:label' => 'Profiel label',
+ 'profile:type' => 'Profiel type',
+ 'profile:editdefault:delete:fail' => 'Verwijderen standaard profiel item veld mislukt',
+ 'profile:editdefault:delete:success' => 'Standaard profiel item verwijderd!',
+ 'profile:defaultprofile:reset' => 'Standaard systeem profiel herstellen',
+ 'profile:resetdefault' => 'Standaard profiel herstellen',
+ 'profile:explainchangefields' => 'U kunt de bestaande profiel velden vervangen met uw eigen met behulp van het onderstaande formulier.
+
+Geef het nieuwe profiel veld een label, bijvoorbeeld, \'Favoriete team\', selecteer vervolgens het veld type (bijv. tekst, url, tags) en klik op de knop \'Toevoegen\'. Om de velden te sorteren sleep ze middels het handvat naast het label. Voor het bewerken van het label - klik op de tekst van het label om het bewerkbaar te maken.
+
+Op elk moment kunt u terugkeren naar het standaard profiel, maar u zult alle informatie die was ingevoerd in aangepaste velden op profiel pagina\'s verliezen.',
+ 'profile:editdefault:success' => 'Item succesvol toegevoegd aan het standaard profiel',
+ 'profile:editdefault:fail' => 'Standaard profiel kon niet worden opgeslagen',
+ 'link:view:all' => 'Bekijk alles',
+ 'river:friend:user:default' => '%s is nu bevriend met %s',
+ 'river:update:user:avatar' => '%s heeft een nieuwe avatar',
+ 'river:update:user:profile' => '%s heeft zijn profiel bijgewerkt',
+ 'river:ingroup' => 'in de group %s',
+ 'river:none' => 'Geen activiteit',
+ 'river:widget:title' => 'Activiteit',
+ 'river:widget:description' => 'Toon de laatste activiteit',
+ 'river:widget:type' => 'Type van activiteit',
+ 'river:widgets:friends' => 'Activiteit van vrienden',
+ 'river:widgets:all' => 'Alle site activiteiten',
+ 'registration:usernametooshort' => 'Je gebruikersnaam moet minimaal %u karakters lang zijn.',
+ 'registration:passwordtooshort' => 'Het wachtwoord moet minimaal %u karakters lang zijn.',
+ 'registration:invalidchars' => 'Sorry, je gebruikersnaam bevat het volgende ongeldige karakter: %s. De volgende karakters zijn niet toegestaan: %s',
+ 'user:current_password:label' => 'Huidige wachtwoord',
+ 'user:password:fail:incorrect_current_password' => 'Het opgegeven huidige wachtwoord is onjuist.',
+ 'walled_garden:welcome' => 'Welkom bij',
+ 'menu:page:header:administer' => 'Beheer',
+ 'menu:page:header:configure' => 'Configureer',
+ 'menu:page:header:develop' => 'Ontwikkel',
+ 'menu:page:header:default' => 'Andere',
+ 'admin:view_site' => 'Bekijk website',
+ 'admin:loggedin' => 'Aangemeld als %s',
+ 'admin:menu' => 'Menu',
+ 'admin:unknown_section' => 'Ongeldige admin sectie.',
+ 'admin:statistics:overview' => 'Overzicht',
+ 'admin:appearance' => 'Uiterlijk',
+ 'admin:administer_utilities' => 'Hulpmiddelen',
+ 'admin:develop_utilities' => 'Hulpmiddelen',
+ 'admin:users' => 'Gebruikers',
+ 'admin:users:online' => 'Op dit moment online',
+ 'admin:users:newest' => 'Nieuwste',
+ 'admin:users:add' => 'Nieuwe gebruiker',
+ 'admin:users:description' => 'Dit beheer paneel maakt het mogelijk om gebruikers instellingen te wijzigen. Kies hieronder een optie om te beginnen.',
+ 'admin:users:adduser:label' => 'Klik hier om een nieuwe gebruiker toe te voegen...',
+ 'admin:users:opt:linktext' => 'Configureer gebruikers...',
+ 'admin:users:opt:description' => 'Configureer gebruikers en account informatie',
+ 'admin:users:find' => 'Zoek',
+ 'admin:settings' => 'Instellingen',
+ 'admin:settings:basic' => 'Basis instellingen',
+ 'admin:settings:advanced' => 'Geavanceerde instellingen',
+ 'admin:dashboard' => 'Dashboard',
+ 'admin:widget:online_users' => 'Online gebruikers',
+ 'admin:widget:online_users:help' => 'Toont een lijst met gebruikers dit nu op de site zijn',
+ 'admin:widget:new_users' => 'Nieuwe gebruikers',
+ 'admin:widget:new_users:help' => 'Toon de nieuwste gebruikers',
+ 'admin:widget:content_stats' => 'Inhoud statistieken',
+ 'admin:widget:content_stats:help' => 'Blijf op de hoogte van de inhoud die door de gebruikers is gemaakt',
+ 'widget:content_stats:type' => 'Inhoud type',
+ 'widget:content_stats:number' => 'Aantal',
+ 'admin:widget:admin_welcome' => 'Welkom',
+ 'admin:widget:admin_welcome:help' => 'Een korte introductie voor het beheer deel van Elgg',
+ 'admin:widget:admin_welcome:intro' => 'Welkom in Elgg! Op dit moment kijk je naar het beheerders dashboard. Dit is makkelijk om te zien wat er op je site gebeurt.',
+ 'admin:widget:admin_welcome:admin_overview' => 'Navigatie door het beheerders gedeelte is mogelijk via de menu\'s aan e rechterkant. Het is opgedeeld in drie secties:
+<dl>
+<dt>Beheer</dt><dd>Dagelijkse taken zoals de controle op gemelde inhoud, het controleren wie er online is, en bekijken van statistieken.</dd>
+<dt>Configureer</dt><dd>Gelegenheid taken, zoals het instellen van de naam van de site of het activeren van een plugin.</dd>
+<dt>Ontwikkel</dt><dd>Voor ontwikkelaars die plugin maken of themes ontwikkelen. (Vereist een ontwikkelaars plugin.)</dd>
+</dl>',
+ 'admin:widget:admin_welcome:outro' => '<br>Controleer de links onderaan de pagine voor meer informatie en bedankt voor het gebruik van Elgg!',
+ 'admin:footer:faq' => 'Beheerders FAQ',
+ 'admin:footer:manual' => 'Beheerders handleiding',
+ 'admin:footer:community_forums' => 'Elgg community forums',
+ 'admin:footer:blog' => 'Elgg blog',
+ 'admin:plugins:category:all' => 'Alle plugins',
+ 'admin:plugins:category:active' => 'Actieve plugins',
+ 'admin:plugins:category:inactive' => 'Uitgeschakelde plugins',
+ 'admin:plugins:category:admin' => 'Beheer',
+ 'admin:plugins:category:bundled' => 'Meegeleverd',
+ 'admin:plugins:category:nonbundled' => 'Niet meegeleverd',
+ 'admin:plugins:category:content' => 'Inhoud',
+ 'admin:plugins:category:development' => 'Ontwikkelaars',
+ 'admin:plugins:category:enhancement' => 'Uitbreidingen',
+ 'admin:plugins:category:api' => 'Services/API',
+ 'admin:plugins:category:communication' => 'Communicatie',
+ 'admin:plugins:category:security' => 'Beveiliging en Spam',
+ 'admin:plugins:category:social' => 'Sociaal',
+ 'admin:plugins:category:multimedia' => 'Multimedia',
+ 'admin:plugins:category:theme' => 'Themes',
+ 'admin:plugins:category:widget' => 'Widgets',
+ 'admin:plugins:category:utility' => 'Hulpmiddelen',
+ 'admin:plugins:sort:priority' => 'Prioriteit',
+ 'admin:plugins:sort:alpha' => 'Alfabetisch',
+ 'admin:plugins:sort:date' => 'Nieuwste',
+ 'admin:plugins:markdown:unknown_plugin' => 'Onbekende plugin.',
+ 'admin:plugins:markdown:unknown_file' => 'Onbekend bestand.',
+ 'admin:notices:could_not_delete' => 'Kon melding niet verwijderen',
+ 'admin:options' => 'Beheer opties',
+ 'admin:plugins:activate_all' => 'Alles activeren',
+ 'admin:plugins:deactivate_all' => 'Alles deactiveren',
+ 'admin:plugins:activate' => 'Activeren',
+ 'admin:plugins:deactivate' => 'Deactiveren',
+ 'admin:plugins:label:categories' => 'Categorieën',
+ 'admin:plugins:label:location' => 'Locatie',
+ 'admin:plugins:label:dependencies' => 'Afhankelijkheden',
+ 'admin:plugins:warning:elgg_version_unknown' => 'Deze plugin gebruikt een oud manifest bestand en heeft geen Elgg versie gedefinieerd. Het zal waarschijnlijk niet werken!',
+ 'admin:plugins:warning:unmet_dependencies' => 'Deze plugin heeft onvervulde afhankelijkheden en kan niet worden geactiveerd. Controleer de afhankelijkheden onder meer info.',
+ 'admin:plugins:warning:invalid' => '%s is geen geldige Elgg plugin. Controleer <a href="http://docs.elgg.org/Invalid_Plugin">de Elgg documentatie</a> voor handige tips.',
+ 'admin:plugins:cannot_activate' => 'kan niet activeren',
+ 'admin:plugins:set_priority:yes' => '%s herordend.',
+ 'admin:plugins:set_priority:no' => 'Herordenen mislukt voor %s.',
+ 'admin:plugins:set_priority:no_with_msg' => 'Herordenen mislukt voor %s. Fout: %s',
+ 'admin:plugins:deactivate:yes' => '%s uitgeschakeld.',
+ 'admin:plugins:deactivate:no' => '%s kon niet worden uitgeschakeld.',
+ 'admin:plugins:deactivate:no_with_msg' => '%s kon niet worden uitgeschakeld. Fout: %s',
+ 'admin:plugins:activate:yes' => '%s geactiveerd.',
+ 'admin:plugins:activate:no' => '%s kon niet worden geactiveerd.',
+ 'admin:plugins:activate:no_with_msg' => '%s kon niet worden uitgeschakeld. Fout: %s',
+ 'admin:plugins:categories:all' => 'Alle categorieën',
+ 'admin:plugins:plugin_website' => 'Plugin website',
+ 'admin:plugins:author' => '%s',
+ 'admin:plugins:version' => 'Versie %s',
+ 'admin:plugin_settings' => 'Plugin instellingen',
+ 'admin:plugins:warning:unmet_dependencies_active' => 'Deze plugin is geactiveerd maar heeft onvervulde afhankelijkheden. Je kunt problemen ervaren. Bekijk \'meer informatie\' hieronder voor details',
+ 'admin:plugins:dependencies:type' => 'Type',
+ 'admin:plugins:dependencies:name' => 'Naam',
+ 'admin:plugins:dependencies:expected_value' => 'Geteste waarde',
+ 'admin:plugins:dependencies:local_value' => 'Echte waarde',
+ 'admin:plugins:dependencies:comment' => 'Commentaar',
+ 'admin:user:self:ban:no' => 'Je kunt jezelf niet blokkeren',
+ 'admin:user:delete:yes' => 'De gebruiker %s is verwijderd',
+ 'admin:user:self:delete:no' => 'Je kunt jezelf niet verwijderen',
+ 'admin:user:self:removeadmin:no' => 'Je kunt je eigen beheersrechten niet afnemen.',
+ 'admin:appearance:menu_items' => 'Menu items',
+ 'admin:menu_items:configure' => 'Configureer hoofdmenu items',
+ 'admin:menu_items:description' => 'Selecteer welke menu items je als hoofd items wilt zien. Ongebruikte items zullen worden toegevoegd aan "Meer" aan het einde van de lijst.',
+ 'admin:menu_items:hide_toolbar_entries' => 'Verwijder links uit het menu?',
+ 'admin:menu_items:saved' => 'Menu items opgeslagen.',
+ 'admin:add_menu_item' => 'Voeg een eigen menu item toe',
+ 'admin:add_menu_item:description' => 'Vul de Weergave naam en URL in om een eigen menu item toe te voegen aan het navigatie menu.',
+ 'admin:appearance:default_widgets' => 'Standaard widgets',
+ 'admin:default_widgets:unknown_type' => 'Onbekend widget type',
+ 'admin:default_widgets:instructions' => 'Plaats, verwijder, positioneer en configureer standaard widgets voor de geselecteerde widget pagina. Deze wijzigingen hebben alleen effect op nieuwe gebruikers.',
+ 'river:all' => 'Alle site activiteit',
+ 'river:mine' => 'Mijn activiteit',
+ 'river:friends' => 'Activiteit van vrienden',
+ 'river:select' => 'Toon %s',
+ 'river:comments:more' => '+%u meer',
+ 'river:generic_comment' => 'reageerde op %s %s',
+ 'friends:widget:description' => 'Toont een aantal van je vrienden.',
+ 'reset' => 'Reset',
+ 'preview' => 'Voorbeeld',
+ 'banned' => 'Geblokkeerd',
+ 'comment' => 'Reageer',
+ 'upgrade' => 'Upgrade',
+ 'sort' => 'Sorteer',
+ 'filter' => 'Filter',
+ 'new' => 'Nieuw',
+ 'add' => 'Voeg toe',
+ 'create' => 'Aanmaken',
+ 'activity' => 'Activiteit',
+ 'members' => 'Leden',
+ 'mine' => 'Mijn',
+ 'none' => 'geen',
+ 'tagcloud' => 'Tag cloud',
+ 'tagcloud:allsitetags' => 'Alle site tags',
+ 'edit:this' => 'Bewerk dit',
+ 'delete:this' => 'Verwijder dit',
+ 'comment:this' => 'Reageer hierop',
+ 'installation:registration:description' => 'Registratie is standaard ingeschakeld. Je kunt dit uitschakelen als je niet wenst dat gebruikers zichzelf kunnen registreren.',
+ 'installation:registration:label' => 'Nieuwe gebruikers mogen zich registreren',
+ 'installation:walled_garden:description' => 'Maak van deze site een privé netwerk. Dit zorgt ervoor dat niet aangemelde gebruikers niets kunnen zien van deze site, tenzij het specifiek publiekelijk is gedeeld.',
+ 'installation:walled_garden:label' => 'Beperk pagina\'s tot aangemelde gebruikers',
+ 'upgrade:unable_to_upgrade' => 'Upgrade niet mogelijk.',
+ 'upgrade:unable_to_upgrade_info' => 'Deze installatie kan niet worden geüpgrade omdat er legacy views zijn ontdekt in de Elgg core views map. Deze views zijn verouderd en moeten worden verwijderd om Elgg correct te laten functioneren. Als je geen wijzigingen hebt gemaakt aan de Elgg core kun je de map verwijderen en vervangen met de inhoud uit de laatste versie van Elgg, welke gevonden kan worden op <a href="http://elgg.org">elgg.org</a>.<br><br>
+
+Als je meer gedetailleerde instructie, ga naar de <a href="http://docs.elgg.org/wiki/Upgrading_Elgg">Upgrading Elgg documentatie</a>. Als je hulp nodig hebt, plaats je vraag op de <a href="http://community.elgg.org/pg/groups/discussion/">Community Support Forums</a>.',
+ 'update:twitter_api:deactivated' => 'Twitter API (voorheen Twitter Service) is uitgeschakeld tijdens de upgrade. Activeer deze zelf weer als het nodig is.',
+ 'update:oauth_api:deactivated' => 'OAuth API (voorheen OAuth Lib) is uitgeschakeld tijdens de upgrade. Activeer deze zelf weer als het nodig is.',
+ 'deprecated:function' => '%s() is vervangen door %s()',
+ 'generic_comments:post' => 'Plaats reactie',
+ 'generic_comments:latest' => 'Laatste reacties',
+ 'generic_comment:none' => 'Geen reacties',
+ 'byline' => 'Door %s',
+ 'tags:site_cloud' => 'Site tag cloud',
+ 'js:security:token_refresh_failed' => 'Kan geen verbinding maken met %s. Je kunt problemen ervaren tijdens het opslaan van content.',
+ 'js:security:token_refreshed' => 'Verbinding met %s is hersteld!',
+ 'membershiprequired' => 'Je moet lid zijn van deze groep om deze pagina te kunnen bekijken',
+ 'loggedinrequired' => 'je moet zijn aangemeld om die pagina te kunnen bekijken.',
+ 'adminrequired' => 'Je moet een administrator zijn om die pagina te kunnen bekijken',
+ 'InvalidParameterException:APIMethodOrFunctionNotSet' => 'Methode of functie niet ingesteld in de \'call\' in expose_method()',
+ 'InvalidParameterException:APIParametersArrayStructure' => 'Onjuiste parameter array structuur om gebruikt te kunnen worden in \'expose mothod\' \'%s\'',
+ 'InvalidParameterException:UnrecognisedHttpMethod' => 'Onbekende http methode %s voor api methode \'%s\'',
+ 'APIException:APIAuthenticationFailed' => 'Methode aanroep mislukt op API Authenticatie',
+ 'APIException:UserAuthenticationFailed' => 'Methode aanroep mislukt op Gebruiker Authenticatie',
+ 'APIException:FunctionDoesNotExist' => 'Functie voor methode \'%s\' is niet aan te roepen',
+ 'APIException:BadAPIKey' => 'Verkeerde API sleutel',
+ 'APIException:MissingNonce' => 'Ontbrekende X-Elgg-nonce header',
+ 'pageownerunavailable' => 'Waarschuwing: De pagina eigenaar %d is niet toegankelijk!',
+ 'groups:searchtitle' => 'Zoeken naar groepen: %s',
+ 'group:search:startblurb' => 'Groepen met \'%s\':',
+ 'group:search:finishblurb' => 'Om meer te zien, klik hier',
+ 'search:go' => 'Ga',
+ 'userpicker:only_friends' => 'Alleen vrienden',
+ 'user:resetpassword:unknown_user' => 'Ongeldige gebruiker.',
+ 'user:resetpassword:reset_password_confirm' => 'Het herstellen van je wachtwoord stuurt een e-mail met het nieuwe wachtwoord naar je geregistreerde e-mail adres',
+ 'admin:user:label:searchbutton' => 'Zoek',
+ 'untitled' => 'Geen titel',
+ 'help' => 'Help',
+ 'send' => 'Verstuur',
+ 'post' => 'Plaats',
+ 'submit' => 'Verstuur',
+ 'site' => 'Website',
+ 'friendlytime:date_format' => 'j F Y @ G:i',
+ 'installation:debug:none' => 'Debug mode uitschakelen (aanbevolen)',
+ 'installation:debug:error' => 'Alleen kritieke fouten weergeven',
+ 'installation:debug:warning' => 'Fouten en waarschuwingen weergeven',
+ 'installation:debug:notice' => 'Log alle fouten, waarschuwingen en mededelingen',
+ 'welcome:user' => 'Welkom %s',
+ 'tag_names:tags' => 'Tags',
+ 'item:site' => 'Sites',
+ 'login' => 'Aanmelden',
+ 'loginok' => 'Je bent aangemeld.',
+ 'loginerror' => 'We konden je niet aanmelden. Dit kan komen omdat je account nog niet is gevalideerd of je hebt een verkeerde combinatie van gebruikersnaam en wachtwoord gebruikt. Controlleer of je gebruikersnaam en wachtwoord en probeer het nogmaals.',
+ 'logout' => 'Afmelden',
+ 'logoutok' => 'Je bent afgemeld.',
+ 'logouterror' => 'We konden je niet afmelden. Probeer het nogmaals.',
+ 'exception:title' => 'Welkom bij Elgg.',
+ 'actionundefined' => 'De gevraagde actie (%s) is niet gedefineerd in het systeem.',
+ 'actionloggedout' => 'Sorry, je kunt deze actie niet uivoeren als je bent afgemeld.',
+ 'notfound' => 'Geen resultaten gevonden.',
+ 'SecurityException:Codeblock' => 'Toegang tot het uitvoeren van \'privileged code block\' is geweigerd',
+ 'DatabaseException:NoConnect' => 'Elgg kon de database \'%s\' niet selecteren, controlleer of de database is aangemaakt en de toegang geregeld is.',
+ 'SecurityException:FunctionDenied' => 'Toegang tot prive functie \'%s\' is geweigerd.',
+ 'DatabaseException:DBSetupIssues' => 'Er waren een aantal problemen: ',
+ 'DatabaseException:ScriptNotFound' => 'Elgg kon het gevraagde database script niet vinden in %s.',
+ 'IOException:FailedToLoadGUID' => 'Het laden van nieuw %s voor GUID: %d is mislukt',
+ 'InvalidParameterException:NonElggObject' => 'Er wordt een non-ElggObject aan een ElggObject constructor gegeven!',
+ 'InvalidParameterException:UnrecognisedValue' => 'Onherkenbare waarde aan de contructor gegeven.',
+ 'InvalidClassException:NotValidElggStar' => 'GUID:%d is geen geldig %s',
+ 'InvalidParameterException:NonElggUser' => 'Er wordt een non-ElggUser aan een ElggUser constructor gegeven!',
+ 'InvalidParameterException:NonElggSite' => 'Er wordt een non-ElggSite aan een ElggSite constructor gegeven!',
+ 'InvalidParameterException:NonElggGroup' => 'Er wordt een non-ElggGroup aan een ElggGroup constructor gegeven!',
+ 'IOException:UnableToSaveNew' => 'Opslaan van nieuw %s mislukt',
+ 'InvalidParameterException:GUIDNotForExport' => 'GUID is niet gespecificeerd tijdens export, dit mag nooit gebeuren.',
+ 'InvalidParameterException:NonArrayReturnValue' => 'Entity serialisation functie leverde een non-array resultaat op',
+ 'ConfigurationException:NoCachePath' => 'Cache pad ingesteld op leeg!',
+ 'IOException:NotDirectory' => '%s is geen directory.',
+ 'IOException:BaseEntitySaveFailed' => 'Het opslaan van de basis entity gegevens voor het nieuwe object is mislukt!',
+ 'InvalidParameterException:UnexpectedODDClass' => 'import() leverde een onverwachte ODD class',
+ 'InvalidParameterException:EntityTypeNotSet' => 'Entity type moet zijn ingesteld.',
+ 'ClassException:ClassnameNotClass' => '%s is geen %s.',
+ 'ClassNotFoundException:MissingClass' => 'Class \'%s\' was niet gevonden, ontbrekende plugin?',
+ 'InstallationException:TypeNotSupported' => 'Type %s is niet ondersteund. Dit wijst op een fout in de installatie, waarschijnlijk veroorzaakt door een onvoltooide upgrade.',
+ 'ImportException:ImportFailed' => 'Kon element %d niet importeren',
+ 'ImportException:ProblemSaving' => 'Er was een probleem tijden het opslaan van %s',
+ 'ImportException:NoGUID' => 'Nieuwe entity aangemaakt, maar heeft geen GUID. Dit mag niet gebeuren.',
+ 'ImportException:GUIDNotFound' => 'Entity \'%d\' kon niet gevonden worden.',
+ 'ImportException:ProblemUpdatingMeta' => 'Er was een probleem tijdens het bijwerken van \'%s\' voor entity \'%d\'',
+ 'ExportException:NoSuchEntity' => 'Geen entity GUID: %d',
+ 'ImportException:NoODDElements' => 'Geen OpenDD elementen gevonden in de import gegevens, import mislukt.',
+ 'ImportException:NotAllImported' => 'Niet alle elementen ge&iuml;mporteerd.',
+ 'InvalidParameterException:UnrecognisedFileMode' => 'Onbekende bestands mode \'%s\'',
+ 'IOException:CouldNotMake' => 'Kon %s niet aanmaken',
+ 'IOException:MissingFileName' => 'Je moet een naam opgeven voor het openen van een bestand.',
+ 'NotificationException:NoNotificationMethod' => 'Geen berichtgevingsmethode gespecificeerd.',
+ 'NotificationException:NoHandlerFound' => 'Geen handler gevonden voor \'%s\' of het was niet aan te roepen.',
+ 'NotificationException:ErrorNotifyingGuid' => 'Er was een fout tijdens de berichtgeving naar %d',
+ 'NotificationException:NoEmailAddress' => 'Kon het e-mail adress niet verkrijgen van GUID: %d',
+ 'NotificationException:MissingParameter' => 'Er ontbreekt een vereiste parameter, \'%s\'',
+ 'DatabaseException:WhereSetNonQuery' => 'WHERE set bevat non WhereQueryComponent',
+ 'DatabaseException:SelectFieldsMissing' => 'Ontbrekende velden in een SELECT stijl query',
+ 'DatabaseException:UnspecifiedQueryType' => 'Onbekend of ongespecificeerd query type.',
+ 'DatabaseException:NoTablesSpecified' => 'Geen tabbelen gespecificeer voor query.',
+ 'DatabaseException:NoACL' => 'Geen Access Control aangeleverd aan query',
+ 'InvalidParameterException:NoEntityFound' => 'Geen Entity gevonden, of het bestaat niet of je hebt er geen toegang toe.',
+ 'InvalidParameterException:GUIDNotFound' => 'GUID: %s kon niet worden gevonden, of je hebt er geen toegang toe.',
+ 'InvalidParameterException:IdNotExistForGUID' => 'Sorry, \'%s\' bestaat niet voor GUID: %d',
+ 'InvalidParameterException:CanNotExportType' => 'Sorry, ik weet niet hoe \'%s\' moet worden ge&euml;xporteerd',
+ 'InvalidParameterException:NoDataFound' => 'Kon geen data vinden.',
+ 'InvalidParameterException:DoesNotBelong' => 'Behoord niet tot Entity.',
+ 'InvalidParameterException:DoesNotBelongOrRefer' => 'Behoord niet tot Entity of refereerd aan Entity.',
+ 'InvalidParameterException:MissingParameter' => 'Ongeldige parameter, je moet een GUID opgeven.',
+ 'SecurityException:APIAccessDenied' => 'Sorry, toegang tot de API is uitgeschakeld door de beheerder.',
+ 'SecurityException:NoAuthMethods' => 'Geen authenticatie methoden gevonden die deze API aanvraag kon authoriseren.',
+ 'APIException:ApiResultUnknown' => 'API Resultaat is van een onbekend type, dit mag nooit gebeuren.',
+ 'ConfigurationException:NoSiteID' => 'Site ID was niet gedefineerd.',
+ 'APIException:MissingParameterInMethod' => 'Ontbrekende parameter %s in methode %s',
+ 'APIException:ParameterNotArray' => '%s lijkt geen array te zijn.',
+ 'APIException:UnrecognisedTypeCast' => 'Onbekend type in cast %s voor variabele \'%s\' in methode \'%s\'',
+ 'APIException:InvalidParameter' => 'Ongeldige parameter gevonden voor \'%s\' in methode \'%s\'.',
+ 'APIException:FunctionParseError' => '%s(%s) heeft een parsing fout.',
+ 'APIException:FunctionNoReturn' => '%s(%s) retourneerde geen waarde.',
+ 'SecurityException:AuthTokenExpired' => 'Authenticatie token ontbreekt, ongeldig of verlopen.',
+ 'CallException:InvalidCallMethod' => '%s moet worden aangeroepen met \'%s\'',
+ 'APIException:MethodCallNotImplemented' => 'Methode aanroep \'%s\' is niet ge&iuml;mplementeerd.',
+ 'APIException:AlgorithmNotSupported' => 'Algoritme \'%s\' wordt niet ondersteund of is uitgeschakeld.',
+ 'ConfigurationException:CacheDirNotSet' => 'Cache directory \'cache_path\' niet ingesteld.',
+ 'APIException:NotGetOrPost' => 'Request methode moet GET of POST zijn',
+ 'APIException:MissingAPIKey' => 'Onbrekende X-Elgg-apikey HTTP header',
+ 'APIException:MissingHmac' => 'Onbrekende X-Elgg-hmac header',
+ 'APIException:MissingHmacAlgo' => 'Onbrekende X-Elgg-hmac-algo header',
+ 'APIException:MissingTime' => 'Onbrekende X-Elgg-time header',
+ 'APIException:TemporalDrift' => 'X-Elgg-time is te ver in het verleden of toekomst. Epoch fout.',
+ 'APIException:NoQueryString' => 'Geen query string opgegeven',
+ 'APIException:MissingPOSTHash' => 'Onbrekende X-Elgg-posthash header',
+ 'APIException:MissingPOSTAlgo' => 'Onbrekende X-Elgg-posthash_algo header',
+ 'APIException:MissingContentType' => 'Onbrekend content type voor POST data',
+ 'SecurityException:InvalidPostHash' => 'POST data hash is ongeldig - Verwacht %s naar kreeg %s.',
+ 'SecurityException:DupePacket' => 'Packet signature al gezien.',
+ 'SecurityException:InvalidAPIKey' => 'Ongeldige of ontbrekende API Key.',
+ 'NotImplementedException:CallMethodNotImplemented' => 'Aanroep methode \'%s\' is op dit moment niet ondersteund.',
+ 'NotImplementedException:XMLRPCMethodNotImplemented' => 'XML-RPC methode aanroep \'%s\' niet ge&iuml;mplementeerd.',
+ 'InvalidParameterException:UnexpectedReturnFormat' => 'Aanroep van methode \'%s\' gaf een onverwacht resultaat.',
+ 'CallException:NotRPCCall' => 'Aanroep lijkt geen geldige XML-RPC aanroep',
+ 'PluginException:NoPluginName' => 'De plugin naam kon niet worden gevonden',
+ 'SecurityException:authenticationfailed' => 'Gebruiker kon niet worden geautoriseerd',
+ 'CronException:unknownperiod' => '%s is geen geldige periode.',
+ 'SecurityException:deletedisablecurrentsite' => 'Je kunt de Site die je op dit moment bekijkt niet verwijderen of uitschakelen!',
+ 'memcache:notinstalled' => 'PHP memcache module niet ge&iuml;nstalleerd, je moet php5-memcache installeren',
+ 'memcache:noservers' => 'Geen memcache servers gedefineerd, vul de $CONFIG->memcache_servers variabele',
+ 'memcache:versiontoolow' => 'Memcache vereist minimaal versie %s, je gebruikt %s',
+ 'memcache:noaddserver' => 'Multiple server support uitgeschakeld, je moet misschien de PECL memcache library bijwerken',
+ 'deprecatedfunction' => 'Waarschuwing: Deze code gebruikt de deprecated functies \'%s\' en is niet compatibel met deze versie van Elgg',
+ 'system.api.list' => 'Toon alle beschikbare API calls op het systeem.',
+ 'auth.gettoken' => 'Deze API call laat een gebruiker zich aanmelden. Retourneerd een authenticatie token dat gebruikt kan worden in plaats van gebruikersnaam en wachtwoord voor verdere authenticatie calls.',
+ 'name' => 'Weergave naam',
+ 'email' => 'E-mail adres',
+ 'username' => 'Gebruikersnaam',
+ 'password' => 'Wachtwoord',
+ 'passwordagain' => 'Wachtwoord (nogmaals voor verificatie)',
+ 'admin_option' => 'Maak deze gebruiker admin?',
+ 'PRIVATE' => 'Prive',
+ 'LOGGED_IN' => 'Aangemelde gebruikers',
+ 'PUBLIC' => 'Publiek',
+ 'access:friends:label' => 'Vrienden',
+ 'access' => 'Toegang',
+ 'dashboard' => 'Dashboard',
+ 'dashboard:nowidgets' => 'Je Dashboard is jou toegangsweg tot de Site. Klik op \'Bewerk pagina\' om Widgets toe te voegen die je op de hoogte houden van content en je leven binnen de Site.',
+ 'widgets:add' => 'Voeg Widgets toe aan je pagina',
+ 'widgets:add:description' => 'Kies de Widgets die je wilt toevoegen aan je pagina, door ze te slepen uit de <b>Widget gallerij</b> (rechts) naar één van de drie beschikbare Widget kolomen en positioneer ze zoals je ze graag wilt weergeven.<br><br>Om een Widget te verwijderen sleep het terug naar de <b>Widget gallerij</b>.',
+ 'widgets:position:fixed' => '(Vaste positie op pagina)',
+ 'widgets' => 'Widgets',
+ 'widget' => 'Widget',
+ 'item:object:widget' => 'Widgets',
+ 'widgets:save:success' => 'De Widget was succesvol opgeslagen.',
+ 'widgets:save:failure' => 'Er was een fout tijdens het opslaan van je Widget. Probeer het nog een keer.',
+ 'group' => 'Groep',
+ 'item:group' => 'Groepen',
+ 'user' => 'Gebruiker',
+ 'item:user' => 'Gebruikers',
+ 'riveritem:single:user' => 'een gebruiker',
+ 'riveritem:plural:user' => 'sommige gebruikers',
+ 'friends' => 'Vrienden',
+ 'friends:yours' => 'Jouw vrienden',
+ 'friends:owned' => '%s\'s vrienden',
+ 'friend:add' => 'Voeg toe als vriend',
+ 'friend:remove' => 'Verwijder vriend',
+ 'friends:add:successful' => 'Je hebt %s succesvol toegevoegd als vriend.',
+ 'friends:add:failure' => 'We konden %s niet toevoegen als vriend. Probeer het nogmaals.',
+ 'friends:remove:successful' => 'Je hebt %s succesvol verwijderd als vriend.',
+ 'friends:remove:failure' => 'We konden %s niet verwijderen als vriend. Probeer het nogmaals.',
+ 'friends:none' => 'Deze gebruiker heeft nog niemand toegevoegd als vriend.',
+ 'friends:none:you' => 'Je hebt nog niemand toegevoegd als vriend! Zoek naar jou intresses om mensen te vinden om toe te voegen.',
+ 'friends:none:found' => 'Geen vrienden gevonden.',
+ 'friends:of:none' => 'Nog niemand heeft deze gebruiker toegevoegd als vriend.',
+ 'friends:of:none:you' => 'Nog niemand heeft jou als vriend toegevoegd. Begin met het toevoegen van content en vul je Profiel aan om beter te vinden te zijn!',
+ 'friends:of:owned' => 'Mensen die %s als vriend hebben',
+ 'friends:num_display' => 'Aantal vrienden om weer te geven',
+ 'friends:icon_size' => 'Avatar grootte',
+ 'friends:tiny' => 'Klein',
+ 'friends:small' => 'Normaal',
+ 'friends:of' => 'Vrienden van',
+ 'friends:collections' => 'Vriendengroepen',
+ 'friends:collections:add' => 'Nieuwe vriendengroep',
+ 'friends:addfriends' => 'Voeg vrienden toe',
+ 'friends:collectionname' => 'Groepsnaam',
+ 'friends:collectionfriends' => 'Vrienden in de vriendengroep',
+ 'friends:collectionedit' => 'Bewerk deze vriendegroep',
+ 'friends:nocollections' => 'Je hebt nog geen vriendengroepen.',
+ 'friends:collectiondeleted' => 'Je vriendengroep is verwijderd.',
+ 'friends:collectiondeletefailed' => 'We konden je vriendengroep niet verwijderen. Mogelijk heb je geen toegang of er was een ander probleem.',
+ 'friends:collectionadded' => 'Je vriendengroep was succesvol aangemaakt',
+ 'friends:nocollectionname' => 'Je moet je vriendengroep een naam geven voordat die opgeslagen kan worden.',
+ 'friends:collections:members' => 'Groepsleden',
+ 'friends:collections:edit' => 'Bewerk groep',
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'feed:rss' => 'Abonneer op RSS feed',
+ 'link:view' => 'bekijk link',
+ 'river' => 'River',
+ 'river:noaccess' => 'Je hebt geen toegang tot dit item.',
+ 'river:posted:generic' => '%s plaatste',
+ 'plugins:settings:save:ok' => 'De instellingen voor de %s Plugin zijn succesvol opgeslagen.',
+ 'plugins:settings:save:fail' => 'Er is een fout opgetreden tijdens het opslaan van de instellingen voor de %s Plugin.',
+ 'plugins:usersettings:save:ok' => 'Gebruikers instellingen voor de %s Plugin zijn succesvol opgeslagen.',
+ 'plugins:usersettings:save:fail' => 'Er is een fout opgetreden tijden het opslaan van de gebruikersinstellingen van de %s Plugin.',
+ 'item:object:plugin' => 'Plugin configuratie instellingen',
+ 'notifications:usersettings' => 'Berichtgevingsinstellingen',
+ 'notifications:methods' => 'Geef aan welke methode je wilt toestaan.',
+ 'notifications:usersettings:save:ok' => 'Je berichtgevingsinstellingen zijn succesvol opgeslagen.',
+ 'notifications:usersettings:save:fail' => 'Er is een fout opgetreden tijdens het opslaan van je berichtgevingsinstellingen.',
+ 'user.notification.get' => 'Geef de berichtgevingsinstellingen voor de opgegeven gebruiker terug.',
+ 'user.notification.set' => 'Stel de berichtgevingsinstellingen in voor de opgegegeven gebruiker.',
+ 'search' => 'Zoeken',
+ 'searchtitle' => 'Zoeken: %s',
+ 'users:searchtitle' => 'Zoeken naar gebruikers: %s',
+ 'advancedsearchtitle' => '%s gevonden met %s',
+ 'next' => 'Volgende',
+ 'previous' => 'Vorige',
+ 'viewtype:change' => 'Wijzig weergave methode',
+ 'viewtype:list' => 'Lijst weergave',
+ 'viewtype:gallery' => 'Gallerij',
+ 'tag:search:startblurb' => 'Items gevonden met \'%s\':',
+ 'user:search:startblurb' => 'Gebruikers gevonden met \'%s\':',
+ 'user:search:finishblurb' => 'Om meer te zien, klik hier.',
+ 'account' => 'Account',
+ 'settings' => 'Instellingen',
+ 'tools' => 'Tools',
+ 'register' => 'Registreer',
+ 'registerok' => 'Je hebt je succesvol geregistreerd voor %s.',
+ 'registerbad' => 'Je registratie is niet gelukt. De gebruikersnaam kan al bestaan, je wachtwoord kwam niet overeen of je gebruikersnaam of wachtwoord was te kort.',
+ 'registerdisabled' => 'Registratie is uitgeschakeld door de Site Administrator',
+ 'registration:notemail' => 'Het opgegeven e-mail adres lijkt geen geldig e-mail adres te zijn.',
+ 'registration:userexists' => 'Deze gebruikersnaam bestaat al',
+ 'registration:dupeemail' => 'Dit e-mail adres is al geregistreerd.',
+ 'registration:emailnotvalid' => 'Sorry, het opgegeven e-mail adres is ongeldig op dit systeem',
+ 'registration:passwordnotvalid' => 'Sorry, het opgegevens wachtwoord is ongeldig op dit systeem',
+ 'registration:usernamenotvalid' => 'Sorry, de opgegeven gebruikersnaam is ongeldig op dit systeem',
+ 'adduser' => 'Gebruiker toevoegen',
+ 'adduser:ok' => 'Nieuwe gebruiker is succesvol aangemaakt.',
+ 'adduser:bad' => 'De nieuwe gebruiker kon niet worden aangemaakt.',
+ 'user:set:name' => 'Account naam instellingen',
+ 'user:name:label' => 'Je naam',
+ 'user:name:success' => 'Je naam is succesvol gewijzigd.',
+ 'user:name:fail' => 'Er is een fout opgetreden tijdens het wijzigen van je naam.',
+ 'user:set:password' => 'Account wachtwoord',
+ 'user:password:label' => 'Je nieuwe wachtwoord',
+ 'user:password2:label' => 'Nogmaals je nieuwe wachtwoord',
+ 'user:password:success' => 'Wachtwoord gewijzigd',
+ 'user:password:fail' => 'Er is een fout opgetreden tijdens het wijzigen van je wachtwoord.',
+ 'user:password:fail:notsame' => 'De twee wachtwoorden komen niet overeen!',
+ 'user:password:fail:tooshort' => 'Het wachtwoord is te kort!',
+ 'user:set:language' => 'Taal instellingen',
+ 'user:language:label' => 'Jouw taal',
+ 'user:language:success' => 'Je taal instellingen zijn gewijzigd.',
+ 'user:language:fail' => 'Er is een fout opgetreden tijdens het wijzigen van je taal instellingen.',
+ 'user:username:notfound' => 'Gebruikersnaam %s niet gevonden.',
+ 'user:password:lost' => 'Wachtwoord vergeten',
+ 'user:password:resetreq:success' => 'Er is een nieuw wachtwoord aangemaakt, controller je e-mail',
+ 'user:password:resetreq:fail' => 'Er kon geen nieuw wachtwoord worden aangemaakt.',
+ 'user:password:text' => 'Vul je gebruikersnaam hieronder in om een nieuw wachtwoord te krijgen. Wij versturen een e-mail met een link naar een unieke verificatie pagina. Klik op de link in het bericht en een nieuw wachtwoord zal naar je worden opgestuurd.',
+ 'user:persistent' => 'Onthoud mij',
+ 'admin:configuration:success' => 'Je instellingen zijn opgeslagen.',
+ 'admin:configuration:fail' => 'Je instellingen zijn niet opgeslagen.',
+ 'admin' => 'Beheer',
+ 'admin:description' => 'Het Beheer paneel maakt het mogelijk het hele systeem te beheren. Van gebruikers beheer tot hoe Plugins zich gedragen. Kies een optie om te beginnen.',
+ 'admin:site:access:warning' => 'Het wijzigen van de toegangs instellingen is alleen van toepassing op nieuwe content.',
+ 'admin:site:description' => 'Via dit Beheer paneel kun je de globale instellingen van de site beheren. Kies een optie om te beginnen.',
+ 'admin:site:opt:linktext' => 'Configureer site...',
+ 'admin:plugins' => 'Plugin Beheer',
+ 'admin:plugins:description' => 'Via dit Beheer paneel kun je de verschillende Plugins van de site beheren en configureren.',
+ 'admin:plugins:opt:linktext' => 'Configureer Plugins...',
+ 'admin:plugins:opt:description' => 'Configureer de Plugins die zijn ge&iuml;nstalleerd op de site. ',
+ 'admin:plugins:label:author' => 'Auteur',
+ 'admin:plugins:label:copyright' => 'Copyright',
+ 'admin:plugins:label:licence' => 'Licentie',
+ 'admin:plugins:label:website' => 'Website',
+ 'admin:plugins:label:moreinfo' => 'Meer informatie',
+ 'admin:plugins:label:version' => 'Versie',
+ 'admin:statistics' => 'Statistieken',
+ 'admin:statistics:description' => 'Dit is een statistisch overzicht van de site. Als je meer gedetaileerde informatie nodig hebt is er een prefessionele beheer functie beschikbaar.',
+ 'admin:statistics:opt:description' => 'Bekijk statistische gegevens over gebruikers en objecten op de site.',
+ 'admin:statistics:opt:linktext' => 'Bekijk statistieken...',
+ 'admin:statistics:label:basic' => 'Basis site statistieken',
+ 'admin:statistics:label:numentities' => 'Entities op de site',
+ 'admin:statistics:label:numusers' => 'Aantal gebruikers',
+ 'admin:statistics:label:numonline' => 'Aantal gebruikers online',
+ 'admin:statistics:label:onlineusers' => 'Online gebruikers',
+ 'admin:statistics:label:version' => 'Elgg versie',
+ 'admin:statistics:label:version:release' => 'Release',
+ 'admin:statistics:label:version:version' => 'Versie',
+ 'admin:user:label:search' => 'Gebruikers zoeken:',
+ 'admin:user:ban:no' => 'Kan gebruiker niet blokkeren',
+ 'admin:user:ban:yes' => 'Gebruiker geblokeerd.',
+ 'admin:user:unban:no' => 'Kan gebruiker niet deblokkeren',
+ 'admin:user:unban:yes' => 'gebruiker gedeblokeerd.',
+ 'admin:user:delete:no' => 'Kan gebruiker niet verwijderen',
+ 'admin:user:resetpassword:yes' => 'Wachtwoord gereset, gebruiker op de hoogte gebracht.',
+ 'admin:user:resetpassword:no' => 'Wachtwoord kon niet worden gereset.',
+ 'admin:user:makeadmin:yes' => 'Gebruiker is nu Admin.',
+ 'admin:user:makeadmin:no' => 'Gebruiker kon geen Admin worden gemaakt.',
+ 'admin:user:removeadmin:yes' => 'Gebruiker is geen administrator meer.',
+ 'admin:user:removeadmin:no' => 'We konden de administrator rechten van deze gebruiker niet verwijderen.',
+ 'usersettings:description' => 'Het gebruikers instellingen paneel geeft je controlle over al je persoonlijke instellingen. Van gebruikers management tot hoe Plugins zijn geconfigureerd. Kies een optie om te beginnen.',
+ 'usersettings:statistics' => 'Jouw statistieken',
+ 'usersettings:statistics:opt:description' => 'Bekijk statistische gegevens van gebruikers en objecten op je site.',
+ 'usersettings:statistics:opt:linktext' => 'Account statistieken',
+ 'usersettings:user' => 'Jouw instellingen',
+ 'usersettings:user:opt:description' => 'Hier kun je je gebruikers instellingen configureren.',
+ 'usersettings:user:opt:linktext' => 'Wijzig je instellingen',
+ 'usersettings:plugins' => 'Plugins',
+ 'usersettings:plugins:opt:description' => 'Configureer instellingen voor je actieve Plugins.',
+ 'usersettings:plugins:opt:linktext' => 'Configureer Plugins',
+ 'usersettings:plugins:description' => 'Dit paneel staat je toe persoonlijke instellingen te maken voor Plugins die door de Site Administrators zijn ge&iuml;nstalleerd.',
+ 'usersettings:statistics:label:numentities' => 'Jouw entities',
+ 'usersettings:statistics:yourdetails' => 'Jouw details',
+ 'usersettings:statistics:label:name' => 'Volledige naam',
+ 'usersettings:statistics:label:email' => 'E-mail',
+ 'usersettings:statistics:label:membersince' => 'Lid sinds',
+ 'usersettings:statistics:label:lastlogin' => 'Laatst aangemeld op',
+ 'save' => 'Opslaan',
+ 'publish' => 'Publiceer',
+ 'cancel' => 'Annuleren',
+ 'saving' => 'Opslaan ...',
+ 'update' => 'Wijzig',
+ 'edit' => 'Bewerk',
+ 'delete' => 'Verwijder',
+ 'accept' => 'Accepteer',
+ 'load' => 'Laden',
+ 'upload' => 'Upload',
+ 'ban' => 'Blokkeer',
+ 'unban' => 'Deblokkeer',
+ 'enable' => 'Activeren',
+ 'disable' => 'Deactiveren',
+ 'request' => 'Aanvraag',
+ 'complete' => 'Compleet',
+ 'open' => 'Open',
+ 'close' => 'Sluiten',
+ 'reply' => 'Antwoord',
+ 'more' => 'Meer',
+ 'comments' => 'Reacties',
+ 'import' => 'Import',
+ 'export' => 'Export',
+ 'up' => 'Omhoog',
+ 'down' => 'Omlaag',
+ 'top' => 'Boven',
+ 'bottom' => 'Beneden',
+ 'invite' => 'Uitnodigen',
+ 'resetpassword' => 'Reset wachtwoord',
+ 'makeadmin' => 'Maak admin',
+ 'removeadmin' => 'Verwijder admin',
+ 'option:yes' => 'Ja',
+ 'option:no' => 'Nee',
+ 'unknown' => 'Onbekend',
+ 'active' => 'Actief',
+ 'total' => 'Totaal',
+ 'learnmore' => 'Klik hier voor meer informatie.',
+ 'content' => 'inhoud',
+ 'content:latest' => 'Laatste activiteit',
+ 'content:latest:blurb' => 'Of klik hier om de laatste inhoud van de hele site te bekijken',
+ 'link:text' => 'bekijk link',
+ 'question:areyousure' => 'Weet je het zeker?',
+ 'title' => 'Titel',
+ 'description' => 'Omschrijving',
+ 'tags' => 'Tags',
+ 'spotlight' => 'Spotlight',
+ 'all' => 'Alle',
+ 'by' => 'door',
+ 'annotations' => 'Opmerkingen',
+ 'relationships' => 'Relaties',
+ 'metadata' => 'Metadata',
+ 'deleteconfirm' => 'Weet je zeker dat je dit item wilt verwijderen?',
+ 'fileexists' => 'Er is reeds een bestand geupload. Om het te vervangen selecteer het hieronder:',
+ 'useradd:subject' => 'Gebruikers account aangemaakt',
+ 'useradd:body' => '%s,
+
+Een gebruikers account is voor jou aangemaakt op %s. Om je aan te melden, klikt hier:
+
+%s
+
+En meld je aan met de volgende gegevens:
+
+Gebruikersnaam: %s
+Wachtwoord: %s
+
+Als je bent aangemeld raden we je aan om je wachtwoord direct te wijzigen.',
+ 'systemmessages:dismiss' => 'Klik om te verbergen',
+ 'importsuccess' => 'Importeren van data was succesvol',
+ 'importfail' => 'OpenDD data importeren is mislukt.',
+ 'friendlytime:justnow' => 'zojuist',
+ 'friendlytime:minutes' => '%s minuten geleden',
+ 'friendlytime:minutes:singular' => 'een minuut geleden',
+ 'friendlytime:hours' => '%s uren geleden',
+ 'friendlytime:hours:singular' => 'een uur geleden',
+ 'friendlytime:days' => '%s dagen geleden',
+ 'friendlytime:days:singular' => 'gisteren',
+ 'date:month:01' => '%s januari',
+ 'date:month:02' => '%s februari',
+ 'date:month:03' => '%s maart',
+ 'date:month:04' => '%s april',
+ 'date:month:05' => '%s mei',
+ 'date:month:06' => '%s juni',
+ 'date:month:07' => '%s juli',
+ 'date:month:08' => '%s augustus',
+ 'date:month:09' => '%s september',
+ 'date:month:10' => '%s oktober',
+ 'date:month:11' => '%s november',
+ 'date:month:12' => '%s december',
+ 'installation:sitename' => 'De naam van je site (bijv "Mijn sociale netwerk site"):',
+ 'installation:sitedescription' => 'Korte omschrijving van je site (optioneel)',
+ 'installation:wwwroot' => 'De site URL, gevolgd door een slash:',
+ 'installation:path' => 'Het volledige pad naar de hoofdmap van de site op de schijf, gevolgd door een slash:',
+ 'installation:dataroot' => 'Het volledige pad naar de map waar de uploads worden opgeslagen, gevolgd door een slash:',
+ 'installation:dataroot:warning' => 'Je moet deze map handmatig aanmaken. Het moet buiten de mappen structuur van de Elgg installatie.',
+ 'installation:sitepermissions' => 'Het standaard toegangs niveau:',
+ 'installation:language' => 'De standaard taal voor de site: ',
+ 'installation:debug' => 'Debug mode geeft extra informatie die gebruikt kan worden om fouten te achterhalen. Echter vertraagd dit het systeem en moet alleen gebruikt worden als je problemen ondervindt:',
+ 'installation:httpslogin' => 'Activeer dit om gebruikers via HTTPS aan te melden. Je moet HTTPS hebben geactiveerd op je server om dit te kunnen gebruiken.',
+ 'installation:httpslogin:label' => 'HTTPS aanmelden inschakelen',
+ 'installation:view' => 'Geeft de view op die standaard wordt gebruikt binnen de site of laat het leeg voor de standaard view (bij twijfel, laat de standaard staan):',
+ 'installation:siteemail' => 'Site e-mail adres (wordt gebruikt voor het verzenden van systeem e-mails)',
+ 'installation:disableapi' => 'De RESTful API is een flexibel en uitbreidbaar interface dat het applicaties mogelijk maakt bepaalde Elgg features op afstand te gebruiken.',
+ 'installation:disableapi:label' => 'RESTful API inschakelen',
+ 'installation:allow_user_default_access:description' => 'Indien aangevinkt hebben individuele gebruikers de mogelijkheid om hun eigen standaard toegangs niveau in te stellen. Dit kan anders zijn als de standaard instelling van de Site.',
+ 'installation:allow_user_default_access:label' => 'Gebruikers standaard toegang toestaan',
+ 'installation:simplecache:description' => 'De simple cache verhoogt de performance door statische content te cachen waaronder sommige CSS en Javascript bestanden. Normaal gezien wil je dit aan hebben staan.',
+ 'installation:simplecache:label' => 'Gebruik simple cache',
+ 'upgrading' => 'Bijwerken',
+ 'upgrade:db' => 'Je database is bijgewerkt.',
+ 'upgrade:core' => 'Je Elgg installatie is bijgewerkt',
+ 'welcome' => 'Welkom',
+ 'email:settings' => 'E-mail instellingen',
+ 'email:address:label' => 'Jouw e-mail adres',
+ 'email:save:success' => 'Nieuwe e-mail adres opgeslagen, verificatie gevraagd.',
+ 'email:save:fail' => 'Je nieuwe e-mail adres kon niet worden opgeslagen.',
+ 'friend:newfriend:subject' => '%s heeft jou toegevoegd als vriend!',
+ 'friend:newfriend:body' => '%s heeft jou toegevoegd als vriend!
+
+Om zijn/haar profiel te bekijken, klik hier:
+
+%s
+
+Je kunt niet reageren op deze e-mail.',
+ 'email:resetpassword:subject' => 'Wachtwoord reset!',
+ 'email:resetpassword:body' => 'Beste %s,
+
+Je wachtwoord is gereset naar: %s',
+ 'email:resetreq:subject' => 'Aanvraag voor nieuw wachtwoord.',
+ 'email:resetreq:body' => 'Beste %s,
+
+Iemand (van IP adres %s) heeft een nieuw wachtwoord aangevraagd voor jouw account.
+
+Als jij dit hebt aangevraagd, klik dan op onderstaande link. Anders kun je deze e-mail negeren.
+
+%s',
+ 'default_access:settings' => 'Je standaard toegangs niveau',
+ 'default_access:label' => 'Standaard toegang',
+ 'user:default_access:success' => 'Je nieuwe standaard toegangs niveau is opgeslagen.',
+ 'user:default_access:failure' => 'Je nieuwe standaard toegangs niveau is niet opgeslagen.',
+ 'xmlrpc:noinputdata' => 'Input data ontbreekt',
+ 'comments:count' => '%s reacties',
+ 'riveraction:annotation:generic_comment' => '%s reageerde op %s',
+ 'generic_comments:add' => 'Voeg een reactie toe',
+ 'generic_comments:text' => 'Reactie',
+ 'generic_comment:posted' => 'Je reactie is succesvol geplaatst.',
+ 'generic_comment:deleted' => 'Je reactie is succesvol verwijderd.',
+ 'generic_comment:blank' => 'Sorry, maar je moet wel wat invullen voordat we je reactie kunnen opslaan.',
+ 'generic_comment:notfound' => 'Sorry, we konden het opgegeven item niet vinden.',
+ 'generic_comment:notdeleted' => 'Sorry, we konden deze reactie niet verwijderen.',
+ 'generic_comment:failure' => 'Er is een fout opgetreden tijdens het opslaab van je reactie. Probeer het nogmaals.',
+ 'generic_comment:email:subject' => 'Er is een nieuwe reactie!',
+ 'generic_comment:email:body' => 'Er is een nieuwe reactie op je item "%s" door %s. De reactie is:
+
+%s
+
+Om te antwoorden of het originele item te zien, klik hier:
+
+%s
+
+Om %s\'s Profile te bekijken, klik hier:
+
+%s
+
+Je kunt niet antwoorden op deze e-mail.',
+ 'entity:default:strapline' => 'Aangemaakt op %s door %s',
+ 'entity:default:missingsupport:popup' => 'Deze entity kan niet correct worden weergegeven. Dit kan komen doordat er ondersteuning nmodig is van een Plugin die niet meer is ge&iuml;nstalleerd.',
+ 'entity:delete:success' => 'Entity %s is verwijderd',
+ 'entity:delete:fail' => 'Entity %s kon niet worden verwijderd',
+ 'actiongatekeeper:missingfields' => 'Het formulier mist __token en/of __ts veld(en)',
+ 'actiongatekeeper:tokeninvalid' => 'Er was een probleem (token mismatch). Dit betekend waarschijnlijk dat de gebruikte pagina verlopen was. Probeer het nogmaals.',
+ 'actiongatekeeper:timeerror' => 'De gebruikte pagina is verlopen. Ververs en probeer het nogmaals.',
+ 'actiongatekeeper:pluginprevents' => 'Een Extension heeft voorkomen dat het formulier wordt verzonden.',
+ 'word:blacklist' => 'en, het, dan, maar, hij, zijn, haar, hem, een, niet, ook, ongeveer, nu, dus, wel, toch, is, anders, omgekeerd, maar dus, in plaats daarvan, intussen, derhalve, dit, lijkt, wat, wie',
+ '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' => 'Duits',
+ 'dz' => 'Bhutani',
+ 'el' => 'Greek',
+ 'en' => 'Engels',
+ 'eo' => 'Esperanto',
+ 'es' => 'Spanish',
+ 'et' => 'Estonian',
+ 'eu' => 'Basque',
+ 'fa' => 'Persian',
+ 'fi' => 'Finnish',
+ 'fj' => 'Fiji',
+ 'fo' => 'Faeroese',
+ 'fr' => 'Frans',
+ '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',
+ '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' => 'Nederlands',
+ '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',
+ 'yi' => 'Yiddish',
+ 'yo' => 'Yoruba',
+ 'za' => 'Zuang',
+ 'zh' => 'Chinese',
+ 'zu' => 'Zulu',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.custom_index.php b/mod/languages/languages/nl/nl.custom_index.php
new file mode 100644
index 000000000..746daa336
--- /dev/null
+++ b/mod/languages/languages/nl/nl.custom_index.php
@@ -0,0 +1,11 @@
+<?php
+$nl = array (
+ 'custom:bookmarks' => 'Laatste favorieten',
+ 'custom:groups' => 'Laatste groepen',
+ 'custom:files' => 'Laatste bestanden',
+ 'custom:blogs' => 'Laatste blogberichten',
+ 'custom:members' => 'Nieuwste leden',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.dashboard.php b/mod/languages/languages/nl/nl.dashboard.php
new file mode 100644
index 000000000..d5da4168d
--- /dev/null
+++ b/mod/languages/languages/nl/nl.dashboard.php
@@ -0,0 +1,11 @@
+<?php
+$nl = array (
+ 'dashboard:widget:group:title' => 'Groep activiteit',
+ 'dashboard:widget:group:desc' => 'Bekijk de activiteit van een van je groepen',
+ 'dashboard:widget:group:select' => 'Selecteer een groep',
+ 'dashboard:widget:group:noactivity' => 'Er is geen activiteit in deze group',
+ 'dashboard:widget:group:noselect' => 'Bewerk deze widget om een groep te selecteren',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.developers.php b/mod/languages/languages/nl/nl.developers.php
new file mode 100644
index 000000000..2fa816079
--- /dev/null
+++ b/mod/languages/languages/nl/nl.developers.php
@@ -0,0 +1,43 @@
+<?php
+$nl = array (
+ 'admin:develop_tools' => 'Tools',
+ 'admin:develop_tools:preview' => 'Theming zandbak',
+ 'admin:develop_tools:inspect' => 'Inspecteer',
+ 'admin:developers' => 'Ontwikkelaars',
+ 'admin:developers:settings' => 'Instellingen',
+ 'elgg_dev_tools:settings:explanation' => 'Beheer je ontwikkel- en debuginstellingen hieronden. Sommige van de instellingen zijn ook beschikbaar op andere beheer pagina\'s.',
+ 'developers:label:simple_cache' => 'Gebruik simple cache',
+ 'developers:help:simple_cache' => 'Zet file cache uit tijdens het ontwikkelen. Anders zullen wijzigingen in je views (inclusief CSS) worden genegeerd.',
+ 'developers:label:debug_level' => 'Trace-niveau',
+ 'developers:help:debug_level' => 'Dit beheerd hoeveel informatie er gelogd wordt. Zie elgg_log() voor meer informatie',
+ 'developers:label:display_errors' => 'Toon PHP fatale fouten',
+ 'developers:help:display_errors' => 'Standaard verbergt de .htaccess van Elgg het weergeven van fatale fouten',
+ 'developers:label:screen_log' => 'Log naar het scherm',
+ 'developers:help:screen_log' => 'Dit toont het resultaat van elgg_log en elgg_dump() op de webpagina.',
+ 'developers:label:show_strings' => 'Toon vertaling sleutels',
+ 'developers:help:show_strings' => 'Dit toont de vertaling sleutels die gebruikt worden door elgg_echo().',
+ 'developers:label:wrap_views' => 'Omcirkel views',
+ 'developers:help:wrap_views' => 'Dit omcirkeld bijna alle views met HTML commentaar. Handig om erachter te komen uit welke view een stuk HTML komt.',
+ 'developers:label:log_events' => 'Log events en plugin hooks',
+ 'developers:help:log_events' => 'Schrijf events en plugin hook naar de log. Waarschuwing: dit zijn er veel per pagina.',
+ 'developers:debug:off' => 'Uit',
+ 'developers:debug:error' => 'Fout',
+ 'developers:debug:warning' => 'Waarschuwing',
+ 'developers:debug:notice' => 'Bericht',
+ 'developers:inspect:help' => 'Inspecteer de configuratie van het Elgg framewerk',
+ 'developers:event_log_msg' => '%s: \'%s, %s\' in %s',
+ 'theme_preview:general' => 'Introductie',
+ 'theme_preview:breakout' => 'Ontsnap uit iframe',
+ 'theme_preview:buttons' => 'Knoppen',
+ 'theme_preview:components' => 'Componenten',
+ 'theme_preview:forms' => 'Formulieren',
+ 'theme_preview:grid' => 'Raster',
+ 'theme_preview:icons' => 'Iconen',
+ 'theme_preview:modules' => 'Modules',
+ 'theme_preview:navigation' => 'Navigatie',
+ 'theme_preview:typography' => 'Typografie',
+ 'developers:settings:success' => 'Instellingen opgeslagen',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.diagnostics.php b/mod/languages/languages/nl/nl.diagnostics.php
new file mode 100644
index 000000000..1cf87c571
--- /dev/null
+++ b/mod/languages/languages/nl/nl.diagnostics.php
@@ -0,0 +1,32 @@
+<?php
+$nl = array (
+ 'diagnostics:report' => 'Diagnose rapport',
+ '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
+------------------------------------------------------------------------',
+ 'diagnostics' => 'Systeem diagnose',
+ 'diagnostics:description' => 'Het volgende diagnostische rapport is nuttig voor de diagnose van problemen met Elgg, en moet worden bijgevoegd aan een bug report die je indient.',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.embed.php b/mod/languages/languages/nl/nl.embed.php
new file mode 100644
index 000000000..f2951095a
--- /dev/null
+++ b/mod/languages/languages/nl/nl.embed.php
@@ -0,0 +1,14 @@
+<?php
+$nl = array (
+ 'embed:embed' => 'Embed',
+ 'embed:upload' => 'Upload media',
+ 'embed:upload_type' => 'Upload type:',
+ 'embed:no_upload_content' => 'Geen upload media!',
+ 'embed:no_section_content' => 'Geen items gevonden',
+ 'embed:no_sections' => 'Geen ondersteunde embed plugins gevonden. Vraag de site beheerde om een plugin te activeren met embed ondersteuning.',
+ 'embed:instructions' => 'Klik op een bestand om het te integreren in je content.',
+ 'embed:media' => 'Integreer media',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.externalpages.php b/mod/languages/languages/nl/nl.externalpages.php
new file mode 100644
index 000000000..7d57329f3
--- /dev/null
+++ b/mod/languages/languages/nl/nl.externalpages.php
@@ -0,0 +1,15 @@
+<?php
+$nl = array (
+ 'admin:appearance:expages' => 'Externe pagina\'s',
+ 'expages:posted' => 'Je pagina is succesvol bijgewerkt.',
+ 'expages:error' => 'De pagina kon niet worden opgeslagen.',
+ 'expages' => 'Externe pagina\'s',
+ 'expages:about' => 'Over ons',
+ 'expages:terms' => 'Algemene Voorwaarden',
+ 'expages:privacy' => 'Privacy',
+ 'expages:contact' => 'Contact',
+ 'expages:notset' => 'Deze pagina is nog niet beschikbaar.',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.file.php b/mod/languages/languages/nl/nl.file.php
new file mode 100644
index 000000000..04bb04351
--- /dev/null
+++ b/mod/languages/languages/nl/nl.file.php
@@ -0,0 +1,69 @@
+<?php
+$nl = array (
+ 'file:list:list' => 'Toon in lijst weergave',
+ 'file:list:gallery' => 'Toon in galerij weergave',
+ 'file:friends' => 'Bestanden van vrienden',
+ 'file:more' => 'Meer bestanden',
+ 'file:list' => 'lijst weergave',
+ 'file:gallery' => 'gallerij weergave',
+ 'file:list:title' => '%s\'s %s %s',
+ 'file:title:friends' => 'Vrienden',
+ 'file:add' => 'Upload een bestand',
+ 'file:desc' => 'Omschrijving',
+ 'file:type:' => 'Bestanden',
+ 'file:widget' => 'Bestanden widget',
+ 'file:widget:description' => 'Laat je laatste bestanden zien',
+ 'file:tagcloud' => 'Tag cloud',
+ 'river:create:object:file' => '%s heeft het bestand %s geüpload',
+ 'river:comment:object:file' => '%s reageerde op het bestand %s',
+ 'file:downloadfailed' => 'Sorry, dit bestand is op dit moment niet beschikbaar.',
+ 'groups:enablefiles' => 'Activeer groep bestanden',
+ 'file:replace' => 'Vervang bestandsinhoud (leeg laten om bestand niet te vervangen)',
+ 'file:noaccess' => 'Je hebt geen toegang om dit bestand aan te passen',
+ 'file:cannotload' => 'Er is een fout opgetreden tijdens het laden van het bestand',
+ 'file:nofile' => 'Je moet een bestand selecteren',
+ 'file' => 'Bestanden',
+ 'file:user' => '%s\'s bestanden',
+ 'file:all' => 'Alle Site bestanden',
+ 'file:edit' => 'Bewerk bestand',
+ 'file:group' => 'Groeps bestanden',
+ 'file:gallery_list' => 'Gallerij of lijst weergave',
+ 'file:num_files' => 'Aantal bestanden om weer te geven',
+ 'file:user:gallery' => 'Bekijk %s gallerij',
+ 'file:upload' => 'Upload een bestand',
+ 'file:newupload' => 'Nieuw bestand uploaden',
+ 'file:file' => 'Bestand',
+ 'file:title' => 'Titel',
+ 'file:tags' => 'Tags',
+ 'file:types' => 'Geplaatste bestandstypen',
+ 'file:type:all' => 'Alle bestanden',
+ 'file:type:video' => 'Video\'s',
+ 'file:type:document' => 'Documenten',
+ 'file:type:audio' => 'Audio',
+ 'file:type:image' => 'Plaatjes',
+ 'file:type:general' => 'Algemeen',
+ 'file:user:type:video' => '%s\'s video\'s',
+ 'file:user:type:document' => '%s\'s documenten',
+ 'file:user:type:audio' => '%s\'s audio',
+ 'file:user:type:image' => '%s\'s plaatjes',
+ 'file:user:type:general' => '%s\'s algemene bestanden',
+ 'file:friends:type:video' => 'Video\'s van je vrienden',
+ 'file:friends:type:document' => 'Documenten van je vrienden',
+ 'file:friends:type:audio' => 'Audio van je vrienden',
+ 'file:friends:type:image' => 'Plaatjes van je vrienden',
+ 'file:friends:type:general' => 'Algemene bestanden van je vrienden',
+ 'file:download' => 'Download',
+ 'file:delete:confirm' => 'Weet je zeken dat je dit bestand wilt verwijderen?',
+ 'file:display:number' => 'Aantal bestanden om weer te geven',
+ 'item:object:file' => 'Bestanden',
+ 'file:embed' => 'Embed media',
+ 'file:embedall' => 'Alle',
+ 'file:saved' => 'Je bestand is succesvol opgeslagen.',
+ 'file:deleted' => 'Je bestand is succesvol verwijderd.',
+ 'file:none' => 'We konden op dit moment geen bestanden vinden.',
+ 'file:uploadfailed' => 'Sorry, we konden het bestand niet opslaan.',
+ 'file:deletefailed' => 'Je bestand kon op dit moment niet worden verwijderd.',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.garbagecollector.php b/mod/languages/languages/nl/nl.garbagecollector.php
new file mode 100644
index 000000000..935a04516
--- /dev/null
+++ b/mod/languages/languages/nl/nl.garbagecollector.php
@@ -0,0 +1,18 @@
+<?php
+$nl = array (
+ 'garbagecollector:period' => 'Hoevaak moet de Elgg garbage collector draaien?',
+ 'garbagecollector:weekly' => 'Eens per week',
+ 'garbagecollector:monthly' => 'Eens per maand',
+ 'garbagecollector:yearly' => 'Eens per jaar',
+ 'garbagecollector' => 'GARBAGE COLLECTOR
+',
+ 'garbagecollector:done' => 'KLAAR
+',
+ 'garbagecollector:optimize' => 'Optimaliseren %s ',
+ 'garbagecollector:error' => 'FOUT',
+ 'garbagecollector:ok' => 'OK',
+ 'garbagecollector:gc:metastrings' => 'Opruimen van niet gelinkte metastrings: ',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.groups.php b/mod/languages/languages/nl/nl.groups.php
new file mode 100644
index 000000000..897f6fd73
--- /dev/null
+++ b/mod/languages/languages/nl/nl.groups.php
@@ -0,0 +1,205 @@
+<?php
+$nl = array (
+ 'discussion:none' => 'Geen discussies',
+ 'discussion:reply:title' => 'Reactie door %s',
+ 'groups:invite:body' => 'Beste %s,
+
+ %s heeft je uitgenodigd om lid te worden van de \'%s\' groep.
+
+ Klik op onderstaande link om je uitnodigingen te bekijken
+ %s',
+ 'groups:add' => 'Maak een nieuwe groep',
+ 'groups:members:title' => 'Leden van %s',
+ 'groups:members:more' => 'Bekijk alle leden',
+ 'groups:permissions:error' => 'Je hebt hier geen toegang toe',
+ 'groups:ingroup' => 'in de groep',
+ 'groups:featuredon' => '%s is nu een aangeraden groep',
+ 'groups:unfeatured' => '%s is verwijderd van de aangeraden groepen',
+ 'groups:featured_error' => 'Ongeldige groep.',
+ 'groups:invite:title' => 'Nodig vrienden uit in deze groep',
+ 'groups:nofriendsatall' => 'Je hebt geen vrienden om uit te nodigen!',
+ 'groups:search:title' => 'Zoek naar groepen met de tag \'%s\'',
+ 'groups:search:none' => 'Geen overeenkomende groepen gevonden',
+ 'groups:activity' => 'Groep activiteit',
+ 'groups:enableactivity' => 'Schakel groep activiteit in',
+ 'groups:activity:none' => 'Er is nog geen groep activiteit',
+ 'groups:more' => 'Meer groepen',
+ 'groups:none' => 'Geen groepen',
+ 'groups:access:group' => 'Allen voor groepsleden',
+ 'groups:closedgroup:request' => 'Om lid te worden, klik op de "lidmaatschap aanvragen" menu link',
+ 'groups:lastcomment' => 'Laatste reactie %s door %s',
+ 'discussion' => 'Discussie',
+ 'discussion:add' => 'Nieuwe discussie',
+ 'discussion:latest' => 'Laatste discussie',
+ 'discussion:group' => 'Groep discussies',
+ 'discussion:topic:created' => 'Het discussie onderwerp is aangemaakt.',
+ 'discussion:topic:updated' => 'Het discussie onderwerp is bijgewerkt.',
+ 'discussion:topic:deleted' => 'Het discussie onderwerp is verwijderd.',
+ 'discussion:topic:notfound' => 'Discussie onderwerp niet gevonden',
+ 'discussion:error:notsaved' => 'Fout tijdens het opslaan van dit onderwerp',
+ 'discussion:error:missing' => 'Zowel titel als bericht zijn verplichte velden',
+ 'discussion:error:permissions' => 'Je hebt geen rechten om deze actie uit te mogen voeren',
+ 'discussion:error:notdeleted' => 'Het discussie onderwerp kon niet worden verwijderd',
+ 'discussion:reply:deleted' => 'Reactie op de discussie is verwijderd.',
+ 'discussion:reply:error:notdeleted' => 'De reactie op de discussie kon niet worden verwijderd',
+ 'reply:this' => 'Reageer hierop',
+ 'groups:forum:created' => '%s aangemaakt met %d reacties',
+ 'groups:forum:created:single' => '%s aangemaakt met %d reacties',
+ 'groups:removeuser' => 'Verwijder uit groep',
+ 'groups:cantremove' => 'Kan de gebruiker niet verwijderen uit de groep',
+ 'groups:removed' => '%s succesvol verwijderd uit de groep',
+ 'groups:updated' => 'Laatste reactie door %s %s',
+ 'groups:started' => 'Gestart door %s',
+ 'river:create:group:default' => '%s heeft de groep %s gemaakt',
+ 'river:join:group:default' => '%s is lid geworden van de groep %s',
+ 'river:create:object:groupforumtopic' => '%s begon een nieuwe discussie %s',
+ 'river:reply:object:groupforumtopic' => '%s reageerde op de discussie %s',
+ 'groups:allowhiddengroups' => 'Wil je priv� (onzichtbare) groepen toestaan?',
+ 'group:notfound' => 'Kon de groep niet vinden',
+ 'groups:ecml:discussion' => 'Groep discussies',
+ 'groups:ecml:groupprofile' => 'Groep profielen',
+ 'groups:invite:remove:check' => 'Weet je zeker dat je deze uitnodiging wilt verwijderen?',
+ 'groups:invitekilled' => 'De uitnodiging is verwijderd',
+ 'groups:invitations' => 'Groeps uitnodigingen',
+ 'groups:search:tags' => 'tag',
+ 'groups:invitations:none' => 'Er zijn geen openstaande uitnodigingen op dit moment',
+ 'groups:visibility' => 'Wie kan deze groep zien?',
+ 'groups:notmember' => 'Sorry, je bent geen lid van deze groep',
+ 'grouptopic:notfound' => 'Het onderwerp kon niet gevonden worden',
+ 'grouppost:nopost' => 'Lege post',
+ 'groups' => 'Groepen',
+ 'groups:owned' => 'Groepen beheren',
+ 'groups:yours' => 'Jouw groepen',
+ 'groups:user' => '%s\'s groepen',
+ 'groups:all' => 'Alle site groepen',
+ 'groups:edit' => 'Bewerk groep',
+ 'groups:delete' => 'Verwijder groep',
+ 'groups:membershiprequests' => 'Beheer lidmaatschap aanvragen',
+ 'groups:icon' => 'Groep icoon (laat leeg voor huidige)',
+ 'groups:name' => 'Groep naam',
+ 'groups:username' => 'Korte groepnaam (voor URLs, alleen alfanumerieke tekens)',
+ 'groups:description' => 'Omschrijving',
+ 'groups:briefdescription' => 'Korte omschrijving',
+ 'groups:interests' => 'Interesses',
+ 'groups:website' => 'Website',
+ 'groups:members' => 'Groepsleden',
+ 'groups:membership' => 'Lidmaatschap',
+ 'groups:access' => 'Toegangs rechten',
+ 'groups:owner' => 'Eigenaar',
+ 'groups:widget:num_display' => 'Aantal groepen om weer te geven',
+ 'groups:widget:membership' => 'Groeps lidmaatschap',
+ 'groups:widgets:description' => 'Laat je groepslidmaatschap zien op je profiel',
+ 'groups:noaccess' => 'Geen toegang tot de groep',
+ 'groups:cantedit' => 'Je kunt deze groep niet bewerken',
+ 'groups:saved' => 'Groep opgeslagen',
+ 'groups:featured' => 'Aangeraden groepen',
+ 'groups:makeunfeatured' => 'Afraden',
+ 'groups:makefeatured' => 'Aanraden',
+ 'groups:joinrequest' => 'Verzoek lidmaatschap',
+ 'groups:join' => 'Wordt lid',
+ 'groups:leave' => 'Verlaat groep',
+ 'groups:invite' => 'Nodig vrienden uit',
+ 'groups:inviteto' => 'Nodig vrienden uit voor \'%s\'',
+ 'groups:nofriends' => 'Je hebt geen vrienden meer die niet al lid zijn van deze groep.',
+ 'groups:viagroups' => 'via groepen',
+ 'groups:group' => 'Groep',
+ 'groups:notfound' => 'Groep niet gevonden',
+ 'groups:notfound:details' => 'De gevraagde groep bestaat niet of je hebt hiertoe geen toegang',
+ 'groups:requests:none' => 'Er zijn geen openstaande lidmaatschaps aanvragen op dit moment.',
+ 'item:object:groupforumtopic' => 'Forum onderwerpen',
+ 'groupforumtopic:new' => 'Nieuw forum bericht',
+ 'groups:count' => 'groepen aangemaakt',
+ 'groups:open' => 'open groep',
+ 'groups:closed' => 'besloten groep',
+ 'groups:member' => 'leden',
+ 'groups:searchtag' => 'Zoek naar groepen op tag',
+ 'groups:access:private' => 'Gesloten - Gebruikers moeten worden uitgenodigd',
+ 'groups:access:public' => 'Open - Iedere gebruiker kan lid worden',
+ 'groups:closedgroup' => 'Deze groep is besloten. Om lid te worden klik op de "Verzoek lidmaatschap" link in het menu.',
+ 'groups:enableforum' => 'Activeer groep forum',
+ 'groups:yes' => 'ja',
+ 'groups:no' => 'nee',
+ 'groups:lastupdated' => 'Laatst bijgewerkte %s door %s',
+ 'group:replies' => 'Reacties',
+ 'groups:forum' => 'Groep forum',
+ 'groups:addtopic' => 'Nieuw onderwerp',
+ 'groups:forumlatest' => 'Forum laatste',
+ 'groups:latestdiscussion' => 'Laatste discussie',
+ 'groups:newest' => 'Nieuwste',
+ 'groups:popular' => 'Populair',
+ 'groupspost:success' => 'Je reactie is succesvol geplaatst',
+ 'groups:alldiscussion' => 'Laatste discussie',
+ 'groups:edittopic' => 'Bewerk onderwerp',
+ 'groups:topicmessage' => 'Onderwerp bericht',
+ 'groups:topicstatus' => 'Onderwerp status',
+ 'groups:reply' => 'Plaats een reactie',
+ 'groups:topic' => 'Onderwerp',
+ 'groups:posts' => 'reacties',
+ 'groups:lastperson' => 'Laaste persoon',
+ 'groups:when' => 'Wanneer',
+ 'grouptopic:notcreated' => 'Nog geen onderwerpen aangemaakt.',
+ 'groups:topicopen' => 'Open',
+ 'groups:topicclosed' => 'Gesloten',
+ 'groups:topicresolved' => 'Opgelost',
+ 'grouptopic:created' => 'Je onderwerp is aangemaakt.',
+ 'groupstopic:deleted' => 'Onderwerp verwijderd',
+ 'groups:topicsticky' => 'Sticky',
+ 'groups:topicisclosed' => 'Dit onderwerp is gesloten.',
+ 'groups:topiccloseddesc' => 'Dit onderwerp is nu gesloten, er kunnen geen reacties meer geplaatst worden.',
+ 'grouptopic:error' => 'Je groep onderwerp kon niet worden aangemaakt. Probeer het nogmaals of neem contact op met de Site Administrator.',
+ 'groups:forumpost:edited' => 'Je hebt het forum bericht succesvol bewerkt.',
+ 'groups:forumpost:error' => 'Er was een probleem tijdens het bewerken van het forum bericht.',
+ 'groups:privategroup' => 'Deze groep is besloten, lidmaatschap wordt aangevraagd.',
+ 'groups:notitle' => 'Groepen moeten een titel hebben',
+ 'groups:cantjoin' => 'Kan niet lid worden van de groep',
+ 'groups:cantleave' => 'Kon de groep niet verlaten',
+ 'groups:addedtogroup' => 'Gebruiker succesvol toegevoegd aan de groep',
+ 'groups:joinrequestnotmade' => 'Lidmaatschap verzoek kon niet worden gemaakt',
+ 'groups:joinrequestmade' => 'Lidmaatschap verzoek succesvol aangemaakt',
+ 'groups:joined' => 'Succesvol lid geworden van de groep!',
+ 'groups:left' => 'De groep succesvol verlaten',
+ 'groups:notowner' => 'Sorry, je bent niet de eigenaar van de groep.',
+ 'groups:alreadymember' => 'Je bent reeds lid van deze groep!',
+ 'groups:userinvited' => 'Gebruiker is uitgenodigd.',
+ 'groups:usernotinvited' => 'Gebruiker kon niet worden uitgenodigd.',
+ 'groups:useralreadyinvited' => 'Gebruiker is al uitgenodigd',
+ 'groups:joinrequest:remove:check' => 'Weet je zeker dat je dit lidmaatschaps verzoek wilt verwijderen?',
+ 'groups:invite:subject' => '%s je bent uitgenodigd om lid te worden van %s!',
+ 'groups:welcome:subject' => 'Welkom bij de %s groep!',
+ 'groups:welcome:body' => 'Beste %s!
+
+ Je bent nu lid van de \'%s\' groep! Klik hieronder om te beginnen met posten!
+
+ %s',
+ 'groups:request:subject' => '%s wil lid worden van %s',
+ 'groups:request:body' => 'Beste %s,
+
+ %s wil lid worden van de \'%s\' groep, klik hieronder om zijn/haar profiel te bekijken:
+
+ %s
+
+ of klik hieronder om het verzoek te accepteren:
+
+ %s',
+ 'groups:nowidgets' => 'Er zijn geen widgets gedefineerd voor deze groep.',
+ 'groups:widgets:members:title' => 'Groepsleden',
+ 'groups:widgets:members:description' => 'Lijst van groepsleden.',
+ 'groups:widgets:members:label:displaynum' => 'Toon de groepsleden.',
+ 'groups:widgets:members:label:pleaseedit' => 'Stel deze widget AUB in.',
+ 'groups:widgets:entities:title' => 'Objecten in de groep',
+ 'groups:widgets:entities:description' => 'Toon de objecten van deze groep',
+ 'groups:widgets:entities:label:displaynum' => 'Toon de objecten van een groep.',
+ 'groups:widgets:entities:label:pleaseedit' => 'Stel deze widget AUB in.',
+ 'groups:forumtopic:edited' => 'Forum onderwerp succesvol bewerkt.',
+ 'group:deleted' => 'Groep en groeps berichten verwijderd',
+ 'group:notdeleted' => 'Groep kon niet worden verwijderd',
+ 'grouppost:deleted' => 'Groep bericht succesvol verwijderd',
+ 'grouppost:notdeleted' => 'Groep bericht kon niet worden verijderd',
+ 'groupstopic:notdeleted' => 'Onderwerp niet verijderd',
+ 'grouptopic:blank' => 'Geen onderwerp',
+ 'groups:deletewarning' => 'Weet je zeker dat je deze groep wilt verwijderen? Dit kan niet ongedaan worden gemaakt!',
+ 'groups:joinrequestkilled' => 'Lidmaatschap verzoek verwijderd.',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.invitefriends.php b/mod/languages/languages/nl/nl.invitefriends.php
new file mode 100644
index 000000000..990ca0e46
--- /dev/null
+++ b/mod/languages/languages/nl/nl.invitefriends.php
@@ -0,0 +1,28 @@
+<?php
+$nl = array (
+ 'invitefriends:registration_disabled' => 'Registratie van nieuwe gebruikers is uitgeschakeld op deze site, je kunt geen nieuwe gebruikers uitnodigen.',
+ 'invitefriends:invitations_sent' => 'Aantal verzonden uitnodigingen: %s. De volgende problemen zijn opgetreden:',
+ 'invitefriends:email_error' => 'De volgende adressen zijn ongeldig: %s',
+ 'invitefriends:already_members' => 'De volgende zijn al lid: %s',
+ 'invitefriends:noemails' => 'Geen e-mail adressen opgegeven.',
+ 'invitefriends:email' => 'Je bent uitgenodigd om lid te worden van %s door %s. Ze hebben het volgende bericht toegevoegd:
+
+%s
+
+Om lid te worden, klik op de onderstaande link:
+
+%s
+
+Je zult ze direct als vriend hebben als je je account hebt aangemaakt.',
+ 'friends:invite' => 'Vrienden uitnodigen',
+ 'invitefriends:introduction' => 'Om vrienden uit te nodigen om lid te worden van dit netwerk, vul de e-mail adressen hieronder in (een per regel):',
+ 'invitefriends:message' => 'Geeft een bericht op welke in de uitnodiging komt te staan:',
+ 'invitefriends:subject' => 'Uitnodiging om lid te worden van %s',
+ 'invitefriends:success' => 'Je vrienden zijn uitgenodigd.',
+ 'invitefriends:message:default' => 'Hallo,
+
+Ik wil je uitnodigen om lid te worden van mijn netwerk op %s.',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.likes.php b/mod/languages/languages/nl/nl.likes.php
new file mode 100644
index 000000000..ea6af9a06
--- /dev/null
+++ b/mod/languages/languages/nl/nl.likes.php
@@ -0,0 +1,31 @@
+<?php
+$nl = array (
+ 'likes:this' => 'vindt dit leuk',
+ 'likes:deleted' => 'Je vindt dit niet meer leuk',
+ 'likes:see' => 'Bekijk wie dit leuk vindt',
+ 'likes:remove' => 'Niet meer leuk vinden',
+ 'likes:notdeleted' => 'Er was een probleem tijdens het niet meer leuk vinden',
+ 'likes:likes' => 'Je vindt dit item leuk',
+ 'likes:failure' => 'Er was een probleem tijdens het leuk vinden van dit item',
+ 'likes:alreadyliked' => 'Je vindt dit item al leuk',
+ 'likes:notfound' => 'Het item dat je leuk probeert te vinden kan niet worden gevonden',
+ 'likes:likethis' => 'Dit vind ik leuk',
+ 'likes:userlikedthis' => '%s vindt dit leuk',
+ 'likes:userslikedthis' => '%s vinden dit leuk',
+ 'likes:river:annotate' => 'vindt leuk',
+ 'river:likes' => 'vindt %s leuk %s',
+ 'likes:notifications:subject' => '%s vindt je item "%s" leuk',
+ 'likes:notifications:body' => 'Beste %1$s,
+%2$s vindt je item "%3$s" op %4$s leuk!
+
+Bekijk je originele item hier:
+%5$s
+of bekijk %2$s\'s profiel here:
+%6$s
+
+Bedankt,
+%4$s',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.logbrowser.php b/mod/languages/languages/nl/nl.logbrowser.php
new file mode 100644
index 000000000..c0dc9d94b
--- /dev/null
+++ b/mod/languages/languages/nl/nl.logbrowser.php
@@ -0,0 +1,20 @@
+<?php
+$nl = array (
+ 'admin:administer_utilities:logbrowser' => 'Log browser',
+ 'logbrowser:date' => 'Datum en tijd',
+ 'logbrowser:user:name' => 'Gebruiker',
+ 'logbrowser:user:guid' => 'Gebruiker GUID',
+ 'logbrowser:object' => 'Object type',
+ 'logbrowser:object:guid' => 'Object GUID',
+ 'logbrowser:action' => 'Actie',
+ 'logbrowser' => 'Log browser',
+ 'logbrowser:browse' => 'Bekijk systeem logboek',
+ 'logbrowser:search' => 'Verfijn resultaten',
+ 'logbrowser:user' => 'Gebruikersnaam om op te zoeken',
+ 'logbrowser:starttime' => 'Begin tijd (bijvoorbeeld "last monday", "1 hour ago")',
+ 'logbrowser:endtime' => 'Eind tijd',
+ 'logbrowser:explore' => 'Verken logboek',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.logrotate.php b/mod/languages/languages/nl/nl.logrotate.php
new file mode 100644
index 000000000..96b7d8711
--- /dev/null
+++ b/mod/languages/languages/nl/nl.logrotate.php
@@ -0,0 +1,18 @@
+<?php
+$nl = array (
+ 'logrotate:period' => 'Hoe vaak moet het systeem logboek worden gearchiveerd?',
+ 'logrotate:delete' => 'Verwijder logboek archieven ouder dan een',
+ 'logrotate:week' => 'week',
+ 'logrotate:month' => 'maand',
+ 'logrotate:year' => 'jaar',
+ 'logrotate:logdeleted' => 'Log verwijdert',
+ 'logrotate:lognotdeleted' => 'Fout tijdens het verwijderen van de log',
+ 'logrotate:weekly' => 'Iedere week',
+ 'logrotate:monthly' => 'Iedere maand',
+ 'logrotate:yearly' => 'Ieder jaar',
+ 'logrotate:logrotated' => 'Logboek gearchiveerd',
+ 'logrotate:lognotrotated' => 'Fout tijdens het archiveren van het logboek',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.members.php b/mod/languages/languages/nl/nl.members.php
new file mode 100644
index 000000000..5ee8fb29d
--- /dev/null
+++ b/mod/languages/languages/nl/nl.members.php
@@ -0,0 +1,13 @@
+<?php
+$nl = array (
+ 'members:label:online' => 'Online',
+ 'members:title:searchname' => 'Gebruikers zoeken op %s',
+ 'members:title:searchtag' => 'Gebruiker met de tag %s',
+ 'members:label:newest' => 'Nieuwste',
+ 'members:label:popular' => 'Populair',
+ 'members:searchtag' => 'Gebruikers zoeken op tag',
+ 'members:searchname' => 'Gebruikers zoeken op naam',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.messageboard.php b/mod/languages/languages/nl/nl.messageboard.php
new file mode 100644
index 000000000..7ad012a27
--- /dev/null
+++ b/mod/languages/languages/nl/nl.messageboard.php
@@ -0,0 +1,41 @@
+<?php
+$nl = array (
+ 'messageboard:owner' => '%s\'s berichten box',
+ 'messageboard:owner_history' => '%s\'s berichten op %s\'s berichten box',
+ 'river:messageboard:user:default' => '%s plaatste op %s\'s berichten box',
+ 'messageboard:history:title' => 'Geschiedenis',
+ 'messageboard:replyon' => 'antwoord op',
+ 'messageboard:board' => 'Berichten box',
+ 'messageboard:messageboard' => 'berichten box',
+ 'messageboard:viewall' => 'Alles bekijken',
+ 'messageboard:postit' => 'Plaats',
+ 'messageboard:history' => 'geschiedenis',
+ 'messageboard:none' => 'Er zijn nog geen berichten geplaatst',
+ 'messageboard:num_display' => 'Aantal berichten om weer te geven',
+ 'messageboard:desc' => 'Dit is een berichten box die je op je profiel kunt plaatsen waar andere gebruikers op kunnen reageren.',
+ 'messageboard:user' => '%s\'s berichten box',
+ 'messageboard:posted' => 'Je bericht is succesvol geplaatst.',
+ 'messageboard:deleted' => 'Je bericht is succesvol verwijderd.',
+ 'messageboard:email:subject' => 'Er is een nieuwe reactie op een bericht!',
+ 'messageboard:email:body' => '%s heeft een reactie geplaatst op een bericht. De reactie is:
+
+%s
+
+Om de reacties te bekijken, klik hier:
+
+%s
+
+Om %s\'s profiel te bekijken, klik hier:
+
+%s
+
+Je kunt niet antwoorden op deze email.',
+ 'messageboard:blank' => 'Sorry, je moet wel tekst opgeven voordat we je bericht kunnen opslaan.',
+ 'messageboard:notfound' => 'Sorry, we konden het opgegeven item niet vinden.',
+ 'messageboard:notdeleted' => 'Sorry, we konden het bericht niet verwijderen.',
+ 'messageboard:somethingwentwrong' => 'Er is een fout opgetreden tijdens het opslaan van je bericht, controlleer op je wel een bericht hebt geschreven.',
+ 'messageboard:failure' => 'Er is een fout opgetreden tijdens het toevoegen van je bericht. Probeer het nogmaals.',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.messages.php b/mod/languages/languages/nl/nl.messages.php
new file mode 100644
index 000000000..049c261fa
--- /dev/null
+++ b/mod/languages/languages/nl/nl.messages.php
@@ -0,0 +1,63 @@
+<?php
+$nl = array (
+ 'messages:user' => '%s\'s postvak in',
+ 'messages:add' => 'Schrijf een bericht',
+ 'messages:recipient' => 'Kies een ontvanger…',
+ 'messages:to_user' => 'Aan: %s',
+ 'messages:success:delete:single' => 'Bericht is verwijderd',
+ 'messages:success:delete' => 'Berichten verwijderd',
+ 'messages:success:read' => 'Bericht gemarkeerd als gelezen',
+ 'messages:error:messages_not_selected' => 'Geen berichten geselecteerd',
+ 'messages:error:delete:single' => 'Fout tijdens het verwijderen van het bericht',
+ 'messages:deleted_sender' => 'Verwijderde gebruiker',
+ 'messages:user:blank' => 'Je hebt niemand geselecteerd om dit naar toe te sturen.',
+ 'messages' => 'Berichten',
+ 'messages:back' => 'terug naar berichten',
+ 'messages:posttitle' => '%s\'s berichten: %s',
+ 'messages:inbox' => 'Postvak In',
+ 'messages:send' => 'Verstuur een bericht',
+ 'messages:sent' => 'Verstuurde berichten',
+ 'messages:message' => 'Bericht',
+ 'messages:title' => 'Titel',
+ 'messages:to' => 'Aan',
+ 'messages:from' => 'Van',
+ 'messages:fly' => 'Verstuur',
+ 'messages:replying' => 'Bericht beantwoorden',
+ 'messages:sendmessage' => 'Verstuur een bericht',
+ 'messages:compose' => 'Verstuur een bericht',
+ 'messages:sentmessages' => 'Verstuurde berichten',
+ 'messages:recent' => 'Recente berichten',
+ 'messages:original' => 'Originele bericht',
+ 'messages:yours' => 'Jouw bericht',
+ 'messages:answer' => 'Antwoorden',
+ 'messages:toggle' => 'Selecteer alles',
+ 'messages:markread' => 'Markeer als gelezen',
+ 'messages:new' => 'Nieuw bericht',
+ 'notification:method:site' => 'Site',
+ 'messages:error' => 'Er was een probleem tijdens het opslaan van je bericht. Probeer het nogmaals.',
+ 'item:object:messages' => 'Berichten',
+ 'messages:posted' => 'Je bericht is succesvol verzonden.',
+ 'messages:email:subject' => 'Je hebt een nieuw bericht!',
+ 'messages:email:body' => 'Je hebt een nieuw bericht van %s. Het bericht is:
+
+%s
+
+Om jouw berichten te bekijken, klik hier:
+
+%s
+
+Om %s een bericht te sturen, klik hier:
+
+%s
+
+Je kunt niet antwoorden op deze email.',
+ 'messages:blank' => 'Sorry, je moet wel tekst invullen voordat we je bericht kunnen versturen.',
+ 'messages:notfound' => 'Sorry, we konden het opgegeven bericht niet vinden.',
+ 'messages:notdeleted' => 'Sorryd we konden dit bericht niet verwijderen.',
+ 'messages:nopermission' => 'Je hebt geen toegang om dit bericht te mogen verwijderen.',
+ 'messages:nomessages' => 'Er zijn geen berichten om weer te geven.',
+ 'messages:user:nonexist' => 'We konden de geadresseerde niet vinden in de gebruikers database.',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.notifications.php b/mod/languages/languages/nl/nl.notifications.php
new file mode 100644
index 000000000..bf36d1fee
--- /dev/null
+++ b/mod/languages/languages/nl/nl.notifications.php
@@ -0,0 +1,18 @@
+<?php
+$nl = array (
+ 'notifications:subscriptions:friends:title' => 'Vrienden',
+ 'notifications:subscriptions:friends:description' => 'Het volgende is een automatische verzameling van je vrienden. Om updates te ontvangen selecteer hieronder. Dit zal invloed hebben op de betreffende gebruikers in het hoofd notificatie-instellingen overzicht aan de onderkant van deze pagina.',
+ 'friends:all' => 'Alle vrienden',
+ 'notifications:subscriptions:personal:description' => 'Ontvang een notificatie als er acties worden ondernomen op jou content',
+ 'notifications:subscriptions:personal:title' => 'Persoonlijke notificatie',
+ 'notifications:subscriptions:collections:edit' => 'Om je vrienden collecties aan te passen, klik hier.',
+ 'notifications:subscriptions:changesettings' => 'Notificaties',
+ 'notifications:subscriptions:changesettings:groups' => 'Groeps notificaties',
+ 'notifications:subscriptions:title' => 'Notificatie per gebruiker',
+ 'notifications:subscriptions:description' => 'Om notificaties te ontvangen wanneer je vrienden nieuwe content plaatsen, vindt ze hieronder en selecteer de meldings manier die je wilt gebruiken.',
+ 'notifications:subscriptions:groups:description' => 'Om een notificatie te ontvangen wanneer er nieuwe content is in een groep waarvan je lid bent, zoek de groep hieronder op en selecteer de meldings manier die je wilt gebruiken.',
+ 'notifications:subscriptions:success' => 'Je notificatie instellingen zijn opgeslagen.',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.pages.php b/mod/languages/languages/nl/nl.pages.php
new file mode 100644
index 000000000..3f9718a4d
--- /dev/null
+++ b/mod/languages/languages/nl/nl.pages.php
@@ -0,0 +1,54 @@
+<?php
+$nl = array (
+ 'pages:owner' => '%s\'s pagina\'s',
+ 'pages:friends' => 'Pagina\'s van vrienden',
+ 'pages:add' => 'Voeg pagina toe',
+ 'pages:group' => 'Groep pagina\'s',
+ 'groups:enablepages' => 'Schakel groep pagina\'s in',
+ 'pages:revision' => 'Revisie',
+ 'pages:none' => 'Nog geen pagina\'s aangemaakt',
+ 'river:create:object:page' => '%s maakte de pagina %s',
+ 'river:create:object:page_top' => '%s maakte de pagina %s',
+ 'river:update:object:page' => '%s bewerkte de pagina %s',
+ 'river:update:object:page_top' => '%s bewerkte de pagina %s',
+ 'river:comment:object:page' => '%s reageerde op de pagina %s',
+ 'river:comment:object:page_top' => '%s reageerde op de pagina %s',
+ 'pages:error:no_title' => 'Je moet een titel opgeven voor deze pagina.',
+ 'pages:revision:subtitle' => 'Revisie aangemaakt %s door %s',
+ 'pages' => 'Pagina\'s',
+ 'pages:all' => 'Alle site pagina\'s',
+ 'pages:edit' => 'Bewerk deze pagina',
+ 'pages:delete' => 'Verwijder deze pagina',
+ 'pages:history' => 'Pagina geschiedenis',
+ 'pages:view' => 'Bekijk pagina',
+ 'pages:navigation' => 'Pagina navigatie',
+ 'item:object:page_top' => 'Hoofd pagina\'s',
+ 'item:object:page' => 'Pagina\'s',
+ 'pages:nogroup' => 'Deze groep heeft nog geen pagina\'s',
+ 'pages:more' => 'Meer pagina\'s',
+ 'pages:title' => 'Pagina titel',
+ 'pages:description' => 'Jouw tekst',
+ 'pages:tags' => 'Tags',
+ 'pages:access_id' => 'Toegang',
+ 'pages:write_access_id' => 'Schrijf toegang',
+ 'pages:noaccess' => 'Geen toegang tot de pagina',
+ 'pages:cantedit' => 'Je kunt deze pagina niet bewerken',
+ 'pages:saved' => 'Pagina opgeslagen',
+ 'pages:notsaved' => 'Pagina kon niet worden opgeslagen',
+ 'pages:delete:success' => 'Je pagina is succesvol verwijderd.',
+ 'pages:delete:failure' => 'De pagina kon niet worden verwijderd.',
+ 'pages:strapline' => 'Laatst bijgewerkt %s door %s',
+ 'pages:num' => 'Aantal pagina\'s om weer te geven',
+ 'pages:widget:description' => 'Dit is een lijst met jouw pagina\'s.',
+ 'pages:label:view' => 'Bekijk pagina',
+ 'pages:label:edit' => 'Bewerk pagina',
+ 'pages:label:history' => 'Pagina geschiedenis',
+ 'pages:sidebar:this' => 'Deze pagina',
+ 'pages:sidebar:children' => 'Sub pagina\'s',
+ 'pages:sidebar:parent' => 'Hoofdpagina',
+ 'pages:newchild' => 'Maak een sub pagina',
+ 'pages:backtoparent' => 'Terug naar \'%s\'',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.profile.php b/mod/languages/languages/nl/nl.profile.php
new file mode 100644
index 000000000..9d2773ee3
--- /dev/null
+++ b/mod/languages/languages/nl/nl.profile.php
@@ -0,0 +1,8 @@
+<?php
+$nl = array (
+ 'profile' => 'Profiel',
+ 'profile:notfound' => 'Sorry. Het opgegeven profiel kon niet gevonden worden.',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.reportedcontent.php b/mod/languages/languages/nl/nl.reportedcontent.php
new file mode 100644
index 000000000..6207edaad
--- /dev/null
+++ b/mod/languages/languages/nl/nl.reportedcontent.php
@@ -0,0 +1,36 @@
+<?php
+$nl = array (
+ 'admin:administer_utilities:reportedcontent' => 'Gemelde inhoud',
+ 'reportedcontent:this:tooltip' => 'Meld dit aan de beheerder',
+ 'reportedcontent:delete' => 'Verwijder de melding',
+ 'reportedcontent:archive' => 'Archiveer de melding',
+ 'reportedcontent:objecttitle' => 'Pagina titel',
+ 'reportedcontent:objecturl' => 'Pagina url',
+ 'reportedcontent:instructions' => 'De melding zal worden verstuurd aan de beheerders van deze site ter controle.',
+ 'reportedcontent:numbertodisplay' => 'Aantal meldingen om weer te geven',
+ 'reportedcontent:widget:description' => 'Toon gemelde inhoud',
+ 'reportedcontent:user' => 'Rapporteer gebruiker',
+ 'item:object:reported_content' => 'Gemelde items',
+ 'reportedcontent' => 'Gemelde inhoud',
+ 'reportedcontent:this' => 'Meld dit',
+ 'reportedcontent:none' => 'Er is geen gemelde inhoud',
+ 'reportedcontent:report' => 'Meld aan beheerder',
+ 'reportedcontent:title' => 'Pagina titel',
+ 'reportedcontent:deleted' => 'De gemelde inhoud is verwijderd',
+ 'reportedcontent:notdeleted' => 'We konden de gemelde inhoud niet verwijderen',
+ 'reportedcontent:areyousure' => 'Weet je zeker dat je dit wilt verwijderen?',
+ 'reportedcontent:archived' => 'De melding is gearchiveerd',
+ 'reportedcontent:visit' => 'Bekijk gemelde inhoud',
+ 'reportedcontent:by' => 'Gemeld door',
+ 'reportedcontent:reason' => 'Reden van melding',
+ 'reportedcontent:description' => 'Waarom meld je dit?',
+ 'reportedcontent:address' => 'Locatie van het item',
+ 'reportedcontent:success' => 'Je melding is verstuurd naar de Site Administrator',
+ 'reportedcontent:failing' => 'Je melding kon niet worden verzonden',
+ 'reportedcontent:moreinfo' => 'Meer informatie',
+ 'reportedcontent:failed' => 'Sorry, de poging om deze inhoud te melden is mislukt.',
+ 'reportedcontent:notarchived' => 'Het was niet mogelijk om deze melding te archiveren',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.search.php b/mod/languages/languages/nl/nl.search.php
new file mode 100644
index 000000000..12cbbb33c
--- /dev/null
+++ b/mod/languages/languages/nl/nl.search.php
@@ -0,0 +1,18 @@
+<?php
+$nl = array (
+ 'search:comment_by' => 'door',
+ 'search:enter_term' => 'Geef een zoekterm op:',
+ 'search:no_results' => 'Geen resultaten:',
+ 'search:matched' => 'Gevonden:',
+ 'search:results' => 'Resultaten voor %s',
+ 'search:no_query' => 'Geef een zoekopdracht op',
+ 'search:search_error' => 'Fout',
+ 'search:more' => '+%s meer %s',
+ 'search_types:tags' => 'Tags',
+ 'search_types:comments' => 'Reacties',
+ 'search:comment_on' => 'Reacties op "%s"',
+ 'search:unavailable_entity' => 'Niet beschikbare Entity',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.tagcloud.php b/mod/languages/languages/nl/nl.tagcloud.php
new file mode 100644
index 000000000..e94372758
--- /dev/null
+++ b/mod/languages/languages/nl/nl.tagcloud.php
@@ -0,0 +1,9 @@
+<?php
+$nl = array (
+ 'tagcloud:widget:title' => 'Tag cloud',
+ 'tagcloud:widget:description' => 'Tag cloud',
+ 'tagcloud:widget:numtags' => 'Aantal tags om weer te geven',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.thewire.php b/mod/languages/languages/nl/nl.thewire.php
new file mode 100644
index 000000000..af6a629b1
--- /dev/null
+++ b/mod/languages/languages/nl/nl.thewire.php
@@ -0,0 +1,36 @@
+<?php
+$nl = array (
+ 'thewire:by' => 'Wire bericht door %s',
+ 'thewire:replying' => 'Antwoord op %s (@%s) die schreef',
+ 'thewire:thread' => 'Conversatie',
+ 'thewire:tags' => 'Wire berichten met de tag \'%s\'',
+ 'thewire:noposts' => 'Nog geen wire berichten',
+ 'thewire:update' => 'Bijwerken',
+ 'thewire:previous' => 'Vorige',
+ 'thewire:hide' => 'Verberg',
+ 'thewire:previous:help' => 'Bekijk vorige bericht',
+ 'thewire:hide:help' => 'Verberg vorige bericht',
+ 'river:create:object:thewire' => '%s plaatste op de %s',
+ 'thewire:wire' => 'wire',
+ 'thewire:widget:desc' => 'Toon je laatste wire berichten',
+ 'thewire:notify:subject' => 'Nieuw wire bericht',
+ 'thewire:notify:reply' => '%s reageerde op %s op de wire:',
+ 'thewire:notify:post' => '%s plaatste op de wire:',
+ 'thewire:moreposts' => 'Meer wire berichten',
+ 'thewire' => 'The wire',
+ 'thewire:user' => '%s\'s wire',
+ 'thewire:everyone' => 'Alle Wire berichten',
+ 'thewire:reply' => 'Antwoord',
+ 'thewire:charleft' => 'karakters resterend',
+ 'item:object:thewire' => 'Wire berichten',
+ 'thewire:friends' => 'Je vrienden op The WIre',
+ 'thewire:num' => 'Aantal items om weer te geven',
+ 'thewire:posted' => 'Je bericht is succesvol geplaatst op The Wire.',
+ 'thewire:deleted' => 'Je notitie is succesvol verwijderd.',
+ 'thewire:blank' => 'Sorry; je moet wel is in typen voordat je notitie kan worden opgeslagen.',
+ 'thewire:notfound' => 'Sorry; we konden de opgegeven notitie niet vinden.',
+ 'thewire:notdeleted' => 'Sorry; we konden deze melding niet verwijderen.',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.tinymce.php b/mod/languages/languages/nl/nl.tinymce.php
new file mode 100644
index 000000000..b12e3aac1
--- /dev/null
+++ b/mod/languages/languages/nl/nl.tinymce.php
@@ -0,0 +1,9 @@
+<?php
+$nl = array (
+ 'tinymce:remove' => 'Verwijder editor',
+ 'tinymce:add' => 'Toon editor',
+ 'tinymce:word_count' => 'Aantal woorden:',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.twitter.php b/mod/languages/languages/nl/nl.twitter.php
new file mode 100644
index 000000000..233264fbe
--- /dev/null
+++ b/mod/languages/languages/nl/nl.twitter.php
@@ -0,0 +1,12 @@
+<?php
+$nl = array (
+ 'twitter:title' => 'Twitter',
+ 'twitter:info' => 'Toon je laatste tweets',
+ 'twitter:notset' => 'Deze Twitter Widget is nog niet ingesteld. Om je laatste Tweets te laten zien klik op "Bewerk" en vul je gegevens in',
+ 'twitter:username' => 'Geef je Twitter gebruikersnaam op.',
+ 'twitter:num' => 'Aantal Tweets om te tonen.',
+ 'twitter:visit' => 'bekijk mijn Twitter',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/nl/nl.twitter_api.php b/mod/languages/languages/nl/nl.twitter_api.php
new file mode 100644
index 000000000..203842f4a
--- /dev/null
+++ b/mod/languages/languages/nl/nl.twitter_api.php
@@ -0,0 +1,41 @@
+<?php
+if(elgg_is_active_plugin('twitter_api')){
+ $language = array (
+ 'twitter_api:usersettings:site_not_configured' => 'Een beheerder moet Twitter eerst instellen voordat het gebruikt kan worden.',
+ 'twitter_api' => 'Twitter Services',
+ 'twitter_api:requires_oauth' => 'Twitter Services vereist dat de OAuth libraries plugin is ingeschakeld.',
+ 'twitter_api:consumer_key' => 'Consumer Key',
+ 'twitter_api:consumer_secret' => 'Consumer Secret',
+ 'twitter_api:settings:instructions' => 'Je moet een consumer key en secret aanvragen bij <a href="https://dev.twitter.com/apps/new" target="_blank">Twitter</a>. Vul het formulier in voor een nieuwe applicatie. Selecteer "Browser" voor het applicatie type en "Read & Write" voor de rechten. De callback url is %stwitter_api/authorize',
+ 'twitter_api:usersettings:description' => 'Koppel je %s account met Twitter.',
+ 'twitter_api:usersettings:request' => 'Je moet eerst %2$s <a href="%1$s">autoriseren</a> om toegang te krijgen tot je Twitter account.',
+ 'twitter_api:usersettings:cannot_revoke' => 'Je kunt je account niet ontkoppelen van Twitter omdat je geen e-mail adres of wachtwoord hebt opgegeven. <a href="%s">Vul ze nu in</a>',
+ 'twitter_api:authorize:error' => 'Fout tijdens het autoriseren van Twitter.',
+ 'twitter_api:authorize:success' => 'Twitter toegang is geautoriseerd.',
+ 'twitter_api:usersettings:authorized' => 'Je hebt %s geautoriseerd om toegang te krijgen tot je Twitter account: @%s.',
+ 'twitter_api:usersettings:revoke' => 'Klik <a href="%s">hier</a> om de toegang in te trekken.',
+ 'twitter_api:revoke:success' => 'Twitter toegang is ingetrokken.',
+ 'twitter_api:login' => 'Mogen bestaande gebruikers die hun Twitter account hebben gekoppeld zich aanmelden met Twitter?',
+ 'twitter_api:new_users' => 'Mogen nieuwe gebruikers zich registreren met hun Twitter account, zelfs als registratie is uitgeschakeld?',
+ 'twitter_api:login:success' => 'Je bent aangemeld.',
+ 'twitter_api:login:error' => 'Aanmelden met Twitter mislukt.',
+ 'twitter_api:login:email' => 'Je moet een geldig e-mail adres opgeven voor je nieuwe %s account.',
+ 'twitter_api:invalid_page' => 'Ongeldige pagina',
+ 'twitter_api:deprecated_callback_url' => 'De callback URL is gewijzigd voor de Twitter API van %s. Vraag de beheerder om dit aan te passen.',
+ 'twitter_api:interstitial:settings' => 'Configureer je instellingen',
+ 'twitter_api:interstitial:description' => 'Je bent bijna klaar om gebruik te maken van %s! We hebben nog een paar gegevens nodig voordat je verder kunt. Deze zijn optioneel, maar maken het mogelijk dat je je kunt aanmelden als Twitter niet beschikbaar is of als je de koppeling met Twitter verwijderd.',
+ 'twitter_api:interstitial:username' => 'Dit is je gebruikersnaam. Dit kan niet worden aangepast. Als je een wachtwoord opgeeft, kun je je aanmelden met deze gebruikersnaam of je e-mail adres.',
+ 'twitter_api:interstitial:name' => 'Dit is de naam die mensen zien als ze corresponderen met jou.',
+ 'twitter_api:interstitial:email' => 'Je e-mail adres. Gebruikers kunnen deze standaard niet zien.',
+ 'twitter_api:interstitial:password' => 'Een wachtwoord om je aan te melden als Twitter niet beschikbaar is of als je accounts niet meer gekoppeld zijn.',
+ 'twitter_api:interstitial:password2' => 'Hetzelfde wachtwoord, nogmaals',
+ 'twitter_api:interstitial:no_thanks' => 'Nee bedankt',
+ 'twitter_api:interstitial:no_display_name' => 'Je moet een weergave naam hebben.',
+ 'twitter_api:interstitial:invalid_email' => 'Je moet een geldig e-mail adres opgeven of niets.',
+ 'twitter_api:interstitial:existing_email' => 'Dit e-mail adres is al geregistreerd op deze site.',
+ 'twitter_api:interstitial:password_mismatch' => 'Je wachtwoorden komen niet overeen.',
+ 'twitter_api:interstitial:cannot_save' => 'De account details kunnen niet worden opgeslagen.',
+ 'twitter_api:interstitial:saved' => 'Account details opgeslagen!',
+ );
+ add_translation("nl", $language);
+} \ No newline at end of file
diff --git a/mod/languages/languages/nl/nl.uservalidationbyemail.php b/mod/languages/languages/nl/nl.uservalidationbyemail.php
new file mode 100644
index 000000000..58aa564b0
--- /dev/null
+++ b/mod/languages/languages/nl/nl.uservalidationbyemail.php
@@ -0,0 +1,49 @@
+<?php
+$nl = array (
+ 'admin:users:unvalidated' => 'Ongevalideerd',
+ 'email:validate:subject' => '%s bevestig aub je email adres voor %s!',
+ 'email:validate:body' => 'Beste %s,
+
+Voordat je gebruik kunt maken van %s, moet je je e-mail adres bevestigen.
+
+Om je e-mail adres te bevestigen moet je op onderstaande link klikken:
+%s
+
+Als je niet op de link kunt klikken, kopieer en plak deze dan handmatig in de adresbalk van je browser.
+
+%s
+%s',
+ 'uservalidationbyemail:login:fail' => 'Je account is nog niet gevalideerd dus het aanmelden is mislukt. Er is nog een validatie mail verstuurd.',
+ 'uservalidationbyemail:admin:no_unvalidated_users' => 'Geen ongevalideerde gebruikers',
+ 'uservalidationbyemail:admin:unvalidated' => 'Ongevalideerd',
+ 'uservalidationbyemail:admin:user_created' => 'Geregistreerd %s',
+ 'uservalidationbyemail:admin:resend_validation' => 'Validatie verzenden',
+ 'uservalidationbyemail:admin:validate' => 'Valideren',
+ 'uservalidationbyemail:admin:delete' => 'Verwijderen',
+ 'uservalidationbyemail:confirm_validate_user' => 'Valideer %s?',
+ 'uservalidationbyemail:confirm_resend_validation' => 'Validatie e-mail versturen aan %s?',
+ 'uservalidationbyemail:confirm_delete' => 'Verwijder %s?',
+ 'uservalidationbyemail:confirm_validate_checked' => 'Valideer geselecteerde gebruikers?',
+ 'uservalidationbyemail:confirm_resend_validation_checked' => 'Validatie e-mail versturen aan geselecteerde gebruikers?',
+ 'uservalidationbyemail:confirm_delete_checked' => 'Verwijder geselecteerde gebruikers?',
+ 'uservalidationbyemail:check_all' => 'Alle',
+ 'uservalidationbyemail:errors:unknown_users' => 'Onbekende gebruikers',
+ 'uservalidationbyemail:errors:could_not_validate_user' => 'Kon gebruiker niet valideren.',
+ 'uservalidationbyemail:errors:could_not_validate_users' => 'Kon de geselecteerde gebruikers niet valideren.',
+ 'uservalidationbyemail:errors:could_not_delete_user' => 'Kon de gebruiker niet verwijderen.',
+ 'uservalidationbyemail:errors:could_not_delete_users' => 'Kon de geselecteerde gebruikers niet verwijderen.',
+ 'uservalidationbyemail:errors:could_not_resend_validation' => 'Kon de validatie e-mail niet versturen.',
+ 'uservalidationbyemail:errors:could_not_resend_validations' => 'Kon de validatie e-mail niet versturen aan de geselecteerde gebruikers.',
+ 'uservalidationbyemail:messages:validated_user' => 'Gebruiker gevalideerd.',
+ 'uservalidationbyemail:messages:validated_users' => 'Alle geselecteerde gebruikers gevalideerd.',
+ 'uservalidationbyemail:messages:deleted_user' => 'Gebruiker verwijderd.',
+ 'uservalidationbyemail:messages:deleted_users' => 'Alle geselecteerde gebruikers verwijderd.',
+ 'uservalidationbyemail:messages:resent_validation' => 'Validatie opnieuw verzonden',
+ 'uservalidationbyemail:messages:resent_validations' => 'Validatie opnieuw verzonden aan alle geselecteerde gebruikers.',
+ 'email:confirm:fail' => 'Je e-mail adres kon niet worden geverifieerd...',
+ 'uservalidationbyemail:registerok' => 'Om je account te activeren, bevestig je email adres door te klikken op de link die we je gestuurd hebben.',
+ 'email:confirm:success' => 'Je hebt je e-mail adres bevestigd!',
+);
+
+add_translation("nl", $nl);
+
diff --git a/mod/languages/languages/pt/pt.blog.php b/mod/languages/languages/pt/pt.blog.php
new file mode 100644
index 000000000..745ab085f
--- /dev/null
+++ b/mod/languages/languages/pt/pt.blog.php
@@ -0,0 +1,50 @@
+<?php
+$pt = array (
+ 'blog' => 'Blogs ',
+ 'blog:blogs' => 'Blogs ',
+ 'blog:revisions' => 'Revisões',
+ 'blog:archives' => 'Arquivos',
+ 'blog:blog' => 'Blog ',
+ 'item:object:blog' => 'Blogs ',
+ 'blog:title:user_blogs' => 'Blog de %s',
+ 'blog:title:all_blogs' => 'Todos blogs do site',
+ 'blog:title:friends' => 'Blogs dos amigos',
+ 'blog:group' => 'Blog da Comunidade',
+ 'blog:enableblog' => 'Habilita blog da comunidade',
+ 'blog:write' => 'Escrever uma mensagem no blog',
+ 'blog:add' => 'Adicionar mensagem no blog',
+ 'blog:edit' => 'Editar mensagem no blog',
+ 'blog:excerpt' => 'Extrato',
+ 'blog:body' => 'Corpo',
+ 'blog:save_status' => 'Último salvo:',
+ 'blog:never' => 'Nunca',
+ 'blog:status' => 'Situação',
+ 'blog:status:draft' => 'Rascunho',
+ 'blog:status:published' => 'Publicado',
+ 'blog:status:unsaved_draft' => 'Rascunho não salvo',
+ 'blog:revision' => 'Revisão',
+ 'blog:auto_saved_revision' => 'Revisão salva automaticamente',
+ 'blog:message:saved' => 'Mensagem do blog salva.',
+ 'blog:error:cannot_save' => 'Não foi possível salvar mensagem do blog.',
+ 'blog:error:cannot_write_to_container' => 'Acesso insuficiente para salvar blog na comunidade.',
+ 'blog:error:post_not_found' => 'Esta mensagem foi removida, por ser inválida, ou você não possui permissão para visualizar.',
+ 'blog:messages:warning:draft' => 'Existe um rascunho não salvo para esta mensagem!',
+ 'blog:edit_revision_notice' => '(versão antiga)',
+ 'blog:message:deleted_post' => 'Mensagem do blog apagada.',
+ 'blog:error:cannot_delete_post' => 'Não foi possível apagar esta mensagem.',
+ 'blog:none' => 'Sem mensagem no blog',
+ 'blog:error:missing:title' => 'Por favor insira um título no blog!',
+ 'blog:error:missing:description' => 'Por favor digite o corpo do seu blog!',
+ 'blog:error:cannot_edit_post' => 'Esta mensagem pode não existe ou você não pode ter permissão para edição.',
+ 'blog:error:revision_not_found' => 'Não foi possível localizar esta revisão.',
+ 'river:create:object:blog' => '%s publicou uma mensagem no blog %s',
+ 'river:comment:object:blog' => '%s comentou o blog %s',
+ 'blog:newpost' => 'Uma nova mensagem de blog',
+ 'blog:widget:description' => 'Mostra suas últimas mensagens no blog.',
+ 'blog:moreblogs' => 'Mais mensagem do blog',
+ 'blog:numbertodisplay' => 'Número de mensagens do blog a serem visualizadas',
+ 'blog:noblogs' => 'Nenhuma mensagem no blog',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.bookmarks.php b/mod/languages/languages/pt/pt.bookmarks.php
new file mode 100644
index 000000000..b1ec98f71
--- /dev/null
+++ b/mod/languages/languages/pt/pt.bookmarks.php
@@ -0,0 +1,46 @@
+<?php
+$pt = array (
+ 'bookmarks' => 'Favoritos',
+ 'bookmarks:add' => 'Adicionar favorito',
+ 'bookmarks:edit' => 'Editar favoritos',
+ 'bookmarks:owner' => 'Favorito de %s',
+ 'bookmarks:friends' => 'Favoritos dos amigos',
+ 'bookmarks:everyone' => 'Todos os favoritos do site',
+ 'bookmarks:this' => 'Adicionar aos favoritos',
+ 'bookmarks:this:group' => 'Favoritos em %s',
+ 'bookmarks:bookmarklet' => 'Obter Marcador de favoritos',
+ 'bookmarks:bookmarklet:group' => 'Obter Marcador de Favoritos da Comunidade',
+ 'bookmarks:inbox' => 'Caixa de entrada dos favoritos',
+ 'bookmarks:morebookmarks' => 'Mais favoritos',
+ 'bookmarks:more' => 'Mais favoritos',
+ 'bookmarks:with' => 'Compartilhar com',
+ 'bookmarks:new' => 'Um novo item adicionado aos favoritos',
+ 'bookmarks:address' => 'hiperlink a ser marcado como favorito',
+ 'bookmarks:none' => 'Sem favoritos',
+ 'bookmarks:delete:confirm' => 'Você tem certeza de que deseja apagar este item?',
+ 'bookmarks:numbertodisplay' => 'Número de favoritos a serem exibidos',
+ 'bookmarks:shared' => 'Compartilhados',
+ 'bookmarks:visit' => 'Visitar o link',
+ 'bookmarks:recent' => 'Adicionados recentemente',
+ 'river:create:object:bookmarks' => '%s adicionou como favorito %s',
+ 'river:comment:object:bookmarks' => '%s comentou no favorito %s',
+ 'bookmarks:river:annotate' => 'adicionado um comentário neste link marcado como favorito',
+ 'bookmarks:river:item' => 'um item',
+ 'item:object:bookmarks' => 'Links favoritos',
+ 'bookmarks:group' => 'Favoritos da comunidade',
+ 'bookmarks:enablebookmarks' => 'Habilita favoritos na comunidade',
+ 'bookmarks:nogroup' => 'Esta comunidade ainda não tem nenhum favorito',
+ 'bookmarks:no_title' => 'Sem título',
+ 'bookmarks:widget:description' => 'Este dispositivo demonstra seus últimos itens favoritos.',
+ 'bookmarks:bookmarklet:description' => 'O marcador de favoritos permite que você compartilhe qualquer link que você encontrar na Internet com seus amigos, ou apenas marcá-lo como favorito para você mesmo. Para usar este recurso, apenas arraste o seguinte botão para a barra de links do seu navegador:',
+ 'bookmarks:bookmarklet:descriptionie' => 'Se você está usando o Internet Explorer, você precisará clicar com o botão direito no ícone do marcador de favoritos, selecionar \'adicionar em favoritos\', e então selecionar a barra de links.',
+ 'bookmarks:bookmarklet:description:conclusion' => 'Você poderá então salvar qualquer página que você visitar apenas clicando neste ícone a qualquer momento.',
+ 'bookmarks:save:success' => 'Este link foi adicionado aos favoritos com sucesso.',
+ 'bookmarks:delete:success' => 'Este hiperlink favorito foi apagado com sucesso.',
+ 'bookmarks:save:failed' => 'Este hiperlink favorito não pode ser salvo. Tenha certeza que você digitou titulo e endereço e então tente novamente.',
+ 'bookmarks:save:invalid' => 'O endereço do favorito é inválido e não pode ser salvo.',
+ 'bookmarks:delete:failed' => 'Este hiperlink favorito não pode ser apagado. Por favor, tente novamente.',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.brainstorm.php b/mod/languages/languages/pt/pt.brainstorm.php
new file mode 100644
index 000000000..7e7cd3f12
--- /dev/null
+++ b/mod/languages/languages/pt/pt.brainstorm.php
@@ -0,0 +1,63 @@
+<?php
+
+// Gerado pela extensão 'translationbrowser' 20111205-01:35:51 AM
+
+$portugues = array(
+ 'brainstorm:filter:top' => "Mais votadas" ,
+ 'brainstorm:filter:hot' => "Mais debatidas" ,
+ 'brainstorm:filter:new' => "Novo" ,
+ 'brainstorm:filter:accepted' => "Aceito" ,
+ 'brainstorm:filter:completed' => "Completo" ,
+ 'item:object:idea' => "Ideia" ,
+ 'river:create:object:idea' => "%s enviou ideia %s" ,
+ 'river:comment:object:idea' => "%s comentou a ideia %s" ,
+ 'river:edit:object:idea' => "%s editou ideia %s" ,
+ 'brainstorm:river:annotate' => "um comentário nesta ideia" ,
+ 'brainstorm:river:item' => "um item" ,
+ 'brainstorm' => "Ideias" ,
+ 'brainstorm:add' => "enviar uma nova ideia" ,
+ 'brainstorm:edit' => "Editar ideia" ,
+ 'brainstorm:new' => "Uma nova ideia" ,
+ 'brainstorm:owner' => "Ideias de %s" ,
+ 'brainstorm:idea:edit' => "Editar esta ideia" ,
+ 'brainstorm:idea:add' => "Adicionar uma ideia" ,
+ 'brainstorm:enablebrainstorm' => "Habilitar ideias" ,
+ 'brainstorm:group' => "Ideias na comunidade" ,
+ 'brainstorm:same_group' => "Na mesma comunidade:" ,
+ 'brainstorm:yourvotes' => "Seus votos:" ,
+ 'brainstorm:vote' => "Votar:" ,
+ 'brainstorm:status' => "Situação:" ,
+ 'brainstorm:state' => "Estado:" ,
+ 'brainstorm:status_info' => "Informação sobre situação:" ,
+ 'brainstorm:open' => "aberta" ,
+ 'brainstorm:under review' => "sob revisão" ,
+ 'brainstorm:planned' => "planejado" ,
+ 'brainstorm:started' => "iniciado" ,
+ 'brainstorm:completed' => "completo" ,
+ 'brainstorm:declined' => "não acolhida" ,
+ 'brainstorm:none' => "Nenhuma ideia." ,
+ 'brainstorm:novoteleft' => "votos sobrando." ,
+ 'brainstorm:onevoteleft' => "votos sobrando." ,
+ 'brainstorm:votesleft' => "votos sobrando." ,
+ 'brainstorm:search' => "pesquise ou envie uma ideia" ,
+ 'brainstorm:charleft' => "caracteres faltando." ,
+ 'brainstorm:search:find' => "Ideias encontradas. Votar ou " ,
+ 'brainstorm:search:none' => "Nenhuma ideia encontrada. Pesquise novamente ou " ,
+ 'brainstorm:widget:title' => "Ideias." ,
+ 'brainstorm:widget:description' => "Apresenta ideias mais votadas." ,
+ 'brainstorm:more' => "Mais ideias" ,
+ 'brainstorm:numbertodisplay' => "Número de ideias para apresentar:" ,
+ 'brainstorm:idea:rate:submitted' => "Voto na ideia atribuido com sucesso." ,
+ 'brainstorm:idea:save:success' => "Sua ideia foi salva com sucesso." ,
+ 'brainstorm:idea:delete:success' => "Sua ideia foi apagada com sucesso." ,
+ 'brainstorm:idea:delete:failed' => "Um erro ocorreu enquanto apagava uma ideia." ,
+ 'brainstorm:idea:save:empty' => "Voce precisa atribuir um título e uma descrição para a ideia." ,
+ 'brainstorm:idea:save:failed' => "Um erro ocorreu enquanto salva a ideia." ,
+ 'brainstorm:idea:rate:error:ajax' => "Erro de conexão com o servidor." ,
+ 'brainstorm:unknown_idea' => "Ideia desconhecida." ,
+ 'brainstorm:idea:rate:error:value' => "Erro no valor atribuido para esta ideia." ,
+ 'brainstorm:idea:rate:error' => "Esta ideia não pode ser votada por um problema interno no servidor." ,
+ 'brainstorm:idea:rate:error:underzero' => "Sua quantidade de votos sobrando não permitem votar em ideias."
+);
+
+add_translation('pt', $portugues);
diff --git a/mod/languages/languages/pt/pt.categories.php b/mod/languages/languages/pt/pt.categories.php
new file mode 100644
index 000000000..d16e2dd03
--- /dev/null
+++ b/mod/languages/languages/pt/pt.categories.php
@@ -0,0 +1,12 @@
+<?php
+$pt = array (
+ 'categories' => 'Categorias',
+ 'categories:settings' => 'Definir as categorias do Site',
+ 'categories:explanation' => 'Para definir algumas categorias gerias que serão utilizadas no sistema, entre-as abaixo, separada por vírgulas. Ferramentas compatíveis exibirão as categorias quando o usuário criar ou editar conteúdos.',
+ 'categories:save:success' => 'Categorias foram salvas com sucesso.',
+ 'categories:results' => 'Resultados para a categoria do site: %s',
+ 'categories:on_activate_reminder' => 'As categorias não funcionam enquanto não adicionar categorias . Adicione as categorias agora.',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.core.php b/mod/languages/languages/pt/pt.core.php
new file mode 100644
index 000000000..30617f6de
--- /dev/null
+++ b/mod/languages/languages/pt/pt.core.php
@@ -0,0 +1,966 @@
+<?php
+$pt = array (
+ 'item:site' => 'Sites ',
+ 'login' => 'Entrar',
+ 'loginok' => 'Você se conectou com sucesso.',
+ 'loginerror' => 'Ocorreu um erro na tentativa se conectar. Isto pode ter ocorrido pois você não validou sua conta, as informações que você forneceu estão incorretas ou você tentou se conectar muitas vezes. Certifique-se de que seus dados estão corretos e tente novamente.',
+ 'login:empty' => 'Login e senha são necessários.',
+ 'login:baduser' => 'Não foi possível carregar sua conta de usuário.',
+ 'auth:nopams' => 'Erro interno. Nenhum método de autenticação está instalado.',
+ 'logout' => 'Sair',
+ 'logoutok' => 'Você se desconectou com sucesso.',
+ 'logouterror' => 'Não foi possível desconectar com sucesso. Por favor, tente novamente.',
+ 'loggedinrequired' => 'Você deve estar conectado para ver esta página.',
+ 'adminrequired' => 'Você deve ser um administrador para ver esta página.',
+ 'membershiprequired' => 'Você deve fazer parte da comunidade para ver está página.',
+ 'exception:title' => 'Erro crítico.',
+ 'actionundefined' => 'A ação requerida (%s) não está definida no sistema.',
+ 'actionnotfound' => 'A arquivo de ação <i>(action file)</i> para %s não foi encontrado.',
+ 'actionloggedout' => 'Você não pode executar esta ação enquando desconectado.',
+ 'actionunauthorized' => 'Você não está autorizado a executar esta ação',
+ 'InstallationException:SiteNotInstalled' => 'Não foi possível realizar esta solicitação. Este site não está configurado ou o banco de dados está inativo.',
+ 'InstallationException:MissingLibrary' => 'Não foi possível carregar %s',
+ 'InstallationException:CannotLoadSettings' => 'Elgg não pode carregar o arquivo de preferências. Ele não existe ou existe uma restrição de permissão ao arquivo.',
+ 'SecurityException:Codeblock' => 'Acesso negado para executar blocos de código privilegiado',
+ 'DatabaseException:WrongCredentials' => 'Elgg não pôde se conectar ao banco de dados usando as credenciais fornecidas. Verifique o arquivo de configurações',
+ 'DatabaseException:NoConnect' => 'Elgg não pode selecionar o banco de dados \'%s\', verifique se o banco de dados foi criado e se você tem acesso a ele.',
+ 'SecurityException:FunctionDenied' => 'Acesso a função privilegiada \'%s\' foi negado.',
+ 'DatabaseException:DBSetupIssues' => 'Houve um certo número de questões: ',
+ 'DatabaseException:ScriptNotFound' => 'Elgg não consegui encontrar o script de banco de dados solicitado em %s.',
+ 'DatabaseException:InvalidQuery' => 'Pesquisa inválida <i>(Invalid query)</i>',
+ 'IOException:FailedToLoadGUID' => 'Falha ao carregar novo %s de identificação (GUID): %d',
+ 'InvalidParameterException:NonElggObject' => 'Foi passado um \'non-ElggObject\' para um construtor \'ElggObject\'',
+ 'InvalidParameterException:UnrecognisedValue' => 'Valor não reconhecido passado para o constuctor.',
+ 'InvalidClassException:NotValidElggStar' => 'GUID:%d não é válido %s',
+ 'PluginException:MisconfiguredPlugin' => '%s (guid: %s) é um plugin mal configurado. Ele foi desativado. Por favor veja o Wiki Elgg para possíveis causas (http://docs.elgg.org/wiki/).',
+ 'PluginException:CannotStart' => '%d (guid:%s) não pode ser iniciado. Razão: %s',
+ 'PluginException:InvalidID' => '%s é um identificador (ID) inválido para o plugin.',
+ 'PluginException:InvalidPath' => '%s é um caminho inválido para o plugin.',
+ 'PluginException:InvalidManifest' => 'Arquivo do manifesto inválido para o plugin %s',
+ 'PluginException:InvalidPlugin' => '%s não é um plugin válido.',
+ 'PluginException:InvalidPlugin:Details' => '%s não é um plugin válido: %s',
+ 'PluginException:NullInstantiated' => 'ElggPlugin não pode ser iniciado com valor nulo.Você deve passar um valor de GUID, um identificador de plugin (ID), ou um caminho (full path).',
+ 'ElggPlugin:MissingID' => 'Identificador (ID) do plugin perdido (guid %s)',
+ 'ElggPlugin:NoPluginPackagePackage' => '\'ElggPluginPackage\' no identificador (ID) do plugin perdido %s (guid %s)',
+ 'ElggPluginPackage:InvalidPlugin:MissingFile' => 'Arquivo perdido %s no pacote.',
+ 'ElggPluginPackage:InvalidPlugin:InvalidDependency' => 'Tipo de dependência inválida "%s"',
+ 'ElggPluginPackage:InvalidPlugin:InvalidProvides' => 'Tipos fornecidos <i>(provides)</i> inválidos "%s"',
+ 'ElggPluginPackage:InvalidPlugin:CircularDep' => 'Dependência %s inválida "%s" no plugin %s. Plugins não podem ter conflito ou requerer algo que eles proveem. ',
+ 'ElggPlugin:Exception:CannotIncludeFile' => 'Não foi possível incluir %s para o plugin %s (guid: %s) em %s. Verifique permissões!',
+ 'ElggPlugin:Exception:CannotRegisterViews' => 'Não foi possível abrir visões do diretório %s para o plugin %s (guid: %s) em %s. Verifique permissões!',
+ 'ElggPlugin:Exception:CannotRegisterLanguages' => 'Não foi possível registrar linguagens para o plugin %s (guid: %s) em %s. Verifique permissões!',
+ 'ElggPlugin:Exception:NoID' => 'Sem identificador (ID) para o plugin guid %s!',
+ 'PluginException:ParserError' => 'Erro analisando <i>(Error parsing)</i> o manifesto com API versão %s no plugin %s.',
+ 'PluginException:NoAvailableParser' => 'Não foi possível encontrar um analisador <i>(parser)</i> para o manifesto da API versão %s no plugin %s.',
+ 'PluginException:ParserErrorMissingRequiredAttribute' => 'Perda do atributo \'%s\' requerido no manifesto do plugin %s.',
+ 'ElggPlugin:Dependencies:Requires' => 'Requisitos',
+ 'ElggPlugin:Dependencies:Suggests' => 'Sugestões',
+ 'ElggPlugin:Dependencies:Conflicts' => 'Conflitos',
+ 'ElggPlugin:Dependencies:Conflicted' => 'Em conflitos',
+ 'ElggPlugin:Dependencies:Provides' => 'Fornecidos <i>(provides)</i>',
+ 'ElggPlugin:Dependencies:Priority' => 'Prioridade',
+ 'ElggPlugin:Dependencies:Elgg' => 'Versão do Elgg',
+ 'ElggPlugin:Dependencies:PhpExtension' => 'Extensões do PHP: %s',
+ 'ElggPlugin:Dependencies:PhpIni' => 'Configurações do arquivo \'ini\' PHP:%s',
+ 'ElggPlugin:Dependencies:Plugin' => 'Plugin: %s ',
+ 'ElggPlugin:Dependencies:Priority:After' => 'Após %s',
+ 'ElggPlugin:Dependencies:Priority:Before' => 'Antes %s',
+ 'ElggPlugin:Dependencies:Priority:Uninstalled' => '%s não está instalado',
+ 'ElggPlugin:Dependencies:Suggests:Unsatisfied' => 'Perdido',
+ 'ElggPlugin:InvalidAndDeactivated' => '%s é um plugin inválido e foi desativado.',
+ 'InvalidParameterException:NonElggUser' => 'Foi passado um \'non-ElggUser\' para um construtor \'ElggUser\'!',
+ 'InvalidParameterException:NonElggSite' => 'Foi passado um \'non-ElggSite\' para um construtor \'ElggSite\'!',
+ 'InvalidParameterException:NonElggGroup' => 'Foi passado um \'non-ElggGroup\' para um construtor \'ElggGroup\'!',
+ 'IOException:UnableToSaveNew' => 'Não foi possível salvar um novo %s',
+ 'InvalidParameterException:GUIDNotForExport' => 'Identificador (GUID) não foi especificado durante a exportação, isto nunca deve ocorrer.',
+ 'InvalidParameterException:NonArrayReturnValue' => 'A função de serialização de entidade passou um parâmetro de retorno de valor que não é um vetor.',
+ 'ConfigurationException:NoCachePath' => 'Endereço do \'cache\' não definido',
+ 'IOException:NotDirectory' => '%s não é um diretório.',
+ 'IOException:BaseEntitySaveFailed' => 'Não foi possível salvar novas entidades de informação bases de objetos <i>(new object\'s base entity information) </i>!',
+ 'InvalidParameterException:UnexpectedODDClass' => '<i>import()</i> passou uma classe ODD inexperada.',
+ 'InvalidParameterException:EntityTypeNotSet' => 'Tipo de entidade deve ser definida.',
+ 'ClassException:ClassnameNotClass' => '%s não é %s.',
+ 'ClassNotFoundException:MissingClass' => 'Classe \'%s\' não foi encontrada, plugin perdido?',
+ 'InstallationException:TypeNotSupported' => 'Tipo %s não é suportado. Isto indica um erro na sua instalação, mais provável que seja causado por uma atualização <i>(upgrade)</i> incompleta.',
+ 'ImportException:ImportFailed' => 'Não foi possível importar o elemento %d',
+ 'ImportException:ProblemSaving' => 'Aconteceu um problema salvando %s',
+ 'ImportException:NoGUID' => 'Nova entidade foi criada mas não possui identificador (GUID), isto não deveria ocorrer.',
+ 'ImportException:GUIDNotFound' => 'Entidade \'%d\' não pode ser encontrada.',
+ 'ImportException:ProblemUpdatingMeta' => 'Aconteceu um problema atualizando \'%s\' na entidade \'%d\'',
+ 'ExportException:NoSuchEntity' => 'Nenhum indentificador (GUID) da entidade:%d',
+ 'ImportException:NoODDElements' => 'Nenhum elemento <i>OpenDD</i> encontrada na importação de dados. Importação falhou.',
+ 'ImportException:NotAllImported' => 'Nem todos elementos foram importados.',
+ 'InvalidParameterException:UnrecognisedFileMode' => 'Modo de arquivo não reconhecido \'%s\'',
+ 'InvalidParameterException:MissingOwner' => 'Arquivo %s (%d) teve o proprietário perdido!',
+ 'IOException:CouldNotMake' => 'Não foi possível fazer %s',
+ 'IOException:MissingFileName' => 'Você deve definir um nome antes de abrir o arquivo.',
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => 'Não foi possível carregar a classe de armazenamento %s para o arquivo %u',
+ 'NotificationException:NoNotificationMethod' => 'Nenhum método de notificação definido.',
+ 'NotificationException:NoHandlerFound' => 'Nenhum <i>handler</i> encontrado para \'%s\' ou esto não é cabível <i>callable</i>.',
+ 'NotificationException:ErrorNotifyingGuid' => 'Aconteceu um erro enquanto notificava %d',
+ 'NotificationException:NoEmailAddress' => 'Não foi possível obter endereço de email para o identificador (GUID):%d',
+ 'NotificationException:MissingParameter' => 'Perdido um parâmetro obrigatório, \'%s\'',
+ 'DatabaseException:WhereSetNonQuery' => 'Onde os conjuntos não contém <i>\'WhereQueryComponent\'</i>',
+ 'DatabaseException:SelectFieldsMissing' => 'Campos perdidos na pesquisa selecionada <i>(select style query)</i>',
+ 'DatabaseException:UnspecifiedQueryType' => 'Não foi possível reconhecer ou tipo de pergunta inexperada.',
+ 'DatabaseException:NoTablesSpecified' => 'Nenhuma tabela definida para pesquisa <i>(specified for query)</i>.',
+ 'DatabaseException:NoACL' => 'Nenhum controle de acesso foi definido na pesquisa <i>(provided on query)</i>',
+ 'InvalidParameterException:NoEntityFound' => 'Nenhuma entidade encontrada, não existe ou você não possui acesso a ela.',
+ 'InvalidParameterException:GUIDNotFound' => 'Idenfiicador (GUID):%s não pode ser encontrado, ou você não possui acesso a ela;',
+ 'InvalidParameterException:IdNotExistForGUID' => 'Desculpe-me, \'%s\' não existe para o identificador (guid):%d',
+ 'InvalidParameterException:CanNotExportType' => 'Desculpe, eu não sei como exportar \'%s\'',
+ 'InvalidParameterException:NoDataFound' => 'Não foi possível encontrar nenhuma informação.',
+ 'InvalidParameterException:DoesNotBelong' => 'Não pertence a entidade.',
+ 'InvalidParameterException:DoesNotBelongOrRefer' => 'Não pertence ou não se refere a entidade.',
+ 'InvalidParameterException:MissingParameter' => 'Parâmetro perdido, você precisa fornecer o identificador (GUID).',
+ 'InvalidParameterException:LibraryNotRegistered' => '%s não é uma biblioteca registrada',
+ 'InvalidParameterException:LibraryNotFound' => 'Não foi possível carregar a biblioteca %s de %s',
+ 'APIException:ApiResultUnknown' => 'Resultado do API é de um tipo desconhecido, isto nunca deveria acontecer.',
+ 'ConfigurationException:NoSiteID' => 'Nenhum identificador (ID) do site foi definido.',
+ 'SecurityException:APIAccessDenied' => 'Desculpe, acesso ao API foi desabilitado pelo administrador.',
+ 'SecurityException:NoAuthMethods' => 'Nenhum método de autenticação foi encontrado que pudesse autenticar esta requisição do API.',
+ 'SecurityException:ForwardFailedToRedirect' => 'Redirecionamento não pode ser determinado devido aos cabeçalhos enviados. Execução interrompida por segurança. Procure por mais informações em http://docs.elgg.org/ ',
+ 'InvalidParameterException:APIMethodOrFunctionNotSet' => 'Método ou função não definida na chamada do <i>expose_method() </i>',
+ 'InvalidParameterException:APIParametersArrayStructure' => 'Estrutura do <i>array</i> de parâmetors é incorreta para chamada ao método exposto \'%s\'',
+ 'InvalidParameterException:UnrecognisedHttpMethod' => 'Não foi possível reconhecer o método <i>http</i> %s para o método do api\'%s\'',
+ 'APIException:MissingParameterInMethod' => 'Parâmetro perdido %s no método %s',
+ 'APIException:ParameterNotArray' => '%s não parece ser um <i>array </i>.',
+ 'APIException:UnrecognisedTypeCast' => 'Não foi possível reconhecer o tipo <i>(type in cast)</i> %s para variável \'%s\' no método \'%s\'',
+ 'APIException:InvalidParameter' => 'Parâmetro inválido encontrado para \'%s\' no método \'%s\'.',
+ 'APIException:FunctionParseError' => '%s(%s) possui um erro (<i>parsing error</i>).',
+ 'APIException:FunctionNoReturn' => '%s(%s) retornou um valor.',
+ 'APIException:APIAuthenticationFailed' => 'Falha na chamada ao método para autenticação pelo API',
+ 'APIException:UserAuthenticationFailed' => 'Falha na chamada ao método para autenticação do usuário',
+ 'SecurityException:AuthTokenExpired' => '<i>TOKEN</i> de autenticação foi perdido, está inválido ou expirou.',
+ 'CallException:InvalidCallMethod' => '%s deve ser chamada usando \'%s\'',
+ 'APIException:MethodCallNotImplemented' => 'Chamada ao método \'%s\' não foi implementada.',
+ 'APIException:FunctionDoesNotExist' => 'Função ou método \'%s\' não é cabível <i>(is not callable)</i>',
+ 'APIException:AlgorithmNotSupported' => 'Algoritmo \'%s\' não é suportado ou foi desabilitado.',
+ 'ConfigurationException:CacheDirNotSet' => 'Diretório de <i>Cache</i> \'cache_path\' não definido.',
+ 'APIException:NotGetOrPost' => 'Métido solicitado deve ser <i>GET</i> ou <i>POST</i>',
+ 'APIException:MissingAPIKey' => 'Chave API perdida <i>(Missing API key)</i>',
+ 'APIException:BadAPIKey' => 'Chave ruim do API <i>(Bad API key)</i>',
+ 'APIException:MissingHmac' => 'Cabeçalho \'X-Elgg-hmac\' perdido',
+ 'APIException:MissingHmacAlgo' => 'Cabeçalho \'X-Elgg-hmac-algo\' perdido',
+ 'APIException:MissingTime' => 'Cabeçalho \'X-Elgg-time\' perdido',
+ 'APIException:MissingNonce' => 'Cabeçalho \'X-Elgg-nonce\' perdido',
+ 'APIException:TemporalDrift' => '\'X-Elgg-time\' é muito distante no passado ou no futuro. is too far in the past or future. Acorreu uma falha <i>(Epoch fail)</i>',
+ 'APIException:NoQueryString' => 'Nenhuma informação na pesquisa de caracteres <i>(query string)</i>',
+ 'APIException:MissingPOSTHash' => 'Cabeçalho \'X-Elgg-posthash\' perdido',
+ 'APIException:MissingPOSTAlgo' => 'Cabeçalho \'X-Elgg-posthash_algo\' perdido',
+ 'APIException:MissingContentType' => 'Perdido o tipo de conteúdo para a mensagem',
+ 'SecurityException:InvalidPostHash' => 'A informação do \'hash\' da MENSAGEM é invalida - Experado sera %s mas o obtido foi %s.',
+ 'SecurityException:DupePacket' => 'Pacote de assinatura já foi avaliado.',
+ 'SecurityException:InvalidAPIKey' => 'Chave da API <i>(API Key)</i> inválida ou perdida.',
+ 'NotImplementedException:CallMethodNotImplemented' => 'Chamada ao método \'%s\' não é suportada atualmente.',
+ 'NotImplementedException:XMLRPCMethodNotImplemented' => 'Chamada ao método \'MXML-RPC\' \'%s\' não implementada.',
+ 'InvalidParameterException:UnexpectedReturnFormat' => 'Chamada ao método \'%s\' retornou um resultado não esperado.',
+ 'CallException:NotRPCCall' => 'Chamada não aparenta ser uma chamada \'XML-RPC\' válida',
+ 'PluginException:NoPluginName' => 'O nome do plugin não pode ser encontrado',
+ 'SecurityException:authenticationfailed' => 'Usuário não pode ser autenticado',
+ 'CronException:unknownperiod' => '%s não é um período reconhecido.',
+ 'SecurityException:deletedisablecurrentsite' => 'Você não pode apagar ou desabilitar o site que você está visualizando agora!',
+ 'RegistrationException:EmptyPassword' => 'Os campos de senha não podem estar vazios',
+ 'RegistrationException:PasswordMismatch' => 'Senhas devem ser iguais',
+ 'LoginException:BannedUser' => 'Você foi banido deste site e não pode realizar seu login',
+ 'LoginException:UsernameFailure' => 'Não foi possível realizar seu login. Por favor, verifique seu login e senha.',
+ 'LoginException:PasswordFailure' => 'Não foi possível realizar seu login. Por favor, verifique seu login e senha.',
+ 'LoginException:AccountLocked' => 'Sua conta foi bloqueado por ter muitas tentativas erradas de login.',
+ 'LoginException:ChangePasswordFailure' => 'Falha na verificação da senha atual.',
+ 'memcache:notinstalled' => 'Módulo \'PHP memcache\' não está instalado, você deve instalar \'php5-memcache\'.',
+ 'memcache:noservers' => 'Não foi definido servidor de \'memcache\', por favor preencha esta variável',
+ 'memcache:versiontoolow' => '\'Memcache\' depende pelo menos da versão %s para funcionar, você está funcionando com a versão %s',
+ 'memcache:noaddserver' => 'Suporte a \'Multiple server\' foi desabilitado, você precisa atualizar sua biblioteca \'PECL memcache\'.',
+ 'deprecatedfunction' => 'Aviso: este código usa uma função obsoleta \'%s\' e não é compatível com esta versão do Elgg',
+ 'pageownerunavailable' => 'Aviso: o proprietário da página %d não está acessível!',
+ 'viewfailure' => 'Existe uma falha interna na visão %s',
+ 'changebookmark' => 'Por favor, verifique seu favorito para esta página',
+ 'noaccess' => 'Ete conteúdo foi removido, ou é inválido, ou você não possui permissão para visualização.',
+ 'error:default' => 'Oops.... algo deu errado.',
+ 'error:404' => 'Desculpe. Não foi possível encontrar a página que foi solicitada.',
+ 'system.api.list' => 'Listar todas as chamadas para API disponíveis no sistema.',
+ 'auth.gettoken' => 'Esta chamada ao API permite um usuário obter um \'token\' de usuário autenticado que pode ser usado para autenticação em uma futura chamada API. Passado com um <i>parameter auth_token</i>',
+ 'name' => 'Nome de exibição',
+ 'email' => 'Endereço de Email',
+ 'username' => 'Nome de usuário',
+ 'loginusername' => 'Login ou endereço de email',
+ 'password' => 'Senha',
+ 'passwordagain' => 'Senha (para verificação)',
+ 'admin_option' => 'Fazer deste usuário um administrador?',
+ 'PRIVATE' => 'Privado',
+ 'LOGGED_IN' => 'Usuários conectados',
+ 'PUBLIC' => 'Público',
+ 'access:friends:label' => 'Amigos',
+ 'access' => 'Acesso',
+ 'dashboard' => 'Painel',
+ 'dashboard:nowidgets' => 'Seu painel é sua porta de entrada para a comunidade. Clique em \'Editar painel\' para adicionar dispositivos para seguir os conteúdos em nossa comunidade.',
+ 'widgets:add' => 'Adicionar dispositivos à sua página',
+ 'widgets:add:description' => 'Escolha o dispositivo que você gostaria de adicionar ao seu painel arrastando-os da galeria à direita, para qualquer das três áreas abaixo, e posicione-o aonde deseja que ele apareça.
+
+Para apagar um dispositivo arraste-o de volta à <b>galeria</b>.',
+ 'widgets:position:fixed' => '(Posição fixa na página)',
+ 'widget:unavailable' => 'Você já adicionou este dispositivo <i>(widget)</i>',
+ 'widget:numbertodisplay' => 'Número de itens para apresentar',
+ 'widget:delete' => 'Remover %s',
+ 'widget:edit' => 'Personalize este dispositivo',
+ 'widgets' => 'Dispositivo',
+ 'widget' => 'Dispositivo',
+ 'item:object:widget' => 'Dispositivos',
+ 'widgets:save:success' => 'O dispositivo foi salvo com sucesso.',
+ 'widgets:save:failure' => 'Não foi possível salvar seu dispositivo, por favor tente novamente.',
+ 'widgets:add:success' => 'O dispositivo foi adicionado com sucesso.',
+ 'widgets:add:failure' => 'Não foi possível adicionar este dispositivo.',
+ 'widgets:move:failure' => 'Não foi possível armazenar a posição do novo dispositivo.',
+ 'widgets:remove:failure' => 'Não foi possíve remover este dispositivo',
+ 'group' => 'Comunidade',
+ 'item:group' => 'Comunidades',
+ 'user' => 'Usuário',
+ 'item:user' => 'Usuários',
+ 'friends' => 'Amigos',
+ 'friends:yours' => 'Seus amigos',
+ 'friends:owned' => 'Amigos de %s',
+ 'friend:add' => 'Adicionar amigo',
+ 'friend:remove' => 'Apagar amigo',
+ 'friends:add:successful' => 'Você adicionou %s como amigo.',
+ 'friends:add:failure' => 'Não foi possível adicionar %s como amigo. Por favor, tente novamente.',
+ 'friends:remove:successful' => 'Você apagou %s de sua lista de amigos com sucesso.',
+ 'friends:remove:failure' => 'Não foi possível apagar %s de sua lista de amigos. Por favor, tente novamente.',
+ 'friends:none' => 'Este usuário ainda não adicionou amigos.',
+ 'friends:none:you' => 'Você ainda não adicionou ninguém como amigo! Pesquise por seus interesses para começar a encontrar pessoas para seguir.',
+ 'friends:none:found' => 'Não foram encontrados amigos.',
+ 'friends:of:none' => 'Ninguém adicionou esse usuário como amigo ainda.',
+ 'friends:of:none:you' => 'Ninguém adicionou você como amigo até agora. Começe a adicionar conteúdos e preencher seu perfil para que as pessoas possam encontrá-lo!',
+ 'friends:of:owned' => 'Pessoas que adicionaram %s como amigo',
+ 'friends:of' => 'Amigos de',
+ 'friends:collections' => 'Grupos de amigos',
+ 'collections:add' => 'Nova coleção',
+ 'friends:collections:add' => 'Novo grupo de amigos',
+ 'friends:addfriends' => 'Adicionar amigo',
+ 'friends:collectionname' => 'Nome do grupo',
+ 'friends:collectionfriends' => 'Amigos no grupo',
+ 'friends:collectionedit' => 'Editar este grupo',
+ 'friends:nocollections' => 'Você ainda não possui nenhum grupo.',
+ 'friends:collectiondeleted' => 'Seu grupo foi apagado.',
+ 'friends:collectiondeletefailed' => 'Não foi possível apagar seu grupo, ou você não possui permissão ou algum outro problema ocorreu.',
+ 'friends:collectionadded' => 'Seu grupo foi criado com sucesso',
+ 'friends:nocollectionname' => 'Você deve especificar um nome para seu grupo antes de criá-lo.',
+ 'friends:collections:members' => 'Participantes do grupo',
+ 'friends:collections:edit' => 'Editar grupo',
+ 'friends:collections:edited' => 'Coleção salva',
+ 'friends:collection:edit_failed' => 'Não foi possível salvar a coleção.',
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ',
+ 'avatar' => 'Imagem <i>(Avatar)</i>',
+ 'avatar:create' => 'Crie sua imagem <i>(Avatar)</i>',
+ 'avatar:edit' => 'Edite sua imagem <i>(Avatar)</i>',
+ 'avatar:preview' => 'Prévia',
+ 'avatar:upload' => 'Envie um novo avatar',
+ 'avatar:current' => 'Avatar atual',
+ 'avatar:crop:title' => 'Ferramentas para manipular avatar',
+ 'avatar:upload:instructions' => 'Seu avatar é apresentado no site. Você pode alterá-lo quanto desejar. (Formatos de arquivos aceitos: GIF, JPG ou PNG)',
+ 'avatar:create:instructions' => 'Clique e arraste um quadrado abaixo para manipular o seu avatar. Uma previsão aparecerá na caixa à direita. Quando estiver satisfeito com a previsão, clique \'Criar seu avatar\'. Este avatar definido será utilizado em todo site como seu avatar.',
+ 'avatar:upload:success' => 'Avatar foi enviado com sucesso',
+ 'avatar:upload:fail' => 'O envio do avatar falhou',
+ 'avatar:resize:fail' => 'Alteração do tamanho do avatar falhou',
+ 'avatar:crop:success' => 'Manipulação do avatar realizada com sucesso',
+ 'avatar:crop:fail' => 'Manipulação do avatar falhou',
+ 'profile:edit' => 'Editar perfil',
+ 'profile:aboutme' => 'Sobre mim',
+ 'profile:description' => 'Sobre mim',
+ 'profile:briefdescription' => 'Descrição resumida',
+ 'profile:location' => 'Localização',
+ 'profile:skills' => 'Habilidades',
+ 'profile:interests' => 'Interesses',
+ 'profile:contactemail' => 'Contato por email',
+ 'profile:phone' => 'Telefone',
+ 'profile:mobile' => 'Telefone Celular',
+ 'profile:website' => 'Página WEB (website)',
+ 'profile:twitter' => 'Nome no Twitter',
+ 'profile:saved' => 'Seu perfil foi salvo com sucesso.',
+ 'profile:field:text' => 'Texto curto',
+ 'profile:field:longtext' => 'Area de texto larga',
+ 'profile:field:tags' => 'Descritores (tags)',
+ 'profile:field:url' => 'Endereço WEB',
+ 'profile:field:email' => 'Endereço de email',
+ 'profile:field:location' => 'Localização',
+ 'profile:field:date' => 'Data',
+ 'admin:appearance:profile_fields' => 'Editar campos no perfil',
+ 'profile:edit:default' => 'Editar campos no perfil',
+ 'profile:label' => 'Título do perfil',
+ 'profile:type' => 'Tipo do perfil',
+ 'profile:editdefault:delete:fail' => 'Falhou remoção do item de campo padrão do perfil',
+ 'profile:editdefault:delete:success' => 'Item padrão do perfil apagado!',
+ 'profile:defaultprofile:reset' => 'Perfil padrão do sistema reiniciado',
+ 'profile:resetdefault' => 'Reinicia perfil padrão',
+ 'profile:explainchangefields' => 'Você pode substituir os campos do perfil pelos seus próprios utilizando o formulário abaixo.
+
+Forneça o novo título do campo do perfil, por exemplo, \'Time favorito\', então selecione o tipo de campo (por exemplo, texto, url, tags), e clique no botão \'Adicionar\'. Para reordenar os campos arraste o item próximo ao título do campo. Para editar um campo de título - clique no texto do título para pode escrever nele.
+
+A qualquer tempo você pode voltar atrás para os campos padronizados, mas você perderá qualquer informação que tiver sido registrada nos perfis.',
+ 'profile:editdefault:success' => 'Item foi adicionado com sucesso ao perfil padrão',
+ 'profile:editdefault:fail' => 'Não foi possíve salvar o perfil padrão',
+ 'feed:rss' => 'Inscreva-se para receber atualizações (RSS)',
+ 'link:view' => 'ver endereço',
+ 'link:view:all' => 'Ver todos',
+ 'river' => 'Fluxo',
+ 'river:friend:user:default' => '%s agora possui amizade com %s',
+ 'river:update:user:avatar' => '%s possui um novo avatar',
+ 'river:update:user:profile' => '%s atualizou seu perfil',
+ 'river:noaccess' => 'Você não possui permissão para visualizar este item.',
+ 'river:posted:generic' => '%s postado',
+ 'riveritem:single:user' => 'um usuário',
+ 'riveritem:plural:user' => 'algumas/alguns usuárias/os',
+ 'river:ingroup' => 'para a comunidade %s',
+ 'river:none' => 'Sem atividades.',
+ 'river:update' => 'Atualizado para %s',
+ 'river:widget:title' => 'Atividade',
+ 'river:widget:description' => 'Mostra últimas atividades',
+ 'river:widget:type' => 'Tipos de atividades',
+ 'river:widgets:friends' => 'Atividades dos amigos',
+ 'river:widgets:all' => 'Atividade de todo o site',
+ 'notifications:usersettings' => 'Configurações das notificações',
+ 'notifications:methods' => 'Por favor, especifique quais métodos você gostaria de permitir.',
+ 'notification:method:email' => 'Email ',
+ 'notifications:usersettings:save:ok' => 'Sua configurações de notificações foram salvas com sucesso.',
+ 'notifications:usersettings:save:fail' => 'Houve um problema ao tentar salvar suas configurações de notificações.',
+ 'user.notification.get' => 'Exibe as configurações de notificações de um determinado usuário.',
+ 'user.notification.set' => 'Aplica as configurações de notificações de um determinado usuário.',
+ 'search' => 'Pesquisar',
+ 'searchtitle' => 'Pesquisar: %s',
+ 'users:searchtitle' => 'Pesquisando por usuários: %s',
+ 'groups:searchtitle' => 'Pesquisando por grupos: %s',
+ 'advancedsearchtitle' => '%s com resultados que combinam com %s',
+ 'notfound' => 'Nenhum resultado encontrado.',
+ 'next' => 'Próxima',
+ 'previous' => 'Anterior',
+ 'viewtype:change' => 'Alterar o tipo de lista',
+ 'viewtype:list' => 'Visualização da lista',
+ 'viewtype:gallery' => 'Galeria',
+ 'tag:search:startblurb' => 'Itens cujas tags batem com: \'%s\':',
+ 'user:search:startblurb' => 'Usuários que combinam com \'%s\':',
+ 'user:search:finishblurb' => 'Para ver mais, clique aqui.',
+ 'group:search:startblurb' => 'Grupos que combinam com \'%s\':',
+ 'group:search:finishblurb' => 'Para ver mais, clique aqui.',
+ 'search:go' => 'Pesquisar',
+ 'userpicker:only_friends' => 'Apenas amigos',
+ 'account' => 'Conta',
+ 'settings' => 'Configurações',
+ 'tools' => 'Ferramentas',
+ 'settings:edit' => 'Editar configurações',
+ 'register' => 'Registrar',
+ 'registerok' => 'Você se registrou como %s com sucesso.',
+ 'registerbad' => 'Não foi possível completar seu registro. O nome de usuário pode já existir, sua senha pode não combinar ou nome de usuário ou senha podem ser muito curtos.',
+ 'registerdisabled' => 'Novos registros foram desabilitados pelo administrador do sistema.',
+ 'register:fields' => 'Todos campos são obrigatórios',
+ 'registration:notemail' => 'O email fornecido por você parece não ser um email válido.',
+ 'registration:userexists' => 'Este nome de usuário já existe',
+ 'registration:usernametooshort' => 'Seu nome de usuário deve conter no mínimo 4 caracteres.',
+ 'registration:passwordtooshort' => 'A senha deve conter no mínimo 6 caracteres.',
+ 'registration:dupeemail' => 'Este email já está registrado no sistema.',
+ 'registration:invalidchars' => 'Seu nome de usuário contém caracteres inválidos.',
+ 'registration:emailnotvalid' => 'O email utilizado é inválido neste sistema.',
+ 'registration:passwordnotvalid' => 'A senha utilizada é inválida neste sistema.',
+ 'registration:usernamenotvalid' => 'O nome de usuário utilizado é inválido neste sistema.',
+ 'adduser' => 'Adicionar usuário',
+ 'adduser:ok' => 'Você adicionou um novo usuário com sucesso.',
+ 'adduser:bad' => 'O novo usuário não pode ser criado.',
+ 'user:set:name' => 'Nome da conta',
+ 'user:name:label' => 'Seu apelido',
+ 'user:name:success' => 'Seu nome foi alterado com sucesso.',
+ 'user:name:fail' => 'Não foi possível alterar seu nome. Certifique-se que seu nome não é muito longo e tente novamente.',
+ 'user:set:password' => 'Senha',
+ 'user:current_password:label' => 'Senha atual',
+ 'user:password:label' => 'Nova senha',
+ 'user:password2:label' => 'Nova senha (confirmação)',
+ 'user:password:success' => 'Senha alterada',
+ 'user:password:fail' => 'Não foi possível alterar sua senha',
+ 'user:password:fail:notsame' => 'Os dois campos de nova senha não conferem!',
+ 'user:password:fail:tooshort' => 'Senha muito curta!',
+ 'user:password:fail:incorrect_current_password' => 'A senha digitada não está correta.',
+ 'user:resetpassword:unknown_user' => 'Usuário inválido.',
+ 'user:resetpassword:reset_password_confirm' => 'Resetar sua senha fará com que você receba uma nova senha em seu email registrado.',
+ 'user:set:language' => 'Configurações de idioma',
+ 'user:language:label' => 'Seu idioma',
+ 'user:language:success' => 'Suas configurações de idioma foram atualizadas com sucesso.',
+ 'user:language:fail' => 'Não foi possível salvar suas configurações de idioma.',
+ 'user:username:notfound' => 'Nome de usuário (%s) não encontrado.',
+ 'user:password:lost' => 'Recuperar senha',
+ 'user:password:resetreq:success' => 'Solicitação de nova senha realizada com sucesso.',
+ 'user:password:resetreq:fail' => 'Não foi possível solicitar uma nova senha.',
+ 'user:password:text' => 'Para gerar uma nova senha, insira seu nome de usuário abaixo e pressione o botão de solicitação.',
+ 'user:persistent' => 'Lembrar de mim',
+ 'walled_garden:welcome' => 'Bem-vindo para ',
+ 'menu:page:header:administer' => 'Administrador',
+ 'menu:page:header:configure' => 'Configuração',
+ 'menu:page:header:develop' => 'Desenvolvimento',
+ 'menu:page:header:default' => 'Outro',
+ 'admin:view_site' => 'Ver site',
+ 'admin:loggedin' => 'Entrou como %s',
+ 'admin:menu' => 'Menu ',
+ 'admin:configuration:success' => 'Suas configurações foram salvas com sucesso.',
+ 'admin:configuration:fail' => 'Não foi possível salvar suas configurações.',
+ 'admin:unknown_section' => 'Seção de Administração inválida',
+ 'admin' => 'Administração',
+ 'admin:description' => 'O painel de administração permite a você controlar todas as características do sistema, desde gerência de usuários até como os plugins se comportam. Escolha uma opção abaixo para começar.',
+ 'admin:statistics' => 'Estatísticas',
+ 'admin:statistics:overview' => 'Visão global',
+ 'admin:appearance' => 'Aparência',
+ 'admin:administer_utilities' => 'Utilidades',
+ 'admin:develop_utilities' => 'Utilidades',
+ 'admin:users' => 'Usuários',
+ 'admin:users:online' => 'Atualmente online',
+ 'admin:users:newest' => 'Mais novo',
+ 'admin:users:add' => 'Adiciona novo usuário',
+ 'admin:users:description' => 'Este painel do administrador permite a você controlar as configurações do seu site. Escolha uma das opções abaixo para iniciar.',
+ 'admin:users:adduser:label' => 'Clique aqui para adicionar um novo usuário...',
+ 'admin:users:opt:linktext' => 'Configurar usuários...',
+ 'admin:users:opt:description' => 'Configurar usuários e informações de contas.',
+ 'admin:users:find' => 'Pesquisar',
+ 'admin:settings' => 'Configurações',
+ 'admin:settings:basic' => 'Configurações Básicas',
+ 'admin:settings:advanced' => 'Configurações Avançadas',
+ 'admin:site:description' => 'Este painel do administrador permite a você controlar as configurações do seu site. Escolha uma das opções abaixo para iniciar.',
+ 'admin:site:opt:linktext' => 'Configurar o site...',
+ 'admin:site:access:warning' => 'Alterando as configurações de acesso somente serão afetadas as permissões em conteúdos produzidos no futuro.',
+ 'admin:dashboard' => 'Painel',
+ 'admin:widget:online_users' => 'Usuários online',
+ 'admin:widget:online_users:help' => 'Lista de usuários atualmente no site',
+ 'admin:widget:new_users' => 'Novos usuários',
+ 'admin:widget:new_users:help' => 'Lista de usuários mais recentes',
+ 'admin:widget:content_stats' => 'Estatísticas de Conteúdo',
+ 'admin:widget:content_stats:help' => 'Manter o controle do conteúdo criado pelos seus usuários',
+ 'widget:content_stats:type' => 'Tipo de conteúdo',
+ 'widget:content_stats:number' => 'Números',
+ 'admin:widget:admin_welcome' => 'Bem-vindo',
+ 'admin:widget:admin_welcome:help' => 'Uma pequena introdução à área de administração do Elgg',
+ 'admin:widget:admin_welcome:intro' => 'Bem-vindo ao Elgg! A partir de agora você estará observando o painel do administrador. Ele será útil para acompanhar o que acontece no site.',
+ 'admin:widget:admin_welcome:admin_overview' => 'A navegação na área do administrador acontece pelo menu a direita. Ele está organizado em três seções:
+<p><b>Administrador</b><br>
+Atividades diárias como monitoramento de conteúdo denunciado, verificação de quem está online, e visualização de estatíticas.
+</p><p>
+<b>Configuração</b><br>
+Atividades ocasionais como configuração do nome do site ou ativação de plugin.
+</p><p>
+<b>Desenvolvimento</b><br>
+Para desenvolvedores que estejam criando plugins ou desenhando temas <i>(themes)</i>. (Requer um desenvolvedor de plugin.)
+</p>
+',
+ 'admin:widget:admin_welcome:outro' => 'Tenha certeza de verificar os recursos disponíveis através do link abaixo e obrigado por utilizar Elgg!',
+ 'admin:widget:control_panel' => 'Painel de Controle',
+ 'admin:widget:control_panel:help' => 'Provimento de acesso fácil aos controles comuns',
+ 'admin:cache:flush' => 'Limpa o cache',
+ 'admin:cache:flushed' => 'O cache do site foi limpo',
+ 'admin:footer:faq' => 'Administração das Perguntas Frequentes (FAQ)',
+ 'admin:footer:manual' => 'Manual de Administração',
+ 'admin:footer:community_forums' => 'Foruns na Comunidade Elgg',
+ 'admin:footer:blog' => 'Blog sobre Elgg',
+ 'admin:plugins:category:all' => 'Todos plugins',
+ 'admin:plugins:category:active' => 'Ativar plugins',
+ 'admin:plugins:category:inactive' => 'Desativar plugins',
+ 'admin:plugins:category:admin' => 'Administrador',
+ 'admin:plugins:category:bundled' => 'Empacotado <i>(Bundled)</i>',
+ 'admin:plugins:category:nonbundled' => 'Desempacotado <i>(Non-bundled)</i>',
+ 'admin:plugins:category:content' => 'Conteúdo',
+ 'admin:plugins:category:development' => 'Desenvolvimento',
+ 'admin:plugins:category:enhancement' => 'Aperfeiçoamentos',
+ 'admin:plugins:category:api' => 'Serviço/API',
+ 'admin:plugins:category:communication' => 'Comunicação',
+ 'admin:plugins:category:security' => 'Segurança e \'SPAM\'',
+ 'admin:plugins:category:social' => 'Social ',
+ 'admin:plugins:category:multimedia' => 'Multimídia',
+ 'admin:plugins:category:theme' => 'Temas',
+ 'admin:plugins:category:widget' => 'Dispositivos',
+ 'admin:plugins:category:utility' => 'Utilidades',
+ 'admin:plugins:sort:priority' => 'Prioridade',
+ 'admin:plugins:sort:alpha' => 'Alfabetico',
+ 'admin:plugins:sort:date' => 'Mais novo',
+ 'admin:plugins:markdown:unknown_plugin' => 'Plugin desconhecido.',
+ 'admin:plugins:markdown:unknown_file' => 'Arquivo desconhecido.',
+ 'admin:notices:could_not_delete' => 'Não foi possível apagar a notícia.',
+ 'admin:options' => 'Opções do administrador',
+ 'plugins:settings:save:ok' => 'Configurações para o plugin %s foram salvas com sucesso.',
+ 'plugins:settings:save:fail' => 'Houve um problema ao salvar as configurações do plugin %s.',
+ 'plugins:usersettings:save:ok' => 'Configurações do usuário para o plugin %s foram salvas com sucesso.',
+ 'plugins:usersettings:save:fail' => 'Houve um problema ao salvar as configurações do usuárioo do plugin %s.',
+ 'item:object:plugin' => 'Configurações do Plugin',
+ 'admin:plugins' => 'Administrar ferramentas',
+ 'admin:plugins:activate_all' => 'Ativar todos',
+ 'admin:plugins:deactivate_all' => 'Desativar todos',
+ 'admin:plugins:activate' => 'Ativar',
+ 'admin:plugins:deactivate' => 'Desativar',
+ 'admin:plugins:description' => 'Este painel do administrador permite a você controlar e configurar as ferramentas instaladas no seu site.',
+ 'admin:plugins:opt:linktext' => 'Configurar ferramentas...',
+ 'admin:plugins:opt:description' => 'Configurar as ferramentas instaladas no site. ',
+ 'admin:plugins:label:author' => 'Autor',
+ 'admin:plugins:label:copyright' => 'Direitos Autorais',
+ 'admin:plugins:label:categories' => 'Categorias',
+ 'admin:plugins:label:licence' => 'Licença',
+ 'admin:plugins:label:website' => 'URL ',
+ 'admin:plugins:label:moreinfo' => 'mais informações',
+ 'admin:plugins:label:version' => 'Versão',
+ 'admin:plugins:label:location' => 'Localização',
+ 'admin:plugins:label:dependencies' => 'Dependências',
+ 'admin:plugins:warning:elgg_version_unknown' => 'Este plugin usa um arquivo de manifesto antigo e não define uma versão compatível do Elgg. Ele provavelmente não funcionará!
+',
+ 'admin:plugins:warning:unmet_dependencies' => 'Este plugin usa dependências desencontradas e não foi possível ativaá-lo. Verifique as dependências para mais informações.
+',
+ 'admin:plugins:warning:invalid' => '%s não é um plugin válido. Verifique a documentação do Elgg para dicas de solução.',
+ 'admin:plugins:cannot_activate' => 'não foi possível ativar',
+ 'admin:plugins:set_priority:yes' => 'Reordenado %s',
+ 'admin:plugins:set_priority:no' => 'Não foi possível reordenar %s',
+ 'admin:plugins:set_priority:no_with_msg' => 'Não foi possível reordenar %s. Erro: %s',
+ 'admin:plugins:deactivate:yes' => 'Desativado %s',
+ 'admin:plugins:deactivate:no' => 'Não foi possível desativar %s',
+ 'admin:plugins:deactivate:no_with_msg' => 'Não foi possível desativar %s. Erro: %s',
+ 'admin:plugins:activate:yes' => 'Ativados %s',
+ 'admin:plugins:activate:no' => 'Não foi possível ativar %s',
+ 'admin:plugins:activate:no_with_msg' => 'Não foi possível ativar %s. Erro: %s',
+ 'admin:plugins:categories:all' => 'Todas categorias',
+ 'admin:plugins:plugin_website' => 'Website do plugin',
+ 'admin:plugins:author' => '%s ',
+ 'admin:plugins:version' => 'Versão %s',
+ 'admin:plugin_settings' => 'Configurações do plugin',
+ 'admin:plugins:warning:unmet_dependencies_active' => 'Este plugin foi ativado mas possui pendências. Você deve encontrar problemas. Veja "mais informações\' abaixo para detalhes.',
+ 'admin:plugins:dependencies:type' => 'Tipo',
+ 'admin:plugins:dependencies:name' => 'Nome',
+ 'admin:plugins:dependencies:expected_value' => 'Valor testado',
+ 'admin:plugins:dependencies:local_value' => 'Valor atual',
+ 'admin:plugins:dependencies:comment' => 'Comentário',
+ 'admin:statistics:description' => 'Este é um sumário de estatísticas sobre o site. Se você deseja estatísticas mais detalhadas, um recurso de gerenciamento profissional está disponível.',
+ 'admin:statistics:opt:description' => 'Exibir informações estatísticas sobre usuários e objetos no site.',
+ 'admin:statistics:opt:linktext' => 'Exibir estatísticas...',
+ 'admin:statistics:label:basic' => 'Estatísticas básicas do site',
+ 'admin:statistics:label:numentities' => 'Entidades no site',
+ 'admin:statistics:label:numusers' => 'Número de usuários',
+ 'admin:statistics:label:numonline' => 'Número de usuários conectados',
+ 'admin:statistics:label:onlineusers' => 'Usuários conectados agora',
+ 'admin:statistics:label:version' => 'Versão do Elgg',
+ 'admin:statistics:label:version:release' => 'Liberação <i>(Release)</i>',
+ 'admin:statistics:label:version:version' => 'Versão',
+ 'admin:user:label:search' => 'Encontrar usuários:',
+ 'admin:user:label:searchbutton' => 'Pesquisar',
+ 'admin:user:ban:no' => 'Não foi possível banir o usuário',
+ 'admin:user:ban:yes' => 'Usuário banido.',
+ 'admin:user:self:ban:no' => 'Você não pode banir sua própria conta',
+ 'admin:user:unban:no' => 'Não foi possível desbanir o usuário',
+ 'admin:user:unban:yes' => 'Usuário desbanido.',
+ 'admin:user:delete:no' => 'Não foi possível apagar o usuário',
+ 'admin:user:delete:yes' => 'Usuário apagado',
+ 'admin:user:self:delete:no' => 'Você não pode apagar sua própria conta',
+ 'admin:user:resetpassword:yes' => 'Senha zerada, usuário notificado.',
+ 'admin:user:resetpassword:no' => 'A senha não pôde ser zerada.',
+ 'admin:user:makeadmin:yes' => 'O usuário agora é um administrador.',
+ 'admin:user:makeadmin:no' => 'Não foi possível tornar este usuário um administrador.',
+ 'admin:user:removeadmin:yes' => 'O usuário não é mais um administrador.',
+ 'admin:user:removeadmin:no' => 'Não foi possível apagar os privilégios de administrador deste usuário.',
+ 'admin:user:self:removeadmin:no' => 'Você não pode remover seus próprios privilégios de administrador.',
+ 'admin:appearance:menu_items' => 'Itens do Menu',
+ 'admin:menu_items:configure' => 'Configure os itens do menu principal',
+ 'admin:menu_items:description' => 'Selecione qual item do menu você deseja apresentar como link em destaque. Itens não utilizados serão adicionados como \'MAIS" no final da lista.',
+ 'admin:menu_items:hide_toolbar_entries' => 'Remover link da barra de ferramentas no menu?',
+ 'admin:menu_items:saved' => 'Itens do menu salvos.',
+ 'admin:add_menu_item' => 'Adicionar um item customizado no menu',
+ 'admin:add_menu_item:description' => 'Preencha o Nome e endereço (URL) para adicionar itens customizados no seu menu de navegação.',
+ 'admin:appearance:default_widgets' => 'Dispositivos padrão',
+ 'admin:default_widgets:unknown_type' => 'Tipo de dispositivo desconhecido',
+ 'admin:default_widgets:instructions' => 'Adicione, remova, posicione, e defina os dispositivos padrão para a página de seleção de dispositivos. Estas alterações serão aplicadas somente ao novo conteúdo do site.',
+ 'usersettings:description' => 'O Painel de configurações do usuário permite a você controlar suas informações pessoais, desde configurar o usuário até como os plugins se comportam. Escolha uma opção abaixo para iniciar.',
+ 'usersettings:statistics' => 'Suas estatísticas.',
+ 'usersettings:statistics:opt:description' => 'Ver informações estatísticas sobre usuários e objetos em seu site.',
+ 'usersettings:statistics:opt:linktext' => 'Estatísticas de conta',
+ 'usersettings:user' => 'Suas configurações',
+ 'usersettings:user:opt:description' => 'Isto permite a você controlar as configurações de usuários.',
+ 'usersettings:user:opt:linktext' => 'Altere suas configurações',
+ 'usersettings:plugins' => 'Ferramentas',
+ 'usersettings:plugins:opt:description' => 'Configure as características (se tiver alguma) para suas ferramentas ativas.',
+ 'usersettings:plugins:opt:linktext' => 'Configure suas ferramentas',
+ 'usersettings:plugins:description' => 'Este painel permite a você controlar e configurar as informações pessoais referentes às ferramentas instaladas pelo administrador do sistema.',
+ 'usersettings:statistics:label:numentities' => 'Seu conteúdo',
+ 'usersettings:statistics:yourdetails' => 'Seus detalhes',
+ 'usersettings:statistics:label:name' => 'Nome completo',
+ 'usersettings:statistics:label:email' => 'Endereço de email',
+ 'usersettings:statistics:label:membersince' => 'Participante desde',
+ 'usersettings:statistics:label:lastlogin' => 'último acesso',
+ 'river:all' => 'Toda atividade do site',
+ 'river:mine' => 'Minhas atividades',
+ 'river:friends' => 'Atividades do amigos',
+ 'river:select' => 'Mostrar %s',
+ 'river:comments:more' => '+%u mais',
+ 'river:generic_comment' => 'fez um comentário em %s %s',
+ 'friends:widget:description' => 'Exibe alguns de seus amigos.',
+ 'friends:num_display' => 'Número de amigos a serem exibidos',
+ 'friends:icon_size' => 'Tamanho do ícone',
+ 'friends:tiny' => 'minúsculo',
+ 'friends:small' => 'pequeno',
+ 'save' => 'Salvar',
+ 'reset' => 'Reiniciar',
+ 'publish' => 'Publicar',
+ 'cancel' => 'Cancelar',
+ 'saving' => 'Salvando ...',
+ 'update' => 'Atualizar',
+ 'preview' => 'Prévia',
+ 'edit' => 'Editar',
+ 'delete' => 'Apagar',
+ 'accept' => 'Aceitar',
+ 'load' => 'Carregar',
+ 'upload' => 'Enviar',
+ 'ban' => 'Banir',
+ 'unban' => 'Banir (desfazer)',
+ 'banned' => 'Banido',
+ 'enable' => 'Ativar',
+ 'disable' => 'Desativar',
+ 'request' => 'Solicitar',
+ 'complete' => 'Completo',
+ 'open' => 'Abrir',
+ 'close' => 'Fechar',
+ 'reply' => 'Responder',
+ 'more' => 'Mais',
+ 'comments' => 'Comentários',
+ 'import' => 'Importar',
+ 'export' => 'Exportar',
+ 'untitled' => 'Sem título',
+ 'help' => 'Ajuda',
+ 'send' => 'Enviar',
+ 'post' => 'Enviar',
+ 'submit' => 'Enviar',
+ 'comment' => 'Comentário',
+ 'upgrade' => 'Atualizar',
+ 'sort' => 'Sortear',
+ 'filter' => 'Filtrar',
+ 'new' => 'Novo',
+ 'add' => 'Adicionar',
+ 'create' => 'Criar',
+ 'site' => 'Site ',
+ 'activity' => 'Atividades',
+ 'members' => 'Pessoas',
+ 'up' => 'Acima',
+ 'down' => 'Abaixo',
+ 'top' => 'Topo',
+ 'bottom' => 'Final',
+ 'invite' => 'Convidar',
+ 'resetpassword' => 'Reiniciar senha',
+ 'makeadmin' => 'Tornar administrador',
+ 'removeadmin' => 'Apagar administrador',
+ 'option:yes' => 'Sim',
+ 'option:no' => 'Não',
+ 'unknown' => 'Desconhecido',
+ 'active' => 'Ativo',
+ 'total' => 'Total ',
+ 'learnmore' => 'Clique aqui para aprender mais.',
+ 'content' => 'conteúdo',
+ 'content:latest' => 'últimas atividades',
+ 'content:latest:blurb' => 'Alternativamente, clique aqui para exibir os últimos conteúdos da comunidade,',
+ 'link:text' => 'ver link',
+ 'question:areyousure' => 'Você tem certeza?',
+ 'title' => 'Título',
+ 'description' => 'Descrição',
+ 'tags' => 'Descritores <i>(Tags)</i>',
+ 'spotlight' => 'Destaque',
+ 'all' => 'Todos',
+ 'mine' => 'Minhas',
+ 'by' => 'por',
+ 'none' => 'nenhum',
+ 'annotations' => 'Anotações',
+ 'relationships' => 'Relacionamentos',
+ 'metadata' => 'Metadados',
+ 'tagcloud' => 'Nuvem de palavras',
+ 'tagcloud:allsitetags' => 'Todos descritores (tags) do site',
+ 'on' => 'Ligado',
+ 'off' => 'Desligado',
+ 'edit:this' => 'Editar',
+ 'delete:this' => 'Apagar',
+ 'comment:this' => 'Comentar',
+ 'deleteconfirm' => 'Você tem certeza de que deseja apagar este item?',
+ 'fileexists' => 'Um arquivo já foi enviado. Para substituí-lo, selecione-o abaixo:',
+ 'useradd:subject' => 'Conta de usuário criada',
+ 'useradd:body' => '%s,
+
+Uma conta de usuário foi criada para você em %s. Para entrar, visite:
+
+%s
+
+Para conectar-se, utilize as informações de usuário abaixo:
+
+Nome de usuário: %s
+Senha: %s
+
+Assim que você se conectar, nós recomendamos fortemente que você altere sua senha.
+',
+ 'systemmessages:dismiss' => 'Clique para desfazer',
+ 'importsuccess' => 'Importação de dados realizada com sucesso',
+ 'importfail' => 'OpenDD falhou ao importar dados.',
+ 'friendlytime:justnow' => 'agora',
+ 'friendlytime:minutes' => '%s minutos atrás',
+ 'friendlytime:minutes:singular' => 'um minuto atrás',
+ 'friendlytime:hours' => '%s horas atrás',
+ 'friendlytime:hours:singular' => 'uma hora atrás',
+ 'friendlytime:days' => '%s dias atrás',
+ 'friendlytime:days:singular' => 'ontem',
+ 'friendlytime:date_format' => 'j F Y @ g:ia',
+ 'date:month:01' => '%s de Janeiro',
+ 'date:month:02' => '%s de Fevereiro',
+ 'date:month:03' => '%s de Março',
+ 'date:month:04' => '%s de Abril',
+ 'date:month:05' => '%s de Maio',
+ 'date:month:06' => '%s de Junho',
+ 'date:month:07' => '%s de Julho',
+ 'date:month:08' => '%s de Agosto',
+ 'date:month:09' => '%s de Setembro',
+ 'date:month:10' => '%s de Outubro',
+ 'date:month:11' => '%s de Novembro',
+ 'date:month:12' => '%s de Dezembro',
+ 'installation:sitename' => 'O nome do seu site:',
+ 'installation:sitedescription' => 'Descrição resumida do seu site (opcional):',
+ 'installation:wwwroot' => 'O URL do site:',
+ 'installation:path' => 'O caminho completo da instalação do Elgg:',
+ 'installation:dataroot' => 'O caminho completo do diretório de dados:',
+ 'installation:dataroot:warning' => 'Você pode criar o diretório manualmente. Ele deve estar em um diretório diferente da sua instalação do Elgg.',
+ 'installation:sitepermissions' => 'A permissão padrão de acesso:',
+ 'installation:language' => 'A linguagem padrão do seu site:',
+ 'installation:debug' => 'Modo de depuração fornece informações extras que podem ser usados para diagnosticar falhas. Entretando, pode tornar o sistema mais lento devendo ser usado se você estiver tendo problemas:',
+ 'installation:debug:none' => 'Desligue o modo de depuração (recomendado)',
+ 'installation:debug:error' => 'Apresentar somente erros críticos',
+ 'installation:debug:warning' => 'Apresentar erros e avisos',
+ 'installation:debug:notice' => 'Registre todos erros, avisos e notícias',
+ 'installation:registration:description' => 'Registro de usuários está habilitado por padrão. Desabilite se você não deseja que novos usuário sejam registrados por sua vontade própria.',
+ 'installation:registration:label' => 'Permite que novos usuários se registrem.',
+ 'installation:walled_garden:description' => 'Permite ao site funcionar como uma rede privada. Não permitirá que pessoas não sem registro vejam qualquer página do site que não esteja especificamente marcada como pública.',
+ 'installation:walled_garden:label' => 'Páginas restritas para pessoas registradas.',
+ 'installation:httpslogin' => 'Permite isso para permitir que os logins dos usuários seja realizado sobre HTTPS (ambiente seguro). Você deve ter o serviço \'https\' habilitado no seu servidor para isto funcionar.',
+ 'installation:httpslogin:label' => 'Habilitar logins usando HTTPS ',
+ 'installation:view' => 'Entre a visão que será utilizada por padrão pelo site ou deixe em branco para a visão padrão do sistema (se tiver dúvida, deixe com o padrão):',
+ 'installation:siteemail' => 'Endereço de email do Site (usado quando enviadas as mensagens de email do sistema)',
+ 'installation:disableapi' => 'Elgg fornece uma API para construção de serviços web que podem remotamente interagir com o seu site',
+ 'installation:disableapi:label' => 'Habilita <i>RESTful API</i>',
+ 'installation:allow_user_default_access:description' => 'Se marcado, usuários individuais poderão definir seu próprio nível de acesso que pode sobrepor o nível de acesso do sistema.',
+ 'installation:allow_user_default_access:label' => 'Permite acesso padrão aos usuários',
+ 'installation:simplecache:description' => 'O \'cache\' simples aumenta a performance por armazenar conteúdos estáticos como os arquivos CSS e JavaScript. Normalmente você desejará isto ativado.',
+ 'installation:simplecache:label' => 'Usar \'cache\' simples (recomendado)',
+ 'upgrading' => 'Atualizando...',
+ 'upgrade:db' => 'Seu banco de dados foi atualizado.',
+ 'upgrade:core' => 'Sua instalação do Elgg foi atualizada.',
+ 'upgrade:unable_to_upgrade' => 'Não foi possíve atualizar.',
+ 'upgrade:unable_to_upgrade_info' => 'Esta instalação não pode ser atualizada por conta das visões legadas <i>(legacy views)</i> que foram detectadas no núcleo, no diretório de visões do Elgg. Estas visões estão obsoletas e precisam ser removidas para o Elgg funcionar adequadamente. Se você tem ',
+ 'update:twitter_api:deactivated' => 'O API do Twitter (antigo \'Twitter Service\') foi desabilitado durante a atualização. Por favor se desejar habilite manualmente este plugin.',
+ 'update:oauth_api:deactivated' => 'O API OAuth (antigo \'OAuth lib\') foi desabilitado durante a atualização. Por favor se desejar habilite manualmente este plugin.',
+ 'deprecated:function' => '%s() foi substituido por %s()',
+ 'welcome' => 'Seja bem vindo',
+ 'welcome:user' => 'Seja bem vindo %s',
+ 'email:settings' => 'Configurações de Email',
+ 'email:address:label' => 'Seu email',
+ 'email:save:success' => 'Novo email gravado, verificação necessária.',
+ 'email:save:fail' => 'Seu novo email não pôde ser gravado.',
+ 'friend:newfriend:subject' => '%s adicionou-o como amigo!',
+ 'friend:newfriend:body' => '%s adicionou-o como amigo!
+
+Para ver o perfil dela(e), clique aqui:
+
+%s
+
+Não responda a este email.',
+ 'email:resetpassword:subject' => 'Gerar nova senha!',
+ 'email:resetpassword:body' => 'Olá %s,
+
+Sua nova senha foi gerada e ela é: %s',
+ 'email:resetreq:subject' => 'Solicitar nova senha.',
+ 'email:resetreq:body' => 'Olá %s,
+
+Alguém (do endereço de IP %s) solicitou uma nova senha para esta conta.
+
+Se você fez esta solicitação, clique no link abaixo, caso contrário por favor ignore este email.
+
+%s
+',
+ 'default_access:settings' => 'Seu nível de acesso padrão',
+ 'default_access:label' => 'Acesso padrão',
+ 'user:default_access:success' => 'Seu novo nível de acesso principal foi gravado com sucesso.',
+ 'user:default_access:failure' => 'Seu novo nível de acesso principal não pôde ser gravado.',
+ 'xmlrpc:noinputdata' => 'Dados de entrada faltando',
+ 'comments:count' => '%s comentários',
+ 'riveraction:annotation:generic_comment' => '%s comentários em %s',
+ 'generic_comments:add' => 'Adicionar comentário',
+ 'generic_comments:post' => 'Comentário da mensagem',
+ 'generic_comments:text' => 'Comentário',
+ 'generic_comments:latest' => 'Últimos comentários',
+ 'generic_comment:posted' => 'Seu comentário foi enviado com sucesso.',
+ 'generic_comment:deleted' => 'Seu comentário foi apagado com sucesso.',
+ 'generic_comment:blank' => 'Você deve adicionar algum conteúdo antes de salvar seu comentário.',
+ 'generic_comment:notfound' => 'Não foi possível encontrar o item específico.',
+ 'generic_comment:notdeleted' => 'Não foi possível apagar este comentário.',
+ 'generic_comment:failure' => 'Um erro inesperado ocorreu na tentativa de adicionar seu comentário, por favor, tente novamente.',
+ 'generic_comment:none' => 'Sem comentários',
+ 'generic_comment:title' => 'Comentado por %s',
+ 'generic_comment:email:subject' => 'Você possui um novo comentário!',
+ 'generic_comment:email:body' => 'Você possui um novo comentário em seu item "%s" de %s. Ele diz:
+
+
+%s
+
+
+Para responder ou ver o original, clique aqui:
+
+%s
+
+Para ver o perfil de %s, clique aqui:
+
+%s
+
+Não responda a este email.',
+ 'byline' => 'Por %s',
+ 'entity:default:strapline' => 'Criado %s por %s',
+ 'entity:default:missingsupport:popup' => 'Esta entidade não pôde ser exibida corretamente. Isto deve ter ocorrido pois requer o suporte de um plugin que não está mais instalado.',
+ 'entity:delete:success' => 'Entidade %s foi apagada',
+ 'entity:delete:fail' => 'Entidade %s não pode ser apagada',
+ 'actiongatekeeper:missingfields' => 'Formulário perdido <i>(is missing __token or __ts fields)</i>',
+ 'actiongatekeeper:tokeninvalid' => 'Encontramos um erro <i> (token mismatch)</i>. Provavelmente indica que a página que está usando expirou. Por favor, tente novamente.',
+ 'actiongatekeeper:timeerror' => 'A página que você está utilizando expirou. Por favor, atualize e tente novamente.',
+ 'actiongatekeeper:pluginprevents' => 'Um extensão bloqueou a submissão deste formulário.',
+ 'word:blacklist' => 'e, a, o, então, mas, ela, seu, sua, dele, dela, um, não, também, cerca de, agora, por isso, entretanto, ainda, da mesma forma, caso contrário, portanto, inversamente, ao invés, conseqüentemente,consequentemente, além disso, no entanto, em vez disso, enquanto isso, em conformidade, isto, este, esta, parece, o quê,o que, quem, cujo, quem, quem',
+ 'tag_names:tags' => 'Descritores (Tags)',
+ 'tags:site_cloud' => 'Núvem de palavras do site',
+ 'js:security:token_refresh_failed' => 'Não foi possível contato com %s. Você pode ser problemas salvando conteúdo.',
+ 'js:security:token_refreshed' => 'Conexão para %s reativada!',
+ 'aa' => 'Afar ',
+ 'ab' => 'Abkházia',
+ 'af' => 'Afrikaans ',
+ 'am' => 'Américo',
+ 'ar' => 'Ãrabe',
+ 'as' => 'Assamese ',
+ 'ay' => 'Aymara ',
+ 'az' => 'Azerbaijão',
+ 'ba' => 'Bashkir ',
+ 'be' => 'Bielo-russia',
+ 'bg' => 'Búlgaro',
+ 'bh' => 'Bihari ',
+ 'bi' => 'Bislama ',
+ 'bn' => 'Bengali; Bangla ',
+ 'bo' => 'Tibetana',
+ 'br' => 'Breton ',
+ 'ca' => 'Catalão',
+ 'co' => 'Corso',
+ 'cs' => 'Checa',
+ 'cy' => 'Galês',
+ 'da' => 'Dinamarquês',
+ 'de' => 'Alemão',
+ 'dz' => 'Bhutani ',
+ 'el' => 'Grego',
+ 'en' => 'Inglês',
+ 'eo' => 'Esperanto ',
+ 'es' => 'Espanhol',
+ 'et' => 'Estoniano',
+ 'eu' => 'Basco',
+ 'fa' => 'Persa',
+ 'fi' => 'Finlandesa',
+ 'fj' => 'Fiji ',
+ 'fo' => 'Ilhas Faroé',
+ 'fr' => 'Francês',
+ 'fy' => 'Frisian ',
+ 'ga' => 'Irlandês',
+ 'gd' => 'Scots / Gaelic ',
+ 'gl' => 'Galego',
+ 'gn' => 'Guarani ',
+ 'gu' => 'Guzerate',
+ 'he' => 'Hebraica',
+ 'ha' => 'Hausa ',
+ 'hi' => 'Hindi ',
+ 'hr' => 'Croata',
+ 'hu' => 'Húngaro',
+ 'hy' => 'Armênio',
+ 'ia' => 'Interlingua ',
+ 'id' => 'Indonésio',
+ 'ie' => 'Interlingue ',
+ 'ik' => 'Inupiak ',
+ 'is' => 'Islandês',
+ 'it' => 'Italiano',
+ 'iu' => 'Inuktitut ',
+ 'iw' => 'Hebraico (obsolete)',
+ 'ja' => 'Japanês',
+ 'ji' => 'Iídiche (obsolete)',
+ 'jw' => 'Javanês',
+ 'ka' => 'Georgiano',
+ 'kk' => 'Cazaque',
+ 'kl' => 'Groelândia',
+ 'km' => 'Cambojano',
+ 'kn' => 'Canará',
+ 'ko' => 'Coreano',
+ 'ks' => 'Caxemira',
+ 'ku' => 'Curdo',
+ 'ky' => 'Kirghiz ',
+ 'la' => 'Latim',
+ 'ln' => 'Lingala ',
+ 'lo' => 'Laosiano',
+ 'lt' => 'Lituano',
+ 'lv' => 'Letão/Lettish',
+ 'mg' => 'Malagasy ',
+ 'mi' => 'Maori ',
+ 'mk' => 'Macedonian ',
+ 'ml' => 'Malayalam ',
+ 'mn' => 'Mongol',
+ 'mo' => 'Moldava',
+ 'mr' => 'Marathi ',
+ 'ms' => 'Malay ',
+ 'mt' => 'Maltês',
+ 'my' => 'Birmenês',
+ 'na' => 'Nauru ',
+ 'ne' => 'Nepalês',
+ 'nl' => 'Holandês',
+ 'no' => 'Norueguês',
+ 'oc' => 'Occitano',
+ 'om' => '(Afan) Oromo ',
+ 'or' => 'Oriya ',
+ 'pa' => 'Punjabi ',
+ 'pl' => 'Polonês',
+ 'ps' => 'Pashto / Pushto ',
+ 'pt' => 'Português',
+ 'qu' => 'Quechua ',
+ 'rm' => 'Rhaeto-Romance ',
+ 'rn' => 'Kirundi ',
+ 'ro' => 'Romeno',
+ 'ru' => 'Russo',
+ 'rw' => 'Kinyarwanda ',
+ 'sa' => 'Sânscrito',
+ 'sd' => 'Sindi',
+ 'sg' => 'Sangro ',
+ 'sh' => 'Servo-Croata',
+ 'si' => 'Singhalês ',
+ 'sk' => 'Eslováquia',
+ 'sl' => 'Esloveno',
+ 'sm' => 'Samoan ',
+ 'sn' => 'Shona ',
+ 'so' => 'Somalis',
+ 'sq' => 'Albanesa',
+ 'sr' => 'Sérvio',
+ 'ss' => 'Siswati ',
+ 'st' => 'Sesotho ',
+ 'su' => 'Sundanês',
+ 'sv' => 'Sueco',
+ 'sw' => 'Suaíli',
+ 'ta' => 'Tamil ',
+ 'te' => 'Tegulu ',
+ 'tg' => 'Tajik ',
+ 'th' => 'Tailandês',
+ 'ti' => 'Tigrinya ',
+ 'tk' => 'Turcomenistão',
+ 'tl' => 'Tagalog ',
+ 'tn' => 'Setswana ',
+ 'to' => 'Tonga ',
+ 'tr' => 'Turco',
+ 'ts' => 'Tsonga ',
+ 'tt' => 'Tártaro',
+ 'tw' => 'Twi ',
+ 'ug' => 'Uigur ',
+ 'uk' => 'Ucraniano',
+ 'ur' => 'Urdu ',
+ 'uz' => 'Usbeque',
+ 'vi' => 'Vietnamita',
+ 'vo' => 'Volapuk ',
+ 'wo' => 'Wolof ',
+ 'xh' => 'Xhosa ',
+ 'yi' => 'Ií­diche',
+ 'yo' => 'Iorubá',
+ 'za' => 'Zuang ',
+ 'zh' => 'Chinês',
+ 'zu' => 'Zulu ',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.custom_index.php b/mod/languages/languages/pt/pt.custom_index.php
new file mode 100644
index 000000000..657321ae4
--- /dev/null
+++ b/mod/languages/languages/pt/pt.custom_index.php
@@ -0,0 +1,11 @@
+<?php
+$pt = array (
+ 'custom:bookmarks' => 'Últimos favoritos',
+ 'custom:groups' => 'Últimas comunidades',
+ 'custom:files' => 'Últimos arquivos',
+ 'custom:blogs' => 'Últimas mensagens dos blogs',
+ 'custom:members' => 'Membros mais recentes',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.dashboard.php b/mod/languages/languages/pt/pt.dashboard.php
new file mode 100644
index 000000000..ada5c82ef
--- /dev/null
+++ b/mod/languages/languages/pt/pt.dashboard.php
@@ -0,0 +1,11 @@
+<?php
+$pt = array (
+ 'dashboard:widget:group:title' => 'Atividades da comunidade',
+ 'dashboard:widget:group:desc' => 'Visualizar as atividades em um de suas comunidades',
+ 'dashboard:widget:group:select' => 'Selecionar a comunidade',
+ 'dashboard:widget:group:noactivity' => 'Não existem atividades nesta comunidade',
+ 'dashboard:widget:group:noselect' => 'Editar este dispositivo para selecionar uma comunidade',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.developers.php b/mod/languages/languages/pt/pt.developers.php
new file mode 100644
index 000000000..f822bc864
--- /dev/null
+++ b/mod/languages/languages/pt/pt.developers.php
@@ -0,0 +1,43 @@
+<?php
+$pt = array (
+ 'admin:develop_tools' => 'Ferramentas',
+ 'admin:develop_tools:preview' => 'Definições dos temas',
+ 'admin:develop_tools:inspect' => 'Inspecionar',
+ 'admin:developers' => 'Desenvolvedores',
+ 'admin:developers:settings' => 'Configurações dos desenvolvedores',
+ 'elgg_dev_tools:settings:explanation' => 'Controle seus desenvolvimento e configurações de depuração abaixo. Algumas destas configurações estão disponível em outras páginas de administração.',
+ 'developers:label:simple_cache' => 'Usar \'cache\' simples',
+ 'developers:help:simple_cache' => 'Desligar o \'cache de arquivos\' enquanto estiver desenvolvendo. Caso contrário, as mudanças nas visões <i>( ou \'views\')</i>, incluindo o CSS, serão ignoradas.',
+ 'developers:label:debug_level' => 'Nível de rastreio',
+ 'developers:help:debug_level' => 'Estes controlam a quantidade de informação registrada. Veja \'elgg_log()\' para mais informações.',
+ 'developers:label:display_errors' => 'Apresente erros críticos no PHP <i>(fatal PHP errors)</i>',
+ 'developers:help:display_errors' => 'Por padrão, o arquivo \'.htaccess\' do Elgg suprime a apresentação de erros fatais.',
+ 'developers:label:screen_log' => 'Apresenta os registros (logs) na tela',
+ 'developers:help:screen_log' => 'Apresenta as saídas de elgg/log() e elgg_dump() na página web.',
+ 'developers:label:show_strings' => 'Apresenta os textos (\'strings\') que geram as traduções.',
+ 'developers:help:show_strings' => 'Apresenta os textos (\'strings\') usados por elgg_echo().',
+ 'developers:label:wrap_views' => 'Envolver as visões (Wrap views)',
+ 'developers:help:wrap_views' => 'Este envolve quase todas as vistas com comentários códigos HTML. Útil para encontrar as visões que criam algum código HTML em particular',
+ 'developers:label:log_events' => 'Registra eventos e \'plugin hooks\'',
+ 'developers:help:log_events' => 'Escreve eventos e \'plugin hooks\' no registro de logs. Aviso: existem muitos destes por página',
+ 'developers:debug:off' => 'Desligar',
+ 'developers:debug:error' => 'Erro',
+ 'developers:debug:warning' => 'Aviso',
+ 'developers:debug:notice' => 'Notícias',
+ 'developers:inspect:help' => 'Inspecionar configuração do framework Elgg.',
+ 'developers:event_log_msg' => '%s: \'%s, %s\' em %s',
+ 'theme_preview:general' => 'Introdução',
+ 'theme_preview:breakout' => 'Quebra do \'iframe\'',
+ 'theme_preview:buttons' => 'Botões',
+ 'theme_preview:components' => 'Componentes',
+ 'theme_preview:forms' => 'Formulários',
+ 'theme_preview:grid' => 'Grade',
+ 'theme_preview:icons' => 'Ãcones',
+ 'theme_preview:modules' => 'Módulos',
+ 'theme_preview:navigation' => 'Navegação',
+ 'theme_preview:typography' => 'Tipografia',
+ 'developers:settings:success' => 'Configurações salvas',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.diagnostics.php b/mod/languages/languages/pt/pt.diagnostics.php
new file mode 100644
index 000000000..576d83335
--- /dev/null
+++ b/mod/languages/languages/pt/pt.diagnostics.php
@@ -0,0 +1,34 @@
+<?php
+$pt = array (
+ 'diagnostics' => 'Diagnóstico do sistema',
+ 'diagnostics:report' => 'Relatório do diagnóstico',
+ 'diagnostics:description' => 'O relatório de diagnóstico é útil para diagnosticar qualquer problema com o Elgg, e deve ser adicionado em qualquer relatório de erro que você fizer.',
+ 'diagnostics:download' => 'Baixar .txt',
+ 'diagnostics:header' => '========================================================================
+Relatório de Diagnóstico do Elgg
+%s gerado por %s
+========================================================================
+
+',
+ 'diagnostics:report:basic' => 'Elgg Release %s, versão %s
+
+------------------------------------------------------------------------',
+ 'diagnostics:report:php' => 'Informação sobre o PHP:
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:plugins' => 'Dispositivos instalados e detalhes:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:md5' => 'Arquivos instalados e checksums:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:globals' => 'Variáveis globais:
+
+%s
+------------------------------------------------------------------------',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.embed.php b/mod/languages/languages/pt/pt.embed.php
new file mode 100644
index 000000000..6fbf03713
--- /dev/null
+++ b/mod/languages/languages/pt/pt.embed.php
@@ -0,0 +1,14 @@
+<?php
+$pt = array (
+ 'embed:embed' => 'Incorporar',
+ 'embed:media' => 'Incorporar mídia',
+ 'embed:instructions' => 'Clique em qualquer arquivo para incorporá-lo ao conteúdo.',
+ 'embed:upload' => 'Enviar mídia',
+ 'embed:upload_type' => 'Tipo enviado:',
+ 'embed:no_upload_content' => 'Nenhum conteúdo enviado!',
+ 'embed:no_section_content' => 'Nenhum item encontrado.',
+ 'embed:no_sections' => 'Nenhum plugin de suporte a incorporação foi encontrado. Procure o administrador do site para habilitar o suporte necessário.',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.externalpages.php b/mod/languages/languages/pt/pt.externalpages.php
new file mode 100644
index 000000000..b6474bb9f
--- /dev/null
+++ b/mod/languages/languages/pt/pt.externalpages.php
@@ -0,0 +1,15 @@
+<?php
+$pt = array (
+ 'expages' => 'Páginas externas',
+ 'admin:appearance:expages' => 'Páginas externas',
+ 'expages:about' => 'Sobre',
+ 'expages:terms' => 'Termos',
+ 'expages:privacy' => 'Privacidade',
+ 'expages:contact' => 'Contatos',
+ 'expages:notset' => 'Esta página ainda não foi configurada.',
+ 'expages:posted' => 'Sua página foi enviada com sucesso.',
+ 'expages:error' => 'Ocorreu um erro, por favor tente novamente e se o problema persistir contate o administrador',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.file.php b/mod/languages/languages/pt/pt.file.php
new file mode 100644
index 000000000..cfebb1fa2
--- /dev/null
+++ b/mod/languages/languages/pt/pt.file.php
@@ -0,0 +1,69 @@
+<?php
+$pt = array (
+ 'file' => 'Arquivos',
+ 'file:user' => 'Arquivos de %s',
+ 'file:friends' => 'Arquivos dos amigos de %s',
+ 'file:all' => 'Todos os arquivos da Rede Social',
+ 'file:edit' => 'Editar arquivo',
+ 'file:more' => 'Mais arquivos',
+ 'file:list' => 'Visualizar em lista',
+ 'file:group' => 'Arquivos da comunidade',
+ 'file:gallery' => 'Visualizar em galeria',
+ 'file:gallery_list' => 'Visualizar em lista ou galeria',
+ 'file:num_files' => 'Número de arquivos a serem exibidos',
+ 'file:user:gallery' => 'Ver a galeria de %s',
+ 'file:upload' => 'Enviar arquivo',
+ 'file:replace' => 'Substituir conteúdo do arquivo (deixe em branco para não alterá-lo)',
+ 'file:list:title' => '%s tem o %s %s',
+ 'file:title:friends' => 'Amigos de ',
+ 'file:add' => 'Enviar o arquivo',
+ 'file:file' => 'Arquivo',
+ 'file:title' => 'Título',
+ 'file:desc' => 'Descrição',
+ 'file:tags' => 'Descritores (Tags)',
+ 'file:list:list' => 'Altere para visão em listas',
+ 'file:list:gallery' => 'Altere para visão em galeria',
+ 'file:types' => 'Tipos de arquivos enviados',
+ 'file:type:' => 'Arquivos',
+ 'file:type:all' => 'Todos os arquivos',
+ 'file:type:video' => 'Vídeos',
+ 'file:type:document' => 'Documentos',
+ 'file:type:audio' => 'Sons',
+ 'file:type:image' => 'Imagens',
+ 'file:type:general' => 'Geral',
+ 'file:user:type:video' => 'Vídeos de %s',
+ 'file:user:type:document' => 'Documentos de %s',
+ 'file:user:type:audio' => 'Sons de %s',
+ 'file:user:type:image' => 'Imagens de %s',
+ 'file:user:type:general' => 'Arquivos gerais de %s',
+ 'file:friends:type:video' => 'Vídeos de seus amigos',
+ 'file:friends:type:document' => 'Documentos de seus amigos',
+ 'file:friends:type:audio' => 'Sons de seus amigos',
+ 'file:friends:type:image' => 'Imagens de seus amigos',
+ 'file:friends:type:general' => 'Arquivos gerais de seus amigos',
+ 'file:widget' => 'Dispositivo de Arquivos',
+ 'file:widget:description' => 'Apresentar seus últimos arquivos',
+ 'groups:enablefiles' => 'Habilita arquivos da comunidade',
+ 'file:download' => 'Baixar este',
+ 'file:delete:confirm' => 'Você tem certeza de que deseja apagar este arquivo?',
+ 'file:tagcloud' => 'Núvem de Descritores (Tags)',
+ 'file:display:number' => 'Número de arquivos a serem exibidos',
+ 'river:create:object:file' => '%s enviou o arquivo %s',
+ 'river:comment:object:file' => '%s comentou o arquivo %s',
+ 'item:object:file' => 'Arquivos',
+ 'file:newupload' => 'Um novo arquivo foi enviado',
+ 'file:embed' => 'Mídia incorporada',
+ 'file:embedall' => 'Todas',
+ 'file:saved' => 'Seu arquivo foi salvo com sucesso.',
+ 'file:deleted' => 'Seu arquivo foi apagado com sucesso.',
+ 'file:none' => 'Nenhum arquivo enviado.',
+ 'file:uploadfailed' => 'Desculpe, não foi possível salvar seu arquivo.',
+ 'file:downloadfailed' => 'Desculpe, este arquivo não está disponível no momento.',
+ 'file:deletefailed' => 'Seu arquivo não pode ser apagado.',
+ 'file:noaccess' => 'Você não possui permissão para editar este arquivo',
+ 'file:cannotload' => 'Houve um erro ao carregar o arquivo',
+ 'file:nofile' => 'Você deve selecionar um arquivo',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.garbagecollector.php b/mod/languages/languages/pt/pt.garbagecollector.php
new file mode 100644
index 000000000..dac287dfb
--- /dev/null
+++ b/mod/languages/languages/pt/pt.garbagecollector.php
@@ -0,0 +1,17 @@
+<?php
+$pt = array (
+ 'garbagecollector:period' => 'Com que frequência o coletor de lixo do Elgg deve ser executado?',
+ 'garbagecollector:weekly' => 'Semanalmente',
+ 'garbagecollector:monthly' => 'Mensalmente',
+ 'garbagecollector:yearly' => 'Anualmente',
+ 'garbagecollector' => 'Coletor de Lixo',
+ 'garbagecollector:done' => 'FEITO
+',
+ 'garbagecollector:optimize' => 'Otimizando %s ',
+ 'garbagecollector:error' => 'ERRO',
+ 'garbagecollector:ok' => 'OK ',
+ 'garbagecollector:gc:metastrings' => 'Limpando \'metastrings\' desconexas: ',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.groups.php b/mod/languages/languages/pt/pt.groups.php
new file mode 100644
index 000000000..0d433c217
--- /dev/null
+++ b/mod/languages/languages/pt/pt.groups.php
@@ -0,0 +1,204 @@
+<?php
+$pt = array (
+ 'groups' => 'Comunidades',
+ 'groups:owned' => 'Comunidades que possuo',
+ 'groups:yours' => 'Minhas Comunidades',
+ 'groups:user' => 'Comunidades de %s',
+ 'groups:all' => 'Todas as Comunidades do site',
+ 'groups:add' => 'Criar uma nova comunidade',
+ 'groups:edit' => 'Editar Comunidade',
+ 'groups:delete' => 'Apagar Comunidade',
+ 'groups:membershiprequests' => 'Gerenciar solicitações de entrada',
+ 'groups:invitations' => 'Convites da Comunidade',
+ 'groups:icon' => 'Ãcone da Comunidade (deixe em branco para não alterar)',
+ 'groups:name' => 'Nome da Comunidade',
+ 'groups:username' => 'Apelido da Comunidade (exibido nas URLs, apenas caracteres alfanuméricos)',
+ 'groups:description' => 'Descrição',
+ 'groups:briefdescription' => 'Breve descrição',
+ 'groups:interests' => 'Descritores (Tags)',
+ 'groups:website' => 'Sites',
+ 'groups:members' => 'Pessoas da Comunidade',
+ 'groups:members:title' => 'Pessoas de %s',
+ 'groups:members:more' => 'Ver mais pessoas',
+ 'groups:membership' => 'Permissões de adesão para a Comunidade',
+ 'groups:access' => 'Permissões de acesso',
+ 'groups:owner' => 'Proprietário',
+ 'groups:widget:num_display' => 'Número de Comunidades a serem exibidas',
+ 'groups:widget:membership' => 'Participante da Comunidade',
+ 'groups:widgets:description' => 'Exibir em seu perfil as Comunidades das quais você participa',
+ 'groups:noaccess' => 'Sem acesso para a Comunidade',
+ 'groups:permissions:error' => 'Você não possui permissão para isso',
+ 'groups:ingroup' => 'na comunidade',
+ 'groups:cantedit' => 'Você não pode editar esta Comunidade',
+ 'groups:saved' => 'Comunidade salva',
+ 'groups:featured' => 'Comunidades em destaque',
+ 'groups:makeunfeatured' => 'Sem destaques',
+ 'groups:makefeatured' => 'Destacar',
+ 'groups:featuredon' => 'Você destacou esta Comunidade.',
+ 'groups:unfeatured' => '%s foi removido do destaque desta Comunidade.',
+ 'groups:featured_error' => 'Comunidade inválida.',
+ 'groups:joinrequest' => 'Solicitar inclusão como pessoa',
+ 'groups:join' => 'Participar desta Comunidade',
+ 'groups:leave' => 'Sair da Comunidade',
+ 'groups:invite' => 'Convidar amigos',
+ 'groups:invite:title' => 'Convidar amigos para esta comunidade',
+ 'groups:inviteto' => 'Convidar amigos para \'%s\'',
+ 'groups:nofriends' => 'Você não possui amigos que ainda não tenham sido convidados para esta Comunidade.',
+ 'groups:nofriendsatall' => 'Você não possui amigos para convidar!',
+ 'groups:viagroups' => 'pelas Comunidades',
+ 'groups:group' => 'Comunidade',
+ 'groups:search:tags' => 'descritor (tag)',
+ 'groups:search:title' => 'Pesquise por comunidades que contenham o descritor \'%s\'',
+ 'groups:search:none' => 'Nenhuma comunidade compatível foi encontrada',
+ 'groups:activity' => 'Atividade na comunidade',
+ 'groups:enableactivity' => 'Habilita atividade na comunidade',
+ 'groups:activity:none' => 'Nenhuma atividade na comunidade ainda.',
+ 'groups:notfound' => 'Comunidade não encontrada',
+ 'groups:notfound:details' => 'A comunidade procurada não existe ou você não possui permissão de acesso para ela.',
+ 'groups:requests:none' => 'Não existem solicitações de participação neste momento.',
+ 'groups:invitations:none' => 'Não existem convites neste momento.',
+ 'item:object:groupforumtopic' => 'Tópicos em debate',
+ 'groupforumtopic:new' => 'Nova mensagem de discussão',
+ 'groups:count' => 'Comunidades criadas',
+ 'groups:open' => 'Comunidade aberta',
+ 'groups:closed' => 'Comunidade fechada',
+ 'groups:member' => 'pessoas',
+ 'groups:searchtag' => 'Pesquisar Comunidades por descritor (tag)',
+ 'groups:more' => 'Mais comunidades',
+ 'groups:none' => 'Nenhuma comunidade',
+ 'groups:access:private' => 'Fechado - usuário deve ser convidado',
+ 'groups:access:public' => 'Aberto - Qualquer usuário pode participar',
+ 'groups:access:group' => 'Somente pessoas da comunidade',
+ 'groups:closedgroup' => 'Esta Comunidade possui participação fechada. ',
+ 'groups:closedgroup:request' => 'Para solicitar para ser incluído, click em "Solicitar inclusão como pessoa" no menu.',
+ 'groups:visibility' => 'Quem pode visualizar este Comunidade?',
+ 'groups:enableforum' => 'Habilitar discussões na Comunidade',
+ 'groups:yes' => 'sim',
+ 'groups:no' => 'não',
+ 'groups:lastupdated' => 'Última atualização %s por %s',
+ 'groups:lastcomment' => 'Último comentário %s por %s ',
+ 'discussion' => 'Discussão',
+ 'discussion:add' => 'Adicionar tópico para discussão',
+ 'discussion:latest' => 'Última discussão',
+ 'discussion:group' => 'Discussão da comunidade',
+ 'discussion:none' => 'Sem discussões',
+ 'discussion:reply:title' => 'Responder para %s',
+ 'discussion:topic:created' => 'O tópico de discussão foi criado.',
+ 'discussion:topic:updated' => 'O tópico de discussão foi atualizado.',
+ 'discussion:topic:deleted' => 'O tópico de discussão foi apagado.',
+ 'discussion:topic:notfound' => 'Tópico de discussão não encontrado',
+ 'discussion:error:notsaved' => 'Não foi possível salvar este tópico',
+ 'discussion:error:missing' => 'Ambos campos, titulo e mensagem, são obrigatórios',
+ 'discussion:error:permissions' => 'Você não possui permissão para executar esta ação',
+ 'discussion:error:notdeleted' => 'Não foi possível apagar este tópico de discussão',
+ 'discussion:reply:deleted' => 'Resposta da discussão foi apagada.',
+ 'discussion:reply:error:notdeleted' => 'Não foi possivel apagar a resposta da discussão',
+ 'reply:this' => 'Responder',
+ 'group:replies' => 'Respostas',
+ 'groups:forum:created' => 'Cirado %s com %d comentários',
+ 'groups:forum:created:single' => 'Criado %s com %d respostas',
+ 'groups:forum' => 'Discussão',
+ 'groups:addtopic' => 'Adicionar tópico',
+ 'groups:forumlatest' => 'Última discussão',
+ 'groups:latestdiscussion' => 'Última discussão',
+ 'groups:newest' => 'Recentes',
+ 'groups:popular' => ' Popular',
+ 'groupspost:success' => 'Seu resposta foi enviada com sucesso.',
+ 'groups:alldiscussion' => 'Última discussão',
+ 'groups:edittopic' => 'Editar tópico',
+ 'groups:topicmessage' => 'Mensagem do tópico',
+ 'groups:topicstatus' => 'Situação do tópico',
+ 'groups:reply' => 'Enviar um mensagem',
+ 'groups:topic' => 'Tópico',
+ 'groups:posts' => 'Mensagens',
+ 'groups:lastperson' => 'Última pessoa',
+ 'groups:when' => 'Quando',
+ 'grouptopic:notcreated' => 'Nenhum tópico foi criado.',
+ 'groups:topicopen' => 'Aberto',
+ 'groups:topicclosed' => 'Fechado',
+ 'groups:topicresolved' => 'Resolvido',
+ 'grouptopic:created' => 'Seu tópico foi criado.',
+ 'groupstopic:deleted' => 'Tópico apagado com sucesso',
+ 'groups:topicsticky' => 'Adesivo',
+ 'groups:topicisclosed' => 'Este tópico está fechado.',
+ 'groups:topiccloseddesc' => 'Este tópico agora está fechado e não aceita novos comentários.',
+ 'grouptopic:error' => 'Não foi possível criar o tópico em seu Comunidade. Por favor, tente novamente ou entre em contato com o administrador da comunidade.',
+ 'groups:forumpost:edited' => 'Você editou com sucesso a mensagem deste fórum.',
+ 'groups:forumpost:error' => 'Houve um problema ao editar a mensagem deste fórum.',
+ 'groups:privategroup' => 'Este Comunidade é fechada. Solicite ao moderador sua participação.',
+ 'groups:notitle' => 'Comunidades devem ter um título',
+ 'groups:cantjoin' => 'Não foi possível participar da Comunidade',
+ 'groups:cantleave' => 'Não foi possível deixar a Comunidade',
+ 'groups:removeuser' => 'Remover da comunidade',
+ 'groups:cantremove' => 'Não foi possível remover usuário da comunidade',
+ 'groups:removed' => 'Removido %s com sucesso da comunidade',
+ 'groups:addedtogroup' => 'Usuário adicionado com sucesso na Comunidade',
+ 'groups:joinrequestnotmade' => 'Não foi possível solicitar a participação na Comunidade',
+ 'groups:joinrequestmade' => 'Foi solicitada a entrada na Comunidade',
+ 'groups:joined' => 'Participação na Comunidade realizada com sucesso!',
+ 'groups:left' => 'Você deixou a Comunidade com sucesso!',
+ 'groups:notowner' => 'Desculpe, mas você não é o proprietário desta Comunidade.',
+ 'groups:notmember' => 'Desculpe, mas você não faz parte desta Comunidade.',
+ 'groups:alreadymember' => 'Você já faz parte desta Comunidade!',
+ 'groups:userinvited' => 'Convite enviado com sucesso.',
+ 'groups:usernotinvited' => 'O convite não pode ser enviado.',
+ 'groups:useralreadyinvited' => 'Este usuário já foi convidado para participar desta Comunidade',
+ 'groups:invite:subject' => '%s você foi convidado a entrar na Comunidade %s!',
+ 'groups:updated' => 'Último comentário por %s %s',
+ 'groups:started' => 'Iniciado por %s',
+ 'groups:joinrequest:remove:check' => 'Você tem certeza de que deseja apagar esta solicitação de participação?',
+ 'groups:invite:remove:check' => 'Você tem certeza de que deseja apagar este convite de participação?',
+ 'groups:invite:body' => 'Olá %s,
+
+%s convidou você para participar da Comunidade \'%s\', clique abaixo para confirmar:
+
+%s',
+ 'groups:welcome:subject' => 'Seja bem-vindo na Comunidade %s!',
+ 'groups:welcome:body' => 'Olá %s!
+
+Agora você é membro da Comunidade \'%s\'! Clique abaixo para começar a enviar mensagens!
+
+%s',
+ 'groups:request:subject' => '%s solicitou a participação na Comunidade %s',
+ 'groups:request:body' => 'Olá %s,
+
+%s solicitou a participação na Comunidade \'%s\', clique abaixo para ver seu perfil:
+
+%s
+
+ou clique abaixo para aceitar o pedido:
+
+%s',
+ 'river:create:group:default' => '%s criou a comunidade ',
+ 'river:join:group:default' => '%s se juntou a comunidade %s',
+ 'river:create:object:groupforumtopic' => '%s adicionou um novo tópico de discussão %s',
+ 'river:reply:object:groupforumtopic' => '%s respondeu ao tópico de discussão %s',
+ 'groups:nowidgets' => 'Nenhum dispositivo foi definido para esta Comunidade.',
+ 'groups:widgets:members:title' => 'Participantes da Comunidade',
+ 'groups:widgets:members:description' => 'Listar os participantes de uma Comunidade.',
+ 'groups:widgets:members:label:displaynum' => 'Listar os participantes de uma Comunidade.',
+ 'groups:widgets:members:label:pleaseedit' => 'Por favor, configure este dispositivo.',
+ 'groups:widgets:entities:title' => 'Objetos na Comunidade',
+ 'groups:widgets:entities:description' => 'Listar os objetos salvos nesta Comunidade',
+ 'groups:widgets:entities:label:displaynum' => 'Listar os objetos de uma Comunidade.',
+ 'groups:widgets:entities:label:pleaseedit' => 'Por favor, configure este dispositivo.',
+ 'groups:forumtopic:edited' => 'Tópico do fórum editado com sucesso.',
+ 'groups:allowhiddengroups' => 'Você deseja permitir Comunidades privadas (invisíveis)?',
+ 'group:deleted' => 'A Comunidade e todo seu conteúdo foram apagados com sucesso.',
+ 'group:notdeleted' => 'Não foi possível apagar a Comunidade',
+ 'group:notfound' => 'Não foi possível encontrar a Comunidade',
+ 'grouppost:deleted' => 'Mensagem na Comunidade apagada com sucesso.',
+ 'grouppost:notdeleted' => 'Não foi possível apagar a mensagem da Comunidade.',
+ 'groupstopic:notdeleted' => 'Não foi possível apagar o tópico',
+ 'grouptopic:blank' => 'Nenhum tópico',
+ 'grouptopic:notfound' => 'Não foi possível encontrar o tópico',
+ 'grouppost:nopost' => 'Mensagem vazia',
+ 'groups:deletewarning' => 'Você tem certeza de que deseja apagar esta Comunidade? Não será possível desfazer esta ação!',
+ 'groups:invitekilled' => 'O convite foi apagado.',
+ 'groups:joinrequestkilled' => 'O pedido de participação foi apagado.',
+ 'groups:ecml:discussion' => 'Discussões da Comunidade',
+ 'groups:ecml:groupprofile' => 'Perfis da Comunidade',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.install.php b/mod/languages/languages/pt/pt.install.php
new file mode 100644
index 000000000..396e42c7e
--- /dev/null
+++ b/mod/languages/languages/pt/pt.install.php
@@ -0,0 +1,132 @@
+<?php
+
+// Gerado pela extensão 'translationbrowser' 20111228-05:06:24 PM
+
+$portugues = array(
+ 'install:title' => "Instalação do Elgg" ,
+ 'install:welcome' => "Bem-vindo" ,
+ 'install:requirements' => "Verificando requisitos" ,
+ 'install:database' => "Instalação do Banco de Dados" ,
+ 'install:settings' => "Configurar o site" ,
+ 'install:admin' => "Criar conta do administrador" ,
+ 'install:complete' => "Finalizado" ,
+ 'install:welcome:instructions' => "A instalacao do Elgg possui 6 fases simples e ler esta mensagem de boas vindas e o primeiro passo!
+
+Se você ainda não fez, leia através da instalação as instrucoes incluidas com Elgg (ou clique no link de instrucoes no final da pagina).
+
+Se você está pronto para prosseguir, clique no botão PROXIMO." ,
+ 'install:requirements:instructions:success' => "Seu servidor passou na verificacao de requisitos." ,
+ 'install:requirements:instructions:failure' => "Seu servidor falhou na verificacao de requisitos. Depois que voce corrigir as situacoes apontadas abaixo, atualize a pagina. Verifique os links de solucao de problemas <i>(troubleshooting links)</i> no final da pagina se voce necessitar de ajuda adicional." ,
+ 'install:requirements:instructions:warning' => "Seu servidor passou na verificacao de requisitos, mas existe pelo menos um aviso. Recomendamos que verifique a pagina de de solucao de problemas <i>(troubleshooting page)</i> para mais detalhes." ,
+ 'install:require:php' => "PHP " ,
+ 'install:require:rewrite' => "Servidor Web" ,
+ 'install:require:settings' => "Arquivos de configuração" ,
+ 'install:require:database' => "Banco de dados" ,
+ 'install:check:root' => "Seu servidor web nao possui permissao para criar o arquivo <b>.htaccess</b> no diretorio raiz do Elgg. Voce tem duas opcoes:
+
+ 1. Altere as permissoes do diretorio raiz
+
+ 2. Copie o arquivo htaccess_dist para '.htaccess" ,
+ 'install:check:php:version' => "O Elgg necessita que esteja instalado o PHP %s ou superior. Este servidor esta usando a versao %s." ,
+ 'install:check:php:extension' => "O Elgg necessita a extensao PHP %s ativada." ,
+ 'install:check:php:extension:recommend' => "É recomendado que a extensao PHP %s esteja instalada." ,
+ 'install:check:php:open_basedir' => "A diretiva PHP <b>open_basedir</b> <i>(PHP directive)</i> pode prevenir que o Elgg salve arquivos para o diretório de dados <i>(data directory)</i>." ,
+ 'install:check:php:safe_mode' => "Executar o PHP no modo 'safe mode' nao e recomendado e pode causar problemas com o Elgg." ,
+ 'install:check:php:arg_separator' => "<b>arg_separator.output</b> deve ser <b>&amp;</b> para o Elgg executar e o valor do seu servidor e %s" ,
+ 'install:check:php:register_globals' => "<b>Register globals</b> deve ser desligado." ,
+ 'install:check:php:session.auto_start' => "<b>session.auto_start</b> deve estar desligado para o Elgg executar. Senão <i>(Either)</i> altere a configuracao do seu servidor e adicione esta diretiva no arquivo <b>.htaccess</b> do Elgg." ,
+ 'install:check:enginedir' => "Seu servidor web nao possui permissao para criar o arquivo <b>settings.php</b> no diretorio <b>engine</b>. Voce tem duas opcoes:
+
+ 1. Altere as permissoes do diretorio <b>engine</b>
+
+ 2. Copie o arquivo <b>settings.example.php</b> para <b>settings.php</b> e siga as instruções dele para configurar os parametros do banco de dados." ,
+ 'install:check:readsettings' => "Um arquivo de configuração existe no diretorio <b>engine</b>, mas o servidor web nao pode executar a leitura. Voce pode apagar o arquivo ou alterar as permissoes de leitura dele." ,
+ 'install:check:php:success' => "Seu servidor de PHP satisfaz todas as necessidades do Elgg." ,
+ 'install:check:rewrite:success' => "O teste de regras de escrita foi um sucesso <i>(rewrite rules)</i>." ,
+ 'install:check:database' => "As necessidades do banco de dados sao verificadas quando o Elgg carrega esta base." ,
+ 'install:database:instructions' => "Se voce ainda nao criou a base de dados para o Elgg, faca isso agora. Entao preencha os valores abaixo para iniciar o banco de dados do Elgg." ,
+ 'install:database:error' => "Aconteceu um erro ao criar a base de dados do Elgg e a instalacao nao pode continuar. Revise a mensagem abaixo e corriga os problemas. se voce precisar de mais ajuda, visite o link de solucao de problemas de instalacao <i>(Install troubleshooting link)</i> ou envie mensagem no forum da comundade Elgg." ,
+ 'install:database:label:dbuser' => "Usuário no banco de dados <i>(Database Username)</i>" ,
+ 'install:database:label:dbpassword' => "Senha no banco de dados <i>(Database Password)</i>" ,
+ 'install:database:label:dbname' => "Nome da base de dados <i>(Database Name)</i>" ,
+ 'install:database:label:dbhost' => "Hospedagem da base de dados <i>(Database Host)</i>" ,
+ 'install:database:label:dbprefix' => "Prefixo das tabelas no banco de dados <i>(Database Table Prefix)</i>" ,
+ 'install:database:help:dbuser' => "Usuario que possui acesso pleno ao banco de dados MySQL que voce criou para o Elgg" ,
+ 'install:database:help:dbpassword' => "Senha para a conta do usuário da base de dados definida acima" ,
+ 'install:database:help:dbname' => "Nome da base de dados do Elgg" ,
+ 'install:database:help:dbhost' => "Hospedagem do servidor MySQL (geralmente <b>localhost</b>)" ,
+ 'install:database:help:dbprefix' => "O prefixo a ser atribuido para todas as tabelas do Elgg (geralmente <b>elgg_</b>)" ,
+ 'install:settings:instructions' => "Precisamos de algumas informacoes sobre o site assim que configuramos o Elgg. Se voce ainda nao criou um diretorio de dados <i>(data directory)</i> para o Elgg, por favor faca isso antes de completar esta etapa." ,
+ 'install:settings:label:sitename' => "Nome do Site <i>(Site Name)</i>" ,
+ 'install:settings:label:siteemail' => "Endereco de email do site <i>(Site Email Address)</i>" ,
+ 'install:settings:label:wwwroot' => "URL do site <i>(Site URL)</i>" ,
+ 'install:settings:label:path' => "Diretorio de instalacão do Elgg <i>(Install Directory)</i>" ,
+ 'install:settings:label:dataroot' => "Diretorio de dados <i>(Data Directory)</i>" ,
+ 'install:settings:label:language' => "Linguagem do site <i>(Site Language)</i>" ,
+ 'install:settings:label:siteaccess' => "Acesso padrão de segurança do site <i>(Default Site Access)</i>" ,
+ 'install:label:combo:dataroot' => "Elgg cria um diretório de dados" ,
+ 'install:settings:help:sitename' => "O nome do seu novo site Elgg" ,
+ 'install:settings:help:siteemail' => "Endereço de email usado pelo Elgg para comunicação com os usuários" ,
+ 'install:settings:help:wwwroot' => "O endereço do site (Elgg geralmente atribui isto corretamente)" ,
+ 'install:settings:help:path' => "O diretório onde voce pretende colocar o código do Elgg (Elgg geralmente atribui isto corretamente)" ,
+ 'install:settings:help:dataroot' => "O diretorio que voce criou para o Elgg salvar os arquivos (as permissões deste diretório serão verificadas quando voce clicar em PROXIMO)" ,
+ 'install:settings:help:dataroot:apache' => "Você possui a opção do Elgg criar o diretório de dados ou entrar com o diretório que você já havia criada para guardar os arquivos (as permissões deste diretório serão checadas quando você clicar em PROXIMO)" ,
+ 'install:settings:help:language' => "A linguagem padrao do site" ,
+ 'install:settings:help:siteaccess' => "O nivel de acesso padrao para os novos conteúdos criados pelos usuários" ,
+ 'install:admin:instructions' => "Agora é o momento de criar a conta do administrador." ,
+ 'install:admin:label:displayname' => "Nome de exibição" ,
+ 'install:admin:label:email' => "Endereço de email" ,
+ 'install:admin:label:username' => "Usuário" ,
+ 'install:admin:label:password1' => "Senha" ,
+ 'install:admin:label:password2' => "Repetir a senha" ,
+ 'install:admin:help:displayname' => "O nome que sera apresentado no site para esta conta" ,
+ 'install:admin:help:email' => " " ,
+ 'install:admin:help:username' => "O login que sera usado pelo usuario para entrar na rede" ,
+ 'install:admin:help:password1' => "Senhas devem ter pelo menos %u caracteres. <b>Não devem conter caracteres especiais ou espacos em branco</b>" ,
+ 'install:admin:help:password2' => "Redigite a senha para confirmar" ,
+ 'install:admin:password:mismatch' => "Senhas devem ser iguais." ,
+ 'install:admin:password:empty' => "A senha nao pode estar vazia." ,
+ 'install:admin:password:tooshort' => "Sua senha é muito pequena" ,
+ 'install:admin:cannot_create' => "Não foi possível criar a conta do administrador." ,
+ 'install:complete:instructions' => "Seu site Elgg esta agora pronto para ser usado. Clique no botao abaixo para entrar no seu site." ,
+ 'install:complete:gotosite' => "Ir para o site" ,
+ 'InstallationException:UnknownStep' => "%s é uma etapa desconhecida na instalação." ,
+ 'install:success:database' => "Base de dados foi instalada." ,
+ 'install:success:settings' => "Configurações do site foram salvas." ,
+ 'install:success:admin' => "Conta do administrador foi criada." ,
+ 'install:error:htaccess' => "Não foi possivel criar o arquivo <b>.htaccess</b>" ,
+ 'install:error:settings' => "Não foi possivel criar o arquivo de configurações <i>(settings file)</i>" ,
+ 'install:error:databasesettings' => "Não foi possivel conectar ao banco de dados com estas configurações." ,
+ 'install:error:oldmysql' => "MySQL deve ser da versao 5.0 ou superior. Seu servidor está usando %s." ,
+ 'install:error:nodatabase' => "Não foi possivel usar o banco de dados %s. Ele pode não existir." ,
+ 'install:error:cannotloadtables' => "Não foi possivel carregar as tabelas da base de dados" ,
+ 'install:error:tables_exist' => "Já existem tabelas do Elgg no banco de dados. Voce precisa apagar estas tabelas ou reiniciar o instalador e nos tentaremos utiliza-las. Para reiniciar o instalar, remova o <b>\'?step=database\' </b> do URL no seu endereco na barra do navegador e pressione ENTER." ,
+ 'install:error:readsettingsphp' => "Não foi possível ler o arquivo <b>engine/settings.example.php</b>" ,
+ 'install:error:writesettingphp' => "Não foi possivel escrever o arquivo <b>engine/settings.php</b>" ,
+ 'install:error:requiredfield' => "%s é necessario" ,
+ 'install:error:datadirectoryexists' => "Seu diretório de dados <i>(data directory)</i> %s não existe." ,
+ 'install:error:writedatadirectory' => "Seu diretório de dados <i>(data directory)</i> %s não possui permissão de escrita pelo servidor web." ,
+ 'install:error:locationdatadirectory' => "Seu diretório de dados <i>(data directory)</i> %s deve estar fora do seu caminho de instalação por razões de seguranca." ,
+ 'install:error:emailaddress' => "%s não é um endereço de email válido" ,
+ 'install:error:createsite' => "Não foi possivel criar o site." ,
+ 'install:error:savesitesettings' => "Não foi possível salvar as configurações do site" ,
+ 'install:error:loadadmin' => "Não foi possível carregar o usuário administrador." ,
+ 'install:error:adminaccess' => "Não foi possível atribuir para nova conta de usuário os privilégios de administrador." ,
+ 'install:error:adminlogin' => "Não foi possével fazer login com o novo usuário administrador automaticamente." ,
+ 'install:error:rewrite:apache' => "Nos achamos que seu servidor está funcionando em um servidor Apache <i>(Apache web server)</i>." ,
+ 'install:error:rewrite:nginx' => "Nos achamos que seu servidor está funcionando em um servidor Nginx <i>(Nginx web server)</i>." ,
+ 'install:error:rewrite:lighttpd' => "Nos achamos que seu servidor está funcionando em um servidor Lighttpd <i>(Lighttpd web server)</i>." ,
+ 'install:error:rewrite:iis' => "Nos achamos que seu servidor está funcionando em um servidor IIS <i>(IIS web server)</i>." ,
+ 'install:error:rewrite:allowoverride' => "O teste de escrita falhou e a causa mais provavel foi que <b>AllowOverride</b> nao esta definida para todos diretorios do Elgg. Isto previne o Apache de processar o arquivo <b>.htaccess</b> que contem as regras de redirecionamento (rewrite rules).
+ \n\nUm causa menos provavel seria se o Apache foi configurado com um <b>alias</b> para seu diretorio Elgg e voce precisa definir o <b>RewriteBase</b> no seu <b>.htaccess</b>. Existem instrucoes complementares no arquivo <b>.htaccess</b> no seu diretorio do Elgg." ,
+ 'install:error:rewrite:htaccess:write_permission' => "Seu servidor web nao possui permissao para criar o arquivo <b>.htaccess</b> no diretorio do Elgg. Voce precisa copiar manualmente o arquivo <b>htaccess_dist</b> para <b>.htaccess</b> ou alterar as permissoes no diretorio." ,
+ 'install:error:rewrite:htaccess:read_permission' => "Existe um arquivo <b>.htaccess</b> no diretorio do Elgg, mas seu servidor web nao possui permissao para ler este arquivo." ,
+ 'install:error:rewrite:htaccess:non_elgg_htaccess' => "Existe um arquivo <b>.htaccess</b> no diretorio do Elgg que nao foi criado pelo Elgg. Por favor, remova o arquivo." ,
+ 'install:error:rewrite:htaccess:old_elgg_htaccess' => "Parece que existe um arquivo antigo do <b>.htaccess</b> no diretorio do Elgg. Ele não contem as regras de redirecionamento (rewrite rules) para realizar os testes no servidor web." ,
+ 'install:error:rewrite:htaccess:cannot_copy' => "Um erro desconhecido ocorreu enquanto era criado o arquivo <b>.htaccess</b>. Voce precisa copiar manualmente o arquivo <b>htaccess_dist</b> para <b>.htaccess</b>." ,
+ 'install:error:rewrite:altserver' => "O teste com as regras de redirecionamento (rewrite rules) falhou. Voce precisa configurar seu servidor web com as regras de escrita do Elgg e tentar novamente." ,
+ 'install:error:rewrite:unknown' => "Não foi possivel identificar qual o tipo de servidor web esta funcionando no seu servidor e ocorreu uma falha com as regras de redirecionamento (rewrite rules). Não nos é possivel fornecer qualquer tipo de conselho. Por favor verifique o link de solução de problemas <i>(troubleshooting link)</i>." ,
+ 'install:warning:rewrite:unknown' => "Seu servidor nao suporta testes automaticos das regras de redirecionamento (rewrite rules). Você pode continuar a instalação. Contudo voce pode ter problemas com seu site. Voce pode realizar os testes manualmente com as regras de escrita clicando neste link: <a href=\"%s\" target=\"_blank\">teste</a>. Voce visualizará a palavra SUCESSO se as regras estiverem funcionando."
+);
+
+add_translation('pt', $portugues);
diff --git a/mod/languages/languages/pt/pt.invitefriends.php b/mod/languages/languages/pt/pt.invitefriends.php
new file mode 100644
index 000000000..028366eab
--- /dev/null
+++ b/mod/languages/languages/pt/pt.invitefriends.php
@@ -0,0 +1,36 @@
+<?php
+$pt = array (
+ 'friends:invite' => 'Convidar amigos',
+ 'invitefriends:registration_disabled' => 'O registro de novos usuários foi desabilitado no site; você não será capaz de convidar novos amigos',
+ 'invitefriends:introduction' => 'Para convidar amigos para participar desta Rede Social, coloque o endereço de email deles abaixo (um por linha):',
+ 'invitefriends:message' => 'Adicione uma mensagem que eles receberão junto com o seu convite:',
+ 'invitefriends:subject' => 'Convite para participar de %s',
+ 'invitefriends:success' => 'Seus amigos foram convidados.',
+ 'invitefriends:invitations_sent' => 'Convites enviados: %s. Ocorreram os seguintes problemas:
+',
+ 'invitefriends:email_error' => 'Os endereços de email a seguir não são válidos: %s',
+ 'invitefriends:already_members' => 'Os membros a seguir já fazem parte da Rede Social : %s',
+ 'invitefriends:noemails' => 'Nenhum endereço de email foi digitado.',
+ 'invitefriends:message:default' => 'Olá,
+
+Eu gostaria de convidá-lo para participar da minha rede social.
+
+Criei um perfil na %s e quero adicioná-lo aos meus amigos para que você possa participar desta comunidade. Nela podemos trocar informações e aumentar nossa integração.
+
+Primeiro, você precisa cadastrar-se na Rede Social. Logo em seguida você também poderá criar seu próprio perfil.
+
+Obrigado,
+',
+ 'invitefriends:email' => 'Você foi convidado para participar de %s por %s. A seguinte mensagem foi adicionada:
+
+%s
+
+Para participar, clique no link abaixo:
+
+%s
+
+Automaticamente o amigo será adicionado quando você criar uma conta.',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.likes.php b/mod/languages/languages/pt/pt.likes.php
new file mode 100644
index 000000000..7b82fd9f7
--- /dev/null
+++ b/mod/languages/languages/pt/pt.likes.php
@@ -0,0 +1,35 @@
+<?php
+$pt = array (
+ 'likes:this' => 'curtir',
+ 'likes:deleted' => 'Você deixou de curtir',
+ 'likes:see' => 'Veja quem curtiu isso',
+ 'likes:remove' => 'Curtir (desfazer)',
+ 'likes:notdeleted' => 'Aconteceu um problema ao deixar de curtir',
+ 'likes:likes' => 'Você agora curte este item',
+ 'likes:failure' => 'Aconteceu um problema ao curtir este item',
+ 'likes:alreadyliked' => 'Você já está curtindo este item',
+ 'likes:notfound' => 'O item que você está tentando curtir não pode ser encontrado',
+ 'likes:likethis' => 'Curtir',
+ 'likes:userlikedthis' => '%s curtiu',
+ 'likes:userslikedthis' => '%s curtiram',
+ 'likes:river:annotate' => 'curtiram',
+ 'river:likes' => 'curtiu %s %s',
+ 'likes:notifications:subject' => '%s curtiu sua mensagem "%s"',
+ 'likes:notifications:body' => 'Ou %1,
+
+%2 curtiu sua mensagem "%3" em %4
+
+Veja a mensagem orignal aqui:
+%5
+
+ou veja o perfil de %2 aqui:
+
+%6
+
+Obrigado,
+%4
+',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.logbrowser.php b/mod/languages/languages/pt/pt.logbrowser.php
new file mode 100644
index 000000000..438cb1dc1
--- /dev/null
+++ b/mod/languages/languages/pt/pt.logbrowser.php
@@ -0,0 +1,20 @@
+<?php
+$pt = array (
+ 'admin:administer_utilities:logbrowser' => 'Navegador de registros (logs)',
+ 'logbrowser' => 'navegador de registros (logs)',
+ 'logbrowser:browse' => 'navegar nos logs do sistema',
+ 'logbrowser:search' => 'refinar resultados',
+ 'logbrowser:user' => 'pesquisar pelo nome de usuário',
+ 'logbrowser:starttime' => 'Momento de início da busca (por exemplo "último segunda", "1 hora atrás")',
+ 'logbrowser:endtime' => 'Momento de fim da busca',
+ 'logbrowser:explore' => 'Explorar log',
+ 'logbrowser:date' => 'Dia e hora',
+ 'logbrowser:user:name' => 'Usuário',
+ 'logbrowser:user:guid' => 'Identificador (GUID) do usuário',
+ 'logbrowser:object' => 'Tipo de Objeto',
+ 'logbrowser:object:guid' => 'Identificador (GUID) do objeto',
+ 'logbrowser:action' => 'Ação',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.logrotate.php b/mod/languages/languages/pt/pt.logrotate.php
new file mode 100644
index 000000000..a53cbf1bc
--- /dev/null
+++ b/mod/languages/languages/pt/pt.logrotate.php
@@ -0,0 +1,20 @@
+<?php
+$pt = array (
+ 'logrotate:period' => 'Com que frequência deve o sistema arquivar o \'log\' ?',
+ 'logrotate:weekly' => 'Semanalmente',
+ 'logrotate:monthly' => 'Mensalmente',
+ 'logrotate:yearly' => 'Anualmente',
+ 'logrotate:logrotated' => 'Log arquivado
+',
+ 'logrotate:lognotrotated' => 'Erro ao arquivar o log
+',
+ 'logrotate:delete' => 'Apague os arquivos de registros mais antigos que',
+ 'logrotate:week' => 'semana',
+ 'logrotate:month' => 'mês',
+ 'logrotate:year' => 'ano',
+ 'logrotate:logdeleted' => 'Log apagado',
+ 'logrotate:lognotdeleted' => 'Erro ao apagar o log',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.members.php b/mod/languages/languages/pt/pt.members.php
new file mode 100644
index 000000000..c1311f55c
--- /dev/null
+++ b/mod/languages/languages/pt/pt.members.php
@@ -0,0 +1,13 @@
+<?php
+$pt = array (
+ 'members:label:newest' => 'Recentes',
+ 'members:label:popular' => 'Populares',
+ 'members:label:online' => 'Online ',
+ 'members:searchname' => 'Pesquisar participantes por nome',
+ 'members:searchtag' => 'Pesquisar participantes por descritores (tag)',
+ 'members:title:searchname' => 'Participantes pesquisados por %s',
+ 'members:title:searchtag' => 'Participantes descritos (tag) com %s',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.messageboard.php b/mod/languages/languages/pt/pt.messageboard.php
new file mode 100644
index 000000000..ae88c54d1
--- /dev/null
+++ b/mod/languages/languages/pt/pt.messageboard.php
@@ -0,0 +1,43 @@
+<?php
+$pt = array (
+ 'messageboard:board' => 'Quadro de mensagens',
+ 'messageboard:messageboard' => 'quadro de mensagens',
+ 'messageboard:viewall' => 'Ver todas',
+ 'messageboard:postit' => 'Enviar',
+ 'messageboard:history' => 'Histórico',
+ 'messageboard:none' => 'Ainda não existe nada nesse quadro de mensagens',
+ 'messageboard:num_display' => 'Número de mensagens a exibir',
+ 'messageboard:desc' => 'Esse é um quadro de mensagens que você pode colocar no seu perfil para que outros usuários enviem comentários.',
+ 'messageboard:user' => 'Quadro de mensagens de %s',
+ 'messageboard:posted' => 'Você publicou com sucesso no quadro de mensagens.',
+ 'messageboard:deleted' => 'Você excluiu uma mensagem com sucesso.',
+ 'messageboard:email:subject' => 'Você tem um novo comentário no seu quadro de mensagens!',
+ 'messageboard:email:body' => 'Você tem um novo comentário de %s no seu quadro de mensagens:
+
+
+%s
+
+
+Para ver os comentários do quadro, clique aqui:
+
+ %s
+
+Para ver o perfil de %s, clique aqui:
+
+ %s
+
+Essa é uma mensagem automática e não é possível respondê-la.',
+ 'messageboard:blank' => 'Desculpe, mas você precisa colocar algo no corpo da mensagem antes de salvá-la.',
+ 'messageboard:notfound' => 'Desculpe, não foi possível encontrar o item especificado.',
+ 'messageboard:notdeleted' => 'Desculpe, não é possível excluir esta mensagem.',
+ 'messageboard:somethingwentwrong' => 'Não foi possível salvar a sua mensagem. Certifique-se de que você escreveu alguma coisa.',
+ 'messageboard:failure' => 'Ocorreu um erro inesperado na adição da mensagem. Por favor, tente novamente.',
+ 'messageboard:history:title' => 'Histórico',
+ 'messageboard:replyon' => 'Respondendo',
+ 'messageboard:owner' => 'quadro de mensagens de %s',
+ 'messageboard:owner_history' => 'mensagens de %s no quadro de mensagens %s',
+ 'river:messageboard:user:default' => '%s enviou mensagem no quadro de mensagens de %s',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.messages.php b/mod/languages/languages/pt/pt.messages.php
new file mode 100644
index 000000000..6b0e6423c
--- /dev/null
+++ b/mod/languages/languages/pt/pt.messages.php
@@ -0,0 +1,66 @@
+<?php
+$pt = array (
+ 'messages' => 'Mensagens',
+ 'messages:back' => 'voltar para as mensagens',
+ 'messages:user' => 'Sua caixa de entrada',
+ 'messages:posttitle' => 'Mensagens de %s: %s',
+ 'messages:inbox' => 'Caixa de entrada',
+ 'messages:send' => 'Envie uma mensagem',
+ 'messages:sent' => 'Enviar mensagens',
+ 'messages:message' => 'Mensagem',
+ 'messages:title' => 'Título',
+ 'messages:to' => 'Para',
+ 'messages:from' => 'De',
+ 'messages:fly' => 'Enviar',
+ 'messages:replying' => 'Mensagem em resposta para',
+ 'messages:sendmessage' => 'Enviar uma mensagem',
+ 'messages:compose' => 'Envie uma mensagem',
+ 'messages:sentmessages' => 'Mensagens enviadas',
+ 'messages:recent' => 'Mensagens recentes',
+ 'messages:original' => 'Mensagem original',
+ 'messages:yours' => 'Sua mensagem',
+ 'messages:answer' => 'Responder',
+ 'messages:toggle' => 'Alternar todas',
+ 'messages:markread' => 'Marcar como lida',
+ 'messages:new' => 'Nova mensagem',
+ 'notification:method:site' => 'Sítio',
+ 'messages:error' => 'Ocorreu um problema no salvamento da sua mensagem. Por favor, tente novamente.',
+ 'item:object:messages' => 'Mensagens',
+ 'messages:posted' => 'Sua mensagem foi enviada com sucesso.',
+ 'messages:email:subject' => 'Você tem uma nova mensagem!',
+ 'messages:email:body' => 'Você tem uma nova mensagem de %s:
+
+
+%s
+
+
+Para ver suas mensagens, clique aqui:
+
+ %s
+
+Para enviar uma mensagem para %s, clique aqui:
+
+ %s
+
+Essa é uma mensagem automática e não é necessário respondê-la.',
+ 'messages:blank' => 'Desculpe, mas você precisa colocar algo no corpo da mensagem antes de salvá-la.',
+ 'messages:notfound' => 'Desculpe, mas não foi possível encontrar a mensagem especificada.',
+ 'messages:notdeleted' => 'Desculpe, mas não foi possível excluir esta mensagem.',
+ 'messages:nopermission' => 'Você não tem permissão para alterar essa mensagem.',
+ 'messages:nomessages' => 'Não há mensagens a serem exibidas.',
+ 'messages:user:nonexist' => 'Não foi possível encontrar o destinatário no banco de dados de usuários.',
+ 'messages:user:blank' => 'Você não selecionou ninguém para enviar isto.',
+ 'messages:unreadcount' => '%s não lidas',
+ 'messages:add' => 'Compor uma mensagem',
+ 'messages:recipient' => 'Escolha um destinatário...',
+ 'messages:to_user' => 'Para: %s',
+ 'messages:success:delete:single' => 'Mensagem foi apagada',
+ 'messages:success:delete' => 'Mensagns apagadas',
+ 'messages:success:read' => 'Mensagens marcadas como lidas',
+ 'messages:error:messages_not_selected' => 'Nenhum mensagem selecionada',
+ 'messages:error:delete:single' => 'Não foi possível apagar a mensagem',
+ 'messages:deleted_sender' => 'Usuário apagado',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.moderated_comments.php b/mod/languages/languages/pt/pt.moderated_comments.php
new file mode 100644
index 000000000..aa23d883a
--- /dev/null
+++ b/mod/languages/languages/pt/pt.moderated_comments.php
@@ -0,0 +1,48 @@
+<?php
+
+// Gerado pela extensão 'translationbrowser' 20110722-10:42:33 AM
+
+$portugues = array(
+ 'moderated_comments:comment_success' => "Seu comentário foi enviado para aprovação. Obrigado por sua contribuição." ,
+ 'moderated_comments:comment_text' => "Este comentário ainda não foi aprovado, e está visível apenas para você como o proprietário do conteúdo. Por favor, aprove ou apague este comentário usando os links abaixo, ou se existirem muitos comentários não aprovados você pode usar as caixas de seleção para aprovar um lote de comentários." ,
+ 'moderated_comments:delete_confirm' => "Esta ação não pode ser desfeita, você tem certeza que deseja apagar este(s) comentário(s)?" ,
+ 'moderated_comments:approved' => "Comentários selecionados foram aprovados." ,
+ 'moderated_comments:deleted' => "Comentários selecionados foram apagados." ,
+ 'moderated_comments:disable' => "Desabilita moderação." ,
+ 'moderated_comments:enable' => "Habilita moderação" ,
+ 'moderated_comments:approve_checked' => "Aprova os comentários selecionados" ,
+ 'moderated_comments:delete_checked' => "Apaga os comentários marcados" ,
+ 'moderated_comments:wrong_permissions' => "Você não possui as permissões necessários para fazer isso." ,
+ 'moderated_comments:moderated_notice' => "Os comentários anônimos são moderados. Seu comentário não estará visível até ser aprovado pelo proprietário do conteúdo." ,
+ 'moderated_comments:entity_unmoderated' => "Este conteúdo não é moderado." ,
+ 'moderated_comments:moderation_on' => "Moderação foi habilitada para este conteúdo." ,
+ 'moderated_comments:moderation_off' => "Moderação foi desabilitada para este conteúdo." ,
+ 'moderated_comments:moderation_already_on' => "Moderação já está habilitada para este conteúdo." ,
+ 'moderated_comments:moderation_already_off' => "moderação já está desabilitada para este conteúdo." ,
+ 'moderated_comments:email:subject' => "Você possui um novo comentário para moderar!" ,
+ 'moderated_comments:checkbox_description' => "Comentários moderados." ,
+ 'moderated_comments:email:body' => "Você tem um novo conteúdo no seu item \"%s\" de %s. Ele contém:
+
+%s
+
+
+Para responder ou ver o item original, clique aqui:
+
+%s
+
+Para ver o perfil de %s, clique aqu:
+
+%s
+
+Para aprovar o comentário, clique aqui:
+
+%s
+
+Para apagar o comentário, clique aqui:
+
+%s
+
+Você não deve responder este email."
+);
+
+add_translation('pt', $portugues);
diff --git a/mod/languages/languages/pt/pt.notifications.php b/mod/languages/languages/pt/pt.notifications.php
new file mode 100644
index 000000000..02a24490b
--- /dev/null
+++ b/mod/languages/languages/pt/pt.notifications.php
@@ -0,0 +1,20 @@
+<?php
+
+// Gerado pela extensão 'translationbrowser' 20111226-08:46:25 PM
+
+$portugues = array(
+ 'friends:all' => "Todos os amigos" ,
+ 'notifications:subscriptions:personal:description' => "Receber notificações quando mudanças forem realizadas em seus conteúdos." ,
+ 'notifications:subscriptions:personal:title' => "Notificações pessoais" ,
+ 'notifications:subscriptions:friends:title' => "Amigos" ,
+ 'notifications:subscriptions:friends:description' => "Esta é uma coleção automática feita a partir dos seus amigos. Para receber atualização selecione abaixo. Isto irá afetar os respectivos usuários no painel de configurações de notificações principais, na parte de baixo de página." ,
+ 'notifications:subscriptions:collections:edit' => "Para editar suas notificações de acesso compartilhadas, clique aqui." ,
+ 'notifications:subscriptions:changesettings' => "Notificações" ,
+ 'notifications:subscriptions:changesettings:groups' => "Notificações de comunidades" ,
+ 'notifications:subscriptions:title' => "Notificação por usuário" ,
+ 'notifications:subscriptions:description' => "Para receber notificações de seus amigos quando eles criarem novos conteúdos, encontre-os abaixo e selecione o método de notificação que você deseja utilizar." ,
+ 'notifications:subscriptions:groups:description' => "Para receber notificações quando novos conteúdos forem adicionados a uma comunidade da qual você participe, encontre-a abaixo e selecione o método de notificação que você deseja utilizar." ,
+ 'notifications:subscriptions:success' => "Suas configurações de notificação foram salvas com sucesso."
+);
+
+add_translation('pt', $portugues);
diff --git a/mod/languages/languages/pt/pt.pages.php b/mod/languages/languages/pt/pt.pages.php
new file mode 100644
index 000000000..c0d5fd26b
--- /dev/null
+++ b/mod/languages/languages/pt/pt.pages.php
@@ -0,0 +1,55 @@
+<?php
+$pt = array (
+ 'pages' => 'Páginas',
+ 'pages:group' => 'Páginas',
+ 'pages:all' => 'Todas as páginas',
+ 'pages:new' => 'Nova página',
+ 'pages:edit' => 'Editar esta página',
+ 'pages:delete' => 'Excluir esta página',
+ 'pages:history' => 'Histórico da página',
+ 'pages:view' => 'Exibir a página',
+ 'pages:navigation' => 'Navegação na página',
+ 'item:object:page_top' => 'Páginas do alto',
+ 'item:object:page' => 'Páginas',
+ 'pages:nogroup' => 'Esse grupo ainda não possui nenhuma página',
+ 'pages:more' => 'Mais páginas',
+ 'pages:title' => 'Título da página',
+ 'pages:description' => 'Conteúdo da página',
+ 'pages:tags' => 'Etiquetas',
+ 'pages:access_id' => 'Acesso',
+ 'pages:write_access_id' => 'Permissão de escrita',
+ 'pages:noaccess' => 'Nenhum acesso à página',
+ 'pages:cantedit' => 'Você não pode editar esta página',
+ 'pages:saved' => 'Páginas salvas',
+ 'pages:notsaved' => 'Não foi possível salvar a página',
+ 'pages:delete:success' => 'A página foi excluída com sucesso.',
+ 'pages:delete:failure' => 'Não foi possível excluir a página.',
+ 'pages:strapline' => 'Última atualização %s por %s',
+ 'pages:revision' => 'Revisão criada %s por %s',
+ 'pages:num' => 'Número de páginas a serem exibidas',
+ 'pages:widget:description' => 'Essa é a lista das suas páginas',
+ 'pages:label:view' => 'Exibir a página',
+ 'pages:label:edit' => 'Editar a página',
+ 'pages:label:history' => 'Histórico da página',
+ 'pages:sidebar:this' => 'Esta página',
+ 'pages:sidebar:children' => 'Subpáginas',
+ 'pages:sidebar:parent' => 'Superior',
+ 'pages:newchild' => 'Criar uma subpágina',
+ 'pages:backtoparent' => 'Voltar para \'%s\'',
+ 'pages:owner' => 'páginas de %s',
+ 'pages:friends' => 'páginas dos amigos',
+ 'pages:add' => 'Adicionar página colaborativa (wiki)',
+ 'groups:enablepages' => 'Habilita páginas colaborativas (wiki) na comunidade',
+ 'pages:none' => 'Nenhuma página colaborativa (wiki) criada ainda',
+ 'river:create:object:page' => '%s criou a página %s',
+ 'river:create:object:page_top' => '%s criou a página %s',
+ 'river:update:object:page' => '%s atualizou a página %s',
+ 'river:update:object:page_top' => '%s atualizou a página %s',
+ 'river:comment:object:page' => '%s comentou a página denominada %s',
+ 'river:comment:object:page_top' => '%s comentou a página denominada %s',
+ 'pages:error:no_title' => 'Você deve especificar um título para esta página',
+ 'pages:revision:subtitle' => 'Revisão criada %s por %s',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.profile.php b/mod/languages/languages/pt/pt.profile.php
new file mode 100644
index 000000000..289a28cc8
--- /dev/null
+++ b/mod/languages/languages/pt/pt.profile.php
@@ -0,0 +1,8 @@
+<?php
+$pt = array (
+ 'profile' => 'Perfil',
+ 'profile:notfound' => 'Desculpe. Não foi possível encontrar o perfil especificado.',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.reportedcontent.php b/mod/languages/languages/pt/pt.reportedcontent.php
new file mode 100644
index 000000000..ee6a36679
--- /dev/null
+++ b/mod/languages/languages/pt/pt.reportedcontent.php
@@ -0,0 +1,36 @@
+<?php
+$pt = array (
+ 'item:object:reported_content' => 'Itens denunciados',
+ 'reportedcontent' => 'Conteúdo denunciado',
+ 'reportedcontent:this' => 'Denunciar isto',
+ 'reportedcontent:none' => 'Não existe nenhuma denúncia de conteúdo',
+ 'reportedcontent:report' => 'Denunciar isto',
+ 'reportedcontent:title' => 'Título da página',
+ 'reportedcontent:deleted' => 'O conteúdo denunciado foi excluído',
+ 'reportedcontent:notdeleted' => 'Não foi possível excluir essa denúncia',
+ 'reportedcontent:delete' => 'Excluir',
+ 'reportedcontent:areyousure' => 'Tem certeza que deseja excluir?',
+ 'reportedcontent:archive' => 'Arquivar',
+ 'reportedcontent:archived' => 'A denúncia foi arquivada',
+ 'reportedcontent:visit' => 'Visitar o item denunciado',
+ 'reportedcontent:by' => 'Denunciado por',
+ 'reportedcontent:objecttitle' => 'Título do objeto',
+ 'reportedcontent:objecturl' => 'URL do objeto',
+ 'reportedcontent:reason' => 'Razão para a denúncia',
+ 'reportedcontent:description' => 'Por que você está denunciando isto?',
+ 'reportedcontent:address' => 'Localização do item',
+ 'reportedcontent:success' => 'Sua denúncia foi enviada para o administrador do site',
+ 'reportedcontent:failing' => 'Não foi possível enviar sua denúncia',
+ 'reportedcontent:moreinfo' => 'Mais informações',
+ 'reportedcontent:failed' => 'Desculpe, mas ocorreu um erro com a sua denúncia deste conteúdo.',
+ 'reportedcontent:notarchived' => 'Não foi possível arquivar essa denúncia',
+ 'admin:administer_utilities:reportedcontent' => 'Conteúdo denunciado',
+ 'reportedcontent:this:tooltip' => 'Denunciar esta página ao administrador',
+ 'reportedcontent:instructions' => 'Esta denuncia será enviada para o administrador do site revisar.',
+ 'reportedcontent:numbertodisplay' => 'Número de denuncias a apresentar',
+ 'reportedcontent:widget:description' => 'Demonstre os conteúdos denunciados',
+ 'reportedcontent:user' => 'Pessoa denunciada',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.search.php b/mod/languages/languages/pt/pt.search.php
new file mode 100644
index 000000000..770081150
--- /dev/null
+++ b/mod/languages/languages/pt/pt.search.php
@@ -0,0 +1,18 @@
+<?php
+$pt = array (
+ 'search:enter_term' => 'Insira um termo de pesquisa:',
+ 'search:no_results' => 'Nenhum resultado.',
+ 'search:matched' => 'Combinados: ',
+ 'search:results' => 'Resultados para %s',
+ 'search:no_query' => 'Por favor, insira uma expressão a ser pesquisada.',
+ 'search:search_error' => 'Erro',
+ 'search:more' => '+%s mais %s',
+ 'search_types:tags' => 'Descritores (Tags)',
+ 'search_types:comments' => 'Comentários',
+ 'search:comment_on' => 'Comentários sobre "%s"',
+ 'search:comment_by' => 'por',
+ 'search:unavailable_entity' => 'Entidade não disponível',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.spam_login_filter.php b/mod/languages/languages/pt/pt.spam_login_filter.php
new file mode 100644
index 000000000..369215d75
--- /dev/null
+++ b/mod/languages/languages/pt/pt.spam_login_filter.php
@@ -0,0 +1,80 @@
+<?php
+
+ $portugues = array(
+ //Return messages
+ 'spam_login_filter:access_denied_domain_blacklist' => "Acesso negado devido a problemas com spam (Domínio em lista negra). Contate o administrador do site.",
+ 'spam_login_filter:access_denied_mail_blacklist' => "Acesso negado devido a problemas com spam (E-Mail em lista negra). Contate o administrador do site.",
+ 'spam_login_filter:access_denied_ip_blacklist' => "Acesso negado devido a problemas com spam (IP em lista negra). Contate o administrador do site.",
+ 'spam_login_filter:access_denied_country_blacklist' => "Acesso negado devido a problemas com spam (País em lista negra). Contate o administrador do site.",
+ 'spam_login_filter:access_denied_region_blacklist' => "Acesso negado devido a problemas com spam (Região em lista negra). Contate o administrador do site.",
+
+ //User menu
+ 'spam_login_filter:delete_and_report' => "Apagar e denunciar como spammer",
+
+ //Admin menu
+ 'admin:administer_utilities:manageip' => "Gerenciar IPs bloqueados",
+ 'spam_login_filter:admin:ip_date_created' => 'Criado %s',
+ 'spam_login_filter:admin:delete_ip' => 'Excluir',
+ 'spam_login_filter:admin:confirm_delete_ip' => 'Excluir %s?',
+
+ 'spam_login_filter:messages:deleted_ip' => 'IP excluído.',
+ 'spam_login_filter:messages:deleted_ips' => 'IPs excluídos.',
+ 'spam_login_filter:errors:could_not_delete_ip' => 'Não foi possível excluir o IP.',
+ 'spam_login_filter:errors:could_not_delete_ips' => 'Não foi possível excluir todos os IPs selecionados.',
+ 'spam_login_filter:errors:unknown_ips' => 'IP não encontrado.',
+ 'spam_login_filter:admin:no_ips' => 'A lista de IPs está vazia.',
+
+ //Report to stopforumspam
+ 'spam_login_filter:empty_ip_error' => "IP do usuário está em branco.",
+ 'spam_login_filter:empty_api_key_error' => "API do stopforumspam está em branco.",
+ 'spam_login_filter:unable_report' => "Erro ao contatar stopforumspam.com.",
+ 'spam_login_filter:user_deleted' => "Usuário removido.",
+ 'spam_login_filter:user_not_deleted' => "Erro ao remover usuário.",
+
+ //Configuration form - Fassim settings
+ 'spam_login_filter:use_fassim' => "Usar fassim.com",
+ 'spam_login_filter:fassim_api_key' => "Fassim API Key",
+ 'spam_login_filter:fassim_check_email' => "Validar email?",
+ 'spam_login_filter:fassim_check_ip' => "Validar IP?",
+ 'spam_login_filter:fassim_block_proxies' => "Bloquear proxys anônimos?",
+ 'spam_login_filter:fassim_block_top_spamming_isps' => "Bloquear ISPs com muito spam?",
+ 'spam_login_filter:fassim_block_top_spamming_domains' => "Bloquear domínios com muito spam?",
+ 'spam_login_filter:fassim_blocked_country_list' => "Informe o(s) código(s) do(s) país(es) que deseja bloquear, separados por vírgula. (Ex.: BR,US,HK). Para uma lista dos países disponíveis, clique <a href='http://www.fassim.com/country-codes/' target='_blank'>aqui</a>.",
+ 'spam_login_filter:fassim_blocked_region_list' => "Para Estados Unidos e Canadá, você pode informar a região que deseja bloquear, separada por vírgula. (Ex.: US-GA,CA-NS). Para uma lista das regiões disponíveis, clique <a href='http://www.fassim.com/region-codes/' target='_blank'>aqui</a>.",
+
+ //Configuration form - Stopforumspam settings
+ 'spam_login_filter:use_stopforumspam' => "Usar stopforumspam.com",
+ 'spam_login_filter:stopforumspam_api_key' => "stopforumspam API Key",
+
+ 'spam_login_filter:notify_by_mail' => "Notificar tentativas bloqueadas por e-mail",
+ 'spam_login_filter:notify_mail_address' => "Endereço de e-mail",
+ 'spam_login_filter:notify_subject' => "Spammer bloqueado",
+ 'spam_login_filter:notify_message' => "Um spammer foi bloqueado durante o registro no site.
+
+E-Mail: %s.
+
+IP: %s.
+
+Motivo: %s.",
+
+ //Configuration form - General settings
+ 'spam_login_filter:use_mail_domain_blacklist' => "Usar lista negra de domínios",
+ 'spam_login_filter:blacklisted_mail_domains' => "Domínios em lista negra - Um por linha",
+
+ 'spam_login_filter:use_mail_blacklist' => "Usar lista negra de e-mails",
+ 'spam_login_filter:blacklisted_mails' => "E-mails em lista negra - Um por linha",
+
+ 'spam_login_filter:use_ip_blacklist_cache' => "Usar cache de lista negra de ips",
+
+ 'spam_login_filter:use_ip_blacklist_cache_description' => "IPs em lista negra podem navegar no site, porém receberão o erro '403 error - Access denied' na página de registro.",
+
+ //Configuration form - Titles
+ 'spam_login_filter:title_stopforumspam' => "Stopforumspam",
+ 'spam_login_filter:title_fassim' => "Fassim",
+ 'spam_login_filter:title_domain_blacklist' => "Lista negra de domínios",
+ 'spam_login_filter:title_email_blacklist' => "Lista negra de e-mails",
+ 'spam_login_filter:title_plugin_notifications' => "Notificações do plugin",
+ 'spam_login_filter:title_ip_blacklist' => "Lista negra de ips"
+
+ );
+ add_translation('pt', $portugues);
diff --git a/mod/languages/languages/pt/pt.speak_freely.php b/mod/languages/languages/pt/pt.speak_freely.php
new file mode 100644
index 000000000..9fbca5c6f
--- /dev/null
+++ b/mod/languages/languages/pt/pt.speak_freely.php
@@ -0,0 +1,55 @@
+<?php
+
+// Gerado pela extensão 'translationbrowser' 20110721-01:38:57 PM
+
+$portugues = array(
+ 'speak_freely:test' => "Teste do fale livremente" ,
+ 'speak_freely:display_name' => "Anônimo" ,
+ 'speak_freely:name_description' => "Nome a apresentar para o anônimo" ,
+ 'speak_freely:current_icon' => "Icone atual do anônimo:" ,
+ 'speak_freely:change_icon' => "Enviar um novo icone:" ,
+ 'speak_freely:settings' => "Configuração do Fale Livremente" ,
+ 'speak_freely:settings_saved' => "Configuração do Fale Livremente foi atualizada" ,
+ 'speak_freely:submit' => "Enviar" ,
+ 'speak_freely:empty_name' => "Nome não pode estar vazio." ,
+ 'speak_freely:no_file_uploaded' => "Nenhuma imagem foi enviada" ,
+ 'speak_freely:use_recaptcha' => "Usar 'recaptcha' para comentários anônimos?" ,
+ 'speak_freely:recaptcha_style' => "Escolha o estilo do seu 'recaptcha'" ,
+ 'speak_freely:white' => "Branco" ,
+ 'speak_freely:red' => "Vermelho" ,
+ 'speak_freely:blackglass' => "Negro" ,
+ 'speak_freely:clean' => "Básico" ,
+ 'speak_freely:recaptcha_fail' => "'Recaptcha' está incorreta" ,
+ 'speak_freely:yes' => "Sim" ,
+ 'speak_freely:no' => "Não" ,
+ 'speak_freely:name' => "Nome" ,
+ 'speak_freely:name_blank' => "Você deve digitar uma nome." ,
+ 'speak_freely:required' => "Obrigatório" ,
+ 'speak_freely:no_user' => "Nenhum usuário anônimo foi identificado." ,
+ 'speak_freely:avatar:success' => "Icone gerado com sucesso." ,
+ 'speak_freely:profile_view' => "Você não possui permissão para ver este perfil" ,
+ 'speak_freely:anon_comment:email:body' => "Você possui um novo comentário no seu item \"%s\" por uma pessoa anônima. Ele escreveu:
+
+%s
+
+
+Para responder ou ver o item original, clique aqui:
+
+%s
+
+Você não deve responder a este email." ,
+ 'speak_freely:profile:warning' => "<h1><b>Aviso</b></h1>
+
+Este é o perfil do usuário anônimo criado pelo dispositivo ' fale livremente\" (speak_freely).
+
+
+Se você apagar este usuário todos comentários anônimos serão apagados também mas o usuário será recriado instantâneamente. Desabilite o dispositivo primeiro se você deseja apagar permanentemente este usuário E todos os comentários anônimos.
+
+Você foi avisado." ,
+ 'speak_freely:public_key' => "Chave pública Recaptcha" ,
+ 'speak_freely:private_key' => "Chave privada Recaptcha" ,
+ 'speak_freely:recaptcha_key_instruction' => "Novas chaves podem ser geradas aqui:" ,
+ 'speak_freely:confirm_user_delete' => "Apagando este usuário serão apagados todos os comentários anônimos do sistema, este ação não pode ser desfeita. Você tem certeza que deseja prosseguir?"
+);
+
+add_translation('pt', $portugues);
diff --git a/mod/languages/languages/pt/pt.tagcloud.php b/mod/languages/languages/pt/pt.tagcloud.php
new file mode 100644
index 000000000..dd792f7fb
--- /dev/null
+++ b/mod/languages/languages/pt/pt.tagcloud.php
@@ -0,0 +1,9 @@
+<?php
+$pt = array (
+ 'tagcloud:widget:title' => 'Nuvem de palavras',
+ 'tagcloud:widget:description' => 'Nuvem de palavras',
+ 'tagcloud:widget:numtags' => 'Número de palavras a demonstrar',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.thewire.php b/mod/languages/languages/pt/pt.thewire.php
new file mode 100644
index 000000000..ed44db3b2
--- /dev/null
+++ b/mod/languages/languages/pt/pt.thewire.php
@@ -0,0 +1,37 @@
+<?php
+$pt = array (
+ 'thewire' => 'Micro-blog',
+ 'thewire:everyone' => 'Todas mensagens do Micro-blog',
+ 'thewire:user' => 'Micro-blog de %s
+',
+ 'thewire:friends' => 'Seus amigos no Micro-blog',
+ 'thewire:reply' => 'Responder',
+ 'thewire:replying' => 'Responder para %s quem escreveu',
+ 'thewire:thread' => '<i>(Thread)</i>',
+ 'thewire:charleft' => 'caracteres à esquerda',
+ 'thewire:tags' => 'Mensagens contendo os descritor (tag) \'%s\'',
+ 'thewire:noposts' => 'Nenhuma mensagem no Micro-blog ainda',
+ 'item:object:thewire' => 'Mensagens do Micro-blog',
+ 'thewire:update' => 'Atualizar',
+ 'thewire:by' => 'Mensagens do Micro-blog enviada por %s',
+ 'thewire:previous' => 'Anterior',
+ 'thewire:hide' => 'Esconder',
+ 'thewire:previous:help' => 'Ver mensagens anteriores',
+ 'thewire:hide:help' => 'Esconder mensagens anteriores',
+ 'river:create:object:thewire' => '%s enviou mensagem para %s',
+ 'thewire:wire' => 'micro-blog',
+ 'thewire:widget:desc' => 'Mostra suas últimas mensagens no Micro-blog',
+ 'thewire:num' => 'Número de items a serem visualizados',
+ 'thewire:moreposts' => 'Mais mensagens do Micro-blog',
+ 'thewire:posted' => 'Sua mensagem foi enviado com sucesso para o Micro-blog',
+ 'thewire:deleted' => 'Sua mensagem no Micro-blog foi apagada com sucesso.',
+ 'thewire:blank' => 'Desculpe. Você precisa digitar alguma coisa na caixa de texto antes de enviar.',
+ 'thewire:notfound' => 'Desculpe. Não foi possível localizar a mensagem do Micro-blog definida.',
+ 'thewire:notdeleted' => 'Desculpe. Não foi possível apagar a mensagem no Micro-blog',
+ 'thewire:notify:subject' => 'Nova mensagem postada',
+ 'thewire:notify:reply' => '%s respondeu para %s no Micro-blog: ',
+ 'thewire:notify:post' => '%s postou no Micro-blog: ',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.tinymce.php b/mod/languages/languages/pt/pt.tinymce.php
new file mode 100644
index 000000000..63d58b021
--- /dev/null
+++ b/mod/languages/languages/pt/pt.tinymce.php
@@ -0,0 +1,9 @@
+<?php
+$pt = array (
+ 'tinymce:remove' => 'Adicionar/Remover editor',
+ 'tinymce:add' => 'Adicionar editor',
+ 'tinymce:word_count' => 'Contagem de palavras:',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.twitter.php b/mod/languages/languages/pt/pt.twitter.php
new file mode 100644
index 000000000..11776ce9b
--- /dev/null
+++ b/mod/languages/languages/pt/pt.twitter.php
@@ -0,0 +1,12 @@
+<?php
+$pt = array (
+ 'twitter:title' => 'Twitter ',
+ 'twitter:info' => 'Apresentar suas últimas mensagens (\'tweets\')',
+ 'twitter:username' => 'Digite seu login no twitter <i>(twitter username)</i>',
+ 'twitter:num' => 'Número de mensagens (\'tweets\') para apresentar',
+ 'twitter:visit' => 'visitar meu twitter',
+ 'twitter:notset' => 'Este dispositivo do \'twitter\' não está pronto ainda para funcionar. Para apresentar suas últimas mensagens (\'tweets\'), clique em - EDITAR - e preencha seus detalhes.',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/pt/pt.twitter_api.php b/mod/languages/languages/pt/pt.twitter_api.php
new file mode 100644
index 000000000..7fde9cefc
--- /dev/null
+++ b/mod/languages/languages/pt/pt.twitter_api.php
@@ -0,0 +1,43 @@
+<?php
+
+// Gerado pela extensão 'translationbrowser' 20111228-02:57:43 PM
+
+$portugues = array(
+ 'twitter_api' => "Servicos do Twitter" ,
+ 'twitter_api:requires_oauth' => "Servicos do Twitter necessitam que o plugin da Biblioteca 'OAuth' esteja habilitado." ,
+ 'twitter_api:consumer_key' => "Chave publica <i>(Consumer Key)</i>" ,
+ 'twitter_api:consumer_secret' => "Chave privada <i>(Consumer Secret)</i>" ,
+ 'twitter_api:settings:instructions' => "Voce deve obter uma chave pública <i>(Consumer Key)</i> e outra chave privada <i>(Consumer Secret)</i> no site do <a href=\"https://twitter.com/oauth_clients\" target=\"_blank\">Twitter</a>. Os demais campos são auto-explicativos, a única informação que você terá que fornecer será o endereco de retorno <i>(callback url)<i> que tem o formato de %stwitter_api/authorize</i></i>" ,
+ 'twitter_api:usersettings:description' => "Vincule sua conta %s com o Twitter." ,
+ 'twitter_api:usersettings:request' => "Voce deve primeiro autorizar %s acessar sua conta do Twitter." ,
+ 'twitter_api:usersettings:cannot_revoke' => "Você não pode desvincular sua conta do Twitter por que você não forneceu seu email ou sua senha." ,
+ 'twitter_api:authorize:error' => "Nao foi possivel autorização pelo Twitter." ,
+ 'twitter_api:authorize:success' => "Acesso pelo Twitter foi autorizado." ,
+ 'twitter_api:usersettings:authorized' => "Você possui autorização %s para acessar sua conta do Twitter: @%s." ,
+ 'twitter_api:usersettings:revoke' => "Clique <a href=\"%s\">aqui</a> para revogar o acesso." ,
+ 'twitter_api:usersettings:site_not_configured' => "Um administrador deve configurar primeiro o Twitter antes dele poder ser usado." ,
+ 'twitter_api:revoke:success' => "Acesso do Twitter foi revogado." ,
+ 'twitter_api:login' => "Permite aos usuarios existentes que possuem conta no Twitter a autenticação para acesso atraves do uso do Twitter?" ,
+ 'twitter_api:new_users' => "Permite aos novos usuarios a autenticação para acesso através do uso do Twitter mesmo se o registro manual estiver desabilitado?" ,
+ 'twitter_api:login:success' => "Voce foi autenticado e entrou na rede." ,
+ 'twitter_api:login:error' => "Não foi possivel autenticação através do Twitter." ,
+ 'twitter_api:login:email' => "Voce deve digitar um endereço de email válido para sua nova conta %s." ,
+ 'twitter_api:invalid_page' => "Página inválida" ,
+ 'twitter_api:deprecated_callback_url' => "O endereço de retorno <i>(callback URL)</i> foi alterado para o API do Twitter para %s. Por favor solicite ao seu administrador que efetue a alteração." ,
+ 'twitter_api:interstitial:settings' => "Configure suas preferências" ,
+ 'twitter_api:interstitial:description' => "Você está próximo de usar %s! São necessários poucos detalhes antes que você continue. Eles são opcionais mas permitiram que o login aconteça mesmo que o login pelo Twitter não esteja disponível ou você decida desvincular sua conta." ,
+ 'twitter_api:interstitial:username' => "Este é seu nome de usuário. Ele não pode ser alterado. Se você definir uma senha você poder´autilizar seu login ou endereço de email para se autenticar na rede." ,
+ 'twitter_api:interstitial:name' => "Este será o nome que as pessoas usarão para interagir com você." ,
+ 'twitter_api:interstitial:email' => "Seu endereço de email Por padrão, as pessoas não conseguiram visualizar este email." ,
+ 'twitter_api:interstitial:password' => "Um senha para que o login aconteça mesmo que o login pelo Twitter não esteja disponível ou você decida desvincular sua conta." ,
+ 'twitter_api:interstitial:password2' => "Digite a mesma senha, novamente." ,
+ 'twitter_api:interstitial:no_thanks' => "Não obrigado" ,
+ 'twitter_api:interstitial:no_display_name' => "Você deve ter um nome de apresentação para as pessoas." ,
+ 'twitter_api:interstitial:invalid_email' => "Você deve digitar um endereço de email válido ou deixar em branco." ,
+ 'twitter_api:interstitial:existing_email' => "Este endereço de email já foi registrado no site." ,
+ 'twitter_api:interstitial:password_mismatch' => "Suas senhas não são iguais." ,
+ 'twitter_api:interstitial:cannot_save' => "Não foi possível salvar os detalhes da conta." ,
+ 'twitter_api:interstitial:saved' => "Detalhes da conta foram salvos."
+);
+
+add_translation('pt', $portugues);
diff --git a/mod/languages/languages/pt/pt.uservalidationbyemail.php b/mod/languages/languages/pt/pt.uservalidationbyemail.php
new file mode 100644
index 000000000..b5f002d6b
--- /dev/null
+++ b/mod/languages/languages/pt/pt.uservalidationbyemail.php
@@ -0,0 +1,51 @@
+<?php
+$pt = array (
+ 'admin:users:unvalidated' => 'Sem validação',
+ 'email:validate:subject' => '%s por favor, confirme seu endereço de email para %s!',
+ 'email:validate:body' => 'Olá %s,
+
+Antes de você iniciar o uso da %, você deve confirmar seu endereço de email.
+
+Por favor, confirme seu endereço de email clicando no link abaixo:
+
+%s
+
+Se você não conseguir clicar no link, copie e cole o endereço para o navegador (browser) manualmente.
+
+%s
+%s
+',
+ 'email:confirm:success' => 'Você já confirmou seu endereço de email!',
+ 'email:confirm:fail' => 'Seu endereço de email não pode ser confirmado...',
+ 'uservalidationbyemail:registerok' => 'Para ativar sua conta, por favor confirme seu endereço de email clicando no link que foi enviado para endereço de email que você registrou.',
+ 'uservalidationbyemail:login:fail' => 'Sua conta não foi validada por isso ocorrem as falhas ao tentar entrar. Outro email de validação foi enviado para você.',
+ 'uservalidationbyemail:admin:no_unvalidated_users' => 'Nenhuma pessoa não validado.',
+ 'uservalidationbyemail:admin:unvalidated' => 'Usuários não validados',
+ 'uservalidationbyemail:admin:user_created' => 'Registrados %s',
+ 'uservalidationbyemail:admin:resend_validation' => 'Validação re-enviada',
+ 'uservalidationbyemail:admin:validate' => 'Validar',
+ 'uservalidationbyemail:admin:delete' => 'Apagar',
+ 'uservalidationbyemail:confirm_validate_user' => 'Validar %s?',
+ 'uservalidationbyemail:confirm_resend_validation' => 'Re-envio email de validação para %s?',
+ 'uservalidationbyemail:confirm_delete' => 'Apagar %s?',
+ 'uservalidationbyemail:confirm_validate_checked' => 'Validar usuários marcados?',
+ 'uservalidationbyemail:confirm_resend_validation_checked' => 'Re-envio validação para usuários marcados?',
+ 'uservalidationbyemail:confirm_delete_checked' => 'Apagar usuários marcados?',
+ 'uservalidationbyemail:check_all' => 'Todos',
+ 'uservalidationbyemail:errors:unknown_users' => 'Usuários desconhecidos',
+ 'uservalidationbyemail:errors:could_not_validate_user' => 'Não foi possível validar usuário.',
+ 'uservalidationbyemail:errors:could_not_validate_users' => 'Não foi possível validar todos usuários marcados.',
+ 'uservalidationbyemail:errors:could_not_delete_user' => 'Não foi possível apagar usuário.',
+ 'uservalidationbyemail:errors:could_not_delete_users' => 'Não foi possível apagar todos usuários marcados.',
+ 'uservalidationbyemail:errors:could_not_resend_validation' => 'Não foi possível re-enviar solicitação de validação.',
+ 'uservalidationbyemail:errors:could_not_resend_validations' => 'Não foi possível re-enviar solicitação de validação para usuários marcados.',
+ 'uservalidationbyemail:messages:validated_user' => 'Usuário validado.',
+ 'uservalidationbyemail:messages:validated_users' => 'Todos usuários marcados validados.',
+ 'uservalidationbyemail:messages:deleted_user' => 'Usuário apagado.',
+ 'uservalidationbyemail:messages:deleted_users' => 'Todos usuários marcados apagados.',
+ 'uservalidationbyemail:messages:resent_validation' => 'Solicitação de validação re-enviada.',
+ 'uservalidationbyemail:messages:resent_validations' => 'Solicitação de validação re-enviada para todos usuários marcados.',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/languages/languages/sr/sr.blog.php b/mod/languages/languages/sr/sr.blog.php
new file mode 100644
index 000000000..0c95113f5
--- /dev/null
+++ b/mod/languages/languages/sr/sr.blog.php
@@ -0,0 +1,12 @@
+<?php
+$sr = array (
+ 'blog' => 'Blog',
+ 'blog:newpost' => 'Novi blog post',
+ 'item:object:blog' => 'Blog postovi',
+ 'blog:never' => 'nikada',
+ 'blog:enableblog' => 'Omoguci blog grupe',
+ 'blog:group' => 'Blog grupe',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/sr/sr.core.php b/mod/languages/languages/sr/sr.core.php
new file mode 100644
index 000000000..455c87ed1
--- /dev/null
+++ b/mod/languages/languages/sr/sr.core.php
@@ -0,0 +1,389 @@
+<?php
+$sr = array (
+ 'login' => 'Loguj se',
+ 'loginok' => 'Uspesno si se ulogovao.',
+ 'loginerror' => 'Nisi ulogovan. Moguce da jos nisi potrvdio svoj nalog, ili si uneo neispravne podatke,ili si imao previse neuspesnih pokusaja logovanja. Proveri da li si uneo tacne podatke i pokusaj ponovo.',
+ 'logout' => 'Odjava',
+ 'logoutok' => 'Izlogovan si.',
+ 'logouterror' => 'Nisi izlogovan. Pokusaj ponovo.',
+ 'exception:title' => 'Dobrodosao u Elgg.',
+ 'actionundefined' => 'Zahtevana akcija (%s) nije definisana u sistemu.',
+ 'actionloggedout' => 'Sorry, ali nije moguce izvrsiti tu akciju kada si izlogovan.',
+ 'notfound' => 'Nema rezultata.',
+ 'SecurityException:Codeblock' => 'Odbijen pristup za izvrsavanjae privilegovanog dela bloka',
+ 'SecurityException:FunctionDenied' => 'Pristup privilegovanoj funkciji \'%s\' je odbijen.',
+ 'DatabaseException:DBSetupIssues' => 'Nastao je odredjeni broj problema:',
+ 'IOException:FailedToLoadGUID' => 'Neuspesno ucitavanje %s sa GUID:%d',
+ 'InvalidClassException:NotValidElggStar' => 'GUID:%d nije validan %s',
+ 'PluginException:MisconfiguredPlugin' => '%s nije dobro konfigurisan plugin.',
+ 'IOException:UnableToSaveNew' => 'Neuspesno snimanje nove %s',
+ 'InvalidParameterException:GUIDNotForExport' => 'GUID nije naveden prilikom izvoza, ovo ne bi trebalo da se desi.',
+ 'IOException:NotDirectory' => '%s nije direktorijum.',
+ 'InvalidParameterException:EntityTypeNotSet' => 'Tip entiteta mora biti naveden.',
+ 'ClassException:ClassnameNotClass' => '%s nije jedan %s.',
+ 'ImportException:ImportFailed' => 'Nije moguce uvesti element %d',
+ 'ImportException:ProblemSaving' => 'Nastao je problem u snimanju %s',
+ 'ImportException:NoGUID' => 'Novi entitet kreiran ali nema GUID, ovo ne bi trebalo da se desava.',
+ 'ImportException:GUIDNotFound' => 'Entitet \'%d\' nije pronadjen.',
+ 'ImportException:ProblemUpdatingMeta' => 'Nastao je problem prilikom azuriranja \'%s\' na entitetu \'%d\'',
+ 'ExportException:NoSuchEntity' => 'Ne postoji takav entitet GUID:%d',
+ 'ImportException:NotAllImported' => 'Nisu svi elementi uvezeni.',
+ 'InvalidParameterException:UnrecognisedFileMode' => 'Neprepoznatljiv file mod \'%s\'',
+ 'InvalidParameterException:MissingOwner' => 'File %s (%s) nema vlasnika!',
+ 'IOException:CouldNotMake' => 'Nije kreiran %s',
+ 'IOException:MissingFileName' => 'Moras navesti ime fajla pre otvaranja.',
+ 'NotificationException:NoNotificationMethod' => 'Nije naveden nacin obavestavanja.',
+ 'NotificationException:ErrorNotifyingGuid' => 'Nastala je greska prilikom obavestavanja %d',
+ 'NotificationException:NoEmailAddress' => 'Nije moguce pronaci email adresu za GUID:%d',
+ 'NotificationException:MissingParameter' => 'Nedostaje zahtevani parametar, \'%s\'',
+ 'InvalidParameterException:GUIDNotFound' => 'GUID:%s nije pronadjen, ili mu nemozes pristupiti.',
+ 'InvalidParameterException:IdNotExistForGUID' => 'Sorry, \'%s\' ne postoji za guid:%d',
+ 'InvalidParameterException:CanNotExportType' => 'Sorry, ali ne znam kako da izvezem \'%s\'',
+ 'InvalidParameterException:NoDataFound' => 'Nije pronadjen nikakav podatak.',
+ 'InvalidParameterException:DoesNotBelong' => 'Ne pripada entitetu.',
+ 'InvalidParameterException:DoesNotBelongOrRefer' => 'Ne pripada entitetu ili nije povezan sa njim.',
+ 'InvalidParameterException:MissingParameter' => 'Nedostaje parametar, moras navesti GUID.',
+ 'ConfigurationException:NoSiteID' => 'Nije naveden ID sajta.',
+ 'APIException:MissingParameterInMethod' => 'Nedostaje parametar %s u metodi %s',
+ 'SecurityException:AuthTokenExpired' => 'Autentifikacioni znak nedostaje,nije validan ili je istekao.',
+ 'CallException:InvalidCallMethod' => '%s mora biti pozvan koristeci \'%s\'',
+ 'APIException:MethodCallNotImplemented' => 'Metoda poziva \'%s\' nije implementirana.',
+ 'APIException:AlgorithmNotSupported' => 'Algoritam \'%s\' nije podrzan ili je iskljucen.',
+ 'APIException:MissingContentType' => 'Nedostaje tip sadrzaja za postovane podatke',
+ 'SecurityException:DupePacket' => 'Postpis paketa je vec vidjen.',
+ 'NotImplementedException:CallMethodNotImplemented' => 'Metod poziva \'%s\' nije podrzan.',
+ 'InvalidParameterException:UnexpectedReturnFormat' => 'Poziv metode \'%s\' je vratio neocekivani rezultat.',
+ 'PluginException:NoPluginName' => 'Ime plugin-a nije pronadjeno',
+ 'SecurityException:authenticationfailed' => 'Nije moguce autentifikovati korisnika',
+ 'CronException:unknownperiod' => '%s nije prepoznatljiv period.',
+ 'SecurityException:deletedisablecurrentsite' => 'Nisi u mogucnosti da obrises ili iskljucis sajt koji trenutno prikazujes!',
+ 'pageownerunavailable' => 'Upozorenje: Vlasnik strane %s nije dostupan!',
+ 'name' => 'Ime koje ce biti prikazano',
+ 'email' => 'Email adresa',
+ 'username' => 'Korisnicko ime',
+ 'password' => 'Lozinka',
+ 'passwordagain' => 'Lozinka (unesi ponovo radi potvrde)',
+ 'PRIVATE' => 'Privatno',
+ 'LOGGED_IN' => 'Ulogovani korisnici',
+ 'PUBLIC' => 'Javno',
+ 'access:friends:label' => 'Prijatelji',
+ 'access' => 'Pristup',
+ 'dashboard' => 'Pocetna strana',
+ 'dashboard:nowidgets' => 'Tvoja pocetna strana je tvoj prozor u sajt. Klikni na \'Edituj stranu\' da dodas widget-e kako bi pratio sadrzaj i svoj zivot kroz sistem.',
+ 'widgets:add' => 'Dodaj widget na svoju stranu',
+ 'widgets:position:fixed' => '(Fiksirana pozicija na strani)',
+ 'widgets' => 'Widgets',
+ 'widget' => 'Widget',
+ 'item:object:widget' => 'Widgets',
+ 'group' => 'Grupa',
+ 'item:group' => 'Grupe',
+ 'profile:edit:default' => 'Zameni polja profila',
+ 'user' => 'Korisnik',
+ 'item:user' => 'Korisnici',
+ 'riveritem:single:user' => 'korisnik',
+ 'riveritem:plural:user' => 'neki korisnici',
+ 'profile:edit' => 'Uredi profil',
+ 'profile:aboutme' => 'O meni',
+ 'profile:description' => 'O meni',
+ 'profile:briefdescription' => 'Kratak opis',
+ 'profile:location' => 'Lokacija',
+ 'profile:skills' => 'Vestine',
+ 'profile:interests' => 'Interesovanja',
+ 'profile:contactemail' => 'Kontakt email',
+ 'profile:phone' => 'Telefon',
+ 'profile:mobile' => 'Mobilni telefon',
+ 'profile:website' => 'Websajt',
+ 'profile:label' => 'Oznaka profila',
+ 'profile:type' => 'Tip profila',
+ 'profile:editdefault:fail' => 'Podrazumevani profil nije snimljen',
+ 'profile:editdefault:success' => 'Stavka uspesno dodata na podrazumevani profil',
+ 'profile:editdefault:delete:fail' => 'Neuspesno uklanjanje stavke sa podrazumevanog profila',
+ 'profile:editdefault:delete:success' => 'Stavka sa podrazumevanog profila obrisana!',
+ 'profile:defaultprofile:reset' => 'Reset podrazumevanog sistemskog profila',
+ 'profile:resetdefault' => 'Reset podrazumevanog profila',
+ 'item:site' => 'Sajtovi',
+ 'profile:explainchangefields' => 'Mozes zameniti postojeca polja na profilu sa svojim, koristeci formu ispod. Prvo daj naziv novom polju, na primer \'Omiljeni tim\'. Sledece izaberi tip polja, naprimer, url,tagovi, tekst i td. U bilo kom trenutku se mozes vratiti na podrazumevano podesavanje.',
+ 'profile:saved' => 'Tvoj profil je uspesno snimljen.',
+ 'friends' => 'Prijatelji',
+ 'friends:yours' => 'Tvoji prijatelji',
+ 'friends:owned' => '%s prijatelji',
+ 'friend:add' => 'Dodaj prijatelja',
+ 'friend:remove' => 'Ukloni prijatelja',
+ 'friends:add:successful' => 'Uspesno si dodao %s kao prijatelja.',
+ 'friends:add:failure' => 'Nismo uspeli da dodamo %s kao prijatelja. Pokusaj ponovo.',
+ 'friends:remove:successful' => 'Uspesno si uklonio %s iz liste prijatelja.',
+ 'friends:remove:failure' => 'Nismo uspeli da uklonimo %s iz tvoje liste prijatelja. Pokusaj ponovo.',
+ 'friends:none' => 'Ovaj korisnik jos nije dodao prijatelje.',
+ 'friends:none:you' => 'Jos nisi dodao nikoga kao prijatelja! Potrazi svoja interesovanja kako bi zapoceo pretragu za ljude koji te interesuju.',
+ 'friends:none:found' => 'Nije pronadjen ni jedan prijatelj.',
+ 'friends:of:none' => 'Niko jos uvek nije dodao korisnika kao svog prijatelja.',
+ 'friends:of:none:you' => 'Niko te jos uvek nije dodao kao prijatelja. Pocni da dodajes sadrzaj i popuni svoj profil i dozvoli ljudima da te nadju!',
+ 'friends:of:owned' => 'Ljudi koji su dodali %s kao prijatelja',
+ 'friends:num_display' => 'Broj prijatelja koji zelis da prikazes',
+ 'friends:icon_size' => 'Velicina ikonice',
+ 'friends:tiny' => 'majusno',
+ 'friends:small' => 'malo',
+ 'friends:of' => 'Prijatelji od',
+ 'friends:collections' => 'Skup prijatelja',
+ 'friends:collections:add' => 'Nova skup prijatelja',
+ 'friends:addfriends' => 'Dodaj prijatelje',
+ 'friends:collectionname' => 'Ime skupa',
+ 'friends:collectionfriends' => 'Prijatelji u skupu',
+ 'friends:collectionedit' => 'Uredi ovaj skup',
+ 'friends:nocollections' => 'Jos uvek nemas skup.',
+ 'friends:collectiondeleted' => 'Tvoj skup je obrisan.',
+ 'friends:collectiondeletefailed' => 'Nismo uspeli da obrisemo skup. Nemas permisije ili je nastao neki drugi problem.',
+ 'friends:collectionadded' => 'Uspesno si kreirao svoj skup',
+ 'friends:nocollectionname' => 'Moras dati skupu ime pre nego sto ga kreiras.',
+ 'friends:collections:members' => 'Clanovi skupa',
+ 'friends:collections:edit' => 'Uredi skup',
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'feed:rss' => 'Prijavi se za feed',
+ 'link:view' => 'prikazi link',
+ 'river' => 'River',
+ 'river:noaccess' => 'Nemas permisije da vidis ovu stavku.',
+ 'river:posted:generic' => '%s je postovao',
+ 'plugins:settings:save:ok' => 'Podesavanja za %s plugin su uspesno snimljena.',
+ 'plugins:settings:save:fail' => 'Nastao je problem prilikom snimanja podesavanja %s plugin-a.',
+ 'plugins:usersettings:save:ok' => 'Korisnicka podesavanja za %s plugin su uspesno snimljena.',
+ 'plugins:usersettings:save:fail' => 'Nastao je problem u toku snimanja podesavanja za %s plugin.',
+ 'admin:plugins:label:version' => 'Verzija',
+ 'item:object:plugin' => 'Podesavanja konfiguracije plugin-a',
+ 'notifications:usersettings' => 'Podesavanja obavestavanja',
+ 'notifications:methods' => 'Navedite metode koje zelite da dozvolite.',
+ 'notifications:usersettings:save:ok' => 'Tvoja podesavanja obavestavanja su uspesno snimljena.',
+ 'notifications:usersettings:save:fail' => 'Nastao je problem prilikom snimanja podesvanja obavestenja.',
+ 'user.notification.get' => 'Vrati podesavanja obavestenja za datog korisnika.',
+ 'user.notification.set' => 'Podesi podesavanje obavestenja za datog korisnika.',
+ 'search' => 'Pretraga',
+ 'searchtitle' => 'Pretraga: %s',
+ 'users:searchtitle' => 'Pretraga korisnika: %s',
+ 'groups:searchtitle' => 'Pretraga grupa:%s',
+ 'advancedsearchtitle' => '%s sa rezultatima koji se poklapaju %s',
+ 'next' => 'Sledece',
+ 'previous' => 'Prethodno',
+ 'viewtype:change' => 'Promeni tip listanja',
+ 'viewtype:list' => 'Prikaz liste',
+ 'viewtype:gallery' => 'Galerija',
+ 'tag:search:startblurb' => 'Stavka koja odgovara tag-u \'%s\'',
+ 'user:search:startblurb' => 'Korisnik koji odgovara \'%s\'',
+ 'user:search:finishblurb' => 'Da bi prikazao vise, klikni ovde.',
+ 'group:search:startblurb' => 'Grupe koje odgovaraju \'%s\':',
+ 'group:search:finishblurb' => 'Da bi prikazao vise, klikni ovde.',
+ 'search:go' => 'Kreni',
+ 'account' => 'Nalog',
+ 'settings' => 'Podesavanja',
+ 'tools' => 'Alatke',
+ 'register' => 'Registruj se',
+ 'registerok' => 'Uspesno si se registrovao za %s.',
+ 'registerbad' => 'Tvoja registracija je neuspesna. Korisnicko ime vec postoji, lozinke ti se ne slazu ili su ti korisnicko ime ili lozinka prekratki',
+ 'registerdisabled' => 'Registracije su onemogucene od strane system administratora',
+ 'registration:notemail' => 'Email adresa koju si uneo nije validna email adresa.',
+ 'registration:userexists' => 'To korisnicko ime vec postoji',
+ 'registration:usernametooshort' => 'Korisnicko ime mora biti minimalno 4 karaktera dugo.',
+ 'registration:passwordtooshort' => 'Lozinka mora biti minimalno 6 karaktera duga.',
+ 'registration:dupeemail' => 'Email adresa je vec registrovana.',
+ 'registration:invalidchars' => 'Izvini, ali tvoje korisnicko ime sadrzi nepodrzane karaktere.',
+ 'registration:emailnotvalid' => 'Izvini, email adresa koju si uneo nije validna u sistemu',
+ 'registration:passwordnotvalid' => 'Izvini, lozinka koju si uneo nije validna u sistemu',
+ 'registration:usernamenotvalid' => 'Izvini, korisnicko ime koji si uneo nije validno u sistemu',
+ 'adduser' => 'Dodaj korisnika',
+ 'adduser:ok' => 'Uspesno si dodao novog korisnika.',
+ 'adduser:bad' => 'Novi korisnik nije kreiran.',
+ 'user:set:name' => 'Podesavanje imena naloga',
+ 'user:name:label' => 'Tvoje ime',
+ 'user:name:success' => 'Uspeno si promenio svoje ime u sistemu.',
+ 'user:name:fail' => 'Nismo uspeli da promenimo tvoje ime u sistemu.',
+ 'user:set:password' => 'Lozinka za nalog',
+ 'user:password:label' => 'Tvoja nova lozinka',
+ 'user:password2:label' => 'Tvoja nova lozinka ponovo',
+ 'user:password:success' => 'Lozinka promenjena',
+ 'user:password:fail' => 'Nismo uspeli da promenimo tvoju lozinku u sistemu.',
+ 'user:password:fail:notsame' => 'Lozinke nisu iste!',
+ 'user:password:fail:tooshort' => 'Lozinka je prekratka!',
+ 'user:set:language' => 'Podesavanja jezika',
+ 'user:language:label' => 'Tvoj jezik',
+ 'user:language:success' => 'Podesavanja tvoj jezika su azurirana',
+ 'user:language:fail' => 'Podesavanja tvoj jezika nisu promenjena.',
+ 'user:username:notfound' => 'Korisnicko ime %s nije pronadjeno',
+ 'user:password:lost' => 'Izgubljena lozinka',
+ 'user:password:resetreq:success' => 'Uspesno zatrazena nova lozinka, email poslat',
+ 'user:password:resetreq:fail' => 'Nije moguce zatraziti novu lozinku.',
+ 'user:password:text' => 'Da bi generisao novu lozinku. unesi svoje korisnicko ime ispod. A mi cemo ti poslati adresu jedinstvene strane za potvrdu, na tvoj email. Kilkni na link u sadrzaju poruke i nova lozinka ce ti biti poslata.',
+ 'user:persistent' => 'Zapamti me',
+ 'admin:configuration:success' => 'Tvoja podesavanja su snimljena.',
+ 'admin:configuration:fail' => 'Tvoja podesavanja nisu snimljena.',
+ 'admin' => 'Administracija',
+ 'admin:description' => 'Admin panel ti omogucava da kontrolises sve aspekte sistema, od managmenta korisnika do kako se plugin-ovi ponasaju. Izaberi opcije ispod da bi poceo.',
+ 'admin:plugins:label:author' => 'Autor',
+ 'admin:plugins:label:copyright' => 'Copyright',
+ 'admin:plugins:label:licence' => 'Licence',
+ 'admin:plugins:label:website' => 'URL',
+ 'admin:plugins:label:moreinfo' => 'vise informacija',
+ 'admin:statistics' => 'Statistika',
+ 'admin:statistics:opt:linktext' => 'Prikazi statistiku..',
+ 'admin:user:label:search' => 'Pronadji korisnika:',
+ 'admin:user:ban:yes' => 'Korisnik je banovan.',
+ 'usersettings:statistics' => 'Tvoje statistike',
+ 'usersettings:user' => 'Tvoja podesavanja',
+ 'usersettings:user:opt:linktext' => 'Promeni svoja podesavanja',
+ 'usersettings:plugins' => 'Alatke',
+ 'usersettings:plugins:opt:description' => 'Konfigurisi podesavanja (ako ih ima) za tvoje aktivne alakte.',
+ 'usersettings:plugins:opt:linktext' => 'Konfigurisi svoje alatke',
+ 'usersettings:plugins:description' => 'Ovaj panel ti omogucava sa kontrolises i konfigurises licna podesavanja za alatke koje su instalirane od strane systema administratora.',
+ 'usersettings:statistics:label:numentities' => 'Tvoji entiteti',
+ 'usersettings:statistics:yourdetails' => 'Tvoji detalji',
+ 'usersettings:statistics:label:name' => 'Puno ime',
+ 'usersettings:statistics:label:email' => 'Email',
+ 'usersettings:statistics:label:membersince' => 'Clan od',
+ 'usersettings:statistics:label:lastlogin' => 'Poslednji put ulogovan',
+ 'save' => 'Snimi',
+ 'publish' => 'Objavi',
+ 'cancel' => 'Otkazi',
+ 'saving' => 'Snimanje...',
+ 'update' => 'Azuriraj',
+ 'edit' => 'Uredi',
+ 'delete' => 'Obrisi',
+ 'accept' => 'Prihvati',
+ 'load' => 'Ucitaj',
+ 'upload' => 'Upload',
+ 'ban' => 'Banuj',
+ 'unban' => 'OdBanuj',
+ 'enable' => 'Omoguci',
+ 'disable' => 'Isljuci',
+ 'request' => 'Zatrazi',
+ 'complete' => 'Zavrseno',
+ 'open' => 'Otvori',
+ 'close' => 'Zatvori',
+ 'reply' => 'Odgovori',
+ 'more' => 'Vise',
+ 'comments' => 'Komentari',
+ 'import' => 'Uvezi',
+ 'export' => 'Izvezi',
+ 'up' => 'Gore',
+ 'down' => 'Dole',
+ 'top' => 'Vrh',
+ 'bottom' => 'Dno',
+ 'invite' => 'Pozovi',
+ 'resetpassword' => 'Resetuj lozinku',
+ 'makeadmin' => 'Nacini adminom',
+ 'removeadmin' => 'Ukloni admina',
+ 'option:yes' => 'Da',
+ 'option:no' => 'Ne',
+ 'unknown' => 'Nepoznato',
+ 'active' => 'Aktivno',
+ 'total' => 'Total',
+ 'learnmore' => 'Klikni ovde i saznaj vise.',
+ 'content' => 'sadrzaj',
+ 'content:latest' => 'Poslednja akcija',
+ 'content:latest:blurb' => 'Alternativno, klikno ovde da bi video poslednji sadrzaj na celom sajtu.',
+ 'link:text' => 'prikazi link',
+ 'question:areyousure' => 'Da li si siguran?',
+ 'title' => 'Naslov',
+ 'description' => 'Opis',
+ 'tags' => 'Tagovi',
+ 'spotlight' => 'Izdvajamo',
+ 'all' => 'Sve',
+ 'annotations' => 'Komentara',
+ 'relationships' => 'Veze',
+ 'deleteconfirm' => 'Da li si siguran da zelis da obrises ovo?',
+ 'fileexists' => 'Fajl je vec upload-ovan. Da bi ga zamenio, klikni ispod:',
+ 'useradd:subject' => 'Korisnicki nalog kreiran',
+ 'useradd:body' => '%s,
+
+Korisnicki nalog za tebe je kreiran na %s. Da bi se ulogovao, poseti:
+
+%s
+
+I uloguje se sa ovim podacima:
+
+Korisnicko ime: %s
+Lozinka: %s
+
+Jednom kada si ulogovan, preporucujemo da promenite lozinku.',
+ 'systemmessages:dismiss' => 'klikni da uklonis',
+ 'importsuccess' => 'Uvoz podataka je bio uspesan.',
+ 'friendlytime:justnow' => 'upravo sada',
+ 'friendlytime:minutes' => 'pre %s minuta',
+ 'friendlytime:minutes:singular' => 'pre minut',
+ 'friendlytime:hours' => 'pre %s sati',
+ 'friendlytime:hours:singular' => 'pre sat vremena',
+ 'friendlytime:days' => 'pre %s dana',
+ 'friendlytime:days:singular' => 'juce',
+ 'date:month:01' => 'Januara %s',
+ 'date:month:02' => 'Februara %s',
+ 'date:month:03' => 'Marta %s',
+ 'date:month:04' => 'Aprila %s',
+ 'date:month:05' => 'Maja %s',
+ 'date:month:06' => 'Juna %s',
+ 'date:month:07' => 'Jula %s',
+ 'date:month:08' => 'Avgusta %s',
+ 'date:month:09' => 'Septembra %s',
+ 'date:month:10' => 'Oktobra %s',
+ 'date:month:11' => 'Novembra %s',
+ 'date:month:12' => 'Decembra %s',
+ 'welcome' => 'Dobrodosao',
+ 'welcome:user' => 'Dobrodosao %s',
+ 'email:settings' => 'Email podesvanja',
+ 'email:address:label' => 'Tvoja email adresa',
+ 'email:save:success' => 'Nova email adresa snimljena, verifikacija je zatrazena.',
+ 'email:save:fail' => 'Tvoja nova email adresa nije snimljena.',
+ 'friend:newfriend:subject' => '%s te je dodao kao prijatelja.',
+ 'friend:newfriend:body' => '%s te je dodao kao prijatelja!
+
+Da bi pogledao njegov profil, klinkni ovde:
+
+%s
+
+Ne odgovaraj na ovaj email.',
+ 'email:resetpassword:subject' => 'Lozinka resetovana!',
+ 'email:resetpassword:body' => 'Zdravo %s,
+
+Tvoja lozinka je resetovana u: %s',
+ 'email:resetreq:subject' => 'Zahtev za novom lozinkom.',
+ 'email:resetreq:body' => 'Zdravo %s,
+
+Neko (sa IP adrese %s) je zatrazio promenu lozinke za nalog.
+
+Ako si ti to zatrazio, klinki na link ispod, u suprotnom ignorisi ovaj emal.
+
+%s',
+ 'default_access:settings' => 'Tvoj podrazumevani nivo pristupa',
+ 'default_access:label' => 'Podrazumevani pristup',
+ 'user:default_access:success' => 'Tvoj novi podrazumevani nivo pristupa je snimljen.',
+ 'user:default_access:failure' => 'Tvoj novi podrazumevani nivo pristupa nije snimljen.',
+ 'xmlrpc:noinputdata' => 'Nedostaju podaci za unos',
+ 'comments:count' => '%s komentara',
+ 'riveraction:annotation:generic_comment' => '%s je komentarisao %s',
+ 'generic_comments:add' => 'Dodaj komentar',
+ 'generic_comments:text' => 'Komentar',
+ 'generic_comment:posted' => 'Tvoj komentar je uspesno postovan.',
+ 'generic_comment:deleted' => 'Tvoj komentar je uspesno uklonjen.',
+ 'generic_comment:blank' => 'Sorry; moras nesto da uneses u komentar pre nego sto ga snimis.',
+ 'generic_comment:notfound' => 'Sorry; nismo pronasli navedenu stavku.',
+ 'generic_comment:notdeleted' => 'Sorry; ne mozemo da obrisemo ovaj komentar.',
+ 'generic_comment:failure' => 'Nastala je neocekivana greska prilikom dodavanja tvoj komentara. Pokusaj ponovo.',
+ 'generic_comment:email:subject' => 'Ceka te novi komentar!',
+ 'generic_comment:email:body' => 'Imas novi komentar na "%s" od %s. Koji glasi:
+
+%s
+
+Da bi video %s profil, klikni ovde:
+
+%s
+
+Ne odgovaraj na ovaj email.',
+ 'entity:default:strapline' => 'Kreiran %s by %s',
+ 'entity:delete:success' => 'Entitet %s je uklonjen',
+ 'entity:delete:fail' => 'Entitet %s nije uspesno uklonjen',
+ 'actiongatekeeper:tokeninvalid' => 'Nastala je greska. Ovo se verovatno desilo jer je strana na kojoj si istekla. Molimo, pokusajte ponovo.',
+ 'actiongatekeeper:timeerror' => 'Strana koju koristis je istekla. Molim osvezi je i pokusaj ponovo.',
+ 'actiongatekeeper:pluginprevents' => 'Ekstenzija je sprecila ovu formu da bude dostavljena.',
+ 'word:blacklist' => 'i,the,onda,ali,ona,njegov,njen,jedan,nije,takodje,o,sada,unapredi,kako god,jos uvek,obostrano,u suprotnom,stoga,obratno,radije,prema tome,potred toga,medjutim,umesto toga,u medjuvremenu,prema tome, ovo, izgleda,sta, koga,cije,ko god,kad god ',
+ 'hr' => 'Hrvatski',
+ 'sh' => 'Srpsko-Hrvatski',
+ 'sr' => 'Srpski',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/sr/sr.custom_index.php b/mod/languages/languages/sr/sr.custom_index.php
new file mode 100644
index 000000000..596d51bb2
--- /dev/null
+++ b/mod/languages/languages/sr/sr.custom_index.php
@@ -0,0 +1,10 @@
+<?php
+$sr = array (
+ 'custom:groups' => 'Najnovije grupe',
+ 'custom:files' => 'Najnoviji fajlovi',
+ 'custom:blogs' => 'Najnoviji blog postovi',
+ 'custom:members' => 'Najnoviji clanovi',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/sr/sr.externalpages.php b/mod/languages/languages/sr/sr.externalpages.php
new file mode 100644
index 000000000..668d30051
--- /dev/null
+++ b/mod/languages/languages/sr/sr.externalpages.php
@@ -0,0 +1,10 @@
+<?php
+$sr = array (
+ 'expages:about' => 'O Nama',
+ 'expages:terms' => 'Uslovi koriscenja',
+ 'expages:privacy' => 'Privatnost',
+ 'expages:contact' => 'Kontakt',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/sr/sr.file.php b/mod/languages/languages/sr/sr.file.php
new file mode 100644
index 000000000..ed6da28be
--- /dev/null
+++ b/mod/languages/languages/sr/sr.file.php
@@ -0,0 +1,7 @@
+<?php
+$sr = array (
+ 'groups:enablefiles' => 'Omoguci fajlove u grupi',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/sr/sr.friendrequest.php b/mod/languages/languages/sr/sr.friendrequest.php
new file mode 100644
index 000000000..f99669801
--- /dev/null
+++ b/mod/languages/languages/sr/sr.friendrequest.php
@@ -0,0 +1,20 @@
+<?php
+$sr = array (
+ 'friendrequest' => 'Dodaj u prijatelje',
+ 'friendrequest:add:successful' => 'Zahtevao si da postanes prijatelj sa %s. Moras sacekati da odobri tvoj zahtev pre nego sto se pojave u tvojoj listi prijatelja.',
+ 'friendrequest:add:failure' => 'Izvini, zbog sistemske greske nismo u mogucnosti da izvrsimo zahtev. Molim pokusaj ponovo.',
+ 'friendrequest:add:exists' => 'Vec si pozvao %s da budete prijatelji.',
+ 'friendrequest:decline:success' => 'Uspesno uklonjen zahtev za prijateljstvo.',
+ 'friendrequest:decline:fail' => 'Nemogu da uklonim zahtev za prijateljstvo.',
+ 'friendrequest:new:subject' => '%s zeli da bude tvoj prijatelj!',
+ 'friendrequest:new:body' => '%s zeli da bude tvoj prijatelj! Ali ceka da odobris zahtev...uloguj se sada i odobri zahtev!
+
+Mozes pogledati cekajuce zahteve na:
+
+%s
+
+(Ne mozes odgovoriti na ovaj email.)',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/sr/sr.groups.php b/mod/languages/languages/sr/sr.groups.php
new file mode 100644
index 000000000..40ee2c6bd
--- /dev/null
+++ b/mod/languages/languages/sr/sr.groups.php
@@ -0,0 +1,148 @@
+<?php
+$sr = array (
+ 'groups' => 'Grupe',
+ 'groups:owned' => 'Grupe koje posedujes',
+ 'groups:yours' => 'Tvoje grupe',
+ 'groups:user' => '%s grupe',
+ 'groups:all' => 'Sve grupe sa sajta',
+ 'groups:edit' => 'Uredi grupu',
+ 'groups:delete' => 'Obrisi grupu',
+ 'groups:membershiprequests' => 'Upravljanje zahtevima za pridruzivanje',
+ 'groups:icon' => 'Ikonica grupe (ostavi prazno ako zelis da ostane nepromenjeno)',
+ 'groups:name' => 'Ime grupe',
+ 'groups:username' => 'Kratko ime grupe (prikazuje se u URL-u, samo alfanumericki karakteri)',
+ 'groups:description' => 'Opis',
+ 'groups:briefdescription' => 'Kratak opis',
+ 'groups:interests' => 'Tagovi',
+ 'groups:website' => 'Websajt',
+ 'groups:members' => 'Clanovi grupe',
+ 'groups:membership' => 'Dozvole clanova grupe',
+ 'groups:access' => 'Dozvole pristupa',
+ 'groups:owner' => 'Vlasnik',
+ 'groups:widget:num_display' => 'Broj grupa za prikaz',
+ 'groups:widget:membership' => 'Clanstvo grupe',
+ 'groups:widgets:description' => 'Prikazi grupe u kojima si clan na svoj profil',
+ 'groups:noaccess' => 'Nema pristupa grupi',
+ 'groups:cantedit' => 'Ne mozes urediti ovu grupu',
+ 'groups:saved' => 'Grupa snimljena',
+ 'groups:featured' => 'Predstavljene grupe',
+ 'groups:makeunfeatured' => 'Ukloni iz prikaza',
+ 'groups:makefeatured' => 'Napravi prikazanom',
+ 'groups:featuredon' => 'Napravio si ovu grupu prikazanom',
+ 'groups:joinrequest' => 'Zahtevaj clanstvo',
+ 'groups:join' => 'Pridruzi se grupi',
+ 'groups:leave' => 'Napusti grupu',
+ 'groups:invite' => 'Pozovi prijatelje',
+ 'groups:inviteto' => 'Pozovi prijatelje u \'%s\'',
+ 'groups:nofriends' => 'Nemas vise prijatelja koji nisu pozvani u ovu grupu.',
+ 'groups:viagroups' => 'preko grupa',
+ 'groups:group' => 'Grupa',
+ 'groups:notfound' => 'Grupa nije pronadjena',
+ 'groups:notfound:details' => 'Trazena grupa ili ne postoji ili joj nemas pristup',
+ 'groups:requests:none' => 'Trenutno nema izvanrednih zahteva za clanstvo.',
+ 'item:object:groupforumtopic' => 'Teme za diskusiju',
+ 'groupforumtopic:new' => 'Novi post za diskusiju',
+ 'groups:count' => 'kreirane grupe',
+ 'groups:open' => 'otvorena grupa',
+ 'groups:closed' => 'zatvorena grupa',
+ 'groups:member' => 'clanovi',
+ 'groups:searchtag' => 'Pretrazi grupe po tagovima',
+ 'groups:access:private' => 'Zatvoreno - Korisnici moraju biti pozvani',
+ 'groups:access:public' => 'Otvoreno - Bilo koji korisnik se moze uclaniti',
+ 'groups:closedgroup' => 'Ova grupa ima zatvoreno clanstvo. Da bi zahtevao da budes dodat, klikni na link "zatrazi clanstvo"',
+ 'groups:visibility' => 'Ko moze videti ovu grupu?',
+ 'groups:enableforum' => 'Omoguci diskusije u grupi',
+ 'groups:yes' => 'da',
+ 'groups:no' => 'ne',
+ 'groups:lastupdated' => 'Poslednja promena %s by %s',
+ 'group:replies' => 'Odgovori',
+ 'groups:forum' => 'DIskusije grupe',
+ 'groups:addtopic' => 'Dodaj temu',
+ 'groups:forumlatest' => 'Poslednja diskusija',
+ 'groups:latestdiscussion' => 'Poslednja diskusija',
+ 'groups:newest' => 'Najnovije',
+ 'groups:popular' => 'Popularno',
+ 'groupspost:success' => 'Tvoj komentar je uspesno postovan',
+ 'groups:alldiscussion' => 'Poslednja diskusija',
+ 'groups:edittopic' => 'Uredi temu',
+ 'groups:topicmessage' => 'Poruka na temu',
+ 'groups:topicstatus' => 'Status teme',
+ 'groups:reply' => 'Postavi komentar',
+ 'groups:topic' => 'Tema',
+ 'groups:posts' => 'Postovi',
+ 'groups:lastperson' => 'Poslednja osoba',
+ 'groups:when' => 'Kada',
+ 'grouptopic:notcreated' => 'Nijedna tema nije kreirana.',
+ 'groups:topicopen' => 'Otvoren',
+ 'groups:topicclosed' => 'Zatvoren',
+ 'groups:topicresolved' => 'Resen',
+ 'grouptopic:created' => 'Tvoja tema je kreirana.',
+ 'groupstopic:deleted' => 'Tema obrisana',
+ 'groups:topicsticky' => 'Lepljiv',
+ 'groups:topicisclosed' => 'Tema je zatvorena.',
+ 'groups:topiccloseddesc' => 'Ova tema je sada zatvorena i ne prihvata nove komentare.',
+ 'grouptopic:error' => 'Tvoja tema grupe ne moze biti kreirana. Pokusa ponovo ili kontaktiraj administratora.',
+ 'groups:forumpost:edited' => 'Uspesno si uredio post foruma.',
+ 'groups:forumpost:error' => 'Nastao je problem u uredjivanju posta foruma.',
+ 'groups:privategroup' => 'Ova grupa je privatna i zahteva clanstvo.',
+ 'groups:notitle' => 'Grupa mora imati naslov',
+ 'groups:cantjoin' => 'Nije moguce pristupiti grupi',
+ 'groups:cantleave' => 'Nije moguce napustiti grupu',
+ 'groups:addedtogroup' => 'Uspesno dodat korisniku grupu',
+ 'groups:joinrequestnotmade' => 'Zahtev za clanstvo nije moguce ostvariti',
+ 'groups:joinrequestmade' => 'Zahtev za pristup grupi je uspesno ostvaren',
+ 'groups:joined' => 'Uspesno pridruzivanje grupi!',
+ 'groups:left' => 'Uspesno napustanje grupe',
+ 'groups:notowner' => 'Izvini, ali ti nisi vlasnik ove grupe',
+ 'groups:alreadymember' => 'Ti si vec clan ove grupe!',
+ 'groups:userinvited' => 'Korisnik je pozvan.',
+ 'groups:usernotinvited' => 'Korisnika nije moguce pozvati.',
+ 'groups:useralreadyinvited' => 'Korisnik je vec bio pozvan',
+ 'groups:updated' => 'Poslednji komentar',
+ 'groups:invite:subject' => '%s pozvan si da se pridruzis %!',
+ 'groups:started' => 'Zapoceo',
+ 'groups:joinrequest:remove:check' => 'Da li si siguran da zelis da uklonis ovaj zahtev za pristup?',
+ 'groups:invite:body' => 'Zdravo %s,
+
+Pozvan si da se pridruzis grupi \'%s\', klikni ispod da potvrdis:
+
+%s',
+ 'groups:welcome:subject' => 'Dobrodosli u grupu %s!',
+ 'groups:welcome:body' => 'Zdravo %s!
+
+Sada si clan grupe \'%s\'! Klikni ispod kako bi poceo sa postovanjem!
+
+%s',
+ 'groups:request:subject' => '%s je zatrazio pristup %s',
+ 'groups:request:body' => 'Zdravo %s,
+
+%s je zatrazio da pristupi grupi \'%s\', klikni ispod da pregledas profil:
+
+%s
+
+ili klikni ispod da potvrdis zahtev:
+
+%s',
+ 'groups:nowidgets' => 'Nije definisan ni jedan widget za ovu grupu.',
+ 'groups:widgets:members:title' => 'Clanovi grupe',
+ 'groups:widgets:members:description' => 'Prikazi clanove grupe.',
+ 'groups:widgets:members:label:displaynum' => 'Prikazi clanove grupe.',
+ 'groups:widgets:members:label:pleaseedit' => 'Molim podesite widget.',
+ 'groups:widgets:entities:title' => 'Objekti u grupi',
+ 'groups:widgets:entities:description' => 'Prikazi objekte snimljene u ovoj grupi',
+ 'groups:widgets:entities:label:displaynum' => 'Prikazi objekte grupe.',
+ 'groups:widgets:entities:label:pleaseedit' => 'Molimo podesite widget.',
+ 'groups:forumtopic:edited' => 'Tema foruma uspesno uredjena.',
+ 'groups:allowhiddengroups' => 'Da li zelis da omogucis privatne (nevidljive) grupe?',
+ 'group:deleted' => 'Grupa i sadrzaj obrisani',
+ 'group:notdeleted' => 'Grupu nije moguce obrisati',
+ 'grouppost:deleted' => 'Postovanja u grupi uspesno obrisana',
+ 'grouppost:notdeleted' => 'Postovanja u grupi nije moguce obrisati',
+ 'groupstopic:notdeleted' => 'Tema nije obrisana',
+ 'grouptopic:blank' => 'Nema tema',
+ 'groups:deletewarning' => 'Da li si siguran da zelis da obrises ovu grupu? Nema povratka!',
+ 'groups:joinrequestkilled' => 'Zahtev za pristup obrisan',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/sr/sr.messageboard.php b/mod/languages/languages/sr/sr.messageboard.php
new file mode 100644
index 000000000..e9c72dbe1
--- /dev/null
+++ b/mod/languages/languages/sr/sr.messageboard.php
@@ -0,0 +1,38 @@
+<?php
+$sr = array (
+ 'messageboard:board' => 'Tabla za poruke',
+ 'messageboard:messageboard' => 'tabla za poruke',
+ 'messageboard:viewall' => 'Prikazi sve',
+ 'messageboard:postit' => 'Postuj',
+ 'messageboard:history' => 'Istorija',
+ 'messageboard:none' => 'Nema jos nicega na tabli',
+ 'messageboard:num_display' => 'Broj poruka za prikaz',
+ 'messageboard:desc' => 'Ovo je tabla za poruke, koju mozes postaviti na profil gde drugi korisnici mogu da ostavljaju komentare',
+ 'messageboard:user' => '% tabla sa porukama',
+ 'messageboard:replyon' => 'odgovori',
+ 'messageboard:posted' => 'Uspesno si postovao na tablu za poruke.',
+ 'messageboard:deleted' => 'Uspesno obrisana poruka.',
+ 'messageboard:email:subject' => 'Imas novu poruku na tabli za poruke!',
+ 'messageboard:email:body' => 'Imas novu poruku na tabli za poruke od korisnika %s. Koja kaze:
+
+%s
+
+Da bi prikazao poruku, klikni ovde:
+
+%s
+
+Da bi prikazao profil korisnika %s, klikni ovde:
+
+%s
+
+Ne mozes odgovarati na ovaj mail.',
+ 'messageboard:blank' => 'Izvini; ali moras uneti nesto u polje za poruku, pre nego sto je mozes snimiti.',
+ 'messageboard:notfound' => 'Izvini; nismo u mogucnosti da pronadjemo navedenu stavku.',
+ 'messageboard:notdeleted' => 'Izvini; ne mozemo obristi ovu poruku.',
+ 'messageboard:somethingwentwrong' => 'Nesto je poslo naopako prilikom snimanja poruke, proveri da li si stvarno napisao poruku.
+',
+ 'messageboard:failure' => 'Nastala je neocekivana greska prilikom dodavanja tvoje poruke. Pokusaj ponovo.',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/sr/sr.messages.php b/mod/languages/languages/sr/sr.messages.php
new file mode 100644
index 000000000..919bcf65e
--- /dev/null
+++ b/mod/languages/languages/sr/sr.messages.php
@@ -0,0 +1,55 @@
+<?php
+$sr = array (
+ 'messages' => 'Poruke',
+ 'messages:back' => 'vrati se u poruke',
+ 'messages:user' => 'Tvoj inbox',
+ 'messages:posttitle' => '%s poruka: %s',
+ 'messages:inbox' => 'Inbox',
+ 'messages:send' => 'Posalji poruku',
+ 'messages:sent' => 'Poslate poruke',
+ 'messages:message' => 'Poruka',
+ 'messages:title' => 'Naslov',
+ 'messages:to' => 'Za',
+ 'messages:from' => 'Od',
+ 'messages:fly' => 'Posalji',
+ 'messages:replying' => 'Odgovor poruke na',
+ 'messages:sendmessage' => 'Posalji poruku',
+ 'messages:compose' => 'Napisi poruku',
+ 'messages:sentmessages' => 'Poslate poruke',
+ 'messages:recent' => 'Skorasnje poruke',
+ 'messages:original' => 'Originalna poruka',
+ 'messages:yours' => 'Tvoja poruka',
+ 'messages:answer' => 'Ogovori',
+ 'messages:toggle' => 'Promeni sve',
+ 'messages:markread' => 'Obelezi kao procitano',
+ 'messages:new' => 'Nova poruka',
+ 'notification:method:site' => 'Sajt',
+ 'messages:error' => 'Nastao je problem snimajuci tvoju poruku. Pokusaj ponovo.',
+ 'item:object:messages' => 'Poruke',
+ 'messages:posted' => 'Tvoja poruka je uspesno poslata.',
+ 'messages:email:subject' => 'Ceka te nova poruka!',
+ 'messages:email:body' => 'Ceka te nova poruka od %s. Koja kaze:
+
+
+%s
+
+Da bi video poruku klikni ovde:
+
+%s
+
+Da bi poslao poruku %s, klikni ovde:
+
+%s
+
+Ne mozes odgovoriti na ovaj mail.',
+ 'messages:blank' => 'Izvinil ali moras nesto prvo uneti u sadrzaj poruke da bi mogli da je snimimo.',
+ 'messages:notfound' => 'Izvini; ne mozemo pronaci navedenu poruku.',
+ 'messages:notdeleted' => 'Izvini; ne mozemo obrisati ovu poruku.',
+ 'messages:nopermission' => 'Nema permisije da izmenis tu poruku.',
+ 'messages:nomessages' => 'Nema poruka za prikaz.',
+ 'messages:user:nonexist' => 'Ne mozemo pronaci primaoca u bazi korisnika.',
+ 'messages:user:blank' => 'Nisi izabrao nikoga da mu posaljes ovu poruku.',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/sr/sr.pages.php b/mod/languages/languages/sr/sr.pages.php
new file mode 100644
index 000000000..1d7733731
--- /dev/null
+++ b/mod/languages/languages/sr/sr.pages.php
@@ -0,0 +1,7 @@
+<?php
+$sr = array (
+ 'groups:enablepages' => 'Omoguci stranice grupe',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/sr/sr.profile.php b/mod/languages/languages/sr/sr.profile.php
new file mode 100644
index 000000000..cd85e5c1f
--- /dev/null
+++ b/mod/languages/languages/sr/sr.profile.php
@@ -0,0 +1,8 @@
+<?php
+$sr = array (
+ 'profile' => 'Profil',
+ 'profile:notfound' => 'Sorry; nismo pronasli trazeni profil.',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/sr/sr.reportedcontent.php b/mod/languages/languages/sr/sr.reportedcontent.php
new file mode 100644
index 000000000..f6416d018
--- /dev/null
+++ b/mod/languages/languages/sr/sr.reportedcontent.php
@@ -0,0 +1,30 @@
+<?php
+$sr = array (
+ 'item:object:reported_content' => 'Prijavljena stavka',
+ 'reportedcontent' => 'Prijavljen sadrzaj',
+ 'reportedcontent:this' => 'Prijavi ovo',
+ 'reportedcontent:none' => 'Nema prijavljenog sadrzaja',
+ 'reportedcontent:report' => 'Prijavi ovo ',
+ 'reportedcontent:title' => 'Naziv strane',
+ 'reportedcontent:deleted' => 'Prijavljeni sadrzaj je obrisan',
+ 'reportedcontent:notdeleted' => 'Nismo u mogucnosti da obrisemo tu prijavu',
+ 'reportedcontent:delete' => 'Obrisi je',
+ 'reportedcontent:areyousure' => 'Da li si siguran da zelis da obrises?',
+ 'reportedcontent:archive' => 'Arhiviraj je',
+ 'reportedcontent:archived' => 'Prijava je arhivirana',
+ 'reportedcontent:visit' => 'Poseti prijavljenu stavku',
+ 'reportedcontent:by' => 'Prijavljeno od strane ',
+ 'reportedcontent:objecttitle' => 'Naziv objekta',
+ 'reportedcontent:objecturl' => 'Url objekta',
+ 'reportedcontent:reason' => 'Razlog za prijavu',
+ 'reportedcontent:description' => 'Zasto prijavljujes ovo?',
+ 'reportedcontent:address' => 'Lokacija stavke',
+ 'reportedcontent:success' => 'Tvoja prijava je poslata sajt adminu',
+ 'reportedcontent:failing' => 'Tvoju prijavu nije moguce poslati',
+ 'reportedcontent:moreinfo' => 'Vise informacija',
+ 'reportedcontent:failed' => 'Izvini, pokusaj da prijavis sadrazaj nije uspeo.',
+ 'reportedcontent:notarchived' => 'Nismo bili u mogucnosti da arhiviramo prijavu',
+);
+
+add_translation("sr", $sr);
+
diff --git a/mod/languages/languages/th/th.core.php b/mod/languages/languages/th/th.core.php
new file mode 100644
index 000000000..e9c56f3d4
--- /dev/null
+++ b/mod/languages/languages/th/th.core.php
@@ -0,0 +1,651 @@
+<?php
+$th = array (
+ 'item:site' => 'ไซต์',
+ 'login' => 'เข้าสู่ระบบ',
+ 'loginok' => 'คุณได้เข้าสู่ระบบà¹à¸¥à¹‰à¸§',
+ 'loginerror' => 'เราไม่สามารถเข้าสู่ระบบซึ่งอาจเป็นเพราะคุณยังไม่ได้ตรวจสอบบัà¸à¸Šà¸µà¸‚องคุณ หรือรายละเอียดของคุณไม่ถูà¸à¸•à¹‰à¸­à¸‡. ตรวจสอบให้à¹à¸™à¹ˆà¹ƒà¸ˆà¸§à¹ˆà¸²à¸£à¸²à¸¢à¸¥à¸°à¹€à¸­à¸µà¸¢à¸”ของคุณถูà¸à¸•à¹‰à¸­à¸‡à¹‚ปรดลองอีà¸à¸„รั้ง',
+ 'logout' => 'ออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸š',
+ 'logoutok' => 'คุณได้ออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸š',
+ 'logouterror' => 'คุณไม่สามารถออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸š โปรดลองอีà¸à¸„รั้ง',
+ 'loggedinrequired' => 'You must be logged in to view that page.',
+ 'adminrequired' => 'You must be an administrator to view that page.',
+ 'exception:title' => 'ยินดีต้อนรับ',
+ 'actionundefined' => 'à¸à¸²à¸£à¸£à¹‰à¸­à¸‡à¸‚อ (%s) ไม่มีในระบบ',
+ 'actionloggedout' => 'ขออภัยคุณไม่สามารถดำเนินà¸à¸²à¸£à¸à¸£à¸°à¸—ำนี้ในขณะที่ออà¸à¸ˆà¸²à¸à¸£à¸°à¸šà¸š',
+ 'SecurityException:Codeblock' => 'ถูà¸à¸›à¸à¸´à¹€à¸ªà¸˜à¸à¸²à¸£à¹€à¸‚้าถึง',
+ 'DatabaseException:WrongCredentials' => 'Elgg ไม่สามารถเชื่อมต่อà¸à¸±à¸šà¸à¸²à¸™à¸‚้อมูลà¸à¸²à¸£à¹ƒà¸Šà¹‰à¹ƒà¸«à¹‰à¹ƒà¸šà¸£à¸±à¸šà¸£à¸­à¸‡ %s@%s (pw: %s).',
+ 'DatabaseException:NoConnect' => 'Elgg ไม่สามารถใช้à¸à¸²à¸™à¸‚้อมูล \'%s\', โปรดตรวจสอบว่าข้อมูลจะถูà¸à¸ªà¸£à¹‰à¸²à¸‡à¸‚ึ้นà¹à¸¥à¸°à¸„ุณสามารถเข้าถึงมัน',
+ 'SecurityException:FunctionDenied' => 'à¸à¸²à¸£à¹€à¸‚้าถึง \'%s\' ถูà¸à¸›à¸à¸´à¹€à¸ªà¸˜',
+ 'DatabaseException:DBSetupIssues' => 'จำนวนปัà¸à¸«à¸²: ',
+ 'DatabaseException:ScriptNotFound' => 'Elgg ไม่พบà¸à¸²à¸™à¸‚้อมูลสคริปต์ที่ %s.',
+ 'IOException:FailedToLoadGUID' => 'ไม่สามารถโหลด %s จาภGUID:%d',
+ 'InvalidParameterException:NonElggObject' => 'Passing a non-ElggObject to an ElggObject constructor!',
+ 'InvalidParameterException:UnrecognisedValue' => 'Unrecognised value passed to constuctor.',
+ 'InvalidClassException:NotValidElggStar' => 'GUID:%d ไม่ใช่ %s',
+ 'PluginException:MisconfiguredPlugin' => '%s ไม่สามารถตั้งค่าปลั๊à¸à¸­à¸´à¸™à¹„ด้เนื่องจาà¸à¸«à¸²à¹„ฟล์ไม่เจอ',
+ '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' => 'ไม่สามารถบันทึภ%s',
+ 'InvalidParameterException:GUIDNotForExport' => 'GUID ยังไม่ได้รับà¸à¸²à¸£à¸ªà¹ˆà¸‡à¸­à¸­à¸à¸—ี่ระบุในขั้นตอนนี้ไม่ควรเà¸à¸´à¸”ขึ้น',
+ 'InvalidParameterException:NonArrayReturnValue' => 'Entity serialisation function passed a non-array returnvalue parameter',
+ 'ConfigurationException:NoCachePath' => 'ที่เà¸à¹‡à¸šà¹à¸„ชไม่ได้ตั้งไว้!',
+ 'IOException:NotDirectory' => '%s ไม่ใช่ไดเรคทอรี่.',
+ 'IOException:BaseEntitySaveFailed' => 'ไม่สามารถบันทึà¸à¸à¸²à¸£à¸—ำงานได้!',
+ 'InvalidParameterException:UnexpectedODDClass' => 'import() passed an unexpected ODD class',
+ 'InvalidParameterException:EntityTypeNotSet' => 'Entity type must be set.',
+ 'ClassException:ClassnameNotClass' => '%s ไม่ใช่ %s.',
+ 'ClassNotFoundException:MissingClass' => 'คลาส \'%s\' ไม่พบ, ปลั๊à¸à¸­à¸´à¸™à¸«à¸²à¸¢à¹„ป?',
+ 'InstallationException:TypeNotSupported' => 'ประเภท %s ไม่ได้รับà¸à¸²à¸£à¸ªà¸™à¸±à¸šà¸ªà¸™à¸¸à¸™. นี้à¹à¸ªà¸”งข้อผิดพลาดในà¸à¸²à¸£à¸•à¸´à¸”ตั้งอาจเà¸à¸´à¸”จาà¸à¸à¸²à¸£à¸›à¸£à¸±à¸šà¸£à¸¸à¹ˆà¸™à¸—ี่ไม่สมบูรณ์.',
+ 'ImportException:ImportFailed' => 'ไม่สามารถนำเข้าองค์ประà¸à¸­à¸š %d',
+ 'ImportException:ProblemSaving' => 'เà¸à¸´à¸”ปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¸šà¸±à¸™à¸—ึภ%s',
+ 'ImportException:NoGUID' => 'สร้างใหม่ Entity à¹à¸•à¹ˆà¹„ม่มี GUID, สิ่งนี้ไม่ควรเà¸à¸´à¸”ขึ้น.',
+ 'ImportException:GUIDNotFound' => 'Entity \'%d\' ไม่พบ.',
+ 'ImportException:ProblemUpdatingMeta' => 'มีปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¸›à¸£à¸±à¸šà¸›à¸£à¸¸à¸‡ \'%s\' บน \'%d\'',
+ 'ExportException:NoSuchEntity' => 'ไม่มี entity GUID:%d',
+ 'ImportException:NoODDElements' => 'ไม่ OpenDD องค์ประà¸à¸­à¸šà¸—ี่พบในà¸à¸²à¸£à¸™à¸³à¹€à¸‚้าข้อมูลà¸à¸²à¸£à¸™à¸³à¹€à¸‚้าล้มเหลว',
+ 'ImportException:NotAllImported' => 'องค์ประà¸à¸­à¸šà¸—ั้งหมดไม่ได้นำเข้า.',
+ 'InvalidParameterException:UnrecognisedFileMode' => 'Unrecognised file mode \'%s\'',
+ 'InvalidParameterException:MissingOwner' => 'ไฟล์ทั้งหมดจะต้องมีเจ้าของ!',
+ 'IOException:CouldNotMake' => 'ไม่สามารถสร้าง %s',
+ 'IOException:MissingFileName' => 'คุณต้องระบุชื่อà¸à¹ˆà¸­à¸™à¹€à¸›à¸´à¸”ไฟล์.',
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => 'ไม่พบหรือคลาสไม่ได้บันทึà¸à¸à¸±à¸šà¹„ฟล์!',
+ 'NotificationException:NoNotificationMethod' => 'ไม่มีà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡',
+ 'NotificationException:NoHandlerFound' => 'ไม่มีà¸à¸²à¸£à¸”ำเนินà¸à¸²à¸£à¸ªà¸³à¸«à¸£à¸±à¸š\'%s\' หรือไม่ได้ เรียà¸à¹ƒà¸Šà¹‰',
+ 'NotificationException:ErrorNotifyingGuid' => 'มีข้อผิดพลาดในขณะที่à¹à¸ˆà¹‰à¸‡à¹ƒà¸«à¹‰à¸—ราบ %d',
+ 'NotificationException:NoEmailAddress' => 'ไม่ได้รับที่อยู่อีเมลสำหรับ GUID:%d',
+ 'NotificationException:MissingParameter' => 'พารามิเตอร์ไม่ครบ, \'%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.',
+ '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.',
+ '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!',
+ 'memcache:notinstalled' => 'PHP memcache module not installed, you must install php5-memcache',
+ 'memcache:noservers' => 'No memcache servers defined, please populate the $CONFIG->memcache_servers variable',
+ 'memcache:versiontoolow' => 'Memcache needs at least version %s to run, you are running %s',
+ 'memcache:noaddserver' => 'Multiple server support disabled, you may need to upgrade your PECL memcache library',
+ '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!',
+ 'system.api.list' => 'List all available API calls on the system.',
+ 'auth.gettoken' => 'This API call lets a user log in, returning an authentication token which can be used in leu of a username and password for authenticating further calls.',
+ 'name' => 'ชื่อที่ใช้à¹à¸ªà¸”ง(ทุà¸à¸„นจะเห็น)',
+ 'email' => 'อีเมล์',
+ 'username' => 'ชื่อล๊อคอิน(ภาษาอังà¸à¸¤à¸©à¹€à¸—่านั้น)',
+ 'password' => 'รหัสผ่าน',
+ 'passwordagain' => 'รหัสผ่านอีà¸à¸„รั้ง (เพื่อยืนยัน)',
+ 'admin_option' => 'ให้สามาชิà¸à¹€à¸›à¹‡à¸™à¸œà¸¹à¹‰à¸”ูà¹à¸¥?',
+ 'PRIVATE' => 'ส่วนตัว',
+ 'LOGGED_IN' => 'สมาชิà¸à¹ƒà¸™à¹€à¸§à¹‡à¸š',
+ 'PUBLIC' => 'ทั่วไป',
+ 'access:friends:label' => 'เฉพาะเพื่อนฉัน',
+ 'access' => 'à¸à¸²à¸£à¹€à¸‚้าถึง',
+ 'dashboard' => 'à¸à¸£à¸°à¸”านข้อมูล',
+ 'dashboard:nowidgets' => 'à¸à¸£à¸°à¸”านข้อมูลของคุณเป็นที่สามารถมาดูความเคลือนไหวของในเว็บไซต์. คลิà¸à¸—ี่ \'à¹à¸à¹‰à¹„ขหน้านี้\' เพื่อเพิ่มเครื่องมือเพื่อติดตามเนื้อหาของคุณà¹à¸¥à¸°à¸ à¸²à¸¢à¹ƒà¸™à¸£à¸°à¸šà¸š',
+ 'widgets:add' => 'เพิ่มวิดเà¸à¹‡à¸•à¹„ปยังหน้านี้',
+ 'widgets:add:description' => 'เลือà¸à¸§à¸´à¸”เà¸à¹‡à¸•à¸—ี่คุณต้องà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¹„ปยังหน้าเว็บของคุณโดยà¸à¸²à¸£à¸¥à¸²à¸à¹„ด้จาà¸à¸„ลังที่ <b>คลังวิดเà¸à¹‡à¸•</b>จาà¸à¸”้านขวามือ โดยลาà¸à¹„ปวางในช่องสามช่องที่เห็น โดยสามารจัดได้ตามต้องà¸à¸²à¸£ <b>หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸¥à¸š</b>ให้ลาà¸à¸§à¸´à¸”เà¸à¹‡à¸•à¸à¸¥à¸±à¸šà¹„ปที่ <b>คลังวิดเà¸à¹‡à¸•</b>.',
+ 'widgets:position:fixed' => '(คงตำà¹à¸«à¸™à¹ˆà¸‡à¹ƒà¸™à¹€à¸žà¸ˆ)',
+ 'widgets' => 'วิดเà¸à¹‡à¸•',
+ 'widget' => 'วิดเà¸à¹‡à¸•',
+ 'item:object:widget' => 'วิดเà¸à¹‡à¸•',
+ 'widgets:save:success' => 'วิดเà¸à¹‡à¸•à¸‚องคุณถูà¸à¸šà¸±à¸™à¸—ึà¸à¹€à¸£à¸µà¸¢à¸šà¸£à¹‰à¸­à¸¢à¹à¸¥à¹‰à¸§',
+ 'widgets:save:failure' => 'เà¸à¸´à¸”ปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸§à¸´à¸”เà¸à¹‡à¸•à¸‚องคุณ โปรดลองอีà¸à¸„รั้ง',
+ 'group' => 'à¸à¸¥à¸¸à¹ˆà¸¡',
+ 'item:group' => 'à¸à¸¥à¸¸à¹ˆà¸¡',
+ 'user' => 'สมาชิà¸',
+ 'item:user' => 'สมาชิà¸',
+ 'friends' => 'เพื่อน',
+ 'friends:yours' => 'เพื่อนของคุณ',
+ 'friends:owned' => '%s\'s เพื่อน',
+ 'friend:add' => 'เพิ่มเพื่อน',
+ 'friend:remove' => 'ลบเพื่อน',
+ 'friends:add:successful' => 'เพิ่ม %s เป็นเพื่อนà¹à¸¥à¹‰à¸§',
+ 'friends:add:failure' => 'ไม่สามารถเพิ่ม %s เป็นเพื่อนได้ โปรดลองอีà¸à¸„รั้ง',
+ 'friends:remove:successful' => 'ลบ %s ออà¸à¸ˆà¸²à¸à¸à¸²à¸£à¹€à¸›à¹‡à¸™à¹€à¸žà¸·à¹ˆà¸­à¸™à¹à¸¥à¹‰à¸§',
+ 'friends:remove:failure' => 'ไม่สามารถลบ %s ออà¸à¸ˆà¸²à¸à¸à¸²à¸£à¹€à¸›à¹‡à¸™à¹€à¸žà¸·à¹ˆà¸­à¸™à¹„ด้ โปรดลองอีà¸à¸„รั้ง',
+ 'friends:none' => 'สมาชิà¸à¸œà¸¹à¹‰à¸™à¸µà¹‰à¸¢à¸±à¸‡à¹„ม่มีเพื่อน',
+ 'friends:none:you' => 'คุณยังไม่ได้เพิ่มใครเป็นเพื่อน! ค้นหาความสนใจของคุณเพื่อเริ่มต้นà¸à¸²à¸£à¸„้นหาเพื่อนต่อไป',
+ 'friends:none:found' => 'ไม่พบเพื่อนเลย',
+ 'friends:of:none' => 'ไม่มีใครได้เพิ่มผู้ใช้รายนี้เป็นเพื่อน.',
+ 'friends:of:none:you' => 'ไม่มีใครได้เพิ่มคุณเป็นเพื่อน เริ่มต้นà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸™à¸·à¹‰à¸­à¸«à¸²à¹à¸¥à¸°à¸à¸²à¸£à¸à¸£à¸­à¸à¸‚้อมูลลงในโปรไฟล์ของคุณให้ผู้อื่นได้เห็นข้อมูลคุณ!',
+ 'friends:of:owned' => 'มีคนเพิ่ม %s เป็นเพื่อน',
+ 'friends:num_display' => 'จำนวนเพื่อนที่จะà¹à¸ªà¸”ง',
+ 'friends:icon_size' => 'ขนาดของไอคอน',
+ 'friends:tiny' => 'เล็à¸à¸ªà¸¸à¸”ๆ',
+ 'friends:small' => 'เล็à¸',
+ 'friends:of' => 'เป็นเพื่อนของ',
+ 'friends:collections' => 'ประเภทของเพื่อน',
+ 'friends:collections:add' => 'เพิ่มประเภทของเพื่อน',
+ 'friends:addfriends' => 'เพิ่มเพื่อน',
+ 'friends:collectionname' => 'ชื่อประเภท',
+ 'friends:collectionfriends' => 'เพื่อนในประเภท',
+ 'friends:collectionedit' => 'à¹à¸à¹‰à¹„ขประเภทนี้',
+ 'friends:nocollections' => 'คุณยังไม่มีà¸à¸²à¸£à¸£à¸§à¸šà¸£à¸§à¸¡à¹€à¸žà¸·à¹ˆà¸­à¸™à¹€à¸›à¹‡à¸™à¸›à¸£à¸°à¹€à¸ à¸—',
+ 'friends:collectiondeleted' => 'ลบประเภทà¹à¸¥à¹‰à¸§',
+ 'friends:collectiondeletefailed' => 'เราไม่สามารถลบประเภท. หรือคุณไม่ได้รับอนุà¸à¸²à¸•à¸«à¸£à¸·à¸­à¸¡à¸µà¸›à¸±à¸à¸«à¸²à¸­à¸·à¹ˆà¸™à¹†à¸—ี่เà¸à¸´à¸”ขึ้น.',
+ 'friends:collectionadded' => 'สร้างประเภทของคุณà¹à¸¥à¹‰à¸§',
+ 'friends:nocollectionname' => 'คุณต้องใส่ชื่อของประเภทà¸à¹ˆà¸­à¸™.',
+ 'friends:collections:members' => 'ประเภทสมาชิà¸',
+ 'friends:collections:edit' => 'à¹à¸à¹‰à¹„ขประเภท',
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'feed:rss' => 'สมัครรับฟีด',
+ 'link:view' => 'ดูลิ้งค์',
+ 'river' => 'River',
+ 'river:noaccess' => 'คุณไม่มีสิทธิเข้าดูหน้านี้.',
+ 'river:posted:generic' => '%s โพส',
+ 'riveritem:single:user' => 'คน',
+ 'riveritem:plural:user' => 'บางคน',
+ 'plugins:settings:save:ok' => 'à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าสำหรับปลั๊à¸à¸­à¸´à¸™ %s ถูà¸à¸šà¸±à¸™à¸—ึà¸à¹€à¸£à¸µà¸¢à¸šà¸£à¹‰à¸­à¸¢à¹à¸¥à¹‰à¸§',
+ 'plugins:settings:save:fail' => 'เà¸à¸´à¸”ปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าสำหรับปลั๊à¸à¸­à¸´à¸™ %s ',
+ 'plugins:usersettings:save:ok' => 'à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าของผู้ใช้สำหรับปลั๊à¸à¸­à¸´à¸™ %s ถูà¸à¸šà¸±à¸™à¸—ึà¸à¹€à¸£à¸µà¸¢à¸šà¸£à¹‰à¸­à¸¢à¹à¸¥à¹‰à¸§',
+ 'plugins:usersettings:save:fail' => 'เà¸à¸´à¸”ปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าผู้ใช้สำหรับปลั๊à¸à¸­à¸´à¸™ %s ',
+ 'admin:plugins:label:version' => 'รุ่น',
+ 'item:object:plugin' => 'à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าคอนฟิภปลั๊à¸à¸­à¸´à¸™',
+ 'notifications:usersettings' => 'à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าระบบà¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™',
+ 'notifications:methods' => 'à¸à¸£à¸¸à¸“าระบุวิธีà¸à¸²à¸£à¸—ี่คุณต้องà¸à¸²à¸£à¸­à¸™à¸¸à¸à¸²à¸•',
+ 'notifications:usersettings:save:ok' => 'ตั้งค่าà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸–ูà¸à¸šà¸±à¸™à¸—ึà¸à¹€à¸£à¸µà¸¢à¸šà¸£à¹‰à¸­à¸¢à¹à¸¥à¹‰à¸§',
+ 'notifications:usersettings:save:fail' => 'à¸à¸´à¸”ปัà¸à¸«à¸²à¹ƒà¸™à¸à¸²à¸£à¸šà¸±à¸™à¸—ึà¸à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸‚องท่าน',
+ 'user.notification.get' => 'à¸à¸¥à¸±à¸šà¹„ปตั้งค่าà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¸ªà¸³à¸«à¸£à¸±à¸šà¸ªà¸¡à¸²à¸Šà¸´à¸',
+ 'user.notification.set' => 'ตั้งค่าà¸à¸²à¸£à¹à¸ˆà¹‰à¸‡à¹€à¸•à¸·à¸­à¸™à¸ªà¸³à¸«à¸£à¸±à¸šà¸ªà¸¡à¸²à¸Šà¸´à¸',
+ 'search' => 'ค้นหา',
+ 'searchtitle' => 'ค้นหา: %s',
+ 'users:searchtitle' => 'ค้นหาสมาชิà¸: %s',
+ 'groups:searchtitle' => 'ค้นหาสำหรับà¸à¸¥à¸¸à¹ˆà¸¡: %s',
+ 'advancedsearchtitle' => '%s ผลลัพธ์à¸à¸²à¸£à¸„้น %s',
+ 'notfound' => 'ไม่พบผลลัพธ์',
+ 'next' => 'ต่อไป',
+ 'previous' => 'ย้อนà¸à¸¥à¸±à¸š',
+ 'viewtype:change' => 'เปลี่ยนหารà¹à¸ªà¸”งผล',
+ 'viewtype:list' => 'รายà¸à¸²à¸£',
+ 'viewtype:gallery' => 'à¹à¸à¸¥à¸¥à¸­à¸£à¸µà¹ˆ',
+ 'tag:search:startblurb' => 'รายà¸à¸²à¸£à¸—ี่มีà¹à¸—็à¸à¸—ี่ตรงà¸à¸±à¸™ \'%s\':',
+ 'user:search:startblurb' => 'สมาชิà¸à¸—ี่พบ \'%s\':',
+ 'user:search:finishblurb' => 'ดูเพิ่มเติมคลิà¸',
+ 'group:search:startblurb' => 'à¸à¸¥à¸¸à¹ˆà¸¡à¸—ี่ตรงà¸à¸±à¸š \'%s\':',
+ 'group:search:finishblurb' => 'เพื่อดูข้อมูลเพิ่มเติมคลิà¸à¸—ี่นี่.',
+ 'search:go' => 'ไป',
+ 'userpicker:only_friends' => 'เฉพาะเพื่อน',
+ 'account' => 'บัà¸à¸Šà¸µ',
+ 'settings' => 'ตั้งค่า',
+ 'tools' => 'เครื่องมือ',
+ 'register' => 'สมัครสมาชิà¸',
+ 'registerok' => 'คุณได้ลงทะเบียนสำหรับ %s à¹à¸¥à¹‰à¸§',
+ 'registerbad' => 'à¸à¸²à¸£à¸¥à¸‡à¸—ะเบียนของคุณไม่สำเร็จ ชื่อผู้ใช้อาจมีอยู่à¹à¸¥à¹‰à¸§ รหัสผ่านอาจไม่เหมือนà¸à¸±à¸™à¸«à¸£à¸·à¸­à¸Šà¸·à¹ˆà¸­à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸«à¸£à¸·à¸­à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¸­à¸²à¸ˆà¸ªà¸±à¹‰à¸™à¹€à¸à¸´à¸™à¹„ป.',
+ 'registerdisabled' => 'ลงทะเบียนถูà¸à¸£à¸°à¸‡à¸±à¸šà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹‚ดยผู้ดูà¹à¸¥à¸£à¸°à¸šà¸š',
+ 'registration:notemail' => 'อีเมลไม่ถูà¸à¸•à¹‰à¸­à¸‡',
+ 'registration:userexists' => 'ชื่อล๊อคอินนี้มีคนใช้à¹à¸¥à¹‰à¸§',
+ 'registration:usernametooshort' => 'ชื่อล๊อคอินของคุณต้องมีอย่างน้อย 4 ตัวอัà¸à¸©à¸£',
+ 'registration:passwordtooshort' => 'รหัสผ่านต้องมีอย่างน้อย 6 ตัวอัà¸à¸©à¸£',
+ 'registration:dupeemail' => 'ที่อยู่อีเมลนี้ได้รับà¸à¸²à¸£à¸ˆà¸”ทะเบียนà¹à¸¥à¹‰à¸§',
+ 'registration:invalidchars' => 'ขออภัย ชื่อล๊อคอินของคุณมีอัà¸à¸‚ระไม่ถูà¸à¸•à¹‰à¸­à¸‡.',
+ 'registration:emailnotvalid' => 'ขออภัย ที่อยู่อีเมลที่คุณป้อนไม่ถูà¸à¸•à¹‰à¸­à¸‡',
+ 'registration:passwordnotvalid' => 'ขออภัย รหัสผ่านที่คุณป้อนไม่ถูà¸à¸•à¹‰à¸­à¸‡',
+ 'registration:usernamenotvalid' => 'ขออภัย ชื่อล๊อคอินที่คุณป้อนไม่ถูà¸à¸•à¹‰à¸­à¸‡',
+ 'adduser' => 'เพิ่มสมาชิà¸',
+ 'adduser:ok' => 'คุณได้เพิ่มสมาชิà¸à¹ƒà¸«à¸¡à¹ˆ',
+ 'adduser:bad' => 'สมาชิà¸à¹ƒà¸«à¸¡à¹ˆà¹„ม่สามารถสร้างได้',
+ 'user:set:name' => 'à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าชื่อ',
+ 'user:name:label' => 'ชื่อของคุณ',
+ 'user:name:success' => 'ได้ทำà¸à¸²à¸£à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸Šà¸·à¹ˆà¸­à¸‚องคุณในระบบà¹à¸¥à¹‰à¸§',
+ 'user:name:fail' => 'ไม่สามารถเปลี่ยนชื่อของคุณในระบบได้',
+ 'user:set:password' => 'ตั้งค่ารหัสผ่าน',
+ 'user:password:label' => 'รหัสผ่านใหม่ของคุณ',
+ 'user:password2:label' => 'ใส่รหัสผ่านใหม่ของคุณอีà¸à¸„รั้ง',
+ 'user:password:success' => 'เปลี่ยนรหัสผ่านà¹à¸¥à¹‰à¸§',
+ 'user:password:fail' => 'ไม่สามารถเปลี่ยนรหัสผ่านได้',
+ 'user:password:fail:notsame' => 'รหัสผ่านสองรายà¸à¸²à¸£à¹„ม่เหมือนà¸à¸±à¸™!',
+ 'user:password:fail:tooshort' => 'รหัสผ่านสั้นเà¸à¸´à¸™à¹„ป!',
+ 'user:resetpassword:unknown_user' => 'ไม่รู้จัà¸à¸ªà¸¡à¸²à¸Šà¸´à¸à¸„นนี้',
+ 'user:resetpassword:reset_password_confirm' => 'à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹ƒà¸«à¸¡à¹ˆ à¸à¸£à¸¸à¸“าไปตรวจสอบอีเมลที่คุณสมัครไว้',
+ 'user:set:language' => 'ตั้งค่าภาษา',
+ 'user:language:label' => 'ภาษาที่เลือà¸',
+ 'user:language:success' => 'à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าภาษาของคุณได้รับà¸à¸²à¸£à¸­à¸±à¸›à¹€à¸”ท',
+ 'user:language:fail' => 'à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าภาษาของคุณไม่สามารถบันทึà¸',
+ 'user:username:notfound' => 'ชื่อล๊อคอิน %s ไม่มี',
+ 'user:password:lost' => 'ลืมรหัสผ่าน',
+ 'user:password:resetreq:success' => 'à¸à¸²à¸£à¸‚อรหัสผ่านใหม่สำเร็จ à¹à¸¥à¸°à¸–ูà¸à¸ªà¹ˆà¸‡à¹„ปที่อีเมลของคุณ',
+ 'user:password:resetreq:fail' => 'ไม่สามารถขอรหัสผ่านใหม่ได้',
+ 'user:password:text' => 'เพื่อสร้างรหัสผ่านใหม่ให้ป้อนชื่อล๊อคอินของคุณด้านล่างนี้. เราจะส่งที่อยู่ของหน้าà¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¹„ปให้คุณผ่านทางอีเมล คลิà¸à¸—ี่ลิงค์ในเนื้อหาของข้อความà¹à¸¥à¸°à¸£à¸«à¸±à¸ªà¸œà¹ˆà¸²à¸™à¹ƒà¸«à¸¡à¹ˆà¸ˆà¸°à¸ªà¹ˆà¸‡à¸–ึงคุณ',
+ 'user:persistent' => 'อยู่ในระบบตลอด',
+ 'admin:configuration:success' => 'à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าของคุณถูà¸à¸šà¸±à¸™à¸—ึà¸',
+ 'admin:configuration:fail' => 'à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าของคุณบันทึà¸à¹„ม่ได้',
+ 'admin' => 'ส่วนของผู้ดูà¹à¸¥',
+ 'admin:description' => 'ส่วนของผู้ดูà¹à¸¥à¸ªà¸²à¸¡à¸²à¸£à¸–ควบคุมทุà¸à¹†à¸”้านของระบบ à¸à¸²à¸£à¸ˆà¸±à¸”à¸à¸²à¸£à¸ªà¸¡à¸²à¸Šà¸´à¸ ปลั๊à¸à¸­à¸´à¸™ เลือà¸à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸à¸”้านล่างเพื่อเริ่มต้น',
+ 'admin:site:description' => 'ส่วนผู้ดูà¹à¸¥à¸£à¸°à¸šà¸šà¸™à¸µà¹‰à¸Šà¹ˆà¸§à¸¢à¹ƒà¸«à¹‰à¸„ุณสามารถควบคุมà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าทั่วไปสำหรับเว็บไซต์ของคุณ. เลือà¸à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸à¸”้านล่างเพื่อเริ่มต้น.',
+ 'admin:site:opt:linktext' => 'ตั้งค่าเว็บ...',
+ 'admin:plugins' => 'จัดà¸à¸²à¸£à¸›à¸¥à¸±à¹Šà¸à¸­à¸´à¸™',
+ 'admin:plugins:description' => 'ส่วนผู้ดูà¹à¸¥à¸£à¸°à¸šà¸šà¸™à¸µà¹‰ จะช่วยให้คุณสามารถควบคุมà¹à¸¥à¸°à¸à¸³à¸«à¸™à¸”ค่าเครื่องมือติดตั้งอยู่บนเว็บไซต์ของท่าน.',
+ 'admin:plugins:opt:linktext' => 'จัดà¸à¸²à¸£à¸›à¸¥à¸±à¹Šà¸à¸­à¸´à¸™...',
+ 'admin:plugins:opt:description' => 'ตั้งค่าปลั๊à¸à¸­à¸´à¸™à¸—ี่ติดตั้งอยู่ในเว็บไซต์. ',
+ 'admin:plugins:label:author' => 'ผู้สร้าง',
+ 'admin:plugins:label:copyright' => 'ลิขสิทธิ์',
+ 'admin:plugins:label:licence' => 'ใบอนุà¸à¸²à¸•',
+ 'admin:plugins:label:website' => 'URL',
+ 'admin:plugins:label:moreinfo' => 'ข้อมูลเพิ่มเติม',
+ 'admin:statistics' => 'สถิติ',
+ 'admin:statistics:description' => 'นี่เป็นภาพรวมของสถิติในเว็บไซต์ของคุณ หาà¸à¸—่านต้องà¸à¸²à¸£à¸£à¸²à¸¢à¸¥à¸°à¹€à¸­à¸µà¸¢à¸”เพิ่มเติม ',
+ 'admin:statistics:opt:description' => 'ดูสถิติเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹à¸¥à¸°à¸­à¸­à¸šà¹€à¸ˆà¸à¸•à¹Œà¸šà¸™à¹€à¸§à¹‡à¸šà¹„ซต์ของท่าน',
+ 'admin:statistics:opt:linktext' => 'ดูสถิติ...',
+ 'admin:statistics:label:basic' => 'สถิติพื้นà¸à¸²à¸™à¸‚องเว็บไซต์',
+ 'admin:statistics:label:numentities' => 'à¸à¸¥à¸¸à¹ˆà¸¡à¸‚้อมูล',
+ 'admin:statistics:label:numusers' => 'จำนวนสมาชิà¸',
+ 'admin:statistics:label:numonline' => 'จำนวนสมาชิà¸à¸­à¸­à¸™à¹„ลน์',
+ 'admin:statistics:label:onlineusers' => 'สมาชิà¸à¸­à¸­à¸™à¹„ลน์ตอนนี้',
+ 'admin:statistics:label:version' => 'Elgg รุ่น',
+ 'admin:statistics:label:version:release' => 'รีรีส',
+ 'admin:statistics:label:version:version' => 'รุ่น',
+ 'admin:user:label:search' => 'ค้นหาสมาชิà¸:',
+ 'admin:user:ban:no' => 'ไม่สามารถà¹à¸šà¸™à¸ªà¸¡à¸²à¸Šà¸´à¸à¹„ด้',
+ 'admin:user:ban:yes' => 'สมาชิà¸à¹‚ดนà¹à¸šà¸™',
+ 'admin:user:unban:no' => 'ไม่สามารถถอนà¸à¸²à¸£à¹à¸šà¸™à¸ªà¸¡à¸²à¸Šà¸´à¸à¹„ด้',
+ 'admin:user:unban:yes' => 'สมาชิà¸à¸–ูà¸à¸–อนจาà¸à¸à¸²à¸£à¹à¸šà¸™',
+ 'admin:user:delete:no' => 'ไม่สามารรถลบสมาชิà¸à¹„ด้',
+ 'admin:user:delete:yes' => 'ลบสมาชิà¸',
+ 'admin:user:resetpassword:yes' => 'รีเซ็ตรหัสผ่าน à¹à¸¥à¸°à¹à¸ˆà¹‰à¸‡à¹„ปยังสมาชิà¸',
+ 'admin:user:resetpassword:no' => 'ไม่สามารถรีเซ็ตรหัสผ่าน',
+ 'admin:user:makeadmin:yes' => 'สมาชิà¸à¹€à¸›à¹‡à¸™à¸œà¸¹à¹‰à¸”ูà¹à¸¥',
+ 'admin:user:makeadmin:no' => 'เราไม่สามรถให้สมาชิà¸à¸œà¸¹à¹‰à¸™à¸µà¹‰à¹€à¸›à¹‡à¸™à¸œà¸¹à¹‰à¸”ูà¹à¸¥à¹„ด้',
+ 'admin:user:removeadmin:yes' => 'ผู้ใช้ไม่เป็นผู้ดูà¹à¸¥à¸£à¸°à¸šà¸š',
+ 'admin:user:removeadmin:no' => 'เราไม่สามารถลบสิทธิ์ผู้ดูà¹à¸¥à¸£à¸°à¸šà¸šà¸ˆà¸²à¸à¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¸£à¸²à¸¢à¸™à¸µà¹‰',
+ 'usersettings:description' => 'à¹à¸œà¸‡à¸„วบคุมà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าช่วยให้คุณสามารถควบคุมà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าส่วนตัวทั้งหมดของคุณ',
+ 'usersettings:statistics' => 'สถิติของคุณ',
+ 'usersettings:statistics:opt:description' => 'ดูสถิติเà¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¸œà¸¹à¹‰à¹ƒà¸Šà¹‰à¹à¸¥à¸°à¸­à¸­à¸šà¹€à¸ˆà¸à¸•à¹Œà¸šà¸™à¹€à¸§à¹‡à¸šà¹„ซต์ของท่าน.',
+ 'usersettings:statistics:opt:linktext' => 'สถิติ',
+ 'usersettings:user' => 'ตั้งค่าส่วนตัว',
+ 'usersettings:user:opt:description' => 'ส่วนนี้ช่วยให้คุณสามารถควบคุมà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าสมาชิà¸',
+ 'usersettings:user:opt:linktext' => 'เปลี่ยนà¹à¸›à¸¥à¸‡à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่า',
+ 'usersettings:plugins' => 'เครื่องมือ',
+ 'usersettings:plugins:opt:description' => 'à¸à¸³à¸«à¸™à¸”ค่าà¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าของคุณสำหรับà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¹€à¸„รื่องมือ.',
+ 'usersettings:plugins:opt:linktext' => 'ตั้งค่าเครื่องมือของคุณ',
+ 'usersettings:plugins:description' => 'à¹à¸œà¸‡à¸„วบคุมนี้จะช่วยให้คุณสามารถควบคุมà¹à¸¥à¸°à¸à¸³à¸«à¸™à¸”ค่าส่วนบุคคล à¸à¸²à¸£à¸•à¸±à¹‰à¸‡à¸„่าเครื่องมือที่ติดตั้งโดยผู้ดูà¹à¸¥à¸£à¸°à¸šà¸šà¸‚องคุณ.',
+ 'usersettings:statistics:label:numentities' => 'ข้อมูลà¸à¸²à¸£à¹ƒà¸Šà¹‰à¸‡à¸²à¸™',
+ 'usersettings:statistics:yourdetails' => 'รายละเอียดของคุณ',
+ 'usersettings:statistics:label:name' => 'ชื่อจริง',
+ 'usersettings:statistics:label:email' => 'อีเมล์',
+ 'usersettings:statistics:label:membersince' => 'เป็นสมาชิà¸à¹€à¸¡à¸·à¹ˆà¸­',
+ 'usersettings:statistics:label:lastlogin' => 'เข้าสู่ระบบครั้งสุดท้ายเมื่อ',
+ 'save' => 'บันทึà¸',
+ 'publish' => 'à¹à¸œà¸¢à¹à¸žà¸£à¹ˆ',
+ 'cancel' => 'ยà¸à¹€à¸¥à¸´à¸',
+ 'saving' => 'à¸à¸³à¸¥à¸±à¸‡à¸šà¸±à¸™à¸—ึภ...',
+ 'update' => 'อัปเดต',
+ 'edit' => 'à¹à¸à¹‰à¹„ข',
+ 'delete' => 'ลบ',
+ 'accept' => 'ยอมรับ',
+ 'load' => 'โหลด',
+ 'upload' => 'อัปโหลด',
+ 'ban' => 'à¹à¸šà¸™',
+ 'unban' => 'ไม่à¹à¸šà¸™',
+ 'enable' => 'ทำงาน',
+ 'disable' => 'ไม่ทำงาน',
+ 'request' => 'ต้องà¸à¸²à¸£',
+ 'complete' => 'สำเร็จ',
+ 'open' => 'เปิด',
+ 'close' => 'ปิด',
+ 'reply' => 'ตอบà¸à¸¥à¸±à¸š',
+ 'more' => 'อิ่นๆ',
+ 'comments' => 'ความคิดเห็น',
+ 'import' => 'นำเข้า',
+ 'export' => 'ส่งออà¸',
+ 'untitled' => 'ไม่ระบุ',
+ 'help' => 'ช่วยเหลือ',
+ 'send' => 'ส่ง',
+ 'post' => 'โพส',
+ 'submit' => 'บันทึà¸',
+ 'site' => 'เว็บ',
+ 'up' => 'บน',
+ 'down' => 'ล่าง',
+ 'top' => 'บนสุด',
+ 'bottom' => 'ล่างสุด',
+ 'invite' => 'คำเชิà¸',
+ 'resetpassword' => 'ตั้งค่ารหัสผ่านใหม่',
+ 'makeadmin' => 'ให้เป้นผู้ดูà¹à¸¥',
+ 'removeadmin' => 'ยà¸à¹€à¸¥à¸´à¸à¸à¸²à¸£à¹€à¸›à¹‡à¸™à¸œà¸¹à¹‰à¸”ูà¹à¸¥',
+ 'option:yes' => 'ใช่',
+ 'option:no' => 'ไม่',
+ 'unknown' => 'ไม่รู้',
+ 'active' => 'ทำงาน',
+ 'total' => 'ทั้งหมด',
+ 'learnmore' => 'คลิà¸à¸—ี่นี่เพื่อเรียนรู้เพิ่มเติม',
+ 'content' => 'เนื้อหา',
+ 'content:latest' => 'à¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸¥à¹ˆà¸²à¸ªà¸¸à¸”',
+ 'content:latest:blurb' => 'คลิà¸à¸—ี่นี่เพื่อดูเนื้อหาล่าสุดจาà¸à¸—ั้งเว็บไซต์',
+ 'link:text' => 'ดูลิ้งค์',
+ 'question:areyousure' => 'à¹à¸™à¹ˆà¹ƒà¸ˆà¹à¸¥à¹‰à¸§à¸«à¸£à¸·à¸­?',
+ 'title' => 'ชื่อ',
+ 'description' => 'รายละเอียด',
+ 'tags' => 'à¹à¸—็à¸',
+ 'spotlight' => 'Spotlight',
+ 'all' => 'ทั้งหมด',
+ 'by' => 'โดย',
+ 'annotations' => 'บันทึà¸à¸¢à¹ˆà¸­',
+ 'relationships' => 'ความสัมพันธ์',
+ 'metadata' => 'เมตาดาต้า',
+ 'deleteconfirm' => 'คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸«à¸£à¸·à¸­à¹„ม่ว่าต้องà¸à¸²à¸£à¸¥à¸šà¸£à¸²à¸¢à¸à¸²à¸£à¸™à¸µà¹‰?',
+ 'fileexists' => 'ไฟล์ได้ถูà¸à¸­à¸±à¸›à¹‚หลด. หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¹ƒà¸Šà¹‰à¹à¸—นที่ เลือà¸à¸”้านล่าง:',
+ 'useradd:subject' => 'สมาชิà¸à¹ƒà¸«à¸¡à¹ˆ',
+ 'useradd:body' => '
+%s,
+
+คุณได้เป็นสมาชิà¸à¸—ี่ี่ %s. หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¹€à¸‚้าสู่ระบบให้ไปที่:
+
+ %s
+
+โดยใช้ข้อมูลด้านล่าง:
+
+ Username: %s
+ Password: %s
+
+
+เมื่อคุณเข้าสู่ระบบเราขอà¹à¸™à¸°à¸™à¸³à¹ƒà¸«à¹‰à¸„ุณเปลี่ยนรหัสผ่าน',
+ 'systemmessages:dismiss' => 'คลิà¸à¹€à¸žà¸·à¹ˆà¸­à¸¥à¸°à¸—ิ้ง',
+ 'importsuccess' => 'นำเข้าข้อมูลสำเร็จà¹à¸¥à¹‰à¸§',
+ 'importfail' => 'OpenDD นำเข้าข้อมูลไม่สำเร็จ',
+ 'friendlytime:justnow' => 'ตอนนี้',
+ 'friendlytime:minutes' => '%s นาทีที่à¹à¸¥à¹‰à¸§',
+ 'friendlytime:minutes:singular' => 'นาทีนี้',
+ 'friendlytime:hours' => '%s ชั่วโมงที่à¹à¸¥à¹‰à¸§',
+ 'friendlytime:hours:singular' => 'ชัวโมงนี้',
+ 'friendlytime:days' => '%s วันที่à¹à¸¥à¹‰à¸§',
+ 'friendlytime:days:singular' => 'เมื่อวาน',
+ 'friendlytime:date_format' => 'j F Y @ g:ia',
+ 'date:month:01' => 'มà¸à¸£à¸²à¸„ม %s',
+ 'date:month:02' => 'à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ%s',
+ 'date:month:03' => 'มีนาคม %s',
+ 'date:month:04' => 'เมษายน %s',
+ 'date:month:05' => 'พฤษภาคม %s',
+ 'date:month:06' => 'มิถุนายน %s',
+ 'date:month:07' => 'à¸à¸£à¸à¸Žà¸²à¸„ม %s',
+ 'date:month:08' => 'สิงหาคม %s',
+ 'date:month:09' => 'à¸à¸±à¸™à¸¢à¸²à¸¢à¸™ %s',
+ 'date:month:10' => 'ตุลาคม %s',
+ 'date:month:11' => 'พฤศจิà¸à¸²à¸¢à¸™ %s',
+ 'date:month:12' => 'ธันวาคม %s',
+ 'installation:sitename' => 'ชื่อเว็บ (เช่น "My social networking site"):',
+ 'installation:sitedescription' => 'รายละเอียดย่อของเว็บ (optional)',
+ 'installation:wwwroot' => 'The site URL, followed by a trailing slash:',
+ 'installation:path' => 'The full path to your site root on your disk, followed by a trailing slash:',
+ 'installation:dataroot' => 'The full path to the directory where uploaded files will be stored, followed by a trailing slash:',
+ 'installation:dataroot:warning' => 'You must create this directory manually. It should sit 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',
+ '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' => 'The RESTful API is a flexible and extensible interface that enables applications to use certain Elgg features remotely.',
+ 'installation:disableapi:label' => 'Enable the RESTful 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)',
+ 'upgrading' => 'Upgrading',
+ 'upgrade:db' => 'Your database was upgraded.',
+ 'upgrade:core' => 'Your elgg installation was upgraded',
+ 'welcome' => 'ยินดีต้อนรับ',
+ 'welcome:user' => 'ยินดีต้อนรับ %s',
+ 'email:settings' => 'ตั้งค่าอีเมล',
+ 'email:address:label' => 'อีมเล์ของคุณ',
+ 'email:save:success' => 'อีเมลใหม่บันทึà¸, ต้องทำà¸à¸²à¸£à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸š',
+ 'email:save:fail' => 'อีเมลของคุณไม่สามารถบันทึà¸.',
+ 'friend:newfriend:subject' => '%s ขอเป็นเพื่อนคุณ!',
+ 'friend:newfriend:body' => '%s ขอเป็นเพื่อนคุณ!
+
+ดูโปรไฟลิ คลิà¸:
+
+ %s
+
+ไม่จำเป็นต้องตอบà¸à¸¥à¸±à¸šà¸­à¸µà¹€à¸¡à¸¥à¸™à¸µà¹‰',
+ 'email:resetpassword:subject' => 'รีเซ็ตรหัสผ่าน!',
+ 'email:resetpassword:body' => 'สวัสดี %s,
+
+รหัสผ่านของคุณได้รับà¸à¸²à¸£à¸£à¸µà¹€à¸‹à¹‡à¸•à¹€à¸›à¹‡à¸™: %s',
+ 'email:resetreq:subject' => 'ขอรหัสผ่านใหม่.',
+ 'email:resetreq:body' => 'สวัสดี %s,
+
+มีบางคน (จาภIP %s) ได้ขอรหัสผ่านใหม่
+
+หาà¸à¸„ุณร้องขอมาคลิà¸à¸—ี่ลิงà¸à¹Œà¸”้านล่าง หาà¸à¹„ม่ใช่โปรดลบอีเมลนี้
+
+%s
+',
+ 'default_access:settings' => 'ค่าเริ่มต้นà¸à¸²à¸£à¹€à¸‚้าถึง',
+ 'default_access:label' => 'ค่าเริ่มต้นà¸à¸²à¸£à¹€à¸‚้าถึง้',
+ 'user:default_access:success' => 'ค่าเริ่มต้นà¸à¸²à¸£à¹€à¸‚้าถึงบันทึà¸à¹à¸¥à¹‰à¸§',
+ 'user:default_access:failure' => 'ค่าเริ่มต้นà¸à¸²à¸£à¹€à¸‚้าถึงไม่สามารถบันทึà¸à¹„ด้',
+ 'xmlrpc:noinputdata' => 'ข้อมูลสูà¸à¸«à¸²à¸¢',
+ 'comments:count' => '%s ความคิดเห็น',
+ 'riveraction:annotation:generic_comment' => '%s ความคิดเห็นใน %s',
+ 'generic_comments:add' => 'เพิ่มความคิดเห็น',
+ 'generic_comments:text' => 'ความคิดเห็น',
+ 'generic_comment:posted' => 'ความคิดเห็นของคุณถูà¸à¹‚พสต์เรียบร้อยà¹à¸¥à¹‰à¸§.',
+ 'generic_comment:deleted' => 'ความคิดเห็นของคุณถูà¸à¸¥à¸šà¹€à¸£à¸µà¸¢à¸šà¸£à¹‰à¸­à¸¢à¹à¸¥à¹‰à¸§.',
+ 'generic_comment:blank' => 'ขออภัย คุณต้องใส่ความคิดเห็นของคุณà¸à¹ˆà¸­à¸™à¸—ี่จะบันทึà¸',
+ 'generic_comment:notfound' => 'ขออภัย เราไม่พบรายà¸à¸²à¸£à¸—ี่ระบุ',
+ 'generic_comment:notdeleted' => 'ขออภัย เราไม่สามารถลบความคิดเห็นนี้.',
+ 'generic_comment:failure' => 'เà¸à¸´à¸”ข้อผิดพลาดที่ไม่คาดหมายในà¸à¸²à¸£à¹€à¸žà¸´à¹ˆà¸¡à¸„วามคิดเห็นของคุณ. โปรดลองอีà¸à¸„รั้ง.',
+ 'generic_comment:email:subject' => 'มีความคิดเห็นใหม่มาถึงคุณ!',
+ 'generic_comment:email:body' => 'มีความคิดเห็นใหม่มาถึงคุณ ใน "%s" จาà¸%s. ไปอ่าน:
+
+
+%s
+
+
+หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸•à¸­à¸šà¸à¸¥à¸±à¸šà¸„ลิà¸:
+
+ %s
+
+à¸à¸²à¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸”ูโปรไฟล์ของ %s, คลิà¸:
+
+ %s
+
+ไม่จำเป็นต้องตอบà¸à¸¥à¸±à¸šà¸­à¸µà¹€à¸¡à¸¥à¸™à¸µà¹‰',
+ 'entity:default:strapline' => 'สร้าง %s โดย %s',
+ 'entity:default:missingsupport:popup' => 'ไม่สามารถà¹à¸ªà¸”งอย่างถูà¸à¸•à¹‰à¸­à¸‡ อาจจะเพราะไม่มีà¸à¸²à¸£à¸•à¸´à¸”ตั้งปลั๊à¸à¸­à¸´à¸™',
+ 'entity:delete:success' => 'Entity %s ถูà¸à¸¥à¸š',
+ 'entity:delete:fail' => 'Entity %s ไม่สามารถลบได้',
+ '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. Please try again.',
+ '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.',
+ '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_names:tags' => 'à¹à¸—๊à¸',
+ '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 ',
+ '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 ',
+ 'yi' => 'Yiddish ',
+ 'yo' => 'Yoruba ',
+ 'za' => 'Zuang ',
+ 'zh' => 'Chinese ',
+ 'zu' => 'Zulu ',
+);
+
+add_translation("th", $th);
+
diff --git a/mod/languages/languages/zh/zh.blog.php b/mod/languages/languages/zh/zh.blog.php
new file mode 100644
index 000000000..a285c721d
--- /dev/null
+++ b/mod/languages/languages/zh/zh.blog.php
@@ -0,0 +1,69 @@
+<?php
+
+$chinese = array(
+
+ 'blog' => 'åšå®¢',
+ 'blog:blogs' => 'åšå®¢',
+ 'blog:revisions' => '修订',
+ 'blog:archives' => '存档',
+ 'blog:blog' => 'åšå®¢',
+ 'item:object:blog' => 'åšå®¢',
+ 'blog:title:top20' => 'TOP 20',
+
+ 'blog:title:user_blogs' => '%sçš„åšå®¢',
+ 'blog:title:all_blogs' => '所有åšå®¢',
+ 'blog:title:friends' => '朋å‹çš„åšå®¢',
+
+ 'blog:group' => 'å°ç»„åšå®¢',
+ 'blog:enableblog' => 'å¯ç”¨å°ç»„åšå®¢',
+ 'blog:write' => '写日志',
+
+ // Editing
+ 'blog:add' => 'å‘表日志',
+ 'blog:edit' => '编辑日志',
+ 'blog:excerpt' => '摘录',
+ 'blog:body' => '内容',
+ 'blog:save_status' => '最åŽä¸€æ¬¡ä¿å­˜: ',
+ 'blog:never' => 'æ°¸ä¸',
+
+ // Statuses
+ 'blog:status' => '状æ€',
+ 'blog:status:draft' => 'è‰ç¨¿',
+ 'blog:status:published' => 'å‘表',
+ 'blog:status:unsaved_draft' => '未ä¿å­˜',
+
+ 'blog:revision' => 'Revision',
+ 'blog:auto_saved_revision' => '自动ä¿å­˜',
+
+ // messages
+ 'blog:message:saved' => '日志ä¿å­˜æˆåŠŸ.',
+ 'blog:error:cannot_save' => '日志ä¿å­˜å¤±è´¥.',
+ 'blog:error:cannot_write_to_container' => 'æƒé™ä¸è¶³',
+ 'blog:error:post_not_found' => '日志已被删除或æƒé™ä¸è¶³.',
+ 'blog:messages:warning:draft' => '有一个未ä¿å­˜çš„è‰ç¨¿!',
+ 'blog:edit_revision_notice' => '(旧的版本)',
+ 'blog:message:deleted_post' => '日志已被删除.',
+ 'blog:error:cannot_delete_post' => '日志删除失败.',
+ 'blog:none' => 'No blog posts',
+ 'blog:error:missing:title' => '请输入标题!',
+ 'blog:error:missing:description' => '请输入日志内容!',
+ 'blog:error:cannot_edit_post' => '日志ä¸å­˜åœ¨æˆ–æƒé™ä¸è¶³',
+ 'blog:error:revision_not_found' => '找ä¸åˆ°ä¿®è®¢ç‰ˆæœ¬.',
+
+ // river
+ 'river:create:object:blog' => '%s å‘表了一篇日志 %s',
+ 'river:comment:object:blog' => '%s 评论了日志 %s',
+
+ // notifications
+ 'blog:newpost' => '新的日志',
+
+ // widget
+ 'blog:widget:description' => '最近的日志',
+ 'blog:moreblogs' => '更多日志',
+ 'blog:numbertodisplay' => '日志显示数é‡',
+ 'blog:noblogs' => '没有日志'
+
+ );
+
+add_translation("zh",$chinese);
+
diff --git a/mod/languages/languages/zh/zh.core.php b/mod/languages/languages/zh/zh.core.php
new file mode 100644
index 000000000..e748e1f81
--- /dev/null
+++ b/mod/languages/languages/zh/zh.core.php
@@ -0,0 +1,662 @@
+<?php
+$zh = array (
+ 'item:site' => '网站',
+ 'login' => '登录',
+ 'loginok' => '您已ç»ç™»å½•äº†.',
+ 'loginerror' => '我们无法让您登录,这是因为你还没有验è¯æ‚¨çš„å¸æˆ·ï¼ˆéªŒè¯é“¾æŽ¥å‘到您的邮箱),或您所æ供的信æ¯ä¸æ­£ç¡®ã€‚请确认您的信æ¯æ­£ç¡®çš„,然åŽå†è¯•ä¸€æ¬¡ã€‚',
+ 'logout' => '登出',
+ 'logoutok' => '您已ç»ç™»å‡ºäº†.',
+ 'logouterror' => '登出é‡åˆ°é—®é¢˜,请ç¨å€™å†è¯•.',
+ 'exception:title' => '欢迎æ¥åˆ°Elgg.org.cn,艺歌中文社交网络',
+ 'actionundefined' => '请求的行为 (%s) 没有在系统中定义.',
+ 'actionloggedout' => '很抱歉,您ä¸èƒ½åœ¨ç™»å‡ºæ—¶æ‰§è¡Œè¯¥åŠ¨ä½œã€‚',
+ 'notfound' => '没有找到结果',
+ 'SecurityException:Codeblock' => '没有执行该代ç çš„æƒé™',
+ 'DatabaseException:WrongCredentials' => 'Elgg无法使用指定的é…置信æ¯è¿žæŽ¥åˆ°æ•°æ®åº“',
+ 'DatabaseException:NoConnect' => 'Elggä¸èƒ½é€‰æ‹©æ•°æ®åº“ \'%s\',请检查该数æ®åº“是å¦å»ºç«‹å¹¶ä¸”有æƒé™å¯ä»¥è®¿é—®',
+ 'SecurityException:FunctionDenied' => '访问需è¦æƒé™çš„函数 \'%s\' 被拒ç»äº†ã€‚',
+ 'DatabaseException:DBSetupIssues' => 'å‘生以下问题: ',
+ 'DatabaseException:ScriptNotFound' => 'Elgg找ä¸åˆ°ä½äºŽ %s çš„æ•°æ®åº“脚本.',
+ 'IOException:FailedToLoadGUID' => '从GUID:%d 加载新的 %s 失败',
+ 'InvalidParameterException:NonElggObject' => '传递一个éžElggObject到å¦ä¸€ä¸ªElggObject构造器!',
+ 'InvalidParameterException:UnrecognisedValue' => '传递给构造函数一个ä¸å¯è¯†åˆ«çš„值。',
+ 'InvalidClassException:NotValidElggStar' => 'GUID:%d ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„ %s',
+ 'PluginException:MisconfiguredPlugin' => '%s 是一个é…置错误的æ’件。',
+ 'InvalidParameterException:NonElggUser' => '传递一个éžElggUser到ElggUser构造器!',
+ 'InvalidParameterException:NonElggSite' => '传递一个éžElggSite到ElggSite构造器!',
+ 'InvalidParameterException:NonElggGroup' => '传递一个éžElggGroup到ElggGroup构造器!',
+ 'IOException:UnableToSaveNew' => '无法ä¿å­˜æ–° %s',
+ 'InvalidParameterException:GUIDNotForExport' => 'GUID 在输出的时候没有指定',
+ 'InvalidParameterException:NonArrayReturnValue' => '实体åºåˆ—化函数传递了一个éžæ•°ç»„返回值å‚',
+ 'ConfigurationException:NoCachePath' => '缓存路径没有设置!',
+ 'IOException:NotDirectory' => '%s ä¸æ˜¯ä¸€ä¸ªç›®å½•ã€‚',
+ 'IOException:BaseEntitySaveFailed' => '无法ä¿å­˜æ–°å¯¹è±¡çš„基本实体信æ¯',
+ 'InvalidParameterException:UnexpectedODDClass' => 'import() 传递了一个éžé¢„期的 ODD ç±»',
+ 'InvalidParameterException:EntityTypeNotSet' => '实体类型必须被设定',
+ 'ClassException:ClassnameNotClass' => '%s ä¸æ˜¯ä¸€ä¸ª %s.',
+ 'ClassNotFoundException:MissingClass' => 'ç±» \'%s\' 没有被找到,æ’件丢失?',
+ 'InstallationException:TypeNotSupported' => '类型 %s ä¸è¢«æ”¯æŒ. 这表明您的安装出错,一般情况是在å‡çº§ä¸æˆåŠŸæ—¶å‘生这样的错误.',
+ 'ImportException:ImportFailed' => '无法导入元素 %d',
+ 'ImportException:ProblemSaving' => 'ä¿å­˜ %s 的过程é‡åˆ°é”™è¯¯',
+ 'ImportException:NoGUID' => '新的实体建立好了,但是没有 GUID, è¿™ä¸åº”该å‘生.',
+ 'ImportException:GUIDNotFound' => '实体 \'%d\' 没有被找到',
+ 'ImportException:ProblemUpdatingMeta' => '更新实体 \'%d\' 的时候å‘生了一个错误 \'%s\' ',
+ 'ExportException:NoSuchEntity' => '没有实体 GUID:%d',
+ 'ImportException:NoODDElements' => '在导入数æ®çš„时候没有找到 OpenDD 元素,导入失败.',
+ 'ImportException:NotAllImported' => '没有导入全部的数æ®',
+ 'InvalidParameterException:UnrecognisedFileMode' => 'ä¸å¯è¯†åˆ«çš„æ–‡ä»¶æ¨¡å¼ \'%s\'',
+ 'InvalidParameterException:MissingOwner' => '文件 %s (%d) 没有所有者!',
+ 'IOException:CouldNotMake' => '无法创建 %s',
+ 'IOException:MissingFileName' => '在打开一个文件时候,您必须指定文件å',
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => '文件存储信æ¯æ— æ³•æ‰¾åˆ°æˆ–者类无法ä¿å­˜',
+ 'NotificationException:NoNotificationMethod' => '没有指定通知方å¼',
+ 'NotificationException:NoHandlerFound' => '没有找到 \'%s\' 的处ç†æ–¹æ³•æˆ–者他ä¸èƒ½è¢«è°ƒç”¨',
+ 'NotificationException:ErrorNotifyingGuid' => '在通知 %d 的时候å‘生了一个错误',
+ 'NotificationException:NoEmailAddress' => 'æ— æ³•èŽ·å– GUID:%d 的邮件地å€',
+ 'NotificationException:MissingParameter' => '丢失了必须的å‚æ•°, \'%s\'',
+ 'DatabaseException:WhereSetNonQuery' => 'Where è®¾å®šé‡ŒåŒ…æ‹¬äº†éž WhereQueryComponent',
+ 'DatabaseException:SelectFieldsMissing' => 'Select 查询方å¼ç¼ºå°‘å‚æ•°',
+ 'DatabaseException:UnspecifiedQueryType' => 'ä¸å¯è¯†åˆ«æˆ–未指定的查询类型',
+ 'DatabaseException:NoTablesSpecified' => '查询没有指定数æ®è¡¨',
+ 'DatabaseException:NoACL' => '查询没有æƒé™',
+ 'InvalidParameterException:NoEntityFound' => '没有找到实体,该实体ä¸å­˜åœ¨æˆ–者您没有æƒé™è®¿é—®.',
+ 'InvalidParameterException:GUIDNotFound' => 'GUID:%s 没有找到,也å¯èƒ½æ‚¨æ²¡æœ‰æƒé™è®¿é—®.',
+ 'InvalidParameterException:IdNotExistForGUID' => '抱歉, \'%s\' ä¸å­˜åœ¨ guid:%d',
+ 'InvalidParameterException:CanNotExportType' => '抱歉,无法输出 \'%s\'',
+ 'InvalidParameterException:NoDataFound' => '无法找到任何数æ®ã€‚',
+ 'InvalidParameterException:DoesNotBelong' => 'ä¸å±žäºŽå®žä½“',
+ 'InvalidParameterException:DoesNotBelongOrRefer' => 'ä¸å±žäºŽå®žä½“或者指å‘实体',
+ 'InvalidParameterException:MissingParameter' => '缺少å‚æ•°,您需è¦æä¾›GUID',
+ 'SecurityException:APIAccessDenied' => '对ä¸èµ·, API 访问被管ç†å‘˜å…³é—­äº†ã€‚',
+ 'SecurityException:NoAuthMethods' => '没有找到验è¯æ–¹å¼å¯ä»¥éªŒè¯è¯¥API请求',
+ 'APIException:ApiResultUnknown' => 'API 结果是一个未知类型.',
+ 'ConfigurationException:NoSiteID' => '没有指定站点 ID',
+ 'InvalidParameterException:APIMethodOrFunctionNotSet' => 'æ–¹å¼æˆ–者函数在 expose_method() 的调用中没有被设置',
+ 'InvalidParameterException:APIParametersArrayStructure' => 'æ›å…‰æ–¹å¼ \'%s\' çš„å‚数数组结构ä¸æ­£ç¡®',
+ 'InvalidParameterException:UnrecognisedHttpMethod' => '无法识别的 http æ–¹å¼ %s 对于apiæ–¹å¼ \'%s\'',
+ 'APIException:MissingParameterInMethod' => '方法 %s 缺少å‚æ•° %s',
+ 'APIException:ParameterNotArray' => '%s ä¸æ˜¯æ•°ç»„',
+ 'APIException:UnrecognisedTypeCast' => '广播 %s çš„å˜é‡ \'%s\' (被方法 \'%s\' 调用) 是无法识别的类型',
+ 'APIException:InvalidParameter' => '方法 \'%s\' 里有无效的å‚æ•° \'%s\' ',
+ 'APIException:FunctionParseError' => '%s(%s) 解æžé”™è¯¯',
+ 'APIException:FunctionNoReturn' => '%s(%s) 没有返回值',
+ 'APIException:APIAuthenticationFailed' => 'API验è¯çš„调用方å¼é”™è¯¯',
+ 'APIException:UserAuthenticationFailed' => '用户验è¯çš„调用方å¼é”™è¯¯',
+ 'SecurityException:AuthTokenExpired' => '验è¯ä»¤ç‰Œä¸¢å¤±,无效或者过期',
+ 'CallException:InvalidCallMethod' => '%s 被调用时候必须使用 \'%s\' ',
+ 'APIException:MethodCallNotImplemented' => '方法调用 \'%s\' 没有被实现',
+ 'APIException:FunctionDoesNotExist' => 'æ–¹å¼ \'%s\' 的函数ä¸å¯è°ƒç”¨',
+ 'APIException:AlgorithmNotSupported' => '算法 \'%s\' ä¸æ”¯æŒæˆ–者被ç¦ç”¨äº†',
+ 'ConfigurationException:CacheDirNotSet' => '缓存目录 \'cache_path\' 没有被设定',
+ 'APIException:NotGetOrPost' => '返回方å¼å¿…须是 GET 或者 POST',
+ 'APIException:MissingAPIKey' => '丢失了 API 密钥',
+ 'APIException:BadAPIKey' => '错误的API密钥',
+ 'APIException:MissingHmac' => '丢失了 X-Elgg-hmac 报头',
+ 'APIException:MissingHmacAlgo' => '丢失了 X-Elgg-hmac-algo 报头',
+ 'APIException:MissingTime' => '丢失了 X-Elgg-time 报头',
+ 'APIException:TemporalDrift' => 'X-Elgg-time 报错',
+ 'APIException:NoQueryString' => '查询字符里没有数æ®',
+ 'APIException:MissingPOSTHash' => '丢失了 X-Elgg-posthash 报头',
+ 'APIException:MissingPOSTAlgo' => '丢失了 X-Elgg-posthash_algo 报头',
+ 'APIException:MissingContentType' => '传递数æ®æ—¶å€™ä¸¢å¤±äº†å†…容类型',
+ 'SecurityException:InvalidPostHash' => 'POST æ•°æ®çš„ hash 无效 - 预期: %s 实际: %s.',
+ 'SecurityException:DupePacket' => 'ç­¾åå·²ç»è¢«é€šè¿‡',
+ 'SecurityException:InvalidAPIKey' => '无效或者缺少 API Key.',
+ 'NotImplementedException:CallMethodNotImplemented' => '调用方法 \'%s\' ä¸è¢«æ”¯æŒ',
+ 'NotImplementedException:XMLRPCMethodNotImplemented' => 'XML-RPC 方法调用 \'%s\' 没有被实现',
+ 'InvalidParameterException:UnexpectedReturnFormat' => '调用方法 \'%s\' 返回了éžé¢„期结果',
+ 'CallException:NotRPCCall' => 'ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„ XML-RPC 调用',
+ 'PluginException:NoPluginName' => '没有找到æ’件的åå­—',
+ 'SecurityException:authenticationfailed' => '用户验è¯å¤±è´¥',
+ 'CronException:unknownperiod' => '%s ä¸æ˜¯ä¸€ä¸ªå¯è¯†åˆ«çš„期间',
+ 'SecurityException:deletedisablecurrentsite' => '您无法删除或者ç¦ç”¨ç›®å‰æ­£åœ¨æŸ¥çœ‹çš„网站',
+ 'memcache:notinstalled' => 'PHP memcache 模å—没有安装,您必须安装php5-memcache',
+ 'memcache:versiontoolow' => 'Memcache 需è¦è‡³å°‘ %s 版本æ¥è¿è¡Œ,您当å‰çš„版本是 %s ',
+ 'memcache:noaddserver' => '多æœåŠ¡å™¨æ”¯æŒç¦ç”¨,您å¯ä»¥å‡çº§æ‚¨çš„PECL memcache 库',
+ 'deprecatedfunction' => '警告: 该代ç ä½¿ç”¨äº†ä¸å†æ”¯æŒçš„函数 \\\'%s\\\' 并且ä¸å…¼å®¹å½“å‰çš„Elgg版本',
+ 'pageownerunavailable' => '警告: 该页é¢çš„所有者 %d ä¸å¯è®¿é—®!',
+ 'system.api.list' => '列出系统所有å¯ç”¨çš„API调用',
+ 'auth.gettoken' => '本API调用支æŒç”¨æˆ·ç™»å½•,返回一个验è¯ä»¤ç‰Œ,从而ä¿è¯ä»¥åŽçš„用户å和密ç çš„验è¯.',
+ 'name' => '昵称',
+ 'email' => '邮箱地å€',
+ 'username' => '用户å',
+ 'password' => '密ç ',
+ 'passwordagain' => 'å¯†ç  (å†æ¬¡ç¡®è®¤)',
+ 'admin_option' => '任命为管ç†å‘˜?',
+ 'PRIVATE' => '个人',
+ 'LOGGED_IN' => '登陆的用户',
+ 'PUBLIC' => '公开',
+ 'access:friends:label' => '好å‹',
+ 'access' => '访问',
+ 'dashboard' => '控制é¢æ¿',
+ 'dashboard:nowidgets' => '控制é¢æ¿æ˜¯æ‚¨çš„门户。点击\'选项\'添加æ’件æ¥æŸ¥çœ‹å…³æ³¨çš„好å‹çš„最新活动或展示您的丰富生活。',
+ 'widgets:add' => '添加æ’件到您的页é¢',
+ 'widgets:add:description' => '选择所需的功能,从å³è¾¹çš„<b>æ’件库</b>添加到下方的三个方框里的任何ä½ç½®ã€‚
+
+ è¦åˆ é™¤æ’件请将其拖动到<b>æ’件库</b>方框里。',
+ 'widgets:position:fixed' => '(页é¢ä¸Šçš„固定ä½ç½®)',
+ 'widgets' => 'æ’件',
+ 'widget' => 'æ’件',
+ 'item:object:widget' => 'æ’件',
+ 'widgets:save:success' => 'æ’件é…置信æ¯ä¿å­˜å¥½äº†ã€‚',
+ 'widgets:save:failure' => '我们ä¸èƒ½ä¿å­˜æ‚¨çš„æ’件,请å†è¯•ä¸€æ¬¡ã€‚',
+ 'group' => '群组',
+ 'item:group' => '群组',
+ 'profile:edit:default' => '替æ¢æ¡£æ¡ˆå†…容',
+ 'user' => '用户',
+ 'item:user' => '用户',
+ 'riveritem:single:user' => '一个用户',
+ 'riveritem:plural:user' => 'æŸäº›ç”¨æˆ·',
+ 'profile:edit' => '编辑档案',
+ 'profile:aboutme' => '关于我',
+ 'profile:description' => '关于我',
+ 'profile:briefdescription' => '简介',
+ 'profile:location' => '地å€',
+ 'profile:skills' => '技能',
+ 'profile:interests' => '兴趣',
+ 'profile:contactemail' => 'è”系电å­é‚®ä»¶',
+ 'profile:phone' => '电è¯',
+ 'profile:mobile' => '手机',
+ 'profile:website' => '网站',
+ 'profile:label' => '个人资料标签',
+ 'profile:type' => '个人资料类型',
+ 'profile:editdefault:fail' => '默认的个人资料无法被ä¿å­˜',
+ 'profile:editdefault:success' => 'æ¡ç›®å·²ç»æˆåŠŸçš„添加到了默认的个人资料里',
+ 'profile:editdefault:delete:fail' => '移除默认的个人资料æ¡ç›®å¤±è´¥',
+ 'profile:editdefault:delete:success' => '默认的个人资料æ¡ç›®åˆ é™¤äº†',
+ 'profile:defaultprofile:reset' => '默认的个人资料é‡ç½®',
+ 'profile:resetdefault' => 'é‡ç½®é»˜è®¤çš„个人资料',
+ 'profile:explainchangefields' => '您å¯ä»¥æ›¿æ¢çŽ°ä¸‹æ–¹é‡Œé¢çš„个人资料信æ¯.首先您需è¦æ供新的个人资料标签. 例如,\'最爱团体\' 然åŽä½ é€‰æ‹©ç±»åž‹,例如,tags,url,textç­‰.éšæ—¶ä½ å¯ä»¥è¿”回æ¥ä¿®æ”¹è®¾ç½®.',
+ 'profile:saved' => '您的个人资料已ç»ä¿å­˜æˆåŠŸ.',
+ 'friends' => '好å‹',
+ 'friends:yours' => '您的好å‹',
+ 'friends:owned' => '%s 的好å‹',
+ 'friend:add' => '添加好å‹',
+ 'friend:remove' => '删除好å‹',
+ 'friends:add:successful' => 'ä½ å·²ç»æˆåŠŸçš„添加了 %s 作为好å‹ã€‚',
+ 'friends:add:failure' => '我们没法添加 %s 作为您的好å‹ï¼Œè¯·å†è¯•ä¸€æ¬¡ã€‚',
+ 'friends:remove:successful' => '您æˆåŠŸçš„å°† %s 从您的好å‹ä¸­ç§»é™¤äº†ã€‚',
+ 'friends:remove:failure' => '我们无法从您的好å‹ä¸­ç§»é™¤ %s 。请å†è¯•ä¸€æ¬¡ã€‚',
+ 'friends:none' => '这个用户还没有添加任何好å‹ã€‚',
+ 'friends:none:you' => '您还未添加任何好å‹ï¼æœç´¢æ‚¨çš„兴趣æ¥æ‰¾ä¸€äº›å¿—åŒé“åˆçš„朋å‹ä»¬å§ã€‚',
+ 'friends:none:found' => '没找到好å‹ã€‚',
+ 'friends:of:none' => '还没有人加该用户为好å‹',
+ 'friends:of:none:you' => '还没有人加你为好å‹ã€‚请输入一些信æ¯åˆ°ä¸ªäººæ¡£æ¡ˆé‡Œè®©åˆ«äººå¯ä»¥æ‰¾åˆ°ä½ ï¼',
+ 'friends:of:owned' => '与 %s 交朋å‹çš„人们',
+ 'friends:num_display' => '好å‹æ˜¾ç¤ºæ•°é‡',
+ 'friends:icon_size' => '图标大å°',
+ 'friends:tiny' => '很å°',
+ 'friends:small' => 'å°',
+ 'friends:of' => '关注我的',
+ 'friends:collections' => '好å‹åœˆ',
+ 'friends:collections:add' => '添加好å‹åœˆ',
+ 'friends:addfriends' => '添加好å‹',
+ 'friends:collectionname' => '圈å­å称',
+ 'friends:collectionfriends' => '圈内好å‹',
+ 'friends:collectionedit' => '编辑',
+ 'friends:nocollections' => '您还没有任何好å‹åœˆ',
+ 'friends:collectiondeleted' => '您的好å‹åœˆå·²ç»åˆ é™¤äº†',
+ 'friends:collectiondeletefailed' => '我们无法删除好å‹åœˆã€‚或您没有æƒé™æ‰§è¡Œæ“作。',
+ 'friends:collectionadded' => '您的圈å­å»ºç«‹å¥½äº†ã€‚',
+ 'friends:nocollectionname' => '在创建å‰ï¼Œæ‚¨éœ€è¦ç»™åœˆå­å‘½å。',
+ 'friends:collections:members' => '圈å­æˆå‘˜',
+ 'friends:collections:edit' => '编辑圈å­',
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+ 'feed:rss' => '订阅 RSS',
+ 'link:view' => '查看链接',
+ 'river' => 'é¢æ¿',
+ 'river:noaccess' => '您没有æƒé™æŸ¥çœ‹è¯¥å†…容',
+ 'river:posted:generic' => '%s 被å‘布了',
+ 'plugins:settings:save:ok' => 'æ’件 %s çš„é…ç½®ä¿å­˜å¥½äº†ã€‚',
+ 'plugins:settings:save:fail' => 'æ’件 %s çš„é…ç½®ä¿å­˜é‡åˆ°äº†é—®é¢˜ã€‚',
+ 'plugins:usersettings:save:ok' => 'æ’件 %s 的用户设定ä¿å­˜å¥½äº†ã€‚',
+ 'plugins:usersettings:save:fail' => 'æ’件 %s 的用户设定ä¿å­˜é‡åˆ°äº†é—®é¢˜ã€‚',
+ 'admin:plugins:label:version' => '版本',
+ 'item:object:plugin' => 'æ’件é…置设定',
+ 'notifications:usersettings' => '通知设定',
+ 'notifications:methods' => '请指定å…许哪ç§æ–¹å¼ã€‚',
+ 'notifications:usersettings:save:ok' => '您的通知设定æˆåŠŸçš„ä¿å­˜å¥½äº†ã€‚',
+ 'notifications:usersettings:save:fail' => '在ä¿å­˜æ‚¨çš„通知设定时é‡åˆ°äº†é—®é¢˜',
+ 'user.notification.get' => '返回指定用户的通知设定',
+ 'user.notification.set' => '设置通知设定到指定用户',
+ 'search' => 'æœç´¢',
+ 'searchtitle' => 'æœç´¢: %s',
+ 'users:searchtitle' => 'æœç´¢ç”¨æˆ·: %s',
+ 'groups:searchtitle' => 'æœç´¢ç¾¤ç»„: %s',
+ 'advancedsearchtitle' => '%s çš„æœç´¢ç»“果中匹é…的有 %s',
+ 'next' => '下一页',
+ 'previous' => '上一页',
+ 'viewtype:change' => '修改列表类型',
+ 'viewtype:list' => '列表视图',
+ 'viewtype:gallery' => '相册视图',
+ 'tag:search:startblurb' => '标签匹é…的有 \'%s\':',
+ 'user:search:startblurb' => '用户匹é…的有 \'%s\':',
+ 'user:search:finishblurb' => '点击查看更多。',
+ 'group:search:startblurb' => '群组匹é…的有 \'%s\':',
+ 'group:search:finishblurb' => '点击查看更多',
+ 'search:go' => 'æœç´¢',
+ 'userpicker:only_friends' => '仅好å‹',
+ 'account' => 'å¸æˆ·',
+ 'settings' => '设定',
+ 'tools' => 'æ’件',
+ 'register' => '注册',
+ 'registerok' => '您已ç»æˆåŠŸæ³¨å†Œäº† %s。',
+ 'registerbad' => '您的注册é‡åˆ°äº†é—®é¢˜ã€‚用户å已存在,两次密ç ä¸åŒ¹é…,或者用户å与密ç è¿‡çŸ­ã€‚',
+ 'registerdisabled' => '注册功能已ç»è¢«ç®¡ç†å‘˜å…³é—­äº†ã€‚',
+ 'registration:notemail' => '您的邮箱地å€ä¸åˆæ³•ã€‚',
+ 'registration:userexists' => '用户å存在',
+ 'registration:usernametooshort' => '用户å至少4ä½è‹±æ–‡å­—符',
+ 'registration:passwordtooshort' => '密ç è‡³å°‘6ä½è‹±æ–‡å­—符',
+ 'registration:dupeemail' => '该邮箱地å€å·²ç»è¢«æ³¨å†Œè¿‡äº†',
+ 'registration:invalidchars' => '抱歉您的用户å包å«æ— æ•ˆå­—符',
+ 'registration:emailnotvalid' => '抱歉您的邮件地å€è¾“入是无效的',
+ 'registration:passwordnotvalid' => '抱歉您的密ç è¾“入是无效的',
+ 'registration:usernamenotvalid' => '抱歉您的用户å输入是无效的',
+ 'adduser' => '添加用户',
+ 'adduser:ok' => '您æˆåŠŸçš„添加了一å用户。',
+ 'adduser:bad' => '无法创建新用户',
+ 'user:set:name' => 'å¸æˆ·å字设定',
+ 'user:name:label' => '您的åå­—',
+ 'user:name:success' => 'æˆåŠŸçš„修改了您在系统中的项目。',
+ 'user:name:fail' => '无法修改您在系统中的项目。',
+ 'user:set:password' => 'å¸æˆ·å¯†ç ',
+ 'user:password:label' => '新密ç ',
+ 'user:password2:label' => '新密ç (å†æ¬¡ç¡®è®¤)',
+ 'user:password:success' => '密ç ä¿®æ”¹æˆåŠŸ',
+ 'user:password:fail' => '无法修改您在系统中的密ç ã€‚',
+ 'user:password:fail:notsame' => '两次密ç ä¸åŒ¹é…ï¼',
+ 'user:password:fail:tooshort' => '密ç å¤ªçŸ­ï¼',
+ 'user:set:language' => '语言设定',
+ 'user:language:label' => '您的语言',
+ 'user:language:success' => '您的语言设定已ç»æ›´æ–°ï¼',
+ 'user:language:fail' => '您的语言设定还未ä¿å­˜ã€‚',
+ 'user:username:notfound' => '用户å %s 未找到。',
+ 'user:password:lost' => '找回密ç ',
+ 'user:password:resetreq:success' => '找回密ç çš„邮件已ç»å‘é€ç»™æ‚¨äº†',
+ 'user:password:resetreq:fail' => '无法请求生æˆæ–°çš„密ç ã€‚',
+ 'user:password:text' => '生æˆæ–°å¯†ç è¯·åœ¨ä¸‹æ–¹è¾“入您的用户å。我们将å‘é€åœ°å€çš„一个唯一的验è¯ç½‘页å‘你点击通过电å­é‚®ä»¶ä¸­çš„链接,电å­é‚®ä»¶çš„正文中和一个新的密ç å°†è¢«å‘é€ç»™æ‚¨ã€‚',
+ 'user:persistent' => 'è®°ä½æˆ‘',
+ 'admin:configuration:success' => '您的设定ä¿å­˜æˆåŠŸã€‚',
+ 'admin:configuration:fail' => '您的设定无法ä¿å­˜ã€‚',
+ 'admin' => '管ç†',
+ 'admin:description' => '管ç†å‘˜é¢æ¿å…许您控制系统的所有方é¢ï¼Œä»Žç”¨æˆ·ç®¡ç†åˆ°æ’件的é…置。',
+ 'admin:site:description' => '本é¢æ¿å…许您控制整站设定。',
+ 'admin:site:opt:linktext' => 'é…置网站...',
+ 'admin:site:access:warning' => '修改访问设定,ä»…ä»…å½±å“有æƒé™è®¾å®šçš„那些内容',
+ 'admin:plugins' => 'æ’件管ç†',
+ 'admin:plugins:description' => '本é¢æ¿å…许你é…ç½®æ’件设定。',
+ 'admin:plugins:opt:linktext' => 'é…ç½®æ’件...',
+ 'admin:plugins:opt:description' => 'é…置网站的æ’件设定',
+ 'admin:plugins:label:author' => '作者',
+ 'admin:plugins:label:copyright' => '版æƒ',
+ 'admin:plugins:label:licence' => 'åè®®',
+ 'admin:plugins:label:website' => 'URL',
+ 'admin:plugins:label:moreinfo' => '更多',
+ 'admin:statistics' => '统计',
+ 'admin:statistics:description' => '这个是您网站统计信æ¯çš„总览。',
+ 'admin:statistics:opt:description' => '查看关于您会员和网站内容的统计信æ¯ã€‚',
+ 'admin:statistics:opt:linktext' => '查看统计...',
+ 'admin:statistics:label:basic' => '基本统计',
+ 'admin:statistics:label:numentities' => '网站项目',
+ 'admin:statistics:label:numusers' => '用户数',
+ 'admin:statistics:label:numonline' => '在线人数',
+ 'admin:statistics:label:onlineusers' => '当å‰åœ¨çº¿',
+ 'admin:statistics:label:version' => 'Elgg 版本',
+ 'admin:statistics:label:version:release' => 'å‘布',
+ 'admin:statistics:label:version:version' => '版本',
+ 'admin:user:label:search' => '查找用户:',
+ 'admin:user:ban:no' => 'å±è”½ç”¨æˆ·å¤±è´¥',
+ 'admin:user:ban:yes' => 'å±è”½ç”¨æˆ·æˆåŠŸ',
+ 'admin:user:unban:no' => 'å–消å±è”½ç”¨æˆ·å¤±è´¥',
+ 'admin:user:unban:yes' => 'å–消å±è”½ç”¨æˆ·æˆåŠŸ',
+ 'admin:user:delete:no' => '删除用户失败',
+ 'admin:user:delete:yes' => '用户删除æˆåŠŸ',
+ 'admin:user:resetpassword:yes' => '密ç é‡è®¾å‘ŠçŸ¥ç”¨æˆ·äº†ã€‚',
+ 'admin:user:resetpassword:no' => '密ç æ— æ³•é‡è®¾ã€‚',
+ 'admin:user:makeadmin:yes' => '该用户现在是管ç†å‘˜äº†ã€‚',
+ 'admin:user:makeadmin:no' => '我们无法设置该用户为管ç†å‘˜',
+ 'admin:user:removeadmin:yes' => '用户ä¸æ˜¯ç®¡ç†å‘˜äº†',
+ 'admin:user:removeadmin:no' => '该用户无法删除管ç†å‘˜çš„æƒé™',
+ 'usersettings:description' => '用户设定é¢æ¿å…许您控制个人信æ¯ã€‚',
+ 'usersettings:statistics' => '您的统计',
+ 'usersettings:statistics:opt:description' => '查看用户和系统的统计信æ¯ã€‚',
+ 'usersettings:statistics:opt:linktext' => '账户统计',
+ 'usersettings:user' => '您的设定',
+ 'usersettings:user:opt:description' => '控制用户设定。',
+ 'usersettings:user:opt:linktext' => '修改设定',
+ 'usersettings:plugins' => 'æ’件',
+ 'usersettings:plugins:opt:description' => '您当å‰æ¿€æ´»çš„æ’件é…ç½®',
+ 'usersettings:plugins:opt:linktext' => 'é…ç½®æ’件...',
+ 'usersettings:plugins:description' => '本é¢æ¿è®©æ‚¨å¯ä»¥é…置设定个人信æ¯ã€‚',
+ 'usersettings:statistics:label:numentities' => '您的æ¡ç›®',
+ 'usersettings:statistics:yourdetails' => '详细信æ¯',
+ 'usersettings:statistics:label:name' => 'å…¨å',
+ 'usersettings:statistics:label:email' => '邮箱',
+ 'usersettings:statistics:label:membersince' => '注册自从',
+ 'usersettings:statistics:label:lastlogin' => '上次登陆',
+ 'save' => 'ä¿å­˜',
+ 'publish' => 'å‘布',
+ 'cancel' => 'å–消',
+ 'saving' => 'ä¿å­˜ä¸­',
+ 'update' => 'æ›´æ–°',
+ 'edit' => '编辑',
+ 'delete' => '删除',
+ 'accept' => '接å—',
+ 'load' => '加载',
+ 'upload' => '上传',
+ 'ban' => 'å±è”½',
+ 'unban' => 'å–消å±è”½',
+ 'enable' => '激活',
+ 'disable' => 'å–消激活',
+ 'request' => '请求',
+ 'complete' => '完æˆ',
+ 'open' => '打开',
+ 'close' => '关闭',
+ 'reply' => '回å¤',
+ 'more' => '更多',
+ 'comments' => '评论',
+ 'import' => '导入',
+ 'export' => '导出',
+ 'up' => 'æ高',
+ 'down' => 'é™ä½Ž',
+ 'top' => '置顶',
+ 'bottom' => '置底',
+ 'invite' => '邀请',
+ 'resetpassword' => 'é‡ç½®å¯†ç ',
+ 'makeadmin' => '设为管ç†å‘˜',
+ 'removeadmin' => '删除管ç†å‘˜',
+ 'option:yes' => '是',
+ 'option:no' => 'å¦',
+ 'unknown' => '未知',
+ 'active' => '激活',
+ 'total' => '总共',
+ 'learnmore' => '点击查看更多.',
+ 'content' => '内容',
+ 'content:latest' => '最近活动',
+ 'content:latest:blurb' => '或者,点击这里查看网站最新内容。',
+ 'link:text' => '查看链接',
+ 'question:areyousure' => '确认�',
+ 'title' => '标题',
+ 'description' => 'æè¿°',
+ 'tags' => '标签',
+ 'spotlight' => '关注',
+ 'all' => '所有',
+ 'by' => 'ç”±',
+ 'annotations' => '注释',
+ 'relationships' => '关系',
+ 'metadata' => '元数æ®',
+ 'deleteconfirm' => '您确认删除这个项目?',
+ 'fileexists' => '一个文件已ç»ä¸Šä¼ å¥½äº†ã€‚è¦æ›¿æ¢è¯¥æ–‡ä»¶ï¼Œé€‰æ‹©ä¸‹æ–¹:',
+ 'useradd:subject' => '用户å¸æˆ·å»ºç«‹å¥½äº†',
+ 'useradd:body' => '%s 您好,
+
+ 您在 %s 注册æˆåŠŸäº†.登录请访问:
+
+ %s
+
+ 以下是登录信æ¯:
+
+ 用户å: %s
+ 密ç : %s
+
+ 一旦您登录,我们强烈建议您更改自己的密ç .',
+ 'systemmessages:dismiss' => '点击关闭',
+ 'importsuccess' => '导入数æ®æˆåŠŸ',
+ 'importfail' => 'OpenDD 导入数æ®å¤±è´¥ã€‚',
+ 'friendlytime:justnow' => '刚æ‰',
+ 'friendlytime:minutes' => '%s 分钟å‰',
+ 'friendlytime:minutes:singular' => '一分钟å‰',
+ 'friendlytime:hours' => '%s å°æ—¶å‰',
+ 'friendlytime:hours:singular' => '一å°æ—¶å‰',
+ 'friendlytime:days' => '%s 天å‰',
+ 'friendlytime:days:singular' => '昨天',
+ 'date:month:01' => '一月 %s',
+ 'date:month:02' => '二月 %s',
+ 'date:month:03' => '三月 %s',
+ 'date:month:04' => '四月 %s',
+ 'date:month:05' => '五月 %s',
+ 'date:month:06' => '六月 %s',
+ 'date:month:07' => '七月 %s',
+ 'date:month:08' => '八月 %s',
+ 'date:month:09' => 'ä¹æœˆ %s',
+ 'date:month:10' => 'å月 %s',
+ 'date:month:11' => 'å一月 %s',
+ 'date:month:12' => 'å二月 %s',
+ 'installation:sitename' => '网站å称 (例如 "ElggSNS.CN中文社区"):',
+ 'installation:sitedescription' => '简è¦ä»‹ç» (å¯é€‰)',
+ 'installation:wwwroot' => '网站URL,最åŽåŒ…括åæ–œæ ',
+ 'installation:path' => '您网站根目录的完整路径,最åŽåŒ…括åæ–œæ ',
+ 'installation:dataroot' => '上传目录的完整路径,最åŽåŒ…括åæ–œæ ',
+ 'installation:dataroot:warning' => '请手动建立好目录. 它必须是一个和elgg安装目录ä¸åŒçš„ä½ç½®',
+ 'installation:sitepermissions' => '默认访问æƒé™:',
+ 'installation:language' => '默认网站语言:',
+ 'installation:debug' => 'Debug 模å¼ç»™äºŽäº†é¢å¤–çš„ä¿¡æ¯æ–¹ä¾¿æ‚¨è°ƒè¯•é”™è¯¯.当然这会让系统å˜æ…¢.因此仅在有错误的时候æ‰å»ºè®®å¼€å¯:',
+ 'installation:debug:none' => 'å¼€å¯Debug模å¼',
+ 'installation:debug:error' => 'åªæ˜¾ç¤ºå…³é”®é”™è¯¯',
+ 'installation:debug:warning' => '显示错误和警告',
+ 'installation:debug:notice' => '记录所有错误,警告和æ醒',
+ 'installation:httpslogin' => 'å¼€å¯å°†ä½¿ç”¨æˆ·ç™»å½•ç­‰æ“作使用HTTPS.您需è¦ç¡®ä¿æ‚¨çš„æœåŠ¡å™¨æ”¯æŒhttps',
+ 'installation:httpslogin:label' => 'å¼€å¯HTTPS登录',
+ 'installation:view' => '输入默认网站使用的视图(如果有疑问请默认留空)',
+ 'installation:siteemail' => '站点邮箱地å€(用æ¥å‘é€ç³»ç»Ÿé‚®ä»¶)',
+ 'installation:disableapi' => 'RESTful API 是一个弹性和高拓展性的接å£,ç¡®ä¿äº†å…¶ä»–外部系统å¯ä»¥è®¿é—®Elgg',
+ 'installation:disableapi:label' => 'å¼€å¯ RESTful API',
+ 'installation:allow_user_default_access:description' => '如果选中,æ¯ä¸ªç”¨æˆ·å°†ä¼šè¢«å…许设置自己的内容æƒé™.',
+ 'installation:allow_user_default_access:label' => 'å…许用户设定æƒé™',
+ 'installation:simplecache:description' => '通过统计包括CSSå’ŒJavaScript这类内容,利用基本缓存机制æ¥æ高性能.通常您会需è¦å¼€å¯è¯¥åŠŸèƒ½',
+ 'installation:simplecache:label' => '使用基本缓存机制',
+ 'upgrading' => 'å‡çº§',
+ 'upgrade:db' => '您的数æ®åº“å·²ç»å‡çº§å¥½äº†',
+ 'upgrade:core' => '您的系统已ç»å‡çº§å¥½äº†',
+ 'welcome' => '欢迎',
+ 'welcome:user' => '欢迎 %s',
+ 'email:settings' => '邮件设定',
+ 'email:address:label' => '您的邮箱地å€',
+ 'email:save:success' => '新的邮箱地å€ä¿å­˜å¥½äº†ï¼Œç­‰å¾…验è¯ã€‚',
+ 'email:save:fail' => '您新的邮箱地å€æ— æ³•ä¿å­˜ã€‚',
+ 'friend:newfriend:subject' => '%s 加您为好å‹ï¼',
+ 'friend:newfriend:body' => '%s 加您为好å‹ï¼
+
+ 查看他的个人信æ¯ï¼Œç‚¹å‡»:
+
+ %s
+
+ 请ä¸è¦å›žå¤æœ¬é‚®ä»¶',
+ 'email:resetpassword:subject' => '密ç é‡ç½®ï¼',
+ 'email:resetpassword:body' => '您好 %s,
+
+ 您的密ç å·²ç»é‡ç½®ä¸º: %s',
+ 'email:resetreq:subject' => '请求新密ç ',
+ 'email:resetreq:body' => '您好 %s,
+
+ 有人 (IP地å€ä¸º %s) 请求新的密ç è®¾ç½®ã€‚
+
+ 如果使您申请的点击下方链接,ä¸ç„¶è¯·å¿½ç•¥æœ¬é‚®ä»¶
+
+ %s
+ ',
+ 'default_access:settings' => '您的默认访问æƒé™',
+ 'default_access:label' => '默认访问æƒé™',
+ 'user:default_access:success' => '你的默认访问æƒé™å·²ç»è®¾å®šå¥½äº†',
+ 'user:default_access:failure' => '您的默认访问æƒé™æ— æ³•ä¿å­˜.',
+ 'xmlrpc:noinputdata' => '输入数æ®ä¸¢å¤±',
+ 'comments:count' => '%s 评论',
+ 'riveraction:annotation:generic_comment' => '%s 对 %s åšå‡ºäº†è¯„论',
+ 'generic_comments:add' => '添加评论',
+ 'generic_comments:text' => '评论',
+ 'generic_comment:posted' => '您的评论已ç»å‘表了。',
+ 'generic_comment:deleted' => '您的评论已ç»åˆ é™¤äº†ã€‚',
+ 'generic_comment:blank' => '对ä¸èµ·ï¼Œåœ¨å‘表评论å‰è¯·è¾“入内容。',
+ 'generic_comment:notfound' => '对ä¸èµ·æˆ‘们找ä¸åˆ°æŒ‡å®šè¯„论。',
+ 'generic_comment:notdeleted' => '对ä¸èµ·ï¼Œæˆ‘们删除ä¸äº†è¯¥è¯„论。',
+ 'generic_comment:failure' => '在添加评论的时候我们é‡åˆ°äº†ä¸€ä¸ªå¼‚常,请å†è¯•ä¸€æ¬¡ã€‚',
+ 'generic_comment:email:subject' => '您的评论已ç»å‘布ï¼',
+ 'generic_comment:email:body' => '您收到一æ¡è¯„论在 "%s" 上,æ¥è‡ª %s。内容是:
+
+
+ %s
+
+
+ è¦å›žå¤æˆ–者查看项目,点击:
+
+ %s
+
+ è¦æŸ¥çœ‹è¯„论者 %s 的个人资料,点击:
+
+ %s
+
+ 请ä¸è¦å›žå¤æœ¬é‚®ä»¶ã€‚',
+ 'entity:default:strapline' => ' %s 由 %s 创建',
+ 'entity:default:missingsupport:popup' => '本实体å¯èƒ½æ˜¾ç¤ºä¸æ­£ç¡®ã€‚这是因为æ’件å¯èƒ½ä¸å…¼å®¹æˆ–者需è¦å‡çº§ã€‚',
+ 'entity:delete:success' => '实体 %s å·²ç»è¢«åˆ é™¤äº†',
+ 'entity:delete:fail' => '实体 %s 删除失败',
+ 'actiongatekeeper:missingfields' => '表å•ç¼ºå°‘ __token 或者 __ts 域',
+ 'actiongatekeeper:tokeninvalid' => '表å•éªŒè¯å’ŒæœåŠ¡å™¨çš„ä¸ä¸€è‡´ã€‚',
+ 'actiongatekeeper:timeerror' => '表å•è¿‡æœŸäº†ï¼Œè¯·é‡æ–°ç™»é™†æˆ–者å†æ¬¡åˆ·æ–°é¡µé¢ã€‚',
+ 'actiongatekeeper:pluginprevents' => 'æ’件å±è”½äº†è¿™æ¬¡è¡¨å•çš„æ交。',
+ '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',
+ 'aa' => 'Afar',
+ 'ab' => 'Abkhazian',
+ 'af' => 'Afrikaans',
+ 'am' => 'Amharic',
+ 'ar' => '阿拉伯语',
+ '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' => 'æ·å…‹è¯­',
+ 'cy' => 'å¨å°”士语',
+ 'da' => 'Danish',
+ 'de' => '德语',
+ 'dz' => 'Bhutani',
+ 'el' => '希腊语',
+ 'en' => '英语',
+ 'eo' => 'Esperanto',
+ 'es' => '西ç­ç‰™è¯­',
+ 'et' => 'Estonian',
+ 'eu' => 'Basque',
+ 'fa' => 'Persian',
+ 'fi' => '芬兰语',
+ 'fj' => 'Fiji',
+ 'fo' => 'Faeroese',
+ 'fr' => '法语',
+ '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' => 'å°åº¦å°¼è¥¿äºšè¯­',
+ 'ie' => 'Interlingue',
+ 'ik' => 'Inupiak',
+ 'is' => 'Icelandic',
+ 'it' => 'Italian',
+ 'iu' => 'Inuktitut',
+ 'iw' => 'Hebrew (obsolete)',
+ 'ja' => '日语',
+ 'ji' => 'Yiddish (obsolete)',
+ 'jw' => 'Javanese',
+ 'ka' => 'Georgian',
+ 'kk' => 'Kazakh',
+ 'kl' => 'Greenlandic',
+ 'km' => 'Cambodian',
+ 'kn' => 'Kannada',
+ 'ko' => '韩语',
+ 'ks' => 'Kashmiri',
+ 'ku' => 'Kurdish',
+ 'ky' => 'Kirghiz',
+ 'la' => '拉ä¸è¯­',
+ 'ln' => 'Lingala',
+ 'lo' => 'Laothian',
+ 'lt' => '拉脱维亚语',
+ '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' => 'è·å…°è¯­',
+ 'no' => 'Norwegian',
+ 'oc' => 'Occitan',
+ 'om' => '(Afan) Oromo',
+ 'or' => 'Oriya',
+ 'pa' => 'Punjabi',
+ 'pl' => 'Polish',
+ 'ps' => 'Pashto / Pushto',
+ 'pt' => 'è‘¡è„牙语',
+ 'qu' => 'Quechua',
+ 'rm' => 'Rhaeto-Romance',
+ 'rn' => 'Kirundi',
+ 'ro' => '罗马尼亚语',
+ 'ru' => '俄语',
+ 'rw' => 'Kinyarwanda',
+ 'sa' => 'Sanskrit',
+ 'sd' => 'Sindhi',
+ 'sg' => 'Sangro',
+ 'sh' => 'Serbo-Croatian',
+ 'si' => 'Singhalese',
+ 'sk' => '斯洛ä¼å…‹è¯­',
+ 'sl' => '斯洛文尼亚语',
+ 'sm' => 'Samoan',
+ 'sn' => 'Shona',
+ 'so' => 'Somali',
+ 'sq' => '阿尔巴尼亚语',
+ 'sr' => 'Serbian',
+ 'ss' => 'Siswati',
+ 'st' => 'Sesotho',
+ 'su' => 'Sundanese',
+ 'sv' => '瑞典语',
+ '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' => '乌兹别克语',
+ 'vi' => 'Vietnamese',
+ 'vo' => 'Volapuk',
+ 'wo' => 'Wolof',
+ 'xh' => 'Xhosa',
+ 'yi' => 'Yiddish',
+ 'yo' => 'Yoruba',
+ 'za' => 'Zuang',
+ 'zh' => '中文',
+ 'zu' => 'Zulu',
+);
+
+add_translation("zh", $zh);
+
diff --git a/mod/languages/languages/zh/zh.profile.php b/mod/languages/languages/zh/zh.profile.php
new file mode 100644
index 000000000..940ab2058
--- /dev/null
+++ b/mod/languages/languages/zh/zh.profile.php
@@ -0,0 +1,8 @@
+<?php
+$zh = array (
+ 'profile' => '档案',
+ 'profile:notfound' => '对ä¸èµ·ï¼›æˆ‘们没有找到指定的个人资料。',
+);
+
+add_translation("zh", $zh);
+
diff --git a/mod/languages/manifest.xml b/mod/languages/manifest.xml
new file mode 100644
index 000000000..48f2b55c5
--- /dev/null
+++ b/mod/languages/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>Elgg Translation Pack</name>
+ <author>Lorea</author>
+ <version>1.8.0</version>
+ <category>language</category>
+ <description>Compilation of some elgg translation packs.</description>
+ <website>https://www.lorea.org/</website>
+ <copyright>See README.txt</copyright>
+ <license>GNU General Public License, version 2 or later</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/languages/start.php b/mod/languages/start.php
new file mode 100644
index 000000000..1b392dd49
--- /dev/null
+++ b/mod/languages/start.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Languages plugin
+ *
+ */
+
+elgg_register_event_handler('init', 'system', 'languages_init');
+
+function languages_init() {
+
+ register_translations(elgg_get_plugins_path() . "languages/languages/es");
+ register_translations(elgg_get_plugins_path() . "languages/languages/nl");
+ register_translations(elgg_get_plugins_path() . "languages/languages/de");
+ register_translations(elgg_get_plugins_path() . "languages/languages/pt");
+ register_translations(elgg_get_plugins_path() . "languages/languages/fr");
+ register_translations(elgg_get_plugins_path() . "languages/languages/ca");
+ register_translations(elgg_get_plugins_path() . "languages/languages/da");
+ register_translations(elgg_get_plugins_path() . "languages/languages/eu");
+ register_translations(elgg_get_plugins_path() . "languages/languages/gl");
+ register_translations(elgg_get_plugins_path() . "languages/languages/it");
+ register_translations(elgg_get_plugins_path() . "languages/languages/ja");
+ register_translations(elgg_get_plugins_path() . "languages/languages/sr");
+ register_translations(elgg_get_plugins_path() . "languages/languages/th");
+ register_translations(elgg_get_plugins_path() . "languages/languages/zh");
+
+ if (!elgg_is_logged_in()) {
+ global $CONFIG;
+ if ($useragent_language = languages_get_useragent_language()) {
+ $CONFIG->language = $useragent_language;
+ }
+ }
+
+}
+
+function languages_get_useragent_language() {
+ global $CONFIG;
+ if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) {
+
+ register_translations($CONFIG->path . "languages/", true);
+
+ $available_languages = array_keys($CONFIG->translations);
+ $accepted_languages = explode(',', $_SERVER["HTTP_ACCEPT_LANGUAGE"]);
+
+ foreach ($accepted_languages as $i => $accepted_language) {
+ $accepted_languages[$i] = trim(array_shift(preg_split("/[-;]/", $accepted_language)));
+ }
+
+ $langs = array_intersect($accepted_languages, $available_languages);
+ if (count($langs) > 0) {
+ return array_shift($langs);
+ }
+ return false;
+ }
+}
+
diff --git a/mod/languages/views/default/js/languages/ca.php b/mod/languages/views/default/js/languages/ca.php
new file mode 100644
index 000000000..73d4ac1bc
--- /dev/null
+++ b/mod/languages/views/default/js/languages/ca.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'ca'));
diff --git a/mod/languages/views/default/js/languages/da.php b/mod/languages/views/default/js/languages/da.php
new file mode 100644
index 000000000..1c82510a9
--- /dev/null
+++ b/mod/languages/views/default/js/languages/da.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'da'));
diff --git a/mod/languages/views/default/js/languages/de.php b/mod/languages/views/default/js/languages/de.php
new file mode 100644
index 000000000..216b49ff1
--- /dev/null
+++ b/mod/languages/views/default/js/languages/de.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'de')); \ No newline at end of file
diff --git a/mod/languages/views/default/js/languages/en.php b/mod/languages/views/default/js/languages/en.php
new file mode 100644
index 000000000..2c78e400e
--- /dev/null
+++ b/mod/languages/views/default/js/languages/en.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'en'));
diff --git a/mod/languages/views/default/js/languages/es.php b/mod/languages/views/default/js/languages/es.php
new file mode 100644
index 000000000..26cbd9103
--- /dev/null
+++ b/mod/languages/views/default/js/languages/es.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'es'));
diff --git a/mod/languages/views/default/js/languages/eu.php b/mod/languages/views/default/js/languages/eu.php
new file mode 100644
index 000000000..bf80b3eda
--- /dev/null
+++ b/mod/languages/views/default/js/languages/eu.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'eu'));
diff --git a/mod/languages/views/default/js/languages/fr.php b/mod/languages/views/default/js/languages/fr.php
new file mode 100644
index 000000000..a3f36b2cd
--- /dev/null
+++ b/mod/languages/views/default/js/languages/fr.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'fr'));
diff --git a/mod/languages/views/default/js/languages/gl.php b/mod/languages/views/default/js/languages/gl.php
new file mode 100644
index 000000000..7efd26d4f
--- /dev/null
+++ b/mod/languages/views/default/js/languages/gl.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'gl'));
diff --git a/mod/languages/views/default/js/languages/it.php b/mod/languages/views/default/js/languages/it.php
new file mode 100644
index 000000000..bd543a381
--- /dev/null
+++ b/mod/languages/views/default/js/languages/it.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'it'));
diff --git a/mod/languages/views/default/js/languages/ja.php b/mod/languages/views/default/js/languages/ja.php
new file mode 100644
index 000000000..76ef44599
--- /dev/null
+++ b/mod/languages/views/default/js/languages/ja.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'ja'));
diff --git a/mod/languages/views/default/js/languages/nl.php b/mod/languages/views/default/js/languages/nl.php
new file mode 100644
index 000000000..d5d6c77bd
--- /dev/null
+++ b/mod/languages/views/default/js/languages/nl.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'nl'));
diff --git a/mod/languages/views/default/js/languages/pt.php b/mod/languages/views/default/js/languages/pt.php
new file mode 100644
index 000000000..4b6ac08c4
--- /dev/null
+++ b/mod/languages/views/default/js/languages/pt.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'pt'));
diff --git a/mod/languages/views/default/js/languages/sr.php b/mod/languages/views/default/js/languages/sr.php
new file mode 100644
index 000000000..e04642848
--- /dev/null
+++ b/mod/languages/views/default/js/languages/sr.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'sr'));
diff --git a/mod/languages/views/default/js/languages/th.php b/mod/languages/views/default/js/languages/th.php
new file mode 100644
index 000000000..058b46f5e
--- /dev/null
+++ b/mod/languages/views/default/js/languages/th.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'th'));
diff --git a/mod/languages/views/default/js/languages/zh.php b/mod/languages/views/default/js/languages/zh.php
new file mode 100644
index 000000000..662fb8cf1
--- /dev/null
+++ b/mod/languages/views/default/js/languages/zh.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'zh'));
diff --git a/mod/less b/mod/less
new file mode 160000
+Subproject 380edadb3a5e524a8e6ef6df063b678f2f00516
diff --git a/mod/lightbox b/mod/lightbox
new file mode 160000
+Subproject a83b8d89691c31b4568f47790fb40d0bc962aca
diff --git a/mod/lightpics/CONFIG.txt b/mod/lightpics/CONFIG.txt
new file mode 100644
index 000000000..0bfb8513d
--- /dev/null
+++ b/mod/lightpics/CONFIG.txt
@@ -0,0 +1,73 @@
+
+Troubleshooting
+=================
+If you are experiencing errors, please check your server error log. Tidypics
+writes warnings for most upload related problems. You will see something
+along these lines: "Tidypics warning: user exceeded post limit on image upload"
+
+
+GD PHP Image Library
+=====================
+Elgg requires GD for image resizing of profile avatars. Tidypics uses GD by
+default for resizing. There are two versions GD and GD2. It generally does not matter
+which one you are using and it isn't always apparent which one you are
+running anyway. GD is a memory hog and will cause problems with large images.
+
+imagick PHP Image Library
+=============================
+A significantly better image library than GD. Not as common as GD. You may need
+to ask your system administrator to install this. The server info tab in Tidypics
+settings will tell you whether it is installed.
+
+ImageMagick command line tools
+===============================
+This requires that the PHP function exec() is available which is often disbaled
+for security reasons. You can find ImageMagick on your server by running "which convert".
+
+Memory Available to PHP
+=========================
+The amount of RAM available to a single PHP process. This can have an effect on
+how large an image you can resize (especially if you are running Tidypics with GD).
+The best place to change it is .htaccess.
+
+Memory Used to Load This Page
+==============================
+This gives you a baseline of how much memory is being used to load the Elgg
+framework and plugins. Subtract this number from the total amount of memory available
+for image processing. Remember that GD requires a lot of memory - more than just the
+size of the image.
+
+Max File Upload Size
+=======================
+The largest file that can be uploaded. You can adjust this in .htaccess.
+
+Max Post Size
+===============
+The largest amount of data that can be submitted. For Tidypics, this affects
+how many large images can be uploaded in a single upload with the basic uploader.
+If this is exceeded, nothing is uploaded and the user gets an error message.
+It can be adjusted in .htaccess.
+
+Max Input Time
+===============
+This is the amount of time PHP will wait for an upload to finish. Your users may
+experience failures if they are uploading large images on a poor connection or if
+your server does not have a lot of bandwidth.
+
+Max Execution Time
+===================
+The longest time a PHP script can run on your server. If a user uploads many
+large images, the resize code may take a long time to complete and will be
+stopped by PHP. If you are seeing problems with this, you probably have a slow server.
+
+GD imagejpeg
+===============
+This tells you whether you can resize JPEG images with GD
+
+GD imagegif
+===============
+This tells you whether you can resize GIF images with GD
+
+GD imagepng
+===============
+This tells you whether you can resize PNG images with GD
diff --git a/mod/lightpics/FAQ.txt b/mod/lightpics/FAQ.txt
new file mode 100644
index 000000000..2f0de8165
--- /dev/null
+++ b/mod/lightpics/FAQ.txt
@@ -0,0 +1,31 @@
+White screen when uploading images
+==================================
+Tidypics tries to calculate the maximum size of an image that your server will support. If it
+guesses incorrectly and someone uploads a photo that is too large, the script may crash when
+resizing the image if you are using GD. The easiest way to test this is to set display_errors
+to 1 in your .htaccess file and upload large images. If this causes a problem, a php memory error
+should display on the screen. You can increased your php memory limit. A better option is to use
+imagick if your server supports it (again see the docs directory).
+
+If it is not a memory issue, you should see some other error appear. Once you have fixed the error,
+change display_error back to 0.
+
+
+Question mark images appear
+===========================
+If you see question mark images when you look at your albums, this means the resizing of the images
+failed. This could be due to the memory limits as described above. There are other causes. Tidypics
+tries to detect these problems and write the cause to the error log. You should check your server
+error log right after an upload that results in a question mark for these error messages. The messages
+will begin with "Tidypics warning:". It is possible if you have turned off php warnings that you will
+not see these warnings.
+
+Another possible cause is using command line ImageMagick when your server does not
+support it or specifying the wrong path to the ImageMagick executables.
+
+
+Unable to save settings
+=======================
+If you are unable to settings, Apache may be configured to block pages that use
+file paths as Tidypics does when setting the location of the ImageMagick executable.
+In this case, leave that field blank.
diff --git a/mod/lightpics/actions/photos/admin/create_thumbnails.php b/mod/lightpics/actions/photos/admin/create_thumbnails.php
new file mode 100644
index 000000000..dfb5d4ed1
--- /dev/null
+++ b/mod/lightpics/actions/photos/admin/create_thumbnails.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Tidypics Thumbnail Creation Test
+ *
+ * Called through ajax, but registered as an Elgg action.
+ *
+ */
+
+elgg_load_library('tidypics:resize');
+
+$guid = get_input('guid');
+$image = get_entity($guid);
+
+if (!$image || !($image instanceof TidypicsImage)) {
+ register_error(elgg_echo('tidypics:thumbnail_tool:unknown_image'));
+ forward(REFERER);
+}
+
+$filename = $image->getFilename();
+$container_guid = $image->container_guid;
+if (!$filename || !$container_guid) {
+ register_error(elgg_echo('tidypics:thumbnail_tool:invalid_image_info'));
+ forward(REFERER);
+}
+
+$title = $image->getTitle();
+$prefix = "image/$container_guid/";
+$filestorename = substr($filename, strlen($prefix));
+
+$image_lib = elgg_get_plugin_setting('image_lib', 'tidypics');
+if (!$image_lib) {
+ $image_lib = "GD";
+}
+
+// ImageMagick command line
+if ($image_lib == 'ImageMagick') {
+ if (!tp_create_im_cmdline_thumbnails($image, $prefix, $filestorename)) {
+ trigger_error('Tidypics warning: failed to create thumbnails - ImageMagick command line', E_USER_WARNING);
+ register_error(elgg_echo('tidypics:thumbnail_tool:create_failed'));
+ forward(REFERER);
+ }
+
+// imagick PHP extension
+} else if ($image_lib == 'ImageMagickPHP') {
+ if (!tp_create_imagick_thumbnails($image, $prefix, $filestorename)) {
+ trigger_error('Tidypics warning: failed to create thumbnails - ImageMagick PHP', E_USER_WARNING);
+ register_error(elgg_echo('tidypics:thumbnail_tool:create_failed'));
+ forward(REFERER);
+ }
+// gd
+} else {
+ if (!tp_create_gd_thumbnails($image, $prefix, $filestorename)) {
+ trigger_error('Tidypics warning: failed to create thumbnails - GD', E_USER_WARNING);
+ register_error(elgg_echo('tidypics:thumbnail_tool:create_failed'));
+ forward(REFERER);
+ }
+}
+
+$url = elgg_normalize_url("photos/thumbnail/$guid/large");
+system_message(elgg_echo('tidypics:thumbnail_tool:created'));
+
+if (elgg_is_xhr()) {
+ echo json_encode(array(
+ 'guid' => $guid,
+ 'title' => $title,
+ 'thumbnail_src' => $url
+ ));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/mod/lightpics/actions/photos/admin/imtest.php b/mod/lightpics/actions/photos/admin/imtest.php
new file mode 100644
index 000000000..a58643d0e
--- /dev/null
+++ b/mod/lightpics/actions/photos/admin/imtest.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Tidypics ImageMagick Location Test
+ *
+ * Called through ajax. Not a registered Elgg action.
+ */
+
+$location = $_GET['location'];
+
+$command = $location . "convert -version";
+
+$result = system($command, $return_val);
+
+if ($return_val == 0) {
+ echo $result;
+} else {
+ echo "Unable to run ImageMagick. Please check the path.";
+}
diff --git a/mod/lightpics/actions/photos/admin/settings.php b/mod/lightpics/actions/photos/admin/settings.php
new file mode 100644
index 000000000..aa607756d
--- /dev/null
+++ b/mod/lightpics/actions/photos/admin/settings.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Save Tidypics plugin settings
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$params = get_input('params');
+foreach ($params as $k => $v) {
+ if (!elgg_set_plugin_setting($k, $v, 'lightpics')) {
+ register_error(elgg_echo('plugins:settings:save:fail', array('lightpics')));
+ forward(REFERER);
+ }
+}
+
+// image sizes
+$image_sizes = array();
+$image_sizes['large_image_width'] = get_input('large_image_width');
+$image_sizes['large_image_height'] = get_input('large_image_height');
+$image_sizes['small_image_width'] = get_input('small_image_width');
+$image_sizes['small_image_height'] = get_input('small_image_height');
+$image_sizes['tiny_image_width'] = get_input('tiny_image_width');
+$image_sizes['tiny_image_height'] = get_input('tiny_image_height');
+elgg_set_plugin_setting('image_sizes', serialize($image_sizes), 'lightpics');
+
+
+system_message(elgg_echo('tidypics:settings:save:ok'));
+forward(REFERER);
diff --git a/mod/lightpics/actions/photos/admin/upgrade.php b/mod/lightpics/actions/photos/admin/upgrade.php
new file mode 100644
index 000000000..db09ed035
--- /dev/null
+++ b/mod/lightpics/actions/photos/admin/upgrade.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Tidypics upgrade action
+ */
+
+$plugins_path = elgg_get_plugins_path();
+
+require_once "{$plugins_path}lightpics/version.php";
+
+$local_version = elgg_get_plugin_setting('version', 'tidypics');
+
+$local_version = 2009082901;
+if ($version <= $local_version) {
+ register_error('No upgrade required');
+ forward(REFERER);
+}
+
+set_time_limit(0);
+
+$base_dir = "{$plugins_path}lightpics/upgrades";
+
+
+// taken from engine/lib/version.php
+if ($handle = opendir($base_dir)) {
+ $upgrades = array();
+
+ while ($updatefile = readdir($handle)) {
+ // Look for upgrades and add to upgrades list
+ if (!is_dir("$base_dir/$updatefile")) {
+ if (preg_match('/^([0-9]{10})\.(php)$/', $updatefile, $matches)) {
+ $plugin_version = (int) $matches[1];
+ if ($plugin_version > $local_version) {
+ $upgrades[] = "$base_dir/$updatefile";
+ }
+ }
+ }
+ }
+
+ // Sort and execute
+ asort($upgrades);
+
+ if (sizeof($upgrades) > 0) {
+ foreach ($upgrades as $upgrade) {
+ include($upgrade);
+ }
+ }
+}
+
+elgg_set_plugin_setting('version', $version, 'tidypics');
+
+system_message("Tidypics has been upgraded");
+forward(REFERER);
diff --git a/mod/lightpics/actions/photos/album/save.php b/mod/lightpics/actions/photos/album/save.php
new file mode 100644
index 000000000..cc7181678
--- /dev/null
+++ b/mod/lightpics/actions/photos/album/save.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Save album action
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+
+// Get input data
+$title = get_input('title');
+$description = get_input('description');
+$tags = get_input('tags');
+$access_id = get_input('access_id');
+$container_guid = get_input('container_guid', elgg_get_logged_in_user_guid());
+$guid = get_input('guid');
+
+elgg_make_sticky_form('tidypics');
+
+if (empty($title)) {
+ register_error(elgg_echo("album:blank"));
+ forward(REFERER);
+}
+
+if ($guid) {
+ $album = get_entity($guid);
+} else {
+ $album = new TidypicsAlbum();
+}
+
+$album->container_guid = $container_guid;
+$album->owner_guid = elgg_get_logged_in_user_guid();
+$album->access_id = $access_id;
+$album->title = $title;
+$album->description = $description;
+if ($tags) {
+ $album->tags = string_to_tag_array($tags);
+}
+
+if (!$album->save()) {
+ register_error(elgg_echo("album:error"));
+ forward(REFERER);
+}
+
+elgg_clear_sticky_form('tidypics');
+
+system_message(elgg_echo("album:created"));
+forward($album->getURL());
diff --git a/mod/lightpics/actions/photos/album/set_cover.php b/mod/lightpics/actions/photos/album/set_cover.php
new file mode 100644
index 000000000..b37bb9c90
--- /dev/null
+++ b/mod/lightpics/actions/photos/album/set_cover.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Set album cover image
+ */
+
+// Get input data
+$album_guid = get_input('album_guid');
+$image_guid = get_input('image_guid');
+
+$album = get_entity($album_guid);
+
+if (!elgg_instanceof($album, 'object', 'album')) {
+ register_error(elgg_echo('album:invalid_album'));
+ forward(REFERER);
+}
+
+if ($album->setCoverImageGuid($image_guid)) {
+ system_message(elgg_echo('album:save_cover_image'));
+ forward(REFERER);
+} else {
+ register_error(elgg_echo('album:cannot_save_cover_image'));
+ forward(REFERER);
+} \ No newline at end of file
diff --git a/mod/lightpics/actions/photos/album/sort.php b/mod/lightpics/actions/photos/album/sort.php
new file mode 100644
index 000000000..fd62a7ba7
--- /dev/null
+++ b/mod/lightpics/actions/photos/album/sort.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Sorting album action - takes a comma separated list of image guids
+ */
+
+$album_guid = get_input('album_guid');
+$album = get_entity($album_guid);
+if (!$album) {
+
+}
+
+$guids = get_input('guids');
+$guids = explode(',', $guids);
+
+if ($album->setImageList($guids)) {
+ system_message(elgg_echo('tidypics:album:sorted', array($album->getTitle())));
+} else {
+ register_error(elgg_echo('tidypics:album:could_not_sort', array($album->getTitle())));
+}
+
+forward($album->getURL()); \ No newline at end of file
diff --git a/mod/lightpics/actions/photos/batch/edit.php b/mod/lightpics/actions/photos/batch/edit.php
new file mode 100644
index 000000000..6d376a9db
--- /dev/null
+++ b/mod/lightpics/actions/photos/batch/edit.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Edit the images in a batch
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$guids = get_input('guid');
+$titles = get_input('title');
+$captions = get_input('caption');
+$tags = get_input('tags');
+
+$not_updated = array();
+foreach ($guids as $key => $guid) {
+ $image = get_entity($guid);
+
+ if ($image->canEdit()) {
+
+ // set title appropriately
+ if ($titles[$key]) {
+ $image->title = $titles[$key];
+ } else {
+ $image->title = substr($image->originalfilename, 0, strrpos($image->originalfilename, '.'));
+ }
+
+ // set description appropriately
+ $image->description = $captions[$key];
+ $image->tags = string_to_tag_array($tags[$key]);
+
+ if (!$image->save()) {
+ array_push($not_updated, $image->getGUID());
+ }
+ }
+}
+
+if (count($not_updated) > 0) {
+ register_error(elgg_echo("images:notedited"));
+} else {
+ system_message(elgg_echo("images:edited"));
+}
+forward($image->getContainerEntity()->getURL());
diff --git a/mod/lightpics/actions/photos/delete.php b/mod/lightpics/actions/photos/delete.php
new file mode 100644
index 000000000..f8d194e55
--- /dev/null
+++ b/mod/lightpics/actions/photos/delete.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Delete album or image
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$guid = (int) get_input('guid');
+$entity = get_entity($guid);
+if (!$entity) {
+ // unable to get Elgg entity
+ register_error(elgg_echo("tidypics:deletefailed"));
+ forward(REFERER);
+}
+
+if (!$entity->canEdit()) {
+ // user doesn't have permissions
+ register_error(elgg_echo("tidypics:deletefailed"));
+ forward(REFERER);
+}
+
+$container = $entity->getContainerEntity();
+
+$subtype = $entity->getSubtype();
+switch ($subtype) {
+ case 'album':
+ if (elgg_instanceof($container, 'user')) {
+ $forward_url = "photos/owner/$container->username";
+ } else {
+ $forward_url = "photos/group/$container->guid/all";
+ }
+ break;
+ case 'image':
+ $forward_url = $container->getURL();
+ break;
+ default:
+ forward(REFERER);
+ break;
+}
+
+if ($entity->delete()) {
+ system_message(elgg_echo("tidypics:deleted"));
+} else {
+ register_error(elgg_echo("tidypics:deletefailed"));
+}
+
+forward($forward_url);
diff --git a/mod/lightpics/actions/photos/image/save.php b/mod/lightpics/actions/photos/image/save.php
new file mode 100644
index 000000000..1cb65b1e8
--- /dev/null
+++ b/mod/lightpics/actions/photos/image/save.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Save image action
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+// Get input data
+$title = get_input('title');
+$description = get_input('description');
+$tags = get_input('tags');
+$access_id = get_input('access_id');
+$guid = get_input('guid');
+
+elgg_make_sticky_form('tidypics');
+
+if (empty($title)) {
+ register_error(elgg_echo("image:blank"));
+ forward(REFERER);
+}
+
+$image = get_entity($guid);
+
+$image->access_id = $access_id;
+$image->title = $title;
+$image->description = $description;
+if ($tags) {
+ $image->tags = string_to_tag_array($tags);
+}
+
+if (!$image->save()) {
+ register_error(elgg_echo("image:error"));
+ forward(REFERER);
+}
+
+elgg_clear_sticky_form('tidypics');
+
+system_message(elgg_echo("image:saved"));
+forward($image->getURL());
diff --git a/mod/lightpics/actions/photos/image/upload.php b/mod/lightpics/actions/photos/image/upload.php
new file mode 100644
index 000000000..268712666
--- /dev/null
+++ b/mod/lightpics/actions/photos/image/upload.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Multi-image uploader action
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+elgg_load_library('tidypics:upload');
+$img_river_view = elgg_get_plugin_setting('img_river_view', 'tidypics');
+
+$guid = (int) get_input('guid');
+$album = get_entity($guid);
+if (!$album) {
+ register_error(elgg_echo('tidypics:baduploadform'));
+ forward(REFERER);
+}
+
+// post limit exceeded
+if (count($_FILES) == 0) {
+ trigger_error('Tidypics warning: user exceeded post limit on image upload', E_USER_WARNING);
+ register_error(elgg_echo('tidypics:exceedpostlimit'));
+ forward(REFERER);
+}
+
+// test to make sure at least 1 image was selected by user
+$num_images = 0;
+foreach($_FILES['images']['name'] as $name) {
+ if (!empty($name)) {
+ $num_images++;
+ }
+}
+if ($num_images == 0) {
+ // have user try again
+ register_error(elgg_echo('tidypics:noimages'));
+ forward(REFERER);
+}
+
+// create the image object for each upload
+$uploaded_images = array();
+$not_uploaded = array();
+$error_msgs = array();
+foreach ($_FILES['images']['name'] as $index => $value) {
+ $data = array();
+ foreach ($_FILES['images'] as $key => $values) {
+ $data[$key] = $values[$index];
+ }
+
+ if (empty($data['name'])) {
+ continue;
+ }
+ $name = htmlspecialchars($data['name'], ENT_QUOTES, 'UTF-8', false);
+
+ $mime = tp_upload_get_mimetype($name);
+
+ $image = new TidypicsImage();
+ $image->title = $name;
+ $image->container_guid = $album->getGUID();
+ $image->setMimeType($mime);
+ $image->access_id = $album->access_id;
+
+ try {
+ $result = $image->save($data);
+ } catch (Exception $e) {
+ array_push($not_uploaded, $name);
+ array_push($error_msgs, $e->getMessage());
+ }
+
+ if ($result) {
+ array_push($uploaded_images, $image->getGUID());
+
+ if ($img_river_view == "all") {
+ add_to_river('river/object/image/create', 'create', $image->getOwnerGUID(), $image->getGUID());
+ }
+ }
+}
+
+if (count($uploaded_images)) {
+ // Create a new batch object to contain these photos
+ $batch = new ElggObject();
+ $batch->subtype = "tidypics_batch";
+ $batch->access_id = $album->access_id;
+ $batch->container_guid = $album->getGUID();
+ if ($batch->save()) {
+ foreach ($uploaded_images as $uploaded_guid) {
+ add_entity_relationship($uploaded_guid, "belongs_to_batch", $batch->getGUID());
+ }
+ }
+
+ $album->prependImageList($uploaded_images);
+
+ // "added images to album" river
+ if ($img_river_view == "batch" && $album->new_album == false) {
+ add_to_river('river/object/tidypics_batch/create', 'create', $batch->getOwnerGUID(), $batch->getGUID());
+ }
+
+ // "created album" river
+ if ($album->new_album) {
+ $album->new_album = false;
+ $album->first_upload = true;
+
+ add_to_river('river/object/album/create', 'create', $album->getOwnerGUID(), $album->getGUID());
+
+ // "created album" notifications
+ // we throw the notification manually here so users are not told about the new album until
+ // there are at least a few photos in it
+ if ($album->shouldNotify()) {
+ object_notifications('create', 'object', $album);
+ $album->last_notified = time();
+ }
+ } else {
+ // "added image to album" notifications
+ if ($album->first_upload) {
+ $album->first_upload = false;
+ }
+
+ if ($album->shouldNotify()) {
+ object_notifications('create', 'object', $album);
+ $album->last_notified = time();
+ }
+ }
+}
+
+if (count($not_uploaded) > 0) {
+ if (count($uploaded_images) > 0) {
+ $error = sprintf(elgg_echo("tidypics:partialuploadfailure"), count($not_uploaded), count($not_uploaded) + count($uploaded_images)) . '<br />';
+ } else {
+ $error = elgg_echo("tidypics:completeuploadfailure") . '<br />';
+ }
+
+ $num_failures = count($not_uploaded);
+ for ($i = 0; $i < $num_failures; $i++) {
+ $error .= "{$not_uploaded[$i]}: {$error_msgs[$i]} <br />";
+ }
+ register_error($error);
+
+ if (count($uploaded_images) == 0) {
+ //upload failed, so forward to previous page
+ forward(REFERER);
+ } else {
+ // some images did upload so we fall through
+ }
+} else {
+ system_message(elgg_echo('tidypics:upl_success'));
+}
+
+forward("photos/edit/$batch->guid");
diff --git a/mod/lightpics/activate.php b/mod/lightpics/activate.php
new file mode 100644
index 000000000..752420a4c
--- /dev/null
+++ b/mod/lightpics/activate.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Activate Tidypics
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+// register classes
+if (get_subtype_id('object', 'album')) {
+ update_subtype('object', 'album', 'TidypicsAlbum');
+} else {
+ add_subtype('object', 'album', 'TidypicsAlbum');
+}
+if (get_subtype_id('object', 'image')) {
+ update_subtype('object', 'image', 'TidypicsImage');
+} else {
+ add_subtype('object', 'image', 'TidypicsImage');
+}
+
+// set default settings
+
+$image_sizes = array();
+$image_sizes['large_image_width'] = $image_sizes['large_image_height'] = 600;
+$image_sizes['small_image_width'] = $image_sizes['small_image_height'] = 153;
+$image_sizes['tiny_image_width'] = $image_sizes['tiny_image_height'] = 60;
+$image_sizes = serialize($image_sizes);
+
+$defaults = array(
+ 'tagging' => true,
+ 'view_count' => true,
+ 'uploader' => true,
+ 'exif' => true,
+ 'download_link' => true,
+
+ 'maxfilesize' => 5,
+ 'image_lib' => 'GD',
+
+ 'img_river_view' => 'batch',
+ 'album_river_view' => 'set',
+
+ 'image_sizes' => $image_sizes,
+
+ 'notify_interval' => 60 * 60 * 24,
+);
+
+foreach ($defaults as $name => $value) {
+ if (elgg_get_plugin_setting($name, 'lightpics') === null) {
+ elgg_set_plugin_setting($name, $value, 'lightpics');
+ }
+}
diff --git a/mod/lightpics/classes/TidypicsAlbum.php b/mod/lightpics/classes/TidypicsAlbum.php
new file mode 100644
index 000000000..0cb8bd84e
--- /dev/null
+++ b/mod/lightpics/classes/TidypicsAlbum.php
@@ -0,0 +1,375 @@
+<?php
+/**
+ * Tidypics Album class
+ *
+ * @package TidypicsAlbum
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+
+class TidypicsAlbum extends ElggObject {
+ /**
+ * Sets the internal attributes
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['subtype'] = "album";
+ }
+
+ /**
+ * Constructor
+ * @param mixed $guid
+ */
+ public function __construct($guid = null) {
+ parent::__construct($guid);
+ }
+
+ /**
+ * Save an album
+ *
+ * @return bool
+ */
+ public function save() {
+
+ if (!isset($this->new_album)) {
+ $this->new_album = true;
+ }
+
+ if (!isset($this->last_notified)) {
+ $this->last_notified = 0;
+ }
+
+ if (!parent::save()) {
+ return false;
+ }
+
+ mkdir(tp_get_img_dir() . $this->guid, 0755, true);
+
+ elgg_trigger_event('create', 'album', $this);
+
+ return true;
+ }
+
+ /**
+ * Delete album
+ *
+ * @return bool
+ */
+ public function delete() {
+
+ $this->deleteImages();
+ $this->deleteAlbumDir();
+
+ return parent::delete();
+ }
+
+ /**
+ * Get the title of the photo album
+ *
+ * @return string
+ */
+ public function getTitle() {
+ return $this->title;
+ }
+
+ /**
+ * Get the URL for this album
+ *
+ * @return string
+ */
+ public function getURL() {
+ $title = elgg_get_friendly_title($this->getTitle());
+ $url = "photos/album/$this->guid/$title";
+ return elgg_normalize_url($url);
+ }
+
+ /**
+ * Get an array of image objects
+ *
+ * @param int $limit
+ * @param int $offset
+ * @return array
+ */
+ public function getImages($limit, $offset = 0) {
+ $imageList = $this->getImageList();
+ if ($offset > count($imageList)) {
+ return array();
+ }
+
+ $imageList = array_slice($imageList, $offset, $limit);
+
+ $images = array();
+ foreach ($imageList as $guid) {
+ $images[] = get_entity($guid);
+ }
+ return $images;
+ }
+
+ /**
+ * View a list of images
+ *
+ * @param array $options Options to pass to elgg_view_entity_list()
+ * @return string
+ */
+ public function viewImages(array $options = array()) {
+ $count = $this->getSize();
+
+ if ($count == 0) {
+ return '';
+ }
+
+ $defaults = array(
+ 'count' => $count,
+ 'limit' => 16,
+ 'offset' => max(get_input('offset'), 0),
+ 'full_view' => false,
+ 'list_type' => 'gallery',
+ 'list_type_toggle' => false,
+ 'pagination' => true,
+ 'gallery_class' => 'tidypics-gallery elgg-lightbox-gallery',
+ );
+
+ $options = array_merge($defaults, (array) $options);
+ $images = $this->getImages($options['limit'], $options['offset']);
+
+ if (count($images) == 0) {
+ return '';
+ }
+
+ return elgg_view_entity_list($images, $options);
+ }
+
+ /**
+ * Returns the cover image entity
+ * @return TidypicsImage
+ */
+ public function getCoverImage() {
+ return get_entity($this->getCoverImageGuid());
+ }
+
+ /**
+ * Get the GUID of the album cover
+ *
+ * @return int
+ */
+ public function getCoverImageGuid() {
+ if ($this->getSize() == 0) {
+ return 0;
+ }
+
+ $guid = $this->cover;
+ $imageList = $this->getImageList();
+ if (!in_array($guid, $imageList)) {
+ // select random photo to be cover
+ $index = array_rand($imageList, 1);
+ $guid = $imageList[$index];
+ $this->cover = $guid;
+ }
+ return $guid;
+ }
+
+ /**
+ * Set the GUID for the album cover
+ *
+ * @param int $guid
+ * @return bool
+ */
+ public function setCoverImageGuid($guid) {
+ $imageList = $this->getImageList();
+ if (!in_array($guid, $imageList)) {
+ return false;
+ }
+ $this->cover = $guid;
+ return true;
+ }
+
+ /**
+ * Get the number of photos in the album
+ *
+ * @return int
+ */
+ public function getSize() {
+ return count($this->getImageList());
+ }
+
+ /**
+ * Returns an order list of image guids
+ *
+ * @return array
+ */
+ public function getImageList() {
+ $listString = $this->orderedImages;
+ if (!$listString) {
+ return array();
+ }
+ $list = unserialize($listString);
+
+ // if empty don't need to check the permissions.
+ if (!$list) {
+ return array();
+ }
+
+ // check access levels
+ $guidsString = implode(',', $list);
+
+ $options = array(
+ 'wheres' => array("e.guid IN ($guidsString)"),
+ 'order_by' => "FIELD(e.guid, $guidsString)",
+ 'callback' => 'tp_guid_callback',
+ 'limit' => ELGG_ENTITIES_NO_VALUE
+ );
+
+ $list = elgg_get_entities($options);
+ return $list;
+ }
+
+ /**
+ * Sets the album image order
+ *
+ * @param array $list An indexed array of image guids
+ * @return bool
+ */
+ public function setImageList($list) {
+ // validate data
+ foreach ($list as $guid) {
+ if (!filter_var($guid, FILTER_VALIDATE_INT)) {
+ return false;
+ }
+ }
+
+ $listString = serialize($list);
+ $this->orderedImages = $listString;
+ return true;
+ }
+
+ /**
+ * Add new images to the front of the image list
+ *
+ * @param array $list An indexed array of image guids
+ * @return bool
+ */
+ public function prependImageList($list) {
+ $currentList = $this->getImageList();
+ $list = array_merge($list, $currentList);
+ return $this->setImageList($list);
+ }
+
+ /**
+ * Get the previous image in the album. Wraps around to the last image if given the first.
+ *
+ * @param int $guid GUID of the current image
+ * @return TidypicsImage
+ */
+ public function getPreviousImage($guid) {
+ $imageList = $this->getImageList();
+ $key = array_search($guid, $imageList);
+ if ($key === FALSE) {
+ return null;
+ }
+ $key--;
+ if ($key < 0) {
+ return get_entity(end($imageList));
+ }
+ return get_entity($imageList[$key]);
+ }
+
+ /**
+ * Get the next image in the album. Wraps around to the first image if given the last.
+ *
+ * @param int $guid GUID of the current image
+ * @return TidypicsImage
+ */
+ public function getNextImage($guid) {
+ $imageList = $this->getImageList();
+ $key = array_search($guid, $imageList);
+ if ($key === FALSE) {
+ return null;
+ }
+ $key++;
+ if ($key >= count($imageList)) {
+ return get_entity($imageList[0]);
+ }
+ return get_entity($imageList[$key]);
+ }
+
+ /**
+ * Get the index into the album for a particular image
+ *
+ * @param int $guid GUID of the image
+ * @return int
+ */
+ public function getIndex($guid) {
+ return array_search($guid, $this->getImageList()) + 1;
+ }
+
+ /**
+ * Remove an image from the album list
+ *
+ * @param int $imageGuid
+ * @return bool
+ */
+ public function removeImage($imageGuid) {
+ $imageList = $this->getImageList();
+ $key = array_search($imageGuid, $imageList);
+ if ($key === false) {
+ return false;
+ }
+
+ unset($imageList[$key]);
+ $this->setImageList($imageList);
+
+ return true;
+ }
+
+ /**
+ * Has enough time elapsed between the last_notified and notify_interval setting?
+ *
+ * @return bool
+ */
+ public function shouldNotify() {
+ return time() - $this->last_notified > elgg_get_plugin_setting('notify_interval', 'tidypics');
+ }
+
+ /**
+ * Delete all the images in this album
+ *
+ * @todo ElggBatch?
+ */
+ protected function deleteImages() {
+ $images = elgg_get_entities(array(
+ "type=" => "object",
+ "subtype" => "image",
+ "container_guid" => $this->guid,
+ "limit" => ELGG_ENTITIES_NO_VALUE,
+ ));
+ if ($images) {
+ foreach ($images as $image) {
+ if ($image) {
+ $image->delete();
+ }
+ }
+ }
+ }
+
+ /**
+ * Delete the album directory on disk
+ */
+ protected function deleteAlbumDir() {
+ $tmpfile = new ElggFile();
+ $tmpfile->setFilename('image/' . $this->guid . '/._tmp_del_tidypics_album_');
+ $tmpfile->subtype = 'image';
+ $tmpfile->owner_guid = $this->owner_guid;
+ $tmpfile->container_guid = $this->guid;
+ $tmpfile->open("write");
+ $tmpfile->write('');
+ $tmpfile->close();
+ $tmpfile->save();
+ $albumdir = eregi_replace('/._tmp_del_tidypics_album_', '', $tmpfile->getFilenameOnFilestore());
+ $tmpfile->delete();
+ if (is_dir($albumdir)) {
+ rmdir($albumdir);
+ }
+ }
+}
diff --git a/mod/lightpics/classes/TidypicsImage.php b/mod/lightpics/classes/TidypicsImage.php
new file mode 100644
index 000000000..5a8d42ccc
--- /dev/null
+++ b/mod/lightpics/classes/TidypicsImage.php
@@ -0,0 +1,406 @@
+<?php
+/**
+ * Tidypics Image class
+ *
+ * @package TidypicsImage
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+
+class TidypicsImage extends ElggFile {
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['subtype'] = "image";
+ }
+
+ public function __construct($guid = null) {
+ parent::__construct($guid);
+ }
+
+ /**
+ * Save the image
+ *
+ * @warning container_guid must be set first
+ *
+ * @param array $data
+ * @return bool
+ */
+ public function save($data = null) {
+
+ if (!parent::save()) {
+ return false;
+ }
+
+ if ($data) {
+ // new image
+ $this->simpletype = "image";
+ $this->saveImageFile($data);
+ $this->saveThumbnails();
+ $this->extractExifData();
+ }
+
+ return true;
+ }
+
+ /**
+ * Delete image
+ *
+ * @return bool
+ */
+ public function delete() {
+
+ // check if batch should be deleted
+ $batch = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'belongs_to_batch',
+ 'relationship_guid' => $this->guid,
+ 'inverse_relationship' => false,
+ ));
+ if ($batch) {
+ $batch = $batch[0];
+ $count = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'belongs_to_batch',
+ 'relationship_guid' => $batch->guid,
+ 'inverse_relationship' => true,
+ 'count' => true,
+ ));
+ if ($count == 1) {
+ // last image so delete batch
+ $batch->delete();
+ }
+ }
+
+ $album = get_entity($this->container_guid);
+ if ($album) {
+ $album->removeImage($this->guid);
+ }
+
+ $this->removeThumbnails();
+
+ // update quota
+ $owner = $this->getOwnerEntity();
+ $owner->image_repo_size = (int)$owner->image_repo_size - $this->size();
+
+ return parent::delete();
+ }
+
+ /**
+ * Get the title of the image
+ *
+ * @return string
+ */
+ public function getTitle() {
+ if ($this->title) {
+ return $this->title;
+ } else {
+ return $this->originalfilename;
+ }
+ }
+
+ /**
+ * Get the URL for the web page of this image
+ *
+ * @return string
+ */
+ public function getURL() {
+ $title = elgg_get_friendly_title($this->getTitle());
+ $url = "photos/image/$this->guid/$title";
+ return elgg_normalize_url($url);
+ }
+
+ /**
+ * Get the src URL for the image
+ *
+ * @return string
+ */
+ public function getIconURL($size = 'small') {
+ if ($size == 'tiny') {
+ $size = 'thumb';
+ }
+ return elgg_normalize_url("photos/thumbnail/$this->guid/$size/");
+ }
+
+ /**
+ * Get the view information for this image
+ *
+ * @param $viewer_guid The guid of the viewer
+ * @return array with number of views, number of unique viewers, and number of views for this viewer
+ */
+ public function getViewInfo($viewer_guid = 0) {
+ if ($viewer_guid == 0) {
+ $viewer_guid = elgg_get_logged_in_user_guid();
+ }
+
+ $views = elgg_get_annotations(array(
+ 'guid' => $this->getGUID(),
+ 'annotation_name' => 'tp_view',
+ 'limit' => 0,
+ ));
+ if ($views) {
+ $total_views = count($views);
+
+ if ($this->getOwnerGUID() == $viewer_guid) {
+ // get unique number of viewers
+ $diff_viewers = array();
+ foreach ($views as $view) {
+ $diff_viewers[$view->owner_guid] = 1;
+ }
+ $unique_viewers = count($diff_viewers);
+ } else if ($viewer_guid) {
+ // get the number of times this user has viewed the photo
+ $my_views = 0;
+ foreach ($views as $view) {
+ if ($view->owner_guid == $viewer_guid) {
+ $my_views++;
+ }
+ }
+ }
+
+ $view_info = array("total" => $total_views, "unique" => $unique_viewers, "mine" => $my_views);
+ }
+ else {
+ $view_info = array("total" => 0, "unique" => 0, "mine" => 0);
+ }
+
+ return $view_info;
+ }
+
+ /**
+ * Add a view to this image
+ *
+ * @param $viewer_guid
+ * @return void
+ */
+ public function addView($viewer_guid = 0) {
+ if ($viewer_guid == 0) {
+ $viewer_guid = elgg_get_logged_in_user_guid();
+ }
+
+ if ($viewer_guid != $this->owner_guid && tp_is_person()) {
+ create_annotation($this->getGUID(), "tp_view", "1", "integer", $viewer_guid, ACCESS_PUBLIC);
+ }
+ }
+
+
+ /**
+ * Set the internal filenames
+ */
+ protected function setOriginalFilename($originalName) {
+ $prefix = "image/" . $this->container_guid . "/";
+ $filestorename = elgg_strtolower(time() . $originalName);
+ $this->setFilename($prefix . $filestorename);
+ $this->originalfilename = $originalName;
+ }
+
+ /**
+ * Save the uploaded image
+ *
+ * @param array $data
+ */
+ protected function saveImageFile($data) {
+ $this->checkUploadErrors($data);
+
+ // we need to make sure the directory for the album exists
+ // @note for group albums, the photos are distributed among the users
+ $dir = tp_get_img_dir() . $this->getContainerGUID();
+ if (!file_exists($dir)) {
+ mkdir($dir, 0755, true);
+ }
+
+ // move the uploaded file into album directory
+ $this->setOriginalFilename($data['name']);
+ $filename = $this->getFilenameOnFilestore();
+ $result = move_uploaded_file($data['tmp_name'], $filename);
+ if (!$result) {
+ return false;
+ }
+
+ $owner = $this->getOwnerEntity();
+ $owner->image_repo_size = (int)$owner->image_repo_size + $this->size();
+
+ return true;
+ }
+
+ /**
+ * Need to restore sanity to this function
+ * @param type $data
+ */
+ protected function checkUploadErrors($data) {
+ // check for upload errors
+ if ($data['error']) {
+ if ($data['error'] == 1) {
+ trigger_error('Tidypics warning: image exceeded server php upload limit', E_USER_WARNING);
+ throw new Exception(elgg_echo('tidypics:image_mem'));
+ } else {
+ throw new Exception(elgg_echo('tidypics:unk_error'));
+ }
+ }
+
+ // must be an image
+ if (!tp_upload_check_format($data['type'])) {
+ throw new Exception(elgg_echo('tidypics:not_image'));
+ }
+
+ // make sure file does not exceed memory limit
+ if (!tp_upload_check_max_size($data['size'])) {
+ throw new Exception(elgg_echo('tidypics:image_mem'));
+ }
+
+ // make sure the in memory image size does not exceed memory available
+ $imginfo = getimagesize($data['tmp_name']);
+ if (!tp_upload_memory_check($image_lib, $imginfo[0] * $imginfo[1])) {
+ trigger_error('Tidypics warning: image memory size too large for resizing so rejecting', E_USER_WARNING);
+ throw new Exception(elgg_echo('tidypics:image_pixels'));
+ }
+
+ // make sure file fits quota
+ if (!tp_upload_check_quota($data['size'], elgg_get_logged_in_user_guid())) {
+ throw new Exception(elgg_echo('tidypics:cannot_upload_exceeds_quota'));
+ }
+ }
+
+ /**
+ * Save the image thumbnails
+ */
+ protected function saveThumbnails() {
+ elgg_load_library('tidypics:resize');
+
+ $imageLib = elgg_get_plugin_setting('image_lib', 'tidypics');
+
+ $prefix = "image/" . $this->container_guid . "/";
+ $filename = $this->getFilename();
+ $filename = substr($filename, strrpos($filename, '/') + 1);
+
+ if ($imageLib == 'ImageMagick') {
+ // ImageMagick command line
+ if (tp_create_im_cmdline_thumbnails($this, $prefix, $filename) != true) {
+ trigger_error('Tidypics warning: failed to create thumbnails - ImageMagick command line', E_USER_WARNING);
+ }
+ } else if ($imageLib == 'ImageMagickPHP') {
+ // imagick php extension
+ if (tp_create_imagick_thumbnails($this, $prefix, $filename) != true) {
+ trigger_error('Tidypics warning: failed to create thumbnails - ImageMagick PHP', E_USER_WARNING);
+ }
+ } else {
+ if (tp_create_gd_thumbnails($this, $prefix, $filename) != true) {
+ trigger_error('Tidypics warning: failed to create thumbnails - GD', E_USER_WARNING);
+ }
+ }
+ }
+
+ /**
+ * Get the image data of a thumbnail
+ *
+ * @param string $size
+ * @return string
+ */
+ public function getThumbnail($size) {
+ switch ($size) {
+ case 'thumb':
+ $thumb = $this->thumbnail;
+ break;
+ case 'small':
+ $thumb = $this->smallthumb;
+ break;
+ case 'large':
+ $thumb = $this->largethumb;
+ break;
+ default:
+ return '';
+ break;
+ }
+
+ if (!$thumb) {
+ return '';
+ }
+
+ $file = new ElggFile();
+ $file->owner_guid = $this->getOwnerGUID();
+ $file->setFilename($thumb);
+ return $file->grabFile();
+ }
+
+ public function getImage() {
+ return $this->grabFile();
+ }
+
+ /**
+ * Extract EXIF Data from image
+ *
+ * @warning image file must be saved first
+ */
+ public function extractExifData() {
+ elgg_load_library('tidypics:exif');
+ td_get_exif($this);
+ }
+
+ /**
+ * Has the photo been tagged with "in this photo" tags
+ *
+ * @return true/false
+ */
+ public function isPhotoTagged() {
+ $num_tags = count_annotations($this->getGUID(), 'object', 'image', 'phototag');
+ if ($num_tags > 0) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Get an array of photo tag information
+ *
+ * @return array
+ */
+ public function getPhotoTags() {
+
+ $tags = array();
+ $annotations = elgg_get_annotations(array(
+ 'guid' => $this->getGUID(),
+ 'annotation_name' => 'phototag',
+ ));
+ foreach ($annotations as $annotation) {
+ $tag = unserialize($annotation->value);
+ $tag->annotation_id = $annotation->id;
+ $tags[] = $tag;
+ }
+
+ return $tags;
+ }
+
+ /**
+ * Remove thumbnails - usually in preparation for deletion
+ *
+ * The thumbnails are not actually ElggObjects so we create
+ * temporary objects to delete them.
+ */
+ protected function removeThumbnails() {
+ $thumbnail = $this->thumbnail;
+ $smallthumb = $this->smallthumb;
+ $largethumb = $this->largethumb;
+
+ //delete standard thumbnail image
+ if ($thumbnail) {
+ $delfile = new ElggFile();
+ $delfile->owner_guid = $this->getOwnerGUID();
+ $delfile->setFilename($thumbnail);
+ $delfile->delete();
+ }
+ //delete small thumbnail image
+ if ($smallthumb) {
+ $delfile = new ElggFile();
+ $delfile->owner_guid = $this->getOwnerGUID();
+ $delfile->setFilename($smallthumb);
+ $delfile->delete();
+ }
+ //delete large thumbnail image
+ if ($largethumb) {
+ $delfile = new ElggFile();
+ $delfile->owner_guid = $this->getOwnerGUID();
+ $delfile->setFilename($largethumb);
+ $delfile->delete();
+ }
+ }
+}
diff --git a/mod/lightpics/contributions.txt b/mod/lightpics/contributions.txt
new file mode 100644
index 000000000..f12a4713b
--- /dev/null
+++ b/mod/lightpics/contributions.txt
@@ -0,0 +1,442 @@
+Changelog and contributors list
+
+------------------------------------------------------------------------
+Version 1.8.0 RC1 Change List
+Release Date: 07/14/2012
+------------------------------------------------------------------------
+BEGIN VERSION 1.8.0 RC1 CHANGES
+------------------------------------------------------------------------
+ * Updated for Elgg 1.8
+Contributors:
+ * Cash Costello
+ * Brett Profitt
+------------------------------------------------------------------------
+END VERSION 1.7.3 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.7.3 Change List
+Release Date: 11/09/2011
+------------------------------------------------------------------------
+BEGIN VERSION 1.7.3 CHANGES
+------------------------------------------------------------------------
+ * Removed admin settings in favor of Tidypics Administration
+ * Add two river strings for those using Elgg 1.8
+ * Fixed bug where the batch object was not being deleted when had 0 images
+------------------------------------------------------------------------
+END VERSION 1.7.3 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.7.2 Change List
+Release Date: 10/11/2011
+------------------------------------------------------------------------
+BEGIN VERSION 1.7.2 CHANGES
+------------------------------------------------------------------------
+ * Fixed bug with admin tabs
+ * Fixed bug with pagination on all site albums page
+ * New installs get default settings automatically added
+ * Added a server check for cookie-only sessions
+------------------------------------------------------------------------
+END VERSION 1.7.2 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.7.1 Change List
+Release Date: 07/10/2011
+------------------------------------------------------------------------
+BEGIN VERSION 1.7.1 CHANGES
+------------------------------------------------------------------------
+ * Added a toggle for enabling the Flash uploader
+ * Fixed bug with slideshow not displaying all images in an album
+ * Fixed bug with only 8 images showing on an album page. Default is 16.
+------------------------------------------------------------------------
+END VERSION 1.7.1 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.7.0 Change List
+Final Release Date: 06/05/2011
+Beta 1 Release Date: 11/06/2010
+Contributors:
+ * Cash Costello
+ * Jeff Tilson
+ * Original Flash code by Torsten Wesolek
+ * language files submitted by gillie and lord55
+------------------------------------------------------------------------
+BEGIN VERSION 1.7.0 CHANGES
+------------------------------------------------------------------------
+ * Add Flash uploader
+ * Added album sorting
+ * Added batch upload river entries
+ * Fixed bug where old installs of Tidypics would not upgrade
+ * Fixed bug in activity river with link on image entry
+ * Fixed tag pop-up box display issue
+ * Fixed display of avatars in tag river entries
+ * Fixed 2 widget bugs
+ * Fixed bug with images that have national characters in filename
+------------------------------------------------------------------------
+END VERSION 1.7.0 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.6.8 Change List
+Release Date: 05/01/2010
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.8 CHANGES
+------------------------------------------------------------------------
+ * New language strings: tidypics:nophotosingroup, tidypics:baduploadform
+ tidypics:settings:heading:img_lib, tidypics:settings:heading:main,
+ tidypics:settings:heading:river, tidypics:settings:heading:sizes,
+ tidypics:settings:heading:groups
+ * Fixed bug in titles of albums RSS
+ * Added a new css element: tidypics_line_break
+ * Fixed layout of album covers due to long titles or other text
+ * Fixed some bugs with image resizing when images are wide and short
+ * Improved interface of admin settings
+------------------------------------------------------------------------
+END VERSION 1.6.8 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.6.7 Change List
+Release Date: 04/24/2010
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.7 CHANGES
+------------------------------------------------------------------------
+ * Added categories integration
+ * Added a better quota display message - includes percentage now
+ * Tweaked the css so that upload list is enumerated (#tidypics_image_upload_list)
+------------------------------------------------------------------------
+END VERSION 1.6.7 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.6.6 Change List
+Release Date: 03/06/2010
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.6 CHANGES
+------------------------------------------------------------------------
+ * Tweaked slideshow start code
+ * Fixed bug with delete tags menu item
+ * Fixed bug in en.php
+ * Better error checking for ImageMagick resizing
+------------------------------------------------------------------------
+END VERSION 1.6.6 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.6.5 Change List
+Release Date: 12/12/2009
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.5 CHANGES
+------------------------------------------------------------------------
+ * Bug fixes
+ * Better plugin hooks for adding slideshows and lightboxes
+ * Better display of album pages and tweaked css
+ * Slideshows available on more pages
+ * Made a change to parameters in tp_list_entities - added container
+ * Added Danish translation from erikernstm
+ * Added French translation from Fx Nion
+------------------------------------------------------------------------
+END VERSION 1.6.5 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.6.4 Change List
+Release Date: 10/05/2009
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.4 CHANGES
+------------------------------------------------------------------------
+ * Bug fixes
+ * Improved watermarking
+ * Add slideshow code by Torsten
+------------------------------------------------------------------------
+END VERSION 1.6.4 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.6.3 Change List
+Release Date: 09/13/2009
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.3 CHANGES
+------------------------------------------------------------------------
+ * Bug fixes
+ * Redo image resize if problem occurred
+ * Grab title from image by default
+ * New German language file by alfalive
+ * Preview of watermarking
+------------------------------------------------------------------------
+END VERSION 1.6.3 CHANGES
+------------------------------------------------------------------------
+
+------------------------------------------------------------------------
+Version 1.6.2 Change List
+Release Date: 09/03/2009
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.2 CHANGES
+------------------------------------------------------------------------
+ * Added widget for user's latest photos
+ * Added notifications to a user if that user is tagged in a photo
+ * Fixed some issues with tagging people in albums that belong to a closed group
+ * Added a test page for ImageMagick commandline
+ * Began restructuring the code for future capabilities
+ * Many more bug fixes and tweaks
+------------------------------------------------------------------------
+END VERSION 1.6.2 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.6.1 Change List
+Release Date: 08/04/2009
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.1 CHANGES
+------------------------------------------------------------------------
+ * Fixed css bug that caused problems with tagging
+ * Added Spanish language file from mylamilagros
+------------------------------------------------------------------------
+END VERSION 1.6.1 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.6.0 Change List
+Final Release Date: 08/02/2009
+Beta 4 Release Date: 07/17/2009
+Beta 3 Release Date: 07/16/2009
+Beta 2 Release Date: 07/10/2009
+Beta 1 Release Date: 06/30/2009
+Contributors:
+ * Cash Costello
+ * Greg Froese
+ * tagging based on code by Pedro Prez
+ * RSS improvements by Torsten Wesolek
+ * language files submitted by Toto and Susan Tsairi
+------------------------------------------------------------------------
+BEGIN VERSION 1.6.0 CHANGES
+------------------------------------------------------------------------
+ * Photo tagging
+ * View counter
+ * EXIF view
+ * ImageMagick support
+ * Extensive admin settings
+ * Improved CSS
+ * Image ratings
+ * Upload quotas
+ * Better album RSS feed
+ * better almost everything
+------------------------------------------------------------------------
+END VERSION 1.6.0 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.5.1 Change List
+Release Date: 03/29/2009
+Contributors:
+ * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+ * Cash Costello
+ * VeniVidiVinco (http://community.elgg.org/pg/profile/VeniVidiVinco)
+------------------------------------------------------------------------
+BEGIN VERSION 1.5.1 CHANGES
+------------------------------------------------------------------------
+* Updated Turkish language file
+* Fixed permissions bug on all content caused by group override
+* Added back the create album button to widgets
+------------------------------------------------------------------------
+END VERSION 1.5.1 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.5 Change List
+Release Date: 03/28/2009
+Contributors:
+ * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+ * Cash Costello
+ * alfalive (http://community.elgg.org/pg/profile/alfalive)
+ * VeniVidiVinco (http://community.elgg.org/pg/profile/VeniVidiVinco)
+
+Also thank you to those who tested the code in svn and provided feedback
+------------------------------------------------------------------------
+BEGIN VERSION 1.5 CHANGES
+------------------------------------------------------------------------
+* Fixed submenus on sidebar of album pages to make them consistent
+* Fixed display issues for Elgg 1.5
+* Using default site access now
+* Pushing new album creation to river
+* Fixed German language file
+* Added Turkish
+* Added notifications for new album creation
+* Rewrote most of the page handlers to make cleaner
+* Fixed the access level bug on images
+* Cleaned up css
+* Fixed the group access bug on albums
+------------------------------------------------------------------------
+END VERSION 1.5 CHANGES
+------------------------------------------------------------------------
+
+
+
+------------------------------------------------------------------------
+Version 1.08.2 Change List
+Release Date: 02/13/2008
+Contributors:
+ * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+------------------------------------------------------------------------
+BEGIN VERSION 1.08.2 CHANGES
+------------------------------------------------------------------------
+* Fixed bug introduced in v1.08.1 that broke the picture upload (thanks to Karsten Schulze).
+* Fixed empty variables in several files that were supposed to send the user back to the previous page, but didn't.
+* Cleaned up change log (contributions.txt).
+* Finally fixed the Polish language file!!! Yay!! :)
+
+* TODO: Work around large image (high resolution) limit when creating thumbnails (an Elgg limitation... can probably be fixed by using PHP GD functions directly or ImageMagic if available)
+ - The problem is with get_resized_image_from_existing_file(). Submitted a ticket to the Elgg tracking bug system.
+ - Edit actions/upload.php when done. There is a dirty hack in place for now that needs to be removed once the above bug is fixed.
+* TODO: disable public by default (input/accessRead.php) -- add setting to admin page that lets the site admin decide whether pictures can be public or not.
+* TODO: allow group members to add pictures to group photo albums
+* TODO: implement photo anotations
+* TODO: look into replacing individual image views with lightbox2 or jQuery lightbox album views.
+* TODO: create a new widget to show pictures (in slideshow) in a user's profile.
+* TODO: add settings for group albums so that the group owner can select the number of albums to show.
+* TODO: implement a way to move pictures from one album to another (should be pretty easy).
+* TODO: add an "Add Photos" option to the user widget similar to the one in the group widget.
+* TODO: implement automagic file resizing to meet the admin's maximum resolution and file size.
+
+* OF NOTE: It is currently not possible to allow group members to edit an album created by another group member. This is a bug with group permissions and it will probably not be fixed until [at least] Elgg v1.5 comes out.
+------------------------------------------------------------------------
+END VERSION 1.08.2 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.08.1 Change List
+Release Date: 02/13/2008
+Contributors:
+ * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+ * LKLaRose (http://community.elgg.org/pg/profile/lauren)
+ * Webgalli (http://community.elgg.org/pg/profile/webgalli)
+ * Karsten Schulze (http://ks.frinx.eu)
+ * Cash (http://community.elgg.org/pg/profile/costelloc)
+------------------------------------------------------------------------
+BEGIN VERSION 1.08.1 CHANGES
+------------------------------------------------------------------------
+* Fixed bug introduced in v1.08 that caused fake files to be created during thumbnail creation (thanks to Karsten Schulze).
+* Reverted to old directory structure that saves pictures to /image/ALBUMGUID/picGUID (v1.08 saved to /image/ALBUMGUID__picGUID, thus keeping everything in one folder).
+* Album directory is now deleted when the album is deleted (along with every picture inside of the album).
+* Reverted thumbnail and small thumbnail to use picture cropping instead of scaling, so that sites that already use Tidypics can keep a consisting look and feel.
+* Completed River integration by moving album and image directories to an "object" sub-directory (thanks to LKLaRose).
+* Added status messages/graphics to give the user some feedback.
+* Fixed bug in profile widget whereby the selected number of albums had no effect (thanks to @Webgalli and @cheltenham).
+* Fixed bug introduced in v1.06 that prevented anonymous users from viewing a user's album (thanks to Karsten Schulze).
+* Fixed more language file bugs (thanks to Karsten Schulze).
+* Administrators can now set a file size limit from the plugin configuration (it has to be in Kilobytes).
+
+* JUST PLAIN WEIRD: Fixed Polish language file (thanks to @Vazco, Ian Medlock and Brett Profitt) and saved as UTF8 without BOM. However, it still doesn't work. Can somebody try saving it on a Polish box for me? :)
+
+* TODO: fix Polish language file -- it seems to break the whole Elgg site! Maybe it needs to use HTML codes in place of international characters?
+* TODO: Work around large image (high resolution) limit when creating thumbnails (an Elgg limitation... can probably be fixed by using PHP GD functions directly or ImageMagic if available)
+ - The problem is with get_resized_image_from_existing_file(). Submitted a ticket to the Elgg tracking bug system.
+ - Edit actions/upload.php when done. There is a dirty hack in place for now that needs to be removed once the above bug is fixed.
+* TODO: disable public by default (input/accessRead.php) -- add setting to admin page that lets the site admin decide whether pictures can be public or not.
+* TODO: allow group members to add pictures to group photo albums
+* TODO: implement photo anotations
+* TODO: look into replacing individual image views with lightbox2 or jQuery lightbox album views.
+* TODO: create a new widget to show pictures (in slideshow) in a user's profile.
+* TODO: add settings for group albums so that the group owner can select the number of albums to show.
+* TODO: implement a way to move pictures from one album to another (should be pretty easy).
+
+* OF NOTE: It is currently not possible to allow group members to edit an album created by another group member. This is a bug with group permissions and it will probably not be fixed until [at least] Elgg v1.5 comes out.
+------------------------------------------------------------------------
+END VERSION 1.08.1 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.08 Change List
+Release Date: 02/08/2008
+Contributors:
+ * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+------------------------------------------------------------------------
+BEGIN VERSION 1.08 CHANGES
+------------------------------------------------------------------------
+* Merged most (safe) changes made by other contributors in v1.07.
+ - Did not include SWFuploader or JQuery due to the number of bugs reported.
+* Changed ugly "new album" picture into something better looking.
+* Fixed bug whereby image objects were deleted from the database, but they physical files remained on the server.
+ - Since deleting directories was not possible without the use of unsafe file operations, albums no longer create new directories. Instead, all pictures are saved as /image/ALBUMGUID__picturename.
+* Fixed some bugs in the English, Spanish and German language files and added missing error messages.
+* Thumbnails now display the default error image (same as new album) when the requested image cannot be found.
+* Fixed a bug in the multi-edit form that did not allow image titles to be saved.
+* Removed some customizations made to edit.php action in v1.07 since they removed the ability to add titles to images.
+* Fixed bug introduced in v1.07 that prevented images from being set as album covers.
+* Fixed miscellaneous bugs in group albums widget.
+* Removed jQuery for now since it was making the albums too slow. In the future, we should look into replacing individual image views with lightbox2 or jQuery lightbox album views.
+
+
+* TODO: fix Polish language file -- it seems to break the whole Elgg site! Maybe it needs to use HTML codes in place of international characters?
+* TODO: Work around 0.9MB source file size limit when creating thumbnails (an Elgg limitation... can probably be fixed by using PHP GD functions directly)
+ - The problem is with get_resized_image_from_existing_file(). Submitted a ticket to the Elgg tracking bug system.
+ - Edit actions/upload.php when done. There is a dirty hack in place for now that needs to be removed once the above bug is fixed.
+* TODO: disable public by default (input/accessRead.php) -- add setting to admin page that lets the site admin decide whether pictures can be public or not.
+* TODO: allow group members to add pictures to group photo albums
+* TODO: implement photo anotations
+* TODO: look into replacing individual image views with lightbox2 or jQuery lightbox album views.
+
+* OF NOTE: It is currently not possible to allow group members to edit an album created by another group member. This is a bug with group permissions and it will probably not be fixed until [at least] Elgg v1.5 comes out.
+------------------------------------------------------------------------
+END VERSION 1.08 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.07 Change List
+Release Date: 02/03/2008
+Contributors:
+ * vazco (http://community.elgg.org/pg/profile/vazco)
+ * simophin (http://community.elgg.org/pg/profile/simophin)
+------------------------------------------------------------------------
+BEGIN VERSION 1.07 CHANGES
+------------------------------------------------------------------------
+* About 10 missing translations added
+* Translated to polish
+* When no album is present, user can add a new album straight from the widget if he has the required rights
+* Added some missing <p></p>
+* Changed some <? to <?php
+* Unauthorized album edit taken care of
+* Added jQuery Lightbox support, but commented out just in case someone won't want to use it (there may be some problems with the lightbox, since I'm not using it myself and I didn't test it)
+------------------------------------------------------------------------
+END VERSION 1.07 CHANGES
+------------------------------------------------------------------------
+
+
+------------------------------------------------------------------------
+Version 1.06 Change List
+Release Date: 02/03/2008
+Contributors:
+ * Gabriel Monge-Franco (http://gabriel.mongefranco.com)
+------------------------------------------------------------------------
+BEGIN VERSION 1.06 CHANGES
+------------------------------------------------------------------------
+* Forward all non-logged in users to World (public) pictures. This fixes a bug in which anonymous users would see a list of pictures titled, "'s pictures" (without a name).
+* Forward requests to "owned" without an user ID to "owned/userid" when a user is logged in. This fixes a bug in which all users would see a list of pictures titled, "'s pictures" (without a name).
+* Replaced several hard-coded strings to elgg_echo() functions so they can be translated.
+* Re-enabled title entry in picture editing. Titles are only optional, so there is no reason to hide them, especially if some users may find them useful. Moreover, lack of image titles makes list views awkward.
+* Fixed multi-picture editing bug in which editing was disabled after uploading multiple pictures.
+* Fixed several tags not conforming to standard PHP opening tags.
+* Fixed some bugs in the English language file.
+* Added Spanish and German translations (if you speak German, please double-check the language file!!!).
+* Added a download link at the bottom of each picture to download the original file.
+* Updated some icons and created missing ones.
+
+* TODO: disable public by default (input/accessRead.php) -- add setting to admin page that lets the site admin decide whether pictures can be public or not.
+* TODO: change ugly "new album" picture into something better looking.
+* TODO: re-organize files to clean up the plug-in directory (e.g., move world.php to views/default)
+* TODO: Fix bug whereby image objects are deleted from the database, but the physical files remain on the server. The path can be found with $file->getFilename(), but would it be safe to execute shell commands directly???
+------------------------------------------------------------------------
+END VERSION 1.06 CHANGES
+------------------------------------------------------------------------
+
diff --git a/mod/lightpics/deactivate.php b/mod/lightpics/deactivate.php
new file mode 100644
index 000000000..55191a9e4
--- /dev/null
+++ b/mod/lightpics/deactivate.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Deactive Tidypics
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+update_subtype('object', 'album');
+update_subtype('object', 'image');
diff --git a/mod/lightpics/fonts/LiberationSerif-Regular.ttf b/mod/lightpics/fonts/LiberationSerif-Regular.ttf
new file mode 100644
index 000000000..1dd4aaa92
--- /dev/null
+++ b/mod/lightpics/fonts/LiberationSerif-Regular.ttf
Binary files differ
diff --git a/mod/lightpics/fonts/License.txt b/mod/lightpics/fonts/License.txt
new file mode 100644
index 000000000..e972b52de
--- /dev/null
+++ b/mod/lightpics/fonts/License.txt
@@ -0,0 +1,13 @@
+LICENSE AGREEMENT AND LIMITED PRODUCT WARRANTY
+LIBERATION FONT SOFTWARE
+
+This agreement governs the use of the Software and any updates to the Software, regardless of the delivery mechanism. Subject to the following terms, Red Hat, Inc. ("Red Hat") grants to the user ("Client") a license to this work pursuant to the GNU General Public License v.2 with the exceptions set forth below and such other terms as our set forth in this End User License Agreement.
+
+ 1.The Software and License Exception. LIBERATION font software (the "Software") consists of TrueType-OpenType formatted font software for rendering LIBERATION typefaces in sans serif, serif, and monospaced character styles. You are licensed to use, modify, copy, and distribute the Software pursuant to the GNU General Public License v.2 with the following exceptions:
+(a)As a special exception, if you create a document which uses this font, and embed this font or unaltered portions of this font into the document, this font does not by itself cause the resulting document to be covered by the GNU General Public License. This exception does not however invalidate any other reasons why the document might be covered by the GNU General Public License. If you modify this font, you may extend this exception to your version of the font, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.
+(b)As a further exception, any distribution of the object code of the Software in a physical product must provide you the right to access and modify the source code for the Software and to reinstall that modified version of the Software in object code form on the same physical product on which you received it.
+ 2.Intellectual Property Rights. The Software and each of its components, including the source code, documentation, appearance, structure and organization are owned by Red Hat and others and are protected under copyright and other laws. Title to the Software and any component, or to any copy, modification, or merged portion shall remain with the aforementioned, subject to the applicable license. The "LIBERATION" trademark is a trademark of Red Hat, Inc. in the U.S. and other countries. This agreement does not permit Client to distribute modified versions of the Software using Red Hat's trademarks. If Client makes a redistribution of a modified version of the Software, then Client must modify the files names to remove any reference to the Red Hat trademarks and must not use the Red Hat trademarks in any way to reference or promote the modified Software.
+ 3.Limited Warranty. To the maximum extent permitted under applicable law, the Software is provided and licensed "as is" without warranty of any kind, expressed or implied, including the implied warranties of merchantability, non-infringement or fitness for a particular purpose. Red Hat does not warrant that the functions contained in the Software will meet Client's requirements or that the operation of the Software will be entirely error free or appear precisely as described in the accompanying documentation.
+ 4.Limitation of Remedies and Liability. To the maximum extent permitted by applicable law, Red Hat or any Red Hat authorized dealer will not be liable to Client for any incidental or consequential damages, including lost profits or lost savings arising out of the use or inability to use the Software, even if Red Hat or such dealer has been advised of the possibility of such damages.
+ 5.General. If any provision of this agreement is held to be unenforceable, that shall not affect the enforceability of the remaining provisions. This agreement shall be governed by the laws of the State of North Carolina and of the United States, without regard to any conflict of laws provisions, except that the United Nations Convention on the International Sale of Goods shall not apply.
+Copyright © 2007 Red Hat, Inc. All rights reserved. LIBERATION is a trademark of Red Hat, Inc.
diff --git a/mod/lightpics/graphics/empty_album.png b/mod/lightpics/graphics/empty_album.png
new file mode 100644
index 000000000..0c041d0a2
--- /dev/null
+++ b/mod/lightpics/graphics/empty_album.png
Binary files differ
diff --git a/mod/lightpics/graphics/icons/album.gif b/mod/lightpics/graphics/icons/album.gif
new file mode 100644
index 000000000..73ce91356
--- /dev/null
+++ b/mod/lightpics/graphics/icons/album.gif
Binary files differ
diff --git a/mod/lightpics/graphics/icons/general.jpg b/mod/lightpics/graphics/icons/general.jpg
new file mode 100644
index 000000000..23494eff2
--- /dev/null
+++ b/mod/lightpics/graphics/icons/general.jpg
Binary files differ
diff --git a/mod/lightpics/graphics/icons/river_icon_album.gif b/mod/lightpics/graphics/icons/river_icon_album.gif
new file mode 100644
index 000000000..e1bbfedaa
--- /dev/null
+++ b/mod/lightpics/graphics/icons/river_icon_album.gif
Binary files differ
diff --git a/mod/lightpics/graphics/icons/river_icon_image.gif b/mod/lightpics/graphics/icons/river_icon_image.gif
new file mode 100644
index 000000000..cf391898e
--- /dev/null
+++ b/mod/lightpics/graphics/icons/river_icon_image.gif
Binary files differ
diff --git a/mod/lightpics/graphics/icons/river_icon_tag.gif b/mod/lightpics/graphics/icons/river_icon_tag.gif
new file mode 100644
index 000000000..510696147
--- /dev/null
+++ b/mod/lightpics/graphics/icons/river_icon_tag.gif
Binary files differ
diff --git a/mod/lightpics/graphics/image_error_large.png b/mod/lightpics/graphics/image_error_large.png
new file mode 100644
index 000000000..4316f459d
--- /dev/null
+++ b/mod/lightpics/graphics/image_error_large.png
Binary files differ
diff --git a/mod/lightpics/graphics/image_error_small.png b/mod/lightpics/graphics/image_error_small.png
new file mode 100644
index 000000000..2f814fd81
--- /dev/null
+++ b/mod/lightpics/graphics/image_error_small.png
Binary files differ
diff --git a/mod/lightpics/graphics/image_error_thumb.png b/mod/lightpics/graphics/image_error_thumb.png
new file mode 100644
index 000000000..0eeb797dc
--- /dev/null
+++ b/mod/lightpics/graphics/image_error_thumb.png
Binary files differ
diff --git a/mod/lightpics/graphics/loader.gif b/mod/lightpics/graphics/loader.gif
new file mode 100644
index 000000000..7ac990cf0
--- /dev/null
+++ b/mod/lightpics/graphics/loader.gif
Binary files differ
diff --git a/mod/lightpics/graphics/spacer.gif b/mod/lightpics/graphics/spacer.gif
new file mode 100644
index 000000000..e565824aa
--- /dev/null
+++ b/mod/lightpics/graphics/spacer.gif
Binary files differ
diff --git a/mod/lightpics/languages/ca.php b/mod/lightpics/languages/ca.php
new file mode 100644
index 000000000..282e63bf3
--- /dev/null
+++ b/mod/lightpics/languages/ca.php
@@ -0,0 +1,210 @@
+<?php
+$language = array (
+ 'image' => 'Imatge',
+ 'images' => 'Imatges',
+ 'caption' => 'Títol',
+ 'photos' => 'Fotos',
+ 'album' => 'Àlbum de fotos',
+ 'albums' => 'Àlbums de fotos',
+ 'tidypics:disabled' => 'Desactivat',
+ 'tidypics:enabled' => 'Activat',
+ 'admin:settings:photos' => 'Lightpics',
+ 'photos:add' => 'Crear àlbum',
+ 'images:upload' => 'Pujar fotos',
+ 'album:slideshow' => 'Presentació de diapositives',
+ 'album:yours' => 'Els teus àlbums de fotos',
+ 'album:yours:friends' => 'Àlbums de les teves amigues',
+ 'album:user' => 'Àlbums de fotos de %s',
+ 'album:friends' => 'Àlbums de fotos de les amigues',
+ 'album:all' => 'Tots els àlbums de fotos',
+ 'photos:group' => 'Fotos del grup',
+ 'item:object:image' => 'Fotos',
+ 'item:object:album' => 'Àlbums',
+ 'tidypics:uploading:images' => 'Si us plau espera. Pujant imatges.',
+ 'tidypics:enablephotos' => 'Activar àlbums de fotos del grup',
+ 'tidypics:editprops' => 'Edita propietats de la imatge',
+ 'tidypics:mostcommented' => 'Imatges més comentades',
+ 'tidypics:mostcommentedthismonth' => 'Més comentades aquest més',
+ 'tidypics:mostcommentedtoday' => 'Més comentades avui',
+ 'tidypics:mostviewed' => 'Imatges més vistes',
+ 'tidypics:mostvieweddashboard' => 'Escriptori més vist',
+ 'tidypics:mostviewedthisyear' => 'Més vistes aquest any',
+ 'tidypics:mostviewedthismonth' => 'Més vistes aquest mes',
+ 'tidypics:mostviewedlastmonth' => 'Més vistes l\'últim mes',
+ 'tidypics:mostviewedtoday' => 'Més vistes avui',
+ 'tidypics:recentlyviewed' => 'Imatges vistes recentment',
+ 'tidypics:recentlycommented' => 'Imatges comentades recentment',
+ 'tidypics:mostrecent' => 'Imatges més recents',
+ 'tidypics:yourmostviewed' => 'Les imatges que més has vist',
+ 'tidypics:yourmostrecent' => 'Les teves imatges més recents',
+ 'tidypics:friendmostviewed' => 'Les imatges més vistes de %s',
+ 'tidypics:friendmostrecent' => 'Les imatges més recents de %s',
+ 'tidypics:highestrated' => 'Imatges més valorades',
+ 'tidypics:views' => '%s vistes',
+ 'tidypics:viewsbyowner' => 'per %s usuàries (sense incloure\'t)',
+ 'tidypics:viewsbyothers' => '(%s per tu)',
+ 'tidypics:administration' => 'Administració de Tidypics',
+ 'tidypics:stats' => 'Estadístiques',
+ 'tidypics:nophotosingroup' => 'Aquest grup no té cap foto encara',
+ 'tidypics:upgrade' => 'Millorar',
+ 'tidypics:sort' => 'Ordena l\'àlbum de %s',
+ 'tidypics:none' => 'No hi ha àlbums de fotos',
+ 'tidypics:upload:error' => 'Error:',
+ 'tidypics:upload:maxfilesize' => 'L\'arxiu és massa gran',
+ 'tidypics:upload:minfilesize' => 'L\'arxiu és massa petit',
+ 'tidypics:upload:acceptfiletypes' => 'Tipus d\'arxiu no permès',
+ 'tidypics:upload:maxnumberoffiles' => 'Has excedit el nombre màxim d\'arxius',
+ 'tidypics:settings' => 'Opcions',
+ 'tidypics:settings:main' => 'Opcions principals',
+ 'tidypics:settings:image_lib' => 'Biblioteca d\'imatges',
+ 'tidypics:settings:thumbnail' => 'Creació de vistes prèvies',
+ 'tidypics:settings:help' => 'Ajuda',
+ 'tidypics:settings:download_link' => 'Mostra enllaç per baixar-se-la',
+ 'tidypics:settings:photo_ratings' => 'Activar valoracions de les fotos (requereix l\'extensió de valoració de Miguel Montes o un de compatible)',
+ 'tidypics:settings:exif' => 'Mostra les dades EXIF',
+ 'tidypics:settings:view_count' => 'Mostra el número de visions',
+ 'tidypics:settings:grp_perm_override' => 'Permetre els membres del grup accés complet als àlbums del grup',
+ 'tidypics:settings:maxfilesize' => 'Mida màxima d\'imatge en megabytes (MB):',
+ 'tidypics:settings:quota' => 'Quota d\'usuària (MB) - 0 vol dir que no tens límit',
+ 'tidypics:settings:im_path' => 'Introdueix la ruta als teus comandaments d\'ImageMagick',
+ 'tidypics:settings:img_river_view' => 'Quantes entrades d\'activitat per cada paquet d\'imatges pujades',
+ 'tidypics:settings:album_river_view' => 'Mostra la caràtula o un grup de fotos per al nou àlbum',
+ 'tidypics:settings:largesize' => 'Mida de la imatge principal',
+ 'tidypics:settings:smallsize' => 'Mida de les imatges de la vista d\'àlbum',
+ 'tidypics:settings:tinysize' => 'Mida de la previsualització',
+ 'tidypics:settings:sizes:instructs' => 'Pot fer falta que canviïs el CSS si canvies les mides predefinides',
+ 'tidypics:settings:im_id' => 'ID d\'imatge',
+ 'tidypics:settings:heading:img_lib' => 'Opcions de la biblioteca d\'imatges',
+ 'tidypics:settings:heading:main' => 'Opcions més importants',
+ 'tidypics:settings:heading:river' => 'Opcions d\'integració de l\'activitat',
+ 'tidypics:settings:heading:sizes' => 'Mida de la previsualització',
+ 'tidypics:settings:heading:groups' => 'Opcions del grup',
+ 'tidypics:option:all' => 'Totes',
+ 'tidypics:option:none' => 'Cap',
+ 'tidypics:option:cover' => 'Tapa',
+ 'tidypics:option:set' => 'Posa',
+ 'tidypics:server_info' => 'Informació del servidor',
+ 'tidypics:server_info:gd_desc' => 'L\'Elgg necessita que es carregui l\'extensió GD',
+ 'tidypics:server_info:exec_desc' => 'Es necessita per la línia de comandament d\'ImageMagick',
+ 'tidypics:server_info:memory_limit_desc' => 'Canvia memory_limit per incrementar-ho',
+ 'tidypics:server_info:peak_usage_desc' => 'Això és aproximadament el mínim per pàgina',
+ 'tidypics:server_info:upload_max_filesize_desc' => 'Mida màxima de una imatge pujada',
+ 'tidypics:server_info:post_max_size_desc' => 'Mida màxima de l\'entrada = suma de les imatges + formulari html',
+ 'tidypics:server_info:max_input_time_desc' => 'Temps que un script espera la pujada per terminar',
+ 'tidypics:server_info:max_execution_time_desc' => 'Temps màxim que un script estarà funcionant',
+ 'tidypics:server_info:php_version' => 'Versió del PHP',
+ 'tidypics:server_info:memory_limit' => 'Memòria disponible per al PHP',
+ 'tidypics:server_info:peak_usage' => 'Memòria utilitzada per carregar aquesta pàgina',
+ 'tidypics:server_info:upload_max_filesize' => 'Mida màxima dels arxius pujats',
+ 'tidypics:server_info:post_max_size' => 'Mida màxima de les entrades',
+ 'tidypics:server_info:max_input_time' => 'Temps màxim d\'entrada',
+ 'tidypics:server_info:max_execution_time' => 'Temps màxim d\'execució',
+ 'tidypics:server_info:use_only_cookies' => 'Sessions només amb galetes',
+ 'tidypics:server_config' => 'Configuració del servidor',
+ 'tidypics:server_configuration_doc' => 'Documentació de la configuració del servidor',
+ 'tidypics:lib_tools:testing' => 'Tidypics necessita saber la localització dels executables d\'ImageMagick si l\'has sel·leccionat com a biblioteca d\'imatges. El teu servei de hosting podria proporcionar-te això. Pots provar si la localització és correcta més avall. Si és així, hauria de mostrar la versió d\'ImageMagick que hi ha instal·lada al teu servidor.',
+ 'tidypics:thumbnail_tool' => 'Creació de previsualitzacions',
+ 'tidypics:thumbnail_tool_blurb' => 'Aquesta pàgina et permet crear previsualitzacions per les imatges quan la creació de previsualitzacions falla durant la pujada. Pots tenir alguns problemes amb la creació de vistes prèvies si la teva biblioteca d\'imatges no està configurada adequadament o si no hi ha prou memòria per a que la biblioteca GD carregui i canviï la mida d\'una imatge. Si les teves usuàries han tingut problemes amb la creació de previsualitzacions i tens configurada correctament l\'aplicació, pots provar de tornar a fer les vistes prèvies. Troba l\'identificador únic de la foto (és el número aprop del final de la URL quan veus una foto) i escriu-lo aquí a sota.',
+ 'tidypics:thumbnail_tool:unknown_image' => 'Impossible aconseguir la imatge original',
+ 'tidypics:thumbnail_tool:invalid_image_info' => 'Error aconseguint informació sobre la imatge',
+ 'tidypics:thumbnail_tool:create_failed' => 'Ha fallat la creació de les previsualitzacions',
+ 'tidypics:thumbnail_tool:created' => 'Previsualitzacions creades.',
+ 'album:create' => 'Crea nou àlbum',
+ 'album:add' => 'Afegeix àlbum de fotos',
+ 'album:addpix' => 'Afegeix fotos a l\'àlbum',
+ 'album:edit' => 'Edita àlbum',
+ 'album:delete' => 'Esborra àlbum',
+ 'album:sort' => 'Ordena',
+ 'image:edit' => 'Edita imatge',
+ 'image:delete' => 'Esborra imatge',
+ 'image:download' => 'Descarrega imatge',
+ 'album:title' => 'Títol',
+ 'album:desc' => 'Descripció',
+ 'album:tags' => 'Etiquetes',
+ 'album:cover' => 'Fer aquesta imatge la caràtula de l\'àlbum?',
+ 'album:cover_link' => 'Fer caràtula',
+ 'tidypics:title:quota' => 'Espai disponible',
+ 'tidypics:quota' => 'Ús d\'espai',
+ 'tidypics:uploader:choose' => 'Escull fotos',
+ 'tidypics:uploader:upload' => 'Puja fotos',
+ 'tidypics:uploader:describe' => 'Descriu fotos',
+ 'tidypics:uploader:filedesc' => 'Tipus d\'arxiu (jpeg, png, gif)',
+ 'tidypics:uploader:help' => 'Consell: utilitza <code>Ctrl</code> o <code>Shift</code> per seleccionar més d\'un arxiu. A més pots arrossegar fotos des de l\'escriptori.',
+ 'tidypics:sort:instruct' => 'Ordena les fotos de l\'àlbum arrossegant-les. Fes clic després al botó de desar.',
+ 'tidypics:sort:no_images' => 'No s\'han trobat imatges per ordenar. Puja imatges amb l\'enllaç de més a dalt.',
+ 'album:num' => 'Fotos de %s',
+ 'image:total' => 'Images a l\'àlbum:',
+ 'image:by' => 'Imatges afegida per',
+ 'album:by' => 'Àlbum creat per',
+ 'album:created:on' => 'Creat',
+ 'image:none' => 'No s\'han afegit imatges encara',
+ 'image:back' => 'Previ',
+ 'image:next' => 'Següent',
+ 'image:index' => '%u de %s',
+ 'tidypics:posted' => 'Ha penjat una foto:',
+ 'tidypics:widget:albums' => 'Àlbums de fotos',
+ 'tidypics:widget:album_descr' => 'Mostra els teus àlbums',
+ 'tidypics:widget:num_albums' => 'Nombre d\'àlbums a mostrar',
+ 'tidypics:widget:latest' => 'Últimes fotos',
+ 'tidypics:widget:latest_descr' => 'Mostra les teves últimes fotos',
+ 'tidypics:widget:num_latest' => 'Nombre d\'imatges a mostrar',
+ 'album:more' => 'Veure tots els àlbums',
+ 'river:create:object:image' => '%s ha pujat la foto %s',
+ 'image:river:created' => '%s ha afegit una foto a l\'àlbum %s',
+ 'image:river:created:multiple' => '%s ha afegit %u fotos a l\'àlbum %s',
+ 'image:river:item' => 'una foto',
+ 'image:river:annotate' => 'un comentari a la foto',
+ 'river:create:object:album' => '%s ha creat un nou àlbum %s',
+ 'album:river:group' => 'al grup',
+ 'album:river:item' => 'un àlbum',
+ 'album:river:annotate' => 'un comentari a l\'àlbum',
+ 'river:comment:object:image' => '%s ha comentat a la foto %s',
+ 'river:comment:object:album' => '%s ha comentat a la foto %s',
+ 'tidypics:newalbum_subject' => 'Nou àlbum de fotos',
+ 'tidypics:newalbum' => '%s ha creat un nou àlbum de fotos',
+ 'tidypics:updatealbum' => '%s ha pujat noves fotos a l\'àlbum %s',
+ 'tidypics:upl_success' => 'Les teves imatges s\'han pujat correctament.',
+ 'image:saved' => 'La teva imatge s\'ha desat correctament.',
+ 'images:saved' => 'Totes les imatges s\'han desat correctament.',
+ 'image:deleted' => 'La teva imatges s\'ha esborrat correctament.',
+ 'image:delete:confirm' => 'Estàs segur de voler esborrar aquesta imatge?',
+ 'images:edited' => 'Les teves imatges s\'han actualitzat correctament.',
+ 'album:edited' => 'El teu àlbum s\'ha actualitzat correctament.',
+ 'album:saved' => 'El teu àlbum s\'ha desat correctament.',
+ 'album:deleted' => 'El teu àlbum s\'ha esborrat correctament.',
+ 'album:delete:confirm' => 'Estàs segur de voler esborrar l\'àlbum?',
+ 'album:created' => 'El teu nou àlbum s\'ha creat.',
+ 'album:save_cover_image' => 'S\'ha desat la caràtula.',
+ 'tidypics:settings:save:ok' => 'S\'han desat correctament les opcions del complement Tidypics',
+ 'tidypics:album:sorted' => 'L\'àlbum %s està ordenat',
+ 'tidypics:album:could_not_sort' => 'No es pot ordenar l\'àlbum %s. Assegura\'t que hi ha imatges a l\'àlbum i torna-ho a intentar.',
+ 'tidypics:upgrade:success' => 'Millora dels Tidypics ha estat correcta',
+ 'tidypics:baduploadform' => 'Hi ha hagut algun error amb el formulari de pujades',
+ 'tidypics:partialuploadfailure' => 'Hi ha hagut errors pujant algunes de les imatges (%s de %s).',
+ 'tidypics:completeuploadfailure' => 'La pujada de les imatges ha fallat',
+ 'tidypics:exceedpostlimit' => 'Són massa imatges o massa grans - prova pujant-ne menys o més petites.',
+ 'tidypics:noimages' => 'No s\'han seleccionat imatges',
+ 'tidypics:image_mem' => 'La imatge és massa gran - massa bytes',
+ 'tidypics:image_pixels' => 'La imatge té massa píxels',
+ 'tidypics:unk_error' => 'Error de pujada desconegut',
+ 'tidypics:save_error' => 'Error desconegut en desar la imatge al servidor',
+ 'tidypics:not_image' => 'No és un tipus d\'imatge reconegut',
+ 'tidypics:deletefailed' => 'Ho sentim, ha fallat en esborrar.',
+ 'tidypics:deleted' => 'Esborrat correcte',
+ 'tidypics:nosettings' => 'L\'administradora del lloc no ha establert configuració per a l\'àlbum de fotos',
+ 'tidypics:exceed_quota' => 'Has excedit la quota que t\'ha assignat l\'administradora',
+ 'tidypics:cannot_upload_exceeds_quota' => 'Imatge no pujada. L\'arxiu excedeix la teva quota disponible',
+ 'album:none' => 'No s\'ha creat cap àlbum encara.',
+ 'album:uploadfailed' => 'Ho sento, no podem desar el teu àlbum.',
+ 'album:deletefailed' => 'El teu àlbum no pot ser esborrat.',
+ 'album:blank' => 'Si us plau posa un títol a l\'àlbum',
+ 'album:invalid_album' => 'Àlbum invàlid',
+ 'album:cannot_save_cover_image' => 'No es pot desar la caràtula',
+ 'image:downloadfailed' => 'Ho sentim, aquesta imatge no està disponible',
+ 'images:notedited' => 'No totes les imatges s\'han actualitzat correctament',
+ 'image:blank' => 'Si us plau posa un títol a la imatge',
+ 'image:error' => 'No es pot desar la imatge.',
+ 'tidypics:upgrade:failed' => 'La millora de Tidypics ha fallat',
+ 'untitled' => 'Sense t&iacute;tol',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/lightpics/languages/da.php b/mod/lightpics/languages/da.php
new file mode 100644
index 000000000..3e454540c
--- /dev/null
+++ b/mod/lightpics/languages/da.php
@@ -0,0 +1,169 @@
+<?php
+/**
+* Elgg tidypics plugin danish language pack
+*
+*/
+
+
+$danish = array(
+
+ // Menu items and titles
+ 'image' => "Billede",
+ 'images' => "Billeder",
+ 'caption' => "Beskrivelse",
+ 'photos' => "Fotos",
+ 'album' => "Fotoalbum",
+ 'albums' => "Fotoalbums",
+ 'album:slideshow' => "Se slideshow",
+ 'album:yours' => "Dine Fotoalbums",
+ 'album:yours:friends' => "Dine venners fotoalbums",
+ 'album:user' => "%s's Fotoalbums",
+ 'album:friends' => "%s's venners fotoalbum",
+ 'album:all' => "Alle Fotoalbums",
+ 'album:group' => "Gruppe-Fotoalbum",
+ 'item:object:image' => "Fotos",
+ 'item:object:album' => "Album",
+ 'tidypics:uploading:images' => "Billederne er uploadet",
+ 'tidypics:enablephotos' => 'Skift gruppealbum',
+ 'tidypics:editprops' => 'Rediger billede',
+ 'tidypics:mostcommented' => 'Mest kommenterede',
+ 'tidypics:mostcommentedthismonth' => 'Mest kommenterede i denne måned',
+ 'tidypics:mostcommentedtoday' => 'Mest kommenterede i dag',
+ 'tidypics:mostviewed' => 'Mest besøgte billeder',
+ 'tidypics:mostvieweddashboard' => 'Mest besøgte instrumentpanel',
+ 'tidypics:mostviewedthisyear' => 'Mest besøgte i år',
+ 'tidypics:mostviewedthismonth' => 'Mest besøgte i denne måned',
+ 'tidypics:mostviewedlastmonth' => 'Mest besøgte sidste måned',
+ 'tidypics:mostviewedtoday' => 'Set flest gange i dag',
+ 'tidypics:recentlyviewed' => 'Senest viste billeder',
+ 'tidypics:recentlycommented' => 'Senest kommenterede billeder',
+ 'tidypics:mostrecent' => 'Nyeste billeder ifællesskabet',
+ 'tidypics:yourmostviewed' => 'Dine mest sete',
+ 'tidypics:yourmostrecent' => 'Sidst uploaded',
+ 'tidypics:friendmostviewed' => "%s's mest sete",
+ 'tidypics:friendmostrecent' => "%s's seneste billeder ",
+ 'tidypics:highestrated' => "Højest bedømte billeder",
+ 'tidypics:viewsbyowner' => "Visninger: %s af %s medlemmer (ikke inklusive dig selv)",
+ 'tidypics:viewsbyothers' => "Visninger: %s (%s af dig)",
+ 'tidypics:administration' => 'Tidypics administration',
+ 'tidypics:stats' => 'Statistik',
+ 'tidypics:upgrade' => 'Opgrader',
+ 'tidypics:sort' => 'Sortér %s album',
+
+ //settings
+ 'tidypics:settings' => 'Indstillinger',
+ 'tidypics:settings:server:analysis' => 'Kør server analyse',
+ 'tidypics:admin:instructions' => 'Dette er de centrale Tidypics indstillinger. Tilpas dem til din opsætning og klik derefter på Gem.',
+ 'tidypics:settings:image_lib' => "Foto arkiv: ",
+ 'tidypics:settings:download_link' => "Vis download-link",
+ 'tidypics:settings:photo_ratings' => "Tillad karakterergivning af foto (kræver plugin af Miguel Montes eller andet kompatibelt plugin)",
+ 'tidypics:settings:exif' => "Vis EXIF data",
+ 'tidypics:settings:view_count' => "Vis tæller",
+ 'tidypics:settings:grp_perm_override' => "Giv gruppens medlemmer fuld adgang til gruppe-album",
+ 'tidypics:settings:maxfilesize' => "Maksimal billedstørrelse i megabytes (MB):",
+ 'tidypics:settings:quota' => "Tildelt plads til brugere / grupper (MB) (0 = Ingen plads)",
+ 'tidypics:settings:im_path' => "Angiv stien til ImageMagick kommandoer (som slutter med et Slash/)",
+ 'tidypics:settings:img_river_view' => "Hvor mange poster i aktivitetslisten for hvert parti af uploadede billeder",
+ 'tidypics:settings:album_river_view' => "Vis albumcover eller et sæt af fotos til nye album",
+ 'tidypics:settings:largesize' => "Størrelse på billede",
+ 'tidypics:settings:smallsize' => "Tumbnailstørrelse på album",
+ 'tidypics:settings:thumbsize' => "Thumbnailstørrelse på billede",
+
+
+ //actions
+ 'album:create' => "Skab album",
+ 'album:add' => "Tilføj nyt album",
+ 'album:addpix' => "Tilføj fotos",
+ 'album:edit' => "Rediger album",
+ 'album:delete' => "Slet album",
+ 'album:sort' => "Sortér album",
+ 'image:edit' => "Rediger billede",
+ 'image:delete' => "Slet billede",
+ 'image:download' => "Download billede",
+
+ //forms
+ 'album:title' => "Titel",
+ 'album:desc' => "Beskrivelse",
+ 'album:tags' => "Nøgleord",
+ 'album:cover' => "Billedet skal bruges som albumcover",
+ 'tidypics:quota' => "Plads:",
+ 'tidypics:uploader:choose' => "Vælg fotos",
+ 'tidypics:uploader:upload' => "Upload fotos",
+ 'tidypics:uploader:describe' => "Beskriv fotos",
+ 'tidypics:uploader:basic' => 'Du kan uploade op til 10 fotos ad gangen (%s MB maksimum pr. foto)',
+ 'tidypics:sort:instruct' => 'Sortér fotos i albummet ved hjælp af drag and drop. Klik derefter på knappen Gem.',
+
+ //views
+ 'image:total' => "Billeder i album:",
+ 'image:by' => "Billede tilføjet af",
+ 'album:by' => "Album oprettet af:",
+ 'album:created:on' => "Oprettet",
+ 'image:none' => "Ingen billeder tilføjet.",
+ 'image:back' => "Forrige",
+ 'image:next' => "Næste",
+
+ //rss
+ 'tidypics:posted' => 'Billedet indstilles individuelt:',
+
+ //widgets
+ 'tidypics:widget:albums' => "Fotoalbum",
+ 'tidypics:widget:album_descr' => "Viser seneste album",
+ 'tidypics:widget:num_albums' => "Antal albums",
+ 'tidypics:widget:latest' => "Nyeste billeder",
+ 'tidypics:widget:latest_descr' => "Vis seneste billeder",
+ 'tidypics:widget:num_latest' => "Antal billeder",
+ 'album:more' => "Vis alle albums",
+
+ //river
+ 'image:river:created' => "%s har tilføjet et billede %s i album %s",
+ 'image:river:created:multiple' => "%s added %u photos to album %s",
+ 'image:river:item' => "et billede",
+ 'image:river:annotate' => "en kommentar til billedet",
+ 'album:river:created' => "%s har tilføjet et nyt album",
+ 'album:river:group' => "i gruppen",
+ 'album:river:item' => "et album",
+ 'album:river:annotate' => "en kommentar til albummet",
+
+ //notifications
+ 'tidypics:newalbum' => 'Nye Fotoalbum',
+
+
+ // Status messages
+ 'tidypics:upl_success' => "Billedet er uploadet med succes",
+ 'image:saved' => "Billedet blev gemt",
+ 'images:saved' => "Alle billeder er gemt",
+ 'image:deleted' => "Billedet blev slettet",
+ 'image:delete:confirm' => "Ønsker du at slette dette billede?",
+ 'images:edited' => "Billedet er blevet opdateret",
+ 'album:edited' => "Albummet er blevet opdateret",
+ 'album:saved' => "Albummet blev gemt",
+ 'album:deleted' => "Albummet er blevet slettet",
+ 'album:delete:confirm' => "Ønsker du at slette dette album?",
+ 'album:created' => "Deres nye album er skabt",
+ 'tidypics:settings:save:ok' => 'Tidypics Indstillingerne er gemt',
+ 'tidypics:album:sorted' => 'Albummet %s er sorteret',
+ 'tidypics:upgrade:success' => 'Tidypics blev opgraderet med succes',
+
+ //Error messages
+ 'tidypics:partialuploadfailure' => "Der opstod en fejl under uploadingen af billeder (%s af %s billeder)",
+ 'tidypics:completeuploadfailure' => "Upload af billede mislykkedes",
+ 'tidypics:exceedpostlimit' => "Alt for mange store billeder på én gang - forsøg evt. at overføre færre eller mindre billeder",
+ 'tidypics:noimages' => "Ingen billeder udvalgt til upload",
+ 'tidypics:image_mem' => "Billedet er for stort",
+ 'tidypics:image_pixels' => "Billedet har for mange pixels",
+ 'tidypics:unk_error' => "Ukendt fejl opstod under upload",
+ 'tidypics:save_error' => "Ukendt fejl opstod, da billedet skulle gemmes på serveren",
+ 'tidypics:not_image' => "Type af billede kan ikke genkendes",
+ 'image:deletefailed' => "Dit billede kunne ikke slettes",
+ 'image:downloadfailed' => "Fejl: Billedet er ikke tilgængeligt i øjeblikket",
+ 'tidypics:nosettings' => "Administratoren af webstedet, har ikke foretaget justeringer for fotoalbum",
+ 'tidypics:exceed_quota' => "Din tildelte plads er opbrugt!",
+ 'images:notedited' => "Ikke alle billeder er blevet opdateret",
+ 'album:none' => "Ingen albums skabt endnu",
+ 'album:uploadfailed' => "Dit album kunne ikke gemmes",
+ 'album:deletefailed' => "Dit album kunne ikke slettes",
+ 'album:blank' => "Giv venligst dette album en titel samt beskrivelse",
+ 'tidypics:upgrade:failed' => "Opgraderingen af Tidypics mislykkedes",
+);
+
+add_translation("da", $danish); \ No newline at end of file
diff --git a/mod/lightpics/languages/de.php b/mod/lightpics/languages/de.php
new file mode 100644
index 000000000..ac8b99bcb
--- /dev/null
+++ b/mod/lightpics/languages/de.php
@@ -0,0 +1,248 @@
+<?php
+
+$german = array(
+ // hack for core bug
+ 'untitled' => "Unbenannt",
+
+ // Menu items and titles
+ 'image' => "Bild",
+ 'images' => "Bilder",
+ 'caption' => "Beschreibung",
+ 'photos' => "Bilder",
+ 'album' => "Bilderalbum",
+ 'albums' => "Bilderalben",
+ 'tidypics:disabled' => 'Deaktiviert',
+ 'tidypics:enabled' => 'Aktiviert',
+ 'admin:settings:photos' => 'Lightpics',
+
+ 'photos:add' => "Album hinzufügen",
+ 'images:upload' => "Bilder hochladen",
+
+ 'album:slideshow' => "Diashow ansehen",
+ 'album:yours' => "Deine Bilderalben",
+ 'album:yours:friends' => "Bilderalben Deiner Freunde",
+ 'album:user' => "Bilderalben von %s",
+ 'album:friends' => "Bilderalben von Freunden",
+ 'album:all' => "Alle Bilderalben",
+ 'photos:group' => "Gruppen-Bilder",
+ 'item:object:image' => "Bilder",
+ 'item:object:album' => "Alben",
+ 'tidypics:uploading:images' => "Die Bilder werden hochgeladen.",
+ 'tidypics:enablephotos' => 'Gruppen-Alben aktivieren',
+ 'tidypics:editprops' => 'Bild bearbeiten',
+ 'tidypics:mostcommented' => 'Meist kommentierte Bilder',
+ 'tidypics:mostcommentedthismonth' => 'Meist kommentierte Bilder des Monats',
+ 'tidypics:mostcommentedtoday' => 'Meist kommentierte Bilder des Tages',
+ 'tidypics:mostviewed' => 'Am häufigsten angesehene Bilder',
+ 'tidypics:mostvieweddashboard' => 'Am häufigsten angesehene Bilder auf Dashboard',
+ 'tidypics:mostviewedthisyear' => 'Am häufigsten angesehene Bilder des Jahres',
+ 'tidypics:mostviewedthismonth' => 'Am häufigsten angesehene Bilder des Monats',
+ 'tidypics:mostviewedlastmonth' => 'Am häufigsten angesehene Bilder im letzten Monat',
+ 'tidypics:mostviewedtoday' => 'Am häufigsten angesehene Bilder des Tages',
+ 'tidypics:recentlyviewed' => 'Zuletzt angesehene Bilder',
+ 'tidypics:recentlycommented' => 'Zuletzt kommentierte Bilder',
+ 'tidypics:mostrecent' => 'Neue Bilder der Community-Seite',
+ 'tidypics:yourmostviewed' => 'Deine am häufigsten angesehenen Bilder',
+ 'tidypics:yourmostrecent' => 'Zuletzt hochgeladene Bilder',
+ 'tidypics:friendmostviewed' => "Am häufigsten angesehene Bilder von %s",
+ 'tidypics:friendmostrecent' => "Zuletzt hochgeladene Bilder von %s",
+ 'tidypics:highestrated' => "Am höchsten bewertete Bilder",
+ 'tidypics:views' => "%s Zugriffe",
+ 'tidypics:viewsbyowner' => "Zugriffe: %s von %s Mitglieder (Dich nicht mitgerechnet)",
+ 'tidypics:viewsbyothers' => "Zugriffe: %s (%s von Dir)",
+ 'tidypics:administration' => 'Tidypics-Administration',
+ 'tidypics:stats' => 'Statistik',
+ 'tidypics:nophotosingroup' => 'Diese Gruppe hat noch keine Bilder.',
+ 'tidypics:upgrade' => 'Aktualisieren',
+ 'tidypics:sort' => 'Umsortieren des %s-Bilderalbums',
+ 'tidypics:none' => 'Keine Bilderalben vorhanden.',
+
+ //settings
+ 'tidypics:settings' => 'Einstellungen',
+ 'tidypics:settings:main' => 'Grundeinstellungen',
+ 'tidypics:settings:image_lib' => "Image Library",
+ 'tidypics:settings:thumbnail' => "Erzeugung von Vorschaubildern",
+ 'tidypics:settings:help' => "Hilfe",
+ 'tidypics:settings:download_link' => "Zeige Download-Link",
+ 'tidypics:settings:photo_ratings' => "Bewerten von Bildern erlauben (benötigt das Elggx Fivestar-Plugin oder ein vergleichbares)",
+ 'tidypics:settings:exif' => "EXIF-Daten anzeigen",
+ 'tidypics:settings:view_count' => "Zugriffszähler anzeigen",
+ 'tidypics:settings:grp_perm_override' => "Gruppen-Mitgliedern unbeschränkten Zugriff auf die Verwaltung von Gruppen-Alben geben",
+ 'tidypics:settings:maxfilesize' => "Maximal erlaubte Bildgröße in Megabytes (MB):",
+ 'tidypics:settings:quota' => "Quota für Benutzer in Megabytes (MB) (0 = kein Quota)",
+ 'tidypics:settings:im_path' => "Der Pfad zu den ImageMagick-Kommandozeilentools auf dem Server",
+ 'tidypics:settings:img_river_view' => "Anzahl der Einträge im River beim gleichzeitigen Hochladen mehrerer Bilder",
+ 'tidypics:settings:album_river_view' => "Anzeige des Albumcovers oder eines Sets von Bildern für neue Alben",
+ 'tidypics:settings:largesize' => "Bildgröße in der Hauptansicht",
+ 'tidypics:settings:smallsize' => "Bildgröße in der Alben-Ansicht",
+ 'tidypics:settings:tinysize' => "Bildgröße von Vorschaubildern",
+ 'tidypics:settings:sizes:instructs' => 'Du mußt eventuell die CSS-Einstellungen anpassen, falls Du die vorgegebenen Standard-Bildgrößen änderst.',
+ 'tidypics:settings:im_id' => "Bilder-ID",
+ 'tidypics:settings:heading:img_lib' => "Image-Library-Einstellungen",
+ 'tidypics:settings:heading:main' => "Grundeinstellungen",
+ 'tidypics:settings:heading:river' => "Einstellungen für die River-Integration",
+ 'tidypics:settings:heading:sizes' => "Größe der Vorschaubilder",
+ 'tidypics:settings:heading:groups' => "Einstellungen für die Gruppen-Integration",
+ 'tidypics:option:all' => 'Alle',
+ 'tidypics:option:none' => 'Keine',
+ 'tidypics:option:cover' => 'Cover',
+ 'tidypics:option:set' => 'Set',
+
+ // server analysis
+ 'tidypics:server_info' => 'Informationen über den Server',
+ 'tidypics:server_info:gd_desc' => 'Elgg setzt voraus, dass die GD-PHP-Erweiterung verfügbar ist.',
+ 'tidypics:server_info:exec_desc' => 'Benötigt für die ImageMagick-Kommandozeilentools.',
+ 'tidypics:server_info:memory_limit_desc' => 'Passe die PHP-Variable memory_limit an, um mehr Speicher zur Verfügung zu stellen.',
+ 'tidypics:server_info:peak_usage_desc' => 'Dies ist ungefähr der Mindest-Speicherbedarf pro Seite.',
+ 'tidypics:server_info:upload_max_filesize_desc' => 'Maximal erlaubte Dateigröße für ein einzelnes hochzuladendes Bild.',
+ 'tidypics:server_info:post_max_size_desc' => '"Max post size" abzüglich der Größe der HTML-Form = Maximal mögliche Gesamtgröße von gleichzeitig hochzuladenden Bildern.',
+ 'tidypics:server_info:max_input_time_desc' => 'Maximale erlaubte Dauer, in der das Hochladen von Daten auf den Server abgeschlossen sein muss.',
+ 'tidypics:server_info:max_execution_time_desc' => 'Maximal erlaubte Ausführdauer für ein Skript auf dem Server.',
+
+ 'tidypics:server_info:php_version' => 'PHP-Version',
+ 'tidypics:server_info:memory_limit' => 'Für PHP verfügbarer Speicher',
+ 'tidypics:server_info:peak_usage' => 'Genutzer Speicher, um diese Seite zu laden',
+ 'tidypics:server_info:upload_max_filesize' => 'PHP-Einstellung von upload_max_filesize',
+ 'tidypics:server_info:post_max_size' => 'PHP-Einstellung von post_max_size',
+ 'tidypics:server_info:max_input_time' => 'PHP-Einstellung von max_input_time',
+ 'tidypics:server_info:max_execution_time' => 'PHP-Einstellung von max_execution_time',
+ 'tidypics:server_info:use_only_cookies' => 'PHP-Einstellung von session.use_only_cookies',
+
+ 'tidypics:server_config' => 'Server-Konfiguration',
+ 'tidypics:server_configuration_doc' => 'Dokumentation über die Konfigurierung des Servers',
+
+ // ImageMagick test
+ 'tidypics:lib_tools:testing' =>
+ 'Tidypics benötigt den Pfad auf dem Server zu den ImageMagick-Kommandozeilentools, falls Du diese als Image-Library verwenden willst. Dein Webhoster sollte Dir diese Information mitteilen können. Du kannst im folgenden prüfen, ob dieser Pfad korrekt ist. Wenn der Test erfolgreich ist, sollten Informationen über die auf dem Server installierte Version von ImageMagick angezeigt werden.',
+
+ // thumbnail tool
+ 'tidypics:thumbnail_tool' => 'Vorschaubild-Erzeugung',
+ 'tidypics:thumbnail_tool_blurb' =>
+ 'Im Folgenden kannst Du Vorschaubilder von Bildern erzeugen, falls dies beim Hochladen der Bilder fehlgeschlagen ist. Die Erzeugung der Vorschaubilder kann fehlschlagen, wenn die Image-Library nicht richtig eingerichtet ist oder falls für die GD-PHP-Erweiterung nicht genügend Arbeitsspeicher verfügbar ist, um das Bild zu laden und die Größe zu ändern. Falls die Mitglieder Deiner Seite bei der Erzeugung der Vorschaubilder für ihre hochgeladenen Bilder Probleme hatten, kannst Du im folgenden die Erzeugung der Vorschaubilder wiederholen, nachdem Du den Server bzw. Tidypics richtig konfiguriert hast. Bestimme die GUID des Bildes, für das Du Vorschaubilder erzeugen willst (dies ist die Nummer, die fast am Ende der URL enthalten ist, wenn Du dieses Bilder auf Deiner Seite anschaust) und gebe diese Nummer im folgenden Eingabefeld ein.',
+ 'tidypics:thumbnail_tool:unknown_image' => 'Das Originalbild kann nicht gefunden werden.',
+ 'tidypics:thumbnail_tool:invalid_image_info' => 'Beim Abrufen Bildinformationen ist ein Fehler aufgetreten.',
+ 'tidypics:thumbnail_tool:create_failed' => 'Die Erzeugung der Vorschaubilder ist fehlgeschlagen.',
+ 'tidypics:thumbnail_tool:created' => 'Die Vorschaubilder wurden erzeugt.',
+
+ //actions
+ 'album:create' => "Neues Album hinzufügen",
+ 'album:add' => "Neues Album hinzufügen",
+ 'album:addpix' => "Bilder hinzufügen",
+ 'album:edit' => "Album bearbeiten",
+ 'album:delete' => "Album löschen",
+ 'album:sort' => "Umsortieren",
+ 'image:edit' => "Bild bearbeiten",
+ 'image:delete' => "Bild löschen",
+ 'image:download' => "Bild herunterladen",
+
+ //forms
+ 'album:title' => "Titel",
+ 'album:desc' => "Beschreibung",
+ 'album:tags' => "Tags",
+ 'album:cover' => "Dieses Bild als Albumcover verwenden?",
+ 'album:cover_link' => 'Zum Albumcover machen',
+ 'tidypics:title:quota' => 'Quota',
+ 'tidypics:quota' => "Quota-Ausnutzung:",
+ 'tidypics:uploader:choose' => "Wähle die Bilder aus",
+ 'tidypics:uploader:upload' => "Lade die Bilder hoch",
+ 'tidypics:uploader:describe' => "Gebe Beschreibungen für die Bilder ein",
+ 'tidypics:uploader:filedesc' => 'Bilddateien (jpeg, png, gif)',
+ 'tidypics:uploader:instructs' => 'Das Hochladen von Bilder erfolgt in drei einfachen Schritten: Bilder zum Hochladen auswählen, diese Bilder hochladen und dann Beschreibungen für diese Bilder eingeben. Pro Bilddatei gibt es eine Größenbeschränkung von %s MB. Falls Du auf Deinem Computer Flash nicht installiert hast, ist auch ein <a href="%s">Alternativer Uploader</a> verfügbar.',
+ 'tidypics:uploader:basic' => 'Du kannst bis zu 10 Bilder auf einmal hochladen (maximale Dteigröße %s MB pro Bild).',
+ 'tidypics:sort:instruct' => 'Sortiere die Bilder im Album durch Drag-and-Drop um. Dann speichere Deine Änderungen.',
+ 'tidypics:sort:no_images' => 'Es wurden keine Bilder gefunden, die umsortiert werden könnten. Lade Bilder hoch, indem Du dem obigen Link folgst.',
+
+ // albums
+ 'album:num' => '%s Bilder',
+
+ //views
+ 'image:total' => "Bilder im Album:",
+ 'image:by' => "Bild hinzugefügt von",
+ 'album:by' => "Album erstellt von",
+ 'album:created:on' => "Erstellt",
+ 'image:none' => "Es wurden noch keine Bilder hinzugefügt.",
+ 'image:back' => "Vorheriges",
+ 'image:next' => "Nächstes",
+ 'image:index' => "%u von %u",
+
+ //rss
+ 'tidypics:posted' => 'hat ein Bild hinzugefügt:',
+
+ //widgets
+ 'tidypics:widget:albums' => "Bilderalben",
+ 'tidypics:widget:album_descr' => "Auflistung Deiner neuesten Bilderalben",
+ 'tidypics:widget:num_albums' => "Anzahl der anzuzeigenden Alben",
+ 'tidypics:widget:latest' => "Neueste Bilder",
+ 'tidypics:widget:latest_descr' => "Auflistung Deiner neuesten Bilder",
+ 'tidypics:widget:num_latest' => "Anzahl der anzuzeigenden Bilder",
+ 'album:more' => "Alle Alben anzeigen",
+
+ //river
+ 'river:create:object:image' => "%s hat das Bild %s hochgeladen.",
+ 'image:river:created' => "%s hat ein Bild zum Album %s hinzugefügt.",
+ 'image:river:created:multiple' => "%s hat %u Bilder zum Album %s hinzugefügt.",
+ 'image:river:item' => "ein Bild",
+ 'image:river:annotate' => "einen Kommentar zum Bild",
+ 'river:create:object:album' => "%s hat das neue Bilderalbum %s hinzugefügt.",
+ 'album:river:group' => "in der Gruppe",
+ 'album:river:item' => "ein Album",
+ 'album:river:annotate' => "einen Kommentar zum Bilderalbum",
+ 'river:comment:object:image' => '%s hat einen Kommentar zum Bild %s geschrieben.',
+ 'river:comment:object:album' => '%s hat einen Kommentar zum Bilderalbum %s geschrieben.',
+
+ // notifications
+ 'tidypics:newalbum_subject' => 'Neues Bilderalbum',
+ 'tidypics:newalbum' => '%s hat ein neues Bilderalbum hinzugefügt.',
+ 'tidypics:updatealbum' => "%s hat neue Bilder zum Album %s hinzugefügt.",
+
+ // Status messages
+ 'tidypics:upl_success' => "Deine Bilder wurden hochgeladen.",
+ 'image:saved' => "Das Bild wurde gespeichert.",
+ 'images:saved' => "Alle Bilder wurden gespeichert.",
+ 'image:deleted' => "Das Bild wurde gelöscht.",
+ 'image:delete:confirm' => "Bist Du sicher, dass Du das Bild löschen willst?",
+ 'images:edited' => "Die Einstellungen für Deine Bilder wurden aktualisiert.",
+ 'album:edited' => "Die Einstellungen für Dein Album wurden aktualisiert.",
+ 'album:saved' => "Das Album wurde hinzugefügt.",
+ 'album:deleted' => "Das Album wurde gelöscht.",
+ 'album:delete:confirm' => "Bist Du sicher, dass Du das Album löschen willst?",
+ 'album:created' => "Dein neues Album wurde hinzugefügt.",
+ 'album:save_cover_image' => 'Das Albumcover wurde gespeichert.',
+ 'tidypics:settings:save:ok' => 'Die Einstellungen für das Tidypics-Plugin wurden gespeichert.',
+ 'tidypics:album:sorted' => 'Das Bilderalbum %s wurde umsortiert.',
+ 'tidypics:album:could_not_sort' => 'Das Bilderalbum %s konnte nicht umsortiert werden. Vergewissere Dich, dass in diesem Album Bilder vorhanden sind und versuche es noch einmal.',
+ 'tidypics:upgrade:success' => 'Das Upgrade des Tidypics-Plugins war erfolgreich.',
+
+ //Error messages
+ 'tidypics:baduploadform' => "Es gab ein unerwartetes Problem mit dem Uploader.",
+ 'tidypics:partialuploadfailure' => "Beim Hochladen einiger Bilder sind Fehler aufgetreten (bei %s von %s Bildern).",
+ 'tidypics:completeuploadfailure' => "Das Hochladen der Bilder ist fehlgeschlagen.",
+ 'tidypics:exceedpostlimit' => "Zu viele große Bilder auf einmal - versuche weniger Bilder auf einmal oder kleinere Bilder hochzuladen.",
+ 'tidypics:noimages' => "Es wurden keine Bilder zum Hochladen ausgewählt.",
+ 'tidypics:image_mem' => "Die Bilddatei ist zu groß.",
+ 'tidypics:image_pixels' => "Das Bild hat zu viele Pixel.",
+ 'tidypics:unk_error' => "Unbekannter Fehler beim Hochladen.",
+ 'tidypics:save_error' => "Unbekannter Fehler beim Speichern des Bildes auf dem Server.",
+ 'tidypics:not_image' => "Das Dateiformat des Bildes wurde nicht erkannt oder wird nicht unterstützt.",
+ 'tidypics:deletefailed' => "Beim Löschen ist ein Fehler aufgetreten.",
+ 'tidypics:deleted' => "Das Löschen war erfolgreich.",
+ 'tidypics:nosettings' => "Der Administrator dieser Community-Seite hat leider bisher keine Einstellungen für Bilderalben vorgenommen.",
+ 'tidypics:exceed_quota' => "Du hast die von Administrator dieser Community-Seite gesetze Quota für Bilder überschritten.",
+ 'tidypics:cannot_upload_exceeds_quota' => 'Das Bild wurde nicht hochgeladen. Die Dateigröße übersteigt die verfügbare Quota.',
+
+ 'album:none' => "Es wurden noch keine Alben hinzugefügt.",
+ 'album:uploadfailed' => "Beim Hinzufügen des Bilderalbums ist ein Fehler aufgetreten.",
+ 'album:deletefailed' => "Beim Löschen des Bilderalbums ist ein Fehler aufgetreten.",
+ 'album:blank' => "Bitte gib diesem Album einen Titel.",
+ 'album:invalid_album' => 'Unzulässiges Bilderalbum.',
+ 'album:cannot_save_cover_image' => 'Das Albumcover kann nicht gespeichert werden.',
+
+ 'image:downloadfailed' => "Entschuldigung. Das Bild ist nicht verfügbar.",
+ 'images:notedited' => "Es konnten nicht alle Bilder fehlerfrei hochgeladen werden.",
+ 'image:blank' => 'Bitte gib diesem Bild einen Titel.',
+ 'image:error' => 'Das Bild konnte nicht gespeichert werden.',
+
+ 'tidypics:upgrade:failed' => "Das Upgrade des Tidypics-Plugins ist gescheitert",
+ );
+
+ add_translation("de",$german);
diff --git a/mod/lightpics/languages/en.php b/mod/lightpics/languages/en.php
new file mode 100644
index 000000000..f4c95825f
--- /dev/null
+++ b/mod/lightpics/languages/en.php
@@ -0,0 +1,262 @@
+<?php
+
+$english = array(
+ // hack for core bug
+ 'untitled' => "untitled",
+
+ // Menu items and titles
+ 'image' => "Image",
+ 'images' => "Images",
+ 'caption' => "Caption",
+ 'photos' => "Photos",
+ 'album' => "Photo Album",
+ 'albums' => "Photo Albums",
+ 'tidypics:disabled' => 'Disabled',
+ 'tidypics:enabled' => 'Enabled',
+ 'admin:settings:photos' => 'Lightpics',
+
+ 'photos:add' => "Create album",
+ 'images:upload' => "Upload photos",
+
+ 'album:slideshow' => "Slideshow",
+ 'album:yours' => "Your photo albums",
+ 'album:yours:friends' => "Your friends' photo albums",
+ 'album:user' => "%s's photo albums",
+ 'album:friends' => "Friends' photo albums",
+ 'album:all' => "All site photo albums",
+ 'photos:group' => "Group photos",
+ 'item:object:image' => "Photos",
+ 'item:object:album' => "Albums",
+ 'tidypics:uploading:images' => "Please wait. Uploading images.",
+ 'tidypics:enablephotos' => 'Enable group photo albums',
+ 'tidypics:editprops' => 'Edit Image Properties',
+ 'tidypics:mostcommented' => 'Most commented images',
+ 'tidypics:mostcommentedthismonth' => 'Most commented this month',
+ 'tidypics:mostcommentedtoday' => 'Most commented today',
+ 'tidypics:mostviewed' => 'Most viewed images',
+ 'tidypics:mostvieweddashboard' => 'Most viewed dashboard',
+ 'tidypics:mostviewedthisyear' => 'Most viewed this year',
+ 'tidypics:mostviewedthismonth' => 'Most viewed this month',
+ 'tidypics:mostviewedlastmonth' => 'Most viewed last month',
+ 'tidypics:mostviewedtoday' => 'Most viewed today',
+ 'tidypics:recentlyviewed' => 'Recently viewed images',
+ 'tidypics:recentlycommented' => 'Recently commented images',
+ 'tidypics:mostrecent' => 'Most recent images',
+ 'tidypics:yourmostviewed' => 'Your most viewed images',
+ 'tidypics:yourmostrecent' => 'Your most recent images',
+ 'tidypics:friendmostviewed' => "%s's most viewed images",
+ 'tidypics:friendmostrecent' => "%s's most recent images",
+ 'tidypics:highestrated' => "Highest rated images",
+ 'tidypics:views' => "%s views",
+ 'tidypics:viewsbyowner' => "by %s users (not including you)",
+ 'tidypics:viewsbyothers' => "(%s by you)",
+ 'tidypics:administration' => 'Tidypics Administration',
+ 'tidypics:stats' => 'Stats',
+ 'tidypics:nophotosingroup' => 'This groups does not have any photos yet',
+ 'tidypics:upgrade' => 'Upgrade',
+ 'tidypics:sort' => 'Sorting the %s album',
+ 'tidypics:none' => 'No photo albums',
+
+ //upload
+ 'tidypics:upload:error' => 'Error:',
+ 'tidypics:upload:maxfilesize' => 'File is too big',
+ 'tidypics:upload:minfilesize' => 'File is too small',
+ 'tidypics:upload:acceptfiletypes' => 'Filetype not allowed',
+ 'tidypics:upload:maxnumberoffiles' => 'Max number of files exceeded',
+
+ //settings
+ 'tidypics:settings' => 'Settings',
+ 'tidypics:settings:main' => 'Primary settings',
+ 'tidypics:settings:image_lib' => "Image Library",
+ 'tidypics:settings:thumbnail' => "Thumbnail Creation",
+ 'tidypics:settings:help' => "Help",
+ 'tidypics:settings:download_link' => "Show download link",
+ 'tidypics:settings:photo_ratings' => "Enable photo ratings (requires rate plugin of Miguel Montes or compatible)",
+ 'tidypics:settings:exif' => "Display EXIF data",
+ 'tidypics:settings:view_count' => "Display view count",
+ 'tidypics:settings:grp_perm_override' => "Allow group members full access to group albums",
+ 'tidypics:settings:maxfilesize' => "Maximum image size in megabytes (MB):",
+ 'tidypics:settings:quota' => "User Quota (MB) - 0 equals no quota",
+ 'tidypics:settings:im_path' => "Enter the path to your ImageMagick commands",
+ 'tidypics:settings:img_river_view' => "How many entries in activity river for each batch of uploaded images",
+ 'tidypics:settings:album_river_view' => "Show the album cover or a set of photos for new album",
+ 'tidypics:settings:largesize' => "Primary image size",
+ 'tidypics:settings:smallsize' => "Album view image size",
+ 'tidypics:settings:tinysize' => "Thumbnail image size",
+ 'tidypics:settings:sizes:instructs' => 'You may need to change the CSS if you change the default sizes',
+ 'tidypics:settings:im_id' => "Image ID",
+ 'tidypics:settings:heading:img_lib' => "Image Library Settings",
+ 'tidypics:settings:heading:main' => "Major Settings",
+ 'tidypics:settings:heading:river' => "Activity Integration Options",
+ 'tidypics:settings:heading:sizes' => "Thumbnail Size",
+ 'tidypics:settings:heading:groups' => "Group Settings",
+ 'tidypics:option:all' => 'All',
+ 'tidypics:option:none' => 'None',
+ 'tidypics:option:cover' => 'Cover',
+ 'tidypics:option:set' => 'Set',
+
+ // server analysis
+ 'tidypics:server_info' => 'Server Information',
+ 'tidypics:server_info:gd_desc' => 'Elgg requires the GD extension to be loaded',
+ 'tidypics:server_info:exec_desc' => 'Required for ImageMagick command line',
+ 'tidypics:server_info:memory_limit_desc' => 'Change memory_limit to increase',
+ 'tidypics:server_info:peak_usage_desc' => 'This is approximately the minimum per page',
+ 'tidypics:server_info:upload_max_filesize_desc' => 'Max size of an uploaded image',
+ 'tidypics:server_info:post_max_size_desc' => 'Max post size = sum of images + html form',
+ 'tidypics:server_info:max_input_time_desc' => 'Time script waits for upload to finish',
+ 'tidypics:server_info:max_execution_time_desc' => 'Max time a script will run',
+
+ 'tidypics:server_info:php_version' => 'PHP Version',
+ 'tidypics:server_info:memory_limit' => 'Memory Available to PHP',
+ 'tidypics:server_info:peak_usage' => 'Memory Used to Load This Page',
+ 'tidypics:server_info:upload_max_filesize' => 'Max File Upload Size',
+ 'tidypics:server_info:post_max_size' => 'Max Post Size',
+ 'tidypics:server_info:max_input_time' => 'Max Input Time',
+ 'tidypics:server_info:max_execution_time' => 'Max Execution Time',
+ 'tidypics:server_info:use_only_cookies' => 'Cookie only sessions',
+
+ 'tidypics:server_config' => 'Server Configuration',
+ 'tidypics:server_configuration_doc' => 'Server configuration documentation',
+
+ // ImageMagick test
+ 'tidypics:lib_tools:testing' =>
+ 'Tidypics needs to know the location of the ImageMagick executables if you have selected it
+ as the image library. Your hosting service should be able to provide this to you. You can test
+ if the location is correct below. If successful, it should display the version of ImageMagick installed
+ on your server.',
+
+ // thumbnail tool
+ 'tidypics:thumbnail_tool' => 'Thumbnail Creation',
+ 'tidypics:thumbnail_tool_blurb' =>
+ 'This page allows you to create thumbnails for images when the thumbnail creation failed during upload.
+ You may experience problems with thumbnail creation if your image library is not configured properly or
+ if there is not enough memory for the GD library to load and resize an image. If your users have
+ experienced problems with thumbnail creation and you have corrected your configuration, you can try to redo the
+ thumbnails. Find the unique identifier of the photo (it is the number near the end of the url when viewing
+ a photo) and enter it below.',
+ 'tidypics:thumbnail_tool:unknown_image' => 'Unable to get original image',
+ 'tidypics:thumbnail_tool:invalid_image_info' => 'Error retrieving information about the image',
+ 'tidypics:thumbnail_tool:create_failed' => 'Failed to create thumbnails',
+ 'tidypics:thumbnail_tool:created' => 'Created thumbnails.',
+
+ //actions
+ 'album:create' => "Create new album",
+ 'album:add' => "Add Photo Album",
+ 'album:addpix' => "Add photos to album",
+ 'album:edit' => "Edit album",
+ 'album:delete' => "Delete album",
+ 'album:sort' => "Sort",
+ 'image:edit' => "Edit image",
+ 'image:delete' => "Delete image",
+ 'image:download' => "Download image",
+
+ //forms
+ 'album:title' => "Title",
+ 'album:desc' => "Description",
+ 'album:tags' => "Tags",
+ 'album:cover' => "Make this image the album cover?",
+ 'album:cover_link' => 'Make cover',
+ 'tidypics:title:quota' => 'Quota',
+ 'tidypics:quota' => "Quota usage:",
+ 'tidypics:uploader:choose' => "Choose photos",
+ 'tidypics:uploader:upload' => "Upload photos",
+ 'tidypics:uploader:describe' => "Describe photos",
+ 'tidypics:uploader:filedesc' => 'Image files (jpeg, png, gif)',
+ 'tidypics:uploader:help' => 'Tip: use <code>Ctrl</code> or <code>Shift</code> keys to select more than one file. You also can drag&drop photos from desktop.',
+ 'tidypics:sort:instruct' => 'Sort the album photos by dragging and dropping the images. Then click the save button.',
+ 'tidypics:sort:no_images' => 'No images found to sort. Upload images using the link above.',
+
+ // albums
+ 'album:num' => '%s photos',
+
+ //views
+ 'image:total' => "Images in album:",
+ 'image:by' => "Image added by",
+ 'album:by' => "Album created by",
+ 'album:created:on' => "Created",
+ 'image:none' => "No images have been added yet.",
+ 'image:back' => "Previous",
+ 'image:next' => "Next",
+ 'image:index' => "%u of %u",
+
+ //rss
+ 'tidypics:posted' => 'posted a photo:',
+
+ //widgets
+ 'tidypics:widget:albums' => "Photo Albums",
+ 'tidypics:widget:album_descr' => "Showcase your photo albums",
+ 'tidypics:widget:num_albums' => "Number of albums to display",
+ 'tidypics:widget:latest' => "Latest Photos",
+ 'tidypics:widget:latest_descr' => "Display your latest photos",
+ 'tidypics:widget:num_latest' => "Number of images to display",
+ 'album:more' => "View all albums",
+
+ // river
+ 'river:create:object:image' => "%s uploaded the photo %s",
+ 'image:river:created' => "%s added a photo to the album %s",
+ 'image:river:created:multiple' => "%s added %u photos to the album %s",
+ 'image:river:item' => "a photo",
+ 'image:river:annotate' => "a comment on the photo",
+ 'river:create:object:album' => "%s created a new photo album %s",
+ 'album:river:group' => "in the group",
+ 'album:river:item' => "an album",
+ 'album:river:annotate' => "a comment on the photo album",
+ 'river:comment:object:image' => '%s commented on the photo %s',
+ 'river:comment:object:album' => '%s commented on the album %s',
+
+ // notifications
+ 'tidypics:newalbum_subject' => 'New photo album',
+ 'tidypics:newalbum' => '%s created a new photo album',
+ 'tidypics:updatealbum' => "%s uploaded new photos to the album %s",
+
+ // Status messages
+ 'tidypics:upl_success' => "Your images uploaded successfully.",
+ 'image:saved' => "Your image was successfully saved.",
+ 'images:saved' => "All images were successfully saved.",
+ 'image:deleted' => "Your image was successfully deleted.",
+ 'image:delete:confirm' => "Are you sure you want to delete this image?",
+ 'images:edited' => "Your images were successfully updated.",
+ 'album:edited' => "Your album was successfully updated.",
+ 'album:saved' => "Your album was successfully saved.",
+ 'album:deleted' => "Your album was successfully deleted.",
+ 'album:delete:confirm' => "Are you sure you want to delete this album?",
+ 'album:created' => "Your new album has been created.",
+ 'album:save_cover_image' => 'Cover image saved.',
+ 'tidypics:settings:save:ok' => 'Successfully saved the Tidypics plugin settings',
+ 'tidypics:album:sorted' => 'The album %s is sorted',
+ 'tidypics:album:could_not_sort' => 'Could not sort the album %s. Make sure there are images in the album and try again.',
+ 'tidypics:upgrade:success' => 'Upgrade of Tidypics a success',
+
+ //Error messages
+ 'tidypics:baduploadform' => "There was an error with the upload form",
+ 'tidypics:partialuploadfailure' => "There were errors uploading some of the images (%s of %s images).",
+ 'tidypics:completeuploadfailure' => "Upload of images failed.",
+ 'tidypics:exceedpostlimit' => "Too many large images - try to upload fewer or smaller images.",
+ 'tidypics:noimages' => "No images were selected.",
+ 'tidypics:image_mem' => "Image is too large - too many bytes",
+ 'tidypics:image_pixels' => "Image has too many pixels",
+ 'tidypics:unk_error' => "Unknown upload error",
+ 'tidypics:save_error' => "Unknown error saving the image on server",
+ 'tidypics:not_image' => "This is not a recognized image type",
+ 'tidypics:deletefailed' => "Sorry. Deletion failed.",
+ 'tidypics:deleted' => "Successful deletion.",
+ 'tidypics:nosettings' => "Admin of this site has not set photo album settings.",
+ 'tidypics:exceed_quota' => "You have exceeded the quota set by the administrator",
+ 'tidypics:cannot_upload_exceeds_quota' => 'Image not uploaded. File size exceeds available quota.',
+
+ 'album:none' => "No albums have been created yet.",
+ 'album:uploadfailed' => "Sorry; we could not save your album.",
+ 'album:deletefailed' => "Your album could not be deleted.",
+ 'album:blank' => "Please give this album a title.",
+ 'album:invalid_album' => 'Invalid album',
+ 'album:cannot_save_cover_image' => 'Cannot save cover image',
+
+ 'image:downloadfailed' => "Sorry; this image is not available.",
+ 'images:notedited' => "Not all images were successfully updated",
+ 'image:blank' => 'Please give this image a title.',
+ 'image:error' => 'Could not save image.',
+
+ 'tidypics:upgrade:failed' => "The upgrade of Tidypics failed",
+);
+
+add_translation("en", $english);
diff --git a/mod/lightpics/languages/es.php b/mod/lightpics/languages/es.php
new file mode 100644
index 000000000..b3c773584
--- /dev/null
+++ b/mod/lightpics/languages/es.php
@@ -0,0 +1,210 @@
+<?php
+$language = array (
+ 'image' => 'Imagen',
+ 'images' => 'Imágenes',
+ 'caption' => 'Leyenda',
+ 'photos' => 'Fotos',
+ 'album' => 'Ãlbum de fotos',
+ 'albums' => 'Ãlbumes de fotos',
+ 'tidypics:disabled' => 'Desactivado',
+ 'tidypics:enabled' => 'Activado',
+ 'admin:settings:photos' => 'Lightpics',
+ 'photos:add' => 'Crear álbum',
+ 'images:upload' => 'Subir fotos',
+ 'album:slideshow' => 'Presentación de diapositivas',
+ 'album:yours' => 'Tus álbumes de fotos',
+ 'album:yours:friends' => 'Los álbumes de fotos de tus amigas',
+ 'album:user' => 'Ãlbumes de %s',
+ 'album:friends' => 'Ãlbumes de tus amigas',
+ 'album:all' => 'Todos los álbumes del sitio',
+ 'photos:group' => 'Fotos del grupo',
+ 'item:object:image' => 'Fotos',
+ 'item:object:album' => 'Ãlbumes',
+ 'tidypics:uploading:images' => 'Por favor espera. Subiendo imágenes',
+ 'tidypics:enablephotos' => 'Activar álbumes de fotos del grupo',
+ 'tidypics:editprops' => 'Editar propiedades de la imagen',
+ 'tidypics:mostcommented' => 'Imágenes más comentadas',
+ 'tidypics:mostcommentedthismonth' => 'Más comentadas este mes',
+ 'tidypics:mostcommentedtoday' => 'Más comentadas hoy',
+ 'tidypics:mostviewed' => 'Imágenes más vistas',
+ 'tidypics:mostvieweddashboard' => 'Escritorio más visto',
+ 'tidypics:mostviewedthisyear' => 'Más vistas este año',
+ 'tidypics:mostviewedthismonth' => 'Más vistas este mes',
+ 'tidypics:mostviewedlastmonth' => 'Más vistas el último més',
+ 'tidypics:mostviewedtoday' => 'Más vistas hoy',
+ 'tidypics:recentlyviewed' => 'Vistas recientemente',
+ 'tidypics:recentlycommented' => 'Imágenes comentadas recientemente',
+ 'tidypics:mostrecent' => 'Imágenes más recientes',
+ 'tidypics:yourmostviewed' => 'Tus imágenes más vistas',
+ 'tidypics:yourmostrecent' => 'Tus imágenes más recientes',
+ 'tidypics:friendmostviewed' => 'Imágenes más vistas de %s',
+ 'tidypics:friendmostrecent' => 'Imágenes más recientes de %s',
+ 'tidypics:highestrated' => 'Imágenes mejor valoradas',
+ 'tidypics:views' => '%s vistas',
+ 'tidypics:viewsbyowner' => 'por %s usuarias (sin incluirte)',
+ 'tidypics:viewsbyothers' => '(%s por ti)',
+ 'tidypics:administration' => 'Administración del Tidypics',
+ 'tidypics:stats' => 'Estadísticas',
+ 'tidypics:nophotosingroup' => 'Estos grupos no tienen ninguna foto',
+ 'tidypics:upgrade' => 'Mejorar',
+ 'tidypics:sort' => 'Ordenando el álbum %s',
+ 'tidypics:none' => 'No hay álbumes de fotos',
+ 'tidypics:upload:error' => 'Error:',
+ 'tidypics:upload:maxfilesize' => 'El archivo es demasiado grande',
+ 'tidypics:upload:minfilesize' => 'El archivo es demasiado pequeño',
+ 'tidypics:upload:acceptfiletypes' => 'Tipo de archivo no permitido',
+ 'tidypics:upload:maxnumberoffiles' => 'Número máximo de archivos excedido',
+ 'tidypics:settings' => 'Opciones',
+ 'tidypics:settings:main' => 'Opciones principales',
+ 'tidypics:settings:image_lib' => 'Librería de imágenes',
+ 'tidypics:settings:thumbnail' => 'Creación de previsualizaciones',
+ 'tidypics:settings:help' => 'Ayuda',
+ 'tidypics:settings:download_link' => 'Muestra enlace de descarga',
+ 'tidypics:settings:photo_ratings' => 'Activa puntuación de fotos (requiere la extensión de Miguel Montes o alguna compatible)',
+ 'tidypics:settings:exif' => 'Muestra los datos EXIF',
+ 'tidypics:settings:view_count' => 'Muestra un contador de vistas',
+ 'tidypics:settings:grp_perm_override' => 'Permitir acceso completo a los habitantes de este grupo al album de fotos',
+ 'tidypics:settings:maxfilesize' => 'Tamaño máximo de imagen, en megabytes (MB)',
+ 'tidypics:settings:quota' => 'Cuota de usuario (MB) - 0 significa sin cuota',
+ 'tidypics:settings:im_path' => 'Introduce la ruta a los comandos de ImageMagick',
+ 'tidypics:settings:img_river_view' => 'Cuantas entradas de actividad para cada paquete de imágenes subidas',
+ 'tidypics:settings:album_river_view' => 'Muestra la cubierta del álbum o un conjunto de fotos para un nuevo álbum',
+ 'tidypics:settings:largesize' => 'Tamaño de la imagen primaria',
+ 'tidypics:settings:smallsize' => 'Tamaño de la imagen en la vista de álbum',
+ 'tidypics:settings:tinysize' => 'Tamaño de la imagen de previsualización',
+ 'tidypics:settings:sizes:instructs' => 'Puede que tengas que cambiar el CSS si cambias los tamaños predefinidos',
+ 'tidypics:settings:im_id' => 'ID de imagen',
+ 'tidypics:settings:heading:img_lib' => 'Opciones de la librería de imágenes',
+ 'tidypics:settings:heading:main' => 'Opciones avanzadas',
+ 'tidypics:settings:heading:river' => 'Opciones de integración de actividad',
+ 'tidypics:settings:heading:sizes' => 'Tamaño de la previsualización',
+ 'tidypics:settings:heading:groups' => 'Opciones del grupo',
+ 'tidypics:option:all' => 'Todas',
+ 'tidypics:option:none' => 'Ninguna',
+ 'tidypics:option:cover' => 'Cubierta',
+ 'tidypics:option:set' => 'Conjunto',
+ 'tidypics:server_info' => 'Información del servidor',
+ 'tidypics:server_info:gd_desc' => 'El Elgg requiere que cargues la extensión GD',
+ 'tidypics:server_info:exec_desc' => 'Requerido para la línea de comandos de ImageMagick',
+ 'tidypics:server_info:memory_limit_desc' => 'Cambia el memory_limit para incrementarlo',
+ 'tidypics:server_info:peak_usage_desc' => 'Esto es aproximadamente el mínimo por página',
+ 'tidypics:server_info:upload_max_filesize_desc' => 'Tamaño máximo de una imagen subida',
+ 'tidypics:server_info:post_max_size_desc' => 'Tamaño máximo del mensaje = suma de las imágenes + formulario HTML',
+ 'tidypics:server_info:max_input_time_desc' => 'Tiempo que espera el script de subida para terminar',
+ 'tidypics:server_info:max_execution_time_desc' => 'Tiempo máximo que un script está funcionando',
+ 'tidypics:server_info:php_version' => 'Versión de PHP',
+ 'tidypics:server_info:memory_limit' => 'Memoria disponible para PHP',
+ 'tidypics:server_info:peak_usage' => 'Memoria utilizada para cargar esta página',
+ 'tidypics:server_info:upload_max_filesize' => 'Tamaño máximo de subida de archivos',
+ 'tidypics:server_info:post_max_size' => 'Tamaño máximo de las entradas',
+ 'tidypics:server_info:max_input_time' => 'Tiempo máximo para enviar',
+ 'tidypics:server_info:max_execution_time' => 'Tiempo máximo para la ejecución',
+ 'tidypics:server_info:use_only_cookies' => 'Sesiones sólo con cookies',
+ 'tidypics:server_config' => 'Configuración del servidor',
+ 'tidypics:server_configuration_doc' => 'Documentación de configuración del servidor',
+ 'tidypics:lib_tools:testing' => 'Tidypics necesita conocer la localización de los ejecutables de ImageMagick si lo has seleccionado como librería de imágenes. Tu servicio de hospedaje debería poder proporcionarte esto. Puedes comprobar si la localización es correcta más abajo. Si es así, debería mostrar la versión de ImageMagick que hay instalada en tu servidor.',
+ 'tidypics:thumbnail_tool' => 'Creación de previsualizaciones',
+ 'tidypics:thumbnail_tool_blurb' => 'Esta página te permite crear previsualizaciones para las imágenes cuando la creación de previsualizaciones falla durante la subida. Puedes tener algunos problemas con la creación de vistas previas si tu librería de imágenes no está configurada adecuadamente o si no hay suficiente memoria para que la librería GD cargue y cambie el tamaño de una imange. Si tus usuarias han tenido problemas con la creación de previsualizaciones y tienes configurada correctamente la aplicación, puedes probar de volver a hacer las vistas previas. Encuentra el identificador único de la foto (es el número cerca del final de la URL cuando ves una foto) y escríbelo aquí abajo.',
+ 'tidypics:thumbnail_tool:unknown_image' => 'No se puede conseguir la imagen original',
+ 'tidypics:thumbnail_tool:invalid_image_info' => 'Error al tratar de conseguir información sobre la imagen',
+ 'tidypics:thumbnail_tool:create_failed' => 'No se han podido crear las previsualizaciones',
+ 'tidypics:thumbnail_tool:created' => 'Previsualizaciones creadas.',
+ 'album:create' => 'Crear nuevo álbum',
+ 'album:add' => 'Añadir álbum de fotos',
+ 'album:addpix' => 'Añadir fotos al álbum',
+ 'album:edit' => 'Editar álbum',
+ 'album:delete' => 'Borrar álbum',
+ 'album:sort' => 'Ordenar',
+ 'image:edit' => 'Editar imagen',
+ 'image:delete' => 'Borrar imagen',
+ 'image:download' => 'Descargar imagen',
+ 'album:title' => 'Título',
+ 'album:desc' => 'Descripción',
+ 'album:tags' => 'Etiquetas',
+ 'album:cover' => '¿Hacer de esta imagen la carátula del álbum?',
+ 'album:cover_link' => 'Hacer caráctula',
+ 'tidypics:title:quota' => 'Couta',
+ 'tidypics:quota' => 'Uso de cuota:',
+ 'tidypics:uploader:choose' => 'Elige fotos',
+ 'tidypics:uploader:upload' => 'Sube fotos',
+ 'tidypics:uploader:describe' => 'Descripción de las fotos',
+ 'tidypics:uploader:filedesc' => 'Archivos de imagen (jpeg, png, gif)',
+ 'tidypics:uploader:help' => 'Consejo: utiliza <code>Ctrl</code> o <code>Shift</code> para seleccionar más de un archivo. Además puedes arrastrar fotos desde el escritorio.',
+ 'tidypics:sort:instruct' => 'Ordena las fotos del álbum arrastrándolas. Haz clic después en el botón de guardar.',
+ 'tidypics:sort:no_images' => 'No se han encontrado imágenes para ordenar. Sube imágenes con el enlace de más arriba.',
+ 'album:num' => '%s fotos',
+ 'image:total' => 'Imágenes en el álbum:',
+ 'image:by' => 'Imagen añadida por',
+ 'album:by' => 'Ãlbum creado por',
+ 'album:created:on' => 'Creado',
+ 'image:none' => 'No se ha añadido ninguna imagen aún.',
+ 'image:back' => 'Previa',
+ 'image:next' => 'Siguiente',
+ 'image:index' => '%u de %u',
+ 'tidypics:posted' => 'ha subido una foto:',
+ 'tidypics:widget:albums' => 'Ãlbums de fotos',
+ 'tidypics:widget:album_descr' => 'Muestra tus álbumes',
+ 'tidypics:widget:num_albums' => 'Número de álbums a mostrar',
+ 'tidypics:widget:latest' => 'Últimas fotos',
+ 'tidypics:widget:latest_descr' => 'Muestra tus últimas fotos',
+ 'tidypics:widget:num_latest' => 'Número de imágenes a mostrar',
+ 'album:more' => 'Ver todos los álbumes',
+ 'river:create:object:image' => '%s ha subido la foto %s',
+ 'image:river:created' => '%s ha añadido una foto al álbum %s',
+ 'image:river:created:multiple' => '%s ha añadido %u fotos al álbum %s',
+ 'image:river:item' => 'una foto',
+ 'image:river:annotate' => 'un comentario en la foto',
+ 'river:create:object:album' => '%s ha creado un nuevo álbum de fotos %s',
+ 'album:river:group' => 'en el grupo',
+ 'album:river:item' => 'un álbum',
+ 'album:river:annotate' => 'un comentario en el álbum de fotos',
+ 'river:comment:object:image' => '%s ha comentado en la foto %s',
+ 'river:comment:object:album' => '%s ha comentado en el álbum %s',
+ 'tidypics:newalbum_subject' => 'Nuevo álbum de fotos',
+ 'tidypics:newalbum' => '%s ha creado un álbum de fotos nuevo',
+ 'tidypics:updatealbum' => '%s ha subido nuevas fotos al álbum %s',
+ 'tidypics:upl_success' => 'Se han subido correctamente tus imágenes.',
+ 'image:saved' => 'Se ha guardado correctamente tu imagen.',
+ 'images:saved' => 'Todas las imágenes se han guardado correctamente.',
+ 'image:deleted' => 'Se ha eliminado correctamente tu imagen.',
+ 'image:delete:confirm' => '¿Estás segura de querer borrar esta imagen?',
+ 'images:edited' => 'Tus imágenes se han actualizado correctamente.',
+ 'album:edited' => 'Tu álbum se ha actualizado correctamente.',
+ 'album:saved' => 'Tu álbum se ha guardado correctamente.',
+ 'album:deleted' => 'Tu álbum se ha borrado correctamente.',
+ 'album:delete:confirm' => '¿Estás segura de querer borrar este álbum?',
+ 'album:created' => 'Tu nuevo álbum ha sido creado.',
+ 'album:save_cover_image' => 'Imagen de carátula guardada.',
+ 'tidypics:settings:save:ok' => 'Se han guardado correctamente las opciones del plugin Tidypics',
+ 'tidypics:album:sorted' => 'El álbum %s está ordenado',
+ 'tidypics:album:could_not_sort' => 'No se puede ordenar el álbum %s. Asegúrate de que hay imágenes en el álbum y vuélvelo a intentar.',
+ 'tidypics:upgrade:success' => 'La mejora de Tidypics ha sido un éxito',
+ 'tidypics:baduploadform' => 'Ha habido un error con el formulario de subida',
+ 'tidypics:partialuploadfailure' => 'Ha habido algunos errores al subir algunas de las imágenes (%s de %s).',
+ 'tidypics:completeuploadfailure' => 'La subida de imágenes ha fallado.',
+ 'tidypics:exceedpostlimit' => 'Las imágenes son demasiado grandes - inténtalo subiendo menos imágenes o más pequeñas.',
+ 'tidypics:noimages' => 'No has seleccionado ninguna imagen.',
+ 'tidypics:image_mem' => 'La imagen es demasiado grande - demasiados bytes',
+ 'tidypics:image_pixels' => 'La imagen tiene demasiados píxeles',
+ 'tidypics:unk_error' => 'Error desconocido durante la carga',
+ 'tidypics:save_error' => 'Error desconocido al guardar la imagen en el servidor',
+ 'tidypics:not_image' => 'No es un tipo de imagen reconocido',
+ 'tidypics:deletefailed' => 'Lo sentimos, el borrado ha fallado.',
+ 'tidypics:deleted' => 'Borrado correcto.',
+ 'tidypics:nosettings' => 'La administradora del sitio no ha ajustado las opciones para los álbumes.',
+ 'tidypics:exceed_quota' => 'Has excedido la cuota establecida por la administradora',
+ 'tidypics:cannot_upload_exceeds_quota' => 'Imagen no subida. El archivo supera la cuota disponible.',
+ 'album:none' => 'No se ha creado ningún álbum todavía.',
+ 'album:uploadfailed' => 'Lo sentimos, no podemos guardar tu álbum.',
+ 'album:deletefailed' => 'Tu álbum no puede ser borrado.',
+ 'album:blank' => 'Por favor, proporciona un título al álbum.',
+ 'album:invalid_album' => 'Ãlbum inválido',
+ 'album:cannot_save_cover_image' => 'No se puede guardar la imagen de cubierta',
+ 'image:downloadfailed' => 'Lo sentimos, esta imagen no está disponible.',
+ 'images:notedited' => 'No se han podido actualizar correctamente todas las fotos',
+ 'image:blank' => 'Por favor proporciona un título a la imagen.',
+ 'image:error' => 'No se puede guardar la imagen.',
+ 'tidypics:upgrade:failed' => 'La mejora de Tidypics ha fallado',
+ 'untitled' => 'Sin T&iacute;tulo',
+);
+add_translation("es", $language); \ No newline at end of file
diff --git a/mod/lightpics/languages/fr.php b/mod/lightpics/languages/fr.php
new file mode 100644
index 000000000..0b9ceac49
--- /dev/null
+++ b/mod/lightpics/languages/fr.php
@@ -0,0 +1,140 @@
+<?php
+
+// Generated by TranslationBrowser 20091025-06:26:52 PM
+
+$french = array(
+ 'untitled' => "Sans titre" ,
+ 'image' => "Image" ,
+ 'images' => "Images" ,
+ 'caption' => "Légende" ,
+ 'photos' => "Photos" ,
+ 'images:upload' => "Charger des images" ,
+ 'images:multiupload:todo' => "Sélectionnez un ou plusieurs fichiers à charger." ,
+ 'album' => "Album photo" ,
+ 'albums' => "Albums photo" ,
+ 'album:slideshow' => "Voir diaporama" ,
+ 'album:yours' => "Vos albums photo" ,
+ 'album:yours:friends' => "Les albums photo de vos amis" ,
+ 'album:user' => "Albums photo de %s" ,
+ 'album:friends' => "Albums photo des amis de %s" ,
+ 'album:all' => "Tout les albums photo" ,
+ 'album:group' => "Albums de groupe" ,
+ 'item:object:image' => "Photos" ,
+ 'item:object:album' => "Albums" ,
+ 'tidypics:uploading:images' => "Veuillez patientez, nous chargeons les fichiers." ,
+ 'tidypics:enablephotos' => "Activer les albums photo pour les groupes" ,
+ 'tidypics:editprops' => "Modifier les propriétés des images" ,
+ 'tidypics:mostcommented' => "Images les plus commentées." ,
+ 'tidypics:mostcommentedthismonth' => "Les plus commentés ce mois-ci" ,
+ 'tidypics:mostcommentedtoday' => "Les plus commentés ce jour-ci" ,
+ 'tidypics:mostviewed' => "Images les plus vues" ,
+ 'tidypics:mostvieweddashboard' => "Tableaux de bord les plus vus" ,
+ 'tidypics:mostviewedthisyear' => "Les plus vus cette année." ,
+ 'tidypics:mostviewedthismonth' => "Les plus vus ce mois-ci" ,
+ 'tidypics:mostviewedlastmonth' => "Les plus vus le mois dernier" ,
+ 'tidypics:mostviewedtoday' => "Les plus vus aujourd'hui" ,
+ 'tidypics:recentlyviewed' => "Images récemment vues" ,
+ 'tidypics:recentlycommented' => "Image récemment commentées" ,
+ 'tidypics:mostrecent' => "Images les plus récentes" ,
+ 'tidypics:yourmostviewed' => "Vos images les plus vues" ,
+ 'tidypics:yourmostrecent' => "Vos images les plus récentes" ,
+ 'tidypics:friendmostviewed' => "Les images les plus vues de %s" ,
+ 'tidypics:friendmostrecent' => "Les images les plus récentes de %s" ,
+ 'tidypics:highestrated' => "Les images les mieux notées" ,
+ 'tidypics:views' => "Vues: %s" ,
+ 'tidypics:viewsbyowner' => "par % membres (vous exclus)" ,
+ 'tidypics:viewsbyothers' => "(%s par vous)" ,
+ 'tidypics:administration' => "Administration Tydipics" ,
+ 'tidypics:stats' => "Stats" ,
+ 'tidypics:settings' => "Paramétrages" ,
+ 'tidypics:admin:instructions' => "Réglages principaux de Tydipics. Modifiez les pour votre usage et cliquez sur Sauvegarder" ,
+ 'tidypics:settings:image_lib' => "Librairie graphique" ,
+ 'tidypics:settings:thumbnail' => "Création des vignettes" ,
+ 'tidypics:settings:download_link' => "Voir le lien de download" ,
+ 'tidypics:settings:photo_ratings' => "Activer les notations des photos (nécessite le rate plugin de Miguel Montes ou compatible)" ,
+ 'tidypics:settings:exif' => "Voir les données EXIF" ,
+ 'tidypics:settings:view_count' => "Voir le compteur" ,
+ 'tidypics:settings:grp_perm_override' => "Autoriser l'acés total aux membres du groupe" ,
+ 'tidypics:settings:maxfilesize' => "Taille maximum des images en Mb:" ,
+ 'tidypics:settings:quota' => "Quota Utilisateur/Groupe (Mb) - O égal pas de quota" ,
+ 'tidypics:settings:im_path' => "Chemin de l'exécutable ImageMagick, terminé par un slash" ,
+ 'tidypics:settings:img_river_view' => "Combien d'entrées dans le river pour chaque lot de traitement des fichiers chargés" ,
+ 'tidypics:settings:album_river_view' => "Montrer la couverture de l'album ou un ensemble de photos pour tout nouvel album" ,
+ 'tidypics:settings:largesize' => "Taille initiale de l'image" ,
+ 'tidypics:settings:smallsize' => "Taille de la vue de l'album" ,
+ 'tidypics:settings:thumbsize' => "Taille des vignettes" ,
+ 'tidypics:settings:im_id' => "Identifiant de l'image" ,
+ 'album:create' => "Créer un nouvel album" ,
+ 'album:add' => "Ajouter un Album photo" ,
+ 'album:addpix' => "Ajouter des photos à l'album" ,
+ 'album:edit' => "Modifier l'album" ,
+ 'album:delete' => "Supprimer l'album" ,
+ 'image:edit' => "Modifier l'image" ,
+ 'image:delete' => "Supprimer l'image" ,
+ 'image:download' => "Télécharger l'image" ,
+ 'album:title' => "Titre" ,
+ 'album:desc' => "Description" ,
+ 'album:tags' => "Tags" ,
+ 'album:cover' => "Faire de cette image la couverture de l'album" ,
+ 'tidypics:quota' => "Quota utilisé:" ,
+ 'image:total' => "Images dans l'album:" ,
+ 'image:by' => "Image ajoutée par" ,
+ 'album:by' => "Album créé par" ,
+ 'album:created:on' => "Création" ,
+ 'image:none' => "Aucune image n'a encore été ajoutée" ,
+ 'image:back' => "Précédent" ,
+ 'image:next' => "Suivant" ,
+ 'tidypics:actiondelete' => "Supprimer" ,
+ 'tidypics:actioncancel' => "Annuler" ,
+ 'tidypics:inthisphoto' => "Dans cette photo" ,
+ 'tidypics:posted' => "a posté une photo" ,
+ 'tidypics:widget:albums' => "Albums photo" ,
+ 'tidypics:widget:album_descr' => "Échantillon de vos albums photo" ,
+ 'tidypics:widget:num_albums' => "Nombre de photos à montrer" ,
+ 'tidypics:widget:latest' => "Dernières photos" ,
+ 'tidypics:widget:latest_descr' => "Montrer les dernières photos" ,
+ 'tidypics:widget:num_latest' => "Nombre d'images à montrer" ,
+ 'album:more' => "Voir tout les albums" ,
+ 'image:river:created' => "%s a ajouté la photo %s à l'album %s" ,
+ 'image:river:item' => "une photo" ,
+ 'image:river:annotate' => "commentaire sur la photo" ,
+ 'album:river:created' => "%s a créé un nouvel album photo" ,
+ 'album:river:group' => "dans le groupe" ,
+ 'album:river:item' => "un album" ,
+ 'album:river:annotate' => "un commentaire sur l'album photo" ,
+ 'tidypics:newalbum' => "Nouvel album photo" ,
+ 'tidypics:upl_success' => "Vos images ont été correctement chargées." ,
+ 'image:saved' => "Votre image a été correctement enregistrée" ,
+ 'images:saved' => "Toutes les images ont été correctement enregistrées" ,
+ 'image:deleted' => "Votre image a correctement été supprimée" ,
+ 'image:delete:confirm' => "Confirmez-vous la suppression de cette image" ,
+ 'images:edited' => "Vos images ont été correctement mises à jour" ,
+ 'album:edited' => "Votre album a correctement été mis à jour" ,
+ 'album:saved' => "Votre album a correctement été enregistré" ,
+ 'album:deleted' => "Votre album a correctement été supprimé" ,
+ 'album:delete:confirm' => "Confirmez-vous la suppression de cet album" ,
+ 'album:created' => "Votre nouvel album a été créé" ,
+ 'tidypics:settings:save:ok' => "Réglages du plugin Tydipics enregistrés" ,
+ 'tidypics:upgrade:success' => "Mise à jour de Tydipics effectuée" ,
+ 'tidypics:partialuploadfailure' => "Des erreurs sont survenues durant le chargement des images (%s sur %s images)" ,
+ 'tidypics:completeuploadfailure' => "Echec du chargement des images " ,
+ 'tidypics:exceedpostlimit' => "Trop d'images trop lourdes - essayez de charges des images plus petites" ,
+ 'tidypics:noimages' => "Aucune image sélectionnée" ,
+ 'tidypics:image_mem' => "Image trop large - taille trop grosse" ,
+ 'tidypics:image_pixels' => "L'image a trop de pixels" ,
+ 'tidypics:unk_error' => "Erreur inconnue de chargement" ,
+ 'tidypics:save_error' => "Erreur inconnue lors de l'enregistrement de l'image sur le serveur" ,
+ 'tidypics:not_image' => "Type d'image non reconnu" ,
+ 'image:deletefailed' => "Votre image n'a pu être supprimée" ,
+ 'image:downloadfailed' => "Désolé, image indisponible pour le moment" ,
+ 'tidypics:nosettings' => "L'administrateur n'a pas effectué les reglages minimaux des albums" ,
+ 'tidypics:exceed_quota' => "Quota fixé par l'administrateur dépassé" ,
+ 'images:notedited' => "Toutes les images n'ont pas été correctement mises à jour" ,
+ 'album:none' => "Aucun album encore créé" ,
+ 'album:uploadfailed' => "Désolé, nous ne pouvons pas enregistrer l'album" ,
+ 'album:deletefailed' => "Votre album ne peut pas être supprimé pour le moment" ,
+ 'album:blank' => "Donnez un titre et une description à cet album" ,
+ 'tidypics:upgrade:failed' => "Mise à jour de Tydipics infructueuse"
+);
+
+add_translation('fr', $french);
diff --git a/mod/lightpics/languages/he.php b/mod/lightpics/languages/he.php
new file mode 100644
index 000000000..d2a2bb9ab
--- /dev/null
+++ b/mod/lightpics/languages/he.php
@@ -0,0 +1,135 @@
+<?php
+
+// Generate By translationbrowser.
+
+$hebrew = array(
+ 'image' => "תמונה" ,
+ 'images' => "תמונות" ,
+ 'caption' => "כיתוב" ,
+ 'photos' => "תמונות" ,
+ 'images:upload' => "העל×ת תמונות" ,
+ 'images:multiupload' => "כלי פל×ש להעל×ת תמונות רבות" ,
+ 'images:multiupload:todo' => "בחרו קובץ ×חד ×ו יותר" ,
+ 'album' => "××œ×‘×•× ×ª×ž×•× ×•×ª" ,
+ 'albums' => "×לבומי תמונות" ,
+ 'album:slideshow' => "צפיה כמצגת" ,
+ 'album:yours' => "×לבומי התמונות שלך" ,
+ 'album:yours:friends' => "×לבומי תמונות של חברי×" ,
+ 'album:user' => "×לבומי תמונות של %s" ,
+ 'album:friends' => "×לבומי התמונות של ×”×—×‘×¨×™× ×©×œ %s " ,
+ 'album:all' => "כל ×לבומי התמונות ב×תר" ,
+ 'album:group' => "××œ×‘×•×ž×™× ×§×‘×•×¦×ª×™×™×" ,
+ 'item:object:image' => "תמונות" ,
+ 'item:object:album' => "×לבומי×" ,
+ 'tidypics:enablephotos' => "×פשר ×לבומי תמונות קבוצתיי×" ,
+ 'tidypics:editprops' => "ערוך מ×פייני תמונה" ,
+ 'tidypics:mostcommented' => "תמונות ×¢× ×”×›×™ הרבה תגובות" ,
+ 'tidypics:mostcommentedthismonth' => "הכי הרבה תגובות בחודש זה" ,
+ 'tidypics:mostcommentedtoday' => "×”×›×™ הרבה תגובות היו×" ,
+ 'tidypics:mostviewed' => "תמונות ×שר נצפו ×”×›×™ הרבה" ,
+ 'tidypics:mostvieweddashboard' => "הדף ×שר נצפה ×”×›×™ הרבה" ,
+ 'tidypics:mostviewedthisyear' => "נצפה הכי הרבה השנה" ,
+ 'tidypics:mostviewedthismonth' => "נצפה הכי הרבה החודש" ,
+ 'tidypics:mostviewedlastmonth' => "נצפה הכי הרבה בחודש שעבר" ,
+ 'tidypics:mostviewedtoday' => "נצפה ×”×›×™ הרבה היו×" ,
+ 'tidypics:recentlyviewed' => "תמונות ×שר נצפו ל×חרונה" ,
+ 'tidypics:mostrecent' => "תמונות חדשות" ,
+ 'tidypics:yourmostviewed' => "תמונות שלך ×שר נצפו ×”×›×™ הרבה" ,
+ 'tidypics:yourmostrecent' => "התמונות הכי חדשות שלך" ,
+ 'tidypics:friendmostviewed' => "תמונות של %s ×שר נצפו ×”×›×™ הרבה" ,
+ 'tidypics:friendmostrecent' => "תמונות החדשות ביותר של %s" ,
+ 'tidypics:highestrated' => "תמונות בעלי הדירוג הגבוה ביותר" ,
+ 'tidypics:viewsbyowner' => "צפיות: %s על ידי %s ×ž×©×ª×ž×©×™× (×œ× ×›×•×œ×œ ×ותך)" ,
+ 'tidypics:viewsbyothers' => "צפיות: %s (%s על ידיך)" ,
+ 'tidypics:administration' => "ניהול Tidypics" ,
+ 'tidypics:stats' => "סטטיסטיקה" ,
+ 'tidypics:settings' => "הגדרות" ,
+ 'tidypics:admin:instructions' => "×לה הגדרות הליבה של Tidypics. שנה ×ותן לפי הצורך ולחץ על שמור" ,
+ 'tidypics:settings:image_lib' => "ספריית תמונות:" ,
+ 'tidypics:settings:download_link' => "הצג לינק להורדה" ,
+ 'tidypics:settings:photo_ratings' => "×פשר דירוג תמונות, דורש תוסף דירוג של Miguel Montes ×ו דומה" ,
+ 'tidypics:settings:exif' => "הצג נתוני EXIF" ,
+ 'tidypics:settings:view_count' => "מונה צפיה" ,
+ 'tidypics:settings:grp_perm_override' => "×פשר לחברי קבוצה גישה מל××” ל××œ×‘×•×ž×™× ×§×‘×•×¦×ª×™×™×" ,
+ 'tidypics:settings:maxfilesize' => "גודל תמונה מירבי בMB" ,
+ 'tidypics:settings:quota' => "מכסה בMB למשתמש/קבוצה - 0 שווה ×œ×œ× ×ž×›×¡×”" ,
+ 'tidypics:settings:im_path' => "הזן ×ת הנטיב לפקודות ImageMagick ×œ×œ× ×œ×•×›×¡×Ÿ בסוף" ,
+ 'tidypics:settings:img_river_view' => "כמה רשומות במה חדש עבור כל מקבץ תמונות ×שר נוסף" ,
+ 'tidypics:settings:album_river_view' => "הצג תמונה ×חת ×ו מקבץ תמונות עבור ××œ×‘×•× ×—×“×©" ,
+ 'tidypics:settings:largesize' => "גודל תמונה בסיסי" ,
+ 'tidypics:settings:smallsize' => "גודל תמונה בתצוגת ×לבו×" ,
+ 'tidypics:settings:thumbsize' => "גודל תמונה ממוזערת" ,
+ 'album:create' => "יצירת ××œ×‘×•× ×—×“×©" ,
+ 'album:add' => "הוספת ×לבו×" ,
+ 'album:addpix' => "הוספת תמונות ל×לבו×" ,
+ 'album:edit' => "עריכת ×לבו×" ,
+ 'album:delete' => "מחיקת ×לבו×" ,
+ 'image:edit' => "עריכת תמונה" ,
+ 'image:delete' => "מחיקת תמונה" ,
+ 'image:download' => "הורדת תמונה" ,
+ 'album:title' => "כותרת" ,
+ 'album:desc' => "ת×ור" ,
+ 'album:tags' => "תגי×" ,
+ 'album:cover' => "קבע תמונה זו כעטיפה " ,
+ 'tidypics:quota' => "שימוש מכסה" ,
+ 'image:total' => "תמונות ב×לבו×:" ,
+ 'image:by' => "תמונה נוספה על ידי" ,
+ 'album:by' => "××œ×‘×•× × ×•×¦×¨ על ידי" ,
+ 'album:created:on' => "יצר/ה" ,
+ 'image:none' => "×˜×¨× × ×•×¡×¤×• תמונות" ,
+ 'image:back' => "הקוד×" ,
+ 'image:next' => "הב×" ,
+ 'tidypics:actiondelete' => "מחיקה" ,
+ 'tidypics:actioncancel' => "ביטול" ,
+ 'tidypics:inthisphoto' => "בתמונה זו" ,
+ 'tidypics:posted' => "הוסיף/ה תמונה" ,
+ 'tidypics:widget:albums' => "×לבומי תמונות" ,
+ 'tidypics:widget:album_descr' => "הצג ×ת ×”××œ×‘×•×ž×™× ×”×—×“×©×™× ×©×œ×š" ,
+ 'tidypics:widget:num_albums' => "מספר ×”××œ×‘×•×ž×™× ×œ×ª×¦×•×’×”" ,
+ 'tidypics:widget:latest' => "Latest Photos",
+ 'tidypics:widget:latest_descr' => "Display your latest photos",
+ 'tidypics:widget:num_latest' => "Number of images to display",
+ 'album:more' => "צפיה בכל ×”×לבומי×" ,
+ 'image:river:created' => "%s הוסיף/×” ×ת התמונה %s ל××œ×‘×•× %s" ,
+ 'image:river:item' => "תמונה" ,
+ 'image:river:annotate' => "תגובה לתמונה" ,
+ 'album:river:created' => "%s יצר/×” ××œ×‘×•× ×ª×ž×•× ×•×ª חדש" ,
+ 'album:river:group' => "בקבוצה" ,
+ 'album:river:item' => "×לבו×" ,
+ 'album:river:annotate' => "תגובה ב××œ×‘×•× ×”×ª×ž×•× ×•×ª" ,
+ 'tidypics:newalbum' => "××œ×‘×•× ×ª×ž×•× ×•×ª חדש" ,
+ 'tidypics:upl_success' => "התמונות הועלו בהצלחה" ,
+ 'image:saved' => "התמונה נשמרה בהצלחה" ,
+ 'images:saved' => "כל התמונות נשמרו בהצלחה" ,
+ 'image:deleted' => "התמונה נמחקה בהצלחה" ,
+ 'image:delete:confirm' => "בטוח? למחוק תמונה זו?" ,
+ 'images:edited' => "התמונות עודכנו בהצלחה" ,
+ 'album:edited' => "×”××œ×‘×•× ×¢×•×“×›×Ÿ בהצלחה" ,
+ 'album:saved' => "×”××œ×‘×•× × ×©×ž×¨ בהצלחה" ,
+ 'album:deleted' => "×”××œ×‘×•× × ×ž×—×§ בהצלחה" ,
+ 'album:delete:confirm' => "בטוח? למחוק ××œ×‘×•× ×–×”?" ,
+ 'album:created' => "×”××œ×‘×•× ×”×—×“×© נוצר" ,
+ 'tidypics:settings:save:ok' => "הגדרות התוסף Tidypics נשמרו בהצלחה" ,
+ 'tidypics:upgrade:success' => "Tidypics שודרג בהצלחה" ,
+ 'tidypics:partialuploadfailure' => "×ירעו שגי×ות בהעל×ת חלק מהתמונות (%s מתוך %s תמונות)." ,
+ 'tidypics:completeuploadfailure' => "העל×ת התמונות נכשל" ,
+ 'tidypics:exceedpostlimit' => "יותר מדי תמונות גדולות - נסה פחות תמונות ×ו תמונות קטנות יותר" ,
+ 'tidypics:noimages' => "×œ× × ×‘×—×¨×• תמונות" ,
+ 'tidypics:image_mem' => "התמונה גדולה מדי - יותר מדי ביטי×" ,
+ 'tidypics:image_pixels' => "לתמונה יותר מדי פיקסלי×" ,
+ 'tidypics:unk_error' => "שגי××” ×œ× ×ž×•×›×¨×ª בהעל×ת תמונות" ,
+ 'tidypics:save_error' => "שגי××” ×œ× ×ž×•×›×¨×ª בשמירת תמונות" ,
+ 'tidypics:not_image' => "סוק הקובץ ×œ× ×ž×–×•×”×”" ,
+ 'image:deletefailed' => "×œ× × ×™×ª×Ÿ ×”×™×” למחוק תמונה זו " ,
+ 'image:downloadfailed' => "×ž×¦×˜×¢×¨×™× ×”×ª×ž×•× ×” ××™× ×” זמינה כרגע" ,
+ 'tidypics:nosettings' => "מנהל הרשת ×˜×¨× ×§×‘×¢ הגדרות עבור ×לבומי תמונות" ,
+ 'tidypics:exceed_quota' => "עברת ×ת מגבלת המכסה הנקבע על ידי מנהל הרשת" ,
+ 'images:notedited' => "×œ× ×¢×•×“×›× ×• כל התמונות בהצלחה" ,
+ 'album:none' => "×˜×¨× × ×•×¦×¨×• ×לבומי×" ,
+ 'album:uploadfailed' => "×ž×¦×˜×¢×¨×™× ×œ× ×”×¦×œ×—× ×• לשמור ×ת ×”××œ×‘×•× ×©×œ×š" ,
+ 'album:deletefailed' => "×œ× × ×™×ª×Ÿ ×”×™×” למחוק ×ת ×”×לבו×" ,
+ 'album:blank' => "×× × ×§×‘×¢ ×©× ×•×ª×ור עבור ××œ×‘×•× ×–×”" ,
+ 'tidypics:upgrade:failed' => "שדרוג Tidypics נכשל"
+);
+
+add_translation('he', $hebrew);
diff --git a/mod/lightpics/languages/it.php b/mod/lightpics/languages/it.php
new file mode 100644
index 000000000..6b42fe655
--- /dev/null
+++ b/mod/lightpics/languages/it.php
@@ -0,0 +1,113 @@
+<?php
+
+/**
+ * Italian language pack
+ */
+
+$italian = array(
+
+ // Menu items and titles
+ 'image' => "Immagine",
+ 'images' => "Immagini",
+ 'caption' => "Caption",
+ 'photos' => "Foto",
+ 'album' => "Album fotografico",
+ 'albums' => "Album fotografici",
+ 'album:yours' => "Il tuo Album fotografico",
+ 'album:yours:friends' => "Album Foto degli amici",
+ 'album:user' => "Album foto di %s",
+ 'album:friends' => "Album foto degli amici di %s",
+ 'album:all' => "Tutti gli album di foto",
+ 'album:group' => "Gruppi di album",
+ 'item:object:image' => "Foto",
+ 'item:object:album' => "Album",
+ 'tidypics:settings:maxfilesize' => "Dimensione massima dei file in kilo bytes (KB):",
+ 'tidypics:enablephotos' => 'Attiva Group Photo Albums',
+ 'tidypics:editprops' => 'Modifica le proprietà della immagine',
+ 'tidypics:upgrade' => 'Aggiorna',
+ 'tidypics:sort' => 'Ordina il %s album',
+
+ //Settings
+ 'tidypics:settings:server:analysis' => 'Esegui Analisi del Server',
+
+ //actions
+ 'album:create' => "Crea un nuovo album",
+ 'album:add' => "Aggiungi un foto Album",
+ 'album:addpix' => "Aggiungi foto all'album",
+ 'album:edit' => "Modifica album",
+ 'album:delete' => "Cancella album",
+ 'album:sort' => "Ordina album",
+ 'image:edit' => "Modifica immagine",
+ 'image:delete' => "Cancella immagine",
+ 'image:download' => "Download immagine",
+
+ //forms
+ 'album:title' => "Titolo",
+ 'album:desc' => "Descrizione",
+ 'album:tags' => "Tags",
+ 'album:cover' => "Copertina dell'album?",
+ 'album:cover:yes' => "Si",
+ 'image:access:note' => "(view access is inherited from the album)",
+ 'tidypics:uploader:choose' => "Scegli le Foto",
+ 'tidypics:uploader:upload' => "Carica le Foto",
+ 'tidypics:uploader:describe' => "Descrivi le Foto",
+ 'tidypics:uploader:basic' => 'Puoi caricare fino a 10 Foto alla volta (%s MB massimo per foto)',
+ 'tidypics:sort:instruct' => 'Ordina i Foto Album trascinando le immagini. Poi clicca il bottone salva.',
+
+ //views
+ 'image:total' => "immagini nell'album:",
+ 'image:by' => "immagini aggiunte da",
+ 'album:by' => "Album creato da",
+ 'album:created:on' => "Creato",
+ 'image:none' => "Non sono ancora state aggiunte immagini.",
+ 'image:back' => "Indietro",
+ 'image:next' => "Avanti",
+
+ //widgets
+ 'album:widget' => "Album Fotografici",
+ 'album:more' => "Vedi tutti gli albums",
+ 'album:widget:description' => "Visualizza il tuo ultimo album fotografico",
+ 'album:display:number' => "Numero di album da mostrare",
+ 'album:num_albums' => "Numero di album da mostrare",
+
+ // river
+ 'image:river:created' => "%s uploaded %s %s",
+ 'image:river:created:multiple' => "%s added %u photos to album %s",
+ 'image:river:item' => "una immagine",
+ 'image:river:annotate' => "a comment on the image",
+ 'album:river:created' => "%s created a new photo album: ",
+ 'album:river:item' => "an album",
+ 'album:river:annotate' => "un commento nel foto album",
+
+ // notifications
+ 'tidypics:newalbum' => 'Nuovo album di foto',
+
+
+ // Status messages
+ 'image:saved' => "Immagine salvata.",
+ 'images:saved' => "Tutte le immagini sono state salvate.",
+ 'image:deleted' => "Immagine cancellata.",
+ 'image:delete:confirm' => "Sei sicuro di volerla cancellare?",
+ 'images:edited' => "Immagini modificate.",
+ 'album:edited' => "Album fotografico aggiornato.",
+ 'album:saved' => "Album fotografico salvato.",
+ 'album:deleted' => "L'album � stato cancellato.",
+ 'album:delete:confirm' => "Sei sicuro di voler cancellare questo album?",
+ 'album:created' => "Nuovo Album creato.",
+ 'tidypics:status:processing' => "Attendere ....",
+ 'tidypics:album:sorted' => "L'album %s è stato ordinato",
+
+ //Error messages
+ 'image:none' => "Non ci sono immagini.",
+ 'image:uploadfailed' => "il file non � stato caricato:",
+ 'image:deletefailed' => "L'immagine non puo essere cancellata in questo momento.",
+ 'image:downloadfailed' => "Spiacente; questa immagine non � attualmente disponibile.",
+ 'image:notimage' => "Sono accettate immagini jpg, gif o png delle dimensioni entro i limiti.",
+ 'images:notedited' => "Non tutte le immagini sono state caricate",
+ 'album:none' => "Nessun album � stato ancora creato.",
+ 'album:uploadfailed' => "Spiacente; non � possibile salvare l'album.",
+ 'album:deletefailed' => "L'album non può essere cancellato.",
+ 'album:blank' => "Dai a quest'album un titolo e una descrizione."
+);
+
+add_translation("it", $italian);
diff --git a/mod/lightpics/languages/pl.php b/mod/lightpics/languages/pl.php
new file mode 100644
index 000000000..cdc4d3711
--- /dev/null
+++ b/mod/lightpics/languages/pl.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * Elgg tidypics plugin Polish language pack
+ *
+ */
+
+$polish = array(
+
+ // Menu items and titles
+ 'image' => "Obrazek",
+ 'images' => "Obrazki",
+ 'caption' => "Opis",
+ 'photos' => "Zdjęcia",
+ 'images:upload' => "Dodaj obrazki",
+ 'album' => "Album zdjęciowy",
+ 'albums' => "Albumy zdjęciowe",
+ 'album:yours' => "Twoje albumy",
+ 'album:yours:friends' => "Albumy twoich znajomych",
+ 'album:user' => "Albumy użytkownika %s",
+ 'album:friends' => "Albumy przyjaciół użytkownika %s",
+ 'album:all' => "Wszystkie publiczne albumy",
+ 'album:group' => "Albumy rejsu",
+ 'item:object:image' => "Zdjęcia",
+ 'item:object:album' => "Albumy",
+ 'tidypics:settings:maxfilesize' => "Maximum file size in kilo bytes (KB):",
+ 'tidypics:editprops' => 'Edycja obrazu Właściwości',
+
+ //actions
+ 'album:create' => "Nowy album",
+ 'album:add' => "Dodaj album zdjęciowy",
+ 'album:addpix' => "Dodaj zdjęcia",
+ 'album:edit' => "Edytuj album",
+ 'album:delete' => "Skasuj album",
+ 'image:edit' => "Edytuj obrazek",
+ 'image:delete' => "Skasuj obrazek",
+ 'image:download' => "Pobierz obrazek",
+
+ //forms
+ 'album:title' => "Tytuł albumu",
+ 'album:desc' => "Opis (widoczny tylko dla twórcy)",
+ 'album:tags' => "Tagi",
+ 'album:cover' => "Ustaw jako okładkę albumu?",
+ 'album:cover:yes' => "Tak",
+ 'image:access:note' => "(prawa dostępu pobierane są z ustawień albumu)",
+
+ //views
+ 'image:total' => "Obrazki w albumie:",
+ 'image:by' => "Obrazek dodany przez",
+ 'album:by' => "Album stworzony przez",
+ 'album:created:on' => "Stworzono",
+ 'image:none' => "Nie dodano jeszcze żadnych obrazków.",
+ 'image:back' => "Poprzednia",
+ 'image:next' => "Kolejna",
+
+ //widgets
+ 'album:widget' => "Albumy zdjęciowe",
+ 'album:more' => "Pokaż wszystkie albumy",
+ 'album:widget:description' => "Pokazuje twoje ostatnie albumy zdjęciowe",
+ 'album:display:number' => "Liczba wyświetlanych albumów",
+ 'album:num_albums' => "Liczba wyświetlanych albumów",
+
+ // river
+ 'image:river:created' => "wgrano %s %s %s",
+ 'image:river:item' => "obrazek",
+ 'image:river:annotate' => "%s skomentował",
+ 'album:river:created' => "Stworzono %s",
+ 'album:river:item' => "album",
+ 'album:river:annotate' => "%s skomentował",
+
+ // Status messages
+ 'image:saved' => "Twój obrazek został pomyślnie zapisany.",
+ 'images:saved' => "Wszystkie obrazki zostały pomyślnie zapisane.",
+ 'image:deleted' => "Twój obrazek został pomyślnie skasowany.",
+ 'image:delete:confirm' => "Czy jesteś pewien że chcesz skasować ten obrazek?",
+ 'images:edited' => "Twoje obrazki zostały pomyślnie zapisane.",
+ 'album:edited' => "Twój album został pomyślnie zapisany.",
+ 'album:saved' => "Twój album został pomyślnie zapisany.",
+ 'album:deleted' => "Twój album został skasowany.",
+ 'album:delete:confirm' => "Na pewno chcesz skasować ten album?",
+ 'album:created' => "Stworzono nowy album.",
+ 'tidypics:status:processing' => "Please wait while we process your picture....",
+
+ //Error messages
+ 'image:none' => "Jeszcze nie dodano żadnych obrazków.",
+ 'image:uploadfailed' => "Pliki nie zapisane:",
+ 'image:deletefailed' => "Nie udało się skasować obrazka.",
+ 'image:downloadfailed' => "Nie udało się ściągnąć albumu.",
+ 'image:notimage' => "Akceptowane formaty to tylko: jpeg, gif i png, and the allowed file size.",
+ 'images:notedited' => "Nie wszystkie obrazki zostały zapisane",
+ 'album:none' => "Jeszcze nie dodano żadnych albumów.",
+ 'album:uploadfailed' => "Nie udało się zapisać twojego albumu.",
+ 'album:deletefailed' => "Nie udało się usunąć twojego albumu.",
+ 'album:blank' => "Please give this albumu a tytuł and opis."
+);
+
+add_translation("pl", $polish); \ No newline at end of file
diff --git a/mod/lightpics/languages/ru.php b/mod/lightpics/languages/ru.php
new file mode 100644
index 000000000..c1a4e7e86
--- /dev/null
+++ b/mod/lightpics/languages/ru.php
@@ -0,0 +1,101 @@
+<?php
+
+/**
+ * Russian language pack
+ */
+
+$russian = array(
+
+ // Menu items and titles
+ 'image' => "ФотографиÑ",
+ 'images' => "Фотографии",
+ 'caption' => "ОпиÑание",
+ 'photos' => "Фотки",
+ 'images:upload' => "Загрузить Фотки",
+ 'album' => "Фотоальбом",
+ 'albums' => "Фотоальбомы",
+ 'album:yours' => "Ваш Ðльбом",
+ 'album:yours:friends' => "Ðльбомы Ваших Друзей",
+ 'album:user' => "%s - Фотоальбом",
+ 'album:friends' => "Ðльбомы друзей Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %s",
+ 'album:all' => "Ð’Ñе Ðльбомы Сайта",
+ 'album:group' => "Ðльбомы Группы",
+ 'item:object:image' => "Фотки",
+ 'item:object:album' => "Ðльбомы",
+ 'tidypics:settings:maxfilesize' => "МакÑимальный размер файла (KB):",
+ 'tidypics:enablephotos' => 'Включить Ðльбомы Группы',
+ 'tidypics:editprops' => 'Редактировать данные фотогографии',
+
+ //actions
+ 'album:create' => "Создать новый Ðльбом",
+ 'album:add' => "Добавить Ðльбом",
+ 'album:addpix' => "Добавить Фотки в Ðльбом",
+ 'album:edit' => "Редактировать Ðльбом",
+ 'album:delete' => "Стереть Ðльбом",
+ 'image:edit' => "Редактировать Фотку",
+ 'image:delete' => "Стереть Фотку",
+ 'image:download' => "Скачать Фотку",
+
+ //forms
+ 'album:title' => "Заголовок",
+ 'album:desc' => "ОпиÑание",
+ 'album:tags' => "ТÑги",
+ 'album:cover' => "Сдеалем Обложку Ðльбома?",
+ 'album:cover:yes' => "Да",
+ 'image:access:note' => "(ыровень доÑтупа как и у оÑновного Ðльбома)",
+
+ //views
+ 'image:total' => "Ð’Ñего Фоток:",
+ 'image:by' => "Фотка добавлена:",
+ 'album:by' => "Ðльбом принадлежит:",
+ 'album:created:on' => "Создан:",
+ 'image:none' => "Пока Фоток не добавлено",
+ 'image:back' => "Ðазад",
+ 'image:next' => "Вперед",
+
+ //widgets
+ 'album:widget' => "Фотоальбомы",
+ 'album:more' => "ПоÑмотреть вÑе Ðльбомы",
+ 'album:widget:description' => "ПродемонÑтрировать Ñвой новый Ðльбом",
+ 'album:display:number' => "ЧиÑло Ðльбомов Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°",
+ 'album:num_albums' => "ЧиÑло Ðльбомов Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°",
+
+ // river
+ 'image:river:created' => "%s загрузил",
+ 'image:river:item' => "фотку",
+ 'image:river:annotate' => "комментариы к Фотке",
+ 'album:river:created' => "%s Ñоздал новый Ðльбом: ",
+ 'album:river:item' => "Ðльбом",
+ 'album:river:annotate' => "Комментарий к Ðльбому",
+
+ // notifications
+ 'tidypics:newalbum' => 'Ðовый Фото Ðльбом',
+
+
+ // Status messages
+ 'image:saved' => "Ваша Ñ„Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð·Ð°Ð³Ñ€ÑƒÐ¶ÐµÐ½Ð° уÑпешно.",
+ 'images:saved' => "Ð’Ñе Фотки уÑпешно Ñохранены.",
+ 'image:deleted' => "Ваша Ð¤Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ñтерта.",
+ 'image:delete:confirm' => "Ð’Ñ‹ уверены, что хотите Ñтереть Ñту Фотку?",
+ 'images:edited' => "Ваши Фотки уÑпешно обновленны.",
+ 'album:edited' => "Ваш Ðльбом обновлен.",
+ 'album:saved' => "Ваш Ðльбом Ñохранен.",
+ 'album:deleted' => "Ваш Ðльбом Ñтерт.",
+ 'album:delete:confirm' => "Ð’Ñ‹ уверены, что хотите Ñтереть Ñтот Ðльбом?",
+ 'album:created' => "Ваш новый Ðльбом готов.",
+ 'tidypics:status:processing' => "Подозчдите пока мы загружаем фотку....",
+
+ //Error messages
+ 'image:none' => "Ðа данный момент никаких фоток не обнаружено.",
+ 'image:uploadfailed' => "Файлы не загружены:",
+ 'image:deletefailed' => "Ð’ данный момент Ñту Фотку Ñтереть невозможно.",
+ 'image:downloadfailed' => "Ðа данный момент Ñту фотку проÑмотреть невозможно.",
+ 'image:notimage' => "ДопуÑкаютÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ фотки формата jpeg, gif, или png разрешенного размера.",
+ 'images:notedited' => "Ðе вÑе фотографии были обновленны",
+ 'album:none' => "Пока никаких Ðльбомов не имеетÑÑ.",
+ 'album:uploadfailed' => "Ваш Ðльбом Ñохранить не удалоÑÑŒ.",
+ 'album:deletefailed' => "Ð’ данный момент ваш Ðльбом Ñтереть невозможно.",
+ 'album:blank' => "ПожалуйÑта Ñоздайте заголовок и опиÑание вашего Ðльбома.",
+);
+
+add_translation("ru", $russian);
diff --git a/mod/lightpics/languages/tr.php b/mod/lightpics/languages/tr.php
new file mode 100644
index 000000000..7d650572a
--- /dev/null
+++ b/mod/lightpics/languages/tr.php
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * Elgg tidypics plugin language pack
+ *
+ * Türkçe Çeviri Orhan Can Ceylan | elggturkiye.com
+ */
+
+
+$turkish = array(
+ 'image' => "Resim" ,
+ 'image:access:note' => "Görüntüleme izni albümden tevarüs edildi." ,
+ 'images' => "Resimler" ,
+ 'caption' => "Açıklama" ,
+ 'photos' => "Resimler" ,
+ 'images:upload' => "Resimleri Yükle" ,
+ 'album' => "Fotoğraf Albümü" ,
+ 'albums' => "Fotoğraf Albümleri" ,
+ 'album:yours' => "Senin Fotoğraf Albümlerin" ,
+ 'album:yours:friends' => "Arkadaşlarının Fotoğraf Albümleri" ,
+ 'album:user' => "%s adlı üyenin fotoğraf albümleri" ,
+ 'album:friends' => "%s adlı üyenin arkadaşlarının fotoğraf albümleri" ,
+ 'album:all' => "Tüm sitenin fotoğraf albümleri" ,
+ 'album:group' => "Grubun Albümleri" ,
+ 'item:object:image' => "FotoÄŸraflar" ,
+ 'item:object:album' => "Albümler" ,
+ 'tidypics:settings:maxfilesize' => "Bir fotoğrafın maksimum büyüklüğü (kilobyte):" ,
+ 'tidypics:enablephotos' => 'Grup Albümlerini Aktif Et',
+ 'tidypics:editprops' => 'Fotoğrafın özelliklerini Düzenle',
+ 'tidypics:newalbum' => 'Yeni Fotoğraf Albümü',
+ 'album:create' => "Yeni Albüm" ,
+ 'album:add' => "Yeni Fotoğraf Albümü Ekle" ,
+ 'album:addpix' => "FotoÄŸraf ekle" ,
+ 'album:edit' => "Albümü Düzenle" ,
+ 'album:delete' => "Albümü Sil" ,
+ 'image:edit' => "Resmi Düzenle" ,
+ 'image:delete' => "Resmi Sil" ,
+ 'image:download' => "Resmi Ä°ndir" ,
+ 'album:title' => "Başlık" ,
+ 'album:desc' => "Tanım" ,
+ 'album:tags' => "Tagler" ,
+ 'album:cover' => "Bu resim albüm fotoğrafı olsun mu ?" ,
+ 'album:cover:yes' => "Evet" ,
+ 'image:total' => "Albümdeki fotoğraflar" ,
+ 'image:by' => "Fotoğrafı ekleyen " ,
+ 'album:by' => "Albümü oluşturan" ,
+ 'album:created:on' => "OluÅŸturuldu" ,
+ 'image:none' => "Şuan görünülenecek fotoğraf bulunamadı" ,
+ 'image:back' => "Geri" ,
+ 'image:next' => "Ä°leri" ,
+ 'album:widget' => "Fotoğraf Albümleri" ,
+ 'album:more' => "Tüm albümleri gör" ,
+ 'album:widget:description' => "Son albümleri göster" ,
+ 'album:display:number' => "Gösterilecek albüm sayısı" ,
+ 'album:num_albums' => "Gösterilecek albüm sayısı" ,
+ 'image:river:created' => "%s upload edildi" ,
+ 'image:river:item' => "resim" ,
+ 'image:river:annotate' => "%s yorum yapıldı" ,
+ 'album:river:created' => "%s oluÅŸturuldu" ,
+ 'album:river:item' => "albüm" ,
+ 'album:river:annotate' => "%s yorum yapıldı" ,
+ 'image:saved' => "Fotoğrafınız başarıyla kaydedildi." ,
+ 'images:saved' => "Tüm fotoğraflarınız başarıyla kaydedildi." ,
+ 'image:deleted' => "Fotoğrafınız başarıyla silindi." ,
+ 'image:delete:confirm' => "Bu fotoğrafı silmek istediğinizden emin misiniz ?" ,
+ 'images:edited' => "Fotoğraflarınız başarıyla yüklendi" ,
+ 'album:edited' => "Albümünüz başarıyla güncellendi." ,
+ 'album:saved' => "Albümünüz başarıyla kaydedildi." ,
+ 'album:deleted' => "Albümünüz başarıyla silindi." ,
+ 'album:delete:confirm' => "Albümü silmek istediğinizden emin misiniz ?" ,
+ 'album:created' => "Yeni albümünüz oluşturuldu." ,
+ 'image:uploadfailed' => "Fotoğraflar yüklenemedi :" ,
+ 'image:deletefailed' => "Fotoğrafınız şuan silinemiyor." ,
+ 'image:downloadfailed' => "Üzgünüz, bu fotoğraf şuan uygun değil." ,
+ 'image:notimage' => "Sadece jpeg, gif veya png uzantılı fotoğraflar kabul edilir." ,
+ 'images:notedited' => "Tüm fotoğraflar başarıyla güncellenemedi." ,
+ 'album:none' => "Şuan herhangi bir albüm bulunamadı." ,
+ 'album:uploadfailed' => "Üzgünüm, albümünüz kaydolmadı." ,
+ 'album:deletefailed' => "Albümünüz silinemedi." ,
+ 'tidypics:status:processing' => "Fotoğrafınız işlenirken lütfen bekleyiniz." ,
+ 'album:blank' => "Lütfen albümünüze başlık ve tanım giriniz."
+
+
+);
+
+add_translation('tr', $turkish);
diff --git a/mod/lightpics/lib/exif.php b/mod/lightpics/lib/exif.php
new file mode 100644
index 000000000..46a73e920
--- /dev/null
+++ b/mod/lightpics/lib/exif.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * Exif Processing Library
+ *
+ * @package TidypicsExif
+ */
+
+/**
+ * Pull EXIF data from image file
+ *
+ * @param TidypicsImage $image
+ */
+function td_get_exif($image) {
+
+ // catch for those who don't have exif module loaded
+ if (!is_callable('exif_read_data')) {
+ return;
+ }
+
+ $mime = $image->mimetype;
+ if ($mime != 'image/jpeg' && $mime != 'image/pjpeg') {
+ return;
+ }
+
+ $filename = $image->getFilenameOnFilestore();
+ $exif = exif_read_data($filename, 'IFD0,EXIF', true);
+ if (is_array($exif) && isset($exif['EXIF'])) {
+ $data = array_merge($exif['IFD0'], $exif['EXIF']);
+ foreach ($data as $key => $value) {
+ if (is_string($value)) {
+ // there are sometimes unicode characters that cause problems with serialize
+ $data[$key] = preg_replace( '/[^[:print:]]/', '', $value);
+ }
+ }
+ $image->tp_exif = serialize($data);
+ }
+}
+
+/**
+ * Grab array of EXIF data for display
+ *
+ * @param TidypicsImage $image
+ * @return array|false
+ */
+function tp_exif_formatted($image) {
+
+ $exif = $image->tp_exif;
+ if (!$exif) {
+ return false;
+ }
+
+ $exif = unserialize($exif);
+
+ $model = $exif['Model'];
+ if (!$model) {
+ $model = "N/A";
+ }
+ $exif_data['Model'] = $model;
+
+ $exposure = $exif['ExposureTime'];
+ if (!$exposure) {
+ $exposure = "N/A";
+ }
+ $exif_data['Shutter'] = $exposure;
+
+ //got the code snippet below from http://www.zenphoto.org/support/topic.php?id=17
+ //convert the raw values to understandible values
+ $Fnumber = explode("/", $exif['FNumber']);
+ if ($Fnumber[1] != 0) {
+ $Fnumber = $Fnumber[0] / $Fnumber[1];
+ } else {
+ $Fnumber = 0;
+ }
+ if (!$Fnumber) {
+ $Fnumber = "N/A";
+ } else {
+ $Fnumber = "f/$Fnumber";
+ }
+ $exif_data['Aperture'] = $Fnumber;
+
+ $iso = $exif['ISOSpeedRatings'];
+ if (!$iso) {
+ $iso = "N/A";
+ }
+ $exif_data['ISO Speed'] = $iso;
+
+ $Focal = explode("/", $exif['FocalLength']);
+ if ($Focal[1] != 0) {
+ $Focal = $Focal[0] / $Focal[1];
+ } else {
+ $Focal = 0;
+ }
+ if (!$Focal || round($Focal) == "0") {
+ $Focal = 0;
+ }
+ if (round($Focal) == 0) {
+ $Focal = "N/A";
+ } else {
+ $Focal = round($Focal) . "mm";
+ }
+ $exif_data['Focal Length'] = $Focal;
+
+ $captured = $exif['DateTime'];
+ if (!$captured) {
+ $captured = "N/A";
+ }
+ $exif_data['Captured'] = $captured;
+
+ return $exif_data;
+}
diff --git a/mod/lightpics/lib/migrate.php b/mod/lightpics/lib/migrate.php
new file mode 100644
index 000000000..8c62126f0
--- /dev/null
+++ b/mod/lightpics/lib/migrate.php
@@ -0,0 +1,301 @@
+<?php
+/**
+ * Tidypics file plugin migration
+ *
+ * Supports moving photos from the files plugin to Tidypics. All of a users
+ * photos end up in a single album.
+ *
+ * Not supported
+ */
+
+// need access to ElggDiskFilestore::make_file_matrix(), which is protected.
+// this is a PITA.
+class tempFilestore extends ElggDiskFilestore {
+ public function make_file_matrix($filename) {
+ return parent::make_file_matrix($filename);
+ }
+
+}
+$filestore = new tempFilestore();
+
+
+
+/**
+ * Migrates all pics from files to tidypics.
+ *
+ */
+function tidypics_migrate_pics() {
+ $limit = 100;
+ $r = true;
+
+ // migrate
+ // @todo: should this return false since there was no error?
+ if (!$users = tidypics_get_user_guids_with_pics_in_files(0, $limit)) {
+ return $r;
+ }
+
+ //echo "Grabbed " . count($users) . " users\n";
+ while (is_array($users) AND count($users) > 0) {
+ foreach ($users as $user_guid) {
+ // reset the query cache.
+ $DB_QUERY_CACHE = array();
+ if (!$user = get_entity($user_guid)) {
+ continue;
+ }
+
+ $r = tidypics_migrate_user_pics($user);
+ }
+
+ //echo "Trying to grab $limit more users...\n";
+ $offset = $offset + $limit;
+ $users = tidypics_get_user_guids_with_pics_in_files($offset, $limit);
+ }
+
+ return $r;
+}
+
+
+/**
+ * Migrates all pictures owned by a user regardless of
+ * if they're group or user files.
+ *
+ * @param ElggUser $user User to migrate.
+ * @return bool on success
+ */
+function tidypics_migrate_user_pics(ElggUser $user) {
+ global $CONFIG, $filestore;
+
+ $user_guid = $user->getGUID();
+
+ // update all entity subtypes in a single go at the end.
+ $updated_guids = array();
+
+ if (!$pics = tidypics_get_user_pics_from_files($user_guid) OR count($pics) < 1) {
+ return false;
+ }
+
+ //echo "{$user->name} ({$user->getGUID()}) has " . count($pics) . " pics.\n";
+
+ // get an album to migrate into if it already exists.
+ // will create later on if it doesn't.
+ $user_album_entities = get_entities_from_metadata('migrated_from_files', true, 'object', 'album', $user->getGUID(), 1);
+ $user_album_guid = isset($album_entities[0]) ? $album_entities[0]->getGUID() : false;
+
+ // a list of albums to randomly select a cover for on newly created albums.
+ $new_album_guids = array();
+
+ foreach ($pics as $pic) {
+ // check that it's not already in tidy pics
+ if (false !== strpos($pic->filename, 'image/')) {
+ //echo "{$pic->filename} ({$pic->getGUID()}) looks like it's already in tidy pics. Ignoring.\n";
+ continue;
+ }
+
+ // blank some vars
+ $group_pic = $group_album_guid = $group_guid = false;
+
+ // see if we're doing a group file migration.
+ if ($pic->container_guid != $user->getGUID()
+ AND $group = get_entity($pic->container_guid)
+ AND $group instanceof ElggGroup
+ ) {
+ //echo "{$pic->getGUID()} is in a group!\n";
+ $group_pic = true;
+ $group_guid = $group->getGUID();
+
+ // yes, this is how you get entities by container_guid.
+ // yes, it's wrong, wrong, wrong for this function to work this way.
+ $group_album_entities = get_entities('object', 'album', $group_guid);
+
+ // get_entities_from_metadata doesn't support container_guid (or owner_guid meaning container_guid)
+ // do it the hard way.
+ if (is_array($group_album_entities)) {
+ foreach ($group_album_entities as $group_album) {
+ if ($group_album->migrated_from_files == true) {
+ $group_album_guid = $group_album->getGUID();
+ break;
+ }
+ }
+ }
+ $album_guid = $group_album_guid;
+ $group_album_guids[] = $group_album_guid;
+ } else {
+ $album_guid = $user_album_guid;
+ }
+
+ //echo "album_guid is $album_guid and group_pic is: $group_pic\n";
+
+ // create an album if we need to.
+ if (!$album_guid) {
+ //echo "Creating new album...\n";
+ $album = new ElggObject();
+ $album->subtype = 'album';
+ $album->new_album = TP_NEW_ALBUM;
+
+ if ($group_pic) {
+ $album->container_guid = $group_guid;
+ $album->owner_guid = $group->owner_guid;
+ $album->access_id = $group->group_acl;
+ $album->title = $group->name;
+ } else {
+ $album->container_guid = $user_guid;
+ $album->owner_guid = $user->getGUID();
+ $album->access_id = ACCESS_DEFAULT;
+ $album->title = $user->name;
+ }
+
+ if (!$album->save()) {
+ //echo "Couldn't migrate pics for {$user->name} ($user_guid)!\n";
+ return false;
+ }
+ $album->migrated_from_files = true;
+ $album_guid = $album->getGUID();
+ $new_album_guids[] = $album_guid;
+
+ // save the album guid as the users
+ if (!$group_pic) {
+ $user_album_guid = $album_guid;
+ }
+ }
+
+ if (!tidypics_migrate_pic_from_files($pic, $album_guid)) {
+ //echo "{$pic->filename} ({$pic->getGUID()}) Couldn't be migrated. Ignoring.\n";
+ continue;
+ }
+ }
+
+ // randomly pic an image to be the cover for the user gallery
+ //$album->cover = $pic_guids[array_rand($pic_guids)];
+ foreach ($new_album_guids as $guid) {
+ tidypics_set_random_cover_pic($guid);
+ }
+
+ return true;
+}
+
+
+/**
+ * Randomly pics an image from an album to be the cover.
+ * @return bool on success
+ */
+function tidypics_set_random_cover_pic($album_guid) {
+ global $CONFIG;
+
+ if ($album = get_entity($album_guid) AND $album instanceof TidypicsAlbum) {
+ $q = "SELECT guid FROM {$CONFIG->dbprefix}entities WHERE container_guid = $album_guid ORDER BY RAND() limit 1";
+ $pic = get_data($q);
+
+ return $album->cover = $pic[0]->guid;
+ }
+
+ return false;
+}
+
+/**
+ * Migrates a single pic from the file repo.
+ * @return bool on succes.
+ */
+function tidypics_migrate_pic_from_files($pic, $album_guid) {
+ global $CONFIG, $filestore;
+
+ // get the subtype id.
+ $image_subtype_id = get_subtype_id('object', 'image');
+
+ // hold which metadata on the files need to be changes
+ // also holds the images we need to move
+ $file_md_fields = array('filename', 'thumbnail', 'smallthumb', 'largethumb');
+
+ if (!$user = get_entity($pic->owner_guid)) {
+ return false;
+ }
+
+ // figure out where to move the files.
+ $matrix = $filestore->make_file_matrix($user->username);
+ $user_fs_path = $CONFIG->dataroot . $matrix;
+ $album_fs_path = $CONFIG->dataroot . $matrix . "image/$album_guid/";
+ if (!is_dir($album_fs_path)) {
+ if (!mkdir($album_fs_path, 0700, true)) {
+ return false;
+ }
+ }
+
+ // change all the 'file/'s to 'image/'s in certain metadata
+ // these are also the files we need to move.
+ foreach ($file_md_fields as $md_name) {
+ // $pic->$md_name = str_replace('file/', 'image/', $pic->$md_name);
+ $old_file = $pic->$md_name;
+ $new_file = str_replace('file/', "image/$album_guid", $old_file);
+
+ if (!($old_fp = fopen($user_fs_path . $old_file, 'r')
+ AND $new_fp = fopen($user_fs_path . $new_file, 'w'))) {
+ //echo "Could not move {$user_fs_path}{$old_file} to {$user_fs_path}{$new_file}\n";
+ continue;
+ }
+
+ while (!feof($old_fp)) {
+ if (!fputs($new_fp, fread($old_fp, 8192))) {
+ //echo "Could not move {$user_fs_path}{$old_file} to {$user_fs_path}{$new_file} (Error writing.)\n";
+ break;
+ }
+ }
+
+ $pic->$md_name = $new_file;
+ }
+ // update container.
+ // this doesn't work...?
+ //$pic->container_guid = $album_guid;
+
+ // delete old one.
+ unlink($user_fs_path . $old_file);
+
+ $q = "UPDATE {$CONFIG->dbprefix}entities SET subtype = $image_subtype_id, container_guid = $album_guid WHERE guid = {$pic->getGUID()}";
+ //echo "Finished moving {$user_fs_path}{$old_file} to {$user_fs_path}{$new_file}\n";
+
+ return update_data($q);
+}
+
+
+/**
+ * Grabs all user IDs with images in the files repo.
+ * return mixed. False on fail, array of GUIDs on success.
+ */
+function tidypics_get_user_guids_with_pics_in_files($offset, $limit) {
+ global $CONFIG;
+
+ //$simpletype_ms_id = add_metastring('simple_type');
+ //$image_ms_id = add_metastring('image');
+
+ $q = "SELECT DISTINCT e.owner_guid
+ FROM
+ {$CONFIG->dbprefix}entities as e,
+ {$CONFIG->dbprefix}entity_subtypes as st
+
+ WHERE st.subtype = 'file'
+ AND e.subtype = st.id
+ LIMIT $offset, $limit";
+
+ if (!$data = get_data($q)) {
+ return false;
+ }
+
+ // return an array of IDs
+ $r = array();
+ foreach ($data as $row) {
+ $r[] = $row->owner_guid;
+ }
+
+ return $r;
+}
+
+/**
+ * Gets a list of images for a single user.
+ * @return array of GUIDs, false on fail.
+ */
+function tidypics_get_user_pics_from_files($user_guid) {
+ if (!$user = get_entity($user_guid) AND $user instanceof ElggUser) {
+ return false;
+ }
+
+ // @todo Might have to cycle this through with standard while + foreach.
+ return get_entities_from_metadata('simpletype', 'image', 'object', 'file', $user_guid, 5000);
+}
diff --git a/mod/lightpics/lib/resize.php b/mod/lightpics/lib/resize.php
new file mode 100644
index 000000000..aa2eabea1
--- /dev/null
+++ b/mod/lightpics/lib/resize.php
@@ -0,0 +1,522 @@
+<?php
+/**
+ * Elgg tidypics library of resizing functions
+ *
+ * @package TidypicsImageResize
+ */
+
+
+/**
+ * Create thumbnails using PHP GD Library
+ *
+ * @param ElggFile holds the image that was uploaded
+ * @param string folder to store thumbnail in
+ * @param string name of the thumbnail
+ * @return bool TRUE on success
+ */
+function tp_create_gd_thumbnails($file, $prefix, $filestorename) {
+ global $CONFIG;
+
+ $image_sizes = elgg_get_plugin_setting('image_sizes', 'lightpics');
+ if (!$image_sizes) {
+ // move this out of library
+ register_error(elgg_echo('tidypics:nosettings'));
+ forward(REFERER);
+ return FALSE;
+ }
+ $image_sizes = unserialize($image_sizes);
+
+ $thumb = new ElggFile();
+ $thumb->owner_guid = $file->owner_guid;
+ $thumb->container_guid = $file->container_guid;
+
+ // tiny thumbail
+ $thumb->setFilename($prefix."thumb".$filestorename);
+ $thumbname = $thumb->getFilenameOnFilestore();
+ $rtn_code = tp_gd_resize( $file->getFilenameOnFilestore(),
+ $thumbname,
+ $image_sizes['tiny_image_width'],
+ $image_sizes['tiny_image_height'],
+ TRUE);
+ if (!$rtn_code) {
+ return FALSE;
+ }
+ $file->thumbnail = $prefix."thumb".$filestorename;
+
+ // album thumbnail
+ global $CONFIG;
+ $CONFIG->debug = 'WARNING';
+ $thumb->setFilename($prefix."smallthumb".$filestorename);
+ $thumbname = $thumb->getFilenameOnFilestore();
+ $rtn_code = tp_gd_resize( $file->getFilenameOnFilestore(),
+ $thumbname,
+ $image_sizes['small_image_width'],
+ $image_sizes['small_image_height'],
+ TRUE);
+ if (!$rtn_code) {
+ return FALSE;
+ }
+ $file->smallthumb = $prefix."smallthumb".$filestorename;
+ unset($CONFIG->debug);
+
+ // main image
+ $thumb->setFilename($prefix."largethumb".$filestorename);
+ $thumbname = $thumb->getFilenameOnFilestore();
+ $rtn_code = tp_gd_resize( $file->getFilenameOnFilestore(),
+ $thumbname,
+ $image_sizes['large_image_width'],
+ $image_sizes['large_image_height'],
+ FALSE);
+ if (!$rtn_code) {
+ return FALSE;
+ }
+ $file->largethumb = $prefix."largethumb".$filestorename;
+
+
+ unset($thumb);
+
+ return TRUE;
+}
+
+/**
+ * Writes resized version of an already uploaded image - original from Elgg filestore.php
+ * Saves it in the same format as uploaded
+ *
+ * @param string $input_name The name of the file on the disk
+ * @param string $output_name The name of the file to be written
+ * @param int $maxwidth The maximum width of the resized image
+ * @param int $maxheight The maximum height of the resized image
+ * @param TRUE|FALSE $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.
+ * @return bool TRUE on success or FALSE on failure
+ */
+function tp_gd_resize($input_name, $output_name, $maxwidth, $maxheight, $square = FALSE, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0) {
+
+ // Get the size information from the image
+ $imgsizearray = getimagesize($input_name);
+ if (!$imgsizearray) {
+ return FALSE;
+ }
+
+ // Get width and height of image
+ $width = $imgsizearray[0];
+ $height = $imgsizearray[1];
+
+ $params = tp_im_calc_resize_params($width, $height, $maxwidth, $maxheight, $square, $x1, $y1, $x2, $y2);
+ if (!$params) {
+ return FALSE;
+ }
+
+ $new_width = $params['new_width'];
+ $new_height = $params['new_height'];
+ $region_width = $params['region_width'];
+ $region_height = $params['region_height'];
+ $widthoffset = $params['width_offset'];
+ $heightoffset = $params['height_offset'];
+
+ $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
+ $function = "imagecreatefrom" . $accepted_formats[$imgsizearray['mime']];
+ if (!is_callable($function)) {
+ return FALSE;
+ }
+
+ // load old image
+ $oldimage = $function($input_name);
+ if (!$oldimage) {
+ return FALSE;
+ }
+
+ // allocate the new image
+ $newimage = imagecreatetruecolor($new_width, $new_height);
+ if (!$newimage) {
+ return FALSE;
+ }
+
+ $rtn_code = imagecopyresampled( $newimage,
+ $oldimage,
+ 0,
+ 0,
+ $widthoffset,
+ $heightoffset,
+ $new_width,
+ $new_height,
+ $region_width,
+ $region_height);
+ if (!$rtn_code) {
+ return $rtn_code;
+ }
+
+ switch ($imgsizearray['mime']) {
+ case 'image/jpeg':
+ case 'image/pjpeg':
+ $rtn_code = imagejpeg($newimage, $output_name, 85);
+ break;
+ case 'image/png':
+ case 'image/x-png':
+ $rtn_code = imagepng($newimage, $output_name);
+ break;
+ case 'image/gif':
+ $rtn_code = imagegif($newimage, $output_name);
+ break;
+ }
+
+ imagedestroy($newimage);
+ imagedestroy($oldimage);
+
+ return $rtn_code;
+}
+
+
+/**
+ * Create thumbnails using PHP imagick extension
+ *
+ * @param ElggFile holds the image that was uploaded
+ * @param string folder to store thumbnail in
+ * @param string name of the thumbnail
+ * @return bool TRUE on success
+ */
+function tp_create_imagick_thumbnails($file, $prefix, $filestorename) {
+ $image_sizes = elgg_get_plugin_setting('image_sizes', 'tidypics');
+ if (!$image_sizes) {
+ register_error(elgg_echo('tidypics:nosettings'));
+ return FALSE;
+ }
+ $image_sizes = unserialize($image_sizes);
+
+ $thumb = new ElggFile();
+ $thumb->owner_guid = $file->owner_guid;
+ $thumb->container_guid = $file->container_guid;
+
+ // tiny thumbnail
+ $thumb->setFilename($prefix."thumb".$filestorename);
+ $thumbname = $thumb->getFilenameOnFilestore();
+ $rtn_code = tp_imagick_resize( $file->getFilenameOnFilestore(),
+ $thumbname,
+ $image_sizes['tiny_image_width'],
+ $image_sizes['tiny_image_height'],
+ TRUE);
+ if (!$rtn_code) {
+ return FALSE;
+ }
+ $file->thumbnail = $prefix."thumb".$filestorename;
+
+ // album thumbnail
+ $thumb->setFilename($prefix."smallthumb".$filestorename);
+ $thumbname = $thumb->getFilenameOnFilestore();
+ $rtn_code = tp_imagick_resize( $file->getFilenameOnFilestore(),
+ $thumbname,
+ $image_sizes['small_image_width'],
+ $image_sizes['small_image_height'],
+ TRUE);
+ if (!$rtn_code) {
+ return FALSE;
+ }
+ $file->smallthumb = $prefix."smallthumb".$filestorename;
+
+ // main image
+ $thumb->setFilename($prefix."largethumb".$filestorename);
+ $thumbname = $thumb->getFilenameOnFilestore();
+ $rtn_code = tp_imagick_resize( $file->getFilenameOnFilestore(),
+ $thumbname,
+ $image_sizes['large_image_width'],
+ $image_sizes['large_image_height'],
+ FALSE);
+ if (!$rtn_code) {
+ return FALSE;
+ }
+ $file->largethumb = $prefix."largethumb".$filestorename;
+
+ unset($thumb);
+
+ return TRUE;
+}
+
+
+/**
+ * Resize using PHP imagick extension
+ *
+ * Writes resized version of an already uploaded image
+ *
+ *
+ * @param string $input_name The name of the file input field on the submission form
+ * @param string $output_name The name of the file to be written
+ * @param int $maxwidth The maximum width of the resized image
+ * @param int $maxheight The maximum height of the resized image
+ * @param TRUE|FALSE $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.
+ * @return bool TRUE on success
+ */
+function tp_imagick_resize($input_name, $output_name, $maxwidth, $maxheight, $square = FALSE, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0) {
+
+ // Get the size information from the image
+ $imgsizearray = getimagesize($input_name);
+ if (!$imgsizearray) {
+ return FALSE;
+ }
+
+ // Get width and height
+ $width = $imgsizearray[0];
+ $height = $imgsizearray[1];
+
+ $params = tp_im_calc_resize_params($width, $height, $maxwidth, $maxheight, $square, $x1, $y1, $x2, $y2);
+ if (!$params) {
+ return FALSE;
+ }
+
+ $new_width = $params['new_width'];
+ $new_height = $params['new_height'];
+ $region_width = $params['region_width'];
+ $region_height = $params['region_height'];
+ $widthoffset = $params['width_offset'];
+ $heightoffset = $params['height_offset'];
+
+ try {
+ $img = new Imagick($input_name);
+ } catch (ImagickException $e) {
+ return FALSE;
+ }
+
+ $img->cropImage($region_width, $region_height, $widthoffset, $heightoffset);
+
+ // use the default IM filter (windowing filter), I think 1 means default blurring or number of lobes
+ $img->resizeImage($new_width, $new_height, imagick::FILTER_LANCZOS, 1);
+ $img->setImagePage($new_width, $new_height, 0, 0);
+
+ if ($img->writeImage($output_name) != TRUE) {
+ $img->destroy();
+ return FALSE;
+ }
+
+ $img->destroy();
+
+ return TRUE;
+}
+
+/**
+ * Create thumbnails using ImageMagick executables
+ *
+ * @param ElggFile holds the image that was uploaded
+ * @param string folder to store thumbnail in
+ * @param string name of the thumbnail
+ * @return bool TRUE on success
+ */
+function tp_create_im_cmdline_thumbnails($file, $prefix, $filestorename) {
+ $image_sizes = elgg_get_plugin_setting('image_sizes', 'tidypics');
+ if (!$image_sizes) {
+ register_error(elgg_echo('tidypics:nosettings'));
+ return FALSE;
+ }
+ $image_sizes = unserialize($image_sizes);
+
+ $thumb = new ElggFile();
+ $thumb->owner_guid = $file->owner_guid;
+ $thumb->container_guid = $file->container_guid;
+
+ // tiny thumbnail
+ $thumb->setFilename($prefix."thumb".$filestorename);
+ $thumbname = $thumb->getFilenameOnFilestore();
+ $rtn_code = tp_im_cmdline_resize( $file->getFilenameOnFilestore(),
+ $thumbname,
+ $image_sizes['tiny_image_width'],
+ $image_sizes['tiny_image_height'],
+ TRUE);
+ if (!$rtn_code) {
+ return FALSE;
+ }
+ $file->thumbnail = $prefix."thumb".$filestorename;
+
+
+ // album thumbnail
+ $thumb->setFilename($prefix."smallthumb".$filestorename);
+ $thumbname = $thumb->getFilenameOnFilestore();
+ $rtn_code = tp_im_cmdline_resize( $file->getFilenameOnFilestore(),
+ $thumbname,
+ $image_sizes['small_image_width'],
+ $image_sizes['small_image_height'],
+ TRUE);
+ if (!$rtn_code) {
+ return FALSE;
+ }
+ $file->smallthumb = $prefix."smallthumb".$filestorename;
+
+ // main image
+ $thumb->setFilename($prefix."largethumb".$filestorename);
+ $thumbname = $thumb->getFilenameOnFilestore();
+ $rtn_code = tp_im_cmdline_resize( $file->getFilenameOnFilestore(),
+ $thumbname,
+ $image_sizes['large_image_width'],
+ $image_sizes['large_image_height'],
+ FALSE);
+ if (!$rtn_code) {
+ return FALSE;
+ }
+ $file->largethumb = $prefix."largethumb".$filestorename;
+
+ unset($thumb);
+
+ return TRUE;
+}
+
+/**
+ * Gets the jpeg contents of the resized version of an already 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 string $output_name The name of the file to be written
+ * @param int $maxwidth The maximum width of the resized image
+ * @param int $maxheight The maximum height of the resized image
+ * @param TRUE|FALSE $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.
+ * @return bool
+ */
+function tp_im_cmdline_resize($input_name, $output_name, $maxwidth, $maxheight, $square = FALSE, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0) {
+
+
+ // Get the size information from the image
+ $imgsizearray = getimagesize($input_name);
+ if (!$imgsizearray) {
+ return FALSE;
+ }
+
+ // Get width and height
+ $orig_width = $imgsizearray[0];
+ $orig_height = $imgsizearray[1];
+
+ $params = tp_im_calc_resize_params($orig_width, $orig_height, $maxwidth, $maxheight, $square, $x1, $y1, $x2, $y2);
+ if (!$params) {
+ return FALSE;
+ }
+
+ $newwidth = $params['new_width'];
+ $newheight = $params['new_height'];
+
+ $accepted_formats = array(
+ 'image/jpeg' => 'jpeg',
+ 'image/pjpeg' => 'jpeg',
+ 'image/png' => 'png',
+ 'image/x-png' => 'png',
+ 'image/gif' => 'gif'
+ );
+
+ // If it's a file we can manipulate ...
+ if (!array_key_exists($imgsizearray['mime'],$accepted_formats)) {
+ return FALSE;
+ }
+
+ $im_path = elgg_get_plugin_setting('im_path', 'tidypics');
+ if (!$im_path) {
+ $im_path = "/usr/bin/";
+ }
+ if (substr($im_path, strlen($im_path)-1, 1) != "/") {
+ $im_path .= "/";
+ }
+
+ // see imagemagick web site for explanation of these parameters
+ // the ^ in the resize means those are minimum width and height values
+ $command = $im_path . "convert \"$input_name\" -resize ".$newwidth."x".$newheight."^ -gravity center -extent ".$newwidth."x".$newheight." \"$output_name\"";
+ $output = array();
+ $ret = 0;
+ exec($command, $output, $ret);
+ if ($ret == 127) {
+ trigger_error('Tidypics warning: Image Magick convert is not found', E_USER_WARNING);
+ return FALSE;
+ } else if ($ret > 0) {
+ trigger_error('Tidypics warning: Image Magick convert failed', E_USER_WARNING);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**
+ * Calculate the resizing/cropping parameters
+ *
+ * @param int $orig_width
+ * @param int $orig_height
+ * @param int $new_width
+ * @param int $new_height
+ * @param bool $square
+ * @param int $x1
+ * @param int $y1
+ * @param int $x2
+ * @param int $y2
+ * @return array|FALSE
+ */
+function tp_im_calc_resize_params($orig_width, $orig_height, $new_width, $new_height, $square = FALSE, $x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0) {
+ // 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) {
+ $region_width = $x2 - $x1;
+ $region_height = $y2 - $y1;
+ } else {
+ // everything selected if no crop parameters
+ $region_width = $orig_width;
+ $region_height = $orig_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 && $region_width != $region_height) {
+ return FALSE;
+ }
+
+ // size of the new square image
+ $new_width = $new_height = min($new_width, $new_height);
+
+ // find largest square that fits within the selected region
+ $region_width = $region_height = min($region_width, $region_height);
+
+ // set offsets for crop
+ if ($crop) {
+ $widthoffset = $x1;
+ $heightoffset = $y1;
+ $orig_width = $x2 - $x1;
+ $orig_height = $orig_width;
+ } else {
+ // place square region in the center
+ $widthoffset = floor(($orig_width - $region_width) / 2);
+ $heightoffset = floor(($orig_height - $region_height) / 2);
+ }
+ } else {
+ // non-square new image
+
+ // maintain aspect ratio of original image/crop
+ if (($region_height / (float)$new_height) > ($region_width / (float)$new_width)) {
+ $new_width = floor($new_height * $region_width / (float)$region_height);
+ } else {
+ $new_height = floor($new_width * $region_height / (float)$region_width);
+ }
+
+ // by default, use entire image
+ $widthoffset = 0;
+ $heightoffset = 0;
+
+ if ($crop) {
+ $widthoffset = $x1;
+ $heightoffset = $y1;
+ }
+ }
+
+ $resize_params = array();
+ $resize_params['new_width'] = $new_width;
+ $resize_params['new_height'] = $new_height;
+ $resize_params['region_width'] = $region_width;
+ $resize_params['region_height'] = $region_height;
+ $resize_params['width_offset'] = $widthoffset;
+ $resize_params['height_offset'] = $heightoffset;
+
+ return $resize_params;
+} \ No newline at end of file
diff --git a/mod/lightpics/lib/tidypics.php b/mod/lightpics/lib/tidypics.php
new file mode 100644
index 000000000..1419a260a
--- /dev/null
+++ b/mod/lightpics/lib/tidypics.php
@@ -0,0 +1,365 @@
+<?php
+/**
+ * Elgg tidypics library of common functions
+ *
+ * @package TidypicsCommon
+ */
+
+/**
+ * Get images for display on front page
+ *
+ * @param int number of images
+ * @param int (optional) guid of owner
+ * @return string of html for display
+ *
+ * To use with the custom index plugin, use something like this:
+
+ if (is_plugin_enabled('tidypics')) {
+ ?>
+ <!-- display latest photos -->
+ <div class="index_box">
+ <h2><a href="<?php echo $vars['url']; ?>pg/photos/world/"><?php echo elgg_echo("tidypics:mostrecent"); ?></a></h2>
+ <div class="contentWrapper">
+ <?php
+ echo tp_get_latest_photos(5);
+ ?>
+ </div>
+ </div>
+ <?php
+ }
+ ?>
+
+ * Good luck
+ */
+function tp_get_latest_photos($num_images, $owner_guid = 0, $context = 'front') {
+ $prev_context = get_context();
+ set_context($context);
+ $image_html = elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'image',
+ 'owner_guid' => $owner_guid,
+ 'limit' => $num_images,
+ 'full_view' => false,
+ 'pagination' => false,
+ ));
+ set_context($prev_context);
+ return $image_html;
+}
+
+
+/**
+ * Get image directory path
+ *
+ * Each album gets a subdirectory based on its container id
+ *
+ * @return string path to image directory
+ */
+function tp_get_img_dir() {
+ $file = new ElggFile();
+ $file->setFilename('image/');
+ return $file->getFilenameOnFilestore();
+}
+
+/**
+ * Prepare vars for a form, pulling from an entity or sticky forms.
+ *
+ * @param type $entity
+ * @return type
+ */
+function tidypics_prepare_form_vars($entity = null) {
+ // input names => defaults
+ $values = array(
+ 'title' => '',
+ 'description' => '',
+ 'access_id' => ACCESS_DEFAULT,
+ 'tags' => '',
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'guid' => null,
+ 'entity' => $entity,
+ );
+
+ if ($entity) {
+ foreach (array_keys($values) as $field) {
+ if (isset($entity->$field)) {
+ $values[$field] = $entity->$field;
+ }
+ }
+ }
+
+ if (elgg_is_sticky_form('tidypics')) {
+ $sticky_values = elgg_get_sticky_values('tidypics');
+ foreach ($sticky_values as $key => $value) {
+ $values[$key] = $value;
+ }
+ }
+
+ elgg_clear_sticky_form('tidypics');
+
+ return $values;
+}
+
+/**
+ * Returns available image libraries.
+ *
+ * @return string
+ */
+function tidypics_get_image_libraries() {
+ $options = array();
+ if (extension_loaded('gd')) {
+ $options['GD'] = 'GD';
+ }
+
+ if (extension_loaded('imagick')) {
+ $options['ImageMagickPHP'] = 'imagick PHP extension';
+ }
+
+ $disablefunc = explode(',', ini_get('disable_functions'));
+ if (is_callable('exec') && !in_array('exec', $disablefunc)) {
+ $options['ImageMagick'] = 'ImageMagick executable';
+ }
+
+ return $options;
+}
+
+/**
+ * Are there upgrade scripts to be run?
+ *
+ * @return bool
+ */
+function tidypics_is_upgrade_available() {
+ // sets $version based on code
+ require_once elgg_get_plugins_path() . "lightpics/version.php";
+ return true;
+
+ $local_version = elgg_get_plugin_setting('version', 'tidypics');
+ if ($local_version === false) {
+ // no version set so either new install or really old one
+ if (!get_subtype_class('object', 'image') || !get_subtype_class('object', 'album')) {
+ $local_version = 0;
+ } else {
+ // set initial version for new install
+ elgg_set_plugin_setting('version', $version, 'tidypics');
+ $local_version = $version;
+ }
+ } elseif ($local_version === '1.62') {
+ // special work around to handle old upgrade system
+ $local_version = 2010010101;
+ elgg_set_plugin_setting('version', $local_version, 'tidypics');
+ }
+
+ if ($local_version == $version) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+/**
+ * This lists the photos in an album as sorted by metadata
+ *
+ * @todo this only supports a single album. The only case for use a
+ * procedural function like this instead of TidypicsAlbum::viewImgaes() is to
+ * fetch images across albums as a helper to elgg_get_entities().
+ * This should function be deprecated or fixed to work across albums.
+ *
+ * @param array $options
+ * @return string
+ */
+function tidypics_list_photos(array $options = array()) {
+ 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);
+
+ $options['count'] = true;
+ $count = elgg_get_entities($options);
+
+ $album = get_entity($options['container_guid']);
+ if ($album) {
+ $guids = $album->getImageList();
+ // need to pass all the guids and handle the limit / offset in sql
+ // to avoid problems with the navigation
+ //$guids = array_slice($guids, $options['offset'], $options['limit']);
+ $options['guids'] = $guids;
+ unset($options['container_guid']);
+ }
+ $options['count'] = false;
+ $entities = elgg_get_entities($options);
+
+ $keys = array();
+ foreach ($entities as $entity) {
+ $keys[] = $entity->guid;
+ }
+
+ $entities = array_combine($keys, $entities);
+
+ $sorted_entities = array();
+ foreach ($guids as $guid) {
+ if (isset($entities[$guid])) {
+ $sorted_entities[] = $entities[$guid];
+ }
+ }
+
+ // for this function count means the total number of entities
+ // and is required for pagination
+ $options['count'] = $count;
+
+ return elgg_view_entity_list($sorted_entities, $options);
+}
+
+/**
+ * Returns just a guid from a database $row. Used in elgg_get_entities()'s callback.
+ *
+ * @param stdClass $row
+ * @return type
+ */
+function tp_guid_callback($row) {
+ return ($row->guid) ? $row->guid : false;
+}
+
+
+/*********************************************************************
+ * the functions below replace broken core functions or add functions
+ * that could/should exist in the core
+ */
+
+function tp_view_entity_list($entities, $count, $offset, $limit, $fullview = true, $viewtypetoggle = false, $pagination = true) {
+ $context = get_context();
+
+ $html = elgg_view('tidypics/gallery',array(
+ 'entities' => $entities,
+ 'count' => $count,
+ 'offset' => $offset,
+ 'limit' => $limit,
+ 'baseurl' => $_SERVER['REQUEST_URI'],
+ 'fullview' => $fullview,
+ 'context' => $context,
+ 'viewtypetoggle' => $viewtypetoggle,
+ 'viewtype' => get_input('search_viewtype','list'),
+ 'pagination' => $pagination
+ ));
+
+ return $html;
+}
+
+function tp_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) {
+ global $CONFIG;
+
+ $sum = sanitise_string($sum);
+ $entity_type = sanitise_string($entity_type);
+ $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
+ $name = get_metastring_id($name);
+ $limit = (int) $limit;
+ $offset = (int) $offset;
+ $owner_guid = (int) $owner_guid;
+ if (!empty($mdname) && !empty($mdvalue)) {
+ $meta_n = get_metastring_id($mdname);
+ $meta_v = get_metastring_id($mdvalue);
+ }
+
+ if (empty($name)) return 0;
+
+ $where = array();
+
+ if ($entity_type!="")
+ $where[] = "e.type='$entity_type'";
+ if ($owner_guid > 0)
+ $where[] = "e.owner_guid = $owner_guid";
+ if ($entity_subtype)
+ $where[] = "e.subtype=$entity_subtype";
+ if ($name!="")
+ $where[] = "a.name_id='$name'";
+
+ if (!empty($mdname) && !empty($mdvalue)) {
+ if ($mdname!="")
+ $where[] = "m.name_id='$meta_n'";
+ if ($mdvalue!="")
+ $where[] = "m.value_id='$meta_v'";
+ }
+
+ if ($sum != "count")
+ $where[] = "a.value_type='integer'"; // Limit on integer types
+
+ if (!$count) {
+ $query = "SELECT distinct e.*, $sum(ms.string) as sum ";
+ } else {
+ $query = "SELECT count(distinct e.guid) as num, $sum(ms.string) as sum ";
+ }
+ $query .= " from {$CONFIG->dbprefix}entities e JOIN {$CONFIG->dbprefix}annotations a on a.entity_guid = e.guid JOIN {$CONFIG->dbprefix}metastrings ms on a.value_id=ms.id ";
+
+ if (!empty($mdname) && !empty($mdvalue)) {
+ $query .= " JOIN {$CONFIG->dbprefix}metadata m on m.entity_guid = e.guid ";
+ }
+
+ $query .= " WHERE ";
+ foreach ($where as $w)
+ $query .= " $w and ";
+ $query .= get_access_sql_suffix("a"); // now add access
+ $query .= ' and ' . get_access_sql_suffix("e"); // now add access
+ if (!$count) $query .= ' group by e.guid';
+
+ if (!$count) {
+ $query .= ' order by sum ' . $orderdir;
+ $query .= ' limit ' . $offset . ' , ' . $limit;
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($row = get_data_row($query)) {
+ return $row->num;
+ }
+ }
+ return false;
+}
+
+/**
+ * Is page owner a group - convenience function
+ *
+ * @return true/false
+ */
+function tp_is_group_page() {
+
+ if ($group = page_owner_entity()) {
+ if ($group instanceof ElggGroup)
+ return true;
+ }
+
+ return false;
+}
+
+
+/**
+ * Is the request from a known browser
+ *
+ * @return true/false
+ */
+function tp_is_person() {
+ $known = array('msie', 'mozilla', 'firefox', 'safari', 'webkit', 'opera', 'netscape', 'konqueror', 'gecko');
+
+ $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
+
+ foreach ($known as $browser) {
+ if (strpos($agent, $browser) !== false) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Convenience function for listing recent images
+ *
+ * @param int $max
+ * @param bool $pagination
+ * @return string
+ */
+function tp_mostrecentimages($max = 8, $pagination = true) {
+ return list_entities("object", "image", 0, $max, false, false, $pagination);
+}
diff --git a/mod/lightpics/lib/upload.php b/mod/lightpics/lib/upload.php
new file mode 100644
index 000000000..a83323f16
--- /dev/null
+++ b/mod/lightpics/lib/upload.php
@@ -0,0 +1,119 @@
+<?php
+/**
+ * Helper library for working with uploads
+ */
+
+/**
+ * Guess on the mimetype based on file extension
+ *
+ * @param string $originalName
+ * @return string
+ */
+function tp_upload_get_mimetype($originalName) {
+ $extension = substr(strrchr($originalName, '.'), 1);
+ switch (strtolower($extension)) {
+ case 'png':
+ return 'image/png';
+ break;
+ case 'gif':
+ return 'image/gif';
+ break;
+ case 'jpg':
+ case 'jpeg':
+ return 'image/jpeg';
+ break;
+ default:
+ return 'unknown';
+ break;
+ }
+}
+
+/**
+ * Check if this is an image
+ *
+ * @param string $mime
+ * @return bool false = not image
+ */
+function tp_upload_check_format($mime) {
+ $accepted_formats = array(
+ 'image/jpeg',
+ 'image/png',
+ 'image/gif',
+ 'image/pjpeg',
+ 'image/x-png',
+ );
+
+ if (!in_array($mime, $accepted_formats)) {
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Check if there is enough memory to process this image
+ *
+ * @param string $image_lib
+ * @param int $num_pixels
+ * @return bool false = not enough memory
+ */
+function tp_upload_memory_check($image_lib, $num_pixels) {
+ if ($image_lib !== 'GD') {
+ return true;
+ }
+
+ $mem_avail = ini_get('memory_limit');
+ $mem_avail = rtrim($mem_avail, 'M');
+ $mem_avail = $mem_avail * 1024 * 1024;
+ $mem_used = memory_get_usage();
+ $mem_required = ceil(5.35 * $num_pixels);
+
+ $mem_avail = $mem_avail - $mem_used - 2097152; // 2 MB buffer
+ if ($mem_required > $mem_avail) {
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Check if image is within limits
+ *
+ * @param int $image_size
+ * @return bool false = too large
+ */
+function tp_upload_check_max_size($image_size) {
+ $max_file_size = (float) elgg_get_plugin_setting('maxfilesize', 'tidypics');
+ if (!$max_file_size) {
+ // default to 5 MB if not set
+ $max_file_size = 5;
+ }
+ // convert to bytes from MBs
+ $max_file_size = 1024 * 1024 * $max_file_size;
+ return $image_size <= $max_file_size;
+}
+
+/**
+ * Check if this image pushes user over quota
+ *
+ * @param int $image_size
+ * @param int $owner_guid
+ * @return bool false = exceed quota
+ */
+function tp_upload_check_quota($image_size, $owner_guid) {
+ static $quota;
+
+ if (!isset($quota)) {
+ $quota = elgg_get_plugin_setting('quota', 'tidypics');
+ $quota = 1024 * 1024 * $quota;
+ }
+
+ if ($quota == 0) {
+ // no quota
+ return true;
+ }
+
+ $owner = get_entity($owner_guid);
+ $image_repo_size_md = (int)$owner->image_repo_size;
+
+ return ($image_repo_size + $image_size) < $quota;
+} \ No newline at end of file
diff --git a/mod/lightpics/manifest.xml b/mod/lightpics/manifest.xml
new file mode 100644
index 000000000..f892a0e0a
--- /dev/null
+++ b/mod/lightpics/manifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Lightpics Photo Gallery</name>
+ <author>Lorea developers</author>
+ <version>1.8</version>
+ <description>A simple photo gallery with albums and a slideshow.</description>
+ <category>content</category>
+ <category>multimedia</category>
+ <website>https://lorea.org</website>
+ <copyright>(C) 2011-2012 Cash Costello, 2012-2013 Lorea</copyright>
+ <license>GNU General Public License Version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <conflicts>
+ <type>plugin</type>
+ <name>tidypics</name>
+ </conflicts>
+ <suggests>
+ <type>plugin</type>
+ <name>colorbox</name>
+ <version>1.8</version>
+ </suggests>
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>colorbox</plugin>
+ </requires>
+</plugin_manifest>
diff --git a/mod/lightpics/pages/lists/highestrated.php b/mod/lightpics/pages/lists/highestrated.php
new file mode 100644
index 000000000..e05e7a9ba
--- /dev/null
+++ b/mod/lightpics/pages/lists/highestrated.php
@@ -0,0 +1,65 @@
+<?php
+ /**
+ * Tidypics Friends Albums Listing
+ *
+ */
+
+ include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+ //if no friends were requested, see world pictures instead, or redirect to user's friends
+/* if (is_null(get_input('username')) || get_input('username')=='') {
+ if (!isloggedin()) {
+ forward('pg/photos/world');
+ } else {
+ forward('pg/photos/friends/' . $_SESSION['user']->username);
+ }
+ }*/
+
+// if (is_null(page_owner_entity()->name) || page_owner_entity()->name == '') {
+// $groupname = get_input('username');
+// } else {
+// $groupname = page_owner_entity()->name;
+// };
+//
+ //there has to be a better way to do this
+ if(!$groupname) {
+ $page = get_input("page");
+ list($pagename, $groupname) = split("/", $page);
+ }
+
+ list($group_holder, $album_id) = split(":", $groupname);
+// echo "<pre>page: $page\ngroup: $groupname\nalbum: $album_id"; die;
+
+ $user = get_user_by_username($friendname);
+ global $CONFIG;
+ $prefix = $CONFIG->dbprefix;
+ $max = 24;
+
+ $sql = "SELECT ent.guid, count(1) as mycount, avg(ms2.string) as average
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image' AND ent.container_guid = $album_id
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'generic_rate'
+ INNER JOIN " . $prefix . "metastrings ms2 ON ms2.id = ann1.value_id
+ INNER JOIN " . $prefix . "users_entity u ON ann1.owner_guid = u.guid
+ GROUP BY ent.guid HAVING mycount > 1
+ ORDER BY average DESC
+ LIMIT $max";
+
+ $result = get_data($sql);
+
+ $entities = array();
+ foreach($result as $entity) {
+ $entities[] = get_entity($entity->guid);
+ }
+
+ $album = get_entity($album_id);
+ $title = $album["title"] . ": " . elgg_echo("tidypics:highestrated");
+ $area2 = elgg_view_title($title);
+ $area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+ $body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+ page_draw($title, $body);
+
+?> \ No newline at end of file
diff --git a/mod/lightpics/pages/lists/highestvotecount.php b/mod/lightpics/pages/lists/highestvotecount.php
new file mode 100644
index 000000000..26b907144
--- /dev/null
+++ b/mod/lightpics/pages/lists/highestvotecount.php
@@ -0,0 +1,50 @@
+<?php
+
+ /**
+ * Tidypics full view of an image
+ * Given a GUID, this page will try and display any entity
+ *
+ */
+
+ // Load Elgg engine
+ include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+ global $CONFIG;
+ $prefix = $CONFIG->dbprefix;
+ $max = 24;
+
+ $sql = "SELECT ent.guid, u.name as owner, count( 1 ) AS mycount, avg( ms2.string ) AS average
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'generic_rate'
+ INNER JOIN " . $prefix . "metastrings ms2 ON ms2.id = ann1.value_id
+ INNER JOIN " . $prefix . "users_entity u ON ent.owner_guid = u.guid
+ GROUP BY ent.guid
+ ORDER BY mycount DESC
+ LIMIT $max";
+
+ $result = get_data($sql);
+
+ $title = "Most voted images";
+ $area2 = elgg_view_title($title);
+
+ $entities = array();
+ foreach($result as $entity) {
+ $entities[] = get_entity($entity->guid);
+ $full_entity = get_entity($entity->guid);
+ $area2 .= " <div class='tidypics_album_images'>
+ Owner: $entity->owner<br />
+ Votes: $entity->mycount<br />
+ Average: $entity->average
+ </div>
+ ";
+ $area2 .= elgg_view_entity($full_entity);
+
+ }
+
+ $body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+ page_draw($title, $body);
+?> \ No newline at end of file
diff --git a/mod/lightpics/pages/lists/mostcommentedimages.php b/mod/lightpics/pages/lists/mostcommentedimages.php
new file mode 100644
index 000000000..0a4eb9622
--- /dev/null
+++ b/mod/lightpics/pages/lists/mostcommentedimages.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Tidypics full view of an image
+ * Given a GUID, this page will try and display any entity
+ *
+ */
+
+// Load Elgg engine
+include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+global $CONFIG;
+$prefix = $CONFIG->dbprefix;
+$max = 24;
+
+//this works but is wildly inefficient
+//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+
+$sql = "SELECT ent.guid, count( * ) AS views
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'generic_comment'
+ GROUP BY ent.guid
+ ORDER BY views DESC
+ LIMIT $max";
+
+$result = get_data($sql);
+
+$entities = array();
+foreach ($result as $entity) {
+ $entities[] = get_entity($entity->guid);
+}
+
+tidypics_mostviewed_submenus();
+$title = elgg_echo("tidypics:mostcommented");
+$area2 = elgg_view_title($title);
+$area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+page_draw($title, $body); \ No newline at end of file
diff --git a/mod/lightpics/pages/lists/mostcommentedimagesthismonth.php b/mod/lightpics/pages/lists/mostcommentedimagesthismonth.php
new file mode 100644
index 000000000..d95e2aff5
--- /dev/null
+++ b/mod/lightpics/pages/lists/mostcommentedimagesthismonth.php
@@ -0,0 +1,50 @@
+<?php
+
+ /**
+ * Tidypics full view of an image
+ * Given a GUID, this page will try and display any entity
+ *
+ */
+
+ // Load Elgg engine
+ include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+ global $CONFIG;
+ $prefix = $CONFIG->dbprefix;
+ $max = 24;
+
+
+ //find timestamps for first and last days of this month
+ $time_info = new stdClass();
+ $time_info->start = mktime(0,0,0, date("m"), 1, date("Y"));
+ $time_info->end = mktime();
+
+ //this works but is wildly inefficient
+ //$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+
+ $sql = "SELECT ent.guid, count( * ) AS views
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'generic_comment'
+ WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+ GROUP BY ent.guid
+ ORDER BY views DESC
+ LIMIT $max";
+
+ $result = get_data($sql);
+
+ $entities = array();
+ foreach($result as $entity) {
+ $entities[] = get_entity($entity->guid);
+ }
+
+ tidypics_mostviewed_submenus();
+ $title = elgg_echo("tidypics:mostcommentedthismonth");
+ $area2 = elgg_view_title($title);
+ $area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+ $body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+ page_draw($title, $body);
+?> \ No newline at end of file
diff --git a/mod/lightpics/pages/lists/mostcommentedimagestoday.php b/mod/lightpics/pages/lists/mostcommentedimagestoday.php
new file mode 100644
index 000000000..bd1a0cbec
--- /dev/null
+++ b/mod/lightpics/pages/lists/mostcommentedimagestoday.php
@@ -0,0 +1,50 @@
+<?php
+
+ /**
+ * Tidypics full view of an image
+ * Given a GUID, this page will try and display any entity
+ *
+ */
+
+ // Load Elgg engine
+ include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+ global $CONFIG;
+ $prefix = $CONFIG->dbprefix;
+ $max = 24;
+
+
+ //find timestamps for today
+ $time_info = new stdClass();
+ $time_info->start = mktime(0,0,0, date("m"), date("d"), date("Y"));
+ $time_info->end = mktime();
+
+ //this works but is wildly inefficient
+ //$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+
+ $sql = "SELECT ent.guid, count( * ) AS views
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'generic_comment'
+ WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+ GROUP BY ent.guid
+ ORDER BY views DESC
+ LIMIT $max";
+
+ $result = get_data($sql);
+
+ $entities = array();
+ foreach($result as $entity) {
+ $entities[] = get_entity($entity->guid);
+ }
+
+ tidypics_mostviewed_submenus();
+ $title = elgg_echo("tidypics:mostcommentedtoday");
+ $area2 = elgg_view_title($title);
+ $area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+ $body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+ page_draw($title, $body);
+?> \ No newline at end of file
diff --git a/mod/lightpics/pages/lists/mostrecentimages.php b/mod/lightpics/pages/lists/mostrecentimages.php
new file mode 100644
index 000000000..83ec3e988
--- /dev/null
+++ b/mod/lightpics/pages/lists/mostrecentimages.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * Most recently uploaded images - individual or world
+ *
+ */
+
+// Load Elgg engine
+include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+// start with assumption this is for all site photos
+$title = elgg_echo('tidypics:mostrecent');
+$user_id = 0;
+
+// is this all site or an individuals images
+$username = get_input('username');
+if ($username) {
+ $user = get_user_by_username($username);
+ if ($user) {
+ $user_id = $user->guid;
+
+ if ($user_id == get_loggedin_userid()) {
+ $title = elgg_echo('tidypics:yourmostrecent');
+ } else {
+ $title = sprintf(elgg_echo("tidypics:friendmostrecent"), $user->name);
+ }
+ }
+} else {
+ // world view - set page owner to logged in user
+ if (isloggedin()) {
+ set_page_owner(get_loggedin_userid());
+ }
+}
+
+// how many do we display
+$max = 12;
+
+// grab the html to display the images
+$images = elgg_list_entities(array(
+ "type" => "object",
+ "subtype" => "image",
+ "owner_guid" => $user_id,
+ "limit" => $max,
+ "full_view" => false,
+));
+
+
+// this view takes care of the title on the main column and the content wrapper
+$area2 = elgg_view('tidypics/content_wrapper', array('title' => $title, 'content' => $images,));
+if (empty($area2)) {
+ $area2 = $images;
+}
+
+$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+
+page_draw($title, $body);
diff --git a/mod/lightpics/pages/lists/mostviewedimages.php b/mod/lightpics/pages/lists/mostviewedimages.php
new file mode 100644
index 000000000..c113c39e2
--- /dev/null
+++ b/mod/lightpics/pages/lists/mostviewedimages.php
@@ -0,0 +1,79 @@
+<?php
+
+/**
+ * Most viewed images - either for a user or all site
+ *
+ */
+
+// Load Elgg engine
+include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+global $CONFIG;
+$prefix = $CONFIG->dbprefix;
+$max = 24;
+
+$owner_guid = page_owner();
+
+//$start = microtime(true);
+$photos = tp_get_entities_from_annotations_calculate_x(
+ 'count',
+ 'object',
+ 'image',
+ 'tp_view',
+ '',
+ '',
+ $owner_guid,
+ $max);
+//error_log("elgg query is " . (float)(microtime(true) - $start));
+
+//this works but is wildly inefficient
+//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+/*
+ $start = microtime(true);
+ $sql = "SELECT ent.guid, count( * ) AS views
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid AND ann1.owner_guid != ent.owner_guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'tp_view'
+ GROUP BY ent.guid
+ ORDER BY views DESC
+ LIMIT $max";
+
+ $result = get_data($sql);
+
+ $entities = array();
+ foreach($result as $entity) {
+ $entities[] = get_entity($entity->guid);
+ }
+*/
+//error_log("custom query is " . (float)(microtime(true) - $start));
+
+if ($owner_guid) {
+ if ($owner_guid == get_loggedin_userid()) {
+ $title = elgg_echo("tidypics:yourmostviewed");
+ } else {
+ $title = sprintf(elgg_echo("tidypics:friendmostviewed"), page_owner_entity()->name);
+ }
+} else {
+ // world view - set page owner to logged in user
+ if (isloggedin()) {
+ set_page_owner(get_loggedin_userid());
+ }
+
+ $title = elgg_echo("tidypics:mostviewed");
+}
+$area2 = elgg_view_title($title);
+
+// grab the html to display the images
+$content = tp_view_entity_list($photos, $max, 0, $max, false);
+
+// this view takes care of the title on the main column and the content wrapper
+$area2 = elgg_view('tidypics/content_wrapper', array('title' => $title, 'content' => $content,));
+if (empty($area2)) {
+ $area2 = $content;
+}
+
+$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+page_draw($title, $body);
diff --git a/mod/lightpics/pages/lists/mostviewedimageslastmonth.php b/mod/lightpics/pages/lists/mostviewedimageslastmonth.php
new file mode 100644
index 000000000..1ed9161f7
--- /dev/null
+++ b/mod/lightpics/pages/lists/mostviewedimageslastmonth.php
@@ -0,0 +1,50 @@
+<?php
+
+ /**
+ * Tidypics full view of an image
+ * Given a GUID, this page will try and display any entity
+ *
+ */
+
+ // Load Elgg engine
+ include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+ global $CONFIG;
+ $prefix = $CONFIG->dbprefix;
+ $max = 24;
+
+
+ //find timestamps for first and last days of last month
+ $time_info = new stdClass();
+ $time_info->start = strtotime("-1 months", mktime(0,0,0, date("m"), 1, date("Y")));
+ $time_info->end = mktime(0,0,0,date("m"), 0, date("Y"));
+
+ //this works but is wildly inefficient
+ //$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+
+ $sql = "SELECT ent.guid, count( * ) AS views
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid AND ann1.owner_guid != ent.owner_guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'tp_view'
+ WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+ GROUP BY ent.guid
+ ORDER BY views DESC
+ LIMIT $max";
+
+ $result = get_data($sql);
+
+ $entities = array();
+ foreach($result as $entity) {
+ $entities[] = get_entity($entity->guid);
+ }
+
+ tidypics_mostviewed_submenus();
+ $title = elgg_echo("tidypics:mostviewedlastmonth");
+ $area2 = elgg_view_title($title);
+ $area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+ $body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+ page_draw($title, $body);
+?> \ No newline at end of file
diff --git a/mod/lightpics/pages/lists/mostviewedimagesthismonth.php b/mod/lightpics/pages/lists/mostviewedimagesthismonth.php
new file mode 100644
index 000000000..bfe08e1da
--- /dev/null
+++ b/mod/lightpics/pages/lists/mostviewedimagesthismonth.php
@@ -0,0 +1,50 @@
+<?php
+
+ /**
+ * Tidypics full view of an image
+ * Given a GUID, this page will try and display any entity
+ *
+ */
+
+ // Load Elgg engine
+ include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+ global $CONFIG;
+ $prefix = $CONFIG->dbprefix;
+ $max = 24;
+
+
+ //find timestamps for first and last days of this month
+ $time_info = new stdClass();
+ $time_info->start = mktime(0,0,0, date("m"), 1, date("Y"));
+ $time_info->end = mktime();
+
+ //this works but is wildly inefficient
+ //$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+
+ $sql = "SELECT ent.guid, count( * ) AS views
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid AND ann1.owner_guid != ent.owner_guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'tp_view'
+ WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+ GROUP BY ent.guid
+ ORDER BY views DESC
+ LIMIT $max";
+
+ $result = get_data($sql);
+
+ $entities = array();
+ foreach($result as $entity) {
+ $entities[] = get_entity($entity->guid);
+ }
+
+ tidypics_mostviewed_submenus();
+ $title = elgg_echo("tidypics:mostviewedthismonth");
+ $area2 = elgg_view_title($title);
+ $area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+ $body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+ page_draw($title, $body);
+?> \ No newline at end of file
diff --git a/mod/lightpics/pages/lists/mostviewedimagesthisyear.php b/mod/lightpics/pages/lists/mostviewedimagesthisyear.php
new file mode 100644
index 000000000..fe1a63d38
--- /dev/null
+++ b/mod/lightpics/pages/lists/mostviewedimagesthisyear.php
@@ -0,0 +1,50 @@
+<?php
+
+ /**
+ * Tidypics full view of an image
+ * Given a GUID, this page will try and display any entity
+ *
+ */
+
+ // Load Elgg engine
+ include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+ global $CONFIG;
+ $prefix = $CONFIG->dbprefix;
+ $max = 24;
+
+
+ //find timestamps for first day of the year and current date
+ $time_info = new stdClass();
+ $time_info->start = mktime(0,0,0, 1, 1, date("Y"));
+ $time_info->end = mktime();
+
+ //this works but is wildly inefficient
+ //$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+
+ $sql = "SELECT ent.guid, count( * ) AS views
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid AND ann1.owner_guid != ent.owner_guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'tp_view'
+ WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+ GROUP BY ent.guid
+ ORDER BY views DESC
+ LIMIT $max";
+
+ $result = get_data($sql);
+
+ $entities = array();
+ foreach($result as $entity) {
+ $entities[] = get_entity($entity->guid);
+ }
+
+ tidypics_mostviewed_submenus();
+ $title = elgg_echo("tidypics:mostviewedthisyear");
+ $area2 = elgg_view_title($title);
+ $area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+ $body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+ page_draw($title, $body);
+?> \ No newline at end of file
diff --git a/mod/lightpics/pages/lists/mostviewedimagestoday.php b/mod/lightpics/pages/lists/mostviewedimagestoday.php
new file mode 100644
index 000000000..f8e844753
--- /dev/null
+++ b/mod/lightpics/pages/lists/mostviewedimagestoday.php
@@ -0,0 +1,50 @@
+<?php
+
+ /**
+ * Tidypics full view of an image
+ * Given a GUID, this page will try and display any entity
+ *
+ */
+
+ // Load Elgg engine
+ include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+ global $CONFIG;
+ $prefix = $CONFIG->dbprefix;
+ $max = 24;
+
+
+ //find timestamps for today
+ $time_info = new stdClass();
+ $time_info->start = mktime(0,0,0, date("m"), date("d"), date("Y"));
+ $time_info->end = mktime();
+
+ //this works but is wildly inefficient
+ //$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+
+ $sql = "SELECT ent.guid, count( * ) AS views
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid AND ann1.owner_guid != ent.owner_guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'tp_view'
+ WHERE ann1.time_created BETWEEN $time_info->start AND $time_info->end
+ GROUP BY ent.guid
+ ORDER BY views DESC
+ LIMIT $max";
+
+ $result = get_data($sql);
+
+ $entities = array();
+ foreach($result as $entity) {
+ $entities[] = get_entity($entity->guid);
+ }
+
+ tidypics_mostviewed_submenus();
+ $title = elgg_echo("tidypics:mostviewedtoday");
+ $area2 = elgg_view_title($title);
+ $area2 .= elgg_view_entity_list($entities, $max, 0, $max, false);
+ $body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+ page_draw($title, $body);
+?> \ No newline at end of file
diff --git a/mod/lightpics/pages/lists/recentlycommented.php b/mod/lightpics/pages/lists/recentlycommented.php
new file mode 100644
index 000000000..08f69603a
--- /dev/null
+++ b/mod/lightpics/pages/lists/recentlycommented.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * Images recently commented on - world view only
+ *
+ */
+
+// Load Elgg engine
+include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+// world view - set page owner to logged in user
+if (isloggedin()) {
+ set_page_owner(get_loggedin_userid());
+}
+
+
+global $CONFIG;
+$prefix = $CONFIG->dbprefix;
+$max_limit = 200; //get extra because you'll have multiple views per image in the result set
+$max = 16; //controls how many actually show on screen
+
+//this works but is wildly inefficient
+//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+
+$sql = "SELECT distinct (ent.guid), ann1.time_created
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'generic_comment'
+ ORDER BY ann1.time_created DESC
+ LIMIT $max_limit";
+
+$result = get_data($sql);
+
+$entities = array();
+foreach ($result as $entity) {
+ if (!$entities[$entity->guid]) {
+ $entities[$entity->guid] = get_entity($entity->guid);
+ }
+ if (count($entities) >= $max) {
+ break;
+ }
+}
+
+$user = get_loggedin_user();
+$title = elgg_echo("tidypics:recentlycommented");
+$area2 = elgg_view_title($title);
+
+// grab the html to display the images
+$images = tp_view_entity_list($entities, $max, 0, $max, false);
+
+// this view takes care of the title on the main column and the content wrapper
+$area2 = elgg_view('tidypics/content_wrapper', array('title' => $title, 'content' => $images,));
+if (empty($area2)) {
+ $area2 = $images;
+}
+
+$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+page_draw($title, $body);
diff --git a/mod/lightpics/pages/lists/recentlyviewed.php b/mod/lightpics/pages/lists/recentlyviewed.php
new file mode 100644
index 000000000..851804e99
--- /dev/null
+++ b/mod/lightpics/pages/lists/recentlyviewed.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * Most recently viewed images - world view only right now
+ *
+ */
+
+// Load Elgg engine
+include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+// world view - set page owner to logged in user
+if (isloggedin()) {
+ set_page_owner(get_loggedin_userid());
+}
+
+
+global $CONFIG;
+$prefix = $CONFIG->dbprefix;
+$max_limit = 200; //get extra because you'll have multiple views per image in the result set
+$max = 16; //controls how many actually show on screen
+
+//this works but is wildly inefficient
+//$annotations = get_annotations(0, "object", "image", "tp_view", "", "", 5000);
+
+$sql = "SELECT distinct ent.guid, ann1.time_created
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'tp_view'
+ ORDER BY ann1.id DESC
+ LIMIT $max_limit";
+
+$result = get_data($sql);
+
+$entities = array();
+foreach ($result as $entity) {
+ if (!$entities[$entity->guid]) {
+ $entities[$entity->guid] = get_entity($entity->guid);
+ }
+ if (count($entities) >= $max) {
+ break;
+ }
+}
+
+$title = elgg_echo("tidypics:recentlyviewed");
+$area2 = elgg_view_title($title);
+
+// grab the html to display the images
+$images = tp_view_entity_list($entities, $max, 0, $max, false);
+
+// this view takes care of the title on the main column and the content wrapper
+$area2 = elgg_view('tidypics/content_wrapper', array('title' => $title, 'content' => $images,));
+if (empty($area2)) {
+ $area2 = $images;
+}
+
+$body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+page_draw($title, $body);
diff --git a/mod/lightpics/pages/lists/recentvotes.php b/mod/lightpics/pages/lists/recentvotes.php
new file mode 100644
index 000000000..3d8eac97e
--- /dev/null
+++ b/mod/lightpics/pages/lists/recentvotes.php
@@ -0,0 +1,52 @@
+<?php
+
+ /**
+ * Tidypics full view of an image
+ * Given a GUID, this page will try and display any entity
+ *
+ */
+
+ // Load Elgg engine
+ include_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . "/engine/start.php";
+
+ global $CONFIG;
+ $prefix = $CONFIG->dbprefix;
+ $max = 24;
+
+ $sql = "SELECT ent.guid, u2.name AS owner, u.name AS voter, ms2.string as vote
+ FROM " . $prefix . "entities ent
+ INNER JOIN " . $prefix . "entity_subtypes sub ON ent.subtype = sub.id
+ AND sub.subtype = 'image'
+ INNER JOIN " . $prefix . "annotations ann1 ON ann1.entity_guid = ent.guid
+ INNER JOIN " . $prefix . "metastrings ms ON ms.id = ann1.name_id
+ AND ms.string = 'generic_rate'
+ INNER JOIN " . $prefix . "metastrings ms2 ON ms2.id = ann1.value_id
+ INNER JOIN " . $prefix . "users_entity u ON ann1.owner_guid = u.guid
+ INNER JOIN " . $prefix . "users_entity u2 ON ent.owner_guid = u2.guid
+ ORDER BY ann1.time_created DESC
+ LIMIT $max";
+
+ $result = get_data($sql);
+
+ $title = "Recently rated images";
+ $area2 = elgg_view_title($title);
+
+ $entities = array();
+ foreach($result as $entity) {
+ $entities[] = get_entity($entity->guid);
+ $full_entity = get_entity($entity->guid);
+ $area2 .= " <div class='tidypics_album_images'>
+ Owner: $entity->owner<br />
+ Voter: $entity->voter<br />
+ Rating: $entity->vote
+ </div>
+ ";
+ $area2 .= elgg_view_entity($full_entity);
+
+ }
+
+
+// $area2 .= elgg_view_entity_list($entities, $max, 0, $max);
+ $body = elgg_view_layout('two_column_left_sidebar', '', $area2);
+ page_draw($title, $body);
+?> \ No newline at end of file
diff --git a/mod/lightpics/pages/photos/album/add.php b/mod/lightpics/pages/photos/album/add.php
new file mode 100644
index 000000000..d34d39177
--- /dev/null
+++ b/mod/lightpics/pages/photos/album/add.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Create new album page
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$owner = elgg_get_page_owner_entity();
+
+gatekeeper();
+group_gatekeeper();
+
+$title = elgg_echo('photos:add');
+
+// set up breadcrumbs
+elgg_push_breadcrumb(elgg_echo('photos'), "photos/all");
+if (elgg_instanceof($owner, 'user')) {
+ elgg_push_breadcrumb($owner->name, "photos/owner/$owner->username");
+} else {
+ elgg_push_breadcrumb($owner->name, "photos/group/$owner->guid/all");
+}
+elgg_push_breadcrumb($title);
+
+$vars = tidypics_prepare_form_vars();
+$content = elgg_view_form('photos/album/save', array('method' => 'post'), $vars);
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/lightpics/pages/photos/album/edit.php b/mod/lightpics/pages/photos/album/edit.php
new file mode 100644
index 000000000..7efb05ce1
--- /dev/null
+++ b/mod/lightpics/pages/photos/album/edit.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Edit an album
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$guid = (int) get_input('guid');
+
+if (!$entity = get_entity($guid)) {
+ // @todo either deleted or do not have access
+ forward('photos/all');
+}
+
+if (!$entity->canEdit()) {
+ // @todo cannot change it
+ forward('photos/all');
+}
+
+elgg_set_page_owner_guid($entity->getContainerGUID());
+$owner = elgg_get_page_owner_entity();
+
+gatekeeper();
+group_gatekeeper();
+
+$title = elgg_echo('album:edit');
+
+// set up breadcrumbs
+elgg_push_breadcrumb(elgg_echo('photos'), "photos/all");
+if (elgg_instanceof($owner, 'user')) {
+ elgg_push_breadcrumb($owner->name, "photos/owner/$owner->username");
+} else {
+ elgg_push_breadcrumb($owner->name, "photos/group/$owner->guid/all");
+}
+elgg_push_breadcrumb($entity->getTitle(), $entity->getURL());
+elgg_push_breadcrumb($title);
+
+$vars = tidypics_prepare_form_vars($entity);
+$content = elgg_view_form('photos/album/save', array('method' => 'post'), $vars);
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/lightpics/pages/photos/album/sort.php b/mod/lightpics/pages/photos/album/sort.php
new file mode 100644
index 000000000..005205dd5
--- /dev/null
+++ b/mod/lightpics/pages/photos/album/sort.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Album sort page
+ *
+ * This displays a listing of all the photos so that they can be sorted
+ */
+
+gatekeeper();
+group_gatekeeper();
+
+// get the album entity
+$album_guid = (int) get_input('guid');
+$album = get_entity($album_guid);
+
+// panic if we can't get it
+if (!$album) {
+ forward();
+}
+
+// container should always be set, but just in case
+$owner = $album->getContainerEntity();
+elgg_set_page_owner_guid($owner->getGUID());
+
+$title = elgg_echo('tidypics:sort', array($album->getTitle()));
+
+// set up breadcrumbs
+elgg_push_breadcrumb(elgg_echo('photos'), 'photos/all');
+if (elgg_instanceof($owner, 'group')) {
+ elgg_push_breadcrumb($owner->name, "photos/group/$owner->guid/all");
+} else {
+ elgg_push_breadcrumb($owner->name, "photos/owner/$owner->username");
+}
+elgg_push_breadcrumb($album->getTitle(), $album->getURL());
+elgg_push_breadcrumb(elgg_echo('album:sort'));
+
+elgg_register_menu_item('title', array(
+ 'name' => 'upload',
+ 'href' => 'photos/upload/' . $album->getGUID(),
+ 'text' => elgg_echo('images:upload'),
+ 'link_class' => 'elgg-button elgg-button-action',
+));
+
+if ($album->getSize()) {
+ $content = elgg_view_form('photos/album/sort', array(), array('album' => $album));
+} else {
+ $content = elgg_echo('tidypics:sort:no_images');
+}
+
+$body = elgg_view_layout('content', array(
+ 'filter' => false,
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => elgg_view('tidypics/sidebar', array('page' => 'album')),
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/lightpics/pages/photos/album/view.php b/mod/lightpics/pages/photos/album/view.php
new file mode 100644
index 000000000..6e111ab98
--- /dev/null
+++ b/mod/lightpics/pages/photos/album/view.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * This displays the photos that belong to an album
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+group_gatekeeper();
+
+// get the album entity
+$album_guid = (int) get_input('guid');
+$album = get_entity($album_guid);
+if (!$album) {
+ register_error(elgg_echo('noaccess'));
+ $_SESSION['last_forward_from'] = current_page_url();
+ forward('');
+}
+
+elgg_set_page_owner_guid($album->getContainerGUID());
+$owner = elgg_get_page_owner_entity();
+
+$title = elgg_echo($album->getTitle());
+
+// set up breadcrumbs
+elgg_push_breadcrumb(elgg_echo('photos'), 'photos/all');
+if (elgg_instanceof($owner, 'group')) {
+ elgg_push_breadcrumb($owner->name, "photos/group/$owner->guid/all");
+} else {
+ elgg_push_breadcrumb($owner->name, "photos/owner/$owner->username");
+}
+elgg_push_breadcrumb($album->getTitle());
+
+$content = elgg_view_entity($album, array('full_view' => true));
+
+if ($album->getContainerEntity()->canWriteToContainer()) {
+ elgg_register_menu_item('title', array(
+ 'name' => 'upload',
+ 'href' => 'photos/upload/' . $album->getGUID(),
+ 'text' => elgg_echo('images:upload'),
+ 'link_class' => 'elgg-button elgg-button-action',
+ ));
+}
+
+// only show sort button if there are images
+if ($album->canEdit() && $album->getSize() > 0) {
+ elgg_register_menu_item('title', array(
+ 'name' => 'sort',
+ 'href' => "photos/sort/" . $album->getGUID(),
+ 'text' => elgg_echo('album:sort'),
+ 'link_class' => 'elgg-button elgg-button-action',
+ 'priority' => 200,
+ ));
+}
+
+$body = elgg_view_layout('content', array(
+ 'filter' => false,
+ 'content' => $content,
+ 'title' => $album->getTitle(),
+ 'sidebar' => elgg_view('tidypics/sidebar', array('page' => 'album')),
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/lightpics/pages/photos/all.php b/mod/lightpics/pages/photos/all.php
new file mode 100644
index 000000000..aef7f11c6
--- /dev/null
+++ b/mod/lightpics/pages/photos/all.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * View all albums on the site
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+elgg_push_breadcrumb(elgg_echo('photos'));
+
+$num_albums = 16;
+
+$offset = (int)get_input('offset', 0);
+$content = elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'album',
+ 'limit' => $num_albums,
+ 'full_view' => false,
+ 'list_type' => 'gallery',
+ 'list_type_toggle' => false,
+ 'gallery_class' => 'tidypics-gallery',
+));
+if (!$content) {
+ $content = elgg_echo('tidypics:none');
+}
+
+$title = elgg_echo('album:all');
+
+elgg_register_title_button('photos');
+
+$body = elgg_view_layout('content', array(
+ 'filter_context' => 'all',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => elgg_view('tidypics/sidebar', array('page' => 'all')),
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/lightpics/pages/photos/batch/edit.php b/mod/lightpics/pages/photos/batch/edit.php
new file mode 100644
index 000000000..ca9a55b18
--- /dev/null
+++ b/mod/lightpics/pages/photos/batch/edit.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Edit the image information for a batch of images
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+gatekeeper();
+
+$guid = (int) get_input('guid');
+
+if (!$batch = get_entity($guid)) {
+ // @todo either deleted or do not have access
+ forward('photos/all');
+}
+
+if (!$batch->canEdit()) {
+ // @todo cannot change it
+ forward('photos/all');
+}
+
+$album = $batch->getContainerEntity();
+
+elgg_set_page_owner_guid($batch->getContainerEntity()->getContainerGUID());
+$owner = elgg_get_page_owner_entity();
+
+$title = elgg_echo('tidypics:editprops');
+
+elgg_push_breadcrumb(elgg_echo('photos'), "photos/all");
+elgg_push_breadcrumb($owner->name, "photos/owner/$owner->username");
+elgg_push_breadcrumb($album->getTitle(), $album->getURL());
+elgg_push_breadcrumb($title);
+
+$content = elgg_view_form('photos/batch/edit', array(), array('batch' => $batch));
+
+$body = elgg_view_layout('content', array(
+ 'filter' => false,
+ 'content' => $content,
+ 'title' => elgg_echo('tidypics:editprops'),
+ 'sidebar' => elgg_view('tidypics/sidebar', array('page' => 'album')),
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/lightpics/pages/photos/friends.php b/mod/lightpics/pages/photos/friends.php
new file mode 100644
index 000000000..e6ac49cc6
--- /dev/null
+++ b/mod/lightpics/pages/photos/friends.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * List all the albums of someone's friends
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$owner = elgg_get_page_owner_entity();
+
+elgg_push_breadcrumb(elgg_echo('photos'), "photos/all");
+elgg_push_breadcrumb($owner->name, "photos/friends/$owner->username");
+elgg_push_breadcrumb(elgg_echo('friends'));
+
+$title = elgg_echo('album:friends');
+
+
+$num_albums = 16;
+
+set_input('list_type', 'gallery');
+$content = list_user_friends_objects($owner->guid, 'album', $num_albums, false);
+if (!$content) {
+ $content = elgg_echo('tidypics:none');
+}
+
+elgg_register_title_button();
+
+$body = elgg_view_layout('content', array(
+ 'filter_context' => 'friends',
+ 'content' => $content,
+ 'title' => $title,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/lightpics/pages/photos/image/download.php b/mod/lightpics/pages/photos/image/download.php
new file mode 100644
index 000000000..ef47b7638
--- /dev/null
+++ b/mod/lightpics/pages/photos/image/download.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Download a photo
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$guid = (int) get_input('guid');
+$image = get_entity($guid);
+
+$disposition = get_input('disposition', 'attachment');
+
+if ($image) {
+ $filename = $image->originalfilename;
+ $mime = $image->mimetype;
+
+ header("Content-Type: $mime");
+ header("Content-Disposition: $disposition; filename=\"$filename\"");
+
+ $contents = $image->grabFile();
+
+ if (empty($contents)) {
+ echo file_get_contents(dirname(dirname(__FILE__)) . "/graphics/image_error_large.png" );
+ } else {
+
+ // expires every 60 days
+ $expires = 60 * 60*60*24;
+
+ header("Content-Length: " . strlen($contents));
+ header("Cache-Control: public", true);
+ header("Pragma: public", true);
+ header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT', true);
+
+ echo $contents;
+ }
+
+ exit;
+} else {
+ register_error(elgg_echo("image:downloadfailed"));
+}
diff --git a/mod/lightpics/pages/photos/image/edit.php b/mod/lightpics/pages/photos/image/edit.php
new file mode 100644
index 000000000..76c1381c9
--- /dev/null
+++ b/mod/lightpics/pages/photos/image/edit.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Edit an image
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$guid = (int) get_input('guid');
+
+if (!$entity = get_entity($guid)) {
+ // @todo either deleted or do not have access
+ forward('photos/all');
+}
+
+if (!$entity->canEdit()) {
+ // @todo cannot change it
+ forward($entity->getContainerEntity()->getURL());
+}
+
+$album = $entity->getContainerEntity();
+if (!$album) {
+
+}
+
+elgg_set_page_owner_guid($album->getContainerGUID());
+$owner = elgg_get_page_owner_entity();
+
+gatekeeper();
+group_gatekeeper();
+
+$title = elgg_echo('image:edit');
+
+// set up breadcrumbs
+elgg_push_breadcrumb(elgg_echo('photos'), "photos/all");
+if (elgg_instanceof($owner, 'user')) {
+ elgg_push_breadcrumb($owner->name, "photos/owner/$owner->username");
+} else {
+ elgg_push_breadcrumb($owner->name, "photos/group/$owner->guid/all");
+}
+elgg_push_breadcrumb($album->getTitle(), $album->getURL());
+elgg_push_breadcrumb($entity->getTitle(), $entity->getURL());
+elgg_push_breadcrumb($title);
+
+$vars = tidypics_prepare_form_vars($entity);
+$content = elgg_view_form('photos/image/save', array('method' => 'post'), $vars);
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/lightpics/pages/photos/image/thumbnail.php b/mod/lightpics/pages/photos/image/thumbnail.php
new file mode 100644
index 000000000..28fabf7aa
--- /dev/null
+++ b/mod/lightpics/pages/photos/image/thumbnail.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Image thumbnail view
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$guid = (int) get_input('guid');
+$size = get_input('size');
+$image = get_entity($guid);
+if (!$image) {
+ // @todo
+}
+
+if ($size == 'master') {
+ $contents = $image->getImage();
+} else {
+ $contents = $image->getThumbnail($size);
+}
+if (!$contents) {
+ forward("mod/lightpics/graphics/image_error_$size");
+}
+
+// expires every 14 days
+$expires = 14 * 60*60*24;
+
+// overwrite header caused by php session code so images can be cached
+$mime = $image->getMimeType();
+header("Content-Type: $mime");
+header("Content-Length: " . strlen($contents));
+header("Cache-Control: public", true);
+header("Pragma: public", true);
+header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT', true);
+
+// Return the thumbnail and exit
+echo $contents;
+exit;
diff --git a/mod/lightpics/pages/photos/image/upload.php b/mod/lightpics/pages/photos/image/upload.php
new file mode 100644
index 000000000..c8e57038c
--- /dev/null
+++ b/mod/lightpics/pages/photos/image/upload.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Upload images
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+gatekeeper();
+
+$album_guid = (int) get_input('guid');
+if (!$album_guid) {
+ // @todo
+ forward();
+}
+
+$album = get_entity($album_guid);
+if (!$album) {
+ // @todo
+ // throw warning and forward to previous page
+ forward(REFERER);
+}
+
+if (!$album->getContainerEntity()->canWriteToContainer()) {
+ // @todo have to be able to edit album to upload photos
+ forward(REFERER);
+}
+
+// set page owner based on container (user or group)
+elgg_set_page_owner_guid($album->getContainerGUID());
+$owner = elgg_get_page_owner_entity();
+
+$title = elgg_echo('album:addpix');
+
+// set up breadcrumbs
+elgg_push_breadcrumb(elgg_echo('photos'), "photos/all");
+elgg_push_breadcrumb($owner->name, "photos/owner/$owner->username");
+elgg_push_breadcrumb($album->getTitle(), $album->getURL());
+elgg_push_breadcrumb(elgg_echo('album:addpix'));
+
+// load javascript dependences
+elgg_load_js('jquery-tmpl');
+elgg_load_js('jquery-load-image');
+elgg_load_js('jquery-canvas-to-blob');
+elgg_load_js('jquery-fileupload');
+elgg_load_js('jquery-fileupload-ui');
+elgg_load_js('tidypics:upload');
+
+$form_vars = array(
+ 'id' => 'fileupload',
+ 'action' => 'action/photos/image/upload',
+ 'enctype' => 'multipart/form-data',
+);
+
+$content = elgg_view_form('photos/basic_upload', $form_vars, array('entity' => $album));
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ 'sidebar' => elgg_view('photos/sidebar', array('page' => 'upload')),
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/lightpics/pages/photos/image/view.php b/mod/lightpics/pages/photos/image/view.php
new file mode 100644
index 000000000..e30bed70a
--- /dev/null
+++ b/mod/lightpics/pages/photos/image/view.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * View an image
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+group_gatekeeper();
+
+// get the photo entity
+$photo_guid = (int) get_input('guid');
+$photo = get_entity($photo_guid);
+if (!$photo) {
+ register_error(elgg_echo('noaccess'));
+ $_SESSION['last_forward_from'] = current_page_url();
+ forward('');
+}
+
+$photo->addView();
+
+// set page owner based on owner of photo album
+$album = $photo->getContainerEntity();
+if ($album) {
+ elgg_set_page_owner_guid($album->getContainerGUID());
+}
+$owner = elgg_get_page_owner_entity();
+
+// set up breadcrumbs
+elgg_push_breadcrumb(elgg_echo('photos'), 'photos/all');
+if (elgg_instanceof($owner, 'group')) {
+ elgg_push_breadcrumb($owner->name, "photos/group/$owner->guid/all");
+} else {
+ elgg_push_breadcrumb($owner->name, "photos/owner/$owner->username");
+}
+elgg_push_breadcrumb($album->getTitle(), $album->getURL());
+elgg_push_breadcrumb($photo->getTitle());
+
+if (elgg_get_plugin_setting('download_link', 'tidypics')) {
+ // add download button to title menu
+ elgg_register_menu_item('title', array(
+ 'name' => 'download',
+ 'href' => "photos/download/$photo_guid",
+ 'text' => elgg_echo('image:download'),
+ 'link_class' => 'elgg-button elgg-button-action',
+ ));
+}
+
+$content = elgg_view_entity($photo, array('full_view' => true));
+
+$body = elgg_view_layout('content', array(
+ 'filter' => false,
+ 'content' => $content,
+ 'title' => $photo->getTitle(),
+ 'sidebar' => elgg_view('photos/sidebar', array(
+ 'page' => 'view',
+ 'image' => $photo,
+ )),
+));
+
+echo elgg_view_page($photo->getTitle(), $body);
diff --git a/mod/lightpics/pages/photos/owner.php b/mod/lightpics/pages/photos/owner.php
new file mode 100644
index 000000000..506cb569b
--- /dev/null
+++ b/mod/lightpics/pages/photos/owner.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Show all the albums that belong to a user or group
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+group_gatekeeper();
+
+$owner = elgg_get_page_owner_entity();
+
+$title = elgg_echo('album:user', array($owner->name));
+
+// set up breadcrumbs
+elgg_push_breadcrumb(elgg_echo('photos'), 'photos/all');
+elgg_push_breadcrumb($owner->name);
+
+
+$num_albums = 16;
+
+$content = elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'album',
+ 'container_guid' => $owner->getGUID(),
+ 'limit' => $num_albums,
+ 'full_view' => false,
+ 'list_type' => 'gallery',
+ 'list_type_toggle' => false,
+ 'gallery_class' => 'tidypics-gallery',
+));
+if (!$content) {
+ $content = elgg_echo('tidypics:none');
+}
+
+elgg_register_title_button();
+
+$params = array(
+ 'filter_context' => 'mine',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => elgg_view('tidypics/sidebar', array('page' => 'owner')),
+);
+
+// don't show filter if out of filter context
+if ($owner instanceof ElggGroup) {
+ $params['filter'] = false;
+}
+
+if ($owner->getGUID() != elgg_get_logged_in_user_guid()) {
+ $params['filter_context'] = '';
+}
+
+$body = elgg_view_layout('content', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/mod/lightpics/start.php b/mod/lightpics/start.php
new file mode 100644
index 000000000..a2520e499
--- /dev/null
+++ b/mod/lightpics/start.php
@@ -0,0 +1,421 @@
+<?php
+/**
+ * Photo Gallery plugin
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+elgg_register_event_handler('init', 'system', 'tidypics_init');
+
+/**
+ * Tidypics plugin initialization
+ */
+function tidypics_init() {
+ // Register libraries
+ $base_dir = elgg_get_plugins_path() . 'lightpics/lib';
+ elgg_register_library('tidypics:core', "$base_dir/tidypics.php");
+ elgg_register_library('tidypics:upload', "$base_dir/upload.php");
+ elgg_register_library('tidypics:resize', "$base_dir/resize.php");
+ elgg_register_library('tidypics:exif', "$base_dir/exif.php");
+ elgg_load_library('tidypics:core');
+
+ // Set up site menu
+ elgg_register_menu_item('site', array(
+ 'name' => 'photos',
+ 'href' => 'photos/all',
+ 'text' => elgg_echo('photos'),
+ ));
+
+ // Register a page handler so we can have nice URLs
+ elgg_register_page_handler('photos', 'tidypics_page_handler');
+
+ // Extend CSS
+ elgg_extend_view('css/elgg', 'photos/css');
+ elgg_extend_view('css/admin', 'photos/css');
+
+ // Register the JavaScript lib
+ $js = elgg_get_simplecache_url('js', 'photos/tidypics');
+ elgg_register_simplecache_view('js/photos/tidypics');
+ elgg_register_js('tidypics', $js, 'footer');
+ $js = elgg_get_simplecache_url('js', 'photos/upload');
+ elgg_register_simplecache_view('js/photos/upload');
+ elgg_register_js('tidypics:upload', $js, 'footer');
+
+ $js_base = 'mod/lightpics/vendors/jquery-file-upload/js';
+
+ elgg_register_js('jquery-tmpl', "$js_base/vendor/tmpl.min.js", 'footer');
+ elgg_register_js('jquery-load-image', "$js_base/vendor/load-image.min.js", 'footer');
+ elgg_register_js('jquery-canvas-to-blob', "$js_base/vendor/canvas-to-blob.min.js", 'footer');
+
+ elgg_register_js('jquery-fileupload', "$js_base/jquery.fileupload.js", 'footer');
+ elgg_register_js('jquery-fileupload-ui', "$js_base/jquery.fileupload-ui.js", 'footer');
+
+ // Add photos link to owner block/hover menus
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'tidypics_owner_block_menu');
+
+ // Add admin menu item
+ elgg_register_admin_menu_item('configure', 'photos', 'settings');
+
+ // Register for search
+ elgg_register_entity_type('object', 'image');
+ elgg_register_entity_type('object', 'album');
+
+ // Register for the entity menu
+ elgg_register_plugin_hook_handler('register', 'menu:entity', 'tidypics_entity_menu_setup');
+
+ // Register group option
+ add_group_tool_option('photos', elgg_echo('tidypics:enablephotos'), true);
+ elgg_extend_view('groups/tool_latest', 'photos/group_module');
+
+ // Register widgets
+ elgg_register_widget_type('album_view', elgg_echo("tidypics:widget:albums"), elgg_echo("tidypics:widget:album_descr"), 'profile');
+ elgg_register_widget_type('latest_photos', elgg_echo("tidypics:widget:latest"), elgg_echo("tidypics:widget:latest_descr"), 'profile');
+
+ // RSS extensions for embedded media
+ elgg_extend_view('extensions/xmlns', 'extensions/photos/xmlns');
+
+ // allow group members add photos to group albums
+ elgg_register_plugin_hook_handler('container_permissions_check', 'object', 'tidypics_group_permission_override');
+ elgg_register_plugin_hook_handler('permissions_check:metadata', 'object', 'tidypics_group_permission_override');
+
+ // notifications
+ register_notification_object('object', 'album', elgg_echo('tidypics:newalbum_subject'));
+ elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'tidypics_notify_message');
+
+ // Register actions
+ $base_dir = elgg_get_plugins_path() . 'lightpics/actions/photos';
+ elgg_register_action("photos/delete", "$base_dir/delete.php");
+
+ elgg_register_action("photos/album/save", "$base_dir/album/save.php");
+ elgg_register_action("photos/album/sort", "$base_dir/album/sort.php");
+ elgg_register_action("photos/album/set_cover", "$base_dir/album/set_cover.php");
+
+ elgg_register_action("photos/image/upload", "$base_dir/image/upload.php");
+ elgg_register_action("photos/image/save", "$base_dir/image/save.php");
+ elgg_register_action("photos/image/ajax_upload", "$base_dir/image/ajax_upload.php", 'logged_in');
+ elgg_register_action("photos/image/ajax_upload_complete", "$base_dir/image/ajax_upload_complete.php", 'logged_in');
+
+ elgg_register_action("photos/batch/edit", "$base_dir/batch/edit.php");
+
+ elgg_register_action("photos/admin/settings", "$base_dir/admin/settings.php", 'admin');
+ elgg_register_action("photos/admin/create_thumbnails", "$base_dir/admin/create_thumbnails.php", 'admin');
+ elgg_register_action("photos/admin/upgrade", "$base_dir/admin/upgrade.php", 'admin');
+}
+
+/**
+ * Tidypics page handler
+ *
+ * @param array $page Array of url segments
+ * @return bool
+ */
+function tidypics_page_handler($page) {
+
+ if (!isset($page[0])) {
+ return false;
+ }
+
+ elgg_load_js('lightbox');
+ elgg_load_css('lightbox');
+ elgg_load_js('tidypics');
+
+ $base = elgg_get_plugins_path() . 'lightpics/pages/photos';
+
+ // sometimes owner comes as group:181872 which is not automatically handled
+ if (isset($page[1]) && strpos($page[1], 'group:') === 0) {
+ $parts = explode(':', $page[1]);
+ $owner_guid = $parts[1];
+ if ($owner_guid) {
+ elgg_set_page_owner_guid($owner_guid);
+ }
+ }
+ switch ($page[0]) {
+ case "all": // all site albums
+ case "world":
+ require "$base/all.php";
+ break;
+
+ case "owned": // albums owned by container entity
+ case "owner":
+ if (!$owner) {
+ forward();
+ }
+ require "$base/owner.php";
+ break;
+
+ case "friends": // albums of friends
+ require "$base/friends.php";
+ break;
+
+ case "group": // albums of a group
+ require "$base/owner.php";
+ break;
+
+ case "album": // view an album individually
+ set_input('guid', $page[1]);
+ require "$base/album/view.php";
+ break;
+
+ case "new": // create new album
+ case "add":
+ set_input('guid', $page[1]);
+ require "$base/album/add.php";
+ break;
+
+ case "edit": //edit image or album
+ set_input('guid', $page[1]);
+ $entity = get_entity($page[1]);
+ switch ($entity->getSubtype()) {
+ case 'album':
+ require "$base/album/edit.php";
+ break;
+ case 'image':
+ require "$base/image/edit.php";
+ break;
+ case 'tidypics_batch':
+ require "$base/batch/edit.php";
+ break;
+ default:
+ return false;
+ }
+ break;
+
+ case "sort": // sort a photo album
+ set_input('guid', $page[1]);
+ require "$base/album/sort.php";
+ break;
+
+ case "image": //view an image
+ case "view":
+ set_input('guid', $page[1]);
+ require "$base/image/view.php";
+ break;
+
+ case "thumbnail": // tidypics thumbnail
+ set_input('guid', $page[1]);
+ set_input('size', elgg_extract(2, $page, 'small'));
+ require "$base/image/thumbnail.php";
+ break;
+
+ case "upload": // upload images to album
+ set_input('guid', $page[1]);
+
+ if (elgg_get_plugin_setting('uploader', 'tidypics')) {
+ $default_uploader = 'ajax';
+ } else {
+ $default_uploader = 'basic';
+ }
+
+ set_input('uploader', elgg_extract(2, $page, $default_uploader));
+ require "$base/image/upload.php";
+ break;
+
+ case "batch": //update titles and descriptions
+ if (isset($page[1])) {
+ set_input('batch', $page[1]);
+ }
+ include($CONFIG->pluginspath . "lightpics/pages/edit_multiple.php");
+ break;
+
+ case "download": // download an image
+ set_input('guid', $page[1]);
+ set_input('disposition', elgg_extract(2, $page, 'attachment'));
+ include "$base/image/download.php";
+ break;
+
+ case "mostviewed": // images with the most views
+ if (isset($page[1])) {
+ set_input('username', $page[1]);
+ }
+ include($CONFIG->pluginspath . "lightpics/pages/lists/mostviewedimages.php");
+ break;
+
+ case "mostrecent": // images uploaded most recently
+ if (isset($page[1])) {
+ set_input('username', $page[1]);
+ }
+ include($CONFIG->pluginspath . "lightpics/pages/lists/mostrecentimages.php");
+ break;
+
+ case "recentlyviewed": // images most recently viewed
+ include($CONFIG->pluginspath . "lightpics/pages/lists/recentlyviewed.php");
+ break;
+
+ case "recentlycommented": // images with the most recent comments
+ include($CONFIG->pluginspath . "lightpics/pages/lists/recentlycommented.php");
+ break;
+
+ case "highestrated": // images with the highest average rating
+ include($CONFIG->pluginspath . "lightpics/pages/lists/highestrated.php");
+ break;
+
+ case "admin":
+ include ($CONFIG->pluginspath . "lightpics/pages/admin.php");
+ break;
+
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Add a menu item to an ownerblock
+ */
+function tidypics_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'user')) {
+ $url = "photos/owner/{$params['entity']->username}";
+ $item = new ElggMenuItem('photos', elgg_echo('photos'), $url);
+ $return[] = $item;
+ } else {
+ if ($params['entity']->photos_enable != "no") {
+ $url = "photos/group/{$params['entity']->guid}/all";
+ $item = new ElggMenuItem('photos', elgg_echo('photos:group'), $url);
+ $return[] = $item;
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Add Tidypics links/info to entity menu
+ */
+function tidypics_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 != 'photos') {
+ return $return;
+ }
+
+ if (elgg_instanceof($entity, 'object', 'image')) {
+ $album = $entity->getContainerEntity();
+ $cover_guid = $album->getCoverImageGuid();
+ if ($cover_guid != $entity->getGUID() && $album->canEdit()) {
+ $url = 'action/photos/album/set_cover'
+ . '?image_guid=' . $entity->getGUID()
+ . '&album_guid=' . $album->getGUID();
+
+ $params = array(
+ 'href' => $url,
+ 'text' => elgg_echo('album:cover_link'),
+ 'is_action' => true,
+ 'is_trusted' => true,
+ 'confirm' => elgg_echo('album:cover')
+ );
+ $text = elgg_view('output/confirmlink', $params);
+
+ $options = array(
+ 'name' => 'set_cover',
+ 'text' => $text,
+ 'priority' => 80,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+
+ if (elgg_get_plugin_setting('view_count', 'tidypics')) {
+ $view_info = $entity->getViewInfo();
+ $text = elgg_echo('tidypics:views', array((int)$view_info['total']));
+ $options = array(
+ 'name' => 'views',
+ 'text' => "<span>$text</span>",
+ 'href' => false,
+ 'priority' => 90,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+ }
+ return $return;
+}
+
+/**
+ * Override permissions for group albums
+ *
+ * 1. To write to a container (album) you must be able to write to the owner of the container (odd)
+ * 2. We also need to change metadata on the album
+ *
+ * @param string $hook
+ * @param string $type
+ * @param bool $result
+ * @param array $params
+ * @return mixed
+ */
+function tidypics_group_permission_override($hook, $type, $result, $params) {
+ if (get_input('action') == 'photos/image/upload') {
+ if (isset($params['container'])) {
+ $album = $params['container'];
+ } else {
+ $album = $params['entity'];
+ }
+
+ if (elgg_instanceof($album, 'object', 'album')) {
+ return $album->getContainerEntity()->canWriteToContainer();
+ }
+ }
+}
+
+
+/**
+ * Create the body of the notification message
+ *
+ * Does not run if a new album without photos
+ *
+ * @param string $hook
+ * @param string $type
+ * @param bool $result
+ * @param array $params
+ * @return mixed
+ */
+function tidypics_notify_message($hook, $type, $result, $params) {
+ $entity = $params['entity'];
+ $to_entity = $params['to_entity'];
+ $method = $params['method'];
+
+ if (elgg_instanceof($entity, 'object', 'album')) {
+ if ($entity->new_album) {
+ // stops notification from being sent
+ return false;
+ }
+
+ if ($entity->first_upload) {
+ $descr = $entity->description;
+ $title = $entity->getTitle();
+ $owner = $entity->getOwnerEntity();
+ return elgg_echo('tidypics:newalbum', array($owner->name))
+ . ': ' . $title . "\n\n" . $descr . "\n\n" . $entity->getURL();
+ } else {
+ if ($entity->shouldNotify()) {
+ $descr = $entity->description;
+ $title = $entity->getTitle();
+ $owner = $entity->getOwnerEntity();
+
+ return elgg_echo('tidypics:updatealbum', array($owner->name, $title)) . ': ' . $entity->getURL();
+ }
+ }
+ }
+
+ return null;
+}
+
+/**
+ * Sets up submenus for tidypics most viewed pages
+ */
+function tidypics_mostviewed_submenus() {
+
+ global $CONFIG;
+
+ add_submenu_item(elgg_echo('tidypics:mostvieweddashboard'), $CONFIG->url . "mod/tidypics/mostvieweddashboard.php");
+ add_submenu_item(elgg_echo('tidypics:mostviewedthisyear'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimagesthisyear.php");
+ add_submenu_item(elgg_echo('tidypics:mostviewedthismonth'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimagesthismonth.php");
+ add_submenu_item(elgg_echo('tidypics:mostviewedlastmonth'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimageslastmonth.php");
+ add_submenu_item(elgg_echo('tidypics:mostviewedtoday'), $CONFIG->url . "mod/tidypics/pages/lists/mostviewedimagestoday.php");
+ add_submenu_item(elgg_echo('tidypics:mostcommented'), $CONFIG->url . "mod/tidypics/pages/lists/mostcommentedimages.php");
+ add_submenu_item(elgg_echo('tidypics:mostcommentedthismonth'), $CONFIG->url . "mod/tidypics/pages/lists/mostcommentedimagesthismonth.php");
+ add_submenu_item(elgg_echo('tidypics:mostcommentedtoday'), $CONFIG->url . "mod/tidypics/pages/lists/mostcommentedimagestoday.php");
+ add_submenu_item(elgg_echo('tidypics:recentlycommented'), $CONFIG->wwwroot . 'pg/photos/recentlycommented/');
+}
diff --git a/mod/lightpics/upgrades/2009082901.php b/mod/lightpics/upgrades/2009082901.php
new file mode 100644
index 000000000..dfbdf79f4
--- /dev/null
+++ b/mod/lightpics/upgrades/2009082901.php
@@ -0,0 +1,29 @@
+<?php
+
+/********************************************
+ *
+ * Upgrade from Tidypics 1.5 to 1.6
+ *
+ *********************************************/
+
+global $CONFIG;
+
+// add image class
+$id = get_subtype_id("object", "image");
+if ($id != 0) {
+ $table = $CONFIG->dbprefix . 'entity_subtypes';
+ $result = update_data("UPDATE {$table} set class='TidypicsImage' where id={$id}");
+ if (!$result) {
+ register_error('unable to update tidypics image class');
+ }
+}
+
+// add album class
+$id = get_subtype_id("object", "album");
+if ($id != 0) {
+ $table = $CONFIG->dbprefix . 'entity_subtypes';
+ $result = update_data("UPDATE {$table} set class='TidypicsAlbum' where id={$id}");
+ if (!$result) {
+ register_error('unable to update tidypics album class');
+ }
+}
diff --git a/mod/lightpics/upgrades/2010073101.php b/mod/lightpics/upgrades/2010073101.php
new file mode 100644
index 000000000..587490500
--- /dev/null
+++ b/mod/lightpics/upgrades/2010073101.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Populate image lists for current photo albums
+ */
+
+$album_subtype_id = get_subtype_id('object', 'album');
+
+global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG;
+$album_guids = mysql_query("SELECT guid FROM {$CONFIG->dbprefix}entities WHERE subtype = $album_subtype_id");
+while ($guid_obj = mysql_fetch_object($album_guids)) {
+ $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+
+ $album = get_entity($guid_obj->guid);
+ $images = elgg_get_entities(array(
+ "type" => "object",
+ "subtype" => "image",
+ "container_guid" => $album->guid,
+ "limit" => ELGG_ENTITIES_NO_VALUE,
+ ));
+ $image_list = array();
+ foreach ($images as $image) {
+ $image_list[] = $image->guid;
+ }
+
+ $album->prependImageList($image_list);
+}
+
diff --git a/mod/lightpics/upgrades/2010102801.php b/mod/lightpics/upgrades/2010102801.php
new file mode 100644
index 000000000..5bd5f78b4
--- /dev/null
+++ b/mod/lightpics/upgrades/2010102801.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Convert river entries for tags to be tagger-tagee-annotation from
+ * image-tagee
+ */
+
+$album_subtype_id = get_subtype_id('object', 'album');
+
+global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG;
+$query = "SELECT * FROM {$CONFIG->dbprefix}river WHERE view = 'river/object/image/tag'";
+$river_items = mysql_query($query);
+while ($item = mysql_fetch_object($river_items)) {
+ $DB_QUERY_CACHE = $DB_PROFILE = array();
+
+ // find the annotation for this river item
+ $annotations = get_annotations($item->subject_guid, '', '', 'phototag', '', 0, 999);
+ foreach ($annotations as $annotation) {
+ $tag = unserialize($annotation->value);
+ if ($tag->type === 'user') {
+ if ($tag->value == $item->object_guid) {
+ $update = "UPDATE {$CONFIG->dbprefix}river SET subject_guid = $annotation->owner_guid, annotation_id = $annotation->id where id = $item->id";
+ mysql_query($update);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/mod/lightpics/upgrades/2012020901.php b/mod/lightpics/upgrades/2012020901.php
new file mode 100644
index 000000000..793279b38
--- /dev/null
+++ b/mod/lightpics/upgrades/2012020901.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Adds last notified metadata and sets the notify interval
+ */
+
+elgg_set_plugin_setting('notify_interval', 60 * 60 * 24, 'tidypics');
+
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'album',
+ 'limit' => 0
+);
+
+$prefix = elgg_get_config('dbprefix');
+$batch = new ElggBatch('elgg_get_entities', $options);
+
+foreach ($batch as $album) {
+ // grab earliest picture and use that as the notification time
+ // in old version of tidypics notifications went out only when a new album was populated.
+ $q = "SELECT MIN(time_created) as ts FROM {$prefix}entities WHERE container_guid = $album->guid";
+ $row = get_data_row($q);
+
+ if ($row) {
+ $album->last_notified = $row->ts;
+ }
+}
diff --git a/mod/lightpics/vendors/jquery-file-upload/README.md b/mod/lightpics/vendors/jquery-file-upload/README.md
new file mode 100644
index 000000000..4bdca2d5c
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/README.md
@@ -0,0 +1,73 @@
+# jQuery File Upload Plugin
+
+## Demo
+[Demo File Upload](http://blueimp.github.com/jQuery-File-Upload/)
+
+## Setup instructions
+* [How to setup the plugin on your website](https://github.com/blueimp/jQuery-File-Upload/wiki/Setup)
+* [How to use only the basic plugin (minimal setup guide).](https://github.com/blueimp/jQuery-File-Upload/wiki/Basic-plugin)
+
+## Features
+* **Multiple file upload:**
+ Allows to select multiple files at once and upload them simultaneously.
+* **Drag & Drop support:**
+ Allows to upload files by dragging them from your desktop or filemanager and dropping them on your browser window.
+* **Upload progress bar:**
+ Shows a progress bar indicating the upload progress for individual files and for all uploads combined.
+* **Cancelable uploads:**
+ Individual file uploads can be canceled to stop the upload progress.
+* **Resumable uploads:**
+ Aborted uploads can be resumed with browsers supporting the Blob API.
+* **Chunked uploads:**
+ Large files can be uploaded in smaller chunks with browsers supporting the Blob API.
+* **Client-side image resizing:**
+ Images can be automatically resized on client-side with browsers supporting the required JS APIs.
+* **Preview images:**
+ A preview of image files can be displayed before uploading with browsers supporting the required JS APIs.
+* **No browser plugins (e.g. Adobe Flash) required:**
+ The implementation is based on open standards like HTML5 and JavaScript and requires no additional browser plugins.
+* **Graceful fallback for legacy browsers:**
+ Uploads files via XMLHttpRequests if supported and uses iframes as fallback for legacy browsers.
+* **HTML file upload form fallback:**
+ Shows a standard HTML file upload form if JavaScript is disabled.
+* **Cross-site file uploads:**
+ Supports uploading files to a different domain with Cross-site XMLHttpRequests.
+* **Multiple plugin instances:**
+ Allows to use multiple plugin instances on the same webpage.
+* **Customizable and extensible:**
+ Provides an API to set individual options and define callBack methods for various upload events.
+* **Multipart and file contents stream uploads:**
+ Files can be uploaded as standard "multipart/form-data" or file contents stream (HTTP PUT file upload).
+* **Compatible with any server-side application platform:**
+ Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.
+
+## Requirements
+* [jQuery](http://jquery.com/) v. 1.6+
+* [jQuery UI](http://jqueryui.com/) v. 1.8+
+* [jQuery Iframe Transport plugin](https://github.com/blueimp/jQuery-File-Upload/blob/master/jquery.iframe-transport.js) (included)
+* [JavaScript Templates engine](https://github.com/blueimp/JavaScript-Templates) v. 2.1.0+ (optional)
+* [JavaScript Load Image function](https://github.com/blueimp/JavaScript-Load-Image) v. 1.1.6+ (optional)
+* [JavaScript Canvas to Blob function](https://github.com/blueimp/JavaScript-Canvas-to-Blob) v. 2.0.0+ (optional)
+
+The jQuery Iframe Transport is required for [browsers without XHR file upload support](https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support).
+The UI version of the File Upload plugin also requires the JavaScript Templates engine as well as the JavaScript Load Image and JavaScript Canvas to Blob functions (for the image previews and resizing functionality). These dependencies are marked as optional, as the basic File Upload plugin can be used without them and the UI version of the plugin can be extended to override these dependencies with alternative solutions.
+
+The User Interface is built with [jQuery UI](http://jqueryui.com/). The demo also includes the [jQuery Image Gallery Plugin](https://github.com/blueimp/jQuery-Image-Gallery).
+
+The repository also includes the [jQuery XDomainRequest Transport plugin](https://github.com/blueimp/jQuery-File-Upload/blob/master/js/cors/jquery.xdr-transport.js), which enables Cross-domain AJAX requests (GET and POST only) in Microsoft Internet Explorer >= 8. However, the XDomainRequest object doesn't support file uploads and the plugin is only used by the [Demo](http://blueimp.github.com/jQuery-File-Upload/) for Cross-domain requests to delete uploaded files from the demo file upload service.
+
+[Cross-domain File Uploads](https://github.com/blueimp/jQuery-File-Upload/wiki/Cross-domain-uploads) using the [Iframe Transport plugin](https://github.com/blueimp/jQuery-File-Upload/blob/master/js/jquery.iframe-transport.js) require a redirect back to the origin server to retrieve the upload results. The [example implementation](https://github.com/blueimp/jQuery-File-Upload/blob/master/js/main.js) makes use of [result.html](https://github.com/blueimp/jQuery-File-Upload/blob/master/cors/result.html) as a static redirect page for the origin server.
+
+## Browser Support (tested versions)
+* Google Chrome - 7.0+
+* Apple Safari - 4.0+
+* Mozilla Firefox - 3.0+
+* Opera - 10.0+
+* Microsoft Internet Explorer 6.0+
+
+Drag & Drop is only supported on Google Chrome, Firefox 4.0+, Safari 5.0+ and Opera 12.0+.
+Microsoft Internet Explorer has no support for multiple file selection or upload progress.
+[Extended browser support information](https://github.com/blueimp/jQuery-File-Upload/wiki/Browser-support).
+
+## License
+Released under the [MIT license](http://www.opensource.org/licenses/MIT).
diff --git a/mod/lightpics/vendors/jquery-file-upload/cors/postmessage.html b/mod/lightpics/vendors/jquery-file-upload/cors/postmessage.html
new file mode 100644
index 000000000..4a93bb867
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/cors/postmessage.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery File Upload Plugin postMessage API 1.1.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>jQuery File Upload Plugin postMessage API</title>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
+</head>
+<body>
+<script>
+/*jslint unparam: true, regexp: true */
+/*global $, Blob, FormData, location */
+'use strict';
+var origin = /^http:\/\/example.org/,
+ target = new RegExp('^(http(s)?:)?\\/\\/' + location.host + '\\/');
+$(window).on('message', function (e) {
+ e = e.originalEvent;
+ var s = e.data,
+ xhr = $.ajaxSettings.xhr(),
+ f;
+ if (!origin.test(e.origin)) {
+ throw new Error('Origin "' + e.origin + '" does not match ' + origin);
+ }
+ if (!target.test(e.data.url)) {
+ throw new Error('Target "' + e.data.url + '" does not match ' + target);
+ }
+ $(xhr.upload).on('progress', function (ev) {
+ ev = ev.originalEvent;
+ e.source.postMessage({
+ id: s.id,
+ type: ev.type,
+ timeStamp: ev.timeStamp,
+ lengthComputable: ev.lengthComputable,
+ loaded: ev.loaded,
+ total: ev.total
+ }, e.origin);
+ });
+ s.xhr = function () {
+ return xhr;
+ };
+ if (!(s.data instanceof Blob)) {
+ f = new FormData();
+ $.each(s.data, function (i, v) {
+ f.append(v.name, v.value);
+ });
+ s.data = f;
+ }
+ $.ajax(s).always(function (result, statusText, jqXHR) {
+ if (!jqXHR.done) {
+ jqXHR = result;
+ result = null;
+ }
+ e.source.postMessage({
+ id: s.id,
+ status: jqXHR.status,
+ statusText: statusText,
+ result: result,
+ headers: jqXHR.getAllResponseHeaders()
+ }, e.origin);
+ });
+});
+</script>
+</body>
+</html> \ No newline at end of file
diff --git a/mod/lightpics/vendors/jquery-file-upload/cors/result.html b/mod/lightpics/vendors/jquery-file-upload/cors/result.html
new file mode 100644
index 000000000..7c9802684
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/cors/result.html
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery Iframe Transport Plugin Redirect Page 2.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>jQuery Iframe Transport Plugin Redirect Page</title>
+</head>
+<body><script>document.body.innerHTML=decodeURIComponent(window.location.search.slice(1));</script></body>
+</html> \ No newline at end of file
diff --git a/mod/lightpics/vendors/jquery-file-upload/css/jquery.fileupload-ui.css b/mod/lightpics/vendors/jquery-file-upload/css/jquery.fileupload-ui.css
new file mode 100644
index 000000000..bb706ff06
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/css/jquery.fileupload-ui.css
@@ -0,0 +1,107 @@
+@charset 'UTF-8';
+/*
+ * jQuery File Upload UI Plugin CSS 6.3
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+.fileinput-button {
+ position: relative;
+ overflow: hidden;
+ float: left;
+ margin-right: 5px;
+}
+.fileinput-button input {
+ position: absolute;
+ top: 0;
+ right: 0;
+ margin: 0;
+ border: solid transparent;
+ border-width: 0 0 100px 200px;
+ opacity: 0;
+ filter: alpha(opacity=0);
+ -moz-transform: translate(-300px, 0) scale(4);
+ direction: ltr;
+ cursor: pointer;
+}
+.fileupload-buttonbar .ui-button,
+.fileupload-buttonbar .toggle {
+ margin-bottom: 5px;
+}
+.files .progress {
+ width: 200px;
+}
+.files .progress,
+.fileupload-buttonbar .progress {
+ height: 20px;
+}
+.files .ui-progressbar-value,
+.fileupload-buttonbar .ui-progressbar-value {
+ background: url(../img/progressbar.gif);
+}
+.fileupload-buttonbar .fade,
+.files .fade {
+ display: none;
+}
+.fileupload-loading {
+ position: absolute;
+ left: 50%;
+ width: 128px;
+ height: 128px;
+ background: url(../img/loading.gif) center no-repeat;
+ display: none;
+}
+.fileupload-processing .fileupload-loading {
+ display: block;
+}
+
+/* Fix for IE 6: */
+*html .fileinput-button {
+ margin-right: -2px;
+}
+*html .fileinput-button .ui-button-text {
+ line-height: 24px;
+}
+*html .fileupload-buttonbar .ui-button {
+ margin-left: 3px;
+}
+
+/* Fix for IE 7: */
+*+html .fileinput-button {
+ margin-right: 1px;
+}
+*+html .fileinput-button .ui-button-text {
+ line-height: 24px;
+}
+*+html .fileupload-buttonbar .ui-button {
+ margin-left: 3px;
+}
+
+@media (max-width: 480px) {
+ .files .preview * {
+ width: 40px;
+ }
+ .files .name * {
+ width: 80px;
+ display: inline-block;
+ word-wrap: break-word;
+ }
+ .files .progress {
+ width: 20px;
+ }
+ .files .delete {
+ width: 60px;
+ }
+}
+
+/* Fix for Webkit (Safari, Chrome) */
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ .fileinput-button {
+ margin-top: 2px;
+ }
+}
diff --git a/mod/lightpics/vendors/jquery-file-upload/css/style.css b/mod/lightpics/vendors/jquery-file-upload/css/style.css
new file mode 100644
index 000000000..6ed82e679
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/css/style.css
@@ -0,0 +1,92 @@
+@charset 'UTF-8';
+/*
+ * jQuery File Upload Plugin CSS Example 1.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2012, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ line-height: 18px;
+ width: 960px;
+ margin: 10px auto;
+}
+a {
+ color: #08C;
+ text-decoration: none;
+}
+a:hover,
+.active a {
+ color: #005580;
+ text-decoration: underline;
+}
+td {
+ padding: 5px;
+}
+img {
+ border: 0;
+}
+.nav-collapse,
+ul.nav,
+ul.nav li {
+ display: inline-block;
+ margin-right: 10px;
+}
+.navbar .brand {
+ font-size: 16px;
+}
+.row {
+ zoom: 1;
+}
+.row:before, .row:after {
+ display: table;
+ content: "";
+}
+.row:after {
+ clear: both;
+}
+.span5 {
+ width: 400px;
+ float: left;
+}
+.span7 {
+ width: 560px ;
+ float: left;
+}
+
+/* Fix for IE 6: */
+*html .nav-collapse,
+*html ul.nav,
+*html ul.nav li {
+ display: inline;
+}
+*html .navbar-fixed-top {
+ margin-bottom: 35px;
+}
+
+/* Fix for IE 7: */
+*+html .nav-collapse,
+*+html ul.nav,
+*+html ul.nav li {
+ display: inline;
+}
+*+html .navbar-fixed-top {
+ margin-bottom: 35px;
+}
+
+@media (max-width: 980px) {
+ body {
+ width: auto;
+ padding: 10px;
+ }
+ .span5,
+ .span7 {
+ width: auto;
+ }
+}
diff --git a/mod/lightpics/vendors/jquery-file-upload/img/loading.gif b/mod/lightpics/vendors/jquery-file-upload/img/loading.gif
new file mode 100644
index 000000000..90f28cbdb
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/img/loading.gif
Binary files differ
diff --git a/mod/lightpics/vendors/jquery-file-upload/img/progressbar.gif b/mod/lightpics/vendors/jquery-file-upload/img/progressbar.gif
new file mode 100644
index 000000000..fbcce6bc9
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/img/progressbar.gif
Binary files differ
diff --git a/mod/lightpics/vendors/jquery-file-upload/index.html b/mod/lightpics/vendors/jquery-file-upload/index.html
new file mode 100644
index 000000000..a57d6fa55
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/index.html
@@ -0,0 +1,234 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery File Upload Plugin Demo 6.9.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<!-- Force latest IE rendering engine or ChromeFrame if installed -->
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><![endif]-->
+<meta charset="utf-8">
+<title>jQuery File Upload Demo</title>
+<meta name="description" content="File Upload widget with multiple file selection, drag&amp;drop support, progress bar and preview images for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads.">
+<meta name="viewport" content="width=device-width">
+<!-- jQuery UI styles -->
+<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/themes/base/jquery-ui.css" id="theme">
+<!-- jQuery Image Gallery styles -->
+<link rel="stylesheet" href="http://blueimp.github.com/jQuery-Image-Gallery/css/jquery.image-gallery.min.css">
+<!-- CSS to style the file input field as button and adjust the jQuery UI progress bars -->
+<link rel="stylesheet" href="css/jquery.fileupload-ui.css">
+<!-- Generic page styles -->
+<link rel="stylesheet" href="css/style.css">
+<!-- Shim to make HTML5 elements usable in older Internet Explorer versions -->
+<!--[if lt IE 9]><script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+</head>
+<body>
+<div class="navbar navbar-fixed-top">
+ <div class="navbar-inner">
+ <div class="container">
+ <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ <span class="icon-bar"></span>
+ </a>
+ <a class="brand" href="https://github.com/blueimp/jQuery-File-Upload">jQuery File Upload</a>
+ <div class="nav-collapse">
+ <ul class="nav">
+ <li class="active"><a href="#">Demo</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/downloads">Downloads</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload">Source Code</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki">Documentation</a></li>
+ <li><a href="https://github.com/blueimp/jQuery-File-Upload/issues">Issues</a></li>
+ <li><a href="test/">Test</a></li>
+ <li><a href="https://blueimp.net">&copy; Sebastian Tschan</a></li>
+ </ul>
+ <select id="theme-switcher" class="pull-right">
+ <option value="base" selected>Base</option>
+ <option value="black-tie">Black Tie</option>
+ <option value="blitzer">Blitzer</option>
+ <option value="cupertino">Cupertino</option>
+ <option value="dark-hive">Dark Hive</option>
+ <option value="dot-luv">Dot Luv</option>
+ <option value="eggplant">Eggplant</option>
+ <option value="excite-bike">Excite Bike</option>
+ <option value="flick">Flick</option>
+ <option value="hot-sneaks">Hot sneaks</option>
+ <option value="humanity">Humanity</option>
+ <option value="le-frog">Le Frog</option>
+ <option value="mint-choc">Mint Choc</option>
+ <option value="overcast">Overcast</option>
+ <option value="pepper-grinder">Pepper Grinder</option>
+ <option value="redmond">Redmond</option>
+ <option value="smoothness">Smoothness</option>
+ <option value="south-street">South Street</option>
+ <option value="start">Start</option>
+ <option value="sunny">Sunny</option>
+ <option value="swanky-purse">Swanky Purse</option>
+ <option value="trontastic">Trontastic</option>
+ <option value="ui-darkness">UI Darkness</option>
+ <option value="ui-lightness">UI Lightness</option>
+ <option value="vader">Vader</option>
+ </select>
+ </div>
+ </div>
+ </div>
+</div>
+<div class="container">
+ <div class="page-header">
+ <h1>jQuery File Upload Demo</h1>
+ </div>
+ <blockquote>
+ <p>File Upload widget with multiple file selection, drag&amp;drop support, progress bars and preview images for jQuery.<br>
+ Supports cross-domain, chunked and resumable file uploads and client-side image resizing.<br>
+ Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.</p>
+ </blockquote>
+ <br>
+ <!-- The file upload form used as target for the file upload widget -->
+ <form id="fileupload" action="server/php/" method="POST" enctype="multipart/form-data">
+ <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
+ <div class="row fileupload-buttonbar">
+ <div class="span7">
+ <!-- The fileinput-button span is used to style the file input field as button -->
+ <span class="btn btn-success fileinput-button">
+ <i class="icon-plus icon-white"></i>
+ <span>Add files...</span>
+ <input type="file" name="files[]" multiple>
+ </span>
+ <button type="submit" class="btn btn-primary start">
+ <i class="icon-upload icon-white"></i>
+ <span>Start upload</span>
+ </button>
+ <button type="reset" class="btn btn-warning cancel">
+ <i class="icon-ban-circle icon-white"></i>
+ <span>Cancel upload</span>
+ </button>
+ <button type="button" class="btn btn-danger delete">
+ <i class="icon-trash icon-white"></i>
+ <span>Delete</span>
+ </button>
+ <input type="checkbox" class="toggle">
+ </div>
+ <!-- The global progress information -->
+ <div class="span5 fileupload-progress fade">
+ <!-- The global progress bar -->
+ <div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
+ <div class="bar" style="width:0%;"></div>
+ </div>
+ <!-- The extended global progress information -->
+ <div class="progress-extended">&nbsp;</div>
+ </div>
+ </div>
+ <!-- The loading indicator is shown during file processing -->
+ <div class="fileupload-loading"></div>
+ <br>
+ <!-- The table listing the files available for upload/download -->
+ <table role="presentation" class="table table-striped"><tbody class="files" data-toggle="modal-gallery" data-target="#modal-gallery"></tbody></table>
+ </form>
+ <br>
+ <div class="well">
+ <h3>Demo Notes</h3>
+ <ul>
+ <li>The maximum file size for uploads in this demo is <strong>5 MB</strong> (default file size is unlimited).</li>
+ <li>Only image files (<strong>JPG, GIF, PNG</strong>) are allowed in this demo (by default there is no file type restriction).</li>
+ <li>Uploaded files will be deleted automatically after <strong>5 minutes</strong> (demo setting).</li>
+ <li>You can <strong>drag &amp; drop</strong> files from your desktop on this webpage with Google Chrome, Mozilla Firefox and Apple Safari.</li>
+ <li>Please refer to the <a href="https://github.com/blueimp/jQuery-File-Upload">project website</a> and <a href="https://github.com/blueimp/jQuery-File-Upload/wiki">documentation</a> for more information.</li>
+ </ul>
+ </div>
+</div>
+<!-- The template to display files available for upload -->
+<script id="template-upload" type="text/x-tmpl">
+{% for (var i=0, file; file=o.files[i]; i++) { %}
+ <tr class="template-upload fade">
+ <td class="preview"><span class="fade"></span></td>
+ <td class="name"><span>{%=file.name%}</span></td>
+ <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
+ {% if (file.error) { %}
+ <td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
+ {% } else if (o.files.valid && !i) { %}
+ <td>
+ <div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="bar" style="width:0%;"></div></div>
+ </td>
+ <td class="start">{% if (!o.options.autoUpload) { %}
+ <button class="btn btn-primary">
+ <i class="icon-upload icon-white"></i>
+ <span>{%=locale.fileupload.start%}</span>
+ </button>
+ {% } %}</td>
+ {% } else { %}
+ <td colspan="2"></td>
+ {% } %}
+ <td class="cancel">{% if (!i) { %}
+ <button class="btn btn-warning">
+ <i class="icon-ban-circle icon-white"></i>
+ <span>{%=locale.fileupload.cancel%}</span>
+ </button>
+ {% } %}</td>
+ </tr>
+{% } %}
+</script>
+<!-- The template to display files available for download -->
+<script id="template-download" type="text/x-tmpl">
+{% for (var i=0, file; file=o.files[i]; i++) { %}
+ <tr class="template-download fade">
+ {% if (file.error) { %}
+ <td></td>
+ <td class="name"><span>{%=file.name%}</span></td>
+ <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
+ <td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
+ {% } else { %}
+ <td class="preview">{% if (file.thumbnail_url) { %}
+ <a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
+ {% } %}</td>
+ <td class="name">
+ <a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a>
+ </td>
+ <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
+ <td colspan="2"></td>
+ {% } %}
+ <td class="delete">
+ <button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}">
+ <i class="icon-trash icon-white"></i>
+ <span>{%=locale.fileupload.destroy%}</span>
+ </button>
+ <input type="checkbox" name="delete" value="1">
+ </td>
+ </tr>
+{% } %}
+</script>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
+<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
+<!-- The Templates plugin is included to render the upload/download listings -->
+<script src="http://blueimp.github.com/JavaScript-Templates/tmpl.min.js"></script>
+<!-- The Load Image plugin is included for the preview images and image resizing functionality -->
+<script src="http://blueimp.github.com/JavaScript-Load-Image/load-image.min.js"></script>
+<!-- The Canvas to Blob plugin is included for image resizing functionality -->
+<script src="http://blueimp.github.com/JavaScript-Canvas-to-Blob/canvas-to-blob.min.js"></script>
+<!-- jQuery Image Gallery -->
+<script src="http://blueimp.github.com/jQuery-Image-Gallery/js/jquery.image-gallery.min.js"></script>
+<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
+<script src="js/jquery.iframe-transport.js"></script>
+<!-- The basic File Upload plugin -->
+<script src="js/jquery.fileupload.js"></script>
+<!-- The File Upload file processing plugin -->
+<script src="js/jquery.fileupload-fp.js"></script>
+<!-- The File Upload user interface plugin -->
+<script src="js/jquery.fileupload-ui.js"></script>
+<!-- The File Upload jQuery UI plugin -->
+<script src="js/jquery.fileupload-jui.js"></script>
+<!-- The localization script -->
+<script src="js/locale.js"></script>
+<!-- The main application script -->
+<script src="js/main.js"></script>
+<!-- The XDomainRequest Transport is included for cross-domain file deletion for IE8+ -->
+<!--[if gte IE 8]><script src="js/cors/jquery.xdr-transport.js"></script><![endif]-->
+</body>
+</html>
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.postmessage-transport.js b/mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.postmessage-transport.js
new file mode 100644
index 000000000..931b6352b
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.postmessage-transport.js
@@ -0,0 +1,117 @@
+/*
+ * jQuery postMessage Transport Plugin 1.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*jslint unparam: true, nomen: true */
+/*global define, window, document */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['jquery'], factory);
+ } else {
+ // Browser globals:
+ factory(window.jQuery);
+ }
+}(function ($) {
+ 'use strict';
+
+ var counter = 0,
+ names = [
+ 'accepts',
+ 'cache',
+ 'contents',
+ 'contentType',
+ 'crossDomain',
+ 'data',
+ 'dataType',
+ 'headers',
+ 'ifModified',
+ 'mimeType',
+ 'password',
+ 'processData',
+ 'timeout',
+ 'traditional',
+ 'type',
+ 'url',
+ 'username'
+ ],
+ convert = function (p) {
+ return p;
+ };
+
+ $.ajaxSetup({
+ converters: {
+ 'postmessage text': convert,
+ 'postmessage json': convert,
+ 'postmessage html': convert
+ }
+ });
+
+ $.ajaxTransport('postmessage', function (options) {
+ if (options.postMessage && window.postMessage) {
+ var iframe,
+ loc = $('<a>').prop('href', options.postMessage)[0],
+ target = loc.protocol + '//' + loc.host,
+ xhrUpload = options.xhr().upload;
+ return {
+ send: function (_, completeCallback) {
+ var message = {
+ id: 'postmessage-transport-' + (counter += 1)
+ },
+ eventName = 'message.' + message.id;
+ iframe = $(
+ '<iframe style="display:none;" src="' +
+ options.postMessage + '" name="' +
+ message.id + '"></iframe>'
+ ).bind('load', function () {
+ $.each(names, function (i, name) {
+ message[name] = options[name];
+ });
+ message.dataType = message.dataType.replace('postmessage ', '');
+ $(window).bind(eventName, function (e) {
+ e = e.originalEvent;
+ var data = e.data,
+ ev;
+ if (e.origin === target && data.id === message.id) {
+ if (data.type === 'progress') {
+ ev = document.createEvent('Event');
+ ev.initEvent(data.type, false, true);
+ $.extend(ev, data);
+ xhrUpload.dispatchEvent(ev);
+ } else {
+ completeCallback(
+ data.status,
+ data.statusText,
+ {postmessage: data.result},
+ data.headers
+ );
+ iframe.remove();
+ $(window).unbind(eventName);
+ }
+ }
+ });
+ iframe[0].contentWindow.postMessage(
+ message,
+ target
+ );
+ }).appendTo(document.body);
+ },
+ abort: function () {
+ if (iframe) {
+ iframe.remove();
+ }
+ }
+ };
+ }
+ });
+
+}));
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.xdr-transport.js b/mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.xdr-transport.js
new file mode 100644
index 000000000..c42c54828
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/cors/jquery.xdr-transport.js
@@ -0,0 +1,85 @@
+/*
+ * jQuery XDomainRequest Transport Plugin 1.1.2
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ *
+ * Based on Julian Aubourg's ajaxHooks xdr.js:
+ * https://github.com/jaubourg/ajaxHooks/
+ */
+
+/*jslint unparam: true */
+/*global define, window, XDomainRequest */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['jquery'], factory);
+ } else {
+ // Browser globals:
+ factory(window.jQuery);
+ }
+}(function ($) {
+ 'use strict';
+ if (window.XDomainRequest && !$.support.cors) {
+ $.ajaxTransport(function (s) {
+ if (s.crossDomain && s.async) {
+ if (s.timeout) {
+ s.xdrTimeout = s.timeout;
+ delete s.timeout;
+ }
+ var xdr;
+ return {
+ send: function (headers, completeCallback) {
+ function callback(status, statusText, responses, responseHeaders) {
+ xdr.onload = xdr.onerror = xdr.ontimeout = $.noop;
+ xdr = null;
+ completeCallback(status, statusText, responses, responseHeaders);
+ }
+ xdr = new XDomainRequest();
+ // XDomainRequest only supports GET and POST:
+ if (s.type === 'DELETE') {
+ s.url = s.url + (/\?/.test(s.url) ? '&' : '?') +
+ '_method=DELETE';
+ s.type = 'POST';
+ } else if (s.type === 'PUT') {
+ s.url = s.url + (/\?/.test(s.url) ? '&' : '?') +
+ '_method=PUT';
+ s.type = 'POST';
+ }
+ xdr.open(s.type, s.url);
+ xdr.onload = function () {
+ callback(
+ 200,
+ 'OK',
+ {text: xdr.responseText},
+ 'Content-Type: ' + xdr.contentType
+ );
+ };
+ xdr.onerror = function () {
+ callback(404, 'Not Found');
+ };
+ if (s.xdrTimeout) {
+ xdr.ontimeout = function () {
+ callback(0, 'timeout');
+ };
+ xdr.timeout = s.xdrTimeout;
+ }
+ xdr.send((s.hasContent && s.data) || null);
+ },
+ abort: function () {
+ if (xdr) {
+ xdr.onerror = $.noop();
+ xdr.abort();
+ }
+ }
+ };
+ }
+ });
+ }
+}));
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-fp.js b/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-fp.js
new file mode 100644
index 000000000..634fb5e4e
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-fp.js
@@ -0,0 +1,219 @@
+/*
+ * jQuery File Upload File Processing Plugin 1.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2012, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*jslint nomen: true, unparam: true, regexp: true */
+/*global define, window, document */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define([
+ 'jquery',
+ 'load-image',
+ 'canvas-to-blob',
+ './jquery.fileupload'
+ ], factory);
+ } else {
+ // Browser globals:
+ factory(
+ window.jQuery,
+ window.loadImage
+ );
+ }
+}(function ($, loadImage) {
+ 'use strict';
+
+ // The File Upload IP version extends the basic fileupload widget
+ // with file processing functionality:
+ $.widget('blueimpFP.fileupload', $.blueimp.fileupload, {
+
+ options: {
+ // The list of file processing actions:
+ process: [
+ /*
+ {
+ action: 'load',
+ fileTypes: /^image\/(gif|jpeg|png)$/,
+ maxFileSize: 20000000 // 20MB
+ },
+ {
+ action: 'resize',
+ maxWidth: 1920,
+ maxHeight: 1200,
+ minWidth: 800,
+ minHeight: 600
+ },
+ {
+ action: 'save'
+ }
+ */
+ ],
+
+ // The add callback is invoked as soon as files are added to the
+ // fileupload widget (via file input selection, drag & drop or add
+ // API call). See the basic file upload widget for more information:
+ add: function (e, data) {
+ $(this).fileupload('process', data).done(function () {
+ data.submit();
+ });
+ }
+ },
+
+ processActions: {
+ // Loads the image given via data.files and data.index
+ // as canvas element.
+ // Accepts the options fileTypes (regular expression)
+ // and maxFileSize (integer) to limit the files to load:
+ load: function (data, options) {
+ var that = this,
+ file = data.files[data.index],
+ dfd = $.Deferred();
+ if (window.HTMLCanvasElement &&
+ window.HTMLCanvasElement.prototype.toBlob &&
+ ($.type(options.maxFileSize) !== 'number' ||
+ file.size < options.maxFileSize) &&
+ (!options.fileTypes ||
+ options.fileTypes.test(file.type))) {
+ loadImage(
+ file,
+ function (canvas) {
+ data.canvas = canvas;
+ dfd.resolveWith(that, [data]);
+ },
+ {canvas: true}
+ );
+ } else {
+ dfd.rejectWith(that, [data]);
+ }
+ return dfd.promise();
+ },
+ // Resizes the image given as data.canvas and updates
+ // data.canvas with the resized image.
+ // Accepts the options maxWidth, maxHeight, minWidth and
+ // minHeight to scale the given image:
+ resize: function (data, options) {
+ if (data.canvas) {
+ var canvas = loadImage.scale(data.canvas, options);
+ if (canvas.width !== data.canvas.width ||
+ canvas.height !== data.canvas.height) {
+ data.canvas = canvas;
+ data.processed = true;
+ }
+ }
+ return data;
+ },
+ // Saves the processed image given as data.canvas
+ // inplace at data.index of data.files:
+ save: function (data, options) {
+ // Do nothing if no processing has happened:
+ if (!data.canvas || !data.processed) {
+ return data;
+ }
+ var that = this,
+ file = data.files[data.index],
+ name = file.name,
+ dfd = $.Deferred(),
+ callback = function (blob) {
+ if (!blob.name) {
+ if (file.type === blob.type) {
+ blob.name = file.name;
+ } else if (file.name) {
+ blob.name = file.name.replace(
+ /\..+$/,
+ '.' + blob.type.substr(6)
+ );
+ }
+ }
+ // Store the created blob at the position
+ // of the original file in the files list:
+ data.files[data.index] = blob;
+ dfd.resolveWith(that, [data]);
+ };
+ // Use canvas.mozGetAsFile directly, to retain the filename, as
+ // Gecko doesn't support the filename option for FormData.append:
+ if (data.canvas.mozGetAsFile) {
+ callback(data.canvas.mozGetAsFile(
+ (/^image\/(jpeg|png)$/.test(file.type) && name) ||
+ ((name && name.replace(/\..+$/, '')) ||
+ 'blob') + '.png',
+ file.type
+ ));
+ } else {
+ data.canvas.toBlob(callback, file.type);
+ }
+ return dfd.promise();
+ }
+ },
+
+ // Resizes the file at the given index and stores the created blob at
+ // the original position of the files list, returns a Promise object:
+ _processFile: function (files, index, options) {
+ var that = this,
+ dfd = $.Deferred().resolveWith(that, [{
+ files: files,
+ index: index
+ }]),
+ chain = dfd.promise();
+ that._processing += 1;
+ $.each(options.process, function (i, settings) {
+ chain = chain.pipe(function (data) {
+ return that.processActions[settings.action]
+ .call(this, data, settings);
+ });
+ });
+ chain.always(function () {
+ that._processing -= 1;
+ if (that._processing === 0) {
+ that.element
+ .removeClass('fileupload-processing');
+ }
+ });
+ if (that._processing === 1) {
+ that.element.addClass('fileupload-processing');
+ }
+ return chain;
+ },
+
+ // Processes the files given as files property of the data parameter,
+ // returns a Promise object that allows to bind a done handler, which
+ // will be invoked after processing all files (inplace) is done:
+ process: function (data) {
+ var that = this,
+ options = $.extend({}, this.options, data);
+ if (options.process && options.process.length &&
+ this._isXHRUpload(options)) {
+ $.each(data.files, function (index, file) {
+ that._processingQueue = that._processingQueue.pipe(
+ function () {
+ var dfd = $.Deferred();
+ that._processFile(data.files, index, options)
+ .always(function () {
+ dfd.resolveWith(that);
+ });
+ return dfd.promise();
+ }
+ );
+ });
+ }
+ return this._processingQueue;
+ },
+
+ _create: function () {
+ $.blueimp.fileupload.prototype._create.call(this);
+ this._processing = 0;
+ this._processingQueue = $.Deferred().resolveWith(this)
+ .promise();
+ }
+
+ });
+
+}));
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-jui.js b/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-jui.js
new file mode 100644
index 000000000..69736a4a4
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-jui.js
@@ -0,0 +1,141 @@
+/*
+ * jQuery File Upload jQuery UI Plugin 1.2
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2012, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*jslint nomen: true */
+/*global define, window */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['jquery', './jquery.fileupload-ui.js'], factory);
+ } else {
+ // Browser globals:
+ factory(window.jQuery);
+ }
+}(function ($) {
+ 'use strict';
+ $.widget('blueimpJUI.fileupload', $.blueimpUI.fileupload, {
+ options: {
+ sent: function (e, data) {
+ if (data.context && data.dataType &&
+ data.dataType.substr(0, 6) === 'iframe') {
+ // Iframe Transport does not support progress events.
+ // In lack of an indeterminate progress bar, we set
+ // the progress to 100%, showing the full animated bar:
+ data.context
+ .find('.progress').progressbar(
+ 'option',
+ 'value',
+ 100
+ );
+ }
+ },
+ progress: function (e, data) {
+ if (data.context) {
+ data.context.find('.progress').progressbar(
+ 'option',
+ 'value',
+ parseInt(data.loaded / data.total * 100, 10)
+ );
+ }
+ },
+ progressall: function (e, data) {
+ var $this = $(this);
+ $this.find('.fileupload-progress')
+ .find('.progress').progressbar(
+ 'option',
+ 'value',
+ parseInt(data.loaded / data.total * 100, 10)
+ ).end()
+ .find('.progress-extended').each(function () {
+ $(this).html(
+ $this.data('fileupload')
+ ._renderExtendedProgress(data)
+ );
+ });
+ }
+ },
+ _renderUpload: function (func, files) {
+ var node = $.blueimpUI.fileupload.prototype
+ ._renderUpload.call(this, func, files),
+ showIconText = $(window).width() > 480;
+ node.find('.progress').empty().progressbar();
+ node.find('.start button').button({
+ icons: {primary: 'ui-icon-circle-arrow-e'},
+ text: showIconText
+ });
+ node.find('.cancel button').button({
+ icons: {primary: 'ui-icon-cancel'},
+ text: showIconText
+ });
+ return node;
+ },
+ _renderDownload: function (func, files) {
+ var node = $.blueimpUI.fileupload.prototype
+ ._renderDownload.call(this, func, files),
+ showIconText = $(window).width() > 480;
+ node.find('.delete button').button({
+ icons: {primary: 'ui-icon-trash'},
+ text: showIconText
+ });
+ return node;
+ },
+ _transition: function (node) {
+ var that = this,
+ deferred = $.Deferred();
+ if (node.hasClass('fade')) {
+ node.fadeToggle(function () {
+ deferred.resolveWith(node);
+ });
+ } else {
+ deferred.resolveWith(node);
+ }
+ return deferred;
+ },
+ _create: function () {
+ $.blueimpUI.fileupload.prototype._create.call(this);
+ this.element
+ .find('.fileupload-buttonbar')
+ .find('.fileinput-button').each(function () {
+ var input = $(this).find('input:file').detach();
+ $(this)
+ .button({icons: {primary: 'ui-icon-plusthick'}})
+ .append(input);
+ })
+ .end().find('.start')
+ .button({icons: {primary: 'ui-icon-circle-arrow-e'}})
+ .end().find('.cancel')
+ .button({icons: {primary: 'ui-icon-cancel'}})
+ .end().find('.delete')
+ .button({icons: {primary: 'ui-icon-trash'}})
+ .end().find('.progress').empty().progressbar();
+ },
+ destroy: function () {
+ this.element
+ .find('.fileupload-buttonbar')
+ .find('.fileinput-button').each(function () {
+ var input = $(this).find('input:file').detach();
+ $(this)
+ .button('destroy')
+ .append(input);
+ })
+ .end().find('.start')
+ .button('destroy')
+ .end().find('.cancel')
+ .button('destroy')
+ .end().find('.delete')
+ .button('destroy')
+ .end().find('.progress').progressbar('destroy');
+ $.blueimpUI.fileupload.prototype.destroy.call(this);
+ }
+ });
+}));
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-ui.js b/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-ui.js
new file mode 100644
index 000000000..4c36f0086
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload-ui.js
@@ -0,0 +1,736 @@
+/*
+ * jQuery File Upload User Interface Plugin 6.9.4
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*jslint nomen: true, unparam: true, regexp: true */
+/*global define, window, document, URL, webkitURL, FileReader */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define([
+ 'jquery',
+ 'tmpl',
+ 'load-image',
+ './jquery.fileupload-fp'
+ ], factory);
+ } else {
+ // Browser globals:
+ factory(
+ window.jQuery,
+ window.tmpl,
+ window.loadImage
+ );
+ }
+}(function ($, tmpl, loadImage) {
+ 'use strict';
+
+ // The UI version extends the FP (file processing) version or the basic
+ // file upload widget and adds complete user interface interaction:
+ var parentWidget = ($.blueimpFP || $.blueimp).fileupload;
+ $.widget('blueimpUI.fileupload', parentWidget, {
+
+ options: {
+ // By default, files added to the widget are uploaded as soon
+ // as the user clicks on the start buttons. To enable automatic
+ // uploads, set the following option to true:
+ autoUpload: false,
+ // The following option limits the number of files that are
+ // allowed to be uploaded using this widget:
+ maxNumberOfFiles: undefined,
+ // The maximum allowed file size:
+ maxFileSize: undefined,
+ // The minimum allowed file size:
+ minFileSize: undefined,
+ // The regular expression for allowed file types, matches
+ // against either file type or file name:
+ acceptFileTypes: /.+$/i,
+ // The regular expression to define for which files a preview
+ // image is shown, matched against the file type:
+ previewSourceFileTypes: /^image\/(gif|jpeg|png)$/,
+ // The maximum file size of images that are to be displayed as preview:
+ previewSourceMaxFileSize: 5000000, // 5MB
+ // The maximum width of the preview images:
+ previewMaxWidth: 80,
+ // The maximum height of the preview images:
+ previewMaxHeight: 80,
+ // By default, preview images are displayed as canvas elements
+ // if supported by the browser. Set the following option to false
+ // to always display preview images as img elements:
+ previewAsCanvas: true,
+ // The ID of the upload template:
+ uploadTemplateId: 'template-upload',
+ // The ID of the download template:
+ downloadTemplateId: 'template-download',
+ // The container for the list of files. If undefined, it is set to
+ // an element with class "files" inside of the widget element:
+ filesContainer: undefined,
+ // By default, files are appended to the files container.
+ // Set the following option to true, to prepend files instead:
+ prependFiles: false,
+ // The expected data type of the upload response, sets the dataType
+ // option of the $.ajax upload requests:
+ dataType: 'json',
+
+ // The add callback is invoked as soon as files are added to the fileupload
+ // widget (via file input selection, drag & drop or add API call).
+ // See the basic file upload widget for more information:
+ add: function (e, data) {
+ var that = $(this).data('fileupload'),
+ options = that.options,
+ files = data.files;
+ $(this).fileupload('process', data).done(function () {
+ that._adjustMaxNumberOfFiles(-files.length);
+ data.maxNumberOfFilesAdjusted = true;
+ data.files.valid = data.isValidated = that._validate(files);
+ data.context = that._renderUpload(files).data('data', data);
+ options.filesContainer[
+ options.prependFiles ? 'prepend' : 'append'
+ ](data.context);
+ that._renderPreviews(files, data.context);
+ that._forceReflow(data.context);
+ that._transition(data.context).done(
+ function () {
+ if ((that._trigger('added', e, data) !== false) &&
+ (options.autoUpload || data.autoUpload) &&
+ data.autoUpload !== false && data.isValidated) {
+ data.submit();
+ }
+ }
+ );
+ });
+ },
+ // Callback for the start of each file upload request:
+ send: function (e, data) {
+ var that = $(this).data('fileupload');
+ if (!data.isValidated) {
+ if (!data.maxNumberOfFilesAdjusted) {
+ that._adjustMaxNumberOfFiles(-data.files.length);
+ data.maxNumberOfFilesAdjusted = true;
+ }
+ if (!that._validate(data.files)) {
+ return false;
+ }
+ }
+ if (data.context && data.dataType &&
+ data.dataType.substr(0, 6) === 'iframe') {
+ // Iframe Transport does not support progress events.
+ // In lack of an indeterminate progress bar, we set
+ // the progress to 100%, showing the full animated bar:
+ data.context
+ .find('.progress').addClass(
+ !$.support.transition && 'progress-animated'
+ )
+ .attr('aria-valuenow', 100)
+ .find('.bar').css(
+ 'width',
+ '100%'
+ );
+ }
+ return that._trigger('sent', e, data);
+ },
+ // Callback for successful uploads:
+ done: function (e, data) {
+ var that = $(this).data('fileupload'),
+ template;
+ if (data.context) {
+ data.context.each(function (index) {
+ var file = ($.isArray(data.result) &&
+ data.result[index]) || {error: 'emptyResult'};
+ if (file.error) {
+ that._adjustMaxNumberOfFiles(1);
+ }
+ that._transition($(this)).done(
+ function () {
+ var node = $(this);
+ template = that._renderDownload([file])
+ .replaceAll(node);
+ that._forceReflow(template);
+ that._transition(template).done(
+ function () {
+ data.context = $(this);
+ that._trigger('completed', e, data);
+ }
+ );
+ }
+ );
+ });
+ } else {
+ if ($.isArray(data.result)) {
+ $.each(data.result, function (index, file) {
+ if (data.maxNumberOfFilesAdjusted && file.error) {
+ that._adjustMaxNumberOfFiles(1);
+ } else if (!data.maxNumberOfFilesAdjusted &&
+ !file.error) {
+ that._adjustMaxNumberOfFiles(-1);
+ }
+ });
+ data.maxNumberOfFilesAdjusted = true;
+ }
+ template = that._renderDownload(data.result)
+ .appendTo(that.options.filesContainer);
+ that._forceReflow(template);
+ that._transition(template).done(
+ function () {
+ data.context = $(this);
+ that._trigger('completed', e, data);
+ }
+ );
+ }
+ },
+ // Callback for failed (abort or error) uploads:
+ fail: function (e, data) {
+ var that = $(this).data('fileupload'),
+ template;
+ if (data.maxNumberOfFilesAdjusted) {
+ that._adjustMaxNumberOfFiles(data.files.length);
+ }
+ if (data.context) {
+ data.context.each(function (index) {
+ if (data.errorThrown !== 'abort') {
+ var file = data.files[index];
+ file.error = file.error || data.errorThrown ||
+ true;
+ that._transition($(this)).done(
+ function () {
+ var node = $(this);
+ template = that._renderDownload([file])
+ .replaceAll(node);
+ that._forceReflow(template);
+ that._transition(template).done(
+ function () {
+ data.context = $(this);
+ that._trigger('failed', e, data);
+ }
+ );
+ }
+ );
+ } else {
+ that._transition($(this)).done(
+ function () {
+ $(this).remove();
+ that._trigger('failed', e, data);
+ }
+ );
+ }
+ });
+ } else if (data.errorThrown !== 'abort') {
+ data.context = that._renderUpload(data.files)
+ .appendTo(that.options.filesContainer)
+ .data('data', data);
+ that._forceReflow(data.context);
+ that._transition(data.context).done(
+ function () {
+ data.context = $(this);
+ that._trigger('failed', e, data);
+ }
+ );
+ } else {
+ that._trigger('failed', e, data);
+ }
+ },
+ // Callback for upload progress events:
+ progress: function (e, data) {
+ if (data.context) {
+ var progress = parseInt(data.loaded / data.total * 100, 10);
+ data.context.find('.progress')
+ .attr('aria-valuenow', progress)
+ .find('.bar').css(
+ 'width',
+ progress + '%'
+ );
+ }
+ },
+ // Callback for global upload progress events:
+ progressall: function (e, data) {
+ var $this = $(this),
+ progress = parseInt(data.loaded / data.total * 100, 10),
+ globalProgressNode = $this.find('.fileupload-progress'),
+ extendedProgressNode = globalProgressNode
+ .find('.progress-extended');
+ if (extendedProgressNode.length) {
+ extendedProgressNode.html(
+ $this.data('fileupload')._renderExtendedProgress(data)
+ );
+ }
+ globalProgressNode
+ .find('.progress')
+ .attr('aria-valuenow', progress)
+ .find('.bar').css(
+ 'width',
+ progress + '%'
+ );
+ },
+ // Callback for uploads start, equivalent to the global ajaxStart event:
+ start: function (e) {
+ var that = $(this).data('fileupload');
+ that._transition($(this).find('.fileupload-progress')).done(
+ function () {
+ that._trigger('started', e);
+ }
+ );
+ },
+ // Callback for uploads stop, equivalent to the global ajaxStop event:
+ stop: function (e) {
+ var that = $(this).data('fileupload');
+ that._transition($(this).find('.fileupload-progress')).done(
+ function () {
+ $(this).find('.progress')
+ .attr('aria-valuenow', '0')
+ .find('.bar').css('width', '0%');
+ $(this).find('.progress-extended').html('&nbsp;');
+ that._trigger('stopped', e);
+ }
+ );
+ },
+ // Callback for file deletion:
+ destroy: function (e, data) {
+ var that = $(this).data('fileupload');
+ if (data.url) {
+ $.ajax(data);
+ that._adjustMaxNumberOfFiles(1);
+ }
+ that._transition(data.context).done(
+ function () {
+ $(this).remove();
+ that._trigger('destroyed', e, data);
+ }
+ );
+ }
+ },
+
+ // Link handler, that allows to download files
+ // by drag & drop of the links to the desktop:
+ _enableDragToDesktop: function () {
+ var link = $(this),
+ url = link.prop('href'),
+ name = link.prop('download'),
+ type = 'application/octet-stream';
+ link.bind('dragstart', function (e) {
+ try {
+ e.originalEvent.dataTransfer.setData(
+ 'DownloadURL',
+ [type, name, url].join(':')
+ );
+ } catch (err) {}
+ });
+ },
+
+ _adjustMaxNumberOfFiles: function (operand) {
+ if (typeof this.options.maxNumberOfFiles === 'number') {
+ this.options.maxNumberOfFiles += operand;
+ if (this.options.maxNumberOfFiles < 1) {
+ this._disableFileInputButton();
+ } else {
+ this._enableFileInputButton();
+ }
+ }
+ },
+
+ _formatFileSize: function (bytes) {
+ if (typeof bytes !== 'number') {
+ return '';
+ }
+ if (bytes >= 1000000000) {
+ return (bytes / 1000000000).toFixed(2) + ' GB';
+ }
+ if (bytes >= 1000000) {
+ return (bytes / 1000000).toFixed(2) + ' MB';
+ }
+ return (bytes / 1000).toFixed(2) + ' KB';
+ },
+
+ _formatBitrate: function (bits) {
+ if (typeof bits !== 'number') {
+ return '';
+ }
+ if (bits >= 1000000000) {
+ return (bits / 1000000000).toFixed(2) + ' Gbit/s';
+ }
+ if (bits >= 1000000) {
+ return (bits / 1000000).toFixed(2) + ' Mbit/s';
+ }
+ if (bits >= 1000) {
+ return (bits / 1000).toFixed(2) + ' kbit/s';
+ }
+ return bits + ' bit/s';
+ },
+
+ _formatTime: function (seconds) {
+ var date = new Date(seconds * 1000),
+ days = parseInt(seconds / 86400, 10);
+ days = days ? days + 'd ' : '';
+ return days +
+ ('0' + date.getUTCHours()).slice(-2) + ':' +
+ ('0' + date.getUTCMinutes()).slice(-2) + ':' +
+ ('0' + date.getUTCSeconds()).slice(-2);
+ },
+
+ _formatPercentage: function (floatValue) {
+ return (floatValue * 100).toFixed(2) + ' %';
+ },
+
+ _renderExtendedProgress: function (data) {
+ return this._formatBitrate(data.bitrate) + ' | ' +
+ this._formatTime(
+ (data.total - data.loaded) * 8 / data.bitrate
+ ) + ' | ' +
+ this._formatPercentage(
+ data.loaded / data.total
+ ) + ' | ' +
+ this._formatFileSize(data.loaded) + ' / ' +
+ this._formatFileSize(data.total);
+ },
+
+ _hasError: function (file) {
+ if (file.error) {
+ return file.error;
+ }
+ // The number of added files is subtracted from
+ // maxNumberOfFiles before validation, so we check if
+ // maxNumberOfFiles is below 0 (instead of below 1):
+ if (this.options.maxNumberOfFiles < 0) {
+ return 'maxNumberOfFiles';
+ }
+ // Files are accepted if either the file type or the file name
+ // matches against the acceptFileTypes regular expression, as
+ // only browsers with support for the File API report the type:
+ if (!(this.options.acceptFileTypes.test(file.type) ||
+ this.options.acceptFileTypes.test(file.name))) {
+ return 'acceptFileTypes';
+ }
+ if (this.options.maxFileSize &&
+ file.size > this.options.maxFileSize) {
+ return 'maxFileSize';
+ }
+ if (typeof file.size === 'number' &&
+ file.size < this.options.minFileSize) {
+ return 'minFileSize';
+ }
+ return null;
+ },
+
+ _validate: function (files) {
+ var that = this,
+ valid = !!files.length;
+ $.each(files, function (index, file) {
+ file.error = that._hasError(file);
+ if (file.error) {
+ valid = false;
+ }
+ });
+ return valid;
+ },
+
+ _renderTemplate: function (func, files) {
+ if (!func) {
+ return $();
+ }
+ var result = func({
+ files: files,
+ formatFileSize: this._formatFileSize,
+ options: this.options
+ });
+ if (result instanceof $) {
+ return result;
+ }
+ return $(this.options.templatesContainer).html(result).children();
+ },
+
+ _renderPreview: function (file, node) {
+ var that = this,
+ options = this.options,
+ dfd = $.Deferred();
+ return ((loadImage && loadImage(
+ file,
+ function (img) {
+ node.append(img);
+ that._forceReflow(node);
+ that._transition(node).done(function () {
+ dfd.resolveWith(node);
+ });
+ if (!$.contains(document.body, node[0])) {
+ // If the element is not part of the DOM,
+ // transition events are not triggered,
+ // so we have to resolve manually:
+ dfd.resolveWith(node);
+ }
+ },
+ {
+ maxWidth: options.previewMaxWidth,
+ maxHeight: options.previewMaxHeight,
+ canvas: options.previewAsCanvas
+ }
+ )) || dfd.resolveWith(node)) && dfd;
+ },
+
+ _renderPreviews: function (files, nodes) {
+ var that = this,
+ options = this.options;
+ nodes.find('.preview span').each(function (index, element) {
+ var file = files[index];
+ if (options.previewSourceFileTypes.test(file.type) &&
+ ($.type(options.previewSourceMaxFileSize) !== 'number' ||
+ file.size < options.previewSourceMaxFileSize)) {
+ that._processingQueue = that._processingQueue.pipe(function () {
+ var dfd = $.Deferred();
+ that._renderPreview(file, $(element)).done(
+ function () {
+ dfd.resolveWith(that);
+ }
+ );
+ return dfd.promise();
+ });
+ }
+ });
+ return this._processingQueue;
+ },
+
+ _renderUpload: function (files) {
+ return this._renderTemplate(
+ this.options.uploadTemplate,
+ files
+ );
+ },
+
+ _renderDownload: function (files) {
+ return this._renderTemplate(
+ this.options.downloadTemplate,
+ files
+ ).find('a[download]').each(this._enableDragToDesktop).end();
+ },
+
+ _startHandler: function (e) {
+ e.preventDefault();
+ var button = $(this),
+ template = button.closest('.template-upload'),
+ data = template.data('data');
+ if (data && data.submit && !data.jqXHR && data.submit()) {
+ button.prop('disabled', true);
+ }
+ },
+
+ _cancelHandler: function (e) {
+ e.preventDefault();
+ var template = $(this).closest('.template-upload'),
+ data = template.data('data') || {};
+ if (!data.jqXHR) {
+ data.errorThrown = 'abort';
+ e.data.fileupload._trigger('fail', e, data);
+ } else {
+ data.jqXHR.abort();
+ }
+ },
+
+ _deleteHandler: function (e) {
+ e.preventDefault();
+ var button = $(this);
+ e.data.fileupload._trigger('destroy', e, {
+ context: button.closest('.template-download'),
+ url: button.attr('data-url'),
+ type: button.attr('data-type') || 'DELETE',
+ dataType: e.data.fileupload.options.dataType
+ });
+ },
+
+ _forceReflow: function (node) {
+ return $.support.transition && node.length &&
+ node[0].offsetWidth;
+ },
+
+ _transition: function (node) {
+ var dfd = $.Deferred();
+ if ($.support.transition && node.hasClass('fade')) {
+ node.bind(
+ $.support.transition.end,
+ function (e) {
+ // Make sure we don't respond to other transitions events
+ // in the container element, e.g. from button elements:
+ if (e.target === node[0]) {
+ node.unbind($.support.transition.end);
+ dfd.resolveWith(node);
+ }
+ }
+ ).toggleClass('in');
+ } else {
+ node.toggleClass('in');
+ dfd.resolveWith(node);
+ }
+ return dfd;
+ },
+
+ _initButtonBarEventHandlers: function () {
+ var fileUploadButtonBar = this.element.find('.fileupload-buttonbar'),
+ filesList = this.options.filesContainer,
+ ns = this.options.namespace;
+ fileUploadButtonBar.find('.start')
+ .bind('click.' + ns, function (e) {
+ e.preventDefault();
+ filesList.find('.start button').click();
+ });
+ fileUploadButtonBar.find('.cancel')
+ .bind('click.' + ns, function (e) {
+ e.preventDefault();
+ filesList.find('.cancel button').click();
+ });
+ fileUploadButtonBar.find('.delete')
+ .bind('click.' + ns, function (e) {
+ e.preventDefault();
+ filesList.find('.delete input:checked')
+ .siblings('button').click();
+ fileUploadButtonBar.find('.toggle')
+ .prop('checked', false);
+ });
+ fileUploadButtonBar.find('.toggle')
+ .bind('change.' + ns, function (e) {
+ filesList.find('.delete input').prop(
+ 'checked',
+ $(this).is(':checked')
+ );
+ });
+ },
+
+ _destroyButtonBarEventHandlers: function () {
+ this.element.find('.fileupload-buttonbar button')
+ .unbind('click.' + this.options.namespace);
+ this.element.find('.fileupload-buttonbar .toggle')
+ .unbind('change.' + this.options.namespace);
+ },
+
+ _initEventHandlers: function () {
+ parentWidget.prototype._initEventHandlers.call(this);
+ var eventData = {fileupload: this};
+ this.options.filesContainer
+ .delegate(
+ '.start button',
+ 'click.' + this.options.namespace,
+ eventData,
+ this._startHandler
+ )
+ .delegate(
+ '.cancel button',
+ 'click.' + this.options.namespace,
+ eventData,
+ this._cancelHandler
+ )
+ .delegate(
+ '.delete button',
+ 'click.' + this.options.namespace,
+ eventData,
+ this._deleteHandler
+ );
+ this._initButtonBarEventHandlers();
+ },
+
+ _destroyEventHandlers: function () {
+ var options = this.options;
+ this._destroyButtonBarEventHandlers();
+ options.filesContainer
+ .undelegate('.start button', 'click.' + options.namespace)
+ .undelegate('.cancel button', 'click.' + options.namespace)
+ .undelegate('.delete button', 'click.' + options.namespace);
+ parentWidget.prototype._destroyEventHandlers.call(this);
+ },
+
+ _enableFileInputButton: function () {
+ this.element.find('.fileinput-button input')
+ .prop('disabled', false)
+ .parent().removeClass('disabled');
+ },
+
+ _disableFileInputButton: function () {
+ this.element.find('.fileinput-button input')
+ .prop('disabled', true)
+ .parent().addClass('disabled');
+ },
+
+ _initTemplates: function () {
+ var options = this.options;
+ options.templatesContainer = document.createElement(
+ options.filesContainer.prop('nodeName')
+ );
+ if (tmpl) {
+ if (options.uploadTemplateId) {
+ options.uploadTemplate = tmpl(options.uploadTemplateId);
+ }
+ if (options.downloadTemplateId) {
+ options.downloadTemplate = tmpl(options.downloadTemplateId);
+ }
+ }
+ },
+
+ _initFilesContainer: function () {
+ var options = this.options;
+ if (options.filesContainer === undefined) {
+ options.filesContainer = this.element.find('.files');
+ } else if (!(options.filesContainer instanceof $)) {
+ options.filesContainer = $(options.filesContainer);
+ }
+ },
+
+ _stringToRegExp: function (str) {
+ var parts = str.split('/'),
+ modifiers = parts.pop();
+ parts.shift();
+ return new RegExp(parts.join('/'), modifiers);
+ },
+
+ _initRegExpOptions: function () {
+ var options = this.options;
+ if ($.type(options.acceptFileTypes) === 'string') {
+ options.acceptFileTypes = this._stringToRegExp(
+ options.acceptFileTypes
+ );
+ }
+ if ($.type(options.previewSourceFileTypes) === 'string') {
+ options.previewSourceFileTypes = this._stringToRegExp(
+ options.previewSourceFileTypes
+ );
+ }
+ },
+
+ _initSpecialOptions: function () {
+ parentWidget.prototype._initSpecialOptions.call(this);
+ this._initFilesContainer();
+ this._initTemplates();
+ this._initRegExpOptions();
+ },
+
+ _create: function () {
+ parentWidget.prototype._create.call(this);
+ this._refreshOptionsList.push(
+ 'filesContainer',
+ 'uploadTemplateId',
+ 'downloadTemplateId'
+ );
+ if (!$.blueimpFP) {
+ this._processingQueue = $.Deferred().resolveWith(this).promise();
+ this.process = function () {
+ return this._processingQueue;
+ };
+ }
+ },
+
+ enable: function () {
+ parentWidget.prototype.enable.call(this);
+ this.element.find('input, button').prop('disabled', false);
+ this._enableFileInputButton();
+ },
+
+ disable: function () {
+ this.element.find('input, button').prop('disabled', true);
+ this._disableFileInputButton();
+ parentWidget.prototype.disable.call(this);
+ }
+
+ });
+
+}));
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload.js b/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload.js
new file mode 100644
index 000000000..4bbd28729
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/jquery.fileupload.js
@@ -0,0 +1,972 @@
+/*
+ * jQuery File Upload Plugin 5.13
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*jslint nomen: true, unparam: true, regexp: true */
+/*global define, window, document, Blob, FormData, location */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define([
+ 'jquery',
+ 'jquery.ui.widget'
+ ], factory);
+ } else {
+ // Browser globals:
+ factory(window.jQuery);
+ }
+}(function ($) {
+ 'use strict';
+
+ // The FileReader API is not actually used, but works as feature detection,
+ // as e.g. Safari supports XHR file uploads via the FormData API,
+ // but not non-multipart XHR file uploads:
+ $.support.xhrFileUpload = !!(window.XMLHttpRequestUpload && window.FileReader);
+ $.support.xhrFormDataFileUpload = !!window.FormData;
+
+ // The fileupload widget listens for change events on file input fields defined
+ // via fileInput setting and paste or drop events of the given dropZone.
+ // In addition to the default jQuery Widget methods, the fileupload widget
+ // exposes the "add" and "send" methods, to add or directly send files using
+ // the fileupload API.
+ // By default, files added via file input selection, paste, drag & drop or
+ // "add" method are uploaded immediately, but it is possible to override
+ // the "add" callback option to queue file uploads.
+ $.widget('blueimp.fileupload', {
+
+ options: {
+ // The namespace used for event handler binding on the dropZone and
+ // fileInput collections.
+ // If not set, the name of the widget ("fileupload") is used.
+ namespace: undefined,
+ // The drop target collection, by the default the complete document.
+ // Set to null or an empty collection to disable drag & drop support:
+ dropZone: $(document),
+ // The file input field collection, that is listened for change events.
+ // If undefined, it is set to the file input fields inside
+ // of the widget element on plugin initialization.
+ // Set to null or an empty collection to disable the change listener.
+ fileInput: undefined,
+ // By default, the file input field is replaced with a clone after
+ // each input field change event. This is required for iframe transport
+ // queues and allows change events to be fired for the same file
+ // selection, but can be disabled by setting the following option to false:
+ replaceFileInput: true,
+ // The parameter name for the file form data (the request argument name).
+ // If undefined or empty, the name property of the file input field is
+ // used, or "files[]" if the file input name property is also empty,
+ // can be a string or an array of strings:
+ paramName: undefined,
+ // By default, each file of a selection is uploaded using an individual
+ // request for XHR type uploads. Set to false to upload file
+ // selections in one request each:
+ singleFileUploads: true,
+ // To limit the number of files uploaded with one XHR request,
+ // set the following option to an integer greater than 0:
+ limitMultiFileUploads: undefined,
+ // Set the following option to true to issue all file upload requests
+ // in a sequential order:
+ sequentialUploads: false,
+ // To limit the number of concurrent uploads,
+ // set the following option to an integer greater than 0:
+ limitConcurrentUploads: undefined,
+ // Set the following option to true to force iframe transport uploads:
+ forceIframeTransport: false,
+ // Set the following option to the location of a redirect url on the
+ // origin server, for cross-domain iframe transport uploads:
+ redirect: undefined,
+ // The parameter name for the redirect url, sent as part of the form
+ // data and set to 'redirect' if this option is empty:
+ redirectParamName: undefined,
+ // Set the following option to the location of a postMessage window,
+ // to enable postMessage transport uploads:
+ postMessage: undefined,
+ // By default, XHR file uploads are sent as multipart/form-data.
+ // The iframe transport is always using multipart/form-data.
+ // Set to false to enable non-multipart XHR uploads:
+ multipart: true,
+ // To upload large files in smaller chunks, set the following option
+ // to a preferred maximum chunk size. If set to 0, null or undefined,
+ // or the browser does not support the required Blob API, files will
+ // be uploaded as a whole.
+ maxChunkSize: undefined,
+ // When a non-multipart upload or a chunked multipart upload has been
+ // aborted, this option can be used to resume the upload by setting
+ // it to the size of the already uploaded bytes. This option is most
+ // useful when modifying the options object inside of the "add" or
+ // "send" callbacks, as the options are cloned for each file upload.
+ uploadedBytes: undefined,
+ // By default, failed (abort or error) file uploads are removed from the
+ // global progress calculation. Set the following option to false to
+ // prevent recalculating the global progress data:
+ recalculateProgress: true,
+ // Interval in milliseconds to calculate and trigger progress events:
+ progressInterval: 100,
+ // Interval in milliseconds to calculate progress bitrate:
+ bitrateInterval: 500,
+
+ // Additional form data to be sent along with the file uploads can be set
+ // using this option, which accepts an array of objects with name and
+ // value properties, a function returning such an array, a FormData
+ // object (for XHR file uploads), or a simple object.
+ // The form of the first fileInput is given as parameter to the function:
+ formData: function (form) {
+ return form.serializeArray();
+ },
+
+ // The add callback is invoked as soon as files are added to the fileupload
+ // widget (via file input selection, drag & drop, paste or add API call).
+ // If the singleFileUploads option is enabled, this callback will be
+ // called once for each file in the selection for XHR file uplaods, else
+ // once for each file selection.
+ // The upload starts when the submit method is invoked on the data parameter.
+ // The data object contains a files property holding the added files
+ // and allows to override plugin options as well as define ajax settings.
+ // Listeners for this callback can also be bound the following way:
+ // .bind('fileuploadadd', func);
+ // data.submit() returns a Promise object and allows to attach additional
+ // handlers using jQuery's Deferred callbacks:
+ // data.submit().done(func).fail(func).always(func);
+ add: function (e, data) {
+ data.submit();
+ },
+
+ // Other callbacks:
+ // Callback for the submit event of each file upload:
+ // submit: function (e, data) {}, // .bind('fileuploadsubmit', func);
+ // Callback for the start of each file upload request:
+ // send: function (e, data) {}, // .bind('fileuploadsend', func);
+ // Callback for successful uploads:
+ // done: function (e, data) {}, // .bind('fileuploaddone', func);
+ // Callback for failed (abort or error) uploads:
+ // fail: function (e, data) {}, // .bind('fileuploadfail', func);
+ // Callback for completed (success, abort or error) requests:
+ // always: function (e, data) {}, // .bind('fileuploadalways', func);
+ // Callback for upload progress events:
+ // progress: function (e, data) {}, // .bind('fileuploadprogress', func);
+ // Callback for global upload progress events:
+ // progressall: function (e, data) {}, // .bind('fileuploadprogressall', func);
+ // Callback for uploads start, equivalent to the global ajaxStart event:
+ // start: function (e) {}, // .bind('fileuploadstart', func);
+ // Callback for uploads stop, equivalent to the global ajaxStop event:
+ // stop: function (e) {}, // .bind('fileuploadstop', func);
+ // Callback for change events of the fileInput collection:
+ // change: function (e, data) {}, // .bind('fileuploadchange', func);
+ // Callback for paste events to the dropZone collection:
+ // paste: function (e, data) {}, // .bind('fileuploadpaste', func);
+ // Callback for drop events of the dropZone collection:
+ // drop: function (e, data) {}, // .bind('fileuploaddrop', func);
+ // Callback for dragover events of the dropZone collection:
+ // dragover: function (e) {}, // .bind('fileuploaddragover', func);
+
+ // The plugin options are used as settings object for the ajax calls.
+ // The following are jQuery ajax settings required for the file uploads:
+ processData: false,
+ contentType: false,
+ cache: false
+ },
+
+ // A list of options that require a refresh after assigning a new value:
+ _refreshOptionsList: [
+ 'namespace',
+ 'dropZone',
+ 'fileInput',
+ 'multipart',
+ 'forceIframeTransport'
+ ],
+
+ _BitrateTimer: function () {
+ this.timestamp = +(new Date());
+ this.loaded = 0;
+ this.bitrate = 0;
+ this.getBitrate = function (now, loaded, interval) {
+ var timeDiff = now - this.timestamp;
+ if (!this.bitrate || !interval || timeDiff > interval) {
+ this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;
+ this.loaded = loaded;
+ this.timestamp = now;
+ }
+ return this.bitrate;
+ };
+ },
+
+ _isXHRUpload: function (options) {
+ return !options.forceIframeTransport &&
+ ((!options.multipart && $.support.xhrFileUpload) ||
+ $.support.xhrFormDataFileUpload);
+ },
+
+ _getFormData: function (options) {
+ var formData;
+ if (typeof options.formData === 'function') {
+ return options.formData(options.form);
+ }
+ if ($.isArray(options.formData)) {
+ return options.formData;
+ }
+ if (options.formData) {
+ formData = [];
+ $.each(options.formData, function (name, value) {
+ formData.push({name: name, value: value});
+ });
+ return formData;
+ }
+ return [];
+ },
+
+ _getTotal: function (files) {
+ var total = 0;
+ $.each(files, function (index, file) {
+ total += file.size || 1;
+ });
+ return total;
+ },
+
+ _onProgress: function (e, data) {
+ if (e.lengthComputable) {
+ var now = +(new Date()),
+ total,
+ loaded;
+ if (data._time && data.progressInterval &&
+ (now - data._time < data.progressInterval) &&
+ e.loaded !== e.total) {
+ return;
+ }
+ data._time = now;
+ total = data.total || this._getTotal(data.files);
+ loaded = parseInt(
+ e.loaded / e.total * (data.chunkSize || total),
+ 10
+ ) + (data.uploadedBytes || 0);
+ this._loaded += loaded - (data.loaded || data.uploadedBytes || 0);
+ data.lengthComputable = true;
+ data.loaded = loaded;
+ data.total = total;
+ data.bitrate = data._bitrateTimer.getBitrate(
+ now,
+ loaded,
+ data.bitrateInterval
+ );
+ // Trigger a custom progress event with a total data property set
+ // to the file size(s) of the current upload and a loaded data
+ // property calculated accordingly:
+ this._trigger('progress', e, data);
+ // Trigger a global progress event for all current file uploads,
+ // including ajax calls queued for sequential file uploads:
+ this._trigger('progressall', e, {
+ lengthComputable: true,
+ loaded: this._loaded,
+ total: this._total,
+ bitrate: this._bitrateTimer.getBitrate(
+ now,
+ this._loaded,
+ data.bitrateInterval
+ )
+ });
+ }
+ },
+
+ _initProgressListener: function (options) {
+ var that = this,
+ xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr();
+ // Accesss to the native XHR object is required to add event listeners
+ // for the upload progress event:
+ if (xhr.upload) {
+ $(xhr.upload).bind('progress', function (e) {
+ var oe = e.originalEvent;
+ // Make sure the progress event properties get copied over:
+ e.lengthComputable = oe.lengthComputable;
+ e.loaded = oe.loaded;
+ e.total = oe.total;
+ that._onProgress(e, options);
+ });
+ options.xhr = function () {
+ return xhr;
+ };
+ }
+ },
+
+ _initXHRData: function (options) {
+ var formData,
+ file = options.files[0],
+ // Ignore non-multipart setting if not supported:
+ multipart = options.multipart || !$.support.xhrFileUpload,
+ paramName = options.paramName[0];
+ if (!multipart || options.blob) {
+ // For non-multipart uploads and chunked uploads,
+ // file meta data is not part of the request body,
+ // so we transmit this data as part of the HTTP headers.
+ // For cross domain requests, these headers must be allowed
+ // via Access-Control-Allow-Headers or removed using
+ // the beforeSend callback:
+ options.headers = $.extend(options.headers, {
+ 'X-File-Name': file.name,
+ 'X-File-Type': file.type,
+ 'X-File-Size': file.size
+ });
+ if (!options.blob) {
+ // Non-chunked non-multipart upload:
+ options.contentType = file.type;
+ options.data = file;
+ } else if (!multipart) {
+ // Chunked non-multipart upload:
+ options.contentType = 'application/octet-stream';
+ options.data = options.blob;
+ }
+ }
+ if (multipart && $.support.xhrFormDataFileUpload) {
+ if (options.postMessage) {
+ // window.postMessage does not allow sending FormData
+ // objects, so we just add the File/Blob objects to
+ // the formData array and let the postMessage window
+ // create the FormData object out of this array:
+ formData = this._getFormData(options);
+ if (options.blob) {
+ formData.push({
+ name: paramName,
+ value: options.blob
+ });
+ } else {
+ $.each(options.files, function (index, file) {
+ formData.push({
+ name: options.paramName[index] || paramName,
+ value: file
+ });
+ });
+ }
+ } else {
+ if (options.formData instanceof FormData) {
+ formData = options.formData;
+ } else {
+ formData = new FormData();
+ $.each(this._getFormData(options), function (index, field) {
+ formData.append(field.name, field.value);
+ });
+ }
+ if (options.blob) {
+ formData.append(paramName, options.blob, file.name);
+ } else {
+ $.each(options.files, function (index, file) {
+ // File objects are also Blob instances.
+ // This check allows the tests to run with
+ // dummy objects:
+ if (file instanceof Blob) {
+ formData.append(
+ options.paramName[index] || paramName,
+ file,
+ file.name
+ );
+ }
+ });
+ }
+ }
+ options.data = formData;
+ }
+ // Blob reference is not needed anymore, free memory:
+ options.blob = null;
+ },
+
+ _initIframeSettings: function (options) {
+ // Setting the dataType to iframe enables the iframe transport:
+ options.dataType = 'iframe ' + (options.dataType || '');
+ // The iframe transport accepts a serialized array as form data:
+ options.formData = this._getFormData(options);
+ // Add redirect url to form data on cross-domain uploads:
+ if (options.redirect && $('<a></a>').prop('href', options.url)
+ .prop('host') !== location.host) {
+ options.formData.push({
+ name: options.redirectParamName || 'redirect',
+ value: options.redirect
+ });
+ }
+ },
+
+ _initDataSettings: function (options) {
+ if (this._isXHRUpload(options)) {
+ if (!this._chunkedUpload(options, true)) {
+ if (!options.data) {
+ this._initXHRData(options);
+ }
+ this._initProgressListener(options);
+ }
+ if (options.postMessage) {
+ // Setting the dataType to postmessage enables the
+ // postMessage transport:
+ options.dataType = 'postmessage ' + (options.dataType || '');
+ }
+ } else {
+ this._initIframeSettings(options, 'iframe');
+ }
+ },
+
+ _getParamName: function (options) {
+ var fileInput = $(options.fileInput),
+ paramName = options.paramName;
+ if (!paramName) {
+ paramName = [];
+ fileInput.each(function () {
+ var input = $(this),
+ name = input.prop('name') || 'files[]',
+ i = (input.prop('files') || [1]).length;
+ while (i) {
+ paramName.push(name);
+ i -= 1;
+ }
+ });
+ if (!paramName.length) {
+ paramName = [fileInput.prop('name') || 'files[]'];
+ }
+ } else if (!$.isArray(paramName)) {
+ paramName = [paramName];
+ }
+ return paramName;
+ },
+
+ _initFormSettings: function (options) {
+ // Retrieve missing options from the input field and the
+ // associated form, if available:
+ if (!options.form || !options.form.length) {
+ options.form = $(options.fileInput.prop('form'));
+ }
+ options.paramName = this._getParamName(options);
+ if (!options.url) {
+ options.url = options.form.prop('action') || location.href;
+ }
+ // The HTTP request method must be "POST" or "PUT":
+ options.type = (options.type || options.form.prop('method') || '')
+ .toUpperCase();
+ if (options.type !== 'POST' && options.type !== 'PUT') {
+ options.type = 'POST';
+ }
+ },
+
+ _getAJAXSettings: function (data) {
+ var options = $.extend({}, this.options, data);
+ this._initFormSettings(options);
+ this._initDataSettings(options);
+ return options;
+ },
+
+ // Maps jqXHR callbacks to the equivalent
+ // methods of the given Promise object:
+ _enhancePromise: function (promise) {
+ promise.success = promise.done;
+ promise.error = promise.fail;
+ promise.complete = promise.always;
+ return promise;
+ },
+
+ // Creates and returns a Promise object enhanced with
+ // the jqXHR methods abort, success, error and complete:
+ _getXHRPromise: function (resolveOrReject, context, args) {
+ var dfd = $.Deferred(),
+ promise = dfd.promise();
+ context = context || this.options.context || promise;
+ if (resolveOrReject === true) {
+ dfd.resolveWith(context, args);
+ } else if (resolveOrReject === false) {
+ dfd.rejectWith(context, args);
+ }
+ promise.abort = dfd.promise;
+ return this._enhancePromise(promise);
+ },
+
+ // Uploads a file in multiple, sequential requests
+ // by splitting the file up in multiple blob chunks.
+ // If the second parameter is true, only tests if the file
+ // should be uploaded in chunks, but does not invoke any
+ // upload requests:
+ _chunkedUpload: function (options, testOnly) {
+ var that = this,
+ file = options.files[0],
+ fs = file.size,
+ ub = options.uploadedBytes = options.uploadedBytes || 0,
+ mcs = options.maxChunkSize || fs,
+ // Use the Blob methods with the slice implementation
+ // according to the W3C Blob API specification:
+ slice = file.webkitSlice || file.mozSlice || file.slice,
+ upload,
+ n,
+ jqXHR,
+ pipe;
+ if (!(this._isXHRUpload(options) && slice && (ub || mcs < fs)) ||
+ options.data) {
+ return false;
+ }
+ if (testOnly) {
+ return true;
+ }
+ if (ub >= fs) {
+ file.error = 'uploadedBytes';
+ return this._getXHRPromise(
+ false,
+ options.context,
+ [null, 'error', file.error]
+ );
+ }
+ // n is the number of blobs to upload,
+ // calculated via filesize, uploaded bytes and max chunk size:
+ n = Math.ceil((fs - ub) / mcs);
+ // The chunk upload method accepting the chunk number as parameter:
+ upload = function (i) {
+ if (!i) {
+ return that._getXHRPromise(true, options.context);
+ }
+ // Upload the blobs in sequential order:
+ return upload(i -= 1).pipe(function () {
+ // Clone the options object for each chunk upload:
+ var o = $.extend({}, options);
+ o.blob = slice.call(
+ file,
+ ub + i * mcs,
+ ub + (i + 1) * mcs
+ );
+ // Expose the chunk index:
+ o.chunkIndex = i;
+ // Expose the number of chunks:
+ o.chunksNumber = n;
+ // Store the current chunk size, as the blob itself
+ // will be dereferenced after data processing:
+ o.chunkSize = o.blob.size;
+ // Process the upload data (the blob and potential form data):
+ that._initXHRData(o);
+ // Add progress listeners for this chunk upload:
+ that._initProgressListener(o);
+ jqXHR = ($.ajax(o) || that._getXHRPromise(false, o.context))
+ .done(function () {
+ // Create a progress event if upload is done and
+ // no progress event has been invoked for this chunk:
+ if (!o.loaded) {
+ that._onProgress($.Event('progress', {
+ lengthComputable: true,
+ loaded: o.chunkSize,
+ total: o.chunkSize
+ }), o);
+ }
+ options.uploadedBytes = o.uploadedBytes +=
+ o.chunkSize;
+ });
+ return jqXHR;
+ });
+ };
+ // Return the piped Promise object, enhanced with an abort method,
+ // which is delegated to the jqXHR object of the current upload,
+ // and jqXHR callbacks mapped to the equivalent Promise methods:
+ pipe = upload(n);
+ pipe.abort = function () {
+ return jqXHR.abort();
+ };
+ return this._enhancePromise(pipe);
+ },
+
+ _beforeSend: function (e, data) {
+ if (this._active === 0) {
+ // the start callback is triggered when an upload starts
+ // and no other uploads are currently running,
+ // equivalent to the global ajaxStart event:
+ this._trigger('start');
+ // Set timer for global bitrate progress calculation:
+ this._bitrateTimer = new this._BitrateTimer();
+ }
+ this._active += 1;
+ // Initialize the global progress values:
+ this._loaded += data.uploadedBytes || 0;
+ this._total += this._getTotal(data.files);
+ },
+
+ _onDone: function (result, textStatus, jqXHR, options) {
+ if (!this._isXHRUpload(options)) {
+ // Create a progress event for each iframe load:
+ this._onProgress($.Event('progress', {
+ lengthComputable: true,
+ loaded: 1,
+ total: 1
+ }), options);
+ }
+ options.result = result;
+ options.textStatus = textStatus;
+ options.jqXHR = jqXHR;
+ this._trigger('done', null, options);
+ },
+
+ _onFail: function (jqXHR, textStatus, errorThrown, options) {
+ options.jqXHR = jqXHR;
+ options.textStatus = textStatus;
+ options.errorThrown = errorThrown;
+ this._trigger('fail', null, options);
+ if (options.recalculateProgress) {
+ // Remove the failed (error or abort) file upload from
+ // the global progress calculation:
+ this._loaded -= options.loaded || options.uploadedBytes || 0;
+ this._total -= options.total || this._getTotal(options.files);
+ }
+ },
+
+ _onAlways: function (jqXHRorResult, textStatus, jqXHRorError, options) {
+ this._active -= 1;
+ options.textStatus = textStatus;
+ if (jqXHRorError && jqXHRorError.always) {
+ options.jqXHR = jqXHRorError;
+ options.result = jqXHRorResult;
+ } else {
+ options.jqXHR = jqXHRorResult;
+ options.errorThrown = jqXHRorError;
+ }
+ this._trigger('always', null, options);
+ if (this._active === 0) {
+ // The stop callback is triggered when all uploads have
+ // been completed, equivalent to the global ajaxStop event:
+ this._trigger('stop');
+ // Reset the global progress values:
+ this._loaded = this._total = 0;
+ this._bitrateTimer = null;
+ }
+ },
+
+ _onSend: function (e, data) {
+ var that = this,
+ jqXHR,
+ slot,
+ pipe,
+ options = that._getAJAXSettings(data),
+ send = function (resolve, args) {
+ that._sending += 1;
+ // Set timer for bitrate progress calculation:
+ options._bitrateTimer = new that._BitrateTimer();
+ jqXHR = jqXHR || (
+ (resolve !== false &&
+ that._trigger('send', e, options) !== false &&
+ (that._chunkedUpload(options) || $.ajax(options))) ||
+ that._getXHRPromise(false, options.context, args)
+ ).done(function (result, textStatus, jqXHR) {
+ that._onDone(result, textStatus, jqXHR, options);
+ }).fail(function (jqXHR, textStatus, errorThrown) {
+ that._onFail(jqXHR, textStatus, errorThrown, options);
+ }).always(function (jqXHRorResult, textStatus, jqXHRorError) {
+ that._sending -= 1;
+ that._onAlways(
+ jqXHRorResult,
+ textStatus,
+ jqXHRorError,
+ options
+ );
+ if (options.limitConcurrentUploads &&
+ options.limitConcurrentUploads > that._sending) {
+ // Start the next queued upload,
+ // that has not been aborted:
+ var nextSlot = that._slots.shift();
+ while (nextSlot) {
+ if (!nextSlot.isRejected()) {
+ nextSlot.resolve();
+ break;
+ }
+ nextSlot = that._slots.shift();
+ }
+ }
+ });
+ return jqXHR;
+ };
+ this._beforeSend(e, options);
+ if (this.options.sequentialUploads ||
+ (this.options.limitConcurrentUploads &&
+ this.options.limitConcurrentUploads <= this._sending)) {
+ if (this.options.limitConcurrentUploads > 1) {
+ slot = $.Deferred();
+ this._slots.push(slot);
+ pipe = slot.pipe(send);
+ } else {
+ pipe = (this._sequence = this._sequence.pipe(send, send));
+ }
+ // Return the piped Promise object, enhanced with an abort method,
+ // which is delegated to the jqXHR object of the current upload,
+ // and jqXHR callbacks mapped to the equivalent Promise methods:
+ pipe.abort = function () {
+ var args = [undefined, 'abort', 'abort'];
+ if (!jqXHR) {
+ if (slot) {
+ slot.rejectWith(args);
+ }
+ return send(false, args);
+ }
+ return jqXHR.abort();
+ };
+ return this._enhancePromise(pipe);
+ }
+ return send();
+ },
+
+ _onAdd: function (e, data) {
+ var that = this,
+ result = true,
+ options = $.extend({}, this.options, data),
+ limit = options.limitMultiFileUploads,
+ paramName = this._getParamName(options),
+ paramNameSet,
+ paramNameSlice,
+ fileSet,
+ i;
+ if (!(options.singleFileUploads || limit) ||
+ !this._isXHRUpload(options)) {
+ fileSet = [data.files];
+ paramNameSet = [paramName];
+ } else if (!options.singleFileUploads && limit) {
+ fileSet = [];
+ paramNameSet = [];
+ for (i = 0; i < data.files.length; i += limit) {
+ fileSet.push(data.files.slice(i, i + limit));
+ paramNameSlice = paramName.slice(i, i + limit);
+ if (!paramNameSlice.length) {
+ paramNameSlice = paramName;
+ }
+ paramNameSet.push(paramNameSlice);
+ }
+ } else {
+ paramNameSet = paramName;
+ }
+ data.originalFiles = data.files;
+ $.each(fileSet || data.files, function (index, element) {
+ var newData = $.extend({}, data);
+ newData.files = fileSet ? element : [element];
+ newData.paramName = paramNameSet[index];
+ newData.submit = function () {
+ newData.jqXHR = this.jqXHR =
+ (that._trigger('submit', e, this) !== false) &&
+ that._onSend(e, this);
+ return this.jqXHR;
+ };
+ return (result = that._trigger('add', e, newData));
+ });
+ return result;
+ },
+
+ // File Normalization for Gecko 1.9.1 (Firefox 3.5) support:
+ _normalizeFile: function (index, file) {
+ if (file.name === undefined && file.size === undefined) {
+ file.name = file.fileName;
+ file.size = file.fileSize;
+ }
+ },
+
+ _replaceFileInput: function (input) {
+ var inputClone = input.clone(true);
+ $('<form></form>').append(inputClone)[0].reset();
+ // Detaching allows to insert the fileInput on another form
+ // without loosing the file input value:
+ input.after(inputClone).detach();
+ // Avoid memory leaks with the detached file input:
+ $.cleanData(input.unbind('remove'));
+ // Replace the original file input element in the fileInput
+ // collection with the clone, which has been copied including
+ // event handlers:
+ this.options.fileInput = this.options.fileInput.map(function (i, el) {
+ if (el === input[0]) {
+ return inputClone[0];
+ }
+ return el;
+ });
+ // If the widget has been initialized on the file input itself,
+ // override this.element with the file input clone:
+ if (input[0] === this.element[0]) {
+ this.element = inputClone;
+ }
+ },
+
+ _getFileInputFiles: function (fileInput) {
+ fileInput = $(fileInput);
+ var files = $.each($.makeArray(fileInput.prop('files')), this._normalizeFile),
+ value;
+ if (!files.length) {
+ value = fileInput.prop('value');
+ if (!value) {
+ return [];
+ }
+ // If the files property is not available, the browser does not
+ // support the File API and we add a pseudo File object with
+ // the input value as name with path information removed:
+ files = [{name: value.replace(/^.*\\/, '')}];
+ }
+ return files;
+ },
+
+ _onChange: function (e) {
+ var that = e.data.fileupload,
+ data = {
+ fileInput: $(e.target),
+ form: $(e.target.form)
+ };
+ data.files = that._getFileInputFiles(data.fileInput);
+ if (that.options.replaceFileInput) {
+ that._replaceFileInput(data.fileInput);
+ }
+ if (that._trigger('change', e, data) === false ||
+ that._onAdd(e, data) === false) {
+ return false;
+ }
+ },
+
+ _onPaste: function (e) {
+ var that = e.data.fileupload,
+ cbd = e.originalEvent.clipboardData,
+ items = (cbd && cbd.items) || [],
+ data = {files: []};
+ $.each(items, function (index, item) {
+ var file = item.getAsFile && item.getAsFile();
+ if (file) {
+ data.files.push(file);
+ }
+ });
+ if (that._trigger('paste', e, data) === false ||
+ that._onAdd(e, data) === false) {
+ return false;
+ }
+ },
+
+ _onDrop: function (e) {
+ var that = e.data.fileupload,
+ dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer,
+ data = {
+ files: $.each(
+ $.makeArray(dataTransfer && dataTransfer.files),
+ that._normalizeFile
+ )
+ };
+ if (that._trigger('drop', e, data) === false ||
+ that._onAdd(e, data) === false) {
+ return false;
+ }
+ e.preventDefault();
+ },
+
+ _onDragOver: function (e) {
+ var that = e.data.fileupload,
+ dataTransfer = e.dataTransfer = e.originalEvent.dataTransfer;
+ if (that._trigger('dragover', e) === false) {
+ return false;
+ }
+ if (dataTransfer) {
+ dataTransfer.dropEffect = 'copy';
+ }
+ e.preventDefault();
+ },
+
+ _initEventHandlers: function () {
+ var ns = this.options.namespace;
+ if (this._isXHRUpload(this.options)) {
+ this.options.dropZone
+ .bind('dragover.' + ns, {fileupload: this}, this._onDragOver)
+ .bind('drop.' + ns, {fileupload: this}, this._onDrop)
+ .bind('paste.' + ns, {fileupload: this}, this._onPaste);
+ }
+ this.options.fileInput
+ .bind('change.' + ns, {fileupload: this}, this._onChange);
+ },
+
+ _destroyEventHandlers: function () {
+ var ns = this.options.namespace;
+ this.options.dropZone
+ .unbind('dragover.' + ns, this._onDragOver)
+ .unbind('drop.' + ns, this._onDrop)
+ .unbind('paste.' + ns, this._onPaste);
+ this.options.fileInput
+ .unbind('change.' + ns, this._onChange);
+ },
+
+ _setOption: function (key, value) {
+ var refresh = $.inArray(key, this._refreshOptionsList) !== -1;
+ if (refresh) {
+ this._destroyEventHandlers();
+ }
+ $.Widget.prototype._setOption.call(this, key, value);
+ if (refresh) {
+ this._initSpecialOptions();
+ this._initEventHandlers();
+ }
+ },
+
+ _initSpecialOptions: function () {
+ var options = this.options;
+ if (options.fileInput === undefined) {
+ options.fileInput = this.element.is('input:file') ?
+ this.element : this.element.find('input:file');
+ } else if (!(options.fileInput instanceof $)) {
+ options.fileInput = $(options.fileInput);
+ }
+ if (!(options.dropZone instanceof $)) {
+ options.dropZone = $(options.dropZone);
+ }
+ },
+
+ _create: function () {
+ var options = this.options;
+ // Initialize options set via HTML5 data-attributes:
+ $.extend(options, $(this.element[0].cloneNode(false)).data());
+ options.namespace = options.namespace || this.widgetName;
+ this._initSpecialOptions();
+ this._slots = [];
+ this._sequence = this._getXHRPromise(true);
+ this._sending = this._active = this._loaded = this._total = 0;
+ this._initEventHandlers();
+ },
+
+ destroy: function () {
+ this._destroyEventHandlers();
+ $.Widget.prototype.destroy.call(this);
+ },
+
+ enable: function () {
+ $.Widget.prototype.enable.call(this);
+ this._initEventHandlers();
+ },
+
+ disable: function () {
+ this._destroyEventHandlers();
+ $.Widget.prototype.disable.call(this);
+ },
+
+ // This method is exposed to the widget API and allows adding files
+ // using the fileupload API. The data parameter accepts an object which
+ // must have a files property and can contain additional options:
+ // .fileupload('add', {files: filesList});
+ add: function (data) {
+ if (!data || this.options.disabled) {
+ return;
+ }
+ if (data.fileInput && !data.files) {
+ data.files = this._getFileInputFiles(data.fileInput);
+ } else {
+ data.files = $.each($.makeArray(data.files), this._normalizeFile);
+ }
+ this._onAdd(null, data);
+ },
+
+ // This method is exposed to the widget API and allows sending files
+ // using the fileupload API. The data parameter accepts an object which
+ // must have a files property and can contain additional options:
+ // .fileupload('send', {files: filesList});
+ // The method returns a Promise object for the file upload call.
+ send: function (data) {
+ if (data && !this.options.disabled) {
+ if (data.fileInput && !data.files) {
+ data.files = this._getFileInputFiles(data.fileInput);
+ } else {
+ data.files = $.each($.makeArray(data.files), this._normalizeFile);
+ }
+ if (data.files.length) {
+ return this._onSend(null, data);
+ }
+ }
+ return this._getXHRPromise(false, data && data.context);
+ }
+
+ });
+
+}));
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/jquery.iframe-transport.js b/mod/lightpics/vendors/jquery-file-upload/js/jquery.iframe-transport.js
new file mode 100644
index 000000000..04a566230
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/jquery.iframe-transport.js
@@ -0,0 +1,171 @@
+/*
+ * jQuery Iframe Transport Plugin 1.4
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*jslint unparam: true, nomen: true */
+/*global define, window, document */
+
+(function (factory) {
+ 'use strict';
+ if (typeof define === 'function' && define.amd) {
+ // Register as an anonymous AMD module:
+ define(['jquery'], factory);
+ } else {
+ // Browser globals:
+ factory(window.jQuery);
+ }
+}(function ($) {
+ 'use strict';
+
+ // Helper variable to create unique names for the transport iframes:
+ var counter = 0;
+
+ // The iframe transport accepts three additional options:
+ // options.fileInput: a jQuery collection of file input fields
+ // options.paramName: the parameter name for the file form data,
+ // overrides the name property of the file input field(s),
+ // can be a string or an array of strings.
+ // options.formData: an array of objects with name and value properties,
+ // equivalent to the return data of .serializeArray(), e.g.:
+ // [{name: 'a', value: 1}, {name: 'b', value: 2}]
+ $.ajaxTransport('iframe', function (options) {
+ if (options.async && (options.type === 'POST' || options.type === 'GET')) {
+ var form,
+ iframe;
+ return {
+ send: function (_, completeCallback) {
+ form = $('<form style="display:none;"></form>');
+ // javascript:false as initial iframe src
+ // prevents warning popups on HTTPS in IE6.
+ // IE versions below IE8 cannot set the name property of
+ // elements that have already been added to the DOM,
+ // so we set the name along with the iframe HTML markup:
+ iframe = $(
+ '<iframe src="javascript:false;" name="iframe-transport-' +
+ (counter += 1) + '"></iframe>'
+ ).bind('load', function () {
+ var fileInputClones,
+ paramNames = $.isArray(options.paramName) ?
+ options.paramName : [options.paramName];
+ iframe
+ .unbind('load')
+ .bind('load', function () {
+ var response;
+ // Wrap in a try/catch block to catch exceptions thrown
+ // when trying to access cross-domain iframe contents:
+ try {
+ response = iframe.contents();
+ // Google Chrome and Firefox do not throw an
+ // exception when calling iframe.contents() on
+ // cross-domain requests, so we unify the response:
+ if (!response.length || !response[0].firstChild) {
+ throw new Error();
+ }
+ } catch (e) {
+ response = undefined;
+ }
+ // The complete callback returns the
+ // iframe content document as response object:
+ completeCallback(
+ 200,
+ 'success',
+ {'iframe': response}
+ );
+ // Fix for IE endless progress bar activity bug
+ // (happens on form submits to iframe targets):
+ $('<iframe src="javascript:false;"></iframe>')
+ .appendTo(form);
+ form.remove();
+ });
+ form
+ .prop('target', iframe.prop('name'))
+ .prop('action', options.url)
+ .prop('method', options.type);
+ if (options.formData) {
+ $.each(options.formData, function (index, field) {
+ $('<input type="hidden"/>')
+ .prop('name', field.name)
+ .val(field.value)
+ .appendTo(form);
+ });
+ }
+ if (options.fileInput && options.fileInput.length &&
+ options.type === 'POST') {
+ fileInputClones = options.fileInput.clone();
+ // Insert a clone for each file input field:
+ options.fileInput.after(function (index) {
+ return fileInputClones[index];
+ });
+ if (options.paramName) {
+ options.fileInput.each(function (index) {
+ $(this).prop(
+ 'name',
+ paramNames[index] || options.paramName
+ );
+ });
+ }
+ // Appending the file input fields to the hidden form
+ // removes them from their original location:
+ form
+ .append(options.fileInput)
+ .prop('enctype', 'multipart/form-data')
+ // enctype must be set as encoding for IE:
+ .prop('encoding', 'multipart/form-data');
+ }
+ form.submit();
+ // Insert the file input fields at their original location
+ // by replacing the clones with the originals:
+ if (fileInputClones && fileInputClones.length) {
+ options.fileInput.each(function (index, input) {
+ var clone = $(fileInputClones[index]);
+ $(input).prop('name', clone.prop('name'));
+ clone.replaceWith(input);
+ });
+ }
+ });
+ form.append(iframe).appendTo(document.body);
+ },
+ abort: function () {
+ if (iframe) {
+ // javascript:false as iframe src aborts the request
+ // and prevents warning popups on HTTPS in IE6.
+ // concat is used to avoid the "Script URL" JSLint error:
+ iframe
+ .unbind('load')
+ .prop('src', 'javascript'.concat(':false;'));
+ }
+ if (form) {
+ form.remove();
+ }
+ }
+ };
+ }
+ });
+
+ // The iframe transport returns the iframe content document as response.
+ // The following adds converters from iframe to text, json, html, and script:
+ $.ajaxSetup({
+ converters: {
+ 'iframe text': function (iframe) {
+ return $(iframe[0].body).text();
+ },
+ 'iframe json': function (iframe) {
+ return $.parseJSON($(iframe[0].body).text());
+ },
+ 'iframe html': function (iframe) {
+ return $(iframe[0].body).html();
+ },
+ 'iframe script': function (iframe) {
+ return $.globalEval($(iframe[0].body).text());
+ }
+ }
+ });
+
+}));
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/locale.js b/mod/lightpics/vendors/jquery-file-upload/js/locale.js
new file mode 100644
index 000000000..ea64b0a87
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/locale.js
@@ -0,0 +1,29 @@
+/*
+ * jQuery File Upload Plugin Localization Example 6.5.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2012, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*global window */
+
+window.locale = {
+ "fileupload": {
+ "errors": {
+ "maxFileSize": "File is too big",
+ "minFileSize": "File is too small",
+ "acceptFileTypes": "Filetype not allowed",
+ "maxNumberOfFiles": "Max number of files exceeded",
+ "uploadedBytes": "Uploaded bytes exceed file size",
+ "emptyResult": "Empty file upload result"
+ },
+ "error": "Error",
+ "start": "Start",
+ "cancel": "Cancel",
+ "destroy": "Delete"
+ }
+};
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/main.js b/mod/lightpics/vendors/jquery-file-upload/js/main.js
new file mode 100644
index 000000000..67109588d
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/main.js
@@ -0,0 +1,93 @@
+/*
+ * jQuery File Upload Plugin JS Example 6.7
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*jslint nomen: true, unparam: true, regexp: true */
+/*global $, window, document */
+
+$(function () {
+ 'use strict';
+
+ // Initialize the jQuery File Upload widget:
+ $('#fileupload').fileupload();
+
+ // Enable iframe cross-domain access via redirect option:
+ $('#fileupload').fileupload(
+ 'option',
+ 'redirect',
+ window.location.href.replace(
+ /\/[^\/]*$/,
+ '/cors/result.html?%s'
+ )
+ );
+
+ if (window.location.hostname === 'blueimp.github.com') {
+ // Demo settings:
+ $('#fileupload').fileupload('option', {
+ url: '//jquery-file-upload.appspot.com/',
+ maxFileSize: 5000000,
+ acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
+ process: [
+ {
+ action: 'load',
+ fileTypes: /^image\/(gif|jpeg|png)$/,
+ maxFileSize: 20000000 // 20MB
+ },
+ {
+ action: 'resize',
+ maxWidth: 1440,
+ maxHeight: 900
+ },
+ {
+ action: 'save'
+ }
+ ]
+ });
+ // Upload server status check for browsers with CORS support:
+ if ($.support.cors) {
+ $.ajax({
+ url: '//jquery-file-upload.appspot.com/',
+ type: 'HEAD'
+ }).fail(function () {
+ $('<span class="alert alert-error"/>')
+ .text('Upload server currently unavailable - ' +
+ new Date())
+ .appendTo('#fileupload');
+ });
+ }
+ } else {
+ // Load existing files:
+ $('#fileupload').each(function () {
+ var that = this;
+ $.getJSON(this.action, function (result) {
+ if (result && result.length) {
+ $(that).fileupload('option', 'done')
+ .call(that, null, {result: result});
+ }
+ });
+ });
+ }
+
+ // Initialize the Image Gallery widget:
+ $('#fileupload .files').imagegallery();
+
+ // Initialize the theme switcher:
+ $('#theme-switcher').change(function () {
+ var theme = $('#theme');
+ theme.prop(
+ 'href',
+ theme.prop('href').replace(
+ /[\w\-]+\/jquery-ui.css/,
+ $(this).val() + '/jquery-ui.css'
+ )
+ );
+ });
+
+});
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/vendor/canvas-to-blob.min.js b/mod/lightpics/vendors/jquery-file-upload/js/vendor/canvas-to-blob.min.js
new file mode 100644
index 000000000..9328aae30
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/vendor/canvas-to-blob.min.js
@@ -0,0 +1 @@
+(function(a){"use strict";var b=a.HTMLCanvasElement&&a.HTMLCanvasElement.prototype,c=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||a.MSBlobBuilder,d=c&&a.atob&&a.ArrayBuffer&&a.Uint8Array&&function(a){var b,d,e,f,g,h;a.split(",")[0].indexOf("base64")>=0?b=atob(a.split(",")[1]):b=decodeURIComponent(a.split(",")[1]),d=new ArrayBuffer(b.length),e=new Uint8Array(d);for(f=0;f<b.length;f+=1)e[f]=b.charCodeAt(f);return g=new c,g.append(d),h=a.split(",")[0].split(":")[1].split(";")[0],g.getBlob(h)};a.HTMLCanvasElement&&!b.toBlob&&(b.mozGetAsFile?b.toBlob=function(a,b){a(this.mozGetAsFile("blob",b))}:b.toDataURL&&d&&(b.toBlob=function(a,b){a(d(this.toDataURL(b)))})),typeof define!="undefined"&&define.amd?define(function(){return d}):a.dataURLtoBlob=d})(this); \ No newline at end of file
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/vendor/jquery.ui.widget.js b/mod/lightpics/vendors/jquery-file-upload/js/vendor/jquery.ui.widget.js
new file mode 100644
index 000000000..b980122a3
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/vendor/jquery.ui.widget.js
@@ -0,0 +1,282 @@
+/*
+ * jQuery UI Widget 1.8.22+amd
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2012, 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/Widget
+ */
+
+(function (factory) {
+ if (typeof define === "function" && define.amd) {
+ // Register as an anonymous AMD module:
+ define(["jquery"], factory);
+ } else {
+ // Browser globals:
+ factory(jQuery);
+ }
+}(function( $, undefined ) {
+
+// jQuery 1.4+
+if ( $.cleanData ) {
+ var _cleanData = $.cleanData;
+ $.cleanData = function( elems ) {
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ try {
+ $( elem ).triggerHandler( "remove" );
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ }
+ _cleanData( elems );
+ };
+} else {
+ var _remove = $.fn.remove;
+ $.fn.remove = function( selector, keepData ) {
+ return this.each(function() {
+ if ( !keepData ) {
+ if ( !selector || $.filter( selector, [ this ] ).length ) {
+ $( "*", this ).add( [ this ] ).each(function() {
+ try {
+ $( this ).triggerHandler( "remove" );
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ });
+ }
+ }
+ return _remove.call( $(this), selector, keepData );
+ });
+ };
+}
+
+$.widget = function( name, base, prototype ) {
+ var namespace = name.split( "." )[ 0 ],
+ fullName;
+ name = name.split( "." )[ 1 ];
+ fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[ ":" ][ fullName ] = function( elem ) {
+ return !!$.data( elem, name );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without initializing for simple inheritance
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+
+ var basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+// $.each( basePrototype, function( key, val ) {
+// if ( $.isPlainObject(val) ) {
+// basePrototype[ key ] = $.extend( {}, val );
+// }
+// });
+ basePrototype.options = $.extend( true, {}, basePrototype.options );
+ $[ namespace ][ name ].prototype = $.extend( true, basePrototype, {
+ namespace: namespace,
+ widgetName: name,
+ widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name,
+ widgetBaseClass: fullName
+ }, prototype );
+
+ $.widget.bridge( name, $[ namespace ][ name ] );
+};
+
+$.widget.bridge = function( name, object ) {
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string",
+ args = Array.prototype.slice.call( arguments, 1 ),
+ returnValue = this;
+
+ // allow multiple hashes to be passed on init
+ options = !isMethodCall && args.length ?
+ $.extend.apply( null, [ true, options ].concat(args) ) :
+ options;
+
+ // prevent calls to internal methods
+ if ( isMethodCall && options.charAt( 0 ) === "_" ) {
+ return returnValue;
+ }
+
+ if ( isMethodCall ) {
+ this.each(function() {
+ var instance = $.data( this, name ),
+ methodValue = instance && $.isFunction( instance[options] ) ?
+ instance[ options ].apply( instance, args ) :
+ instance;
+ // TODO: add this back in 1.9 and use $.error() (see #5972)
+// if ( !instance ) {
+// throw "cannot call methods on " + name + " prior to initialization; " +
+// "attempted to call method '" + options + "'";
+// }
+// if ( !$.isFunction( instance[options] ) ) {
+// throw "no such method '" + options + "' for " + name + " widget instance";
+// }
+// var methodValue = instance[ options ].apply( instance, args );
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue;
+ return false;
+ }
+ });
+ } else {
+ this.each(function() {
+ var instance = $.data( this, name );
+ if ( instance ) {
+ instance.option( options || {} )._init();
+ } else {
+ $.data( this, name, new object( options, this ) );
+ }
+ });
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( options, element ) {
+ // allow instantiation without initializing for simple inheritance
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+};
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ options: {
+ disabled: false
+ },
+ _createWidget: function( options, element ) {
+ // $.widget.bridge stores the plugin instance, but we do it anyway
+ // so that it's stored even before the _create function runs
+ $.data( element, this.widgetName, this );
+ this.element = $( element );
+ this.options = $.extend( true, {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ var self = this;
+ this.element.bind( "remove." + this.widgetName, function() {
+ self.destroy();
+ });
+
+ this._create();
+ this._trigger( "create" );
+ this._init();
+ },
+ _getCreateOptions: function() {
+ return $.metadata && $.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( key, value ) {
+ var options = key;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.extend( {}, this.options );
+ }
+
+ if (typeof key === "string" ) {
+ if ( value === undefined ) {
+ return this.options[ key ];
+ }
+ options = {};
+ options[ key ] = value;
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var self = this;
+ $.each( options, function( key, value ) {
+ self._setOption( key, value );
+ });
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ [ value ? "addClass" : "removeClass"](
+ this.widgetBaseClass + "-disabled" + " " +
+ "ui-state-disabled" )
+ .attr( "aria-disabled", value );
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOption( "disabled", false );
+ },
+ disable: function() {
+ return this._setOption( "disabled", true );
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig,
+ callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+
+ return !( $.isFunction(callback) &&
+ callback.call( this.element[0], event, data ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+}));
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/vendor/load-image.min.js b/mod/lightpics/vendors/jquery-file-upload/js/vendor/load-image.min.js
new file mode 100644
index 000000000..0f7ab3ffe
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/vendor/load-image.min.js
@@ -0,0 +1 @@
+(function(a){"use strict";var b=function(a,c,d){var e=document.createElement("img"),f,g;return e.onerror=c,e.onload=function(){g&&(!d||!d.noRevoke)&&b.revokeObjectURL(g),c(b.scale(e,d))},window.Blob&&a instanceof Blob||window.File&&a instanceof File?f=g=b.createObjectURL(a):f=a,f?(e.src=f,e):b.readFile(a,function(a){e.src=a})},c=window.createObjectURL&&window||window.URL&&URL.revokeObjectURL&&URL||window.webkitURL&&webkitURL;b.scale=function(a,b){b=b||{};var c=document.createElement("canvas"),d=a.width,e=a.height,f=Math.max((b.minWidth||d)/d,(b.minHeight||e)/e);return f>1&&(d=parseInt(d*f,10),e=parseInt(e*f,10)),f=Math.min((b.maxWidth||d)/d,(b.maxHeight||e)/e),f<1&&(d=parseInt(d*f,10),e=parseInt(e*f,10)),a.getContext||b.canvas&&c.getContext?(c.width=d,c.height=e,c.getContext("2d").drawImage(a,0,0,d,e),c):(a.width=d,a.height=e,a)},b.createObjectURL=function(a){return c?c.createObjectURL(a):!1},b.revokeObjectURL=function(a){return c?c.revokeObjectURL(a):!1},b.readFile=function(a,b){if(window.FileReader&&FileReader.prototype.readAsDataURL){var c=new FileReader;return c.onload=function(a){b(a.target.result)},c.readAsDataURL(a),c}return!1},typeof define!="undefined"&&define.amd?define(function(){return b}):a.loadImage=b})(this); \ No newline at end of file
diff --git a/mod/lightpics/vendors/jquery-file-upload/js/vendor/tmpl.min.js b/mod/lightpics/vendors/jquery-file-upload/js/vendor/tmpl.min.js
new file mode 100644
index 000000000..065532e7c
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/js/vendor/tmpl.min.js
@@ -0,0 +1 @@
+(function(a){"use strict";var b=function(a,c){var d=/[^\w\-\.:]/.test(a)?new Function(b.arg+",tmpl","var _e=tmpl.encode"+b.helper+",_s='"+a.replace(b.regexp,b.func)+"';return _s;"):b.cache[a]=b.cache[a]||b(b.load(a));return c?d(c,b):function(a){return d(a,b)}};b.cache={},b.load=function(a){return document.getElementById(a).innerHTML},b.regexp=/([\s'\\])(?![^%]*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g,b.func=function(a,b,c,d,e,f){if(b)return{"\n":"\\n","\r":"\\r","\t":"\\t"," ":" "}[a]||"\\"+a;if(c)return c==="="?"'+_e("+d+")+'":"'+("+d+"||'')+'";if(e)return"';";if(f)return"_s+='"},b.encReg=/[<>&"'\x00]/g,b.encMap={"<":"&lt;",">":"&gt;","&":"&amp;",'"':"&quot;","'":"&#39;"},b.encode=function(a){return String(a||"").replace(b.encReg,function(a){return b.encMap[a]||""})},b.arg="o",b.helper=",print=function(s,e){_s+=e&&(s||'')||_e(s);},include=function(s,d){_s+=tmpl(s,d);}",typeof define=="function"&&define.amd?define(function(){return b}):a.tmpl=b})(this); \ No newline at end of file
diff --git a/mod/lightpics/vendors/jquery-file-upload/package.json b/mod/lightpics/vendors/jquery-file-upload/package.json
new file mode 100644
index 000000000..56f9d5f25
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "blueimp-file-upload-jquery-ui",
+ "version": "6.9.2",
+ "title": "jQuery File Upload - jQuery UI version",
+ "description": "File Upload widget with multiple file selection, drag&drop support, progress bars and preview images for jQuery. Supports cross-domain, chunked and resumable file uploads and client-side image resizing. Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.",
+ "keywords": [
+ "jquery",
+ "file",
+ "upload",
+ "widget",
+ "multiple",
+ "selection",
+ "drag",
+ "drop",
+ "progress",
+ "preview",
+ "cross-domain",
+ "cross-site",
+ "chunk",
+ "resume",
+ "gae",
+ "go",
+ "python",
+ "php",
+ "ui"
+ ],
+ "homepage": "https://github.com/blueimp/jQuery-File-Upload",
+ "author": {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ },
+ "maintainers": [
+ {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/blueimp/jQuery-File-Upload.git"
+ },
+ "bugs": "https://github.com/blueimp/jQuery-File-Upload/issues",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://www.opensource.org/licenses/MIT"
+ }
+ ],
+ "dependencies": {
+ "jquery": ">=1.6",
+ "jquery.ui": ">=1.8",
+ "blueimp-tmpl": ">=2.1.0",
+ "blueimp-load-image": ">=1.1.6",
+ "blueimp-canvas-to-blob": ">=2.0.0"
+ }
+}
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/gae-go/app.yaml b/mod/lightpics/vendors/jquery-file-upload/server/gae-go/app.yaml
new file mode 100644
index 000000000..2d09daa56
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/gae-go/app.yaml
@@ -0,0 +1,12 @@
+application: jquery-file-upload
+version: 2
+runtime: go
+api_version: go1
+
+handlers:
+- url: /(favicon\.ico|robots\.txt)
+ static_files: static/\1
+ upload: static/(.*)
+ expiration: '1d'
+- url: /.*
+ script: _go_app
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/gae-go/app/main.go b/mod/lightpics/vendors/jquery-file-upload/server/gae-go/app/main.go
new file mode 100644
index 000000000..01dc2f204
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/gae-go/app/main.go
@@ -0,0 +1,361 @@
+/*
+ * jQuery File Upload Plugin GAE Go Example 2.0
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2011, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+package app
+
+import (
+ "appengine"
+ "appengine/blobstore"
+ "appengine/memcache"
+ "appengine/taskqueue"
+ "bytes"
+ "encoding/base64"
+ "encoding/json"
+ "fmt"
+ "image"
+ "image/png"
+ "io"
+ "log"
+ "mime/multipart"
+ "net/http"
+ "net/url"
+ "regexp"
+ "resize"
+ "strings"
+ "time"
+)
+
+import _ "image/gif"
+import _ "image/jpeg"
+
+const (
+ WEBSITE = "http://blueimp.github.com/jQuery-File-Upload/"
+ MIN_FILE_SIZE = 1 // bytes
+ MAX_FILE_SIZE = 5000000 // bytes
+ IMAGE_TYPES = "image/(gif|p?jpeg|(x-)?png)"
+ ACCEPT_FILE_TYPES = IMAGE_TYPES
+ EXPIRATION_TIME = 300 // seconds
+ THUMBNAIL_MAX_WIDTH = 80
+ THUMBNAIL_MAX_HEIGHT = THUMBNAIL_MAX_WIDTH
+)
+
+var (
+ imageTypes = regexp.MustCompile(IMAGE_TYPES)
+ acceptFileTypes = regexp.MustCompile(ACCEPT_FILE_TYPES)
+)
+
+type FileInfo struct {
+ Key appengine.BlobKey `json:"-"`
+ Url string `json:"url,omitempty"`
+ ThumbnailUrl string `json:"thumbnail_url,omitempty"`
+ Name string `json:"name"`
+ Type string `json:"type"`
+ Size int64 `json:"size"`
+ Error string `json:"error,omitempty"`
+ DeleteUrl string `json:"delete_url,omitempty"`
+ DeleteType string `json:"delete_type,omitempty"`
+}
+
+func (fi *FileInfo) ValidateType() (valid bool) {
+ if acceptFileTypes.MatchString(fi.Type) {
+ return true
+ }
+ fi.Error = "acceptFileTypes"
+ return false
+}
+
+func (fi *FileInfo) ValidateSize() (valid bool) {
+ if fi.Size < MIN_FILE_SIZE {
+ fi.Error = "minFileSize"
+ } else if fi.Size > MAX_FILE_SIZE {
+ fi.Error = "maxFileSize"
+ } else {
+ return true
+ }
+ return false
+}
+
+func (fi *FileInfo) CreateUrls(r *http.Request, c appengine.Context) {
+ u := &url.URL{
+ Scheme: r.URL.Scheme,
+ Host: appengine.DefaultVersionHostname(c),
+ Path: "/",
+ }
+ uString := u.String()
+ fi.Url = uString + escape(string(fi.Key)) + "/" +
+ escape(string(fi.Name))
+ fi.DeleteUrl = fi.Url
+ fi.DeleteType = "DELETE"
+ if fi.ThumbnailUrl != "" && -1 == strings.Index(
+ r.Header.Get("Accept"),
+ "application/json",
+ ) {
+ fi.ThumbnailUrl = uString + "thumbnails/" +
+ escape(string(fi.Key))
+ }
+}
+
+func (fi *FileInfo) CreateThumbnail(r io.Reader, c appengine.Context) (data []byte, err error) {
+ defer func() {
+ if rec := recover(); rec != nil {
+ log.Println(rec)
+ // 1x1 pixel transparent GIf, bas64 encoded:
+ s := "R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="
+ data, _ = base64.StdEncoding.DecodeString(s)
+ fi.ThumbnailUrl = "data:image/gif;base64," + s
+ }
+ memcache.Add(c, &memcache.Item{
+ Key: string(fi.Key),
+ Value: data,
+ Expiration: EXPIRATION_TIME,
+ })
+ }()
+ img, _, err := image.Decode(r)
+ check(err)
+ if bounds := img.Bounds(); bounds.Dx() > THUMBNAIL_MAX_WIDTH ||
+ bounds.Dy() > THUMBNAIL_MAX_HEIGHT {
+ w, h := THUMBNAIL_MAX_WIDTH, THUMBNAIL_MAX_HEIGHT
+ if bounds.Dx() > bounds.Dy() {
+ h = bounds.Dy() * h / bounds.Dx()
+ } else {
+ w = bounds.Dx() * w / bounds.Dy()
+ }
+ img = resize.Resize(img, img.Bounds(), w, h)
+ }
+ var b bytes.Buffer
+ err = png.Encode(&b, img)
+ check(err)
+ data = b.Bytes()
+ fi.ThumbnailUrl = "data:image/png;base64," +
+ base64.StdEncoding.EncodeToString(data)
+ return
+}
+
+func check(err error) {
+ if err != nil {
+ panic(err)
+ }
+}
+
+func escape(s string) string {
+ return strings.Replace(url.QueryEscape(s), "+", "%20", -1)
+}
+
+func delayedDelete(c appengine.Context, fi *FileInfo) {
+ if key := string(fi.Key); key != "" {
+ task := &taskqueue.Task{
+ Path: "/" + escape(key) + "/-",
+ Method: "DELETE",
+ Delay: time.Duration(EXPIRATION_TIME) * time.Second,
+ }
+ taskqueue.Add(c, task, "")
+ }
+}
+
+func handleUpload(r *http.Request, p *multipart.Part) (fi *FileInfo) {
+ fi = &FileInfo{
+ Name: p.FileName(),
+ Type: p.Header.Get("Content-Type"),
+ }
+ if !fi.ValidateType() {
+ return
+ }
+ defer func() {
+ if rec := recover(); rec != nil {
+ log.Println(rec)
+ fi.Error = rec.(error).Error()
+ }
+ }()
+ var b bytes.Buffer
+ lr := &io.LimitedReader{R: p, N: MAX_FILE_SIZE + 1}
+ context := appengine.NewContext(r)
+ w, err := blobstore.Create(context, fi.Type)
+ defer func() {
+ w.Close()
+ fi.Size = MAX_FILE_SIZE + 1 - lr.N
+ fi.Key, err = w.Key()
+ check(err)
+ if !fi.ValidateSize() {
+ err := blobstore.Delete(context, fi.Key)
+ check(err)
+ return
+ }
+ delayedDelete(context, fi)
+ if b.Len() > 0 {
+ fi.CreateThumbnail(&b, context)
+ }
+ fi.CreateUrls(r, context)
+ }()
+ check(err)
+ var wr io.Writer = w
+ if imageTypes.MatchString(fi.Type) {
+ wr = io.MultiWriter(&b, w)
+ }
+ _, err = io.Copy(wr, lr)
+ return
+}
+
+func getFormValue(p *multipart.Part) string {
+ var b bytes.Buffer
+ io.CopyN(&b, p, int64(1<<20)) // Copy max: 1 MiB
+ return b.String()
+}
+
+func handleUploads(r *http.Request) (fileInfos []*FileInfo) {
+ fileInfos = make([]*FileInfo, 0)
+ mr, err := r.MultipartReader()
+ check(err)
+ r.Form, err = url.ParseQuery(r.URL.RawQuery)
+ check(err)
+ part, err := mr.NextPart()
+ for err == nil {
+ if name := part.FormName(); name != "" {
+ if part.FileName() != "" {
+ fileInfos = append(fileInfos, handleUpload(r, part))
+ } else {
+ r.Form[name] = append(r.Form[name], getFormValue(part))
+ }
+ }
+ part, err = mr.NextPart()
+ }
+ return
+}
+
+func get(w http.ResponseWriter, r *http.Request) {
+ if r.URL.Path == "/" {
+ http.Redirect(w, r, WEBSITE, http.StatusFound)
+ return
+ }
+ parts := strings.Split(r.URL.Path, "/")
+ if len(parts) == 3 {
+ if key := parts[1]; key != "" {
+ blobKey := appengine.BlobKey(key)
+ bi, err := blobstore.Stat(appengine.NewContext(r), blobKey)
+ if err == nil {
+ w.Header().Add(
+ "Cache-Control",
+ fmt.Sprintf("public,max-age=%d", EXPIRATION_TIME),
+ )
+ if imageTypes.MatchString(bi.ContentType) {
+ w.Header().Add("X-Content-Type-Options", "nosniff")
+ } else {
+ w.Header().Add("Content-Type", "application/octet-stream")
+ w.Header().Add(
+ "Content-Disposition:",
+ fmt.Sprintf("attachment; filename=%s;", parts[2]),
+ )
+ }
+ blobstore.Send(w, appengine.BlobKey(key))
+ return
+ }
+ }
+ }
+ http.Error(w, "404 Not Found", http.StatusNotFound)
+}
+
+func post(w http.ResponseWriter, r *http.Request) {
+ b, err := json.Marshal(handleUploads(r))
+ check(err)
+ if redirect := r.FormValue("redirect"); redirect != "" {
+ http.Redirect(w, r, fmt.Sprintf(
+ redirect,
+ escape(string(b)),
+ ), http.StatusFound)
+ return
+ }
+ jsonType := "application/json"
+ if strings.Index(r.Header.Get("Accept"), jsonType) != -1 {
+ w.Header().Set("Content-Type", jsonType)
+ }
+ fmt.Fprintln(w, string(b))
+}
+
+func delete(w http.ResponseWriter, r *http.Request) {
+ parts := strings.Split(r.URL.Path, "/")
+ if len(parts) != 3 {
+ return
+ }
+ if key := parts[1]; key != "" {
+ c := appengine.NewContext(r)
+ blobstore.Delete(c, appengine.BlobKey(key))
+ memcache.Delete(c, key)
+ }
+}
+
+func serveThumbnail(w http.ResponseWriter, r *http.Request) {
+ parts := strings.Split(r.URL.Path, "/")
+ if len(parts) == 3 {
+ if key := parts[2]; key != "" {
+ var data []byte
+ c := appengine.NewContext(r)
+ item, err := memcache.Get(c, key)
+ if err == nil {
+ data = item.Value
+ } else {
+ blobKey := appengine.BlobKey(key)
+ if _, err = blobstore.Stat(c, blobKey); err == nil {
+ fi := FileInfo{Key: blobKey}
+ data, _ = fi.CreateThumbnail(
+ blobstore.NewReader(c, blobKey),
+ c,
+ )
+ }
+ }
+ if err == nil && len(data) > 3 {
+ w.Header().Add(
+ "Cache-Control",
+ fmt.Sprintf("public,max-age=%d", EXPIRATION_TIME),
+ )
+ contentType := "image/png"
+ if string(data[:3]) == "GIF" {
+ contentType = "image/gif"
+ } else if string(data[1:4]) != "PNG" {
+ contentType = "image/jpeg"
+ }
+ w.Header().Set("Content-Type", contentType)
+ fmt.Fprintln(w, string(data))
+ return
+ }
+ }
+ }
+ http.Error(w, "404 Not Found", http.StatusNotFound)
+}
+
+func handle(w http.ResponseWriter, r *http.Request) {
+ params, err := url.ParseQuery(r.URL.RawQuery)
+ check(err)
+ w.Header().Add("Access-Control-Allow-Origin", "*")
+ w.Header().Add(
+ "Access-Control-Allow-Methods",
+ "OPTIONS, HEAD, GET, POST, PUT, DELETE",
+ )
+ switch r.Method {
+ case "OPTIONS":
+ case "HEAD":
+ case "GET":
+ get(w, r)
+ case "POST":
+ if len(params["_method"]) > 0 && params["_method"][0] == "DELETE" {
+ delete(w, r)
+ } else {
+ post(w, r)
+ }
+ case "DELETE":
+ delete(w, r)
+ default:
+ http.Error(w, "501 Not Implemented", http.StatusNotImplemented)
+ }
+}
+
+func init() {
+ http.HandleFunc("/", handle)
+ http.HandleFunc("/thumbnails/", serveThumbnail)
+}
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/gae-go/resize/resize.go b/mod/lightpics/vendors/jquery-file-upload/server/gae-go/resize/resize.go
new file mode 100644
index 000000000..dcb627870
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/gae-go/resize/resize.go
@@ -0,0 +1,247 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package resize
+
+import (
+ "image"
+ "image/color"
+)
+
+// Resize returns a scaled copy of the image slice r of m.
+// The returned image has width w and height h.
+func Resize(m image.Image, r image.Rectangle, w, h int) image.Image {
+ if w < 0 || h < 0 {
+ return nil
+ }
+ if w == 0 || h == 0 || r.Dx() <= 0 || r.Dy() <= 0 {
+ return image.NewRGBA64(image.Rect(0, 0, w, h))
+ }
+ switch m := m.(type) {
+ case *image.RGBA:
+ return resizeRGBA(m, r, w, h)
+ case *image.YCbCr:
+ if m, ok := resizeYCbCr(m, r, w, h); ok {
+ return m
+ }
+ }
+ ww, hh := uint64(w), uint64(h)
+ dx, dy := uint64(r.Dx()), uint64(r.Dy())
+ // The scaling algorithm is to nearest-neighbor magnify the dx * dy source
+ // to a (ww*dx) * (hh*dy) intermediate image and then minify the intermediate
+ // image back down to a ww * hh destination with a simple box filter.
+ // The intermediate image is implied, we do not physically allocate a slice
+ // of length ww*dx*hh*dy.
+ // For example, consider a 4*3 source image. Label its pixels from a-l:
+ // abcd
+ // efgh
+ // ijkl
+ // To resize this to a 3*2 destination image, the intermediate is 12*6.
+ // Whitespace has been added to delineate the destination pixels:
+ // aaab bbcc cddd
+ // aaab bbcc cddd
+ // eeef ffgg ghhh
+ //
+ // eeef ffgg ghhh
+ // iiij jjkk klll
+ // iiij jjkk klll
+ // Thus, the 'b' source pixel contributes one third of its value to the
+ // (0, 0) destination pixel and two thirds to (1, 0).
+ // The implementation is a two-step process. First, the source pixels are
+ // iterated over and each source pixel's contribution to 1 or more
+ // destination pixels are summed. Second, the sums are divided by a scaling
+ // factor to yield the destination pixels.
+ // TODO: By interleaving the two steps, instead of doing all of
+ // step 1 first and all of step 2 second, we could allocate a smaller sum
+ // slice of length 4*w*2 instead of 4*w*h, although the resultant code
+ // would become more complicated.
+ n, sum := dx*dy, make([]uint64, 4*w*h)
+ for y := r.Min.Y; y < r.Max.Y; y++ {
+ for x := r.Min.X; x < r.Max.X; x++ {
+ // Get the source pixel.
+ r32, g32, b32, a32 := m.At(x, y).RGBA()
+ r64 := uint64(r32)
+ g64 := uint64(g32)
+ b64 := uint64(b32)
+ a64 := uint64(a32)
+ // Spread the source pixel over 1 or more destination rows.
+ py := uint64(y) * hh
+ for remy := hh; remy > 0; {
+ qy := dy - (py % dy)
+ if qy > remy {
+ qy = remy
+ }
+ // Spread the source pixel over 1 or more destination columns.
+ px := uint64(x) * ww
+ index := 4 * ((py/dy)*ww + (px / dx))
+ for remx := ww; remx > 0; {
+ qx := dx - (px % dx)
+ if qx > remx {
+ qx = remx
+ }
+ sum[index+0] += r64 * qx * qy
+ sum[index+1] += g64 * qx * qy
+ sum[index+2] += b64 * qx * qy
+ sum[index+3] += a64 * qx * qy
+ index += 4
+ px += qx
+ remx -= qx
+ }
+ py += qy
+ remy -= qy
+ }
+ }
+ }
+ return average(sum, w, h, n*0x0101)
+}
+
+// average convert the sums to averages and returns the result.
+func average(sum []uint64, w, h int, n uint64) image.Image {
+ ret := image.NewRGBA(image.Rect(0, 0, w, h))
+ for y := 0; y < h; y++ {
+ for x := 0; x < w; x++ {
+ index := 4 * (y*w + x)
+ ret.SetRGBA(x, y, color.RGBA{
+ uint8(sum[index+0] / n),
+ uint8(sum[index+1] / n),
+ uint8(sum[index+2] / n),
+ uint8(sum[index+3] / n),
+ })
+ }
+ }
+ return ret
+}
+
+// resizeYCbCr returns a scaled copy of the YCbCr image slice r of m.
+// The returned image has width w and height h.
+func resizeYCbCr(m *image.YCbCr, r image.Rectangle, w, h int) (image.Image, bool) {
+ var verticalRes int
+ switch m.SubsampleRatio {
+ case image.YCbCrSubsampleRatio420:
+ verticalRes = 2
+ case image.YCbCrSubsampleRatio422:
+ verticalRes = 1
+ default:
+ return nil, false
+ }
+ ww, hh := uint64(w), uint64(h)
+ dx, dy := uint64(r.Dx()), uint64(r.Dy())
+ // See comment in Resize.
+ n, sum := dx*dy, make([]uint64, 4*w*h)
+ for y := r.Min.Y; y < r.Max.Y; y++ {
+ Y := m.Y[y*m.YStride:]
+ Cb := m.Cb[y/verticalRes*m.CStride:]
+ Cr := m.Cr[y/verticalRes*m.CStride:]
+ for x := r.Min.X; x < r.Max.X; x++ {
+ // Get the source pixel.
+ r8, g8, b8 := color.YCbCrToRGB(Y[x], Cb[x/2], Cr[x/2])
+ r64 := uint64(r8)
+ g64 := uint64(g8)
+ b64 := uint64(b8)
+ // Spread the source pixel over 1 or more destination rows.
+ py := uint64(y) * hh
+ for remy := hh; remy > 0; {
+ qy := dy - (py % dy)
+ if qy > remy {
+ qy = remy
+ }
+ // Spread the source pixel over 1 or more destination columns.
+ px := uint64(x) * ww
+ index := 4 * ((py/dy)*ww + (px / dx))
+ for remx := ww; remx > 0; {
+ qx := dx - (px % dx)
+ if qx > remx {
+ qx = remx
+ }
+ qxy := qx * qy
+ sum[index+0] += r64 * qxy
+ sum[index+1] += g64 * qxy
+ sum[index+2] += b64 * qxy
+ sum[index+3] += 0xFFFF * qxy
+ index += 4
+ px += qx
+ remx -= qx
+ }
+ py += qy
+ remy -= qy
+ }
+ }
+ }
+ return average(sum, w, h, n), true
+}
+
+// resizeRGBA returns a scaled copy of the RGBA image slice r of m.
+// The returned image has width w and height h.
+func resizeRGBA(m *image.RGBA, r image.Rectangle, w, h int) image.Image {
+ ww, hh := uint64(w), uint64(h)
+ dx, dy := uint64(r.Dx()), uint64(r.Dy())
+ // See comment in Resize.
+ n, sum := dx*dy, make([]uint64, 4*w*h)
+ for y := r.Min.Y; y < r.Max.Y; y++ {
+ pixOffset := m.PixOffset(r.Min.X, y)
+ for x := r.Min.X; x < r.Max.X; x++ {
+ // Get the source pixel.
+ r64 := uint64(m.Pix[pixOffset+0])
+ g64 := uint64(m.Pix[pixOffset+1])
+ b64 := uint64(m.Pix[pixOffset+2])
+ a64 := uint64(m.Pix[pixOffset+3])
+ pixOffset += 4
+ // Spread the source pixel over 1 or more destination rows.
+ py := uint64(y) * hh
+ for remy := hh; remy > 0; {
+ qy := dy - (py % dy)
+ if qy > remy {
+ qy = remy
+ }
+ // Spread the source pixel over 1 or more destination columns.
+ px := uint64(x) * ww
+ index := 4 * ((py/dy)*ww + (px / dx))
+ for remx := ww; remx > 0; {
+ qx := dx - (px % dx)
+ if qx > remx {
+ qx = remx
+ }
+ qxy := qx * qy
+ sum[index+0] += r64 * qxy
+ sum[index+1] += g64 * qxy
+ sum[index+2] += b64 * qxy
+ sum[index+3] += a64 * qxy
+ index += 4
+ px += qx
+ remx -= qx
+ }
+ py += qy
+ remy -= qy
+ }
+ }
+ }
+ return average(sum, w, h, n)
+}
+
+// Resample returns a resampled copy of the image slice r of m.
+// The returned image has width w and height h.
+func Resample(m image.Image, r image.Rectangle, w, h int) image.Image {
+ if w < 0 || h < 0 {
+ return nil
+ }
+ if w == 0 || h == 0 || r.Dx() <= 0 || r.Dy() <= 0 {
+ return image.NewRGBA64(image.Rect(0, 0, w, h))
+ }
+ curw, curh := r.Dx(), r.Dy()
+ img := image.NewRGBA(image.Rect(0, 0, w, h))
+ for y := 0; y < h; y++ {
+ for x := 0; x < w; x++ {
+ // Get a source pixel.
+ subx := x * curw / w
+ suby := y * curh / h
+ r32, g32, b32, a32 := m.At(subx, suby).RGBA()
+ r := uint8(r32 >> 8)
+ g := uint8(g32 >> 8)
+ b := uint8(b32 >> 8)
+ a := uint8(a32 >> 8)
+ img.SetRGBA(x, y, color.RGBA{r, g, b, a})
+ }
+ }
+ return img
+}
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/favicon.ico b/mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/favicon.ico
new file mode 100644
index 000000000..1a71ea772
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/favicon.ico
Binary files differ
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/robots.txt b/mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/robots.txt
new file mode 100644
index 000000000..eb0536286
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/gae-go/static/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/gae-python/app.yaml b/mod/lightpics/vendors/jquery-file-upload/server/gae-python/app.yaml
new file mode 100644
index 000000000..5fe123f59
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/gae-python/app.yaml
@@ -0,0 +1,16 @@
+application: jquery-file-upload
+version: 1
+runtime: python27
+api_version: 1
+threadsafe: true
+
+builtins:
+- deferred: on
+
+handlers:
+- url: /(favicon\.ico|robots\.txt)
+ static_files: static/\1
+ upload: static/(.*)
+ expiration: '1d'
+- url: /.*
+ script: main.app
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/gae-python/main.py b/mod/lightpics/vendors/jquery-file-upload/server/gae-python/main.py
new file mode 100644
index 000000000..37218c827
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/gae-python/main.py
@@ -0,0 +1,149 @@
+# -*- coding: utf-8 -*-
+#
+# jQuery File Upload Plugin GAE Python Example 1.1.4
+# https://github.com/blueimp/jQuery-File-Upload
+#
+# Copyright 2011, Sebastian Tschan
+# https://blueimp.net
+#
+# Licensed under the MIT license:
+# http://www.opensource.org/licenses/MIT
+#
+
+from __future__ import with_statement
+from google.appengine.api import files, images
+from google.appengine.ext import blobstore, deferred
+from google.appengine.ext.webapp import blobstore_handlers
+import json, re, urllib, webapp2
+
+WEBSITE = 'http://blueimp.github.com/jQuery-File-Upload/'
+MIN_FILE_SIZE = 1 # bytes
+MAX_FILE_SIZE = 5000000 # bytes
+IMAGE_TYPES = re.compile('image/(gif|p?jpeg|(x-)?png)')
+ACCEPT_FILE_TYPES = IMAGE_TYPES
+THUMBNAIL_MODIFICATOR = '=s80' # max width / height
+EXPIRATION_TIME = 300 # seconds
+
+def cleanup(blob_keys):
+ blobstore.delete(blob_keys)
+
+class UploadHandler(webapp2.RequestHandler):
+
+ def initialize(self, request, response):
+ super(UploadHandler, self).initialize(request, response)
+ self.response.headers['Access-Control-Allow-Origin'] = '*'
+ self.response.headers[
+ 'Access-Control-Allow-Methods'
+ ] = 'OPTIONS, HEAD, GET, POST, PUT, DELETE'
+
+ def validate(self, file):
+ if file['size'] < MIN_FILE_SIZE:
+ file['error'] = 'minFileSize'
+ elif file['size'] > MAX_FILE_SIZE:
+ file['error'] = 'maxFileSize'
+ elif not ACCEPT_FILE_TYPES.match(file['type']):
+ file['error'] = 'acceptFileTypes'
+ else:
+ return True
+ return False
+
+ def get_file_size(self, file):
+ file.seek(0, 2) # Seek to the end of the file
+ size = file.tell() # Get the position of EOF
+ file.seek(0) # Reset the file position to the beginning
+ return size
+
+ def write_blob(self, data, info):
+ blob = files.blobstore.create(
+ mime_type=info['type'],
+ _blobinfo_uploaded_filename=info['name']
+ )
+ with files.open(blob, 'a') as f:
+ f.write(data)
+ files.finalize(blob)
+ return files.blobstore.get_blob_key(blob)
+
+ def handle_upload(self):
+ results = []
+ blob_keys = []
+ for name, fieldStorage in self.request.POST.items():
+ if type(fieldStorage) is unicode:
+ continue
+ result = {}
+ result['name'] = re.sub(r'^.*\\', '',
+ fieldStorage.filename)
+ result['type'] = fieldStorage.type
+ result['size'] = self.get_file_size(fieldStorage.file)
+ if self.validate(result):
+ blob_key = str(
+ self.write_blob(fieldStorage.value, result)
+ )
+ blob_keys.append(blob_key)
+ result['delete_type'] = 'DELETE'
+ result['delete_url'] = self.request.host_url +\
+ '/?key=' + urllib.quote(blob_key, '')
+ if (IMAGE_TYPES.match(result['type'])):
+ try:
+ result['url'] = images.get_serving_url(
+ blob_key,
+ secure_url=self.request.host_url\
+ .startswith('https')
+ )
+ result['thumbnail_url'] = result['url'] +\
+ THUMBNAIL_MODIFICATOR
+ except: # Could not get an image serving url
+ pass
+ if not 'url' in result:
+ result['url'] = self.request.host_url +\
+ '/' + blob_key + '/' + urllib.quote(
+ result['name'].encode('utf-8'), '')
+ results.append(result)
+ deferred.defer(
+ cleanup,
+ blob_keys,
+ _countdown=EXPIRATION_TIME
+ )
+ return results
+
+ def options(self):
+ pass
+
+ def head(self):
+ pass
+
+ def get(self):
+ self.redirect(WEBSITE)
+
+ def post(self):
+ if (self.request.get('_method') == 'DELETE'):
+ return self.delete()
+ s = json.dumps(self.handle_upload(), separators=(',',':'))
+ redirect = self.request.get('redirect')
+ if redirect:
+ return self.redirect(str(
+ redirect.replace('%s', urllib.quote(s, ''), 1)
+ ))
+ if 'application/json' in self.request.headers.get('Accept'):
+ self.response.headers['Content-Type'] = 'application/json'
+ self.response.write(s)
+
+ def delete(self):
+ blobstore.delete(self.request.get('key') or '')
+
+class DownloadHandler(blobstore_handlers.BlobstoreDownloadHandler):
+ def get(self, key, filename):
+ if not blobstore.get(key):
+ self.error(404)
+ else:
+ # Cache for the expiration time:
+ self.response.headers['Cache-Control'] =\
+ 'public,max-age=%d' % EXPIRATION_TIME
+ self.send_blob(key, save_as=filename)
+
+app = webapp2.WSGIApplication(
+ [
+ ('/', UploadHandler),
+ ('/([^/]+)/([^/]+)', DownloadHandler)
+ ],
+ debug=True
+) \ No newline at end of file
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/favicon.ico b/mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/favicon.ico
new file mode 100644
index 000000000..1a71ea772
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/favicon.ico
Binary files differ
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/robots.txt b/mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/robots.txt
new file mode 100644
index 000000000..eb0536286
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/gae-python/static/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/node/.gitignore b/mod/lightpics/vendors/jquery-file-upload/server/node/.gitignore
new file mode 100644
index 000000000..9daa8247d
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/node/.gitignore
@@ -0,0 +1,2 @@
+.DS_Store
+node_modules
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/node/package.json b/mod/lightpics/vendors/jquery-file-upload/server/node/package.json
new file mode 100644
index 000000000..0e0c1aaae
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/node/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "blueimp-file-upload-node",
+ "version": "1.0.2",
+ "title": "jQuery File Upload Node.js example",
+ "description": "Node.js implementation example of a file upload handler for jQuery File Upload.",
+ "keywords": [
+ "file",
+ "upload",
+ "cross-domain",
+ "cross-site",
+ "node"
+ ],
+ "homepage": "https://github.com/blueimp/jQuery-File-Upload",
+ "author": {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ },
+ "maintainers": [
+ {
+ "name": "Sebastian Tschan",
+ "url": "https://blueimp.net"
+ }
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/blueimp/jQuery-File-Upload.git"
+ },
+ "bugs": "https://github.com/blueimp/jQuery-File-Upload/issues",
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://www.opensource.org/licenses/MIT"
+ }
+ ],
+ "dependencies": {
+ "formidable": ">=1.0.8",
+ "node-static": ">=0.5.9",
+ "imagemagick": ">=0.1.2"
+ },
+ "main": "server.js"
+}
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/node/public/files/thumbnail/.gitignore b/mod/lightpics/vendors/jquery-file-upload/server/node/public/files/thumbnail/.gitignore
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/node/public/files/thumbnail/.gitignore
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/node/server.js b/mod/lightpics/vendors/jquery-file-upload/server/node/server.js
new file mode 100755
index 000000000..f1bec542b
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/node/server.js
@@ -0,0 +1,285 @@
+#!/usr/bin/env node
+/*
+ * jQuery File Upload Plugin Node.js Example 1.0.2
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2012, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*jslint nomen: true, regexp: true, unparam: true */
+/*global require, __dirname, unescape */
+
+(function (port) {
+ 'use strict';
+ var path = require('path'),
+ fs = require('fs'),
+ // Since Node 0.8, .existsSync() moved from path to fs:
+ _existsSync = fs.existsSync || path.existsSync,
+ formidable = require('formidable'),
+ nodeStatic = require('node-static'),
+ imageMagick = require('imagemagick'),
+ options = {
+ tmpDir: __dirname + '/tmp',
+ publicDir: __dirname + '/public',
+ uploadDir: __dirname + '/public/files',
+ uploadUrl: '/files/',
+ maxPostSize: 500000000, // 500 MB
+ minFileSize: 1,
+ maxFileSize: 100000000, // 100 MB
+ acceptFileTypes: /.+/i,
+ // Files not matched by this regular expression force a download dialog,
+ // to prevent executing any scripts in the context of the service domain:
+ safeFileTypes: /\.(gif|jpe?g|png)$/i,
+ imageTypes: /\.(gif|jpe?g|png)$/i,
+ imageVersions: {
+ 'thumbnail': {
+ width: 80,
+ height: 80
+ }
+ },
+ accessControl: {
+ allowOrigin: '*',
+ allowMethods: 'OPTIONS, HEAD, GET, POST, PUT, DELETE'
+ },
+ /* Uncomment and edit this section to provide the service via HTTPS:
+ ssl: {
+ key: fs.readFileSync('/Applications/XAMPP/etc/ssl.key/server.key'),
+ cert: fs.readFileSync('/Applications/XAMPP/etc/ssl.crt/server.crt')
+ },
+ */
+ nodeStatic: {
+ cache: 3600 // seconds to cache served files
+ }
+ },
+ utf8encode = function (str) {
+ return unescape(encodeURIComponent(str));
+ },
+ fileServer = new nodeStatic.Server(options.publicDir, options.nodeStatic),
+ nameCountRegexp = /(?:(?: \(([\d]+)\))?(\.[^.]+))?$/,
+ nameCountFunc = function (s, index, ext) {
+ return ' (' + ((parseInt(index, 10) || 0) + 1) + ')' + (ext || '');
+ },
+ FileInfo = function (file) {
+ this.name = file.name;
+ this.size = file.size;
+ this.type = file.type;
+ this.delete_type = 'DELETE';
+ },
+ UploadHandler = function (req, res, callback) {
+ this.req = req;
+ this.res = res;
+ this.callback = callback;
+ },
+ serve = function (req, res) {
+ res.setHeader(
+ 'Access-Control-Allow-Origin',
+ options.accessControl.allowOrigin
+ );
+ res.setHeader(
+ 'Access-Control-Allow-Methods',
+ options.accessControl.allowMethods
+ );
+ var handleResult = function (result, redirect) {
+ if (redirect) {
+ res.writeHead(302, {
+ 'Location': redirect.replace(
+ /%s/,
+ encodeURIComponent(JSON.stringify(result))
+ )
+ });
+ res.end();
+ } else {
+ res.writeHead(200, {
+ 'Content-Type': req.headers.accept
+ .indexOf('application/json') !== -1 ?
+ 'application/json' : 'text/plain'
+ });
+ res.end(JSON.stringify(result));
+ }
+ },
+ setNoCacheHeaders = function () {
+ res.setHeader('Pragma', 'no-cache');
+ res.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate');
+ res.setHeader('Content-Disposition', 'inline; filename="files.json"');
+ },
+ handler = new UploadHandler(req, res, handleResult);
+ switch (req.method) {
+ case 'OPTIONS':
+ res.end();
+ break;
+ case 'HEAD':
+ case 'GET':
+ if (req.url === '/') {
+ setNoCacheHeaders();
+ if (req.method === 'GET') {
+ handler.get();
+ } else {
+ res.end();
+ }
+ } else {
+ fileServer.serve(req, res);
+ }
+ break;
+ case 'POST':
+ setNoCacheHeaders();
+ handler.post();
+ break;
+ case 'DELETE':
+ handler.destroy();
+ break;
+ default:
+ res.statusCode = 405;
+ res.end();
+ }
+ };
+ fileServer.respond = function (pathname, status, _headers, files, stat, req, res, finish) {
+ if (!options.safeFileTypes.test(files[0])) {
+ // Force a download dialog for unsafe file extensions:
+ res.setHeader(
+ 'Content-Disposition',
+ 'attachment; filename="' + utf8encode(path.basename(files[0])) + '"'
+ );
+ } else {
+ // Prevent Internet Explorer from MIME-sniffing the content-type:
+ res.setHeader('X-Content-Type-Options', 'nosniff');
+ }
+ nodeStatic.Server.prototype.respond
+ .call(this, pathname, status, _headers, files, stat, req, res, finish);
+ };
+ FileInfo.prototype.validate = function () {
+ if (options.minFileSize && options.minFileSize > this.size) {
+ this.error = 'minFileSize';
+ } else if (options.maxFileSize && options.maxFileSize < this.size) {
+ this.error = 'maxFileSize';
+ } else if (!options.acceptFileTypes.test(this.name)) {
+ this.error = 'acceptFileTypes';
+ }
+ return !this.error;
+ };
+ FileInfo.prototype.safeName = function () {
+ // Prevent directory traversal and creating hidden system files:
+ this.name = path.basename(this.name).replace(/^\.+/, '');
+ // Prevent overwriting existing files:
+ while (_existsSync(options.uploadDir + '/' + this.name)) {
+ this.name = this.name.replace(nameCountRegexp, nameCountFunc);
+ }
+ };
+ FileInfo.prototype.initUrls = function (req) {
+ if (!this.error) {
+ var that = this,
+ baseUrl = (options.ssl ? 'https:' : 'http:') +
+ '//' + req.headers.host + options.uploadUrl;
+ this.url = this.delete_url = baseUrl + encodeURIComponent(this.name);
+ Object.keys(options.imageVersions).forEach(function (version) {
+ if (_existsSync(
+ options.uploadDir + '/' + version + '/' + that.name
+ )) {
+ that[version + '_url'] = baseUrl + version + '/' +
+ encodeURIComponent(that.name);
+ }
+ });
+ }
+ };
+ UploadHandler.prototype.get = function () {
+ var handler = this,
+ files = [];
+ fs.readdir(options.uploadDir, function (err, list) {
+ list.forEach(function (name) {
+ var stats = fs.statSync(options.uploadDir + '/' + name),
+ fileInfo;
+ if (stats.isFile()) {
+ fileInfo = new FileInfo({
+ name: name,
+ size: stats.size
+ });
+ fileInfo.initUrls(handler.req);
+ files.push(fileInfo);
+ }
+ });
+ handler.callback(files);
+ });
+ };
+ UploadHandler.prototype.post = function () {
+ var handler = this,
+ form = new formidable.IncomingForm(),
+ tmpFiles = [],
+ files = [],
+ map = {},
+ counter = 1,
+ redirect,
+ finish = function () {
+ counter -= 1;
+ if (!counter) {
+ files.forEach(function (fileInfo) {
+ fileInfo.initUrls(handler.req);
+ });
+ handler.callback(files, redirect);
+ }
+ };
+ form.uploadDir = options.tmpDir;
+ form.on('fileBegin', function (name, file) {
+ tmpFiles.push(file.path);
+ var fileInfo = new FileInfo(file, handler.req, true);
+ fileInfo.safeName();
+ map[path.basename(file.path)] = fileInfo;
+ files.push(fileInfo);
+ }).on('field', function (name, value) {
+ if (name === 'redirect') {
+ redirect = value;
+ }
+ }).on('file', function (name, file) {
+ var fileInfo = map[path.basename(file.path)];
+ fileInfo.size = file.size;
+ if (!fileInfo.validate()) {
+ fs.unlink(file.path);
+ return;
+ }
+ fs.renameSync(file.path, options.uploadDir + '/' + fileInfo.name);
+ if (options.imageTypes.test(fileInfo.name)) {
+ Object.keys(options.imageVersions).forEach(function (version) {
+ counter += 1;
+ var opts = options.imageVersions[version];
+ imageMagick.resize({
+ width: opts.width,
+ height: opts.height,
+ srcPath: options.uploadDir + '/' + fileInfo.name,
+ dstPath: options.uploadDir + '/' + version + '/' +
+ fileInfo.name
+ }, finish);
+ });
+ }
+ }).on('aborted', function () {
+ tmpFiles.forEach(function (file) {
+ fs.unlink(file);
+ });
+ }).on('progress', function (bytesReceived, bytesExpected) {
+ if (bytesReceived > options.maxPostSize) {
+ handler.req.connection.destroy();
+ }
+ }).on('end', finish).parse(handler.req);
+ };
+ UploadHandler.prototype.destroy = function () {
+ var handler = this,
+ fileName;
+ if (handler.req.url.slice(0, options.uploadUrl.length) === options.uploadUrl) {
+ fileName = path.basename(decodeURIComponent(handler.req.url));
+ fs.unlink(options.uploadDir + '/' + fileName, function (ex) {
+ Object.keys(options.imageVersions).forEach(function (version) {
+ fs.unlink(options.uploadDir + '/' + version + '/' + fileName);
+ });
+ handler.callback(!ex);
+ });
+ } else {
+ handler.callback(false);
+ }
+ };
+ if (options.ssl) {
+ require('https').createServer(options.ssl, serve).listen(port);
+ } else {
+ require('http').createServer(serve).listen(port);
+ }
+}(8888));
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/node/tmp/.gitignore b/mod/lightpics/vendors/jquery-file-upload/server/node/tmp/.gitignore
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/node/tmp/.gitignore
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/php/files/.htaccess b/mod/lightpics/vendors/jquery-file-upload/server/php/files/.htaccess
new file mode 100644
index 000000000..a6a9f6a75
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/php/files/.htaccess
@@ -0,0 +1,4 @@
+ForceType application/octet-stream
+<FilesMatch "(?i)\.(gif|jpe?g|png)$">
+ ForceType none
+</FilesMatch> \ No newline at end of file
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/php/index.php b/mod/lightpics/vendors/jquery-file-upload/server/php/index.php
new file mode 100644
index 000000000..1601c76f3
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/php/index.php
@@ -0,0 +1,46 @@
+<?php
+/*
+ * jQuery File Upload Plugin PHP Example 5.7
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+error_reporting(E_ALL | E_STRICT);
+
+require('upload.class.php');
+
+$upload_handler = new UploadHandler();
+
+header('Pragma: no-cache');
+header('Cache-Control: no-store, no-cache, must-revalidate');
+header('Content-Disposition: inline; filename="files.json"');
+header('X-Content-Type-Options: nosniff');
+header('Access-Control-Allow-Origin: *');
+header('Access-Control-Allow-Methods: OPTIONS, HEAD, GET, POST, PUT, DELETE');
+header('Access-Control-Allow-Headers: X-File-Name, X-File-Type, X-File-Size');
+
+switch ($_SERVER['REQUEST_METHOD']) {
+ case 'OPTIONS':
+ break;
+ case 'HEAD':
+ case 'GET':
+ $upload_handler->get();
+ break;
+ case 'POST':
+ if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') {
+ $upload_handler->delete();
+ } else {
+ $upload_handler->post();
+ }
+ break;
+ case 'DELETE':
+ $upload_handler->delete();
+ break;
+ default:
+ header('HTTP/1.1 405 Method Not Allowed');
+}
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/php/thumbnails/.htaccess b/mod/lightpics/vendors/jquery-file-upload/server/php/thumbnails/.htaccess
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/php/thumbnails/.htaccess
diff --git a/mod/lightpics/vendors/jquery-file-upload/server/php/upload.class.php b/mod/lightpics/vendors/jquery-file-upload/server/php/upload.class.php
new file mode 100644
index 000000000..c4efacbdb
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/server/php/upload.class.php
@@ -0,0 +1,436 @@
+<?php
+/*
+ * jQuery File Upload Plugin PHP Class 5.11.2
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+class UploadHandler
+{
+ protected $options;
+
+ function __construct($options=null) {
+ $this->options = array(
+ 'script_url' => $this->getFullUrl().'/',
+ 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/files/',
+ 'upload_url' => $this->getFullUrl().'/files/',
+ 'param_name' => 'files',
+ // Set the following option to 'POST', if your server does not support
+ // DELETE requests. This is a parameter sent to the client:
+ 'delete_type' => 'DELETE',
+ // The php.ini settings upload_max_filesize and post_max_size
+ // take precedence over the following max_file_size setting:
+ 'max_file_size' => null,
+ 'min_file_size' => 1,
+ 'accept_file_types' => '/.+$/i',
+ // The maximum number of files for the upload directory:
+ 'max_number_of_files' => null,
+ // Image resolution restrictions:
+ 'max_width' => null,
+ 'max_height' => null,
+ 'min_width' => 1,
+ 'min_height' => 1,
+ // Set the following option to false to enable resumable uploads:
+ 'discard_aborted_uploads' => true,
+ // Set to true to rotate images based on EXIF meta data, if available:
+ 'orient_image' => false,
+ 'image_versions' => array(
+ // Uncomment the following version to restrict the size of
+ // uploaded images. You can also add additional versions with
+ // their own upload directories:
+ /*
+ 'large' => array(
+ 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/files/',
+ 'upload_url' => $this->getFullUrl().'/files/',
+ 'max_width' => 1920,
+ 'max_height' => 1200,
+ 'jpeg_quality' => 95
+ ),
+ */
+ 'thumbnail' => array(
+ 'upload_dir' => dirname($_SERVER['SCRIPT_FILENAME']).'/thumbnails/',
+ 'upload_url' => $this->getFullUrl().'/thumbnails/',
+ 'max_width' => 80,
+ 'max_height' => 80
+ )
+ )
+ );
+ if ($options) {
+ $this->options = array_replace_recursive($this->options, $options);
+ }
+ }
+
+ protected function getFullUrl() {
+ $https = !empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off';
+ return
+ ($https ? 'https://' : 'http://').
+ (!empty($_SERVER['REMOTE_USER']) ? $_SERVER['REMOTE_USER'].'@' : '').
+ (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ($_SERVER['SERVER_NAME'].
+ ($https && $_SERVER['SERVER_PORT'] === 443 ||
+ $_SERVER['SERVER_PORT'] === 80 ? '' : ':'.$_SERVER['SERVER_PORT']))).
+ substr($_SERVER['SCRIPT_NAME'],0, strrpos($_SERVER['SCRIPT_NAME'], '/'));
+ }
+
+ protected function set_file_delete_url($file) {
+ $file->delete_url = $this->options['script_url']
+ .'?file='.rawurlencode($file->name);
+ $file->delete_type = $this->options['delete_type'];
+ if ($file->delete_type !== 'DELETE') {
+ $file->delete_url .= '&_method=DELETE';
+ }
+ }
+
+ protected function get_file_object($file_name) {
+ $file_path = $this->options['upload_dir'].$file_name;
+ if (is_file($file_path) && $file_name[0] !== '.') {
+ $file = new stdClass();
+ $file->name = $file_name;
+ $file->size = filesize($file_path);
+ $file->url = $this->options['upload_url'].rawurlencode($file->name);
+ foreach($this->options['image_versions'] as $version => $options) {
+ if (is_file($options['upload_dir'].$file_name)) {
+ $file->{$version.'_url'} = $options['upload_url']
+ .rawurlencode($file->name);
+ }
+ }
+ $this->set_file_delete_url($file);
+ return $file;
+ }
+ return null;
+ }
+
+ protected function get_file_objects() {
+ return array_values(array_filter(array_map(
+ array($this, 'get_file_object'),
+ scandir($this->options['upload_dir'])
+ )));
+ }
+
+ protected function create_scaled_image($file_name, $options) {
+ $file_path = $this->options['upload_dir'].$file_name;
+ $new_file_path = $options['upload_dir'].$file_name;
+ list($img_width, $img_height) = @getimagesize($file_path);
+ if (!$img_width || !$img_height) {
+ return false;
+ }
+ $scale = min(
+ $options['max_width'] / $img_width,
+ $options['max_height'] / $img_height
+ );
+ if ($scale >= 1) {
+ if ($file_path !== $new_file_path) {
+ return copy($file_path, $new_file_path);
+ }
+ return true;
+ }
+ $new_width = $img_width * $scale;
+ $new_height = $img_height * $scale;
+ $new_img = @imagecreatetruecolor($new_width, $new_height);
+ switch (strtolower(substr(strrchr($file_name, '.'), 1))) {
+ case 'jpg':
+ case 'jpeg':
+ $src_img = @imagecreatefromjpeg($file_path);
+ $write_image = 'imagejpeg';
+ $image_quality = isset($options['jpeg_quality']) ?
+ $options['jpeg_quality'] : 75;
+ break;
+ case 'gif':
+ @imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0));
+ $src_img = @imagecreatefromgif($file_path);
+ $write_image = 'imagegif';
+ $image_quality = null;
+ break;
+ case 'png':
+ @imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0));
+ @imagealphablending($new_img, false);
+ @imagesavealpha($new_img, true);
+ $src_img = @imagecreatefrompng($file_path);
+ $write_image = 'imagepng';
+ $image_quality = isset($options['png_quality']) ?
+ $options['png_quality'] : 9;
+ break;
+ default:
+ $src_img = null;
+ }
+ $success = $src_img && @imagecopyresampled(
+ $new_img,
+ $src_img,
+ 0, 0, 0, 0,
+ $new_width,
+ $new_height,
+ $img_width,
+ $img_height
+ ) && $write_image($new_img, $new_file_path, $image_quality);
+ // Free up memory (imagedestroy does not delete files):
+ @imagedestroy($src_img);
+ @imagedestroy($new_img);
+ return $success;
+ }
+
+ protected function validate($uploaded_file, $file, $error, $index) {
+ if ($error) {
+ $file->error = $error;
+ return false;
+ }
+ if (!$file->name) {
+ $file->error = 'missingFileName';
+ return false;
+ }
+ if (!preg_match($this->options['accept_file_types'], $file->name)) {
+ $file->error = 'acceptFileTypes';
+ return false;
+ }
+ if ($uploaded_file && is_uploaded_file($uploaded_file)) {
+ $file_size = filesize($uploaded_file);
+ } else {
+ $file_size = $_SERVER['CONTENT_LENGTH'];
+ }
+ if ($this->options['max_file_size'] && (
+ $file_size > $this->options['max_file_size'] ||
+ $file->size > $this->options['max_file_size'])
+ ) {
+ $file->error = 'maxFileSize';
+ return false;
+ }
+ if ($this->options['min_file_size'] &&
+ $file_size < $this->options['min_file_size']) {
+ $file->error = 'minFileSize';
+ return false;
+ }
+ if (is_int($this->options['max_number_of_files']) && (
+ count($this->get_file_objects()) >= $this->options['max_number_of_files'])
+ ) {
+ $file->error = 'maxNumberOfFiles';
+ return false;
+ }
+ list($img_width, $img_height) = @getimagesize($uploaded_file);
+ if (is_int($img_width)) {
+ if ($this->options['max_width'] && $img_width > $this->options['max_width'] ||
+ $this->options['max_height'] && $img_height > $this->options['max_height']) {
+ $file->error = 'maxResolution';
+ return false;
+ }
+ if ($this->options['min_width'] && $img_width < $this->options['min_width'] ||
+ $this->options['min_height'] && $img_height < $this->options['min_height']) {
+ $file->error = 'minResolution';
+ return false;
+ }
+ }
+ return true;
+ }
+
+ protected function upcount_name_callback($matches) {
+ $index = isset($matches[1]) ? intval($matches[1]) + 1 : 1;
+ $ext = isset($matches[2]) ? $matches[2] : '';
+ return ' ('.$index.')'.$ext;
+ }
+
+ protected function upcount_name($name) {
+ return preg_replace_callback(
+ '/(?:(?: \(([\d]+)\))?(\.[^.]+))?$/',
+ array($this, 'upcount_name_callback'),
+ $name,
+ 1
+ );
+ }
+
+ protected function trim_file_name($name, $type, $index) {
+ // Remove path information and dots around the filename, to prevent uploading
+ // into different directories or replacing hidden system files.
+ // Also remove control characters and spaces (\x00..\x20) around the filename:
+ $file_name = trim(basename(stripslashes($name)), ".\x00..\x20");
+ // Add missing file extension for known image types:
+ if (strpos($file_name, '.') === false &&
+ preg_match('/^image\/(gif|jpe?g|png)/', $type, $matches)) {
+ $file_name .= '.'.$matches[1];
+ }
+ if ($this->options['discard_aborted_uploads']) {
+ while(is_file($this->options['upload_dir'].$file_name)) {
+ $file_name = $this->upcount_name($file_name);
+ }
+ }
+ return $file_name;
+ }
+
+ protected function handle_form_data($file, $index) {
+ // Handle form data, e.g. $_REQUEST['description'][$index]
+ }
+
+ protected function orient_image($file_path) {
+ $exif = @exif_read_data($file_path);
+ if ($exif === false) {
+ return false;
+ }
+ $orientation = intval(@$exif['Orientation']);
+ if (!in_array($orientation, array(3, 6, 8))) {
+ return false;
+ }
+ $image = @imagecreatefromjpeg($file_path);
+ switch ($orientation) {
+ case 3:
+ $image = @imagerotate($image, 180, 0);
+ break;
+ case 6:
+ $image = @imagerotate($image, 270, 0);
+ break;
+ case 8:
+ $image = @imagerotate($image, 90, 0);
+ break;
+ default:
+ return false;
+ }
+ $success = imagejpeg($image, $file_path);
+ // Free up memory (imagedestroy does not delete files):
+ @imagedestroy($image);
+ return $success;
+ }
+
+ protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, $index = null) {
+ $file = new stdClass();
+ $file->name = $this->trim_file_name($name, $type, $index);
+ $file->size = intval($size);
+ $file->type = $type;
+ if ($this->validate($uploaded_file, $file, $error, $index)) {
+ $this->handle_form_data($file, $index);
+ $file_path = $this->options['upload_dir'].$file->name;
+ $append_file = !$this->options['discard_aborted_uploads'] &&
+ is_file($file_path) && $file->size > filesize($file_path);
+ clearstatcache();
+ if ($uploaded_file && is_uploaded_file($uploaded_file)) {
+ // multipart/formdata uploads (POST method uploads)
+ if ($append_file) {
+ file_put_contents(
+ $file_path,
+ fopen($uploaded_file, 'r'),
+ FILE_APPEND
+ );
+ } else {
+ move_uploaded_file($uploaded_file, $file_path);
+ }
+ } else {
+ // Non-multipart uploads (PUT method support)
+ file_put_contents(
+ $file_path,
+ fopen('php://input', 'r'),
+ $append_file ? FILE_APPEND : 0
+ );
+ }
+ $file_size = filesize($file_path);
+ if ($file_size === $file->size) {
+ if ($this->options['orient_image']) {
+ $this->orient_image($file_path);
+ }
+ $file->url = $this->options['upload_url'].rawurlencode($file->name);
+ foreach($this->options['image_versions'] as $version => $options) {
+ if ($this->create_scaled_image($file->name, $options)) {
+ if ($this->options['upload_dir'] !== $options['upload_dir']) {
+ $file->{$version.'_url'} = $options['upload_url']
+ .rawurlencode($file->name);
+ } else {
+ clearstatcache();
+ $file_size = filesize($file_path);
+ }
+ }
+ }
+ } else if ($this->options['discard_aborted_uploads']) {
+ unlink($file_path);
+ $file->error = 'abort';
+ }
+ $file->size = $file_size;
+ $this->set_file_delete_url($file);
+ }
+ return $file;
+ }
+
+ public function get() {
+ $file_name = isset($_REQUEST['file']) ?
+ basename(stripslashes($_REQUEST['file'])) : null;
+ if ($file_name) {
+ $info = $this->get_file_object($file_name);
+ } else {
+ $info = $this->get_file_objects();
+ }
+ header('Content-type: application/json');
+ echo json_encode($info);
+ }
+
+ public function post() {
+ if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') {
+ return $this->delete();
+ }
+ $upload = isset($_FILES[$this->options['param_name']]) ?
+ $_FILES[$this->options['param_name']] : null;
+ $info = array();
+ if ($upload && is_array($upload['tmp_name'])) {
+ // param_name is an array identifier like "files[]",
+ // $_FILES is a multi-dimensional array:
+ foreach ($upload['tmp_name'] as $index => $value) {
+ $info[] = $this->handle_file_upload(
+ $upload['tmp_name'][$index],
+ isset($_SERVER['HTTP_X_FILE_NAME']) ?
+ $_SERVER['HTTP_X_FILE_NAME'] : $upload['name'][$index],
+ isset($_SERVER['HTTP_X_FILE_SIZE']) ?
+ $_SERVER['HTTP_X_FILE_SIZE'] : $upload['size'][$index],
+ isset($_SERVER['HTTP_X_FILE_TYPE']) ?
+ $_SERVER['HTTP_X_FILE_TYPE'] : $upload['type'][$index],
+ $upload['error'][$index],
+ $index
+ );
+ }
+ } elseif ($upload || isset($_SERVER['HTTP_X_FILE_NAME'])) {
+ // param_name is a single object identifier like "file",
+ // $_FILES is a one-dimensional array:
+ $info[] = $this->handle_file_upload(
+ isset($upload['tmp_name']) ? $upload['tmp_name'] : null,
+ isset($_SERVER['HTTP_X_FILE_NAME']) ?
+ $_SERVER['HTTP_X_FILE_NAME'] : (isset($upload['name']) ?
+ $upload['name'] : null),
+ isset($_SERVER['HTTP_X_FILE_SIZE']) ?
+ $_SERVER['HTTP_X_FILE_SIZE'] : (isset($upload['size']) ?
+ $upload['size'] : null),
+ isset($_SERVER['HTTP_X_FILE_TYPE']) ?
+ $_SERVER['HTTP_X_FILE_TYPE'] : (isset($upload['type']) ?
+ $upload['type'] : null),
+ isset($upload['error']) ? $upload['error'] : null
+ );
+ }
+ header('Vary: Accept');
+ $json = json_encode($info);
+ $redirect = isset($_REQUEST['redirect']) ?
+ stripslashes($_REQUEST['redirect']) : null;
+ if ($redirect) {
+ header('Location: '.sprintf($redirect, rawurlencode($json)));
+ return;
+ }
+ if (isset($_SERVER['HTTP_ACCEPT']) &&
+ (strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false)) {
+ header('Content-type: application/json');
+ } else {
+ header('Content-type: text/plain');
+ }
+ echo $json;
+ }
+
+ public function delete() {
+ $file_name = isset($_REQUEST['file']) ?
+ basename(stripslashes($_REQUEST['file'])) : null;
+ $file_path = $this->options['upload_dir'].$file_name;
+ $success = is_file($file_path) && $file_name[0] !== '.' && unlink($file_path);
+ if ($success) {
+ foreach($this->options['image_versions'] as $version => $options) {
+ $file = $options['upload_dir'].$file_name;
+ if (is_file($file)) {
+ unlink($file);
+ }
+ }
+ }
+ header('Content-type: application/json');
+ echo json_encode($success);
+ }
+
+}
diff --git a/mod/lightpics/vendors/jquery-file-upload/test/index.html b/mod/lightpics/vendors/jquery-file-upload/test/index.html
new file mode 100644
index 000000000..8a8011d21
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/test/index.html
@@ -0,0 +1,146 @@
+<!DOCTYPE HTML>
+<!--
+/*
+ * jQuery File Upload Plugin Test 6.9.1
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+-->
+<html lang="en">
+<head>
+<!-- Force latest IE rendering engine or ChromeFrame if installed -->
+<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><![endif]-->
+<meta charset="utf-8">
+<title>jQuery File Upload Plugin Test</title>
+<meta name="viewport" content="width=device-width">
+<link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css">
+</head>
+<body>
+<h1 id="qunit-header">jQuery File Upload Plugin Test</h1>
+<h2 id="qunit-banner"></h2>
+<div id="qunit-testrunner-toolbar"></div>
+<h2 id="qunit-userAgent"></h2>
+<ol id="qunit-tests"></ol>
+<div id="qunit-fixture">
+ <!-- The file upload form used as target for the file upload widget -->
+ <form id="fileupload" action="../server/php/" method="POST" enctype="multipart/form-data">
+ <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
+ <div class="row fileupload-buttonbar">
+ <div class="span7">
+ <!-- The fileinput-button span is used to style the file input field as button -->
+ <span class="btn btn-success fileinput-button">
+ <i class="icon-plus icon-white"></i>
+ <span>Add files...</span>
+ <input type="file" name="files[]" multiple>
+ </span>
+ <button type="submit" class="btn btn-primary start">
+ <i class="icon-upload icon-white"></i>
+ <span>Start upload</span>
+ </button>
+ <button type="reset" class="btn btn-warning cancel">
+ <i class="icon-ban-circle icon-white"></i>
+ <span>Cancel upload</span>
+ </button>
+ <button type="button" class="btn btn-danger delete">
+ <i class="icon-trash icon-white"></i>
+ <span>Delete</span>
+ </button>
+ <input type="checkbox" class="toggle">
+ </div>
+ <!-- The global progress information -->
+ <div class="span5 fileupload-progress fade">
+ <!-- The global progress bar -->
+ <div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
+ <div class="bar" style="width:0%;"></div>
+ </div>
+ <!-- The extended global progress information -->
+ <div class="progress-extended">&nbsp;</div>
+ </div>
+ </div>
+ <!-- The loading indicator is shown during file processing -->
+ <div class="fileupload-loading"></div>
+ <br>
+ <!-- The table listing the files available for upload/download -->
+ <table role="presentation" class="table table-striped"><tbody class="files" data-toggle="modal-gallery" data-target="#modal-gallery"></tbody></table>
+ </form>
+</div>
+<!-- The template to display files available for upload -->
+<script id="template-upload" type="text/x-tmpl">
+{% for (var i=0, file; file=o.files[i]; i++) { %}
+ <tr class="template-upload">
+ <td class="preview"><span class=""></span></td>
+ <td class="name"><span>{%=file.name%}</span></td>
+ <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
+ {% if (file.error) { %}
+ <td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
+ {% } else if (o.files.valid && !i) { %}
+ <td>
+ <div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="bar" style="width:0%;"></div></div>
+ </td>
+ <td class="start">{% if (!o.options.autoUpload) { %}
+ <button class="btn btn-primary">
+ <i class="icon-upload icon-white"></i>
+ <span>{%=locale.fileupload.start%}</span>
+ </button>
+ {% } %}</td>
+ {% } else { %}
+ <td colspan="2"></td>
+ {% } %}
+ <td class="cancel">{% if (!i) { %}
+ <button class="btn btn-warning">
+ <i class="icon-ban-circle icon-white"></i>
+ <span>{%=locale.fileupload.cancel%}</span>
+ </button>
+ {% } %}</td>
+ </tr>
+{% } %}
+</script>
+<!-- The template to display files available for download -->
+<script id="template-download" type="text/x-tmpl">
+{% for (var i=0, file; file=o.files[i]; i++) { %}
+ <tr class="template-download">
+ {% if (file.error) { %}
+ <td></td>
+ <td class="name"><span>{%=file.name%}</span></td>
+ <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
+ <td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
+ {% } else { %}
+ <td class="preview">{% if (file.thumbnail_url) { %}
+ <a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
+ {% } %}</td>
+ <td class="name">
+ <a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a>
+ </td>
+ <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
+ <td colspan="2"></td>
+ {% } %}
+ <td class="delete">
+ <button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}">
+ <i class="icon-trash icon-white"></i>
+ <span>{%=locale.fileupload.destroy%}</span>
+ </button>
+ <input type="checkbox" name="delete" value="1">
+ </td>
+ </tr>
+{% } %}
+</script>
+<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
+<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
+<script src="http://blueimp.github.com/JavaScript-Templates/tmpl.min.js"></script>
+<script src="http://blueimp.github.com/JavaScript-Load-Image/load-image.min.js"></script>
+<script src="http://blueimp.github.com/JavaScript-Canvas-to-Blob/canvas-to-blob.min.js"></script>
+<script src="../js/jquery.iframe-transport.js"></script>
+<script src="../js/jquery.fileupload.js"></script>
+<script src="../js/jquery.fileupload-fp.js"></script>
+<script src="../js/jquery.fileupload-ui.js"></script>
+<script src="../js/jquery.fileupload-jui.js"></script>
+<script src="../js/locale.js"></script>
+<script src="http://code.jquery.com/qunit/git/qunit.js"></script>
+<script src="test.js"></script>
+</body>
+</html>
diff --git a/mod/lightpics/vendors/jquery-file-upload/test/test.js b/mod/lightpics/vendors/jquery-file-upload/test/test.js
new file mode 100644
index 000000000..0f6d90afb
--- /dev/null
+++ b/mod/lightpics/vendors/jquery-file-upload/test/test.js
@@ -0,0 +1,1279 @@
+/*
+ * jQuery File Upload Plugin Test 6.9.2
+ * https://github.com/blueimp/jQuery-File-Upload
+ *
+ * Copyright 2010, Sebastian Tschan
+ * https://blueimp.net
+ *
+ * Licensed under the MIT license:
+ * http://www.opensource.org/licenses/MIT
+ */
+
+/*jslint nomen: true, unparam: true */
+/*global $, QUnit, document, expect, module, test, asyncTest, start, ok, strictEqual, notStrictEqual */
+
+$(function () {
+ 'use strict';
+
+ QUnit.done = function () {
+ // Delete all uploaded files:
+ var url = $('#fileupload').find('form').prop('action');
+ $.getJSON(url, function (files) {
+ $.each(files, function (index, file) {
+ $.ajax({
+ url: url + '?file=' + encodeURIComponent(file.name),
+ type: 'DELETE'
+ });
+ });
+ });
+ };
+
+ var lifecycle = {
+ setup: function () {
+ // Set the .fileupload method to the basic widget method:
+ $.widget('blueimp.fileupload', $.blueimp.fileupload, {});
+ },
+ teardown: function () {
+ // De-initialize the file input plugin:
+ $('#fileupload:blueimp-fileupload').fileupload('destroy');
+ // Remove all remaining event listeners:
+ $('#fileupload input').unbind();
+ $(document).unbind();
+ }
+ },
+ lifecycleUI = {
+ setup: function () {
+ // Set the .fileupload method to the JUI widget method:
+ $.widget('blueimpJUI.fileupload', $.blueimpJUI.fileupload, {});
+ },
+ teardown: function () {
+ // De-initialize the file input plugin:
+ $('#fileupload:blueimpJUI-fileupload').fileupload('destroy');
+ // Remove all remaining event listeners:
+ $('#fileupload input, #fileupload button').unbind();
+ $(document).unbind();
+ }
+ };
+
+ module('Initialization', lifecycle);
+
+ test('Widget initialization', function () {
+ ok($('#fileupload').fileupload().data('fileupload'));
+ });
+
+ test('Data attribute options', function () {
+ $('#fileupload').attr('data-url', 'http://example.org');
+ $('#fileupload').fileupload();
+ strictEqual(
+ $('#fileupload').fileupload('option', 'url'),
+ 'http://example.org'
+ );
+ });
+
+ test('File input initialization', function () {
+ var fu = $('#fileupload').fileupload();
+ ok(
+ fu.fileupload('option', 'fileInput').length,
+ 'File input field inside of the widget'
+ );
+ ok(
+ fu.fileupload('option', 'fileInput').length,
+ 'Widget element as file input field'
+ );
+ });
+
+ test('Drop zone initialization', function () {
+ ok($('#fileupload').fileupload()
+ .fileupload('option', 'dropZone').length);
+ });
+
+ test('Event listeners initialization', function () {
+ var fu = $('#fileupload').fileupload();
+ ok(
+ fu.fileupload('option', 'fileInput')
+ .data('events').change.length,
+ 'Listens to file input change events'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ ok(
+ fu.fileupload('option', 'dropZone')
+ .data('events').drop.length,
+ 'Listens to drop zone drop events'
+ );
+ ok(
+ fu.fileupload('option', 'dropZone')
+ .data('events').dragover.length,
+ 'Listens to drop zone dragover events'
+ );
+ }
+ });
+
+ module('API', lifecycle);
+
+ test('destroy', function () {
+ var fu = $('#fileupload').fileupload(),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ dropZone = fu.fileupload('option', 'dropZone');
+ fileInput.change($.noop);
+ dropZone.bind('drop', $.noop);
+ dropZone.bind('dragover', $.noop);
+ fu.fileupload('destroy');
+ strictEqual(
+ fileInput.data('events').change.length,
+ 1,
+ 'Removes own file input change event listener'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ strictEqual(
+ dropZone.data('events').drop.length,
+ 1,
+ 'Removes own drop zone drop event listener'
+ );
+ strictEqual(
+ dropZone.data('events').dragover.length,
+ 1,
+ 'Removes own drop zone dragover event listener'
+ );
+ }
+ });
+
+ test('disable', function () {
+ var fu = $('#fileupload').fileupload(),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ dropZone = fu.fileupload('option', 'dropZone'),
+ param = {files: [{name: 'test'}]};
+ fileInput.change($.noop);
+ dropZone.bind('drop', $.noop);
+ dropZone.bind('dragover', $.noop);
+ fu.fileupload('disable');
+ strictEqual(
+ fileInput.data('events').change.length,
+ 1,
+ 'Removes own file input change event listener'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ strictEqual(
+ dropZone.data('events').drop.length,
+ 1,
+ 'Removes own drop zone drop event listener'
+ );
+ strictEqual(
+ dropZone.data('events').dragover.length,
+ 1,
+ 'Removes own drop zone dragover event listener'
+ );
+ }
+ fu.fileupload({
+ add: function (e, data) {
+ ok(false);
+ }
+ }).fileupload('add', param);
+ });
+
+ test('enable', function () {
+ var fu = $('#fileupload').fileupload(),
+ param = {files: [{name: 'test'}]};
+ fu.fileupload('disable');
+ fu.fileupload('enable');
+ ok(
+ fu.fileupload('option', 'fileInput')
+ .data('events').change.length,
+ 'Listens to file input change events'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ ok(
+ fu.fileupload('option', 'dropZone')
+ .data('events').drop.length,
+ 'Listens to drop zone drop events'
+ );
+ ok(
+ fu.fileupload('option', 'dropZone')
+ .data('events').dragover.length,
+ 'Listens to drop zone dragover events'
+ );
+ }
+ $('#fileupload').fileupload({
+ send: function (e, data) {
+ strictEqual(
+ data.files[0].name,
+ 'test',
+ 'Triggers send callback'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ test('option', function () {
+ var fu = $('#fileupload').fileupload(),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ dropZone = fu.fileupload('option', 'dropZone');
+ fu.fileupload('option', 'fileInput', null);
+ fu.fileupload('option', 'dropZone', null);
+ ok(
+ !fileInput.data('events'),
+ 'Removes event listener after changing fileInput option'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ ok(
+ !dropZone.data('events'),
+ 'Removes event listeners after changing dropZone option'
+ );
+ }
+ fu.fileupload('option', 'fileInput', fileInput);
+ fu.fileupload('option', 'dropZone', dropZone);
+ ok(
+ fileInput.data('events').change.length,
+ 'Adds change event listener after setting fileInput option'
+ );
+ if ($.support.xhrFormDataFileUpload) {
+ ok(
+ dropZone.data('events').drop.length,
+ 'Adds drop event listener after setting dropZone option'
+ );
+ ok(
+ dropZone.data('events').dragover.length,
+ 'Adds dragover event listener after setting dropZone option'
+ );
+ }
+ fu.fileupload('option', 'dropZone', 'body');
+ strictEqual(
+ fu.fileupload('option', 'dropZone')[0],
+ document.body,
+ 'Allow a query string as parameter for the dropZone option'
+ );
+ fu.fileupload('option', 'dropZone', document);
+ strictEqual(
+ fu.fileupload('option', 'dropZone')[0],
+ document,
+ 'Allow a document element as parameter for the dropZone option'
+ );
+ fu.fileupload('option', 'fileInput', ':file');
+ strictEqual(
+ fu.fileupload('option', 'fileInput')[0],
+ $(':file')[0],
+ 'Allow a query string as parameter for the fileInput option'
+ );
+ fu.fileupload('option', 'fileInput', $(':file')[0]);
+ strictEqual(
+ fu.fileupload('option', 'fileInput')[0],
+ $(':file')[0],
+ 'Allow a document element as parameter for the fileInput option'
+ );
+ });
+
+ asyncTest('add', function () {
+ expect(4);
+ var param = {files: [{name: 'test'}]},
+ param2 = {files: [{fileName: 'test', fileSize: 123}]};
+ $('#fileupload').fileupload({
+ add: function (e, data) {
+ strictEqual(
+ data.files[0].name,
+ param.files[0].name,
+ 'Triggers add callback'
+ );
+ }
+ }).fileupload('add', param).fileupload(
+ 'option',
+ 'add',
+ function (e, data) {
+ strictEqual(
+ data.files[0].name,
+ param2.files[0].fileName,
+ 'Normalizes fileName'
+ );
+ strictEqual(
+ data.files[0].size,
+ param2.files[0].fileSize,
+ 'Normalizes fileSize'
+ );
+ data.submit().complete(function () {
+ ok(true, 'data.submit() Returns a jqXHR object');
+ start();
+ });
+ }
+ ).fileupload('add', param2);
+ });
+
+ asyncTest('send', function () {
+ expect(3);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ send: function (e, data) {
+ strictEqual(
+ data.files[0].name,
+ 'test',
+ 'Triggers send callback'
+ );
+ }
+ }).fileupload('send', param).fail(function () {
+ ok(true, 'Allows to abort the request');
+ }).complete(function () {
+ ok(true, 'Returns a jqXHR object');
+ start();
+ }).abort();
+ });
+
+ module('Callbacks', lifecycle);
+
+ asyncTest('add', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ add: function (e, data) {
+ ok(true, 'Triggers add callback');
+ start();
+ }
+ }).fileupload('add', param);
+ });
+
+ asyncTest('submit', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ submit: function (e, data) {
+ ok(true, 'Triggers submit callback');
+ start();
+ return false;
+ }
+ }).fileupload('add', param);
+ });
+
+ asyncTest('send', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ send: function (e, data) {
+ ok(true, 'Triggers send callback');
+ start();
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('done', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ done: function (e, data) {
+ ok(true, 'Triggers done callback');
+ start();
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('fail', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]},
+ fu = $('#fileupload').fileupload({
+ url: '404',
+ fail: function (e, data) {
+ ok(true, 'Triggers fail callback');
+ start();
+ }
+ });
+ fu.data('fileupload')._isXHRUpload = function () {
+ return true;
+ };
+ fu.fileupload('send', param);
+ });
+
+ asyncTest('always', function () {
+ expect(2);
+ var param = {files: [{name: 'test'}]},
+ counter = 0,
+ fu = $('#fileupload').fileupload({
+ always: function (e, data) {
+ ok(true, 'Triggers always callback');
+ if (counter === 1) {
+ start();
+ } else {
+ counter += 1;
+ }
+ }
+ });
+ fu.data('fileupload')._isXHRUpload = function () {
+ return true;
+ };
+ fu.fileupload('add', param).fileupload(
+ 'option',
+ 'url',
+ '404'
+ ).fileupload('add', param);
+ });
+
+ asyncTest('progress', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]},
+ counter = 0;
+ $('#fileupload').fileupload({
+ forceIframeTransport: true,
+ progress: function (e, data) {
+ ok(true, 'Triggers progress callback');
+ if (counter === 0) {
+ start();
+ } else {
+ counter += 1;
+ }
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('progressall', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]},
+ counter = 0;
+ $('#fileupload').fileupload({
+ forceIframeTransport: true,
+ progressall: function (e, data) {
+ ok(true, 'Triggers progressall callback');
+ if (counter === 0) {
+ start();
+ } else {
+ counter += 1;
+ }
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('start', function () {
+ expect(1);
+ var param = {files: [{name: '1'}, {name: '2'}]},
+ active = 0;
+ $('#fileupload').fileupload({
+ send: function (e, data) {
+ active += 1;
+ },
+ start: function (e, data) {
+ ok(!active, 'Triggers start callback before uploads');
+ start();
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('stop', function () {
+ expect(1);
+ var param = {files: [{name: '1'}, {name: '2'}]},
+ active = 0;
+ $('#fileupload').fileupload({
+ send: function (e, data) {
+ active += 1;
+ },
+ always: function (e, data) {
+ active -= 1;
+ },
+ stop: function (e, data) {
+ ok(!active, 'Triggers stop callback after uploads');
+ start();
+ }
+ }).fileupload('send', param);
+ });
+
+ test('change', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('fileupload'),
+ fileInput = fu.fileupload('option', 'fileInput');
+ expect(2);
+ fu.fileupload({
+ change: function (e, data) {
+ ok(true, 'Triggers change callback');
+ strictEqual(
+ data.files.length,
+ 0,
+ 'Returns empty files list'
+ );
+ },
+ add: $.noop
+ });
+ fuo._onChange({
+ data: {fileupload: fuo},
+ target: fileInput[0]
+ });
+ });
+
+ test('paste', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('fileupload');
+ expect(1);
+ fu.fileupload({
+ paste: function (e, data) {
+ ok(true, 'Triggers paste callback');
+ },
+ add: $.noop
+ });
+ fuo._onPaste({
+ data: {fileupload: fuo},
+ originalEvent: {clipboardData: {}},
+ preventDefault: $.noop
+ });
+ });
+
+ test('drop', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('fileupload');
+ expect(1);
+ fu.fileupload({
+ drop: function (e, data) {
+ ok(true, 'Triggers drop callback');
+ },
+ add: $.noop
+ });
+ fuo._onDrop({
+ data: {fileupload: fuo},
+ originalEvent: {dataTransfer: {}},
+ preventDefault: $.noop
+ });
+ });
+
+ test('dragover', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('fileupload');
+ expect(1);
+ fu.fileupload({
+ dragover: function (e, data) {
+ ok(true, 'Triggers dragover callback');
+ },
+ add: $.noop
+ });
+ fuo._onDragOver({
+ data: {fileupload: fuo},
+ originalEvent: {dataTransfer: {}},
+ preventDefault: $.noop
+ });
+ });
+
+ module('Options', lifecycle);
+
+ test('paramName', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ paramName: null,
+ send: function (e, data) {
+ strictEqual(
+ data.paramName[0],
+ data.fileInput.prop('name'),
+ 'Takes paramName from file input field if not set'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ test('url', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ url: null,
+ send: function (e, data) {
+ strictEqual(
+ data.url,
+ $(data.fileInput.prop('form')).prop('action'),
+ 'Takes url from form action if not set'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ test('type', function () {
+ expect(2);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ type: null,
+ send: function (e, data) {
+ strictEqual(
+ data.type,
+ 'POST',
+ 'Request type is "POST" if not set to "PUT"'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ $('#fileupload').fileupload({
+ type: 'PUT',
+ send: function (e, data) {
+ strictEqual(
+ data.type,
+ 'PUT',
+ 'Request type is "PUT" if set to "PUT"'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ test('replaceFileInput', function () {
+ var fu = $('#fileupload').fileupload(),
+ fuo = fu.data('fileupload'),
+ fileInput = fu.fileupload('option', 'fileInput'),
+ fileInputElement = fileInput[0];
+ expect(2);
+ fu.fileupload({
+ replaceFileInput: false,
+ change: function (e, data) {
+ strictEqual(
+ fu.fileupload('option', 'fileInput')[0],
+ fileInputElement,
+ 'Keeps file input with replaceFileInput: false'
+ );
+ },
+ add: $.noop
+ });
+ fuo._onChange({
+ data: {fileupload: fuo},
+ target: fileInput[0]
+ });
+ fu.fileupload({
+ replaceFileInput: true,
+ change: function (e, data) {
+ notStrictEqual(
+ fu.fileupload('option', 'fileInput')[0],
+ fileInputElement,
+ 'Replaces file input with replaceFileInput: true'
+ );
+ },
+ add: $.noop
+ });
+ fuo._onChange({
+ data: {fileupload: fuo},
+ target: fileInput[0]
+ });
+ });
+
+ asyncTest('forceIframeTransport', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ forceIframeTransport: true,
+ done: function (e, data) {
+ strictEqual(
+ data.dataType.substr(0, 6),
+ 'iframe',
+ 'Iframe Transport is used'
+ );
+ start();
+ }
+ }).fileupload('send', param);
+ });
+
+ test('singleFileUploads', function () {
+ expect(3);
+ var fu = $('#fileupload').fileupload(),
+ param = {files: [{name: '1'}, {name: '2'}]},
+ index = 1;
+ fu.data('fileupload')._isXHRUpload = function () {
+ return true;
+ };
+ $('#fileupload').fileupload({
+ singleFileUploads: true,
+ add: function (e, data) {
+ ok(true, 'Triggers callback number ' + index.toString());
+ index += 1;
+ }
+ }).fileupload('add', param).fileupload(
+ 'option',
+ 'singleFileUploads',
+ false
+ ).fileupload('add', param);
+ });
+
+ test('limitMultiFileUploads', function () {
+ expect(3);
+ var fu = $('#fileupload').fileupload(),
+ param = {files: [
+ {name: '1'},
+ {name: '2'},
+ {name: '3'},
+ {name: '4'},
+ {name: '5'}
+ ]},
+ index = 1;
+ fu.data('fileupload')._isXHRUpload = function () {
+ return true;
+ };
+ $('#fileupload').fileupload({
+ singleFileUploads: false,
+ limitMultiFileUploads: 2,
+ add: function (e, data) {
+ ok(true, 'Triggers callback number ' + index.toString());
+ index += 1;
+ }
+ }).fileupload('add', param);
+ });
+
+ asyncTest('sequentialUploads', function () {
+ expect(6);
+ var param = {files: [
+ {name: '1'},
+ {name: '2'},
+ {name: '3'},
+ {name: '4'},
+ {name: '5'},
+ {name: '6'}
+ ]},
+ addIndex = 0,
+ sendIndex = 0,
+ loadIndex = 0,
+ fu = $('#fileupload').fileupload({
+ sequentialUploads: true,
+ add: function (e, data) {
+ addIndex += 1;
+ if (addIndex === 4) {
+ data.submit().abort();
+ } else {
+ data.submit();
+ }
+ },
+ send: function (e, data) {
+ sendIndex += 1;
+ },
+ done: function (e, data) {
+ loadIndex += 1;
+ strictEqual(sendIndex, loadIndex, 'upload in order');
+ },
+ fail: function (e, data) {
+ strictEqual(data.errorThrown, 'abort', 'upload aborted');
+ },
+ stop: function (e) {
+ start();
+ }
+ });
+ fu.data('fileupload')._isXHRUpload = function () {
+ return true;
+ };
+ fu.fileupload('add', param);
+ });
+
+ asyncTest('limitConcurrentUploads', function () {
+ expect(12);
+ var param = {files: [
+ {name: '1'},
+ {name: '2'},
+ {name: '3'},
+ {name: '4'},
+ {name: '5'},
+ {name: '6'},
+ {name: '7'},
+ {name: '8'},
+ {name: '9'},
+ {name: '10'},
+ {name: '11'},
+ {name: '12'}
+ ]},
+ addIndex = 0,
+ sendIndex = 0,
+ loadIndex = 0,
+ fu = $('#fileupload').fileupload({
+ limitConcurrentUploads: 3,
+ add: function (e, data) {
+ addIndex += 1;
+ if (addIndex === 4) {
+ data.submit().abort();
+ } else {
+ data.submit();
+ }
+ },
+ send: function (e, data) {
+ sendIndex += 1;
+ },
+ done: function (e, data) {
+ loadIndex += 1;
+ ok(sendIndex - loadIndex < 3);
+ },
+ fail: function (e, data) {
+ strictEqual(data.errorThrown, 'abort', 'upload aborted');
+ },
+ stop: function (e) {
+ start();
+ }
+ });
+ fu.data('fileupload')._isXHRUpload = function () {
+ return true;
+ };
+ fu.fileupload('add', param);
+ });
+
+ if ($.support.xhrFileUpload) {
+ asyncTest('multipart', function () {
+ expect(4);
+ var param = {files: [{
+ name: 'test.png',
+ size: 123,
+ type: 'image/png'
+ }]},
+ fu = $('#fileupload').fileupload({
+ multipart: false,
+ always: function (e, data) {
+ strictEqual(
+ data.contentType,
+ param.files[0].type,
+ 'non-multipart upload sets file type as contentType'
+ );
+ strictEqual(
+ data.headers['X-File-Name'],
+ param.files[0].name,
+ 'non-multipart upload sets X-File-Name header'
+ );
+ strictEqual(
+ data.headers['X-File-Type'],
+ param.files[0].type,
+ 'non-multipart upload sets X-File-Type header'
+ );
+ strictEqual(
+ data.headers['X-File-Size'],
+ param.files[0].size,
+ 'non-multipart upload sets X-File-Size header'
+ );
+ start();
+ }
+ });
+ fu.fileupload('send', param);
+ });
+ }
+
+ module('UI Initialization', lifecycleUI);
+
+ test('Widget initialization', function () {
+ ok($('#fileupload').fileupload().data('fileupload'));
+ ok(
+ $('#fileupload').fileupload('option', 'uploadTemplate').length,
+ 'Initialized upload template'
+ );
+ ok(
+ $('#fileupload').fileupload('option', 'downloadTemplate').length,
+ 'Initialized download template'
+ );
+ });
+
+ test('Buttonbar event listeners', function () {
+ var buttonbar = $('#fileupload .fileupload-buttonbar'),
+ files = [{name: 'test'}];
+ expect(7);
+ $('#fileupload').fileupload({
+ send: function (e, data) {
+ ok(true, 'Started file upload via global start button');
+ },
+ fail: function (e, data) {
+ ok(true, 'Canceled file upload via global cancel button');
+ data.context.remove();
+ },
+ destroy: function (e, data) {
+ ok(true, 'Delete action called via global delete button');
+ }
+ });
+ ok(
+ buttonbar.find('.start')
+ .data('events').click.length,
+ 'Listens to start button click events'
+ );
+ ok(
+ buttonbar.find('.cancel')
+ .data('events').click.length,
+ 'Listens to cancel button click events'
+ );
+ ok(
+ buttonbar.find('.delete')
+ .data('events').click.length,
+ 'Listens to delete button click events'
+ );
+ $('#fileupload').fileupload('add', {files: files});
+ buttonbar.find('.cancel').click();
+ $('#fileupload').fileupload('add', {files: files});
+ buttonbar.find('.start').click();
+ buttonbar.find('.cancel').click();
+ $('#fileupload').data('fileupload')._renderDownload(files)
+ .appendTo($('#fileupload .files')).show()
+ .find('.delete input').click();
+ buttonbar.find('.delete').click();
+ });
+
+ module('UI API', lifecycleUI);
+
+ test('destroy', function () {
+ var buttonbar = $('#fileupload .fileupload-buttonbar');
+ $('#fileupload').fileupload();
+ buttonbar.find('button').click($.noop);
+ $('#fileupload').fileupload('destroy');
+ strictEqual(
+ buttonbar.find('.start').data('events').click.length,
+ 1,
+ 'Removes own start button click event listener'
+ );
+ strictEqual(
+ buttonbar.find('.cancel').data('events').click.length,
+ 1,
+ 'Removes own cancel button click event listener'
+ );
+ strictEqual(
+ buttonbar.find('.delete').data('events').click.length,
+ 1,
+ 'Removes own delete button click event listener'
+ );
+ });
+
+ test('disable', function () {
+ var buttonbar = $('#fileupload .fileupload-buttonbar');
+ $('#fileupload').fileupload();
+ $('#fileupload').fileupload('disable');
+ strictEqual(
+ buttonbar.find('input[type=file], button').not(':disabled').length,
+ 0,
+ 'Disables the buttonbar buttons'
+ );
+ });
+
+ test('enable', function () {
+ var buttonbar = $('#fileupload .fileupload-buttonbar');
+ $('#fileupload')
+ .fileupload()
+ .fileupload('disable')
+ .fileupload('enable');
+ strictEqual(
+ buttonbar.find('input[type=file], button').not(':disabled').length,
+ 4,
+ 'Enables the buttonbar buttons'
+ );
+ });
+
+ module('UI Callbacks', lifecycleUI);
+
+ test('destroy', function () {
+ expect(3);
+ $('#fileupload').fileupload({
+ destroy: function (e, data) {
+ ok(true, 'Triggers destroy callback');
+ strictEqual(
+ data.url,
+ 'test',
+ 'Passes over deletion url parameter'
+ );
+ strictEqual(
+ data.type,
+ 'DELETE',
+ 'Passes over deletion request type parameter'
+ );
+ }
+ });
+ $('#fileupload').data('fileupload')._renderDownload([{
+ name: 'test',
+ delete_url: 'test',
+ delete_type: 'DELETE'
+ }]).appendTo($('#fileupload .files')).show()
+ .find('.delete input').click();
+ $('#fileupload .fileupload-buttonbar .delete').click();
+ });
+
+ asyncTest('added', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ added: function (e, data) {
+ start();
+ strictEqual(
+ data.files[0].name,
+ param.files[0].name,
+ 'Triggers added callback'
+ );
+ },
+ send: function () {
+ return false;
+ }
+ }).fileupload('add', param);
+ });
+
+ asyncTest('started', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ started: function (e) {
+ start();
+ ok('Triggers started callback');
+ return false;
+ },
+ sent: function (e, data) {
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('sent', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ sent: function (e, data) {
+ start();
+ strictEqual(
+ data.files[0].name,
+ param.files[0].name,
+ 'Triggers sent callback'
+ );
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('completed', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ completed: function (e, data) {
+ start();
+ ok('Triggers completed callback');
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('failed', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ failed: function (e, data) {
+ start();
+ ok('Triggers failed callback');
+ return false;
+ }
+ }).fileupload('send', param).abort();
+ });
+
+ asyncTest('stopped', function () {
+ expect(1);
+ var param = {files: [{name: 'test'}]};
+ $('#fileupload').fileupload({
+ stopped: function (e, data) {
+ start();
+ ok('Triggers stopped callback');
+ return false;
+ }
+ }).fileupload('send', param);
+ });
+
+ asyncTest('destroyed', function () {
+ expect(1);
+ $('#fileupload').fileupload({
+ destroyed: function (e, data) {
+ start();
+ ok(true, 'Triggers destroyed callback');
+ }
+ });
+ $('#fileupload').data('fileupload')._renderDownload([{
+ name: 'test',
+ delete_url: 'test',
+ delete_type: 'DELETE'
+ }]).appendTo($('#fileupload .files')).show()
+ .find('.delete input').click();
+ $('#fileupload .fileupload-buttonbar .delete').click();
+ });
+
+ module('UI Options', lifecycleUI);
+
+ test('autoUpload', function () {
+ expect(1);
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ send: function (e, data) {
+ ok(true, 'Started file upload automatically');
+ return false;
+ }
+ })
+ .fileupload('add', {files: [{name: 'test'}]})
+ .fileupload('option', 'autoUpload', false)
+ .fileupload('add', {files: [{name: 'test'}]});
+ });
+
+ test('maxNumberOfFiles', function () {
+ expect(4);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ maxNumberOfFiles: 1,
+ singleFileUploads: false,
+ send: function (e, data) {
+ strictEqual(
+ sendIndex += 1,
+ addIndex
+ );
+ },
+ progress: $.noop,
+ progressall: $.noop,
+ done: $.noop,
+ stop: $.noop
+ })
+ .fileupload('add', {files: [{name: (addIndex += 1)}]})
+ .fileupload('add', {files: [{name: 'test'}]})
+ .fileupload('option', 'maxNumberOfFiles', 1)
+ .fileupload('add', {files: [{name: 1}, {name: 2}]})
+ .fileupload({
+ maxNumberOfFiles: 1,
+ send: function (e, data) {
+ strictEqual(
+ sendIndex += 1,
+ addIndex
+ );
+ return false;
+ }
+ })
+ .fileupload('add', {files: [{name: (addIndex += 1)}]})
+ .fileupload('add', {files: [{name: (addIndex += 1)}]})
+ .fileupload({
+ maxNumberOfFiles: 0,
+ send: function (e, data) {
+ ok(
+ !$.blueimpUI.fileupload.prototype.options
+ .send.call(this, e, data)
+ );
+ return false;
+ }
+ })
+ .fileupload('send', {files: [{name: 'test'}]});
+ });
+
+ test('maxFileSize', function () {
+ expect(3);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ maxFileSize: 1000,
+ send: function (e, data) {
+ strictEqual(
+ sendIndex += 1,
+ addIndex
+ );
+ return false;
+ }
+ })
+ .fileupload('add', {files: [{
+ name: (addIndex += 1)
+ }]})
+ .fileupload('add', {files: [{
+ name: (addIndex += 1),
+ size: 999
+ }]})
+ .fileupload('add', {files: [{
+ name: 'test',
+ size: 1001
+ }]})
+ .fileupload({
+ send: function (e, data) {
+ ok(
+ !$.blueimpUI.fileupload.prototype.options
+ .send.call(this, e, data)
+ );
+ return false;
+ }
+ })
+ .fileupload('send', {files: [{
+ name: 'test',
+ size: 1001
+ }]});
+ });
+
+ test('minFileSize', function () {
+ expect(3);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ minFileSize: 1000,
+ send: function (e, data) {
+ strictEqual(
+ sendIndex += 1,
+ addIndex
+ );
+ return false;
+ }
+ })
+ .fileupload('add', {files: [{
+ name: (addIndex += 1)
+ }]})
+ .fileupload('add', {files: [{
+ name: (addIndex += 1),
+ size: 1001
+ }]})
+ .fileupload('add', {files: [{
+ name: 'test',
+ size: 999
+ }]})
+ .fileupload({
+ send: function (e, data) {
+ ok(
+ !$.blueimpUI.fileupload.prototype.options
+ .send.call(this, e, data)
+ );
+ return false;
+ }
+ })
+ .fileupload('send', {files: [{
+ name: 'test',
+ size: 999
+ }]});
+ });
+
+ test('acceptFileTypes', function () {
+ expect(3);
+ var addIndex = 0,
+ sendIndex = 0;
+ $('#fileupload')
+ .fileupload({
+ autoUpload: true,
+ acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
+ previewFileTypes: /none/,
+ send: function (e, data) {
+ strictEqual(
+ sendIndex += 1,
+ addIndex
+ );
+ return false;
+ }
+ })
+ .fileupload('add', {files: [{
+ name: (addIndex += 1) + '.jpg'
+ }]})
+ .fileupload('add', {files: [{
+ name: (addIndex += 1),
+ type: 'image/jpeg'
+ }]})
+ .fileupload('add', {files: [{
+ name: 'test.txt',
+ type: 'text/plain'
+ }]})
+ .fileupload({
+ send: function (e, data) {
+ ok(
+ !$.blueimpUI.fileupload.prototype.options
+ .send.call(this, e, data)
+ );
+ return false;
+ }
+ })
+ .fileupload('send', {files: [{
+ name: 'test.txt',
+ type: 'text/plain'
+ }]});
+ });
+
+ test('acceptFileTypes as HTML5 data attribute', function () {
+ expect(2);
+ var regExp = /(\.|\/)(gif|jpe?g|png)$/i;
+ $('#fileupload')
+ .attr('data-accept-file-types', regExp.toString())
+ .fileupload();
+ strictEqual(
+ $.type($('#fileupload').fileupload('option', 'acceptFileTypes')),
+ $.type(regExp)
+ );
+ strictEqual(
+ $('#fileupload').fileupload('option', 'acceptFileTypes').toString(),
+ regExp.toString()
+ );
+ });
+
+});
diff --git a/mod/lightpics/version.php b/mod/lightpics/version.php
new file mode 100644
index 000000000..68817c053
--- /dev/null
+++ b/mod/lightpics/version.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Version of this plugin.
+ * Used for the upgrade system.
+ */
+
+$version = 2012020901;
diff --git a/mod/lightpics/views/default/admin/settings/photos.php b/mod/lightpics/views/default/admin/settings/photos.php
new file mode 100644
index 000000000..cc3592f37
--- /dev/null
+++ b/mod/lightpics/views/default/admin/settings/photos.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Admin page
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$tab = get_input('tab', 'settings');
+
+echo elgg_view('navigation/tabs', array(
+ 'tabs' => array(
+ array(
+ 'text' => elgg_echo('settings'),
+ 'href' => '/admin/settings/photos',
+ 'selected' => ($tab == 'settings'),
+ ),
+ array(
+ 'text' => elgg_echo('tidypics:server_info'),
+ 'href' => '/admin/settings/photos?tab=server_info',
+ 'selected' => ($tab == 'server_info'),
+ ),
+ array(
+ 'text' => elgg_echo('tidypics:server_config'),
+ 'href' => '/admin/settings/photos?tab=server_config',
+ 'selected' => ($tab == 'server_config'),
+ ),
+ array(
+ 'text' => 'ImageMagick',
+ 'href' => '/admin/settings/photos?tab=image_lib',
+ 'selected' => ($tab == 'image_lib'),
+ ),
+ array(
+ 'text' => elgg_echo('tidypics:settings:thumbnail'),
+ 'href' => '/admin/settings/photos?tab=thumbnail',
+ 'selected' => ($tab == 'thumbnail'),
+ ),
+ array(
+ 'text' => elgg_echo('tidypics:settings:help'),
+ 'href' => '/admin/settings/photos?tab=help',
+ 'selected' => ($tab == 'help'),
+ ),
+ )
+));
+
+switch ($tab) {
+ case 'server_info':
+ echo elgg_view('admin/settings/photos/server_info');
+ break;
+
+ case 'server_config':
+ echo elgg_view('admin/settings/photos/server_config');
+ break;
+
+ case 'image_lib':
+ echo elgg_view('admin/settings/photos/image_lib');
+ break;
+
+ case 'thumbnail':
+ echo elgg_view('admin/settings/photos/thumbnail');
+ break;
+
+ case 'help':
+ echo elgg_view('admin/settings/photos/help');
+ break;
+
+ default:
+ case 'settings':
+ echo elgg_view('admin/settings/photos/settings');
+ break;
+}
diff --git a/mod/lightpics/views/default/admin/settings/photos/help.php b/mod/lightpics/views/default/admin/settings/photos/help.php
new file mode 100644
index 000000000..1e5bdd254
--- /dev/null
+++ b/mod/lightpics/views/default/admin/settings/photos/help.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Tidypics Help
+ *
+ */
+
+elgg_load_library('elgg:markdown');
+
+$faq = elgg_get_plugins_path() . 'lightpics/FAQ.txt';
+$text = Markdown(file_get_contents($faq));
+
+$content = "<div class=\"elgg-markdown\">$text</div>";
+
+echo elgg_view_module('inline', elgg_echo('tidypics:settings:help'), $content);
diff --git a/mod/lightpics/views/default/admin/settings/photos/image_lib.php b/mod/lightpics/views/default/admin/settings/photos/image_lib.php
new file mode 100644
index 000000000..6e519b607
--- /dev/null
+++ b/mod/lightpics/views/default/admin/settings/photos/image_lib.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Test the location of ImageMagick
+ */
+
+$content .= '<p>' . elgg_echo('tidypics:lib_tools:testing') . '</p>';
+$content .= '<p><label>' . elgg_echo('tidypics:settings:im_path');
+$content .= elgg_view('input/text', array(
+ 'name' => 'im_location'
+));
+$content .= '</p><p>';
+$content .= elgg_view('input/submit', array(
+ 'value' => elgg_echo('submit'),
+ 'id' => 'tidypics-im-test'
+));
+$content .= '</p>';
+$content .= '<p id="tidypics-im-results"></p>';
+
+echo elgg_view_module('inline', 'ImageMagick', $content);
+
+?>
+<script type="text/javascript">
+ $(function() {
+ $('#tidypics-im-test').click(function() {
+ var loc = $('input[name=im_location]').val();
+ $("#tidypics-im-results").html("");
+ $.ajax({
+ type: "GET",
+ url: elgg.normalize_url('mod/tidypics/actions/photos/admin/imtest.php'),
+ data: {location: loc},
+ cache: false,
+ success: function(html){
+ $("#tidypics-im-results").html(html);
+ }
+ });
+ });
+ });
+</script>
diff --git a/mod/lightpics/views/default/admin/settings/photos/server_config.php b/mod/lightpics/views/default/admin/settings/photos/server_config.php
new file mode 100644
index 000000000..b4fe552ec
--- /dev/null
+++ b/mod/lightpics/views/default/admin/settings/photos/server_config.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Tidypics server configuration
+ *
+ */
+
+elgg_load_library('elgg:markdown');
+
+$faq = elgg_get_plugins_path() . 'lightpics/CONFIG.txt';
+$text = Markdown(file_get_contents($faq));
+
+$content = "<div class=\"elgg-markdown\">$text</div>";
+
+echo elgg_view_module('inline', elgg_echo('tidypics:server_config'), $content);
diff --git a/mod/lightpics/views/default/admin/settings/photos/server_info.php b/mod/lightpics/views/default/admin/settings/photos/server_info.php
new file mode 100644
index 000000000..c100b0de2
--- /dev/null
+++ b/mod/lightpics/views/default/admin/settings/photos/server_info.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * Tidypics server analysis
+ */
+
+function tp_readable_size($bytes) {
+ if (strpos($bytes, 'M')) {
+ return $bytes . 'B';
+ }
+
+ $size = $bytes / 1024;
+ if ($size < 1024) {
+ $size = number_format($size, 2);
+ $size .= ' KB';
+ } else {
+ $size = $size / 1024;
+ if ($size < 1024) {
+ $size = number_format($size, 2);
+ $size .= ' MB';
+ } else {
+ $size = $size / 1024;
+ $size = number_format($size, 2);
+ $size .= ' GB';
+ }
+ }
+ return $size;
+}
+
+$disablefunc = explode(',', ini_get('disable_functions'));
+$exec_avail = elgg_echo('tidypics:disabled');
+if (is_callable('exec') && !in_array('exec',$disablefunc)) {
+ $exec_avail = elgg_echo('tidypics:enabled');
+}
+
+ob_start();
+
+?>
+<table class="elgg-table-alt">
+ <tr>
+ <td><?php echo elgg_echo('tidypics:server_info:php_version'); ?></td>
+ <td><?php echo phpversion(); ?></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GD</td>
+ <td><?php echo (extension_loaded('gd')) ? elgg_echo('tidypics:enabled') : elgg_echo('tidypics:disabled'); ?></td>
+ <td><?php echo elgg_echo('tidypics:server_info:gd_desc'); ?></td>
+ </tr>
+ <tr>
+ <td>imagick</td>
+ <td><?php echo (extension_loaded('imagick')) ? elgg_echo('tidypics:enabled') : elgg_echo('tidypics:disabled'); ?></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>exec()</td>
+ <td><?php echo $exec_avail; ?></td>
+ <td><?php echo elgg_echo('tidypics:server_info:exec_desc'); ?></td>
+ </tr>
+ <tr>
+ <td><?php echo elgg_echo('tidypics:server_info:memory_limit'); ?></td>
+ <td><?php echo tp_readable_size(ini_get('memory_limit')); ?></td>
+ <td><?php echo elgg_echo('tidypics:server_info:memory_limit_desc'); ?></td>
+ </tr>
+ <tr>
+ <td><?php echo elgg_echo('tidypics:server_info:peak_usage'); ?></td>
+ <td><?php if (function_exists('memory_get_peak_usage')) echo tp_readable_size(memory_get_peak_usage()); ?></td>
+ <td><?php echo elgg_echo('tidypics:server_info:peak_usage_desc'); ?></td>
+ </tr>
+ <tr>
+ <td><?php echo elgg_echo('tidypics:server_info:upload_max_filesize'); ?></td>
+ <td><?php echo tp_readable_size(ini_get('upload_max_filesize')); ?></td>
+ <td><?php echo elgg_echo('tidypics:server_info:upload_max_filesize_desc'); ?></td>
+ </tr>
+ <tr>
+ <td><?php echo elgg_echo('tidypics:server_info:post_max_size'); ?></td>
+ <td><?php echo tp_readable_size(ini_get('post_max_size')); ?></td>
+ <td><?php echo elgg_echo('tidypics:server_info:post_max_size_desc'); ?></td>
+ </tr>
+ <tr>
+ <td><?php echo elgg_echo('tidypics:server_info:max_input_time'); ?></td>
+ <td><?php echo ini_get('max_input_time'); ?>s</td>
+ <td><?php echo elgg_echo('tidypics:server_info:max_input_time_desc'); ?></td>
+ </tr>
+ <tr>
+ <td><?php echo elgg_echo('tidypics:server_info:max_execution_time'); ?></td>
+ <td><?php echo ini_get('max_execution_time'); ?> s</td>
+ <td><?php echo elgg_echo('tidypics:server_info:max_execution_time_desc'); ?></td>
+ </tr>
+ <tr>
+ <td>GD imagejpeg</td>
+ <td><?php echo (is_callable('imagejpeg')) ? elgg_echo('tidypics:enabled') : elgg_echo('tidypics:disabled'); ?></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GD imagepng</td>
+ <td><?php echo (is_callable('imagepng')) ? elgg_echo('tidypics:enabled') : elgg_echo('tidypics:disabled'); ?></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GD imagegif</td>
+ <td><?php echo (is_callable('imagegif')) ? elgg_echo('tidypics:enabled') : elgg_echo('tidypics:disabled'); ?></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>EXIF</td>
+ <td><?php echo (is_callable('exif_read_data')) ? elgg_echo('tidypics:enabled') : elgg_echo('tidypics:disabled'); ?></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><?php echo elgg_echo('tidypics:server_info:use_only_cookies'); ?></td>
+ <td><?php echo (ini_get('session.use_only_cookies')) ? elgg_echo('tidypics:enabled') : elgg_echo('tidypics:disabled'); ?></td>
+ <td><?php echo elgg_echo('tidypics:server_info:use_only_cookies_desc'); ?></td>
+ </tr>
+</table>
+
+<?php
+
+$content = ob_get_clean();
+
+echo elgg_view_module('inline', elgg_echo('tidypics:server_info'), $content); \ No newline at end of file
diff --git a/mod/lightpics/views/default/admin/settings/photos/settings.php b/mod/lightpics/views/default/admin/settings/photos/settings.php
new file mode 100644
index 000000000..6ea444392
--- /dev/null
+++ b/mod/lightpics/views/default/admin/settings/photos/settings.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Tidypics settings
+ */
+
+if (tidypics_is_upgrade_available()) {
+ echo '<div class="elgg-admin-notices">';
+ echo '<p>';
+ echo elgg_view('output/url', array(
+ 'text' => elgg_echo('tidypics:upgrade'),
+ 'href' => 'action/photos/admin/upgrade',
+ 'is_action' => true,
+ ));
+ echo '</p>';
+ echo '</div>';
+}
+
+echo elgg_view_form('photos/admin/settings');
diff --git a/mod/lightpics/views/default/admin/settings/photos/thumbnail.php b/mod/lightpics/views/default/admin/settings/photos/thumbnail.php
new file mode 100644
index 000000000..5f9769e91
--- /dev/null
+++ b/mod/lightpics/views/default/admin/settings/photos/thumbnail.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Tidypics thumbnail creation tool
+ */
+
+$title = elgg_echo('tidypics:settings:thumbnail');
+$body = '<p>' . elgg_echo('tidypics:thumbnail_tool_blurb') . '</p>';
+$im_id = elgg_echo('tidypics:settings:im_id');
+$input = elgg_view('input/text', array(
+ 'name' => 'image_id'
+));
+$submit = elgg_view('input/submit', array(
+ 'value' => elgg_echo('submit'),
+ 'id' => 'elgg-tidypics-im-test'
+));
+
+$body .=<<<HTML
+ <p>
+ <label>$im_id $input</label>
+ </p>
+ <p>
+ $submit
+ <div id="elgg-tidypics-im-results"></div>
+ </p>
+HTML;
+
+echo elgg_view_module('inline', $title, $body);
+
+?>
+
+<script type="text/javascript">
+ $(function() {
+ $('#elgg-tidypics-im-test').click(function() {
+ var image_id = $('input[name=image_id]').val();
+ $("#elgg-tidypics-im-results").html('<div class="elgg-ajax-loader"></div>');
+ elgg.action('photos/admin/create_thumbnails', {
+ format: 'JSON',
+ data: {guid: image_id},
+ cache: false,
+ success: function(result) {
+ // error
+ if (result.status < 0) {
+ var html = '';
+ } else {
+ var html = '<img class="elgg-photo tidypics-photo" src="'
+ + result.output.thumbnail_src + '" alt="' + result.output.title
+ + '" />';
+ }
+ $("#elgg-tidypics-im-results").html(html);
+ }
+ });
+ });
+ });
+</script> \ No newline at end of file
diff --git a/mod/lightpics/views/default/forms/photos/admin/settings.php b/mod/lightpics/views/default/forms/photos/admin/settings.php
new file mode 100644
index 000000000..e0b8a9880
--- /dev/null
+++ b/mod/lightpics/views/default/forms/photos/admin/settings.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Tidypics admin settings form body
+ *
+ * @todo remove original image, group only upload not delete
+ */
+
+$plugin = elgg_get_plugin_from_id('lightpics');
+
+$title = elgg_echo('tidypics:settings:main');
+$content = elgg_view('forms/photos/admin/settings/main', array('plugin' => $plugin));
+echo elgg_view_module('inline', $title, $content);
+
+$title = elgg_echo('tidypics:settings:heading:img_lib');
+$content = elgg_view('forms/photos/admin/settings/image_lib', array('plugin' => $plugin));
+echo elgg_view_module('inline', $title, $content);
+
+$title = elgg_echo('tidypics:settings:heading:river');
+$content = elgg_view('forms/photos/admin/settings/activity', array('plugin' => $plugin));
+echo elgg_view_module('inline', $title, $content);
+
+$title = elgg_echo('tidypics:settings:heading:sizes');
+$content = elgg_view('forms/photos/admin/settings/thumbnails', array('plugin' => $plugin));
+echo elgg_view_module('inline', $title, $content);
+
+echo elgg_view('input/submit', array('value' => elgg_echo("save")));
diff --git a/mod/lightpics/views/default/forms/photos/admin/settings/activity.php b/mod/lightpics/views/default/forms/photos/admin/settings/activity.php
new file mode 100644
index 000000000..d62901af6
--- /dev/null
+++ b/mod/lightpics/views/default/forms/photos/admin/settings/activity.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * River integration
+ */
+
+$plugin = $vars['plugin'];
+
+echo '<div>';
+echo elgg_echo('tidypics:settings:img_river_view') . ': ';
+echo elgg_view('input/dropdown', array(
+ 'name' => 'params[img_river_view]',
+ 'options_values' => array(
+ 'all' => elgg_echo('tidypics:option:all'),
+ 'batch' => '1',
+ 'none' => elgg_echo('tidypics:option:none'),
+ ),
+ 'value' => $plugin->img_river_view,
+));
+echo '</div>';
+echo '<div>';
+echo elgg_echo('tidypics:settings:album_river_view') . ': ';
+echo elgg_view('input/dropdown', array(
+ 'name' => 'params[album_river_view]',
+ 'options_values' => array(
+ 'cover' => elgg_echo('tidypics:option:cover'),
+ 'set' => elgg_echo('tidypics:option:set'),
+ ),
+ 'value' => $plugin->album_river_view,
+));
+echo '</div>';
+
diff --git a/mod/lightpics/views/default/forms/photos/admin/settings/image_lib.php b/mod/lightpics/views/default/forms/photos/admin/settings/image_lib.php
new file mode 100644
index 000000000..4e3f7f2a0
--- /dev/null
+++ b/mod/lightpics/views/default/forms/photos/admin/settings/image_lib.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Image library settings
+ */
+
+$plugin = $vars['plugin'];
+
+echo'<div>';
+echo elgg_echo('tidypics:settings:image_lib') . ': ';
+echo elgg_view('input/dropdown', array(
+ 'name' => 'params[image_lib]',
+ 'options_values' => tidypics_get_image_libraries(),
+ 'value' => $plugin->image_lib,
+));
+echo '</div>';
+echo '<div>';
+echo elgg_echo('tidypics:settings:im_path') . ' ';
+echo elgg_view("input/text", array('name' => 'params[im_path]', 'value' => $plugin->im_path));
+echo '</div>';
+
diff --git a/mod/lightpics/views/default/forms/photos/admin/settings/main.php b/mod/lightpics/views/default/forms/photos/admin/settings/main.php
new file mode 100644
index 000000000..a35c9ab59
--- /dev/null
+++ b/mod/lightpics/views/default/forms/photos/admin/settings/main.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Primary settings for Elgg
+ */
+
+$plugin = $vars['plugin'];
+
+$checkboxes = array('view_count', 'exif', 'download_link');
+foreach ($checkboxes as $checkbox) {
+ echo '<div>';
+ echo elgg_view('input/checkbox', array(
+ 'name' => "params[$checkbox]",
+ 'value' => true,
+ 'checked' => (bool)$plugin->$checkbox,
+ ));
+ echo ' ' . elgg_echo("tidypics:settings:$checkbox");
+ echo '</div>';
+}
+
+// max image size
+echo '<div>';
+echo elgg_echo('tidypics:settings:maxfilesize');
+echo elgg_view('input/text', array(
+ 'name' => 'params[maxfilesize]',
+ 'value' => $plugin->maxfilesize,
+));
+echo '</div>';
+
+// Quota Size
+$quota = $plugin->quota;
+if (!$quota) {
+ $quota = 0;
+}
+echo '<div>' . elgg_echo('tidypics:settings:quota');
+echo elgg_view('input/text', array(
+ 'name' => 'params[quota]',
+ 'value' => $quota,
+));
+echo '</div>';
diff --git a/mod/lightpics/views/default/forms/photos/admin/settings/thumbnails.php b/mod/lightpics/views/default/forms/photos/admin/settings/thumbnails.php
new file mode 100644
index 000000000..ec7a6d1b2
--- /dev/null
+++ b/mod/lightpics/views/default/forms/photos/admin/settings/thumbnails.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Thumbnail sizes
+ */
+
+$plugin = $vars['plugin'];
+
+echo '<span class="elgg-text-help">' . elgg_echo('tidypics:settings:sizes:instructs') . '</span>';
+$image_sizes = unserialize($plugin->image_sizes);
+echo '<table>';
+$sizes = array('large', 'small', 'tiny');
+foreach ($sizes as $size) {
+ echo '<tr>';
+ echo '<td class="pas">';
+ echo elgg_echo("tidypics:settings:{$size}size");
+ echo '</td><td class="pas">';
+ echo 'width: ';
+ echo elgg_view('input/text', array(
+ 'name' => "{$size}_image_width",
+ 'value' => $image_sizes["{$size}_image_width"],
+ 'class' => 'tidypics-input-thin',
+ ));
+ echo '</td><td class="pas">';
+ echo 'height: ';
+ echo elgg_view('input/text', array(
+ 'name' => "{$size}_image_height",
+ 'value' => $image_sizes["{$size}_image_height"],
+ 'class' => 'tidypics-input-thin',
+ ));
+ echo '</td>';
+ echo '</tr>';
+}
+echo '</table>';
diff --git a/mod/lightpics/views/default/forms/photos/album/save.php b/mod/lightpics/views/default/forms/photos/album/save.php
new file mode 100644
index 000000000..8a1202c07
--- /dev/null
+++ b/mod/lightpics/views/default/forms/photos/album/save.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Save album form body
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$title = elgg_extract('title', $vars, '');
+$description = elgg_extract('description', $vars, '');
+$tags = elgg_extract('tags', $vars, '');
+$access_id = elgg_extract('access_id', $vars, get_default_access());
+$container_guid = elgg_extract('container_guid', $vars, elgg_get_page_owner_guid());
+$guid = elgg_extract('guid', $vars, 0);
+
+?>
+
+<div>
+ <label><?php echo elgg_echo('album:title'); ?></label>
+ <?php echo elgg_view('input/text', array('name' => 'title', 'value' => $title)); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('album:desc'); ?></label>
+ <?php echo elgg_view('input/longtext', array('name' => 'description', 'value' => $description)); ?>
+</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>
+ <?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' => 'guid', 'value' => $guid));
+echo elgg_view('input/hidden', array('name' => 'container_guid', 'value' => $container_guid));
+echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+?>
+</div>
diff --git a/mod/lightpics/views/default/forms/photos/album/sort.php b/mod/lightpics/views/default/forms/photos/album/sort.php
new file mode 100644
index 000000000..49bd016aa
--- /dev/null
+++ b/mod/lightpics/views/default/forms/photos/album/sort.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Album sorting view
+ */
+
+$album = $vars['album'];
+$image_guids = $album->getImageList();
+
+echo '<div>';
+echo elgg_echo('tidypics:sort:instruct');
+echo '</div>';
+
+echo '<div>';
+echo elgg_view('input/hidden', array('name' => 'guids'));
+echo elgg_view('input/hidden', array('name' => 'album_guid', 'value' => $album->guid));
+echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+echo '</div>';
+
+echo '<div class="elgg-foot">';
+echo '<ul id="tidypics-sort" class="elgg-gallery">';
+foreach ($image_guids as $image_guid) {
+ $image = get_entity($image_guid);
+ $img = elgg_view('output/img', array(
+ 'src' => $image->getIconURL(),
+ ));
+ echo "<li class=\"mam\" id=\"$image_guid\">$img</li>";
+}
+echo '</ul>';
diff --git a/mod/lightpics/views/default/forms/photos/basic_upload.php b/mod/lightpics/views/default/forms/photos/basic_upload.php
new file mode 100644
index 000000000..9e71cf59e
--- /dev/null
+++ b/mod/lightpics/views/default/forms/photos/basic_upload.php
@@ -0,0 +1,63 @@
+<?php
+$album = $vars['entity'];
+$help = elgg_echo('tidypics:uploader:help');
+
+$input = elgg_view('input/file', array(
+ 'name' => 'images[]',
+ 'multiple' => 'multiple',
+ 'class' => 'hidden-js',
+));
+
+$button = elgg_view('output/url', array(
+ 'text' => elgg_echo('tidypics:uploader:upload') . $input,
+ 'class' => 'elgg-button elgg-button-action fileinput-button',
+));
+
+$reset = elgg_view('input/reset', array(
+ 'value' => elgg_echo('cancel'),
+ 'class' => 'hidden',
+));
+
+$foot = elgg_view('input/hidden', array('name' => 'guid', 'value' => $album->getGUID()));
+$foot .= elgg_view('input/submit', array('value' => elgg_echo("save")));
+
+echo <<<HTML
+<div>
+ $max
+</div>
+<div class="fileinput-container">
+ $button
+ $reset
+ <p class="elgg-text-help">$help</p>
+</div>
+<div class="mtm"><!-- The table listing the files available for upload/download -->
+ <table role="presentation" class="elgg-table-alt clearfloat mtm">
+ <tbody class="files"></tbody>
+ </table>
+</div>
+<div class='elgg-foot'>
+ $foot
+</div>
+HTML;
+
+?>
+
+<noscript><style type="text/css">hidden-nojs {display: hidden}</style></noscript>
+
+<!-- The template to display files available for upload -->
+<script id="template-upload" type="text/x-tmpl">
+{% for (var i=0, file; file=o.files[i]; i++) { %}
+ <tr class="template-upload fade">
+ {% if (file.error) { %}
+ <td class="error"><span class="elgg-message elgg-state-error">{%=locale.fileupload.error%} {%=locale.fileupload.errors[file.error] || file.error%}</span></td>
+ {% } else { %}
+ <td class="preview"><span class="fade"></span></td>
+ {% } %}
+ <td class="name"><span>{%=file.name%}</span></td>
+ <td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
+
+ </tr>
+{% } %}
+</script>
+<!-- The template to display files available for download -->
+<script id="template-download" type="text/x-tmpl" />
diff --git a/mod/lightpics/views/default/forms/photos/batch/edit.php b/mod/lightpics/views/default/forms/photos/batch/edit.php
new file mode 100644
index 000000000..d843d8349
--- /dev/null
+++ b/mod/lightpics/views/default/forms/photos/batch/edit.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Edit properties on a batch of images
+ *
+ * @uses $vars['batch'] ElggObject
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$batch = $vars['batch'];
+$album = $batch->getContainerEntity();
+
+$images = elgg_get_entities_from_relationship(array(
+ 'type' => 'object',
+ 'subtype' => 'image',
+ 'relationship' => 'belongs_to_batch',
+ 'relationship_guid' => $batch->getGUID(),
+ 'inverse_relationship' => true,
+ 'limit' => 0
+));
+
+echo '<ul>';
+foreach ($images as $image) {
+ echo '<li>';
+ echo elgg_view('forms/photos/batch/edit/image', array('entity' => $image));
+ echo '</li>';
+}
+echo '</ul>';
+
+echo '<div class="elgg-foot">';
+echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+echo '</div>';
diff --git a/mod/lightpics/views/default/forms/photos/batch/edit/image.php b/mod/lightpics/views/default/forms/photos/batch/edit/image.php
new file mode 100644
index 000000000..eed804e90
--- /dev/null
+++ b/mod/lightpics/views/default/forms/photos/batch/edit/image.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Form component for editing a single image
+ *
+ * @uses $vars['entity']
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$image = $vars['entity'];
+
+echo '<div class="elgg-image-block">';
+
+echo '<div class="elgg-image">';
+echo elgg_view_entity_icon($image, 'small', array('href' => false));
+echo '</div>';
+
+echo '<div class="elgg-body"><fieldset class="mlm">';
+echo '<div><label>' . elgg_echo('album:title') . '</label>';
+echo elgg_view('input/text', array('name' => 'title[]', 'value' => $title,));
+echo '</div>';
+
+echo '<div><label>' . elgg_echo('caption') . '</label>';
+echo elgg_view('input/longtext', array('name' => 'caption[]'));
+echo '</div>';
+
+echo '<div><label>' . elgg_echo("tags") . '</label>';
+echo elgg_view('input/tags', array('name' => 'tags[]'));
+echo '</div>';
+
+echo elgg_view('input/hidden', array('name' => 'guid[]', 'value' => $image->getGUID()));
+echo '<fieldset></div>';
+
+echo '</div>';
diff --git a/mod/lightpics/views/default/forms/photos/image/save.php b/mod/lightpics/views/default/forms/photos/image/save.php
new file mode 100644
index 000000000..47a08640a
--- /dev/null
+++ b/mod/lightpics/views/default/forms/photos/image/save.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Save image form body
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$title = elgg_extract('title', $vars, '');
+$description = elgg_extract('description', $vars, '');
+$tags = elgg_extract('tags', $vars, '');
+$access_id = elgg_extract('access_id', $vars, get_default_access());
+$container_guid = elgg_extract('container_guid', $vars, elgg_get_page_owner_guid());
+$guid = elgg_extract('guid', $vars, 0);
+
+?>
+
+<div>
+ <label><?php echo elgg_echo('album:title'); ?></label>
+ <?php echo elgg_view('input/text', array('name' => 'title', 'value' => $title)); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('album:desc'); ?></label>
+ <?php echo elgg_view('input/longtext', array('name' => 'description', 'value' => $description)); ?>
+</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>
+ <?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' => 'guid', 'value' => $guid));
+echo elgg_view('input/hidden', array('name' => 'container_guid', 'value' => $container_guid));
+echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+?>
+</div>
diff --git a/mod/lightpics/views/default/icon/object/album.php b/mod/lightpics/views/default/icon/object/album.php
new file mode 100644
index 000000000..ddc6a8a56
--- /dev/null
+++ b/mod/lightpics/views/default/icon/object/album.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Image icon view
+ *
+ * @uses $vars['entity'] The entity the icon represents - uses getIconURL() method
+ * @uses $vars['size'] tiny, small (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
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$album = $vars['entity'];
+
+$cover_guid = $album->getCoverImageGuid();
+if ($cover_guid) {
+ $vars['title'] = $album->getTitle();
+ $vars['href'] = $album->getURL();
+ echo elgg_view_entity_icon(get_entity($cover_guid), $vars['size'], $vars);
+} else {
+ $url = "mod/lightpics/graphics/empty_album.png";
+ $url = elgg_normalize_url($url);
+ $img = elgg_view('output/img', array(
+ 'src' => $url,
+ 'class' => 'elgg-photo',
+ 'title' => $album->getTitle(),
+ 'alt' => $album->getTitle(),
+ ));
+
+ $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);
+}
diff --git a/mod/lightpics/views/default/icon/object/image.php b/mod/lightpics/views/default/icon/object/image.php
new file mode 100644
index 000000000..9087fc3d8
--- /dev/null
+++ b/mod/lightpics/views/default/icon/object/image.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Image icon view
+ *
+ * @uses $vars['entity'] The entity the icon represents - uses getIconURL() method
+ * @uses $vars['size'] tiny, small (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
+ * @uses $vars['title'] Optional title override
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$entity = $vars['entity'];
+
+$sizes = array('master', 'large', 'small', 'tiny');
+// Get size
+if (!in_array($vars['size'], $sizes)) {
+ $vars['size'] = 'small';
+}
+
+if (!isset($vars['title'])) {
+ $title = $entity->getTitle();
+} else {
+ $title = $vars['title'];
+}
+
+$url = isset($vars['href']) ? $vars['href'] : $entity->getURL();
+if (isset($vars['href'])) {
+ $url = $vars['href'];
+}
+
+$class = '';
+if (isset($vars['img_class'])) {
+ $class = $vars['img_class'];
+}
+$class = "elgg-photo $class";
+
+$img_src = $entity->getIconURL($vars['size']);
+$img_src = elgg_format_url($img_src);
+$img = elgg_view('output/img', array(
+ 'src' => $img_src,
+ 'class' => $class,
+ 'title' => $title,
+ '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/lightpics/views/default/js/photos/tidypics.php b/mod/lightpics/views/default/js/photos/tidypics.php
new file mode 100644
index 000000000..1ff7b2c40
--- /dev/null
+++ b/mod/lightpics/views/default/js/photos/tidypics.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ *
+ */
+
+?>
+
+elgg.provide('elgg.tidypics');
+
+elgg.tidypics.init = function() {
+
+ if (elgg.ui.lightbox) {
+ $('.elgg-lightbox, .elgg-lightbox-photo').colorbox({
+ href: function() {
+ if ((new RegExp("photos/image/[0-9]+", 'i')).test($(this).attr('href'))) {
+ var guid = (new RegExp("photos/image/[0-9]+", 'i')).exec($(this).attr('href')).toString().substr("photos/image/".length);
+ return elgg.config.wwwroot + "photos/thumbnail/" + guid + "/large";
+ } else {
+ return $(this).attr('href');
+ }
+ },
+ title: function() {
+ return '<h3 style="display: inline">'+ $(this).find('img').attr('title') +'</h3> - <a href="'+ $(this).attr('href') +'">'+ elgg.echo('comments') +'</a>';
+ }
+ });
+ }
+
+ $("#tidypics-sort").sortable({
+ opacity: 0.7,
+ revert: true,
+ scroll: true
+ });
+
+ $('.elgg-form-photos-album-sort').submit(function() {
+ var tidypics_guids = [];
+ $("#tidypics-sort li").each(function(index) {
+ tidypics_guids.push($(this).attr('id'));
+ });
+ $('input[name="guids"]').val(tidypics_guids.toString());
+ });
+};
+
+elgg.register_hook_handler('init', 'system', elgg.tidypics.init);
diff --git a/mod/lightpics/views/default/js/photos/upload.php b/mod/lightpics/views/default/js/photos/upload.php
new file mode 100644
index 000000000..e3922c8c8
--- /dev/null
+++ b/mod/lightpics/views/default/js/photos/upload.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ *
+ */
+
+if ($maxfilesize = (int) elgg_get_plugin_setting('maxfilesize', 'lightpics')) {
+ $maxfilesize *= 1024 * 1024;
+} else {
+ $maxfilesize = 5 * 1024 * 1024;
+}
+?>
+
+elgg.provide('elgg.tidypics.upload');
+
+elgg.tidypics.upload.init = function() {
+
+ window.locale = {
+ "fileupload": {
+ "error": elgg.echo('tidypics:upload:error'),
+ "errors": {
+ "maxFileSize": elgg.echo('tidypics:upload:maxfilesize'),
+ "minFileSize": elgg.echo('tidypics:upload:minfilesize'),
+ "acceptFileTypes": elgg.echo('tidypics:upload:acceptfiletypes'),
+ "maxNumberOfFiles": elgg.echo('tidypics:upload:maxnumberoffiles'),
+ },
+ }
+ };
+
+ $.widget('blueimpJUI.fileupload', $.blueimpUI.fileupload, {
+ _transition: function (node) {
+ var that = this,
+ deferred = $.Deferred();
+ if (node.hasClass('fade')) {
+ node.fadeToggle(function () {
+ deferred.resolveWith(node);
+ });
+ } else {
+ deferred.resolveWith(node);
+ }
+ return deferred;
+ },
+ });
+
+ // Initialize the jQuery File Upload widget:
+ $('#fileupload').fileupload();
+
+ // Settings
+ $('#fileupload').fileupload('option', {
+ maxFileSize: <?php echo $maxfilesize; ?>,
+ acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
+ change: function() {
+ elgg.tidypics.upload.fileinput.hide().appendTo($('#fileupload'));
+ elgg.tidypics.upload.fileinput = $('#fileupload .elgg-input-file');
+ },
+ drop: function () {
+ return false;
+ }
+ });
+
+ elgg.tidypics.upload.fileinput = $('#fileupload .elgg-input-file');
+};
+
+elgg.register_hook_handler('init', 'system', elgg.tidypics.upload.init);
diff --git a/mod/lightpics/views/default/object/album.php b/mod/lightpics/views/default/object/album.php
new file mode 100644
index 000000000..bfcfd96d2
--- /dev/null
+++ b/mod/lightpics/views/default/object/album.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Album view
+ *
+ * @uses $vars['entity'] TidypicsAlbum
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$album = elgg_extract('entity', $vars);
+$full_view = elgg_extract('full_view', $vars, false);
+
+if ($full_view) {
+ echo elgg_view('object/album/full', $vars);
+} else {
+ if (elgg_in_context('widgets')) {
+ echo elgg_view('object/album/list', $vars);
+ } else {
+ echo elgg_view('object/album/gallery', $vars);
+ }
+}
diff --git a/mod/lightpics/views/default/object/album/full.php b/mod/lightpics/views/default/object/album/full.php
new file mode 100644
index 000000000..7b273c66e
--- /dev/null
+++ b/mod/lightpics/views/default/object/album/full.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Full view of an album
+ *
+ * @uses $vars['entity'] TidypicsAlbum
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$album = elgg_extract('entity', $vars);
+$owner = $album->getOwnerEntity();
+
+$owner_icon = elgg_view_entity_icon($owner, 'tiny');
+
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $album,
+ 'handler' => 'photos',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+$owner_link = elgg_view('output/url', array(
+ 'href' => "photos/owner/$owner->username",
+ 'text' => $owner->name,
+ 'is_trusted' => true,
+));
+$author_text = elgg_echo('byline', array($owner_link));
+$date = elgg_view_friendly_time($album->time_created);
+$categories = elgg_view('output/categories', $vars);
+
+$subtitle = "$author_text $date $categories";
+
+$params = array(
+ 'entity' => $album,
+ 'title' => false,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'tags' => elgg_view('output/tags', array('tags' => $album->tags)),
+);
+$params = $params + $vars;
+$summary = elgg_view('object/elements/summary', $params);
+
+$body = '';
+if ($album->description) {
+ $body = elgg_view('output/longtext', array(
+ 'value' => $album->description,
+ 'class' => 'mbm',
+ ));
+}
+
+$body .= $album->viewImages();
+
+echo elgg_view('object/elements/full', array(
+ 'entity' => $album,
+ 'icon' => $owner_icon,
+ 'summary' => $summary,
+ 'body' => $body,
+));
diff --git a/mod/lightpics/views/default/object/album/gallery.php b/mod/lightpics/views/default/object/album/gallery.php
new file mode 100644
index 000000000..d6fb598e4
--- /dev/null
+++ b/mod/lightpics/views/default/object/album/gallery.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Display an album in a gallery
+ *
+ * @uses $vars['entity'] TidypicsAlbum
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$album = elgg_extract('entity', $vars);
+
+
+$album_cover = elgg_view_entity_icon($album, 'small');
+
+$header = elgg_view('output/url', array(
+ 'text' => $album->getTitle(),
+ 'href' => $album->getURL(),
+ 'is_trusted' => true,
+ 'class' => 'tidypics-heading',
+));
+
+$footer = "";
+if ($album->getContainerEntity()) {
+ $footer .= elgg_view('output/url', array(
+ 'text' => $album->getContainerEntity()->name,
+ 'href' => $album->getContainerEntity()->getURL(),
+ 'is_trusted' => true,
+ ));
+}
+$footer .= '<div class="elgg-subtext">' . elgg_echo('album:num', array($album->getSize())) . '</div>';
+
+$params = array(
+ 'footer' => $footer,
+);
+echo elgg_view_module('tidypics-album', $header, $album_cover, $params);
diff --git a/mod/lightpics/views/default/object/album/list.php b/mod/lightpics/views/default/object/album/list.php
new file mode 100644
index 000000000..e576c92f1
--- /dev/null
+++ b/mod/lightpics/views/default/object/album/list.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Display an album as an item in a list
+ *
+ * @uses $vars['entity'] TidypicsAlbum
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$album = elgg_extract('entity', $vars);
+$owner = $album->getOwnerEntity();
+
+$owner_link = elgg_view('output/url', array(
+ 'href' => "photos/owner/$owner->username",
+ 'text' => $owner->name,
+ 'is_trusted' => true,
+));
+$author_text = elgg_echo('byline', array($owner_link));
+$date = elgg_view_friendly_time($album->time_created);
+$categories = elgg_view('output/categories', $vars);
+
+$subtitle = "$author_text $date $categories";
+
+$title = elgg_view('output/url', array(
+ 'text' => $album->getTitle(),
+ 'href' => $album->getURL(),
+));
+
+$params = array(
+ 'entity' => $album,
+ 'title' => $title,
+ 'metadata' => null,
+ 'subtitle' => $subtitle,
+ 'tags' => elgg_view('output/tags', array('tags' => $album->tags)),
+);
+$params = $params + $vars;
+$summary = elgg_view('object/elements/summary', $params);
+
+$icon = elgg_view_entity_icon($album, 'tiny');
+
+echo $header = elgg_view_image_block($icon, $summary);
diff --git a/mod/lightpics/views/default/object/image.php b/mod/lightpics/views/default/object/image.php
new file mode 100644
index 000000000..fc8ea827e
--- /dev/null
+++ b/mod/lightpics/views/default/object/image.php
@@ -0,0 +1,211 @@
+<?php
+/**
+ * Image view
+ *
+ * @uses $vars['entity'] TidypicsImage
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+
+$full_view = elgg_extract('full_view', $vars, false);
+
+if ($full_view) {
+ echo elgg_view('object/image/full', $vars);
+} else {
+ echo elgg_view('object/image/summary', $vars);
+}
+
+return true;
+
+global $CONFIG;
+include_once dirname(dirname(dirname(dirname(__FILE__)))) . "/lib/exif.php";
+
+$image = $vars['entity'];
+$image_guid = $image->getGUID();
+$tags = $image->tags;
+$title = $image->getTitle();
+$desc = $image->description;
+$owner = $image->getOwnerEntity();
+$friendlytime = friendly_time($image->time_created);
+
+
+/********************************************************************
+ *
+ * search view of an image
+ *
+ ********************************************************************/
+if (get_context() == "search") {
+
+ // gallery view is a matrix view showing just the image - size: small
+ if (get_input('search_viewtype') == "gallery") {
+?>
+<div class="tidypics_album_images">
+ <a href="<?php echo $image->getURL();?>"><img src="<?php echo $vars['url'];?>mod/tidypics/thumbnail.php?file_guid=<?php echo $image_guid;?>&size=small" alt="thumbnail"/></a>
+</div>
+<?php
+ } else {
+ // list view displays a thumbnail icon of the image, its title, and the number of comments
+ $info = '<p><a href="' .$image->getURL(). '">'.$title.'</a></p>';
+ $info .= "<p class=\"owner_timestamp\"><a href=\"{$vars['url']}pg/profile/{$owner->username}\">{$owner->name}</a> {$friendlytime}";
+ $numcomments = elgg_count_comments($image);
+ if ($numcomments) {
+ $info .= ", <a href=\"{$image->getURL()}\">" . sprintf(elgg_echo("comments")) . " (" . $numcomments . ")</a>";
+ }
+ $info .= "</p>";
+ $icon = "<a href=\"{$image->getURL()}\">" . '<img src="' . $vars['url'] . 'mod/tidypics/thumbnail.php?file_guid=' . $image_guid . '&size=thumb" alt="' . $title . '" /></a>';
+
+ echo elgg_view_listing($icon, $info);
+ }
+
+/***************************************************************
+ *
+ * front page view
+ *
+ ****************************************************************/
+} else if (get_context() == "front" || get_context() == "widget") {
+ // the front page view is a clickable thumbnail of the image
+?>
+<a href="<?php echo $image->getURL(); ?>">
+ <img src="<?php echo $vars['url'];?>mod/tidypics/thumbnail.php?file_guid=<?php echo $image_guid;?>&amp;size=thumb" class="tidypics_album_cover" alt="<?php echo $title; ?>" title="<?php echo $title; ?>" />
+</a>
+ <?php
+} else {
+
+/********************************************************************
+ *
+ * listing of photos in an album
+ *
+ *********************************************************************/
+ if (!$vars['full']) {
+
+ // plugins can override the image link to add lightbox code here
+ $image_html = false;
+ $image_html = trigger_plugin_hook('tp_thumbnail_link', 'album', array('image' => $image), $image_html);
+
+ if ($image_html) {
+ echo $image_html;
+ } else {
+ // default link to image if no one overrides
+?>
+<div class="tidypics_album_images">
+ <a href="<?php echo $image->getURL();?>"><img src="<?php echo $vars['url'];?>pg/photos/thumbnail/<?php echo $image_guid;?>/small/" alt="<?php echo $image->title; ?>"/></a>
+</div>
+<?php
+ }
+ } else {
+
+/********************************************************************
+ *
+ * tidypics individual image display
+ *
+ *********************************************************************/
+
+
+ $viewer = get_loggedin_user();
+
+
+ // Build back and next links
+ $back = '';
+ $next = '';
+ $album = get_entity($image->container_guid);
+ $back_guid = $album->getPreviousImageGuid($image->guid);
+ $next_guid = $album->getNextImageGuid($image->guid);
+
+ if ($back_guid != 0) {
+ $text = elgg_echo('image:back');
+ $back = "<a href=\"{$vars['url']}pg/photos/view/$back_guid\">&laquo; $text</a>";
+ }
+
+ if ($next_guid != 0) {
+ $text = elgg_echo('image:next');
+ $next = "<a href=\"{$vars['url']}pg/photos/view/$next_guid\">$text &raquo;</a>";
+ }
+
+?>
+<div class="contentWrapper">
+ <div id="tidypics_wrapper">
+
+ <div id="tidypics_breadcrumbs">
+ <?php echo elgg_view('tidypics/breadcrumbs', array('album' => $album,) ); ?> <br />
+<?php
+ if (get_plugin_setting('view_count', 'tidypics') != "disabled") {
+
+ $image->addView($viewer->guid);
+ $views = $image->getViews($viewer->guid);
+ if (is_array($views)) {
+ echo sprintf(elgg_echo("tidypics:views"), $views['total']);
+ if ($owner->guid == $viewer->guid) {
+ echo ' ' . sprintf(elgg_echo("tidypics:viewsbyowner"), $views['unique']);
+ } else {
+ if ($views['mine']) {
+ echo ' ' . sprintf(elgg_echo("tidypics:viewsbyothers"), $views['mine']);
+ }
+ }
+ }
+ }
+?>
+ </div>
+
+ <div id="tidypics_desc">
+ <?php echo autop($desc); ?>
+ </div>
+ <div id="tidypics_image_nav">
+ <ul>
+ <li><?php echo $back; ?></li>
+ <li><?php echo $next; ?></li>
+ </ul>
+ </div>
+ <div id="tidypics_image_wrapper">
+ <?php
+ // this code controls whether the photo is a hyperlink or not and what it links to
+ if (get_plugin_setting('download_link', 'tidypics') != "disabled") {
+ // admin allows downloads so default to inline download link
+ $image_html = "<a href=\"{$vars['url']}pg/photos/download/{$image_guid}/inline/\" title=\"{$title}\" >";
+ $image_html .= "<img id=\"tidypics_image\" src=\"{$vars['url']}pg/photos/thumbnail/{$image_guid}/large/\" alt=\"{$title}\" />";
+ $image_html .= "</a>";
+ } else {
+ $image_html = "<img id=\"tidypics_image\" src=\"{$vars['url']}pg/photos/thumbnail/{$image_guid}/large/\" alt=\"{$title}\" />";
+ }
+ // does any plugin want to override the link
+ $image_html = trigger_plugin_hook('tp_thumbnail_link', 'image', array('image' => $image), $image_html);
+ echo $image_html;
+ ?>
+ <div class="clearfloat"></div>
+ </div>
+ <?php
+ if (get_plugin_setting('exif', 'tidypics') == "enabled") {
+ echo elgg_view('tidypics/exif', array('guid'=> $image_guid));
+ }
+?>
+ <div class="tidypics_info">
+<?php
+ if (!is_null($tags)) {
+?>
+ <div class="object_tag_string"><?php echo elgg_view('output/tags',array('value' => $tags));?></div>
+<?php
+ }
+ if (get_plugin_setting('photo_ratings', 'tidypics') == "enabled") {
+?>
+ <div id="rate_container">
+ <?php echo elgg_view('rate/rate', array('entity'=> $vars['entity'])); ?>
+ </div>
+<?php
+ }
+
+ echo elgg_echo('image:by');?> <b><a href="<?php echo $vars['url']; ?>pg/profile/<?php echo $owner->username; ?>"><?php echo $owner->name; ?></a></b> <?php echo $friendlytime;
+?>
+ </div>
+ </div> <!-- tidypics wrapper-->
+<?php
+
+ echo elgg_view_comments($image);
+
+ echo '<div class="clearfloat"></div>';
+
+ echo '</div>'; // content wrapper
+
+ } // end of individual image display
+
+}
diff --git a/mod/lightpics/views/default/object/image/full.php b/mod/lightpics/views/default/object/image/full.php
new file mode 100644
index 000000000..74436f500
--- /dev/null
+++ b/mod/lightpics/views/default/object/image/full.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Full view of an image
+ *
+ * @uses $vars['entity'] TidypicsImage
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$image = $photo = $vars['entity'];
+
+$img = elgg_view_entity_icon($image, 'large', array(
+ 'href' => $image->getIconURL('master'),
+ 'img_class' => 'tidypics-photo',
+ 'link_class' => 'tidypics-lightbox elgg-lightbox-photo',
+));
+
+$owner_link = elgg_view('output/url', array(
+ 'href' => "photos/owner/" . $photo->getOwnerEntity()->username,
+ 'text' => $photo->getOwnerEntity()->name,
+));
+$author_text = elgg_echo('byline', array($owner_link));
+
+$owner_icon = elgg_view_entity_icon($photo->getOwnerEntity(), 'tiny');
+
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $vars['entity'],
+ 'handler' => 'photos',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+$subtitle = "$author_text $date $categories $comments_link";
+
+$params = array(
+ 'entity' => $photo,
+ 'title' => false,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'tags' => $tags,
+);
+$list_body = elgg_view('object/elements/summary', $params);
+
+$params = array('class' => 'mbl');
+$summary = elgg_view_image_block($owner_icon, $list_body, $params);
+
+echo $summary;
+
+echo '<div class="tidypics-photo-wrapper center">';
+echo elgg_view('object/image/navigation', $vars);
+echo $img;
+echo '</div>';
+
+if ($photo->description) {
+ echo elgg_view('output/longtext', array(
+ 'value' => $photo->description,
+ 'class' => 'mbl',
+ ));
+}
+
+echo elgg_view_comments($photo);
diff --git a/mod/lightpics/views/default/object/image/navigation.php b/mod/lightpics/views/default/object/image/navigation.php
new file mode 100644
index 000000000..155b76364
--- /dev/null
+++ b/mod/lightpics/views/default/object/image/navigation.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Photo navigation
+ *
+ * @uses $vars['entity']
+ */
+
+$photo = $vars['entity'];
+
+$album = $photo->getContainerEntity();
+$previous_photo = $album->getPreviousImage($photo->getGUID());
+$next_photo = $album->getNextImage($photo->getGUID());
+$size = $album->getSize();
+$index = $album->getIndex($photo->getGUID());
+
+echo '<ul class="elgg-menu elgg-menu-hz tidypics-album-nav">';
+echo '<li>';
+echo elgg_view('output/url', array(
+ 'text' => elgg_view_icon('arrow-left'),
+ 'href' => $previous_photo->getURL(),
+));
+echo '</li>';
+
+echo '<li>';
+echo '<span>' . elgg_echo('image:index', array($index, $size)) . '</span>';
+echo '</li>';
+
+echo '<li>';
+echo elgg_view('output/url', array(
+ 'text' => elgg_view_icon('arrow-right'),
+ 'href' => $next_photo->getURL(),
+));
+echo '</li>';
+echo '</ul>';
diff --git a/mod/lightpics/views/default/object/image/summary.php b/mod/lightpics/views/default/object/image/summary.php
new file mode 100644
index 000000000..0fa03cbe8
--- /dev/null
+++ b/mod/lightpics/views/default/object/image/summary.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Summary of an image for lists/galleries
+ *
+ * @uses $vars['entity'] TidypicsImage
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$image = elgg_extract('entity', $vars);
+
+
+$header = elgg_view('output/url', array(
+ 'text' => $image->getTitle(),
+ 'href' => $image->getURL(),
+ 'is_trusted' => true,
+ 'class' => 'tidypics-heading',
+));
+
+$body = elgg_view_entity_icon($image, 'small', array(
+ 'href' => $image->getURL(),
+ 'img_class' => 'tidypics-photo',
+ 'encode_text' => false,
+ 'is_trusted' => true,
+ 'link_class' => 'tidypics-lightbox elgg-lightbox-photo',
+));
+
+/*
+$footer = elgg_view('output/url', array(
+ 'text' => $image->getContainerEntity()->name,
+ 'href' => $image->getContainerEntity()->getURL(),
+ 'is_trusted' => true,
+));
+$footer .= '<div class="elgg-subtext">' . elgg_echo('album:num', array($album->getSize())) . '</div>';
+*/
+
+$params = array(
+ 'footer' => $footer,
+);
+echo elgg_view_module('tidypics-image', $header, $body, $params);
diff --git a/mod/lightpics/views/default/photos/css.php b/mod/lightpics/views/default/photos/css.php
new file mode 100644
index 000000000..9a2b1768f
--- /dev/null
+++ b/mod/lightpics/views/default/photos/css.php
@@ -0,0 +1,470 @@
+<?php
+/**
+ * Tidypics CSS
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+?>
+
+/* ***************************************
+ TIDYPICS
+*************************************** */
+.elgg-module-tidypics-album,
+.elgg-module-tidypics-image {
+ width: 161px;
+ text-align: center;
+ margin: 5px 0;
+}
+.elgg-module-tidypics-image {
+ margin: 5px auto;
+ height: 80%;
+}
+
+.tidypics-gallery-widget > li {
+ width: 100%;
+}
+.tidypics-photo-wrapper {
+ position: relative;
+}
+
+.tidypics-heading {
+ color: #0054A7;
+}
+.tidypics-heading:hover {
+ color: #0054A7;
+ text-decoration: none;
+}
+
+.tidypics-input-thin {
+ width: 120px;
+}
+
+#tidypics-sort li {
+ width:153px;
+ height:153px;
+ cursor: move;
+}
+
+.tidypics-river-list > li {
+ display: inline-block;
+}
+
+.tidypics-photo-item + .tidypics-photo-item {
+ margin-left: 7px;
+}
+
+.tidypics-gallery > li {
+ padding: 0 10px;
+}
+
+.tidypics-album-nav {
+ margin: 3px 0;
+ text-align: center;
+ color: #aaa;
+}
+
+.tidypics-album-nav > li {
+ padding: 0 3px;
+}
+
+.tidypics-album-nav > li {
+ vertical-align: top;
+}
+
+/* ***************************************
+ UPLOADER
+*************************************** */
+
+.fileinput-container {
+ text-align: center;
+}
+.fileinput-button {
+ cursor: pointer;
+}
+.fileinput-button input {
+ position: absolute;
+ top: 0;
+ right: 0;
+ margin: 0;
+ opacity: 0;
+ filter: alpha(opacity=0);
+
+}
+.files .fade {
+ display: none;
+}
+/* Fix for IE 6: */
+*html .fileinput-button {
+ margin-right: -2px;
+}
+*html .fileinput-button .elgg-button {
+ line-height: 24px;
+}
+*html .fileupload-buttonbar .elgg-button {
+ margin-left: 3px;
+}
+
+/* Fix for IE 7: */
+*+html .fileinput-button {
+ margin-right: 1px;
+}
+*+html .fileinput-button .elgg-button {
+ line-height: 24px;
+}
+*+html .fileupload-buttonbar .elgg-button {
+ margin-left: 3px;
+}
+
+@media (max-width: 480px) {
+ .files .preview * {
+ width: 40px;
+ }
+ .files .name * {
+ width: 80px;
+ display: inline-block;
+ word-wrap: break-word;
+ }
+}
+
+/* Fix for Webkit (Safari, Chrome) */
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+ .fileinput-button {
+ margin-top: 2px;
+ }
+}
+
+<?php
+return true;
+?>
+
+/* ---- tidypics object views ---- */
+
+.tidypics_wrapper > table.entity_gallery {
+ border-spacing: 0;
+}
+
+.tidypics_wrapper .entity_gallery td {
+ padding: 0;
+}
+
+.tidypics_wrapper .entity_gallery_item,
+.tidypics_wrapper .entity_gallery_item:hover {
+ background-color: transparent;
+ color: inherit;
+}
+
+#tidypics_breadcrumbs {
+margin:5px 0 15px 0;
+font-size:80%;
+}
+
+#tidypics_desc {
+padding:0 20px;
+font-style:italic;
+}
+
+#tidypics_image_nav {
+text-align:center;
+}
+
+#tidypics_image_wrapper {
+margin:10px 0 10px 0;
+text-align:center;
+}
+
+#tidypics_image {
+border:1px solid #dedede;
+padding:5px;
+}
+
+#tidypics_image_nav ul li {
+display:inline;
+margin-right:15px;
+}
+
+#tidypics_controls {
+text-align:center;
+margin-bottom:10px;
+}
+
+#tidypics_controls a {
+margin:10px;
+}
+
+#tidypics_controls ul {
+list-style:none;
+margin:0px;
+padding:8px;
+}
+
+#tidypics_controls ul li {
+padding:2px 10px 2px 22px;
+margin:2px 0px;
+display:inline;
+}
+
+.tidypics_info {
+padding:20px;
+}
+
+#tidypics_exif {
+padding-left:20px;
+font-size:80%;
+}
+
+.tidypics_album_images {
+float:left;
+width:153px;
+height:153px;
+margin:3px;
+padding:4px;
+border:1px solid #dedede;
+text-align:center;
+}
+
+.tidypics_album_cover {
+padding:2px;
+border:1px solid #dedede;
+margin:5px 0;
+}
+
+.tidypics_album_widget_single_item {
+margin-bottom:8px;
+}
+
+.tidypics_album_gallery_item {
+float:left;
+margin-bottom:20px;
+padding: 4px;
+text-align:center;
+width: 160px;
+}
+
+.tidypics_line_break {
+width: 100%;
+clear: both;
+}
+
+.tidypics_gallery_title {
+font-weight:bold;
+}
+
+.tidypics_popup {
+border:1px solid #3B5999;
+width:200px;
+position:absolute;
+z-index:10000;
+display:none;
+background:#ffffff;
+padding:10px;
+font-size:12px;
+text-align:left;
+}
+
+/* ------ tidypics widget view ------ */
+
+#tidypics_album_widget_container {
+text-align:center;
+}
+
+.tidypics_album_widget_timestamp {
+color:#333333;
+}
+
+.tidypics_widget_latest {
+margin: 0 auto;
+width: 208px;
+}
+
+/* --------- image upload/edit forms ------------ */
+
+#tidpics_image_upload_list li {
+margin:3px 0;
+}
+
+.tidypics_edit_image_container {
+padding:5px;
+margin:5px 0;
+overflow:auto;
+}
+
+.tidypics_edit_images {
+float:right;
+width:160px;
+height:160px;
+margin:4px;
+padding:5px;
+border:1px solid #dedede;
+text-align:center;
+}
+
+.tidypics_image_info {
+float:left;
+width:60%;
+}
+
+.tidypics_image_info label {
+font-size:1em;
+}
+
+.tidypics_caption_input {
+ width:98%;
+ height:100px;
+}
+
+/* ---- tidypics group css ----- */
+
+#tidypics_group_profile {
+-webkit-border-radius: 8px;
+-moz-border-radius: 8px;
+background:white none repeat scroll 0 0;
+margin:0 0 20px;
+padding:0 0 5px;
+}
+
+
+/* --------- tidypics river items ------------ */
+
+.river_object_image_create {
+ background: url(<?php echo $vars['url']; ?>mod/lightpics/graphics/icons/river_icon_image.gif) no-repeat left -1px;
+}
+.river_object_album_create {
+ background: url(<?php echo $vars['url']; ?>mod/lightpics/graphics/icons/river_icon_album.gif) no-repeat left -1px;
+}
+.river_object_image_comment {
+ background: url(<?php echo $vars['url']; ?>_graphics/river_icons/river_icon_comment.gif) no-repeat left -1px;
+}
+.river_object_album_comment {
+ background: url(<?php echo $vars['url']; ?>_graphics/river_icons/river_icon_comment.gif) no-repeat left -1px;
+}
+.river_user_tag {
+ background: url(<?php echo $vars['url']; ?>mod/lightpics/graphics/icons/river_icon_tag.gif) no-repeat left -1px;
+}
+
+/* ----------- tagging ---------------- */
+#tidypics_tag_instructions {
+background:#BBDAF7;
+border:1px solid #4690D6;
+padding:10px;
+height:25px;
+min-width:360px;
+display:none;
+overflow:hidden;
+position:absolute;
+z-index:10000;
+-webkit-border-radius: 8px;
+-moz-border-radius: 8px;
+}
+
+#tidypics_tag_instruct_text {
+padding-top: 3px;
+float: left;
+}
+
+#tidypics_tag_instruct_button_div {
+float: left;
+margin-left: 15px;
+}
+
+#tidypics_tag_instruct_button {
+margin:0;
+}
+
+#tidypics_tag_menu {
+width:240px;
+max-height:400px;
+overflow:hidden;
+-webkit-border-radius: 8px;
+-moz-border-radius: 8px;
+}
+
+.tidypics_popup_header {
+width:100%;
+margin-bottom:10px;
+}
+
+
+#tidypics_tagmenu_left {
+width:175px;
+float:left;
+}
+
+#tidypics_tagmenu_right {
+float:left;
+}
+
+#tidypics_tagmenu_left .input-filter {
+width:150px;
+}
+
+#tidypics_tagmenu_right .submit_button {
+margin-top:2px;
+}
+
+#tidypics_delete_tag_menu {
+-webkit-border-radius: 8px;
+-moz-border-radius: 8px;
+overflow:hidden;
+}
+
+.tidypics_tag {
+display:none;
+background:url(<?php echo $vars['url']; ?>mod/lightpics/graphics/spacer.gif);
+border:2px solid #ffffff;
+overflow:hidden;
+position:absolute;
+z-index:0;
+}
+
+.tidypics_tag_text {
+display:none;
+overflow:hidden;
+position:absolute;
+z-index:0;
+text-align:center;
+background:#BBDAF7;
+border:1px solid #3B5999;
+-webkit-border-radius:3px;
+-moz-border-radius:3px;
+padding:1px;
+}
+
+#tidypics_phototags_list {
+padding:0 20px 0 20px;
+}
+
+#tidypics_phototags_list ul {
+list-style:none;
+margin:0px;
+padding:8px;
+}
+
+#tidypics_phototags_list ul li {
+padding-right:10px;
+margin:2px 0px;
+display:inline;
+}
+
+#tidypics_image_upload_list {
+list-style: none;
+}
+
+#tidypics_album_sort {
+padding:0;
+margin:0;
+}
+
+#tidypics_album_sort li {
+float:left;
+margin:3px;
+width:161px;
+height:161px;
+list-style:none;
+}
+
+#tidypics_album_sort img {
+border:1px solid #dedede;
+padding:4px;
+}
+
diff --git a/mod/lightpics/views/default/photos/group_module.php b/mod/lightpics/views/default/photos/group_module.php
new file mode 100644
index 000000000..de7a451c4
--- /dev/null
+++ b/mod/lightpics/views/default/photos/group_module.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Group blog module
+ */
+
+$group = $vars['entity'];
+
+if ($group->photos_enable == "no") {
+ return true;
+}
+
+$all_link = elgg_view('output/url', array(
+ 'href' => "photos/group/$group->guid/all",
+ 'text' => elgg_echo('link:view:all'),
+ 'is_trusted' => true,
+));
+
+elgg_push_context('widgets');
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'album',
+ '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('tidypics:none') . '</p>';
+}
+
+$new_link = elgg_view('output/url', array(
+ 'href' => "photos/add/$group->guid",
+ 'text' => elgg_echo('photos:add'),
+ 'is_trusted' => true,
+));
+
+echo elgg_view('groups/profile/module', array(
+ 'title' => elgg_echo('photos:group'),
+ 'content' => $content,
+ 'all_link' => $all_link,
+ 'add_link' => $new_link,
+));
diff --git a/mod/lightpics/views/default/photos/sidebar.php b/mod/lightpics/views/default/photos/sidebar.php
new file mode 100644
index 000000000..fd5202691
--- /dev/null
+++ b/mod/lightpics/views/default/photos/sidebar.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Sidebar view
+ */
+
+$page = elgg_extract('page', $vars);
+$image = elgg_extract('image', $vars);
+if ($image && $page == 'view') {
+ if (elgg_get_plugin_setting('exif', 'tidypics')) {
+ echo elgg_view('photos/sidebar/exif', $vars);
+ }
+}
+
+if ($page == 'upload') {
+ if (elgg_get_plugin_setting('quota', 'tidypics')) {
+ echo elgg_view('photos/sidebar/quota', $vars);
+ }
+} \ No newline at end of file
diff --git a/mod/lightpics/views/default/photos/sidebar/exif.php b/mod/lightpics/views/default/photos/sidebar/exif.php
new file mode 100644
index 000000000..1d4444b53
--- /dev/null
+++ b/mod/lightpics/views/default/photos/sidebar/exif.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * EXIF sidebar module
+ */
+
+$image = $vars['image'];
+
+elgg_load_library('tidypics:exif');
+
+$exif = tp_exif_formatted($image);
+if ($exif) {
+ $title = "EXIF";
+ $body = '<table class="elgg-table elgg-table-alt">';
+ foreach ($exif as $key => $value) {
+ $body .= "<tr><td>$key</td><td>$value</td></tr>";
+ }
+ $body .= '</table>';
+
+ echo elgg_view_module('aside', $title, $body);
+}
diff --git a/mod/lightpics/views/default/photos/sidebar/quota.php b/mod/lightpics/views/default/photos/sidebar/quota.php
new file mode 100644
index 000000000..16b7885c4
--- /dev/null
+++ b/mod/lightpics/views/default/photos/sidebar/quota.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * User quota
+ */
+
+$user = elgg_get_logged_in_user_entity();
+
+
+$quota = elgg_get_plugin_setting('quota', 'tidypics');
+if ($quota) {
+ $image_repo_size = (int)$user->image_repo_size;
+ $image_repo_size = $image_repo_size / 1024 / 1024;
+ $quote_percentage = round(100 * ($image_repo_size / $quota));
+ // for small quotas, so one decimal place
+ if ($quota < 10) {
+ $image_repo_size = sprintf('%.1f', $image_repo_size);
+ } else {
+ $image_repo_size = round($image_repo_size);
+ }
+ if ($image_repo_size > $quota) {
+ $image_repo_size = $quota;
+ }
+
+ $title = elgg_echo('tidypics:title:quota');
+ $body = elgg_echo("tidypics:quota") . ' ' . $image_repo_size . '/' . $quota . " MB ({$quote_percentage}%)";
+ echo elgg_view_module('aside', $title, $body);
+}
diff --git a/mod/lightpics/views/default/river/object/album/create.php b/mod/lightpics/views/default/river/object/album/create.php
new file mode 100644
index 000000000..29620041f
--- /dev/null
+++ b/mod/lightpics/views/default/river/object/album/create.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Album river view
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+elgg_load_css('lightbox');
+elgg_load_js('lightbox');
+elgg_load_js('tidypics');
+
+$album = $vars['item']->getObjectEntity();
+
+$album_river_view = elgg_get_plugin_setting('album_river_view', 'tidypics');
+if ($album_river_view == "cover") {
+ $image = $album->getCoverImage();
+ if ($image) {
+ $attachments = elgg_view_entity_icon($image, 'tiny');
+ }
+} else {
+ $images = $album->getImages(7);
+
+ if (count($images)) {
+ $attachments = '<ul class="tidypics-river-list elgg-lightbox-gallery">';
+ foreach($images as $image) {
+ $attachments .= '<li class="tidypics-photo-item">';
+ $attachments .= elgg_view_entity_icon($image, 'tiny', array(
+ 'link_class' => 'tidypics-lightbox elgg-lightbox-photo',
+ ));
+ $attachments .= '</li>';
+ }
+ $attachments .= '</ul>';
+ }
+}
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'attachments' => $attachments,
+));
diff --git a/mod/lightpics/views/default/river/object/image/create.php b/mod/lightpics/views/default/river/object/image/create.php
new file mode 100644
index 000000000..6b68b4d68
--- /dev/null
+++ b/mod/lightpics/views/default/river/object/image/create.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Image album view
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+elgg_load_css('lightbox');
+elgg_load_js('lightbox');
+elgg_load_js('tidypics');
+
+$subject = $vars['item']->getSubjectEntity();
+$subject_link = elgg_view('output/url', array(
+ 'href' => $subject->getURL(),
+ 'text' => $subject->name,
+ 'class' => 'elgg-river-subject',
+ 'is_trusted' => true,
+));
+
+$image = $vars['item']->getObjectEntity();
+$attachments = elgg_view_entity_icon($image, 'tiny');
+
+$image_link = elgg_view('output/url', array(
+ 'href' => $image->getURL(),
+ 'text' => $image->getTitle(),
+ 'is_trusted' => true,
+ 'class' => 'elgg-lightbox-photo',
+));
+
+$album_link = elgg_view('output/url', array(
+ 'href' => $image->getContainerEntity()->getURL(),
+ 'text' => $image->getContainerEntity()->getTitle(),
+ 'is_trusted' => true,
+));
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'attachments' => $attachments,
+ 'summary' => elgg_echo('image:river:created', array($subject_link, $image_link, $album_link)),
+));
diff --git a/mod/lightpics/views/default/river/object/tidypics_batch/create.php b/mod/lightpics/views/default/river/object/tidypics_batch/create.php
new file mode 100644
index 000000000..b97c853a3
--- /dev/null
+++ b/mod/lightpics/views/default/river/object/tidypics_batch/create.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Batch river view
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+elgg_load_css('lightbox');
+elgg_load_js('lightbox');
+elgg_load_js('tidypics');
+
+$batch = $vars['item']->getObjectEntity();
+
+// Get images related to this batch
+$images = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'belongs_to_batch',
+ 'relationship_guid' => $batch->getGUID(),
+ 'inverse_relationship' => true,
+ 'type' => 'object',
+ 'subtype' => 'image',
+ 'offset' => 0,
+));
+
+$album = $batch->getContainerEntity();
+if (!$album) {
+ // something went quite wrong - this batch has no associated album
+ return true;
+}
+$album_link = elgg_view('output/url', array(
+ 'href' => $album->getURL(),
+ 'text' => $album->getTitle(),
+ 'is_trusted' => true,
+));
+
+$subject = $vars['item']->getSubjectEntity();
+$subject_link = elgg_view('output/url', array(
+ 'href' => $subject->getURL(),
+ 'text' => $subject->name,
+ 'class' => 'elgg-river-subject',
+ 'is_trusted' => true,
+));
+
+if (count($images)) {
+ $attachments = '<ul class="tidypics-river-list elgg-lightbox-gallery">';
+ foreach($images as $image) {
+ $attachments .= '<li class="tidypics-photo-item">';
+ $attachments .= elgg_view_entity_icon($image, 'tiny', array(
+ 'link_class' => 'tidypics-lightbox elgg-lightbox-photo',
+ ));
+ $attachments .= '</li>';
+ }
+ $attachments .= '</ul>';
+}
+
+if (count($images) == 1) {
+ $summary = elgg_echo('image:river:created', array($subject_link, $album_link));
+} else {
+ $summary = elgg_echo('image:river:created:multiple', array($subject_link, count($images), $album_link));
+}
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'attachments' => $attachments,
+ 'summary' => $summary
+));
diff --git a/mod/lightpics/views/default/widgets/album_view/content.php b/mod/lightpics/views/default/widgets/album_view/content.php
new file mode 100644
index 000000000..88c8837b3
--- /dev/null
+++ b/mod/lightpics/views/default/widgets/album_view/content.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * List albums in a widget
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'album',
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'limit' => $vars['entity']->num_display,
+ 'full_view' => false,
+ 'pagination' => false,
+);
+echo elgg_list_entities($options);
diff --git a/mod/lightpics/views/default/widgets/album_view/edit.php b/mod/lightpics/views/default/widgets/album_view/edit.php
new file mode 100644
index 000000000..873fcc3eb
--- /dev/null
+++ b/mod/lightpics/views/default/widgets/album_view/edit.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Widget settings for newest albums
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+// 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, 15, 20),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('tidypics:widget:num_albums'); ?>:
+ <?php echo $dropdown; ?>
+</div>
diff --git a/mod/lightpics/views/default/widgets/latest_photos/content.php b/mod/lightpics/views/default/widgets/latest_photos/content.php
new file mode 100644
index 000000000..8a3bb4891
--- /dev/null
+++ b/mod/lightpics/views/default/widgets/latest_photos/content.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Display the latest photos uploaded by an individual
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+echo elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'image',
+ 'limit' => $vars['entity']->num_display,
+ 'owner_guid' => elgg_get_page_owner_guid(),
+ 'full_view' => false,
+ 'list_type' => 'gallery',
+ 'list_type_toggle' => false,
+ 'gallery_class' => 'tidypics-gallery-widget',
+));
diff --git a/mod/lightpics/views/default/widgets/latest_photos/edit.php b/mod/lightpics/views/default/widgets/latest_photos/edit.php
new file mode 100644
index 000000000..dd32e2b6d
--- /dev/null
+++ b/mod/lightpics/views/default/widgets/latest_photos/edit.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Widget settings for latest photos
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+// set default value
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 6;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(3, 6, 9, 12),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('tidypics:widget:num_latest'); ?>:
+ <?php echo $dropdown; ?>
+</div>
diff --git a/mod/lightpics/views/rss/extensions/photos/xmlns.php b/mod/lightpics/views/rss/extensions/photos/xmlns.php
new file mode 100644
index 000000000..67cf45133
--- /dev/null
+++ b/mod/lightpics/views/rss/extensions/photos/xmlns.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Support media files by adding a namespace
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+?> xmlns:media="http://search.yahoo.com/mrss/" \ No newline at end of file
diff --git a/mod/lightpics/views/rss/object/album.php b/mod/lightpics/views/rss/object/album.php
new file mode 100644
index 000000000..f880b56d6
--- /dev/null
+++ b/mod/lightpics/views/rss/object/album.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Album RSS view
+ *
+ * @uses $vars['entity'] TidypicsAlbum
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$full_view = elgg_extract('full_view', $vars, false);
+
+if ($full_view) {
+ echo elgg_view('object/album/full', $vars);
+} else {
+ echo elgg_view('object/album/summary', $vars);
+}
diff --git a/mod/lightpics/views/rss/object/album/full.php b/mod/lightpics/views/rss/object/album/full.php
new file mode 100644
index 000000000..b1f5a567b
--- /dev/null
+++ b/mod/lightpics/views/rss/object/album/full.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * List photos in an album for RSS
+ *
+ * @uses $vars['entity'] TidypicsAlbum
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$limit = (int)get_input('limit', 20);
+
+echo elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'image',
+ 'container_guid' => $vars['entity']->getGUID(),
+ 'limit' => $limit,
+ 'full_view' => false,
+));
diff --git a/mod/lightpics/views/rss/object/album/summary.php b/mod/lightpics/views/rss/object/album/summary.php
new file mode 100644
index 000000000..b6dc8f003
--- /dev/null
+++ b/mod/lightpics/views/rss/object/album/summary.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Individual album summary view for RSS
+ *
+ * @uses $vars['entity'] TidypicsAlbum
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$permalink = htmlspecialchars($vars['entity']->getURL(), ENT_NOQUOTES, 'UTF-8');
+$pubdate = date('r', $vars['entity']->getTimeCreated());
+
+$title = $vars['entity']->getTitle();
+$description = 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/lightpics/views/rss/object/image.php b/mod/lightpics/views/rss/object/image.php
new file mode 100644
index 000000000..e3b67ee74
--- /dev/null
+++ b/mod/lightpics/views/rss/object/image.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Individual image RSS view
+ *
+ * @uses $vars['entity'] TidypicsImage
+ *
+ * @author Cash Costello
+ * @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License v2
+ */
+
+$permalink = htmlspecialchars($vars['entity']->getURL(), ENT_NOQUOTES, 'UTF-8');
+$pubdate = date('r', $vars['entity']->getTimeCreated());
+
+$title = $vars['entity']->getTitle();
+$description = autop($vars['entity']->description);
+
+$creator = elgg_view('page/components/creator', $vars);
+$georss = elgg_view('page/components/georss', $vars);
+$extension = elgg_view('extensions/item', $vars);
+
+$thumbnail_url = $vars['entity']->getIconURL('tiny');
+$download_url = $vars['entity']->getIconURL('large');
+
+$mime_type = $vars['entity']->getMimeType();
+
+$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
+ <media:content url="$download_url" medium="image" type="$mime_type" />
+ <media:title><![CDATA[$title]]></media:title>
+ <media:description><![CDATA[$description]]></media:description>
+ <media:thumbnail url="$thumbnail_url"></media:thumbnail>
+</item>
+
+__HTML;
+
+echo $item;
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..3d081c9c2
--- /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']) && $vars['timelower']) {
+ $lowerval = date('r', $vars['timelower']);
+} else {
+ $lowerval = "";
+}
+if (isset($vars['timeupper']) && $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..b40f23fa3
--- /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']) && !isset($vars['username'])) {
+ $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..b08a0c428
--- /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/administer_utilities/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..d785ad50d
--- /dev/null
+++ b/mod/logrotate/languages/en.php
@@ -0,0 +1,29 @@
+<?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:never' => 'never',
+
+ 'logrotate:logdeleted' => "Log deleted\n",
+ 'logrotate:lognotdeleted' => "No logs deleted\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..f67e419bc
--- /dev/null
+++ b/mod/logrotate/start.php
@@ -0,0 +1,122 @@
+<?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');
+
+ if ($delete != 'never') {
+ // 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 log tables
+ * @return bool Were any log tables deleted
+ */
+function log_browser_delete_log($time_of_delete) {
+ global $CONFIG;
+
+ $cutoff = time() - (int)$time_of_delete;
+
+ $deleted_tables = false;
+ $results = get_data("SHOW TABLES like '{$CONFIG->dbprefix}system_log_%'");
+ if ($results) {
+ foreach ($results as $result) {
+ $data = (array)$result;
+ $table_name = array_shift($data);
+ // extract log table rotation time
+ $log_time = str_replace("{$CONFIG->dbprefix}system_log_", '', $table_name);
+ if ($log_time < $cutoff) {
+ if (delete_data("DROP TABLE $table_name") !== false) {
+ // delete_data returns 0 when dropping a table (false for failure)
+ $deleted_tables = true;
+ } else {
+ elgg_log("Failed to delete the log table $table_name", 'ERROR');
+ }
+ }
+ }
+ }
+
+ return $deleted_tables;
+}
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..9fd3e08df
--- /dev/null
+++ b/mod/logrotate/views/default/plugins/logrotate/settings.php
@@ -0,0 +1,48 @@
+<?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'),
+ 'never' => elgg_echo('logrotate:never'),
+ ),
+ 'value' => $delete,
+ ));
+ ?>
+</div>
diff --git a/mod/lorea-status b/mod/lorea-status
new file mode 160000
+Subproject 6189193ac4771080871f6dab74853051f747490
diff --git a/mod/magic_topbar b/mod/magic_topbar
new file mode 160000
+Subproject 0fdca8adb73fe9e2b5be69c00c15760c8fba336
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..5466a8246
--- /dev/null
+++ b/mod/members/pages/members/search.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Members search page
+ *
+ */
+
+if ($vars['search_type'] == 'tag') {
+ $tag = get_input('tag');
+
+ $display_query = _elgg_get_display_query($tag);
+
+ $title = elgg_echo('members:title:searchtag', array($display_query));
+
+ $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'));
+
+ $display_query = _elgg_get_display_query($name);
+
+ $title = elgg_echo('members:title:searchname', array($display_query));
+
+ $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..b3e9f45b0
--- /dev/null
+++ b/mod/messageboard/pages/messageboard/owner.php
@@ -0,0 +1,57 @@
+<?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,
+ '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..16a971ad2
--- /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..5c2cb8d0d
--- /dev/null
+++ b/mod/messages/start.php
@@ -0,0 +1,480 @@
+<?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'));
+
+ // delete messages sent by a user when user is deleted
+ elgg_register_event_handler('delete', 'user', 'messages_purge');
+
+ // 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) {
+
+ $current_user = elgg_get_logged_in_user_entity();
+ if (!$current_user) {
+ register_error(elgg_echo('noaccess'));
+ $_SESSION['last_forward_from'] = current_page_url();
+ forward('');
+ }
+
+ elgg_load_library('elgg:messages');
+
+ elgg_push_breadcrumb(elgg_echo('messages'), 'messages/inbox/' . $current_user->username);
+
+ if (!isset($page[0])) {
+ $page[0] = 'inbox';
+ }
+
+ // Support the old inbox url /messages/<username>, but only if it matches the logged in user.
+ // Otherwise having a username like "read" on the system could confuse this function.
+ if ($current_user->username === $page[0]) {
+ $page[1] = $page[0];
+ $page[0] = 'inbox';
+ }
+
+ if (!isset($page[1])) {
+ $page[1] = $current_user->username;
+ }
+
+ $user = get_user_by_username($page[1]);
+ //elgg_set_page_owner_guid($user->guid);
+
+ $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;
+}
+
+/**
+ * Delete messages from a user who is being deleted
+ *
+ * @param string $event Event name
+ * @param string $type Event type
+ * @param ElggUser $user User being deleted
+ */
+function messages_purge($event, $type, $user) {
+
+ if (!$user->getGUID()) {
+ return;
+ }
+
+ // make sure we delete them all
+ $entity_disable_override = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+ $ia = elgg_set_ignore_access(true);
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'messages',
+ 'metadata_name' => 'fromId',
+ 'metadata_value' => $user->getGUID(),
+ 'limit' => 0,
+ );
+ $batch = new ElggBatch('elgg_get_entities_from_metadata', $options);
+ foreach ($batch as $e) {
+ $e->delete();
+ }
+
+ elgg_set_ignore_access($ia);
+ access_show_hidden_entities($entity_disable_override);
+}
+
+/**
+ * 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..a0a01afce
--- /dev/null
+++ b/mod/messages/views/default/forms/messages/reply.php
@@ -0,0 +1,43 @@
+<?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,
+));
+echo elgg_view('input/hidden', array(
+ 'name' => 'reply',
+ 'value' => $vars['message']->guid,
+));
+
+?>
+
+<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>
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/minify b/mod/minify
new file mode 160000
+Subproject 594901859d5afc1fa364322428bd7a6d5c6a3f9
diff --git a/mod/notifications/actions/groupsave.php b/mod/notifications/actions/groupsave.php
new file mode 100644
index 000000000..e79dae5cc
--- /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,
+ 'type' => 'group',
+ 'limit' => false,
+);
+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..973f3493c
--- /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,
+ 'type' => 'group',
+ 'limit' => false,
+));
+
+$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..a99622efd
--- /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,
+ 'type' => 'user',
+ 'limit' => false,
+ ))) {
+
+ 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..f3e5f693a
--- /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,
+ 'type' => 'group',
+ 'limit' => false,
+ ));
+ $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..79a7959ac
--- /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,
+ 'type' => 'user',
+ 'limit' => false,
+ ));
+}
+
+$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/openid_api/classes/OpenID_ElggStore.php b/mod/openid_api/classes/OpenID_ElggStore.php
new file mode 100644
index 000000000..2d4800e9b
--- /dev/null
+++ b/mod/openid_api/classes/OpenID_ElggStore.php
@@ -0,0 +1,420 @@
+<?php
+/**
+ * Uses Elgg data model to store OpenID associations
+ *
+ * Written to be compatible with the Elgg store written by Kevin Jardine for
+ * the original OpenID client plugin.
+ */
+class OpenID_ElggStore extends Auth_OpenID_OpenIDStore {
+
+ /**
+ * Store an association
+ *
+ * @param string $server_url The identity server endpoint
+ * @param Auth_OpenID_Association $association The association to store.
+ */
+ public function storeAssociation($server_url, $association) {
+
+ $object = new ElggObject();
+ $object->subtype = 'openid_client::association';
+ $object->owner_guid = 0;
+ $object->container_guid = 0;
+ $object->title = 'association';
+ $object->access_id = ACCESS_PUBLIC;
+ $object->server_url = $server_url;
+ $object->handle = $association->handle;
+ $object->secret = base64_encode($association->secret);
+ $object->issued = $association->issued;
+ $object->lifetime = $association->lifetime;
+ $object->expires = $object->issued + $object->lifetime;
+ $object->assoc_type = $association->assoc_type;
+
+ $object->save();
+ }
+
+ /**
+ * Get an association
+ *
+ * @param string $server_url The identity server endpoint
+ * @param string $handle The association handle
+ * @return Auth_OpenID_Association
+ */
+ public function getAssociation($server_url, $handle = null) {
+
+ $assocs = $this->getAssociations($server_url, $handle);
+ if (!$assocs || count($assocs) == 0) {
+ return null;
+ } else {
+ $associations = array();
+
+ foreach ($assocs as $object) {
+ $assoc = new Auth_OpenID_Association(
+ $object->handle,
+ base64_decode($object->secret),
+ $object->issued,
+ $object->lifetime,
+ $object->assoc_type);
+
+ if ($assoc->getExpiresIn() == 0) {
+ $this->removeAssociation($server_url, $assoc->handle);
+ } else {
+ $associations[] = array($assoc->issued, $assoc);
+ }
+ }
+
+ if ($associations) {
+ $issued = array();
+ $assocs = array();
+ foreach ($associations as $key => $assoc) {
+ $issued[$key] = $assoc[0];
+ $assocs[$key] = $assoc[1];
+ }
+
+ array_multisort($issued, SORT_DESC, $assocs, SORT_DESC, $associations);
+
+ // return the most recently issued one.
+ list($issued, $assoc) = $associations[0];
+ return $assoc;
+ } else {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * Remove selected associations from storage
+ *
+ * @param string $server_url The identity server endpoint
+ * @param string $handle The association handle
+ */
+ public function removeAssociation($server_url, $handle) {
+ $assocs = $this->getAssociations($server_url, $handle);
+ foreach ($assocs as $assoc) {
+ $assoc->delete();
+ }
+ }
+
+ /**
+ * Get all associations
+ *
+ * @param string $server_url The identity server endpoint
+ * @param string $handle The association handle
+ * @return array
+ */
+ protected function getAssociations($server_url, $handle) {
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'openid_client::association',
+ 'metadata_name_value_pairs' => array(
+ array('name' => 'server_url', 'value' => $server_url)
+ ),
+ 'limit' => 0,
+ );
+
+ if ($handle !== null) {
+ $options['metadata_name_value_pairs'][] = array(
+ 'name' => 'handle',
+ 'value' => $handle
+ );
+ }
+
+ return elgg_get_entities_from_metadata($options);
+ }
+
+ /**
+ * Cleanup associations that have expired
+ *
+ * @todo I think we need to store expire time ans use that here
+ *
+ * @return int
+ */
+ public function cleanupAssociations() {
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'openid_client::association',
+ 'metadata_name_value_pairs' => array(
+ array('name' => 'expires', 'value' => time(), 'operand' => '<')
+ ),
+ 'limit' => 0,
+ );
+ $associations = elgg_get_entities_from_metadata($options);
+ $total = count($associations);
+
+ foreach ($associations as $association) {
+ $association->delete();
+ }
+
+ return $total;
+ }
+
+ /**
+ * Can we use this nonce?
+ *
+ * Checks for time skew and replay attacks
+ *
+ * @param type $server_url The identity server endpoint
+ * @param type $timestamp The timestamp from the nonce
+ * @param type $salt The salt from the nonce
+ * @return bool
+ */
+ public function useNonce($server_url, $timestamp, $salt) {
+ global $Auth_OpenID_SKEW;
+
+ if (abs($timestamp - time()) > $Auth_OpenID_SKEW) {
+ return false;
+ }
+
+ if (!$this->addNonce($server_url, $timestamp, $salt)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Store the nonce to prevent replay attacks
+ *
+ * @param string $server_url
+ * @param string $timestamp
+ * @param string $salt
+ * @return bool
+ */
+ protected function addNonce($server_url, $timestamp, $salt) {
+ global $Auth_OpenID_SKEW;
+
+ $identifier = md5($server_url . $timestamp . $salt);
+
+ // was the nonce already used
+ $count = elgg_get_entities_from_metadata(array(
+ 'type' => 'object',
+ 'subtype' => 'openid_client::nonce',
+ 'metadata_name' => 'identifier',
+ 'metadata_value' => $identifier,
+ 'count' => true,
+ ));
+ if ($count) {
+ return false;
+ }
+
+ // add it
+ $object = new ElggObject();
+ $object->subtype = 'openid_client::nonce';
+ $object->owner_guid = 0;
+ $object->container_guid = 0;
+ $object->access_id = ACCESS_PUBLIC;
+ $object->server_url = $server_url;
+ $object->expires = $timestamp + $Auth_OpenID_SKEW;
+ $object->identifier = $identifier;
+ $object->save();
+
+ return true;
+ }
+
+ /**
+ * Cleanup nonces that would not pass the time skew test
+ *
+ * @return int
+ */
+ public function cleanupNonces() {
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'openid_client::nonce',
+ 'metadata_name_value_pairs' => array(
+ array('name' => 'expires', 'value' => time(), 'operand' => '<')
+ ),
+ 'limit' => 0,
+ );
+ $nonces = elgg_get_entities_from_metadata($options);
+ $total = count($nonces);
+
+ foreach ($nonces as $nonce) {
+ $nonce->delete();
+ }
+
+ return $total;
+ }
+
+ /**
+ * Does this storage class support cleanup?
+ *
+ * @return bool
+ */
+ public function supportsCleanup() {
+ return true;
+ }
+
+ /**
+ * Cleanup expired data in storage
+ *
+ * @return array
+ */
+ public function cleanup() {
+ return array($this->cleanupNonces(), $this->cleanupAssociations());
+ }
+
+ /**
+ * Remove everything from storage
+ *
+ * @return void
+ */
+ public function reset() {
+ $associations = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'openid_client::association',
+ 'limit' => 0,
+ ));
+ foreach ($associations as $association) {
+ $association->delete();
+ }
+
+ $nonces = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'openid_client::nonce',
+ 'limit' => 0,
+ ));
+
+ foreach ($nonces as $nonce) {
+ $nonce->delete();
+ }
+ }
+
+ protected function getTrustedSites($user_guid = true) {
+
+ if ($user_guid === true) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ } elseif (!$user_guid) {
+ $user_guid = ELGG_ENTITIES_ANY_VALUE;
+ }
+
+ $results = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'openid_server::trust_root',
+ 'owner_guid' => $user_guid,
+ ));
+
+ return $results;
+ }
+
+ public function getTrustedRoots ($user_guid = true) {
+
+ $results = $this->getTrustedSites($user_guid);
+
+ $sites = array();
+ if ($results) {
+ foreach ($results as $site) {
+ $sites[] = $site->trust_root;
+ }
+ }
+ return $sites;
+ }
+
+ /**
+ * Returns the autologin URLs for every trusted site
+ */
+
+ public function getAutoLoginSites() {
+
+ $default_trusted_sites = $this->getTrustedSites(false);
+
+ $sites = array();
+ if ($default_trusted_sites) {
+ foreach ($default_trusted_sites as $site) {
+ if ($site->auto_login_url) {
+ $sites[] = $site;
+ }
+ }
+ }
+ return $sites;
+ }
+
+ /**
+ * Returns the autologout URLs for every trusted site
+ */
+
+ public function getAutoLogoutSites() {
+
+ $default_trusted_sites = $this->getTrustedSites(false);
+
+ $sites = array();
+ if ($default_trusted_sites) {
+ foreach ($default_trusted_sites as $site) {
+ if ($site->auto_logout_url) {
+ $sites[] = $site;
+ }
+ }
+ }
+ return $sites;
+ }
+
+ static function isTrustedRoot($trust_root) {
+ $results = elgg_get_entities_from_metadata(array(
+ 'type' => 'object',
+ 'subtype' => 'openid_server::trust_root',
+ 'owner_guid' => elgg_get_logged_in_user_guid(),
+ 'metadata_name' => 'trust_root',
+ 'metadata_value' => $trust_root,
+ ));
+
+ return !! $results;
+ }
+
+ public function setTrustedSite($trust_root) {
+
+ if (self::isTrustedRoot($trust_root)) {
+ return true;
+ }
+
+ $site = new ElggObject();
+ $site->subtype = 'openid_server::trust_root';
+ $site->owner_guid = elgg_get_logged_in_user_guid();
+ $site->title = 'association';
+ $site->access_id = ACCESS_PUBLIC;
+
+ if ($site->save()) {
+ $site->trust_root = $trust_root->trust_root;
+ $site->site_name = $trust_root->site_name;
+ $site->autologin = $trust_root->autologin;
+ $site->autologout = $trust_root->autologout;
+ $site->width = $trust_root->width;
+ $site->height = $trust_root->height;
+ return true;
+ }
+ return false;
+ }
+
+ public function removeUserTrustedSites($user = true) {
+
+ $results = $this->getTrustedSites($user);
+
+ if ($results) {
+ foreach($results as $trust_root) {
+ $trust_root->delete();
+ }
+ }
+ return true;
+ }
+
+ public function removeTrustedSite($trust_root, $user_guid = true) {
+
+ if ($user_guid === true) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ } elseif (!$user_guid) {
+ $user_guid = ELGG_ENTITIES_ANY_VALUE;
+ }
+
+ $results = elgg_get_entities_from_metadata(array(
+ 'type' => 'object',
+ 'subtype' => 'openid_server::trust_root',
+ 'owner_guid' => $user_guid,
+ 'metadata_name' => 'trust_root',
+ 'metadata_value' => $trust_root,
+ ));
+
+ if ($results) {
+ foreach($results as $trust_root) {
+ $trust_root->delete();
+ }
+ }
+ return true;
+ }
+}
diff --git a/mod/openid_api/lib/openid_consumer.php b/mod/openid_api/lib/openid_consumer.php
new file mode 100644
index 000000000..86b051c0c
--- /dev/null
+++ b/mod/openid_api/lib/openid_consumer.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * OpenID library loader for consumers
+ */
+
+$openid_path = dirname(dirname(__FILE__)) . '/vendors/php-openid/';
+$path = ini_get('include_path');
+$path = $openid_path . PATH_SEPARATOR . $path;
+ini_set('include_path', $path);
+
+require_once 'Auth/OpenID.php';
+require_once 'Auth/OpenID/Consumer.php';
+require_once 'Auth/OpenID/SReg.php';
+require_once 'Auth/OpenID/AX.php';
+require_once 'Auth/OpenID/Interface.php';
diff --git a/mod/openid_api/lib/openid_server.php b/mod/openid_api/lib/openid_server.php
new file mode 100644
index 000000000..79ed064b4
--- /dev/null
+++ b/mod/openid_api/lib/openid_server.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * OpenID library loader for servers
+ */
+
+$openid_path = dirname(dirname(__FILE__)) . '/vendors/php-openid/';
+$path = ini_get('include_path');
+$path = $openid_path . PATH_SEPARATOR . $path;
+ini_set('include_path', $path);
+
+require_once 'Auth/OpenID.php';
+require_once 'Auth/OpenID/Server.php';
+require_once 'Auth/OpenID/SReg.php';
diff --git a/mod/openid_api/manifest.xml b/mod/openid_api/manifest.xml
new file mode 100644
index 000000000..001c47c19
--- /dev/null
+++ b/mod/openid_api/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>OpenID API</name>
+ <author>Core developers</author>
+ <version>1.8.0</version>
+ <description>OpenID API support for Elgg.</description>
+ <category>api</category>
+ <website>http://www.elgg.org/</website>
+ <copyright>Cash Costello 2011</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <requires>
+ <type>php_extension</type>
+ <name>curl</name>
+ </requires>
+</plugin_manifest>
diff --git a/mod/openid_api/start.php b/mod/openid_api/start.php
new file mode 100644
index 000000000..2efb0a1d6
--- /dev/null
+++ b/mod/openid_api/start.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * OpenID API Library
+ */
+
+elgg_register_event_handler('init', 'system', 'openid_api_init');
+
+function openid_api_init() {
+ $dir = elgg_get_plugins_path() . 'openid_api/lib';
+ elgg_register_library('openid_consumer', "$dir/openid_consumer.php");
+ elgg_register_library('openid_server', "$dir/openid_server.php");
+
+ elgg_register_plugin_hook_handler('cron', 'daily', 'openid_api_cleanup');
+}
+
+/**
+ * Cleanup data related to the OpenID Elgg store for associations
+ */
+function openid_api_cleanup() {
+ $store = new OpenID_ElggStore();
+ $store->cleanup();
+}
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID.php b/mod/openid_api/vendors/php-openid/Auth/OpenID.php
new file mode 100644
index 000000000..c9d977962
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID.php
@@ -0,0 +1,563 @@
+<?php
+
+/**
+ * This is the PHP OpenID library by JanRain, Inc.
+ *
+ * This module contains core utility functionality used by the
+ * library. See Consumer.php and Server.php for the consumer and
+ * server implementations.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * The library version string
+ */
+define('Auth_OpenID_VERSION', '2.2.2');
+
+/**
+ * Require the fetcher code.
+ */
+require_once "Auth/Yadis/PlainHTTPFetcher.php";
+require_once "Auth/Yadis/ParanoidHTTPFetcher.php";
+require_once "Auth/OpenID/BigMath.php";
+require_once "Auth/OpenID/URINorm.php";
+
+/**
+ * Status code returned by the server when the only option is to show
+ * an error page, since we do not have enough information to redirect
+ * back to the consumer. The associated value is an error message that
+ * should be displayed on an HTML error page.
+ *
+ * @see Auth_OpenID_Server
+ */
+define('Auth_OpenID_LOCAL_ERROR', 'local_error');
+
+/**
+ * Status code returned when there is an error to return in key-value
+ * form to the consumer. The caller should return a 400 Bad Request
+ * response with content-type text/plain and the value as the body.
+ *
+ * @see Auth_OpenID_Server
+ */
+define('Auth_OpenID_REMOTE_ERROR', 'remote_error');
+
+/**
+ * Status code returned when there is a key-value form OK response to
+ * the consumer. The value associated with this code is the
+ * response. The caller should return a 200 OK response with
+ * content-type text/plain and the value as the body.
+ *
+ * @see Auth_OpenID_Server
+ */
+define('Auth_OpenID_REMOTE_OK', 'remote_ok');
+
+/**
+ * Status code returned when there is a redirect back to the
+ * consumer. The value is the URL to redirect back to. The caller
+ * should return a 302 Found redirect with a Location: header
+ * containing the URL.
+ *
+ * @see Auth_OpenID_Server
+ */
+define('Auth_OpenID_REDIRECT', 'redirect');
+
+/**
+ * Status code returned when the caller needs to authenticate the
+ * user. The associated value is a {@link Auth_OpenID_ServerRequest}
+ * object that can be used to complete the authentication. If the user
+ * has taken some authentication action, use the retry() method of the
+ * {@link Auth_OpenID_ServerRequest} object to complete the request.
+ *
+ * @see Auth_OpenID_Server
+ */
+define('Auth_OpenID_DO_AUTH', 'do_auth');
+
+/**
+ * Status code returned when there were no OpenID arguments
+ * passed. This code indicates that the caller should return a 200 OK
+ * response and display an HTML page that says that this is an OpenID
+ * server endpoint.
+ *
+ * @see Auth_OpenID_Server
+ */
+define('Auth_OpenID_DO_ABOUT', 'do_about');
+
+/**
+ * Defines for regexes and format checking.
+ */
+define('Auth_OpenID_letters',
+ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
+
+define('Auth_OpenID_digits',
+ "0123456789");
+
+define('Auth_OpenID_punct',
+ "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~");
+
+Auth_OpenID_include_init();
+
+/**
+ * The OpenID utility function class.
+ *
+ * @package OpenID
+ * @access private
+ */
+class Auth_OpenID {
+
+ /**
+ * Return true if $thing is an Auth_OpenID_FailureResponse object;
+ * false if not.
+ *
+ * @access private
+ */
+ static function isFailure($thing)
+ {
+ return is_a($thing, 'Auth_OpenID_FailureResponse');
+ }
+
+ /**
+ * Gets the query data from the server environment based on the
+ * request method used. If GET was used, this looks at
+ * $_SERVER['QUERY_STRING'] directly. If POST was used, this
+ * fetches data from the special php://input file stream.
+ *
+ * Returns an associative array of the query arguments.
+ *
+ * Skips invalid key/value pairs (i.e. keys with no '=value'
+ * portion).
+ *
+ * Returns an empty array if neither GET nor POST was used, or if
+ * POST was used but php://input cannot be opened.
+ *
+ * See background:
+ * http://lists.openidenabled.com/pipermail/dev/2007-March/000395.html
+ *
+ * @access private
+ */
+ static function getQuery($query_str=null)
+ {
+ $data = array();
+
+ if ($query_str !== null) {
+ $data = Auth_OpenID::params_from_string($query_str);
+ } else if (!array_key_exists('REQUEST_METHOD', $_SERVER)) {
+ // Do nothing.
+ } else {
+ // XXX HACK FIXME HORRIBLE.
+ //
+ // POSTing to a URL with query parameters is acceptable, but
+ // we don't have a clean way to distinguish those parameters
+ // when we need to do things like return_to verification
+ // which only want to look at one kind of parameter. We're
+ // going to emulate the behavior of some other environments
+ // by defaulting to GET and overwriting with POST if POST
+ // data is available.
+ $data = Auth_OpenID::params_from_string($_SERVER['QUERY_STRING']);
+
+ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+ $str = file_get_contents('php://input');
+
+ if ($str === false) {
+ $post = array();
+ } else {
+ $post = Auth_OpenID::params_from_string($str);
+ }
+
+ $data = array_merge($data, $post);
+ }
+ }
+
+ return $data;
+ }
+
+ static function params_from_string($str)
+ {
+ $chunks = explode("&", $str);
+
+ $data = array();
+ foreach ($chunks as $chunk) {
+ $parts = explode("=", $chunk, 2);
+
+ if (count($parts) != 2) {
+ continue;
+ }
+
+ list($k, $v) = $parts;
+ $data[urldecode($k)] = urldecode($v);
+ }
+
+ return $data;
+ }
+
+ /**
+ * Create dir_name as a directory if it does not exist. If it
+ * exists, make sure that it is, in fact, a directory. Returns
+ * true if the operation succeeded; false if not.
+ *
+ * @access private
+ */
+ static function ensureDir($dir_name)
+ {
+ if (is_dir($dir_name) || @mkdir($dir_name)) {
+ return true;
+ } else {
+ $parent_dir = dirname($dir_name);
+
+ // Terminal case; there is no parent directory to create.
+ if ($parent_dir == $dir_name) {
+ return true;
+ }
+
+ return (Auth_OpenID::ensureDir($parent_dir) && @mkdir($dir_name));
+ }
+ }
+
+ /**
+ * Adds a string prefix to all values of an array. Returns a new
+ * array containing the prefixed values.
+ *
+ * @access private
+ */
+ static function addPrefix($values, $prefix)
+ {
+ $new_values = array();
+ foreach ($values as $s) {
+ $new_values[] = $prefix . $s;
+ }
+ return $new_values;
+ }
+
+ /**
+ * Convenience function for getting array values. Given an array
+ * $arr and a key $key, get the corresponding value from the array
+ * or return $default if the key is absent.
+ *
+ * @access private
+ */
+ static function arrayGet($arr, $key, $fallback = null)
+ {
+ if (is_array($arr)) {
+ if (array_key_exists($key, $arr)) {
+ return $arr[$key];
+ } else {
+ return $fallback;
+ }
+ } else {
+ trigger_error("Auth_OpenID::arrayGet (key = ".$key.") expected " .
+ "array as first parameter, got " .
+ gettype($arr), E_USER_WARNING);
+
+ return false;
+ }
+ }
+
+ /**
+ * Replacement for PHP's broken parse_str.
+ */
+ static function parse_str($query)
+ {
+ if ($query === null) {
+ return null;
+ }
+
+ $parts = explode('&', $query);
+
+ $new_parts = array();
+ for ($i = 0; $i < count($parts); $i++) {
+ $pair = explode('=', $parts[$i]);
+
+ if (count($pair) != 2) {
+ continue;
+ }
+
+ list($key, $value) = $pair;
+ $new_parts[urldecode($key)] = urldecode($value);
+ }
+
+ return $new_parts;
+ }
+
+ /**
+ * Implements the PHP 5 'http_build_query' functionality.
+ *
+ * @access private
+ * @param array $data Either an array key/value pairs or an array
+ * of arrays, each of which holding two values: a key and a value,
+ * sequentially.
+ * @return string $result The result of url-encoding the key/value
+ * pairs from $data into a URL query string
+ * (e.g. "username=bob&id=56").
+ */
+ static function httpBuildQuery($data)
+ {
+ $pairs = array();
+ foreach ($data as $key => $value) {
+ if (is_array($value)) {
+ $pairs[] = urlencode($value[0])."=".urlencode($value[1]);
+ } else {
+ $pairs[] = urlencode($key)."=".urlencode($value);
+ }
+ }
+ return implode("&", $pairs);
+ }
+
+ /**
+ * "Appends" query arguments onto a URL. The URL may or may not
+ * already have arguments (following a question mark).
+ *
+ * @access private
+ * @param string $url A URL, which may or may not already have
+ * arguments.
+ * @param array $args Either an array key/value pairs or an array of
+ * arrays, each of which holding two values: a key and a value,
+ * sequentially. If $args is an ordinary key/value array, the
+ * parameters will be added to the URL in sorted alphabetical order;
+ * if $args is an array of arrays, their order will be preserved.
+ * @return string $url The original URL with the new parameters added.
+ *
+ */
+ static function appendArgs($url, $args)
+ {
+ if (count($args) == 0) {
+ return $url;
+ }
+
+ // Non-empty array; if it is an array of arrays, use
+ // multisort; otherwise use sort.
+ if (array_key_exists(0, $args) &&
+ is_array($args[0])) {
+ // Do nothing here.
+ } else {
+ $keys = array_keys($args);
+ sort($keys);
+ $new_args = array();
+ foreach ($keys as $key) {
+ $new_args[] = array($key, $args[$key]);
+ }
+ $args = $new_args;
+ }
+
+ $sep = '?';
+ if (strpos($url, '?') !== false) {
+ $sep = '&';
+ }
+
+ return $url . $sep . Auth_OpenID::httpBuildQuery($args);
+ }
+
+ /**
+ * Implements python's urlunparse, which is not available in PHP.
+ * Given the specified components of a URL, this function rebuilds
+ * and returns the URL.
+ *
+ * @access private
+ * @param string $scheme The scheme (e.g. 'http'). Defaults to 'http'.
+ * @param string $host The host. Required.
+ * @param string $port The port.
+ * @param string $path The path.
+ * @param string $query The query.
+ * @param string $fragment The fragment.
+ * @return string $url The URL resulting from assembling the
+ * specified components.
+ */
+ static function urlunparse($scheme, $host, $port = null, $path = '/',
+ $query = '', $fragment = '')
+ {
+
+ if (!$scheme) {
+ $scheme = 'http';
+ }
+
+ if (!$host) {
+ return false;
+ }
+
+ if (!$path) {
+ $path = '';
+ }
+
+ $result = $scheme . "://" . $host;
+
+ if ($port) {
+ $result .= ":" . $port;
+ }
+
+ $result .= $path;
+
+ if ($query) {
+ $result .= "?" . $query;
+ }
+
+ if ($fragment) {
+ $result .= "#" . $fragment;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Given a URL, this "normalizes" it by adding a trailing slash
+ * and / or a leading http:// scheme where necessary. Returns
+ * null if the original URL is malformed and cannot be normalized.
+ *
+ * @access private
+ * @param string $url The URL to be normalized.
+ * @return mixed $new_url The URL after normalization, or null if
+ * $url was malformed.
+ */
+ static function normalizeUrl($url)
+ {
+ @$parsed = parse_url($url);
+
+ if (!$parsed) {
+ return null;
+ }
+
+ if (isset($parsed['scheme']) &&
+ isset($parsed['host'])) {
+ $scheme = strtolower($parsed['scheme']);
+ if (!in_array($scheme, array('http', 'https'))) {
+ return null;
+ }
+ } else {
+ $url = 'http://' . $url;
+ }
+
+ $normalized = Auth_OpenID_urinorm($url);
+ if ($normalized === null) {
+ return null;
+ }
+ list($defragged, $frag) = Auth_OpenID::urldefrag($normalized);
+ return $defragged;
+ }
+
+ /**
+ * Replacement (wrapper) for PHP's intval() because it's broken.
+ *
+ * @access private
+ */
+ static function intval($value)
+ {
+ $re = "/^\\d+$/";
+
+ if (!preg_match($re, $value)) {
+ return false;
+ }
+
+ return intval($value);
+ }
+
+ /**
+ * Count the number of bytes in a string independently of
+ * multibyte support conditions.
+ *
+ * @param string $str The string of bytes to count.
+ * @return int The number of bytes in $str.
+ */
+ static function bytes($str)
+ {
+ return strlen(bin2hex($str)) / 2;
+ }
+
+ /**
+ * Get the bytes in a string independently of multibyte support
+ * conditions.
+ */
+ static function toBytes($str)
+ {
+ $hex = bin2hex($str);
+
+ if (!$hex) {
+ return array();
+ }
+
+ $b = array();
+ for ($i = 0; $i < strlen($hex); $i += 2) {
+ $b[] = chr(base_convert(substr($hex, $i, 2), 16, 10));
+ }
+
+ return $b;
+ }
+
+ static function urldefrag($url)
+ {
+ $parts = explode("#", $url, 2);
+
+ if (count($parts) == 1) {
+ return array($parts[0], "");
+ } else {
+ return $parts;
+ }
+ }
+
+ static function filter($callback, &$sequence)
+ {
+ $result = array();
+
+ foreach ($sequence as $item) {
+ if (call_user_func_array($callback, array($item))) {
+ $result[] = $item;
+ }
+ }
+
+ return $result;
+ }
+
+ static function update(&$dest, &$src)
+ {
+ foreach ($src as $k => $v) {
+ $dest[$k] = $v;
+ }
+ }
+
+ /**
+ * Wrap PHP's standard error_log functionality. Use this to
+ * perform all logging. It will interpolate any additional
+ * arguments into the format string before logging.
+ *
+ * @param string $format_string The sprintf format for the message
+ */
+ static function log($format_string)
+ {
+ $args = func_get_args();
+ $message = call_user_func_array('sprintf', $args);
+ error_log($message);
+ }
+
+ static function autoSubmitHTML($form, $title="OpenId transaction in progress")
+ {
+ return("<html>".
+ "<head><title>".
+ $title .
+ "</title></head>".
+ "<body onload='document.forms[0].submit();'>".
+ $form .
+ "<script>".
+ "var elements = document.forms[0].elements;".
+ "for (var i = 0; i < elements.length; i++) {".
+ " elements[i].style.display = \"none\";".
+ "}".
+ "</script>".
+ "</body>".
+ "</html>");
+ }
+}
+
+/*
+ * Function to run when this file is included.
+ * Abstracted to a function to make life easier
+ * for some PHP optimizers.
+ */
+function Auth_OpenID_include_init() {
+ if (Auth_OpenID_getMathLib() === null) {
+ Auth_OpenID_setNoMathSupport();
+ }
+}
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/AX.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/AX.php
new file mode 100644
index 000000000..7370715e3
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/AX.php
@@ -0,0 +1,1022 @@
+<?php
+
+/**
+ * Implements the OpenID attribute exchange specification, version 1.0
+ * as of svn revision 370 from openid.net svn.
+ *
+ * @package OpenID
+ */
+
+/**
+ * Require utility classes and functions for the consumer.
+ */
+require_once "Auth/OpenID/Extension.php";
+require_once "Auth/OpenID/Message.php";
+require_once "Auth/OpenID/TrustRoot.php";
+
+define('Auth_OpenID_AX_NS_URI',
+ 'http://openid.net/srv/ax/1.0');
+
+// Use this as the 'count' value for an attribute in a FetchRequest to
+// ask for as many values as the OP can provide.
+define('Auth_OpenID_AX_UNLIMITED_VALUES', 'unlimited');
+
+// Minimum supported alias length in characters. Here for
+// completeness.
+define('Auth_OpenID_AX_MINIMUM_SUPPORTED_ALIAS_LENGTH', 32);
+
+/**
+ * AX utility class.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AX {
+ /**
+ * @param mixed $thing Any object which may be an
+ * Auth_OpenID_AX_Error object.
+ *
+ * @return bool true if $thing is an Auth_OpenID_AX_Error; false
+ * if not.
+ */
+ static function isError($thing)
+ {
+ return is_a($thing, 'Auth_OpenID_AX_Error');
+ }
+}
+
+/**
+ * Check an alias for invalid characters; raise AXError if any are
+ * found. Return None if the alias is valid.
+ */
+function Auth_OpenID_AX_checkAlias($alias)
+{
+ if (strpos($alias, ',') !== false) {
+ return new Auth_OpenID_AX_Error(sprintf(
+ "Alias %s must not contain comma", $alias));
+ }
+ if (strpos($alias, '.') !== false) {
+ return new Auth_OpenID_AX_Error(sprintf(
+ "Alias %s must not contain period", $alias));
+ }
+
+ return true;
+}
+
+/**
+ * Results from data that does not meet the attribute exchange 1.0
+ * specification
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AX_Error {
+ function Auth_OpenID_AX_Error($message=null)
+ {
+ $this->message = $message;
+ }
+}
+
+/**
+ * Abstract class containing common code for attribute exchange
+ * messages.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AX_Message extends Auth_OpenID_Extension {
+ /**
+ * ns_alias: The preferred namespace alias for attribute exchange
+ * messages
+ */
+ var $ns_alias = 'ax';
+
+ /**
+ * mode: The type of this attribute exchange message. This must be
+ * overridden in subclasses.
+ */
+ var $mode = null;
+
+ var $ns_uri = Auth_OpenID_AX_NS_URI;
+
+ /**
+ * Return Auth_OpenID_AX_Error if the mode in the attribute
+ * exchange arguments does not match what is expected for this
+ * class; true otherwise.
+ *
+ * @access private
+ */
+ function _checkMode($ax_args)
+ {
+ $mode = Auth_OpenID::arrayGet($ax_args, 'mode');
+ if ($mode != $this->mode) {
+ return new Auth_OpenID_AX_Error(
+ sprintf(
+ "Expected mode '%s'; got '%s'",
+ $this->mode, $mode));
+ }
+
+ return true;
+ }
+
+ /**
+ * Return a set of attribute exchange arguments containing the
+ * basic information that must be in every attribute exchange
+ * message.
+ *
+ * @access private
+ */
+ function _newArgs()
+ {
+ return array('mode' => $this->mode);
+ }
+}
+
+/**
+ * Represents a single attribute in an attribute exchange
+ * request. This should be added to an AXRequest object in order to
+ * request the attribute.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AX_AttrInfo {
+ /**
+ * Construct an attribute information object. Do not call this
+ * directly; call make(...) instead.
+ *
+ * @param string $type_uri The type URI for this attribute.
+ *
+ * @param int $count The number of values of this type to request.
+ *
+ * @param bool $required Whether the attribute will be marked as
+ * required in the request.
+ *
+ * @param string $alias The name that should be given to this
+ * attribute in the request.
+ */
+ function Auth_OpenID_AX_AttrInfo($type_uri, $count, $required,
+ $alias)
+ {
+ /**
+ * required: Whether the attribute will be marked as required
+ * when presented to the subject of the attribute exchange
+ * request.
+ */
+ $this->required = $required;
+
+ /**
+ * count: How many values of this type to request from the
+ * subject. Defaults to one.
+ */
+ $this->count = $count;
+
+ /**
+ * type_uri: The identifier that determines what the attribute
+ * represents and how it is serialized. For example, one type
+ * URI representing dates could represent a Unix timestamp in
+ * base 10 and another could represent a human-readable
+ * string.
+ */
+ $this->type_uri = $type_uri;
+
+ /**
+ * alias: The name that should be given to this attribute in
+ * the request. If it is not supplied, a generic name will be
+ * assigned. For example, if you want to call a Unix timestamp
+ * value 'tstamp', set its alias to that value. If two
+ * attributes in the same message request to use the same
+ * alias, the request will fail to be generated.
+ */
+ $this->alias = $alias;
+ }
+
+ /**
+ * Construct an attribute information object. For parameter
+ * details, see the constructor.
+ */
+ static function make($type_uri, $count=1, $required=false,
+ $alias=null)
+ {
+ if ($alias !== null) {
+ $result = Auth_OpenID_AX_checkAlias($alias);
+
+ if (Auth_OpenID_AX::isError($result)) {
+ return $result;
+ }
+ }
+
+ return new Auth_OpenID_AX_AttrInfo($type_uri, $count, $required,
+ $alias);
+ }
+
+ /**
+ * When processing a request for this attribute, the OP should
+ * call this method to determine whether all available attribute
+ * values were requested. If self.count == UNLIMITED_VALUES, this
+ * returns True. Otherwise this returns False, in which case
+ * self.count is an integer.
+ */
+ function wantsUnlimitedValues()
+ {
+ return $this->count === Auth_OpenID_AX_UNLIMITED_VALUES;
+ }
+}
+
+/**
+ * Given a namespace mapping and a string containing a comma-separated
+ * list of namespace aliases, return a list of type URIs that
+ * correspond to those aliases.
+ *
+ * @param $namespace_map The mapping from namespace URI to alias
+ * @param $alias_list_s The string containing the comma-separated
+ * list of aliases. May also be None for convenience.
+ *
+ * @return $seq The list of namespace URIs that corresponds to the
+ * supplied list of aliases. If the string was zero-length or None, an
+ * empty list will be returned.
+ *
+ * return null If an alias is present in the list of aliases but
+ * is not present in the namespace map.
+ */
+function Auth_OpenID_AX_toTypeURIs($namespace_map, $alias_list_s)
+{
+ $uris = array();
+
+ if ($alias_list_s) {
+ foreach (explode(',', $alias_list_s) as $alias) {
+ $type_uri = $namespace_map->getNamespaceURI($alias);
+ if ($type_uri === null) {
+ // raise KeyError(
+ // 'No type is defined for attribute name %r' % (alias,))
+ return new Auth_OpenID_AX_Error(
+ sprintf('No type is defined for attribute name %s',
+ $alias)
+ );
+ } else {
+ $uris[] = $type_uri;
+ }
+ }
+ }
+
+ return $uris;
+}
+
+/**
+ * An attribute exchange 'fetch_request' message. This message is sent
+ * by a relying party when it wishes to obtain attributes about the
+ * subject of an OpenID authentication request.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AX_FetchRequest extends Auth_OpenID_AX_Message {
+
+ var $mode = 'fetch_request';
+
+ function Auth_OpenID_AX_FetchRequest($update_url=null)
+ {
+ /**
+ * requested_attributes: The attributes that have been
+ * requested thus far, indexed by the type URI.
+ */
+ $this->requested_attributes = array();
+
+ /**
+ * update_url: A URL that will accept responses for this
+ * attribute exchange request, even in the absence of the user
+ * who made this request.
+ */
+ $this->update_url = $update_url;
+ }
+
+ /**
+ * Add an attribute to this attribute exchange request.
+ *
+ * @param attribute: The attribute that is being requested
+ * @return true on success, false when the requested attribute is
+ * already present in this fetch request.
+ */
+ function add($attribute)
+ {
+ if ($this->contains($attribute->type_uri)) {
+ return new Auth_OpenID_AX_Error(
+ sprintf("The attribute %s has already been requested",
+ $attribute->type_uri));
+ }
+
+ $this->requested_attributes[$attribute->type_uri] = $attribute;
+
+ return true;
+ }
+
+ /**
+ * Get the serialized form of this attribute fetch request.
+ *
+ * @returns Auth_OpenID_AX_FetchRequest The fetch request message parameters
+ */
+ function getExtensionArgs()
+ {
+ $aliases = new Auth_OpenID_NamespaceMap();
+
+ $required = array();
+ $if_available = array();
+
+ $ax_args = $this->_newArgs();
+
+ foreach ($this->requested_attributes as $type_uri => $attribute) {
+ if ($attribute->alias === null) {
+ $alias = $aliases->add($type_uri);
+ } else {
+ $alias = $aliases->addAlias($type_uri, $attribute->alias);
+
+ if ($alias === null) {
+ return new Auth_OpenID_AX_Error(
+ sprintf("Could not add alias %s for URI %s",
+ $attribute->alias, $type_uri
+ ));
+ }
+ }
+
+ if ($attribute->required) {
+ $required[] = $alias;
+ } else {
+ $if_available[] = $alias;
+ }
+
+ if ($attribute->count != 1) {
+ $ax_args['count.' . $alias] = strval($attribute->count);
+ }
+
+ $ax_args['type.' . $alias] = $type_uri;
+ }
+
+ if ($required) {
+ $ax_args['required'] = implode(',', $required);
+ }
+
+ if ($if_available) {
+ $ax_args['if_available'] = implode(',', $if_available);
+ }
+
+ return $ax_args;
+ }
+
+ /**
+ * Get the type URIs for all attributes that have been marked as
+ * required.
+ *
+ * @return A list of the type URIs for attributes that have been
+ * marked as required.
+ */
+ function getRequiredAttrs()
+ {
+ $required = array();
+ foreach ($this->requested_attributes as $type_uri => $attribute) {
+ if ($attribute->required) {
+ $required[] = $type_uri;
+ }
+ }
+
+ return $required;
+ }
+
+ /**
+ * Extract a FetchRequest from an OpenID message
+ *
+ * @param request: The OpenID request containing the attribute
+ * fetch request
+ *
+ * @returns mixed An Auth_OpenID_AX_Error or the
+ * Auth_OpenID_AX_FetchRequest extracted from the request message if
+ * successful
+ */
+ static function fromOpenIDRequest($request)
+ {
+ $m = $request->message;
+ $obj = new Auth_OpenID_AX_FetchRequest();
+ $ax_args = $m->getArgs($obj->ns_uri);
+
+ $result = $obj->parseExtensionArgs($ax_args);
+
+ if (Auth_OpenID_AX::isError($result)) {
+ return $result;
+ }
+
+ if ($obj->update_url) {
+ // Update URL must match the openid.realm of the
+ // underlying OpenID 2 message.
+ $realm = $m->getArg(Auth_OpenID_OPENID_NS, 'realm',
+ $m->getArg(
+ Auth_OpenID_OPENID_NS,
+ 'return_to'));
+
+ if (!$realm) {
+ $obj = new Auth_OpenID_AX_Error(
+ sprintf("Cannot validate update_url %s " .
+ "against absent realm", $obj->update_url));
+ } else if (!Auth_OpenID_TrustRoot::match($realm,
+ $obj->update_url)) {
+ $obj = new Auth_OpenID_AX_Error(
+ sprintf("Update URL %s failed validation against realm %s",
+ $obj->update_url, $realm));
+ }
+ }
+
+ return $obj;
+ }
+
+ /**
+ * Given attribute exchange arguments, populate this FetchRequest.
+ *
+ * @return $result Auth_OpenID_AX_Error if the data to be parsed
+ * does not follow the attribute exchange specification. At least
+ * when 'if_available' or 'required' is not specified for a
+ * particular attribute type. Returns true otherwise.
+ */
+ function parseExtensionArgs($ax_args)
+ {
+ $result = $this->_checkMode($ax_args);
+ if (Auth_OpenID_AX::isError($result)) {
+ return $result;
+ }
+
+ $aliases = new Auth_OpenID_NamespaceMap();
+
+ foreach ($ax_args as $key => $value) {
+ if (strpos($key, 'type.') === 0) {
+ $alias = substr($key, 5);
+ $type_uri = $value;
+
+ $alias = $aliases->addAlias($type_uri, $alias);
+
+ if ($alias === null) {
+ return new Auth_OpenID_AX_Error(
+ sprintf("Could not add alias %s for URI %s",
+ $alias, $type_uri)
+ );
+ }
+
+ $count_s = Auth_OpenID::arrayGet($ax_args, 'count.' . $alias);
+ if ($count_s) {
+ $count = Auth_OpenID::intval($count_s);
+ if (($count === false) &&
+ ($count_s === Auth_OpenID_AX_UNLIMITED_VALUES)) {
+ $count = $count_s;
+ }
+ } else {
+ $count = 1;
+ }
+
+ if ($count === false) {
+ return new Auth_OpenID_AX_Error(
+ sprintf("Integer value expected for %s, got %s",
+ 'count.' . $alias, $count_s));
+ }
+
+ $attrinfo = Auth_OpenID_AX_AttrInfo::make($type_uri, $count,
+ false, $alias);
+
+ if (Auth_OpenID_AX::isError($attrinfo)) {
+ return $attrinfo;
+ }
+
+ $this->add($attrinfo);
+ }
+ }
+
+ $required = Auth_OpenID_AX_toTypeURIs($aliases,
+ Auth_OpenID::arrayGet($ax_args, 'required'));
+
+ foreach ($required as $type_uri) {
+ $attrib = $this->requested_attributes[$type_uri];
+ $attrib->required = true;
+ }
+
+ $if_available = Auth_OpenID_AX_toTypeURIs($aliases,
+ Auth_OpenID::arrayGet($ax_args, 'if_available'));
+
+ $all_type_uris = array_merge($required, $if_available);
+
+ foreach ($aliases->iterNamespaceURIs() as $type_uri) {
+ if (!in_array($type_uri, $all_type_uris)) {
+ return new Auth_OpenID_AX_Error(
+ sprintf('Type URI %s was in the request but not ' .
+ 'present in "required" or "if_available"',
+ $type_uri));
+
+ }
+ }
+
+ $this->update_url = Auth_OpenID::arrayGet($ax_args, 'update_url');
+
+ return true;
+ }
+
+ /**
+ * Iterate over the AttrInfo objects that are contained in this
+ * fetch_request.
+ */
+ function iterAttrs()
+ {
+ return array_values($this->requested_attributes);
+ }
+
+ function iterTypes()
+ {
+ return array_keys($this->requested_attributes);
+ }
+
+ /**
+ * Is the given type URI present in this fetch_request?
+ */
+ function contains($type_uri)
+ {
+ return in_array($type_uri, $this->iterTypes());
+ }
+}
+
+/**
+ * An abstract class that implements a message that has attribute keys
+ * and values. It contains the common code between fetch_response and
+ * store_request.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AX_KeyValueMessage extends Auth_OpenID_AX_Message {
+
+ function Auth_OpenID_AX_KeyValueMessage()
+ {
+ $this->data = array();
+ }
+
+ /**
+ * Add a single value for the given attribute type to the
+ * message. If there are already values specified for this type,
+ * this value will be sent in addition to the values already
+ * specified.
+ *
+ * @param type_uri: The URI for the attribute
+ * @param value: The value to add to the response to the relying
+ * party for this attribute
+ * @return null
+ */
+ function addValue($type_uri, $value)
+ {
+ if (!array_key_exists($type_uri, $this->data)) {
+ $this->data[$type_uri] = array();
+ }
+
+ $values =& $this->data[$type_uri];
+ $values[] = $value;
+ }
+
+ /**
+ * Set the values for the given attribute type. This replaces any
+ * values that have already been set for this attribute.
+ *
+ * @param type_uri: The URI for the attribute
+ * @param values: A list of values to send for this attribute.
+ */
+ function setValues($type_uri, &$values)
+ {
+ $this->data[$type_uri] =& $values;
+ }
+
+ /**
+ * Get the extension arguments for the key/value pairs contained
+ * in this message.
+ *
+ * @param aliases: An alias mapping. Set to None if you don't care
+ * about the aliases for this request.
+ *
+ * @access private
+ */
+ function _getExtensionKVArgs($aliases)
+ {
+ if ($aliases === null) {
+ $aliases = new Auth_OpenID_NamespaceMap();
+ }
+
+ $ax_args = array();
+
+ foreach ($this->data as $type_uri => $values) {
+ $alias = $aliases->add($type_uri);
+
+ $ax_args['type.' . $alias] = $type_uri;
+ $ax_args['count.' . $alias] = strval(count($values));
+
+ foreach ($values as $i => $value) {
+ $key = sprintf('value.%s.%d', $alias, $i + 1);
+ $ax_args[$key] = $value;
+ }
+ }
+
+ return $ax_args;
+ }
+
+ /**
+ * Parse attribute exchange key/value arguments into this object.
+ *
+ * @param ax_args: The attribute exchange fetch_response
+ * arguments, with namespacing removed.
+ *
+ * @return Auth_OpenID_AX_Error or true
+ */
+ function parseExtensionArgs($ax_args)
+ {
+ $result = $this->_checkMode($ax_args);
+ if (Auth_OpenID_AX::isError($result)) {
+ return $result;
+ }
+
+ $aliases = new Auth_OpenID_NamespaceMap();
+
+ foreach ($ax_args as $key => $value) {
+ if (strpos($key, 'type.') === 0) {
+ $type_uri = $value;
+ $alias = substr($key, 5);
+
+ $result = Auth_OpenID_AX_checkAlias($alias);
+
+ if (Auth_OpenID_AX::isError($result)) {
+ return $result;
+ }
+
+ $alias = $aliases->addAlias($type_uri, $alias);
+
+ if ($alias === null) {
+ return new Auth_OpenID_AX_Error(
+ sprintf("Could not add alias %s for URI %s",
+ $alias, $type_uri)
+ );
+ }
+ }
+ }
+
+ foreach ($aliases->iteritems() as $pair) {
+ list($type_uri, $alias) = $pair;
+
+ if (array_key_exists('count.' . $alias, $ax_args) && ($ax_args['count.' . $alias] !== Auth_OpenID_AX_UNLIMITED_VALUES)) {
+
+ $count_key = 'count.' . $alias;
+ $count_s = $ax_args[$count_key];
+
+ $count = Auth_OpenID::intval($count_s);
+
+ if ($count === false) {
+ return new Auth_OpenID_AX_Error(
+ sprintf("Integer value expected for %s, got %s",
+ 'count. %s' . $alias, $count_s,
+ Auth_OpenID_AX_UNLIMITED_VALUES)
+ );
+ }
+
+ $values = array();
+ for ($i = 1; $i < $count + 1; $i++) {
+ $value_key = sprintf('value.%s.%d', $alias, $i);
+
+ if (!array_key_exists($value_key, $ax_args)) {
+ return new Auth_OpenID_AX_Error(
+ sprintf(
+ "No value found for key %s",
+ $value_key));
+ }
+
+ $value = $ax_args[$value_key];
+ $values[] = $value;
+ }
+ } else {
+ $key = 'value.' . $alias;
+
+ if (!array_key_exists($key, $ax_args)) {
+ return new Auth_OpenID_AX_Error(
+ sprintf(
+ "No value found for key %s",
+ $key));
+ }
+
+ $value = $ax_args['value.' . $alias];
+
+ if ($value == '') {
+ $values = array();
+ } else {
+ $values = array($value);
+ }
+ }
+
+ $this->data[$type_uri] = $values;
+ }
+
+ return true;
+ }
+
+ /**
+ * Get a single value for an attribute. If no value was sent for
+ * this attribute, use the supplied default. If there is more than
+ * one value for this attribute, this method will fail.
+ *
+ * @param type_uri: The URI for the attribute
+ * @param default: The value to return if the attribute was not
+ * sent in the fetch_response.
+ *
+ * @return $value Auth_OpenID_AX_Error on failure or the value of
+ * the attribute in the fetch_response message, or the default
+ * supplied
+ */
+ function getSingle($type_uri, $default=null)
+ {
+ $values = Auth_OpenID::arrayGet($this->data, $type_uri);
+ if (!$values) {
+ return $default;
+ } else if (count($values) == 1) {
+ return $values[0];
+ } else {
+ return new Auth_OpenID_AX_Error(
+ sprintf('More than one value present for %s',
+ $type_uri)
+ );
+ }
+ }
+
+ /**
+ * Get the list of values for this attribute in the
+ * fetch_response.
+ *
+ * XXX: what to do if the values are not present? default
+ * parameter? this is funny because it's always supposed to return
+ * a list, so the default may break that, though it's provided by
+ * the user's code, so it might be okay. If no default is
+ * supplied, should the return be None or []?
+ *
+ * @param type_uri: The URI of the attribute
+ *
+ * @return $values The list of values for this attribute in the
+ * response. May be an empty list. If the attribute was not sent
+ * in the response, returns Auth_OpenID_AX_Error.
+ */
+ function get($type_uri)
+ {
+ if (array_key_exists($type_uri, $this->data)) {
+ return $this->data[$type_uri];
+ } else {
+ return new Auth_OpenID_AX_Error(
+ sprintf("Type URI %s not found in response",
+ $type_uri)
+ );
+ }
+ }
+
+ /**
+ * Get the number of responses for a particular attribute in this
+ * fetch_response message.
+ *
+ * @param type_uri: The URI of the attribute
+ *
+ * @returns int The number of values sent for this attribute. If
+ * the attribute was not sent in the response, returns
+ * Auth_OpenID_AX_Error.
+ */
+ function count($type_uri)
+ {
+ if (array_key_exists($type_uri, $this->data)) {
+ return count($this->get($type_uri));
+ } else {
+ return new Auth_OpenID_AX_Error(
+ sprintf("Type URI %s not found in response",
+ $type_uri)
+ );
+ }
+ }
+}
+
+/**
+ * A fetch_response attribute exchange message.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AX_FetchResponse extends Auth_OpenID_AX_KeyValueMessage {
+ var $mode = 'fetch_response';
+
+ function Auth_OpenID_AX_FetchResponse($update_url=null)
+ {
+ $this->Auth_OpenID_AX_KeyValueMessage();
+ $this->update_url = $update_url;
+ }
+
+ /**
+ * Serialize this object into arguments in the attribute exchange
+ * namespace
+ *
+ * @return $args The dictionary of unqualified attribute exchange
+ * arguments that represent this fetch_response, or
+ * Auth_OpenID_AX_Error on error.
+ */
+ function getExtensionArgs($request=null)
+ {
+ $aliases = new Auth_OpenID_NamespaceMap();
+
+ $zero_value_types = array();
+
+ if ($request !== null) {
+ // Validate the data in the context of the request (the
+ // same attributes should be present in each, and the
+ // counts in the response must be no more than the counts
+ // in the request)
+
+ foreach ($this->data as $type_uri => $unused) {
+ if (!$request->contains($type_uri)) {
+ return new Auth_OpenID_AX_Error(
+ sprintf("Response attribute not present in request: %s",
+ $type_uri)
+ );
+ }
+ }
+
+ foreach ($request->iterAttrs() as $attr_info) {
+ // Copy the aliases from the request so that reading
+ // the response in light of the request is easier
+ if ($attr_info->alias === null) {
+ $aliases->add($attr_info->type_uri);
+ } else {
+ $alias = $aliases->addAlias($attr_info->type_uri,
+ $attr_info->alias);
+
+ if ($alias === null) {
+ return new Auth_OpenID_AX_Error(
+ sprintf("Could not add alias %s for URI %s",
+ $attr_info->alias, $attr_info->type_uri)
+ );
+ }
+ }
+
+ if (array_key_exists($attr_info->type_uri, $this->data)) {
+ $values = $this->data[$attr_info->type_uri];
+ } else {
+ $values = array();
+ $zero_value_types[] = $attr_info;
+ }
+
+ if (($attr_info->count != Auth_OpenID_AX_UNLIMITED_VALUES) &&
+ ($attr_info->count < count($values))) {
+ return new Auth_OpenID_AX_Error(
+ sprintf("More than the number of requested values " .
+ "were specified for %s",
+ $attr_info->type_uri)
+ );
+ }
+ }
+ }
+
+ $kv_args = $this->_getExtensionKVArgs($aliases);
+
+ // Add the KV args into the response with the args that are
+ // unique to the fetch_response
+ $ax_args = $this->_newArgs();
+
+ // For each requested attribute, put its type/alias and count
+ // into the response even if no data were returned.
+ foreach ($zero_value_types as $attr_info) {
+ $alias = $aliases->getAlias($attr_info->type_uri);
+ $kv_args['type.' . $alias] = $attr_info->type_uri;
+ $kv_args['count.' . $alias] = '0';
+ }
+
+ $update_url = null;
+ if ($request) {
+ $update_url = $request->update_url;
+ } else {
+ $update_url = $this->update_url;
+ }
+
+ if ($update_url) {
+ $ax_args['update_url'] = $update_url;
+ }
+
+ Auth_OpenID::update($ax_args, $kv_args);
+
+ return $ax_args;
+ }
+
+ /**
+ * @return $result Auth_OpenID_AX_Error on failure or true on
+ * success.
+ */
+ function parseExtensionArgs($ax_args)
+ {
+ $result = parent::parseExtensionArgs($ax_args);
+
+ if (Auth_OpenID_AX::isError($result)) {
+ return $result;
+ }
+
+ $this->update_url = Auth_OpenID::arrayGet($ax_args, 'update_url');
+
+ return true;
+ }
+
+ /**
+ * Construct a FetchResponse object from an OpenID library
+ * SuccessResponse object.
+ *
+ * @param success_response: A successful id_res response object
+ *
+ * @param signed: Whether non-signed args should be processsed. If
+ * True (the default), only signed arguments will be processsed.
+ *
+ * @return $response A FetchResponse containing the data from the
+ * OpenID message
+ */
+ static function fromSuccessResponse($success_response, $signed=true)
+ {
+ $obj = new Auth_OpenID_AX_FetchResponse();
+ if ($signed) {
+ $ax_args = $success_response->getSignedNS($obj->ns_uri);
+ } else {
+ $ax_args = $success_response->message->getArgs($obj->ns_uri);
+ }
+ if ($ax_args === null || Auth_OpenID::isFailure($ax_args) ||
+ sizeof($ax_args) == 0) {
+ return null;
+ }
+
+ $result = $obj->parseExtensionArgs($ax_args);
+ if (Auth_OpenID_AX::isError($result)) {
+ #XXX log me
+ return null;
+ }
+ return $obj;
+ }
+}
+
+/**
+ * A store request attribute exchange message representation.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AX_StoreRequest extends Auth_OpenID_AX_KeyValueMessage {
+ var $mode = 'store_request';
+
+ /**
+ * @param array $aliases The namespace aliases to use when making
+ * this store response. Leave as None to use defaults.
+ */
+ function getExtensionArgs($aliases=null)
+ {
+ $ax_args = $this->_newArgs();
+ $kv_args = $this->_getExtensionKVArgs($aliases);
+ Auth_OpenID::update($ax_args, $kv_args);
+ return $ax_args;
+ }
+}
+
+/**
+ * An indication that the store request was processed along with this
+ * OpenID transaction. Use make(), NOT the constructor, to create
+ * response objects.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AX_StoreResponse extends Auth_OpenID_AX_Message {
+ var $SUCCESS_MODE = 'store_response_success';
+ var $FAILURE_MODE = 'store_response_failure';
+
+ /**
+ * Returns Auth_OpenID_AX_Error on error or an
+ * Auth_OpenID_AX_StoreResponse object on success.
+ */
+ function make($succeeded=true, $error_message=null)
+ {
+ if (($succeeded) && ($error_message !== null)) {
+ return new Auth_OpenID_AX_Error('An error message may only be '.
+ 'included in a failing fetch response');
+ }
+
+ return new Auth_OpenID_AX_StoreResponse($succeeded, $error_message);
+ }
+
+ function Auth_OpenID_AX_StoreResponse($succeeded=true, $error_message=null)
+ {
+ if ($succeeded) {
+ $this->mode = $this->SUCCESS_MODE;
+ } else {
+ $this->mode = $this->FAILURE_MODE;
+ }
+
+ $this->error_message = $error_message;
+ }
+
+ /**
+ * Was this response a success response?
+ */
+ function succeeded()
+ {
+ return $this->mode == $this->SUCCESS_MODE;
+ }
+
+ function getExtensionArgs()
+ {
+ $ax_args = $this->_newArgs();
+ if ((!$this->succeeded()) && $this->error_message) {
+ $ax_args['error'] = $this->error_message;
+ }
+
+ return $ax_args;
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/Association.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/Association.php
new file mode 100644
index 000000000..2729138eb
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/Association.php
@@ -0,0 +1,610 @@
+<?php
+
+/**
+ * This module contains code for dealing with associations between
+ * consumers and servers.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * @access private
+ */
+require_once 'Auth/OpenID/CryptUtil.php';
+
+/**
+ * @access private
+ */
+require_once 'Auth/OpenID/KVForm.php';
+
+/**
+ * @access private
+ */
+require_once 'Auth/OpenID/HMAC.php';
+
+/**
+ * This class represents an association between a server and a
+ * consumer. In general, users of this library will never see
+ * instances of this object. The only exception is if you implement a
+ * custom {@link Auth_OpenID_OpenIDStore}.
+ *
+ * If you do implement such a store, it will need to store the values
+ * of the handle, secret, issued, lifetime, and assoc_type instance
+ * variables.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_Association {
+
+ /**
+ * This is a HMAC-SHA1 specific value.
+ *
+ * @access private
+ */
+ var $SIG_LENGTH = 20;
+
+ /**
+ * The ordering and name of keys as stored by serialize.
+ *
+ * @access private
+ */
+ var $assoc_keys = array(
+ 'version',
+ 'handle',
+ 'secret',
+ 'issued',
+ 'lifetime',
+ 'assoc_type'
+ );
+
+ var $_macs = array(
+ 'HMAC-SHA1' => 'Auth_OpenID_HMACSHA1',
+ 'HMAC-SHA256' => 'Auth_OpenID_HMACSHA256'
+ );
+
+ /**
+ * This is an alternate constructor (factory method) used by the
+ * OpenID consumer library to create associations. OpenID store
+ * implementations shouldn't use this constructor.
+ *
+ * @access private
+ *
+ * @param integer $expires_in This is the amount of time this
+ * association is good for, measured in seconds since the
+ * association was issued.
+ *
+ * @param string $handle This is the handle the server gave this
+ * association.
+ *
+ * @param string secret This is the shared secret the server
+ * generated for this association.
+ *
+ * @param assoc_type This is the type of association this
+ * instance represents. The only valid values of this field at
+ * this time is 'HMAC-SHA1' and 'HMAC-SHA256', but new types may
+ * be defined in the future.
+ *
+ * @return association An {@link Auth_OpenID_Association}
+ * instance.
+ */
+ static function fromExpiresIn($expires_in, $handle, $secret, $assoc_type)
+ {
+ $issued = time();
+ $lifetime = $expires_in;
+ return new Auth_OpenID_Association($handle, $secret,
+ $issued, $lifetime, $assoc_type);
+ }
+
+ /**
+ * This is the standard constructor for creating an association.
+ * The library should create all of the necessary associations, so
+ * this constructor is not part of the external API.
+ *
+ * @access private
+ *
+ * @param string $handle This is the handle the server gave this
+ * association.
+ *
+ * @param string $secret This is the shared secret the server
+ * generated for this association.
+ *
+ * @param integer $issued This is the time this association was
+ * issued, in seconds since 00:00 GMT, January 1, 1970. (ie, a
+ * unix timestamp)
+ *
+ * @param integer $lifetime This is the amount of time this
+ * association is good for, measured in seconds since the
+ * association was issued.
+ *
+ * @param string $assoc_type This is the type of association this
+ * instance represents. The only valid values of this field at
+ * this time is 'HMAC-SHA1' and 'HMAC-SHA256', but new types may
+ * be defined in the future.
+ */
+ function Auth_OpenID_Association(
+ $handle, $secret, $issued, $lifetime, $assoc_type)
+ {
+ if (!in_array($assoc_type,
+ Auth_OpenID_getSupportedAssociationTypes(), true)) {
+ $fmt = 'Unsupported association type (%s)';
+ trigger_error(sprintf($fmt, $assoc_type), E_USER_ERROR);
+ }
+
+ $this->handle = $handle;
+ $this->secret = $secret;
+ $this->issued = $issued;
+ $this->lifetime = $lifetime;
+ $this->assoc_type = $assoc_type;
+ }
+
+ /**
+ * This returns the number of seconds this association is still
+ * valid for, or 0 if the association is no longer valid.
+ *
+ * @return integer $seconds The number of seconds this association
+ * is still valid for, or 0 if the association is no longer valid.
+ */
+ function getExpiresIn($now = null)
+ {
+ if ($now == null) {
+ $now = time();
+ }
+
+ return max(0, $this->issued + $this->lifetime - $now);
+ }
+
+ /**
+ * This checks to see if two {@link Auth_OpenID_Association}
+ * instances represent the same association.
+ *
+ * @return bool $result true if the two instances represent the
+ * same association, false otherwise.
+ */
+ function equal($other)
+ {
+ return ((gettype($this) == gettype($other))
+ && ($this->handle == $other->handle)
+ && ($this->secret == $other->secret)
+ && ($this->issued == $other->issued)
+ && ($this->lifetime == $other->lifetime)
+ && ($this->assoc_type == $other->assoc_type));
+ }
+
+ /**
+ * Convert an association to KV form.
+ *
+ * @return string $result String in KV form suitable for
+ * deserialization by deserialize.
+ */
+ function serialize()
+ {
+ $data = array(
+ 'version' => '2',
+ 'handle' => $this->handle,
+ 'secret' => base64_encode($this->secret),
+ 'issued' => strval(intval($this->issued)),
+ 'lifetime' => strval(intval($this->lifetime)),
+ 'assoc_type' => $this->assoc_type
+ );
+
+ assert(array_keys($data) == $this->assoc_keys);
+
+ return Auth_OpenID_KVForm::fromArray($data, $strict = true);
+ }
+
+ /**
+ * Parse an association as stored by serialize(). This is the
+ * inverse of serialize.
+ *
+ * @param string $assoc_s Association as serialized by serialize()
+ * @return Auth_OpenID_Association $result instance of this class
+ */
+ static function deserialize($class_name, $assoc_s)
+ {
+ $pairs = Auth_OpenID_KVForm::toArray($assoc_s, $strict = true);
+ $keys = array();
+ $values = array();
+ foreach ($pairs as $key => $value) {
+ if (is_array($value)) {
+ list($key, $value) = $value;
+ }
+ $keys[] = $key;
+ $values[] = $value;
+ }
+
+ $class_vars = get_class_vars($class_name);
+ $class_assoc_keys = $class_vars['assoc_keys'];
+
+ sort($keys);
+ sort($class_assoc_keys);
+
+ if ($keys != $class_assoc_keys) {
+ trigger_error('Unexpected key values: ' . var_export($keys, true),
+ E_USER_WARNING);
+ return null;
+ }
+
+ $version = $pairs['version'];
+ $handle = $pairs['handle'];
+ $secret = $pairs['secret'];
+ $issued = $pairs['issued'];
+ $lifetime = $pairs['lifetime'];
+ $assoc_type = $pairs['assoc_type'];
+
+ if ($version != '2') {
+ trigger_error('Unknown version: ' . $version, E_USER_WARNING);
+ return null;
+ }
+
+ $issued = intval($issued);
+ $lifetime = intval($lifetime);
+ $secret = base64_decode($secret);
+
+ return new $class_name(
+ $handle, $secret, $issued, $lifetime, $assoc_type);
+ }
+
+ /**
+ * Generate a signature for a sequence of (key, value) pairs
+ *
+ * @access private
+ * @param array $pairs The pairs to sign, in order. This is an
+ * array of two-tuples.
+ * @return string $signature The binary signature of this sequence
+ * of pairs
+ */
+ function sign($pairs)
+ {
+ $kv = Auth_OpenID_KVForm::fromArray($pairs);
+
+ /* Invalid association types should be caught at constructor */
+ $callback = $this->_macs[$this->assoc_type];
+
+ return call_user_func_array($callback, array($this->secret, $kv));
+ }
+
+ /**
+ * Generate a signature for some fields in a dictionary
+ *
+ * @access private
+ * @param array $fields The fields to sign, in order; this is an
+ * array of strings.
+ * @param array $data Dictionary of values to sign (an array of
+ * string => string pairs).
+ * @return string $signature The signature, base64 encoded
+ */
+ function signMessage($message)
+ {
+ if ($message->hasKey(Auth_OpenID_OPENID_NS, 'sig') ||
+ $message->hasKey(Auth_OpenID_OPENID_NS, 'signed')) {
+ // Already has a sig
+ return null;
+ }
+
+ $extant_handle = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'assoc_handle');
+
+ if ($extant_handle && ($extant_handle != $this->handle)) {
+ // raise ValueError("Message has a different association handle")
+ return null;
+ }
+
+ $signed_message = $message;
+ $signed_message->setArg(Auth_OpenID_OPENID_NS, 'assoc_handle',
+ $this->handle);
+
+ $message_keys = array_keys($signed_message->toPostArgs());
+ $signed_list = array();
+ $signed_prefix = 'openid.';
+
+ foreach ($message_keys as $k) {
+ if (strpos($k, $signed_prefix) === 0) {
+ $signed_list[] = substr($k, strlen($signed_prefix));
+ }
+ }
+
+ $signed_list[] = 'signed';
+ sort($signed_list);
+
+ $signed_message->setArg(Auth_OpenID_OPENID_NS, 'signed',
+ implode(',', $signed_list));
+ $sig = $this->getMessageSignature($signed_message);
+ $signed_message->setArg(Auth_OpenID_OPENID_NS, 'sig', $sig);
+ return $signed_message;
+ }
+
+ /**
+ * Given a {@link Auth_OpenID_Message}, return the key/value pairs
+ * to be signed according to the signed list in the message. If
+ * the message lacks a signed list, return null.
+ *
+ * @access private
+ */
+ function _makePairs($message)
+ {
+ $signed = $message->getArg(Auth_OpenID_OPENID_NS, 'signed');
+ if (!$signed || Auth_OpenID::isFailure($signed)) {
+ // raise ValueError('Message has no signed list: %s' % (message,))
+ return null;
+ }
+
+ $signed_list = explode(',', $signed);
+ $pairs = array();
+ $data = $message->toPostArgs();
+ foreach ($signed_list as $field) {
+ $pairs[] = array($field, Auth_OpenID::arrayGet($data,
+ 'openid.' .
+ $field, ''));
+ }
+ return $pairs;
+ }
+
+ /**
+ * Given an {@link Auth_OpenID_Message}, return the signature for
+ * the signed list in the message.
+ *
+ * @access private
+ */
+ function getMessageSignature($message)
+ {
+ $pairs = $this->_makePairs($message);
+ return base64_encode($this->sign($pairs));
+ }
+
+ /**
+ * Confirm that the signature of these fields matches the
+ * signature contained in the data.
+ *
+ * @access private
+ */
+ function checkMessageSignature($message)
+ {
+ $sig = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'sig');
+
+ if (!$sig || Auth_OpenID::isFailure($sig)) {
+ return false;
+ }
+
+ $calculated_sig = $this->getMessageSignature($message);
+ return Auth_OpenID_CryptUtil::constEq($calculated_sig, $sig);
+ }
+}
+
+function Auth_OpenID_getSecretSize($assoc_type)
+{
+ if ($assoc_type == 'HMAC-SHA1') {
+ return 20;
+ } else if ($assoc_type == 'HMAC-SHA256') {
+ return 32;
+ } else {
+ return null;
+ }
+}
+
+function Auth_OpenID_getAllAssociationTypes()
+{
+ return array('HMAC-SHA1', 'HMAC-SHA256');
+}
+
+function Auth_OpenID_getSupportedAssociationTypes()
+{
+ $a = array('HMAC-SHA1');
+
+ if (Auth_OpenID_HMACSHA256_SUPPORTED) {
+ $a[] = 'HMAC-SHA256';
+ }
+
+ return $a;
+}
+
+function Auth_OpenID_getSessionTypes($assoc_type)
+{
+ $assoc_to_session = array(
+ 'HMAC-SHA1' => array('DH-SHA1', 'no-encryption'));
+
+ if (Auth_OpenID_HMACSHA256_SUPPORTED) {
+ $assoc_to_session['HMAC-SHA256'] =
+ array('DH-SHA256', 'no-encryption');
+ }
+
+ return Auth_OpenID::arrayGet($assoc_to_session, $assoc_type, array());
+}
+
+function Auth_OpenID_checkSessionType($assoc_type, $session_type)
+{
+ if (!in_array($session_type,
+ Auth_OpenID_getSessionTypes($assoc_type))) {
+ return false;
+ }
+
+ return true;
+}
+
+function Auth_OpenID_getDefaultAssociationOrder()
+{
+ $order = array();
+
+ if (!Auth_OpenID_noMathSupport()) {
+ $order[] = array('HMAC-SHA1', 'DH-SHA1');
+
+ if (Auth_OpenID_HMACSHA256_SUPPORTED) {
+ $order[] = array('HMAC-SHA256', 'DH-SHA256');
+ }
+ }
+
+ $order[] = array('HMAC-SHA1', 'no-encryption');
+
+ if (Auth_OpenID_HMACSHA256_SUPPORTED) {
+ $order[] = array('HMAC-SHA256', 'no-encryption');
+ }
+
+ return $order;
+}
+
+function Auth_OpenID_getOnlyEncryptedOrder()
+{
+ $result = array();
+
+ foreach (Auth_OpenID_getDefaultAssociationOrder() as $pair) {
+ list($assoc, $session) = $pair;
+
+ if ($session != 'no-encryption') {
+ if (Auth_OpenID_HMACSHA256_SUPPORTED &&
+ ($assoc == 'HMAC-SHA256')) {
+ $result[] = $pair;
+ } else if ($assoc != 'HMAC-SHA256') {
+ $result[] = $pair;
+ }
+ }
+ }
+
+ return $result;
+}
+
+function Auth_OpenID_getDefaultNegotiator()
+{
+ return new Auth_OpenID_SessionNegotiator(
+ Auth_OpenID_getDefaultAssociationOrder());
+}
+
+function Auth_OpenID_getEncryptedNegotiator()
+{
+ return new Auth_OpenID_SessionNegotiator(
+ Auth_OpenID_getOnlyEncryptedOrder());
+}
+
+/**
+ * A session negotiator controls the allowed and preferred association
+ * types and association session types. Both the {@link
+ * Auth_OpenID_Consumer} and {@link Auth_OpenID_Server} use
+ * negotiators when creating associations.
+ *
+ * You can create and use negotiators if you:
+
+ * - Do not want to do Diffie-Hellman key exchange because you use
+ * transport-layer encryption (e.g. SSL)
+ *
+ * - Want to use only SHA-256 associations
+ *
+ * - Do not want to support plain-text associations over a non-secure
+ * channel
+ *
+ * It is up to you to set a policy for what kinds of associations to
+ * accept. By default, the library will make any kind of association
+ * that is allowed in the OpenID 2.0 specification.
+ *
+ * Use of negotiators in the library
+ * =================================
+ *
+ * When a consumer makes an association request, it calls {@link
+ * getAllowedType} to get the preferred association type and
+ * association session type.
+ *
+ * The server gets a request for a particular association/session type
+ * and calls {@link isAllowed} to determine if it should create an
+ * association. If it is supported, negotiation is complete. If it is
+ * not, the server calls {@link getAllowedType} to get an allowed
+ * association type to return to the consumer.
+ *
+ * If the consumer gets an error response indicating that the
+ * requested association/session type is not supported by the server
+ * that contains an assocation/session type to try, it calls {@link
+ * isAllowed} to determine if it should try again with the given
+ * combination of association/session type.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_SessionNegotiator {
+ function Auth_OpenID_SessionNegotiator($allowed_types)
+ {
+ $this->allowed_types = array();
+ $this->setAllowedTypes($allowed_types);
+ }
+
+ /**
+ * Set the allowed association types, checking to make sure each
+ * combination is valid.
+ *
+ * @access private
+ */
+ function setAllowedTypes($allowed_types)
+ {
+ foreach ($allowed_types as $pair) {
+ list($assoc_type, $session_type) = $pair;
+ if (!Auth_OpenID_checkSessionType($assoc_type, $session_type)) {
+ return false;
+ }
+ }
+
+ $this->allowed_types = $allowed_types;
+ return true;
+ }
+
+ /**
+ * Add an association type and session type to the allowed types
+ * list. The assocation/session pairs are tried in the order that
+ * they are added.
+ *
+ * @access private
+ */
+ function addAllowedType($assoc_type, $session_type = null)
+ {
+ if ($this->allowed_types === null) {
+ $this->allowed_types = array();
+ }
+
+ if ($session_type === null) {
+ $available = Auth_OpenID_getSessionTypes($assoc_type);
+
+ if (!$available) {
+ return false;
+ }
+
+ foreach ($available as $session_type) {
+ $this->addAllowedType($assoc_type, $session_type);
+ }
+ } else {
+ if (Auth_OpenID_checkSessionType($assoc_type, $session_type)) {
+ $this->allowed_types[] = array($assoc_type, $session_type);
+ } else {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ // Is this combination of association type and session type allowed?
+ function isAllowed($assoc_type, $session_type)
+ {
+ $assoc_good = in_array(array($assoc_type, $session_type),
+ $this->allowed_types);
+
+ $matches = in_array($session_type,
+ Auth_OpenID_getSessionTypes($assoc_type));
+
+ return ($assoc_good && $matches);
+ }
+
+ /**
+ * Get a pair of assocation type and session type that are
+ * supported.
+ */
+ function getAllowedType()
+ {
+ if (!$this->allowed_types) {
+ return array(null, null);
+ }
+
+ return $this->allowed_types[0];
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/BigMath.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/BigMath.php
new file mode 100644
index 000000000..58b46bf27
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/BigMath.php
@@ -0,0 +1,451 @@
+<?php
+
+/**
+ * BigMath: A math library wrapper that abstracts out the underlying
+ * long integer library.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @access private
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Needed for random number generation
+ */
+require_once 'Auth/OpenID/CryptUtil.php';
+
+/**
+ * Need Auth_OpenID::bytes().
+ */
+require_once 'Auth/OpenID.php';
+
+/**
+ * The superclass of all big-integer math implementations
+ * @access private
+ * @package OpenID
+ */
+class Auth_OpenID_MathLibrary {
+ /**
+ * Given a long integer, returns the number converted to a binary
+ * string. This function accepts long integer values of arbitrary
+ * magnitude and uses the local large-number math library when
+ * available.
+ *
+ * @param integer $long The long number (can be a normal PHP
+ * integer or a number created by one of the available long number
+ * libraries)
+ * @return string $binary The binary version of $long
+ */
+ function longToBinary($long)
+ {
+ $cmp = $this->cmp($long, 0);
+ if ($cmp < 0) {
+ $msg = __FUNCTION__ . " takes only positive integers.";
+ trigger_error($msg, E_USER_ERROR);
+ return null;
+ }
+
+ if ($cmp == 0) {
+ return "\x00";
+ }
+
+ $bytes = array();
+
+ while ($this->cmp($long, 0) > 0) {
+ array_unshift($bytes, $this->mod($long, 256));
+ $long = $this->div($long, pow(2, 8));
+ }
+
+ if ($bytes && ($bytes[0] > 127)) {
+ array_unshift($bytes, 0);
+ }
+
+ $string = '';
+ foreach ($bytes as $byte) {
+ $string .= pack('C', $byte);
+ }
+
+ return $string;
+ }
+
+ /**
+ * Given a binary string, returns the binary string converted to a
+ * long number.
+ *
+ * @param string $binary The binary version of a long number,
+ * probably as a result of calling longToBinary
+ * @return integer $long The long number equivalent of the binary
+ * string $str
+ */
+ function binaryToLong($str)
+ {
+ if ($str === null) {
+ return null;
+ }
+
+ // Use array_merge to return a zero-indexed array instead of a
+ // one-indexed array.
+ $bytes = array_merge(unpack('C*', $str));
+
+ $n = $this->init(0);
+
+ if ($bytes && ($bytes[0] > 127)) {
+ trigger_error("bytesToNum works only for positive integers.",
+ E_USER_WARNING);
+ return null;
+ }
+
+ foreach ($bytes as $byte) {
+ $n = $this->mul($n, pow(2, 8));
+ $n = $this->add($n, $byte);
+ }
+
+ return $n;
+ }
+
+ function base64ToLong($str)
+ {
+ $b64 = base64_decode($str);
+
+ if ($b64 === false) {
+ return false;
+ }
+
+ return $this->binaryToLong($b64);
+ }
+
+ function longToBase64($str)
+ {
+ return base64_encode($this->longToBinary($str));
+ }
+
+ /**
+ * Returns a random number in the specified range. This function
+ * accepts $start, $stop, and $step values of arbitrary magnitude
+ * and will utilize the local large-number math library when
+ * available.
+ *
+ * @param integer $start The start of the range, or the minimum
+ * random number to return
+ * @param integer $stop The end of the range, or the maximum
+ * random number to return
+ * @param integer $step The step size, such that $result - ($step
+ * * N) = $start for some N
+ * @return integer $result The resulting randomly-generated number
+ */
+ function rand($stop)
+ {
+ static $duplicate_cache = array();
+
+ // Used as the key for the duplicate cache
+ $rbytes = $this->longToBinary($stop);
+
+ if (array_key_exists($rbytes, $duplicate_cache)) {
+ list($duplicate, $nbytes) = $duplicate_cache[$rbytes];
+ } else {
+ if ($rbytes[0] == "\x00") {
+ $nbytes = Auth_OpenID::bytes($rbytes) - 1;
+ } else {
+ $nbytes = Auth_OpenID::bytes($rbytes);
+ }
+
+ $mxrand = $this->pow(256, $nbytes);
+
+ // If we get a number less than this, then it is in the
+ // duplicated range.
+ $duplicate = $this->mod($mxrand, $stop);
+
+ if (count($duplicate_cache) > 10) {
+ $duplicate_cache = array();
+ }
+
+ $duplicate_cache[$rbytes] = array($duplicate, $nbytes);
+ }
+
+ do {
+ $bytes = "\x00" . Auth_OpenID_CryptUtil::getBytes($nbytes);
+ $n = $this->binaryToLong($bytes);
+ // Keep looping if this value is in the low duplicated range
+ } while ($this->cmp($n, $duplicate) < 0);
+
+ return $this->mod($n, $stop);
+ }
+}
+
+/**
+ * Exposes BCmath math library functionality.
+ *
+ * {@link Auth_OpenID_BcMathWrapper} wraps the functionality provided
+ * by the BCMath extension.
+ *
+ * @access private
+ * @package OpenID
+ */
+class Auth_OpenID_BcMathWrapper extends Auth_OpenID_MathLibrary{
+ var $type = 'bcmath';
+
+ function add($x, $y)
+ {
+ return bcadd($x, $y);
+ }
+
+ function sub($x, $y)
+ {
+ return bcsub($x, $y);
+ }
+
+ function pow($base, $exponent)
+ {
+ return bcpow($base, $exponent);
+ }
+
+ function cmp($x, $y)
+ {
+ return bccomp($x, $y);
+ }
+
+ function init($number, $base = 10)
+ {
+ return $number;
+ }
+
+ function mod($base, $modulus)
+ {
+ return bcmod($base, $modulus);
+ }
+
+ function mul($x, $y)
+ {
+ return bcmul($x, $y);
+ }
+
+ function div($x, $y)
+ {
+ return bcdiv($x, $y);
+ }
+
+ /**
+ * Same as bcpowmod when bcpowmod is missing
+ *
+ * @access private
+ */
+ function _powmod($base, $exponent, $modulus)
+ {
+ $square = $this->mod($base, $modulus);
+ $result = 1;
+ while($this->cmp($exponent, 0) > 0) {
+ if ($this->mod($exponent, 2)) {
+ $result = $this->mod($this->mul($result, $square), $modulus);
+ }
+ $square = $this->mod($this->mul($square, $square), $modulus);
+ $exponent = $this->div($exponent, 2);
+ }
+ return $result;
+ }
+
+ function powmod($base, $exponent, $modulus)
+ {
+ if (function_exists('bcpowmod')) {
+ return bcpowmod($base, $exponent, $modulus);
+ } else {
+ return $this->_powmod($base, $exponent, $modulus);
+ }
+ }
+
+ function toString($num)
+ {
+ return $num;
+ }
+}
+
+/**
+ * Exposes GMP math library functionality.
+ *
+ * {@link Auth_OpenID_GmpMathWrapper} wraps the functionality provided
+ * by the GMP extension.
+ *
+ * @access private
+ * @package OpenID
+ */
+class Auth_OpenID_GmpMathWrapper extends Auth_OpenID_MathLibrary{
+ var $type = 'gmp';
+
+ function add($x, $y)
+ {
+ return gmp_add($x, $y);
+ }
+
+ function sub($x, $y)
+ {
+ return gmp_sub($x, $y);
+ }
+
+ function pow($base, $exponent)
+ {
+ return gmp_pow($base, $exponent);
+ }
+
+ function cmp($x, $y)
+ {
+ return gmp_cmp($x, $y);
+ }
+
+ function init($number, $base = 10)
+ {
+ return gmp_init($number, $base);
+ }
+
+ function mod($base, $modulus)
+ {
+ return gmp_mod($base, $modulus);
+ }
+
+ function mul($x, $y)
+ {
+ return gmp_mul($x, $y);
+ }
+
+ function div($x, $y)
+ {
+ return gmp_div_q($x, $y);
+ }
+
+ function powmod($base, $exponent, $modulus)
+ {
+ return gmp_powm($base, $exponent, $modulus);
+ }
+
+ function toString($num)
+ {
+ return gmp_strval($num);
+ }
+}
+
+/**
+ * Define the supported extensions. An extension array has keys
+ * 'modules', 'extension', and 'class'. 'modules' is an array of PHP
+ * module names which the loading code will attempt to load. These
+ * values will be suffixed with a library file extension (e.g. ".so").
+ * 'extension' is the name of a PHP extension which will be tested
+ * before 'modules' are loaded. 'class' is the string name of a
+ * {@link Auth_OpenID_MathWrapper} subclass which should be
+ * instantiated if a given extension is present.
+ *
+ * You can define new math library implementations and add them to
+ * this array.
+ */
+function Auth_OpenID_math_extensions()
+{
+ $result = array();
+
+ if (!defined('Auth_OpenID_BUGGY_GMP')) {
+ $result[] =
+ array('modules' => array('gmp', 'php_gmp'),
+ 'extension' => 'gmp',
+ 'class' => 'Auth_OpenID_GmpMathWrapper');
+ }
+
+ $result[] = array('modules' => array('bcmath', 'php_bcmath'),
+ 'extension' => 'bcmath',
+ 'class' => 'Auth_OpenID_BcMathWrapper');
+
+ return $result;
+}
+
+/**
+ * Detect which (if any) math library is available
+ */
+function Auth_OpenID_detectMathLibrary($exts)
+{
+ $loaded = false;
+
+ foreach ($exts as $extension) {
+ if (extension_loaded($extension['extension'])) {
+ return $extension;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * {@link Auth_OpenID_getMathLib} checks for the presence of long
+ * number extension modules and returns an instance of
+ * {@link Auth_OpenID_MathWrapper} which exposes the module's
+ * functionality.
+ *
+ * Checks for the existence of an extension module described by the
+ * result of {@link Auth_OpenID_math_extensions()} and returns an
+ * instance of a wrapper for that extension module. If no extension
+ * module is found, an instance of {@link Auth_OpenID_MathWrapper} is
+ * returned, which wraps the native PHP integer implementation. The
+ * proper calling convention for this method is $lib =
+ * Auth_OpenID_getMathLib().
+ *
+ * This function checks for the existence of specific long number
+ * implementations in the following order: GMP followed by BCmath.
+ *
+ * @return Auth_OpenID_MathWrapper $instance An instance of
+ * {@link Auth_OpenID_MathWrapper} or one of its subclasses
+ *
+ * @package OpenID
+ */
+function Auth_OpenID_getMathLib()
+{
+ // The instance of Auth_OpenID_MathWrapper that we choose to
+ // supply will be stored here, so that subseqent calls to this
+ // method will return a reference to the same object.
+ static $lib = null;
+
+ if (isset($lib)) {
+ return $lib;
+ }
+
+ if (Auth_OpenID_noMathSupport()) {
+ $null = null;
+ return $null;
+ }
+
+ // If this method has not been called before, look at
+ // Auth_OpenID_math_extensions and try to find an extension that
+ // works.
+ $ext = Auth_OpenID_detectMathLibrary(Auth_OpenID_math_extensions());
+ if ($ext === false) {
+ $tried = array();
+ foreach (Auth_OpenID_math_extensions() as $extinfo) {
+ $tried[] = $extinfo['extension'];
+ }
+ $triedstr = implode(", ", $tried);
+
+ Auth_OpenID_setNoMathSupport();
+
+ $result = null;
+ return $result;
+ }
+
+ // Instantiate a new wrapper
+ $class = $ext['class'];
+ $lib = new $class();
+
+ return $lib;
+}
+
+function Auth_OpenID_setNoMathSupport()
+{
+ if (!defined('Auth_OpenID_NO_MATH_SUPPORT')) {
+ define('Auth_OpenID_NO_MATH_SUPPORT', true);
+ }
+}
+
+function Auth_OpenID_noMathSupport()
+{
+ return defined('Auth_OpenID_NO_MATH_SUPPORT');
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/Consumer.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/Consumer.php
new file mode 100644
index 000000000..e480b86f2
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/Consumer.php
@@ -0,0 +1,2234 @@
+<?php
+
+/**
+ * This module documents the main interface with the OpenID consumer
+ * library. The only part of the library which has to be used and
+ * isn't documented in full here is the store required to create an
+ * Auth_OpenID_Consumer instance. More on the abstract store type and
+ * concrete implementations of it that are provided in the
+ * documentation for the Auth_OpenID_Consumer constructor.
+ *
+ * OVERVIEW
+ *
+ * The OpenID identity verification process most commonly uses the
+ * following steps, as visible to the user of this library:
+ *
+ * 1. The user enters their OpenID into a field on the consumer's
+ * site, and hits a login button.
+ * 2. The consumer site discovers the user's OpenID server using the
+ * YADIS protocol.
+ * 3. The consumer site sends the browser a redirect to the identity
+ * server. This is the authentication request as described in
+ * the OpenID specification.
+ * 4. The identity server's site sends the browser a redirect back
+ * to the consumer site. This redirect contains the server's
+ * response to the authentication request.
+ *
+ * The most important part of the flow to note is the consumer's site
+ * must handle two separate HTTP requests in order to perform the full
+ * identity check.
+ *
+ * LIBRARY DESIGN
+ *
+ * This consumer library is designed with that flow in mind. The goal
+ * is to make it as easy as possible to perform the above steps
+ * securely.
+ *
+ * At a high level, there are two important parts in the consumer
+ * library. The first important part is this module, which contains
+ * the interface to actually use this library. The second is the
+ * Auth_OpenID_Interface class, which describes the interface to use
+ * if you need to create a custom method for storing the state this
+ * library needs to maintain between requests.
+ *
+ * In general, the second part is less important for users of the
+ * library to know about, as several implementations are provided
+ * which cover a wide variety of situations in which consumers may use
+ * the library.
+ *
+ * This module contains a class, Auth_OpenID_Consumer, with methods
+ * corresponding to the actions necessary in each of steps 2, 3, and 4
+ * described in the overview. Use of this library should be as easy
+ * as creating an Auth_OpenID_Consumer instance and calling the
+ * methods appropriate for the action the site wants to take.
+ *
+ * STORES AND DUMB MODE
+ *
+ * OpenID is a protocol that works best when the consumer site is able
+ * to store some state. This is the normal mode of operation for the
+ * protocol, and is sometimes referred to as smart mode. There is
+ * also a fallback mode, known as dumb mode, which is available when
+ * the consumer site is not able to store state. This mode should be
+ * avoided when possible, as it leaves the implementation more
+ * vulnerable to replay attacks.
+ *
+ * The mode the library works in for normal operation is determined by
+ * the store that it is given. The store is an abstraction that
+ * handles the data that the consumer needs to manage between http
+ * requests in order to operate efficiently and securely.
+ *
+ * Several store implementation are provided, and the interface is
+ * fully documented so that custom stores can be used as well. See
+ * the documentation for the Auth_OpenID_Consumer class for more
+ * information on the interface for stores. The implementations that
+ * are provided allow the consumer site to store the necessary data in
+ * several different ways, including several SQL databases and normal
+ * files on disk.
+ *
+ * There is an additional concrete store provided that puts the system
+ * in dumb mode. This is not recommended, as it removes the library's
+ * ability to stop replay attacks reliably. It still uses time-based
+ * checking to make replay attacks only possible within a small
+ * window, but they remain possible within that window. This store
+ * should only be used if the consumer site has no way to retain data
+ * between requests at all.
+ *
+ * IMMEDIATE MODE
+ *
+ * In the flow described above, the user may need to confirm to the
+ * lidentity server that it's ok to authorize his or her identity.
+ * The server may draw pages asking for information from the user
+ * before it redirects the browser back to the consumer's site. This
+ * is generally transparent to the consumer site, so it is typically
+ * ignored as an implementation detail.
+ *
+ * There can be times, however, where the consumer site wants to get a
+ * response immediately. When this is the case, the consumer can put
+ * the library in immediate mode. In immediate mode, there is an
+ * extra response possible from the server, which is essentially the
+ * server reporting that it doesn't have enough information to answer
+ * the question yet.
+ *
+ * USING THIS LIBRARY
+ *
+ * Integrating this library into an application is usually a
+ * relatively straightforward process. The process should basically
+ * follow this plan:
+ *
+ * Add an OpenID login field somewhere on your site. When an OpenID
+ * is entered in that field and the form is submitted, it should make
+ * a request to the your site which includes that OpenID URL.
+ *
+ * First, the application should instantiate the Auth_OpenID_Consumer
+ * class using the store of choice (Auth_OpenID_FileStore or one of
+ * the SQL-based stores). If the application has a custom
+ * session-management implementation, an object implementing the
+ * {@link Auth_Yadis_PHPSession} interface should be passed as the
+ * second parameter. Otherwise, the default uses $_SESSION.
+ *
+ * Next, the application should call the Auth_OpenID_Consumer object's
+ * 'begin' method. This method takes the OpenID URL. The 'begin'
+ * method returns an Auth_OpenID_AuthRequest object.
+ *
+ * Next, the application should call the 'redirectURL' method of the
+ * Auth_OpenID_AuthRequest object. The 'return_to' URL parameter is
+ * the URL that the OpenID server will send the user back to after
+ * attempting to verify his or her identity. The 'trust_root' is the
+ * URL (or URL pattern) that identifies your web site to the user when
+ * he or she is authorizing it. Send a redirect to the resulting URL
+ * to the user's browser.
+ *
+ * That's the first half of the authentication process. The second
+ * half of the process is done after the user's ID server sends the
+ * user's browser a redirect back to your site to complete their
+ * login.
+ *
+ * When that happens, the user will contact your site at the URL given
+ * as the 'return_to' URL to the Auth_OpenID_AuthRequest::redirectURL
+ * call made above. The request will have several query parameters
+ * added to the URL by the identity server as the information
+ * necessary to finish the request.
+ *
+ * Lastly, instantiate an Auth_OpenID_Consumer instance as above and
+ * call its 'complete' method, passing in all the received query
+ * arguments.
+ *
+ * There are multiple possible return types possible from that
+ * method. These indicate the whether or not the login was successful,
+ * and include any additional information appropriate for their type.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Require utility classes and functions for the consumer.
+ */
+require_once "Auth/OpenID.php";
+require_once "Auth/OpenID/Message.php";
+require_once "Auth/OpenID/HMAC.php";
+require_once "Auth/OpenID/Association.php";
+require_once "Auth/OpenID/CryptUtil.php";
+require_once "Auth/OpenID/DiffieHellman.php";
+require_once "Auth/OpenID/KVForm.php";
+require_once "Auth/OpenID/Nonce.php";
+require_once "Auth/OpenID/Discover.php";
+require_once "Auth/OpenID/URINorm.php";
+require_once "Auth/Yadis/Manager.php";
+require_once "Auth/Yadis/XRI.php";
+
+/**
+ * This is the status code returned when the complete method returns
+ * successfully.
+ */
+define('Auth_OpenID_SUCCESS', 'success');
+
+/**
+ * Status to indicate cancellation of OpenID authentication.
+ */
+define('Auth_OpenID_CANCEL', 'cancel');
+
+/**
+ * This is the status code completeAuth returns when the value it
+ * received indicated an invalid login.
+ */
+define('Auth_OpenID_FAILURE', 'failure');
+
+/**
+ * This is the status code completeAuth returns when the
+ * {@link Auth_OpenID_Consumer} instance is in immediate mode, and the
+ * identity server sends back a URL to send the user to to complete his
+ * or her login.
+ */
+define('Auth_OpenID_SETUP_NEEDED', 'setup needed');
+
+/**
+ * This is the status code beginAuth returns when the page fetched
+ * from the entered OpenID URL doesn't contain the necessary link tags
+ * to function as an identity page.
+ */
+define('Auth_OpenID_PARSE_ERROR', 'parse error');
+
+/**
+ * An OpenID consumer implementation that performs discovery and does
+ * session management. See the Consumer.php file documentation for
+ * more information.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_Consumer {
+
+ /**
+ * @access private
+ */
+ var $discoverMethod = 'Auth_OpenID_discover';
+
+ /**
+ * @access private
+ */
+ var $session_key_prefix = "_openid_consumer_";
+
+ /**
+ * @access private
+ */
+ var $_token_suffix = "last_token";
+
+ /**
+ * Initialize a Consumer instance.
+ *
+ * You should create a new instance of the Consumer object with
+ * every HTTP request that handles OpenID transactions.
+ *
+ * @param Auth_OpenID_OpenIDStore $store This must be an object
+ * that implements the interface in {@link
+ * Auth_OpenID_OpenIDStore}. Several concrete implementations are
+ * provided, to cover most common use cases. For stores backed by
+ * MySQL, PostgreSQL, or SQLite, see the {@link
+ * Auth_OpenID_SQLStore} class and its sublcasses. For a
+ * filesystem-backed store, see the {@link Auth_OpenID_FileStore}
+ * module. As a last resort, if it isn't possible for the server
+ * to store state at all, an instance of {@link
+ * Auth_OpenID_DumbStore} can be used.
+ *
+ * @param mixed $session An object which implements the interface
+ * of the {@link Auth_Yadis_PHPSession} class. Particularly, this
+ * object is expected to have these methods: get($key), set($key),
+ * $value), and del($key). This defaults to a session object
+ * which wraps PHP's native session machinery. You should only
+ * need to pass something here if you have your own sessioning
+ * implementation.
+ *
+ * @param str $consumer_cls The name of the class to instantiate
+ * when creating the internal consumer object. This is used for
+ * testing.
+ */
+ function Auth_OpenID_Consumer($store, $session = null,
+ $consumer_cls = null)
+ {
+ if ($session === null) {
+ $session = new Auth_Yadis_PHPSession();
+ }
+
+ $this->session = $session;
+
+ if ($consumer_cls !== null) {
+ $this->consumer = new $consumer_cls($store);
+ } else {
+ $this->consumer = new Auth_OpenID_GenericConsumer($store);
+ }
+
+ $this->_token_key = $this->session_key_prefix . $this->_token_suffix;
+ }
+
+ /**
+ * Used in testing to define the discovery mechanism.
+ *
+ * @access private
+ */
+ function getDiscoveryObject($session, $openid_url,
+ $session_key_prefix)
+ {
+ return new Auth_Yadis_Discovery($session, $openid_url,
+ $session_key_prefix);
+ }
+
+ /**
+ * Start the OpenID authentication process. See steps 1-2 in the
+ * overview at the top of this file.
+ *
+ * @param string $user_url Identity URL given by the user. This
+ * method performs a textual transformation of the URL to try and
+ * make sure it is normalized. For example, a user_url of
+ * example.com will be normalized to http://example.com/
+ * normalizing and resolving any redirects the server might issue.
+ *
+ * @param bool $anonymous True if the OpenID request is to be sent
+ * to the server without any identifier information. Use this
+ * when you want to transport data but don't want to do OpenID
+ * authentication with identifiers.
+ *
+ * @return Auth_OpenID_AuthRequest $auth_request An object
+ * containing the discovered information will be returned, with a
+ * method for building a redirect URL to the server, as described
+ * in step 3 of the overview. This object may also be used to add
+ * extension arguments to the request, using its 'addExtensionArg'
+ * method.
+ */
+ function begin($user_url, $anonymous=false)
+ {
+ $openid_url = $user_url;
+
+ $disco = $this->getDiscoveryObject($this->session,
+ $openid_url,
+ $this->session_key_prefix);
+
+ // Set the 'stale' attribute of the manager. If discovery
+ // fails in a fatal way, the stale flag will cause the manager
+ // to be cleaned up next time discovery is attempted.
+
+ $m = $disco->getManager();
+ $loader = new Auth_Yadis_ManagerLoader();
+
+ if ($m) {
+ if ($m->stale) {
+ $disco->destroyManager();
+ } else {
+ $m->stale = true;
+ $disco->session->set($disco->session_key,
+ serialize($loader->toSession($m)));
+ }
+ }
+
+ $endpoint = $disco->getNextService($this->discoverMethod,
+ $this->consumer->fetcher);
+
+ // Reset the 'stale' attribute of the manager.
+ $m = $disco->getManager();
+ if ($m) {
+ $m->stale = false;
+ $disco->session->set($disco->session_key,
+ serialize($loader->toSession($m)));
+ }
+
+ if ($endpoint === null) {
+ return null;
+ } else {
+ return $this->beginWithoutDiscovery($endpoint,
+ $anonymous);
+ }
+ }
+
+ /**
+ * Start OpenID verification without doing OpenID server
+ * discovery. This method is used internally by Consumer.begin
+ * after discovery is performed, and exists to provide an
+ * interface for library users needing to perform their own
+ * discovery.
+ *
+ * @param Auth_OpenID_ServiceEndpoint $endpoint an OpenID service
+ * endpoint descriptor.
+ *
+ * @param bool anonymous Set to true if you want to perform OpenID
+ * without identifiers.
+ *
+ * @return Auth_OpenID_AuthRequest $auth_request An OpenID
+ * authentication request object.
+ */
+ function beginWithoutDiscovery($endpoint, $anonymous=false)
+ {
+ $loader = new Auth_OpenID_ServiceEndpointLoader();
+ $auth_req = $this->consumer->begin($endpoint);
+ $this->session->set($this->_token_key,
+ $loader->toSession($auth_req->endpoint));
+ if (!$auth_req->setAnonymous($anonymous)) {
+ return new Auth_OpenID_FailureResponse(null,
+ "OpenID 1 requests MUST include the identifier " .
+ "in the request.");
+ }
+ return $auth_req;
+ }
+
+ /**
+ * Called to interpret the server's response to an OpenID
+ * request. It is called in step 4 of the flow described in the
+ * consumer overview.
+ *
+ * @param string $current_url The URL used to invoke the application.
+ * Extract the URL from your application's web
+ * request framework and specify it here to have it checked
+ * against the openid.current_url value in the response. If
+ * the current_url URL check fails, the status of the
+ * completion will be FAILURE.
+ *
+ * @param array $query An array of the query parameters (key =>
+ * value pairs) for this HTTP request. Defaults to null. If
+ * null, the GET or POST data are automatically gotten from the
+ * PHP environment. It is only useful to override $query for
+ * testing.
+ *
+ * @return Auth_OpenID_ConsumerResponse $response A instance of an
+ * Auth_OpenID_ConsumerResponse subclass. The type of response is
+ * indicated by the status attribute, which will be one of
+ * SUCCESS, CANCEL, FAILURE, or SETUP_NEEDED.
+ */
+ function complete($current_url, $query=null)
+ {
+ if ($current_url && !is_string($current_url)) {
+ // This is ugly, but we need to complain loudly when
+ // someone uses the API incorrectly.
+ trigger_error("current_url must be a string; see NEWS file " .
+ "for upgrading notes.",
+ E_USER_ERROR);
+ }
+
+ if ($query === null) {
+ $query = Auth_OpenID::getQuery();
+ }
+
+ $loader = new Auth_OpenID_ServiceEndpointLoader();
+ $endpoint_data = $this->session->get($this->_token_key);
+ $endpoint =
+ $loader->fromSession($endpoint_data);
+
+ $message = Auth_OpenID_Message::fromPostArgs($query);
+ $response = $this->consumer->complete($message, $endpoint,
+ $current_url);
+ $this->session->del($this->_token_key);
+
+ if (in_array($response->status, array(Auth_OpenID_SUCCESS,
+ Auth_OpenID_CANCEL))) {
+ if ($response->identity_url !== null) {
+ $disco = $this->getDiscoveryObject($this->session,
+ $response->identity_url,
+ $this->session_key_prefix);
+ $disco->cleanup(true);
+ }
+ }
+
+ return $response;
+ }
+}
+
+/**
+ * A class implementing HMAC/DH-SHA1 consumer sessions.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_DiffieHellmanSHA1ConsumerSession {
+ var $session_type = 'DH-SHA1';
+ var $hash_func = 'Auth_OpenID_SHA1';
+ var $secret_size = 20;
+ var $allowed_assoc_types = array('HMAC-SHA1');
+
+ function Auth_OpenID_DiffieHellmanSHA1ConsumerSession($dh = null)
+ {
+ if ($dh === null) {
+ $dh = new Auth_OpenID_DiffieHellman();
+ }
+
+ $this->dh = $dh;
+ }
+
+ function getRequest()
+ {
+ $math = Auth_OpenID_getMathLib();
+
+ $cpub = $math->longToBase64($this->dh->public);
+
+ $args = array('dh_consumer_public' => $cpub);
+
+ if (!$this->dh->usingDefaultValues()) {
+ $args = array_merge($args, array(
+ 'dh_modulus' =>
+ $math->longToBase64($this->dh->mod),
+ 'dh_gen' =>
+ $math->longToBase64($this->dh->gen)));
+ }
+
+ return $args;
+ }
+
+ function extractSecret($response)
+ {
+ if (!$response->hasKey(Auth_OpenID_OPENID_NS,
+ 'dh_server_public')) {
+ return null;
+ }
+
+ if (!$response->hasKey(Auth_OpenID_OPENID_NS,
+ 'enc_mac_key')) {
+ return null;
+ }
+
+ $math = Auth_OpenID_getMathLib();
+
+ $spub = $math->base64ToLong($response->getArg(Auth_OpenID_OPENID_NS,
+ 'dh_server_public'));
+ $enc_mac_key = base64_decode($response->getArg(Auth_OpenID_OPENID_NS,
+ 'enc_mac_key'));
+
+ return $this->dh->xorSecret($spub, $enc_mac_key, $this->hash_func);
+ }
+}
+
+/**
+ * A class implementing HMAC/DH-SHA256 consumer sessions.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_DiffieHellmanSHA256ConsumerSession extends
+ Auth_OpenID_DiffieHellmanSHA1ConsumerSession {
+ var $session_type = 'DH-SHA256';
+ var $hash_func = 'Auth_OpenID_SHA256';
+ var $secret_size = 32;
+ var $allowed_assoc_types = array('HMAC-SHA256');
+}
+
+/**
+ * A class implementing plaintext consumer sessions.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_PlainTextConsumerSession {
+ var $session_type = 'no-encryption';
+ var $allowed_assoc_types = array('HMAC-SHA1', 'HMAC-SHA256');
+
+ function getRequest()
+ {
+ return array();
+ }
+
+ function extractSecret($response)
+ {
+ if (!$response->hasKey(Auth_OpenID_OPENID_NS, 'mac_key')) {
+ return null;
+ }
+
+ return base64_decode($response->getArg(Auth_OpenID_OPENID_NS,
+ 'mac_key'));
+ }
+}
+
+/**
+ * Returns available session types.
+ */
+function Auth_OpenID_getAvailableSessionTypes()
+{
+ $types = array(
+ 'no-encryption' => 'Auth_OpenID_PlainTextConsumerSession',
+ 'DH-SHA1' => 'Auth_OpenID_DiffieHellmanSHA1ConsumerSession',
+ 'DH-SHA256' => 'Auth_OpenID_DiffieHellmanSHA256ConsumerSession');
+
+ return $types;
+}
+
+/**
+ * This class is the interface to the OpenID consumer logic.
+ * Instances of it maintain no per-request state, so they can be
+ * reused (or even used by multiple threads concurrently) as needed.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_GenericConsumer {
+ /**
+ * @access private
+ */
+ var $discoverMethod = 'Auth_OpenID_discover';
+
+ /**
+ * This consumer's store object.
+ */
+ var $store;
+
+ /**
+ * @access private
+ */
+ var $_use_assocs;
+
+ /**
+ * @access private
+ */
+ var $openid1_nonce_query_arg_name = 'janrain_nonce';
+
+ /**
+ * Another query parameter that gets added to the return_to for
+ * OpenID 1; if the user's session state is lost, use this claimed
+ * identifier to do discovery when verifying the response.
+ */
+ var $openid1_return_to_identifier_name = 'openid1_claimed_id';
+
+ /**
+ * This method initializes a new {@link Auth_OpenID_Consumer}
+ * instance to access the library.
+ *
+ * @param Auth_OpenID_OpenIDStore $store This must be an object
+ * that implements the interface in {@link Auth_OpenID_OpenIDStore}.
+ * Several concrete implementations are provided, to cover most common use
+ * cases. For stores backed by MySQL, PostgreSQL, or SQLite, see
+ * the {@link Auth_OpenID_SQLStore} class and its sublcasses. For a
+ * filesystem-backed store, see the {@link Auth_OpenID_FileStore} module.
+ * As a last resort, if it isn't possible for the server to store
+ * state at all, an instance of {@link Auth_OpenID_DumbStore} can be used.
+ *
+ * @param bool $immediate This is an optional boolean value. It
+ * controls whether the library uses immediate mode, as explained
+ * in the module description. The default value is False, which
+ * disables immediate mode.
+ */
+ function Auth_OpenID_GenericConsumer($store)
+ {
+ $this->store = $store;
+ $this->negotiator = Auth_OpenID_getDefaultNegotiator();
+ $this->_use_assocs = (is_null($this->store) ? false : true);
+
+ $this->fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
+
+ $this->session_types = Auth_OpenID_getAvailableSessionTypes();
+ }
+
+ /**
+ * Called to begin OpenID authentication using the specified
+ * {@link Auth_OpenID_ServiceEndpoint}.
+ *
+ * @access private
+ */
+ function begin($service_endpoint)
+ {
+ $assoc = $this->_getAssociation($service_endpoint);
+ $r = new Auth_OpenID_AuthRequest($service_endpoint, $assoc);
+ $r->return_to_args[$this->openid1_nonce_query_arg_name] =
+ Auth_OpenID_mkNonce();
+
+ if ($r->message->isOpenID1()) {
+ $r->return_to_args[$this->openid1_return_to_identifier_name] =
+ $r->endpoint->claimed_id;
+ }
+
+ return $r;
+ }
+
+ /**
+ * Given an {@link Auth_OpenID_Message}, {@link
+ * Auth_OpenID_ServiceEndpoint} and optional return_to URL,
+ * complete OpenID authentication.
+ *
+ * @access private
+ */
+ function complete($message, $endpoint, $return_to)
+ {
+ $mode = $message->getArg(Auth_OpenID_OPENID_NS, 'mode',
+ '<no mode set>');
+
+ $mode_methods = array(
+ 'cancel' => '_complete_cancel',
+ 'error' => '_complete_error',
+ 'setup_needed' => '_complete_setup_needed',
+ 'id_res' => '_complete_id_res',
+ );
+
+ $method = Auth_OpenID::arrayGet($mode_methods, $mode,
+ '_completeInvalid');
+
+ return call_user_func_array(array($this, $method),
+ array($message, $endpoint, $return_to));
+ }
+
+ /**
+ * @access private
+ */
+ function _completeInvalid($message, $endpoint, $unused)
+ {
+ $mode = $message->getArg(Auth_OpenID_OPENID_NS, 'mode',
+ '<No mode set>');
+
+ return new Auth_OpenID_FailureResponse($endpoint,
+ sprintf("Invalid openid.mode '%s'", $mode));
+ }
+
+ /**
+ * @access private
+ */
+ function _complete_cancel($message, $endpoint, $unused)
+ {
+ return new Auth_OpenID_CancelResponse($endpoint);
+ }
+
+ /**
+ * @access private
+ */
+ function _complete_error($message, $endpoint, $unused)
+ {
+ $error = $message->getArg(Auth_OpenID_OPENID_NS, 'error');
+ $contact = $message->getArg(Auth_OpenID_OPENID_NS, 'contact');
+ $reference = $message->getArg(Auth_OpenID_OPENID_NS, 'reference');
+
+ return new Auth_OpenID_FailureResponse($endpoint, $error,
+ $contact, $reference);
+ }
+
+ /**
+ * @access private
+ */
+ function _complete_setup_needed($message, $endpoint, $unused)
+ {
+ if (!$message->isOpenID2()) {
+ return $this->_completeInvalid($message, $endpoint);
+ }
+
+ $user_setup_url = $message->getArg(Auth_OpenID_OPENID2_NS,
+ 'user_setup_url');
+ return new Auth_OpenID_SetupNeededResponse($endpoint, $user_setup_url);
+ }
+
+ /**
+ * @access private
+ */
+ function _complete_id_res($message, $endpoint, $return_to)
+ {
+ $user_setup_url = $message->getArg(Auth_OpenID_OPENID1_NS,
+ 'user_setup_url');
+
+ if ($this->_checkSetupNeeded($message)) {
+ return new Auth_OpenID_SetupNeededResponse(
+ $endpoint, $user_setup_url);
+ } else {
+ return $this->_doIdRes($message, $endpoint, $return_to);
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _checkSetupNeeded($message)
+ {
+ // In OpenID 1, we check to see if this is a cancel from
+ // immediate mode by the presence of the user_setup_url
+ // parameter.
+ if ($message->isOpenID1()) {
+ $user_setup_url = $message->getArg(Auth_OpenID_OPENID1_NS,
+ 'user_setup_url');
+ if ($user_setup_url !== null) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @access private
+ */
+ function _doIdRes($message, $endpoint, $return_to)
+ {
+ // Checks for presence of appropriate fields (and checks
+ // signed list fields)
+ $result = $this->_idResCheckForFields($message);
+
+ if (Auth_OpenID::isFailure($result)) {
+ return $result;
+ }
+
+ if (!$this->_checkReturnTo($message, $return_to)) {
+ return new Auth_OpenID_FailureResponse(null,
+ sprintf("return_to does not match return URL. Expected %s, got %s",
+ $return_to,
+ $message->getArg(Auth_OpenID_OPENID_NS, 'return_to')));
+ }
+
+ // Verify discovery information:
+ $result = $this->_verifyDiscoveryResults($message, $endpoint);
+
+ if (Auth_OpenID::isFailure($result)) {
+ return $result;
+ }
+
+ $endpoint = $result;
+
+ $result = $this->_idResCheckSignature($message,
+ $endpoint->server_url);
+
+ if (Auth_OpenID::isFailure($result)) {
+ return $result;
+ }
+
+ $result = $this->_idResCheckNonce($message, $endpoint);
+
+ if (Auth_OpenID::isFailure($result)) {
+ return $result;
+ }
+
+ $signed_list_str = $message->getArg(Auth_OpenID_OPENID_NS, 'signed',
+ Auth_OpenID_NO_DEFAULT);
+ if (Auth_OpenID::isFailure($signed_list_str)) {
+ return $signed_list_str;
+ }
+ $signed_list = explode(',', $signed_list_str);
+
+ $signed_fields = Auth_OpenID::addPrefix($signed_list, "openid.");
+
+ return new Auth_OpenID_SuccessResponse($endpoint, $message,
+ $signed_fields);
+
+ }
+
+ /**
+ * @access private
+ */
+ function _checkReturnTo($message, $return_to)
+ {
+ // Check an OpenID message and its openid.return_to value
+ // against a return_to URL from an application. Return True
+ // on success, False on failure.
+
+ // Check the openid.return_to args against args in the
+ // original message.
+ $result = Auth_OpenID_GenericConsumer::_verifyReturnToArgs(
+ $message->toPostArgs());
+ if (Auth_OpenID::isFailure($result)) {
+ return false;
+ }
+
+ // Check the return_to base URL against the one in the
+ // message.
+ $msg_return_to = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'return_to');
+ if (Auth_OpenID::isFailure($return_to)) {
+ // XXX log me
+ return false;
+ }
+
+ $return_to_parts = parse_url(Auth_OpenID_urinorm($return_to));
+ $msg_return_to_parts = parse_url(Auth_OpenID_urinorm($msg_return_to));
+
+ // If port is absent from both, add it so it's equal in the
+ // check below.
+ if ((!array_key_exists('port', $return_to_parts)) &&
+ (!array_key_exists('port', $msg_return_to_parts))) {
+ $return_to_parts['port'] = null;
+ $msg_return_to_parts['port'] = null;
+ }
+
+ // If path is absent from both, add it so it's equal in the
+ // check below.
+ if ((!array_key_exists('path', $return_to_parts)) &&
+ (!array_key_exists('path', $msg_return_to_parts))) {
+ $return_to_parts['path'] = null;
+ $msg_return_to_parts['path'] = null;
+ }
+
+ // The URL scheme, authority, and path MUST be the same
+ // between the two URLs.
+ foreach (array('scheme', 'host', 'port', 'path') as $component) {
+ // If the url component is absent in either URL, fail.
+ // There should always be a scheme, host, port, and path.
+ if (!array_key_exists($component, $return_to_parts)) {
+ return false;
+ }
+
+ if (!array_key_exists($component, $msg_return_to_parts)) {
+ return false;
+ }
+
+ if (Auth_OpenID::arrayGet($return_to_parts, $component) !==
+ Auth_OpenID::arrayGet($msg_return_to_parts, $component)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @access private
+ */
+ function _verifyReturnToArgs($query)
+ {
+ // Verify that the arguments in the return_to URL are present in this
+ // response.
+
+ $message = Auth_OpenID_Message::fromPostArgs($query);
+ $return_to = $message->getArg(Auth_OpenID_OPENID_NS, 'return_to');
+
+ if (Auth_OpenID::isFailure($return_to)) {
+ return $return_to;
+ }
+ // XXX: this should be checked by _idResCheckForFields
+ if (!$return_to) {
+ return new Auth_OpenID_FailureResponse(null,
+ "Response has no return_to");
+ }
+
+ $parsed_url = parse_url($return_to);
+
+ $q = array();
+ if (array_key_exists('query', $parsed_url)) {
+ $rt_query = $parsed_url['query'];
+ $q = Auth_OpenID::parse_str($rt_query);
+ }
+
+ foreach ($q as $rt_key => $rt_value) {
+ if (!array_key_exists($rt_key, $query)) {
+ return new Auth_OpenID_FailureResponse(null,
+ sprintf("return_to parameter %s absent from query", $rt_key));
+ } else {
+ $value = $query[$rt_key];
+ if ($rt_value != $value) {
+ return new Auth_OpenID_FailureResponse(null,
+ sprintf("parameter %s value %s does not match " .
+ "return_to value %s", $rt_key,
+ $value, $rt_value));
+ }
+ }
+ }
+
+ // Make sure all non-OpenID arguments in the response are also
+ // in the signed return_to.
+ $bare_args = $message->getArgs(Auth_OpenID_BARE_NS);
+ foreach ($bare_args as $key => $value) {
+ if (Auth_OpenID::arrayGet($q, $key) != $value) {
+ return new Auth_OpenID_FailureResponse(null,
+ sprintf("Parameter %s = %s not in return_to URL",
+ $key, $value));
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * @access private
+ */
+ function _idResCheckSignature($message, $server_url)
+ {
+ $assoc_handle = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'assoc_handle');
+ if (Auth_OpenID::isFailure($assoc_handle)) {
+ return $assoc_handle;
+ }
+
+ $assoc = $this->store->getAssociation($server_url, $assoc_handle);
+
+ if ($assoc) {
+ if ($assoc->getExpiresIn() <= 0) {
+ // XXX: It might be a good idea sometimes to re-start
+ // the authentication with a new association. Doing it
+ // automatically opens the possibility for
+ // denial-of-service by a server that just returns
+ // expired associations (or really short-lived
+ // associations)
+ return new Auth_OpenID_FailureResponse(null,
+ 'Association with ' . $server_url . ' expired');
+ }
+
+ if (!$assoc->checkMessageSignature($message)) {
+ // If we get a "bad signature" here, it means that the association
+ // is unrecoverabley corrupted in some way. Any futher attempts
+ // to login with this association is likely to fail. Drop it.
+ $this->store->removeAssociation($server_url, $assoc_handle);
+ return new Auth_OpenID_FailureResponse(null,
+ "Bad signature");
+ }
+ } else {
+ // It's not an association we know about. Stateless mode
+ // is our only possible path for recovery. XXX - async
+ // framework will not want to block on this call to
+ // _checkAuth.
+ if (!$this->_checkAuth($message, $server_url)) {
+ return new Auth_OpenID_FailureResponse(null,
+ "Server denied check_authentication");
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * @access private
+ */
+ function _verifyDiscoveryResults($message, $endpoint=null)
+ {
+ if ($message->getOpenIDNamespace() == Auth_OpenID_OPENID2_NS) {
+ return $this->_verifyDiscoveryResultsOpenID2($message,
+ $endpoint);
+ } else {
+ return $this->_verifyDiscoveryResultsOpenID1($message,
+ $endpoint);
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _verifyDiscoveryResultsOpenID1($message, $endpoint)
+ {
+ $claimed_id = $message->getArg(Auth_OpenID_BARE_NS,
+ $this->openid1_return_to_identifier_name);
+
+ if (($endpoint === null) && ($claimed_id === null)) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ 'When using OpenID 1, the claimed ID must be supplied, ' .
+ 'either by passing it through as a return_to parameter ' .
+ 'or by using a session, and supplied to the GenericConsumer ' .
+ 'as the argument to complete()');
+ } else if (($endpoint !== null) && ($claimed_id === null)) {
+ $claimed_id = $endpoint->claimed_id;
+ }
+
+ $to_match = new Auth_OpenID_ServiceEndpoint();
+ $to_match->type_uris = array(Auth_OpenID_TYPE_1_1);
+ $to_match->local_id = $message->getArg(Auth_OpenID_OPENID1_NS,
+ 'identity');
+
+ // Restore delegate information from the initiation phase
+ $to_match->claimed_id = $claimed_id;
+
+ if ($to_match->local_id === null) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ "Missing required field openid.identity");
+ }
+
+ $to_match_1_0 = $to_match->copy();
+ $to_match_1_0->type_uris = array(Auth_OpenID_TYPE_1_0);
+
+ if ($endpoint !== null) {
+ $result = $this->_verifyDiscoverySingle($endpoint, $to_match);
+
+ if (is_a($result, 'Auth_OpenID_TypeURIMismatch')) {
+ $result = $this->_verifyDiscoverySingle($endpoint,
+ $to_match_1_0);
+ }
+
+ if (Auth_OpenID::isFailure($result)) {
+ // oidutil.log("Error attempting to use stored
+ // discovery information: " + str(e))
+ // oidutil.log("Attempting discovery to
+ // verify endpoint")
+ } else {
+ return $endpoint;
+ }
+ }
+
+ // Endpoint is either bad (failed verification) or None
+ return $this->_discoverAndVerify($to_match->claimed_id,
+ array($to_match, $to_match_1_0));
+ }
+
+ /**
+ * @access private
+ */
+ function _verifyDiscoverySingle($endpoint, $to_match)
+ {
+ // Every type URI that's in the to_match endpoint has to be
+ // present in the discovered endpoint.
+ foreach ($to_match->type_uris as $type_uri) {
+ if (!$endpoint->usesExtension($type_uri)) {
+ return new Auth_OpenID_TypeURIMismatch($endpoint,
+ "Required type ".$type_uri." not present");
+ }
+ }
+
+ // Fragments do not influence discovery, so we can't compare a
+ // claimed identifier with a fragment to discovered
+ // information.
+ list($defragged_claimed_id, $_) =
+ Auth_OpenID::urldefrag($to_match->claimed_id);
+
+ if ($defragged_claimed_id != $endpoint->claimed_id) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ sprintf('Claimed ID does not match (different subjects!), ' .
+ 'Expected %s, got %s', $defragged_claimed_id,
+ $endpoint->claimed_id));
+ }
+
+ if ($to_match->getLocalID() != $endpoint->getLocalID()) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ sprintf('local_id mismatch. Expected %s, got %s',
+ $to_match->getLocalID(), $endpoint->getLocalID()));
+ }
+
+ // If the server URL is None, this must be an OpenID 1
+ // response, because op_endpoint is a required parameter in
+ // OpenID 2. In that case, we don't actually care what the
+ // discovered server_url is, because signature checking or
+ // check_auth should take care of that check for us.
+ if ($to_match->server_url === null) {
+ if ($to_match->preferredNamespace() != Auth_OpenID_OPENID1_NS) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ "Preferred namespace mismatch (bug)");
+ }
+ } else if ($to_match->server_url != $endpoint->server_url) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ sprintf('OP Endpoint mismatch. Expected %s, got %s',
+ $to_match->server_url, $endpoint->server_url));
+ }
+
+ return null;
+ }
+
+ /**
+ * @access private
+ */
+ function _verifyDiscoveryResultsOpenID2($message, $endpoint)
+ {
+ $to_match = new Auth_OpenID_ServiceEndpoint();
+ $to_match->type_uris = array(Auth_OpenID_TYPE_2_0);
+ $to_match->claimed_id = $message->getArg(Auth_OpenID_OPENID2_NS,
+ 'claimed_id');
+
+ $to_match->local_id = $message->getArg(Auth_OpenID_OPENID2_NS,
+ 'identity');
+
+ $to_match->server_url = $message->getArg(Auth_OpenID_OPENID2_NS,
+ 'op_endpoint');
+
+ if ($to_match->server_url === null) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ "OP Endpoint URL missing");
+ }
+
+ // claimed_id and identifier must both be present or both be
+ // absent
+ if (($to_match->claimed_id === null) &&
+ ($to_match->local_id !== null)) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ 'openid.identity is present without openid.claimed_id');
+ }
+
+ if (($to_match->claimed_id !== null) &&
+ ($to_match->local_id === null)) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ 'openid.claimed_id is present without openid.identity');
+ }
+
+ if ($to_match->claimed_id === null) {
+ // This is a response without identifiers, so there's
+ // really no checking that we can do, so return an
+ // endpoint that's for the specified `openid.op_endpoint'
+ return Auth_OpenID_ServiceEndpoint::fromOPEndpointURL(
+ $to_match->server_url);
+ }
+
+ if (!$endpoint) {
+ // The claimed ID doesn't match, so we have to do
+ // discovery again. This covers not using sessions, OP
+ // identifier endpoints and responses that didn't match
+ // the original request.
+ // oidutil.log('No pre-discovered information supplied.')
+ return $this->_discoverAndVerify($to_match->claimed_id,
+ array($to_match));
+ } else {
+
+ // The claimed ID matches, so we use the endpoint that we
+ // discovered in initiation. This should be the most
+ // common case.
+ $result = $this->_verifyDiscoverySingle($endpoint, $to_match);
+
+ if (Auth_OpenID::isFailure($result)) {
+ $endpoint = $this->_discoverAndVerify($to_match->claimed_id,
+ array($to_match));
+ if (Auth_OpenID::isFailure($endpoint)) {
+ return $endpoint;
+ }
+ }
+ }
+
+ // The endpoint we return should have the claimed ID from the
+ // message we just verified, fragment and all.
+ if ($endpoint->claimed_id != $to_match->claimed_id) {
+ $endpoint->claimed_id = $to_match->claimed_id;
+ }
+
+ return $endpoint;
+ }
+
+ /**
+ * @access private
+ */
+ function _discoverAndVerify($claimed_id, $to_match_endpoints)
+ {
+ // oidutil.log('Performing discovery on %s' % (claimed_id,))
+ list($unused, $services) = call_user_func($this->discoverMethod,
+ $claimed_id,
+ $this->fetcher);
+
+ if (!$services) {
+ return new Auth_OpenID_FailureResponse(null,
+ sprintf("No OpenID information found at %s",
+ $claimed_id));
+ }
+
+ return $this->_verifyDiscoveryServices($claimed_id, $services,
+ $to_match_endpoints);
+ }
+
+ /**
+ * @access private
+ */
+ function _verifyDiscoveryServices($claimed_id,
+ $services, $to_match_endpoints)
+ {
+ // Search the services resulting from discovery to find one
+ // that matches the information from the assertion
+
+ foreach ($services as $endpoint) {
+ foreach ($to_match_endpoints as $to_match_endpoint) {
+ $result = $this->_verifyDiscoverySingle($endpoint,
+ $to_match_endpoint);
+
+ if (!Auth_OpenID::isFailure($result)) {
+ // It matches, so discover verification has
+ // succeeded. Return this endpoint.
+ return $endpoint;
+ }
+ }
+ }
+
+ return new Auth_OpenID_FailureResponse(null,
+ sprintf('No matching endpoint found after discovering %s: %s',
+ $claimed_id, $result->message));
+ }
+
+ /**
+ * Extract the nonce from an OpenID 1 response. Return the nonce
+ * from the BARE_NS since we independently check the return_to
+ * arguments are the same as those in the response message.
+ *
+ * See the openid1_nonce_query_arg_name class variable
+ *
+ * @returns $nonce The nonce as a string or null
+ *
+ * @access private
+ */
+ function _idResGetNonceOpenID1($message, $endpoint)
+ {
+ return $message->getArg(Auth_OpenID_BARE_NS,
+ $this->openid1_nonce_query_arg_name);
+ }
+
+ /**
+ * @access private
+ */
+ function _idResCheckNonce($message, $endpoint)
+ {
+ if ($message->isOpenID1()) {
+ // This indicates that the nonce was generated by the consumer
+ $nonce = $this->_idResGetNonceOpenID1($message, $endpoint);
+ $server_url = '';
+ } else {
+ $nonce = $message->getArg(Auth_OpenID_OPENID2_NS,
+ 'response_nonce');
+
+ $server_url = $endpoint->server_url;
+ }
+
+ if ($nonce === null) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ "Nonce missing from response");
+ }
+
+ $parts = Auth_OpenID_splitNonce($nonce);
+
+ if ($parts === null) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ "Malformed nonce in response");
+ }
+
+ list($timestamp, $salt) = $parts;
+
+ if (!$this->store->useNonce($server_url, $timestamp, $salt)) {
+ return new Auth_OpenID_FailureResponse($endpoint,
+ "Nonce already used or out of range");
+ }
+
+ return null;
+ }
+
+ /**
+ * @access private
+ */
+ function _idResCheckForFields($message)
+ {
+ $basic_fields = array('return_to', 'assoc_handle', 'sig', 'signed');
+ $basic_sig_fields = array('return_to', 'identity');
+
+ $require_fields = array(
+ Auth_OpenID_OPENID2_NS => array_merge($basic_fields,
+ array('op_endpoint')),
+
+ Auth_OpenID_OPENID1_NS => array_merge($basic_fields,
+ array('identity'))
+ );
+
+ $require_sigs = array(
+ Auth_OpenID_OPENID2_NS => array_merge($basic_sig_fields,
+ array('response_nonce',
+ 'claimed_id',
+ 'assoc_handle',
+ 'op_endpoint')),
+ Auth_OpenID_OPENID1_NS => array_merge($basic_sig_fields,
+ array('nonce'))
+ );
+
+ foreach ($require_fields[$message->getOpenIDNamespace()] as $field) {
+ if (!$message->hasKey(Auth_OpenID_OPENID_NS, $field)) {
+ return new Auth_OpenID_FailureResponse(null,
+ "Missing required field '".$field."'");
+ }
+ }
+
+ $signed_list_str = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'signed',
+ Auth_OpenID_NO_DEFAULT);
+ if (Auth_OpenID::isFailure($signed_list_str)) {
+ return $signed_list_str;
+ }
+ $signed_list = explode(',', $signed_list_str);
+
+ foreach ($require_sigs[$message->getOpenIDNamespace()] as $field) {
+ // Field is present and not in signed list
+ if ($message->hasKey(Auth_OpenID_OPENID_NS, $field) &&
+ (!in_array($field, $signed_list))) {
+ return new Auth_OpenID_FailureResponse(null,
+ "'".$field."' not signed");
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * @access private
+ */
+ function _checkAuth($message, $server_url)
+ {
+ $request = $this->_createCheckAuthRequest($message);
+ if ($request === null) {
+ return false;
+ }
+
+ $resp_message = $this->_makeKVPost($request, $server_url);
+ if (($resp_message === null) ||
+ (is_a($resp_message, 'Auth_OpenID_ServerErrorContainer'))) {
+ return false;
+ }
+
+ return $this->_processCheckAuthResponse($resp_message, $server_url);
+ }
+
+ /**
+ * @access private
+ */
+ function _createCheckAuthRequest($message)
+ {
+ $signed = $message->getArg(Auth_OpenID_OPENID_NS, 'signed');
+ if ($signed) {
+ foreach (explode(',', $signed) as $k) {
+ $value = $message->getAliasedArg($k);
+ if ($value === null) {
+ return null;
+ }
+ }
+ }
+ $ca_message = $message->copy();
+ $ca_message->setArg(Auth_OpenID_OPENID_NS, 'mode',
+ 'check_authentication');
+ return $ca_message;
+ }
+
+ /**
+ * @access private
+ */
+ function _processCheckAuthResponse($response, $server_url)
+ {
+ $is_valid = $response->getArg(Auth_OpenID_OPENID_NS, 'is_valid',
+ 'false');
+
+ $invalidate_handle = $response->getArg(Auth_OpenID_OPENID_NS,
+ 'invalidate_handle');
+
+ if ($invalidate_handle !== null) {
+ $this->store->removeAssociation($server_url,
+ $invalidate_handle);
+ }
+
+ if ($is_valid == 'true') {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Adapt a POST response to a Message.
+ *
+ * @param $response Result of a POST to an OpenID endpoint.
+ *
+ * @access private
+ */
+ static function _httpResponseToMessage($response, $server_url)
+ {
+ // Should this function be named Message.fromHTTPResponse instead?
+ $response_message = Auth_OpenID_Message::fromKVForm($response->body);
+
+ if ($response->status == 400) {
+ return Auth_OpenID_ServerErrorContainer::fromMessage(
+ $response_message);
+ } else if ($response->status != 200 and $response->status != 206) {
+ return null;
+ }
+
+ return $response_message;
+ }
+
+ /**
+ * @access private
+ */
+ function _makeKVPost($message, $server_url)
+ {
+ $body = $message->toURLEncoded();
+ $resp = $this->fetcher->post($server_url, $body);
+
+ if ($resp === null) {
+ return null;
+ }
+
+ return $this->_httpResponseToMessage($resp, $server_url);
+ }
+
+ /**
+ * @access private
+ */
+ function _getAssociation($endpoint)
+ {
+ if (!$this->_use_assocs) {
+ return null;
+ }
+
+ $assoc = $this->store->getAssociation($endpoint->server_url);
+
+ if (($assoc === null) ||
+ ($assoc->getExpiresIn() <= 0)) {
+
+ $assoc = $this->_negotiateAssociation($endpoint);
+
+ if ($assoc !== null) {
+ $this->store->storeAssociation($endpoint->server_url,
+ $assoc);
+ }
+ }
+
+ return $assoc;
+ }
+
+ /**
+ * Handle ServerErrors resulting from association requests.
+ *
+ * @return $result If server replied with an C{unsupported-type}
+ * error, return a tuple of supported C{association_type},
+ * C{session_type}. Otherwise logs the error and returns null.
+ *
+ * @access private
+ */
+ function _extractSupportedAssociationType($server_error, $endpoint,
+ $assoc_type)
+ {
+ // Any error message whose code is not 'unsupported-type'
+ // should be considered a total failure.
+ if (($server_error->error_code != 'unsupported-type') ||
+ ($server_error->message->isOpenID1())) {
+ return null;
+ }
+
+ // The server didn't like the association/session type that we
+ // sent, and it sent us back a message that might tell us how
+ // to handle it.
+
+ // Extract the session_type and assoc_type from the error
+ // message
+ $assoc_type = $server_error->message->getArg(Auth_OpenID_OPENID_NS,
+ 'assoc_type');
+
+ $session_type = $server_error->message->getArg(Auth_OpenID_OPENID_NS,
+ 'session_type');
+
+ if (($assoc_type === null) || ($session_type === null)) {
+ return null;
+ } else if (!$this->negotiator->isAllowed($assoc_type,
+ $session_type)) {
+ return null;
+ } else {
+ return array($assoc_type, $session_type);
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _negotiateAssociation($endpoint)
+ {
+ // Get our preferred session/association type from the negotiatior.
+ list($assoc_type, $session_type) = $this->negotiator->getAllowedType();
+
+ $assoc = $this->_requestAssociation(
+ $endpoint, $assoc_type, $session_type);
+
+ if (Auth_OpenID::isFailure($assoc)) {
+ return null;
+ }
+
+ if (is_a($assoc, 'Auth_OpenID_ServerErrorContainer')) {
+ $why = $assoc;
+
+ $supportedTypes = $this->_extractSupportedAssociationType(
+ $why, $endpoint, $assoc_type);
+
+ if ($supportedTypes !== null) {
+ list($assoc_type, $session_type) = $supportedTypes;
+
+ // Attempt to create an association from the assoc_type
+ // and session_type that the server told us it
+ // supported.
+ $assoc = $this->_requestAssociation(
+ $endpoint, $assoc_type, $session_type);
+
+ if (is_a($assoc, 'Auth_OpenID_ServerErrorContainer')) {
+ // Do not keep trying, since it rejected the
+ // association type that it told us to use.
+ // oidutil.log('Server %s refused its suggested association
+ // 'type: session_type=%s, assoc_type=%s'
+ // % (endpoint.server_url, session_type,
+ // assoc_type))
+ return null;
+ } else {
+ return $assoc;
+ }
+ } else {
+ return null;
+ }
+ } else {
+ return $assoc;
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _requestAssociation($endpoint, $assoc_type, $session_type)
+ {
+ list($assoc_session, $args) = $this->_createAssociateRequest(
+ $endpoint, $assoc_type, $session_type);
+
+ $response_message = $this->_makeKVPost($args, $endpoint->server_url);
+
+ if ($response_message === null) {
+ // oidutil.log('openid.associate request failed: %s' % (why[0],))
+ return null;
+ } else if (is_a($response_message,
+ 'Auth_OpenID_ServerErrorContainer')) {
+ return $response_message;
+ }
+
+ return $this->_extractAssociation($response_message, $assoc_session);
+ }
+
+ /**
+ * @access private
+ */
+ function _extractAssociation($assoc_response, $assoc_session)
+ {
+ // Extract the common fields from the response, raising an
+ // exception if they are not found
+ $assoc_type = $assoc_response->getArg(
+ Auth_OpenID_OPENID_NS, 'assoc_type',
+ Auth_OpenID_NO_DEFAULT);
+
+ if (Auth_OpenID::isFailure($assoc_type)) {
+ return $assoc_type;
+ }
+
+ $assoc_handle = $assoc_response->getArg(
+ Auth_OpenID_OPENID_NS, 'assoc_handle',
+ Auth_OpenID_NO_DEFAULT);
+
+ if (Auth_OpenID::isFailure($assoc_handle)) {
+ return $assoc_handle;
+ }
+
+ // expires_in is a base-10 string. The Python parsing will
+ // accept literals that have whitespace around them and will
+ // accept negative values. Neither of these are really in-spec,
+ // but we think it's OK to accept them.
+ $expires_in_str = $assoc_response->getArg(
+ Auth_OpenID_OPENID_NS, 'expires_in',
+ Auth_OpenID_NO_DEFAULT);
+
+ if (Auth_OpenID::isFailure($expires_in_str)) {
+ return $expires_in_str;
+ }
+
+ $expires_in = Auth_OpenID::intval($expires_in_str);
+ if ($expires_in === false) {
+
+ $err = sprintf("Could not parse expires_in from association ".
+ "response %s", print_r($assoc_response, true));
+ return new Auth_OpenID_FailureResponse(null, $err);
+ }
+
+ // OpenID 1 has funny association session behaviour.
+ if ($assoc_response->isOpenID1()) {
+ $session_type = $this->_getOpenID1SessionType($assoc_response);
+ } else {
+ $session_type = $assoc_response->getArg(
+ Auth_OpenID_OPENID2_NS, 'session_type',
+ Auth_OpenID_NO_DEFAULT);
+
+ if (Auth_OpenID::isFailure($session_type)) {
+ return $session_type;
+ }
+ }
+
+ // Session type mismatch
+ if ($assoc_session->session_type != $session_type) {
+ if ($assoc_response->isOpenID1() &&
+ ($session_type == 'no-encryption')) {
+ // In OpenID 1, any association request can result in
+ // a 'no-encryption' association response. Setting
+ // assoc_session to a new no-encryption session should
+ // make the rest of this function work properly for
+ // that case.
+ $assoc_session = new Auth_OpenID_PlainTextConsumerSession();
+ } else {
+ // Any other mismatch, regardless of protocol version
+ // results in the failure of the association session
+ // altogether.
+ return null;
+ }
+ }
+
+ // Make sure assoc_type is valid for session_type
+ if (!in_array($assoc_type, $assoc_session->allowed_assoc_types)) {
+ return null;
+ }
+
+ // Delegate to the association session to extract the secret
+ // from the response, however is appropriate for that session
+ // type.
+ $secret = $assoc_session->extractSecret($assoc_response);
+
+ if ($secret === null) {
+ return null;
+ }
+
+ return Auth_OpenID_Association::fromExpiresIn(
+ $expires_in, $assoc_handle, $secret, $assoc_type);
+ }
+
+ /**
+ * @access private
+ */
+ function _createAssociateRequest($endpoint, $assoc_type, $session_type)
+ {
+ if (array_key_exists($session_type, $this->session_types)) {
+ $session_type_class = $this->session_types[$session_type];
+
+ if (is_callable($session_type_class)) {
+ $assoc_session = $session_type_class();
+ } else {
+ $assoc_session = new $session_type_class();
+ }
+ } else {
+ return null;
+ }
+
+ $args = array(
+ 'mode' => 'associate',
+ 'assoc_type' => $assoc_type);
+
+ if (!$endpoint->compatibilityMode()) {
+ $args['ns'] = Auth_OpenID_OPENID2_NS;
+ }
+
+ // Leave out the session type if we're in compatibility mode
+ // *and* it's no-encryption.
+ if ((!$endpoint->compatibilityMode()) ||
+ ($assoc_session->session_type != 'no-encryption')) {
+ $args['session_type'] = $assoc_session->session_type;
+ }
+
+ $args = array_merge($args, $assoc_session->getRequest());
+ $message = Auth_OpenID_Message::fromOpenIDArgs($args);
+ return array($assoc_session, $message);
+ }
+
+ /**
+ * Given an association response message, extract the OpenID 1.X
+ * session type.
+ *
+ * This function mostly takes care of the 'no-encryption' default
+ * behavior in OpenID 1.
+ *
+ * If the association type is plain-text, this function will
+ * return 'no-encryption'
+ *
+ * @access private
+ * @return $typ The association type for this message
+ */
+ function _getOpenID1SessionType($assoc_response)
+ {
+ // If it's an OpenID 1 message, allow session_type to default
+ // to None (which signifies "no-encryption")
+ $session_type = $assoc_response->getArg(Auth_OpenID_OPENID1_NS,
+ 'session_type');
+
+ // Handle the differences between no-encryption association
+ // respones in OpenID 1 and 2:
+
+ // no-encryption is not really a valid session type for OpenID
+ // 1, but we'll accept it anyway, while issuing a warning.
+ if ($session_type == 'no-encryption') {
+ // oidutil.log('WARNING: OpenID server sent "no-encryption"'
+ // 'for OpenID 1.X')
+ } else if (($session_type == '') || ($session_type === null)) {
+ // Missing or empty session type is the way to flag a
+ // 'no-encryption' response. Change the session type to
+ // 'no-encryption' so that it can be handled in the same
+ // way as OpenID 2 'no-encryption' respones.
+ $session_type = 'no-encryption';
+ }
+
+ return $session_type;
+ }
+}
+
+/**
+ * This class represents an authentication request from a consumer to
+ * an OpenID server.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AuthRequest {
+
+ /**
+ * Initialize an authentication request with the specified token,
+ * association, and endpoint.
+ *
+ * Users of this library should not create instances of this
+ * class. Instances of this class are created by the library when
+ * needed.
+ */
+ function Auth_OpenID_AuthRequest($endpoint, $assoc)
+ {
+ $this->assoc = $assoc;
+ $this->endpoint = $endpoint;
+ $this->return_to_args = array();
+ $this->message = new Auth_OpenID_Message(
+ $endpoint->preferredNamespace());
+ $this->_anonymous = false;
+ }
+
+ /**
+ * Add an extension to this checkid request.
+ *
+ * $extension_request: An object that implements the extension
+ * request interface for adding arguments to an OpenID message.
+ */
+ function addExtension($extension_request)
+ {
+ $extension_request->toMessage($this->message);
+ }
+
+ /**
+ * Add an extension argument to this OpenID authentication
+ * request.
+ *
+ * Use caution when adding arguments, because they will be
+ * URL-escaped and appended to the redirect URL, which can easily
+ * get quite long.
+ *
+ * @param string $namespace The namespace for the extension. For
+ * example, the simple registration extension uses the namespace
+ * 'sreg'.
+ *
+ * @param string $key The key within the extension namespace. For
+ * example, the nickname field in the simple registration
+ * extension's key is 'nickname'.
+ *
+ * @param string $value The value to provide to the server for
+ * this argument.
+ */
+ function addExtensionArg($namespace, $key, $value)
+ {
+ return $this->message->setArg($namespace, $key, $value);
+ }
+
+ /**
+ * Set whether this request should be made anonymously. If a
+ * request is anonymous, the identifier will not be sent in the
+ * request. This is only useful if you are making another kind of
+ * request with an extension in this request.
+ *
+ * Anonymous requests are not allowed when the request is made
+ * with OpenID 1.
+ */
+ function setAnonymous($is_anonymous)
+ {
+ if ($is_anonymous && $this->message->isOpenID1()) {
+ return false;
+ } else {
+ $this->_anonymous = $is_anonymous;
+ return true;
+ }
+ }
+
+ /**
+ * Produce a {@link Auth_OpenID_Message} representing this
+ * request.
+ *
+ * @param string $realm The URL (or URL pattern) that identifies
+ * your web site to the user when she is authorizing it.
+ *
+ * @param string $return_to The URL that the OpenID provider will
+ * send the user back to after attempting to verify her identity.
+ *
+ * Not specifying a return_to URL means that the user will not be
+ * returned to the site issuing the request upon its completion.
+ *
+ * @param bool $immediate If true, the OpenID provider is to send
+ * back a response immediately, useful for behind-the-scenes
+ * authentication attempts. Otherwise the OpenID provider may
+ * engage the user before providing a response. This is the
+ * default case, as the user may need to provide credentials or
+ * approve the request before a positive response can be sent.
+ */
+ function getMessage($realm, $return_to=null, $immediate=false)
+ {
+ if ($return_to) {
+ $return_to = Auth_OpenID::appendArgs($return_to,
+ $this->return_to_args);
+ } else if ($immediate) {
+ // raise ValueError(
+ // '"return_to" is mandatory when
+ //using "checkid_immediate"')
+ return new Auth_OpenID_FailureResponse(null,
+ "'return_to' is mandatory when using checkid_immediate");
+ } else if ($this->message->isOpenID1()) {
+ // raise ValueError('"return_to" is
+ // mandatory for OpenID 1 requests')
+ return new Auth_OpenID_FailureResponse(null,
+ "'return_to' is mandatory for OpenID 1 requests");
+ } else if ($this->return_to_args) {
+ // raise ValueError('extra "return_to" arguments
+ // were specified, but no return_to was specified')
+ return new Auth_OpenID_FailureResponse(null,
+ "extra 'return_to' arguments where specified, " .
+ "but no return_to was specified");
+ }
+
+ if ($immediate) {
+ $mode = 'checkid_immediate';
+ } else {
+ $mode = 'checkid_setup';
+ }
+
+ $message = $this->message->copy();
+ if ($message->isOpenID1()) {
+ $realm_key = 'trust_root';
+ } else {
+ $realm_key = 'realm';
+ }
+
+ $message->updateArgs(Auth_OpenID_OPENID_NS,
+ array(
+ $realm_key => $realm,
+ 'mode' => $mode,
+ 'return_to' => $return_to));
+
+ if (!$this->_anonymous) {
+ if ($this->endpoint->isOPIdentifier()) {
+ // This will never happen when we're in compatibility
+ // mode, as long as isOPIdentifier() returns False
+ // whenever preferredNamespace() returns OPENID1_NS.
+ $claimed_id = $request_identity =
+ Auth_OpenID_IDENTIFIER_SELECT;
+ } else {
+ $request_identity = $this->endpoint->getLocalID();
+ $claimed_id = $this->endpoint->claimed_id;
+ }
+
+ // This is true for both OpenID 1 and 2
+ $message->setArg(Auth_OpenID_OPENID_NS, 'identity',
+ $request_identity);
+
+ if ($message->isOpenID2()) {
+ $message->setArg(Auth_OpenID_OPENID2_NS, 'claimed_id',
+ $claimed_id);
+ }
+ }
+
+ if ($this->assoc) {
+ $message->setArg(Auth_OpenID_OPENID_NS, 'assoc_handle',
+ $this->assoc->handle);
+ }
+
+ return $message;
+ }
+
+ function redirectURL($realm, $return_to = null,
+ $immediate = false)
+ {
+ $message = $this->getMessage($realm, $return_to, $immediate);
+
+ if (Auth_OpenID::isFailure($message)) {
+ return $message;
+ }
+
+ return $message->toURL($this->endpoint->server_url);
+ }
+
+ /**
+ * Get html for a form to submit this request to the IDP.
+ *
+ * form_tag_attrs: An array of attributes to be added to the form
+ * tag. 'accept-charset' and 'enctype' have defaults that can be
+ * overridden. If a value is supplied for 'action' or 'method', it
+ * will be replaced.
+ */
+ function formMarkup($realm, $return_to=null, $immediate=false,
+ $form_tag_attrs=null)
+ {
+ $message = $this->getMessage($realm, $return_to, $immediate);
+
+ if (Auth_OpenID::isFailure($message)) {
+ return $message;
+ }
+
+ return $message->toFormMarkup($this->endpoint->server_url,
+ $form_tag_attrs);
+ }
+
+ /**
+ * Get a complete html document that will autosubmit the request
+ * to the IDP.
+ *
+ * Wraps formMarkup. See the documentation for that function.
+ */
+ function htmlMarkup($realm, $return_to=null, $immediate=false,
+ $form_tag_attrs=null)
+ {
+ $form = $this->formMarkup($realm, $return_to, $immediate,
+ $form_tag_attrs);
+
+ if (Auth_OpenID::isFailure($form)) {
+ return $form;
+ }
+ return Auth_OpenID::autoSubmitHTML($form);
+ }
+
+ function shouldSendRedirect()
+ {
+ return $this->endpoint->compatibilityMode();
+ }
+}
+
+/**
+ * The base class for responses from the Auth_OpenID_Consumer.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_ConsumerResponse {
+ var $status = null;
+
+ function setEndpoint($endpoint)
+ {
+ $this->endpoint = $endpoint;
+ if ($endpoint === null) {
+ $this->identity_url = null;
+ } else {
+ $this->identity_url = $endpoint->claimed_id;
+ }
+ }
+
+ /**
+ * Return the display identifier for this response.
+ *
+ * The display identifier is related to the Claimed Identifier, but the
+ * two are not always identical. The display identifier is something the
+ * user should recognize as what they entered, whereas the response's
+ * claimed identifier (in the identity_url attribute) may have extra
+ * information for better persistence.
+ *
+ * URLs will be stripped of their fragments for display. XRIs will
+ * display the human-readable identifier (i-name) instead of the
+ * persistent identifier (i-number).
+ *
+ * Use the display identifier in your user interface. Use
+ * identity_url for querying your database or authorization server.
+ *
+ */
+ function getDisplayIdentifier()
+ {
+ if ($this->endpoint !== null) {
+ return $this->endpoint->getDisplayIdentifier();
+ }
+ return null;
+ }
+}
+
+/**
+ * A response with a status of Auth_OpenID_SUCCESS. Indicates that
+ * this request is a successful acknowledgement from the OpenID server
+ * that the supplied URL is, indeed controlled by the requesting
+ * agent. This has three relevant attributes:
+ *
+ * claimed_id - The identity URL that has been authenticated
+ *
+ * signed_args - The arguments in the server's response that were
+ * signed and verified.
+ *
+ * status - Auth_OpenID_SUCCESS.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_SuccessResponse extends Auth_OpenID_ConsumerResponse {
+ var $status = Auth_OpenID_SUCCESS;
+
+ /**
+ * @access private
+ */
+ function Auth_OpenID_SuccessResponse($endpoint, $message, $signed_args=null)
+ {
+ $this->endpoint = $endpoint;
+ $this->identity_url = $endpoint->claimed_id;
+ $this->signed_args = $signed_args;
+ $this->message = $message;
+
+ if ($this->signed_args === null) {
+ $this->signed_args = array();
+ }
+ }
+
+ /**
+ * Extract signed extension data from the server's response.
+ *
+ * @param string $prefix The extension namespace from which to
+ * extract the extension data.
+ */
+ function extensionResponse($namespace_uri, $require_signed)
+ {
+ if ($require_signed) {
+ return $this->getSignedNS($namespace_uri);
+ } else {
+ return $this->message->getArgs($namespace_uri);
+ }
+ }
+
+ function isOpenID1()
+ {
+ return $this->message->isOpenID1();
+ }
+
+ function isSigned($ns_uri, $ns_key)
+ {
+ // Return whether a particular key is signed, regardless of
+ // its namespace alias
+ return in_array($this->message->getKey($ns_uri, $ns_key),
+ $this->signed_args);
+ }
+
+ function getSigned($ns_uri, $ns_key, $default = null)
+ {
+ // Return the specified signed field if available, otherwise
+ // return default
+ if ($this->isSigned($ns_uri, $ns_key)) {
+ return $this->message->getArg($ns_uri, $ns_key, $default);
+ } else {
+ return $default;
+ }
+ }
+
+ function getSignedNS($ns_uri)
+ {
+ $args = array();
+
+ $msg_args = $this->message->getArgs($ns_uri);
+ if (Auth_OpenID::isFailure($msg_args)) {
+ return null;
+ }
+
+ foreach ($msg_args as $key => $value) {
+ if (!$this->isSigned($ns_uri, $key)) {
+ unset($msg_args[$key]);
+ }
+ }
+
+ return $msg_args;
+ }
+
+ /**
+ * Get the openid.return_to argument from this response.
+ *
+ * This is useful for verifying that this request was initiated by
+ * this consumer.
+ *
+ * @return string $return_to The return_to URL supplied to the
+ * server on the initial request, or null if the response did not
+ * contain an 'openid.return_to' argument.
+ */
+ function getReturnTo()
+ {
+ return $this->getSigned(Auth_OpenID_OPENID_NS, 'return_to');
+ }
+}
+
+/**
+ * A response with a status of Auth_OpenID_FAILURE. Indicates that the
+ * OpenID protocol has failed. This could be locally or remotely
+ * triggered. This has three relevant attributes:
+ *
+ * claimed_id - The identity URL for which authentication was
+ * attempted, if it can be determined. Otherwise, null.
+ *
+ * message - A message indicating why the request failed, if one is
+ * supplied. Otherwise, null.
+ *
+ * status - Auth_OpenID_FAILURE.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_FailureResponse extends Auth_OpenID_ConsumerResponse {
+ var $status = Auth_OpenID_FAILURE;
+
+ function Auth_OpenID_FailureResponse($endpoint, $message = null,
+ $contact = null, $reference = null)
+ {
+ $this->setEndpoint($endpoint);
+ $this->message = $message;
+ $this->contact = $contact;
+ $this->reference = $reference;
+ }
+}
+
+/**
+ * A specific, internal failure used to detect type URI mismatch.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_TypeURIMismatch extends Auth_OpenID_FailureResponse {
+}
+
+/**
+ * Exception that is raised when the server returns a 400 response
+ * code to a direct request.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_ServerErrorContainer {
+ function Auth_OpenID_ServerErrorContainer($error_text,
+ $error_code,
+ $message)
+ {
+ $this->error_text = $error_text;
+ $this->error_code = $error_code;
+ $this->message = $message;
+ }
+
+ /**
+ * @access private
+ */
+ static function fromMessage($message)
+ {
+ $error_text = $message->getArg(
+ Auth_OpenID_OPENID_NS, 'error', '<no error message supplied>');
+ $error_code = $message->getArg(Auth_OpenID_OPENID_NS, 'error_code');
+ return new Auth_OpenID_ServerErrorContainer($error_text,
+ $error_code,
+ $message);
+ }
+}
+
+/**
+ * A response with a status of Auth_OpenID_CANCEL. Indicates that the
+ * user cancelled the OpenID authentication request. This has two
+ * relevant attributes:
+ *
+ * claimed_id - The identity URL for which authentication was
+ * attempted, if it can be determined. Otherwise, null.
+ *
+ * status - Auth_OpenID_SUCCESS.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_CancelResponse extends Auth_OpenID_ConsumerResponse {
+ var $status = Auth_OpenID_CANCEL;
+
+ function Auth_OpenID_CancelResponse($endpoint)
+ {
+ $this->setEndpoint($endpoint);
+ }
+}
+
+/**
+ * A response with a status of Auth_OpenID_SETUP_NEEDED. Indicates
+ * that the request was in immediate mode, and the server is unable to
+ * authenticate the user without further interaction.
+ *
+ * claimed_id - The identity URL for which authentication was
+ * attempted.
+ *
+ * setup_url - A URL that can be used to send the user to the server
+ * to set up for authentication. The user should be redirected in to
+ * the setup_url, either in the current window or in a new browser
+ * window. Null in OpenID 2.
+ *
+ * status - Auth_OpenID_SETUP_NEEDED.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_SetupNeededResponse extends Auth_OpenID_ConsumerResponse {
+ var $status = Auth_OpenID_SETUP_NEEDED;
+
+ function Auth_OpenID_SetupNeededResponse($endpoint,
+ $setup_url = null)
+ {
+ $this->setEndpoint($endpoint);
+ $this->setup_url = $setup_url;
+ }
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/CryptUtil.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/CryptUtil.php
new file mode 100644
index 000000000..3c60cea17
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/CryptUtil.php
@@ -0,0 +1,122 @@
+<?php
+
+/**
+ * CryptUtil: A suite of wrapper utility functions for the OpenID
+ * library.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @access private
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+if (!defined('Auth_OpenID_RAND_SOURCE')) {
+ /**
+ * The filename for a source of random bytes. Define this yourself
+ * if you have a different source of randomness.
+ */
+ define('Auth_OpenID_RAND_SOURCE', '/dev/urandom');
+}
+
+class Auth_OpenID_CryptUtil {
+ /**
+ * Get the specified number of random bytes.
+ *
+ * Attempts to use a cryptographically secure (not predictable)
+ * source of randomness if available. If there is no high-entropy
+ * randomness source available, it will fail. As a last resort,
+ * for non-critical systems, define
+ * <code>Auth_OpenID_RAND_SOURCE</code> as <code>null</code>, and
+ * the code will fall back on a pseudo-random number generator.
+ *
+ * @param int $num_bytes The length of the return value
+ * @return string $bytes random bytes
+ */
+ static function getBytes($num_bytes)
+ {
+ static $f = null;
+ $bytes = '';
+ if ($f === null) {
+ if (Auth_OpenID_RAND_SOURCE === null) {
+ $f = false;
+ } else {
+ $f = @fopen(Auth_OpenID_RAND_SOURCE, "r");
+ if ($f === false) {
+ $msg = 'Define Auth_OpenID_RAND_SOURCE as null to ' .
+ ' continue with an insecure random number generator.';
+ trigger_error($msg, E_USER_ERROR);
+ }
+ }
+ }
+ if ($f === false) {
+ // pseudorandom used
+ $bytes = '';
+ for ($i = 0; $i < $num_bytes; $i += 4) {
+ $bytes .= pack('L', mt_rand());
+ }
+ $bytes = substr($bytes, 0, $num_bytes);
+ } else {
+ $bytes = fread($f, $num_bytes);
+ }
+ return $bytes;
+ }
+
+ /**
+ * Produce a string of length random bytes, chosen from chrs. If
+ * $chrs is null, the resulting string may contain any characters.
+ *
+ * @param integer $length The length of the resulting
+ * randomly-generated string
+ * @param string $chrs A string of characters from which to choose
+ * to build the new string
+ * @return string $result A string of randomly-chosen characters
+ * from $chrs
+ */
+ static function randomString($length, $population = null)
+ {
+ if ($population === null) {
+ return Auth_OpenID_CryptUtil::getBytes($length);
+ }
+
+ $popsize = strlen($population);
+
+ if ($popsize > 256) {
+ $msg = 'More than 256 characters supplied to ' . __FUNCTION__;
+ trigger_error($msg, E_USER_ERROR);
+ }
+
+ $duplicate = 256 % $popsize;
+
+ $str = "";
+ for ($i = 0; $i < $length; $i++) {
+ do {
+ $n = ord(Auth_OpenID_CryptUtil::getBytes(1));
+ } while ($n < $duplicate);
+
+ $n %= $popsize;
+ $str .= $population[$n];
+ }
+
+ return $str;
+ }
+
+ static function constEq($s1, $s2)
+ {
+ if (strlen($s1) != strlen($s2)) {
+ return false;
+ }
+
+ $result = true;
+ $length = strlen($s1);
+ for ($i = 0; $i < $length; $i++) {
+ $result &= ($s1[$i] == $s2[$i]);
+ }
+ return $result;
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/DatabaseConnection.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/DatabaseConnection.php
new file mode 100644
index 000000000..0c7d08f91
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/DatabaseConnection.php
@@ -0,0 +1,130 @@
+<?php
+
+/**
+ * The Auth_OpenID_DatabaseConnection class, which is used to emulate
+ * a PEAR database connection.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * An empty base class intended to emulate PEAR connection
+ * functionality in applications that supply their own database
+ * abstraction mechanisms. See {@link Auth_OpenID_SQLStore} for more
+ * information. You should subclass this class if you need to create
+ * an SQL store that needs to access its database using an
+ * application's database abstraction layer instead of a PEAR database
+ * connection. Any subclass of Auth_OpenID_DatabaseConnection MUST
+ * adhere to the interface specified here.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_DatabaseConnection {
+ /**
+ * Sets auto-commit mode on this database connection.
+ *
+ * @param bool $mode True if auto-commit is to be used; false if
+ * not.
+ */
+ function autoCommit($mode)
+ {
+ }
+
+ /**
+ * Run an SQL query with the specified parameters, if any.
+ *
+ * @param string $sql An SQL string with placeholders. The
+ * placeholders are assumed to be specific to the database engine
+ * for this connection.
+ *
+ * @param array $params An array of parameters to insert into the
+ * SQL string using this connection's escaping mechanism.
+ *
+ * @return mixed $result The result of calling this connection's
+ * internal query function. The type of result depends on the
+ * underlying database engine. This method is usually used when
+ * the result of a query is not important, like a DDL query.
+ */
+ function query($sql, $params = array())
+ {
+ }
+
+ /**
+ * Starts a transaction on this connection, if supported.
+ */
+ function begin()
+ {
+ }
+
+ /**
+ * Commits a transaction on this connection, if supported.
+ */
+ function commit()
+ {
+ }
+
+ /**
+ * Performs a rollback on this connection, if supported.
+ */
+ function rollback()
+ {
+ }
+
+ /**
+ * Run an SQL query and return the first column of the first row
+ * of the result set, if any.
+ *
+ * @param string $sql An SQL string with placeholders. The
+ * placeholders are assumed to be specific to the database engine
+ * for this connection.
+ *
+ * @param array $params An array of parameters to insert into the
+ * SQL string using this connection's escaping mechanism.
+ *
+ * @return mixed $result The value of the first column of the
+ * first row of the result set. False if no such result was
+ * found.
+ */
+ function getOne($sql, $params = array())
+ {
+ }
+
+ /**
+ * Run an SQL query and return the first row of the result set, if
+ * any.
+ *
+ * @param string $sql An SQL string with placeholders. The
+ * placeholders are assumed to be specific to the database engine
+ * for this connection.
+ *
+ * @param array $params An array of parameters to insert into the
+ * SQL string using this connection's escaping mechanism.
+ *
+ * @return array $result The first row of the result set, if any,
+ * keyed on column name. False if no such result was found.
+ */
+ function getRow($sql, $params = array())
+ {
+ }
+
+ /**
+ * Run an SQL query with the specified parameters, if any.
+ *
+ * @param string $sql An SQL string with placeholders. The
+ * placeholders are assumed to be specific to the database engine
+ * for this connection.
+ *
+ * @param array $params An array of parameters to insert into the
+ * SQL string using this connection's escaping mechanism.
+ *
+ * @return array $result An array of arrays representing the
+ * result of the query; each array is keyed on column name.
+ */
+ function getAll($sql, $params = array())
+ {
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/DiffieHellman.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/DiffieHellman.php
new file mode 100644
index 000000000..3e25b7dbb
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/DiffieHellman.php
@@ -0,0 +1,113 @@
+<?php
+
+/**
+ * The OpenID library's Diffie-Hellman implementation.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @access private
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+require_once 'Auth/OpenID.php';
+require_once 'Auth/OpenID/BigMath.php';
+
+function Auth_OpenID_getDefaultMod()
+{
+ return '155172898181473697471232257763715539915724801'.
+ '966915404479707795314057629378541917580651227423'.
+ '698188993727816152646631438561595825688188889951'.
+ '272158842675419950341258706556549803580104870537'.
+ '681476726513255747040765857479291291572334510643'.
+ '245094715007229621094194349783925984760375594985'.
+ '848253359305585439638443';
+}
+
+function Auth_OpenID_getDefaultGen()
+{
+ return '2';
+}
+
+/**
+ * The Diffie-Hellman key exchange class. This class relies on
+ * {@link Auth_OpenID_MathLibrary} to perform large number operations.
+ *
+ * @access private
+ * @package OpenID
+ */
+class Auth_OpenID_DiffieHellman {
+
+ var $mod;
+ var $gen;
+ var $private;
+ var $lib = null;
+
+ function Auth_OpenID_DiffieHellman($mod = null, $gen = null,
+ $private = null, $lib = null)
+ {
+ if ($lib === null) {
+ $this->lib = Auth_OpenID_getMathLib();
+ } else {
+ $this->lib = $lib;
+ }
+
+ if ($mod === null) {
+ $this->mod = $this->lib->init(Auth_OpenID_getDefaultMod());
+ } else {
+ $this->mod = $mod;
+ }
+
+ if ($gen === null) {
+ $this->gen = $this->lib->init(Auth_OpenID_getDefaultGen());
+ } else {
+ $this->gen = $gen;
+ }
+
+ if ($private === null) {
+ $r = $this->lib->rand($this->mod);
+ $this->private = $this->lib->add($r, 1);
+ } else {
+ $this->private = $private;
+ }
+
+ $this->public = $this->lib->powmod($this->gen, $this->private,
+ $this->mod);
+ }
+
+ function getSharedSecret($composite)
+ {
+ return $this->lib->powmod($composite, $this->private, $this->mod);
+ }
+
+ function getPublicKey()
+ {
+ return $this->public;
+ }
+
+ function usingDefaultValues()
+ {
+ return ($this->mod == Auth_OpenID_getDefaultMod() &&
+ $this->gen == Auth_OpenID_getDefaultGen());
+ }
+
+ function xorSecret($composite, $secret, $hash_func)
+ {
+ $dh_shared = $this->getSharedSecret($composite);
+ $dh_shared_str = $this->lib->longToBinary($dh_shared);
+ $hash_dh_shared = $hash_func($dh_shared_str);
+
+ $xsecret = "";
+ for ($i = 0; $i < Auth_OpenID::bytes($secret); $i++) {
+ $xsecret .= chr(ord($secret[$i]) ^ ord($hash_dh_shared[$i]));
+ }
+
+ return $xsecret;
+ }
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/Discover.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/Discover.php
new file mode 100644
index 000000000..7b0c640c5
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/Discover.php
@@ -0,0 +1,606 @@
+<?php
+
+/**
+ * The OpenID and Yadis discovery implementation for OpenID 1.2.
+ */
+
+require_once "Auth/OpenID.php";
+require_once "Auth/OpenID/Parse.php";
+require_once "Auth/OpenID/Message.php";
+require_once "Auth/Yadis/XRIRes.php";
+require_once "Auth/Yadis/Yadis.php";
+
+// XML namespace value
+define('Auth_OpenID_XMLNS_1_0', 'http://openid.net/xmlns/1.0');
+
+// Yadis service types
+define('Auth_OpenID_TYPE_1_2', 'http://openid.net/signon/1.2');
+define('Auth_OpenID_TYPE_1_1', 'http://openid.net/signon/1.1');
+define('Auth_OpenID_TYPE_1_0', 'http://openid.net/signon/1.0');
+define('Auth_OpenID_TYPE_2_0_IDP', 'http://specs.openid.net/auth/2.0/server');
+define('Auth_OpenID_TYPE_2_0', 'http://specs.openid.net/auth/2.0/signon');
+define('Auth_OpenID_RP_RETURN_TO_URL_TYPE',
+ 'http://specs.openid.net/auth/2.0/return_to');
+
+function Auth_OpenID_getOpenIDTypeURIs()
+{
+ return array(Auth_OpenID_TYPE_2_0_IDP,
+ Auth_OpenID_TYPE_2_0,
+ Auth_OpenID_TYPE_1_2,
+ Auth_OpenID_TYPE_1_1,
+ Auth_OpenID_TYPE_1_0);
+}
+
+function Auth_OpenID_getOpenIDConsumerTypeURIs()
+{
+ return array(Auth_OpenID_RP_RETURN_TO_URL_TYPE);
+}
+
+
+/*
+ * Provides a user-readable interpretation of a type uri.
+ * Useful for error messages.
+ */
+function Auth_OpenID_getOpenIDTypeName($type_uri) {
+ switch ($type_uri) {
+ case Auth_OpenID_TYPE_2_0_IDP:
+ return 'OpenID 2.0 IDP';
+ case Auth_OpenID_TYPE_2_0:
+ return 'OpenID 2.0';
+ case Auth_OpenID_TYPE_1_2:
+ return 'OpenID 1.2';
+ case Auth_OpenID_TYPE_1_1:
+ return 'OpenID 1.1';
+ case Auth_OpenID_TYPE_1_0:
+ return 'OpenID 1.0';
+ case Auth_OpenID_RP_RETURN_TO_URL_TYPE:
+ return 'OpenID relying party';
+ }
+}
+
+/**
+ * Object representing an OpenID service endpoint.
+ */
+class Auth_OpenID_ServiceEndpoint {
+ function Auth_OpenID_ServiceEndpoint()
+ {
+ $this->claimed_id = null;
+ $this->server_url = null;
+ $this->type_uris = array();
+ $this->local_id = null;
+ $this->canonicalID = null;
+ $this->used_yadis = false; // whether this came from an XRDS
+ $this->display_identifier = null;
+ }
+
+ function getDisplayIdentifier()
+ {
+ if ($this->display_identifier) {
+ return $this->display_identifier;
+ }
+ if (! $this->claimed_id) {
+ return $this->claimed_id;
+ }
+ $parsed = parse_url($this->claimed_id);
+ $scheme = $parsed['scheme'];
+ $host = $parsed['host'];
+ $path = $parsed['path'];
+ if (array_key_exists('query', $parsed)) {
+ $query = $parsed['query'];
+ $no_frag = "$scheme://$host$path?$query";
+ } else {
+ $no_frag = "$scheme://$host$path";
+ }
+ return $no_frag;
+ }
+
+ function usesExtension($extension_uri)
+ {
+ return in_array($extension_uri, $this->type_uris);
+ }
+
+ function preferredNamespace()
+ {
+ if (in_array(Auth_OpenID_TYPE_2_0_IDP, $this->type_uris) ||
+ in_array(Auth_OpenID_TYPE_2_0, $this->type_uris)) {
+ return Auth_OpenID_OPENID2_NS;
+ } else {
+ return Auth_OpenID_OPENID1_NS;
+ }
+ }
+
+ /*
+ * Query this endpoint to see if it has any of the given type
+ * URIs. This is useful for implementing other endpoint classes
+ * that e.g. need to check for the presence of multiple versions
+ * of a single protocol.
+ *
+ * @param $type_uris The URIs that you wish to check
+ *
+ * @return all types that are in both in type_uris and
+ * $this->type_uris
+ */
+ function matchTypes($type_uris)
+ {
+ $result = array();
+ foreach ($type_uris as $test_uri) {
+ if ($this->supportsType($test_uri)) {
+ $result[] = $test_uri;
+ }
+ }
+
+ return $result;
+ }
+
+ function supportsType($type_uri)
+ {
+ // Does this endpoint support this type?
+ return ((in_array($type_uri, $this->type_uris)) ||
+ (($type_uri == Auth_OpenID_TYPE_2_0) &&
+ $this->isOPIdentifier()));
+ }
+
+ function compatibilityMode()
+ {
+ return $this->preferredNamespace() != Auth_OpenID_OPENID2_NS;
+ }
+
+ function isOPIdentifier()
+ {
+ return in_array(Auth_OpenID_TYPE_2_0_IDP, $this->type_uris);
+ }
+
+ static function fromOPEndpointURL($op_endpoint_url)
+ {
+ // Construct an OP-Identifier OpenIDServiceEndpoint object for
+ // a given OP Endpoint URL
+ $obj = new Auth_OpenID_ServiceEndpoint();
+ $obj->server_url = $op_endpoint_url;
+ $obj->type_uris = array(Auth_OpenID_TYPE_2_0_IDP);
+ return $obj;
+ }
+
+ function parseService($yadis_url, $uri, $type_uris, $service_element)
+ {
+ // Set the state of this object based on the contents of the
+ // service element. Return true if successful, false if not
+ // (if findOPLocalIdentifier returns false).
+ $this->type_uris = $type_uris;
+ $this->server_url = $uri;
+ $this->used_yadis = true;
+
+ if (!$this->isOPIdentifier()) {
+ $this->claimed_id = $yadis_url;
+ $this->local_id = Auth_OpenID_findOPLocalIdentifier(
+ $service_element,
+ $this->type_uris);
+ if ($this->local_id === false) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ function getLocalID()
+ {
+ // Return the identifier that should be sent as the
+ // openid.identity_url parameter to the server.
+ if ($this->local_id === null && $this->canonicalID === null) {
+ return $this->claimed_id;
+ } else {
+ if ($this->local_id) {
+ return $this->local_id;
+ } else {
+ return $this->canonicalID;
+ }
+ }
+ }
+
+ /*
+ * Parse the given document as XRDS looking for OpenID consumer services.
+ *
+ * @return array of Auth_OpenID_ServiceEndpoint or null if the
+ * document cannot be parsed.
+ */
+ function consumerFromXRDS($uri, $xrds_text)
+ {
+ $xrds =& Auth_Yadis_XRDS::parseXRDS($xrds_text);
+
+ if ($xrds) {
+ $yadis_services =
+ $xrds->services(array('filter_MatchesAnyOpenIDConsumerType'));
+ return Auth_OpenID_makeOpenIDEndpoints($uri, $yadis_services);
+ }
+
+ return null;
+ }
+
+ /*
+ * Parse the given document as XRDS looking for OpenID services.
+ *
+ * @return array of Auth_OpenID_ServiceEndpoint or null if the
+ * document cannot be parsed.
+ */
+ static function fromXRDS($uri, $xrds_text)
+ {
+ $xrds = Auth_Yadis_XRDS::parseXRDS($xrds_text);
+
+ if ($xrds) {
+ $yadis_services =
+ $xrds->services(array('filter_MatchesAnyOpenIDType'));
+ return Auth_OpenID_makeOpenIDEndpoints($uri, $yadis_services);
+ }
+
+ return null;
+ }
+
+ /*
+ * Create endpoints from a DiscoveryResult.
+ *
+ * @param discoveryResult Auth_Yadis_DiscoveryResult
+ * @return array of Auth_OpenID_ServiceEndpoint or null if
+ * endpoints cannot be created.
+ */
+ static function fromDiscoveryResult($discoveryResult)
+ {
+ if ($discoveryResult->isXRDS()) {
+ return Auth_OpenID_ServiceEndpoint::fromXRDS(
+ $discoveryResult->normalized_uri,
+ $discoveryResult->response_text);
+ } else {
+ return Auth_OpenID_ServiceEndpoint::fromHTML(
+ $discoveryResult->normalized_uri,
+ $discoveryResult->response_text);
+ }
+ }
+
+ static function fromHTML($uri, $html)
+ {
+ $discovery_types = array(
+ array(Auth_OpenID_TYPE_2_0,
+ 'openid2.provider', 'openid2.local_id'),
+ array(Auth_OpenID_TYPE_1_1,
+ 'openid.server', 'openid.delegate')
+ );
+
+ $services = array();
+
+ foreach ($discovery_types as $triple) {
+ list($type_uri, $server_rel, $delegate_rel) = $triple;
+
+ $urls = Auth_OpenID_legacy_discover($html, $server_rel,
+ $delegate_rel);
+
+ if ($urls === false) {
+ continue;
+ }
+
+ list($delegate_url, $server_url) = $urls;
+
+ $service = new Auth_OpenID_ServiceEndpoint();
+ $service->claimed_id = $uri;
+ $service->local_id = $delegate_url;
+ $service->server_url = $server_url;
+ $service->type_uris = array($type_uri);
+
+ $services[] = $service;
+ }
+
+ return $services;
+ }
+
+ function copy()
+ {
+ $x = new Auth_OpenID_ServiceEndpoint();
+
+ $x->claimed_id = $this->claimed_id;
+ $x->server_url = $this->server_url;
+ $x->type_uris = $this->type_uris;
+ $x->local_id = $this->local_id;
+ $x->canonicalID = $this->canonicalID;
+ $x->used_yadis = $this->used_yadis;
+
+ return $x;
+ }
+}
+
+function Auth_OpenID_findOPLocalIdentifier($service, $type_uris)
+{
+ // Extract a openid:Delegate value from a Yadis Service element.
+ // If no delegate is found, returns null. Returns false on
+ // discovery failure (when multiple delegate/localID tags have
+ // different values).
+
+ $service->parser->registerNamespace('openid',
+ Auth_OpenID_XMLNS_1_0);
+
+ $service->parser->registerNamespace('xrd',
+ Auth_Yadis_XMLNS_XRD_2_0);
+
+ $parser = $service->parser;
+
+ $permitted_tags = array();
+
+ if (in_array(Auth_OpenID_TYPE_1_1, $type_uris) ||
+ in_array(Auth_OpenID_TYPE_1_0, $type_uris)) {
+ $permitted_tags[] = 'openid:Delegate';
+ }
+
+ if (in_array(Auth_OpenID_TYPE_2_0, $type_uris)) {
+ $permitted_tags[] = 'xrd:LocalID';
+ }
+
+ $local_id = null;
+
+ foreach ($permitted_tags as $tag_name) {
+ $tags = $service->getElements($tag_name);
+
+ foreach ($tags as $tag) {
+ $content = $parser->content($tag);
+
+ if ($local_id === null) {
+ $local_id = $content;
+ } else if ($local_id != $content) {
+ return false;
+ }
+ }
+ }
+
+ return $local_id;
+}
+
+function filter_MatchesAnyOpenIDType($service)
+{
+ $uris = $service->getTypes();
+
+ foreach ($uris as $uri) {
+ if (in_array($uri, Auth_OpenID_getOpenIDTypeURIs())) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+function filter_MatchesAnyOpenIDConsumerType(&$service)
+{
+ $uris = $service->getTypes();
+
+ foreach ($uris as $uri) {
+ if (in_array($uri, Auth_OpenID_getOpenIDConsumerTypeURIs())) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+function Auth_OpenID_bestMatchingService($service, $preferred_types)
+{
+ // Return the index of the first matching type, or something
+ // higher if no type matches.
+ //
+ // This provides an ordering in which service elements that
+ // contain a type that comes earlier in the preferred types list
+ // come before service elements that come later. If a service
+ // element has more than one type, the most preferred one wins.
+
+ foreach ($preferred_types as $index => $typ) {
+ if (in_array($typ, $service->type_uris)) {
+ return $index;
+ }
+ }
+
+ return count($preferred_types);
+}
+
+function Auth_OpenID_arrangeByType($service_list, $preferred_types)
+{
+ // Rearrange service_list in a new list so services are ordered by
+ // types listed in preferred_types. Return the new list.
+
+ // Build a list with the service elements in tuples whose
+ // comparison will prefer the one with the best matching service
+ $prio_services = array();
+ foreach ($service_list as $index => $service) {
+ $prio_services[] = array(Auth_OpenID_bestMatchingService($service,
+ $preferred_types),
+ $index, $service);
+ }
+
+ sort($prio_services);
+
+ // Now that the services are sorted by priority, remove the sort
+ // keys from the list.
+ foreach ($prio_services as $index => $s) {
+ $prio_services[$index] = $prio_services[$index][2];
+ }
+
+ return $prio_services;
+}
+
+// Extract OP Identifier services. If none found, return the rest,
+// sorted with most preferred first according to
+// OpenIDServiceEndpoint.openid_type_uris.
+//
+// openid_services is a list of OpenIDServiceEndpoint objects.
+//
+// Returns a list of OpenIDServiceEndpoint objects."""
+function Auth_OpenID_getOPOrUserServices($openid_services)
+{
+ $op_services = Auth_OpenID_arrangeByType($openid_services,
+ array(Auth_OpenID_TYPE_2_0_IDP));
+
+ $openid_services = Auth_OpenID_arrangeByType($openid_services,
+ Auth_OpenID_getOpenIDTypeURIs());
+
+ if ($op_services) {
+ return $op_services;
+ } else {
+ return $openid_services;
+ }
+}
+
+function Auth_OpenID_makeOpenIDEndpoints($uri, $yadis_services)
+{
+ $s = array();
+
+ if (!$yadis_services) {
+ return $s;
+ }
+
+ foreach ($yadis_services as $service) {
+ $type_uris = $service->getTypes();
+ $uris = $service->getURIs();
+
+ // If any Type URIs match and there is an endpoint URI
+ // specified, then this is an OpenID endpoint
+ if ($type_uris &&
+ $uris) {
+ foreach ($uris as $service_uri) {
+ $openid_endpoint = new Auth_OpenID_ServiceEndpoint();
+ if ($openid_endpoint->parseService($uri,
+ $service_uri,
+ $type_uris,
+ $service)) {
+ $s[] = $openid_endpoint;
+ }
+ }
+ }
+ }
+
+ return $s;
+}
+
+function Auth_OpenID_discoverWithYadis($uri, $fetcher,
+ $endpoint_filter='Auth_OpenID_getOPOrUserServices',
+ $discover_function=null)
+{
+ // Discover OpenID services for a URI. Tries Yadis and falls back
+ // on old-style <link rel='...'> discovery if Yadis fails.
+
+ // Might raise a yadis.discover.DiscoveryFailure if no document
+ // came back for that URI at all. I don't think falling back to
+ // OpenID 1.0 discovery on the same URL will help, so don't bother
+ // to catch it.
+ if ($discover_function === null) {
+ $discover_function = array('Auth_Yadis_Yadis', 'discover');
+ }
+
+ $openid_services = array();
+
+ $response = call_user_func_array($discover_function,
+ array($uri, $fetcher));
+
+ $yadis_url = $response->normalized_uri;
+ $yadis_services = array();
+
+ if ($response->isFailure() && !$response->isXRDS()) {
+ return array($uri, array());
+ }
+
+ $openid_services = Auth_OpenID_ServiceEndpoint::fromXRDS(
+ $yadis_url,
+ $response->response_text);
+
+ if (!$openid_services) {
+ if ($response->isXRDS()) {
+ return Auth_OpenID_discoverWithoutYadis($uri,
+ $fetcher);
+ }
+
+ // Try to parse the response as HTML to get OpenID 1.0/1.1
+ // <link rel="...">
+ $openid_services = Auth_OpenID_ServiceEndpoint::fromHTML(
+ $yadis_url,
+ $response->response_text);
+ }
+
+ $openid_services = call_user_func_array($endpoint_filter,
+ array($openid_services));
+
+ return array($yadis_url, $openid_services);
+}
+
+function Auth_OpenID_discoverURI($uri, $fetcher)
+{
+ $uri = Auth_OpenID::normalizeUrl($uri);
+ return Auth_OpenID_discoverWithYadis($uri, $fetcher);
+}
+
+function Auth_OpenID_discoverWithoutYadis($uri, $fetcher)
+{
+ $http_resp = @$fetcher->get($uri);
+
+ if ($http_resp->status != 200 and $http_resp->status != 206) {
+ return array($uri, array());
+ }
+
+ $identity_url = $http_resp->final_url;
+
+ // Try to parse the response as HTML to get OpenID 1.0/1.1 <link
+ // rel="...">
+ $openid_services = Auth_OpenID_ServiceEndpoint::fromHTML(
+ $identity_url,
+ $http_resp->body);
+
+ return array($identity_url, $openid_services);
+}
+
+function Auth_OpenID_discoverXRI($iname, $fetcher)
+{
+ $resolver = new Auth_Yadis_ProxyResolver($fetcher);
+ list($canonicalID, $yadis_services) =
+ $resolver->query($iname,
+ Auth_OpenID_getOpenIDTypeURIs(),
+ array('filter_MatchesAnyOpenIDType'));
+
+ $openid_services = Auth_OpenID_makeOpenIDEndpoints($iname,
+ $yadis_services);
+
+ $openid_services = Auth_OpenID_getOPOrUserServices($openid_services);
+
+ for ($i = 0; $i < count($openid_services); $i++) {
+ $openid_services[$i]->canonicalID = $canonicalID;
+ $openid_services[$i]->claimed_id = $canonicalID;
+ $openid_services[$i]->display_identifier = $iname;
+ }
+
+ // FIXME: returned xri should probably be in some normal form
+ return array($iname, $openid_services);
+}
+
+function Auth_OpenID_discover($uri, $fetcher)
+{
+ // If the fetcher (i.e., PHP) doesn't support SSL, we can't do
+ // discovery on an HTTPS URL.
+ if ($fetcher->isHTTPS($uri) && !$fetcher->supportsSSL()) {
+ return array($uri, array());
+ }
+
+ if (Auth_Yadis_identifierScheme($uri) == 'XRI') {
+ $result = Auth_OpenID_discoverXRI($uri, $fetcher);
+ } else {
+ $result = Auth_OpenID_discoverURI($uri, $fetcher);
+ }
+
+ // If the fetcher doesn't support SSL, we can't interact with
+ // HTTPS server URLs; remove those endpoints from the list.
+ if (!$fetcher->supportsSSL()) {
+ $http_endpoints = array();
+ list($new_uri, $endpoints) = $result;
+
+ foreach ($endpoints as $e) {
+ if (!$fetcher->isHTTPS($e->server_url)) {
+ $http_endpoints[] = $e;
+ }
+ }
+
+ $result = array($new_uri, $http_endpoints);
+ }
+
+ return $result;
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/DumbStore.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/DumbStore.php
new file mode 100644
index 000000000..e8f29ace5
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/DumbStore.php
@@ -0,0 +1,99 @@
+<?php
+
+/**
+ * This file supplies a dumb store backend for OpenID servers and
+ * consumers.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Import the interface for creating a new store class.
+ */
+require_once 'Auth/OpenID/Interface.php';
+require_once 'Auth/OpenID/HMAC.php';
+
+/**
+ * This is a store for use in the worst case, when you have no way of
+ * saving state on the consumer site. Using this store makes the
+ * consumer vulnerable to replay attacks, as it's unable to use
+ * nonces. Avoid using this store if it is at all possible.
+ *
+ * Most of the methods of this class are implementation details.
+ * Users of this class need to worry only about the constructor.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_DumbStore extends Auth_OpenID_OpenIDStore {
+
+ /**
+ * Creates a new {@link Auth_OpenID_DumbStore} instance. For the security
+ * of the tokens generated by the library, this class attempts to
+ * at least have a secure implementation of getAuthKey.
+ *
+ * When you create an instance of this class, pass in a secret
+ * phrase. The phrase is hashed with sha1 to make it the correct
+ * length and form for an auth key. That allows you to use a long
+ * string as the secret phrase, which means you can make it very
+ * difficult to guess.
+ *
+ * Each {@link Auth_OpenID_DumbStore} instance that is created for use by
+ * your consumer site needs to use the same $secret_phrase.
+ *
+ * @param string secret_phrase The phrase used to create the auth
+ * key returned by getAuthKey
+ */
+ function Auth_OpenID_DumbStore($secret_phrase)
+ {
+ $this->auth_key = Auth_OpenID_SHA1($secret_phrase);
+ }
+
+ /**
+ * This implementation does nothing.
+ */
+ function storeAssociation($server_url, $association)
+ {
+ }
+
+ /**
+ * This implementation always returns null.
+ */
+ function getAssociation($server_url, $handle = null)
+ {
+ return null;
+ }
+
+ /**
+ * This implementation always returns false.
+ */
+ function removeAssociation($server_url, $handle)
+ {
+ return false;
+ }
+
+ /**
+ * In a system truly limited to dumb mode, nonces must all be
+ * accepted. This therefore always returns true, which makes
+ * replay attacks feasible.
+ */
+ function useNonce($server_url, $timestamp, $salt)
+ {
+ return true;
+ }
+
+ /**
+ * This method returns the auth key generated by the constructor.
+ */
+ function getAuthKey()
+ {
+ return $this->auth_key;
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/Extension.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/Extension.php
new file mode 100644
index 000000000..c4e38c038
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/Extension.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * An interface for OpenID extensions.
+ *
+ * @package OpenID
+ */
+
+/**
+ * Require the Message implementation.
+ */
+require_once 'Auth/OpenID/Message.php';
+
+/**
+ * A base class for accessing extension request and response data for
+ * the OpenID 2 protocol.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_Extension {
+ /**
+ * ns_uri: The namespace to which to add the arguments for this
+ * extension
+ */
+ var $ns_uri = null;
+ var $ns_alias = null;
+
+ /**
+ * Get the string arguments that should be added to an OpenID
+ * message for this extension.
+ */
+ function getExtensionArgs()
+ {
+ return null;
+ }
+
+ /**
+ * Add the arguments from this extension to the provided message.
+ *
+ * Returns the message with the extension arguments added.
+ */
+ function toMessage($message)
+ {
+ $implicit = $message->isOpenID1();
+ $added = $message->namespaces->addAlias($this->ns_uri,
+ $this->ns_alias,
+ $implicit);
+
+ if ($added === null) {
+ if ($message->namespaces->getAlias($this->ns_uri) !=
+ $this->ns_alias) {
+ return null;
+ }
+ }
+
+ $message->updateArgs($this->ns_uri,
+ $this->getExtensionArgs());
+ return $message;
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/FileStore.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/FileStore.php
new file mode 100644
index 000000000..074421a0b
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/FileStore.php
@@ -0,0 +1,618 @@
+<?php
+
+/**
+ * This file supplies a Memcached store backend for OpenID servers and
+ * consumers.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Require base class for creating a new interface.
+ */
+require_once 'Auth/OpenID.php';
+require_once 'Auth/OpenID/Interface.php';
+require_once 'Auth/OpenID/HMAC.php';
+require_once 'Auth/OpenID/Nonce.php';
+
+/**
+ * This is a filesystem-based store for OpenID associations and
+ * nonces. This store should be safe for use in concurrent systems on
+ * both windows and unix (excluding NFS filesystems). There are a
+ * couple race conditions in the system, but those failure cases have
+ * been set up in such a way that the worst-case behavior is someone
+ * having to try to log in a second time.
+ *
+ * Most of the methods of this class are implementation details.
+ * People wishing to just use this store need only pay attention to
+ * the constructor.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_FileStore extends Auth_OpenID_OpenIDStore {
+
+ /**
+ * Initializes a new {@link Auth_OpenID_FileStore}. This
+ * initializes the nonce and association directories, which are
+ * subdirectories of the directory passed in.
+ *
+ * @param string $directory This is the directory to put the store
+ * directories in.
+ */
+ function Auth_OpenID_FileStore($directory)
+ {
+ if (!Auth_OpenID::ensureDir($directory)) {
+ trigger_error('Not a directory and failed to create: '
+ . $directory, E_USER_ERROR);
+ }
+ $directory = realpath($directory);
+
+ $this->directory = $directory;
+ $this->active = true;
+
+ $this->nonce_dir = $directory . DIRECTORY_SEPARATOR . 'nonces';
+
+ $this->association_dir = $directory . DIRECTORY_SEPARATOR .
+ 'associations';
+
+ // Temp dir must be on the same filesystem as the assciations
+ // $directory.
+ $this->temp_dir = $directory . DIRECTORY_SEPARATOR . 'temp';
+
+ $this->max_nonce_age = 6 * 60 * 60; // Six hours, in seconds
+
+ if (!$this->_setup()) {
+ trigger_error('Failed to initialize OpenID file store in ' .
+ $directory, E_USER_ERROR);
+ }
+ }
+
+ function destroy()
+ {
+ Auth_OpenID_FileStore::_rmtree($this->directory);
+ $this->active = false;
+ }
+
+ /**
+ * Make sure that the directories in which we store our data
+ * exist.
+ *
+ * @access private
+ */
+ function _setup()
+ {
+ return (Auth_OpenID::ensureDir($this->nonce_dir) &&
+ Auth_OpenID::ensureDir($this->association_dir) &&
+ Auth_OpenID::ensureDir($this->temp_dir));
+ }
+
+ /**
+ * Create a temporary file on the same filesystem as
+ * $this->association_dir.
+ *
+ * The temporary directory should not be cleaned if there are any
+ * processes using the store. If there is no active process using
+ * the store, it is safe to remove all of the files in the
+ * temporary directory.
+ *
+ * @return array ($fd, $filename)
+ * @access private
+ */
+ function _mktemp()
+ {
+ $name = Auth_OpenID_FileStore::_mkstemp($dir = $this->temp_dir);
+ $file_obj = @fopen($name, 'wb');
+ if ($file_obj !== false) {
+ return array($file_obj, $name);
+ } else {
+ Auth_OpenID_FileStore::_removeIfPresent($name);
+ }
+ }
+
+ function cleanupNonces()
+ {
+ global $Auth_OpenID_SKEW;
+
+ $nonces = Auth_OpenID_FileStore::_listdir($this->nonce_dir);
+ $now = time();
+
+ $removed = 0;
+ // Check all nonces for expiry
+ foreach ($nonces as $nonce_fname) {
+ $base = basename($nonce_fname);
+ $parts = explode('-', $base, 2);
+ $timestamp = $parts[0];
+ $timestamp = intval($timestamp, 16);
+ if (abs($timestamp - $now) > $Auth_OpenID_SKEW) {
+ Auth_OpenID_FileStore::_removeIfPresent($nonce_fname);
+ $removed += 1;
+ }
+ }
+ return $removed;
+ }
+
+ /**
+ * Create a unique filename for a given server url and
+ * handle. This implementation does not assume anything about the
+ * format of the handle. The filename that is returned will
+ * contain the domain name from the server URL for ease of human
+ * inspection of the data directory.
+ *
+ * @return string $filename
+ */
+ function getAssociationFilename($server_url, $handle)
+ {
+ if (!$this->active) {
+ trigger_error("FileStore no longer active", E_USER_ERROR);
+ return null;
+ }
+
+ if (strpos($server_url, '://') === false) {
+ trigger_error(sprintf("Bad server URL: %s", $server_url),
+ E_USER_WARNING);
+ return null;
+ }
+
+ list($proto, $rest) = explode('://', $server_url, 2);
+ $parts = explode('/', $rest);
+ $domain = Auth_OpenID_FileStore::_filenameEscape($parts[0]);
+ $url_hash = Auth_OpenID_FileStore::_safe64($server_url);
+ if ($handle) {
+ $handle_hash = Auth_OpenID_FileStore::_safe64($handle);
+ } else {
+ $handle_hash = '';
+ }
+
+ $filename = sprintf('%s-%s-%s-%s', $proto, $domain, $url_hash,
+ $handle_hash);
+
+ return $this->association_dir. DIRECTORY_SEPARATOR . $filename;
+ }
+
+ /**
+ * Store an association in the association directory.
+ */
+ function storeAssociation($server_url, $association)
+ {
+ if (!$this->active) {
+ trigger_error("FileStore no longer active", E_USER_ERROR);
+ return false;
+ }
+
+ $association_s = $association->serialize();
+ $filename = $this->getAssociationFilename($server_url,
+ $association->handle);
+ list($tmp_file, $tmp) = $this->_mktemp();
+
+ if (!$tmp_file) {
+ trigger_error("_mktemp didn't return a valid file descriptor",
+ E_USER_WARNING);
+ return false;
+ }
+
+ fwrite($tmp_file, $association_s);
+
+ fflush($tmp_file);
+
+ fclose($tmp_file);
+
+ if (@rename($tmp, $filename)) {
+ return true;
+ } else {
+ // In case we are running on Windows, try unlinking the
+ // file in case it exists.
+ @unlink($filename);
+
+ // Now the target should not exist. Try renaming again,
+ // giving up if it fails.
+ if (@rename($tmp, $filename)) {
+ return true;
+ }
+ }
+
+ // If there was an error, don't leave the temporary file
+ // around.
+ Auth_OpenID_FileStore::_removeIfPresent($tmp);
+ return false;
+ }
+
+ /**
+ * Retrieve an association. If no handle is specified, return the
+ * association with the most recent issue time.
+ *
+ * @return mixed $association
+ */
+ function getAssociation($server_url, $handle = null)
+ {
+ if (!$this->active) {
+ trigger_error("FileStore no longer active", E_USER_ERROR);
+ return null;
+ }
+
+ if ($handle === null) {
+ $handle = '';
+ }
+
+ // The filename with the empty handle is a prefix of all other
+ // associations for the given server URL.
+ $filename = $this->getAssociationFilename($server_url, $handle);
+
+ if ($handle) {
+ return $this->_getAssociation($filename);
+ } else {
+ $association_files =
+ Auth_OpenID_FileStore::_listdir($this->association_dir);
+ $matching_files = array();
+
+ // strip off the path to do the comparison
+ $name = basename($filename);
+ foreach ($association_files as $association_file) {
+ $base = basename($association_file);
+ if (strpos($base, $name) === 0) {
+ $matching_files[] = $association_file;
+ }
+ }
+
+ $matching_associations = array();
+ // read the matching files and sort by time issued
+ foreach ($matching_files as $full_name) {
+ $association = $this->_getAssociation($full_name);
+ if ($association !== null) {
+ $matching_associations[] = array($association->issued,
+ $association);
+ }
+ }
+
+ $issued = array();
+ $assocs = array();
+ foreach ($matching_associations as $key => $assoc) {
+ $issued[$key] = $assoc[0];
+ $assocs[$key] = $assoc[1];
+ }
+
+ array_multisort($issued, SORT_DESC, $assocs, SORT_DESC,
+ $matching_associations);
+
+ // return the most recently issued one.
+ if ($matching_associations) {
+ list($issued, $assoc) = $matching_associations[0];
+ return $assoc;
+ } else {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _getAssociation($filename)
+ {
+ if (!$this->active) {
+ trigger_error("FileStore no longer active", E_USER_ERROR);
+ return null;
+ }
+
+ $assoc_file = @fopen($filename, 'rb');
+
+ if ($assoc_file === false) {
+ return null;
+ }
+
+ $assoc_s = fread($assoc_file, filesize($filename));
+ fclose($assoc_file);
+
+ if (!$assoc_s) {
+ return null;
+ }
+
+ $association =
+ Auth_OpenID_Association::deserialize('Auth_OpenID_Association',
+ $assoc_s);
+
+ if (!$association) {
+ Auth_OpenID_FileStore::_removeIfPresent($filename);
+ return null;
+ }
+
+ if ($association->getExpiresIn() == 0) {
+ Auth_OpenID_FileStore::_removeIfPresent($filename);
+ return null;
+ } else {
+ return $association;
+ }
+ }
+
+ /**
+ * Remove an association if it exists. Do nothing if it does not.
+ *
+ * @return bool $success
+ */
+ function removeAssociation($server_url, $handle)
+ {
+ if (!$this->active) {
+ trigger_error("FileStore no longer active", E_USER_ERROR);
+ return null;
+ }
+
+ $assoc = $this->getAssociation($server_url, $handle);
+ if ($assoc === null) {
+ return false;
+ } else {
+ $filename = $this->getAssociationFilename($server_url, $handle);
+ return Auth_OpenID_FileStore::_removeIfPresent($filename);
+ }
+ }
+
+ /**
+ * Return whether this nonce is present. As a side effect, mark it
+ * as no longer present.
+ *
+ * @return bool $present
+ */
+ function useNonce($server_url, $timestamp, $salt)
+ {
+ global $Auth_OpenID_SKEW;
+
+ if (!$this->active) {
+ trigger_error("FileStore no longer active", E_USER_ERROR);
+ return null;
+ }
+
+ if ( abs($timestamp - time()) > $Auth_OpenID_SKEW ) {
+ return false;
+ }
+
+ if ($server_url) {
+ list($proto, $rest) = explode('://', $server_url, 2);
+ } else {
+ $proto = '';
+ $rest = '';
+ }
+
+ $parts = explode('/', $rest, 2);
+ $domain = $this->_filenameEscape($parts[0]);
+ $url_hash = $this->_safe64($server_url);
+ $salt_hash = $this->_safe64($salt);
+
+ $filename = sprintf('%08x-%s-%s-%s-%s', $timestamp, $proto,
+ $domain, $url_hash, $salt_hash);
+ $filename = $this->nonce_dir . DIRECTORY_SEPARATOR . $filename;
+
+ $result = @fopen($filename, 'x');
+
+ if ($result === false) {
+ return false;
+ } else {
+ fclose($result);
+ return true;
+ }
+ }
+
+ /**
+ * Remove expired entries from the database. This is potentially
+ * expensive, so only run when it is acceptable to take time.
+ *
+ * @access private
+ */
+ function _allAssocs()
+ {
+ $all_associations = array();
+
+ $association_filenames =
+ Auth_OpenID_FileStore::_listdir($this->association_dir);
+
+ foreach ($association_filenames as $association_filename) {
+ $association_file = fopen($association_filename, 'rb');
+
+ if ($association_file !== false) {
+ $assoc_s = fread($association_file,
+ filesize($association_filename));
+ fclose($association_file);
+
+ // Remove expired or corrupted associations
+ $association =
+ Auth_OpenID_Association::deserialize(
+ 'Auth_OpenID_Association', $assoc_s);
+
+ if ($association === null) {
+ Auth_OpenID_FileStore::_removeIfPresent(
+ $association_filename);
+ } else {
+ if ($association->getExpiresIn() == 0) {
+ $all_associations[] = array($association_filename,
+ $association);
+ }
+ }
+ }
+ }
+
+ return $all_associations;
+ }
+
+ function clean()
+ {
+ if (!$this->active) {
+ trigger_error("FileStore no longer active", E_USER_ERROR);
+ return null;
+ }
+
+ $nonces = Auth_OpenID_FileStore::_listdir($this->nonce_dir);
+ $now = time();
+
+ // Check all nonces for expiry
+ foreach ($nonces as $nonce) {
+ if (!Auth_OpenID_checkTimestamp($nonce, $now)) {
+ $filename = $this->nonce_dir . DIRECTORY_SEPARATOR . $nonce;
+ Auth_OpenID_FileStore::_removeIfPresent($filename);
+ }
+ }
+
+ foreach ($this->_allAssocs() as $pair) {
+ list($assoc_filename, $assoc) = $pair;
+ if ($assoc->getExpiresIn() == 0) {
+ Auth_OpenID_FileStore::_removeIfPresent($assoc_filename);
+ }
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _rmtree($dir)
+ {
+ if ($dir[strlen($dir) - 1] != DIRECTORY_SEPARATOR) {
+ $dir .= DIRECTORY_SEPARATOR;
+ }
+
+ if ($handle = opendir($dir)) {
+ while ($item = readdir($handle)) {
+ if (!in_array($item, array('.', '..'))) {
+ if (is_dir($dir . $item)) {
+
+ if (!Auth_OpenID_FileStore::_rmtree($dir . $item)) {
+ return false;
+ }
+ } else if (is_file($dir . $item)) {
+ if (!unlink($dir . $item)) {
+ return false;
+ }
+ }
+ }
+ }
+
+ closedir($handle);
+
+ if (!@rmdir($dir)) {
+ return false;
+ }
+
+ return true;
+ } else {
+ // Couldn't open directory.
+ return false;
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _mkstemp($dir)
+ {
+ foreach (range(0, 4) as $i) {
+ $name = tempnam($dir, "php_openid_filestore_");
+
+ if ($name !== false) {
+ return $name;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @access private
+ */
+ static function _mkdtemp($dir)
+ {
+ foreach (range(0, 4) as $i) {
+ $name = $dir . strval(DIRECTORY_SEPARATOR) . strval(getmypid()) .
+ "-" . strval(rand(1, time()));
+ if (!mkdir($name, 0700)) {
+ return false;
+ } else {
+ return $name;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @access private
+ */
+ function _listdir($dir)
+ {
+ $handle = opendir($dir);
+ $files = array();
+ while (false !== ($filename = readdir($handle))) {
+ if (!in_array($filename, array('.', '..'))) {
+ $files[] = $dir . DIRECTORY_SEPARATOR . $filename;
+ }
+ }
+ return $files;
+ }
+
+ /**
+ * @access private
+ */
+ function _isFilenameSafe($char)
+ {
+ $_Auth_OpenID_filename_allowed = Auth_OpenID_letters .
+ Auth_OpenID_digits . ".";
+ return (strpos($_Auth_OpenID_filename_allowed, $char) !== false);
+ }
+
+ /**
+ * @access private
+ */
+ function _safe64($str)
+ {
+ $h64 = base64_encode(Auth_OpenID_SHA1($str));
+ $h64 = str_replace('+', '_', $h64);
+ $h64 = str_replace('/', '.', $h64);
+ $h64 = str_replace('=', '', $h64);
+ return $h64;
+ }
+
+ /**
+ * @access private
+ */
+ function _filenameEscape($str)
+ {
+ $filename = "";
+ $b = Auth_OpenID::toBytes($str);
+
+ for ($i = 0; $i < count($b); $i++) {
+ $c = $b[$i];
+ if (Auth_OpenID_FileStore::_isFilenameSafe($c)) {
+ $filename .= $c;
+ } else {
+ $filename .= sprintf("_%02X", ord($c));
+ }
+ }
+ return $filename;
+ }
+
+ /**
+ * Attempt to remove a file, returning whether the file existed at
+ * the time of the call.
+ *
+ * @access private
+ * @return bool $result True if the file was present, false if not.
+ */
+ function _removeIfPresent($filename)
+ {
+ return @unlink($filename);
+ }
+
+ function cleanupAssociations()
+ {
+ $removed = 0;
+ foreach ($this->_allAssocs() as $pair) {
+ list($assoc_filename, $assoc) = $pair;
+ if ($assoc->getExpiresIn() == 0) {
+ $this->_removeIfPresent($assoc_filename);
+ $removed += 1;
+ }
+ }
+ return $removed;
+ }
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/HMAC.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/HMAC.php
new file mode 100644
index 000000000..e6c4bdfd9
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/HMAC.php
@@ -0,0 +1,105 @@
+<?php
+
+/**
+ * This is the HMACSHA1 implementation for the OpenID library.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @access private
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+require_once 'Auth/OpenID.php';
+
+/**
+ * SHA1_BLOCKSIZE is this module's SHA1 blocksize used by the fallback
+ * implementation.
+ */
+define('Auth_OpenID_SHA1_BLOCKSIZE', 64);
+
+function Auth_OpenID_SHA1($text)
+{
+ if (function_exists('hash') &&
+ function_exists('hash_algos') &&
+ (in_array('sha1', hash_algos()))) {
+ // PHP 5 case (sometimes): 'hash' available and 'sha1' algo
+ // supported.
+ return hash('sha1', $text, true);
+ } else if (function_exists('sha1')) {
+ // PHP 4 case: 'sha1' available.
+ $hex = sha1($text);
+ $raw = '';
+ for ($i = 0; $i < 40; $i += 2) {
+ $hexcode = substr($hex, $i, 2);
+ $charcode = (int)base_convert($hexcode, 16, 10);
+ $raw .= chr($charcode);
+ }
+ return $raw;
+ } else {
+ // Explode.
+ trigger_error('No SHA1 function found', E_USER_ERROR);
+ }
+}
+
+/**
+ * Compute an HMAC/SHA1 hash.
+ *
+ * @access private
+ * @param string $key The HMAC key
+ * @param string $text The message text to hash
+ * @return string $mac The MAC
+ */
+function Auth_OpenID_HMACSHA1($key, $text)
+{
+ if (Auth_OpenID::bytes($key) > Auth_OpenID_SHA1_BLOCKSIZE) {
+ $key = Auth_OpenID_SHA1($key, true);
+ }
+
+ if (function_exists('hash_hmac') &&
+ function_exists('hash_algos') &&
+ (in_array('sha1', hash_algos()))) {
+ return hash_hmac('sha1', $text, $key, true);
+ }
+ // Home-made solution
+
+ $key = str_pad($key, Auth_OpenID_SHA1_BLOCKSIZE, chr(0x00));
+ $ipad = str_repeat(chr(0x36), Auth_OpenID_SHA1_BLOCKSIZE);
+ $opad = str_repeat(chr(0x5c), Auth_OpenID_SHA1_BLOCKSIZE);
+ $hash1 = Auth_OpenID_SHA1(($key ^ $ipad) . $text, true);
+ $hmac = Auth_OpenID_SHA1(($key ^ $opad) . $hash1, true);
+ return $hmac;
+}
+
+if (function_exists('hash') &&
+ function_exists('hash_algos') &&
+ (in_array('sha256', hash_algos()))) {
+ function Auth_OpenID_SHA256($text)
+ {
+ // PHP 5 case: 'hash' available and 'sha256' algo supported.
+ return hash('sha256', $text, true);
+ }
+ define('Auth_OpenID_SHA256_SUPPORTED', true);
+} else {
+ define('Auth_OpenID_SHA256_SUPPORTED', false);
+}
+
+if (function_exists('hash_hmac') &&
+ function_exists('hash_algos') &&
+ (in_array('sha256', hash_algos()))) {
+
+ function Auth_OpenID_HMACSHA256($key, $text)
+ {
+ // Return raw MAC (not hex string).
+ return hash_hmac('sha256', $text, $key, true);
+ }
+
+ define('Auth_OpenID_HMACSHA256_SUPPORTED', true);
+} else {
+ define('Auth_OpenID_HMACSHA256_SUPPORTED', false);
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/Interface.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/Interface.php
new file mode 100644
index 000000000..eca6b9c50
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/Interface.php
@@ -0,0 +1,196 @@
+<?php
+
+/**
+ * This file specifies the interface for PHP OpenID store implementations.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * This is the interface for the store objects the OpenID library
+ * uses. It is a single class that provides all of the persistence
+ * mechanisms that the OpenID library needs, for both servers and
+ * consumers. If you want to create an SQL-driven store, please see
+ * then {@link Auth_OpenID_SQLStore} class.
+ *
+ * Change: Version 2.0 removed the storeNonce, getAuthKey, and isDumb
+ * methods, and changed the behavior of the useNonce method to support
+ * one-way nonces.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ */
+class Auth_OpenID_OpenIDStore {
+ /**
+ * This method puts an Association object into storage,
+ * retrievable by server URL and handle.
+ *
+ * @param string $server_url The URL of the identity server that
+ * this association is with. Because of the way the server portion
+ * of the library uses this interface, don't assume there are any
+ * limitations on the character set of the input string. In
+ * particular, expect to see unescaped non-url-safe characters in
+ * the server_url field.
+ *
+ * @param Association $association The Association to store.
+ */
+ function storeAssociation($server_url, $association)
+ {
+ trigger_error("Auth_OpenID_OpenIDStore::storeAssociation ".
+ "not implemented", E_USER_ERROR);
+ }
+
+ /*
+ * Remove expired nonces from the store.
+ *
+ * Discards any nonce from storage that is old enough that its
+ * timestamp would not pass useNonce().
+ *
+ * This method is not called in the normal operation of the
+ * library. It provides a way for store admins to keep their
+ * storage from filling up with expired data.
+ *
+ * @return the number of nonces expired
+ */
+ function cleanupNonces()
+ {
+ trigger_error("Auth_OpenID_OpenIDStore::cleanupNonces ".
+ "not implemented", E_USER_ERROR);
+ }
+
+ /*
+ * Remove expired associations from the store.
+ *
+ * This method is not called in the normal operation of the
+ * library. It provides a way for store admins to keep their
+ * storage from filling up with expired data.
+ *
+ * @return the number of associations expired.
+ */
+ function cleanupAssociations()
+ {
+ trigger_error("Auth_OpenID_OpenIDStore::cleanupAssociations ".
+ "not implemented", E_USER_ERROR);
+ }
+
+ /*
+ * Shortcut for cleanupNonces(), cleanupAssociations().
+ *
+ * This method is not called in the normal operation of the
+ * library. It provides a way for store admins to keep their
+ * storage from filling up with expired data.
+ */
+ function cleanup()
+ {
+ return array($this->cleanupNonces(),
+ $this->cleanupAssociations());
+ }
+
+ /**
+ * Report whether this storage supports cleanup
+ */
+ function supportsCleanup()
+ {
+ return true;
+ }
+
+ /**
+ * This method returns an Association object from storage that
+ * matches the server URL and, if specified, handle. It returns
+ * null if no such association is found or if the matching
+ * association is expired.
+ *
+ * If no handle is specified, the store may return any association
+ * which matches the server URL. If multiple associations are
+ * valid, the recommended return value for this method is the one
+ * most recently issued.
+ *
+ * This method is allowed (and encouraged) to garbage collect
+ * expired associations when found. This method must not return
+ * expired associations.
+ *
+ * @param string $server_url The URL of the identity server to get
+ * the association for. Because of the way the server portion of
+ * the library uses this interface, don't assume there are any
+ * limitations on the character set of the input string. In
+ * particular, expect to see unescaped non-url-safe characters in
+ * the server_url field.
+ *
+ * @param mixed $handle This optional parameter is the handle of
+ * the specific association to get. If no specific handle is
+ * provided, any valid association matching the server URL is
+ * returned.
+ *
+ * @return Association The Association for the given identity
+ * server.
+ */
+ function getAssociation($server_url, $handle = null)
+ {
+ trigger_error("Auth_OpenID_OpenIDStore::getAssociation ".
+ "not implemented", E_USER_ERROR);
+ }
+
+ /**
+ * This method removes the matching association if it's found, and
+ * returns whether the association was removed or not.
+ *
+ * @param string $server_url The URL of the identity server the
+ * association to remove belongs to. Because of the way the server
+ * portion of the library uses this interface, don't assume there
+ * are any limitations on the character set of the input
+ * string. In particular, expect to see unescaped non-url-safe
+ * characters in the server_url field.
+ *
+ * @param string $handle This is the handle of the association to
+ * remove. If there isn't an association found that matches both
+ * the given URL and handle, then there was no matching handle
+ * found.
+ *
+ * @return mixed Returns whether or not the given association existed.
+ */
+ function removeAssociation($server_url, $handle)
+ {
+ trigger_error("Auth_OpenID_OpenIDStore::removeAssociation ".
+ "not implemented", E_USER_ERROR);
+ }
+
+ /**
+ * Called when using a nonce.
+ *
+ * This method should return C{True} if the nonce has not been
+ * used before, and store it for a while to make sure nobody
+ * tries to use the same value again. If the nonce has already
+ * been used, return C{False}.
+ *
+ * Change: In earlier versions, round-trip nonces were used and a
+ * nonce was only valid if it had been previously stored with
+ * storeNonce. Version 2.0 uses one-way nonces, requiring a
+ * different implementation here that does not depend on a
+ * storeNonce call. (storeNonce is no longer part of the
+ * interface.
+ *
+ * @param string $nonce The nonce to use.
+ *
+ * @return bool Whether or not the nonce was valid.
+ */
+ function useNonce($server_url, $timestamp, $salt)
+ {
+ trigger_error("Auth_OpenID_OpenIDStore::useNonce ".
+ "not implemented", E_USER_ERROR);
+ }
+
+ /**
+ * Removes all entries from the store; implementation is optional.
+ */
+ function reset()
+ {
+ }
+
+}
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/KVForm.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/KVForm.php
new file mode 100644
index 000000000..dd02661d8
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/KVForm.php
@@ -0,0 +1,111 @@
+<?php
+
+/**
+ * OpenID protocol key-value/comma-newline format parsing and
+ * serialization
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @access private
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Container for key-value/comma-newline OpenID format and parsing
+ */
+class Auth_OpenID_KVForm {
+ /**
+ * Convert an OpenID colon/newline separated string into an
+ * associative array
+ *
+ * @static
+ * @access private
+ */
+ static function toArray($kvs, $strict=false)
+ {
+ $lines = explode("\n", $kvs);
+
+ $last = array_pop($lines);
+ if ($last !== '') {
+ array_push($lines, $last);
+ if ($strict) {
+ return false;
+ }
+ }
+
+ $values = array();
+
+ for ($lineno = 0; $lineno < count($lines); $lineno++) {
+ $line = $lines[$lineno];
+ $kv = explode(':', $line, 2);
+ if (count($kv) != 2) {
+ if ($strict) {
+ return false;
+ }
+ continue;
+ }
+
+ $key = $kv[0];
+ $tkey = trim($key);
+ if ($tkey != $key) {
+ if ($strict) {
+ return false;
+ }
+ }
+
+ $value = $kv[1];
+ $tval = trim($value);
+ if ($tval != $value) {
+ if ($strict) {
+ return false;
+ }
+ }
+
+ $values[$tkey] = $tval;
+ }
+
+ return $values;
+ }
+
+ /**
+ * Convert an array into an OpenID colon/newline separated string
+ *
+ * @static
+ * @access private
+ */
+ static function fromArray($values)
+ {
+ if ($values === null) {
+ return null;
+ }
+
+ ksort($values);
+
+ $serialized = '';
+ foreach ($values as $key => $value) {
+ if (is_array($value)) {
+ list($key, $value) = array($value[0], $value[1]);
+ }
+
+ if (strpos($key, ':') !== false) {
+ return null;
+ }
+
+ if (strpos($key, "\n") !== false) {
+ return null;
+ }
+
+ if (strpos($value, "\n") !== false) {
+ return null;
+ }
+ $serialized .= "$key:$value\n";
+ }
+ return $serialized;
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/MDB2Store.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/MDB2Store.php
new file mode 100644
index 000000000..80024bada
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/MDB2Store.php
@@ -0,0 +1,413 @@
+<?php
+
+/**
+ * SQL-backed OpenID stores for use with PEAR::MDB2.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005 Janrain, Inc.
+ * @license http://www.gnu.org/copyleft/lesser.html LGPL
+ */
+
+require_once 'MDB2.php';
+
+/**
+ * @access private
+ */
+require_once 'Auth/OpenID/Interface.php';
+
+/**
+ * @access private
+ */
+require_once 'Auth/OpenID.php';
+
+/**
+ * @access private
+ */
+require_once 'Auth/OpenID/Nonce.php';
+
+/**
+ * This store uses a PEAR::MDB2 connection to store persistence
+ * information.
+ *
+ * The table names used are determined by the class variables
+ * associations_table_name and nonces_table_name. To change the name
+ * of the tables used, pass new table names into the constructor.
+ *
+ * To create the tables with the proper schema, see the createTables
+ * method.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_MDB2Store extends Auth_OpenID_OpenIDStore {
+ /**
+ * This creates a new MDB2Store instance. It requires an
+ * established database connection be given to it, and it allows
+ * overriding the default table names.
+ *
+ * @param connection $connection This must be an established
+ * connection to a database of the correct type for the SQLStore
+ * subclass you're using. This must be a PEAR::MDB2 connection
+ * handle.
+ *
+ * @param associations_table: This is an optional parameter to
+ * specify the name of the table used for storing associations.
+ * The default value is 'oid_associations'.
+ *
+ * @param nonces_table: This is an optional parameter to specify
+ * the name of the table used for storing nonces. The default
+ * value is 'oid_nonces'.
+ */
+ function Auth_OpenID_MDB2Store($connection,
+ $associations_table = null,
+ $nonces_table = null)
+ {
+ $this->associations_table_name = "oid_associations";
+ $this->nonces_table_name = "oid_nonces";
+
+ // Check the connection object type to be sure it's a PEAR
+ // database connection.
+ if (!is_object($connection) ||
+ !is_subclass_of($connection, 'mdb2_driver_common')) {
+ trigger_error("Auth_OpenID_MDB2Store expected PEAR connection " .
+ "object (got ".get_class($connection).")",
+ E_USER_ERROR);
+ return;
+ }
+
+ $this->connection = $connection;
+
+ // Be sure to set the fetch mode so the results are keyed on
+ // column name instead of column index.
+ $this->connection->setFetchMode(MDB2_FETCHMODE_ASSOC);
+
+ if (PEAR::isError($this->connection->loadModule('Extended'))) {
+ trigger_error("Unable to load MDB2_Extended module", E_USER_ERROR);
+ return;
+ }
+
+ if ($associations_table) {
+ $this->associations_table_name = $associations_table;
+ }
+
+ if ($nonces_table) {
+ $this->nonces_table_name = $nonces_table;
+ }
+
+ $this->max_nonce_age = 6 * 60 * 60;
+ }
+
+ function tableExists($table_name)
+ {
+ return !PEAR::isError($this->connection->query(
+ sprintf("SELECT * FROM %s LIMIT 0",
+ $table_name)));
+ }
+
+ function createTables()
+ {
+ $n = $this->create_nonce_table();
+ $a = $this->create_assoc_table();
+
+ if (!$n || !$a) {
+ return false;
+ }
+ return true;
+ }
+
+ function create_nonce_table()
+ {
+ if (!$this->tableExists($this->nonces_table_name)) {
+ switch ($this->connection->phptype) {
+ case "mysql":
+ case "mysqli":
+ // Custom SQL for MySQL to use InnoDB and variable-
+ // length keys
+ $r = $this->connection->exec(
+ sprintf("CREATE TABLE %s (\n".
+ " server_url VARCHAR(2047) NOT NULL DEFAULT '',\n".
+ " timestamp INTEGER NOT NULL,\n".
+ " salt CHAR(40) NOT NULL,\n".
+ " UNIQUE (server_url(255), timestamp, salt)\n".
+ ") TYPE=InnoDB",
+ $this->nonces_table_name));
+ if (PEAR::isError($r)) {
+ return false;
+ }
+ break;
+ default:
+ if (PEAR::isError(
+ $this->connection->loadModule('Manager'))) {
+ return false;
+ }
+ $fields = array(
+ "server_url" => array(
+ "type" => "text",
+ "length" => 2047,
+ "notnull" => true
+ ),
+ "timestamp" => array(
+ "type" => "integer",
+ "notnull" => true
+ ),
+ "salt" => array(
+ "type" => "text",
+ "length" => 40,
+ "fixed" => true,
+ "notnull" => true
+ )
+ );
+ $constraint = array(
+ "unique" => 1,
+ "fields" => array(
+ "server_url" => true,
+ "timestamp" => true,
+ "salt" => true
+ )
+ );
+
+ $r = $this->connection->createTable($this->nonces_table_name,
+ $fields);
+ if (PEAR::isError($r)) {
+ return false;
+ }
+
+ $r = $this->connection->createConstraint(
+ $this->nonces_table_name,
+ $this->nonces_table_name . "_constraint",
+ $constraint);
+ if (PEAR::isError($r)) {
+ return false;
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ function create_assoc_table()
+ {
+ if (!$this->tableExists($this->associations_table_name)) {
+ switch ($this->connection->phptype) {
+ case "mysql":
+ case "mysqli":
+ // Custom SQL for MySQL to use InnoDB and variable-
+ // length keys
+ $r = $this->connection->exec(
+ sprintf("CREATE TABLE %s(\n".
+ " server_url VARCHAR(2047) NOT NULL DEFAULT '',\n".
+ " handle VARCHAR(255) NOT NULL,\n".
+ " secret BLOB NOT NULL,\n".
+ " issued INTEGER NOT NULL,\n".
+ " lifetime INTEGER NOT NULL,\n".
+ " assoc_type VARCHAR(64) NOT NULL,\n".
+ " PRIMARY KEY (server_url(255), handle)\n".
+ ") TYPE=InnoDB",
+ $this->associations_table_name));
+ if (PEAR::isError($r)) {
+ return false;
+ }
+ break;
+ default:
+ if (PEAR::isError(
+ $this->connection->loadModule('Manager'))) {
+ return false;
+ }
+ $fields = array(
+ "server_url" => array(
+ "type" => "text",
+ "length" => 2047,
+ "notnull" => true
+ ),
+ "handle" => array(
+ "type" => "text",
+ "length" => 255,
+ "notnull" => true
+ ),
+ "secret" => array(
+ "type" => "blob",
+ "length" => "255",
+ "notnull" => true
+ ),
+ "issued" => array(
+ "type" => "integer",
+ "notnull" => true
+ ),
+ "lifetime" => array(
+ "type" => "integer",
+ "notnull" => true
+ ),
+ "assoc_type" => array(
+ "type" => "text",
+ "length" => 64,
+ "notnull" => true
+ )
+ );
+ $options = array(
+ "primary" => array(
+ "server_url" => true,
+ "handle" => true
+ )
+ );
+
+ $r = $this->connection->createTable(
+ $this->associations_table_name,
+ $fields,
+ $options);
+ if (PEAR::isError($r)) {
+ return false;
+ }
+ break;
+ }
+ }
+ return true;
+ }
+
+ function storeAssociation($server_url, $association)
+ {
+ $fields = array(
+ "server_url" => array(
+ "value" => $server_url,
+ "key" => true
+ ),
+ "handle" => array(
+ "value" => $association->handle,
+ "key" => true
+ ),
+ "secret" => array(
+ "value" => $association->secret,
+ "type" => "blob"
+ ),
+ "issued" => array(
+ "value" => $association->issued
+ ),
+ "lifetime" => array(
+ "value" => $association->lifetime
+ ),
+ "assoc_type" => array(
+ "value" => $association->assoc_type
+ )
+ );
+
+ return !PEAR::isError($this->connection->replace(
+ $this->associations_table_name,
+ $fields));
+ }
+
+ function cleanupNonces()
+ {
+ global $Auth_OpenID_SKEW;
+ $v = time() - $Auth_OpenID_SKEW;
+
+ return $this->connection->exec(
+ sprintf("DELETE FROM %s WHERE timestamp < %d",
+ $this->nonces_table_name, $v));
+ }
+
+ function cleanupAssociations()
+ {
+ return $this->connection->exec(
+ sprintf("DELETE FROM %s WHERE issued + lifetime < %d",
+ $this->associations_table_name, time()));
+ }
+
+ function getAssociation($server_url, $handle = null)
+ {
+ $sql = "";
+ $params = null;
+ $types = array(
+ "text",
+ "blob",
+ "integer",
+ "integer",
+ "text"
+ );
+ if ($handle !== null) {
+ $sql = sprintf("SELECT handle, secret, issued, lifetime, assoc_type " .
+ "FROM %s WHERE server_url = ? AND handle = ?",
+ $this->associations_table_name);
+ $params = array($server_url, $handle);
+ } else {
+ $sql = sprintf("SELECT handle, secret, issued, lifetime, assoc_type " .
+ "FROM %s WHERE server_url = ? ORDER BY issued DESC",
+ $this->associations_table_name);
+ $params = array($server_url);
+ }
+
+ $assoc = $this->connection->getRow($sql, $types, $params);
+
+ if (!$assoc || PEAR::isError($assoc)) {
+ return null;
+ } else {
+ $association = new Auth_OpenID_Association($assoc['handle'],
+ stream_get_contents(
+ $assoc['secret']),
+ $assoc['issued'],
+ $assoc['lifetime'],
+ $assoc['assoc_type']);
+ fclose($assoc['secret']);
+ return $association;
+ }
+ }
+
+ function removeAssociation($server_url, $handle)
+ {
+ $r = $this->connection->execParam(
+ sprintf("DELETE FROM %s WHERE server_url = ? AND handle = ?",
+ $this->associations_table_name),
+ array($server_url, $handle));
+
+ if (PEAR::isError($r) || $r == 0) {
+ return false;
+ }
+ return true;
+ }
+
+ function useNonce($server_url, $timestamp, $salt)
+ {
+ global $Auth_OpenID_SKEW;
+
+ if (abs($timestamp - time()) > $Auth_OpenID_SKEW ) {
+ return false;
+ }
+
+ $fields = array(
+ "timestamp" => $timestamp,
+ "salt" => $salt
+ );
+
+ if (!empty($server_url)) {
+ $fields["server_url"] = $server_url;
+ }
+
+ $r = $this->connection->autoExecute(
+ $this->nonces_table_name,
+ $fields,
+ MDB2_AUTOQUERY_INSERT);
+
+ if (PEAR::isError($r)) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Resets the store by removing all records from the store's
+ * tables.
+ */
+ function reset()
+ {
+ $this->connection->query(sprintf("DELETE FROM %s",
+ $this->associations_table_name));
+
+ $this->connection->query(sprintf("DELETE FROM %s",
+ $this->nonces_table_name));
+ }
+
+}
+
+?>
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/MemcachedStore.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/MemcachedStore.php
new file mode 100644
index 000000000..fc10800b1
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/MemcachedStore.php
@@ -0,0 +1,207 @@
+<?php
+
+/**
+ * This file supplies a memcached store backend for OpenID servers and
+ * consumers.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author Artemy Tregubenko <me@arty.name>
+ * @copyright 2008 JanRain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ * Contributed by Open Web Technologies <http://openwebtech.ru/>
+ */
+
+/**
+ * Import the interface for creating a new store class.
+ */
+require_once 'Auth/OpenID/Interface.php';
+
+/**
+ * This is a memcached-based store for OpenID associations and
+ * nonces.
+ *
+ * As memcache has limit of 250 chars for key length,
+ * server_url, handle and salt are hashed with sha1().
+ *
+ * Most of the methods of this class are implementation details.
+ * People wishing to just use this store need only pay attention to
+ * the constructor.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_MemcachedStore extends Auth_OpenID_OpenIDStore {
+
+ /**
+ * Initializes a new {@link Auth_OpenID_MemcachedStore} instance.
+ * Just saves memcached object as property.
+ *
+ * @param resource connection Memcache connection resourse
+ */
+ function Auth_OpenID_MemcachedStore($connection, $compress = false)
+ {
+ $this->connection = $connection;
+ $this->compress = $compress ? MEMCACHE_COMPRESSED : 0;
+ }
+
+ /**
+ * Store association until its expiration time in memcached.
+ * Overwrites any existing association with same server_url and
+ * handle. Handles list of associations for every server.
+ */
+ function storeAssociation($server_url, $association)
+ {
+ // create memcached keys for association itself
+ // and list of associations for this server
+ $associationKey = $this->associationKey($server_url,
+ $association->handle);
+ $serverKey = $this->associationServerKey($server_url);
+
+ // get list of associations
+ $serverAssociations = $this->connection->get($serverKey);
+
+ // if no such list, initialize it with empty array
+ if (!$serverAssociations) {
+ $serverAssociations = array();
+ }
+ // and store given association key in it
+ $serverAssociations[$association->issued] = $associationKey;
+
+ // save associations' keys list
+ $this->connection->set(
+ $serverKey,
+ $serverAssociations,
+ $this->compress
+ );
+ // save association itself
+ $this->connection->set(
+ $associationKey,
+ $association,
+ $this->compress,
+ $association->issued + $association->lifetime);
+ }
+
+ /**
+ * Read association from memcached. If no handle given
+ * and multiple associations found, returns latest issued
+ */
+ function getAssociation($server_url, $handle = null)
+ {
+ // simple case: handle given
+ if ($handle !== null) {
+ // get association, return null if failed
+ $association = $this->connection->get(
+ $this->associationKey($server_url, $handle));
+ return $association ? $association : null;
+ }
+
+ // no handle given, working with list
+ // create key for list of associations
+ $serverKey = $this->associationServerKey($server_url);
+
+ // get list of associations
+ $serverAssociations = $this->connection->get($serverKey);
+ // return null if failed or got empty list
+ if (!$serverAssociations) {
+ return null;
+ }
+
+ // get key of most recently issued association
+ $keys = array_keys($serverAssociations);
+ sort($keys);
+ $lastKey = $serverAssociations[array_pop($keys)];
+
+ // get association, return null if failed
+ $association = $this->connection->get($lastKey);
+ return $association ? $association : null;
+ }
+
+ /**
+ * Immediately delete association from memcache.
+ */
+ function removeAssociation($server_url, $handle)
+ {
+ // create memcached keys for association itself
+ // and list of associations for this server
+ $serverKey = $this->associationServerKey($server_url);
+ $associationKey = $this->associationKey($server_url,
+ $handle);
+
+ // get list of associations
+ $serverAssociations = $this->connection->get($serverKey);
+ // return null if failed or got empty list
+ if (!$serverAssociations) {
+ return false;
+ }
+
+ // ensure that given association key exists in list
+ $serverAssociations = array_flip($serverAssociations);
+ if (!array_key_exists($associationKey, $serverAssociations)) {
+ return false;
+ }
+
+ // remove given association key from list
+ unset($serverAssociations[$associationKey]);
+ $serverAssociations = array_flip($serverAssociations);
+
+ // save updated list
+ $this->connection->set(
+ $serverKey,
+ $serverAssociations,
+ $this->compress
+ );
+
+ // delete association
+ return $this->connection->delete($associationKey);
+ }
+
+ /**
+ * Create nonce for server and salt, expiring after
+ * $Auth_OpenID_SKEW seconds.
+ */
+ function useNonce($server_url, $timestamp, $salt)
+ {
+ global $Auth_OpenID_SKEW;
+
+ // save one request to memcache when nonce obviously expired
+ if (abs($timestamp - time()) > $Auth_OpenID_SKEW) {
+ return false;
+ }
+
+ // returns false when nonce already exists
+ // otherwise adds nonce
+ return $this->connection->add(
+ 'openid_nonce_' . sha1($server_url) . '_' . sha1($salt),
+ 1, // any value here
+ $this->compress,
+ $Auth_OpenID_SKEW);
+ }
+
+ /**
+ * Memcache key is prefixed with 'openid_association_' string.
+ */
+ function associationKey($server_url, $handle = null)
+ {
+ return 'openid_association_' . sha1($server_url) . '_' . sha1($handle);
+ }
+
+ /**
+ * Memcache key is prefixed with 'openid_association_' string.
+ */
+ function associationServerKey($server_url)
+ {
+ return 'openid_association_server_' . sha1($server_url);
+ }
+
+ /**
+ * Report that this storage doesn't support cleanup
+ */
+ function supportsCleanup()
+ {
+ return false;
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/Message.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/Message.php
new file mode 100644
index 000000000..9a5b20d0a
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/Message.php
@@ -0,0 +1,920 @@
+<?php
+
+/**
+ * Extension argument processing code
+ *
+ * @package OpenID
+ */
+
+/**
+ * Import tools needed to deal with messages.
+ */
+require_once 'Auth/OpenID.php';
+require_once 'Auth/OpenID/KVForm.php';
+require_once 'Auth/Yadis/XML.php';
+require_once 'Auth/OpenID/Consumer.php'; // For Auth_OpenID_FailureResponse
+
+// This doesn't REALLY belong here, but where is better?
+define('Auth_OpenID_IDENTIFIER_SELECT',
+ "http://specs.openid.net/auth/2.0/identifier_select");
+
+// URI for Simple Registration extension, the only commonly deployed
+// OpenID 1.x extension, and so a special case
+define('Auth_OpenID_SREG_URI', 'http://openid.net/sreg/1.0');
+
+// The OpenID 1.X namespace URI
+define('Auth_OpenID_OPENID1_NS', 'http://openid.net/signon/1.0');
+define('Auth_OpenID_THE_OTHER_OPENID1_NS', 'http://openid.net/signon/1.1');
+
+function Auth_OpenID_isOpenID1($ns)
+{
+ return ($ns == Auth_OpenID_THE_OTHER_OPENID1_NS) ||
+ ($ns == Auth_OpenID_OPENID1_NS);
+}
+
+// The OpenID 2.0 namespace URI
+define('Auth_OpenID_OPENID2_NS', 'http://specs.openid.net/auth/2.0');
+
+// The namespace consisting of pairs with keys that are prefixed with
+// "openid." but not in another namespace.
+define('Auth_OpenID_NULL_NAMESPACE', 'Null namespace');
+
+// The null namespace, when it is an allowed OpenID namespace
+define('Auth_OpenID_OPENID_NS', 'OpenID namespace');
+
+// The top-level namespace, excluding all pairs with keys that start
+// with "openid."
+define('Auth_OpenID_BARE_NS', 'Bare namespace');
+
+// Sentinel for Message implementation to indicate that getArg should
+// return null instead of returning a default.
+define('Auth_OpenID_NO_DEFAULT', 'NO DEFAULT ALLOWED');
+
+// Limit, in bytes, of identity provider and return_to URLs, including
+// response payload. See OpenID 1.1 specification, Appendix D.
+define('Auth_OpenID_OPENID1_URL_LIMIT', 2047);
+
+// All OpenID protocol fields. Used to check namespace aliases.
+global $Auth_OpenID_OPENID_PROTOCOL_FIELDS;
+$Auth_OpenID_OPENID_PROTOCOL_FIELDS = array(
+ 'ns', 'mode', 'error', 'return_to', 'contact', 'reference',
+ 'signed', 'assoc_type', 'session_type', 'dh_modulus', 'dh_gen',
+ 'dh_consumer_public', 'claimed_id', 'identity', 'realm',
+ 'invalidate_handle', 'op_endpoint', 'response_nonce', 'sig',
+ 'assoc_handle', 'trust_root', 'openid');
+
+// Global namespace / alias registration map. See
+// Auth_OpenID_registerNamespaceAlias.
+global $Auth_OpenID_registered_aliases;
+$Auth_OpenID_registered_aliases = array();
+
+/**
+ * Registers a (namespace URI, alias) mapping in a global namespace
+ * alias map. Raises NamespaceAliasRegistrationError if either the
+ * namespace URI or alias has already been registered with a different
+ * value. This function is required if you want to use a namespace
+ * with an OpenID 1 message.
+ */
+function Auth_OpenID_registerNamespaceAlias($namespace_uri, $alias)
+{
+ global $Auth_OpenID_registered_aliases;
+
+ if (Auth_OpenID::arrayGet($Auth_OpenID_registered_aliases,
+ $alias) == $namespace_uri) {
+ return true;
+ }
+
+ if (in_array($namespace_uri,
+ array_values($Auth_OpenID_registered_aliases))) {
+ return false;
+ }
+
+ if (in_array($alias, array_keys($Auth_OpenID_registered_aliases))) {
+ return false;
+ }
+
+ $Auth_OpenID_registered_aliases[$alias] = $namespace_uri;
+ return true;
+}
+
+/**
+ * Removes a (namespace_uri, alias) registration from the global
+ * namespace alias map. Returns true if the removal succeeded; false
+ * if not (if the mapping did not exist).
+ */
+function Auth_OpenID_removeNamespaceAlias($namespace_uri, $alias)
+{
+ global $Auth_OpenID_registered_aliases;
+
+ if (Auth_OpenID::arrayGet($Auth_OpenID_registered_aliases,
+ $alias) === $namespace_uri) {
+ unset($Auth_OpenID_registered_aliases[$alias]);
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * An Auth_OpenID_Mapping maintains a mapping from arbitrary keys to
+ * arbitrary values. (This is unlike an ordinary PHP array, whose
+ * keys may be only simple scalars.)
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_Mapping {
+ /**
+ * Initialize a mapping. If $classic_array is specified, its keys
+ * and values are used to populate the mapping.
+ */
+ function Auth_OpenID_Mapping($classic_array = null)
+ {
+ $this->keys = array();
+ $this->values = array();
+
+ if (is_array($classic_array)) {
+ foreach ($classic_array as $key => $value) {
+ $this->set($key, $value);
+ }
+ }
+ }
+
+ /**
+ * Returns true if $thing is an Auth_OpenID_Mapping object; false
+ * if not.
+ */
+ static function isA($thing)
+ {
+ return (is_object($thing) &&
+ strtolower(get_class($thing)) == 'auth_openid_mapping');
+ }
+
+ /**
+ * Returns an array of the keys in the mapping.
+ */
+ function keys()
+ {
+ return $this->keys;
+ }
+
+ /**
+ * Returns an array of values in the mapping.
+ */
+ function values()
+ {
+ return $this->values;
+ }
+
+ /**
+ * Returns an array of (key, value) pairs in the mapping.
+ */
+ function items()
+ {
+ $temp = array();
+
+ for ($i = 0; $i < count($this->keys); $i++) {
+ $temp[] = array($this->keys[$i],
+ $this->values[$i]);
+ }
+ return $temp;
+ }
+
+ /**
+ * Returns the "length" of the mapping, or the number of keys.
+ */
+ function len()
+ {
+ return count($this->keys);
+ }
+
+ /**
+ * Sets a key-value pair in the mapping. If the key already
+ * exists, its value is replaced with the new value.
+ */
+ function set($key, $value)
+ {
+ $index = array_search($key, $this->keys);
+
+ if ($index !== false) {
+ $this->values[$index] = $value;
+ } else {
+ $this->keys[] = $key;
+ $this->values[] = $value;
+ }
+ }
+
+ /**
+ * Gets a specified value from the mapping, associated with the
+ * specified key. If the key does not exist in the mapping,
+ * $default is returned instead.
+ */
+ function get($key, $default = null)
+ {
+ $index = array_search($key, $this->keys);
+
+ if ($index !== false) {
+ return $this->values[$index];
+ } else {
+ return $default;
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _reflow()
+ {
+ // PHP is broken yet again. Sort the arrays to remove the
+ // hole in the numeric indexes that make up the array.
+ $old_keys = $this->keys;
+ $old_values = $this->values;
+
+ $this->keys = array();
+ $this->values = array();
+
+ foreach ($old_keys as $k) {
+ $this->keys[] = $k;
+ }
+
+ foreach ($old_values as $v) {
+ $this->values[] = $v;
+ }
+ }
+
+ /**
+ * Deletes a key-value pair from the mapping with the specified
+ * key.
+ */
+ function del($key)
+ {
+ $index = array_search($key, $this->keys);
+
+ if ($index !== false) {
+ unset($this->keys[$index]);
+ unset($this->values[$index]);
+ $this->_reflow();
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Returns true if the specified value has a key in the mapping;
+ * false if not.
+ */
+ function contains($value)
+ {
+ return (array_search($value, $this->keys) !== false);
+ }
+}
+
+/**
+ * Maintains a bijective map between namespace uris and aliases.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_NamespaceMap {
+ function Auth_OpenID_NamespaceMap()
+ {
+ $this->alias_to_namespace = new Auth_OpenID_Mapping();
+ $this->namespace_to_alias = new Auth_OpenID_Mapping();
+ $this->implicit_namespaces = array();
+ }
+
+ function getAlias($namespace_uri)
+ {
+ return $this->namespace_to_alias->get($namespace_uri);
+ }
+
+ function getNamespaceURI($alias)
+ {
+ return $this->alias_to_namespace->get($alias);
+ }
+
+ function iterNamespaceURIs()
+ {
+ // Return an iterator over the namespace URIs
+ return $this->namespace_to_alias->keys();
+ }
+
+ function iterAliases()
+ {
+ // Return an iterator over the aliases"""
+ return $this->alias_to_namespace->keys();
+ }
+
+ function iteritems()
+ {
+ return $this->namespace_to_alias->items();
+ }
+
+ function isImplicit($namespace_uri)
+ {
+ return in_array($namespace_uri, $this->implicit_namespaces);
+ }
+
+ function addAlias($namespace_uri, $desired_alias, $implicit=false)
+ {
+ // Add an alias from this namespace URI to the desired alias
+ global $Auth_OpenID_OPENID_PROTOCOL_FIELDS;
+
+ // Check that desired_alias is not an openid protocol field as
+ // per the spec.
+ if (in_array($desired_alias, $Auth_OpenID_OPENID_PROTOCOL_FIELDS)) {
+ Auth_OpenID::log("\"%s\" is not an allowed namespace alias",
+ $desired_alias);
+ return null;
+ }
+
+ // Check that desired_alias does not contain a period as per
+ // the spec.
+ if (strpos($desired_alias, '.') !== false) {
+ Auth_OpenID::log('"%s" must not contain a dot', $desired_alias);
+ return null;
+ }
+
+ // Check that there is not a namespace already defined for the
+ // desired alias
+ $current_namespace_uri =
+ $this->alias_to_namespace->get($desired_alias);
+
+ if (($current_namespace_uri !== null) &&
+ ($current_namespace_uri != $namespace_uri)) {
+ Auth_OpenID::log('Cannot map "%s" because previous mapping exists',
+ $namespace_uri);
+ return null;
+ }
+
+ // Check that there is not already a (different) alias for
+ // this namespace URI
+ $alias = $this->namespace_to_alias->get($namespace_uri);
+
+ if (($alias !== null) && ($alias != $desired_alias)) {
+ Auth_OpenID::log('Cannot map %s to alias %s. ' .
+ 'It is already mapped to alias %s',
+ $namespace_uri, $desired_alias, $alias);
+ return null;
+ }
+
+ assert((Auth_OpenID_NULL_NAMESPACE === $desired_alias) ||
+ is_string($desired_alias));
+
+ $this->alias_to_namespace->set($desired_alias, $namespace_uri);
+ $this->namespace_to_alias->set($namespace_uri, $desired_alias);
+ if ($implicit) {
+ array_push($this->implicit_namespaces, $namespace_uri);
+ }
+
+ return $desired_alias;
+ }
+
+ function add($namespace_uri)
+ {
+ // Add this namespace URI to the mapping, without caring what
+ // alias it ends up with
+
+ // See if this namespace is already mapped to an alias
+ $alias = $this->namespace_to_alias->get($namespace_uri);
+
+ if ($alias !== null) {
+ return $alias;
+ }
+
+ // Fall back to generating a numerical alias
+ $i = 0;
+ while (1) {
+ $alias = 'ext' . strval($i);
+ if ($this->addAlias($namespace_uri, $alias) === null) {
+ $i += 1;
+ } else {
+ return $alias;
+ }
+ }
+
+ // Should NEVER be reached!
+ return null;
+ }
+
+ function contains($namespace_uri)
+ {
+ return $this->isDefined($namespace_uri);
+ }
+
+ function isDefined($namespace_uri)
+ {
+ return $this->namespace_to_alias->contains($namespace_uri);
+ }
+}
+
+/**
+ * In the implementation of this object, null represents the global
+ * namespace as well as a namespace with no key.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_Message {
+
+ function Auth_OpenID_Message($openid_namespace = null)
+ {
+ // Create an empty Message
+ $this->allowed_openid_namespaces = array(
+ Auth_OpenID_OPENID1_NS,
+ Auth_OpenID_THE_OTHER_OPENID1_NS,
+ Auth_OpenID_OPENID2_NS);
+
+ $this->args = new Auth_OpenID_Mapping();
+ $this->namespaces = new Auth_OpenID_NamespaceMap();
+ if ($openid_namespace === null) {
+ $this->_openid_ns_uri = null;
+ } else {
+ $implicit = Auth_OpenID_isOpenID1($openid_namespace);
+ $this->setOpenIDNamespace($openid_namespace, $implicit);
+ }
+ }
+
+ function isOpenID1()
+ {
+ return Auth_OpenID_isOpenID1($this->getOpenIDNamespace());
+ }
+
+ function isOpenID2()
+ {
+ return $this->getOpenIDNamespace() == Auth_OpenID_OPENID2_NS;
+ }
+
+ static function fromPostArgs($args)
+ {
+ // Construct a Message containing a set of POST arguments
+ $obj = new Auth_OpenID_Message();
+
+ // Partition into "openid." args and bare args
+ $openid_args = array();
+ foreach ($args as $key => $value) {
+
+ if (is_array($value)) {
+ return null;
+ }
+
+ $parts = explode('.', $key, 2);
+
+ if (count($parts) == 2) {
+ list($prefix, $rest) = $parts;
+ } else {
+ $prefix = null;
+ }
+
+ if ($prefix != 'openid') {
+ $obj->args->set(array(Auth_OpenID_BARE_NS, $key), $value);
+ } else {
+ $openid_args[$rest] = $value;
+ }
+ }
+
+ if ($obj->_fromOpenIDArgs($openid_args)) {
+ return $obj;
+ } else {
+ return null;
+ }
+ }
+
+ static function fromOpenIDArgs($openid_args)
+ {
+ // Takes an array.
+
+ // Construct a Message from a parsed KVForm message
+ $obj = new Auth_OpenID_Message();
+ if ($obj->_fromOpenIDArgs($openid_args)) {
+ return $obj;
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _fromOpenIDArgs($openid_args)
+ {
+ global $Auth_OpenID_registered_aliases;
+
+ // Takes an Auth_OpenID_Mapping instance OR an array.
+
+ if (!Auth_OpenID_Mapping::isA($openid_args)) {
+ $openid_args = new Auth_OpenID_Mapping($openid_args);
+ }
+
+ $ns_args = array();
+
+ // Resolve namespaces
+ foreach ($openid_args->items() as $pair) {
+ list($rest, $value) = $pair;
+
+ $parts = explode('.', $rest, 2);
+
+ if (count($parts) == 2) {
+ list($ns_alias, $ns_key) = $parts;
+ } else {
+ $ns_alias = Auth_OpenID_NULL_NAMESPACE;
+ $ns_key = $rest;
+ }
+
+ if ($ns_alias == 'ns') {
+ if ($this->namespaces->addAlias($value, $ns_key) === null) {
+ return false;
+ }
+ } else if (($ns_alias == Auth_OpenID_NULL_NAMESPACE) &&
+ ($ns_key == 'ns')) {
+ // null namespace
+ if ($this->setOpenIDNamespace($value, false) === false) {
+ return false;
+ }
+ } else {
+ $ns_args[] = array($ns_alias, $ns_key, $value);
+ }
+ }
+
+ if (!$this->getOpenIDNamespace()) {
+ if ($this->setOpenIDNamespace(Auth_OpenID_OPENID1_NS, true) ===
+ false) {
+ return false;
+ }
+ }
+
+ // Actually put the pairs into the appropriate namespaces
+ foreach ($ns_args as $triple) {
+ list($ns_alias, $ns_key, $value) = $triple;
+ $ns_uri = $this->namespaces->getNamespaceURI($ns_alias);
+ if ($ns_uri === null) {
+ $ns_uri = $this->_getDefaultNamespace($ns_alias);
+ if ($ns_uri === null) {
+
+ $ns_uri = Auth_OpenID_OPENID_NS;
+ $ns_key = sprintf('%s.%s', $ns_alias, $ns_key);
+ } else {
+ $this->namespaces->addAlias($ns_uri, $ns_alias, true);
+ }
+ }
+
+ $this->setArg($ns_uri, $ns_key, $value);
+ }
+
+ return true;
+ }
+
+ function _getDefaultNamespace($mystery_alias)
+ {
+ global $Auth_OpenID_registered_aliases;
+ if ($this->isOpenID1()) {
+ return @$Auth_OpenID_registered_aliases[$mystery_alias];
+ }
+ return null;
+ }
+
+ function setOpenIDNamespace($openid_ns_uri, $implicit)
+ {
+ if (!in_array($openid_ns_uri, $this->allowed_openid_namespaces)) {
+ Auth_OpenID::log('Invalid null namespace: "%s"', $openid_ns_uri);
+ return false;
+ }
+
+ $succeeded = $this->namespaces->addAlias($openid_ns_uri,
+ Auth_OpenID_NULL_NAMESPACE,
+ $implicit);
+ if ($succeeded === false) {
+ return false;
+ }
+
+ $this->_openid_ns_uri = $openid_ns_uri;
+
+ return true;
+ }
+
+ function getOpenIDNamespace()
+ {
+ return $this->_openid_ns_uri;
+ }
+
+ static function fromKVForm($kvform_string)
+ {
+ // Create a Message from a KVForm string
+ return Auth_OpenID_Message::fromOpenIDArgs(
+ Auth_OpenID_KVForm::toArray($kvform_string));
+ }
+
+ function copy()
+ {
+ return $this;
+ }
+
+ function toPostArgs()
+ {
+ // Return all arguments with openid. in front of namespaced
+ // arguments.
+
+ $args = array();
+
+ // Add namespace definitions to the output
+ foreach ($this->namespaces->iteritems() as $pair) {
+ list($ns_uri, $alias) = $pair;
+ if ($this->namespaces->isImplicit($ns_uri)) {
+ continue;
+ }
+ if ($alias == Auth_OpenID_NULL_NAMESPACE) {
+ $ns_key = 'openid.ns';
+ } else {
+ $ns_key = 'openid.ns.' . $alias;
+ }
+ $args[$ns_key] = $ns_uri;
+ }
+
+ foreach ($this->args->items() as $pair) {
+ list($ns_parts, $value) = $pair;
+ list($ns_uri, $ns_key) = $ns_parts;
+ $key = $this->getKey($ns_uri, $ns_key);
+ $args[$key] = $value;
+ }
+
+ return $args;
+ }
+
+ function toArgs()
+ {
+ // Return all namespaced arguments, failing if any
+ // non-namespaced arguments exist.
+ $post_args = $this->toPostArgs();
+ $kvargs = array();
+ foreach ($post_args as $k => $v) {
+ if (strpos($k, 'openid.') !== 0) {
+ // raise ValueError(
+ // 'This message can only be encoded as a POST, because it '
+ // 'contains arguments that are not prefixed with "openid."')
+ return null;
+ } else {
+ $kvargs[substr($k, 7)] = $v;
+ }
+ }
+
+ return $kvargs;
+ }
+
+ function toFormMarkup($action_url, $form_tag_attrs = null,
+ $submit_text = "Continue")
+ {
+ $form = "<form accept-charset=\"UTF-8\" ".
+ "enctype=\"application/x-www-form-urlencoded\"";
+
+ if (!$form_tag_attrs) {
+ $form_tag_attrs = array();
+ }
+
+ $form_tag_attrs['action'] = $action_url;
+ $form_tag_attrs['method'] = 'post';
+
+ unset($form_tag_attrs['enctype']);
+ unset($form_tag_attrs['accept-charset']);
+
+ if ($form_tag_attrs) {
+ foreach ($form_tag_attrs as $name => $attr) {
+ $form .= sprintf(" %s=\"%s\"", $name, $attr);
+ }
+ }
+
+ $form .= ">\n";
+
+ foreach ($this->toPostArgs() as $name => $value) {
+ $form .= sprintf(
+ "<input type=\"hidden\" name=\"%s\" value=\"%s\" />\n",
+ $name, urldecode($value));
+ }
+
+ $form .= sprintf("<input type=\"submit\" value=\"%s\" />\n",
+ $submit_text);
+
+ $form .= "</form>\n";
+
+ return $form;
+ }
+
+ function toURL($base_url)
+ {
+ // Generate a GET URL with the parameters in this message
+ // attached as query parameters.
+ return Auth_OpenID::appendArgs($base_url, $this->toPostArgs());
+ }
+
+ function toKVForm()
+ {
+ // Generate a KVForm string that contains the parameters in
+ // this message. This will fail if the message contains
+ // arguments outside of the 'openid.' prefix.
+ return Auth_OpenID_KVForm::fromArray($this->toArgs());
+ }
+
+ function toURLEncoded()
+ {
+ // Generate an x-www-urlencoded string
+ $args = array();
+
+ foreach ($this->toPostArgs() as $k => $v) {
+ $args[] = array($k, $v);
+ }
+
+ sort($args);
+ return Auth_OpenID::httpBuildQuery($args);
+ }
+
+ /**
+ * @access private
+ */
+ function _fixNS($namespace)
+ {
+ // Convert an input value into the internally used values of
+ // this object
+
+ if ($namespace == Auth_OpenID_OPENID_NS) {
+ if ($this->_openid_ns_uri === null) {
+ return new Auth_OpenID_FailureResponse(null,
+ 'OpenID namespace not set');
+ } else {
+ $namespace = $this->_openid_ns_uri;
+ }
+ }
+
+ if (($namespace != Auth_OpenID_BARE_NS) &&
+ (!is_string($namespace))) {
+ //TypeError
+ $err_msg = sprintf("Namespace must be Auth_OpenID_BARE_NS, ".
+ "Auth_OpenID_OPENID_NS or a string. got %s",
+ print_r($namespace, true));
+ return new Auth_OpenID_FailureResponse(null, $err_msg);
+ }
+
+ if (($namespace != Auth_OpenID_BARE_NS) &&
+ (strpos($namespace, ':') === false)) {
+ // fmt = 'OpenID 2.0 namespace identifiers SHOULD be URIs. Got %r'
+ // warnings.warn(fmt % (namespace,), DeprecationWarning)
+
+ if ($namespace == 'sreg') {
+ // fmt = 'Using %r instead of "sreg" as namespace'
+ // warnings.warn(fmt % (SREG_URI,), DeprecationWarning,)
+ return Auth_OpenID_SREG_URI;
+ }
+ }
+
+ return $namespace;
+ }
+
+ function hasKey($namespace, $ns_key)
+ {
+ $namespace = $this->_fixNS($namespace);
+ if (Auth_OpenID::isFailure($namespace)) {
+ // XXX log me
+ return false;
+ } else {
+ return $this->args->contains(array($namespace, $ns_key));
+ }
+ }
+
+ function getKey($namespace, $ns_key)
+ {
+ // Get the key for a particular namespaced argument
+ $namespace = $this->_fixNS($namespace);
+ if (Auth_OpenID::isFailure($namespace)) {
+ return $namespace;
+ }
+ if ($namespace == Auth_OpenID_BARE_NS) {
+ return $ns_key;
+ }
+
+ $ns_alias = $this->namespaces->getAlias($namespace);
+
+ // No alias is defined, so no key can exist
+ if ($ns_alias === null) {
+ return null;
+ }
+
+ if ($ns_alias == Auth_OpenID_NULL_NAMESPACE) {
+ $tail = $ns_key;
+ } else {
+ $tail = sprintf('%s.%s', $ns_alias, $ns_key);
+ }
+
+ return 'openid.' . $tail;
+ }
+
+ function getArg($namespace, $key, $default = null)
+ {
+ // Get a value for a namespaced key.
+ $namespace = $this->_fixNS($namespace);
+
+ if (Auth_OpenID::isFailure($namespace)) {
+ return $namespace;
+ } else {
+ if ((!$this->args->contains(array($namespace, $key))) &&
+ ($default == Auth_OpenID_NO_DEFAULT)) {
+ $err_msg = sprintf("Namespace %s missing required field %s",
+ $namespace, $key);
+ return new Auth_OpenID_FailureResponse(null, $err_msg);
+ } else {
+ return $this->args->get(array($namespace, $key), $default);
+ }
+ }
+ }
+
+ function getArgs($namespace)
+ {
+ // Get the arguments that are defined for this namespace URI
+
+ $namespace = $this->_fixNS($namespace);
+ if (Auth_OpenID::isFailure($namespace)) {
+ return $namespace;
+ } else {
+ $stuff = array();
+ foreach ($this->args->items() as $pair) {
+ list($key, $value) = $pair;
+ list($pair_ns, $ns_key) = $key;
+ if ($pair_ns == $namespace) {
+ $stuff[$ns_key] = $value;
+ }
+ }
+
+ return $stuff;
+ }
+ }
+
+ function updateArgs($namespace, $updates)
+ {
+ // Set multiple key/value pairs in one call
+
+ $namespace = $this->_fixNS($namespace);
+
+ if (Auth_OpenID::isFailure($namespace)) {
+ return $namespace;
+ } else {
+ foreach ($updates as $k => $v) {
+ $this->setArg($namespace, $k, $v);
+ }
+ return true;
+ }
+ }
+
+ function setArg($namespace, $key, $value)
+ {
+ // Set a single argument in this namespace
+ $namespace = $this->_fixNS($namespace);
+
+ if (Auth_OpenID::isFailure($namespace)) {
+ return $namespace;
+ } else {
+ $this->args->set(array($namespace, $key), $value);
+ if ($namespace !== Auth_OpenID_BARE_NS) {
+ $this->namespaces->add($namespace);
+ }
+ return true;
+ }
+ }
+
+ function delArg($namespace, $key)
+ {
+ $namespace = $this->_fixNS($namespace);
+
+ if (Auth_OpenID::isFailure($namespace)) {
+ return $namespace;
+ } else {
+ return $this->args->del(array($namespace, $key));
+ }
+ }
+
+ function getAliasedArg($aliased_key, $default = null)
+ {
+ if ($aliased_key == 'ns') {
+ // Return the namespace URI for the OpenID namespace
+ return $this->getOpenIDNamespace();
+ }
+
+ $parts = explode('.', $aliased_key, 2);
+
+ if (count($parts) != 2) {
+ $ns = null;
+ } else {
+ list($alias, $key) = $parts;
+
+ if ($alias == 'ns') {
+ // Return the namespace URI for a namespace alias
+ // parameter.
+ return $this->namespaces->getNamespaceURI($key);
+ } else {
+ $ns = $this->namespaces->getNamespaceURI($alias);
+ }
+ }
+
+ if ($ns === null) {
+ $key = $aliased_key;
+ $ns = $this->getOpenIDNamespace();
+ }
+
+ return $this->getArg($ns, $key, $default);
+ }
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/MySQLStore.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/MySQLStore.php
new file mode 100644
index 000000000..810f059f1
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/MySQLStore.php
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * A MySQL store.
+ *
+ * @package OpenID
+ */
+
+/**
+ * Require the base class file.
+ */
+require_once "Auth/OpenID/SQLStore.php";
+
+/**
+ * An SQL store that uses MySQL as its backend.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_MySQLStore extends Auth_OpenID_SQLStore {
+ /**
+ * @access private
+ */
+ function setSQL()
+ {
+ $this->sql['nonce_table'] =
+ "CREATE TABLE %s (\n".
+ " server_url VARCHAR(2047) NOT NULL,\n".
+ " timestamp INTEGER NOT NULL,\n".
+ " salt CHAR(40) NOT NULL,\n".
+ " UNIQUE (server_url(255), timestamp, salt)\n".
+ ") ENGINE=InnoDB";
+
+ $this->sql['assoc_table'] =
+ "CREATE TABLE %s (\n".
+ " server_url BLOB NOT NULL,\n".
+ " handle VARCHAR(255) NOT NULL,\n".
+ " secret BLOB NOT NULL,\n".
+ " issued INTEGER NOT NULL,\n".
+ " lifetime INTEGER NOT NULL,\n".
+ " assoc_type VARCHAR(64) NOT NULL,\n".
+ " PRIMARY KEY (server_url(255), handle)\n".
+ ") ENGINE=InnoDB";
+
+ $this->sql['set_assoc'] =
+ "REPLACE INTO %s (server_url, handle, secret, issued,\n".
+ " lifetime, assoc_type) VALUES (?, ?, !, ?, ?, ?)";
+
+ $this->sql['get_assocs'] =
+ "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ".
+ "WHERE server_url = ?";
+
+ $this->sql['get_assoc'] =
+ "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ".
+ "WHERE server_url = ? AND handle = ?";
+
+ $this->sql['remove_assoc'] =
+ "DELETE FROM %s WHERE server_url = ? AND handle = ?";
+
+ $this->sql['add_nonce'] =
+ "INSERT INTO %s (server_url, timestamp, salt) VALUES (?, ?, ?)";
+
+ $this->sql['clean_nonce'] =
+ "DELETE FROM %s WHERE timestamp < ?";
+
+ $this->sql['clean_assoc'] =
+ "DELETE FROM %s WHERE issued + lifetime < ?";
+ }
+
+ /**
+ * @access private
+ */
+ function blobEncode($blob)
+ {
+ return "0x" . bin2hex($blob);
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/Nonce.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/Nonce.php
new file mode 100644
index 000000000..b83c5911f
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/Nonce.php
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * Nonce-related functionality.
+ *
+ * @package OpenID
+ */
+
+/**
+ * Need CryptUtil to generate random strings.
+ */
+require_once 'Auth/OpenID/CryptUtil.php';
+
+/**
+ * This is the characters that the nonces are made from.
+ */
+define('Auth_OpenID_Nonce_CHRS',"abcdefghijklmnopqrstuvwxyz" .
+ "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
+
+// Keep nonces for five hours (allow five hours for the combination of
+// request time and clock skew). This is probably way more than is
+// necessary, but there is not much overhead in storing nonces.
+global $Auth_OpenID_SKEW;
+$Auth_OpenID_SKEW = 60 * 60 * 5;
+
+define('Auth_OpenID_Nonce_REGEX',
+ '/(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)Z(.*)/');
+
+define('Auth_OpenID_Nonce_TIME_FMT',
+ '%Y-%m-%dT%H:%M:%SZ');
+
+function Auth_OpenID_splitNonce($nonce_string)
+{
+ // Extract a timestamp from the given nonce string
+ $result = preg_match(Auth_OpenID_Nonce_REGEX, $nonce_string, $matches);
+ if ($result != 1 || count($matches) != 8) {
+ return null;
+ }
+
+ list($unused,
+ $tm_year,
+ $tm_mon,
+ $tm_mday,
+ $tm_hour,
+ $tm_min,
+ $tm_sec,
+ $uniquifier) = $matches;
+
+ $timestamp =
+ @gmmktime($tm_hour, $tm_min, $tm_sec, $tm_mon, $tm_mday, $tm_year);
+
+ if ($timestamp === false || $timestamp < 0) {
+ return null;
+ }
+
+ return array($timestamp, $uniquifier);
+}
+
+function Auth_OpenID_checkTimestamp($nonce_string,
+ $allowed_skew = null,
+ $now = null)
+{
+ // Is the timestamp that is part of the specified nonce string
+ // within the allowed clock-skew of the current time?
+ global $Auth_OpenID_SKEW;
+
+ if ($allowed_skew === null) {
+ $allowed_skew = $Auth_OpenID_SKEW;
+ }
+
+ $parts = Auth_OpenID_splitNonce($nonce_string);
+ if ($parts == null) {
+ return false;
+ }
+
+ if ($now === null) {
+ $now = time();
+ }
+
+ $stamp = $parts[0];
+
+ // Time after which we should not use the nonce
+ $past = $now - $allowed_skew;
+
+ // Time that is too far in the future for us to allow
+ $future = $now + $allowed_skew;
+
+ // the stamp is not too far in the future and is not too far
+ // in the past
+ return (($past <= $stamp) && ($stamp <= $future));
+}
+
+function Auth_OpenID_mkNonce($when = null)
+{
+ // Generate a nonce with the current timestamp
+ $salt = Auth_OpenID_CryptUtil::randomString(
+ 6, Auth_OpenID_Nonce_CHRS);
+ if ($when === null) {
+ // It's safe to call time() with no arguments; it returns a
+ // GMT unix timestamp on PHP 4 and PHP 5. gmmktime() with no
+ // args returns a local unix timestamp on PHP 4, so don't use
+ // that.
+ $when = time();
+ }
+ $time_str = gmstrftime(Auth_OpenID_Nonce_TIME_FMT, $when);
+ return $time_str . $salt;
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/PAPE.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/PAPE.php
new file mode 100644
index 000000000..f08ca8bd0
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/PAPE.php
@@ -0,0 +1,300 @@
+<?php
+
+/**
+ * An implementation of the OpenID Provider Authentication Policy
+ * Extension 1.0
+ *
+ * See:
+ * http://openid.net/developers/specs/
+ */
+
+require_once "Auth/OpenID/Extension.php";
+
+define('Auth_OpenID_PAPE_NS_URI',
+ "http://specs.openid.net/extensions/pape/1.0");
+
+define('PAPE_AUTH_MULTI_FACTOR_PHYSICAL',
+ 'http://schemas.openid.net/pape/policies/2007/06/multi-factor-physical');
+define('PAPE_AUTH_MULTI_FACTOR',
+ 'http://schemas.openid.net/pape/policies/2007/06/multi-factor');
+define('PAPE_AUTH_PHISHING_RESISTANT',
+ 'http://schemas.openid.net/pape/policies/2007/06/phishing-resistant');
+
+define('PAPE_TIME_VALIDATOR',
+ '/^[0-9]{4,4}-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]Z$/');
+/**
+ * A Provider Authentication Policy request, sent from a relying party
+ * to a provider
+ *
+ * preferred_auth_policies: The authentication policies that
+ * the relying party prefers
+ *
+ * max_auth_age: The maximum time, in seconds, that the relying party
+ * wants to allow to have elapsed before the user must re-authenticate
+ */
+class Auth_OpenID_PAPE_Request extends Auth_OpenID_Extension {
+
+ var $ns_alias = 'pape';
+ var $ns_uri = Auth_OpenID_PAPE_NS_URI;
+
+ function Auth_OpenID_PAPE_Request($preferred_auth_policies=null,
+ $max_auth_age=null)
+ {
+ if ($preferred_auth_policies === null) {
+ $preferred_auth_policies = array();
+ }
+
+ $this->preferred_auth_policies = $preferred_auth_policies;
+ $this->max_auth_age = $max_auth_age;
+ }
+
+ /**
+ * Add an acceptable authentication policy URI to this request
+ *
+ * This method is intended to be used by the relying party to add
+ * acceptable authentication types to the request.
+ *
+ * policy_uri: The identifier for the preferred type of
+ * authentication.
+ */
+ function addPolicyURI($policy_uri)
+ {
+ if (!in_array($policy_uri, $this->preferred_auth_policies)) {
+ $this->preferred_auth_policies[] = $policy_uri;
+ }
+ }
+
+ function getExtensionArgs()
+ {
+ $ns_args = array(
+ 'preferred_auth_policies' =>
+ implode(' ', $this->preferred_auth_policies)
+ );
+
+ if ($this->max_auth_age !== null) {
+ $ns_args['max_auth_age'] = strval($this->max_auth_age);
+ }
+
+ return $ns_args;
+ }
+
+ /**
+ * Instantiate a Request object from the arguments in a checkid_*
+ * OpenID message
+ */
+ static function fromOpenIDRequest($request)
+ {
+ $obj = new Auth_OpenID_PAPE_Request();
+ $args = $request->message->getArgs(Auth_OpenID_PAPE_NS_URI);
+
+ if ($args === null || $args === array()) {
+ return null;
+ }
+
+ $obj->parseExtensionArgs($args);
+ return $obj;
+ }
+
+ /**
+ * Set the state of this request to be that expressed in these
+ * PAPE arguments
+ *
+ * @param args: The PAPE arguments without a namespace
+ */
+ function parseExtensionArgs($args)
+ {
+ // preferred_auth_policies is a space-separated list of policy
+ // URIs
+ $this->preferred_auth_policies = array();
+
+ $policies_str = Auth_OpenID::arrayGet($args, 'preferred_auth_policies');
+ if ($policies_str) {
+ foreach (explode(' ', $policies_str) as $uri) {
+ if (!in_array($uri, $this->preferred_auth_policies)) {
+ $this->preferred_auth_policies[] = $uri;
+ }
+ }
+ }
+
+ // max_auth_age is base-10 integer number of seconds
+ $max_auth_age_str = Auth_OpenID::arrayGet($args, 'max_auth_age');
+ if ($max_auth_age_str) {
+ $this->max_auth_age = Auth_OpenID::intval($max_auth_age_str);
+ } else {
+ $this->max_auth_age = null;
+ }
+ }
+
+ /**
+ * Given a list of authentication policy URIs that a provider
+ * supports, this method returns the subsequence of those types
+ * that are preferred by the relying party.
+ *
+ * @param supported_types: A sequence of authentication policy
+ * type URIs that are supported by a provider
+ *
+ * @return array The sub-sequence of the supported types that are
+ * preferred by the relying party. This list will be ordered in
+ * the order that the types appear in the supported_types
+ * sequence, and may be empty if the provider does not prefer any
+ * of the supported authentication types.
+ */
+ function preferredTypes($supported_types)
+ {
+ $result = array();
+
+ foreach ($supported_types as $st) {
+ if (in_array($st, $this->preferred_auth_policies)) {
+ $result[] = $st;
+ }
+ }
+ return $result;
+ }
+}
+
+/**
+ * A Provider Authentication Policy response, sent from a provider to
+ * a relying party
+ */
+class Auth_OpenID_PAPE_Response extends Auth_OpenID_Extension {
+
+ var $ns_alias = 'pape';
+ var $ns_uri = Auth_OpenID_PAPE_NS_URI;
+
+ function Auth_OpenID_PAPE_Response($auth_policies=null, $auth_time=null,
+ $nist_auth_level=null)
+ {
+ if ($auth_policies) {
+ $this->auth_policies = $auth_policies;
+ } else {
+ $this->auth_policies = array();
+ }
+
+ $this->auth_time = $auth_time;
+ $this->nist_auth_level = $nist_auth_level;
+ }
+
+ /**
+ * Add a authentication policy to this response
+ *
+ * This method is intended to be used by the provider to add a
+ * policy that the provider conformed to when authenticating the
+ * user.
+ *
+ * @param policy_uri: The identifier for the preferred type of
+ * authentication.
+ */
+ function addPolicyURI($policy_uri)
+ {
+ if (!in_array($policy_uri, $this->auth_policies)) {
+ $this->auth_policies[] = $policy_uri;
+ }
+ }
+
+ /**
+ * Create an Auth_OpenID_PAPE_Response object from a successful
+ * OpenID library response.
+ *
+ * @param success_response $success_response A SuccessResponse
+ * from Auth_OpenID_Consumer::complete()
+ *
+ * @returns: A provider authentication policy response from the
+ * data that was supplied with the id_res response.
+ */
+ static function fromSuccessResponse($success_response)
+ {
+ $obj = new Auth_OpenID_PAPE_Response();
+
+ // PAPE requires that the args be signed.
+ $args = $success_response->getSignedNS(Auth_OpenID_PAPE_NS_URI);
+
+ if ($args === null || $args === array()) {
+ return null;
+ }
+
+ $result = $obj->parseExtensionArgs($args);
+
+ if ($result === false) {
+ return null;
+ } else {
+ return $obj;
+ }
+ }
+
+ /**
+ * Parse the provider authentication policy arguments into the
+ * internal state of this object
+ *
+ * @param args: unqualified provider authentication policy
+ * arguments
+ *
+ * @param strict: Whether to return false when bad data is
+ * encountered
+ *
+ * @return null The data is parsed into the internal fields of
+ * this object.
+ */
+ function parseExtensionArgs($args, $strict=false)
+ {
+ $policies_str = Auth_OpenID::arrayGet($args, 'auth_policies');
+ if ($policies_str && $policies_str != "none") {
+ $this->auth_policies = explode(" ", $policies_str);
+ }
+
+ $nist_level_str = Auth_OpenID::arrayGet($args, 'nist_auth_level');
+ if ($nist_level_str !== null) {
+ $nist_level = Auth_OpenID::intval($nist_level_str);
+
+ if ($nist_level === false) {
+ if ($strict) {
+ return false;
+ } else {
+ $nist_level = null;
+ }
+ }
+
+ if (0 <= $nist_level && $nist_level < 5) {
+ $this->nist_auth_level = $nist_level;
+ } else if ($strict) {
+ return false;
+ }
+ }
+
+ $auth_time = Auth_OpenID::arrayGet($args, 'auth_time');
+ if ($auth_time !== null) {
+ if (preg_match(PAPE_TIME_VALIDATOR, $auth_time)) {
+ $this->auth_time = $auth_time;
+ } else if ($strict) {
+ return false;
+ }
+ }
+ }
+
+ function getExtensionArgs()
+ {
+ $ns_args = array();
+ if (count($this->auth_policies) > 0) {
+ $ns_args['auth_policies'] = implode(' ', $this->auth_policies);
+ } else {
+ $ns_args['auth_policies'] = 'none';
+ }
+
+ if ($this->nist_auth_level !== null) {
+ if (!in_array($this->nist_auth_level, range(0, 4), true)) {
+ return false;
+ }
+ $ns_args['nist_auth_level'] = strval($this->nist_auth_level);
+ }
+
+ if ($this->auth_time !== null) {
+ if (!preg_match(PAPE_TIME_VALIDATOR, $this->auth_time)) {
+ return false;
+ }
+
+ $ns_args['auth_time'] = $this->auth_time;
+ }
+
+ return $ns_args;
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/Parse.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/Parse.php
new file mode 100644
index 000000000..c81cb0103
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/Parse.php
@@ -0,0 +1,377 @@
+<?php
+
+/**
+ * This module implements a VERY limited parser that finds <link> tags
+ * in the head of HTML or XHTML documents and parses out their
+ * attributes according to the OpenID spec. It is a liberal parser,
+ * but it requires these things from the data in order to work:
+ *
+ * - There must be an open <html> tag
+ *
+ * - There must be an open <head> tag inside of the <html> tag
+ *
+ * - Only <link>s that are found inside of the <head> tag are parsed
+ * (this is by design)
+ *
+ * - The parser follows the OpenID specification in resolving the
+ * attributes of the link tags. This means that the attributes DO
+ * NOT get resolved as they would by an XML or HTML parser. In
+ * particular, only certain entities get replaced, and href
+ * attributes do not get resolved relative to a base URL.
+ *
+ * From http://openid.net/specs.bml:
+ *
+ * - The openid.server URL MUST be an absolute URL. OpenID consumers
+ * MUST NOT attempt to resolve relative URLs.
+ *
+ * - The openid.server URL MUST NOT include entities other than &amp;,
+ * &lt;, &gt;, and &quot;.
+ *
+ * The parser ignores SGML comments and <![CDATA[blocks]]>. Both kinds
+ * of quoting are allowed for attributes.
+ *
+ * The parser deals with invalid markup in these ways:
+ *
+ * - Tag names are not case-sensitive
+ *
+ * - The <html> tag is accepted even when it is not at the top level
+ *
+ * - The <head> tag is accepted even when it is not a direct child of
+ * the <html> tag, but a <html> tag must be an ancestor of the
+ * <head> tag
+ *
+ * - <link> tags are accepted even when they are not direct children
+ * of the <head> tag, but a <head> tag must be an ancestor of the
+ * <link> tag
+ *
+ * - If there is no closing tag for an open <html> or <head> tag, the
+ * remainder of the document is viewed as being inside of the
+ * tag. If there is no closing tag for a <link> tag, the link tag is
+ * treated as a short tag. Exceptions to this rule are that <html>
+ * closes <html> and <body> or <head> closes <head>
+ *
+ * - Attributes of the <link> tag are not required to be quoted.
+ *
+ * - In the case of duplicated attribute names, the attribute coming
+ * last in the tag will be the value returned.
+ *
+ * - Any text that does not parse as an attribute within a link tag
+ * will be ignored. (e.g. <link pumpkin rel='openid.server' /> will
+ * ignore pumpkin)
+ *
+ * - If there are more than one <html> or <head> tag, the parser only
+ * looks inside of the first one.
+ *
+ * - The contents of <script> tags are ignored entirely, except
+ * unclosed <script> tags. Unclosed <script> tags are ignored.
+ *
+ * - Any other invalid markup is ignored, including unclosed SGML
+ * comments and unclosed <![CDATA[blocks.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @access private
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Require Auth_OpenID::arrayGet().
+ */
+require_once "Auth/OpenID.php";
+
+class Auth_OpenID_Parse {
+
+ /**
+ * Specify some flags for use with regex matching.
+ */
+ var $_re_flags = "si";
+
+ /**
+ * Stuff to remove before we start looking for tags
+ */
+ var $_removed_re =
+ "<!--.*?-->|<!\[CDATA\[.*?\]\]>|<script\b(?!:)[^>]*>.*?<\/script>";
+
+ /**
+ * Starts with the tag name at a word boundary, where the tag name
+ * is not a namespace
+ */
+ var $_tag_expr = "<%s\b(?!:)([^>]*?)(?:\/>|>(.*)(?:<\/?%s\s*>|\Z))";
+
+ var $_attr_find = '\b(\w+)=("[^"]*"|\'[^\']*\'|[^\'"\s\/<>]+)';
+
+ var $_open_tag_expr = "<%s\b";
+ var $_close_tag_expr = "<((\/%s\b)|(%s[^>\/]*\/))>";
+
+ function Auth_OpenID_Parse()
+ {
+ $this->_link_find = sprintf("/<link\b(?!:)([^>]*)(?!<)>/%s",
+ $this->_re_flags);
+
+ $this->_entity_replacements = array(
+ 'amp' => '&',
+ 'lt' => '<',
+ 'gt' => '>',
+ 'quot' => '"'
+ );
+
+ $this->_attr_find = sprintf("/%s/%s",
+ $this->_attr_find,
+ $this->_re_flags);
+
+ $this->_removed_re = sprintf("/%s/%s",
+ $this->_removed_re,
+ $this->_re_flags);
+
+ $this->_ent_replace =
+ sprintf("&(%s);", implode("|",
+ $this->_entity_replacements));
+ }
+
+ /**
+ * Returns a regular expression that will match a given tag in an
+ * SGML string.
+ */
+ function tagMatcher($tag_name, $close_tags = null)
+ {
+ $expr = $this->_tag_expr;
+
+ if ($close_tags) {
+ $options = implode("|", array_merge(array($tag_name), $close_tags));
+ $closer = sprintf("(?:%s)", $options);
+ } else {
+ $closer = $tag_name;
+ }
+
+ $expr = sprintf($expr, $tag_name, $closer);
+ return sprintf("/%s/%s", $expr, $this->_re_flags);
+ }
+
+ function openTag($tag_name)
+ {
+ $expr = sprintf($this->_open_tag_expr, $tag_name);
+ return sprintf("/%s/%s", $expr, $this->_re_flags);
+ }
+
+ function closeTag($tag_name)
+ {
+ $expr = sprintf($this->_close_tag_expr, $tag_name, $tag_name);
+ return sprintf("/%s/%s", $expr, $this->_re_flags);
+ }
+
+ function htmlBegin($s)
+ {
+ $matches = array();
+ $result = preg_match($this->openTag('html'), $s,
+ $matches, PREG_OFFSET_CAPTURE);
+ if ($result === false || !$matches) {
+ return false;
+ }
+ // Return the offset of the first match.
+ return $matches[0][1];
+ }
+
+ function htmlEnd($s)
+ {
+ $matches = array();
+ $result = preg_match($this->closeTag('html'), $s,
+ $matches, PREG_OFFSET_CAPTURE);
+ if ($result === false || !$matches) {
+ return false;
+ }
+ // Return the offset of the first match.
+ return $matches[count($matches) - 1][1];
+ }
+
+ function headFind()
+ {
+ return $this->tagMatcher('head', array('body', 'html'));
+ }
+
+ function replaceEntities($str)
+ {
+ foreach ($this->_entity_replacements as $old => $new) {
+ $str = preg_replace(sprintf("/&%s;/", $old), $new, $str);
+ }
+ return $str;
+ }
+
+ function removeQuotes($str)
+ {
+ $matches = array();
+ $double = '/^"(.*)"$/';
+ $single = "/^\'(.*)\'$/";
+
+ if (preg_match($double, $str, $matches)) {
+ return $matches[1];
+ } else if (preg_match($single, $str, $matches)) {
+ return $matches[1];
+ } else {
+ return $str;
+ }
+ }
+
+ function match($regexp, $text, &$match)
+ {
+ if (!is_callable('mb_ereg_search_init')) {
+ return preg_match($regexp, $text, $match);
+ }
+
+ $regexp = substr($regexp, 1, strlen($regexp) - 2 - strlen($this->_re_flags));
+ mb_ereg_search_init($text);
+ if (!mb_ereg_search($regexp)) {
+ return false;
+ }
+ $match = mb_ereg_search_getregs();
+ return true;
+ }
+
+ /**
+ * Find all link tags in a string representing a HTML document and
+ * return a list of their attributes.
+ *
+ * @todo This is quite ineffective and may fail with the default
+ * pcre.backtrack_limit of 100000 in PHP 5.2, if $html is big.
+ * It should rather use stripos (in PHP5) or strpos()+strtoupper()
+ * in PHP4 to manage this.
+ *
+ * @param string $html The text to parse
+ * @return array $list An array of arrays of attributes, one for each
+ * link tag
+ */
+ function parseLinkAttrs($html)
+ {
+ $stripped = preg_replace($this->_removed_re,
+ "",
+ $html);
+
+ $html_begin = $this->htmlBegin($stripped);
+ $html_end = $this->htmlEnd($stripped);
+
+ if ($html_begin === false) {
+ return array();
+ }
+
+ if ($html_end === false) {
+ $html_end = strlen($stripped);
+ }
+
+ $stripped = substr($stripped, $html_begin,
+ $html_end - $html_begin);
+
+ // Workaround to prevent PREG_BACKTRACK_LIMIT_ERROR:
+ $old_btlimit = ini_set( 'pcre.backtrack_limit', -1 );
+
+ // Try to find the <HEAD> tag.
+ $head_re = $this->headFind();
+ $head_match = array();
+ if (!$this->match($head_re, $stripped, $head_match)) {
+ ini_set( 'pcre.backtrack_limit', $old_btlimit );
+ return array();
+ }
+
+ $link_data = array();
+ $link_matches = array();
+
+ if (!preg_match_all($this->_link_find, $head_match[0],
+ $link_matches)) {
+ ini_set( 'pcre.backtrack_limit', $old_btlimit );
+ return array();
+ }
+
+ foreach ($link_matches[0] as $link) {
+ $attr_matches = array();
+ preg_match_all($this->_attr_find, $link, $attr_matches);
+ $link_attrs = array();
+ foreach ($attr_matches[0] as $index => $full_match) {
+ $name = $attr_matches[1][$index];
+ $value = $this->replaceEntities(
+ $this->removeQuotes($attr_matches[2][$index]));
+
+ $link_attrs[strtolower($name)] = $value;
+ }
+ $link_data[] = $link_attrs;
+ }
+
+ ini_set( 'pcre.backtrack_limit', $old_btlimit );
+ return $link_data;
+ }
+
+ function relMatches($rel_attr, $target_rel)
+ {
+ // Does this target_rel appear in the rel_str?
+ // XXX: TESTME
+ $rels = preg_split("/\s+/", trim($rel_attr));
+ foreach ($rels as $rel) {
+ $rel = strtolower($rel);
+ if ($rel == $target_rel) {
+ return 1;
+ }
+ }
+
+ return 0;
+ }
+
+ function linkHasRel($link_attrs, $target_rel)
+ {
+ // Does this link have target_rel as a relationship?
+ // XXX: TESTME
+ $rel_attr = Auth_OpeniD::arrayGet($link_attrs, 'rel', null);
+ return ($rel_attr && $this->relMatches($rel_attr,
+ $target_rel));
+ }
+
+ function findLinksRel($link_attrs_list, $target_rel)
+ {
+ // Filter the list of link attributes on whether it has
+ // target_rel as a relationship.
+ // XXX: TESTME
+ $result = array();
+ foreach ($link_attrs_list as $attr) {
+ if ($this->linkHasRel($attr, $target_rel)) {
+ $result[] = $attr;
+ }
+ }
+
+ return $result;
+ }
+
+ function findFirstHref($link_attrs_list, $target_rel)
+ {
+ // Return the value of the href attribute for the first link
+ // tag in the list that has target_rel as a relationship.
+ // XXX: TESTME
+ $matches = $this->findLinksRel($link_attrs_list,
+ $target_rel);
+ if (!$matches) {
+ return null;
+ }
+ $first = $matches[0];
+ return Auth_OpenID::arrayGet($first, 'href', null);
+ }
+}
+
+function Auth_OpenID_legacy_discover($html_text, $server_rel,
+ $delegate_rel)
+{
+ $p = new Auth_OpenID_Parse();
+
+ $link_attrs = $p->parseLinkAttrs($html_text);
+
+ $server_url = $p->findFirstHref($link_attrs,
+ $server_rel);
+
+ if ($server_url === null) {
+ return false;
+ } else {
+ $delegate_url = $p->findFirstHref($link_attrs,
+ $delegate_rel);
+ return array($delegate_url, $server_url);
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/PostgreSQLStore.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/PostgreSQLStore.php
new file mode 100644
index 000000000..d90e43e00
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/PostgreSQLStore.php
@@ -0,0 +1,112 @@
+<?php
+
+/**
+ * A PostgreSQL store.
+ *
+ * @package OpenID
+ */
+
+/**
+ * Require the base class file.
+ */
+require_once "Auth/OpenID/SQLStore.php";
+
+/**
+ * An SQL store that uses PostgreSQL as its backend.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_PostgreSQLStore extends Auth_OpenID_SQLStore {
+ /**
+ * @access private
+ */
+ function setSQL()
+ {
+ $this->sql['nonce_table'] =
+ "CREATE TABLE %s (server_url VARCHAR(2047) NOT NULL, ".
+ "timestamp INTEGER NOT NULL, ".
+ "salt CHAR(40) NOT NULL, ".
+ "UNIQUE (server_url, timestamp, salt))";
+
+ $this->sql['assoc_table'] =
+ "CREATE TABLE %s (server_url VARCHAR(2047) NOT NULL, ".
+ "handle VARCHAR(255) NOT NULL, ".
+ "secret BYTEA NOT NULL, ".
+ "issued INTEGER NOT NULL, ".
+ "lifetime INTEGER NOT NULL, ".
+ "assoc_type VARCHAR(64) NOT NULL, ".
+ "PRIMARY KEY (server_url, handle), ".
+ "CONSTRAINT secret_length_constraint CHECK ".
+ "(LENGTH(secret) <= 128))";
+
+ $this->sql['set_assoc'] =
+ array(
+ 'insert_assoc' => "INSERT INTO %s (server_url, handle, ".
+ "secret, issued, lifetime, assoc_type) VALUES ".
+ "(?, ?, '!', ?, ?, ?)",
+ 'update_assoc' => "UPDATE %s SET secret = '!', issued = ?, ".
+ "lifetime = ?, assoc_type = ? WHERE server_url = ? AND ".
+ "handle = ?"
+ );
+
+ $this->sql['get_assocs'] =
+ "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ".
+ "WHERE server_url = ?";
+
+ $this->sql['get_assoc'] =
+ "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ".
+ "WHERE server_url = ? AND handle = ?";
+
+ $this->sql['remove_assoc'] =
+ "DELETE FROM %s WHERE server_url = ? AND handle = ?";
+
+ $this->sql['add_nonce'] =
+ "INSERT INTO %s (server_url, timestamp, salt) VALUES ".
+ "(?, ?, ?)"
+ ;
+
+ $this->sql['clean_nonce'] =
+ "DELETE FROM %s WHERE timestamp < ?";
+
+ $this->sql['clean_assoc'] =
+ "DELETE FROM %s WHERE issued + lifetime < ?";
+ }
+
+ /**
+ * @access private
+ */
+ function _set_assoc($server_url, $handle, $secret, $issued, $lifetime,
+ $assoc_type)
+ {
+ $result = $this->_get_assoc($server_url, $handle);
+ if ($result) {
+ // Update the table since this associations already exists.
+ $this->connection->query($this->sql['set_assoc']['update_assoc'],
+ array($secret, $issued, $lifetime,
+ $assoc_type, $server_url, $handle));
+ } else {
+ // Insert a new record because this association wasn't
+ // found.
+ $this->connection->query($this->sql['set_assoc']['insert_assoc'],
+ array($server_url, $handle, $secret,
+ $issued, $lifetime, $assoc_type));
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function blobEncode($blob)
+ {
+ return $this->_octify($blob);
+ }
+
+ /**
+ * @access private
+ */
+ function blobDecode($blob)
+ {
+ return $this->_unoctify($blob);
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/SQLStore.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/SQLStore.php
new file mode 100644
index 000000000..c04059732
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/SQLStore.php
@@ -0,0 +1,557 @@
+<?php
+
+/**
+ * SQL-backed OpenID stores.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * @access private
+ */
+require_once 'Auth/OpenID/Interface.php';
+require_once 'Auth/OpenID/Nonce.php';
+
+/**
+ * @access private
+ */
+require_once 'Auth/OpenID.php';
+
+/**
+ * @access private
+ */
+require_once 'Auth/OpenID/Nonce.php';
+
+/**
+ * This is the parent class for the SQL stores, which contains the
+ * logic common to all of the SQL stores.
+ *
+ * The table names used are determined by the class variables
+ * associations_table_name and nonces_table_name. To change the name
+ * of the tables used, pass new table names into the constructor.
+ *
+ * To create the tables with the proper schema, see the createTables
+ * method.
+ *
+ * This class shouldn't be used directly. Use one of its subclasses
+ * instead, as those contain the code necessary to use a specific
+ * database. If you're an OpenID integrator and you'd like to create
+ * an SQL-driven store that wraps an application's database
+ * abstraction, be sure to create a subclass of
+ * {@link Auth_OpenID_DatabaseConnection} that calls the application's
+ * database abstraction calls. Then, pass an instance of your new
+ * database connection class to your SQLStore subclass constructor.
+ *
+ * All methods other than the constructor and createTables should be
+ * considered implementation details.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_SQLStore extends Auth_OpenID_OpenIDStore {
+
+ /**
+ * This creates a new SQLStore instance. It requires an
+ * established database connection be given to it, and it allows
+ * overriding the default table names.
+ *
+ * @param connection $connection This must be an established
+ * connection to a database of the correct type for the SQLStore
+ * subclass you're using. This must either be an PEAR DB
+ * connection handle or an instance of a subclass of
+ * Auth_OpenID_DatabaseConnection.
+ *
+ * @param associations_table: This is an optional parameter to
+ * specify the name of the table used for storing associations.
+ * The default value is 'oid_associations'.
+ *
+ * @param nonces_table: This is an optional parameter to specify
+ * the name of the table used for storing nonces. The default
+ * value is 'oid_nonces'.
+ */
+ function Auth_OpenID_SQLStore($connection,
+ $associations_table = null,
+ $nonces_table = null)
+ {
+ $this->associations_table_name = "oid_associations";
+ $this->nonces_table_name = "oid_nonces";
+
+ // Check the connection object type to be sure it's a PEAR
+ // database connection.
+ if (!(is_object($connection) &&
+ (is_subclass_of($connection, 'db_common') ||
+ is_subclass_of($connection,
+ 'auth_openid_databaseconnection')))) {
+ trigger_error("Auth_OpenID_SQLStore expected PEAR connection " .
+ "object (got ".get_class($connection).")",
+ E_USER_ERROR);
+ return;
+ }
+
+ $this->connection = $connection;
+
+ // Be sure to set the fetch mode so the results are keyed on
+ // column name instead of column index. This is a PEAR
+ // constant, so only try to use it if PEAR is present. Note
+ // that Auth_Openid_Databaseconnection instances need not
+ // implement ::setFetchMode for this reason.
+ if (is_subclass_of($this->connection, 'db_common')) {
+ $this->connection->setFetchMode(DB_FETCHMODE_ASSOC);
+ }
+
+ if ($associations_table) {
+ $this->associations_table_name = $associations_table;
+ }
+
+ if ($nonces_table) {
+ $this->nonces_table_name = $nonces_table;
+ }
+
+ $this->max_nonce_age = 6 * 60 * 60;
+
+ // Be sure to run the database queries with auto-commit mode
+ // turned OFF, because we want every function to run in a
+ // transaction, implicitly. As a rule, methods named with a
+ // leading underscore will NOT control transaction behavior.
+ // Callers of these methods will worry about transactions.
+ $this->connection->autoCommit(false);
+
+ // Create an empty SQL strings array.
+ $this->sql = array();
+
+ // Call this method (which should be overridden by subclasses)
+ // to populate the $this->sql array with SQL strings.
+ $this->setSQL();
+
+ // Verify that all required SQL statements have been set, and
+ // raise an error if any expected SQL strings were either
+ // absent or empty.
+ list($missing, $empty) = $this->_verifySQL();
+
+ if ($missing) {
+ trigger_error("Expected keys in SQL query list: " .
+ implode(", ", $missing),
+ E_USER_ERROR);
+ return;
+ }
+
+ if ($empty) {
+ trigger_error("SQL list keys have no SQL strings: " .
+ implode(", ", $empty),
+ E_USER_ERROR);
+ return;
+ }
+
+ // Add table names to queries.
+ $this->_fixSQL();
+ }
+
+ function tableExists($table_name)
+ {
+ return !$this->isError(
+ $this->connection->query(
+ sprintf("SELECT * FROM %s LIMIT 0",
+ $table_name)));
+ }
+
+ /**
+ * Returns true if $value constitutes a database error; returns
+ * false otherwise.
+ */
+ function isError($value)
+ {
+ return PEAR::isError($value);
+ }
+
+ /**
+ * Converts a query result to a boolean. If the result is a
+ * database error according to $this->isError(), this returns
+ * false; otherwise, this returns true.
+ */
+ function resultToBool($obj)
+ {
+ if ($this->isError($obj)) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * This method should be overridden by subclasses. This method is
+ * called by the constructor to set values in $this->sql, which is
+ * an array keyed on sql name.
+ */
+ function setSQL()
+ {
+ }
+
+ /**
+ * Resets the store by removing all records from the store's
+ * tables.
+ */
+ function reset()
+ {
+ $this->connection->query(sprintf("DELETE FROM %s",
+ $this->associations_table_name));
+
+ $this->connection->query(sprintf("DELETE FROM %s",
+ $this->nonces_table_name));
+ }
+
+ /**
+ * @access private
+ */
+ function _verifySQL()
+ {
+ $missing = array();
+ $empty = array();
+
+ $required_sql_keys = array(
+ 'nonce_table',
+ 'assoc_table',
+ 'set_assoc',
+ 'get_assoc',
+ 'get_assocs',
+ 'remove_assoc'
+ );
+
+ foreach ($required_sql_keys as $key) {
+ if (!array_key_exists($key, $this->sql)) {
+ $missing[] = $key;
+ } else if (!$this->sql[$key]) {
+ $empty[] = $key;
+ }
+ }
+
+ return array($missing, $empty);
+ }
+
+ /**
+ * @access private
+ */
+ function _fixSQL()
+ {
+ $replacements = array(
+ array(
+ 'value' => $this->nonces_table_name,
+ 'keys' => array('nonce_table',
+ 'add_nonce',
+ 'clean_nonce')
+ ),
+ array(
+ 'value' => $this->associations_table_name,
+ 'keys' => array('assoc_table',
+ 'set_assoc',
+ 'get_assoc',
+ 'get_assocs',
+ 'remove_assoc',
+ 'clean_assoc')
+ )
+ );
+
+ foreach ($replacements as $item) {
+ $value = $item['value'];
+ $keys = $item['keys'];
+
+ foreach ($keys as $k) {
+ if (is_array($this->sql[$k])) {
+ foreach ($this->sql[$k] as $part_key => $part_value) {
+ $this->sql[$k][$part_key] = sprintf($part_value,
+ $value);
+ }
+ } else {
+ $this->sql[$k] = sprintf($this->sql[$k], $value);
+ }
+ }
+ }
+ }
+
+ function blobDecode($blob)
+ {
+ return $blob;
+ }
+
+ function blobEncode($str)
+ {
+ return $str;
+ }
+
+ function createTables()
+ {
+ $this->connection->autoCommit(true);
+ $n = $this->create_nonce_table();
+ $a = $this->create_assoc_table();
+ $this->connection->autoCommit(false);
+
+ if ($n && $a) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function create_nonce_table()
+ {
+ if (!$this->tableExists($this->nonces_table_name)) {
+ $r = $this->connection->query($this->sql['nonce_table']);
+ return $this->resultToBool($r);
+ }
+ return true;
+ }
+
+ function create_assoc_table()
+ {
+ if (!$this->tableExists($this->associations_table_name)) {
+ $r = $this->connection->query($this->sql['assoc_table']);
+ return $this->resultToBool($r);
+ }
+ return true;
+ }
+
+ /**
+ * @access private
+ */
+ function _set_assoc($server_url, $handle, $secret, $issued,
+ $lifetime, $assoc_type)
+ {
+ return $this->connection->query($this->sql['set_assoc'],
+ array(
+ $server_url,
+ $handle,
+ $secret,
+ $issued,
+ $lifetime,
+ $assoc_type));
+ }
+
+ function storeAssociation($server_url, $association)
+ {
+ if ($this->resultToBool($this->_set_assoc(
+ $server_url,
+ $association->handle,
+ $this->blobEncode(
+ $association->secret),
+ $association->issued,
+ $association->lifetime,
+ $association->assoc_type
+ ))) {
+ $this->connection->commit();
+ } else {
+ $this->connection->rollback();
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _get_assoc($server_url, $handle)
+ {
+ $result = $this->connection->getRow($this->sql['get_assoc'],
+ array($server_url, $handle));
+ if ($this->isError($result)) {
+ return null;
+ } else {
+ return $result;
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _get_assocs($server_url)
+ {
+ $result = $this->connection->getAll($this->sql['get_assocs'],
+ array($server_url));
+
+ if ($this->isError($result)) {
+ return array();
+ } else {
+ return $result;
+ }
+ }
+
+ function removeAssociation($server_url, $handle)
+ {
+ if ($this->_get_assoc($server_url, $handle) == null) {
+ return false;
+ }
+
+ if ($this->resultToBool($this->connection->query(
+ $this->sql['remove_assoc'],
+ array($server_url, $handle)))) {
+ $this->connection->commit();
+ } else {
+ $this->connection->rollback();
+ }
+
+ return true;
+ }
+
+ function getAssociation($server_url, $handle = null)
+ {
+ if ($handle !== null) {
+ $assoc = $this->_get_assoc($server_url, $handle);
+
+ $assocs = array();
+ if ($assoc) {
+ $assocs[] = $assoc;
+ }
+ } else {
+ $assocs = $this->_get_assocs($server_url);
+ }
+
+ if (!$assocs || (count($assocs) == 0)) {
+ return null;
+ } else {
+ $associations = array();
+
+ foreach ($assocs as $assoc_row) {
+ $assoc = new Auth_OpenID_Association($assoc_row['handle'],
+ $assoc_row['secret'],
+ $assoc_row['issued'],
+ $assoc_row['lifetime'],
+ $assoc_row['assoc_type']);
+
+ $assoc->secret = $this->blobDecode($assoc->secret);
+
+ if ($assoc->getExpiresIn() == 0) {
+ $this->removeAssociation($server_url, $assoc->handle);
+ } else {
+ $associations[] = array($assoc->issued, $assoc);
+ }
+ }
+
+ if ($associations) {
+ $issued = array();
+ $assocs = array();
+ foreach ($associations as $key => $assoc) {
+ $issued[$key] = $assoc[0];
+ $assocs[$key] = $assoc[1];
+ }
+
+ array_multisort($issued, SORT_DESC, $assocs, SORT_DESC,
+ $associations);
+
+ // return the most recently issued one.
+ list($issued, $assoc) = $associations[0];
+ return $assoc;
+ } else {
+ return null;
+ }
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function _add_nonce($server_url, $timestamp, $salt)
+ {
+ $sql = $this->sql['add_nonce'];
+ $result = $this->connection->query($sql, array($server_url,
+ $timestamp,
+ $salt));
+ if ($this->isError($result)) {
+ $this->connection->rollback();
+ } else {
+ $this->connection->commit();
+ }
+ return $this->resultToBool($result);
+ }
+
+ function useNonce($server_url, $timestamp, $salt)
+ {
+ global $Auth_OpenID_SKEW;
+
+ if ( abs($timestamp - time()) > $Auth_OpenID_SKEW ) {
+ return false;
+ }
+
+ return $this->_add_nonce($server_url, $timestamp, $salt);
+ }
+
+ /**
+ * "Octifies" a binary string by returning a string with escaped
+ * octal bytes. This is used for preparing binary data for
+ * PostgreSQL BYTEA fields.
+ *
+ * @access private
+ */
+ function _octify($str)
+ {
+ $result = "";
+ for ($i = 0; $i < Auth_OpenID::bytes($str); $i++) {
+ $ch = substr($str, $i, 1);
+ if ($ch == "\\") {
+ $result .= "\\\\\\\\";
+ } else if (ord($ch) == 0) {
+ $result .= "\\\\000";
+ } else {
+ $result .= "\\" . strval(decoct(ord($ch)));
+ }
+ }
+ return $result;
+ }
+
+ /**
+ * "Unoctifies" octal-escaped data from PostgreSQL and returns the
+ * resulting ASCII (possibly binary) string.
+ *
+ * @access private
+ */
+ function _unoctify($str)
+ {
+ $result = "";
+ $i = 0;
+ while ($i < strlen($str)) {
+ $char = $str[$i];
+ if ($char == "\\") {
+ // Look to see if the next char is a backslash and
+ // append it.
+ if ($str[$i + 1] != "\\") {
+ $octal_digits = substr($str, $i + 1, 3);
+ $dec = octdec($octal_digits);
+ $char = chr($dec);
+ $i += 4;
+ } else {
+ $char = "\\";
+ $i += 2;
+ }
+ } else {
+ $i += 1;
+ }
+
+ $result .= $char;
+ }
+
+ return $result;
+ }
+
+ function cleanupNonces()
+ {
+ global $Auth_OpenID_SKEW;
+ $v = time() - $Auth_OpenID_SKEW;
+
+ $this->connection->query($this->sql['clean_nonce'], array($v));
+ $num = $this->connection->affectedRows();
+ $this->connection->commit();
+ return $num;
+ }
+
+ function cleanupAssociations()
+ {
+ $this->connection->query($this->sql['clean_assoc'],
+ array(time()));
+ $num = $this->connection->affectedRows();
+ $this->connection->commit();
+ return $num;
+ }
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/SQLiteStore.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/SQLiteStore.php
new file mode 100644
index 000000000..4558fa1c3
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/SQLiteStore.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * An SQLite store.
+ *
+ * @package OpenID
+ */
+
+/**
+ * Require the base class file.
+ */
+require_once "Auth/OpenID/SQLStore.php";
+
+/**
+ * An SQL store that uses SQLite as its backend.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_SQLiteStore extends Auth_OpenID_SQLStore {
+ function setSQL()
+ {
+ $this->sql['nonce_table'] =
+ "CREATE TABLE %s (server_url VARCHAR(2047), timestamp INTEGER, ".
+ "salt CHAR(40), UNIQUE (server_url, timestamp, salt))";
+
+ $this->sql['assoc_table'] =
+ "CREATE TABLE %s (server_url VARCHAR(2047), handle VARCHAR(255), ".
+ "secret BLOB(128), issued INTEGER, lifetime INTEGER, ".
+ "assoc_type VARCHAR(64), PRIMARY KEY (server_url, handle))";
+
+ $this->sql['set_assoc'] =
+ "INSERT OR REPLACE INTO %s VALUES (?, ?, ?, ?, ?, ?)";
+
+ $this->sql['get_assocs'] =
+ "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ".
+ "WHERE server_url = ?";
+
+ $this->sql['get_assoc'] =
+ "SELECT handle, secret, issued, lifetime, assoc_type FROM %s ".
+ "WHERE server_url = ? AND handle = ?";
+
+ $this->sql['remove_assoc'] =
+ "DELETE FROM %s WHERE server_url = ? AND handle = ?";
+
+ $this->sql['add_nonce'] =
+ "INSERT INTO %s (server_url, timestamp, salt) VALUES (?, ?, ?)";
+
+ $this->sql['clean_nonce'] =
+ "DELETE FROM %s WHERE timestamp < ?";
+
+ $this->sql['clean_assoc'] =
+ "DELETE FROM %s WHERE issued + lifetime < ?";
+ }
+
+ /**
+ * @access private
+ */
+ function _add_nonce($server_url, $timestamp, $salt)
+ {
+ // PECL SQLite extensions 1.0.3 and older (1.0.3 is the
+ // current release at the time of this writing) have a broken
+ // sqlite_escape_string function that breaks when passed the
+ // empty string. Prefixing all strings with one character
+ // keeps them unique and avoids this bug. The nonce table is
+ // write-only, so we don't have to worry about updating other
+ // functions with this same bad hack.
+ return parent::_add_nonce('x' . $server_url, $timestamp, $salt);
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/SReg.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/SReg.php
new file mode 100644
index 000000000..5ece70724
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/SReg.php
@@ -0,0 +1,521 @@
+<?php
+
+/**
+ * Simple registration request and response parsing and object
+ * representation.
+ *
+ * This module contains objects representing simple registration
+ * requests and responses that can be used with both OpenID relying
+ * parties and OpenID providers.
+ *
+ * 1. The relying party creates a request object and adds it to the
+ * {@link Auth_OpenID_AuthRequest} object before making the
+ * checkid request to the OpenID provider:
+ *
+ * $sreg_req = Auth_OpenID_SRegRequest::build(array('email'));
+ * $auth_request->addExtension($sreg_req);
+ *
+ * 2. The OpenID provider extracts the simple registration request
+ * from the OpenID request using {@link
+ * Auth_OpenID_SRegRequest::fromOpenIDRequest}, gets the user's
+ * approval and data, creates an {@link Auth_OpenID_SRegResponse}
+ * object and adds it to the id_res response:
+ *
+ * $sreg_req = Auth_OpenID_SRegRequest::fromOpenIDRequest(
+ * $checkid_request);
+ * // [ get the user's approval and data, informing the user that
+ * // the fields in sreg_response were requested ]
+ * $sreg_resp = Auth_OpenID_SRegResponse::extractResponse(
+ * $sreg_req, $user_data);
+ * $sreg_resp->toMessage($openid_response->fields);
+ *
+ * 3. The relying party uses {@link
+ * Auth_OpenID_SRegResponse::fromSuccessResponse} to extract the data
+ * from the OpenID response:
+ *
+ * $sreg_resp = Auth_OpenID_SRegResponse::fromSuccessResponse(
+ * $success_response);
+ *
+ * @package OpenID
+ */
+
+/**
+ * Import message and extension internals.
+ */
+require_once 'Auth/OpenID/Message.php';
+require_once 'Auth/OpenID/Extension.php';
+
+// The data fields that are listed in the sreg spec
+global $Auth_OpenID_sreg_data_fields;
+$Auth_OpenID_sreg_data_fields = array(
+ 'fullname' => 'Full Name',
+ 'nickname' => 'Nickname',
+ 'dob' => 'Date of Birth',
+ 'email' => 'E-mail Address',
+ 'gender' => 'Gender',
+ 'postcode' => 'Postal Code',
+ 'country' => 'Country',
+ 'language' => 'Language',
+ 'timezone' => 'Time Zone');
+
+/**
+ * Check to see that the given value is a valid simple registration
+ * data field name. Return true if so, false if not.
+ */
+function Auth_OpenID_checkFieldName($field_name)
+{
+ global $Auth_OpenID_sreg_data_fields;
+
+ if (!in_array($field_name, array_keys($Auth_OpenID_sreg_data_fields))) {
+ return false;
+ }
+ return true;
+}
+
+// URI used in the wild for Yadis documents advertising simple
+// registration support
+define('Auth_OpenID_SREG_NS_URI_1_0', 'http://openid.net/sreg/1.0');
+
+// URI in the draft specification for simple registration 1.1
+// <http://openid.net/specs/openid-simple-registration-extension-1_1-01.html>
+define('Auth_OpenID_SREG_NS_URI_1_1', 'http://openid.net/extensions/sreg/1.1');
+
+// This attribute will always hold the preferred URI to use when
+// adding sreg support to an XRDS file or in an OpenID namespace
+// declaration.
+define('Auth_OpenID_SREG_NS_URI', Auth_OpenID_SREG_NS_URI_1_1);
+
+Auth_OpenID_registerNamespaceAlias(Auth_OpenID_SREG_NS_URI_1_1, 'sreg');
+
+/**
+ * Does the given endpoint advertise support for simple
+ * registration?
+ *
+ * $endpoint: The endpoint object as returned by OpenID discovery.
+ * returns whether an sreg type was advertised by the endpoint
+ */
+function Auth_OpenID_supportsSReg($endpoint)
+{
+ return ($endpoint->usesExtension(Auth_OpenID_SREG_NS_URI_1_1) ||
+ $endpoint->usesExtension(Auth_OpenID_SREG_NS_URI_1_0));
+}
+
+/**
+ * A base class for classes dealing with Simple Registration protocol
+ * messages.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_SRegBase extends Auth_OpenID_Extension {
+ /**
+ * Extract the simple registration namespace URI from the given
+ * OpenID message. Handles OpenID 1 and 2, as well as both sreg
+ * namespace URIs found in the wild, as well as missing namespace
+ * definitions (for OpenID 1)
+ *
+ * $message: The OpenID message from which to parse simple
+ * registration fields. This may be a request or response message.
+ *
+ * Returns the sreg namespace URI for the supplied message. The
+ * message may be modified to define a simple registration
+ * namespace.
+ *
+ * @access private
+ */
+ static function _getSRegNS($message)
+ {
+ $alias = null;
+ $found_ns_uri = null;
+
+ // See if there exists an alias for one of the two defined
+ // simple registration types.
+ foreach (array(Auth_OpenID_SREG_NS_URI_1_1,
+ Auth_OpenID_SREG_NS_URI_1_0) as $sreg_ns_uri) {
+ $alias = $message->namespaces->getAlias($sreg_ns_uri);
+ if ($alias !== null) {
+ $found_ns_uri = $sreg_ns_uri;
+ break;
+ }
+ }
+
+ if ($alias === null) {
+ // There is no alias for either of the types, so try to
+ // add one. We default to using the modern value (1.1)
+ $found_ns_uri = Auth_OpenID_SREG_NS_URI_1_1;
+ if ($message->namespaces->addAlias(Auth_OpenID_SREG_NS_URI_1_1,
+ 'sreg') === null) {
+ // An alias for the string 'sreg' already exists, but
+ // it's defined for something other than simple
+ // registration
+ return null;
+ }
+ }
+
+ return $found_ns_uri;
+ }
+}
+
+/**
+ * An object to hold the state of a simple registration request.
+ *
+ * required: A list of the required fields in this simple registration
+ * request
+ *
+ * optional: A list of the optional fields in this simple registration
+ * request
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_SRegRequest extends Auth_OpenID_SRegBase {
+
+ var $ns_alias = 'sreg';
+
+ /**
+ * Initialize an empty simple registration request.
+ */
+ static function build($required=null, $optional=null,
+ $policy_url=null,
+ $sreg_ns_uri=Auth_OpenID_SREG_NS_URI,
+ $cls='Auth_OpenID_SRegRequest')
+ {
+ $obj = new $cls();
+
+ $obj->required = array();
+ $obj->optional = array();
+ $obj->policy_url = $policy_url;
+ $obj->ns_uri = $sreg_ns_uri;
+
+ if ($required) {
+ if (!$obj->requestFields($required, true, true)) {
+ return null;
+ }
+ }
+
+ if ($optional) {
+ if (!$obj->requestFields($optional, false, true)) {
+ return null;
+ }
+ }
+
+ return $obj;
+ }
+
+ /**
+ * Create a simple registration request that contains the fields
+ * that were requested in the OpenID request with the given
+ * arguments
+ *
+ * $request: The OpenID authentication request from which to
+ * extract an sreg request.
+ *
+ * $cls: name of class to use when creating sreg request object.
+ * Used for testing.
+ *
+ * Returns the newly created simple registration request
+ */
+ static function fromOpenIDRequest($request, $cls='Auth_OpenID_SRegRequest')
+ {
+
+ $obj = call_user_func_array(array($cls, 'build'),
+ array(null, null, null, Auth_OpenID_SREG_NS_URI, $cls));
+
+ // Since we're going to mess with namespace URI mapping, don't
+ // mutate the object that was passed in.
+ $m = $request->message;
+
+ $obj->ns_uri = $obj->_getSRegNS($m);
+ $args = $m->getArgs($obj->ns_uri);
+
+ if ($args === null || Auth_OpenID::isFailure($args)) {
+ return null;
+ }
+
+ $obj->parseExtensionArgs($args);
+
+ return $obj;
+ }
+
+ /**
+ * Parse the unqualified simple registration request parameters
+ * and add them to this object.
+ *
+ * This method is essentially the inverse of
+ * getExtensionArgs. This method restores the serialized simple
+ * registration request fields.
+ *
+ * If you are extracting arguments from a standard OpenID
+ * checkid_* request, you probably want to use fromOpenIDRequest,
+ * which will extract the sreg namespace and arguments from the
+ * OpenID request. This method is intended for cases where the
+ * OpenID server needs more control over how the arguments are
+ * parsed than that method provides.
+ *
+ * $args == $message->getArgs($ns_uri);
+ * $request->parseExtensionArgs($args);
+ *
+ * $args: The unqualified simple registration arguments
+ *
+ * strict: Whether requests with fields that are not defined in
+ * the simple registration specification should be tolerated (and
+ * ignored)
+ */
+ function parseExtensionArgs($args, $strict=false)
+ {
+ foreach (array('required', 'optional') as $list_name) {
+ $required = ($list_name == 'required');
+ $items = Auth_OpenID::arrayGet($args, $list_name);
+ if ($items) {
+ foreach (explode(',', $items) as $field_name) {
+ if (!$this->requestField($field_name, $required, $strict)) {
+ if ($strict) {
+ return false;
+ }
+ }
+ }
+ }
+ }
+
+ $this->policy_url = Auth_OpenID::arrayGet($args, 'policy_url');
+
+ return true;
+ }
+
+ /**
+ * A list of all of the simple registration fields that were
+ * requested, whether they were required or optional.
+ */
+ function allRequestedFields()
+ {
+ return array_merge($this->required, $this->optional);
+ }
+
+ /**
+ * Have any simple registration fields been requested?
+ */
+ function wereFieldsRequested()
+ {
+ return count($this->allRequestedFields());
+ }
+
+ /**
+ * Was this field in the request?
+ */
+ function contains($field_name)
+ {
+ return (in_array($field_name, $this->required) ||
+ in_array($field_name, $this->optional));
+ }
+
+ /**
+ * Request the specified field from the OpenID user
+ *
+ * $field_name: the unqualified simple registration field name
+ *
+ * required: whether the given field should be presented to the
+ * user as being a required to successfully complete the request
+ *
+ * strict: whether to raise an exception when a field is added to
+ * a request more than once
+ */
+ function requestField($field_name,
+ $required=false, $strict=false)
+ {
+ if (!Auth_OpenID_checkFieldName($field_name)) {
+ return false;
+ }
+
+ if ($strict) {
+ if ($this->contains($field_name)) {
+ return false;
+ }
+ } else {
+ if (in_array($field_name, $this->required)) {
+ return true;
+ }
+
+ if (in_array($field_name, $this->optional)) {
+ if ($required) {
+ unset($this->optional[array_search($field_name,
+ $this->optional)]);
+ } else {
+ return true;
+ }
+ }
+ }
+
+ if ($required) {
+ $this->required[] = $field_name;
+ } else {
+ $this->optional[] = $field_name;
+ }
+
+ return true;
+ }
+
+ /**
+ * Add the given list of fields to the request
+ *
+ * field_names: The simple registration data fields to request
+ *
+ * required: Whether these values should be presented to the user
+ * as required
+ *
+ * strict: whether to raise an exception when a field is added to
+ * a request more than once
+ */
+ function requestFields($field_names, $required=false, $strict=false)
+ {
+ if (!is_array($field_names)) {
+ return false;
+ }
+
+ foreach ($field_names as $field_name) {
+ if (!$this->requestField($field_name, $required, $strict=$strict)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Get a dictionary of unqualified simple registration arguments
+ * representing this request.
+ *
+ * This method is essentially the inverse of
+ * C{L{parseExtensionArgs}}. This method serializes the simple
+ * registration request fields.
+ */
+ function getExtensionArgs()
+ {
+ $args = array();
+
+ if ($this->required) {
+ $args['required'] = implode(',', $this->required);
+ }
+
+ if ($this->optional) {
+ $args['optional'] = implode(',', $this->optional);
+ }
+
+ if ($this->policy_url) {
+ $args['policy_url'] = $this->policy_url;
+ }
+
+ return $args;
+ }
+}
+
+/**
+ * Represents the data returned in a simple registration response
+ * inside of an OpenID C{id_res} response. This object will be created
+ * by the OpenID server, added to the C{id_res} response object, and
+ * then extracted from the C{id_res} message by the Consumer.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_SRegResponse extends Auth_OpenID_SRegBase {
+
+ var $ns_alias = 'sreg';
+
+ function Auth_OpenID_SRegResponse($data=null,
+ $sreg_ns_uri=Auth_OpenID_SREG_NS_URI)
+ {
+ if ($data === null) {
+ $this->data = array();
+ } else {
+ $this->data = $data;
+ }
+
+ $this->ns_uri = $sreg_ns_uri;
+ }
+
+ /**
+ * Take a C{L{SRegRequest}} and a dictionary of simple
+ * registration values and create a C{L{SRegResponse}} object
+ * containing that data.
+ *
+ * request: The simple registration request object
+ *
+ * data: The simple registration data for this response, as a
+ * dictionary from unqualified simple registration field name to
+ * string (unicode) value. For instance, the nickname should be
+ * stored under the key 'nickname'.
+ */
+ static function extractResponse($request, $data)
+ {
+ $obj = new Auth_OpenID_SRegResponse();
+ $obj->ns_uri = $request->ns_uri;
+
+ foreach ($request->allRequestedFields() as $field) {
+ $value = Auth_OpenID::arrayGet($data, $field);
+ if ($value !== null) {
+ $obj->data[$field] = $value;
+ }
+ }
+
+ return $obj;
+ }
+
+ /**
+ * Create a C{L{SRegResponse}} object from a successful OpenID
+ * library response
+ * (C{L{openid.consumer.consumer.SuccessResponse}}) response
+ * message
+ *
+ * success_response: A SuccessResponse from consumer.complete()
+ *
+ * signed_only: Whether to process only data that was
+ * signed in the id_res message from the server.
+ *
+ * Returns a simple registration response containing the data that
+ * was supplied with the C{id_res} response.
+ */
+ static function fromSuccessResponse($success_response, $signed_only=true)
+ {
+ global $Auth_OpenID_sreg_data_fields;
+
+ $obj = new Auth_OpenID_SRegResponse();
+ $obj->ns_uri = $obj->_getSRegNS($success_response->message);
+
+ if ($signed_only) {
+ $args = $success_response->getSignedNS($obj->ns_uri);
+ } else {
+ $args = $success_response->message->getArgs($obj->ns_uri);
+ }
+
+ if ($args === null || Auth_OpenID::isFailure($args)) {
+ return null;
+ }
+
+ foreach ($Auth_OpenID_sreg_data_fields as $field_name => $desc) {
+ if (in_array($field_name, array_keys($args))) {
+ $obj->data[$field_name] = $args[$field_name];
+ }
+ }
+
+ return $obj;
+ }
+
+ function getExtensionArgs()
+ {
+ return $this->data;
+ }
+
+ // Read-only dictionary interface
+ function get($field_name, $default=null)
+ {
+ if (!Auth_OpenID_checkFieldName($field_name)) {
+ return null;
+ }
+
+ return Auth_OpenID::arrayGet($this->data, $field_name, $default);
+ }
+
+ function contents()
+ {
+ return $this->data;
+ }
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/Server.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/Server.php
new file mode 100644
index 000000000..312a92866
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/Server.php
@@ -0,0 +1,1765 @@
+<?php
+
+/**
+ * OpenID server protocol and logic.
+ *
+ * Overview
+ *
+ * An OpenID server must perform three tasks:
+ *
+ * 1. Examine the incoming request to determine its nature and validity.
+ * 2. Make a decision about how to respond to this request.
+ * 3. Format the response according to the protocol.
+ *
+ * The first and last of these tasks may performed by the {@link
+ * Auth_OpenID_Server::decodeRequest()} and {@link
+ * Auth_OpenID_Server::encodeResponse} methods. Who gets to do the
+ * intermediate task -- deciding how to respond to the request -- will
+ * depend on what type of request it is.
+ *
+ * If it's a request to authenticate a user (a 'checkid_setup' or
+ * 'checkid_immediate' request), you need to decide if you will assert
+ * that this user may claim the identity in question. Exactly how you
+ * do that is a matter of application policy, but it generally
+ * involves making sure the user has an account with your system and
+ * is logged in, checking to see if that identity is hers to claim,
+ * and verifying with the user that she does consent to releasing that
+ * information to the party making the request.
+ *
+ * Examine the properties of the {@link Auth_OpenID_CheckIDRequest}
+ * object, and if and when you've come to a decision, form a response
+ * by calling {@link Auth_OpenID_CheckIDRequest::answer()}.
+ *
+ * Other types of requests relate to establishing associations between
+ * client and server and verifing the authenticity of previous
+ * communications. {@link Auth_OpenID_Server} contains all the logic
+ * and data necessary to respond to such requests; just pass it to
+ * {@link Auth_OpenID_Server::handleRequest()}.
+ *
+ * OpenID Extensions
+ *
+ * Do you want to provide other information for your users in addition
+ * to authentication? Version 1.2 of the OpenID protocol allows
+ * consumers to add extensions to their requests. For example, with
+ * sites using the Simple Registration
+ * Extension
+ * (http://openid.net/specs/openid-simple-registration-extension-1_0.html),
+ * a user can agree to have their nickname and e-mail address sent to
+ * a site when they sign up.
+ *
+ * Since extensions do not change the way OpenID authentication works,
+ * code to handle extension requests may be completely separate from
+ * the {@link Auth_OpenID_Request} class here. But you'll likely want
+ * data sent back by your extension to be signed. {@link
+ * Auth_OpenID_ServerResponse} provides methods with which you can add
+ * data to it which can be signed with the other data in the OpenID
+ * signature.
+ *
+ * For example:
+ *
+ * <pre> // when request is a checkid_* request
+ * $response = $request->answer(true);
+ * // this will a signed 'openid.sreg.timezone' parameter to the response
+ * response.addField('sreg', 'timezone', 'America/Los_Angeles')</pre>
+ *
+ * Stores
+ *
+ * The OpenID server needs to maintain state between requests in order
+ * to function. Its mechanism for doing this is called a store. The
+ * store interface is defined in Interface.php. Additionally, several
+ * concrete store implementations are provided, so that most sites
+ * won't need to implement a custom store. For a store backed by flat
+ * files on disk, see {@link Auth_OpenID_FileStore}. For stores based
+ * on MySQL, SQLite, or PostgreSQL, see the {@link
+ * Auth_OpenID_SQLStore} subclasses.
+ *
+ * Upgrading
+ *
+ * The keys by which a server looks up associations in its store have
+ * changed in version 1.2 of this library. If your store has entries
+ * created from version 1.0 code, you should empty it.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Required imports
+ */
+require_once "Auth/OpenID.php";
+require_once "Auth/OpenID/Association.php";
+require_once "Auth/OpenID/CryptUtil.php";
+require_once "Auth/OpenID/BigMath.php";
+require_once "Auth/OpenID/DiffieHellman.php";
+require_once "Auth/OpenID/KVForm.php";
+require_once "Auth/OpenID/TrustRoot.php";
+require_once "Auth/OpenID/ServerRequest.php";
+require_once "Auth/OpenID/Message.php";
+require_once "Auth/OpenID/Nonce.php";
+
+define('AUTH_OPENID_HTTP_OK', 200);
+define('AUTH_OPENID_HTTP_REDIRECT', 302);
+define('AUTH_OPENID_HTTP_ERROR', 400);
+
+/**
+ * @access private
+ */
+global $_Auth_OpenID_Request_Modes;
+$_Auth_OpenID_Request_Modes = array('checkid_setup',
+ 'checkid_immediate');
+
+/**
+ * @access private
+ */
+define('Auth_OpenID_ENCODE_KVFORM', 'kfvorm');
+
+/**
+ * @access private
+ */
+define('Auth_OpenID_ENCODE_URL', 'URL/redirect');
+
+/**
+ * @access private
+ */
+define('Auth_OpenID_ENCODE_HTML_FORM', 'HTML form');
+
+/**
+ * @access private
+ */
+function Auth_OpenID_isError($obj, $cls = 'Auth_OpenID_ServerError')
+{
+ return is_a($obj, $cls);
+}
+
+/**
+ * An error class which gets instantiated and returned whenever an
+ * OpenID protocol error occurs. Be prepared to use this in place of
+ * an ordinary server response.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_ServerError {
+ /**
+ * @access private
+ */
+ function Auth_OpenID_ServerError($message = null, $text = null,
+ $reference = null, $contact = null)
+ {
+ $this->message = $message;
+ $this->text = $text;
+ $this->contact = $contact;
+ $this->reference = $reference;
+ }
+
+ function getReturnTo()
+ {
+ if ($this->message &&
+ $this->message->hasKey(Auth_OpenID_OPENID_NS, 'return_to')) {
+ return $this->message->getArg(Auth_OpenID_OPENID_NS,
+ 'return_to');
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Returns the return_to URL for the request which caused this
+ * error.
+ */
+ function hasReturnTo()
+ {
+ return $this->getReturnTo() !== null;
+ }
+
+ /**
+ * Encodes this error's response as a URL suitable for
+ * redirection. If the response has no return_to, another
+ * Auth_OpenID_ServerError is returned.
+ */
+ function encodeToURL()
+ {
+ if (!$this->message) {
+ return null;
+ }
+
+ $msg = $this->toMessage();
+ return $msg->toURL($this->getReturnTo());
+ }
+
+ /**
+ * Encodes the response to key-value form. This is a
+ * machine-readable format used to respond to messages which came
+ * directly from the consumer and not through the user-agent. See
+ * the OpenID specification.
+ */
+ function encodeToKVForm()
+ {
+ return Auth_OpenID_KVForm::fromArray(
+ array('mode' => 'error',
+ 'error' => $this->toString()));
+ }
+
+ function toFormMarkup($form_tag_attrs=null)
+ {
+ $msg = $this->toMessage();
+ return $msg->toFormMarkup($this->getReturnTo(), $form_tag_attrs);
+ }
+
+ function toHTML($form_tag_attrs=null)
+ {
+ return Auth_OpenID::autoSubmitHTML(
+ $this->toFormMarkup($form_tag_attrs));
+ }
+
+ function toMessage()
+ {
+ // Generate a Message object for sending to the relying party,
+ // after encoding.
+ $namespace = $this->message->getOpenIDNamespace();
+ $reply = new Auth_OpenID_Message($namespace);
+ $reply->setArg(Auth_OpenID_OPENID_NS, 'mode', 'error');
+ $reply->setArg(Auth_OpenID_OPENID_NS, 'error', $this->toString());
+
+ if ($this->contact !== null) {
+ $reply->setArg(Auth_OpenID_OPENID_NS, 'contact', $this->contact);
+ }
+
+ if ($this->reference !== null) {
+ $reply->setArg(Auth_OpenID_OPENID_NS, 'reference',
+ $this->reference);
+ }
+
+ return $reply;
+ }
+
+ /**
+ * Returns one of Auth_OpenID_ENCODE_URL,
+ * Auth_OpenID_ENCODE_KVFORM, or null, depending on the type of
+ * encoding expected for this error's payload.
+ */
+ function whichEncoding()
+ {
+ global $_Auth_OpenID_Request_Modes;
+
+ if ($this->hasReturnTo()) {
+ if ($this->message->isOpenID2() &&
+ (strlen($this->encodeToURL()) >
+ Auth_OpenID_OPENID1_URL_LIMIT)) {
+ return Auth_OpenID_ENCODE_HTML_FORM;
+ } else {
+ return Auth_OpenID_ENCODE_URL;
+ }
+ }
+
+ if (!$this->message) {
+ return null;
+ }
+
+ $mode = $this->message->getArg(Auth_OpenID_OPENID_NS,
+ 'mode');
+
+ if ($mode) {
+ if (!in_array($mode, $_Auth_OpenID_Request_Modes)) {
+ return Auth_OpenID_ENCODE_KVFORM;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Returns this error message.
+ */
+ function toString()
+ {
+ if ($this->text) {
+ return $this->text;
+ } else {
+ return get_class($this) . " error";
+ }
+ }
+}
+
+/**
+ * Error returned by the server code when a return_to is absent from a
+ * request.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_NoReturnToError extends Auth_OpenID_ServerError {
+ function Auth_OpenID_NoReturnToError($message = null,
+ $text = "No return_to URL available")
+ {
+ parent::Auth_OpenID_ServerError($message, $text);
+ }
+
+ function toString()
+ {
+ return "No return_to available";
+ }
+}
+
+/**
+ * An error indicating that the return_to URL is malformed.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_MalformedReturnURL extends Auth_OpenID_ServerError {
+ function Auth_OpenID_MalformedReturnURL($message, $return_to)
+ {
+ $this->return_to = $return_to;
+ parent::Auth_OpenID_ServerError($message, "malformed return_to URL");
+ }
+}
+
+/**
+ * This error is returned when the trust_root value is malformed.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_MalformedTrustRoot extends Auth_OpenID_ServerError {
+ function Auth_OpenID_MalformedTrustRoot($message = null,
+ $text = "Malformed trust root")
+ {
+ parent::Auth_OpenID_ServerError($message, $text);
+ }
+
+ function toString()
+ {
+ return "Malformed trust root";
+ }
+}
+
+/**
+ * The base class for all server request classes.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_Request {
+ var $mode = null;
+}
+
+/**
+ * A request to verify the validity of a previous response.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_CheckAuthRequest extends Auth_OpenID_Request {
+ var $mode = "check_authentication";
+ var $invalidate_handle = null;
+
+ function Auth_OpenID_CheckAuthRequest($assoc_handle, $signed,
+ $invalidate_handle = null)
+ {
+ $this->assoc_handle = $assoc_handle;
+ $this->signed = $signed;
+ if ($invalidate_handle !== null) {
+ $this->invalidate_handle = $invalidate_handle;
+ }
+ $this->namespace = Auth_OpenID_OPENID2_NS;
+ $this->message = null;
+ }
+
+ static function fromMessage($message, $server=null)
+ {
+ $required_keys = array('assoc_handle', 'sig', 'signed');
+
+ foreach ($required_keys as $k) {
+ if (!$message->getArg(Auth_OpenID_OPENID_NS, $k)) {
+ return new Auth_OpenID_ServerError($message,
+ sprintf("%s request missing required parameter %s from \
+ query", "check_authentication", $k));
+ }
+ }
+
+ $assoc_handle = $message->getArg(Auth_OpenID_OPENID_NS, 'assoc_handle');
+ $sig = $message->getArg(Auth_OpenID_OPENID_NS, 'sig');
+
+ $signed_list = $message->getArg(Auth_OpenID_OPENID_NS, 'signed');
+ $signed_list = explode(",", $signed_list);
+
+ $signed = $message;
+ if ($signed->hasKey(Auth_OpenID_OPENID_NS, 'mode')) {
+ $signed->setArg(Auth_OpenID_OPENID_NS, 'mode', 'id_res');
+ }
+
+ $result = new Auth_OpenID_CheckAuthRequest($assoc_handle, $signed);
+ $result->message = $message;
+ $result->sig = $sig;
+ $result->invalidate_handle = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'invalidate_handle');
+ return $result;
+ }
+
+ function answer($signatory)
+ {
+ $is_valid = $signatory->verify($this->assoc_handle, $this->signed);
+
+ // Now invalidate that assoc_handle so it this checkAuth
+ // message cannot be replayed.
+ $signatory->invalidate($this->assoc_handle, true);
+ $response = new Auth_OpenID_ServerResponse($this);
+
+ $response->fields->setArg(Auth_OpenID_OPENID_NS,
+ 'is_valid',
+ ($is_valid ? "true" : "false"));
+
+ if ($this->invalidate_handle) {
+ $assoc = $signatory->getAssociation($this->invalidate_handle,
+ false);
+ if (!$assoc) {
+ $response->fields->setArg(Auth_OpenID_OPENID_NS,
+ 'invalidate_handle',
+ $this->invalidate_handle);
+ }
+ }
+ return $response;
+ }
+}
+
+/**
+ * A class implementing plaintext server sessions.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_PlainTextServerSession {
+ /**
+ * An object that knows how to handle association requests with no
+ * session type.
+ */
+ var $session_type = 'no-encryption';
+ var $needs_math = false;
+ var $allowed_assoc_types = array('HMAC-SHA1', 'HMAC-SHA256');
+
+ static function fromMessage($unused_request)
+ {
+ return new Auth_OpenID_PlainTextServerSession();
+ }
+
+ function answer($secret)
+ {
+ return array('mac_key' => base64_encode($secret));
+ }
+}
+
+/**
+ * A class implementing DH-SHA1 server sessions.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_DiffieHellmanSHA1ServerSession {
+ /**
+ * An object that knows how to handle association requests with
+ * the Diffie-Hellman session type.
+ */
+
+ var $session_type = 'DH-SHA1';
+ var $needs_math = true;
+ var $allowed_assoc_types = array('HMAC-SHA1');
+ var $hash_func = 'Auth_OpenID_SHA1';
+
+ function Auth_OpenID_DiffieHellmanSHA1ServerSession($dh, $consumer_pubkey)
+ {
+ $this->dh = $dh;
+ $this->consumer_pubkey = $consumer_pubkey;
+ }
+
+ static function getDH($message)
+ {
+ $dh_modulus = $message->getArg(Auth_OpenID_OPENID_NS, 'dh_modulus');
+ $dh_gen = $message->getArg(Auth_OpenID_OPENID_NS, 'dh_gen');
+
+ if ((($dh_modulus === null) && ($dh_gen !== null)) ||
+ (($dh_gen === null) && ($dh_modulus !== null))) {
+
+ if ($dh_modulus === null) {
+ $missing = 'modulus';
+ } else {
+ $missing = 'generator';
+ }
+
+ return new Auth_OpenID_ServerError($message,
+ 'If non-default modulus or generator is '.
+ 'supplied, both must be supplied. Missing '.
+ $missing);
+ }
+
+ $lib = Auth_OpenID_getMathLib();
+
+ if ($dh_modulus || $dh_gen) {
+ $dh_modulus = $lib->base64ToLong($dh_modulus);
+ $dh_gen = $lib->base64ToLong($dh_gen);
+ if ($lib->cmp($dh_modulus, 0) == 0 ||
+ $lib->cmp($dh_gen, 0) == 0) {
+ return new Auth_OpenID_ServerError(
+ $message, "Failed to parse dh_mod or dh_gen");
+ }
+ $dh = new Auth_OpenID_DiffieHellman($dh_modulus, $dh_gen);
+ } else {
+ $dh = new Auth_OpenID_DiffieHellman();
+ }
+
+ $consumer_pubkey = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'dh_consumer_public');
+ if ($consumer_pubkey === null) {
+ return new Auth_OpenID_ServerError($message,
+ 'Public key for DH-SHA1 session '.
+ 'not found in query');
+ }
+
+ $consumer_pubkey =
+ $lib->base64ToLong($consumer_pubkey);
+
+ if ($consumer_pubkey === false) {
+ return new Auth_OpenID_ServerError($message,
+ "dh_consumer_public is not base64");
+ }
+
+ return array($dh, $consumer_pubkey);
+ }
+
+ static function fromMessage($message)
+ {
+ $result = Auth_OpenID_DiffieHellmanSHA1ServerSession::getDH($message);
+
+ if (is_a($result, 'Auth_OpenID_ServerError')) {
+ return $result;
+ } else {
+ list($dh, $consumer_pubkey) = $result;
+ return new Auth_OpenID_DiffieHellmanSHA1ServerSession($dh,
+ $consumer_pubkey);
+ }
+ }
+
+ function answer($secret)
+ {
+ $lib = Auth_OpenID_getMathLib();
+ $mac_key = $this->dh->xorSecret($this->consumer_pubkey, $secret,
+ $this->hash_func);
+ return array(
+ 'dh_server_public' =>
+ $lib->longToBase64($this->dh->public),
+ 'enc_mac_key' => base64_encode($mac_key));
+ }
+}
+
+/**
+ * A class implementing DH-SHA256 server sessions.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_DiffieHellmanSHA256ServerSession
+ extends Auth_OpenID_DiffieHellmanSHA1ServerSession {
+
+ var $session_type = 'DH-SHA256';
+ var $hash_func = 'Auth_OpenID_SHA256';
+ var $allowed_assoc_types = array('HMAC-SHA256');
+
+ static function fromMessage($message)
+ {
+ $result = Auth_OpenID_DiffieHellmanSHA1ServerSession::getDH($message);
+
+ if (is_a($result, 'Auth_OpenID_ServerError')) {
+ return $result;
+ } else {
+ list($dh, $consumer_pubkey) = $result;
+ return new Auth_OpenID_DiffieHellmanSHA256ServerSession($dh,
+ $consumer_pubkey);
+ }
+ }
+}
+
+/**
+ * A request to associate with the server.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AssociateRequest extends Auth_OpenID_Request {
+ var $mode = "associate";
+
+ static function getSessionClasses()
+ {
+ return array(
+ 'no-encryption' => 'Auth_OpenID_PlainTextServerSession',
+ 'DH-SHA1' => 'Auth_OpenID_DiffieHellmanSHA1ServerSession',
+ 'DH-SHA256' => 'Auth_OpenID_DiffieHellmanSHA256ServerSession');
+ }
+
+ function Auth_OpenID_AssociateRequest($session, $assoc_type)
+ {
+ $this->session = $session;
+ $this->namespace = Auth_OpenID_OPENID2_NS;
+ $this->assoc_type = $assoc_type;
+ }
+
+ static function fromMessage($message, $server=null)
+ {
+ if ($message->isOpenID1()) {
+ $session_type = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'session_type');
+
+ if ($session_type == 'no-encryption') {
+ // oidutil.log('Received OpenID 1 request with a no-encryption '
+ // 'assocaition session type. Continuing anyway.')
+ } else if (!$session_type) {
+ $session_type = 'no-encryption';
+ }
+ } else {
+ $session_type = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'session_type');
+ if ($session_type === null) {
+ return new Auth_OpenID_ServerError($message,
+ "session_type missing from request");
+ }
+ }
+
+ $session_class = Auth_OpenID::arrayGet(
+ Auth_OpenID_AssociateRequest::getSessionClasses(),
+ $session_type);
+
+ if ($session_class === null) {
+ return new Auth_OpenID_ServerError($message,
+ "Unknown session type " .
+ $session_type);
+ }
+
+ $session = call_user_func(array($session_class, 'fromMessage'),
+ $message);
+ if (is_a($session, 'Auth_OpenID_ServerError')) {
+ return $session;
+ }
+
+ $assoc_type = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'assoc_type', 'HMAC-SHA1');
+
+ if (!in_array($assoc_type, $session->allowed_assoc_types)) {
+ $fmt = "Session type %s does not support association type %s";
+ return new Auth_OpenID_ServerError($message,
+ sprintf($fmt, $session_type, $assoc_type));
+ }
+
+ $obj = new Auth_OpenID_AssociateRequest($session, $assoc_type);
+ $obj->message = $message;
+ $obj->namespace = $message->getOpenIDNamespace();
+ return $obj;
+ }
+
+ function answer($assoc)
+ {
+ $response = new Auth_OpenID_ServerResponse($this);
+ $response->fields->updateArgs(Auth_OpenID_OPENID_NS,
+ array(
+ 'expires_in' => sprintf('%d', $assoc->getExpiresIn()),
+ 'assoc_type' => $this->assoc_type,
+ 'assoc_handle' => $assoc->handle));
+
+ $response->fields->updateArgs(Auth_OpenID_OPENID_NS,
+ $this->session->answer($assoc->secret));
+
+ if (! ($this->session->session_type == 'no-encryption'
+ && $this->message->isOpenID1())) {
+ $response->fields->setArg(Auth_OpenID_OPENID_NS,
+ 'session_type',
+ $this->session->session_type);
+ }
+
+ return $response;
+ }
+
+ function answerUnsupported($text_message,
+ $preferred_association_type=null,
+ $preferred_session_type=null)
+ {
+ if ($this->message->isOpenID1()) {
+ return new Auth_OpenID_ServerError($this->message);
+ }
+
+ $response = new Auth_OpenID_ServerResponse($this);
+ $response->fields->setArg(Auth_OpenID_OPENID_NS,
+ 'error_code', 'unsupported-type');
+ $response->fields->setArg(Auth_OpenID_OPENID_NS,
+ 'error', $text_message);
+
+ if ($preferred_association_type) {
+ $response->fields->setArg(Auth_OpenID_OPENID_NS,
+ 'assoc_type',
+ $preferred_association_type);
+ }
+
+ if ($preferred_session_type) {
+ $response->fields->setArg(Auth_OpenID_OPENID_NS,
+ 'session_type',
+ $preferred_session_type);
+ }
+ $response->code = AUTH_OPENID_HTTP_ERROR;
+ return $response;
+ }
+}
+
+/**
+ * A request to confirm the identity of a user.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_CheckIDRequest extends Auth_OpenID_Request {
+ /**
+ * Return-to verification callback. Default is
+ * Auth_OpenID_verifyReturnTo from TrustRoot.php.
+ */
+ var $verifyReturnTo = 'Auth_OpenID_verifyReturnTo';
+
+ /**
+ * The mode of this request.
+ */
+ var $mode = "checkid_setup"; // or "checkid_immediate"
+
+ /**
+ * Whether this request is for immediate mode.
+ */
+ var $immediate = false;
+
+ /**
+ * The trust_root value for this request.
+ */
+ var $trust_root = null;
+
+ /**
+ * The OpenID namespace for this request.
+ * deprecated since version 2.0.2
+ */
+ var $namespace;
+
+ static function make($message, $identity, $return_to, $trust_root = null,
+ $immediate = false, $assoc_handle = null, $server = null)
+ {
+ if ($server === null) {
+ return new Auth_OpenID_ServerError($message,
+ "server must not be null");
+ }
+
+ if ($return_to &&
+ !Auth_OpenID_TrustRoot::_parse($return_to)) {
+ return new Auth_OpenID_MalformedReturnURL($message, $return_to);
+ }
+
+ $r = new Auth_OpenID_CheckIDRequest($identity, $return_to,
+ $trust_root, $immediate,
+ $assoc_handle, $server);
+
+ $r->namespace = $message->getOpenIDNamespace();
+ $r->message = $message;
+
+ if (!$r->trustRootValid()) {
+ return new Auth_OpenID_UntrustedReturnURL($message,
+ $return_to,
+ $trust_root);
+ } else {
+ return $r;
+ }
+ }
+
+ function Auth_OpenID_CheckIDRequest($identity, $return_to,
+ $trust_root = null, $immediate = false,
+ $assoc_handle = null, $server = null,
+ $claimed_id = null)
+ {
+ $this->namespace = Auth_OpenID_OPENID2_NS;
+ $this->assoc_handle = $assoc_handle;
+ $this->identity = $identity;
+ if ($claimed_id === null) {
+ $this->claimed_id = $identity;
+ } else {
+ $this->claimed_id = $claimed_id;
+ }
+ $this->return_to = $return_to;
+ $this->trust_root = $trust_root;
+ $this->server = $server;
+
+ if ($immediate) {
+ $this->immediate = true;
+ $this->mode = "checkid_immediate";
+ } else {
+ $this->immediate = false;
+ $this->mode = "checkid_setup";
+ }
+ }
+
+ function equals($other)
+ {
+ return (
+ (is_a($other, 'Auth_OpenID_CheckIDRequest')) &&
+ ($this->namespace == $other->namespace) &&
+ ($this->assoc_handle == $other->assoc_handle) &&
+ ($this->identity == $other->identity) &&
+ ($this->claimed_id == $other->claimed_id) &&
+ ($this->return_to == $other->return_to) &&
+ ($this->trust_root == $other->trust_root));
+ }
+
+ /*
+ * Does the relying party publish the return_to URL for this
+ * response under the realm? It is up to the provider to set a
+ * policy for what kinds of realms should be allowed. This
+ * return_to URL verification reduces vulnerability to data-theft
+ * attacks based on open proxies, corss-site-scripting, or open
+ * redirectors.
+ *
+ * This check should only be performed after making sure that the
+ * return_to URL matches the realm.
+ *
+ * @return true if the realm publishes a document with the
+ * return_to URL listed, false if not or if discovery fails
+ */
+ function returnToVerified()
+ {
+ $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
+ return call_user_func_array($this->verifyReturnTo,
+ array($this->trust_root, $this->return_to, $fetcher));
+ }
+
+ static function fromMessage($message, $server)
+ {
+ $mode = $message->getArg(Auth_OpenID_OPENID_NS, 'mode');
+ $immediate = null;
+
+ if ($mode == "checkid_immediate") {
+ $immediate = true;
+ $mode = "checkid_immediate";
+ } else {
+ $immediate = false;
+ $mode = "checkid_setup";
+ }
+
+ $return_to = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'return_to');
+
+ if (($message->isOpenID1()) &&
+ (!$return_to)) {
+ $fmt = "Missing required field 'return_to' from checkid request";
+ return new Auth_OpenID_ServerError($message, $fmt);
+ }
+
+ $identity = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'identity');
+ $claimed_id = $message->getArg(Auth_OpenID_OPENID_NS, 'claimed_id');
+ if ($message->isOpenID1()) {
+ if ($identity === null) {
+ $s = "OpenID 1 message did not contain openid.identity";
+ return new Auth_OpenID_ServerError($message, $s);
+ }
+ } else {
+ if ($identity && !$claimed_id) {
+ $s = "OpenID 2.0 message contained openid.identity but not " .
+ "claimed_id";
+ return new Auth_OpenID_ServerError($message, $s);
+ } else if ($claimed_id && !$identity) {
+ $s = "OpenID 2.0 message contained openid.claimed_id " .
+ "but not identity";
+ return new Auth_OpenID_ServerError($message, $s);
+ }
+ }
+
+ // There's a case for making self.trust_root be a TrustRoot
+ // here. But if TrustRoot isn't currently part of the
+ // "public" API, I'm not sure it's worth doing.
+ if ($message->isOpenID1()) {
+ $trust_root_param = 'trust_root';
+ } else {
+ $trust_root_param = 'realm';
+ }
+ $trust_root = $message->getArg(Auth_OpenID_OPENID_NS,
+ $trust_root_param);
+ if (! $trust_root) {
+ $trust_root = $return_to;
+ }
+
+ if (! $message->isOpenID1() &&
+ ($return_to === null) &&
+ ($trust_root === null)) {
+ return new Auth_OpenID_ServerError($message,
+ "openid.realm required when openid.return_to absent");
+ }
+
+ $assoc_handle = $message->getArg(Auth_OpenID_OPENID_NS,
+ 'assoc_handle');
+
+ $obj = Auth_OpenID_CheckIDRequest::make($message,
+ $identity,
+ $return_to,
+ $trust_root,
+ $immediate,
+ $assoc_handle,
+ $server);
+
+ if (is_a($obj, 'Auth_OpenID_ServerError')) {
+ return $obj;
+ }
+
+ $obj->claimed_id = $claimed_id;
+
+ return $obj;
+ }
+
+ function idSelect()
+ {
+ // Is the identifier to be selected by the IDP?
+ // So IDPs don't have to import the constant
+ return $this->identity == Auth_OpenID_IDENTIFIER_SELECT;
+ }
+
+ function trustRootValid()
+ {
+ if (!$this->trust_root) {
+ return true;
+ }
+
+ $tr = Auth_OpenID_TrustRoot::_parse($this->trust_root);
+ if ($tr === false) {
+ return new Auth_OpenID_MalformedTrustRoot($this->message,
+ $this->trust_root);
+ }
+
+ if ($this->return_to !== null) {
+ return Auth_OpenID_TrustRoot::match($this->trust_root,
+ $this->return_to);
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Respond to this request. Return either an
+ * {@link Auth_OpenID_ServerResponse} or
+ * {@link Auth_OpenID_ServerError}.
+ *
+ * @param bool $allow Allow this user to claim this identity, and
+ * allow the consumer to have this information?
+ *
+ * @param string $server_url DEPRECATED. Passing $op_endpoint to
+ * the {@link Auth_OpenID_Server} constructor makes this optional.
+ *
+ * When an OpenID 1.x immediate mode request does not succeed, it
+ * gets back a URL where the request may be carried out in a
+ * not-so-immediate fashion. Pass my URL in here (the fully
+ * qualified address of this server's endpoint, i.e.
+ * http://example.com/server), and I will use it as a base for the
+ * URL for a new request.
+ *
+ * Optional for requests where {@link $immediate} is false or
+ * $allow is true.
+ *
+ * @param string $identity The OP-local identifier to answer with.
+ * Only for use when the relying party requested identifier
+ * selection.
+ *
+ * @param string $claimed_id The claimed identifier to answer
+ * with, for use with identifier selection in the case where the
+ * claimed identifier and the OP-local identifier differ,
+ * i.e. when the claimed_id uses delegation.
+ *
+ * If $identity is provided but this is not, $claimed_id will
+ * default to the value of $identity. When answering requests
+ * that did not ask for identifier selection, the response
+ * $claimed_id will default to that of the request.
+ *
+ * This parameter is new in OpenID 2.0.
+ *
+ * @return mixed
+ */
+ function answer($allow, $server_url = null, $identity = null,
+ $claimed_id = null)
+ {
+ if (!$this->return_to) {
+ return new Auth_OpenID_NoReturnToError();
+ }
+
+ if (!$server_url) {
+ if ((!$this->message->isOpenID1()) &&
+ (!$this->server->op_endpoint)) {
+ return new Auth_OpenID_ServerError(null,
+ "server should be constructed with op_endpoint to " .
+ "respond to OpenID 2.0 messages.");
+ }
+
+ $server_url = $this->server->op_endpoint;
+ }
+
+ if ($allow) {
+ $mode = 'id_res';
+ } else if ($this->message->isOpenID1()) {
+ if ($this->immediate) {
+ $mode = 'id_res';
+ } else {
+ $mode = 'cancel';
+ }
+ } else {
+ if ($this->immediate) {
+ $mode = 'setup_needed';
+ } else {
+ $mode = 'cancel';
+ }
+ }
+
+ if (!$this->trustRootValid()) {
+ return new Auth_OpenID_UntrustedReturnURL(null,
+ $this->return_to,
+ $this->trust_root);
+ }
+
+ $response = new Auth_OpenID_ServerResponse($this);
+
+ if ($claimed_id &&
+ ($this->message->isOpenID1())) {
+ return new Auth_OpenID_ServerError(null,
+ "claimed_id is new in OpenID 2.0 and not " .
+ "available for ".$this->namespace);
+ }
+
+ if ($identity && !$claimed_id) {
+ $claimed_id = $identity;
+ }
+
+ if ($allow) {
+
+ if ($this->identity == Auth_OpenID_IDENTIFIER_SELECT) {
+ if (!$identity) {
+ return new Auth_OpenID_ServerError(null,
+ "This request uses IdP-driven identifier selection. " .
+ "You must supply an identifier in the response.");
+ }
+
+ $response_identity = $identity;
+ $response_claimed_id = $claimed_id;
+
+ } else if ($this->identity) {
+ if ($identity &&
+ ($this->identity != $identity)) {
+ $fmt = "Request was for %s, cannot reply with identity %s";
+ return new Auth_OpenID_ServerError(null,
+ sprintf($fmt, $this->identity, $identity));
+ }
+
+ $response_identity = $this->identity;
+ $response_claimed_id = $this->claimed_id;
+ } else {
+ if ($identity) {
+ return new Auth_OpenID_ServerError(null,
+ "This request specified no identity and " .
+ "you supplied ".$identity);
+ }
+
+ $response_identity = null;
+ }
+
+ if (($this->message->isOpenID1()) &&
+ ($response_identity === null)) {
+ return new Auth_OpenID_ServerError(null,
+ "Request was an OpenID 1 request, so response must " .
+ "include an identifier.");
+ }
+
+ $response->fields->updateArgs(Auth_OpenID_OPENID_NS,
+ array('mode' => $mode,
+ 'return_to' => $this->return_to,
+ 'response_nonce' => Auth_OpenID_mkNonce()));
+
+ if (!$this->message->isOpenID1()) {
+ $response->fields->setArg(Auth_OpenID_OPENID_NS,
+ 'op_endpoint', $server_url);
+ }
+
+ if ($response_identity !== null) {
+ $response->fields->setArg(
+ Auth_OpenID_OPENID_NS,
+ 'identity',
+ $response_identity);
+ if ($this->message->isOpenID2()) {
+ $response->fields->setArg(
+ Auth_OpenID_OPENID_NS,
+ 'claimed_id',
+ $response_claimed_id);
+ }
+ }
+
+ } else {
+ $response->fields->setArg(Auth_OpenID_OPENID_NS,
+ 'mode', $mode);
+
+ if ($this->immediate) {
+ if (($this->message->isOpenID1()) &&
+ (!$server_url)) {
+ return new Auth_OpenID_ServerError(null,
+ 'setup_url is required for $allow=false \
+ in OpenID 1.x immediate mode.');
+ }
+
+ $setup_request = new Auth_OpenID_CheckIDRequest(
+ $this->identity,
+ $this->return_to,
+ $this->trust_root,
+ false,
+ $this->assoc_handle,
+ $this->server,
+ $this->claimed_id);
+ $setup_request->message = $this->message;
+
+ $setup_url = $setup_request->encodeToURL($server_url);
+
+ if ($setup_url === null) {
+ return new Auth_OpenID_NoReturnToError();
+ }
+
+ $response->fields->setArg(Auth_OpenID_OPENID_NS,
+ 'user_setup_url',
+ $setup_url);
+ }
+ }
+
+ return $response;
+ }
+
+ function encodeToURL($server_url)
+ {
+ if (!$this->return_to) {
+ return new Auth_OpenID_NoReturnToError();
+ }
+
+ // Imported from the alternate reality where these classes are
+ // used in both the client and server code, so Requests are
+ // Encodable too. That's right, code imported from alternate
+ // realities all for the love of you, id_res/user_setup_url.
+
+ $q = array('mode' => $this->mode,
+ 'identity' => $this->identity,
+ 'claimed_id' => $this->claimed_id,
+ 'return_to' => $this->return_to);
+
+ if ($this->trust_root) {
+ if ($this->message->isOpenID1()) {
+ $q['trust_root'] = $this->trust_root;
+ } else {
+ $q['realm'] = $this->trust_root;
+ }
+ }
+
+ if ($this->assoc_handle) {
+ $q['assoc_handle'] = $this->assoc_handle;
+ }
+
+ $response = new Auth_OpenID_Message(
+ $this->message->getOpenIDNamespace());
+ $response->updateArgs(Auth_OpenID_OPENID_NS, $q);
+ return $response->toURL($server_url);
+ }
+
+ function getCancelURL()
+ {
+ if (!$this->return_to) {
+ return new Auth_OpenID_NoReturnToError();
+ }
+
+ if ($this->immediate) {
+ return new Auth_OpenID_ServerError(null,
+ "Cancel is not an appropriate \
+ response to immediate mode \
+ requests.");
+ }
+
+ $response = new Auth_OpenID_Message(
+ $this->message->getOpenIDNamespace());
+ $response->setArg(Auth_OpenID_OPENID_NS, 'mode', 'cancel');
+ return $response->toURL($this->return_to);
+ }
+}
+
+/**
+ * This class encapsulates the response to an OpenID server request.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_ServerResponse {
+
+ function Auth_OpenID_ServerResponse($request)
+ {
+ $this->request = $request;
+ $this->fields = new Auth_OpenID_Message($this->request->namespace);
+ }
+
+ function whichEncoding()
+ {
+ global $_Auth_OpenID_Request_Modes;
+
+ if (in_array($this->request->mode, $_Auth_OpenID_Request_Modes)) {
+ if ($this->fields->isOpenID2() &&
+ (strlen($this->encodeToURL()) >
+ Auth_OpenID_OPENID1_URL_LIMIT)) {
+ return Auth_OpenID_ENCODE_HTML_FORM;
+ } else {
+ return Auth_OpenID_ENCODE_URL;
+ }
+ } else {
+ return Auth_OpenID_ENCODE_KVFORM;
+ }
+ }
+
+ /*
+ * Returns the form markup for this response.
+ *
+ * @return str
+ */
+ function toFormMarkup($form_tag_attrs=null)
+ {
+ return $this->fields->toFormMarkup($this->request->return_to,
+ $form_tag_attrs);
+ }
+
+ /*
+ * Returns an HTML document containing the form markup for this
+ * response that autosubmits with javascript.
+ */
+ function toHTML()
+ {
+ return Auth_OpenID::autoSubmitHTML($this->toFormMarkup());
+ }
+
+ /*
+ * Returns True if this response's encoding is ENCODE_HTML_FORM.
+ * Convenience method for server authors.
+ *
+ * @return bool
+ */
+ function renderAsForm()
+ {
+ return $this->whichEncoding() == Auth_OpenID_ENCODE_HTML_FORM;
+ }
+
+
+ function encodeToURL()
+ {
+ return $this->fields->toURL($this->request->return_to);
+ }
+
+ function addExtension($extension_response)
+ {
+ $extension_response->toMessage($this->fields);
+ }
+
+ function needsSigning()
+ {
+ return $this->fields->getArg(Auth_OpenID_OPENID_NS,
+ 'mode') == 'id_res';
+ }
+
+ function encodeToKVForm()
+ {
+ return $this->fields->toKVForm();
+ }
+}
+
+/**
+ * A web-capable response object which you can use to generate a
+ * user-agent response.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_WebResponse {
+ var $code = AUTH_OPENID_HTTP_OK;
+ var $body = "";
+
+ function Auth_OpenID_WebResponse($code = null, $headers = null,
+ $body = null)
+ {
+ if ($code) {
+ $this->code = $code;
+ }
+
+ if ($headers !== null) {
+ $this->headers = $headers;
+ } else {
+ $this->headers = array();
+ }
+
+ if ($body !== null) {
+ $this->body = $body;
+ }
+ }
+}
+
+/**
+ * Responsible for the signature of query data and the verification of
+ * OpenID signature values.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_Signatory {
+
+ // = 14 * 24 * 60 * 60; # 14 days, in seconds
+ var $SECRET_LIFETIME = 1209600;
+
+ // keys have a bogus server URL in them because the filestore
+ // really does expect that key to be a URL. This seems a little
+ // silly for the server store, since I expect there to be only one
+ // server URL.
+ var $normal_key = 'http://localhost/|normal';
+ var $dumb_key = 'http://localhost/|dumb';
+
+ /**
+ * Create a new signatory using a given store.
+ */
+ function Auth_OpenID_Signatory($store)
+ {
+ // assert store is not None
+ $this->store = $store;
+ }
+
+ /**
+ * Verify, using a given association handle, a signature with
+ * signed key-value pairs from an HTTP request.
+ */
+ function verify($assoc_handle, $message)
+ {
+ $assoc = $this->getAssociation($assoc_handle, true);
+ if (!$assoc) {
+ // oidutil.log("failed to get assoc with handle %r to verify sig %r"
+ // % (assoc_handle, sig))
+ return false;
+ }
+
+ return $assoc->checkMessageSignature($message);
+ }
+
+ /**
+ * Given a response, sign the fields in the response's 'signed'
+ * list, and insert the signature into the response.
+ */
+ function sign($response)
+ {
+ $signed_response = $response;
+ $assoc_handle = $response->request->assoc_handle;
+
+ if ($assoc_handle) {
+ // normal mode
+ $assoc = $this->getAssociation($assoc_handle, false, false);
+ if (!$assoc || ($assoc->getExpiresIn() <= 0)) {
+ // fall back to dumb mode
+ $signed_response->fields->setArg(Auth_OpenID_OPENID_NS,
+ 'invalidate_handle', $assoc_handle);
+ $assoc_type = ($assoc ? $assoc->assoc_type : 'HMAC-SHA1');
+
+ if ($assoc && ($assoc->getExpiresIn() <= 0)) {
+ $this->invalidate($assoc_handle, false);
+ }
+
+ $assoc = $this->createAssociation(true, $assoc_type);
+ }
+ } else {
+ // dumb mode.
+ $assoc = $this->createAssociation(true);
+ }
+
+ $signed_response->fields = $assoc->signMessage(
+ $signed_response->fields);
+ return $signed_response;
+ }
+
+ /**
+ * Make a new association.
+ */
+ function createAssociation($dumb = true, $assoc_type = 'HMAC-SHA1')
+ {
+ $secret = Auth_OpenID_CryptUtil::getBytes(
+ Auth_OpenID_getSecretSize($assoc_type));
+
+ $uniq = base64_encode(Auth_OpenID_CryptUtil::getBytes(4));
+ $handle = sprintf('{%s}{%x}{%s}', $assoc_type, intval(time()), $uniq);
+
+ $assoc = Auth_OpenID_Association::fromExpiresIn(
+ $this->SECRET_LIFETIME, $handle, $secret, $assoc_type);
+
+ if ($dumb) {
+ $key = $this->dumb_key;
+ } else {
+ $key = $this->normal_key;
+ }
+
+ $this->store->storeAssociation($key, $assoc);
+ return $assoc;
+ }
+
+ /**
+ * Given an association handle, get the association from the
+ * store, or return a ServerError or null if something goes wrong.
+ */
+ function getAssociation($assoc_handle, $dumb, $check_expiration=true)
+ {
+ if ($assoc_handle === null) {
+ return new Auth_OpenID_ServerError(null,
+ "assoc_handle must not be null");
+ }
+
+ if ($dumb) {
+ $key = $this->dumb_key;
+ } else {
+ $key = $this->normal_key;
+ }
+
+ $assoc = $this->store->getAssociation($key, $assoc_handle);
+
+ if (($assoc !== null) && ($assoc->getExpiresIn() <= 0)) {
+ if ($check_expiration) {
+ $this->store->removeAssociation($key, $assoc_handle);
+ $assoc = null;
+ }
+ }
+
+ return $assoc;
+ }
+
+ /**
+ * Invalidate a given association handle.
+ */
+ function invalidate($assoc_handle, $dumb)
+ {
+ if ($dumb) {
+ $key = $this->dumb_key;
+ } else {
+ $key = $this->normal_key;
+ }
+ $this->store->removeAssociation($key, $assoc_handle);
+ }
+}
+
+/**
+ * Encode an {@link Auth_OpenID_ServerResponse} to an
+ * {@link Auth_OpenID_WebResponse}.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_Encoder {
+
+ var $responseFactory = 'Auth_OpenID_WebResponse';
+
+ /**
+ * Encode an {@link Auth_OpenID_ServerResponse} and return an
+ * {@link Auth_OpenID_WebResponse}.
+ */
+ function encode($response)
+ {
+ $cls = $this->responseFactory;
+
+ $encode_as = $response->whichEncoding();
+ if ($encode_as == Auth_OpenID_ENCODE_KVFORM) {
+ $wr = new $cls(null, null, $response->encodeToKVForm());
+ if (is_a($response, 'Auth_OpenID_ServerError')) {
+ $wr->code = AUTH_OPENID_HTTP_ERROR;
+ }
+ } else if ($encode_as == Auth_OpenID_ENCODE_URL) {
+ $location = $response->encodeToURL();
+ $wr = new $cls(AUTH_OPENID_HTTP_REDIRECT,
+ array('location' => $location));
+ } else if ($encode_as == Auth_OpenID_ENCODE_HTML_FORM) {
+ $wr = new $cls(AUTH_OPENID_HTTP_OK, array(),
+ $response->toHTML());
+ } else {
+ return new Auth_OpenID_EncodingError($response);
+ }
+ /* Allow the response to carry a custom error code (ex: for Association errors) */
+ if(isset($response->code)) {
+ $wr->code = $response->code;
+ }
+ return $wr;
+ }
+}
+
+/**
+ * An encoder which also takes care of signing fields when required.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_SigningEncoder extends Auth_OpenID_Encoder {
+
+ function Auth_OpenID_SigningEncoder($signatory)
+ {
+ $this->signatory = $signatory;
+ }
+
+ /**
+ * Sign an {@link Auth_OpenID_ServerResponse} and return an
+ * {@link Auth_OpenID_WebResponse}.
+ */
+ function encode($response)
+ {
+ // the isinstance is a bit of a kludge... it means there isn't
+ // really an adapter to make the interfaces quite match.
+ if (!is_a($response, 'Auth_OpenID_ServerError') &&
+ $response->needsSigning()) {
+
+ if (!$this->signatory) {
+ return new Auth_OpenID_ServerError(null,
+ "Must have a store to sign request");
+ }
+
+ if ($response->fields->hasKey(Auth_OpenID_OPENID_NS, 'sig')) {
+ return new Auth_OpenID_AlreadySigned($response);
+ }
+ $response = $this->signatory->sign($response);
+ }
+
+ return parent::encode($response);
+ }
+}
+
+/**
+ * Decode an incoming query into an Auth_OpenID_Request.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_Decoder {
+
+ function Auth_OpenID_Decoder($server)
+ {
+ $this->server = $server;
+
+ $this->handlers = array(
+ 'checkid_setup' => 'Auth_OpenID_CheckIDRequest',
+ 'checkid_immediate' => 'Auth_OpenID_CheckIDRequest',
+ 'check_authentication' => 'Auth_OpenID_CheckAuthRequest',
+ 'associate' => 'Auth_OpenID_AssociateRequest'
+ );
+ }
+
+ /**
+ * Given an HTTP query in an array (key-value pairs), decode it
+ * into an Auth_OpenID_Request object.
+ */
+ function decode($query)
+ {
+ if (!$query) {
+ return null;
+ }
+
+ $message = Auth_OpenID_Message::fromPostArgs($query);
+
+ if ($message === null) {
+ /*
+ * It's useful to have a Message attached to a
+ * ProtocolError, so we override the bad ns value to build
+ * a Message out of it. Kinda kludgy, since it's made of
+ * lies, but the parts that aren't lies are more useful
+ * than a 'None'.
+ */
+ $old_ns = $query['openid.ns'];
+
+ $query['openid.ns'] = Auth_OpenID_OPENID2_NS;
+ $message = Auth_OpenID_Message::fromPostArgs($query);
+ return new Auth_OpenID_ServerError(
+ $message,
+ sprintf("Invalid OpenID namespace URI: %s", $old_ns));
+ }
+
+ $mode = $message->getArg(Auth_OpenID_OPENID_NS, 'mode');
+ if (!$mode) {
+ return new Auth_OpenID_ServerError($message,
+ "No mode value in message");
+ }
+
+ if (Auth_OpenID::isFailure($mode)) {
+ return new Auth_OpenID_ServerError($message,
+ $mode->message);
+ }
+
+ $handlerCls = Auth_OpenID::arrayGet($this->handlers, $mode,
+ $this->defaultDecoder($message));
+
+ if (!is_a($handlerCls, 'Auth_OpenID_ServerError')) {
+ return call_user_func_array(array($handlerCls, 'fromMessage'),
+ array($message, $this->server));
+ } else {
+ return $handlerCls;
+ }
+ }
+
+ function defaultDecoder($message)
+ {
+ $mode = $message->getArg(Auth_OpenID_OPENID_NS, 'mode');
+
+ if (Auth_OpenID::isFailure($mode)) {
+ return new Auth_OpenID_ServerError($message,
+ $mode->message);
+ }
+
+ return new Auth_OpenID_ServerError($message,
+ sprintf("Unrecognized OpenID mode %s", $mode));
+ }
+}
+
+/**
+ * An error that indicates an encoding problem occurred.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_EncodingError {
+ function Auth_OpenID_EncodingError($response)
+ {
+ $this->response = $response;
+ }
+}
+
+/**
+ * An error that indicates that a response was already signed.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_AlreadySigned extends Auth_OpenID_EncodingError {
+ // This response is already signed.
+}
+
+/**
+ * An error that indicates that the given return_to is not under the
+ * given trust_root.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_UntrustedReturnURL extends Auth_OpenID_ServerError {
+ function Auth_OpenID_UntrustedReturnURL($message, $return_to,
+ $trust_root)
+ {
+ parent::Auth_OpenID_ServerError($message, "Untrusted return_to URL");
+ $this->return_to = $return_to;
+ $this->trust_root = $trust_root;
+ }
+
+ function toString()
+ {
+ return sprintf("return_to %s not under trust_root %s",
+ $this->return_to, $this->trust_root);
+ }
+}
+
+/**
+ * I handle requests for an OpenID server.
+ *
+ * Some types of requests (those which are not checkid requests) may
+ * be handed to my {@link handleRequest} method, and I will take care
+ * of it and return a response.
+ *
+ * For your convenience, I also provide an interface to {@link
+ * Auth_OpenID_Decoder::decode()} and {@link
+ * Auth_OpenID_SigningEncoder::encode()} through my methods {@link
+ * decodeRequest} and {@link encodeResponse}.
+ *
+ * All my state is encapsulated in an {@link Auth_OpenID_OpenIDStore}.
+ *
+ * Example:
+ *
+ * <pre> $oserver = new Auth_OpenID_Server(Auth_OpenID_FileStore($data_path),
+ * "http://example.com/op");
+ * $request = $oserver->decodeRequest();
+ * if (in_array($request->mode, array('checkid_immediate',
+ * 'checkid_setup'))) {
+ * if ($app->isAuthorized($request->identity, $request->trust_root)) {
+ * $response = $request->answer(true);
+ * } else if ($request->immediate) {
+ * $response = $request->answer(false);
+ * } else {
+ * $app->showDecidePage($request);
+ * return;
+ * }
+ * } else {
+ * $response = $oserver->handleRequest($request);
+ * }
+ *
+ * $webresponse = $oserver->encode($response);</pre>
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_Server {
+ function Auth_OpenID_Server($store, $op_endpoint=null)
+ {
+ $this->store = $store;
+ $this->signatory = new Auth_OpenID_Signatory($this->store);
+ $this->encoder = new Auth_OpenID_SigningEncoder($this->signatory);
+ $this->decoder = new Auth_OpenID_Decoder($this);
+ $this->op_endpoint = $op_endpoint;
+ $this->negotiator = Auth_OpenID_getDefaultNegotiator();
+ }
+
+ /**
+ * Handle a request. Given an {@link Auth_OpenID_Request} object,
+ * call the appropriate {@link Auth_OpenID_Server} method to
+ * process the request and generate a response.
+ *
+ * @param Auth_OpenID_Request $request An {@link Auth_OpenID_Request}
+ * returned by {@link Auth_OpenID_Server::decodeRequest()}.
+ *
+ * @return Auth_OpenID_ServerResponse $response A response object
+ * capable of generating a user-agent reply.
+ */
+ function handleRequest($request)
+ {
+ if (method_exists($this, "openid_" . $request->mode)) {
+ $handler = array($this, "openid_" . $request->mode);
+ return call_user_func($handler, $request);
+ }
+ return null;
+ }
+
+ /**
+ * The callback for 'check_authentication' messages.
+ */
+ function openid_check_authentication($request)
+ {
+ return $request->answer($this->signatory);
+ }
+
+ /**
+ * The callback for 'associate' messages.
+ */
+ function openid_associate($request)
+ {
+ $assoc_type = $request->assoc_type;
+ $session_type = $request->session->session_type;
+ if ($this->negotiator->isAllowed($assoc_type, $session_type)) {
+ $assoc = $this->signatory->createAssociation(false,
+ $assoc_type);
+ return $request->answer($assoc);
+ } else {
+ $message = sprintf('Association type %s is not supported with '.
+ 'session type %s', $assoc_type, $session_type);
+ list($preferred_assoc_type, $preferred_session_type) =
+ $this->negotiator->getAllowedType();
+ return $request->answerUnsupported($message,
+ $preferred_assoc_type,
+ $preferred_session_type);
+ }
+ }
+
+ /**
+ * Encodes as response in the appropriate format suitable for
+ * sending to the user agent.
+ */
+ function encodeResponse($response)
+ {
+ return $this->encoder->encode($response);
+ }
+
+ /**
+ * Decodes a query args array into the appropriate
+ * {@link Auth_OpenID_Request} object.
+ */
+ function decodeRequest($query=null)
+ {
+ if ($query === null) {
+ $query = Auth_OpenID::getQuery();
+ }
+
+ return $this->decoder->decode($query);
+ }
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/ServerRequest.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/ServerRequest.php
new file mode 100644
index 000000000..69222a5e0
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/ServerRequest.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * OpenID Server Request
+ *
+ * @see Auth_OpenID_Server
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Imports
+ */
+require_once "Auth/OpenID.php";
+
+/**
+ * Object that holds the state of a request to the OpenID server
+ *
+ * With accessor functions to get at the internal request data.
+ *
+ * @see Auth_OpenID_Server
+ * @package OpenID
+ */
+class Auth_OpenID_ServerRequest {
+ function Auth_OpenID_ServerRequest()
+ {
+ $this->mode = null;
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/TrustRoot.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/TrustRoot.php
new file mode 100644
index 000000000..0f53958ed
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/TrustRoot.php
@@ -0,0 +1,461 @@
+<?php
+/**
+ * Functions for dealing with OpenID trust roots
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+require_once 'Auth/OpenID/Discover.php';
+
+/**
+ * A regular expression that matches a domain ending in a top-level domains.
+ * Used in checking trust roots for sanity.
+ *
+ * @access private
+ */
+define('Auth_OpenID___TLDs',
+ '/\.(ac|ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|asia' .
+ '|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br' .
+ '|bs|bt|bv|bw|by|bz|ca|cat|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co' .
+ '|com|coop|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg' .
+ '|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl' .
+ '|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie' .
+ '|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jobs|jp|ke|kg|kh' .
+ '|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly' .
+ '|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mobi|mp|mq|mr|ms|mt' .
+ '|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no' .
+ '|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt' .
+ '|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl' .
+ '|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm' .
+ '|tn|to|tp|tr|travel|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve' .
+ '|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g' .
+ '|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d' .
+ '|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp' .
+ '|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)\.?$/');
+
+define('Auth_OpenID___HostSegmentRe',
+ "/^(?:[-a-zA-Z0-9!$&'\\(\\)\\*+,;=._~]|%[a-zA-Z0-9]{2})*$/");
+
+/**
+ * A wrapper for trust-root related functions
+ */
+class Auth_OpenID_TrustRoot {
+ /*
+ * Return a discovery URL for this realm.
+ *
+ * Return null if the realm could not be parsed or was not valid.
+ *
+ * @param return_to The relying party return URL of the OpenID
+ * authentication request
+ *
+ * @return The URL upon which relying party discovery should be
+ * run in order to verify the return_to URL
+ */
+ static function buildDiscoveryURL($realm)
+ {
+ $parsed = Auth_OpenID_TrustRoot::_parse($realm);
+
+ if ($parsed === false) {
+ return false;
+ }
+
+ if ($parsed['wildcard']) {
+ // Use "www." in place of the star
+ if ($parsed['host'][0] != '.') {
+ return false;
+ }
+
+ $www_domain = 'www' . $parsed['host'];
+
+ return sprintf('%s://%s%s', $parsed['scheme'],
+ $www_domain, $parsed['path']);
+ } else {
+ return $parsed['unparsed'];
+ }
+ }
+
+ /**
+ * Parse a URL into its trust_root parts.
+ *
+ * @static
+ *
+ * @access private
+ *
+ * @param string $trust_root The url to parse
+ *
+ * @return mixed $parsed Either an associative array of trust root
+ * parts or false if parsing failed.
+ */
+ static function _parse($trust_root)
+ {
+ $trust_root = Auth_OpenID_urinorm($trust_root);
+ if ($trust_root === null) {
+ return false;
+ }
+
+ if (preg_match("/:\/\/[^:]+(:\d+){2,}(\/|$)/", $trust_root)) {
+ return false;
+ }
+
+ $parts = @parse_url($trust_root);
+ if ($parts === false) {
+ return false;
+ }
+
+ $required_parts = array('scheme', 'host');
+ $forbidden_parts = array('user', 'pass', 'fragment');
+ $keys = array_keys($parts);
+ if (array_intersect($keys, $required_parts) != $required_parts) {
+ return false;
+ }
+
+ if (array_intersect($keys, $forbidden_parts) != array()) {
+ return false;
+ }
+
+ if (!preg_match(Auth_OpenID___HostSegmentRe, $parts['host'])) {
+ return false;
+ }
+
+ $scheme = strtolower($parts['scheme']);
+ $allowed_schemes = array('http', 'https');
+ if (!in_array($scheme, $allowed_schemes)) {
+ return false;
+ }
+ $parts['scheme'] = $scheme;
+
+ $host = strtolower($parts['host']);
+ $hostparts = explode('*', $host);
+ switch (count($hostparts)) {
+ case 1:
+ $parts['wildcard'] = false;
+ break;
+ case 2:
+ if ($hostparts[0] ||
+ ($hostparts[1] && substr($hostparts[1], 0, 1) != '.')) {
+ return false;
+ }
+ $host = $hostparts[1];
+ $parts['wildcard'] = true;
+ break;
+ default:
+ return false;
+ }
+ if (strpos($host, ':') !== false) {
+ return false;
+ }
+
+ $parts['host'] = $host;
+
+ if (isset($parts['path'])) {
+ $path = strtolower($parts['path']);
+ if (substr($path, 0, 1) != '/') {
+ return false;
+ }
+ } else {
+ $path = '/';
+ }
+
+ $parts['path'] = $path;
+ if (!isset($parts['port'])) {
+ $parts['port'] = false;
+ }
+
+
+ $parts['unparsed'] = $trust_root;
+
+ return $parts;
+ }
+
+ /**
+ * Is this trust root sane?
+ *
+ * A trust root is sane if it is syntactically valid and it has a
+ * reasonable domain name. Specifically, the domain name must be
+ * more than one level below a standard TLD or more than two
+ * levels below a two-letter tld.
+ *
+ * For example, '*.com' is not a sane trust root, but '*.foo.com'
+ * is. '*.co.uk' is not sane, but '*.bbc.co.uk' is.
+ *
+ * This check is not always correct, but it attempts to err on the
+ * side of marking sane trust roots insane instead of marking
+ * insane trust roots sane. For example, 'kink.fm' is marked as
+ * insane even though it "should" (for some meaning of should) be
+ * marked sane.
+ *
+ * This function should be used when creating OpenID servers to
+ * alert the users of the server when a consumer attempts to get
+ * the user to accept a suspicious trust root.
+ *
+ * @static
+ * @param string $trust_root The trust root to check
+ * @return bool $sanity Whether the trust root looks OK
+ */
+ static function isSane($trust_root)
+ {
+ $parts = Auth_OpenID_TrustRoot::_parse($trust_root);
+ if ($parts === false) {
+ return false;
+ }
+
+ // Localhost is a special case
+ if ($parts['host'] == 'localhost') {
+ return true;
+ }
+
+ $host_parts = explode('.', $parts['host']);
+ if ($parts['wildcard']) {
+ // Remove the empty string from the beginning of the array
+ array_shift($host_parts);
+ }
+
+ if ($host_parts && !$host_parts[count($host_parts) - 1]) {
+ array_pop($host_parts);
+ }
+
+ if (!$host_parts) {
+ return false;
+ }
+
+ // Don't allow adjacent dots
+ if (in_array('', $host_parts, true)) {
+ return false;
+ }
+
+ // Get the top-level domain of the host. If it is not a valid TLD,
+ // it's not sane.
+ preg_match(Auth_OpenID___TLDs, $parts['host'], $matches);
+ if (!$matches) {
+ return false;
+ }
+ $tld = $matches[1];
+
+ if (count($host_parts) == 1) {
+ return false;
+ }
+
+ if ($parts['wildcard']) {
+ // It's a 2-letter tld with a short second to last segment
+ // so there needs to be more than two segments specified
+ // (e.g. *.co.uk is insane)
+ $second_level = $host_parts[count($host_parts) - 2];
+ if (strlen($tld) == 2 && strlen($second_level) <= 3) {
+ return count($host_parts) > 2;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Does this URL match the given trust root?
+ *
+ * Return whether the URL falls under the given trust root. This
+ * does not check whether the trust root is sane. If the URL or
+ * trust root do not parse, this function will return false.
+ *
+ * @param string $trust_root The trust root to match against
+ *
+ * @param string $url The URL to check
+ *
+ * @return bool $matches Whether the URL matches against the
+ * trust root
+ */
+ static function match($trust_root, $url)
+ {
+ $trust_root_parsed = Auth_OpenID_TrustRoot::_parse($trust_root);
+ $url_parsed = Auth_OpenID_TrustRoot::_parse($url);
+ if (!$trust_root_parsed || !$url_parsed) {
+ return false;
+ }
+
+ // Check hosts matching
+ if ($url_parsed['wildcard']) {
+ return false;
+ }
+ if ($trust_root_parsed['wildcard']) {
+ $host_tail = $trust_root_parsed['host'];
+ $host = $url_parsed['host'];
+ if ($host_tail &&
+ substr($host, -(strlen($host_tail))) != $host_tail &&
+ substr($host_tail, 1) != $host) {
+ return false;
+ }
+ } else {
+ if ($trust_root_parsed['host'] != $url_parsed['host']) {
+ return false;
+ }
+ }
+
+ // Check path and query matching
+ $base_path = $trust_root_parsed['path'];
+ $path = $url_parsed['path'];
+ if (!isset($trust_root_parsed['query'])) {
+ if ($base_path != $path) {
+ if (substr($path, 0, strlen($base_path)) != $base_path) {
+ return false;
+ }
+ if (substr($base_path, strlen($base_path) - 1, 1) != '/' &&
+ substr($path, strlen($base_path), 1) != '/') {
+ return false;
+ }
+ }
+ } else {
+ $base_query = $trust_root_parsed['query'];
+ $query = @$url_parsed['query'];
+ $qplus = substr($query, 0, strlen($base_query) + 1);
+ $bqplus = $base_query . '&';
+ if ($base_path != $path ||
+ ($base_query != $query && $qplus != $bqplus)) {
+ return false;
+ }
+ }
+
+ // The port and scheme need to match exactly
+ return ($trust_root_parsed['scheme'] == $url_parsed['scheme'] &&
+ $url_parsed['port'] === $trust_root_parsed['port']);
+ }
+}
+
+/*
+ * If the endpoint is a relying party OpenID return_to endpoint,
+ * return the endpoint URL. Otherwise, return None.
+ *
+ * This function is intended to be used as a filter for the Yadis
+ * filtering interface.
+ *
+ * @see: C{L{openid.yadis.services}}
+ * @see: C{L{openid.yadis.filters}}
+ *
+ * @param endpoint: An XRDS BasicServiceEndpoint, as returned by
+ * performing Yadis dicovery.
+ *
+ * @returns: The endpoint URL or None if the endpoint is not a
+ * relying party endpoint.
+ */
+function filter_extractReturnURL($endpoint)
+{
+ if ($endpoint->matchTypes(array(Auth_OpenID_RP_RETURN_TO_URL_TYPE))) {
+ return $endpoint;
+ } else {
+ return null;
+ }
+}
+
+function &Auth_OpenID_extractReturnURL(&$endpoint_list)
+{
+ $result = array();
+
+ foreach ($endpoint_list as $endpoint) {
+ if (filter_extractReturnURL($endpoint)) {
+ $result[] = $endpoint;
+ }
+ }
+
+ return $result;
+}
+
+/*
+ * Is the return_to URL under one of the supplied allowed return_to
+ * URLs?
+ */
+function Auth_OpenID_returnToMatches($allowed_return_to_urls, $return_to)
+{
+ foreach ($allowed_return_to_urls as $allowed_return_to) {
+ // A return_to pattern works the same as a realm, except that
+ // it's not allowed to use a wildcard. We'll model this by
+ // parsing it as a realm, and not trying to match it if it has
+ // a wildcard.
+
+ $return_realm = Auth_OpenID_TrustRoot::_parse($allowed_return_to);
+ if (// Parses as a trust root
+ ($return_realm !== false) &&
+ // Does not have a wildcard
+ (!$return_realm['wildcard']) &&
+ // Matches the return_to that we passed in with it
+ (Auth_OpenID_TrustRoot::match($allowed_return_to, $return_to))) {
+ return true;
+ }
+ }
+
+ // No URL in the list matched
+ return false;
+}
+
+/*
+ * Given a relying party discovery URL return a list of return_to
+ * URLs.
+ */
+function Auth_OpenID_getAllowedReturnURLs($relying_party_url, $fetcher,
+ $discover_function=null)
+{
+ if ($discover_function === null) {
+ $discover_function = array('Auth_Yadis_Yadis', 'discover');
+ }
+
+ $xrds_parse_cb = array('Auth_OpenID_ServiceEndpoint', 'consumerFromXRDS');
+
+ list($rp_url_after_redirects, $endpoints) =
+ Auth_Yadis_getServiceEndpoints($relying_party_url, $xrds_parse_cb,
+ $discover_function, $fetcher);
+
+ if ($rp_url_after_redirects != $relying_party_url) {
+ // Verification caused a redirect
+ return false;
+ }
+
+ call_user_func_array($discover_function,
+ array($relying_party_url, $fetcher));
+
+ $return_to_urls = array();
+ $matching_endpoints = Auth_OpenID_extractReturnURL($endpoints);
+
+ foreach ($matching_endpoints as $e) {
+ $return_to_urls[] = $e->server_url;
+ }
+
+ return $return_to_urls;
+}
+
+/*
+ * Verify that a return_to URL is valid for the given realm.
+ *
+ * This function builds a discovery URL, performs Yadis discovery on
+ * it, makes sure that the URL does not redirect, parses out the
+ * return_to URLs, and finally checks to see if the current return_to
+ * URL matches the return_to.
+ *
+ * @return true if the return_to URL is valid for the realm
+ */
+function Auth_OpenID_verifyReturnTo($realm_str, $return_to, $fetcher,
+ $_vrfy='Auth_OpenID_getAllowedReturnURLs')
+{
+ $disco_url = Auth_OpenID_TrustRoot::buildDiscoveryURL($realm_str);
+
+ if ($disco_url === false) {
+ return false;
+ }
+
+ $allowable_urls = call_user_func_array($_vrfy,
+ array($disco_url, $fetcher));
+
+ // The realm_str could not be parsed.
+ if ($allowable_urls === false) {
+ return false;
+ }
+
+ if (Auth_OpenID_returnToMatches($allowable_urls, $return_to)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/OpenID/URINorm.php b/mod/openid_api/vendors/php-openid/Auth/OpenID/URINorm.php
new file mode 100644
index 000000000..c051b550a
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/OpenID/URINorm.php
@@ -0,0 +1,249 @@
+<?php
+
+/**
+ * URI normalization routines.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+require_once 'Auth/Yadis/Misc.php';
+
+// from appendix B of rfc 3986 (http://www.ietf.org/rfc/rfc3986.txt)
+function Auth_OpenID_getURIPattern()
+{
+ return '&^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?&';
+}
+
+function Auth_OpenID_getAuthorityPattern()
+{
+ return '/^([^@]*@)?([^:]*)(:.*)?/';
+}
+
+function Auth_OpenID_getEncodedPattern()
+{
+ return '/%([0-9A-Fa-f]{2})/';
+}
+
+# gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
+#
+# sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
+# / "*" / "+" / "," / ";" / "="
+#
+# unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
+function Auth_OpenID_getURLIllegalCharRE()
+{
+ return "/([^-A-Za-z0-9:\/\?#\[\]@\!\$&'\(\)\*\+,;=\._~\%])/";
+}
+
+function Auth_OpenID_getUnreserved()
+{
+ $_unreserved = array();
+ for ($i = 0; $i < 256; $i++) {
+ $_unreserved[$i] = false;
+ }
+
+ for ($i = ord('A'); $i <= ord('Z'); $i++) {
+ $_unreserved[$i] = true;
+ }
+
+ for ($i = ord('0'); $i <= ord('9'); $i++) {
+ $_unreserved[$i] = true;
+ }
+
+ for ($i = ord('a'); $i <= ord('z'); $i++) {
+ $_unreserved[$i] = true;
+ }
+
+ $_unreserved[ord('-')] = true;
+ $_unreserved[ord('.')] = true;
+ $_unreserved[ord('_')] = true;
+ $_unreserved[ord('~')] = true;
+
+ return $_unreserved;
+}
+
+function Auth_OpenID_getEscapeRE()
+{
+ $parts = array();
+ foreach (array_merge(Auth_Yadis_getUCSChars(),
+ Auth_Yadis_getIPrivateChars()) as $pair) {
+ list($m, $n) = $pair;
+ $parts[] = sprintf("%s-%s", chr($m), chr($n));
+ }
+
+ return sprintf('[%s]', implode('', $parts));
+}
+
+function Auth_OpenID_pct_encoded_replace_unreserved($mo)
+{
+ $_unreserved = Auth_OpenID_getUnreserved();
+
+ $i = intval($mo[1], 16);
+ if ($_unreserved[$i]) {
+ return chr($i);
+ } else {
+ return strtoupper($mo[0]);
+ }
+
+ return $mo[0];
+}
+
+function Auth_OpenID_pct_encoded_replace($mo)
+{
+ return chr(intval($mo[1], 16));
+}
+
+function Auth_OpenID_remove_dot_segments($path)
+{
+ $result_segments = array();
+
+ while ($path) {
+ if (Auth_Yadis_startswith($path, '../')) {
+ $path = substr($path, 3);
+ } else if (Auth_Yadis_startswith($path, './')) {
+ $path = substr($path, 2);
+ } else if (Auth_Yadis_startswith($path, '/./')) {
+ $path = substr($path, 2);
+ } else if ($path == '/.') {
+ $path = '/';
+ } else if (Auth_Yadis_startswith($path, '/../')) {
+ $path = substr($path, 3);
+ if ($result_segments) {
+ array_pop($result_segments);
+ }
+ } else if ($path == '/..') {
+ $path = '/';
+ if ($result_segments) {
+ array_pop($result_segments);
+ }
+ } else if (($path == '..') ||
+ ($path == '.')) {
+ $path = '';
+ } else {
+ $i = 0;
+ if ($path[0] == '/') {
+ $i = 1;
+ }
+ $i = strpos($path, '/', $i);
+ if ($i === false) {
+ $i = strlen($path);
+ }
+ $result_segments[] = substr($path, 0, $i);
+ $path = substr($path, $i);
+ }
+ }
+
+ return implode('', $result_segments);
+}
+
+function Auth_OpenID_urinorm($uri)
+{
+ $uri_matches = array();
+ preg_match(Auth_OpenID_getURIPattern(), $uri, $uri_matches);
+
+ if (count($uri_matches) < 9) {
+ for ($i = count($uri_matches); $i <= 9; $i++) {
+ $uri_matches[] = '';
+ }
+ }
+
+ $illegal_matches = array();
+ preg_match(Auth_OpenID_getURLIllegalCharRE(),
+ $uri, $illegal_matches);
+ if ($illegal_matches) {
+ return null;
+ }
+
+ $scheme = $uri_matches[2];
+ if ($scheme) {
+ $scheme = strtolower($scheme);
+ }
+
+ $scheme = $uri_matches[2];
+ if ($scheme === '') {
+ // No scheme specified
+ return null;
+ }
+
+ $scheme = strtolower($scheme);
+ if (!in_array($scheme, array('http', 'https'))) {
+ // Not an absolute HTTP or HTTPS URI
+ return null;
+ }
+
+ $authority = $uri_matches[4];
+ if ($authority === '') {
+ // Not an absolute URI
+ return null;
+ }
+
+ $authority_matches = array();
+ preg_match(Auth_OpenID_getAuthorityPattern(),
+ $authority, $authority_matches);
+ if (count($authority_matches) === 0) {
+ // URI does not have a valid authority
+ return null;
+ }
+
+ if (count($authority_matches) < 4) {
+ for ($i = count($authority_matches); $i <= 4; $i++) {
+ $authority_matches[] = '';
+ }
+ }
+
+ list($_whole, $userinfo, $host, $port) = $authority_matches;
+
+ if ($userinfo === null) {
+ $userinfo = '';
+ }
+
+ if (strpos($host, '%') !== -1) {
+ $host = strtolower($host);
+ $host = preg_replace_callback(
+ Auth_OpenID_getEncodedPattern(),
+ 'Auth_OpenID_pct_encoded_replace', $host);
+ // NO IDNA.
+ // $host = unicode($host, 'utf-8').encode('idna');
+ } else {
+ $host = strtolower($host);
+ }
+
+ if ($port) {
+ if (($port == ':') ||
+ ($scheme == 'http' && $port == ':80') ||
+ ($scheme == 'https' && $port == ':443')) {
+ $port = '';
+ }
+ } else {
+ $port = '';
+ }
+
+ $authority = $userinfo . $host . $port;
+
+ $path = $uri_matches[5];
+ $path = preg_replace_callback(
+ Auth_OpenID_getEncodedPattern(),
+ 'Auth_OpenID_pct_encoded_replace_unreserved', $path);
+
+ $path = Auth_OpenID_remove_dot_segments($path);
+ if (!$path) {
+ $path = '/';
+ }
+
+ $query = $uri_matches[6];
+ if ($query === null) {
+ $query = '';
+ }
+
+ $fragment = $uri_matches[8];
+ if ($fragment === null) {
+ $fragment = '';
+ }
+
+ return $scheme . '://' . $authority . $path . $query . $fragment;
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/Yadis/HTTPFetcher.php b/mod/openid_api/vendors/php-openid/Auth/Yadis/HTTPFetcher.php
new file mode 100644
index 000000000..148cde1b2
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/Yadis/HTTPFetcher.php
@@ -0,0 +1,174 @@
+<?php
+
+/**
+ * This module contains the HTTP fetcher interface
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Require logging functionality
+ */
+require_once "Auth/OpenID.php";
+
+define('Auth_OpenID_FETCHER_MAX_RESPONSE_KB', 1024);
+define('Auth_OpenID_USER_AGENT',
+ 'php-openid/'.Auth_OpenID_VERSION.' (php/'.phpversion().')');
+
+class Auth_Yadis_HTTPResponse {
+ function Auth_Yadis_HTTPResponse($final_url = null, $status = null,
+ $headers = null, $body = null)
+ {
+ $this->final_url = $final_url;
+ $this->status = $status;
+ $this->headers = $headers;
+ $this->body = $body;
+ }
+}
+
+/**
+ * This class is the interface for HTTP fetchers the Yadis library
+ * uses. This interface is only important if you need to write a new
+ * fetcher for some reason.
+ *
+ * @access private
+ * @package OpenID
+ */
+class Auth_Yadis_HTTPFetcher {
+
+ var $timeout = 20; // timeout in seconds.
+
+ /**
+ * Return whether a URL can be fetched. Returns false if the URL
+ * scheme is not allowed or is not supported by this fetcher
+ * implementation; returns true otherwise.
+ *
+ * @return bool
+ */
+ function canFetchURL($url)
+ {
+ if ($this->isHTTPS($url) && !$this->supportsSSL()) {
+ Auth_OpenID::log("HTTPS URL unsupported fetching %s",
+ $url);
+ return false;
+ }
+
+ if (!$this->allowedURL($url)) {
+ Auth_OpenID::log("URL fetching not allowed for '%s'",
+ $url);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Return whether a URL should be allowed. Override this method to
+ * conform to your local policy.
+ *
+ * By default, will attempt to fetch any http or https URL.
+ */
+ function allowedURL($url)
+ {
+ return $this->URLHasAllowedScheme($url);
+ }
+
+ /**
+ * Does this fetcher implementation (and runtime) support fetching
+ * HTTPS URLs? May inspect the runtime environment.
+ *
+ * @return bool $support True if this fetcher supports HTTPS
+ * fetching; false if not.
+ */
+ function supportsSSL()
+ {
+ trigger_error("not implemented", E_USER_ERROR);
+ }
+
+ /**
+ * Is this an https URL?
+ *
+ * @access private
+ */
+ function isHTTPS($url)
+ {
+ return (bool)preg_match('/^https:\/\//i', $url);
+ }
+
+ /**
+ * Is this an http or https URL?
+ *
+ * @access private
+ */
+ function URLHasAllowedScheme($url)
+ {
+ return (bool)preg_match('/^https?:\/\//i', $url);
+ }
+
+ /**
+ * @access private
+ */
+ function _findRedirect($headers, $url)
+ {
+ foreach ($headers as $line) {
+ if (strpos(strtolower($line), "location: ") === 0) {
+ $parts = explode(" ", $line, 2);
+ $loc = $parts[1];
+ $ppos = strpos($loc, "://");
+ if ($ppos === false || $ppos > strpos($loc, "/")) {
+ /* no host; add it */
+ $hpos = strpos($url, "://");
+ $prt = substr($url, 0, $hpos+3);
+ $url = substr($url, $hpos+3);
+ if (substr($loc, 0, 1) == "/") {
+ /* absolute path */
+ $fspos = strpos($url, "/");
+ if ($fspos) $loc = $prt.substr($url, 0, $fspos).$loc;
+ else $loc = $prt.$url.$loc;
+ } else {
+ /* relative path */
+ $pp = $prt;
+ while (1) {
+ $xpos = strpos($url, "/");
+ if ($xpos === false) break;
+ $apos = strpos($url, "?");
+ if ($apos !== false && $apos < $xpos) break;
+ $apos = strpos($url, "&");
+ if ($apos !== false && $apos < $xpos) break;
+ $pp .= substr($url, 0, $xpos+1);
+ $url = substr($url, $xpos+1);
+ }
+ $loc = $pp.$loc;
+ }
+ }
+ return $loc;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Fetches the specified URL using optional extra headers and
+ * returns the server's response.
+ *
+ * @param string $url The URL to be fetched.
+ * @param array $extra_headers An array of header strings
+ * (e.g. "Accept: text/html").
+ * @return mixed $result An array of ($code, $url, $headers,
+ * $body) if the URL could be fetched; null if the URL does not
+ * pass the URLHasAllowedScheme check or if the server's response
+ * is malformed.
+ */
+ function get($url, $headers = null)
+ {
+ trigger_error("not implemented", E_USER_ERROR);
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/Yadis/Manager.php b/mod/openid_api/vendors/php-openid/Auth/Yadis/Manager.php
new file mode 100644
index 000000000..5829de6ca
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/Yadis/Manager.php
@@ -0,0 +1,521 @@
+<?php
+
+/**
+ * Yadis service manager to be used during yadis-driven authentication
+ * attempts.
+ *
+ * @package OpenID
+ */
+
+/**
+ * The base session class used by the Auth_Yadis_Manager. This
+ * class wraps the default PHP session machinery and should be
+ * subclassed if your application doesn't use PHP sessioning.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_PHPSession {
+ /**
+ * Set a session key/value pair.
+ *
+ * @param string $name The name of the session key to add.
+ * @param string $value The value to add to the session.
+ */
+ function set($name, $value)
+ {
+ $_SESSION[$name] = $value;
+ }
+
+ /**
+ * Get a key's value from the session.
+ *
+ * @param string $name The name of the key to retrieve.
+ * @param string $default The optional value to return if the key
+ * is not found in the session.
+ * @return string $result The key's value in the session or
+ * $default if it isn't found.
+ */
+ function get($name, $default=null)
+ {
+ if (array_key_exists($name, $_SESSION)) {
+ return $_SESSION[$name];
+ } else {
+ return $default;
+ }
+ }
+
+ /**
+ * Remove a key/value pair from the session.
+ *
+ * @param string $name The name of the key to remove.
+ */
+ function del($name)
+ {
+ unset($_SESSION[$name]);
+ }
+
+ /**
+ * Return the contents of the session in array form.
+ */
+ function contents()
+ {
+ return $_SESSION;
+ }
+}
+
+/**
+ * A session helper class designed to translate between arrays and
+ * objects. Note that the class used must have a constructor that
+ * takes no parameters. This is not a general solution, but it works
+ * for dumb objects that just need to have attributes set. The idea
+ * is that you'll subclass this and override $this->check($data) ->
+ * bool to implement your own session data validation.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_SessionLoader {
+ /**
+ * Override this.
+ *
+ * @access private
+ */
+ function check($data)
+ {
+ return true;
+ }
+
+ /**
+ * Given a session data value (an array), this creates an object
+ * (returned by $this->newObject()) whose attributes and values
+ * are those in $data. Returns null if $data lacks keys found in
+ * $this->requiredKeys(). Returns null if $this->check($data)
+ * evaluates to false. Returns null if $this->newObject()
+ * evaluates to false.
+ *
+ * @access private
+ */
+ function fromSession($data)
+ {
+ if (!$data) {
+ return null;
+ }
+
+ $required = $this->requiredKeys();
+
+ foreach ($required as $k) {
+ if (!array_key_exists($k, $data)) {
+ return null;
+ }
+ }
+
+ if (!$this->check($data)) {
+ return null;
+ }
+
+ $data = array_merge($data, $this->prepareForLoad($data));
+ $obj = $this->newObject($data);
+
+ if (!$obj) {
+ return null;
+ }
+
+ foreach ($required as $k) {
+ $obj->$k = $data[$k];
+ }
+
+ return $obj;
+ }
+
+ /**
+ * Prepares the data array by making any necessary changes.
+ * Returns an array whose keys and values will be used to update
+ * the original data array before calling $this->newObject($data).
+ *
+ * @access private
+ */
+ function prepareForLoad($data)
+ {
+ return array();
+ }
+
+ /**
+ * Returns a new instance of this loader's class, using the
+ * session data to construct it if necessary. The object need
+ * only be created; $this->fromSession() will take care of setting
+ * the object's attributes.
+ *
+ * @access private
+ */
+ function newObject($data)
+ {
+ return null;
+ }
+
+ /**
+ * Returns an array of keys and values built from the attributes
+ * of $obj. If $this->prepareForSave($obj) returns an array, its keys
+ * and values are used to update the $data array of attributes
+ * from $obj.
+ *
+ * @access private
+ */
+ function toSession($obj)
+ {
+ $data = array();
+ foreach ($obj as $k => $v) {
+ $data[$k] = $v;
+ }
+
+ $extra = $this->prepareForSave($obj);
+
+ if ($extra && is_array($extra)) {
+ foreach ($extra as $k => $v) {
+ $data[$k] = $v;
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * Override this.
+ *
+ * @access private
+ */
+ function prepareForSave($obj)
+ {
+ return array();
+ }
+}
+
+/**
+ * A concrete loader implementation for Auth_OpenID_ServiceEndpoints.
+ *
+ * @package OpenID
+ */
+class Auth_OpenID_ServiceEndpointLoader extends Auth_Yadis_SessionLoader {
+ function newObject($data)
+ {
+ return new Auth_OpenID_ServiceEndpoint();
+ }
+
+ function requiredKeys()
+ {
+ $obj = new Auth_OpenID_ServiceEndpoint();
+ $data = array();
+ foreach ($obj as $k => $v) {
+ $data[] = $k;
+ }
+ return $data;
+ }
+
+ function check($data)
+ {
+ return is_array($data['type_uris']);
+ }
+}
+
+/**
+ * A concrete loader implementation for Auth_Yadis_Managers.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_ManagerLoader extends Auth_Yadis_SessionLoader {
+ function requiredKeys()
+ {
+ return array('starting_url',
+ 'yadis_url',
+ 'services',
+ 'session_key',
+ '_current',
+ 'stale');
+ }
+
+ function newObject($data)
+ {
+ return new Auth_Yadis_Manager($data['starting_url'],
+ $data['yadis_url'],
+ $data['services'],
+ $data['session_key']);
+ }
+
+ function check($data)
+ {
+ return is_array($data['services']);
+ }
+
+ function prepareForLoad($data)
+ {
+ $loader = new Auth_OpenID_ServiceEndpointLoader();
+ $services = array();
+ foreach ($data['services'] as $s) {
+ $services[] = $loader->fromSession($s);
+ }
+ return array('services' => $services);
+ }
+
+ function prepareForSave($obj)
+ {
+ $loader = new Auth_OpenID_ServiceEndpointLoader();
+ $services = array();
+ foreach ($obj->services as $s) {
+ $services[] = $loader->toSession($s);
+ }
+ return array('services' => $services);
+ }
+}
+
+/**
+ * The Yadis service manager which stores state in a session and
+ * iterates over <Service> elements in a Yadis XRDS document and lets
+ * a caller attempt to use each one. This is used by the Yadis
+ * library internally.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_Manager {
+
+ /**
+ * Intialize a new yadis service manager.
+ *
+ * @access private
+ */
+ function Auth_Yadis_Manager($starting_url, $yadis_url,
+ $services, $session_key)
+ {
+ // The URL that was used to initiate the Yadis protocol
+ $this->starting_url = $starting_url;
+
+ // The URL after following redirects (the identifier)
+ $this->yadis_url = $yadis_url;
+
+ // List of service elements
+ $this->services = $services;
+
+ $this->session_key = $session_key;
+
+ // Reference to the current service object
+ $this->_current = null;
+
+ // Stale flag for cleanup if PHP lib has trouble.
+ $this->stale = false;
+ }
+
+ /**
+ * @access private
+ */
+ function length()
+ {
+ // How many untried services remain?
+ return count($this->services);
+ }
+
+ /**
+ * Return the next service
+ *
+ * $this->current() will continue to return that service until the
+ * next call to this method.
+ */
+ function nextService()
+ {
+
+ if ($this->services) {
+ $this->_current = array_shift($this->services);
+ } else {
+ $this->_current = null;
+ }
+
+ return $this->_current;
+ }
+
+ /**
+ * @access private
+ */
+ function current()
+ {
+ // Return the current service.
+ // Returns None if there are no services left.
+ return $this->_current;
+ }
+
+ /**
+ * @access private
+ */
+ function forURL($url)
+ {
+ return in_array($url, array($this->starting_url, $this->yadis_url));
+ }
+
+ /**
+ * @access private
+ */
+ function started()
+ {
+ // Has the first service been returned?
+ return $this->_current !== null;
+ }
+}
+
+/**
+ * State management for discovery.
+ *
+ * High-level usage pattern is to call .getNextService(discover) in
+ * order to find the next available service for this user for this
+ * session. Once a request completes, call .cleanup() to clean up the
+ * session state.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_Discovery {
+
+ /**
+ * @access private
+ */
+ var $DEFAULT_SUFFIX = 'auth';
+
+ /**
+ * @access private
+ */
+ var $PREFIX = '_yadis_services_';
+
+ /**
+ * Initialize a discovery object.
+ *
+ * @param Auth_Yadis_PHPSession $session An object which
+ * implements the Auth_Yadis_PHPSession API.
+ * @param string $url The URL on which to attempt discovery.
+ * @param string $session_key_suffix The optional session key
+ * suffix override.
+ */
+ function Auth_Yadis_Discovery($session, $url,
+ $session_key_suffix = null)
+ {
+ /// Initialize a discovery object
+ $this->session = $session;
+ $this->url = $url;
+ if ($session_key_suffix === null) {
+ $session_key_suffix = $this->DEFAULT_SUFFIX;
+ }
+
+ $this->session_key_suffix = $session_key_suffix;
+ $this->session_key = $this->PREFIX . $this->session_key_suffix;
+ }
+
+ /**
+ * Return the next authentication service for the pair of
+ * user_input and session. This function handles fallback.
+ */
+ function getNextService($discover_cb, $fetcher)
+ {
+ $manager = $this->getManager();
+ if (!$manager || (!$manager->services)) {
+ $this->destroyManager();
+
+ list($yadis_url, $services) = call_user_func($discover_cb,
+ $this->url,
+ $fetcher);
+
+ $manager = $this->createManager($services, $yadis_url);
+ }
+
+ if ($manager) {
+ $loader = new Auth_Yadis_ManagerLoader();
+ $service = $manager->nextService();
+ $this->session->set($this->session_key,
+ serialize($loader->toSession($manager)));
+ } else {
+ $service = null;
+ }
+
+ return $service;
+ }
+
+ /**
+ * Clean up Yadis-related services in the session and return the
+ * most-recently-attempted service from the manager, if one
+ * exists.
+ *
+ * @param $force True if the manager should be deleted regardless
+ * of whether it's a manager for $this->url.
+ */
+ function cleanup($force=false)
+ {
+ $manager = $this->getManager($force);
+ if ($manager) {
+ $service = $manager->current();
+ $this->destroyManager($force);
+ } else {
+ $service = null;
+ }
+
+ return $service;
+ }
+
+ /**
+ * @access private
+ */
+ function getSessionKey()
+ {
+ // Get the session key for this starting URL and suffix
+ return $this->PREFIX . $this->session_key_suffix;
+ }
+
+ /**
+ * @access private
+ *
+ * @param $force True if the manager should be returned regardless
+ * of whether it's a manager for $this->url.
+ */
+ function getManager($force=false)
+ {
+ // Extract the YadisServiceManager for this object's URL and
+ // suffix from the session.
+
+ $manager_str = $this->session->get($this->getSessionKey());
+ $manager = null;
+
+ if ($manager_str !== null) {
+ $loader = new Auth_Yadis_ManagerLoader();
+ $manager = $loader->fromSession(unserialize($manager_str));
+ }
+
+ if ($manager && ($manager->forURL($this->url) || $force)) {
+ return $manager;
+ }
+ }
+
+ /**
+ * @access private
+ */
+ function createManager($services, $yadis_url = null)
+ {
+ $key = $this->getSessionKey();
+ if ($this->getManager()) {
+ return $this->getManager();
+ }
+
+ if ($services) {
+ $loader = new Auth_Yadis_ManagerLoader();
+ $manager = new Auth_Yadis_Manager($this->url, $yadis_url,
+ $services, $key);
+ $this->session->set($this->session_key,
+ serialize($loader->toSession($manager)));
+ return $manager;
+ }
+ }
+
+ /**
+ * @access private
+ *
+ * @param $force True if the manager should be deleted regardless
+ * of whether it's a manager for $this->url.
+ */
+ function destroyManager($force=false)
+ {
+ if ($this->getManager($force) !== null) {
+ $key = $this->getSessionKey();
+ $this->session->del($key);
+ }
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/Yadis/Misc.php b/mod/openid_api/vendors/php-openid/Auth/Yadis/Misc.php
new file mode 100644
index 000000000..a5afa8e9a
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/Yadis/Misc.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Miscellaneous utility values and functions for OpenID and Yadis.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+function Auth_Yadis_getUCSChars()
+{
+ return array(
+ array(0xA0, 0xD7FF),
+ array(0xF900, 0xFDCF),
+ array(0xFDF0, 0xFFEF),
+ array(0x10000, 0x1FFFD),
+ array(0x20000, 0x2FFFD),
+ array(0x30000, 0x3FFFD),
+ array(0x40000, 0x4FFFD),
+ array(0x50000, 0x5FFFD),
+ array(0x60000, 0x6FFFD),
+ array(0x70000, 0x7FFFD),
+ array(0x80000, 0x8FFFD),
+ array(0x90000, 0x9FFFD),
+ array(0xA0000, 0xAFFFD),
+ array(0xB0000, 0xBFFFD),
+ array(0xC0000, 0xCFFFD),
+ array(0xD0000, 0xDFFFD),
+ array(0xE1000, 0xEFFFD)
+ );
+}
+
+function Auth_Yadis_getIPrivateChars()
+{
+ return array(
+ array(0xE000, 0xF8FF),
+ array(0xF0000, 0xFFFFD),
+ array(0x100000, 0x10FFFD)
+ );
+}
+
+function Auth_Yadis_pct_escape_unicode($char_match)
+{
+ $c = $char_match[0];
+ $result = "";
+ for ($i = 0; $i < strlen($c); $i++) {
+ $result .= "%".sprintf("%X", ord($c[$i]));
+ }
+ return $result;
+}
+
+function Auth_Yadis_startswith($s, $stuff)
+{
+ return strpos($s, $stuff) === 0;
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/Yadis/ParanoidHTTPFetcher.php b/mod/openid_api/vendors/php-openid/Auth/Yadis/ParanoidHTTPFetcher.php
new file mode 100644
index 000000000..f65ab62f4
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/Yadis/ParanoidHTTPFetcher.php
@@ -0,0 +1,245 @@
+<?php
+
+/**
+ * This module contains the CURL-based HTTP fetcher implementation.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Interface import
+ */
+require_once "Auth/Yadis/HTTPFetcher.php";
+
+require_once "Auth/OpenID.php";
+
+/**
+ * A paranoid {@link Auth_Yadis_HTTPFetcher} class which uses CURL
+ * for fetching.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_ParanoidHTTPFetcher extends Auth_Yadis_HTTPFetcher {
+ function Auth_Yadis_ParanoidHTTPFetcher()
+ {
+ $this->reset();
+ }
+
+ function reset()
+ {
+ $this->headers = array();
+ $this->data = "";
+ }
+
+ /**
+ * @access private
+ */
+ function _writeHeader($ch, $header)
+ {
+ array_push($this->headers, rtrim($header));
+ return strlen($header);
+ }
+
+ /**
+ * @access private
+ */
+ function _writeData($ch, $data)
+ {
+ if (strlen($this->data) > 1024*Auth_OpenID_FETCHER_MAX_RESPONSE_KB) {
+ return 0;
+ } else {
+ $this->data .= $data;
+ return strlen($data);
+ }
+ }
+
+ /**
+ * Does this fetcher support SSL URLs?
+ */
+ function supportsSSL()
+ {
+ $v = curl_version();
+ if(is_array($v)) {
+ return in_array('https', $v['protocols']);
+ } elseif (is_string($v)) {
+ return preg_match('/OpenSSL/i', $v);
+ } else {
+ return 0;
+ }
+ }
+
+ function get($url, $extra_headers = null)
+ {
+ if (!$this->canFetchURL($url)) {
+ return null;
+ }
+
+ $stop = time() + $this->timeout;
+ $off = $this->timeout;
+
+ $redir = true;
+
+ while ($redir && ($off > 0)) {
+ $this->reset();
+
+ $c = curl_init();
+
+ if ($c === false) {
+ Auth_OpenID::log(
+ "curl_init returned false; could not " .
+ "initialize for URL '%s'", $url);
+ return null;
+ }
+
+ if (defined('CURLOPT_NOSIGNAL')) {
+ curl_setopt($c, CURLOPT_NOSIGNAL, true);
+ }
+
+ if (!$this->allowedURL($url)) {
+ Auth_OpenID::log("Fetching URL not allowed: %s",
+ $url);
+ return null;
+ }
+
+ curl_setopt($c, CURLOPT_WRITEFUNCTION,
+ array($this, "_writeData"));
+ curl_setopt($c, CURLOPT_HEADERFUNCTION,
+ array($this, "_writeHeader"));
+
+ if ($extra_headers) {
+ curl_setopt($c, CURLOPT_HTTPHEADER, $extra_headers);
+ }
+
+ $cv = curl_version();
+ if(is_array($cv)) {
+ $curl_user_agent = 'curl/'.$cv['version'];
+ } else {
+ $curl_user_agent = $cv;
+ }
+ curl_setopt($c, CURLOPT_USERAGENT,
+ Auth_OpenID_USER_AGENT.' '.$curl_user_agent);
+ curl_setopt($c, CURLOPT_TIMEOUT, $off);
+ curl_setopt($c, CURLOPT_URL, $url);
+
+ if (defined('Auth_OpenID_VERIFY_HOST')) {
+ curl_setopt($c, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
+ }
+ curl_exec($c);
+
+ $code = curl_getinfo($c, CURLINFO_HTTP_CODE);
+ $body = $this->data;
+ $headers = $this->headers;
+
+ if (!$code) {
+ Auth_OpenID::log("Got no response code when fetching %s", $url);
+ Auth_OpenID::log("CURL error (%s): %s",
+ curl_errno($c), curl_error($c));
+ return null;
+ }
+
+ if (in_array($code, array(301, 302, 303, 307))) {
+ $url = $this->_findRedirect($headers, $url);
+ $redir = true;
+ } else {
+ $redir = false;
+ curl_close($c);
+
+ if (defined('Auth_OpenID_VERIFY_HOST') &&
+ $this->isHTTPS($url)) {
+ Auth_OpenID::log('OpenID: Verified SSL host %s using '.
+ 'curl/get', $url);
+ }
+ $new_headers = array();
+
+ foreach ($headers as $header) {
+ if (strpos($header, ': ')) {
+ list($name, $value) = explode(': ', $header, 2);
+ $new_headers[$name] = $value;
+ }
+ }
+
+ Auth_OpenID::log(
+ "Successfully fetched '%s': GET response code %s",
+ $url, $code);
+
+ return new Auth_Yadis_HTTPResponse($url, $code,
+ $new_headers, $body);
+ }
+
+ $off = $stop - time();
+ }
+
+ return null;
+ }
+
+ function post($url, $body, $extra_headers = null)
+ {
+ if (!$this->canFetchURL($url)) {
+ return null;
+ }
+
+ $this->reset();
+
+ $c = curl_init();
+
+ if (defined('CURLOPT_NOSIGNAL')) {
+ curl_setopt($c, CURLOPT_NOSIGNAL, true);
+ }
+
+ curl_setopt($c, CURLOPT_POST, true);
+ curl_setopt($c, CURLOPT_POSTFIELDS, $body);
+ curl_setopt($c, CURLOPT_TIMEOUT, $this->timeout);
+ curl_setopt($c, CURLOPT_URL, $url);
+ curl_setopt($c, CURLOPT_WRITEFUNCTION,
+ array($this, "_writeData"));
+
+ if (defined('Auth_OpenID_VERIFY_HOST')) {
+ curl_setopt($c, CURLOPT_SSL_VERIFYPEER, true);
+ curl_setopt($c, CURLOPT_SSL_VERIFYHOST, 2);
+ }
+
+ curl_exec($c);
+
+ $code = curl_getinfo($c, CURLINFO_HTTP_CODE);
+
+ if (!$code) {
+ Auth_OpenID::log("Got no response code when fetching %s", $url);
+ Auth_OpenID::log("CURL error (%s): %s",
+ curl_errno($c), curl_error($c));
+ return null;
+ }
+
+ if (defined('Auth_OpenID_VERIFY_HOST') && $this->isHTTPS($url)) {
+ Auth_OpenID::log('OpenID: Verified SSL host %s using '.
+ 'curl/post', $url);
+ }
+ $body = $this->data;
+
+ curl_close($c);
+
+ $new_headers = $extra_headers;
+
+ foreach ($this->headers as $header) {
+ if (strpos($header, ': ')) {
+ list($name, $value) = explode(': ', $header, 2);
+ $new_headers[$name] = $value;
+ }
+
+ }
+
+ //Auth_OpenID::log("Successfully fetched '%s': POST response code %s",
+ // $url, $code);
+
+ return new Auth_Yadis_HTTPResponse($url, $code,
+ $new_headers, $body);
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/Yadis/ParseHTML.php b/mod/openid_api/vendors/php-openid/Auth/Yadis/ParseHTML.php
new file mode 100644
index 000000000..6f0f8b7e2
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/Yadis/ParseHTML.php
@@ -0,0 +1,258 @@
+<?php
+
+/**
+ * This is the HTML pseudo-parser for the Yadis library.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * This class is responsible for scanning an HTML string to find META
+ * tags and their attributes. This is used by the Yadis discovery
+ * process. This class must be instantiated to be used.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_ParseHTML {
+
+ /**
+ * @access private
+ */
+ var $_re_flags = "si";
+
+ /**
+ * @access private
+ */
+ var $_removed_re =
+ "<!--.*?-->|<!\[CDATA\[.*?\]\]>|<script\b(?!:)[^>]*>.*?<\/script>";
+
+ /**
+ * @access private
+ */
+ var $_tag_expr = "<%s%s(?:\s.*?)?%s>";
+
+ /**
+ * @access private
+ */
+ var $_attr_find = '\b([-\w]+)=(".*?"|\'.*?\'|.+?)[\/\s>]';
+
+ function Auth_Yadis_ParseHTML()
+ {
+ $this->_attr_find = sprintf("/%s/%s",
+ $this->_attr_find,
+ $this->_re_flags);
+
+ $this->_removed_re = sprintf("/%s/%s",
+ $this->_removed_re,
+ $this->_re_flags);
+
+ $this->_entity_replacements = array(
+ 'amp' => '&',
+ 'lt' => '<',
+ 'gt' => '>',
+ 'quot' => '"'
+ );
+
+ $this->_ent_replace =
+ sprintf("&(%s);", implode("|",
+ $this->_entity_replacements));
+ }
+
+ /**
+ * Replace HTML entities (amp, lt, gt, and quot) as well as
+ * numeric entities (e.g. #x9f;) with their actual values and
+ * return the new string.
+ *
+ * @access private
+ * @param string $str The string in which to look for entities
+ * @return string $new_str The new string entities decoded
+ */
+ function replaceEntities($str)
+ {
+ foreach ($this->_entity_replacements as $old => $new) {
+ $str = preg_replace(sprintf("/&%s;/", $old), $new, $str);
+ }
+
+ // Replace numeric entities because html_entity_decode doesn't
+ // do it for us.
+ $str = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
+ $str = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $str);
+
+ return $str;
+ }
+
+ /**
+ * Strip single and double quotes off of a string, if they are
+ * present.
+ *
+ * @access private
+ * @param string $str The original string
+ * @return string $new_str The new string with leading and
+ * trailing quotes removed
+ */
+ function removeQuotes($str)
+ {
+ $matches = array();
+ $double = '/^"(.*)"$/';
+ $single = "/^\'(.*)\'$/";
+
+ if (preg_match($double, $str, $matches)) {
+ return $matches[1];
+ } else if (preg_match($single, $str, $matches)) {
+ return $matches[1];
+ } else {
+ return $str;
+ }
+ }
+
+ /**
+ * Create a regular expression that will match an opening
+ * or closing tag from a set of names.
+ *
+ * @access private
+ * @param mixed $tag_names Tag names to match
+ * @param mixed $close false/0 = no, true/1 = yes, other = maybe
+ * @param mixed $self_close false/0 = no, true/1 = yes, other = maybe
+ * @return string $regex A regular expression string to be used
+ * in, say, preg_match.
+ */
+ function tagPattern($tag_names, $close, $self_close)
+ {
+ if (is_array($tag_names)) {
+ $tag_names = '(?:'.implode('|',$tag_names).')';
+ }
+ if ($close) {
+ $close = '\/' . (($close == 1)? '' : '?');
+ } else {
+ $close = '';
+ }
+ if ($self_close) {
+ $self_close = '(?:\/\s*)' . (($self_close == 1)? '' : '?');
+ } else {
+ $self_close = '';
+ }
+ $expr = sprintf($this->_tag_expr, $close, $tag_names, $self_close);
+
+ return sprintf("/%s/%s", $expr, $this->_re_flags);
+ }
+
+ /**
+ * Given an HTML document string, this finds all the META tags in
+ * the document, provided they are found in the
+ * <HTML><HEAD>...</HEAD> section of the document. The <HTML> tag
+ * may be missing.
+ *
+ * @access private
+ * @param string $html_string An HTMl document string
+ * @return array $tag_list Array of tags; each tag is an array of
+ * attribute -> value.
+ */
+ function getMetaTags($html_string)
+ {
+ $html_string = preg_replace($this->_removed_re,
+ "",
+ $html_string);
+
+ $key_tags = array($this->tagPattern('html', false, false),
+ $this->tagPattern('head', false, false),
+ $this->tagPattern('head', true, false),
+ $this->tagPattern('html', true, false),
+ $this->tagPattern(array(
+ 'body', 'frameset', 'frame', 'p', 'div',
+ 'table','span','a'), 'maybe', 'maybe'));
+ $key_tags_pos = array();
+ foreach ($key_tags as $pat) {
+ $matches = array();
+ preg_match($pat, $html_string, $matches, PREG_OFFSET_CAPTURE);
+ if($matches) {
+ $key_tags_pos[] = $matches[0][1];
+ } else {
+ $key_tags_pos[] = null;
+ }
+ }
+ // no opening head tag
+ if (is_null($key_tags_pos[1])) {
+ return array();
+ }
+ // the effective </head> is the min of the following
+ if (is_null($key_tags_pos[2])) {
+ $key_tags_pos[2] = strlen($html_string);
+ }
+ foreach (array($key_tags_pos[3], $key_tags_pos[4]) as $pos) {
+ if (!is_null($pos) && $pos < $key_tags_pos[2]) {
+ $key_tags_pos[2] = $pos;
+ }
+ }
+ // closing head tag comes before opening head tag
+ if ($key_tags_pos[1] > $key_tags_pos[2]) {
+ return array();
+ }
+ // if there is an opening html tag, make sure the opening head tag
+ // comes after it
+ if (!is_null($key_tags_pos[0]) && $key_tags_pos[1] < $key_tags_pos[0]) {
+ return array();
+ }
+ $html_string = substr($html_string, $key_tags_pos[1],
+ ($key_tags_pos[2]-$key_tags_pos[1]));
+
+ $link_data = array();
+ $link_matches = array();
+
+ if (!preg_match_all($this->tagPattern('meta', false, 'maybe'),
+ $html_string, $link_matches)) {
+ return array();
+ }
+
+ foreach ($link_matches[0] as $link) {
+ $attr_matches = array();
+ preg_match_all($this->_attr_find, $link, $attr_matches);
+ $link_attrs = array();
+ foreach ($attr_matches[0] as $index => $full_match) {
+ $name = $attr_matches[1][$index];
+ $value = $this->replaceEntities(
+ $this->removeQuotes($attr_matches[2][$index]));
+
+ $link_attrs[strtolower($name)] = $value;
+ }
+ $link_data[] = $link_attrs;
+ }
+
+ return $link_data;
+ }
+
+ /**
+ * Looks for a META tag with an "http-equiv" attribute whose value
+ * is one of ("x-xrds-location", "x-yadis-location"), ignoring
+ * case. If such a META tag is found, its "content" attribute
+ * value is returned.
+ *
+ * @param string $html_string An HTML document in string format
+ * @return mixed $content The "content" attribute value of the
+ * META tag, if found, or null if no such tag was found.
+ */
+ function getHTTPEquiv($html_string)
+ {
+ $meta_tags = $this->getMetaTags($html_string);
+
+ if ($meta_tags) {
+ foreach ($meta_tags as $tag) {
+ if (array_key_exists('http-equiv', $tag) &&
+ (in_array(strtolower($tag['http-equiv']),
+ array('x-xrds-location', 'x-yadis-location'))) &&
+ array_key_exists('content', $tag)) {
+ return $tag['content'];
+ }
+ }
+ }
+
+ return null;
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/Yadis/PlainHTTPFetcher.php b/mod/openid_api/vendors/php-openid/Auth/Yadis/PlainHTTPFetcher.php
new file mode 100644
index 000000000..26890539a
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/Yadis/PlainHTTPFetcher.php
@@ -0,0 +1,248 @@
+<?php
+
+/**
+ * This module contains the plain non-curl HTTP fetcher
+ * implementation.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Interface import
+ */
+require_once "Auth/Yadis/HTTPFetcher.php";
+
+/**
+ * This class implements a plain, hand-built socket-based fetcher
+ * which will be used in the event that CURL is unavailable.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_PlainHTTPFetcher extends Auth_Yadis_HTTPFetcher {
+ /**
+ * Does this fetcher support SSL URLs?
+ */
+ function supportsSSL()
+ {
+ return function_exists('openssl_open');
+ }
+
+ function get($url, $extra_headers = null)
+ {
+ if (!$this->canFetchURL($url)) {
+ return null;
+ }
+
+ $redir = true;
+
+ $stop = time() + $this->timeout;
+ $off = $this->timeout;
+
+ while ($redir && ($off > 0)) {
+
+ $parts = parse_url($url);
+
+ $specify_port = true;
+
+ // Set a default port.
+ if (!array_key_exists('port', $parts)) {
+ $specify_port = false;
+ if ($parts['scheme'] == 'http') {
+ $parts['port'] = 80;
+ } elseif ($parts['scheme'] == 'https') {
+ $parts['port'] = 443;
+ } else {
+ return null;
+ }
+ }
+
+ if (!array_key_exists('path', $parts)) {
+ $parts['path'] = '/';
+ }
+
+ $host = $parts['host'];
+
+ if ($parts['scheme'] == 'https') {
+ $host = 'ssl://' . $host;
+ }
+
+ $user_agent = Auth_OpenID_USER_AGENT;
+
+ $headers = array(
+ "GET ".$parts['path'].
+ (array_key_exists('query', $parts) ?
+ "?".$parts['query'] : "").
+ " HTTP/1.0",
+ "User-Agent: $user_agent",
+ "Host: ".$parts['host'].
+ ($specify_port ? ":".$parts['port'] : ""),
+ "Port: ".$parts['port']);
+
+ $errno = 0;
+ $errstr = '';
+
+ if ($extra_headers) {
+ foreach ($extra_headers as $h) {
+ $headers[] = $h;
+ }
+ }
+
+ @$sock = fsockopen($host, $parts['port'], $errno, $errstr,
+ $this->timeout);
+ if ($sock === false) {
+ return false;
+ }
+
+ stream_set_timeout($sock, $this->timeout);
+
+ fputs($sock, implode("\r\n", $headers) . "\r\n\r\n");
+
+ $data = "";
+ $kilobytes = 0;
+ while (!feof($sock) &&
+ $kilobytes < Auth_OpenID_FETCHER_MAX_RESPONSE_KB ) {
+ $data .= fgets($sock, 1024);
+ $kilobytes += 1;
+ }
+
+ fclose($sock);
+
+ // Split response into header and body sections
+ list($headers, $body) = explode("\r\n\r\n", $data, 2);
+ $headers = explode("\r\n", $headers);
+
+ $http_code = explode(" ", $headers[0]);
+ $code = $http_code[1];
+
+ if (in_array($code, array('301', '302'))) {
+ $url = $this->_findRedirect($headers, $url);
+ $redir = true;
+ } else {
+ $redir = false;
+ }
+
+ $off = $stop - time();
+ }
+
+ $new_headers = array();
+
+ foreach ($headers as $header) {
+ if (preg_match("/:/", $header)) {
+ $parts = explode(": ", $header, 2);
+
+ if (count($parts) == 2) {
+ list($name, $value) = $parts;
+ $new_headers[$name] = $value;
+ }
+ }
+
+ }
+
+ return new Auth_Yadis_HTTPResponse($url, $code, $new_headers, $body);
+ }
+
+ function post($url, $body, $extra_headers = null)
+ {
+ if (!$this->canFetchURL($url)) {
+ return null;
+ }
+
+ $parts = parse_url($url);
+
+ $headers = array();
+
+ $post_path = $parts['path'];
+ if (isset($parts['query'])) {
+ $post_path .= '?' . $parts['query'];
+ }
+
+ $headers[] = "POST ".$post_path." HTTP/1.0";
+ $headers[] = "Host: " . $parts['host'];
+ $headers[] = "Content-type: application/x-www-form-urlencoded";
+ $headers[] = "Content-length: " . strval(strlen($body));
+
+ if ($extra_headers &&
+ is_array($extra_headers)) {
+ $headers = array_merge($headers, $extra_headers);
+ }
+
+ // Join all headers together.
+ $all_headers = implode("\r\n", $headers);
+
+ // Add headers, two newlines, and request body.
+ $request = $all_headers . "\r\n\r\n" . $body;
+
+ // Set a default port.
+ if (!array_key_exists('port', $parts)) {
+ if ($parts['scheme'] == 'http') {
+ $parts['port'] = 80;
+ } elseif ($parts['scheme'] == 'https') {
+ $parts['port'] = 443;
+ } else {
+ return null;
+ }
+ }
+
+ if ($parts['scheme'] == 'https') {
+ $parts['host'] = sprintf("ssl://%s", $parts['host']);
+ }
+
+ // Connect to the remote server.
+ $errno = 0;
+ $errstr = '';
+
+ $sock = fsockopen($parts['host'], $parts['port'], $errno, $errstr,
+ $this->timeout);
+
+ if ($sock === false) {
+ return null;
+ }
+
+ stream_set_timeout($sock, $this->timeout);
+
+ // Write the POST request.
+ fputs($sock, $request);
+
+ // Get the response from the server.
+ $response = "";
+ while (!feof($sock)) {
+ if ($data = fgets($sock, 128)) {
+ $response .= $data;
+ } else {
+ break;
+ }
+ }
+
+ // Split the request into headers and body.
+ list($headers, $response_body) = explode("\r\n\r\n", $response, 2);
+
+ $headers = explode("\r\n", $headers);
+
+ // Expect the first line of the headers data to be something
+ // like HTTP/1.1 200 OK. Split the line on spaces and take
+ // the second token, which should be the return code.
+ $http_code = explode(" ", $headers[0]);
+ $code = $http_code[1];
+
+ $new_headers = array();
+
+ foreach ($headers as $header) {
+ if (preg_match("/:/", $header)) {
+ list($name, $value) = explode(": ", $header, 2);
+ $new_headers[$name] = $value;
+ }
+
+ }
+
+ return new Auth_Yadis_HTTPResponse($url, $code,
+ $new_headers, $response_body);
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/Yadis/XML.php b/mod/openid_api/vendors/php-openid/Auth/Yadis/XML.php
new file mode 100644
index 000000000..cf1f5c41b
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/Yadis/XML.php
@@ -0,0 +1,352 @@
+<?php
+
+/**
+ * XML-parsing classes to wrap the domxml and DOM extensions for PHP 4
+ * and 5, respectively.
+ *
+ * @package OpenID
+ */
+
+/**
+ * The base class for wrappers for available PHP XML-parsing
+ * extensions. To work with this Yadis library, subclasses of this
+ * class MUST implement the API as defined in the remarks for this
+ * class. Subclasses of Auth_Yadis_XMLParser are used to wrap
+ * particular PHP XML extensions such as 'domxml'. These are used
+ * internally by the library depending on the availability of
+ * supported PHP XML extensions.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_XMLParser {
+ /**
+ * Initialize an instance of Auth_Yadis_XMLParser with some
+ * XML and namespaces. This SHOULD NOT be overridden by
+ * subclasses.
+ *
+ * @param string $xml_string A string of XML to be parsed.
+ * @param array $namespace_map An array of ($ns_name => $ns_uri)
+ * to be registered with the XML parser. May be empty.
+ * @return boolean $result True if the initialization and
+ * namespace registration(s) succeeded; false otherwise.
+ */
+ function init($xml_string, $namespace_map)
+ {
+ if (!$this->setXML($xml_string)) {
+ return false;
+ }
+
+ foreach ($namespace_map as $prefix => $uri) {
+ if (!$this->registerNamespace($prefix, $uri)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Register a namespace with the XML parser. This should be
+ * overridden by subclasses.
+ *
+ * @param string $prefix The namespace prefix to appear in XML tag
+ * names.
+ *
+ * @param string $uri The namespace URI to be used to identify the
+ * namespace in the XML.
+ *
+ * @return boolean $result True if the registration succeeded;
+ * false otherwise.
+ */
+ function registerNamespace($prefix, $uri)
+ {
+ // Not implemented.
+ }
+
+ /**
+ * Set this parser object's XML payload. This should be
+ * overridden by subclasses.
+ *
+ * @param string $xml_string The XML string to pass to this
+ * object's XML parser.
+ *
+ * @return boolean $result True if the initialization succeeded;
+ * false otherwise.
+ */
+ function setXML($xml_string)
+ {
+ // Not implemented.
+ }
+
+ /**
+ * Evaluate an XPath expression and return the resulting node
+ * list. This should be overridden by subclasses.
+ *
+ * @param string $xpath The XPath expression to be evaluated.
+ *
+ * @param mixed $node A node object resulting from a previous
+ * evalXPath call. This node, if specified, provides the context
+ * for the evaluation of this xpath expression.
+ *
+ * @return array $node_list An array of matching opaque node
+ * objects to be used with other methods of this parser class.
+ */
+ function &evalXPath($xpath, $node = null)
+ {
+ // Not implemented.
+ }
+
+ /**
+ * Return the textual content of a specified node.
+ *
+ * @param mixed $node A node object from a previous call to
+ * $this->evalXPath().
+ *
+ * @return string $content The content of this node.
+ */
+ function content($node)
+ {
+ // Not implemented.
+ }
+
+ /**
+ * Return the attributes of a specified node.
+ *
+ * @param mixed $node A node object from a previous call to
+ * $this->evalXPath().
+ *
+ * @return array $attrs An array mapping attribute names to
+ * values.
+ */
+ function attributes($node)
+ {
+ // Not implemented.
+ }
+}
+
+/**
+ * This concrete implementation of Auth_Yadis_XMLParser implements
+ * the appropriate API for the 'domxml' extension which is typically
+ * packaged with PHP 4. This class will be used whenever the 'domxml'
+ * extension is detected. See the Auth_Yadis_XMLParser class for
+ * details on this class's methods.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_domxml extends Auth_Yadis_XMLParser {
+ function Auth_Yadis_domxml()
+ {
+ $this->xml = null;
+ $this->doc = null;
+ $this->xpath = null;
+ $this->errors = array();
+ }
+
+ function setXML($xml_string)
+ {
+ $this->xml = $xml_string;
+ $this->doc = @domxml_open_mem($xml_string, DOMXML_LOAD_PARSING,
+ $this->errors);
+
+ if (!$this->doc) {
+ return false;
+ }
+
+ $this->xpath = $this->doc->xpath_new_context();
+
+ return true;
+ }
+
+ function registerNamespace($prefix, $uri)
+ {
+ return xpath_register_ns($this->xpath, $prefix, $uri);
+ }
+
+ function &evalXPath($xpath, $node = null)
+ {
+ if ($node) {
+ $result = @$this->xpath->xpath_eval($xpath, $node);
+ } else {
+ $result = @$this->xpath->xpath_eval($xpath);
+ }
+
+ if (!$result) {
+ $n = array();
+ return $n;
+ }
+
+ if (!$result->nodeset) {
+ $n = array();
+ return $n;
+ }
+
+ return $result->nodeset;
+ }
+
+ function content($node)
+ {
+ if ($node) {
+ return $node->get_content();
+ }
+ }
+
+ function attributes($node)
+ {
+ if ($node) {
+ $arr = $node->attributes();
+ $result = array();
+
+ if ($arr) {
+ foreach ($arr as $attrnode) {
+ $result[$attrnode->name] = $attrnode->value;
+ }
+ }
+
+ return $result;
+ }
+ }
+}
+
+/**
+ * This concrete implementation of Auth_Yadis_XMLParser implements
+ * the appropriate API for the 'dom' extension which is typically
+ * packaged with PHP 5. This class will be used whenever the 'dom'
+ * extension is detected. See the Auth_Yadis_XMLParser class for
+ * details on this class's methods.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_dom extends Auth_Yadis_XMLParser {
+ function Auth_Yadis_dom()
+ {
+ $this->xml = null;
+ $this->doc = null;
+ $this->xpath = null;
+ $this->errors = array();
+ }
+
+ function setXML($xml_string)
+ {
+ $this->xml = $xml_string;
+ $this->doc = new DOMDocument;
+
+ if (!$this->doc) {
+ return false;
+ }
+
+ if (!@$this->doc->loadXML($xml_string)) {
+ return false;
+ }
+
+ $this->xpath = new DOMXPath($this->doc);
+
+ if ($this->xpath) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function registerNamespace($prefix, $uri)
+ {
+ return $this->xpath->registerNamespace($prefix, $uri);
+ }
+
+ function &evalXPath($xpath, $node = null)
+ {
+ if ($node) {
+ $result = @$this->xpath->query($xpath, $node);
+ } else {
+ $result = @$this->xpath->query($xpath);
+ }
+
+ $n = array();
+
+ if (!$result) {
+ return $n;
+ }
+
+ for ($i = 0; $i < $result->length; $i++) {
+ $n[] = $result->item($i);
+ }
+
+ return $n;
+ }
+
+ function content($node)
+ {
+ if ($node) {
+ return $node->textContent;
+ }
+ }
+
+ function attributes($node)
+ {
+ if ($node) {
+ $arr = $node->attributes;
+ $result = array();
+
+ if ($arr) {
+ for ($i = 0; $i < $arr->length; $i++) {
+ $node = $arr->item($i);
+ $result[$node->nodeName] = $node->nodeValue;
+ }
+ }
+
+ return $result;
+ }
+ }
+}
+
+global $__Auth_Yadis_defaultParser;
+$__Auth_Yadis_defaultParser = null;
+
+/**
+ * Set a default parser to override the extension-driven selection of
+ * available parser classes. This is helpful in a test environment or
+ * one in which multiple parsers can be used but one is more
+ * desirable.
+ *
+ * @param Auth_Yadis_XMLParser $parser An instance of a
+ * Auth_Yadis_XMLParser subclass.
+ */
+function Auth_Yadis_setDefaultParser($parser)
+{
+ global $__Auth_Yadis_defaultParser;
+ $__Auth_Yadis_defaultParser = $parser;
+}
+
+function Auth_Yadis_getSupportedExtensions()
+{
+ return array('dom' => 'Auth_Yadis_dom',
+ 'domxml' => 'Auth_Yadis_domxml');
+}
+
+/**
+ * Returns an instance of a Auth_Yadis_XMLParser subclass based on
+ * the availability of PHP extensions for XML parsing. If
+ * Auth_Yadis_setDefaultParser has been called, the parser used in
+ * that call will be returned instead.
+ */
+function Auth_Yadis_getXMLParser()
+{
+ global $__Auth_Yadis_defaultParser;
+
+ if (isset($__Auth_Yadis_defaultParser)) {
+ return $__Auth_Yadis_defaultParser;
+ }
+
+ foreach(Auth_Yadis_getSupportedExtensions() as $extension => $classname)
+ {
+ if (extension_loaded($extension))
+ {
+ $p = new $classname();
+ Auth_Yadis_setDefaultParser($p);
+ return $p;
+ }
+ }
+
+ return false;
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/Yadis/XRDS.php b/mod/openid_api/vendors/php-openid/Auth/Yadis/XRDS.php
new file mode 100644
index 000000000..044d1e761
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/Yadis/XRDS.php
@@ -0,0 +1,478 @@
+<?php
+
+/**
+ * This module contains the XRDS parsing code.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Require the XPath implementation.
+ */
+require_once 'Auth/Yadis/XML.php';
+
+/**
+ * This match mode means a given service must match ALL filters passed
+ * to the Auth_Yadis_XRDS::services() call.
+ */
+define('SERVICES_YADIS_MATCH_ALL', 101);
+
+/**
+ * This match mode means a given service must match ANY filters (at
+ * least one) passed to the Auth_Yadis_XRDS::services() call.
+ */
+define('SERVICES_YADIS_MATCH_ANY', 102);
+
+/**
+ * The priority value used for service elements with no priority
+ * specified.
+ */
+define('SERVICES_YADIS_MAX_PRIORITY', pow(2, 30));
+
+/**
+ * XRD XML namespace
+ */
+define('Auth_Yadis_XMLNS_XRD_2_0', 'xri://$xrd*($v*2.0)');
+
+/**
+ * XRDS XML namespace
+ */
+define('Auth_Yadis_XMLNS_XRDS', 'xri://$xrds');
+
+function Auth_Yadis_getNSMap()
+{
+ return array('xrds' => Auth_Yadis_XMLNS_XRDS,
+ 'xrd' => Auth_Yadis_XMLNS_XRD_2_0);
+}
+
+/**
+ * @access private
+ */
+function Auth_Yadis_array_scramble($arr)
+{
+ $result = array();
+
+ while (count($arr)) {
+ $index = array_rand($arr, 1);
+ $result[] = $arr[$index];
+ unset($arr[$index]);
+ }
+
+ return $result;
+}
+
+/**
+ * This class represents a <Service> element in an XRDS document.
+ * Objects of this type are returned by
+ * Auth_Yadis_XRDS::services() and
+ * Auth_Yadis_Yadis::services(). Each object corresponds directly
+ * to a <Service> element in the XRDS and supplies a
+ * getElements($name) method which you should use to inspect the
+ * element's contents. See {@link Auth_Yadis_Yadis} for more
+ * information on the role this class plays in Yadis discovery.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_Service {
+
+ /**
+ * Creates an empty service object.
+ */
+ function Auth_Yadis_Service()
+ {
+ $this->element = null;
+ $this->parser = null;
+ }
+
+ /**
+ * Return the URIs in the "Type" elements, if any, of this Service
+ * element.
+ *
+ * @return array $type_uris An array of Type URI strings.
+ */
+ function getTypes()
+ {
+ $t = array();
+ foreach ($this->getElements('xrd:Type') as $elem) {
+ $c = $this->parser->content($elem);
+ if ($c) {
+ $t[] = $c;
+ }
+ }
+ return $t;
+ }
+
+ function matchTypes($type_uris)
+ {
+ $result = array();
+
+ foreach ($this->getTypes() as $typ) {
+ if (in_array($typ, $type_uris)) {
+ $result[] = $typ;
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Return the URIs in the "URI" elements, if any, of this Service
+ * element. The URIs are returned sorted in priority order.
+ *
+ * @return array $uris An array of URI strings.
+ */
+ function getURIs()
+ {
+ $uris = array();
+ $last = array();
+
+ foreach ($this->getElements('xrd:URI') as $elem) {
+ $uri_string = $this->parser->content($elem);
+ $attrs = $this->parser->attributes($elem);
+ if ($attrs &&
+ array_key_exists('priority', $attrs)) {
+ $priority = intval($attrs['priority']);
+ if (!array_key_exists($priority, $uris)) {
+ $uris[$priority] = array();
+ }
+
+ $uris[$priority][] = $uri_string;
+ } else {
+ $last[] = $uri_string;
+ }
+ }
+
+ $keys = array_keys($uris);
+ sort($keys);
+
+ // Rebuild array of URIs.
+ $result = array();
+ foreach ($keys as $k) {
+ $new_uris = Auth_Yadis_array_scramble($uris[$k]);
+ $result = array_merge($result, $new_uris);
+ }
+
+ $result = array_merge($result,
+ Auth_Yadis_array_scramble($last));
+
+ return $result;
+ }
+
+ /**
+ * Returns the "priority" attribute value of this <Service>
+ * element, if the attribute is present. Returns null if not.
+ *
+ * @return mixed $result Null or integer, depending on whether
+ * this Service element has a 'priority' attribute.
+ */
+ function getPriority()
+ {
+ $attributes = $this->parser->attributes($this->element);
+
+ if (array_key_exists('priority', $attributes)) {
+ return intval($attributes['priority']);
+ }
+
+ return null;
+ }
+
+ /**
+ * Used to get XML elements from this object's <Service> element.
+ *
+ * This is what you should use to get all custom information out
+ * of this element. This is used by service filter functions to
+ * determine whether a service element contains specific tags,
+ * etc. NOTE: this only considers elements which are direct
+ * children of the <Service> element for this object.
+ *
+ * @param string $name The name of the element to look for
+ * @return array $list An array of elements with the specified
+ * name which are direct children of the <Service> element. The
+ * nodes returned by this function can be passed to $this->parser
+ * methods (see {@link Auth_Yadis_XMLParser}).
+ */
+ function getElements($name)
+ {
+ return $this->parser->evalXPath($name, $this->element);
+ }
+}
+
+/*
+ * Return the expiration date of this XRD element, or None if no
+ * expiration was specified.
+ *
+ * @param $default The value to use as the expiration if no expiration
+ * was specified in the XRD.
+ */
+function Auth_Yadis_getXRDExpiration($xrd_element, $default=null)
+{
+ $expires_element = $xrd_element->$parser->evalXPath('/xrd:Expires');
+ if ($expires_element === null) {
+ return $default;
+ } else {
+ $expires_string = $expires_element->text;
+
+ // Will raise ValueError if the string is not the expected
+ // format
+ $t = strptime($expires_string, "%Y-%m-%dT%H:%M:%SZ");
+
+ if ($t === false) {
+ return false;
+ }
+
+ // [int $hour [, int $minute [, int $second [,
+ // int $month [, int $day [, int $year ]]]]]]
+ return mktime($t['tm_hour'], $t['tm_min'], $t['tm_sec'],
+ $t['tm_mon'], $t['tm_day'], $t['tm_year']);
+ }
+}
+
+/**
+ * This class performs parsing of XRDS documents.
+ *
+ * You should not instantiate this class directly; rather, call
+ * parseXRDS statically:
+ *
+ * <pre> $xrds = Auth_Yadis_XRDS::parseXRDS($xml_string);</pre>
+ *
+ * If the XRDS can be parsed and is valid, an instance of
+ * Auth_Yadis_XRDS will be returned. Otherwise, null will be
+ * returned. This class is used by the Auth_Yadis_Yadis::discover
+ * method.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_XRDS {
+
+ /**
+ * Instantiate a Auth_Yadis_XRDS object. Requires an XPath
+ * instance which has been used to parse a valid XRDS document.
+ */
+ function Auth_Yadis_XRDS($xmlParser, $xrdNodes)
+ {
+ $this->parser = $xmlParser;
+ $this->xrdNode = $xrdNodes[count($xrdNodes) - 1];
+ $this->allXrdNodes = $xrdNodes;
+ $this->serviceList = array();
+ $this->_parse();
+ }
+
+ /**
+ * Parse an XML string (XRDS document) and return either a
+ * Auth_Yadis_XRDS object or null, depending on whether the
+ * XRDS XML is valid.
+ *
+ * @param string $xml_string An XRDS XML string.
+ * @return mixed $xrds An instance of Auth_Yadis_XRDS or null,
+ * depending on the validity of $xml_string
+ */
+ static function parseXRDS($xml_string, $extra_ns_map = null)
+ {
+ $_null = null;
+
+ if (!$xml_string) {
+ return $_null;
+ }
+
+ $parser = Auth_Yadis_getXMLParser();
+
+ $ns_map = Auth_Yadis_getNSMap();
+
+ if ($extra_ns_map && is_array($extra_ns_map)) {
+ $ns_map = array_merge($ns_map, $extra_ns_map);
+ }
+
+ if (!($parser && $parser->init($xml_string, $ns_map))) {
+ return $_null;
+ }
+
+ // Try to get root element.
+ $root = $parser->evalXPath('/xrds:XRDS[1]');
+ if (!$root) {
+ return $_null;
+ }
+
+ if (is_array($root)) {
+ $root = $root[0];
+ }
+
+ $attrs = $parser->attributes($root);
+
+ if (array_key_exists('xmlns:xrd', $attrs) &&
+ $attrs['xmlns:xrd'] != Auth_Yadis_XMLNS_XRDS) {
+ return $_null;
+ } else if (array_key_exists('xmlns', $attrs) &&
+ preg_match('/xri/', $attrs['xmlns']) &&
+ $attrs['xmlns'] != Auth_Yadis_XMLNS_XRD_2_0) {
+ return $_null;
+ }
+
+ // Get the last XRD node.
+ $xrd_nodes = $parser->evalXPath('/xrds:XRDS[1]/xrd:XRD');
+
+ if (!$xrd_nodes) {
+ return $_null;
+ }
+
+ $xrds = new Auth_Yadis_XRDS($parser, $xrd_nodes);
+ return $xrds;
+ }
+
+ /**
+ * @access private
+ */
+ function _addService($priority, $service)
+ {
+ $priority = intval($priority);
+
+ if (!array_key_exists($priority, $this->serviceList)) {
+ $this->serviceList[$priority] = array();
+ }
+
+ $this->serviceList[$priority][] = $service;
+ }
+
+ /**
+ * Creates the service list using nodes from the XRDS XML
+ * document.
+ *
+ * @access private
+ */
+ function _parse()
+ {
+ $this->serviceList = array();
+
+ $services = $this->parser->evalXPath('xrd:Service', $this->xrdNode);
+
+ foreach ($services as $node) {
+ $s = new Auth_Yadis_Service();
+ $s->element = $node;
+ $s->parser = $this->parser;
+
+ $priority = $s->getPriority();
+
+ if ($priority === null) {
+ $priority = SERVICES_YADIS_MAX_PRIORITY;
+ }
+
+ $this->_addService($priority, $s);
+ }
+ }
+
+ /**
+ * Returns a list of service objects which correspond to <Service>
+ * elements in the XRDS XML document for this object.
+ *
+ * Optionally, an array of filter callbacks may be given to limit
+ * the list of returned service objects. Furthermore, the default
+ * mode is to return all service objects which match ANY of the
+ * specified filters, but $filter_mode may be
+ * SERVICES_YADIS_MATCH_ALL if you want to be sure that the
+ * returned services match all the given filters. See {@link
+ * Auth_Yadis_Yadis} for detailed usage information on filter
+ * functions.
+ *
+ * @param mixed $filters An array of callbacks to filter the
+ * returned services, or null if all services are to be returned.
+ * @param integer $filter_mode SERVICES_YADIS_MATCH_ALL or
+ * SERVICES_YADIS_MATCH_ANY, depending on whether the returned
+ * services should match ALL or ANY of the specified filters,
+ * respectively.
+ * @return mixed $services An array of {@link
+ * Auth_Yadis_Service} objects if $filter_mode is a valid
+ * mode; null if $filter_mode is an invalid mode (i.e., not
+ * SERVICES_YADIS_MATCH_ANY or SERVICES_YADIS_MATCH_ALL).
+ */
+ function services($filters = null,
+ $filter_mode = SERVICES_YADIS_MATCH_ANY)
+ {
+
+ $pri_keys = array_keys($this->serviceList);
+ sort($pri_keys, SORT_NUMERIC);
+
+ // If no filters are specified, return the entire service
+ // list, ordered by priority.
+ if (!$filters ||
+ (!is_array($filters))) {
+
+ $result = array();
+ foreach ($pri_keys as $pri) {
+ $result = array_merge($result, $this->serviceList[$pri]);
+ }
+
+ return $result;
+ }
+
+ // If a bad filter mode is specified, return null.
+ if (!in_array($filter_mode, array(SERVICES_YADIS_MATCH_ANY,
+ SERVICES_YADIS_MATCH_ALL))) {
+ return null;
+ }
+
+ // Otherwise, use the callbacks in the filter list to
+ // determine which services are returned.
+ $filtered = array();
+
+ foreach ($pri_keys as $priority_value) {
+ $service_obj_list = $this->serviceList[$priority_value];
+
+ foreach ($service_obj_list as $service) {
+
+ $matches = 0;
+
+ foreach ($filters as $filter) {
+
+ if (call_user_func_array($filter, array($service))) {
+ $matches++;
+
+ if ($filter_mode == SERVICES_YADIS_MATCH_ANY) {
+ $pri = $service->getPriority();
+ if ($pri === null) {
+ $pri = SERVICES_YADIS_MAX_PRIORITY;
+ }
+
+ if (!array_key_exists($pri, $filtered)) {
+ $filtered[$pri] = array();
+ }
+
+ $filtered[$pri][] = $service;
+ break;
+ }
+ }
+ }
+
+ if (($filter_mode == SERVICES_YADIS_MATCH_ALL) &&
+ ($matches == count($filters))) {
+
+ $pri = $service->getPriority();
+ if ($pri === null) {
+ $pri = SERVICES_YADIS_MAX_PRIORITY;
+ }
+
+ if (!array_key_exists($pri, $filtered)) {
+ $filtered[$pri] = array();
+ }
+ $filtered[$pri][] = $service;
+ }
+ }
+ }
+
+ $pri_keys = array_keys($filtered);
+ sort($pri_keys, SORT_NUMERIC);
+
+ $result = array();
+ foreach ($pri_keys as $pri) {
+ $result = array_merge($result, $filtered[$pri]);
+ }
+
+ return $result;
+ }
+}
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/Yadis/XRI.php b/mod/openid_api/vendors/php-openid/Auth/Yadis/XRI.php
new file mode 100644
index 000000000..0143a692e
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/Yadis/XRI.php
@@ -0,0 +1,234 @@
+<?php
+
+/**
+ * Routines for XRI resolution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+require_once 'Auth/Yadis/Misc.php';
+require_once 'Auth/Yadis/Yadis.php';
+require_once 'Auth/OpenID.php';
+
+function Auth_Yadis_getDefaultProxy()
+{
+ return 'http://xri.net/';
+}
+
+function Auth_Yadis_getXRIAuthorities()
+{
+ return array('!', '=', '@', '+', '$', '(');
+}
+
+function Auth_Yadis_getEscapeRE()
+{
+ $parts = array();
+ foreach (array_merge(Auth_Yadis_getUCSChars(),
+ Auth_Yadis_getIPrivateChars()) as $pair) {
+ list($m, $n) = $pair;
+ $parts[] = sprintf("%s-%s", chr($m), chr($n));
+ }
+
+ return sprintf('/[%s]/', implode('', $parts));
+}
+
+function Auth_Yadis_getXrefRE()
+{
+ return '/\((.*?)\)/';
+}
+
+function Auth_Yadis_identifierScheme($identifier)
+{
+ if (Auth_Yadis_startswith($identifier, 'xri://') ||
+ ($identifier &&
+ in_array($identifier[0], Auth_Yadis_getXRIAuthorities()))) {
+ return "XRI";
+ } else {
+ return "URI";
+ }
+}
+
+function Auth_Yadis_toIRINormal($xri)
+{
+ if (!Auth_Yadis_startswith($xri, 'xri://')) {
+ $xri = 'xri://' . $xri;
+ }
+
+ return Auth_Yadis_escapeForIRI($xri);
+}
+
+function _escape_xref($xref_match)
+{
+ $xref = $xref_match[0];
+ $xref = str_replace('/', '%2F', $xref);
+ $xref = str_replace('?', '%3F', $xref);
+ $xref = str_replace('#', '%23', $xref);
+ return $xref;
+}
+
+function Auth_Yadis_escapeForIRI($xri)
+{
+ $xri = str_replace('%', '%25', $xri);
+ $xri = preg_replace_callback(Auth_Yadis_getXrefRE(),
+ '_escape_xref', $xri);
+ return $xri;
+}
+
+function Auth_Yadis_toURINormal($xri)
+{
+ return Auth_Yadis_iriToURI(Auth_Yadis_toIRINormal($xri));
+}
+
+function Auth_Yadis_iriToURI($iri)
+{
+ if (1) {
+ return $iri;
+ } else {
+ // According to RFC 3987, section 3.1, "Mapping of IRIs to URIs"
+ return preg_replace_callback(Auth_Yadis_getEscapeRE(),
+ 'Auth_Yadis_pct_escape_unicode', $iri);
+ }
+}
+
+
+function Auth_Yadis_XRIAppendArgs($url, $args)
+{
+ // Append some arguments to an HTTP query. Yes, this is just like
+ // OpenID's appendArgs, but with special seasoning for XRI
+ // queries.
+
+ if (count($args) == 0) {
+ return $url;
+ }
+
+ // Non-empty array; if it is an array of arrays, use multisort;
+ // otherwise use sort.
+ if (array_key_exists(0, $args) &&
+ is_array($args[0])) {
+ // Do nothing here.
+ } else {
+ $keys = array_keys($args);
+ sort($keys);
+ $new_args = array();
+ foreach ($keys as $key) {
+ $new_args[] = array($key, $args[$key]);
+ }
+ $args = $new_args;
+ }
+
+ // According to XRI Resolution section "QXRI query parameters":
+ //
+ // "If the original QXRI had a null query component (only a
+ // leading question mark), or a query component consisting of
+ // only question marks, one additional leading question mark MUST
+ // be added when adding any XRI resolution parameters."
+ if (strpos(rtrim($url, '?'), '?') !== false) {
+ $sep = '&';
+ } else {
+ $sep = '?';
+ }
+
+ return $url . $sep . Auth_OpenID::httpBuildQuery($args);
+}
+
+function Auth_Yadis_providerIsAuthoritative($providerID, $canonicalID)
+{
+ $lastbang = strrpos($canonicalID, '!');
+ $p = substr($canonicalID, 0, $lastbang);
+ return $p == $providerID;
+}
+
+function Auth_Yadis_rootAuthority($xri)
+{
+ // Return the root authority for an XRI.
+
+ $root = null;
+
+ if (Auth_Yadis_startswith($xri, 'xri://')) {
+ $xri = substr($xri, 6);
+ }
+
+ $authority = explode('/', $xri, 2);
+ $authority = $authority[0];
+ if ($authority[0] == '(') {
+ // Cross-reference.
+ // XXX: This is incorrect if someone nests cross-references so
+ // there is another close-paren in there. Hopefully nobody
+ // does that before we have a real xriparse function.
+ // Hopefully nobody does that *ever*.
+ $root = substr($authority, 0, strpos($authority, ')') + 1);
+ } else if (in_array($authority[0], Auth_Yadis_getXRIAuthorities())) {
+ // Other XRI reference.
+ $root = $authority[0];
+ } else {
+ // IRI reference.
+ $_segments = explode("!", $authority);
+ $segments = array();
+ foreach ($_segments as $s) {
+ $segments = array_merge($segments, explode("*", $s));
+ }
+ $root = $segments[0];
+ }
+
+ return Auth_Yadis_XRI($root);
+}
+
+function Auth_Yadis_XRI($xri)
+{
+ if (!Auth_Yadis_startswith($xri, 'xri://')) {
+ $xri = 'xri://' . $xri;
+ }
+ return $xri;
+}
+
+function Auth_Yadis_getCanonicalID($iname, $xrds)
+{
+ // Returns false or a canonical ID value.
+
+ // Now nodes are in reverse order.
+ $xrd_list = array_reverse($xrds->allXrdNodes);
+ $parser = $xrds->parser;
+ $node = $xrd_list[0];
+
+ $canonicalID_nodes = $parser->evalXPath('xrd:CanonicalID', $node);
+
+ if (!$canonicalID_nodes) {
+ return false;
+ }
+
+ $canonicalID = $canonicalID_nodes[0];
+ $canonicalID = Auth_Yadis_XRI($parser->content($canonicalID));
+
+ $childID = $canonicalID;
+
+ for ($i = 1; $i < count($xrd_list); $i++) {
+ $xrd = $xrd_list[$i];
+
+ $parent_sought = substr($childID, 0, strrpos($childID, '!'));
+ $parentCID = $parser->evalXPath('xrd:CanonicalID', $xrd);
+ if (!$parentCID) {
+ return false;
+ }
+ $parentCID = Auth_Yadis_XRI($parser->content($parentCID[0]));
+
+ if (strcasecmp($parent_sought, $parentCID)) {
+ // raise XRDSFraud.
+ return false;
+ }
+
+ $childID = $parent_sought;
+ }
+
+ $root = Auth_Yadis_rootAuthority($iname);
+ if (!Auth_Yadis_providerIsAuthoritative($root, $childID)) {
+ // raise XRDSFraud.
+ return false;
+ }
+
+ return $canonicalID;
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/Yadis/XRIRes.php b/mod/openid_api/vendors/php-openid/Auth/Yadis/XRIRes.php
new file mode 100644
index 000000000..5e1158735
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/Yadis/XRIRes.php
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * Code for using a proxy XRI resolver.
+ */
+
+require_once 'Auth/Yadis/XRDS.php';
+require_once 'Auth/Yadis/XRI.php';
+
+class Auth_Yadis_ProxyResolver {
+ function Auth_Yadis_ProxyResolver($fetcher, $proxy_url = null)
+ {
+ $this->fetcher = $fetcher;
+ $this->proxy_url = $proxy_url;
+ if (!$this->proxy_url) {
+ $this->proxy_url = Auth_Yadis_getDefaultProxy();
+ }
+ }
+
+ function queryURL($xri, $service_type = null)
+ {
+ // trim off the xri:// prefix
+ $qxri = substr(Auth_Yadis_toURINormal($xri), 6);
+ $hxri = $this->proxy_url . $qxri;
+ $args = array(
+ '_xrd_r' => 'application/xrds+xml'
+ );
+
+ if ($service_type) {
+ $args['_xrd_t'] = $service_type;
+ } else {
+ // Don't perform service endpoint selection.
+ $args['_xrd_r'] .= ';sep=false';
+ }
+
+ $query = Auth_Yadis_XRIAppendArgs($hxri, $args);
+ return $query;
+ }
+
+ function query($xri, $service_types, $filters = array())
+ {
+ $services = array();
+ $canonicalID = null;
+ foreach ($service_types as $service_type) {
+ $url = $this->queryURL($xri, $service_type);
+ $response = $this->fetcher->get($url);
+ if ($response->status != 200 and $response->status != 206) {
+ continue;
+ }
+ $xrds = Auth_Yadis_XRDS::parseXRDS($response->body);
+ if (!$xrds) {
+ continue;
+ }
+ $canonicalID = Auth_Yadis_getCanonicalID($xri,
+ $xrds);
+
+ if ($canonicalID === false) {
+ return null;
+ }
+
+ $some_services = $xrds->services($filters);
+ $services = array_merge($services, $some_services);
+ // TODO:
+ // * If we do get hits for multiple service_types, we're
+ // almost certainly going to have duplicated service
+ // entries and broken priority ordering.
+ }
+ return array($canonicalID, $services);
+ }
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/Auth/Yadis/Yadis.php b/mod/openid_api/vendors/php-openid/Auth/Yadis/Yadis.php
new file mode 100644
index 000000000..f8853671e
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/Auth/Yadis/Yadis.php
@@ -0,0 +1,382 @@
+<?php
+
+/**
+ * The core PHP Yadis implementation.
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: See the COPYING file included in this distribution.
+ *
+ * @package OpenID
+ * @author JanRain, Inc. <openid@janrain.com>
+ * @copyright 2005-2008 Janrain, Inc.
+ * @license http://www.apache.org/licenses/LICENSE-2.0 Apache
+ */
+
+/**
+ * Need both fetcher types so we can use the right one based on the
+ * presence or absence of CURL.
+ */
+require_once "Auth/Yadis/PlainHTTPFetcher.php";
+require_once "Auth/Yadis/ParanoidHTTPFetcher.php";
+
+/**
+ * Need this for parsing HTML (looking for META tags).
+ */
+require_once "Auth/Yadis/ParseHTML.php";
+
+/**
+ * Need this to parse the XRDS document during Yadis discovery.
+ */
+require_once "Auth/Yadis/XRDS.php";
+
+/**
+ * XRDS (yadis) content type
+ */
+define('Auth_Yadis_CONTENT_TYPE', 'application/xrds+xml');
+
+/**
+ * Yadis header
+ */
+define('Auth_Yadis_HEADER_NAME', 'X-XRDS-Location');
+
+/**
+ * Contains the result of performing Yadis discovery on a URI.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_DiscoveryResult {
+
+ // The URI that was passed to the fetcher
+ var $request_uri = null;
+
+ // The result of following redirects from the request_uri
+ var $normalized_uri = null;
+
+ // The URI from which the response text was returned (set to
+ // None if there was no XRDS document found)
+ var $xrds_uri = null;
+
+ var $xrds = null;
+
+ // The content-type returned with the response_text
+ var $content_type = null;
+
+ // The document returned from the xrds_uri
+ var $response_text = null;
+
+ // Did the discovery fail miserably?
+ var $failed = false;
+
+ function Auth_Yadis_DiscoveryResult($request_uri)
+ {
+ // Initialize the state of the object
+ // sets all attributes to None except the request_uri
+ $this->request_uri = $request_uri;
+ }
+
+ function fail()
+ {
+ $this->failed = true;
+ }
+
+ function isFailure()
+ {
+ return $this->failed;
+ }
+
+ /**
+ * Returns the list of service objects as described by the XRDS
+ * document, if this yadis object represents a successful Yadis
+ * discovery.
+ *
+ * @return array $services An array of {@link Auth_Yadis_Service}
+ * objects
+ */
+ function services()
+ {
+ if ($this->xrds) {
+ return $this->xrds->services();
+ }
+
+ return null;
+ }
+
+ function usedYadisLocation()
+ {
+ // Was the Yadis protocol's indirection used?
+ return ($this->xrds_uri && $this->normalized_uri != $this->xrds_uri);
+ }
+
+ function isXRDS()
+ {
+ // Is the response text supposed to be an XRDS document?
+ return ($this->usedYadisLocation() ||
+ $this->content_type == Auth_Yadis_CONTENT_TYPE);
+ }
+}
+
+/**
+ *
+ * Perform the Yadis protocol on the input URL and return an iterable
+ * of resulting endpoint objects.
+ *
+ * input_url: The URL on which to perform the Yadis protocol
+ *
+ * @return: The normalized identity URL and an iterable of endpoint
+ * objects generated by the filter function.
+ *
+ * xrds_parse_func: a callback which will take (uri, xrds_text) and
+ * return an array of service endpoint objects or null. Usually
+ * array('Auth_OpenID_ServiceEndpoint', 'fromXRDS').
+ *
+ * discover_func: if not null, a callback which should take (uri) and
+ * return an Auth_Yadis_Yadis object or null.
+ */
+function Auth_Yadis_getServiceEndpoints($input_url, $xrds_parse_func,
+ $discover_func=null, $fetcher=null)
+{
+ if ($discover_func === null) {
+ $discover_function = array('Auth_Yadis_Yadis', 'discover');
+ }
+
+ $yadis_result = call_user_func_array($discover_func,
+ array($input_url, $fetcher));
+
+ if ($yadis_result === null) {
+ return array($input_url, array());
+ }
+
+ $endpoints = call_user_func_array($xrds_parse_func,
+ array($yadis_result->normalized_uri,
+ $yadis_result->response_text));
+
+ if ($endpoints === null) {
+ $endpoints = array();
+ }
+
+ return array($yadis_result->normalized_uri, $endpoints);
+}
+
+/**
+ * This is the core of the PHP Yadis library. This is the only class
+ * a user needs to use to perform Yadis discovery. This class
+ * performs the discovery AND stores the result of the discovery.
+ *
+ * First, require this library into your program source:
+ *
+ * <pre> require_once "Auth/Yadis/Yadis.php";</pre>
+ *
+ * To perform Yadis discovery, first call the "discover" method
+ * statically with a URI parameter:
+ *
+ * <pre> $http_response = array();
+ * $fetcher = Auth_Yadis_Yadis::getHTTPFetcher();
+ * $yadis_object = Auth_Yadis_Yadis::discover($uri,
+ * $http_response, $fetcher);</pre>
+ *
+ * If the discovery succeeds, $yadis_object will be an instance of
+ * {@link Auth_Yadis_Yadis}. If not, it will be null. The XRDS
+ * document found during discovery should have service descriptions,
+ * which can be accessed by calling
+ *
+ * <pre> $service_list = $yadis_object->services();</pre>
+ *
+ * which returns an array of objects which describe each service.
+ * These objects are instances of Auth_Yadis_Service. Each object
+ * describes exactly one whole Service element, complete with all of
+ * its Types and URIs (no expansion is performed). The common use
+ * case for using the service objects returned by services() is to
+ * write one or more filter functions and pass those to services():
+ *
+ * <pre> $service_list = $yadis_object->services(
+ * array("filterByURI",
+ * "filterByExtension"));</pre>
+ *
+ * The filter functions (whose names appear in the array passed to
+ * services()) take the following form:
+ *
+ * <pre> function myFilter($service) {
+ * // Query $service object here. Return true if the service
+ * // matches your query; false if not.
+ * }</pre>
+ *
+ * This is an example of a filter which uses a regular expression to
+ * match the content of URI tags (note that the Auth_Yadis_Service
+ * class provides a getURIs() method which you should use instead of
+ * this contrived example):
+ *
+ * <pre>
+ * function URIMatcher($service) {
+ * foreach ($service->getElements('xrd:URI') as $uri) {
+ * if (preg_match("/some_pattern/",
+ * $service->parser->content($uri))) {
+ * return true;
+ * }
+ * }
+ * return false;
+ * }</pre>
+ *
+ * The filter functions you pass will be called for each service
+ * object to determine which ones match the criteria your filters
+ * specify. The default behavior is that if a given service object
+ * matches ANY of the filters specified in the services() call, it
+ * will be returned. You can specify that a given service object will
+ * be returned ONLY if it matches ALL specified filters by changing
+ * the match mode of services():
+ *
+ * <pre> $yadis_object->services(array("filter1", "filter2"),
+ * SERVICES_YADIS_MATCH_ALL);</pre>
+ *
+ * See {@link SERVICES_YADIS_MATCH_ALL} and {@link
+ * SERVICES_YADIS_MATCH_ANY}.
+ *
+ * Services described in an XRDS should have a library which you'll
+ * probably be using. Those libraries are responsible for defining
+ * filters that can be used with the "services()" call. If you need
+ * to write your own filter, see the documentation for {@link
+ * Auth_Yadis_Service}.
+ *
+ * @package OpenID
+ */
+class Auth_Yadis_Yadis {
+
+ /**
+ * Returns an HTTP fetcher object. If the CURL extension is
+ * present, an instance of {@link Auth_Yadis_ParanoidHTTPFetcher}
+ * is returned. If not, an instance of
+ * {@link Auth_Yadis_PlainHTTPFetcher} is returned.
+ *
+ * If Auth_Yadis_CURL_OVERRIDE is defined, this method will always
+ * return a {@link Auth_Yadis_PlainHTTPFetcher}.
+ */
+ static function getHTTPFetcher($timeout = 20)
+ {
+ if (Auth_Yadis_Yadis::curlPresent() &&
+ (!defined('Auth_Yadis_CURL_OVERRIDE'))) {
+ $fetcher = new Auth_Yadis_ParanoidHTTPFetcher($timeout);
+ } else {
+ $fetcher = new Auth_Yadis_PlainHTTPFetcher($timeout);
+ }
+ return $fetcher;
+ }
+
+ static function curlPresent()
+ {
+ return function_exists('curl_init');
+ }
+
+ /**
+ * @access private
+ */
+ static function _getHeader($header_list, $names)
+ {
+ foreach ($header_list as $name => $value) {
+ foreach ($names as $n) {
+ if (strtolower($name) == strtolower($n)) {
+ return $value;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * @access private
+ */
+ static function _getContentType($content_type_header)
+ {
+ if ($content_type_header) {
+ $parts = explode(";", $content_type_header);
+ return strtolower($parts[0]);
+ }
+ }
+
+ /**
+ * This should be called statically and will build a Yadis
+ * instance if the discovery process succeeds. This implements
+ * Yadis discovery as specified in the Yadis specification.
+ *
+ * @param string $uri The URI on which to perform Yadis discovery.
+ *
+ * @param array $http_response An array reference where the HTTP
+ * response object will be stored (see {@link
+ * Auth_Yadis_HTTPResponse}.
+ *
+ * @param Auth_Yadis_HTTPFetcher $fetcher An instance of a
+ * Auth_Yadis_HTTPFetcher subclass.
+ *
+ * @param array $extra_ns_map An array which maps namespace names
+ * to namespace URIs to be used when parsing the Yadis XRDS
+ * document.
+ *
+ * @param integer $timeout An optional fetcher timeout, in seconds.
+ *
+ * @return mixed $obj Either null or an instance of
+ * Auth_Yadis_Yadis, depending on whether the discovery
+ * succeeded.
+ */
+ static function discover($uri, $fetcher,
+ $extra_ns_map = null, $timeout = 20)
+ {
+ $result = new Auth_Yadis_DiscoveryResult($uri);
+
+ $request_uri = $uri;
+ $headers = array("Accept: " . Auth_Yadis_CONTENT_TYPE .
+ ', text/html; q=0.3, application/xhtml+xml; q=0.5');
+
+ if ($fetcher === null) {
+ $fetcher = Auth_Yadis_Yadis::getHTTPFetcher($timeout);
+ }
+
+ $response = $fetcher->get($uri, $headers);
+
+ if (!$response || ($response->status != 200 and
+ $response->status != 206)) {
+ $result->fail();
+ return $result;
+ }
+
+ $result->normalized_uri = $response->final_url;
+ $result->content_type = Auth_Yadis_Yadis::_getHeader(
+ $response->headers,
+ array('content-type'));
+
+ if ($result->content_type &&
+ (Auth_Yadis_Yadis::_getContentType($result->content_type) ==
+ Auth_Yadis_CONTENT_TYPE)) {
+ $result->xrds_uri = $result->normalized_uri;
+ } else {
+ $yadis_location = Auth_Yadis_Yadis::_getHeader(
+ $response->headers,
+ array(Auth_Yadis_HEADER_NAME));
+
+ if (!$yadis_location) {
+ $parser = new Auth_Yadis_ParseHTML();
+ $yadis_location = $parser->getHTTPEquiv($response->body);
+ }
+
+ if ($yadis_location) {
+ $result->xrds_uri = $yadis_location;
+
+ $response = $fetcher->get($yadis_location);
+
+ if ((!$response) || ($response->status != 200 and
+ $response->status != 206)) {
+ $result->fail();
+ return $result;
+ }
+
+ $result->content_type = Auth_Yadis_Yadis::_getHeader(
+ $response->headers,
+ array('content-type'));
+ }
+ }
+
+ $result->response_text = $response->body;
+ return $result;
+ }
+}
+
+
diff --git a/mod/openid_api/vendors/php-openid/COPYING b/mod/openid_api/vendors/php-openid/COPYING
new file mode 100644
index 000000000..d64569567
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/COPYING
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/mod/openid_api/vendors/php-openid/README b/mod/openid_api/vendors/php-openid/README
new file mode 100644
index 000000000..54b873f38
--- /dev/null
+++ b/mod/openid_api/vendors/php-openid/README
@@ -0,0 +1,136 @@
+
+PHP OpenID
+----------
+
+This is the PHP OpenID library by JanRain, Inc. You can visit our
+website for more information about this package and other OpenID
+implementations and tools:
+
+ http://www.openidenabled.com/
+
+GETTING STARTED
+===============
+
+First, run the 'examples/detect.php' script either from the command
+line or via the web. It will generate a report of any system
+configuration changes necessary to run the library.
+
+INSTALLATION
+============
+
+You will need PHP 4.3.0 or greater to use this library. We have
+tested the library Linux on PHP 4.3.0, 4.4.1, 5.0.5, and 5.1.1. We
+have tested the library on Windows XP on PHP 4.4.4.
+
+Follow these steps:
+
+1. Install dependencies.
+
+ - Enable either the GMP extension or Bcmath extension. (GMP is
+ STRONGLY recommended because it's MUCH faster!) This is
+ required.
+
+ - Enable the CURL extension.
+
+ - If you plan to use SQLite, PostgreSQL, or MySQL to store OpenID
+ data, you'll need PEAR DB. You can install this by running this
+ as root:
+
+ # pear install DB
+
+ You'll also need to install and enable the appropriate PHP
+ database extension. Alternatively, you can store OpenID data on
+ the filesystem instead of using a relational database. Nothing
+ special is required for using the filesystem method.
+
+ - Install either the DOM or domxml PHP XML processing extension,
+ but not both (they are incompatible).
+
+2. Copy the Auth/ directory into your PHP include path.
+
+TESTING YOUR SETUP
+==================
+
+You can use the example code to test your setup. To run the example
+consumer or server, follow the instructions in the examples/README
+file.
+
+USING THE API
+=============
+
+The best way to get started using the API is to take a look at the
+example consumer and server in the examples/ directory. See the
+examples/README file for more details.
+
+TROUBLESHOOTING
+===============
+
+* If you're unable to use an OpenID URL with the library, you may want
+to try using the discover tool (examples/discover.php). This tool
+will perform OpenID discovery on the identifier and give a list of
+discovered OpenID services and their types.
+
+* On some systems, PHP basedir restrictions prevent web servers from
+opening a source of randomness, such as /dev/urandom. If your PHP
+OpenID library has trouble getting a satisfactory source of
+randomness, check your Apache and PHP configurations to be sure that
+the randomness source is in the list of allowed paths for the
+"open_basedir" option.
+
+* In some cases, bugs in the GMP math library will result in signature
+validation errors when using this library. Since GMP is preferred
+over bcmath (for performance), you will have to define
+Auth_OpenID_BUGGY_GMP in your application *before* importing any of
+the library code:
+
+ define('Auth_OpenID_BUGGY_GMP', true);
+
+* Not all PHP installations support SSL. You can find out if yours
+supports SSL by reading the "HTTP Fetching" section of the output of
+"examples/detect.php." If your installation does not support SSL,
+then https:// identity URLs and server URLs will not be supported by
+the library. An attempt to use such an identity URL will be
+equivalent to using an invalid OpenID. To enable SSL support,
+recompile PHP with OpenSSL support or install the appropriate OpenSSL
+module for your platform. If you are using CURL, CURL will need to be
+built with OpenSSL support.
+
+GETTING HELP
+============
+
+If you have any questions, recommendations, or patches, please tell
+us! Subscribe to our OpenID development discussion list at
+
+ http://openid.net/developers/dev-mailing-lists/
+
+DOCUMENTATION
+=============
+
+You can view the HTML library documentation in the doc/ directory.
+
+This package's documentation is in PhpDoc format. To generate the
+documentation, install phpdoc and run the admin/makedoc.sh script.
+Phpdoc lives at:
+
+ http://www.phpdoc.org/
+
+CONTRIBUTING
+============
+
+If you have a bugfix or feature you'd like to contribute, don't
+hesitate to send it to us. Post your patch to the development list at
+
+ http://openid.net/developers/dev-mailing-lists/
+
+For more detailed information on how to contribute, see
+
+ http://openidenabled.com/contribute/
+
+To run the test suite included with this package, install PHPUnit 1.x
+and run
+
+ php admin/texttest.php
+
+PHPUnit 1.x can be found at
+
+ http://pear.phpunit.de/get/
diff --git a/mod/openid_client/actions/openid_client/login.php b/mod/openid_client/actions/openid_client/login.php
new file mode 100644
index 000000000..2a6896a61
--- /dev/null
+++ b/mod/openid_client/actions/openid_client/login.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * OpenID client login action
+ */
+
+elgg_load_library('openid_consumer');
+
+$provider = get_input('openid_provider');
+$persistent = get_input('persistent', false);
+
+if ($provider == 'others') {
+ $provider = get_input('openid_url');
+}
+
+$consumer = new ElggOpenIDConsumer($store);
+$consumer->setURL($provider);
+$consumer->setReturnURL(elgg_get_site_url() . "mod/openid_client/return.php?persistent=$persistent");
+
+$html = $consumer->requestAuthentication();
+if ($html) {
+ echo $html;
+ exit;
+} else {
+ $flipped_providers = array_flip(elgg_get_config('openid_providers'));
+ if (isset($flipped_providers[$provider])) {
+ $provider_name = $flipped_providers[$provider];
+ } else {
+ $provider_name = $provider;
+ }
+ register_error(elgg_echo('openid_client:error:no_html', array($provider_name)));
+ forward();
+}
diff --git a/mod/openid_client/actions/openid_client/register.php b/mod/openid_client/actions/openid_client/register.php
new file mode 100644
index 000000000..f0ad2a5fd
--- /dev/null
+++ b/mod/openid_client/actions/openid_client/register.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Register OpenID user action
+ */
+
+elgg_set_context('openid_client');
+
+$username = get_input('username');
+$name = get_input('name');
+$email = get_input('email');
+$openid_identifier = get_input('openid_identifier');
+
+$password = generate_random_cleartext_password();
+
+try {
+ $guid = register_user($username, $password, $name, $email, false);
+} catch (RegistrationException $e) {
+ register_error($e->getMessage());
+ forward(REFERER);
+}
+$user = get_entity($guid);
+openid_client_set_subtype($user);
+
+$user->annotate('openid_identifier', $openid_identifier, ACCESS_PUBLIC);
+elgg_set_user_validation_status($guid, true, 'openid');
+
+if (!elgg_trigger_plugin_hook('register', 'user', array('user' => $user), true)) {
+ $user->delete();
+ register_error(elgg_echo('registerbad'));
+ forward(REFERER);
+}
+
+login($user);
+system_message(elgg_echo('openid_client:success:register'));
+forward();
diff --git a/mod/openid_client/classes/ElggOpenIDConsumer.php b/mod/openid_client/classes/ElggOpenIDConsumer.php
new file mode 100644
index 000000000..098201343
--- /dev/null
+++ b/mod/openid_client/classes/ElggOpenIDConsumer.php
@@ -0,0 +1,238 @@
+<?php
+/**
+ * Consumer for OpenID
+ */
+
+class ElggOpenIDConsumer {
+
+ protected $openIdUrl;
+ protected $returnURL;
+
+ protected $store;
+ protected $consumer;
+ protected $request;
+
+ /**
+ * Constructor
+ *
+ * @param Auth_OpenID_OpenIDStore $store Optional persistence store
+ */
+ public function __construct(Auth_OpenID_OpenIDStore $store = null) {
+ if ($store) {
+ $this->store = $store;
+ } else {
+ // use the default store
+ $this->store = new OpenID_ElggStore();
+ }
+ }
+
+ /**
+ * Set the OpenID username
+ *
+ * @param string $username
+ */
+ public function setURL($url) {
+ $this->openIdUrl = $url;
+ }
+
+ /**
+ * Set the return URL
+ *
+ * @param string $url The URL the OpenID provider returns the user to
+ */
+ public function setReturnURL($url) {
+ $this->returnURL = $url;
+ }
+
+ /**
+ * Send a request to the provider for authentication
+ *
+ * @return mixed HTMl form on success and false for failure
+ */
+ public function requestAuthentication() {
+
+ if (!$this->store) {
+ return false;
+ }
+
+ $this->consumer = new Auth_OpenID_Consumer($this->store);
+ if (!$this->consumer) {
+ return false;
+ }
+
+ $url = $this->openIdUrl;
+ if (!$url) {
+ return false;
+ }
+
+ // discovers the identity server
+ $this->request = $this->consumer->begin($url);
+ if (!$this->request) {
+ return false;
+ }
+
+ // request user information
+ if (!$this->addAttributeRequests()) {
+ return false;
+ }
+
+ // send browser for authentication
+ return $this->getForm();
+ }
+
+ /**
+ * Complete the OpenID authentication by parsing the response
+ *
+ * This returns an array of key value pairs about the user.
+ *
+ * @return array
+ */
+ public function completeAuthentication() {
+
+ if (!$this->store) {
+ return false;
+ }
+
+ $this->consumer = new Auth_OpenID_Consumer($this->store);
+ if (!$this->consumer) {
+ return false;
+ }
+
+ $response = $this->consumer->complete($this->returnURL);
+ switch ($response->status) {
+ case Auth_OpenID_SUCCESS:
+ $data = $this->getUserData($response);
+ break;
+ case Auth_OpenID_FAILURE:
+ case Auth_OpenID_CANCEL:
+ $data = array();
+ break;
+ }
+
+ return $data;
+ }
+
+ /**
+ * Add attribute requests to the OpenID authentication request
+ *
+ * @return bool
+ */
+ protected function addAttributeRequests() {
+
+ // Simple Registration
+ $required = array();
+ $optional = array('email', 'nickname', 'fullname', 'language');
+ $sregRequest = Auth_OpenID_SRegRequest::build($required, $optional);
+ if (!$sregRequest) {
+ return false;
+ }
+ $this->request->addExtension($sregRequest);
+
+ // Attribute Exchange
+ $axRequest = new Auth_OpenID_AX_FetchRequest();
+ $attributes[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/contact/email', 1, true, 'email');
+ $attributes[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/namePerson/first', 1, true, 'firstname');
+ $attributes[] = Auth_OpenID_AX_AttrInfo::make('http://axschema.org/namePerson/last', 1, true, 'lastname');
+ foreach ($attributes as $attribute) {
+ $axRequest->add($attribute);
+ }
+ $this->request->addExtension($axRequest);
+
+ return true;
+ }
+
+ /**
+ * Gets the form to send the user to the provider to authenticate
+ *
+ * This implements OpenID 2.0 by submitting a form through JavaScript against
+ * the provider. If JavaScript is not enabled, a plain html form with a
+ * continue button is displayed.
+ *
+ * This also supports OpenID 1.x but has not been tested as thoroughly.
+ *
+ * @return mixed
+ */
+ protected function getForm() {
+ if (!$this->request->shouldSendRedirect()) {
+ // OpenID 2.0
+ $html = $this->request->htmlMarkup(elgg_get_site_url(), $this->returnURL, false);
+ return $html;
+ } else {
+ // OpenID 1.x
+ $redirect_url = $this->request->redirectURL(elgg_get_site_url(), $this->returnURL);
+
+ if (Auth_OpenID::isFailure($redirect_url)) {
+ return false;
+ } else {
+ forward($redirect_url);
+ }
+ }
+ }
+
+ /**
+ * Get user data from the OpenID response
+ *
+ * @param Auth_OpenID_ConsumerResponse $response
+ * @return array
+ */
+ protected function getUserData($response) {
+ if (!$response) {
+ return array();
+ }
+
+ $sregResponse = Auth_OpenID_SRegResponse::fromSuccessResponse($response);
+ $sreg = $sregResponse->contents();
+
+ $axResponse = Auth_OpenID_AX_FetchResponse::fromSuccessResponse($response);
+ $ax = $axResponse->data;
+
+ $data = $this->extractUserData($sreg, $ax);
+ $data['openid_identifier'] = $response->getDisplayIdentifier();
+
+ return $data;
+ }
+
+ /**
+ * Extract user data from the extensions in the response
+ *
+ * @param array $sreg Simple Registration data
+ * @param array $ax Attribute Exchange data
+ * @return array
+ */
+ protected function extractUserData($sreg, $ax) {
+ $data = array();
+
+ // email
+ if (isset($sreg['email'])) {
+ $data['email'] = $sreg['email'];
+ }
+ if (isset($ax['http://axschema.org/contact/email'])) {
+ $data['email'] = $ax['http://axschema.org/contact/email'][0];
+ }
+
+ // display name
+ if (isset($sreg['fullname'])) {
+ $data['name'] = $sreg['fullname'];
+ }
+ if (isset($ax['http://axschema.org/namePerson/first'])) {
+ $data['name'] = $ax['http://axschema.org/namePerson/first'][0];
+ }
+ if (isset($ax['http://axschema.org/namePerson/last'])) {
+ $data['name'] .= ' ' . $ax['http://axschema.org/namePerson/last'][0];
+ $data['name'] = trim($data['name']);
+ }
+
+ // username
+ if (isset($sreg['nickname'])) {
+ $data['username'] = $sreg['nickname'];
+ }
+
+ // language
+ if (isset($sreg['language'])) {
+ $languages = get_installed_translations();
+ // @todo - find out format
+ }
+
+ return $data;
+ }
+}
diff --git a/mod/openid_client/graphics/openid_icon.png b/mod/openid_client/graphics/openid_icon.png
new file mode 100644
index 000000000..97d4714c5
--- /dev/null
+++ b/mod/openid_client/graphics/openid_icon.png
Binary files differ
diff --git a/mod/openid_client/languages/en.php b/mod/openid_client/languages/en.php
new file mode 100644
index 000000000..4af3bf06a
--- /dev/null
+++ b/mod/openid_client/languages/en.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * OpenID client English language file
+ */
+
+$english = array(
+
+ 'openid_client' => 'OpenID',
+ 'openid_client:login:header' => 'Log in with',
+ 'openid_client:login' => 'Login in with OpenID',
+ 'openid_client:others' => 'Others...',
+ 'openid_client:url' => 'OpenID URL',
+
+ 'openid_client:create' => 'Create an account',
+ 'openid_client:create:instructs' => 'Your account has been approved. We just need you to confirm or set the below information.',
+
+ 'openid_client:success:register' => 'Your account has been created.',
+ 'openid_client:error:bad_register' => 'Unable to create an account. Please contact a site administrator.',
+ 'openid_client:error:bad_response' => 'Bad response from the OpenID server',
+ 'openid_client:error:no_html' => 'An error occurred trying to contact %s',
+ 'openid_client:warning:username_not_available' => 'The username %s is not available. Please pick another.',
+ 'openid_client:warning:username_valid' => 'The username %s is not valid as this site. Please pick another.',
+ 'openid_client:warning:email_not_available' => 'The email address %s is not available. Please pick another.',
+
+ 'river:friend:user:openid' => "%s is now a friend with %s",
+);
+
+add_translation('en', $english);
diff --git a/mod/openid_client/lib/helpers.php b/mod/openid_client/lib/helpers.php
new file mode 100644
index 000000000..3fc101c42
--- /dev/null
+++ b/mod/openid_client/lib/helpers.php
@@ -0,0 +1,114 @@
+<?php
+/**
+ * Helper functions for the OpenID client plugin
+ */
+
+/**
+ * Serves a page to the new user to determine account values
+ *
+ * This should only be called after validating the OpenID response.
+ *
+ * @param array $data Key value pairs extracted from the response
+ * @return bool
+ */
+function openid_client_registration_page_handler(array $data) {
+
+ if (!is_array($data)) {
+ return false;
+ }
+
+ $title = elgg_echo('openid_client:create');
+
+ $vars = openid_client_prepare_registration_vars($data);
+ $content = elgg_view('openid_client/register', $vars);
+
+ $params = array(
+ 'title' => $title,
+ 'content' => $content,
+ );
+ $body = elgg_view_layout('one_column', $params);
+ echo elgg_view_page($title, $body);
+
+ return true;
+}
+
+/**
+ * Create the form vars for registration
+ *
+ * @param array $data
+ * @return array
+ */
+function openid_client_prepare_registration_vars(array $data) {
+ $vars = array();
+
+ $vars['openid_identifier'] = $data['openid_identifier'];
+
+ // username
+ if (isset($data['username'])) {
+ $vars['username'] = $data['username'];
+ } else if (isset($data['email'])) {
+ $vars['username'] = array_shift(explode('@', $data['email']));
+ } else {
+ $vars['username'] = null;
+ }
+
+ // is the username available
+ if ($vars['username']) {
+ $vars['is_username_available'] = openid_client_is_username_available($vars['username']);
+ }
+
+ // is the username valid
+ try {
+ $vars['is_username_valid'] = validate_username($vars['username']);
+ } catch (RegistrationException $e) {
+ $vars['is_username_valid'] = false;
+ }
+
+ // the rest
+ $vars['email'] = elgg_extract('email', $data);
+ $vars['name'] = elgg_extract('name', $data);
+
+ if ($vars['email']) {
+ $vars['is_email_available'] = openid_client_is_email_available($vars['email']);
+ }
+
+ return $vars;
+}
+
+/**
+ * Is this username available?
+ *
+ * @param string $username The username
+ * @return bool
+ */
+function openid_client_is_username_available($username) {
+ $db_prefix = elgg_get_config('dbprefix');
+ $username = sanitize_string($username);
+
+ $query = "SELECT count(*) AS total FROM {$db_prefix}users_entity WHERE username = '$username'";
+ $result = get_data_row($query);
+ if ($result->total == 0) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Is this email address available?
+ *
+ * @param string $email Email address
+ * @return bool
+ */
+function openid_client_is_email_available($email) {
+ $db_prefix = elgg_get_config('dbprefix');
+ $email = sanitize_string($email);
+
+ $query = "SELECT count(*) AS total FROM {$db_prefix}users_entity WHERE email = '$email'";
+ $result = get_data_row($query);
+ if ($result->total == 0) {
+ return true;
+ } else {
+ return false;
+ }
+}
diff --git a/mod/openid_client/manifest.xml b/mod/openid_client/manifest.xml
new file mode 100644
index 000000000..eba4674c7
--- /dev/null
+++ b/mod/openid_client/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>OpenID Client</name>
+ <author>Core developers</author>
+ <version>1.8.0</version>
+ <description>OpenID consumer for Elgg. Enabled users log in using their credentials from sites like Google and Yahoo.</description>
+ <category>user</category>
+ <website>http://www.elgg.org/</website>
+ <copyright>Cash Costello 2011</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <requires>
+ <type>plugin</type>
+ <name>openid_api</name>
+ </requires>
+</plugin_manifest>
diff --git a/mod/openid_client/return.php b/mod/openid_client/return.php
new file mode 100644
index 000000000..3aa728ea6
--- /dev/null
+++ b/mod/openid_client/return.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Callback for return_to url redirection.
+ *
+ * The identity server will redirect back to this handler with the results of
+ * the authentication attempt.
+ *
+ * Note: the Janrain OpenID library is incompatible with Elgg's routing so
+ * this script needs to be directly accessed.
+ */
+
+require_once dirname(dirname(dirname(__FILE__))).'/engine/start.php';
+
+elgg_load_library('openid_consumer');
+elgg_load_library('openid_client');
+
+$persistent = get_input('persistent', false);
+
+// get user data from the response
+$consumer = new ElggOpenIDConsumer($store);
+$url = elgg_get_site_url() . "mod/openid_client/return.php?persistent=$persistent";
+$consumer->setReturnURL($url);
+$data = $consumer->completeAuthentication();
+if (!$data || !$data['openid_identifier']) {
+ register_error(elgg_echo('openid_client:error:bad_response'));
+ forward();
+}
+
+// is there an account already associated with this openid
+$user = null;
+$users = elgg_get_entities_from_annotations(array(
+ 'type' => 'user',
+ 'annotation_name' => 'openid_identifier',
+ 'annotation_value' => $data['openid_identifier'],
+));
+if ($users) {
+ // there should only be one account
+ $user = $users[0];
+} else {
+ $email = elgg_extract('email', $data);
+ if ($email) {
+ $users = get_user_by_email($email);
+ if (count($users)) {
+ register_error(elgg_echo('openid_client:email_register'));
+ forward();
+
+ }
+ }
+}
+
+if ($user) {
+ // log in user and maybe update account (admin setting, user prompt?)
+ try {
+ login($user, $persistent);
+ } catch (LoginException $e) {
+ register_error($e->getMessage());
+ forward();
+ }
+
+ system_message(elgg_echo('loginok'));
+ forward();
+} else {
+ // register the new user
+ $result = openid_client_registration_page_handler($data);
+ if (!$result) {
+ register_error(elgg_echo('openid_client:error:bad_register'));
+ forward();
+ }
+}
diff --git a/mod/openid_client/start.php b/mod/openid_client/start.php
new file mode 100644
index 000000000..a21832230
--- /dev/null
+++ b/mod/openid_client/start.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Elgg OpenID client
+ *
+ * This is a rewrite of the OpenID client written by Kevin Jardine for
+ * Curverider Ltd for Elgg 1.0-1.7.
+ */
+
+elgg_register_event_handler('init', 'system', 'openid_client_init');
+
+/**
+ * OpenID client initialization
+ */
+function openid_client_init() {
+ elgg_extend_view('css/elgg', 'openid_client/css');
+ elgg_extend_view('js/elgg', 'openid_client/js');
+
+ elgg_register_plugin_hook_handler('register', 'menu:openid_login', 'openid_client_setup_menu');
+
+ $base = elgg_get_plugins_path() . 'openid_client/actions/openid_client';
+ elgg_register_action('openid_client/login', "$base/login.php", 'public');
+ elgg_register_action('openid_client/register', "$base/register.php", 'public');
+
+ $base = elgg_get_plugins_path() . 'openid_client/lib';
+ elgg_register_library('openid_client', "$base/helpers.php");
+
+ elgg_set_config('openid_providers', array(
+ 'N-1' => 'https://n-1.cc/mod/openid_server/server.php',
+ 'Ecoxarxes' => 'https://cooperativa.ecoxarxes.cat/mod/openid_server/server.php',
+ 'Anillosur' => 'https://anillosur.net/mod/openid_server/server.php',
+ 'Saravea' => 'https://saravea.net/mod/openid_server/server.php',
+ 'Enekenbat' => 'https://enekenbat.cc/mod/openid_server/server.php',
+ // ...
+ ));
+
+ // the return to page needs to be public
+ elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'openid_client_public');
+ elgg_register_event_handler('upgrade', 'system', 'openid_client_run_upgrades');
+
+}
+
+function openid_client_run_upgrades() {
+ if (include_once(elgg_get_plugins_path() . 'upgrade-tools/lib/upgrade_tools.php')) {
+ upgrade_module_run('openid_client');
+ }
+
+}
+
+/**
+ * Set the correct subtype for OpenID users
+ *
+ * @param ElggUser $user New user
+ * @return void
+ */
+function openid_client_set_subtype($user) {
+ $db_prefix = elgg_get_config('dbprefix');
+ $guid = (int)$user->getGUID();
+ $subtype_id = (int)add_subtype('user', 'openid');
+
+ $query = "UPDATE {$db_prefix}entities SET subtype = $subtype_id WHERE guid = $guid";
+ update_data($query);
+}
+
+/**
+ * Add pages to the list of public pages for walled garden needed for OpenID
+ * transaction
+ *
+ * @param string $hook Hook name
+ * @param string $type Hook type
+ * @param array $pages Array of public pages
+ * @return array
+ */
+function openid_client_public($hook, $type, $pages) {
+ $pages[] = 'action/openid_client/login';
+ $pages[] = 'mod/openid_client/return.php';
+ $pages[] = 'action/openid_client/register';
+ return $pages;
+}
diff --git a/mod/openid_client/upgrade.php b/mod/openid_client/upgrade.php
new file mode 100644
index 000000000..37248d484
--- /dev/null
+++ b/mod/openid_client/upgrade.php
@@ -0,0 +1,12 @@
+<?php
+require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+
+admin_gatekeeper();
+set_time_limit(0);
+
+echo "upgrade microthemes";
+$previous_access = elgg_set_ignore_access(true);
+openid_client_run_upgrades();
+elgg_set_ignore_access($previous_access);
+
+echo "DONE";
diff --git a/mod/openid_client/upgrades/2012100501.php b/mod/openid_client/upgrades/2012100501.php
new file mode 100644
index 000000000..789a73e0a
--- /dev/null
+++ b/mod/openid_client/upgrades/2012100501.php
@@ -0,0 +1,53 @@
+<?php
+
+global $MIGRATED;
+
+$local_version = (int)elgg_get_plugin_setting('version', 'openid_client');
+if (2012022501 <= $local_version) {
+ error_log("Openid client requires no upgrade");
+ // no upgrade required
+ return;
+}
+
+/**
+ * Save previous author id
+ */
+function openid_client_user_2012100501($user) {
+ $MIGRATED += 1;
+ if ($MIGRATED % 100 == 0) {
+ error_log(" * openid user $user->guid");
+ }
+
+ if ($user->alias) {
+ $alias = $user->alias;
+ if (strpos($alias, 'pg/profile') !== FALSE) {
+ $alias = str_replace('pg/profile', 'profile', $alias);
+ }
+ error_log($alias);
+ $user->annotate('openid_identifier', $alias, ACCESS_PUBLIC);
+ }
+ return true;
+}
+
+
+
+/*
+ * Run upgrade. First users, then pads
+ */
+// users
+$options = array('type' => 'user', 'limit' => 0);
+
+$MIGRATED = 0;
+
+$previous_access = elgg_set_ignore_access(true);
+$batch = new ElggBatch('elgg_get_entities', $options, "openid_client_user_2012100501", 100);
+elgg_set_ignore_access($previous_access);
+
+if ($batch->callbackResult) {
+ error_log("Elgg openid users upgrade (201210050) succeeded");
+ elgg_set_plugin_setting('version', 2012022501, 'openid_client');
+} else {
+ error_log("Elgg openid users upgrade (201210050) failed");
+}
+
+
diff --git a/mod/openid_client/views/default/core/account/login_box.php b/mod/openid_client/views/default/core/account/login_box.php
new file mode 100644
index 000000000..51b13398b
--- /dev/null
+++ b/mod/openid_client/views/default/core/account/login_box.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg login box
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['module'] The module name. Default: aside
+ * @override views/default/core/account/login_box.php
+ */
+
+$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"));
+$body .= elgg_view_form('openid_client/login', array('class' => 'elgg-form-login hidden'), array());
+$body .= elgg_view('openid_client/icon');
+
+echo elgg_view_module($module, $title, $body);
diff --git a/mod/openid_client/views/default/core/account/login_dropdown.php b/mod/openid_client/views/default/core/account/login_dropdown.php
new file mode 100644
index 000000000..c3add2924
--- /dev/null
+++ b/mod/openid_client/views/default/core/account/login_dropdown.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Elgg drop-down login form
+ *
+ * @override views/default/core/account/login_dropdown.php
+ */
+
+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));
+$body .= elgg_view_form('openid_client/login', array('class' => 'elgg-form-login hidden'), array());
+$body .= elgg_view('openid_client/icon');
+?>
+<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/mod/openid_client/views/default/forms/openid_client/login.php b/mod/openid_client/views/default/forms/openid_client/login.php
new file mode 100644
index 000000000..1f440dc49
--- /dev/null
+++ b/mod/openid_client/views/default/forms/openid_client/login.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * OpenID login if username or full url required
+ */
+
+$options_values = array_flip(elgg_get_config('openid_providers'));
+$options_values['others'] = elgg_echo('openid_client:others');
+
+?>
+<div>
+<label><?php echo elgg_echo('openid_client:login:header'); ?></label>
+<br />
+<?php
+echo elgg_view('input/dropdown', array(
+ 'name' => 'openid_provider',
+ 'options_values' => $options_values,
+));
+?>
+</div>
+
+<div class="openid-client-url hidden">
+<label><?php echo elgg_echo('openid_client:url'); ?> </label>
+
+<?php
+echo elgg_view('input/text', array('name' => 'openid_url', 'class' => 'mbs'));
+?>
+
+</div>
+
+<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'));
+ }
+ ?>
+</div> \ No newline at end of file
diff --git a/mod/openid_client/views/default/forms/openid_client/register.php b/mod/openid_client/views/default/forms/openid_client/register.php
new file mode 100644
index 000000000..6044f0f0b
--- /dev/null
+++ b/mod/openid_client/views/default/forms/openid_client/register.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * OpenID register form body
+ *
+ * @uses $vars['openid_identifier']
+ * @uses $vars['username']
+ * @uses $vars['is_username_available']
+ * @uses $vars['is_username_valid']
+ * @uses $vars['email']
+ * @uses $vars['is_email_available']
+ * @uses $vars['name']
+ */
+
+$username_label = elgg_echo('username');
+$username_warning = '';
+if (!elgg_extract('is_username_available', $vars, true)) {
+ $username_warning = elgg_echo('openid_client:warning:username_not_available', array($vars['username']));
+ $username_warning = "($username_warning)";
+} else if (!elgg_extract('is_username_valid', $vars, true)) {
+ $username_warning = elgg_echo('openid_client:warning:username_valid', array($vars['username']));
+ $username_warning = "($username_warning)";
+}
+$username_input = elgg_view('input/text', array(
+ 'name' => 'username',
+ 'value' => $vars['username'],
+));
+
+$name_label = elgg_echo('name');
+$name_input = elgg_view('input/text', array(
+ 'name' => 'name',
+ 'value' => $vars['name'],
+));
+
+$email_label = elgg_echo('email');
+$email_available = elgg_extract('is_email_available', $vars, true);
+$email_warning = '';
+if (!$email_available) {
+ $email_warning = elgg_echo('openid_client:warning:email_not_available', array($vars['email']));
+ $email_warning = "($email_warning)";
+}
+$email_input = elgg_view('input/email', array(
+ 'name' => 'email',
+ 'value' => $vars['email'],
+ 'readonly' => $email_available,
+));
+
+$openid_input = elgg_view('input/hidden', array(
+ 'name' => 'openid_identifier',
+ 'value' => $vars['openid_identifier'],
+));
+$button = elgg_view('input/submit', array('value' => elgg_echo('save')));
+
+echo <<<HTML
+<div>
+ <label>$username_label</label> $username_warning
+ $username_input
+</div>
+<div>
+ <label>$name_label</label>
+ $name_input
+</div>
+<div>
+ <label>$email_label</label> $email_warning
+ $email_input
+</div>
+<div class="elgg-foot">
+ $openid_input
+ $button
+</div>
+
+HTML;
diff --git a/mod/openid_client/views/default/openid_client/css.php b/mod/openid_client/views/default/openid_client/css.php
new file mode 100644
index 000000000..d01fc6b5a
--- /dev/null
+++ b/mod/openid_client/views/default/openid_client/css.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * OpenID client CSS
+ */
+?>
+
+.elgg-icon-openid {
+ background-image: url(<?php echo elgg_get_site_url(); ?>mod/openid_client/graphics/openid_icon.png);
+}
+
+.elgg-form-login {
+ margin-bottom: 10px;
+} \ No newline at end of file
diff --git a/mod/openid_client/views/default/openid_client/icon.php b/mod/openid_client/views/default/openid_client/icon.php
new file mode 100644
index 000000000..3a9a9d981
--- /dev/null
+++ b/mod/openid_client/views/default/openid_client/icon.php
@@ -0,0 +1,8 @@
+<?php
+
+echo elgg_view('output/url', array(
+ 'text' => elgg_view_icon('openid') . elgg_echo('openid_client:login'),
+ 'href' => '',
+ 'title' => elgg_echo('openid_client'),
+ 'class' => "openid-login-icon",
+)); \ No newline at end of file
diff --git a/mod/openid_client/views/default/openid_client/js.php b/mod/openid_client/views/default/openid_client/js.php
new file mode 100644
index 000000000..171215593
--- /dev/null
+++ b/mod/openid_client/views/default/openid_client/js.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * OpenID JavaScript
+ */
+
+?>
+
+// OpenID toggle
+elgg.register_hook_handler('init', 'system', function() {
+ $('.openid-login-icon').click(function(e) {
+ var openid_box = $(this).prev('.elgg-form-openid-client-login');
+ var shown = openid_box.is(':visible') ? openid_box : openid_box.prev();
+ var hidden = !openid_box.is(':visible') ? openid_box : openid_box.prev();
+ shown.fadeOut(function() {
+ hidden.fadeIn();
+ });
+ e.preventDefault();
+ });
+ $(".elgg-form-openid-client-login [name='openid_provider']").change(function(event) {
+ if (this.value == 'others') {
+ $(".openid-client-url").slideDown().find('input').focus();
+ } else {
+ $(".openid-client-url").slideUp();
+ }
+ });
+});
diff --git a/mod/openid_client/views/default/openid_client/register.php b/mod/openid_client/views/default/openid_client/register.php
new file mode 100644
index 000000000..be448ef54
--- /dev/null
+++ b/mod/openid_client/views/default/openid_client/register.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Registration content view for OpenID client
+ *
+ */
+
+echo '<p>';
+echo elgg_echo('openid_client:create:instructs');
+echo '<p>';
+
+echo elgg_view_form('openid_client/register', array(), $vars);
diff --git a/mod/openid_server/Crypt/RSA.php b/mod/openid_server/Crypt/RSA.php
new file mode 100644
index 000000000..16dfa54d4
--- /dev/null
+++ b/mod/openid_server/Crypt/RSA.php
@@ -0,0 +1,524 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version 1.2.0b
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * RSA error handling facilities
+ */
+require_once 'Crypt/RSA/ErrorHandler.php';
+
+/**
+ * loader for math wrappers
+ */
+require_once 'Crypt/RSA/MathLoader.php';
+
+/**
+ * helper class for mange single key
+ */
+require_once 'Crypt/RSA/Key.php';
+
+/**
+ * helper class for manage key pair
+ */
+require_once 'Crypt/RSA/KeyPair.php';
+
+/**
+ * Crypt_RSA class, derived from Crypt_RSA_ErrorHandler
+ *
+ * Provides the following functions:
+ * - setParams($params) - sets parameters of current object
+ * - encrypt($plain_data, $key = null) - encrypts data
+ * - decrypt($enc_data, $key = null) - decrypts data
+ * - createSign($doc, $private_key = null) - signs document by private key
+ * - validateSign($doc, $signature, $public_key = null) - validates signature of document
+ *
+ * Example usage:
+ * // creating an error handler
+ * $error_handler = create_function('$obj', 'echo "error: ", $obj->getMessage(), "\n"');
+ *
+ * // 1024-bit key pair generation
+ * $key_pair = new Crypt_RSA_KeyPair(1024);
+ *
+ * // check consistence of Crypt_RSA_KeyPair object
+ * $error_handler($key_pair);
+ *
+ * // creating Crypt_RSA object
+ * $rsa_obj = new Crypt_RSA;
+ *
+ * // check consistence of Crypt_RSA object
+ * $error_handler($rsa_obj);
+ *
+ * // set error handler on Crypt_RSA object ( see Crypt/RSA/ErrorHandler.php for details )
+ * $rsa_obj->setErrorHandler($error_handler);
+ *
+ * // encryption (usually using public key)
+ * $enc_data = $rsa_obj->encrypt($plain_data, $key_pair->getPublicKey());
+ *
+ * // decryption (usually using private key)
+ * $plain_data = $rsa_obj->decrypt($enc_data, $key_pair->getPrivateKey());
+ *
+ * // signing
+ * $signature = $rsa_obj->createSign($document, $key_pair->getPrivateKey());
+ *
+ * // signature checking
+ * $is_valid = $rsa_obj->validateSign($document, $signature, $key_pair->getPublicKey());
+ *
+ * // signing many documents by one private key
+ * $rsa_obj = new Crypt_RSA(array('private_key' => $key_pair->getPrivateKey()));
+ * // check consistence of Crypt_RSA object
+ * $error_handler($rsa_obj);
+ * // set error handler ( see Crypt/RSA/ErrorHandler.php for details )
+ * $rsa_obj->setErrorHandler($error_handler);
+ * // sign many documents
+ * $sign_1 = $rsa_obj->sign($doc_1);
+ * $sign_2 = $rsa_obj->sign($doc_2);
+ * //...
+ * $sign_n = $rsa_obj->sign($doc_n);
+ *
+ * // changing default hash function, which is used for sign
+ * // creating/validation
+ * $rsa_obj->setParams(array('hash_func' => 'md5'));
+ *
+ * // using factory() method instead of constructor (it returns PEAR_Error object on failure)
+ * $rsa_obj = &Crypt_RSA::factory();
+ * if (PEAR::isError($rsa_obj)) {
+ * echo "error: ", $rsa_obj->getMessage(), "\n";
+ * }
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @version @package_version@
+ * @access public
+ */
+class Crypt_RSA extends Crypt_RSA_ErrorHandler
+{
+ /**
+ * Reference to math wrapper, which is used to
+ * manipulate large integers in RSA algorithm.
+ *
+ * @var object of Crypt_RSA_Math_* class
+ * @access private
+ */
+ var $_math_obj;
+
+ /**
+ * key for encryption, which is used by encrypt() method
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_enc_key;
+
+ /**
+ * key for decryption, which is used by decrypt() method
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_dec_key;
+
+ /**
+ * public key, which is used by validateSign() method
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_public_key;
+
+ /**
+ * private key, which is used by createSign() method
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_private_key;
+
+ /**
+ * name of hash function, which is used by validateSign()
+ * and createSign() methods. Default hash function is SHA-1
+ *
+ * @var string
+ * @access private
+ */
+ var $_hash_func = 'sha1';
+
+ /**
+ * Crypt_RSA constructor.
+ *
+ * @param array $params
+ * Optional associative array of parameters, such as:
+ * enc_key, dec_key, private_key, public_key, hash_func.
+ * See setParams() method for more detailed description of
+ * these parameters.
+ * @param string $wrapper_name
+ * Name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ * @param string $error_handler name of error handler function
+ *
+ * @access public
+ */
+ function Crypt_RSA($params = null, $wrapper_name = 'default', $error_handler = '')
+ {
+ // set error handler
+ $this->setErrorHandler($error_handler);
+ // try to load math wrapper
+ $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name);
+ if ($this->isError($obj)) {
+ // error during loading of math wrapper
+ // Crypt_RSA object is partially constructed.
+ $this->pushError($obj);
+ return;
+ }
+ $this->_math_obj = &$obj;
+
+ if (!is_null($params)) {
+ if (!$this->setParams($params)) {
+ // error in Crypt_RSA::setParams() function
+ return;
+ }
+ }
+ }
+
+ /**
+ * Crypt_RSA factory.
+ *
+ * @param array $params
+ * Optional associative array of parameters, such as:
+ * enc_key, dec_key, private_key, public_key, hash_func.
+ * See setParams() method for more detailed description of
+ * these parameters.
+ * @param string $wrapper_name
+ * Name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ * @param string $error_handler name of error handler function
+ *
+ * @return object new Crypt_RSA object on success or PEAR_Error object on failure
+ * @access public
+ */
+ function &factory($params = null, $wrapper_name = 'default', $error_handler = '')
+ {
+ $obj = &new Crypt_RSA($params, $wrapper_name, $error_handler);
+ if ($obj->isError()) {
+ // error during creating a new object. Retrurn PEAR_Error object
+ return $obj->getLastError();
+ }
+ // object created successfully. Return it
+ return $obj;
+ }
+
+ /**
+ * Accepts any combination of available parameters as associative array:
+ * enc_key - encryption key for encrypt() method
+ * dec_key - decryption key for decrypt() method
+ * public_key - key for validateSign() method
+ * private_key - key for createSign() method
+ * hash_func - name of hash function, which will be used to create and validate sign
+ *
+ * @param array $params
+ * associative array of permitted parameters (see above)
+ *
+ * @return bool true on success or false on error
+ * @access public
+ */
+ function setParams($params)
+ {
+ if (!is_array($params)) {
+ $this->pushError('parameters must be passed to function as associative array', CRYPT_RSA_ERROR_WRONG_PARAMS);
+ return false;
+ }
+
+ if (isset($params['enc_key'])) {
+ if (Crypt_RSA_Key::isValid($params['enc_key'])) {
+ $this->_enc_key = $params['enc_key'];
+ }
+ else {
+ $this->pushError('wrong encryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+ }
+ if (isset($params['dec_key'])) {
+ if (Crypt_RSA_Key::isValid($params['dec_key'])) {
+ $this->_dec_key = $params['dec_key'];
+ }
+ else {
+ $this->pushError('wrong decryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+ }
+ if (isset($params['private_key'])) {
+ if (Crypt_RSA_Key::isValid($params['private_key'])) {
+ if ($params['private_key']->getKeyType() != 'private') {
+ $this->pushError('private key must have "private" attribute', CRYPT_RSA_ERROR_WRONG_KEY_TYPE);
+ return false;
+ }
+ $this->_private_key = $params['private_key'];
+ }
+ else {
+ $this->pushError('wrong private key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+ }
+ if (isset($params['public_key'])) {
+ if (Crypt_RSA_Key::isValid($params['public_key'])) {
+ if ($params['public_key']->getKeyType() != 'public') {
+ $this->pushError('public key must have "public" attribute', CRYPT_RSA_ERROR_WRONG_KEY_TYPE);
+ return false;
+ }
+ $this->_public_key = $params['public_key'];
+ }
+ else {
+ $this->pushError('wrong public key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+ }
+ if (isset($params['hash_func'])) {
+ if (!function_exists($params['hash_func'])) {
+ $this->pushError('cannot find hash function with name [' . $params['hash_func'] . ']', CRYPT_RSA_ERROR_WRONG_HASH_FUNC);
+ return false;
+ }
+ $this->_hash_func = $params['hash_func'];
+ }
+ return true; // all ok
+ }
+
+ /**
+ * Ecnrypts $plain_data by the key $this->_enc_key or $key.
+ *
+ * @param string $plain_data data, which must be encrypted
+ * @param object $key encryption key (object of Crypt_RSA_Key class)
+ * @return mixed
+ * encrypted data as string on success or false on error
+ *
+ * @access public
+ */
+ function encrypt($plain_data, $key = null)
+ {
+ $enc_data = $this->encryptBinary($plain_data, $key);
+ if ($enc_data !== false) {
+ return base64_encode($enc_data);
+ }
+ // error during encripting data
+ return false;
+ }
+
+ /**
+ * Ecnrypts $plain_data by the key $this->_enc_key or $key.
+ *
+ * @param string $plain_data data, which must be encrypted
+ * @param object $key encryption key (object of Crypt_RSA_Key class)
+ * @return mixed
+ * encrypted data as binary string on success or false on error
+ *
+ * @access public
+ */
+ function encryptBinary($plain_data, $key = null)
+ {
+ if (is_null($key)) {
+ // use current encryption key
+ $key = $this->_enc_key;
+ }
+ else if (!Crypt_RSA_Key::isValid($key)) {
+ $this->pushError('invalid encryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+
+ // append tail \x01 to plain data. It needs for correctly decrypting of data
+ $plain_data .= "\x01";
+
+ $plain_data = $this->_math_obj->bin2int($plain_data);
+ $exp = $this->_math_obj->bin2int($key->getExponent());
+ $modulus = $this->_math_obj->bin2int($key->getModulus());
+
+ // divide plain data into chunks
+ $data_len = $this->_math_obj->bitLen($plain_data);
+ $chunk_len = $key->getKeyLength() - 1;
+ $block_len = (int) ceil($chunk_len / 8);
+ $curr_pos = 0;
+ $enc_data = '';
+ while ($curr_pos < $data_len) {
+ $tmp = $this->_math_obj->subint($plain_data, $curr_pos, $chunk_len);
+ $enc_data .= str_pad(
+ $this->_math_obj->int2bin($this->_math_obj->powmod($tmp, $exp, $modulus)),
+ $block_len,
+ "\0"
+ );
+ $curr_pos += $chunk_len;
+ }
+ return $enc_data;
+ }
+
+ /**
+ * Decrypts $enc_data by the key $this->_dec_key or $key.
+ *
+ * @param string $enc_data encrypted data as string
+ * @param object $key decryption key (object of RSA_Crypt_Key class)
+ * @return mixed
+ * decrypted data as string on success or false on error
+ *
+ * @access public
+ */
+ function decrypt($enc_data, $key = null)
+ {
+ $enc_data = base64_decode($enc_data);
+ return $this->decryptBinary($enc_data, $key);
+ }
+
+ /**
+ * Decrypts $enc_data by the key $this->_dec_key or $key.
+ *
+ * @param string $enc_data encrypted data as binary string
+ * @param object $key decryption key (object of RSA_Crypt_Key class)
+ * @return mixed
+ * decrypted data as string on success or false on error
+ *
+ * @access public
+ */
+ function decryptBinary($enc_data, $key = null)
+ {
+ if (is_null($key)) {
+ // use current decryption key
+ $key = $this->_dec_key;
+ }
+ else if (!Crypt_RSA_Key::isValid($key)) {
+ $this->pushError('invalid decryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+
+ $exp = $this->_math_obj->bin2int($key->getExponent());
+ $modulus = $this->_math_obj->bin2int($key->getModulus());
+
+ $data_len = strlen($enc_data);
+ $chunk_len = $key->getKeyLength() - 1;
+ $block_len = (int) ceil($chunk_len / 8);
+ $curr_pos = 0;
+ $bit_pos = 0;
+ $plain_data = $this->_math_obj->bin2int("\0");
+ while ($curr_pos < $data_len) {
+ $tmp = $this->_math_obj->bin2int(substr($enc_data, $curr_pos, $block_len));
+ $tmp = $this->_math_obj->powmod($tmp, $exp, $modulus);
+ $plain_data = $this->_math_obj->bitOr($plain_data, $tmp, $bit_pos);
+ $bit_pos += $chunk_len;
+ $curr_pos += $block_len;
+ }
+ $result = $this->_math_obj->int2bin($plain_data);
+
+ // delete tail, containing of \x01
+ $tail = ord($result{strlen($result) - 1});
+ if ($tail != 1) {
+ $this->pushError("Error tail of decrypted text = {$tail}. Expected 1", CRYPT_RSA_ERROR_WRONG_TAIL);
+ return false;
+ }
+ return substr($result, 0, -1);
+ }
+
+ /**
+ * Creates sign for document $document, using $this->_private_key or $private_key
+ * as private key and $this->_hash_func or $hash_func as hash function.
+ *
+ * @param string $document document, which must be signed
+ * @param object $private_key private key (object of Crypt_RSA_Key type)
+ * @param string $hash_func name of hash function, which will be used during signing
+ * @return mixed
+ * signature of $document as string on success or false on error
+ *
+ * @access public
+ */
+ function createSign($document, $private_key = null, $hash_func = null)
+ {
+ // check private key
+ if (is_null($private_key)) {
+ $private_key = $this->_private_key;
+ }
+ else if (!Crypt_RSA_Key::isValid($private_key)) {
+ $this->pushError('invalid private key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return false;
+ }
+ if ($private_key->getKeyType() != 'private') {
+ $this->pushError('signing key must be private', CRYPT_RSA_ERROR_NEED_PRV_KEY);
+ return false;
+ }
+
+ // check hash_func
+ if (is_null($hash_func)) {
+ $hash_func = $this->_hash_func;
+ }
+ if (!function_exists($hash_func)) {
+ $this->pushError("cannot find hash function with name [$hash_func]", CRYPT_RSA_ERROR_WRONG_HASH_FUNC);
+ return false;
+ }
+
+ return $this->encrypt($hash_func($document), $private_key);
+ }
+
+ /**
+ * Validates $signature for document $document with public key $this->_public_key
+ * or $public_key and hash function $this->_hash_func or $hash_func.
+ *
+ * @param string $document document, signature of which must be validated
+ * @param string $signature signature, which must be validated
+ * @param object $public_key public key (object of Crypt_RSA_Key class)
+ * @param string $hash_func hash function, which will be used during validating signature
+ * @return mixed
+ * true, if signature of document is valid
+ * false, if signature of document is invalid
+ * null on error
+ *
+ * @access public
+ */
+ function validateSign($document, $signature, $public_key = null, $hash_func = null)
+ {
+ // check public key
+ if (is_null($public_key)) {
+ $public_key = $this->_public_key;
+ }
+ else if (!Crypt_RSA_Key::isValid($public_key)) {
+ $this->pushError('invalid public key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+ return null;
+ }
+ if ($public_key->getKeyType() != 'public') {
+ $this->pushError('validating key must be public', CRYPT_RSA_ERROR_NEED_PUB_KEY);
+ return null;
+ }
+
+ // check hash_func
+ if (is_null($hash_func)) {
+ $hash_func = $this->_hash_func;
+ }
+ if (!function_exists($hash_func)) {
+ $this->pushError("cannot find hash function with name [$hash_func]", CRYPT_RSA_ERROR_WRONG_HASH_FUNC);
+ return null;
+ }
+
+ return $hash_func($document) == $this->decrypt($signature, $public_key);
+ }
+}
+
+?> \ No newline at end of file
diff --git a/mod/openid_server/Crypt/RSA/ErrorHandler.php b/mod/openid_server/Crypt/RSA/ErrorHandler.php
new file mode 100644
index 000000000..8f39741e0
--- /dev/null
+++ b/mod/openid_server/Crypt/RSA/ErrorHandler.php
@@ -0,0 +1,234 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version CVS: $Id: ErrorHandler.php,v 1.4 2009/01/05 08:30:29 clockwerx Exp $
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * uses PEAR's error handling
+ */
+require_once 'PEAR.php';
+
+/**
+ * cannot load required extension for math wrapper
+ */
+define('CRYPT_RSA_ERROR_NO_EXT', 1);
+
+/**
+ * cannot load any math wrappers.
+ * Possible reasons:
+ * - there is no any wrappers (they must exist in Crypt/RSA/Math folder )
+ * - all available wrappers are incorrect (read docs/Crypt_RSA/docs/math_wrappers.txt )
+ * - cannot load any extension, required by available wrappers
+ */
+define('CRYPT_RSA_ERROR_NO_WRAPPERS', 2);
+
+/**
+ * cannot find file, containing requested math wrapper
+ */
+define('CRYPT_RSA_ERROR_NO_FILE', 3);
+
+/**
+ * cannot find math wrapper class in the math wrapper file
+ */
+define('CRYPT_RSA_ERROR_NO_CLASS', 4);
+
+/**
+ * invalid key type passed to function (it must be 'public' or 'private')
+ */
+define('CRYPT_RSA_ERROR_WRONG_KEY_TYPE', 5);
+
+/**
+ * key modulus must be greater than key exponent
+ */
+define('CRYPT_RSA_ERROR_EXP_GE_MOD', 6);
+
+/**
+ * missing $key_len parameter in Crypt_RSA_KeyPair::generate($key_len) function
+ */
+define('CRYPT_RSA_ERROR_MISSING_KEY_LEN', 7);
+
+/**
+ * wrong key object passed to function (it must be an object of Crypt_RSA_Key class)
+ */
+define('CRYPT_RSA_ERROR_WRONG_KEY', 8);
+
+/**
+ * wrong name of hash function passed to Crypt_RSA::setParams() function
+ */
+define('CRYPT_RSA_ERROR_WRONG_HASH_FUNC', 9);
+
+/**
+ * key, used for signing, must be private
+ */
+define('CRYPT_RSA_ERROR_NEED_PRV_KEY', 10);
+
+/**
+ * key, used for sign validating, must be public
+ */
+define('CRYPT_RSA_ERROR_NEED_PUB_KEY', 11);
+
+/**
+ * parameters must be passed to function as associative array
+ */
+define('CRYPT_RSA_ERROR_WRONG_PARAMS', 12);
+
+/**
+ * error tail of decrypted text. Maybe, wrong decryption key?
+ */
+define('CRYPT_RSA_ERROR_WRONG_TAIL', 13);
+
+/**
+ * Crypt_RSA_ErrorHandler class.
+ *
+ * This class is used as base for Crypt_RSA, Crypt_RSA_Key
+ * and Crypt_RSA_KeyPair classes.
+ *
+ * It provides following functions:
+ * - isError() - returns true, if list contains errors, else returns false
+ * - getErrorList() - returns error list
+ * - getLastError() - returns last error from error list or false, if list is empty
+ * - pushError($errstr) - pushes $errstr into the error list
+ * - setErrorHandler($new_error_handler) - sets error handler function
+ * - getErrorHandler() - returns name of error handler function
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @access public
+ */
+class Crypt_RSA_ErrorHandler
+{
+ /**
+ * array of error objects, pushed by $this->pushError()
+ *
+ * @var array
+ * @access private
+ */
+ var $_errors = array();
+
+ /**
+ * name of error handler - function, which calls on $this->pushError() call
+ *
+ * @var string
+ * @access private
+ */
+ var $_error_handler = '';
+
+ /**
+ * Returns true if list of errors is not empty, else returns false
+ *
+ * @param mixed $err Check if the object is an error
+ *
+ * @return bool true, if list of errors is not empty or $err is PEAR_Error object, else false
+ * @access public
+ */
+ function isError($err = null)
+ {
+ return is_null($err) ? (sizeof($this->_errors) > 0) : PEAR::isError($err);
+ }
+
+ /**
+ * Returns list of all errors, pushed to error list by $this->pushError()
+ *
+ * @return array list of errors (usually it contains objects of PEAR_Error class)
+ * @access public
+ */
+ function getErrorList()
+ {
+ return $this->_errors;
+ }
+
+ /**
+ * Returns last error from errors list or false, if list is empty
+ *
+ * @return mixed
+ * last error from errors list (usually it is PEAR_Error object)
+ * or false, if list is empty.
+ *
+ * @access public
+ */
+ function getLastError()
+ {
+ $len = sizeof($this->_errors);
+ return $len ? $this->_errors[$len - 1] : false;
+ }
+
+ /**
+ * pushes error object $error to the error list
+ *
+ * @param string $errstr error string
+ * @param int $errno error number
+ *
+ * @return bool true on success, false on error
+ * @access public
+ */
+ function pushError($errstr, $errno = 0)
+ {
+ $this->_errors[] = PEAR::raiseError($errstr, $errno);
+
+ if ($this->_error_handler != '') {
+ // call user defined error handler
+ $func = $this->_error_handler;
+ $func($this);
+ }
+ return true;
+ }
+
+ /**
+ * sets error handler to function with name $func_name.
+ * Function $func_name must accept one parameter - current
+ * object, which triggered error.
+ *
+ * @param string $func_name name of error handler function
+ *
+ * @return bool true on success, false on error
+ * @access public
+ */
+ function setErrorHandler($func_name = '')
+ {
+ if ($func_name == '') {
+ $this->_error_handler = '';
+ }
+ if (!function_exists($func_name)) {
+ return false;
+ }
+ $this->_error_handler = $func_name;
+ return true;
+ }
+
+ /**
+ * returns name of current error handler, or null if there is no error handler
+ *
+ * @return mixed error handler name as string or null, if there is no error handler
+ * @access public
+ */
+ function getErrorHandler()
+ {
+ return $this->_error_handler;
+ }
+}
+
+?>
diff --git a/mod/openid_server/Crypt/RSA/Key.php b/mod/openid_server/Crypt/RSA/Key.php
new file mode 100644
index 000000000..72a71e2d0
--- /dev/null
+++ b/mod/openid_server/Crypt/RSA/Key.php
@@ -0,0 +1,314 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version CVS: $Id: Key.php,v 1.6 2009/01/05 08:30:29 clockwerx Exp $
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * RSA error handling facilities
+ */
+require_once 'Crypt/RSA/ErrorHandler.php';
+
+/**
+ * loader for RSA math wrappers
+ */
+require_once 'Crypt/RSA/MathLoader.php';
+
+/**
+ * Crypt_RSA_Key class, derived from Crypt_RSA_ErrorHandler
+ *
+ * Provides the following functions:
+ * - getKeyLength() - returns bit key length
+ * - getExponent() - returns key exponent as binary string
+ * - getModulus() - returns key modulus as binary string
+ * - getKeyType() - returns type of the key (public or private)
+ * - toString() - returns serialized key as string
+ * - fromString($key_str) - static function; returns key, unserialized from string
+ * - isValid($key) - static function for validating of $key
+ *
+ * Example usage:
+ * // create new 1024-bit key pair
+ * $key_pair = new Crypt_RSA_KeyPair(1024);
+ *
+ * // get public key (its class is Crypt_RSA_Key)
+ * $key = $key_pair->getPublicKey();
+ *
+ * // get key length
+ * $len = $key->getKeyLength();
+ *
+ * // get modulus as string
+ * $modulus = $key->getModulus();
+ *
+ * // get exponent as string
+ * $exponent = $key->getExponent();
+ *
+ * // get string represenation of key (use it instead of serialization of Crypt_RSA_Key object)
+ * $key_in_str = $key->toString();
+ *
+ * // restore key object from string using 'BigInt' math wrapper
+ * $key = Crypt_RSA_Key::fromString($key_in_str, 'BigInt');
+ *
+ * // error check
+ * if ($key->isError()) {
+ * echo "error while unserializing key object:\n";
+ * $erorr = $key->getLastError();
+ * echo $error->getMessage(), "\n";
+ * }
+ *
+ * // validate key
+ * if (Crypt_RSA_Key::isValid($key)) echo 'valid key';
+ * else echo 'invalid key';
+ *
+ * // using factory() method instead of constructor (it returns PEAR_Error object on failure)
+ * $rsa_obj = &Crypt_RSA_Key::factory($modulus, $exp, $key_type);
+ * if (PEAR::isError($rsa_obj)) {
+ * echo "error: ", $rsa_obj->getMessage(), "\n";
+ * }
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @access public
+ */
+class Crypt_RSA_Key extends Crypt_RSA_ErrorHandler
+{
+ /**
+ * Reference to math wrapper object, which is used to
+ * manipulate large integers in RSA algorithm.
+ *
+ * @var object of Crypt_RSA_Math_* class
+ * @access private
+ */
+ var $_math_obj;
+
+ /**
+ * shared modulus
+ *
+ * @var string
+ * @access private
+ */
+ var $_modulus;
+
+ /**
+ * exponent
+ *
+ * @var string
+ * @access private
+ */
+ var $_exp;
+
+ /**
+ * key type (private or public)
+ *
+ * @var string
+ * @access private
+ */
+ var $_key_type;
+
+ /**
+ * key length in bits
+ *
+ * @var int
+ * @access private
+ */
+ var $_key_len;
+
+ /**
+ * Crypt_RSA_Key constructor.
+ *
+ * You should pass in the name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ *
+ * @param string $modulus key modulus
+ * @param string $exp key exponent
+ * @param string $key_type type of the key (public or private)
+ * @param string $wrapper_name wrapper to use
+ * @param string $error_handler name of error handler function
+ *
+ * @access public
+ */
+ function Crypt_RSA_Key($modulus, $exp, $key_type, $wrapper_name = 'default', $error_handler = '')
+ {
+ // set error handler
+ $this->setErrorHandler($error_handler);
+ // try to load math wrapper $wrapper_name
+ $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name);
+ if ($this->isError($obj)) {
+ // error during loading of math wrapper
+ $this->pushError($obj); // push error object into error list
+ return;
+ }
+ $this->_math_obj = &$obj;
+
+ $this->_modulus = $modulus;
+ $this->_exp = $exp;
+
+ if (!in_array($key_type, array('private', 'public'))) {
+ $this->pushError('invalid key type. It must be private or public', CRYPT_RSA_ERROR_WRONG_KEY_TYPE);
+ return;
+ }
+ $this->_key_type = $key_type;
+
+ /* check length of modulus & exponent ( abs(modulus) > abs(exp) ) */
+ $mod_num = $this->_math_obj->bin2int($this->_modulus);
+ $exp_num = $this->_math_obj->bin2int($this->_exp);
+
+ if ($this->_math_obj->cmpAbs($mod_num, $exp_num) <= 0) {
+ $this->pushError('modulus must be greater than exponent', CRYPT_RSA_ERROR_EXP_GE_MOD);
+ return;
+ }
+ // determine key length
+ $this->_key_len = $this->_math_obj->bitLen($mod_num);
+ }
+
+ /**
+ * Crypt_RSA_Key factory.
+ *
+ * @param string $modulus key modulus
+ * @param string $exp key exponent
+ * @param string $key_type type of the key (public or private)
+ * @param string $wrapper_name wrapper to use
+ * @param string $error_handler name of error handler function
+ *
+ * @return object new Crypt_RSA_Key object on success or PEAR_Error object on failure
+ * @access public
+ */
+ function factory($modulus, $exp, $key_type, $wrapper_name = 'default', $error_handler = '')
+ {
+ $obj = new Crypt_RSA_Key($modulus, $exp, $key_type, $wrapper_name, $error_handler);
+ if ($obj->isError()) {
+ // error during creating a new object. Retrurn PEAR_Error object
+ return $obj->getLastError();
+ }
+ // object created successfully. Return it
+ return $obj;
+ }
+
+ /**
+ * Calculates bit length of the key
+ *
+ * @return int bit length of key
+ * @access public
+ */
+ function getKeyLength()
+ {
+ return $this->_key_len;
+ }
+
+ /**
+ * Returns modulus part of the key as binary string,
+ * which can be used to construct new Crypt_RSA_Key object.
+ *
+ * @return string modulus as binary string
+ * @access public
+ */
+ function getModulus()
+ {
+ return $this->_modulus;
+ }
+
+ /**
+ * Returns exponent part of the key as binary string,
+ * which can be used to construct new Crypt_RSA_Key object.
+ *
+ * @return string exponent as binary string
+ * @access public
+ */
+ function getExponent()
+ {
+ return $this->_exp;
+ }
+
+ /**
+ * Returns key type (public, private)
+ *
+ * @return string key type (public, private)
+ * @access public
+ */
+ function getKeyType()
+ {
+ return $this->_key_type;
+ }
+
+ /**
+ * Returns string representation of key
+ *
+ * @return string key, serialized to string
+ * @access public
+ */
+ function toString()
+ {
+ return base64_encode(
+ serialize(
+ array($this->_modulus, $this->_exp, $this->_key_type)
+ )
+ );
+ }
+
+ /**
+ * Returns Crypt_RSA_Key object, unserialized from
+ * string representation of key.
+ *
+ * optional parameter $wrapper_name - is the name of math wrapper,
+ * which will be used during unserialization of this object.
+ *
+ * This function can be called statically:
+ * $key = Crypt_RSA_Key::fromString($key_in_string, 'BigInt');
+ *
+ * @param string $key_str RSA key, serialized into string
+ * @param string $wrapper_name optional math wrapper name
+ *
+ * @return object key as Crypt_RSA_Key object
+ * @access public
+ * @static
+ */
+ function fromString($key_str, $wrapper_name = 'default')
+ {
+ list($modulus, $exponent, $key_type) = unserialize(base64_decode($key_str));
+ $obj = new Crypt_RSA_Key($modulus, $exponent, $key_type, $wrapper_name);
+ return $obj;
+ }
+
+ /**
+ * Validates key
+ * This function can be called statically:
+ * $is_valid = Crypt_RSA_Key::isValid($key)
+ *
+ * Returns true, if $key is valid Crypt_RSA key, else returns false
+ *
+ * @param object $key Crypt_RSA_Key object for validating
+ *
+ * @return bool true if $key is valid, else false
+ * @access public
+ */
+ function isValid($key)
+ {
+ return (is_object($key) && strtolower(get_class($key)) === strtolower(__CLASS__));
+ }
+}
+
+?>
diff --git a/mod/openid_server/Crypt/RSA/KeyPair.php b/mod/openid_server/Crypt/RSA/KeyPair.php
new file mode 100644
index 000000000..ecc0b7dc7
--- /dev/null
+++ b/mod/openid_server/Crypt/RSA/KeyPair.php
@@ -0,0 +1,804 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version CVS: $Id: KeyPair.php,v 1.7 2009/01/05 08:30:29 clockwerx Exp $
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * RSA error handling facilities
+ */
+require_once 'Crypt/RSA/ErrorHandler.php';
+
+/**
+ * loader for RSA math wrappers
+ */
+require_once 'Crypt/RSA/MathLoader.php';
+
+/**
+ * helper class for single key managing
+ */
+require_once 'Crypt/RSA/Key.php';
+
+/**
+ * Crypt_RSA_KeyPair class, derived from Crypt_RSA_ErrorHandler
+ *
+ * Provides the following functions:
+ * - generate($key) - generates new key pair
+ * - getPublicKey() - returns public key
+ * - getPrivateKey() - returns private key
+ * - getKeyLength() - returns bit key length
+ * - setRandomGenerator($func_name) - sets random generator to $func_name
+ * - fromPEMString($str) - retrieves keypair from PEM-encoded string
+ * - toPEMString() - stores keypair to PEM-encoded string
+ * - isEqual($keypair2) - compares current keypair to $keypair2
+ *
+ * Example usage:
+ * // create new 1024-bit key pair
+ * $key_pair = new Crypt_RSA_KeyPair(1024);
+ *
+ * // error check
+ * if ($key_pair->isError()) {
+ * echo "error while initializing Crypt_RSA_KeyPair object:\n";
+ * $erorr = $key_pair->getLastError();
+ * echo $error->getMessage(), "\n";
+ * }
+ *
+ * // get public key
+ * $public_key = $key_pair->getPublicKey();
+ *
+ * // get private key
+ * $private_key = $key_pair->getPrivateKey();
+ *
+ * // generate new 512-bit key pair
+ * $key_pair->generate(512);
+ *
+ * // error check
+ * if ($key_pair->isError()) {
+ * echo "error while generating key pair:\n";
+ * $erorr = $key_pair->getLastError();
+ * echo $error->getMessage(), "\n";
+ * }
+ *
+ * // get key pair length
+ * $length = $key_pair->getKeyLength();
+ *
+ * // set random generator to $func_name, where $func_name
+ * // consists name of random generator function. See comments
+ * // before setRandomGenerator() method for details
+ * $key_pair->setRandomGenerator($func_name);
+ *
+ * // error check
+ * if ($key_pair->isError()) {
+ * echo "error while changing random generator:\n";
+ * $erorr = $key_pair->getLastError();
+ * echo $error->getMessage(), "\n";
+ * }
+ *
+ * // using factory() method instead of constructor (it returns PEAR_Error object on failure)
+ * $rsa_obj = &Crypt_RSA_KeyPair::factory($key_len);
+ * if (PEAR::isError($rsa_obj)) {
+ * echo "error: ", $rsa_obj->getMessage(), "\n";
+ * }
+ *
+ * // read key pair from PEM-encoded string:
+ * $str = "-----BEGIN RSA PRIVATE KEY-----"
+ * . "MCsCAQACBHr5LDkCAwEAAQIEBc6jbQIDAOCfAgMAjCcCAk3pAgJMawIDAL41"
+ * . "-----END RSA PRIVATE KEY-----";
+ * $keypair = Crypt_RSA_KeyPair::fromPEMString($str);
+ *
+ * // read key pair from .pem file 'private.pem':
+ * $str = file_get_contents('private.pem');
+ * $keypair = Crypt_RSA_KeyPair::fromPEMString($str);
+ *
+ * // generate and write 1024-bit key pair to .pem file 'private_new.pem'
+ * $keypair = new Crypt_RSA_KeyPair(1024);
+ * $str = $keypair->toPEMString();
+ * file_put_contents('private_new.pem', $str);
+ *
+ * // compare $keypair1 to $keypair2
+ * if ($keypair1->isEqual($keypair2)) {
+ * echo "keypair1 = keypair2\n";
+ * }
+ * else {
+ * echo "keypair1 != keypair2\n";
+ * }
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @access public
+ */
+class Crypt_RSA_KeyPair extends Crypt_RSA_ErrorHandler
+{
+ /**
+ * Reference to math wrapper object, which is used to
+ * manipulate large integers in RSA algorithm.
+ *
+ * @var object of Crypt_RSA_Math_* class
+ * @access private
+ */
+ var $_math_obj;
+
+ /**
+ * length of each key in the key pair
+ *
+ * @var int
+ * @access private
+ */
+ var $_key_len;
+
+ /**
+ * public key
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_public_key;
+
+ /**
+ * private key
+ *
+ * @var object of Crypt_RSA_KEY class
+ * @access private
+ */
+ var $_private_key;
+
+ /**
+ * name of function, which is used as random generator
+ *
+ * @var string
+ * @access private
+ */
+ var $_random_generator;
+
+ /**
+ * RSA keypair attributes [version, n, e, d, p, q, dmp1, dmq1, iqmp] as associative array
+ *
+ * @var array
+ * @access private
+ */
+ var $_attrs;
+
+ /**
+ * Returns names of keypair attributes from $this->_attrs array
+ *
+ * @return array Array of keypair attributes names
+ * @access private
+ */
+ function _get_attr_names()
+ {
+ return array('version', 'n', 'e', 'd', 'p', 'q', 'dmp1', 'dmq1', 'iqmp');
+ }
+
+ /**
+ * Parses ASN.1 string [$str] starting form position [$pos].
+ * Returns tag and string value of parsed object.
+ *
+ * @param string $str
+ * @param int &$pos
+ * @param Crypt_RSA_ErrorHandler &$err_handler
+ *
+ * @return mixed Array('tag' => ..., 'str' => ...) on success, false on error
+ * @access private
+ */
+ function _ASN1Parse($str, &$pos, &$err_handler)
+ {
+ $max_pos = strlen($str);
+ if ($max_pos < 2) {
+ $err_handler->pushError("ASN.1 string too short");
+ return false;
+ }
+
+ // get ASN.1 tag value
+ $tag = ord($str[$pos++]) & 0x1f;
+ if ($tag == 0x1f) {
+ $tag = 0;
+ do {
+ $n = ord($str[$pos++]);
+ $tag <<= 7;
+ $tag |= $n & 0x7f;
+ } while (($n & 0x80) && $pos < $max_pos);
+ }
+ if ($pos >= $max_pos) {
+ $err_handler->pushError("ASN.1 string too short");
+ return false;
+ }
+
+ // get ASN.1 object length
+ $len = ord($str[$pos++]);
+ if ($len & 0x80) {
+ $n = $len & 0x1f;
+ $len = 0;
+ while ($n-- && $pos < $max_pos) {
+ $len <<= 8;
+ $len |= ord($str[$pos++]);
+ }
+ }
+ if ($pos >= $max_pos || $len > $max_pos - $pos) {
+ $err_handler->pushError("ASN.1 string too short");
+ return false;
+ }
+
+ // get string value of ASN.1 object
+ $str = substr($str, $pos, $len);
+
+ return array(
+ 'tag' => $tag,
+ 'str' => $str,
+ );
+ }
+
+ /**
+ * Parses ASN.1 sting [$str] starting from position [$pos].
+ * Returns string representation of number, which can be passed
+ * in bin2int() function of math wrapper.
+ *
+ * @param string $str
+ * @param int &$pos
+ * @param Crypt_RSA_ErrorHandler &$err_handler
+ *
+ * @return mixed string representation of parsed number on success, false on error
+ * @access private
+ */
+ function _ASN1ParseInt($str, &$pos, &$err_handler)
+ {
+ $tmp = Crypt_RSA_KeyPair::_ASN1Parse($str, $pos, $err_handler);
+ if ($err_handler->isError()) {
+ return false;
+ }
+ if ($tmp['tag'] != 0x02) {
+ $errstr = sprintf("wrong ASN tag value: 0x%02x. Expected 0x02 (INTEGER)", $tmp['tag']);
+ $err_handler->pushError($errstr);
+ return false;
+ }
+ $pos += strlen($tmp['str']);
+
+ return strrev($tmp['str']);
+ }
+
+ /**
+ * Constructs ASN.1 string from tag $tag and object $str
+ *
+ * @param string $str ASN.1 object string
+ * @param int $tag ASN.1 tag value
+ * @param bool $is_constructed
+ * @param bool $is_private
+ *
+ * @return ASN.1-encoded string
+ * @access private
+ */
+ function _ASN1Store($str, $tag, $is_constructed = false, $is_private = false)
+ {
+ $out = '';
+
+ // encode ASN.1 tag value
+ $tag_ext = ($is_constructed ? 0x20 : 0) | ($is_private ? 0xc0 : 0);
+ if ($tag < 0x1f) {
+ $out .= chr($tag | $tag_ext);
+ } else {
+ $out .= chr($tag_ext | 0x1f);
+ $tmp = chr($tag & 0x7f);
+ $tag >>= 7;
+ while ($tag) {
+ $tmp .= chr(($tag & 0x7f) | 0x80);
+ $tag >>= 7;
+ }
+ $out .= strrev($tmp);
+ }
+
+ // encode ASN.1 object length
+ $len = strlen($str);
+ if ($len < 0x7f) {
+ $out .= chr($len);
+ } else {
+ $tmp = '';
+ $n = 0;
+ while ($len) {
+ $tmp .= chr($len & 0xff);
+ $len >>= 8;
+ $n++;
+ }
+ $out .= chr($n | 0x80);
+ $out .= strrev($tmp);
+ }
+
+ return $out . $str;
+ }
+
+ /**
+ * Constructs ASN.1 string from binary representation of big integer
+ *
+ * @param string $str binary representation of big integer
+ *
+ * @return ASN.1-encoded string
+ * @access private
+ */
+ function _ASN1StoreInt($str)
+ {
+ $str = strrev($str);
+ return Crypt_RSA_KeyPair::_ASN1Store($str, 0x02);
+ }
+
+ /**
+ * Crypt_RSA_KeyPair constructor.
+ *
+ * Wrapper: name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ *
+ * @param int $key_len bit length of key pair, which will be generated in constructor
+ * @param string $wrapper_name wrapper name
+ * @param string $error_handler name of error handler function
+ * @param callback $random_generator function which will be used as random generator
+ *
+ * @access public
+ */
+ function Crypt_RSA_KeyPair($key_len, $wrapper_name = 'default', $error_handler = '', $random_generator = null)
+ {
+ // set error handler
+ $this->setErrorHandler($error_handler);
+ // try to load math wrapper
+ $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name);
+ if ($this->isError($obj)) {
+ // error during loading of math wrapper
+ $this->pushError($obj);
+ return;
+ }
+ $this->_math_obj = &$obj;
+
+ // set random generator
+ if (!$this->setRandomGenerator($random_generator)) {
+ // error in setRandomGenerator() function
+ return;
+ }
+
+ if (is_array($key_len)) {
+ // ugly BC hack - it is possible to pass RSA private key attributes [version, n, e, d, p, q, dmp1, dmq1, iqmp]
+ // as associative array instead of key length to Crypt_RSA_KeyPair constructor
+ $rsa_attrs = $key_len;
+
+ // convert attributes to big integers
+ $attr_names = $this->_get_attr_names();
+ foreach ($attr_names as $attr) {
+ if (!isset($rsa_attrs[$attr])) {
+ $this->pushError("missing required RSA attribute [$attr]");
+ return;
+ }
+ ${$attr} = $this->_math_obj->bin2int($rsa_attrs[$attr]);
+ }
+
+ // check primality of p and q
+ if (!$this->_math_obj->isPrime($p)) {
+ $this->pushError("[p] must be prime");
+ return;
+ }
+ if (!$this->_math_obj->isPrime($q)) {
+ $this->pushError("[q] must be prime");
+ return;
+ }
+
+ // check n = p * q
+ $n1 = $this->_math_obj->mul($p, $q);
+ if ($this->_math_obj->cmpAbs($n, $n1)) {
+ $this->pushError("n != p * q");
+ return;
+ }
+
+ // check e * d = 1 mod (p-1) * (q-1)
+ $p1 = $this->_math_obj->dec($p);
+ $q1 = $this->_math_obj->dec($q);
+ $p1q1 = $this->_math_obj->mul($p1, $q1);
+ $ed = $this->_math_obj->mul($e, $d);
+ $one = $this->_math_obj->mod($ed, $p1q1);
+ if (!$this->_math_obj->isOne($one)) {
+ $this->pushError("e * d != 1 mod (p-1)*(q-1)");
+ return;
+ }
+
+ // check dmp1 = d mod (p-1)
+ $dmp = $this->_math_obj->mod($d, $p1);
+ if ($this->_math_obj->cmpAbs($dmp, $dmp1)) {
+ $this->pushError("dmp1 != d mod (p-1)");
+ return;
+ }
+
+ // check dmq1 = d mod (q-1)
+ $dmq = $this->_math_obj->mod($d, $q1);
+ if ($this->_math_obj->cmpAbs($dmq, $dmq1)) {
+ $this->pushError("dmq1 != d mod (q-1)");
+ return;
+ }
+
+ // check iqmp = 1/q mod p
+ $q1 = $this->_math_obj->invmod($iqmp, $p);
+ if ($this->_math_obj->cmpAbs($q, $q1)) {
+ $this->pushError("iqmp != 1/q mod p");
+ return;
+ }
+
+ // try to create public key object
+ $public_key = &new Crypt_RSA_Key($rsa_attrs['n'], $rsa_attrs['e'], 'public', $wrapper_name, $error_handler);
+ if ($public_key->isError()) {
+ // error during creating public object
+ $this->pushError($public_key->getLastError());
+ return;
+ }
+
+ // try to create private key object
+ $private_key = &new Crypt_RSA_Key($rsa_attrs['n'], $rsa_attrs['d'], 'private', $wrapper_name, $error_handler);
+ if ($private_key->isError()) {
+ // error during creating private key object
+ $this->pushError($private_key->getLastError());
+ return;
+ }
+
+ $this->_public_key = $public_key;
+ $this->_private_key = $private_key;
+ $this->_key_len = $public_key->getKeyLength();
+ $this->_attrs = $rsa_attrs;
+ } else {
+ // generate key pair
+ if (!$this->generate($key_len)) {
+ // error during generating key pair
+ return;
+ }
+ }
+ }
+
+ /**
+ * Crypt_RSA_KeyPair factory.
+ *
+ * Wrapper - Name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ *
+ * @param int $key_len bit length of key pair, which will be generated in constructor
+ * @param string $wrapper_name wrapper name
+ * @param string $error_handler name of error handler function
+ * @param callback $random_generator function which will be used as random generator
+ *
+ * @return object new Crypt_RSA_KeyPair object on success or PEAR_Error object on failure
+ * @access public
+ */
+ function &factory($key_len, $wrapper_name = 'default', $error_handler = '', $random_generator = null)
+ {
+ $obj = &new Crypt_RSA_KeyPair($key_len, $wrapper_name, $error_handler, $random_generator);
+ if ($obj->isError()) {
+ // error during creating a new object. Return PEAR_Error object
+ return $obj->getLastError();
+ }
+ // object created successfully. Return it
+ return $obj;
+ }
+
+ /**
+ * Generates new Crypt_RSA key pair with length $key_len.
+ * If $key_len is missed, use an old key length from $this->_key_len
+ *
+ * @param int $key_len bit length of key pair, which will be generated
+ *
+ * @return bool true on success or false on error
+ * @access public
+ */
+ function generate($key_len = null)
+ {
+ if (is_null($key_len)) {
+ // use an old key length
+ $key_len = $this->_key_len;
+ if (is_null($key_len)) {
+ $this->pushError('missing key_len parameter', CRYPT_RSA_ERROR_MISSING_KEY_LEN);
+ return false;
+ }
+ }
+
+ // minimal key length is 8 bit ;)
+ if ($key_len < 8) {
+ $key_len = 8;
+ }
+ // store key length in the _key_len property
+ $this->_key_len = $key_len;
+
+ // set [e] to 0x10001 (65537)
+ $e = $this->_math_obj->bin2int("\x01\x00\x01");
+
+ // generate [p], [q] and [n]
+ $p_len = intval(($key_len + 1) / 2);
+ $q_len = $key_len - $p_len;
+ $p1 = $q1 = 0;
+ do {
+ // generate prime number [$p] with length [$p_len] with the following condition:
+ // GCD($e, $p - 1) = 1
+ do {
+ $p = $this->_math_obj->getPrime($p_len, $this->_random_generator);
+ $p1 = $this->_math_obj->dec($p);
+ $tmp = $this->_math_obj->GCD($e, $p1);
+ } while (!$this->_math_obj->isOne($tmp));
+ // generate prime number [$q] with length [$q_len] with the following conditions:
+ // GCD($e, $q - 1) = 1
+ // $q != $p
+ do {
+ $q = $this->_math_obj->getPrime($q_len, $this->_random_generator);
+ $q1 = $this->_math_obj->dec($q);
+ $tmp = $this->_math_obj->GCD($e, $q1);
+ } while (!$this->_math_obj->isOne($tmp) && !$this->_math_obj->cmpAbs($q, $p));
+ // if (p < q), then exchange them
+ if ($this->_math_obj->cmpAbs($p, $q) < 0) {
+ $tmp = $p;
+ $p = $q;
+ $q = $tmp;
+ $tmp = $p1;
+ $p1 = $q1;
+ $q1 = $tmp;
+ }
+ // calculate n = p * q
+ $n = $this->_math_obj->mul($p, $q);
+ } while ($this->_math_obj->bitLen($n) != $key_len);
+
+ // calculate d = 1/e mod (p - 1) * (q - 1)
+ $pq = $this->_math_obj->mul($p1, $q1);
+ $d = $this->_math_obj->invmod($e, $pq);
+
+ // calculate dmp1 = d mod (p - 1)
+ $dmp1 = $this->_math_obj->mod($d, $p1);
+
+ // calculate dmq1 = d mod (q - 1)
+ $dmq1 = $this->_math_obj->mod($d, $q1);
+
+ // calculate iqmp = 1/q mod p
+ $iqmp = $this->_math_obj->invmod($q, $p);
+
+ // store RSA keypair attributes
+ $this->_attrs = array(
+ 'version' => "\x00",
+ 'n' => $this->_math_obj->int2bin($n),
+ 'e' => $this->_math_obj->int2bin($e),
+ 'd' => $this->_math_obj->int2bin($d),
+ 'p' => $this->_math_obj->int2bin($p),
+ 'q' => $this->_math_obj->int2bin($q),
+ 'dmp1' => $this->_math_obj->int2bin($dmp1),
+ 'dmq1' => $this->_math_obj->int2bin($dmq1),
+ 'iqmp' => $this->_math_obj->int2bin($iqmp),
+ );
+
+ $n = $this->_attrs['n'];
+ $e = $this->_attrs['e'];
+ $d = $this->_attrs['d'];
+
+ // try to create public key object
+ $obj = &new Crypt_RSA_Key($n, $e, 'public', $this->_math_obj->getWrapperName(), $this->_error_handler);
+ if ($obj->isError()) {
+ // error during creating public object
+ $this->pushError($obj->getLastError());
+ return false;
+ }
+ $this->_public_key = &$obj;
+
+ // try to create private key object
+ $obj = &new Crypt_RSA_Key($n, $d, 'private', $this->_math_obj->getWrapperName(), $this->_error_handler);
+ if ($obj->isError()) {
+ // error during creating private key object
+ $this->pushError($obj->getLastError());
+ return false;
+ }
+ $this->_private_key = &$obj;
+
+ return true; // key pair successfully generated
+ }
+
+ /**
+ * Returns public key from the pair
+ *
+ * @return object public key object of class Crypt_RSA_Key
+ * @access public
+ */
+ function getPublicKey()
+ {
+ return $this->_public_key;
+ }
+
+ /**
+ * Returns private key from the pair
+ *
+ * @return object private key object of class Crypt_RSA_Key
+ * @access public
+ */
+ function getPrivateKey()
+ {
+ return $this->_private_key;
+ }
+
+ /**
+ * Sets name of random generator function for key generation.
+ * If parameter is skipped, then sets to default random generator.
+ *
+ * Random generator function must return integer with at least 8 lower
+ * significant bits, which will be used as random values.
+ *
+ * @param string $random_generator name of random generator function
+ *
+ * @return bool true on success or false on error
+ * @access public
+ */
+ function setRandomGenerator($random_generator = null)
+ {
+ static $default_random_generator = null;
+
+ if (is_string($random_generator)) {
+ // set user's random generator
+ if (!function_exists($random_generator)) {
+ $this->pushError("can't find random generator function with name [{$random_generator}]");
+ return false;
+ }
+ $this->_random_generator = $random_generator;
+ } else {
+ // set default random generator
+ $this->_random_generator = is_null($default_random_generator) ?
+ ($default_random_generator = create_function('', '$a=explode(" ",microtime());return(int)($a[0]*1000000);')) :
+ $default_random_generator;
+ }
+ return true;
+ }
+
+ /**
+ * Returns length of each key in the key pair
+ *
+ * @return int bit length of each key in key pair
+ * @access public
+ */
+ function getKeyLength()
+ {
+ return $this->_key_len;
+ }
+
+ /**
+ * Retrieves RSA keypair from PEM-encoded string, containing RSA private key.
+ * Example of such string:
+ * -----BEGIN RSA PRIVATE KEY-----
+ * MCsCAQACBHtvbSECAwEAAQIEeYrk3QIDAOF3AgMAjCcCAmdnAgJMawIDALEk
+ * -----END RSA PRIVATE KEY-----
+ *
+ * Wrapper: Name of math wrapper, which will be used to
+ * perform different operations with big integers.
+ * See contents of Crypt/RSA/Math folder for examples of wrappers.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
+ *
+ * @param string $str PEM-encoded string
+ * @param string $wrapper_name Wrapper name
+ * @param string $error_handler name of error handler function
+ *
+ * @return Crypt_RSA_KeyPair object on success, PEAR_Error object on error
+ * @access public
+ * @static
+ */
+ function &fromPEMString($str, $wrapper_name = 'default', $error_handler = '')
+ {
+ if (isset($this)) {
+ if ($wrapper_name == 'default') {
+ $wrapper_name = $this->_math_obj->getWrapperName();
+ }
+ if ($error_handler == '') {
+ $error_handler = $this->_error_handler;
+ }
+ }
+ $err_handler = &new Crypt_RSA_ErrorHandler;
+ $err_handler->setErrorHandler($error_handler);
+
+ // search for base64-encoded private key
+ if (!preg_match('/-----BEGIN RSA PRIVATE KEY-----([^-]+)-----END RSA PRIVATE KEY-----/', $str, $matches)) {
+ $err_handler->pushError("can't find RSA private key in the string [{$str}]");
+ return $err_handler->getLastError();
+ }
+
+ // parse private key. It is ASN.1-encoded
+ $str = base64_decode($matches[1]);
+ $pos = 0;
+ $tmp = Crypt_RSA_KeyPair::_ASN1Parse($str, $pos, $err_handler);
+ if ($err_handler->isError()) {
+ return $err_handler->getLastError();
+ }
+ if ($tmp['tag'] != 0x10) {
+ $errstr = sprintf("wrong ASN tag value: 0x%02x. Expected 0x10 (SEQUENCE)", $tmp['tag']);
+ $err_handler->pushError($errstr);
+ return $err_handler->getLastError();
+ }
+
+ // parse ASN.1 SEQUENCE for RSA private key
+ $attr_names = Crypt_RSA_KeyPair::_get_attr_names();
+ $n = sizeof($attr_names);
+ $rsa_attrs = array();
+ for ($i = 0; $i < $n; $i++) {
+ $tmp = Crypt_RSA_KeyPair::_ASN1ParseInt($str, $pos, $err_handler);
+ if ($err_handler->isError()) {
+ return $err_handler->getLastError();
+ }
+ $attr = $attr_names[$i];
+ $rsa_attrs[$attr] = $tmp;
+ }
+
+ // create Crypt_RSA_KeyPair object.
+ $keypair = &new Crypt_RSA_KeyPair($rsa_attrs, $wrapper_name, $error_handler);
+ if ($keypair->isError()) {
+ return $keypair->getLastError();
+ }
+
+ return $keypair;
+ }
+
+ /**
+ * converts keypair to PEM-encoded string, which can be stroed in
+ * .pem compatible files, contianing RSA private key.
+ *
+ * @return string PEM-encoded keypair on success, false on error
+ * @access public
+ */
+ function toPEMString()
+ {
+ // store RSA private key attributes into ASN.1 string
+ $str = '';
+ $attr_names = $this->_get_attr_names();
+ $n = sizeof($attr_names);
+ $rsa_attrs = $this->_attrs;
+ for ($i = 0; $i < $n; $i++) {
+ $attr = $attr_names[$i];
+ if (!isset($rsa_attrs[$attr])) {
+ $this->pushError("Cannot find value for ASN.1 attribute [$attr]");
+ return false;
+ }
+ $tmp = $rsa_attrs[$attr];
+ $str .= Crypt_RSA_KeyPair::_ASN1StoreInt($tmp);
+ }
+
+ // prepend $str by ASN.1 SEQUENCE (0x10) header
+ $str = Crypt_RSA_KeyPair::_ASN1Store($str, 0x10, true);
+
+ // encode and format PEM string
+ $str = base64_encode($str);
+ $str = chunk_split($str, 64, "\n");
+ return "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n";
+ }
+
+ /**
+ * Compares keypairs in Crypt_RSA_KeyPair objects $this and $key_pair
+ *
+ * @param Crypt_RSA_KeyPair $key_pair keypair to compare
+ *
+ * @return bool true, if keypair stored in $this equal to keypair stored in $key_pair
+ * @access public
+ */
+ function isEqual($key_pair)
+ {
+ $attr_names = $this->_get_attr_names();
+ foreach ($attr_names as $attr) {
+ if ($this->_attrs[$attr] != $key_pair->_attrs[$attr]) {
+ return false;
+ }
+ }
+ return true;
+ }
+}
+
+?>
diff --git a/mod/openid_server/Crypt/RSA/Math/BCMath.php b/mod/openid_server/Crypt/RSA/Math/BCMath.php
new file mode 100644
index 000000000..646ff6710
--- /dev/null
+++ b/mod/openid_server/Crypt/RSA/Math/BCMath.php
@@ -0,0 +1,482 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version 1.2.0b
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * Crypt_RSA_Math_BCMath class.
+ *
+ * Provides set of math functions, which are used by Crypt_RSA package
+ * This class is a wrapper for PHP BCMath extension.
+ * See http://php.net/manual/en/ref.bc.php for details.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @version @package_version@
+ * @access public
+ */
+class Crypt_RSA_Math_BCMath
+{
+ /**
+ * error description
+ *
+ * @var string
+ * @access public
+ */
+ var $errstr = '';
+
+ /**
+ * Performs Miller-Rabin primality test for number $num
+ * with base $base. Returns true, if $num is strong pseudoprime
+ * by base $base. Else returns false.
+ *
+ * @param string $num
+ * @param string $base
+ * @return bool
+ * @access private
+ */
+ function _millerTest($num, $base)
+ {
+ if (!bccomp($num, '1')) {
+ // 1 is not prime ;)
+ return false;
+ }
+ $tmp = bcsub($num, '1');
+
+ $zero_bits = 0;
+ while (!bccomp(bcmod($tmp, '2'), '0')) {
+ $zero_bits++;
+ $tmp = bcdiv($tmp, '2');
+ }
+
+ $tmp = $this->powmod($base, $tmp, $num);
+ if (!bccomp($tmp, '1')) {
+ // $num is probably prime
+ return true;
+ }
+
+ while ($zero_bits--) {
+ if (!bccomp(bcadd($tmp, '1'), $num)) {
+ // $num is probably prime
+ return true;
+ }
+ $tmp = $this->powmod($tmp, '2', $num);
+ }
+ // $num is composite
+ return false;
+ }
+
+ /**
+ * Crypt_RSA_Math_BCMath constructor.
+ * Checks an existance of PHP BCMath extension.
+ * On failure saves error description in $this->errstr
+ *
+ * @access public
+ */
+ function Crypt_RSA_Math_BCMath()
+ {
+ if (!extension_loaded('bcmath')) {
+ if (!@dl('bcmath.' . PHP_SHLIB_SUFFIX) && !@dl('php_bcmath.' . PHP_SHLIB_SUFFIX)) {
+ // cannot load BCMath extension. Set error string
+ $this->errstr = 'Crypt_RSA package requires the BCMath extension. See http://php.net/manual/en/ref.bc.php for details';
+ return;
+ }
+ }
+ }
+
+ /**
+ * Transforms binary representation of large integer into its native form.
+ *
+ * Example of transformation:
+ * $str = "\x12\x34\x56\x78\x90";
+ * $num = 0x9078563412;
+ *
+ * @param string $str
+ * @return string
+ * @access public
+ */
+ function bin2int($str)
+ {
+ $result = '0';
+ $n = strlen($str);
+ do {
+ $result = bcadd(bcmul($result, '256'), ord($str{--$n}));
+ } while ($n > 0);
+ return $result;
+ }
+
+ /**
+ * Transforms large integer into binary representation.
+ *
+ * Example of transformation:
+ * $num = 0x9078563412;
+ * $str = "\x12\x34\x56\x78\x90";
+ *
+ * @param string $num
+ * @return string
+ * @access public
+ */
+ function int2bin($num)
+ {
+ $result = '';
+ do {
+ $result .= chr(bcmod($num, '256'));
+ $num = bcdiv($num, '256');
+ } while (bccomp($num, '0'));
+ return $result;
+ }
+
+ /**
+ * Calculates pow($num, $pow) (mod $mod)
+ *
+ * @param string $num
+ * @param string $pow
+ * @param string $mod
+ * @return string
+ * @access public
+ */
+ function powmod($num, $pow, $mod)
+ {
+ if (function_exists('bcpowmod')) {
+ // bcpowmod is only available under PHP5
+ return bcpowmod($num, $pow, $mod);
+ }
+
+ // emulate bcpowmod
+ $result = '1';
+ do {
+ if (!bccomp(bcmod($pow, '2'), '1')) {
+ $result = bcmod(bcmul($result, $num), $mod);
+ }
+ $num = bcmod(bcpow($num, '2'), $mod);
+ $pow = bcdiv($pow, '2');
+ } while (bccomp($pow, '0'));
+ return $result;
+ }
+
+ /**
+ * Calculates $num1 * $num2
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return string
+ * @access public
+ */
+ function mul($num1, $num2)
+ {
+ return bcmul($num1, $num2);
+ }
+
+ /**
+ * Calculates $num1 % $num2
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return string
+ * @access public
+ */
+ function mod($num1, $num2)
+ {
+ return bcmod($num1, $num2);
+ }
+
+ /**
+ * Compares abs($num1) to abs($num2).
+ * Returns:
+ * -1, if abs($num1) < abs($num2)
+ * 0, if abs($num1) == abs($num2)
+ * 1, if abs($num1) > abs($num2)
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return int
+ * @access public
+ */
+ function cmpAbs($num1, $num2)
+ {
+ return bccomp($num1, $num2);
+ }
+
+ /**
+ * Tests $num on primality. Returns true, if $num is strong pseudoprime.
+ * Else returns false.
+ *
+ * @param string $num
+ * @return bool
+ * @access private
+ */
+ function isPrime($num)
+ {
+ static $primes = null;
+ static $primes_cnt = 0;
+ if (is_null($primes)) {
+ // generate all primes up to 10000
+ $primes = array();
+ for ($i = 0; $i < 10000; $i++) {
+ $primes[] = $i;
+ }
+ $primes[0] = $primes[1] = 0;
+ for ($i = 2; $i < 100; $i++) {
+ while (!$primes[$i]) {
+ $i++;
+ }
+ $j = $i;
+ for ($j += $i; $j < 10000; $j += $i) {
+ $primes[$j] = 0;
+ }
+ }
+ $j = 0;
+ for ($i = 0; $i < 10000; $i++) {
+ if ($primes[$i]) {
+ $primes[$j++] = $primes[$i];
+ }
+ }
+ $primes_cnt = $j;
+ }
+
+ // try to divide number by small primes
+ for ($i = 0; $i < $primes_cnt; $i++) {
+ if (bccomp($num, $primes[$i]) <= 0) {
+ // number is prime
+ return true;
+ }
+ if (!bccomp(bcmod($num, $primes[$i]), '0')) {
+ // number divides by $primes[$i]
+ return false;
+ }
+ }
+
+ /*
+ try Miller-Rabin's probable-primality test for first
+ 7 primes as bases
+ */
+ for ($i = 0; $i < 7; $i++) {
+ if (!$this->_millerTest($num, $primes[$i])) {
+ // $num is composite
+ return false;
+ }
+ }
+ // $num is strong pseudoprime
+ return true;
+ }
+
+ /**
+ * Generates prime number with length $bits_cnt
+ * using $random_generator as random generator function.
+ *
+ * @param int $bits_cnt
+ * @param string $rnd_generator
+ * @access public
+ */
+ function getPrime($bits_cnt, $random_generator)
+ {
+ $bytes_n = intval($bits_cnt / 8);
+ $bits_n = $bits_cnt % 8;
+ do {
+ $str = '';
+ for ($i = 0; $i < $bytes_n; $i++) {
+ $str .= chr(call_user_func($random_generator) & 0xff);
+ }
+ $n = call_user_func($random_generator) & 0xff;
+ $n |= 0x80;
+ $n >>= 8 - $bits_n;
+ $str .= chr($n);
+ $num = $this->bin2int($str);
+
+ // search for the next closest prime number after [$num]
+ if (!bccomp(bcmod($num, '2'), '0')) {
+ $num = bcadd($num, '1');
+ }
+ while (!$this->isPrime($num)) {
+ $num = bcadd($num, '2');
+ }
+ } while ($this->bitLen($num) != $bits_cnt);
+ return $num;
+ }
+
+ /**
+ * Calculates $num - 1
+ *
+ * @param string $num
+ * @return string
+ * @access public
+ */
+ function dec($num)
+ {
+ return bcsub($num, '1');
+ }
+
+ /**
+ * Returns true, if $num is equal to one. Else returns false
+ *
+ * @param string $num
+ * @return bool
+ * @access public
+ */
+ function isOne($num)
+ {
+ return !bccomp($num, '1');
+ }
+
+ /**
+ * Finds greatest common divider (GCD) of $num1 and $num2
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return string
+ * @access public
+ */
+ function GCD($num1, $num2)
+ {
+ do {
+ $tmp = bcmod($num1, $num2);
+ $num1 = $num2;
+ $num2 = $tmp;
+ } while (bccomp($num2, '0'));
+ return $num1;
+ }
+
+ /**
+ * Finds inverse number $inv for $num by modulus $mod, such as:
+ * $inv * $num = 1 (mod $mod)
+ *
+ * @param string $num
+ * @param string $mod
+ * @return string
+ * @access public
+ */
+ function invmod($num, $mod)
+ {
+ $x = '1';
+ $y = '0';
+ $num1 = $mod;
+ do {
+ $tmp = bcmod($num, $num1);
+ $q = bcdiv($num, $num1);
+ $num = $num1;
+ $num1 = $tmp;
+
+ $tmp = bcsub($x, bcmul($y, $q));
+ $x = $y;
+ $y = $tmp;
+ } while (bccomp($num1, '0'));
+ if (bccomp($x, '0') < 0) {
+ $x = bcadd($x, $mod);
+ }
+ return $x;
+ }
+
+ /**
+ * Returns bit length of number $num
+ *
+ * @param string $num
+ * @return int
+ * @access public
+ */
+ function bitLen($num)
+ {
+ $tmp = $this->int2bin($num);
+ $bit_len = strlen($tmp) * 8;
+ $tmp = ord($tmp{strlen($tmp) - 1});
+ if (!$tmp) {
+ $bit_len -= 8;
+ }
+ else {
+ while (!($tmp & 0x80)) {
+ $bit_len--;
+ $tmp <<= 1;
+ }
+ }
+ return $bit_len;
+ }
+
+ /**
+ * Calculates bitwise or of $num1 and $num2,
+ * starting from bit $start_pos for number $num1
+ *
+ * @param string $num1
+ * @param string $num2
+ * @param int $start_pos
+ * @return string
+ * @access public
+ */
+ function bitOr($num1, $num2, $start_pos)
+ {
+ $start_byte = intval($start_pos / 8);
+ $start_bit = $start_pos % 8;
+ $tmp1 = $this->int2bin($num1);
+
+ $num2 = bcmul($num2, 1 << $start_bit);
+ $tmp2 = $this->int2bin($num2);
+ if ($start_byte < strlen($tmp1)) {
+ $tmp2 |= substr($tmp1, $start_byte);
+ $tmp1 = substr($tmp1, 0, $start_byte) . $tmp2;
+ }
+ else {
+ $tmp1 = str_pad($tmp1, $start_byte, "\0") . $tmp2;
+ }
+ return $this->bin2int($tmp1);
+ }
+
+ /**
+ * Returns part of number $num, starting at bit
+ * position $start with length $length
+ *
+ * @param string $num
+ * @param int start
+ * @param int length
+ * @return string
+ * @access public
+ */
+ function subint($num, $start, $length)
+ {
+ $start_byte = intval($start / 8);
+ $start_bit = $start % 8;
+ $byte_length = intval($length / 8);
+ $bit_length = $length % 8;
+ if ($bit_length) {
+ $byte_length++;
+ }
+ $num = bcdiv($num, 1 << $start_bit);
+ $tmp = substr($this->int2bin($num), $start_byte, $byte_length);
+ $tmp = str_pad($tmp, $byte_length, "\0");
+ $tmp = substr_replace($tmp, $tmp{$byte_length - 1} & chr(0xff >> (8 - $bit_length)), $byte_length - 1, 1);
+ return $this->bin2int($tmp);
+ }
+
+ /**
+ * Returns name of current wrapper
+ *
+ * @return string name of current wrapper
+ * @access public
+ */
+ function getWrapperName()
+ {
+ return 'BCMath';
+ }
+}
+
+?> \ No newline at end of file
diff --git a/mod/openid_server/Crypt/RSA/Math/BigInt.php b/mod/openid_server/Crypt/RSA/Math/BigInt.php
new file mode 100644
index 000000000..b7ac24cb6
--- /dev/null
+++ b/mod/openid_server/Crypt/RSA/Math/BigInt.php
@@ -0,0 +1,313 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version 1.2.0b
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * Crypt_RSA_Math_BigInt class.
+ *
+ * Provides set of math functions, which are used by Crypt_RSA package
+ * This class is a wrapper for big_int PECL extension,
+ * which could be loaded from http://pecl.php.net/packages/big_int
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @version @package_version@
+ * @access public
+ */
+class Crypt_RSA_Math_BigInt
+{
+ /**
+ * error description
+ *
+ * @var string
+ * @access public
+ */
+ var $errstr = '';
+
+ /**
+ * Crypt_RSA_Math_BigInt constructor.
+ * Checks an existance of big_int PECL math package.
+ * This package is available at http://pecl.php.net/packages/big_int
+ * On failure saves error description in $this->errstr
+ *
+ * @access public
+ */
+ function Crypt_RSA_Math_BigInt()
+ {
+ if (!extension_loaded('big_int')) {
+ if (!@dl('big_int.' . PHP_SHLIB_SUFFIX) && !@dl('php_big_int.' . PHP_SHLIB_SUFFIX)) {
+ // cannot load big_int extension
+ $this->errstr = 'Crypt_RSA package requires big_int PECL package. ' .
+ 'It is available at http://pecl.php.net/packages/big_int';
+ return;
+ }
+ }
+
+ // check version of big_int extension ( Crypt_RSA requires version 1.0.2 and higher )
+ if (!in_array('bi_info', get_extension_funcs('big_int'))) {
+ // there is no bi_info() function in versions, older than 1.0.2
+ $this->errstr = 'Crypt_RSA package requires big_int package version 1.0.2 and higher';
+ }
+ }
+
+ /**
+ * Transforms binary representation of large integer into its native form.
+ *
+ * Example of transformation:
+ * $str = "\x12\x34\x56\x78\x90";
+ * $num = 0x9078563412;
+ *
+ * @param string $str
+ * @return big_int resource
+ * @access public
+ */
+ function bin2int($str)
+ {
+ return bi_unserialize($str);
+ }
+
+ /**
+ * Transforms large integer into binary representation.
+ *
+ * Example of transformation:
+ * $num = 0x9078563412;
+ * $str = "\x12\x34\x56\x78\x90";
+ *
+ * @param big_int resource $num
+ * @return string
+ * @access public
+ */
+ function int2bin($num)
+ {
+ return bi_serialize($num);
+ }
+
+ /**
+ * Calculates pow($num, $pow) (mod $mod)
+ *
+ * @param big_int resource $num
+ * @param big_int resource $pow
+ * @param big_int resource $mod
+ * @return big_int resource
+ * @access public
+ */
+ function powmod($num, $pow, $mod)
+ {
+ return bi_powmod($num, $pow, $mod);
+ }
+
+ /**
+ * Calculates $num1 * $num2
+ *
+ * @param big_int resource $num1
+ * @param big_int resource $num2
+ * @return big_int resource
+ * @access public
+ */
+ function mul($num1, $num2)
+ {
+ return bi_mul($num1, $num2);
+ }
+
+ /**
+ * Calculates $num1 % $num2
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return string
+ * @access public
+ */
+ function mod($num1, $num2)
+ {
+ return bi_mod($num1, $num2);
+ }
+
+ /**
+ * Compares abs($num1) to abs($num2).
+ * Returns:
+ * -1, if abs($num1) < abs($num2)
+ * 0, if abs($num1) == abs($num2)
+ * 1, if abs($num1) > abs($num2)
+ *
+ * @param big_int resource $num1
+ * @param big_int resource $num2
+ * @return int
+ * @access public
+ */
+ function cmpAbs($num1, $num2)
+ {
+ return bi_cmp_abs($num1, $num2);
+ }
+
+ /**
+ * Tests $num on primality. Returns true, if $num is strong pseudoprime.
+ * Else returns false.
+ *
+ * @param string $num
+ * @return bool
+ * @access private
+ */
+ function isPrime($num)
+ {
+ return bi_is_prime($num) ? true : false;
+ }
+
+ /**
+ * Generates prime number with length $bits_cnt
+ * using $random_generator as random generator function.
+ *
+ * @param int $bits_cnt
+ * @param string $rnd_generator
+ * @access public
+ */
+ function getPrime($bits_cnt, $random_generator)
+ {
+ $bytes_n = intval($bits_cnt / 8);
+ $bits_n = $bits_cnt % 8;
+ do {
+ $str = '';
+ for ($i = 0; $i < $bytes_n; $i++) {
+ $str .= chr(call_user_func($random_generator) & 0xff);
+ }
+ $n = call_user_func($random_generator) & 0xff;
+ $n |= 0x80;
+ $n >>= 8 - $bits_n;
+ $str .= chr($n);
+ $num = $this->bin2int($str);
+
+ // search for the next closest prime number after [$num]
+ $num = bi_next_prime($num);
+ } while ($this->bitLen($num) != $bits_cnt);
+ return $num;
+ }
+
+ /**
+ * Calculates $num - 1
+ *
+ * @param big_int resource $num
+ * @return big_int resource
+ * @access public
+ */
+ function dec($num)
+ {
+ return bi_dec($num);
+ }
+
+ /**
+ * Returns true, if $num is equal to 1. Else returns false
+ *
+ * @param big_int resource $num
+ * @return bool
+ * @access public
+ */
+ function isOne($num)
+ {
+ return bi_is_one($num);
+ }
+
+ /**
+ * Finds greatest common divider (GCD) of $num1 and $num2
+ *
+ * @param big_int resource $num1
+ * @param big_int resource $num2
+ * @return big_int resource
+ * @access public
+ */
+ function GCD($num1, $num2)
+ {
+ return bi_gcd($num1, $num2);
+ }
+
+ /**
+ * Finds inverse number $inv for $num by modulus $mod, such as:
+ * $inv * $num = 1 (mod $mod)
+ *
+ * @param big_int resource $num
+ * @param big_int resource $mod
+ * @return big_int resource
+ * @access public
+ */
+ function invmod($num, $mod)
+ {
+ return bi_invmod($num, $mod);
+ }
+
+ /**
+ * Returns bit length of number $num
+ *
+ * @param big_int resource $num
+ * @return int
+ * @access public
+ */
+ function bitLen($num)
+ {
+ return bi_bit_len($num);
+ }
+
+ /**
+ * Calculates bitwise or of $num1 and $num2,
+ * starting from bit $start_pos for number $num1
+ *
+ * @param big_int resource $num1
+ * @param big_int resource $num2
+ * @param int $start_pos
+ * @return big_int resource
+ * @access public
+ */
+ function bitOr($num1, $num2, $start_pos)
+ {
+ return bi_or($num1, $num2, $start_pos);
+ }
+
+ /**
+ * Returns part of number $num, starting at bit
+ * position $start with length $length
+ *
+ * @param big_int resource $num
+ * @param int start
+ * @param int length
+ * @return big_int resource
+ * @access public
+ */
+ function subint($num, $start, $length)
+ {
+ return bi_subint($num, $start, $length);
+ }
+
+ /**
+ * Returns name of current wrapper
+ *
+ * @return string name of current wrapper
+ * @access public
+ */
+ function getWrapperName()
+ {
+ return 'BigInt';
+ }
+}
+
+?> \ No newline at end of file
diff --git a/mod/openid_server/Crypt/RSA/Math/GMP.php b/mod/openid_server/Crypt/RSA/Math/GMP.php
new file mode 100644
index 000000000..54e4c34fc
--- /dev/null
+++ b/mod/openid_server/Crypt/RSA/Math/GMP.php
@@ -0,0 +1,361 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version 1.2.0b
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * Crypt_RSA_Math_GMP class.
+ *
+ * Provides set of math functions, which are used by Crypt_RSA package
+ * This class is a wrapper for PHP GMP extension.
+ * See http://php.net/gmp for details.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright 2005, 2006 Alexander Valyalkin
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @version @package_version@
+ * @access public
+ */
+class Crypt_RSA_Math_GMP
+{
+ /**
+ * error description
+ *
+ * @var string
+ * @access public
+ */
+ var $errstr = '';
+
+ /**
+ * Crypt_RSA_Math_GMP constructor.
+ * Checks an existance of PHP GMP package.
+ * See http://php.net/gmp for details.
+ *
+ * On failure saves error description in $this->errstr
+ *
+ * @access public
+ */
+ function Crypt_RSA_Math_GMP()
+ {
+ if (!extension_loaded('gmp')) {
+ if (!@dl('gmp.' . PHP_SHLIB_SUFFIX) && !@dl('php_gmp.' . PHP_SHLIB_SUFFIX)) {
+ // cannot load GMP extension
+ $this->errstr = 'Crypt_RSA package requires PHP GMP package. ' .
+ 'See http://php.net/gmp for details';
+ return;
+ }
+ }
+ }
+
+ /**
+ * Transforms binary representation of large integer into its native form.
+ *
+ * Example of transformation:
+ * $str = "\x12\x34\x56\x78\x90";
+ * $num = 0x9078563412;
+ *
+ * @param string $str
+ * @return gmp resource
+ * @access public
+ */
+ function bin2int($str)
+ {
+ $result = 0;
+ $n = strlen($str);
+ do {
+ // dirty hack: GMP returns FALSE, when second argument equals to int(0).
+ // so, it must be converted to string '0'
+ $result = gmp_add(gmp_mul($result, 256), strval(ord($str{--$n})));
+ } while ($n > 0);
+ return $result;
+ }
+
+ /**
+ * Transforms large integer into binary representation.
+ *
+ * Example of transformation:
+ * $num = 0x9078563412;
+ * $str = "\x12\x34\x56\x78\x90";
+ *
+ * @param gmp resource $num
+ * @return string
+ * @access public
+ */
+ function int2bin($num)
+ {
+ $result = '';
+ do {
+ $result .= chr(gmp_intval(gmp_mod($num, 256)));
+ $num = gmp_div($num, 256);
+ } while (gmp_cmp($num, 0));
+ return $result;
+ }
+
+ /**
+ * Calculates pow($num, $pow) (mod $mod)
+ *
+ * @param gmp resource $num
+ * @param gmp resource $pow
+ * @param gmp resource $mod
+ * @return gmp resource
+ * @access public
+ */
+ function powmod($num, $pow, $mod)
+ {
+ return gmp_powm($num, $pow, $mod);
+ }
+
+ /**
+ * Calculates $num1 * $num2
+ *
+ * @param gmp resource $num1
+ * @param gmp resource $num2
+ * @return gmp resource
+ * @access public
+ */
+ function mul($num1, $num2)
+ {
+ return gmp_mul($num1, $num2);
+ }
+
+ /**
+ * Calculates $num1 % $num2
+ *
+ * @param string $num1
+ * @param string $num2
+ * @return string
+ * @access public
+ */
+ function mod($num1, $num2)
+ {
+ return gmp_mod($num1, $num2);
+ }
+
+ /**
+ * Compares abs($num1) to abs($num2).
+ * Returns:
+ * -1, if abs($num1) < abs($num2)
+ * 0, if abs($num1) == abs($num2)
+ * 1, if abs($num1) > abs($num2)
+ *
+ * @param gmp resource $num1
+ * @param gmp resource $num2
+ * @return int
+ * @access public
+ */
+ function cmpAbs($num1, $num2)
+ {
+ return gmp_cmp($num1, $num2);
+ }
+
+ /**
+ * Tests $num on primality. Returns true, if $num is strong pseudoprime.
+ * Else returns false.
+ *
+ * @param string $num
+ * @return bool
+ * @access private
+ */
+ function isPrime($num)
+ {
+ return gmp_prob_prime($num) ? true : false;
+ }
+
+ /**
+ * Generates prime number with length $bits_cnt
+ * using $random_generator as random generator function.
+ *
+ * @param int $bits_cnt
+ * @param string $rnd_generator
+ * @access public
+ */
+ function getPrime($bits_cnt, $random_generator)
+ {
+ $bytes_n = intval($bits_cnt / 8);
+ $bits_n = $bits_cnt % 8;
+ do {
+ $str = '';
+ for ($i = 0; $i < $bytes_n; $i++) {
+ $str .= chr(call_user_func($random_generator) & 0xff);
+ }
+ $n = call_user_func($random_generator) & 0xff;
+ $n |= 0x80;
+ $n >>= 8 - $bits_n;
+ $str .= chr($n);
+ $num = $this->bin2int($str);
+
+ // search for the next closest prime number after [$num]
+ if (!gmp_cmp(gmp_mod($num, '2'), '0')) {
+ $num = gmp_add($num, '1');
+ }
+ while (!gmp_prob_prime($num)) {
+ $num = gmp_add($num, '2');
+ }
+ } while ($this->bitLen($num) != $bits_cnt);
+ return $num;
+ }
+
+ /**
+ * Calculates $num - 1
+ *
+ * @param gmp resource $num
+ * @return gmp resource
+ * @access public
+ */
+ function dec($num)
+ {
+ return gmp_sub($num, 1);
+ }
+
+ /**
+ * Returns true, if $num is equal to one. Else returns false
+ *
+ * @param gmp resource $num
+ * @return bool
+ * @access public
+ */
+ function isOne($num)
+ {
+ return !gmp_cmp($num, 1);
+ }
+
+ /**
+ * Finds greatest common divider (GCD) of $num1 and $num2
+ *
+ * @param gmp resource $num1
+ * @param gmp resource $num2
+ * @return gmp resource
+ * @access public
+ */
+ function GCD($num1, $num2)
+ {
+ return gmp_gcd($num1, $num2);
+ }
+
+ /**
+ * Finds inverse number $inv for $num by modulus $mod, such as:
+ * $inv * $num = 1 (mod $mod)
+ *
+ * @param gmp resource $num
+ * @param gmp resource $mod
+ * @return gmp resource
+ * @access public
+ */
+ function invmod($num, $mod)
+ {
+ return gmp_invert($num, $mod);
+ }
+
+ /**
+ * Returns bit length of number $num
+ *
+ * @param gmp resource $num
+ * @return int
+ * @access public
+ */
+ function bitLen($num)
+ {
+ $tmp = $this->int2bin($num);
+ $bit_len = strlen($tmp) * 8;
+ $tmp = ord($tmp{strlen($tmp) - 1});
+ if (!$tmp) {
+ $bit_len -= 8;
+ }
+ else {
+ while (!($tmp & 0x80)) {
+ $bit_len--;
+ $tmp <<= 1;
+ }
+ }
+ return $bit_len;
+ }
+
+ /**
+ * Calculates bitwise or of $num1 and $num2,
+ * starting from bit $start_pos for number $num1
+ *
+ * @param gmp resource $num1
+ * @param gmp resource $num2
+ * @param int $start_pos
+ * @return gmp resource
+ * @access public
+ */
+ function bitOr($num1, $num2, $start_pos)
+ {
+ $start_byte = intval($start_pos / 8);
+ $start_bit = $start_pos % 8;
+ $tmp1 = $this->int2bin($num1);
+
+ $num2 = gmp_mul($num2, 1 << $start_bit);
+ $tmp2 = $this->int2bin($num2);
+ if ($start_byte < strlen($tmp1)) {
+ $tmp2 |= substr($tmp1, $start_byte);
+ $tmp1 = substr($tmp1, 0, $start_byte) . $tmp2;
+ }
+ else {
+ $tmp1 = str_pad($tmp1, $start_byte, "\0") . $tmp2;
+ }
+ return $this->bin2int($tmp1);
+ }
+
+ /**
+ * Returns part of number $num, starting at bit
+ * position $start with length $length
+ *
+ * @param gmp resource $num
+ * @param int start
+ * @param int length
+ * @return gmp resource
+ * @access public
+ */
+ function subint($num, $start, $length)
+ {
+ $start_byte = intval($start / 8);
+ $start_bit = $start % 8;
+ $byte_length = intval($length / 8);
+ $bit_length = $length % 8;
+ if ($bit_length) {
+ $byte_length++;
+ }
+ $num = gmp_div($num, 1 << $start_bit);
+ $tmp = substr($this->int2bin($num), $start_byte, $byte_length);
+ $tmp = str_pad($tmp, $byte_length, "\0");
+ $tmp = substr_replace($tmp, $tmp{$byte_length - 1} & chr(0xff >> (8 - $bit_length)), $byte_length - 1, 1);
+ return $this->bin2int($tmp);
+ }
+
+ /**
+ * Returns name of current wrapper
+ *
+ * @return string name of current wrapper
+ * @access public
+ */
+ function getWrapperName()
+ {
+ return 'GMP';
+ }
+}
+
+?> \ No newline at end of file
diff --git a/mod/openid_server/Crypt/RSA/MathLoader.php b/mod/openid_server/Crypt/RSA/MathLoader.php
new file mode 100644
index 000000000..de6c94642
--- /dev/null
+++ b/mod/openid_server/Crypt/RSA/MathLoader.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * Crypt_RSA allows to do following operations:
+ * - key pair generation
+ * - encryption and decryption
+ * - signing and sign validation
+ *
+ * PHP versions 4 and 5
+ *
+ * LICENSE: This source file is subject to version 3.0 of the PHP license
+ * that is available through the world-wide-web at the following URI:
+ * http://www.php.net/license/3_0.txt. If you did not receive a copy of
+ * the PHP License and are unable to obtain it through the web, please
+ * send a note to license@php.net so we can mail you a copy immediately.
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright Alexander Valyalkin 2005
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version CVS: $Id: MathLoader.php,v 1.5 2009/01/05 08:30:29 clockwerx Exp $
+ * @link http://pear.php.net/package/Crypt_RSA
+ */
+
+/**
+ * RSA error handling facilities
+ */
+require_once 'Crypt/RSA/ErrorHandler.php';
+
+/**
+ * Crypt_RSA_MathLoader class.
+ *
+ * Provides static function:
+ * - loadWrapper($wrapper_name) - loads RSA math wrapper with name $wrapper_name
+ * or most suitable wrapper if $wrapper_name == 'default'
+ *
+ * Example usage:
+ * // load BigInt wrapper
+ * $big_int_wrapper = Crypt_RSA_MathLoader::loadWrapper('BigInt');
+ *
+ * // load BCMath wrapper
+ * $bcmath_wrapper = Crypt_RSA_MathLoader::loadWrapper('BCMath');
+ *
+ * // load the most suitable wrapper
+ * $bcmath_wrapper = Crypt_RSA_MathLoader::loadWrapper();
+ *
+ * @category Encryption
+ * @package Crypt_RSA
+ * @author Alexander Valyalkin <valyala@gmail.com>
+ * @copyright Alexander Valyalkin 2005
+ * @license http://www.php.net/license/3_0.txt PHP License 3.0
+ * @version Release: @package_version@
+ * @link http://pear.php.net/package/Crypt_RSA
+ * @access public
+ */
+class Crypt_RSA_MathLoader
+{
+ /**
+ * Loads RSA math wrapper with name $wrapper_name.
+ * Implemented wrappers can be found at Crypt/RSA/Math folder.
+ * Read docs/Crypt_RSA/docs/math_wrappers.txt for details
+ *
+ * This is a static function:
+ * // load BigInt wrapper
+ * $big_int_wrapper = &Crypt_RSA_MathLoader::loadWrapper('BigInt');
+ *
+ * // load BCMath wrapper
+ * $bcmath_wrapper = &Crypt_RSA_MathLoader::loadWrapper('BCMath');
+ *
+ * @param string $wrapper_name Name of wrapper
+ *
+ * @return object
+ * Reference to object of wrapper with name $wrapper_name on success
+ * or PEAR_Error object on error
+ *
+ * @access public
+ */
+ function loadWrapper($wrapper_name = 'default')
+ {
+ static $math_objects = array();
+ // ordered by performance. GMP is the fastest math library, BCMath - the slowest.
+ static $math_wrappers = array('GMP', 'BigInt', 'BCMath',);
+
+ if (isset($math_objects[$wrapper_name])) {
+ /*
+ wrapper with name $wrapper_name is already loaded and created.
+ Return reference to existing copy of wrapper
+ */
+ return $math_objects[$wrapper_name];
+ }
+
+ $err_handler = new Crypt_RSA_ErrorHandler();
+
+ if ($wrapper_name === 'default') {
+ // try to load the most suitable wrapper
+ $n = sizeof($math_wrappers);
+ for ($i = 0; $i < $n; $i++) {
+ $obj = Crypt_RSA_MathLoader::loadWrapper($math_wrappers[$i]);
+ if (!$err_handler->isError($obj)) {
+ // wrapper for $math_wrappers[$i] successfully loaded
+ // register it as default wrapper and return reference to it
+ return $math_objects['default'] = $obj;
+ }
+ }
+ // can't load any wrapper
+ $err_handler->pushError("can't load any wrapper for existing math libraries", CRYPT_RSA_ERROR_NO_WRAPPERS);
+ return $err_handler->getLastError();
+ }
+
+ $class_name = 'Crypt_RSA_Math_' . $wrapper_name;
+ $class_filename = dirname(__FILE__) . '/Math/' . $wrapper_name . '.php';
+
+ if (!is_file($class_filename)) {
+ $err_handler->pushError("can't find file [{$class_filename}] for RSA math wrapper [{$wrapper_name}]", CRYPT_RSA_ERROR_NO_FILE);
+ return $err_handler->getLastError();
+ }
+
+ include_once $class_filename;
+ if (!class_exists($class_name)) {
+ $err_handler->pushError("can't find class [{$class_name}] in file [{$class_filename}]", CRYPT_RSA_ERROR_NO_CLASS);
+ return $err_handler->getLastError();
+ }
+
+ // create and return wrapper object on success or PEAR_Error object on error
+ $obj = new $class_name;
+ if ($obj->errstr) {
+ // cannot load required extension for math wrapper
+ $err_handler->pushError($obj->errstr, CRYPT_RSA_ERROR_NO_EXT);
+ return $err_handler->getLastError();
+ }
+ return $math_objects[$wrapper_name] = $obj;
+ }
+}
+
+?>
diff --git a/mod/openid_server/actions/admin.php b/mod/openid_server/actions/admin.php
new file mode 100755
index 000000000..bdf3b8261
--- /dev/null
+++ b/mod/openid_server/actions/admin.php
@@ -0,0 +1,90 @@
+<?php
+
+/**
+ * Elgg openid_server admin action page
+ *
+ * @package openid_server
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardiner <kevin@radagast.biz>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.com/
+ *
+ * @uses the following values in $vars:
+ *
+ * 'trust' the trust object with the database information and action type
+ */
+
+require_once('../openid_server_include.php');
+
+if (isadminloggedin()) {
+ $action = trim(get_input('action'));
+ $trust_id = get_input('trust_id');
+ $show_full_form = true;
+ $body = '';
+ if ($action) {
+ $trust = new StdClass;
+ $trust->trust_root = get_input('trust_root');
+ $trust->site_name = get_input('site_name');
+ $trust->auto_login = get_input('auto_login');
+ $trust->auto_logout = get_input('auto_logout');
+ $trust->width = get_input('width');
+ $trust->height = get_input('height');
+
+ switch($action) {
+ case 'change':
+ $trust->ident = $trust_id;
+ $store->update_default_trust_root($trust_id,$trust);
+ system_message(elgg_echo('openid_server:trust_root_updated'));
+ break;
+ case 'add':
+ $store->insert_default_trust_root($trust);
+ system_message(elgg_echo('openid_server:trust_root_added'));
+ break;
+ case 'delete':
+ $store->delete_default_trust_root($trust_id);
+ system_message(elgg_echo('openid_server:trust_root_deleted'));
+ break;
+ }
+ } else {
+ if ($trust_id) {
+ $trust = $store->get_trust_root($trust_id);
+ $trust->action = 'change';
+ $body = generate_trust_form($trust);
+ $title = elgg_echo('openid_server:edit_trust_root_title');
+ $show_full_form = false;
+ }
+ }
+
+ if ($show_full_form) {
+
+ // KJ - TODO: Move this into a separate form view
+ $edit_url = $CFG->wwwroot.'mod/openid_server/admin.php?trust_id=';
+ $delete_url = $CFG->wwwroot.'mod/openid_server/admin.php?action=delete&trust_id=';
+ $title = elgg_echo('openid_server:manage_trust_root_title');
+ $results = $store->get_all_default_trust_roots();
+ if ($results) {
+ $body .= '<h2>'.elgg_echo('openid_server:trust_root_title').'</h2>'."\n";
+ $body.= '<table border="0">'."\n";
+ foreach($results as $item) {
+ $body .= '<tr><td width="150">'.$item->site_name.'</td><td width="250">'.$item->trust_root.'</td><td><a href="'
+ .$edit_url.$item->ident.'">'.elgg_echo('openid_server:edit_option').'</a></td><td><a href="'
+ .$delete_url.$item->ident.'">'.elgg_echo('openid_server:delete_option').'</a></td></tr>'."\n";
+ }
+ }
+ $body .= "</table>\n";
+ $body .= '<h2>'.elgg_echo('openid_server:add_trust_root_title').'</h2>';
+ $trust = new StdClass;
+ $trust->trust_root = '';
+ $trust->site_name = '';
+ $trust->auto_login = '';
+ $trust->auto_logout = '';
+ $trust->width = 0;
+ $trust->height = 0;
+ $trust->action = 'add';
+ $body .= generate_trust_form($trust);
+ }
+}
+
+elgg_view_page($title,$body);
+
+?>
diff --git a/mod/openid_server/actions/autologin.php b/mod/openid_server/actions/autologin.php
new file mode 100755
index 000000000..4a200fcfb
--- /dev/null
+++ b/mod/openid_server/actions/autologin.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * Elgg openid_server: autologin form
+ *
+ * @package ElggOpenID
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.org/
+ */
+
+require_once(dirname(dirname(__FILE__)).'/openid_server_include.php');
+
+require_once ('lib/common.php');
+require_once ('lib/session.php');
+
+$iframe_template = <<<END
+<iframe
+width="%s"
+height="%s"
+src="%s"
+>
+</iframe>');
+END;
+
+$openid_url = getLoggedinUser();
+$store = getOpenIDServerStore();
+$sites = $store->getAutoLoginSites();
+$request = getRequestInfo();
+if ($request) {
+ $return_url = $request->return_to;
+ setRequestInfo(null);
+} else {
+ $return_url = $CONFIG->wwwroot;
+}
+// TODO: get this to work with posts
+$iframes = '';
+foreach ($sites as $site) {
+ $iframes .= sprintf($iframe_template,$site->width,$site->height,sprintf($site->auto_login,$openid_url));
+}
+$body = elgg_view("openid_server/forms/autologin",
+ array(
+ 'iframes' => $iframes,
+ 'return_to' => $return_url,
+
+ ));
+$CONFIG->events['login'] = array();
+login();
+header("Content-type:text/html");
+print $body;
+?>
diff --git a/mod/openid_server/actions/autologout.php b/mod/openid_server/actions/autologout.php
new file mode 100755
index 000000000..36a7191c2
--- /dev/null
+++ b/mod/openid_server/actions/autologout.php
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * Elgg openid_server: autologout form
+ *
+ * @package ElggOpenID
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.org/
+ */
+
+require_once(dirname(dirname(__FILE__)).'/openid_server_include.php');
+
+require_once ('lib/common.php');
+require_once ('lib/session.php');
+
+$iframe_template = <<<END
+<iframe
+width="%s"
+height="%s"
+src="%s"
+>
+</iframe>');
+END;
+
+$store = getOpenIDServerStore();
+
+$openid_url = getLoggedinUser();
+$sites = $store->getAutoLogoutSites();
+
+// TODO: get this to work with posts
+$iframes = '';
+foreach ($sites as $site) {
+ $iframes .= sprintf($iframe_template,$site->width,$site->height,sprintf($site->auto_logout,$openid_url));
+}
+$body = elgg_view("openid_server/forms/autologout",
+ array(
+ 'iframes' => $iframes,
+
+ ));
+
+$CONFIG->events['logout'] = array();
+
+logout();
+header("Content-type:text/html");
+print $body;
+?>
diff --git a/mod/openid_server/actions/trust.php b/mod/openid_server/actions/trust.php
new file mode 100755
index 000000000..3f882125d
--- /dev/null
+++ b/mod/openid_server/actions/trust.php
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * Elgg openid_server: handle trust form
+ *
+ * @package ElggOpenID
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.org/
+ */
+
+//error_log("in trust.php");
+
+require_once(dirname(dirname(__FILE__)).'/openid_server_include.php');
+
+require_once ('lib/common.php');
+require_once ('lib/session.php');
+
+$info = getRequestInfo();
+$trusted = get_input('trust');
+$remember = get_input('remember');
+$trust_root = get_input('trust_root');
+
+$store = getOpenIDServerStore();
+if ($remember) {
+ $store->setTrustedSite($info);
+ //$store->setTrustedSite($info->trust_root);
+}
+
+if (!$info) {
+ // There is no authentication information, so bail
+ system_message(elgg_echo("openid_server:cancelled"));
+ forward();
+} else {
+
+ if ($idpSelect = $info->idSelect()) {
+ if ($idpSelect) {
+ $identity = getLoggedInUser();
+ //$req_url = idURL($idpSelect);
+ $req_url = $info->identity;
+ //XXX fixing dirty https stuff
+ //$req_url = str_replace('http', 'https', $req_url);
+ } else {
+ $trusted = false;
+ }
+ } else {
+ $req_url = normaliseUsername($info->identity);
+ }
+
+
+ $user = getLoggedInUser();
+ $identity = $user;
+
+ setRequestInfo($info);
+ $req_url_path = substr($req_url, strpos($req_url, ":"));
+ $user_path = substr($user, strpos($user, ":"));
+
+ if ($info->message->isOpenID1() && $req_url_path != $user_path) {
+ register_error(sprintf(elgg_echo("openid_server:loggedin_as_wrong_user"),$req_url, $user));
+ forward();
+ } else {
+ $trust_root = $info->trust_root;
+ $trusted = isset($trusted) ? $trusted : isTrusted($identity, $trust_root);
+ if ($trusted) {
+ setRequestInfo();
+ $server =& getServer();
+ if ($info->message->isOpenID1())
+ $response =& $info->answer(true, null, $req_url);
+ else
+ $response =& $info->answer(true, null, getServerURL(), $identity);
+
+ addSregFields($response, $info, $identity);
+ $webresponse =& $server->encodeResponse($response);
+
+ $new_headers = array();
+
+ foreach ($webresponse->headers as $k => $v) {
+ $new_headers[] = $k.": ".$v;
+ }
+
+ writeResponse( array($new_headers, $webresponse->body));
+ exit(0);
+ } elseif ($fail_cancels) {
+ setRequestInfo();
+ forward($info->getCancelURL());
+ } else {
+ writeResponse(trust_render($info));
+ }
+ }
+}
+
+?>
diff --git a/mod/openid_server/languages/ca.php b/mod/openid_server/languages/ca.php
new file mode 100644
index 000000000..0b0e67659
--- /dev/null
+++ b/mod/openid_server/languages/ca.php
@@ -0,0 +1,40 @@
+<?php
+
+// Generat per translationbrowser
+
+$catalan = array(
+ 'openid_server:trust_title' => "Verifica" ,
+ 'openid_server:trust_question' => "Vols confirmar el teu OpenID ( %s ) amb %s ?" ,
+ 'openid_server:remember_trust' => "Recorda la decisió" ,
+ 'openid_server:confirm_trust' => "Si" ,
+ 'openid_server:reject_trust' => "No" ,
+ 'openid_server:not_logged_in' => "T'hauries d'identificar per aprovar la petició." ,
+ 'openid_server:loggedin_as_wrong_user' => "T'has d'identificar com %s per aprovar la petició. Ara mateix estàs identificat com %s." ,
+ 'openid_server:trust_root' => "Verifica l'arrel" ,
+ 'openid_server:trust_site' => "Verifica la xarxa" ,
+ 'openid_server:autologin_url' => "Auto-login URL:" ,
+ 'openid_server:autologout_url' => "Auto-logout URL:" ,
+ 'openid_server:iframe_width' => "amplada de l'iframe (en píxels)" ,
+ 'openid_server:iframe_height' => "alçada de l'iframe (en píxels)" ,
+ 'openid_server:change_button' => "Canviar" ,
+ 'openid_server:add_button' => "Afegir" ,
+ 'openid_server:trust_root_updated' => "Verificació de l'arrel actualitzada" ,
+ 'openid_server:trust_root_added' => "Verificació de l'arrel afegida" ,
+ 'openid_server:trust_root_deleted' => "Verificació de l'arrel esborrada" ,
+ 'openid_server:edit_trust_root_title' => "Modifica la verificació" ,
+ 'openid_server:manage_trust_root_title' => "Organitza la verificació d'arrels per defecte" ,
+ 'openid_server:trust_root_title' => "Verificació d'arrels per defecte" ,
+ 'openid_server:edit_option' => "Modifica" ,
+ 'openid_server:delete_option' => "Esborra" ,
+ 'openid_server:add_trust_root_title' => "Afegir verificació de l'arrel per defecte" ,
+ 'openid_server:autologin_title' => "Entrant" ,
+ 'openid_server:autologin_body' => "Entrant... siusplau, espera" ,
+ 'openid_server:autologout_title' => "Sortint" ,
+ 'openid_server:autologout_body' => "Sortint... siusplau, espera" ,
+ 'item:object:openid_server::trusted_root' => "Accessos openid" ,
+ 'openid_server:admin_explanation' => "Pots fer servir aquesta pàgina per a definir l'arrel verificada del teu servidor OpenID. Aquestes aplicacions client per a OpenID es verifiquen automàticament per a persones que fan servir l'OpenID que proveeix al teu servidor i són realment útils si només vols fer servir OpenID de forma integrada en una federació d'aplicacions verificades. (No necessites fer res si no tens cap aplicació d'aquest tipus.) Pots configurar les URL de autologin i autologout per a algunes o totes les aplicacions verificades si vols que els teus usuaris s'identifiquin i es desconnectin automàticament contra un servidor OpenID. Normalment els autologin i els autologout es col·loquen a iframes invisibles. Si estàs debuggant això i vols que l'iframe sigui visible, pots configurar l'ample i l'alçada més avall."
+);
+
+add_translation('ca', $catalan);
+
+?> \ No newline at end of file
diff --git a/mod/openid_server/languages/en.php b/mod/openid_server/languages/en.php
new file mode 100755
index 000000000..994240861
--- /dev/null
+++ b/mod/openid_server/languages/en.php
@@ -0,0 +1,47 @@
+<?php
+
+ $english = array(
+ 'item:user:openid' => "OpenID users",
+ 'openid_server:trust_title' => "Trust",
+ 'openid_server:trust_question' => "Do you wish to confirm your OpenID (<code>%s</code>) with <code>%s</code>?",
+ 'openid_server:remember_trust' => "Remember this decision",
+ 'openid_server:confirm_trust' => "Yes",
+ 'openid_server:reject_trust' => "No",
+ 'openid_server:not_logged_in' => "You must be logged-in to approve this request. Please login now.",
+ 'openid_server:loggedin_as_wrong_user' => "You must be logged-in as %s to approve this request."
+ ." You are currently logged-in as %s instead.",
+ 'openid_server:trust_root' => "Trust root",
+ 'openid_server:trust_site' => "Trust site",
+ 'openid_server:autologin_url' => "Auto-login URL:",
+ 'openid_server:autologout_url' => "Auto-logout URL:",
+ 'openid_server:iframe_width' => "Iframe width (in pixels)",
+ 'openid_server:iframe_height' => "Iframe height (in pixels)",
+ 'openid_server:change_button' => "Change",
+ 'openid_server:add_button' => "Add",
+ 'openid_server:admin_explanation' => "You can use this page to set default trust roots for your OpenID server."
+ ." These are OpenID client applications that are automatically trusted by people using OpenIDs provided by your server and are"
+ ." useful only if you are using OpenID to integrate a federation of trusted applications. (You need do nothing here if you have no"
+ ." trusted applications.) You can also set autologin and autologout URLs for some or all of your trusted applications if you"
+ ." want your users to be automatically logged in or logged out of these applications when they login and logout of your"
+ ." OpenID server. Normally the autologin and autologout takes place in invisible iframes. If you are debugging this and want"
+ ." the iframes to be visible, you can set the width and height below.",
+ 'openid_server:trust_root_updated' => "Trust root updated",
+ 'openid_server:trust_root_added' => "Trust root added",
+ 'openid_server:trust_root_deleted' => "Trust root deleted",
+ 'openid_server:edit_trust_root_title' => "Edit trust record",
+ 'openid_server:manage_trust_root_title' => "Manage default trust roots",
+ 'openid_server:trust_root_title' => "Default trust roots",
+ 'openid_server:edit_option' => "Edit",
+ 'openid_server:delete_option' => "Delete",
+ 'openid_server:add_trust_root_title' => "Add default trust root",
+ 'openid_server:autologin_title' => "Logging in",
+ 'openid_server:autologin_body' => "Logging in ... please wait",
+ 'openid_server:autologout_title' => "Logging out",
+ 'openid_server:autologout_body' => "Logging out ... please wait",
+ 'item:object:openid_server::trusted_root' => "Openid trusted sites",
+
+ );
+
+ add_translation("en",$english);
+
+?>
diff --git a/mod/openid_server/languages/es.php b/mod/openid_server/languages/es.php
new file mode 100755
index 000000000..eada7cd72
--- /dev/null
+++ b/mod/openid_server/languages/es.php
@@ -0,0 +1,40 @@
+<?php
+
+// Generado por translationbrowser
+
+$spanish = array(
+ 'openid_server:trust_title' => "Verificar" ,
+ 'openid_server:trust_question' => "¿Quieres confirmar tu OpenID (<code>%s</code>) con <code>%s</code>?" ,
+ 'openid_server:remember_trust' => "Recordar la decisión" ,
+ 'openid_server:confirm_trust' => "Sí" ,
+ 'openid_server:reject_trust' => "No" ,
+ 'openid_server:not_logged_in' => "Tienes que haber iniciado sesión para aprobar la petición." ,
+ 'openid_server:loggedin_as_wrong_user' => "Tienes que haber iniciado sesión como %s para aprobar la petición. Ahora mismo apareces como %s." ,
+ 'openid_server:trust_root' => "Verificar raíz" ,
+ 'openid_server:trust_site' => "Verificar sitio" ,
+ 'openid_server:autologin_url' => "Url de autoinicio de sesión:" ,
+ 'openid_server:autologout_url' => "Url de autocierre de sesión:" ,
+ 'openid_server:iframe_width' => "Anchura del iframe (en pixels)" ,
+ 'openid_server:iframe_height' => "Altura del iframe (en pixels)" ,
+ 'openid_server:change_button' => "Cambiar" ,
+ 'openid_server:add_button' => "Añadir" ,
+ 'openid_server:admin_explanation' => "Puedes utilizar esta página para definir la raíz verificada de tu servidor OpenID. Estas aplicaciones cliente para OpenID son automáticamente verificadas por gente que utiliza el OpenID que provee tu server y son muy útiles solo si quieres usar OpenID de forma integrada en una federación de aplicaciones verificadas. (No necesitas hacer nada si no tienes ninguna aplicación de ese tipo). Puedes configurar las URLs de autologin y autologout para algunas o todas las aplicaciones verificadas si quieres que las habitantes sean automáticamente logueadas y deslogueadas del OpenID server. Normalmente los autologin y autologout se colocan en iframes invisibles. Si estas debuggeando esto y quieres que el iframe sea visible, puedes configurar el ancho y el alto debajo." ,
+ 'openid_server:trust_root_updated' => "Verificación de raíz actualizada" ,
+ 'openid_server:trust_root_added' => "Verificación de raíz añadida" ,
+ 'openid_server:trust_root_deleted' => "Verificación de raíz borrada" ,
+ 'openid_server:edit_trust_root_title' => "Editar verificación" ,
+ 'openid_server:manage_trust_root_title' => "Organizar verificación de raíces por defecto" ,
+ 'openid_server:trust_root_title' => "Verificación de raíces por defecto" ,
+ 'openid_server:edit_option' => "Editar" ,
+ 'openid_server:delete_option' => "Borrar" ,
+ 'openid_server:add_trust_root_title' => "Añadir verificación de raíz por defecto" ,
+ 'openid_server:autologin_title' => "Logueando" ,
+ 'openid_server:autologin_body' => "Logueando ... por favor espera" ,
+ 'openid_server:autologout_title' => "Logging out" ,
+ 'openid_server:autologout_body' => "Deslogueando... por favor espera" ,
+ 'item:object:openid_server::trusted_root' => "Accesos OpenID"
+);
+
+add_translation('es', $spanish);
+
+?> \ No newline at end of file
diff --git a/mod/openid_server/languages/gl.php b/mod/openid_server/languages/gl.php
new file mode 100644
index 000000000..1fa29af1e
--- /dev/null
+++ b/mod/openid_server/languages/gl.php
@@ -0,0 +1,40 @@
+<?php
+
+// Xerado por translationbrowser
+
+$galician = array(
+ 'openid_server:trust_title' => "Verificar" ,
+ 'openid_server:trust_question' => "Queres confirma-lo teu OpenId (%s) con %s?" ,
+ 'openid_server:remember_trust' => "Recorda-la decisión" ,
+ 'openid_server:confirm_trust' => "Si" ,
+ 'openid_server:reject_trust' => "Non" ,
+ 'openid_server:not_logged_in' => "Tes que ter iniciado a sesión para aproba-la petición." ,
+ 'openid_server:loggedin_as_wrong_user' => "Tes que ter iniciado a sesión como %s para aproba-la petición. Agora xa apareces como %s." ,
+ 'openid_server:trust_root' => "Verifica-la raíz" ,
+ 'openid_server:trust_site' => "Verifica-lo sitio" ,
+ 'openid_server:autologin_url' => "Url do autoinicio da sesión:" ,
+ 'openid_server:autologout_url' => "Url do autopeche da sesión:" ,
+ 'openid_server:iframe_width' => "Anchura do iframe (en pixels)" ,
+ 'openid_server:iframe_height' => "Altura do iframe (en pixels)" ,
+ 'openid_server:change_button' => "Cambiar" ,
+ 'openid_server:add_button' => "Engadir" ,
+ 'openid_server:admin_explanation' => "Podes empregar esta páxina para defini-la raíz verificada do teu servidor OpenID. Estas aplicacións cliente para OpenID son automaticamente verificadas pola xente que emprega o OpenID que provee ó teu server e son moi útiles só se queres usa-lo OpenID de forma integrada nunha federación de aplicacións verificadas. (Non necesitas facer nada se non tes ningunha aplicación deste tipo). Podes configura-las URL do autoinicio e autopeche para algunhas ou toda-las aplicacións verificadas se queres que xs habitantes sexan automaticamente logueadas e deslogueadas do OpenID server. Normalmente os autoinicio e autopeche colócanse en iframes invisibles. Se estás a debuggear isto e queres que o iframe sexa visible, podes configura-lo ancho e o alto embaixo." ,
+ 'openid_server:trust_root_updated' => "Verificación da raíz actualizada" ,
+ 'openid_server:trust_root_added' => "Verificación da raíz engadida" ,
+ 'openid_server:trust_root_deleted' => "Verificación da raíz borrada" ,
+ 'openid_server:edit_trust_root_title' => "Edita-la verificación" ,
+ 'openid_server:manage_trust_root_title' => "Organiza la verificación das raíces por defecto" ,
+ 'openid_server:trust_root_title' => " Verificación das raíces por defecto" ,
+ 'openid_server:edit_option' => "Editar" ,
+ 'openid_server:delete_option' => "Borrar" ,
+ 'openid_server:add_trust_root_title' => "Engadi-la verificación de raíz por defecto" ,
+ 'openid_server:autologin_title' => "Logueando" ,
+ 'openid_server:autologin_body' => "Logueando... por favor agarda un chisco" ,
+ 'openid_server:autologout_title' => "Logging out" ,
+ 'openid_server:autologout_body' => "Deslogueando... por favor agarda un chisco" ,
+ 'item:object:openid_server::trusted_root' => "Accesos OpenID"
+);
+
+add_translation('gl', $galician);
+
+?> \ No newline at end of file
diff --git a/mod/openid_server/languages/pt.php b/mod/openid_server/languages/pt.php
new file mode 100644
index 000000000..eda853302
--- /dev/null
+++ b/mod/openid_server/languages/pt.php
@@ -0,0 +1,27 @@
+<?php
+
+// Gerado pelo browser de tradução.
+
+$portuguese = array(
+ 'item:user:openid' => "Usuarixs OpenID" ,
+ 'openid_server:trust_question' => "Você confirma a tua OpenID (%s) com %s ?" ,
+ 'openid_server:remember_trust' => "Lembrar esta decisão" ,
+ 'openid_server:confirm_trust' => "Sim" ,
+ 'openid_server:reject_trust' => "Não" ,
+ 'openid_server:not_logged_in' => "Você tem que estar autentificado para aprovar este pedido. Por favor autentifique-se agora." ,
+ 'openid_server:loggedin_as_wrong_user' => "Você tem que estar autentificado como %s para aprovar este pedido. Atualmente você está autentificado como %s." ,
+ 'openid_server:autologin_url' => "Link para auto-autentificação:" ,
+ 'openid_server:autologout_url' => "Link para auto-desautentificação:" ,
+ 'openid_server:change_button' => "Mudar" ,
+ 'openid_server:add_button' => "Adicionar" ,
+ 'openid_server:edit_option' => "Editar" ,
+ 'openid_server:delete_option' => "Apagar" ,
+ 'openid_server:autologin_title' => "Autentificando" ,
+ 'openid_server:autologin_body' => "Autentificando... Por favor espere" ,
+ 'openid_server:autologout_title' => "Saindo" ,
+ 'openid_server:autologout_body' => "Saindo... Por favor espere"
+);
+
+add_translation('pt', $portuguese);
+
+?> \ No newline at end of file
diff --git a/mod/openid_server/lib/actions.php b/mod/openid_server/lib/actions.php
new file mode 100755
index 000000000..f5f05d952
--- /dev/null
+++ b/mod/openid_server/lib/actions.php
@@ -0,0 +1,173 @@
+<?php
+
+require_once "common.php";
+require_once "session.php";
+
+require_once "Auth/OpenID.php";
+
+/**
+ * Handle a standard OpenID server request
+ */
+function action_default()
+{
+ global $store;
+
+ $server =& getServer();
+ $method = $_SERVER['REQUEST_METHOD'];
+ /*$request = null;
+ if ($method == 'GET') {
+ $request = $_GET;
+ } else {
+ $request = $_POST;
+ } */
+
+ $request = $server->decodeRequest();
+
+ if (!$request) {
+ return ""; //about_render();
+ }
+
+ setRequestInfo($request);
+
+ if (in_array($request->mode,
+ array('checkid_immediate', 'checkid_setup'))) {
+
+
+ $identity = getLoggedInUser();
+ if (isTrusted($identity, $request->trust_root, $request->return_to)) {
+ if ($request->message->isOpenID1()) {
+ $response =& $request->answer(true);
+ } else {
+ $response =& $request->answer(true, false, getServerURL(), $identity);
+ }
+ } else if ($request->immediate) {
+ $response =& $request->answer(false, getServerURL());
+ } else {
+ if (!getLoggedInUser()) {
+ $_SESSION['last_forward_from'] = current_page_url().'?'.http_build_query(Auth_OpenID::getQuery());
+ system_message(elgg_echo('openid_server:not_logged_in'));
+ forward('login');
+ }
+ return trust_render($request);
+ }
+ addSregFields(&$response);
+
+ } else {
+ $response =& $server->handleRequest($request);
+ }
+
+ $webresponse =& $server->encodeResponse($response);
+
+ foreach ($webresponse->headers as $k => $v) {
+ header("$k: $v");
+ }
+
+ header(header_connection_close);
+ print $webresponse->body;
+ exit(0);
+}
+
+/**
+ * Log out the currently logged in user
+ */
+function action_logout()
+{
+ setLoggedInUser(null);
+ setRequestInfo(null);
+ return authCancel(null);
+}
+
+/**
+ * Check the input values for a login request
+ */
+function login_checkInput($input)
+{
+ $openid_url = false;
+ $errors = array();
+
+ if (!isset($input['openid_url'])) {
+ $errors[] = gettext('Enter an OpenID URL to continue');
+ }
+ if (!isset($input['password'])) {
+ $errors[] = gettext('Enter a password to continue');
+ }
+ if (count($errors) == 0) {
+ $openid_url = $input['openid_url'];
+ // don't normalise yet
+ // $openid_url = Auth_OpenID::normalizeUrl($openid_url);
+ $password = $input['password'];
+ if (!checkLogin($openid_url, $password)) {
+ $errors[] = 'The entered password does not match the ' .
+ 'entered identity URL.';
+ }
+ }
+ return array($errors, $openid_url);
+}
+
+/**
+ * Log in a user and potentially continue the requested identity approval
+ */
+function action_login()
+{
+ $method = $_SERVER['REQUEST_METHOD'];
+ switch ($method) {
+ case 'GET':
+ return login_render();
+ case 'POST':
+ $info = getRequestInfo();
+ $fields = $_POST;
+ if (isset($fields['cancel'])) {
+ return authCancel($info);
+ }
+
+ list ($errors, $openid_url) = login_checkInput($fields);
+ if (count($errors) || !$openid_url) {
+ $needed = $info ? $info->identity : false;
+ //KJ - use $openid_url instead
+ // return login_render($errors, @$fields['openid_url'], $needed);
+ return login_render($errors, $openid_url, $needed);
+ } else {
+ setLoggedInUser(normaliseUsername($openid_url));
+ return doAuth($info);
+ }
+ default:
+ return login_render(array('Unsupported HTTP method: $method'));
+ }
+}
+
+/**
+ * Ask the user whether he wants to trust this site
+ */
+function action_trust()
+{
+ global $store;
+
+ $info = getRequestInfo();
+ $trusted = isset($_POST['trust']);
+ if ($info && isset($_POST['remember'])) {
+ $store->setTrustedSite($info->trust_root);
+ }
+ return doAuth($info, $trusted, true);
+}
+
+function action_sites()
+{
+ global $store;
+
+ $sites = $store->getTrustedSites();
+
+ if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+ if (isset($_POST['forget'])) {
+ $store->removeAllTrustedSites();
+ } elseif (isset($_POST['remove'])) {
+ foreach ($_POST as $k => $v) {
+ if (preg_match('/^site[0-9]+$/', $k)) {
+ $store->removeTrustedSite($v);
+ }
+ }
+ }
+ }
+ return sites_render($store->getTrustedSites());
+}
+
+?>
diff --git a/mod/openid_server/lib/common.php b/mod/openid_server/lib/common.php
new file mode 100755
index 000000000..3e3e6b034
--- /dev/null
+++ b/mod/openid_server/lib/common.php
@@ -0,0 +1,164 @@
+<?php
+
+require_once "session.php";
+
+require_once "Auth/OpenID/Server.php";
+require_once "Auth/OpenID/SReg.php";
+try {
+ // include_once "Auth/OpenID/HMACSHA1.php";
+} catch(Exception $e) {
+ // new way :P
+ require_once "Auth/OpenID/HMAC.php";
+}
+
+function getUsernameFromUrl($url)
+{
+ $un = trim($url);
+ $lun = strlen($un);
+ $last_stroke_pos = strrpos($un,"/");
+ if ($last_stroke_pos === false) {
+ // no slash, so assume that this is already a username
+ $username = $url;
+ } else {
+ if ($last_stroke_pos == ($lun - 1)) {
+ // this url ends in a slash - ignore it
+ $un = substr($un, 0,-1);
+ }
+ $last_stroke_pos = strrpos($un,"/");
+ $username = substr($un,$last_stroke_pos+1);
+ }
+
+ return $username;
+}
+
+function normaliseUsername($username)
+// check to see if the current username contains a slash
+// if so, assume that this is an OpenID URL
+// if not, munge it until it is
+// normalise OpenID URLs to include a closing slash
+{
+ global $CONFIG;
+
+ $stroke_pos = strpos($username,"/");
+ if ($stroke_pos === false) {
+ return $CONFIG->wwwroot."profile/".$username;
+ } else {
+ if (substr($username,-1,1) == "/") {
+ return substr($username, 0, strlen($username-1));
+ } else {
+ return $username;
+ }
+ }
+}
+
+function addSregFields(&$response,$info, $req_url)
+{
+ $username = getUsernameFromUrl($req_url);
+ $user = get_user_by_username($username);
+ if ($user) {
+ $email = $user->email;
+ $fullname = $user->name;
+
+ $sreg_data = array(
+ 'fullname' => $fullname,
+ 'email' => $email
+ );
+
+ // Add the simple registration response values to the OpenID
+ // response message.
+ $sreg_request = Auth_OpenID_SRegRequest::fromOpenIDRequest($info);
+
+ $sreg_response = Auth_OpenID_SRegResponse::extractResponse(
+ $sreg_request, $sreg_data);
+ //error_log('DEBUG:' . (string)($response->fields));
+ $sreg_response->toMessage($response->fields);
+ }
+
+}
+
+// KJ - this code is now used in trust.php
+
+/*function authCancel($info)
+{
+ if ($info) {
+ setRequestInfo();
+ $url = $info->getCancelURL();
+ } else {
+ $url = getServerURL();
+ }
+ return redirect_render($url);
+}
+
+function doAuth($info, $trusted=null, $fail_cancels=false,$idpSelect=null)
+{
+ if (!$info) {
+ // There is no authentication information, so bail
+ return authCancel(null);
+ }
+
+ if ($info->idSelect()) {
+ if ($idpSelect) {
+ $req_url = idURL($idpSelect);
+ } else {
+ $trusted = false;
+ }
+ } else {
+ $req_url = normaliseUsername($info->identity);
+ }
+
+ $user = getLoggedInUser();
+ setRequestInfo($info);
+
+ if ($req_url != $user) {
+ return login_render(array(), $req_url, $req_url);
+ }
+
+ $trust_root = $info->trust_root;
+ // $fail_cancels = $fail_cancels || isset($sites[$trust_root]);
+ $trusted = isset($trusted) ? $trusted : isTrusted($req_url,$trust_root);
+ if ($trusted) {
+ setRequestInfo();
+ $server =& getServer();
+ $response =& $info->answer(true, null, $req_url);
+
+ addSregFields($response, $info, $req_url);
+
+ $webresponse =& $server->encodeResponse($response);
+
+ $new_headers = array();
+
+ foreach ($webresponse->headers as $k => $v) {
+ $new_headers[] = $k.": ".$v;
+ }
+
+ return array($new_headers, $webresponse->body);
+ } elseif ($fail_cancels) {
+ return authCancel($info);
+ } else {
+ return trust_render($info);
+ }
+}*/
+
+
+function trust_render($info) {
+
+ $vars = array('openid_url' =>getLoggedInUser(), 'openid_trust_root' =>htmlspecialchars($info->trust_root));
+ $title = elgg_echo('openid_server:trust_title');
+ return array(
+ array(),
+ elgg_view_page(
+ $title,
+ elgg_view_layout('content', array(
+ 'title' => $title,
+ 'content' => elgg_view_form("openid_server/trust", array(), $vars),
+ 'filter' => false,
+ ))
+ ));
+}
+
+function login_render($errors=null, $input=null, $needed=null) {
+ system_message(elgg_echo('openid_server:not_logged_in'));
+ forward(current_page_url());
+}
+
+?>
diff --git a/mod/openid_server/lib/session.php b/mod/openid_server/lib/session.php
new file mode 100755
index 000000000..ccd1e8f4c
--- /dev/null
+++ b/mod/openid_server/lib/session.php
@@ -0,0 +1,140 @@
+<?php
+
+//require_once(dirname(dirname(__FILE__)).'/config.php');
+//require_once "render.php";
+
+require_once "Auth/OpenID/Server.php";
+
+// require_once('elgg/includes.php');
+
+/**
+ * Set up the session
+ */
+// get information from Elgg if logged in
+// KJ - this should not be necessary as it can always be generated from the user name
+function init()
+{
+ global $CFG;
+
+ if (elgg_is_logged_in()) {
+ setLoggedInUser(normaliseUsername($_SESSION['user']->username));
+ } else {
+ setLoggedInUser(null);
+ }
+}
+
+
+/**
+ * Get the URL of the current script
+ */
+function getServerURL()
+{
+ global $CONFIG;
+
+ return $CONFIG->wwwroot.'mod/openid_server/server.php';
+}
+
+/**
+ * Build a URL to a server action
+ */
+function buildURL($action=null, $escaped=true)
+{
+ $url = getServerURL();
+ if ($action) {
+ $url .= '/' . $action;
+ }
+ return $escaped ? htmlspecialchars($url, ENT_QUOTES) : $url;
+}
+
+/**
+ * Extract the current action from the request
+ * KJ - this should be replaced by Elgg 1 action system
+ */
+function getAction()
+{
+ $path_info = @$_SERVER['PATH_INFO'];
+ $action = ($path_info) ? substr($path_info, 1) : '';
+ $function_name = 'action_' . $action;
+ return $function_name;
+}
+
+/**
+ * Write the response to the request
+ */
+function writeResponse($resp)
+{
+ list ($headers, $body) = $resp;
+ array_walk($headers, 'header');
+ header(header_connection_close);
+ print $body;
+}
+
+/**
+ * Instantiate a new OpenID server object
+ */
+function getServer()
+{
+ global $CONFIG;
+ static $server;
+ $op_endpoint = getServerURL();
+ if (!isset($server)) {
+ $server =& new Auth_OpenID_Server(getOpenIDServerStore(),$op_endpoint);
+ }
+ return $server;
+}
+
+/**
+ * Return whether the trust root is currently trusted
+ *
+ */
+function isTrusted($identity_url, $trust_root, $return_to)
+{
+ global $store;
+
+ if ($identity_url != getLoggedInUser()) {
+ return false;
+ }
+
+ $sites = $store->getTrustedSites($identity_url);
+
+ if (empty($sites)) {
+ return false;
+ } else {
+ return in_array($trust_root, $sites) && fnmatch($trust_root.'*',$return_to);
+ }
+}
+
+
+/**
+ * Get the openid_url out of the cookie
+ *
+ * @return mixed $openid_url The URL that was stored in the cookie or
+ * false if there is none present or if the cookie is bad.
+ */
+function getLoggedInUser()
+{
+ global $CONFIG;
+ if (elgg_is_logged_in()) {
+ return $CONFIG->wwwroot.'profile/'.$_SESSION['user']->username;
+ } else {
+ return '';
+ }
+}
+
+function getRequestInfo()
+{
+ return isset($_SESSION['openid_server_request'])
+ ? unserialize($_SESSION['openid_server_request'])
+ : false;
+}
+
+function setRequestInfo($info=null)
+{
+ if (!isset($info)) {
+ unset($_SESSION['openid_server_request']);
+ } else {
+ $_SESSION['openid_server_request'] = serialize($info);
+ }
+}
+
+?>
diff --git a/mod/openid_server/manifest.xml b/mod/openid_server/manifest.xml
new file mode 100755
index 000000000..87218e62c
--- /dev/null
+++ b/mod/openid_server/manifest.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>OpenID Server</name>
+ <author>Lorea developers</author>
+ <version>1.8.0</version>
+ <description>OpenID provider for Elgg.</description>
+ <category>auth</category>
+ <category>user</category>
+ <website>https://lorea.org/</website>
+ <copyright>(C) Lorea 2012</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <requires>
+ <type>plugin</type>
+ <name>openid_api</name>
+ </requires>
+</plugin_manifest>
diff --git a/mod/openid_server/openid_server_include.php b/mod/openid_server/openid_server_include.php
new file mode 100755
index 000000000..6fbd319c4
--- /dev/null
+++ b/mod/openid_server/openid_server_include.php
@@ -0,0 +1,340 @@
+<?php
+/**
+ * An Elgg 1.x compatible store implementation
+ */
+
+ /**
+ * Require base class for creating a new interface.
+ */
+
+require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+
+require_once 'Auth/OpenID.php';
+require_once 'Auth/OpenID/Interface.php';
+require_once 'Auth/OpenID/Consumer.php';
+try {
+ // include_once "Auth/OpenID/HMACSHA1.php";
+} catch(Exception $e) {
+ // new way :P
+ require_once "Auth/OpenID/HMAC.php";
+}
+require_once 'Auth/OpenID/Nonce.php';
+require_once 'Auth/OpenID/SReg.php';
+
+define('header_connection_close', 'Connection: close');
+
+function openid_server_delete_entity($entity)
+{
+ global $CONFIG;
+
+ $entity->clearMetadata();
+ $entity->clearAnnotations();
+ $guid = $entity->getGUID();
+ delete_data("DELETE from {$CONFIG->dbprefix}entities where guid={$guid}");
+}
+
+
+
+function openid_server_delete_entities($type = "", $subtype = "", $owner_guid = 0)
+ {
+ $entities = get_entities($type, $subtype, $owner_guid, "time_created desc", 0);
+
+ foreach ($entities as $entity) {
+ openid_server_delete_entity($entity);
+ }
+
+ return true;
+ }
+
+
+
+class OpenIDServer_ElggStore extends Auth_OpenID_OpenIDStore {
+
+ function resetAssociations () {
+ openid_server_delete_entities('object', 'openid_client::association');
+ }
+ function resetNonces () {
+ openid_server_delete_entities('object', 'openid_client::nonce');
+ }
+ function getAssociation ($server_url, $handle = null) {
+ if (isset($handle)) {
+ $meta_array = array(
+ 'server_url' => $server_url,
+ 'handle' => $handle
+ );
+ $assocs = elgg_get_entities_from_metadata(array('metadata_name_value_pairs' => $meta_array, 'types' => 'object', 'subtypes' => 'openid_client::association', 'metadata_name_value_pairs_operator' => 'and'));
+ } else {
+ $assocs = elgg_get_entities_from_metadata(array('metadata_names' => 'server_url', 'metadata_values' => $server_url, 'types' => 'object', 'subtypes' => 'openid_client::association', 'metadata_case_sensitive' => FALSE));
+ }
+
+ if (!$assocs || (count($assocs) == 0)) {
+ return null;
+ } else {
+ $associations = array();
+
+ foreach ($assocs as $assoc_row) {
+ $assoc = new Auth_OpenID_Association($assoc_row->handle,
+ base64_decode($assoc_row->secret),
+ $assoc_row->issued,
+ $assoc_row->lifetime,
+ $assoc_row->assoc_type);
+
+ if ($assoc->getExpiresIn() == 0) {
+ OpenIDServer_ElggStore::removeAssociation($server_url, $assoc->handle);
+ } else {
+ $associations[] = array($assoc->issued, $assoc);
+ }
+ }
+
+ if ($associations) {
+ $issued = array();
+ $assocs = array();
+ foreach ($associations as $key => $assoc) {
+ $issued[$key] = $assoc[0];
+ $assocs[$key] = $assoc[1];
+ }
+
+ array_multisort($issued, SORT_DESC, $assocs, SORT_DESC,
+ $associations);
+
+ // return the most recently issued one.
+ list($issued, $assoc) = $associations[0];
+ return $assoc;
+ } else {
+ return null;
+ }
+ }
+ }
+
+ function removeAssociation ($server_url, $handle) {
+ if (isset($handle)) {
+ $meta_array = array(
+ 'server_url' => $server_url,
+ 'handle' => $handle
+ );
+ $entities = elgg_get_entities_from_metadata(array('metadata_name_value_pairs' => $meta_array, 'types' => 'object', 'subtypes' => 'openid_client::association', 'metadata_name_value_pairs_operator' => 'and'));
+ } else {
+ $entities = elgg_get_entities_from_metadata(array('metadata_names' => 'server_url', 'metadata_values' => $server_url, 'types' => 'object', 'subtypes' => 'openid_client::association', 'metadata_case_sensitive' => FALSE));
+ }
+ if ($entities) {
+ foreach ($entities as $entity) {
+ openid_server_delete_entity($entity);
+ }
+ }
+ }
+ function reset () {
+ OpenIDServer_ElggStore::resetAssociations ();
+ OpenIDServer_ElggStore::resetNonces ();
+ }
+
+ function storeAssociation ($server_url, $association) {
+
+ // Initialise a new ElggObject
+ $association_obj = new ElggObject();
+
+ $association_obj->subtype = 'openid_client::association';
+ $association_obj->owner_guid = 0;
+ $association_obj->access_id = 2;
+ $association_obj->title = 'association';
+
+ if ($association_obj->save()) {
+ $association_obj->server_url = $server_url;
+ $association_obj->handle = $association->handle;
+ $association_obj->secret = base64_encode($association->secret);
+ $association_obj->issued = $association->issued;
+ $association_obj->lifetime = $association->lifetime;
+ $association_obj->assoc_type = $association->assoc_type;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function useNonce ( $server_url, $timestamp, $salt) {
+ global $Auth_OpenID_SKEW;
+
+ if ( abs($timestamp - time()) > $Auth_OpenID_SKEW ) {
+ return false;
+ }
+
+ // check to see if the nonce already exists
+
+ $meta_array = array(
+ 'server_url' => $server_url,
+ 'timestamp' => $timestamp,
+ 'salt' => $salt
+ );
+
+ $entities = elgg_get_entities_from_metadata(array('metadata_name_value_pairs' => $meta_array, 'types' => 'object', 'subtypes' => 'openid_client::nonce', 'metadata_name_value_pairs_operator' => 'and'));
+
+ if ($entities) {
+ // bad - this nonce is already in use
+ return false;
+ } else {
+ // Initialise a new ElggObject
+ $nonce_obj = new ElggObject();
+
+ $nonce_obj->subtype = 'openid_client::nonce';
+ $nonce_obj->owner_guid = 0;
+ $nonce_obj->title = 'nonce';
+
+ if ($nonce_obj->save()) {
+ $nonce_obj->server_url = $server_url;
+ $nonce_obj->timestamp = $timestamp;
+ $nonce_obj->salt = $salt;
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ function getTrustedSites() {
+
+ $results = elgg_get_entities_from_metadata(array('metadata_names' => 'openid_url', 'metadata_values' => getLoggedInUser(), 'types' => 'object', 'subtypes' => 'openid_server::trust_root', 'metadata_case_sensitive' => FALSE));
+
+ $sites = array();
+ if ($results) {
+ foreach ($results as $site) {
+ $sites[] = $site->trust_root;
+ }
+ }
+ return $sites;
+ }
+
+/**
+ * Returns the autologin URLs for every trusted site
+ */
+
+ function getAutoLoginSites() {
+
+ $default_trusted_sites = elgg_get_entities_from_metadata(array('metadata_names' => 'openid_url', 'metadata_values' => '', 'types' => 'object', 'subtypes' => 'openid_server::trust_root', 'metadata_case_sensitive' => FALSE));
+
+ $sites = array();
+ if ($default_trusted_sites) {
+ foreach ($default_trusted_sites as $site) {
+ if ($site->auto_login_url) {
+ $sites[] = $site;
+ }
+ }
+ }
+ return $sites;
+ }
+
+/**
+ * Returns the autologout URLs for every trusted site
+ */
+
+ function getAutoLogoutSites() {
+
+ $default_trusted_sites = elgg_get_entities_from_metadata(array('metadata_names' => 'openid_url', 'metadata_values' => '', 'types' => 'object', 'subtypes' => 'openid_server::trust_root', 'metadata_case_sensitive' => FALSE));
+
+ $sites = array();
+ if ($default_trusted_sites) {
+ foreach ($default_trusted_sites as $site) {
+ if ($site->auto_logout_url) {
+ $sites[] = $site;
+ }
+ }
+ }
+ return $sites;
+ }
+
+
+ function setTrustedSite($trust_root) {
+ $openid_url = getLoggedInUser();
+ $site = new ElggObject();
+ $site->subtype = 'openid_server::trust_root';
+ $site->owner_guid = 0;
+ $site->title = 'association';
+ $site->access_id = 2;
+
+ if ($site->save()) {
+ $site->openid_url = $openid_url;
+ $site->trust_root = $trust_root->trust_root;
+ $site->site_name = $trust_root->site_name;
+ $site->autologin = $trust_root->autologin;
+ $site->autologout = $trust_root->autologout;
+ $site->width = $trust_root->width;
+ $site->height = $trust_root->height;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ function removeAllTrustedSites() {
+
+ $openid_url = getLoggedInUser();
+
+ if ($openid_url != null) {
+ $results = elgg_get_entities_from_metadata(array('metadata_names' => 'openid_url', 'metadata_values' => $openid_url, 'types' => 'object', 'subtypes' => 'openid_server::trust_root', 'metadata_case_sensitive' => FALSE));
+
+ if ($results) {
+ foreach($results as $trust_root) {
+ $trust_root->delete();
+ }
+ }
+ }
+ return true;
+ }
+
+ function removeTrustedSite($trust_root) {
+
+ $openid_url = getLoggedInUser();
+
+ if ($openid_url != null) {
+ $meta_array = array(
+ 'openid_url' => $openid_url,
+ 'trust_root' => $trust_root
+ );
+
+ $results = elgg_get_entities_from_metadata(array('metadata_name_value_pairs' => $meta_array, 'types' => 'object', 'subtypes' => 'openid_server::trust_root', 'metadata_name_value_pairs_operator' => 'and'));
+
+ if ($results) {
+ foreach($results as $trust_root) {
+ $trust_root->delete();
+ }
+ }
+ }
+ return true;
+ }
+}
+
+function getOpenIDServerStore() {
+ return new OpenIDServer_ElggStore();
+}
+
+
+if (!function_exists('fnmatch')) {
+function fnmatch($pattern, $string) {
+ for ($op = 0, $npattern = '', $n = 0, $l = strlen($pattern); $n < $l; $n++) {
+ switch ($c = $pattern[$n]) {
+ case '\\':
+ $npattern .= '\\' . @$pattern[++$n];
+ break;
+ case '.': case '+': case '^': case '$': case '(': case ')': case '{': case '}': case '=': case '!': case '<': case '>': case '|':
+ $npattern .= '\\' . $c;
+ break;
+ case '?': case '*':
+ $npattern .= '.' . $c;
+ break;
+ case '[': case ']': default:
+ $npattern .= $c;
+ if ($c == '[') {
+ $op++;
+ } else if ($c == ']') {
+ if ($op == 0) return false;
+ $op--;
+ }
+ break;
+ }
+ }
+
+ if ($op != 0) return false;
+
+ return preg_match('/' . $npattern . '/i', $string);
+}
+}
+
+?>
diff --git a/mod/openid_server/server.php b/mod/openid_server/server.php
new file mode 100755
index 000000000..7ebe70dd4
--- /dev/null
+++ b/mod/openid_server/server.php
@@ -0,0 +1,32 @@
+<?php
+
+require_once('openid_server_include.php');
+require_once 'lib/session.php';
+require_once 'lib/actions.php';
+
+if (elgg_get_viewtype() == 'xrds') {
+ echo elgg_view_page($title, $body);
+ exit(0);
+}
+
+$store = getOpenIDServerStore();
+
+$server =& getServer();
+
+$request = $server->decodeRequest();
+setRequestInfo($request);
+
+$action = getAction();
+if (!function_exists($action)) {
+ $action = 'action_default';
+}
+
+$resp = $action();
+if (!empty($resp)) {
+ writeResponse($resp);
+} else {
+ echo elgg_view_page($title, $body);
+ exit(0);
+
+}
+?>
diff --git a/mod/openid_server/start.php b/mod/openid_server/start.php
new file mode 100755
index 000000000..7129f1497
--- /dev/null
+++ b/mod/openid_server/start.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * Elgg openid server plugin
+ *
+ * @package ElggOpenID
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.com/
+ */
+
+global $CONFIG;
+if (get_include_path())
+ set_include_path(get_include_path() . PATH_SEPARATOR . $CONFIG->path . 'mod/openid_api/vendors/php-openid/' . PATH_SEPARATOR . $CONFIG->path . 'mod/openid_server/');
+else
+ set_include_path($CONFIG->path . 'mod/openid_api/vendors/php-openid/' . PATH_SEPARATOR . $CONFIG->path . 'mod/openid_server/');
+
+elgg_register_event_handler('init','system','openid_server_init',1);
+
+function openid_server_init() {
+
+ global $CONFIG;
+ elgg_register_event_handler('login','user','openid_server_handle_login');
+ elgg_register_event_handler('logout','user','openid_server_handle_logout');
+
+ elgg_set_view_location("openid_server/forms/trust", $CONFIG->path.'mod/openid_server/views/');
+
+ $base = elgg_get_plugins_path() . 'openid_server/actions';
+ elgg_register_action('openid_server/trust', "$base/trust.php", 'public');
+
+ elgg_extend_view("page/elements/head", "openid_server/metatags");
+ elgg_extend_view("xrds/services", "openid_server/service");
+ elgg_extend_view("user/default", "openid_server/profile");
+}
+
+
+function openid_server_handle_login($event, $object_type, $object) {
+ global $CONFIG;
+
+ require_once('openid_server_include.php');
+
+ $store = getOpenIDServerStore();
+
+ if ($store->getAutoLoginSites()) {
+ forward($CONFIG->wwwroot.'mod/openid_server/actions/autologin.php');
+ }
+
+ return true;
+}
+
+function openid_server_handle_logout($event, $object_type, $object) {
+ global $CONFIG;
+
+ /*$store = getOpenIDServerStore();
+
+ if ($store->getAutoLogoutSites()) {
+ forward($CONFIG->wwwroot.'mod/openid_server/actions/autologout.php');
+ }*/
+
+ return true;
+}
+
+
+?>
diff --git a/mod/openid_server/views/default/forms/openid_server/trust.php b/mod/openid_server/views/default/forms/openid_server/trust.php
new file mode 100755
index 000000000..b9e4c3333
--- /dev/null
+++ b/mod/openid_server/views/default/forms/openid_server/trust.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * Elgg openid_server trust page
+ *
+ * @package openid_server
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardiner <kevin@radagast.biz>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.com/
+ *
+ * @uses the following values in $vars:
+ *
+ * 'openid' the user's OpenID
+ * 'trust_root' the trust root for the OpenID client requesting authentication
+ */
+
+$user = elgg_get_logged_in_user_entity();
+$openid_trust_root = elgg_extract('openid_trust_root', $vars);
+
+echo '<div>' . elgg_echo('openid_server:trust_question', array($openid_trust_root, elgg_get_site_entity()->name . ":" . $user->username));
+
+/*echo '<div class="mll">'.elgg_view('input/checkbox', array(
+ 'name' => 'name',
+*/
+
+echo '<div class="elgg-footer">';
+echo elgg_view('input/hidden', array('name' => 'trust_root', 'value' => $openid_trust_root));
+echo elgg_view('input/submit', array('name' => 'trust', 'value' => elgg_echo('openid_server:confirm_trust')));
+echo elgg_view('input/submit', array('name' => 'reject', 'value' => elgg_echo('openid_server:reject_trust')));
+echo '</div>';
+
+echo '<div>'.elgg_view('input/checkbox', array('name' => 'remember', 'id' => 'remember', 'checked' => true));
+echo '<label for="remember">'.elgg_echo('openid_server:remember_trust') .'</label></div>';
diff --git a/mod/openid_server/views/default/openid_server/forms/admin.php b/mod/openid_server/views/default/openid_server/forms/admin.php
new file mode 100755
index 000000000..e19a97e8e
--- /dev/null
+++ b/mod/openid_server/views/default/openid_server/forms/admin.php
@@ -0,0 +1,154 @@
+<?php
+
+/**
+ * Elgg openid_server trust page
+ *
+ * @package openid_server
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardiner <kevin@radagast.biz>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.com/
+ *
+ * @uses the following values in $vars:
+ *
+ * 'trust' the trust object with the database information and action type
+ */
+
+global $CONFIG;
+
+$trust = $vars['trust'];
+
+if (!$trust->ident) {
+ $trust->ident = 0;
+}
+
+$trust_root_msg = elgg_echo('openid_server:trust_root');
+$trust_site_msg = elgg_echo('openid_server:trust_site');
+$auto_login_msg = elgg_echo('openid_server:autologin_url');
+$auto_logout_msg = elgg_echo('openid_server:autologout_url');
+$iframe_width_msg = elgg_echo('openid_server:iframe_width');
+$iframe_height_msg = elgg_echo('openid_server:iframe_height');
+$explanation = elgg_echo('openid_server:admin_explanation');
+if ($trust->action == 'change') {
+ $button_msg = elgg_echo('openid_server:change_button');
+} else {
+ $button_msg = elgg_echo('openid_server:add_button');
+}
+
+
+$form = <<< END
+ <style type="text/css">
+ label,input {
+ display: block;
+ float: left;
+ margin-bottom: 5px;
+ }
+ label {
+ text-align: left;
+ width: 125px;
+ padding-right: 20px;
+ }
+ br {
+ clear: left;
+ }
+ </style>
+ $explanation
+ <form action="{$CONFIG->wwwroot}mod/openid_server/actions/admin.php" method="post">
+ <label for="trust_root">$trust_root_msg:</label> <input type="text" name="trust_root" size="80" value="{$trust->trust_root}"><br />
+ <label for="site_name">$trust_site_msg:</label> <input type="text" name="site_name" value="{$trust->site_name}"><br />
+ <label for="auto_login">$auto_login_msg:</label> <input type="text" name="auto_login" size="80" value="{$trust->auto_login}"><br />
+ <label for="auto_logout">$auto_logout_msg:</label> <input type="text" name="auto_logout" size="80" value="{$trust->auto_logout}"><br />
+ <label for="width">$iframe_width_msg:</label> <input type="text" name="width" size="10" value="{$trust->width}"><br />
+ <label for="height">$iframe_height_msg:</label> <input type="text" name="height" size="10" value="{$trust->height}"><br />
+ <input type="hidden" name="action" value="{$trust->action}">
+ <input type="hidden" name="trust_id" value="{$trust->ident}">
+ <input type="submit" name="submit" value="$button_msg">
+ </form>
+END;
+ return $form;
+}
+
+
+if (logged_on && run("users:flags:get", array("admin", $_SESSION['userid']))) {
+ $action = trim(optional_param('action'));
+ $trust_id = optional_param('trust_id',0,PARAM_INT);
+ $show_full_form = true;
+ $body = '';
+ if ($action) {
+ $trust = new StdClass;
+ $trust->trust_root = optional_param('trust_root');
+ $trust->site_name = optional_param('site_name');
+ $trust->auto_login = optional_param('auto_login');
+ $trust->auto_logout = optional_param('auto_logout');
+ $trust->width = optional_param('width');
+ $trust->height = optional_param('height');
+
+ switch($action) {
+ case 'change':
+ $trust->ident = $trust_id;
+ update_record('openid_server_trust',$trust);
+ $messages[] = gettext("Trust root updated");
+ break;
+ case 'add':
+ insert_record('openid_server_trust',$trust,false);
+ $messages[] = gettext("Trust root added");
+ break;
+ case 'delete':
+ delete_records('openid_server_trust','ident',$trust_id);
+ $messages[] = gettext("Trust root deleted");
+ break;
+ }
+ } else {
+ if ($trust_id) {
+ $trust = get_record('openid_server_trust','ident',$trust_id);
+ $trust->action = 'change';
+ $body = generate_trust_form($trust);
+ $title = gettext("Edit trust record");
+ $show_full_form = false;
+ }
+ }
+
+ if ($show_full_form) {
+ $edit_url = $CFG->wwwroot.'mod/openid_server/admin.php?trust_id=';
+ $delete_url = $CFG->wwwroot.'mod/openid_server/admin.php?action=delete&trust_id=';
+ $title = gettext("Manage default trust roots");
+ $results = get_records_sql("SELECT ident, site_name, trust_root FROM {$CFG->prefix}openid_server_trust WHERE openid_url IS NULL OR openid_url = ''");
+ if ($results) {
+ $body .= '<h2>'.gettext("Default trust roots").'</h2>'."\n";
+ $body.= '<table border="0">'."\n";
+ foreach($results as $item) {
+ $body .= '<tr><td width="150">'.$item->site_name.'</td><td width="250">'.$item->trust_root.'</td><td><a href="'
+ .$edit_url.$item->ident.'">'.gettext("Edit").'</a></td><td><a href="'
+ .$delete_url.$item->ident.'">'.gettext("Delete").'</a></td></tr>'."\n";
+ }
+ }
+ $body .= "</table>\n";
+ $body .= '<h2>'.gettext("Add default trust root").'</h2>';
+ $trust = new StdClass;
+ $trust->trust_root = '';
+ $trust->site_name = '';
+ $trust->auto_login = '';
+ $trust->auto_logout = '';
+ $trust->width = 0;
+ $trust->height = 0;
+ $trust->action = 'add';
+ $body .= generate_trust_form($trust);
+ }
+}
+
+define("context", "admin");
+
+templates_page_setup();
+
+echo templates_page_draw( array(
+ sitename,
+ templates_draw(array(
+ 'body' => $body,
+ 'title' => $title,
+ 'context' => 'contentholder'
+ )
+ )
+ )
+ );
+
+?>
diff --git a/mod/openid_server/views/default/openid_server/forms/autologin.php b/mod/openid_server/views/default/openid_server/forms/autologin.php
new file mode 100755
index 000000000..6880e1543
--- /dev/null
+++ b/mod/openid_server/views/default/openid_server/forms/autologin.php
@@ -0,0 +1,22 @@
+<!--
+/**
+ * Elgg openid_server: autologin form view
+ *
+ * @package ElggOpenID
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.org/
+ */
+-->
+<html>
+<head>
+<title>
+<?php echo elgg_echo('openid_server:autologin_title'); ?>
+</title>
+<meta http-equiv="refresh" content="3;<?php echo $vars['return_url']; ?>"/>
+</head>
+<body>
+<?php echo elgg_echo('openid_server:autologin_body')."<br /><br />\n".$vars['iframes'] ?>
+</body>
+</html> \ No newline at end of file
diff --git a/mod/openid_server/views/default/openid_server/forms/autologout.php b/mod/openid_server/views/default/openid_server/forms/autologout.php
new file mode 100755
index 000000000..86b5c9682
--- /dev/null
+++ b/mod/openid_server/views/default/openid_server/forms/autologout.php
@@ -0,0 +1,24 @@
+<!--
+/**
+ * Elgg openid_server: autologout form view
+ *
+ * @package ElggOpenID
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardine <kevin@radagast.biz>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.org/
+ */
+
+ -->
+
+<html>
+<head>
+<title>
+<?php echo elgg_echo('openid_server:autologout_title'); ?>
+</title>
+<meta http-equiv="refresh" content="3;<?php echo $CONFIG->wwwroot; ?>"/>
+</head>
+<body>
+<?php echo elgg_echo('openid_server:autologout_body')."<br /><br />\n".$vars['iframes'] ?>
+</body>
+</html> \ No newline at end of file
diff --git a/mod/openid_server/views/default/openid_server/forms/trust.php b/mod/openid_server/views/default/openid_server/forms/trust.php
new file mode 100755
index 000000000..5a1e05ca1
--- /dev/null
+++ b/mod/openid_server/views/default/openid_server/forms/trust.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * Elgg openid_server trust page
+ *
+ * @package openid_server
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Kevin Jardiner <kevin@radagast.biz>
+ * @copyright Curverider Ltd 2008-2009
+ * @link http://elgg.com/
+ *
+ * @uses the following values in $vars:
+ *
+ * 'openid' the user's OpenID
+ * 'trust_root' the trust root for the OpenID client requesting authentication
+ */
+?>
+
+<div class="layout_canvas">
+<div class="one_column">
+<div class="contentWrapper">
+<div class="form">
+ <p><?php echo sprintf(elgg_echo('openid_server:trust_question'),$vars['openid_url'],$vars['openid_trust_root']) ?></p>
+ <form method="post" action="<?php echo $vars['url'] ?>mod/openid_server/actions/trust.php">
+ <input type="checkbox" name="remember" value="on" id="remember" /><label
+ for="remember"><?php echo elgg_echo('openid_server:remember_trust') ?></label>
+ <br />
+ <input type="hidden" name="trust_root" value="<?php echo $vars['openid_trust_root']; ?>" />
+ <input type="submit" name="trust" value="<?php echo elgg_echo('openid_server:confirm_trust') ?>" />
+ <input type="submit" name = "reject" value="<?php echo elgg_echo('openid_server:reject_trust') ?>" />
+ </form>
+</div>
+</div>
+</div>
+</div>
diff --git a/mod/openid_server/views/default/openid_server/metatags.php b/mod/openid_server/views/default/openid_server/metatags.php
new file mode 100755
index 000000000..eddc174d4
--- /dev/null
+++ b/mod/openid_server/views/default/openid_server/metatags.php
@@ -0,0 +1,6 @@
+<?php
+$owner = elgg_get_page_owner_entity();
+echo '<link rel="openid2.provider openid.server" href="' . elgg_get_site_url() . 'mod/openid_server/server.php" />';
+if ($owner) {
+ echo '<link rel="openid2.local_id openid.delegate" href="' . elgg_get_site_url() . 'profile/' . $owner->username . '" />';
+}
diff --git a/mod/openid_server/views/xrds/openid_server/profile.php b/mod/openid_server/views/xrds/openid_server/profile.php
new file mode 100644
index 000000000..9b34a6b7b
--- /dev/null
+++ b/mod/openid_server/views/xrds/openid_server/profile.php
@@ -0,0 +1,11 @@
+<?php
+ /*
+ XRDS info to validate delegated identities
+ */
+ $user = elgg_get_page_owner_entity();
+?>
+ <Service priority="0">
+ <Type>http://specs.openid.net/auth/2.0/signon</Type>
+ <LocalID><?php echo $vars['url']; ?>mod/openid_server/server.php</LocalID>
+ <URI><?php echo $vars['url']; ?>mod/openid_server/server.php</URI>
+ </Service>
diff --git a/mod/openid_server/views/xrds/openid_server/service.php b/mod/openid_server/views/xrds/openid_server/service.php
new file mode 100644
index 000000000..269df5c2e
--- /dev/null
+++ b/mod/openid_server/views/xrds/openid_server/service.php
@@ -0,0 +1,15 @@
+<?php
+ /*
+ XRD info to identify do eaut email to profile mapping
+ and identify openid 2.0 server.
+ */
+?>
+ <Service priority="0">
+ <Type>http://specs.eaut.org/1.0/template</Type>
+ <URI><?php echo $vars['url']; ?>profile/%7Busername%7D</URI>
+ </Service>
+ <Service priority="10">
+ <Type>http://specs.openid.net/auth/2.0/server</Type>
+ <URI><?php echo $vars['url']; ?>mod/openid_server/server.php</URI>
+ </Service>
+
diff --git a/mod/opensearch/README b/mod/opensearch/README
new file mode 100644
index 000000000..a25a00c93
--- /dev/null
+++ b/mod/opensearch/README
@@ -0,0 +1,21 @@
+OpenSearch endpoint for Elgg
+
+OVERVIEW
+-------------
+OpenSearch is a standard for exposing the data in your website for search
+to browsers and other web sites. For more information on this technology, visit
+the Wikipedia page on OpenSearch at http://en.wikipedia.org/wiki/OpenSearch
+
+INSTALL
+-------------
+ * Activate the plugin
+ * Edit OpenSearch settings in administration pages to reflect your site
+
+USAGE
+-------------
+Adds an OpenSearch description definition to the html head. Browsers
+will pick this up and allow you to add site specific search to your
+search bar.
+
+The plugin also provides an RSS 2.0 feed that conforms to the OpenSearch
+standard.
diff --git a/mod/opensearch/languages/ca.php b/mod/opensearch/languages/ca.php
new file mode 100644
index 000000000..35e4dfb9e
--- /dev/null
+++ b/mod/opensearch/languages/ca.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * OpenSearch Catalan language file
+ */
+
+$catalan = array(
+ 'opensearch:title' => "Cerca: %s" ,
+ 'opensearch:description' => "Resultats de la cerca \"%s\"",
+ 'opensearch:engine' => 'Motor de cerca %s',
+ 'opensearh:settings:shortname' => 'Nom curt',
+ 'opensearh:settings:desc' => 'Descripció',
+ 'opensearh:settings:longname' => 'Nom llarg',
+ 'opensearh:settings:icon' => 'Icona',
+ 'opensearh:settings:tags' => 'Etiquetes',
+ 'opensearh:settings:lang' => 'Idioma',
+ 'opensearh:settings:query' => 'Pregunta',
+ 'opensearh:settings:shortname:description' => 'Conté un petit títol llegible que identifica el motor de cerca. 16 caràcters o menys de text pla. <strong>Requerit</strong>',
+ 'opensearh:settings:desc:description' => 'Conté una petita descripció llegible sobre el motor de cerca. 1024 caràcters o menys de text pla. <strong>Requerit</strong>',
+ 'opensearh:settings:longname:description' => 'Conté un títol llegible llarg que identifica el motor de cerca. 48 caràcters o menys de text pla.',
+ 'opensearh:settings:icon:description' => 'Conté una adreça que identifica la localització d\'una imatge que pot ser utilitzada en associació amb el contingut d\'aquesta cerca. Pot ser un .ico de 16x16, un png de 64x64 o ambdues. Els clients escolliran la imatge que millor encaixi amb l\'espai disponible. El valor ha d\'estar relacionat amb el teu root de l\'Elgg',
+ 'opensearh:settings:tags:description' => 'Conté un grup de paraules que poden ser utilitzades com a paraules clau per a identificar i categoritzar el contingut d\'aquesta cerca. Les etiquetes han de ser una paraula simple i han de ser delimitades amb el caràcter d\'espai (\' \'). 256 caràcters o menys, l\'espai delimita les etiquetes',
+ 'opensearh:settings:lang:description' => 'Conté una cadena que indica que el motor de cerca està cercant resultats en un idioma específic. * o codis d\'acord amb la identificació d\'idiomes de l\'XML 1.0',
+ 'opensearh:settings:query:description' => 'Pregunta de prova disponible pels clients. El clients poden enviar aquesta com una pregunta de prova per assegurar-se que la interfície de l\'OpenSearch funciona.',
+);
+
+add_translation('ca', $catalan);
diff --git a/mod/opensearch/languages/en.php b/mod/opensearch/languages/en.php
new file mode 100644
index 000000000..9a77f362b
--- /dev/null
+++ b/mod/opensearch/languages/en.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * OpenSearch English language file
+ */
+
+$english = array(
+ 'opensearch:title' => "Search: %s",
+ 'opensearch:description' => "Search results for \"%s\"",
+ 'opensearch:engine' => "%s Search Engine",
+
+ 'opensearh:settings:shortname' => "Short name",
+ 'opensearh:settings:desc' => "Description",
+ 'opensearh:settings:longname' => "Long name",
+ 'opensearh:settings:icon' => "Icon",
+ 'opensearh:settings:tags' => "Tags",
+ 'opensearh:settings:lang' => "Language",
+ 'opensearh:settings:query' => "Query",
+ 'opensearh:settings:shortname:description' => "Contains a brief human-readable title that identifies this search engine. 16 characters or less of plain text. <strong>Required</strong>",
+ 'opensearh:settings:desc:description' => "Contains a human-readable text description of the search engine. 1024 characters or less of plain text. <strong>Required</strong>",
+ 'opensearh:settings:longname:description' => "Contains an extended human-readable title that identifies this search engine. 48 characters or less of plain text.",
+ 'opensearh:settings:icon:description' => "Contains a URL that identifies the location of an image that can be used in association with this search content. Can be either a 16x16 ico or 64x64 png or both. Clients will choose the image that best fits the display area. The value should be relative to your Elgg root.",
+ 'opensearh:settings:tags:description' => "Contains a set of words that are used as keywords to identify and categorize this search content. Tags must be a single word and are delimited by the space character (' '). 256 characters or less, space delimited tags",
+ 'opensearh:settings:lang:description' => "Contains a string that indicates that the search engine supports search results in the specified language. * or codes according to XML 1.0 Language Identification",
+ 'opensearh:settings:query:description' => "Test query available to clients. Clients can submit this as a test query to ensure that the OpenSearch interface works.",
+
+);
+
+add_translation("en", $english);
diff --git a/mod/opensearch/languages/es.php b/mod/opensearch/languages/es.php
new file mode 100644
index 000000000..c2d9bee60
--- /dev/null
+++ b/mod/opensearch/languages/es.php
@@ -0,0 +1,23 @@
+<?php
+$es = array (
+ 'opensearch:title' => 'Búsqueda: %s',
+ 'opensearch:description' => 'Resultados de la búsqueda "%s"',
+ 'opensearch:engine' => 'Motor de búsqueda de %s',
+ 'opensearh:settings:shortname' => 'Nombre corto',
+ 'opensearh:settings:desc' => 'Descripción',
+ 'opensearh:settings:longname' => 'Nombre largo',
+ 'opensearh:settings:icon' => 'Icono',
+ 'opensearh:settings:tags' => 'Etiquetas',
+ 'opensearh:settings:lang' => 'Idioma',
+ 'opensearh:settings:query' => 'Petición',
+ 'opensearh:settings:shortname:description' => 'Contiene un título breve para este motor de búsqueda. 16 carácteres o menos de texto plano. <strong>Requerido</strong>',
+ 'opensearh:settings:desc:description' => 'Contiene una descripción del motor de búsqueda. 1024 carácteres o menos de texto plano. <strong>Requerido</strong>',
+ 'opensearh:settings:longname:description' => 'Contiene un título más largo para este motor de búsqueda. 48 carácteres o menos de texto plano.',
+ 'opensearh:settings:icon:description' => 'Contiene la URL de la localización de una imagen de icono. Puede ser un ico de 16x16 o un png 64x64 píxeles. El dirección debería ser relativa a la raíz de Elgg.',
+ 'opensearh:settings:tags:description' => 'Continene un conjunto de palabras usadas como palabras clave para identificar y categorizar este contenido de búsqueda. Las etiquetas deberían ser palabras simples y delimtadas por espacios (\' \'). 256 carácteres o menos, etiquetas delimitadas por espacios',
+ 'opensearh:settings:lang:description' => 'Contiene una cadena que indica que el motor de búsqueda soporta resultados de búsqueda en el idioma especificado. * o códigos acorde al XML 1.0 Language Identification',
+ 'opensearh:settings:query:description' => 'Petición de prueba disponible para clientes. Los clientes pueden enviarlo como petición de prueba para asegurarse de que el interfaz OpenSearch funciona.',
+);
+
+add_translation("es", $es);
+
diff --git a/mod/opensearch/languages/eu.php b/mod/opensearch/languages/eu.php
new file mode 100644
index 000000000..151e5d906
--- /dev/null
+++ b/mod/opensearch/languages/eu.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * OpenSearch Basque language file
+ */
+
+$basque = array(
+ 'opensearch:title' => "Bilatu: %s",
+ 'opensearch:description' => "\"%s\" bilaketaren emaitak",
+);
+
+add_translation("eu", $basque);
diff --git a/mod/opensearch/languages/pl.php b/mod/opensearch/languages/pl.php
new file mode 100755
index 000000000..f73a1042d
--- /dev/null
+++ b/mod/opensearch/languages/pl.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * OpenSearch Polish language file
+ */
+
+$polish = array(
+ 'opensearch:title' => "Szukaj: %s" ,
+ 'opensearch:description' => "Wyniki wyszukiwania dla \"%s\""
+);
+
+add_translation('pl', $polish);
diff --git a/mod/opensearch/manifest.xml b/mod/opensearch/manifest.xml
new file mode 100644
index 000000000..98ae3356d
--- /dev/null
+++ b/mod/opensearch/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>OpenSearch</name>
+ <author>Cash Costello</author>
+ <version>1.8.0</version>
+ <category>utility</category>
+ <category>search</category>
+ <description>OpenSearch integration</description>
+ <website>https://github.com/cash/opensearch</website>
+ <copyright>Cash Costello 2010-2011</copyright>
+ <license>GNU Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/opensearch/start.php b/mod/opensearch/start.php
new file mode 100644
index 000000000..88329c8d1
--- /dev/null
+++ b/mod/opensearch/start.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * OpenSearch plugin
+ *
+ * http://www.opensearch.org/Home
+ *
+ * @author Cash Costello
+ * @license http://opensource.org/licenses/gpl-2.0.php GPL 2
+ */
+
+elgg_register_event_handler('init', 'system', 'opensearch_init');
+
+function opensearch_init() {
+ elgg_register_page_handler('opensearch', 'opensearch_handler');
+ elgg_extend_view('page/elements/head', 'opensearch/includes');
+}
+
+/**
+ * Handles OpenSearch requests
+ *
+ * @param array $page An array of URL elements
+ * @return bool
+ */
+function opensearch_handler($page) {
+ switch ($page[0]) {
+ case 'osd.xml':
+ elgg_set_viewtype('xml');
+ echo elgg_view_page('', elgg_view('opensearch/description'));
+ return true;
+ break;
+ }
+ return false;
+}
diff --git a/mod/opensearch/views/default/opensearch/includes.php b/mod/opensearch/views/default/opensearch/includes.php
new file mode 100644
index 000000000..6aceb45c2
--- /dev/null
+++ b/mod/opensearch/views/default/opensearch/includes.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * OpenSearch head include
+ */
+
+$url = elgg_normalize_url('opensearch/osd.xml');
+$title = elgg_get_site_entity()->name;
+?>
+
+<link rel="search" type="application/opensearchdescription+xml" href="<?php echo $url; ?>" title="<?php echo $title; ?>" />
diff --git a/mod/opensearch/views/default/plugins/opensearch/settings.php b/mod/opensearch/views/default/plugins/opensearch/settings.php
new file mode 100644
index 000000000..23ba19538
--- /dev/null
+++ b/mod/opensearch/views/default/plugins/opensearch/settings.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * Opensearch plugin settings
+ */
+
+// set default value
+if (!isset($vars['entity']->shortname)) {
+ $vars['entity']->shortname = elgg_get_site_entity()->name;
+}
+if (!isset($vars['entity']->desc)) {
+ $vars['entity']->desc = elgg_echo('opensearch:engine', array(elgg_get_site_entity()->name));
+}
+if (!isset($vars['entity']->longname)) {
+ $vars['entity']->longname = elgg_get_site_entity()->description;
+}
+if (!isset($vars['entity']->icon)) {
+ $vars['entity']->icon = '_graphics/favicon.ico';
+}
+if (!isset($vars['entity']->tags)) {
+ $vars['entity']->tags = '';
+}
+if (!isset($vars['entity']->lang)) {
+ $vars['entity']->lang = 'en-us';
+}
+if (!isset($vars['entity']->query)) {
+ $vars['entity']->query = '';
+}
+
+echo '<div>';
+echo '<label>'.elgg_echo('opensearh:settings:shortname').'</label> ';
+echo elgg_echo('opensearh:settings:shortname:description');
+echo ' ';
+echo elgg_view('input/text', array(
+ 'name' => 'params[shortname]',
+ 'value' => $vars['entity']->shortname,
+));
+echo '</div>';
+
+echo '<div>';
+echo '<label>'.elgg_echo('opensearh:settings:desc').'</label> ';
+echo elgg_echo('opensearh:settings:desc:description');
+echo ' ';
+echo elgg_view('input/text', array(
+ 'name' => 'params[desc]',
+ 'value' => $vars['entity']->desc,
+));
+echo '</div>';
+
+echo '<div>';
+echo '<label>'.elgg_echo('opensearh:settings:longname').'</label> ';
+echo elgg_echo('opensearh:settings:longname:description');
+echo ' ';
+echo elgg_view('input/text', array(
+ 'name' => 'params[longname]',
+ 'value' => $vars['entity']->longname,
+));
+echo '</div>';
+
+echo '<div>';
+echo '<label>'.elgg_echo('opensearh:settings:icon').'</label> ';
+echo elgg_echo('opensearh:settings:icon:description');
+echo ' ';
+echo elgg_view('input/text', array(
+ 'name' => 'params[icon]',
+ 'value' => $vars['entity']->icon,
+));
+echo '</div>';
+
+echo '<div>';
+echo '<label>'.elgg_echo('opensearh:settings:tags').'</label> ';
+echo elgg_echo('opensearh:settings:tags:description');
+echo ' ';
+echo elgg_view('input/text', array(
+ 'name' => 'params[tags]',
+ 'value' => $vars['entity']->tags,
+));
+echo '</div>';
+
+echo '<div>';
+echo '<label>'.elgg_echo('opensearh:settings:lang').'</label> ';
+echo elgg_echo('opensearh:settings:lang:description');
+echo ' ';
+echo elgg_view('input/text', array(
+ 'name' => 'params[lang]',
+ 'value' => $vars['entity']->lang,
+));
+echo '</div>';
+
+echo '<div>';
+echo '<label>'.elgg_echo('opensearh:settings:query').'</label> ';
+echo elgg_echo('opensearh:settings:query:description');
+echo ' ';
+echo elgg_view('input/text', array(
+ 'name' => 'params[query]',
+ 'value' => $vars['entity']->query,
+));
+echo '</div>';
diff --git a/mod/opensearch/views/opensearch_rss/page/default.php b/mod/opensearch/views/opensearch_rss/page/default.php
new file mode 100644
index 000000000..79cd544c4
--- /dev/null
+++ b/mod/opensearch/views/opensearch_rss/page/default.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Page shell for OpenSearch RSS feed
+ */
+
+global $OPEN_SEARCH_COUNT;
+
+header("Content-Type: application/rss+xml");
+
+// allow caching as required by stupid MS products for https feeds.
+header('Pragma: public', TRUE);
+
+echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+
+// Set title
+$search_terms = get_input('q');
+$title = elgg_get_site_entity()->name;
+$title .= ' ' . elgg_echo('opensearch:title', array($search_terms));
+
+$description = elgg_echo('opensearch:description', array($search_terms));
+
+// Remove viewtype from URL
+$search_url = str_replace('&view=opensearch_rss', '', full_url());
+
+$os_url = elgg_normalize_url('opensearch/osd.xml');
+
+?>
+<rss version="2.0" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
+<channel>
+ <title><?php echo $title; ?></title>
+ <link><?php echo $search_url; ?></link>
+ <description><?php echo $description; ?></description>
+ <opensearch:totalResults><?php echo $OPEN_SEARCH_COUNT; ?></opensearch:totalResults>
+ <atom:link rel="search" type="application/opensearchdescription+xml" href="<?php echo $os_url; ?>"/>
+ <opensearch:Query role="request" searchTerms="<?php echo addslashes($search_terms); ?>" startPage="1" />
+<?php
+
+ echo $vars['body'];
+
+?>
+</channel>
+</rss>
diff --git a/mod/opensearch/views/opensearch_rss/page/layouts/default.php b/mod/opensearch/views/opensearch_rss/page/layouts/default.php
new file mode 100644
index 000000000..488734f84
--- /dev/null
+++ b/mod/opensearch/views/opensearch_rss/page/layouts/default.php
@@ -0,0 +1,5 @@
+<?php
+/**
+ * OpenSearch RSS layout shell
+ */
+echo $vars['content']; \ No newline at end of file
diff --git a/mod/opensearch/views/opensearch_rss/search/layout.php b/mod/opensearch/views/opensearch_rss/search/layout.php
new file mode 100644
index 000000000..d5bb9fe57
--- /dev/null
+++ b/mod/opensearch/views/opensearch_rss/search/layout.php
@@ -0,0 +1,5 @@
+<?php
+/**
+ * OpenSearch search layout
+ */
+echo $vars['body']; \ No newline at end of file
diff --git a/mod/opensearch/views/opensearch_rss/search/list.php b/mod/opensearch/views/opensearch_rss/search/list.php
new file mode 100644
index 000000000..bc7b5574e
--- /dev/null
+++ b/mod/opensearch/views/opensearch_rss/search/list.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * OpenSearch serach results list
+ */
+
+global $OPEN_SEARCH_COUNT;
+if (!isset($OPEN_SEARCH_COUNT)) {
+ $OPEN_SEARCH_COUNT = 0;
+}
+
+$OPEN_SEARCH_COUNT += $vars['results']['count'];
+
+
+elgg_set_viewtype('rss');
+$entities = $vars['results']['entities'];
+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']
+ ));
+ }
+}
+elgg_set_viewtype('opensearch_rss');
+
+echo $body; \ No newline at end of file
diff --git a/mod/opensearch/views/xml/opensearch/description.php b/mod/opensearch/views/xml/opensearch/description.php
new file mode 100644
index 000000000..586cadf83
--- /dev/null
+++ b/mod/opensearch/views/xml/opensearch/description.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Creates an OpenSearch description document from plugin settings
+ * http://www.opensearch.org/Specifications/OpenSearch/1.1
+ */
+
+// reset cache headers because IE8 is stupid
+header('Pragma: public', true);
+header('Cache-Control: public', true);
+
+$site = elgg_get_site_entity();
+$email = $site->email;
+
+$shortname = elgg_get_plugin_setting('shortname', 'opensearch');
+$description = elgg_get_plugin_setting('desc', 'opensearch');
+$longname = elgg_get_plugin_setting('longname', 'opensearch');
+$icon = elgg_get_plugin_setting('icon', 'opensearch');
+$tags = elgg_get_plugin_setting('tags', 'opensearch');
+$lang = string_to_tag_array(elgg_get_plugin_setting('lang', 'opensearch'));
+$query = elgg_get_plugin_setting('query', 'opensearch');
+
+if (empty($shortname)) {
+ $shortname = $site->name;
+}
+if (empty($description)) {
+ $description = elgg_echo('opensearch:engine', array(elgg_get_site_entity()->name));
+}
+if (empty($icon)) {
+ $icon = '_graphics/favicon.ico';
+}
+if (empty($lang)) {
+ $lang = 'en-us';
+}
+
+
+$rss_url = elgg_normalize_url('search/?q={searchTerms}&view=opensearch_rss');
+$rss_url = elgg_format_url($rss_url);
+$html_url = elgg_normalize_url('search/?q={searchTerms}');
+$site_url = elgg_get_site_url();
+
+?>
+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
+ <ShortName><?php echo $shortname; ?></ShortName>
+ <Description><?php echo $description; ?></Description>
+<?php if (isset($longname)): ?>
+ <LongName><?php echo $longname; ?></LongName>
+<?php endif; ?>
+ <Contact><?php echo $site->email; ?></Contact>
+ <Url type="text/html" template="<?php echo $html_url; ?>"/>
+ <Url type="application/rss+xml" template="<?php echo $rss_url; ?>"/>
+<?php if (preg_match("/.ico$/", $icon)): ?>
+ <Image height="16" width="16" type="image/vnd.microsoft.icon"><?php echo "{$site_url}$icon"; ?></Image>
+<?php elseif (preg_match("/.png$/", $icon)): ?>
+ <Image height="64" width="64" type="image/png"><?php echo "{$site_url}$icon"; ?></Image>
+<?php endif; ?>
+<?php if (isset($tags)): ?>
+ <Tags><?php echo $tags; ?></Tags>
+<?php endif; ?>
+<?php if (isset($query)): ?>
+ <Query role="example" searchTerms="<?php echo $query; ?>" />
+<?php endif; ?>
+<?php
+if (isset($lang)):
+ foreach ($lang as $language):
+?>
+ <Language><?php echo $language; ?></Language>
+<?php
+ endforeach;
+endif;
+?>
+ <SyndicationRight>open</SyndicationRight>
+ <AdultContent>false</AdultContent>
+ <OutputEncoding>UTF-8</OutputEncoding>
+ <InputEncoding>UTF-8</InputEncoding>
+ </OpenSearchDescription>
diff --git a/mod/pages/actions/annotations/page/delete.php b/mod/pages/actions/annotations/page/delete.php
new file mode 100644
index 000000000..156b516d2
--- /dev/null
+++ b/mod/pages/actions/annotations/page/delete.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Remove a page (revision) annotation
+ *
+ * @package ElggPages
+ */
+
+// Make sure we can get the annotations and entity in question
+$annotation_id = (int) get_input('annotation_id');
+$annotation = elgg_get_annotation_from_id($annotation_id);
+$entity = get_entity($annotation->entity_guid);
+
+if ($annotation && $entity->canEdit() && $annotation->canEdit()) {
+ $annotation->delete();
+ system_message(elgg_echo("pages:revision:delete:success"));
+} else {
+ register_error(elgg_echo("pages:revision:delete:failure"));
+}
+
+forward("pages/history/{$annotation->entity_guid}"); \ 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..fd5791e4d
--- /dev/null
+++ b/mod/pages/actions/pages/delete.php
@@ -0,0 +1,68 @@
+<?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) {
+ $db_prefix = elgg_get_config('dbprefix');
+ $subtype_id = (int)get_subtype_id('object', 'page_top');
+ $newentity_cache = is_memcache_available() ? new ElggMemcache('new_entity_cache') : null;
+
+ foreach ($children as $child) {
+ if ($parent) {
+ $child->parent_guid = $parent;
+ } else {
+ // If no parent, we need to transform $child to a page_top
+ $child_guid = (int)$child->guid;
+
+ update_data("UPDATE {$db_prefix}entities
+ SET subtype = $subtype_id WHERE guid = $child_guid");
+
+ elgg_delete_metadata(array(
+ 'guid' => $child_guid,
+ 'metadata_name' => 'parent_guid',
+ ));
+
+ _elgg_invalidate_cache_for_entity($child_guid);
+ if ($newentity_cache) {
+ $newentity_cache->delete($child_guid);
+ }
+ }
+ }
+ }
+
+ 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..c204c1901
--- /dev/null
+++ b/mod/pages/languages/en.php
@@ -0,0 +1,119 @@
+<?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 a 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:current_revision' => "Current Revision",
+ 'pages:revert' => "Revert",
+
+ '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.',
+ 'pages:revision:delete:success' => 'The page revision was successfully deleted.',
+ 'pages:revision:delete:failure' => 'The page revision could not be deleted.',
+ 'pages:revision:not_found' => 'Cannot find this revision.',
+
+ /**
+ * 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..7f90d53d8
--- /dev/null
+++ b/mod/pages/lib/pages.php
@@ -0,0 +1,152 @@
+<?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, $revision = null) {
+
+ // 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');
+
+ // load the revision annotation if requested
+ if ($revision instanceof ElggAnnotation && $revision->entity_guid == $page->getGUID()) {
+ $values['description'] = $revision->value;
+ }
+
+ 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..a925cdc55
--- /dev/null
+++ b/mod/pages/pages/pages/edit.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Edit a page
+ *
+ * @package ElggPages
+ */
+
+gatekeeper();
+
+$page_guid = (int)get_input('guid');
+$revision = (int)get_input('annotation_id');
+$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()) {
+
+ if ($revision) {
+ $revision = elgg_get_annotation_from_id($revision);
+ if (!$revision || !($revision->entity_guid == $page_guid)) {
+ register_error(elgg_echo('pages:revision:not_found'));
+ forward(REFERER);
+ }
+ }
+
+ $vars = pages_prepare_form_vars($page, $page->parent_guid, $revision);
+
+ $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..cecc4053b
--- /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('', '404');
+}
+
+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..7f5fa4f4f
--- /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) {
+ forward('', '404');
+}
+
+$container = $page->getContainerEntity();
+if (!$container) {
+ forward('', '404');
+}
+
+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..7de74a3b4
--- /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('', '404');
+}
+
+// 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(
+ 'type' => 'object',
+ 'subtype' => '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..c130a6bd6
--- /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(
+ 'type' => 'object',
+ 'subtype' => '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..f9c34cd85
--- /dev/null
+++ b/mod/pages/start.php
@@ -0,0 +1,370 @@
+<?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';
+ elgg_register_action("pages/edit", "$action_base/pages/edit.php");
+ elgg_register_action("pages/delete", "$action_base/pages/delete.php");
+ elgg_register_action("annotations/page/delete", "$action_base/annotations/page/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');
+
+ // hook into annotation menu
+ elgg_register_plugin_hook_handler('register', 'menu:annotation', 'pages_annotation_menu_setup');
+
+ // register ecml views to parse
+ elgg_register_plugin_hook_handler('get_views', 'ecml', 'pages_ecml_views_hook');
+
+ elgg_register_event_handler('upgrade', 'system', 'pages_run_upgrades');
+}
+
+/**
+ * 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 string $hook
+ * @param string $entity_type
+ * @param bool $returnvalue
+ * @param array $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) {
+ switch ($write_permission) {
+ case ACCESS_PRIVATE:
+ // Elgg's default decision is what we want
+ return;
+ break;
+ case ACCESS_FRIENDS:
+ $owner = $params['entity']->getOwnerEntity();
+ if ($owner && $owner->isFriendsWith($user->guid)) {
+ return true;
+ }
+ break;
+ default:
+ $list = get_access_array($user->guid);
+ if (in_array($write_permission, $list)) {
+ // user in the access collection
+ return true;
+ }
+ break;
+ }
+ }
+ }
+}
+
+/**
+ * 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/upgrades/2012061800.php b/mod/pages/upgrades/2012061800.php
new file mode 100644
index 000000000..c21ccae3b
--- /dev/null
+++ b/mod/pages/upgrades/2012061800.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Restore disappeared subpages. This is caused by its parent page being deleted
+ * when the parent page is a top level page. We take advantage of the fact that
+ * the parent_guid was deleted for the subpages.
+ *
+ * This upgrade script will no longer work once we have converted all pages to
+ * have the same entity subtype.
+ */
+
+
+/**
+ * Update subtype
+ *
+ * @param ElggObject $page
+ */
+function pages_2012061800($page) {
+ $dbprefix = elgg_get_config('dbprefix');
+ $subtype_id = (int)get_subtype_id('object', 'page_top');
+ $page_guid = (int)$page->guid;
+ update_data("UPDATE {$dbprefix}entities
+ SET subtype = $subtype_id WHERE guid = $page_guid");
+ error_log("called");
+ return true;
+}
+
+$previous_access = elgg_set_ignore_access(true);
+
+$dbprefix = elgg_get_config('dbprefix');
+$name_metastring_id = get_metastring_id('parent_guid');
+if (!$name_metastring_id) {
+ return;
+}
+
+// Looking for pages without metadata
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'page',
+ 'wheres' => "NOT EXISTS (
+ SELECT 1 FROM {$dbprefix}metadata md
+ WHERE md.entity_guid = e.guid
+ AND md.name_id = $name_metastring_id)"
+);
+$batch = new ElggBatch('elgg_get_entities_from_metadata', $options, 'pages_2012061800', 50, false);
+elgg_set_ignore_access($previous_access);
+
+if ($batch->callbackResult) {
+ error_log("Elgg Pages upgrade (2012061800) succeeded");
+}
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..ecb289092
--- /dev/null
+++ b/mod/pages/views/default/annotation/page.php
@@ -0,0 +1,60 @@
+<?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;
+
+if (!elgg_in_context('widgets')) {
+ $menu = elgg_view_menu('annotation', array(
+ 'annotation' => $annotation,
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz float-alt',
+ ));
+}
+
+$body = <<<HTML
+<div class="mbn">
+ $menu
+ <h3>$title_link</h3>
+ <span class="elgg-subtext">
+ $subtitle
+ </span>
+</div>
+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..f35202993
--- /dev/null
+++ b/mod/pages/views/default/object/page_top.php
@@ -0,0 +1,119 @@
+<?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 = '';
+}
+
+$subtitle = "$editor_text $comments_link $categories";
+
+// do not show the metadata and controls in widget view
+if (!elgg_in_context('widgets')) {
+ // If we're looking at a revision, display annotation menu
+ if ($revision) {
+ $metadata = elgg_view_menu('annotation', array(
+ 'annotation' => $annotation,
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz float-alt',
+ ));
+ } else {
+ // Regular entity menu
+ $metadata = elgg_view_menu('entity', array(
+ 'entity' => $vars['entity'],
+ 'handler' => 'pages',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+ ));
+ }
+}
+
+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..e0e8ed11a
--- /dev/null
+++ b/mod/pages/views/default/pages/sidebar/history.php
@@ -0,0 +1,21 @@
+<?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
+ );
+ elgg_push_context('widgets');
+ $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..5f1599e0d
--- /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";
+ $filesize = @filesize($filename);
+ if ($filesize) {
+ 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: $filesize");
+ 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..da4e95690
--- /dev/null
+++ b/mod/profile/views/default/profile/details.php
@@ -0,0 +1,68 @@
+<?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)) {
+
+ // fix profile URLs populated by https://github.com/Elgg/Elgg/issues/5232
+ // @todo Replace with upgrade script, only need to alter users with last_update after 1.8.13
+ if ($valtype == 'url' && $value == 'http://') {
+ $user->$shortname = '';
+ continue;
+ }
+
+ // validate urls
+ if ($valtype == 'url' && !preg_match('~^https?\://~i', $value)) {
+ $value = "http://$value";
+ }
+
+ // this 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/profile_friendlyurl b/mod/profile_friendlyurl
new file mode 160000
+Subproject 1720c0ccf8fb93760b75e5ea25b766ad539c3a5
diff --git a/mod/profile_widgets/languages/en.php b/mod/profile_widgets/languages/en.php
new file mode 100644
index 000000000..df30fcf73
--- /dev/null
+++ b/mod/profile_widgets/languages/en.php
@@ -0,0 +1,7 @@
+<?php
+
+ $english = array(
+ 'thewire:add' => "Post to the wire",
+ 'thewire:write:desc' => 'This widget allows sending messages to the wire'
+ );
+ add_translation("en",$english);
diff --git a/mod/profile_widgets/languages/es.php b/mod/profile_widgets/languages/es.php
new file mode 100644
index 000000000..bcc4ee382
--- /dev/null
+++ b/mod/profile_widgets/languages/es.php
@@ -0,0 +1,7 @@
+<?php
+
+ $spanish = array(
+ 'thewire:add' => "Enviar mensaje a la red",
+ 'thewire:write:desc' => 'Este widget permite enviar telegramas a la red'
+ );
+ add_translation("es",$spanish);
diff --git a/mod/profile_widgets/manifest.xml b/mod/profile_widgets/manifest.xml
new file mode 100755
index 000000000..86049cf71
--- /dev/null
+++ b/mod/profile_widgets/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>Extra profile widgets</name>
+ <author>Lorea developers</author>
+ <version>1.8.0</version>
+ <category>widget</category>
+ <description>Extra widgets for profile and dashboard.</description>
+ <copyright>(C) Lorea 2011-2013</copyright>
+ <website>https://lorea.org/</website>
+ <license>GNU Affero General Public License version 3 or higher</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/profile_widgets/start.php b/mod/profile_widgets/start.php
new file mode 100644
index 000000000..47343f273
--- /dev/null
+++ b/mod/profile_widgets/start.php
@@ -0,0 +1,13 @@
+<?php
+
+function profile_widgets_init() {
+
+ // Set dashboard as default page after login
+ if (elgg_is_active_plugin('dashboard') && !isset($_SESSION['last_forward_from'])) {
+ $_SESSION['last_forward_from'] = 'dashboard';
+ }
+
+ elgg_register_widget_type('thewirewrite', elgg_echo('thewire:add'), elgg_echo("thewire:yourdesc:write:desc"), 'dashboard');
+}
+
+elgg_register_event_handler('init', 'system', 'profile_widgets_init');
diff --git a/mod/profile_widgets/views/default/widgets/thewirewrite/view.php b/mod/profile_widgets/views/default/widgets/thewirewrite/view.php
new file mode 100644
index 000000000..9dba9a4cb
--- /dev/null
+++ b/mod/profile_widgets/views/default/widgets/thewirewrite/view.php
@@ -0,0 +1,11 @@
+<div class="contentWrapper">
+<?php
+
+ $form_vars = array('class' => 'thewire-form');
+ $content = elgg_view_form('thewire/add', $form_vars);
+ $content .= elgg_view('input/urlshortener');
+ $context = 'mine';
+ echo $content;
+?>
+</div>
+
diff --git a/mod/purity_theme b/mod/purity_theme
new file mode 160000
+Subproject 60df8b304bd70b5ddc79927abec1b1dc2eb706e
diff --git a/mod/registrationterms/.gitignore b/mod/registrationterms/.gitignore
new file mode 100644
index 000000000..f24f87a96
--- /dev/null
+++ b/mod/registrationterms/.gitignore
@@ -0,0 +1,3 @@
+/.settings
+/.project
+/.buildpath
diff --git a/mod/registrationterms/README.md b/mod/registrationterms/README.md
new file mode 100644
index 000000000..266368f80
--- /dev/null
+++ b/mod/registrationterms/README.md
@@ -0,0 +1,9 @@
+# Registration Terms for Elgg 1.8 #
+
+This is a simple little plugin that adds a checkbox to your registration form
+and forces users to check it before they can proceed.
+
+## Customization ##
+
+If you'd like to customize the wording or translate it into other languages,
+just override the language strings in languages/en.php \ No newline at end of file
diff --git a/mod/registrationterms/languages/ca.php b/mod/registrationterms/languages/ca.php
new file mode 100644
index 000000000..4d2055ba0
--- /dev/null
+++ b/mod/registrationterms/languages/ca.php
@@ -0,0 +1,6 @@
+<?php
+$language = array (
+ 'registrationterms:agree' => 'He llegit i estic d\'acord amb les <a target="_blank" href="%s">Condicions del Servei</a>',
+ 'registrationterms:required' => 'Has d\'estar d\'acord amb les condicions',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/registrationterms/languages/en.php b/mod/registrationterms/languages/en.php
new file mode 100644
index 000000000..eecf0963f
--- /dev/null
+++ b/mod/registrationterms/languages/en.php
@@ -0,0 +1,6 @@
+<?php
+
+add_translation("en", array(
+ 'registrationterms:agree' => 'I have read and agree to the <a target="_blank" href="%s">Terms of Service</a>',
+ 'registrationterms:required' => "You must first agree to the terms",
+)); \ No newline at end of file
diff --git a/mod/registrationterms/manifest.xml b/mod/registrationterms/manifest.xml
new file mode 100644
index 000000000..9277f23eb
--- /dev/null
+++ b/mod/registrationterms/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>Registration Terms</name>
+ <author>Evan Winslow</author>
+ <version>1.8.0</version>
+ <description>Force users to check a box saying they agree to the site's terms before they are allowed to register</description>
+ <website>http://github.com/ewinslow/elgg-registrationterms</website>
+ <copyright>(C) Evan Winslow 2010</copyright>
+ <license>GNU Public License version 2</license>
+ <requires>
+ <type>plugin</type>
+ <name>externalpages</name>
+ </requires>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+
+ <screenshot>
+ <description>Checkbox appears in registration form.</description>
+ <path>screenshots/register-form.png</path>
+ </screenshot>
+
+ <admin_interface>simple</admin_interface>
+</plugin_manifest>
diff --git a/mod/registrationterms/screenshots/register-form.png b/mod/registrationterms/screenshots/register-form.png
new file mode 100644
index 000000000..277a287af
--- /dev/null
+++ b/mod/registrationterms/screenshots/register-form.png
Binary files differ
diff --git a/mod/registrationterms/start.php b/mod/registrationterms/start.php
new file mode 100644
index 000000000..3c42aa14a
--- /dev/null
+++ b/mod/registrationterms/start.php
@@ -0,0 +1,18 @@
+<?php
+
+function registrationterms_init() {
+ //put the terms agreement at the very end
+ elgg_extend_view('register/extend', 'registrationterms/register', 1000);
+
+ //block user registration if they don't check the box
+ elgg_register_plugin_hook_handler('action', 'register', 'registrationterms_register_hook');
+}
+
+function registrationterms_register_hook() {
+ if (get_input('agreetoterms', false) != 'true') {
+ register_error(elgg_echo('registrationterms:required'));
+ forward(REFERER);
+ }
+}
+
+elgg_register_event_handler('init', 'system', 'registrationterms_init');
diff --git a/mod/registrationterms/views/default/registrationterms/register.php b/mod/registrationterms/views/default/registrationterms/register.php
new file mode 100644
index 000000000..153674dd0
--- /dev/null
+++ b/mod/registrationterms/views/default/registrationterms/register.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ *
+ */
+
+$label = elgg_echo('registrationterms:agree', array(elgg_normalize_url('/terms')));
+
+$input = elgg_view('input/checkbox', array(
+ 'name' => 'agreetoterms',
+ 'value' => 'true',
+ 'required' => TRUE,
+ 'default' => false,
+));
+?>
+<div>
+ <label><?php echo "$input $label"; ?></label>
+</div> \ No newline at end of file
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..ed52a536d
--- /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('type' => 'object', 'subtype' => '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..cc33f54fb
--- /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; ?>
+ <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>
+ <?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: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..0095decca
--- /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(
+ 'type' => 'object',
+ 'subtype' => '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/river_privacy/CHANGES.txt b/mod/river_privacy/CHANGES.txt
new file mode 100644
index 000000000..df26e881d
--- /dev/null
+++ b/mod/river_privacy/CHANGES.txt
@@ -0,0 +1,7 @@
+== Version History ==
+
+x.x:
+
+1.0 (05/19/2012):
+
+- Initial Release \ No newline at end of file
diff --git a/mod/river_privacy/README.md b/mod/river_privacy/README.md
new file mode 100644
index 000000000..7e20e27bd
--- /dev/null
+++ b/mod/river_privacy/README.md
@@ -0,0 +1,4 @@
+River-Privacy-1.8.x
+===================
+
+Makes non-object oriented river items private - eg. friendship creation \ No newline at end of file
diff --git a/mod/river_privacy/languages/ca.php b/mod/river_privacy/languages/ca.php
new file mode 100644
index 000000000..50f508e75
--- /dev/null
+++ b/mod/river_privacy/languages/ca.php
@@ -0,0 +1,7 @@
+<?php
+$language = array (
+ 'river_privacy' => 'Privacitat de l\'activitat',
+ 'river_privacy:hide_old:description' => 'Només els objectes que es creen després de l\'activació d\'aquesta extensió seran privats. Aquesta opció pot permetre els antics objectes d\'ocultar-se - això funciona en el moment de mostrar-los, i pot afectar a la visualització (per exemple, s\'espera mostrar 20 elements, però només 15 són visibles perquè 5 d\'ells els filtra aquesta extensió)',
+ 'river_privacy:hide_old:label' => 'Ocultar activitat antiga?',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/river_privacy/languages/en.php b/mod/river_privacy/languages/en.php
new file mode 100644
index 000000000..f0cfde2a1
--- /dev/null
+++ b/mod/river_privacy/languages/en.php
@@ -0,0 +1,13 @@
+<?php
+
+$english = array(
+ 'river_privacy' => "River Privacy",
+ 'river_privacy:hide_old:description' => "Only items that are created after this plugin is enabled
+ will be set to private. This setting can allow old items to be hidden - this is done at
+ display time, so it may affect layout (eg. 20 items are expected to be shown, but only 15 are
+ visible because 5 of them are filtered out by this plugin).
+ Note that new items created will be private regardless of this setting, this setting is only for old items.",
+ 'river_privacy:hide_old:label' => "Hide old river entries?",
+);
+
+add_translation("en",$english);
diff --git a/mod/river_privacy/manifest.xml b/mod/river_privacy/manifest.xml
new file mode 100644
index 000000000..dbd08da35
--- /dev/null
+++ b/mod/river_privacy/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>River Privacy</name>
+ <author>Matt Beckett (matt@clever-name.com)</author>
+ <version>1.8.0</version>
+ <description>Sets non-object oriented river items to private access (eg. friend relationships)</description>
+ <website>http://landing.athabascau.ca</website>
+ <copyright>(C) Matt Beckett, 2012</copyright>
+ <license>GNU Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+
+ <category>privacy</category>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/river_privacy/start.php b/mod/river_privacy/start.php
new file mode 100644
index 000000000..b836ded52
--- /dev/null
+++ b/mod/river_privacy/start.php
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * River Privacy
+ * Makes non-object oriented river entries private
+ * eg. friendships
+ */
+
+function river_privacy_init(){
+ if(elgg_get_plugin_setting('hide_old_items', 'river_privacy') != 'no'){
+ elgg_set_view_location('page/components/list', elgg_get_plugins_path() . 'river_privacy/views_override/');
+ }
+
+ // set the river item to private if it's not an object
+ elgg_register_plugin_hook_handler('creating', 'river', 'river_privacy_creating_river');
+}
+
+
+//
+// hook called before river creation
+// return associative array of parameters to create the river entry
+function river_privacy_creating_river($hook, $type, $returnvalue, $params){
+ if($returnvalue['type'] != 'object'){
+ $returnvalue['access_id'] = ACCESS_PRIVATE;
+ }
+
+ return $returnvalue;
+}
+
+elgg_register_event_handler('init', 'system', 'river_privacy_init'); \ No newline at end of file
diff --git a/mod/river_privacy/views/default/plugins/river_privacy/settings.php b/mod/river_privacy/views/default/plugins/river_privacy/settings.php
new file mode 100644
index 000000000..661416261
--- /dev/null
+++ b/mod/river_privacy/views/default/plugins/river_privacy/settings.php
@@ -0,0 +1,17 @@
+<?php
+
+$options = array(
+ 'name' => 'params[hide_old_items]',
+ 'value' => $vars['entity']->hide_old_items ? $vars['entity']->hide_old_items : 'yes',
+ 'options_values' => array(
+ 'yes' => elgg_echo('option:yes'),
+ 'no' => elgg_echo('option:no'),
+ ),
+);
+
+echo elgg_echo('river_privacy:hide_old:label') . "<br>";
+echo elgg_view('input/dropdown', $options);
+
+echo "<br><br>" . elgg_echo('river_privacy:hide_old:description');
+
+echo "<br><br>"; \ No newline at end of file
diff --git a/mod/river_privacy/views_override/default/page/components/list.php b/mod/river_privacy/views_override/default/page/components/list.php
new file mode 100644
index 000000000..b5a78406d
--- /dev/null
+++ b/mod/river_privacy/views_override/default/page/components/list.php
@@ -0,0 +1,89 @@
+<?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
+ * @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');
+
+// remove non-object items for anyone who's not the subject
+if(is_array($items) && ($items[0] instanceof ElggRiverItem)){
+ foreach($items as $key => $item){
+ if($item->type != 'object' && $item->subject_guid != elgg_get_logged_in_user_guid()){
+ unset($items[$key]);
+ }
+ }
+}
+
+// reset key values
+if ($items)
+ $items = array_merge(array(), $items);
+else
+ $items = array();
+
+$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) {
+ if (elgg_instanceof($item)) {
+ $id = "elgg-{$item->getType()}-{$item->getGUID()}";
+ } else {
+ $id = "item-{$item->getType()}-{$item->id}";
+ }
+ $html .= "<li id=\"$id\" class=\"$item_class\">";
+ $html .= elgg_view_list_item($item, $vars);
+ $html .= '</li>';
+ }
+ $html .= '</ul>';
+}
+
+if ($position == 'before' || $position == 'both') {
+ $html = $nav . $html;
+}
+
+if ($position == 'after' || $position == 'both') {
+ $html .= $nav;
+}
+
+echo $html;
diff --git a/mod/saravea_theme/.gitignore b/mod/saravea_theme/.gitignore
new file mode 100644
index 000000000..b25c15b81
--- /dev/null
+++ b/mod/saravea_theme/.gitignore
@@ -0,0 +1 @@
+*~
diff --git a/mod/saravea_theme/_graphics/ajax-loader.gif b/mod/saravea_theme/_graphics/ajax-loader.gif
new file mode 100644
index 000000000..4d7fd4ec9
--- /dev/null
+++ b/mod/saravea_theme/_graphics/ajax-loader.gif
Binary files differ
diff --git a/mod/saravea_theme/_graphics/elgg_sprites.png b/mod/saravea_theme/_graphics/elgg_sprites.png
new file mode 100755
index 000000000..d22e6b4f1
--- /dev/null
+++ b/mod/saravea_theme/_graphics/elgg_sprites.png
Binary files differ
diff --git a/mod/saravea_theme/_graphics/favicon.ico b/mod/saravea_theme/_graphics/favicon.ico
new file mode 100755
index 000000000..f3524a567
--- /dev/null
+++ b/mod/saravea_theme/_graphics/favicon.ico
Binary files differ
diff --git a/mod/saravea_theme/_graphics/icons/pad_lrg.gif b/mod/saravea_theme/_graphics/icons/pad_lrg.gif
new file mode 100644
index 000000000..213d9b0a0
--- /dev/null
+++ b/mod/saravea_theme/_graphics/icons/pad_lrg.gif
Binary files differ
diff --git a/mod/saravea_theme/_graphics/icons/pad_small.gif b/mod/saravea_theme/_graphics/icons/pad_small.gif
new file mode 100644
index 000000000..594a51b9c
--- /dev/null
+++ b/mod/saravea_theme/_graphics/icons/pad_small.gif
Binary files differ
diff --git a/mod/saravea_theme/_graphics/icons/pad_tiny.gif b/mod/saravea_theme/_graphics/icons/pad_tiny.gif
new file mode 100644
index 000000000..29efe67e9
--- /dev/null
+++ b/mod/saravea_theme/_graphics/icons/pad_tiny.gif
Binary files differ
diff --git a/mod/saravea_theme/_graphics/icons/pages_lrg.gif b/mod/saravea_theme/_graphics/icons/pages_lrg.gif
new file mode 100644
index 000000000..838bdfd89
--- /dev/null
+++ b/mod/saravea_theme/_graphics/icons/pages_lrg.gif
Binary files differ
diff --git a/mod/saravea_theme/_graphics/icons/pages_small.gif b/mod/saravea_theme/_graphics/icons/pages_small.gif
new file mode 100644
index 000000000..58faceae4
--- /dev/null
+++ b/mod/saravea_theme/_graphics/icons/pages_small.gif
Binary files differ
diff --git a/mod/saravea_theme/_graphics/icons/pages_tiny.gif b/mod/saravea_theme/_graphics/icons/pages_tiny.gif
new file mode 100644
index 000000000..216ef38b6
--- /dev/null
+++ b/mod/saravea_theme/_graphics/icons/pages_tiny.gif
Binary files differ
diff --git a/mod/saravea_theme/_graphics/n1.png b/mod/saravea_theme/_graphics/n1.png
new file mode 100644
index 000000000..500735862
--- /dev/null
+++ b/mod/saravea_theme/_graphics/n1.png
Binary files differ
diff --git a/mod/saravea_theme/_graphics/n1_small.png b/mod/saravea_theme/_graphics/n1_small.png
new file mode 100644
index 000000000..ad645df4d
--- /dev/null
+++ b/mod/saravea_theme/_graphics/n1_small.png
Binary files differ
diff --git a/mod/saravea_theme/_graphics/privacy.png b/mod/saravea_theme/_graphics/privacy.png
new file mode 100644
index 000000000..4866921e3
--- /dev/null
+++ b/mod/saravea_theme/_graphics/privacy.png
Binary files differ
diff --git a/mod/saravea_theme/_graphics/saravea_amar.png b/mod/saravea_theme/_graphics/saravea_amar.png
new file mode 100755
index 000000000..0aa7c1929
--- /dev/null
+++ b/mod/saravea_theme/_graphics/saravea_amar.png
Binary files differ
diff --git a/mod/saravea_theme/_graphics/saravea_azul.png b/mod/saravea_theme/_graphics/saravea_azul.png
new file mode 100755
index 000000000..3e653d087
--- /dev/null
+++ b/mod/saravea_theme/_graphics/saravea_azul.png
Binary files differ
diff --git a/mod/saravea_theme/_graphics/saravea_bege.png b/mod/saravea_theme/_graphics/saravea_bege.png
new file mode 100755
index 000000000..283565dd6
--- /dev/null
+++ b/mod/saravea_theme/_graphics/saravea_bege.png
Binary files differ
diff --git a/mod/saravea_theme/_graphics/saravea_lar.png b/mod/saravea_theme/_graphics/saravea_lar.png
new file mode 100755
index 000000000..a9b8a7e7b
--- /dev/null
+++ b/mod/saravea_theme/_graphics/saravea_lar.png
Binary files differ
diff --git a/mod/saravea_theme/_graphics/saravea_verd.png b/mod/saravea_theme/_graphics/saravea_verd.png
new file mode 100755
index 000000000..35026a149
--- /dev/null
+++ b/mod/saravea_theme/_graphics/saravea_verd.png
Binary files differ
diff --git a/mod/saravea_theme/_graphics/saravea_verm.png b/mod/saravea_theme/_graphics/saravea_verm.png
new file mode 100755
index 000000000..3ab1eb94e
--- /dev/null
+++ b/mod/saravea_theme/_graphics/saravea_verm.png
Binary files differ
diff --git a/mod/saravea_theme/_graphics/saravea_verm_small.png b/mod/saravea_theme/_graphics/saravea_verm_small.png
new file mode 100644
index 000000000..3d2799b46
--- /dev/null
+++ b/mod/saravea_theme/_graphics/saravea_verm_small.png
Binary files differ
diff --git a/mod/saravea_theme/_graphics/sidebar_background.gif b/mod/saravea_theme/_graphics/sidebar_background.gif
new file mode 100644
index 000000000..3534b5d0b
--- /dev/null
+++ b/mod/saravea_theme/_graphics/sidebar_background.gif
Binary files differ
diff --git a/mod/saravea_theme/_graphics/two_sidebar_background.gif b/mod/saravea_theme/_graphics/two_sidebar_background.gif
new file mode 100644
index 000000000..d70fec232
--- /dev/null
+++ b/mod/saravea_theme/_graphics/two_sidebar_background.gif
Binary files differ
diff --git a/mod/saravea_theme/languages/ca.php b/mod/saravea_theme/languages/ca.php
new file mode 100644
index 000000000..02ce50e9a
--- /dev/null
+++ b/mod/saravea_theme/languages/ca.php
@@ -0,0 +1,10 @@
+<?php
+
+$catalan = array(
+
+ 'saravea_theme:landing:title' => '¡Xarxes socials del poble i per al poble!',
+ 'saravea_theme:landing:subtitle' => 'Perquè "les eines de l\'amo mai desmontaràn la casa de l\'amo"',
+
+);
+
+add_translation("ca", $catalan);
diff --git a/mod/saravea_theme/languages/en.php b/mod/saravea_theme/languages/en.php
new file mode 100644
index 000000000..796b85747
--- /dev/null
+++ b/mod/saravea_theme/languages/en.php
@@ -0,0 +1,10 @@
+<?php
+
+$english = array(
+
+ 'saravea_theme:landing:title' => '¡Social networks by the people and for the people!',
+ 'saravea_theme:landing:subtitle' => 'Because "the master\'s tools will never dismantle the master\'s house"',
+
+);
+
+add_translation("en", $english);
diff --git a/mod/saravea_theme/languages/es.php b/mod/saravea_theme/languages/es.php
new file mode 100644
index 000000000..469e2c063
--- /dev/null
+++ b/mod/saravea_theme/languages/es.php
@@ -0,0 +1,10 @@
+<?php
+
+$spanish = array(
+
+ 'saravea_theme:landing:title' => '¡Redes sociales del pueblo y para el pueblo!',
+ 'saravea_theme:landing:subtitle' => 'Porque "las herramientas del amo nunca desmontarán la casa del amo"',
+
+);
+
+add_translation("es", $spanish);
diff --git a/mod/saravea_theme/manifest.xml b/mod/saravea_theme/manifest.xml
new file mode 100644
index 000000000..ace67f1dd
--- /dev/null
+++ b/mod/saravea_theme/manifest.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Saravea Theme</name>
+ <author>Lorea</author>
+ <version>1.0</version>
+ <category>theme</category>
+ <description>
+ Modifies your Elgg site to look and behave very much like Facebook.
+ </description>
+ <website>https://github.com/lorea/saravea_theme</website>
+ <copyright>(C) 2011 Lorea</copyright>
+ <license>GNU Public License version 2</license>
+
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>groups</plugin>
+ </requires>
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>messageboard</plugin>
+ </requires>
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>messages</plugin>
+ </requires>
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>profile</plugin>
+ </requires>
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>search</plugin>
+ </requires>
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>thewire</plugin>
+ </requires>
+
+ <suggests>
+ <type>plugin</type>
+ <name>profile</name>
+ <version>1.8</version>
+ </suggests>
+</plugin_manifest>
diff --git a/mod/saravea_theme/start.php b/mod/saravea_theme/start.php
new file mode 100644
index 000000000..b74541490
--- /dev/null
+++ b/mod/saravea_theme/start.php
@@ -0,0 +1,132 @@
+<?php
+
+elgg_register_event_handler('init', 'system', 'saravea_theme_init');
+
+function saravea_theme_init() {
+ elgg_unregister_menu_item('topbar','elgg_logo');
+ $item = new ElggMenuItem('site_logo', elgg_get_site_entity()->name, elgg_get_site_url());
+ elgg_register_menu_item('topbar', $item);
+ elgg_register_plugin_hook_handler('register', 'menu:topbar', 'saravea_theme_topbar_menu');
+
+ elgg_register_simplecache_view('saravea_theme/landing');
+ elgg_register_css('n1:landing_page', elgg_get_simplecache_url('css', 'saravea_theme/landing'));
+
+ elgg_extend_view('css/elgg', 'saravea_theme/css');
+ elgg_extend_view('js/elgg', 'saravea_theme/js');
+ elgg_extend_view('page/elements/title', 'saravea_theme/header', 0);
+ // custom index widgets
+ foreach(array("custom_index", "edit_widgets", "index_2rbhh", "index_2rhhb",
+ "index", "index_2rbms", "index_2rmsb",
+ "index_1rsss", "index_2rbsm", "index_2rsmb") as $layout) {
+ elgg_extend_view('page/layouts/'.$layout, 'saravea_theme/landing', 0);
+ }
+
+ if (elgg_is_active_plugin('pages')) {
+ // pages icon url override
+ elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'saravea_theme_pages_icon_url_override');
+ }
+}
+
+function saravea_theme_topbar_menu($hook, $type, $returnvalue, $params){
+ $user = elgg_get_logged_in_user_entity();
+
+ if (elgg_is_active_plugin('groups')) {
+
+ $ia = elgg_set_ignore_access(TRUE);
+ $num_invitations = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'invited',
+ 'relationship_guid' => $user->guid,
+ 'inverse_relationship' => TRUE,
+ 'limit' => 0,
+ 'count' => TRUE,
+ ));
+ elgg_set_ignore_access($ia);
+
+ if ($num_invitations) {
+ $num_invitations = elgg_view('output/url', array(
+ 'text' => "<span class=\"messages-new\">$num_invitations</span>",
+ 'href' => "groups/invitations/$user->username",
+ ));
+ }
+
+ $returnvalue[] = ElggMenuItem::factory(array(
+ 'name' => 'groups',
+ 'href' => "groups/member/$user->username",
+ 'text' => elgg_view_icon('groups') . $num_invitations,
+ 'title' => elgg_echo('groups'),
+ 'priority' => 500,
+ ));
+ }
+
+ if (elgg_is_admin_logged_in()) {
+ $returnvalue[] = ElggMenuItem::factory(array(
+ 'name' => 'administration',
+ 'href' => "admin",
+ 'text' => elgg_view_icon('settings'),
+ 'title' => elgg_echo('admin'),
+ 'priority' => 100,
+ 'section' => 'alt',
+ ));
+ }
+
+ if (elgg_is_active_plugin('dashboard')) {
+ $returnvalue[] = ElggMenuItem::factory(array(
+ 'name' => 'dashboard',
+ 'href' => "dashboard",
+ 'text' => elgg_view_icon('home'),
+ 'title' => elgg_echo('dashboard'),
+ 'priority' => 200,
+ 'section' => 'alt',
+ ));
+ }
+
+ $returnvalue[] = ElggMenuItem::factory(array(
+ 'name' => 'usersettings',
+ 'href' => "settings/user/{$user->username}",
+ 'text' => elgg_view_icon('settings-alt'),
+ 'title' => elgg_echo('settings'),
+ 'priority' => 500,
+ 'section' => 'alt',
+ ));
+
+ $returnvalue[] = ElggMenuItem::factory(array(
+ 'name' => 'logout',
+ 'href' => "action/logout",
+ 'text' => elgg_echo('logout'),
+ 'title' => elgg_echo('logout'),
+ 'is_action' => TRUE,
+ 'priority' => 1000,
+ 'section' => 'alt',
+ ));
+ return $returnvalue;
+}
+
+/**
+ * Override the default entity icon for pages and pads
+ *
+ * @return string Relative URL
+ */
+function saravea_theme_pages_icon_url_override($hook, $type, $returnvalue, $params) {
+ $entity = $params['entity'];
+ if (elgg_instanceof($entity, 'object', 'page_top') ||
+ elgg_instanceof($entity, 'object', 'page')) {
+ $icon = 'pages';
+ } elseif (elgg_instanceof($entity, 'object', 'etherpad') ||
+ elgg_instanceof($entity, 'object', 'subpad')) {
+ $icon = 'pad';
+ } else {
+ return $returnvalue;
+ }
+ switch ($params['size']) {
+ case 'topbar':
+ case 'tiny':
+ return "mod/saravea_theme/_graphics/icons/{$icon}_tiny.gif";
+ break;
+ case 'small':
+ return "mod/saravea_theme/_graphics/icons/{$icon}_small.gif";
+ break;
+ default:
+ return "mod/saravea_theme/_graphics/icons/{$icon}_lrg.gif";
+ break;
+ }
+}
diff --git a/mod/saravea_theme/vendors/opensans/LICENSE.txt b/mod/saravea_theme/vendors/opensans/LICENSE.txt
new file mode 100644
index 000000000..75b52484e
--- /dev/null
+++ b/mod/saravea_theme/vendors/opensans/LICENSE.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/mod/saravea_theme/vendors/opensans/OpenSans-Bold.ttf b/mod/saravea_theme/vendors/opensans/OpenSans-Bold.ttf
new file mode 100644
index 000000000..fd79d43be
--- /dev/null
+++ b/mod/saravea_theme/vendors/opensans/OpenSans-Bold.ttf
Binary files differ
diff --git a/mod/saravea_theme/vendors/opensans/OpenSans-BoldItalic.ttf b/mod/saravea_theme/vendors/opensans/OpenSans-BoldItalic.ttf
new file mode 100644
index 000000000..9bc800958
--- /dev/null
+++ b/mod/saravea_theme/vendors/opensans/OpenSans-BoldItalic.ttf
Binary files differ
diff --git a/mod/saravea_theme/vendors/opensans/OpenSans-ExtraBold.ttf b/mod/saravea_theme/vendors/opensans/OpenSans-ExtraBold.ttf
new file mode 100644
index 000000000..21f6f84a0
--- /dev/null
+++ b/mod/saravea_theme/vendors/opensans/OpenSans-ExtraBold.ttf
Binary files differ
diff --git a/mod/saravea_theme/vendors/opensans/OpenSans-ExtraBoldItalic.ttf b/mod/saravea_theme/vendors/opensans/OpenSans-ExtraBoldItalic.ttf
new file mode 100644
index 000000000..31cb68834
--- /dev/null
+++ b/mod/saravea_theme/vendors/opensans/OpenSans-ExtraBoldItalic.ttf
Binary files differ
diff --git a/mod/saravea_theme/vendors/opensans/OpenSans-Italic.ttf b/mod/saravea_theme/vendors/opensans/OpenSans-Italic.ttf
new file mode 100644
index 000000000..c90da48ff
--- /dev/null
+++ b/mod/saravea_theme/vendors/opensans/OpenSans-Italic.ttf
Binary files differ
diff --git a/mod/saravea_theme/vendors/opensans/OpenSans-Light.ttf b/mod/saravea_theme/vendors/opensans/OpenSans-Light.ttf
new file mode 100644
index 000000000..0d381897d
--- /dev/null
+++ b/mod/saravea_theme/vendors/opensans/OpenSans-Light.ttf
Binary files differ
diff --git a/mod/saravea_theme/vendors/opensans/OpenSans-LightItalic.ttf b/mod/saravea_theme/vendors/opensans/OpenSans-LightItalic.ttf
new file mode 100644
index 000000000..68299c4bc
--- /dev/null
+++ b/mod/saravea_theme/vendors/opensans/OpenSans-LightItalic.ttf
Binary files differ
diff --git a/mod/saravea_theme/vendors/opensans/OpenSans-Regular.ttf b/mod/saravea_theme/vendors/opensans/OpenSans-Regular.ttf
new file mode 100644
index 000000000..db433349b
--- /dev/null
+++ b/mod/saravea_theme/vendors/opensans/OpenSans-Regular.ttf
Binary files differ
diff --git a/mod/saravea_theme/vendors/opensans/OpenSans-Semibold.ttf b/mod/saravea_theme/vendors/opensans/OpenSans-Semibold.ttf
new file mode 100644
index 000000000..1a7679e39
--- /dev/null
+++ b/mod/saravea_theme/vendors/opensans/OpenSans-Semibold.ttf
Binary files differ
diff --git a/mod/saravea_theme/vendors/opensans/OpenSans-SemiboldItalic.ttf b/mod/saravea_theme/vendors/opensans/OpenSans-SemiboldItalic.ttf
new file mode 100644
index 000000000..59b6d16b0
--- /dev/null
+++ b/mod/saravea_theme/vendors/opensans/OpenSans-SemiboldItalic.ttf
Binary files differ
diff --git a/mod/saravea_theme/views/default/css/admin.php b/mod/saravea_theme/views/default/css/admin.php
new file mode 100644
index 000000000..b996e5636
--- /dev/null
+++ b/mod/saravea_theme/views/default/css/admin.php
@@ -0,0 +1,1648 @@
+<?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;
+}
+.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/mod/saravea_theme/views/default/css/elements/OOCSS_LICENSE b/mod/saravea_theme/views/default/css/elements/OOCSS_LICENSE
new file mode 100644
index 000000000..c09c45873
--- /dev/null
+++ b/mod/saravea_theme/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/mod/saravea_theme/views/default/css/elements/buttons.php b/mod/saravea_theme/views/default/css/elements/buttons.php
new file mode 100644
index 000000000..2d53ed192
--- /dev/null
+++ b/mod/saravea_theme/views/default/css/elements/buttons.php
@@ -0,0 +1,240 @@
+<?php
+/**
+ * CSS buttons
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+/* **************************
+ BUTTONS
+************************** */
+
+/* Base */
+.elgg-button {
+ font-size: 13px;
+ font-weight: bold;
+
+ width: auto;
+ padding: 4px 15px;
+ cursor: pointer;
+ border: 1px solid #bbb;
+ outline: none;
+ color: #666;
+ text-decoration: none;
+
+ box-shadow: 0px 1px 1px #888;
+
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+
+ background: #eeeeee; /* Old browsers */
+ background: -moz-linear-gradient(top, #eeeeee 0%, #cccccc 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eeeeee), color-stop(100%,#cccccc)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #eeeeee 0%,#cccccc 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #eeeeee 0%,#cccccc 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #eeeeee 0%,#cccccc 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #eeeeee 0%,#cccccc 100%); /* W3C */
+}
+
+.elgg-button:hover {
+ background: #dbdbdb; /* Old browsers */
+ background: -moz-linear-gradient(top, #dbdbdb 0%, #b7b7b7 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#dbdbdb), color-stop(100%,#b7b7b7)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #dbdbdb 0%,#b7b7b7 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #dbdbdb 0%,#b7b7b7 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #dbdbdb 0%,#b7b7b7 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #dbdbdb 0%,#b7b7b7 100%); /* W3C */
+}
+
+
+a.elgg-button {
+ text-decoration: none;
+}
+
+/* Submit: This button should convey, "you're about to take some definitive action" */
+.elgg-button-submit {
+ color: #ddd;
+ text-shadow: 0 -1px 0px #000;
+ box-shadow: 0px 1px 2px #333;
+ border: none;
+
+ background: #444444; /* Old browsers */
+ background: -moz-linear-gradient(top, #444444 0%, #000000 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#444444), color-stop(100%,#000000)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #444444 0%,#000000 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #444444 0%,#000000 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #444444 0%,#000000 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #444444 0%,#000000 100%); /* W3C */
+
+}
+
+.elgg-button-submit:hover {
+ color: #eee;
+ text-shadow: 0 1px 1px #222;
+
+ background: #6b6b6b; /* Old browsers */
+ background: -moz-linear-gradient(top, #6b6b6b 1%, #0f0f0f 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#6b6b6b), color-stop(100%,#0f0f0f)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #6b6b6b 1%,#0f0f0f 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #6b6b6b 1%,#0f0f0f 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #6b6b6b 1%,#0f0f0f 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #6b6b6b 1%,#0f0f0f 100%); /* W3C */
+
+}
+
+.elgg-button-submit.elgg-state-disabled {
+ background: #45484d;
+ color: #888;
+ cursor: default;
+}
+
+
+/* Cancel: This button should convey a negative but easily reversible action (e.g., turning off a plugin) */
+.elgg-button-cancel {
+ color: #888;
+
+
+
+}
+.elgg-button-cancel:hover {
+ color: #BA1C1C;
+
+}
+
+/* Action: This button should convey a normal, inconsequential action, such as clicking a link */
+.elgg-button-action {
+ color: #ddd;
+ text-shadow: 0 -1px 0px #000;
+ border: none;
+
+
+
+ background: #444444; /* Old browsers */
+ background: -moz-linear-gradient(top, #444444 0%, #000000 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#444444), color-stop(100%,#000000)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #444444 0%,#000000 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #444444 0%,#000000 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #444444 0%,#000000 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #444444 0%,#000000 100%); /* W3C */
+}
+
+
+.elgg-button-action:hover,
+.elgg-button-action:focus {
+ color: #eee;
+
+ background: #6b6b6b; /* Old browsers */
+ background: -moz-linear-gradient(top, #6b6b6b 1%, #0f0f0f 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#6b6b6b), color-stop(100%,#0f0f0f)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #6b6b6b 1%,#0f0f0f 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #6b6b6b 1%,#0f0f0f 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #6b6b6b 1%,#0f0f0f 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #6b6b6b 1%,#0f0f0f 100%); /* W3C */
+
+
+}
+
+
+.elgg-button-action.elgg-state-disabled {
+ background: #45484d;
+ color: #888;
+ cursor: default;
+}
+
+/* Delete: This button should convey "be careful before you click me" */
+.elgg-button-delete {
+ color: #d36900;
+ text-shadow: 0 -1px 0px #111;
+ border: none;
+
+ background: #45484d; /* Old browsers */
+ background: -moz-linear-gradient(top, #45484d 0%, #000000 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#45484d), color-stop(100%,#000000)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #45484d 0%,#000000 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #45484d 0%,#000000 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #45484d 0%,#000000 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #45484d 0%,#000000 100%); /* W3C */
+}
+
+
+
+
+
+.elgg-button-delete:hover {
+ color: #d36900;
+
+ bbackground: #6b6b6b; /* Old browsers */
+ background: -moz-linear-gradient(top, #6b6b6b 1%, #0f0f0f 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(1%,#6b6b6b), color-stop(100%,#0f0f0f)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #6b6b6b 1%,#0f0f0f 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #6b6b6b 1%,#0f0f0f 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #6b6b6b 1%,#0f0f0f 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #6b6b6b 1%,#0f0f0f 100%); /* W3C */
+ text-decoration: none;
+}
+
+.elgg-button-delete .elgg-state-disabled {
+ color: #d36900;
+ background-color: #333;
+ text-shadow: 0 -1px 0px #111;
+ border: 1px solid #999;
+}
+
+.elgg-button-delete .elgg-state-disabled:hover {
+ color: #d36900;
+ background-color: #333;
+ text-shadow: 0 -1px 0px #111;
+ border: 1px solid #999;
+}
+
+
+
+
+.elgg-button-dropdown {
+ padding:3px 6px;
+ text-decoration:none;
+ display:block;
+ font-weight:normal;
+ position:relative;
+ margin-left:0;
+ color: #333;
+ border:1px solid #333;
+
+ -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 {
+ color: #333;
+ background-color: #d86c2c;
+ 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/mod/saravea_theme/views/default/css/elements/components.php b/mod/saravea_theme/views/default/css/elements/components.php
new file mode 100644
index 000000000..c3a7cdb9e
--- /dev/null
+++ b/mod/saravea_theme/views/default/css/elements/components.php
@@ -0,0 +1,354 @@
+<?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;
+}
+
+.elgg-subtext {
+ margin-top: 3px;
+}
+
+.elgg-subtext .elgg-tags {
+ font-size: 90%;
+ padding-top: 4px;
+}
+
+/* ***************************************
+ 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, .elgg-content .elgg-output, .elgg-item .elgg-output {
+ margin: 5px;
+ background-color: #f7f7f7;
+ border: 1px solid #ddd;
+ padding: 10px;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+
+
+/* ***************************************
+ 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;
+}
+
+.elgg-owner-block h3 {
+
+}
+.elgg-owner-block .elgg-subtext {
+ padding: 2px 0 9px 0;
+}
+
+
+
+
+/* ***************************************
+ 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: 3px;
+ -moz-border-radius: 3x;
+ border-radius: 3px;
+}
+.elgg-state-success {
+ background-color: #219C8B;
+ color: white;
+}
+.elgg-state-error {
+ background-color: #DE0218;
+}
+.elgg-state-notice {
+ background-color: #ff4c12;
+}
+
+/* ***************************************
+ 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%;
+ line-height: 1.2em;
+}
+.elgg-river-timestamp:before {
+ content: '(';
+}
+.elgg-river-timestamp:after {
+ content: ')';
+}
+
+.elgg-river-attachments,
+.elgg-river-message,
+.elgg-river-content {
+ color: #444;
+ background-color: #f7f7f7;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ font-size: 100%;
+ line-height: 1.5em;
+ margin: 8px 0 5px 0;
+ padding: 5px;
+}
+
+.elgg-river-summary{
+ font-size: 94%;
+}
+.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: #f7f7f7;
+ color: #444;
+ margin-top: 5px;
+ width: auto;
+ float: right;
+ font-size: 85%;
+ padding: 1px 7px;
+ border-right: solid 1px #BBB;
+
+ -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;
+ background-color: #f7f7f7;
+ border-top: none;
+ border-right: solid 1px #BBB;
+ border-bottom: solid 1px #BBB;
+
+ -webkit-border-radius: 3px;
+ -webkit-border-top-right-radius: 0;
+ -moz-border-radius: 3px;
+ -moz-border-radius-topright: 0;
+ border-radius: 3px;
+ border-top-right-radius: 0;
+}
+
+.elgg-river-comments .elgg-output {
+ border: 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 {
+ 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;
+}
+
+.elgg-comments h3{
+ font-weight: bold;
+ margin-bottom: 5px;
+}
+
+.elgg-comments li.elgg-item {
+ padding: 10px 0;
+}
+
+/* ***************************************
+ Image-related
+*************************************** */
+.elgg-photo {
+ border: 1px solid #CCC;
+ padding: 1px;
+ background-color: white;
+ box-shadow: 0px 1px 1px #666;
+}
+
+/* ***************************************
+ 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/mod/saravea_theme/views/default/css/elements/core.php b/mod/saravea_theme/views/default/css/elements/core.php
new file mode 100644
index 000000000..74f21ee59
--- /dev/null
+++ b/mod/saravea_theme/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/mod/saravea_theme/views/default/css/elements/forms.php b/mod/saravea_theme/views/default/css/elements/forms.php
new file mode 100644
index 000000000..50d5b0bd4
--- /dev/null
+++ b/mod/saravea_theme/views/default/css/elements/forms.php
@@ -0,0 +1,416 @@
+<?php
+/**
+ * CSS form/input elements
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+
+/* ***************************************
+ Form Elements
+*************************************** */
+fieldset.elgg-fieldset {
+ border: 1px solid #ccc;
+ padding: 10px;
+ margin-top: 10px;
+ background-color: #dedede;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+fieldset.elgg-fieldset legend {
+ font-weight: bold;
+ font-size: 110%;
+ padding: 3px 8px;
+ background-color: #EEE;
+ border: 1px solid #BBB;
+
+ box-shadow: 1px 1px 2px #bbb;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+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 {
+ color: #333;
+}
+
+input, textarea {
+ color: #666;
+ font-family: "Open Sans";
+ font-size: 120%;
+ padding: 5px;
+ width: 100%;
+}
+
+input[type=text], input[type=password], textarea {
+ background-color: #f7f7f7;
+ border: 1px solid #ccc;
+
+ -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;
+
+ box-shadow: inset 0 2px 3px #999;
+}
+
+input[type=text]:focus, input[type=password]:focus, textarea:focus {
+ /*border: solid 1px #ff4c12;*/
+ /*background: #D5E2F7;*/
+ background: white;
+ border: 1px solid #888;
+ color:#333;
+}
+
+input[type=file], input[type=button], input[type=reset], input[type=submit] {
+ border: none;
+}
+
+input[type=file] {
+ background: none;
+}
+
+input[type=image] {
+ width: auto;
+}
+
+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: #ff4c12;
+ 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 {
+ font-size: 90%;
+ font-weight: bold;
+ position: absolute;
+ cursor: default;
+}
+.elgg-autocomplete-item .elgg-body {
+ max-width: 600px;
+}
+.ui-autocomplete {
+ background-color: #f7f7f7;
+ border: 1px solid #ccc;
+ overflow: hidden;
+}
+.ui-autocomplete .ui-menu-item {
+ padding: 0px 4px;
+ font-weight: normal;
+}
+.ui-autocomplete .ui-menu-item:hover {
+ background-color: #eee;
+ cursor: pointer;
+}
+.ui-autocomplete .ui-menu-item:hover a {
+ color: #FF4C12;
+ background: none;
+ border: none;
+ border-radius: 0;
+}
+.ui-combobox {
+ height: 23px !important;
+}
+
+/* ***************************************
+ 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: #eee;
+ border: 1px solid #333;
+ -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: #333;
+ color: #eee;
+ padding: 2px 0;
+}
+.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: #ff4c12;
+ 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 transparent;
+ color: #ff4c12;
+ background: none;
+}
+.ui-datepicker-calendar .ui-state-hover {
+ border: 1px solid #aaa;
+ background: #eee;
+}
+.ui-datepicker-calendar .ui-state-active,
+.ui-datepicker-calendar .ui-state-active.ui-state-hover {
+ font-weight: bold;
+ border: 1px solid transparent;
+ color: #eee;
+ background: #333;
+}
diff --git a/mod/saravea_theme/views/default/css/elements/grid.php b/mod/saravea_theme/views/default/css/elements/grid.php
new file mode 100644
index 000000000..900300f2c
--- /dev/null
+++ b/mod/saravea_theme/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.3%;
+}
+.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/mod/saravea_theme/views/default/css/elements/helpers.php b/mod/saravea_theme/views/default/css/elements/helpers.php
new file mode 100644
index 000000000..e9a9e0a30
--- /dev/null
+++ b/mod/saravea_theme/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/mod/saravea_theme/views/default/css/elements/icons.php b/mod/saravea_theme/views/default/css/elements/icons.php
new file mode 100644
index 000000000..d84c2c387
--- /dev/null
+++ b/mod/saravea_theme/views/default/css/elements/icons.php
@@ -0,0 +1,407 @@
+<?php
+/**
+ * Elgg icons
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+
+?>
+
+/* ***************************************
+ ICONS
+*************************************** */
+
+.elgg-icon, .elgg-menu-item-logout a {
+ background: transparent url(<?php echo elgg_get_site_url(); ?>mod/saravea_theme/_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 -91px;
+}
+.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 -304px;
+}
+.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 -775px;
+}
+.elgg-icon-refresh {
+ background-position: 0 -791px;
+}
+.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 -934px;
+}
+.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 -1242px;
+}
+.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 -1493px;
+}
+.elgg-icon-video {
+ background-position: 0 -1512px;
+}
+.elgg-icon-logout, .elgg-menu-item-logout a {
+ background-position: 0 -1525px;
+}
+.elgg-icon-logout:hover, .elgg-menu-item-logout:hover a {
+ background-position: 0 -1542px;
+}
+.elgg-icon-groups {
+ background-position: 0 -1560px;
+}
+.elgg-icon-groups:hover {
+ background-position: 0 -1577px;
+}
+
+.elgg-icon-group, .elgg-menu-item-group a {
+ background-position: 0 -1560px;
+}
+
+.elgg-icon-group:hover, .elgg-menu-item-group:hover a {
+ background-position: 0 -1578px;
+}
+
+
+
+.elgg-avatar > .elgg-icon-hover-menu {
+ display: none;
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ margin: 0;
+ cursor: pointer;
+}
+
+.elgg-ajax-loader {
+ background: transparent url(<?php echo elgg_get_site_url(); ?>mod/saravea_theme/_graphics/ajax-loader.gif) no-repeat center center;
+ min-height: 31px;
+ min-width: 31px;
+}
+
+/* ***************************************
+ AVATAR ICONS
+*************************************** */
+.elgg-avatar {
+ position: relative;
+ display: inline-block;
+
+ border: 2px solid #F1F1F1;
+ box-shadow: 0px 1px 3px #666;
+}
+.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: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+
+ -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;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.elgg-avatar-large > a > img {
+ width: 200px;
+ height: 200px;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+
+.elgg-owner-block .elgg-image {
+ height: 25px;
+ background-color: #eee;
+ box-shadow: 0px 1px 2px #333;
+ padding: 1px;
+
+ -webkit-border-radius: 1px;
+ -moz-border-radius: 1px;
+ border-radius: 1px;
+}
+
+.subgroups-icons a img {
+ width: 25px;
+ height: 25px;
+ background-color: #eee;
+ box-shadow: 0px 1px 2px #333;
+ padding: 1px;
+ margin: 0px 3px 3px 0px;
+
+ -webkit-border-radius: 1px;
+ -moz-border-radius: 1px;
+ border-radius: 1px;
+}
+
+
diff --git a/mod/saravea_theme/views/default/css/elements/layout.php b/mod/saravea_theme/views/default/css/elements/layout.php
new file mode 100644
index 000000000..9a61faa8f
--- /dev/null
+++ b/mod/saravea_theme/views/default/css/elements/layout.php
@@ -0,0 +1,145 @@
+<?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
+*************************************** */
+
+body {
+ background-color: #eeeeee;
+}
+
+/***** 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 {
+ min-width: 980px;
+ margin: 0 auto;
+ height: 90px;
+}
+.elgg-page-default .elgg-page-body > .elgg-inner {
+ min-width: 980px;
+ margin: 0 auto;
+}
+.elgg-page-default .elgg-page-footer > .elgg-inner {
+ min-width: 940px;
+ margin: 0 auto;
+ padding: 5px 20px;
+ border-top: 1px solid #DEDEDE;
+}
+
+/***** TOPBAR ******/
+.elgg-page-topbar {
+ background-color: #333333;
+ position: relative;
+ height: 24px;
+ z-index: 9000;
+ position: fixed;
+ width: 100%;
+}
+.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: #333333;
+ padding-top: 24px;
+}
+.elgg-page-header > .elgg-inner {
+ position: relative;
+ background: transparent url(<?php echo elgg_get_site_url(); ?>mod/saravea_theme/_graphics/saravea_verm_small.png) no-repeat 650px -15px;
+}
+
+/***** LIQUID LAYOUT *******/
+
+.elgg-page-body .elgg-inner {
+ position: relative; /* This fixes the IE7 overflow hidden bug */
+ clear: both;
+ overflow: hidden; /* This chops off any overhanging divs */
+ background-color: #dedede;
+}
+.elgg-layout {
+ background-color: #eee;
+ float: left;
+ position: relative;
+ min-height: 500px;
+}
+.elgg-layout-one-sidebar {
+ right: 25%;
+}
+.elgg-sidebar {
+ left: 31%;
+ width: 21%;
+ padding: 20px;
+}
+.elgg-sidebar-alt {
+ position: relative;
+ padding: 20px 10px;
+ float: left;
+ width: 160px;
+ margin: 0 10px 0 0;
+}
+.elgg-main {
+ left: 2%;
+ width: 96%;
+}
+.elgg-layout-one-sidebar .elgg-main {
+ left: 27%;
+ width: 71%;
+}
+.elgg-main > .elgg-head {
+ padding-bottom: 3px;
+ margin-bottom: 10px;
+}
+
+.elgg-main, .elgg-sidebar {
+ float: left;
+ position: relative;
+ padding: 1em 0 1em 0;
+ overflow: hidden;
+}
+
+/***** PAGE FOOTER ******/
+.elgg-page-footer {
+ clear:both;
+ float:left;
+ width:100%;
+}
+.elgg-page-footer {
+ color: #999;
+}
+.elgg-page-footer .elgg-inner {
+ margin: 20px;
+}
+.elgg-page-footer a:hover {
+ color: #666;
+}
diff --git a/mod/saravea_theme/views/default/css/elements/misc.php b/mod/saravea_theme/views/default/css/elements/misc.php
new file mode 100644
index 000000000..d2f0a8bed
--- /dev/null
+++ b/mod/saravea_theme/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: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+
+ background: none repeat scroll 0 0 #ff4c12;
+ 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/mod/saravea_theme/views/default/css/elements/modules.php b/mod/saravea_theme/views/default/css/elements/modules.php
new file mode 100644
index 000000000..28332bb7d
--- /dev/null
+++ b/mod/saravea_theme/views/default/css/elements/modules.php
@@ -0,0 +1,205 @@
+/* ***************************************
+ 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 {
+ width: 97%;
+ padding: 5px;
+ margin-bottom: 10px;
+ border: 1px solid #BBB;
+ text-shadow: 0px 1px white;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+
+ background: #e5e5e5; /* Old browsers */
+ background: -moz-linear-gradient(top, #e5e5e5 0%, #e1e1e1 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e5e5e5), color-stop(100%,#e1e1e1)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #e5e5e5 0%,#e1e1e1 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #e5e5e5 0%,#e1e1e1 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #e5e5e5 0%,#e1e1e1 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #e5e5e5 0%,#e1e1e1 100%); /* W3C */
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e5e5e5', endColorstr='#e1e1e1',GradientType=0 ); /* IE6-9 */
+}
+.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: #d86c2c;
+}
+
+/* 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 #333;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.elgg-module-featured > .elgg-head {
+ padding: 5px;
+ background-color: #333;
+}
+.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 {
+ padding: 2px;
+ margin: 0 5px 15px;
+ position: relative;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+}
+.elgg-module-widget:hover > .elgg-head {
+ background-color: #f5f5f5;
+}
+.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 {
+ 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 #1F9C93;
+ margin-bottom: 15px;
+}
diff --git a/mod/saravea_theme/views/default/css/elements/navigation.php b/mod/saravea_theme/views/default/css/elements/navigation.php
new file mode 100644
index 000000000..1b08c5305
--- /dev/null
+++ b/mod/saravea_theme/views/default/css/elements/navigation.php
@@ -0,0 +1,596 @@
+<?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: #555;
+ border: 1px solid #ccc;
+ font-size: 12px;
+ text-shadow: 0px 1px 1px white, 0 -1px 1px #AAA;
+
+ background: #f7f7f7; /* Old browsers */
+ background: -moz-linear-gradient(top, #f7f7f7 0%, #d3d3d3 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f7f7f7), color-stop(100%,#d3d3d3)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #f7f7f7 0%,#d3d3d3 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #f7f7f7 0%,#d3d3d3 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #f7f7f7 0%,#d3d3d3 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #f7f7f7 0%,#d3d3d3 100%); /* W3C */
+}
+.elgg-pagination a:hover {
+ color: #333;
+ text-decoration: none;
+
+
+ background: #ffffff; /* Old browsers */
+ background: -moz-linear-gradient(top, #ffffff 0%, #f2f2f2 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#f2f2f2)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #ffffff 0%,#f2f2f2 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #ffffff 0%,#f2f2f2 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #ffffff 0%,#f2f2f2 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #ffffff 0%,#f2f2f2 100%); /* W3C */
+}
+
+.elgg-pagination .elgg-state-disabled span {
+ opacity: 0.3;
+}
+.elgg-pagination .elgg-state-selected span, .elgg-pagination a:active {
+ color: #eee;
+
+ text-shadow: 0px 1px 1px #999, 0 -1px 1px #222;
+
+ background: #4f4f4f; /* Old browsers */
+ background: -moz-linear-gradient(top, #4f4f4f 0%, #7a7a7a 100%); /* FF3.6+ */
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#4f4f4f), color-stop(100%,#7a7a7a)); /* Chrome,Safari4+ */
+ background: -webkit-linear-gradient(top, #4f4f4f 0%,#7a7a7a 100%); /* Chrome10+,Safari5.1+ */
+ background: -o-linear-gradient(top, #4f4f4f 0%,#7a7a7a 100%); /* Opera 11.10+ */
+ background: -ms-linear-gradient(top, #4f4f4f 0%,#7a7a7a 100%); /* IE10+ */
+ background: linear-gradient(to bottom, #4f4f4f 0%,#7a7a7a 100%); /* W3C */
+}
+}
+
+/* ***************************************
+ TABS
+*************************************** */
+.elgg-tabs {
+ margin-bottom: 5px;
+ border-bottom: 1px solid #999;
+ display: table;
+ width: 100%;
+}
+.elgg-tabs li {
+ float: left;
+ border: 1px solid transparent;
+ border-bottom: 0;
+ margin: 0 5px 0 0;
+
+ -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: 1px 10px 0;
+ text-align: center;
+ height: 21px;
+ color: #333;
+ font-weight: bold;
+}
+.elgg-tabs a:hover {
+ color: #ff4c12;
+}
+.elgg-tabs .elgg-state-selected {
+ border-color: #999;
+ background: #eeeeee;
+ position: relative;
+ top: 1px;
+}
+.elgg-tabs .elgg-state-selected a {
+ position: relative;
+ top: -1px;
+}
+
+/* ***************************************
+ BREADCRUMBS
+*************************************** */
+.elgg-breadcrumbs {
+ /*font-size: 80%;*/
+ font-weight: bold;
+ line-height: 1.2em;
+ color: #bababa;
+ margin: 8px 0px;
+}
+
+.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: #FF4C12;
+ 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: 2px 7px 0;
+ margin-top: 1px;
+ font-size: 0px;
+ color: #333;
+}
+
+.elgg-menu-topbar > li > a:hover {
+ color: #333;
+ 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;
+}
+
+.elgg-menu-item-logout a {
+ margin-top: 2px;
+ margin-left: 8px;
+ padding-top: 1px;
+}
+
+
+/* ***************************************
+ 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: #ed9239;
+}
+
+.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 {
+ color: white;
+ text-shadow: 0px 0px 4px #FFF;
+}
+
+.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: #333;
+ color: #ed9239;
+
+ -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 {
+ text-shadow: 0px 0px 4px #FFF;
+ 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: 1px solid #999;
+ display: table;
+ width: 100%;
+}
+.elgg-menu-filter > li {
+ float: left;
+ border: 1px solid transparent;
+ border-bottom: 0;
+ margin: 0 5px 0 0;
+
+ -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 {
+
+}
+.elgg-menu-filter > li > a {
+ text-decoration: none;
+ display: block;
+ padding: 1px 10px 0;
+ text-align: center;
+ height: 21px;
+ color: #333;
+ font-weight: bold;
+
+ -webkit-border-radius: 5px 5px 0 0;
+ -moz-border-radius: 5px 5px 0 0;
+ border-radius: 5px 5px 0 0;
+}
+.elgg-menu-filter > li > a:hover {
+ color: #ff4c12;
+}
+.elgg-menu-filter > .elgg-state-selected {
+ border-color: #999;
+ background: #eee;
+ position: relative;
+ top: 1px;
+}
+.elgg-menu-filter > .elgg-state-selected > a {
+ position: relative;
+ top: -1px;
+}
+
+/* ***************************************
+ PAGE MENU
+*************************************** */
+.elgg-menu-page {
+ margin-bottom: 15px;
+}
+
+.elgg-menu-page a {
+ display: block;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ font-weight: bold;
+ color: #333;
+ margin: 0 0 3px 5px;
+ padding: 2px 1px 2px 8px
+}
+.elgg-menu-page a:hover {
+ background-color: #333;
+ color: #eee;
+ text-decoration: none;
+}
+.elgg-menu-page li.elgg-state-selected > a {
+ background-color: #333;
+ color: #eee;
+ margin: 0 0 3px 5px;
+ padding: 2px 1px 2px 8px
+}
+.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: #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: #666;
+}
+<?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;
+ font-weight: bold;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ color: #333;
+ margin: 3px 0 5px 0;
+ padding: 2px 4px 2px 8px;
+}
+.elgg-menu-owner-block li a:hover {
+ background-color: #333;
+ color: #eee;
+ text-decoration: none;
+}
+.elgg-menu-owner-block li.elgg-state-selected > a {
+ background-color: #333;
+ color: #ccc;
+}
+
+/* ***************************************
+ 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/mod/saravea_theme/views/default/css/elements/reset.php b/mod/saravea_theme/views/default/css/elements/reset.php
new file mode 100644
index 000000000..44bf2fac9
--- /dev/null
+++ b/mod/saravea_theme/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/mod/saravea_theme/views/default/css/elements/typography.php b/mod/saravea_theme/views/default/css/elements/typography.php
new file mode 100644
index 000000000..3d2a16900
--- /dev/null
+++ b/mod/saravea_theme/views/default/css/elements/typography.php
@@ -0,0 +1,192 @@
+<?php
+/**
+ * CSS typography
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+
+/* ***************************************
+ Typography
+*************************************** */
+@font-face {
+ font-family: "Open Sans";
+ font-style: normal;
+ font-weight: 400;
+ src: url("<?php echo elgg_get_site_url(); ?>/mod/saravea_theme/vendors/opensans/OpenSans-Regular.ttf");
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-style: bold;
+ src: url("<?php echo elgg_get_site_url(); ?>/mod/saravea_theme/vendors/opensans/OpenSans-Semibold.ttf");
+ font-weight: 600;
+}
+
+@font-face {
+ font-family: "Open Sans";
+ font-style: italic;
+ src: url("<?php echo elgg_get_site_url(); ?>/mod/saravea_theme/vendors/opensans/OpenSans-Italic.ttf");
+ font-weight: 400;
+}
+
+
+body {
+ font-size: 72%;
+ line-height: 1.4em;
+ font-family: "Open Sans", Arial, Tahoma, Verdana, sans-serif;
+ color: #333333;
+}
+
+a {
+ color: #ff4c12;
+}
+
+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;
+ padding:2px;
+
+ background-color:#333;
+ color:#eee;
+ overflow:auto;
+ /*box-shadow: 1px 1px 1px #333;*/
+
+ 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:10px 20px 10px 10px;
+ margin:5px 5px 15px 20px;
+ background: #E6D37E url(<?php echo elgg_get_site_url(); ?>mod/saravea_theme/_graphics/quotes.png) no-repeat right;
+ border:none;
+ box-shadow: 0px 1px 3px #666;
+
+
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: #333;
+ font-weight: bold;
+}
+
+h1 { font-size: 2em; visibility: hidden;}
+h2 { font-size: 1.8em; 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: #616068;
+ 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;
+ padding: 10px 0px 10px 0px;
+}
+
+.elgg-quiet {
+ color: #666;
+}
+
+.elgg-loud {
+ color: #d86c2c;
+}
+
+/* ***************************************
+ USER INPUT DISPLAY RESET
+*************************************** */
+.elgg-output {
+ margin-top: 10px;
+ line-height: 1.7em;
+}
+
+.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%;
+}
diff --git a/mod/saravea_theme/views/default/css/elgg.php b/mod/saravea_theme/views/default/css/elgg.php
new file mode 100644
index 000000000..37d8aa19e
--- /dev/null
+++ b/mod/saravea_theme/views/default/css/elgg.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Elgg primary CSS view
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+
+/*
+ * Colors:
+ * #ff4c12 - n-1 light orange
+ * #d86c2c - n-1 dark orange
+ * #e4ecf5 - n-1 very light orange
+ */
+
+// 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/mod/saravea_theme/views/default/css/ie.php b/mod/saravea_theme/views/default/css/ie.php
new file mode 100644
index 000000000..4bddd4d55
--- /dev/null
+++ b/mod/saravea_theme/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/mod/saravea_theme/views/default/css/ie6.php b/mod/saravea_theme/views/default/css/ie6.php
new file mode 100644
index 000000000..cf49d33f2
--- /dev/null
+++ b/mod/saravea_theme/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/mod/saravea_theme/views/default/css/ie7.php b/mod/saravea_theme/views/default/css/ie7.php
new file mode 100644
index 000000000..db0125b4b
--- /dev/null
+++ b/mod/saravea_theme/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/mod/saravea_theme/views/default/css/saravea_theme/landing.php b/mod/saravea_theme/views/default/css/saravea_theme/landing.php
new file mode 100644
index 000000000..887c29b80
--- /dev/null
+++ b/mod/saravea_theme/views/default/css/saravea_theme/landing.php
@@ -0,0 +1,38 @@
+#n1-landing {
+ height: 250px;
+ background-image: url('<?php echo elgg_get_site_url(); ?>mod/saravea_theme/_graphics/saravea_verm.png');
+ background-repeat: no-repeat;
+ display: table;
+ margin: 30px 0 50px auto;
+ min-width: 80%;
+}
+
+#n1-landing-inner {
+ display: table-cell;
+ vertical-align: middle;
+ padding-left: 220px;
+
+}
+
+#n1-landing-title {
+ font-size: 2.1em;
+ font-weight: bold;
+ line-height: 0.9em;
+}
+
+#n1-landing-subtitle {
+ font-size: 1.4em;
+ color: #666;
+}
+
+.elgg-sidebar h3 {
+ font-size: 1.6em;
+}
+
+#login-dropdown {
+ display:none;
+}
+
+.elgg-page-header > .elgg-inner {
+ background-image: none;
+}
diff --git a/mod/saravea_theme/views/default/css/walled_garden.php b/mod/saravea_theme/views/default/css/walled_garden.php
new file mode 100644
index 000000000..f6f7f97dc
--- /dev/null
+++ b/mod/saravea_theme/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/mod/saravea_theme/views/default/output/access.php b/mod/saravea_theme/views/default/output/access.php
new file mode 100644
index 000000000..fdb8fe1a1
--- /dev/null
+++ b/mod/saravea_theme/views/default/output/access.php
@@ -0,0 +1,53 @@
+<?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';
+ }
+ }
+
+ switch ($access_id) {
+ case ACCESS_PRIVATE:
+ $access_class .= ' elgg-access-private';
+ break;
+ case ACCESS_FRIENDS:
+ $access_class .= ' elgg-access-friends';
+ break;
+ case ACCESS_LOGGED_IN:
+ $access_class .= ' elgg-access-loggedin';
+ break;
+ case ACCESS_PUBLIC:
+ $access_class .= ' elgg-access-public';
+ break;
+ default:
+ $access_class .= ' elgg-access-group';
+ }
+
+ $help_text = elgg_echo('access:help');
+
+ echo "<span title=\"$help_text\" class=\"$access_class\">$access_id_string</span>";
+}
diff --git a/mod/saravea_theme/views/default/page/elements/shortcut_icon.php b/mod/saravea_theme/views/default/page/elements/shortcut_icon.php
new file mode 100644
index 000000000..c629a40c0
--- /dev/null
+++ b/mod/saravea_theme/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(); ?>mod/saravea_theme/_graphics/favicon.ico" />
diff --git a/mod/saravea_theme/views/default/page/layouts/one_sidebar.php b/mod/saravea_theme/views/default/page/layouts/one_sidebar.php
new file mode 100644
index 000000000..9ed9d12c0
--- /dev/null
+++ b/mod/saravea_theme/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-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 class="elgg-sidebar">
+ <?php
+ echo elgg_view('page/elements/sidebar', $vars);
+ ?>
+ </div>
+</div>
diff --git a/mod/saravea_theme/views/default/river/elements/body.php b/mod/saravea_theme/views/default/river/elements/body.php
new file mode 100644
index 000000000..b8e6c114c
--- /dev/null
+++ b/mod/saravea_theme/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) {
+ $message = "<div class=\"elgg-river-message\">$message</div>";
+}
+
+$attachments = elgg_extract('attachments', $vars, false);
+if ($attachments) {
+ $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/mod/saravea_theme/views/default/saravea_theme/css.php b/mod/saravea_theme/views/default/saravea_theme/css.php
new file mode 100644
index 000000000..92ba6f309
--- /dev/null
+++ b/mod/saravea_theme/views/default/saravea_theme/css.php
@@ -0,0 +1,140 @@
+.profile-content-menu a {
+ background-color: transparent;
+}
+
+.profile-admin-menu-wrapper {
+ background-color: #eee;
+
+}
+
+.profile-admin-menu-wrapper a:hover {
+ background-color: #333;
+ color: #eee;
+ text-decoration: none;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.profile-admin-menu-wrapper li a {
+ background: none;
+ color: #333;
+}
+
+#profile-details h2 {
+ font-weight: bold;
+}
+
+.messages-new {
+ background-color: #FF4C12;
+ border-radius: 10px;
+ box-shadow: -2px 2px 4px rgba(0, 0, 0, 0.5);
+ color: black;
+ font-size: 10px;
+ font-weight: bold;
+ height: 16px;
+ left: 20px;
+ min-width: 16px;
+ position: absolute;
+ text-align: center;
+ top: 12px;
+}
+
+.elgg-access, .elgg-input-access > option {
+ padding-left: 19px;
+ background-image: url('<?php echo elgg_get_site_url(); ?>mod/saravea_theme/_graphics/privacy.png');
+ background-repeat: no-repeat;
+}
+
+.elgg-access {
+ padding-top: 1px;
+ padding-bottom: 1px;
+}
+
+.elgg-access-private, .elgg-input-access > option[value="<?php echo ACCESS_PRIVATE; ?>"] {
+ background-position: 0 -65px;
+}
+
+.elgg-access-friends, .elgg-input-access > option[value="<?php echo ACCESS_FRIENDS; ?>"] {
+ background-position: 0 -51px;
+}
+
+.elgg-access-loggedin, .elgg-input-access > option[value="<?php echo ACCESS_LOGGED_IN; ?>"] {
+ background-position: 0 -34px;
+}
+
+.elgg-access-public, .elgg-input-access > option[value="<?php echo ACCESS_PUBLIC; ?>"] {
+ background-position: 0 -16px;
+}
+
+.elgg-access-group, .elgg-input-access > option {
+ background-position: 0 0;
+}
+
+.file-photo {
+ margin-top: 15px;
+}
+
+.tasklist-graph {
+ border: 1px solid #bbb;
+}
+
+.tasklist-graph div {
+ background-color: #444;
+}
+
+.elgg-task-icon {
+ box-shadow: none;
+}
+
+.treeview a.selected {
+ background-color: transparent !important;
+}
+
+.tidypics-heading {
+ color: #FF4C12;
+}
+
+.tidypics-heading:hover {
+ color: #333;
+}
+
+.tidypics-gallery .elgg-head {
+ margin: 10px;
+}
+
+#cboxTitle, #cboxTitle h3, #cboxCurrent {
+ color: #000;
+}
+#cboxTitle h3 {
+ font-weight: bold;
+ font-size: 160%;
+}
+#cboxOverlay {
+ background-color: #FFF;
+ opacity: 0.6 !important;
+}
+.event-calendar-lightbox {
+ padding: 5px;
+}
+
+.groups-profile-icon {
+ height: 201px;
+ border: 2px solid #F1F1F1;
+ box-shadow: 0px 1px 3px #666;
+}
+
+.elgg-page .cke_skin_BootstrapCK-Skin .cke_contents, .cke_skin_BootstrapCK-Skin .cke_contents iframe {
+ background-color: #F7F7F7 !important;
+ border: none !important;
+}
+
+/* BeeChat */
+div#beechat_contacts_top {
+ background-color: #333333;
+}
+
+div.beechat_chatbox_top {
+ background-color: #333333;
+}
diff --git a/mod/saravea_theme/views/default/saravea_theme/header.php b/mod/saravea_theme/views/default/saravea_theme/header.php
new file mode 100644
index 000000000..b9df3c2fb
--- /dev/null
+++ b/mod/saravea_theme/views/default/saravea_theme/header.php
@@ -0,0 +1,11 @@
+<?php
+
+$context = elgg_get_context();
+
+$title = $vars['title'];
+
+if ($context === 'main' && $title == elgg_echo('content:latest')) {
+
+ echo elgg_view('saravea_theme/landing');
+
+}
diff --git a/mod/saravea_theme/views/default/saravea_theme/landing.php b/mod/saravea_theme/views/default/saravea_theme/landing.php
new file mode 100644
index 000000000..3ffdd0ff2
--- /dev/null
+++ b/mod/saravea_theme/views/default/saravea_theme/landing.php
@@ -0,0 +1,15 @@
+<?php
+
+elgg_load_css('n1:landing_page');
+
+$title = elgg_echo('saravea_theme:landing:title');
+$subtitle = elgg_echo('saravea_theme:landing:subtitle');
+
+echo <<<HTML
+<div id="n1-landing">
+<div id="n1-landing-inner">
+<p id="n1-landing-title">$title</p>
+<p id="n1-landing-subtitle">$subtitle</p>
+</div>
+</div>
+HTML;
diff --git a/mod/saravea_theme/views/default/search/css.php b/mod/saravea_theme/views/default/search/css.php
new file mode 100644
index 000000000..1e9531b2d
--- /dev/null
+++ b/mod/saravea_theme/views/default/search/css.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Elgg Search css
+ *
+ */
+?>
+
+/**********************************
+Search plugin
+***********************************/
+.elgg-search-header {
+ bottom: 15px;
+ width: 24%;
+ 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] {
+ height: 20px;
+ width: 97%;
+ margin-top: 13px;
+ border: 0;
+ background: #EEE url(<?php echo elgg_get_site_url(); ?>_graphics/elgg_sprites.png) no-repeat 99% -916px;
+ font-size: 1em;
+
+}
+
+.search-list li {
+ padding: 5px 0 0;
+}
+.search-heading-category {
+ margin-top: 20px;
+ color: #666666;
+}
+
+.search-highlight {
+ background-color: #FFF01C;
+}
+.search-highlight-color1 {
+ background-color: #FFF01C;
+}
+.search-highlight-color2 {
+ background-color: #BFF553;
+}
+.search-highlight-color3 {
+ background-color: #F062A4;
+}
+.search-highlight-color4 {
+ background-color: #ccc;
+}
+.search-highlight-color5 {
+ background-color: #4690d6;
+}
diff --git a/mod/search/README.txt b/mod/search/README.txt
new file mode 100644
index 000000000..ac5930e5f
--- /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 [GitHub issue 1499](https://github.com/elgg/elgg/issues/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..9542e0751
--- /dev/null
+++ b/mod/search/pages/search/index.php
@@ -0,0 +1,275 @@
+<?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', '')));
+
+$display_query = _elgg_get_display_query($query);
+
+// 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('order', '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..923cf0aa8
--- /dev/null
+++ b/mod/search/search_hooks.php
@@ -0,0 +1,490 @@
+<?php
+/**
+ * Elgg core search.
+ *
+ * @package Elgg
+ * @subpackage Search
+ */
+
+/**
+ * Get objects that match the search parameters.
+ *
+ * @param string $hook Hook name
+ * @param string $type Hook type
+ * @param array $value Empty array
+ * @param array $params Search parameters
+ * @return array
+ */
+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);
+
+ $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;
+ $params['order_by'] = search_get_order_by_sql('e', 'oe', $params['sort'], $params['order']);
+ $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,
+ );
+}
+
+/**
+ * Get groups that match the search parameters.
+ *
+ * @param string $hook Hook name
+ * @param string $type Hook type
+ * @param array $value Empty array
+ * @param array $params Search parameters
+ * @return array
+ */
+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');
+
+ $where = search_get_where_sql('ge', $fields, $params);
+
+ $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;
+ $params['order_by'] = search_get_order_by_sql('e', 'ge', $params['sort'], $params['order']);
+ $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,
+ );
+}
+
+/**
+ * Get users that match the search parameters.
+ *
+ * Searches on username, display name, and profile fields
+ *
+ * @param string $hook Hook name
+ * @param string $type Hook type
+ * @param array $value Empty array
+ * @param array $params Search parameters
+ * @return array
+ */
+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;
+ $params['order_by'] = search_get_order_by_sql('e', 'ue', $params['sort'], $params['order']);
+ $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_name) {
+ $metadata = $entity->$md_name;
+ if (is_array($metadata)) {
+ foreach ($metadata as $text) {
+ if (stristr($text, $query)) {
+ $matched .= elgg_echo("profile:{$md_name}") . ': '
+ . search_get_highlighted_relevant_substrings($text, $query);
+ }
+ }
+ } else {
+ if (stristr($metadata, $query)) {
+ $matched .= elgg_echo("profile:{$md_name}") . ': '
+ . search_get_highlighted_relevant_substrings($metadata, $query);
+ }
+ }
+ }
+
+ $entity->setVolatileData('search_matched_description', $matched);
+ }
+
+ return array(
+ 'entities' => $entities,
+ 'count' => $count,
+ );
+}
+
+/**
+ * Get entities with tags that match the search parameters.
+ *
+ * @param string $hook Hook name
+ * @param string $type Hook type
+ * @param array $value Empty array
+ * @param array $params Search parameters
+ * @return array
+ */
+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;
+ $params['order_by'] = search_get_order_by_sql('e', null, $params['sort'], $params['order']);
+ $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 string $hook Hook name
+ * @param string $type Hook type
+ * @param array $value Array of custom search types
+ * @param array $params Search parameters
+ * @return array
+ */
+function search_custom_types_tags_hook($hook, $type, $value, $params) {
+ $value[] = 'tags';
+ return $value;
+}
+
+
+/**
+ * Get comments that match the search parameters.
+ *
+ * @param string $hook Hook name
+ * @param string $type Hook type
+ * @param array $value Empty array
+ * @param array $params Search parameters
+ * @return array
+ */
+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);
+ }
+
+ // no full text index on metastrings table
+ if ($params['sort'] == 'relevance') {
+ $params['sort'] = 'created';
+ }
+
+ $order_by = search_get_order_by_sql('a', null, $params['sort'], $params['order']);
+ if ($order_by) {
+ $order_by = "ORDER BY $order_by";
+ }
+
+ $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
+
+ $order_by
+ 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);
+ $comments_data = $entity->getVolatileData('search_comments_data');
+ if (!$comments_data) {
+ $comments_data = array();
+ }
+ $comments_data[] = array(
+ 'annotation_id' => $comment->id,
+ 'text' => $comment_str,
+ 'owner_guid' => $comment->owner_guid,
+ 'time_created' => $comment->time_created,
+ );
+ $entity->setVolatileData('search_comments_data', $comments_data);
+ $entities[] = $entity;
+ }
+
+ return array(
+ 'entities' => $entities,
+ 'count' => $count,
+ );
+}
+
+/**
+ * Register comments as a custom search type.
+ *
+ * @param string $hook Hook name
+ * @param string $type Hook type
+ * @param array $value Array of custom search types
+ * @param array $params Search parameters
+ * @return array
+ */
+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..77e950843
--- /dev/null
+++ b/mod/search/views/default/search/comments/entity.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Default search view for a comment
+ *
+ * @uses $vars['entity']
+ */
+
+$entity = $vars['entity'];
+$comments_data = $entity->getVolatileData('search_comments_data');
+$comment_data = array_shift($comments_data);
+$entity->setVolatileData('search_comments_data', $comments_data);
+
+$owner = get_entity($comment_data['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_' . $comment_data['annotation_id'];
+ $title = "<a href=\"$url\">$title</a>";
+}
+
+$description = $comment_data['text'];
+$tc = $comment_data['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..90aa28989
--- /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";
+
+$more_items = $vars['results']['count'] - ($vars['params']['offset'] + $vars['params']['limit']);
+
+// 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'],
+ ));
+ $show_more = false;
+} else {
+ // faceted search page so no pagination
+ $nav = '';
+ $show_more = $more_items > 0;
+}
+
+// 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;
+}
+
+if ($show_more) {
+ $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..e47afec4a
--- /dev/null
+++ b/mod/search/views/rss/search/comments/entity.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Search comment view for RSS feeds.
+ *
+ * @uses $vars['entity']
+ */
+
+$entity = $vars['entity'];
+$comments_data = $entity->getVolatileData('search_comments_data');
+$comment_data = array_shift($comments_data);
+$entity->setVolatileData('search_comments_data', $comments_data);
+
+$author_name = '';
+$comment_author_guid = $comment_data['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-' . $comment_data['annotation_id'];
+}
+
+$description = $comment_data['text'];
+$tc = $comment_data['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/simplepie/README b/mod/simplepie/README
new file mode 100644
index 000000000..29a9f38aa
--- /dev/null
+++ b/mod/simplepie/README
@@ -0,0 +1,19 @@
+Widget Title
+===========
+To change the widget title, edit the language file (en.php) and change the
+string 'simplepie:widget' from 'RSS Feed' to whatever you desire.
+
+
+Proxy Server
+===========
+If your site is going through a proxy server to get to the feeds, you may
+want to increase the timeout on the feeds (though this is unlikely as the
+default timeout is 10 seconds). You can do this by editing
+simplepie/views/default/widgets/feed_reader/content.php. There you can just
+uncomment the line $feed->set_timeout(20);
+
+
+HTML tags in feeds
+=================
+The widget allows the following tags: `<a><p><br><b><i><em><del><pre><strong><ul><ol><li><img>`.
+Other tags are stripped to avoid problems with the display of your site.
diff --git a/mod/simplepie/actions/simplepie/save_group_feed.php b/mod/simplepie/actions/simplepie/save_group_feed.php
new file mode 100644
index 000000000..8dc2ffd78
--- /dev/null
+++ b/mod/simplepie/actions/simplepie/save_group_feed.php
@@ -0,0 +1,14 @@
+<?php
+
+$group = get_entity((int)get_input('group_guid'));
+$feed_url = get_input('feed_url');
+
+if (!simplepie_is_url($feed_url)) {
+ register_error (elgg_echo("simplepie:invalid_url"));
+ forward(REFERER);
+}
+
+if (!elgg_instanceof($group, 'group') || !$group->canEdit()) {
+ forward(REFERER);
+}
+$group->feed_url = $feed_url;
diff --git a/mod/simplepie/languages/en.php b/mod/simplepie/languages/en.php
new file mode 100644
index 000000000..a22316863
--- /dev/null
+++ b/mod/simplepie/languages/en.php
@@ -0,0 +1,14 @@
+<?php
+$english = array(
+ 'simplepie:widget' => 'RSS Feed',
+ 'simplepie:description' => 'Add an external blog to your profile',
+ 'simplepie:notset' => 'Feed url is not set',
+ 'simplepie:notfound' => 'Cannot find feed. Check the feed url.',
+ 'simplepie:feed_url' => 'Feed URL',
+ 'simplepie:num_items' => 'Number of items',
+ 'simplepie:excerpt' => 'Include excerpt',
+ 'simplepie:post_date' => 'Include post date',
+ 'simplepie:postedon' => 'Posted on',
+ 'simplepie:invalid_url' => 'Invalid url, copy it from the navigation bar please',
+);
+add_translation("en", $english);
diff --git a/mod/simplepie/languages/es.php b/mod/simplepie/languages/es.php
new file mode 100644
index 000000000..d9bd5d2d6
--- /dev/null
+++ b/mod/simplepie/languages/es.php
@@ -0,0 +1,14 @@
+<?php
+$spanish = array(
+ 'simplepie:widget' => 'Enlace RSS',
+ 'simplepie:description' => 'Agregar un blog externo',
+ 'simplepie:notset' => 'Enlace RSS no configurado',
+ 'simplepie:notfound' => 'no se encontro el feed. Revisa el feed url.',
+ 'simplepie:feed_url' => 'Feed URL',
+ 'simplepie:num_items' => 'Numero de items',
+ 'simplepie:excerpt' => 'Incluir contenido',
+ 'simplepie:post_date' => 'Incluir fecha del post',
+ 'simplepie:postedon' => 'Posted on',
+ 'simplepie:invalid_url' => 'Url invalida, copiela desde la barra del navegador por favor',
+);
+add_translation("en", $english);
diff --git a/mod/simplepie/manifest.xml b/mod/simplepie/manifest.xml
new file mode 100644
index 000000000..eff9681d2
--- /dev/null
+++ b/mod/simplepie/manifest.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>SimplePie RSS Feed Integration</name>
+ <author>Cash Costello</author>
+ <version>1.8.1.1</version>
+ <category>widget</category>
+ <description>Provides a widget that pulls in RSS feeds</description>
+ <website>http://www.cashcostello.com/</website>
+ <copyright>Cash Costello 2009-2011</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <requires>
+ <type>php_extension</type>
+ <name>xml</name>
+ </requires>
+ <requires>
+ <type>php_extension</type>
+ <name>pcre</name>
+ </requires>
+ <suggests>
+ <type>php_extension</type>
+ <name>mbstring</name>
+ </suggests>
+ <suggests>
+ <type>php_extension</type>
+ <name>iconv</name>
+ </suggests>
+ <provides>
+ <type>plugin</type>
+ <name>simplepie_api</name>
+ <version>1.2.1</version>
+ </provides>
+</plugin_manifest>
diff --git a/mod/simplepie/start.php b/mod/simplepie/start.php
new file mode 100644
index 000000000..34a7ced3f
--- /dev/null
+++ b/mod/simplepie/start.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Simplepie Plugin
+ *
+ * Loads the simplepie feed parser library and provides a widget
+ */
+
+elgg_register_event_handler('init', 'system', 'simplepie_init');
+
+function simplepie_init() {
+ elgg_register_widget_type(
+ 'feed_reader',
+ elgg_echo('simplepie:widget'),
+ elgg_echo('simplepie:description'),
+ 'all',
+ true
+ );
+
+ elgg_extend_view('css/elgg', 'simplepie/css');
+
+ $lib = elgg_get_plugins_path() . 'simplepie/vendors/simplepie.inc';
+ elgg_register_library('simplepie', $lib);
+
+ // Add group option
+ add_group_tool_option('rss', elgg_echo('simplepie:enablerss'), false);
+ elgg_extend_view('groups/tool_latest', 'simplepie/group_module');
+
+ elgg_register_action('simplepie/save_group_feed', elgg_get_plugins_path() . 'simplepie/actions/simplepie/save_group_feed.php');
+}
+
+function simplepie_is_url($url) {
+ return preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i", $url);
+}
diff --git a/mod/simplepie/vendors/simplepie.inc b/mod/simplepie/vendors/simplepie.inc
new file mode 100644
index 000000000..c2e9509ef
--- /dev/null
+++ b/mod/simplepie/vendors/simplepie.inc
@@ -0,0 +1,15299 @@
+<?php
+/**
+ * SimplePie
+ *
+ * A PHP-Based RSS and Atom Feed Framework.
+ * Takes the hard work out of managing a complete RSS/Atom solution.
+ *
+ * Copyright (c) 2004-2011, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
+ * 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 SimplePie Team nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
+ * AND 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.
+ *
+ * @package SimplePie
+ * @version 1.2.1
+ * @copyright 2004-2011 Ryan Parman, Geoffrey Sneddon, Ryan McCue
+ * @author Ryan Parman
+ * @author Geoffrey Sneddon
+ * @author Ryan McCue
+ * @link http://simplepie.org/ SimplePie
+ * @link http://simplepie.org/support/ Please submit all bug reports and feature requests to the SimplePie forums
+ * @license http://www.opensource.org/licenses/bsd-license.php BSD License
+ * @todo phpDoc comments
+ */
+
+/**
+ * SimplePie Name
+ */
+define('SIMPLEPIE_NAME', 'SimplePie');
+
+/**
+ * SimplePie Version
+ */
+define('SIMPLEPIE_VERSION', '1.2.1-dev');
+
+/**
+ * SimplePie Build
+ */
+define('SIMPLEPIE_BUILD', '20111015034325');
+
+/**
+ * SimplePie Website URL
+ */
+define('SIMPLEPIE_URL', 'http://simplepie.org');
+
+/**
+ * SimplePie Useragent
+ * @see SimplePie::set_useragent()
+ */
+define('SIMPLEPIE_USERAGENT', SIMPLEPIE_NAME . '/' . SIMPLEPIE_VERSION . ' (Feed Parser; ' . SIMPLEPIE_URL . '; Allow like Gecko) Build/' . SIMPLEPIE_BUILD);
+
+/**
+ * SimplePie Linkback
+ */
+define('SIMPLEPIE_LINKBACK', '<a href="' . SIMPLEPIE_URL . '" title="' . SIMPLEPIE_NAME . ' ' . SIMPLEPIE_VERSION . '">' . SIMPLEPIE_NAME . '</a>');
+
+/**
+ * No Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_NONE', 0);
+
+/**
+ * Feed Link Element Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', 1);
+
+/**
+ * Local Feed Extension Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', 2);
+
+/**
+ * Local Feed Body Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_LOCAL_BODY', 4);
+
+/**
+ * Remote Feed Extension Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', 8);
+
+/**
+ * Remote Feed Body Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_REMOTE_BODY', 16);
+
+/**
+ * All Feed Autodiscovery
+ * @see SimplePie::set_autodiscovery_level()
+ */
+define('SIMPLEPIE_LOCATOR_ALL', 31);
+
+/**
+ * No known feed type
+ */
+define('SIMPLEPIE_TYPE_NONE', 0);
+
+/**
+ * RSS 0.90
+ */
+define('SIMPLEPIE_TYPE_RSS_090', 1);
+
+/**
+ * RSS 0.91 (Netscape)
+ */
+define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', 2);
+
+/**
+ * RSS 0.91 (Userland)
+ */
+define('SIMPLEPIE_TYPE_RSS_091_USERLAND', 4);
+
+/**
+ * RSS 0.91 (both Netscape and Userland)
+ */
+define('SIMPLEPIE_TYPE_RSS_091', 6);
+
+/**
+ * RSS 0.92
+ */
+define('SIMPLEPIE_TYPE_RSS_092', 8);
+
+/**
+ * RSS 0.93
+ */
+define('SIMPLEPIE_TYPE_RSS_093', 16);
+
+/**
+ * RSS 0.94
+ */
+define('SIMPLEPIE_TYPE_RSS_094', 32);
+
+/**
+ * RSS 1.0
+ */
+define('SIMPLEPIE_TYPE_RSS_10', 64);
+
+/**
+ * RSS 2.0
+ */
+define('SIMPLEPIE_TYPE_RSS_20', 128);
+
+/**
+ * RDF-based RSS
+ */
+define('SIMPLEPIE_TYPE_RSS_RDF', 65);
+
+/**
+ * Non-RDF-based RSS (truly intended as syndication format)
+ */
+define('SIMPLEPIE_TYPE_RSS_SYNDICATION', 190);
+
+/**
+ * All RSS
+ */
+define('SIMPLEPIE_TYPE_RSS_ALL', 255);
+
+/**
+ * Atom 0.3
+ */
+define('SIMPLEPIE_TYPE_ATOM_03', 256);
+
+/**
+ * Atom 1.0
+ */
+define('SIMPLEPIE_TYPE_ATOM_10', 512);
+
+/**
+ * All Atom
+ */
+define('SIMPLEPIE_TYPE_ATOM_ALL', 768);
+
+/**
+ * All feed types
+ */
+define('SIMPLEPIE_TYPE_ALL', 1023);
+
+/**
+ * No construct
+ */
+define('SIMPLEPIE_CONSTRUCT_NONE', 0);
+
+/**
+ * Text construct
+ */
+define('SIMPLEPIE_CONSTRUCT_TEXT', 1);
+
+/**
+ * HTML construct
+ */
+define('SIMPLEPIE_CONSTRUCT_HTML', 2);
+
+/**
+ * XHTML construct
+ */
+define('SIMPLEPIE_CONSTRUCT_XHTML', 4);
+
+/**
+ * base64-encoded construct
+ */
+define('SIMPLEPIE_CONSTRUCT_BASE64', 8);
+
+/**
+ * IRI construct
+ */
+define('SIMPLEPIE_CONSTRUCT_IRI', 16);
+
+/**
+ * A construct that might be HTML
+ */
+define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32);
+
+/**
+ * All constructs
+ */
+define('SIMPLEPIE_CONSTRUCT_ALL', 63);
+
+/**
+ * Don't change case
+ */
+define('SIMPLEPIE_SAME_CASE', 1);
+
+/**
+ * Change to lowercase
+ */
+define('SIMPLEPIE_LOWERCASE', 2);
+
+/**
+ * Change to uppercase
+ */
+define('SIMPLEPIE_UPPERCASE', 4);
+
+/**
+ * PCRE for HTML attributes
+ */
+define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*');
+
+/**
+ * PCRE for XML attributes
+ */
+define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*');
+
+/**
+ * XML Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_XML', 'http://www.w3.org/XML/1998/namespace');
+
+/**
+ * Atom 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ATOM_10', 'http://www.w3.org/2005/Atom');
+
+/**
+ * Atom 0.3 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ATOM_03', 'http://purl.org/atom/ns#');
+
+/**
+ * RDF Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RDF', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
+
+/**
+ * RSS 0.90 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_090', 'http://my.netscape.com/rdf/simple/0.9/');
+
+/**
+ * RSS 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_10', 'http://purl.org/rss/1.0/');
+
+/**
+ * RSS 1.0 Content Module Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', 'http://purl.org/rss/1.0/modules/content/');
+
+/**
+ * RSS 2.0 Namespace
+ * (Stupid, I know, but I'm certain it will confuse people less with support.)
+ */
+define('SIMPLEPIE_NAMESPACE_RSS_20', '');
+
+/**
+ * DC 1.0 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_DC_10', 'http://purl.org/dc/elements/1.0/');
+
+/**
+ * DC 1.1 Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_DC_11', 'http://purl.org/dc/elements/1.1/');
+
+/**
+ * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', 'http://www.w3.org/2003/01/geo/wgs84_pos#');
+
+/**
+ * GeoRSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss');
+
+/**
+ * Media RSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/');
+
+/**
+ * Wrong Media RSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', 'http://search.yahoo.com/mrss');
+
+/**
+ * iTunes RSS Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
+
+/**
+ * XHTML Namespace
+ */
+define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml');
+
+/**
+ * IANA Link Relations Registry
+ */
+define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/');
+
+/**
+ * Whether we're running on PHP5
+ */
+define('SIMPLEPIE_PHP5', version_compare(PHP_VERSION, '5.0.0', '>='));
+
+/**
+ * No file source
+ */
+define('SIMPLEPIE_FILE_SOURCE_NONE', 0);
+
+/**
+ * Remote file source
+ */
+define('SIMPLEPIE_FILE_SOURCE_REMOTE', 1);
+
+/**
+ * Local file source
+ */
+define('SIMPLEPIE_FILE_SOURCE_LOCAL', 2);
+
+/**
+ * fsockopen() file source
+ */
+define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', 4);
+
+/**
+ * cURL file source
+ */
+define('SIMPLEPIE_FILE_SOURCE_CURL', 8);
+
+/**
+ * file_get_contents() file source
+ */
+define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', 16);
+
+/**
+ * SimplePie
+ *
+ * @package SimplePie
+ */
+class SimplePie
+{
+ /**
+ * @var array Raw data
+ * @access private
+ */
+ var $data = array();
+
+ /**
+ * @var mixed Error string
+ * @access private
+ */
+ var $error;
+
+ /**
+ * @var object Instance of SimplePie_Sanitize (or other class)
+ * @see SimplePie::set_sanitize_class()
+ * @access private
+ */
+ var $sanitize;
+
+ /**
+ * @var string SimplePie Useragent
+ * @see SimplePie::set_useragent()
+ * @access private
+ */
+ var $useragent = SIMPLEPIE_USERAGENT;
+
+ /**
+ * @var string Feed URL
+ * @see SimplePie::set_feed_url()
+ * @access private
+ */
+ var $feed_url;
+
+ /**
+ * @var object Instance of SimplePie_File to use as a feed
+ * @see SimplePie::set_file()
+ * @access private
+ */
+ var $file;
+
+ /**
+ * @var string Raw feed data
+ * @see SimplePie::set_raw_data()
+ * @access private
+ */
+ var $raw_data;
+
+ /**
+ * @var int Timeout for fetching remote files
+ * @see SimplePie::set_timeout()
+ * @access private
+ */
+ var $timeout = 10;
+
+ /**
+ * @var bool Forces fsockopen() to be used for remote files instead
+ * of cURL, even if a new enough version is installed
+ * @see SimplePie::force_fsockopen()
+ * @access private
+ */
+ var $force_fsockopen = false;
+
+ /**
+ * @var bool Force the given data/URL to be treated as a feed no matter what
+ * it appears like
+ * @see SimplePie::force_feed()
+ * @access private
+ */
+ var $force_feed = false;
+
+ /**
+ * @var bool Enable/Disable XML dump
+ * @see SimplePie::enable_xml_dump()
+ * @access private
+ */
+ var $xml_dump = false;
+
+ /**
+ * @var bool Enable/Disable Caching
+ * @see SimplePie::enable_cache()
+ * @access private
+ */
+ var $cache = true;
+
+ /**
+ * @var int Cache duration (in seconds)
+ * @see SimplePie::set_cache_duration()
+ * @access private
+ */
+ var $cache_duration = 3600;
+
+ /**
+ * @var int Auto-discovery cache duration (in seconds)
+ * @see SimplePie::set_autodiscovery_cache_duration()
+ * @access private
+ */
+ var $autodiscovery_cache_duration = 604800; // 7 Days.
+
+ /**
+ * @var string Cache location (relative to executing script)
+ * @see SimplePie::set_cache_location()
+ * @access private
+ */
+ var $cache_location = './cache';
+
+ /**
+ * @var string Function that creates the cache filename
+ * @see SimplePie::set_cache_name_function()
+ * @access private
+ */
+ var $cache_name_function = 'md5';
+
+ /**
+ * @var bool Reorder feed by date descending
+ * @see SimplePie::enable_order_by_date()
+ * @access private
+ */
+ var $order_by_date = true;
+
+ /**
+ * @var mixed Force input encoding to be set to the follow value
+ * (false, or anything type-cast to false, disables this feature)
+ * @see SimplePie::set_input_encoding()
+ * @access private
+ */
+ var $input_encoding = false;
+
+ /**
+ * @var int Feed Autodiscovery Level
+ * @see SimplePie::set_autodiscovery_level()
+ * @access private
+ */
+ var $autodiscovery = SIMPLEPIE_LOCATOR_ALL;
+
+ /**
+ * @var string Class used for caching feeds
+ * @see SimplePie::set_cache_class()
+ * @access private
+ */
+ var $cache_class = 'SimplePie_Cache';
+
+ /**
+ * @var string Class used for locating feeds
+ * @see SimplePie::set_locator_class()
+ * @access private
+ */
+ var $locator_class = 'SimplePie_Locator';
+
+ /**
+ * @var string Class used for parsing feeds
+ * @see SimplePie::set_parser_class()
+ * @access private
+ */
+ var $parser_class = 'SimplePie_Parser';
+
+ /**
+ * @var string Class used for fetching feeds
+ * @see SimplePie::set_file_class()
+ * @access private
+ */
+ var $file_class = 'SimplePie_File';
+
+ /**
+ * @var string Class used for items
+ * @see SimplePie::set_item_class()
+ * @access private
+ */
+ var $item_class = 'SimplePie_Item';
+
+ /**
+ * @var string Class used for authors
+ * @see SimplePie::set_author_class()
+ * @access private
+ */
+ var $author_class = 'SimplePie_Author';
+
+ /**
+ * @var string Class used for categories
+ * @see SimplePie::set_category_class()
+ * @access private
+ */
+ var $category_class = 'SimplePie_Category';
+
+ /**
+ * @var string Class used for enclosures
+ * @see SimplePie::set_enclosures_class()
+ * @access private
+ */
+ var $enclosure_class = 'SimplePie_Enclosure';
+
+ /**
+ * @var string Class used for Media RSS <media:text> captions
+ * @see SimplePie::set_caption_class()
+ * @access private
+ */
+ var $caption_class = 'SimplePie_Caption';
+
+ /**
+ * @var string Class used for Media RSS <media:copyright>
+ * @see SimplePie::set_copyright_class()
+ * @access private
+ */
+ var $copyright_class = 'SimplePie_Copyright';
+
+ /**
+ * @var string Class used for Media RSS <media:credit>
+ * @see SimplePie::set_credit_class()
+ * @access private
+ */
+ var $credit_class = 'SimplePie_Credit';
+
+ /**
+ * @var string Class used for Media RSS <media:rating>
+ * @see SimplePie::set_rating_class()
+ * @access private
+ */
+ var $rating_class = 'SimplePie_Rating';
+
+ /**
+ * @var string Class used for Media RSS <media:restriction>
+ * @see SimplePie::set_restriction_class()
+ * @access private
+ */
+ var $restriction_class = 'SimplePie_Restriction';
+
+ /**
+ * @var string Class used for content-type sniffing
+ * @see SimplePie::set_content_type_sniffer_class()
+ * @access private
+ */
+ var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer';
+
+ /**
+ * @var string Class used for item sources.
+ * @see SimplePie::set_source_class()
+ * @access private
+ */
+ var $source_class = 'SimplePie_Source';
+
+ /**
+ * @var mixed Set javascript query string parameter (false, or
+ * anything type-cast to false, disables this feature)
+ * @see SimplePie::set_javascript()
+ * @access private
+ */
+ var $javascript = 'js';
+
+ /**
+ * @var int Maximum number of feeds to check with autodiscovery
+ * @see SimplePie::set_max_checked_feeds()
+ * @access private
+ */
+ var $max_checked_feeds = 10;
+
+ /**
+ * @var array All the feeds found during the autodiscovery process
+ * @see SimplePie::get_all_discovered_feeds()
+ * @access private
+ */
+ var $all_discovered_feeds = array();
+
+ /**
+ * @var string Web-accessible path to the handler_favicon.php file.
+ * @see SimplePie::set_favicon_handler()
+ * @access private
+ */
+ var $favicon_handler = '';
+
+ /**
+ * @var string Web-accessible path to the handler_image.php file.
+ * @see SimplePie::set_image_handler()
+ * @access private
+ */
+ var $image_handler = '';
+
+ /**
+ * @var array Stores the URLs when multiple feeds are being initialized.
+ * @see SimplePie::set_feed_url()
+ * @access private
+ */
+ var $multifeed_url = array();
+
+ /**
+ * @var array Stores SimplePie objects when multiple feeds initialized.
+ * @access private
+ */
+ var $multifeed_objects = array();
+
+ /**
+ * @var array Stores the get_object_vars() array for use with multifeeds.
+ * @see SimplePie::set_feed_url()
+ * @access private
+ */
+ var $config_settings = null;
+
+ /**
+ * @var integer Stores the number of items to return per-feed with multifeeds.
+ * @see SimplePie::set_item_limit()
+ * @access private
+ */
+ var $item_limit = 0;
+
+ /**
+ * @var array Stores the default attributes to be stripped by strip_attributes().
+ * @see SimplePie::strip_attributes()
+ * @access private
+ */
+ var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
+
+ /**
+ * @var array Stores the default tags to be stripped by strip_htmltags().
+ * @see SimplePie::strip_htmltags()
+ * @access private
+ */
+ var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
+
+ /**
+ * The SimplePie class contains feed level data and options
+ *
+ * There are two ways that you can create a new SimplePie object. The first
+ * is by passing a feed URL as a parameter to the SimplePie constructor
+ * (as well as optionally setting the cache location and cache expiry). This
+ * will initialise the whole feed with all of the default settings, and you
+ * can begin accessing methods and properties immediately.
+ *
+ * The second way is to create the SimplePie object with no parameters
+ * at all. This will enable you to set configuration options. After setting
+ * them, you must initialise the feed using $feed->init(). At that point the
+ * object's methods and properties will be available to you. This format is
+ * what is used throughout this documentation.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param string $feed_url This is the URL you want to parse.
+ * @param string $cache_location This is where you want the cache to be stored.
+ * @param int $cache_duration This is the number of seconds that you want to store the cache file for.
+ */
+ function SimplePie($feed_url = null, $cache_location = null, $cache_duration = null)
+ {
+ // Other objects, instances created here so we can set options on them
+ $this->sanitize =& new SimplePie_Sanitize;
+
+ // Set options if they're passed to the constructor
+ if ($cache_location !== null)
+ {
+ $this->set_cache_location($cache_location);
+ }
+
+ if ($cache_duration !== null)
+ {
+ $this->set_cache_duration($cache_duration);
+ }
+
+ // Only init the script if we're passed a feed URL
+ if ($feed_url !== null)
+ {
+ $this->set_feed_url($feed_url);
+ $this->init();
+ }
+ }
+
+ /**
+ * Used for converting object to a string
+ */
+ function __toString()
+ {
+ return md5(serialize($this->data));
+ }
+
+ /**
+ * Remove items that link back to this before destroying this object
+ */
+ function __destruct()
+ {
+ if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode'))
+ {
+ if (!empty($this->data['items']))
+ {
+ foreach ($this->data['items'] as $item)
+ {
+ $item->__destruct();
+ }
+ unset($item, $this->data['items']);
+ }
+ if (!empty($this->data['ordered_items']))
+ {
+ foreach ($this->data['ordered_items'] as $item)
+ {
+ $item->__destruct();
+ }
+ unset($item, $this->data['ordered_items']);
+ }
+ }
+ }
+
+ /**
+ * Force the given data/URL to be treated as a feed no matter what it
+ * appears like
+ *
+ * @access public
+ * @since 1.1
+ * @param bool $enable Force the given data/URL to be treated as a feed
+ */
+ function force_feed($enable = false)
+ {
+ $this->force_feed = (bool) $enable;
+ }
+
+ /**
+ * This is the URL of the feed you want to parse.
+ *
+ * This allows you to enter the URL of the feed you want to parse, or the
+ * website you want to try to use auto-discovery on. This takes priority
+ * over any set raw data.
+ *
+ * You can set multiple feeds to mash together by passing an array instead
+ * of a string for the $url. Remember that with each additional feed comes
+ * additional processing and resources.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param mixed $url This is the URL (or array of URLs) that you want to parse.
+ * @see SimplePie::set_raw_data()
+ */
+ function set_feed_url($url)
+ {
+ if (is_array($url))
+ {
+ $this->multifeed_url = array();
+ foreach ($url as $value)
+ {
+ $this->multifeed_url[] = SimplePie_Misc::fix_protocol($value, 1);
+ }
+ }
+ else
+ {
+ $this->feed_url = SimplePie_Misc::fix_protocol($url, 1);
+ }
+ }
+
+ /**
+ * Provides an instance of SimplePie_File to use as a feed
+ *
+ * @access public
+ * @param object &$file Instance of SimplePie_File (or subclass)
+ * @return bool True on success, false on failure
+ */
+ function set_file(&$file)
+ {
+ if (is_a($file, 'SimplePie_File'))
+ {
+ $this->feed_url = $file->url;
+ $this->file =& $file;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to use a string of RSS/Atom data instead of a remote feed.
+ *
+ * If you have a feed available as a string in PHP, you can tell SimplePie
+ * to parse that data string instead of a remote feed. Any set feed URL
+ * takes precedence.
+ *
+ * @access public
+ * @since 1.0 Beta 3
+ * @param string $data RSS or Atom data as a string.
+ * @see SimplePie::set_feed_url()
+ */
+ function set_raw_data($data)
+ {
+ $this->raw_data = $data;
+ }
+
+ /**
+ * Allows you to override the default timeout for fetching remote feeds.
+ *
+ * This allows you to change the maximum time the feed's server to respond
+ * and send the feed back.
+ *
+ * @access public
+ * @since 1.0 Beta 3
+ * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed.
+ */
+ function set_timeout($timeout = 10)
+ {
+ $this->timeout = (int) $timeout;
+ }
+
+ /**
+ * Forces SimplePie to use fsockopen() instead of the preferred cURL
+ * functions.
+ *
+ * @access public
+ * @since 1.0 Beta 3
+ * @param bool $enable Force fsockopen() to be used
+ */
+ function force_fsockopen($enable = false)
+ {
+ $this->force_fsockopen = (bool) $enable;
+ }
+
+ /**
+ * Outputs the raw XML content of the feed, after it has gone through
+ * SimplePie's filters.
+ *
+ * Used only for debugging, this function will output the XML content as
+ * text/xml. When SimplePie reads in a feed, it does a bit of cleaning up
+ * before trying to parse it. Many parts of the feed are re-written in
+ * memory, and in the end, you have a parsable feed. XML dump shows you the
+ * actual XML that SimplePie tries to parse, which may or may not be very
+ * different from the original feed.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param bool $enable Enable XML dump
+ */
+ function enable_xml_dump($enable = false)
+ {
+ $this->xml_dump = (bool) $enable;
+ }
+
+ /**
+ * Enables/disables caching in SimplePie.
+ *
+ * This option allows you to disable caching all-together in SimplePie.
+ * However, disabling the cache can lead to longer load times.
+ *
+ * @access public
+ * @since 1.0 Preview Release
+ * @param bool $enable Enable caching
+ */
+ function enable_cache($enable = true)
+ {
+ $this->cache = (bool) $enable;
+ }
+
+ /**
+ * Set the length of time (in seconds) that the contents of a feed
+ * will be cached.
+ *
+ * @access public
+ * @param int $seconds The feed content cache duration.
+ */
+ function set_cache_duration($seconds = 3600)
+ {
+ $this->cache_duration = (int) $seconds;
+ }
+
+ /**
+ * Set the length of time (in seconds) that the autodiscovered feed
+ * URL will be cached.
+ *
+ * @access public
+ * @param int $seconds The autodiscovered feed URL cache duration.
+ */
+ function set_autodiscovery_cache_duration($seconds = 604800)
+ {
+ $this->autodiscovery_cache_duration = (int) $seconds;
+ }
+
+ /**
+ * Set the file system location where the cached files should be stored.
+ *
+ * @access public
+ * @param string $location The file system location.
+ */
+ function set_cache_location($location = './cache')
+ {
+ $this->cache_location = (string) $location;
+ }
+
+ /**
+ * Determines whether feed items should be sorted into reverse chronological order.
+ *
+ * @access public
+ * @param bool $enable Sort as reverse chronological order.
+ */
+ function enable_order_by_date($enable = true)
+ {
+ $this->order_by_date = (bool) $enable;
+ }
+
+ /**
+ * Allows you to override the character encoding reported by the feed.
+ *
+ * @access public
+ * @param string $encoding Character encoding.
+ */
+ function set_input_encoding($encoding = false)
+ {
+ if ($encoding)
+ {
+ $this->input_encoding = (string) $encoding;
+ }
+ else
+ {
+ $this->input_encoding = false;
+ }
+ }
+
+ /**
+ * Set how much feed autodiscovery to do
+ *
+ * @access public
+ * @see SIMPLEPIE_LOCATOR_NONE
+ * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY
+ * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION
+ * @see SIMPLEPIE_LOCATOR_LOCAL_BODY
+ * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION
+ * @see SIMPLEPIE_LOCATOR_REMOTE_BODY
+ * @see SIMPLEPIE_LOCATOR_ALL
+ * @param int $level Feed Autodiscovery Level (level can be a
+ * combination of the above constants, see bitwise OR operator)
+ */
+ function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL)
+ {
+ $this->autodiscovery = (int) $level;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for caching.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_cache_class($class = 'SimplePie_Cache')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Cache'))
+ {
+ $this->cache_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for auto-discovery.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_locator_class($class = 'SimplePie_Locator')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Locator'))
+ {
+ $this->locator_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for XML parsing.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_parser_class($class = 'SimplePie_Parser')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Parser'))
+ {
+ $this->parser_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for remote file fetching.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_file_class($class = 'SimplePie_File')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_File'))
+ {
+ $this->file_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for data sanitization.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_sanitize_class($class = 'SimplePie_Sanitize')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Sanitize'))
+ {
+ $this->sanitize =& new $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for handling feed items.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_item_class($class = 'SimplePie_Item')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Item'))
+ {
+ $this->item_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for handling author data.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_author_class($class = 'SimplePie_Author')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Author'))
+ {
+ $this->author_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for handling category data.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_category_class($class = 'SimplePie_Category')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Category'))
+ {
+ $this->category_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for feed enclosures.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_enclosure_class($class = 'SimplePie_Enclosure')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Enclosure'))
+ {
+ $this->enclosure_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:text> captions
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_caption_class($class = 'SimplePie_Caption')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Caption'))
+ {
+ $this->caption_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:copyright>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_copyright_class($class = 'SimplePie_Copyright')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Copyright'))
+ {
+ $this->copyright_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:credit>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_credit_class($class = 'SimplePie_Credit')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Credit'))
+ {
+ $this->credit_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:rating>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_rating_class($class = 'SimplePie_Rating')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Rating'))
+ {
+ $this->rating_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for <media:restriction>
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_restriction_class($class = 'SimplePie_Restriction')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Restriction'))
+ {
+ $this->restriction_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses for content-type sniffing.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_content_type_sniffer_class($class = 'SimplePie_Content_Type_Sniffer')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Content_Type_Sniffer'))
+ {
+ $this->content_type_sniffer_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to change which class SimplePie uses item sources.
+ * Useful when you are overloading or extending SimplePie's default classes.
+ *
+ * @access public
+ * @param string $class Name of custom class.
+ * @link http://php.net/manual/en/keyword.extends.php PHP4 extends documentation
+ * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
+ */
+ function set_source_class($class = 'SimplePie_Source')
+ {
+ if (SimplePie_Misc::is_subclass_of($class, 'SimplePie_Source'))
+ {
+ $this->source_class = $class;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Allows you to override the default user agent string.
+ *
+ * @access public
+ * @param string $ua New user agent string.
+ */
+ function set_useragent($ua = SIMPLEPIE_USERAGENT)
+ {
+ $this->useragent = (string) $ua;
+ }
+
+ /**
+ * Set callback function to create cache filename with
+ *
+ * @access public
+ * @param mixed $function Callback function
+ */
+ function set_cache_name_function($function = 'md5')
+ {
+ if (is_callable($function))
+ {
+ $this->cache_name_function = $function;
+ }
+ }
+
+ /**
+ * Set javascript query string parameter
+ *
+ * @access public
+ * @param mixed $get Javascript query string parameter
+ */
+ function set_javascript($get = 'js')
+ {
+ if ($get)
+ {
+ $this->javascript = (string) $get;
+ }
+ else
+ {
+ $this->javascript = false;
+ }
+ }
+
+ /**
+ * Set options to make SP as fast as possible. Forgoes a
+ * substantial amount of data sanitization in favor of speed.
+ *
+ * @access public
+ * @param bool $set Whether to set them or not
+ */
+ function set_stupidly_fast($set = false)
+ {
+ if ($set)
+ {
+ $this->enable_order_by_date(false);
+ $this->remove_div(false);
+ $this->strip_comments(false);
+ $this->strip_htmltags(false);
+ $this->strip_attributes(false);
+ $this->set_image_handler(false);
+ }
+ }
+
+ /**
+ * Set maximum number of feeds to check with autodiscovery
+ *
+ * @access public
+ * @param int $max Maximum number of feeds to check
+ */
+ function set_max_checked_feeds($max = 10)
+ {
+ $this->max_checked_feeds = (int) $max;
+ }
+
+ function remove_div($enable = true)
+ {
+ $this->sanitize->remove_div($enable);
+ }
+
+ function strip_htmltags($tags = '', $encode = null)
+ {
+ if ($tags === '')
+ {
+ $tags = $this->strip_htmltags;
+ }
+ $this->sanitize->strip_htmltags($tags);
+ if ($encode !== null)
+ {
+ $this->sanitize->encode_instead_of_strip($tags);
+ }
+ }
+
+ function encode_instead_of_strip($enable = true)
+ {
+ $this->sanitize->encode_instead_of_strip($enable);
+ }
+
+ function strip_attributes($attribs = '')
+ {
+ if ($attribs === '')
+ {
+ $attribs = $this->strip_attributes;
+ }
+ $this->sanitize->strip_attributes($attribs);
+ }
+
+ function set_output_encoding($encoding = 'UTF-8')
+ {
+ $this->sanitize->set_output_encoding($encoding);
+ }
+
+ function strip_comments($strip = false)
+ {
+ $this->sanitize->strip_comments($strip);
+ }
+
+ /**
+ * Set element/attribute key/value pairs of HTML attributes
+ * containing URLs that need to be resolved relative to the feed
+ *
+ * @access public
+ * @since 1.0
+ * @param array $element_attribute Element/attribute key/value pairs
+ */
+ function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite'))
+ {
+ $this->sanitize->set_url_replacements($element_attribute);
+ }
+
+ /**
+ * Set the handler to enable the display of cached favicons.
+ *
+ * @access public
+ * @param str $page Web-accessible path to the handler_favicon.php file.
+ * @param str $qs The query string that the value should be passed to.
+ */
+ function set_favicon_handler($page = false, $qs = 'i')
+ {
+ if ($page !== false)
+ {
+ $this->favicon_handler = $page . '?' . $qs . '=';
+ }
+ else
+ {
+ $this->favicon_handler = '';
+ }
+ }
+
+ /**
+ * Set the handler to enable the display of cached images.
+ *
+ * @access public
+ * @param str $page Web-accessible path to the handler_image.php file.
+ * @param str $qs The query string that the value should be passed to.
+ */
+ function set_image_handler($page = false, $qs = 'i')
+ {
+ if ($page !== false)
+ {
+ $this->sanitize->set_image_handler($page . '?' . $qs . '=');
+ }
+ else
+ {
+ $this->image_handler = '';
+ }
+ }
+
+ /**
+ * Set the limit for items returned per-feed with multifeeds.
+ *
+ * @access public
+ * @param integer $limit The maximum number of items to return.
+ */
+ function set_item_limit($limit = 0)
+ {
+ $this->item_limit = (int) $limit;
+ }
+
+ function init()
+ {
+ // Check absolute bare minimum requirements.
+ if ((function_exists('version_compare') && version_compare(PHP_VERSION, '4.3.0', '<')) || !extension_loaded('xml') || !extension_loaded('pcre'))
+ {
+ return false;
+ }
+ // Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader.
+ elseif (!extension_loaded('xmlreader'))
+ {
+ static $xml_is_sane = null;
+ if ($xml_is_sane === null)
+ {
+ $parser_check = xml_parser_create();
+ xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
+ xml_parser_free($parser_check);
+ $xml_is_sane = isset($values[0]['value']);
+ }
+ if (!$xml_is_sane)
+ {
+ return false;
+ }
+ }
+
+ if (isset($_GET[$this->javascript]))
+ {
+ SimplePie_Misc::output_javascript();
+ exit;
+ }
+
+ // Pass whatever was set with config options over to the sanitizer.
+ $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->cache_class);
+ $this->sanitize->pass_file_data($this->file_class, $this->timeout, $this->useragent, $this->force_fsockopen);
+
+ if ($this->feed_url !== null || $this->raw_data !== null)
+ {
+ $this->data = array();
+ $this->multifeed_objects = array();
+ $cache = false;
+
+ if ($this->feed_url !== null)
+ {
+ $parsed_feed_url = SimplePie_Misc::parse_url($this->feed_url);
+ // Decide whether to enable caching
+ if ($this->cache && $parsed_feed_url['scheme'] !== '')
+ {
+ $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc');
+ }
+ // If it's enabled and we don't want an XML dump, use the cache
+ if ($cache && !$this->xml_dump)
+ {
+ // Load the Cache
+ $this->data = $cache->load();
+ if (!empty($this->data))
+ {
+ // If the cache is for an outdated build of SimplePie
+ if (!isset($this->data['build']) || $this->data['build'] !== SIMPLEPIE_BUILD)
+ {
+ $cache->unlink();
+ $this->data = array();
+ }
+ // If we've hit a collision just rerun it with caching disabled
+ elseif (isset($this->data['url']) && $this->data['url'] !== $this->feed_url)
+ {
+ $cache = false;
+ $this->data = array();
+ }
+ // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL.
+ elseif (isset($this->data['feed_url']))
+ {
+ // If the autodiscovery cache is still valid use it.
+ if ($cache->mtime() + $this->autodiscovery_cache_duration > time())
+ {
+ // Do not need to do feed autodiscovery yet.
+ if ($this->data['feed_url'] === $this->data['url'])
+ {
+ $cache->unlink();
+ $this->data = array();
+ }
+ else
+ {
+ $this->set_feed_url($this->data['feed_url']);
+ return $this->init();
+ }
+ }
+ }
+ // Check if the cache has been updated
+ elseif ($cache->mtime() + $this->cache_duration < time())
+ {
+ // If we have last-modified and/or etag set
+ if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag']))
+ {
+ $headers = array();
+ if (isset($this->data['headers']['last-modified']))
+ {
+ $headers['if-modified-since'] = $this->data['headers']['last-modified'];
+ }
+ if (isset($this->data['headers']['etag']))
+ {
+ $headers['if-none-match'] = '"' . $this->data['headers']['etag'] . '"';
+ }
+ $file =& new $this->file_class($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen);
+ if ($file->success)
+ {
+ if ($file->status_code === 304)
+ {
+ $cache->touch();
+ return true;
+ }
+ else
+ {
+ $headers = $file->headers;
+ }
+ }
+ else
+ {
+ unset($file);
+ }
+ }
+ }
+ // If the cache is still valid, just return true
+ else
+ {
+ return true;
+ }
+ }
+ // If the cache is empty, delete it
+ else
+ {
+ $cache->unlink();
+ $this->data = array();
+ }
+ }
+ // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
+ if (!isset($file))
+ {
+ if (is_a($this->file, 'SimplePie_File') && $this->file->url === $this->feed_url)
+ {
+ $file =& $this->file;
+ }
+ else
+ {
+ $file =& new $this->file_class($this->feed_url, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen);
+ }
+ }
+ // If the file connection has an error, set SimplePie::error to that and quit
+ if (!$file->success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)))
+ {
+ $this->error = $file->error;
+ if (!empty($this->data))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ if (!$this->force_feed)
+ {
+ // Check if the supplied URL is a feed, if it isn't, look for it.
+ $locate =& new $this->locator_class($file, $this->timeout, $this->useragent, $this->file_class, $this->max_checked_feeds, $this->content_type_sniffer_class);
+ if (!$locate->is_feed($file))
+ {
+ // We need to unset this so that if SimplePie::set_file() has been called that object is untouched
+ unset($file);
+ if ($file = $locate->find($this->autodiscovery, $this->all_discovered_feeds))
+ {
+ if ($cache)
+ {
+ $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD);
+ if (!$cache->save($this))
+ {
+ trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
+ }
+ $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc');
+ }
+ $this->feed_url = $file->url;
+ }
+ else
+ {
+ $this->error = "A feed could not be found at $this->feed_url. A feed with an invalid mime type may fall victim to this error, or " . SIMPLEPIE_NAME . " was unable to auto-discover it.. Use force_feed() if you are certain this URL is a real feed.";
+ SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+ return false;
+ }
+ }
+ $locate = null;
+ }
+
+ $headers = $file->headers;
+ $data = $file->body;
+ $sniffer =& new $this->content_type_sniffer_class($file);
+ $sniffed = $sniffer->get_type();
+ }
+ else
+ {
+ $data = $this->raw_data;
+ }
+
+ // Set up array of possible encodings
+ $encodings = array();
+
+ // First check to see if input has been overridden.
+ if ($this->input_encoding !== false)
+ {
+ $encodings[] = $this->input_encoding;
+ }
+
+ $application_types = array('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity');
+ $text_types = array('text/xml', 'text/xml-external-parsed-entity');
+
+ // RFC 3023 (only applies to sniffed content)
+ if (isset($sniffed))
+ {
+ if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml')
+ {
+ if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset))
+ {
+ $encodings[] = strtoupper($charset[1]);
+ }
+ $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data));
+ $encodings[] = 'UTF-8';
+ }
+ elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml')
+ {
+ if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset))
+ {
+ $encodings[] = $charset[1];
+ }
+ $encodings[] = 'US-ASCII';
+ }
+ // Text MIME-type default
+ elseif (substr($sniffed, 0, 5) === 'text/')
+ {
+ $encodings[] = 'US-ASCII';
+ }
+ }
+
+ // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1
+ $encodings = array_merge($encodings, SimplePie_Misc::xml_encoding($data));
+ $encodings[] = 'UTF-8';
+ $encodings[] = 'ISO-8859-1';
+
+ // There's no point in trying an encoding twice
+ $encodings = array_unique($encodings);
+
+ // If we want the XML, just output that with the most likely encoding and quit
+ if ($this->xml_dump)
+ {
+ header('Content-type: text/xml; charset=' . $encodings[0]);
+ echo $data;
+ exit;
+ }
+
+ // Loop through each possible encoding, till we return something, or run out of possibilities
+ foreach ($encodings as $encoding)
+ {
+ // Change the encoding to UTF-8 (as we always use UTF-8 internally)
+ if ($utf8_data = SimplePie_Misc::change_encoding($data, $encoding, 'UTF-8'))
+ {
+ // Create new parser
+ $parser =& new $this->parser_class();
+
+ // If it's parsed fine
+ if ($parser->parse($utf8_data, 'UTF-8'))
+ {
+ $this->data = $parser->get_data();
+ if ($this->get_type() & ~SIMPLEPIE_TYPE_NONE)
+ {
+ if (isset($headers))
+ {
+ $this->data['headers'] = $headers;
+ }
+ $this->data['build'] = SIMPLEPIE_BUILD;
+
+ // Cache the file if caching is enabled
+ if ($cache && !$cache->save($this))
+ {
+ trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
+ }
+ return true;
+ }
+ else
+ {
+ $this->error = "A feed could not be found at $this->feed_url. This does not appear to be a valid RSS or Atom feed.";
+ SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+ return false;
+ }
+ }
+ }
+ }
+ if (isset($parser))
+ {
+ // We have an error, just set SimplePie_Misc::error to it and quit
+ $this->error = sprintf('This XML document is invalid, likely due to invalid characters. XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column());
+ }
+ else
+ {
+ $this->error = 'The data could not be converted to UTF-8. You MUST have either the iconv or mbstring extension installed. Upgrading to PHP 5.x (which includes iconv) is highly recommended.';
+ }
+ SimplePie_Misc::error($this->error, E_USER_NOTICE, __FILE__, __LINE__);
+ return false;
+ }
+ elseif (!empty($this->multifeed_url))
+ {
+ $i = 0;
+ $success = 0;
+ $this->multifeed_objects = array();
+ foreach ($this->multifeed_url as $url)
+ {
+ if (SIMPLEPIE_PHP5)
+ {
+ // This keyword needs to defy coding standards for PHP4 compatibility
+ $this->multifeed_objects[$i] = clone($this);
+ }
+ else
+ {
+ $this->multifeed_objects[$i] = $this;
+ }
+ $this->multifeed_objects[$i]->set_feed_url($url);
+ $success |= $this->multifeed_objects[$i]->init();
+ $i++;
+ }
+ return (bool) $success;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Return the error message for the occured error
+ *
+ * @access public
+ * @return string Error message
+ */
+ function error()
+ {
+ return $this->error;
+ }
+
+ function get_encoding()
+ {
+ return $this->sanitize->output_encoding;
+ }
+
+ function handle_content_type($mime = 'text/html')
+ {
+ if (!headers_sent())
+ {
+ $header = "Content-type: $mime;";
+ if ($this->get_encoding())
+ {
+ $header .= ' charset=' . $this->get_encoding();
+ }
+ else
+ {
+ $header .= ' charset=UTF-8';
+ }
+ header($header);
+ }
+ }
+
+ function get_type()
+ {
+ if (!isset($this->data['type']))
+ {
+ $this->data['type'] = SIMPLEPIE_TYPE_ALL;
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_10;
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_03;
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF']))
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['channel'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['image'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['textinput']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_10;
+ }
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['channel'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['image'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item'])
+ || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['textinput']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090;
+ }
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss']))
+ {
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL;
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version']))
+ {
+ switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version']))
+ {
+ case '0.91':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091;
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data']))
+ {
+ switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data']))
+ {
+ case '0':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE;
+ break;
+
+ case '24':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_USERLAND;
+ break;
+ }
+ }
+ break;
+
+ case '0.92':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_092;
+ break;
+
+ case '0.93':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_093;
+ break;
+
+ case '0.94':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_094;
+ break;
+
+ case '2.0':
+ $this->data['type'] &= SIMPLEPIE_TYPE_RSS_20;
+ break;
+ }
+ }
+ }
+ else
+ {
+ $this->data['type'] = SIMPLEPIE_TYPE_NONE;
+ }
+ }
+ return $this->data['type'];
+ }
+
+ /**
+ * Returns the URL for the favicon of the feed's website.
+ *
+ * @todo Cache atom:icon
+ * @access public
+ * @since 1.0
+ */
+ function get_favicon()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif (($url = $this->get_link()) !== null && preg_match('/^http(s)?:\/\//i', $url))
+ {
+ $favicon = SimplePie_Misc::absolutize_url('/favicon.ico', $url);
+
+ if ($this->cache && $this->favicon_handler)
+ {
+ $favicon_filename = call_user_func($this->cache_name_function, $favicon);
+ $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $favicon_filename, 'spi');
+
+ if ($cache->load())
+ {
+ return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ $file =& new $this->file_class($favicon, $this->timeout / 10, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen);
+
+ if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)) && strlen($file->body) > 0)
+ {
+ $sniffer =& new $this->content_type_sniffer_class($file);
+ if (substr($sniffer->get_type(), 0, 6) === 'image/')
+ {
+ if ($cache->save(array('headers' => $file->headers, 'body' => $file->body)))
+ {
+ return $this->sanitize($this->favicon_handler . $favicon_filename, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ trigger_error("$cache->name is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
+ return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ // not an image
+ else
+ {
+ return false;
+ }
+ }
+ }
+ }
+ else
+ {
+ return $this->sanitize($favicon, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @todo If we have a perm redirect we should return the new URL
+ * @todo When we make the above change, let's support <itunes:new-feed-url> as well
+ * @todo Also, |atom:link|@rel=self
+ */
+ function subscribe_url()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_feed()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_outlook()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize('outlook' . SimplePie_Misc::fix_protocol($this->feed_url, 2), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_podcast()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 3), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_itunes()
+ {
+ if ($this->feed_url !== null)
+ {
+ return $this->sanitize(SimplePie_Misc::fix_protocol($this->feed_url, 4), SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Creates the subscribe_* methods' return data
+ *
+ * @access private
+ * @param string $feed_url String to prefix to the feed URL
+ * @param string $site_url String to prefix to the site URL (and
+ * suffix to the feed URL)
+ * @return mixed URL if feed exists, false otherwise
+ */
+ function subscribe_service($feed_url, $site_url = null)
+ {
+ if ($this->subscribe_url())
+ {
+ $return = $feed_url . rawurlencode($this->feed_url);
+ if ($site_url !== null && $this->get_link() !== null)
+ {
+ $return .= $site_url . rawurlencode($this->get_link());
+ }
+ return $this->sanitize($return, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function subscribe_aol()
+ {
+ return $this->subscribe_service('http://feeds.my.aol.com/add.jsp?url=');
+ }
+
+ function subscribe_bloglines()
+ {
+ return $this->subscribe_service('http://www.bloglines.com/sub/');
+ }
+
+ function subscribe_eskobo()
+ {
+ return $this->subscribe_service('http://www.eskobo.com/?AddToMyPage=');
+ }
+
+ function subscribe_feedfeeds()
+ {
+ return $this->subscribe_service('http://www.feedfeeds.com/add?feed=');
+ }
+
+ function subscribe_feedster()
+ {
+ return $this->subscribe_service('http://www.feedster.com/myfeedster.php?action=addrss&confirm=no&rssurl=');
+ }
+
+ function subscribe_google()
+ {
+ return $this->subscribe_service('http://fusion.google.com/add?feedurl=');
+ }
+
+ function subscribe_gritwire()
+ {
+ return $this->subscribe_service('http://my.gritwire.com/feeds/addExternalFeed.aspx?FeedUrl=');
+ }
+
+ function subscribe_msn()
+ {
+ return $this->subscribe_service('http://my.msn.com/addtomymsn.armx?id=rss&ut=', '&ru=');
+ }
+
+ function subscribe_netvibes()
+ {
+ return $this->subscribe_service('http://www.netvibes.com/subscribe.php?url=');
+ }
+
+ function subscribe_newsburst()
+ {
+ return $this->subscribe_service('http://www.newsburst.com/Source/?add=');
+ }
+
+ function subscribe_newsgator()
+ {
+ return $this->subscribe_service('http://www.newsgator.com/ngs/subscriber/subext.aspx?url=');
+ }
+
+ function subscribe_odeo()
+ {
+ return $this->subscribe_service('http://www.odeo.com/listen/subscribe?feed=');
+ }
+
+ function subscribe_podnova()
+ {
+ return $this->subscribe_service('http://www.podnova.com/index_your_podcasts.srf?action=add&url=');
+ }
+
+ function subscribe_rojo()
+ {
+ return $this->subscribe_service('http://www.rojo.com/add-subscription?resource=');
+ }
+
+ function subscribe_yahoo()
+ {
+ return $this->subscribe_service('http://add.my.yahoo.com/rss?url=');
+ }
+
+ function get_feed_tags($namespace, $tag)
+ {
+ $type = $this->get_type();
+ if ($type & SIMPLEPIE_TYPE_ATOM_10)
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag];
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_ATOM_03)
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag];
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_RDF)
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag];
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+ {
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag];
+ }
+ }
+ return null;
+ }
+
+ function get_channel_tags($namespace, $tag)
+ {
+ $type = $this->get_type();
+ if ($type & SIMPLEPIE_TYPE_ATOM_ALL)
+ {
+ if ($return = $this->get_feed_tags($namespace, $tag))
+ {
+ return $return;
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_10)
+ {
+ if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'channel'))
+ {
+ if (isset($channel[0]['child'][$namespace][$tag]))
+ {
+ return $channel[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_090)
+ {
+ if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'channel'))
+ {
+ if (isset($channel[0]['child'][$namespace][$tag]))
+ {
+ return $channel[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+ {
+ if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'channel'))
+ {
+ if (isset($channel[0]['child'][$namespace][$tag]))
+ {
+ return $channel[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ return null;
+ }
+
+ function get_image_tags($namespace, $tag)
+ {
+ $type = $this->get_type();
+ if ($type & SIMPLEPIE_TYPE_RSS_10)
+ {
+ if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'image'))
+ {
+ if (isset($image[0]['child'][$namespace][$tag]))
+ {
+ return $image[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_090)
+ {
+ if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'image'))
+ {
+ if (isset($image[0]['child'][$namespace][$tag]))
+ {
+ return $image[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
+ {
+ if ($image = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'image'))
+ {
+ if (isset($image[0]['child'][$namespace][$tag]))
+ {
+ return $image[0]['child'][$namespace][$tag];
+ }
+ }
+ }
+ return null;
+ }
+
+ function get_base($element = array())
+ {
+ if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base']))
+ {
+ return $element['xml_base'];
+ }
+ elseif ($this->get_link() !== null)
+ {
+ return $this->get_link();
+ }
+ else
+ {
+ return $this->subscribe_url();
+ }
+ }
+
+ function sanitize($data, $type, $base = '')
+ {
+ return $this->sanitize->sanitize($data, $type, $base);
+ }
+
+ function get_title()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_category($key = 0)
+ {
+ $categories = $this->get_categories();
+ if (isset($categories[$key]))
+ {
+ return $categories[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_categories()
+ {
+ $categories = array();
+
+ foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['attribs']['']['term']))
+ {
+ $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->category_class($term, $scheme, $label);
+ }
+ foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
+ {
+ // This is really the label, but keep this as the term also for BC.
+ // Label will also work on retrieving because that falls back to term.
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ if (isset($category['attribs']['']['domain']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = null;
+ }
+ $categories[] =& new $this->category_class($term, $scheme, null);
+ }
+ foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
+ {
+ $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
+ {
+ $categories[] =& new $this->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+
+ if (!empty($categories))
+ {
+ return SimplePie_Misc::array_unique($categories);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_author($key = 0)
+ {
+ $authors = $this->get_authors();
+ if (isset($authors[$key]))
+ {
+ return $authors[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_authors()
+ {
+ $authors = array();
+ foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
+ {
+ $name = null;
+ $uri = null;
+ $email = null;
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
+ {
+ $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
+ {
+ $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
+ }
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
+ {
+ $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $uri !== null)
+ {
+ $authors[] =& new $this->author_class($name, $uri, $email);
+ }
+ }
+ if ($author = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
+ {
+ $name = null;
+ $url = null;
+ $email = null;
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
+ {
+ $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
+ {
+ $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
+ }
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
+ {
+ $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $url !== null)
+ {
+ $authors[] =& new $this->author_class($name, $url, $email);
+ }
+ }
+ foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
+ {
+ $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
+ {
+ $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
+ {
+ $authors[] =& new $this->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+
+ if (!empty($authors))
+ {
+ return SimplePie_Misc::array_unique($authors);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_contributor($key = 0)
+ {
+ $contributors = $this->get_contributors();
+ if (isset($contributors[$key]))
+ {
+ return $contributors[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_contributors()
+ {
+ $contributors = array();
+ foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
+ {
+ $name = null;
+ $uri = null;
+ $email = null;
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
+ {
+ $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
+ {
+ $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
+ {
+ $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $uri !== null)
+ {
+ $contributors[] =& new $this->author_class($name, $uri, $email);
+ }
+ }
+ foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
+ {
+ $name = null;
+ $url = null;
+ $email = null;
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
+ {
+ $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
+ {
+ $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
+ {
+ $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $url !== null)
+ {
+ $contributors[] =& new $this->author_class($name, $url, $email);
+ }
+ }
+
+ if (!empty($contributors))
+ {
+ return SimplePie_Misc::array_unique($contributors);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link($key = 0, $rel = 'alternate')
+ {
+ $links = $this->get_links($rel);
+ if (isset($links[$key]))
+ {
+ return $links[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Added for parity between the parent-level and the item/entry-level.
+ */
+ function get_permalink()
+ {
+ return $this->get_link(0);
+ }
+
+ function get_links($rel = 'alternate')
+ {
+ if (!isset($this->data['links']))
+ {
+ $this->data['links'] = array();
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link'))
+ {
+ foreach ($links as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ }
+ }
+ }
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link'))
+ {
+ foreach ($links as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+
+ }
+ }
+ }
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+
+ $keys = array_keys($this->data['links']);
+ foreach ($keys as $key)
+ {
+ if (SimplePie_Misc::is_isegment_nz_nc($key))
+ {
+ if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
+ $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
+ }
+ else
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+ }
+ }
+ elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
+ {
+ $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+ }
+ $this->data['links'][$key] = array_unique($this->data['links'][$key]);
+ }
+ }
+
+ if (isset($this->data['links'][$rel]))
+ {
+ return $this->data['links'][$rel];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_all_discovered_feeds()
+ {
+ return $this->all_discovered_feeds;
+ }
+
+ function get_description()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_copyright()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_language()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang']))
+ {
+ return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang']))
+ {
+ return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang']))
+ {
+ return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['headers']['content-language']))
+ {
+ return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_latitude()
+ {
+
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
+ {
+ return (float) $match[1];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_longitude()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
+ {
+ return (float) $match[2];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_title()
+ {
+ if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_url()
+ {
+ if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image'))
+ {
+ return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'url'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'url'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_link()
+ {
+ if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_width()
+ {
+ if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'width'))
+ {
+ return round($return[0]['data']);
+ }
+ elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url'))
+ {
+ return 88.0;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_height()
+ {
+ if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'height'))
+ {
+ return round($return[0]['data']);
+ }
+ elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url'))
+ {
+ return 31.0;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_item_quantity($max = 0)
+ {
+ $max = (int) $max;
+ $qty = count($this->get_items());
+ if ($max === 0)
+ {
+ return $qty;
+ }
+ else
+ {
+ return ($qty > $max) ? $max : $qty;
+ }
+ }
+
+ function get_item($key = 0)
+ {
+ $items = $this->get_items();
+ if (isset($items[$key]))
+ {
+ return $items[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_items($start = 0, $end = 0)
+ {
+ if (!isset($this->data['items']))
+ {
+ if (!empty($this->multifeed_objects))
+ {
+ $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit);
+ }
+ else
+ {
+ $this->data['items'] = array();
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ if ($items = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'item'))
+ {
+ $keys = array_keys($items);
+ foreach ($keys as $key)
+ {
+ $this->data['items'][] =& new $this->item_class($this, $items[$key]);
+ }
+ }
+ }
+ }
+
+ if (!empty($this->data['items']))
+ {
+ // If we want to order it by date, check if all items have a date, and then sort it
+ if ($this->order_by_date && empty($this->multifeed_objects))
+ {
+ if (!isset($this->data['ordered_items']))
+ {
+ $do_sort = true;
+ foreach ($this->data['items'] as $item)
+ {
+ if (!$item->get_date('U'))
+ {
+ $do_sort = false;
+ break;
+ }
+ }
+ $item = null;
+ $this->data['ordered_items'] = $this->data['items'];
+ if ($do_sort)
+ {
+ usort($this->data['ordered_items'], array(&$this, 'sort_items'));
+ }
+ }
+ $items = $this->data['ordered_items'];
+ }
+ else
+ {
+ $items = $this->data['items'];
+ }
+
+ // Slice the data as desired
+ if ($end === 0)
+ {
+ return array_slice($items, $start);
+ }
+ else
+ {
+ return array_slice($items, $start, $end);
+ }
+ }
+ else
+ {
+ return array();
+ }
+ }
+
+ /**
+ * @static
+ */
+ function sort_items($a, $b)
+ {
+ return $a->get_date('U') <= $b->get_date('U');
+ }
+
+ /**
+ * @static
+ */
+ function merge_items($urls, $start = 0, $end = 0, $limit = 0)
+ {
+ if (is_array($urls) && sizeof($urls) > 0)
+ {
+ $items = array();
+ foreach ($urls as $arg)
+ {
+ if (is_a($arg, 'SimplePie'))
+ {
+ $items = array_merge($items, $arg->get_items(0, $limit));
+ }
+ else
+ {
+ trigger_error('Arguments must be SimplePie objects', E_USER_WARNING);
+ }
+ }
+
+ $do_sort = true;
+ foreach ($items as $item)
+ {
+ if (!$item->get_date('U'))
+ {
+ $do_sort = false;
+ break;
+ }
+ }
+ $item = null;
+ if ($do_sort)
+ {
+ usort($items, array('SimplePie', 'sort_items'));
+ }
+
+ if ($end === 0)
+ {
+ return array_slice($items, $start);
+ }
+ else
+ {
+ return array_slice($items, $start, $end);
+ }
+ }
+ else
+ {
+ trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING);
+ return array();
+ }
+ }
+}
+
+class SimplePie_Item
+{
+ var $feed;
+ var $data = array();
+
+ function SimplePie_Item($feed, $data)
+ {
+ $this->feed = $feed;
+ $this->data = $data;
+ }
+
+ function __toString()
+ {
+ return md5(serialize($this->data));
+ }
+
+ /**
+ * Remove items that link back to this before destroying this object
+ */
+ function __destruct()
+ {
+ if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode'))
+ {
+ unset($this->feed);
+ }
+ }
+
+ function get_item_tags($namespace, $tag)
+ {
+ if (isset($this->data['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][$namespace][$tag];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_base($element = array())
+ {
+ return $this->feed->get_base($element);
+ }
+
+ function sanitize($data, $type, $base = '')
+ {
+ return $this->feed->sanitize($data, $type, $base);
+ }
+
+ function get_feed()
+ {
+ return $this->feed;
+ }
+
+ function get_id($hash = false)
+ {
+ if (!$hash)
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (($return = $this->get_permalink()) !== null)
+ {
+ return $return;
+ }
+ elseif (($return = $this->get_title()) !== null)
+ {
+ return $return;
+ }
+ }
+ if ($this->get_permalink() !== null || $this->get_title() !== null)
+ {
+ return md5($this->get_permalink() . $this->get_title());
+ }
+ else
+ {
+ return md5(serialize($this->data));
+ }
+ }
+
+ function get_title()
+ {
+ if (!isset($this->data['title']))
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
+ {
+ $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
+ {
+ $this->data['title'] = $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+ {
+ $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+ {
+ $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
+ {
+ $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+ {
+ $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+ {
+ $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $this->data['title'] = null;
+ }
+ }
+ return $this->data['title'];
+ }
+
+ function get_description($description_only = false)
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML);
+ }
+
+ elseif (!$description_only)
+ {
+ return $this->get_content(true);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_content($content_only = false)
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_content_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif (!$content_only)
+ {
+ return $this->get_description(true);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_category($key = 0)
+ {
+ $categories = $this->get_categories();
+ if (isset($categories[$key]))
+ {
+ return $categories[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_categories()
+ {
+ $categories = array();
+
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['attribs']['']['term']))
+ {
+ $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
+ {
+ // This is really the label, but keep this as the term also for BC.
+ // Label will also work on retrieving because that falls back to term.
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ if (isset($category['attribs']['']['domain']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = null;
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
+ {
+ $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
+ {
+ $categories[] =& new $this->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+
+ if (!empty($categories))
+ {
+ return SimplePie_Misc::array_unique($categories);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_author($key = 0)
+ {
+ $authors = $this->get_authors();
+ if (isset($authors[$key]))
+ {
+ return $authors[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_contributor($key = 0)
+ {
+ $contributors = $this->get_contributors();
+ if (isset($contributors[$key]))
+ {
+ return $contributors[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_contributors()
+ {
+ $contributors = array();
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
+ {
+ $name = null;
+ $uri = null;
+ $email = null;
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
+ {
+ $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
+ {
+ $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
+ {
+ $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $uri !== null)
+ {
+ $contributors[] =& new $this->feed->author_class($name, $uri, $email);
+ }
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
+ {
+ $name = null;
+ $url = null;
+ $email = null;
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
+ {
+ $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
+ {
+ $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
+ {
+ $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $url !== null)
+ {
+ $contributors[] =& new $this->feed->author_class($name, $url, $email);
+ }
+ }
+
+ if (!empty($contributors))
+ {
+ return SimplePie_Misc::array_unique($contributors);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_authors()
+ {
+ $authors = array();
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
+ {
+ $name = null;
+ $uri = null;
+ $email = null;
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
+ {
+ $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
+ {
+ $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
+ }
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
+ {
+ $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $uri !== null)
+ {
+ $authors[] =& new $this->feed->author_class($name, $uri, $email);
+ }
+ }
+ if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
+ {
+ $name = null;
+ $url = null;
+ $email = null;
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
+ {
+ $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
+ {
+ $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
+ }
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
+ {
+ $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $url !== null)
+ {
+ $authors[] =& new $this->feed->author_class($name, $url, $email);
+ }
+ }
+ if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'author'))
+ {
+ $authors[] =& new $this->feed->author_class(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
+ {
+ $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
+ {
+ $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
+ {
+ $authors[] =& new $this->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+
+ if (!empty($authors))
+ {
+ return SimplePie_Misc::array_unique($authors);
+ }
+ elseif (($source = $this->get_source()) && ($authors = $source->get_authors()))
+ {
+ return $authors;
+ }
+ elseif ($authors = $this->feed->get_authors())
+ {
+ return $authors;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_copyright()
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_date($date_format = 'j F Y, g:i a')
+ {
+ if (!isset($this->data['date']))
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date'))
+ {
+ $this->data['date']['raw'] = $return[0]['data'];
+ }
+
+ if (!empty($this->data['date']['raw']))
+ {
+ $parser = SimplePie_Parse_Date::get();
+ $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']);
+ }
+ else
+ {
+ $this->data['date'] = null;
+ }
+ }
+ if ($this->data['date'])
+ {
+ $date_format = (string) $date_format;
+ switch ($date_format)
+ {
+ case '':
+ return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
+
+ case 'U':
+ return $this->data['date']['parsed'];
+
+ default:
+ return date($date_format, $this->data['date']['parsed']);
+ }
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_local_date($date_format = '%c')
+ {
+ if (!$date_format)
+ {
+ return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (($date = $this->get_date('U')) !== null && $date !== false)
+ {
+ return strftime($date_format, $date);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_permalink()
+ {
+ $link = $this->get_link();
+ $enclosure = $this->get_enclosure(0);
+ if ($link !== null)
+ {
+ return $link;
+ }
+ elseif ($enclosure !== null)
+ {
+ return $enclosure->get_link();
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link($key = 0, $rel = 'alternate')
+ {
+ $links = $this->get_links($rel);
+ if ($links[$key] !== null)
+ {
+ return $links[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_links($rel = 'alternate')
+ {
+ if (!isset($this->data['links']))
+ {
+ $this->data['links'] = array();
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+
+ }
+ }
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ }
+ }
+ if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid'))
+ {
+ if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true')
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ }
+
+ $keys = array_keys($this->data['links']);
+ foreach ($keys as $key)
+ {
+ if (SimplePie_Misc::is_isegment_nz_nc($key))
+ {
+ if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
+ $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
+ }
+ else
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+ }
+ }
+ elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
+ {
+ $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+ }
+ $this->data['links'][$key] = array_unique($this->data['links'][$key]);
+ }
+ }
+ if (isset($this->data['links'][$rel]))
+ {
+ return $this->data['links'][$rel];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * @todo Add ability to prefer one type of content over another (in a media group).
+ */
+ function get_enclosure($key = 0, $prefer = null)
+ {
+ $enclosures = $this->get_enclosures();
+ if (isset($enclosures[$key]))
+ {
+ return $enclosures[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Grabs all available enclosures (podcasts, etc.)
+ *
+ * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
+ *
+ * At this point, we're pretty much assuming that all enclosures for an item are the same content. Anything else is too complicated to properly support.
+ *
+ * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
+ * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists).
+ */
+ function get_enclosures()
+ {
+ if (!isset($this->data['enclosures']))
+ {
+ $this->data['enclosures'] = array();
+
+ // Elements
+ $captions_parent = null;
+ $categories_parent = null;
+ $copyrights_parent = null;
+ $credits_parent = null;
+ $description_parent = null;
+ $duration_parent = null;
+ $hashes_parent = null;
+ $keywords_parent = null;
+ $player_parent = null;
+ $ratings_parent = null;
+ $restrictions_parent = null;
+ $thumbnails_parent = null;
+ $title_parent = null;
+
+ // Let's do the channel and item-level ones first, and just re-use them if we need to.
+ $parent = $this->get_feed();
+
+ // CAPTIONS
+ if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
+ {
+ foreach ($captions as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ }
+ elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
+ {
+ foreach ($captions as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions_parent[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ }
+ if (is_array($captions_parent))
+ {
+ $captions_parent = array_values(SimplePie_Misc::array_unique($captions_parent));
+ }
+
+ // CATEGORIES
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category)
+ {
+ $term = null;
+ $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
+ $label = null;
+ if (isset($category['attribs']['']['text']))
+ {
+ $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+
+ if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category']))
+ {
+ foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory)
+ {
+ if (isset($subcategory['attribs']['']['text']))
+ {
+ $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories_parent[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ }
+ if (is_array($categories_parent))
+ {
+ $categories_parent = array_values(SimplePie_Misc::array_unique($categories_parent));
+ }
+
+ // COPYRIGHT
+ if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($copyright[0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($copyright[0]['data']))
+ {
+ $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($copyright[0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($copyright[0]['data']))
+ {
+ $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights_parent =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+
+ // CREDITS
+ if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
+ {
+ foreach ($credits as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ }
+ elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
+ {
+ foreach ($credits as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits_parent[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ }
+ if (is_array($credits_parent))
+ {
+ $credits_parent = array_values(SimplePie_Misc::array_unique($credits_parent));
+ }
+
+ // DESCRIPTION
+ if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
+ {
+ if (isset($description_parent[0]['data']))
+ {
+ $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+ elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
+ {
+ if (isset($description_parent[0]['data']))
+ {
+ $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+
+ // DURATION
+ if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration'))
+ {
+ $seconds = null;
+ $minutes = null;
+ $hours = null;
+ if (isset($duration_parent[0]['data']))
+ {
+ $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ if (sizeof($temp) > 0)
+ {
+ $seconds = (int) array_pop($temp);
+ }
+ if (sizeof($temp) > 0)
+ {
+ $minutes = (int) array_pop($temp);
+ $seconds += $minutes * 60;
+ }
+ if (sizeof($temp) > 0)
+ {
+ $hours = (int) array_pop($temp);
+ $seconds += $hours * 3600;
+ }
+ unset($temp);
+ $duration_parent = $seconds;
+ }
+ }
+
+ // HASHES
+ if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
+ {
+ foreach ($hashes_iterator as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes_parent[] = $algo.':'.$value;
+ }
+ }
+ elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
+ {
+ foreach ($hashes_iterator as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes_parent[] = $algo.':'.$value;
+ }
+ }
+ if (is_array($hashes_parent))
+ {
+ $hashes_parent = array_values(SimplePie_Misc::array_unique($hashes_parent));
+ }
+
+ // KEYWORDS
+ if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
+ {
+ if (isset($keywords[0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords_parent[] = trim($word);
+ }
+ }
+ unset($temp);
+ }
+ if (is_array($keywords_parent))
+ {
+ $keywords_parent = array_values(SimplePie_Misc::array_unique($keywords_parent));
+ }
+
+ // PLAYER
+ if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
+ {
+ if (isset($player_parent[0]['attribs']['']['url']))
+ {
+ $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
+ {
+ if (isset($player_parent[0]['attribs']['']['url']))
+ {
+ $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+
+ // RATINGS
+ if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = 'urn:itunes';
+ $rating_value = null;
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
+ {
+ foreach ($ratings as $rating)
+ {
+ $rating_scheme = 'urn:itunes';
+ $rating_value = null;
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings_parent[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ }
+ if (is_array($ratings_parent))
+ {
+ $ratings_parent = array_values(SimplePie_Misc::array_unique($ratings_parent));
+ }
+
+ // RESTRICTIONS
+ if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = 'allow';
+ $restriction_type = null;
+ $restriction_value = 'itunes';
+ if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes')
+ {
+ $restriction_relationship = 'deny';
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
+ {
+ foreach ($restrictions as $restriction)
+ {
+ $restriction_relationship = 'allow';
+ $restriction_type = null;
+ $restriction_value = 'itunes';
+ if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes')
+ {
+ $restriction_relationship = 'deny';
+ }
+ $restrictions_parent[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ }
+ if (is_array($restrictions_parent))
+ {
+ $restrictions_parent = array_values(SimplePie_Misc::array_unique($restrictions_parent));
+ }
+
+ // THUMBNAILS
+ if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
+ {
+ foreach ($thumbnails as $thumbnail)
+ {
+ if (isset($thumbnail['attribs']['']['url']))
+ {
+ $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ }
+ elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
+ {
+ foreach ($thumbnails as $thumbnail)
+ {
+ if (isset($thumbnail['attribs']['']['url']))
+ {
+ $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ }
+ }
+
+ // TITLES
+ if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
+ {
+ if (isset($title_parent[0]['data']))
+ {
+ $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+ elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
+ {
+ if (isset($title_parent[0]['data']))
+ {
+ $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ }
+
+ // Clear the memory
+ unset($parent);
+
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ // Elements
+ $captions = null;
+ $categories = null;
+ $copyrights = null;
+ $credits = null;
+ $description = null;
+ $hashes = null;
+ $keywords = null;
+ $player = null;
+ $ratings = null;
+ $restrictions = null;
+ $thumbnails = null;
+ $title = null;
+
+ // If we have media:group tags, loop through them.
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group)
+ {
+ if(isset($group['child']) && isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
+ {
+ // If we have media:content tags, loop through them.
+ foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
+ {
+ if (isset($content['attribs']['']['url']))
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ // Elements
+ $captions = null;
+ $categories = null;
+ $copyrights = null;
+ $credits = null;
+ $description = null;
+ $hashes = null;
+ $keywords = null;
+ $player = null;
+ $ratings = null;
+ $restrictions = null;
+ $thumbnails = null;
+ $title = null;
+
+ // Start checking the attributes of media:content
+ if (isset($content['attribs']['']['bitrate']))
+ {
+ $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['channels']))
+ {
+ $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['duration']))
+ {
+ $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $duration = $duration_parent;
+ }
+ if (isset($content['attribs']['']['expression']))
+ {
+ $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['framerate']))
+ {
+ $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['height']))
+ {
+ $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['lang']))
+ {
+ $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['fileSize']))
+ {
+ $length = ceil($content['attribs']['']['fileSize']);
+ }
+ if (isset($content['attribs']['']['medium']))
+ {
+ $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['samplingrate']))
+ {
+ $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['type']))
+ {
+ $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['width']))
+ {
+ $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+
+ // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
+
+ // CAPTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ if (is_array($captions))
+ {
+ $captions = array_values(SimplePie_Misc::array_unique($captions));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ if (is_array($captions))
+ {
+ $captions = array_values(SimplePie_Misc::array_unique($captions));
+ }
+ }
+ else
+ {
+ $captions = $captions_parent;
+ }
+
+ // CATEGORIES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+ {
+ foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+ {
+ foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ if (is_array($categories) && is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
+ }
+ elseif (is_array($categories))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories));
+ }
+ elseif (is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
+ }
+
+ // COPYRIGHTS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+ {
+ $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+ {
+ $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ else
+ {
+ $copyrights = $copyrights_parent;
+ }
+
+ // CREDITS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ if (is_array($credits))
+ {
+ $credits = array_values(SimplePie_Misc::array_unique($credits));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ if (is_array($credits))
+ {
+ $credits = array_values(SimplePie_Misc::array_unique($credits));
+ }
+ }
+ else
+ {
+ $credits = $credits_parent;
+ }
+
+ // DESCRIPTION
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+ {
+ $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+ {
+ $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $description = $description_parent;
+ }
+
+ // HASHES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes[] = $algo.':'.$value;
+ }
+ if (is_array($hashes))
+ {
+ $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes[] = $algo.':'.$value;
+ }
+ if (is_array($hashes))
+ {
+ $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+ }
+ }
+ else
+ {
+ $hashes = $hashes_parent;
+ }
+
+ // KEYWORDS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+ {
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords[] = trim($word);
+ }
+ unset($temp);
+ }
+ if (is_array($keywords))
+ {
+ $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+ {
+ if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords[] = trim($word);
+ }
+ unset($temp);
+ }
+ if (is_array($keywords))
+ {
+ $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+ }
+ }
+ else
+ {
+ $keywords = $keywords_parent;
+ }
+
+ // PLAYER
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+ {
+ $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+ {
+ $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ $player = $player_parent;
+ }
+
+ // RATINGS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ if (is_array($ratings))
+ {
+ $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ if (is_array($ratings))
+ {
+ $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+ }
+ }
+ else
+ {
+ $ratings = $ratings_parent;
+ }
+
+ // RESTRICTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ if (is_array($restrictions))
+ {
+ $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ if (is_array($restrictions))
+ {
+ $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+ }
+ }
+ else
+ {
+ $restrictions = $restrictions_parent;
+ }
+
+ // THUMBNAILS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+ {
+ $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ if (is_array($thumbnails))
+ {
+ $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+ }
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+ {
+ foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+ {
+ $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ if (is_array($thumbnails))
+ {
+ $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+ }
+ }
+ else
+ {
+ $thumbnails = $thumbnails_parent;
+ }
+
+ // TITLES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+ {
+ $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+ {
+ $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $title = $title_parent;
+ }
+
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
+ }
+ }
+ }
+ }
+
+ // If we have standalone media:content tags, loop through them.
+ if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
+ {
+ foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
+ {
+ if (isset($content['attribs']['']['url']) || isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ // Elements
+ $captions = null;
+ $categories = null;
+ $copyrights = null;
+ $credits = null;
+ $description = null;
+ $hashes = null;
+ $keywords = null;
+ $player = null;
+ $ratings = null;
+ $restrictions = null;
+ $thumbnails = null;
+ $title = null;
+
+ // Start checking the attributes of media:content
+ if (isset($content['attribs']['']['bitrate']))
+ {
+ $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['channels']))
+ {
+ $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['duration']))
+ {
+ $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $duration = $duration_parent;
+ }
+ if (isset($content['attribs']['']['expression']))
+ {
+ $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['framerate']))
+ {
+ $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['height']))
+ {
+ $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['lang']))
+ {
+ $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['fileSize']))
+ {
+ $length = ceil($content['attribs']['']['fileSize']);
+ }
+ if (isset($content['attribs']['']['medium']))
+ {
+ $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['samplingrate']))
+ {
+ $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['type']))
+ {
+ $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['width']))
+ {
+ $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['attribs']['']['url']))
+ {
+ $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
+
+ // CAPTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
+ {
+ $caption_type = null;
+ $caption_lang = null;
+ $caption_startTime = null;
+ $caption_endTime = null;
+ $caption_text = null;
+ if (isset($caption['attribs']['']['type']))
+ {
+ $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['lang']))
+ {
+ $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['start']))
+ {
+ $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['attribs']['']['end']))
+ {
+ $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($caption['data']))
+ {
+ $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $captions[] =& new $this->feed->caption_class($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text);
+ }
+ if (is_array($captions))
+ {
+ $captions = array_values(SimplePie_Misc::array_unique($captions));
+ }
+ }
+ else
+ {
+ $captions = $captions_parent;
+ }
+
+ // CATEGORIES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
+ {
+ foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['data']))
+ {
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = 'http://search.yahoo.com/mrss/category_schema';
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->feed->category_class($term, $scheme, $label);
+ }
+ }
+ if (is_array($categories) && is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique(array_merge($categories, $categories_parent)));
+ }
+ elseif (is_array($categories))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories));
+ }
+ elseif (is_array($categories_parent))
+ {
+ $categories = array_values(SimplePie_Misc::array_unique($categories_parent));
+ }
+ else
+ {
+ $categories = null;
+ }
+
+ // COPYRIGHTS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
+ {
+ $copyright_url = null;
+ $copyright_label = null;
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
+ {
+ $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
+ {
+ $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $copyrights =& new $this->feed->copyright_class($copyright_url, $copyright_label);
+ }
+ else
+ {
+ $copyrights = $copyrights_parent;
+ }
+
+ // CREDITS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
+ {
+ $credit_role = null;
+ $credit_scheme = null;
+ $credit_name = null;
+ if (isset($credit['attribs']['']['role']))
+ {
+ $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($credit['attribs']['']['scheme']))
+ {
+ $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $credit_scheme = 'urn:ebu';
+ }
+ if (isset($credit['data']))
+ {
+ $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $credits[] =& new $this->feed->credit_class($credit_role, $credit_scheme, $credit_name);
+ }
+ if (is_array($credits))
+ {
+ $credits = array_values(SimplePie_Misc::array_unique($credits));
+ }
+ }
+ else
+ {
+ $credits = $credits_parent;
+ }
+
+ // DESCRIPTION
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
+ {
+ $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $description = $description_parent;
+ }
+
+ // HASHES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
+ {
+ $value = null;
+ $algo = null;
+ if (isset($hash['data']))
+ {
+ $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($hash['attribs']['']['algo']))
+ {
+ $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $algo = 'md5';
+ }
+ $hashes[] = $algo.':'.$value;
+ }
+ if (is_array($hashes))
+ {
+ $hashes = array_values(SimplePie_Misc::array_unique($hashes));
+ }
+ }
+ else
+ {
+ $hashes = $hashes_parent;
+ }
+
+ // KEYWORDS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
+ {
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
+ {
+ $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
+ foreach ($temp as $word)
+ {
+ $keywords[] = trim($word);
+ }
+ unset($temp);
+ }
+ if (is_array($keywords))
+ {
+ $keywords = array_values(SimplePie_Misc::array_unique($keywords));
+ }
+ }
+ else
+ {
+ $keywords = $keywords_parent;
+ }
+
+ // PLAYER
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
+ {
+ $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ $player = $player_parent;
+ }
+
+ // RATINGS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
+ {
+ $rating_scheme = null;
+ $rating_value = null;
+ if (isset($rating['attribs']['']['scheme']))
+ {
+ $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $rating_scheme = 'urn:simple';
+ }
+ if (isset($rating['data']))
+ {
+ $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $ratings[] =& new $this->feed->rating_class($rating_scheme, $rating_value);
+ }
+ if (is_array($ratings))
+ {
+ $ratings = array_values(SimplePie_Misc::array_unique($ratings));
+ }
+ }
+ else
+ {
+ $ratings = $ratings_parent;
+ }
+
+ // RESTRICTIONS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
+ {
+ $restriction_relationship = null;
+ $restriction_type = null;
+ $restriction_value = null;
+ if (isset($restriction['attribs']['']['relationship']))
+ {
+ $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['attribs']['']['type']))
+ {
+ $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($restriction['data']))
+ {
+ $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $restrictions[] =& new $this->feed->restriction_class($restriction_relationship, $restriction_type, $restriction_value);
+ }
+ if (is_array($restrictions))
+ {
+ $restrictions = array_values(SimplePie_Misc::array_unique($restrictions));
+ }
+ }
+ else
+ {
+ $restrictions = $restrictions_parent;
+ }
+
+ // THUMBNAILS
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
+ {
+ foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
+ {
+ $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ if (is_array($thumbnails))
+ {
+ $thumbnails = array_values(SimplePie_Misc::array_unique($thumbnails));
+ }
+ }
+ else
+ {
+ $thumbnails = $thumbnails_parent;
+ }
+
+ // TITLES
+ if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
+ {
+ $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $title = $title_parent;
+ }
+
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width);
+ }
+ }
+ }
+
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure')
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ if (isset($link['attribs']['']['type']))
+ {
+ $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($link['attribs']['']['length']))
+ {
+ $length = ceil($link['attribs']['']['length']);
+ }
+
+ // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+ }
+ }
+
+ foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
+ {
+ if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure')
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ if (isset($link['attribs']['']['type']))
+ {
+ $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($link['attribs']['']['length']))
+ {
+ $length = ceil($link['attribs']['']['length']);
+ }
+
+ // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+ }
+ }
+
+ if ($enclosure = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'enclosure'))
+ {
+ if (isset($enclosure[0]['attribs']['']['url']))
+ {
+ // Attributes
+ $bitrate = null;
+ $channels = null;
+ $duration = null;
+ $expression = null;
+ $framerate = null;
+ $height = null;
+ $javascript = null;
+ $lang = null;
+ $length = null;
+ $medium = null;
+ $samplingrate = null;
+ $type = null;
+ $url = null;
+ $width = null;
+
+ $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0]));
+ if (isset($enclosure[0]['attribs']['']['type']))
+ {
+ $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($enclosure[0]['attribs']['']['length']))
+ {
+ $length = ceil($enclosure[0]['attribs']['']['length']);
+ }
+
+ // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+ }
+ }
+
+ if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width))
+ {
+ // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
+ $this->data['enclosures'][] =& new $this->feed->enclosure_class($url, $type, $length, $this->feed->javascript, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width);
+ }
+
+ $this->data['enclosures'] = array_values(SimplePie_Misc::array_unique($this->data['enclosures']));
+ }
+ if (!empty($this->data['enclosures']))
+ {
+ return $this->data['enclosures'];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_latitude()
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
+ {
+ return (float) $match[1];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_longitude()
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
+ {
+ return (float) $match[2];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_source()
+ {
+ if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source'))
+ {
+ return new $this->feed->source_class($this, $return[0]);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Creates the add_to_* methods' return data
+ *
+ * @access private
+ * @param string $item_url String to prefix to the item permalink
+ * @param string $title_url String to prefix to the item title
+ * (and suffix to the item permalink)
+ * @return mixed URL if feed exists, false otherwise
+ */
+ function add_to_service($item_url, $title_url = null, $summary_url = null)
+ {
+ if ($this->get_permalink() !== null)
+ {
+ $return = $item_url . rawurlencode($this->get_permalink());
+ if ($title_url !== null && $this->get_title() !== null)
+ {
+ $return .= $title_url . rawurlencode($this->get_title());
+ }
+ if ($summary_url !== null && $this->get_description() !== null)
+ {
+ $return .= $summary_url . rawurlencode($this->get_description());
+ }
+ return $this->sanitize($return, SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function add_to_blinklist()
+ {
+ return $this->add_to_service('http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=&Url=', '&Title=');
+ }
+
+ function add_to_blogmarks()
+ {
+ return $this->add_to_service('http://blogmarks.net/my/new.php?mini=1&simple=1&url=', '&title=');
+ }
+
+ function add_to_delicious()
+ {
+ return $this->add_to_service('http://del.icio.us/post/?v=4&url=', '&title=');
+ }
+
+ function add_to_digg()
+ {
+ return $this->add_to_service('http://digg.com/submit?url=', '&title=', '&bodytext=');
+ }
+
+ function add_to_furl()
+ {
+ return $this->add_to_service('http://www.furl.net/storeIt.jsp?u=', '&t=');
+ }
+
+ function add_to_magnolia()
+ {
+ return $this->add_to_service('http://ma.gnolia.com/bookmarklet/add?url=', '&title=');
+ }
+
+ function add_to_myweb20()
+ {
+ return $this->add_to_service('http://myweb2.search.yahoo.com/myresults/bookmarklet?u=', '&t=');
+ }
+
+ function add_to_newsvine()
+ {
+ return $this->add_to_service('http://www.newsvine.com/_wine/save?u=', '&h=');
+ }
+
+ function add_to_reddit()
+ {
+ return $this->add_to_service('http://reddit.com/submit?url=', '&title=');
+ }
+
+ function add_to_segnalo()
+ {
+ return $this->add_to_service('http://segnalo.com/post.html.php?url=', '&title=');
+ }
+
+ function add_to_simpy()
+ {
+ return $this->add_to_service('http://www.simpy.com/simpy/LinkAdd.do?href=', '&title=');
+ }
+
+ function add_to_spurl()
+ {
+ return $this->add_to_service('http://www.spurl.net/spurl.php?v=3&url=', '&title=');
+ }
+
+ function add_to_wists()
+ {
+ return $this->add_to_service('http://wists.com/r.php?c=&r=', '&title=');
+ }
+
+ function search_technorati()
+ {
+ return $this->add_to_service('http://www.technorati.com/search/');
+ }
+}
+
+class SimplePie_Source
+{
+ var $item;
+ var $data = array();
+
+ function SimplePie_Source($item, $data)
+ {
+ $this->item = $item;
+ $this->data = $data;
+ }
+
+ function __toString()
+ {
+ return md5(serialize($this->data));
+ }
+
+ function get_source_tags($namespace, $tag)
+ {
+ if (isset($this->data['child'][$namespace][$tag]))
+ {
+ return $this->data['child'][$namespace][$tag];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_base($element = array())
+ {
+ return $this->item->get_base($element);
+ }
+
+ function sanitize($data, $type, $base = '')
+ {
+ return $this->item->sanitize($data, $type, $base);
+ }
+
+ function get_item()
+ {
+ return $this->item;
+ }
+
+ function get_title()
+ {
+ if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_category($key = 0)
+ {
+ $categories = $this->get_categories();
+ if (isset($categories[$key]))
+ {
+ return $categories[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_categories()
+ {
+ $categories = array();
+
+ foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
+ {
+ $term = null;
+ $scheme = null;
+ $label = null;
+ if (isset($category['attribs']['']['term']))
+ {
+ $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['scheme']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($category['attribs']['']['label']))
+ {
+ $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ $categories[] =& new $this->item->feed->category_class($term, $scheme, $label);
+ }
+ foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
+ {
+ // This is really the label, but keep this as the term also for BC.
+ // Label will also work on retrieving because that falls back to term.
+ $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ if (isset($category['attribs']['']['domain']))
+ {
+ $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ $scheme = null;
+ }
+ $categories[] =& new $this->item->feed->category_class($term, $scheme, null);
+ }
+ foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
+ {
+ $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
+ {
+ $categories[] =& new $this->item->feed->category_class($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+
+ if (!empty($categories))
+ {
+ return SimplePie_Misc::array_unique($categories);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_author($key = 0)
+ {
+ $authors = $this->get_authors();
+ if (isset($authors[$key]))
+ {
+ return $authors[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_authors()
+ {
+ $authors = array();
+ foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
+ {
+ $name = null;
+ $uri = null;
+ $email = null;
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
+ {
+ $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
+ {
+ $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
+ }
+ if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
+ {
+ $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $uri !== null)
+ {
+ $authors[] =& new $this->item->feed->author_class($name, $uri, $email);
+ }
+ }
+ if ($author = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
+ {
+ $name = null;
+ $url = null;
+ $email = null;
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
+ {
+ $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
+ {
+ $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
+ }
+ if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
+ {
+ $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $url !== null)
+ {
+ $authors[] =& new $this->item->feed->author_class($name, $url, $email);
+ }
+ }
+ foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
+ {
+ $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
+ {
+ $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+ foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
+ {
+ $authors[] =& new $this->item->feed->author_class($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null);
+ }
+
+ if (!empty($authors))
+ {
+ return SimplePie_Misc::array_unique($authors);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_contributor($key = 0)
+ {
+ $contributors = $this->get_contributors();
+ if (isset($contributors[$key]))
+ {
+ return $contributors[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_contributors()
+ {
+ $contributors = array();
+ foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
+ {
+ $name = null;
+ $uri = null;
+ $email = null;
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
+ {
+ $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
+ {
+ $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
+ {
+ $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $uri !== null)
+ {
+ $contributors[] =& new $this->item->feed->author_class($name, $uri, $email);
+ }
+ }
+ foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
+ {
+ $name = null;
+ $url = null;
+ $email = null;
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
+ {
+ $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
+ {
+ $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
+ }
+ if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
+ {
+ $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ if ($name !== null || $email !== null || $url !== null)
+ {
+ $contributors[] =& new $this->item->feed->author_class($name, $url, $email);
+ }
+ }
+
+ if (!empty($contributors))
+ {
+ return SimplePie_Misc::array_unique($contributors);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link($key = 0, $rel = 'alternate')
+ {
+ $links = $this->get_links($rel);
+ if (isset($links[$key]))
+ {
+ return $links[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Added for parity between the parent-level and the item/entry-level.
+ */
+ function get_permalink()
+ {
+ return $this->get_link(0);
+ }
+
+ function get_links($rel = 'alternate')
+ {
+ if (!isset($this->data['links']))
+ {
+ $this->data['links'] = array();
+ if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link'))
+ {
+ foreach ($links as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+ }
+ }
+ }
+ if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link'))
+ {
+ foreach ($links as $link)
+ {
+ if (isset($link['attribs']['']['href']))
+ {
+ $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
+ $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
+
+ }
+ }
+ }
+ if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+ if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
+ {
+ $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
+ }
+
+ $keys = array_keys($this->data['links']);
+ foreach ($keys as $key)
+ {
+ if (SimplePie_Misc::is_isegment_nz_nc($key))
+ {
+ if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
+ $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
+ }
+ else
+ {
+ $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
+ }
+ }
+ elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
+ {
+ $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
+ }
+ $this->data['links'][$key] = array_unique($this->data['links'][$key]);
+ }
+ }
+
+ if (isset($this->data['links'][$rel]))
+ {
+ return $this->data['links'][$rel];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_description()
+ {
+ if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_copyright()
+ {
+ if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_10_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright'))
+ {
+ return $this->sanitize($return[0]['data'], SimplePie_Misc::atom_03_construct_type($return[0]['attribs']), $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_language()
+ {
+ if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ elseif (isset($this->data['xml_lang']))
+ {
+ return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_latitude()
+ {
+ if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
+ {
+ return (float) $match[1];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_longitude()
+ {
+ if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
+ {
+ return (float) $return[0]['data'];
+ }
+ elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
+ {
+ return (float) $match[2];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_image_url()
+ {
+ if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image'))
+ {
+ return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI);
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
+ {
+ return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Author
+{
+ var $name;
+ var $link;
+ var $email;
+
+ // Constructor, used to input the data
+ function SimplePie_Author($name = null, $link = null, $email = null)
+ {
+ $this->name = $name;
+ $this->link = $link;
+ $this->email = $email;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_name()
+ {
+ if ($this->name !== null)
+ {
+ return $this->name;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link()
+ {
+ if ($this->link !== null)
+ {
+ return $this->link;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_email()
+ {
+ if ($this->email !== null)
+ {
+ return $this->email;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Category
+{
+ var $term;
+ var $scheme;
+ var $label;
+
+ // Constructor, used to input the data
+ function SimplePie_Category($term = null, $scheme = null, $label = null)
+ {
+ $this->term = $term;
+ $this->scheme = $scheme;
+ $this->label = $label;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_term()
+ {
+ if ($this->term !== null)
+ {
+ return $this->term;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_scheme()
+ {
+ if ($this->scheme !== null)
+ {
+ return $this->scheme;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_label()
+ {
+ if ($this->label !== null)
+ {
+ return $this->label;
+ }
+ else
+ {
+ return $this->get_term();
+ }
+ }
+}
+
+class SimplePie_Enclosure
+{
+ var $bitrate;
+ var $captions;
+ var $categories;
+ var $channels;
+ var $copyright;
+ var $credits;
+ var $description;
+ var $duration;
+ var $expression;
+ var $framerate;
+ var $handler;
+ var $hashes;
+ var $height;
+ var $javascript;
+ var $keywords;
+ var $lang;
+ var $length;
+ var $link;
+ var $medium;
+ var $player;
+ var $ratings;
+ var $restrictions;
+ var $samplingrate;
+ var $thumbnails;
+ var $title;
+ var $type;
+ var $width;
+
+ // Constructor, used to input the data
+ function SimplePie_Enclosure($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null)
+ {
+ $this->bitrate = $bitrate;
+ $this->captions = $captions;
+ $this->categories = $categories;
+ $this->channels = $channels;
+ $this->copyright = $copyright;
+ $this->credits = $credits;
+ $this->description = $description;
+ $this->duration = $duration;
+ $this->expression = $expression;
+ $this->framerate = $framerate;
+ $this->hashes = $hashes;
+ $this->height = $height;
+ $this->javascript = $javascript;
+ $this->keywords = $keywords;
+ $this->lang = $lang;
+ $this->length = $length;
+ $this->link = $link;
+ $this->medium = $medium;
+ $this->player = $player;
+ $this->ratings = $ratings;
+ $this->restrictions = $restrictions;
+ $this->samplingrate = $samplingrate;
+ $this->thumbnails = $thumbnails;
+ $this->title = $title;
+ $this->type = $type;
+ $this->width = $width;
+ if (class_exists('idna_convert'))
+ {
+ $idn =& new idna_convert;
+ $parsed = SimplePie_Misc::parse_url($link);
+ $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
+ }
+ $this->handler = $this->get_handler(); // Needs to load last
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_bitrate()
+ {
+ if ($this->bitrate !== null)
+ {
+ return $this->bitrate;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_caption($key = 0)
+ {
+ $captions = $this->get_captions();
+ if (isset($captions[$key]))
+ {
+ return $captions[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_captions()
+ {
+ if ($this->captions !== null)
+ {
+ return $this->captions;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_category($key = 0)
+ {
+ $categories = $this->get_categories();
+ if (isset($categories[$key]))
+ {
+ return $categories[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_categories()
+ {
+ if ($this->categories !== null)
+ {
+ return $this->categories;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_channels()
+ {
+ if ($this->channels !== null)
+ {
+ return $this->channels;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_copyright()
+ {
+ if ($this->copyright !== null)
+ {
+ return $this->copyright;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_credit($key = 0)
+ {
+ $credits = $this->get_credits();
+ if (isset($credits[$key]))
+ {
+ return $credits[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_credits()
+ {
+ if ($this->credits !== null)
+ {
+ return $this->credits;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_description()
+ {
+ if ($this->description !== null)
+ {
+ return $this->description;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_duration($convert = false)
+ {
+ if ($this->duration !== null)
+ {
+ if ($convert)
+ {
+ $time = SimplePie_Misc::time_hms($this->duration);
+ return $time;
+ }
+ else
+ {
+ return $this->duration;
+ }
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_expression()
+ {
+ if ($this->expression !== null)
+ {
+ return $this->expression;
+ }
+ else
+ {
+ return 'full';
+ }
+ }
+
+ function get_extension()
+ {
+ if ($this->link !== null)
+ {
+ $url = SimplePie_Misc::parse_url($this->link);
+ if ($url['path'] !== '')
+ {
+ return pathinfo($url['path'], PATHINFO_EXTENSION);
+ }
+ }
+ return null;
+ }
+
+ function get_framerate()
+ {
+ if ($this->framerate !== null)
+ {
+ return $this->framerate;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_handler()
+ {
+ return $this->get_real_type(true);
+ }
+
+ function get_hash($key = 0)
+ {
+ $hashes = $this->get_hashes();
+ if (isset($hashes[$key]))
+ {
+ return $hashes[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_hashes()
+ {
+ if ($this->hashes !== null)
+ {
+ return $this->hashes;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_height()
+ {
+ if ($this->height !== null)
+ {
+ return $this->height;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_language()
+ {
+ if ($this->lang !== null)
+ {
+ return $this->lang;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_keyword($key = 0)
+ {
+ $keywords = $this->get_keywords();
+ if (isset($keywords[$key]))
+ {
+ return $keywords[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_keywords()
+ {
+ if ($this->keywords !== null)
+ {
+ return $this->keywords;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_length()
+ {
+ if ($this->length !== null)
+ {
+ return $this->length;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_link()
+ {
+ if ($this->link !== null)
+ {
+ return urldecode($this->link);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_medium()
+ {
+ if ($this->medium !== null)
+ {
+ return $this->medium;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_player()
+ {
+ if ($this->player !== null)
+ {
+ return $this->player;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_rating($key = 0)
+ {
+ $ratings = $this->get_ratings();
+ if (isset($ratings[$key]))
+ {
+ return $ratings[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_ratings()
+ {
+ if ($this->ratings !== null)
+ {
+ return $this->ratings;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_restriction($key = 0)
+ {
+ $restrictions = $this->get_restrictions();
+ if (isset($restrictions[$key]))
+ {
+ return $restrictions[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_restrictions()
+ {
+ if ($this->restrictions !== null)
+ {
+ return $this->restrictions;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_sampling_rate()
+ {
+ if ($this->samplingrate !== null)
+ {
+ return $this->samplingrate;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_size()
+ {
+ $length = $this->get_length();
+ if ($length !== null)
+ {
+ return round($length/1048576, 2);
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_thumbnail($key = 0)
+ {
+ $thumbnails = $this->get_thumbnails();
+ if (isset($thumbnails[$key]))
+ {
+ return $thumbnails[$key];
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_thumbnails()
+ {
+ if ($this->thumbnails !== null)
+ {
+ return $this->thumbnails;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_title()
+ {
+ if ($this->title !== null)
+ {
+ return $this->title;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_type()
+ {
+ if ($this->type !== null)
+ {
+ return $this->type;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_width()
+ {
+ if ($this->width !== null)
+ {
+ return $this->width;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function native_embed($options='')
+ {
+ return $this->embed($options, true);
+ }
+
+ /**
+ * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'.
+ */
+ function embed($options = '', $native = false)
+ {
+ // Set up defaults
+ $audio = '';
+ $video = '';
+ $alt = '';
+ $altclass = '';
+ $loop = 'false';
+ $width = 'auto';
+ $height = 'auto';
+ $bgcolor = '#ffffff';
+ $mediaplayer = '';
+ $widescreen = false;
+ $handler = $this->get_handler();
+ $type = $this->get_real_type();
+
+ // Process options and reassign values as necessary
+ if (is_array($options))
+ {
+ extract($options);
+ }
+ else
+ {
+ $options = explode(',', $options);
+ foreach($options as $option)
+ {
+ $opt = explode(':', $option, 2);
+ if (isset($opt[0], $opt[1]))
+ {
+ $opt[0] = trim($opt[0]);
+ $opt[1] = trim($opt[1]);
+ switch ($opt[0])
+ {
+ case 'audio':
+ $audio = $opt[1];
+ break;
+
+ case 'video':
+ $video = $opt[1];
+ break;
+
+ case 'alt':
+ $alt = $opt[1];
+ break;
+
+ case 'altclass':
+ $altclass = $opt[1];
+ break;
+
+ case 'loop':
+ $loop = $opt[1];
+ break;
+
+ case 'width':
+ $width = $opt[1];
+ break;
+
+ case 'height':
+ $height = $opt[1];
+ break;
+
+ case 'bgcolor':
+ $bgcolor = $opt[1];
+ break;
+
+ case 'mediaplayer':
+ $mediaplayer = $opt[1];
+ break;
+
+ case 'widescreen':
+ $widescreen = $opt[1];
+ break;
+ }
+ }
+ }
+ }
+
+ $mime = explode('/', $type, 2);
+ $mime = $mime[0];
+
+ // Process values for 'auto'
+ if ($width === 'auto')
+ {
+ if ($mime === 'video')
+ {
+ if ($height === 'auto')
+ {
+ $width = 480;
+ }
+ elseif ($widescreen)
+ {
+ $width = round((intval($height)/9)*16);
+ }
+ else
+ {
+ $width = round((intval($height)/3)*4);
+ }
+ }
+ else
+ {
+ $width = '100%';
+ }
+ }
+
+ if ($height === 'auto')
+ {
+ if ($mime === 'audio')
+ {
+ $height = 0;
+ }
+ elseif ($mime === 'video')
+ {
+ if ($width === 'auto')
+ {
+ if ($widescreen)
+ {
+ $height = 270;
+ }
+ else
+ {
+ $height = 360;
+ }
+ }
+ elseif ($widescreen)
+ {
+ $height = round((intval($width)/16)*9);
+ }
+ else
+ {
+ $height = round((intval($width)/4)*3);
+ }
+ }
+ else
+ {
+ $height = 376;
+ }
+ }
+ elseif ($mime === 'audio')
+ {
+ $height = 0;
+ }
+
+ // Set proper placeholder value
+ if ($mime === 'audio')
+ {
+ $placeholder = $audio;
+ }
+ elseif ($mime === 'video')
+ {
+ $placeholder = $video;
+ }
+
+ $embed = '';
+
+ // Make sure the JS library is included
+ if (!$native)
+ {
+ static $javascript_outputted = null;
+ if (!$javascript_outputted && $this->javascript)
+ {
+ $embed .= '<script type="text/javascript" src="?' . htmlspecialchars($this->javascript) . '"></script>';
+ $javascript_outputted = true;
+ }
+ }
+
+ // Odeo Feed MP3's
+ if ($handler === 'odeo')
+ {
+ if ($native)
+ {
+ $embed .= '<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://adobe.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url=' . $this->get_link() . '"></embed>';
+ }
+ else
+ {
+ $embed .= '<script type="text/javascript">embed_odeo("' . $this->get_link() . '");</script>';
+ }
+ }
+
+ // Flash
+ elseif ($handler === 'flash')
+ {
+ if ($native)
+ {
+ $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
+ }
+ }
+
+ // Flash Media Player file types.
+ // Preferred handler for MP3 file types.
+ elseif ($handler === 'fmedia' || ($handler === 'mp3' && $mediaplayer !== ''))
+ {
+ $height += 20;
+ if ($native)
+ {
+ $embed .= "<embed src=\"$mediaplayer\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" quality=\"high\" width=\"$width\" height=\"$height\" wmode=\"transparent\" flashvars=\"file=" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\"></embed>";
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_flv('$width', '$height', '" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "', '$placeholder', '$loop', '$mediaplayer');</script>";
+ }
+ }
+
+ // QuickTime 7 file types. Need to test with QuickTime 6.
+ // Only handle MP3's if the Flash Media Player is not present.
+ elseif ($handler === 'quicktime' || ($handler === 'mp3' && $mediaplayer === ''))
+ {
+ $height += 16;
+ if ($native)
+ {
+ if ($placeholder !== '')
+ {
+ $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
+ }
+ else
+ {
+ $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
+ }
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
+ }
+ }
+
+ // Windows Media
+ elseif ($handler === 'wmedia')
+ {
+ $height += 45;
+ if ($native)
+ {
+ $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
+ }
+ else
+ {
+ $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
+ }
+ }
+
+ // Everything else
+ else $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
+
+ return $embed;
+ }
+
+ function get_real_type($find_handler = false)
+ {
+ // If it's Odeo, let's get it out of the way.
+ if (substr(strtolower($this->get_link()), 0, 15) === 'http://odeo.com')
+ {
+ return 'odeo';
+ }
+
+ // Mime-types by handler.
+ $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash
+ $types_fmedia = array('video/flv', 'video/x-flv','flv-application/octet-stream'); // Flash Media Player
+ $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime
+ $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media
+ $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3
+
+ if ($this->get_type() !== null)
+ {
+ $type = strtolower($this->type);
+ }
+ else
+ {
+ $type = null;
+ }
+
+ // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
+ if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3)))
+ {
+ switch (strtolower($this->get_extension()))
+ {
+ // Audio mime-types
+ case 'aac':
+ case 'adts':
+ $type = 'audio/acc';
+ break;
+
+ case 'aif':
+ case 'aifc':
+ case 'aiff':
+ case 'cdda':
+ $type = 'audio/aiff';
+ break;
+
+ case 'bwf':
+ $type = 'audio/wav';
+ break;
+
+ case 'kar':
+ case 'mid':
+ case 'midi':
+ case 'smf':
+ $type = 'audio/midi';
+ break;
+
+ case 'm4a':
+ $type = 'audio/x-m4a';
+ break;
+
+ case 'mp3':
+ case 'swa':
+ $type = 'audio/mp3';
+ break;
+
+ case 'wav':
+ $type = 'audio/wav';
+ break;
+
+ case 'wax':
+ $type = 'audio/x-ms-wax';
+ break;
+
+ case 'wma':
+ $type = 'audio/x-ms-wma';
+ break;
+
+ // Video mime-types
+ case '3gp':
+ case '3gpp':
+ $type = 'video/3gpp';
+ break;
+
+ case '3g2':
+ case '3gp2':
+ $type = 'video/3gpp2';
+ break;
+
+ case 'asf':
+ $type = 'video/x-ms-asf';
+ break;
+
+ case 'flv':
+ $type = 'video/x-flv';
+ break;
+
+ case 'm1a':
+ case 'm1s':
+ case 'm1v':
+ case 'm15':
+ case 'm75':
+ case 'mp2':
+ case 'mpa':
+ case 'mpeg':
+ case 'mpg':
+ case 'mpm':
+ case 'mpv':
+ $type = 'video/mpeg';
+ break;
+
+ case 'm4v':
+ $type = 'video/x-m4v';
+ break;
+
+ case 'mov':
+ case 'qt':
+ $type = 'video/quicktime';
+ break;
+
+ case 'mp4':
+ case 'mpg4':
+ $type = 'video/mp4';
+ break;
+
+ case 'sdv':
+ $type = 'video/sd-video';
+ break;
+
+ case 'wm':
+ $type = 'video/x-ms-wm';
+ break;
+
+ case 'wmv':
+ $type = 'video/x-ms-wmv';
+ break;
+
+ case 'wvx':
+ $type = 'video/x-ms-wvx';
+ break;
+
+ // Flash mime-types
+ case 'spl':
+ $type = 'application/futuresplash';
+ break;
+
+ case 'swf':
+ $type = 'application/x-shockwave-flash';
+ break;
+ }
+ }
+
+ if ($find_handler)
+ {
+ if (in_array($type, $types_flash))
+ {
+ return 'flash';
+ }
+ elseif (in_array($type, $types_fmedia))
+ {
+ return 'fmedia';
+ }
+ elseif (in_array($type, $types_quicktime))
+ {
+ return 'quicktime';
+ }
+ elseif (in_array($type, $types_wmedia))
+ {
+ return 'wmedia';
+ }
+ elseif (in_array($type, $types_mp3))
+ {
+ return 'mp3';
+ }
+ else
+ {
+ return null;
+ }
+ }
+ else
+ {
+ return $type;
+ }
+ }
+}
+
+class SimplePie_Caption
+{
+ var $type;
+ var $lang;
+ var $startTime;
+ var $endTime;
+ var $text;
+
+ // Constructor, used to input the data
+ function SimplePie_Caption($type = null, $lang = null, $startTime = null, $endTime = null, $text = null)
+ {
+ $this->type = $type;
+ $this->lang = $lang;
+ $this->startTime = $startTime;
+ $this->endTime = $endTime;
+ $this->text = $text;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_endtime()
+ {
+ if ($this->endTime !== null)
+ {
+ return $this->endTime;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_language()
+ {
+ if ($this->lang !== null)
+ {
+ return $this->lang;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_starttime()
+ {
+ if ($this->startTime !== null)
+ {
+ return $this->startTime;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_text()
+ {
+ if ($this->text !== null)
+ {
+ return $this->text;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_type()
+ {
+ if ($this->type !== null)
+ {
+ return $this->type;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Credit
+{
+ var $role;
+ var $scheme;
+ var $name;
+
+ // Constructor, used to input the data
+ function SimplePie_Credit($role = null, $scheme = null, $name = null)
+ {
+ $this->role = $role;
+ $this->scheme = $scheme;
+ $this->name = $name;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_role()
+ {
+ if ($this->role !== null)
+ {
+ return $this->role;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_scheme()
+ {
+ if ($this->scheme !== null)
+ {
+ return $this->scheme;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_name()
+ {
+ if ($this->name !== null)
+ {
+ return $this->name;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Copyright
+{
+ var $url;
+ var $label;
+
+ // Constructor, used to input the data
+ function SimplePie_Copyright($url = null, $label = null)
+ {
+ $this->url = $url;
+ $this->label = $label;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_url()
+ {
+ if ($this->url !== null)
+ {
+ return $this->url;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_attribution()
+ {
+ if ($this->label !== null)
+ {
+ return $this->label;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Rating
+{
+ var $scheme;
+ var $value;
+
+ // Constructor, used to input the data
+ function SimplePie_Rating($scheme = null, $value = null)
+ {
+ $this->scheme = $scheme;
+ $this->value = $value;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_scheme()
+ {
+ if ($this->scheme !== null)
+ {
+ return $this->scheme;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_value()
+ {
+ if ($this->value !== null)
+ {
+ return $this->value;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+class SimplePie_Restriction
+{
+ var $relationship;
+ var $type;
+ var $value;
+
+ // Constructor, used to input the data
+ function SimplePie_Restriction($relationship = null, $type = null, $value = null)
+ {
+ $this->relationship = $relationship;
+ $this->type = $type;
+ $this->value = $value;
+ }
+
+ function __toString()
+ {
+ // There is no $this->data here
+ return md5(serialize($this));
+ }
+
+ function get_relationship()
+ {
+ if ($this->relationship !== null)
+ {
+ return $this->relationship;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_type()
+ {
+ if ($this->type !== null)
+ {
+ return $this->type;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ function get_value()
+ {
+ if ($this->value !== null)
+ {
+ return $this->value;
+ }
+ else
+ {
+ return null;
+ }
+ }
+}
+
+/**
+ * @todo Move to properly supporting RFC2616 (HTTP/1.1)
+ */
+class SimplePie_File
+{
+ var $url;
+ var $useragent;
+ var $success = true;
+ var $headers = array();
+ var $body;
+ var $status_code;
+ var $redirects = 0;
+ var $error;
+ var $method = SIMPLEPIE_FILE_SOURCE_NONE;
+
+ function SimplePie_File($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false)
+ {
+ if (class_exists('idna_convert'))
+ {
+ $idn =& new idna_convert;
+ $parsed = SimplePie_Misc::parse_url($url);
+ $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
+ }
+ $this->url = $url;
+ $this->useragent = $useragent;
+ if (preg_match('/^http(s)?:\/\//i', $url))
+ {
+ if ($useragent === null)
+ {
+ $useragent = ini_get('user_agent');
+ $this->useragent = $useragent;
+ }
+ if (!is_array($headers))
+ {
+ $headers = array();
+ }
+ if (!$force_fsockopen && function_exists('curl_exec'))
+ {
+ $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_CURL;
+ $fp = curl_init();
+ $headers2 = array();
+ foreach ($headers as $key => $value)
+ {
+ $headers2[] = "$key: $value";
+ }
+ if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>='))
+ {
+ curl_setopt($fp, CURLOPT_ENCODING, '');
+ }
+ curl_setopt($fp, CURLOPT_URL, $url);
+ curl_setopt($fp, CURLOPT_HEADER, 1);
+ curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
+ curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
+ curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout);
+ curl_setopt($fp, CURLOPT_REFERER, $url);
+ curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
+ curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
+ if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>='))
+ {
+ curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1);
+ curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects);
+ }
+
+ $this->headers = curl_exec($fp);
+ if (curl_errno($fp) === 23 || curl_errno($fp) === 61)
+ {
+ curl_setopt($fp, CURLOPT_ENCODING, 'none');
+ $this->headers = curl_exec($fp);
+ }
+ if (curl_errno($fp))
+ {
+ $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp);
+ $this->success = false;
+ }
+ else
+ {
+ $info = curl_getinfo($fp);
+ curl_close($fp);
+ $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1);
+ $this->headers = array_pop($this->headers);
+ $parser =& new SimplePie_HTTP_Parser($this->headers);
+ if ($parser->parse())
+ {
+ $this->headers = $parser->headers;
+ $this->body = $parser->body;
+ $this->status_code = $parser->status_code;
+ if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
+ {
+ $this->redirects++;
+ $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
+ return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+ }
+ }
+ }
+ }
+ else
+ {
+ $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN;
+ $url_parts = parse_url($url);
+ $socket_host = $url_parts['host'];
+ if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https')
+ {
+ $socket_host = "ssl://$url_parts[host]";
+ $url_parts['port'] = 443;
+ }
+ if (!isset($url_parts['port']))
+ {
+ $url_parts['port'] = 80;
+ }
+ $fp = @fsockopen($socket_host, $url_parts['port'], $errno, $errstr, $timeout);
+ if (!$fp)
+ {
+ $this->error = 'fsockopen error: ' . $errstr;
+ $this->success = false;
+ }
+ else
+ {
+ stream_set_timeout($fp, $timeout);
+ if (isset($url_parts['path']))
+ {
+ if (isset($url_parts['query']))
+ {
+ $get = "$url_parts[path]?$url_parts[query]";
+ }
+ else
+ {
+ $get = $url_parts['path'];
+ }
+ }
+ else
+ {
+ $get = '/';
+ }
+ $out = "GET $get HTTP/1.0\r\n";
+ $out .= "Host: $url_parts[host]\r\n";
+ $out .= "User-Agent: $useragent\r\n";
+ if (extension_loaded('zlib'))
+ {
+ $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n";
+ }
+
+ if (isset($url_parts['user']) && isset($url_parts['pass']))
+ {
+ $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n";
+ }
+ foreach ($headers as $key => $value)
+ {
+ $out .= "$key: $value\r\n";
+ }
+ $out .= "Connection: Close\r\n\r\n";
+ fwrite($fp, $out);
+
+ $info = stream_get_meta_data($fp);
+
+ $this->headers = '';
+ while (!$info['eof'] && !$info['timed_out'])
+ {
+ $this->headers .= fread($fp, 1160);
+ $info = stream_get_meta_data($fp);
+ }
+ if (!$info['timed_out'])
+ {
+ $parser =& new SimplePie_HTTP_Parser($this->headers);
+ if ($parser->parse())
+ {
+ $this->headers = $parser->headers;
+ $this->body = $parser->body;
+ $this->status_code = $parser->status_code;
+ if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
+ {
+ $this->redirects++;
+ $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
+ return $this->SimplePie_File($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
+ }
+ if (isset($this->headers['content-encoding']))
+ {
+ // Hey, we act dumb elsewhere, so let's do that here too
+ switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20")))
+ {
+ case 'gzip':
+ case 'x-gzip':
+ $decoder =& new SimplePie_gzdecode($this->body);
+ if (!$decoder->parse())
+ {
+ $this->error = 'Unable to decode HTTP "gzip" stream';
+ $this->success = false;
+ }
+ else
+ {
+ $this->body = $decoder->data;
+ }
+ break;
+
+ case 'deflate':
+ if (($body = gzuncompress($this->body)) === false)
+ {
+ if (($body = gzinflate($this->body)) === false)
+ {
+ $this->error = 'Unable to decode HTTP "deflate" stream';
+ $this->success = false;
+ }
+ }
+ $this->body = $body;
+ break;
+
+ default:
+ $this->error = 'Unknown content coding';
+ $this->success = false;
+ }
+ }
+ }
+ }
+ else
+ {
+ $this->error = 'fsocket timed out';
+ $this->success = false;
+ }
+ fclose($fp);
+ }
+ }
+ }
+ else
+ {
+ $this->method = SIMPLEPIE_FILE_SOURCE_LOCAL | SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS;
+ if (!$this->body = file_get_contents($url))
+ {
+ $this->error = 'file_get_contents could not read the file';
+ $this->success = false;
+ }
+ }
+ }
+}
+
+/**
+ * HTTP Response Parser
+ *
+ * @package SimplePie
+ */
+class SimplePie_HTTP_Parser
+{
+ /**
+ * HTTP Version
+ *
+ * @access public
+ * @var float
+ */
+ var $http_version = 0.0;
+
+ /**
+ * Status code
+ *
+ * @access public
+ * @var int
+ */
+ var $status_code = 0;
+
+ /**
+ * Reason phrase
+ *
+ * @access public
+ * @var string
+ */
+ var $reason = '';
+
+ /**
+ * Key/value pairs of the headers
+ *
+ * @access public
+ * @var array
+ */
+ var $headers = array();
+
+ /**
+ * Body of the response
+ *
+ * @access public
+ * @var string
+ */
+ var $body = '';
+
+ /**
+ * Current state of the state machine
+ *
+ * @access private
+ * @var string
+ */
+ var $state = 'http_version';
+
+ /**
+ * Input data
+ *
+ * @access private
+ * @var string
+ */
+ var $data = '';
+
+ /**
+ * Input data length (to avoid calling strlen() everytime this is needed)
+ *
+ * @access private
+ * @var int
+ */
+ var $data_length = 0;
+
+ /**
+ * Current position of the pointer
+ *
+ * @var int
+ * @access private
+ */
+ var $position = 0;
+
+ /**
+ * Name of the hedaer currently being parsed
+ *
+ * @access private
+ * @var string
+ */
+ var $name = '';
+
+ /**
+ * Value of the hedaer currently being parsed
+ *
+ * @access private
+ * @var string
+ */
+ var $value = '';
+
+ /**
+ * Create an instance of the class with the input data
+ *
+ * @access public
+ * @param string $data Input data
+ */
+ function SimplePie_HTTP_Parser($data)
+ {
+ $this->data = $data;
+ $this->data_length = strlen($this->data);
+ }
+
+ /**
+ * Parse the input data
+ *
+ * @access public
+ * @return bool true on success, false on failure
+ */
+ function parse()
+ {
+ while ($this->state && $this->state !== 'emit' && $this->has_data())
+ {
+ $state = $this->state;
+ $this->$state();
+ }
+ $this->data = '';
+ if ($this->state === 'emit' || $this->state === 'body')
+ {
+ return true;
+ }
+ else
+ {
+ $this->http_version = '';
+ $this->status_code = '';
+ $this->reason = '';
+ $this->headers = array();
+ $this->body = '';
+ return false;
+ }
+ }
+
+ /**
+ * Check whether there is data beyond the pointer
+ *
+ * @access private
+ * @return bool true if there is further data, false if not
+ */
+ function has_data()
+ {
+ return (bool) ($this->position < $this->data_length);
+ }
+
+ /**
+ * See if the next character is LWS
+ *
+ * @access private
+ * @return bool true if the next character is LWS, false if not
+ */
+ function is_linear_whitespace()
+ {
+ return (bool) ($this->data[$this->position] === "\x09"
+ || $this->data[$this->position] === "\x20"
+ || ($this->data[$this->position] === "\x0A"
+ && isset($this->data[$this->position + 1])
+ && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20")));
+ }
+
+ /**
+ * Parse the HTTP version
+ *
+ * @access private
+ */
+ function http_version()
+ {
+ if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/')
+ {
+ $len = strspn($this->data, '0123456789.', 5);
+ $this->http_version = substr($this->data, 5, $len);
+ $this->position += 5 + $len;
+ if (substr_count($this->http_version, '.') <= 1)
+ {
+ $this->http_version = (float) $this->http_version;
+ $this->position += strspn($this->data, "\x09\x20", $this->position);
+ $this->state = 'status';
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ /**
+ * Parse the status code
+ *
+ * @access private
+ */
+ function status()
+ {
+ if ($len = strspn($this->data, '0123456789', $this->position))
+ {
+ $this->status_code = (int) substr($this->data, $this->position, $len);
+ $this->position += $len;
+ $this->state = 'reason';
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ /**
+ * Parse the reason phrase
+ *
+ * @access private
+ */
+ function reason()
+ {
+ $len = strcspn($this->data, "\x0A", $this->position);
+ $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20");
+ $this->position += $len + 1;
+ $this->state = 'new_line';
+ }
+
+ /**
+ * Deal with a new line, shifting data around as needed
+ *
+ * @access private
+ */
+ function new_line()
+ {
+ $this->value = trim($this->value, "\x0D\x20");
+ if ($this->name !== '' && $this->value !== '')
+ {
+ $this->name = strtolower($this->name);
+ if (isset($this->headers[$this->name]))
+ {
+ $this->headers[$this->name] .= ', ' . $this->value;
+ }
+ else
+ {
+ $this->headers[$this->name] = $this->value;
+ }
+ }
+ $this->name = '';
+ $this->value = '';
+ if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A")
+ {
+ $this->position += 2;
+ $this->state = 'body';
+ }
+ elseif ($this->data[$this->position] === "\x0A")
+ {
+ $this->position++;
+ $this->state = 'body';
+ }
+ else
+ {
+ $this->state = 'name';
+ }
+ }
+
+ /**
+ * Parse a header name
+ *
+ * @access private
+ */
+ function name()
+ {
+ $len = strcspn($this->data, "\x0A:", $this->position);
+ if (isset($this->data[$this->position + $len]))
+ {
+ if ($this->data[$this->position + $len] === "\x0A")
+ {
+ $this->position += $len;
+ $this->state = 'new_line';
+ }
+ else
+ {
+ $this->name = substr($this->data, $this->position, $len);
+ $this->position += $len + 1;
+ $this->state = 'value';
+ }
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ /**
+ * Parse LWS, replacing consecutive LWS characters with a single space
+ *
+ * @access private
+ */
+ function linear_whitespace()
+ {
+ do
+ {
+ if (substr($this->data, $this->position, 2) === "\x0D\x0A")
+ {
+ $this->position += 2;
+ }
+ elseif ($this->data[$this->position] === "\x0A")
+ {
+ $this->position++;
+ }
+ $this->position += strspn($this->data, "\x09\x20", $this->position);
+ } while ($this->has_data() && $this->is_linear_whitespace());
+ $this->value .= "\x20";
+ }
+
+ /**
+ * See what state to move to while within non-quoted header values
+ *
+ * @access private
+ */
+ function value()
+ {
+ if ($this->is_linear_whitespace())
+ {
+ $this->linear_whitespace();
+ }
+ else
+ {
+ switch ($this->data[$this->position])
+ {
+ case '"':
+ $this->position++;
+ $this->state = 'quote';
+ break;
+
+ case "\x0A":
+ $this->position++;
+ $this->state = 'new_line';
+ break;
+
+ default:
+ $this->state = 'value_char';
+ break;
+ }
+ }
+ }
+
+ /**
+ * Parse a header value while outside quotes
+ *
+ * @access private
+ */
+ function value_char()
+ {
+ $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position);
+ $this->value .= substr($this->data, $this->position, $len);
+ $this->position += $len;
+ $this->state = 'value';
+ }
+
+ /**
+ * See what state to move to while within quoted header values
+ *
+ * @access private
+ */
+ function quote()
+ {
+ if ($this->is_linear_whitespace())
+ {
+ $this->linear_whitespace();
+ }
+ else
+ {
+ switch ($this->data[$this->position])
+ {
+ case '"':
+ $this->position++;
+ $this->state = 'value';
+ break;
+
+ case "\x0A":
+ $this->position++;
+ $this->state = 'new_line';
+ break;
+
+ case '\\':
+ $this->position++;
+ $this->state = 'quote_escaped';
+ break;
+
+ default:
+ $this->state = 'quote_char';
+ break;
+ }
+ }
+ }
+
+ /**
+ * Parse a header value while within quotes
+ *
+ * @access private
+ */
+ function quote_char()
+ {
+ $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position);
+ $this->value .= substr($this->data, $this->position, $len);
+ $this->position += $len;
+ $this->state = 'value';
+ }
+
+ /**
+ * Parse an escaped character within quotes
+ *
+ * @access private
+ */
+ function quote_escaped()
+ {
+ $this->value .= $this->data[$this->position];
+ $this->position++;
+ $this->state = 'quote';
+ }
+
+ /**
+ * Parse the body
+ *
+ * @access private
+ */
+ function body()
+ {
+ $this->body = substr($this->data, $this->position);
+ $this->state = 'emit';
+ }
+}
+
+/**
+ * gzdecode
+ *
+ * @package SimplePie
+ */
+class SimplePie_gzdecode
+{
+ /**
+ * Compressed data
+ *
+ * @access private
+ * @see gzdecode::$data
+ */
+ var $compressed_data;
+
+ /**
+ * Size of compressed data
+ *
+ * @access private
+ */
+ var $compressed_size;
+
+ /**
+ * Minimum size of a valid gzip string
+ *
+ * @access private
+ */
+ var $min_compressed_size = 18;
+
+ /**
+ * Current position of pointer
+ *
+ * @access private
+ */
+ var $position = 0;
+
+ /**
+ * Flags (FLG)
+ *
+ * @access private
+ */
+ var $flags;
+
+ /**
+ * Uncompressed data
+ *
+ * @access public
+ * @see gzdecode::$compressed_data
+ */
+ var $data;
+
+ /**
+ * Modified time
+ *
+ * @access public
+ */
+ var $MTIME;
+
+ /**
+ * Extra Flags
+ *
+ * @access public
+ */
+ var $XFL;
+
+ /**
+ * Operating System
+ *
+ * @access public
+ */
+ var $OS;
+
+ /**
+ * Subfield ID 1
+ *
+ * @access public
+ * @see gzdecode::$extra_field
+ * @see gzdecode::$SI2
+ */
+ var $SI1;
+
+ /**
+ * Subfield ID 2
+ *
+ * @access public
+ * @see gzdecode::$extra_field
+ * @see gzdecode::$SI1
+ */
+ var $SI2;
+
+ /**
+ * Extra field content
+ *
+ * @access public
+ * @see gzdecode::$SI1
+ * @see gzdecode::$SI2
+ */
+ var $extra_field;
+
+ /**
+ * Original filename
+ *
+ * @access public
+ */
+ var $filename;
+
+ /**
+ * Human readable comment
+ *
+ * @access public
+ */
+ var $comment;
+
+ /**
+ * Don't allow anything to be set
+ *
+ * @access public
+ */
+ function __set($name, $value)
+ {
+ trigger_error("Cannot write property $name", E_USER_ERROR);
+ }
+
+ /**
+ * Set the compressed string and related properties
+ *
+ * @access public
+ */
+ function SimplePie_gzdecode($data)
+ {
+ $this->compressed_data = $data;
+ $this->compressed_size = strlen($data);
+ }
+
+ /**
+ * Decode the GZIP stream
+ *
+ * @access public
+ */
+ function parse()
+ {
+ if ($this->compressed_size >= $this->min_compressed_size)
+ {
+ // Check ID1, ID2, and CM
+ if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08")
+ {
+ return false;
+ }
+
+ // Get the FLG (FLaGs)
+ $this->flags = ord($this->compressed_data[3]);
+
+ // FLG bits above (1 << 4) are reserved
+ if ($this->flags > 0x1F)
+ {
+ return false;
+ }
+
+ // Advance the pointer after the above
+ $this->position += 4;
+
+ // MTIME
+ $mtime = substr($this->compressed_data, $this->position, 4);
+ // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness
+ if (current(unpack('S', "\x00\x01")) === 1)
+ {
+ $mtime = strrev($mtime);
+ }
+ $this->MTIME = current(unpack('l', $mtime));
+ $this->position += 4;
+
+ // Get the XFL (eXtra FLags)
+ $this->XFL = ord($this->compressed_data[$this->position++]);
+
+ // Get the OS (Operating System)
+ $this->OS = ord($this->compressed_data[$this->position++]);
+
+ // Parse the FEXTRA
+ if ($this->flags & 4)
+ {
+ // Read subfield IDs
+ $this->SI1 = $this->compressed_data[$this->position++];
+ $this->SI2 = $this->compressed_data[$this->position++];
+
+ // SI2 set to zero is reserved for future use
+ if ($this->SI2 === "\x00")
+ {
+ return false;
+ }
+
+ // Get the length of the extra field
+ $len = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
+ $this->position += 2;
+
+ // Check the length of the string is still valid
+ $this->min_compressed_size += $len + 4;
+ if ($this->compressed_size >= $this->min_compressed_size)
+ {
+ // Set the extra field to the given data
+ $this->extra_field = substr($this->compressed_data, $this->position, $len);
+ $this->position += $len;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ // Parse the FNAME
+ if ($this->flags & 8)
+ {
+ // Get the length of the filename
+ $len = strcspn($this->compressed_data, "\x00", $this->position);
+
+ // Check the length of the string is still valid
+ $this->min_compressed_size += $len + 1;
+ if ($this->compressed_size >= $this->min_compressed_size)
+ {
+ // Set the original filename to the given string
+ $this->filename = substr($this->compressed_data, $this->position, $len);
+ $this->position += $len + 1;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ // Parse the FCOMMENT
+ if ($this->flags & 16)
+ {
+ // Get the length of the comment
+ $len = strcspn($this->compressed_data, "\x00", $this->position);
+
+ // Check the length of the string is still valid
+ $this->min_compressed_size += $len + 1;
+ if ($this->compressed_size >= $this->min_compressed_size)
+ {
+ // Set the original comment to the given string
+ $this->comment = substr($this->compressed_data, $this->position, $len);
+ $this->position += $len + 1;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ // Parse the FHCRC
+ if ($this->flags & 2)
+ {
+ // Check the length of the string is still valid
+ $this->min_compressed_size += $len + 2;
+ if ($this->compressed_size >= $this->min_compressed_size)
+ {
+ // Read the CRC
+ $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
+
+ // Check the CRC matches
+ if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc)
+ {
+ $this->position += 2;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ // Decompress the actual data
+ if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false)
+ {
+ return false;
+ }
+ else
+ {
+ $this->position = $this->compressed_size - 8;
+ }
+
+ // Check CRC of data
+ $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
+ $this->position += 4;
+ /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc))
+ {
+ return false;
+ }*/
+
+ // Check ISIZE of data
+ $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
+ $this->position += 4;
+ if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize))
+ {
+ return false;
+ }
+
+ // Wow, against all odds, we've actually got a valid gzip string
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+}
+
+class SimplePie_Cache
+{
+ /**
+ * Don't call the constructor. Please.
+ *
+ * @access private
+ */
+ function SimplePie_Cache()
+ {
+ trigger_error('Please call SimplePie_Cache::create() instead of the constructor', E_USER_ERROR);
+ }
+
+ /**
+ * Create a new SimplePie_Cache object
+ *
+ * @static
+ * @access public
+ */
+ function create($location, $filename, $extension)
+ {
+ $location_iri =& new SimplePie_IRI($location);
+ switch ($location_iri->get_scheme())
+ {
+ case 'mysql':
+ if (extension_loaded('mysql'))
+ {
+ return new SimplePie_Cache_MySQL($location_iri, $filename, $extension);
+ }
+ break;
+
+ default:
+ return new SimplePie_Cache_File($location, $filename, $extension);
+ }
+ }
+}
+
+class SimplePie_Cache_File
+{
+ var $location;
+ var $filename;
+ var $extension;
+ var $name;
+
+ function SimplePie_Cache_File($location, $filename, $extension)
+ {
+ $this->location = $location;
+ $this->filename = $filename;
+ $this->extension = $extension;
+ $this->name = "$this->location/$this->filename.$this->extension";
+ }
+
+ function save($data)
+ {
+ if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location))
+ {
+ if (is_a($data, 'SimplePie'))
+ {
+ $data = $data->data;
+ }
+
+ $data = serialize($data);
+
+ if (function_exists('file_put_contents'))
+ {
+ return (bool) file_put_contents($this->name, $data);
+ }
+ else
+ {
+ $fp = fopen($this->name, 'wb');
+ if ($fp)
+ {
+ fwrite($fp, $data);
+ fclose($fp);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ function load()
+ {
+ if (file_exists($this->name) && is_readable($this->name))
+ {
+ return unserialize(file_get_contents($this->name));
+ }
+ return false;
+ }
+
+ function mtime()
+ {
+ if (file_exists($this->name))
+ {
+ return filemtime($this->name);
+ }
+ return false;
+ }
+
+ function touch()
+ {
+ if (file_exists($this->name))
+ {
+ return touch($this->name);
+ }
+ return false;
+ }
+
+ function unlink()
+ {
+ if (file_exists($this->name))
+ {
+ return unlink($this->name);
+ }
+ return false;
+ }
+}
+
+class SimplePie_Cache_DB
+{
+ function prepare_simplepie_object_for_cache($data)
+ {
+ $items = $data->get_items();
+ $items_by_id = array();
+
+ if (!empty($items))
+ {
+ foreach ($items as $item)
+ {
+ $items_by_id[$item->get_id()] = $item;
+ }
+
+ if (count($items_by_id) !== count($items))
+ {
+ $items_by_id = array();
+ foreach ($items as $item)
+ {
+ $items_by_id[$item->get_id(true)] = $item;
+ }
+ }
+
+ if (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]))
+ {
+ $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0];
+ }
+ elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]))
+ {
+ $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0];
+ }
+ elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]))
+ {
+ $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0];
+ }
+ elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0]))
+ {
+ $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0];
+ }
+ else
+ {
+ $channel = null;
+ }
+
+ if ($channel !== null)
+ {
+ if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']))
+ {
+ unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']);
+ }
+ if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']))
+ {
+ unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']);
+ }
+ if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']))
+ {
+ unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']);
+ }
+ if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']))
+ {
+ unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']);
+ }
+ if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']))
+ {
+ unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']);
+ }
+ }
+ if (isset($data->data['items']))
+ {
+ unset($data->data['items']);
+ }
+ if (isset($data->data['ordered_items']))
+ {
+ unset($data->data['ordered_items']);
+ }
+ }
+ return array(serialize($data->data), $items_by_id);
+ }
+}
+
+class SimplePie_Cache_MySQL extends SimplePie_Cache_DB
+{
+ var $mysql;
+ var $options;
+ var $id;
+
+ function SimplePie_Cache_MySQL($mysql_location, $name, $extension)
+ {
+ $host = $mysql_location->get_host();
+ if (SimplePie_Misc::stripos($host, 'unix(') === 0 && substr($host, -1) === ')')
+ {
+ $server = ':' . substr($host, 5, -1);
+ }
+ else
+ {
+ $server = $host;
+ if ($mysql_location->get_port() !== null)
+ {
+ $server .= ':' . $mysql_location->get_port();
+ }
+ }
+
+ if (strpos($mysql_location->get_userinfo(), ':') !== false)
+ {
+ list($username, $password) = explode(':', $mysql_location->get_userinfo(), 2);
+ }
+ else
+ {
+ $username = $mysql_location->get_userinfo();
+ $password = null;
+ }
+
+ if ($this->mysql = mysql_connect($server, $username, $password))
+ {
+ $this->id = $name . $extension;
+ $this->options = SimplePie_Misc::parse_str($mysql_location->get_query());
+ if (!isset($this->options['prefix'][0]))
+ {
+ $this->options['prefix'][0] = '';
+ }
+
+ if (mysql_select_db(ltrim($mysql_location->get_path(), '/'))
+ && mysql_query('SET NAMES utf8')
+ && ($query = mysql_unbuffered_query('SHOW TABLES')))
+ {
+ $db = array();
+ while ($row = mysql_fetch_row($query))
+ {
+ $db[] = $row[0];
+ }
+
+ if (!in_array($this->options['prefix'][0] . 'cache_data', $db))
+ {
+ if (!mysql_query('CREATE TABLE `' . $this->options['prefix'][0] . 'cache_data` (`id` TEXT CHARACTER SET utf8 NOT NULL, `items` SMALLINT NOT NULL DEFAULT 0, `data` BLOB NOT NULL, `mtime` INT UNSIGNED NOT NULL, UNIQUE (`id`(125)))'))
+ {
+ $this->mysql = null;
+ }
+ }
+
+ if (!in_array($this->options['prefix'][0] . 'items', $db))
+ {
+ if (!mysql_query('CREATE TABLE `' . $this->options['prefix'][0] . 'items` (`feed_id` TEXT CHARACTER SET utf8 NOT NULL, `id` TEXT CHARACTER SET utf8 NOT NULL, `data` TEXT CHARACTER SET utf8 NOT NULL, `posted` INT UNSIGNED NOT NULL, INDEX `feed_id` (`feed_id`(125)))'))
+ {
+ $this->mysql = null;
+ }
+ }
+ }
+ else
+ {
+ $this->mysql = null;
+ }
+ }
+ }
+
+ function save($data)
+ {
+ if ($this->mysql)
+ {
+ $feed_id = "'" . mysql_real_escape_string($this->id) . "'";
+
+ if (is_a($data, 'SimplePie'))
+ {
+ if (SIMPLEPIE_PHP5)
+ {
+ // This keyword needs to defy coding standards for PHP4 compatibility
+ $data = clone($data);
+ }
+
+ $prepared = $this->prepare_simplepie_object_for_cache($data);
+
+ if ($query = mysql_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = ' . $feed_id, $this->mysql))
+ {
+ if (mysql_num_rows($query))
+ {
+ $items = count($prepared[1]);
+ if ($items)
+ {
+ $sql = 'UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `items` = ' . $items . ', `data` = \'' . mysql_real_escape_string($prepared[0]) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id;
+ }
+ else
+ {
+ $sql = 'UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `data` = \'' . mysql_real_escape_string($prepared[0]) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id;
+ }
+
+ if (!mysql_query($sql, $this->mysql))
+ {
+ return false;
+ }
+ }
+ elseif (!mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(' . $feed_id . ', ' . count($prepared[1]) . ', \'' . mysql_real_escape_string($prepared[0]) . '\', ' . time() . ')', $this->mysql))
+ {
+ return false;
+ }
+
+ $ids = array_keys($prepared[1]);
+ if (!empty($ids))
+ {
+ foreach ($ids as $id)
+ {
+ $database_ids[] = mysql_real_escape_string($id);
+ }
+
+ if ($query = mysql_unbuffered_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'items` WHERE `id` = \'' . implode('\' OR `id` = \'', $database_ids) . '\' AND `feed_id` = ' . $feed_id, $this->mysql))
+ {
+ $existing_ids = array();
+ while ($row = mysql_fetch_row($query))
+ {
+ $existing_ids[] = $row[0];
+ }
+
+ $new_ids = array_diff($ids, $existing_ids);
+
+ foreach ($new_ids as $new_id)
+ {
+ if (!($date = $prepared[1][$new_id]->get_date('U')))
+ {
+ $date = time();
+ }
+
+ if (!mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'items` (`feed_id`, `id`, `data`, `posted`) VALUES(' . $feed_id . ', \'' . mysql_real_escape_string($new_id) . '\', \'' . mysql_real_escape_string(serialize($prepared[1][$new_id]->data)) . '\', ' . $date . ')', $this->mysql))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ else
+ {
+ return true;
+ }
+ }
+ }
+ elseif ($query = mysql_query('SELECT `id` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = ' . $feed_id, $this->mysql))
+ {
+ if (mysql_num_rows($query))
+ {
+ if (mysql_query('UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `items` = 0, `data` = \'' . mysql_real_escape_string(serialize($data)) . '\', `mtime` = ' . time() . ' WHERE `id` = ' . $feed_id, $this->mysql))
+ {
+ return true;
+ }
+ }
+ elseif (mysql_query('INSERT INTO `' . $this->options['prefix'][0] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(\'' . mysql_real_escape_string($this->id) . '\', 0, \'' . mysql_real_escape_string(serialize($data)) . '\', ' . time() . ')', $this->mysql))
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ function load()
+ {
+ if ($this->mysql && ($query = mysql_query('SELECT `items`, `data` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($row = mysql_fetch_row($query)))
+ {
+ $data = unserialize($row[1]);
+
+ if (isset($this->options['items'][0]))
+ {
+ $items = (int) $this->options['items'][0];
+ }
+ else
+ {
+ $items = (int) $row[0];
+ }
+
+ if ($items !== 0)
+ {
+ if (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]))
+ {
+ $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0];
+ }
+ elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]))
+ {
+ $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0];
+ }
+ elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]))
+ {
+ $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0];
+ }
+ elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]))
+ {
+ $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0];
+ }
+ else
+ {
+ $feed = null;
+ }
+
+ if ($feed !== null)
+ {
+ $sql = 'SELECT `data` FROM `' . $this->options['prefix'][0] . 'items` WHERE `feed_id` = \'' . mysql_real_escape_string($this->id) . '\' ORDER BY `posted` DESC';
+ if ($items > 0)
+ {
+ $sql .= ' LIMIT ' . $items;
+ }
+
+ if ($query = mysql_unbuffered_query($sql, $this->mysql))
+ {
+ while ($row = mysql_fetch_row($query))
+ {
+ $feed['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'][] = unserialize($row[0]);
+ }
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+ return $data;
+ }
+ return false;
+ }
+
+ function mtime()
+ {
+ if ($this->mysql && ($query = mysql_query('SELECT `mtime` FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($row = mysql_fetch_row($query)))
+ {
+ return $row[0];
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ function touch()
+ {
+ if ($this->mysql && ($query = mysql_query('UPDATE `' . $this->options['prefix'][0] . 'cache_data` SET `mtime` = ' . time() . ' WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && mysql_affected_rows($this->mysql))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ function unlink()
+ {
+ if ($this->mysql && ($query = mysql_query('DELETE FROM `' . $this->options['prefix'][0] . 'cache_data` WHERE `id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)) && ($query2 = mysql_query('DELETE FROM `' . $this->options['prefix'][0] . 'items` WHERE `feed_id` = \'' . mysql_real_escape_string($this->id) . "'", $this->mysql)))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+}
+
+class SimplePie_Misc
+{
+ function time_hms($seconds)
+ {
+ $time = '';
+
+ $hours = floor($seconds / 3600);
+ $remainder = $seconds % 3600;
+ if ($hours > 0)
+ {
+ $time .= $hours.':';
+ }
+
+ $minutes = floor($remainder / 60);
+ $seconds = $remainder % 60;
+ if ($minutes < 10 && $hours > 0)
+ {
+ $minutes = '0' . $minutes;
+ }
+ if ($seconds < 10)
+ {
+ $seconds = '0' . $seconds;
+ }
+
+ $time .= $minutes.':';
+ $time .= $seconds;
+
+ return $time;
+ }
+
+ function absolutize_url($relative, $base)
+ {
+ $iri = SimplePie_IRI::absolutize(new SimplePie_IRI($base), $relative);
+ return $iri->get_iri();
+ }
+
+ function remove_dot_segments($input)
+ {
+ $output = '';
+ while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..')
+ {
+ // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
+ if (strpos($input, '../') === 0)
+ {
+ $input = substr($input, 3);
+ }
+ elseif (strpos($input, './') === 0)
+ {
+ $input = substr($input, 2);
+ }
+ // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
+ elseif (strpos($input, '/./') === 0)
+ {
+ $input = substr_replace($input, '/', 0, 3);
+ }
+ elseif ($input === '/.')
+ {
+ $input = '/';
+ }
+ // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
+ elseif (strpos($input, '/../') === 0)
+ {
+ $input = substr_replace($input, '/', 0, 4);
+ $output = substr_replace($output, '', strrpos($output, '/'));
+ }
+ elseif ($input === '/..')
+ {
+ $input = '/';
+ $output = substr_replace($output, '', strrpos($output, '/'));
+ }
+ // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
+ elseif ($input === '.' || $input === '..')
+ {
+ $input = '';
+ }
+ // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
+ elseif (($pos = strpos($input, '/', 1)) !== false)
+ {
+ $output .= substr($input, 0, $pos);
+ $input = substr_replace($input, '', 0, $pos);
+ }
+ else
+ {
+ $output .= $input;
+ $input = '';
+ }
+ }
+ return $output . $input;
+ }
+
+ function get_element($realname, $string)
+ {
+ $return = array();
+ $name = preg_quote($realname, '/');
+ if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE))
+ {
+ for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++)
+ {
+ $return[$i]['tag'] = $realname;
+ $return[$i]['full'] = $matches[$i][0][0];
+ $return[$i]['offset'] = $matches[$i][0][1];
+ if (strlen($matches[$i][3][0]) <= 2)
+ {
+ $return[$i]['self_closing'] = true;
+ }
+ else
+ {
+ $return[$i]['self_closing'] = false;
+ $return[$i]['content'] = $matches[$i][4][0];
+ }
+ $return[$i]['attribs'] = array();
+ if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER))
+ {
+ for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++)
+ {
+ if (count($attribs[$j]) === 2)
+ {
+ $attribs[$j][2] = $attribs[$j][1];
+ }
+ $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8');
+ }
+ }
+ }
+ }
+ return $return;
+ }
+
+ function element_implode($element)
+ {
+ $full = "<$element[tag]";
+ foreach ($element['attribs'] as $key => $value)
+ {
+ $key = strtolower($key);
+ $full .= " $key=\"" . htmlspecialchars($value['data']) . '"';
+ }
+ if ($element['self_closing'])
+ {
+ $full .= ' />';
+ }
+ else
+ {
+ $full .= ">$element[content]</$element[tag]>";
+ }
+ return $full;
+ }
+
+ function error($message, $level, $file, $line)
+ {
+ if ((ini_get('error_reporting') & $level) > 0)
+ {
+ switch ($level)
+ {
+ case E_USER_ERROR:
+ $note = 'PHP Error';
+ break;
+ case E_USER_WARNING:
+ $note = 'PHP Warning';
+ break;
+ case E_USER_NOTICE:
+ $note = 'PHP Notice';
+ break;
+ default:
+ $note = 'Unknown Error';
+ break;
+ }
+
+ $log_error = true;
+ if (!function_exists('error_log'))
+ {
+ $log_error = false;
+ }
+
+ $log_file = @ini_get('error_log');
+ if (!empty($log_file) && ('syslog' != $log_file) && !@is_writable($log_file))
+ {
+ $log_error = false;
+ }
+
+ if ($log_error)
+ {
+ @error_log("$note: $message in $file on line $line", 0);
+ }
+ }
+
+ return $message;
+ }
+
+ /**
+ * If a file has been cached, retrieve and display it.
+ *
+ * This is most useful for caching images (get_favicon(), etc.),
+ * however it works for all cached files. This WILL NOT display ANY
+ * file/image/page/whatever, but rather only display what has already
+ * been cached by SimplePie.
+ *
+ * @access public
+ * @see SimplePie::get_favicon()
+ * @param str $identifier_url URL that is used to identify the content.
+ * This may or may not be the actual URL of the live content.
+ * @param str $cache_location Location of SimplePie's cache. Defaults
+ * to './cache'.
+ * @param str $cache_extension The file extension that the file was
+ * cached with. Defaults to 'spc'.
+ * @param str $cache_class Name of the cache-handling class being used
+ * in SimplePie. Defaults to 'SimplePie_Cache', and should be left
+ * as-is unless you've overloaded the class.
+ * @param str $cache_name_function Obsolete. Exists for backwards
+ * compatibility reasons only.
+ */
+ function display_cached_file($identifier_url, $cache_location = './cache', $cache_extension = 'spc', $cache_class = 'SimplePie_Cache', $cache_name_function = 'md5')
+ {
+ $cache = call_user_func(array($cache_class, 'create'), $cache_location, $identifier_url, $cache_extension);
+
+ if ($file = $cache->load())
+ {
+ if (isset($file['headers']['content-type']))
+ {
+ header('Content-type:' . $file['headers']['content-type']);
+ }
+ else
+ {
+ header('Content-type: application/octet-stream');
+ }
+ header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
+ echo $file['body'];
+ exit;
+ }
+
+ die('Cached file for ' . $identifier_url . ' cannot be found.');
+ }
+
+ function fix_protocol($url, $http = 1)
+ {
+ $url = SimplePie_Misc::normalize_url($url);
+ $parsed = SimplePie_Misc::parse_url($url);
+ if ($parsed['scheme'] !== '' && $parsed['scheme'] !== 'http' && $parsed['scheme'] !== 'https')
+ {
+ return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http);
+ }
+
+ if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url))
+ {
+ return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http);
+ }
+
+ if ($http === 2 && $parsed['scheme'] !== '')
+ {
+ return "feed:$url";
+ }
+ elseif ($http === 3 && strtolower($parsed['scheme']) === 'http')
+ {
+ return substr_replace($url, 'podcast', 0, 4);
+ }
+ elseif ($http === 4 && strtolower($parsed['scheme']) === 'http')
+ {
+ return substr_replace($url, 'itpc', 0, 4);
+ }
+ else
+ {
+ return $url;
+ }
+ }
+
+ function parse_url($url)
+ {
+ $iri =& new SimplePie_IRI($url);
+ return array(
+ 'scheme' => (string) $iri->get_scheme(),
+ 'authority' => (string) $iri->get_authority(),
+ 'path' => (string) $iri->get_path(),
+ 'query' => (string) $iri->get_query(),
+ 'fragment' => (string) $iri->get_fragment()
+ );
+ }
+
+ function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '')
+ {
+ $iri =& new SimplePie_IRI('');
+ $iri->set_scheme($scheme);
+ $iri->set_authority($authority);
+ $iri->set_path($path);
+ $iri->set_query($query);
+ $iri->set_fragment($fragment);
+ return $iri->get_iri();
+ }
+
+ function normalize_url($url)
+ {
+ $iri =& new SimplePie_IRI($url);
+ return $iri->get_iri();
+ }
+
+ function percent_encoding_normalization($match)
+ {
+ $integer = hexdec($match[1]);
+ if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer === 0x2D || $integer === 0x2E || $integer === 0x5F || $integer === 0x7E)
+ {
+ return chr($integer);
+ }
+ else
+ {
+ return strtoupper($match[0]);
+ }
+ }
+
+ /**
+ * Remove bad UTF-8 bytes
+ *
+ * PCRE Pattern to locate bad bytes in a UTF-8 string comes from W3C
+ * FAQ: Multilingual Forms (modified to include full ASCII range)
+ *
+ * @author Geoffrey Sneddon
+ * @see http://www.w3.org/International/questions/qa-forms-utf-8
+ * @param string $str String to remove bad UTF-8 bytes from
+ * @return string UTF-8 string
+ */
+ function utf8_bad_replace($str)
+ {
+ if (function_exists('iconv') && ($return = @iconv('UTF-8', 'UTF-8//IGNORE', $str)))
+ {
+ return $return;
+ }
+ elseif (function_exists('mb_convert_encoding') && ($return = @mb_convert_encoding($str, 'UTF-8', 'UTF-8')))
+ {
+ return $return;
+ }
+ elseif (preg_match_all('/(?:[\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})+/', $str, $matches))
+ {
+ return implode("\xEF\xBF\xBD", $matches[0]);
+ }
+ elseif ($str !== '')
+ {
+ return "\xEF\xBF\xBD";
+ }
+ else
+ {
+ return '';
+ }
+ }
+
+ /**
+ * Converts a Windows-1252 encoded string to a UTF-8 encoded string
+ *
+ * @static
+ * @access public
+ * @param string $string Windows-1252 encoded string
+ * @return string UTF-8 encoded string
+ */
+ function windows_1252_to_utf8($string)
+ {
+ static $convert_table = array("\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF");
+
+ return strtr($string, $convert_table);
+ }
+
+ function change_encoding($data, $input, $output)
+ {
+ $input = SimplePie_Misc::encoding($input);
+ $output = SimplePie_Misc::encoding($output);
+
+ // We fail to fail on non US-ASCII bytes
+ if ($input === 'US-ASCII')
+ {
+ static $non_ascii_octects = '';
+ if (!$non_ascii_octects)
+ {
+ for ($i = 0x80; $i <= 0xFF; $i++)
+ {
+ $non_ascii_octects .= chr($i);
+ }
+ }
+ $data = substr($data, 0, strcspn($data, $non_ascii_octects));
+ }
+
+ // This is first, as behaviour of this is completely predictable
+ if ($input === 'windows-1252' && $output === 'UTF-8')
+ {
+ return SimplePie_Misc::windows_1252_to_utf8($data);
+ }
+ // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported).
+ elseif (function_exists('mb_convert_encoding') && @mb_convert_encoding("\x80", 'UTF-16BE', $input) !== "\x00\x80" && in_array($input, mb_list_encodings()) && ($return = @mb_convert_encoding($data, $output, $input)))
+ {
+ return $return;
+ }
+ // This is last, as behaviour of this varies with OS userland and PHP version
+ elseif (function_exists('iconv') && ($return = @iconv($input, $output, $data)))
+ {
+ return $return;
+ }
+ // If we can't do anything, just fail
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Normalize an encoding name
+ *
+ * This is automatically generated by create.php
+ *
+ * To generate it, run `php create.php` on the command line, and copy the
+ * output to replace this function.
+ *
+ * @param string $charset Character set to standardise
+ * @return string Standardised name
+ */
+ function encoding($charset)
+ {
+ // Normalization from UTS #22
+ switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset)))
+ {
+ case 'adobestandardencoding':
+ case 'csadobestandardencoding':
+ return 'Adobe-Standard-Encoding';
+
+ case 'adobesymbolencoding':
+ case 'cshppsmath':
+ return 'Adobe-Symbol-Encoding';
+
+ case 'ami1251':
+ case 'amiga1251':
+ return 'Amiga-1251';
+
+ case 'ansix31101983':
+ case 'csat5001983':
+ case 'csiso99naplps':
+ case 'isoir99':
+ case 'naplps':
+ return 'ANSI_X3.110-1983';
+
+ case 'arabic7':
+ case 'asmo449':
+ case 'csiso89asmo449':
+ case 'iso9036':
+ case 'isoir89':
+ return 'ASMO_449';
+
+ case 'big5':
+ case 'csbig5':
+ return 'Big5';
+
+ case 'big5hkscs':
+ return 'Big5-HKSCS';
+
+ case 'bocu1':
+ case 'csbocu1':
+ return 'BOCU-1';
+
+ case 'brf':
+ case 'csbrf':
+ return 'BRF';
+
+ case 'bs4730':
+ case 'csiso4unitedkingdom':
+ case 'gb':
+ case 'iso646gb':
+ case 'isoir4':
+ case 'uk':
+ return 'BS_4730';
+
+ case 'bsviewdata':
+ case 'csiso47bsviewdata':
+ case 'isoir47':
+ return 'BS_viewdata';
+
+ case 'cesu8':
+ case 'cscesu8':
+ return 'CESU-8';
+
+ case 'ca':
+ case 'csa71':
+ case 'csaz243419851':
+ case 'csiso121canadian1':
+ case 'iso646ca':
+ case 'isoir121':
+ return 'CSA_Z243.4-1985-1';
+
+ case 'csa72':
+ case 'csaz243419852':
+ case 'csiso122canadian2':
+ case 'iso646ca2':
+ case 'isoir122':
+ return 'CSA_Z243.4-1985-2';
+
+ case 'csaz24341985gr':
+ case 'csiso123csaz24341985gr':
+ case 'isoir123':
+ return 'CSA_Z243.4-1985-gr';
+
+ case 'csiso139csn369103':
+ case 'csn369103':
+ case 'isoir139':
+ return 'CSN_369103';
+
+ case 'csdecmcs':
+ case 'dec':
+ case 'decmcs':
+ return 'DEC-MCS';
+
+ case 'csiso21german':
+ case 'de':
+ case 'din66003':
+ case 'iso646de':
+ case 'isoir21':
+ return 'DIN_66003';
+
+ case 'csdkus':
+ case 'dkus':
+ return 'dk-us';
+
+ case 'csiso646danish':
+ case 'dk':
+ case 'ds2089':
+ case 'iso646dk':
+ return 'DS_2089';
+
+ case 'csibmebcdicatde':
+ case 'ebcdicatde':
+ return 'EBCDIC-AT-DE';
+
+ case 'csebcdicatdea':
+ case 'ebcdicatdea':
+ return 'EBCDIC-AT-DE-A';
+
+ case 'csebcdiccafr':
+ case 'ebcdiccafr':
+ return 'EBCDIC-CA-FR';
+
+ case 'csebcdicdkno':
+ case 'ebcdicdkno':
+ return 'EBCDIC-DK-NO';
+
+ case 'csebcdicdknoa':
+ case 'ebcdicdknoa':
+ return 'EBCDIC-DK-NO-A';
+
+ case 'csebcdices':
+ case 'ebcdices':
+ return 'EBCDIC-ES';
+
+ case 'csebcdicesa':
+ case 'ebcdicesa':
+ return 'EBCDIC-ES-A';
+
+ case 'csebcdicess':
+ case 'ebcdicess':
+ return 'EBCDIC-ES-S';
+
+ case 'csebcdicfise':
+ case 'ebcdicfise':
+ return 'EBCDIC-FI-SE';
+
+ case 'csebcdicfisea':
+ case 'ebcdicfisea':
+ return 'EBCDIC-FI-SE-A';
+
+ case 'csebcdicfr':
+ case 'ebcdicfr':
+ return 'EBCDIC-FR';
+
+ case 'csebcdicit':
+ case 'ebcdicit':
+ return 'EBCDIC-IT';
+
+ case 'csebcdicpt':
+ case 'ebcdicpt':
+ return 'EBCDIC-PT';
+
+ case 'csebcdicuk':
+ case 'ebcdicuk':
+ return 'EBCDIC-UK';
+
+ case 'csebcdicus':
+ case 'ebcdicus':
+ return 'EBCDIC-US';
+
+ case 'csiso111ecmacyrillic':
+ case 'ecmacyrillic':
+ case 'isoir111':
+ case 'koi8e':
+ return 'ECMA-cyrillic';
+
+ case 'csiso17spanish':
+ case 'es':
+ case 'iso646es':
+ case 'isoir17':
+ return 'ES';
+
+ case 'csiso85spanish2':
+ case 'es2':
+ case 'iso646es2':
+ case 'isoir85':
+ return 'ES2';
+
+ case 'cseucpkdfmtjapanese':
+ case 'eucjp':
+ case 'extendedunixcodepackedformatforjapanese':
+ return 'EUC-JP';
+
+ case 'cseucfixwidjapanese':
+ case 'extendedunixcodefixedwidthforjapanese':
+ return 'Extended_UNIX_Code_Fixed_Width_for_Japanese';
+
+ case 'gb18030':
+ return 'GB18030';
+
+ case 'chinese':
+ case 'cp936':
+ case 'csgb2312':
+ case 'csiso58gb231280':
+ case 'gb2312':
+ case 'gb231280':
+ case 'gbk':
+ case 'isoir58':
+ case 'ms936':
+ case 'windows936':
+ return 'GBK';
+
+ case 'cn':
+ case 'csiso57gb1988':
+ case 'gb198880':
+ case 'iso646cn':
+ case 'isoir57':
+ return 'GB_1988-80';
+
+ case 'csiso153gost1976874':
+ case 'gost1976874':
+ case 'isoir153':
+ case 'stsev35888':
+ return 'GOST_19768-74';
+
+ case 'csiso150':
+ case 'csiso150greekccitt':
+ case 'greekccitt':
+ case 'isoir150':
+ return 'greek-ccitt';
+
+ case 'csiso88greek7':
+ case 'greek7':
+ case 'isoir88':
+ return 'greek7';
+
+ case 'csiso18greek7old':
+ case 'greek7old':
+ case 'isoir18':
+ return 'greek7-old';
+
+ case 'cshpdesktop':
+ case 'hpdesktop':
+ return 'HP-DeskTop';
+
+ case 'cshplegal':
+ case 'hplegal':
+ return 'HP-Legal';
+
+ case 'cshpmath8':
+ case 'hpmath8':
+ return 'HP-Math8';
+
+ case 'cshppifont':
+ case 'hppifont':
+ return 'HP-Pi-font';
+
+ case 'cshproman8':
+ case 'hproman8':
+ case 'r8':
+ case 'roman8':
+ return 'hp-roman8';
+
+ case 'hzgb2312':
+ return 'HZ-GB-2312';
+
+ case 'csibmsymbols':
+ case 'ibmsymbols':
+ return 'IBM-Symbols';
+
+ case 'csibmthai':
+ case 'ibmthai':
+ return 'IBM-Thai';
+
+ case 'cp37':
+ case 'csibm37':
+ case 'ebcdiccpca':
+ case 'ebcdiccpnl':
+ case 'ebcdiccpus':
+ case 'ebcdiccpwt':
+ case 'ibm37':
+ return 'IBM037';
+
+ case 'cp38':
+ case 'csibm38':
+ case 'ebcdicint':
+ case 'ibm38':
+ return 'IBM038';
+
+ case 'cp273':
+ case 'csibm273':
+ case 'ibm273':
+ return 'IBM273';
+
+ case 'cp274':
+ case 'csibm274':
+ case 'ebcdicbe':
+ case 'ibm274':
+ return 'IBM274';
+
+ case 'cp275':
+ case 'csibm275':
+ case 'ebcdicbr':
+ case 'ibm275':
+ return 'IBM275';
+
+ case 'csibm277':
+ case 'ebcdiccpdk':
+ case 'ebcdiccpno':
+ case 'ibm277':
+ return 'IBM277';
+
+ case 'cp278':
+ case 'csibm278':
+ case 'ebcdiccpfi':
+ case 'ebcdiccpse':
+ case 'ibm278':
+ return 'IBM278';
+
+ case 'cp280':
+ case 'csibm280':
+ case 'ebcdiccpit':
+ case 'ibm280':
+ return 'IBM280';
+
+ case 'cp281':
+ case 'csibm281':
+ case 'ebcdicjpe':
+ case 'ibm281':
+ return 'IBM281';
+
+ case 'cp284':
+ case 'csibm284':
+ case 'ebcdiccpes':
+ case 'ibm284':
+ return 'IBM284';
+
+ case 'cp285':
+ case 'csibm285':
+ case 'ebcdiccpgb':
+ case 'ibm285':
+ return 'IBM285';
+
+ case 'cp290':
+ case 'csibm290':
+ case 'ebcdicjpkana':
+ case 'ibm290':
+ return 'IBM290';
+
+ case 'cp297':
+ case 'csibm297':
+ case 'ebcdiccpfr':
+ case 'ibm297':
+ return 'IBM297';
+
+ case 'cp420':
+ case 'csibm420':
+ case 'ebcdiccpar1':
+ case 'ibm420':
+ return 'IBM420';
+
+ case 'cp423':
+ case 'csibm423':
+ case 'ebcdiccpgr':
+ case 'ibm423':
+ return 'IBM423';
+
+ case 'cp424':
+ case 'csibm424':
+ case 'ebcdiccphe':
+ case 'ibm424':
+ return 'IBM424';
+
+ case '437':
+ case 'cp437':
+ case 'cspc8codepage437':
+ case 'ibm437':
+ return 'IBM437';
+
+ case 'cp500':
+ case 'csibm500':
+ case 'ebcdiccpbe':
+ case 'ebcdiccpch':
+ case 'ibm500':
+ return 'IBM500';
+
+ case 'cp775':
+ case 'cspc775baltic':
+ case 'ibm775':
+ return 'IBM775';
+
+ case '850':
+ case 'cp850':
+ case 'cspc850multilingual':
+ case 'ibm850':
+ return 'IBM850';
+
+ case '851':
+ case 'cp851':
+ case 'csibm851':
+ case 'ibm851':
+ return 'IBM851';
+
+ case '852':
+ case 'cp852':
+ case 'cspcp852':
+ case 'ibm852':
+ return 'IBM852';
+
+ case '855':
+ case 'cp855':
+ case 'csibm855':
+ case 'ibm855':
+ return 'IBM855';
+
+ case '857':
+ case 'cp857':
+ case 'csibm857':
+ case 'ibm857':
+ return 'IBM857';
+
+ case 'ccsid858':
+ case 'cp858':
+ case 'ibm858':
+ case 'pcmultilingual850euro':
+ return 'IBM00858';
+
+ case '860':
+ case 'cp860':
+ case 'csibm860':
+ case 'ibm860':
+ return 'IBM860';
+
+ case '861':
+ case 'cp861':
+ case 'cpis':
+ case 'csibm861':
+ case 'ibm861':
+ return 'IBM861';
+
+ case '862':
+ case 'cp862':
+ case 'cspc862latinhebrew':
+ case 'ibm862':
+ return 'IBM862';
+
+ case '863':
+ case 'cp863':
+ case 'csibm863':
+ case 'ibm863':
+ return 'IBM863';
+
+ case 'cp864':
+ case 'csibm864':
+ case 'ibm864':
+ return 'IBM864';
+
+ case '865':
+ case 'cp865':
+ case 'csibm865':
+ case 'ibm865':
+ return 'IBM865';
+
+ case '866':
+ case 'cp866':
+ case 'csibm866':
+ case 'ibm866':
+ return 'IBM866';
+
+ case 'cp868':
+ case 'cpar':
+ case 'csibm868':
+ case 'ibm868':
+ return 'IBM868';
+
+ case '869':
+ case 'cp869':
+ case 'cpgr':
+ case 'csibm869':
+ case 'ibm869':
+ return 'IBM869';
+
+ case 'cp870':
+ case 'csibm870':
+ case 'ebcdiccproece':
+ case 'ebcdiccpyu':
+ case 'ibm870':
+ return 'IBM870';
+
+ case 'cp871':
+ case 'csibm871':
+ case 'ebcdiccpis':
+ case 'ibm871':
+ return 'IBM871';
+
+ case 'cp880':
+ case 'csibm880':
+ case 'ebcdiccyrillic':
+ case 'ibm880':
+ return 'IBM880';
+
+ case 'cp891':
+ case 'csibm891':
+ case 'ibm891':
+ return 'IBM891';
+
+ case 'cp903':
+ case 'csibm903':
+ case 'ibm903':
+ return 'IBM903';
+
+ case '904':
+ case 'cp904':
+ case 'csibbm904':
+ case 'ibm904':
+ return 'IBM904';
+
+ case 'cp905':
+ case 'csibm905':
+ case 'ebcdiccptr':
+ case 'ibm905':
+ return 'IBM905';
+
+ case 'cp918':
+ case 'csibm918':
+ case 'ebcdiccpar2':
+ case 'ibm918':
+ return 'IBM918';
+
+ case 'ccsid924':
+ case 'cp924':
+ case 'ebcdiclatin9euro':
+ case 'ibm924':
+ return 'IBM00924';
+
+ case 'cp1026':
+ case 'csibm1026':
+ case 'ibm1026':
+ return 'IBM1026';
+
+ case 'ibm1047':
+ return 'IBM1047';
+
+ case 'ccsid1140':
+ case 'cp1140':
+ case 'ebcdicus37euro':
+ case 'ibm1140':
+ return 'IBM01140';
+
+ case 'ccsid1141':
+ case 'cp1141':
+ case 'ebcdicde273euro':
+ case 'ibm1141':
+ return 'IBM01141';
+
+ case 'ccsid1142':
+ case 'cp1142':
+ case 'ebcdicdk277euro':
+ case 'ebcdicno277euro':
+ case 'ibm1142':
+ return 'IBM01142';
+
+ case 'ccsid1143':
+ case 'cp1143':
+ case 'ebcdicfi278euro':
+ case 'ebcdicse278euro':
+ case 'ibm1143':
+ return 'IBM01143';
+
+ case 'ccsid1144':
+ case 'cp1144':
+ case 'ebcdicit280euro':
+ case 'ibm1144':
+ return 'IBM01144';
+
+ case 'ccsid1145':
+ case 'cp1145':
+ case 'ebcdices284euro':
+ case 'ibm1145':
+ return 'IBM01145';
+
+ case 'ccsid1146':
+ case 'cp1146':
+ case 'ebcdicgb285euro':
+ case 'ibm1146':
+ return 'IBM01146';
+
+ case 'ccsid1147':
+ case 'cp1147':
+ case 'ebcdicfr297euro':
+ case 'ibm1147':
+ return 'IBM01147';
+
+ case 'ccsid1148':
+ case 'cp1148':
+ case 'ebcdicinternational500euro':
+ case 'ibm1148':
+ return 'IBM01148';
+
+ case 'ccsid1149':
+ case 'cp1149':
+ case 'ebcdicis871euro':
+ case 'ibm1149':
+ return 'IBM01149';
+
+ case 'csiso143iecp271':
+ case 'iecp271':
+ case 'isoir143':
+ return 'IEC_P27-1';
+
+ case 'csiso49inis':
+ case 'inis':
+ case 'isoir49':
+ return 'INIS';
+
+ case 'csiso50inis8':
+ case 'inis8':
+ case 'isoir50':
+ return 'INIS-8';
+
+ case 'csiso51iniscyrillic':
+ case 'iniscyrillic':
+ case 'isoir51':
+ return 'INIS-cyrillic';
+
+ case 'csinvariant':
+ case 'invariant':
+ return 'INVARIANT';
+
+ case 'iso2022cn':
+ return 'ISO-2022-CN';
+
+ case 'iso2022cnext':
+ return 'ISO-2022-CN-EXT';
+
+ case 'csiso2022jp':
+ case 'iso2022jp':
+ return 'ISO-2022-JP';
+
+ case 'csiso2022jp2':
+ case 'iso2022jp2':
+ return 'ISO-2022-JP-2';
+
+ case 'csiso2022kr':
+ case 'iso2022kr':
+ return 'ISO-2022-KR';
+
+ case 'cswindows30latin1':
+ case 'iso88591windows30latin1':
+ return 'ISO-8859-1-Windows-3.0-Latin-1';
+
+ case 'cswindows31latin1':
+ case 'iso88591windows31latin1':
+ return 'ISO-8859-1-Windows-3.1-Latin-1';
+
+ case 'csisolatin2':
+ case 'iso88592':
+ case 'iso885921987':
+ case 'isoir101':
+ case 'l2':
+ case 'latin2':
+ return 'ISO-8859-2';
+
+ case 'cswindows31latin2':
+ case 'iso88592windowslatin2':
+ return 'ISO-8859-2-Windows-Latin-2';
+
+ case 'csisolatin3':
+ case 'iso88593':
+ case 'iso885931988':
+ case 'isoir109':
+ case 'l3':
+ case 'latin3':
+ return 'ISO-8859-3';
+
+ case 'csisolatin4':
+ case 'iso88594':
+ case 'iso885941988':
+ case 'isoir110':
+ case 'l4':
+ case 'latin4':
+ return 'ISO-8859-4';
+
+ case 'csisolatincyrillic':
+ case 'cyrillic':
+ case 'iso88595':
+ case 'iso885951988':
+ case 'isoir144':
+ return 'ISO-8859-5';
+
+ case 'arabic':
+ case 'asmo708':
+ case 'csisolatinarabic':
+ case 'ecma114':
+ case 'iso88596':
+ case 'iso885961987':
+ case 'isoir127':
+ return 'ISO-8859-6';
+
+ case 'csiso88596e':
+ case 'iso88596e':
+ return 'ISO-8859-6-E';
+
+ case 'csiso88596i':
+ case 'iso88596i':
+ return 'ISO-8859-6-I';
+
+ case 'csisolatingreek':
+ case 'ecma118':
+ case 'elot928':
+ case 'greek':
+ case 'greek8':
+ case 'iso88597':
+ case 'iso885971987':
+ case 'isoir126':
+ return 'ISO-8859-7';
+
+ case 'csisolatinhebrew':
+ case 'hebrew':
+ case 'iso88598':
+ case 'iso885981988':
+ case 'isoir138':
+ return 'ISO-8859-8';
+
+ case 'csiso88598e':
+ case 'iso88598e':
+ return 'ISO-8859-8-E';
+
+ case 'csiso88598i':
+ case 'iso88598i':
+ return 'ISO-8859-8-I';
+
+ case 'cswindows31latin5':
+ case 'iso88599windowslatin5':
+ return 'ISO-8859-9-Windows-Latin-5';
+
+ case 'csisolatin6':
+ case 'iso885910':
+ case 'iso8859101992':
+ case 'isoir157':
+ case 'l6':
+ case 'latin6':
+ return 'ISO-8859-10';
+
+ case 'iso885913':
+ return 'ISO-8859-13';
+
+ case 'iso885914':
+ case 'iso8859141998':
+ case 'isoceltic':
+ case 'isoir199':
+ case 'l8':
+ case 'latin8':
+ return 'ISO-8859-14';
+
+ case 'iso885915':
+ case 'latin9':
+ return 'ISO-8859-15';
+
+ case 'iso885916':
+ case 'iso8859162001':
+ case 'isoir226':
+ case 'l10':
+ case 'latin10':
+ return 'ISO-8859-16';
+
+ case 'iso10646j1':
+ return 'ISO-10646-J-1';
+
+ case 'csunicode':
+ case 'iso10646ucs2':
+ return 'ISO-10646-UCS-2';
+
+ case 'csucs4':
+ case 'iso10646ucs4':
+ return 'ISO-10646-UCS-4';
+
+ case 'csunicodeascii':
+ case 'iso10646ucsbasic':
+ return 'ISO-10646-UCS-Basic';
+
+ case 'csunicodelatin1':
+ case 'iso10646':
+ case 'iso10646unicodelatin1':
+ return 'ISO-10646-Unicode-Latin1';
+
+ case 'csiso10646utf1':
+ case 'iso10646utf1':
+ return 'ISO-10646-UTF-1';
+
+ case 'csiso115481':
+ case 'iso115481':
+ case 'isotr115481':
+ return 'ISO-11548-1';
+
+ case 'csiso90':
+ case 'isoir90':
+ return 'iso-ir-90';
+
+ case 'csunicodeibm1261':
+ case 'isounicodeibm1261':
+ return 'ISO-Unicode-IBM-1261';
+
+ case 'csunicodeibm1264':
+ case 'isounicodeibm1264':
+ return 'ISO-Unicode-IBM-1264';
+
+ case 'csunicodeibm1265':
+ case 'isounicodeibm1265':
+ return 'ISO-Unicode-IBM-1265';
+
+ case 'csunicodeibm1268':
+ case 'isounicodeibm1268':
+ return 'ISO-Unicode-IBM-1268';
+
+ case 'csunicodeibm1276':
+ case 'isounicodeibm1276':
+ return 'ISO-Unicode-IBM-1276';
+
+ case 'csiso646basic1983':
+ case 'iso646basic1983':
+ case 'ref':
+ return 'ISO_646.basic:1983';
+
+ case 'csiso2intlrefversion':
+ case 'irv':
+ case 'iso646irv1983':
+ case 'isoir2':
+ return 'ISO_646.irv:1983';
+
+ case 'csiso2033':
+ case 'e13b':
+ case 'iso20331983':
+ case 'isoir98':
+ return 'ISO_2033-1983';
+
+ case 'csiso5427cyrillic':
+ case 'iso5427':
+ case 'isoir37':
+ return 'ISO_5427';
+
+ case 'iso5427cyrillic1981':
+ case 'iso54271981':
+ case 'isoir54':
+ return 'ISO_5427:1981';
+
+ case 'csiso5428greek':
+ case 'iso54281980':
+ case 'isoir55':
+ return 'ISO_5428:1980';
+
+ case 'csiso6937add':
+ case 'iso6937225':
+ case 'isoir152':
+ return 'ISO_6937-2-25';
+
+ case 'csisotextcomm':
+ case 'iso69372add':
+ case 'isoir142':
+ return 'ISO_6937-2-add';
+
+ case 'csiso8859supp':
+ case 'iso8859supp':
+ case 'isoir154':
+ case 'latin125':
+ return 'ISO_8859-supp';
+
+ case 'csiso10367box':
+ case 'iso10367box':
+ case 'isoir155':
+ return 'ISO_10367-box';
+
+ case 'csiso15italian':
+ case 'iso646it':
+ case 'isoir15':
+ case 'it':
+ return 'IT';
+
+ case 'csiso13jisc6220jp':
+ case 'isoir13':
+ case 'jisc62201969':
+ case 'jisc62201969jp':
+ case 'katakana':
+ case 'x2017':
+ return 'JIS_C6220-1969-jp';
+
+ case 'csiso14jisc6220ro':
+ case 'iso646jp':
+ case 'isoir14':
+ case 'jisc62201969ro':
+ case 'jp':
+ return 'JIS_C6220-1969-ro';
+
+ case 'csiso42jisc62261978':
+ case 'isoir42':
+ case 'jisc62261978':
+ return 'JIS_C6226-1978';
+
+ case 'csiso87jisx208':
+ case 'isoir87':
+ case 'jisc62261983':
+ case 'jisx2081983':
+ case 'x208':
+ return 'JIS_C6226-1983';
+
+ case 'csiso91jisc62291984a':
+ case 'isoir91':
+ case 'jisc62291984a':
+ case 'jpocra':
+ return 'JIS_C6229-1984-a';
+
+ case 'csiso92jisc62991984b':
+ case 'iso646jpocrb':
+ case 'isoir92':
+ case 'jisc62291984b':
+ case 'jpocrb':
+ return 'JIS_C6229-1984-b';
+
+ case 'csiso93jis62291984badd':
+ case 'isoir93':
+ case 'jisc62291984badd':
+ case 'jpocrbadd':
+ return 'JIS_C6229-1984-b-add';
+
+ case 'csiso94jis62291984hand':
+ case 'isoir94':
+ case 'jisc62291984hand':
+ case 'jpocrhand':
+ return 'JIS_C6229-1984-hand';
+
+ case 'csiso95jis62291984handadd':
+ case 'isoir95':
+ case 'jisc62291984handadd':
+ case 'jpocrhandadd':
+ return 'JIS_C6229-1984-hand-add';
+
+ case 'csiso96jisc62291984kana':
+ case 'isoir96':
+ case 'jisc62291984kana':
+ return 'JIS_C6229-1984-kana';
+
+ case 'csjisencoding':
+ case 'jisencoding':
+ return 'JIS_Encoding';
+
+ case 'cshalfwidthkatakana':
+ case 'jisx201':
+ case 'x201':
+ return 'JIS_X0201';
+
+ case 'csiso159jisx2121990':
+ case 'isoir159':
+ case 'jisx2121990':
+ case 'x212':
+ return 'JIS_X0212-1990';
+
+ case 'csiso141jusib1002':
+ case 'iso646yu':
+ case 'isoir141':
+ case 'js':
+ case 'jusib1002':
+ case 'yu':
+ return 'JUS_I.B1.002';
+
+ case 'csiso147macedonian':
+ case 'isoir147':
+ case 'jusib1003mac':
+ case 'macedonian':
+ return 'JUS_I.B1.003-mac';
+
+ case 'csiso146serbian':
+ case 'isoir146':
+ case 'jusib1003serb':
+ case 'serbian':
+ return 'JUS_I.B1.003-serb';
+
+ case 'koi7switched':
+ return 'KOI7-switched';
+
+ case 'cskoi8r':
+ case 'koi8r':
+ return 'KOI8-R';
+
+ case 'koi8u':
+ return 'KOI8-U';
+
+ case 'csksc5636':
+ case 'iso646kr':
+ case 'ksc5636':
+ return 'KSC5636';
+
+ case 'cskz1048':
+ case 'kz1048':
+ case 'rk1048':
+ case 'strk10482002':
+ return 'KZ-1048';
+
+ case 'csiso19latingreek':
+ case 'isoir19':
+ case 'latingreek':
+ return 'latin-greek';
+
+ case 'csiso27latingreek1':
+ case 'isoir27':
+ case 'latingreek1':
+ return 'Latin-greek-1';
+
+ case 'csiso158lap':
+ case 'isoir158':
+ case 'lap':
+ case 'latinlap':
+ return 'latin-lap';
+
+ case 'csmacintosh':
+ case 'mac':
+ case 'macintosh':
+ return 'macintosh';
+
+ case 'csmicrosoftpublishing':
+ case 'microsoftpublishing':
+ return 'Microsoft-Publishing';
+
+ case 'csmnem':
+ case 'mnem':
+ return 'MNEM';
+
+ case 'csmnemonic':
+ case 'mnemonic':
+ return 'MNEMONIC';
+
+ case 'csiso86hungarian':
+ case 'hu':
+ case 'iso646hu':
+ case 'isoir86':
+ case 'msz77953':
+ return 'MSZ_7795.3';
+
+ case 'csnatsdano':
+ case 'isoir91':
+ case 'natsdano':
+ return 'NATS-DANO';
+
+ case 'csnatsdanoadd':
+ case 'isoir92':
+ case 'natsdanoadd':
+ return 'NATS-DANO-ADD';
+
+ case 'csnatssefi':
+ case 'isoir81':
+ case 'natssefi':
+ return 'NATS-SEFI';
+
+ case 'csnatssefiadd':
+ case 'isoir82':
+ case 'natssefiadd':
+ return 'NATS-SEFI-ADD';
+
+ case 'csiso151cuba':
+ case 'cuba':
+ case 'iso646cu':
+ case 'isoir151':
+ case 'ncnc1081':
+ return 'NC_NC00-10:81';
+
+ case 'csiso69french':
+ case 'fr':
+ case 'iso646fr':
+ case 'isoir69':
+ case 'nfz62010':
+ return 'NF_Z_62-010';
+
+ case 'csiso25french':
+ case 'iso646fr1':
+ case 'isoir25':
+ case 'nfz620101973':
+ return 'NF_Z_62-010_(1973)';
+
+ case 'csiso60danishnorwegian':
+ case 'csiso60norwegian1':
+ case 'iso646no':
+ case 'isoir60':
+ case 'no':
+ case 'ns45511':
+ return 'NS_4551-1';
+
+ case 'csiso61norwegian2':
+ case 'iso646no2':
+ case 'isoir61':
+ case 'no2':
+ case 'ns45512':
+ return 'NS_4551-2';
+
+ case 'osdebcdicdf3irv':
+ return 'OSD_EBCDIC_DF03_IRV';
+
+ case 'osdebcdicdf41':
+ return 'OSD_EBCDIC_DF04_1';
+
+ case 'osdebcdicdf415':
+ return 'OSD_EBCDIC_DF04_15';
+
+ case 'cspc8danishnorwegian':
+ case 'pc8danishnorwegian':
+ return 'PC8-Danish-Norwegian';
+
+ case 'cspc8turkish':
+ case 'pc8turkish':
+ return 'PC8-Turkish';
+
+ case 'csiso16portuguese':
+ case 'iso646pt':
+ case 'isoir16':
+ case 'pt':
+ return 'PT';
+
+ case 'csiso84portuguese2':
+ case 'iso646pt2':
+ case 'isoir84':
+ case 'pt2':
+ return 'PT2';
+
+ case 'cp154':
+ case 'csptcp154':
+ case 'cyrillicasian':
+ case 'pt154':
+ case 'ptcp154':
+ return 'PTCP154';
+
+ case 'scsu':
+ return 'SCSU';
+
+ case 'csiso10swedish':
+ case 'fi':
+ case 'iso646fi':
+ case 'iso646se':
+ case 'isoir10':
+ case 'se':
+ case 'sen850200b':
+ return 'SEN_850200_B';
+
+ case 'csiso11swedishfornames':
+ case 'iso646se2':
+ case 'isoir11':
+ case 'se2':
+ case 'sen850200c':
+ return 'SEN_850200_C';
+
+ case 'csiso102t617bit':
+ case 'isoir102':
+ case 't617bit':
+ return 'T.61-7bit';
+
+ case 'csiso103t618bit':
+ case 'isoir103':
+ case 't61':
+ case 't618bit':
+ return 'T.61-8bit';
+
+ case 'csiso128t101g2':
+ case 'isoir128':
+ case 't101g2':
+ return 'T.101-G2';
+
+ case 'cstscii':
+ case 'tscii':
+ return 'TSCII';
+
+ case 'csunicode11':
+ case 'unicode11':
+ return 'UNICODE-1-1';
+
+ case 'csunicode11utf7':
+ case 'unicode11utf7':
+ return 'UNICODE-1-1-UTF-7';
+
+ case 'csunknown8bit':
+ case 'unknown8bit':
+ return 'UNKNOWN-8BIT';
+
+ case 'ansix341968':
+ case 'ansix341986':
+ case 'ascii':
+ case 'cp367':
+ case 'csascii':
+ case 'ibm367':
+ case 'iso646irv1991':
+ case 'iso646us':
+ case 'isoir6':
+ case 'us':
+ case 'usascii':
+ return 'US-ASCII';
+
+ case 'csusdk':
+ case 'usdk':
+ return 'us-dk';
+
+ case 'utf7':
+ return 'UTF-7';
+
+ case 'utf8':
+ return 'UTF-8';
+
+ case 'utf16':
+ return 'UTF-16';
+
+ case 'utf16be':
+ return 'UTF-16BE';
+
+ case 'utf16le':
+ return 'UTF-16LE';
+
+ case 'utf32':
+ return 'UTF-32';
+
+ case 'utf32be':
+ return 'UTF-32BE';
+
+ case 'utf32le':
+ return 'UTF-32LE';
+
+ case 'csventurainternational':
+ case 'venturainternational':
+ return 'Ventura-International';
+
+ case 'csventuramath':
+ case 'venturamath':
+ return 'Ventura-Math';
+
+ case 'csventuraus':
+ case 'venturaus':
+ return 'Ventura-US';
+
+ case 'csiso70videotexsupp1':
+ case 'isoir70':
+ case 'videotexsuppl':
+ return 'videotex-suppl';
+
+ case 'csviqr':
+ case 'viqr':
+ return 'VIQR';
+
+ case 'csviscii':
+ case 'viscii':
+ return 'VISCII';
+
+ case 'csshiftjis':
+ case 'cswindows31j':
+ case 'mskanji':
+ case 'shiftjis':
+ case 'windows31j':
+ return 'Windows-31J';
+
+ case 'iso885911':
+ case 'tis620':
+ return 'windows-874';
+
+ case 'cseuckr':
+ case 'csksc56011987':
+ case 'euckr':
+ case 'isoir149':
+ case 'korean':
+ case 'ksc5601':
+ case 'ksc56011987':
+ case 'ksc56011989':
+ case 'windows949':
+ return 'windows-949';
+
+ case 'windows1250':
+ return 'windows-1250';
+
+ case 'windows1251':
+ return 'windows-1251';
+
+ case 'cp819':
+ case 'csisolatin1':
+ case 'ibm819':
+ case 'iso88591':
+ case 'iso885911987':
+ case 'isoir100':
+ case 'l1':
+ case 'latin1':
+ case 'windows1252':
+ return 'windows-1252';
+
+ case 'windows1253':
+ return 'windows-1253';
+
+ case 'csisolatin5':
+ case 'iso88599':
+ case 'iso885991989':
+ case 'isoir148':
+ case 'l5':
+ case 'latin5':
+ case 'windows1254':
+ return 'windows-1254';
+
+ case 'windows1255':
+ return 'windows-1255';
+
+ case 'windows1256':
+ return 'windows-1256';
+
+ case 'windows1257':
+ return 'windows-1257';
+
+ case 'windows1258':
+ return 'windows-1258';
+
+ default:
+ return $charset;
+ }
+ }
+
+ function get_curl_version()
+ {
+ if (is_array($curl = curl_version()))
+ {
+ $curl = $curl['version'];
+ }
+ elseif (substr($curl, 0, 5) === 'curl/')
+ {
+ $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5));
+ }
+ elseif (substr($curl, 0, 8) === 'libcurl/')
+ {
+ $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8));
+ }
+ else
+ {
+ $curl = 0;
+ }
+ return $curl;
+ }
+
+ function is_subclass_of($class1, $class2)
+ {
+ if (func_num_args() !== 2)
+ {
+ trigger_error('Wrong parameter count for SimplePie_Misc::is_subclass_of()', E_USER_WARNING);
+ }
+ elseif (version_compare(PHP_VERSION, '5.0.3', '>=') || is_object($class1))
+ {
+ return is_subclass_of($class1, $class2);
+ }
+ elseif (is_string($class1) && is_string($class2))
+ {
+ if (class_exists($class1))
+ {
+ if (class_exists($class2))
+ {
+ $class2 = strtolower($class2);
+ while ($class1 = strtolower(get_parent_class($class1)))
+ {
+ if ($class1 === $class2)
+ {
+ return true;
+ }
+ }
+ }
+ }
+ else
+ {
+ trigger_error('Unknown class passed as parameter', E_USER_WARNNG);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Strip HTML comments
+ *
+ * @access public
+ * @param string $data Data to strip comments from
+ * @return string Comment stripped string
+ */
+ function strip_comments($data)
+ {
+ $output = '';
+ while (($start = strpos($data, '<!--')) !== false)
+ {
+ $output .= substr($data, 0, $start);
+ if (($end = strpos($data, '-->', $start)) !== false)
+ {
+ $data = substr_replace($data, '', 0, $end + 3);
+ }
+ else
+ {
+ $data = '';
+ }
+ }
+ return $output . $data;
+ }
+
+ function parse_date($dt)
+ {
+ $parser = SimplePie_Parse_Date::get();
+ return $parser->parse($dt);
+ }
+
+ /**
+ * Decode HTML entities
+ *
+ * @static
+ * @access public
+ * @param string $data Input data
+ * @return string Output data
+ */
+ function entities_decode($data)
+ {
+ $decoder =& new SimplePie_Decode_HTML_Entities($data);
+ return $decoder->parse();
+ }
+
+ /**
+ * Remove RFC822 comments
+ *
+ * @access public
+ * @param string $data Data to strip comments from
+ * @return string Comment stripped string
+ */
+ function uncomment_rfc822($string)
+ {
+ $string = (string) $string;
+ $position = 0;
+ $length = strlen($string);
+ $depth = 0;
+
+ $output = '';
+
+ while ($position < $length && ($pos = strpos($string, '(', $position)) !== false)
+ {
+ $output .= substr($string, $position, $pos - $position);
+ $position = $pos + 1;
+ if ($string[$pos - 1] !== '\\')
+ {
+ $depth++;
+ while ($depth && $position < $length)
+ {
+ $position += strcspn($string, '()', $position);
+ if ($string[$position - 1] === '\\')
+ {
+ $position++;
+ continue;
+ }
+ elseif (isset($string[$position]))
+ {
+ switch ($string[$position])
+ {
+ case '(':
+ $depth++;
+ break;
+
+ case ')':
+ $depth--;
+ break;
+ }
+ $position++;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+ else
+ {
+ $output .= '(';
+ }
+ }
+ $output .= substr($string, $position);
+
+ return $output;
+ }
+
+ function parse_mime($mime)
+ {
+ if (($pos = strpos($mime, ';')) === false)
+ {
+ return trim($mime);
+ }
+ else
+ {
+ return trim(substr($mime, 0, $pos));
+ }
+ }
+
+ function htmlspecialchars_decode($string, $quote_style)
+ {
+ if (function_exists('htmlspecialchars_decode'))
+ {
+ return htmlspecialchars_decode($string, $quote_style);
+ }
+ else
+ {
+ return strtr($string, array_flip(get_html_translation_table(HTML_SPECIALCHARS, $quote_style)));
+ }
+ }
+
+ function atom_03_construct_type($attribs)
+ {
+ if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) === 'base64'))
+ {
+ $mode = SIMPLEPIE_CONSTRUCT_BASE64;
+ }
+ else
+ {
+ $mode = SIMPLEPIE_CONSTRUCT_NONE;
+ }
+ if (isset($attribs['']['type']))
+ {
+ switch (strtolower(trim($attribs['']['type'])))
+ {
+ case 'text':
+ case 'text/plain':
+ return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
+
+ case 'html':
+ case 'text/html':
+ return SIMPLEPIE_CONSTRUCT_HTML | $mode;
+
+ case 'xhtml':
+ case 'application/xhtml+xml':
+ return SIMPLEPIE_CONSTRUCT_XHTML | $mode;
+
+ default:
+ return SIMPLEPIE_CONSTRUCT_NONE | $mode;
+ }
+ }
+ else
+ {
+ return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
+ }
+ }
+
+ function atom_10_construct_type($attribs)
+ {
+ if (isset($attribs['']['type']))
+ {
+ switch (strtolower(trim($attribs['']['type'])))
+ {
+ case 'text':
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+
+ case 'html':
+ return SIMPLEPIE_CONSTRUCT_HTML;
+
+ case 'xhtml':
+ return SIMPLEPIE_CONSTRUCT_XHTML;
+
+ default:
+ return SIMPLEPIE_CONSTRUCT_NONE;
+ }
+ }
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+ }
+
+ function atom_10_content_construct_type($attribs)
+ {
+ if (isset($attribs['']['type']))
+ {
+ $type = strtolower(trim($attribs['']['type']));
+ switch ($type)
+ {
+ case 'text':
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+
+ case 'html':
+ return SIMPLEPIE_CONSTRUCT_HTML;
+
+ case 'xhtml':
+ return SIMPLEPIE_CONSTRUCT_XHTML;
+ }
+ if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) === 'text/')
+ {
+ return SIMPLEPIE_CONSTRUCT_NONE;
+ }
+ else
+ {
+ return SIMPLEPIE_CONSTRUCT_BASE64;
+ }
+ }
+ else
+ {
+ return SIMPLEPIE_CONSTRUCT_TEXT;
+ }
+ }
+
+ function is_isegment_nz_nc($string)
+ {
+ return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string);
+ }
+
+ function space_seperated_tokens($string)
+ {
+ $space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
+ $string_length = strlen($string);
+
+ $position = strspn($string, $space_characters);
+ $tokens = array();
+
+ while ($position < $string_length)
+ {
+ $len = strcspn($string, $space_characters, $position);
+ $tokens[] = substr($string, $position, $len);
+ $position += $len;
+ $position += strspn($string, $space_characters, $position);
+ }
+
+ return $tokens;
+ }
+
+ function array_unique($array)
+ {
+ if (version_compare(PHP_VERSION, '5.2', '>='))
+ {
+ return array_unique($array);
+ }
+ else
+ {
+ $array = (array) $array;
+ $new_array = array();
+ $new_array_strings = array();
+ foreach ($array as $key => $value)
+ {
+ if (is_object($value))
+ {
+ if (method_exists($value, '__toString'))
+ {
+ $cmp = $value->__toString();
+ }
+ else
+ {
+ trigger_error('Object of class ' . get_class($value) . ' could not be converted to string', E_USER_ERROR);
+ }
+ }
+ elseif (is_array($value))
+ {
+ $cmp = (string) reset($value);
+ }
+ else
+ {
+ $cmp = (string) $value;
+ }
+ if (!in_array($cmp, $new_array_strings))
+ {
+ $new_array[$key] = $value;
+ $new_array_strings[] = $cmp;
+ }
+ }
+ return $new_array;
+ }
+ }
+
+ /**
+ * Converts a unicode codepoint to a UTF-8 character
+ *
+ * @static
+ * @access public
+ * @param int $codepoint Unicode codepoint
+ * @return string UTF-8 character
+ */
+ function codepoint_to_utf8($codepoint)
+ {
+ $codepoint = (int) $codepoint;
+ if ($codepoint < 0)
+ {
+ return false;
+ }
+ else if ($codepoint <= 0x7f)
+ {
+ return chr($codepoint);
+ }
+ else if ($codepoint <= 0x7ff)
+ {
+ return chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f));
+ }
+ else if ($codepoint <= 0xffff)
+ {
+ return chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
+ }
+ else if ($codepoint <= 0x10ffff)
+ {
+ return chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
+ }
+ else
+ {
+ // U+FFFD REPLACEMENT CHARACTER
+ return "\xEF\xBF\xBD";
+ }
+ }
+
+ /**
+ * Re-implementation of PHP 5's stripos()
+ *
+ * Returns the numeric position of the first occurrence of needle in the
+ * haystack string.
+ *
+ * @static
+ * @access string
+ * @param object $haystack
+ * @param string $needle Note that the needle may be a string of one or more
+ * characters. If needle is not a string, it is converted to an integer
+ * and applied as the ordinal value of a character.
+ * @param int $offset The optional offset parameter allows you to specify which
+ * character in haystack to start searching. The position returned is still
+ * relative to the beginning of haystack.
+ * @return bool If needle is not found, stripos() will return boolean false.
+ */
+ function stripos($haystack, $needle, $offset = 0)
+ {
+ if (function_exists('stripos'))
+ {
+ return stripos($haystack, $needle, $offset);
+ }
+ else
+ {
+ if (is_string($needle))
+ {
+ $needle = strtolower($needle);
+ }
+ elseif (is_int($needle) || is_bool($needle) || is_double($needle))
+ {
+ $needle = strtolower(chr($needle));
+ }
+ else
+ {
+ trigger_error('needle is not a string or an integer', E_USER_WARNING);
+ return false;
+ }
+
+ return strpos(strtolower($haystack), $needle, $offset);
+ }
+ }
+
+ /**
+ * Similar to parse_str()
+ *
+ * Returns an associative array of name/value pairs, where the value is an
+ * array of values that have used the same name
+ *
+ * @static
+ * @access string
+ * @param string $str The input string.
+ * @return array
+ */
+ function parse_str($str)
+ {
+ $return = array();
+ $str = explode('&', $str);
+
+ foreach ($str as $section)
+ {
+ if (strpos($section, '=') !== false)
+ {
+ list($name, $value) = explode('=', $section, 2);
+ $return[urldecode($name)][] = urldecode($value);
+ }
+ else
+ {
+ $return[urldecode($section)][] = null;
+ }
+ }
+
+ return $return;
+ }
+
+ /**
+ * Detect XML encoding, as per XML 1.0 Appendix F.1
+ *
+ * @todo Add support for EBCDIC
+ * @param string $data XML data
+ * @return array Possible encodings
+ */
+ function xml_encoding($data)
+ {
+ // UTF-32 Big Endian BOM
+ if (substr($data, 0, 4) === "\x00\x00\xFE\xFF")
+ {
+ $encoding[] = 'UTF-32BE';
+ }
+ // UTF-32 Little Endian BOM
+ elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00")
+ {
+ $encoding[] = 'UTF-32LE';
+ }
+ // UTF-16 Big Endian BOM
+ elseif (substr($data, 0, 2) === "\xFE\xFF")
+ {
+ $encoding[] = 'UTF-16BE';
+ }
+ // UTF-16 Little Endian BOM
+ elseif (substr($data, 0, 2) === "\xFF\xFE")
+ {
+ $encoding[] = 'UTF-16LE';
+ }
+ // UTF-8 BOM
+ elseif (substr($data, 0, 3) === "\xEF\xBB\xBF")
+ {
+ $encoding[] = 'UTF-8';
+ }
+ // UTF-32 Big Endian Without BOM
+ elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C")
+ {
+ if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E"))
+ {
+ $parser =& new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8'));
+ if ($parser->parse())
+ {
+ $encoding[] = $parser->encoding;
+ }
+ }
+ $encoding[] = 'UTF-32BE';
+ }
+ // UTF-32 Little Endian Without BOM
+ elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00")
+ {
+ if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00"))
+ {
+ $parser =& new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8'));
+ if ($parser->parse())
+ {
+ $encoding[] = $parser->encoding;
+ }
+ }
+ $encoding[] = 'UTF-32LE';
+ }
+ // UTF-16 Big Endian Without BOM
+ elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C")
+ {
+ if ($pos = strpos($data, "\x00\x3F\x00\x3E"))
+ {
+ $parser =& new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8'));
+ if ($parser->parse())
+ {
+ $encoding[] = $parser->encoding;
+ }
+ }
+ $encoding[] = 'UTF-16BE';
+ }
+ // UTF-16 Little Endian Without BOM
+ elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00")
+ {
+ if ($pos = strpos($data, "\x3F\x00\x3E\x00"))
+ {
+ $parser =& new SimplePie_XML_Declaration_Parser(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8'));
+ if ($parser->parse())
+ {
+ $encoding[] = $parser->encoding;
+ }
+ }
+ $encoding[] = 'UTF-16LE';
+ }
+ // US-ASCII (or superset)
+ elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C")
+ {
+ if ($pos = strpos($data, "\x3F\x3E"))
+ {
+ $parser =& new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5));
+ if ($parser->parse())
+ {
+ $encoding[] = $parser->encoding;
+ }
+ }
+ $encoding[] = 'UTF-8';
+ }
+ // Fallback to UTF-8
+ else
+ {
+ $encoding[] = 'UTF-8';
+ }
+ return $encoding;
+ }
+
+ function output_javascript()
+ {
+ if (function_exists('ob_gzhandler'))
+ {
+ ob_start('ob_gzhandler');
+ }
+ header('Content-type: text/javascript; charset: UTF-8');
+ header('Cache-Control: must-revalidate');
+ header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
+ ?>
+function embed_odeo(link) {
+ document.writeln('<embed src="http://odeo.com/flash/audio_player_fullsize.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="440" height="80" wmode="transparent" allowScriptAccess="any" flashvars="valid_sample_rate=true&external_url='+link+'"></embed>');
+}
+
+function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
+ if (placeholder != '') {
+ document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+ }
+ else {
+ document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
+ }
+}
+
+function embed_flash(bgcolor, width, height, link, loop, type) {
+ document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>');
+}
+
+function embed_flv(width, height, link, placeholder, loop, player) {
+ document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>');
+}
+
+function embed_wmedia(width, height, link) {
+ document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>');
+}
+ <?php
+ }
+
+
+
+ /**
+ * Format debugging information
+ */
+ function debug($sp)
+ {
+ $info = 'SimplePie ' . SIMPLEPIE_VERSION . ' Build ' . SIMPLEPIE_BUILD . "\n";
+ $info .= 'PHP ' . PHP_VERSION . "\n";
+ if ($sp->error() !== null)
+ {
+ $info .= 'Error occurred: ' . $sp->error() . "\n";
+ }
+ else
+ {
+ $info .= "No error found.\n";
+ }
+ $info .= "Extensions:\n";
+ $extensions = array('pcre', 'curl', 'zlib', 'mbstring', 'iconv', 'xmlreader', 'xml');
+ foreach ($extensions as $ext)
+ {
+ if (extension_loaded($ext))
+ {
+ $info .= " $ext loaded\n";
+ switch ($ext)
+ {
+ case 'pcre':
+ $info .= ' Version ' . PCRE_VERSION . "\n";
+ break;
+ case 'curl':
+ $version = curl_version();
+ $info .= ' Version ' . $version['version'] . "\n";
+ break;
+ case 'mbstring':
+ $info .= ' Overloading: ' . mb_get_info('func_overload') . "\n";
+ break;
+ case 'iconv':
+ $info .= ' Version ' . ICONV_VERSION . "\n";
+ break;
+ case 'xml':
+ $info .= ' Version ' . LIBXML_DOTTED_VERSION . "\n";
+ break;
+ }
+ }
+ else
+ {
+ $info .= " $ext not loaded\n";
+ }
+ }
+ return $info;
+ }
+}
+
+/**
+ * Decode HTML Entities
+ *
+ * This implements HTML5 as of revision 967 (2007-06-28)
+ *
+ * @package SimplePie
+ */
+class SimplePie_Decode_HTML_Entities
+{
+ /**
+ * Data to be parsed
+ *
+ * @access private
+ * @var string
+ */
+ var $data = '';
+
+ /**
+ * Currently consumed bytes
+ *
+ * @access private
+ * @var string
+ */
+ var $consumed = '';
+
+ /**
+ * Position of the current byte being parsed
+ *
+ * @access private
+ * @var int
+ */
+ var $position = 0;
+
+ /**
+ * Create an instance of the class with the input data
+ *
+ * @access public
+ * @param string $data Input data
+ */
+ function SimplePie_Decode_HTML_Entities($data)
+ {
+ $this->data = $data;
+ }
+
+ /**
+ * Parse the input data
+ *
+ * @access public
+ * @return string Output data
+ */
+ function parse()
+ {
+ while (($this->position = strpos($this->data, '&', $this->position)) !== false)
+ {
+ $this->consume();
+ $this->entity();
+ $this->consumed = '';
+ }
+ return $this->data;
+ }
+
+ /**
+ * Consume the next byte
+ *
+ * @access private
+ * @return mixed The next byte, or false, if there is no more data
+ */
+ function consume()
+ {
+ if (isset($this->data[$this->position]))
+ {
+ $this->consumed .= $this->data[$this->position];
+ return $this->data[$this->position++];
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Consume a range of characters
+ *
+ * @access private
+ * @param string $chars Characters to consume
+ * @return mixed A series of characters that match the range, or false
+ */
+ function consume_range($chars)
+ {
+ if ($len = strspn($this->data, $chars, $this->position))
+ {
+ $data = substr($this->data, $this->position, $len);
+ $this->consumed .= $data;
+ $this->position += $len;
+ return $data;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Unconsume one byte
+ *
+ * @access private
+ */
+ function unconsume()
+ {
+ $this->consumed = substr($this->consumed, 0, -1);
+ $this->position--;
+ }
+
+ /**
+ * Decode an entity
+ *
+ * @access private
+ */
+ function entity()
+ {
+ switch ($this->consume())
+ {
+ case "\x09":
+ case "\x0A":
+ case "\x0B":
+ case "\x0B":
+ case "\x0C":
+ case "\x20":
+ case "\x3C":
+ case "\x26":
+ case false:
+ break;
+
+ case "\x23":
+ switch ($this->consume())
+ {
+ case "\x78":
+ case "\x58":
+ $range = '0123456789ABCDEFabcdef';
+ $hex = true;
+ break;
+
+ default:
+ $range = '0123456789';
+ $hex = false;
+ $this->unconsume();
+ break;
+ }
+
+ if ($codepoint = $this->consume_range($range))
+ {
+ static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8");
+
+ if ($hex)
+ {
+ $codepoint = hexdec($codepoint);
+ }
+ else
+ {
+ $codepoint = intval($codepoint);
+ }
+
+ if (isset($windows_1252_specials[$codepoint]))
+ {
+ $replacement = $windows_1252_specials[$codepoint];
+ }
+ else
+ {
+ $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint);
+ }
+
+ if (!in_array($this->consume(), array(';', false), true))
+ {
+ $this->unconsume();
+ }
+
+ $consumed_length = strlen($this->consumed);
+ $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length);
+ $this->position += strlen($replacement) - $consumed_length;
+ }
+ break;
+
+ default:
+ static $entities = array('Aacute' => "\xC3\x81", 'aacute' => "\xC3\xA1", 'Aacute;' => "\xC3\x81", 'aacute;' => "\xC3\xA1", 'Acirc' => "\xC3\x82", 'acirc' => "\xC3\xA2", 'Acirc;' => "\xC3\x82", 'acirc;' => "\xC3\xA2", 'acute' => "\xC2\xB4", 'acute;' => "\xC2\xB4", 'AElig' => "\xC3\x86", 'aelig' => "\xC3\xA6", 'AElig;' => "\xC3\x86", 'aelig;' => "\xC3\xA6", 'Agrave' => "\xC3\x80", 'agrave' => "\xC3\xA0", 'Agrave;' => "\xC3\x80", 'agrave;' => "\xC3\xA0", 'alefsym;' => "\xE2\x84\xB5", 'Alpha;' => "\xCE\x91", 'alpha;' => "\xCE\xB1", 'AMP' => "\x26", 'amp' => "\x26", 'AMP;' => "\x26", 'amp;' => "\x26", 'and;' => "\xE2\x88\xA7", 'ang;' => "\xE2\x88\xA0", 'apos;' => "\x27", 'Aring' => "\xC3\x85", 'aring' => "\xC3\xA5", 'Aring;' => "\xC3\x85", 'aring;' => "\xC3\xA5", 'asymp;' => "\xE2\x89\x88", 'Atilde' => "\xC3\x83", 'atilde' => "\xC3\xA3", 'Atilde;' => "\xC3\x83", 'atilde;' => "\xC3\xA3", 'Auml' => "\xC3\x84", 'auml' => "\xC3\xA4", 'Auml;' => "\xC3\x84", 'auml;' => "\xC3\xA4", 'bdquo;' => "\xE2\x80\x9E", 'Beta;' => "\xCE\x92", 'beta;' => "\xCE\xB2", 'brvbar' => "\xC2\xA6", 'brvbar;' => "\xC2\xA6", 'bull;' => "\xE2\x80\xA2", 'cap;' => "\xE2\x88\xA9", 'Ccedil' => "\xC3\x87", 'ccedil' => "\xC3\xA7", 'Ccedil;' => "\xC3\x87", 'ccedil;' => "\xC3\xA7", 'cedil' => "\xC2\xB8", 'cedil;' => "\xC2\xB8", 'cent' => "\xC2\xA2", 'cent;' => "\xC2\xA2", 'Chi;' => "\xCE\xA7", 'chi;' => "\xCF\x87", 'circ;' => "\xCB\x86", 'clubs;' => "\xE2\x99\xA3", 'cong;' => "\xE2\x89\x85", 'COPY' => "\xC2\xA9", 'copy' => "\xC2\xA9", 'COPY;' => "\xC2\xA9", 'copy;' => "\xC2\xA9", 'crarr;' => "\xE2\x86\xB5", 'cup;' => "\xE2\x88\xAA", 'curren' => "\xC2\xA4", 'curren;' => "\xC2\xA4", 'Dagger;' => "\xE2\x80\xA1", 'dagger;' => "\xE2\x80\xA0", 'dArr;' => "\xE2\x87\x93", 'darr;' => "\xE2\x86\x93", 'deg' => "\xC2\xB0", 'deg;' => "\xC2\xB0", 'Delta;' => "\xCE\x94", 'delta;' => "\xCE\xB4", 'diams;' => "\xE2\x99\xA6", 'divide' => "\xC3\xB7", 'divide;' => "\xC3\xB7", 'Eacute' => "\xC3\x89", 'eacute' => "\xC3\xA9", 'Eacute;' => "\xC3\x89", 'eacute;' => "\xC3\xA9", 'Ecirc' => "\xC3\x8A", 'ecirc' => "\xC3\xAA", 'Ecirc;' => "\xC3\x8A", 'ecirc;' => "\xC3\xAA", 'Egrave' => "\xC3\x88", 'egrave' => "\xC3\xA8", 'Egrave;' => "\xC3\x88", 'egrave;' => "\xC3\xA8", 'empty;' => "\xE2\x88\x85", 'emsp;' => "\xE2\x80\x83", 'ensp;' => "\xE2\x80\x82", 'Epsilon;' => "\xCE\x95", 'epsilon;' => "\xCE\xB5", 'equiv;' => "\xE2\x89\xA1", 'Eta;' => "\xCE\x97", 'eta;' => "\xCE\xB7", 'ETH' => "\xC3\x90", 'eth' => "\xC3\xB0", 'ETH;' => "\xC3\x90", 'eth;' => "\xC3\xB0", 'Euml' => "\xC3\x8B", 'euml' => "\xC3\xAB", 'Euml;' => "\xC3\x8B", 'euml;' => "\xC3\xAB", 'euro;' => "\xE2\x82\xAC", 'exist;' => "\xE2\x88\x83", 'fnof;' => "\xC6\x92", 'forall;' => "\xE2\x88\x80", 'frac12' => "\xC2\xBD", 'frac12;' => "\xC2\xBD", 'frac14' => "\xC2\xBC", 'frac14;' => "\xC2\xBC", 'frac34' => "\xC2\xBE", 'frac34;' => "\xC2\xBE", 'frasl;' => "\xE2\x81\x84", 'Gamma;' => "\xCE\x93", 'gamma;' => "\xCE\xB3", 'ge;' => "\xE2\x89\xA5", 'GT' => "\x3E", 'gt' => "\x3E", 'GT;' => "\x3E", 'gt;' => "\x3E", 'hArr;' => "\xE2\x87\x94", 'harr;' => "\xE2\x86\x94", 'hearts;' => "\xE2\x99\xA5", 'hellip;' => "\xE2\x80\xA6", 'Iacute' => "\xC3\x8D", 'iacute' => "\xC3\xAD", 'Iacute;' => "\xC3\x8D", 'iacute;' => "\xC3\xAD", 'Icirc' => "\xC3\x8E", 'icirc' => "\xC3\xAE", 'Icirc;' => "\xC3\x8E", 'icirc;' => "\xC3\xAE", 'iexcl' => "\xC2\xA1", 'iexcl;' => "\xC2\xA1", 'Igrave' => "\xC3\x8C", 'igrave' => "\xC3\xAC", 'Igrave;' => "\xC3\x8C", 'igrave;' => "\xC3\xAC", 'image;' => "\xE2\x84\x91", 'infin;' => "\xE2\x88\x9E", 'int;' => "\xE2\x88\xAB", 'Iota;' => "\xCE\x99", 'iota;' => "\xCE\xB9", 'iquest' => "\xC2\xBF", 'iquest;' => "\xC2\xBF", 'isin;' => "\xE2\x88\x88", 'Iuml' => "\xC3\x8F", 'iuml' => "\xC3\xAF", 'Iuml;' => "\xC3\x8F", 'iuml;' => "\xC3\xAF", 'Kappa;' => "\xCE\x9A", 'kappa;' => "\xCE\xBA", 'Lambda;' => "\xCE\x9B", 'lambda;' => "\xCE\xBB", 'lang;' => "\xE3\x80\x88", 'laquo' => "\xC2\xAB", 'laquo;' => "\xC2\xAB", 'lArr;' => "\xE2\x87\x90", 'larr;' => "\xE2\x86\x90", 'lceil;' => "\xE2\x8C\x88", 'ldquo;' => "\xE2\x80\x9C", 'le;' => "\xE2\x89\xA4", 'lfloor;' => "\xE2\x8C\x8A", 'lowast;' => "\xE2\x88\x97", 'loz;' => "\xE2\x97\x8A", 'lrm;' => "\xE2\x80\x8E", 'lsaquo;' => "\xE2\x80\xB9", 'lsquo;' => "\xE2\x80\x98", 'LT' => "\x3C", 'lt' => "\x3C", 'LT;' => "\x3C", 'lt;' => "\x3C", 'macr' => "\xC2\xAF", 'macr;' => "\xC2\xAF", 'mdash;' => "\xE2\x80\x94", 'micro' => "\xC2\xB5", 'micro;' => "\xC2\xB5", 'middot' => "\xC2\xB7", 'middot;' => "\xC2\xB7", 'minus;' => "\xE2\x88\x92", 'Mu;' => "\xCE\x9C", 'mu;' => "\xCE\xBC", 'nabla;' => "\xE2\x88\x87", 'nbsp' => "\xC2\xA0", 'nbsp;' => "\xC2\xA0", 'ndash;' => "\xE2\x80\x93", 'ne;' => "\xE2\x89\xA0", 'ni;' => "\xE2\x88\x8B", 'not' => "\xC2\xAC", 'not;' => "\xC2\xAC", 'notin;' => "\xE2\x88\x89", 'nsub;' => "\xE2\x8A\x84", 'Ntilde' => "\xC3\x91", 'ntilde' => "\xC3\xB1", 'Ntilde;' => "\xC3\x91", 'ntilde;' => "\xC3\xB1", 'Nu;' => "\xCE\x9D", 'nu;' => "\xCE\xBD", 'Oacute' => "\xC3\x93", 'oacute' => "\xC3\xB3", 'Oacute;' => "\xC3\x93", 'oacute;' => "\xC3\xB3", 'Ocirc' => "\xC3\x94", 'ocirc' => "\xC3\xB4", 'Ocirc;' => "\xC3\x94", 'ocirc;' => "\xC3\xB4", 'OElig;' => "\xC5\x92", 'oelig;' => "\xC5\x93", 'Ograve' => "\xC3\x92", 'ograve' => "\xC3\xB2", 'Ograve;' => "\xC3\x92", 'ograve;' => "\xC3\xB2", 'oline;' => "\xE2\x80\xBE", 'Omega;' => "\xCE\xA9", 'omega;' => "\xCF\x89", 'Omicron;' => "\xCE\x9F", 'omicron;' => "\xCE\xBF", 'oplus;' => "\xE2\x8A\x95", 'or;' => "\xE2\x88\xA8", 'ordf' => "\xC2\xAA", 'ordf;' => "\xC2\xAA", 'ordm' => "\xC2\xBA", 'ordm;' => "\xC2\xBA", 'Oslash' => "\xC3\x98", 'oslash' => "\xC3\xB8", 'Oslash;' => "\xC3\x98", 'oslash;' => "\xC3\xB8", 'Otilde' => "\xC3\x95", 'otilde' => "\xC3\xB5", 'Otilde;' => "\xC3\x95", 'otilde;' => "\xC3\xB5", 'otimes;' => "\xE2\x8A\x97", 'Ouml' => "\xC3\x96", 'ouml' => "\xC3\xB6", 'Ouml;' => "\xC3\x96", 'ouml;' => "\xC3\xB6", 'para' => "\xC2\xB6", 'para;' => "\xC2\xB6", 'part;' => "\xE2\x88\x82", 'permil;' => "\xE2\x80\xB0", 'perp;' => "\xE2\x8A\xA5", 'Phi;' => "\xCE\xA6", 'phi;' => "\xCF\x86", 'Pi;' => "\xCE\xA0", 'pi;' => "\xCF\x80", 'piv;' => "\xCF\x96", 'plusmn' => "\xC2\xB1", 'plusmn;' => "\xC2\xB1", 'pound' => "\xC2\xA3", 'pound;' => "\xC2\xA3", 'Prime;' => "\xE2\x80\xB3", 'prime;' => "\xE2\x80\xB2", 'prod;' => "\xE2\x88\x8F", 'prop;' => "\xE2\x88\x9D", 'Psi;' => "\xCE\xA8", 'psi;' => "\xCF\x88", 'QUOT' => "\x22", 'quot' => "\x22", 'QUOT;' => "\x22", 'quot;' => "\x22", 'radic;' => "\xE2\x88\x9A", 'rang;' => "\xE3\x80\x89", 'raquo' => "\xC2\xBB", 'raquo;' => "\xC2\xBB", 'rArr;' => "\xE2\x87\x92", 'rarr;' => "\xE2\x86\x92", 'rceil;' => "\xE2\x8C\x89", 'rdquo;' => "\xE2\x80\x9D", 'real;' => "\xE2\x84\x9C", 'REG' => "\xC2\xAE", 'reg' => "\xC2\xAE", 'REG;' => "\xC2\xAE", 'reg;' => "\xC2\xAE", 'rfloor;' => "\xE2\x8C\x8B", 'Rho;' => "\xCE\xA1", 'rho;' => "\xCF\x81", 'rlm;' => "\xE2\x80\x8F", 'rsaquo;' => "\xE2\x80\xBA", 'rsquo;' => "\xE2\x80\x99", 'sbquo;' => "\xE2\x80\x9A", 'Scaron;' => "\xC5\xA0", 'scaron;' => "\xC5\xA1", 'sdot;' => "\xE2\x8B\x85", 'sect' => "\xC2\xA7", 'sect;' => "\xC2\xA7", 'shy' => "\xC2\xAD", 'shy;' => "\xC2\xAD", 'Sigma;' => "\xCE\xA3", 'sigma;' => "\xCF\x83", 'sigmaf;' => "\xCF\x82", 'sim;' => "\xE2\x88\xBC", 'spades;' => "\xE2\x99\xA0", 'sub;' => "\xE2\x8A\x82", 'sube;' => "\xE2\x8A\x86", 'sum;' => "\xE2\x88\x91", 'sup;' => "\xE2\x8A\x83", 'sup1' => "\xC2\xB9", 'sup1;' => "\xC2\xB9", 'sup2' => "\xC2\xB2", 'sup2;' => "\xC2\xB2", 'sup3' => "\xC2\xB3", 'sup3;' => "\xC2\xB3", 'supe;' => "\xE2\x8A\x87", 'szlig' => "\xC3\x9F", 'szlig;' => "\xC3\x9F", 'Tau;' => "\xCE\xA4", 'tau;' => "\xCF\x84", 'there4;' => "\xE2\x88\xB4", 'Theta;' => "\xCE\x98", 'theta;' => "\xCE\xB8", 'thetasym;' => "\xCF\x91", 'thinsp;' => "\xE2\x80\x89", 'THORN' => "\xC3\x9E", 'thorn' => "\xC3\xBE", 'THORN;' => "\xC3\x9E", 'thorn;' => "\xC3\xBE", 'tilde;' => "\xCB\x9C", 'times' => "\xC3\x97", 'times;' => "\xC3\x97", 'TRADE;' => "\xE2\x84\xA2", 'trade;' => "\xE2\x84\xA2", 'Uacute' => "\xC3\x9A", 'uacute' => "\xC3\xBA", 'Uacute;' => "\xC3\x9A", 'uacute;' => "\xC3\xBA", 'uArr;' => "\xE2\x87\x91", 'uarr;' => "\xE2\x86\x91", 'Ucirc' => "\xC3\x9B", 'ucirc' => "\xC3\xBB", 'Ucirc;' => "\xC3\x9B", 'ucirc;' => "\xC3\xBB", 'Ugrave' => "\xC3\x99", 'ugrave' => "\xC3\xB9", 'Ugrave;' => "\xC3\x99", 'ugrave;' => "\xC3\xB9", 'uml' => "\xC2\xA8", 'uml;' => "\xC2\xA8", 'upsih;' => "\xCF\x92", 'Upsilon;' => "\xCE\xA5", 'upsilon;' => "\xCF\x85", 'Uuml' => "\xC3\x9C", 'uuml' => "\xC3\xBC", 'Uuml;' => "\xC3\x9C", 'uuml;' => "\xC3\xBC", 'weierp;' => "\xE2\x84\x98", 'Xi;' => "\xCE\x9E", 'xi;' => "\xCE\xBE", 'Yacute' => "\xC3\x9D", 'yacute' => "\xC3\xBD", 'Yacute;' => "\xC3\x9D", 'yacute;' => "\xC3\xBD", 'yen' => "\xC2\xA5", 'yen;' => "\xC2\xA5", 'yuml' => "\xC3\xBF", 'Yuml;' => "\xC5\xB8", 'yuml;' => "\xC3\xBF", 'Zeta;' => "\xCE\x96", 'zeta;' => "\xCE\xB6", 'zwj;' => "\xE2\x80\x8D", 'zwnj;' => "\xE2\x80\x8C");
+
+ for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++)
+ {
+ $consumed = substr($this->consumed, 1);
+ if (isset($entities[$consumed]))
+ {
+ $match = $consumed;
+ }
+ }
+
+ if ($match !== null)
+ {
+ $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1);
+ $this->position += strlen($entities[$match]) - strlen($consumed) - 1;
+ }
+ break;
+ }
+ }
+}
+
+/**
+ * IRI parser/serialiser
+ *
+ * @package SimplePie
+ */
+class SimplePie_IRI
+{
+ /**
+ * Scheme
+ *
+ * @access private
+ * @var string
+ */
+ var $scheme;
+
+ /**
+ * User Information
+ *
+ * @access private
+ * @var string
+ */
+ var $userinfo;
+
+ /**
+ * Host
+ *
+ * @access private
+ * @var string
+ */
+ var $host;
+
+ /**
+ * Port
+ *
+ * @access private
+ * @var string
+ */
+ var $port;
+
+ /**
+ * Path
+ *
+ * @access private
+ * @var string
+ */
+ var $path;
+
+ /**
+ * Query
+ *
+ * @access private
+ * @var string
+ */
+ var $query;
+
+ /**
+ * Fragment
+ *
+ * @access private
+ * @var string
+ */
+ var $fragment;
+
+ /**
+ * Whether the object represents a valid IRI
+ *
+ * @access private
+ * @var array
+ */
+ var $valid = array();
+
+ /**
+ * Return the entire IRI when you try and read the object as a string
+ *
+ * @access public
+ * @return string
+ */
+ function __toString()
+ {
+ return $this->get_iri();
+ }
+
+ /**
+ * Create a new IRI object, from a specified string
+ *
+ * @access public
+ * @param string $iri
+ * @return SimplePie_IRI
+ */
+ function SimplePie_IRI($iri)
+ {
+ $iri = (string) $iri;
+ if ($iri !== '')
+ {
+ $parsed = $this->parse_iri($iri);
+ $this->set_scheme($parsed['scheme']);
+ $this->set_authority($parsed['authority']);
+ $this->set_path($parsed['path']);
+ $this->set_query($parsed['query']);
+ $this->set_fragment($parsed['fragment']);
+ }
+ }
+
+ /**
+ * Create a new IRI object by resolving a relative IRI
+ *
+ * @static
+ * @access public
+ * @param SimplePie_IRI $base Base IRI
+ * @param string $relative Relative IRI
+ * @return SimplePie_IRI
+ */
+ function absolutize($base, $relative)
+ {
+ $relative = (string) $relative;
+ if ($relative !== '')
+ {
+ $relative =& new SimplePie_IRI($relative);
+ if ($relative->get_scheme() !== null)
+ {
+ $target = $relative;
+ }
+ elseif ($base->get_iri() !== null)
+ {
+ if ($relative->get_authority() !== null)
+ {
+ $target = $relative;
+ $target->set_scheme($base->get_scheme());
+ }
+ else
+ {
+ $target =& new SimplePie_IRI('');
+ $target->set_scheme($base->get_scheme());
+ $target->set_userinfo($base->get_userinfo());
+ $target->set_host($base->get_host());
+ $target->set_port($base->get_port());
+ if ($relative->get_path() !== null)
+ {
+ if (strpos($relative->get_path(), '/') === 0)
+ {
+ $target->set_path($relative->get_path());
+ }
+ elseif (($base->get_userinfo() !== null || $base->get_host() !== null || $base->get_port() !== null) && $base->get_path() === null)
+ {
+ $target->set_path('/' . $relative->get_path());
+ }
+ elseif (($last_segment = strrpos($base->get_path(), '/')) !== false)
+ {
+ $target->set_path(substr($base->get_path(), 0, $last_segment + 1) . $relative->get_path());
+ }
+ else
+ {
+ $target->set_path($relative->get_path());
+ }
+ $target->set_query($relative->get_query());
+ }
+ else
+ {
+ $target->set_path($base->get_path());
+ if ($relative->get_query() !== null)
+ {
+ $target->set_query($relative->get_query());
+ }
+ elseif ($base->get_query() !== null)
+ {
+ $target->set_query($base->get_query());
+ }
+ }
+ }
+ $target->set_fragment($relative->get_fragment());
+ }
+ else
+ {
+ // No base URL, just return the relative URL
+ $target = $relative;
+ }
+ }
+ else
+ {
+ $target = $base;
+ }
+ return $target;
+ }
+
+ /**
+ * Parse an IRI into scheme/authority/path/query/fragment segments
+ *
+ * @access private
+ * @param string $iri
+ * @return array
+ */
+ function parse_iri($iri)
+ {
+ preg_match('/^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/', $iri, $match);
+ for ($i = count($match); $i <= 9; $i++)
+ {
+ $match[$i] = '';
+ }
+ return array('scheme' => $match[2], 'authority' => $match[4], 'path' => $match[5], 'query' => $match[7], 'fragment' => $match[9]);
+ }
+
+ /**
+ * Remove dot segments from a path
+ *
+ * @access private
+ * @param string $input
+ * @return string
+ */
+ function remove_dot_segments($input)
+ {
+ $output = '';
+ while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..')
+ {
+ // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
+ if (strpos($input, '../') === 0)
+ {
+ $input = substr($input, 3);
+ }
+ elseif (strpos($input, './') === 0)
+ {
+ $input = substr($input, 2);
+ }
+ // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
+ elseif (strpos($input, '/./') === 0)
+ {
+ $input = substr_replace($input, '/', 0, 3);
+ }
+ elseif ($input === '/.')
+ {
+ $input = '/';
+ }
+ // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
+ elseif (strpos($input, '/../') === 0)
+ {
+ $input = substr_replace($input, '/', 0, 4);
+ $output = substr_replace($output, '', strrpos($output, '/'));
+ }
+ elseif ($input === '/..')
+ {
+ $input = '/';
+ $output = substr_replace($output, '', strrpos($output, '/'));
+ }
+ // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
+ elseif ($input === '.' || $input === '..')
+ {
+ $input = '';
+ }
+ // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
+ elseif (($pos = strpos($input, '/', 1)) !== false)
+ {
+ $output .= substr($input, 0, $pos);
+ $input = substr_replace($input, '', 0, $pos);
+ }
+ else
+ {
+ $output .= $input;
+ $input = '';
+ }
+ }
+ return $output . $input;
+ }
+
+ /**
+ * Replace invalid character with percent encoding
+ *
+ * @param string $string Input string
+ * @param string $valid_chars Valid characters
+ * @param int $case Normalise case
+ * @return string
+ */
+ function replace_invalid_with_pct_encoding($string, $valid_chars, $case = SIMPLEPIE_SAME_CASE, $iprivate = false)
+ {
+ // Normalize as many pct-encoded sections as possible
+ $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array(&$this, 'remove_iunreserved_percent_encoded'), $string);
+
+ // Replace invalid percent characters
+ $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);
+
+ // Add unreserved and % to $valid_chars (the latter is safe because all
+ // pct-encoded sections are now valid).
+ $valid_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';
+
+ // Now replace any bytes that aren't allowed with their pct-encoded versions
+ $position = 0;
+ $strlen = strlen($string);
+ while (($position += strspn($string, $valid_chars, $position)) < $strlen)
+ {
+ $value = ord($string[$position]);
+
+ // Start position
+ $start = $position;
+
+ // By default we are valid
+ $valid = true;
+
+ // No one byte sequences are valid due to the while.
+ // Two byte sequence:
+ if (($value & 0xE0) === 0xC0)
+ {
+ $character = ($value & 0x1F) << 6;
+ $length = 2;
+ $remaining = 1;
+ }
+ // Three byte sequence:
+ elseif (($value & 0xF0) === 0xE0)
+ {
+ $character = ($value & 0x0F) << 12;
+ $length = 3;
+ $remaining = 2;
+ }
+ // Four byte sequence:
+ elseif (($value & 0xF8) === 0xF0)
+ {
+ $character = ($value & 0x07) << 18;
+ $length = 4;
+ $remaining = 3;
+ }
+ // Invalid byte:
+ else
+ {
+ $valid = false;
+ $length = 1;
+ $remaining = 0;
+ }
+
+ if ($remaining)
+ {
+ if ($position + $length <= $strlen)
+ {
+ for ($position++; $remaining; $position++)
+ {
+ $value = ord($string[$position]);
+
+ // Check that the byte is valid, then add it to the character:
+ if (($value & 0xC0) === 0x80)
+ {
+ $character |= ($value & 0x3F) << (--$remaining * 6);
+ }
+ // If it is invalid, count the sequence as invalid and reprocess the current byte:
+ else
+ {
+ $valid = false;
+ $position--;
+ break;
+ }
+ }
+ }
+ else
+ {
+ $position = $strlen - 1;
+ $valid = false;
+ }
+ }
+
+ // Percent encode anything invalid or not in ucschar
+ if (
+ // Invalid sequences
+ !$valid
+ // Non-shortest form sequences are invalid
+ || $length > 1 && $character <= 0x7F
+ || $length > 2 && $character <= 0x7FF
+ || $length > 3 && $character <= 0xFFFF
+ // Outside of range of ucschar codepoints
+ // Noncharacters
+ || ($character & 0xFFFE) === 0xFFFE
+ || $character >= 0xFDD0 && $character <= 0xFDEF
+ || (
+ // Everything else not in ucschar
+ $character > 0xD7FF && $character < 0xF900
+ || $character < 0xA0
+ || $character > 0xEFFFD
+ )
+ && (
+ // Everything not in iprivate, if it applies
+ !$iprivate
+ || $character < 0xE000
+ || $character > 0x10FFFD
+ )
+ )
+ {
+ // If we were a character, pretend we weren't, but rather an error.
+ if ($valid)
+ $position--;
+
+ for ($j = $start; $j <= $position; $j++)
+ {
+ $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
+ $j += 2;
+ $position += 2;
+ $strlen += 2;
+ }
+ }
+ }
+
+ // Normalise case
+ if ($case & SIMPLEPIE_LOWERCASE)
+ {
+ $string = strtolower($string);
+ }
+ elseif ($case & SIMPLEPIE_UPPERCASE)
+ {
+ $string = strtoupper($string);
+ }
+
+ return $string;
+ }
+
+ /**
+ * Callback function for preg_replace_callback.
+ *
+ * Removes sequences of percent encoded bytes that represent UTF-8
+ * encoded characters in iunreserved
+ *
+ * @access private
+ * @param array $match PCRE match
+ * @return string Replacement
+ */
+ function remove_iunreserved_percent_encoded($match)
+ {
+ // As we just have valid percent encoded sequences we can just explode
+ // and ignore the first member of the returned array (an empty string).
+ $bytes = explode('%', $match[0]);
+
+ // Initialize the new string (this is what will be returned) and that
+ // there are no bytes remaining in the current sequence (unsurprising
+ // at the first byte!).
+ $string = '';
+ $remaining = 0;
+
+ // Loop over each and every byte, and set $value to its value
+ for ($i = 1, $len = count($bytes); $i < $len; $i++)
+ {
+ $value = hexdec($bytes[$i]);
+
+ // If we're the first byte of sequence:
+ if (!$remaining)
+ {
+ // Start position
+ $start = $i;
+
+ // By default we are valid
+ $valid = true;
+
+ // One byte sequence:
+ if ($value <= 0x7F)
+ {
+ $character = $value;
+ $length = 1;
+ }
+ // Two byte sequence:
+ elseif (($value & 0xE0) === 0xC0)
+ {
+ $character = ($value & 0x1F) << 6;
+ $length = 2;
+ $remaining = 1;
+ }
+ // Three byte sequence:
+ elseif (($value & 0xF0) === 0xE0)
+ {
+ $character = ($value & 0x0F) << 12;
+ $length = 3;
+ $remaining = 2;
+ }
+ // Four byte sequence:
+ elseif (($value & 0xF8) === 0xF0)
+ {
+ $character = ($value & 0x07) << 18;
+ $length = 4;
+ $remaining = 3;
+ }
+ // Invalid byte:
+ else
+ {
+ $valid = false;
+ $remaining = 0;
+ }
+ }
+ // Continuation byte:
+ else
+ {
+ // Check that the byte is valid, then add it to the character:
+ if (($value & 0xC0) === 0x80)
+ {
+ $remaining--;
+ $character |= ($value & 0x3F) << ($remaining * 6);
+ }
+ // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
+ else
+ {
+ $valid = false;
+ $remaining = 0;
+ $i--;
+ }
+ }
+
+ // If we've reached the end of the current byte sequence, append it to Unicode::$data
+ if (!$remaining)
+ {
+ // Percent encode anything invalid or not in iunreserved
+ if (
+ // Invalid sequences
+ !$valid
+ // Non-shortest form sequences are invalid
+ || $length > 1 && $character <= 0x7F
+ || $length > 2 && $character <= 0x7FF
+ || $length > 3 && $character <= 0xFFFF
+ // Outside of range of iunreserved codepoints
+ || $character < 0x2D
+ || $character > 0xEFFFD
+ // Noncharacters
+ || ($character & 0xFFFE) === 0xFFFE
+ || $character >= 0xFDD0 && $character <= 0xFDEF
+ // Everything else not in iunreserved (this is all BMP)
+ || $character === 0x2F
+ || $character > 0x39 && $character < 0x41
+ || $character > 0x5A && $character < 0x61
+ || $character > 0x7A && $character < 0x7E
+ || $character > 0x7E && $character < 0xA0
+ || $character > 0xD7FF && $character < 0xF900
+ )
+ {
+ for ($j = $start; $j <= $i; $j++)
+ {
+ $string .= '%' . strtoupper($bytes[$j]);
+ }
+ }
+ else
+ {
+ for ($j = $start; $j <= $i; $j++)
+ {
+ $string .= chr(hexdec($bytes[$j]));
+ }
+ }
+ }
+ }
+
+ // If we have any bytes left over they are invalid (i.e., we are
+ // mid-way through a multi-byte sequence)
+ if ($remaining)
+ {
+ for ($j = $start; $j < $len; $j++)
+ {
+ $string .= '%' . strtoupper($bytes[$j]);
+ }
+ }
+
+ return $string;
+ }
+
+ /**
+ * Check if the object represents a valid IRI
+ *
+ * @access public
+ * @return bool
+ */
+ function is_valid()
+ {
+ return array_sum($this->valid) === count($this->valid);
+ }
+
+ /**
+ * Set the scheme. Returns true on success, false on failure (if there are
+ * any invalid characters).
+ *
+ * @access public
+ * @param string $scheme
+ * @return bool
+ */
+ function set_scheme($scheme)
+ {
+ if ($scheme === null || $scheme === '')
+ {
+ $this->scheme = null;
+ }
+ else
+ {
+ $len = strlen($scheme);
+ switch (true)
+ {
+ case $len > 1:
+ if (!strspn($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-.', 1))
+ {
+ $this->scheme = null;
+ $this->valid[__FUNCTION__] = false;
+ return false;
+ }
+
+ case $len > 0:
+ if (!strspn($scheme, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 0, 1))
+ {
+ $this->scheme = null;
+ $this->valid[__FUNCTION__] = false;
+ return false;
+ }
+ }
+ $this->scheme = strtolower($scheme);
+ }
+ $this->valid[__FUNCTION__] = true;
+ return true;
+ }
+
+ /**
+ * Set the authority. Returns true on success, false on failure (if there are
+ * any invalid characters).
+ *
+ * @access public
+ * @param string $authority
+ * @return bool
+ */
+ function set_authority($authority)
+ {
+ if (($userinfo_end = strrpos($authority, '@')) !== false)
+ {
+ $userinfo = substr($authority, 0, $userinfo_end);
+ $authority = substr($authority, $userinfo_end + 1);
+ }
+ else
+ {
+ $userinfo = null;
+ }
+
+ if (($port_start = strpos($authority, ':')) !== false)
+ {
+ $port = substr($authority, $port_start + 1);
+ $authority = substr($authority, 0, $port_start);
+ }
+ else
+ {
+ $port = null;
+ }
+
+ return $this->set_userinfo($userinfo) && $this->set_host($authority) && $this->set_port($port);
+ }
+
+ /**
+ * Set the userinfo.
+ *
+ * @access public
+ * @param string $userinfo
+ * @return bool
+ */
+ function set_userinfo($userinfo)
+ {
+ if ($userinfo === null || $userinfo === '')
+ {
+ $this->userinfo = null;
+ }
+ else
+ {
+ $this->userinfo = $this->replace_invalid_with_pct_encoding($userinfo, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=:');
+ }
+ $this->valid[__FUNCTION__] = true;
+ return true;
+ }
+
+ /**
+ * Set the host. Returns true on success, false on failure (if there are
+ * any invalid characters).
+ *
+ * @access public
+ * @param string $host
+ * @return bool
+ */
+ function set_host($host)
+ {
+ if ($host === null || $host === '')
+ {
+ $this->host = null;
+ $this->valid[__FUNCTION__] = true;
+ return true;
+ }
+ elseif ($host[0] === '[' && substr($host, -1) === ']')
+ {
+ if (Net_IPv6::checkIPv6(substr($host, 1, -1)))
+ {
+ $this->host = $host;
+ $this->valid[__FUNCTION__] = true;
+ return true;
+ }
+ else
+ {
+ $this->host = null;
+ $this->valid[__FUNCTION__] = false;
+ return false;
+ }
+ }
+ else
+ {
+ $this->host = $this->replace_invalid_with_pct_encoding($host, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=', SIMPLEPIE_LOWERCASE);
+ $this->valid[__FUNCTION__] = true;
+ return true;
+ }
+ }
+
+ /**
+ * Set the port. Returns true on success, false on failure (if there are
+ * any invalid characters).
+ *
+ * @access public
+ * @param string $port
+ * @return bool
+ */
+ function set_port($port)
+ {
+ if ($port === null || $port === '')
+ {
+ $this->port = null;
+ $this->valid[__FUNCTION__] = true;
+ return true;
+ }
+ elseif (strspn($port, '0123456789') === strlen($port))
+ {
+ $this->port = (int) $port;
+ $this->valid[__FUNCTION__] = true;
+ return true;
+ }
+ else
+ {
+ $this->port = null;
+ $this->valid[__FUNCTION__] = false;
+ return false;
+ }
+ }
+
+ /**
+ * Set the path.
+ *
+ * @access public
+ * @param string $path
+ * @return bool
+ */
+ function set_path($path)
+ {
+ if ($path === null || $path === '')
+ {
+ $this->path = null;
+ $this->valid[__FUNCTION__] = true;
+ return true;
+ }
+ elseif (substr($path, 0, 2) === '//' && $this->userinfo === null && $this->host === null && $this->port === null)
+ {
+ $this->path = null;
+ $this->valid[__FUNCTION__] = false;
+ return false;
+ }
+ else
+ {
+ $this->path = $this->replace_invalid_with_pct_encoding($path, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=@/');
+ if ($this->scheme !== null)
+ {
+ $this->path = $this->remove_dot_segments($this->path);
+ }
+ $this->valid[__FUNCTION__] = true;
+ return true;
+ }
+ }
+
+ /**
+ * Set the query.
+ *
+ * @access public
+ * @param string $query
+ * @return bool
+ */
+ function set_query($query)
+ {
+ if ($query === null || $query === '')
+ {
+ $this->query = null;
+ }
+ else
+ {
+ $this->query = $this->replace_invalid_with_pct_encoding($query, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$\'()*+,;:@/?&=');
+ }
+ $this->valid[__FUNCTION__] = true;
+ return true;
+ }
+
+ /**
+ * Set the fragment.
+ *
+ * @access public
+ * @param string $fragment
+ * @return bool
+ */
+ function set_fragment($fragment)
+ {
+ if ($fragment === null || $fragment === '')
+ {
+ $this->fragment = null;
+ }
+ else
+ {
+ $this->fragment = $this->replace_invalid_with_pct_encoding($fragment, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~!$&\'()*+,;=:@/?');
+ }
+ $this->valid[__FUNCTION__] = true;
+ return true;
+ }
+
+ /**
+ * Get the complete IRI
+ *
+ * @access public
+ * @return string
+ */
+ function get_iri()
+ {
+ $iri = '';
+ if ($this->scheme !== null)
+ {
+ $iri .= $this->scheme . ':';
+ }
+ if (($authority = $this->get_authority()) !== null)
+ {
+ $iri .= '//' . $authority;
+ }
+ if ($this->path !== null)
+ {
+ $iri .= $this->path;
+ }
+ if ($this->query !== null)
+ {
+ $iri .= '?' . $this->query;
+ }
+ if ($this->fragment !== null)
+ {
+ $iri .= '#' . $this->fragment;
+ }
+
+ if ($iri !== '')
+ {
+ return $iri;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Get the scheme
+ *
+ * @access public
+ * @return string
+ */
+ function get_scheme()
+ {
+ return $this->scheme;
+ }
+
+ /**
+ * Get the complete authority
+ *
+ * @access public
+ * @return string
+ */
+ function get_authority()
+ {
+ $authority = '';
+ if ($this->userinfo !== null)
+ {
+ $authority .= $this->userinfo . '@';
+ }
+ if ($this->host !== null)
+ {
+ $authority .= $this->host;
+ }
+ if ($this->port !== null)
+ {
+ $authority .= ':' . $this->port;
+ }
+
+ if ($authority !== '')
+ {
+ return $authority;
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+ /**
+ * Get the user information
+ *
+ * @access public
+ * @return string
+ */
+ function get_userinfo()
+ {
+ return $this->userinfo;
+ }
+
+ /**
+ * Get the host
+ *
+ * @access public
+ * @return string
+ */
+ function get_host()
+ {
+ return $this->host;
+ }
+
+ /**
+ * Get the port
+ *
+ * @access public
+ * @return string
+ */
+ function get_port()
+ {
+ return $this->port;
+ }
+
+ /**
+ * Get the path
+ *
+ * @access public
+ * @return string
+ */
+ function get_path()
+ {
+ return $this->path;
+ }
+
+ /**
+ * Get the query
+ *
+ * @access public
+ * @return string
+ */
+ function get_query()
+ {
+ return $this->query;
+ }
+
+ /**
+ * Get the fragment
+ *
+ * @access public
+ * @return string
+ */
+ function get_fragment()
+ {
+ return $this->fragment;
+ }
+}
+
+/**
+ * Class to validate and to work with IPv6 addresses.
+ *
+ * @package SimplePie
+ * @copyright 2003-2005 The PHP Group
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @link http://pear.php.net/package/Net_IPv6
+ * @author Alexander Merz <alexander.merz@web.de>
+ * @author elfrink at introweb dot nl
+ * @author Josh Peck <jmp at joshpeck dot org>
+ * @author Geoffrey Sneddon <geoffers@gmail.com>
+ */
+class SimplePie_Net_IPv6
+{
+ /**
+ * Removes a possible existing netmask specification of an IP address.
+ *
+ * @param string $ip the (compressed) IP as Hex representation
+ * @return string the IP the without netmask
+ * @since 1.1.0
+ * @access public
+ * @static
+ */
+ function removeNetmaskSpec($ip)
+ {
+ if (strpos($ip, '/') !== false)
+ {
+ list($addr, $nm) = explode('/', $ip);
+ }
+ else
+ {
+ $addr = $ip;
+ }
+ return $addr;
+ }
+
+ /**
+ * Uncompresses an IPv6 address
+ *
+ * RFC 2373 allows you to compress zeros in an address to '::'. This
+ * function expects an valid IPv6 address and expands the '::' to
+ * the required zeros.
+ *
+ * Example: FF01::101 -> FF01:0:0:0:0:0:0:101
+ * ::1 -> 0:0:0:0:0:0:0:1
+ *
+ * @access public
+ * @static
+ * @param string $ip a valid IPv6-address (hex format)
+ * @return string the uncompressed IPv6-address (hex format)
+ */
+ function Uncompress($ip)
+ {
+ $uip = SimplePie_Net_IPv6::removeNetmaskSpec($ip);
+ $c1 = -1;
+ $c2 = -1;
+ if (strpos($ip, '::') !== false)
+ {
+ list($ip1, $ip2) = explode('::', $ip);
+ if ($ip1 === '')
+ {
+ $c1 = -1;
+ }
+ else
+ {
+ $pos = 0;
+ if (($pos = substr_count($ip1, ':')) > 0)
+ {
+ $c1 = $pos;
+ }
+ else
+ {
+ $c1 = 0;
+ }
+ }
+ if ($ip2 === '')
+ {
+ $c2 = -1;
+ }
+ else
+ {
+ $pos = 0;
+ if (($pos = substr_count($ip2, ':')) > 0)
+ {
+ $c2 = $pos;
+ }
+ else
+ {
+ $c2 = 0;
+ }
+ }
+ if (strstr($ip2, '.'))
+ {
+ $c2++;
+ }
+ // ::
+ if ($c1 === -1 && $c2 === -1)
+ {
+ $uip = '0:0:0:0:0:0:0:0';
+ }
+ // ::xxx
+ else if ($c1 === -1)
+ {
+ $fill = str_repeat('0:', 7 - $c2);
+ $uip = str_replace('::', $fill, $uip);
+ }
+ // xxx::
+ else if ($c2 === -1)
+ {
+ $fill = str_repeat(':0', 7 - $c1);
+ $uip = str_replace('::', $fill, $uip);
+ }
+ // xxx::xxx
+ else
+ {
+ $fill = str_repeat(':0:', 6 - $c2 - $c1);
+ $uip = str_replace('::', $fill, $uip);
+ $uip = str_replace('::', ':', $uip);
+ }
+ }
+ return $uip;
+ }
+
+ /**
+ * Splits an IPv6 address into the IPv6 and a possible IPv4 part
+ *
+ * RFC 2373 allows you to note the last two parts of an IPv6 address as
+ * an IPv4 compatible address
+ *
+ * Example: 0:0:0:0:0:0:13.1.68.3
+ * 0:0:0:0:0:FFFF:129.144.52.38
+ *
+ * @access public
+ * @static
+ * @param string $ip a valid IPv6-address (hex format)
+ * @return array [0] contains the IPv6 part, [1] the IPv4 part (hex format)
+ */
+ function SplitV64($ip)
+ {
+ $ip = SimplePie_Net_IPv6::Uncompress($ip);
+ if (strstr($ip, '.'))
+ {
+ $pos = strrpos($ip, ':');
+ $ip[$pos] = '_';
+ $ipPart = explode('_', $ip);
+ return $ipPart;
+ }
+ else
+ {
+ return array($ip, '');
+ }
+ }
+
+ /**
+ * Checks an IPv6 address
+ *
+ * Checks if the given IP is IPv6-compatible
+ *
+ * @access public
+ * @static
+ * @param string $ip a valid IPv6-address
+ * @return bool true if $ip is an IPv6 address
+ */
+ function checkIPv6($ip)
+ {
+ $ipPart = SimplePie_Net_IPv6::SplitV64($ip);
+ $count = 0;
+ if (!empty($ipPart[0]))
+ {
+ $ipv6 = explode(':', $ipPart[0]);
+ for ($i = 0; $i < count($ipv6); $i++)
+ {
+ $dec = hexdec($ipv6[$i]);
+ $hex = strtoupper(preg_replace('/^[0]{1,3}(.*[0-9a-fA-F])$/', '\\1', $ipv6[$i]));
+ if ($ipv6[$i] >= 0 && $dec <= 65535 && $hex === strtoupper(dechex($dec)))
+ {
+ $count++;
+ }
+ }
+ if ($count === 8)
+ {
+ return true;
+ }
+ elseif ($count === 6 && !empty($ipPart[1]))
+ {
+ $ipv4 = explode('.', $ipPart[1]);
+ $count = 0;
+ foreach ($ipv4 as $ipv4_part)
+ {
+ if ($ipv4_part >= 0 && $ipv4_part <= 255 && preg_match('/^\d{1,3}$/', $ipv4_part))
+ {
+ $count++;
+ }
+ }
+ if ($count === 4)
+ {
+ return true;
+ }
+ }
+ else
+ {
+ return false;
+ }
+
+ }
+ else
+ {
+ return false;
+ }
+ }
+}
+
+/**
+ * Date Parser
+ *
+ * @package SimplePie
+ */
+class SimplePie_Parse_Date
+{
+ /**
+ * Input data
+ *
+ * @access protected
+ * @var string
+ */
+ var $date;
+
+ /**
+ * List of days, calendar day name => ordinal day number in the week
+ *
+ * @access protected
+ * @var array
+ */
+ var $day = array(
+ // English
+ 'mon' => 1,
+ 'monday' => 1,
+ 'tue' => 2,
+ 'tuesday' => 2,
+ 'wed' => 3,
+ 'wednesday' => 3,
+ 'thu' => 4,
+ 'thursday' => 4,
+ 'fri' => 5,
+ 'friday' => 5,
+ 'sat' => 6,
+ 'saturday' => 6,
+ 'sun' => 7,
+ 'sunday' => 7,
+ // Dutch
+ 'maandag' => 1,
+ 'dinsdag' => 2,
+ 'woensdag' => 3,
+ 'donderdag' => 4,
+ 'vrijdag' => 5,
+ 'zaterdag' => 6,
+ 'zondag' => 7,
+ // French
+ 'lundi' => 1,
+ 'mardi' => 2,
+ 'mercredi' => 3,
+ 'jeudi' => 4,
+ 'vendredi' => 5,
+ 'samedi' => 6,
+ 'dimanche' => 7,
+ // German
+ 'montag' => 1,
+ 'dienstag' => 2,
+ 'mittwoch' => 3,
+ 'donnerstag' => 4,
+ 'freitag' => 5,
+ 'samstag' => 6,
+ 'sonnabend' => 6,
+ 'sonntag' => 7,
+ // Italian
+ 'lunedì' => 1,
+ 'martedì' => 2,
+ 'mercoledì' => 3,
+ 'giovedì' => 4,
+ 'venerdì' => 5,
+ 'sabato' => 6,
+ 'domenica' => 7,
+ // Spanish
+ 'lunes' => 1,
+ 'martes' => 2,
+ 'miércoles' => 3,
+ 'jueves' => 4,
+ 'viernes' => 5,
+ 'sábado' => 6,
+ 'domingo' => 7,
+ // Finnish
+ 'maanantai' => 1,
+ 'tiistai' => 2,
+ 'keskiviikko' => 3,
+ 'torstai' => 4,
+ 'perjantai' => 5,
+ 'lauantai' => 6,
+ 'sunnuntai' => 7,
+ // Hungarian
+ 'hétfő' => 1,
+ 'kedd' => 2,
+ 'szerda' => 3,
+ 'csütörtok' => 4,
+ 'péntek' => 5,
+ 'szombat' => 6,
+ 'vasárnap' => 7,
+ // Greek
+ 'Δευ' => 1,
+ 'ΤÏι' => 2,
+ 'Τετ' => 3,
+ 'Πεμ' => 4,
+ 'ΠαÏ' => 5,
+ 'Σαβ' => 6,
+ 'ΚυÏ' => 7,
+ );
+
+ /**
+ * List of months, calendar month name => calendar month number
+ *
+ * @access protected
+ * @var array
+ */
+ var $month = array(
+ // English
+ 'jan' => 1,
+ 'january' => 1,
+ 'feb' => 2,
+ 'february' => 2,
+ 'mar' => 3,
+ 'march' => 3,
+ 'apr' => 4,
+ 'april' => 4,
+ 'may' => 5,
+ // No long form of May
+ 'jun' => 6,
+ 'june' => 6,
+ 'jul' => 7,
+ 'july' => 7,
+ 'aug' => 8,
+ 'august' => 8,
+ 'sep' => 9,
+ 'september' => 8,
+ 'oct' => 10,
+ 'october' => 10,
+ 'nov' => 11,
+ 'november' => 11,
+ 'dec' => 12,
+ 'december' => 12,
+ // Dutch
+ 'januari' => 1,
+ 'februari' => 2,
+ 'maart' => 3,
+ 'april' => 4,
+ 'mei' => 5,
+ 'juni' => 6,
+ 'juli' => 7,
+ 'augustus' => 8,
+ 'september' => 9,
+ 'oktober' => 10,
+ 'november' => 11,
+ 'december' => 12,
+ // French
+ 'janvier' => 1,
+ 'février' => 2,
+ 'mars' => 3,
+ 'avril' => 4,
+ 'mai' => 5,
+ 'juin' => 6,
+ 'juillet' => 7,
+ 'août' => 8,
+ 'septembre' => 9,
+ 'octobre' => 10,
+ 'novembre' => 11,
+ 'décembre' => 12,
+ // German
+ 'januar' => 1,
+ 'februar' => 2,
+ 'märz' => 3,
+ 'april' => 4,
+ 'mai' => 5,
+ 'juni' => 6,
+ 'juli' => 7,
+ 'august' => 8,
+ 'september' => 9,
+ 'oktober' => 10,
+ 'november' => 11,
+ 'dezember' => 12,
+ // Italian
+ 'gennaio' => 1,
+ 'febbraio' => 2,
+ 'marzo' => 3,
+ 'aprile' => 4,
+ 'maggio' => 5,
+ 'giugno' => 6,
+ 'luglio' => 7,
+ 'agosto' => 8,
+ 'settembre' => 9,
+ 'ottobre' => 10,
+ 'novembre' => 11,
+ 'dicembre' => 12,
+ // Spanish
+ 'enero' => 1,
+ 'febrero' => 2,
+ 'marzo' => 3,
+ 'abril' => 4,
+ 'mayo' => 5,
+ 'junio' => 6,
+ 'julio' => 7,
+ 'agosto' => 8,
+ 'septiembre' => 9,
+ 'setiembre' => 9,
+ 'octubre' => 10,
+ 'noviembre' => 11,
+ 'diciembre' => 12,
+ // Finnish
+ 'tammikuu' => 1,
+ 'helmikuu' => 2,
+ 'maaliskuu' => 3,
+ 'huhtikuu' => 4,
+ 'toukokuu' => 5,
+ 'kesäkuu' => 6,
+ 'heinäkuu' => 7,
+ 'elokuu' => 8,
+ 'suuskuu' => 9,
+ 'lokakuu' => 10,
+ 'marras' => 11,
+ 'joulukuu' => 12,
+ // Hungarian
+ 'január' => 1,
+ 'február' => 2,
+ 'március' => 3,
+ 'április' => 4,
+ 'május' => 5,
+ 'június' => 6,
+ 'július' => 7,
+ 'augusztus' => 8,
+ 'szeptember' => 9,
+ 'október' => 10,
+ 'november' => 11,
+ 'december' => 12,
+ // Greek
+ 'Ιαν' => 1,
+ 'Φεβ' => 2,
+ 'Μάώ' => 3,
+ 'Μαώ' => 3,
+ 'ΑπÏ' => 4,
+ 'Μάι' => 5,
+ 'Μαϊ' => 5,
+ 'Μαι' => 5,
+ 'ΙοÏν' => 6,
+ 'Ιον' => 6,
+ 'ΙοÏλ' => 7,
+ 'Ιολ' => 7,
+ 'ΑÏγ' => 8,
+ 'Αυγ' => 8,
+ 'Σεπ' => 9,
+ 'Οκτ' => 10,
+ 'Îοέ' => 11,
+ 'Δεκ' => 12,
+ );
+
+ /**
+ * List of timezones, abbreviation => offset from UTC
+ *
+ * @access protected
+ * @var array
+ */
+ var $timezone = array(
+ 'ACDT' => 37800,
+ 'ACIT' => 28800,
+ 'ACST' => 34200,
+ 'ACT' => -18000,
+ 'ACWDT' => 35100,
+ 'ACWST' => 31500,
+ 'AEDT' => 39600,
+ 'AEST' => 36000,
+ 'AFT' => 16200,
+ 'AKDT' => -28800,
+ 'AKST' => -32400,
+ 'AMDT' => 18000,
+ 'AMT' => -14400,
+ 'ANAST' => 46800,
+ 'ANAT' => 43200,
+ 'ART' => -10800,
+ 'AZOST' => -3600,
+ 'AZST' => 18000,
+ 'AZT' => 14400,
+ 'BIOT' => 21600,
+ 'BIT' => -43200,
+ 'BOT' => -14400,
+ 'BRST' => -7200,
+ 'BRT' => -10800,
+ 'BST' => 3600,
+ 'BTT' => 21600,
+ 'CAST' => 18000,
+ 'CAT' => 7200,
+ 'CCT' => 23400,
+ 'CDT' => -18000,
+ 'CEDT' => 7200,
+ 'CET' => 3600,
+ 'CGST' => -7200,
+ 'CGT' => -10800,
+ 'CHADT' => 49500,
+ 'CHAST' => 45900,
+ 'CIST' => -28800,
+ 'CKT' => -36000,
+ 'CLDT' => -10800,
+ 'CLST' => -14400,
+ 'COT' => -18000,
+ 'CST' => -21600,
+ 'CVT' => -3600,
+ 'CXT' => 25200,
+ 'DAVT' => 25200,
+ 'DTAT' => 36000,
+ 'EADT' => -18000,
+ 'EAST' => -21600,
+ 'EAT' => 10800,
+ 'ECT' => -18000,
+ 'EDT' => -14400,
+ 'EEST' => 10800,
+ 'EET' => 7200,
+ 'EGT' => -3600,
+ 'EKST' => 21600,
+ 'EST' => -18000,
+ 'FJT' => 43200,
+ 'FKDT' => -10800,
+ 'FKST' => -14400,
+ 'FNT' => -7200,
+ 'GALT' => -21600,
+ 'GEDT' => 14400,
+ 'GEST' => 10800,
+ 'GFT' => -10800,
+ 'GILT' => 43200,
+ 'GIT' => -32400,
+ 'GST' => 14400,
+ 'GST' => -7200,
+ 'GYT' => -14400,
+ 'HAA' => -10800,
+ 'HAC' => -18000,
+ 'HADT' => -32400,
+ 'HAE' => -14400,
+ 'HAP' => -25200,
+ 'HAR' => -21600,
+ 'HAST' => -36000,
+ 'HAT' => -9000,
+ 'HAY' => -28800,
+ 'HKST' => 28800,
+ 'HMT' => 18000,
+ 'HNA' => -14400,
+ 'HNC' => -21600,
+ 'HNE' => -18000,
+ 'HNP' => -28800,
+ 'HNR' => -25200,
+ 'HNT' => -12600,
+ 'HNY' => -32400,
+ 'IRDT' => 16200,
+ 'IRKST' => 32400,
+ 'IRKT' => 28800,
+ 'IRST' => 12600,
+ 'JFDT' => -10800,
+ 'JFST' => -14400,
+ 'JST' => 32400,
+ 'KGST' => 21600,
+ 'KGT' => 18000,
+ 'KOST' => 39600,
+ 'KOVST' => 28800,
+ 'KOVT' => 25200,
+ 'KRAST' => 28800,
+ 'KRAT' => 25200,
+ 'KST' => 32400,
+ 'LHDT' => 39600,
+ 'LHST' => 37800,
+ 'LINT' => 50400,
+ 'LKT' => 21600,
+ 'MAGST' => 43200,
+ 'MAGT' => 39600,
+ 'MAWT' => 21600,
+ 'MDT' => -21600,
+ 'MESZ' => 7200,
+ 'MEZ' => 3600,
+ 'MHT' => 43200,
+ 'MIT' => -34200,
+ 'MNST' => 32400,
+ 'MSDT' => 14400,
+ 'MSST' => 10800,
+ 'MST' => -25200,
+ 'MUT' => 14400,
+ 'MVT' => 18000,
+ 'MYT' => 28800,
+ 'NCT' => 39600,
+ 'NDT' => -9000,
+ 'NFT' => 41400,
+ 'NMIT' => 36000,
+ 'NOVST' => 25200,
+ 'NOVT' => 21600,
+ 'NPT' => 20700,
+ 'NRT' => 43200,
+ 'NST' => -12600,
+ 'NUT' => -39600,
+ 'NZDT' => 46800,
+ 'NZST' => 43200,
+ 'OMSST' => 25200,
+ 'OMST' => 21600,
+ 'PDT' => -25200,
+ 'PET' => -18000,
+ 'PETST' => 46800,
+ 'PETT' => 43200,
+ 'PGT' => 36000,
+ 'PHOT' => 46800,
+ 'PHT' => 28800,
+ 'PKT' => 18000,
+ 'PMDT' => -7200,
+ 'PMST' => -10800,
+ 'PONT' => 39600,
+ 'PST' => -28800,
+ 'PWT' => 32400,
+ 'PYST' => -10800,
+ 'PYT' => -14400,
+ 'RET' => 14400,
+ 'ROTT' => -10800,
+ 'SAMST' => 18000,
+ 'SAMT' => 14400,
+ 'SAST' => 7200,
+ 'SBT' => 39600,
+ 'SCDT' => 46800,
+ 'SCST' => 43200,
+ 'SCT' => 14400,
+ 'SEST' => 3600,
+ 'SGT' => 28800,
+ 'SIT' => 28800,
+ 'SRT' => -10800,
+ 'SST' => -39600,
+ 'SYST' => 10800,
+ 'SYT' => 7200,
+ 'TFT' => 18000,
+ 'THAT' => -36000,
+ 'TJT' => 18000,
+ 'TKT' => -36000,
+ 'TMT' => 18000,
+ 'TOT' => 46800,
+ 'TPT' => 32400,
+ 'TRUT' => 36000,
+ 'TVT' => 43200,
+ 'TWT' => 28800,
+ 'UYST' => -7200,
+ 'UYT' => -10800,
+ 'UZT' => 18000,
+ 'VET' => -14400,
+ 'VLAST' => 39600,
+ 'VLAT' => 36000,
+ 'VOST' => 21600,
+ 'VUT' => 39600,
+ 'WAST' => 7200,
+ 'WAT' => 3600,
+ 'WDT' => 32400,
+ 'WEST' => 3600,
+ 'WFT' => 43200,
+ 'WIB' => 25200,
+ 'WIT' => 32400,
+ 'WITA' => 28800,
+ 'WKST' => 18000,
+ 'WST' => 28800,
+ 'YAKST' => 36000,
+ 'YAKT' => 32400,
+ 'YAPT' => 36000,
+ 'YEKST' => 21600,
+ 'YEKT' => 18000,
+ );
+
+ /**
+ * Cached PCRE for SimplePie_Parse_Date::$day
+ *
+ * @access protected
+ * @var string
+ */
+ var $day_pcre;
+
+ /**
+ * Cached PCRE for SimplePie_Parse_Date::$month
+ *
+ * @access protected
+ * @var string
+ */
+ var $month_pcre;
+
+ /**
+ * Array of user-added callback methods
+ *
+ * @access private
+ * @var array
+ */
+ var $built_in = array();
+
+ /**
+ * Array of user-added callback methods
+ *
+ * @access private
+ * @var array
+ */
+ var $user = array();
+
+ /**
+ * Create new SimplePie_Parse_Date object, and set self::day_pcre,
+ * self::month_pcre, and self::built_in
+ *
+ * @access private
+ */
+ function SimplePie_Parse_Date()
+ {
+ $this->day_pcre = '(' . implode(array_keys($this->day), '|') . ')';
+ $this->month_pcre = '(' . implode(array_keys($this->month), '|') . ')';
+
+ static $cache;
+ if (!isset($cache[get_class($this)]))
+ {
+ $all_methods = get_class_methods($this);
+
+ foreach ($all_methods as $method)
+ {
+ if (strtolower(substr($method, 0, 5)) === 'date_')
+ {
+ $cache[get_class($this)][] = $method;
+ }
+ }
+ }
+
+ foreach ($cache[get_class($this)] as $method)
+ {
+ $this->built_in[] = $method;
+ }
+ }
+
+ /**
+ * Get the object
+ *
+ * @access public
+ */
+ function get()
+ {
+ static $object;
+ if (!$object)
+ {
+ $object =& new SimplePie_Parse_Date;
+ }
+ return $object;
+ }
+
+ /**
+ * Parse a date
+ *
+ * @final
+ * @access public
+ * @param string $date Date to parse
+ * @return int Timestamp corresponding to date string, or false on failure
+ */
+ function parse($date)
+ {
+ foreach ($this->user as $method)
+ {
+ if (($returned = call_user_func($method, $date)) !== false)
+ {
+ return $returned;
+ }
+ }
+
+ foreach ($this->built_in as $method)
+ {
+ if (($returned = call_user_func(array(&$this, $method), $date)) !== false)
+ {
+ return $returned;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Add a callback method to parse a date
+ *
+ * @final
+ * @access public
+ * @param callback $callback
+ */
+ function add_callback($callback)
+ {
+ if (is_callable($callback))
+ {
+ $this->user[] = $callback;
+ }
+ else
+ {
+ trigger_error('User-supplied function must be a valid callback', E_USER_WARNING);
+ }
+ }
+
+ /**
+ * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as
+ * well as allowing any of upper or lower case "T", horizontal tabs, or
+ * spaces to be used as the time seperator (including more than one))
+ *
+ * @access protected
+ * @return int Timestamp
+ */
+ function date_w3cdtf($date)
+ {
+ static $pcre;
+ if (!$pcre)
+ {
+ $year = '([0-9]{4})';
+ $month = $day = $hour = $minute = $second = '([0-9]{2})';
+ $decimal = '([0-9]*)';
+ $zone = '(?:(Z)|([+\-])([0-9]{1,2}):?([0-9]{1,2}))';
+ $pcre = '/^' . $year . '(?:-?' . $month . '(?:-?' . $day . '(?:[Tt\x09\x20]+' . $hour . '(?::?' . $minute . '(?::?' . $second . '(?:.' . $decimal . ')?)?)?' . $zone . ')?)?)?$/';
+ }
+ if (preg_match($pcre, $date, $match))
+ {
+ /*
+ Capturing subpatterns:
+ 1: Year
+ 2: Month
+ 3: Day
+ 4: Hour
+ 5: Minute
+ 6: Second
+ 7: Decimal fraction of a second
+ 8: Zulu
+ 9: Timezone ±
+ 10: Timezone hours
+ 11: Timezone minutes
+ */
+
+ // Fill in empty matches
+ for ($i = count($match); $i <= 3; $i++)
+ {
+ $match[$i] = '1';
+ }
+
+ for ($i = count($match); $i <= 7; $i++)
+ {
+ $match[$i] = '0';
+ }
+
+ // Numeric timezone
+ if (isset($match[9]) && $match[9] !== '')
+ {
+ $timezone = $match[10] * 3600;
+ $timezone += $match[11] * 60;
+ if ($match[9] === '-')
+ {
+ $timezone = 0 - $timezone;
+ }
+ }
+ else
+ {
+ $timezone = 0;
+ }
+
+ // Convert the number of seconds to an integer, taking decimals into account
+ $second = round($match[6] + $match[7] / pow(10, strlen($match[7])));
+
+ return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Remove RFC822 comments
+ *
+ * @access protected
+ * @param string $data Data to strip comments from
+ * @return string Comment stripped string
+ */
+ function remove_rfc2822_comments($string)
+ {
+ $string = (string) $string;
+ $position = 0;
+ $length = strlen($string);
+ $depth = 0;
+
+ $output = '';
+
+ while ($position < $length && ($pos = strpos($string, '(', $position)) !== false)
+ {
+ $output .= substr($string, $position, $pos - $position);
+ $position = $pos + 1;
+ if ($string[$pos - 1] !== '\\')
+ {
+ $depth++;
+ while ($depth && $position < $length)
+ {
+ $position += strcspn($string, '()', $position);
+ if ($string[$position - 1] === '\\')
+ {
+ $position++;
+ continue;
+ }
+ elseif (isset($string[$position]))
+ {
+ switch ($string[$position])
+ {
+ case '(':
+ $depth++;
+ break;
+
+ case ')':
+ $depth--;
+ break;
+ }
+ $position++;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+ else
+ {
+ $output .= '(';
+ }
+ }
+ $output .= substr($string, $position);
+
+ return $output;
+ }
+
+ /**
+ * Parse RFC2822's date format
+ *
+ * @access protected
+ * @return int Timestamp
+ */
+ function date_rfc2822($date)
+ {
+ static $pcre;
+ if (!$pcre)
+ {
+ $wsp = '[\x09\x20]';
+ $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)';
+ $optional_fws = $fws . '?';
+ $day_name = $this->day_pcre;
+ $month = $this->month_pcre;
+ $day = '([0-9]{1,2})';
+ $hour = $minute = $second = '([0-9]{2})';
+ $year = '([0-9]{2,4})';
+ $num_zone = '([+\-])([0-9]{2})([0-9]{2})';
+ $character_zone = '([A-Z]{1,5})';
+ $zone = '(?:' . $num_zone . '|' . $character_zone . ')';
+ $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i';
+ }
+ if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match))
+ {
+ /*
+ Capturing subpatterns:
+ 1: Day name
+ 2: Day
+ 3: Month
+ 4: Year
+ 5: Hour
+ 6: Minute
+ 7: Second
+ 8: Timezone ±
+ 9: Timezone hours
+ 10: Timezone minutes
+ 11: Alphabetic timezone
+ */
+
+ // Find the month number
+ $month = $this->month[strtolower($match[3])];
+
+ // Numeric timezone
+ if ($match[8] !== '')
+ {
+ $timezone = $match[9] * 3600;
+ $timezone += $match[10] * 60;
+ if ($match[8] === '-')
+ {
+ $timezone = 0 - $timezone;
+ }
+ }
+ // Character timezone
+ elseif (isset($this->timezone[strtoupper($match[11])]))
+ {
+ $timezone = $this->timezone[strtoupper($match[11])];
+ }
+ // Assume everything else to be -0000
+ else
+ {
+ $timezone = 0;
+ }
+
+ // Deal with 2/3 digit years
+ if ($match[4] < 50)
+ {
+ $match[4] += 2000;
+ }
+ elseif ($match[4] < 1000)
+ {
+ $match[4] += 1900;
+ }
+
+ // Second is optional, if it is empty set it to zero
+ if ($match[7] !== '')
+ {
+ $second = $match[7];
+ }
+ else
+ {
+ $second = 0;
+ }
+
+ return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Parse RFC850's date format
+ *
+ * @access protected
+ * @return int Timestamp
+ */
+ function date_rfc850($date)
+ {
+ static $pcre;
+ if (!$pcre)
+ {
+ $space = '[\x09\x20]+';
+ $day_name = $this->day_pcre;
+ $month = $this->month_pcre;
+ $day = '([0-9]{1,2})';
+ $year = $hour = $minute = $second = '([0-9]{2})';
+ $zone = '([A-Z]{1,5})';
+ $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i';
+ }
+ if (preg_match($pcre, $date, $match))
+ {
+ /*
+ Capturing subpatterns:
+ 1: Day name
+ 2: Day
+ 3: Month
+ 4: Year
+ 5: Hour
+ 6: Minute
+ 7: Second
+ 8: Timezone
+ */
+
+ // Month
+ $month = $this->month[strtolower($match[3])];
+
+ // Character timezone
+ if (isset($this->timezone[strtoupper($match[8])]))
+ {
+ $timezone = $this->timezone[strtoupper($match[8])];
+ }
+ // Assume everything else to be -0000
+ else
+ {
+ $timezone = 0;
+ }
+
+ // Deal with 2 digit year
+ if ($match[4] < 50)
+ {
+ $match[4] += 2000;
+ }
+ else
+ {
+ $match[4] += 1900;
+ }
+
+ return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Parse C99's asctime()'s date format
+ *
+ * @access protected
+ * @return int Timestamp
+ */
+ function date_asctime($date)
+ {
+ static $pcre;
+ if (!$pcre)
+ {
+ $space = '[\x09\x20]+';
+ $wday_name = $this->day_pcre;
+ $mon_name = $this->month_pcre;
+ $day = '([0-9]{1,2})';
+ $hour = $sec = $min = '([0-9]{2})';
+ $year = '([0-9]{4})';
+ $terminator = '\x0A?\x00?';
+ $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i';
+ }
+ if (preg_match($pcre, $date, $match))
+ {
+ /*
+ Capturing subpatterns:
+ 1: Day name
+ 2: Month
+ 3: Day
+ 4: Hour
+ 5: Minute
+ 6: Second
+ 7: Year
+ */
+
+ $month = $this->month[strtolower($match[2])];
+ return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Parse dates using strtotime()
+ *
+ * @access protected
+ * @return int Timestamp
+ */
+ function date_strtotime($date)
+ {
+ $strtotime = strtotime($date);
+ if ($strtotime === -1 || $strtotime === false)
+ {
+ return false;
+ }
+ else
+ {
+ return $strtotime;
+ }
+ }
+}
+
+/**
+ * Content-type sniffing
+ *
+ * @package SimplePie
+ */
+class SimplePie_Content_Type_Sniffer
+{
+ /**
+ * File object
+ *
+ * @var SimplePie_File
+ * @access private
+ */
+ var $file;
+
+ /**
+ * Create an instance of the class with the input file
+ *
+ * @access public
+ * @param SimplePie_Content_Type_Sniffer $file Input file
+ */
+ function SimplePie_Content_Type_Sniffer($file)
+ {
+ $this->file = $file;
+ }
+
+ /**
+ * Get the Content-Type of the specified file
+ *
+ * @access public
+ * @return string Actual Content-Type
+ */
+ function get_type()
+ {
+ if (isset($this->file->headers['content-type']))
+ {
+ if (!isset($this->file->headers['content-encoding'])
+ && ($this->file->headers['content-type'] === 'text/plain'
+ || $this->file->headers['content-type'] === 'text/plain; charset=ISO-8859-1'
+ || $this->file->headers['content-type'] === 'text/plain; charset=iso-8859-1'))
+ {
+ return $this->text_or_binary();
+ }
+
+ if (($pos = strpos($this->file->headers['content-type'], ';')) !== false)
+ {
+ $official = substr($this->file->headers['content-type'], 0, $pos);
+ }
+ else
+ {
+ $official = $this->file->headers['content-type'];
+ }
+ $official = strtolower($official);
+
+ if ($official === 'unknown/unknown'
+ || $official === 'application/unknown')
+ {
+ return $this->unknown();
+ }
+ elseif (substr($official, -4) === '+xml'
+ || $official === 'text/xml'
+ || $official === 'application/xml')
+ {
+ return $official;
+ }
+ elseif (substr($official, 0, 6) === 'image/')
+ {
+ if ($return = $this->image())
+ {
+ return $return;
+ }
+ else
+ {
+ return $official;
+ }
+ }
+ elseif ($official === 'text/html')
+ {
+ return $this->feed_or_html();
+ }
+ else
+ {
+ return $official;
+ }
+ }
+ else
+ {
+ return $this->unknown();
+ }
+ }
+
+ /**
+ * Sniff text or binary
+ *
+ * @access private
+ * @return string Actual Content-Type
+ */
+ function text_or_binary()
+ {
+ if (substr($this->file->body, 0, 2) === "\xFE\xFF"
+ || substr($this->file->body, 0, 2) === "\xFF\xFE"
+ || substr($this->file->body, 0, 4) === "\x00\x00\xFE\xFF"
+ || substr($this->file->body, 0, 3) === "\xEF\xBB\xBF")
+ {
+ return 'text/plain';
+ }
+ elseif (preg_match('/[\x00-\x08\x0E-\x1A\x1C-\x1F]/', $this->file->body))
+ {
+ return 'application/octect-stream';
+ }
+ else
+ {
+ return 'text/plain';
+ }
+ }
+
+ /**
+ * Sniff unknown
+ *
+ * @access private
+ * @return string Actual Content-Type
+ */
+ function unknown()
+ {
+ $ws = strspn($this->file->body, "\x09\x0A\x0B\x0C\x0D\x20");
+ if (strtolower(substr($this->file->body, $ws, 14)) === '<!doctype html'
+ || strtolower(substr($this->file->body, $ws, 5)) === '<html'
+ || strtolower(substr($this->file->body, $ws, 7)) === '<script')
+ {
+ return 'text/html';
+ }
+ elseif (substr($this->file->body, 0, 5) === '%PDF-')
+ {
+ return 'application/pdf';
+ }
+ elseif (substr($this->file->body, 0, 11) === '%!PS-Adobe-')
+ {
+ return 'application/postscript';
+ }
+ elseif (substr($this->file->body, 0, 6) === 'GIF87a'
+ || substr($this->file->body, 0, 6) === 'GIF89a')
+ {
+ return 'image/gif';
+ }
+ elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A")
+ {
+ return 'image/png';
+ }
+ elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF")
+ {
+ return 'image/jpeg';
+ }
+ elseif (substr($this->file->body, 0, 2) === "\x42\x4D")
+ {
+ return 'image/bmp';
+ }
+ else
+ {
+ return $this->text_or_binary();
+ }
+ }
+
+ /**
+ * Sniff images
+ *
+ * @access private
+ * @return string Actual Content-Type
+ */
+ function image()
+ {
+ if (substr($this->file->body, 0, 6) === 'GIF87a'
+ || substr($this->file->body, 0, 6) === 'GIF89a')
+ {
+ return 'image/gif';
+ }
+ elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A")
+ {
+ return 'image/png';
+ }
+ elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF")
+ {
+ return 'image/jpeg';
+ }
+ elseif (substr($this->file->body, 0, 2) === "\x42\x4D")
+ {
+ return 'image/bmp';
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ /**
+ * Sniff HTML
+ *
+ * @access private
+ * @return string Actual Content-Type
+ */
+ function feed_or_html()
+ {
+ $len = strlen($this->file->body);
+ $pos = strspn($this->file->body, "\x09\x0A\x0D\x20");
+
+ while ($pos < $len)
+ {
+ switch ($this->file->body[$pos])
+ {
+ case "\x09":
+ case "\x0A":
+ case "\x0D":
+ case "\x20":
+ $pos += strspn($this->file->body, "\x09\x0A\x0D\x20", $pos);
+ continue 2;
+
+ case '<':
+ $pos++;
+ break;
+
+ default:
+ return 'text/html';
+ }
+
+ if (substr($this->file->body, $pos, 3) === '!--')
+ {
+ $pos += 3;
+ if ($pos < $len && ($pos = strpos($this->file->body, '-->', $pos)) !== false)
+ {
+ $pos += 3;
+ }
+ else
+ {
+ return 'text/html';
+ }
+ }
+ elseif (substr($this->file->body, $pos, 1) === '!')
+ {
+ if ($pos < $len && ($pos = strpos($this->file->body, '>', $pos)) !== false)
+ {
+ $pos++;
+ }
+ else
+ {
+ return 'text/html';
+ }
+ }
+ elseif (substr($this->file->body, $pos, 1) === '?')
+ {
+ if ($pos < $len && ($pos = strpos($this->file->body, '?>', $pos)) !== false)
+ {
+ $pos += 2;
+ }
+ else
+ {
+ return 'text/html';
+ }
+ }
+ elseif (substr($this->file->body, $pos, 3) === 'rss'
+ || substr($this->file->body, $pos, 7) === 'rdf:RDF')
+ {
+ return 'application/rss+xml';
+ }
+ elseif (substr($this->file->body, $pos, 4) === 'feed')
+ {
+ return 'application/atom+xml';
+ }
+ else
+ {
+ return 'text/html';
+ }
+ }
+
+ return 'text/html';
+ }
+}
+
+/**
+ * Parses the XML Declaration
+ *
+ * @package SimplePie
+ */
+class SimplePie_XML_Declaration_Parser
+{
+ /**
+ * XML Version
+ *
+ * @access public
+ * @var string
+ */
+ var $version = '1.0';
+
+ /**
+ * Encoding
+ *
+ * @access public
+ * @var string
+ */
+ var $encoding = 'UTF-8';
+
+ /**
+ * Standalone
+ *
+ * @access public
+ * @var bool
+ */
+ var $standalone = false;
+
+ /**
+ * Current state of the state machine
+ *
+ * @access private
+ * @var string
+ */
+ var $state = 'before_version_name';
+
+ /**
+ * Input data
+ *
+ * @access private
+ * @var string
+ */
+ var $data = '';
+
+ /**
+ * Input data length (to avoid calling strlen() everytime this is needed)
+ *
+ * @access private
+ * @var int
+ */
+ var $data_length = 0;
+
+ /**
+ * Current position of the pointer
+ *
+ * @var int
+ * @access private
+ */
+ var $position = 0;
+
+ /**
+ * Create an instance of the class with the input data
+ *
+ * @access public
+ * @param string $data Input data
+ */
+ function SimplePie_XML_Declaration_Parser($data)
+ {
+ $this->data = $data;
+ $this->data_length = strlen($this->data);
+ }
+
+ /**
+ * Parse the input data
+ *
+ * @access public
+ * @return bool true on success, false on failure
+ */
+ function parse()
+ {
+ while ($this->state && $this->state !== 'emit' && $this->has_data())
+ {
+ $state = $this->state;
+ $this->$state();
+ }
+ $this->data = '';
+ if ($this->state === 'emit')
+ {
+ return true;
+ }
+ else
+ {
+ $this->version = '';
+ $this->encoding = '';
+ $this->standalone = '';
+ return false;
+ }
+ }
+
+ /**
+ * Check whether there is data beyond the pointer
+ *
+ * @access private
+ * @return bool true if there is further data, false if not
+ */
+ function has_data()
+ {
+ return (bool) ($this->position < $this->data_length);
+ }
+
+ /**
+ * Advance past any whitespace
+ *
+ * @return int Number of whitespace characters passed
+ */
+ function skip_whitespace()
+ {
+ $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position);
+ $this->position += $whitespace;
+ return $whitespace;
+ }
+
+ /**
+ * Read value
+ */
+ function get_value()
+ {
+ $quote = substr($this->data, $this->position, 1);
+ if ($quote === '"' || $quote === "'")
+ {
+ $this->position++;
+ $len = strcspn($this->data, $quote, $this->position);
+ if ($this->has_data())
+ {
+ $value = substr($this->data, $this->position, $len);
+ $this->position += $len + 1;
+ return $value;
+ }
+ }
+ return false;
+ }
+
+ function before_version_name()
+ {
+ if ($this->skip_whitespace())
+ {
+ $this->state = 'version_name';
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ function version_name()
+ {
+ if (substr($this->data, $this->position, 7) === 'version')
+ {
+ $this->position += 7;
+ $this->skip_whitespace();
+ $this->state = 'version_equals';
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ function version_equals()
+ {
+ if (substr($this->data, $this->position, 1) === '=')
+ {
+ $this->position++;
+ $this->skip_whitespace();
+ $this->state = 'version_value';
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ function version_value()
+ {
+ if ($this->version = $this->get_value())
+ {
+ $this->skip_whitespace();
+ if ($this->has_data())
+ {
+ $this->state = 'encoding_name';
+ }
+ else
+ {
+ $this->state = 'emit';
+ }
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ function encoding_name()
+ {
+ if (substr($this->data, $this->position, 8) === 'encoding')
+ {
+ $this->position += 8;
+ $this->skip_whitespace();
+ $this->state = 'encoding_equals';
+ }
+ else
+ {
+ $this->state = 'standalone_name';
+ }
+ }
+
+ function encoding_equals()
+ {
+ if (substr($this->data, $this->position, 1) === '=')
+ {
+ $this->position++;
+ $this->skip_whitespace();
+ $this->state = 'encoding_value';
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ function encoding_value()
+ {
+ if ($this->encoding = $this->get_value())
+ {
+ $this->skip_whitespace();
+ if ($this->has_data())
+ {
+ $this->state = 'standalone_name';
+ }
+ else
+ {
+ $this->state = 'emit';
+ }
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ function standalone_name()
+ {
+ if (substr($this->data, $this->position, 10) === 'standalone')
+ {
+ $this->position += 10;
+ $this->skip_whitespace();
+ $this->state = 'standalone_equals';
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ function standalone_equals()
+ {
+ if (substr($this->data, $this->position, 1) === '=')
+ {
+ $this->position++;
+ $this->skip_whitespace();
+ $this->state = 'standalone_value';
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+
+ function standalone_value()
+ {
+ if ($standalone = $this->get_value())
+ {
+ switch ($standalone)
+ {
+ case 'yes':
+ $this->standalone = true;
+ break;
+
+ case 'no':
+ $this->standalone = false;
+ break;
+
+ default:
+ $this->state = false;
+ return;
+ }
+
+ $this->skip_whitespace();
+ if ($this->has_data())
+ {
+ $this->state = false;
+ }
+ else
+ {
+ $this->state = 'emit';
+ }
+ }
+ else
+ {
+ $this->state = false;
+ }
+ }
+}
+
+class SimplePie_Locator
+{
+ var $useragent;
+ var $timeout;
+ var $file;
+ var $local = array();
+ var $elsewhere = array();
+ var $file_class = 'SimplePie_File';
+ var $cached_entities = array();
+ var $http_base;
+ var $base;
+ var $base_location = 0;
+ var $checked_feeds = 0;
+ var $max_checked_feeds = 10;
+ var $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer';
+
+ function SimplePie_Locator(&$file, $timeout = 10, $useragent = null, $file_class = 'SimplePie_File', $max_checked_feeds = 10, $content_type_sniffer_class = 'SimplePie_Content_Type_Sniffer')
+ {
+ $this->file =& $file;
+ $this->file_class = $file_class;
+ $this->useragent = $useragent;
+ $this->timeout = $timeout;
+ $this->max_checked_feeds = $max_checked_feeds;
+ $this->content_type_sniffer_class = $content_type_sniffer_class;
+ }
+
+ function find($type = SIMPLEPIE_LOCATOR_ALL, &$working)
+ {
+ if ($this->is_feed($this->file))
+ {
+ return $this->file;
+ }
+
+ if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
+ {
+ $sniffer =& new $this->content_type_sniffer_class($this->file);
+ if ($sniffer->get_type() !== 'text/html')
+ {
+ return null;
+ }
+ }
+
+ if ($type & ~SIMPLEPIE_LOCATOR_NONE)
+ {
+ $this->get_base();
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery())
+ {
+ return $working[0];
+ }
+
+ if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links())
+ {
+ if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local))
+ {
+ return $working;
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local))
+ {
+ return $working;
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere))
+ {
+ return $working;
+ }
+
+ if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere))
+ {
+ return $working;
+ }
+ }
+ return null;
+ }
+
+ function is_feed(&$file)
+ {
+ if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
+ {
+ $sniffer =& new $this->content_type_sniffer_class($file);
+ $sniffed = $sniffer->get_type();
+ if (in_array($sniffed, array('application/rss+xml', 'application/rdf+xml', 'text/rdf', 'application/atom+xml', 'text/xml', 'application/xml')))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ function get_base()
+ {
+ $this->http_base = $this->file->url;
+ $this->base = $this->http_base;
+ $elements = SimplePie_Misc::get_element('base', $this->file->body);
+ foreach ($elements as $element)
+ {
+ if ($element['attribs']['href']['data'] !== '')
+ {
+ $this->base = SimplePie_Misc::absolutize_url(trim($element['attribs']['href']['data']), $this->http_base);
+ $this->base_location = $element['offset'];
+ break;
+ }
+ }
+ }
+
+ function autodiscovery()
+ {
+ $links = array_merge(SimplePie_Misc::get_element('link', $this->file->body), SimplePie_Misc::get_element('a', $this->file->body), SimplePie_Misc::get_element('area', $this->file->body));
+ $done = array();
+ $feeds = array();
+ foreach ($links as $link)
+ {
+ if ($this->checked_feeds === $this->max_checked_feeds)
+ {
+ break;
+ }
+ if (isset($link['attribs']['href']['data']) && isset($link['attribs']['rel']['data']))
+ {
+ $rel = array_unique(SimplePie_Misc::space_seperated_tokens(strtolower($link['attribs']['rel']['data'])));
+
+ if ($this->base_location < $link['offset'])
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base);
+ }
+ else
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base);
+ }
+
+ if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !empty($link['attribs']['type']['data']) && in_array(strtolower(SimplePie_Misc::parse_mime($link['attribs']['type']['data'])), array('application/rss+xml', 'application/atom+xml'))) && !isset($feeds[$href]))
+ {
+ $this->checked_feeds++;
+ $feed =& new $this->file_class($href, $this->timeout, 5, null, $this->useragent);
+ if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
+ {
+ $feeds[$href] = $feed;
+ }
+ }
+ $done[] = $href;
+ }
+ }
+
+ if (!empty($feeds))
+ {
+ return array_values($feeds);
+ }
+ else {
+ return null;
+ }
+ }
+
+ function get_links()
+ {
+ $links = SimplePie_Misc::get_element('a', $this->file->body);
+ foreach ($links as $link)
+ {
+ if (isset($link['attribs']['href']['data']))
+ {
+ $href = trim($link['attribs']['href']['data']);
+ $parsed = SimplePie_Misc::parse_url($href);
+ if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme']))
+ {
+ if ($this->base_location < $link['offset'])
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->base);
+ }
+ else
+ {
+ $href = SimplePie_Misc::absolutize_url(trim($link['attribs']['href']['data']), $this->http_base);
+ }
+
+ $current = SimplePie_Misc::parse_url($this->file->url);
+
+ if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority'])
+ {
+ $this->local[] = $href;
+ }
+ else
+ {
+ $this->elsewhere[] = $href;
+ }
+ }
+ }
+ }
+ $this->local = array_unique($this->local);
+ $this->elsewhere = array_unique($this->elsewhere);
+ if (!empty($this->local) || !empty($this->elsewhere))
+ {
+ return true;
+ }
+ return null;
+ }
+
+ function extension(&$array)
+ {
+ foreach ($array as $key => $value)
+ {
+ if ($this->checked_feeds === $this->max_checked_feeds)
+ {
+ break;
+ }
+ if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml')))
+ {
+ $this->checked_feeds++;
+ $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent);
+ if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
+ {
+ return $feed;
+ }
+ else
+ {
+ unset($array[$key]);
+ }
+ }
+ }
+ return null;
+ }
+
+ function body(&$array)
+ {
+ foreach ($array as $key => $value)
+ {
+ if ($this->checked_feeds === $this->max_checked_feeds)
+ {
+ break;
+ }
+ if (preg_match('/(rss|rdf|atom|xml)/i', $value))
+ {
+ $this->checked_feeds++;
+ $feed =& new $this->file_class($value, $this->timeout, 5, null, $this->useragent);
+ if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
+ {
+ return $feed;
+ }
+ else
+ {
+ unset($array[$key]);
+ }
+ }
+ }
+ return null;
+ }
+}
+
+class SimplePie_Parser
+{
+ var $error_code;
+ var $error_string;
+ var $current_line;
+ var $current_column;
+ var $current_byte;
+ var $separator = ' ';
+ var $namespace = array('');
+ var $element = array('');
+ var $xml_base = array('');
+ var $xml_base_explicit = array(false);
+ var $xml_lang = array('');
+ var $data = array();
+ var $datas = array(array());
+ var $current_xhtml_construct = -1;
+ var $encoding;
+
+ function parse(&$data, $encoding)
+ {
+ // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character
+ if (strtoupper($encoding) === 'US-ASCII')
+ {
+ $this->encoding = 'UTF-8';
+ }
+ else
+ {
+ $this->encoding = $encoding;
+ }
+
+ // Strip BOM:
+ // UTF-32 Big Endian BOM
+ if (substr($data, 0, 4) === "\x00\x00\xFE\xFF")
+ {
+ $data = substr($data, 4);
+ }
+ // UTF-32 Little Endian BOM
+ elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00")
+ {
+ $data = substr($data, 4);
+ }
+ // UTF-16 Big Endian BOM
+ elseif (substr($data, 0, 2) === "\xFE\xFF")
+ {
+ $data = substr($data, 2);
+ }
+ // UTF-16 Little Endian BOM
+ elseif (substr($data, 0, 2) === "\xFF\xFE")
+ {
+ $data = substr($data, 2);
+ }
+ // UTF-8 BOM
+ elseif (substr($data, 0, 3) === "\xEF\xBB\xBF")
+ {
+ $data = substr($data, 3);
+ }
+
+ if (substr($data, 0, 5) === '<?xml' && strspn(substr($data, 5, 1), "\x09\x0A\x0D\x20") && ($pos = strpos($data, '?>')) !== false)
+ {
+ $declaration =& new SimplePie_XML_Declaration_Parser(substr($data, 5, $pos - 5));
+ if ($declaration->parse())
+ {
+ $data = substr($data, $pos + 2);
+ $data = '<?xml version="' . $declaration->version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' . $data;
+ }
+ else
+ {
+ $this->error_string = 'SimplePie bug! Please report this!';
+ return false;
+ }
+ }
+
+ $return = true;
+
+ static $xml_is_sane = null;
+ if ($xml_is_sane === null)
+ {
+ $parser_check = xml_parser_create();
+ xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
+ xml_parser_free($parser_check);
+ $xml_is_sane = isset($values[0]['value']);
+ }
+
+ // Create the parser
+ if ($xml_is_sane)
+ {
+ $xml = xml_parser_create_ns($this->encoding, $this->separator);
+ xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1);
+ xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0);
+ xml_set_object($xml, $this);
+ xml_set_character_data_handler($xml, 'cdata');
+ xml_set_element_handler($xml, 'tag_open', 'tag_close');
+
+ // Parse!
+ if (!xml_parse($xml, $data, true))
+ {
+ $this->error_code = xml_get_error_code($xml);
+ $this->error_string = xml_error_string($this->error_code);
+ $return = false;
+ }
+ $this->current_line = xml_get_current_line_number($xml);
+ $this->current_column = xml_get_current_column_number($xml);
+ $this->current_byte = xml_get_current_byte_index($xml);
+ xml_parser_free($xml);
+ return $return;
+ }
+ else
+ {
+ libxml_clear_errors();
+ $xml =& new XMLReader();
+ $xml->xml($data);
+ while (@$xml->read())
+ {
+ switch ($xml->nodeType)
+ {
+
+ case constant('XMLReader::END_ELEMENT'):
+ if ($xml->namespaceURI !== '')
+ {
+ $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
+ }
+ else
+ {
+ $tagName = $xml->localName;
+ }
+ $this->tag_close(null, $tagName);
+ break;
+ case constant('XMLReader::ELEMENT'):
+ $empty = $xml->isEmptyElement;
+ if ($xml->namespaceURI !== '')
+ {
+ $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
+ }
+ else
+ {
+ $tagName = $xml->localName;
+ }
+ $attributes = array();
+ while ($xml->moveToNextAttribute())
+ {
+ if ($xml->namespaceURI !== '')
+ {
+ $attrName = $xml->namespaceURI . $this->separator . $xml->localName;
+ }
+ else
+ {
+ $attrName = $xml->localName;
+ }
+ $attributes[$attrName] = $xml->value;
+ }
+ $this->tag_open(null, $tagName, $attributes);
+ if ($empty)
+ {
+ $this->tag_close(null, $tagName);
+ }
+ break;
+ case constant('XMLReader::TEXT'):
+
+ case constant('XMLReader::CDATA'):
+ $this->cdata(null, $xml->value);
+ break;
+ }
+ }
+ if ($error = libxml_get_last_error())
+ {
+ $this->error_code = $error->code;
+ $this->error_string = $error->message;
+ $this->current_line = $error->line;
+ $this->current_column = $error->column;
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
+ }
+
+ function get_error_code()
+ {
+ return $this->error_code;
+ }
+
+ function get_error_string()
+ {
+ return $this->error_string;
+ }
+
+ function get_current_line()
+ {
+ return $this->current_line;
+ }
+
+ function get_current_column()
+ {
+ return $this->current_column;
+ }
+
+ function get_current_byte()
+ {
+ return $this->current_byte;
+ }
+
+ function get_data()
+ {
+ return $this->data;
+ }
+
+ function tag_open($parser, $tag, $attributes)
+ {
+ list($this->namespace[], $this->element[]) = $this->split_ns($tag);
+
+ $attribs = array();
+ foreach ($attributes as $name => $value)
+ {
+ list($attrib_namespace, $attribute) = $this->split_ns($name);
+ $attribs[$attrib_namespace][$attribute] = $value;
+ }
+
+ if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base']))
+ {
+ $this->xml_base[] = SimplePie_Misc::absolutize_url($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base));
+ $this->xml_base_explicit[] = true;
+ }
+ else
+ {
+ $this->xml_base[] = end($this->xml_base);
+ $this->xml_base_explicit[] = end($this->xml_base_explicit);
+ }
+
+ if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang']))
+ {
+ $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang'];
+ }
+ else
+ {
+ $this->xml_lang[] = end($this->xml_lang);
+ }
+
+ if ($this->current_xhtml_construct >= 0)
+ {
+ $this->current_xhtml_construct++;
+ if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML)
+ {
+ $this->data['data'] .= '<' . end($this->element);
+ if (isset($attribs['']))
+ {
+ foreach ($attribs[''] as $name => $value)
+ {
+ $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"';
+ }
+ }
+ $this->data['data'] .= '>';
+ }
+ }
+ else
+ {
+ $this->datas[] =& $this->data;
+ $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][];
+ $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang));
+ if ((end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] === 'xml')
+ || (end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] === 'xhtml'))
+ {
+ $this->current_xhtml_construct = 0;
+ }
+ }
+ }
+
+ function cdata($parser, $cdata)
+ {
+ if ($this->current_xhtml_construct >= 0)
+ {
+ $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding);
+ }
+ else
+ {
+ $this->data['data'] .= $cdata;
+ }
+ }
+
+ function tag_close($parser, $tag)
+ {
+ if ($this->current_xhtml_construct >= 0)
+ {
+ $this->current_xhtml_construct--;
+ if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param')))
+ {
+ $this->data['data'] .= '</' . end($this->element) . '>';
+ }
+ }
+ if ($this->current_xhtml_construct === -1)
+ {
+ $this->data =& $this->datas[count($this->datas) - 1];
+ array_pop($this->datas);
+ }
+
+ array_pop($this->element);
+ array_pop($this->namespace);
+ array_pop($this->xml_base);
+ array_pop($this->xml_base_explicit);
+ array_pop($this->xml_lang);
+ }
+
+ function split_ns($string)
+ {
+ static $cache = array();
+ if (!isset($cache[$string]))
+ {
+ if ($pos = strpos($string, $this->separator))
+ {
+ static $separator_length;
+ if (!$separator_length)
+ {
+ $separator_length = strlen($this->separator);
+ }
+ $namespace = substr($string, 0, $pos);
+ $local_name = substr($string, $pos + $separator_length);
+ if (strtolower($namespace) === SIMPLEPIE_NAMESPACE_ITUNES)
+ {
+ $namespace = SIMPLEPIE_NAMESPACE_ITUNES;
+ }
+
+ // Normalize the Media RSS namespaces
+ if ($namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG)
+ {
+ $namespace = SIMPLEPIE_NAMESPACE_MEDIARSS;
+ }
+ $cache[$string] = array($namespace, $local_name);
+ }
+ else
+ {
+ $cache[$string] = array('', $string);
+ }
+ }
+ return $cache[$string];
+ }
+}
+
+/**
+ * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags
+ */
+class SimplePie_Sanitize
+{
+ // Private vars
+ var $base;
+
+ // Options
+ var $remove_div = true;
+ var $image_handler = '';
+ var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
+ var $encode_instead_of_strip = false;
+ var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
+ var $strip_comments = false;
+ var $output_encoding = 'UTF-8';
+ var $enable_cache = true;
+ var $cache_location = './cache';
+ var $cache_name_function = 'md5';
+ var $cache_class = 'SimplePie_Cache';
+ var $file_class = 'SimplePie_File';
+ var $timeout = 10;
+ var $useragent = '';
+ var $force_fsockopen = false;
+
+ var $replace_url_attributes = array(
+ 'a' => 'href',
+ 'area' => 'href',
+ 'blockquote' => 'cite',
+ 'del' => 'cite',
+ 'form' => 'action',
+ 'img' => array('longdesc', 'src'),
+ 'input' => 'src',
+ 'ins' => 'cite',
+ 'q' => 'cite'
+ );
+
+ function remove_div($enable = true)
+ {
+ $this->remove_div = (bool) $enable;
+ }
+
+ function set_image_handler($page = false)
+ {
+ if ($page)
+ {
+ $this->image_handler = (string) $page;
+ }
+ else
+ {
+ $this->image_handler = false;
+ }
+ }
+
+ function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache')
+ {
+ if (isset($enable_cache))
+ {
+ $this->enable_cache = (bool) $enable_cache;
+ }
+
+ if ($cache_location)
+ {
+ $this->cache_location = (string) $cache_location;
+ }
+
+ if ($cache_name_function)
+ {
+ $this->cache_name_function = (string) $cache_name_function;
+ }
+
+ if ($cache_class)
+ {
+ $this->cache_class = (string) $cache_class;
+ }
+ }
+
+ function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false)
+ {
+ if ($file_class)
+ {
+ $this->file_class = (string) $file_class;
+ }
+
+ if ($timeout)
+ {
+ $this->timeout = (string) $timeout;
+ }
+
+ if ($useragent)
+ {
+ $this->useragent = (string) $useragent;
+ }
+
+ if ($force_fsockopen)
+ {
+ $this->force_fsockopen = (string) $force_fsockopen;
+ }
+ }
+
+ function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
+ {
+ if ($tags)
+ {
+ if (is_array($tags))
+ {
+ $this->strip_htmltags = $tags;
+ }
+ else
+ {
+ $this->strip_htmltags = explode(',', $tags);
+ }
+ }
+ else
+ {
+ $this->strip_htmltags = false;
+ }
+ }
+
+ function encode_instead_of_strip($encode = false)
+ {
+ $this->encode_instead_of_strip = (bool) $encode;
+ }
+
+ function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'))
+ {
+ if ($attribs)
+ {
+ if (is_array($attribs))
+ {
+ $this->strip_attributes = $attribs;
+ }
+ else
+ {
+ $this->strip_attributes = explode(',', $attribs);
+ }
+ }
+ else
+ {
+ $this->strip_attributes = false;
+ }
+ }
+
+ function strip_comments($strip = false)
+ {
+ $this->strip_comments = (bool) $strip;
+ }
+
+ function set_output_encoding($encoding = 'UTF-8')
+ {
+ $this->output_encoding = (string) $encoding;
+ }
+
+ /**
+ * Set element/attribute key/value pairs of HTML attributes
+ * containing URLs that need to be resolved relative to the feed
+ *
+ * @access public
+ * @since 1.0
+ * @param array $element_attribute Element/attribute key/value pairs
+ */
+ function set_url_replacements($element_attribute = array('a' => 'href', 'area' => 'href', 'blockquote' => 'cite', 'del' => 'cite', 'form' => 'action', 'img' => array('longdesc', 'src'), 'input' => 'src', 'ins' => 'cite', 'q' => 'cite'))
+ {
+ $this->replace_url_attributes = (array) $element_attribute;
+ }
+
+ function sanitize($data, $type, $base = '')
+ {
+ $data = trim($data);
+ if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI)
+ {
+ if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML)
+ {
+ if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data))
+ {
+ $type |= SIMPLEPIE_CONSTRUCT_HTML;
+ }
+ else
+ {
+ $type |= SIMPLEPIE_CONSTRUCT_TEXT;
+ }
+ }
+
+ if ($type & SIMPLEPIE_CONSTRUCT_BASE64)
+ {
+ $data = base64_decode($data);
+ }
+
+ if ($type & SIMPLEPIE_CONSTRUCT_XHTML)
+ {
+ if ($this->remove_div)
+ {
+ $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '', $data);
+ $data = preg_replace('/<\/div>$/', '', $data);
+ }
+ else
+ {
+ $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '<div>', $data);
+ }
+ }
+
+ if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML))
+ {
+ // Strip comments
+ if ($this->strip_comments)
+ {
+ $data = SimplePie_Misc::strip_comments($data);
+ }
+
+ // Strip out HTML tags and attributes that might cause various security problems.
+ // Based on recommendations by Mark Pilgrim at:
+ // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
+ if ($this->strip_htmltags)
+ {
+ foreach ($this->strip_htmltags as $tag)
+ {
+ $pcre = "/<($tag)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$tag" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>|(\/)?>)/siU';
+ while (preg_match($pcre, $data))
+ {
+ $data = preg_replace_callback($pcre, array(&$this, 'do_strip_htmltags'), $data);
+ }
+ }
+ }
+
+ if ($this->strip_attributes)
+ {
+ foreach ($this->strip_attributes as $attrib)
+ {
+ $data = preg_replace('/(<[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*)' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . trim($attrib) . '(?:\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>/', '\1\2\3>', $data);
+ }
+ }
+
+ // Replace relative URLs
+ $this->base = $base;
+ foreach ($this->replace_url_attributes as $element => $attributes)
+ {
+ $data = $this->replace_urls($data, $element, $attributes);
+ }
+
+ // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags.
+ if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache)
+ {
+ $images = SimplePie_Misc::get_element('img', $data);
+ foreach ($images as $img)
+ {
+ if (isset($img['attribs']['src']['data']))
+ {
+ $image_url = call_user_func($this->cache_name_function, $img['attribs']['src']['data']);
+ $cache = call_user_func(array($this->cache_class, 'create'), $this->cache_location, $image_url, 'spi');
+
+ if ($cache->load())
+ {
+ $img['attribs']['src']['data'] = $this->image_handler . $image_url;
+ $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
+ }
+ else
+ {
+ $file =& new $this->file_class($img['attribs']['src']['data'], $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen);
+ $headers = $file->headers;
+
+ if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)))
+ {
+ if ($cache->save(array('headers' => $file->headers, 'body' => $file->body)))
+ {
+ $img['attribs']['src']['data'] = $this->image_handler . $image_url;
+ $data = str_replace($img['full'], SimplePie_Misc::element_implode($img), $data);
+ }
+ else
+ {
+ trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Having (possibly) taken stuff out, there may now be whitespace at the beginning/end of the data
+ $data = trim($data);
+ }
+
+ if ($type & SIMPLEPIE_CONSTRUCT_IRI)
+ {
+ $data = SimplePie_Misc::absolutize_url($data, $base);
+ }
+
+ if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI))
+ {
+ $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
+ }
+
+ if ($this->output_encoding !== 'UTF-8')
+ {
+ $data = SimplePie_Misc::change_encoding($data, 'UTF-8', $this->output_encoding);
+ }
+ }
+ return $data;
+ }
+
+ function replace_urls($data, $tag, $attributes)
+ {
+ if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags))
+ {
+ $elements = SimplePie_Misc::get_element($tag, $data);
+ foreach ($elements as $element)
+ {
+ if (is_array($attributes))
+ {
+ foreach ($attributes as $attribute)
+ {
+ if (isset($element['attribs'][$attribute]['data']))
+ {
+ $element['attribs'][$attribute]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attribute]['data'], $this->base);
+ $new_element = SimplePie_Misc::element_implode($element);
+ $data = str_replace($element['full'], $new_element, $data);
+ $element['full'] = $new_element;
+ }
+ }
+ }
+ elseif (isset($element['attribs'][$attributes]['data']))
+ {
+ $element['attribs'][$attributes]['data'] = SimplePie_Misc::absolutize_url($element['attribs'][$attributes]['data'], $this->base);
+ $data = str_replace($element['full'], SimplePie_Misc::element_implode($element), $data);
+ }
+ }
+ }
+ return $data;
+ }
+
+ function do_strip_htmltags($match)
+ {
+ if ($this->encode_instead_of_strip)
+ {
+ if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
+ {
+ $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8');
+ $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8');
+ return "&lt;$match[1]$match[2]&gt;$match[3]&lt;/$match[1]&gt;";
+ }
+ else
+ {
+ return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8');
+ }
+ }
+ elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
+ {
+ return $match[4];
+ }
+ else
+ {
+ return '';
+ }
+ }
+}
+
+?>
diff --git a/mod/simplepie/views/default/forms/simplepie/save_group_feed.php b/mod/simplepie/views/default/forms/simplepie/save_group_feed.php
new file mode 100644
index 000000000..a3f771586
--- /dev/null
+++ b/mod/simplepie/views/default/forms/simplepie/save_group_feed.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Simplepie feed reader widget settings
+ */
+
+// set default value
+
+$url_label = elgg_echo("simplepie:feed_url");
+$url_textbox = elgg_view('input/text', array(
+ 'name' => 'feed_url',
+ 'id'=> 'feed_url',
+ 'value' => $vars['entity']->feed_url,
+));
+
+$group_field = elgg_view('input/hidden', array(
+ 'name' => 'group_guid',
+ 'value' => $vars['entity']->guid,
+));
+
+$save_button = elgg_view('input/submit', array(
+ 'value' => elgg_echo('save'),
+));
+
+
+
+
+echo <<<HTML
+<div>
+ <label for="feed_url">$url_label</label>
+ $url_textbox
+ $group_field
+</div>
+<div>
+ $save_button
+</div>
+HTML;
+
+
+
diff --git a/mod/simplepie/views/default/simplepie/css.php b/mod/simplepie/views/default/simplepie/css.php
new file mode 100644
index 000000000..32cec16a6
--- /dev/null
+++ b/mod/simplepie/views/default/simplepie/css.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Simple CSS
+ */
+?>
+
+/* ***************************************
+ SIMPLIE
+*************************************** */
+.simplepie-heading {
+ text-align: center;
+ margin-bottom: 8px;
+}
+
+.simplepie-list img {
+ max-width: 100%;
+}
diff --git a/mod/simplepie/views/default/simplepie/group_module.php b/mod/simplepie/views/default/simplepie/group_module.php
new file mode 100644
index 000000000..90c017a86
--- /dev/null
+++ b/mod/simplepie/views/default/simplepie/group_module.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * Group simplepie:rss module
+ */
+elgg_load_library('simplepie');
+
+$group = elgg_get_page_owner_entity();
+
+if ($group->rss_enable != "yes") {
+ return true;
+}
+
+elgg_push_context('widgets');
+
+$allowed_tags = '<a><p><br><b><i><em><del><pre><strong><ul><ol><li><img>';
+$feed_url = $group->feed_url;
+$content = '';
+
+if ($group->canEdit()) {
+ $content .= elgg_view_form("simplepie/save_group_feed", array(
+ 'id' => 'simplepie-form',
+ 'class' => $feed_url ? 'hidden' : '',
+ ), $vars);
+}
+
+if ($feed_url) {
+
+// get widget settings
+ $excerpt = true;
+ $post_date = true;
+ $num_items = 7;
+ $cache_location = elgg_get_data_path() . '/simplepie_cache/';
+ if (!file_exists($cache_location)) {
+ mkdir($cache_location, 0777);
+ }
+ $feed = new SimplePie($feed_url, $cache_location);
+
+ // doubles timeout if going through a proxy
+ //$feed->set_timeout(20);
+ // only display errors to profile owner
+
+ $num_posts_in_feed = $feed->get_item_quantity();
+ if (!$num_posts_in_feed) {
+ if (elgg_get_logged_in_user_guid() == elgg_get_page_owner_guid()) {
+ $content .= '<p>' . elgg_echo('simplepie:notfound') . '</p>';
+ }
+ }
+
+ // don't display more feed items than user requested
+ if ($num_items > $num_posts_in_feed) {
+ $num_items = $num_posts_in_feed;
+}
+
+ $feed_link = elgg_view('output/url', array(
+ 'href' => $feed->get_permalink(),
+ 'text' => $feed->get_title(),
+ ));
+
+ // need to center
+ $content .= "<h2 class=\"simplepie-heading\">$feed_link</h2>";
+ $content .= '<ul class="simplepie-list">';
+ foreach ($feed->get_items(0, $num_items) as $item) {
+ $item_link = elgg_view('output/url', array(
+ 'href' => $item->get_permalink(),
+ 'text' => $item->get_title(),
+ ));
+
+ if ($excerpt) {
+ $text = strip_tags($item->get_description(true), $allowed_tags);
+ $excerpt = elgg_get_excerpt($text);
+ }
+
+ if ($post_date) {
+ $item_date_label = elgg_echo('simplepie:postedon');
+ $item_date = $item->get_date('j F Y | g:i a');
+ $post_date = "$item_date_label $item_date";
+ }
+
+ $content .= <<<HTML
+<li class="mbm elgg-item">
+ <h4 class="mbs">$item_link</h4>
+ <p class="elgg-subtext">$post_date</p>
+ <div class="elgg-content">$excerpt</div>
+</li>
+HTML;
+ }
+ $content .= "</ul>";
+}
+
+elgg_pop_context();
+
+if (!$content) {
+ $content = '<p>' . elgg_echo('simplepie:none') . '</p>';
+}
+if ($group->canEdit()) {
+ $edit = elgg_view('output/url', array(
+ 'href' => '#simplepie-form',
+ 'text' => elgg_echo('edit'),
+ 'rel' => 'toggle'
+ ));
+} else {
+ $edit = false;
+}
+
+echo elgg_view('groups/profile/module', array(
+ 'title' => elgg_echo('RSS Group'),
+ 'content' => $content,
+ 'all_link' => $edit,
+));
diff --git a/mod/simplepie/views/default/widgets/feed_reader/content.php b/mod/simplepie/views/default/widgets/feed_reader/content.php
new file mode 100644
index 000000000..f13b00fe7
--- /dev/null
+++ b/mod/simplepie/views/default/widgets/feed_reader/content.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * View a feed in a widget
+ */
+
+elgg_load_library('simplepie');
+
+$allowed_tags = '<a><p><br><b><i><em><del><pre><strong><ul><ol><li><img>';
+$feed_url = $vars['entity']->feed_url;
+if ($feed_url) {
+
+ // get widget settings
+ $excerpt = $vars['entity']->excerpt;
+ $num_items = $vars['entity']->num_items;
+ $post_date = $vars['entity']->post_date;
+
+ $cache_location = elgg_get_data_path() . '/simplepie_cache/';
+ if (!file_exists($cache_location)) {
+ mkdir($cache_location, 0777);
+ }
+
+ $feed = new SimplePie($feed_url, $cache_location);
+
+ // doubles timeout if going through a proxy
+ //$feed->set_timeout(20);
+
+ // only display errors to profile owner
+ $num_posts_in_feed = $feed->get_item_quantity();
+ if (!$num_posts_in_feed) {
+ if (elgg_get_logged_in_user_guid() == elgg_get_page_owner_guid()) {
+ echo '<p>' . elgg_echo('simplepie:notfind') . '</p>';
+ }
+ }
+
+ // don't display more feed items than user requested
+ if ($num_items > $num_posts_in_feed) {
+ $num_items = $num_posts_in_feed;
+ }
+
+ $feed_link = elgg_view('output/url', array(
+ 'href' => $feed->get_permalink(),
+ 'text' => $feed->get_title(),
+ ));
+
+ // need to center
+ echo "<h2 class=\"simplepie-heading\">$feed_link</h2>";
+ echo '<ul class="simplepie-list">';
+ foreach ($feed->get_items(0, $num_items) as $item) {
+ $item_link = elgg_view('output/url', array(
+ 'href' => $item->get_permalink(),
+ 'text' => $item->get_title(),
+ ));
+
+ if ($excerpt) {
+ $text = strip_tags($item->get_description(true), $allowed_tags);
+ $excerpt = $text;
+ }
+
+ if ($post_date) {
+ $item_date_label = elgg_echo('simplepie:postedon');
+ $item_date = $item->get_date('j F Y | g:i a');
+ $post_date = "$item_date_label $item_date";
+ }
+
+ echo <<<HTML
+<li class="mbm">
+ <h4 class="mbs">$item_link</h4>
+ <div class="mbs clearfix">$excerpt</div>
+ <p class="elgg-subtext">$post_date</p>
+</li>
+HTML;
+
+ }
+ echo "</ul>";
+
+} else {
+ // display message only to owner
+ if (elgg_get_logged_in_user_guid() == elgg_get_page_owner_guid()) {
+ echo '<p>' . elgg_echo('simplepie:notset') . '</p>';
+ }
+}
diff --git a/mod/simplepie/views/default/widgets/feed_reader/edit.php b/mod/simplepie/views/default/widgets/feed_reader/edit.php
new file mode 100644
index 000000000..83218dcbb
--- /dev/null
+++ b/mod/simplepie/views/default/widgets/feed_reader/edit.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Simplepie feed reader widget settings
+ */
+
+// set default value
+if (!isset($vars['entity']->num_items)) {
+ $vars['entity']->num_items = 10;
+}
+
+if (!isset($vars['entity']->excerpt)) {
+ $vars['entity']->excerpt = false;
+}
+
+if (!isset($vars['entity']->post_date)) {
+ $vars['entity']->post_date = false;
+}
+
+$url_label = elgg_echo("simplepie:feed_url");
+$url_textbox = elgg_view('input/text', array(
+ 'name' => 'params[feed_url]',
+ 'value' => $vars['entity']->feed_url,
+ 'onclick' => 'this.select();',
+));
+
+$num_items_label = elgg_echo('simplepie:num_items');
+$num_items_select = elgg_view('input/dropdown', array(
+ 'name' => 'params[num_items]',
+ 'value' => $vars['entity']->num_items,
+ 'options' => array(3, 5, 8, 10, 12, 15, 20),
+));
+
+$excerpt_label = elgg_echo('simplepie:excerpt');
+$excerpt_checkbox = elgg_view('input/checkbox', array(
+ 'name' => 'params[excerpt]',
+ 'value' => true,
+ 'checked' => $vars['entity']->excerpt ? 'checked' : '',
+));
+
+$post_date_label = elgg_echo('simplepie:post_date');
+$post_date_checkbox = elgg_view('input/checkbox', array(
+ 'name' => 'params[post_date]',
+ 'value' => true,
+ 'checked' => $vars['entity']->post_date ? 'checked' : '',
+));
+
+echo <<<HTML
+<div>
+ $url_label
+ $url_textbox
+</div>
+<div>
+ $num_items_label
+ $num_items_select
+</div>
+<div>
+ $excerpt_checkbox $excerpt_label
+</div>
+<div>
+ $post_date_checkbox $post_date_label
+</div>
+HTML;
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..c7438747e
--- /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' => get_input('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..efa7e7a56
--- /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('', '404');
+}
+
+$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..dc25940e1
--- /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('', '404');
+}
+
+$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' => get_input('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..26e1403fe
--- /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(
+ 'type' => 'object',
+ 'subtype' => '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..69b7ae50c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/changelog.txt
@@ -0,0 +1,477 @@
+Version 3.5.8 (2012-11-20)
+ Fixed bug where html5 data attributes where stripped from contents.
+ Fixed bug where toolbar was annouced multiple times with JAWS on Firefox.
+ Fixed bug where the editor view whouldn't scroll to BR elements when using shift+enter or br enter mode.
+ Fixed bug where a JS error would be thrown when trying to paste table rows then the rows clipboard was empty.
+ Fixed bug with auto detection logic for youtube urls in the media plugin.
+ Fixed bug where the formatter would throw errors if you used the jQuery version of TinyMCE and the latest jQuery.
+ Fixed bug where the latest WebKit versions would produce span elements when deleting text between blocks.
+ Fixed bug where the autolink plugin would produce DOM exceptions when pressing shift+enter inside a block element.
+ Fixed bug where toggling of blockquotes when using br enter mode would produce an exception.
+ Fixed bug where focusing out of the body of the editor wouldn't properly add an undo level.
+ Fixed issue with warning message being displayed on IE 9+ about the meta header fix for IE 8.
+Version 3.5.7 (2012-09-20)
+ Changed table row properties dialog to not update multiple rows when row type is header or footer.
+ Fixed bug in hyperlink dialog for IE9 where links with no target attr set had target value of --
+ Changing toolbars to have a toolbar role for FF keyboard navigation works correctly.
+ Fixed bug where applying formatting to an empty block element would produce redundant spans.
+ Fixed bug where caret formatting on IE wouldn't properly apply if you pressed enter/return.
+ Fixed bug where loading TinyMCE using an async script wouldn't properly initialize editors.
+ Fixed bug where some white space would be removed after inline elements before block elements.
+ Fixed bug where it wouldn't properly parse attributes with a single backslash as it's contents.
+ Fixed bug where noscript elements would loose it's contents on older IE versions.
+ Fixed bug where backspace inside empty blockquote wouldn't delete it properly.
+ Fixed bug where custom elements with . in their names wouldn't work properly.
+ Fixed bug where the custom_elements option didn't properly setup the block elements schema structure.
+ Fixed bug where the custom_elements option didn't auto populate the extended_valid_elements.
+ Fixed bug where the whole TD element would get blcok formatted when there where BR elements in it.
+ Fixed bug where IE 9 might crash if the editor was hidden and specific styles where applied to surrounding contents.
+ Fixed bug where shift+enter inside a table cell on Gecko would produce an zero width non breaking space between tr:s.
+ Fixed bug where the advlink dialog wouldn't properly populate the anchors dropdown if the HTML5 schema was used.
+ Fixed issue with missing autofocus attribute on input element when using the HTML5 schema.
+ Fixed issue where enter inside a block contained within an LI element wouldn't produce a new LI.
+Version 3.5.6 (2012-07-26)
+ Added "text" as a valid option to the editor.getContent format option. Makes it easier to get a text representation of the editor contents.
+ Fixed bug where resizing an image to less that 0x0 pixels would display the ghost image at an incorrect position.
+ Fixed bug where the remove format button would produce extra paragraphs on WebKit if all of the contents was selected.
+ Fixed issue where edge resize handles on images of wouldn't scale it with the same aspect ratio.
+ Fixed so force_p_newlines option works again since some users want mixed mode paragraphs.
+ Fixed so directionality plugin modifies the dir attribute of all selected blocks in the editor.
+ Fixed bug where backspace/delete of a custom element would move it's attributes to the parent block on Gecko.
+Version 3.5.5 (2012-07-19)
+ Added full resize support for images and tables on WebKit/Opera. It now behaves just like Gecko.
+ Added automatic embed support for Vimeo, Stream.cz and Google Maps in media plugin. Patch contributed by Jakub Matas.
+ Fixed bug where the lists plugin wouldn't properly remove all li elements when toggling selected items of. Patched by Taku AMANO.
+ Fixed bug where the lists plugin would remove the entire list if you pressed deleted at the beginning of the first element. Patched by Taku AMANO.
+ Fixed bug where the ordered/unordered list buttons could both be enabled if you nested lists. Patch contributed by Craig Petchell.
+ Fixed bug where shift+enter wouldn't produce a BR in a LI when having forced_root_blocks set to false.
+ Fixed bug where scrollbars aren't visible in fullscreen when window is resized.
+ Fixed bug with updating the border size using the advimage dialog on IE 9.
+ Fixed bug where the selection of inner elements on IE 8 in contentEditable mode would select the whole parent element.
+ Fixed bug where the enter key would produce an empty anchor if you pressed it at the space after a link on IE.
+ Fixed bug where autolink plugin would produce an exception for specific html see bug #5365
+ Fixed so the formatChanged function takes an optional "similar" parameter to use while matching the format.
+Version 3.5.4.1 (2012-06-24)
+ Fixed issue with Shift+A selecting all contents on Chrome.
+Version 3.5.4 (2012-06-21)
+ Added missing mouse events to HTML5 schema. Some events needs to be manually defined though since the spec is huge.
+ Added image resizing for WebKit browsers by faking the whole resize behavior.
+ Fixed bug in context menu plugin where listener to hide menu wasn't removed correctly.
+ Fixed bug where media plugin wouldn't use placeholder size for the object/video elements.
+ Fixed bug where jQuery plugin would break attr function in jQuery 1.7.2.
+ Fixed bug where jQuery plugin would throw an error if you used the tinymce pseudo selector when TinyMCE wasn't loaded.
+ Fixed so encoding option gets applied when using jQuery val() or attr() to extract the contents.
+ Fixed so any non valid width/height passed to media plugin would get parsed to proper integer or percent values.
+Version 3.5.3 (2012-06-19)
+ Added missing wbr element to HTML5 schema.
+ Added new mceToggleFormat command. Enabled you to toggle a specific format on/off.
+ Fixed bug where undo/redo state didn't update correctly after executing an execCommand call.
+ Fixed bug where the editor would get auto focused on IE running in quirks mode.
+ Fixed bug where pressing enter before an IMG or INPUT element wouldn't properly split the block.
+ Fixed bug where backspace would navigate back when selecting control types on IE.
+ Fixed bug where the editor remove method would unbind events for controls outside the editor instance UI.
+ Fixed bug where the autosave plugin would try to store a draft copy of editors that where removed.
+ Fixed bug where floated elements wouldn't expand the block created when pressing enter on non IE browsers.
+ Fixed bug where the caret would be placed in the wrong location when pressing enter at the beginning of a block.
+ Fixed bug where it wasn't possible to block events using the handle_event_callback option.
+ Fixed bug where keyboard navigation of the ColorSplitButton.js didn't work correctly.
+ Fixed bug where keyboard navigation didn't work correctly on split buttons.
+ Fixed bug where the legacy Event.add function didn't properly handle multiple id:s passed in.
+ Fixed bug where the caret would disappear on IE when selecting all contents and pressing backspace/delete.
+ Fixed bug where the getStart/getEnd methods would sometimes return elements from the wrong document on IE.
+ Fixed so paragraphs gets created if you press enter inside a form element.
+Version 3.5.2 (2012-05-31)
+ Added new formatChanged method to tinymce.Formatter class. Enables easier state change handling of formats.
+ Added new selectorChanged method to tinymce.dom.Selection class. Enables easier state change handling of matching CSS selectors.
+ Changed the default theme to be advanced instead of simple since most users uses the advanced theme.
+ Changed so the theme_advanced_buttons doesn't have a default set if one button row is specified.
+ Changed the theme_advanced_toolbar_align default value to "left".
+ Changed the theme_advanced_toolbar_location default value to "top".
+ Changed the theme_advanced_statusbar_location default value to "bottom".
+ Fixed bug where the simple link dialog would remove class and target attributes from links when updating them if the drop downs wasn't visible.
+ Fixed bug where the link/unlink buttons wouldn't get disabled once a link was created by the autolink plugin logic.
+ Fixed bug where the border attribute was missing in the HTML5 schema.
+ Fixed bug where the legacyoutput plugin would use inline styles for font color.
+ Fixed bug where editing of anchor names wouldn't produce an undo level.
+ Fixed bug where the table plugin would delete the last empty block element in the editor.
+ Fixed bug where pasting table rows when they where selected would make it impossible to editor that table row.
+ Fixed bug with pressing enter in IE while having a select list focused would produce a JS error.
+ Fixed bug where it wasn't possible to merge table cells by selecting them and using merge from context menu.
+ Removed summary from HTML5 table attributes and fixed so this and other deprecated table fields gets hidden in the table dialog.
+Version 3.5.1.1 (2012-05-25)
+ Fixed bug with control creation where plugin specific controls didn't work as expected.
+Version 3.5.1 (2012-05-25)
+ Added new onBeforeAdd event to UndoManager patch contributed by Dan Rumney.
+ Added support for overriding the theme rendering logic by using a custom function.
+ Fixed bug where links wasn't automatically created by the autolink plugin on old IE versions when pressing enter in BR mode.
+ Fixed bug where enter on older IE versions wouldn't produce a new paragraph if the previous sibling paragraph was empty.
+ Fixed bug where toString on a faked DOM range on older IE versions wouldn't return a proper string.
+ Fixed bug where named anchors wouldn't work properly when schema was set to HTML5.
+ Fixed bug where HTML5 datalist options wasn't correctly parsed or indented.
+ Fixed bug where linking would add anchors around block elements when the HTML5 schema was used.
+ Fixed issue where the autolink plugin wouldn't properly handle mailto:user@domain.com.
+ Optimized initialization and reduced rendering flicker by hiding the target element while initializing.
+Version 3.5.0.1 (2012-05-10)
+ Fixed bug where selection normalization logic would break the selections of parent elements using the element path.
+ Fixed bug where the autolink plugin would include trailing dots in domain names in the link creation.
+ Fixed bug where the autolink plugin would produce an error on older IE versions when pressing enter.
+ Fixed bug where old IE versions would throw an error during initialization when the editor was placed in an size restricted div.
+Version 3.5 (2012-05-03)
+ Fixed menu rendering issue if the document was in rtl mode.
+ Fixed bug where the hide function would throw an error about a missing variable.
+ Fixed bug where autolink wouldn't convert URLs when hitting enter on IE due to the new enter key logic.
+ Fixed bug where formatting using shortcuts like ctrl+b wouldn't work properly the first time.
+ Fixed bug where selection.setContent after a formatter call wouldn't generate formatted contents.
+ Fixed bug where whitespace would be removed before/after invalid_elements when they where removed.
+ Fixed bug where updating styles using the theme image dialog in non inline mode on IE9 would produce errors.
+ Fixed bug where IE 8 would produce an error when using the contextmenu plugin.
+ Fixed bug where delete/backspace could remove contents of noneditable elements.
+ Fixed so background color in style preview gets computed from body element if the current style element is transparent.
+Version 3.5b3 (2012-03-29)
+ Added cancel button to colour picker dialog.
+ Added figure and figcaption to the html5 visualblocks plugin.
+ Added default alignment options for the figure element.
+ Fixed bug where empty inline elements within block elements would sometimes produce a br child element.
+ Fixed bug where urls pointing to the same domain as the current one would cause undefined errors. Patch contributed by Paul Giberson.
+ Fixed bug where enter inside an editable element inside an non editable element would split the element.
+ Fixed bug where cut/copy/paste of noneditable elements didn't work.
+ Fixed bug where backspace would sometimes produce font elements on WebKit.
+ Fixed bug where WebKit would produce spans out of various inline elements when using backspace.
+ Fixed bug where IE9 wouldn't properly update image styles when images where resized.
+ Fixed bug where drag/drop of noneditable elements didn't work correctly.
+ Fixed bug where applying formatting to all contents wouldn't work correctly when an end point was inside an empty bock. Patch contributed by Jose Luiz.
+ Fixed bug where IE10 removed the scopeName from the DOM element interface and there for it produced an undefined string in element path.
+ Fixed bug where the caret would be placed at an incorrect location if you applied block formatting while having the caret at the end of the block.
+ Fixed bug where applying column changes using the cell dialog would only update the first column. Patch contributed by krzyko.
+ Fixed bug where the visualblocks plugin would force editor focus if it was turned on by default.
+ Fixed bug where the tabfocus plugin would tab to iframes these are now ignored.
+ Fixed bug where format drop down list wouldn't show the currently active format for a parent element.
+ Fixed bug where paste of plain text in IE 9 would remove the new line characters from text.
+ Fixed bug where the menu buttons/split button menus wouldn't be opened at the right location on older IE versions.
+ Fixed bug where Gecko browsers wouldn't properly display the right format when having the selection as specific places.
+ Fixed bug where shift+enter inside the body when having forced_root_blocks set to false would throw an error.
+ Fixed bug where the jQuery plugin would break the attr method of jQuery 1.7.2. Patch contributed by Markus Kemmerling.
+ Fixed so options like content_css accepts and array as well as a comma separated string as input.
+ Restructured the internal logic to make it more separate from Editor.js.
+ Updated the Sizzle engine to the latest version.
+Version 3.5b2 (2012-03-15)
+ Rewrote the enter key logic to normalize browser behavior.
+ Fixed so enter within PRE elements produces a BR and shift+enter breaks/end the PRE. Can be disabled using the br_in_pre option.
+ Fixed bug where the selection wouldn't be correct after applying formatting and having the caret at the end of the new format node.
+ Fixed bug where the noneditable plugin would process contents on raw input calls for example on undo/redo calls.
+ Fixed bug where WebKit could produce an exception when a bookmark was requested when there wasn't a proper selection.
+ Fixed bug where WebKit would fail to open the image dialog since it would be returning false for a class name instead of a string.
+ Fixed so alignment and indentation works properly when forced_root_blocks is set to false. It will produce a DIV by default.
+Version 3.5b1 (2012-03-08)
+ Added new event class that is faster and enables support for faking events.
+ Added new self_closing_elements, short_ended_elements, boolean_attributes, non_empty_elements and block_elements options to control the HTML Schema.
+ Added new schema option and support for the HTML5 schema.
+ Added new visualblocks plugin that shows html5 blocks with visual borders.
+ Added new types and selector options to make it easier to create editor instances with different configs.
+ Added new preview of formatting options in various listboxes.
+ Added new preview_styles option that enables control over what gets previewed.
+ Fixed bug where content css would be loaded twice into iframe.
+ Fixed bug where start elements with only whitespace in the attribute part wouldn't be correctly parsed.
+ Fixed bug where the advlink dialog would produce an error about the addSelectAccessibility function not being defined.
+ Fixed bug where the caret would be placed at an incorrect position if span was removed by the invalid_elements setting.
+ Fixed bug where elements inside a white space preserve element like pre didn't inherit the behavior while parsing.
+Version 3.4.9 (2012-02-23)
+ Added settings to wordcount plugin to configure update rate and checking wordcount on backspace and delete using wordcount_update_rate and wordcount_update_on_delete.
+ Fixed bug in Webkit and IE where deleting empty paragraphs would remove entire editor contents.
+ Fixed bug where pressing enter on end of list item with a heading would create a new item with heading.
+ Fixed edit css style dialog text-decoration none checkbox so it disables other text-decoration options when enabled.
+ Fixed bug in Gecko where undo wasn't added when focus was lost.
+ Fixed bug in Gecko where shift-enter in table cell ending with BR doesn't move caret to new line.
+ Fixed bug where right-click on formatted text in IE selected the entire line.
+ Fixed bug where text ending with space could not be unformatted in IE.
+ Fixed bug where caret formatting would be removed when moving the caret when a selector expression was used.
+ Fixed bug where formatting would be applied to the body element when all contents where selected and format had both inline and selector parts.
+ Fixed bug where the media plugin would throw errors if you had iframe set as an invalid element in config.
+ Fixed bug where the caret would be placed at the top of the document if you inserted a table and undo:ed that operation. Patch contributed by Wesley Walser.
+ Fixed bug where content css files where loaded twice into the iframe.
+ Fixed so elements with comments would be trated as non empty elements. Patch contributed by Arjan Scherpenisse.
+Version 3.4.8 (2012-02-02)
+ Fixed bug in IE where selected text ending with space cannot be formatted then formatted again to get original text.
+ Fixed bug in IE where images larger than editor area were being deselected when toolbar buttons are clicked.
+ Fixed bug where wrong text align buttons are active when multiple block elements are selected.
+ Fixed bug where selected link not showing in target field of link dialog in some selection cases.
+ Use settings for remove_trailing_br so this can be turned off instead of hard coding the value.
+ Fixed bug in IE where the media plugin displayed null text when some values aren't filled in.
+ Added API method 'onSetAttrib' that fires when the attribute value on a node changes.
+ Fix font size dropdown value not being updated when text already has a font size in the advanced template.
+ Fixed bug in IE where IE doesn't use ARIA attributes properly on options - causing labels to be read out 2 times.
+ Fixed bug where caret cannot be placed after table if table is at end of document in IE.
+ Fixed bug where adding range isn't always successful so we need to check range count otherwise an exception can occur.
+ Added spacebar onclick handler to toolbar buttons to ensure that the accessibility behaviour works correctly.
+ Fixed bug where a stranded bullet point would get created in WebKit.
+ Fixed bug where selecting text in a blockquote and pressing backspace toggles the style.
+ Fixed bug where pressing enter from a heading in IE, the resulting P tag below it shares the style property.
+ Fix white space in between spans from being deleted.
+ Fixed bug where scrollbars where visible in the character map dialog on Gecko.
+ Fixed issue with missing translation for one of the emoticons.
+ Fixed bug where dots in id:s where causing problems. Patch provided by Abhishek Dev.
+ Fixed bug where urls with an at sign in the path wouldn't be parsed correctly. Patch contributed by Jason Grout.
+ Fixed bug where Opera would remove the first character of a inline formatted word if you pressed backspace.
+ Fixed bugs with the autoresize plugin on various browsers and removed the need for the throbber.
+ Fixed performance issue where the contextmenu plugin would try to remove the menu even if it was removed. Patch contributed by mhu.
+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.
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..84b76ca7a
--- /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,visualblocks",
+
+ // 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,visualblocks",
+ 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..2e049587c
--- /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..19324f74c
--- /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_stick":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","plaintext_mode":"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:"},visualblocks:{desc:'Show/hide block elements'}}}); \ 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..f0b7c6eef
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js
@@ -0,0 +1,464 @@
+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 {
+ var isOldIE = tinymce.isIE && (!document.documentMode || document.documentMode < 9);
+
+ if (b.length == 3 && b[isOldIE ? 2 : 1])
+ bStyle = b[isOldIE ? 2 : 1];
+ else if (!bStyle || bStyle == 'none')
+ bStyle = 'solid';
+ if (b.length == 3 && b[isIE ? 0 : 2])
+ bColor = b[isOldIE ? 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..f013aac1e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js
@@ -0,0 +1,543 @@
+/* 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) {
+ var prospect = inst.dom.create("p", null, inst.selection.getContent());
+ if (prospect.childNodes.length === 1) {
+ elm = prospect.firstChild;
+ }
+ }
+
+ 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');
+ var linkTarget = inst.dom.getAttrib(elm, 'target') ? inst.dom.getAttrib(elm, 'target') : "_self";
+
+ // 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', linkTarget);
+ 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', linkTarget, 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 ((name = nodes[i].id) != "" && !nodes[i].href)
+ 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" 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 + '" 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..71d86bbec
--- /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;a.onKeyDown.addToTop(function(d,f){if(f.keyCode==13){return c.handleEnter(d)}});if(tinyMCE.isIE){return}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(true).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}if(n.nodeType==3){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?f-2:0);a.setEnd(n,f>=1?f-1:0);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)}}var m=a.toString();if(m.charAt(m.length-1)=="."){a.setEnd(n,c-1)}m=a.toString();h=m.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);if(h){if(h[1]=="www."){h[1]="http://www."}else{if(/@$/.test(h[1])&&!/^mailto:/.test(h[1])){h[1]="mailto:"+h[1]}}k=i.selection.getBookmark();i.selection.setRng(a);tinyMCE.execCommand("createlink",false,h[1]+h[2]);i.selection.moveToBookmark(k);i.nodeChanged();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..5b61f7a20
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js
@@ -0,0 +1,184 @@
+/**
+ * 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;
+
+ // Add a key down handler
+ ed.onKeyDown.addToTop(function(ed, e) {
+ if (e.keyCode == 13)
+ return t.handleEnter(ed);
+ });
+
+ // Internet Explorer has built-in automatic linking for most cases
+ if (tinyMCE.isIE)
+ return;
+
+ 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(true).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;
+
+ // Move range to text node
+ if (endContainer.nodeType == 3) {
+ 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 ? end - 2 : 0);
+ r.setEnd(endContainer, end >= 1 ? end - 1 : 0);
+ 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);
+ }
+
+ // Exclude last . from word like "www.site.com."
+ var text = r.toString();
+ if (text.charAt(text.length - 1) == '.') {
+ r.setEnd(endContainer, start - 1);
+ }
+
+ text = r.toString();
+ matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);
+
+ if (matches) {
+ if (matches[1] == 'www.') {
+ matches[1] = 'http://www.';
+ } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) {
+ matches[1] = 'mailto:' + matches[1];
+ }
+
+ bookmark = ed.selection.getBookmark();
+
+ ed.selection.setRng(r);
+ tinyMCE.execCommand('createlink',false, matches[1] + matches[2]);
+ ed.selection.moveToBookmark(bookmark);
+ ed.nodeChanged();
+
+ // 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..46d9dc3dd
--- /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 j,i=a.getDoc(),f=i.body,l=i.documentElement,h=tinymce.DOM,k=d.autoresize_min_height,g;g=tinymce.isIE?f.scrollHeight:(tinymce.isWebKit&&f.clientHeight==0?0:f.offsetHeight);if(g>d.autoresize_min_height){k=g}if(d.autoresize_max_height&&g>d.autoresize_max_height){k=d.autoresize_max_height;f.style.overflowY="auto";l.style.overflowY="auto"}else{f.style.overflowY="hidden";l.style.overflowY="hidden";f.scrollTop=0}if(k!==e){j=k-e;h.setStyle(h.get(a.id+"_ifr"),"height",k+"px");e=k;if(tinymce.isWebKit&&j<0){b()}}}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.onLoad.add(b);a.onLoadContent.add(b)}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..7673bcff8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js
@@ -0,0 +1,119 @@
+/**
+ * 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 deltaSize, d = ed.getDoc(), body = 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 ? body.scrollHeight : (tinymce.isWebKit && body.clientHeight == 0 ? 0 : 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;
+ body.style.overflowY = "auto";
+ de.style.overflowY = "auto"; // Old IE
+ } else {
+ body.style.overflowY = "hidden";
+ de.style.overflowY = "hidden"; // Old IE
+ body.scrollTop = 0;
+ }
+
+ // Resize content element
+ if (resizeHeight !== oldSize) {
+ deltaSize = resizeHeight - oldSize;
+ DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px');
+ oldSize = resizeHeight;
+
+ // WebKit doesn't decrease the size of the body element until the iframe gets resized
+ // So we need to continue to resize the iframe down until the size gets fixed
+ if (tinymce.isWebKit && deltaSize < 0)
+ resize();
+ }
+ };
+
+ 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)) {
+ ed.onLoad.add(resize);
+ ed.onLoadContent.add(resize);
+ }
+
+ // 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..6da98ff33
--- /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(){if(!i.removed){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..8b308f5aa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js
@@ -0,0 +1,433 @@
+/**
+ * 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() {
+ if (!ed.removed) {
+ 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/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..2ed042c3a
--- /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(f){var i=this,g,d,j,e;i.editor=f;d=f.settings.contextmenu_never_use_native;i.onContextMenu=new tinymce.util.Dispatcher(this);e=function(k){h(f,k)};g=f.onContextMenu.add(function(k,l){if((j!==0?j:l.ctrlKey)&&!d){return}a.cancel(l);if(l.target.nodeName=="IMG"){k.selection.select(l.target)}i._getMenu(k).showMenu(l.clientX||l.pageX,l.clientY||l.pageY);a.add(k.getDoc(),"click",e);k.nodeChanged()});f.onRemove.add(function(){if(i._menu){i._menu.removeAll()}});function h(k,l){j=0;if(l&&l.button==2){j=l.ctrlKey;return}if(i._menu){i._menu.removeAll();i._menu.destroy();a.remove(k.getDoc(),"click",e);i._menu=null}}f.onMouseDown.add(h);f.onKeyDown.add(h);f.onKeyDown.add(function(k,l){if(l.shiftKey&&!l.ctrlKey&&!l.altKey&&l.keyCode===121){a.cancel(l);g(k,l)}})},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..48b0fff99
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js
@@ -0,0 +1,163 @@
+/**
+ * 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, hideMenu;
+
+ 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);
+
+ hideMenu = function(e) {
+ hide(ed, e);
+ };
+
+ 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', hideMenu);
+
+ 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', hideMenu);
+ t._menu = null;
+ }
+ };
+
+ 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..90847e78e
--- /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(b,c){var d=this;d.editor=b;function a(e){var h=b.dom,g,f=b.selection.getSelectedBlocks();if(f.length){g=h.getAttrib(f[0],"dir");tinymce.each(f,function(i){if(!h.getParent(i.parentNode,"*[dir='"+e+"']",h.getRoot())){if(g!=e){h.setAttrib(i,"dir",e)}else{h.setAttrib(i,"dir",null)}}});b.nodeChanged()}}b.addCommand("mceDirectionLTR",function(){a("ltr")});b.addCommand("mceDirectionRTL",function(){a("rtl")});b.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});b.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});b.onNodeChange.add(d._nodeChange,d)},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..b13401412
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js
@@ -0,0 +1,85 @@
+/**
+ * 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;
+
+ function setDir(dir) {
+ var dom = ed.dom, curDir, blocks = ed.selection.getSelectedBlocks();
+
+ if (blocks.length) {
+ curDir = dom.getAttrib(blocks[0], "dir");
+
+ tinymce.each(blocks, function(block) {
+ // Add dir to block if the parent block doesn't already have that dir
+ if (!dom.getParent(block.parentNode, "*[dir='" + dir + "']", dom.getRoot())) {
+ if (curDir != dir) {
+ dom.setAttrib(block, "dir", dir);
+ } else {
+ dom.setAttrib(block, "dir", null);
+ }
+ }
+ });
+
+ ed.nodeChanged();
+ }
+ }
+
+ ed.addCommand('mceDirectionLTR', function() {
+ setDir("ltr");
+ });
+
+ ed.addCommand('mceDirectionRTL', function() {
+ setDir("rtl");
+ });
+
+ 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..101355654
--- /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..a2eb03483
--- /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||document.compatMode=="BackCompat"){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().getElementsByTagName("table")[0]);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..524b487aa
--- /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 || document.compatMode == 'BackCompat')
+ 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().getElementsByTagName('table')[0]);
+ 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);
+})();
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..2ed5f41ae
--- /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",attributes:{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..3cdcde579
--- /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', attributes : {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..ec21b256e
--- /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 J="ESCAPE";var z="PARAGRAPH";var N="UNKNOWN";var x=N;function E(U){return U.keyCode===tinymce.VK.TAB&&!(U.altKey||U.ctrlKey)&&(y.queryCommandState("InsertUnorderedList")||y.queryCommandState("InsertOrderedList"))}function w(){var U=B();var W=U.parentNode.parentNode;var V=U.parentNode.lastChild===U;return V&&!t(W)&&P(U)}function t(U){if(n(U)){return U.parentNode&&U.parentNode.tagName==="LI"}else{return U.tagName==="LI"}}function F(){return y.selection.isCollapsed()&&P(B())}function B(){var U=y.selection.getStart();return((U.tagName=="BR"||U.tagName=="")&&U.parentNode.tagName=="LI")?U.parentNode:U}function P(U){var V=U.childNodes.length;if(U.tagName==="LI"){return V==0?true:V==1&&(U.firstChild.tagName==""||U.firstChild.tagName=="BR"||H(U))}return false}function H(U){var V=tinymce.grep(U.parentNode.childNodes,function(Y){return Y.tagName=="LI"});var W=U==V[V.length-1];var X=U.firstChild;return tinymce.isIE9&&W&&(X.nodeValue==String.fromCharCode(160)||X.nodeValue==String.fromCharCode(32))}function T(U){return U.keyCode===tinymce.VK.ENTER}function A(U){return T(U)&&!U.shiftKey}function M(U){if(E(U)){return v}else{if(A(U)&&w()){return N}else{if(A(U)&&F()){return s}else{return N}}}}function D(U,V){if(x==v||x==s||tinymce.isGecko&&x==J){r.cancel(V)}}function C(){var U=y.selection.getRng(true);var V=U.startContainer;if(V.nodeType==3){var W=V.nodeValue;if(tinymce.isIE9&&W.length>1&&W.charCodeAt(W.length-1)==32){return(U.endOffset==W.length-1)}else{return(U.endOffset==W.length)}}else{if(V.nodeType==1){return U.endOffset==V.childNodes.length}}return false}function I(){var W=y.selection.getNode();var V="h1,h2,h3,h4,h5,h6,p,div";var U=y.dom.is(W,V)&&W.parentNode.tagName==="LI"&&W.parentNode.lastChild===W;return y.selection.isCollapsed()&&U&&C()}function K(W,Y){if(A(Y)&&I()){var X=W.selection.getNode();var V=W.dom.create("li");var U=W.dom.getParent(X,"li");W.dom.insertAfter(V,U);if(tinymce.isIE6||tinymce.isIE7||tinyMCE.isIE8){W.selection.setCursorLocation(V,1)}else{W.selection.setCursorLocation(V,0)}Y.preventDefault()}}function u(X,Z){var ac;if(!tinymce.isGecko){return}var V=X.selection.getStart();if(Z.keyCode!=tinymce.VK.BACKSPACE||V.tagName!=="IMG"){return}function W(ag){var ah=ag.firstChild;var af=null;do{if(!ah){break}if(ah.tagName==="LI"){af=ah}}while(ah=ah.nextSibling);return af}function ae(ag,af){while(ag.childNodes.length>0){af.appendChild(ag.childNodes[0])}}ac=V.parentNode.previousSibling;if(!ac){return}var aa;if(ac.tagName==="UL"||ac.tagName==="OL"){aa=ac}else{if(ac.previousSibling&&(ac.previousSibling.tagName==="UL"||ac.previousSibling.tagName==="OL")){aa=ac.previousSibling}else{return}}var ad=W(aa);var U=X.dom.createRng();U.setStart(ad,1);U.setEnd(ad,1);X.selection.setRng(U);X.selection.collapse(true);var Y=X.selection.getBookmark();var ab=V.parentNode.cloneNode(true);if(ab.tagName==="P"||ab.tagName==="DIV"){ae(ab,ad)}else{ad.appendChild(ab)}V.parentNode.parentNode.removeChild(V.parentNode);X.selection.moveToBookmark(Y)}function G(U){var V=y.dom.getParent(U,"ol,ul");if(V!=null){var W=V.lastChild;y.selection.setCursorLocation(W,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 V=y.selection,W=y.dom;function U(X){X=W.getParent(X,W.isBlock);return X&&(parseInt(y.dom.getStyle(X,"margin-left")||0,10)+parseInt(y.dom.getStyle(X,"padding-left")||0,10))>0}return U(V.getStart())||U(V.getEnd())||y.queryCommandState("InsertOrderedList")||y.queryCommandState("InsertUnorderedList")}},"state")});y.onKeyUp.add(function(V,W){if(x==v){V.execCommand(W.shiftKey?"Outdent":"Indent",true,null);x=N;return r.cancel(W)}else{if(x==s){var U=B();var Y=V.settings.list_outdent_on_enter===true||W.shiftKey;V.execCommand(Y?"Outdent":"Indent",true,null);if(tinymce.isIE){G(U)}return r.cancel(W)}else{if(x==J){if(tinymce.isIE6||tinymce.isIE7||tinymce.isIE8){var X=V.getDoc().createTextNode("\uFEFF");V.selection.getNode().appendChild(X)}else{if(tinymce.isIE9||tinymce.isGecko){V.execCommand("Outdent");return r.cancel(W)}}}}}});function L(V,U){var W=y.getDoc().createTextNode("\uFEFF");V.insertBefore(W,U);y.selection.setCursorLocation(W,0);y.execCommand("mceRepaint")}function R(V,X){if(T(X)){var U=B();if(U){var W=U.parentNode;var Y=W&&W.parentNode;if(Y&&Y.nodeName=="LI"&&Y.firstChild==W&&U==W.firstChild){L(Y,W)}}}}function S(V,X){if(T(X)){var U=B();if(V.dom.select("ul li",U).length===1){var W=U.firstChild;L(U,W)}}}function Q(W,aa){function X(ab){var ad=[];var ae=new tinymce.dom.TreeWalker(ab.firstChild,ab);for(var ac=ae.current();ac;ac=ae.next()){if(W.dom.is(ac,"ol,ul,li")){ad.push(ac)}}return ad}if(aa.keyCode==tinymce.VK.BACKSPACE){var U=B();if(U){var Z=W.dom.getParent(U,"ol,ul"),V=W.selection.getRng();if(Z&&Z.firstChild===U&&V.startOffset==0){var Y=X(U);Y.unshift(U);W.execCommand("Outdent",false,Y);W.undoManager.add();return r.cancel(aa)}}}}function O(V,X){var U=B();if(X.keyCode===tinymce.VK.BACKSPACE&&V.dom.is(U,"li")&&U.parentNode.firstChild!==U){if(V.dom.select("ul,ol",U).length===1){var Z=U.previousSibling;V.dom.remove(V.dom.select("br",U));V.dom.remove(U,true);var W=tinymce.grep(Z.childNodes,function(aa){return aa.nodeType===3});if(W.length===1){var Y=W[0];V.selection.setCursorLocation(Y,Y.length)}V.undoManager.add();return r.cancel(X)}}}y.onKeyDown.add(function(U,V){x=M(V)});y.onKeyDown.add(D);y.onKeyDown.add(u);y.onKeyDown.add(K);if(tinymce.isGecko){y.onKeyUp.add(R)}if(tinymce.isIE8){y.onKeyUp.add(S)}if(tinymce.isGecko||tinymce.isWebKit){y.onKeyDown.add(Q)}if(tinymce.isWebKit){y.onKeyDown.add(O)}},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(),processEvenIfEmpty:true}}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||!y.processEvenIfEmpty&&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,true)}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(u,t,s){if(s||(tinymce.isGecko&&(/Firefox\/[12]\.[0-9]/.test(navigator.userAgent)||/Firefox\/3\.[0-4]/.test(navigator.userAgent)))){this.classBasedEach(u,t)}else{e(u,t)}},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,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..1000ef745
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js
@@ -0,0 +1,955 @@
+/**
+ * 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 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()) {
+ // Returns LIST_UNKNOWN since breaking out of lists is handled by the EnterKey.js logic now
+ //return LIST_ESCAPE;
+ return LIST_UNKNOWN;
+ } else if (isEnterWithoutShift(e) && isInEmptyListItem()) {
+ return LIST_EMPTY_ITEM;
+ } 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);
+ }
+ }
+
+ function isCursorAtEndOfContainer() {
+ var range = ed.selection.getRng(true);
+ var startContainer = range.startContainer;
+ if (startContainer.nodeType == 3) {
+ var value = startContainer.nodeValue;
+ if (tinymce.isIE9 && value.length > 1 && value.charCodeAt(value.length-1) == 32) {
+ // IE9 places a space on the end of the text in some cases so ignore last char
+ return (range.endOffset == value.length-1);
+ } else {
+ return (range.endOffset == value.length);
+ }
+ } else if (startContainer.nodeType == 1) {
+ return range.endOffset == startContainer.childNodes.length;
+ }
+ return false;
+ }
+
+ /*
+ If we are at the end of a list item surrounded with an element, pressing enter should create a
+ new list item instead without splitting the element e.g. don't want to create new P or H1 tag
+ */
+ function isEndOfListItem() {
+ var node = ed.selection.getNode();
+ var validElements = 'h1,h2,h3,h4,h5,h6,p,div';
+ var isLastParagraphOfLi = ed.dom.is(node, validElements) && node.parentNode.tagName === 'LI' && node.parentNode.lastChild === node;
+ return ed.selection.isCollapsed() && isLastParagraphOfLi && isCursorAtEndOfContainer();
+ }
+
+ // Creates a new list item after the current selection's list item parent
+ function createNewLi(ed, e) {
+ if (isEnterWithoutShift(e) && isEndOfListItem()) {
+ 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.isIE6 || tinymce.isIE7 || tinyMCE.isIE8) {
+ // Removed this line since it would create an odd <&nbsp;> tag and placing the caret inside an empty LI is handled and should be handled by the selection logic
+ //li.appendChild(ed.dom.create("&nbsp;")); // IE needs an element within the bullet point
+ ed.selection.setCursorLocation(li, 1);
+ } else {
+ ed.selection.setCursorLocation(li, 0);
+ }
+ e.preventDefault();
+ }
+ }
+
+ 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;
+ // Removed this line since IE9 would report an DOM character error and placing the caret inside an empty LI is handled and should be handled by the selection logic
+ //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.isIE6 || tinymce.isIE7 || tinymce.isIE8) {
+ // append a zero sized nbsp so that caret is positioned correctly in IE 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(li) {
+ var elements = [];
+ var walker = new tinymce.dom.TreeWalker(li.firstChild, li);
+ 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'),
+ rng = ed.selection.getRng();
+ if (list && list.firstChild === li && rng.startOffset == 0) {
+ var elements = listElements(li);
+ elements.unshift(li);
+ ed.execCommand("Outdent", false, elements);
+ ed.undoManager.add();
+ return Event.cancel(e);
+ }
+ }
+ }
+ }
+
+ function fixDeletingEmptyLiInWebkit(ed, e) {
+ var li = getLi();
+ if (e.keyCode === tinymce.VK.BACKSPACE && ed.dom.is(li, 'li') && li.parentNode.firstChild!==li) {
+ if (ed.dom.select('ul,ol', li).length === 1) {
+ var prevLi = li.previousSibling;
+ ed.dom.remove(ed.dom.select('br', li));
+ ed.dom.remove(li, true);
+ var textNodes = tinymce.grep(prevLi.childNodes, function(n){ return n.nodeType === 3 });
+ if (textNodes.length === 1) {
+ var textNode = textNodes[0];
+ ed.selection.setCursorLocation(textNode, textNode.length);
+ }
+ 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);
+ }
+ if (tinymce.isWebKit) {
+ ed.onKeyDown.add(fixDeletingEmptyLiInWebkit);
+ }
+ },
+
+ 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(),
+ processEvenIfEmpty: true
+ };
+ }
+ 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 || ! actions.processEvenIfEmpty && 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, true);
+ }
+
+ 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, forceClassBase) {
+ if (forceClassBase ||
+ (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, 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..9ac42e0d2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js
@@ -0,0 +1 @@
+(function(){var b=tinymce.explode("id,name,width,height,style,align,class,hspace,vspace,bgcolor,type"),a=tinymce.makeMap(b.join(",")),f=tinymce.html.Node,d,i,h=tinymce.util.JSON,g;d=[["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 e(j){return typeof(j)=="string"?j.replace(/[^0-9%]/g,""):j}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(s){return s&&s.nodeName==="IMG"&&n.dom.hasClass(s,"mceItemMedia")}r.editor=n;r.url=j;i="";for(m=0;m<d.length;m++){k=d[m][0];q={name:k,clsids:tinymce.explode(d[m][1]||""),mimes:tinymce.explode(d[m][2]||""),codebase:d[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;i+=(i?"|":"")+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}}});i=new RegExp("write("+i+")\\(([^)]+)\\)");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(s,t){if(t.name==="img"&&n.dom.hasClass(t.node,"mceItemMedia")){t.name="media"}})}if(n&&n.plugins.contextmenu){n.plugins.contextmenu.onContextMenu.add(function(t,u,s){if(s.nodeName==="IMG"&&s.className.indexOf("mceItemMedia")!==-1){u.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});n.addCommand("mceMedia",function(){var t,s;s=n.selection.getNode();if(o(s)){t=n.dom.getAttrib(s,"data-mce-json");if(t){t=h.parse(t);tinymce.each(b,function(u){var v=n.dom.getAttrib(s,u);if(v){t[u]=v}});t.type=r.getType(s.className).name.toLowerCase()}}if(!t){t={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:t})});n.addButton("media",{title:"media.desc",cmd:"mceMedia"});n.onNodeChange.add(function(t,s,u){s.setActive("media",o(u))})},convertUrl:function(l,o){var k=this,n=k.editor,m=n.settings,p=m.url_converter,j=m.url_converter_scope||k;if(!l){return l}if(o){return n.documentBaseURI.toAbsolute(l)}return p.call(j,l,"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":h.serialize(m,"'")});n.width=m.width=e(m.width||(m.type=="audio"?"300":"320"));n.height=m.height=e(m.height||(m.type=="audio"?"32":"240"));return n},dataToHtml:function(j,k){return this.editor.serializer.serialize(this.dataToImg(j,k),{forced_root_block:"",force_absolute:k})},htmlToData:function(l){var k,j,m;m={type:"flash",video:{sources:[]},params:{}};k=this.editor.parser.parse(l);j=k.getAll("img")[0];if(j){m=h.parse(j.attr("data-mce-json"));m.type=this.getType(j.attr("class")).name.toLowerCase();tinymce.each(b,function(n){var o=j.attr(n);if(o){m[n]=o}})}return m},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(n,J){var N,M,O,L,K;K=p.getParam("flash_video_player_url",u.convertUrl(u.url+"/moxieplayer.swf"));if(K){N=p.documentBaseURI;G.params.src=K;if(p.getParam("flash_video_player_absvideourl",true)){n=N.toAbsolute(n||"",true);J=N.toAbsolute(J||"",true)}O="";M=p.getParam("flash_video_player_flashvars",{url:"$url",poster:"$poster"});tinymce.each(M,function(Q,P){Q=Q.replace(/\$url/,n||"");Q=Q.replace(/\$poster/,J||"");if(Q.length>0){O+=(O?"&":"")+P+"="+escape(Q)}});if(O.length){G.params.flashvars=O}L=p.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(L,function(Q,P){G.params[P]=""+Q})}}G=z.attr("data-mce-json");if(!G){return}G=h.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"))}}G.width=z.attr("width")||G.width;G.height=z.attr("height")||G.height;if(q.name==="Iframe"){x=new f("iframe",1);tinymce.each(b,function(n){var J=z.attr(n);if(n=="class"&&J){J=J.replace(/mceItem.+ ?/g,"")}if(J&&J.length>0){x.attr(n,J)}});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 f("script",1).attr("type","text/javascript");y=new f("#text",3);y.value="write"+q.name+"("+h.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 f("video",1).attr(tinymce.extend({id:z.attr("id"),width:e(z.attr("width")),height:e(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 f("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 f("audio",1).attr(tinymce.extend({id:z.attr("id"),width:e(z.attr("width")),height:e(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 f("source",1).attr(k[A]);w.shortEnded=true;F.append(w)}G.params.src=""}if(q.name==="EmbeddedAudio"){j=new f("embed",1);j.shortEnded=true;j.attr({id:z.attr("id"),width:e(z.attr("width")),height:e(z.attr("height")),style:B,type:z.attr("type")});for(I in G.params){j.attr(I,G.params[I])}tinymce.each(b,function(n){if(G[n]&&n!="type"){j.attr(n,G[n])}});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 f("object",1).attr({id:z.attr("id"),width:e(z.attr("width")),height:e(z.attr("height")),style:B});tinymce.each(b,function(n){var J=G[n];if(n=="class"&&J){J=J.replace(/mceItem.+ ?/g,"")}if(J&&n!="type"){H.attr(n,J)}});for(I in G.params){s=new f("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 f("embed",1);j.shortEnded=true;j.attr({id:z.attr("id"),width:e(z.attr("width")),height:e(z.attr("height")),style:B,type:q.mimes[0]});for(I in G.params){j.attr(I,G.params[I])}tinymce.each(b,function(n){if(G[n]&&n!="type"){j.attr(n,G[n])}});H.append(j)}if(G.object_html){y=new f("#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 f("#text",3);y.raw=true;y.value=G.video_html;C.append(y)}}if(F){if(G.video_html){y=new f("#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(O){return new tinymce.html.Serializer({inner:true,validate:false}).serialize(O)}function J(P,O){return H[(P.attr(O)||"").toLowerCase()]}function p(P){var O=P.replace(/^.*\.([^.]+)$/,"$1");return H[O.toLowerCase()||""]}if(!C.parent){return}if(C.name==="script"){if(C.firstChild){m=i.exec(C.firstChild.value)}if(!m){return}o=m[1];K={video:{},params:h.parse(m[2])};A=K.params.width;x=K.params.height}K=K||{video:{},params:{}};M=new f("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(!a[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(!a[N]&&!K.params[N]){K.params[N]=k.attributes.map[N]}}}if(s){A=e(s.attr("width"));x=e(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(b,function(O){M.attr(O,s.attr(O))});for(N in s.attributes.map){if(!a[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":h.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..33a58050e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js
@@ -0,0 +1,898 @@
+/**
+ * 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 normalizeSize(size) {
+ return typeof(size) == "string" ? size.replace(/[^0-9%]/g, '') : size;
+ }
+
+ 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 = normalizeSize(data.width || (data.type == 'audio' ? "300" : "320"));
+ img.height = data.height = normalizeSize(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'));
+ }
+
+ // Use node width/height to override the data width/height when the placeholder is resized
+ data.width = node.attr('width') || data.width;
+ data.height = node.attr('height') || data.height;
+
+ // 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: normalizeSize(node.attr('width')),
+ height: normalizeSize(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: normalizeSize(node.attr('width')),
+ height: normalizeSize(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: normalizeSize(node.attr('width')),
+ height: normalizeSize(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: normalizeSize(node.attr('width')),
+ height: normalizeSize(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: normalizeSize(node.attr('width')),
+ height: normalizeSize(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 = normalizeSize(iframe.attr('width'));
+ height = normalizeSize(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..89cea2a41
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/media.js
@@ -0,0 +1,513 @@
+(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' && value != null) {
+ 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','image','media');
+
+ 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 Embed
+ if (src.match(/youtube\.com\/embed\/\w+/)) {
+ data.width = 425;
+ data.height = 350;
+ data.params.frameborder = '0';
+ data.type = 'iframe';
+ setVal('src', src);
+ setVal('media_type', data.type);
+ } else {
+ // 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);
+ }
+
+ // Vimeo
+ if (src.match(/vimeo\.com\/([0-9]+)/)) {
+ data.width = 425;
+ data.height = 350;
+ data.params.frameborder = '0';
+ data.type = 'iframe';
+ src = 'http://player.vimeo.com/video/' + src.match(/vimeo.com\/([0-9]+)/)[1];
+ setVal('src', src);
+ setVal('media_type', data.type);
+ }
+
+ // stream.cz
+ if (src.match(/stream\.cz\/((?!object).)*\/([0-9]+)/)) {
+ data.width = 425;
+ data.height = 350;
+ data.params.frameborder = '0';
+ data.type = 'iframe';
+ src = 'http://www.stream.cz/object/' + src.match(/stream.cz\/[^/]+\/([0-9]+)/)[1];
+ setVal('src', src);
+ setVal('media_type', data.type);
+ }
+
+ // Google maps
+ if (src.match(/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/)) {
+ data.width = 425;
+ data.height = 350;
+ data.params.frameborder = '0';
+ data.type = 'iframe';
+ src = 'http://maps.google.com/maps/ms?msid=' + src.match(/msid=(.+)/)[1] + "&output=embed";
+ 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, element) {
+ if (!editor.schema.getElementRule(element || media_type)) {
+ return '';
+ }
+
+ 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", "object");
+ html += option("quicktime", "object");
+ html += option("shockwave", "object");
+ html += option("windowsmedia", "object");
+ html += option("realmedia", "object");
+ html += option("iframe");
+
+ if (editor.getParam('media_embedded_audio', false)) {
+ html += option('embeddedaudio', "object");
+ }
+
+ 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..da411ebc0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js
@@ -0,0 +1 @@
+(function(){var c=tinymce.dom.TreeWalker;var a="contenteditable",d="data-mce-"+a;var e=tinymce.VK;function b(n){var j=n.dom,p=n.selection,r,o="mce_noneditablecaret",r="\uFEFF";function m(t){var s;if(t.nodeType===1){s=t.getAttribute(d);if(s&&s!=="inherit"){return s}s=t.contentEditable;if(s!=="inherit"){return s}}return null}function g(s){var t;while(s){t=m(s);if(t){return t==="false"?s:null}s=s.parentNode}}function l(s){while(s){if(s.id===o){return s}s=s.parentNode}}function k(s){var t;if(s){t=new c(s,s);for(s=t.current();s;s=t.next()){if(s.nodeType===3){return s}}}}function f(v,u){var s,t;if(m(v)==="false"){if(j.isBlock(v)){p.select(v);return}}t=j.createRng();if(m(v)==="true"){if(!v.firstChild){v.appendChild(n.getDoc().createTextNode("\u00a0"))}v=v.firstChild;u=true}s=j.create("span",{id:o,"data-mce-bogus":true},r);if(u){v.parentNode.insertBefore(s,v)}else{j.insertAfter(s,v)}t.setStart(s.firstChild,1);t.collapse(true);p.setRng(t);return s}function i(s){var v,t,u;if(s){rng=p.getRng(true);rng.setStartBefore(s);rng.setEndBefore(s);v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true);p.setRng(rng)}else{t=l(p.getStart());while((s=j.get(o))&&s!==u){if(t!==s){v=k(s);if(v&&v.nodeValue.charAt(0)==r){v=v.deleteData(0,1)}j.remove(s,true)}u=s}}}function q(){var s,w,u,t,v;function x(B,D){var A,F,E,C,z;A=t.startContainer;F=t.startOffset;if(A.nodeType==3){z=A.nodeValue.length;if((F>0&&F<z)||(D?F==z:F==0)){return}}else{if(F<A.childNodes.length){var G=!D&&F>0?F-1:F;A=A.childNodes[G];if(A.hasChildNodes()){A=A.firstChild}}else{return !D?B:null}}E=new c(A,B);while(C=E[D?"prev":"next"]()){if(C.nodeType===3&&C.nodeValue.length>0){return}else{if(m(C)==="true"){return C}}}return B}i();u=p.isCollapsed();s=g(p.getStart());w=g(p.getEnd());if(s||w){t=p.getRng(true);if(u){s=s||w;var y=p.getStart();if(v=x(s,true)){f(v,true)}else{if(v=x(s,false)){f(v,false)}else{p.select(s)}}}else{t=p.getRng(true);if(s){t.setStartBefore(s)}if(w){t.setEndAfter(w)}p.setRng(t)}}}function h(z,B){var F=B.keyCode,x,C,D,v;function u(H,G){while(H=H[G?"previousSibling":"nextSibling"]){if(H.nodeType!==3||H.nodeValue.length>0){return H}}}function y(G,H){p.select(G);p.collapse(H)}function t(K){var J,I,M,H;function G(O){var N=I;while(N){if(N===O){return}N=N.parentNode}j.remove(O);q()}function L(){var O,P,N=z.schema.getNonEmptyElements();P=new tinymce.dom.TreeWalker(I,z.getBody());while(O=(K?P.prev():P.next())){if(N[O.nodeName.toLowerCase()]){break}if(O.nodeType===3&&tinymce.trim(O.nodeValue).length>0){break}if(m(O)==="false"){G(O);return true}}if(g(O)){return true}return false}if(p.isCollapsed()){J=p.getRng(true);I=J.startContainer;M=J.startOffset;I=l(I)||I;if(H=g(I)){G(H);return false}if(I.nodeType==3&&(K?M>0:M<I.nodeValue.length)){return true}if(I.nodeType==1){I=I.childNodes[M]||I}if(L()){return false}}return true}D=p.getStart();v=p.getEnd();x=g(D)||g(v);if(x&&(F<112||F>124)&&F!=e.DELETE&&F!=e.BACKSPACE){if((tinymce.isMac?B.metaKey:B.ctrlKey)&&(F==67||F==88||F==86)){return}B.preventDefault();if(F==e.LEFT||F==e.RIGHT){var w=F==e.LEFT;if(z.dom.isBlock(x)){var A=w?x.previousSibling:x.nextSibling;var s=new c(A,A);var E=w?s.prev():s.next();y(E,!w)}else{y(x,w)}}}else{if(F==e.LEFT||F==e.RIGHT||F==e.BACKSPACE||F==e.DELETE){C=l(D);if(C){if(F==e.LEFT||F==e.BACKSPACE){x=u(C,true);if(x&&m(x)==="false"){B.preventDefault();if(F==e.LEFT){y(x,true)}else{j.remove(x);return}}else{i(C)}}if(F==e.RIGHT||F==e.DELETE){x=u(C);if(x&&m(x)==="false"){B.preventDefault();if(F==e.RIGHT){y(x,false)}else{j.remove(x);return}}else{i(C)}}}if((F==e.BACKSPACE||F==e.DELETE)&&!t(F==e.BACKSPACE)){B.preventDefault();return false}}}}n.onMouseDown.addToTop(function(s,u){var t=s.selection.getNode();if(m(t)==="false"&&t==u.target){q()}});n.onMouseUp.addToTop(q);n.onKeyDown.addToTop(h);n.onKeyUp.addToTop(q)}tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(i,k){var h,g,j;function f(m,n){var o=j.length,p=n.content,l=tinymce.trim(g);if(n.format=="raw"){return}while(o--){p=p.replace(j[o],function(s){var r=arguments,q=r[r.length-2];if(q>0&&p.charAt(q-1)=='"'){return s}return'<span class="'+l+'" data-mce-content="'+m.dom.encode(r[0])+'">'+m.dom.encode(typeof(r[1])==="string"?r[1]:r[0])+"</span>"})}n.content=p}h=" "+tinymce.trim(i.getParam("noneditable_editable_class","mceEditable"))+" ";g=" "+tinymce.trim(i.getParam("noneditable_noneditable_class","mceNonEditable"))+" ";j=i.getParam("noneditable_regexp");if(j&&!j.length){j=[j]}i.onPreInit.add(function(){b(i);if(j){i.selection.onBeforeSetContent.add(f);i.onBeforeSetContent.add(f)}i.parser.addAttributeFilter("class",function(l){var m=l.length,n,o;while(m--){o=l[m];n=" "+o.attr("class")+" ";if(n.indexOf(h)!==-1){o.attr(d,"true")}else{if(n.indexOf(g)!==-1){o.attr(d,"false")}}}});i.serializer.addAttributeFilter(d,function(l,m){var n=l.length,o;while(n--){o=l[n];if(j&&o.attr("data-mce-content")){o.name="#text";o.type=3;o.raw=true;o.value=o.attr("data-mce-content")}else{o.attr(a,null);o.attr(d,null)}}});i.parser.addAttributeFilter(a,function(l,m){var n=l.length,o;while(n--){o=l[n];o.attr(d,o.attr(a));o.attr(a,null)}})})},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}}});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..a18bcd786
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
@@ -0,0 +1,537 @@
+/**
+ * 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 TreeWalker = tinymce.dom.TreeWalker;
+ var externalName = 'contenteditable', internalName = 'data-mce-' + externalName;
+ var VK = tinymce.VK;
+
+ function handleContentEditableSelection(ed) {
+ var dom = ed.dom, selection = ed.selection, invisibleChar, caretContainerId = 'mce_noneditablecaret', invisibleChar = '\uFEFF';
+
+ // Returns the content editable state of a node "true/false" or null
+ function getContentEditable(node) {
+ var contentEditable;
+
+ // Ignore non elements
+ if (node.nodeType === 1) {
+ // Check for fake content editable
+ contentEditable = node.getAttribute(internalName);
+ if (contentEditable && contentEditable !== "inherit") {
+ return contentEditable;
+ }
+
+ // Check for real content editable
+ contentEditable = node.contentEditable;
+ if (contentEditable !== "inherit") {
+ return contentEditable;
+ }
+ }
+
+ return null;
+ };
+
+ // Returns the noneditable parent or null if there is a editable before it or if it wasn't found
+ function getNonEditableParent(node) {
+ var state;
+
+ while (node) {
+ state = getContentEditable(node);
+ if (state) {
+ return state === "false" ? node : null;
+ }
+
+ node = node.parentNode;
+ }
+ };
+
+ // Get caret container parent for the specified node
+ 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;
+ }
+ }
+ }
+ };
+
+ // Insert caret container before/after target or expand selection to include block
+ function insertCaretContainerOrExpandToBlock(target, before) {
+ var caretContainer, rng;
+
+ // Select block
+ if (getContentEditable(target) === "false") {
+ if (dom.isBlock(target)) {
+ selection.select(target);
+ return;
+ }
+ }
+
+ rng = dom.createRng();
+
+ if (getContentEditable(target) === "true") {
+ if (!target.firstChild) {
+ target.appendChild(ed.getDoc().createTextNode('\u00a0'));
+ }
+
+ target = target.firstChild;
+ before = true;
+ }
+
+ //caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style:'border: 1px solid red'}, invisibleChar);
+ caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true}, invisibleChar);
+
+ if (before) {
+ target.parentNode.insertBefore(caretContainer, target);
+ } else {
+ dom.insertAfter(caretContainer, target);
+ }
+
+ rng.setStart(caretContainer.firstChild, 1);
+ rng.collapse(true);
+ selection.setRng(rng);
+
+ return caretContainer;
+ };
+
+ // Removes any caret container except the one we might be in
+ function removeCaretContainer(caretContainer) {
+ var child, currentCaretContainer, lastContainer;
+
+ if (caretContainer) {
+ rng = selection.getRng(true);
+ rng.setStartBefore(caretContainer);
+ rng.setEndBefore(caretContainer);
+
+ child = findFirstTextNode(caretContainer);
+ if (child && child.nodeValue.charAt(0) == invisibleChar) {
+ child = child.deleteData(0, 1);
+ }
+
+ dom.remove(caretContainer, true);
+
+ selection.setRng(rng);
+ } else {
+ currentCaretContainer = getParentCaretContainer(selection.getStart());
+ while ((caretContainer = dom.get(caretContainerId)) && caretContainer !== lastContainer) {
+ if (currentCaretContainer !== caretContainer) {
+ child = findFirstTextNode(caretContainer);
+ if (child && child.nodeValue.charAt(0) == invisibleChar) {
+ child = child.deleteData(0, 1);
+ }
+
+ dom.remove(caretContainer, true);
+ }
+
+ lastContainer = caretContainer;
+ }
+ }
+ };
+
+ // Modifies the selection to include contentEditable false elements or insert caret containers
+ function moveSelection() {
+ var nonEditableStart, nonEditableEnd, isCollapsed, rng, element;
+
+ // Checks if there is any contents to the left/right side of caret returns the noneditable element or any editable element if it finds one inside
+ function hasSideContent(element, left) {
+ var container, offset, walker, node, len;
+
+ container = rng.startContainer;
+ offset = rng.startOffset;
+
+ // If endpoint is in middle of text node then expand to beginning/end of element
+ if (container.nodeType == 3) {
+ len = container.nodeValue.length;
+ if ((offset > 0 && offset < len) || (left ? offset == len : offset == 0)) {
+ return;
+ }
+ } else {
+ // Can we resolve the node by index
+ if (offset < container.childNodes.length) {
+ // Browser represents caret position as the offset at the start of an element. When moving right
+ // this is the element we are moving into so we consider our container to be child node at offset-1
+ var pos = !left && offset > 0 ? offset-1 : offset;
+ container = container.childNodes[pos];
+ if (container.hasChildNodes()) {
+ container = container.firstChild;
+ }
+ } else {
+ // If not then the caret is at the last position in it's container and the caret container should be inserted after the noneditable element
+ return !left ? element : null;
+ }
+ }
+
+ // Walk left/right to look for contents
+ walker = new TreeWalker(container, element);
+ while (node = walker[left ? 'prev' : 'next']()) {
+ if (node.nodeType === 3 && node.nodeValue.length > 0) {
+ return;
+ } else if (getContentEditable(node) === "true") {
+ // Found contentEditable=true element return this one to we can move the caret inside it
+ return node;
+ }
+ }
+
+ return element;
+ };
+
+ // Remove any existing caret containers
+ removeCaretContainer();
+
+ // Get noneditable start/end elements
+ isCollapsed = selection.isCollapsed();
+ nonEditableStart = getNonEditableParent(selection.getStart());
+ nonEditableEnd = getNonEditableParent(selection.getEnd());
+
+ // Is any fo the range endpoints noneditable
+ if (nonEditableStart || nonEditableEnd) {
+ rng = selection.getRng(true);
+
+ // If it's a caret selection then look left/right to see if we need to move the caret out side or expand
+ if (isCollapsed) {
+ nonEditableStart = nonEditableStart || nonEditableEnd;
+ var start = selection.getStart();
+ if (element = hasSideContent(nonEditableStart, true)) {
+ // We have no contents to the left of the caret then insert a caret container before the noneditable element
+ insertCaretContainerOrExpandToBlock(element, true);
+ } else if (element = hasSideContent(nonEditableStart, false)) {
+ // We have no contents to the right of the caret then insert a caret container after the noneditable element
+ insertCaretContainerOrExpandToBlock(element, false);
+ } else {
+ // We are in the middle of a noneditable so expand to select it
+ selection.select(nonEditableStart);
+ }
+ } else {
+ rng = selection.getRng(true);
+
+ // Expand selection to include start non editable element
+ if (nonEditableStart) {
+ rng.setStartBefore(nonEditableStart);
+ }
+
+ // Expand selection to include end non editable element
+ if (nonEditableEnd) {
+ rng.setEndAfter(nonEditableEnd);
+ }
+
+ selection.setRng(rng);
+ }
+ }
+ };
+
+ function handleKey(ed, e) {
+ var keyCode = e.keyCode, nonEditableParent, caretContainer, startElement, endElement;
+
+ function getNonEmptyTextNodeSibling(node, prev) {
+ while (node = node[prev ? 'previousSibling' : 'nextSibling']) {
+ if (node.nodeType !== 3 || node.nodeValue.length > 0) {
+ return node;
+ }
+ }
+ };
+
+ function positionCaretOnElement(element, start) {
+ selection.select(element);
+ selection.collapse(start);
+ }
+
+ function canDelete(backspace) {
+ var rng, container, offset, nonEditableParent;
+
+ function removeNodeIfNotParent(node) {
+ var parent = container;
+
+ while (parent) {
+ if (parent === node) {
+ return;
+ }
+
+ parent = parent.parentNode;
+ }
+
+ dom.remove(node);
+ moveSelection();
+ }
+
+ function isNextPrevTreeNodeNonEditable() {
+ var node, walker, nonEmptyElements = ed.schema.getNonEmptyElements();
+
+ walker = new tinymce.dom.TreeWalker(container, ed.getBody());
+ while (node = (backspace ? walker.prev() : walker.next())) {
+ // Found IMG/INPUT etc
+ if (nonEmptyElements[node.nodeName.toLowerCase()]) {
+ break;
+ }
+
+ // Found text node with contents
+ if (node.nodeType === 3 && tinymce.trim(node.nodeValue).length > 0) {
+ break;
+ }
+
+ // Found non editable node
+ if (getContentEditable(node) === "false") {
+ removeNodeIfNotParent(node);
+ return true;
+ }
+ }
+
+ // Check if the content node is within a non editable parent
+ if (getNonEditableParent(node)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ if (selection.isCollapsed()) {
+ rng = selection.getRng(true);
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ container = getParentCaretContainer(container) || container;
+
+ // Is in noneditable parent
+ if (nonEditableParent = getNonEditableParent(container)) {
+ removeNodeIfNotParent(nonEditableParent);
+ return false;
+ }
+
+ // Check if the caret is in the middle of a text node
+ if (container.nodeType == 3 && (backspace ? offset > 0 : offset < container.nodeValue.length)) {
+ return true;
+ }
+
+ // Resolve container index
+ if (container.nodeType == 1) {
+ container = container.childNodes[offset] || container;
+ }
+
+ // Check if previous or next tree node is non editable then block the event
+ if (isNextPrevTreeNodeNonEditable()) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ startElement = selection.getStart()
+ endElement = selection.getEnd();
+
+ // Disable all key presses in contentEditable=false except delete or backspace
+ nonEditableParent = getNonEditableParent(startElement) || getNonEditableParent(endElement);
+ if (nonEditableParent && (keyCode < 112 || keyCode > 124) && keyCode != VK.DELETE && keyCode != VK.BACKSPACE) {
+ // Is Ctrl+c, Ctrl+v or Ctrl+x then use default browser behavior
+ if ((tinymce.isMac ? e.metaKey : e.ctrlKey) && (keyCode == 67 || keyCode == 88 || keyCode == 86)) {
+ return;
+ }
+
+ e.preventDefault();
+
+ // Arrow left/right select the element and collapse left/right
+ if (keyCode == VK.LEFT || keyCode == VK.RIGHT) {
+ var left = keyCode == VK.LEFT;
+ // If a block element find previous or next element to position the caret
+ if (ed.dom.isBlock(nonEditableParent)) {
+ var targetElement = left ? nonEditableParent.previousSibling : nonEditableParent.nextSibling;
+ var walker = new TreeWalker(targetElement, targetElement);
+ var caretElement = left ? walker.prev() : walker.next();
+ positionCaretOnElement(caretElement, !left);
+ } else {
+ positionCaretOnElement(nonEditableParent, left);
+ }
+ }
+ } else {
+ // Is arrow left/right, backspace or delete
+ if (keyCode == VK.LEFT || keyCode == VK.RIGHT || keyCode == VK.BACKSPACE || keyCode == VK.DELETE) {
+ caretContainer = getParentCaretContainer(startElement);
+ if (caretContainer) {
+ // Arrow left or backspace
+ if (keyCode == VK.LEFT || keyCode == VK.BACKSPACE) {
+ nonEditableParent = getNonEmptyTextNodeSibling(caretContainer, true);
+
+ if (nonEditableParent && getContentEditable(nonEditableParent) === "false") {
+ e.preventDefault();
+
+ if (keyCode == VK.LEFT) {
+ positionCaretOnElement(nonEditableParent, true);
+ } else {
+ dom.remove(nonEditableParent);
+ return;
+ }
+ } else {
+ removeCaretContainer(caretContainer);
+ }
+ }
+
+ // Arrow right or delete
+ if (keyCode == VK.RIGHT || keyCode == VK.DELETE) {
+ nonEditableParent = getNonEmptyTextNodeSibling(caretContainer);
+
+ if (nonEditableParent && getContentEditable(nonEditableParent) === "false") {
+ e.preventDefault();
+
+ if (keyCode == VK.RIGHT) {
+ positionCaretOnElement(nonEditableParent, false);
+ } else {
+ dom.remove(nonEditableParent);
+ return;
+ }
+ } else {
+ removeCaretContainer(caretContainer);
+ }
+ }
+ }
+
+ if ((keyCode == VK.BACKSPACE || keyCode == VK.DELETE) && !canDelete(keyCode == VK.BACKSPACE)) {
+ e.preventDefault();
+ return false;
+ }
+ }
+ }
+ };
+
+ ed.onMouseDown.addToTop(function(ed, e) {
+ var node = ed.selection.getNode();
+
+ if (getContentEditable(node) === "false" && node == e.target) {
+ // Expand selection on mouse down we can't block the default event since it's used for drag/drop
+ moveSelection();
+ }
+ });
+
+ ed.onMouseUp.addToTop(moveSelection);
+ ed.onKeyDown.addToTop(handleKey);
+ ed.onKeyUp.addToTop(moveSelection);
+ };
+
+ tinymce.create('tinymce.plugins.NonEditablePlugin', {
+ init : function(ed, url) {
+ var editClass, nonEditClass, nonEditableRegExps;
+
+ // Converts configured regexps to noneditable span items
+ function convertRegExpsToNonEditable(ed, args) {
+ var i = nonEditableRegExps.length, content = args.content, cls = tinymce.trim(nonEditClass);
+
+ // Don't replace the variables when raw is used for example on undo/redo
+ if (args.format == "raw") {
+ return;
+ }
+
+ while (i--) {
+ content = content.replace(nonEditableRegExps[i], function(match) {
+ var args = arguments, index = args[args.length - 2];
+
+ // Is value inside an attribute then don't replace
+ if (index > 0 && content.charAt(index - 1) == '"') {
+ return match;
+ }
+
+ return '<span class="' + cls + '" data-mce-content="' + ed.dom.encode(args[0]) + '">' + ed.dom.encode(typeof(args[1]) === "string" ? args[1] : args[0]) + '</span>';
+ });
+ }
+
+ args.content = content;
+ };
+
+ editClass = " " + tinymce.trim(ed.getParam("noneditable_editable_class", "mceEditable")) + " ";
+ nonEditClass = " " + tinymce.trim(ed.getParam("noneditable_noneditable_class", "mceNonEditable")) + " ";
+
+ // Setup noneditable regexps array
+ nonEditableRegExps = ed.getParam("noneditable_regexp");
+ if (nonEditableRegExps && !nonEditableRegExps.length) {
+ nonEditableRegExps = [nonEditableRegExps];
+ }
+
+ ed.onPreInit.add(function() {
+ handleContentEditableSelection(ed);
+
+ if (nonEditableRegExps) {
+ ed.selection.onBeforeSetContent.add(convertRegExpsToNonEditable);
+ ed.onBeforeSetContent.add(convertRegExpsToNonEditable);
+ }
+
+ // Apply contentEditable true/false on elements with the noneditable/editable classes
+ ed.parser.addAttributeFilter('class', function(nodes) {
+ var i = nodes.length, className, node;
+
+ while (i--) {
+ node = nodes[i];
+ className = " " + node.attr("class") + " ";
+
+ if (className.indexOf(editClass) !== -1) {
+ node.attr(internalName, "true");
+ } else if (className.indexOf(nonEditClass) !== -1) {
+ node.attr(internalName, "false");
+ }
+ }
+ });
+
+ // Remove internal name
+ ed.serializer.addAttributeFilter(internalName, function(nodes, name) {
+ var i = nodes.length, node;
+
+ while (i--) {
+ node = nodes[i];
+
+ if (nonEditableRegExps && node.attr('data-mce-content')) {
+ node.name = "#text";
+ node.type = 3;
+ node.raw = true;
+ node.value = node.attr('data-mce-content');
+ } else {
+ node.attr(externalName, null);
+ node.attr(internalName, null);
+ }
+ }
+ });
+
+ // Convert external name into internal name
+ ed.parser.addAttributeFilter(externalName, function(nodes, name) {
+ var i = nodes.length, node;
+
+ while (i--) {
+ node = nodes[i];
+ node.attr(internalName, node.attr(externalName));
+ node.attr(externalName, null);
+ }
+ });
+ });
+ },
+
+ 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
+ };
+ }
+ });
+
+ // 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..0ab05ebbb
--- /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_max_consecutive_linebreaks:2,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&&/<(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)/.test(e.content)){d([[/(?:<br>&nbsp;[\s\r\n]+|<br>)*(<\/?(h[1-6r]|p|div|address|pre|form|table|tbody|thead|tfoot|th|tr|td|li|ol|ul|caption|blockquote|center|dl|dt|dd|dir|fieldset)[^>]*>)(?:<br>&nbsp;[\s\r\n]+|<br>)*/g,"$1"]]);d([[/<br><br>/g,"<BR><BR>"],[/<br>/g," "],[/<BR><BR>/g,"<br>"]])}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(j)||e.wordContent){e.wordContent=true;d([/^\s*(&nbsp;)+/gi,/(&nbsp;|<br[^>]*>)+\s*$/gi]);if(b(k,"paste_convert_headers_to_strong")){j=j.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(k,"paste_convert_middot_lists")){d([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi,"$1__MCE_ITEM__"]])}d([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"]]);do{l=j.length;j=j.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(l!=j.length);if(b(k,"paste_retain_style_properties").replace(/^none$/i,"").length==0){j=j.replace(/<\/?span[^>]*>/gi,"")}else{d([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(t,h,r){var u=[],o=0,q=n(f(r).replace(/&quot;/gi,"'"),";");c(q,function(s){var w,y,z=n(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":u[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":u[o++]="text-align:"+y;return;case"vert-align":u[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":u[o++]="color:"+y;return;case"mso-background":case"mso-highlight":u[o++]="background:"+y;return;case"mso-default-height":u[o++]="min-height:"+x(y);return;case"mso-default-width":u[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":u[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){u[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){u[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}u[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+u.join(";")+'"'}else{return h}}]])}}if(b(k,"paste_convert_headers_to_strong")){d([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}d([[/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi,""]]);i=b(k,"paste_strip_class_attributes");if(i!=="none"){function m(q,o){if(i==="all"){return""}var h=p(n(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(r){return(/^(?!mso)/i.test(r))});return h.length?' class="'+h.join(" ")+'"':""}j=j.replace(/ class="([^"]+)"/gi,m);j=j.replace(/ class=([\-\w]+)/gi,m)}if(b(k,"paste_remove_spans")){j=j.replace(/<\/?span[^>]*>/gi,"")}e.content=j},_postProcess:function(g,i){var f=this,e=f.editor,h=e.dom,d;if(e.settings.paste_enable_default_filters==false){return}if(i.wordContent){c(h.select("a",i.node),function(j){if(!j.href||j.href.indexOf("#_Toc")!=-1){h.remove(j,1)}});if(b(e,"paste_convert_middot_lists")){f._convertLists(g,i)}d=b(e,"paste_retain_style_properties");if((tinymce.is(d,"string"))&&(d!=="all")&&(d!=="*")){d=tinymce.explode(d.replace(/^none$/i,""));c(h.select("*",i.node),function(m){var n={},k=0,l,o,j;if(d){for(l=0;l<d.length;l++){o=d[l];j=h.getStyle(m,o);if(j){n[o]=j;k++}}}h.setAttrib(m,"style","");if(d&&k>0){h.setStyles(m,n)}else{if(m.nodeName=="SPAN"&&!m.className){h.remove(m,true)}}})}}if(b(e,"paste_remove_styles")||(b(e,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(h.select("*[style]",i.node),function(j){j.removeAttribute("style");j.removeAttribute("data-mce-style")})}else{if(tinymce.isWebKit){c(h.select("*",i.node),function(j){j.removeAttribute("data-mce-style")})}}},_convertLists:function(g,e){var i=g.editor.dom,h,l,d=-1,f,m=[],k,j;c(i.select("p",e.node),function(t){var q,u="",s,r,n,o;for(q=t.firstChild;q&&q.nodeType==3;q=q.nextSibling){u+=q.nodeValue}u=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(u)){s="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(u)){s="ol"}if(s){f=parseFloat(t.style.marginLeft||0);if(f>d){m.push(f)}if(!h||s!=k){h=i.create(s);i.insertAfter(h,t)}else{if(f>d){h=l.appendChild(i.create(s))}else{if(f<d){n=tinymce.inArray(m,f);o=i.getParents(h.parentNode,s);h=o[o.length-1-n]||h}}}c(i.select("span",t),function(v){var p=v.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(s=="ul"&&/^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(p)){i.remove(v)}else{if(/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){i.remove(v)}}});r=t.innerHTML;if(s=="ul"){r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/,"")}else{r=t.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}l=h.appendChild(i.create("li",0,r));i.remove(t);d=f;k=s}else{h=d=0}});j=e.node.innerHTML;if(j.indexOf("__MCE_ITEM__")!=-1){e.node.innerHTML=j.replace(/__MCE_ITEM__/g,"")}},_insert:function(f,d){var e=this.editor,g=e.selection.getRng();if(!e.selection.isCollapsed()&&g.startContainer!=g.endContainer){e.getDoc().execCommand("Delete",false,null)}e.execCommand("mceInsertContent",false,f,{skip_undo:d})},_insertPlainText:function(j){var h=this.editor,f=b(h,"paste_text_linebreaktype"),k=b(h,"paste_text_replacements"),g=tinymce.is;function e(m){c(m,function(n){if(n.constructor==RegExp){j=j.replace(n,"")}else{j=j.replace(n[0],n[1])}})}if((typeof(j)==="string")&&(j.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(j)){e([/[\n\r]+/g])}else{e([/\r+/g])}e([[/<\/(?: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"]]);var d=Number(b(h,"paste_max_consecutive_linebreaks"));if(d>-1){var l=new RegExp("\n{"+(d+1)+",}","g");var i="";while(i.length<d){i+="\n"}e([[l,i]])}j=h.dom.decode(tinymce.html.Entities.encodeRaw(j));if(g(k,"array")){e(k)}else{if(g(k,"string")){e(new RegExp(k,"gi"))}}if(f=="none"){e([[/\n+/g," "]])}else{if(f=="br"){e([[/\n/g,"<br />"]])}else{if(f=="p"){e([[/\n+/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"]])}else{e([[/\n\n/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"],[/\n/g,"<br />"]])}}}h.execCommand("mceInsertContent",false,j)}},_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..0154eceb5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
@@ -0,0 +1,885 @@
+/**
+ * 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_max_consecutive_linebreaks: 2,
+ 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 && /<(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)/.test(o.content)) {
+ // 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.
+ ]);
+
+ var maxLinebreaks = Number(getParam(ed, "paste_max_consecutive_linebreaks"));
+ if (maxLinebreaks > -1) {
+ var maxLinebreaksRegex = new RegExp("\n{" + (maxLinebreaks + 1) + ",}", "g");
+ var linebreakReplacement = "";
+
+ while (linebreakReplacement.length < maxLinebreaks) {
+ linebreakReplacement += "\n";
+ }
+
+ process([
+ [maxLinebreaksRegex, linebreakReplacement] // Limit max 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..2443a9184
--- /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="close" value="{#close}" 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..48549c923
--- /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(d){var e=this.editor,h=e.dom,g=e.selection,f=g.getRng(true);c(h.select("span").reverse(),function(i){if(i&&(h.hasClass(i,"mceItemHiddenSpellWord")||h.hasClass(i,"mceItemHidden"))){if(!d||h.decode(i.innerHTML)==d){h.remove(i,1)}}});g.setRng(f)},_markWords:function(l){var h=this.editor,g=h.dom,j=h.getDoc(),i=h.selection,d=i.getRng(true),e=[],k=l.join("|"),m=this._getSeparators(),f=new RegExp("(^|["+m+"])("+k+")(?=["+m+"]|$)","g");this._walk(h.getBody(),function(o){if(o.nodeType==3){e.push(o)}});c(e,function(t){var r,q,o,s,p=t.nodeValue;if(f.test(p)){p=g.encode(p);q=g.create("span",{"class":"mceItemHidden"});if(tinymce.isIE){p=p.replace(f,"$1<mcespell>$2</mcespell>");while((s=p.indexOf("<mcespell>"))!=-1){o=p.substring(0,s);if(o.length){r=j.createTextNode(g.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(g.create("span",{"class":"mceItemHiddenSpellWord"},o))}if(p.length){r=j.createTextNode(g.decode(p));q.appendChild(r)}}else{q.innerHTML=p.replace(f,'$1<span class="mceItemHiddenSpellWord">$2</span>')}g.replace(q,t)}});i.setRng(d)},_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..86fdfceb4
--- /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, r = se.getRng(true);
+
+ 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.setRng(r);
+ },
+
+ _markWords : function(wl) {
+ var ed = this.editor, dom = ed.dom, doc = ed.getDoc(), se = ed.selection, r = se.getRng(true), 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.setRng(r);
+ },
+
+ _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..3b8f0ee77
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/css/props.css
@@ -0,0 +1,14 @@
+#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_toggle_insert_span {padding-top:10px;}
+.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..dda9f928b
--- /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(){var c=false;var f=a.selection.getSelectedBlocks();var d=[];if(f.length===1){d.push(a.selection.getNode().style.cssText)}else{tinymce.each(f,function(g){d.push(a.dom.getAttrib(g,"style"))});c=true}a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:340+parseInt(a.getLang("style.delta_height",0)),inline:1},{applyStyleToBlocks:c,plugin_url:b,styles:d})});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..eaa7c7713
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js
@@ -0,0 +1,71 @@
+/**
+ * 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() {
+
+ var applyStyleToBlocks = false;
+ var blocks = ed.selection.getSelectedBlocks();
+ var styles = [];
+
+ if (blocks.length === 1) {
+ styles.push(ed.selection.getNode().style.cssText);
+ }
+ else {
+ tinymce.each(blocks, function(block) {
+ styles.push(ed.dom.getAttrib(block, 'style'));
+ });
+ applyStyleToBlocks = true;
+ }
+
+ ed.windowManager.open({
+ file : url + '/props.htm',
+ width : 480 + parseInt(ed.getLang('style.delta_width', 0)),
+ height : 340 + parseInt(ed.getLang('style.delta_height', 0)),
+ inline : 1
+ }, {
+ applyStyleToBlocks : applyStyleToBlocks,
+ plugin_url : url,
+ styles : styles
+ });
+ });
+
+ 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);
+})();
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..0a8a8ec3e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/js/props.js
@@ -0,0 +1,709 @@
+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 aggregateStyles(allStyles) {
+ var mergedStyles = {};
+
+ tinymce.each(allStyles, function(style) {
+ if (style !== '') {
+ var parsedStyles = tinyMCEPopup.editor.dom.parseStyle(style);
+ for (var name in parsedStyles) {
+ if (parsedStyles.hasOwnProperty(name)) {
+ if (mergedStyles[name] === undefined) {
+ mergedStyles[name] = parsedStyles[name];
+ }
+ else if (name === 'text-decoration') {
+ if (mergedStyles[name].indexOf(parsedStyles[name]) === -1) {
+ mergedStyles[name] = mergedStyles[name] +' '+ parsedStyles[name];
+ }
+ }
+ }
+ }
+ }
+ });
+
+ return mergedStyles;
+}
+
+var applyActionIsInsert;
+var existingStyles;
+
+function init(ed) {
+ var ce = document.getElementById('container'), h;
+
+ existingStyles = aggregateStyles(tinyMCEPopup.getWindowArg('styles'));
+ ce.style.cssText = tinyMCEPopup.editor.dom.serializeStyle(existingStyles);
+
+ applyActionIsInsert = ed.getParam("edit_css_style_insert_span", false);
+ document.getElementById('toggle_insert_span').checked = applyActionIsInsert;
+
+ 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');
+ f.text_none.checked = inStr(ce.style.textDecoration, 'none');
+ updateTextDecorations();
+
+ // 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 toggleApplyAction() {
+ applyActionIsInsert = ! applyActionIsInsert;
+}
+
+function applyAction() {
+ var ce = document.getElementById('container'), ed = tinyMCEPopup.editor;
+
+ generateCSS();
+
+ tinyMCEPopup.restoreSelection();
+
+ var newStyles = tinyMCEPopup.editor.dom.parseStyle(ce.style.cssText);
+
+ if (applyActionIsInsert) {
+ ed.formatter.register('plugin_style', {
+ inline: 'span', styles: existingStyles
+ });
+ ed.formatter.remove('plugin_style');
+
+ ed.formatter.register('plugin_style', {
+ inline: 'span', styles: newStyles
+ });
+ ed.formatter.apply('plugin_style');
+ } else {
+ var nodes;
+
+ if (tinyMCEPopup.getWindowArg('applyStyleToBlocks')) {
+ nodes = ed.selection.getSelectedBlocks();
+ }
+ else {
+ nodes = ed.selection.getNode();
+ }
+
+ ed.dom.setAttrib(nodes, 'style', tinyMCEPopup.editor.dom.serializeStyle(newStyles));
+ }
+}
+
+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);
+}
+
+function updateTextDecorations(){
+ var el = document.forms[0].elements;
+
+ var textDecorations = ["text_underline", "text_overline", "text_linethrough", "text_blink"];
+ var noneChecked = el["text_none"].checked;
+ tinymce.each(textDecorations, function(id) {
+ el[id].disabled = noneChecked;
+ if (noneChecked) {
+ el[id].checked = false;
+ }
+ });
+}
+
+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..35881b3ac
--- /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",toggle_insert_span:"Insert span at selection",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"});
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..7dc087a30
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/props.htm
@@ -0,0 +1,845 @@
+<!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" onclick="updateTextDecorations();"/></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="panel_toggle_insert_span">
+ <input type="checkbox" class="checkbox" id="toggle_insert_span" name="toggle_insert_span" onClick="toggleApplyAction();" />
+ <label for="toggle_insert_span">{#style_dlg.toggle_insert_span}</label>
+</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/style/readme.txt b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/readme.txt
new file mode 100644
index 000000000..5bac30202
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/readme.txt
@@ -0,0 +1,19 @@
+Edit CSS Style plug-in notes
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Unlike WYSIWYG editor functionality that operates only on the selected text,
+typically by inserting new HTML elements with the specified styles.
+This plug-in operates on the HTML blocks surrounding the selected text.
+No new HTML elements are created.
+
+This plug-in only operates on the surrounding blocks and not the nearest
+parent node. This means that if a block encapsulates a node,
+e.g <p><span>text</span></p>, then only the styles in the block are
+recognized, not those in the span.
+
+When selecting text that includes multiple blocks at the same level (peers),
+this plug-in accumulates the specified styles in all of the surrounding blocks
+and populates the dialogue checkboxes accordingly. There is no differentiation
+between styles set in all the blocks versus styles set in some of the blocks.
+
+When the [Update] or [Apply] buttons are pressed, the styles selected in the
+checkboxes are applied to all blocks that surround the selected text.
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..2c5129161
--- /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]:not(iframe)");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..94f45320d
--- /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]:not(iframe)');
+
+ 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..4a35a5ef9
--- /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{L=D=null;e(g,function(Z,aa){e(Z,function(ac,ab){if(j(ac)){if(!L){L={x:ab,y:aa}}D={x:ab,y:aa}}})});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){if(!O){return}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)}});G.removeClass(G.select("td.mceSelected,th.mceSelected"),"mceSelected")}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){var T=S&&S[R?"lastChild":"firstChild"];return T&&T.nodeName==="BR"?C.dom.getParent(T,"td,th"):T}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)}function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){if(r.settings.forced_root_block){r.dom.add(r.getBody(),r.settings.forced_root_block,null,d.isIE?"&nbsp;":'<br data-mce-bogus="1" />')}else{r.dom.add(r.getBody(),"br",{"data-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.nodeName=="BR"||(z.childNodes.length==1&&(z.firstChild.nodeName=="BR"||z.firstChild.nodeValue=="\u00a0")))&&z.previousSibling&&z.previousSibling.nodeName=="TABLE"){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..532b79c6f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js
@@ -0,0 +1,1456 @@
+/**
+ * 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 {
+ startPos = endPos = null;
+
+ // Calculate start/end pos by checking for selected cells in grid works better with context menu
+ each(grid, function(row, y) {
+ each(row, function(cell, x) {
+ if (isCellSelected(cell)) {
+ if (!startPos) {
+ startPos = {x: x, y: y};
+ }
+
+ endPos = {x: x, y: y};
+ }
+ });
+ });
+
+ // 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) {
+ // If we don't have any rows in the clipboard, return immediately
+ if(!rows)
+ return;
+
+ 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);
+ });
+
+ // Remove current selection
+ dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
+ };
+
+ 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) {
+ var child = parent && parent[up ? 'lastChild' : 'firstChild'];
+ // BR is not a valid table child to return in this case we return the table cell
+ return child && child.nodeName === 'BR' ? ed.dom.getParent(child, 'td,th') : child;
+ }
+
+ 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
+ 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') {
+ if (ed.settings.forced_root_block)
+ ed.dom.add(ed.getBody(), ed.settings.forced_root_block, null, tinymce.isIE ? '&nbsp;' : '<br data-mce-bogus="1" />');
+ else
+ ed.dom.add(ed.getBody(), 'br', {'data-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.nodeName == "BR" || (last.childNodes.length == 1 && (last.firstChild.nodeName == 'BR' || last.firstChild.nodeValue == '\u00a0'))) && last.previousSibling && last.previousSibling.nodeName == "TABLE") {
+ ed.dom.remove(last);
+ }
+ });
+
+
+ /**
+ * Fixes bug in Gecko where shift-enter in table cell does not place caret on new line
+ *
+ * Removed: Since the new enter logic seems to fix this one.
+ */
+ /*
+ if (tinymce.isGecko) {
+ ed.onKeyDown.add(function(ed, e) {
+ if (e.keyCode === tinymce.VK.ENTER && e.shiftKey) {
+ var node = ed.selection.getRng().startContainer;
+ var tableCell = dom.getParent(node, 'td,th');
+ if (tableCell) {
+ var zeroSizedNbsp = ed.getDoc().createTextNode("\uFEFF");
+ dom.insertAfter(zeroSizedNbsp, node);
+ }
+ }
+ });
+ }
+ */
+
+ 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..02ecf22c8
--- /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")?cell.getAttribute("colspan"):1;
+ } 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")?cell.getAttribute("colspan"):1;
+ } 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..0c678de46
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/row.js
@@ -0,0 +1,254 @@
+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);
+ setActionforRowType(formObj, 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);
+}
+
+function changedRowType() {
+ var formObj = document.forms[0];
+ var rowtype = getSelectValue(formObj, 'rowtype');
+
+ setActionforRowType(formObj, rowtype);
+
+}
+
+function setActionforRowType(formObj, rowtype) {
+ if (rowtype === "tbody") {
+ formObj.action.disabled = false;
+ } else {
+ selectByValue(formObj, 'action', "row");
+ formObj.action.disabled = true;
+ }
+}
+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..1db243b63
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/table.js
@@ -0,0 +1,501 @@
+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', false, {}, {skip_undo: true});
+
+ // 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);
+
+ // Fixes a bug in IE where the caret cannot be placed after the table if the table is at the end of the document
+ if (tinymce.isIE && node.nextSibling == null) {
+ if (inst.settings.forced_root_block)
+ dom.insertAfter(dom.create(inst.settings.forced_root_block), node);
+ else
+ dom.insertAfter(dom.create('br', {'data-mce-bogus': '1'}), 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', false, {}, {skip_undo: true});
+
+ 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");
+
+ // Hide advanced fields that isn't available in the schema
+ tinymce.each("summary id rules dir style frame".split(" "), function(name) {
+ var tr = tinyMCEPopup.dom.getParent(name, "tr") || tinyMCEPopup.dom.getParent("t" + name, "tr");
+
+ if (tr && !tinyMCEPopup.editor.schema.isValid("table", name)) {
+ tr.style.display = 'none';
+ }
+ });
+
+ 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..6ebef2842
--- /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" onChange="changedRowType();">
+ <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/visualblocks/css/visualblocks.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css
new file mode 100644
index 000000000..76bc92b50
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/css/visualblocks.css
@@ -0,0 +1,21 @@
+p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, blockquote, address, pre, figure {display: block; padding-top: 10px; border: 1px dashed #BBB; background: transparent no-repeat}
+p, h1, h2, h3, h4, h5, h6, hgroup, aside, div, section, article, address, pre, figure {margin-left: 3px}
+section, article, address, hgroup, aside, figure {margin: 0 0 1em 3px}
+
+p {background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7)}
+h1 {background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==)}
+h2 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==)}
+h3 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7)}
+h4 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==)}
+h5 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==)}
+h6 {background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==)}
+div {background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7)}
+section {background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=)}
+article {background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7)}
+blockquote {background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7)}
+address {background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=)}
+pre {background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==)}
+hgroup {background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7)}
+aside {background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=)}
+figure {background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7)}
+figcaption {border: 1px dashed #BBB}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js
new file mode 100644
index 000000000..c65eaf2b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin.js
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.VisualBlocks",{init:function(a,b){var c;if(!window.NodeList){return}a.addCommand("mceVisualBlocks",function(){var e=a.dom,d;if(!c){c=e.uniqueId();d=e.create("link",{id:c,rel:"stylesheet",href:b+"/css/visualblocks.css"});a.getDoc().getElementsByTagName("head")[0].appendChild(d)}else{d=e.get(c);d.disabled=!d.disabled}a.controlManager.setActive("visualblocks",!d.disabled)});a.addButton("visualblocks",{title:"visualblocks.desc",cmd:"mceVisualBlocks"});a.onInit.add(function(){if(a.settings.visualblocks_default_state){a.execCommand("mceVisualBlocks",false,null,{skip_focus:true})}})},getInfo:function(){return{longname:"Visual blocks",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualblocks",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("visualblocks",tinymce.plugins.VisualBlocks)})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js
new file mode 100644
index 000000000..b9d2ab2e1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualblocks/editor_plugin_src.js
@@ -0,0 +1,63 @@
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2012, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+(function() {
+ tinymce.create('tinymce.plugins.VisualBlocks', {
+ init : function(ed, url) {
+ var cssId;
+
+ // We don't support older browsers like IE6/7 and they don't provide prototypes for DOM objects
+ if (!window.NodeList) {
+ return;
+ }
+
+ ed.addCommand('mceVisualBlocks', function() {
+ var dom = ed.dom, linkElm;
+
+ if (!cssId) {
+ cssId = dom.uniqueId();
+ linkElm = dom.create('link', {
+ id: cssId,
+ rel : 'stylesheet',
+ href : url + '/css/visualblocks.css'
+ });
+
+ ed.getDoc().getElementsByTagName('head')[0].appendChild(linkElm);
+ } else {
+ linkElm = dom.get(cssId);
+ linkElm.disabled = !linkElm.disabled;
+ }
+
+ ed.controlManager.setActive('visualblocks', !linkElm.disabled);
+ });
+
+ ed.addButton('visualblocks', {title : 'visualblocks.desc', cmd : 'mceVisualBlocks'});
+
+ ed.onInit.add(function() {
+ if (ed.settings.visualblocks_default_state) {
+ ed.execCommand('mceVisualBlocks', false, null, {skip_focus : true});
+ }
+ });
+ },
+
+ getInfo : function() {
+ return {
+ longname : 'Visual blocks',
+ author : 'Moxiecode Systems AB',
+ authorurl : 'http://tinymce.moxiecode.com',
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualblocks',
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('visualblocks', tinymce.plugins.VisualBlocks);
+})(); \ No newline at end of file
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..42ece2092
--- /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(c,d){var e=this,f=0,g=tinymce.VK;e.countre=c.getParam("wordcount_countregex",/[\w\u2019\'-]+/g);e.cleanre=c.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);e.update_rate=c.getParam("wordcount_update_rate",2000);e.update_on_delete=c.getParam("wordcount_update_on_delete",false);e.id=c.id+"-word-count";c.onPostRender.add(function(i,h){var j,k;k=i.getParam("wordcount_target_id");if(!k){j=tinymce.DOM.get(i.id+"_path_row");if(j){tinymce.DOM.add(j.parentNode,"div",{style:"float: right"},i.getLang("wordcount.words","Words: ")+'<span id="'+e.id+'">0</span>')}}else{tinymce.DOM.add(k,"span",{},'<span id="'+e.id+'">0</span>')}});c.onInit.add(function(h){h.selection.onSetContent.add(function(){e._count(h)});e._count(h)});c.onSetContent.add(function(h){e._count(h)});function b(h){return h!==f&&(h===g.ENTER||f===g.SPACEBAR||a(f))}function a(h){return h===g.DELETE||h===g.BACKSPACE}c.onKeyUp.add(function(h,i){if(b(i.keyCode)||e.update_on_delete&&a(i.keyCode)){e._count(h)}f=i.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},b.update_rate)}},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..34b265553
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/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() {
+ tinymce.create('tinymce.plugins.WordCount', {
+ block : 0,
+ id : null,
+ countre : null,
+ cleanre : null,
+
+ init : function(ed, url) {
+ var t = this, last = 0, VK = tinymce.VK;
+
+ t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\'-]+/g); // u2019 == &rsquo;
+ t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);
+ t.update_rate = ed.getParam('wordcount_update_rate', 2000);
+ t.update_on_delete = ed.getParam('wordcount_update_on_delete', false);
+ 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);
+ });
+
+ function checkKeys(key) {
+ return key !== last && (key === VK.ENTER || last === VK.SPACEBAR || checkDelOrBksp(last));
+ }
+
+ function checkDelOrBksp(key) {
+ return key === VK.DELETE || key === VK.BACKSPACE;
+ }
+
+ ed.onKeyUp.add(function(ed, e) {
+ if (checkKeys(e.keyCode) || t.update_on_delete && checkDelOrBksp(e.keyCode)) {
+ 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;}, t.update_rate);
+ }
+ }, 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..b625531a6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm
@@ -0,0 +1,70 @@
+<!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}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();"/>
+ <div id="preview_wrapper"><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><span id="preview"></span></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..4b8d56375
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js
@@ -0,0 +1 @@
+(function(h){var i=h.DOM,g=h.dom.Event,c=h.extend,f=h.each,a=h.util.Cookie,e,d=h.explode;function b(p,m){var k,l,o=p.dom,j="",n,r;previewStyles=p.settings.preview_styles;if(previewStyles===false){return""}if(!previewStyles){previewStyles="font-family font-size font-weight text-decoration text-transform color background-color"}function q(s){return s.replace(/%(\w+)/g,"")}k=m.block||m.inline||"span";l=o.create(k);f(m.styles,function(t,s){t=q(t);if(t){o.setStyle(l,s,t)}});f(m.attributes,function(t,s){t=q(t);if(t){o.setAttrib(l,s,t)}});f(m.classes,function(s){s=q(s);if(!o.hasClass(l,s)){o.addClass(l,s)}});o.setStyles(l,{position:"absolute",left:-65535});p.getBody().appendChild(l);n=o.getStyle(p.getBody(),"fontSize",true);n=/px$/.test(n)?parseInt(n,10):0;f(previewStyles.split(" "),function(s){var t=o.getStyle(l,s,true);if(s=="background-color"&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(t)){t=o.getStyle(p.getBody(),s,true);if(o.toHex(t).toLowerCase()=="#ffffff"){return}}if(s=="font-size"){if(/em|%$/.test(t)){if(n===0){return}t=parseFloat(t,10)/(/%$/.test(t)?100:1);t=(t*n)+"px"}}j+=s+":"+t+";"});o.remove(l);return j}h.ThemeManager.requireLangPack("advanced");h.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(k,l){var m=this,n,j,p;m.editor=k;m.url=l;m.onResolveName=new h.util.Dispatcher(this);n=k.settings;k.forcedHighContrastMode=k.settings.detect_highcontrast&&m._isHighContrast();k.settings.skin=k.forcedHighContrastMode?"highcontrast":k.settings.skin;if(!n.theme_advanced_buttons1){n=c({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"},n)}m.settings=n=c({theme_advanced_path:true,theme_advanced_toolbar_location:"top",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"left",theme_advanced_statusbar_location:"bottom",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:k.settings.readonly},n);if(!n.font_size_style_values){n.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(h.is(n.theme_advanced_font_sizes,"string")){n.font_size_style_values=h.explode(n.font_size_style_values);n.font_size_classes=h.explode(n.font_size_classes||"");p={};k.settings.theme_advanced_font_sizes=n.theme_advanced_font_sizes;f(k.getParam("theme_advanced_font_sizes","","hash"),function(r,q){var o;if(q==r&&r>=1&&r<=7){q=r+" ("+m.sizes[r-1]+"pt)";o=n.font_size_classes[r-1];r=n.font_size_style_values[r-1]||(m.sizes[r-1]+"pt")}if(/^\s*\./.test(r)){o=r.replace(/\./g,"")}p[q]=o?{"class":o}:{fontSize:r}});n.theme_advanced_font_sizes=p}if((j=n.theme_advanced_path_location)&&j!="none"){n.theme_advanced_statusbar_location=n.theme_advanced_path_location}if(n.theme_advanced_statusbar_location=="none"){n.theme_advanced_statusbar_location=0}if(k.settings.content_css!==false){k.contentCSS.push(k.baseURI.toAbsolute(l+"/skins/"+k.settings.skin+"/content.css"))}k.onInit.add(function(){if(!k.settings.readonly){k.onNodeChange.add(m._nodeChanged,m);k.onKeyUp.add(m._updateUndoStatus,m);k.onMouseUp.add(m._updateUndoStatus,m);k.dom.bind(k.dom.getRoot(),"dragend",function(){m._updateUndoStatus(k)})}});k.onSetProgressState.add(function(r,o,s){var t,u=r.id,q;if(o){m.progressTimer=setTimeout(function(){t=r.getContainer();t=t.insertBefore(i.create("DIV",{style:"position:relative"}),t.firstChild);q=i.get(r.id+"_tbl");i.add(t,"div",{id:u+"_blocker","class":"mceBlocker",style:{width:q.clientWidth+2,height:q.clientHeight+2}});i.add(t,"div",{id:u+"_progress","class":"mceProgress",style:{left:q.clientWidth/2,top:q.clientHeight/2}})},s||0)}else{i.remove(u+"_blocker");i.remove(u+"_progress");clearTimeout(m.progressTimer)}});i.loadCSS(n.editor_css?k.documentBaseURI.toAbsolute(n.editor_css):l+"/skins/"+k.settings.skin+"/ui.css");if(n.skin_variant){i.loadCSS(l+"/skins/"+k.settings.skin+"/ui_"+n.skin_variant+".css")}},_isHighContrast:function(){var j,k=i.add(i.getRoot(),"div",{style:"background-color: rgb(171,239,86);"});j=(i.getStyle(k,"background-color",true)+"").toLowerCase().replace(/ /g,"");i.remove(k);return j!="rgb(171,239,86)"&&j!="#abef56"},createControl:function(m,j){var k,l;if(l=j.createControl(m)){return l}switch(m){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((k=this.controls[m])){return j.createButton(m,{title:"advanced."+k[0],cmd:k[1],ui:k[2],value:k[3]})}},execCommand:function(l,k,m){var j=this["_"+l];if(j){j.call(this,k,m);return true}return false},_importClasses:function(l){var j=this.editor,k=j.controlManager.get("styleselect");if(k.getLength()==0){f(j.dom.getClasses(),function(q,m){var p="style_"+m,n;n={inline:"span",attributes:{"class":q["class"]},selector:"*"};j.formatter.register(p,n);k.add(q["class"],p,{style:function(){return b(j,n)}})})}},_createStyleSelect:function(o){var l=this,j=l.editor,k=j.controlManager,m;m=k.createListBox("styleselect",{title:"advanced.style_select",onselect:function(q){var r,n=[],p;f(m.items,function(s){n.push(s.value)});j.focus();j.undoManager.add();r=j.formatter.matchAll(n);h.each(r,function(s){if(!q||s==q){if(s){j.formatter.remove(s)}p=true}});if(!p){j.formatter.apply(q)}j.undoManager.add();j.nodeChanged();return false}});j.onPreInit.add(function(){var p=0,n=j.getParam("style_formats");if(n){f(n,function(q){var r,s=0;f(q,function(){s++});if(s>1){r=q.name=q.name||"style_"+(p++);j.formatter.register(r,q);m.add(q.title,r,{style:function(){return b(j,q)}})}else{m.add(q.title)}})}else{f(j.getParam("theme_advanced_styles","","hash"),function(t,s){var r,q;if(t){r="style_"+(p++);q={inline:"span",classes:t,selector:"*"};j.formatter.register(r,q);m.add(l.editor.translate(s),r,{style:function(){return b(j,q)}})}})}});if(m.getLength()==0){m.onPostRender.add(function(p,q){if(!m.NativeListBox){g.add(q.id+"_text","focus",l._importClasses,l);g.add(q.id+"_text","mousedown",l._importClasses,l);g.add(q.id+"_open","focus",l._importClasses,l);g.add(q.id+"_open","mousedown",l._importClasses,l)}else{g.add(q.id,"focus",l._importClasses,l)}})}return m},_createFontSelect:function(){var l,k=this,j=k.editor;l=j.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(m){var n=l.items[l.selectedIndex];if(!m&&n){j.execCommand("FontName",false,n.value);return}j.execCommand("FontName",false,m);l.select(function(o){return m==o});if(n&&n.value==m){l.select(null)}return false}});if(l){f(j.getParam("theme_advanced_fonts",k.settings.theme_advanced_fonts,"hash"),function(n,m){l.add(j.translate(m),n,{style:n.indexOf("dings")==-1?"font-family:"+n:""})})}return l},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(o){var p=n.items[n.selectedIndex];if(!o&&p){p=p.value;if(p["class"]){k.formatter.toggle("fontsize_class",{value:p["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,p.fontSize)}return}if(o["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}n.select(function(q){return o==q});if(p&&(p.value.fontSize==o.fontSize||p.value["class"]&&p.value["class"]==o["class"])){n.select(null)}return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(p,o){var q=p.fontSize;if(q>=1&&q<=7){q=m.sizes[parseInt(q)-1]+"pt"}n.add(o,p,{style:"font-size:"+q,"class":"mceFontSize"+(l++)+(" "+(p["class"]||""))})})}return n},_createBlockFormats:function(){var l,j={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"},k=this;l=k.editor.controlManager.createListBox("formatselect",{title:"advanced.block",onselect:function(m){k.editor.execCommand("FormatBlock",false,m);return false}});if(l){f(k.editor.getParam("theme_advanced_blockformats",k.settings.theme_advanced_blockformats,"hash"),function(n,m){l.add(k.editor.translate(m!=n?m:j[n]),n,{"class":"mce_formatPreview mce_"+n,style:function(){return b(k.editor,{block:n})}})})}return l},_createForeColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_text_colors){m.colors=j}if(l.theme_advanced_default_foreground_color){m.default_color=l.theme_advanced_default_foreground_color}m.title="advanced.forecolor_desc";m.cmd="ForeColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("forecolor",m);return n},_createBackColorMenu:function(){var n,k=this,l=k.settings,m={},j;if(l.theme_advanced_more_colors){m.more_colors_func=function(){k._mceColorPicker(0,{color:n.value,func:function(o){n.setColor(o)}})}}if(j=l.theme_advanced_background_colors){m.colors=j}if(l.theme_advanced_default_background_color){m.default_color=l.theme_advanced_default_background_color}m.title="advanced.backcolor_desc";m.cmd="HiliteColor";m.scope=this;n=k.editor.controlManager.createColorSplitButton("backcolor",m);return n},renderUI:function(l){var q,m,r,w=this,u=w.editor,x=w.settings,v,k,j;if(u.settings){u.settings.aria_label=x.aria_label+u.getLang("advanced.help_shortcut")}q=k=i.create("span",{role:"application","aria-labelledby":u.id+"_voice",id:u.id+"_parent","class":"mceEditor "+u.settings.skin+"Skin"+(x.skin_variant?" "+u.settings.skin+"Skin"+w._ufirst(x.skin_variant):"")+(u.settings.directionality=="rtl"?" mceRtl":"")});i.add(q,"span",{"class":"mceVoiceLabel",style:"display:none;",id:u.id+"_voice"},x.aria_label);if(!i.boxModel){q=i.add(q,"div",{"class":"mceOldBoxModel"})}q=v=i.add(q,"table",{role:"presentation",id:u.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});q=r=i.add(q,"tbody");switch((x.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":m=w._rowLayout(x,r,l);break;case"customlayout":m=u.execCallback("theme_advanced_custom_layout",x,r,l,k);break;default:m=w._simpleLayout(x,r,l,k)}q=l.targetNode;j=v.rows;i.addClass(j[0],"mceFirst");i.addClass(j[j.length-1],"mceLast");f(i.select("tr",r),function(o){i.addClass(o.firstChild,"mceFirst");i.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(i.get(x.theme_advanced_toolbar_container)){i.get(x.theme_advanced_toolbar_container).appendChild(k)}else{i.insertAfter(k,q)}g.add(u.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){w._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return false}});if(!u.getParam("accessibility_focus")){g.add(i.add(k,"a",{href:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(u.id).focus()})}if(x.theme_advanced_toolbar_location=="external"){l.deltaHeight=0}w.deltaHeight=l.deltaHeight;l.targetNode=null;u.onKeyDown.add(function(p,n){var s=121,o=122;if(n.altKey){if(n.keyCode===s){if(h.isWebKit){window.focus()}w.toolbarGroup.focus();return g.cancel(n)}else{if(n.keyCode===o){i.get(p.id+"_path_row").focus();return g.cancel(n)}}}});u.addShortcut("alt+0","","mceShortcuts",w);return{iframeContainer:m,editorContainer:u.id+"_parent",sizeContainer:v,deltaHeight:l.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:h.majorVersion+"."+h.minorVersion}},resizeBy:function(j,k){var l=i.get(this.editor.id+"_ifr");this.resizeTo(l.clientWidth+j,l.clientHeight+k)},resizeTo:function(j,n,l){var k=this.editor,m=this.settings,o=i.get(k.id+"_tbl"),p=i.get(k.id+"_ifr");j=Math.max(m.theme_advanced_resizing_min_width||100,j);n=Math.max(m.theme_advanced_resizing_min_height||100,n);j=Math.min(m.theme_advanced_resizing_max_width||65535,j);n=Math.min(m.theme_advanced_resizing_max_height||65535,n);i.setStyle(o,"height","");i.setStyle(p,"height",n);if(m.theme_advanced_resize_horizontal){i.setStyle(o,"width","");i.setStyle(p,"width",j);if(j<o.clientWidth){j=o.clientWidth;i.setStyle(p,"width",o.clientWidth)}}if(l&&m.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+k.id+"_size",{cw:j,ch:n})}},destroy:function(){var j=this.editor.id;g.clear(j+"_resize");g.clear(j+"_path_row");g.clear(j+"_external_close")},_simpleLayout:function(z,u,l,j){var y=this,v=y.editor,w=z.theme_advanced_toolbar_location,q=z.theme_advanced_statusbar_location,m,k,r,x;if(z.readonly){m=i.add(u,"tr");m=k=i.add(m,"td",{"class":"mceIframeContainer"});return k}if(w=="top"){y._addToolbars(u,l)}if(w=="external"){m=x=i.create("div",{style:"position:relative"});m=i.add(m,"div",{id:v.id+"_external","class":"mceExternalToolbar"});i.add(m,"a",{id:v.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});m=i.add(m,"table",{id:v.id+"_tblext",cellSpacing:0,cellPadding:0});r=i.add(m,"tbody");if(j.firstChild.className=="mceOldBoxModel"){j.firstChild.appendChild(x)}else{j.insertBefore(x,j.firstChild)}y._addToolbars(r,l);v.onMouseUp.add(function(){var o=i.get(v.id+"_external");i.show(o);i.hide(e);var n=g.add(v.id+"_external_close","click",function(){i.hide(v.id+"_external");g.remove(v.id+"_external_close","click",n);return false});i.show(o);i.setStyle(o,"top",0-i.getRect(v.id+"_tblext").h-1);i.hide(o);i.show(o);o.style.filter="";e=v.id+"_external";o=null})}if(q=="top"){y._addStatusBar(u,l)}if(!z.theme_advanced_toolbar_container){m=i.add(u,"tr");m=k=i.add(m,"td",{"class":"mceIframeContainer"})}if(w=="bottom"){y._addToolbars(u,l)}if(q=="bottom"){y._addStatusBar(u,l)}return k},_rowLayout:function(x,p,l){var w=this,q=w.editor,v,y,j=q.controlManager,m,k,u,r;v=x.theme_advanced_containers_default_class||"";y=x.theme_advanced_containers_default_align||"center";f(d(x.theme_advanced_containers||""),function(s,o){var n=x["theme_advanced_container_"+s]||"";switch(s.toLowerCase()){case"mceeditor":m=i.add(p,"tr");m=k=i.add(m,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":w._addStatusBar(p,l);break;default:r=(x["theme_advanced_container_"+s+"_align"]||y).toLowerCase();r="mce"+w._ufirst(r);m=i.add(i.add(p,"tr"),"td",{"class":"mceToolbar "+(x["theme_advanced_container_"+s+"_class"]||v)+" "+r||y});u=j.createToolbar("toolbar"+o);w._addControls(n,u);i.setHTML(m,u.renderHTML());l.deltaHeight-=x.theme_advanced_row_height}});return k},_addControls:function(k,j){var l=this,m=l.settings,n,o=l.editor.controlManager;if(m.theme_advanced_disable&&!l._disabled){n={};f(d(m.theme_advanced_disable),function(p){n[p]=1});l._disabled=n}else{n=l._disabled}f(d(k),function(q){var p;if(n&&n[q]){return}if(q=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(r){r=l.createControl(r,o);if(r){j.add(r)}});return}p=l.createControl(q,o);if(p){j.add(p)}})},_addToolbars:function(y,k){var B=this,q,p,u=B.editor,C=B.settings,A,j=u.controlManager,w,l,r=[],z,x,m=false;x=j.createToolbarGroup("toolbargroup",{name:u.getLang("advanced.toolbar"),tab_focus_toolbar:u.getParam("theme_advanced_tab_focus_toolbar")});B.toolbarGroup=x;z=C.theme_advanced_toolbar_align.toLowerCase();z="mce"+B._ufirst(z);l=i.add(i.add(y,"tr",{role:"presentation"}),"td",{"class":"mceToolbar "+z,role:"toolbar"});for(q=1;(A=C["theme_advanced_buttons"+q]);q++){m=true;p=j.createToolbar("toolbar"+q,{"class":"mceToolbarRow"+q});if(C["theme_advanced_buttons"+q+"_add"]){A+=","+C["theme_advanced_buttons"+q+"_add"]}if(C["theme_advanced_buttons"+q+"_add_before"]){A=C["theme_advanced_buttons"+q+"_add_before"]+","+A}B._addControls(A,p);x.add(p);k.deltaHeight-=C.theme_advanced_row_height}if(!m){k.deltaHeight-=C.theme_advanced_row_height}r.push(x.renderHTML());r.push(i.createHTML("a",{href:"#",accesskey:"z",title:u.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+u.id+"').focus();"},"<!-- IE -->"));i.setHTML(l,r.join(""))},_addStatusBar:function(p,k){var l,w=this,q=w.editor,x=w.settings,j,u,v,m;l=i.add(p,"tr");l=m=i.add(l,"td",{"class":"mceStatusbar"});l=i.add(l,"div",{id:q.id+"_path_row",role:"group","aria-labelledby":q.id+"_path_voice"});if(x.theme_advanced_path){i.add(l,"span",{id:q.id+"_path_voice"},q.translate("advanced.path"));i.add(l,"span",{},": ")}else{i.add(l,"span",{},"&#160;")}if(x.theme_advanced_resizing){i.add(m,"a",{id:q.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize",tabIndex:"-1"});if(x.theme_advanced_resizing_use_cookie){q.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+q.id+"_size"),r=i.get(q.id+"_tbl");if(!n){return}w.resizeTo(n.cw,n.ch)})}q.onPostRender.add(function(){g.add(q.id+"_resize","click",function(n){n.preventDefault()});g.add(q.id+"_resize","mousedown",function(E){var t,r,s,o,D,A,B,G,n,F,y;function z(H){H.preventDefault();n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F)}function C(H){g.remove(i.doc,"mousemove",t);g.remove(q.getDoc(),"mousemove",r);g.remove(i.doc,"mouseup",s);g.remove(q.getDoc(),"mouseup",o);n=B+(H.screenX-D);F=G+(H.screenY-A);w.resizeTo(n,F,true);q.nodeChanged()}E.preventDefault();D=E.screenX;A=E.screenY;y=i.get(w.editor.id+"_ifr");B=n=y.clientWidth;G=F=y.clientHeight;t=g.add(i.doc,"mousemove",z);r=g.add(q.getDoc(),"mousemove",z);s=g.add(i.doc,"mouseup",C);o=g.add(q.getDoc(),"mouseup",C)})})}k.deltaHeight-=21;l=p=null},_updateUndoStatus:function(k){var j=k.controlManager,l=k.undoManager;j.setDisabled("undo",!l.hasUndo()&&!l.typing);j.setDisabled("redo",!l.hasRedo())},_nodeChanged:function(o,u,E,r,F){var z=this,D,G=0,y,H,A=z.settings,x,l,w,C,m,k,j;h.each(z.stateControls,function(n){u.setActive(n,o.queryCommandState(z.controls[n][1]))});function q(p){var s,n=F.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]}}}u.setActive("visualaid",o.hasVisual);z._updateUndoStatus(o);u.setDisabled("outdent",!o.queryCommandState("Outdent"));D=q("A");if(H=u.get("link")){H.setDisabled((!D&&r)||(D&&!D.href));H.setActive(!!D&&(!D.name&&!D.id))}if(H=u.get("unlink")){H.setDisabled(!D&&r);H.setActive(!!D&&!D.name&&!D.id)}if(H=u.get("anchor")){H.setActive(!r&&!!D&&(D.name||(D.id&&!D.href)))}D=q("IMG");if(H=u.get("image")){H.setActive(!r&&!!D&&E.className.indexOf("mceItem")==-1)}if(H=u.get("styleselect")){z._importClasses();k=[];f(H.items,function(n){k.push(n.value)});j=o.formatter.matchAll(k);H.select(j[0]);h.each(j,function(p,n){if(n>0){H.mark(p)}})}if(H=u.get("formatselect")){D=q(o.dom.isBlock);if(D){H.select(D.nodeName.toLowerCase())}}q(function(p){if(p.nodeName==="SPAN"){if(!x&&p.className){x=p.className}}if(o.dom.is(p,A.theme_advanced_font_selector)){if(!l&&p.style.fontSize){l=p.style.fontSize}if(!w&&p.style.fontFamily){w=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}if(!C&&p.style.color){C=p.style.color}if(!m&&p.style.backgroundColor){m=p.style.backgroundColor}}return false});if(H=u.get("fontselect")){H.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==w})}if(H=u.get("fontsizeselect")){if(A.theme_advanced_runtime_fontsize&&!l&&!x){l=o.dom.getStyle(E,"fontSize",true)}H.select(function(n){if(n.fontSize&&n.fontSize===l){return true}if(n["class"]&&n["class"]===x){return true}})}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_show_current_color){function B(p,n){if(H=u.get(p)){if(!n){n=H.settings.default_color}if(n!==H.value){H.displayColor(n)}}}B("forecolor",C);B("backcolor",m)}if(A.theme_advanced_path&&A.theme_advanced_statusbar_location){D=i.get(o.id+"_path")||i.add(o.id+"_path_row","span",{id:o.id+"_path"});if(z.statusKeyboardNavigation){z.statusKeyboardNavigation.destroy();z.statusKeyboardNavigation=null}i.setHTML(D,"");q(function(I){var p=I.nodeName.toLowerCase(),s,v,t="";if(I.nodeType!=1||p==="br"||I.getAttribute("data-mce-bogus")||i.hasClass(I,"mceItemHidden")||i.hasClass(I,"mceItemRemoved")){return}if(h.isIE&&I.scopeName!=="HTML"&&I.scopeName){p=I.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(y=i.getAttrib(I,"src")){t+="src: "+y+" "}break;case"a":if(y=i.getAttrib(I,"name")){t+="name: "+y+" ";p+="#"+y}if(y=i.getAttrib(I,"href")){t+="href: "+y+" "}break;case"font":if(y=i.getAttrib(I,"face")){t+="font: "+y+" "}if(y=i.getAttrib(I,"size")){t+="size: "+y+" "}if(y=i.getAttrib(I,"color")){t+="color: "+y+" "}break;case"span":if(y=i.getAttrib(I,"style")){t+="style: "+y+" "}break}if(y=i.getAttrib(I,"id")){t+="id: "+y+" "}if(y=I.className){y=y.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(y){t+="class: "+y+" ";if(o.dom.isBlock(I)||p=="img"||p=="span"){p+="."+y}}}p=p.replace(/(html:)/g,"");p={name:p,node:I,title:t};z.onResolveName.dispatch(z,p);t=p.title;p=p.name;v=i.create("a",{href:"javascript:;",role:"button",onmousedown:"return false;",title:t,"class":"mcePath_"+(G++)},p);if(D.hasChildNodes()){D.insertBefore(i.create("span",{"aria-hidden":"true"},"\u00a0\u00bb "),D.firstChild);D.insertBefore(v,D.firstChild)}else{D.appendChild(v)}},o.getBody());if(i.select("a",D).length>0){z.statusKeyboardNavigation=new h.ui.KeyboardNavigation({root:o.id+"_path_row",items:i.select("a",D),excludeFromTabOrder:true,onCancel:function(){o.focus()}},i)}}},_sel:function(j){this.editor.execCommand("mceSelectNodeDepth",false,j)},_mceInsertAnchor:function(l,k){var j=this.editor;j.windowManager.open({url:this.url+"/anchor.htm",width:320+parseInt(j.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(j.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var j=this.editor;j.windowManager.open({url:this.url+"/charmap.htm",width:550+parseInt(j.getLang("advanced.charmap_delta_width",0)),height:265+parseInt(j.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var j=this.editor;j.windowManager.open({url:this.url+"/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceShortcuts:function(){var j=this.editor;j.windowManager.open({url:this.url+"/shortcuts.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(l,k){var j=this.editor;k=k||{};j.windowManager.open({url:this.url+"/color_picker.htm",width:375+parseInt(j.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(j.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:k.color,func:k.func,theme_url:this.url})},_mceCodeEditor:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/source_editor.htm",width:parseInt(j.getParam("theme_advanced_source_editor_width",720)),height:parseInt(j.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(k,l){var j=this.editor;if(j.dom.getAttrib(j.selection.getNode(),"class","").indexOf("mceItem")!=-1){return}j.windowManager.open({url:this.url+"/image.htm",width:355+parseInt(j.getLang("advanced.image_delta_width",0)),height:275+parseInt(j.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(k,l){var j=this.editor;j.windowManager.open({url:this.url+"/link.htm",width:310+parseInt(j.getLang("advanced.link_delta_width",0)),height:200+parseInt(j.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var j=this.editor;j.windowManager.confirm("advanced.newdocument",function(k){if(k){j.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var j=this;this._mceColorPicker(0,{color:j.fgColor,func:function(k){j.fgColor=k;j.editor.execCommand("ForeColor",false,k)}})},_mceBackColor:function(){var j=this;this._mceColorPicker(0,{color:j.bgColor,func:function(k){j.bgColor=k;j.editor.execCommand("HiliteColor",false,k)}})},_ufirst:function(j){return j.substring(0,1).toUpperCase()+j.substring(1)}});h.ThemeManager.add("advanced",h.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..82166dcb6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js
@@ -0,0 +1,1490 @@
+/**
+ * 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;
+
+ // Generates a preview for a format
+ function getPreviewCss(ed, fmt) {
+ var name, previewElm, dom = ed.dom, previewCss = '', parentFontSize, previewStylesName;
+
+ previewStyles = ed.settings.preview_styles;
+
+ // No preview forced
+ if (previewStyles === false)
+ return '';
+
+ // Default preview
+ if (!previewStyles)
+ previewStyles = 'font-family font-size font-weight text-decoration text-transform color background-color';
+
+ // Removes any variables since these can't be previewed
+ function removeVars(val) {
+ return val.replace(/%(\w+)/g, '');
+ };
+
+ // Create block/inline element to use for preview
+ name = fmt.block || fmt.inline || 'span';
+ previewElm = dom.create(name);
+
+ // Add format styles to preview element
+ each(fmt.styles, function(value, name) {
+ value = removeVars(value);
+
+ if (value)
+ dom.setStyle(previewElm, name, value);
+ });
+
+ // Add attributes to preview element
+ each(fmt.attributes, function(value, name) {
+ value = removeVars(value);
+
+ if (value)
+ dom.setAttrib(previewElm, name, value);
+ });
+
+ // Add classes to preview element
+ each(fmt.classes, function(value) {
+ value = removeVars(value);
+
+ if (!dom.hasClass(previewElm, value))
+ dom.addClass(previewElm, value);
+ });
+
+ // Add the previewElm outside the visual area
+ dom.setStyles(previewElm, {position: 'absolute', left: -0xFFFF});
+ ed.getBody().appendChild(previewElm);
+
+ // Get parent container font size so we can compute px values out of em/% for older IE:s
+ parentFontSize = dom.getStyle(ed.getBody(), 'fontSize', true);
+ parentFontSize = /px$/.test(parentFontSize) ? parseInt(parentFontSize, 10) : 0;
+
+ each(previewStyles.split(' '), function(name) {
+ var value = dom.getStyle(previewElm, name, true);
+
+ // If background is transparent then check if the body has a background color we can use
+ if (name == 'background-color' && /transparent|rgba\s*\([^)]+,\s*0\)/.test(value)) {
+ value = dom.getStyle(ed.getBody(), name, true);
+
+ // Ignore white since it's the default color, not the nicest fix
+ if (dom.toHex(value).toLowerCase() == '#ffffff') {
+ return;
+ }
+ }
+
+ // Old IE won't calculate the font size so we need to do that manually
+ if (name == 'font-size') {
+ if (/em|%$/.test(value)) {
+ if (parentFontSize === 0) {
+ return;
+ }
+
+ // Convert font size from em/% to px
+ value = parseFloat(value, 10) / (/%$/.test(value) ? 100 : 1);
+ value = (value * parentFontSize) + 'px';
+ }
+ }
+
+ previewCss += name + ':' + value + ';';
+ });
+
+ dom.remove(previewElm);
+
+ return previewCss;
+ };
+
+ // 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);
+ s = ed.settings;
+
+ ed.forcedHighContrastMode = ed.settings.detect_highcontrast && t._isHighContrast();
+ ed.settings.skin = ed.forcedHighContrastMode ? 'highcontrast' : ed.settings.skin;
+
+ // Setup default buttons
+ if (!s.theme_advanced_buttons1) {
+ s = extend({
+ 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"
+ }, s);
+ }
+
+ // Default settings
+ t.settings = s = extend({
+ theme_advanced_path : true,
+ theme_advanced_toolbar_location : 'top',
+ theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ 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
+ }, s);
+
+ // 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, fmt;
+
+ fmt = {
+ inline : 'span',
+ attributes : {'class' : o['class']},
+ selector : '*'
+ };
+
+ ed.formatter.register(name, fmt);
+
+ ctrl.add(o['class'], name, {
+ style: function() {
+ return getPreviewCss(ed, fmt);
+ }
+ });
+ });
+ }
+ },
+
+ _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 = [], removedFormat;
+
+ each(ctrl.items, function(item) {
+ formatNames.push(item.value);
+ });
+
+ ed.focus();
+ ed.undoManager.add();
+
+ // Toggle off the current format(s)
+ matches = ed.formatter.matchAll(formatNames);
+ tinymce.each(matches, function(match) {
+ if (!name || match == name) {
+ if (match)
+ ed.formatter.remove(match);
+
+ removedFormat = true;
+ }
+ });
+
+ if (!removedFormat)
+ ed.formatter.apply(name);
+
+ ed.undoManager.add();
+ ed.nodeChanged();
+
+ return false; // No auto select
+ }
+ });
+
+ // Handle specified format
+ ed.onPreInit.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, {
+ style: function() {
+ return getPreviewCss(ed, fmt);
+ }
+ });
+ } else
+ ctrl.add(fmt.title);
+ });
+ } else {
+ each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) {
+ var name, fmt;
+
+ if (val) {
+ name = 'style_' + (counter++);
+ fmt = {
+ inline : 'span',
+ classes : val,
+ selector : '*'
+ };
+
+ ed.formatter.register(name, fmt);
+ ctrl.add(t.editor.translate(key), name, {
+ style: function() {
+ return getPreviewCss(ed, fmt);
+ }
+ });
+ }
+ });
+ }
+ });
+
+ // 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'] && 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, style: function() {
+ return getPreviewCss(t.editor, {block: 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) : '') + (ed.settings.directionality == "rtl" ? ' mceRtl' : '')});
+ 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 false;
+ }
+ });
+/*
+ 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);
+ return false;
+ });
+
+ 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, toolbarsExist = false;
+
+ 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":"toolbar"});
+
+ // Create toolbar and add the controls
+ for (i=1; (v = s['theme_advanced_buttons' + i]); i++) {
+ toolbarsExist = true;
+ 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;
+ }
+ // Handle case when there are no toolbar buttons and ensure editor height is adjusted accordingly
+ if (!toolbarsExist)
+ 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);
+
+ ed.nodeChanged();
+ };
+
+ 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')) {
+ c.setDisabled((!p && co) || (p && !p.href));
+ c.setActive(!!p && (!p.name && !p.id));
+ }
+
+ if (c = cm.get('unlink')) {
+ c.setDisabled(!p && co);
+ c.setActive(!!p && !p.name && !p.id);
+ }
+
+ if (c = cm.get('anchor')) {
+ c.setActive(!co && !!p && (p.name || (p.id && !p.href)));
+ }
+
+ 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]);
+ tinymce.each(matches, function(match, index) {
+ if (index > 0) {
+ c.mark(match);
+ }
+ });
+ }
+
+ if (c = cm.get('formatselect')) {
+ p = getParent(ed.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' && n.scopeName)
+ 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 (ed.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 : 265 + 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..ca2224901
--- /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..2909a3a4d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js
@@ -0,0 +1,56 @@
+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') || ed.dom.getAttrib(elm, 'id');
+
+ 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, attribName;
+
+ 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);
+
+ var aRule = ed.schema.getElementRule('a');
+ if (!aRule || aRule.attributes.name) {
+ attribName = 'name';
+ } else {
+ attribName = 'id';
+ }
+
+ elm = ed.dom.getParent(ed.selection.getNode(), 'A');
+ if (elm) {
+ elm.setAttribute(attribName, name);
+ elm[attribName] = name;
+ ed.undoManager.add();
+ } else {
+ // create with zero-sized nbsp so that in Webkit where anchor is on last line by itself caret cannot be placed after it
+ var attrs = {'class' : 'mceItemAnchor'};
+ attrs[attribName] = name;
+ ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', attrs, '\uFEFF'));
+ ed.nodeChanged();
+ }
+
+ 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..cc891c171
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js
@@ -0,0 +1,345 @@
+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 = tinymce.trim(color);
+ color = color.replace(/^[#]/, '').toLowerCase(); // remove leading '#'
+ color = namedLookup[color] || color;
+
+ matches = /^rgb\((\d{1,3}),(\d{1,3}),(\d{1,3})\)$/.exec(color);
+
+ if (matches) {
+ red = toInt(matches[1]);
+ green = toInt(matches[2]);
+ blue = toInt(matches[3]);
+ } else {
+ matches = /^([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/.exec(color);
+
+ if (matches) {
+ red = toInt(matches[1], 16);
+ green = toInt(matches[2], 16);
+ blue = toInt(matches[3], 16);
+ } else {
+ matches = /^([0-9a-f])([0-9a-f])([0-9a-f])$/.exec(color);
+
+ if (matches) {
+ red = toInt(matches[1] + matches[1], 16);
+ green = toInt(matches[2] + matches[2], 16);
+ blue = toInt(matches[3] + matches[3], 16);
+ } else {
+ return '';
+ }
+ }
+ }
+
+ return '#' + hex(red) + hex(green) + hex(blue);
+}
+
+function insertAction() {
+ var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');
+
+ var hexColor = toHexColor(color);
+
+ if (hexColor === '') {
+ var text = tinyMCEPopup.editor.getLang('advanced_dlg.invalid_color_value');
+ tinyMCEPopup.alert(text + ': ' + color);
+ }
+ else {
+ tinyMCEPopup.restoreSelection();
+
+ if (f)
+ f(hexColor);
+
+ 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..bb09e75bf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js
@@ -0,0 +1,253 @@
+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) {
+ tinymce.each(tinyMCEPopup.dom.parseStyle(this.styleVal), function(value, key) {
+ st[key] = value;
+ });
+
+ // 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..8c1d73c50
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js
@@ -0,0 +1,159 @@
+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
+ });
+
+ if (f.target_list) {
+ ed.dom.setAttrib(e, 'target', getSelectValue(f, "target_list"));
+ }
+
+ if (f.class_list) {
+ ed.dom.setAttrib(e, 'class', getSelectValue(f, "class_list"));
+ }
+ }
+
+ // 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..dd5e366fa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js
@@ -0,0 +1,78 @@
+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)) {
+ turnWrapOn();
+ 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 setWhiteSpaceCss(value) {
+ var el = document.getElementById('htmlSource');
+ tinymce.DOM.setStyle(el, 'white-space', value);
+}
+
+function turnWrapOff() {
+ if (tinymce.isWebKit) {
+ setWhiteSpaceCss('pre');
+ } else {
+ setWrap('off');
+ }
+}
+
+function turnWrapOn() {
+ if (tinymce.isWebKit) {
+ setWhiteSpaceCss('pre-wrap');
+ } else {
+ setWrap('soft');
+ }
+}
+
+function toggleWordWrap(elm) {
+ if (elm.checked) {
+ turnWrapOn();
+ } else {
+ turnWrapOff();
+ }
+}
+
+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..50cd87e3d
--- /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", "charmap_usage":"Use left and right arrows to navigate.","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","invalid_color_value":"Invalid color value","":""});
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..879786fc1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css
@@ -0,0 +1,118 @@
+/* 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 {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px}
+#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline}
+#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap}
+#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 .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..77083f311
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css
@@ -0,0 +1,219 @@
+/* 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; direction:ltr}
+.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}
+
+/* Rtl */
+.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0}
+.mceRtl .mceMenuItem .mceText {text-align: right}
+
+/* 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}
+.defaultSkin span.mce_visualblocks {background-position: -40px -40px}
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..6d9fc8dd6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css
@@ -0,0 +1,106 @@
+/* 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 {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px}
+#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline}
+#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap}
+#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 .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..effbbe158
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css
@@ -0,0 +1,106 @@
+/* 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; direction:ltr}
+.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}
+
+/* Rtl */
+.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0}
+.mceRtl .mceMenuItem .mceText {text-align: right}
+
+/* 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..a54db98df
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
@@ -0,0 +1,118 @@
+/* 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 {display:inline-block; padding-left:40px; height:14px; border:1px solid black; margin-left:5px; margin-right: 5px}
+#colorpicker #previewblock {position: relative; top: -3px; padding-left:5px; padding-top: 0px; display:inline}
+#colorpicker #preview_wrapper { text-align:center; padding-top:4px; white-space: nowrap}
+#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 .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..a31022371
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
@@ -0,0 +1,222 @@
+/* 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; direction:ltr}
+.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}
+
+/* Rtl */
+.mceRtl .mceListBox .mceText {text-align: right; padding: 0 4px 0 0}
+.mceRtl .mceMenuItem .mceText {text-align: right}
+
+/* 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}
+.o2k7Skin span.mce_visualblocks {background-position: -40px -40px}
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..dd973fcc0
--- /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;" spellcheck="false">
+ <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..44d9fd902
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js
@@ -0,0 +1 @@
+(function(e){var a=/^\s*|\s*$/g,b,d="B".replace(/A(.)|B/,"$1")==="$1";var c={majorVersion:"3",minorVersion:"5.8",releaseDate:"2012-11-20",_init:function(){var s=this,q=document,o=navigator,g=o.userAgent,m,f,l,k,j,r;s.isOpera=e.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(e.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++){r=f[m].href;if(r){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!==b}if(f=="array"&&c.isArray(g)){return true}return typeof(g)==f},isArray:Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"},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!==b){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=[];c.each(g,function(f){i.push(h(f))});return i},grep:function(g,h){var i=[];c.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(n,k){var j,f,h,g=arguments,m;for(j=1,f=g.length;j<f;j++){k=g[j];for(h in k){if(k.hasOwnProperty(h)){m=k[h];if(m!==b){n[h]=m}}}}return n},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]}c.each(i,function(k,f){if(h.call(g,k,f,j)===false){return false}c.walk(k,h,j,g)})}},createNS:function(j,h){var g,f;h=h||e;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||e;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,g;g=function(){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(e.detachEvent){e.detachEvent("onbeforeunload",k);e.detachEvent("onunload",g)}else{if(e.removeEventListener){e.removeEventListener("unload",g,false)}}h.unloads=l=f=w=g=0;if(e.CollectGarbage){CollectGarbage()}}};function k(){var l=document;function f(){l.detachEvent("onstop",f);if(g){g()}l=0}if(l.readyState=="interactive"){if(l){l.attachEvent("onstop",f)}e.setTimeout(function(){if(l){l.detachEvent("onstop",f)}},0)}}j={func:j,scope:i||this};if(!h.unloads){if(e.attachEvent){e.attachEvent("onunload",g);e.attachEvent("onbeforeunload",k)}else{if(e.addEventListener){e.addEventListener("unload",g,false)}}h.unloads=[j]}else{h.unloads.push(j)}return j},removeUnload:function(i){var g=this.unloads,h=null;c.each(g,function(j,f){if(j&&j.func==i){g.splice(f,1);h=i;return false}});return h},explode:function(f,g){if(!f||c.is(f,"array")){return f}return c.map(f.split(g||","),c.trim)},_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(d){return g.replace(h,function(){var l=f,j=arguments,k;for(k=0;k<j.length-2;k++){if(j[k]===b){l=l.replace(new RegExp("\\$"+k,"g"),"")}else{l=l.replace(new RegExp("\\$"+k,"g"),j[k])}}return l})}return g.replace(h,f)}};c._init();e.tinymce=e.tinyMCE=c})(window);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,inDispatch:false,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(b,a){this.listeners.push({cb:b,scope:a||this.scope});return b},addToTop:function(d,b){var a=this,c={cb:d,scope:b||a.scope};if(a.inDispatch){a.listeners=[c].concat(a.listeners)}else{a.listeners.unshift(c)}return d},remove:function(c){var b=this.listeners,a=null;tinymce.each(b,function(e,d){if(c==e.cb){a=e;b.splice(d,1);return false}});return a},dispatch:function(){var a=this,e,b=arguments,c,d=a.listeners,f;a.inDispatch=true;for(c=0;c<d.length;c++){f=d[c];e=f.cb.apply(f.scope,b.length>0?b:[f.scope]);if(e===false){break}}a.inDispatch=false;return e}});(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});c=g.base_uri;if(c){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 d=this,f;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:d});if((b.host!="mce_host"&&d.host!=b.host&&b.host)||d.port!=b.port||d.protocol!=b.protocol){return b.getURI()}var c=d.getURI(),e=b.getURI();if(c==e||(c.charAt(c.length-1)=="/"&&c.substr(0,c.length-1)==e)){return c}f=d.toRelPath(d.path,b.path);if(b.query){f+="?"+b.query}if(b.anchor){f+="#"+b.anchor}return f},toAbsolute:function(b,c){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(c,e,d){var b=new Date();b.setTime(b.getTime()-1000);this.set(c,"",b,e,d)}})})();(function(){function serialize(o,quote){var i,v,t,name;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&&Object.prototype.toString.call(o)==="[object Array]"){for(i=0,v="[";i<o.length;i++){v+=(i>0?",":"")+serialize(o[i],quote)}return v+"]"}v="{";for(name in o){if(o.hasOwnProperty(name)){v+=typeof o[name]!="function"?(v.length>1?","+quote:quote)+name+quote+":"+serialize(o[name],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;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)}}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);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={BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(b){return b.shiftKey||b.ctrlKey||b.altKey},metaKeyPressed:function(b){return a.isMac?b.metaKey:b.ctrlKey&&!b.altKey}}})(tinymce);tinymce.util.Quirks=function(a){var j=tinymce.VK,f=j.BACKSPACE,k=j.DELETE,e=a.dom,l=a.selection,H=a.settings,v=a.parser,o=a.serializer,E=tinymce.each;function A(N,M){try{a.getDoc().execCommand(N,false,M)}catch(L){}}function n(){var L=a.getDoc().documentMode;return L?L:6}function z(L){return L.isDefaultPrevented()}function J(){function L(O){var M,Q,N,P;M=l.getRng();Q=e.getParent(M.startContainer,e.isBlock);if(O){Q=e.getNext(Q,e.isBlock)}if(Q){N=Q.firstChild;while(N&&N.nodeType==3&&N.nodeValue.length===0){N=N.nextSibling}if(N&&N.nodeName==="SPAN"){P=N.cloneNode(false)}}E(e.select("span",Q),function(R){R.setAttribute("data-mce-mark","1")});a.getDoc().execCommand(O?"ForwardDelete":"Delete",false,null);Q=e.getParent(M.startContainer,e.isBlock);E(e.select("span",Q),function(R){var S=l.getBookmark();if(P){e.replace(P.cloneNode(false),R,true)}else{if(!R.getAttribute("data-mce-mark")){e.remove(R,true)}else{R.removeAttribute("data-mce-mark")}}l.moveToBookmark(S)})}a.onKeyDown.add(function(M,O){var N;N=O.keyCode==k;if(!z(O)&&(N||O.keyCode==f)&&!j.modifierPressed(O)){O.preventDefault();L(N)}});a.addCommand("Delete",function(){L()})}function q(){function L(O){var N=e.create("body");var P=O.cloneContents();N.appendChild(P);return l.serializer.serialize(N,{format:"html"})}function M(N){var P=L(N);var Q=e.createRng();Q.selectNode(a.getBody());var O=L(Q);return P===O}a.onKeyDown.add(function(O,Q){var P=Q.keyCode,N;if(!z(Q)&&(P==k||P==f)){N=O.selection.isCollapsed();if(N&&!e.isEmpty(O.getBody())){return}if(tinymce.isIE&&!N){return}if(!N&&!M(O.selection.getRng())){return}O.setContent("");O.selection.setCursorLocation(O.getBody(),0);O.nodeChanged()}})}function I(){a.onKeyDown.add(function(L,M){if(!z(M)&&M.keyCode==65&&j.metaKeyPressed(M)){M.preventDefault();L.execCommand("SelectAll")}})}function K(){if(!a.settings.content_editable){e.bind(a.getDoc(),"focusin",function(L){l.setRng(l.getRng())});e.bind(a.getDoc(),"mousedown",function(L){if(L.target==a.getDoc().documentElement){a.getWin().focus();l.setRng(l.getRng())}})}}function B(){a.onKeyDown.add(function(L,O){if(!z(O)&&O.keyCode===f){if(l.isCollapsed()&&l.getRng(true).startOffset===0){var N=l.getNode();var M=N.previousSibling;if(M&&M.nodeName&&M.nodeName.toLowerCase()==="hr"){e.remove(M);tinymce.dom.Event.cancel(O)}}}})}function y(){if(!Range.prototype.getClientRects){a.onMouseDown.add(function(M,N){if(!z(N)&&N.target.nodeName==="HTML"){var L=M.getBody();L.blur();setTimeout(function(){L.focus()},0)}})}}function h(){a.onClick.add(function(L,M){M=M.target;if(/^(IMG|HR)$/.test(M.nodeName)){l.getSel().setBaseAndExtent(M,0,M,1)}if(M.nodeName=="A"&&e.hasClass(M,"mceItemAnchor")){l.select(M)}L.nodeChanged()})}function c(){function M(){var O=e.getAttribs(l.getStart().cloneNode(false));return function(){var P=l.getStart();if(P!==a.getBody()){e.setAttrib(P,"style",null);E(O,function(Q){P.setAttributeNode(Q.cloneNode(true))})}}}function L(){return !l.isCollapsed()&&e.getParent(l.getStart(),e.isBlock)!=e.getParent(l.getEnd(),e.isBlock)}function N(O,P){P.preventDefault();return false}a.onKeyPress.add(function(O,Q){var P;if(!z(Q)&&(Q.keyCode==8||Q.keyCode==46)&&L()){P=M();O.getDoc().execCommand("delete",false,null);P();Q.preventDefault();return false}});e.bind(a.getDoc(),"cut",function(P){var O;if(!z(P)&&L()){O=M();a.onKeyUp.addToTop(N);setTimeout(function(){O();a.onKeyUp.remove(N)},0)}})}function b(){var M,L;e.bind(a.getDoc(),"selectionchange",function(){if(L){clearTimeout(L);L=0}L=window.setTimeout(function(){var N=l.getRng();if(!M||!tinymce.dom.RangeUtils.compareRanges(N,M)){a.nodeChanged();M=N}},50)})}function x(){document.body.setAttribute("role","application")}function t(){a.onKeyDown.add(function(L,N){if(!z(N)&&N.keyCode===f){if(l.isCollapsed()&&l.getRng(true).startOffset===0){var M=l.getNode().previousSibling;if(M&&M.nodeName&&M.nodeName.toLowerCase()==="table"){return tinymce.dom.Event.cancel(N)}}}})}function C(){if(n()>7){return}A("RespectVisibilityInDesign",true);a.contentStyles.push(".mceHideBrInPre pre br {display: none}");e.addClass(a.getBody(),"mceHideBrInPre");v.addNodeFilter("pre",function(L,N){var O=L.length,Q,M,R,P;while(O--){Q=L[O].getAll("br");M=Q.length;while(M--){R=Q[M];P=R.prev;if(P&&P.type===3&&P.value.charAt(P.value-1)!="\n"){P.value+="\n"}else{R.parent.insert(new tinymce.html.Node("#text",3),R,true).value="\n"}}}});o.addNodeFilter("pre",function(L,N){var O=L.length,Q,M,R,P;while(O--){Q=L[O].getAll("br");M=Q.length;while(M--){R=Q[M];P=R.prev;if(P&&P.type==3){P.value=P.value.replace(/\r?\n$/,"")}}}})}function g(){e.bind(a.getBody(),"mouseup",function(N){var M,L=l.getNode();if(L.nodeName=="IMG"){if(M=e.getStyle(L,"width")){e.setAttrib(L,"width",M.replace(/[^0-9%]+/g,""));e.setStyle(L,"width","")}if(M=e.getStyle(L,"height")){e.setAttrib(L,"height",M.replace(/[^0-9%]+/g,""));e.setStyle(L,"height","")}}})}function d(){a.onKeyDown.add(function(R,S){var Q,L,M,O,P,T,N;Q=S.keyCode==k;if(!z(S)&&(Q||S.keyCode==f)&&!j.modifierPressed(S)){L=l.getRng();M=L.startContainer;O=L.startOffset;N=L.collapsed;if(M.nodeType==3&&M.nodeValue.length>0&&((O===0&&!N)||(N&&O===(Q?0:1)))){nonEmptyElements=R.schema.getNonEmptyElements();S.preventDefault();P=e.create("br",{id:"__tmp"});M.parentNode.insertBefore(P,M);R.getDoc().execCommand(Q?"ForwardDelete":"Delete",false,null);M=l.getRng().startContainer;T=M.previousSibling;if(T&&T.nodeType==1&&!e.isBlock(T)&&e.isEmpty(T)&&!nonEmptyElements[T.nodeName.toLowerCase()]){e.remove(T)}e.remove("__tmp")}}})}function G(){a.onKeyDown.add(function(P,Q){var N,M,R,L,O;if(z(Q)||Q.keyCode!=j.BACKSPACE){return}N=l.getRng();M=N.startContainer;R=N.startOffset;L=e.getRoot();O=M;if(!N.collapsed||R!==0){return}while(O&&O.parentNode&&O.parentNode.firstChild==O&&O.parentNode!=L){O=O.parentNode}if(O.tagName==="BLOCKQUOTE"){P.formatter.toggle("blockquote",null,O);N=e.createRng();N.setStart(M,0);N.setEnd(M,0);l.setRng(N)}})}function F(){function L(){a._refreshContentEditable();A("StyleWithCSS",false);A("enableInlineTableEditing",false);if(!H.object_resizing){A("enableObjectResizing",false)}}if(!H.readonly){a.onBeforeExecCommand.add(L);a.onMouseDown.add(L)}}function s(){function L(M,N){E(e.select("a"),function(Q){var O=Q.parentNode,P=e.getRoot();if(O.lastChild===Q){while(O&&!e.isBlock(O)){if(O.parentNode.lastChild!==O||O===P){return}O=O.parentNode}e.add(O,"br",{"data-mce-bogus":1})}})}a.onExecCommand.add(function(M,N){if(N==="CreateLink"){L(M)}});a.onSetContent.add(l.onSetContent.add(L))}function m(){if(H.forced_root_block){a.onInit.add(function(){A("DefaultParagraphSeparator",H.forced_root_block)})}}function p(){function L(N,M){if(!N||!M.initial){a.execCommand("mceRepaint")}}a.onUndo.add(L);a.onRedo.add(L);a.onSetContent.add(L)}function i(){a.onKeyDown.add(function(M,N){var L;if(!z(N)&&N.keyCode==f){L=M.getDoc().selection.createRange();if(L&&L.item){N.preventDefault();M.undoManager.beforeChange();e.remove(L.item(0));M.undoManager.add()}}})}function r(){var L;if(n()>=10){L="";E("p div h1 h2 h3 h4 h5 h6".split(" "),function(M,N){L+=(N>0?",":"")+M+":empty"});a.contentStyles.push(L+"{padding-right: 1px !important}")}}function u(){var N,M,ad,L,Y,ab,Z,ac,O,P,aa,W,V,X=document,T=a.getDoc();if(!H.object_resizing||H.webkit_fake_resize===false){return}A("enableObjectResizing",false);aa={n:[0.5,0,0,-1],e:[1,0.5,1,0],s:[0.5,1,0,1],w:[0,0.5,-1,0],nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};function R(ah){var ag,af;ag=ah.screenX-ab;af=ah.screenY-Z;W=ag*Y[2]+ac;V=af*Y[3]+O;W=W<5?5:W;V=V<5?5:V;if(j.modifierPressed(ah)||(ad.nodeName=="IMG"&&Y[2]*Y[3]!==0)){W=Math.round(V/P);V=Math.round(W*P)}e.setStyles(L,{width:W,height:V});if(Y[2]<0&&L.clientWidth<=W){e.setStyle(L,"left",N+(ac-W))}if(Y[3]<0&&L.clientHeight<=V){e.setStyle(L,"top",M+(O-V))}}function ae(){function af(ag,ah){if(ah){if(ad.style[ag]||!a.schema.isValid(ad.nodeName.toLowerCase(),ag)){e.setStyle(ad,ag,ah)}else{e.setAttrib(ad,ag,ah)}}}af("width",W);af("height",V);e.unbind(T,"mousemove",R);e.unbind(T,"mouseup",ae);if(X!=T){e.unbind(X,"mousemove",R);e.unbind(X,"mouseup",ae)}e.remove(L);Q(ad)}function Q(ai){var ag,ah,af;S();ag=e.getPos(ai);N=ag.x;M=ag.y;ah=ai.offsetWidth;af=ai.offsetHeight;if(ad!=ai){ad=ai;W=V=0}E(aa,function(al,aj){var ak;ak=e.get("mceResizeHandle"+aj);if(!ak){ak=e.add(T.documentElement,"div",{id:"mceResizeHandle"+aj,"class":"mceResizeHandle",style:"cursor:"+aj+"-resize; margin:0; padding:0"});e.bind(ak,"mousedown",function(am){am.preventDefault();ae();ab=am.screenX;Z=am.screenY;ac=ad.clientWidth;O=ad.clientHeight;P=O/ac;Y=al;L=ad.cloneNode(true);e.addClass(L,"mceClonedResizable");e.setStyles(L,{left:N,top:M,margin:0});T.documentElement.appendChild(L);e.bind(T,"mousemove",R);e.bind(T,"mouseup",ae);if(X!=T){e.bind(X,"mousemove",R);e.bind(X,"mouseup",ae)}})}else{e.show(ak)}e.setStyles(ak,{left:(ah*al[0]+N)-(ak.offsetWidth/2),top:(af*al[1]+M)-(ak.offsetHeight/2)})});if(!tinymce.isOpera&&ad.nodeName=="IMG"){ad.setAttribute("data-mce-selected","1")}}function S(){if(ad){ad.removeAttribute("data-mce-selected")}for(var af in aa){e.hide("mceResizeHandle"+af)}}a.contentStyles.push(".mceResizeHandle {position: absolute;border: 1px solid black;background: #FFF;width: 5px;height: 5px;z-index: 10000}.mceResizeHandle:hover {background: #000}img[data-mce-selected] {outline: 1px solid black}img.mceClonedResizable, table.mceClonedResizable {position: absolute;outline: 1px dashed black;opacity: .5;z-index: 10000}");function U(){var af=e.getParent(l.getNode(),"table,img");E(e.select("img[data-mce-selected]"),function(ag){ag.removeAttribute("data-mce-selected")});if(af){Q(af)}else{S()}}a.onNodeChange.add(U);e.bind(T,"selectionchange",U);a.serializer.addAttributeFilter("data-mce-selected",function(af,ag){var ah=af.length;while(ah--){af[ah].attr(ag,null)}})}function D(){if(n()<9){v.addNodeFilter("noscript",function(L){var M=L.length,N,O;while(M--){N=L[M];O=N.firstChild;if(O){N.attr("data-mce-innertext",O.value)}}});o.addNodeFilter("noscript",function(L){var M=L.length,N,P,O;while(M--){N=L[M];P=L[M].firstChild;if(P){P.value=tinymce.html.Entities.decode(P.value)}else{O=N.attributes.map["data-mce-innertext"];if(O){N.attr("data-mce-innertext",null);P=new tinymce.html.Node("#text",3);P.value=O;P.raw=true;N.append(P)}}}})}}t();G();q();if(tinymce.isWebKit){d();J();K();h();m();if(tinymce.isIDevice){b()}else{u();I()}}if(tinymce.isIE){B();x();C();g();i();r();D()}if(tinymce.isGecko){B();y();c();F();s();p()}if(tinymce.isOpera){u()}};(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(s){var z={},q,n,x,r,v=d.url_converter,y=d.url_converter_scope||this;function p(D,G){var F,C,B,E;F=z[D+"-top"+G];if(!F){return}C=z[D+"-right"+G];if(F!=C){return}B=z[D+"-bottom"+G];if(C!=B){return}E=z[D+"-left"+G];if(B!=E){return}z[D+G]=E;delete z[D+"-top"+G];delete z[D+"-right"+G];delete z[D+"-bottom"+G];delete z[D+"-left"+G]}function u(C){var D=z[C],B;if(!D||D.indexOf(" ")<0){return}D=D.split(" ");B=D.length;while(B--){if(D[B]!==D[0]){return false}}z[C]=D[0];return true}function A(D,C,B,E){if(!u(C)){return}if(!u(B)){return}if(!u(E)){return}z[D]=z[C]+" "+z[B]+" "+z[E];delete z[C];delete z[B];delete z[E]}function t(B){r=true;return a[B]}function i(C,B){if(r){C=C.replace(/\uFEFF[0-9]/g,function(D){return a[D]})}if(!B){C=C.replace(/\\([\'\";:])/g,"$1")}return C}function o(C,B,F,E,G,D){G=G||D;if(G){G=i(G);return"'"+G.replace(/\'/g,"\\'")+"'"}B=i(B||F||E);if(v){B=v.call(y,B,"style")}return"url('"+B.replace(/\'/g,"\\'")+"')"}if(s){s=s.replace(/\\[\"\';:\uFEFF]/g,t).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(B){return B.replace(/[;:]/g,t)});while(q=b.exec(s)){n=q[1].replace(l,"").toLowerCase();x=q[2].replace(l,"");if(n&&x.length>0){if(n==="font-weight"&&x==="700"){x="bold"}else{if(n==="color"||n==="background-color"){x=x.toLowerCase()}}x=x.replace(k,c);x=x.replace(h,o);z[n]=r?i(x,true):x}b.lastIndex=q.index+q[0].length}p("border","");p("border","-width");p("border","-color");p("border","-style");p("padding","");p("margin","");A("border","border-width","border-style","border-color");if(z.border==="medium none"){delete z.border}}return z},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(f){var a={},e=f.makeMap,g=f.each;function d(j,i){return j.split(i||",")}function h(m,l){var j,k={};function i(n){return n.replace(/[A-Z]+/g,function(o){return i(m[o])})}for(j in m){if(m.hasOwnProperty(j)){m[j]=i(m[j])}}i(l).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g,function(q,o,n,p){n=d(n,"|");k[o]={attributes:e(n),attributesOrder:n,children:e(p,"|",{"#comment":{}})}});return k}function b(){var i=a.html5;if(!i){i=a.html5=h({A:"id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup",B:"#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr",C:"#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video"},"html[A|manifest][body|head]head[A][base|command|link|meta|noscript|script|style|title]title[A][#]base[A|href|target][]link[A|href|rel|media|type|sizes][]meta[A|http-equiv|name|content|charset][]style[A|type|media|scoped][#]script[A|charset|type|src|defer|async][#]noscript[A][C]body[A][C]section[A][C]nav[A][C]article[A][C]aside[A][C]h1[A][B]h2[A][B]h3[A][B]h4[A][B]h5[A][B]h6[A][B]hgroup[A][h1|h2|h3|h4|h5|h6]header[A][C]footer[A][C]address[A][C]p[A][B]br[A][]pre[A][B]dialog[A][dd|dt]blockquote[A|cite][C]ol[A|start|reversed][li]ul[A][li]li[A|value][C]dl[A][dd|dt]dt[A][B]dd[A][C]a[A|href|target|ping|rel|media|type][B]em[A][B]strong[A][B]small[A][B]cite[A][B]q[A|cite][B]dfn[A][B]abbr[A][B]code[A][B]var[A][B]samp[A][B]kbd[A][B]sub[A][B]sup[A][B]i[A][B]b[A][B]mark[A][B]progress[A|value|max][B]meter[A|value|min|max|low|high|optimum][B]time[A|datetime][B]ruby[A][B|rt|rp]rt[A][B]rp[A][B]bdo[A][B]span[A][B]ins[A|cite|datetime][B]del[A|cite|datetime][B]figure[A][C|legend|figcaption]figcaption[A][C]img[A|alt|src|height|width|usemap|ismap][]iframe[A|name|src|height|width|sandbox|seamless][]embed[A|src|height|width|type][]object[A|data|type|height|width|usemap|name|form|classid][param]param[A|name|value][]details[A|open][C|legend]command[A|type|label|icon|disabled|checked|radiogroup][]menu[A|type|label][C|li]legend[A][C|B]div[A][C]source[A|src|type|media][]audio[A|src|autobuffer|autoplay|loop|controls][source]video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]hr[A][]form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]fieldset[A|disabled|form|name][C|legend]label[A|form|for][B]input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]datalist[A][B|option]optgroup[A|disabled|label][option]option[A|disabled|selected|label|value][]textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]keygen[A|autofocus|challenge|disabled|form|keytype|name][]output[A|for|form|name][B]canvas[A|width|height][]map[A|name][B|C]area[A|shape|coords|href|alt|target|media|rel|ping|type][]mathml[A][]svg[A][]table[A|border][caption|colgroup|thead|tfoot|tbody|tr]caption[A][C]colgroup[A|span][col]col[A|span][]thead[A][tr]tfoot[A][tr]tbody[A][tr]tr[A][th|td]th[A|headers|rowspan|colspan|scope][B]td[A|headers|rowspan|colspan][C]wbr[A][]")}return i}function c(){var i=a.html4;if(!i){i=a.html4=h({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]")}return i}f.html.Schema=function(A){var u=this,s={},k={},j=[],D,y;var o,q,z,r,v,n,p={};function m(F,E,H){var G=A[F];if(!G){G=a[F];if(!G){G=e(E," ",e(E.toUpperCase()," "));G=f.extend(G,H);a[F]=G}}else{G=e(G,",",e(G.toUpperCase()," "))}return G}A=A||{};y=A.schema=="html5"?b():c();if(A.verify_html===false){A.valid_elements="*[*]"}if(A.valid_styles){D={};g(A.valid_styles,function(F,E){D[E]=f.explode(F)})}o=m("whitespace_elements","pre script noscript style textarea");q=m("self_closing_elements","colgroup dd dt li option p td tfoot th thead tr");z=m("short_ended_elements","area base basefont br col frame hr img input isindex link meta param embed source wbr");r=m("boolean_attributes","checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls");n=m("non_empty_elements","td th iframe video audio object",z);textBlockElementsMap=m("text_block_elements","h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure");v=m("block_elements","hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup",textBlockElementsMap);function i(E){return new RegExp("^"+E.replace(/([?+*])/g,".$1")+"$")}function C(L){var K,G,Z,V,aa,F,I,U,X,Q,Y,ac,O,J,W,E,S,H,ab,ad,P,T,N=/^([#+\-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,R=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,M=/[*?+]/;if(L){L=d(L);if(s["@"]){S=s["@"].attributes;H=s["@"].attributesOrder}for(K=0,G=L.length;K<G;K++){F=N.exec(L[K]);if(F){W=F[1];Q=F[2];E=F[3];X=F[4];O={};J=[];I={attributes:O,attributesOrder:J};if(W==="#"){I.paddEmpty=true}if(W==="-"){I.removeEmpty=true}if(S){for(ad in S){O[ad]=S[ad]}J.push.apply(J,H)}if(X){X=d(X,"|");for(Z=0,V=X.length;Z<V;Z++){F=R.exec(X[Z]);if(F){U={};ac=F[1];Y=F[2].replace(/::/g,":");W=F[3];T=F[4];if(ac==="!"){I.attributesRequired=I.attributesRequired||[];I.attributesRequired.push(Y);U.required=true}if(ac==="-"){delete O[Y];J.splice(f.inArray(J,Y),1);continue}if(W){if(W==="="){I.attributesDefault=I.attributesDefault||[];I.attributesDefault.push({name:Y,value:T});U.defaultValue=T}if(W===":"){I.attributesForced=I.attributesForced||[];I.attributesForced.push({name:Y,value:T});U.forcedValue=T}if(W==="<"){U.validValues=e(T,"?")}}if(M.test(Y)){I.attributePatterns=I.attributePatterns||[];U.pattern=i(Y);I.attributePatterns.push(U)}else{if(!O[Y]){J.push(Y)}O[Y]=U}}}}if(!S&&Q=="@"){S=O;H=J}if(E){I.outputName=Q;s[E]=I}if(M.test(Q)){I.pattern=i(Q);j.push(I)}else{s[Q]=I}}}}}function t(E){s={};j=[];C(E);g(y,function(G,F){k[F]=G.children})}function l(F){var E=/^(~)?(.+)$/;if(F){g(d(F),function(J){var H=E.exec(J),I=H[1]==="~",K=I?"span":"div",G=H[2];k[G]=k[K];p[G]=K;if(!I){v[G.toUpperCase()]={};v[G]={}}if(!s[G]){s[G]=s[K]}g(k,function(L,M){if(L[K]){L[G]=L[K]}})})}}function x(F){var E=/^([+\-]?)(\w+)\[([^\]]+)\]$/;if(F){g(d(F),function(J){var I=E.exec(J),G,H;if(I){H=I[1];if(H){G=k[I[2]]}else{G=k[I[2]]={"#comment":{}}}G=k[I[2]];g(d(I[3],"|"),function(K){if(H==="-"){delete G[K]}else{G[K]={}}})}})}}function B(E){var G=s[E],F;if(G){return G}F=j.length;while(F--){G=j[F];if(G.pattern.test(E)){return G}}}if(!A.valid_elements){g(y,function(F,E){s[E]={attributes:F.attributes,attributesOrder:F.attributesOrder};k[E]=F.children});if(A.schema!="html5"){g(d("strong/b,em/i"),function(E){E=d(E,"/");s[E[1]].outputName=E[0]})}s.img.attributesDefault=[{name:"alt",value:""}];g(d("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr,strong,em,b,i"),function(E){if(s[E]){s[E].removeEmpty=true}});g(d("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"),function(E){s[E].paddEmpty=true})}else{t(A.valid_elements)}l(A.custom_elements);x(A.valid_children);C(A.extended_valid_elements);x("+ol[ul|ol],+ul[ul|ol]");if(A.invalid_elements){f.each(f.explode(A.invalid_elements),function(E){if(s[E]){delete s[E]}})}if(!B("span")){C("span[!data-mce-type|*]")}u.children=k;u.styles=D;u.getBoolAttrs=function(){return r};u.getBlockElements=function(){return v};u.getTextBlockElements=function(){return textBlockElementsMap};u.getShortEndedElements=function(){return z};u.getSelfClosingElements=function(){return q};u.getNonEmptyElements=function(){return n};u.getWhiteSpaceElements=function(){return o};u.isValidChild=function(E,G){var F=k[E];return !!(F&&F[G])};u.isValid=function(F,E){var H,G,I=B(F);if(I){if(E){if(I.attributes[E]){return true}H=I.attributePatterns;if(H){G=H.length;while(G--){if(H[G].pattern.test(F)){return true}}}}else{return true}}return false};u.getElementRule=B;u.getCustomElements=function(){return p};u.addValidElements=C;u.setValidElements=t;u.addCustomElements=l;u.addValidChildren=x;u.elements=s}})(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(E){var n=this,g,G=0,I,B,A=[],N,Q,C,r,z,s,M,H,O,v,m,k,t,R,o,P,F,S,L,f,J,l,D,K,h,x=0,j=a.html.Entities.decode,y,q;function u(T){var V,U;V=A.length;while(V--){if(A[V].name===T){break}}if(V>=0){for(U=A.length-1;U>=V;U--){T=A[U];if(T.valid){n.end(T.name)}}A.length=V}}function p(U,T,Y,X,W){var Z,V;T=T.toLowerCase();Y=T in H?T:j(Y||X||W||"");if(v&&!z&&T.indexOf("data-")!==0){Z=P[T];if(!Z&&F){V=F.length;while(V--){Z=F[V];if(Z.pattern.test(T)){break}}if(V===-1){Z=null}}if(!Z){return}if(Z.validValues&&!(Y in Z.validValues)){return}}N.map[T]=Y;N.push({name:T,value:Y})}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g");D=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g;K={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};M=e.getShortEndedElements();J=c.self_closing_elements||e.getSelfClosingElements();H=e.getBoolAttrs();v=c.validate;s=c.remove_internals;y=c.fix_self_closing;q=a.isIE;o=/^:/;while(g=l.exec(E)){if(G<g.index){n.text(j(E.substr(G,g.index-G)))}if(I=g[6]){I=I.toLowerCase();if(q&&o.test(I)){I=I.substr(1)}u(I)}else{if(I=g[7]){I=I.toLowerCase();if(q&&o.test(I)){I=I.substr(1)}O=I in M;if(y&&J[I]&&A.length>0&&A[A.length-1].name===I){u(I)}if(!v||(m=e.getElementRule(I))){k=true;if(v){P=m.attributes;F=m.attributePatterns}if(R=g[8]){z=R.indexOf("data-mce-type")!==-1;if(z&&s){k=false}N=[];N.map={};R.replace(D,p)}else{N=[];N.map={}}if(v&&!z){S=m.attributesRequired;L=m.attributesDefault;f=m.attributesForced;if(f){Q=f.length;while(Q--){t=f[Q];r=t.name;h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}if(L){Q=L.length;while(Q--){t=L[Q];r=t.name;if(!(r in N.map)){h=t.value;if(h==="{$uid}"){h="mce_"+x++}N.map[r]=h;N.push({name:r,value:h})}}}if(S){Q=S.length;while(Q--){if(S[Q] in N.map){break}}if(Q===-1){k=false}}if(N.map["data-mce-bogus"]){k=false}}if(k){n.start(I,N,O)}}else{k=false}if(B=K[I]){B.lastIndex=G=g.index+g[0].length;if(g=B.exec(E)){if(k){C=E.substr(G,g.index-G)}G=g.index+g[0].length}else{C=E.substr(G);G=E.length}if(k&&C.length>0){n.text(C,true)}if(k){n.end(I)}l.lastIndex=G;continue}if(!O){if(!R||R.indexOf("/")!=R.length-1){A.push({name:I,valid:k})}else{if(k){n.end(I)}}}}else{if(I=g[1]){n.comment(I)}else{if(I=g[2]){n.cdata(I)}else{if(I=g[3]){n.doctype(I)}else{if(I=g[4]){n.pi(I,g[5])}}}}}}G=g.index+g[0].length}if(G<E.length){n.text(j(E.substr(G)))}for(Q=A.length-1;Q>=0;Q--){I=A[Q];if(I.valid){n.end(I.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-mce-")===0){return false}}}if(j.type===8){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(n){var p,q,y,x,A,o,r,l,u,v,k,t,m,z,s;t=b.makeMap("tr,td,th,tbody,thead,tfoot,table");k=h.getNonEmptyElements();m=h.getTextBlockElements();for(p=0;p<n.length;p++){q=n[p];if(!q.parent||q.fixed){continue}if(m[q.name]&&q.parent.name=="li"){z=q.next;while(z){if(m[z.name]){z.name="li";z.fixed=true;q.parent.insert(z,q.parent)}else{break}z=z.next}q.unwrap(q);continue}x=[q];for(y=q.parent;y&&!h.isValidChild(y.name,q.name)&&!t[y.name];y=y.parent){x.push(y)}if(y&&x.length>1){x.reverse();A=o=f.filterNode(x[0].clone());for(u=0;u<x.length-1;u++){if(h.isValidChild(o.name,x[u].name)){r=f.filterNode(x[u].clone());o.append(r)}else{r=o}for(l=x[u].firstChild;l&&l!=x[u+1];){s=l.next;r.append(l);l=s}o=r}if(!A.isEmpty(k)){y.insert(A,x[0],true);y.insert(q,A)}else{y.insert(q,x[0],true)}y=x[0];if(y.isEmpty(k)||y.firstChild===y.lastChild&&y.firstChild.name==="br"){y.empty().remove()}}else{if(q.parent){if(q.name==="li"){z=q.prev;if(z&&(z.name==="ul"||z.name==="ul")){z.append(q);continue}z=q.next;if(z&&(z.name==="ul"||z.name==="ul")){z.insert(q,z.firstChild,true);continue}q.wrap(f.filterNode(new a("ul",1)));continue}if(h.isValidChild(q.parent.name,"div")&&h.isValidChild("div",q.name)){q.wrap(f.filterNode(new a("div",1)))}else{if(q.name==="style"||q.name==="script"){q.empty().remove()}else{q.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,J,B,A,D,C,x,r,F,N,z,o,E,M=[],L,t,k,y,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;z=g.validate;q="forced_root_block" in m?m.forced_root_block:g.forced_root_block;s=h.getWhiteSpaceElements();E=/^[ \t\r\n]+/;t=/[ \t\r\n]+$/;k=/[ \t\r\n]+/g;y=/^[ \t\r\n]+$/;function G(){var O=J.firstChild,l,P;while(O){l=O.next;if(O.type==3||(O.type==1&&O.name!=="p"&&!o[O.name]&&!O.attr("data-mce-type"))){if(!P){P=K(q,1);J.insert(P,O);P.append(O)}else{P.append(O)}}else{P=null}O=l}}function K(l,O){var P=new a(l,O),Q;if(l in e){Q=i[l];if(Q){Q.push(P)}else{i[l]=[P]}}return P}function I(P){var Q,l,O;for(Q=P.prev;Q&&Q.type===3;){l=Q.value.replace(t,"");if(l.length>0){Q.value=l;Q=Q.prev}else{O=Q.prev;Q.remove();Q=O}}}function H(O){var P,l={};for(P in O){if(P!=="li"&&P!="p"){l[P]=O[P]}}return l}n=new b.html.SaxParser({validate:z,self_closing_elements:H(h.getSelfClosingElements()),cdata:function(l){B.append(K("#cdata",4)).value=l},text:function(P,l){var O;if(!L){P=P.replace(k," ");if(B.lastChild&&o[B.lastChild.name]){P=P.replace(E,"")}}if(P.length!==0){O=K("#text",3);O.raw=!!l;B.append(O).value=P}},comment:function(l){B.append(K("#comment",8)).value=l},pi:function(l,O){B.append(K(l,7)).value=O;I(B)},doctype:function(O){var l;l=B.append(K("#doctype",10));l.value=O;I(B)},start:function(l,W,P){var U,R,Q,O,S,X,V,T;Q=z?h.getElementRule(l):{};if(Q){U=K(Q.outputName||l,1);U.attributes=W;U.shortEnded=P;B.append(U);T=p[B.name];if(T&&p[U.name]&&!T[U.name]){M.push(U)}R=d.length;while(R--){S=d[R].name;if(S in W.map){F=c[S];if(F){F.push(U)}else{c[S]=[U]}}}if(o[l]){I(U)}if(!P){B=U}if(!L&&s[l]){L=true}}},end:function(l){var S,P,R,O,Q;P=z?h.getElementRule(l):{};if(P){if(o[l]){if(!L){S=B.firstChild;if(S&&S.type===3){R=S.value.replace(E,"");if(R.length>0){S.value=R;S=S.next}else{O=S.next;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.next;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}S=B.lastChild;if(S&&S.type===3){R=S.value.replace(t,"");if(R.length>0){S.value=R;S=S.prev}else{O=S.prev;S.remove();S=O}while(S&&S.type===3){R=S.value;O=S.prev;if(R.length===0||y.test(R)){S.remove();S=O}S=O}}}}if(L&&s[l]){L=false}if(P.removeEmpty||P.paddEmpty){if(B.isEmpty(u)){if(P.paddEmpty){B.empty().append(new a("#text","3")).value="\u00a0"}else{if(!B.attributes.map.name&&!B.attributes.map.id){Q=B.parent;B.empty().remove();B=Q;return}}}}B=B.parent}}},h);J=B=new a(m.context||g.root_name,11);n.parse(v);if(z&&M.length){if(!m.context){j(M)}else{m.invalid=true}}if(q&&J.name=="body"){G()}if(!m.invalid){for(N in i){F=e[N];A=i[N];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(D=0,C=F.length;D<C;D++){F[D](A,N,m)}}for(D=0,C=d.length;D<C;D++){F=d[D];if(F.name in c){A=c[F.name];x=A.length;while(x--){if(!A[x].parent){A.splice(x,1)}}for(x=0,r=F.callbacks.length;x<r;x++){F.callbacks[x](A,F.name,m)}}}}return J};if(g.remove_trailing_brs){f.addNodeFilter("br",function(n,m){var r,q=n.length,o,v=b.extend({},h.getBlockElements()),k=h.getNonEmptyElements(),t,s,p,u;v.body=1;for(r=0;r<q;r++){o=n[r];t=o.parent;if(v[o.parent.name]&&o===t.lastChild){p=o.prev;while(p){u=p.name;if(u!=="span"||p.attr("data-mce-type")!=="bookmark"){if(u!=="br"){break}if(u==="br"){o=null;break}}p=p.prev}if(o){o.remove();if(t.isEmpty(k)){elementRule=h.getElementRule(t.name);if(elementRule){if(elementRule.removeEmpty){t.remove()}else{if(elementRule.paddEmpty){t.empty().append(new b.html.Node("#text",3)).value="\u00a0"}}}}}}else{s=o;while(t.firstChild===s&&t.lastChild===s){s=t;if(v[t.name]){break}t=t.parent}if(s===t){textNode=new b.html.Node("#text",3);textNode.value="\u00a0";o.replace(textNode)}}}})}if(!g.allow_html_in_named_anchor){f.addAttributeFilter("id,name",function(k,l){var n=k.length,p,m,o,q;while(n--){q=k[n];if(q.name==="a"&&q.firstChild&&!q.attr("href")){o=q.parent;p=q.lastChild;do{m=p.prev;o.insert(p,q);p=m}while(p)}}})}}})(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);tinymce.dom={};(function(b,h){var g=!!document.addEventListener;function c(k,j,l,i){if(k.addEventListener){k.addEventListener(j,l,i||false)}else{if(k.attachEvent){k.attachEvent("on"+j,l)}}}function e(k,j,l,i){if(k.removeEventListener){k.removeEventListener(j,l,i||false)}else{if(k.detachEvent){k.detachEvent("on"+j,l)}}}function a(n,l){var i,k=l||{};function j(){return false}function m(){return true}for(i in n){if(i!=="layerX"&&i!=="layerY"){k[i]=n[i]}}if(!k.target){k.target=k.srcElement||document}k.preventDefault=function(){k.isDefaultPrevented=m;if(n){if(n.preventDefault){n.preventDefault()}else{n.returnValue=false}}};k.stopPropagation=function(){k.isPropagationStopped=m;if(n){if(n.stopPropagation){n.stopPropagation()}else{n.cancelBubble=true}}};k.stopImmediatePropagation=function(){k.isImmediatePropagationStopped=m;k.stopPropagation()};if(!k.isDefaultPrevented){k.isDefaultPrevented=j;k.isPropagationStopped=j;k.isImmediatePropagationStopped=j}return k}function d(m,n,l){var k=m.document,j={type:"ready"};function i(){if(!l.domLoaded){l.domLoaded=true;n(j)}}if(k.readyState=="complete"){i();return}if(g){c(m,"DOMContentLoaded",i)}else{c(k,"readystatechange",function(){if(k.readyState==="complete"){e(k,"readystatechange",arguments.callee);i()}});if(k.documentElement.doScroll&&m===m.top){(function(){try{k.documentElement.doScroll("left")}catch(o){setTimeout(arguments.callee,0);return}i()})()}}c(m,"load",i)}function f(k){var q=this,p={},i,o,n,m,l;m="onmouseenter" in document.documentElement;n="onfocusin" in document.documentElement;l={mouseenter:"mouseover",mouseleave:"mouseout"};i=1;q.domLoaded=false;q.events=p;function j(t,x){var s,u,r,v;s=p[x][t.type];if(s){for(u=0,r=s.length;u<r;u++){v=s[u];if(v&&v.func.call(v.scope,t)===false){t.preventDefault()}if(t.isImmediatePropagationStopped()){return}}}}q.bind=function(x,A,D,E){var s,t,u,r,B,z,C,v=window;function y(F){j(a(F||v.event),s)}if(!x||x.nodeType===3||x.nodeType===8){return}if(!x[h]){s=i++;x[h]=s;p[s]={}}else{s=x[h];if(!p[s]){p[s]={}}}E=E||x;A=A.split(" ");u=A.length;while(u--){r=A[u];z=y;B=C=false;if(r==="DOMContentLoaded"){r="ready"}if((q.domLoaded||x.readyState=="complete")&&r==="ready"){q.domLoaded=true;D.call(E,a({type:r}));continue}if(!m){B=l[r];if(B){z=function(F){var H,G;H=F.currentTarget;G=F.relatedTarget;if(G&&H.contains){G=H.contains(G)}else{while(G&&G!==H){G=G.parentNode}}if(!G){F=a(F||v.event);F.type=F.type==="mouseout"?"mouseleave":"mouseenter";F.target=H;j(F,s)}}}}if(!n&&(r==="focusin"||r==="focusout")){C=true;B=r==="focusin"?"focus":"blur";z=function(F){F=a(F||v.event);F.type=F.type==="focus"?"focusin":"focusout";j(F,s)}}t=p[s][r];if(!t){p[s][r]=t=[{func:D,scope:E}];t.fakeName=B;t.capture=C;t.nativeHandler=z;if(!g){t.proxyHandler=k(s)}if(r==="ready"){d(x,z,q)}else{c(x,B||r,g?z:t.proxyHandler,C)}}else{t.push({func:D,scope:E})}}x=t=0;return D};q.unbind=function(x,z,A){var s,u,v,B,r,t;if(!x||x.nodeType===3||x.nodeType===8){return q}s=x[h];if(s){t=p[s];if(z){z=z.split(" ");v=z.length;while(v--){r=z[v];u=t[r];if(u){if(A){B=u.length;while(B--){if(u[B].func===A){u.splice(B,1)}}}if(!A||u.length===0){delete t[r];e(x,u.fakeName||r,g?u.nativeHandler:u.proxyHandler,u.capture)}}}}else{for(r in t){u=t[r];e(x,u.fakeName||r,g?u.nativeHandler:u.proxyHandler,u.capture)}t={}}for(r in t){return q}delete p[s];try{delete x[h]}catch(y){x[h]=null}}return q};q.fire=function(u,s,r){var v,t;if(!u||u.nodeType===3||u.nodeType===8){return q}t=a(null,r);t.type=s;do{v=u[h];if(v){j(t,v)}u=u.parentNode||u.ownerDocument||u.defaultView||u.parentWindow}while(u&&!t.isPropagationStopped());return q};q.clean=function(u){var s,r,t=q.unbind;if(!u||u.nodeType===3||u.nodeType===8){return q}if(u[h]){t(u)}if(!u.getElementsByTagName){u=u.document}if(u&&u.getElementsByTagName){t(u);r=u.getElementsByTagName("*");s=r.length;while(s--){u=r[s];if(u[h]){t(u)}}}return q};q.callNativeHandler=function(s,r){if(p){p[s][r.type].nativeHandler(r)}};q.destory=function(){p={}};q.add=function(v,s,u,t){if(typeof(v)==="string"){v=document.getElementById(v)}if(v&&v instanceof Array){var r=v.length;while(r--){q.add(v[r],s,u,t)}return}if(s==="init"){s="ready"}return q.bind(v,s instanceof Array?s.join(" "):s,u,t)};q.remove=function(v,s,u,t){if(!v){return q}if(typeof(v)==="string"){v=document.getElementById(v)}if(v instanceof Array){var r=v.length;while(r--){q.remove(v[r],s,u,t)}return q}return q.unbind(v,s instanceof Array?s.join(" "):s,u)};q.clear=function(r){if(typeof(r)==="string"){r=document.getElementById(r)}return q.clean(r)};q.cancel=function(r){if(r){q.prevent(r);q.stop(r)}return false};q.prevent=function(r){if(!r.preventDefault){r=a(r)}r.preventDefault();return false};q.stop=function(r){if(!r.stopPropagation){r=a(r)}r.stopPropagation();return false}}b.EventUtils=f;b.Event=new f(function(i){return function(j){tinymce.dom.Event.callNativeHandler(i,j)}});b.Event.bind(window,"ready",function(){});b=0})(tinymce.dom,"data-mce-expando");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(e){var g=e.each,d=e.is,f=e.isWebKit,b=e.isIE,h=e.html.Entities,c=/^([a-z0-9],?)+$/i,a=/^[ \t\r\n]*$/;e.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,l){var k=this,i,j,n;k.doc=o;k.win=window;k.files={};k.cssFlicker=false;k.counter=0;k.stdMode=!e.isIE||o.documentMode>=8;k.boxModel=!e.isIE||o.compatMode=="CSS1Compat"||k.stdMode;k.hasOuterHTML="outerHTML" in o.createElement("a");k.settings=l=e.extend({keep_values:false,hex_colors:1},l);k.schema=l.schema;k.styles=new e.html.Styles({url_converter:l.url_converter,url_converter_scope:l.url_converter_scope},l.schema);if(e.isIE6){try{o.execCommand("BackgroundImageCache",false,true)}catch(m){k.cssFlicker=true}}k.fixDoc(o);k.events=l.ownEvents?new e.dom.EventUtils(l.proxy):e.dom.Event;e.addUnload(k.destroy,k);n=l.schema?l.schema.getBlockElements():{};k.isBlock=function(q){if(!q){return false}var p=q.nodeType;if(p){return !!(p===1&&n[q.nodeName])}return !!n[q]}},fixDoc:function(k){var j=this.settings,i;if(b&&j.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(l){k.createElement(l)});for(i in j.schema.getCustomElements()){k.createElement(i)}}},clone:function(k,i){var j=this,m,l;if(!b||k.nodeType!==1||i){return k.cloneNode(i)}l=j.doc;if(!i){m=l.createElement(k.nodeName);g(j.getAttribs(k),function(n){j.setAttrib(m,n.nodeName,j.getAttrib(k,n.nodeName))});return m}return m.firstChild},getRoot:function(){var i=this,j=i.settings;return(j&&i.get(j.root_element))||i.doc.body},getViewPort:function(j){var k,i;j=!j?this.win:j;k=j.document;i=this.boxModel?k.documentElement:k.body;return{x:j.pageXOffset||i.scrollLeft,y:j.pageYOffset||i.scrollTop,w:j.innerWidth||i.clientWidth,h:j.innerHeight||i.clientHeight}},getRect:function(l){var k,i=this,j;l=i.get(l);k=i.getPos(l);j=i.getSize(l);return{x:k.x,y:k.y,w:j.w,h:j.h}},getSize:function(l){var j=this,i,k;l=j.get(l);i=j.getStyle(l,"width");k=j.getStyle(l,"height");if(i.indexOf("px")===-1){i=0}if(k.indexOf("px")===-1){k=0}return{w:parseInt(i,10)||l.offsetWidth||l.clientWidth,h:parseInt(k,10)||l.offsetHeight||l.clientHeight}},getParent:function(k,j,i){return this.getParents(k,j,i,false)},getParents:function(s,m,k,q){var j=this,i,l=j.settings,p=[];s=j.get(s);q=q===undefined;if(l.strict_root){k=k||j.getRoot()}if(d(m,"string")){i=m;if(m==="*"){m=function(o){return o.nodeType==1}}else{m=function(o){return j.is(o,i)}}}while(s){if(s==k||!s.nodeType||s.nodeType===9){break}if(!m||m(s)){if(q){p.push(s)}else{return s}}s=s.parentNode}return q?p:null},get:function(i){var j;if(i&&this.doc&&typeof(i)=="string"){j=i;i=this.doc.getElementById(i);if(i&&i.id!==j){return this.doc.getElementsByName(j)[1]}}return i},getNext:function(j,i){return this._findSib(j,i,"nextSibling")},getPrev:function(j,i){return this._findSib(j,i,"previousSibling")},select:function(k,j){var i=this;return e.dom.Sizzle(k,i.get(j)||i.get(i.settings.root_element)||i.doc,[])},is:function(l,j){var k;if(l.length===undefined){if(j==="*"){return l.nodeType==1}if(c.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 e.dom.Sizzle.matches(j,l.nodeType?[l]:l).length>0},add:function(l,o,i,k,m){var j=this;return this.run(l,function(r){var q,n;q=d(o,"string")?j.doc.createElement(o):o;j.setAttribs(q,i);if(k){if(k.nodeType){q.appendChild(k)}else{j.setHTML(q,k)}}return !m?r.appendChild(q):q})},create:function(k,i,j){return this.add(this.doc.createElement(k),k,i,j,1)},createHTML:function(q,i,m){var p="",l=this,j;p+="<"+q;for(j in i){if(i.hasOwnProperty(j)){p+=" "+j+'="'+l.encode(i[j])+'"'}}if(typeof(m)!="undefined"){return p+">"+m+"</"+q+">"}return p+" />"},remove:function(i,j){return this.run(i,function(l){var m,k=l.parentNode;if(!k){return null}if(j){while(m=l.firstChild){if(!e.isIE||m.nodeType!==3||m.nodeValue){k.insertBefore(m,l)}else{l.removeChild(m)}}}return k.removeChild(l)})},setStyle:function(l,i,j){var k=this;return k.run(l,function(o){var n,m;n=o.style;i=i.replace(/-(\D)/g,function(q,p){return p.toUpperCase()});if(k.pixelStyles.test(i)&&(e.is(j,"number")||/^[\-0-9\.]+$/.test(j))){j+="px"}switch(i){case"opacity":if(b){n.filter=j===""?"":"alpha(opacity="+(j*100)+")";if(!l.currentStyle||!l.currentStyle.hasLayout){n.display="inline-block"}}n[i]=n["-moz-opacity"]=n["-khtml-opacity"]=j||"";break;case"float":b?n.styleFloat=j:n.cssFloat=j;break;default:n[i]=j||""}if(k.settings.update_styles){k.setAttrib(o,"data-mce-style")}})},getStyle:function(l,i,k){l=this.get(l);if(!l){return}if(this.doc.defaultView&&k){i=i.replace(/[A-Z]/g,function(m){return"-"+m});try{return this.doc.defaultView.getComputedStyle(l,null).getPropertyValue(i)}catch(j){return null}}i=i.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(i=="float"){i=b?"styleFloat":"cssFloat"}if(l.currentStyle&&k){return l.currentStyle[i]}return l.style?l.style[i]:undefined},setStyles:function(l,m){var j=this,k=j.settings,i;i=k.update_styles;k.update_styles=0;g(m,function(o,p){j.setStyle(l,p,o)});k.update_styles=i;if(k.update_styles){j.setAttrib(l,k.cssText)}},removeAllAttribs:function(i){return this.run(i,function(l){var k,j=l.attributes;for(k=j.length-1;k>=0;k--){l.removeAttributeNode(j.item(k))}})},setAttrib:function(k,l,i){var j=this;if(!k||!l){return}if(j.settings.strict){l=l.toLowerCase()}return this.run(k,function(p){var o=j.settings;var m=p.getAttribute(l);if(i!==null){switch(l){case"style":if(!d(i,"string")){g(i,function(q,r){j.setStyle(p,r,q)});return}if(o.keep_values){if(i&&!j._isRes(i)){p.setAttribute("data-mce-style",i,2)}else{p.removeAttribute("data-mce-style",2)}}p.style.cssText=i;break;case"class":p.className=i||"";break;case"src":case"href":if(o.keep_values){if(o.url_converter){i=o.url_converter.call(o.url_converter_scope||j,i,l,p)}j.setAttrib(p,"data-mce-"+l,i,2)}break;case"shape":p.setAttribute("data-mce-style",i);break}}if(d(i)&&i!==null&&i.length!==0){p.setAttribute(l,""+i,2)}else{p.removeAttribute(l,2)}if(tinyMCE.activeEditor&&m!=i){var n=tinyMCE.activeEditor;n.onSetAttrib.dispatch(n,p,l,i)}})},setAttribs:function(j,k){var i=this;return this.run(j,function(l){g(k,function(m,o){i.setAttrib(l,o,m)})})},getAttrib:function(m,o,k){var i,j=this,l;m=j.get(m);if(!m||m.nodeType!==1){return k===l?false:k}if(!d(k)){k=""}if(/^(src|href|style|coords|shape)$/.test(o)){i=m.getAttribute("data-mce-"+o);if(i){return i}}if(b&&j.props[o]){i=m[j.props[o]];i=i&&i.nodeValue?i.nodeValue:i}if(!i){i=m.getAttribute(o,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(o)){if(m[j.props[o]]===true&&i===""){return o}return i?o:""}if(m.nodeName==="FORM"&&m.getAttributeNode(o)){return m.getAttributeNode(o).nodeValue}if(o==="style"){i=i||m.style.cssText;if(i){i=j.serializeStyle(j.parseStyle(i),m.nodeName);if(j.settings.keep_values&&!j._isRes(i)){m.setAttribute("data-mce-style",i)}}}if(f&&o==="class"&&i){i=i.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(o){case"rowspan":case"colspan":if(i===1){i=""}break;case"size":if(i==="+0"||i===20||i===0){i=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(i===0){i=""}break;case"hspace":if(i===-1){i=""}break;case"maxlength":case"tabindex":if(i===32768||i===2147483647||i==="32768"){i=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(i===65535){return o}return k;case"shape":i=i.toLowerCase();break;default:if(o.indexOf("on")===0&&i){i=e._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+i)}}}return(i!==l&&i!==null&&i!=="")?""+i:k},getPos:function(q,l){var j=this,i=0,p=0,m,o=j.doc,k;q=j.get(q);l=l||o.body;if(q){if(q.getBoundingClientRect){q=q.getBoundingClientRect();m=j.boxModel?o.documentElement:o.body;i=q.left+(o.documentElement.scrollLeft||o.body.scrollLeft)-m.clientTop;p=q.top+(o.documentElement.scrollTop||o.body.scrollTop)-m.clientLeft;return{x:i,y:p}}k=q;while(k&&k!=l&&k.nodeType){i+=k.offsetLeft||0;p+=k.offsetTop||0;k=k.offsetParent}k=q.parentNode;while(k&&k!=l&&k.nodeType){i-=k.scrollLeft||0;p-=k.scrollTop||0;k=k.parentNode}}return{x:i,y:p}},parseStyle:function(i){return this.styles.parse(i)},serializeStyle:function(j,i){return this.styles.serialize(j,i)},addStyle:function(j){var k=this.doc,i;styleElm=k.getElementById("mceDefaultStyles");if(!styleElm){styleElm=k.createElement("style"),styleElm.id="mceDefaultStyles";styleElm.type="text/css";i=k.getElementsByTagName("head")[0];if(i.firstChild){i.insertBefore(styleElm,i.firstChild)}else{i.appendChild(styleElm)}}if(styleElm.styleSheet){styleElm.styleSheet.cssText+=j}else{styleElm.appendChild(k.createTextNode(j))}},loadCSS:function(i){var k=this,l=k.doc,j;if(!i){i=""}j=l.getElementsByTagName("head")[0];g(i.split(","),function(m){var n;if(k.files[m]){return}k.files[m]=true;n=k.create("link",{rel:"stylesheet",href:e._addVer(m)});if(b&&l.documentMode&&l.recalc){n.onload=function(){if(l.recalc){l.recalc()}n.onload=null}}j.appendChild(n)})},addClass:function(i,j){return this.run(i,function(k){var l;if(!j){return 0}if(this.hasClass(k,j)){return k.className}l=this.removeClass(k,j);return k.className=(l!=""?(l+" "):"")+j})},removeClass:function(k,l){var i=this,j;return i.run(k,function(n){var m;if(i.hasClass(n,l)){if(!j){j=new RegExp("(^|\\s+)"+l+"(\\s+|$)","g")}m=n.className.replace(j," ");m=e.trim(m!=" "?m:"");n.className=m;if(!m){n.removeAttribute("class");n.removeAttribute("className")}return m}return n.className})},hasClass:function(j,i){j=this.get(j);if(!j||!i){return false}return(" "+j.className+" ").indexOf(" "+i+" ")!==-1},show:function(i){return this.setStyle(i,"display","block")},hide:function(i){return this.setStyle(i,"display","none")},isHidden:function(i){i=this.get(i);return !i||i.style.display=="none"||this.getStyle(i,"display")=="none"},uniqueId:function(i){return(!i?"mce_":i)+(this.counter++)},setHTML:function(k,j){var i=this;return i.run(k,function(m){if(b){while(m.firstChild){m.removeChild(m.firstChild)}try{m.innerHTML="<br />"+j;m.removeChild(m.firstChild)}catch(l){var n=i.create("div");n.innerHTML="<br />"+j;g(e.grep(n.childNodes),function(p,o){if(o&&m.canHaveHTML){m.appendChild(p)}})}}else{m.innerHTML=j}return j})},getOuterHTML:function(k){var j,i=this;k=i.get(k);if(!k){return null}if(k.nodeType===1&&i.hasOuterHTML){return k.outerHTML}j=(k.ownerDocument||i.doc).createElement("body");j.appendChild(k.cloneNode(true));return j.innerHTML},setOuterHTML:function(l,j,m){var i=this;function k(p,o,r){var s,q;q=r.createElement("body");q.innerHTML=o;s=q.lastChild;while(s){i.insertAfter(s.cloneNode(true),p);s=s.previousSibling}i.remove(p)}return this.run(l,function(o){o=i.get(o);if(o.nodeType==1){m=m||o.ownerDocument||i.doc;if(b){try{if(b&&o.nodeType==1){o.outerHTML=j}else{k(o,j,m)}}catch(n){k(o,j,m)}}else{k(o,j,m)}}})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(i,j){j=this.get(j);return this.run(i,function(l){var k,m;k=j.parentNode;m=j.nextSibling;if(m){k.insertBefore(l,m)}else{k.appendChild(l)}return l})},replace:function(m,l,i){var j=this;if(d(l,"array")){m=m.cloneNode(true)}return j.run(l,function(k){if(i){g(e.grep(k.childNodes),function(n){m.appendChild(n)})}return k.parentNode.replaceChild(m,k)})},rename:function(l,i){var k=this,j;if(l.nodeName!=i.toUpperCase()){j=k.create(i);g(k.getAttribs(l),function(m){k.setAttrib(j,m.nodeName,k.getAttrib(l,m.nodeName))});k.replace(j,l,1)}return j||l},findCommonAncestor:function(k,i){var l=k,j;while(l){j=i;while(j&&l!=j){j=j.parentNode}if(l==j){break}l=l.parentNode}if(!l&&k.ownerDocument){return k.ownerDocument.documentElement}return l},toHex:function(i){var k=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(i);function j(l){l=parseInt(l,10).toString(16);return l.length>1?l:"0"+l}if(k){i="#"+j(k[1])+j(k[2])+j(k[3]);return i}return i},getClasses:function(){var n=this,j=[],m,o={},p=n.settings.class_filter,l;if(n.classes){return n.classes}function q(i){g(i.imports,function(s){q(s)});g(i.cssRules||i.rules,function(s){switch(s.type||1){case 1:if(s.selectorText){g(s.selectorText.split(","),function(r){r=r.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(r)||!/\.[\w\-]+$/.test(r)){return}l=r;r=e._replace(/.*\.([a-z0-9_\-]+).*/i,"$1",r);if(p&&!(r=p(r,l))){return}if(!o[r]){j.push({"class":r});o[r]=1}})}break;case 3:q(s.styleSheet);break}})}try{g(n.doc.styleSheets,q)}catch(k){}if(j.length>0){n.classes=j}return j},run:function(l,k,j){var i=this,m;if(i.doc&&typeof(l)==="string"){l=i.get(l)}if(!l){return false}j=j||this;if(!l.nodeType&&(l.length||l.length===0)){m=[];g(l,function(o,n){if(o){if(typeof(o)=="string"){o=i.doc.getElementById(o)}m.push(k.call(j,o,n))}});return m}return k.call(j,l)},getAttribs:function(j){var i;j=this.get(j);if(!j){return[]}if(b){i=[];if(j.nodeName=="OBJECT"){return j.attributes}if(j.nodeName==="OPTION"&&this.getAttrib(j,"selected")){i.push({specified:1,nodeName:"selected"})}j.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(k){i.push({specified:1,nodeName:k})});return i}return j.attributes},isEmpty:function(m,k){var r=this,o,n,q,j,l,p=0;m=m.firstChild;if(m){j=new e.dom.TreeWalker(m,m.parentNode);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]){if(l==="br"){p++;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==8){return false}if((q===3&&!a.test(m.nodeValue))){return false}}while(m=j.next())}return p<=1},destroy:function(j){var i=this;i.win=i.doc=i.root=i.events=i.frag=null;if(!j){e.removeUnload(i.destroy)}},createRng:function(){var i=this.doc;return i.createRange?i.createRange():new e.dom.Range(this)},nodeIndex:function(m,n){var i=0,k,l,j;if(m){for(k=m.nodeType,m=m.previousSibling,l=m;m;m=m.previousSibling){j=m.nodeType;if(n&&j==3){if(j==k||!m.nodeValue.length){continue}}i++;k=j}}return i},split:function(m,l,p){var q=this,i=q.createRng(),n,k,o;function j(v){var t,s=v.childNodes,u=v.nodeType;function x(A){var z=A.previousSibling&&A.previousSibling.nodeName=="SPAN";var y=A.nextSibling&&A.nextSibling.nodeName=="SPAN";return z&&y}if(u==1&&v.getAttribute("data-mce-type")=="bookmark"){return}for(t=s.length-1;t>=0;t--){j(s[t])}if(u!=9){if(u==3&&v.nodeValue.length>0){var r=e.trim(v.nodeValue).length;if(!q.isBlock(v.parentNode)||r>0||r===0&&x(v)){return}}else{if(u==1){s=v.childNodes;if(s.length==1&&s[0]&&s[0].nodeType==1&&s[0].getAttribute("data-mce-type")=="bookmark"){v.parentNode.insertBefore(s[0],v)}if(s.length||/^(br|hr|input|img)$/i.test(v.nodeName)){return}}}q.remove(v)}return v}if(m&&l){i.setStart(m.parentNode,q.nodeIndex(m));i.setEnd(l.parentNode,q.nodeIndex(l));n=i.extractContents();i=q.createRng();i.setStart(l.parentNode,q.nodeIndex(l)+1);i.setEnd(m.parentNode,q.nodeIndex(m)+1);k=i.extractContents();o=m.parentNode;o.insertBefore(j(n),m);if(p){o.replaceChild(p,l)}else{o.insertBefore(l,m)}o.insertBefore(j(k),m);q.remove(m);return p||l}},bind:function(l,i,k,j){return this.events.add(l,i,k,j||this)},unbind:function(k,i,j){return this.events.remove(k,i,j)},fire:function(k,j,i){return this.events.fire(k,j,i)},getContentEditable:function(j){var i;if(j.nodeType!=1){return null}i=j.getAttribute("data-mce-contenteditable");if(i&&i!=="inherit"){return i}return j.contentEditable!=="inherit"?j.contentEditable:null},_findSib:function(l,i,j){var k=this,m=i;if(l){if(d(m,"string")){m=function(n){return k.is(n,i)}}for(l=l[j];l;l=l[j]){if(m(l)){return l}}}return null},_isRes:function(i){return/^(top|left|bottom|right|width|height)/i.test(i)||/;\s*(top|left|bottom|right|width|height)/i.test(i)}});e.DOM=new e.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var O=this,e=c.doc,U=0,F=1,j=2,E=true,S=false,W="startOffset",h="startContainer",Q="endContainer",A="endOffset",k=tinymce.extend,n=c.nodeIndex;k(O,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:E,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:J,setEndBefore:K,setEndAfter:u,collapse:B,selectNode:y,selectNodeContents:G,compareBoundaryPoints:v,deleteContents:p,extractContents:I,cloneContents:d,insertNode:D,surroundContents:N,cloneRange:L,toStringIE:T});function x(){return e.createDocumentFragment()}function q(X,t){C(E,X,t)}function s(X,t){C(S,X,t)}function g(t){q(t.parentNode,n(t))}function J(t){q(t.parentNode,n(t)+1)}function K(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function B(t){if(t){O[Q]=O[h];O[A]=O[W]}else{O[h]=O[Q];O[W]=O[A]}O.collapsed=E}function y(t){g(t);u(t)}function G(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(aa,t){var ad=O[h],Y=O[W],ac=O[Q],X=O[A],ab=t.startContainer,af=t.startOffset,Z=t.endContainer,ae=t.endOffset;if(aa===0){return H(ad,Y,ab,af)}if(aa===1){return H(ac,X,ab,af)}if(aa===2){return H(ac,X,Z,ae)}if(aa===3){return H(ad,Y,Z,ae)}}function p(){l(j)}function I(){return l(U)}function d(){return l(F)}function D(aa){var X=this[h],t=this[W],Z,Y;if((X.nodeType===3||X.nodeType===4)&&X.nodeValue){if(!t){X.parentNode.insertBefore(aa,X)}else{if(t>=X.nodeValue.length){c.insertAfter(aa,X)}else{Z=X.splitText(t);X.parentNode.insertBefore(aa,Z)}}}else{if(X.childNodes.length>0){Y=X.childNodes[t]}if(Y){X.insertBefore(aa,Y)}else{X.appendChild(aa)}}}function N(X){var t=O.extractContents();O.insertNode(X);X.appendChild(t);O.selectNode(X)}function L(){return k(new b(c),{startContainer:O[h],startOffset:O[W],endContainer:O[Q],endOffset:O[A],collapsed:O.collapsed,commonAncestorContainer:O.commonAncestorContainer})}function P(t,X){var Y;if(t.nodeType==3){return t}if(X<0){return t}Y=t.firstChild;while(Y&&X>0){--X;Y=Y.nextSibling}if(Y){return Y}return t}function m(){return(O[h]==O[Q]&&O[W]==O[A])}function H(Z,ab,X,aa){var ac,Y,t,ad,af,ae;if(Z==X){if(ab==aa){return 0}if(ab<aa){return -1}return 1}ac=X;while(ac&&ac.parentNode!=Z){ac=ac.parentNode}if(ac){Y=0;t=Z.firstChild;while(t!=ac&&Y<ab){Y++;t=t.nextSibling}if(ab<=Y){return -1}return 1}ac=Z;while(ac&&ac.parentNode!=X){ac=ac.parentNode}if(ac){Y=0;t=X.firstChild;while(t!=ac&&Y<aa){Y++;t=t.nextSibling}if(Y<aa){return -1}return 1}ad=c.findCommonAncestor(Z,X);af=Z;while(af&&af.parentNode!=ad){af=af.parentNode}if(!af){af=ad}ae=X;while(ae&&ae.parentNode!=ad){ae=ae.parentNode}if(!ae){ae=ad}if(af==ae){return 0}t=ad.firstChild;while(t){if(t==af){return -1}if(t==ae){return 1}t=t.nextSibling}}function C(X,aa,Z){var t,Y;if(X){O[h]=aa;O[W]=Z}else{O[Q]=aa;O[A]=Z}t=O[Q];while(t.parentNode){t=t.parentNode}Y=O[h];while(Y.parentNode){Y=Y.parentNode}if(Y==t){if(H(O[h],O[W],O[Q],O[A])>0){O.collapse(X)}}else{O.collapse(X)}O.collapsed=m();O.commonAncestorContainer=c.findCommonAncestor(O[h],O[Q])}function l(ad){var ac,Z=0,af=0,X,ab,Y,aa,t,ae;if(O[h]==O[Q]){return f(ad)}for(ac=O[Q],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[h]){return r(ac,ad)}++Z}for(ac=O[h],X=ac.parentNode;X;ac=X,X=X.parentNode){if(X==O[Q]){return V(ac,ad)}++af}ab=af-Z;Y=O[h];while(ab>0){Y=Y.parentNode;ab--}aa=O[Q];while(ab<0){aa=aa.parentNode;ab++}for(t=Y.parentNode,ae=aa.parentNode;t!=ae;t=t.parentNode,ae=ae.parentNode){Y=t;aa=ae}return o(Y,aa,ad)}function f(ac){var ae,af,t,Y,Z,ad,aa,X,ab;if(ac!=j){ae=x()}if(O[W]==O[A]){return ae}if(O[h].nodeType==3){af=O[h].nodeValue;t=af.substring(O[W],O[A]);if(ac!=F){Y=O[h];X=O[W];ab=O[A]-O[W];if(X===0&&ab>=Y.nodeValue.length-1){Y.parentNode.removeChild(Y)}else{Y.deleteData(X,ab)}O.collapse(E)}if(ac==j){return}if(t.length>0){ae.appendChild(e.createTextNode(t))}return ae}Y=P(O[h],O[W]);Z=O[A]-O[W];while(Y&&Z>0){ad=Y.nextSibling;aa=z(Y,ac);if(ae){ae.appendChild(aa)}--Z;Y=ad}if(ac!=F){O.collapse(E)}return ae}function r(ad,aa){var ac,ab,X,t,Z,Y;if(aa!=j){ac=x()}ab=i(ad,aa);if(ac){ac.appendChild(ab)}X=n(ad);t=X-O[W];if(t<=0){if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}ab=ad.previousSibling;while(t>0){Z=ab.previousSibling;Y=z(ab,aa);if(ac){ac.insertBefore(Y,ac.firstChild)}--t;ab=Z}if(aa!=F){O.setEndBefore(ad);O.collapse(S)}return ac}function V(ab,aa){var ad,X,ac,t,Z,Y;if(aa!=j){ad=x()}ac=R(ab,aa);if(ad){ad.appendChild(ac)}X=n(ab);++X;t=O[A]-X;ac=ab.nextSibling;while(ac&&t>0){Z=ac.nextSibling;Y=z(ac,aa);if(ad){ad.appendChild(Y)}--t;ac=Z}if(aa!=F){O.setStartAfter(ab);O.collapse(E)}return ad}function o(ab,t,ae){var Y,ag,aa,ac,ad,X,af,Z;if(ae!=j){ag=x()}Y=R(ab,ae);if(ag){ag.appendChild(Y)}aa=ab.parentNode;ac=n(ab);ad=n(t);++ac;X=ad-ac;af=ab.nextSibling;while(X>0){Z=af.nextSibling;Y=z(af,ae);if(ag){ag.appendChild(Y)}af=Z;--X}Y=i(t,ae);if(ag){ag.appendChild(Y)}if(ae!=F){O.setStartAfter(ab);O.collapse(E)}return ag}function i(ac,ad){var Y=P(O[Q],O[A]-1),ae,ab,aa,t,X,Z=Y!=O[Q];if(Y==ac){return M(Y,Z,S,ad)}ae=Y.parentNode;ab=M(ae,S,S,ad);while(ae){while(Y){aa=Y.previousSibling;t=M(Y,Z,S,ad);if(ad!=j){ab.insertBefore(t,ab.firstChild)}Z=E;Y=aa}if(ae==ac){return ab}Y=ae.previousSibling;ae=ae.parentNode;X=M(ae,S,S,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function R(ac,ad){var Z=P(O[h],O[W]),aa=Z!=O[h],ae,ab,Y,t,X;if(Z==ac){return M(Z,aa,E,ad)}ae=Z.parentNode;ab=M(ae,S,E,ad);while(ae){while(Z){Y=Z.nextSibling;t=M(Z,aa,E,ad);if(ad!=j){ab.appendChild(t)}aa=E;Z=Y}if(ae==ac){return ab}Z=ae.nextSibling;ae=ae.parentNode;X=M(ae,S,E,ad);if(ad!=j){X.appendChild(ab)}ab=X}}function M(t,aa,ad,ae){var Z,Y,ab,X,ac;if(aa){return z(t,ae)}if(t.nodeType==3){Z=t.nodeValue;if(ad){X=O[W];Y=Z.substring(X);ab=Z.substring(0,X)}else{X=O[A];Y=Z.substring(0,X);ab=Z.substring(X)}if(ae!=F){t.nodeValue=ab}if(ae==j){return}ac=c.clone(t,S);ac.nodeValue=Y;return ac}if(ae==j){return}return c.clone(t,S)}function z(X,t){if(t!=j){return t==F?c.clone(X,E):X}X.parentNode.removeChild(X)}function T(){return c.create("body",null,d()).outerText}return O}a.Range=b;b.prototype.toString=function(){return this.toStringIE()}})(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)}o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",1)===0||s!=k.parentElement()){break}o++}}else{k.collapse(true);o=0;while(k.compareEndPoints(j?"StartToStart":"StartToEnd",i)!==0){if(k.move("character",-1)===0||s!=k.parentElement()){break}o++}}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 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,v,q,t,s=d.dom.doc,m=s.body,r,u;function j(C){var y,B,x,A,z;x=h.create("a");y=C?k:v;B=C?p:q;A=n.duplicate();if(y==s||y==s.documentElement){y=m;B=0}if(y.nodeType==3){y.parentNode.insertBefore(x,y);A.moveToElementText(x);A.moveStart("character",B);h.remove(x);n.setEndPoint(C?"StartToStart":"EndToEnd",A)}else{z=y.childNodes;if(z.length){if(B>=z.length){h.insertAfter(x,z[z.length-1])}else{y.insertBefore(x,z[B])}A.moveToElementText(x)}else{if(y.canHaveHTML){y.innerHTML="<span>\uFEFF</span>";x=y.firstChild;A.moveToElementText(x);A.collapse(f)}}n.setEndPoint(C?"StartToStart":"EndToEnd",A);h.remove(x)}}k=i.startContainer;p=i.startOffset;v=i.endContainer;q=i.endOffset;n=m.createTextRange();if(k==v&&k.nodeType==1){if(p==q&&!k.hasChildNodes()){if(k.canHaveHTML){t=k.previousSibling;if(t&&!t.hasChildNodes()&&h.isBlock(t)){t.innerHTML="\uFEFF"}else{t=null}k.innerHTML="<span>\uFEFF</span><span>\uFEFF</span>";n.moveToElementText(k.lastChild);n.select();h.doc.selection.clear();k.innerHTML="";if(t){t.innerHTML=""}return}else{p=h.nodeIndex(k);k=k.parentNode}}if(p==q-1){try{u=k.childNodes[p];l=m.createControlRange();l.addElement(u);l.select();r=d.getRng();if(r.item&&u===r.item(0)){return}}catch(o){}}}j(true);j();n.select()};this.getRangeAt=g}tinymce.dom.TridentSelection=a})();(function(){var n=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,i="sizcache",o=0,r=Object.prototype.toString,h=false,g=true,q=/\\/g,u=/\r\n/g,x=/\W/;[0,0].sort(function(){g=false;return 0});var d=function(C,e,F,G){F=F||[];e=e||document;var I=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!C||typeof C!=="string"){return F}var z,K,N,y,J,M,L,E,B=true,A=d.isXML(e),D=[],H=C;do{n.exec("");z=n.exec(H);if(z){H=z[3];D.push(z[1]);if(z[2]){y=z[3];break}}}while(z);if(D.length>1&&j.exec(C)){if(D.length===2&&k.relative[D[0]]){K=s(D[0]+D[1],e,G)}else{K=k.relative[D[0]]?[e]:d(D.shift(),e);while(D.length){C=D.shift();if(k.relative[C]){C+=D.shift()}K=s(C,K,G)}}}else{if(!G&&D.length>1&&e.nodeType===9&&!A&&k.match.ID.test(D[0])&&!k.match.ID.test(D[D.length-1])){J=d.find(D.shift(),e,A);e=J.expr?d.filter(J.expr,J.set)[0]:J.set[0]}if(e){J=G?{expr:D.pop(),set:l(G)}:d.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&e.parentNode?e.parentNode:e,A);K=J.expr?d.filter(J.expr,J.set):J.set;if(D.length>0){N=l(K)}else{B=false}while(D.length){M=D.pop();L=M;if(!k.relative[M]){M=""}else{L=D.pop()}if(L==null){L=e}k.relative[M](N,L,A)}}else{N=D=[]}}if(!N){N=K}if(!N){d.error(M||C)}if(r.call(N)==="[object Array]"){if(!B){F.push.apply(F,N)}else{if(e&&e.nodeType===1){for(E=0;N[E]!=null;E++){if(N[E]&&(N[E]===true||N[E].nodeType===1&&d.contains(e,N[E]))){F.push(K[E])}}}else{for(E=0;N[E]!=null;E++){if(N[E]&&N[E].nodeType===1){F.push(K[E])}}}}}else{l(N,F)}if(y){d(y,I,F,G);d.uniqueSort(F)}return F};d.uniqueSort=function(y){if(p){h=g;y.sort(p);if(h){for(var e=1;e<y.length;e++){if(y[e]===y[e-1]){y.splice(e--,1)}}}}return y};d.matches=function(e,y){return d(e,null,null,y)};d.matchesSelector=function(e,y){return d(y,null,null,[e]).length>0};d.find=function(E,e,F){var D,z,B,A,C,y;if(!E){return[]}for(z=0,B=k.order.length;z<B;z++){C=k.order[z];if((A=k.leftMatch[C].exec(E))){y=A[1];A.splice(1,1);if(y.substr(y.length-1)!=="\\"){A[1]=(A[1]||"").replace(q,"");D=k.find[C](A,e,F);if(D!=null){E=E.replace(k.match[C],"");break}}}}if(!D){D=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:D,expr:E}};d.filter=function(I,H,L,B){var D,e,G,N,K,y,A,C,J,z=I,M=[],F=H,E=H&&H[0]&&d.isXML(H[0]);while(I&&H.length){for(G in k.filter){if((D=k.leftMatch[G].exec(I))!=null&&D[2]){y=k.filter[G];A=D[1];e=false;D.splice(1,1);if(A.substr(A.length-1)==="\\"){continue}if(F===M){M=[]}if(k.preFilter[G]){D=k.preFilter[G](D,F,L,M,B,E);if(!D){e=N=true}else{if(D===true){continue}}}if(D){for(C=0;(K=F[C])!=null;C++){if(K){N=y(K,D,C,F);J=B^N;if(L&&N!=null){if(J){e=true}else{F[C]=false}}else{if(J){M.push(K);e=true}}}}}if(N!==undefined){if(!L){F=M}I=I.replace(k.match[G],"");if(!e){return[]}break}}}if(I===z){if(e==null){d.error(I)}else{break}}z=I}return F};d.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var b=d.getText=function(B){var z,A,e=B.nodeType,y="";if(e){if(e===1||e===9||e===11){if(typeof B.textContent==="string"){return B.textContent}else{if(typeof B.innerText==="string"){return B.innerText.replace(u,"")}else{for(B=B.firstChild;B;B=B.nextSibling){y+=b(B)}}}}else{if(e===3||e===4){return B.nodeValue}}}else{for(z=0;(A=B[z]);z++){if(A.nodeType!==8){y+=b(A)}}}return y};var k=d.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(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(D,y){var A=typeof y==="string",C=A&&!x.test(y),E=A&&!C;if(C){y=y.toLowerCase()}for(var z=0,e=D.length,B;z<e;z++){if((B=D[z])){while((B=B.previousSibling)&&B.nodeType!==1){}D[z]=E||B&&B.nodeName.toLowerCase()===y?B||false:B===y}}if(E){d.filter(y,D,true)}},">":function(D,y){var C,B=typeof y==="string",z=0,e=D.length;if(B&&!x.test(y)){y=y.toLowerCase();for(;z<e;z++){C=D[z];if(C){var A=C.parentNode;D[z]=A.nodeName.toLowerCase()===y?A:false}}}else{for(;z<e;z++){C=D[z];if(C){D[z]=B?C.parentNode:C.parentNode===y}}if(B){d.filter(y,D,true)}}},"":function(A,y,C){var B,z=o++,e=t;if(typeof y==="string"&&!x.test(y)){y=y.toLowerCase();B=y;e=a}e("parentNode",y,z,A,B,C)},"~":function(A,y,C){var B,z=o++,e=t;if(typeof y==="string"&&!x.test(y)){y=y.toLowerCase();B=y;e=a}e("previousSibling",y,z,A,B,C)}},find:{ID:function(y,z,A){if(typeof z.getElementById!=="undefined"&&!A){var e=z.getElementById(y[1]);return e&&e.parentNode?[e]:[]}},NAME:function(z,C){if(typeof C.getElementsByName!=="undefined"){var y=[],B=C.getElementsByName(z[1]);for(var A=0,e=B.length;A<e;A++){if(B[A].getAttribute("name")===z[1]){y.push(B[A])}}return y.length===0?null:y}},TAG:function(e,y){if(typeof y.getElementsByTagName!=="undefined"){return y.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(A,y,z,e,D,E){A=" "+A[1].replace(q,"")+" ";if(E){return A}for(var B=0,C;(C=y[B])!=null;B++){if(C){if(D^(C.className&&(" "+C.className+" ").replace(/[\t\n\r]/g," ").indexOf(A)>=0)){if(!z){e.push(C)}}else{if(z){y[B]=false}}}}return false},ID:function(e){return e[1].replace(q,"")},TAG:function(y,e){return y[1].replace(q,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){d.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var y=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(y[1]+(y[2]||1))-0;e[3]=y[3]-0}else{if(e[2]){d.error(e[0])}}e[0]=o++;return e},ATTR:function(B,y,z,e,C,D){var A=B[1]=B[1].replace(q,"");if(!D&&k.attrMap[A]){B[1]=k.attrMap[A]}B[4]=(B[4]||B[5]||"").replace(q,"");if(B[2]==="~="){B[4]=" "+B[4]+" "}return B},PSEUDO:function(B,y,z,e,C){if(B[1]==="not"){if((n.exec(B[3])||"").length>1||/^\w/.test(B[3])){B[3]=d(B[3],null,null,y)}else{var A=d.filter(B[3],y,z,true^C);if(!z){e.push.apply(e,A)}return false}}else{if(k.match.POS.test(B[0])||k.match.CHILD.test(B[0])){return true}}return B},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){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(z,y,e){return !!d(e[3],z).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(z){var e=z.getAttribute("type"),y=z.type;return z.nodeName.toLowerCase()==="input"&&"text"===y&&(e===y||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===y.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(y){var e=y.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===y.type},button:function(y){var e=y.nodeName.toLowerCase();return e==="input"&&"button"===y.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(y,e){return e===0},last:function(z,y,e,A){return y===A.length-1},even:function(y,e){return e%2===0},odd:function(y,e){return e%2===1},lt:function(z,y,e){return y<e[3]-0},gt:function(z,y,e){return y>e[3]-0},nth:function(z,y,e){return e[3]-0===y},eq:function(z,y,e){return e[3]-0===y}},filter:{PSEUDO:function(z,E,D,F){var e=E[1],y=k.filters[e];if(y){return y(z,D,E,F)}else{if(e==="contains"){return(z.textContent||z.innerText||b([z])||"").indexOf(E[3])>=0}else{if(e==="not"){var A=E[3];for(var C=0,B=A.length;C<B;C++){if(A[C]===z){return false}}return true}else{d.error(e)}}}},CHILD:function(z,B){var A,H,D,G,e,C,F,E=B[1],y=z;switch(E){case"only":case"first":while((y=y.previousSibling)){if(y.nodeType===1){return false}}if(E==="first"){return true}y=z;case"last":while((y=y.nextSibling)){if(y.nodeType===1){return false}}return true;case"nth":A=B[2];H=B[3];if(A===1&&H===0){return true}D=B[0];G=z.parentNode;if(G&&(G[i]!==D||!z.nodeIndex)){C=0;for(y=G.firstChild;y;y=y.nextSibling){if(y.nodeType===1){y.nodeIndex=++C}}G[i]=D}F=z.nodeIndex-H;if(A===0){return F===0}else{return(F%A===0&&F/A>=0)}}},ID:function(y,e){return y.nodeType===1&&y.getAttribute("id")===e},TAG:function(y,e){return(e==="*"&&y.nodeType===1)||!!y.nodeName&&y.nodeName.toLowerCase()===e},CLASS:function(y,e){return(" "+(y.className||y.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(C,A){var z=A[1],e=d.attr?d.attr(C,z):k.attrHandle[z]?k.attrHandle[z](C):C[z]!=null?C[z]:C.getAttribute(z),D=e+"",B=A[2],y=A[4];return e==null?B==="!=":!B&&d.attr?e!=null:B==="="?D===y:B==="*="?D.indexOf(y)>=0:B==="~="?(" "+D+" ").indexOf(y)>=0:!y?D&&e!==false:B==="!="?D!==y:B==="^="?D.indexOf(y)===0:B==="$="?D.substr(D.length-y.length)===y:B==="|="?D===y||D.substr(0,y.length+1)===y+"-":false},POS:function(B,y,z,C){var e=y[2],A=k.setFilters[e];if(A){return A(B,z,y,C)}}}};var j=k.match.POS,c=function(y,e){return"\\"+(e-0+1)};for(var f in k.match){k.match[f]=new RegExp(k.match[f].source+(/(?![^\[]*\])(?![^\(]*\))/.source));k.leftMatch[f]=new RegExp(/(^(?:.|\r|\n)*?)/.source+k.match[f].source.replace(/\\(\d+)/g,c))}k.match.globalPOS=j;var l=function(y,e){y=Array.prototype.slice.call(y,0);if(e){e.push.apply(e,y);return e}return y};try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(v){l=function(B,A){var z=0,y=A||[];if(r.call(B)==="[object Array]"){Array.prototype.push.apply(y,B)}else{if(typeof B.length==="number"){for(var e=B.length;z<e;z++){y.push(B[z])}}else{for(;B[z];z++){y.push(B[z])}}}return y}}var p,m;if(document.documentElement.compareDocumentPosition){p=function(y,e){if(y===e){h=true;return 0}if(!y.compareDocumentPosition||!e.compareDocumentPosition){return y.compareDocumentPosition?-1:1}return y.compareDocumentPosition(e)&4?-1:1}}else{p=function(F,E){if(F===E){h=true;return 0}else{if(F.sourceIndex&&E.sourceIndex){return F.sourceIndex-E.sourceIndex}}var C,y,z=[],e=[],B=F.parentNode,D=E.parentNode,G=B;if(B===D){return m(F,E)}else{if(!B){return -1}else{if(!D){return 1}}}while(G){z.unshift(G);G=G.parentNode}G=D;while(G){e.unshift(G);G=G.parentNode}C=z.length;y=e.length;for(var A=0;A<C&&A<y;A++){if(z[A]!==e[A]){return m(z[A],e[A])}}return A===C?m(F,e[A],-1):m(z[A],E,1)};m=function(y,e,z){if(y===e){return z}var A=y.nextSibling;while(A){if(A===e){return -1}A=A.nextSibling}return 1}}(function(){var y=document.createElement("div"),z="script"+(new Date()).getTime(),e=document.documentElement;y.innerHTML="<a name='"+z+"'/>";e.insertBefore(y,e.firstChild);if(document.getElementById(z)){k.find.ID=function(B,C,D){if(typeof C.getElementById!=="undefined"&&!D){var A=C.getElementById(B[1]);return A?A.id===B[1]||typeof A.getAttributeNode!=="undefined"&&A.getAttributeNode("id").nodeValue===B[1]?[A]:undefined:[]}};k.filter.ID=function(C,A){var B=typeof C.getAttributeNode!=="undefined"&&C.getAttributeNode("id");return C.nodeType===1&&B&&B.nodeValue===A}}e.removeChild(y);e=y=null})();(function(){var e=document.createElement("div");e.appendChild(document.createComment(""));if(e.getElementsByTagName("*").length>0){k.find.TAG=function(y,C){var B=C.getElementsByTagName(y[1]);if(y[1]==="*"){var A=[];for(var z=0;B[z];z++){if(B[z].nodeType===1){A.push(B[z])}}B=A}return B}}e.innerHTML="<a href='#'></a>";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){k.attrHandle.href=function(y){return y.getAttribute("href",2)}}e=null})();if(document.querySelectorAll){(function(){var e=d,A=document.createElement("div"),z="__sizzle__";A.innerHTML="<p class='TEST'></p>";if(A.querySelectorAll&&A.querySelectorAll(".TEST").length===0){return}d=function(L,C,G,K){C=C||document;if(!K&&!d.isXML(C)){var J=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(L);if(J&&(C.nodeType===1||C.nodeType===9)){if(J[1]){return l(C.getElementsByTagName(L),G)}else{if(J[2]&&k.find.CLASS&&C.getElementsByClassName){return l(C.getElementsByClassName(J[2]),G)}}}if(C.nodeType===9){if(L==="body"&&C.body){return l([C.body],G)}else{if(J&&J[3]){var F=C.getElementById(J[3]);if(F&&F.parentNode){if(F.id===J[3]){return l([F],G)}}else{return l([],G)}}}try{return l(C.querySelectorAll(L),G)}catch(H){}}else{if(C.nodeType===1&&C.nodeName.toLowerCase()!=="object"){var D=C,E=C.getAttribute("id"),B=E||z,N=C.parentNode,M=/^\s*[+~]/.test(L);if(!E){C.setAttribute("id",B)}else{B=B.replace(/'/g,"\\$&")}if(M&&N){C=C.parentNode}try{if(!M||N){return l(C.querySelectorAll("[id='"+B+"'] "+L),G)}}catch(I){}finally{if(!E){D.removeAttribute("id")}}}}}return e(L,C,G,K)};for(var y in e){d[y]=e[y]}A=null})()}(function(){var e=document.documentElement,z=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(z){var B=!z.call(document.createElement("div"),"div"),y=false;try{z.call(document.documentElement,"[test!='']:sizzle")}catch(A){y=true}d.matchesSelector=function(D,F){F=F.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!d.isXML(D)){try{if(y||!k.match.PSEUDO.test(F)&&!/!=/.test(F)){var C=z.call(D,F);if(C||!B||D.document&&D.document.nodeType!==11){return C}}}catch(E){}}return d(F,null,null,[D]).length>0}}})();(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}k.order.splice(1,0,"CLASS");k.find.CLASS=function(y,z,A){if(typeof z.getElementsByClassName!=="undefined"&&!A){return z.getElementsByClassName(y[1])}};e=null})();function a(y,D,C,G,E,F){for(var A=0,z=G.length;A<z;A++){var e=G[A];if(e){var B=false;e=e[y];while(e){if(e[i]===C){B=G[e.sizset];break}if(e.nodeType===1&&!F){e[i]=C;e.sizset=A}if(e.nodeName.toLowerCase()===D){B=e;break}e=e[y]}G[A]=B}}}function t(y,D,C,G,E,F){for(var A=0,z=G.length;A<z;A++){var e=G[A];if(e){var B=false;e=e[y];while(e){if(e[i]===C){B=G[e.sizset];break}if(e.nodeType===1){if(!F){e[i]=C;e.sizset=A}if(typeof D!=="string"){if(e===D){B=true;break}}else{if(d.filter(D,[e]).length>0){B=e;break}}}e=e[y]}G[A]=B}}}if(document.documentElement.contains){d.contains=function(y,e){return y!==e&&(y.contains?y.contains(e):true)}}else{if(document.documentElement.compareDocumentPosition){d.contains=function(y,e){return !!(y.compareDocumentPosition(e)&16)}}else{d.contains=function(){return false}}}d.isXML=function(e){var y=(e?e.ownerDocument||e:0).documentElement;return y?y.nodeName!=="HTML":false};var s=function(z,e,D){var C,E=[],B="",F=e.nodeType?[e]:e;while((C=k.match.PSEUDO.exec(z))){B+=C[0];z=z.replace(k.match.PSEUDO,"")}z=k.relative[z]?z+"*":z;for(var A=0,y=F.length;A<y;A++){d(z,F[A],E,D)}return d.filter(B,E)};window.tinymce.dom.Sizzle=d})();(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(d){function f(g){return g.replace(/[\n\r]+/g,"")}var c=d.is,b=d.isIE,e=d.each,a=d.dom.TreeWalker;d.create("tinymce.dom.Selection",{Selection:function(k,j,i,h){var g=this;g.dom=k;g.win=j;g.serializer=i;g.editor=h;e(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(l){g[l]=new d.util.Dispatcher(g)});if(!g.win.getSelection){g.tridentSel=new d.dom.TridentSelection(g)}if(d.isIE&&k.boxModel){this._fixIESelection()}d.addUnload(g.destroy,g)},setCursorLocation:function(i,j){var g=this;var h=g.dom.createRng();h.setStart(i,j);h.setEnd(i,j);g.setRng(h);g.collapse(false)},getContent:function(h){var g=this,i=g.getRng(),m=g.dom.create("body"),k=g.getSel(),j,l,o;h=h||{};j=l="";h.get=true;h.format=h.format||"html";h.forced_root_block="";g.onBeforeGetContent.dispatch(g,h);if(h.format=="text"){return g.isCollapsed()?"":(i.text||(k.toString?k.toString():""))}if(i.cloneContents){o=i.cloneContents();if(o){m.appendChild(o)}}else{if(c(i.item)||c(i.htmlText)){m.innerHTML="<br>"+(i.item?i.item(0).outerHTML:i.htmlText);m.removeChild(m.firstChild)}else{m.innerHTML=i.toString()}}if(/^\s/.test(m.innerHTML)){j=" "}if(/\s+$/.test(m.innerHTML)){l=" "}h.getInner=true;h.content=g.isCollapsed()?"":j+g.serializer.serialize(m,h)+l;g.onGetContent.dispatch(g,h);return h.content},setContent:function(h,j){var o=this,g=o.getRng(),k,l=o.win.document,n,m;j=j||{format:"html"};j.set=true;h=j.content=h;if(!j.no_events){o.onBeforeSetContent.dispatch(o,j)}h=j.content;if(g.insertNode){h+='<span id="__caret">_</span>';if(g.startContainer==l&&g.endContainer==l){l.body.innerHTML=h}else{g.deleteContents();if(l.body.childNodes.length===0){l.body.innerHTML=h}else{if(g.createContextualFragment){g.insertNode(g.createContextualFragment(h))}else{n=l.createDocumentFragment();m=l.createElement("div");n.appendChild(m);m.outerHTML=h;g.insertNode(n)}}}k=o.dom.get("__caret");g=l.createRange();g.setStartBefore(k);g.setEndBefore(k);o.setRng(g);o.dom.remove("__caret");try{o.setRng(g)}catch(i){}}else{if(g.item){l.execCommand("Delete",false,null);g=o.getRng()}if(/^\s+/.test(h)){g.pasteHTML('<span id="__mce_tmp">_</span>'+h);o.dom.remove("__mce_tmp")}else{g.pasteHTML(h)}}if(!j.no_events){o.onSetContent.dispatch(o,j)}},getStart:function(){var i=this,h=i.getRng(),j,g,l,k;if(h.duplicate||h.item){if(h.item){return h.item(0)}l=h.duplicate();l.collapse(1);j=l.parentElement();if(j.ownerDocument!==i.dom.doc){j=i.dom.getRoot()}g=k=h.parentElement();while(k=k.parentNode){if(k==j){j=g;break}}return j}else{j=h.startContainer;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[Math.min(j.childNodes.length-1,h.startOffset)]}if(j&&j.nodeType==3){return j.parentNode}return j}},getEnd:function(){var h=this,g=h.getRng(),j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);j=g.parentElement();if(j.ownerDocument!==h.dom.doc){j=h.dom.getRoot()}if(j&&j.nodeName=="BODY"){return j.lastChild||j}return j}else{j=g.endContainer;i=g.endOffset;if(j.nodeType==1&&j.hasChildNodes()){j=j.childNodes[i>0?i-1:i]}if(j&&j.nodeType==3){return j.parentNode}return j}},getBookmark:function(s,v){var y=this,n=y.dom,h,k,j,o,i,p,q,m="\uFEFF",x;function g(z,A){var t=0;e(n.select(z),function(C,B){if(C==A){t=B}});return t}function u(t){function z(E){var A,D,C,B=E?"start":"end";A=t[B+"Container"];D=t[B+"Offset"];if(A.nodeType==1&&A.nodeName=="TR"){C=A.childNodes;A=C[Math.min(E?D:D-1,C.length-1)];if(A){D=E?0:A.childNodes.length;t["set"+(E?"Start":"End")](A,D)}}}z(true);z();return t}function l(){var z=y.getRng(true),t=n.getRoot(),A={};function B(E,J){var D=E[J?"startContainer":"endContainer"],I=E[J?"startOffset":"endOffset"],C=[],F,H,G=0;if(D.nodeType==3){if(v){for(F=D.previousSibling;F&&F.nodeType==3;F=F.previousSibling){I+=F.nodeValue.length}}C.push(I)}else{H=D.childNodes;if(I>=H.length&&H.length){G=1;I=Math.max(0,H.length-1)}C.push(y.dom.nodeIndex(H[I],v)+G)}for(;D&&D!=t;D=D.parentNode){C.push(y.dom.nodeIndex(D,v))}return C}A.start=B(z,true);if(!y.isCollapsed()){A.end=B(z)}return A}if(s==2){if(y.tridentSel){return y.tridentSel.getBookmark(s)}return l()}if(s){return{rng:y.getRng()}}h=y.getRng();j=n.uniqueId();o=tinyMCE.activeEditor.selection.isCollapsed();x="overflow:hidden;line-height:0px";if(h.duplicate||h.item){if(!h.item){k=h.duplicate();try{h.collapse();h.pasteHTML('<span data-mce-type="bookmark" id="'+j+'_start" style="'+x+'">'+m+"</span>");if(!o){k.collapse(false);h.moveToElementText(k.parentElement());if(h.compareEndPoints("StartToEnd",k)===0){k.move("character",-1)}k.pasteHTML('<span data-mce-type="bookmark" id="'+j+'_end" style="'+x+'">'+m+"</span>")}}catch(r){return null}}else{p=h.item(0);i=p.nodeName;return{name:i,index:g(i,p)}}}else{p=y.getNode();i=p.nodeName;if(i=="IMG"){return{name:i,index:g(i,p)}}k=u(h.cloneRange());if(!o){k.collapse(false);k.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_end",style:x},m))}h=u(h);h.collapse(true);h.insertNode(n.create("span",{"data-mce-type":"bookmark",id:j+"_start",style:x},m))}y.moveToBookmark({id:j,keep:1});return{id:j}},moveToBookmark:function(o){var s=this,m=s.dom,j,i,g,r,k,u,p,q;function h(A){var t=o[A?"start":"end"],x,y,z,v;if(t){z=t[0];for(y=r,x=t.length-1;x>=1;x--){v=y.childNodes;if(t[x]>v.length-1){return}y=v[t[x]]}if(y.nodeType===3){z=Math.min(t[0],y.nodeValue.length)}if(y.nodeType===1){z=Math.min(t[0],y.childNodes.length)}if(A){g.setStart(y,z)}else{g.setEnd(y,z)}}return true}function l(B){var v=m.get(o.id+"_"+B),A,t,y,z,x=o.keep;if(v){A=v.parentNode;if(B=="start"){if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}k=u=A;p=q=t}else{if(!x){t=m.nodeIndex(v)}else{A=v.firstChild;t=1}u=A;q=t}if(!x){z=v.previousSibling;y=v.nextSibling;e(d.grep(v.childNodes),function(C){if(C.nodeType==3){C.nodeValue=C.nodeValue.replace(/\uFEFF/g,"")}});while(v=m.get(o.id+"_"+B)){m.remove(v,1)}if(z&&y&&z.nodeType==y.nodeType&&z.nodeType==3&&!d.isOpera){t=z.nodeValue.length;z.appendData(y.nodeValue);m.remove(y);if(B=="start"){k=u=z;p=q=t}else{u=z;q=t}}}}}function n(t){if(m.isBlock(t)&&!t.innerHTML&&!b){t.innerHTML='<br data-mce-bogus="1" />'}return t}if(o){if(o.start){g=m.createRng();r=m.getRoot();if(s.tridentSel){return s.tridentSel.moveToBookmark(o)}if(h(true)&&h()){s.setRng(g)}}else{if(o.id){l("start");l("end");if(k){g=m.createRng();g.setStart(n(k),p);g.setEnd(n(u),q);s.setRng(g)}}else{if(o.name){s.select(m.select(o.name)[o.index])}else{if(o.rng){s.setRng(o.rng)}}}}}},select:function(l,k){var j=this,m=j.dom,h=m.createRng(),g;function i(n,p){var o=new a(n,n);do{if(n.nodeType==3&&d.trim(n.nodeValue).length!==0){if(p){h.setStart(n,0)}else{h.setEnd(n,n.nodeValue.length)}return}if(n.nodeName=="BR"){if(p){h.setStartBefore(n)}else{h.setEndBefore(n)}return}}while(n=(p?o.next():o.prev()))}if(l){g=m.nodeIndex(l);h.setStart(l.parentNode,g);h.setEnd(l.parentNode,g+1);if(k){i(l,1);i(l)}j.setRng(h)}return l},isCollapsed:function(){var g=this,i=g.getRng(),h=g.getSel();if(!i||i.item){return false}if(i.compareEndPoints){return i.compareEndPoints("StartToEnd",i)===0}return !h||i.collapsed},collapse:function(g){var i=this,h=i.getRng(),j;if(h.item){j=h.item(0);h=i.win.document.body.createTextRange();h.moveToElementText(j)}h.collapse(!!g);i.setRng(h)},getSel:function(){var h=this,g=this.win;return g.getSelection?g.getSelection():g.document.selection},getRng:function(m){var h=this,j,g,l,k=h.win.document;if(m&&h.tridentSel){return h.tridentSel.getRangeAt(0)}try{if(j=h.getSel()){g=j.rangeCount>0?j.getRangeAt(0):(j.createRange?j.createRange():k.createRange())}}catch(i){}if(d.isIE&&g&&g.setStart&&k.selection.createRange().item){l=k.selection.createRange().item(0);g=k.createRange();g.setStartBefore(l);g.setEndAfter(l)}if(!g){g=k.createRange?k.createRange():k.body.createTextRange()}if(g.setStart&&g.startContainer.nodeType===9&&g.collapsed){l=h.dom.getRoot();g.setStart(l,0);g.setEnd(l,0)}if(h.selectedRange&&h.explicitRange){if(g.compareBoundaryPoints(g.START_TO_START,h.selectedRange)===0&&g.compareBoundaryPoints(g.END_TO_END,h.selectedRange)===0){g=h.explicitRange}else{h.selectedRange=null;h.explicitRange=null}}return g},setRng:function(k,g){var j,i=this;if(!i.tridentSel){j=i.getSel();if(j){i.explicitRange=k;try{j.removeAllRanges()}catch(h){}j.addRange(k);if(g===false&&j.extend){j.collapse(k.endContainer,k.endOffset);j.extend(k.startContainer,k.startOffset)}i.selectedRange=j.rangeCount>0?j.getRangeAt(0):null}}else{if(k.cloneRange){try{i.tridentSel.addRange(k);return}catch(h){}}try{k.select()}catch(h){}}},setNode:function(h){var g=this;g.setContent(g.dom.getOuterHTML(h));return h},getNode:function(){var i=this,h=i.getRng(),j=i.getSel(),m,l=h.startContainer,g=h.endContainer;function k(q,o){var p=q;while(q&&q.nodeType===3&&q.length===0){q=o?q.nextSibling:q.previousSibling}return q||p}if(!h){return i.dom.getRoot()}if(h.setStart){m=h.commonAncestorContainer;if(!h.collapsed){if(h.startContainer==h.endContainer){if(h.endOffset-h.startOffset<2){if(h.startContainer.hasChildNodes()){m=h.startContainer.childNodes[h.startOffset]}}}if(l.nodeType===3&&g.nodeType===3){if(l.length===h.startOffset){l=k(l.nextSibling,true)}else{l=l.parentNode}if(h.endOffset===0){g=k(g.previousSibling,false)}else{g=g.parentNode}if(l&&l===g){return l}}}if(m&&m.nodeType==3){return m.parentNode}return m}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(p,h){var o=this,k=o.dom,m,l,i,j=[];m=k.getParent(p||o.getStart(),k.isBlock);l=k.getParent(h||o.getEnd(),k.isBlock);if(m){j.push(m)}if(m&&l&&m!=l){i=m;var g=new a(m,k.getRoot());while((i=g.next())&&i!=l){if(k.isBlock(i)){j.push(i)}}}if(l&&m!=l){j.push(l)}return j},isForward:function(){var i=this.dom,g=this.getSel(),j,h;if(!g||g.anchorNode==null||g.focusNode==null){return true}j=i.createRng();j.setStart(g.anchorNode,g.anchorOffset);j.collapse(true);h=i.createRng();h.setStart(g.focusNode,g.focusOffset);h.collapse(true);return j.compareBoundaryPoints(j.START_TO_START,h)<=0},normalize:function(){var h=this,g,m,l,j,i;function k(p){var o,r,n,s=h.dom,u=s.getRoot(),q,t,v;function y(z,A){var B=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(z=B[A?"prev":"next"]()){if(z.nodeName==="BR"){return true}}}function x(B,z){var C,A;z=z||o;C=new a(z,s.getParent(z.parentNode,s.isBlock)||u);while(q=C[B?"prev":"next"]()){if(q.nodeType===3&&q.nodeValue.length>0){o=q;r=B?q.nodeValue.length:0;m=true;return}if(s.isBlock(q)||t[q.nodeName.toLowerCase()]){return}A=q}if(l&&A){o=A;m=true;r=0}}o=g[(p?"start":"end")+"Container"];r=g[(p?"start":"end")+"Offset"];t=s.schema.getNonEmptyElements();if(o.nodeType===9){o=s.getRoot();r=0}if(o===u){if(p){q=o.childNodes[r>0?r-1:0];if(q){v=q.nodeName.toLowerCase();if(t[q.nodeName]||q.nodeName=="TABLE"){return}}}if(o.hasChildNodes()){o=o.childNodes[Math.min(!p&&r>0?r-1:r,o.childNodes.length-1)];r=0;if(o.hasChildNodes()&&!/TABLE/.test(o.nodeName)){q=o;n=new a(o,u);do{if(q.nodeType===3&&q.nodeValue.length>0){r=p?0:q.nodeValue.length;o=q;m=true;break}if(t[q.nodeName.toLowerCase()]){r=s.nodeIndex(q);o=q.parentNode;if(q.nodeName=="IMG"&&!p){r++}m=true;break}}while(q=(p?n.next():n.prev()))}}}if(l){if(o.nodeType===3&&r===0){x(true)}if(o.nodeType===1){q=o.childNodes[r];if(q&&q.nodeName==="BR"&&!y(q)&&!y(q,true)){x(true,o.childNodes[r])}}}if(p&&!l&&o.nodeType===3&&r===o.nodeValue.length){x(false)}if(m){g["set"+(p?"Start":"End")](o,r)}}if(d.isIE){return}g=h.getRng();l=g.collapsed;k(true);if(!l){k()}if(m){if(l){g.collapse(true)}h.setRng(g,h.isForward())}},selectorChanged:function(g,j){var h=this,i;if(!h.selectorChangedData){h.selectorChangedData={};i={};h.editor.onNodeChange.addToTop(function(l,k,o){var p=h.dom,m=p.getParents(o,null,p.getRoot()),n={};e(h.selectorChangedData,function(r,q){e(m,function(s){if(p.is(s,q)){if(!i[q]){e(r,function(t){t(true,{node:s,selector:q,parents:m})});i[q]=r}n[q]=r;return false}})});e(i,function(r,q){if(!n[q]){delete i[q];e(r,function(s){s(false,{node:o,selector:q,parents:m})})}})})}if(!h.selectorChangedData[g]){h.selectorChangedData[g]=[]}h.selectorChangedData[g].push(j);return h},scrollIntoView:function(k){var j,h,g=this,i=g.dom;h=i.getViewPort(g.editor.getWin());j=i.getPos(k).y;if(j<h.y||j+25>h.y+h.h){g.editor.getWin().scrollTo(0,j<h.y?j:j-h.h+25)}},destroy:function(h){var g=this;g.win=null;if(!h){d.removeUnload(g.destroy)}},_fixIESelection:function(){var h=this.dom,n=h.doc,i=n.body,k,o,g;function j(p,s){var q=i.createTextRange();try{q.moveToPoint(p,s)}catch(r){q=null}return q}function m(q){var p;if(q.button){p=j(q.x,q.y);if(p){if(p.compareEndPoints("StartToStart",o)>0){p.setEndPoint("StartToStart",o)}else{p.setEndPoint("EndToEnd",o)}p.select()}}else{l()}}function l(){var p=n.selection.createRange();if(o&&!p.item&&p.compareEndPoints("StartToEnd",p)===0){o.select()}h.unbind(n,"mouseup",l);h.unbind(n,"mousemove",m);o=k=0}n.documentElement.unselectable=true;h.bind(n,["mousedown","contextmenu"],function(p){if(p.target.nodeName==="HTML"){if(k){l()}g=n.documentElement;if(g.scrollHeight>g.clientHeight){return}k=1;o=j(p.x,p.y);if(o){h.bind(n,"mouseup",l);h.bind(n,"mousemove",m);h.win.focus();o.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}i=i||a.DOM;f=f||new a.html.Schema(e);e.entity_encoding=e.entity_encoding||"named";e.remove_trailing_brs="remove_trailing_brs" in e?e.remove_trailing_brs:true;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.addAttributeFilter("data-mce-expando",function(j,l,k){var m=j.length;while(m--){j[m].attr(l,null)}});c.addNodeFilter("noscript",function(j){var k=j.length,l;while(k--){l=j[k].firstChild;if(l){l.value=a.html.Entities.decode(l.value)}}});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\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi,"").replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\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(a.trim(m.getInner?o.innerHTML:i.getOuterHTML(o)),m));if(!m.cleanup){m.content=m.content.replace(/\uFEFF/g,"")}if(!m.no_events){b.dispatch(self,m)}if(k){i.doc=k}m.node=null;return m.content},addRules:function(j){f.addValidElements(j)},setRules:function(j){f.setValidElements(j)}}}})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],e={},d=[],g=0,f;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=document.createElement("script");s.id=n;s.type="text/javascript";s.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==f){j.push(m);l[m]=c}if(q){if(!e[m]){e[m]=[]}e[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(e[r],function(s){s.func.call(s.scope)});e[r]=f}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);(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 q=this,n=e.root,m=e.items,o=e.enableUpDown,i=e.enableLeftRight||!e.enableUpDown,l=e.excludeFromTabOrder,k,h,p,d,g;f=f||b.DOM;k=function(r){g=r.target.id};h=function(r){f.setAttrib(r.target.id,"tabindex","-1")};d=function(r){var s=f.get(g);f.setAttrib(s,"tabindex","0");s.focus()};q.focus=function(){f.get(g).focus()};q.destroy=function(){c(m,function(s){var t=f.get(s.id);f.unbind(t,"focus",k);f.unbind(t,"blur",h)});var r=f.get(n);f.unbind(r,"focus",d);f.unbind(r,"keydown",p);m=f=n=q.focus=k=h=p=d=null;q.destroy=function(){}};q.moveFocus=function(v,s){var r=-1,u=q.controls,t;if(!g){return}c(m,function(y,x){if(y.id===g){r=x;return false}});r+=v;if(r<0){r=m.length-1}else{if(r>=m.length){r=0}}t=m[r];f.setAttrib(g,"tabindex","-1");f.setAttrib(t.id,"tabindex","0");f.get(t.id).focus();if(e.actOnFocus){e.onAction(t.id)}if(s){a.cancel(s)}};p=function(z){var v=37,u=39,y=38,A=40,r=27,t=14,s=13,x=32;switch(z.keyCode){case v:if(i){q.moveFocus(-1)}break;case u:if(i){q.moveFocus(1)}break;case y:if(o){q.moveFocus(-1)}break;case A:if(o){q.moveFocus(1)}break;case r:if(e.onCancel){e.onCancel();a.cancel(z)}break;case t:case s:case x:if(e.onAction){e.onAction(g);a.cancel(z)}break}};c(m,function(t,r){var s,u;if(!t.id){t.id=f.uniqueId("_mce_item_")}u=f.get(t.id);if(l){f.bind(u,"blur",h);s="-1"}else{s=(r===0?"0":"-1")}u.setAttribute("tabindex",s);f.bind(u,"focus",k)});if(m[0]){g=m[0].id}f.setAttrib(n,"tabindex","-1");var j=f.get(n);f.bind(j,"focus",d);f.bind(j,"keydown",p)}})})(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.offsetWidth,j.max_width):g.offsetWidth;k=j.max_height?Math.min(g.offsetHeight,j.max_height):g.offsetHeight;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 false}});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.get("menu_"+g.id);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){if(typeof h.settings.style=="function"){h.settings.style=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+='<span class="mceIcon '+e["class"]+'"><img class="mceIcon" src="'+e.image+'" alt="'+a.encode(e.title)+'" /></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")}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 d=this,e=d.settings,c;if(b.isIE&&d.editor){b.dom.Event.add(d.id,"mousedown",function(f){var g=d.editor.selection.getNode().nodeName;c=g==="IMG"?d.editor.selection.getBookmark():null})}b.dom.Event.add(d.id,"click",function(f){if(!d.isDisabled()){if(b.isIE&&d.editor&&c!==null){d.editor.selection.moveToBookmark(c)}return e.onclick.call(e.scope,f)}});b.dom.Event.add(d.id,"keyup",function(f){if(!d.isDisabled()&&f.keyCode==b.VK.SPACEBAR){return e.onclick.call(e.scope,f)}})}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(j,i,g){var h=this;h.parent(j,i,g);h.items=[];h.onChange=new a(h);h.onPostRender=new a(h);h.onAdd=new a(h);h.onRenderMenu=new e.util.Dispatcher(this);h.classPrefix="mceListBox";h.marked={}},select:function(h){var g=this,j,i;g.marked={};if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){var i=this,j,k,h;i.marked={};if(g!=i.selectedIndex){j=d.get(i.id+"_text");h=d.get(i.id+"_voiceDesc");k=i.items[g];if(k){i.selectedValue=k.value;i.selectedIndex=g;d.setHTML(j,d.encode(k.title));d.setHTML(h,i.settings.title+" - "+k.title);d.removeClass(j,"mceTitle");d.setAttrib(i.id,"aria-valuenow",k.title)}else{d.setHTML(j,d.encode(i.settings.title));d.setHTML(h,d.encode(i.settings.title));d.addClass(j,"mceTitle");i.selectedValue=i.selectedIndex=null;d.setAttrib(i.id,"aria-valuenow",i.settings.title)}j=0}},mark:function(g){this.marked[g]=true},add:function(j,g,i){var h=this;i=i||{};i=e.extend(i,{title:j,value:g});h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var j="",g=this,i=g.settings,k=g.classPrefix;j='<span role="listbox" aria-haspopup="true" aria-labelledby="'+g.id+'_voiceDesc" aria-describedby="'+g.id+'_voiceDesc"><table role="presentation" tabindex="0" id="'+g.id+'" cellpadding="0" cellspacing="0" class="'+k+" "+k+"Enabled"+(i["class"]?(" "+i["class"]):"")+'"><tbody><tr>';j+="<td>"+d.createHTML("span",{id:g.id+"_voiceDesc","class":"voiceLabel",style:"display:none;"},g.settings.title);j+=d.createHTML("a",{id:g.id+"_text",tabindex:-1,href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},d.encode(g.settings.title))+"</td>";j+="<td>"+d.createHTML("a",{id:g.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>";j+="</tr></tbody></table></span>";return j},showMenu:function(){var h=this,j,i=d.get(this.id),g;if(h.isDisabled()||h.items.length===0){return}if(h.menu&&h.menu.isMenuVisible){return h.hideMenu()}if(!h.isMenuRendered){h.renderMenu();h.isMenuRendered=true}j=d.getPos(i);g=h.menu;g.settings.offset_x=j.x;g.settings.offset_y=j.y;g.settings.keyboard_focus=!e.isOpera;f(h.items,function(k){if(g.items[k.id]){g.items[k.id].setSelected(0)}});f(h.items,function(k){if(g.items[k.id]&&h.marked[k.value]){g.items[k.id].setSelected(1)}if(k.value===h.selectedValue){g.items[k.id].setSelected(1)}});g.showMenu(0,i.clientHeight);b.add(d.doc,"mousedown",h.hideMenu,h);d.addClass(h.id,h.classPrefix+"Selected")},hideMenu:function(h){var g=this;if(g.menu&&g.menu.isMenuVisible){d.removeClass(g.id,g.classPrefix+"Selected");if(h&&h.type=="mousedown"&&(h.target.id==g.id+"_text"||h.target.id==g.id+"_open")){return}if(!h||!d.getParent(h.target,".mceMenu")){d.removeClass(g.id,g.classPrefix+"Selected");b.remove(d.doc,"mousedown",g.hideMenu,g);g.menu.hideMenu()}}},renderMenu:function(){var h=this,g;g=h.settings.control_manager.createDropMenu(h.id+"_menu",{menu_line:1,"class":h.classPrefix+"Menu mceNoIcons",max_width:250,max_height:150});g.onHideMenu.add(function(){h.hideMenu();h.focus()});g.add({title:h.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}});f(h.items,function(i){if(i.value===c){g.add({title:i.title,role:"option","class":"mceMenuItemTitle",onclick:function(){if(h.settings.onselect("")!==false){h.select("")}}})}else{i.id=d.uniqueId();i.role="option";i.onclick=function(){if(h.settings.onselect(i.value)!==false){h.select(i.value)}};g.add(i)}});h.onRenderMenu.dispatch(h,g);h.menu=g},postRender:function(){var g=this,h=g.classPrefix;b.add(g.id,"click",g.showMenu,g);b.add(g.id,"keydown",function(i){if(i.keyCode==32){g.showMenu(i);b.cancel(i)}});b.add(g.id,"focus",function(){if(!g._focused){g.keyDownHandler=b.add(g.id,"keydown",function(i){if(i.keyCode==40){g.showMenu();b.cancel(i)}});g.keyPressHandler=b.add(g.id,"keypress",function(j){var i;if(j.keyCode==13){i=g.selectedValue;g.selectedValue=null;b.cancel(j);g.settings.onselect(i)}})}g._focused=1});b.add(g.id,"blur",function(){b.remove(g.id,"keydown",g.keyDownHandler);b.remove(g.id,"keypress",g.keyPressHandler);g._focused=0});if(e.isIE6||!d.boxModel){b.add(g.id,"mouseover",function(){if(!d.hasClass(g.id,h+"Disabled")){d.addClass(g.id,h+"Hover")}});b.add(g.id,"mouseout",function(){if(!d.hasClass(g.id,h+"Disabled")){d.removeClass(g.id,h+"Hover")}})}g.onPostRender.dispatch(g,d.get(g.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(e){var d=e.DOM,b=e.dom.Event,f=e.each,a=e.util.Dispatcher,c;e.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(h,g){this.parent(h,g);this.classPrefix="mceNativeListBox"},setDisabled:function(g){d.get(this.id).disabled=g;this.setAriaProperty("disabled",g)},isDisabled:function(){return d.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==c){return g.selectByIndex(-1)}if(h&&typeof(h)=="function"){i=h}else{i=function(k){return k==h}}if(h!=g.selectedValue){f(g.items,function(l,k){if(i(l.value)){j=1;g.selectByIndex(k);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(g){d.get(this.id).selectedIndex=g+1;this.selectedValue=this.items[g]?this.items[g].value:null},add:function(k,h,g){var j,i=this;g=g||{};g.value=h;if(i.isRendered()){d.add(d.get(this.id),"option",g,k)}j={title:k,value:h,attribs:g};i.items.push(j);i.onAdd.dispatch(i,j)},getLength:function(){return this.items.length},renderHTML:function(){var i,g=this;i=d.createHTML("option",{value:""},"-- "+g.settings.title+" --");f(g.items,function(h){i+=d.createHTML("option",{value:h.value},h.title)});i=d.createHTML("select",{id:g.id,"class":"mceNativeListBox","aria-labelledby":g.id+"_aria"},i);i+=d.createHTML("span",{id:g.id+"_aria",style:"display: none"},g.settings.title);return i},postRender:function(){var h=this,i,j=true;h.rendered=true;function g(l){var k=h.items[l.target.selectedIndex-1];if(k&&(k=k.value)){h.onChange.dispatch(h,k);if(h.settings.onselect){h.settings.onselect(k)}}}b.add(h.id,"change",g);b.add(h.id,"keydown",function(l){var k;b.remove(h.id,"change",i);j=false;k=b.add(h.id,"blur",function(){if(j){return}j=true;b.add(h.id,"change",g);b.remove(h.id,"blur",k)});if(e.isWebKit&&(l.keyCode==37||l.keyCode==39)){return b.prevent(l)}if(l.keyCode==13||l.keyCode==32){g(l);return b.cancel(l)}});h.onPostRender.dispatch(h,d.get(h.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.firstChild.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.firstChild.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.keyboardNav=new d.ui.KeyboardNavigation({root:f.id+"_menu",items:c.select("a",f.id+"_menu"),onCancel:function(){f.hideMenu();f.focus()}});f.keyboardNav.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();f.keyboardNav.destroy()}},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(m){m=m.replace(/^#/,"");if(!k--){l=c.add(j,"tr");k=q.grid_width-1}g=c.add(l,"td");var i={href:"javascript:;",style:{backgroundColor:"#"+m},title:p.editor.getLang("colors."+m,m),"data-mce-color":"#"+m};if(!d.isIE){i.role="option"}g=c.add(g,"a",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="#"+m;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");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 false});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(){var f=this;f.parent();a.clear(f.id+"_menu");a.clear(f.id+"_more");c.remove(f.id+"_menu");if(f.keyboardNav){f.keyboardNav.destroy()}}})})(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(x){var v=this,o,n=j.ScriptLoader,u,l=[],r;function q(t){var s=t.id;if(!s){s=t.name;if(s&&!k.get(s)){s=t.name}else{s=k.uniqueId()}t.setAttribute("id",s)}return s}function m(z,A,t){var y=z[A];if(!y){return}if(j.is(y,"string")){t=y.replace(/\.\w+$/,"");t=t?j.resolve(t):0;y=j.resolve(y)}return y.apply(t||this,Array.prototype.slice.call(arguments,2))}function p(t,s){return s.constructor===RegExp?s.test(t.className):k.hasClass(t,s)}v.settings=x;i.bind(window,"ready",function(){var s,t;m(x,"onpageload");switch(x.mode){case"exact":s=x.elements||"";if(s.length>0){g(e(s),function(y){if(k.get(y)){r=new j.Editor(y,x);l.push(r);r.render(1)}else{g(document.forms,function(z){g(z.elements,function(A){if(A.name===y){y="mce_editor_"+c++;k.setAttrib(A,"id",y);r=new j.Editor(y,x);l.push(r);r.render(1)}})})}})}break;case"textareas":case"specific_textareas":g(k.select("textarea"),function(y){if(x.editor_deselector&&p(y,x.editor_deselector)){return}if(!x.editor_selector||p(y,x.editor_selector)){r=new j.Editor(q(y),x);l.push(r);r.render(1)}});break;default:if(x.types){g(x.types,function(y){g(k.select(y.selector),function(A){var z=new j.Editor(q(A),j.extend({},x,y));l.push(z);z.render(1)})})}else{if(x.selector){g(k.select(x.selector),function(z){var y=new j.Editor(q(z),x);l.push(y);y.render(1)})}}}if(x.oninit){s=t=0;g(l,function(y){t++;if(!y.initialized){y.onInit.add(function(){s++;if(s==t){m(x,"oninit")}})}else{s++}if(s==t){m(x,"oninit")}})}})},get:function(l){if(l===a){return this.editors}if(!this.editors.hasOwnProperty(l)){return a}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;function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}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){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(k){var l=k.DOM,j=k.dom.Event,f=k.extend,i=k.each,a=k.isGecko,b=k.isIE,e=k.isWebKit,d=k.is,h=k.ThemeManager,c=k.PluginManager,g=k.explode;k.create("tinymce.Editor",{Editor:function(p,o){var m=this,n=true;m.settings=o=f({id:p,language:"en",theme:"advanced",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:k.documentBaseURL,add_form_submit_trigger:n,submit_patch:n,add_unload_trigger:n,convert_urls:n,relative_urls:n,remove_script_host:n,table_inline_editing:false,object_resizing:n,accessibility_focus:n,doctype:k.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",visual:n,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:n,directionality:"ltr",forced_root_block:"p",hidden_input:n,padd_empty_editor:n,render_ui:n,indentation:"30px",fix_table_elements:n,inline_styles:n,convert_fonts_to_spans:n,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,section,article,hgroup,aside,figure,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist",validate:n,entity_encoding:"named",url_converter:m.convertURL,url_converter_scope:m,ie7_compat:n},o);m.id=m.editorId=p;m.isNotDirty=false;m.plugins={};m.documentBaseURI=new k.util.URI(o.document_base_url||k.documentBaseURL,{base_uri:tinyMCE.baseURI});m.baseURI=k.baseURI;m.contentCSS=[];m.contentStyles=[];m.setupEvents();m.execCommands={};m.queryStateCommands={};m.queryValueCommands={};m.execCallback("setup",m)},render:function(o){var p=this,q=p.settings,r=p.id,m=k.ScriptLoader;if(!j.domLoaded){j.add(window,"ready",function(){p.render()});return}tinyMCE.settings=q;if(!p.getElement()){return}if(k.isIDevice&&!k.isIOS5){return}if(!/TEXTAREA|INPUT/i.test(p.getElement().nodeName)&&q.hidden_input&&l.getParent(r,"form")){l.insertAfter(l.create("input",{type:"hidden",name:r}),r)}if(!q.content_editable){p.orgVisibility=p.getElement().style.visibility;p.getElement().style.visibility="hidden"}if(k.WindowManager){p.windowManager=new k.WindowManager(p)}if(q.encoding=="xml"){p.onGetContent.add(function(s,t){if(t.save){t.content=l.encode(t.content)}})}if(q.add_form_submit_trigger){p.onSubmit.addToTop(function(){if(p.initialized){p.save();p.isNotDirty=1}})}if(q.add_unload_trigger){p._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(p.initialized&&!p.destroyed&&!p.isHidden()){p.save({format:"raw",no_events:true})}})}k.addUnload(p.destroy,p);if(q.submit_patch){p.onBeforeRenderUI.add(function(){var s=p.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){p.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){k.triggerSave();p.isNotDirty=1;return p.formElement._mceOldSubmit(p.formElement)}}s=null})}function n(){if(q.language&&q.language_load!==false){m.add(k.baseURL+"/langs/"+q.language+".js")}if(q.theme&&typeof q.theme!="function"&&q.theme.charAt(0)!="-"&&!h.urls[q.theme]){h.load(q.theme,"themes/"+q.theme+"/editor_template"+k.suffix+".js")}i(g(q.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(v){var u={prefix:"plugins/",resource:v,suffix:"/editor_plugin"+k.suffix+".js"};v=c.createUrl(u,v);c.load(v.resource,v)})}else{if(t=="safari"){return}c.load(t,{prefix:"plugins/",resource:t,suffix:"/editor_plugin"+k.suffix+".js"})}}});m.loadQueue(function(){if(!p.removed){p.init()}})}n()},init:function(){var q,G=this,H=G.settings,D,y,z,C=G.getElement(),p,m,E,v,B,F,x,r=[];k.add(G);H.aria_label=H.aria_label||l.getAttrib(C,"aria-label",G.getLang("aria.rich_text_area"));if(H.theme){if(typeof H.theme!="function"){H.theme=H.theme.replace(/-/,"");p=h.get(H.theme);G.theme=new p();if(G.theme.init){G.theme.init(G,h.urls[H.theme]||k.documentBaseURL.replace(/\/$/,""))}}else{G.theme=H.theme}}function A(s){var t=c.get(s),o=c.urls[s]||k.documentBaseURL.replace(/\/$/,""),n;if(t&&k.inArray(r,s)===-1){i(c.dependencies(s),function(u){A(u)});n=new t(G,o);G.plugins[s]=n;if(n.init){n.init(G,o);r.push(s)}}}i(g(H.plugins.replace(/\-/g,"")),A);if(H.popup_css!==false){if(H.popup_css){H.popup_css=G.documentBaseURI.toAbsolute(H.popup_css)}else{H.popup_css=G.baseURI.toAbsolute("themes/"+H.theme+"/skins/"+H.skin+"/dialog.css")}}if(H.popup_css_add){H.popup_css+=","+G.documentBaseURI.toAbsolute(H.popup_css_add)}G.controlManager=new k.ControlManager(G);G.onBeforeRenderUI.dispatch(G,G.controlManager);if(H.render_ui&&G.theme){G.orgDisplay=C.style.display;if(typeof H.theme!="function"){D=H.width||C.style.width||C.offsetWidth;y=H.height||C.style.height||C.offsetHeight;z=H.min_height||100;F=/^[0-9\.]+(|px)$/i;if(F.test(""+D)){D=Math.max(parseInt(D,10)+(p.deltaWidth||0),100)}if(F.test(""+y)){y=Math.max(parseInt(y,10)+(p.deltaHeight||0),z)}p=G.theme.renderUI({targetNode:C,width:D,height:y,deltaWidth:H.delta_width,deltaHeight:H.delta_height});l.setStyles(p.sizeContainer||p.editorContainer,{width:D,height:y});y=(p.iframeHeight||y)+(typeof(y)=="number"?(p.deltaHeight||0):"");if(y<z){y=z}}else{p=H.theme(G,C);if(p.editorContainer.nodeType){p.editorContainer=p.editorContainer.id=p.editorContainer.id||G.id+"_parent"}if(p.iframeContainer.nodeType){p.iframeContainer=p.iframeContainer.id=p.iframeContainer.id||G.id+"_iframecontainer"}y=p.iframeHeight||C.offsetHeight;if(b){G.onInit.add(function(n){n.dom.bind(n.getBody(),"beforedeactivate keydown",function(){n.lastIERng=n.selection.getRng()})})}}G.editorContainer=p.editorContainer}if(H.content_css){i(g(H.content_css),function(n){G.contentCSS.push(G.documentBaseURI.toAbsolute(n))})}if(H.content_style){G.contentStyles.push(H.content_style)}if(H.content_editable){C=q=p=null;return G.initContentBody()}if(document.domain&&location.hostname!=document.domain){k.relaxedDomain=document.domain}G.iframeHTML=H.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(H.document_base_url!=k.documentBaseURL){G.iframeHTML+='<base href="'+G.documentBaseURI.getURI()+'" />'}if(k.isIE8){if(H.ie7_compat){G.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" />'}else{G.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=edge" />'}}G.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';for(x=0;x<G.contentCSS.length;x++){G.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+G.contentCSS[x]+'" />'}G.contentCSS=[];v=H.body_id||"tinymce";if(v.indexOf("=")!=-1){v=G.getParam("body_id","","hash");v=v[G.id]||v}B=H.body_class||"";if(B.indexOf("=")!=-1){B=G.getParam("body_class","","hash");B=B[G.id]||""}G.iframeHTML+='</head><body id="'+v+'" class="mceContentBody '+B+'" onload="window.parent.tinyMCE.get(\''+G.id+"').onLoad.dispatch();\"><br></body></html>";if(k.relaxedDomain&&(b||(k.isOpera&&parseFloat(opera.version())<11))){E='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+G.id+'");document.write(ed.iframeHTML);document.close();ed.initContentBody();})()'}q=l.add(p.iframeContainer,"iframe",{id:G.id+"_ifr",src:E||'javascript:""',frameBorder:"0",allowTransparency:"true",title:H.aria_label,style:{width:"100%",height:y,display:"block"}});G.contentAreaContainer=p.iframeContainer;if(p.editorContainer){l.get(p.editorContainer).style.display=G.orgDisplay}C.style.visibility=G.orgVisibility;l.get(G.id).style.display="none";l.setAttrib(G.id,"aria-hidden",true);if(!k.relaxedDomain||!E){G.initContentBody()}C=q=p=null},initContentBody:function(){var n=this,p=n.settings,q=l.get(n.id),r=n.getDoc(),o,m,s;if((!b||!k.relaxedDomain)&&!p.content_editable){r.open();r.write(n.iframeHTML);r.close();if(k.relaxedDomain){r.domain=k.relaxedDomain}}if(p.content_editable){l.addClass(q,"mceContentBody");n.contentDocument=r=p.content_document||document;n.contentWindow=p.content_window||window;n.bodyElement=q;p.content_document=p.content_window=null}m=n.getBody();m.disabled=true;if(!p.readonly){m.contentEditable=n.getParam("content_editable_state",true)}m.disabled=false;n.schema=new k.html.Schema(p);n.dom=new k.dom.DOMUtils(r,{keep_values:true,url_converter:n.convertURL,url_converter_scope:n,hex_colors:p.force_hex_style_colors,class_filter:p.class_filter,update_styles:true,root_element:p.content_editable?n.id:null,schema:n.schema});n.parser=new k.html.DomParser(p,n.schema);n.parser.addAttributeFilter("src,href,style",function(t,u){var v=t.length,y,A=n.dom,z,x;while(v--){y=t[v];z=y.attr(u);x="data-mce-"+u;if(!y.attributes.map[x]){if(u==="style"){y.attr(x,A.serializeStyle(A.parseStyle(z),y.name))}else{y.attr(x,n.convertURL(z,u,y.name))}}}});n.parser.addNodeFilter("script",function(t,u){var v=t.length,x;while(v--){x=t[v];x.attr("type","mce-"+(x.attr("type")||"text/javascript"))}});n.parser.addNodeFilter("#cdata",function(t,u){var v=t.length,x;while(v--){x=t[v];x.type=8;x.name="#comment";x.value="[CDATA["+x.value+"]]"}});n.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(u,v){var x=u.length,y,t=n.schema.getNonEmptyElements();while(x--){y=u[x];if(y.isEmpty(t)){y.empty().append(new k.html.Node("br",1)).shortEnded=true}}});n.serializer=new k.dom.Serializer(p,n.dom,n.schema);n.selection=new k.dom.Selection(n.dom,n.getWin(),n.serializer,n);n.formatter=new k.Formatter(n);n.undoManager=new k.UndoManager(n);n.forceBlocks=new k.ForceBlocks(n);n.enterKey=new k.EnterKey(n);n.editorCommands=new k.EditorCommands(n);n.onExecCommand.add(function(t,u){if(!/^(FontName|FontSize)$/.test(u)){n.nodeChanged()}});n.serializer.onPreProcess.add(function(t,u){return n.onPreProcess.dispatch(n,u,t)});n.serializer.onPostProcess.add(function(t,u){return n.onPostProcess.dispatch(n,u,t)});n.onPreInit.dispatch(n);if(!p.browser_spellcheck&&!p.gecko_spellcheck){r.body.spellcheck=false}if(!p.readonly){n.bindNativeEvents()}n.controlManager.onPostRender.dispatch(n,n.controlManager);n.onPostRender.dispatch(n);n.quirks=k.util.Quirks(n);if(p.directionality){m.dir=p.directionality}if(p.nowrap){m.style.whiteSpace="nowrap"}if(p.protect){n.onBeforeSetContent.add(function(t,u){i(p.protect,function(v){u.content=u.content.replace(v,function(x){return"<!--mce:protected "+escape(x)+"-->"})})})}n.onSetContent.add(function(){n.addVisual(n.getBody())});if(p.padd_empty_editor){n.onPostProcess.add(function(t,u){u.content=u.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}n.load({initial:true,format:"html"});n.startContent=n.getContent({format:"raw"});n.initialized=true;n.onInit.dispatch(n);n.execCallback("setupcontent_callback",n.id,m,r);n.execCallback("init_instance_callback",n);n.focus(true);n.nodeChanged({initial:true});if(n.contentStyles.length>0){s="";i(n.contentStyles,function(t){s+=t+"\r\n"});n.dom.addStyle(s)}i(n.contentCSS,function(t){n.dom.loadCSS(t)});if(p.auto_focus){setTimeout(function(){var t=k.get(p.auto_focus);t.selection.select(t.getBody(),1);t.selection.collapse(1);t.getBody().focus();t.getWin().focus()},100)}q=r=m=null},focus:function(p){var o,u=this,t=u.selection,q=u.settings.content_editable,n,r,s=u.getDoc(),m;if(!p){if(u.lastIERng){t.setRng(u.lastIERng)}n=t.getRng();if(n.item){r=n.item(0)}u._refreshContentEditable();if(!q){u.getWin().focus()}if(k.isGecko||q){m=u.getBody();if(m.setActive){m.setActive()}else{m.focus()}if(q){t.normalize()}}if(r&&r.ownerDocument==s){n=s.body.createControlRange();n.addElement(r);n.select()}}if(k.activeEditor!=u){if((o=k.activeEditor)!=null){o.onDeactivate.dispatch(o,u)}u.onActivate.dispatch(u,o)}k._setActive(u)},execCallback:function(q){var m=this,p=m.settings[q],o;if(!p){return}if(m.callbackLookup&&(o=m.callbackLookup[q])){p=o.func;o=o.scope}if(d(p,"string")){o=p.replace(/\.\w+$/,"");o=o?k.resolve(o):0;p=k.resolve(p);m.callbackLookup=m.callbackLookup||{};m.callbackLookup[q]={func:p,scope:o}}return p.apply(o||m,Array.prototype.slice.call(arguments,1))},translate:function(m){var o=this.settings.language||"en",n=k.i18n;if(!m){return""}return n[o+"."+m]||m.replace(/\{\#([^\}]+)\}/g,function(q,p){return n[o+"."+p]||"{#"+p+"}"})},getLang:function(o,m){return k.i18n[(this.settings.language||"en")+"."+o]||(d(m)?m:"{#"+o+"}")},getParam:function(t,q,m){var r=k.trim,p=d(this.settings[t])?this.settings[t]:q,s;if(m==="hash"){s={};if(d(p,"string")){i(p.indexOf("=")>0?p.split(/[;,](?![^=;,]*(?:[;,]|$))/):p.split(","),function(n){n=n.split("=");if(n.length>1){s[r(n[0])]=r(n[1])}else{s[r(n[0])]=r(n)}})}else{s=p}return s}return p},nodeChanged:function(q){var m=this,n=m.selection,p;if(m.initialized){q=q||{};p=n.getStart()||m.getBody();p=b&&p.ownerDocument!=m.getDoc()?m.getBody():p;q.parents=[];m.dom.getParent(p,function(o){if(o.nodeName=="BODY"){return true}q.parents.push(o)});m.onNodeChange.dispatch(m,q?q.controlManager||m.controlManager:m.controlManager,p,n.isCollapsed(),q)}},addButton:function(n,o){var m=this;m.buttons=m.buttons||{};m.buttons[n]=o},addCommand:function(m,o,n){this.execCommands[m]={func:o,scope:n||this}},addQueryStateHandler:function(m,o,n){this.queryStateCommands[m]={func:o,scope:n||this}},addQueryValueHandler:function(m,o,n){this.queryValueCommands[m]={func:o,scope:n||this}},addShortcut:function(o,q,m,p){var n=this,r;if(n.settings.custom_shortcuts===false){return false}n.shortcuts=n.shortcuts||{};if(d(m,"string")){r=m;m=function(){n.execCommand(r,false,null)}}if(d(m,"object")){r=m;m=function(){n.execCommand(r[0],r[1],r[2])}}i(g(o),function(s){var t={func:m,scope:p||this,desc:n.translate(q),alt:false,ctrl:false,shift:false};i(g(s,"+"),function(u){switch(u){case"alt":case"ctrl":case"shift":t[u]=true;break;default:t.charCode=u.charCodeAt(0);t.keyCode=u.toUpperCase().charCodeAt(0)}});n.shortcuts[(t.ctrl?"ctrl":"")+","+(t.alt?"alt":"")+","+(t.shift?"shift":"")+","+t.keyCode]=t});return true},execCommand:function(u,r,x,m){var p=this,q=0,v,n;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(u)&&(!m||!m.skip_focus)){p.focus()}m=f({},m);p.onBeforeExecCommand.dispatch(p,u,r,x,m);if(m.terminate){return false}if(p.execCallback("execcommand_callback",p.id,p.selection.getNode(),u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(v=p.execCommands[u]){n=v.func.call(v.scope,r,x);if(n!==true){p.onExecCommand.dispatch(p,u,r,x,m);return n}}i(p.plugins,function(o){if(o.execCommand&&o.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);q=1;return false}});if(q){return true}if(p.theme&&p.theme.execCommand&&p.theme.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}if(p.editorCommands.execCommand(u,r,x)){p.onExecCommand.dispatch(p,u,r,x,m);return true}p.getDoc().execCommand(u,r,x);p.onExecCommand.dispatch(p,u,r,x,m)},queryCommandState:function(q){var n=this,r,p;if(n._isHidden()){return}if(r=n.queryStateCommands[q]){p=r.func.call(r.scope);if(p!==true){return p}}r=n.editorCommands.queryCommandState(q);if(r!==-1){return r}try{return this.getDoc().queryCommandState(q)}catch(m){}},queryCommandValue:function(r){var n=this,q,p;if(n._isHidden()){return}if(q=n.queryValueCommands[r]){p=q.func.call(q.scope);if(p!==true){return p}}q=n.editorCommands.queryCommandValue(r);if(d(q)){return q}try{return this.getDoc().queryCommandValue(r)}catch(m){}},show:function(){var m=this;l.show(m.getContainer());l.hide(m.id);m.load()},hide:function(){var m=this,n=m.getDoc();if(b&&n){n.execCommand("SelectAll")}m.save();l.hide(m.getContainer());l.setStyle(m.id,"display",m.orgDisplay)},isHidden:function(){return !l.isHidden(this.id)},setProgressState:function(m,n,p){this.onSetProgressState.dispatch(this,m,n,p);return m},load:function(q){var m=this,p=m.getElement(),n;if(p){q=q||{};q.load=true;n=m.setContent(d(p.value)?p.value:p.innerHTML,q);q.element=p;if(!q.no_events){m.onLoadContent.dispatch(m,q)}q.element=p=null;return n}},save:function(r){var m=this,q=m.getElement(),n,p;if(!q||!m.initialized){return}r=r||{};r.save=true;r.element=q;n=r.content=m.getContent(r);if(!r.no_events){m.onSaveContent.dispatch(m,r)}n=r.content;if(!/TEXTAREA|INPUT/i.test(q.nodeName)){q.innerHTML=n;if(p=l.getParent(m.id,"form")){i(p.elements,function(o){if(o.name==m.id){o.value=n;return false}})}}else{q.value=n}r.element=q=null;return n},setContent:function(r,p){var o=this,n,m=o.getBody(),q;p=p||{};p.format=p.format||"html";p.set=true;p.content=r;if(!p.no_events){o.onBeforeSetContent.dispatch(o,p)}r=p.content;if(!k.isIE&&(r.length===0||/^\s+$/.test(r))){q=o.settings.forced_root_block;if(q){r="<"+q+'><br data-mce-bogus="1"></'+q+">"}else{r='<br data-mce-bogus="1">'}m.innerHTML=r;o.selection.select(m,true);o.selection.collapse(true);return}if(p.format!=="raw"){r=new k.html.Serializer({},o.schema).serialize(o.parser.parse(r))}p.content=k.trim(r);o.dom.setHTML(m,p.content);if(!p.no_events){o.onSetContent.dispatch(o,p)}if(!o.settings.content_editable||document.activeElement===o.getBody()){o.selection.normalize()}return p.content},getContent:function(o){var n=this,p,m=n.getBody();o=o||{};o.format=o.format||"html";o.get=true;o.getInner=true;if(!o.no_events){n.onBeforeGetContent.dispatch(n,o)}if(o.format=="raw"){p=m.innerHTML}else{if(o.format=="text"){p=m.innerText||m.textContent}else{p=n.serializer.serialize(m,o)}}if(o.format!="text"){o.content=k.trim(p)}else{o.content=p}if(!o.no_events){n.onGetContent.dispatch(n,o)}return o.content},isDirty:function(){var m=this;return k.trim(m.startContent)!=k.trim(m.getContent({format:"raw",no_events:1}))&&!m.isNotDirty},getContainer:function(){var m=this;if(!m.container){m.container=l.get(m.editorContainer||m.id+"_parent")}return m.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return l.get(this.settings.content_element||this.id)},getWin:function(){var m=this,n;if(!m.contentWindow){n=l.get(m.id+"_ifr");if(n){m.contentWindow=n.contentWindow}}return m.contentWindow},getDoc:function(){var m=this,n;if(!m.contentDocument){n=m.getWin();if(n){m.contentDocument=n.document}}return m.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(o,n,q){var m=this,p=m.settings;if(p.urlconverter_callback){return m.execCallback("urlconverter_callback",o,q,true,n)}if(!p.convert_urls||(q&&q.nodeName=="LINK")||o.indexOf("file:")===0){return o}if(p.relative_urls){return m.documentBaseURI.toRelative(o)}o=m.documentBaseURI.toAbsolute(o,p.remove_script_host);return o},addVisual:function(q){var n=this,o=n.settings,p=n.dom,m;q=q||n.getBody();if(!d(n.hasVisual)){n.hasVisual=o.visual}i(p.select("table,a",q),function(s){var r;switch(s.nodeName){case"TABLE":m=o.visual_table_class||"mceItemTable";r=p.getAttrib(s,"border");if(!r||r=="0"){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}return;case"A":if(!p.getAttrib(s,"href",false)){r=p.getAttrib(s,"name")||s.id;m="mceItemAnchor";if(r){if(n.hasVisual){p.addClass(s,m)}else{p.removeClass(s,m)}}}return}});n.onVisualAid.dispatch(n,q,n.hasVisual)},remove:function(){var m=this,o=m.getContainer(),n=m.getDoc();if(!m.removed){m.removed=1;if(b&&n){n.execCommand("SelectAll")}m.save();l.setStyle(m.id,"display",m.orgDisplay);if(!m.settings.content_editable){j.unbind(m.getWin());j.unbind(m.getDoc())}j.unbind(m.getBody());j.clear(o);m.execCallback("remove_instance_callback",m);m.onRemove.dispatch(m);m.onExecCommand.listeners=[];k.remove(m);l.remove(o)}},destroy:function(n){var m=this;if(m.destroyed){return}if(a){j.unbind(m.getDoc());j.unbind(m.getWin());j.unbind(m.getBody())}if(!n){k.removeUnload(m.destroy);tinyMCE.onBeforeUnload.remove(m._beforeUnload);if(m.theme&&m.theme.destroy){m.theme.destroy()}m.controlManager.destroy();m.selection.destroy();m.dom.destroy()}if(m.formElement){m.formElement.submit=m.formElement._mceOldSubmit;m.formElement._mceOldSubmit=null}m.contentAreaContainer=m.formElement=m.container=m.settings.content_element=m.bodyElement=m.contentDocument=m.contentWindow=null;if(m.selection){m.selection=m.selection.win=m.selection.dom=m.selection.dom.doc=null}m.destroyed=1},_refreshContentEditable:function(){var n=this,m,o;if(n._isHidden()){m=n.getBody();o=m.parentNode;o.removeChild(m);o.appendChild(m);m.focus()}},_isHidden:function(){var m;if(!a){return 0}m=this.selection.getSel();return(!m||!m.rangeCount||m.rangeCount===0)}})})(tinymce);(function(a){var b=a.each;a.Editor.prototype.setupEvents=function(){var c=this,d=c.settings;b(["onPreInit","onBeforeRenderUI","onPostRender","onLoad","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","onSetAttrib"],function(e){c[e]=new a.util.Dispatcher(c)});if(d.cleanup_callback){c.onBeforeSetContent.add(function(e,f){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)});c.onPreProcess.add(function(e,f){if(f.set){e.execCallback("cleanup_callback","insert_to_editor_dom",f.node,f)}if(f.get){e.execCallback("cleanup_callback","get_from_editor_dom",f.node,f)}});c.onPostProcess.add(function(e,f){if(f.set){f.content=e.execCallback("cleanup_callback","insert_to_editor",f.content,f)}if(f.get){f.content=e.execCallback("cleanup_callback","get_from_editor",f.content,f)}})}if(d.save_callback){c.onGetContent.add(function(e,f){if(f.save){f.content=e.execCallback("save_callback",e.id,f.content,e.getBody())}})}if(d.handle_event_callback){c.onEvent.add(function(f,g,h){if(c.execCallback("handle_event_callback",g,f,h)===false){g.preventDefault();g.stopPropagation()}})}if(d.handle_node_change_callback){c.onNodeChange.add(function(f,e,g){f.execCallback("handle_node_change_callback",f.id,g,-1,-1,true,f.selection.isCollapsed())})}if(d.save_callback){c.onSaveContent.add(function(e,g){var f=e.execCallback("save_callback",e.id,g.content,e.getBody());if(f){g.content=f}})}if(d.onchange_callback){c.onChange.add(function(f,e){f.execCallback("onchange_callback",f,e)})}};a.Editor.prototype.bindNativeEvents=function(){var l=this,f,d=l.settings,e=l.dom,h;h={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function c(i,m){var n=i.type;if(l.removed){return}if(l.onEvent.dispatch(l,i,m)!==false){l[h[i.fakeType||i.type]].dispatch(l,i,m)}}function j(i){l.focus(true)}function k(i,m){if(m.keyCode!=65||!a.VK.metaKeyPressed(m)){l.selection.normalize()}l.nodeChanged()}b(h,function(m,n){var i=d.content_editable?l.getBody():l.getDoc();switch(n){case"contextmenu":e.bind(i,n,c);break;case"paste":e.bind(l.getBody(),n,c);break;case"submit":case"reset":e.bind(l.getElement().form||a.DOM.getParent(l.id,"form"),n,c);break;default:e.bind(i,n,c)}});e.bind(d.content_editable?l.getBody():(a.isGecko?l.getDoc():l.getWin()),"focus",function(i){l.focus(true)});if(d.content_editable&&a.isOpera){e.bind(l.getBody(),"click",j);e.bind(l.getBody(),"keydown",j)}l.onMouseUp.add(k);l.onKeyUp.add(function(i,n){var m=n.keyCode;if((m>=33&&m<=36)||(m>=37&&m<=40)||m==13||m==45||m==46||m==8||(a.isMac&&(m==91||m==93))||n.ctrlKey){k(i,n)}});l.onReset.add(function(){l.setContent(l.startContent,{format:"raw"})});function g(m,i){if(m.altKey||m.ctrlKey||m.metaKey){b(l.shortcuts,function(n){var o=a.isMac?m.metaKey:m.ctrlKey;if(n.ctrl!=o||n.alt!=m.altKey||n.shift!=m.shiftKey){return}if(m.keyCode==n.keyCode||(m.charCode&&m.charCode==n.charCode)){m.preventDefault();if(i){n.func.call(n.scope)}return true}})}}l.onKeyUp.add(function(i,m){g(m)});l.onKeyPress.add(function(i,m){g(m)});l.onKeyDown.add(function(i,m){g(m,true)});if(a.isOpera){l.onClick.add(function(i,m){m.preventDefault()})}}})(tinymce);(function(d){var e=d.each,b,a=true,c=false;d.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 c}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 c}function u(v,x){x=x||"exec";e(v,function(z,y){e(y.toLowerCase().split(","),function(A){j[x][A]=z})})}d.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===b){x=c}if(v===b){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}:b)}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(d.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(c)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);e("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=d.explode(k.font_size_style_values);v=d.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 c}},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 d.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=p.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=d.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}))},mceToggleFormat:function(y,x,v){s(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")){if(!k.forced_root_block&&!m.getParent(p.getNode(),m.isBlock)){q.apply("div")}e(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(d.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();if(p.getRng().setStart){v.setStart(x,0);v.setEnd(x,x.childNodes.length);p.setRng(v)}else{f("SelectAll")}}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(z){var x="align"+z.substring(7);var v=p.isCollapsed()?[m.getParent(p.getNode(),m.isBlock)]:p.getSelectedBlocks();var y=d.map(v,function(A){return !!q.matchNode(A,x)});return d.inArray(y,a)!==-1},"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(x){var v=m.getParent(p.getNode(),"ul,ol");return v&&(x==="insertunorderedlist"&&v.tagName==="UL"||x==="insertorderedlist"&&v.tagName==="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");u({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(h){var l,i=0,e=[],g,k,j,f;function c(){return b.trim(h.getContent({format:"raw",no_events:1}).replace(/<span[^>]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g,""))}function d(){l.typing=false;l.add()}onBeforeAdd=new a(l);k=new a(l);j=new a(l);f=new a(l);k.add(function(m,n){if(m.hasUndo()){return h.onChange.dispatch(h,n,m)}});j.add(function(m,n){return h.onUndo.dispatch(h,n,m)});f.add(function(m,n){return h.onRedo.dispatch(h,n,m)});h.onInit.add(function(){l.add()});h.onBeforeExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.beforeChange()}});h.onExecCommand.add(function(m,p,o,q,n){if(p!="Undo"&&p!="Redo"&&p!="mceRepaint"&&(!n||!n.skip_undo)){l.add()}});h.onSaveContent.add(d);h.dom.bind(h.dom.getRoot(),"dragend",d);h.dom.bind(h.getBody(),"focusout",function(m){if(!h.removed&&l.typing){d()}});h.onKeyUp.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45||n==13||o.ctrlKey){d()}});h.onKeyDown.add(function(m,o){var n=o.keyCode;if((n>=33&&n<=36)||(n>=37&&n<=40)||n==45){if(l.typing){d()}return}if((n<16||n>20)&&n!=224&&n!=91&&!l.typing){l.beforeChange();l.typing=true;l.add()}});h.onMouseDown.add(function(m,n){if(l.typing){d()}});h.addShortcut("ctrl+z","undo_desc","Undo");h.addShortcut("ctrl+y","redo_desc","Redo");l={data:e,typing:false,onBeforeAdd:onBeforeAdd,onAdd:k,onUndo:j,onRedo:f,beforeChange:function(){g=h.selection.getBookmark(2,true)},add:function(p){var m,n=h.settings,o;p=p||{};p.content=c();l.onBeforeAdd.dispatch(l,p);o=e[i];if(o&&o.content==p.content){return null}if(e[i]){e[i].beforeBookmark=g}if(n.custom_undo_redo_levels){if(e.length>n.custom_undo_redo_levels){for(m=0;m<e.length-1;m++){e[m]=e[m+1]}e.length--;i=e.length}}p.bookmark=h.selection.getBookmark(2,true);if(i<e.length-1){e.length=i+1}e.push(p);i=e.length-1;l.onAdd.dispatch(l,p);h.isNotDirty=0;return p},undo:function(){var n,m;if(l.typing){l.add();l.typing=false}if(i>0){n=e[--i];h.setContent(n.content,{format:"raw"});h.selection.moveToBookmark(n.beforeBookmark);l.onUndo.dispatch(l,n)}return n},redo:function(){var m;if(i<e.length-1){m=e[++i];h.setContent(m.content,{format:"raw"});h.selection.moveToBookmark(m.bookmark);l.onRedo.dispatch(l,m)}return m},clear:function(){e=[];i=0;l.typing=false},hasUndo:function(){return i>0||this.typing},hasRedo:function(){return i<e.length-1&&!this.typing}};return l}})(tinymce);tinymce.ForceBlocks=function(c){var b=c.settings,e=c.dom,a=c.selection,d=c.schema.getBlockElements();function f(){var j=a.getStart(),h=c.getBody(),g,k,o,s,q,i,l,m=-16777215,p,r;if(!j||j.nodeType!==1||!b.forced_root_block){return}while(j&&j!=h){if(d[j.nodeName]){return}j=j.parentNode}g=a.getRng();if(g.setStart){k=g.startContainer;o=g.startOffset;s=g.endContainer;q=g.endOffset}else{if(g.item){j=g.item(0);g=c.getDoc().body.createTextRange();g.moveToElementText(j)}r=g.parentElement().ownerDocument===c.getDoc();tmpRng=g.duplicate();tmpRng.collapse(true);o=tmpRng.move("character",m)*-1;if(!tmpRng.collapsed){tmpRng=g.duplicate();tmpRng.collapse(false);q=(tmpRng.move("character",m)*-1)-o}}j=h.firstChild;while(j){if(j.nodeType===3||(j.nodeType==1&&!d[j.nodeName])){if(j.nodeType===3&&j.nodeValue.length==0){l=j;j=j.nextSibling;e.remove(l);continue}if(!i){i=e.create(b.forced_root_block);j.parentNode.insertBefore(i,j);p=true}l=j;j=j.nextSibling;i.appendChild(l)}else{i=null;j=j.nextSibling}}if(p){if(g.setStart){g.setStart(k,o);g.setEnd(s,q);a.setRng(g)}else{if(r){try{g=c.getDoc().body.createTextRange();g.moveToElementText(h);g.collapse(true);g.moveStart("character",o);if(q>0){g.moveEnd("character",q)}g.select()}catch(n){}}}c.nodeChanged()}}if(b.forced_root_block){c.onKeyUp.add(f);c.onNodeChange.add(f)}};(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(j){var o,k,g,h=this,m=h.editor,n,f;if(!h.controlFactories){h.controlFactories=[];d(m.plugins,function(i){if(i.createControl){h.controlFactories.push(i)}})}n=h.controlFactories;for(k=0,g=n.length;k<g;k++){o=n[k].createControl(j,h);if(o){return h.add(o)}}if(j==="|"||j==="separator"){return h.createSeparator()}if(m.buttons&&(o=m.buttons[j])){return h.createButton(j,o)}return h.add(o)},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)}n["class"]+=i.settings.directionality=="rtl"?" mceRtl":"";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(aa){var Q={},T=a.each,c=aa.dom,r=aa.selection,t=a.dom.TreeWalker,N=new a.dom.RangeUtils(c),d=aa.schema.isValidChild,A=a.isArray,H=c.isBlock,m=aa.settings.forced_root_block,s=c.nodeIndex,G="\uFEFF",e=/^(src|href|style)$/,X=false,C=true,P,D,x=c.getContentEditable;function I(ab){return !!aa.schema.getTextBlocks()[ab.toLowerCase()]}function n(ac,ab){return c.getParents(ac,ab,c.getRoot())}function b(ab){return ab.nodeType===1&&ab.id==="_mce_caret"}function j(){l({alignleft:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"},defaultBlock:"div"},{selector:"img,table",collapsed:false,styles:{"float":"left"}}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"},defaultBlock:"div"},{selector:"img",collapsed:false,styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",collapsed:false,styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"right"},defaultBlock:"div"},{selector:"img,table",collapsed:false,styles:{"float":"right"}}],alignfull:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"},defaultBlock:"div"}],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(ab){return true},onformat:function(ad,ab,ac){T(ac,function(af,ae){c.setAttrib(ad,ae,af)})}},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}]});T("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(ab){l(ab,{block:ab,remove:"all"})});l(aa.settings.formats)}function W(){aa.addShortcut("ctrl+b","bold_desc","Bold");aa.addShortcut("ctrl+i","italic_desc","Italic");aa.addShortcut("ctrl+u","underline_desc","Underline");for(var ab=1;ab<=6;ab++){aa.addShortcut("ctrl+"+ab,"",["FormatBlock",false,"h"+ab])}aa.addShortcut("ctrl+7","",["FormatBlock",false,"p"]);aa.addShortcut("ctrl+8","",["FormatBlock",false,"div"]);aa.addShortcut("ctrl+9","",["FormatBlock",false,"address"])}function V(ab){return ab?Q[ab]:Q}function l(ab,ac){if(ab){if(typeof(ab)!=="string"){T(ab,function(ae,ad){l(ad,ae)})}else{ac=ac.length?ac:[ac];T(ac,function(ad){if(ad.deep===D){ad.deep=!ad.selector}if(ad.split===D){ad.split=!ad.selector||ad.inline}if(ad.remove===D&&ad.selector&&!ad.inline){ad.remove="none"}if(ad.selector&&ad.inline){ad.mixed=true;ad.block_expand=true}if(typeof(ad.classes)==="string"){ad.classes=ad.classes.split(/\s+/)}});Q[ab]=ac}}}var i=function(ac){var ab;aa.dom.getParent(ac,function(ad){ab=aa.dom.getStyle(ad,"text-decoration");return ab&&ab!=="none"});return ab};var L=function(ab){var ac;if(ab.nodeType===1&&ab.parentNode&&ab.parentNode.nodeType===1){ac=i(ab.parentNode);if(aa.dom.getStyle(ab,"color")&&ac){aa.dom.setStyle(ab,"text-decoration",ac)}else{if(aa.dom.getStyle(ab,"textdecoration")===ac){aa.dom.setStyle(ab,"text-decoration",null)}}}};function Y(ae,al,ag){var ah=V(ae),am=ah[0],ak,ac,aj,ai=r.isCollapsed();function ab(aq,ap){ap=ap||am;if(aq){if(ap.onformat){ap.onformat(aq,ap,al,ag)}T(ap.styles,function(at,ar){c.setStyle(aq,ar,q(at,al))});T(ap.attributes,function(at,ar){c.setAttrib(aq,ar,q(at,al))});T(ap.classes,function(ar){ar=q(ar,al);if(!c.hasClass(aq,ar)){c.addClass(aq,ar)}})}}function af(){function ar(ay,aw){var ax=new t(aw);for(ag=ax.current();ag;ag=ax.prev()){if(ag.childNodes.length>1||ag==ay||ag.tagName=="BR"){return ag}}}var aq=aa.selection.getRng();var av=aq.startContainer;var ap=aq.endContainer;if(av!=ap&&aq.endOffset===0){var au=ar(av,ap);var at=au.nodeType==3?au.length:au.childNodes.length;aq.setEnd(au,at)}return aq}function ad(at,ay,aw,av,aq){var ap=[],ar=-1,ax,aA=-1,au=-1,az;T(at.childNodes,function(aC,aB){if(aC.nodeName==="UL"||aC.nodeName==="OL"){ar=aB;ax=aC;return false}});T(at.childNodes,function(aC,aB){if(aC.nodeName==="SPAN"&&c.getAttrib(aC,"data-mce-type")=="bookmark"){if(aC.id==ay.id+"_start"){aA=aB}else{if(aC.id==ay.id+"_end"){au=aB}}}});if(ar<=0||(aA<ar&&au>ar)){T(a.grep(at.childNodes),aq);return 0}else{az=c.clone(aw,X);T(a.grep(at.childNodes),function(aC,aB){if((aA<ar&&aB<ar)||(aA>ar&&aB>ar)){ap.push(aC);aC.parentNode.removeChild(aC)}});if(aA<ar){at.insertBefore(az,ax)}else{if(aA>ar){at.insertBefore(az,ax.nextSibling)}}av.push(az);T(ap,function(aB){az.appendChild(aB)});return az}}function an(aq,at,aw){var ap=[],av,ar,au=true;av=am.inline||am.block;ar=c.create(av);ab(ar);N.walk(aq,function(ax){var ay;function az(aA){var aF,aD,aB,aC,aE;aE=au;aF=aA.nodeName.toLowerCase();aD=aA.parentNode.nodeName.toLowerCase();if(aA.nodeType===1&&x(aA)){aE=au;au=x(aA)==="true";aC=true}if(g(aF,"br")){ay=0;if(am.block){c.remove(aA)}return}if(am.wrapper&&y(aA,ae,al)){ay=0;return}if(au&&!aC&&am.block&&!am.wrapper&&I(aF)){aA=c.rename(aA,av);ab(aA);ap.push(aA);ay=0;return}if(am.selector){T(ah,function(aG){if("collapsed" in aG&&aG.collapsed!==ai){return}if(c.is(aA,aG.selector)&&!b(aA)){ab(aA,aG);aB=true}});if(!am.inline||aB){ay=0;return}}if(au&&!aC&&d(av,aF)&&d(aD,av)&&!(!aw&&aA.nodeType===3&&aA.nodeValue.length===1&&aA.nodeValue.charCodeAt(0)===65279)&&!b(aA)){if(!ay){ay=c.clone(ar,X);aA.parentNode.insertBefore(ay,aA);ap.push(ay)}ay.appendChild(aA)}else{if(aF=="li"&&at){ay=ad(aA,at,ar,ap,az)}else{ay=0;T(a.grep(aA.childNodes),az);if(aC){au=aE}ay=0}}}T(ax,az)});if(am.wrap_links===false){T(ap,function(ax){function ay(aC){var aB,aA,az;if(aC.nodeName==="A"){aA=c.clone(ar,X);ap.push(aA);az=a.grep(aC.childNodes);for(aB=0;aB<az.length;aB++){aA.appendChild(az[aB])}aC.appendChild(aA)}T(a.grep(aC.childNodes),ay)}ay(ax)})}T(ap,function(az){var ax;function aA(aC){var aB=0;T(aC.childNodes,function(aD){if(!f(aD)&&!K(aD)){aB++}});return aB}function ay(aB){var aD,aC;T(aB.childNodes,function(aE){if(aE.nodeType==1&&!K(aE)&&!b(aE)){aD=aE;return X}});if(aD&&h(aD,am)){aC=c.clone(aD,X);ab(aC);c.replace(aC,aB,C);c.remove(aD,1)}return aC||aB}ax=aA(az);if((ap.length>1||!H(az))&&ax===0){c.remove(az,1);return}if(am.inline||am.wrapper){if(!am.exact&&ax===1){az=ay(az)}T(ah,function(aB){T(c.select(aB.inline,az),function(aD){var aC;if(aB.wrap_links===false){aC=aD.parentNode;do{if(aC.nodeName==="A"){return}}while(aC=aC.parentNode)}Z(aB,al,aD,aB.exact?aD:null)})});if(y(az.parentNode,ae,al)){c.remove(az,1);az=0;return C}if(am.merge_with_parents){c.getParent(az.parentNode,function(aB){if(y(aB,ae,al)){c.remove(az,1);az=0;return C}})}if(az&&am.merge_siblings!==false){az=u(E(az),az);az=u(az,E(az,C))}}})}if(am){if(ag){if(ag.nodeType){ac=c.createRng();ac.setStartBefore(ag);ac.setEndAfter(ag);an(p(ac,ah),null,true)}else{an(ag,null,true)}}else{if(!ai||!am.inline||c.select("td.mceSelected,th.mceSelected").length){var ao=aa.selection.getNode();if(!m&&ah[0].defaultBlock&&!c.getParent(ao,c.isBlock)){Y(ah[0].defaultBlock)}aa.selection.setRng(af());ak=r.getBookmark();an(p(r.getRng(C),ah),ak);if(am.styles&&(am.styles.color||am.styles.textDecoration)){a.walk(ao,L,"childNodes");L(ao)}r.moveToBookmark(ak);R(r.getRng(C));aa.nodeChanged()}else{U("apply",ae,al)}}}}function B(ad,am,af){var ag=V(ad),ao=ag[0],ak,aj,ac,al=true;function ae(av){var au,at,ar,aq,ax,aw;if(av.nodeType===3){return}if(av.nodeType===1&&x(av)){ax=al;al=x(av)==="true";aw=true}au=a.grep(av.childNodes);if(al&&!aw){for(at=0,ar=ag.length;at<ar;at++){if(Z(ag[at],am,av,av)){break}}}if(ao.deep){if(au.length){for(at=0,ar=au.length;at<ar;at++){ae(au[at])}if(aw){al=ax}}}}function ah(aq){var ar;T(n(aq.parentNode).reverse(),function(at){var au;if(!ar&&at.id!="_start"&&at.id!="_end"){au=y(at,ad,am);if(au&&au.split!==false){ar=at}}});return ar}function ab(au,aq,aw,az){var aA,ay,ax,at,av,ar;if(au){ar=au.parentNode;for(aA=aq.parentNode;aA&&aA!=ar;aA=aA.parentNode){ay=c.clone(aA,X);for(av=0;av<ag.length;av++){if(Z(ag[av],am,ay,ay)){ay=0;break}}if(ay){if(ax){ay.appendChild(ax)}if(!at){at=ay}ax=ay}}if(az&&(!ao.mixed||!H(au))){aq=c.split(au,aq)}if(ax){aw.parentNode.insertBefore(ax,aw);at.appendChild(aw)}}return aq}function an(aq){return ab(ah(aq),aq,aq,true)}function ai(at){var ar=c.get(at?"_start":"_end"),aq=ar[at?"firstChild":"lastChild"];if(K(aq)){aq=aq[at?"firstChild":"lastChild"]}c.remove(ar,true);return aq}function ap(aq){var at,au,ar;aq=p(aq,ag,C);if(ao.split){at=M(aq,C);au=M(aq);if(at!=au){if(/^(TR|TD)$/.test(at.nodeName)&&at.firstChild){at=(at.nodeName=="TD"?at.firstChild:at.firstChild.firstChild)||at}at=S(at,"span",{id:"_start","data-mce-type":"bookmark"});au=S(au,"span",{id:"_end","data-mce-type":"bookmark"});an(at);an(au);at=ai(C);au=ai()}else{at=au=an(at)}aq.startContainer=at.parentNode;aq.startOffset=s(at);aq.endContainer=au.parentNode;aq.endOffset=s(au)+1}N.walk(aq,function(av){T(av,function(aw){ae(aw);if(aw.nodeType===1&&aa.dom.getStyle(aw,"text-decoration")==="underline"&&aw.parentNode&&i(aw.parentNode)==="underline"){Z({deep:false,exact:true,inline:"span",styles:{textDecoration:"underline"}},null,aw)}})})}if(af){if(af.nodeType){ac=c.createRng();ac.setStartBefore(af);ac.setEndAfter(af);ap(ac)}else{ap(af)}return}if(!r.isCollapsed()||!ao.inline||c.select("td.mceSelected,th.mceSelected").length){ak=r.getBookmark();ap(r.getRng(C));r.moveToBookmark(ak);if(ao.inline&&k(ad,am,r.getStart())){R(r.getRng(true))}aa.nodeChanged()}else{U("remove",ad,am)}}function F(ac,ae,ad){var ab=V(ac);if(k(ac,ae,ad)&&(!("toggle" in ab[0])||ab[0].toggle)){B(ac,ae,ad)}else{Y(ac,ae,ad)}}function y(ac,ab,ah,af){var ad=V(ab),ai,ag,ae;function aj(an,ap,aq){var am,ao,ak=ap[aq],al;if(ap.onmatch){return ap.onmatch(an,ap,aq)}if(ak){if(ak.length===D){for(am in ak){if(ak.hasOwnProperty(am)){if(aq==="attributes"){ao=c.getAttrib(an,am)}else{ao=O(an,am)}if(af&&!ao&&!ap.exact){return}if((!af||ap.exact)&&!g(ao,q(ak[am],ah))){return}}}}else{for(al=0;al<ak.length;al++){if(aq==="attributes"?c.getAttrib(an,ak[al]):O(an,ak[al])){return ap}}}}return ap}if(ad&&ac){for(ag=0;ag<ad.length;ag++){ai=ad[ag];if(h(ac,ai)&&aj(ac,ai,"attributes")&&aj(ac,ai,"styles")){if(ae=ai.classes){for(ag=0;ag<ae.length;ag++){if(!c.hasClass(ac,ae[ag])){return}}}return ai}}}}function k(ad,af,ae){var ac;function ab(ag){ag=c.getParent(ag,function(ah){return !!y(ah,ad,af,true)});return y(ag,ad,af)}if(ae){return ab(ae)}ae=r.getNode();if(ab(ae)){return C}ac=r.getStart();if(ac!=ae){if(ab(ac)){return C}}return X}function v(ai,ah){var af,ag=[],ae={},ad,ac,ab;af=r.getStart();c.getParent(af,function(al){var ak,aj;for(ak=0;ak<ai.length;ak++){aj=ai[ak];if(!ae[aj]&&y(al,aj,ah)){ae[aj]=true;ag.push(aj)}}},c.getRoot());return ag}function z(af){var ah=V(af),ae,ad,ag,ac,ab;if(ah){ae=r.getStart();ad=n(ae);for(ac=ah.length-1;ac>=0;ac--){ab=ah[ac].selector;if(!ab){return C}for(ag=ad.length-1;ag>=0;ag--){if(c.is(ad[ag],ab)){return C}}}}return X}function J(ab,ae,ac){var ad;if(!P){P={};ad={};aa.onNodeChange.addToTop(function(ag,af,ai){var ah=n(ai),aj={};T(P,function(ak,al){T(ah,function(am){if(y(am,al,{},ak.similar)){if(!ad[al]){T(ak,function(an){an(true,{node:am,format:al,parents:ah})});ad[al]=ak}aj[al]=ak;return false}})});T(ad,function(ak,al){if(!aj[al]){delete ad[al];T(ak,function(am){am(false,{node:ai,format:al,parents:ah})})}})})}T(ab.split(","),function(af){if(!P[af]){P[af]=[];P[af].similar=ac}P[af].push(ae)});return this}a.extend(this,{get:V,register:l,apply:Y,remove:B,toggle:F,match:k,matchAll:v,matchNode:y,canApply:z,formatChanged:J});j();W();function h(ab,ac){if(g(ab,ac.inline)){return C}if(g(ab,ac.block)){return C}if(ac.selector){return c.is(ab,ac.selector)}}function g(ac,ab){ac=ac||"";ab=ab||"";ac=""+(ac.nodeName||ac);ab=""+(ab.nodeName||ab);return ac.toLowerCase()==ab.toLowerCase()}function O(ac,ab){var ad=c.getStyle(ac,ab);if(ab=="color"||ab=="backgroundColor"){ad=c.toHex(ad)}if(ab=="fontWeight"&&ad==700){ad="bold"}return""+ad}function q(ab,ac){if(typeof(ab)!="string"){ab=ab(ac)}else{if(ac){ab=ab.replace(/%(\w+)/g,function(ae,ad){return ac[ad]||ae})}}return ab}function f(ab){return ab&&ab.nodeType===3&&/^([\t \r\n]+|)$/.test(ab.nodeValue)}function S(ad,ac,ab){var ae=c.create(ac,ab);ad.parentNode.insertBefore(ae,ad);ae.appendChild(ad);return ae}function p(ab,am,ae){var ap,an,ah,al,ad=ab.startContainer,ai=ab.startOffset,ar=ab.endContainer,ak=ab.endOffset;function ao(aA){var au,ax,az,aw,av,at;au=ax=aA?ad:ar;av=aA?"previousSibling":"nextSibling";at=c.getRoot();function ay(aB){return aB.nodeName=="BR"&&aB.getAttribute("data-mce-bogus")&&!aB.nextSibling}if(au.nodeType==3&&!f(au)){if(aA?ai>0:ak<au.nodeValue.length){return au}}for(;;){if(!am[0].block_expand&&H(ax)){return ax}for(aw=ax[av];aw;aw=aw[av]){if(!K(aw)&&!f(aw)&&!ay(aw)){return ax}}if(ax.parentNode==at){au=ax;break}ax=ax.parentNode}return au}function ag(at,au){if(au===D){au=at.nodeType===3?at.length:at.childNodes.length}while(at&&at.hasChildNodes()){at=at.childNodes[au];if(at){au=at.nodeType===3?at.length:at.childNodes.length}}return{node:at,offset:au}}if(ad.nodeType==1&&ad.hasChildNodes()){an=ad.childNodes.length-1;ad=ad.childNodes[ai>an?an:ai];if(ad.nodeType==3){ai=0}}if(ar.nodeType==1&&ar.hasChildNodes()){an=ar.childNodes.length-1;ar=ar.childNodes[ak>an?an:ak-1];if(ar.nodeType==3){ak=ar.nodeValue.length}}function aq(au){var at=au;while(at){if(at.nodeType===1&&x(at)){return x(at)==="false"?at:au}at=at.parentNode}return au}function aj(au,ay,aA){var ax,av,az,at;function aw(aC,aE){var aF,aB,aD=aC.nodeValue;if(typeof(aE)=="undefined"){aE=aA?aD.length:0}if(aA){aF=aD.lastIndexOf(" ",aE);aB=aD.lastIndexOf("\u00a0",aE);aF=aF>aB?aF:aB;if(aF!==-1&&!ae){aF++}}else{aF=aD.indexOf(" ",aE);aB=aD.indexOf("\u00a0",aE);aF=aF!==-1&&(aB===-1||aF<aB)?aF:aB}return aF}if(au.nodeType===3){az=aw(au,ay);if(az!==-1){return{container:au,offset:az}}at=au}ax=new t(au,c.getParent(au,H)||aa.getBody());while(av=ax[aA?"prev":"next"]()){if(av.nodeType===3){at=av;az=aw(av);if(az!==-1){return{container:av,offset:az}}}else{if(H(av)){break}}}if(at){if(aA){ay=0}else{ay=at.length}return{container:at,offset:ay}}}function af(au,at){var av,aw,ay,ax;if(au.nodeType==3&&au.nodeValue.length===0&&au[at]){au=au[at]}av=n(au);for(aw=0;aw<av.length;aw++){for(ay=0;ay<am.length;ay++){ax=am[ay];if("collapsed" in ax&&ax.collapsed!==ab.collapsed){continue}if(c.is(av[aw],ax.selector)){return av[aw]}}}return au}function ac(au,at,aw){var av;if(!am[0].wrapper){av=c.getParent(au,am[0].block)}if(!av){av=c.getParent(au.nodeType==3?au.parentNode:au,I)}if(av&&am[0].wrapper){av=n(av,"ul,ol").reverse()[0]||av}if(!av){av=au;while(av[at]&&!H(av[at])){av=av[at];if(g(av,"br")){break}}}return av||au}ad=aq(ad);ar=aq(ar);if(K(ad.parentNode)||K(ad)){ad=K(ad)?ad:ad.parentNode;ad=ad.nextSibling||ad;if(ad.nodeType==3){ai=0}}if(K(ar.parentNode)||K(ar)){ar=K(ar)?ar:ar.parentNode;ar=ar.previousSibling||ar;if(ar.nodeType==3){ak=ar.length}}if(am[0].inline){if(ab.collapsed){al=aj(ad,ai,true);if(al){ad=al.container;ai=al.offset}al=aj(ar,ak);if(al){ar=al.container;ak=al.offset}}ah=ag(ar,ak);if(ah.node){while(ah.node&&ah.offset===0&&ah.node.previousSibling){ah=ag(ah.node.previousSibling)}if(ah.node&&ah.offset>0&&ah.node.nodeType===3&&ah.node.nodeValue.charAt(ah.offset-1)===" "){if(ah.offset>1){ar=ah.node;ar.splitText(ah.offset-1)}}}}if(am[0].inline||am[0].block_expand){if(!am[0].inline||(ad.nodeType!=3||ai===0)){ad=ao(true)}if(!am[0].inline||(ar.nodeType!=3||ak===ar.nodeValue.length)){ar=ao()}}if(am[0].selector&&am[0].expand!==X&&!am[0].inline){ad=af(ad,"previousSibling");ar=af(ar,"nextSibling")}if(am[0].block||am[0].selector){ad=ac(ad,"previousSibling");ar=ac(ar,"nextSibling");if(am[0].block){if(!H(ad)){ad=ao(true)}if(!H(ar)){ar=ao()}}}if(ad.nodeType==1){ai=s(ad);ad=ad.parentNode}if(ar.nodeType==1){ak=s(ar)+1;ar=ar.parentNode}return{startContainer:ad,startOffset:ai,endContainer:ar,endOffset:ak}}function Z(ah,ag,ae,ab){var ad,ac,af;if(!h(ae,ah)){return X}if(ah.remove!="all"){T(ah.styles,function(aj,ai){aj=q(aj,ag);if(typeof(ai)==="number"){ai=aj;ab=0}if(!ab||g(O(ab,ai),aj)){c.setStyle(ae,ai,"")}af=1});if(af&&c.getAttrib(ae,"style")==""){ae.removeAttribute("style");ae.removeAttribute("data-mce-style")}T(ah.attributes,function(ak,ai){var aj;ak=q(ak,ag);if(typeof(ai)==="number"){ai=ak;ab=0}if(!ab||g(c.getAttrib(ab,ai),ak)){if(ai=="class"){ak=c.getAttrib(ae,ai);if(ak){aj="";T(ak.split(/\s+/),function(al){if(/mce\w+/.test(al)){aj+=(aj?" ":"")+al}});if(aj){c.setAttrib(ae,ai,aj);return}}}if(ai=="class"){ae.removeAttribute("className")}if(e.test(ai)){ae.removeAttribute("data-mce-"+ai)}ae.removeAttribute(ai)}});T(ah.classes,function(ai){ai=q(ai,ag);if(!ab||c.hasClass(ab,ai)){c.removeClass(ae,ai)}});ac=c.getAttribs(ae);for(ad=0;ad<ac.length;ad++){if(ac[ad].nodeName.indexOf("_")!==0){return X}}}if(ah.remove!="none"){o(ae,ah);return C}}function o(ad,ae){var ab=ad.parentNode,ac;function af(ah,ag,ai){ah=E(ah,ag,ai);return !ah||(ah.nodeName=="BR"||H(ah))}if(ae.block){if(!m){if(H(ad)&&!H(ab)){if(!af(ad,X)&&!af(ad.firstChild,C,1)){ad.insertBefore(c.create("br"),ad.firstChild)}if(!af(ad,C)&&!af(ad.lastChild,X,1)){ad.appendChild(c.create("br"))}}}else{if(ab==c.getRoot()){if(!ae.list_block||!g(ad,ae.list_block)){T(a.grep(ad.childNodes),function(ag){if(d(m,ag.nodeName.toLowerCase())){if(!ac){ac=S(ag,m)}else{ac.appendChild(ag)}}else{ac=0}})}}}}if(ae.selector&&ae.inline&&!g(ae.inline,ad)){return}c.remove(ad,1)}function E(ac,ab,ad){if(ac){ab=ab?"nextSibling":"previousSibling";for(ac=ad?ac:ac[ab];ac;ac=ac[ab]){if(ac.nodeType==1||!f(ac)){return ac}}}}function K(ab){return ab&&ab.nodeType==1&&ab.getAttribute("data-mce-type")=="bookmark"}function u(af,ae){var ab,ad,ac;function ah(ak,aj){if(ak.nodeName!=aj.nodeName){return X}function ai(am){var an={};T(c.getAttribs(am),function(ao){var ap=ao.nodeName.toLowerCase();if(ap.indexOf("_")!==0&&ap!=="style"){an[ap]=c.getAttrib(am,ap)}});return an}function al(ap,ao){var an,am;for(am in ap){if(ap.hasOwnProperty(am)){an=ao[am];if(an===D){return X}if(ap[am]!=an){return X}delete ao[am]}}for(am in ao){if(ao.hasOwnProperty(am)){return X}}return C}if(!al(ai(ak),ai(aj))){return X}if(!al(c.parseStyle(c.getAttrib(ak,"style")),c.parseStyle(c.getAttrib(aj,"style")))){return X}return C}function ag(aj,ai){for(ad=aj;ad;ad=ad[ai]){if(ad.nodeType==3&&ad.nodeValue.length!==0){return aj}if(ad.nodeType==1&&!K(ad)){return ad}}return aj}if(af&&ae){af=ag(af,"previousSibling");ae=ag(ae,"nextSibling");if(ah(af,ae)){for(ad=af.nextSibling;ad&&ad!=ae;){ac=ad;ad=ad.nextSibling;af.appendChild(ac)}c.remove(ae);T(a.grep(ae.childNodes),function(ai){af.appendChild(ai)});return af}}return ae}function I(ab){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(ab)}function M(ac,ag){var ab,af,ad,ae;ab=ac[ag?"startContainer":"endContainer"];af=ac[ag?"startOffset":"endOffset"];if(ab.nodeType==1){ad=ab.childNodes.length-1;if(!ag&&af){af--}ab=ab.childNodes[af>ad?ad:af]}if(ab.nodeType===3&&ag&&af>=ab.nodeValue.length){ab=new t(ab,aa.getBody()).next()||ab}if(ab.nodeType===3&&!ag&&af===0){ab=new t(ab,aa.getBody()).prev()||ab}return ab}function U(ak,ab,ai){var al="_mce_caret",ac=aa.settings.caret_debug;function ad(ap){var ao=c.create("span",{id:al,"data-mce-bogus":true,style:ac?"color:red":""});if(ap){ao.appendChild(aa.getDoc().createTextNode(G))}return ao}function aj(ap,ao){while(ap){if((ap.nodeType===3&&ap.nodeValue!==G)||ap.childNodes.length>1){return false}if(ao&&ap.nodeType===1){ao.push(ap)}ap=ap.firstChild}return true}function ag(ao){while(ao){if(ao.id===al){return ao}ao=ao.parentNode}}function af(ao){var ap;if(ao){ap=new t(ao,ao);for(ao=ap.current();ao;ao=ap.next()){if(ao.nodeType===3){return ao}}}}function ae(aq,ap){var ar,ao;if(!aq){aq=ag(r.getStart());if(!aq){while(aq=c.get(al)){ae(aq,false)}}}else{ao=r.getRng(true);if(aj(aq)){if(ap!==false){ao.setStartBefore(aq);ao.setEndBefore(aq)}c.remove(aq)}else{ar=af(aq);if(ar.nodeValue.charAt(0)===G){ar=ar.deleteData(0,1)}c.remove(aq,1)}r.setRng(ao)}}function ah(){var aq,ao,av,au,ar,ap,at;aq=r.getRng(true);au=aq.startOffset;ap=aq.startContainer;at=ap.nodeValue;ao=ag(r.getStart());if(ao){av=af(ao)}if(at&&au>0&&au<at.length&&/\w/.test(at.charAt(au))&&/\w/.test(at.charAt(au-1))){ar=r.getBookmark();aq.collapse(true);aq=p(aq,V(ab));aq=N.split(aq);Y(ab,ai,aq);r.moveToBookmark(ar)}else{if(!ao||av.nodeValue!==G){ao=ad(true);av=ao.firstChild;aq.insertNode(ao);au=1;Y(ab,ai,ao)}else{Y(ab,ai,ao)}r.setCursorLocation(av,au)}}function am(){var ao=r.getRng(true),ap,ar,av,au,aq,ay,ax=[],at,aw;ap=ao.startContainer;ar=ao.startOffset;aq=ap;if(ap.nodeType==3){if(ar!=ap.nodeValue.length||ap.nodeValue===G){au=true}aq=aq.parentNode}while(aq){if(y(aq,ab,ai)){ay=aq;break}if(aq.nextSibling){au=true}ax.push(aq);aq=aq.parentNode}if(!ay){return}if(au){av=r.getBookmark();ao.collapse(true);ao=p(ao,V(ab),true);ao=N.split(ao);B(ab,ai,ao);r.moveToBookmark(av)}else{aw=ad();aq=aw;for(at=ax.length-1;at>=0;at--){aq.appendChild(c.clone(ax[at],false));aq=aq.firstChild}aq.appendChild(c.doc.createTextNode(G));aq=aq.firstChild;c.insertAfter(aw,ay);r.setCursorLocation(aq,1)}}function an(){var ap,ao,aq;ao=ag(r.getStart());if(ao&&!c.isEmpty(ao)){a.walk(ao,function(ar){if(ar.nodeType==1&&ar.id!==al&&!c.isEmpty(ar)){c.setAttrib(ar,"data-mce-bogus",null)}},"childNodes")}}if(!self._hasCaretEvents){aa.onBeforeGetContent.addToTop(function(){var ao=[],ap;if(aj(ag(r.getStart()),ao)){ap=ao.length;while(ap--){c.setAttrib(ao[ap],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(ao){aa[ao].addToTop(function(){ae();an()})});aa.onKeyDown.addToTop(function(ao,aq){var ap=aq.keyCode;if(ap==8||ap==37||ap==39){ae(ag(r.getStart()))}an()});r.onSetContent.add(an);self._hasCaretEvents=true}if(ak=="apply"){ah()}else{am()}}function R(ac){var ab=ac.startContainer,ai=ac.startOffset,ae,ah,ag,ad,af;if(ab.nodeType==3&&ai>=ab.nodeValue.length){ai=s(ab);ab=ab.parentNode;ae=true}if(ab.nodeType==1){ad=ab.childNodes;ab=ad[Math.min(ai,ad.length-1)];ah=new t(ab,c.getParent(ab,c.isBlock));if(ai>ad.length-1||ae){ah.next()}for(ag=ah.current();ag;ag=ah.next()){if(ag.nodeType==3&&!f(ag)){af=c.create("a",null,G);ag.parentNode.insertBefore(af,ag);ac.setStart(ag,0);r.setRng(ac);c.remove(af);return}}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;function b(j,i){e.each(i,function(l,k){if(l){g.setStyle(j,k,l)}});g.rename(j,"span")}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)})}}if(c.inline_styles){h=e.explode(c.font_size_legacy_values);d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size,10)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};a.onPreProcess.add(f);a.onSetContent.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});(function(b){var a=b.dom.TreeWalker;b.EnterKey=function(f){var i=f.dom,e=f.selection,d=f.settings,h=f.undoManager,c=f.schema.getNonEmptyElements();function g(A){var v=e.getRng(true),G,j,z,u,p,M,B,o,k,n,t,J,x,C;function E(N){return N&&i.isBlock(N)&&!/^(TD|TH|CAPTION|FORM)$/.test(N.nodeName)&&!/^(fixed|absolute)/i.test(N.style.position)&&i.getContentEditable(N)!=="true"}function F(O){var N;if(b.isIE&&i.isBlock(O)){N=e.getRng();O.appendChild(i.create("span",null,"\u00a0"));e.select(O);O.lastChild.outerHTML="";e.setRng(N)}}function y(P){var O=P,Q=[],N;while(O=O.firstChild){if(i.isBlock(O)){return}if(O.nodeType==1&&!c[O.nodeName.toLowerCase()]){Q.push(O)}}N=Q.length;while(N--){O=Q[N];if(!O.hasChildNodes()||(O.firstChild==O.lastChild&&O.firstChild.nodeValue==="")){i.remove(O)}else{if(O.nodeName=="A"&&(O.innerText||O.textContent)===" "){i.remove(O)}}}}function m(O){var T,R,N,U,S,Q=O,P;N=i.createRng();if(O.hasChildNodes()){T=new a(O,O);while(R=T.current()){if(R.nodeType==3){N.setStart(R,0);N.setEnd(R,0);break}if(c[R.nodeName.toLowerCase()]){N.setStartBefore(R);N.setEndBefore(R);break}Q=R;R=T.next()}if(!R){N.setStart(Q,0);N.setEnd(Q,0)}}else{if(O.nodeName=="BR"){if(O.nextSibling&&i.isBlock(O.nextSibling)){if(!M||M<9){P=i.create("br");O.parentNode.insertBefore(P,O)}N.setStartBefore(O);N.setEndBefore(O)}else{N.setStartAfter(O);N.setEndAfter(O)}}else{N.setStart(O,0);N.setEnd(O,0)}}e.setRng(N);i.remove(P);S=i.getViewPort(f.getWin());U=i.getPos(O).y;if(U<S.y||U+25>S.y+S.h){f.getWin().scrollTo(0,U<S.y?U:U-S.h+25)}}function r(O){var P=z,R,Q,N;R=O||t=="TABLE"?i.create(O||x):p.cloneNode(false);N=R;if(d.keep_styles!==false){do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(P.nodeName)){if(P.id=="_mce_caret"){continue}Q=P.cloneNode(false);i.setAttrib(Q,"id","");if(R.hasChildNodes()){Q.appendChild(R.firstChild);R.appendChild(Q)}else{N=Q;R.appendChild(Q)}}}while(P=P.parentNode)}if(!b.isIE){N.innerHTML='<br data-mce-bogus="1">'}return R}function q(Q){var P,O,N;if(z.nodeType==3&&(Q?u>0:u<z.nodeValue.length)){return false}if(z.parentNode==p&&C&&!Q){return true}if(Q&&z.nodeType==1&&z==p.firstChild){return true}if(z.nodeName==="TABLE"||(z.previousSibling&&z.previousSibling.nodeName=="TABLE")){return(C&&!Q)||(!C&&Q)}P=new a(z,p);if(z.nodeType==3){if(Q&&u==0){P.prev()}else{if(!Q&&u==z.nodeValue.length){P.next()}}}while(O=P.current()){if(O.nodeType===1){if(!O.getAttribute("data-mce-bogus")){N=O.nodeName.toLowerCase();if(c[N]&&N!=="br"){return false}}}else{if(O.nodeType===3&&!/^[ \t\r\n]*$/.test(O.nodeValue)){return false}}if(Q){P.prev()}else{P.next()}}return true}function l(N,T){var U,S,P,R,Q,O=x||"P";S=i.getParent(N,i.isBlock);if(!S||!E(S)){S=S||j;if(!S.hasChildNodes()){U=i.create(O);S.appendChild(U);v.setStart(U,0);v.setEnd(U,0);return U}R=N;while(R.parentNode!=S){R=R.parentNode}while(R&&!i.isBlock(R)){P=R;R=R.previousSibling}if(P){U=i.create(O);P.parentNode.insertBefore(U,P);R=P;while(R&&!i.isBlock(R)){Q=R.nextSibling;U.appendChild(R);R=Q}v.setStart(N,T);v.setEnd(N,T)}}return N}function H(){function N(P){var O=n[P?"firstChild":"lastChild"];while(O){if(O.nodeType==1){break}O=O[P?"nextSibling":"previousSibling"]}return O===p}o=x?r(x):i.create("BR");if(N(true)&&N()){i.replace(o,n)}else{if(N(true)){n.parentNode.insertBefore(o,n)}else{if(N()){i.insertAfter(o,n);F(o)}else{G=v.cloneRange();G.setStartAfter(p);G.setEndAfter(n);k=G.extractContents();i.insertAfter(k,n);i.insertAfter(o,n)}}}i.remove(p);m(o);h.add()}function D(){var O=new a(z,p),N;while(N=O.current()){if(N.nodeName=="BR"){return true}N=O.next()}}function L(){var P,O,N;if(z&&z.nodeType==3&&u>=z.nodeValue.length){if(!b.isIE&&!D()){P=i.create("br");v.insertNode(P);v.setStartAfter(P);v.setEndAfter(P);O=true}}P=i.create("br");v.insertNode(P);if(b.isIE&&t=="PRE"&&(!M||M<8)){P.parentNode.insertBefore(i.doc.createTextNode("\r"),P)}N=i.create("span",{},"&nbsp;");P.parentNode.insertBefore(N,P);e.scrollIntoView(N);i.remove(N);if(!O){v.setStartAfter(P);v.setEndAfter(P)}else{v.setStartBefore(P);v.setEndBefore(P)}e.setRng(v);h.add()}function s(N){do{if(N.nodeType===3){N.nodeValue=N.nodeValue.replace(/^[\r\n]+/,"")}N=N.firstChild}while(N)}function K(P){var N=i.getRoot(),O,Q;O=P;while(O!==N&&i.getContentEditable(O)!=="false"){if(i.getContentEditable(O)==="true"){Q=O}O=O.parentNode}return O!==N?Q:N}function I(O){var N;if(!b.isIE){O.normalize();N=O.lastChild;if(!N||(/^(left|right)$/gi.test(i.getStyle(N,"float",true)))){i.add(O,"br")}}}if(!v.collapsed){f.execCommand("Delete");return}if(A.isDefaultPrevented()){return}z=v.startContainer;u=v.startOffset;x=(d.force_p_newlines?"p":"")||d.forced_root_block;x=x?x.toUpperCase():"";M=i.doc.documentMode;B=A.shiftKey;if(z.nodeType==1&&z.hasChildNodes()){C=u>z.childNodes.length-1;z=z.childNodes[Math.min(u,z.childNodes.length-1)]||z;if(C&&z.nodeType==3){u=z.nodeValue.length}else{u=0}}j=K(z);if(!j){return}h.beforeChange();if(!i.isBlock(j)&&j!=i.getRoot()){if(!x||B){L()}return}if((x&&!B)||(!x&&B)){z=l(z,u)}p=i.getParent(z,i.isBlock);n=p?i.getParent(p.parentNode,i.isBlock):null;t=p?p.nodeName.toUpperCase():"";J=n?n.nodeName.toUpperCase():"";if(J=="LI"&&!A.ctrlKey){p=n;t=J}if(t=="LI"){if(!x&&B){L();return}if(i.isEmpty(p)){if(/^(UL|OL|LI)$/.test(n.parentNode.nodeName)){return false}H();return}}if(t=="PRE"&&d.br_in_pre!==false){if(!B){L();return}}else{if((!x&&!B&&t!="LI")||(x&&B)){L();return}}x=x||"P";if(q()){if(/^(H[1-6]|PRE)$/.test(t)&&J!="HGROUP"){o=r(x)}else{o=r()}if(d.end_container_on_empty_block&&E(n)&&i.isEmpty(p)){o=i.split(n,p)}else{i.insertAfter(o,p)}m(o)}else{if(q(true)){o=p.parentNode.insertBefore(r(),p);F(o)}else{G=v.cloneRange();G.setEndAfter(p);k=G.extractContents();s(k);o=k.firstChild;i.insertAfter(k,p);y(o);I(p);m(o)}}i.setAttrib(o,"id","");h.add()}f.onKeyDown.add(function(k,j){if(j.keyCode==13){if(g(j)!==false){j.preventDefault()}}})}})(tinymce); \ 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..bb8e58c88
--- /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,{ownEvents:true,proxy:tinyMCEPopup._eventProxy});b.dom.bind(window,"ready",b._onDOMLoaded,b);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.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){b.dom.bind(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){var b=a.target||a.srcElement;if(b.onchange){b.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_eventProxy:function(a){return function(b){tinyMCEPopup.dom.events.callNativeHandler(a,b)}}};tinyMCEPopup.init(); \ 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..3bbe9ce95
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_src.js
@@ -0,0 +1,19030 @@
+// FILE IS GENERATED BY COMBINING THE SOURCES IN THE "classes" DIRECTORY SO DON'T MODIFY THIS FILE DIRECTLY
+(function(win) {
+ var whiteSpaceRe = /^\s*|\s*$/g,
+ undef, isRegExpBroken = 'B'.replace(/A(.)|B/, '$1') === '$1';
+
+ var tinymce = {
+ majorVersion : '3',
+
+ minorVersion : '5.8',
+
+ releaseDate : '2012-11-20',
+
+ _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++) {
+ v = nl[i].href;
+ if (v) {
+ // 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 !== undef;
+
+ if (t == 'array' && tinymce.isArray(o))
+ return true;
+
+ return typeof(o) == t;
+ },
+
+ isArray: Array.isArray || function(obj) {
+ return Object.prototype.toString.call(obj) === "[object Array]";
+ },
+
+ 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 !== undef) {
+ // 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(obj, ext) {
+ var i, l, name, args = arguments, value;
+
+ for (i = 1, l = args.length; i < l; i++) {
+ ext = args[i];
+ for (name in ext) {
+ if (ext.hasOwnProperty(name)) {
+ value = ext[name];
+
+ if (value !== undef) {
+ obj[name] = value;
+ }
+ }
+ }
+ }
+
+ return obj;
+ },
+
+
+ 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, unload;
+
+ unload = function() {
+ 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;
+
+ function stop() {
+ // Prevent memory leak
+ d.detachEvent('onstop', stop);
+
+ // Call unload handler
+ if (unload)
+ unload();
+
+ d = 0;
+ };
+
+ // Is there things still loading, then do some magic
+ if (d.readyState == 'interactive') {
+ // 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);
+ }
+ };
+
+ f = {func : f, scope : s || this};
+
+ if (!t.unloads) {
+ // 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) {
+ if (!s || tinymce.is(s, 'array')) {
+ return s;
+ }
+
+ return tinymce.map(s.split(d || ','), tinymce.trim);
+ },
+
+ _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] === undef) {
+ 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,
+ inDispatch: false,
+
+ Dispatcher : function(scope) {
+ this.scope = scope || this;
+ this.listeners = [];
+ },
+
+ add : function(callback, scope) {
+ this.listeners.push({cb : callback, scope : scope || this.scope});
+
+ return callback;
+ },
+
+ addToTop : function(callback, scope) {
+ var self = this, listener = {cb : callback, scope : scope || self.scope};
+
+ // Create new listeners if addToTop is executed in a dispatch loop
+ if (self.inDispatch) {
+ self.listeners = [listener].concat(self.listeners);
+ } else {
+ self.listeners.unshift(listener);
+ }
+
+ return callback;
+ },
+
+ remove : function(callback) {
+ var listeners = this.listeners, output = null;
+
+ tinymce.each(listeners, function(listener, i) {
+ if (callback == listener.cb) {
+ output = listener;
+ listeners.splice(i, 1);
+ return false;
+ }
+ });
+
+ return output;
+ },
+
+ dispatch : function() {
+ var self = this, returnValue, args = arguments, i, listeners = self.listeners, listener;
+
+ self.inDispatch = true;
+
+ // Needs to be a real loop since the listener count might change while looping
+ // And this is also more efficient
+ for (i = 0; i < listeners.length; i++) {
+ listener = listeners[i];
+ returnValue = listener.cb.apply(listener.scope, args.length > 0 ? args : [listener.scope]);
+
+ if (returnValue === false)
+ break;
+ }
+
+ self.inDispatch = false;
+
+ return returnValue;
+ }
+
+ });
+
+(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;
+ });
+
+ b = s.base_uri;
+ if (b) {
+ 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();
+
+ var tu = t.getURI(), uu = u.getURI();
+
+ // Allow usage of the base_uri when relative_urls = true
+ if(tu == uu || (tu.charAt(tu.length - 1) == "/" && tu.substr(0, tu.length - 1) == uu))
+ return tu;
+
+ 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) {
+ 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(name, path, domain) {
+ var date = new Date();
+
+ date.setTime(date.getTime() - 1000);
+
+ this.set(name, '', date, path, domain);
+ }
+ });
+})();
+
+(function() {
+ function serialize(o, quote) {
+ var i, v, t, name;
+
+ 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 && Object.prototype.toString.call(o) === '[object Array]') {
+ for (i=0, v = '['; i<o.length; i++)
+ v += (i > 0 ? ',' : '') + serialize(o[i], quote);
+
+ return v + ']';
+ }
+
+ v = '{';
+
+ for (name in o) {
+ if (o.hasOwnProperty(name)) {
+ v += typeof o[name] != 'function' ? (v.length > 1 ? ',' + quote : quote) + name + quote +':' + serialize(o[name], 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;
+
+ 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);
+ };
+
+ // 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);
+
+ // 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 = {
+ BACKSPACE: 8,
+ DELETE: 46,
+ DOWN: 40,
+ ENTER: 13,
+ LEFT: 37,
+ RIGHT: 39,
+ SPACEBAR: 32,
+ TAB: 9,
+ UP: 38,
+
+ modifierPressed: function (e) {
+ return e.shiftKey || e.ctrlKey || e.altKey;
+ },
+
+ metaKeyPressed: function(e) {
+ // Check if ctrl or meta key is pressed also check if alt is false for Polish users
+ return tinymce.isMac ? e.metaKey : e.ctrlKey && !e.altKey;
+ }
+ };
+})(tinymce);
+
+tinymce.util.Quirks = function(editor) {
+ var VK = tinymce.VK, BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection,
+ settings = editor.settings, parser = editor.parser, serializer = editor.serializer, each = tinymce.each;
+
+ function setEditorCommandState(cmd, state) {
+ try {
+ editor.getDoc().execCommand(cmd, false, state);
+ } catch (ex) {
+ // Ignore
+ }
+ }
+
+ function getDocumentMode() {
+ var documentMode = editor.getDoc().documentMode;
+
+ return documentMode ? documentMode : 6;
+ };
+
+ function isDefaultPrevented(e) {
+ return e.isDefaultPrevented();
+ };
+
+ function cleanupStylesWhenDeleting() {
+ function removeMergedFormatSpans(isDelete) {
+ var rng, blockElm, node, clonedSpan;
+
+ 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);
+ }
+ }
+
+ each(dom.select('span', blockElm), function(span) {
+ span.setAttribute('data-mce-mark', '1');
+ });
+
+ // Do the backspace/delete action
+ editor.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null);
+
+ // Find all odd apple-style-spans
+ blockElm = dom.getParent(rng.startContainer, dom.isBlock);
+ each(dom.select('span', blockElm), function(span) {
+ var bm = selection.getBookmark();
+
+ if (clonedSpan) {
+ dom.replace(clonedSpan.cloneNode(false), span, true);
+ } else if (!span.getAttribute('data-mce-mark')) {
+ dom.remove(span, true);
+ } else {
+ span.removeAttribute('data-mce-mark');
+ }
+
+ // Restore the selection
+ selection.moveToBookmark(bm);
+ });
+ }
+
+ editor.onKeyDown.add(function(editor, e) {
+ var isDelete;
+
+ isDelete = e.keyCode == DELETE;
+ if (!isDefaultPrevented(e) && (isDelete || e.keyCode == BACKSPACE) && !VK.modifierPressed(e)) {
+ e.preventDefault();
+ removeMergedFormatSpans(isDelete);
+ }
+ });
+
+ editor.addCommand('Delete', function() {removeMergedFormatSpans();});
+ };
+
+ function emptyEditorWhenDeleting() {
+ function serializeRng(rng) {
+ var body = dom.create("body");
+ var contents = rng.cloneContents();
+ body.appendChild(contents);
+ return selection.serializer.serialize(body, {format: 'html'});
+ }
+
+ function allContentsSelected(rng) {
+ var selection = serializeRng(rng);
+
+ var allRng = dom.createRng();
+ allRng.selectNode(editor.getBody());
+
+ var allSelection = serializeRng(allRng);
+ return selection === allSelection;
+ }
+
+ editor.onKeyDown.add(function(editor, e) {
+ var keyCode = e.keyCode, isCollapsed;
+
+ // Empty the editor if it's needed for example backspace at <p><b>|</b></p>
+ if (!isDefaultPrevented(e) && (keyCode == DELETE || keyCode == BACKSPACE)) {
+ isCollapsed = editor.selection.isCollapsed();
+
+ // Selection is collapsed but the editor isn't empty
+ if (isCollapsed && !dom.isEmpty(editor.getBody())) {
+ return;
+ }
+
+ // IE deletes all contents correctly when everything is selected
+ if (tinymce.isIE && !isCollapsed) {
+ return;
+ }
+
+ // Selection isn't collapsed but not all the contents is selected
+ if (!isCollapsed && !allContentsSelected(editor.selection.getRng())) {
+ return;
+ }
+
+ // Manually empty the editor
+ editor.setContent('');
+ editor.selection.setCursorLocation(editor.getBody(), 0);
+ editor.nodeChanged();
+ }
+ });
+ };
+
+ function selectAll() {
+ editor.onKeyDown.add(function(editor, e) {
+ if (!isDefaultPrevented(e) && e.keyCode == 65 && VK.metaKeyPressed(e)) {
+ e.preventDefault();
+ editor.execCommand('SelectAll');
+ }
+ });
+ };
+
+ function inputMethodFocus() {
+ if (!editor.settings.content_editable) {
+ // Case 1 IME doesn't initialize if you focus the document
+ dom.bind(editor.getDoc(), 'focusin', function(e) {
+ selection.setRng(selection.getRng());
+ });
+
+ // Case 2 IME doesn't initialize if you click the documentElement it also doesn't properly fire the focusin event
+ dom.bind(editor.getDoc(), 'mousedown', function(e) {
+ if (e.target == editor.getDoc().documentElement) {
+ editor.getWin().focus();
+ selection.setRng(selection.getRng());
+ }
+ });
+ }
+ };
+
+ function removeHrOnBackspace() {
+ editor.onKeyDown.add(function(editor, e) {
+ if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {
+ if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) {
+ var node = selection.getNode();
+ var previousSibling = node.previousSibling;
+
+ if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "hr") {
+ dom.remove(previousSibling);
+ tinymce.dom.Event.cancel(e);
+ }
+ }
+ }
+ })
+ }
+
+ function focusBody() {
+ // 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
+ editor.onMouseDown.add(function(editor, e) {
+ if (!isDefaultPrevented(e) && e.target.nodeName === "HTML") {
+ var body = editor.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() {
+ editor.onClick.add(function(editor, 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)) {
+ selection.getSel().setBaseAndExtent(e, 0, e, 1);
+ }
+
+ if (e.nodeName == 'A' && dom.hasClass(e, 'mceItemAnchor')) {
+ selection.select(e);
+ }
+
+ editor.nodeChanged();
+ });
+ };
+
+ function removeStylesWhenDeletingAccrossBlockElements() {
+ function getAttributeApplyFunction() {
+ var template = dom.getAttribs(selection.getStart().cloneNode(false));
+
+ return function() {
+ var target = selection.getStart();
+
+ if (target !== editor.getBody()) {
+ dom.setAttrib(target, "style", null);
+
+ each(template, function(attr) {
+ target.setAttributeNode(attr.cloneNode(true));
+ });
+ }
+ };
+ }
+
+ function isSelectionAcrossElements() {
+ return !selection.isCollapsed() && dom.getParent(selection.getStart(), dom.isBlock) != dom.getParent(selection.getEnd(), dom.isBlock);
+ }
+
+ function blockEvent(editor, e) {
+ e.preventDefault();
+ return false;
+ }
+
+ editor.onKeyPress.add(function(editor, e) {
+ var applyAttributes;
+
+ if (!isDefaultPrevented(e) && (e.keyCode == 8 || e.keyCode == 46) && isSelectionAcrossElements()) {
+ applyAttributes = getAttributeApplyFunction();
+ editor.getDoc().execCommand('delete', false, null);
+ applyAttributes();
+ e.preventDefault();
+ return false;
+ }
+ });
+
+ dom.bind(editor.getDoc(), 'cut', function(e) {
+ var applyAttributes;
+
+ if (!isDefaultPrevented(e) && isSelectionAcrossElements()) {
+ applyAttributes = getAttributeApplyFunction();
+ editor.onKeyUp.addToTop(blockEvent);
+
+ setTimeout(function() {
+ applyAttributes();
+ editor.onKeyUp.remove(blockEvent);
+ }, 0);
+ }
+ });
+ }
+
+ function selectionChangeNodeChanged() {
+ var lastRng, selectionTimer;
+
+ dom.bind(editor.getDoc(), 'selectionchange', function() {
+ if (selectionTimer) {
+ clearTimeout(selectionTimer);
+ selectionTimer = 0;
+ }
+
+ selectionTimer = window.setTimeout(function() {
+ var rng = selection.getRng();
+
+ // Compare the ranges to see if it was a real change or not
+ if (!lastRng || !tinymce.dom.RangeUtils.compareRanges(rng, lastRng)) {
+ editor.nodeChanged();
+ lastRng = rng;
+ }
+ }, 50);
+ });
+ }
+
+ function ensureBodyHasRoleApplication() {
+ document.body.setAttribute("role", "application");
+ }
+
+ function disableBackspaceIntoATable() {
+ editor.onKeyDown.add(function(editor, e) {
+ if (!isDefaultPrevented(e) && e.keyCode === BACKSPACE) {
+ if (selection.isCollapsed() && selection.getRng(true).startOffset === 0) {
+ var previousSibling = selection.getNode().previousSibling;
+ if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "table") {
+ return tinymce.dom.Event.cancel(e);
+ }
+ }
+ }
+ })
+ }
+
+ function addNewLinesBeforeBrInPre() {
+ // IE8+ rendering mode does the right thing with BR in PRE
+ if (getDocumentMode() > 7) {
+ return;
+ }
+
+ // Enable display: none in area and add a specific class that hides all BR elements in PRE to
+ // avoid the caret from getting stuck at the BR elements while pressing the right arrow key
+ setEditorCommandState('RespectVisibilityInDesign', true);
+ editor.contentStyles.push('.mceHideBrInPre pre br {display: none}');
+ dom.addClass(editor.getBody(), 'mceHideBrInPre');
+
+ // Adds a \n before all BR elements in PRE to get them visual
+ parser.addNodeFilter('pre', function(nodes, name) {
+ var i = nodes.length, brNodes, j, brElm, sibling;
+
+ while (i--) {
+ brNodes = nodes[i].getAll('br');
+ j = brNodes.length;
+ while (j--) {
+ brElm = brNodes[j];
+
+ // Add \n before BR in PRE elements on older IE:s so the new lines get rendered
+ sibling = brElm.prev;
+ if (sibling && sibling.type === 3 && sibling.value.charAt(sibling.value - 1) != '\n') {
+ sibling.value += '\n';
+ } else {
+ brElm.parent.insert(new tinymce.html.Node('#text', 3), brElm, true).value = '\n';
+ }
+ }
+ }
+ });
+
+ // Removes any \n before BR elements in PRE since other browsers and in contentEditable=false mode they will be visible
+ serializer.addNodeFilter('pre', function(nodes, name) {
+ var i = nodes.length, brNodes, j, brElm, sibling;
+
+ while (i--) {
+ brNodes = nodes[i].getAll('br');
+ j = brNodes.length;
+ while (j--) {
+ brElm = brNodes[j];
+ sibling = brElm.prev;
+ if (sibling && sibling.type == 3) {
+ sibling.value = sibling.value.replace(/\r?\n$/, '');
+ }
+ }
+ }
+ });
+ }
+
+ function removePreSerializedStylesWhenSelectingControls() {
+ dom.bind(editor.getBody(), 'mouseup', function(e) {
+ var value, node = selection.getNode();
+
+ // Moved styles to attributes on IMG eements
+ if (node.nodeName == 'IMG') {
+ // Convert style width to width attribute
+ if (value = dom.getStyle(node, 'width')) {
+ dom.setAttrib(node, 'width', value.replace(/[^0-9%]+/g, ''));
+ dom.setStyle(node, 'width', '');
+ }
+
+ // Convert style height to height attribute
+ if (value = dom.getStyle(node, 'height')) {
+ dom.setAttrib(node, 'height', value.replace(/[^0-9%]+/g, ''));
+ dom.setStyle(node, 'height', '');
+ }
+ }
+ });
+ }
+
+ function keepInlineElementOnDeleteBackspace() {
+ editor.onKeyDown.add(function(editor, e) {
+ var isDelete, rng, container, offset, brElm, sibling, collapsed;
+
+ isDelete = e.keyCode == DELETE;
+ if (!isDefaultPrevented(e) && (isDelete || e.keyCode == BACKSPACE) && !VK.modifierPressed(e)) {
+ rng = selection.getRng();
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ collapsed = rng.collapsed;
+
+ // Override delete if the start container is a text node and is at the beginning of text or
+ // just before/after the last character to be deleted in collapsed mode
+ if (container.nodeType == 3 && container.nodeValue.length > 0 && ((offset === 0 && !collapsed) || (collapsed && offset === (isDelete ? 0 : 1)))) {
+ nonEmptyElements = editor.schema.getNonEmptyElements();
+
+ // Prevent default logic since it's broken
+ e.preventDefault();
+
+ // Insert a BR before the text node this will prevent the containing element from being deleted/converted
+ brElm = dom.create('br', {id: '__tmp'});
+ container.parentNode.insertBefore(brElm, container);
+
+ // Do the browser delete
+ editor.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null);
+
+ // Check if the previous sibling is empty after deleting for example: <p><b></b>|</p>
+ container = selection.getRng().startContainer;
+ sibling = container.previousSibling;
+ if (sibling && sibling.nodeType == 1 && !dom.isBlock(sibling) && dom.isEmpty(sibling) && !nonEmptyElements[sibling.nodeName.toLowerCase()]) {
+ dom.remove(sibling);
+ }
+
+ // Remove the temp element we inserted
+ dom.remove('__tmp');
+ }
+ }
+ });
+ }
+
+ function removeBlockQuoteOnBackSpace() {
+ // Add block quote deletion handler
+ editor.onKeyDown.add(function(editor, e) {
+ var rng, container, offset, root, parent;
+
+ if (isDefaultPrevented(e) || e.keyCode != VK.BACKSPACE) {
+ return;
+ }
+
+ rng = selection.getRng();
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ root = dom.getRoot();
+ parent = container;
+
+ if (!rng.collapsed || offset !== 0) {
+ return;
+ }
+
+ while (parent && parent.parentNode && parent.parentNode.firstChild == parent && parent.parentNode != root) {
+ parent = parent.parentNode;
+ }
+
+ // Is the cursor at the beginning of a blockquote?
+ if (parent.tagName === 'BLOCKQUOTE') {
+ // Remove the blockquote
+ editor.formatter.toggle('blockquote', null, parent);
+
+ // Move the caret to the beginning of container
+ rng = dom.createRng();
+ rng.setStart(container, 0);
+ rng.setEnd(container, 0);
+ selection.setRng(rng);
+ }
+ });
+ };
+
+ function setGeckoEditingOptions() {
+ function setOpts() {
+ editor._refreshContentEditable();
+
+ setEditorCommandState("StyleWithCSS", false);
+ setEditorCommandState("enableInlineTableEditing", false);
+
+ if (!settings.object_resizing) {
+ setEditorCommandState("enableObjectResizing", false);
+ }
+ };
+
+ if (!settings.readonly) {
+ editor.onBeforeExecCommand.add(setOpts);
+ editor.onMouseDown.add(setOpts);
+ }
+ };
+
+ function addBrAfterLastLinks() {
+ function fixLinks(editor, o) {
+ each(dom.select('a'), function(node) {
+ var parentNode = node.parentNode, root = dom.getRoot();
+
+ if (parentNode.lastChild === node) {
+ while (parentNode && !dom.isBlock(parentNode)) {
+ if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {
+ return;
+ }
+
+ parentNode = parentNode.parentNode;
+ }
+
+ dom.add(parentNode, 'br', {'data-mce-bogus' : 1});
+ }
+ });
+ };
+
+ editor.onExecCommand.add(function(editor, cmd) {
+ if (cmd === 'CreateLink') {
+ fixLinks(editor);
+ }
+ });
+
+ editor.onSetContent.add(selection.onSetContent.add(fixLinks));
+ };
+
+ function setDefaultBlockType() {
+ if (settings.forced_root_block) {
+ editor.onInit.add(function() {
+ setEditorCommandState('DefaultParagraphSeparator', settings.forced_root_block);
+ });
+ }
+ }
+
+ function removeGhostSelection() {
+ function repaint(sender, args) {
+ if (!sender || !args.initial) {
+ editor.execCommand('mceRepaint');
+ }
+ };
+
+ editor.onUndo.add(repaint);
+ editor.onRedo.add(repaint);
+ editor.onSetContent.add(repaint);
+ };
+
+ function deleteControlItemOnBackSpace() {
+ editor.onKeyDown.add(function(editor, e) {
+ var rng;
+
+ if (!isDefaultPrevented(e) && e.keyCode == BACKSPACE) {
+ rng = editor.getDoc().selection.createRange();
+ if (rng && rng.item) {
+ e.preventDefault();
+ editor.undoManager.beforeChange();
+ dom.remove(rng.item(0));
+ editor.undoManager.add();
+ }
+ }
+ });
+ };
+
+ function renderEmptyBlocksFix() {
+ var emptyBlocksCSS;
+
+ // IE10+
+ if (getDocumentMode() >= 10) {
+ emptyBlocksCSS = '';
+ each('p div h1 h2 h3 h4 h5 h6'.split(' '), function(name, i) {
+ emptyBlocksCSS += (i > 0 ? ',' : '') + name + ':empty';
+ });
+
+ editor.contentStyles.push(emptyBlocksCSS + '{padding-right: 1px !important}');
+ }
+ };
+
+ function fakeImageResize() {
+ var selectedElmX, selectedElmY, selectedElm, selectedElmGhost, selectedHandle, startX, startY, startW, startH, ratio,
+ resizeHandles, width, height, rootDocument = document, editableDoc = editor.getDoc();
+
+ if (!settings.object_resizing || settings.webkit_fake_resize === false) {
+ return;
+ }
+
+ // Try disabling object resizing if WebKit implements resizing in the future
+ setEditorCommandState("enableObjectResizing", false);
+
+ // Details about each resize handle how to scale etc
+ resizeHandles = {
+ // Name: x multiplier, y multiplier, delta size x, delta size y
+ n: [.5, 0, 0, -1],
+ e: [1, .5, 1, 0],
+ s: [.5, 1, 0, 1],
+ w: [0, .5, -1, 0],
+ nw: [0, 0, -1, -1],
+ ne: [1, 0, 1, -1],
+ se: [1, 1, 1, 1],
+ sw : [0, 1, -1, 1]
+ };
+
+ function resizeElement(e) {
+ var deltaX, deltaY;
+
+ // Calc new width/height
+ deltaX = e.screenX - startX;
+ deltaY = e.screenY - startY;
+
+ // Calc new size
+ width = deltaX * selectedHandle[2] + startW;
+ height = deltaY * selectedHandle[3] + startH;
+
+ // Never scale down lower than 5 pixels
+ width = width < 5 ? 5 : width;
+ height = height < 5 ? 5 : height;
+
+ // Constrain proportions when modifier key is pressed or if the nw, ne, sw, se corners are moved on an image
+ if (VK.modifierPressed(e) || (selectedElm.nodeName == "IMG" && selectedHandle[2] * selectedHandle[3] !== 0)) {
+ width = Math.round(height / ratio);
+ height = Math.round(width * ratio);
+ }
+
+ // Update ghost size
+ dom.setStyles(selectedElmGhost, {
+ width: width,
+ height: height
+ });
+
+ // Update ghost X position if needed
+ if (selectedHandle[2] < 0 && selectedElmGhost.clientWidth <= width) {
+ dom.setStyle(selectedElmGhost, 'left', selectedElmX + (startW - width));
+ }
+
+ // Update ghost Y position if needed
+ if (selectedHandle[3] < 0 && selectedElmGhost.clientHeight <= height) {
+ dom.setStyle(selectedElmGhost, 'top', selectedElmY + (startH - height));
+ }
+ }
+
+ function endResize() {
+ function setSizeProp(name, value) {
+ if (value) {
+ // Resize by using style or attribute
+ if (selectedElm.style[name] || !editor.schema.isValid(selectedElm.nodeName.toLowerCase(), name)) {
+ dom.setStyle(selectedElm, name, value);
+ } else {
+ dom.setAttrib(selectedElm, name, value);
+ }
+ }
+ }
+
+ // Set width/height properties
+ setSizeProp('width', width);
+ setSizeProp('height', height);
+
+ dom.unbind(editableDoc, 'mousemove', resizeElement);
+ dom.unbind(editableDoc, 'mouseup', endResize);
+
+ if (rootDocument != editableDoc) {
+ dom.unbind(rootDocument, 'mousemove', resizeElement);
+ dom.unbind(rootDocument, 'mouseup', endResize);
+ }
+
+ // Remove ghost and update resize handle positions
+ dom.remove(selectedElmGhost);
+ showResizeRect(selectedElm);
+ }
+
+ function showResizeRect(targetElm) {
+ var position, targetWidth, targetHeight;
+
+ hideResizeRect();
+
+ // Get position and size of target
+ position = dom.getPos(targetElm);
+ selectedElmX = position.x;
+ selectedElmY = position.y;
+ targetWidth = targetElm.offsetWidth;
+ targetHeight = targetElm.offsetHeight;
+
+ // Reset width/height if user selects a new image/table
+ if (selectedElm != targetElm) {
+ selectedElm = targetElm;
+ width = height = 0;
+ }
+
+ each(resizeHandles, function(handle, name) {
+ var handleElm;
+
+ // Get existing or render resize handle
+ handleElm = dom.get('mceResizeHandle' + name);
+ if (!handleElm) {
+ handleElm = dom.add(editableDoc.documentElement, 'div', {
+ id: 'mceResizeHandle' + name,
+ 'class': 'mceResizeHandle',
+ style: 'cursor:' + name + '-resize; margin:0; padding:0'
+ });
+
+ dom.bind(handleElm, 'mousedown', function(e) {
+ e.preventDefault();
+
+ endResize();
+
+ startX = e.screenX;
+ startY = e.screenY;
+ startW = selectedElm.clientWidth;
+ startH = selectedElm.clientHeight;
+ ratio = startH / startW;
+ selectedHandle = handle;
+
+ selectedElmGhost = selectedElm.cloneNode(true);
+ dom.addClass(selectedElmGhost, 'mceClonedResizable');
+ dom.setStyles(selectedElmGhost, {
+ left: selectedElmX,
+ top: selectedElmY,
+ margin: 0
+ });
+
+ editableDoc.documentElement.appendChild(selectedElmGhost);
+
+ dom.bind(editableDoc, 'mousemove', resizeElement);
+ dom.bind(editableDoc, 'mouseup', endResize);
+
+ if (rootDocument != editableDoc) {
+ dom.bind(rootDocument, 'mousemove', resizeElement);
+ dom.bind(rootDocument, 'mouseup', endResize);
+ }
+ });
+ } else {
+ dom.show(handleElm);
+ }
+
+ // Position element
+ dom.setStyles(handleElm, {
+ left: (targetWidth * handle[0] + selectedElmX) - (handleElm.offsetWidth / 2),
+ top: (targetHeight * handle[1] + selectedElmY) - (handleElm.offsetHeight / 2)
+ });
+ });
+
+ // Only add resize rectangle on WebKit and only on images
+ if (!tinymce.isOpera && selectedElm.nodeName == "IMG") {
+ selectedElm.setAttribute('data-mce-selected', '1');
+ }
+ }
+
+ function hideResizeRect() {
+ if (selectedElm) {
+ selectedElm.removeAttribute('data-mce-selected');
+ }
+
+ for (var name in resizeHandles) {
+ dom.hide('mceResizeHandle' + name);
+ }
+ }
+
+ // Add CSS for resize handles, cloned element and selected
+ editor.contentStyles.push(
+ '.mceResizeHandle {' +
+ 'position: absolute;' +
+ 'border: 1px solid black;' +
+ 'background: #FFF;' +
+ 'width: 5px;' +
+ 'height: 5px;' +
+ 'z-index: 10000' +
+ '}' +
+ '.mceResizeHandle:hover {' +
+ 'background: #000' +
+ '}' +
+ 'img[data-mce-selected] {' +
+ 'outline: 1px solid black' +
+ '}' +
+ 'img.mceClonedResizable, table.mceClonedResizable {' +
+ 'position: absolute;' +
+ 'outline: 1px dashed black;' +
+ 'opacity: .5;' +
+ 'z-index: 10000' +
+ '}'
+ );
+
+ function updateResizeRect() {
+ var controlElm = dom.getParent(selection.getNode(), 'table,img');
+
+ // Remove data-mce-selected from all elements since they might have been copied using Ctrl+c/v
+ each(dom.select('img[data-mce-selected]'), function(img) {
+ img.removeAttribute('data-mce-selected');
+ });
+
+ if (controlElm) {
+ showResizeRect(controlElm);
+ } else {
+ hideResizeRect();
+ }
+ }
+
+ // Show/hide resize rect when image is selected
+ editor.onNodeChange.add(updateResizeRect);
+
+ // Fixes WebKit quirk where it returns IMG on getNode if caret is after last image in container
+ dom.bind(editableDoc, 'selectionchange', updateResizeRect);
+
+ // Remove the internal attribute when serializing the DOM
+ editor.serializer.addAttributeFilter('data-mce-selected', function(nodes, name) {
+ var i = nodes.length;
+
+ while (i--) {
+ nodes[i].attr(name, null);
+ }
+ });
+ }
+
+ function keepNoScriptContents() {
+ if (getDocumentMode() < 9) {
+ parser.addNodeFilter('noscript', function(nodes) {
+ var i = nodes.length, node, textNode;
+
+ while (i--) {
+ node = nodes[i];
+ textNode = node.firstChild;
+
+ if (textNode) {
+ node.attr('data-mce-innertext', textNode.value);
+ }
+ }
+ });
+
+ serializer.addNodeFilter('noscript', function(nodes) {
+ var i = nodes.length, node, textNode, value;
+
+ while (i--) {
+ node = nodes[i];
+ textNode = nodes[i].firstChild;
+
+ if (textNode) {
+ textNode.value = tinymce.html.Entities.decode(textNode.value);
+ } else {
+ // Old IE can't retain noscript value so an attribute is used to store it
+ value = node.attributes.map['data-mce-innertext'];
+ if (value) {
+ node.attr('data-mce-innertext', null);
+ textNode = new tinymce.html.Node('#text', 3);
+ textNode.value = value;
+ textNode.raw = true;
+ node.append(textNode);
+ }
+ }
+ }
+ });
+ }
+ }
+
+ // All browsers
+ disableBackspaceIntoATable();
+ removeBlockQuoteOnBackSpace();
+ emptyEditorWhenDeleting();
+
+ // WebKit
+ if (tinymce.isWebKit) {
+ keepInlineElementOnDeleteBackspace();
+ cleanupStylesWhenDeleting();
+ inputMethodFocus();
+ selectControlElements();
+ setDefaultBlockType();
+
+ // iOS
+ if (tinymce.isIDevice) {
+ selectionChangeNodeChanged();
+ } else {
+ fakeImageResize();
+ selectAll();
+ }
+ }
+
+ // IE
+ if (tinymce.isIE) {
+ removeHrOnBackspace();
+ ensureBodyHasRoleApplication();
+ addNewLinesBeforeBrInPre();
+ removePreSerializedStylesWhenSelectingControls();
+ deleteControlItemOnBackSpace();
+ renderEmptyBlocksFix();
+ keepNoScriptContents();
+ }
+
+ // Gecko
+ if (tinymce.isGecko) {
+ removeHrOnBackspace();
+ focusBody();
+ removeStylesWhenDeletingAccrossBlockElements();
+ setGeckoEditingOptions();
+ addBrAfterLastLinks();
+ removeGhostSelection();
+ }
+
+ // Opera
+ if (tinymce.isOpera) {
+ fakeImageResize();
+ }
+};
+(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;
+ };
+
+ function processUrl(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, "\\'") + "')";
+ };
+
+ 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, processUrl);
+ 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 mapCache = {}, 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;
+ };
+
+ function getHTML5() {
+ var html5 = mapCache.html5;
+
+ if (!html5) {
+ html5 = mapCache.html5 = unpack({
+ A : 'id|accesskey|class|dir|draggable|item|hidden|itemprop|role|spellcheck|style|subject|title|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup',
+ B : '#|a|abbr|area|audio|b|bdo|br|button|canvas|cite|code|command|datalist|del|dfn|em|embed|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|meta|' +
+ 'meter|noscript|object|output|progress|q|ruby|samp|script|select|small|span|strong|sub|sup|svg|textarea|time|var|video|wbr',
+ C : '#|a|abbr|area|address|article|aside|audio|b|bdo|blockquote|br|button|canvas|cite|code|command|datalist|del|details|dfn|dialog|div|dl|em|embed|fieldset|' +
+ 'figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|i|iframe|img|input|ins|kbd|keygen|label|link|map|mark|menu|meta|meter|nav|noscript|ol|object|output|' +
+ 'p|pre|progress|q|ruby|samp|script|section|select|small|span|strong|style|sub|sup|svg|table|textarea|time|ul|var|video'
+ }, 'html[A|manifest][body|head]' +
+ 'head[A][base|command|link|meta|noscript|script|style|title]' +
+ 'title[A][#]' +
+ 'base[A|href|target][]' +
+ 'link[A|href|rel|media|type|sizes][]' +
+ 'meta[A|http-equiv|name|content|charset][]' +
+ 'style[A|type|media|scoped][#]' +
+ 'script[A|charset|type|src|defer|async][#]' +
+ 'noscript[A][C]' +
+ 'body[A][C]' +
+ 'section[A][C]' +
+ 'nav[A][C]' +
+ 'article[A][C]' +
+ 'aside[A][C]' +
+ 'h1[A][B]' +
+ 'h2[A][B]' +
+ 'h3[A][B]' +
+ 'h4[A][B]' +
+ 'h5[A][B]' +
+ 'h6[A][B]' +
+ 'hgroup[A][h1|h2|h3|h4|h5|h6]' +
+ 'header[A][C]' +
+ 'footer[A][C]' +
+ 'address[A][C]' +
+ 'p[A][B]' +
+ 'br[A][]' +
+ 'pre[A][B]' +
+ 'dialog[A][dd|dt]' +
+ 'blockquote[A|cite][C]' +
+ 'ol[A|start|reversed][li]' +
+ 'ul[A][li]' +
+ 'li[A|value][C]' +
+ 'dl[A][dd|dt]' +
+ 'dt[A][B]' +
+ 'dd[A][C]' +
+ 'a[A|href|target|ping|rel|media|type][B]' +
+ 'em[A][B]' +
+ 'strong[A][B]' +
+ 'small[A][B]' +
+ 'cite[A][B]' +
+ 'q[A|cite][B]' +
+ 'dfn[A][B]' +
+ 'abbr[A][B]' +
+ 'code[A][B]' +
+ 'var[A][B]' +
+ 'samp[A][B]' +
+ 'kbd[A][B]' +
+ 'sub[A][B]' +
+ 'sup[A][B]' +
+ 'i[A][B]' +
+ 'b[A][B]' +
+ 'mark[A][B]' +
+ 'progress[A|value|max][B]' +
+ 'meter[A|value|min|max|low|high|optimum][B]' +
+ 'time[A|datetime][B]' +
+ 'ruby[A][B|rt|rp]' +
+ 'rt[A][B]' +
+ 'rp[A][B]' +
+ 'bdo[A][B]' +
+ 'span[A][B]' +
+ 'ins[A|cite|datetime][B]' +
+ 'del[A|cite|datetime][B]' +
+ 'figure[A][C|legend|figcaption]' +
+ 'figcaption[A][C]' +
+ 'img[A|alt|src|height|width|usemap|ismap][]' +
+ 'iframe[A|name|src|height|width|sandbox|seamless][]' +
+ 'embed[A|src|height|width|type][]' +
+ 'object[A|data|type|height|width|usemap|name|form|classid][param]' +
+ 'param[A|name|value][]' +
+ 'details[A|open][C|legend]' +
+ 'command[A|type|label|icon|disabled|checked|radiogroup][]' +
+ 'menu[A|type|label][C|li]' +
+ 'legend[A][C|B]' +
+ 'div[A][C]' +
+ 'source[A|src|type|media][]' +
+ 'audio[A|src|autobuffer|autoplay|loop|controls][source]' +
+ 'video[A|src|autobuffer|autoplay|loop|controls|width|height|poster][source]' +
+ 'hr[A][]' +
+ 'form[A|accept-charset|action|autocomplete|enctype|method|name|novalidate|target][C]' +
+ 'fieldset[A|disabled|form|name][C|legend]' +
+ 'label[A|form|for][B]' +
+ 'input[A|type|accept|alt|autocomplete|autofocus|checked|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|height|list|max|maxlength|min|' +
+ 'multiple|pattern|placeholder|readonly|required|size|src|step|width|files|value|name][]' +
+ 'button[A|autofocus|disabled|form|formaction|formenctype|formmethod|formnovalidate|formtarget|name|value|type][B]' +
+ 'select[A|autofocus|disabled|form|multiple|name|size][option|optgroup]' +
+ 'datalist[A][B|option]' +
+ 'optgroup[A|disabled|label][option]' +
+ 'option[A|disabled|selected|label|value][]' +
+ 'textarea[A|autofocus|disabled|form|maxlength|name|placeholder|readonly|required|rows|cols|wrap][]' +
+ 'keygen[A|autofocus|challenge|disabled|form|keytype|name][]' +
+ 'output[A|for|form|name][B]' +
+ 'canvas[A|width|height][]' +
+ 'map[A|name][B|C]' +
+ 'area[A|shape|coords|href|alt|target|media|rel|ping|type][]' +
+ 'mathml[A][]' +
+ 'svg[A][]' +
+ 'table[A|border][caption|colgroup|thead|tfoot|tbody|tr]' +
+ 'caption[A][C]' +
+ 'colgroup[A|span][col]' +
+ 'col[A|span][]' +
+ 'thead[A][tr]' +
+ 'tfoot[A][tr]' +
+ 'tbody[A][tr]' +
+ 'tr[A][th|td]' +
+ 'th[A|headers|rowspan|colspan|scope][B]' +
+ 'td[A|headers|rowspan|colspan][C]' +
+ 'wbr[A][]'
+ );
+ }
+
+ return html5;
+ };
+
+ function getHTML4() {
+ var html4 = mapCache.html4;
+
+ if (!html4) {
+ // This is the XHTML 1.0 transitional elements with it's attributes and children packed to reduce it's size
+ html4 = mapCache.html4 = 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]'
+ );
+ }
+
+ return html4;
+ };
+
+ tinymce.html.Schema = function(settings) {
+ var self = this, elements = {}, children = {}, patternElements = [], validStyles, schemaItems;
+ var whiteSpaceElementsMap, selfClosingElementsMap, shortEndedElementsMap, boolAttrMap, blockElementsMap, nonEmptyElementsMap, customElementsMap = {};
+
+ // Creates an lookup table map object for the specified option or the default value
+ function createLookupTable(option, default_value, extend) {
+ var value = settings[option];
+
+ if (!value) {
+ // Get cached default map or make it if needed
+ value = mapCache[option];
+
+ if (!value) {
+ value = makeMap(default_value, ' ', makeMap(default_value.toUpperCase(), ' '));
+ value = tinymce.extend(value, extend);
+
+ mapCache[option] = value;
+ }
+ } else {
+ // Create custom map
+ value = makeMap(value, ',', makeMap(value.toUpperCase(), ' '));
+ }
+
+ return value;
+ };
+
+ settings = settings || {};
+ schemaItems = settings.schema == "html5" ? getHTML5() : getHTML4();
+
+ // 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);
+ });
+ }
+
+ // Setup map objects
+ whiteSpaceElementsMap = createLookupTable('whitespace_elements', 'pre script noscript style textarea');
+ selfClosingElementsMap = createLookupTable('self_closing_elements', 'colgroup dd dt li option p td tfoot th thead tr');
+ shortEndedElementsMap = createLookupTable('short_ended_elements', 'area base basefont br col frame hr img input isindex link meta param embed source wbr');
+ boolAttrMap = createLookupTable('boolean_attributes', 'checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls');
+ nonEmptyElementsMap = createLookupTable('non_empty_elements', 'td th iframe video audio object', shortEndedElementsMap);
+ textBlockElementsMap = createLookupTable('text_block_elements', 'h1 h2 h3 h4 h5 h6 p div address pre form ' +
+ 'blockquote center dir fieldset header footer article section hgroup aside nav figure');
+ blockElementsMap = createLookupTable('block_elements', 'hr table tbody thead tfoot ' +
+ 'th tr td li ol ul caption dl dt dd noscript menu isindex samp option datalist select optgroup', textBlockElementsMap);
+
+ // 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(schemaItems, 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.toUpperCase()] = {};
+ blockElementsMap[name] = {};
+ }
+
+ // Add elements clone if needed
+ if (!elements[name]) {
+ elements[name] = elements[cloneName];
+ }
+
+ // 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 schema spec
+ each(schemaItems, function(element, name) {
+ elements[name] = {
+ attributes : element.attributes,
+ attributesOrder : element.attributesOrder
+ };
+
+ children[name] = element.children;
+ });
+
+ // Switch these on HTML4
+ if (settings.schema != "html5") {
+ 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,strong,em,b,i'), function(name) {
+ if (elements[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]');
+
+ // Delete invalid elements
+ if (settings.invalid_elements) {
+ tinymce.each(tinymce.explode(settings.invalid_elements), function(item) {
+ if (elements[item])
+ delete elements[item];
+ });
+ }
+
+ // If the user didn't allow span only allow internal spans
+ if (!getElementRule('span'))
+ addValidElements('span[!data-mce-type|*]');
+
+ self.children = children;
+
+ self.styles = validStyles;
+
+ self.getBoolAttrs = function() {
+ return boolAttrMap;
+ };
+
+ self.getBlockElements = function() {
+ return blockElementsMap;
+ };
+
+ self.getTextBlockElements = function() {
+ return textBlockElementsMap;
+ };
+
+ 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.isValid = function(name, attr) {
+ var attrPatterns, i, rule = getElementRule(name);
+
+ // Check if it's a valid element
+ if (rule) {
+ if (attr) {
+ // Check if attribute name exists
+ if (rule.attributes[attr]) {
+ return true;
+ }
+
+ // Check if attribute matches a regexp pattern
+ attrPatterns = rule.attributePatterns;
+ if (attrPatterns) {
+ i = attrPatterns.length;
+ while (i--) {
+ if (attrPatterns[i].pattern.test(name)) {
+ return true;
+ }
+ }
+ }
+ } else {
+ return true;
+ }
+ }
+
+ // No match
+ return false;
+ };
+
+ self.getElementRule = getElementRule;
+
+ self.getCustomElements = function() {
+ return customElementsMap;
+ };
+
+ self.addValidElements = addValidElements;
+
+ self.setValidElements = setValidElements;
+
+ self.addCustomElements = addCustomElements;
+
+ self.addValidChildren = addValidChildren;
+
+ self.elements = elements;
+ };
+})(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;
+ }
+ };
+
+ function parseAttribute(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
+ });
+ };
+
+ // 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
+ '(?:([A-Za-z0-9\\-\\:\\.]+)((?:\\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 = settings.self_closing_elements || 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, parseAttribute);
+ } 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-mce-') === 0)
+ return false;
+ }
+ }
+
+ // Keep comments
+ if (node.type === 8)
+ 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, textBlockElements, sibling, nextNode;
+
+ nonSplitableElements = tinymce.makeMap('tr,td,th,tbody,thead,tfoot,table');
+ nonEmptyElements = schema.getNonEmptyElements();
+ textBlockElements = schema.getTextBlockElements();
+
+ for (ni = 0; ni < nodes.length; ni++) {
+ node = nodes[ni];
+
+ // Already removed or fixed
+ if (!node.parent || node.fixed)
+ continue;
+
+ // If the invalid element is a text block and the text block is within a parent LI element
+ // Then unwrap the first text block and convert other sibling text blocks to LI elements similar to Word/Open Office
+ if (textBlockElements[node.name] && node.parent.name == 'li') {
+ // Move sibling text blocks after LI element
+ sibling = node.next;
+ while (sibling) {
+ if (textBlockElements[sibling.name]) {
+ sibling.name = 'li';
+ sibling.fixed = true;
+ node.parent.insert(sibling, node.parent);
+ } else {
+ break;
+ }
+
+ sibling = sibling.next;
+ }
+
+ // Unwrap current text block
+ node.unwrap(node);
+ 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 = [], isInWhiteSpacePreservedElement,
+ endWhiteSpaceRegExp, allWhiteSpaceRegExp, isAllWhiteSpaceRegExp, 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;
+ isAllWhiteSpaceRegExp = /^[ \t\r\n]+$/;
+
+ 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;
+ }
+ }
+ };
+
+ function cloneAndExcludeBlocks(input) {
+ var name, output = {};
+
+ for (name in input) {
+ if (name !== 'li' && name != 'p') {
+ output[name] = input[name];
+ }
+ }
+
+ return output;
+ };
+
+ parser = new tinymce.html.SaxParser({
+ validate : validate,
+
+ // Exclude P and LI from DOM parsing since it's treated better by the DOM parser
+ self_closing_elements: cloneAndExcludeBlocks(schema.getSelfClosingElements()),
+
+ 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 (!isInWhiteSpacePreservedElement) {
+ 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;
+
+ // Check if we are inside a whitespace preserved element
+ if (!isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {
+ isInWhiteSpacePreservedElement = true;
+ }
+ }
+ },
+
+ end: function(name) {
+ var textNode, elementRule, text, sibling, tempNode;
+
+ elementRule = validate ? schema.getElementRule(name) : {};
+ if (elementRule) {
+ if (blockElements[name]) {
+ if (!isInWhiteSpacePreservedElement) {
+ // Trim whitespace of the first node in a block
+ textNode = node.firstChild;
+ if (textNode && textNode.type === 3) {
+ text = textNode.value.replace(startWhiteSpaceRegExp, '');
+
+ // Any characters left after trim or should we remove it
+ if (text.length > 0) {
+ textNode.value = text;
+ textNode = textNode.next;
+ } else {
+ sibling = textNode.next;
+ textNode.remove();
+ textNode = sibling;
+ }
+
+ // Remove any pure whitespace siblings
+ while (textNode && textNode.type === 3) {
+ text = textNode.value;
+ sibling = textNode.next;
+
+ if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {
+ textNode.remove();
+ textNode = sibling;
+ }
+
+ textNode = sibling;
+ }
+ }
+
+ // Trim whitespace of the last node in a block
+ textNode = node.lastChild;
+ if (textNode && textNode.type === 3) {
+ text = textNode.value.replace(endWhiteSpaceRegExp, '');
+
+ // Any characters left after trim or should we remove it
+ if (text.length > 0) {
+ textNode.value = text;
+ textNode = textNode.prev;
+ } else {
+ sibling = textNode.prev;
+ textNode.remove();
+ textNode = sibling;
+ }
+
+ // Remove any pure whitespace siblings
+ while (textNode && textNode.type === 3) {
+ text = textNode.value;
+ sibling = textNode.prev;
+
+ if (text.length === 0 || isAllWhiteSpaceRegExp.test(text)) {
+ textNode.remove();
+ textNode = sibling;
+ }
+
+ textNode = sibling;
+ }
+ }
+ }
+
+ // Trim start white space
+ // Removed due to: #5424
+ /*textNode = node.prev;
+ if (textNode && textNode.type === 3) {
+ text = textNode.value.replace(startWhiteSpaceRegExp, '');
+
+ if (text.length > 0)
+ textNode.value = text;
+ else
+ textNode.remove();
+ }*/
+ }
+
+ // Check if we exited a whitespace preserved element
+ if (isInWhiteSpacePreservedElement && whiteSpaceElements[name]) {
+ isInWhiteSpacePreservedElement = false;
+ }
+
+ // 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 && !node.attributes.map.id) {
+ 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 = tinymce.extend({}, schema.getBlockElements()),
+ nonEmptyElements = schema.getNonEmptyElements(), parent, lastParent, 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 left 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';
+ }
+ }
+ }
+ } else {
+ // Replaces BR elements inside inline elements like <p><b><i><br></i></b></p> so they become <p><b><i>&nbsp;</i></b></p>
+ lastParent = node;
+ while (parent.firstChild === lastParent && parent.lastChild === lastParent) {
+ lastParent = parent;
+
+ if (blockElements[parent.name]) {
+ break;
+ }
+
+ parent = parent.parent;
+ }
+
+ if (lastParent === parent) {
+ textNode = new tinymce.html.Node('#text', 3);
+ textNode.value = '\u00a0';
+ node.replace(textNode);
+ }
+ }
+ }
+ });
+ }
+
+ // Force anchor names closed, unless the setting "allow_html_in_named_anchor" is explicitly included.
+ if (!settings.allow_html_in_named_anchor) {
+ self.addAttributeFilter('id,name', function(nodes, name) {
+ var i = nodes.length, sibling, prevSibling, parent, node;
+
+ while (i--) {
+ node = nodes[i];
+ if (node.name === 'a' && node.firstChild && !node.attr('href')) {
+ parent = node.parent;
+
+ // Move children after current node
+ sibling = node.lastChild;
+ do {
+ prevSibling = sibling.prev;
+ parent.insert(sibling, node);
+ sibling = prevSibling;
+ } while (sibling);
+ }
+ }
+ });
+ }
+ }
+})(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);
+
+// JSLint defined globals
+/*global tinymce:false, window:false */
+
+tinymce.dom = {};
+
+(function(namespace, expando) {
+ var w3cEventModel = !!document.addEventListener;
+
+ function addEvent(target, name, callback, capture) {
+ if (target.addEventListener) {
+ target.addEventListener(name, callback, capture || false);
+ } else if (target.attachEvent) {
+ target.attachEvent('on' + name, callback);
+ }
+ }
+
+ function removeEvent(target, name, callback, capture) {
+ if (target.removeEventListener) {
+ target.removeEventListener(name, callback, capture || false);
+ } else if (target.detachEvent) {
+ target.detachEvent('on' + name, callback);
+ }
+ }
+
+ function fix(original_event, data) {
+ var name, event = data || {};
+
+ // Dummy function that gets replaced on the delegation state functions
+ function returnFalse() {
+ return false;
+ }
+
+ // Dummy function that gets replaced on the delegation state functions
+ function returnTrue() {
+ return true;
+ }
+
+ // Copy all properties from the original event
+ for (name in original_event) {
+ // layerX/layerY is deprecated in Chrome and produces a warning
+ if (name !== "layerX" && name !== "layerY") {
+ event[name] = original_event[name];
+ }
+ }
+
+ // Normalize target IE uses srcElement
+ if (!event.target) {
+ event.target = event.srcElement || document;
+ }
+
+ // Add preventDefault method
+ event.preventDefault = function() {
+ event.isDefaultPrevented = returnTrue;
+
+ // Execute preventDefault on the original event object
+ if (original_event) {
+ if (original_event.preventDefault) {
+ original_event.preventDefault();
+ } else {
+ original_event.returnValue = false; // IE
+ }
+ }
+ };
+
+ // Add stopPropagation
+ event.stopPropagation = function() {
+ event.isPropagationStopped = returnTrue;
+
+ // Execute stopPropagation on the original event object
+ if (original_event) {
+ if (original_event.stopPropagation) {
+ original_event.stopPropagation();
+ } else {
+ original_event.cancelBubble = true; // IE
+ }
+ }
+ };
+
+ // Add stopImmediatePropagation
+ event.stopImmediatePropagation = function() {
+ event.isImmediatePropagationStopped = returnTrue;
+ event.stopPropagation();
+ };
+
+ // Add event delegation states
+ if (!event.isDefaultPrevented) {
+ event.isDefaultPrevented = returnFalse;
+ event.isPropagationStopped = returnFalse;
+ event.isImmediatePropagationStopped = returnFalse;
+ }
+
+ return event;
+ }
+
+ function bindOnReady(win, callback, event_utils) {
+ var doc = win.document, event = {type: 'ready'};
+
+ // Gets called when the DOM is ready
+ function readyHandler() {
+ if (!event_utils.domLoaded) {
+ event_utils.domLoaded = true;
+ callback(event);
+ }
+ }
+
+ // Page already loaded then fire it directly
+ if (doc.readyState == "complete") {
+ readyHandler();
+ return;
+ }
+
+ // Use W3C method
+ if (w3cEventModel) {
+ addEvent(win, 'DOMContentLoaded', readyHandler);
+ } else {
+ // Use IE method
+ addEvent(doc, "readystatechange", function() {
+ if (doc.readyState === "complete") {
+ removeEvent(doc, "readystatechange", arguments.callee);
+ readyHandler();
+ }
+ });
+
+ // Wait until we can scroll, when we can the DOM is initialized
+ if (doc.documentElement.doScroll && win === win.top) {
+ (function() {
+ 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;
+ }
+
+ readyHandler();
+ })();
+ }
+ }
+
+ // Fallback if any of the above methods should fail for some odd reason
+ addEvent(win, 'load', readyHandler);
+ }
+
+ function EventUtils(proxy) {
+ var self = this, events = {}, count, isFocusBlurBound, hasFocusIn, hasMouseEnterLeave, mouseEnterLeave;
+
+ hasMouseEnterLeave = "onmouseenter" in document.documentElement;
+ hasFocusIn = "onfocusin" in document.documentElement;
+ mouseEnterLeave = {mouseenter: 'mouseover', mouseleave: 'mouseout'};
+ count = 1;
+
+ // State if the DOMContentLoaded was executed or not
+ self.domLoaded = false;
+ self.events = events;
+
+ function executeHandlers(evt, id) {
+ var callbackList, i, l, callback;
+
+ callbackList = events[id][evt.type];
+ if (callbackList) {
+ for (i = 0, l = callbackList.length; i < l; i++) {
+ callback = callbackList[i];
+
+ // Check if callback exists might be removed if a unbind is called inside the callback
+ if (callback && callback.func.call(callback.scope, evt) === false) {
+ evt.preventDefault();
+ }
+
+ // Should we stop propagation to immediate listeners
+ if (evt.isImmediatePropagationStopped()) {
+ return;
+ }
+ }
+ }
+ }
+
+ self.bind = function(target, names, callback, scope) {
+ var id, callbackList, i, name, fakeName, nativeHandler, capture, win = window;
+
+ // Native event handler function patches the event and executes the callbacks for the expando
+ function defaultNativeHandler(evt) {
+ executeHandlers(fix(evt || win.event), id);
+ }
+
+ // Don't bind to text nodes or comments
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return;
+ }
+
+ // Create or get events id for the target
+ if (!target[expando]) {
+ id = count++;
+ target[expando] = id;
+ events[id] = {};
+ } else {
+ id = target[expando];
+
+ if (!events[id]) {
+ events[id] = {};
+ }
+ }
+
+ // Setup the specified scope or use the target as a default
+ scope = scope || target;
+
+ // Split names and bind each event, enables you to bind multiple events with one call
+ names = names.split(' ');
+ i = names.length;
+ while (i--) {
+ name = names[i];
+ nativeHandler = defaultNativeHandler;
+ fakeName = capture = false;
+
+ // Use ready instead of DOMContentLoaded
+ if (name === "DOMContentLoaded") {
+ name = "ready";
+ }
+
+ // DOM is already ready
+ if ((self.domLoaded || target.readyState == 'complete') && name === "ready") {
+ self.domLoaded = true;
+ callback.call(scope, fix({type: name}));
+ continue;
+ }
+
+ // Handle mouseenter/mouseleaver
+ if (!hasMouseEnterLeave) {
+ fakeName = mouseEnterLeave[name];
+
+ if (fakeName) {
+ nativeHandler = function(evt) {
+ var current, related;
+
+ current = evt.currentTarget;
+ related = evt.relatedTarget;
+
+ // Check if related is inside the current target if it's not then the event should be ignored since it's a mouseover/mouseout inside the element
+ if (related && current.contains) {
+ // Use contains for performance
+ related = current.contains(related);
+ } else {
+ while (related && related !== current) {
+ related = related.parentNode;
+ }
+ }
+
+ // Fire fake event
+ if (!related) {
+ evt = fix(evt || win.event);
+ evt.type = evt.type === 'mouseout' ? 'mouseleave' : 'mouseenter';
+ evt.target = current;
+ executeHandlers(evt, id);
+ }
+ };
+ }
+ }
+
+ // Fake bubbeling of focusin/focusout
+ if (!hasFocusIn && (name === "focusin" || name === "focusout")) {
+ capture = true;
+ fakeName = name === "focusin" ? "focus" : "blur";
+ nativeHandler = function(evt) {
+ evt = fix(evt || win.event);
+ evt.type = evt.type === 'focus' ? 'focusin' : 'focusout';
+ executeHandlers(evt, id);
+ };
+ }
+
+ // Setup callback list and bind native event
+ callbackList = events[id][name];
+ if (!callbackList) {
+ events[id][name] = callbackList = [{func: callback, scope: scope}];
+ callbackList.fakeName = fakeName;
+ callbackList.capture = capture;
+
+ // Add the nativeHandler to the callback list so that we can later unbind it
+ callbackList.nativeHandler = nativeHandler;
+ if (!w3cEventModel) {
+ callbackList.proxyHandler = proxy(id);
+ }
+
+ // Check if the target has native events support
+ if (name === "ready") {
+ bindOnReady(target, nativeHandler, self);
+ } else {
+ addEvent(target, fakeName || name, w3cEventModel ? nativeHandler : callbackList.proxyHandler, capture);
+ }
+ } else {
+ // If it already has an native handler then just push the callback
+ callbackList.push({func: callback, scope: scope});
+ }
+ }
+
+ target = callbackList = 0; // Clean memory for IE
+
+ return callback;
+ };
+
+ self.unbind = function(target, names, callback) {
+ var id, callbackList, i, ci, name, eventMap;
+
+ // Don't bind to text nodes or comments
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return self;
+ }
+
+ // Unbind event or events if the target has the expando
+ id = target[expando];
+ if (id) {
+ eventMap = events[id];
+
+ // Specific callback
+ if (names) {
+ names = names.split(' ');
+ i = names.length;
+ while (i--) {
+ name = names[i];
+ callbackList = eventMap[name];
+
+ // Unbind the event if it exists in the map
+ if (callbackList) {
+ // Remove specified callback
+ if (callback) {
+ ci = callbackList.length;
+ while (ci--) {
+ if (callbackList[ci].func === callback) {
+ callbackList.splice(ci, 1);
+ }
+ }
+ }
+
+ // Remove all callbacks if there isn't a specified callback or there is no callbacks left
+ if (!callback || callbackList.length === 0) {
+ delete eventMap[name];
+ removeEvent(target, callbackList.fakeName || name, w3cEventModel ? callbackList.nativeHandler : callbackList.proxyHandler, callbackList.capture);
+ }
+ }
+ }
+ } else {
+ // All events for a specific element
+ for (name in eventMap) {
+ callbackList = eventMap[name];
+ removeEvent(target, callbackList.fakeName || name, w3cEventModel ? callbackList.nativeHandler : callbackList.proxyHandler, callbackList.capture);
+ }
+
+ eventMap = {};
+ }
+
+ // Check if object is empty, if it isn't then we won't remove the expando map
+ for (name in eventMap) {
+ return self;
+ }
+
+ // Delete event object
+ delete events[id];
+
+ // Remove expando from target
+ try {
+ // IE will fail here since it can't delete properties from window
+ delete target[expando];
+ } catch (ex) {
+ // IE will set it to null
+ target[expando] = null;
+ }
+ }
+
+ return self;
+ };
+
+ self.fire = function(target, name, args) {
+ var id, event;
+
+ // Don't bind to text nodes or comments
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return self;
+ }
+
+ // Build event object by patching the args
+ event = fix(null, args);
+ event.type = name;
+
+ do {
+ // Found an expando that means there is listeners to execute
+ id = target[expando];
+ if (id) {
+ executeHandlers(event, id);
+ }
+
+ // Walk up the DOM
+ target = target.parentNode || target.ownerDocument || target.defaultView || target.parentWindow;
+ } while (target && !event.isPropagationStopped());
+
+ return self;
+ };
+
+ self.clean = function(target) {
+ var i, children, unbind = self.unbind;
+
+ // Don't bind to text nodes or comments
+ if (!target || target.nodeType === 3 || target.nodeType === 8) {
+ return self;
+ }
+
+ // Unbind any element on the specificed target
+ if (target[expando]) {
+ unbind(target);
+ }
+
+ // Target doesn't have getElementsByTagName it's probably a window object then use it's document to find the children
+ if (!target.getElementsByTagName) {
+ target = target.document;
+ }
+
+ // Remove events from each child element
+ if (target && target.getElementsByTagName) {
+ unbind(target);
+
+ children = target.getElementsByTagName('*');
+ i = children.length;
+ while (i--) {
+ target = children[i];
+
+ if (target[expando]) {
+ unbind(target);
+ }
+ }
+ }
+
+ return self;
+ };
+
+ self.callNativeHandler = function(id, evt) {
+ if (events) {
+ events[id][evt.type].nativeHandler(evt);
+ }
+ };
+
+ self.destory = function() {
+ events = {};
+ };
+
+ // Legacy function calls
+
+ self.add = function(target, events, func, scope) {
+ // Old API supported direct ID assignment
+ if (typeof(target) === "string") {
+ target = document.getElementById(target);
+ }
+
+ // Old API supported multiple targets
+ if (target && target instanceof Array) {
+ var i = target.length;
+
+ while (i--) {
+ self.add(target[i], events, func, scope);
+ }
+
+ return;
+ }
+
+ // Old API called ready init
+ if (events === "init") {
+ events = "ready";
+ }
+
+ return self.bind(target, events instanceof Array ? events.join(' ') : events, func, scope);
+ };
+
+ self.remove = function(target, events, func, scope) {
+ if (!target) {
+ return self;
+ }
+
+ // Old API supported direct ID assignment
+ if (typeof(target) === "string") {
+ target = document.getElementById(target);
+ }
+
+ // Old API supported multiple targets
+ if (target instanceof Array) {
+ var i = target.length;
+
+ while (i--) {
+ self.remove(target[i], events, func, scope);
+ }
+
+ return self;
+ }
+
+ return self.unbind(target, events instanceof Array ? events.join(' ') : events, func);
+ };
+
+ self.clear = function(target) {
+ // Old API supported direct ID assignment
+ if (typeof(target) === "string") {
+ target = document.getElementById(target);
+ }
+
+ return self.clean(target);
+ };
+
+ self.cancel = function(e) {
+ if (e) {
+ self.prevent(e);
+ self.stop(e);
+ }
+
+ return false;
+ };
+
+ self.prevent = function(e) {
+ if (!e.preventDefault) {
+ e = fix(e);
+ }
+
+ e.preventDefault();
+
+ return false;
+ };
+
+ self.stop = function(e) {
+ if (!e.stopPropagation) {
+ e = fix(e);
+ }
+
+ e.stopPropagation();
+
+ return false;
+ };
+ }
+
+ namespace.EventUtils = EventUtils;
+
+ namespace.Event = new EventUtils(function(id) {
+ return function(evt) {
+ tinymce.dom.Event.callNativeHandler(id, evt);
+ };
+ });
+
+ // Bind ready event when tinymce script is loaded
+ namespace.Event.bind(window, 'ready', function() {});
+
+ namespace = 0;
+})(tinymce.dom, 'data-mce-expando'); // Namespace and expando
+
+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) {
+ // Shorten names
+ var each = tinymce.each,
+ is = tinymce.is,
+ isWebKit = tinymce.isWebKit,
+ isIE = tinymce.isIE,
+ Entities = tinymce.html.Entities,
+ simpleSelectorRe = /^([a-z0-9],?)+$/i,
+ 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, blockElementsMap;
+
+ 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;
+ }
+ }
+
+ t.fixDoc(d);
+ t.events = s.ownEvents ? new tinymce.dom.EventUtils(s.proxy) : tinymce.dom.Event;
+ tinymce.addUnload(t.destroy, t);
+ blockElementsMap = s.schema ? s.schema.getBlockElements() : {};
+
+ t.isBlock = function(node) {
+ // Fix for #5446
+ if (!node) {
+ return false;
+ }
+
+ // This function is called in module pattern style since it might be executed with the wrong this scope
+ 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];
+ };
+ },
+
+ fixDoc: function(doc) {
+ var settings = this.settings, name;
+
+ if (isIE && settings.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) {
+ doc.createElement(name);
+ });
+
+ // Create all custom elements
+ for (name in settings.schema.getCustomElements()) {
+ doc.createElement(name);
+ }
+ }
+ },
+
+ clone: function(node, deep) {
+ var self = this, clone, doc;
+
+ // TODO: Add feature detection here in the future
+ if (!isIE || node.nodeType !== 1 || deep) {
+ return node.cloneNode(deep);
+ }
+
+ doc = self.doc;
+
+ // Make a HTML5 safe shallow copy
+ if (!deep) {
+ clone = doc.createElement(node.nodeName);
+
+ // Copy attribs
+ each(self.getAttribs(node), function(attr) {
+ self.setAttrib(clone, attr.nodeName, self.getAttrib(node, attr.nodeName));
+ });
+
+ return clone;
+ }
+/*
+ // Setup HTML5 patched document fragment
+ if (!self.frag) {
+ self.frag = doc.createDocumentFragment();
+ self.fixDoc(self.frag);
+ }
+
+ // Make a deep copy by adding it to the document fragment then removing it this removed the :section
+ clone = doc.createElement('div');
+ self.frag.appendChild(clone);
+ clone.innerHTML = node.outerHTML;
+ self.frag.removeChild(clone);
+*/
+ return clone.firstChild;
+ },
+
+ 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, 10) || e.offsetWidth || e.clientWidth,
+ h : parseInt(h, 10) || 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;
+ var originalValue = e.getAttribute(n);
+ 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);
+
+ // fire onChangeAttrib event for attributes that have changed
+ if (tinyMCE.activeEditor && originalValue != v) {
+ var ed = tinyMCE.activeEditor;
+ ed.onSetAttrib.dispatch(ed, e, n, v);
+ }
+ });
+ },
+
+ 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);
+ },
+
+ addStyle: function(cssText) {
+ var doc = this.doc, head;
+
+ // Create style element if needed
+ styleElm = doc.getElementById('mceDefaultStyles');
+ if (!styleElm) {
+ styleElm = doc.createElement('style'),
+ styleElm.id = 'mceDefaultStyles';
+ styleElm.type = 'text/css';
+
+ head = doc.getElementsByTagName('head')[0];
+ if (head.firstChild) {
+ head.insertBefore(styleElm, head.firstChild);
+ } else {
+ head.appendChild(styleElm);
+ }
+ }
+
+ // Append style data to old or new style element
+ if (styleElm.styleSheet) {
+ styleElm.styleSheet.cssText += cssText;
+ } else {
+ styleElm.appendChild(doc.createTextNode(cssText));
+ }
+ },
+
+ loadCSS : function(u) {
+ var t = this, d = t.doc, head;
+
+ if (!u)
+ u = '';
+
+ head = d.getElementsByTagName('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
+ var newElement = self.create('div');
+ newElement.innerHTML = '<br />' + html;
+
+ // Add all children from div to target
+ each (tinymce.grep(newElement.childNodes), function(node, i) {
+ // Skip br element
+ if (i && element.canHaveHTML)
+ 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;
+ });
+ },
+
+ 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, 10).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, brCount = 0;
+
+ node = node.firstChild;
+ if (node) {
+ walker = new tinymce.dom.TreeWalker(node, node.parentNode);
+ 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> or <p><span><br /></span></p>
+ if (name === 'br') {
+ brCount++;
+ 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 comment nodes
+ if (type == 8)
+ return false;
+
+ // Keep non whitespace text nodes
+ if ((type === 3 && !whiteSpaceRegExp.test(node.nodeValue)))
+ return false;
+ } while (node = walker.next());
+ }
+
+ return brCount <= 1;
+ },
+
+ destroy : function(s) {
+ var t = this;
+
+ t.win = t.doc = t.root = t.events = t.frag = 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;
+
+ function surroundedBySpans(node) {
+ var previousIsSpan = node.previousSibling && node.previousSibling.nodeName == 'SPAN';
+ var nextIsSpan = node.nextSibling && node.nextSibling.nodeName == 'SPAN';
+ return previousIsSpan && nextIsSpan;
+ }
+
+ 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>"
+ // Also keep text nodes with only spaces if surrounded by spans.
+ // eg. "<p><span>a</span> <span>b</span></p>" should keep space between a and b
+ var trimmedLength = tinymce.trim(node.nodeValue).length;
+ if (!t.isBlock(node.parentNode) || trimmedLength > 0 || trimmedLength === 0 && surroundedBySpans(node))
+ 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) {
+ return this.events.add(target, name, func, scope || this);
+ },
+
+ unbind : function(target, name, func) {
+ return this.events.remove(target, name, func);
+ },
+
+ fire : function(target, name, evt) {
+ return this.events.fire(target, name, evt);
+ },
+
+ // Returns the content editable state of a node
+ getContentEditable: function(node) {
+ var contentEditable;
+
+ // Check type
+ if (node.nodeType != 1) {
+ return null;
+ }
+
+ // Check for fake content editable
+ contentEditable = node.getAttribute("data-mce-contenteditable");
+ if (contentEditable && contentEditable !== "inherit") {
+ return contentEditable;
+ }
+
+ // Check for real content editable
+ return node.contentEditable !== "inherit" ? node.contentEditable : null;
+ },
+
+
+ _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,
+ toStringIE : toStringIE
+ });
+
+ function createDocumentFragment() {
+ return doc.createDocumentFragment();
+ };
+
+ 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, start, len;
+
+ if (how != DELETE)
+ frag = 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) {
+ n = t[START_CONTAINER];
+ start = t[START_OFFSET];
+ len = t[END_OFFSET] - t[START_OFFSET];
+
+ if (start === 0 && len >= n.nodeValue.length - 1) {
+ n.parentNode.removeChild(n);
+ } else {
+ n.deleteData(start, len);
+ }
+
+ // Nothing is partially selected, so collapse to start point
+ t.collapse(TRUE);
+ }
+
+ if (how == DELETE)
+ return;
+
+ if (sub.length > 0) {
+ 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 (n && 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 = 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 = 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 (n && 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 = 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 = dom.clone(n, FALSE);
+ newNode.nodeValue = newNodeValue;
+
+ return newNode;
+ }
+
+ if (how == DELETE)
+ return;
+
+ return dom.clone(n, FALSE);
+ };
+
+ function _traverseFullySelected(n, how) {
+ if (how != DELETE)
+ return how == CLONE ? dom.clone(n, TRUE) : n;
+
+ n.parentNode.removeChild(n);
+ };
+
+ function toStringIE() {
+ return dom.create('body', null, cloneContents()).outerText;
+ }
+
+ return t;
+ };
+
+ ns.Range = Range;
+
+ // Older IE versions doesn't let you override toString by it's constructor so we have to stick it in the prototype
+ Range.prototype.toString = function() {
+ return this.toStringIE();
+ };
+})(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);
+
+ // Walk character by character in text node until we hit the selected range endpoint, hit the end of document or parent isn't the right one
+ // We need to walk char by char since rng.text or rng.htmlText will trim line endings
+ offset = 0;
+ while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) {
+ if (checkRng.move('character', 1) === 0 || parent != checkRng.parentElement()) {
+ break;
+ }
+
+ offset++;
+ }
+ } else {
+ // Child position is after the selection endpoint
+ checkRng.collapse(true);
+
+ // Walk character by character in text node until we hit the selected range endpoint, hit the end of document or parent isn't the right one
+ offset = 0;
+ while (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) !== 0) {
+ if (checkRng.move('character', -1) === 0 || parent != checkRng.parentElement()) {
+ break;
+ }
+
+ offset++;
+ }
+ }
+
+ 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 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, sibling,
+ doc = selection.dom.doc, body = doc.body, nativeRng, ctrlElm;
+
+ 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 if (container.canHaveHTML) {
+ // Empty node selection for example <div>|</div>
+ // Setting innerHTML with a span marker then remove that marker seems to keep empty block elements open
+ container.innerHTML = '<span>\uFEFF</span>';
+ marker = container.firstChild;
+ tmpRng.moveToElementText(marker);
+ tmpRng.collapse(FALSE); // Collapse false works better than true for some odd reason
+ }
+
+ 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) {
+ // Trick to place the caret inside an empty block element like <p></p>
+ if (startOffset == endOffset && !startContainer.hasChildNodes()) {
+ if (startContainer.canHaveHTML) {
+ // Check if previous sibling is an empty block if it is then we need to render it
+ // IE would otherwise move the caret into the sibling instead of the empty startContainer see: #5236
+ // Example this: <p></p><p>|</p> would become this: <p>|</p><p></p>
+ sibling = startContainer.previousSibling;
+ if (sibling && !sibling.hasChildNodes() && dom.isBlock(sibling)) {
+ sibling.innerHTML = '\uFEFF';
+ } else {
+ sibling = null;
+ }
+
+ startContainer.innerHTML = '<span>\uFEFF</span><span>\uFEFF</span>';
+ ieRng.moveToElementText(startContainer.lastChild);
+ ieRng.select();
+ dom.doc.selection.clear();
+ startContainer.innerHTML = '';
+
+ if (sibling) {
+ sibling.innerHTML = '';
+ }
+ return;
+ } else {
+ startOffset = dom.nodeIndex(startContainer);
+ startContainer = startContainer.parentNode;
+ }
+ }
+
+ if (startOffset == endOffset - 1) {
+ try {
+ ctrlElm = startContainer.childNodes[startOffset];
+ ctrlRng = body.createControlRange();
+ ctrlRng.addElement(ctrlElm);
+ ctrlRng.select();
+
+ // Check if the range produced is on the correct element and is a control range
+ // On IE 8 it will select the parent contentEditable container if you select an inner element see: #5398
+ nativeRng = selection.getRng();
+ if (nativeRng.item && ctrlElm === nativeRng.item(0)) {
+ 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
+ * Copyright, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ expando = "sizcache",
+ done = 0,
+ toString = Object.prototype.toString,
+ hasDuplicate = false,
+ baseHasDuplicate = true,
+ rBackslash = /\\/g,
+ rReturn = /\r\n/g,
+ rNonWord = /\W/;
+
+// 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 m, set, checkSet, extra, ret, cur, pop, i,
+ prune = true,
+ contextXML = Sizzle.isXML( context ),
+ parts = [],
+ soFar = selector;
+
+ // 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, seed );
+
+ } 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, seed );
+ }
+ }
+
+ } 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, i, len, match, type, left;
+
+ if ( !expr ) {
+ return [];
+ }
+
+ for ( i = 0, len = Expr.order.length; i < len; i++ ) {
+ type = Expr.order[i];
+
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+ left = match[1];
+ match.splice( 1, 1 );
+
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
+ match[1] = (match[1] || "").replace( rBackslash, "" );
+ set = Expr.find[ type ]( match, context, isXML );
+
+ if ( set != null ) {
+ expr = expr.replace( Expr.match[ type ], "" );
+ break;
+ }
+ }
+ }
+ }
+
+ if ( !set ) {
+ set = typeof context.getElementsByTagName !== "undefined" ?
+ context.getElementsByTagName( "*" ) :
+ [];
+ }
+
+ return { set: set, expr: expr };
+};
+
+Sizzle.filter = function( expr, set, inplace, not ) {
+ var match, anyFound,
+ type, found, item, filter, left,
+ i, pass,
+ old = expr,
+ result = [],
+ curLoop = set,
+ isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
+
+ while ( expr && set.length ) {
+ for ( type in Expr.filter ) {
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+ filter = Expr.filter[ type ];
+ 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 ( i = 0; (item = curLoop[i]) != null; i++ ) {
+ if ( item ) {
+ found = filter( item, match, i, curLoop );
+ 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 new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+var getText = Sizzle.getText = function( elem ) {
+ var i, node,
+ nodeType = elem.nodeType,
+ ret = "";
+
+ if ( nodeType ) {
+ if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+ // Use textContent || innerText for elements
+ if ( typeof elem.textContent === 'string' ) {
+ return elem.textContent;
+ } else if ( typeof elem.innerText === 'string' ) {
+ // Replace IE's carriage returns
+ return elem.innerText.replace( rReturn, '' );
+ } else {
+ // Traverse it's children
+ for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
+ ret += getText( elem );
+ }
+ }
+ } else if ( nodeType === 3 || nodeType === 4 ) {
+ return elem.nodeValue;
+ }
+ } else {
+
+ // If no nodeType, this is expected to be an array
+ for ( i = 0; (node = elem[i]); i++ ) {
+ // Do not traverse comment nodes
+ if ( node.nodeType !== 8 ) {
+ ret += getText( node );
+ }
+ }
+ }
+ return ret;
+};
+
+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|(#?(?:[\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( elem ) {
+ return elem.getAttribute( "href" );
+ },
+ type: function( elem ) {
+ return elem.getAttribute( "type" );
+ }
+ },
+
+ relative: {
+ "+": function(checkSet, part){
+ var isPartStr = typeof part === "string",
+ isTag = isPartStr && !rNonWord.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 elem,
+ isPartStr = typeof part === "string",
+ i = 0,
+ l = checkSet.length;
+
+ if ( isPartStr && !rNonWord.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 nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
+
+ if ( typeof part === "string" && !rNonWord.test( part ) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
+ },
+
+ "~": function( checkSet, part, isXML ) {
+ var nodeCheck,
+ doneName = done++,
+ checkFn = dirCheck;
+
+ if ( typeof part === "string" && !rNonWord.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 ) {
+ if ( typeof context.getElementsByTagName !== "undefined" ) {
+ return context.getElementsByTagName( match[1] );
+ }
+ }
+ },
+ preFilter: {
+ CLASS: function( match, curLoop, inplace, result, not, isXML ) {
+ match = " " + match[1].replace( rBackslash, "" ) + " ";
+
+ 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\r]/g, " ").indexOf(match) >= 0) ) {
+ if ( !inplace ) {
+ result.push( elem );
+ }
+
+ } else if ( inplace ) {
+ curLoop[i] = false;
+ }
+ }
+ }
+
+ return false;
+ },
+
+ ID: function( match ) {
+ return match[1].replace( rBackslash, "" );
+ },
+
+ TAG: function( match, curLoop ) {
+ return match[1].replace( rBackslash, "" ).toLowerCase();
+ },
+
+ CHILD: function( match ) {
+ if ( match[1] === "nth" ) {
+ if ( !match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ match[2] = match[2].replace(/^\+|\s*/g, '');
+
+ // 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;
+ }
+ else if ( match[2] ) {
+ Sizzle.error( match[0] );
+ }
+
+ // TODO: Move to normal caching system
+ match[0] = done++;
+
+ return match;
+ },
+
+ ATTR: function( match, curLoop, inplace, result, not, isXML ) {
+ var name = match[1] = match[1].replace( rBackslash, "" );
+
+ if ( !isXML && Expr.attrMap[name] ) {
+ match[1] = Expr.attrMap[name];
+ }
+
+ // Handle if an un-quoted value was used
+ match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
+
+ 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
+ if ( elem.parentNode ) {
+ 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 ) {
+ var attr = elem.getAttribute( "type" ), type = elem.type;
+ // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
+ // use getAttribute instead to test this case
+ return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
+ },
+
+ radio: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
+ },
+
+ checkbox: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
+ },
+
+ file: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
+ },
+
+ password: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
+ },
+
+ submit: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "submit" === elem.type;
+ },
+
+ image: function( elem ) {
+ return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
+ },
+
+ reset: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return (name === "input" || name === "button") && "reset" === elem.type;
+ },
+
+ button: function( elem ) {
+ var name = elem.nodeName.toLowerCase();
+ return name === "input" && "button" === elem.type || name === "button";
+ },
+
+ input: function( elem ) {
+ return (/input|select|textarea|button/i).test( elem.nodeName );
+ },
+
+ focus: function( elem ) {
+ return elem === elem.ownerDocument.activeElement;
+ }
+ },
+ 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 || 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( name );
+ }
+ },
+
+ CHILD: function( elem, match ) {
+ var first, last,
+ doneName, parent, cache,
+ count, diff,
+ 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;
+
+ /* falls through */
+ case "last":
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+
+ return true;
+
+ case "nth":
+ first = match[2];
+ last = match[3];
+
+ if ( first === 1 && last === 0 ) {
+ return true;
+ }
+
+ doneName = match[0];
+ parent = elem.parentNode;
+
+ if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
+ count = 0;
+
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
+ if ( node.nodeType === 1 ) {
+ node.nodeIndex = ++count;
+ }
+ }
+
+ parent[ expando ] = doneName;
+ }
+
+ 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 && 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 = Sizzle.attr ?
+ Sizzle.attr( elem, name ) :
+ 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 && Sizzle.attr ?
+ result != null :
+ 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) );
+}
+// Expose origPOS
+// "global" as in regardless of relation to brackets/parens
+Expr.match.globalPOS = origPOS;
+
+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 i = 0,
+ ret = results || [];
+
+ 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 ) {
+ // The nodes are identical, we can exit early
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // Fallback to using sourceIndex (in IE) if it's available on both nodes
+ } else if ( a.sourceIndex && b.sourceIndex ) {
+ return a.sourceIndex - b.sourceIndex;
+ }
+
+ var al, bl,
+ ap = [],
+ bp = [],
+ aup = a.parentNode,
+ bup = b.parentNode,
+ cur = aup;
+
+ // If the nodes are siblings (or identical) we can do a quick check
+ 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;
+ };
+}
+
+// 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(),
+ root = document.documentElement;
+
+ form.innerHTML = "<a name='" + id + "'/>";
+
+ // Inject it into the root element, check its status, and remove it quickly
+ 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 );
+
+ // release memory in IE
+ root = form = null;
+})();
+
+(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 );
+ };
+ }
+
+ // release memory in IE
+ div = null;
+})();
+
+if ( document.querySelectorAll ) {
+ (function(){
+ var oldSizzle = Sizzle,
+ div = document.createElement("div"),
+ id = "__sizzle__";
+
+ 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) ) {
+ // See if we find a selector to speed up
+ var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
+
+ if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
+ // Speed-up: Sizzle("TAG")
+ if ( match[1] ) {
+ return makeArray( context.getElementsByTagName( query ), extra );
+
+ // Speed-up: Sizzle(".CLASS")
+ } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
+ return makeArray( context.getElementsByClassName( match[2] ), extra );
+ }
+ }
+
+ if ( context.nodeType === 9 ) {
+ // Speed-up: Sizzle("body")
+ // The body element only exists once, optimize finding it
+ if ( query === "body" && context.body ) {
+ return makeArray( [ context.body ], extra );
+
+ // Speed-up: Sizzle("#ID")
+ } else if ( match && match[3] ) {
+ var elem = context.getElementById( match[3] );
+
+ // 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[3] ) {
+ return makeArray( [ elem ], extra );
+ }
+
+ } else {
+ return makeArray( [], extra );
+ }
+ }
+
+ 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 oldContext = context,
+ old = context.getAttribute( "id" ),
+ nid = old || id,
+ hasParent = context.parentNode,
+ relativeHierarchySelector = /^\s*[+~]/.test( query );
+
+ if ( !old ) {
+ context.setAttribute( "id", nid );
+ } else {
+ nid = nid.replace( /'/g, "\\$&" );
+ }
+ if ( relativeHierarchySelector && hasParent ) {
+ context = context.parentNode;
+ }
+
+ try {
+ if ( !relativeHierarchySelector || hasParent ) {
+ return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
+ }
+
+ } catch(pseudoError) {
+ } finally {
+ if ( !old ) {
+ oldContext.removeAttribute( "id" );
+ }
+ }
+ }
+ }
+
+ return oldSizzle(query, context, extra, seed);
+ };
+
+ for ( var prop in oldSizzle ) {
+ Sizzle[ prop ] = oldSizzle[ prop ];
+ }
+
+ // release memory in IE
+ div = null;
+ })();
+}
+
+(function(){
+ var html = document.documentElement,
+ matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
+
+ if ( matches ) {
+ // Check to see if it's possible to do matchesSelector
+ // on a disconnected node (IE 9 fails this)
+ var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
+ pseudoWorks = false;
+
+ try {
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( document.documentElement, "[test!='']:sizzle" );
+
+ } catch( pseudoError ) {
+ pseudoWorks = true;
+ }
+
+ Sizzle.matchesSelector = function( node, expr ) {
+ // Make sure that attribute selectors are quoted
+ expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
+
+ if ( !Sizzle.isXML( node ) ) {
+ try {
+ if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
+ var ret = matches.call( node, expr );
+
+ // IE 9's matchesSelector returns false on disconnected nodes
+ if ( ret || !disconnectedMatch ||
+ // As well, disconnected nodes are said to be in a document
+ // fragment in IE 9, so check for that
+ node.document && node.document.nodeType !== 11 ) {
+ return ret;
+ }
+ }
+ } 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]);
+ }
+ };
+
+ // release memory in IE
+ div = null;
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+
+ if ( elem ) {
+ var match = false;
+
+ elem = elem[dir];
+
+ while ( elem ) {
+ if ( elem[ expando ] === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 && !isXML ){
+ elem[ expando ] = 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 ) {
+ var match = false;
+
+ elem = elem[dir];
+
+ while ( elem ) {
+ if ( elem[ expando ] === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 ) {
+ if ( !isXML ) {
+ elem[ expando ] = 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;
+ }
+ }
+}
+
+if ( document.documentElement.contains ) {
+ Sizzle.contains = function( a, b ) {
+ return a !== b && (a.contains ? a.contains(b) : true);
+ };
+
+} else if ( document.documentElement.compareDocumentPosition ) {
+ Sizzle.contains = function( a, b ) {
+ return !!(a.compareDocumentPosition(b) & 16);
+ };
+
+} else {
+ Sizzle.contains = function() {
+ return false;
+ };
+}
+
+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, seed ) {
+ var match,
+ tmpSet = [],
+ later = "",
+ 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, seed );
+ }
+
+ return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+
+window.tinymce.dom.Sizzle = Sizzle;
+
+})();
+
+
+(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, TreeWalker = tinymce.dom.TreeWalker;
+
+ tinymce.create('tinymce.dom.Selection', {
+ Selection : function(dom, win, serializer, editor) {
+ var t = this;
+
+ t.dom = dom;
+ t.win = win;
+ t.serializer = serializer;
+ t.editor = editor;
+
+ // 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 self = this, rng = self.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();
+ if (startElement.ownerDocument !== self.dom.doc) {
+ startElement = self.dom.getRoot();
+ }
+
+ // 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 self = this, rng = self.getRng(), endElement, endOffset;
+
+ if (rng.duplicate || rng.item) {
+ if (rng.item)
+ return rng.item(0);
+
+ rng = rng.duplicate();
+ rng.collapse(0);
+ endElement = rng.parentElement();
+ if (endElement.ownerDocument !== self.dom.doc) {
+ endElement = self.dom.getRoot();
+ }
+
+ if (endElement && endElement.nodeName == 'BODY')
+ return endElement.lastChild || endElement;
+
+ return endElement;
+ } else {
+ endElement = rng.endContainer;
+ endOffset = rng.endOffset;
+
+ if (endElement.nodeType == 1 && endElement.hasChildNodes())
+ endElement = endElement.childNodes[endOffset > 0 ? endOffset - 1 : endOffset];
+
+ if (endElement && endElement.nodeType == 3)
+ return endElement.parentNode;
+
+ return endElement;
+ }
+ },
+
+ 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;
+ };
+
+ function normalizeTableCellSelection(rng) {
+ function moveEndPoint(start) {
+ var container, offset, childNodes, prefix = start ? 'start' : 'end';
+
+ container = rng[prefix + 'Container'];
+ offset = rng[prefix + 'Offset'];
+
+ if (container.nodeType == 1 && container.nodeName == "TR") {
+ childNodes = container.childNodes;
+ container = childNodes[Math.min(start ? offset : offset - 1, childNodes.length - 1)];
+ if (container) {
+ offset = start ? 0 : container.childNodes.length;
+ rng['set' + (start ? 'Start' : 'End')](container, offset);
+ }
+ }
+ };
+
+ moveEndPoint(true);
+ moveEndPoint();
+
+ return rng;
+ };
+
+ 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 (type == 2) {
+ 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 = normalizeTableCellSelection(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 = normalizeTableCellSelection(rng);
+ 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;
+
+ 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;
+ };
+
+ 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
+ if (dom.isBlock(node) && !node.innerHTML && !isIE)
+ node.innerHTML = '<br data-mce-bogus="1" />';
+
+ return node;
+ };
+
+ if (bookmark) {
+ if (bookmark.start) {
+ rng = dom.createRng();
+ root = dom.getRoot();
+
+ if (t.tridentSel)
+ return t.tridentSel.moveToBookmark(bookmark);
+
+ if (setEndPoint(true) && setEndPoint()) {
+ t.setRng(rng);
+ }
+ } else if (bookmark.id) {
+ // 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;
+
+ function setPoint(node, start) {
+ var walker = new 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()));
+ };
+
+ 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) {
+ 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 self = this, selection, rng, elm, doc = self.win.document;
+
+ // Found tridentSel object then we need to use that one
+ if (w3c && self.tridentSel) {
+ return self.tridentSel.getRangeAt(0);
+ }
+
+ try {
+ if (selection = self.getSel()) {
+ rng = selection.rangeCount > 0 ? selection.getRangeAt(0) : (selection.createRange ? selection.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 && rng && rng.setStart && doc.selection.createRange().item) {
+ elm = doc.selection.createRange().item(0);
+ rng = doc.createRange();
+ rng.setStartBefore(elm);
+ rng.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 (!rng) {
+ rng = doc.createRange ? doc.createRange() : doc.body.createTextRange();
+ }
+
+ // If range is at start of document then move it to start of body
+ if (rng.setStart && rng.startContainer.nodeType === 9 && rng.collapsed) {
+ elm = self.dom.getRoot();
+ rng.setStart(elm, 0);
+ rng.setEnd(elm, 0);
+ }
+
+ if (self.selectedRange && self.explicitRange) {
+ if (rng.compareBoundaryPoints(rng.START_TO_START, self.selectedRange) === 0 && rng.compareBoundaryPoints(rng.END_TO_END, self.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.
+ rng = self.explicitRange;
+ } else {
+ self.selectedRange = null;
+ self.explicitRange = null;
+ }
+ }
+
+ return rng;
+ },
+
+ setRng : function(r, forward) {
+ 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);
+
+ // Forward is set to false and we have an extend function
+ if (forward === false && s.extend) {
+ s.collapse(r.endContainer, r.endOffset);
+ s.extend(r.startContainer, r.startOffset);
+ }
+
+ // adding range isn't always successful so we need to check range count otherwise an exception can occur
+ t.selectedRange = s.rangeCount > 0 ? s.getRangeAt(0) : null;
+ }
+ } else {
+ // Is W3C Range
+ if (r.cloneRange) {
+ try {
+ t.tridentSel.addRange(r);
+ return;
+ } catch (ex) {
+ //IE9 throws an error here if called before selection is placed in the editor
+ }
+ }
+
+ // 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;
+
+ function skipEmptyTextNodes(n, forwards) {
+ var orig = n;
+ while (n && n.nodeType === 3 && n.length === 0) {
+ n = forwards ? n.nextSibling : n.previousSibling;
+ }
+ return n || orig;
+ };
+
+ // 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) {
+ 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 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;
+ },
+
+ isForward: function(){
+ var dom = this.dom, sel = this.getSel(), anchorRange, focusRange;
+
+ // No support for selection direction then always return true
+ if (!sel || sel.anchorNode == null || sel.focusNode == null) {
+ return true;
+ }
+
+ anchorRange = dom.createRng();
+ anchorRange.setStart(sel.anchorNode, sel.anchorOffset);
+ anchorRange.collapse(true);
+
+ focusRange = dom.createRng();
+ focusRange.setStart(sel.focusNode, sel.focusOffset);
+ focusRange.collapse(true);
+
+ return anchorRange.compareBoundaryPoints(anchorRange.START_TO_START, focusRange) <= 0;
+ },
+
+ normalize : function() {
+ var self = this, rng, normalized, collapsed, node, sibling;
+
+ function normalizeEndPoint(start) {
+ var container, offset, walker, dom = self.dom, body = dom.getRoot(), node, nonEmptyElementsMap, nodeName;
+
+ function hasBrBeforeAfter(node, left) {
+ var walker = new TreeWalker(node, dom.getParent(node.parentNode, dom.isBlock) || body);
+
+ while (node = walker[left ? 'prev' : 'next']()) {
+ if (node.nodeName === "BR") {
+ return true;
+ }
+ }
+ };
+
+ // Walks the dom left/right to find a suitable text node to move the endpoint into
+ // It will only walk within the current parent block or body and will stop if it hits a block or a BR/IMG
+ function findTextNodeRelative(left, startNode) {
+ var walker, lastInlineElement;
+
+ startNode = startNode || container;
+ walker = new TreeWalker(startNode, dom.getParent(startNode.parentNode, dom.isBlock) || body);
+
+ // Walk left until we hit a text node we can move to or a block/br/img
+ while (node = walker[left ? 'prev' : 'next']()) {
+ // Found text node that has a length
+ if (node.nodeType === 3 && node.nodeValue.length > 0) {
+ container = node;
+ offset = left ? node.nodeValue.length : 0;
+ normalized = true;
+ return;
+ }
+
+ // Break if we find a block or a BR/IMG/INPUT etc
+ if (dom.isBlock(node) || nonEmptyElementsMap[node.nodeName.toLowerCase()]) {
+ return;
+ }
+
+ lastInlineElement = node;
+ }
+
+ // Only fetch the last inline element when in caret mode for now
+ if (collapsed && lastInlineElement) {
+ container = lastInlineElement;
+ normalized = true;
+ offset = 0;
+ }
+ };
+
+ container = rng[(start ? 'start' : 'end') + 'Container'];
+ offset = rng[(start ? 'start' : 'end') + 'Offset'];
+ nonEmptyElementsMap = dom.schema.getNonEmptyElements();
+
+ // If the container is a document move it to the body element
+ if (container.nodeType === 9) {
+ container = dom.getRoot();
+ offset = 0;
+ }
+
+ // If the container is body try move it into the closest text node or position
+ if (container === body) {
+ // If start is before/after a image, table etc
+ if (start) {
+ node = container.childNodes[offset > 0 ? offset - 1 : 0];
+ if (node) {
+ nodeName = node.nodeName.toLowerCase();
+ if (nonEmptyElementsMap[node.nodeName] || node.nodeName == "TABLE") {
+ return;
+ }
+ }
+ }
+
+ // 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() && !/TABLE/.test(container.nodeName)) {
+ // Walk the DOM to find a text node to place the caret at or a BR
+ node = container;
+ walker = new TreeWalker(container, body);
+
+ do {
+ // Found a text node use that position
+ if (node.nodeType === 3 && node.nodeValue.length > 0) {
+ offset = start ? 0 : node.nodeValue.length;
+ container = node;
+ normalized = true;
+ break;
+ }
+
+ // Found a BR/IMG element that we can place the caret before
+ if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) {
+ offset = dom.nodeIndex(node);
+ container = node.parentNode;
+
+ // Put caret after image when moving the end point
+ if (node.nodeName == "IMG" && !start) {
+ offset++;
+ }
+
+ normalized = true;
+ break;
+ }
+ } while (node = (start ? walker.next() : walker.prev()));
+ }
+ }
+ }
+
+ // Lean the caret to the left if possible
+ if (collapsed) {
+ // So this: <b>x</b><i>|x</i>
+ // Becomes: <b>x|</b><i>x</i>
+ // Seems that only gecko has issues with this
+ if (container.nodeType === 3 && offset === 0) {
+ findTextNodeRelative(true);
+ }
+
+ // Lean left into empty inline elements when the caret is before a BR
+ // So this: <i><b></b><i>|<br></i>
+ // Becomes: <i><b>|</b><i><br></i>
+ // Seems that only gecko has issues with this
+ if (container.nodeType === 1) {
+ node = container.childNodes[offset];
+ if(node && node.nodeName === 'BR' && !hasBrBeforeAfter(node) && !hasBrBeforeAfter(node, true)) {
+ findTextNodeRelative(true, container.childNodes[offset]);
+ }
+ }
+ }
+
+ // Lean the start of the selection right if possible
+ // So this: x[<b>x]</b>
+ // Becomes: x<b>[x]</b>
+ if (start && !collapsed && container.nodeType === 3 && offset === container.nodeValue.length) {
+ findTextNodeRelative(false);
+ }
+
+ // Set endpoint if it was normalized
+ if (normalized)
+ rng['set' + (start ? 'Start' : 'End')](container, offset);
+ };
+
+ // Normalize only on non IE browsers for now
+ if (tinymce.isIE)
+ return;
+
+ rng = self.getRng();
+ collapsed = rng.collapsed;
+
+ // Normalize the end points
+ normalizeEndPoint(true);
+
+ if (!collapsed)
+ normalizeEndPoint();
+
+ // Set the selection if it was normalized
+ if (normalized) {
+ // If it was collapsed then make sure it still is
+ if (collapsed) {
+ rng.collapse(true);
+ }
+
+ //console.log(self.dom.dumpRng(rng));
+ self.setRng(rng, self.isForward());
+ }
+ },
+
+ selectorChanged: function(selector, callback) {
+ var self = this, currentSelectors;
+
+ if (!self.selectorChangedData) {
+ self.selectorChangedData = {};
+ currentSelectors = {};
+
+ self.editor.onNodeChange.addToTop(function(ed, cm, node) {
+ var dom = self.dom, parents = dom.getParents(node, null, dom.getRoot()), matchedSelectors = {};
+
+ // Check for new matching selectors
+ each(self.selectorChangedData, function(callbacks, selector) {
+ each(parents, function(node) {
+ if (dom.is(node, selector)) {
+ if (!currentSelectors[selector]) {
+ // Execute callbacks
+ each(callbacks, function(callback) {
+ callback(true, {node: node, selector: selector, parents: parents});
+ });
+
+ currentSelectors[selector] = callbacks;
+ }
+
+ matchedSelectors[selector] = callbacks;
+ return false;
+ }
+ });
+ });
+
+ // Check if current selectors still match
+ each(currentSelectors, function(callbacks, selector) {
+ if (!matchedSelectors[selector]) {
+ delete currentSelectors[selector];
+
+ each(callbacks, function(callback) {
+ callback(false, {node: node, selector: selector, parents: parents});
+ });
+ }
+ });
+ });
+ }
+
+ // Add selector listeners
+ if (!self.selectorChangedData[selector]) {
+ self.selectorChangedData[selector] = [];
+ }
+
+ self.selectorChangedData[selector].push(callback);
+
+ return self;
+ },
+
+ scrollIntoView: function(elm) {
+ var y, viewPort, self = this, dom = self.dom;
+
+ viewPort = dom.getViewPort(self.editor.getWin());
+ y = dom.getPos(elm).y;
+ if (y < viewPort.y || y + 25 > viewPort.y + viewPort.h) {
+ self.editor.getWin().scrollTo(0, y < viewPort.y ? y : y - viewPort.h + 25);
+ }
+ },
+
+ destroy : function(manual) {
+ var self = this;
+
+ self.win = null;
+
+ // Manual destroy then remove unload handler
+ if (!manual)
+ tinymce.removeUnload(self.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;
+
+ // 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;
+ };
+
+ // Make HTML element unselectable since we are going to handle selection by hand
+ doc.documentElement.unselectable = true;
+
+ // 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;
+
+ // 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';
+ settings.remove_trailing_brs = "remove_trailing_brs" in settings ? settings.remove_trailing_brs : true;
+
+ 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<..> or mceSelected
+ 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();
+ }
+ });
+
+ // Remove expando attributes
+ htmlParser.addAttributeFilter('data-mce-expando', function(nodes, name, args) {
+ var i = nodes.length;
+
+ while (i--) {
+ nodes[i].attr(name, null);
+ }
+ });
+
+ htmlParser.addNodeFilter('noscript', function(nodes) {
+ var i = nodes.length, node;
+
+ while (i--) {
+ node = nodes[i].firstChild;
+
+ if (node) {
+ node.value = tinymce.html.Entities.decode(node.value);
+ }
+ }
+ });
+
+ // 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\[|(<!--\s*)?\/\*\s*<!\[CDATA\[\s*\*\/|(\/\/)?\s*<!--|\/\*\s*<!--\s*\*\/)\s*[\r\n]*/gi, '')
+ .replace(/\s*(\/\*\s*\]\]>\s*\*\/(-->)?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\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(tinymce.trim(args.getInner ? node.innerHTML : dom.getOuterHTML(node)), args)
+ );
+
+ // Replace all BOM characters for now until we can find a better solution
+ if (!args.cleanup)
+ args.content = args.content.replace(/\uFEFF/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,
+ undef;
+
+ 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 = document.createElement('script');
+ elm.id = id;
+ elm.type = 'text/javascript';
+ elm.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 == undef) {
+ 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] = undef;
+ };
+
+ 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);
+
+(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) {
+ var elm = dom.get(item.id);
+
+ dom.unbind(elm, 'focus', itemFocussed);
+ dom.unbind(elm, 'blur', itemBlurred);
+ });
+
+ var rootElm = dom.get(root);
+ dom.unbind(rootElm, 'focus', rootFocussed);
+ dom.unbind(rootElm, '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, elm;
+
+ if (!item.id) {
+ item.id = dom.uniqueId('_mce_item_');
+ }
+
+ elm = dom.get(item.id);
+
+ if (excludeFromTabOrder) {
+ dom.bind(elm, 'blur', itemBlurred);
+ tabindex = '-1';
+ } else {
+ tabindex = (idx === 0 ? '0' : '-1');
+ }
+
+ elm.setAttribute('tabindex', tabindex);
+ dom.bind(elm, '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.
+ var rootElm = dom.get(root);
+ dom.bind(rootElm, 'focus', rootFocussed);
+ dom.bind(rootElm, '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.offsetWidth, s.max_width) : tb.offsetWidth;
+ th = s.max_height ? Math.min(tb.offsetHeight, s.max_height) : tb.offsetHeight;
+
+ 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 false; // 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.get('menu_' + t.id);
+ 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) {
+ if (typeof o.settings.style == "function")
+ o.settings.style = 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 += '<span class="mceIcon ' + s['class'] + '"><img class="mceIcon" src="' + s.image + '" alt="' + DOM.encode(s.title) + '" /></span>' + (l ? '<span class="' + cp + 'Label">' + l + '</span>' : '');
+ 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, imgBookmark;
+
+ // In IE a large image that occupies the entire editor area will be deselected when a button is clicked, so
+ // need to keep the selection in case the selection is lost
+ if (tinymce.isIE && t.editor) {
+ tinymce.dom.Event.add(t.id, 'mousedown', function(e) {
+ var nodeName = t.editor.selection.getNode().nodeName;
+ imgBookmark = nodeName === 'IMG' ? t.editor.selection.getBookmark() : null;
+ });
+ }
+ tinymce.dom.Event.add(t.id, 'click', function(e) {
+ if (!t.isDisabled()) {
+ // restore the selection in case the selection is lost in IE
+ if (tinymce.isIE && t.editor && imgBookmark !== null) {
+ t.editor.selection.moveToBookmark(imgBookmark);
+ }
+ return s.onclick.call(s.scope, e);
+ }
+ });
+ tinymce.dom.Event.add(t.id, 'keyup', function(e) {
+ if (!t.isDisabled() && e.keyCode==tinymce.VK.SPACEBAR)
+ 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, undef;
+
+ 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';
+ t.marked = {};
+ },
+
+ select : function(va) {
+ var t = this, fv, f;
+
+ t.marked = {};
+
+ if (va == undef)
+ return t.selectByIndex(-1);
+
+ // Is string or number make function selector
+ if (va && typeof(va)=="function")
+ 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;
+
+ t.marked = {};
+
+ 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;
+ }
+ },
+
+ mark : function(value) {
+ this.marked[value] = true;
+ },
+
+ 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
+ each(t.items, function(o) {
+ if (m.items[o.id]) {
+ m.items[o.id].setSelected(0);
+ }
+ });
+
+ each(t.items, function(o) {
+ if (m.items[o.id] && t.marked[o.value]) {
+ m.items[o.id].setSelected(1);
+ }
+
+ if (o.value === t.selectedValue) {
+ m.items[o.id].setSelected(1);
+ }
+ });
+
+ 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 : 250,
+ 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 === undef) {
+ 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, undef;
+
+ 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 == undef)
+ return t.selectByIndex(-1);
+
+ // Is string or number make function selector
+ if (va && typeof(va)=="function")
+ 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.firstChild.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.firstChild.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.keyboardNav = new tinymce.ui.KeyboardNavigation({
+ root: t.id + '_menu',
+ items: DOM.select('a', t.id + '_menu'),
+ onCancel: function() {
+ t.hideMenu();
+ t.focus();
+ }
+ });
+
+ t.keyboardNav.focus();
+ 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();
+ t.keyboardNav.destroy();
+ }
+ },
+
+ 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');
+ var settings = {
+ href : 'javascript:;',
+ style : {
+ backgroundColor : '#' + c
+ },
+ 'title': t.editor.getLang('colors.' + c, c),
+ 'data-mce-color' : '#' + c
+ };
+
+ // adding a proper ARIA role = button causes JAWS to read things incorrectly on IE.
+ if (!tinymce.isIE ) {
+ settings.role = 'option';
+ }
+
+ n = DOM.add(n, 'a', settings);
+
+ 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');
+
+ // 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 false; // 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() {
+ var self = this;
+
+ self.parent();
+
+ Event.clear(self.id + '_menu');
+ Event.clear(self.id + '_more');
+ DOM.remove(self.id + '_menu');
+
+ if (self.keyboardNav) {
+ self.keyboardNav.destroy();
+ }
+ }
+ });
+})(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, undef, 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 createId(elm) {
+ var id = elm.id;
+
+ // Use element id, or unique name or generate a unique id
+ if (!id) {
+ id = elm.name;
+
+ if (id && !DOM.get(id)) {
+ id = elm.name;
+ } else {
+ // Generate unique name
+ id = DOM.uniqueId();
+ }
+
+ elm.setAttribute('id', id);
+ }
+
+ return id;
+ };
+
+ 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));
+ };
+
+ function hasClass(n, c) {
+ return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c);
+ };
+
+ t.settings = s;
+
+ // Legacy call
+ Event.bind(window, 'ready', 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":
+ each(DOM.select('textarea'), function(elm) {
+ if (s.editor_deselector && hasClass(elm, s.editor_deselector))
+ return;
+
+ if (!s.editor_selector || hasClass(elm, s.editor_selector)) {
+ ed = new tinymce.Editor(createId(elm), s);
+ el.push(ed);
+ ed.render(1);
+ }
+ });
+ break;
+
+ default:
+ if (s.types) {
+ // Process type specific selector
+ each(s.types, function(type) {
+ each(DOM.select(type.selector), function(elm) {
+ var editor = new tinymce.Editor(createId(elm), tinymce.extend({}, s, type));
+ el.push(editor);
+ editor.render(1);
+ });
+ });
+ } else if (s.selector) {
+ // Process global selector
+ each(DOM.select(s.selector), function(elm) {
+ var editor = new tinymce.Editor(createId(elm), s);
+ el.push(editor);
+ editor.render(1);
+ });
+ }
+ }
+
+ // 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 === undef)
+ return this.editors;
+
+ if (!this.editors.hasOwnProperty(id))
+ return undef;
+
+ 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;
+
+ function clr() {
+ ed.destroy();
+ w.detachEvent('onunload', clr);
+ w = w.tinyMCE = w.tinymce = null; // IE leak
+ };
+
+ // 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) {
+ 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,
+ each = tinymce.each, isGecko = tinymce.isGecko,
+ isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, is = tinymce.is,
+ ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,
+ explode = tinymce.explode;
+
+ tinymce.create('tinymce.Editor', {
+ Editor : function(id, settings) {
+ var self = this, TRUE = true;
+
+ self.settings = settings = extend({
+ id : id,
+ language : 'en',
+ theme : 'advanced',
+ skin : 'default',
+ delta_width : 0,
+ delta_height : 0,
+ popup_css : '',
+ plugins : '',
+ document_base_url : tinymce.documentBaseURL,
+ add_form_submit_trigger : TRUE,
+ submit_patch : TRUE,
+ add_unload_trigger : TRUE,
+ convert_urls : TRUE,
+ relative_urls : TRUE,
+ remove_script_host : TRUE,
+ table_inline_editing : false,
+ object_resizing : TRUE,
+ accessibility_focus : TRUE,
+ 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 : TRUE,
+ 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 : TRUE,
+ directionality : 'ltr',
+ forced_root_block : 'p',
+ hidden_input : TRUE,
+ padd_empty_editor : TRUE,
+ render_ui : TRUE,
+ indentation : '30px',
+ fix_table_elements : TRUE,
+ inline_styles : TRUE,
+ 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,section,article,hgroup,aside,figure,option,optgroup,datalist',
+ indent_after : 'p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,ul,li,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,option,optgroup,datalist',
+ validate : TRUE,
+ entity_encoding : 'named',
+ url_converter : self.convertURL,
+ url_converter_scope : self,
+ ie7_compat : TRUE
+ }, settings);
+
+ self.id = self.editorId = id;
+
+ self.isNotDirty = false;
+
+ self.plugins = {};
+
+ self.documentBaseURI = new tinymce.util.URI(settings.document_base_url || tinymce.documentBaseURL, {
+ base_uri : tinyMCE.baseURI
+ });
+
+ self.baseURI = tinymce.baseURI;
+
+ self.contentCSS = [];
+
+ self.contentStyles = [];
+
+ // Creates all events like onClick, onSetContent etc see Editor.Events.js for the actual logic
+ self.setupEvents();
+
+ // Internal command handler objects
+ self.execCommands = {};
+ self.queryStateCommands = {};
+ self.queryValueCommands = {};
+
+ // Call setup
+ self.execCallback('setup', self);
+ },
+
+ 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(window, 'ready', 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.
+ 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);
+
+ // Hide target element early to prevent content flashing
+ if (!s.content_editable) {
+ t.orgVisibility = t.getElement().style.visibility;
+ t.getElement().style.visibility = 'hidden';
+ }
+
+ 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 && typeof s.theme != "function" && 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'};
+ 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, mh, 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) {
+ if (typeof s.theme != "function") {
+ s.theme = s.theme.replace(/-/, '');
+ o = ThemeManager.get(s.theme);
+ t.theme = new o();
+
+ if (t.theme.init)
+ t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, ''));
+ } else {
+ t.theme = s.theme;
+ }
+ }
+
+ 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);
+
+ // Enables users to override the control factory
+ t.onBeforeRenderUI.dispatch(t, t.controlManager);
+
+ // Measure box
+ if (s.render_ui && t.theme) {
+ t.orgDisplay = e.style.display;
+
+ if (typeof s.theme != "function") {
+ w = s.width || e.style.width || e.offsetWidth;
+ h = s.height || e.style.height || e.offsetHeight;
+ mh = s.min_height || 100;
+ re = /^[0-9\.]+(|px)$/i;
+
+ if (re.test('' + w))
+ w = Math.max(parseInt(w, 10) + (o.deltaWidth || 0), 100);
+
+ if (re.test('' + h))
+ h = Math.max(parseInt(h, 10) + (o.deltaHeight || 0), mh);
+
+ // Render UI
+ o = t.theme.renderUI({
+ targetNode : e,
+ width : w,
+ height : h,
+ deltaWidth : s.delta_width,
+ deltaHeight : s.delta_height
+ });
+
+ // Resize editor
+ DOM.setStyles(o.sizeContainer || o.editorContainer, {
+ width : w,
+ height : h
+ });
+
+ h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : '');
+ if (h < mh)
+ h = mh;
+ } else {
+ o = s.theme(t, e);
+
+ // Convert element type to id:s
+ if (o.editorContainer.nodeType) {
+ o.editorContainer = o.editorContainer.id = o.editorContainer.id || t.id + "_parent";
+ }
+
+ // Convert element type to id:s
+ if (o.iframeContainer.nodeType) {
+ o.iframeContainer = o.iframeContainer.id = o.iframeContainer.id || t.id + "_iframecontainer";
+ }
+
+ // Use specified iframe height or the targets offsetHeight
+ h = o.iframeHeight || e.offsetHeight;
+
+ // Store away the selection when it's changed to it can be restored later with a editor.focus() call
+ if (isIE) {
+ t.onInit.add(function(ed) {
+ ed.dom.bind(ed.getBody(), 'beforedeactivate keydown', function() {
+ ed.lastIERng = ed.selection.getRng();
+ });
+ });
+ }
+ }
+
+ t.editorContainer = o.editorContainer;
+ }
+
+ // Load specified content CSS last
+ if (s.content_css) {
+ each(explode(s.content_css), function(u) {
+ t.contentCSS.push(t.documentBaseURI.toAbsolute(u));
+ });
+ }
+
+ // Load specified content CSS last
+ if (s.content_style) {
+ t.contentStyles.push(s.content_style);
+ }
+
+ // Content editable mode ends here
+ if (s.content_editable) {
+ e = n = o = null; // Fix IE leak
+ return t.initContentBody();
+ }
+
+ // User specified a document.domain value
+ if (document.domain && location.hostname != document.domain)
+ tinymce.relaxedDomain = document.domain;
+
+ 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 (tinymce.isIE8) {
+ 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] + '" />';
+ }
+
+ t.contentCSS = [];
+
+ 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 + '" onload="window.parent.tinyMCE.get(\'' + t.id + '\').onLoad.dispatch();"><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.initContentBody();})()';
+ }
+
+ // 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;
+
+ if (o.editorContainer) {
+ DOM.get(o.editorContainer).style.display = t.orgDisplay;
+ }
+
+ // Restore visibility on target element
+ e.style.visibility = t.orgVisibility;
+
+ DOM.get(t.id).style.display = 'none';
+ DOM.setAttrib(t.id, 'aria-hidden', true);
+
+ if (!tinymce.relaxedDomain || !u)
+ t.initContentBody();
+
+ e = n = o = null; // Cleanup
+ },
+
+ initContentBody : function() {
+ var self = this, settings = self.settings, targetElm = DOM.get(self.id), doc = self.getDoc(), html, body, contentCssText;
+
+ // Setup iframe body
+ if ((!isIE || !tinymce.relaxedDomain) && !settings.content_editable) {
+ doc.open();
+ doc.write(self.iframeHTML);
+ doc.close();
+
+ if (tinymce.relaxedDomain)
+ doc.domain = tinymce.relaxedDomain;
+ }
+
+ if (settings.content_editable) {
+ DOM.addClass(targetElm, 'mceContentBody');
+ self.contentDocument = doc = settings.content_document || document;
+ self.contentWindow = settings.content_window || window;
+ self.bodyElement = targetElm;
+
+ // Prevent leak in IE
+ settings.content_document = settings.content_window = null;
+ }
+
+ // It will not steal focus while setting contentEditable
+ body = self.getBody();
+ body.disabled = true;
+
+ if (!settings.readonly)
+ body.contentEditable = self.getParam('content_editable_state', true);
+
+ body.disabled = false;
+
+ self.schema = new tinymce.html.Schema(settings);
+
+ self.dom = new tinymce.dom.DOMUtils(doc, {
+ keep_values : true,
+ url_converter : self.convertURL,
+ url_converter_scope : self,
+ hex_colors : settings.force_hex_style_colors,
+ class_filter : settings.class_filter,
+ update_styles : true,
+ root_element : settings.content_editable ? self.id : null,
+ schema : self.schema
+ });
+
+ self.parser = new tinymce.html.DomParser(settings, self.schema);
+
+ // Convert src and href into data-mce-src, data-mce-href and data-mce-style
+ self.parser.addAttributeFilter('src,href,style', function(nodes, name) {
+ var i = nodes.length, node, dom = self.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, self.convertURL(value, name, node.name));
+ }
+ }
+ });
+
+ // Keep scripts from executing
+ self.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'));
+ }
+ });
+
+ self.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 + ']]';
+ }
+ });
+
+ self.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function(nodes, name) {
+ var i = nodes.length, node, nonEmptyElements = self.schema.getNonEmptyElements();
+
+ while (i--) {
+ node = nodes[i];
+
+ if (node.isEmpty(nonEmptyElements))
+ node.empty().append(new tinymce.html.Node('br', 1)).shortEnded = true;
+ }
+ });
+
+ self.serializer = new tinymce.dom.Serializer(settings, self.dom, self.schema);
+
+ self.selection = new tinymce.dom.Selection(self.dom, self.getWin(), self.serializer, self);
+
+ self.formatter = new tinymce.Formatter(self);
+
+ self.undoManager = new tinymce.UndoManager(self);
+
+ self.forceBlocks = new tinymce.ForceBlocks(self);
+ self.enterKey = new tinymce.EnterKey(self);
+ self.editorCommands = new tinymce.EditorCommands(self);
+
+ self.onExecCommand.add(function(editor, command) {
+ // Don't refresh the select lists until caret move
+ if (!/^(FontName|FontSize)$/.test(command))
+ self.nodeChanged();
+ });
+
+ // Pass through
+ self.serializer.onPreProcess.add(function(se, o) {
+ return self.onPreProcess.dispatch(self, o, se);
+ });
+
+ self.serializer.onPostProcess.add(function(se, o) {
+ return self.onPostProcess.dispatch(self, o, se);
+ });
+
+ self.onPreInit.dispatch(self);
+
+ if (!settings.browser_spellcheck && !settings.gecko_spellcheck)
+ doc.body.spellcheck = false;
+
+ if (!settings.readonly) {
+ self.bindNativeEvents();
+ }
+
+ self.controlManager.onPostRender.dispatch(self, self.controlManager);
+ self.onPostRender.dispatch(self);
+
+ self.quirks = tinymce.util.Quirks(self);
+
+ if (settings.directionality)
+ body.dir = settings.directionality;
+
+ if (settings.nowrap)
+ body.style.whiteSpace = "nowrap";
+
+ if (settings.protect) {
+ self.onBeforeSetContent.add(function(ed, o) {
+ each(settings.protect, function(pattern) {
+ o.content = o.content.replace(pattern, function(str) {
+ return '<!--mce:protected ' + escape(str) + '-->';
+ });
+ });
+ });
+ }
+
+ // Add visual aids when new contents is added
+ self.onSetContent.add(function() {
+ self.addVisual(self.getBody());
+ });
+
+ // Remove empty contents
+ if (settings.padd_empty_editor) {
+ self.onPostProcess.add(function(ed, o) {
+ o.content = o.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/, '');
+ });
+ }
+
+ self.load({initial : true, format : 'html'});
+ self.startContent = self.getContent({format : 'raw'});
+
+ self.initialized = true;
+
+ self.onInit.dispatch(self);
+ self.execCallback('setupcontent_callback', self.id, body, doc);
+ self.execCallback('init_instance_callback', self);
+ self.focus(true);
+ self.nodeChanged({initial : true});
+
+ // Add editor specific CSS styles
+ if (self.contentStyles.length > 0) {
+ contentCssText = '';
+
+ each(self.contentStyles, function(style) {
+ contentCssText += style + "\r\n";
+ });
+
+ self.dom.addStyle(contentCssText);
+ }
+
+ // Load specified content CSS last
+ each(self.contentCSS, function(url) {
+ self.dom.loadCSS(url);
+ });
+
+ // Handle auto focus
+ if (settings.auto_focus) {
+ setTimeout(function () {
+ var ed = tinymce.get(settings.auto_focus);
+
+ ed.selection.select(ed.getBody(), 1);
+ ed.selection.collapse(1);
+ ed.getBody().focus();
+ ed.getWin().focus();
+ }, 100);
+ }
+
+ // Clean up references for IE
+ targetElm = doc = body = null;
+ },
+
+ focus : function(skip_focus) {
+ var oed, self = this, selection = self.selection, contentEditable = self.settings.content_editable, ieRng, controlElm, doc = self.getDoc(), body;
+
+ if (!skip_focus) {
+ if (self.lastIERng) {
+ selection.setRng(self.lastIERng);
+ }
+
+ // Get selected control element
+ ieRng = selection.getRng();
+ if (ieRng.item) {
+ controlElm = ieRng.item(0);
+ }
+
+ self._refreshContentEditable();
+
+ // Focus the window iframe
+ if (!contentEditable) {
+ self.getWin().focus();
+ }
+
+ // Focus the body as well since it's contentEditable
+ if (tinymce.isGecko || contentEditable) {
+ body = self.getBody();
+
+ // Check for setActive since it doesn't scroll to the element
+ if (body.setActive) {
+ body.setActive();
+ } else {
+ body.focus();
+ }
+
+ if (contentEditable) {
+ selection.normalize();
+ }
+ }
+
+ // 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 != self) {
+ if ((oed = tinymce.activeEditor) != null)
+ oed.onDeactivate.dispatch(oed, self);
+
+ self.onActivate.dispatch(self, oed);
+ }
+
+ tinymce._setActive(self);
+ },
+
+ 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 self = this, selection = self.selection, node;
+
+ // Fix for bug #1896577 it seems that this can not be fired while the editor is loading
+ if (self.initialized) {
+ o = o || {};
+
+ // Get start node
+ node = selection.getStart() || self.getBody();
+ node = isIE && node.ownerDocument != self.getDoc() ? self.getBody() : node; // Fix for IE initial state
+
+ // Get parents and add them to object
+ o.parents = [];
+ self.dom.getParent(node, function(node) {
+ if (node.nodeName == 'BODY')
+ return true;
+
+ o.parents.push(node);
+ });
+
+ self.onNodeChange.dispatch(
+ self,
+ o ? o.controlManager || self.controlManager : self.controlManager,
+ node,
+ selection.isCollapsed(),
+ o
+ );
+ }
+ },
+
+ addButton : function(name, settings) {
+ var self = this;
+
+ self.buttons = self.buttons || {};
+ self.buttons[name] = settings;
+ },
+
+ 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 === false)
+ 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 : t.translate(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();
+
+ a = extend({}, a);
+ t.onBeforeExecCommand.dispatch(t, cmd, ui, val, a);
+ if (a.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 self = this;
+
+ DOM.show(self.getContainer());
+ DOM.hide(self.id);
+ self.load();
+ },
+
+ hide : function() {
+ var self = this, doc = self.getDoc();
+
+ // Fixed bug where IE has a blinking cursor left from the editor
+ if (isIE && doc)
+ doc.execCommand('SelectAll');
+
+ // We must save before we hide so Safari doesn't crash
+ self.save();
+
+ // defer the call to hide to prevent an IE9 crash #4921
+ DOM.hide(self.getContainer());
+ DOM.setStyle(self.id, 'display', self.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;
+
+ 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);
+
+ // Don't normalize selection if the focused element isn't the body in content editable mode since it will steal focus otherwise
+ if (!self.settings.content_editable || document.activeElement === self.getBody()) {
+ self.selection.normalize();
+ }
+
+ return args.content;
+ },
+
+ getContent : function(args) {
+ var self = this, content, body = self.getBody();
+
+ // Setup args object
+ args = args || {};
+ args.format = args.format || 'html';
+ args.get = true;
+ args.getInner = 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 = body.innerHTML;
+ else if (args.format == 'text')
+ content = body.innerText || body.textContent;
+ else
+ content = self.serializer.serialize(body, args);
+
+ // Trim whitespace in beginning/end of HTML
+ if (args.format != 'text') {
+ args.content = tinymce.trim(content);
+ } else {
+ args.content = 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 self = this;
+
+ if (!self.container)
+ self.container = DOM.get(self.editorContainer || self.id + '_parent');
+
+ return self.container;
+ },
+
+ getContentAreaContainer : function() {
+ return this.contentAreaContainer;
+ },
+
+ getElement : function() {
+ return DOM.get(this.settings.content_element || this.id);
+ },
+
+ getWin : function() {
+ var self = this, elm;
+
+ if (!self.contentWindow) {
+ elm = DOM.get(self.id + "_ifr");
+
+ if (elm)
+ self.contentWindow = elm.contentWindow;
+ }
+
+ return self.contentWindow;
+ },
+
+ getDoc : function() {
+ var self = this, win;
+
+ if (!self.contentDocument) {
+ win = self.getWin();
+
+ if (win)
+ self.contentDocument = win.document;
+ }
+
+ return self.contentDocument;
+ },
+
+ getBody : function() {
+ return this.bodyElement || this.getDoc().body;
+ },
+
+ convertURL : function(url, name, elm) {
+ var self = this, settings = self.settings;
+
+ // Use callback instead
+ if (settings.urlconverter_callback)
+ return self.execCallback('urlconverter_callback', url, elm, true, name);
+
+ // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs
+ if (!settings.convert_urls || (elm && elm.nodeName == 'LINK') || url.indexOf('file:') === 0)
+ return url;
+
+ // Convert to relative
+ if (settings.relative_urls)
+ return self.documentBaseURI.toRelative(url);
+
+ // Convert to absolute
+ url = self.documentBaseURI.toAbsolute(url, settings.remove_script_host);
+
+ return url;
+ },
+
+ addVisual : function(elm) {
+ var self = this, settings = self.settings, dom = self.dom, cls;
+
+ elm = elm || self.getBody();
+
+ if (!is(self.hasVisual))
+ self.hasVisual = settings.visual;
+
+ each(dom.select('table,a', elm), function(elm) {
+ var value;
+
+ switch (elm.nodeName) {
+ case 'TABLE':
+ cls = settings.visual_table_class || 'mceItemTable';
+ value = dom.getAttrib(elm, 'border');
+
+ if (!value || value == '0') {
+ if (self.hasVisual)
+ dom.addClass(elm, cls);
+ else
+ dom.removeClass(elm, cls);
+ }
+
+ return;
+
+ case 'A':
+ if (!dom.getAttrib(elm, 'href', false)) {
+ value = dom.getAttrib(elm, 'name') || elm.id;
+ cls = 'mceItemAnchor';
+
+ if (value) {
+ if (self.hasVisual)
+ dom.addClass(elm, cls);
+ else
+ dom.removeClass(elm, cls);
+ }
+ }
+
+ return;
+ }
+ });
+
+ self.onVisualAid.dispatch(self, elm, self.hasVisual);
+ },
+
+ remove : function() {
+ var self = this, elm = self.getContainer(), doc = self.getDoc();
+
+ if (!self.removed) {
+ self.removed = 1; // Cancels post remove event execution
+
+ // Fixed bug where IE has a blinking cursor left from the editor
+ if (isIE && doc)
+ doc.execCommand('SelectAll');
+
+ // We must save before we hide so Safari doesn't crash
+ self.save();
+
+ DOM.setStyle(self.id, 'display', self.orgDisplay);
+
+ // Don't clear the window or document if content editable
+ // is enabled since other instances might still be present
+ if (!self.settings.content_editable) {
+ Event.unbind(self.getWin());
+ Event.unbind(self.getDoc());
+ }
+
+ Event.unbind(self.getBody());
+ Event.clear(elm);
+
+ self.execCallback('remove_instance_callback', self);
+ self.onRemove.dispatch(self);
+
+ // Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command
+ self.onExecCommand.listeners = [];
+
+ tinymce.remove(self);
+ DOM.remove(elm);
+ }
+ },
+
+ destroy : function(s) {
+ var t = this;
+
+ // One time is enough
+ if (t.destroyed)
+ return;
+
+ // We must unbind on Gecko since it would otherwise produce the pesky "attempt to run compile-and-go script on a cleared scope" message
+ if (isGecko) {
+ Event.unbind(t.getDoc());
+ Event.unbind(t.getWin());
+ Event.unbind(t.getBody());
+ }
+
+ 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();
+ }
+
+ 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
+
+ _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) {
+ var each = tinymce.each;
+
+ tinymce.Editor.prototype.setupEvents = function() {
+ var self = this, settings = self.settings;
+
+ // Add events to the editor
+ each([
+ 'onPreInit',
+
+ 'onBeforeRenderUI',
+
+ 'onPostRender',
+
+ 'onLoad',
+
+ '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',
+
+ 'onSetAttrib'
+ ], function(name) {
+ self[name] = new tinymce.util.Dispatcher(self);
+ });
+
+ // Handle legacy cleanup_callback option
+ if (settings.cleanup_callback) {
+ self.onBeforeSetContent.add(function(ed, o) {
+ o.content = ed.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);
+ });
+
+ self.onPreProcess.add(function(ed, o) {
+ if (o.set)
+ ed.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o);
+
+ if (o.get)
+ ed.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o);
+ });
+
+ self.onPostProcess.add(function(ed, o) {
+ if (o.set)
+ o.content = ed.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);
+
+ if (o.get)
+ o.content = ed.execCallback('cleanup_callback', 'get_from_editor', o.content, o);
+ });
+ }
+
+ // Handle legacy save_callback option
+ if (settings.save_callback) {
+ self.onGetContent.add(function(ed, o) {
+ if (o.save)
+ o.content = ed.execCallback('save_callback', ed.id, o.content, ed.getBody());
+ });
+ }
+
+ // Handle legacy handle_event_callback option
+ if (settings.handle_event_callback) {
+ self.onEvent.add(function(ed, e, o) {
+ if (self.execCallback('handle_event_callback', e, ed, o) === false) {
+ e.preventDefault();
+ e.stopPropagation();
+ }
+ });
+ }
+
+ // Handle legacy handle_node_change_callback option
+ if (settings.handle_node_change_callback) {
+ self.onNodeChange.add(function(ed, cm, n) {
+ ed.execCallback('handle_node_change_callback', ed.id, n, -1, -1, true, ed.selection.isCollapsed());
+ });
+ }
+
+ // Handle legacy save_callback option
+ if (settings.save_callback) {
+ self.onSaveContent.add(function(ed, o) {
+ var h = ed.execCallback('save_callback', ed.id, o.content, ed.getBody());
+
+ if (h)
+ o.content = h;
+ });
+ }
+
+ // Handle legacy onchange_callback option
+ if (settings.onchange_callback) {
+ self.onChange.add(function(ed, l) {
+ ed.execCallback('onchange_callback', ed, l);
+ });
+ }
+ };
+
+ tinymce.Editor.prototype.bindNativeEvents = function() {
+ // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset
+ var self = this, i, settings = self.settings, dom = self.dom, nativeToDispatcherMap;
+
+ nativeToDispatcherMap = {
+ 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
+ };
+
+ // Handler that takes a native event and sends it out to a dispatcher like onKeyDown
+ function eventHandler(evt, args) {
+ var type = evt.type;
+
+ // Don't fire events when it's removed
+ if (self.removed)
+ return;
+
+ // Sends the native event out to a global dispatcher then to the specific event dispatcher
+ if (self.onEvent.dispatch(self, evt, args) !== false) {
+ self[nativeToDispatcherMap[evt.fakeType || evt.type]].dispatch(self, evt, args);
+ }
+ };
+
+ // Opera doesn't support focus event for contentEditable elements so we need to fake it
+ function doOperaFocus(e) {
+ self.focus(true);
+ };
+
+ function nodeChanged(ed, e) {
+ // Normalize selection for example <b>a</b><i>|a</i> becomes <b>a|</b><i>a</i> except for Ctrl+A since it selects everything
+ if (e.keyCode != 65 || !tinymce.VK.metaKeyPressed(e)) {
+ self.selection.normalize();
+ }
+
+ self.nodeChanged();
+ }
+
+ // Add DOM events
+ each(nativeToDispatcherMap, function(dispatcherName, nativeName) {
+ var root = settings.content_editable ? self.getBody() : self.getDoc();
+
+ switch (nativeName) {
+ case 'contextmenu':
+ dom.bind(root, nativeName, eventHandler);
+ break;
+
+ case 'paste':
+ dom.bind(self.getBody(), nativeName, eventHandler);
+ break;
+
+ case 'submit':
+ case 'reset':
+ dom.bind(self.getElement().form || tinymce.DOM.getParent(self.id, 'form'), nativeName, eventHandler);
+ break;
+
+ default:
+ dom.bind(root, nativeName, eventHandler);
+ }
+ });
+
+ // Set the editor as active when focused
+ dom.bind(settings.content_editable ? self.getBody() : (tinymce.isGecko ? self.getDoc() : self.getWin()), 'focus', function(e) {
+ self.focus(true);
+ });
+
+ if (settings.content_editable && tinymce.isOpera) {
+ dom.bind(self.getBody(), 'click', doOperaFocus);
+ dom.bind(self.getBody(), 'keydown', doOperaFocus);
+ }
+
+ // Add node change handler
+ self.onMouseUp.add(nodeChanged);
+
+ self.onKeyUp.add(function(ed, e) {
+ var keyCode = e.keyCode;
+
+ if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45 || keyCode == 46 || keyCode == 8 || (tinymce.isMac && (keyCode == 91 || keyCode == 93)) || e.ctrlKey)
+ nodeChanged(ed, e);
+ });
+
+ // Add reset handler
+ self.onReset.add(function() {
+ self.setContent(self.startContent, {format : 'raw'});
+ });
+
+ // Add shortcuts
+ function handleShortcut(e, execute) {
+ if (e.altKey || e.ctrlKey || e.metaKey) {
+ each(self.shortcuts, function(shortcut) {
+ var ctrlState = tinymce.isMac ? e.metaKey : e.ctrlKey;
+
+ if (shortcut.ctrl != ctrlState || shortcut.alt != e.altKey || shortcut.shift != e.shiftKey)
+ return;
+
+ if (e.keyCode == shortcut.keyCode || (e.charCode && e.charCode == shortcut.charCode)) {
+ e.preventDefault();
+
+ if (execute) {
+ shortcut.func.call(shortcut.scope);
+ }
+
+ return true;
+ }
+ });
+ }
+ };
+
+ self.onKeyUp.add(function(ed, e) {
+ handleShortcut(e);
+ });
+
+ self.onKeyPress.add(function(ed, e) {
+ handleShortcut(e);
+ });
+
+ self.onKeyDown.add(function(ed, e) {
+ handleShortcut(e, true);
+ });
+
+ if (tinymce.isOpera) {
+ self.onClick.add(function(ed, e) {
+ e.preventDefault();
+ });
+ }
+ };
+})(tinymce);
+(function(tinymce) {
+ // Added for compression purposes
+ var each = tinymce.each, undef, 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 === undef)
+ ui = FALSE;
+
+ if (value === undef)
+ 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} : undef);
+ };
+
+ 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;
+
+ //selection.normalize();
+
+ // 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 = 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 }));
+ },
+
+ mceToggleFormat : function(command, ui, value) {
+ toggleFormat(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')) {
+ // If forced_root_blocks is set to false we don't have a block to indent so lets create a div
+ if (!settings.forced_root_block && !dom.getParent(selection.getNode(), dom.isBlock)) {
+ formatter.apply('div');
+ }
+
+ 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();
+
+ // Old IE does a better job with selectall than new versions
+ if (selection.getRng().setStart) {
+ rng.setStart(root, 0);
+ rng.setEnd(root, root.childNodes.length);
+
+ selection.setRng(rng);
+ } else {
+ execNativeCommand('SelectAll');
+ }
+ }
+ });
+
+ // Add queryCommandState overrides
+ addCommands({
+ // Override justify commands
+ 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {
+ var name = 'align' + command.substring(7);
+ var nodes = selection.isCollapsed() ? [dom.getParent(selection.getNode(), dom.isBlock)] : selection.getSelectedBlocks();
+ var matches = tinymce.map(nodes, function(node) {
+ return !!formatter.matchNode(node, name);
+ });
+ return tinymce.inArray(matches, TRUE) !== -1;
+ },
+
+ '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) {
+ var list = dom.getParent(selection.getNode(), 'ul,ol');
+ return list &&
+ (command === 'insertunorderedlist' && list.tagName === 'UL'
+ || command === 'insertorderedlist' && list.tagName === '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
+ 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, onAdd, onUndo, onRedo;
+
+ function getContent() {
+ // Remove whitespace before/after and remove pure bogus nodes
+ return tinymce.trim(editor.getContent({format : 'raw', no_events : 1}).replace(/<span[^>]+data-mce-bogus[^>]+>[\u200B\uFEFF]+<\/span>/g, ''));
+ };
+
+ function addNonTypingUndoLevel() {
+ self.typing = false;
+ self.add();
+ };
+
+ // Create event instances
+ onBeforeAdd = new Dispatcher(self);
+ onAdd = new Dispatcher(self);
+ onUndo = new Dispatcher(self);
+ onRedo = new Dispatcher(self);
+
+ // Pass though onAdd event from UndoManager to Editor as onChange
+ onAdd.add(function(undoman, level) {
+ if (undoman.hasUndo())
+ return editor.onChange.dispatch(editor, level, undoman);
+ });
+
+ // Pass though onUndo event from UndoManager to Editor
+ onUndo.add(function(undoman, level) {
+ return editor.onUndo.dispatch(editor, level, undoman);
+ });
+
+ // Pass though onRedo event from UndoManager to Editor
+ onRedo.add(function(undoman, level) {
+ return editor.onRedo.dispatch(editor, level, undoman);
+ });
+
+ // Add initial undo level when the editor is initialized
+ editor.onInit.add(function() {
+ self.add();
+ });
+
+ // Get position before an execCommand is processed
+ editor.onBeforeExecCommand.add(function(ed, cmd, ui, val, args) {
+ if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!args || !args.skip_undo)) {
+ self.beforeChange();
+ }
+ });
+
+ // Add undo level after an execCommand call was made
+ editor.onExecCommand.add(function(ed, cmd, ui, val, args) {
+ if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!args || !args.skip_undo)) {
+ self.add();
+ }
+ });
+
+ // Add undo level on save contents, drag end and blur/focusout
+ editor.onSaveContent.add(addNonTypingUndoLevel);
+ editor.dom.bind(editor.dom.getRoot(), 'dragend', addNonTypingUndoLevel);
+ editor.dom.bind(editor.getBody(), 'focusout', function(e) {
+ if (!editor.removed && self.typing) {
+ addNonTypingUndoLevel();
+ }
+ });
+
+ editor.onKeyUp.add(function(editor, e) {
+ var keyCode = e.keyCode;
+
+ if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45 || keyCode == 13 || e.ctrlKey) {
+ addNonTypingUndoLevel();
+ }
+ });
+
+ editor.onKeyDown.add(function(editor, e) {
+ var keyCode = e.keyCode;
+
+ // Is caracter positon keys left,right,up,down,home,end,pgdown,pgup,enter
+ if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 45) {
+ if (self.typing) {
+ addNonTypingUndoLevel();
+ }
+
+ return;
+ }
+
+ // If key isn't shift,ctrl,alt,capslock,metakey
+ if ((keyCode < 16 || keyCode > 20) && keyCode != 224 && keyCode != 91 && !self.typing) {
+ self.beforeChange();
+ self.typing = true;
+ self.add();
+ }
+ });
+
+ editor.onMouseDown.add(function(editor, e) {
+ if (self.typing) {
+ addNonTypingUndoLevel();
+ }
+ });
+
+ // Add keyboard shortcuts for undo/redo keys
+ editor.addShortcut('ctrl+z', 'undo_desc', 'Undo');
+ editor.addShortcut('ctrl+y', 'redo_desc', 'Redo');
+
+ self = {
+ // Explose for debugging reasons
+ data : data,
+
+ typing : false,
+
+ onBeforeAdd: onBeforeAdd,
+
+ onAdd : onAdd,
+
+ onUndo : onUndo,
+
+ onRedo : onRedo,
+
+ beforeChange : function() {
+ beforeBookmark = editor.selection.getBookmark(2, true);
+ },
+
+ add : function(level) {
+ var i, settings = editor.settings, lastLevel;
+
+ level = level || {};
+ level.content = getContent();
+
+ self.onBeforeAdd.dispatch(self, level);
+
+ // 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;
+ }
+ };
+
+ return self;
+ };
+})(tinymce);
+
+tinymce.ForceBlocks = function(editor) {
+ var settings = editor.settings, dom = editor.dom, selection = editor.selection, blockElements = editor.schema.getBlockElements();
+
+ function addRootBlocks() {
+ var node = selection.getStart(), rootNode = editor.getBody(), rng, startContainer, startOffset, endContainer, endOffset, rootBlockNode, tempNode, offset = -0xFFFFFF, wrapped, isInEditorDocument;
+
+ if (!node || node.nodeType !== 1 || !settings.forced_root_block)
+ return;
+
+ // Check if node is wrapped in block
+ while (node && 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) {
+ node = rng.item(0);
+ rng = editor.getDoc().body.createTextRange();
+ rng.moveToElementText(node);
+ }
+
+ isInEditorDocument = rng.parentElement().ownerDocument === editor.getDoc();
+ 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
+ node = rootNode.firstChild;
+ while (node) {
+ if (node.nodeType === 3 || (node.nodeType == 1 && !blockElements[node.nodeName])) {
+ // Remove empty text nodes
+ if (node.nodeType === 3 && node.nodeValue.length == 0) {
+ tempNode = node;
+ node = node.nextSibling;
+ dom.remove(tempNode);
+ continue;
+ }
+
+ if (!rootBlockNode) {
+ rootBlockNode = dom.create(settings.forced_root_block);
+ node.parentNode.insertBefore(rootBlockNode, node);
+ wrapped = true;
+ }
+
+ tempNode = node;
+ node = node.nextSibling;
+ rootBlockNode.appendChild(tempNode);
+ } else {
+ rootBlockNode = null;
+ node = node.nextSibling;
+ }
+ }
+
+ if (wrapped) {
+ if (rng.setStart) {
+ rng.setStart(startContainer, startOffset);
+ rng.setEnd(endContainer, endOffset);
+ selection.setRng(rng);
+ } else {
+ // Only select if the previous selection was inside the document to prevent auto focus in quirks mode
+ if (isInEditorDocument) {
+ try {
+ rng = editor.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
+ }
+ }
+ }
+
+ editor.nodeChanged();
+ }
+ };
+
+ // Force root blocks
+ if (settings.forced_root_block) {
+ editor.onKeyUp.add(addRootBlocks);
+ editor.onNodeChange.add(addRootBlocks);
+ }
+};
+
+(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(name) {
+ var ctrl, i, l, self = this, editor = self.editor, factories, ctrlName;
+
+ // Build control factory cache
+ if (!self.controlFactories) {
+ self.controlFactories = [];
+ each(editor.plugins, function(plugin) {
+ if (plugin.createControl) {
+ self.controlFactories.push(plugin);
+ }
+ });
+ }
+
+ // Create controls by asking cached factories
+ factories = self.controlFactories;
+ for (i = 0, l = factories.length; i < l; i++) {
+ ctrl = factories[i].createControl(name, self);
+
+ if (ctrl) {
+ return self.add(ctrl);
+ }
+ }
+
+ // Create sepearator
+ if (name === "|" || name === "separator") {
+ return self.createSeparator();
+ }
+
+ // Create control from button collection
+ if (editor.buttons && (ctrl = editor.buttons[name])) {
+ return self.createButton(name, ctrl);
+ }
+
+ return self.add(ctrl);
+ },
+
+ 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);
+
+ s['class'] += ed.settings.directionality == "rtl" ? ' mceRtl' : '';
+
+ 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,
+ isArray = tinymce.isArray,
+ 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,
+ formatChangeData,
+ undef,
+ getContentEditable = dom.getContentEditable;
+
+ function isTextBlock(name) {
+ return !!ed.schema.getTextBlocks()[name.toLowerCase()];
+ }
+
+ function getParents(node, selector) {
+ return dom.getParents(node, selector, dom.getRoot());
+ };
+
+ function isCaretNode(node) {
+ return node.nodeType === 1 && node.id === '_mce_caret';
+ };
+
+ function defaultFormats() {
+ register({
+ alignleft : [
+ {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}, defaultBlock: 'div'},
+ {selector : 'img,table', collapsed : false, styles : {'float' : 'left'}}
+ ],
+
+ aligncenter : [
+ {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}, defaultBlock: 'div'},
+ {selector : 'img', collapsed : false, styles : {display : 'block', marginLeft : 'auto', marginRight : 'auto'}},
+ {selector : 'table', collapsed : false, styles : {marginLeft : 'auto', marginRight : 'auto'}}
+ ],
+
+ alignright : [
+ {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}, defaultBlock: 'div'},
+ {selector : 'img,table', collapsed : false, styles : {'float' : 'right'}}
+ ],
+
+ alignfull : [
+ {selector : 'figure,p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'justify'}, defaultBlock: 'div'}
+ ],
+
+ 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) {
+ 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) {
+ register(name, {block : name, remove : 'all'});
+ });
+
+ // Register user defined formats
+ register(ed.settings.formats);
+ };
+
+ function addKeyboardShortcuts() {
+ // Add some inline shortcuts
+ ed.addShortcut('ctrl+b', 'bold_desc', 'Bold');
+ ed.addShortcut('ctrl+i', 'italic_desc', 'Italic');
+ ed.addShortcut('ctrl+u', 'underline_desc', 'Underline');
+
+ // BlockFormat shortcuts keys
+ for (var i = 1; i <= 6; i++) {
+ ed.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]);
+ }
+
+ ed.addShortcut('ctrl+7', '', ['FormatBlock', false, 'p']);
+ ed.addShortcut('ctrl+8', '', ['FormatBlock', false, 'div']);
+ ed.addShortcut('ctrl+9', '', ['FormatBlock', false, 'address']);
+ };
+
+ // 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 === undef)
+ format.deep = !format.selector;
+
+ // Default to true
+ if (format.split === undef)
+ format.split = !format.selector || format.inline;
+
+ // Default to true
+ if (format.remove === undef && 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 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 || node.tagName == 'BR') {
+ 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 = dom.clone(wrapElm, 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, contentEditable = true;
+
+ // 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, parentName, found, hasContentEditableState, lastContentEditable;
+
+ lastContentEditable = contentEditable;
+ nodeName = node.nodeName.toLowerCase();
+ parentName = node.parentNode.nodeName.toLowerCase();
+
+ // Node has a contentEditable value
+ if (node.nodeType === 1 && getContentEditable(node)) {
+ lastContentEditable = contentEditable;
+ contentEditable = getContentEditable(node) === "true";
+ hasContentEditableState = true; // We don't want to wrap the container only it's children
+ }
+
+ // 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 (contentEditable && !hasContentEditableState && 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 (contentEditable && !hasContentEditableState && isValid(wrapName, nodeName) && isValid(parentName, wrapName) &&
+ !(!node_specific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && !isCaretNode(node)) {
+ // Start wrapping
+ if (!currentWrapElm) {
+ // Wrap the node
+ currentWrapElm = dom.clone(wrapElm, 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);
+
+ if (hasContentEditableState) {
+ contentEditable = lastContentEditable; // Restore last contentEditable state from stack
+ }
+
+ // 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 = dom.clone(wrapElm, 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 = dom.clone(child, 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();
+
+ // If the formats have a default block and we can't find a parent block then start wrapping it with a DIV this is for forced_root_blocks: false
+ // It's kind of a hack but people should be using the default block type P since all desktop editors work that way
+ if (!forcedRootBlock && formatList[0].defaultBlock && !dom.getParent(curSelNode, dom.isBlock)) {
+ apply(formatList[0].defaultBlock);
+ }
+
+ // 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);
+ 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, contentEditable = true;
+
+ // Merges the styles for each node
+ function process(node) {
+ var children, i, l, localContentEditable, lastContentEditable, hasContentEditableState;
+
+ // Skip on text nodes as they have neither format to remove nor children
+ if (node.nodeType === 3) {
+ return;
+ }
+
+ // Node has a contentEditable value
+ if (node.nodeType === 1 && getContentEditable(node)) {
+ lastContentEditable = contentEditable;
+ contentEditable = getContentEditable(node) === "true";
+ hasContentEditableState = true; // We don't want to wrap the container only it's children
+ }
+
+ // Grab the children first since the nodelist might be changed
+ children = tinymce.grep(node.childNodes);
+
+ // Process current node
+ if (contentEditable && !hasContentEditableState) {
+ for (i = 0, l = formatList.length; i < l; i++) {
+ if (removeFormat(formatList[i], vars, node, node))
+ break;
+ }
+ }
+
+ // Process the children
+ if (format.deep) {
+ if (children.length) {
+ for (i = 0, l = children.length; i < l; i++)
+ process(children[i]);
+
+ if (hasContentEditableState) {
+ contentEditable = lastContentEditable; // Restore last contentEditable state from stack
+ }
+ }
+ }
+ };
+
+ 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 = dom.clone(parent, 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, node;
+
+ rng = expandRng(rng, formatList, TRUE);
+
+ if (format.split) {
+ startContainer = getContainer(rng, TRUE);
+ endContainer = getContainer(rng);
+
+ if (startContainer != endContainer) {
+ // WebKit will render the table incorrectly if we wrap a TD in a SPAN so lets see if the can use the first child instead
+ // This will happen if you tripple click a table cell and use remove formatting
+ if (/^(TR|TD)$/.test(startContainer.nodeName) && startContainer.firstChild) {
+ startContainer = (startContainer.nodeName == "TD" ? startContainer.firstChild : startContainer.firstChild.firstChild) || startContainer;
+ }
+
+ // 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);
+ };
+
+ 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 === undef) {
+ 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);
+ }
+ }
+ }, dom.getRoot());
+
+ 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;
+ };
+
+ function formatChanged(formats, callback, similar) {
+ var currentFormats;
+
+ // Setup format node change logic
+ if (!formatChangeData) {
+ formatChangeData = {};
+ currentFormats = {};
+
+ ed.onNodeChange.addToTop(function(ed, cm, node) {
+ var parents = getParents(node), matchedFormats = {};
+
+ // Check for new formats
+ each(formatChangeData, function(callbacks, format) {
+ each(parents, function(node) {
+ if (matchNode(node, format, {}, callbacks.similar)) {
+ if (!currentFormats[format]) {
+ // Execute callbacks
+ each(callbacks, function(callback) {
+ callback(true, {node: node, format: format, parents: parents});
+ });
+
+ currentFormats[format] = callbacks;
+ }
+
+ matchedFormats[format] = callbacks;
+ return false;
+ }
+ });
+ });
+
+ // Check if current formats still match
+ each(currentFormats, function(callbacks, format) {
+ if (!matchedFormats[format]) {
+ delete currentFormats[format];
+
+ each(callbacks, function(callback) {
+ callback(false, {node: node, format: format, parents: parents});
+ });
+ }
+ });
+ });
+ }
+
+ // Add format listeners
+ each(formats.split(','), function(format) {
+ if (!formatChangeData[format]) {
+ formatChangeData[format] = [];
+ formatChangeData[format].similar = similar;
+ }
+
+ formatChangeData[format].push(callback);
+ });
+
+ return this;
+ };
+
+ // Expose to public
+ tinymce.extend(this, {
+ get : get,
+ register : register,
+ apply : apply,
+ remove : remove,
+ toggle : toggle,
+ match : match,
+ matchAll : matchAll,
+ matchNode : matchNode,
+ canApply : canApply,
+ formatChanged: formatChanged
+ });
+
+ // Initialize
+ defaultFormats();
+ addKeyboardShortcuts();
+
+ // 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 sibling, lastIdx, leaf, endPoint,
+ startContainer = rng.startContainer,
+ startOffset = rng.startOffset,
+ endContainer = rng.endContainer,
+ endOffset = rng.endOffset;
+
+ // This function walks up the tree if there is no siblings before/after the node
+ function findParentContainer(start) {
+ var container, parent, child, sibling, siblingName, root;
+
+ container = parent = start ? startContainer : endContainer;
+ siblingName = start ? 'previousSibling' : 'nextSibling';
+ root = dom.getRoot();
+
+ function isBogusBr(node) {
+ return node.nodeName == "BR" && node.getAttribute('data-mce-bogus') && !node.nextSibling;
+ };
+
+ // 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
+ if (!format[0].block_expand && isBlock(parent))
+ return parent;
+
+ // Walk left/right
+ for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {
+ if (!isBookmarkNode(sibling) && !isWhiteSpaceNode(sibling) && !isBogusBr(sibling)) {
+ return parent;
+ }
+ }
+
+ // Check if we can move up are we at root level or body level
+ if (parent.parentNode == root) {
+ container = parent;
+ break;
+ }
+
+ 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 === undef)
+ 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;
+ }
+
+ // Expands the node to the closes contentEditable false element if it exists
+ function findParentContentEditable(node) {
+ var parent = node;
+
+ while (parent) {
+ if (parent.nodeType === 1 && getContentEditable(parent)) {
+ return getContentEditable(parent) === "false" ? parent : node;
+ }
+
+ parent = parent.parentNode;
+ }
+
+ return node;
+ };
+
+ 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};
+ }
+ };
+
+ 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;
+ };
+
+ 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, isTextBlock);
+
+ // 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;
+ };
+
+ // Expand to closest contentEditable element
+ startContainer = findParentContentEditable(startContainer);
+ endContainer = findParentContentEditable(endContainer);
+
+ // 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) {
+ // 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);
+ }
+ }
+ }
+ }
+
+ // 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) {
+ // 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) {
+ // 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;
+
+ function find(node, next, inc) {
+ node = getNonWhiteSpaceSibling(node, next, inc);
+
+ return !node || (node.nodeName == 'BR' || isBlock(node));
+ };
+
+ if (format.block) {
+ if (!forcedRootBlock) {
+ // 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 === undef)
+ 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;
+ };
+
+ 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;
+ };
+
+ // Check if next/prev exists and that they are elements
+ if (prev && next) {
+ // 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 caretContainerId = '_mce_caret', debug = ed.settings.caret_debug;
+
+ // 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(INVISIBLE_CHAR));
+ }
+
+ return caretContainer;
+ };
+
+ function isCaretContainerEmpty(node, nodes) {
+ while (node) {
+ if ((node.nodeType === 3 && node.nodeValue !== INVISIBLE_CHAR) || 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);
+
+ if (child.nodeValue.charAt(0) === INVISIBLE_CHAR) {
+ 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 !== INVISIBLE_CHAR) {
+ 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 === INVISIBLE_CHAR) {
+ 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(dom.clone(parents[i], false));
+ node = node.firstChild;
+ }
+
+ // Insert invisible character into inner most format element
+ node.appendChild(dom.doc.createTextNode(INVISIBLE_CHAR));
+ node = node.firstChild;
+
+ // Insert caret container after the formated node
+ dom.insertAfter(caretContainer, formatNode);
+
+ // Move selection to text node
+ selection.setCursorLocation(node, 1);
+ }
+ };
+
+ // Checks if the parent caret container node isn't empty if that is the case it
+ // will remove the bogus state on all children that isn't empty
+ function unmarkBogusCaretParents() {
+ var i, caretContainer, node;
+
+ caretContainer = getParentCaretContainer(selection.getStart());
+ if (caretContainer && !dom.isEmpty(caretContainer)) {
+ tinymce.walk(caretContainer, function(node) {
+ if (node.nodeType == 1 && node.id !== caretContainerId && !dom.isEmpty(node)) {
+ dom.setAttrib(node, 'data-mce-bogus', null);
+ }
+ }, 'childNodes');
+ }
+ };
+
+ // Only bind the caret events once
+ if (!self._hasCaretEvents) {
+ // 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();
+ unmarkBogusCaretParents();
+ });
+ });
+
+ // 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()));
+ }
+
+ unmarkBogusCaretParents();
+ });
+
+ // Remove bogus state if they got filled by contents using editor.selection.setContent
+ selection.onSetContent.add(unmarkBogusCaretParents);
+
+ self._hasCaretEvents = true;
+ }
+
+ // Do apply or remove caret format
+ if (type == "apply") {
+ applyCaretFormat();
+ } else {
+ removeCaretFormat();
+ }
+ };
+
+ function moveStart(rng) {
+ var container = rng.startContainer,
+ offset = rng.startOffset, isAtEndOfText,
+ walker, node, nodes, tmpNode;
+
+ // Convert text node into index if possible
+ if (container.nodeType == 3 && offset >= container.nodeValue.length) {
+ // Get the parent container location and walk from there
+ offset = nodeIndex(container);
+ container = container.parentNode;
+ isAtEndOfText = true;
+ }
+
+ // 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, dom.getParent(container, dom.isBlock));
+
+ // If offset is at end of the parent node walk to the next one
+ if (offset > nodes.length - 1 || isAtEndOfText)
+ 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;
+ }
+ }
+ }
+ };
+ };
+})(tinymce);
+
+tinymce.onAddEditor.add(function(tinymce, ed) {
+ var filters, fontSizes, dom, settings = ed.settings;
+
+ function replaceWithSpan(node, styles) {
+ tinymce.each(styles, function(value, name) {
+ if (value)
+ dom.setStyle(node, name, value);
+ });
+
+ dom.rename(node, 'span');
+ };
+
+ 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);
+ });
+ }
+ };
+
+ if (settings.inline_styles) {
+ fontSizes = tinymce.explode(settings.font_size_legacy_values);
+
+ filters = {
+ font : function(dom, node) {
+ replaceWithSpan(node, {
+ backgroundColor : node.style.backgroundColor,
+ color : node.color,
+ fontFamily : node.face,
+ fontSize : fontSizes[parseInt(node.size, 10) - 1]
+ });
+ },
+
+ u : function(dom, node) {
+ replaceWithSpan(node, {
+ textDecoration : 'underline'
+ });
+ },
+
+ strike : function(dom, node) {
+ replaceWithSpan(node, {
+ textDecoration : 'line-through'
+ });
+ }
+ };
+
+ ed.onPreProcess.add(convert);
+ ed.onSetContent.add(convert);
+
+ ed.onInit.add(function() {
+ ed.selection.onSetContent.add(convert);
+ });
+ }
+});
+
+(function(tinymce) {
+ var TreeWalker = tinymce.dom.TreeWalker;
+
+ tinymce.EnterKey = function(editor) {
+ var dom = editor.dom, selection = editor.selection, settings = editor.settings, undoManager = editor.undoManager, nonEmptyElementsMap = editor.schema.getNonEmptyElements();
+
+ function handleEnterKey(evt) {
+ var rng = selection.getRng(true), tmpRng, editableRoot, container, offset, parentBlock, documentMode, shiftKey,
+ newBlock, fragment, containerBlock, parentBlockName, containerBlockName, newBlockName, isAfterLastNodeInContainer;
+
+ // Returns true if the block can be split into two blocks or not
+ function canSplitBlock(node) {
+ return node &&
+ dom.isBlock(node) &&
+ !/^(TD|TH|CAPTION|FORM)$/.test(node.nodeName) &&
+ !/^(fixed|absolute)/i.test(node.style.position) &&
+ dom.getContentEditable(node) !== "true";
+ };
+
+ // Renders empty block on IE
+ function renderBlockOnIE(block) {
+ var oldRng;
+
+ if (tinymce.isIE && dom.isBlock(block)) {
+ oldRng = selection.getRng();
+ block.appendChild(dom.create('span', null, '\u00a0'));
+ selection.select(block);
+ block.lastChild.outerHTML = '';
+ selection.setRng(oldRng);
+ }
+ };
+
+ // Remove the first empty inline element of the block so this: <p><b><em></em></b>x</p> becomes this: <p>x</p>
+ function trimInlineElementsOnLeftSideOfBlock(block) {
+ var node = block, firstChilds = [], i;
+
+ // Find inner most first child ex: <p><i><b>*</b></i></p>
+ while (node = node.firstChild) {
+ if (dom.isBlock(node)) {
+ return;
+ }
+
+ if (node.nodeType == 1 && !nonEmptyElementsMap[node.nodeName.toLowerCase()]) {
+ firstChilds.push(node);
+ }
+ }
+
+ i = firstChilds.length;
+ while (i--) {
+ node = firstChilds[i];
+ if (!node.hasChildNodes() || (node.firstChild == node.lastChild && node.firstChild.nodeValue === '')) {
+ dom.remove(node);
+ } else {
+ // Remove <a> </a> see #5381
+ if (node.nodeName == "A" && (node.innerText || node.textContent) === ' ') {
+ dom.remove(node);
+ }
+ }
+ }
+ };
+
+ // Moves the caret to a suitable position within the root for example in the first non pure whitespace text node or before an image
+ function moveToCaretPosition(root) {
+ var walker, node, rng, y, viewPort, lastNode = root, tempElm;
+
+ rng = dom.createRng();
+
+ if (root.hasChildNodes()) {
+ walker = new TreeWalker(root, root);
+
+ while (node = walker.current()) {
+ if (node.nodeType == 3) {
+ rng.setStart(node, 0);
+ rng.setEnd(node, 0);
+ break;
+ }
+
+ if (nonEmptyElementsMap[node.nodeName.toLowerCase()]) {
+ rng.setStartBefore(node);
+ rng.setEndBefore(node);
+ break;
+ }
+
+ lastNode = node;
+ node = walker.next();
+ }
+
+ if (!node) {
+ rng.setStart(lastNode, 0);
+ rng.setEnd(lastNode, 0);
+ }
+ } else {
+ if (root.nodeName == 'BR') {
+ if (root.nextSibling && dom.isBlock(root.nextSibling)) {
+ // Trick on older IE versions to render the caret before the BR between two lists
+ if (!documentMode || documentMode < 9) {
+ tempElm = dom.create('br');
+ root.parentNode.insertBefore(tempElm, root);
+ }
+
+ rng.setStartBefore(root);
+ rng.setEndBefore(root);
+ } else {
+ rng.setStartAfter(root);
+ rng.setEndAfter(root);
+ }
+ } else {
+ rng.setStart(root, 0);
+ rng.setEnd(root, 0);
+ }
+ }
+
+ selection.setRng(rng);
+
+ // Remove tempElm created for old IE:s
+ dom.remove(tempElm);
+
+ viewPort = dom.getViewPort(editor.getWin());
+
+ // 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 = dom.getPos(root).y;
+ if (y < viewPort.y || y + 25 > viewPort.y + viewPort.h) {
+ editor.getWin().scrollTo(0, y < viewPort.y ? y : y - viewPort.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks
+ }
+ };
+
+ // Creates a new block element by cloning the current one or creating a new one if the name is specified
+ // This function will also copy any text formatting from the parent block and add it to the new one
+ function createNewBlock(name) {
+ var node = container, block, clonedNode, caretNode;
+
+ block = name || parentBlockName == "TABLE" ? dom.create(name || newBlockName) : parentBlock.cloneNode(false);
+ caretNode = block;
+
+ // Clone any parent styles
+ if (settings.keep_styles !== false) {
+ do {
+ if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) {
+ // Never clone a caret containers
+ if (node.id == '_mce_caret') {
+ continue;
+ }
+
+ clonedNode = node.cloneNode(false);
+ dom.setAttrib(clonedNode, 'id', ''); // Remove ID since it needs to be document unique
+
+ if (block.hasChildNodes()) {
+ clonedNode.appendChild(block.firstChild);
+ block.appendChild(clonedNode);
+ } else {
+ caretNode = clonedNode;
+ block.appendChild(clonedNode);
+ }
+ }
+ } while (node = node.parentNode);
+ }
+
+ // BR is needed in empty blocks on non IE browsers
+ if (!tinymce.isIE) {
+ caretNode.innerHTML = '<br data-mce-bogus="1">';
+ }
+
+ return block;
+ };
+
+ // Returns true/false if the caret is at the start/end of the parent block element
+ function isCaretAtStartOrEndOfBlock(start) {
+ var walker, node, name;
+
+ // Caret is in the middle of a text node like "a|b"
+ if (container.nodeType == 3 && (start ? offset > 0 : offset < container.nodeValue.length)) {
+ return false;
+ }
+
+ // If after the last element in block node edge case for #5091
+ if (container.parentNode == parentBlock && isAfterLastNodeInContainer && !start) {
+ return true;
+ }
+
+ // If the caret if before the first element in parentBlock
+ if (start && container.nodeType == 1 && container == parentBlock.firstChild) {
+ return true;
+ }
+
+ // Caret can be before/after a table
+ if (container.nodeName === "TABLE" || (container.previousSibling && container.previousSibling.nodeName == "TABLE")) {
+ return (isAfterLastNodeInContainer && !start) || (!isAfterLastNodeInContainer && start);
+ }
+
+ // Walk the DOM and look for text nodes or non empty elements
+ walker = new TreeWalker(container, parentBlock);
+
+ // If caret is in beginning or end of a text block then jump to the next/previous node
+ if (container.nodeType == 3) {
+ if (start && offset == 0) {
+ walker.prev();
+ } else if (!start && offset == container.nodeValue.length) {
+ walker.next();
+ }
+ }
+
+ while (node = walker.current()) {
+ if (node.nodeType === 1) {
+ // Ignore bogus elements
+ if (!node.getAttribute('data-mce-bogus')) {
+ // Keep empty elements like <img /> <input /> but not trailing br:s like <p>text|<br></p>
+ name = node.nodeName.toLowerCase();
+ if (nonEmptyElementsMap[name] && name !== 'br') {
+ return false;
+ }
+ }
+ } else if (node.nodeType === 3 && !/^[ \t\r\n]*$/.test(node.nodeValue)) {
+ return false;
+ }
+
+ if (start) {
+ walker.prev();
+ } else {
+ walker.next();
+ }
+ }
+
+ return true;
+ };
+
+ // Wraps any text nodes or inline elements in the specified forced root block name
+ function wrapSelfAndSiblingsInDefaultBlock(container, offset) {
+ var newBlock, parentBlock, startNode, node, next, blockName = newBlockName || 'P';
+
+ // Not in a block element or in a table cell or caption
+ parentBlock = dom.getParent(container, dom.isBlock);
+ if (!parentBlock || !canSplitBlock(parentBlock)) {
+ parentBlock = parentBlock || editableRoot;
+
+ if (!parentBlock.hasChildNodes()) {
+ newBlock = dom.create(blockName);
+ parentBlock.appendChild(newBlock);
+ rng.setStart(newBlock, 0);
+ rng.setEnd(newBlock, 0);
+ return newBlock;
+ }
+
+ // Find parent that is the first child of parentBlock
+ node = container;
+ while (node.parentNode != parentBlock) {
+ node = node.parentNode;
+ }
+
+ // Loop left to find start node start wrapping at
+ while (node && !dom.isBlock(node)) {
+ startNode = node;
+ node = node.previousSibling;
+ }
+
+ if (startNode) {
+ newBlock = dom.create(blockName);
+ startNode.parentNode.insertBefore(newBlock, startNode);
+
+ // Start wrapping until we hit a block
+ node = startNode;
+ while (node && !dom.isBlock(node)) {
+ next = node.nextSibling;
+ newBlock.appendChild(node);
+ node = next;
+ }
+
+ // Restore range to it's past location
+ rng.setStart(container, offset);
+ rng.setEnd(container, offset);
+ }
+ }
+
+ return container;
+ };
+
+ // Inserts a block or br before/after or in the middle of a split list of the LI is empty
+ function handleEmptyListItem() {
+ function isFirstOrLastLi(first) {
+ var node = containerBlock[first ? 'firstChild' : 'lastChild'];
+
+ // Find first/last element since there might be whitespace there
+ while (node) {
+ if (node.nodeType == 1) {
+ break;
+ }
+
+ node = node[first ? 'nextSibling' : 'previousSibling'];
+ }
+
+ return node === parentBlock;
+ };
+
+ newBlock = newBlockName ? createNewBlock(newBlockName) : dom.create('BR');
+
+ if (isFirstOrLastLi(true) && isFirstOrLastLi()) {
+ // Is first and last list item then replace the OL/UL with a text block
+ dom.replace(newBlock, containerBlock);
+ } else if (isFirstOrLastLi(true)) {
+ // First LI in list then remove LI and add text block before list
+ containerBlock.parentNode.insertBefore(newBlock, containerBlock);
+ } else if (isFirstOrLastLi()) {
+ // Last LI in list then temove LI and add text block after list
+ dom.insertAfter(newBlock, containerBlock);
+ renderBlockOnIE(newBlock);
+ } else {
+ // Middle LI in list the split the list and insert a text block in the middle
+ // Extract after fragment and insert it after the current block
+ tmpRng = rng.cloneRange();
+ tmpRng.setStartAfter(parentBlock);
+ tmpRng.setEndAfter(containerBlock);
+ fragment = tmpRng.extractContents();
+ dom.insertAfter(fragment, containerBlock);
+ dom.insertAfter(newBlock, containerBlock);
+ }
+
+ dom.remove(parentBlock);
+ moveToCaretPosition(newBlock);
+ undoManager.add();
+ };
+
+ // Walks the parent block to the right and look for BR elements
+ function hasRightSideBr() {
+ var walker = new TreeWalker(container, parentBlock), node;
+
+ while (node = walker.current()) {
+ if (node.nodeName == 'BR') {
+ return true;
+ }
+
+ node = walker.next();
+ }
+ }
+
+ // Inserts a BR element if the forced_root_block option is set to false or empty string
+ function insertBr() {
+ var brElm, extraBr, marker;
+
+ if (container && container.nodeType == 3 && offset >= container.nodeValue.length) {
+ // Insert extra BR element at the end block elements
+ if (!tinymce.isIE && !hasRightSideBr()) {
+ brElm = dom.create('br');
+ rng.insertNode(brElm);
+ rng.setStartAfter(brElm);
+ rng.setEndAfter(brElm);
+ extraBr = true;
+ }
+ }
+
+ brElm = dom.create('br');
+ rng.insertNode(brElm);
+
+ // Rendering modes below IE8 doesn't display BR elements in PRE unless we have a \n before it
+ if (tinymce.isIE && parentBlockName == 'PRE' && (!documentMode || documentMode < 8)) {
+ brElm.parentNode.insertBefore(dom.doc.createTextNode('\r'), brElm);
+ }
+
+ // Insert temp marker and scroll to that
+ marker = dom.create('span', {}, '&nbsp;');
+ brElm.parentNode.insertBefore(marker, brElm);
+ selection.scrollIntoView(marker);
+ dom.remove(marker);
+
+ if (!extraBr) {
+ rng.setStartAfter(brElm);
+ rng.setEndAfter(brElm);
+ } else {
+ rng.setStartBefore(brElm);
+ rng.setEndBefore(brElm);
+ }
+
+ selection.setRng(rng);
+ undoManager.add();
+ };
+
+ // Trims any linebreaks at the beginning of node user for example when pressing enter in a PRE element
+ function trimLeadingLineBreaks(node) {
+ do {
+ if (node.nodeType === 3) {
+ node.nodeValue = node.nodeValue.replace(/^[\r\n]+/, '');
+ }
+
+ node = node.firstChild;
+ } while (node);
+ };
+
+ function getEditableRoot(node) {
+ var root = dom.getRoot(), parent, editableRoot;
+
+ // Get all parents until we hit a non editable parent or the root
+ parent = node;
+ while (parent !== root && dom.getContentEditable(parent) !== "false") {
+ if (dom.getContentEditable(parent) === "true") {
+ editableRoot = parent;
+ }
+
+ parent = parent.parentNode;
+ }
+
+ return parent !== root ? editableRoot : root;
+ };
+
+ // Adds a BR at the end of blocks that only contains an IMG or INPUT since these might be floated and then they won't expand the block
+ function addBrToBlockIfNeeded(block) {
+ var lastChild;
+
+ // IE will render the blocks correctly other browsers needs a BR
+ if (!tinymce.isIE) {
+ block.normalize(); // Remove empty text nodes that got left behind by the extract
+
+ // Check if the block is empty or contains a floated last child
+ lastChild = block.lastChild;
+ if (!lastChild || (/^(left|right)$/gi.test(dom.getStyle(lastChild, 'float', true)))) {
+ dom.add(block, 'br');
+ }
+ }
+ };
+
+ // Delete any selected contents
+ if (!rng.collapsed) {
+ editor.execCommand('Delete');
+ return;
+ }
+
+ // Event is blocked by some other handler for example the lists plugin
+ if (evt.isDefaultPrevented()) {
+ return;
+ }
+
+ // Setup range items and newBlockName
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ newBlockName = (settings.force_p_newlines ? 'p' : '') || settings.forced_root_block;
+ newBlockName = newBlockName ? newBlockName.toUpperCase() : '';
+ documentMode = dom.doc.documentMode;
+ shiftKey = evt.shiftKey;
+
+ // Resolve node index
+ if (container.nodeType == 1 && container.hasChildNodes()) {
+ isAfterLastNodeInContainer = offset > container.childNodes.length - 1;
+ container = container.childNodes[Math.min(offset, container.childNodes.length - 1)] || container;
+ if (isAfterLastNodeInContainer && container.nodeType == 3) {
+ offset = container.nodeValue.length;
+ } else {
+ offset = 0;
+ }
+ }
+
+ // Get editable root node normaly the body element but sometimes a div or span
+ editableRoot = getEditableRoot(container);
+
+ // If there is no editable root then enter is done inside a contentEditable false element
+ if (!editableRoot) {
+ return;
+ }
+
+ undoManager.beforeChange();
+
+ // If editable root isn't block nor the root of the editor
+ if (!dom.isBlock(editableRoot) && editableRoot != dom.getRoot()) {
+ if (!newBlockName || shiftKey) {
+ insertBr();
+ }
+
+ return;
+ }
+
+ // Wrap the current node and it's sibling in a default block if it's needed.
+ // for example this <td>text|<b>text2</b></td> will become this <td><p>text|<b>text2</p></b></td>
+ // This won't happen if root blocks are disabled or the shiftKey is pressed
+ if ((newBlockName && !shiftKey) || (!newBlockName && shiftKey)) {
+ container = wrapSelfAndSiblingsInDefaultBlock(container, offset);
+ }
+
+ // Find parent block and setup empty block paddings
+ parentBlock = dom.getParent(container, dom.isBlock);
+ containerBlock = parentBlock ? dom.getParent(parentBlock.parentNode, dom.isBlock) : null;
+
+ // Setup block names
+ parentBlockName = parentBlock ? parentBlock.nodeName.toUpperCase() : ''; // IE < 9 & HTML5
+ containerBlockName = containerBlock ? containerBlock.nodeName.toUpperCase() : ''; // IE < 9 & HTML5
+
+ // Enter inside block contained within a LI then split or insert before/after LI
+ if (containerBlockName == 'LI' && !evt.ctrlKey) {
+ parentBlock = containerBlock;
+ parentBlockName = containerBlockName;
+ }
+
+ // Handle enter in LI
+ if (parentBlockName == 'LI') {
+ if (!newBlockName && shiftKey) {
+ insertBr();
+ return;
+ }
+
+ // Handle enter inside an empty list item
+ if (dom.isEmpty(parentBlock)) {
+ // Let the list plugin or browser handle nested lists for now
+ if (/^(UL|OL|LI)$/.test(containerBlock.parentNode.nodeName)) {
+ return false;
+ }
+
+ handleEmptyListItem();
+ return;
+ }
+ }
+
+ // Don't split PRE tags but insert a BR instead easier when writing code samples etc
+ if (parentBlockName == 'PRE' && settings.br_in_pre !== false) {
+ if (!shiftKey) {
+ insertBr();
+ return;
+ }
+ } else {
+ // If no root block is configured then insert a BR by default or if the shiftKey is pressed
+ if ((!newBlockName && !shiftKey && parentBlockName != 'LI') || (newBlockName && shiftKey)) {
+ insertBr();
+ return;
+ }
+ }
+
+ // Default block name if it's not configured
+ newBlockName = newBlockName || 'P';
+
+ // Insert new block before/after the parent block depending on caret location
+ if (isCaretAtStartOrEndOfBlock()) {
+ // If the caret is at the end of a header we produce a P tag after it similar to Word unless we are in a hgroup
+ if (/^(H[1-6]|PRE)$/.test(parentBlockName) && containerBlockName != 'HGROUP') {
+ newBlock = createNewBlock(newBlockName);
+ } else {
+ newBlock = createNewBlock();
+ }
+
+ // Split the current container block element if enter is pressed inside an empty inner block element
+ if (settings.end_container_on_empty_block && canSplitBlock(containerBlock) && dom.isEmpty(parentBlock)) {
+ // Split container block for example a BLOCKQUOTE at the current blockParent location for example a P
+ newBlock = dom.split(containerBlock, parentBlock);
+ } else {
+ dom.insertAfter(newBlock, parentBlock);
+ }
+
+ moveToCaretPosition(newBlock);
+ } else if (isCaretAtStartOrEndOfBlock(true)) {
+ // Insert new block before
+ newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);
+ renderBlockOnIE(newBlock);
+ } else {
+ // Extract after fragment and insert it after the current block
+ tmpRng = rng.cloneRange();
+ tmpRng.setEndAfter(parentBlock);
+ fragment = tmpRng.extractContents();
+ trimLeadingLineBreaks(fragment);
+ newBlock = fragment.firstChild;
+ dom.insertAfter(fragment, parentBlock);
+ trimInlineElementsOnLeftSideOfBlock(newBlock);
+ addBrToBlockIfNeeded(parentBlock);
+ moveToCaretPosition(newBlock);
+ }
+
+ dom.setAttrib(newBlock, 'id', ''); // Remove ID since it needs to be document unique
+ undoManager.add();
+ }
+
+ editor.onKeyDown.add(function(ed, evt) {
+ if (evt.keyCode == 13) {
+ if (handleEnterKey(evt) !== false) {
+ evt.preventDefault();
+ }
+ }
+ });
+ };
+})(tinymce);
+
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..344d71b14
--- /dev/null
+++ b/mod/tinymce/views/default/js/tinymce.php
@@ -0,0 +1,102 @@
+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,inlinepopups",
+ 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);
+ });
+
+ ed.onInit.add(function(ed) {
+ // prevent Firefox from dragging/dropping files into editor
+ if (tinymce.isGecko) {
+ tinymce.dom.Event.add(ed.getBody().parentNode, "drop", function(e) {
+ if (e.dataTransfer.files.length > 0) {
+ e.preventDefault();
+ }
+ });
+ }
+ });
+
+ },
+ 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_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..a6f4b40a5
--- /dev/null
+++ b/mod/twitter_api/languages/en.php
@@ -0,0 +1,62 @@
+<?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:post_to_twitter' => "Send users' wire posts to Twitter?",
+
+ 'twitter_api:login' => 'Allow users 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..a7b971876
--- /dev/null
+++ b/mod/twitter_api/lib/twitter_api.php
@@ -0,0 +1,383 @@
+<?php
+/**
+ * Common library of functions used by Twitter Services.
+ *
+ * @package twitter_api
+ */
+
+/**
+ * Get the API wrapper object
+ *
+ * @param string $oauth_token User's OAuth token
+ * @param string $oauth_token_secret User's OAuth secret
+ * @return TwitterOAuth|null
+ */
+function twitter_api_get_api_object($oauth_token = null, $oauth_token_secret = null) {
+ $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 null;
+ }
+
+ $api = new TwitterOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
+ if ($api) {
+ $api->host = "https://api.twitter.com/1.1/";
+ }
+ return $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']) || !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 {
+ $api = twitter_api_get_api_object($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(get_input('oauth_verifier'));
+ 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;
+
+ // request tokens from Twitter
+ $twitter = twitter_api_get_api_object();
+ $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;
+
+ // 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 = twitter_api_get_api_object($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;
+}
diff --git a/mod/twitter_api/manifest.xml b/mod/twitter_api/manifest.xml
new file mode 100644
index 000000000..3af866bba
--- /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.15</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>php_extension</type>
+ <name>curl</name>
+ </requires>
+
+ <conflicts>
+ <type>plugin</type>
+ <name>oauth_api</name>
+ </conflicts>
+ <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..23b5069cb
--- /dev/null
+++ b/mod/twitter_api/pages/twitter_api/interstitial.php
@@ -0,0 +1,19 @@
+<?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');
+
+$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..7318ac55d
--- /dev/null
+++ b/mod/twitter_api/start.php
@@ -0,0 +1,174 @@
+<?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 wire post messages to twitter
+ if (elgg_get_plugin_setting('wire_posts', 'twitter_api') == 'yes') {
+ 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 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;
+ }
+
+ $api = twitter_api_get_api_object($access_key, $access_secret);
+ if (!$api) {
+ return;
+ }
+
+ $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 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;
+ }
+
+ $api = twitter_api_get_api_object($access_key, $access_secret);
+ if (!$api) {
+ return FALSE;
+ }
+
+ 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..e76304146
--- /dev/null
+++ b/mod/twitter_api/vendors/twitteroauth/OAuth.php
@@ -0,0 +1,872 @@
+<?php
+// vim: foldmethod=marker
+
+/* Generic exception class
+ */
+class OAuthException extends Exception {
+ // pass
+}
+
+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();
+ }
+}
+
+/**
+ * A class for implementing a Signature Method
+ * See section 9 ("Signing Requests") in the spec
+ */
+abstract class OAuthSignatureMethod {
+ /**
+ * Needs to return the name of the Signature Method (ie HMAC-SHA1)
+ * @return string
+ */
+ abstract public function get_name();
+
+ /**
+ * Build up the signature
+ * NOTE: The output of this function MUST NOT be urlencoded.
+ * the encoding is handled in OAuthRequest when the final
+ * request is serialized
+ * @param OAuthRequest $request
+ * @param OAuthConsumer $consumer
+ * @param OAuthToken $token
+ * @return string
+ */
+ abstract public function build_signature($request, $consumer, $token);
+
+ /**
+ * Verifies that a given signature is correct
+ * @param OAuthRequest $request
+ * @param OAuthConsumer $consumer
+ * @param OAuthToken $token
+ * @param string $signature
+ * @return bool
+ */
+ public function check_signature($request, $consumer, $token, $signature) {
+ $built = $this->build_signature($request, $consumer, $token);
+ return $built == $signature;
+ }
+}
+
+/**
+ * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]
+ * where the Signature Base String is the text and the key is the concatenated values (each first
+ * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&'
+ * character (ASCII code 38) even if empty.
+ * - Chapter 9.2 ("HMAC-SHA1")
+ */
+class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod {
+ 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));
+ }
+}
+
+/**
+ * The PLAINTEXT method does not provide any security protection and SHOULD only be used
+ * over a secure channel such as HTTPS. It does not use the Signature Base String.
+ * - Chapter 9.4 ("PLAINTEXT")
+ */
+class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod {
+ public function get_name() {
+ return "PLAINTEXT";
+ }
+
+ /**
+ * oauth_signature is set to the concatenated encoded values of the Consumer Secret and
+ * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is
+ * empty. The result MUST be encoded again.
+ * - Chapter 9.4.1 ("Generating Signatures")
+ *
+ * Please note that the second encoding MUST NOT happen in the SignatureMethod, as
+ * OAuthRequest handles this!
+ */
+ public function build_signature($request, $consumer, $token) {
+ $key_parts = array(
+ $consumer->secret,
+ ($token) ? $token->secret : ""
+ );
+
+ $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
+ $key = implode('&', $key_parts);
+ $request->base_string = $key;
+
+ return $key;
+ }
+}
+
+/**
+ * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in
+ * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for
+ * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a
+ * verified way to the Service Provider, in a manner which is beyond the scope of this
+ * specification.
+ * - Chapter 9.3 ("RSA-SHA1")
+ */
+abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod {
+ public function get_name() {
+ return "RSA-SHA1";
+ }
+
+ // Up to the SP to implement this lookup of keys. Possible 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
+ protected abstract function fetch_public_cert(&$request);
+
+ // Up to the SP to implement this lookup of keys. Possible 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
+ protected abstract function fetch_private_cert(&$request);
+
+ public function build_signature($request, $consumer, $token) {
+ $base_string = $request->get_signature_base_string();
+ $request->base_string = $base_string;
+
+ // 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
+ $ok = openssl_sign($base_string, $signature, $privatekeyid);
+
+ // Release the key resource
+ openssl_free_key($privatekeyid);
+
+ return base64_encode($signature);
+ }
+
+ public function check_signature($request, $consumer, $token, $signature) {
+ $decoded_sig = base64_decode($signature);
+
+ $base_string = $request->get_signature_base_string();
+
+ // 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;
+ }
+}
+
+class 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 OAuthRequest($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" => OAuthRequest::$version,
+ "oauth_nonce" => OAuthRequest::generate_nonce(),
+ "oauth_timestamp" => OAuthRequest::generate_timestamp(),
+ "oauth_consumer_key" => $consumer->key);
+ if ($token)
+ $defaults['oauth_token'] = $token->key;
+
+ $parameters = array_merge($defaults, $parameters);
+
+ return new OAuthRequest($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 OAuthServer {
+ protected $timestamp_threshold = 300; // in seconds, five minutes
+ protected $version = '1.0'; // hi blaine
+ protected $signature_methods = array();
+
+ protected $data_store;
+
+ function __construct($data_store) {
+ $this->data_store = $data_store;
+ }
+
+ public function add_signature_method($signature_method) {
+ $this->signature_methods[$signature_method->get_name()] =
+ $signature_method;
+ }
+
+ // high level functions
+
+ /**
+ * process a request_token request
+ * returns the request token on success
+ */
+ public function fetch_request_token(&$request) {
+ $this->get_version($request);
+
+ $consumer = $this->get_consumer($request);
+
+ // no token required for the initial token request
+ $token = NULL;
+
+ $this->check_signature($request, $consumer, $token);
+
+ // Rev A change
+ $callback = $request->get_parameter('oauth_callback');
+ $new_token = $this->data_store->new_request_token($consumer, $callback);
+
+ return $new_token;
+ }
+
+ /**
+ * process an access_token request
+ * returns the access token on success
+ */
+ public function fetch_access_token(&$request) {
+ $this->get_version($request);
+
+ $consumer = $this->get_consumer($request);
+
+ // requires authorized request token
+ $token = $this->get_token($request, $consumer, "request");
+
+ $this->check_signature($request, $consumer, $token);
+
+ // Rev A change
+ $verifier = $request->get_parameter('oauth_verifier');
+ $new_token = $this->data_store->new_access_token($token, $consumer, $verifier);
+
+ return $new_token;
+ }
+
+ /**
+ * verify an api call, checks all the parameters
+ */
+ public function verify_request(&$request) {
+ $this->get_version($request);
+ $consumer = $this->get_consumer($request);
+ $token = $this->get_token($request, $consumer, "access");
+ $this->check_signature($request, $consumer, $token);
+ return array($consumer, $token);
+ }
+
+ // Internals from here
+ /**
+ * version 1
+ */
+ private function get_version(&$request) {
+ $version = $request->get_parameter("oauth_version");
+ if (!$version) {
+ // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present.
+ // Chapter 7.0 ("Accessing Protected Ressources")
+ $version = '1.0';
+ }
+ if ($version !== $this->version) {
+ throw new OAuthException("OAuth version '$version' not supported");
+ }
+ return $version;
+ }
+
+ /**
+ * figure out the signature with some defaults
+ */
+ private function get_signature_method(&$request) {
+ $signature_method =
+ @$request->get_parameter("oauth_signature_method");
+
+ if (!$signature_method) {
+ // According to chapter 7 ("Accessing Protected Ressources") the signature-method
+ // parameter is required, and we can't just fallback to PLAINTEXT
+ throw new OAuthException('No signature method parameter. This parameter is required');
+ }
+
+ if (!in_array($signature_method,
+ array_keys($this->signature_methods))) {
+ throw new OAuthException(
+ "Signature method '$signature_method' not supported " .
+ "try one of the following: " .
+ implode(", ", array_keys($this->signature_methods))
+ );
+ }
+ return $this->signature_methods[$signature_method];
+ }
+
+ /**
+ * try to find the consumer for the provided request's consumer key
+ */
+ private function get_consumer(&$request) {
+ $consumer_key = @$request->get_parameter("oauth_consumer_key");
+ if (!$consumer_key) {
+ throw new OAuthException("Invalid consumer key");
+ }
+
+ $consumer = $this->data_store->lookup_consumer($consumer_key);
+ if (!$consumer) {
+ throw new OAuthException("Invalid consumer");
+ }
+
+ return $consumer;
+ }
+
+ /**
+ * try to find the token for the provided request's token key
+ */
+ private function get_token(&$request, $consumer, $token_type="access") {
+ $token_field = @$request->get_parameter('oauth_token');
+ $token = $this->data_store->lookup_token(
+ $consumer, $token_type, $token_field
+ );
+ if (!$token) {
+ throw new OAuthException("Invalid $token_type token: $token_field");
+ }
+ return $token;
+ }
+
+ /**
+ * all-in-one function to check the signature on a request
+ * should guess the signature method appropriately
+ */
+ private function check_signature(&$request, $consumer, $token) {
+ // this should probably be in a different method
+ $timestamp = @$request->get_parameter('oauth_timestamp');
+ $nonce = @$request->get_parameter('oauth_nonce');
+
+ $this->check_timestamp($timestamp);
+ $this->check_nonce($consumer, $token, $nonce, $timestamp);
+
+ $signature_method = $this->get_signature_method($request);
+
+ $signature = $request->get_parameter('oauth_signature');
+ $valid_sig = $signature_method->check_signature(
+ $request,
+ $consumer,
+ $token,
+ $signature
+ );
+
+ if (!$valid_sig) {
+ throw new OAuthException("Invalid signature");
+ }
+ }
+
+ /**
+ * check that the timestamp is new enough
+ */
+ private function check_timestamp($timestamp) {
+ if( ! $timestamp )
+ throw new OAuthException(
+ 'Missing timestamp parameter. The parameter is required'
+ );
+
+ // verify that timestamp is recentish
+ $now = time();
+ if (abs($now - $timestamp) > $this->timestamp_threshold) {
+ throw new OAuthException(
+ "Expired timestamp, yours $timestamp, ours $now"
+ );
+ }
+ }
+
+ /**
+ * check that the nonce is not repeated
+ */
+ private function check_nonce($consumer, $token, $nonce, $timestamp) {
+ if( ! $nonce )
+ throw new OAuthException(
+ 'Missing nonce parameter. The parameter is required'
+ );
+
+ // verify that the nonce is uniqueish
+ $found = $this->data_store->lookup_nonce(
+ $consumer,
+ $token,
+ $nonce,
+ $timestamp
+ );
+ if ($found) {
+ throw new OAuthException("Nonce already used: $nonce");
+ }
+ }
+
+}
+
+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..c9a17ce4b
--- /dev/null
+++ b/mod/twitter_api/vendors/twitteroauth/README
@@ -0,0 +1,114 @@
+TwitterOAuth
+------------
+
+PHP library for working with Twitter's OAuth API.
+
+Flow Overview
+=============
+
+1. Build TwitterOAuth object using client credentials.
+2. Request temporary credentials from Twitter.
+3. Build authorize URL for Twitter.
+4. Redirect user to authorize URL.
+5. User authorizes access and returns from Twitter.
+6. Rebuild TwitterOAuth object with client credentials and temporary credentials.
+7. Get token credentials from Twitter.
+8. Rebuild TwitterOAuth object with client credentials and token credentials.
+9. Query Twitter API.
+
+Terminology
+===========
+
+The terminology has changed since 0.1.x to better match the draft-hammer-oauth IETF
+RFC. You can read that at http://tools.ietf.org/html/draft-hammer-oauth. Some of the
+terms will differ from those Twitter uses as well.
+
+client credentials - Consumer key/secret you get when registering an app with Twitter.
+temporary credentials - Previously known as the request token.
+token credentials - Previously known as the access token.
+
+Parameters
+==========
+
+There are a number of parameters you can modify after creating a TwitterOAuth object.
+
+Switch an existing TwitterOAuth install to use version 1.1 of the API.
+
+ $connection->$host = "https://api.twitter.com/1.1/";
+
+Custom useragent.
+
+ $connection->useragent = 'Custom useragent string';
+
+Verify Twitters SSL certificate.
+
+ $connection->ssl_verifypeer = TRUE;
+
+There are several more you can find in TwitterOAuth.php.
+
+Extended flow using example code
+================================
+
+To use TwitterOAuth with the Twitter API you need *TwitterOAuth.php*, *OAuth.php* and
+client credentials. You can get client credentials by registering your application at
+[dev.twitter.com/apps](https://dev.twitter.com/apps).
+
+Users start out on connect.php which displays the "Sign in with Twitter" image hyperlinked
+to redirect.php. This button should be displayed on your homepage in your login section. The
+client credentials are saved in config.php as `CONSUMER_KEY` and `CONSUMER_SECRET`. You can
+save a static callback URL in the app settings page, in the config file or use a dynamic
+callback URL later in step 2. In example use https://example.com/callback.php.
+
+1) When a user lands on redirect.php we build a new TwitterOAuth object using the client credentials.
+If you have your own configuration method feel free to use it instead of config.php.
+
+ $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); // Use config.php client credentials
+ $connection = new TwitterOAuth('abc890', '123xyz');
+
+2) Using the built $connection object you will ask Twitter for temporary credentials. The `oauth_callback` value is required.
+
+ $temporary_credentials = $connection->getRequestToken(OAUTH_CALLBACK); // Use config.php callback URL.
+
+3) Now that we have temporary credentials the user has to go to Twitter and authorize the app
+to access and updates their data. You can also pass a second parameter of FALSE to not use [Sign
+in with Twitter](https://dev.twitter.com/docs/auth/sign-twitter).
+
+ $redirect_url = $connection->getAuthorizeURL($temporary_credentials); // Use Sign in with Twitter
+ $redirect_url = $connection->getAuthorizeURL($temporary_credentials, FALSE);
+
+4) You will now have a Twitter URL that you must send the user to.
+
+ https://api.twitter.com/oauth/authenticate?oauth_token=xyz123
+
+5) The user is now on twitter.com and may have to login. Once authenticated with Twitter they will
+will either have to click on allow/deny, or will be automatically redirected back to the callback.
+
+6) Now that the user has returned to callback.php and allowed access we need to build a new
+TwitterOAuth object using the temporary credentials.
+
+ $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'],
+ $_SESSION['oauth_token_secret']);
+
+7) Now we ask Twitter for long lasting token credentials. These are specific to the application
+and user and will act like password to make future requests. Normally the token credentials would
+get saved in your database but for this example we are just using sessions.
+
+ $token_credentials = $connection->getAccessToken($_REQUEST['oauth_verifier']);
+
+8) With the token credentials we build a new TwitterOAuth object.
+
+ $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $token_credentials['oauth_token'],
+ $token_credentials['oauth_token_secret']);
+
+9) And finally we can make requests authenticated as the user. You can GET, POST, and DELETE API
+methods. Directly copy the path from the API documentation and add an array of any parameter
+you wish to include for the API method such as curser or in_reply_to_status_id.
+
+ $account = $connection->get('account/verify_credentials');
+ $status = $connection->post('statuses/update', array('status' => 'Text of status here', 'in_reply_to_status_id' => 123456));
+ $status = $connection->delete('statuses/destroy/12345');
+
+Contributors
+============
+
+* [Abraham Williams](https://twitter.com/abraham) - Main developer, current maintainer.
diff --git a/mod/twitter_api/vendors/twitteroauth/twitterOAuth.php b/mod/twitter_api/vendors/twitteroauth/twitterOAuth.php
new file mode 100644
index 000000000..4c2447c46
--- /dev/null
+++ b/mod/twitter_api/vendors/twitteroauth/twitterOAuth.php
@@ -0,0 +1,241 @@
+<?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 OAuthSignatureMethod_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) {
+ $parameters = array();
+ $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) {
+ $parameters = array();
+ $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 = OAuthRequest::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..b4882bb7f
--- /dev/null
+++ b/mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Make the user set up some alternative ways to login.
+ */
+
+echo '<div>';
+$site = get_config('site');
+echo elgg_echo('twitter_api:interstitial:description', array($site->name));
+echo '</div>';
+
+$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(
+ 'value' => 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..3a3ec93a2
--- /dev/null
+++ b/mod/twitter_api/views/default/plugins/twitter_api/settings.php
@@ -0,0 +1,65 @@
+<?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',
+));
+
+$post_to_twitter = '';
+if (elgg_is_active_plugin('thewire')) {
+ $post_to_twitter_string = elgg_echo('twitter_api:post_to_twitter');
+ $post_to_twitter_view = elgg_view('input/dropdown', array(
+ 'name' => 'params[wire_posts]',
+ 'options_values' => array(
+ 'yes' => elgg_echo('option:yes'),
+ 'no' => elgg_echo('option:no'),
+ ),
+ 'value' => $vars['entity']->wire_posts ? $vars['entity']->wire_posts : 'no',
+ ));
+ $post_to_twitter = "<div>$post_to_twitter_string $post_to_twitter_view</div>";
+}
+
+$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>
+$post_to_twitter
+__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/vegan b/mod/vegan
new file mode 160000
+Subproject e48966e8a43f5da5309a796c5a749f9fcd317a6
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;
+}